From 610b892bd5df7cbb93b2a72c0a307ce6f1924ba3 Mon Sep 17 00:00:00 2001 From: "locadex-agent[bot]" <217277504+locadex-agent[bot]@users.noreply.github.com> Date: Thu, 27 Nov 2025 09:09:12 +0000 Subject: [PATCH] docs(locadex): update translations --- gt-lock.json | 10956 ++++++++------- i18n/jp/code.json | 1013 +- .../current/best-practices/avoid_mutations.md | 2 +- .../best-practices/avoid_optimize_final.md | 2 +- .../current/cloud/features/09_support.md | 2 +- .../projections/1_projections.md | 290 +- ...2_materialized-views-versus-projections.md | 102 +- .../current/data-modeling/schema-design.md | 262 +- .../development/developer-instruction.md | 154 +- .../current/development/index.md | 42 +- .../current/engines/database-engines/index.md | 34 +- .../table-engines/integrations/azure-queue.md | 123 +- .../table-engines/integrations/index.md | 54 +- .../table-engines/integrations/s3queue.md | 319 +- .../table-engines/mergetree-family/index.md | 42 +- .../mergetree-family/mergetree.md | 867 +- .../engines/table-engines/special/alias.md | 115 +- .../engines/table-engines/special/index.md | 58 +- .../install/_snippets/_deb_install.md | 32 +- .../getting-started/install/debian_ubuntu.md | 2 +- .../guides/best-practices/asyncinserts.md | 2 +- .../guides/best-practices/avoidmutations.md | 2 +- .../best-practices/avoidnullablecolumns.md | 2 +- .../best-practices/avoidoptimizefinal.md | 2 +- .../guides/best-practices/bulkinserts.md | 2 +- .../guides/best-practices/partitioningkey.md | 2 +- .../guides/developer/lightweight-delete.md | 2 +- .../current/integrations/apache-beam.md | 153 - .../current/integrations/cli.mdx | 2 +- .../dbms/odbc-with-clickhouse.md | 2 +- .../data-ingestion/etl-tools/apache-beam.md | 6 + .../integrations/data-ingestion/s3/index.md | 643 +- .../data-ingestion/s3/performance.md | 273 +- .../current/interfaces/cli.md | 23 +- .../current/interfaces/formats/Prometheus.md | 30 +- .../core-concepts/primary-indexes.mdx | 14 +- .../current/operations/query-cache.md | 141 +- .../settings.md | 5133 +------ .../current/operations/settings/index.md | 38 +- .../settings/merge-tree-settings.md | 3117 +---- .../operations/settings/settings-formats.md | 2800 +--- .../current/operations/settings/settings.md | 11434 +-------------- .../system-tables/asynchronous_inserts.md | 23 +- .../system-tables/asynchronous_loader.md | 77 +- .../system-tables/azure_queue_settings.md | 13 +- .../operations/system-tables/build_options.md | 11 +- .../operations/system-tables/clusters.md | 69 +- .../operations/system-tables/codecs.md | 21 +- .../operations/system-tables/columns.md | 121 +- .../operations/system-tables/contributors.md | 8 +- .../operations/system-tables/dashboards.md | 14 +- .../system-tables/data_skipping_indices.md | 13 +- .../system-tables/data_type_families.md | 12 +- .../system-tables/database_engines.md | 14 +- .../system-tables/database_replicas.md | 18 +- .../operations/system-tables/databases.md | 19 +- .../system-tables/detached_tables.md | 10 +- .../operations/system-tables/dictionaries.md | 48 +- .../current/operations/system-tables/disks.md | 26 +- .../system-tables/distributed_ddl_queue.md | 26 +- .../system-tables/distribution_queue.md | 18 +- .../operations/system-tables/dns_cache.md | 13 +- .../system-tables/dropped_tables.md | 20 +- .../operations/system-tables/error_log.md | 38 +- .../operations/system-tables/errors.md | 18 +- .../operations/system-tables/events.md | 30 +- .../operations/system-tables/functions.md | 19 +- .../system-tables/graphite_retentions.md | 17 +- .../system-tables/histogram_metrics.md | 25 +- .../system-tables/iceberg_history.md | 13 +- .../current/operations/system-tables/index.md | 140 +- .../operations/system-tables/jemalloc_bins.md | 16 +- .../system-tables/kafka_consumers.md | 30 +- .../operations/system-tables/licenses.md | 11 +- .../system-tables/merge_tree_settings.md | 34 +- .../operations/system-tables/merges.md | 31 +- .../operations/system-tables/metrics.md | 396 +- .../current/operations/system-tables/moves.md | 22 +- .../operations/system-tables/mutations.md | 72 +- .../operations/system-tables/processes.md | 55 +- .../system-tables/projection_parts.md | 73 +- .../system-tables/projection_parts_columns.md | 61 +- .../operations/system-tables/projections.md | 13 +- .../operations/system-tables/query_cache.md | 16 +- .../system-tables/query_condition_cache.md | 13 +- .../operations/system-tables/quota_usage.md | 35 +- .../operations/system-tables/quotas_usage.md | 35 +- .../system-tables/replicated_fetches.md | 21 +- .../operations/system-tables/resources.md | 20 +- .../current/operations/system-tables/roles.md | 14 +- .../operations/system-tables/row_policies.md | 20 +- .../system-tables/s3_queue_settings.md | 18 +- .../operations/system-tables/scheduler.md | 39 +- .../system-tables/schema_inference_cache.md | 21 +- .../system-tables/settings_changes.md | 16 +- .../settings_profile_elements.md | 19 +- .../system-tables/settings_profiles.md | 16 +- .../operations/system-tables/table_engines.md | 20 +- .../operations/system-tables/time_zones.md | 10 +- .../system-tables/user_processes.md | 11 +- .../current/operations/system-tables/users.md | 25 +- .../system-tables/view_refreshes.md | 24 +- .../operations/system-tables/workloads.md | 18 +- .../aggregate-functions/reference/index.md | 157 +- .../data-types/aggregatefunction.md | 70 +- .../data-types/data-types-binary-encoding.md | 64 +- .../functions/arithmetic-functions.md | 1294 +- .../functions/array-functions.md | 5004 +------ .../sql-reference/functions/bit-functions.md | 683 +- .../functions/bitmap-functions.md | 715 +- .../functions/comparison-functions.md | 336 +- .../functions/conditional-functions.md | 399 +- .../functions/date-time-functions.md | 5649 +------- .../functions/distance-functions.md | 619 +- .../functions/encoding-functions.md | 1094 +- .../functions/encryption-functions.md | 383 +- .../functions/ext-dict-functions.md | 2386 +--- .../functions/financial-functions.md | 246 +- .../functions/functions-for-nulls.md | 473 +- .../sql-reference/functions/hash-functions.md | 2639 +--- .../sql-reference/functions/introspection.md | 255 +- .../functions/ip-address-functions.md | 1122 +- .../sql-reference/functions/json-functions.md | 2030 +-- .../functions/logical-functions.md | 199 +- .../sql-reference/functions/math-functions.md | 1291 +- .../sql-reference/functions/nlp-functions.md | 336 +- .../numeric-indexed-vector-functions.md | 692 +- .../functions/other-functions.md | 5451 +------- .../functions/random-functions.md | 813 +- .../functions/rounding-functions.md | 461 +- .../functions/splitting-merging-functions.md | 460 +- .../functions/string-functions.md | 3608 +---- .../functions/string-replace-functions.md | 512 +- .../functions/string-search-functions.md | 2693 +--- .../functions/time-series-functions.md | 424 +- .../functions/time-window-functions.md | 231 +- .../functions/tuple-functions.md | 839 +- .../sql-reference/functions/ulid-functions.md | 94 +- .../sql-reference/functions/url-functions.md | 1404 +- .../sql-reference/functions/uuid-functions.md | 1154 +- .../operators/distributed-ddl.md | 2 +- .../current/sql-reference/operators/index.md | 286 +- .../sql-reference/sql-reference-links.json | 8 +- .../sql-reference/statements/select/index.md | 8 - .../sql-reference/statements/system.md | 442 +- .../current/sql-reference/syntax.md | 421 +- .../sql-reference/table-functions/index.md | 103 +- .../data-exploration/jupyter-notebook.md | 2 +- .../AI_ML/data-exploration/marimo-notebook.md | 59 +- .../observability/clickstack/api-reference.md | 15 + .../current/whats-new/changelog/index.md | 4079 +++--- i18n/ru/code.json | 1101 +- .../current/best-practices/avoid_mutations.md | 2 +- .../best-practices/avoid_optimize_final.md | 2 +- .../03_sql_console_features/01_sql-console.md | 217 +- .../current/cloud/features/09_support.md | 2 +- .../projections/1_projections.md | 334 +- ...2_materialized-views-versus-projections.md | 126 +- .../current/data-modeling/schema-design.md | 270 +- .../development/developer-instruction.md | 128 +- .../current/development/index.md | 40 +- .../current/engines/database-engines/index.md | 32 +- .../current/engines/database-engines/mysql.md | 12 +- .../table-engines/integrations/azure-queue.md | 109 +- .../table-engines/integrations/index.md | 50 +- .../table-engines/integrations/s3queue.md | 302 +- .../table-engines/mergetree-family/index.md | 40 +- .../mergetree-family/mergetree.md | 798 +- .../engines/table-engines/special/alias.md | 97 +- .../engines/table-engines/special/index.md | 52 +- .../install/_snippets/_deb_install.md | 123 +- .../guides/best-practices/asyncinserts.md | 2 +- .../guides/best-practices/avoidmutations.md | 2 +- .../best-practices/avoidnullablecolumns.md | 2 +- .../best-practices/avoidoptimizefinal.md | 2 +- .../guides/best-practices/bulkinserts.md | 2 +- .../guides/best-practices/partitioningkey.md | 2 +- .../guides/developer/lightweight-delete.md | 2 +- .../current/integrations/cli.mdx | 2 +- .../dbms/odbc-with-clickhouse.md | 2 +- .../integrations/data-ingestion/s3/index.md | 661 +- .../integrations/sql-clients/sql-console.md | 7 + .../current/interfaces/cli.md | 27 +- .../current/interfaces/formats/Prometheus.md | 76 +- .../core-concepts/primary-indexes.mdx | 14 +- .../current/operations/query-cache.md | 190 +- .../settings.md | 5143 +------ .../current/operations/settings/index.md | 38 +- .../settings/merge-tree-settings.md | 3289 +---- .../operations/settings/settings-formats.md | 2799 +--- .../current/operations/settings/settings.md | 11477 +--------------- .../system-tables/asynchronous_inserts.md | 19 +- .../system-tables/asynchronous_loader.md | 73 +- .../system-tables/azure_queue_settings.md | 9 - .../operations/system-tables/build_options.md | 9 +- .../operations/system-tables/clusters.md | 71 +- .../operations/system-tables/codecs.md | 13 +- .../operations/system-tables/columns.md | 35 +- .../operations/system-tables/contributors.md | 6 +- .../operations/system-tables/dashboards.md | 12 +- .../system-tables/data_skipping_indices.md | 17 +- .../system-tables/data_type_families.md | 6 +- .../system-tables/database_engines.md | 13 +- .../system-tables/database_replicas.md | 18 +- .../operations/system-tables/databases.md | 22 +- .../system-tables/detached_tables.md | 12 +- .../operations/system-tables/dictionaries.md | 42 +- .../current/operations/system-tables/disks.md | 20 +- .../system-tables/distributed_ddl_queue.md | 23 +- .../system-tables/distribution_queue.md | 20 +- .../operations/system-tables/dns_cache.md | 9 +- .../system-tables/dropped_tables.md | 14 +- .../operations/system-tables/error_log.md | 37 +- .../operations/system-tables/errors.md | 18 +- .../operations/system-tables/events.md | 17 +- .../operations/system-tables/functions.md | 17 +- .../system-tables/graphite_retentions.md | 15 +- .../system-tables/histogram_metrics.md | 26 +- .../system-tables/iceberg_history.md | 13 +- .../current/operations/system-tables/index.md | 140 +- .../operations/system-tables/jemalloc_bins.md | 14 +- .../system-tables/kafka_consumers.md | 26 +- .../operations/system-tables/licenses.md | 12 +- .../system-tables/merge_tree_settings.md | 32 +- .../operations/system-tables/merges.md | 31 +- .../operations/system-tables/metrics.md | 353 +- .../current/operations/system-tables/moves.md | 18 +- .../operations/system-tables/mutations.md | 66 +- .../operations/system-tables/processes.md | 49 +- .../system-tables/projection_parts.md | 71 +- .../system-tables/projection_parts_columns.md | 61 +- .../operations/system-tables/projections.md | 15 +- .../operations/system-tables/query_cache.md | 16 +- .../system-tables/query_condition_cache.md | 15 +- .../operations/system-tables/quota_usage.md | 37 +- .../operations/system-tables/quotas_usage.md | 33 +- .../system-tables/replicated_fetches.md | 21 +- .../operations/system-tables/resources.md | 12 +- .../current/operations/system-tables/roles.md | 10 +- .../operations/system-tables/row_policies.md | 21 +- .../system-tables/s3_queue_settings.md | 17 +- .../operations/system-tables/scheduler.md | 37 +- .../system-tables/schema_inference_cache.md | 17 +- .../system-tables/settings_changes.md | 10 +- .../settings_profile_elements.md | 16 +- .../system-tables/settings_profiles.md | 18 +- .../operations/system-tables/table_engines.md | 20 +- .../operations/system-tables/time_zones.md | 11 +- .../system-tables/user_processes.md | 11 +- .../current/operations/system-tables/users.md | 25 +- .../system-tables/view_refreshes.md | 22 +- .../operations/system-tables/workloads.md | 10 +- .../aggregate-functions/reference/index.md | 155 +- .../data-types/aggregatefunction.md | 65 +- .../data-types/data-types-binary-encoding.md | 102 +- .../functions/arithmetic-functions.md | 1311 +- .../functions/array-functions.md | 5024 +------ .../sql-reference/functions/bit-functions.md | 691 +- .../functions/bitmap-functions.md | 718 +- .../functions/comparison-functions.md | 326 +- .../functions/conditional-functions.md | 396 +- .../functions/date-time-functions.md | 5653 +------- .../functions/distance-functions.md | 621 +- .../functions/encoding-functions.md | 1099 +- .../functions/encryption-functions.md | 379 +- .../functions/ext-dict-functions.md | 2321 +--- .../functions/financial-functions.md | 244 +- .../functions/functions-for-nulls.md | 467 +- .../sql-reference/functions/hash-functions.md | 2638 +--- .../sql-reference/functions/introspection.md | 255 +- .../functions/ip-address-functions.md | 1120 +- .../sql-reference/functions/json-functions.md | 2026 +-- .../functions/logical-functions.md | 197 +- .../sql-reference/functions/math-functions.md | 1287 +- .../sql-reference/functions/nlp-functions.md | 328 +- .../numeric-indexed-vector-functions.md | 676 +- .../functions/other-functions.md | 5505 +------- .../functions/random-functions.md | 809 +- .../functions/rounding-functions.md | 463 +- .../functions/splitting-merging-functions.md | 460 +- .../functions/string-functions.md | 3600 +---- .../functions/string-replace-functions.md | 506 +- .../functions/string-search-functions.md | 2699 +--- .../functions/time-series-functions.md | 405 +- .../functions/time-window-functions.md | 227 +- .../functions/tuple-functions.md | 829 +- .../sql-reference/functions/ulid-functions.md | 92 +- .../sql-reference/functions/url-functions.md | 1399 +- .../sql-reference/functions/uuid-functions.md | 1065 +- .../operators/distributed-ddl.md | 2 +- .../current/sql-reference/operators/index.md | 264 +- .../sql-reference/sql-reference-links.json | 4 +- .../statements/alter/settings-profile.md | 2 +- .../sql-reference/statements/alter/user.md | 40 +- .../sql-reference/statements/create/quota.md | 20 +- .../statements/create/settings-profile.md | 10 +- .../sql-reference/statements/create/user.md | 104 +- .../sql-reference/statements/select/index.md | 7 - .../sql-reference/statements/system.md | 458 +- .../current/sql-reference/syntax.md | 359 +- .../sql-reference/table-functions/index.md | 98 +- .../AI_ML/data-exploration/marimo-notebook.md | 242 +- .../observability/clickstack/api-reference.md | 15 + .../integration-examples/redis-metrics.md | 5 - .../current/whats-new/changelog/index.md | 3779 ++--- i18n/zh/code.json | 1005 +- .../current/best-practices/avoid_mutations.md | 2 +- .../best-practices/avoid_optimize_final.md | 2 +- .../03_sql_console_features/01_sql-console.md | 354 +- .../current/cloud/features/09_support.md | 2 +- .../03_clickpipes/clickpipes_for_cdc.md | 10 +- .../projections/1_projections.md | 269 +- ...2_materialized-views-versus-projections.md | 96 +- .../current/data-modeling/schema-design.md | 19 +- .../development/developer-instruction.md | 170 +- .../current/development/index.md | 40 +- .../current/engines/database-engines/index.md | 32 +- .../current/engines/database-engines/mysql.md | 25 +- .../table-engines/integrations/azure-queue.md | 109 +- .../table-engines/integrations/index.md | 46 +- .../table-engines/integrations/s3queue.md | 345 +- .../table-engines/mergetree-family/index.md | 48 +- .../mergetree-family/mergetree.md | 829 +- .../engines/table-engines/special/alias.md | 86 +- .../engines/table-engines/special/index.md | 56 +- .../install/_snippets/_deb_install.md | 27 + .../getting-started/install/debian_ubuntu.md | 2 +- .../guides/best-practices/asyncinserts.md | 2 +- .../guides/best-practices/avoidmutations.md | 2 +- .../best-practices/avoidnullablecolumns.md | 2 +- .../best-practices/avoidoptimizefinal.md | 2 +- .../guides/best-practices/bulkinserts.md | 2 +- .../guides/best-practices/partitioningkey.md | 2 +- .../guides/developer/lightweight-delete.md | 2 +- .../current/integrations/cli.mdx | 2 +- .../dbms/odbc-with-clickhouse.md | 2 +- .../integrations/data-ingestion/s3/index.md | 1488 +- .../current/interfaces/cli.md | 19 +- .../current/interfaces/formats/Prometheus.md | 30 +- .../core-concepts/primary-indexes.mdx | 12 +- .../current/operations/query-cache.md | 139 +- .../settings.md | 5130 +------ .../current/operations/settings/index.md | 38 +- .../settings/merge-tree-settings.md | 3029 +--- .../operations/settings/settings-formats.md | 2798 +--- .../current/operations/settings/settings.md | 11428 +-------------- .../system-tables/asynchronous_inserts.md | 17 +- .../system-tables/asynchronous_loader.md | 71 +- .../system-tables/azure_queue_settings.md | 17 +- .../operations/system-tables/build_options.md | 11 +- .../operations/system-tables/clusters.md | 69 +- .../operations/system-tables/codecs.md | 21 +- .../operations/system-tables/columns.md | 31 +- .../operations/system-tables/contributors.md | 10 +- .../operations/system-tables/dashboards.md | 20 +- .../system-tables/data_skipping_indices.md | 15 +- .../system-tables/data_type_families.md | 12 +- .../system-tables/database_engines.md | 8 +- .../system-tables/database_replicas.md | 22 +- .../operations/system-tables/databases.md | 17 +- .../system-tables/detached_tables.md | 8 +- .../operations/system-tables/dictionaries.md | 48 +- .../current/operations/system-tables/disks.md | 24 +- .../system-tables/distributed_ddl_queue.md | 34 +- .../system-tables/distribution_queue.md | 16 +- .../operations/system-tables/dns_cache.md | 17 +- .../system-tables/dropped_tables.md | 16 +- .../operations/system-tables/error_log.md | 40 +- .../operations/system-tables/errors.md | 18 +- .../operations/system-tables/events.md | 12 +- .../operations/system-tables/functions.md | 19 +- .../system-tables/graphite_retentions.md | 15 +- .../system-tables/histogram_metrics.md | 23 +- .../system-tables/iceberg_history.md | 13 +- .../current/operations/system-tables/index.md | 140 +- .../operations/system-tables/jemalloc_bins.md | 18 +- .../system-tables/kafka_consumers.md | 24 +- .../operations/system-tables/licenses.md | 11 +- .../system-tables/merge_tree_settings.md | 33 +- .../operations/system-tables/merges.md | 31 +- .../operations/system-tables/metrics.md | 380 +- .../current/operations/system-tables/moves.md | 19 +- .../operations/system-tables/mutations.md | 60 +- .../operations/system-tables/processes.md | 53 +- .../system-tables/projection_parts.md | 73 +- .../system-tables/projection_parts_columns.md | 63 +- .../operations/system-tables/projections.md | 15 +- .../operations/system-tables/query_cache.md | 16 +- .../system-tables/query_condition_cache.md | 7 - .../operations/system-tables/quota_usage.md | 37 +- .../operations/system-tables/quotas_usage.md | 35 +- .../system-tables/replicated_fetches.md | 23 +- .../operations/system-tables/resources.md | 16 +- .../current/operations/system-tables/roles.md | 14 +- .../operations/system-tables/row_policies.md | 22 +- .../system-tables/s3_queue_settings.md | 16 +- .../operations/system-tables/scheduler.md | 35 +- .../system-tables/schema_inference_cache.md | 32 +- .../system-tables/settings_changes.md | 12 +- .../settings_profile_elements.md | 19 +- .../system-tables/settings_profiles.md | 14 +- .../operations/system-tables/table_engines.md | 20 +- .../operations/system-tables/time_zones.md | 10 +- .../system-tables/user_processes.md | 11 +- .../current/operations/system-tables/users.md | 27 +- .../system-tables/view_refreshes.md | 24 +- .../operations/system-tables/workloads.md | 18 +- .../aggregate-functions/reference/index.md | 157 +- .../data-types/aggregatefunction.md | 60 +- .../data-types/data-types-binary-encoding.md | 58 +- .../functions/arithmetic-functions.md | 1290 +- .../functions/array-functions.md | 4993 +------ .../sql-reference/functions/bit-functions.md | 687 +- .../functions/bitmap-functions.md | 713 +- .../functions/comparison-functions.md | 341 +- .../functions/conditional-functions.md | 402 +- .../functions/date-time-functions.md | 5655 +------- .../functions/distance-functions.md | 617 +- .../functions/encoding-functions.md | 1088 +- .../functions/encryption-functions.md | 383 +- .../functions/ext-dict-functions.md | 2348 +--- .../functions/financial-functions.md | 246 +- .../functions/functions-for-nulls.md | 475 +- .../sql-reference/functions/hash-functions.md | 2639 +--- .../sql-reference/functions/introspection.md | 257 +- .../functions/ip-address-functions.md | 1122 +- .../sql-reference/functions/json-functions.md | 2020 +-- .../functions/logical-functions.md | 199 +- .../sql-reference/functions/math-functions.md | 1291 +- .../sql-reference/functions/nlp-functions.md | 333 +- .../numeric-indexed-vector-functions.md | 678 +- .../functions/other-functions.md | 5452 +------- .../functions/random-functions.md | 811 +- .../functions/rounding-functions.md | 469 +- .../functions/splitting-merging-functions.md | 462 +- .../functions/string-functions.md | 3600 +---- .../functions/string-replace-functions.md | 512 +- .../functions/string-search-functions.md | 2691 +--- .../functions/time-series-functions.md | 420 +- .../functions/time-window-functions.md | 231 +- .../functions/tuple-functions.md | 831 +- .../sql-reference/functions/ulid-functions.md | 98 +- .../sql-reference/functions/url-functions.md | 1412 +- .../sql-reference/functions/uuid-functions.md | 1086 +- .../operators/distributed-ddl.md | 2 +- .../current/sql-reference/operators/index.md | 278 +- .../sql-reference/sql-reference-links.json | 6 +- .../statements/create/function.md | 34 +- .../sql-reference/statements/create/quota.md | 14 +- .../statements/create/row-policy.md | 50 +- .../statements/create/settings-profile.md | 12 +- .../sql-reference/statements/select/index.md | 8 - .../sql-reference/statements/system.md | 443 +- .../current/sql-reference/syntax.md | 418 +- .../sql-reference/table-functions/index.md | 101 +- .../AI_ML/data-exploration/marimo-notebook.md | 44 +- .../observability/clickstack/api-reference.md | 15 + .../current/whats-new/changelog/index.md | 4066 +++--- 458 files changed, 25275 insertions(+), 229152 deletions(-) delete mode 100644 i18n/jp/docusaurus-plugin-content-docs/current/integrations/apache-beam.md create mode 100644 i18n/jp/docusaurus-plugin-content-docs/current/use-cases/observability/clickstack/api-reference.md create mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/use-cases/observability/clickstack/api-reference.md create mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/use-cases/observability/clickstack/api-reference.md diff --git a/gt-lock.json b/gt-lock.json index 1f746dd8d5f..4e67ef58d2b 100644 --- a/gt-lock.json +++ b/gt-lock.json @@ -35,161 +35,172 @@ "jp": { "updatedAt": "2025-11-26T07:24:12.065Z" } + }, + "89619e87afb3075fb8d7e908131d96b27f2ee4544b802e747e4ac0033cbb7775": { + "jp": { + "updatedAt": "2025-11-27T09:08:51.750Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:51.751Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:51.751Z" + } } }, "24bb0ca99917fdfda706556c75c640db16b12f966ea7bd58e1e9a8bdf4be5146": { "40c867ec4bd9ff53ca41f19ef2fb11bce1cd4d6f82211f50a350bacfd56350a1": { "jp": { - "updatedAt": "2025-11-26T07:24:02.665Z" + "updatedAt": "2025-11-27T09:08:51.763Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.665Z" + "updatedAt": "2025-11-27T09:08:51.763Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.067Z" + "updatedAt": "2025-11-27T09:08:51.758Z" } } }, "2f81498e8b60c281ca710a3a25f611bf79424982fa85bce630e1d4182f252536": { "e5431d96bed4f0f93b507ffa84836d28b1d715ac31c199864a10370ec3b6f040": { "jp": { - "updatedAt": "2025-11-26T07:24:12.066Z" + "updatedAt": "2025-11-27T09:08:51.753Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.060Z" + "updatedAt": "2025-11-27T09:08:51.736Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.066Z" + "updatedAt": "2025-11-27T09:08:51.756Z" } } }, "37e1e1dcfe884bd88e97aa22d6ed7fc14323b326449d12f0a5644f15bd4ba087": { "bd75344d33495d82bb1ddbeeb77d5b1f53a6ecb5f788cb9eadaa606a67b5ba96": { "jp": { - "updatedAt": "2025-11-26T07:24:02.664Z" + "updatedAt": "2025-11-27T09:08:51.761Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.665Z" + "updatedAt": "2025-11-27T09:08:51.761Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.665Z" + "updatedAt": "2025-11-27T09:08:51.763Z" } } }, "49041ac358e6a0f1cdae73923da607add5f9d37fe3320250b5457924d09bcecc": { "d61c6739096f5de9a1f340500324926cc206fe878ab16df77def05d0ba746d3c": { "jp": { - "updatedAt": "2025-11-26T07:24:02.666Z" + "updatedAt": "2025-11-27T09:08:51.763Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.665Z" + "updatedAt": "2025-11-27T09:08:51.762Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.067Z" + "updatedAt": "2025-11-27T09:08:51.759Z" } } }, "4abc97ebd23c7b3dacc0e18e77499272b51b908bd0c2a7a823d153d3c00f7613": { "7817d141aff4e4b1ceaca87c554c551bc1add23bd534611e2704fba56223fbfe": { "jp": { - "updatedAt": "2025-11-26T07:24:02.664Z" + "updatedAt": "2025-11-27T09:08:51.761Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.665Z" + "updatedAt": "2025-11-27T09:08:51.762Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.067Z" + "updatedAt": "2025-11-27T09:08:51.758Z" } } }, "4e7333f7ff430819ccfae5b1f2b2ee97508f58db11c3e67c31430385b0618503": { "1a899ad20af5d3dc3c495e6ddc0c3ff5aacc9df838675e487a6910da0a531675": { "jp": { - "updatedAt": "2025-11-26T07:24:12.065Z" + "updatedAt": "2025-11-27T09:08:51.753Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.067Z" + "updatedAt": "2025-11-27T09:08:51.756Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.066Z" + "updatedAt": "2025-11-27T09:08:51.756Z" } } }, "6f13745927dfcaff0a5b759cdfc9dc47aba26e811ab26776ee363cd821f7d585": { "be6c5629590606c77cd44d60b8cb153a6e8b1ae6d9f710967b3ea692cfc8cb6d": { "jp": { - "updatedAt": "2025-11-26T07:24:02.664Z" + "updatedAt": "2025-11-27T09:08:51.760Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.067Z" + "updatedAt": "2025-11-27T09:08:51.758Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.663Z" + "updatedAt": "2025-11-27T09:08:51.759Z" } } }, "8ad40f5399ed36401edb12df869b1d441ff2d635581938c63d4f0a611fb977ae": { "16565c6a0928275a3a601a45f18823227dc886a00aad5531244bec633d3e8af4": { "jp": { - "updatedAt": "2025-11-26T07:24:02.671Z" + "updatedAt": "2025-11-27T09:08:51.774Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.671Z" + "updatedAt": "2025-11-27T09:08:51.775Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.067Z" + "updatedAt": "2025-11-27T09:08:51.757Z" } } }, "a3ea3f0c344313a1d3ad7969f1c82ef13af419e6eec98da91153c8735fd46730": { "df3510130e5bdcdacd162718bb228e62987c548fea96f8a9e94123cc6b9a78d5": { "jp": { - "updatedAt": "2025-11-26T07:24:12.065Z" + "updatedAt": "2025-11-27T09:08:51.753Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.066Z" + "updatedAt": "2025-11-27T09:08:51.753Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.065Z" + "updatedAt": "2025-11-27T09:08:51.752Z" } } }, "b4b7e3ea48cb57c88168d17bf4d4f7d74e58a613803386d3229332939508c542": { "67faf8569421939ba33d4c9fdc3b64f28fcc3bc298cc8c8b43a29bf3499a6898": { "jp": { - "updatedAt": "2025-11-26T07:24:02.671Z" + "updatedAt": "2025-11-27T09:08:51.776Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.067Z" + "updatedAt": "2025-11-27T09:08:51.757Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.671Z" + "updatedAt": "2025-11-27T09:08:51.775Z" } } }, "bed5256b181dbcf92c02187749ebbf45c60b6bbfdee1789c1848984b6be1d78d": { "614647c380ff18e7b1672f19190809fcf15ba05429ff7f93a33f6c77255ba9ba": { "jp": { - "updatedAt": "2025-11-26T07:24:02.664Z" + "updatedAt": "2025-11-27T09:08:51.760Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.665Z" + "updatedAt": "2025-11-27T09:08:51.763Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.067Z" + "updatedAt": "2025-11-27T09:08:51.759Z" } } }, "c2811557e4f56ffd6e37b0f9f6558971e9d45005c22c3c19ebaef586f1591687": { "b9aea39ae1b4e63fef7a92d27750dfc746ac0ac174e77a895050ed0d24ff1ea7": { "jp": { - "updatedAt": "2025-11-26T07:24:12.060Z" + "updatedAt": "2025-11-27T09:08:51.736Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.066Z" + "updatedAt": "2025-11-27T09:08:51.754Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.065Z" + "updatedAt": "2025-11-27T09:08:51.752Z" } } }, @@ -218,403 +229,403 @@ }, "a4c073207b34a9e6e51079c57f0e06190c406d676367e982df527e7379cf105d": { "jp": { - "updatedAt": "2025-11-26T07:24:12.064Z" + "updatedAt": "2025-11-27T09:08:51.748Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.065Z" + "updatedAt": "2025-11-27T09:08:51.750Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.064Z" + "updatedAt": "2025-11-27T09:08:51.749Z" } } }, "d59e7e7594ae44f151cb9c65dc0cf67dc9998af7e3a974cffc3d0f0dabce2e18": { "7f90a5a780c1bb26935f70fb9cdd36714ca975e36d84b530b0b75f565410ba0a": { "jp": { - "updatedAt": "2025-11-26T07:24:12.066Z" + "updatedAt": "2025-11-27T09:08:51.754Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.066Z" + "updatedAt": "2025-11-27T09:08:51.755Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.066Z" + "updatedAt": "2025-11-27T09:08:51.756Z" } } }, "d89bc73ed23da882f0c45593180a3989cb6844bd38d6496ab6cb5ab328d51083": { "42fe50c1e729beb1bfa14d29e80c4f579a068ebbfa39aa1ffe25b2bb963a815a": { "jp": { - "updatedAt": "2025-11-26T07:24:02.672Z" + "updatedAt": "2025-11-27T09:08:51.776Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.671Z" + "updatedAt": "2025-11-27T09:08:51.776Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.671Z" + "updatedAt": "2025-11-27T09:08:51.775Z" } } }, "e8ae18c3678baf91b2255e5eab22effc78193c605230851316718cfb95063b2c": { "b8eaf5b30dc66a5bf4e27198f07863a95cd60a2e8b15d9fe7e86cc6f6eb603a7": { "jp": { - "updatedAt": "2025-11-26T07:24:02.672Z" + "updatedAt": "2025-11-27T09:08:51.776Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.671Z" + "updatedAt": "2025-11-27T09:08:51.775Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.671Z" + "updatedAt": "2025-11-27T09:08:51.776Z" } } }, "e92405c74b1c19a280775296a5640f2c7646bfabd9d6af48d6359d9a4f09c9d8": { "c9015dfa533bb72f0fe4f1f5a455b0a5497c12b645e908ee88d9686adff07027": { "jp": { - "updatedAt": "2025-11-26T07:24:02.664Z" + "updatedAt": "2025-11-27T09:08:51.760Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.067Z" + "updatedAt": "2025-11-27T09:08:51.759Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.666Z" + "updatedAt": "2025-11-27T09:08:51.764Z" } } }, "ea04f6329e37f5487414c9b64a5e1602d705f1fc914807a5e16d95932f4ded16": { "c2794c8cfb2c5d8f3ad408c1a6ee6d92accd0948ff2682cca78897d7cef83daf": { "jp": { - "updatedAt": "2025-11-26T07:24:12.066Z" + "updatedAt": "2025-11-27T09:08:51.754Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.066Z" + "updatedAt": "2025-11-27T09:08:51.755Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.066Z" + "updatedAt": "2025-11-27T09:08:51.754Z" } } }, "ed828a4311942b25614d0fd962b572a6dc329c0d92a3891dce42290c1d8324f1": { "78977a9c19b7aa2ba08361a0d6ca3390d032f6997a67d280a40d8974f768bb52": { "jp": { - "updatedAt": "2025-11-26T07:24:12.067Z" + "updatedAt": "2025-11-27T09:08:51.756Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.065Z" + "updatedAt": "2025-11-27T09:08:51.752Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.067Z" + "updatedAt": "2025-11-27T09:08:51.757Z" } } }, "ef555d903b99c706a7fbc048a6888f3d3743693968bc76912f338d53af846b0c": { "c84825f7cf888bad7b7b5ec57d4a3941f8dc40c7526398600864fd18a77516ef": { "zh": { - "updatedAt": "2025-11-26T07:24:02.664Z" + "updatedAt": "2025-11-27T09:08:51.761Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.665Z" + "updatedAt": "2025-11-27T09:08:51.762Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.664Z" + "updatedAt": "2025-11-27T09:08:51.760Z" } } }, "fb2a4bdb7f2883fa7ac9878a6d4e978def652c408e4ef95784547eef9e313dbb": { "20e4763f0f7057430907de10bf00a918aa2e762becf34af686b125a9da4fe458": { "jp": { - "updatedAt": "2025-11-26T07:24:12.060Z" + "updatedAt": "2025-11-27T09:08:51.735Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.060Z" + "updatedAt": "2025-11-27T09:08:51.735Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.066Z" + "updatedAt": "2025-11-27T09:08:51.755Z" } } }, "22760d417a52c66f14bee182587d458d0737a616dd14cb09748b4c725fc5809f": { "c6ca08107fa6822548ad3adc5de4b6fdf1d9860224c2cd62047f42bce72b1c12": { "jp": { - "updatedAt": "2025-11-26T07:24:02.705Z" + "updatedAt": "2025-11-27T09:08:51.859Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.705Z" + "updatedAt": "2025-11-27T09:08:51.858Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.908Z" + "updatedAt": "2025-11-27T09:08:59.346Z" } } }, "3e38c1623307fe1538f034436996c45b6ce42cebe6a35b146ba34a354e7b226a": { "7d9c49d88230712b6849bcab6640651373295cad7888223291eb46da868626e3": { "jp": { - "updatedAt": "2025-11-26T07:24:18.912Z" + "updatedAt": "2025-11-27T09:08:59.351Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.910Z" + "updatedAt": "2025-11-27T09:08:59.350Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.910Z" + "updatedAt": "2025-11-27T09:08:59.349Z" } } }, "434f73c99193146064105db19ce337122de0d78915918472d56f5393dc41a913": { "07acf0a2f2bf2cdedbe6696ce78f98b197df5722eecc5a214cf1d15173619bb2": { "jp": { - "updatedAt": "2025-11-26T07:24:18.914Z" + "updatedAt": "2025-11-27T09:08:59.355Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.908Z" + "updatedAt": "2025-11-27T09:08:59.346Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.908Z" + "updatedAt": "2025-11-27T09:08:59.347Z" } } }, "4fa6a5d68016ad855e418c2e88b5a37793256913a0caceaf33014edf61107509": { "1ed9748c6ebe33e1898f694a866a318e321540cc9186ac29b7621da0715118c5": { "jp": { - "updatedAt": "2025-11-26T07:24:18.912Z" + "updatedAt": "2025-11-27T09:08:59.352Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.912Z" + "updatedAt": "2025-11-27T09:08:59.352Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.909Z" + "updatedAt": "2025-11-27T09:08:59.348Z" } } }, "5dcaaaf5a4d53dc33da6680731d152b4a88a8d4e9c6058a18e521c7629865fb2": { "11c49d7827257644d730176fb691cb3d9705b0b2caafb1ee0ef7b70e70446275": { "jp": { - "updatedAt": "2025-11-26T07:24:18.905Z" + "updatedAt": "2025-11-27T09:08:59.344Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.906Z" + "updatedAt": "2025-11-27T09:08:59.344Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.906Z" + "updatedAt": "2025-11-27T09:08:59.345Z" } } }, "6687b017941230cd05da5ec3d3b0b3a66c8da07927fdb43f62a2732581460749": { "df9979ccd3ace6a4ab1b704d9d4b233c9092cf3e747331f0d940179f918f015b": { "jp": { - "updatedAt": "2025-11-26T07:24:02.673Z" + "updatedAt": "2025-11-27T09:08:51.779Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.672Z" + "updatedAt": "2025-11-27T09:08:51.777Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.673Z" + "updatedAt": "2025-11-27T09:08:51.778Z" } } }, "69aa1e22d1867f2dd9082998e597234169f92ed3ba4c3d6af26b34ffa82e4a48": { "aea97333102d80bfe523bef5b3932706938c1ab2307337cf20451a0633f0d7a0": { "jp": { - "updatedAt": "2025-11-26T07:24:18.909Z" + "updatedAt": "2025-11-27T09:08:59.347Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.908Z" + "updatedAt": "2025-11-27T09:08:59.346Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.906Z" + "updatedAt": "2025-11-27T09:08:59.344Z" } } }, "78ae413a62554c8c5ae5ac8301b68726066573d500bb6c8caabdecefd781bb3f": { "754657766dba43bf89b81e0a5c15e318411e3d1782280b5ae5d185edc97b8e9b": { "jp": { - "updatedAt": "2025-11-26T07:24:02.705Z" + "updatedAt": "2025-11-27T09:08:51.858Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.704Z" + "updatedAt": "2025-11-27T09:08:51.858Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.907Z" + "updatedAt": "2025-11-27T09:08:59.346Z" } } }, "7c0a1f3dadfd423b5f66993109c1e8bde0a0b4ff555067d9e6cd275bdaa7a391": { "ef65d65a01188f23ada0aa6a4be2fd11257542de621c6ad17c666a4b0b2aabf4": { "jp": { - "updatedAt": "2025-11-26T07:24:18.913Z" + "updatedAt": "2025-11-27T09:08:59.354Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.913Z" + "updatedAt": "2025-11-27T09:08:59.353Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.913Z" + "updatedAt": "2025-11-27T09:08:59.353Z" } } }, "8d9acd4ed372d08f28519dfb01b6900545df9f42502ac21f0ef6bd86b724c724": { "3ca361084040c6efbaef261b3b4c88e38d022539f3e58645a4023be45b9ed7f2": { "jp": { - "updatedAt": "2025-11-26T07:24:18.912Z" + "updatedAt": "2025-11-27T09:08:59.352Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.910Z" + "updatedAt": "2025-11-27T09:08:59.349Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.908Z" + "updatedAt": "2025-11-27T09:08:59.347Z" } } }, "902fba8b39d6b163ee66698d8bd12433740962a53ec93d756ebdc9d11cc5c531": { "dc72366dcf698c0d7f7b5eed229fd9a7dbb9776362cc9399cf927769376a9098": { "jp": { - "updatedAt": "2025-11-26T07:24:18.905Z" + "updatedAt": "2025-11-27T09:08:59.343Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.906Z" + "updatedAt": "2025-11-27T09:08:59.344Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.906Z" + "updatedAt": "2025-11-27T09:08:59.344Z" } } }, "9414d7ed4d45271d4677e8083e81b7732a750c4dcd8dc182b14ce11749a9ec63": { "55348a4fc23db936f15885093540b12ab2d7159c2a91617e4058fef961a3c4ea": { "jp": { - "updatedAt": "2025-11-26T07:24:02.672Z" + "updatedAt": "2025-11-27T09:08:51.778Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.672Z" + "updatedAt": "2025-11-27T09:08:51.777Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.673Z" + "updatedAt": "2025-11-27T09:08:51.778Z" } } }, "9ac02f1c2289520aeb58725683781053f5ba6bf828b2e8585540596060f1f416": { "ae1a2a308feb0c5c6d10c67047a4b5867fd643296e4e816743b7e2e297fa0f5b": { "jp": { - "updatedAt": "2025-11-26T07:24:18.907Z" + "updatedAt": "2025-11-27T09:08:59.345Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.907Z" + "updatedAt": "2025-11-27T09:08:59.346Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.705Z" + "updatedAt": "2025-11-27T09:08:51.859Z" } } }, "9c7cf003973e27e4edaecd818b57b1e653cdfc8e936c45c67e314eb7123327be": { "1bca9e04eb1cf2d68b948ebb6ff7b813d50c8faada3f1ee2a8c561e9d96d6882": { "jp": { - "updatedAt": "2025-11-26T07:24:02.673Z" + "updatedAt": "2025-11-27T09:08:51.779Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.673Z" + "updatedAt": "2025-11-27T09:08:51.779Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.665Z" + "updatedAt": "2025-11-27T09:08:51.762Z" } } }, "9d1a4cd9443c6b88ad09c86205631318b2554cff25df4445681bef27a63f1923": { "6349c4d8161b7c14d291e4b3a1c44b280c0eb9f067739c2cbeccc19c6800a2de": { "ru": { - "updatedAt": "2025-11-26T07:24:18.913Z" + "updatedAt": "2025-11-27T09:08:59.353Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.913Z" + "updatedAt": "2025-11-27T09:08:59.354Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:18.912Z" + "updatedAt": "2025-11-27T09:08:59.352Z" } } }, "abe1e09771cc949a765515b0f1ae2d0c4a6ab90fceae133c7ea3efdc49fb65a6": { "3a86b5256b89e144630a5cab1fb1ee8cee76bb30374fd9a861dacc440a7b8bd9": { "jp": { - "updatedAt": "2025-11-26T07:24:02.705Z" + "updatedAt": "2025-11-27T09:08:51.859Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.704Z" + "updatedAt": "2025-11-27T09:08:51.857Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.704Z" + "updatedAt": "2025-11-27T09:08:51.857Z" } } }, "ad7599fbe857ed33f8231ed240a179e73c2e77cfa5e658ffca7502e66d2eeb8d": { "fadc1396d5e8d2ef81e08c49dd8a08b01468ff70c1b1463a692904b2403b88dc": { "jp": { - "updatedAt": "2025-11-26T07:24:18.906Z" + "updatedAt": "2025-11-27T09:08:59.344Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.907Z" + "updatedAt": "2025-11-27T09:08:59.345Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.907Z" + "updatedAt": "2025-11-27T09:08:59.345Z" } } }, "b299c52ac5ef4f3399408a89f700027a4da61547b988cd85ef190b1cd544d809": { "ab3b1379019677d4f056b27b40d79c7a1d368792ecee4e8e04d9224e7f40f825": { "jp": { - "updatedAt": "2025-11-26T07:24:18.911Z" + "updatedAt": "2025-11-27T09:08:59.351Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.909Z" + "updatedAt": "2025-11-27T09:08:59.348Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.911Z" + "updatedAt": "2025-11-27T09:08:59.351Z" } } }, "b776eb4f7e91ceadeb1cd902e4a72be31912c8f40357421634f01d720427d7cf": { "a157eb7d7ffd46e8626bd3b8ed555fd32deed480e675bf80cec9536c2cc53b70": { "jp": { - "updatedAt": "2025-11-26T07:24:18.910Z" + "updatedAt": "2025-11-27T09:08:59.349Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.908Z" + "updatedAt": "2025-11-27T09:08:59.347Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.912Z" + "updatedAt": "2025-11-27T09:08:59.352Z" } } }, "d294fb78df318396bfabb26180e94ed0286f348799a54a338dbcac4df2d501a8": { "2c1ad0e8f79ff31317243d7b0ba63abc05a794bb4cf50ddf3ab6a05a73136433": { "jp": { - "updatedAt": "2025-11-26T07:24:18.907Z" + "updatedAt": "2025-11-27T09:08:59.346Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.906Z" + "updatedAt": "2025-11-27T09:08:59.345Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.907Z" + "updatedAt": "2025-11-27T09:08:59.345Z" } } }, "fb88079d51f44c0605f104c400878c73b1676f5d7360de0915e1f533962516d7": { "83b74506a046cca4bef2d9a75f263d66bc8cbdf6902a726a083fb24ba240c90a": { "jp": { - "updatedAt": "2025-11-26T07:24:18.913Z" + "updatedAt": "2025-11-27T09:08:59.353Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.910Z" + "updatedAt": "2025-11-27T09:08:59.350Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.909Z" + "updatedAt": "2025-11-27T09:08:59.348Z" } } }, "08c0c301774aaa88b81ec6aa095f55e7824eafa1cbace5b623dc7c79a65127d2": { "69fd950d01a73a4628cd2ff26fd88bc864432af7ec9c2a0b214e105e41696130": { "jp": { - "updatedAt": "2025-11-26T07:24:18.909Z" + "updatedAt": "2025-11-27T09:08:59.348Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.912Z" + "updatedAt": "2025-11-27T09:08:59.352Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.910Z" + "updatedAt": "2025-11-27T09:08:59.349Z" } } }, @@ -632,1001 +643,1001 @@ }, "9c5e775eb155a68364a368b61b5125ad1624928bd6d74c078e880457d501c280": { "jp": { - "updatedAt": "2025-11-26T07:24:02.707Z" + "updatedAt": "2025-11-27T09:08:51.865Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.707Z" + "updatedAt": "2025-11-27T09:08:51.865Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.707Z" + "updatedAt": "2025-11-27T09:08:51.865Z" } } }, "3a3e4cf73cd863c0103607437eb8b4f6836337cfd7e83bdd562015c4ed9cdd6d": { "086e3e89b5951923ddf12df84d937ba158991125876b5f6d842de358bbe8b3fe": { "jp": { - "updatedAt": "2025-11-26T07:24:02.708Z" + "updatedAt": "2025-11-27T09:08:51.867Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.708Z" + "updatedAt": "2025-11-27T09:08:51.867Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.709Z" + "updatedAt": "2025-11-27T09:08:51.868Z" } } }, "4603feefc1d42187f8cdc33b837b161e0fc3b5c8376d6cd191411f0dd562ad31": { "a1d7bce3db202c9b4687ae92810df1230088ea23aa2c8009af476b02206e65cc": { "jp": { - "updatedAt": "2025-11-26T07:24:18.915Z" + "updatedAt": "2025-11-27T09:08:59.356Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.707Z" + "updatedAt": "2025-11-27T09:08:51.864Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.916Z" + "updatedAt": "2025-11-27T09:08:59.357Z" } } }, "490be0352814516ee6591ee5f8e07875e2139020d864d540140e0fa494298d5d": { "d23d41d10643691da14255ad0f85c7b97475432325af1c17be68df9efc12be5a": { "jp": { - "updatedAt": "2025-11-26T07:24:18.914Z" + "updatedAt": "2025-11-27T09:08:59.354Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.914Z" + "updatedAt": "2025-11-27T09:08:59.355Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.914Z" + "updatedAt": "2025-11-27T09:08:59.354Z" } } }, "55b28fab1ba94c3606d033461bcc70376b43d613080d008d80ef6eeee311b377": { "256a3209f20639b3de6006d270d351fa95df57bd7f581ffda6773fd8eba690c7": { "jp": { - "updatedAt": "2025-11-26T07:24:02.710Z" + "updatedAt": "2025-11-27T09:08:51.870Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.708Z" + "updatedAt": "2025-11-27T09:08:51.866Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.708Z" + "updatedAt": "2025-11-27T09:08:51.867Z" } } }, "617059ab9b90c50e356730de729f0ae69ee3763a1e279dd764ff91a7fb180dcc": { "d57355b7ce2374ff50888d99d345884771d8478a28a50565e264c7183444541e": { "jp": { - "updatedAt": "2025-11-26T07:24:02.710Z" + "updatedAt": "2025-11-27T09:08:51.871Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.709Z" + "updatedAt": "2025-11-27T09:08:51.868Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.709Z" + "updatedAt": "2025-11-27T09:08:51.867Z" } } }, "752a92de3795a78c42039024533716b1bebd226dc5c16f6d9e6c32db92868aa9": { "3a70208f4d63a66f6cafa72e823a27c94a0b217c643d65060e75846cf03db29d": { "jp": { - "updatedAt": "2025-11-26T07:24:02.711Z" + "updatedAt": "2025-11-27T09:08:51.873Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.712Z" + "updatedAt": "2025-11-27T09:08:51.875Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.712Z" + "updatedAt": "2025-11-27T09:08:51.875Z" } } }, "7c8202b183dd3bd51127bf5cff1d877fc101a710d10076050d3769cec7237315": { "cce8610caf1b6ee18be42bc4b4573a409a2178a60d7e7fdf9aa312bb9a0e96af": { "jp": { - "updatedAt": "2025-11-26T07:24:02.709Z" + "updatedAt": "2025-11-27T09:08:51.868Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.911Z" + "updatedAt": "2025-11-27T09:08:59.351Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.913Z" + "updatedAt": "2025-11-27T09:08:59.353Z" } } }, "7d8c9d047aa047d949a0099bf7badab51bf4cbb1242283616136def6a2087241": { "ae00c1636361dff35e6ca1fc517dd76ec664cbc4f992d5bcfebb7e2a76f626c4": { "jp": { - "updatedAt": "2025-11-26T07:24:18.911Z" + "updatedAt": "2025-11-27T09:08:59.350Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.912Z" + "updatedAt": "2025-11-27T09:08:59.351Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.910Z" + "updatedAt": "2025-11-27T09:08:59.350Z" } } }, "828d49017ac2a72d1fb53055bb4787df9014bcdf6914a82ba88ded05b27ec9d4": { "9d68c2d46ac27369e5a5becf238948336518cad4fd978e7648cd41b1f743b1b1": { "jp": { - "updatedAt": "2025-11-26T07:24:02.713Z" + "updatedAt": "2025-11-27T09:08:51.877Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.713Z" + "updatedAt": "2025-11-27T09:08:51.878Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.713Z" + "updatedAt": "2025-11-27T09:08:51.876Z" } } }, "9970d9a6d501f36cf179c0419231b9d795a4c633dddeb9b278e8ba7a601a3f30": { "5509618b18f9e3d905b42bcca3ca87b185e363a986c08a3c7adaa67ea9d4602e": { "jp": { - "updatedAt": "2025-11-26T07:24:18.912Z" + "updatedAt": "2025-11-27T09:08:59.352Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.912Z" + "updatedAt": "2025-11-27T09:08:59.353Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.908Z" + "updatedAt": "2025-11-27T09:08:59.347Z" } } }, "a1bad3f4a716dc84c050e5be3e8486b6c74375173ac25b4b6faa1e07928f68dc": { "2ea331fabd4829ebc7e1af163a669bd7da7ebae75dc79796126ab275fd4d3c95": { "jp": { - "updatedAt": "2025-11-26T07:24:18.910Z" + "updatedAt": "2025-11-27T09:08:59.349Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.909Z" + "updatedAt": "2025-11-27T09:08:59.348Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.913Z" + "updatedAt": "2025-11-27T09:08:59.354Z" } } }, "b5fa886fabf17ebc48a6ca47fc6a8992d00da4b99785793543e0d888695a2688": { "259e7cbd211ad2a2649e5a8f0da300650ca51664a447e45289d100bfcdfc34d1": { "jp": { - "updatedAt": "2025-11-26T07:24:02.708Z" + "updatedAt": "2025-11-27T09:08:51.866Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.708Z" + "updatedAt": "2025-11-27T09:08:51.866Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.711Z" + "updatedAt": "2025-11-27T09:08:51.872Z" } } }, "c1a7d6a20f956b50b1038cee0a820dd57189fc686d14660b023d1fc67ab2e1e9": { "dbc44ae26a03c1b8c3405262a6dd56a831c655163c2cd640d1e27879c8e4aead": { "jp": { - "updatedAt": "2025-11-26T07:24:18.914Z" + "updatedAt": "2025-11-27T09:08:59.355Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.914Z" + "updatedAt": "2025-11-27T09:08:59.354Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.914Z" + "updatedAt": "2025-11-27T09:08:59.355Z" } } }, "c369c0aa928f8264daf73b2cb8b5d20b0f760cd84c596ca63fb6e80bf182b3ac": { "081e5ae543866b5886ecf7decd8d4a80af7f854626b8b8136631cf04a6c7a9f8": { "jp": { - "updatedAt": "2025-11-26T07:24:02.709Z" + "updatedAt": "2025-11-27T09:08:51.869Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.708Z" + "updatedAt": "2025-11-27T09:08:51.867Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.709Z" + "updatedAt": "2025-11-27T09:08:51.867Z" } } }, "c6c433287e0c8c560d8ccfdb9dab1b764948e7aad08d8083787ea5a2ba4ffa25": { "3fa66f5214cb83c0d151b0adefad829fdec772c62100ad8be67b2c2d29a51136": { "jp": { - "updatedAt": "2025-11-26T07:24:02.712Z" + "updatedAt": "2025-11-27T09:08:51.876Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.710Z" + "updatedAt": "2025-11-27T09:08:51.871Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.712Z" + "updatedAt": "2025-11-27T09:08:51.874Z" } } }, "cee9dba64ce2a735e188505d45af71b74c5cd69ece6c6e7512832d84898157a2": { "ba71fb39dc5dad8ed0cc9385af226ee8ccfe87b891afdfae44d4b68d6a6800ce": { "jp": { - "updatedAt": "2025-11-26T07:24:02.709Z" + "updatedAt": "2025-11-27T09:08:51.868Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.709Z" + "updatedAt": "2025-11-27T09:08:51.869Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.708Z" + "updatedAt": "2025-11-27T09:08:51.866Z" } } }, "f03ea3286759068addb766b5b98317ea84803343105fd081b75322828bf9d201": { "8049194481456bef5558bf7d7d6cc3b522680055cc050dd06c21001990efaa95": { "jp": { - "updatedAt": "2025-11-26T07:24:18.910Z" + "updatedAt": "2025-11-27T09:08:59.349Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.909Z" + "updatedAt": "2025-11-27T09:08:59.347Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.911Z" + "updatedAt": "2025-11-27T09:08:59.351Z" } } }, "f820ad66299aa0044ecdcc3298f5727903d52ea9ce19686054f70d9df707a8ec": { "1c6d8e151f574eb1c808a7932e470939d01ddf3adbd9a088012790d70765d510": { "jp": { - "updatedAt": "2025-11-26T07:24:18.910Z" + "updatedAt": "2025-11-27T09:08:59.350Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.911Z" + "updatedAt": "2025-11-27T09:08:59.351Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.909Z" + "updatedAt": "2025-11-27T09:08:59.348Z" } } }, "fe8dc3e8a42089566aa7dbdc1b163232b94dab755cd8f716e5050a20b9da71be": { "8e5a24d4923c146d3ff29a36c8d08b801a6681568d413d11ee21ab25c5a588ff": { "jp": { - "updatedAt": "2025-11-26T07:24:18.911Z" + "updatedAt": "2025-11-27T09:08:59.350Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.909Z" + "updatedAt": "2025-11-27T09:08:59.348Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.911Z" + "updatedAt": "2025-11-27T09:08:59.350Z" } } }, "1468ae293b5d12d0ded8668dbb023988cbdb44ac496923a1ef6653864352d921": { "99c4f7270820d4fdcb92c4d24d5487f3eaa377c46e721e913d45645dba75a74f": { "jp": { - "updatedAt": "2025-11-26T07:24:02.715Z" + "updatedAt": "2025-11-27T09:08:51.881Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.715Z" + "updatedAt": "2025-11-27T09:08:51.881Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.715Z" + "updatedAt": "2025-11-27T09:08:51.881Z" } } }, "1c112808a954d78a709e3ae05703950bc5804f9e55e3e98efd93efb0f0f879e0": { "a0ef058ccb99a1b138a4a98ffca0037cb2b496f227c55108b8beef337ba82d66": { "jp": { - "updatedAt": "2025-11-26T07:24:02.712Z" + "updatedAt": "2025-11-27T09:08:51.874Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.709Z" + "updatedAt": "2025-11-27T09:08:51.869Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.709Z" + "updatedAt": "2025-11-27T09:08:51.869Z" } } }, "2317505b4b1b1557458b6ec9caf09937e43cf133543d04e2637e9cd6e0693bc2": { "8b6d58a1ca1a770a40180a524a20350aef1a747a1a0f59ef6bd9eb53764a7d1b": { "jp": { - "updatedAt": "2025-11-26T07:24:02.715Z" + "updatedAt": "2025-11-27T09:08:51.882Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.714Z" + "updatedAt": "2025-11-27T09:08:51.881Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.715Z" + "updatedAt": "2025-11-27T09:08:51.882Z" } } }, "281de54c19c675763ab0f11f10b3b274d3e771ce96412096a7f10806fc5e2c35": { "93b34182ce8b4552f64a4241677ee71769ab9fec75622b9507f5b8eb9c6ddf91": { "jp": { - "updatedAt": "2025-11-26T07:24:12.084Z" + "updatedAt": "2025-11-27T09:08:51.898Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.084Z" + "updatedAt": "2025-11-27T09:08:51.899Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.083Z" + "updatedAt": "2025-11-27T09:08:51.896Z" } } }, "3371d95238c92603c162eaed8138395ca44e47b22ad969c5099f7e599ec16c22": { "2a161bba41a266518443feea5a759cf299dbc3fdeb7b00fd74b546abae68dff0": { "jp": { - "updatedAt": "2025-11-26T07:24:02.712Z" + "updatedAt": "2025-11-27T09:08:51.875Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.712Z" + "updatedAt": "2025-11-27T09:08:51.876Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.712Z" + "updatedAt": "2025-11-27T09:08:51.875Z" } } }, "34148aef91a7ca42367acb2003b2045d6893d713fd20c6ef4a4a8fe6b505125c": { "0df15707cc19ce74ec40c00d884f8f77eb33786d03f5831e131804575fce02b5": { "jp": { - "updatedAt": "2025-11-26T07:24:02.714Z" + "updatedAt": "2025-11-27T09:08:51.878Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.714Z" + "updatedAt": "2025-11-27T09:08:51.878Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.714Z" + "updatedAt": "2025-11-27T09:08:51.878Z" } } }, "5c385581f9c65edaaae75a74b6646a142de547cd3f20a408953b75ba33586e2c": { "8dc4eb869f4a048ed04d5883545cce095cb2df351eba54b486a29c615fe29cb3": { "jp": { - "updatedAt": "2025-11-26T07:24:02.711Z" + "updatedAt": "2025-11-27T09:08:51.873Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.708Z" + "updatedAt": "2025-11-27T09:08:51.866Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.711Z" + "updatedAt": "2025-11-27T09:08:51.872Z" } } }, "650a560be33079fccc4800a89f7ceabf7333009b1cfb0105d0e77b22a9afd9c8": { "609636eeb62cf3a4bd5ce284becb34bda3b97c2382d2dfd89320e13d69bf22d7": { "jp": { - "updatedAt": "2025-11-26T07:24:02.714Z" + "updatedAt": "2025-11-27T09:08:51.879Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.716Z" + "updatedAt": "2025-11-27T09:08:51.884Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.716Z" + "updatedAt": "2025-11-27T09:08:51.883Z" } } }, "66edaa5c8dc32a1f831593b8a49a8f90c9de66304dbe8e78969217a73f2200c0": { "3a20ac6682c2e8633f0f56d7c381698dc85b1777367c924c9a05d2c329c4fda0": { "jp": { - "updatedAt": "2025-11-26T07:24:02.711Z" + "updatedAt": "2025-11-27T09:08:51.874Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.710Z" + "updatedAt": "2025-11-27T09:08:51.870Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.711Z" + "updatedAt": "2025-11-27T09:08:51.872Z" } } }, "67113cbc50d80beb99c25a836c1c97bf312030d10537561666f2d9afcf9f3145": { "bc5d1e200e64a767369cc0ffad68cd1dc62da9a6230b0c00c0c10c90dcbef298": { "jp": { - "updatedAt": "2025-11-26T07:24:02.710Z" + "updatedAt": "2025-11-27T09:08:51.871Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.711Z" + "updatedAt": "2025-11-27T09:08:51.872Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.710Z" + "updatedAt": "2025-11-27T09:08:51.871Z" } } }, "6986025ddfdb6e69c9d68bae98e09599b7bd5252a433fe1c14839522e57376a7": { "6a07a797478a7c19aa592d19f3fd5211e2bae00db7fd3cef33b175016a1b1b29": { "jp": { - "updatedAt": "2025-11-26T07:24:02.711Z" + "updatedAt": "2025-11-27T09:08:51.873Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.712Z" + "updatedAt": "2025-11-27T09:08:51.874Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.711Z" + "updatedAt": "2025-11-27T09:08:51.874Z" } } }, "8e1acaa9709e95b6354d4bb719b069fee08bc3794641756333aba5003eb9475d": { "e8f0f6277f744012426a53a6027257e33c4b16cb2ca45dda3d90d4b73b3d4c5b": { "jp": { - "updatedAt": "2025-11-26T07:24:02.712Z" + "updatedAt": "2025-11-27T09:08:51.875Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.711Z" + "updatedAt": "2025-11-27T09:08:51.873Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.710Z" + "updatedAt": "2025-11-27T09:08:51.871Z" } } }, "a5aac8ce0e37bc2df7af5f69708607c2c9b46cbe068e3172847b3191394faffe": { "38d2828e9bd727652c3233af76ea089e954aba2db55328f8cf1f43ca609f19ff": { "jp": { - "updatedAt": "2025-11-26T07:24:02.714Z" + "updatedAt": "2025-11-27T09:08:51.880Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.715Z" + "updatedAt": "2025-11-27T09:08:51.881Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.714Z" + "updatedAt": "2025-11-27T09:08:51.881Z" } } }, "af5c9aba153f2323766f5c2833f6dfb1a669b295e319d579f4546ea448e8d7e7": { "0d9634f2d0d51799480d3e5d225d816eb09fdf75e544bf3b04b2fe1385fb9619": { "zh": { - "updatedAt": "2025-11-26T07:24:12.083Z" + "updatedAt": "2025-11-27T09:08:51.896Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.083Z" + "updatedAt": "2025-11-27T09:08:51.896Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.082Z" + "updatedAt": "2025-11-27T09:08:51.895Z" } } }, "b01e9e50dff0d52b1c86ddcce64d477f77a182599c27ebb6752763a0c4cf1884": { "4bf15471d437e48ecaf706869ad9127730c8b915f392e00ca4b38372ff596b01": { "jp": { - "updatedAt": "2025-11-26T07:24:02.713Z" + "updatedAt": "2025-11-27T09:08:51.877Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.713Z" + "updatedAt": "2025-11-27T09:08:51.876Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.713Z" + "updatedAt": "2025-11-27T09:08:51.876Z" } } }, "b721aaf83ea7701a82587311ffcd215fa0fddd0ac9d459193fd26188e0680183": { "906c00a6ef80e7715d21aae24374b2b2d044fcdc7b9d5c6c2c7341ecd0753821": { "jp": { - "updatedAt": "2025-11-26T07:24:02.708Z" + "updatedAt": "2025-11-27T09:08:51.866Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.709Z" + "updatedAt": "2025-11-27T09:08:51.868Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.709Z" + "updatedAt": "2025-11-27T09:08:51.868Z" } } }, "de08ffcb57e92eb891276970020672bdbe190e2ad13861a7a5a14fe04f7eff24": { "b11091547782b23a3e69aa42aa789855dc525b51b00a033b1cffebdd4f69711f": { "jp": { - "updatedAt": "2025-11-26T07:24:02.715Z" + "updatedAt": "2025-11-27T09:08:51.883Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.715Z" + "updatedAt": "2025-11-27T09:08:51.882Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.715Z" + "updatedAt": "2025-11-27T09:08:51.882Z" } } }, "ea2d038b6989e3982d873c583fb3c15212b691b2e747de62d4d28c3e4b11a23d": { "68f32501aba4af446aa28658a6859e797a66b66f975249f4a21ec435c8e2e471": { "jp": { - "updatedAt": "2025-11-26T07:24:02.716Z" + "updatedAt": "2025-11-27T09:08:51.884Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.716Z" + "updatedAt": "2025-11-27T09:08:51.884Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.715Z" + "updatedAt": "2025-11-27T09:08:51.883Z" } } }, "f56b183aebaa9c102a1630d41b724bdd0ef7984c2f5be9f15f51bb83994e0265": { "0e4b6a498cb6259a81c3b89b57fc27d109c9f7c4517473e5f6371c0a4d14e7e7": { "jp": { - "updatedAt": "2025-11-26T07:24:12.085Z" + "updatedAt": "2025-11-27T09:08:51.900Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.084Z" + "updatedAt": "2025-11-27T09:08:51.900Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.085Z" + "updatedAt": "2025-11-27T09:08:51.900Z" } } }, "f80606d0e748135944fda4f0b2bd5df8b58807fb2f4c06c85b06e12fca82e935": { "2aa54fbd8a8eef1da3872abeaa7ad8858d0e7a55684ee9afd514540bcb055f29": { "jp": { - "updatedAt": "2025-11-26T07:24:02.713Z" + "updatedAt": "2025-11-27T09:08:51.878Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.713Z" + "updatedAt": "2025-11-27T09:08:51.877Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.713Z" + "updatedAt": "2025-11-27T09:08:51.877Z" } } }, "f90130006ab67f0f1f9729094d7e71d602684a6c03306792b40387ebeda24cbd": { "044f9d08748a2a48a556c183ed0bada874cc4ce848cad6b1bf87fba782fe7d9b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.082Z" + "updatedAt": "2025-11-27T09:08:51.896Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.082Z" + "updatedAt": "2025-11-27T09:08:51.894Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.082Z" + "updatedAt": "2025-11-27T09:08:51.895Z" } } }, "fff1cff77ce23873924a1766144be6a0a4bc145a4beaf1c7902459c008cbd536": { "6b16dc8b034758efca2a7dec7fe695e186e4ef2f750e4a6ba872d28a906012b3": { "jp": { - "updatedAt": "2025-11-26T07:24:02.710Z" + "updatedAt": "2025-11-27T09:08:51.869Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.710Z" + "updatedAt": "2025-11-27T09:08:51.870Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.710Z" + "updatedAt": "2025-11-27T09:08:51.870Z" } } }, "0007ef5eb0fc8520aeab373a05b58e2db16ece5be3074e20646fd984e7bb2153": { "534ae688e369810666e881d18767610a7df7671083edd5debe450d3827e074c5": { "jp": { - "updatedAt": "2025-11-26T07:24:02.719Z" + "updatedAt": "2025-11-27T09:08:51.914Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.089Z" + "updatedAt": "2025-11-27T09:08:51.910Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.719Z" + "updatedAt": "2025-11-27T09:08:51.915Z" } } }, "05fa5078290d9319b91e520b8d624cd018e97d963be0d0e1cd22ca7e37e899e9": { "4a4c4d4b7b75c17db47caabac407cb6678d38f795ad11e688adfe6762b928d79": { "jp": { - "updatedAt": "2025-11-26T07:24:12.084Z" + "updatedAt": "2025-11-27T09:08:51.898Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.084Z" + "updatedAt": "2025-11-27T09:08:51.898Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.083Z" + "updatedAt": "2025-11-27T09:08:51.897Z" } } }, "16a9baec9aea4c6dd78355c05288783f630be08b0af1a257fb205b45c7adc066": { "b1a72f898456e3c08b49f6f0e73a4fc33fa3bad39fab513c1db89294a3fb923a": { "jp": { - "updatedAt": "2025-11-26T07:24:02.719Z" + "updatedAt": "2025-11-27T09:08:51.914Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.718Z" + "updatedAt": "2025-11-27T09:08:51.912Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.718Z" + "updatedAt": "2025-11-27T09:08:51.913Z" } } }, "24203d0280dc684588776442ac330a354e834de5789e13b7f7068042627350dc": { "19fc846b48f319f018e4f670ace8976874e318a091bb09940eed158a6c8e8569": { "ru": { - "updatedAt": "2025-11-26T07:24:02.734Z" + "updatedAt": "2025-11-27T09:08:51.955Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.734Z" + "updatedAt": "2025-11-27T09:08:51.956Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.732Z" + "updatedAt": "2025-11-27T09:08:51.952Z" } } }, "2fa693bc37b3a10adc8d79217e3b09168dc83b1d1e169414c8ff196815fec6f9": { "9e33b9e6995d58fab1e0c61f6a5436f2184d7c49af88577359d93f178ead07d6": { "jp": { - "updatedAt": "2025-11-26T07:24:02.733Z" + "updatedAt": "2025-11-27T09:08:51.954Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.734Z" + "updatedAt": "2025-11-27T09:08:51.957Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.736Z" + "updatedAt": "2025-11-27T09:08:51.960Z" } } }, "437aab42be9088c95b44d049c562b541333adb34c7167b0341f25eeb6f1da633": { "673a9dec5d05173b117bf71c194bcbd9250ea1e8e6162c76a5ac07819b4a0314": { "jp": { - "updatedAt": "2025-11-26T07:24:12.083Z" + "updatedAt": "2025-11-27T09:08:51.898Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.084Z" + "updatedAt": "2025-11-27T09:08:51.899Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.084Z" + "updatedAt": "2025-11-27T09:08:51.899Z" } } }, "4d14e175d2ad5b7f1f59197782ca672764811be0a7694da0d93c40a71707c218": { "2f6f3975ac07a17d2e6c12809f029b5fcecdc238f96cab5409c924b908db77fe": { "jp": { - "updatedAt": "2025-11-26T07:24:02.718Z" + "updatedAt": "2025-11-27T09:08:51.913Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.718Z" + "updatedAt": "2025-11-27T09:08:51.913Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.719Z" + "updatedAt": "2025-11-27T09:08:51.914Z" } } }, "57e4e9dfa0451001fd8054b08c62e1b7e7899bf69d75440b300be4c4a727b99e": { "37f3dda8e8d9a3dd2ccbec3bdd564d2de4200f5a0108f14e3cb3cbe1f05fbe96": { "jp": { - "updatedAt": "2025-11-26T07:24:02.719Z" + "updatedAt": "2025-11-27T09:08:51.915Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.718Z" + "updatedAt": "2025-11-27T09:08:51.913Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.719Z" + "updatedAt": "2025-11-27T09:08:51.915Z" } } }, "60e6b2c95bf2975a8ad16addf92ca2f2b8ef9b6f0267eedb1b1609cf83bd7bf0": { "8b24d0eebf933022f5b7646dbd76005a200ed0eb134c91ef2ce37429b92f838e": { "jp": { - "updatedAt": "2025-11-26T07:24:02.725Z" + "updatedAt": "2025-11-27T09:08:51.938Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.725Z" + "updatedAt": "2025-11-27T09:08:51.939Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.725Z" + "updatedAt": "2025-11-27T09:08:51.938Z" } } }, "666059b00db591c1a56ce4963af6165fb3c9b12689bc7bd2d002ad9f8261acdb": { "60035e65e48fd5fdb3a14661c3ac4811bb8496f2b211e4fe284e3d6b420921c0": { "jp": { - "updatedAt": "2025-11-26T07:24:02.734Z" + "updatedAt": "2025-11-27T09:08:51.956Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.735Z" + "updatedAt": "2025-11-27T09:08:51.958Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.736Z" + "updatedAt": "2025-11-27T09:08:51.959Z" } } }, "7431d11049418c30c908694305424392c5e608ecfdf0bd5bb5e82ff877dd01f3": { "3c1e299227977efd8ca6ccf93ac2673c11fbfdfe441a0d0784400200278822ac": { "jp": { - "updatedAt": "2025-11-26T07:24:02.725Z" + "updatedAt": "2025-11-27T09:08:51.938Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.725Z" + "updatedAt": "2025-11-27T09:08:51.938Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.725Z" + "updatedAt": "2025-11-27T09:08:51.937Z" } } }, "7cad50f4cd617547f24613bf26b7d92863268b13a23a167f7afafe1105d9b80d": { "fc4b5c37a2e9cd403b127f9b0e95af107c0815b1c7bb98e1eebae04bc96ad554": { "jp": { - "updatedAt": "2025-11-26T07:24:02.718Z" + "updatedAt": "2025-11-27T09:08:51.912Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.717Z" + "updatedAt": "2025-11-27T09:08:51.911Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.718Z" + "updatedAt": "2025-11-27T09:08:51.912Z" } } }, "8b1e7b5824a25229b63b6cae491572266d76a2f3619bbb37de99f10f9cb281d7": { "b39b1a9501a0d4efe97c7c462447f2f7f762c085e32781115e4e01abed9470bf": { "jp": { - "updatedAt": "2025-11-26T07:24:02.720Z" + "updatedAt": "2025-11-27T09:08:51.916Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.720Z" + "updatedAt": "2025-11-27T09:08:51.916Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.719Z" + "updatedAt": "2025-11-27T09:08:51.915Z" } } }, "a3a1fbd31e0aaa187d657bd8045fa61bc9f31995880bcb5d5758a3e184f5ecb5": { "28ea6e40b848e91414d2d23698b6689414783f37c844f3f15e49942c2f8d0f73": { "jp": { - "updatedAt": "2025-11-26T07:24:12.083Z" + "updatedAt": "2025-11-27T09:08:51.897Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.083Z" + "updatedAt": "2025-11-27T09:08:51.897Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.083Z" + "updatedAt": "2025-11-27T09:08:51.897Z" } } }, "adb57f6c330a361767cc8e018fdeac391e70be9310b007ddc867750c55383217": { "6bffe63c913aa6f222b1d3f7660678d89871583dfc5b85a5472e73ccd48f0852": { "jp": { - "updatedAt": "2025-11-26T07:24:02.736Z" + "updatedAt": "2025-11-27T09:08:51.959Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.734Z" + "updatedAt": "2025-11-27T09:08:51.956Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.735Z" + "updatedAt": "2025-11-27T09:08:51.957Z" } } }, "b0f947d3a4638d92601c813f2511beb5008821e82e066594946d2230ae518888": { "e2d7964de87a21a4f56589f9ef750a5f70e553620f06ce8ed541c52c8e2fd182": { "jp": { - "updatedAt": "2025-11-26T07:24:02.717Z" + "updatedAt": "2025-11-27T09:08:51.911Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.718Z" + "updatedAt": "2025-11-27T09:08:51.913Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.719Z" + "updatedAt": "2025-11-27T09:08:51.914Z" } } }, "b581e8a0971d1d07fd92c09611201fbc0ec1f2ad10e9a9e9462297b6dbe79f67": { "49ae124d0469e31fa1e3318ed468a02b4e75af99b0ad807441a4e18f29afb644": { "jp": { - "updatedAt": "2025-11-26T07:24:02.717Z" + "updatedAt": "2025-11-27T09:08:51.911Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.718Z" + "updatedAt": "2025-11-27T09:08:51.912Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.089Z" + "updatedAt": "2025-11-27T09:08:51.910Z" } } }, "c5ec668978bc00da55afaed8bf387ab8e40f7e8cc8a5c3c85b6528469658dbac": { "2760c235bba120190e9792afc2791f4b14241f22634e6dcfd806b0f0c8a2f30f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.083Z" + "updatedAt": "2025-11-27T09:08:51.897Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.082Z" + "updatedAt": "2025-11-27T09:08:51.895Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.082Z" + "updatedAt": "2025-11-27T09:08:51.895Z" } } }, "d0878e46ea2d9748ef2ef35fa15820d74801d2e823a8c466520717410dca0e30": { "34f3e7285aa8956a7287c85c05fbbc6f82a3d73d51e58594a18dd7c4e673674b": { "jp": { - "updatedAt": "2025-11-26T07:24:02.736Z" + "updatedAt": "2025-11-27T09:08:51.960Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.734Z" + "updatedAt": "2025-11-27T09:08:51.956Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.725Z" + "updatedAt": "2025-11-27T09:08:51.938Z" } } }, "d84d842f939c18587480808dae2c357d93b19f0503165ffbbb5df5723ed8d18f": { "78c6fc1825dfef395f2920f37ae3b83e7a55e08e381e14e11ade4b0633972ca7": { "jp": { - "updatedAt": "2025-11-26T07:24:02.719Z" + "updatedAt": "2025-11-27T09:08:51.914Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.089Z" + "updatedAt": "2025-11-27T09:08:51.910Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.717Z" + "updatedAt": "2025-11-27T09:08:51.911Z" } } }, "e16fa51bab7c52534a6634130d4aa9d5f4eaf5a9199be40465cc25c632091ca6": { "9a45c83991713cae83ff2b9ff52e3fac9bc7cf89dc4ce06aee3062459ba62f83": { "jp": { - "updatedAt": "2025-11-26T07:24:02.734Z" + "updatedAt": "2025-11-27T09:08:51.956Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.733Z" + "updatedAt": "2025-11-27T09:08:51.954Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.733Z" + "updatedAt": "2025-11-27T09:08:51.954Z" } } }, "00385c907824ee916e1d2ab90ec1343952049a30fbb273cd705e54e19e5e54dd": { "a1e228059158c6496d116286e96a0ffb78b193d02679d41dffd889c4ae3f4ae5": { "jp": { - "updatedAt": "2025-11-26T07:24:02.737Z" + "updatedAt": "2025-11-27T09:08:51.961Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.736Z" + "updatedAt": "2025-11-27T09:08:51.960Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.737Z" + "updatedAt": "2025-11-27T09:08:51.961Z" } } }, "2026a346cf904938db3b958bccd4a5998e0f9c3e806206b6a7de6c5a43e41346": { "99e01b88c76b26cea06cf6daf392581a33f358c37c5d4b5081a274912cfb4fdd": { "jp": { - "updatedAt": "2025-11-26T07:24:02.732Z" + "updatedAt": "2025-11-27T09:08:51.952Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.733Z" + "updatedAt": "2025-11-27T09:08:51.953Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.731Z" + "updatedAt": "2025-11-27T09:08:51.950Z" } } }, "2283119a59e486c7e332715c4be76c78e6606cc8fef66284fa0397e91f6e9842": { "89e926971a9cb3deeda49f638cbf8679ad56a009190bf99db1a5f7d3b55c106e": { "jp": { - "updatedAt": "2025-11-26T07:24:02.731Z" + "updatedAt": "2025-11-27T09:08:51.950Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.732Z" + "updatedAt": "2025-11-27T09:08:51.953Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.731Z" + "updatedAt": "2025-11-27T09:08:51.950Z" } } }, "3b5e4827235bde4cab69ea0d512c4769c70579291411c713544bf464dec162c8": { "e5ffb2aae3eda69d46997485801b157c3e85f0837446fbd682ac417320b69197": { "jp": { - "updatedAt": "2025-11-26T07:24:02.734Z" + "updatedAt": "2025-11-27T09:08:51.956Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.733Z" + "updatedAt": "2025-11-27T09:08:51.953Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.733Z" + "updatedAt": "2025-11-27T09:08:51.954Z" } } }, "51a4e1d93b002b635941f3a0b969d77f5e76ffcf3ab01cc6c0302553a48f2dea": { "e3cf07cdc5c67cae3f9a9be2ea541fbdda42c2a33f509a3d16926cfb4c4fa296": { "jp": { - "updatedAt": "2025-11-26T07:24:02.732Z" + "updatedAt": "2025-11-27T09:08:51.952Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.730Z" + "updatedAt": "2025-11-27T09:08:51.949Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.731Z" + "updatedAt": "2025-11-27T09:08:51.950Z" } } }, "51ffd052b5e18acec3f8c2fc6fc9f2de6d509c5f9b55c4e653df085e2f4cce96": { "e67a2d890c9d442e3c7a7f02a0d5c6afcdb1928ff906f575bbf304c7f7799b2f": { "jp": { - "updatedAt": "2025-11-26T07:24:02.736Z" + "updatedAt": "2025-11-27T09:08:51.960Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.735Z" + "updatedAt": "2025-11-27T09:08:51.957Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.736Z" + "updatedAt": "2025-11-27T09:08:51.960Z" } } }, "58660987b73352ad4963dda3033196dbfd0c791f7ea7184da7b8ed72a70d23c7": { "e6384b2ee9b82af275d9a7823132ca573a701a7955a267deaca2eba7848c0139": { "jp": { - "updatedAt": "2025-11-26T07:24:02.740Z" + "updatedAt": "2025-11-27T09:08:51.966Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.736Z" + "updatedAt": "2025-11-27T09:08:51.959Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.735Z" + "updatedAt": "2025-11-27T09:08:51.958Z" } } }, "5ae00fffd365a54fbda628a19a927576375cc455c591c16a26e7ed16b919a10f": { "2c1fe0f08e90b42f0362e7d55eb555bccf6bc9522b4eee5aa410eecb5a6ff63a": { "jp": { - "updatedAt": "2025-11-26T07:24:02.740Z" + "updatedAt": "2025-11-27T09:08:51.968Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.741Z" + "updatedAt": "2025-11-27T09:08:51.969Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.740Z" + "updatedAt": "2025-11-27T09:08:51.967Z" } } }, "62a28a91cc967d2076cb4a8ae68eb32bb7dc0a91eac1089fc166676f54731dc3": { "4fb613d98fb6ff221944b46d4a102b8b41af0362055b5e31a68dcbedb5e8be6b": { "jp": { - "updatedAt": "2025-11-26T07:24:02.732Z" + "updatedAt": "2025-11-27T09:08:51.952Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.731Z" + "updatedAt": "2025-11-27T09:08:51.950Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.734Z" + "updatedAt": "2025-11-27T09:08:51.955Z" } } }, "62cac186a0d5d595a384019a8da0f2587e8ec388e9fa723441881ad21746e53e": { "5315f9a99c66f3565ee182e7d8faf811aa2e4a227524f9f573eb826dc8b5c51e": { "jp": { - "updatedAt": "2025-11-26T07:24:02.732Z" + "updatedAt": "2025-11-27T09:08:51.953Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.735Z" + "updatedAt": "2025-11-27T09:08:51.958Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.732Z" + "updatedAt": "2025-11-27T09:08:51.952Z" } } }, "64c029683442a95f0d9971d2c2a2f011b21167a916369b96ea20390f74a96eb2": { "27ea13a9d6a87686196565d791a629223843e1c311b9bff9edf44c593e511703": { "jp": { - "updatedAt": "2025-11-26T07:24:02.741Z" + "updatedAt": "2025-11-27T09:08:51.970Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.741Z" + "updatedAt": "2025-11-27T09:08:51.970Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.739Z" + "updatedAt": "2025-11-27T09:08:51.966Z" } } }, "812c31122c49b26a28f2af399b63cac7fdb8dbff9b0eccb1a55146b1f53d9141": { "1ebe27a88b5652f04a87609b29cf3e09b5dc4ad9bfe9681936296ff736f2d7ce": { "jp": { - "updatedAt": "2025-11-26T07:24:02.734Z" + "updatedAt": "2025-11-27T09:08:51.955Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.735Z" + "updatedAt": "2025-11-27T09:08:51.958Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.735Z" + "updatedAt": "2025-11-27T09:08:51.957Z" } } }, "8aa6821981ce9839d00fc14d757392848b9750acc4bf8539c334cf2d5871f908": { "a27ad75b9e2993bcfc4ac7d0eda9c06a190e908e4e85725e849767c67999764d": { "jp": { - "updatedAt": "2025-11-26T07:24:02.735Z" + "updatedAt": "2025-11-27T09:08:51.958Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.736Z" + "updatedAt": "2025-11-27T09:08:51.959Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.733Z" + "updatedAt": "2025-11-27T09:08:51.954Z" } } }, "8f6142d5329a13cb865837bf5f90f1676c0ed34132ae0b7413c66ad9fee106c2": { "b5efc55478dd9c26c80dffe9ed741b395f4d2368d8eee6c9c3149cd4fc4eebc1": { "jp": { - "updatedAt": "2025-11-26T07:24:02.735Z" + "updatedAt": "2025-11-27T09:08:51.958Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.733Z" + "updatedAt": "2025-11-27T09:08:51.955Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.736Z" + "updatedAt": "2025-11-27T09:08:51.959Z" } } }, @@ -1646,494 +1657,494 @@ "afd2f2eebd8416c23bdeb683cdf48c7d32f86769fb59accaa3e0399bedfbc689": { "9b1791199c987e23d27abeedfa5722370720553cfd8a6405ee7112cebcc27c6d": { "jp": { - "updatedAt": "2025-11-26T07:24:02.731Z" + "updatedAt": "2025-11-27T09:08:51.951Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.731Z" + "updatedAt": "2025-11-27T09:08:51.949Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.733Z" + "updatedAt": "2025-11-27T09:08:51.953Z" } } }, "b353f551e48bc3b4c88a7db0d857fefd25c028f8d05216430afdb76e3bd832b4": { "6d6603c2d993968e3e2fb68963df1f14bb64c291c769f84522294cc56cd80d73": { "jp": { - "updatedAt": "2025-11-26T07:24:02.732Z" + "updatedAt": "2025-11-27T09:08:51.951Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.732Z" + "updatedAt": "2025-11-27T09:08:51.952Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.733Z" + "updatedAt": "2025-11-27T09:08:51.955Z" } } }, "ba6c4ca640fe7b3f714cda5b21aa83f56d6987a93c06b0f52403fcf16442d4a3": { "73a0749a7a37be27b2b679011c93ceeaf5407fff6130ef17dcbbbc612aee0d5f": { "jp": { - "updatedAt": "2025-11-26T07:24:02.741Z" + "updatedAt": "2025-11-27T09:08:51.970Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.740Z" + "updatedAt": "2025-11-27T09:08:51.966Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.741Z" + "updatedAt": "2025-11-27T09:08:51.969Z" } } }, "c85686859f3f25046db0082f882182fadaaa53c9674e2b8421280d74f206eb40": { "add68d9d7c2384a1f4236b30131c64724392237b73f94a4430f8fd215046f46f": { "jp": { - "updatedAt": "2025-11-26T07:24:02.740Z" + "updatedAt": "2025-11-27T09:08:51.967Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.742Z" + "updatedAt": "2025-11-27T09:08:51.972Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.742Z" + "updatedAt": "2025-11-27T09:08:51.971Z" } } }, "e58beba1ecf7893bfe1389d8eb8c6388801ea9f76c74eaadcbaa400a86832dc0": { "80e13888b6bfca7d175470bafcc2e30a1e88dcbbdaa15cac209fa66c4f44bddb": { "jp": { - "updatedAt": "2025-11-26T07:24:02.740Z" + "updatedAt": "2025-11-27T09:08:51.968Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.740Z" + "updatedAt": "2025-11-27T09:08:51.967Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.741Z" + "updatedAt": "2025-11-27T09:08:51.969Z" } } }, "f437d5d62e24e71773573d12295d6070b2013b4f10635e752fc5e0c0c6f3d5b6": { "69df1b4df06653852e7ced5d6197d910291dedd2d1b27599cd5608fd1b4a5214": { "jp": { - "updatedAt": "2025-11-26T07:24:02.730Z" + "updatedAt": "2025-11-27T09:08:51.949Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.731Z" + "updatedAt": "2025-11-27T09:08:51.951Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.733Z" + "updatedAt": "2025-11-27T09:08:51.954Z" } } }, "03f61172ad909b158589d51b6d4f89a053de0b09127cf415c34413087bd48c4b": { "a5c008c72acddb7fec319268bb5dce0d0fb9a1f10d18c2c90a95d993d9f5a960": { "jp": { - "updatedAt": "2025-11-26T07:24:02.730Z" + "updatedAt": "2025-11-27T09:08:51.949Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.743Z" + "updatedAt": "2025-11-27T09:08:51.973Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.738Z" + "updatedAt": "2025-11-27T09:08:51.962Z" } } }, "0b7dab5f7a039f1859e3a70738566e228a8859b0025e472a76cd8fa2c67c6c28": { "1d8df38a053cb69ce2a27d4691e5cdfd13a6b160e9a02fa3f683e748d317ea48": { "jp": { - "updatedAt": "2025-11-26T07:24:02.741Z" + "updatedAt": "2025-11-27T09:08:51.971Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.742Z" + "updatedAt": "2025-11-27T09:08:51.972Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.739Z" + "updatedAt": "2025-11-27T09:08:51.965Z" } } }, "2864b967eeeaa7eaa2100c52550f0c77a534e954059ecfcc0991f21bc889bda3": { "feaa20d52a8757a137658d5066422bdbf2de0a87efa96000934a084ad78bfddf": { "jp": { - "updatedAt": "2025-11-26T07:24:02.742Z" + "updatedAt": "2025-11-27T09:08:51.972Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.737Z" + "updatedAt": "2025-11-27T09:08:51.962Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.737Z" + "updatedAt": "2025-11-27T09:08:51.962Z" } } }, "36663ad730f89d83d4a65b5956ac48db373b0bcfbd0f2bb4062dc5f3bcaf2839": { "8841bb2bfdc1346e286a40346e8503829d958b3bac30b715d775b50f451b49ee": { "jp": { - "updatedAt": "2025-11-26T07:24:02.738Z" + "updatedAt": "2025-11-27T09:08:51.964Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.738Z" + "updatedAt": "2025-11-27T09:08:51.963Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.738Z" + "updatedAt": "2025-11-27T09:08:51.963Z" } } }, "374986e8dd5ccd248058ea18a5c0798d535a4a7501a33eff5fd9b80a782b7c15": { "7b0998df0969746e6c19524cb961e7ff6d7e59afe83c51976450a953fc8b3ffa": { "jp": { - "updatedAt": "2025-11-26T07:24:02.730Z" + "updatedAt": "2025-11-27T09:08:51.948Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.738Z" + "updatedAt": "2025-11-27T09:08:51.963Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.738Z" + "updatedAt": "2025-11-27T09:08:51.962Z" } } }, "3cb23211e097156c0f1a78ad405746a39a30a7fca3e113e221a2bbde60fc5c66": { "30bc5b33601dc47abebcade817fd66b12ac5351751c6ed875945668d80c959b2": { "jp": { - "updatedAt": "2025-11-26T07:24:02.739Z" + "updatedAt": "2025-11-27T09:08:51.966Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.741Z" + "updatedAt": "2025-11-27T09:08:51.969Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.739Z" + "updatedAt": "2025-11-27T09:08:51.965Z" } } }, "6ce48a90c46614816b7c3a238012b7692f39fa7b3d52104f4f0f92d895004b22": { "7e344ba2b2f6753012aae6adc6fcc5f046670439fd5badb29bee696648c4a317": { "jp": { - "updatedAt": "2025-11-26T07:24:12.090Z" + "updatedAt": "2025-11-27T09:08:51.988Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.090Z" + "updatedAt": "2025-11-27T09:08:51.988Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.746Z" + "updatedAt": "2025-11-27T09:08:51.978Z" } } }, "707c0fedc72655fa1c912bcb76b320d66a9ab9c8fe5e939a4df2863fdd7f82b8": { "7c543d5ef5d836f674d6873f133f02c4ab70829715b347650c196ee93273deae": { "zh": { - "updatedAt": "2025-11-26T07:24:02.745Z" + "updatedAt": "2025-11-27T09:08:51.978Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.744Z" + "updatedAt": "2025-11-27T09:08:51.974Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.744Z" + "updatedAt": "2025-11-27T09:08:51.975Z" } } }, "730dcd6bd51a2d8afa76fc973bedd9b4d7162629dcf690b192df4cac1fc39566": { "ed51d6c3026594d0ef90de441bf36dff57ad4a32048a288a0186952eb2f80596": { "jp": { - "updatedAt": "2025-11-26T07:24:02.747Z" + "updatedAt": "2025-11-27T09:08:51.980Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.748Z" + "updatedAt": "2025-11-27T09:08:51.986Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.737Z" + "updatedAt": "2025-11-27T09:08:51.961Z" } } }, "8c4b511502097e5142007ba6bf89d86ef9d582ca174f395180742175d5bd4f05": { "f3274830262e5f01f74d8474761446b9f8a9c83ae245d4cee233a6cd17284b39": { "jp": { - "updatedAt": "2025-11-26T07:24:02.741Z" + "updatedAt": "2025-11-27T09:08:51.970Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.739Z" + "updatedAt": "2025-11-27T09:08:51.966Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.741Z" + "updatedAt": "2025-11-27T09:08:51.969Z" } } }, "8eeb2d38e63485d3f399d528cce00b3fa0310df2d513c8b5aed0077ee217c69c": { "87d6c2b8c54e666cd98b21f88f6b978a41ee92fbde390f5a595aae7d2c59164f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.089Z" + "updatedAt": "2025-11-27T09:08:51.987Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.090Z" + "updatedAt": "2025-11-27T09:08:51.987Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.737Z" + "updatedAt": "2025-11-27T09:08:51.961Z" } } }, "8efa94c2eaa8cf8e3ca888069c1494fbfe5679752549f9d0a41d641f2aad43da": { "481fbe7fef11ec970a0109b0e44e9a8165cf0e73e56a0466f038d0efcf74f657": { "jp": { - "updatedAt": "2025-11-26T07:24:12.090Z" + "updatedAt": "2025-11-27T09:08:51.988Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.745Z" + "updatedAt": "2025-11-27T09:08:51.977Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.090Z" + "updatedAt": "2025-11-27T09:08:51.988Z" } } }, "94747a3cb7498dd41f7f7aaed2f670f003087b3543cf7752be3b39b62c021927": { "f7bca2db0af5de7e2c67ebc1c65c226c309288e7f073d34318c2747b6d1e9327": { "jp": { - "updatedAt": "2025-11-26T07:24:02.738Z" + "updatedAt": "2025-11-27T09:08:51.964Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.739Z" + "updatedAt": "2025-11-27T09:08:51.965Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.739Z" + "updatedAt": "2025-11-27T09:08:51.965Z" } } }, "9be36d6e2bdbfee1f50c6de39175a6e538f2d986429211ef53b12ab0e0031ef0": { "1dee3abbec10bfa0b3995067899a721e47f20ee051715db74e0ac726fa434d54": { "jp": { - "updatedAt": "2025-11-26T07:24:02.737Z" + "updatedAt": "2025-11-27T09:08:51.962Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.743Z" + "updatedAt": "2025-11-27T09:08:51.973Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.743Z" + "updatedAt": "2025-11-27T09:08:51.974Z" } } }, "ba0db243d349404c81abcb5ac1b3df54c29742957ec4ab33b24830ddab68f7a2": { "1f879e7772ed8e095b07f85578bd401df3a64cd4e5498296092756cccd875121": { "jp": { - "updatedAt": "2025-11-26T07:24:02.740Z" + "updatedAt": "2025-11-27T09:08:51.967Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.739Z" + "updatedAt": "2025-11-27T09:08:51.964Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.739Z" + "updatedAt": "2025-11-27T09:08:51.965Z" } } }, "cb8f8c1219ce7a92277d5329ae659c90b78edb06139fda7cb67e9143f6a4f1a8": { "708faeaebbf5c4dabd6c9a9eb715cafd5178cbb6ceacc376b982a574ba6496b0": { "jp": { - "updatedAt": "2025-11-26T07:24:02.730Z" + "updatedAt": "2025-11-27T09:08:51.948Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.737Z" + "updatedAt": "2025-11-27T09:08:51.962Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.738Z" + "updatedAt": "2025-11-27T09:08:51.964Z" } } }, "cf42c21f80f60055d0087c0e795d8976b1d91223e0fe30f342746b23878b6c6d": { "6d3f845905f3f2b2a1be610957281c22628e8585866ee195f1e005cecbd69e88": { "jp": { - "updatedAt": "2025-11-26T07:24:02.742Z" + "updatedAt": "2025-11-27T09:08:51.971Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.743Z" + "updatedAt": "2025-11-27T09:08:51.974Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.742Z" + "updatedAt": "2025-11-27T09:08:51.972Z" } } }, "d0e7cc516637ef8ff263a061c7c16bafdf014cfae7ce60448c7e0fcce8c6dfd7": { "e57a30777e558c8d76cfdd0c7355a7d8d9e150e93787b8eaedcd4f95150f489f": { "jp": { - "updatedAt": "2025-11-26T07:24:02.748Z" + "updatedAt": "2025-11-27T09:08:51.985Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.743Z" + "updatedAt": "2025-11-27T09:08:51.961Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.745Z" + "updatedAt": "2025-11-27T09:08:51.978Z" } } }, "dc560181da04dee98b254f616102cfdbf1969c4c794080bd3b5dd88e33f63287": { "f7b3da6309249ba57146453a20fb02f1da444cc9f6b9ff15796e49d19986d9d8": { "jp": { - "updatedAt": "2025-11-26T07:24:02.742Z" + "updatedAt": "2025-11-27T09:08:51.971Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.741Z" + "updatedAt": "2025-11-27T09:08:51.971Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.739Z" + "updatedAt": "2025-11-27T09:08:51.965Z" } } }, "e390b76711ccf2a7eb5d962d037354b40ec5f4bd6b5e88c7a59d4fe98d2af88f": { "959a1807df034b8088bb146f4b89e2d5ea2dea86233fa18c9a28c35bbea95719": { "jp": { - "updatedAt": "2025-11-26T07:24:02.740Z" + "updatedAt": "2025-11-27T09:08:51.968Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.743Z" + "updatedAt": "2025-11-27T09:08:51.973Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.743Z" + "updatedAt": "2025-11-27T09:08:51.973Z" } } }, "f362b87c61313b355b28fda5f77765651cb599066809f44030b3c1010865fa5c": { "498198cf31ab4d64e31b4a2d37da8c4597bed364756e0feb2aad51f2859ac1fb": { "jp": { - "updatedAt": "2025-11-26T07:24:02.740Z" + "updatedAt": "2025-11-27T09:08:51.967Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.739Z" + "updatedAt": "2025-11-27T09:08:51.965Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.738Z" + "updatedAt": "2025-11-27T09:08:51.964Z" } } }, "f5a9bb73dfebbd60d3ebe96194e16c204bbf24a1a4ad7b46bb262a754dac54b2": { "e78c91e1856bb6bb61d73c20e01d2f69ad12b8495c3f0d7fef84e1558681ea40": { "jp": { - "updatedAt": "2025-11-26T07:24:02.743Z" + "updatedAt": "2025-11-27T09:08:51.973Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.743Z" + "updatedAt": "2025-11-27T09:08:51.974Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.742Z" + "updatedAt": "2025-11-27T09:08:51.972Z" } } }, "1370f12b87482a2e8d057a8b41e9ea94795da80127f778fde4628181bbdcc429": { "f8146d175696fd61b1124db8aa052124a23329de9472ab05df373240407f0ecd": { "jp": { - "updatedAt": "2025-11-26T07:24:12.093Z" + "updatedAt": "2025-11-27T09:08:51.993Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.091Z" + "updatedAt": "2025-11-27T09:08:51.989Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.094Z" + "updatedAt": "2025-11-27T09:08:51.996Z" } } }, "25e58c45c99cdd21fc20a817b3bc1c4d1448cfd9024cc4ed56ae9462032d790b": { "6bb9f7de8fea38f23bfe3fefc31fa9cf8d67d55bb09bb2f9a1806c8d39795f52": { "jp": { - "updatedAt": "2025-11-26T07:24:02.747Z" + "updatedAt": "2025-11-27T09:08:51.982Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.747Z" + "updatedAt": "2025-11-27T09:08:51.981Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.747Z" + "updatedAt": "2025-11-27T09:08:51.981Z" } } }, "2f8b276c8b17327a8cd29e02e2e0215fcd7745a9618f81983784ed62a0124e22": { "fd3cd87bae11809fdfbaa52ebbe4afbe61f3cc9cca3ae69d12c598a97c478f9e": { "jp": { - "updatedAt": "2025-11-26T07:24:02.748Z" + "updatedAt": "2025-11-27T09:08:51.986Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.744Z" + "updatedAt": "2025-11-27T09:08:51.976Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.744Z" + "updatedAt": "2025-11-27T09:08:51.976Z" } } }, "376f1f3d79070d024492b0852fcc46275cc6894795ef5c9378fe6a8039d04b64": { "57d1e9d86f14ce94f3b9606be0c45891a1cddf024b0cd28892082e2bebf224ff": { "jp": { - "updatedAt": "2025-11-26T07:24:12.094Z" + "updatedAt": "2025-11-27T09:08:51.996Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.095Z" + "updatedAt": "2025-11-27T09:08:51.997Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.092Z" + "updatedAt": "2025-11-27T09:08:51.992Z" } } }, "3b20b82fd209471b97a1109eecaadcd504d69c6421631143f81852d506036bfa": { "deab720ce649678d8772ed32576b254176937947561eccdb5dd266ddcf5b5d50": { "jp": { - "updatedAt": "2025-11-26T07:24:12.091Z" + "updatedAt": "2025-11-27T09:08:51.989Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.094Z" + "updatedAt": "2025-11-27T09:08:51.997Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.094Z" + "updatedAt": "2025-11-27T09:08:51.995Z" } } }, "5315751710a23b80f9bf1ed7f31831d089dbe93c3c8fb90d20b7744073d0bf57": { "a66560c3d607504cdffd12261e02d0e673e576056f78a84ca9ecdf329603c56d": { "jp": { - "updatedAt": "2025-11-26T07:24:12.093Z" + "updatedAt": "2025-11-27T09:08:51.993Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.095Z" + "updatedAt": "2025-11-27T09:08:51.998Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.095Z" + "updatedAt": "2025-11-27T09:08:51.997Z" } } }, "8d92e8b825b034ea42c644cd23567811b46adb33b6d540b842b64c0196ff3b53": { "292f22bc13c3bd83386dc5ae82bec9ed457e6f79b25efab444ce03844d88e825": { "jp": { - "updatedAt": "2025-11-26T07:24:02.745Z" + "updatedAt": "2025-11-27T09:08:51.977Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.746Z" + "updatedAt": "2025-11-27T09:08:51.979Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.746Z" + "updatedAt": "2025-11-27T09:08:51.979Z" } } }, "9845c4be459de6543c79bb52ebef31089a7b6dde5c4bcbf294e6b614cb8b73ef": { "f7ab2f792dc532d79e54d2172ab842ea8bb45d24fbea3c48d921219d21bb9a5d": { "jp": { - "updatedAt": "2025-11-26T07:24:02.745Z" + "updatedAt": "2025-11-27T09:08:51.978Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.744Z" + "updatedAt": "2025-11-27T09:08:51.976Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.747Z" + "updatedAt": "2025-11-27T09:08:51.980Z" } } }, "994f995f28518f9032c149f031eb9e817c8a85f3b0139de3abda3966eec97f40": { "0299673d875da310e70873db6a17323b8be0705c8b4b17c562c9e797b225acf4": { "jp": { - "updatedAt": "2025-11-26T07:24:12.090Z" + "updatedAt": "2025-11-27T09:08:51.987Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.089Z" + "updatedAt": "2025-11-27T09:08:51.986Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.089Z" + "updatedAt": "2025-11-27T09:08:51.986Z" } } }, "9e812084882765188d8e23b9cfcbf9a3edeb29e9461a1cec110df416342b0289": { "e16e8324972fb51ec759f18c31f84b12438b5b468badc9732e3a35eecb40c277": { "jp": { - "updatedAt": "2025-11-26T07:24:12.092Z" + "updatedAt": "2025-11-27T09:08:51.992Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.095Z" + "updatedAt": "2025-11-27T09:08:51.997Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.094Z" + "updatedAt": "2025-11-27T09:08:51.996Z" } } }, @@ -2148,83 +2159,94 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.089Z" } + }, + "c1ad37c48321ab74d0fa77243447624e6c987f44ca3469a08d251c3e5a869de0": { + "jp": { + "updatedAt": "2025-11-27T09:08:51.984Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:51.985Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:51.985Z" + } } }, "a9a515c52dba44d2cbab844922d2f769a5af11a34775d83c1bd8d9c97e4bb6f3": { "85a2a4117446131c96b792674a9cf5594566bfe0b7f1098d2210537e80d0fb0d": { "jp": { - "updatedAt": "2025-11-26T07:24:12.094Z" + "updatedAt": "2025-11-27T09:08:51.995Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.094Z" + "updatedAt": "2025-11-27T09:08:51.995Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.094Z" + "updatedAt": "2025-11-27T09:08:51.995Z" } } }, "af360983b516284a69f939f103f1882eaf99d33139f9033142ae3561946f32c7": { "33be4cf9c98cef60c81c9a896da5f27cad1a7e71f69e85818494ce4b7ec03b2b": { "jp": { - "updatedAt": "2025-11-26T07:24:02.747Z" + "updatedAt": "2025-11-27T09:08:51.982Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.747Z" + "updatedAt": "2025-11-27T09:08:51.982Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.747Z" + "updatedAt": "2025-11-27T09:08:51.982Z" } } }, "b204fb8610ce0fe2a5504ac8ae74eb658b2c80f1a1d885dc2b85d71bc34129bb": { "0aee55116dc7c452f61e8eb411e60595d3f877d5ebfa1d1c034f028155bf44bd": { "jp": { - "updatedAt": "2025-11-26T07:24:02.744Z" + "updatedAt": "2025-11-27T09:08:51.976Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.748Z" + "updatedAt": "2025-11-27T09:08:51.986Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.746Z" + "updatedAt": "2025-11-27T09:08:51.979Z" } } }, "bf09040d678e6760987c57861f7d46d0c83dc84b582441fa87e7ac9756c76f6b": { "ee66bac04fe1df0381e777810c8adb5c9d16229f663ce7ef30a2a0506899ac5c": { "ru": { - "updatedAt": "2025-11-26T07:24:12.094Z" + "updatedAt": "2025-11-27T09:08:51.995Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.094Z" + "updatedAt": "2025-11-27T09:08:51.996Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.094Z" + "updatedAt": "2025-11-27T09:08:51.996Z" } } }, "c50d8bd0ecc6ee24b7f928b73255956cae71fabfe25096539cdb974c7f167191": { "f1fb2f5d8ab4009a1d0458d1d0604ea822a372927443fb49fae37168711e0dc8": { "jp": { - "updatedAt": "2025-11-26T07:24:12.095Z" + "updatedAt": "2025-11-27T09:08:51.998Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.095Z" + "updatedAt": "2025-11-27T09:08:51.997Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.095Z" + "updatedAt": "2025-11-27T09:08:51.997Z" } } }, "cabd7d221b503f016f6d425976074155c6ab65f9918739e83cc1d703e06ce9c9": { "7ca705d224c1a2bae3bf661451d8d9ee2d0404abce117b56dcde2161981ea1cb": { "jp": { - "updatedAt": "2025-11-26T07:24:02.747Z" + "updatedAt": "2025-11-27T09:08:51.981Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.746Z" + "updatedAt": "2025-11-27T09:08:51.979Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.747Z" + "updatedAt": "2025-11-27T09:08:51.980Z" } } }, @@ -2239,1630 +2261,1641 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.090Z" } + }, + "ef2a79c4910a450c4d299109576b26b3e4d3c1f0d7cbf8aec0cb3af68cf84848": { + "zh": { + "updatedAt": "2025-11-27T09:08:51.984Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:51.984Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:51.985Z" + } } }, "d6382580d57e06e3adb4f63249975c1e63e439afb1528089085bb16be9e0bfd5": { "e66f44bf486dac3ec176125edd9a39b1b6741ccec945cdd42e270d60579a2194": { "jp": { - "updatedAt": "2025-11-26T07:24:12.089Z" + "updatedAt": "2025-11-27T09:08:51.987Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.744Z" + "updatedAt": "2025-11-27T09:08:51.977Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.090Z" + "updatedAt": "2025-11-27T09:08:51.987Z" } } }, "dcbbbc894548f52a28f1dbe2761c66552c70c361ecde98f969015dcee3764a48": { "626e208c3631b5c7c63439845c92c76d534c35cdc0c557b51aac33578683ffb8": { "jp": { - "updatedAt": "2025-11-26T07:24:12.094Z" + "updatedAt": "2025-11-27T09:08:51.995Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.091Z" + "updatedAt": "2025-11-27T09:08:51.990Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.092Z" + "updatedAt": "2025-11-27T09:08:51.992Z" } } }, "e3d2222cd9a6fac9acbf681cd3446dfd1fc4c2866524e4195206634d0d76acc6": { "7dd41862d4380d06fce8d5aee44728bdd5365a42f0ef1ef5d0a91b55cde5c29f": { "jp": { - "updatedAt": "2025-11-26T07:24:02.748Z" + "updatedAt": "2025-11-27T09:08:51.983Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.748Z" + "updatedAt": "2025-11-27T09:08:51.983Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.748Z" + "updatedAt": "2025-11-27T09:08:51.983Z" } } }, "02291322e0d8f494b80f9d8e9c482282d8b548c6ae56afa37d022b164b99b054": { "14c2feb63b9f987820db166804e40ef404c44c5a695f647c2463bc6c7919d96e": { "jp": { - "updatedAt": "2025-11-26T07:24:18.917Z" + "updatedAt": "2025-11-27T09:08:52.006Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.916Z" + "updatedAt": "2025-11-27T09:08:52.005Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.917Z" + "updatedAt": "2025-11-27T09:08:52.006Z" } } }, "13dade465ba8d6e7014eb44c3923f9c834a481123903922ddf6e33bb4ee775db": { "d6e6aa07741897774555a1f0eac0954dd331322344f830c9f304dbdca6fc532c": { "jp": { - "updatedAt": "2025-11-26T07:24:18.919Z" + "updatedAt": "2025-11-27T09:08:52.009Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.920Z" + "updatedAt": "2025-11-27T09:08:52.010Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.920Z" + "updatedAt": "2025-11-27T09:08:52.010Z" } } }, "1e6a9268be90fc10ba5ab851817ae61b0167c3ce6990f2a5d9ebdb1ee6eec11d": { "986717639b58978e5f1cc565ca5bcaef17e4babedbaaace23e272cc8c401372c": { "jp": { - "updatedAt": "2025-11-26T07:24:18.920Z" + "updatedAt": "2025-11-27T09:08:52.010Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.919Z" + "updatedAt": "2025-11-27T09:08:52.009Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.919Z" + "updatedAt": "2025-11-27T09:08:52.009Z" } } }, "290372a9e8da36b9b0dbc38f3a77bf8307b785738d5ba00a31fddfd12681d63a": { "435164419830229ab742e3ae11858464c9c8878bcf4a2bb3d6166ec4642f545e": { "jp": { - "updatedAt": "2025-11-26T07:24:18.920Z" + "updatedAt": "2025-11-27T09:08:52.010Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.920Z" + "updatedAt": "2025-11-27T09:08:52.011Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.919Z" + "updatedAt": "2025-11-27T09:08:52.009Z" } } }, "2aca9c20ab8bbeb98fd4fbb9f62e8ae777bccbfb6417cbddb786afea95af4499": { "866097183364ceafca0351ea2755c4d597ff856cbd6ea28946d96c0d30d28ff7": { "jp": { - "updatedAt": "2025-11-26T07:24:12.096Z" + "updatedAt": "2025-11-27T09:08:51.999Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.095Z" + "updatedAt": "2025-11-27T09:08:51.998Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.095Z" + "updatedAt": "2025-11-27T09:08:51.998Z" } } }, "381da73f1de48015917a484d7c2e45bb2557d1a326b8ff4560cb55a72d1de6ce": { "58f15d2dfce6c37907b066f99ba2b6b1bad2cefdd56e52bb79e7839fed922624": { "jp": { - "updatedAt": "2025-11-26T07:24:18.919Z" + "updatedAt": "2025-11-27T09:08:52.009Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.918Z" + "updatedAt": "2025-11-27T09:08:52.007Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.916Z" + "updatedAt": "2025-11-27T09:08:52.005Z" } } }, "40b25bc5f9906b1b6c1e3fb64539dfc6d270a427153142c668cd16a039ebcb00": { "957d995119871468184ae861bc8fb42689e205013b5a1a037710ce22110de58f": { "jp": { - "updatedAt": "2025-11-26T07:24:18.918Z" + "updatedAt": "2025-11-27T09:08:52.008Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.918Z" + "updatedAt": "2025-11-27T09:08:52.007Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.917Z" + "updatedAt": "2025-11-27T09:08:52.007Z" } } }, "52853976e012785457c250daee6b0280f9e8e88fcbc6a4a02eaf7315f2758fc9": { "35936f5dd5b5ed9baf260d39b24862296fecf4c8c909f41e2a0999a8db0a3772": { "jp": { - "updatedAt": "2025-11-26T07:24:18.917Z" + "updatedAt": "2025-11-27T09:08:52.006Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.917Z" + "updatedAt": "2025-11-27T09:08:52.006Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.919Z" + "updatedAt": "2025-11-27T09:08:52.008Z" } } }, "5a2a174332bfb9a0cdf7cfe65d8e91568153937327d15d632b2c09aba2aba728": { "e8ae2af14396db3064dca28b82c864d44d320c9ce456d8e334f9b158902bf4fe": { "jp": { - "updatedAt": "2025-11-26T07:24:18.916Z" + "updatedAt": "2025-11-27T09:08:52.005Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.919Z" + "updatedAt": "2025-11-27T09:08:52.009Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.918Z" + "updatedAt": "2025-11-27T09:08:52.007Z" } } }, "5f3d913c7a8c4ceda7fa835ce07f7441c4f601788cc68210c993d3dda60335e4": { "758768db465ee7223ab470e594b649587b038bfaa85fe340aea1e4aa3c4bd92a": { "jp": { - "updatedAt": "2025-11-26T07:24:18.916Z" + "updatedAt": "2025-11-27T09:08:52.004Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.916Z" + "updatedAt": "2025-11-27T09:08:52.004Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.098Z" + "updatedAt": "2025-11-27T09:08:52.003Z" } } }, "6312de56aa12f4e18450ee81ed026306d225a603f4e118425c63d475b267e36f": { "05a0d0bd2cfc6068766a3aeeefe69b1d78a4b4f120052aeaeddd00b384c6828c": { "jp": { - "updatedAt": "2025-11-26T07:24:18.918Z" + "updatedAt": "2025-11-27T09:08:52.008Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.917Z" + "updatedAt": "2025-11-27T09:08:52.006Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.918Z" + "updatedAt": "2025-11-27T09:08:52.007Z" } } }, "6439efcca906a994e35faf64afc92947e6ce60d7db71c07200375b94c1ec08a0": { "b590592b2b9abba8d294cbb837fba6f0bf9ec95a8c5f2d979542c7f80d2cae21": { "jp": { - "updatedAt": "2025-11-26T07:24:18.918Z" + "updatedAt": "2025-11-27T09:08:52.008Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.920Z" + "updatedAt": "2025-11-27T09:08:52.009Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.918Z" + "updatedAt": "2025-11-27T09:08:52.008Z" } } }, "645c6b21a98f21e01e529f7978413fd1fd62c80916d3b27f0533877e73361460": { "9190dd15a568419dc8f69602836e2291f52c2c494b8a21b5d535f8100ce666fd": { "jp": { - "updatedAt": "2025-11-26T07:24:12.098Z" + "updatedAt": "2025-11-27T09:08:52.004Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.097Z" + "updatedAt": "2025-11-27T09:08:52.001Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.098Z" + "updatedAt": "2025-11-27T09:08:52.003Z" } } }, "81e55d728a63e9d9620a0aa9a0f3152c86d8f4228a2480791e9cad5a8de39a05": { "0a7dd0ec6b5989e1b77f3754697c20347971441c557b816d890bf2b9648ca561": { "jp": { - "updatedAt": "2025-11-26T07:24:12.097Z" + "updatedAt": "2025-11-27T09:08:52.002Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.097Z" + "updatedAt": "2025-11-27T09:08:52.001Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.098Z" + "updatedAt": "2025-11-27T09:08:52.004Z" } } }, "99dad4c2046d97de9c9a10225dad41defe9ab46dd46ee1ebf18685fa87671a2e": { "06b367fa8b09d7fd9415ccb9f2fa0fb03df266adda026a80d2f81729bad14302": { "jp": { - "updatedAt": "2025-11-26T07:24:02.743Z" + "updatedAt": "2025-11-27T09:08:51.974Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.093Z" + "updatedAt": "2025-11-27T09:08:51.993Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.095Z" + "updatedAt": "2025-11-27T09:08:51.998Z" } } }, "9d3e2980fe828b01727089a5b229444dc083a28f187a3ec09ad16a7eb1eb6d78": { "27aa4e4f10c34b32aa528db752d7176b33e61894bc9750f14367f23ebacba5e8": { "jp": { - "updatedAt": "2025-11-26T07:24:12.095Z" + "updatedAt": "2025-11-27T09:08:51.998Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.096Z" + "updatedAt": "2025-11-27T09:08:51.999Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.095Z" + "updatedAt": "2025-11-27T09:08:51.998Z" } } }, "c491de2fc423ab10dbad66f7c1ced660f15c3f92d3220edeb2ccd84ee9575232": { "6fd80c5323889b79422bdbfe9fd8a32fb4bc56870affd9f018e096ec38fde0cd": { "jp": { - "updatedAt": "2025-11-26T07:24:18.920Z" + "updatedAt": "2025-11-27T09:08:52.010Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.921Z" + "updatedAt": "2025-11-27T09:08:52.011Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.920Z" + "updatedAt": "2025-11-27T09:08:52.010Z" } } }, "cd73972a4d037347d81b6309d5ebdd4973e65b4708a5a1c61e961a7e349f0783": { "9206b8172e5adaad17f8c6eb0cded1360735c838b0a3363c600dce6cc6abbcef": { "jp": { - "updatedAt": "2025-11-26T07:24:12.098Z" + "updatedAt": "2025-11-27T09:08:52.002Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.093Z" + "updatedAt": "2025-11-27T09:08:51.994Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.097Z" + "updatedAt": "2025-11-27T09:08:52.001Z" } } }, "cd764deae766f8c6f6cfe6b576e74bb1f602bfacbb3821340a5850510d57a818": { "b6693ed657d428f4853a8fcd97aaa704f7a982e5e86c5fb8e5ce372b12c11e69": { "jp": { - "updatedAt": "2025-11-26T07:24:18.921Z" + "updatedAt": "2025-11-27T09:08:52.011Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.921Z" + "updatedAt": "2025-11-27T09:08:52.011Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.921Z" + "updatedAt": "2025-11-27T09:08:52.011Z" } } }, "fd4807eb1e777b66ccc79335d7b822af7ba8bb6dcbbf18e3ae8c53f548f20928": { "455e4d7b70315644264125e3a1e3a329d14b945c29bd48454b379b5247f97bdd": { "jp": { - "updatedAt": "2025-11-26T07:24:18.917Z" + "updatedAt": "2025-11-27T09:08:52.007Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.918Z" + "updatedAt": "2025-11-27T09:08:52.007Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.917Z" + "updatedAt": "2025-11-27T09:08:52.005Z" } } }, "fdc92b085b658968ee987d63323feb976df8a0ac7995cde6f13318c84abd0c59": { "7843455825f9c1828f408c376329311aba7d3c1e14b345e73ef9ad5b93e5b005": { "jp": { - "updatedAt": "2025-11-26T07:24:18.919Z" + "updatedAt": "2025-11-27T09:08:52.008Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.094Z" + "updatedAt": "2025-11-27T09:08:51.996Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.094Z" + "updatedAt": "2025-11-27T09:08:51.995Z" } } }, "07722b6c1b943ed20bf3ff6d22b1b257d5a8695ae4b4553850f4bd4af3c5d2c7": { "2dcd7f352db514064395ba3b8d67b798124850b8ab716d08d01b773649c588b0": { "jp": { - "updatedAt": "2025-11-26T07:24:02.748Z" + "updatedAt": "2025-11-27T09:08:52.034Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.749Z" + "updatedAt": "2025-11-27T09:08:52.035Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.749Z" + "updatedAt": "2025-11-27T09:08:52.035Z" } } }, "1777f3ba683ace75433dd34468539a9e9d67ef87d9f67a65737e86954611e774": { "3acf5735b7405bf65c0204cd16078ddc21713f4e46ed2d0238fb8871eb19b84c": { "jp": { - "updatedAt": "2025-11-26T07:24:18.925Z" + "updatedAt": "2025-11-27T09:08:52.018Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.922Z" + "updatedAt": "2025-11-27T09:08:52.013Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.925Z" + "updatedAt": "2025-11-27T09:08:52.017Z" } } }, "1d262ab176214afd2615461f6d7dcbc00bf893bd453c8cad2f9b625f5b34ed8e": { "2ba14b7281983a683a98e1fb919f7ee7317f7cf3b6fce775f1d12a76ea1e67e6": { "jp": { - "updatedAt": "2025-11-26T07:24:18.924Z" + "updatedAt": "2025-11-27T09:08:52.016Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.926Z" + "updatedAt": "2025-11-27T09:08:52.030Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.922Z" + "updatedAt": "2025-11-27T09:08:52.013Z" } } }, "34dd8a3ad912132054af7846a7af1d6c6f27c8de9f83f63c9354d5a326b6a82c": { "8e8980f8eff31a76117d3215f17a1cba9a0ee6234c2cce918781f484742ac397": { "jp": { - "updatedAt": "2025-11-26T07:24:18.925Z" + "updatedAt": "2025-11-27T09:08:52.018Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.926Z" + "updatedAt": "2025-11-27T09:08:52.019Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.928Z" + "updatedAt": "2025-11-27T09:08:52.033Z" } } }, "3e5df6c1938919084ef3c24cc3aa0a9f834e4dc5475270adb64943fc1f2c818e": { "a27fbee07ebfb6548a8a222874fceb3def1e176c740f36e8bb3fa452c9d32b53": { "jp": { - "updatedAt": "2025-11-26T07:24:18.927Z" + "updatedAt": "2025-11-27T09:08:52.031Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.928Z" + "updatedAt": "2025-11-27T09:08:52.032Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.927Z" + "updatedAt": "2025-11-27T09:08:52.032Z" } } }, "44b3f5422fc4c4f447ece76e0f8066bb34f3affc30e7419ca74089bfa8055925": { "b2e193e55be108c5582fcb93204b7255923583e86eda8e23c2ec5a7fb530f958": { "jp": { - "updatedAt": "2025-11-26T07:24:18.924Z" + "updatedAt": "2025-11-27T09:08:52.015Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.926Z" + "updatedAt": "2025-11-27T09:08:52.019Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.924Z" + "updatedAt": "2025-11-27T09:08:52.016Z" } } }, "4e56f5a34b33c4d6df45c30f812200b60d80663863d11d65cf1450dcca806457": { "4705c821297fd380138640ab626f9d4f597a2b1853b0c84c3688cc33f5d4dd5e": { "jp": { - "updatedAt": "2025-11-26T07:24:12.098Z" + "updatedAt": "2025-11-27T09:08:52.002Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.098Z" + "updatedAt": "2025-11-27T09:08:52.003Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.097Z" + "updatedAt": "2025-11-27T09:08:52.002Z" } } }, "80d3d6543dd83a7957930d9045025b4815c1307c41a15c290f7acf0eae734cda": { "41c8219de2e81a989c9aa442e0f7b45929280d651e3c0f00f28c5e946e5b9487": { "jp": { - "updatedAt": "2025-11-26T07:24:18.925Z" + "updatedAt": "2025-11-27T09:08:52.017Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.922Z" + "updatedAt": "2025-11-27T09:08:52.012Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.926Z" + "updatedAt": "2025-11-27T09:08:52.019Z" } } }, "92105bab40be708ce10315bc6e1bb96fe7701142a5cccef12ac85e9bd6c2ad0a": { "f2e5adfccb04fbdb23894f4f9466bac4d65302edaa3ab747b455eca21fec899a": { "jp": { - "updatedAt": "2025-11-26T07:24:18.928Z" + "updatedAt": "2025-11-27T09:08:52.032Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.922Z" + "updatedAt": "2025-11-27T09:08:52.013Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.926Z" + "updatedAt": "2025-11-27T09:08:52.031Z" } } }, "98c24f1533f177815a78f76de8765482cd98558271c182e9ea70175821ff82db": { "59cffa3acd22af2478ea31099f73412223d91eb1301172207a61ac51e8cba72d": { "jp": { - "updatedAt": "2025-11-26T07:24:18.922Z" + "updatedAt": "2025-11-27T09:08:52.012Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.923Z" + "updatedAt": "2025-11-27T09:08:52.014Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.096Z" + "updatedAt": "2025-11-27T09:08:52.000Z" } } }, "99393522afef2d07d814a10cdd78d55ffbbf63cbc84caf67a25cbbb6702d7b29": { "df2e38e726ad5701168a107a3233f7e582b27aaddc17196034ab06c247a2cbb1": { "zh": { - "updatedAt": "2025-11-26T07:24:18.927Z" + "updatedAt": "2025-11-27T09:08:52.031Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:18.923Z" + "updatedAt": "2025-11-27T09:08:52.014Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.927Z" + "updatedAt": "2025-11-27T09:08:52.032Z" } } }, "9c36f42318908cee7394ac7bdffe1f0b4dc78d18dafbeff49083e3a25b9a0c0d": { "e03b65e2958329c1310e8961f72be96a59122375e8ea0f5d7d4a488588e62cf4": { "jp": { - "updatedAt": "2025-11-26T07:24:18.926Z" + "updatedAt": "2025-11-27T09:08:52.019Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.749Z" + "updatedAt": "2025-11-27T09:08:52.035Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.927Z" + "updatedAt": "2025-11-27T09:08:52.032Z" } } }, "a017ed6c9e204f49a926704a46e850a434a064d54ab74c5196dcbbbbf095a5f5": { "a2adde35cfc427e42fa09ac65d97536a831e1059c7400f85820e2263a1b87c36": { "jp": { - "updatedAt": "2025-11-26T07:24:12.096Z" + "updatedAt": "2025-11-27T09:08:52.000Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.923Z" + "updatedAt": "2025-11-27T09:08:52.015Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.927Z" + "updatedAt": "2025-11-27T09:08:52.031Z" } } }, "a02c9804673e90df5f360bc1d48dc4d9b7a2120b7b838de45da8f0bd5dcc7bfb": { "6dba5895ccf72ae7b5a8b301d42e25be067755be6a3b1a5bcb26acdc5cb58138": { "jp": { - "updatedAt": "2025-11-26T07:24:12.097Z" + "updatedAt": "2025-11-27T09:08:52.001Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.097Z" + "updatedAt": "2025-11-27T09:08:52.001Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.097Z" + "updatedAt": "2025-11-27T09:08:52.002Z" } } }, "ae924afae0c519cbcd8b9677316f11c74c707cb0d60447e3f16db759e6be95d7": { "10c1fb6d0471791e0662f2e4888a314601486dae17ed953b398d3ded8b18d82c": { "jp": { - "updatedAt": "2025-11-26T07:24:02.749Z" + "updatedAt": "2025-11-27T09:08:52.036Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.928Z" + "updatedAt": "2025-11-27T09:08:52.034Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.928Z" + "updatedAt": "2025-11-27T09:08:52.033Z" } } }, "bdf6a99d4e97b12fb653dbfa5271fb1f3f759447def3b014fa132fc4a51905e8": { "70ae38ea604bbab68a53eb544cbd0f2cdbeea7e09ac7cd839c84eef1978dec29": { "jp": { - "updatedAt": "2025-11-26T07:24:02.748Z" + "updatedAt": "2025-11-27T09:08:52.034Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.926Z" + "updatedAt": "2025-11-27T09:08:52.030Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.749Z" + "updatedAt": "2025-11-27T09:08:52.034Z" } } }, "d85329459d2d377bcf713c7d13c7c96bd1fdcdcc09d41a049d07f84aa752713e": { "92a31f97c45363963ebd5c9ef1e90cde5e6438c8474d31a5257818a31f192d43": { "jp": { - "updatedAt": "2025-11-26T07:24:18.916Z" + "updatedAt": "2025-11-27T09:08:52.005Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.916Z" + "updatedAt": "2025-11-27T09:08:52.005Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.098Z" + "updatedAt": "2025-11-27T09:08:52.003Z" } } }, "e0a0f58749dbc99214f8d73d23e3e103bb972d6cb973f80440fb3b9b4b81c305": { "0f27725ca1d515bacca9b8aa1e23bb35c69b895c1d9563452e075aee634e4939": { "jp": { - "updatedAt": "2025-11-26T07:24:18.923Z" + "updatedAt": "2025-11-27T09:08:52.015Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.926Z" + "updatedAt": "2025-11-27T09:08:52.030Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.925Z" + "updatedAt": "2025-11-27T09:08:52.018Z" } } }, "e1027f068c086d68bcd19c94e1c760c747883dda4912d769a49634e99a298bf2": { "327dfaab66de7353575183e0fe7d40b596436f7254ab77cbe35383223ad4ff3a": { "jp": { - "updatedAt": "2025-11-26T07:24:18.925Z" + "updatedAt": "2025-11-27T09:08:52.017Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.926Z" + "updatedAt": "2025-11-27T09:08:52.019Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.922Z" + "updatedAt": "2025-11-27T09:08:52.013Z" } } }, "ea52d1bf57d6eca260482d6e9db0b3e4ba187ca46f787a3ec41ccbabccdafc29": { "7792c45b9f12363c758a86312cea564fda8789130772fc2a238a348aa77232bb": { "jp": { - "updatedAt": "2025-11-26T07:24:12.093Z" + "updatedAt": "2025-11-27T09:08:51.994Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.093Z" + "updatedAt": "2025-11-27T09:08:51.994Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.097Z" + "updatedAt": "2025-11-27T09:08:52.002Z" } } }, "f2dd481c53ba67e19f970889ce242cd474c9da5ed1571b9d4f5878551ed45889": { "70876690558307749f06728cb6ac14fce7075dc54a6e8cf0695beae2917c50cb": { "jp": { - "updatedAt": "2025-11-26T07:24:18.924Z" + "updatedAt": "2025-11-27T09:08:52.015Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.096Z" + "updatedAt": "2025-11-27T09:08:52.000Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.925Z" + "updatedAt": "2025-11-27T09:08:52.018Z" } } }, "f4deb9d37929966d7a5d1040cf9c1132679840850e80dd91a4e56e059568b817": { "e1dc787a6d679d3f64b0e02ce3b61001ea2f9d7a3aab736ee5ae17d2bc4a4c63": { "jp": { - "updatedAt": "2025-11-26T07:24:18.924Z" + "updatedAt": "2025-11-27T09:08:52.016Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.924Z" + "updatedAt": "2025-11-27T09:08:52.015Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.923Z" + "updatedAt": "2025-11-27T09:08:52.014Z" } } }, "046cf4465fa1fb7186678766ac47cbd78704f28064400523e5b59a245d53c970": { "b13281a5fbb00f880845872b5516d8f9e9039198c4bf031942d0ceec737def68": { "jp": { - "updatedAt": "2025-11-26T07:24:02.753Z" + "updatedAt": "2025-11-27T09:08:52.042Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.753Z" + "updatedAt": "2025-11-27T09:08:52.043Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.752Z" + "updatedAt": "2025-11-27T09:08:52.041Z" } } }, "0cdb3f54f81ff077472e66fb0a57247ee5bf3d2a93abeb493538e948840b724c": { "2beff12ea84429b1b15d3cd9ba939104aa74a91c9770800974ecc16582d6d010": { "jp": { - "updatedAt": "2025-11-26T07:24:02.752Z" + "updatedAt": "2025-11-27T09:08:52.041Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.752Z" + "updatedAt": "2025-11-27T09:08:52.041Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.753Z" + "updatedAt": "2025-11-27T09:08:52.043Z" } } }, "1ac7bdd9222c1e2ffa17fc544f1241b28da0cad7f185b619d29ac27e0aa8c077": { "3f8afe531fdd885aba914642b81b85afea758c6f849a7250bfeebc09887cc894": { "jp": { - "updatedAt": "2025-11-26T07:24:18.925Z" + "updatedAt": "2025-11-27T09:08:52.018Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.927Z" + "updatedAt": "2025-11-27T09:08:52.031Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.925Z" + "updatedAt": "2025-11-27T09:08:52.017Z" } } }, "2a7b92dadf95743e702b18a30f74eb67e67fef5ea4124220e608f258c6950c9e": { "c66b9e2d0f4d5e382ea43aee7020fd1c7ff170725159ddc185d674bc64b0d24b": { "jp": { - "updatedAt": "2025-11-26T07:24:02.751Z" + "updatedAt": "2025-11-27T09:08:52.039Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.751Z" + "updatedAt": "2025-11-27T09:08:52.039Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.751Z" + "updatedAt": "2025-11-27T09:08:52.040Z" } } }, "2f0873b2704cad58fd2172ec86c842a8262cb2a7c1e6cfbf1e9851fa843f4357": { "d4282945578d91a5ae49277f6ca146ca130e3b3df3c0341a5de3414625c2c903": { "jp": { - "updatedAt": "2025-11-26T07:24:02.754Z" + "updatedAt": "2025-11-27T09:08:52.045Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.753Z" + "updatedAt": "2025-11-27T09:08:52.042Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.752Z" + "updatedAt": "2025-11-27T09:08:52.042Z" } } }, "583a274e308afe89671f40f27b3be757e2c9e98eeb513765c802185f5ec14e29": { "17f1e539b1b6e7759a4aa628833db4667a7e74444abb42880111b4568a28ffe6": { "jp": { - "updatedAt": "2025-11-26T07:24:18.921Z" + "updatedAt": "2025-11-27T09:08:52.012Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.921Z" + "updatedAt": "2025-11-27T09:08:52.012Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.751Z" + "updatedAt": "2025-11-27T09:08:52.040Z" } } }, "60a5d6b5624fc995f6807d15e66c5a5b6bc86dc212e1745ef8bef3f5dc15c3df": { "c3d809b05c72707e6bb1947b6db7f23f641f83155cd0f83a5e6deedee8d07adc": { "jp": { - "updatedAt": "2025-11-26T07:24:02.753Z" + "updatedAt": "2025-11-27T09:08:52.044Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.752Z" + "updatedAt": "2025-11-27T09:08:52.041Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.752Z" + "updatedAt": "2025-11-27T09:08:52.041Z" } } }, "65c3d5357d49f1617e6e959d8e29071102eaf8d0d9e4d1c2fb7cad70b6173a35": { "4cc1991c7b87b22d25ccb176e3b79b021cdde65ce0a2f2e4414efe519cc65f89": { "jp": { - "updatedAt": "2025-11-26T07:24:18.924Z" + "updatedAt": "2025-11-27T09:08:52.016Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.923Z" + "updatedAt": "2025-11-27T09:08:52.014Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.922Z" + "updatedAt": "2025-11-27T09:08:52.012Z" } } }, "6e5e66ee5bbbba58fcfeffbe0603dfd55d38dd278fbff14d70aa5595ee971bd7": { "c4a33214adceb28be9e704611bd58cf7f2b17ce705ec29ba0ffd552d82a3d73f": { "jp": { - "updatedAt": "2025-11-26T07:24:02.752Z" + "updatedAt": "2025-11-27T09:08:52.041Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.751Z" + "updatedAt": "2025-11-27T09:08:52.040Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.751Z" + "updatedAt": "2025-11-27T09:08:52.039Z" } } }, "823e98e23e42535697ba133dc5c2d8b57c41a87124d772a59a7bbf545ac0dd84": { "d6ac975393106fe00f3edd51a065ab64a5e99a9aad622632a08705ff68ad4b36": { "ru": { - "updatedAt": "2025-11-26T07:24:02.754Z" + "updatedAt": "2025-11-27T09:08:52.046Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.755Z" + "updatedAt": "2025-11-27T09:08:52.046Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.755Z" + "updatedAt": "2025-11-27T09:08:52.047Z" } } }, "907c6e7bab21d938402f694e7407939915297c82eafd1730100c830df4918778": { "c3a2fac6bf16acdaf76f1ef65dc3317e37696c35df4e8526e1bb887fa5cfdeb2": { "jp": { - "updatedAt": "2025-11-26T07:24:02.752Z" + "updatedAt": "2025-11-27T09:08:52.040Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.752Z" + "updatedAt": "2025-11-27T09:08:52.040Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.752Z" + "updatedAt": "2025-11-27T09:08:52.041Z" } } }, "9840f3c84ffc8a8f881de9eca8454a7e8de6c5bd5c30b6a27784816805453183": { "491cb45d3cfae94c2b0cdeaaaf82b4ad9d2198ed681060717d4f79378fc92714": { "jp": { - "updatedAt": "2025-11-26T07:24:02.753Z" + "updatedAt": "2025-11-27T09:08:52.043Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.753Z" + "updatedAt": "2025-11-27T09:08:52.044Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.751Z" + "updatedAt": "2025-11-27T09:08:52.039Z" } } }, "acee1d54d44425817e527bc2a3215f623d6ebd68804cdb7f18541efb76fb830f": { "53b8019634b145bda892aa14cca4d68066dd9ed1223e68c1450a60c3d6af3368": { "jp": { - "updatedAt": "2025-11-26T07:24:02.751Z" + "updatedAt": "2025-11-27T09:08:52.039Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.754Z" + "updatedAt": "2025-11-27T09:08:52.045Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.753Z" + "updatedAt": "2025-11-27T09:08:52.043Z" } } }, "b66cad86246e7e672bea77de5487ab3238a0cbd0d829ebb54fd0e68f3cbcee09": { "9cf089c5df430ee74bddf608da84394fafc963e1bd03cd0e94fe2c6c179ecce7": { "jp": { - "updatedAt": "2025-11-26T07:24:02.751Z" + "updatedAt": "2025-11-27T09:08:52.040Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.752Z" + "updatedAt": "2025-11-27T09:08:52.041Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.753Z" + "updatedAt": "2025-11-27T09:08:52.044Z" } } }, "bc72b7a9222edd97db763cb5ebbf3a678bd9d11ef3bc3a2c28fd6797dd845434": { "ab1bcc3128e7fca61edfa8cb48cc7969450a097b52da47b30b191820f3c2d949": { "jp": { - "updatedAt": "2025-11-26T07:24:02.754Z" + "updatedAt": "2025-11-27T09:08:52.045Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.754Z" + "updatedAt": "2025-11-27T09:08:52.045Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.749Z" + "updatedAt": "2025-11-27T09:08:52.036Z" } } }, "cbf8d771d3e60af84970fcb0a9a3b216e9fa9d6604d8b59222876988a0f9a23c": { "05073dfddb68903600de4505e9ef4203c4b4f5979a1ad1001059a7e6a6c36293": { "jp": { - "updatedAt": "2025-11-26T07:24:02.754Z" + "updatedAt": "2025-11-27T09:08:52.044Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.751Z" + "updatedAt": "2025-11-27T09:08:52.039Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.752Z" + "updatedAt": "2025-11-27T09:08:52.042Z" } } }, "d259b209c3435b62d81021240a05134c0eea6d95e4ac914c175f7122e5bcdbb9": { "2336e34b998efec4cc83f0643bbd8fc97a4fb0afa00c3343a22139925e777a12": { "jp": { - "updatedAt": "2025-11-26T07:24:18.921Z" + "updatedAt": "2025-11-27T09:08:52.012Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.755Z" + "updatedAt": "2025-11-27T09:08:52.048Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.755Z" + "updatedAt": "2025-11-27T09:08:52.047Z" } } }, "e01a6937e1ad5b11af43515d1a1e66db9e6168b75b5528ca1b7b9d7f3c195868": { "2c6fc2afd47aebe8d703b5147ab0245326aebcd6663db747fdeae29badcd7caa": { "jp": { - "updatedAt": "2025-11-26T07:24:02.755Z" + "updatedAt": "2025-11-27T09:08:52.047Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.755Z" + "updatedAt": "2025-11-27T09:08:52.047Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.754Z" + "updatedAt": "2025-11-27T09:08:52.046Z" } } }, "eac642db564baa4ce1f75ca03dc5a23f44db2e588ad4390c7c3cb746e81f695a": { "4bcedeede08560e01db76c1f8f3c871bd8e8aebd281853aeef86bbc3841fd68e": { "jp": { - "updatedAt": "2025-11-26T07:24:02.752Z" + "updatedAt": "2025-11-27T09:08:52.042Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.753Z" + "updatedAt": "2025-11-27T09:08:52.042Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.751Z" + "updatedAt": "2025-11-27T09:08:52.040Z" } } }, "f5ec5f1c0bd0776f9a2a7bff868a443e7cbb090161004e7da40277d9999a5e0f": { "1d3bbb34461ec824f8f745ff89fbbe7930bf3ca75ffcf25386fa8e097845e074": { "jp": { - "updatedAt": "2025-11-26T07:24:02.751Z" + "updatedAt": "2025-11-27T09:08:52.039Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.753Z" + "updatedAt": "2025-11-27T09:08:52.042Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.753Z" + "updatedAt": "2025-11-27T09:08:52.043Z" } } }, "faf7c1208ac6cebd805f74b867ef0352238bb675f4e78c25744706e43a0bbf35": { "067bee4f308eb8fb0ee42187bb88647c1df461930299cda269dae6be1e92e2b2": { "jp": { - "updatedAt": "2025-11-26T07:24:18.923Z" + "updatedAt": "2025-11-27T09:08:52.014Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.923Z" + "updatedAt": "2025-11-27T09:08:52.015Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.924Z" + "updatedAt": "2025-11-27T09:08:52.016Z" } } }, "010f8d66bb60666d0d358628411eeb2b1df5cd86161855532ace6b686750bb2f": { "0feb62388a935eebc64bf1d2d0c742a3b9d17f4ae18ff4e0ed9f4fe6e68ce776": { "jp": { - "updatedAt": "2025-11-26T07:24:02.751Z" + "updatedAt": "2025-11-27T09:08:52.038Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.750Z" + "updatedAt": "2025-11-27T09:08:52.037Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.750Z" + "updatedAt": "2025-11-27T09:08:52.038Z" } } }, "050352a11ca817f5bab4911101cd95e7ae7dc5d8954cd551028380c728411a57": { "6cc2916b976989ba2663dd50f541fbe9751c56f179ac300fc3381ca3479e452b": { "jp": { - "updatedAt": "2025-11-26T07:24:02.758Z" + "updatedAt": "2025-11-27T09:08:52.054Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.753Z" + "updatedAt": "2025-11-27T09:08:52.044Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.753Z" + "updatedAt": "2025-11-27T09:08:52.043Z" } } }, "09a42960aa106a95a5cbe49be7b12f9120aefe3ef067ddb1c1b026342239f3be": { "eb1dc019fb90478f30509956caa9e4f342a6e2b031332733edb6a6b927bc71e8": { "jp": { - "updatedAt": "2025-11-26T07:24:02.758Z" + "updatedAt": "2025-11-27T09:08:52.052Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.758Z" + "updatedAt": "2025-11-27T09:08:52.052Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.758Z" + "updatedAt": "2025-11-27T09:08:52.053Z" } } }, "12be1e0f0e04bb9eee1f814b983cb24150e4b9b4f2e86f8c6cf33f7dd28edf16": { "25966e125c5b0d0e09bfbe0bb6c4eced38f8afae86050666be245c00bb7f240c": { "jp": { - "updatedAt": "2025-11-26T07:24:02.756Z" + "updatedAt": "2025-11-27T09:08:52.049Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.756Z" + "updatedAt": "2025-11-27T09:08:52.049Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.756Z" + "updatedAt": "2025-11-27T09:08:52.050Z" } } }, "130f0cbb1d6c82f8ae457bc5d3dfde8dafaeebcec17cebf6c1ec40eb99cd1392": { "4b5db766a70f9027101f584180002e5dd6f63ed99aa3d036eafd61435ddb4812": { "jp": { - "updatedAt": "2025-11-26T07:24:02.762Z" + "updatedAt": "2025-11-27T09:08:52.059Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.761Z" + "updatedAt": "2025-11-27T09:08:52.058Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.756Z" + "updatedAt": "2025-11-27T09:08:52.048Z" } } }, "30c2729724c6bee568ae40c9d3da452323fc101c8c757841c99647d3bf63f057": { "4eb3058a8a2fa3f5f9687fb24c64b384670b5101c5582da6a348ce515411116b": { "jp": { - "updatedAt": "2025-11-26T07:24:02.763Z" + "updatedAt": "2025-11-27T09:08:52.061Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.763Z" + "updatedAt": "2025-11-27T09:08:52.061Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.763Z" + "updatedAt": "2025-11-27T09:08:52.060Z" } } }, "377591bbd1fd99159d49074a1492a22294d47fb29e338af9ccb456a44f4a181c": { "79d09c5dbf435fb10ca29153a98d5b635aee732c2aa61594fcc2f065989ce327": { "jp": { - "updatedAt": "2025-11-26T07:24:02.761Z" + "updatedAt": "2025-11-27T09:08:52.058Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.759Z" + "updatedAt": "2025-11-27T09:08:52.056Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.749Z" + "updatedAt": "2025-11-27T09:08:52.036Z" } } }, "40a262fc5e1c5d47aaac955e5d56710c58b184834fced0236175665ec187d93f": { "d9751428d997f059562f26e9bd7ac68c276f0bbf0c513551408f0513601e3d16": { "jp": { - "updatedAt": "2025-11-26T07:24:02.759Z" + "updatedAt": "2025-11-27T09:08:52.055Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.760Z" + "updatedAt": "2025-11-27T09:08:52.057Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.759Z" + "updatedAt": "2025-11-27T09:08:52.055Z" } } }, "46dbee6938843b18fe050245cf7379885770dc6f9f8ed8013ccf5222d1c306d9": { "1c26addde8215daf58446cd375e5e150c2d5ceeefaa8b2acfdb9c9c8afb9953d": { "jp": { - "updatedAt": "2025-11-26T07:24:02.757Z" + "updatedAt": "2025-11-27T09:08:52.052Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.758Z" + "updatedAt": "2025-11-27T09:08:52.053Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.758Z" + "updatedAt": "2025-11-27T09:08:52.053Z" } } }, "4c1ad3942b4184430a7d30de866388373d48c1a27718ee8712e351668b5b2c7b": { "7f0ff3de1f2f3ef36f7c5bcbadc179455a3ae55c4a9e388b8148b18a4dfe6b7b": { "jp": { - "updatedAt": "2025-11-26T07:24:02.754Z" + "updatedAt": "2025-11-27T09:08:52.044Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.754Z" + "updatedAt": "2025-11-27T09:08:52.045Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.754Z" + "updatedAt": "2025-11-27T09:08:52.045Z" } } }, "8d0001685270931055d17a8eb50155f983dcec73c892d71e3bffe9004c1cacd4": { "c26606f99e8098f4ed8f1e29ccce89dec0e9cca96fa2536b375d31a3b9fb8036": { "jp": { - "updatedAt": "2025-11-26T07:24:02.760Z" + "updatedAt": "2025-11-27T09:08:52.057Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.758Z" + "updatedAt": "2025-11-27T09:08:52.053Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.760Z" + "updatedAt": "2025-11-27T09:08:52.058Z" } } }, "ac35f8f55935d4ecd0e3d7d6c02b398d04b18c830570d65f6551b9b4ff45bb74": { "09c8a0f7de8fedbc086a20b8603b6ad2439fbb800e29c34ecc840908cfa41148": { "jp": { - "updatedAt": "2025-11-26T07:24:02.757Z" + "updatedAt": "2025-11-27T09:08:52.051Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.757Z" + "updatedAt": "2025-11-27T09:08:52.052Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.758Z" + "updatedAt": "2025-11-27T09:08:52.054Z" } } }, "b949b99783c59002d6d1611f53562639a71143cfb90e027a848ef13b70877e4d": { "65ed1ef87fa32188d6b83d9345586ca7be9701ab437946eec188e8d638e56014": { "jp": { - "updatedAt": "2025-11-26T07:24:02.762Z" + "updatedAt": "2025-11-27T09:08:52.060Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.763Z" + "updatedAt": "2025-11-27T09:08:52.060Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.761Z" + "updatedAt": "2025-11-27T09:08:52.058Z" } } }, "cba0abc4ab65e9d030139163304a053ef5b1fe651a26215e77c9e551fe3b8191": { "62328876676efd5312772f4062f7342ab3fbcced0fec39177d7de554d93c9005": { "jp": { - "updatedAt": "2025-11-26T07:24:02.756Z" + "updatedAt": "2025-11-27T09:08:52.050Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.757Z" + "updatedAt": "2025-11-27T09:08:52.051Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.757Z" + "updatedAt": "2025-11-27T09:08:52.051Z" } } }, "cbf50a3e7f149ed504ecfb70077f07ab9e2fed847c539a9e27d5aa88c015e5f3": { "2db80f4884390b5613f02ed18bdd9194f0f0ca4c9123aaf5b1a68e1c52e263f2": { "jp": { - "updatedAt": "2025-11-26T07:24:02.755Z" + "updatedAt": "2025-11-27T09:08:52.047Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.755Z" + "updatedAt": "2025-11-27T09:08:52.048Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.755Z" + "updatedAt": "2025-11-27T09:08:52.048Z" } } }, "cc4204c3e95911221d74a7265dd2e67515e9b01a1b9394863f065398c955594d": { "9538d72bcd29de25ee9a900cfa42747f8ab0f5767963a08a3028ab7f3b189a13": { "jp": { - "updatedAt": "2025-11-26T07:24:02.760Z" + "updatedAt": "2025-11-27T09:08:52.056Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.761Z" + "updatedAt": "2025-11-27T09:08:52.059Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.762Z" + "updatedAt": "2025-11-27T09:08:52.059Z" } } }, "e15247f6690c752be9eb052c65d6188bf83aa3aa12e45c3969ebd294c52787ad": { "e8049a4edea61ad5f86939e7938566c1c4db909e94409eedf5fec35ac6d46e8c": { "jp": { - "updatedAt": "2025-11-26T07:24:02.761Z" + "updatedAt": "2025-11-27T09:08:52.059Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.750Z" + "updatedAt": "2025-11-27T09:08:52.037Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.762Z" + "updatedAt": "2025-11-27T09:08:52.059Z" } } }, "e979381df042f92438f9f485ef68a9901f7ebe9aae3e09ec14dd65b67c2d842d": { "67bbc03e619fab0b6f99efec8b0f2fb38df1395be3d50b3ed225f0da4b3f4452": { "jp": { - "updatedAt": "2025-11-26T07:24:02.760Z" + "updatedAt": "2025-11-27T09:08:52.057Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.760Z" + "updatedAt": "2025-11-27T09:08:52.056Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.758Z" + "updatedAt": "2025-11-27T09:08:52.054Z" } } }, "edbc39ef9c56e581bb84c8896ac7b1374e3d19f83b554328b6e8d3d38fe01125": { "1f975f6dea1c15645a72a9eac157d5d94cb767124fa4ad2e367bc8233d6b225f": { "jp": { - "updatedAt": "2025-11-26T07:24:02.759Z" + "updatedAt": "2025-11-27T09:08:52.054Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.750Z" + "updatedAt": "2025-11-27T09:08:52.036Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.760Z" + "updatedAt": "2025-11-27T09:08:52.057Z" } } }, "fbe0f20b7a71a4be3f802731a84f0eda5afbf565f744180f030a4474dd0b950a": { "acb4ae581b304b32468cac562d7016a47f6ce4fe713075ab12bd276f5d04a0cc": { "jp": { - "updatedAt": "2025-11-26T07:24:02.759Z" + "updatedAt": "2025-11-27T09:08:52.055Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.758Z" + "updatedAt": "2025-11-27T09:08:52.053Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.757Z" + "updatedAt": "2025-11-27T09:08:52.051Z" } } }, "fee41c1b851550b4068c1cdd9e5a18a829a2d27697fe22a9678a8c0d0e87836f": { "5d6d7dab6e54977464b77d2be0fe3967209334b0d1e2cf141000a53098cdb64e": { "jp": { - "updatedAt": "2025-11-26T07:24:02.760Z" + "updatedAt": "2025-11-27T09:08:52.057Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.763Z" + "updatedAt": "2025-11-27T09:08:52.060Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.760Z" + "updatedAt": "2025-11-27T09:08:52.058Z" } } }, "00f878a9534e344ca38d2f13a2d0b58a40257c9f7c696adfbc337ee5148c5894": { "d7ae2149e8a1eca5c76f2e499f9ddf19c90a2c840a153acd2e820b96f79c4e3d": { "jp": { - "updatedAt": "2025-11-26T07:24:02.772Z" + "updatedAt": "2025-11-27T09:08:52.072Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.772Z" + "updatedAt": "2025-11-27T09:08:52.073Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.772Z" + "updatedAt": "2025-11-27T09:08:52.072Z" } } }, "262ef21ffee6eb3348b7484a2cb16afdc22c4c02ce86edaa851cad0979d13067": { "5e4f687928ed10c1ab9ee1e070abf78ab7adc2bce9345de9158ca65c8a403093": { "zh": { - "updatedAt": "2025-11-26T07:24:02.771Z" + "updatedAt": "2025-11-27T09:08:52.070Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.771Z" + "updatedAt": "2025-11-27T09:08:52.069Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.771Z" + "updatedAt": "2025-11-27T09:08:52.070Z" } } }, "42014f03b2e5e17b4e9d8b4cd80cfebbf2e3bca570177e4a0f46c977d992d00b": { "1713044e3cccefd79213a1fea6cb08cc00fcb5a3cdf023fa1b265af8ff27f097": { "jp": { - "updatedAt": "2025-11-26T07:24:02.769Z" + "updatedAt": "2025-11-27T09:08:52.066Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.768Z" + "updatedAt": "2025-11-27T09:08:52.065Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.770Z" + "updatedAt": "2025-11-27T09:08:52.068Z" } } }, "4c05567fa33cc5dc9787df23810bac6451ac3a0fea9f57dbfe51135476f2af9a": { "539aa35729dd5eb9f1172afd319421d880ea5ac2efe1aac243083236a1389aa5": { "jp": { - "updatedAt": "2025-11-26T07:24:02.772Z" + "updatedAt": "2025-11-27T09:08:52.072Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.771Z" + "updatedAt": "2025-11-27T09:08:52.071Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.771Z" + "updatedAt": "2025-11-27T09:08:52.071Z" } } }, "4ec20679bc9c3514801ed7e21c4718d82ab75932df1a07eb0572f662a5730d98": { "86d2c497abf25c94fa112b01bc6df68914ef1bdec7669aac57b740da912b33d9": { "jp": { - "updatedAt": "2025-11-26T07:24:02.768Z" + "updatedAt": "2025-11-27T09:08:52.064Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.756Z" + "updatedAt": "2025-11-27T09:08:52.050Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.768Z" + "updatedAt": "2025-11-27T09:08:52.064Z" } } }, "5a79d1e559ea1ad9f3ddadfdb2a43b047724a8158973368a06de949a009e4a82": { "f10bce44ecc97a7f7fbb9e4dd3135a3443539faf27799c8357608d1f78f0ea0d": { "jp": { - "updatedAt": "2025-11-26T07:24:02.769Z" + "updatedAt": "2025-11-27T09:08:52.067Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.768Z" + "updatedAt": "2025-11-27T09:08:52.065Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.768Z" + "updatedAt": "2025-11-27T09:08:52.065Z" } } }, "5ea715da4571fccc329fc033348aeecf183417b55c28bbdac60956aa1debf704": { "2a8b05277ff4a9cbe8def769d30fe9965fd38e380148a45171afc696a707de97": { "jp": { - "updatedAt": "2025-11-26T07:24:02.769Z" + "updatedAt": "2025-11-27T09:08:52.066Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.768Z" + "updatedAt": "2025-11-27T09:08:52.064Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.770Z" + "updatedAt": "2025-11-27T09:08:52.067Z" } } }, "6577565180fdc2dd6b58e525087f761a4a641e5fcccec17b8d198f112e8867a2": { "457a7fd8ab504d03ed723c9475bd87417db7fa6b8d538f336eab293e7c2db492": { "jp": { - "updatedAt": "2025-11-26T07:24:02.768Z" + "updatedAt": "2025-11-27T09:08:52.065Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.768Z" + "updatedAt": "2025-11-27T09:08:52.064Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.765Z" + "updatedAt": "2025-11-27T09:08:52.063Z" } } }, "65f86c7c3a06da5be6ca7c02d2ebc67707b92772d464e19a9f17a4ed1f5068e0": { "816a9dda53486f2f740142aa953a0c567c672d1d673898a9ad9493dd248c9c0b": { "jp": { - "updatedAt": "2025-11-26T07:24:02.756Z" + "updatedAt": "2025-11-27T09:08:52.050Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.757Z" + "updatedAt": "2025-11-27T09:08:52.051Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.757Z" + "updatedAt": "2025-11-27T09:08:52.051Z" } } }, "69e3ba4ff50b5b7c3475f46f967bf675b4e5a81f02e3546d810018e6a3fe12c7": { "d64fa7ded50ab81c30dff31ff460cf6ba0811be8f95127b0bbec04487a124039": { "jp": { - "updatedAt": "2025-11-26T07:24:02.769Z" + "updatedAt": "2025-11-27T09:08:52.066Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.766Z" + "updatedAt": "2025-11-27T09:08:52.063Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.770Z" + "updatedAt": "2025-11-27T09:08:52.068Z" } } }, "741985413cbcc54cd08f4f04379dfece525dc97edf44e2f8df78b544f7dd91e9": { "2bd4eecf6148d08318f581143d8ed2830a034f2bd9d72c70252b27c1cf3654bc": { "jp": { - "updatedAt": "2025-11-26T07:24:02.759Z" + "updatedAt": "2025-11-27T09:08:52.054Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.757Z" + "updatedAt": "2025-11-27T09:08:52.052Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.759Z" + "updatedAt": "2025-11-27T09:08:52.055Z" } } }, "8679a4ec12ab69d4d68a5bb2c5cea4b7f0881bbdd39e33ed0dbce1f7a96a02b2": { "6dafd0d4cd13c07a59291f74e30693ff78bc11afb76dbd58ffb368da7e83a065": { "jp": { - "updatedAt": "2025-11-26T07:24:02.764Z" + "updatedAt": "2025-11-27T09:08:52.062Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.767Z" + "updatedAt": "2025-11-27T09:08:52.064Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.756Z" + "updatedAt": "2025-11-27T09:08:52.050Z" } } }, "8a737109d61aff4ff62c3cea1b972f0a7863c8fef9c1f3658e42f4cb31df1392": { "132aab96d1afacf12308b65ac1af9345cb2b097664b24dcf5c773ca74a90c659": { "jp": { - "updatedAt": "2025-11-26T07:24:02.769Z" + "updatedAt": "2025-11-27T09:08:52.066Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.767Z" + "updatedAt": "2025-11-27T09:08:52.064Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.768Z" + "updatedAt": "2025-11-27T09:08:52.065Z" } } }, "8b22e50ae696d72046531764b190a2ea3daa28284aebf2f2f2721e1db7b9a752": { "a3ec1a8f31c388fb6d343bd343994dbc83607b4c1aa74c136db042c2472a32d0": { "jp": { - "updatedAt": "2025-11-26T07:24:02.766Z" + "updatedAt": "2025-11-27T09:08:52.064Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.764Z" + "updatedAt": "2025-11-27T09:08:52.062Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.766Z" + "updatedAt": "2025-11-27T09:08:52.063Z" } } }, "8cf48a0bc486c9b8e497ecc604e48b940db90a9be71802444fc6568bc64fd85a": { "2204d84ab0794f79cb34e93c0671da7bbce325d19d8d5bbb80030251d39917ee": { "jp": { - "updatedAt": "2025-11-26T07:24:02.770Z" + "updatedAt": "2025-11-27T09:08:52.069Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.771Z" + "updatedAt": "2025-11-27T09:08:52.070Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.771Z" + "updatedAt": "2025-11-27T09:08:52.070Z" } } }, "8f767913276b5f3417959156454a31c70c834a5c7093a2081510ef83903f4795": { "bce52080edbc2ef28e9154b8f007ec28a5e436114ad9041d55ab9bd299d603f2": { "jp": { - "updatedAt": "2025-11-26T07:24:02.770Z" + "updatedAt": "2025-11-27T09:08:52.069Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.769Z" + "updatedAt": "2025-11-27T09:08:52.067Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.770Z" + "updatedAt": "2025-11-27T09:08:52.068Z" } } }, "961e4fd08064e39aa2526ab854951754ce9cab815f42e5e159992babeeaa5b0f": { "cf7f511889edff19a30680bf294dfbeedaefa3ea56faf9de40db511b5d58efdd": { "jp": { - "updatedAt": "2025-11-26T07:24:02.772Z" + "updatedAt": "2025-11-27T09:08:52.072Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.771Z" + "updatedAt": "2025-11-27T09:08:52.071Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.772Z" + "updatedAt": "2025-11-27T09:08:52.072Z" } } }, "c237b65e74a71bfcdfb33228aa085209a607cb0227f57e434c617a7ced16d975": { "cab8ecccbc0fcc08ad057ca251274b94773a36f8f2f5c0968c4007592472503d": { "jp": { - "updatedAt": "2025-11-26T07:24:02.771Z" + "updatedAt": "2025-11-27T09:08:52.071Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.771Z" + "updatedAt": "2025-11-27T09:08:52.070Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.770Z" + "updatedAt": "2025-11-27T09:08:52.069Z" } } }, "c3bbfaf5ba432f3383f9213e2c564cedcf64baf52ca43663bcd031fc79f65fad": { "46c4379cf36fa439d614c84a7b1f2a6e319d2f3a5e352e7f3079aa72e1634e3c": { "jp": { - "updatedAt": "2025-11-26T07:24:02.765Z" + "updatedAt": "2025-11-27T09:08:52.062Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.764Z" + "updatedAt": "2025-11-27T09:08:52.062Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.765Z" + "updatedAt": "2025-11-27T09:08:52.062Z" } } }, "ca7eb037869880c9ebb1a34c0000cdbfc8fdc9225de1f230ad67b8fceeb858de": { "fb2d804909b58e74a6d190031cfb86ce2cfa560d0444d3bb3d0a0af94da23268": { "jp": { - "updatedAt": "2025-11-26T07:24:02.765Z" + "updatedAt": "2025-11-27T09:08:52.063Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.765Z" + "updatedAt": "2025-11-27T09:08:52.063Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.765Z" + "updatedAt": "2025-11-27T09:08:52.062Z" } } }, "d6a2aef23a40b1f742ecc4bbf44e21b915daaca32e6106a813cece2855459b4a": { "c2bbc1291a1d9794a9a8424dacda644c27086e3d431d4f0bb25b88182d583c5f": { "jp": { - "updatedAt": "2025-11-26T07:24:02.759Z" + "updatedAt": "2025-11-27T09:08:52.054Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.758Z" + "updatedAt": "2025-11-27T09:08:52.054Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.757Z" + "updatedAt": "2025-11-27T09:08:52.052Z" } } }, "ddcf8dfb6b1a4d5a1ed98c2017cdd7ae1fe774db2009725b2bf3d5ca4a50b322": { "4f4dfdc7521283f8c0348d0878aa061e186e3e3aad4e92d55841f1902f00e3d3": { "jp": { - "updatedAt": "2025-11-26T07:24:02.760Z" + "updatedAt": "2025-11-27T09:08:52.056Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.759Z" + "updatedAt": "2025-11-27T09:08:52.056Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.759Z" + "updatedAt": "2025-11-27T09:08:52.055Z" } } }, "059de09a546e5fd7f343688a18f5ae23fe63e31ccd72bd1d8e0ef1ccff248e9e": { "e0133670b30030462807054fabd8948f4d58d68bda6f5fc806435ba96fdc2531": { "jp": { - "updatedAt": "2025-11-26T07:24:18.933Z" + "updatedAt": "2025-11-27T09:08:52.082Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.933Z" + "updatedAt": "2025-11-27T09:08:52.082Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.932Z" + "updatedAt": "2025-11-27T09:08:52.080Z" } } }, "0e59ff691e81e6bb5df727b7bb1a30005ab315602d293b41cb391ed4b5409e8e": { "ab3c2315a32f46dcd77506c38fcb11173ad15a3ad7597e20a3af0f8b3c8e1c02": { "jp": { - "updatedAt": "2025-11-26T07:24:18.930Z" + "updatedAt": "2025-11-27T09:08:52.076Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.929Z" + "updatedAt": "2025-11-27T09:08:52.075Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.930Z" + "updatedAt": "2025-11-27T09:08:52.075Z" } } }, "1be2e6251cf6bfefceeb9a1d2a2cdfcbca4f3dc24d4303c2a666b520ce7dbc5e": { "79ae2db2ede93c3db9f3aa10741077dfe47e966f67fbb578af090bc05ef54683": { "jp": { - "updatedAt": "2025-11-26T07:24:18.933Z" + "updatedAt": "2025-11-27T09:08:52.081Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.934Z" + "updatedAt": "2025-11-27T09:08:52.083Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.764Z" + "updatedAt": "2025-11-27T09:08:52.061Z" } } }, "240885d8a55bf641313a779462f9d5afe9dc23030aa7263fae65179e8d79b9cf": { "0f3c6f532be1ff66173a6f491090bc401c5f5ad396a065d669cf8be23b790fbd": { "jp": { - "updatedAt": "2025-11-26T07:24:18.932Z" + "updatedAt": "2025-11-27T09:08:52.080Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.934Z" + "updatedAt": "2025-11-27T09:08:52.082Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.932Z" + "updatedAt": "2025-11-27T09:08:52.080Z" } } }, "327d9de85dcf4e9908ef639e81f0b4c26211261cdc7427d31c00d57a68f9ea57": { "defbbc0826e47d88fbafb696aa0613a205a13036670b5b16d9f7262852215ad4": { "jp": { - "updatedAt": "2025-11-26T07:24:18.929Z" + "updatedAt": "2025-11-27T09:08:52.074Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.930Z" + "updatedAt": "2025-11-27T09:08:52.077Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.930Z" + "updatedAt": "2025-11-27T09:08:52.077Z" } } }, "34fc130494be0d69639ef51384f698c85712275c82f72ea0884fc912c61fdf98": { "92c9764efaeac8ae2150358dd44c1bb27f41eb7fecfcbaeaa5223b274ca6abf2": { "jp": { - "updatedAt": "2025-11-26T07:24:18.930Z" + "updatedAt": "2025-11-27T09:08:52.076Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.764Z" + "updatedAt": "2025-11-27T09:08:52.061Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.930Z" + "updatedAt": "2025-11-27T09:08:52.076Z" } } }, "3d292af39191f27d31948c49e58c34422323914d2d835dd3b8be63d271aafaeb": { "6c24a188e7d85e8dc525f5000fb2f41b08e17a821ce60ddfa9341db9802fcdb2": { "jp": { - "updatedAt": "2025-11-26T07:24:18.935Z" + "updatedAt": "2025-11-27T09:08:52.085Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.934Z" + "updatedAt": "2025-11-27T09:08:52.083Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.934Z" + "updatedAt": "2025-11-27T09:08:52.083Z" } } }, "4b025a8d2616c548c48183c20f38fd63b3419b7d2754a037d1a3a71de57c5a3b": { "ff303dcd7cec8ced40bda437d563bc42f245742fe9f5d04eda4a24a951b0a458": { "jp": { - "updatedAt": "2025-11-26T07:24:18.933Z" + "updatedAt": "2025-11-27T09:08:52.081Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.932Z" + "updatedAt": "2025-11-27T09:08:52.081Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.933Z" + "updatedAt": "2025-11-27T09:08:52.081Z" } } }, "4be2dfff7ee7eb8ba7e00bea4338d4b73e59739bd67763683573c2c8a87c9e3d": { "37c83798ddd19c1e72b3674657a3635ca49e5d5bf74e74f2fa7bab5c89d58316": { "jp": { - "updatedAt": "2025-11-26T07:24:12.105Z" + "updatedAt": "2025-11-27T09:08:52.107Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.105Z" + "updatedAt": "2025-11-27T09:08:52.108Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.105Z" + "updatedAt": "2025-11-27T09:08:52.108Z" } } }, "508c2be06359376eba3e09eb266a71fd1a64aba5ea5c127642c386bdcf720d00": { "32a1e97aa76cb271770dca75fd904e715623cf504f26d889bcb51a382ae083e8": { "jp": { - "updatedAt": "2025-11-26T07:24:18.934Z" + "updatedAt": "2025-11-27T09:08:52.083Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.933Z" + "updatedAt": "2025-11-27T09:08:52.081Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.934Z" + "updatedAt": "2025-11-27T09:08:52.083Z" } } }, "6547aef5926a6b2487f43dbec05e0957fe924c3749b2e7aeeb9c8724921310c6": { "d72d4d5d1769fb68537cb2b0120c647b9e45e7282fdf4303b4b3b3ba33eb151f": { "jp": { - "updatedAt": "2025-11-26T07:24:02.764Z" + "updatedAt": "2025-11-27T09:08:52.061Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.933Z" + "updatedAt": "2025-11-27T09:08:52.081Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.935Z" + "updatedAt": "2025-11-27T09:08:52.085Z" } } }, "742de82015fab9560f32bc67cc0f07a9ca9e1ed3e7aeb11eb4303fa8a580185f": { "e8e388627f1d46545b74abb196d0b01e87cea3cc02063cec9c7cf6835a4f7d7b": { "jp": { - "updatedAt": "2025-11-26T07:24:18.929Z" + "updatedAt": "2025-11-27T09:08:52.074Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.929Z" + "updatedAt": "2025-11-27T09:08:52.074Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.929Z" + "updatedAt": "2025-11-27T09:08:52.074Z" } } }, "77a9c51767cd665f3dd2df3d7ddefaa1effd2f1271cde0211ccbb68de9869a6c": { "1c1de24396b6e6f16f0f9b41c9ee154414738e50d2c294ceeedb57d2b780396f": { "jp": { - "updatedAt": "2025-11-26T07:24:02.770Z" + "updatedAt": "2025-11-27T09:08:52.068Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.769Z" + "updatedAt": "2025-11-27T09:08:52.067Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.770Z" + "updatedAt": "2025-11-27T09:08:52.068Z" } } }, "90aeecc84affbe1a94ebd79e7e3236a66f9c627e327fbaeb50f05aa43d716a7a": { "a7b61a1bd22ae77b9b4f8fe2bc248f5fb8a900c9c853a0f4b28e2114edba6edb": { "jp": { - "updatedAt": "2025-11-26T07:24:18.935Z" + "updatedAt": "2025-11-27T09:08:52.084Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.934Z" + "updatedAt": "2025-11-27T09:08:52.083Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.935Z" + "updatedAt": "2025-11-27T09:08:52.085Z" } } }, "9815f463df07221f4071a1a1bca594afe93b27adf83236c69b1a77b1ebe508a0": { "007c21ba67676302542c1fff75925930501f8226edd684ec93ea8a9d480c18c1": { "jp": { - "updatedAt": "2025-11-26T07:24:18.935Z" + "updatedAt": "2025-11-27T09:08:52.086Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.935Z" + "updatedAt": "2025-11-27T09:08:52.086Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.935Z" + "updatedAt": "2025-11-27T09:08:52.087Z" } } }, @@ -3880,520 +3913,520 @@ }, "471cf465239242ec9f9d784205ced7fc1640f6da4c8228d46163e7757979aa8a": { "ru": { - "updatedAt": "2025-11-26T07:24:18.930Z" + "updatedAt": "2025-11-27T09:08:52.076Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.756Z" + "updatedAt": "2025-11-27T09:08:52.049Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:18.929Z" + "updatedAt": "2025-11-27T09:08:52.075Z" } } }, "af79bbae5029e0964764673ad906f12ea5d0cbd9f6358c69ef5ef5e1e2abf9c8": { "2ac53c6a243d501aa141cc7a46939a9b6d8d89958a13b73f7e3def4acf386114": { "jp": { - "updatedAt": "2025-11-26T07:24:18.934Z" + "updatedAt": "2025-11-27T09:08:52.084Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.935Z" + "updatedAt": "2025-11-27T09:08:52.085Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.934Z" + "updatedAt": "2025-11-27T09:08:52.084Z" } } }, "c26d90fc85acd6879286c1468a93acb164acd86eea2a927516015902a9a832be": { "7cecd0f5d3861eb201c695566fbb8efba35f90080e6ff53cfb99227a455a7433": { "jp": { - "updatedAt": "2025-11-26T07:24:18.933Z" + "updatedAt": "2025-11-27T09:08:52.081Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.933Z" + "updatedAt": "2025-11-27T09:08:52.082Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.934Z" + "updatedAt": "2025-11-27T09:08:52.083Z" } } }, "c8e894dbaf5047cc3cabc950a4a8ff475057f2bc769f6e66960185717ec18b52": { "53f949f10b8d348067c1f595ef08a9cee2ae03679b3e38fbfe1a67bd2cf12eef": { "jp": { - "updatedAt": "2025-11-26T07:24:02.770Z" + "updatedAt": "2025-11-27T09:08:52.069Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.769Z" + "updatedAt": "2025-11-27T09:08:52.066Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.769Z" + "updatedAt": "2025-11-27T09:08:52.067Z" } } }, "d6b97ab54d7597109de2eeed733aaedaf2f8744ebeed7ec1031b8460e9c545c2": { "60328591af08fa91508ef8597f7a9b54e083806e1906b2740d4ec5802abe7ecd": { "ru": { - "updatedAt": "2025-11-26T07:24:12.106Z" + "updatedAt": "2025-11-27T09:08:52.108Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.106Z" + "updatedAt": "2025-11-27T09:08:52.109Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.106Z" + "updatedAt": "2025-11-27T09:08:52.109Z" } } }, "dc33a2eb5786282387491dfbb49c8ff622ea41f11b3278436c7f82ab857f0228": { "6d34c7aa55a8fa5def4e3f2bff389c666852c48291ebab26dbe11069e1977d67": { "jp": { - "updatedAt": "2025-11-26T07:24:02.769Z" + "updatedAt": "2025-11-27T09:08:52.067Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.766Z" + "updatedAt": "2025-11-27T09:08:52.063Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.768Z" + "updatedAt": "2025-11-27T09:08:52.065Z" } } }, "0b6d9c8bcd38a3dcf622f85a9b9f97289107d754955596db63086c5a1f0de013": { "62bc03adcac1853c2ff1d41eab5ec55613571c9634311e2e305ff20b78db334b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.130Z" + "updatedAt": "2025-11-27T09:08:59.567Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.130Z" + "updatedAt": "2025-11-27T09:08:59.567Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.131Z" + "updatedAt": "2025-11-27T09:08:59.568Z" } } }, "13e624cf649963b0430c85b33066c42e9a463e53696049fdef557841854d666d": { "81c2903aa8b7c3295234e5c1b7fdf2be7dbc55fdc9edac19c3d4675fd1215205": { "jp": { - "updatedAt": "2025-11-26T07:24:12.131Z" + "updatedAt": "2025-11-27T09:08:59.569Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.132Z" + "updatedAt": "2025-11-27T09:08:59.570Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.133Z" + "updatedAt": "2025-11-27T09:08:59.573Z" } } }, "2ed1c4bf7fd0d1e9a3aa0e5f13e3c86bcaa77e12c79c9d2fd35be9b8cb485fdb": { "042d7dbf05f1c54ecb628a3aec1b03eb4e2b6e21cb8aa57b9ada88ffcae4f8df": { "jp": { - "updatedAt": "2025-11-26T07:24:18.978Z" + "updatedAt": "2025-11-27T09:08:52.182Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.979Z" + "updatedAt": "2025-11-27T09:08:52.183Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.979Z" + "updatedAt": "2025-11-27T09:08:52.183Z" } } }, "3d2059239ad6af1a2ddfd59349dac15c70518ae11885267fd488f16281699791": { "bb8598cd736f9055ff9d8ee57cfbaf381f8b9b7dd5b8bedf4b973dba8c441a2a": { "jp": { - "updatedAt": "2025-11-26T07:24:12.135Z" + "updatedAt": "2025-11-27T09:08:59.579Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.134Z" + "updatedAt": "2025-11-27T09:08:59.578Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.134Z" + "updatedAt": "2025-11-27T09:08:59.577Z" } } }, "3ea83a8ef84ec6bbe25f2090619db1abe347ff2b73bca590d6c93d68a42e4e64": { "d03f731b06fef8fcaf928f6e3faf509894d47eaf5b4921a111e9884783dfaf7d": { "jp": { - "updatedAt": "2025-11-26T07:24:12.132Z" + "updatedAt": "2025-11-27T09:08:59.570Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.132Z" + "updatedAt": "2025-11-27T09:08:59.573Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.132Z" + "updatedAt": "2025-11-27T09:08:59.572Z" } } }, "4ac2aa31459a0a92af805200fec9ac7d528d83083a8813c71176539ce30a55d5": { "47965995534ac0fbc4b623464960445019f4dbe230323078f5ba06347fc0188f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.134Z" + "updatedAt": "2025-11-27T09:08:59.576Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.134Z" + "updatedAt": "2025-11-27T09:08:59.578Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.133Z" + "updatedAt": "2025-11-27T09:08:59.575Z" } } }, "4ada93142f1fa23e960fcf0c89e6d17aa2696229485742f034de4ee6593c2071": { "2f19a7e891dd293775fe6638aa903e735c6029210bbf3a17860c69e6f1f6bb6b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.130Z" + "updatedAt": "2025-11-27T09:08:59.566Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.015Z" + "updatedAt": "2025-11-27T09:08:59.540Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.130Z" + "updatedAt": "2025-11-27T09:08:59.566Z" } } }, "5e4520555f04067ffa7eb5af85e61960bb9ef0b5e53db65b7b0471c0eb67e3ca": { "7bb096151a00169df14ef9af359bf6d8949aae217704606f9a6b10a44d8ed7c0": { "jp": { - "updatedAt": "2025-11-26T07:24:12.131Z" + "updatedAt": "2025-11-27T09:08:59.570Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.132Z" + "updatedAt": "2025-11-27T09:08:59.571Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.132Z" + "updatedAt": "2025-11-27T09:08:59.572Z" } } }, "736bf0149d53b024ca3bd9e7977f0bc63d265b1f25ebfb6dfdefeb025d67a838": { "dea965238a83d73269b02031548818dad6e76024fdd545d4ebfad71b6ea7f2f6": { "jp": { - "updatedAt": "2025-11-26T07:24:12.132Z" + "updatedAt": "2025-11-27T09:08:59.570Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.132Z" + "updatedAt": "2025-11-27T09:08:59.571Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.133Z" + "updatedAt": "2025-11-27T09:08:59.574Z" } } }, "78374142cbe93e8f6c7c78c21fae25fb7304d36492b6bf841f120cb0b757622b": { "8c65e21fe9e7b63afe26dee2f144ad334fde661179f2df54cde98ef19f746770": { "jp": { - "updatedAt": "2025-11-26T07:24:12.105Z" + "updatedAt": "2025-11-27T09:08:52.108Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.105Z" + "updatedAt": "2025-11-27T09:08:52.108Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.105Z" + "updatedAt": "2025-11-27T09:08:52.108Z" } } }, "7d77ec1ad6a5f022e0b46f5c3c3ce2c3fea37ff042d1b5dc03023407e067e3da": { "a014826091cc7de6ffe26de700b6870df49479656119a1c4582ab3ba9f32f66c": { "jp": { - "updatedAt": "2025-11-26T07:24:18.978Z" + "updatedAt": "2025-11-27T09:08:52.181Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.978Z" + "updatedAt": "2025-11-27T09:08:52.181Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.978Z" + "updatedAt": "2025-11-27T09:08:52.181Z" } } }, "8c7d4f3fdba3bb4edd06686b726948493ddc13a3c70be44e45a5101013e47060": { "e1a3f32eec379181f97de3483a7955652a71670ed2c2d3ea34c65b17fdc5961d": { "jp": { - "updatedAt": "2025-11-26T07:24:18.978Z" + "updatedAt": "2025-11-27T09:08:52.182Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.978Z" + "updatedAt": "2025-11-27T09:08:52.182Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.979Z" + "updatedAt": "2025-11-27T09:08:52.183Z" } } }, "98ee65248863652e985d674cf1372dd020bd6094b7f3998ae6f4a646d94892b6": { "1bd995b679039ca6bce9ee0b09736ef8f967620b8b89d51a62c70a4d312caa42": { "jp": { - "updatedAt": "2025-11-26T07:24:19.015Z" + "updatedAt": "2025-11-27T09:08:59.542Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.015Z" + "updatedAt": "2025-11-27T09:08:59.542Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.015Z" + "updatedAt": "2025-11-27T09:08:59.541Z" } } }, "995a2e3a8b7d9f74a6263555c02ac239faad9cd474831a38bb8fbe02a8eb4930": { "9cf1d6f4f93a189585be6125df675ba7e1d73f8db3dbffd354c683519bf24dc5": { "jp": { - "updatedAt": "2025-11-26T07:24:12.133Z" + "updatedAt": "2025-11-27T09:08:59.574Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.133Z" + "updatedAt": "2025-11-27T09:08:59.574Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.008Z" + "updatedAt": "2025-11-27T09:08:59.491Z" } } }, "a0768d64d8480213582b5d2b019ac82a6fe9572e3115c707079ccd2a6665834f": { "f53e89f4c4f5f43c018862a8bcb2458cf38a59a2eed7d3a2bac21d2ed57cd772": { "jp": { - "updatedAt": "2025-11-26T07:24:19.015Z" + "updatedAt": "2025-11-27T09:08:59.540Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.015Z" + "updatedAt": "2025-11-27T09:08:59.540Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.015Z" + "updatedAt": "2025-11-27T09:08:59.541Z" } } }, "b5acaeeec7ee7e0b3d8c363ae84792dfc90953fe82cb345bd9a76003f6857008": { "becf724869353de9ac0fbdf72d34274bf02c4477ca8efc26bf383f25cab477b9": { "jp": { - "updatedAt": "2025-11-26T07:24:18.979Z" + "updatedAt": "2025-11-27T09:08:52.184Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.978Z" + "updatedAt": "2025-11-27T09:08:52.182Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.978Z" + "updatedAt": "2025-11-27T09:08:52.181Z" } } }, "b6cd16941758ca4a1cd018e80e59496c19b7711675f9eec3946a989810da8301": { "def5f58d34f9e59ee3bc906fda67f3a9ea90982c852224c86d9d02f3eb4daa81": { "jp": { - "updatedAt": "2025-11-26T07:24:12.132Z" + "updatedAt": "2025-11-27T09:08:59.572Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.131Z" + "updatedAt": "2025-11-27T09:08:59.569Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.132Z" + "updatedAt": "2025-11-27T09:08:59.573Z" } } }, "c5c9fb1e01e8fd89820000126b65de13c1b1aa7723a21af8dd6a22b0c6ce61ab": { "f0bcc513afa858c10cd2907f4b418305889e8287702cf9cdb050972831c885a7": { "jp": { - "updatedAt": "2025-11-26T07:24:12.132Z" + "updatedAt": "2025-11-27T09:08:59.571Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.131Z" + "updatedAt": "2025-11-27T09:08:59.569Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.133Z" + "updatedAt": "2025-11-27T09:08:59.573Z" } } }, "ced886ccae611b5ba4d14770da1f424b55ef56a32ab309f10b5ba3de061a0cbe": { "4c6f8e2e7974ca1e44a92dea680f0fe4823cb3dbd478d406583065fef1965c83": { "jp": { - "updatedAt": "2025-11-26T07:24:18.978Z" + "updatedAt": "2025-11-27T09:08:52.182Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.978Z" + "updatedAt": "2025-11-27T09:08:52.183Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.979Z" + "updatedAt": "2025-11-27T09:08:52.183Z" } } }, "f3dfcb7d93e8daf7246f1d7b55aef72c87092941f169ec834a03a5094039d22f": { "30c8a47e6bcddf07ce86164218209c750f1bf6a65eaa190202477bb3b35f8686": { "jp": { - "updatedAt": "2025-11-26T07:24:12.105Z" + "updatedAt": "2025-11-27T09:08:52.107Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.105Z" + "updatedAt": "2025-11-27T09:08:52.107Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.105Z" + "updatedAt": "2025-11-27T09:08:52.107Z" } } }, "f84c373cff7dbac798db4f00e0218085b87659f099e72d499856efa42972f195": { "4b9492d3cf50402946edb0019de92a07ebf67ee41426a0a31d7cd82149581a9e": { "jp": { - "updatedAt": "2025-11-26T07:24:12.131Z" + "updatedAt": "2025-11-27T09:08:59.568Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.131Z" + "updatedAt": "2025-11-27T09:08:59.568Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.131Z" + "updatedAt": "2025-11-27T09:08:59.567Z" } } }, "018a46e784f4216bc572797ae4cfd925900c11b01082ddf5a2c9b5ed08891d85": { "0d31eaa79270bc25ade146c9f275b342537708966bfbae7622a921d0c569a2ee": { "jp": { - "updatedAt": "2025-11-26T07:24:12.136Z" + "updatedAt": "2025-11-27T09:08:59.586Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.135Z" + "updatedAt": "2025-11-27T09:08:59.581Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.140Z" + "updatedAt": "2025-11-27T09:08:59.601Z" } } }, "171b148b39ffa6bfa68154f7f794bc9828036c905ec6ea0ed3ab52ea0ab68098": { "9b71315bfc1a5504ea574514ec21f8d0b8c75e646482a4fa10456513e23ec3be": { "jp": { - "updatedAt": "2025-11-26T07:24:12.153Z" + "updatedAt": "2025-11-27T09:08:59.656Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.155Z" + "updatedAt": "2025-11-27T09:08:59.664Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.154Z" + "updatedAt": "2025-11-27T09:08:59.657Z" } } }, "24ff6950696e941c133754804fa0f7502ed10e3f273f7828f34d0ec98cc69169": { "9ffff4baa30bb8aedc5b7c4bed60c32432037227f50854a8cf0a554ca74b6742": { "jp": { - "updatedAt": "2025-11-26T07:24:12.152Z" + "updatedAt": "2025-11-27T09:08:59.653Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.151Z" + "updatedAt": "2025-11-27T09:08:59.646Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.150Z" + "updatedAt": "2025-11-27T09:08:59.646Z" } } }, "2de6c7cb85bc8ce6037011a7cb84ceda700e54852ad5f8048c1b021e9505cfe2": { "cffde22dd20a99321b2469fa4c5f889ab0623f7597c7318cb5c82cc569be15bf": { "zh": { - "updatedAt": "2025-11-26T07:24:12.151Z" + "updatedAt": "2025-11-27T09:08:59.648Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.152Z" + "updatedAt": "2025-11-27T09:08:59.652Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.152Z" + "updatedAt": "2025-11-27T09:08:59.652Z" } } }, "34539b13bc46ae1ff86399ed0b4beced83470a47c23ade3688d97729e239c69b": { "1227956927c2e159479174df3466808d9bd9a1f2cdd1dba3233e8d80391d27c2": { "jp": { - "updatedAt": "2025-11-26T07:24:12.152Z" + "updatedAt": "2025-11-27T09:08:59.653Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.152Z" + "updatedAt": "2025-11-27T09:08:59.652Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.151Z" + "updatedAt": "2025-11-27T09:08:59.647Z" } } }, "397adfde7a860a0707618fd95e8f1f4db83c3ecc2e6141f24b64af0162bec70a": { "fa85899ec41f9998773c9e4dcae84709a75245ca0e0e75850cdc76516b7fd66b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.141Z" + "updatedAt": "2025-11-27T09:08:59.604Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.147Z" + "updatedAt": "2025-11-27T09:08:59.611Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.138Z" + "updatedAt": "2025-11-27T09:08:59.596Z" } } }, "439776d4466dd70e3c5608271d0bffbce0782915faaf2fea75fff7b8e7835bee": { "eb302a76d12c1319056a47c6302ef68febf3a0648e4ce4f94b2b9cfe7bec8c8e": { "jp": { - "updatedAt": "2025-11-26T07:24:12.154Z" + "updatedAt": "2025-11-27T09:08:59.657Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.153Z" + "updatedAt": "2025-11-27T09:08:59.655Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.154Z" + "updatedAt": "2025-11-27T09:08:59.657Z" } } }, "5efbb4c7ed17158323437048f6f32b54a1665e8008c3b499bc27160f7cbf02df": { "06c63df1edaffeb10cb0def08a755d71c765dda9e99144cb3ca1eda2e783c187": { "jp": { - "updatedAt": "2025-11-26T07:24:12.135Z" + "updatedAt": "2025-11-27T09:08:59.581Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.135Z" + "updatedAt": "2025-11-27T09:08:59.582Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.135Z" + "updatedAt": "2025-11-27T09:08:59.582Z" } } }, "61b82c455342cbc02f4a1d8651204017609b443fce1a7cb57a4831730d7fc050": { "1d27a882dcff09d3f22870a4f6707da298747c547d36d3db2d61ebb22253f91e": { "jp": { - "updatedAt": "2025-11-26T07:24:12.155Z" + "updatedAt": "2025-11-27T09:08:59.663Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.156Z" + "updatedAt": "2025-11-27T09:08:59.671Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.154Z" + "updatedAt": "2025-11-27T09:08:59.660Z" } } }, "65514e61688950cbfdfadc40744ab73dd695de039206e57d83d48b00a2982161": { "c8edcf2ff1eff165beb006860951dfee61d76b4197857f2fbc085e60726d3e38": { "jp": { - "updatedAt": "2025-11-26T07:24:12.156Z" + "updatedAt": "2025-11-27T09:08:59.667Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.139Z" + "updatedAt": "2025-11-27T09:08:59.600Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.147Z" + "updatedAt": "2025-11-27T09:08:59.614Z" } } }, "745a92a844b6497c0310ad16eb03df90d655cde8d7482e58f32d1af9a9c6e68c": { "ed4640fd150472b99b01119068e79ab5dce8af8145d98d8e1f847e482439180c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.135Z" + "updatedAt": "2025-11-27T09:08:59.579Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.133Z" + "updatedAt": "2025-11-27T09:08:59.576Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.134Z" + "updatedAt": "2025-11-27T09:08:59.576Z" } } }, "7ca5e1494be65fba41fe95ee7a3461cd0844038fb74f44098aa4e3f88607c562": { "ac68f255dfedba5a9d7fc4021983a5c3dfb83430f46eefe29bc3204cdf2720ec": { "jp": { - "updatedAt": "2025-11-26T07:24:12.149Z" + "updatedAt": "2025-11-27T09:08:59.642Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.150Z" + "updatedAt": "2025-11-27T09:08:59.644Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.150Z" + "updatedAt": "2025-11-27T09:08:59.646Z" } } }, "8bd7dd424981003d655b71b52a223cd72ca57102e28da0b8baca6e8ed3256122": { "8c69f1a1f0d38fc584fc63dfbf0111f2d94d9ce8ad28c47314863119988ad693": { "jp": { - "updatedAt": "2025-11-26T07:24:19.015Z" + "updatedAt": "2025-11-27T09:08:59.539Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.137Z" + "updatedAt": "2025-11-27T09:08:59.593Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.148Z" + "updatedAt": "2025-11-27T09:08:59.618Z" } } }, @@ -4419,421 +4452,432 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.158Z" } + }, + "32f79342fda1521b32c3cbd5194d1c9682d16a53ade8cb05571f8a298e7705d3": { + "zh": { + "updatedAt": "2025-11-27T09:08:59.632Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:59.638Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:59.641Z" + } } }, "9b90a0dfa5536d6059d87dc8f5e817097c8b7bb53db517bff51a83c3e4c282ee": { "3e080983011ca5e98fc432fd4170067d4807f3aaa1e1114b8ec36d58af28fa38": { "jp": { - "updatedAt": "2025-11-26T07:24:12.150Z" + "updatedAt": "2025-11-27T09:08:59.643Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.150Z" + "updatedAt": "2025-11-27T09:08:59.644Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.149Z" + "updatedAt": "2025-11-27T09:08:59.643Z" } } }, "9fe1ae047d397e67707e74c6e97afdec367a2fb4cf27a1ade86e3e2bebd7c4a1": { "9bf44240bd8b0398201f8cc05ed363d4bfa70d08d267473203007c092efe5287": { "jp": { - "updatedAt": "2025-11-26T07:24:12.130Z" + "updatedAt": "2025-11-27T09:08:59.565Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.129Z" + "updatedAt": "2025-11-27T09:08:59.563Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.152Z" + "updatedAt": "2025-11-27T09:08:59.651Z" } } }, "b12e51a32d37bb2fb10917322e67f8c70cee8f595c143cd1b629cbf918f6b7b1": { "5014ad055f5a140206335e375c472557e174c690fe089774a9aa8c6d57d28567": { "jp": { - "updatedAt": "2025-11-26T07:24:19.014Z" + "updatedAt": "2025-11-27T09:08:59.535Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.136Z" + "updatedAt": "2025-11-27T09:08:59.585Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.141Z" + "updatedAt": "2025-11-27T09:08:59.606Z" } } }, "bb0a1d7136d43d7b6bb4fa9a54f344ca0e81896a5eaf9cc6ef57b8c3aa682779": { "399cd03c18db8759846f978c253d288ef4caab87adb1838ee5aed970412744bb": { "jp": { - "updatedAt": "2025-11-26T07:24:12.150Z" + "updatedAt": "2025-11-27T09:08:59.644Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.150Z" + "updatedAt": "2025-11-27T09:08:59.646Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.151Z" + "updatedAt": "2025-11-27T09:08:59.648Z" } } }, "c9bb01545754a986ab5cb4d637d8745f995e8c5243183cf90e72563584cc924f": { "efe17e7594347ac3238decf2b1daf336a87a883f6d30bf4a916bc5ae75b80dc6": { "jp": { - "updatedAt": "2025-11-26T07:24:12.134Z" + "updatedAt": "2025-11-27T09:08:59.577Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.133Z" + "updatedAt": "2025-11-27T09:08:59.575Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.134Z" + "updatedAt": "2025-11-27T09:08:59.578Z" } } }, "e814a9ccad02d86ef7c915fb695045529731c882788157b39795b3d624875c39": { "e078c263c4a0f84949c189cd1b90be6b54b0117004a43d0171ca1e7dbbab8fa6": { "jp": { - "updatedAt": "2025-11-26T07:24:12.134Z" + "updatedAt": "2025-11-27T09:08:59.579Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.135Z" + "updatedAt": "2025-11-27T09:08:59.580Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.134Z" + "updatedAt": "2025-11-27T09:08:59.577Z" } } }, "f4614a808acf58ed3907dbc80a1d159bc107dde839623cbee9705514996e1fc7": { "ad253066ead1dba2ae292160fbbd6c6d76963231fdc98e27296a51ffab627b05": { "jp": { - "updatedAt": "2025-11-26T07:24:12.134Z" + "updatedAt": "2025-11-27T09:08:59.577Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.133Z" + "updatedAt": "2025-11-27T09:08:59.575Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.133Z" + "updatedAt": "2025-11-27T09:08:59.575Z" } } }, "fb63ffa66c1f033c420fc44f068aac3712f16d06effcb9b76446564d05a24f47": { "1f15e6976c3b57e0c74fc54faa9674d3ad5afb9a87efa0a5368573923ad33611": { "jp": { - "updatedAt": "2025-11-26T07:24:12.151Z" + "updatedAt": "2025-11-27T09:08:59.648Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.150Z" + "updatedAt": "2025-11-27T09:08:59.645Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.151Z" + "updatedAt": "2025-11-27T09:08:59.648Z" } } }, "168f630aa6a5caf3759f0040f89a49b660bf997cba3f9bb07f93ceae7eaaf55a": { "3b9ccf775a7eb6ed27d87bbe61d94bd4d43913c00f26010a4b8706daf4a6a956": { "jp": { - "updatedAt": "2025-11-26T07:24:12.149Z" + "updatedAt": "2025-11-27T09:08:59.642Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.130Z" + "updatedAt": "2025-11-27T09:08:59.566Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.150Z" + "updatedAt": "2025-11-27T09:08:59.645Z" } } }, "23e27d61b6423512c41b26e6c3b22921e93b5b301057fe1f453a2c0d3c1d15fa": { "7a7f792ff342a20689f60f0f265171128a171dee6f6e5a078ebb83a2cdf6ed03": { "jp": { - "updatedAt": "2025-11-26T07:24:12.160Z" + "updatedAt": "2025-11-27T09:08:59.675Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.160Z" + "updatedAt": "2025-11-27T09:08:59.675Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.159Z" + "updatedAt": "2025-11-27T09:08:59.673Z" } } }, "296596880e307a8996c1b3d2f22b414f048332caf4d2083980ef5b77a8a5fdba": { "8891345d058983824a4006d332ff1e3d458871da85894bef04abd4b4a563fce5": { "jp": { - "updatedAt": "2025-11-26T07:24:19.018Z" + "updatedAt": "2025-11-27T09:08:52.236Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.018Z" + "updatedAt": "2025-11-27T09:08:52.235Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.018Z" + "updatedAt": "2025-11-27T09:08:52.236Z" } } }, "3147fdc69c8941ecf865e47d9d8db4472067857ced28a4db9f1732ab44a9e898": { "89c5c15673bafb792cce9d30449c0c07581ad4fc443060edb182f1287d36112c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.152Z" + "updatedAt": "2025-11-27T09:08:59.654Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.149Z" + "updatedAt": "2025-11-27T09:08:59.620Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.151Z" + "updatedAt": "2025-11-27T09:08:59.647Z" } } }, "400e0d7d9471a5d2f998a13e2c607bb42e5b9c72e742d7aeb05f4ee1b2071baf": { "04b93a38ca385c15ca8270dcfa15d68a6941678bdcd2f76c2ad4f06bef8c33c4": { "jp": { - "updatedAt": "2025-11-26T07:24:12.153Z" + "updatedAt": "2025-11-27T09:08:59.656Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.148Z" + "updatedAt": "2025-11-27T09:08:59.619Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.154Z" + "updatedAt": "2025-11-27T09:08:59.658Z" } } }, "4088be7256afa16e0829b465fbe851d2600d3bbb21c2610210c4075f713ee668": { "5263f7887931f9fbf63f2e9b15b7ccdd2c7157a7fd13cb67ba7bb5a4724f5c9f": { "jp": { - "updatedAt": "2025-11-26T07:24:19.017Z" + "updatedAt": "2025-11-27T09:08:52.233Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.017Z" + "updatedAt": "2025-11-27T09:08:52.230Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.017Z" + "updatedAt": "2025-11-27T09:08:52.231Z" } } }, "434c8c6575a1c96da70aa7b25b8f2386d3813854c5fc71c4731982bf93c5b551": { "33868413cbf230f1914b6622c0fa2f639a7ea45c3142a4368aa173e8a03fc411": { "jp": { - "updatedAt": "2025-11-26T07:24:19.017Z" + "updatedAt": "2025-11-27T09:08:52.230Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.017Z" + "updatedAt": "2025-11-27T09:08:52.233Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.018Z" + "updatedAt": "2025-11-27T09:08:52.234Z" } } }, "5199e54b28e8b206af31f52654ebdf21657caebae6cfe9e8a655ac120217243a": { "cce5c749f00809c0ebd64bf0b902ba923e07ffe3f6cf94b3e416613a539be455": { "jp": { - "updatedAt": "2025-11-26T07:24:12.159Z" + "updatedAt": "2025-11-27T09:08:59.673Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.159Z" + "updatedAt": "2025-11-27T09:08:59.674Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.159Z" + "updatedAt": "2025-11-27T09:08:59.673Z" } } }, "53036f27fabf8d446bbd29d9cc70a86efca0166f01d8c0a80c2e5887bae5dcc7": { "4af9345e8b4d38c273b70d4810c616586320dd68b576345f37b88d764fc3b31a": { "jp": { - "updatedAt": "2025-11-26T07:24:19.018Z" + "updatedAt": "2025-11-27T09:08:52.234Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.018Z" + "updatedAt": "2025-11-27T09:08:52.235Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.018Z" + "updatedAt": "2025-11-27T09:08:52.234Z" } } }, "7e14895b92e515a566c49df3e172fa8ef0794a3911f227fc4a71c6dba5f490d7": { "99b76fc928beec586c17a5cc43f58eacac997ef5729cc011bbfca37d37c70a79": { "jp": { - "updatedAt": "2025-11-26T07:24:12.149Z" + "updatedAt": "2025-11-27T09:08:59.643Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.149Z" + "updatedAt": "2025-11-27T09:08:59.642Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.149Z" + "updatedAt": "2025-11-27T09:08:59.643Z" } } }, "818f1c114e04624a9ce346e723231683afc9efb77f488e698cfae3f76123798c": { "7802fce1dd531f1d9274394e1014f26f608015405f1fca427d28159a91303ceb": { "jp": { - "updatedAt": "2025-11-26T07:24:12.160Z" + "updatedAt": "2025-11-27T09:08:59.676Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.017Z" + "updatedAt": "2025-11-27T09:08:52.231Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.148Z" + "updatedAt": "2025-11-27T09:08:59.619Z" } } }, "89be4ef20c9e5fe95e7e9565ff5aa903eef3eacf9ef5bbff1fa371c4ce7dca62": { "a6c4756c4f81974e9497aa328cf4f067d2e218a364817e6b3353285d9d897dbf": { "ru": { - "updatedAt": "2025-11-26T07:24:19.016Z" + "updatedAt": "2025-11-27T09:08:52.221Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.017Z" + "updatedAt": "2025-11-27T09:08:52.233Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:19.016Z" + "updatedAt": "2025-11-27T09:08:52.221Z" } } }, "92e7d4855f47bd7172f2143c5bf24c013dcd99fd681ef3d53e75a588365ef40f": { "4aba2abdc8ba16a13f0e130fc8a1c260887158a147901de0d5f87498741d53f4": { "jp": { - "updatedAt": "2025-11-26T07:24:19.017Z" + "updatedAt": "2025-11-27T09:08:52.232Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.018Z" + "updatedAt": "2025-11-27T09:08:52.234Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.017Z" + "updatedAt": "2025-11-27T09:08:52.233Z" } } }, "b82ca3ae71e7ca0bff5a8a1a958e415791b51606240790fabac0a24e99e5a8e5": { "4ed62ba9027cfba50a02993f949860b2fbf583b0d2272c93d49202621bd1c2b9": { "jp": { - "updatedAt": "2025-11-26T07:24:12.152Z" + "updatedAt": "2025-11-27T09:08:59.653Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.148Z" + "updatedAt": "2025-11-27T09:08:59.620Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.153Z" + "updatedAt": "2025-11-27T09:08:59.654Z" } } }, "bfa678e1e376ec015ac9221d88b1803ce7811869f141b22241c78abacbd547fe": { "8a6e9f00b55f3b0576f01c6ef20c5163ebaa186d9ca2ba3a241ee00d1040de72": { "jp": { - "updatedAt": "2025-11-26T07:24:12.153Z" + "updatedAt": "2025-11-27T09:08:59.655Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.153Z" + "updatedAt": "2025-11-27T09:08:59.655Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.154Z" + "updatedAt": "2025-11-27T09:08:59.657Z" } } }, "c0113692c1b839bd1d0b553b8a746fd8e901fea18a0365874a7d57b5c47410d1": { "fba4fb769bf604e65c2e862ea128a3429d4692c33e0b8ca43bea57e16c6781c6": { "jp": { - "updatedAt": "2025-11-26T07:24:12.149Z" + "updatedAt": "2025-11-27T09:08:59.622Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.149Z" + "updatedAt": "2025-11-27T09:08:59.622Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.149Z" + "updatedAt": "2025-11-27T09:08:59.621Z" } } }, "c2fb7179016e62efedb581c777d5b3e618da9208a31a2d9a164ea0308a1143c8": { "795fa89dca9c3b26ee3aeaa8be7c8410b0abd1d329f364f1777a29c3bf6ae7de": { "jp": { - "updatedAt": "2025-11-26T07:24:12.153Z" + "updatedAt": "2025-11-27T09:08:59.656Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.153Z" + "updatedAt": "2025-11-27T09:08:59.654Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.152Z" + "updatedAt": "2025-11-27T09:08:59.653Z" } } }, "d853a1e0bc487c020a87d920028e6165d0cb3cc395e7fffd09047dee78720588": { "adec2ea632fca207a13f7608230126d9fa9e97108c03848018e30859a7144104": { "jp": { - "updatedAt": "2025-11-26T07:24:12.150Z" + "updatedAt": "2025-11-27T09:08:59.645Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.150Z" + "updatedAt": "2025-11-27T09:08:59.644Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.151Z" + "updatedAt": "2025-11-27T09:08:59.647Z" } } }, "d971004a67c884d87b116ecf5b3d5fab2f5f3b753403309ec773a8758fd71209": { "ee100073febb1b1a4cdab984a18791aa2ab3c4593f7207c33f556592deca25f0": { "jp": { - "updatedAt": "2025-11-26T07:24:19.018Z" + "updatedAt": "2025-11-27T09:08:52.235Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.149Z" + "updatedAt": "2025-11-27T09:08:59.621Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.018Z" + "updatedAt": "2025-11-27T09:08:52.235Z" } } }, "ed8b9299efe36240a44450f98875fb20ad838d0c4a97a4d6b56749d87a6c69aa": { "64421077253a2367928552f8ecfca1500ab1a3aa6470e26d805f6aae81b107b2": { "jp": { - "updatedAt": "2025-11-26T07:24:12.148Z" + "updatedAt": "2025-11-27T09:08:59.619Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.160Z" + "updatedAt": "2025-11-27T09:08:59.676Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.159Z" + "updatedAt": "2025-11-27T09:08:59.672Z" } } }, "f2a1cb5fbab7a29d73cb9cda36a728e39c8c151cbbf17216e1d17db9fa27ca46": { "476a6d57ad70a1da9a30da84cb37903d939c7a7a7081a3cf8af22e8a9146c1d3": { "jp": { - "updatedAt": "2025-11-26T07:24:12.159Z" + "updatedAt": "2025-11-27T09:08:59.674Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.159Z" + "updatedAt": "2025-11-27T09:08:59.674Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.159Z" + "updatedAt": "2025-11-27T09:08:59.674Z" } } }, "072403da5aaa82666ec2ac55aba2660e421b6711c6cb70c42b4eb6038b58554a": { "aa38bbbb12b1ed94ca667358f90437e09046357f71a6d1e0f8a508d57a4b5568": { "jp": { - "updatedAt": "2025-11-26T07:24:19.017Z" + "updatedAt": "2025-11-27T09:08:52.231Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.017Z" + "updatedAt": "2025-11-27T09:08:52.231Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.016Z" + "updatedAt": "2025-11-27T09:08:52.221Z" } } }, "242c81539a7d39347e31852ff01c14ca7481b428f62ec2a9a8ef8923e319fd70": { "ff718abf7b9337cb72f9728d2ee59f8366fc732135cec35be718b34d911ff036": { "jp": { - "updatedAt": "2025-11-26T07:24:19.042Z" + "updatedAt": "2025-11-27T09:08:52.271Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.032Z" + "updatedAt": "2025-11-27T09:08:59.699Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.042Z" + "updatedAt": "2025-11-27T09:08:52.273Z" } } }, "2ca1f06020b55585ef361cf2b43c9aa9e23ed32e9d0a80f58141cb6b357e2508": { "e8f70f164f2c79a05e20f2ea7598ea71abec4dd9a196fd990cb3b9f5f5250252": { "jp": { - "updatedAt": "2025-11-26T07:24:19.017Z" + "updatedAt": "2025-11-27T09:08:52.231Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.016Z" + "updatedAt": "2025-11-27T09:08:52.222Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.016Z" + "updatedAt": "2025-11-27T09:08:52.222Z" } } }, @@ -4851,117 +4895,117 @@ }, "6e3e04cc7119c0602d04810abb60bd15340766476b6dd90c89c802891040b74f": { "ru": { - "updatedAt": "2025-11-26T07:24:19.020Z" + "updatedAt": "2025-11-27T09:08:52.240Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.019Z" + "updatedAt": "2025-11-27T09:08:52.239Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:19.019Z" + "updatedAt": "2025-11-27T09:08:52.237Z" } } }, "516b68aad0c74f76c3c12fe30d1f7258569a0b66643da4924fd24d791f072074": { "55acd998caff6e952b47ceb372ae02d24533c50e2c2a2d341e32d84c2b4a01b1": { "jp": { - "updatedAt": "2025-11-26T07:24:19.041Z" + "updatedAt": "2025-11-27T09:08:52.269Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.043Z" + "updatedAt": "2025-11-27T09:08:52.274Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.026Z" + "updatedAt": "2025-11-27T09:08:59.700Z" } } }, "52d9303d908cc54e70744ee1b1e2e09e4cf8cb226c9925cebd341f9cac387001": { "71eaa12db00dcad81d12c60186209b5ab377404a70d4a18ee7d26b6ece5ff741": { "jp": { - "updatedAt": "2025-11-26T07:24:19.033Z" + "updatedAt": "2025-11-27T09:08:59.701Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.033Z" + "updatedAt": "2025-11-27T09:08:59.700Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.033Z" + "updatedAt": "2025-11-27T09:08:59.701Z" } } }, "576d725e93d552fa1d974e38954e0acf96bd1d7bdb7ce394aea881a846161589": { "5d83a7ec0232591623da4893b116014b1e37aa25bdbbedda273544d85805f34d": { "jp": { - "updatedAt": "2025-11-26T07:24:19.019Z" + "updatedAt": "2025-11-27T09:08:52.237Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.019Z" + "updatedAt": "2025-11-27T09:08:52.236Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.018Z" + "updatedAt": "2025-11-27T09:08:52.236Z" } } }, "59eee6beba7ef7f4b2b1ab657b188c2ad938982b20b45febf1c21c4c7b23d916": { "379215258832c5b1b0beefd2f0012d327e4907cdb0e2564650bdb42214e2e265": { "jp": { - "updatedAt": "2025-11-26T07:24:19.040Z" + "updatedAt": "2025-11-27T09:08:52.267Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.043Z" + "updatedAt": "2025-11-27T09:08:52.275Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.042Z" + "updatedAt": "2025-11-27T09:08:52.274Z" } } }, "671c3c038f46cc2a350b67ff548f3064f3440f0912e1cada9cdbe60cb9c2971b": { "35a6b4b0da582ffce53ec6d62ecfa840b3fd54894bd3063441a0fb637cfcebb0": { "jp": { - "updatedAt": "2025-11-26T07:24:12.160Z" + "updatedAt": "2025-11-27T09:08:59.675Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.015Z" + "updatedAt": "2025-11-27T09:08:52.220Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.160Z" + "updatedAt": "2025-11-27T09:08:59.676Z" } } }, "6baf2f9dc91a3aafdaf603aa070b6d303e0ca43f60c45975bd126c795f51bf6c": { "21159c4739b98c5874cd3f6e95850d863ba6be6c3a8978b327a9bef2d0bbda5b": { "jp": { - "updatedAt": "2025-11-26T07:24:19.040Z" + "updatedAt": "2025-11-27T09:08:52.267Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.032Z" + "updatedAt": "2025-11-27T09:08:59.699Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.041Z" + "updatedAt": "2025-11-27T09:08:52.269Z" } } }, "85b69398b5611cad0ed97b26cf9ee7ab54989a0ec7615bc3aaabc2e0ae3c33ba": { "3069fe2c05efa1690a8fd9f6e9519528b8d09fe75d6fe914e613400f223a3e0c": { "jp": { - "updatedAt": "2025-11-26T07:24:19.042Z" + "updatedAt": "2025-11-27T09:08:52.272Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.040Z" + "updatedAt": "2025-11-27T09:08:52.266Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.042Z" + "updatedAt": "2025-11-27T09:08:52.272Z" } } }, "8d4d7b2200cef950ad1bc09f8c982ee5def76cb7de03b7265ce2ab6d4a48fc07": { "782ddff0f1b9ecab869f6fba2c946f9fc98a65b12620a1eeeb09e7adfbdef623": { "jp": { - "updatedAt": "2025-11-26T07:24:12.160Z" + "updatedAt": "2025-11-27T09:08:59.676Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.016Z" + "updatedAt": "2025-11-27T09:08:52.222Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.016Z" + "updatedAt": "2025-11-27T09:08:52.222Z" } } }, @@ -4979,1976 +5023,1976 @@ }, "f82d62c4dc19a5c31661c04d7a069bfa0d236fd3870382dd08d9cdbb13e02b93": { "ru": { - "updatedAt": "2025-11-26T07:24:19.019Z" + "updatedAt": "2025-11-27T09:08:52.239Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.019Z" + "updatedAt": "2025-11-27T09:08:52.238Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:19.019Z" + "updatedAt": "2025-11-27T09:08:52.237Z" } } }, "b326d89975e77fc4fe5e09c43f7d7dd72353ad2de4c76604cfa709d60f39cee1": { "41f6f44d6560ff4b7b4a8919ea06169035e1ab5f00669a7875013466734ef23e": { "jp": { - "updatedAt": "2025-11-26T07:24:19.040Z" + "updatedAt": "2025-11-27T09:08:52.266Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.039Z" + "updatedAt": "2025-11-27T09:08:52.264Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.039Z" + "updatedAt": "2025-11-27T09:08:52.265Z" } } }, "c0388925c5cbd757f80d526185840b27148d3d9f44442adba2d651d360e9f8f2": { "fe663d93e8ac7ca2bac8f4753fad3eb0d0150631ba2d2c4e3a85eb5fdd27dcf5": { "jp": { - "updatedAt": "2025-11-26T07:24:19.021Z" + "updatedAt": "2025-11-27T09:08:52.243Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.021Z" + "updatedAt": "2025-11-27T09:08:52.243Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.016Z" + "updatedAt": "2025-11-27T09:08:52.221Z" } } }, "c8f7fa8f88301edf51171572623222cac00927836c2b38e0b936dc6808969163": { "0bdde8ad92c2b56e1260138b52e278dda8cd06b984643902593d0d0cd7fb1ef3": { "jp": { - "updatedAt": "2025-11-26T07:24:12.159Z" + "updatedAt": "2025-11-27T09:08:59.673Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.016Z" + "updatedAt": "2025-11-27T09:08:52.230Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.016Z" + "updatedAt": "2025-11-27T09:08:52.230Z" } } }, "cafe8a479283375a185399d18cc4d2444fa4afed320fccd79e4b21ccc00756f3": { "9b037a637113b68681c5e24a1691633df3e7e4ab645c3430fdfbded768ba8392": { "jp": { - "updatedAt": "2025-11-26T07:24:19.033Z" + "updatedAt": "2025-11-27T09:08:59.701Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.033Z" + "updatedAt": "2025-11-27T09:08:59.700Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.025Z" + "updatedAt": "2025-11-27T09:08:59.678Z" } } }, "d66c9f0b5bf68d56ccdb239450a2def7e044ee7dbb38a6df724002e0578ee93a": { "b17e684424dd7e3c1032466ae89d5b4b0753b2b11488a3c5480069b467bdfcd1": { "jp": { - "updatedAt": "2025-11-26T07:24:19.015Z" + "updatedAt": "2025-11-27T09:08:52.221Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.160Z" + "updatedAt": "2025-11-27T09:08:59.675Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.016Z" + "updatedAt": "2025-11-27T09:08:52.222Z" } } }, "dfb826f61e2d3065b29aed9473793d5e9482ca0064907298ee886dcc849a2f30": { "095ffff652d364d8d2d207b5c2495c8f89b149222bdc9348bc26c7785dc49095": { "jp": { - "updatedAt": "2025-11-26T07:24:19.041Z" + "updatedAt": "2025-11-27T09:08:52.271Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.043Z" + "updatedAt": "2025-11-27T09:08:52.275Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.041Z" + "updatedAt": "2025-11-27T09:08:52.270Z" } } }, "f7ee1a75569ad87e689d0ebfbbc64afa80e4517625c27676aefe4a63952637ab": { "62283411a070bd19b48c75ef32990fea3d01df15e6ce74c1ef8474a50f977cdc": { "jp": { - "updatedAt": "2025-11-26T07:24:19.043Z" + "updatedAt": "2025-11-27T09:08:52.276Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.043Z" + "updatedAt": "2025-11-27T09:08:52.276Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.043Z" + "updatedAt": "2025-11-27T09:08:52.276Z" } } }, "fbf74a86f665ee9aea4f220700429c38da217030a00f7a905ec8171cb63a5f49": { "379c9b448d13ae5617010e62fc925030e206c603b76eb2ab7ab83dddade8d46a": { "jp": { - "updatedAt": "2025-11-26T07:24:19.041Z" + "updatedAt": "2025-11-27T09:08:52.270Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.039Z" + "updatedAt": "2025-11-27T09:08:52.264Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.039Z" + "updatedAt": "2025-11-27T09:08:52.265Z" } } }, "1204bfc3bd6e857b87b1b5a9dd1156c45498c5d9e64e68cdce6f8dfe4987ecfd": { "373f45a715a82081f8e2a3779cc63f874936a6ff999e1d2ee5daf6d9f720ace1": { "jp": { - "updatedAt": "2025-11-26T07:24:19.047Z" + "updatedAt": "2025-11-27T09:08:59.714Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.047Z" + "updatedAt": "2025-11-27T09:08:59.716Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.046Z" + "updatedAt": "2025-11-27T09:08:59.713Z" } } }, "24ceb06f47cf82806e35ac32dfe18ca24087b06cffbe5021739286a56c793b1d": { "4ace68b0458a094405f4c0fd1dc60a5ef026a1a8639846623e86fdff84ae8507": { "zh": { - "updatedAt": "2025-11-26T07:24:19.047Z" + "updatedAt": "2025-11-27T09:08:59.716Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:19.046Z" + "updatedAt": "2025-11-27T09:08:59.713Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.045Z" + "updatedAt": "2025-11-27T09:08:59.710Z" } } }, "28e0a4a4c7b2f5abc28938acf55ed73d8388d95376bfa8dd13fdecd6bd439e52": { "7b5571b023d676e2979970ede929e965221ec27898362e89cfb8519c41cf3898": { "jp": { - "updatedAt": "2025-11-26T07:24:19.043Z" + "updatedAt": "2025-11-27T09:08:52.276Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.043Z" + "updatedAt": "2025-11-27T09:08:52.275Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.043Z" + "updatedAt": "2025-11-27T09:08:52.275Z" } } }, "4a932aa16f4947c7ef17e42150e4a316f1ffcde90dd8415e4c6bf929ba835846": { "49a5dd5634212d8130c73ae1cd817b3917e322d14b3c96754d53df3d228cd836": { "jp": { - "updatedAt": "2025-11-26T07:24:19.041Z" + "updatedAt": "2025-11-27T09:08:52.269Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.041Z" + "updatedAt": "2025-11-27T09:08:52.270Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.042Z" + "updatedAt": "2025-11-27T09:08:52.274Z" } } }, "4ca74029aba5db691ad0ec824ca43ed7d92a4d5b9aa1573bc7116ad308b92cde": { "f97238d94d5bdc95a6129e0715198e8a6b955a58fbaa7da4e12e9dfa1348f135": { "jp": { - "updatedAt": "2025-11-26T07:24:19.046Z" + "updatedAt": "2025-11-27T09:08:59.712Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.046Z" + "updatedAt": "2025-11-27T09:08:59.712Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.046Z" + "updatedAt": "2025-11-27T09:08:59.714Z" } } }, "4dec7d00a7f493694d866154c843363d42ed6db4abc5dfbd010fdd90bfcaf67d": { "97c6b3e272815f6b0861c69df01e35d4daeb9dd3a1b81af896dc36740a178f9c": { "jp": { - "updatedAt": "2025-11-26T07:24:19.043Z" + "updatedAt": "2025-11-27T09:08:52.274Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.039Z" + "updatedAt": "2025-11-27T09:08:52.264Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.040Z" + "updatedAt": "2025-11-27T09:08:52.267Z" } } }, "51e35897aeb6c746cdd097c39d7d3d876e62dfc0623f6a3c97974b88226b3a00": { "07eab7fc4983c7ac1da23e4f9c0e0aaefbcbbf2c5cf96b5e1af6a93d9eab9a6e": { "jp": { - "updatedAt": "2025-11-26T07:24:19.046Z" + "updatedAt": "2025-11-27T09:08:59.714Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.048Z" + "updatedAt": "2025-11-27T09:08:59.717Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.047Z" + "updatedAt": "2025-11-27T09:08:59.716Z" } } }, "6faa2072fc3d3a3770d528540726e0fbdb421fa84e62c668a817741883d26440": { "579c8415475bba272d86e61362d88b8f1304de7a7411591652572d7da45590c2": { "jp": { - "updatedAt": "2025-11-26T07:24:19.049Z" + "updatedAt": "2025-11-27T09:08:59.721Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.049Z" + "updatedAt": "2025-11-27T09:08:59.721Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.038Z" + "updatedAt": "2025-11-27T09:08:52.262Z" } } }, "765183c2f979cd15300174a6cbeab761c53e4a2b979f9c1c628c55c69015ae5b": { "aaedfcb72829b8339998ff9e62eb6e54a69755858854804557b9efc3496e73f9": { "jp": { - "updatedAt": "2025-11-26T07:24:19.041Z" + "updatedAt": "2025-11-27T09:08:52.271Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.039Z" + "updatedAt": "2025-11-27T09:08:52.264Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.041Z" + "updatedAt": "2025-11-27T09:08:52.270Z" } } }, "9bd2367031f4ad3ccaa40d2eab23421bb90a176c87631c89d0565908c1c8129d": { "a3d661f00c76cbebde5bfa666feb5af47a4620862c09e2ad2d7ea88d84d8c98d": { "jp": { - "updatedAt": "2025-11-26T07:24:19.040Z" + "updatedAt": "2025-11-27T09:08:52.266Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.040Z" + "updatedAt": "2025-11-27T09:08:52.268Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.040Z" + "updatedAt": "2025-11-27T09:08:52.265Z" } } }, "a61623fa5c7f672b85c730754446bc1a65a53fbfc1fa7eb64e0779690ac3049a": { "e82d7f23954deebeb66e19daaed4363f0e28569d3a42d1de12ffdce2ad3976fb": { "jp": { - "updatedAt": "2025-11-26T07:24:19.043Z" + "updatedAt": "2025-11-27T09:08:52.275Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.042Z" + "updatedAt": "2025-11-27T09:08:52.273Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.041Z" + "updatedAt": "2025-11-27T09:08:52.268Z" } } }, "b0c4a6145c3f1c781d51adb03f8e4996331d1159cb14cba9c81b851b728253ee": { "d161896a6a88f3dc7f188f95f5ef37b65e50579afa43c7f21b1656e07c5010a7": { "jp": { - "updatedAt": "2025-11-26T07:24:19.047Z" + "updatedAt": "2025-11-27T09:08:59.716Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.048Z" + "updatedAt": "2025-11-27T09:08:59.718Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.049Z" + "updatedAt": "2025-11-27T09:08:59.720Z" } } }, "b6071010708dd9f91932364b3060488201176aeb008d6ba6dceaee25a82a0a2d": { "2007a45c3bc14f5333a4866ed3de37e1c4ce663c0e2b1fd31fbf2030fed127e0": { "jp": { - "updatedAt": "2025-11-26T07:24:19.048Z" + "updatedAt": "2025-11-27T09:08:59.718Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.041Z" + "updatedAt": "2025-11-27T09:08:52.269Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.040Z" + "updatedAt": "2025-11-27T09:08:52.267Z" } } }, "bf4425dd6cb86116b19753768a5420c28985c1fcb442ecd1b5e1d37e6ca2f98f": { "e1eae6052323b0cc1ddca82febd2af06bef603d4809bc06fe09b3e2b0880ed2e": { "jp": { - "updatedAt": "2025-11-26T07:24:19.042Z" + "updatedAt": "2025-11-27T09:08:52.273Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.042Z" + "updatedAt": "2025-11-27T09:08:52.272Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.040Z" + "updatedAt": "2025-11-27T09:08:52.266Z" } } }, "cdab7bf0d8c24f10d2d5dc375305c22f728e0f36fa1e29fdd04c99781fbc6cd5": { "083150d2c3def0d0736d5dbb6a695b7ea5c691ce94fcb5f5e84487727895f4ff": { "jp": { - "updatedAt": "2025-11-26T07:24:19.039Z" + "updatedAt": "2025-11-27T09:08:52.264Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.041Z" + "updatedAt": "2025-11-27T09:08:52.271Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.042Z" + "updatedAt": "2025-11-27T09:08:52.272Z" } } }, "e93967fcdbac2bba7b89b4164ea987452cd09d1070238a59a238036fd94e8618": { "94a465a749cb716926a6ad2a66382c7591719aa2f9d792d5910f48efdc1e20e5": { "jp": { - "updatedAt": "2025-11-26T07:24:19.039Z" + "updatedAt": "2025-11-27T09:08:52.263Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.040Z" + "updatedAt": "2025-11-27T09:08:52.268Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.039Z" + "updatedAt": "2025-11-27T09:08:52.265Z" } } }, "f0e219e3fb45c878fc0c3bc00fdeef1c5dd9c6ab75d1a093efffa9a0a6f002d6": { "f70bbeacf6050f44afacc1a4872c5eb1d3c4e9df491f0c452fdbd869057adb57": { "jp": { - "updatedAt": "2025-11-26T07:24:19.042Z" + "updatedAt": "2025-11-27T09:08:52.273Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.040Z" + "updatedAt": "2025-11-27T09:08:52.267Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.040Z" + "updatedAt": "2025-11-27T09:08:52.268Z" } } }, "f39b12efbc001a35d87891fb78f7cc37fe27f3e15abe1f7329d97a2afc1e55dc": { "abf20812398c31c2895cbc7f3902a957857e45b0abdb831d7765f7268fac0928": { "jp": { - "updatedAt": "2025-11-26T07:24:19.046Z" + "updatedAt": "2025-11-27T09:08:59.713Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.047Z" + "updatedAt": "2025-11-27T09:08:59.715Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.046Z" + "updatedAt": "2025-11-27T09:08:59.712Z" } } }, "f44395a43048118c7fe3d4525c225cb5397a7fe3c98ed8d8b8fcfa08e86d5620": { "9d5c04c8e9de527ab629ee91b9ebf0d572f7863c4f88f5651c671a5fff9df8fe": { "jp": { - "updatedAt": "2025-11-26T07:24:19.047Z" + "updatedAt": "2025-11-27T09:08:59.717Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.047Z" + "updatedAt": "2025-11-27T09:08:59.715Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.044Z" + "updatedAt": "2025-11-27T09:08:59.707Z" } } }, "f646fb33e6fccf32e79c0ff130a3e33907e8822e1555b98aa42e7679988ce2ef": { "9c48604413e046bab5cde9bba416d6f9bcc6a7ded493b091e329a27c18ad8b0a": { "jp": { - "updatedAt": "2025-11-26T07:24:19.045Z" + "updatedAt": "2025-11-27T09:08:59.710Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.047Z" + "updatedAt": "2025-11-27T09:08:59.715Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.045Z" + "updatedAt": "2025-11-27T09:08:59.711Z" } } }, "fb8e6138536700f07eca78b5f157d45b6036f77f52782711c91ba183897b4c9a": { "85d1f9adecaf2dd9004cd1e79d1ecdd61c68f65285973b86e6e2ba31e2eadf2f": { "jp": { - "updatedAt": "2025-11-26T07:24:19.041Z" + "updatedAt": "2025-11-27T09:08:52.269Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.042Z" + "updatedAt": "2025-11-27T09:08:52.272Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.042Z" + "updatedAt": "2025-11-27T09:08:52.273Z" } } }, "fd9477b10ed7d16ef2358b8d1e49ae2377cc94b7a2aa1d03cbf8e6ee55954611": { "36f5cb32c3341f1b52d0987870b8e971b48d9b4ccb72422d895a8e8de42aa565": { "jp": { - "updatedAt": "2025-11-26T07:24:19.032Z" + "updatedAt": "2025-11-27T09:08:59.699Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.039Z" + "updatedAt": "2025-11-27T09:08:52.265Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.038Z" + "updatedAt": "2025-11-27T09:08:52.263Z" } } }, "0a48452290eff051d5083217a35dc08044c6070e028523f7cac12162494649d9": { "007d16df56ba8d29945ba611a8ebd52c915dfd07a9959101cb56729201855baa": { "jp": { - "updatedAt": "2025-11-26T07:24:19.049Z" + "updatedAt": "2025-11-27T09:08:59.722Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.038Z" + "updatedAt": "2025-11-27T09:08:52.263Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.048Z" + "updatedAt": "2025-11-27T09:08:59.718Z" } } }, "1166fa0e4a8285a06447a2c810faea5954a70f41dac027f9312ad41f58d7980c": { "b55b582f39fbb6b1a9a83d90ec6685c4218c3e70536c2a445ad09c9e3380e0e1": { "jp": { - "updatedAt": "2025-11-26T07:24:12.163Z" + "updatedAt": "2025-11-27T09:08:52.281Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.053Z" + "updatedAt": "2025-11-27T09:08:59.739Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.050Z" + "updatedAt": "2025-11-27T09:08:59.724Z" } } }, "1cc5dc60c755c1b33090726793f332fef7bb57174bac81be1fd840360abec0a9": { "0b2d9a2f1a1de345b24bb2aed0e200731bba362c09de9a98ae9041f3e9312321": { "jp": { - "updatedAt": "2025-11-26T07:24:19.045Z" + "updatedAt": "2025-11-27T09:08:59.711Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.045Z" + "updatedAt": "2025-11-27T09:08:59.709Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.045Z" + "updatedAt": "2025-11-27T09:08:59.709Z" } } }, "1fa73f7fb3f17cb73adf9d2fd3672fb7b1bcea959cdfa4cc1cebebf9783e8493": { "68781891b0d87b8b7fc619dd4fa0e041668116f49851eeb31c8f510173e044b5": { "jp": { - "updatedAt": "2025-11-26T07:24:19.046Z" + "updatedAt": "2025-11-27T09:08:59.712Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.046Z" + "updatedAt": "2025-11-27T09:08:59.713Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.046Z" + "updatedAt": "2025-11-27T09:08:59.712Z" } } }, "277327bc5d1f24036dfcf5127459029b84745c17df9cdbee699b92b7fa8c244a": { "edea05c97af2e9b00969299f942cd800726b3f980c4ecc738e093ae93dac3c2f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.164Z" + "updatedAt": "2025-11-27T09:08:52.283Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.162Z" + "updatedAt": "2025-11-27T09:08:52.279Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.164Z" + "updatedAt": "2025-11-27T09:08:52.284Z" } } }, "2fa7a8042be873e4594c45fc4aa944580ac9957f07dba893bd079f9bd6831739": { "d53dbb06ce9443dcb0eff1d6d827440cd3f32c6995b1495a014f731eb03474e6": { "jp": { - "updatedAt": "2025-11-26T07:24:19.047Z" + "updatedAt": "2025-11-27T09:08:59.717Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.038Z" + "updatedAt": "2025-11-27T09:08:52.262Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.048Z" + "updatedAt": "2025-11-27T09:08:59.717Z" } } }, "3856af0947d30d11556c7934bf86f94916259da90023fd46b0e7c63d1c3a264d": { "13a6600b110e578ff344da3c1257c68c9f1c85b521d7074402b84a2a07f09dee": { "jp": { - "updatedAt": "2025-11-26T07:24:19.048Z" + "updatedAt": "2025-11-27T09:08:59.718Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.048Z" + "updatedAt": "2025-11-27T09:08:59.719Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.044Z" + "updatedAt": "2025-11-27T09:08:59.707Z" } } }, "3cbdf684e4132d36432757c5b2479a68267eb108858510d7f118f4f80e1fe430": { "02a6cbb43f399b26f891350cfb238c12040d0543f4f79b9119f782c965160d27": { "jp": { - "updatedAt": "2025-11-26T07:24:19.049Z" + "updatedAt": "2025-11-27T09:08:59.722Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.050Z" + "updatedAt": "2025-11-27T09:08:59.723Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.049Z" + "updatedAt": "2025-11-27T09:08:59.721Z" } } }, "4efac6c6f465c7a572c85feacf0f06b43a4e0c32c6c920019621529593011d4a": { "90716f5cd329825964992e1323d48a1be73c0b4afe6438deb2f5faa6947cb686": { "jp": { - "updatedAt": "2025-11-26T07:24:19.045Z" + "updatedAt": "2025-11-27T09:08:59.710Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.045Z" + "updatedAt": "2025-11-27T09:08:59.709Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.045Z" + "updatedAt": "2025-11-27T09:08:59.709Z" } } }, "593efc50139609f8ecd70340a6cf0d42b4647499a51d8026ed014bda5df9c3be": { "d22863b43cc42cb50748f21dbf3ca52aa023402a9fd5fe4d478b8ad89b656234": { "jp": { - "updatedAt": "2025-11-26T07:24:19.052Z" + "updatedAt": "2025-11-27T09:08:59.736Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.052Z" + "updatedAt": "2025-11-27T09:08:59.735Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.052Z" + "updatedAt": "2025-11-27T09:08:59.738Z" } } }, "64b5024b5182bfc45a505634c61271260ae40641e132a126b98fdb77fb6a7c95": { "4407c0820a47caebe5b1dfe9eff3d5de80d013db89f0925feb173cff9741369f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.164Z" + "updatedAt": "2025-11-27T09:08:52.283Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.164Z" + "updatedAt": "2025-11-27T09:08:52.284Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.164Z" + "updatedAt": "2025-11-27T09:08:52.284Z" } } }, "803a744763b2e971d43427be40f1173beef9290f8152a79e7047ef5f514f42d2": { "bc19380cbc2e01ee6357dbd1150e6424d9856ad286e39cddde352bb68470ab78": { "jp": { - "updatedAt": "2025-11-26T07:24:19.046Z" + "updatedAt": "2025-11-27T09:08:59.714Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.047Z" + "updatedAt": "2025-11-27T09:08:59.716Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.045Z" + "updatedAt": "2025-11-27T09:08:59.711Z" } } }, "81b00d2254d3e49a8edabeaf9d9461d8fb19914c8abfef93d05c71270dbf3786": { "96a507a0b8ed5c5846b4d8f6ffced106a8f7d73ccb668fa851fed8b3be3dbee2": { "jp": { - "updatedAt": "2025-11-26T07:24:19.045Z" + "updatedAt": "2025-11-27T09:08:59.709Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.045Z" + "updatedAt": "2025-11-27T09:08:59.710Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.044Z" + "updatedAt": "2025-11-27T09:08:59.708Z" } } }, "81cc4a22f5345ef537b81bda612b5e1b5de5d2fb5b7d6563d33ccac4c53d47c0": { "2264f2a7ed8ccbf74a72e2d8d69d0a56cc35d7bce6b065e30464315bdeee546d": { "jp": { - "updatedAt": "2025-11-26T07:24:19.044Z" + "updatedAt": "2025-11-27T09:08:59.706Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.051Z" + "updatedAt": "2025-11-27T09:08:59.733Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.044Z" + "updatedAt": "2025-11-27T09:08:59.706Z" } } }, "9229ae8ebb059ce61a183f4129a3e0da801e0d4717a314a296909aa6035f7d9e": { "fea4e84293c545f2207f795fa4b98c049df1c2de4dd7351a04e3cfb8dc162c2a": { "jp": { - "updatedAt": "2025-11-26T07:24:12.163Z" + "updatedAt": "2025-11-27T09:08:52.280Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.163Z" + "updatedAt": "2025-11-27T09:08:52.282Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.164Z" + "updatedAt": "2025-11-27T09:08:52.283Z" } } }, "a9c6646ed9b12fe5c1578c74e0f8408353fc82448e8041b1c1d96f9c46e78dea": { "9cf8633b74ca4ae563d8b6514b6ee95e035b912752b8937b25e1ea6d00d6332e": { "jp": { - "updatedAt": "2025-11-26T07:24:19.052Z" + "updatedAt": "2025-11-27T09:08:59.736Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.051Z" + "updatedAt": "2025-11-27T09:08:59.735Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.163Z" + "updatedAt": "2025-11-27T09:08:52.282Z" } } }, "b464890125efe481177f12e2f3c00a28cae107b65627ec59bb17ef93cf157e35": { "4a59992606ccfde9022f21ac63edbdf9bc3e1e8100eaeef04c372952f8c27195": { "jp": { - "updatedAt": "2025-11-26T07:24:19.044Z" + "updatedAt": "2025-11-27T09:08:59.707Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.044Z" + "updatedAt": "2025-11-27T09:08:59.708Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.044Z" + "updatedAt": "2025-11-27T09:08:59.708Z" } } }, "b676683ed68be73eb9635273495e9731122ee184bb63d7293df2bdf22ebad7d0": { "81117b826442551d1cf5856c822f3d1c75ce597cd1faec68ca4ca0233ff5b395": { "jp": { - "updatedAt": "2025-11-26T07:24:19.053Z" + "updatedAt": "2025-11-27T09:08:59.740Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.053Z" + "updatedAt": "2025-11-27T09:08:59.739Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.051Z" + "updatedAt": "2025-11-27T09:08:59.735Z" } } }, "ca8c63318081185dadfc8f0c999b2cbe8002743aa40d511bc0efe186e20e334d": { "d058a230016b4adc22efb36e3b3ae2fb018e4b84cf33b6862fd4f520d9e7d3c1": { "jp": { - "updatedAt": "2025-11-26T07:24:19.047Z" + "updatedAt": "2025-11-27T09:08:59.715Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.044Z" + "updatedAt": "2025-11-27T09:08:59.706Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.048Z" + "updatedAt": "2025-11-27T09:08:59.719Z" } } }, "eb036cf7d16bf188b666a24b079c499f0e91022203931f813a7708c77c75046a": { "d269d0ef9030cc0accc4626f57a4a0fc9fa917b10cf282d13fa57388c6603e4e": { "ru": { - "updatedAt": "2025-11-26T07:24:19.050Z" + "updatedAt": "2025-11-27T09:08:59.730Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.050Z" + "updatedAt": "2025-11-27T09:08:59.731Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:19.051Z" + "updatedAt": "2025-11-27T09:08:59.733Z" } } }, "f63b4898f4bc0778b3cf11bb85aa91a674b602d4005b001e2977ffa70c3be27a": { "dd2ba17bbdc49a7afba06862b9e2f43e39bf834aefeb4fadb52775d8db69d988": { "jp": { - "updatedAt": "2025-11-26T07:24:19.048Z" + "updatedAt": "2025-11-27T09:08:59.719Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.048Z" + "updatedAt": "2025-11-27T09:08:59.720Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.049Z" + "updatedAt": "2025-11-27T09:08:59.721Z" } } }, "0850d83ea9ff1a00088e3d64a210fcd073b48986df51234fb69582c6b7fb76d6": { "9a43156c05a1578fda8031ad1f1e9faf8e97b4816647d44bffd71e1f15c3647d": { "jp": { - "updatedAt": "2025-11-26T07:24:12.171Z" + "updatedAt": "2025-11-27T09:08:52.299Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.171Z" + "updatedAt": "2025-11-27T09:08:52.299Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.170Z" + "updatedAt": "2025-11-27T09:08:52.295Z" } } }, "1bb238eff17ee95c127a21dd293881a980bb8f3b0aff1bdd7ecd004fafe3764b": { "d005d0fdfdc2a2469851a9a7d27374e5fcf68c97518463c6aec7498e165ace83": { "jp": { - "updatedAt": "2025-11-26T07:24:12.170Z" + "updatedAt": "2025-11-27T09:08:52.295Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.050Z" + "updatedAt": "2025-11-27T09:08:59.724Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.043Z" + "updatedAt": "2025-11-27T09:08:59.705Z" } } }, "23d2246026762ae3494ced9af104cea91f1482d8c7dae1149b7bfa3441618283": { "0e016f2ab261e197b48540cb3d3091ab6d3af62d1c883dcd3281cb2e578a1bfa": { "jp": { - "updatedAt": "2025-11-26T07:24:12.162Z" + "updatedAt": "2025-11-27T09:08:52.279Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.163Z" + "updatedAt": "2025-11-27T09:08:52.281Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.162Z" + "updatedAt": "2025-11-27T09:08:52.280Z" } } }, "29f7d7e079a392736f8e8414574847d7fc12094c29074c197529b77eafd97a46": { "ee468e104feb8b3c7b0aa6d6f466b62ccd0c40d76c88efce2ee623e95b1737ef": { "jp": { - "updatedAt": "2025-11-26T07:24:12.162Z" + "updatedAt": "2025-11-27T09:08:52.278Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.052Z" + "updatedAt": "2025-11-27T09:08:59.738Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.053Z" + "updatedAt": "2025-11-27T09:08:59.739Z" } } }, "3096aa4bb7832bb2f54010d3c5b6a248f9ebf6a366fb879f82c0eab244f815ae": { "fa532e7e71ef2e3585f03d9f864f4c524338db82a3098d4d46e1abc74f06c4fa": { "jp": { - "updatedAt": "2025-11-26T07:24:12.163Z" + "updatedAt": "2025-11-27T09:08:52.283Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.163Z" + "updatedAt": "2025-11-27T09:08:52.281Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.162Z" + "updatedAt": "2025-11-27T09:08:52.278Z" } } }, "3f380b9290fe7c7d901aac0cb526ca3d522c42c21bc64b85c2e00fbdc953e794": { "e0c1c8cc04e2a4ba817680c61c7923693919ed48ab52a53f3ddf5094909767fb": { "jp": { - "updatedAt": "2025-11-26T07:24:12.162Z" + "updatedAt": "2025-11-27T09:08:52.280Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.161Z" + "updatedAt": "2025-11-27T09:08:52.277Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.162Z" + "updatedAt": "2025-11-27T09:08:52.279Z" } } }, "492356529ca75008f683673b06635e91f3cb2d7f1097826262a7957c6cd78136": { "ea6eed1ae135ae1362375bc54a6abf4d9bda82f9cd56e95b97e329d6dfceb889": { "jp": { - "updatedAt": "2025-11-26T07:24:19.051Z" + "updatedAt": "2025-11-27T09:08:59.732Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.050Z" + "updatedAt": "2025-11-27T09:08:59.731Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.052Z" + "updatedAt": "2025-11-27T09:08:59.737Z" } } }, "576c74bc00a8723ea19c093ffe6b3a472b9236e8f3bfcb0b95955083f9cadb86": { "351824c23a3d30665651f9a8eb9f4b521f17129ca1d202c38cbde960046a5d97": { "jp": { - "updatedAt": "2025-11-26T07:24:19.051Z" + "updatedAt": "2025-11-27T09:08:59.732Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.052Z" + "updatedAt": "2025-11-27T09:08:59.736Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.051Z" + "updatedAt": "2025-11-27T09:08:59.734Z" } } }, "57e03de44d901875fb5eb2401640aba105efc70cc184f0f23ff04489b548b151": { "3f8e85fe2d0ca94113aa748a9047c9553cec059c087362ec30bf90a68567a495": { "jp": { - "updatedAt": "2025-11-26T07:24:12.165Z" + "updatedAt": "2025-11-27T09:08:52.285Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.167Z" + "updatedAt": "2025-11-27T09:08:52.290Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.167Z" + "updatedAt": "2025-11-27T09:08:52.289Z" } } }, "82d75c46385806468ea3f9bb89ec325a34f8717e9925511cf3f746c6793c4178": { "56b23f6722a4743f7d9412ba74c3c4701d0fd1018ab3474c5dceb16bef9ca1c1": { "jp": { - "updatedAt": "2025-11-26T07:24:12.168Z" + "updatedAt": "2025-11-27T09:08:52.292Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.167Z" + "updatedAt": "2025-11-27T09:08:52.289Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.168Z" + "updatedAt": "2025-11-27T09:08:52.291Z" } } }, "835fedb5cc4f200a51753e009ebccb9c5c2703128ecfce3dc53168f68570dd22": { "24e239e6ee1d39ee0ec39c0ebaf4dff703bef48fabe9d4ad32d9fcb51008866a": { "jp": { - "updatedAt": "2025-11-26T07:24:19.050Z" + "updatedAt": "2025-11-27T09:08:59.730Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.167Z" + "updatedAt": "2025-11-27T09:08:52.290Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.168Z" + "updatedAt": "2025-11-27T09:08:52.291Z" } } }, "a218ff0160f1afb6fd940e4797a2159d55a8dbac410f179f5727b567999eaebf": { "aad6f9838da5dc15d37d5f9d16b53754eb0d3ff68a7cf73064f05eaa3669c05b": { "jp": { - "updatedAt": "2025-11-26T07:24:19.051Z" + "updatedAt": "2025-11-27T09:08:59.733Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.160Z" + "updatedAt": "2025-11-27T09:08:52.277Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.161Z" + "updatedAt": "2025-11-27T09:08:52.277Z" } } }, "a47af53023e5932aef2db5b77a0ef7cd04c45474a2fe93ea211914667b44e5ec": { "4ff7d90419a50527c3757c649b6725b0da711648246268bc520c1dae8ad9ef97": { "jp": { - "updatedAt": "2025-11-26T07:24:12.170Z" + "updatedAt": "2025-11-27T09:08:52.295Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.169Z" + "updatedAt": "2025-11-27T09:08:52.294Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.168Z" + "updatedAt": "2025-11-27T09:08:52.292Z" } } }, "ab35a5ab8729c47c7175e9c6cc67e42aba43c58b1e1f2c291dcda4c3977b06bd": { "02d5a608d6ee630f001b827a8fa1c5cad477766220949ac58c83c9ea965c69c2": { "jp": { - "updatedAt": "2025-11-26T07:24:12.169Z" + "updatedAt": "2025-11-27T09:08:52.295Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.170Z" + "updatedAt": "2025-11-27T09:08:52.296Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.169Z" + "updatedAt": "2025-11-27T09:08:52.293Z" } } }, "cd604eef1633b62d027e3e7d70856d9553f233ca6e0180381c2120985643a86d": { "e37d6318a1605b8e2ec28a6a7b49ca74444391f022f98dec4ac9cf1024c821ed": { "jp": { - "updatedAt": "2025-11-26T07:24:12.163Z" + "updatedAt": "2025-11-27T09:08:52.281Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.163Z" + "updatedAt": "2025-11-27T09:08:52.282Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.162Z" + "updatedAt": "2025-11-27T09:08:52.279Z" } } }, "cfd6efb64f516235ee2ecb43e9da90a4a4f49b69cd47dbfe06c9e1586fb606bd": { "dc206b93eb4f37283d194fc3cd04163bee67e631f232560183ec516accced4b0": { "jp": { - "updatedAt": "2025-11-26T07:24:12.171Z" + "updatedAt": "2025-11-27T09:08:52.300Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.165Z" + "updatedAt": "2025-11-27T09:08:52.285Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.171Z" + "updatedAt": "2025-11-27T09:08:52.299Z" } } }, "daf8b3e4dde89158cbc831962f60de0ec14cecabcbd44a418f78eb071c12b0c4": { "436bd3437c6e83fc88999652218e47ef4afe3bd262aa9052fd9fbf8900aa176f": { "jp": { - "updatedAt": "2025-11-26T07:24:19.052Z" + "updatedAt": "2025-11-27T09:08:59.737Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.051Z" + "updatedAt": "2025-11-27T09:08:59.732Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.051Z" + "updatedAt": "2025-11-27T09:08:59.732Z" } } }, "df45da7290d6edcd7b6391995f5058013634a6732cc0faaa6bd01d42b9804678": { "b184369e5f189b858945955301721885510add73fe070525f5c066569add5a01": { "jp": { - "updatedAt": "2025-11-26T07:24:19.052Z" + "updatedAt": "2025-11-27T09:08:59.737Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.052Z" + "updatedAt": "2025-11-27T09:08:59.738Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.051Z" + "updatedAt": "2025-11-27T09:08:59.733Z" } } }, "e303e41ebcb2d5160248ecceb8943f82399ebc3323390c33a1d6a724c28354fd": { "28a231f853bc9e6425c97ca1c14dcd50898db661a90b51a9e9ef2aaf5c7c2f43": { "jp": { - "updatedAt": "2025-11-26T07:24:12.161Z" + "updatedAt": "2025-11-27T09:08:52.278Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.160Z" + "updatedAt": "2025-11-27T09:08:52.276Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.052Z" + "updatedAt": "2025-11-27T09:08:59.738Z" } } }, "f1754d0c92d25ed65027ccc750febdcca2e7101c72a0eece6697b959d9971621": { "d2cbc57bddda71b0ca36a00fdc52702ffaecf753190fb6095d4a92fca38701f1": { "jp": { - "updatedAt": "2025-11-26T07:24:19.050Z" + "updatedAt": "2025-11-27T09:08:59.724Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.170Z" + "updatedAt": "2025-11-27T09:08:52.296Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.172Z" + "updatedAt": "2025-11-27T09:08:52.300Z" } } }, "ff2e4c3baefa9017265684effd06b1ae64d9d7d79efa83110c92a11de95d2c62": { "7e68dd457179debb6b3b8c9690002e92f3cfcc5539913ccfbd1d0632617d6548": { "jp": { - "updatedAt": "2025-11-26T07:24:19.050Z" + "updatedAt": "2025-11-27T09:08:59.730Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.050Z" + "updatedAt": "2025-11-27T09:08:59.731Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.050Z" + "updatedAt": "2025-11-27T09:08:59.731Z" } } }, "10b704f16a650f1802b52736d2c823bd454d8b3dabb76ac91bdcc408b62420cb": { "2d4e7acb59df283f228e25658e527a973db16f341efce41e1ce84944cffa1fae": { "jp": { - "updatedAt": "2025-11-26T07:24:19.055Z" + "updatedAt": "2025-11-27T09:08:59.746Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.056Z" + "updatedAt": "2025-11-27T09:08:59.750Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.055Z" + "updatedAt": "2025-11-27T09:08:59.747Z" } } }, "1e8eecebd2a4e411fc3037074c79ba054debc70b7a76bf53100577ec14359aee": { "5e448cd743d25dd9d490161805e048c3c2f4696c9f46b52a466a1bba220a5eae": { "jp": { - "updatedAt": "2025-11-26T07:24:19.055Z" + "updatedAt": "2025-11-27T09:08:59.747Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.053Z" + "updatedAt": "2025-11-27T09:08:59.742Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.053Z" + "updatedAt": "2025-11-27T09:08:59.741Z" } } }, "3e8e050e4d3fc2dc532df4dd8556aae0bea35f5ab73c2aade8efe957930a412a": { "e8f4b7568afc6590d5203c133ee8873acbea759acf50b34794af4e2cd6b43ad1": { "jp": { - "updatedAt": "2025-11-26T07:24:19.054Z" + "updatedAt": "2025-11-27T09:08:59.743Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.054Z" + "updatedAt": "2025-11-27T09:08:59.744Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.054Z" + "updatedAt": "2025-11-27T09:08:59.742Z" } } }, "47bec243b816f1aff8d7f27262d59edcdc28cb3ec78a655071e9178290bb0578": { "880617a38544a545b4906c62f9009009c13a7ff3ccc2a60fe2e475bb26b6f55c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.167Z" + "updatedAt": "2025-11-27T09:08:52.290Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.166Z" + "updatedAt": "2025-11-27T09:08:52.288Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.166Z" + "updatedAt": "2025-11-27T09:08:52.287Z" } } }, "48ff5e21581a18794244e74d86a13a93c0401d4d23c46f267ead336c36e91cce": { "42db135883af584da69bdb891c2f149df97603eb1cabc3853355aeccb9eef199": { "zh": { - "updatedAt": "2025-11-26T07:24:19.056Z" + "updatedAt": "2025-11-27T09:08:59.749Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:19.056Z" + "updatedAt": "2025-11-27T09:08:59.748Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.056Z" + "updatedAt": "2025-11-27T09:08:59.750Z" } } }, "4b0ee48c4cbb9020c49cc55e309e9d7f69e89a9ed3a55e9c47bc013ae4ef6d56": { "2ed3bcd79fd5d4e72d74ac905059dc5e77bee95124595bde24fabd5f207ff65d": { "jp": { - "updatedAt": "2025-11-26T07:24:19.054Z" + "updatedAt": "2025-11-27T09:08:59.742Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.055Z" + "updatedAt": "2025-11-27T09:08:59.745Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.053Z" + "updatedAt": "2025-11-27T09:08:59.740Z" } } }, "58026ac4a257b8fe268cb77f7d9da3eab8cee812a5e1d5152bab8b3250885ea9": { "75ab9ab8699432a23f95f427a4d59951ffca9690508f2d181e017be2846fba14": { "jp": { - "updatedAt": "2025-11-26T07:24:12.167Z" + "updatedAt": "2025-11-27T09:08:52.290Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.166Z" + "updatedAt": "2025-11-27T09:08:52.288Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.167Z" + "updatedAt": "2025-11-27T09:08:52.290Z" } } }, "5879b7ee9c3de048a317f9526d9961edba8038230a7d5244320ca051c3377577": { "0a90ec2dd8b2f3498aaafcb347dfa3cda2f9f6da12d64b79f5d5404b53325b70": { "jp": { - "updatedAt": "2025-11-26T07:24:12.171Z" + "updatedAt": "2025-11-27T09:08:52.300Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.170Z" + "updatedAt": "2025-11-27T09:08:52.296Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.170Z" + "updatedAt": "2025-11-27T09:08:52.297Z" } } }, "6381d5f736372e0e12418c5b0941665dfa5912b8121475ef968a4b5174f7afda": { "ca830a516bc4a6a4064bd19e68294d34a903114ae0c72112077306844ab37161": { "jp": { - "updatedAt": "2025-11-26T07:24:12.166Z" + "updatedAt": "2025-11-27T09:08:52.287Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.166Z" + "updatedAt": "2025-11-27T09:08:52.287Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.165Z" + "updatedAt": "2025-11-27T09:08:52.286Z" } } }, "6391f6957c5f75a61373810ad0f0c8f36e0c6ab5b4e5a0f3c373ec2ec25c7f10": { "70a6df8beb04de853a1e2f9d42065e9eafda493219744deb6b08634115f9a498": { "jp": { - "updatedAt": "2025-11-26T07:24:19.053Z" + "updatedAt": "2025-11-27T09:08:59.741Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.167Z" + "updatedAt": "2025-11-27T09:08:52.291Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.167Z" + "updatedAt": "2025-11-27T09:08:52.289Z" } } }, "65aa83e28c6b450bc0daadd14828a7677fb27a998ea9f59faacc7187462718e2": { "3c0cab0fe63f1d762905d3d204e44dff7666b23009b55e1447c9939e7032e82c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.171Z" + "updatedAt": "2025-11-27T09:08:52.300Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.171Z" + "updatedAt": "2025-11-27T09:08:52.298Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.165Z" + "updatedAt": "2025-11-27T09:08:52.285Z" } } }, "70c04f43190f497d5a2f8677cdc4ca3f609afb464cf98a219e9b600b7d989cf6": { "59c021fe8605f9f4ff5a62d7b51c4f5a7a05acc380d02368ad906c909dd5fa17": { "jp": { - "updatedAt": "2025-11-26T07:24:12.169Z" + "updatedAt": "2025-11-27T09:08:52.294Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.169Z" + "updatedAt": "2025-11-27T09:08:52.294Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.169Z" + "updatedAt": "2025-11-27T09:08:52.294Z" } } }, "7ce6270ebd8e598a5ae3c7e63c99571a865d9289e493233222d36600b8ce255b": { "56a7fab051640f56124193c10c43bab0f0b30eb6b3b43860f813e4335dc69d61": { "jp": { - "updatedAt": "2025-11-26T07:24:12.171Z" + "updatedAt": "2025-11-27T09:08:52.298Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.171Z" + "updatedAt": "2025-11-27T09:08:52.297Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.168Z" + "updatedAt": "2025-11-27T09:08:52.293Z" } } }, "9c1e3cb41e28946be991ff74f6b0fea3622f21ccd94c4e6553aa990de1a4f6b3": { "8fec74d1546ec055cc9bbebd756641fa7e4a28ffd600d29eaf8d88dcf521d25a": { "jp": { - "updatedAt": "2025-11-26T07:24:12.166Z" + "updatedAt": "2025-11-27T09:08:52.288Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.168Z" + "updatedAt": "2025-11-27T09:08:52.291Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.165Z" + "updatedAt": "2025-11-27T09:08:52.286Z" } } }, "a82c339e6ec19dbf4bf88470d923d48a3cc71cf65c7bae8180edcebcbdffedf7": { "82e1205914218a950a532221e194e1c9da469a4477d36097b83d2a9c2fab0a25": { "jp": { - "updatedAt": "2025-11-26T07:24:12.166Z" + "updatedAt": "2025-11-27T09:08:52.288Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.166Z" + "updatedAt": "2025-11-27T09:08:52.288Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.167Z" + "updatedAt": "2025-11-27T09:08:52.289Z" } } }, "ab7133a925d3667ab21eedcaa7493b04d2a7453fa0b3dd6c1545ec18333f6c93": { "3cd87edf3b014d3bf39e15bb926affe5a7484f6efe0143fd80de32aa3bf31d8a": { "jp": { - "updatedAt": "2025-11-26T07:24:12.172Z" + "updatedAt": "2025-11-27T09:08:52.303Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.053Z" + "updatedAt": "2025-11-27T09:08:59.740Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.053Z" + "updatedAt": "2025-11-27T09:08:59.740Z" } } }, "abe38b651cd9f44a9de790429c92f0c07d5d279e5dae34af1329f362738d3a6a": { "0700f00685f173628dfa175ef2fa960a245c5094b60de40155456bae0cf0bece": { "jp": { - "updatedAt": "2025-11-26T07:24:19.056Z" + "updatedAt": "2025-11-27T09:08:59.748Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.055Z" + "updatedAt": "2025-11-27T09:08:59.746Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.054Z" + "updatedAt": "2025-11-27T09:08:59.742Z" } } }, "b0af6145fc6e254fe1ec86adc9d2e005a2c78ca57a92cfbbcb204f22d2b0b206": { "ae6b07939de76cbcba1cb55d37c6d5d3944edcd60cd443a0ae6aad40a42ce5ae": { "jp": { - "updatedAt": "2025-11-26T07:24:12.166Z" + "updatedAt": "2025-11-27T09:08:52.287Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.168Z" + "updatedAt": "2025-11-27T09:08:52.291Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.168Z" + "updatedAt": "2025-11-27T09:08:52.292Z" } } }, "ced28404e4ce6c34312f58e0fa21dc44dc32726f8881c1adb6ed189087c1b289": { "946529a7ef15a484b25d74b9a9f179b04a186b82780a2ea1059020ee8785a2e4": { "jp": { - "updatedAt": "2025-11-26T07:24:12.169Z" + "updatedAt": "2025-11-27T09:08:52.293Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.168Z" + "updatedAt": "2025-11-27T09:08:52.293Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.169Z" + "updatedAt": "2025-11-27T09:08:52.293Z" } } }, "dd5f0d309844443578b1e477b78c685d87f106d689eab41fab33f12709affeef": { "d85b73cbceb154602514bc5dd5ccb07827a65d84bacf59d65c5ddc95c14947c5": { "jp": { - "updatedAt": "2025-11-26T07:24:19.057Z" + "updatedAt": "2025-11-27T09:08:59.752Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.056Z" + "updatedAt": "2025-11-27T09:08:59.751Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.057Z" + "updatedAt": "2025-11-27T09:08:59.752Z" } } }, "e03641b78328c61b637195e74814fe2a13a4f8b55b01fc7b32ac725dd77f1098": { "d7e329d38854c95abf0c4ec667157d6c9e812a6ee76245d01dba66336ccd0ee2": { "jp": { - "updatedAt": "2025-11-26T07:24:12.168Z" + "updatedAt": "2025-11-27T09:08:52.291Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.166Z" + "updatedAt": "2025-11-27T09:08:52.287Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.166Z" + "updatedAt": "2025-11-27T09:08:52.289Z" } } }, "e1f66fca49c6ff453d4e8a35fdefe650bc1596acc41c176c3c186db3c6b32dcf": { "a953eb312c126bbe30b57606749cd07b7c2b0214177b48b7f6c98c70a8a245ab": { "jp": { - "updatedAt": "2025-11-26T07:24:19.055Z" + "updatedAt": "2025-11-27T09:08:59.747Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.054Z" + "updatedAt": "2025-11-27T09:08:59.745Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.056Z" + "updatedAt": "2025-11-27T09:08:59.750Z" } } }, "028aa3b50c80d12c1dff7886165e9713acd5da0e4c292ec8d74a396e6acb2825": { "1ba8e423cea5af1505e244428a4e315c1ec5b32bcf1289058189844c5da6dc2c": { "jp": { - "updatedAt": "2025-11-26T07:24:19.055Z" + "updatedAt": "2025-11-27T09:08:59.745Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.055Z" + "updatedAt": "2025-11-27T09:08:59.746Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.054Z" + "updatedAt": "2025-11-27T09:08:59.744Z" } } }, "0ae49380ec7f5d307e31d7b631f7f0bf275d679b03f17eb67c5359b37b5242f5": { "f8739620d7524e796b898c8c185a92bf25c2ecbf9cc3893754ede05bce45736b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.172Z" + "updatedAt": "2025-11-27T09:08:52.302Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.172Z" + "updatedAt": "2025-11-27T09:08:52.302Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.165Z" + "updatedAt": "2025-11-27T09:08:52.286Z" } } }, "15fced5932ede7e35f56539b143eb9b8d0d01a97412450e147ef43084abe420c": { "ec90df838c140604af32f15594fffcd4af40335ecac6a833f13e0158156b0cbc": { "jp": { - "updatedAt": "2025-11-26T07:24:19.056Z" + "updatedAt": "2025-11-27T09:08:59.749Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.054Z" + "updatedAt": "2025-11-27T09:08:59.743Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.054Z" + "updatedAt": "2025-11-27T09:08:59.743Z" } } }, "16db9b76d16ef49e77f68158117027a4829a5968943ae93a509257b7c447f23b": { "04685109a89dab0b5bb34aa000e61426caa176d6790eefce0141144402762ae5": { "jp": { - "updatedAt": "2025-11-26T07:24:12.175Z" + "updatedAt": "2025-11-27T09:08:52.307Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.174Z" + "updatedAt": "2025-11-27T09:08:52.306Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.175Z" + "updatedAt": "2025-11-27T09:08:52.330Z" } } }, "23eb3656e923d758ff491460d9d1bbec7009131392de09276848be0db41fd269": { "3625b1be463613c8fb56424fd4d91f2d85ae950ebd8adce02c7683e4fd11be26": { "jp": { - "updatedAt": "2025-11-26T07:24:19.057Z" + "updatedAt": "2025-11-27T09:08:59.753Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.057Z" + "updatedAt": "2025-11-27T09:08:59.753Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.057Z" + "updatedAt": "2025-11-27T09:08:59.752Z" } } }, "2f2ef25f504a5d8ae76cc6b6b38d72e25aa06fb601145bf8c4555defd3b22c9c": { "3045e21be62572632384525c8e68ac94c74ae489c9d3787b9b86c295740ce2e0": { "jp": { - "updatedAt": "2025-11-26T07:24:19.061Z" + "updatedAt": "2025-11-27T09:08:59.766Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.059Z" + "updatedAt": "2025-11-27T09:08:59.759Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.059Z" + "updatedAt": "2025-11-27T09:08:59.760Z" } } }, "30adceead0e8f58341843c20ba7a1cfc58638b613d0457a74d610123f740dbae": { "e6bcf77b5129d316d4e7eeba39c108e94d974c9844395d380a2ef4f6b5f57283": { "jp": { - "updatedAt": "2025-11-26T07:24:12.175Z" + "updatedAt": "2025-11-27T09:08:52.330Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.175Z" + "updatedAt": "2025-11-27T09:08:52.331Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.175Z" + "updatedAt": "2025-11-27T09:08:52.330Z" } } }, "32d271131b76c30bee10004cc36afd1cc48e48b098944d731a875840a3e1520b": { "483a6ba5cfe7e35e8bd7361dfddd53f126ccf034f9f7e6b101dfc108419b0192": { "jp": { - "updatedAt": "2025-11-26T07:24:19.060Z" + "updatedAt": "2025-11-27T09:08:59.763Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.059Z" + "updatedAt": "2025-11-27T09:08:59.758Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.060Z" + "updatedAt": "2025-11-27T09:08:59.762Z" } } }, "384bbc8a5c6f8f4fd3947610412c719d2877f712b2afbd35874807dc5bf37b5d": { "56a53674a355d521b64bc7d05698ba4051acdbeaca6a3c46a2fda8b450c719e9": { "jp": { - "updatedAt": "2025-11-26T07:24:12.165Z" + "updatedAt": "2025-11-27T09:08:52.286Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.172Z" + "updatedAt": "2025-11-27T09:08:52.302Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.172Z" + "updatedAt": "2025-11-27T09:08:52.302Z" } } }, "50e45c22e7e591fcbe4d61812d7d7a9d9626a7f94961516e9f2b08e27d3c36ca": { "4159f227f4e6ff08833e89755d03d3cec73f09d3e9171623e581edcd063d2833": { "jp": { - "updatedAt": "2025-11-26T07:24:12.164Z" + "updatedAt": "2025-11-27T09:08:52.284Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.056Z" + "updatedAt": "2025-11-27T09:08:59.749Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.056Z" + "updatedAt": "2025-11-27T09:08:59.750Z" } } }, "8b151a1a26b18205c264eb291e0e0442ddc0a8d5f8b81948e11a1cdd09758259": { "10f61a5bfa1bfc18d47b09dfd27319b441a25e084aea415d11bbbcb64e2a6c0c": { "ru": { - "updatedAt": "2025-11-26T07:24:19.059Z" + "updatedAt": "2025-11-27T09:08:59.760Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.058Z" + "updatedAt": "2025-11-27T09:08:59.756Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:19.060Z" + "updatedAt": "2025-11-27T09:08:59.761Z" } } }, "b2f66c32f59c426c83078d6b24b7186f54172727a996adce08872051de770134": { "0c794fe311b38eedc683c36f0c611835c85822c536fff3e7f51e45a39493a848": { "jp": { - "updatedAt": "2025-11-26T07:24:19.058Z" + "updatedAt": "2025-11-27T09:08:59.754Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.058Z" + "updatedAt": "2025-11-27T09:08:59.755Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.057Z" + "updatedAt": "2025-11-27T09:08:59.753Z" } } }, "b3581e0b617b1029663a70e779bab6aabd1b97807b23afe26b42a5bb82a2618a": { "38f348198e164923854caf2d5fb911a3b03dff8e5f682f59a476694465af9bd5": { "jp": { - "updatedAt": "2025-11-26T07:24:19.061Z" + "updatedAt": "2025-11-27T09:08:59.766Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.060Z" + "updatedAt": "2025-11-27T09:08:59.763Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.061Z" + "updatedAt": "2025-11-27T09:08:59.766Z" } } }, "b54c21849674b2f133d9a7587a54bf895f7b1a8384d344c53348c14c442b2644": { "ddce74d3907de04d0a9af32787564ecd6b5cba8d6c36159e1e227746999b1540": { "jp": { - "updatedAt": "2025-11-26T07:24:19.053Z" + "updatedAt": "2025-11-27T09:08:59.741Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.055Z" + "updatedAt": "2025-11-27T09:08:59.748Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.055Z" + "updatedAt": "2025-11-27T09:08:59.747Z" } } }, "bf6da61b91d435b98dbe4fcfd84c30e4661211a55093b7bd5294d05df5d9018f": { "8df18a3ed0cebffed7ef2a16c2c1feed24d08b38743943e1639bf2e1e83ad9cd": { "jp": { - "updatedAt": "2025-11-26T07:24:19.058Z" + "updatedAt": "2025-11-27T09:08:59.755Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.057Z" + "updatedAt": "2025-11-27T09:08:59.754Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.057Z" + "updatedAt": "2025-11-27T09:08:59.752Z" } } }, "c600219b9f55bdfcea82201926bfe9e4cabf53497d2110e11a6a97d3a6de16d1": { "879e570e6a755b5436d4b4e3e5ee02f6ef2f2b1b56d5e30a0d8ad6d11079deec": { "jp": { - "updatedAt": "2025-11-26T07:24:19.060Z" + "updatedAt": "2025-11-27T09:08:59.764Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.060Z" + "updatedAt": "2025-11-27T09:08:59.763Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.059Z" + "updatedAt": "2025-11-27T09:08:59.757Z" } } }, "d20c2004eff27206aa611fa47101376ca27b19c79a7c22fef935d90c8c7ee0b7": { "31528a8c4089ac02ac4c5cae45bfcf8375faba7dbb39d635e3082a39955f5a65": { "jp": { - "updatedAt": "2025-11-26T07:24:19.057Z" + "updatedAt": "2025-11-27T09:08:59.751Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.057Z" + "updatedAt": "2025-11-27T09:08:59.751Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.056Z" + "updatedAt": "2025-11-27T09:08:59.749Z" } } }, "d42c8393402232b95f473bddaaa33ac9663e18e070bfb5225b9240cded76bd36": { "469a531fc6c1dbbcdaf79cbc24df46624ad5a44a7c52da48e4665690d6de2002": { "jp": { - "updatedAt": "2025-11-26T07:24:19.058Z" + "updatedAt": "2025-11-27T09:08:59.757Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.061Z" + "updatedAt": "2025-11-27T09:08:59.765Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.059Z" + "updatedAt": "2025-11-27T09:08:59.758Z" } } }, "d55ab4d59e8e430728299d153babb7440fdf1524f75ae30ac017602a393f72f2": { "e946a51dbbf49a6bb72dfb7320ddc89e75e9bca19562498770b9375217a83d34": { "jp": { - "updatedAt": "2025-11-26T07:24:12.172Z" + "updatedAt": "2025-11-27T09:08:52.301Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.060Z" + "updatedAt": "2025-11-27T09:08:59.761Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.059Z" + "updatedAt": "2025-11-27T09:08:59.759Z" } } }, "e9e6900149061b39fd6dd6fa53d0c99f28ffac38d503ec961dd94dce5ebac808": { "aef65ce3391d03e363f980b73f3fa71276203fc5f77a1d75edec615250031f8e": { "jp": { - "updatedAt": "2025-11-26T07:24:19.055Z" + "updatedAt": "2025-11-27T09:08:59.748Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.054Z" + "updatedAt": "2025-11-27T09:08:59.744Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.054Z" + "updatedAt": "2025-11-27T09:08:59.745Z" } } }, "f5e923aaae110b8d3ec030f52c1731f515c0ed1b9a0e41490e863bb6395bd23b": { "c81f4b30001e6233066eddc0f7a5c166b4369eee24cb505fee91004bc16f3b48": { "jp": { - "updatedAt": "2025-11-26T07:24:19.058Z" + "updatedAt": "2025-11-27T09:08:59.755Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.058Z" + "updatedAt": "2025-11-27T09:08:59.755Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.058Z" + "updatedAt": "2025-11-27T09:08:59.754Z" } } }, "1d0e04973f4a7a2726ce086465182e22cfc8de26b7036f67bf3246dcdcab5c87": { "31f058ab67c32c0251f087188700872a277440d4f0ff0bd41cdc2a390207f441": { "jp": { - "updatedAt": "2025-11-26T07:24:12.185Z" + "updatedAt": "2025-11-27T09:08:59.801Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.185Z" + "updatedAt": "2025-11-27T09:08:59.803Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.185Z" + "updatedAt": "2025-11-27T09:08:59.803Z" } } }, "1d411ae967753b5d27acfdc77c2f68fa873d228cea6cf769ee2c85f10b38628f": { "8c9d1bbb63ac91b1a18b930594b6d354536b4a42a4cefa28e167390053f64f41": { "jp": { - "updatedAt": "2025-11-26T07:24:12.235Z" + "updatedAt": "2025-11-27T09:08:59.993Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.235Z" + "updatedAt": "2025-11-27T09:08:59.994Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.234Z" + "updatedAt": "2025-11-27T09:08:59.990Z" } } }, "32a2dfa24b35817a5fedbfc4895185da11ba73834f024a8c145cb60b3ee324a3": { "8f13f0e888bb91b30f7b56131bf3728f2950f55c2375b05eab6a6c9cabcab037": { "jp": { - "updatedAt": "2025-11-26T07:24:19.079Z" + "updatedAt": "2025-11-27T09:08:59.959Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.236Z" + "updatedAt": "2025-11-27T09:08:59.995Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.235Z" + "updatedAt": "2025-11-27T09:08:59.995Z" } } }, "34fe9aa819ffc70ef68be0505c66c5cb60f94370bfce6edd29d0ef846b1eb245": { "7ef9c6e569280d6e03a986898ccf237a939f4581319206934f40b7e910987b98": { "jp": { - "updatedAt": "2025-11-26T07:24:12.236Z" + "updatedAt": "2025-11-27T09:08:59.997Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.236Z" + "updatedAt": "2025-11-27T09:08:59.997Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.236Z" + "updatedAt": "2025-11-27T09:08:59.997Z" } } }, "5a1049606d2ddeb908a3f87e08c53c766115a2d5315cd4e891c852fa240471ed": { "4340b6e9c5ca9bb508ff61e1f7de601fd3ee092842be32670cf541dd9fe5b76c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.234Z" + "updatedAt": "2025-11-27T09:08:59.991Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.235Z" + "updatedAt": "2025-11-27T09:08:59.994Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.234Z" + "updatedAt": "2025-11-27T09:08:59.991Z" } } }, "6c930d7e263cee0da201aeb82b5afa15d7a0492edd3f17b70d744502c7da16c8": { "2c78d1148a39342c324f60ab8fd48891049dd3af4b2e04e98d60136cac22dac8": { "jp": { - "updatedAt": "2025-11-26T07:24:12.185Z" + "updatedAt": "2025-11-27T09:08:59.802Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.185Z" + "updatedAt": "2025-11-27T09:08:59.802Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.067Z" + "updatedAt": "2025-11-27T09:08:59.786Z" } } }, "7997000584a74b3a4893e2d952e3e74901f5c48d13d2477040f08510ce7fb94a": { "f3a543f784ce343388875d80bf6932364452e41d5c499c0fcdb6193cbc18d2ac": { "jp": { - "updatedAt": "2025-11-26T07:24:19.060Z" + "updatedAt": "2025-11-27T09:08:59.761Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.172Z" + "updatedAt": "2025-11-27T09:08:52.301Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.061Z" + "updatedAt": "2025-11-27T09:08:59.766Z" } } }, "7aeb5a3c848c3ac6401e3621b9731a411c3ffe53b1ec386f511089c819780c4c": { "1f0a4b693ba5e0ec268fafbbe5f0a583b29cfd716f04abb61d43c5813b6ad612": { "jp": { - "updatedAt": "2025-11-26T07:24:12.234Z" + "updatedAt": "2025-11-27T09:08:59.991Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.233Z" + "updatedAt": "2025-11-27T09:08:59.988Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.234Z" + "updatedAt": "2025-11-27T09:08:59.989Z" } } }, "7af81b34b1f80a6579a084fc3f8d1ecb9f0315e228a3b01eca34abc4e963fda6": { "c20825094b802738f9e5eb45bd5ac1dadaadc926f348ad24d8c06cc4e5157994": { "jp": { - "updatedAt": "2025-11-26T07:24:12.233Z" + "updatedAt": "2025-11-27T09:08:59.987Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.233Z" + "updatedAt": "2025-11-27T09:08:59.987Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.233Z" + "updatedAt": "2025-11-27T09:08:59.986Z" } } }, "83eab82a7ad67622f732d278303fd5a55d015c462467d35a81a97662bdec853e": { "2d649e303741fd66ea1aa56354d590ebd300f6ec9c2b2ef22c28c636be7a29cc": { "jp": { - "updatedAt": "2025-11-26T07:24:19.061Z" + "updatedAt": "2025-11-27T09:08:59.765Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.058Z" + "updatedAt": "2025-11-27T09:08:59.756Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.060Z" + "updatedAt": "2025-11-27T09:08:59.761Z" } } }, "8aef57a5d0702946541ef4bc66a35386c47ef94c0fbc0f60abf1cf7cff964601": { "1de18ab03988e32b892f506405ca6a01d5a611302a852d3f5e7de174a37be78b": { "jp": { - "updatedAt": "2025-11-26T07:24:19.061Z" + "updatedAt": "2025-11-27T09:08:59.764Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.172Z" + "updatedAt": "2025-11-27T09:08:52.301Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.061Z" + "updatedAt": "2025-11-27T09:08:59.767Z" } } }, "a2ec760009faa1e1eff2c135a3d4deb7afa6a079dda0c6d9f99db627647062d5": { "4f03a97491bdbb54d341d453335aff270c60976e7c3ad96cb719e9003ee5ad0c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.235Z" + "updatedAt": "2025-11-27T09:08:59.994Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.233Z" + "updatedAt": "2025-11-27T09:08:59.987Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.234Z" + "updatedAt": "2025-11-27T09:08:59.989Z" } } }, "a81ad531cd4308314f95a3bc7ee7518076cb8b225330a76bdebb309de6c07d84": { "eb1a10c317b4f12f9023e3b4899a6403eac245683d867b105338963ab1df00ca": { "jp": { - "updatedAt": "2025-11-26T07:24:12.185Z" + "updatedAt": "2025-11-27T09:08:59.804Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.185Z" + "updatedAt": "2025-11-27T09:08:59.803Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.185Z" + "updatedAt": "2025-11-27T09:08:59.803Z" } } }, "a8b3a4c7be16228ce7b50cb870cc58cfe39f8c34bd28a3aca5822b90b0f42830": { "f2435d45557de24d303d66a742aeff55e64e2f4b580432c1d1d9f8eaeb1f5d17": { "jp": { - "updatedAt": "2025-11-26T07:24:12.174Z" + "updatedAt": "2025-11-27T09:08:52.307Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.174Z" + "updatedAt": "2025-11-27T09:08:52.307Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.174Z" + "updatedAt": "2025-11-27T09:08:52.306Z" } } }, "b2dcbd4e41cb07eefcbc269f5df931324f8744a9483f6b145243bbc5673c42c1": { "5890daa9787c7983a0d917f5622f02d272e85c52daeee1444ef64b42ce8108d7": { "jp": { - "updatedAt": "2025-11-26T07:24:12.185Z" + "updatedAt": "2025-11-27T09:08:59.803Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.185Z" + "updatedAt": "2025-11-27T09:08:59.802Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.185Z" + "updatedAt": "2025-11-27T09:08:59.802Z" } } }, "db411e0514092e58a10e4b885faa2126f95d2bd39dace283d1e44cbc9831e3dd": { "527580835a672b74a709bacb51a246aba1c88246216cdba2db279817225f4044": { "jp": { - "updatedAt": "2025-11-26T07:24:12.184Z" + "updatedAt": "2025-11-27T09:08:59.801Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.185Z" + "updatedAt": "2025-11-27T09:08:59.804Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.184Z" + "updatedAt": "2025-11-27T09:08:59.801Z" } } }, "dc3682d31d860920c0027dc94b51e1f197c5a38ca754f403922910b9b8ba3903": { "668b968f7ffa7b6faf894697548c553b64afd08c5b62258b0eb445aab83c7d88": { "jp": { - "updatedAt": "2025-11-26T07:24:12.235Z" + "updatedAt": "2025-11-27T09:08:59.992Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.236Z" + "updatedAt": "2025-11-27T09:08:59.996Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.234Z" + "updatedAt": "2025-11-27T09:08:59.992Z" } } }, "e72fb86764359e026d92c8940ee6175f5febdbd710006033850bb2ad8aa43023": { "10e1df69f27be8e1de4c2159ec11f7a83395eb9a20a7b729e0fbe4c2bc8bb473": { "jp": { - "updatedAt": "2025-11-26T07:24:12.233Z" + "updatedAt": "2025-11-27T09:08:59.988Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.234Z" + "updatedAt": "2025-11-27T09:08:59.988Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.235Z" + "updatedAt": "2025-11-27T09:08:59.992Z" } } }, "ea7e5e311ec73e96e57ec3343b5c4d7cd8d2c758deae9104dffeb15243a22097": { "a6b1a10073ba1bedb61ae0ed5088f394cf79fd30feddaa919ee25e9e0f4c991c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.236Z" + "updatedAt": "2025-11-27T09:08:59.996Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.235Z" + "updatedAt": "2025-11-27T09:08:59.995Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.236Z" + "updatedAt": "2025-11-27T09:08:59.996Z" } } }, "f46404d0d2b932ed24233530122a903e98fd0ad2e866b50bb50ad16e35006e6f": { "ce6bd20ee80f6f7df45c614920f103f5eb64699dca884aa2e9a55c8adbfcc913": { "jp": { - "updatedAt": "2025-11-26T07:24:12.235Z" + "updatedAt": "2025-11-27T09:08:59.993Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.234Z" + "updatedAt": "2025-11-27T09:08:59.990Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.234Z" + "updatedAt": "2025-11-27T09:08:59.990Z" } } }, "f6103a7698b24fef604602086936cf148c11df516f6f84bf99b48971614c717b": { "2934cd253b5a2e39a317ce455fc2c1d9f94f60e9c0af926ce756c8e2261a0354": { "jp": { - "updatedAt": "2025-11-26T07:24:12.235Z" + "updatedAt": "2025-11-27T09:08:59.993Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.233Z" + "updatedAt": "2025-11-27T09:08:59.988Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.234Z" + "updatedAt": "2025-11-27T09:08:59.989Z" } } }, "05f8d1acdb9d8a92c6735e4d5dcf8080fa8ee6512cc13dbf3b840c999a094c71": { "97638cef9fdf5d6328f466c856175463ac017bac4780f1d817b5d4729a88aa08": { "jp": { - "updatedAt": "2025-11-26T07:24:12.231Z" + "updatedAt": "2025-11-27T09:08:59.980Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.231Z" + "updatedAt": "2025-11-27T09:08:59.977Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.232Z" + "updatedAt": "2025-11-27T09:08:59.982Z" } } }, "0c936deece1cfa87a5970fb553569967ce05687698de65a98ef0315477967bbd": { "a922d6b0d8e112391f7d053fc7058eb1d5659b44c4a9dfa835485d17fbead31d": { "jp": { - "updatedAt": "2025-11-26T07:24:12.238Z" + "updatedAt": "2025-11-27T09:09:00.001Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.237Z" + "updatedAt": "2025-11-27T09:09:00.000Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.237Z" + "updatedAt": "2025-11-27T09:09:00.000Z" } } }, "1582ff8ea3fdbeb1dad986160d1b0999795a555f6d89e98dd145b6f49dfb08eb": { "5e343ab5ab03d0e1fa46bf003992f1eb136b9a12bfad77828128edf71d3afe32": { "jp": { - "updatedAt": "2025-11-26T07:24:12.238Z" + "updatedAt": "2025-11-27T09:09:00.001Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.230Z" + "updatedAt": "2025-11-27T09:08:59.975Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.238Z" + "updatedAt": "2025-11-27T09:09:00.001Z" } } }, "179dbf5bb80545989b2913aca22d0861999dba14106d2380864014877de3c93b": { "114ef0735c99933d93e4c6a570fccf1ca3ef45aed471b8a4eccb902e87cb5043": { "jp": { - "updatedAt": "2025-11-26T07:24:12.232Z" + "updatedAt": "2025-11-27T09:08:59.982Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.230Z" + "updatedAt": "2025-11-27T09:08:59.976Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.231Z" + "updatedAt": "2025-11-27T09:08:59.977Z" } } }, "1dccccf586631074a6cd966272c09df3578cce225321b7df5ebc807acd0dcdfb": { "b435aec19ff6ecbb9d88c6d1f945636177e245c9c227442437f370098f0f3e09": { "jp": { - "updatedAt": "2025-11-26T07:24:12.244Z" + "updatedAt": "2025-11-27T09:09:00.032Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.243Z" + "updatedAt": "2025-11-27T09:09:00.031Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.244Z" + "updatedAt": "2025-11-27T09:09:00.032Z" } } }, "2a3e385a0edab430e986558c8176d5e5093f020848f61371fce764ff9195f165": { "b8228ee3face15f90f6ed1245de3feab742bd22410c8360b5dcc4e855e71c22d": { "jp": { - "updatedAt": "2025-11-26T07:24:12.230Z" + "updatedAt": "2025-11-27T09:08:59.976Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.230Z" + "updatedAt": "2025-11-27T09:08:59.975Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.238Z" + "updatedAt": "2025-11-27T09:09:00.000Z" } } }, "2bb9b38a8d5dfd619ee7e2a01589dd2c06c59b11f82f178133c39690b45125c5": { "21f979e19600cd98d3791382f305b11aed31990ab9b8c6cfdaf57719effc558d": { "jp": { - "updatedAt": "2025-11-26T07:24:12.240Z" + "updatedAt": "2025-11-27T09:09:00.007Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.240Z" + "updatedAt": "2025-11-27T09:09:00.006Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.239Z" + "updatedAt": "2025-11-27T09:09:00.003Z" } } }, "32b3dc73599ca183244dc71ff36bc88e62757e5face12c31b14ce042f684120c": { "1bb063448241263bf2f6dc2f55489a21d5cd06be00886e0e9e91d6bceacc47ba": { "jp": { - "updatedAt": "2025-11-26T07:24:12.240Z" + "updatedAt": "2025-11-27T09:09:00.008Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.241Z" + "updatedAt": "2025-11-27T09:09:00.009Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.240Z" + "updatedAt": "2025-11-27T09:09:00.008Z" } } }, "51c48794a66e183ba70935eac117d954a1401f40572a0afc11169b24fcd14820": { "dc661924dc7cd06d16b7ed5abfda37c2ece415c277427ada79d811eff748ebda": { "jp": { - "updatedAt": "2025-11-26T07:24:12.233Z" + "updatedAt": "2025-11-27T09:08:59.985Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.232Z" + "updatedAt": "2025-11-27T09:08:59.984Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.230Z" + "updatedAt": "2025-11-27T09:08:59.977Z" } } }, "5565bc89634d0648d7fb44f41fcd9352657cc2b36d57392f0a6561a32e66eb28": { "d223905451f4d931e0e856ce3fd5f35c1c3c25396ff43780337894e768a7242b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.231Z" + "updatedAt": "2025-11-27T09:08:59.978Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.233Z" + "updatedAt": "2025-11-27T09:08:59.986Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.231Z" + "updatedAt": "2025-11-27T09:08:59.978Z" } } }, "705e7aed31578540442c080a6cafebaeba2bf1ddb38ec739dd014aec5b25502b": { "29a6c789509cb2e9a587186b93902ad76eec1850c4f01f91eb5c2a4c186d557d": { "zh": { - "updatedAt": "2025-11-26T07:24:12.242Z" + "updatedAt": "2025-11-27T09:09:00.010Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.241Z" + "updatedAt": "2025-11-27T09:09:00.009Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.241Z" + "updatedAt": "2025-11-27T09:09:00.008Z" } } }, "7e47d90d43125cfd56ce110d9bfe1a08ac0c8cecbad7095afeda215f8ebaff80": { "6aa7a3b849b9da4b7d84bb26a3754ab6d9c56ee35825fa788436cb306b81fc00": { "jp": { - "updatedAt": "2025-11-26T07:24:19.080Z" + "updatedAt": "2025-11-27T09:08:59.960Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.080Z" + "updatedAt": "2025-11-27T09:08:59.960Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.231Z" + "updatedAt": "2025-11-27T09:08:59.979Z" } } }, "9368e9ef7da2d3545fdcad02056a63f297099ae569a58d6445ec4175f477bcf7": { "5294da061b84e38e7a5c72fa3738434b348d3c948072b63438f6f8e9041f8d45": { "jp": { - "updatedAt": "2025-11-26T07:24:12.240Z" + "updatedAt": "2025-11-27T09:09:00.005Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.238Z" + "updatedAt": "2025-11-27T09:09:00.000Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.238Z" + "updatedAt": "2025-11-27T09:09:00.002Z" } } }, "9b15850f1d6c56459d6b0fa9d474eadb52afad86ad938d6fca842fee7123fad8": { "25e5196cc0881c744884c4a42ddf939be70e281a9b5a832b3c4da81eede4a272": { "jp": { - "updatedAt": "2025-11-26T07:24:12.232Z" + "updatedAt": "2025-11-27T09:08:59.983Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.232Z" + "updatedAt": "2025-11-27T09:08:59.981Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.232Z" + "updatedAt": "2025-11-27T09:08:59.983Z" } } }, "9d935527c3051f00d3c44516b5c5b43d9ec31ba4d1ca19553b784a772963e4d6": { "b415e1612fa4c875f71cf858dcdd92606355f03dd3c13b5aef37f79f279ada0c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.240Z" + "updatedAt": "2025-11-27T09:09:00.006Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.239Z" + "updatedAt": "2025-11-27T09:09:00.004Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.237Z" + "updatedAt": "2025-11-27T09:09:00.000Z" } } }, @@ -6966,533 +7010,533 @@ }, "e607066649cfbd50b16b74b56125f76fc7dae7885df303cc620af28c763ce899": { "ru": { - "updatedAt": "2025-11-26T07:24:12.240Z" + "updatedAt": "2025-11-27T09:09:00.007Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.239Z" + "updatedAt": "2025-11-27T09:09:00.003Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.240Z" + "updatedAt": "2025-11-27T09:09:00.005Z" } } }, "ca84649ef742e7064e2d857290ef9d942fcc1d6b9bdfff1813fcdfdbefec62ff": { "555cc07d313afdfd168b7ad11d02f0ab80d39cc85a07b294b44c7401c7ce9620": { "jp": { - "updatedAt": "2025-11-26T07:24:12.240Z" + "updatedAt": "2025-11-27T09:09:00.006Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.238Z" + "updatedAt": "2025-11-27T09:09:00.002Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.239Z" + "updatedAt": "2025-11-27T09:09:00.003Z" } } }, "d8908fc8af7a3068c0cc48f8107adaf5bf331be7388208aa9a40ca7f00432b7f": { "561bda26e259939457123ba760b1c473d1ffa5cabb632bd41b00a30024d8ae4e": { "jp": { - "updatedAt": "2025-11-26T07:24:12.232Z" + "updatedAt": "2025-11-27T09:08:59.984Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.231Z" + "updatedAt": "2025-11-27T09:08:59.980Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.232Z" + "updatedAt": "2025-11-27T09:08:59.985Z" } } }, "dbd0d5161d0bd3efeb5fcda68e773df51262f2852a70440882d847c3e8ed79ff": { "558ea55eedb29b8236de463bdebed17358b2ffd17236ba1c7d0c9758543b7b74": { "jp": { - "updatedAt": "2025-11-26T07:24:12.242Z" + "updatedAt": "2025-11-27T09:09:00.011Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.241Z" + "updatedAt": "2025-11-27T09:09:00.008Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.242Z" + "updatedAt": "2025-11-27T09:09:00.010Z" } } }, "df35030ac136ab8f4825db977a911e1874670c6ba73d0e658e95b28fa50c1d70": { "4cebcab8322a8aae73bf90996e95a2e65bb56b941371c8819373abaf169e92db": { "jp": { - "updatedAt": "2025-11-26T07:24:12.239Z" + "updatedAt": "2025-11-27T09:09:00.004Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.238Z" + "updatedAt": "2025-11-27T09:09:00.002Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.239Z" + "updatedAt": "2025-11-27T09:09:00.005Z" } } }, "ee20bc66651b66977783ce3a17b9d4f38b09b4a0774e0791bb9fb26a7f930500": { "e7338142de8dacc4a6fc04e51a78c9dd1fb3bbef6534057d60f8de1db6ed3aab": { "jp": { - "updatedAt": "2025-11-26T07:24:12.239Z" + "updatedAt": "2025-11-27T09:09:00.004Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.238Z" + "updatedAt": "2025-11-27T09:09:00.002Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.239Z" + "updatedAt": "2025-11-27T09:09:00.004Z" } } }, "fe7e045fa5f538d00f569d58a48e0a9285abe27807a38b3ce253116b4cc22e74": { "c2d3019dfd5c9e95d0bc93db0189ffd3ae5bb907d47f6a727f23a3e435164059": { "jp": { - "updatedAt": "2025-11-26T07:24:12.239Z" + "updatedAt": "2025-11-27T09:09:00.003Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.238Z" + "updatedAt": "2025-11-27T09:09:00.001Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.239Z" + "updatedAt": "2025-11-27T09:09:00.005Z" } } }, "26480489190477329712e0e890231f9ee67f7bae2ec93f1adc5e49bd8705dd0b": { "ca234a63cfee1038a0b6bb5b7e10d7ef8307e9e5239cd0706669420fd2cb62a3": { "jp": { - "updatedAt": "2025-11-26T07:24:12.243Z" + "updatedAt": "2025-11-27T09:09:00.031Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.243Z" + "updatedAt": "2025-11-27T09:09:00.031Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.243Z" + "updatedAt": "2025-11-27T09:09:00.032Z" } } }, "356c6ff78cff0c4de1af14bfafe2c9bd10139292cd3f3c3553d242bfb277d994": { "cf5d9fa224a574f45a3c02cbc85a2617672d37fcaddc77e5adcfc9fa74e326b1": { "jp": { - "updatedAt": "2025-11-26T07:24:12.245Z" + "updatedAt": "2025-11-27T09:09:00.036Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.245Z" + "updatedAt": "2025-11-27T09:09:00.036Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.247Z" + "updatedAt": "2025-11-27T09:09:00.041Z" } } }, "372be1b1091279b14a64c301dd32f570d8ae7c28ebc2b0e65c8d600412c8a6b2": { "24a1775ccfe9d94dbe6ee2e71f12bbcddd22da3de1dd49f2d8ce8e542b33728c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.243Z" + "updatedAt": "2025-11-27T09:09:00.032Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.242Z" + "updatedAt": "2025-11-27T09:09:00.011Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.243Z" + "updatedAt": "2025-11-27T09:09:00.030Z" } } }, "3b4bb74db846ca0f012ad71dfdb33334fa8118040393487ad35fea48bd2470ea": { "3120f1e4d4f08a6ba69af7daa70ffa13d27c3a4aef713d36140278c033dcf2bc": { "jp": { - "updatedAt": "2025-11-26T07:24:12.244Z" + "updatedAt": "2025-11-27T09:09:00.034Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.245Z" + "updatedAt": "2025-11-27T09:09:00.035Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.246Z" + "updatedAt": "2025-11-27T09:09:00.037Z" } } }, "42ae3a5b453abe44edf7cc0c8fb18a3559a3043e9828ca9eecf69cbab0362ecd": { "fb18df11b1efd0c29cdbcd9a0fef8f8e09542882ba6ccb09e3e42d9f3b8aa419": { "jp": { - "updatedAt": "2025-11-26T07:24:12.247Z" + "updatedAt": "2025-11-27T09:09:00.040Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.245Z" + "updatedAt": "2025-11-27T09:09:00.035Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.247Z" + "updatedAt": "2025-11-27T09:09:00.041Z" } } }, "501db638650e5304a9dba8ff4612de47b5da82aaad0a722bd89c11c68a35eb5d": { "f925e25aa54c252061995e84db9939551b2e2035ef3360d06582d778617a054f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.247Z" + "updatedAt": "2025-11-27T09:09:00.040Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.249Z" + "updatedAt": "2025-11-27T09:09:00.045Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.246Z" + "updatedAt": "2025-11-27T09:09:00.038Z" } } }, "5391d9361d8de859f55fc623438785f034d27921eaf51522b1cfec0b8ae6d057": { "4c5301e6bd068db1c39c7442930c97eb64fc020a710f75519ea91e088c153887": { "jp": { - "updatedAt": "2025-11-26T07:24:12.245Z" + "updatedAt": "2025-11-27T09:09:00.036Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.245Z" + "updatedAt": "2025-11-27T09:09:00.037Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.245Z" + "updatedAt": "2025-11-27T09:09:00.037Z" } } }, "64565318cadde7f90ba96c3e29513ba020adf44fe66a9bf3e5482d23d0dd47dc": { "63452898bc1a5638b696f345c28ff8083c41b2223f3638a2c64f25800a2a5647": { "jp": { - "updatedAt": "2025-11-26T07:24:12.249Z" + "updatedAt": "2025-11-27T09:09:00.047Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.250Z" + "updatedAt": "2025-11-27T09:09:00.048Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.249Z" + "updatedAt": "2025-11-27T09:09:00.046Z" } } }, "68ba9608dff675f309e6f07ee6d6f770a417b027a738a79f138c8d70e2106dbc": { "9dc2946bda2aea97fa9b18c311317369a59c2adf656d6ce6d76316a813616fc1": { "jp": { - "updatedAt": "2025-11-26T07:24:12.248Z" + "updatedAt": "2025-11-27T09:09:00.044Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.249Z" + "updatedAt": "2025-11-27T09:09:00.046Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.247Z" + "updatedAt": "2025-11-27T09:09:00.039Z" } } }, "78fe6d3b89afce471181d779a6a8b475696095ab4ef58d29771279afa02b2997": { "79d3b0b826a742e9b7895789e7402d878b568cd9e4df76a133dc77a70f03c8c0": { "jp": { - "updatedAt": "2025-11-26T07:24:12.241Z" + "updatedAt": "2025-11-27T09:09:00.009Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.241Z" + "updatedAt": "2025-11-27T09:09:00.008Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.242Z" + "updatedAt": "2025-11-27T09:09:00.010Z" } } }, "81915656e6d382d86e051a8fa78d36209f8322f00df9d519bd2aba85055926e2": { "4bc52b2d49860b621c0c2e9203206add44f60ae74179555c48eff9366de95cc3": { "jp": { - "updatedAt": "2025-11-26T07:24:12.248Z" + "updatedAt": "2025-11-27T09:09:00.042Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.247Z" + "updatedAt": "2025-11-27T09:09:00.041Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.248Z" + "updatedAt": "2025-11-27T09:09:00.042Z" } } }, "89db72da570e81ebcb6f667a907e2f846f64923d46a9947f6788299488af58fc": { "bc1f7fd0c55c3e925412c0e368a4ffa88b8fe5c39a7aa535303e0d54e76f2b9c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.241Z" + "updatedAt": "2025-11-27T09:09:00.010Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.242Z" + "updatedAt": "2025-11-27T09:09:00.011Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.243Z" + "updatedAt": "2025-11-27T09:09:00.012Z" } } }, "938d56b6044b6cebcfe8b337190fa6dea927660551790620ca8c19fb31cd39ba": { "2aefd9ad0393f63b7e1ec0b002323afaa8b544c1011e8f3c91b77ac1f84ef487": { "jp": { - "updatedAt": "2025-11-26T07:24:12.248Z" + "updatedAt": "2025-11-27T09:09:00.043Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.248Z" + "updatedAt": "2025-11-27T09:09:00.042Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.248Z" + "updatedAt": "2025-11-27T09:09:00.044Z" } } }, "96e31c277d43b145242840ad838f44b908ce963c352dad86b59211265e87b591": { "482a21b0c27c50eedb13f76a309205d6a1f064bddbb03002a77af2aa8fd7cc3c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.249Z" + "updatedAt": "2025-11-27T09:09:00.045Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.249Z" + "updatedAt": "2025-11-27T09:09:00.047Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.250Z" + "updatedAt": "2025-11-27T09:09:00.048Z" } } }, "99ff98bca369584f25c59d8f96acd6c1788719989416cfe1d5d478919758fd86": { "139a2b803dd22a097a0fb93f4bf76cd3187b48224be1271d561ce8d6d3b0bdfd": { "jp": { - "updatedAt": "2025-11-26T07:24:12.247Z" + "updatedAt": "2025-11-27T09:09:00.040Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.246Z" + "updatedAt": "2025-11-27T09:09:00.038Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.247Z" + "updatedAt": "2025-11-27T09:09:00.041Z" } } }, "b2aff55ca5954a6970b9f52ac23fc39fc004e51a346a6cd693caccb1417c6519": { "1010abd84c38f96762ed3b8cb461a3bb4e5e229304c1c500e26dc7c6e9d01318": { "jp": { - "updatedAt": "2025-11-26T07:24:12.242Z" + "updatedAt": "2025-11-27T09:09:00.010Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.241Z" + "updatedAt": "2025-11-27T09:09:00.009Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.243Z" + "updatedAt": "2025-11-27T09:09:00.030Z" } } }, "b8c212ea80c9bdcc2ba8434c82489b4cd25a84157ab8881924465e669bf2bf1d": { "aad4076142416380448496fbac36524304c81991e5c00dade2ad95e55a087c94": { "ru": { - "updatedAt": "2025-11-26T07:24:12.237Z" + "updatedAt": "2025-11-27T09:08:59.999Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.248Z" + "updatedAt": "2025-11-27T09:09:00.044Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.237Z" + "updatedAt": "2025-11-27T09:08:59.999Z" } } }, "cb227df00b6e64305168553956c1928afd33de9cb76c9d330e9c9eca9290c33e": { "268a8df1fdc77541fc0a6bc99e66097367ea72724a49b591b16c19e00e6685fe": { "jp": { - "updatedAt": "2025-11-26T07:24:12.246Z" + "updatedAt": "2025-11-27T09:09:00.037Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.246Z" + "updatedAt": "2025-11-27T09:09:00.039Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.243Z" + "updatedAt": "2025-11-27T09:09:00.043Z" } } }, "d1c3b4df71214a3e88455cadb9dda32802eabf8a18de9dd12b4636f3a20001bb": { "407735ce33f5163b7e6c2875f0e2414993e84109f0556ba297b7f1762f038a8a": { "jp": { - "updatedAt": "2025-11-26T07:24:12.247Z" + "updatedAt": "2025-11-27T09:09:00.040Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.246Z" + "updatedAt": "2025-11-27T09:09:00.039Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.245Z" + "updatedAt": "2025-11-27T09:09:00.035Z" } } }, "e9a7a6821acf2148d5fdf59dfb02c842dbeccfe3db8ed78b13af93341b542d82": { "45af94df7fb72c57f3c3954a12bae535b5025b01d4824ae9e4f23b2ab156e1ec": { "jp": { - "updatedAt": "2025-11-26T07:24:12.243Z" + "updatedAt": "2025-11-27T09:09:00.046Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.242Z" + "updatedAt": "2025-11-27T09:09:00.041Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.242Z" + "updatedAt": "2025-11-27T09:09:00.011Z" } } }, "fee5d5e407a8306e3abcff87b3f147641c908588b209b7c9e107759067db235d": { "35cee660251b87c86ad32e1c0bdaaefadc8dc8d26b278a55c87e87e3de226353": { "jp": { - "updatedAt": "2025-11-26T07:24:12.247Z" + "updatedAt": "2025-11-27T09:09:00.039Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.248Z" + "updatedAt": "2025-11-27T09:09:00.043Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.249Z" + "updatedAt": "2025-11-27T09:09:00.046Z" } } }, "16f8cdbdb2db2ec0c442adb2d731ad72ac56b9c830104c642c7d2a3b0353bb51": { "81890c8843157d3e93683e2432db1962f9cd9f3a81498ad22050145df32d70f2": { "jp": { - "updatedAt": "2025-11-26T07:24:12.254Z" + "updatedAt": "2025-11-27T09:09:00.060Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.253Z" + "updatedAt": "2025-11-27T09:09:00.055Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.253Z" + "updatedAt": "2025-11-27T09:09:00.057Z" } } }, "22107d57f939a679e2605620f4964bd50775a98cf0a725bb73b27f34f48bb6a8": { "8bee2f4f365485c8773bece43ccdc523ab14c91e5b4d3f38ac552aa09ea55c97": { "jp": { - "updatedAt": "2025-11-26T07:24:12.255Z" + "updatedAt": "2025-11-27T09:09:00.063Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.254Z" + "updatedAt": "2025-11-27T09:09:00.059Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.254Z" + "updatedAt": "2025-11-27T09:09:00.060Z" } } }, "23af5cac91f252ffe2e42d1e7b5a0bcabe7dc844aed8ebeffba1570964d40b4d": { "897a5b0e6ee3fe28e1f105bc25b952d48f233f747b27270188a83040b9b40f90": { "jp": { - "updatedAt": "2025-11-26T07:24:12.246Z" + "updatedAt": "2025-11-27T09:09:00.037Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.244Z" + "updatedAt": "2025-11-27T09:09:00.034Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.245Z" + "updatedAt": "2025-11-27T09:09:00.036Z" } } }, "256b6f8980e5b71a4462fde393b7342ea3301cc72724522761120a29f082680b": { "479ac94cfa44c4916c5e0c53e04c1c5a735ae40232807e8ee57eb3c72f5a8bcd": { "jp": { - "updatedAt": "2025-11-26T07:24:12.252Z" + "updatedAt": "2025-11-27T09:09:00.055Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.252Z" + "updatedAt": "2025-11-27T09:09:00.054Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.252Z" + "updatedAt": "2025-11-27T09:09:00.054Z" } } }, "2a50f26ed5a74514a1bb5535e77a1e4295586acbc14137eeb91bebd950369fe9": { "77daddd248c06a3945d845d9935148cb7d185c9ace0f5a7e2b8d9a52649050c4": { "jp": { - "updatedAt": "2025-11-26T07:24:12.254Z" + "updatedAt": "2025-11-27T09:09:00.062Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.256Z" + "updatedAt": "2025-11-27T09:09:00.066Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.256Z" + "updatedAt": "2025-11-27T09:09:00.068Z" } } }, "46bd4dfa83c32ac4ee0793f24a4eec7a6817695873c20899ae805bb4319b8613": { "97faffda5ee3e2797d75fa2824b0471ac235ef05ac8e18b89e122a440dc90301": { "jp": { - "updatedAt": "2025-11-26T07:24:12.257Z" + "updatedAt": "2025-11-27T09:09:00.069Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.256Z" + "updatedAt": "2025-11-27T09:09:00.068Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.253Z" + "updatedAt": "2025-11-27T09:09:00.056Z" } } }, "55c4dba0327f61353da1e2bb79f11bd89ee95b926dd1a86a38c82a8837d28c4b": { "45ee568fd070f4841a6bc4d3d5720231ff8e0b6b95e3b6558e9f606b852b17aa": { "jp": { - "updatedAt": "2025-11-26T07:24:12.258Z" + "updatedAt": "2025-11-27T09:09:00.073Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.250Z" + "updatedAt": "2025-11-27T09:09:00.072Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.250Z" + "updatedAt": "2025-11-27T09:09:00.071Z" } } }, "6e73db155b7c6964fced099cd2a329a54c570e4567c1e741e45991462993ff89": { "d1aadc2b06df5561a41ec6294f8ba38c60368402b06032d12e12420507c14384": { "jp": { - "updatedAt": "2025-11-26T07:24:12.249Z" + "updatedAt": "2025-11-27T09:09:00.046Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.249Z" + "updatedAt": "2025-11-27T09:09:00.045Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.246Z" + "updatedAt": "2025-11-27T09:09:00.038Z" } } }, "854411037d5e91dafe4510e3bb749eb29c1405966f5c747972f003bea369b464": { "2f5dd362e6719f95a9f300225eac5ed8491245ba11f15bda272d36325d991c01": { "jp": { - "updatedAt": "2025-11-26T07:24:12.245Z" + "updatedAt": "2025-11-27T09:09:00.052Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.244Z" + "updatedAt": "2025-11-27T09:09:00.035Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.245Z" + "updatedAt": "2025-11-27T09:09:00.035Z" } } }, "906c5c00462e8461e0b7aa1cffaec1f44d3cc275066f474f9ab70cccbf9e9d8d": { "661e85a9d5e8d39ed88218a74a7029ed28519c2e3ed3213707133a5bb6e243c6": { "jp": { - "updatedAt": "2025-11-26T07:24:12.253Z" + "updatedAt": "2025-11-27T09:09:00.056Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.255Z" + "updatedAt": "2025-11-27T09:09:00.063Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.254Z" + "updatedAt": "2025-11-27T09:09:00.058Z" } } }, "9acecbbe697d2e6d2e334b3b54c514cdcf0ed3d6c83e6748104f8f3b983abbd2": { "4b6046e5cde03661005f0be0ef3f23e778a948c6c005456f94af71b6ea2e484b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.255Z" + "updatedAt": "2025-11-27T09:09:00.065Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.254Z" + "updatedAt": "2025-11-27T09:09:00.059Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.253Z" + "updatedAt": "2025-11-27T09:09:00.057Z" } } }, "9e489d6bd5311c686f9d5b9d6362b8dc0665508e0aee22c424f6d5045646470b": { "3428be07ec229b0c8189ab88dcf64befbe6259ed64195b3646ffba1c30f4f99c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.256Z" + "updatedAt": "2025-11-27T09:09:00.066Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.254Z" + "updatedAt": "2025-11-27T09:09:00.061Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.256Z" + "updatedAt": "2025-11-27T09:09:00.066Z" } } }, "9ea307eb644dfcb063c696ac334d7efc3c4116379021488a8c90f62910a0ada4": { "fbffc80f20e5309f443ac78918570ef083994e1d627e7abc163966be69f97bbc": { "jp": { - "updatedAt": "2025-11-26T07:24:12.250Z" + "updatedAt": "2025-11-27T09:09:00.048Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.250Z" + "updatedAt": "2025-11-27T09:09:00.049Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.248Z" + "updatedAt": "2025-11-27T09:09:00.043Z" } } }, @@ -7510,1326 +7554,1326 @@ }, "23da89ecb9cb7533ec667d1796578f33ffa62f9e868634d354c4e0fc15e995c0": { "zh": { - "updatedAt": "2025-11-26T07:24:12.244Z" + "updatedAt": "2025-11-27T09:09:00.034Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.251Z" + "updatedAt": "2025-11-27T09:09:00.050Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.251Z" + "updatedAt": "2025-11-27T09:09:00.051Z" } } }, "b9b9941c05a9402833caf9876a84c15fb7e08ee5f6ebf347c9f6516a00134c17": { "c8b48a439aa45e1012fed359c6c51f552f6e1298e6483f894f01fb76cfeb566a": { "jp": { - "updatedAt": "2025-11-26T07:24:12.257Z" + "updatedAt": "2025-11-27T09:09:00.069Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.252Z" + "updatedAt": "2025-11-27T09:09:00.054Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.256Z" + "updatedAt": "2025-11-27T09:09:00.067Z" } } }, "caf9155f2ad3c6bb6165f0c5a837f80ca0f324d7821ee36716d6a44981b32432": { "c9a20f8ca6d2167945584243cb48aae584ce849963b883da031cb1fa3b57b9d3": { "jp": { - "updatedAt": "2025-11-26T07:24:12.256Z" + "updatedAt": "2025-11-27T09:09:00.067Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.255Z" + "updatedAt": "2025-11-27T09:09:00.065Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.255Z" + "updatedAt": "2025-11-27T09:09:00.065Z" } } }, "cbb612322707858e39d9de4d0c9cc540429b50cdf2909447e753d421fc3212d0": { "4a7d4ef89d791edabbdff46a2878745843ca285c2985ee018c727274960745d4": { "jp": { - "updatedAt": "2025-11-26T07:24:12.249Z" + "updatedAt": "2025-11-27T09:09:00.047Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.248Z" + "updatedAt": "2025-11-27T09:09:00.044Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.248Z" + "updatedAt": "2025-11-27T09:09:00.042Z" } } }, "cee825351a39183c37f3496b305a2ca1f4323197e9abbe5c4516b74419ab1ae5": { "a0695d4dcbda273aa6429b9ac871a434d4a137ecabd11538b66c6a141105e98c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.256Z" + "updatedAt": "2025-11-27T09:09:00.068Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.244Z" + "updatedAt": "2025-11-27T09:09:00.033Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.253Z" + "updatedAt": "2025-11-27T09:09:00.056Z" } } }, "dd2163ae2a4256a6c45cea7405483741ac924731427ca35e048e40dbacd4926b": { "1344db208f73dc76c68bb5a882fbdde264c6a27beb40c33d6d5d97679b2e075e": { "jp": { - "updatedAt": "2025-11-26T07:24:12.257Z" + "updatedAt": "2025-11-27T09:09:00.070Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.257Z" + "updatedAt": "2025-11-27T09:09:00.071Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.257Z" + "updatedAt": "2025-11-27T09:09:00.071Z" } } }, "eedd808236db61e2b28ca3ea587227703d2be3b1ced3ffbe6e92ba89ef707e94": { "20f04dac4a93b0fdb3374aba9dc0994fdc280c6ebad124568bf3fd2f999185f8": { "jp": { - "updatedAt": "2025-11-26T07:24:12.246Z" + "updatedAt": "2025-11-27T09:09:00.038Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.237Z" + "updatedAt": "2025-11-27T09:08:59.999Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.246Z" + "updatedAt": "2025-11-27T09:09:00.038Z" } } }, "f2d5e46cdcc837e8872864afe7d6050b24a75248c1c3196bb56ddb850f613f07": { "cddb29e069eb3f550f6f7bfa2961bf6e582620eb41b7307ae5bd3772e689f84e": { "jp": { - "updatedAt": "2025-11-26T07:24:12.257Z" + "updatedAt": "2025-11-27T09:09:00.071Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.254Z" + "updatedAt": "2025-11-27T09:09:00.061Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.257Z" + "updatedAt": "2025-11-27T09:09:00.070Z" } } }, "0a266e9434955b7a5780b55d60d185b1415d0fd8e5d4cb62987b9e1c3fb89c14": { "05c826269672fe18a025b6ded559d602e729596931ba6edd67a7906cc60cdc26": { "jp": { - "updatedAt": "2025-11-26T07:24:12.261Z" + "updatedAt": "2025-11-27T09:09:00.086Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.261Z" + "updatedAt": "2025-11-27T09:09:00.086Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.259Z" + "updatedAt": "2025-11-27T09:09:00.080Z" } } }, "115c23898dca6a5bd85fc79980e071e10196e3e3295527809805baad03df1e8e": { "cc5d85e7940e700fd5d3f8fd7641a3e19d24a033b3c45b51595134cdc91659d3": { "jp": { - "updatedAt": "2025-11-26T07:24:12.263Z" + "updatedAt": "2025-11-27T09:09:00.092Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.261Z" + "updatedAt": "2025-11-27T09:09:00.086Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.262Z" + "updatedAt": "2025-11-27T09:09:00.090Z" } } }, "25fa138ccb807e454af6642c2ed448968e7de55919fd0d0a4ecb3f6e490a397c": { "ab68507bc825afafe53c6d1d0d6f08c53621f3a95a39deec3a4dad7ef103b2c6": { "jp": { - "updatedAt": "2025-11-26T07:24:12.255Z" + "updatedAt": "2025-11-27T09:09:00.064Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.256Z" + "updatedAt": "2025-11-27T09:09:00.068Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.255Z" + "updatedAt": "2025-11-27T09:09:00.066Z" } } }, "29098b8e3f1e1a679a5ddc94379ef95f05ce5d74ad32854eb1f4dbf472997cd8": { "a2fdefeb5c115c0929ae0f70cb0135e6ff4857188e411761888474889ae1edda": { "jp": { - "updatedAt": "2025-11-26T07:24:12.262Z" + "updatedAt": "2025-11-27T09:09:00.089Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.262Z" + "updatedAt": "2025-11-27T09:09:00.089Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.261Z" + "updatedAt": "2025-11-27T09:09:00.087Z" } } }, "2e279d80c8ba84fded6bc29580d38a57165294e3bb9ec5ac3177d8fa43594ce7": { "c32887dbd37129abcf60580789e56e42295b227409b866e8d6f639ccb4436f91": { "jp": { - "updatedAt": "2025-11-26T07:24:12.263Z" + "updatedAt": "2025-11-27T09:09:00.090Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.263Z" + "updatedAt": "2025-11-27T09:09:00.091Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.262Z" + "updatedAt": "2025-11-27T09:09:00.090Z" } } }, "509f6ede51ab34e339503f91928010a06f04655f9ae29650958c5b6768752931": { "b15b0f51d35014ff5faa6f96548eae990708c240d294f1b231da328da35a7588": { "jp": { - "updatedAt": "2025-11-26T07:24:12.252Z" + "updatedAt": "2025-11-27T09:09:00.055Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.251Z" + "updatedAt": "2025-11-27T09:09:00.053Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.251Z" + "updatedAt": "2025-11-27T09:09:00.052Z" } } }, "521e12e9546adbbc16980431e680a5ef21ea7b5b3b9b36afb8a2521aa6b377b6": { "6e547ac81c7773f9acb16ff8e8b7c7388a98727bfc4319c29909249791e4ec09": { "jp": { - "updatedAt": "2025-11-26T07:24:12.258Z" + "updatedAt": "2025-11-27T09:09:00.077Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.260Z" + "updatedAt": "2025-11-27T09:09:00.083Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.259Z" + "updatedAt": "2025-11-27T09:09:00.079Z" } } }, "543fafeba882f7e65ffa713c52cc503e06a45708cf5d17f53ac0462449accbf7": { "10b537976cc0e91e97a168611992f05f85e4ed7084a47e4cb1a2f920f41380ac": { "jp": { - "updatedAt": "2025-11-26T07:24:12.259Z" + "updatedAt": "2025-11-27T09:09:00.081Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.258Z" + "updatedAt": "2025-11-27T09:09:00.075Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.259Z" + "updatedAt": "2025-11-27T09:09:00.079Z" } } }, "700af028231b046bfc9ddd5cfa321b3be5e023aaaee235d4d7d86453223b3fdc": { "5feb43870c53151fcd38f8407b9a14613518ef335101c53aa526f6a23caac7ed": { "jp": { - "updatedAt": "2025-11-26T07:24:12.251Z" + "updatedAt": "2025-11-27T09:09:00.051Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.252Z" + "updatedAt": "2025-11-27T09:09:00.055Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.252Z" + "updatedAt": "2025-11-27T09:09:00.053Z" } } }, "7d89286b9deca9673424f7ef6646b56ff094fc99d83fea068c7a5b42f3b41f58": { "0cbe2538e6234e4c37b13a2b8892c989968a97ca42dd985663e6d7efb804eeb9": { "jp": { - "updatedAt": "2025-11-26T07:24:12.262Z" + "updatedAt": "2025-11-27T09:09:00.089Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.263Z" + "updatedAt": "2025-11-27T09:09:00.092Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.263Z" + "updatedAt": "2025-11-27T09:09:00.091Z" } } }, "7eb439b32a67cfb0aa3624c9184253dc089e7da15d7e10a23f668083dcbbdb63": { "d75745d1b46f0de5b2028a881660f2bd2ddadc7ddc0b54286beaca30e215e44f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.250Z" + "updatedAt": "2025-11-27T09:09:00.049Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.263Z" + "updatedAt": "2025-11-27T09:09:00.091Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.263Z" + "updatedAt": "2025-11-27T09:09:00.092Z" } } }, "8cd1456e58e9b0f32764599fe1b3c08b4549cd901e4ebe5d8ff994983ffb18dd": { "be2df94d3de1df0b087713bb38516d1a78f6b4313e8daf18309af45c6beb735b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.261Z" + "updatedAt": "2025-11-27T09:09:00.087Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.260Z" + "updatedAt": "2025-11-27T09:09:00.083Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.261Z" + "updatedAt": "2025-11-27T09:09:00.087Z" } } }, "8dbad11f22f37a8dfbe5928d8a4733fffad030ebf6032dcfecd084e9101dba52": { "f92ca8e97f1895ba9a62cdd9bd09b067b16fb3472cb748d5ec26c6d2830bdcc3": { "jp": { - "updatedAt": "2025-11-26T07:24:12.260Z" + "updatedAt": "2025-11-27T09:09:00.084Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.260Z" + "updatedAt": "2025-11-27T09:09:00.085Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.260Z" + "updatedAt": "2025-11-27T09:09:00.082Z" } } }, "9606738dfb47e926dbb72401f97fb8dcdca15e8e7e4c7c8e0b1de1923f128ebd": { "f38bca2728a4ec18acf3801a37e29bd6ce1663c505004c92a4ef0fb8bcfab83d": { "jp": { - "updatedAt": "2025-11-26T07:24:12.252Z" + "updatedAt": "2025-11-27T09:09:00.080Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.251Z" + "updatedAt": "2025-11-27T09:09:00.076Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.252Z" + "updatedAt": "2025-11-27T09:09:00.081Z" } } }, "9879a8ecb21ed941282ca62ac8cd46ca90a2e07bea45df3014931af580b18b1c": { "1cee6eed8b351ab527a9d9c859764f01e20c33109d8796baaf74d0bfe5e7498a": { "zh": { - "updatedAt": "2025-11-26T07:24:12.260Z" + "updatedAt": "2025-11-27T09:09:00.084Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.261Z" + "updatedAt": "2025-11-27T09:09:00.085Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.261Z" + "updatedAt": "2025-11-27T09:09:00.085Z" } } }, "9c64eb3f63ed2f4471f8cc3e3a16b5d6f44f4c39e15dce1c2c911d1a94e1a018": { "4af09e0c2db5842c3ba3437a58d8012e6ed6971aac46840180567463da4f8ce8": { "jp": { - "updatedAt": "2025-11-26T07:24:12.244Z" + "updatedAt": "2025-11-27T09:09:00.033Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.253Z" + "updatedAt": "2025-11-27T09:09:00.056Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.257Z" + "updatedAt": "2025-11-27T09:09:00.069Z" } } }, "a2fd395ad42270710df1127e0482607ea48ccfe81a62976bedb63b46c8ceb860": { "67cbbbbf1e4f7f85554eebfe9fb09a5afe145f060eefe6aed1c811dfc5891361": { "jp": { - "updatedAt": "2025-11-26T07:24:12.260Z" + "updatedAt": "2025-11-27T09:09:00.084Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.261Z" + "updatedAt": "2025-11-27T09:09:00.086Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.259Z" + "updatedAt": "2025-11-27T09:09:00.081Z" } } }, "aff3738ef426bb03f782516f0c962dc0d4f1e8b1e75422276233e8a61abcbbf9": { "62fbdd6dddf79ab74c534883a022557ea5c732ed713d1fc244291ba771204269": { "jp": { - "updatedAt": "2025-11-26T07:24:12.253Z" + "updatedAt": "2025-11-27T09:09:00.058Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.253Z" + "updatedAt": "2025-11-27T09:09:00.057Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.253Z" + "updatedAt": "2025-11-27T09:09:00.057Z" } } }, "c61ff854a1d65abf94d196412aea9f3db52e099f903e0aec1c8dbda684f0ee4c": { "6725d42405abcd2763e59c5af20b80e294c49a24e5dfded57358991054e676ae": { "jp": { - "updatedAt": "2025-11-26T07:24:12.260Z" + "updatedAt": "2025-11-27T09:09:00.082Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.258Z" + "updatedAt": "2025-11-27T09:09:00.075Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.250Z" + "updatedAt": "2025-11-27T09:09:00.049Z" } } }, "c85b0e977e47a5de069cf6bc2a4c3c7c368f637081c6c7a74c2b3f09f541da76": { "6a1875203c3c11a5ddaeaf844592c8aa66c906a5f10d8118af659f3188166f2b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.260Z" + "updatedAt": "2025-11-27T09:09:00.082Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.259Z" + "updatedAt": "2025-11-27T09:09:00.078Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.259Z" + "updatedAt": "2025-11-27T09:09:00.080Z" } } }, "cfcb155375b8c7dce0cd7951038c468106245eabdd22e87ceb685a86ad5787b1": { "4f1c6f9f3c784ede710c284000e57bbb2570ca34ccf377e55bb0aa62d9575fb3": { "jp": { - "updatedAt": "2025-11-26T07:24:12.263Z" + "updatedAt": "2025-11-27T09:09:00.091Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.262Z" + "updatedAt": "2025-11-27T09:09:00.088Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.261Z" + "updatedAt": "2025-11-27T09:09:00.086Z" } } }, "e771f00ee03a6b8ac3a2fe4466ecae0a0ef5fa4a1c06261040efd4c71c7df8ca": { "afaf81983280a59e7aa1584371969108a9f08bbf39abdc8489d3da2cc68c29c7": { "jp": { - "updatedAt": "2025-11-26T07:24:12.255Z" + "updatedAt": "2025-11-27T09:09:00.062Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.255Z" + "updatedAt": "2025-11-27T09:09:00.064Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.255Z" + "updatedAt": "2025-11-27T09:09:00.063Z" } } }, "003cc65643f9d9786893e0bde4fee0fde5fc25de83cb44c9b184c9f67f682330": { "7bfbb7c49650987bfda71358fcdb6c75e10f3775e57dd80dfa998cd9df1e42b1": { "ru": { - "updatedAt": "2025-11-26T07:24:19.082Z" + "updatedAt": "2025-11-27T09:09:00.101Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.084Z" + "updatedAt": "2025-11-27T09:09:00.105Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.258Z" + "updatedAt": "2025-11-27T09:09:00.074Z" } } }, "0bf287012c3e4a1823f4a6d9af97b4ff2ebf50382b88f6e446f2d2462ceff028": { "6fc59c979e71f5ef7d01dffb85d9c0d52f0f7d9af3f0d2364ea573c821dfb4a9": { "jp": { - "updatedAt": "2025-11-26T07:24:12.266Z" + "updatedAt": "2025-11-27T09:09:00.097Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.081Z" + "updatedAt": "2025-11-27T09:09:00.100Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.266Z" + "updatedAt": "2025-11-27T09:09:00.098Z" } } }, "12e31ec44b3dcf65828805450d562ba22004284c24e16fe91cc2a8306183626b": { "9894639ef964614d3ef8027f22a7deb78a5ccec89d41e007f288e7db21591494": { "jp": { - "updatedAt": "2025-11-26T07:24:19.082Z" + "updatedAt": "2025-11-27T09:09:00.100Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.083Z" + "updatedAt": "2025-11-27T09:09:00.104Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.266Z" + "updatedAt": "2025-11-27T09:09:00.098Z" } } }, "1a8c3dc523efbedd8ceca5a1bf0b315be2ac1dcf90f08530d461bd213eef4f7c": { "da9e17112c0ec79d1fa82ab5f0ca3db1c53729e70e3fd6a2c4370c03691b292c": { "jp": { - "updatedAt": "2025-11-26T07:24:19.082Z" + "updatedAt": "2025-11-27T09:09:00.102Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.083Z" + "updatedAt": "2025-11-27T09:09:00.103Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.081Z" + "updatedAt": "2025-11-27T09:09:00.100Z" } } }, "227d51f47fc957dea766831ea43b73c58c9e450c7aadba923fb55f27b830acd0": { "88ce0d6c08629f221dcfe109d7e8a09898443472a62411ee8e84cd0cd4e77851": { "jp": { - "updatedAt": "2025-11-26T07:24:19.081Z" + "updatedAt": "2025-11-27T09:09:00.098Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.265Z" + "updatedAt": "2025-11-27T09:09:00.096Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.080Z" + "updatedAt": "2025-11-27T09:09:00.098Z" } } }, "2788d1737d33b8bd86e0aa8f0dbd2c1bed226411e50160a1554ab9361f7532d2": { "d0cbc85c85d4d71c67952d11b3d238be8fc75b6ea16860b09935bd9f96add653": { "jp": { - "updatedAt": "2025-11-26T07:24:12.265Z" + "updatedAt": "2025-11-27T09:09:00.096Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.264Z" + "updatedAt": "2025-11-27T09:09:00.093Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.265Z" + "updatedAt": "2025-11-27T09:09:00.095Z" } } }, "3b065a4f3fc6b25a5184da43b7b0221b5aeccf7b81e1255bd8a6d2a6b86a8ae7": { "c88ae622109bfb3777e96a49c9bfa5f9889a8187d65d687676ef5de1bf070514": { "jp": { - "updatedAt": "2025-11-26T07:24:12.261Z" + "updatedAt": "2025-11-27T09:09:00.088Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.262Z" + "updatedAt": "2025-11-27T09:09:00.090Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.261Z" + "updatedAt": "2025-11-27T09:09:00.087Z" } } }, "3ffea18e4142d273a23435211934d60695e426723e88ea42a887c753673da12c": { "9135666001d3b0d949ff7db424b18a4b655d4b8eebcafa75a9e472d040fbb808": { "jp": { - "updatedAt": "2025-11-26T07:24:19.082Z" + "updatedAt": "2025-11-27T09:09:00.102Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.083Z" + "updatedAt": "2025-11-27T09:09:00.103Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.082Z" + "updatedAt": "2025-11-27T09:09:00.102Z" } } }, "6ae9dde7cd947f044ac422d9819b807221ad5825d4f6859ff2c72f3c22d7331f": { "f17b1d4769177c8b7b3260aff487e581de4450f37dd2fbeff3e0a899b7559706": { "jp": { - "updatedAt": "2025-11-26T07:24:12.265Z" + "updatedAt": "2025-11-27T09:09:00.095Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.081Z" + "updatedAt": "2025-11-27T09:09:00.098Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.081Z" + "updatedAt": "2025-11-27T09:09:00.099Z" } } }, "95219024ef9522a55be4e6513f75defbb49883b4a5e32a05d187bbbcc9f53c16": { "069a5c20a99f64397b1d13060b06470148c26b5072a36b8e1b16d746b0e4ad7f": { "jp": { - "updatedAt": "2025-11-26T07:24:19.081Z" + "updatedAt": "2025-11-27T09:09:00.099Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.258Z" + "updatedAt": "2025-11-27T09:09:00.073Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.265Z" + "updatedAt": "2025-11-27T09:09:00.095Z" } } }, "9829e6d504f03f89cf3f9782f9238f3dec6efd6d3810dd672ec15bd67e65f810": { "e59e26adb9705f2e6456ed1518f0aefb7d0cf0e3b13b040fa78b4a590a1181c2": { "jp": { - "updatedAt": "2025-11-26T07:24:12.265Z" + "updatedAt": "2025-11-27T09:09:00.094Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.265Z" + "updatedAt": "2025-11-27T09:09:00.095Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.265Z" + "updatedAt": "2025-11-27T09:09:00.095Z" } } }, "9f51461ed5499a8b1f450f23f773f55200d3922c76578fac080589c6d4bdb7c9": { "eaded5b9cc370f7c0893d58a270227dd93fe67bc1568a6b674bdee429e92ac10": { "jp": { - "updatedAt": "2025-11-26T07:24:19.081Z" + "updatedAt": "2025-11-27T09:09:00.099Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.266Z" + "updatedAt": "2025-11-27T09:09:00.097Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.082Z" + "updatedAt": "2025-11-27T09:09:00.101Z" } } }, "a4186d2152fae14c248c1297810d8ae84b17536d8f68513f586c1e2d378d79fa": { "da62d5ba1b9b52d86fdf52ef9a5a5fce77010670db44844630fe457d0a64dfda": { "jp": { - "updatedAt": "2025-11-26T07:24:12.266Z" + "updatedAt": "2025-11-27T09:09:00.097Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.265Z" + "updatedAt": "2025-11-27T09:09:00.097Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.081Z" + "updatedAt": "2025-11-27T09:09:00.100Z" } } }, "a98f06f78a3ec0f29bb4f078dbb0c37f77d01618cebf2733ff11b32c497f7b24": { "a9a69fd4a89753f57c102accc6affd4752db865e189ae4cc4e551815c20e9964": { "jp": { - "updatedAt": "2025-11-26T07:24:12.258Z" + "updatedAt": "2025-11-27T09:09:00.077Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.259Z" + "updatedAt": "2025-11-27T09:09:00.077Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.258Z" + "updatedAt": "2025-11-27T09:09:00.076Z" } } }, "b0f8d850504855a8481784c04ab4b0c0a35453e0ccfb3fd1251528b4f77a8b8f": { "0dbab51aa36f5b479c39c4f615a8a9b4493aeae6b1e482a4ccbb9064901d7f3b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.263Z" + "updatedAt": "2025-11-27T09:09:00.090Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.262Z" + "updatedAt": "2025-11-27T09:09:00.088Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.260Z" + "updatedAt": "2025-11-27T09:09:00.085Z" } } }, "b7f8c2c6c3c0d8cae21834a515d86c9ba6864e0aa9c968e945adf28aff1bd428": { "bbcd7ca2f8d136d5cdb1c28f0c53253dd6f2040d23646bfbb062d85161da4e08": { "jp": { - "updatedAt": "2025-11-26T07:24:19.084Z" + "updatedAt": "2025-11-27T09:09:00.106Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.083Z" + "updatedAt": "2025-11-27T09:09:00.103Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.262Z" + "updatedAt": "2025-11-27T09:09:00.102Z" } } }, "bc18991124499a7f66617eb5b243033498a2376e769bee9084fac4cef0b7c045": { "d62f4767bf6ec9661415c60e24e41a90ba047d383b9bfbb29a327253f604da58": { "jp": { - "updatedAt": "2025-11-26T07:24:12.264Z" + "updatedAt": "2025-11-27T09:09:00.094Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.265Z" + "updatedAt": "2025-11-27T09:09:00.094Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.264Z" + "updatedAt": "2025-11-27T09:09:00.093Z" } } }, "c23421b71aced0ac75a1f6d4e5a8b8ae239e457c02367e880b6d1a4ff7277e3a": { "4719e0b0aa1afb513dbea43054775d5c3e22f6638707c72a91d88a4237b487bb": { "jp": { - "updatedAt": "2025-11-26T07:24:12.264Z" + "updatedAt": "2025-11-27T09:09:00.107Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.264Z" + "updatedAt": "2025-11-27T09:09:00.106Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.262Z" + "updatedAt": "2025-11-27T09:09:00.089Z" } } }, "c621962c4e9a6c1f2dcb4ec8f98b33faa0d771e9aac97195014471b0f353099e": { "8e462b2a96c9f45baf5c523e8a97e3ffac3676c40724d42a9c5109d5413a54bd": { "jp": { - "updatedAt": "2025-11-26T07:24:19.082Z" + "updatedAt": "2025-11-27T09:09:00.101Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.081Z" + "updatedAt": "2025-11-27T09:09:00.099Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.081Z" + "updatedAt": "2025-11-27T09:09:00.100Z" } } }, "c6addfcf4c2f183d0885f78b6bee455eb175ed28099b76df7d58a87ff79c231e": { "0bdad070e3c15637e1941843f067e2a8ab54f34932a6197c4b57662a1ab08586": { "jp": { - "updatedAt": "2025-11-26T07:24:12.259Z" + "updatedAt": "2025-11-27T09:09:00.078Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.259Z" + "updatedAt": "2025-11-27T09:09:00.081Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.258Z" + "updatedAt": "2025-11-27T09:09:00.076Z" } } }, "d0a117042cd54d2d897e9ff128bb30722802674d738351bc727ad6a48d97c13a": { "ef198e4984503045b3061df3df5083cc081e20ea251352bf6175ea0983742b28": { "jp": { - "updatedAt": "2025-11-26T07:24:12.250Z" + "updatedAt": "2025-11-27T09:09:00.050Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.260Z" + "updatedAt": "2025-11-27T09:09:00.084Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.260Z" + "updatedAt": "2025-11-27T09:09:00.085Z" } } }, "216d22e459b5339d73b5e5f5efd10ba0d324035b56ffd8c09aca8ff6053e5be7": { "4347cf6fe8d3643c0bc778bc6d6e1a2d7728b22b55e566913fa8326c720d6e54": { "jp": { - "updatedAt": "2025-11-26T07:24:19.088Z" + "updatedAt": "2025-11-27T09:09:00.120Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.084Z" + "updatedAt": "2025-11-27T09:09:00.107Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.264Z" + "updatedAt": "2025-11-27T09:09:00.092Z" } } }, "2f2c64962247267011454aad885684dd07f5230293d18c996004e9a086a48a9e": { "de25513083b27abcf3a1ed0793d26139ab348f9ddbadba05a87914373d86d034": { "jp": { - "updatedAt": "2025-11-26T07:24:12.265Z" + "updatedAt": "2025-11-27T09:09:00.096Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.265Z" + "updatedAt": "2025-11-27T09:09:00.094Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.266Z" + "updatedAt": "2025-11-27T09:09:00.097Z" } } }, "3b502bb7173f6131431ad8322b576ef99ef5e91d3612beb68e0f4ce3b6053bf9": { "c7797285e4835ab50d34203593f5308bddaddec5d13f14f4f6d7be4be2239eb6": { "jp": { - "updatedAt": "2025-11-26T07:24:19.087Z" + "updatedAt": "2025-11-27T09:09:00.118Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.265Z" + "updatedAt": "2025-11-27T09:09:00.118Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.081Z" + "updatedAt": "2025-11-27T09:09:00.121Z" } } }, "3c55f6319b00bb5e571612e6f740d049975d5c3de127e0de80d0f34889dd8b12": { "08f719dba95186bb05f8277899abf3443e7cc9fca51a32ba8727dadf82c77879": { "jp": { - "updatedAt": "2025-11-26T07:24:19.086Z" + "updatedAt": "2025-11-27T09:09:00.114Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.086Z" + "updatedAt": "2025-11-27T09:09:00.115Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.086Z" + "updatedAt": "2025-11-27T09:09:00.114Z" } } }, "40ddf7122cbd5708445d09282a9aaaa01b51f15847138bd583939c6bee63c5a8": { "1efde3a11aa977a804768bd9d231b648a793e9638453375585e0f62486abe9f9": { "jp": { - "updatedAt": "2025-11-26T07:24:12.264Z" + "updatedAt": "2025-11-27T09:09:00.093Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.264Z" + "updatedAt": "2025-11-27T09:09:00.094Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.266Z" + "updatedAt": "2025-11-27T09:09:00.097Z" } } }, "44e6428941aba89bd0fd45e401717504047bf2582288d528651664c68b5860ef": { "3dfaa8d64c4eec1438f9e2fdcdf95885e290daa7a1d6f9280e7587fbde343224": { "jp": { - "updatedAt": "2025-11-26T07:24:19.082Z" + "updatedAt": "2025-11-27T09:09:00.122Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.083Z" + "updatedAt": "2025-11-27T09:09:00.104Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.083Z" + "updatedAt": "2025-11-27T09:09:00.104Z" } } }, "5034a9cab8d174bbba4fcce036fa29d5dc6bfa365274ed3cc44a0e5ff13c4738": { "c73720aff6e3013b19ca923ea6650c5399c7cce59157340fcac3ecb68f255f4b": { "jp": { - "updatedAt": "2025-11-26T07:24:19.088Z" + "updatedAt": "2025-11-27T09:09:00.119Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.264Z" + "updatedAt": "2025-11-27T09:09:00.092Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.090Z" + "updatedAt": "2025-11-27T09:09:00.130Z" } } }, "541698242c872ea29127fc2dfe64cbea8b6e3ad3471aea2ac19011a37d71e754": { "08b7c30758e175cbf2a1d09a301193f88562d6e7ab18b078ab6c4b805b81620d": { "jp": { - "updatedAt": "2025-11-26T07:24:19.084Z" + "updatedAt": "2025-11-27T09:09:00.106Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.083Z" + "updatedAt": "2025-11-27T09:09:00.105Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.083Z" + "updatedAt": "2025-11-27T09:09:00.105Z" } } }, "67199cb0b07db7b73e9d48c3856e7a80fa64a401ac9356f38dd56f0ef6af4f87": { "2a193532f966a6fea5015f9758bc034a7cbdfaf8b91c7431fdbc29b0d020b9e8": { "jp": { - "updatedAt": "2025-11-26T07:24:19.081Z" + "updatedAt": "2025-11-27T09:09:00.099Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.082Z" + "updatedAt": "2025-11-27T09:09:00.101Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.083Z" + "updatedAt": "2025-11-27T09:09:00.104Z" } } }, "74f8cb35854e4cf151ab34a6587a3b0c76868a99d06b7a1b7eb88bfdd101dcc2": { "9431057902d3a29dbfbbd44c8cc88c4dd2b703331d32f31fe7eab5675d5d047c": { "jp": { - "updatedAt": "2025-11-26T07:24:19.087Z" + "updatedAt": "2025-11-27T09:09:00.118Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.087Z" + "updatedAt": "2025-11-27T09:09:00.117Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.087Z" + "updatedAt": "2025-11-27T09:09:00.117Z" } } }, "7e0dc4543c81b33bb19b9b0222c533c95884214b5877d7ed6c08d6101f73935f": { "4d2ea53c6c8b773cda0b23778f9e67b35379e9de8b35e7412e470060aa209fbe": { "jp": { - "updatedAt": "2025-11-26T07:24:19.087Z" + "updatedAt": "2025-11-27T09:09:00.116Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.085Z" + "updatedAt": "2025-11-27T09:09:00.110Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.087Z" + "updatedAt": "2025-11-27T09:09:00.119Z" } } }, "885b5d789ebf32a2edb92bc498ab9f2e881afed86ef284b4892ee15109bb1321": { "b7053e1130cf6901ba2d93962cfe71528955b54a3427effb3f8dd0cb63a10854": { "jp": { - "updatedAt": "2025-11-26T07:24:19.086Z" + "updatedAt": "2025-11-27T09:09:00.115Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.087Z" + "updatedAt": "2025-11-27T09:09:00.116Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.086Z" + "updatedAt": "2025-11-27T09:09:00.115Z" } } }, "8c4025d67d4f83f1787b2935a24ca235fcca456bc7505ac9ac478e5351ad8297": { "3cdb2c61028a51f468d7e958cbdb00bd91b81a31123aacd0a6e4c0f676f159fc": { "jp": { - "updatedAt": "2025-11-26T07:24:19.087Z" + "updatedAt": "2025-11-27T09:09:00.116Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.084Z" + "updatedAt": "2025-11-27T09:09:00.107Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.088Z" + "updatedAt": "2025-11-27T09:09:00.119Z" } } }, "9f2ad018997a5b2a59f6bb176b61937bfa9cd7e81143b53306fe58e2c41400f8": { "79e16644830172d488a3acf805a5b9fe0f8b79fdbba1afe39d5495d561479ee9": { "jp": { - "updatedAt": "2025-11-26T07:24:19.090Z" + "updatedAt": "2025-11-27T09:09:00.132Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.089Z" + "updatedAt": "2025-11-27T09:09:00.121Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.085Z" + "updatedAt": "2025-11-27T09:09:00.110Z" } } }, "b2c15bf0de452ad7ec7d6015900f40d41f66f8080e473ae5d92a9e398fdedca0": { "a7e5cb05a26913f4d5d6b8e23e33097010b909a91fbc9015096bd23deb3ef019": { "jp": { - "updatedAt": "2025-11-26T07:24:19.089Z" + "updatedAt": "2025-11-27T09:09:00.123Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.089Z" + "updatedAt": "2025-11-27T09:09:00.121Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.088Z" + "updatedAt": "2025-11-27T09:09:00.120Z" } } }, "bda6feaa2f751d257d0e9bb7488f846a2998fca7dedddf3b4830683849ba2b58": { "2afea7889acf8ea5044a0d33842f100ab65c6cb7f1df295cd1f21f7e129776fe": { "jp": { - "updatedAt": "2025-11-26T07:24:19.088Z" + "updatedAt": "2025-11-27T09:09:00.119Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.087Z" + "updatedAt": "2025-11-27T09:09:00.118Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.085Z" + "updatedAt": "2025-11-27T09:09:00.112Z" } } }, "d032d67a58a6623fab2b1b66938ad265d806211c7e670b710006fa88c0fa60d9": { "4c0a1b6590854c3a88fa162f08d4611049c85780870affbf3d49f61a3e412fae": { "jp": { - "updatedAt": "2025-11-26T07:24:19.086Z" + "updatedAt": "2025-11-27T09:09:00.115Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.086Z" + "updatedAt": "2025-11-27T09:09:00.115Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.086Z" + "updatedAt": "2025-11-27T09:09:00.114Z" } } }, "db88afafa5d929b34cdf925862a67b324309a0e6c76686a5ccfde2ba82d5226c": { "e4a92a198d90a6cd53c04928fa4fb9c381359603f0c986e9d59a15fa39407592": { "jp": { - "updatedAt": "2025-11-26T07:24:19.090Z" + "updatedAt": "2025-11-27T09:09:00.130Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.089Z" + "updatedAt": "2025-11-27T09:09:00.123Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.089Z" + "updatedAt": "2025-11-27T09:09:00.122Z" } } }, "e18abf4c56dbe146fa998f9070622acba484b5011490469cab0c1e16bc156647": { "58bb991322769280e6d10291b76e02c6a2e7231dc177a9f01f4c729dbe75cc7e": { "jp": { - "updatedAt": "2025-11-26T07:24:19.090Z" + "updatedAt": "2025-11-27T09:09:00.133Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.090Z" + "updatedAt": "2025-11-27T09:09:00.131Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.088Z" + "updatedAt": "2025-11-27T09:09:00.120Z" } } }, "e5455b8e71ca0240dbae9ace48f312b2859517718c9b5597790152f5c5e4c55e": { "70f5e4c518ecfa04a597a86630bfa6b7c13859702dbefa84f43a08c628bb9c6e": { "jp": { - "updatedAt": "2025-11-26T07:24:19.086Z" + "updatedAt": "2025-11-27T09:09:00.116Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.084Z" + "updatedAt": "2025-11-27T09:09:00.108Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.088Z" + "updatedAt": "2025-11-27T09:09:00.120Z" } } }, "f0b04860378a97e43a484e7cfff527be98a82a04b75ec9ff8b95b88bfe017c21": { "4d6e6128d8cb69272312bc10969428b2d7ec14e93843e97641bd6ee1b539f104": { "jp": { - "updatedAt": "2025-11-26T07:24:19.084Z" + "updatedAt": "2025-11-27T09:09:00.105Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.258Z" + "updatedAt": "2025-11-27T09:09:00.074Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.083Z" + "updatedAt": "2025-11-27T09:09:00.103Z" } } }, "0f826dda16a017686da9cd258a7b36a8a0fa9bf0906faf288ac5dc07e8293c8b": { "7e91c488285e13a646cf4e0be8efc95cc3461d1b565495878e5ce6df5241454f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.270Z" + "updatedAt": "2025-11-27T09:09:00.141Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.270Z" + "updatedAt": "2025-11-27T09:09:00.140Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.270Z" + "updatedAt": "2025-11-27T09:09:00.142Z" } } }, "19d39d202840e88cd6155f2716118be469f38e1c294287f77b535f73052a335f": { "b04b8c8d1915a6a483b4461dc1983e8dc5b3c4131b3c513c2098e3306d1cf01d": { "jp": { - "updatedAt": "2025-11-26T07:24:12.271Z" + "updatedAt": "2025-11-27T09:09:00.144Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.272Z" + "updatedAt": "2025-11-27T09:09:00.145Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.271Z" + "updatedAt": "2025-11-27T09:09:00.144Z" } } }, "20547e4692854c30843291c8c4b85cbaaa2473154a503ada089b47a286e119c6": { "add80eef63fea1cd539d2ca896319743cd0debee7952a9062ff15a5bac9cc978": { "jp": { - "updatedAt": "2025-11-26T07:24:12.273Z" + "updatedAt": "2025-11-27T09:09:00.148Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.273Z" + "updatedAt": "2025-11-27T09:09:00.148Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.267Z" + "updatedAt": "2025-11-27T09:09:00.134Z" } } }, "3f80767faa69da876f277f16dd9152d0f1e8aba3db884130fa4c7ea029eb17e1": { "c8ca096e88fcce6dd3218a70cf039d6d7d8ebfe91be1b6c3b85f141fdc1feac1": { "jp": { - "updatedAt": "2025-11-26T07:24:12.269Z" + "updatedAt": "2025-11-27T09:09:00.139Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.270Z" + "updatedAt": "2025-11-27T09:09:00.142Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.270Z" + "updatedAt": "2025-11-27T09:09:00.140Z" } } }, "4d30111f145343ad89c67951b74bc9c73865620ef3245a428535e3f9bbef259c": { "db4eae957950b7ac6455d1dc6679f4c64802f86d27f4184e0393be153c8bd7a0": { "jp": { - "updatedAt": "2025-11-26T07:24:12.264Z" + "updatedAt": "2025-11-27T09:09:00.093Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.089Z" + "updatedAt": "2025-11-27T09:09:00.130Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.088Z" + "updatedAt": "2025-11-27T09:09:00.119Z" } } }, "4f944066028f36b0a6f28232fe75a6ebde995b969ebfd8a3c379cd645f0ff366": { "8ded3d0fa9f33ae122022672fd02b631471b5177e76c368607b554bbb3efce22": { "jp": { - "updatedAt": "2025-11-26T07:24:19.089Z" + "updatedAt": "2025-11-27T09:09:00.122Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.085Z" + "updatedAt": "2025-11-27T09:09:00.113Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.090Z" + "updatedAt": "2025-11-27T09:09:00.132Z" } } }, "74dcbdc993f03875931c0ef548e27e0ecdd4c39c4c084edc6eaf3237a562817e": { "a9ecf8d346bd106208732038ad37c4f2b9861186a25aead51cc7057a47bf2cd5": { "jp": { - "updatedAt": "2025-11-26T07:24:12.271Z" + "updatedAt": "2025-11-27T09:09:00.142Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.270Z" + "updatedAt": "2025-11-27T09:09:00.142Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.272Z" + "updatedAt": "2025-11-27T09:09:00.147Z" } } }, "7ab7a6fd8e115253049873f3b8e272c6c530d1d56d469dbf4d074ab0bc3ae8c5": { "c86ec8922020d2cf9ee2017859793ec04fb19507a65cfb98dd21a9cd2dc99ca5": { "jp": { - "updatedAt": "2025-11-26T07:24:19.084Z" + "updatedAt": "2025-11-27T09:09:00.109Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.090Z" + "updatedAt": "2025-11-27T09:09:00.131Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.090Z" + "updatedAt": "2025-11-27T09:09:00.131Z" } } }, "7ecc3a4ce272f64e4527753ebb952d46d33a160afd6add3fc9a4a9b08d7fae1c": { "ffe09564c5075a69993bd16153054a5cfba44517a2680e60b50e4b87f0a5b83e": { "jp": { - "updatedAt": "2025-11-26T07:24:12.272Z" + "updatedAt": "2025-11-27T09:09:00.146Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.272Z" + "updatedAt": "2025-11-27T09:09:00.147Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.267Z" + "updatedAt": "2025-11-27T09:09:00.135Z" } } }, "7ef33beb95b850b8400aad8ded966f28fd1eb3b61c5de7974983f2270d2b4f7c": { "501d9df3106342436670302f74dd2270b110ee24da435123cc0a1b51633a2284": { "zh": { - "updatedAt": "2025-11-26T07:24:12.268Z" + "updatedAt": "2025-11-27T09:09:00.136Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.269Z" + "updatedAt": "2025-11-27T09:09:00.139Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.269Z" + "updatedAt": "2025-11-27T09:09:00.137Z" } } }, "81154bce9be97a0fc523001b189f4c093458747ff4e9b7f5cdecde64d9163d22": { "126e1bba0f10751cf028401cc1a0f3a944780e4a87fe9b63fb850c58b7d7510d": { "jp": { - "updatedAt": "2025-11-26T07:24:12.272Z" + "updatedAt": "2025-11-27T09:09:00.146Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.272Z" + "updatedAt": "2025-11-27T09:09:00.145Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.266Z" + "updatedAt": "2025-11-27T09:09:00.133Z" } } }, "88d029b112f5fca5e4ba3d06b8c35a6d55e5b557663ed600c6f1b98f59f8ae20": { "1393aaf825d4dab45a6acc1ac4db09d138970e7008f8c78dc434242141a483ba": { "jp": { - "updatedAt": "2025-11-26T07:24:12.270Z" + "updatedAt": "2025-11-27T09:09:00.141Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.269Z" + "updatedAt": "2025-11-27T09:09:00.140Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.270Z" + "updatedAt": "2025-11-27T09:09:00.141Z" } } }, "9831e429c5ccebdd733e3a8b6a49aa6100e584ba3fd39122b79e1a3df27a2feb": { "bde8f222c01ce8541efa7b5346611e02d7e5b13f92c827e80068ede72769e0c5": { "jp": { - "updatedAt": "2025-11-26T07:24:19.084Z" + "updatedAt": "2025-11-27T09:09:00.109Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.085Z" + "updatedAt": "2025-11-27T09:09:00.112Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.090Z" + "updatedAt": "2025-11-27T09:09:00.132Z" } } }, "9b041aa508f2046ee0a4f84858531b8c2507bb6a6989db886c2dd4ea0c11a002": { "23dc86ecd0cc50924f5ea02d06b16b4e395c8e0f2fd73bd76d547ac864d42f36": { "jp": { - "updatedAt": "2025-11-26T07:24:12.270Z" + "updatedAt": "2025-11-27T09:09:00.140Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.272Z" + "updatedAt": "2025-11-27T09:09:00.146Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.269Z" + "updatedAt": "2025-11-27T09:09:00.139Z" } } }, "9fdb709a96f96fb011d844ca13cda88bb361212284a327821501551223a4aa9c": { "064e508fcc9e28910cd94c862392084ac9bfbb28d99941ea8a6c7bf60aa11b79": { "jp": { - "updatedAt": "2025-11-26T07:24:12.267Z" + "updatedAt": "2025-11-27T09:09:00.134Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.271Z" + "updatedAt": "2025-11-27T09:09:00.143Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.271Z" + "updatedAt": "2025-11-27T09:09:00.143Z" } } }, "a08c904ab61d1c76fa622a160e0956711547c3a01e8aa50f73e5c58504c9110b": { "65bcd1c2b5d5887e042c81d6e5c21fc2a0db88c65574a53d172b1f40ae25058e": { "jp": { - "updatedAt": "2025-11-26T07:24:19.087Z" + "updatedAt": "2025-11-27T09:09:00.117Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.086Z" + "updatedAt": "2025-11-27T09:09:00.116Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.087Z" + "updatedAt": "2025-11-27T09:09:00.117Z" } } }, "acceced538fb290e4499cdbefd4179c4f4d347c0ccfd60840e8eedd522602b6b": { "124022bd2cc51265ce8f1c49ed73363724b1580a4bbe5d35e3c5d6d9b2bb7c01": { "jp": { - "updatedAt": "2025-11-26T07:24:12.273Z" + "updatedAt": "2025-11-27T09:09:00.149Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.273Z" + "updatedAt": "2025-11-27T09:09:00.149Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.273Z" + "updatedAt": "2025-11-27T09:09:00.148Z" } } }, "aeecbc80fabcf65b76af1cc65dd769022e4856381588c8501d1a59b206c10326": { "0ce14d2631d2a24f63a66e4f8b06f82fee405f818a0bcf369ea6485c8ba72681": { "jp": { - "updatedAt": "2025-11-26T07:24:19.085Z" + "updatedAt": "2025-11-27T09:09:00.111Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.273Z" + "updatedAt": "2025-11-27T09:09:00.148Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.267Z" + "updatedAt": "2025-11-27T09:09:00.134Z" } } }, "b5543674ee59dc5d80ec783390644aa03c6a1b7c91bbff001eda92fd5198a064": { "dce1dfac5e498639b6f080315eaf0ea6f42c51bef46d3fb13e621234a36cb996": { "jp": { - "updatedAt": "2025-11-26T07:24:12.272Z" + "updatedAt": "2025-11-27T09:09:00.146Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.271Z" + "updatedAt": "2025-11-27T09:09:00.144Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.271Z" + "updatedAt": "2025-11-27T09:09:00.144Z" } } }, "e6ce65cbfbbe441fc30cf64ab1c1d1dbe1699d91ca18dfbe615e4a83da7007bb": { "366a43842989bf6846e76c26bbf2e87e00bcb25564dfb7941a416bb6c279a332": { "jp": { - "updatedAt": "2025-11-26T07:24:12.271Z" + "updatedAt": "2025-11-27T09:09:00.145Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.271Z" + "updatedAt": "2025-11-27T09:09:00.143Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.271Z" + "updatedAt": "2025-11-27T09:09:00.143Z" } } }, "e8bf7b4871a3b921003161fbe9fb3b3e0df205638abb6aa707688886621c9715": { "15aca606b9aecbf11a3de4acfdee9f33ff548522f3411df807128a214f52bae1": { "jp": { - "updatedAt": "2025-11-26T07:24:19.085Z" + "updatedAt": "2025-11-27T09:09:00.113Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.089Z" + "updatedAt": "2025-11-27T09:09:00.121Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.089Z" + "updatedAt": "2025-11-27T09:09:00.122Z" } } }, "e90559dea9545d48d4ab67dc41647c74245d5af3f7450472a6a52017b58aaa6e": { "a15b882337784575046360aea947e55fbbbf97d76e32f32fb9e275a833afb47f": { "jp": { - "updatedAt": "2025-11-26T07:24:19.088Z" + "updatedAt": "2025-11-27T09:09:00.143Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.088Z" + "updatedAt": "2025-11-27T09:09:00.145Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.087Z" + "updatedAt": "2025-11-27T09:09:00.141Z" } } }, "0b209462f1ec411886fda57e810cd3eea5efebe202ca2b4f5dc9f1fb3787ccfb": { "5ecfaa73c3cc92aee3ee2825b0bb89bc857721cc0ed52b56af3b10a539b65498": { "jp": { - "updatedAt": "2025-11-26T07:24:12.269Z" + "updatedAt": "2025-11-27T09:09:00.159Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.269Z" + "updatedAt": "2025-11-27T09:09:00.160Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.269Z" + "updatedAt": "2025-11-27T09:09:00.138Z" } } }, "1d14e004d487902f18fc6c1de04f1ef911152e4d8c2d76455e4956d9cccd132b": { "435800632f77c2f3a43f62396007c869bf0e3310b946c504cec9c7661f101c78": { "jp": { - "updatedAt": "2025-11-26T07:24:12.273Z" + "updatedAt": "2025-11-27T09:09:00.147Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.266Z" + "updatedAt": "2025-11-27T09:09:00.133Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.266Z" + "updatedAt": "2025-11-27T09:09:00.133Z" } } }, "30cf7268ead1225c4a5df7a64fa02d87949b29677780ab8bce4abfe82c42f29a": { "279eb946f79782ab2e8f6e23256ddd3224d1fa15de3a0be112ac3c94bc4312e6": { "jp": { - "updatedAt": "2025-11-26T07:24:12.274Z" + "updatedAt": "2025-11-27T09:09:00.150Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.275Z" + "updatedAt": "2025-11-27T09:09:00.152Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.276Z" + "updatedAt": "2025-11-27T09:09:00.154Z" } } }, "3429435d33feb194cd2815db45da2e05b63eefb419c7039d15215e40384643ba": { "918e8abb0c6066b88bb4b0bdf464c3907f836aae0d601ee87bc91ad879720c8f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.277Z" + "updatedAt": "2025-11-27T09:09:00.157Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.277Z" + "updatedAt": "2025-11-27T09:09:00.156Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.276Z" + "updatedAt": "2025-11-27T09:09:00.154Z" } } }, "3fdff0c8c92ebbc95447e7244075da88510e0c3d4966e3b72af95a6e4c3d8e8f": { "1e45c8cfbc59d4c2fd364a34eb2e7afffd36ea4f0b127f873065e2b176a0133c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.280Z" + "updatedAt": "2025-11-27T09:09:00.164Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.279Z" + "updatedAt": "2025-11-27T09:09:00.162Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.280Z" + "updatedAt": "2025-11-27T09:09:00.163Z" } } }, "4ff60f576a90647ac6859ba05f56e594f54029ca4beea54b1e07f27ee5acfc94": { "b991af90c327a458792ab1640e608a8704cbde6a6f1373636c3d4a5c3445b766": { "jp": { - "updatedAt": "2025-11-26T07:24:12.269Z" + "updatedAt": "2025-11-27T09:09:00.138Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.268Z" + "updatedAt": "2025-11-27T09:09:00.137Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.269Z" + "updatedAt": "2025-11-27T09:09:00.138Z" } } }, "5063b2b4bc9b2899fab5998a2b281df0229add76ce268451423a1dfd2ffa5f2c": { "d2af9085fbf80701266de277a6a67f2400d823b5ac0d2ee3f5ffb2eb0b4f0294": { "jp": { - "updatedAt": "2025-11-26T07:24:12.278Z" + "updatedAt": "2025-11-27T09:09:00.160Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.278Z" + "updatedAt": "2025-11-27T09:09:00.159Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.278Z" + "updatedAt": "2025-11-27T09:09:00.160Z" } } }, "53e5bb2209c16605d7273edd1079563619f7fd4e6e5bdfdb95988af1a4694755": { "19b750db7b91f72b4f9666d5cd502557bfaf69581d6fb96105e239e437635657": { "jp": { - "updatedAt": "2025-11-26T07:24:12.278Z" + "updatedAt": "2025-11-27T09:09:00.161Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.279Z" + "updatedAt": "2025-11-27T09:09:00.163Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.279Z" + "updatedAt": "2025-11-27T09:09:00.162Z" } } }, @@ -8849,130 +8893,130 @@ "611b2b0d02709490f3fe4e3331bd31828428e661cdc38d633fd487daabd3cc1c": { "cb8d66eeaa9869bc4e4a0832238beb5e4b8cc2ffa0e3483678d79606c472c326": { "jp": { - "updatedAt": "2025-11-26T07:24:12.276Z" + "updatedAt": "2025-11-27T09:09:00.155Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.276Z" + "updatedAt": "2025-11-27T09:09:00.156Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.276Z" + "updatedAt": "2025-11-27T09:09:00.156Z" } } }, "633a4ffa471ca2244e6ef5a3022d6a46f51861f23239b9b4594d8cac210cc0b0": { "011445c96b51faadcc04ca2af74b4a9de574446918a704bcb7648036f25d38a7": { "jp": { - "updatedAt": "2025-11-26T07:24:12.279Z" + "updatedAt": "2025-11-27T09:09:00.162Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.279Z" + "updatedAt": "2025-11-27T09:09:00.162Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.279Z" + "updatedAt": "2025-11-27T09:09:00.163Z" } } }, "675843b51c582122de910ed4f222f211176c97af172b7f849c0b8ecd0dd2b190": { "a27dbf65b4c9c2e9891bbf450b7163614f6940254a6ad1c1db78fd18c3795fe7": { "jp": { - "updatedAt": "2025-11-26T07:24:12.277Z" + "updatedAt": "2025-11-27T09:09:00.158Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.275Z" + "updatedAt": "2025-11-27T09:09:00.152Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.276Z" + "updatedAt": "2025-11-27T09:09:00.155Z" } } }, "798d0e3eca2e56d6aa7658d85b9a41657e3aacf854913976ea97d89d8865966a": { "767118d90c94b77855b18cc08229cfbb4dd47ceb560ee656c0882c9192c24418": { "jp": { - "updatedAt": "2025-11-26T07:24:12.278Z" + "updatedAt": "2025-11-27T09:09:00.159Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.278Z" + "updatedAt": "2025-11-27T09:09:00.160Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.278Z" + "updatedAt": "2025-11-27T09:09:00.161Z" } } }, "858c3c5ed9eef8bbc65ab6bd6d04421cdd9d8ffdc620d1e8becc8e78f8cc2970": { "272ee010337aa027090ddbeff208e3a6d597280101959048ceb7f7a899d361b9": { "jp": { - "updatedAt": "2025-11-26T07:24:12.274Z" + "updatedAt": "2025-11-27T09:09:00.151Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.275Z" + "updatedAt": "2025-11-27T09:09:00.153Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.268Z" + "updatedAt": "2025-11-27T09:09:00.136Z" } } }, "991e27fab22b52bb4b08b4ae04fdec89d5e6553dc7110f7d24b73408fff315c1": { "a03618c42cb58f95e7e03a4057880d077e66e088f5502749a604eaca3e70f464": { "jp": { - "updatedAt": "2025-11-26T07:24:12.278Z" + "updatedAt": "2025-11-27T09:09:00.161Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.278Z" + "updatedAt": "2025-11-27T09:09:00.159Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.278Z" + "updatedAt": "2025-11-27T09:09:00.161Z" } } }, "a6b9d4c5cae0464959192ad659ed2100cebdeb8bc49e4c041d80a9c6a804808b": { "e888d9f5660cbc8a94390f0efc75e38b61355c7aed5b560ba7c55138aa191993": { "jp": { - "updatedAt": "2025-11-26T07:24:12.273Z" + "updatedAt": "2025-11-27T09:09:00.149Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.268Z" + "updatedAt": "2025-11-27T09:09:00.135Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.268Z" + "updatedAt": "2025-11-27T09:09:00.136Z" } } }, "b7a5608a851a55f00f22ae8d517987b946c9c3eb543370562dc786dab3594714": { "88a876337f46351c9ccac93457f33dc4fb23d9aab3760cae91e020811ac6f19e": { "jp": { - "updatedAt": "2025-11-26T07:24:12.279Z" + "updatedAt": "2025-11-27T09:09:00.162Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.279Z" + "updatedAt": "2025-11-27T09:09:00.161Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.272Z" + "updatedAt": "2025-11-27T09:09:00.164Z" } } }, "d9b29cc47744c8dbd75014c191b2d1b6a6cbd834e8f58800d7ab54ee3b380193": { "790a9a7598eac524933e6837e62602bb54c548d8cae162ec8f67203a8285580a": { "jp": { - "updatedAt": "2025-11-26T07:24:12.277Z" + "updatedAt": "2025-11-27T09:09:00.157Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.275Z" + "updatedAt": "2025-11-27T09:09:00.153Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.275Z" + "updatedAt": "2025-11-27T09:09:00.153Z" } } }, "ec3ea94f6a821f3d66e7dc9993bc4fc2b65580f3ce729e89dc7d1d6e9711078e": { "078157aa36205afa5c6e11fa8f7457d8696fb79062fc79c709121c33ed2a7d52": { "jp": { - "updatedAt": "2025-11-26T07:24:12.279Z" + "updatedAt": "2025-11-27T09:09:00.163Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.280Z" + "updatedAt": "2025-11-27T09:09:00.164Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.279Z" + "updatedAt": "2025-11-27T09:09:00.163Z" } } }, @@ -8990,1339 +9034,1339 @@ }, "97e44c5927e52bd9073aef11610c839f64450b48880fbf9a450f43177e163506": { "ru": { - "updatedAt": "2025-11-26T07:24:12.275Z" + "updatedAt": "2025-11-27T09:09:00.153Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.275Z" + "updatedAt": "2025-11-27T09:09:00.152Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.274Z" + "updatedAt": "2025-11-27T09:09:00.151Z" } } }, "f62c32cc2359a74d04c720f97feb4119997308d7027c0a473d0878ff90a711e1": { "8bc8554c77b98b4cb1507facebf9be6cda0cbb901ca29360d32136bfd62407a6": { "ru": { - "updatedAt": "2025-11-26T07:24:12.275Z" + "updatedAt": "2025-11-27T09:09:00.152Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.274Z" + "updatedAt": "2025-11-27T09:09:00.150Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.274Z" + "updatedAt": "2025-11-27T09:09:00.150Z" } } }, "0788f71f3701d95084837950d519aaf717087552402cd82dfcf4236628f15af7": { "1840d9cc80dd9c8c8cc0209074557de0b8c1bf9c2ca33bff6ab6effea03e9a16": { "jp": { - "updatedAt": "2025-11-26T07:24:12.280Z" + "updatedAt": "2025-11-27T09:09:00.166Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.280Z" + "updatedAt": "2025-11-27T09:09:00.165Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.280Z" + "updatedAt": "2025-11-27T09:09:00.165Z" } } }, "0a5e03fdd60d6da9d1347b2bf3d6f54bfc297dac14108de9809e6b2bf3665be6": { "21ae110d91d8fdefc2b7d4393674825fad68899404deb0a78de5c902d700b719": { "jp": { - "updatedAt": "2025-11-26T07:24:12.283Z" + "updatedAt": "2025-11-27T09:09:00.170Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.284Z" + "updatedAt": "2025-11-27T09:09:00.174Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.282Z" + "updatedAt": "2025-11-27T09:09:00.170Z" } } }, "178c705b2c62c01727a80327a809f6535d583c870ad39995375a10a363a1d727": { "1589f225c754084b804cb1b7c426921b7979e160c01fe65dd00c2a0a3e3ae3f9": { "jp": { - "updatedAt": "2025-11-26T07:24:12.281Z" + "updatedAt": "2025-11-27T09:09:00.166Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.274Z" + "updatedAt": "2025-11-27T09:09:00.150Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.282Z" + "updatedAt": "2025-11-27T09:09:00.169Z" } } }, "28de08e6f00a1c0b51895715997e43dbe463c1c4cff9b002dd9014edc5579dcb": { "46a435b4ba73651faf0dfb756e1f9ac1d59de7e580a40c74411bfb41b7c958d9": { "jp": { - "updatedAt": "2025-11-26T07:24:12.282Z" + "updatedAt": "2025-11-27T09:09:00.169Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.280Z" + "updatedAt": "2025-11-27T09:09:00.165Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.274Z" + "updatedAt": "2025-11-27T09:09:00.151Z" } } }, "2b86670a1b384ba80cf06cda553945f2f2ae1c3d4a369cf46e8551544379716c": { "4169ee416284b3a8de7ef404d0519465870ec5b969e0dbb0dbb883cd456ef93c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.283Z" + "updatedAt": "2025-11-27T09:09:00.171Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.284Z" + "updatedAt": "2025-11-27T09:09:00.174Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.281Z" + "updatedAt": "2025-11-27T09:09:00.167Z" } } }, "349400436c332178133e694bcd47dc9ccdf4d729cfc274f1f99bf82b54fde8d1": { "312b11780c641636863655dd7b1fd8b57e6cba8bebf6946857812ca2c3afe479": { "jp": { - "updatedAt": "2025-11-26T07:24:12.281Z" + "updatedAt": "2025-11-27T09:09:00.168Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.281Z" + "updatedAt": "2025-11-27T09:09:00.167Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.280Z" + "updatedAt": "2025-11-27T09:09:00.165Z" } } }, "3798000812ded299b4f0b685fe4df133730a45cf67c87419cd05a769b727f03e": { "1810bd73113c23ab353e5810beb46fbccbee2f443e979883aaf33e93c1afa116": { "jp": { - "updatedAt": "2025-11-26T07:24:12.274Z" + "updatedAt": "2025-11-27T09:09:00.151Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.275Z" + "updatedAt": "2025-11-27T09:09:00.152Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.276Z" + "updatedAt": "2025-11-27T09:09:00.154Z" } } }, "4047bbbf1b204976cd120655b4d3e85ae62f7963b1cd9eb60447ba1c7a58d925": { "0250b8f7933c3640e2d5931945a7588921cbebcd1ad9f8227d1301fc00ccdc41": { "jp": { - "updatedAt": "2025-11-26T07:24:12.276Z" + "updatedAt": "2025-11-27T09:09:00.154Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.277Z" + "updatedAt": "2025-11-27T09:09:00.157Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.277Z" + "updatedAt": "2025-11-27T09:09:00.156Z" } } }, "560a771a88f358751a343c140ad56fb357e898496988479f8f38d70c5e6abd73": { "9d206180b799fb716602163eae19d67a30abf8a23c3361889197d04fc78bad52": { "jp": { - "updatedAt": "2025-11-26T07:24:12.282Z" + "updatedAt": "2025-11-27T09:09:00.168Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.283Z" + "updatedAt": "2025-11-27T09:09:00.170Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.281Z" + "updatedAt": "2025-11-27T09:09:00.167Z" } } }, "5c678b3a4246706bfc999afc97cec53d8c982fb87363f87665082241361a5d73": { "3bc705589b64c0ed96008afa97074822fc2196c075b74f42358b16d267c7160a": { "jp": { - "updatedAt": "2025-11-26T07:24:12.281Z" + "updatedAt": "2025-11-27T09:09:00.167Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.282Z" + "updatedAt": "2025-11-27T09:09:00.168Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.283Z" + "updatedAt": "2025-11-27T09:09:00.172Z" } } }, "6021378296fe97cd32f847567e8226b5b01ff3e70c1eaaf35a828c9d29135ea8": { "a116f2580c016c233d50250b989b32bbe09ddafa83b8dc9dddec1dfc676909e5": { "jp": { - "updatedAt": "2025-11-26T07:24:12.282Z" + "updatedAt": "2025-11-27T09:09:00.169Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.281Z" + "updatedAt": "2025-11-27T09:09:00.168Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.283Z" + "updatedAt": "2025-11-27T09:09:00.171Z" } } }, "773e022e6828901db117df504dcb5f22c010a9943c580fc510044d9585197e57": { "b629f3340f4e22116ec115e53eedd044eb499d902c10c1c5d836dbbd184e23b7": { "jp": { - "updatedAt": "2025-11-26T07:24:12.282Z" + "updatedAt": "2025-11-27T09:09:00.170Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.276Z" + "updatedAt": "2025-11-27T09:09:00.169Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.276Z" + "updatedAt": "2025-11-27T09:09:00.169Z" } } }, "8e7b5fa5ffe7d88c028b17edd689a831fdd41f6a2fc82ff78123493c674623d0": { "ede9c0bcd24a013660cd4a3b395c94ffbe54ec3e8cb4f5607bf18d77ba8eca33": { "jp": { - "updatedAt": "2025-11-26T07:24:12.284Z" + "updatedAt": "2025-11-27T09:09:00.173Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.282Z" + "updatedAt": "2025-11-27T09:09:00.170Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.283Z" + "updatedAt": "2025-11-27T09:09:00.172Z" } } }, "9011c5f16cd48892d19d1f38ab22564d7b0466e5517619ebecc2bc7e71bcaed8": { "28412c34a30c1203bcca0cbcea84a0b53297cedb3c9afd82adb465da3b94442f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.277Z" + "updatedAt": "2025-11-27T09:09:00.173Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.278Z" + "updatedAt": "2025-11-27T09:09:00.158Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.277Z" + "updatedAt": "2025-11-27T09:09:00.158Z" } } }, "93c3b152cbce0393c9c6f97cf591c3711cbf3f81789b2925cea760c4c5cff676": { "a411bf07df5d4b27d21c51466694fc824b2f2422d09fd22f63570974bf2e2f9b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.276Z" + "updatedAt": "2025-11-27T09:09:00.155Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.275Z" + "updatedAt": "2025-11-27T09:09:00.153Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.277Z" + "updatedAt": "2025-11-27T09:09:00.157Z" } } }, "bbd2cfba8a3c3afd64babc88292f440871b9379ed0c722270cbaee5b28989f92": { "c2ff068859047c7491ef0445b9b895d4133fbbdf15a64d444483ba2ed4225407": { "jp": { - "updatedAt": "2025-11-26T07:24:12.283Z" + "updatedAt": "2025-11-27T09:09:00.172Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.283Z" + "updatedAt": "2025-11-27T09:09:00.171Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.284Z" + "updatedAt": "2025-11-27T09:09:00.173Z" } } }, "be8dc1cd18e614d45a58deaf1024b50c63f3b407079c8195f643d25501e18a86": { "835ca542a441c446925af17c0332381d8c4950cb2f458181ca206b84a34091ae": { "jp": { - "updatedAt": "2025-11-26T07:24:12.282Z" + "updatedAt": "2025-11-27T09:09:00.168Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.283Z" + "updatedAt": "2025-11-27T09:09:00.172Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.274Z" + "updatedAt": "2025-11-27T09:09:00.151Z" } } }, "bfd7f9d45ae0b09ed83b9f435d6a0720b54f9af64528eea7b98d70d76a9a29ba": { "db0cfeae11a772453aa791ef8a6aad69ed5ff266472101082ba0c8d64ee078c8": { "jp": { - "updatedAt": "2025-11-26T07:24:12.283Z" + "updatedAt": "2025-11-27T09:09:00.171Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.281Z" + "updatedAt": "2025-11-27T09:09:00.166Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.284Z" + "updatedAt": "2025-11-27T09:09:00.173Z" } } }, "c3760dc390d98e6e5ed5a4a74c5c609915d05a7a63963656f7715607d65ae092": { "2904d7fb4addff8bf173ca68df5b540945453ef8fa9eec76a35d8f9b92ab8b87": { "jp": { - "updatedAt": "2025-11-26T07:24:12.285Z" + "updatedAt": "2025-11-27T09:09:00.176Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.284Z" + "updatedAt": "2025-11-27T09:09:00.175Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.285Z" + "updatedAt": "2025-11-27T09:09:00.175Z" } } }, "e7312c644964f4d389a9171edabe14341e5e6fdd852101cf9f16a264088857b7": { "2904b07971746b903763bbcc8b60c7bc05a984fd6692a24f60eeae21856cf64a": { "jp": { - "updatedAt": "2025-11-26T07:24:12.284Z" + "updatedAt": "2025-11-27T09:09:00.175Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.284Z" + "updatedAt": "2025-11-27T09:09:00.175Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.284Z" + "updatedAt": "2025-11-27T09:09:00.175Z" } } }, "f5e8eec3fa4fdf1b4c16b4b71f35b278d41db6e5586c66a42fe590521942f347": { "f9704f3dd2bb395a82abdb0dd1b7b09ea97a4499075e9bc8ecfcb0ead44a1d69": { "jp": { - "updatedAt": "2025-11-26T07:24:12.286Z" + "updatedAt": "2025-11-27T09:09:00.178Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.285Z" + "updatedAt": "2025-11-27T09:09:00.177Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.286Z" + "updatedAt": "2025-11-27T09:09:00.177Z" } } }, "0c9700318afe07f773f3675286dbd1308302fb5c993fc403ead5ee2c2c311f85": { "26bbf167b8a8bdd6e415d3cf429c935f63ed38563bdb8697297248361bdeffad": { "jp": { - "updatedAt": "2025-11-26T07:24:19.094Z" + "updatedAt": "2025-11-27T09:09:00.190Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.093Z" + "updatedAt": "2025-11-27T09:09:00.186Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.094Z" + "updatedAt": "2025-11-27T09:09:00.188Z" } } }, "1205bf7e48133304fe346efa0309af05787e80fd6f83623b178426d0d89e43ab": { "7a4af08a1b17f2a86db198129d22bf1a71494ef3425bd28e8251e46075a27288": { "jp": { - "updatedAt": "2025-11-26T07:24:12.284Z" + "updatedAt": "2025-11-27T09:09:00.174Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.284Z" + "updatedAt": "2025-11-27T09:09:00.175Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.284Z" + "updatedAt": "2025-11-27T09:09:00.174Z" } } }, "3c59f44959e6e9ca6acdb43ffec9355d9485257cc402a212ce1759a0064bb981": { "1ec8c112466533ed9f452783ba3194be3a2def5e0e028ac74fb3913e56cc2f4d": { "jp": { - "updatedAt": "2025-11-26T07:24:19.095Z" + "updatedAt": "2025-11-27T09:09:00.191Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.095Z" + "updatedAt": "2025-11-27T09:09:00.192Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.094Z" + "updatedAt": "2025-11-27T09:09:00.190Z" } } }, "401161c2a7c478b5179bcce758b06f32dba0fdbf9bc64188f2d7f79dac72dfa0": { "f590407909c6eb71eb806ee84a3e8ff079ef373b53b7e0b97152b2c9ea18f318": { "jp": { - "updatedAt": "2025-11-26T07:24:19.095Z" + "updatedAt": "2025-11-27T09:09:00.192Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.095Z" + "updatedAt": "2025-11-27T09:09:00.191Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.094Z" + "updatedAt": "2025-11-27T09:09:00.189Z" } } }, "48ca9336c96e6bf5d7264d6ae62d5ee29644e6c214dc339d83a610716c484ff0": { "6e9ef6dfd8e741fb723339409fd3ec6e0e74d8c83d08b37cb60190c4e83a6762": { "jp": { - "updatedAt": "2025-11-26T07:24:19.092Z" + "updatedAt": "2025-11-27T09:09:00.185Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.092Z" + "updatedAt": "2025-11-27T09:09:00.184Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.092Z" + "updatedAt": "2025-11-27T09:09:00.185Z" } } }, "51b2a652cdf591979b38ae330c8306c66fd1186f911c915e5aa9e108a6876603": { "a570b7d389235335a4604eebb1f1ee2a84cfb547848012a3f76c135f5a18e3f9": { "jp": { - "updatedAt": "2025-11-26T07:24:19.095Z" + "updatedAt": "2025-11-27T09:09:00.193Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.095Z" + "updatedAt": "2025-11-27T09:09:00.191Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.094Z" + "updatedAt": "2025-11-27T09:09:00.190Z" } } }, "5272155dbd5220decd129a5e4b559edddbdf6ce43e7a6b8b33c93f39ff269597": { "976786fd43e7ab3db7efe0f5493c2e4b732add2abc4ca3639e54d6dba7ea3e9c": { "jp": { - "updatedAt": "2025-11-26T07:24:19.092Z" + "updatedAt": "2025-11-27T09:09:00.183Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.092Z" + "updatedAt": "2025-11-27T09:09:00.183Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.091Z" + "updatedAt": "2025-11-27T09:09:00.183Z" } } }, "548de96f50ceaca8e5445f140674be40c17b5c6efd12a9ec257c21dcf7ff409c": { "5b113a68ce6ddc11290d264ed87c01b3577af499c83519374e7d367764d8035d": { "jp": { - "updatedAt": "2025-11-26T07:24:12.280Z" + "updatedAt": "2025-11-27T09:09:00.164Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.091Z" + "updatedAt": "2025-11-27T09:09:00.182Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.287Z" + "updatedAt": "2025-11-27T09:09:00.181Z" } } }, "65a720c2ea0a8158d89758ca90889e7cfba036082ddc99c1900ceb31830b3cd3": { "38abb8321a70b767befbe0fce1b421459ce68d0c40703530c81bd00bb0fe53a2": { "zh": { - "updatedAt": "2025-11-26T07:24:19.091Z" + "updatedAt": "2025-11-27T09:09:00.183Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:19.090Z" + "updatedAt": "2025-11-27T09:09:00.181Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.280Z" + "updatedAt": "2025-11-27T09:09:00.164Z" } } }, "693961a5d1fa6bea79f69b1d2a739db59c41797c8d322ac4dea99c908e8abe46": { "b20f75da8b934d12c4230b89c1dd8cd4bb4b57708832dd5f413fd6ddf12d4434": { "jp": { - "updatedAt": "2025-11-26T07:24:19.093Z" + "updatedAt": "2025-11-27T09:09:00.186Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.093Z" + "updatedAt": "2025-11-27T09:09:00.187Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.093Z" + "updatedAt": "2025-11-27T09:09:00.186Z" } } }, "822e90a8485f6ba254a1b6b4f89bbeea67771bd3cb9f9d6241558e4b9f59e8ca": { "3442662c930110d3e163429ea57e15d27f6132307f6bdd86dd62fc64d01d1c48": { "jp": { - "updatedAt": "2025-11-26T07:24:19.092Z" + "updatedAt": "2025-11-27T09:09:00.185Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.092Z" + "updatedAt": "2025-11-27T09:09:00.184Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.092Z" + "updatedAt": "2025-11-27T09:09:00.184Z" } } }, "8fafd060efa9d7570d6665629f29f511b108ca76567a0f8ab9320536cf4824a3": { "95dc2ad2c072c0167726cf92eb31cd7af87b0eb4785b0fb839363d03a88ae8a5": { "jp": { - "updatedAt": "2025-11-26T07:24:12.286Z" + "updatedAt": "2025-11-27T09:09:00.179Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.286Z" + "updatedAt": "2025-11-27T09:09:00.178Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.285Z" + "updatedAt": "2025-11-27T09:09:00.177Z" } } }, "910c09772c30498ccd96c4a7059798706b5861119f5ae8e46d899e9a4da807d5": { "419e68f0fe31b19a72d7bfd6b1b28c27298c6d38904baf049d3466be88aac0ea": { "jp": { - "updatedAt": "2025-11-26T07:24:19.093Z" + "updatedAt": "2025-11-27T09:09:00.187Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.094Z" + "updatedAt": "2025-11-27T09:09:00.188Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.093Z" + "updatedAt": "2025-11-27T09:09:00.187Z" } } }, "9d303cf2c426cf20096b5dc4321074d62704d00520545ee1bc5184cdba1e2bc6": { "ee164e4761915f7bccd76758188f979de64e4ab9239556b390ffac31d42aaf2a": { "jp": { - "updatedAt": "2025-11-26T07:24:19.095Z" + "updatedAt": "2025-11-27T09:09:00.192Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.096Z" + "updatedAt": "2025-11-27T09:09:00.194Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.095Z" + "updatedAt": "2025-11-27T09:09:00.192Z" } } }, "a0c24fe635a0e43acb3d80e4a7fc854ecdfc143306eb5b0b77baccd6c4ef9468": { "e71bd647b55a5bb2a691655582237e95f9ff246c5f45f2f2f663e74b62968fa9": { "jp": { - "updatedAt": "2025-11-26T07:24:19.094Z" + "updatedAt": "2025-11-27T09:09:00.190Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.095Z" + "updatedAt": "2025-11-27T09:09:00.193Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.094Z" + "updatedAt": "2025-11-27T09:09:00.190Z" } } }, "b60ebbddf877960af38c601bbdbf000beb3124a60fee1f8c23fed49149d1c527": { "a5cf8d2eccddd9b6214fa12aac2b98dd4e514d569be5e26938ee9a3b11a0b411": { "jp": { - "updatedAt": "2025-11-26T07:24:12.285Z" + "updatedAt": "2025-11-27T09:09:00.176Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.285Z" + "updatedAt": "2025-11-27T09:09:00.176Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.285Z" + "updatedAt": "2025-11-27T09:09:00.176Z" } } }, "c11fd5cd4c0e0c76b50b836fc0585b7d897d5c6e619c8530f61e70fb13e7d1cc": { "1fc6d064882a931f2ccd7ae4239ad068568c65a8bef153bd6264d39d45bdf340": { "jp": { - "updatedAt": "2025-11-26T07:24:19.091Z" + "updatedAt": "2025-11-27T09:09:00.183Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.092Z" + "updatedAt": "2025-11-27T09:09:00.184Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.092Z" + "updatedAt": "2025-11-27T09:09:00.185Z" } } }, "d2f8552b7911ad6c378a02252cb789aff8287601b71f6571a0f6e1b7a8e78d04": { "94efb582e11f5b80d588c2052e90bfd70b816f556e6039e851019c86956b10da": { "jp": { - "updatedAt": "2025-11-26T07:24:12.286Z" + "updatedAt": "2025-11-27T09:09:00.178Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.286Z" + "updatedAt": "2025-11-27T09:09:00.179Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.285Z" + "updatedAt": "2025-11-27T09:09:00.177Z" } } }, "eb48ea9cc55a5f79da9d6053e1ddc3e175fac421ecfbf7cdd1fba7409a5937c6": { "4bc78345ed8b814098932537f3fc29577489a1bf65318ccf523d0e7979227a78": { "jp": { - "updatedAt": "2025-11-26T07:24:12.285Z" + "updatedAt": "2025-11-27T09:09:00.188Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.285Z" + "updatedAt": "2025-11-27T09:09:00.189Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.285Z" + "updatedAt": "2025-11-27T09:09:00.189Z" } } }, "ec7b68e24b7e06a320d9daf21b92c0a61d2d196ada1c8350b443b492c228b245": { "f255bcf4104dcca52f9807566387c0fcfe6d06f436994fee4179bc40d148cf94": { "jp": { - "updatedAt": "2025-11-26T07:24:19.093Z" + "updatedAt": "2025-11-27T09:09:00.187Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.094Z" + "updatedAt": "2025-11-27T09:09:00.188Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.093Z" + "updatedAt": "2025-11-27T09:09:00.188Z" } } }, "eefff94e72ae2ff41e6e3bdfd308882739e2e719c94cb06245a0ddf4866a91d0": { "1a4e25f6cb4dbccbb5205a184e3f9417ca1d8398e86e5433534abb2f3af17825": { "jp": { - "updatedAt": "2025-11-26T07:24:19.093Z" + "updatedAt": "2025-11-27T09:09:00.186Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.092Z" + "updatedAt": "2025-11-27T09:09:00.185Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.093Z" + "updatedAt": "2025-11-27T09:09:00.187Z" } } }, "fe9dca2c6fd3af40bc21440a38de1acbeedfae1588e58844d14185b01797ace9": { "ebf565ec610bd53ba3ec0980a72ee44fcc9e259c89089c7d524937e46cc0037f": { "jp": { - "updatedAt": "2025-11-26T07:24:19.096Z" + "updatedAt": "2025-11-27T09:09:00.193Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.095Z" + "updatedAt": "2025-11-27T09:09:00.193Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.094Z" + "updatedAt": "2025-11-27T09:09:00.189Z" } } }, "0488cc4c783adb013176b8dd5553d28bd7e7ce03785fd0038e3b2b17e6bdf549": { "718aa60f3c8b05491fd8687c867ff950c98134aa648057ef2a403f78f1807100": { "jp": { - "updatedAt": "2025-11-26T07:24:12.287Z" + "updatedAt": "2025-11-27T09:09:00.203Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.286Z" + "updatedAt": "2025-11-27T09:09:00.180Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.096Z" + "updatedAt": "2025-11-27T09:09:00.196Z" } } }, "1310e9bab89510f4aedd870fa23492b42460b27cc53beb62388b8527a75b4abe": { "5d36c63b3cd649e6c42f53a7e1722d9058261e3c5703e736f85a4081ed299d22": { "jp": { - "updatedAt": "2025-11-26T07:24:19.097Z" + "updatedAt": "2025-11-27T09:09:00.197Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.098Z" + "updatedAt": "2025-11-27T09:09:00.199Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.287Z" + "updatedAt": "2025-11-27T09:09:00.204Z" } } }, "313f2f3a2287ee9166540ad792489898b8322355b28ee91e96ba66cf781aac35": { "813cd15c21bab5b5ae060ddf42a770163642046d3681ff5dd1dd8a48b6578a17": { "jp": { - "updatedAt": "2025-11-26T07:24:19.097Z" + "updatedAt": "2025-11-27T09:09:00.196Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.288Z" + "updatedAt": "2025-11-27T09:09:00.207Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.289Z" + "updatedAt": "2025-11-27T09:09:00.207Z" } } }, "38d86ec85c1c8aaad845db190de05e50994d1a3c494195da910589c64b052751": { "3cff21a72fb101c7dc507cfac07bb03d9d16b6445213a5a7553e646f024ba71f": { "jp": { - "updatedAt": "2025-11-26T07:24:19.092Z" + "updatedAt": "2025-11-27T09:09:00.204Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.091Z" + "updatedAt": "2025-11-27T09:09:00.196Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.287Z" + "updatedAt": "2025-11-27T09:09:00.181Z" } } }, "47aae18e89fdc913969ad0dd021c6affb6a825d67862170fab9bf412e150d04a": { "7845706578879f0d6235708b243856e2005db4e602dca78be25078cff83676ac": { "jp": { - "updatedAt": "2025-11-26T07:24:12.289Z" + "updatedAt": "2025-11-27T09:09:00.208Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.289Z" + "updatedAt": "2025-11-27T09:09:00.207Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.097Z" + "updatedAt": "2025-11-27T09:09:00.197Z" } } }, "4a1e810e51a719b0c246d3a43e6419bd4b987b2e7623567a865586ec6ed3fddb": { "ed63b452ccdcc51644ab26c7e164fd9c06b4fb9dd0f29123b7c142d640dfd731": { "jp": { - "updatedAt": "2025-11-26T07:24:19.098Z" + "updatedAt": "2025-11-27T09:09:00.199Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.097Z" + "updatedAt": "2025-11-27T09:09:00.196Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.097Z" + "updatedAt": "2025-11-27T09:09:00.197Z" } } }, "50a5598ee25c450c5fb03f18bc79c9f33c4b2d45dd82d93378770a029449765f": { "d681b2d70ad9048fc005dfbd39784bf38bc368cbb6e601d7be30a81c02aa66d1": { "jp": { - "updatedAt": "2025-11-26T07:24:12.286Z" + "updatedAt": "2025-11-27T09:09:00.179Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.091Z" + "updatedAt": "2025-11-27T09:09:00.182Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.091Z" + "updatedAt": "2025-11-27T09:09:00.182Z" } } }, "58592583285bade083e9bb2abfe89113954c980d6a63fd9134c60920badad2d7": { "8b688b902eb485da1cd904c9a534e7c30138ddc8fe157648544914cd332f7701": { "jp": { - "updatedAt": "2025-11-26T07:24:19.097Z" + "updatedAt": "2025-11-27T09:09:00.198Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.097Z" + "updatedAt": "2025-11-27T09:09:00.197Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.287Z" + "updatedAt": "2025-11-27T09:09:00.205Z" } } }, "5adf48b603a73cafc111898833bb810f6f9d985906f5a28a6b5510c4ad5ed9df": { "ded6c22af292aa253dbdb1b8bcdd3dfedbd38430db398f57c83b96b8b42647f8": { "jp": { - "updatedAt": "2025-11-26T07:24:19.096Z" + "updatedAt": "2025-11-27T09:09:00.195Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.287Z" + "updatedAt": "2025-11-27T09:09:00.180Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.286Z" + "updatedAt": "2025-11-27T09:09:00.179Z" } } }, "7d16493aea7d06c09ef802117a0be5f6d628751d0a5c7a7b03ce8eb9dc409bf2": { "5c7a7e89cebe18dd07de910c107fbcee8795947ad29a2d17a6d6024a235a658a": { "jp": { - "updatedAt": "2025-11-26T07:24:19.091Z" + "updatedAt": "2025-11-27T09:09:00.182Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.091Z" + "updatedAt": "2025-11-27T09:09:00.183Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.287Z" + "updatedAt": "2025-11-27T09:09:00.181Z" } } }, "948b9dc936c07fa8b4472138f98721317baa561958a48a6445780ecfc6a1c485": { "2f113bab1b3e6819aa420803e0868837c5a60eed370a5c0708d29084e14f6cdc": { "jp": { - "updatedAt": "2025-11-26T07:24:19.096Z" + "updatedAt": "2025-11-27T09:09:00.195Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.096Z" + "updatedAt": "2025-11-27T09:09:00.194Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.097Z" + "updatedAt": "2025-11-27T09:09:00.197Z" } } }, "94df9a623cfec05c2c5b489fbed533e510d65ccbf937bed27f852c60f3a24b6b": { "4d71c012d9187781ca8fcfad6d17272ce0479d7a403fdf6f4e13744b2054c414": { "jp": { - "updatedAt": "2025-11-26T07:24:12.288Z" + "updatedAt": "2025-11-27T09:09:00.206Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.288Z" + "updatedAt": "2025-11-27T09:09:00.207Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.287Z" + "updatedAt": "2025-11-27T09:09:00.203Z" } } }, "abde8721a04c3899ef6606633f77be77e9d032a8fa7f37d834ba01a23fe119b9": { "580c03f819a51524be5321c5af5b976bf750d39a4e3a64a3dd28f32805924089": { "jp": { - "updatedAt": "2025-11-26T07:24:19.096Z" + "updatedAt": "2025-11-27T09:09:00.195Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.096Z" + "updatedAt": "2025-11-27T09:09:00.194Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.096Z" + "updatedAt": "2025-11-27T09:09:00.196Z" } } }, "ae86875e3a4deeec5b623e90f58d3191bc8e79167da17320095d45b7aefc2243": { "8e8b9e7eee69658acfb5be5d7837a6c6af0457a30ff7676b0d57099a5399ff0e": { "jp": { - "updatedAt": "2025-11-26T07:24:19.098Z" + "updatedAt": "2025-11-27T09:09:00.198Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.096Z" + "updatedAt": "2025-11-27T09:09:00.195Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.287Z" + "updatedAt": "2025-11-27T09:09:00.194Z" } } }, "b5d0eacaaf66596432fd2e0164bb5f867e3cac16623e968148a4d757d106c3f9": { "dd01468833f830dab589b0b46480f9b998ba99103d12ff19ec3c342a9f0a9138": { "jp": { - "updatedAt": "2025-11-26T07:24:12.288Z" + "updatedAt": "2025-11-27T09:09:00.206Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.098Z" + "updatedAt": "2025-11-27T09:09:00.199Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.288Z" + "updatedAt": "2025-11-27T09:09:00.206Z" } } }, "bc185d41a81a462e3988685f733423500e79d9186808359cf876254dfc1df6b9": { "873f51e584f0fef0ed5ce12f52eacab370768a902dd8b25575c46c3ea3925c19": { "jp": { - "updatedAt": "2025-11-26T07:24:12.288Z" + "updatedAt": "2025-11-27T09:09:00.206Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.097Z" + "updatedAt": "2025-11-27T09:09:00.198Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.288Z" + "updatedAt": "2025-11-27T09:09:00.205Z" } } }, "bdf609022e3136bdae1def5400ec2932bb8f17ea8d7d49a273b0293defd3affb": { "f21711f3b2d080fbcd8a0d170f14659f54ad538d7c534cc91bee92cd96943824": { "jp": { - "updatedAt": "2025-11-26T07:24:19.098Z" + "updatedAt": "2025-11-27T09:09:00.198Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.288Z" + "updatedAt": "2025-11-27T09:09:00.205Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.098Z" + "updatedAt": "2025-11-27T09:09:00.198Z" } } }, "c5084a09df628aa86f5f8693b10a55f9e8af3ba5b6e50ed69ff474a580871673": { "639b5a2d990e67de3c2c8aab1480380f68b5cffc8cb43a13b0da74c601a38749": { "ru": { - "updatedAt": "2025-11-26T07:24:19.098Z" + "updatedAt": "2025-11-27T09:09:00.200Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.100Z" + "updatedAt": "2025-11-27T09:09:00.202Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:19.099Z" + "updatedAt": "2025-11-27T09:09:00.201Z" } } }, "c6970f5399e645bf58a1525ef6209242f22690e314c9ec2676aa0f609e60850f": { "857e9c3ca17f16a6e7331b2d62e9f15ea308a426462699ae488f7fd808b8bedf": { "jp": { - "updatedAt": "2025-11-26T07:24:12.288Z" + "updatedAt": "2025-11-27T09:09:00.205Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.097Z" + "updatedAt": "2025-11-27T09:09:00.198Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.287Z" + "updatedAt": "2025-11-27T09:09:00.204Z" } } }, "f4e806b4f6f3414588a99250928aefb88bd97521c5fb9f755d133116d676e98f": { "b47d5c0bb52bcb18d0784610fd2a2faa24c97495fc26370a6b4024b1a998b212": { "jp": { - "updatedAt": "2025-11-26T07:24:19.091Z" + "updatedAt": "2025-11-27T09:09:00.182Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.280Z" + "updatedAt": "2025-11-27T09:09:00.165Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.091Z" + "updatedAt": "2025-11-27T09:09:00.181Z" } } }, "fe52a1835874eff99646b2ecbf9812aaa4ad459489ce76c856750b021e1969fb": { "44b9e40b3ed21a0eb1effa1387bbd83dc88cf7259bae3bbf2af2a134b07516e5": { "jp": { - "updatedAt": "2025-11-26T07:24:12.289Z" + "updatedAt": "2025-11-27T09:09:00.207Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.287Z" + "updatedAt": "2025-11-27T09:09:00.204Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.288Z" + "updatedAt": "2025-11-27T09:09:00.205Z" } } }, "077683f76fe06aef19e3361bceab4bc549399e0723b4d9d14415d78c7b29cdfb": { "fe9570de03d2029f3efd3701f8a9844fa8bb91810ea7c58923ee8d0766854adc": { "jp": { - "updatedAt": "2025-11-26T07:24:12.293Z" + "updatedAt": "2025-11-27T09:09:00.218Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.293Z" + "updatedAt": "2025-11-27T09:09:00.218Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.293Z" + "updatedAt": "2025-11-27T09:09:00.221Z" } } }, "1d4d6e77bcbd23d001d1913843fc6c9748753173b9770ce333d87441932130ec": { "30da2cbfe92790be7c2f95f485c2ea63c4ff423ade0453d52e65f78a6fe652c0": { "jp": { - "updatedAt": "2025-11-26T07:24:12.292Z" + "updatedAt": "2025-11-27T09:09:00.217Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.294Z" + "updatedAt": "2025-11-27T09:09:00.221Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.291Z" + "updatedAt": "2025-11-27T09:09:00.213Z" } } }, "37b9937d3f28ea06521af2789937cb6974b4bb1da71a4e0e38cd433452943f4b": { "ff41c613f12a073c7cfef1f537c5bef8fc0820fa48eaa7f6ad0cb887283d047d": { "jp": { - "updatedAt": "2025-11-26T07:24:12.292Z" + "updatedAt": "2025-11-27T09:09:00.215Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.290Z" + "updatedAt": "2025-11-27T09:09:00.210Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.292Z" + "updatedAt": "2025-11-27T09:09:00.215Z" } } }, "4503f45c726f639e1a6502e2fa738700aac770245105ecbbc3d6006506fa8e7e": { "b3e6deff1b1839f01fe2fdfb7c34b1a485c8bd5be58b682ad09b971716acc42c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.292Z" + "updatedAt": "2025-11-27T09:09:00.216Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.289Z" + "updatedAt": "2025-11-27T09:09:00.209Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.292Z" + "updatedAt": "2025-11-27T09:09:00.217Z" } } }, "45c696d22175381569602ddc4401df16a7d32249c5f9994c4b98bf2548350315": { "65644f5b55fd61d8fdbe8a764e605ff7e00f6ec53fcdfa43f484a5638a58d2aa": { "jp": { - "updatedAt": "2025-11-26T07:24:12.294Z" + "updatedAt": "2025-11-27T09:09:00.222Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.294Z" + "updatedAt": "2025-11-27T09:09:00.223Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.295Z" + "updatedAt": "2025-11-27T09:09:00.231Z" } } }, "4d6593bbb881e0a74e7a089539eeba4aca7019f581c7caeadeee04c001000773": { "d16ded5082885b0eeb5b28bcee5bf878c87a2cc092934fcfc328a1e535effa1f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.294Z" + "updatedAt": "2025-11-27T09:09:00.221Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.291Z" + "updatedAt": "2025-11-27T09:09:00.213Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.290Z" + "updatedAt": "2025-11-27T09:09:00.212Z" } } }, "5c12094be2a10a85a875ce129adf37c46bdae04160dbb85b3eb63b9c69e7f6ac": { "bf9cdc73e3b5ca0e62d14af59e1854dd6d45176f362f34533c815c278385d1ec": { "jp": { - "updatedAt": "2025-11-26T07:24:12.291Z" + "updatedAt": "2025-11-27T09:09:00.212Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.290Z" + "updatedAt": "2025-11-27T09:09:00.209Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.293Z" + "updatedAt": "2025-11-27T09:09:00.220Z" } } }, "62508936e6b3e7a6b965ed3df755188b154e45270320ca734cb0df2e29a942a9": { "9a4adbb5e86533b1fab803147ed4539c344e121c9526ce249b8e3c49744c7702": { "jp": { - "updatedAt": "2025-11-26T07:24:12.292Z" + "updatedAt": "2025-11-27T09:09:00.217Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.290Z" + "updatedAt": "2025-11-27T09:09:00.210Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.291Z" + "updatedAt": "2025-11-27T09:09:00.214Z" } } }, "7a1451fe8363988c04d1df2125cc6a560940a7c034905f5e75da236ab427774e": { "7f9fa8dfaab48853ecedafd465b380359704ea83aed218c677074831e1cc0932": { "jp": { - "updatedAt": "2025-11-26T07:24:12.290Z" + "updatedAt": "2025-11-27T09:09:00.211Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.291Z" + "updatedAt": "2025-11-27T09:09:00.213Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.292Z" + "updatedAt": "2025-11-27T09:09:00.214Z" } } }, "83523c78b37179282ea3d0f8a98cd8c0e917e50caaf74f38e237b1b1f1fd7dc1": { "7f172e3eb258a3b4cd3c132303859997ffb354f24a60481f04ae0f80fefe2147": { "jp": { - "updatedAt": "2025-11-26T07:24:12.291Z" + "updatedAt": "2025-11-27T09:09:00.214Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.293Z" + "updatedAt": "2025-11-27T09:09:00.220Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.295Z" + "updatedAt": "2025-11-27T09:09:00.230Z" } } }, "89a6cf75614ffde882ea0e38b857ec20bc3415e924373b586ee53a84d81b8dac": { "212ef1dfe191daf73ed51386731e37ce6d4ca49f4472b7e471586979e69a9a9d": { "jp": { - "updatedAt": "2025-11-26T07:24:12.292Z" + "updatedAt": "2025-11-27T09:09:00.216Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.293Z" + "updatedAt": "2025-11-27T09:09:00.219Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.290Z" + "updatedAt": "2025-11-27T09:09:00.211Z" } } }, "8e4e3758c244f276a3f91f720f08400f7d3280b2729ed2535fe4b0a244bc1eb7": { "a3356389fc2d7537a8464f2e1646f8f51af66a2d715df1807a2fd4184083a70f": { "jp": { - "updatedAt": "2025-11-26T07:24:19.099Z" + "updatedAt": "2025-11-27T09:09:00.200Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.290Z" + "updatedAt": "2025-11-27T09:09:00.210Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.294Z" + "updatedAt": "2025-11-27T09:09:00.222Z" } } }, "92c4e15d1b1edd5a34f950168fa129302400e9f6ef4fa378e3c7af3ed6ec8227": { "3c3fcd6c5352af3e3f90c0a4d954793388177b9bbb34b975eff1c8f384d445ac": { "jp": { - "updatedAt": "2025-11-26T07:24:12.293Z" + "updatedAt": "2025-11-27T09:09:00.219Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.289Z" + "updatedAt": "2025-11-27T09:09:00.209Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.294Z" + "updatedAt": "2025-11-27T09:09:00.230Z" } } }, "a14794c89d955458a9f5af44d7aaca8d68a05b6880e98e008a7c081604143ab7": { "671b0a57421a638325cbf9c110626a9d5b734267bb8f974814c03393141cf7b8": { "jp": { - "updatedAt": "2025-11-26T07:24:19.098Z" + "updatedAt": "2025-11-27T09:09:00.199Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.290Z" + "updatedAt": "2025-11-27T09:09:00.210Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.290Z" + "updatedAt": "2025-11-27T09:09:00.212Z" } } }, "ae39080b133df67d8884d7a8d76cf775ef202d9bf2efb43947344e07462aec23": { "4c42c112034c378e6000b6c987744ecc184d4c90582c11dc33f577b3f2ee44cd": { "jp": { - "updatedAt": "2025-11-26T07:24:12.293Z" + "updatedAt": "2025-11-27T09:09:00.218Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.291Z" + "updatedAt": "2025-11-27T09:09:00.213Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.293Z" + "updatedAt": "2025-11-27T09:09:00.220Z" } } }, "b3e8c57a2ac90416a86e93c4fc87cc9fc69b9ee772adbd854463142bcf0ad103": { "78a6c5fa33437b43f2619fdc05ba1a3ff266f89bafbeb1b78bc71a0ed76a0496": { "jp": { - "updatedAt": "2025-11-26T07:24:12.295Z" + "updatedAt": "2025-11-27T09:09:00.231Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.294Z" + "updatedAt": "2025-11-27T09:09:00.230Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.292Z" + "updatedAt": "2025-11-27T09:09:00.218Z" } } }, "bfa5f357797593cffea8aa625d31e79d5f58effffe1213f1bbb7b709e0c951e9": { "9dbe571f5b98f8fb6c1fe7c120e80cf8fe72a659f77f22e8b74282600d4e9325": { "jp": { - "updatedAt": "2025-11-26T07:24:12.291Z" + "updatedAt": "2025-11-27T09:09:00.213Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.290Z" + "updatedAt": "2025-11-27T09:09:00.211Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.291Z" + "updatedAt": "2025-11-27T09:09:00.212Z" } } }, "c593a21ae24f2adf1116e2099fe2cac24733672a1fdacfbb7d9be523e674a070": { "3888654c7ba7da0474c2c33ac3100faa58509581ecb5ff97147be80f6c3ddc7f": { "jp": { - "updatedAt": "2025-11-26T07:24:19.098Z" + "updatedAt": "2025-11-27T09:09:00.199Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.100Z" + "updatedAt": "2025-11-27T09:09:00.221Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.100Z" + "updatedAt": "2025-11-27T09:09:00.217Z" } } }, "d2d56d1eccd2d86a90004069292a4cfc31251986d8bb238fa00ba3a4aab4a56d": { "dc92ad8afa44196810e06c60223ea9ca5b982c40325ac54b37fd95a9f450fdda": { "jp": { - "updatedAt": "2025-11-26T07:24:12.292Z" + "updatedAt": "2025-11-27T09:09:00.216Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.290Z" + "updatedAt": "2025-11-27T09:09:00.211Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.291Z" + "updatedAt": "2025-11-27T09:09:00.212Z" } } }, "d36f1827c010ce2e2dcab5998b4c489e963acbe4c2d8322885eae6daf7d3e446": { "2d4e379a75efd761f80eb533b3cf33859ee34ab855d930fab99c5091b13fa5a3": { "jp": { - "updatedAt": "2025-11-26T07:24:12.294Z" + "updatedAt": "2025-11-27T09:09:00.222Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.289Z" + "updatedAt": "2025-11-27T09:09:00.209Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.291Z" + "updatedAt": "2025-11-27T09:09:00.214Z" } } }, "f27af8909a343bda58696e815f4b50b00101d0dcd66b99619aa579b381a444cf": { "929021d21964c8a27df287754f3bf673b1e9e43e5b78df9447405b8197530ab2": { "jp": { - "updatedAt": "2025-11-26T07:24:12.294Z" + "updatedAt": "2025-11-27T09:09:00.222Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.293Z" + "updatedAt": "2025-11-27T09:09:00.219Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.293Z" + "updatedAt": "2025-11-27T09:09:00.220Z" } } }, "1d24065c2e7fca3ac3f26d0a2b7ccd04f7ff1ae4faa321c7335a8e84eb0ac0de": { "e323f890710302432f3ba708412993f1d391acfb58bf585c82e91d8c3c5b823a": { "jp": { - "updatedAt": "2025-11-26T07:24:12.296Z" + "updatedAt": "2025-11-27T09:09:00.235Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.296Z" + "updatedAt": "2025-11-27T09:09:00.234Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.296Z" + "updatedAt": "2025-11-27T09:09:00.233Z" } } }, "34f6accb938658c99a83aa179d1dfe75fe3f844b0e815b1a8d42a512eb830f06": { "c43e5de4e7fa4afd53423adaa427167edd9077fd3af0bcd8e16a72269e83116f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.296Z" + "updatedAt": "2025-11-27T09:09:00.235Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.296Z" + "updatedAt": "2025-11-27T09:09:00.234Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.296Z" + "updatedAt": "2025-11-27T09:09:00.235Z" } } }, "45e2237668cc8f027e43e52ef4443b8a53d2c07dde3b858205c9c43057f4cb8b": { "66380f0ef83c18a16b8296671ad4697deea2b60436ad4259cd3c3df09895bbfc": { "jp": { - "updatedAt": "2025-11-26T07:24:12.289Z" + "updatedAt": "2025-11-27T09:09:00.208Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.296Z" + "updatedAt": "2025-11-27T09:09:00.233Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.295Z" + "updatedAt": "2025-11-27T09:09:00.232Z" } } }, "4e39f1cc2912db452edc06d93f7f0bfcc091c2888f064a3281bd99e46645f722": { "48a7640cd750631e03fa4c3747cd09af737c4ed39ad0a40e22ebcfdbc24b9872": { "jp": { - "updatedAt": "2025-11-26T07:24:12.295Z" + "updatedAt": "2025-11-27T09:09:00.232Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.292Z" + "updatedAt": "2025-11-27T09:09:00.216Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.294Z" + "updatedAt": "2025-11-27T09:09:00.231Z" } } }, "990553ca9f9ae4591aaae11318ecec98a52d743479ad68505f33d7437ebdcfe5": { "6706062fa424eac816c221cf4a0ecb23afeca8ecbe3f4830da0cee49f3af5b55": { "jp": { - "updatedAt": "2025-11-26T07:24:12.295Z" + "updatedAt": "2025-11-27T09:09:00.232Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.295Z" + "updatedAt": "2025-11-27T09:09:00.233Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.289Z" + "updatedAt": "2025-11-27T09:09:00.208Z" } } }, "9b3d838535466c0adcbcf2c1821542686b5932d55c219ecd4c54a8d3d723b617": { "b968225991ebd30f1600f3ad485919d0badeecf3a3e60c5cb52b71a85c5611c6": { "jp": { - "updatedAt": "2025-11-26T07:24:12.296Z" + "updatedAt": "2025-11-27T09:09:00.234Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.295Z" + "updatedAt": "2025-11-27T09:09:00.233Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.295Z" + "updatedAt": "2025-11-27T09:09:00.232Z" } } }, "f8fa9a1c93f8857620e1d2d6052e2a540a9827ab07e015947b84e6fc066cf05a": { "27bc228b35212b29d55733663b0d676059fdafc2d49a527814889b3aa40f6e10": { "jp": { - "updatedAt": "2025-11-26T07:24:12.296Z" + "updatedAt": "2025-11-27T09:09:00.234Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.295Z" + "updatedAt": "2025-11-27T09:09:00.232Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.296Z" + "updatedAt": "2025-11-27T09:09:00.235Z" } } }, "11aa99a1bdc8390230a974032f545ad7fc914b9d7d7512e6f3d523c3c3315925": { "25ab99f304def64235d114ed61495f4a871f63a473b431f04505d22d84acd92b": { "ru": { - "updatedAt": "2025-11-26T07:24:19.100Z" + "updatedAt": "2025-11-27T09:09:00.202Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.099Z" + "updatedAt": "2025-11-27T09:09:00.200Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:19.100Z" + "updatedAt": "2025-11-27T09:09:00.203Z" } } }, "15a59bf1722e4b12c28df70766e0baab4b9d5a6f0a0473fcdaa0c562dee3986b": { "38c435040eaac3147a4b165e8f2e2eea100525b71769ee62c7de7604c2c7decd": { "ru": { - "updatedAt": "2025-11-26T07:24:19.099Z" + "updatedAt": "2025-11-27T09:09:00.202Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.099Z" + "updatedAt": "2025-11-27T09:09:00.200Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:19.099Z" + "updatedAt": "2025-11-27T09:09:00.201Z" } } }, "a840f2497ddf7c24e3414728a66fe927662c74a0473293e11a93429df3ef7e1d": { "14417b042f80b8359063dc1571b796f4f9775e28a90c36436b10c493b04268af": { "ru": { - "updatedAt": "2025-11-26T07:24:19.100Z" + "updatedAt": "2025-11-27T09:09:00.203Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.100Z" + "updatedAt": "2025-11-27T09:09:00.203Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:19.100Z" + "updatedAt": "2025-11-27T09:09:00.215Z" } } }, "e843b874a573838613448a25478fe1be3cfe8e1a5c23c7d816af626567769147": { "8cb205aa323de3c2fa63f58b08365d61b559f9ba1b8554ec982b293d9a83f80b": { "ru": { - "updatedAt": "2025-11-26T07:24:19.099Z" + "updatedAt": "2025-11-27T09:09:00.201Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.099Z" + "updatedAt": "2025-11-27T09:09:00.202Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:19.099Z" + "updatedAt": "2025-11-27T09:09:00.202Z" } } }, "3177435d774099d4ba686628bc971ccc42a54d0a0a211c8a4424bbc544e08540": { "f15d74887e89dbc77f9957e1568c4842460915108734894efa6e2f081275d68b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.060Z" + "updatedAt": "2025-11-27T09:08:51.736Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.060Z" + "updatedAt": "2025-11-27T09:08:51.734Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.060Z" + "updatedAt": "2025-11-27T09:08:51.735Z" } } }, "3caedd95aefa51553be1069772560367e021728814e3e4cb4e732e19460e0502": { "c808220f60eb5bb176af1e26539836830b9934b93a9bc1e1e62fd9b90ce36bc8": { "jp": { - "updatedAt": "2025-11-26T07:24:12.081Z" + "updatedAt": "2025-11-27T09:08:51.892Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.081Z" + "updatedAt": "2025-11-27T09:08:51.892Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.081Z" + "updatedAt": "2025-11-27T09:08:51.891Z" } } }, "853246cca55f655f764269048050edb509e178c1ed6b34530b7a3aae600ec2b8": { "0a1abce96f2027f1611f7096e0422a02de923c3698460cb2c242ae3092e25c81": { "zh": { - "updatedAt": "2025-11-26T07:24:02.714Z" + "updatedAt": "2025-11-27T09:08:51.879Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.078Z" + "updatedAt": "2025-11-27T09:08:51.887Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.078Z" + "updatedAt": "2025-11-27T09:08:51.887Z" } } }, "a030bf426b6662b4674be21ff621cb7fabbfd26f971ddb89ac770557065aa0cc": { "f732d015e8ca7a50761bad6c4404360438b7df18567a96df59faad98662b6017": { "jp": { - "updatedAt": "2025-11-26T07:24:12.078Z" + "updatedAt": "2025-11-27T09:08:51.887Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.714Z" + "updatedAt": "2025-11-27T09:08:51.879Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.714Z" + "updatedAt": "2025-11-27T09:08:51.879Z" } } }, "06c88066bda47d4a934bcdcd6f121c4c1e22b06d73242fdfb1ab310a2564cf7a": { "f10ca14dce06ec46cdd4e21bcf3783e50fb8f8e2c7873cc6b828db0e89c91024": { "jp": { - "updatedAt": "2025-11-26T07:24:12.079Z" + "updatedAt": "2025-11-27T09:08:51.889Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.081Z" + "updatedAt": "2025-11-27T09:08:51.890Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.080Z" + "updatedAt": "2025-11-27T09:08:51.890Z" } } }, @@ -10337,265 +10381,276 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.080Z" } + }, + "fd960e0ad4a4e719414c642095987287a615859dcdfe78dc5e4ade0ad15a3dc3": { + "ru": { + "updatedAt": "2025-11-27T09:08:51.880Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:51.880Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:51.880Z" + } } }, "48bd4337b75cd02afdef9e5066ef37aa097bb2376a0997cda1862ec2672e0bb6": { "c01428e3868677f56a7361089108618d1aa1b3f64f9d078f8a9dd079aeceadf1": { "jp": { - "updatedAt": "2025-11-26T07:24:12.088Z" + "updatedAt": "2025-11-27T09:08:51.908Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.088Z" + "updatedAt": "2025-11-27T09:08:51.908Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.088Z" + "updatedAt": "2025-11-27T09:08:51.908Z" } } }, "4a871b3501c8910734e45bfd046fb170eead507a557e7fc029a9720169d74f60": { "a1bfd48d5bf528dd7d49ff5929721a27fac3e265e20a187bfe5603465299248f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.078Z" + "updatedAt": "2025-11-27T09:08:51.887Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.079Z" + "updatedAt": "2025-11-27T09:08:51.888Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.078Z" + "updatedAt": "2025-11-27T09:08:51.886Z" } } }, "50f0ba5685aaf3e9d2d05dffeeaa45f47b7ed622dc20465bd6aa71e7192a1a6f": { "430792450e0e247081db5645bfe27bcdf7c5efb4c46fb798c742aecf01bea55d": { "jp": { - "updatedAt": "2025-11-26T07:24:12.085Z" + "updatedAt": "2025-11-27T09:08:51.901Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.087Z" + "updatedAt": "2025-11-27T09:08:51.905Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.086Z" + "updatedAt": "2025-11-27T09:08:51.903Z" } } }, "5929e4805377229948887e5ba720274840b70d5c8448deadfee3a33803c24777": { "4923fea66c23915a7ee88662e5a25bc88b6e63399b5f8007edd0a604f6ff29e9": { "jp": { - "updatedAt": "2025-11-26T07:24:02.716Z" + "updatedAt": "2025-11-27T09:08:51.885Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.716Z" + "updatedAt": "2025-11-27T09:08:51.884Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.717Z" + "updatedAt": "2025-11-27T09:08:51.885Z" } } }, "7f4f10424fd5d15211a9b2e7f5376cd61876478ca1e288c42f77a9d27815ed3b": { "49a85cf8c399228a66495a6ff70df4eb90e968fc2a6386b6d0c3a47d1c6934c0": { "jp": { - "updatedAt": "2025-11-26T07:24:12.088Z" + "updatedAt": "2025-11-27T09:08:51.909Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.088Z" + "updatedAt": "2025-11-27T09:08:51.909Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.081Z" + "updatedAt": "2025-11-27T09:08:51.891Z" } } }, "8fac3eeff35b863ef1c1a857ec5cc7ec6c5e04a3ba1b53c0613d799e0ab40033": { "cff3cef9c9971227c006470a36ab779082e9292add9a0d6480da3c2873a882cb": { "jp": { - "updatedAt": "2025-11-26T07:24:02.717Z" + "updatedAt": "2025-11-27T09:08:51.886Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.716Z" + "updatedAt": "2025-11-27T09:08:51.885Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.079Z" + "updatedAt": "2025-11-27T09:08:51.889Z" } } }, "9e83bc587c43f98717bc07389ed6804daa34989f04edf33b7edd42ad22e54a04": { "a8b19dcf95129e6fd57560f1e472da4f89054602d55c24eaece1042761ef16fc": { "jp": { - "updatedAt": "2025-11-26T07:24:12.079Z" + "updatedAt": "2025-11-27T09:08:51.888Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.081Z" + "updatedAt": "2025-11-27T09:08:51.891Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.079Z" + "updatedAt": "2025-11-27T09:08:51.888Z" } } }, "d15bbab335414d4d8b8963bf84d8e6840415a3fc839c797f41e13afb347c0e66": { "7eff53190c5a3759339978f7f7f8df28a9281bca9df3218c5f48b98aefdb5e9b": { "jp": { - "updatedAt": "2025-11-26T07:24:02.717Z" + "updatedAt": "2025-11-27T09:08:51.886Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.717Z" + "updatedAt": "2025-11-27T09:08:51.885Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.717Z" + "updatedAt": "2025-11-27T09:08:51.886Z" } } }, "e524f82a69f9ba0c9ca77d93ce6f9a713d13f108480d3945dba1962f5772ee46": { "fbd98a73453eb2fe0d0b40e9e69f2c6435180be06375fe9f19e1bb909573407f": { "jp": { - "updatedAt": "2025-11-26T07:24:02.717Z" + "updatedAt": "2025-11-27T09:08:51.886Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.716Z" + "updatedAt": "2025-11-27T09:08:51.885Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.716Z" + "updatedAt": "2025-11-27T09:08:51.885Z" } } }, "e56d08b11b32c8a731d04c36c50cafc7de9be3b833de6fe375d9ae475833f8f5": { "c6088045b7960efa88bddde09c30fbb47e3d1d22cc4c0b8ea35b6920270f01d0": { "jp": { - "updatedAt": "2025-11-26T07:24:12.079Z" + "updatedAt": "2025-11-27T09:08:51.889Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.079Z" + "updatedAt": "2025-11-27T09:08:51.888Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.078Z" + "updatedAt": "2025-11-27T09:08:51.887Z" } } }, "e9001fe7adae3ee521c4e8d3e207693d2c40ab3153b629428457ad95a126e11f": { "c925c5d3c0431c9ee3487e60721536bea2826b1bda255f0e4e9add7b81f2f4d6": { "jp": { - "updatedAt": "2025-11-26T07:24:12.081Z" + "updatedAt": "2025-11-27T09:08:51.890Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.080Z" + "updatedAt": "2025-11-27T09:08:51.890Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.080Z" + "updatedAt": "2025-11-27T09:08:51.890Z" } } }, "fda80bc8aec70f334713b34cf3411a9095abb45fdde35b4e250c9120d32dc223": { "9447f95299ab26e2dc058db4d4939aabd60236798a21696a52feac53fd714475": { "jp": { - "updatedAt": "2025-11-26T07:24:12.080Z" + "updatedAt": "2025-11-27T09:08:51.889Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.079Z" + "updatedAt": "2025-11-27T09:08:51.889Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.079Z" + "updatedAt": "2025-11-27T09:08:51.888Z" } } }, "14ced74ae89aced82700fb3f104dd8a0694c5c0ea94167d31d43f1c1be2fb09b": { "cb8ca75fddc3df71a3d63cbd9d7f7fe682786749238844ed9083730bc07d7cec": { "jp": { - "updatedAt": "2025-11-26T07:24:02.722Z" + "updatedAt": "2025-11-27T09:08:51.932Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.724Z" + "updatedAt": "2025-11-27T09:08:51.935Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.722Z" + "updatedAt": "2025-11-27T09:08:51.930Z" } } }, "1e26f8437fd2a7483c1f29a2f11a909ff981448ebd08fd7cdce54aaa31e8a511": { "1c028977ab28be717baea644e55afe62584b4eec751926769c92c424bedadeac": { "jp": { - "updatedAt": "2025-11-26T07:24:12.087Z" + "updatedAt": "2025-11-27T09:08:51.906Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.088Z" + "updatedAt": "2025-11-27T09:08:51.907Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.087Z" + "updatedAt": "2025-11-27T09:08:51.906Z" } } }, "1f59d80250965bf621c38a8cbddf5b2e006f67743e1775da704d9729e6c40a23": { "e842588d4a31eebd61f2d17142402ac96b93d20ff0258eb94f82f5209a3ad2a1": { "jp": { - "updatedAt": "2025-11-26T07:24:12.084Z" + "updatedAt": "2025-11-27T09:08:51.899Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.087Z" + "updatedAt": "2025-11-27T09:08:51.904Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.087Z" + "updatedAt": "2025-11-27T09:08:51.906Z" } } }, "2024dccfa8cbc20dfede60ca15d6ac2b721789dba97415066cafa133d075bc71": { "ed44ffe66e8c1a1ecf0ca6bc07d18f43272ec161a9e95d0e798e64dfe432b703": { "jp": { - "updatedAt": "2025-11-26T07:24:12.086Z" + "updatedAt": "2025-11-27T09:08:51.902Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.085Z" + "updatedAt": "2025-11-27T09:08:51.902Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.086Z" + "updatedAt": "2025-11-27T09:08:51.903Z" } } }, "44c5128a3edb936a9926b4b513a202ff12d0f2f99f0c07bcfd8be1cc4723be33": { "ae80526735bffb74b999220357c744c052668c14fe1ac555f4b49132850620f3": { "jp": { - "updatedAt": "2025-11-26T07:24:02.720Z" + "updatedAt": "2025-11-27T09:08:51.917Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.089Z" + "updatedAt": "2025-11-27T09:08:51.910Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.720Z" + "updatedAt": "2025-11-27T09:08:51.916Z" } } }, "46ae531d604a943d4340ae2e6288c87ed68270217d4e05122a7521d428519ef3": { "fe9a9e2137d1cae06dba9ff8e83ecaa3649ff47e77c5892e5e7eb1529b298c64": { "jp": { - "updatedAt": "2025-11-26T07:24:02.720Z" + "updatedAt": "2025-11-27T09:08:51.917Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.721Z" + "updatedAt": "2025-11-27T09:08:51.919Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.720Z" + "updatedAt": "2025-11-27T09:08:51.917Z" } } }, "54e53c16ab3f42ddf8578d9835bb9d7b843c7a55b19f498defcfab1724ec045c": { "35a38f29e12929f2b225b703480bed8e37445662a61cc1d374ec38bd2400c7f2": { "jp": { - "updatedAt": "2025-11-26T07:24:02.722Z" + "updatedAt": "2025-11-27T09:08:51.930Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.721Z" + "updatedAt": "2025-11-27T09:08:51.918Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.721Z" + "updatedAt": "2025-11-27T09:08:51.919Z" } } }, "687b783276b703fe2b34bfa19c6e6eaaf919ae2edb3b092772cfd3710319c962": { "355157027a1047c82f7755ab15b218d98a8e5232865d69edf8a51337a364b541": { "jp": { - "updatedAt": "2025-11-26T07:24:12.085Z" + "updatedAt": "2025-11-27T09:08:51.900Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.086Z" + "updatedAt": "2025-11-27T09:08:51.903Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.087Z" + "updatedAt": "2025-11-27T09:08:51.905Z" } } }, @@ -10610,148 +10665,159 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.082Z" } + }, + "744f86f0af840c394271f9f85293e3266bb9cf9887e2f173377f48cf9eb8cc0c": { + "jp": { + "updatedAt": "2025-11-27T09:08:51.893Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:51.894Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:51.894Z" + } } }, "afabce4e754c0f29b7593d81718787eebb8e7a9f5199eff6f15750cdc8d874f1": { "b814da04f0b9e71448b22e3ba39231b2c53371ce962656e59fcc8215b53d94b5": { "jp": { - "updatedAt": "2025-11-26T07:24:02.720Z" + "updatedAt": "2025-11-27T09:08:51.917Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.087Z" + "updatedAt": "2025-11-27T09:08:51.905Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.085Z" + "updatedAt": "2025-11-27T09:08:51.901Z" } } }, "b27a2ee952ba7dd3cf6b2ca009a0cd8b86282ef4f43897856e759dafd88540fe": { "32217bcd37f2a7cf5746ec775356d9800b981082b7b912e76343ed0600518f76": { "jp": { - "updatedAt": "2025-11-26T07:24:12.087Z" + "updatedAt": "2025-11-27T09:08:51.905Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.085Z" + "updatedAt": "2025-11-27T09:08:51.901Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.085Z" + "updatedAt": "2025-11-27T09:08:51.901Z" } } }, "d1dee74d727375041e64ceadd78df956b10784ab7e1b4ac16460115a7e9d4ef8": { "469305bed4de1b5eb391960ebef6f0f5096cd86b537e42c0f37ee9f35e087a4c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.086Z" + "updatedAt": "2025-11-27T09:08:51.903Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.085Z" + "updatedAt": "2025-11-27T09:08:51.902Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.086Z" + "updatedAt": "2025-11-27T09:08:51.902Z" } } }, "d536aa9054b9ba72e39103f4f8845be09447ae23a9e70d3baf478d3d2c2b8737": { "74f18e7520467c6186fd7fa39a49176648617574146477b17ce7062d7698f2df": { "jp": { - "updatedAt": "2025-11-26T07:24:12.088Z" + "updatedAt": "2025-11-27T09:08:51.907Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.088Z" + "updatedAt": "2025-11-27T09:08:51.908Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.087Z" + "updatedAt": "2025-11-27T09:08:51.905Z" } } }, "e56710647bd4bc05384aa8d37b2b94c4c5fe719ebbc36c598369a813b3fab06f": { "7fdb5ba5a1e64258c7ea2522a25a1d7238e73b82d6eb92fdda33bd598193863c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.086Z" + "updatedAt": "2025-11-27T09:08:51.904Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.086Z" + "updatedAt": "2025-11-27T09:08:51.904Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.086Z" + "updatedAt": "2025-11-27T09:08:51.903Z" } } }, "e631f7491be262a58a274692876ad3b89d0729e8d0294ce9b3dfa4ed45f95788": { "f3609e7b117bdfa85ee3d950a8fd8f7afee96311aea43d1a833a253a135d50ab": { "jp": { - "updatedAt": "2025-11-26T07:24:02.721Z" + "updatedAt": "2025-11-27T09:08:51.918Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.720Z" + "updatedAt": "2025-11-27T09:08:51.916Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.720Z" + "updatedAt": "2025-11-27T09:08:51.916Z" } } }, "ec626ca92c333df76f0e8018ae7bd3a25ac79ecb449e8db31702fb29bb04506d": { "ec424602c359c5773d3bb1eb5b167bdedb80fb98f907e5848b487a5b40325f67": { "jp": { - "updatedAt": "2025-11-26T07:24:12.085Z" + "updatedAt": "2025-11-27T09:08:51.901Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.086Z" + "updatedAt": "2025-11-27T09:08:51.902Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.086Z" + "updatedAt": "2025-11-27T09:08:51.902Z" } } }, "fc2a90cf202e8e1844cfa26c61201f10a6c234df6585fc1c8aff86d125238563": { "5680229b7edd18b624f3a4822177aadd2e3930de72a0edd50a0d2924b785a146": { "jp": { - "updatedAt": "2025-11-26T07:24:02.723Z" + "updatedAt": "2025-11-27T09:08:51.934Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.723Z" + "updatedAt": "2025-11-27T09:08:51.933Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.723Z" + "updatedAt": "2025-11-27T09:08:51.934Z" } } }, "1646d3380fb5c92ec41482a9d98b525c37462130d6b01f32e1855b0e5f91c39e": { "ee6d9f1af26926d6377c040c2405ae576469664c532845e1d506079f9a027314": { "jp": { - "updatedAt": "2025-11-26T07:24:02.727Z" + "updatedAt": "2025-11-27T09:08:51.943Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.727Z" + "updatedAt": "2025-11-27T09:08:51.942Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.728Z" + "updatedAt": "2025-11-27T09:08:51.943Z" } } }, "1ca8dfc5de116b6a2aecfd00677ce016075dee9e46cc6f57c85776d3ea9b3bd5": { "e84e0b80c498c3151e15f60e104f2cb38c6e40319081435e228dbfd13acf010e": { "jp": { - "updatedAt": "2025-11-26T07:24:02.722Z" + "updatedAt": "2025-11-27T09:08:51.930Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.721Z" + "updatedAt": "2025-11-27T09:08:51.919Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.722Z" + "updatedAt": "2025-11-27T09:08:51.931Z" } } }, "1d1e36aa27a61854f94b1f60418f1a1d666d53319de3e83255d9388fcdfb4069": { "a0e30e85a93f908ea864b663f52f1dfce2a0d6a87372b01c7bf971316d114876": { "jp": { - "updatedAt": "2025-11-26T07:24:02.729Z" + "updatedAt": "2025-11-27T09:08:51.946Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.729Z" + "updatedAt": "2025-11-27T09:08:51.945Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.727Z" + "updatedAt": "2025-11-27T09:08:51.941Z" } } }, @@ -10769,195 +10835,195 @@ }, "dbf76c8c4d494516e235aa48fe905a94dc6f8466afb98397c14a38f6ae43f681": { "ru": { - "updatedAt": "2025-11-26T07:24:02.724Z" + "updatedAt": "2025-11-27T09:08:51.935Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.724Z" + "updatedAt": "2025-11-27T09:08:51.936Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.724Z" + "updatedAt": "2025-11-27T09:08:51.936Z" } } }, "4d9f585a978f327ccfb66e8db78fa87ec8754d231c098b1a8929e4f912be5651": { "f0713cc147455f15a45af300160f8c01445b53f171e027819d998a3df1dc3b17": { "jp": { - "updatedAt": "2025-11-26T07:24:02.723Z" + "updatedAt": "2025-11-27T09:08:51.932Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.722Z" + "updatedAt": "2025-11-27T09:08:51.931Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.722Z" + "updatedAt": "2025-11-27T09:08:51.931Z" } } }, "509c73a63f9d009e86d97956ae4e1701003ed2be70dd32b5c56c66bd65c22609": { "c01d58d811ef80a75a56846d05c7b54259075a78eb6a2deb665f4405f861a7e2": { "jp": { - "updatedAt": "2025-11-26T07:24:02.727Z" + "updatedAt": "2025-11-27T09:08:51.942Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.728Z" + "updatedAt": "2025-11-27T09:08:51.944Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.727Z" + "updatedAt": "2025-11-27T09:08:51.943Z" } } }, "5bd267d7d3d49be2e95b491604023a269bf78bee49b4a83eefa9352690913107": { "9e71d3c2fa185cdf2d0231b06c410ed213fa00b972cdbfefe21a9aa8916bf03a": { "jp": { - "updatedAt": "2025-11-26T07:24:02.728Z" + "updatedAt": "2025-11-27T09:08:51.944Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.728Z" + "updatedAt": "2025-11-27T09:08:51.943Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.729Z" + "updatedAt": "2025-11-27T09:08:51.945Z" } } }, "66dafb9b646deaa517a7b992eec446570c152c02802db14e18047fc0fba7a0b1": { "f246fb415a6d823d2e1229aaf83e9eb73611213283605b91a0a23a1dbad24f50": { "jp": { - "updatedAt": "2025-11-26T07:24:02.728Z" + "updatedAt": "2025-11-27T09:08:51.943Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.728Z" + "updatedAt": "2025-11-27T09:08:51.943Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.726Z" + "updatedAt": "2025-11-27T09:08:51.941Z" } } }, "7d4c81a663e077a5e75150c0e14d27c4ec51b540adb7aed379113d299f3c76bf": { "9a1b6a07af2168ede1ef0940be49f9f7462ec53241267251f36458e33a1bd688": { "zh": { - "updatedAt": "2025-11-26T07:24:02.726Z" + "updatedAt": "2025-11-27T09:08:51.940Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.726Z" + "updatedAt": "2025-11-27T09:08:51.940Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.725Z" + "updatedAt": "2025-11-27T09:08:51.939Z" } } }, "8b2242e50cc879742f4d4efca957625a1106cb09f45a18de469646abc82467e7": { "343ceb09449e64360e7e7fca397cfc927ac8e348304b9893b3946e0ca65d8fae": { "jp": { - "updatedAt": "2025-11-26T07:24:02.722Z" + "updatedAt": "2025-11-27T09:08:51.920Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.722Z" + "updatedAt": "2025-11-27T09:08:51.920Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.722Z" + "updatedAt": "2025-11-27T09:08:51.931Z" } } }, "c02bec6d7a15ddb4727d64f0c82f001b4a6994e6095794f3b35c713c1c69cd75": { "f05e5879650490f810241a7e1f46402021938daaf4688d3368c183eeb6dd5b65": { "jp": { - "updatedAt": "2025-11-26T07:24:02.726Z" + "updatedAt": "2025-11-27T09:08:51.941Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.726Z" + "updatedAt": "2025-11-27T09:08:51.939Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.727Z" + "updatedAt": "2025-11-27T09:08:51.941Z" } } }, "c35a4c218452080886d36470ffc05c5a0554e095f00432e0d7735900c7ad9435": { "9e5d4bd1e5379d30156d61671b947abb64b0c0e6ce551d838d6da2c7907d2ff3": { "jp": { - "updatedAt": "2025-11-26T07:24:02.727Z" + "updatedAt": "2025-11-27T09:08:51.942Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.725Z" + "updatedAt": "2025-11-27T09:08:51.939Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.726Z" + "updatedAt": "2025-11-27T09:08:51.941Z" } } }, "c97fb19d4fbdf784a9e8916b6965cc8a3ea8fe90f09cfb7c399b3b59efc788a6": { "7b99574846f0eeee45a44964ff5ba57e7c06ca117dc6786a3b1b13201c58cc4b": { "jp": { - "updatedAt": "2025-11-26T07:24:02.721Z" + "updatedAt": "2025-11-27T09:08:51.919Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.723Z" + "updatedAt": "2025-11-27T09:08:51.933Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.722Z" + "updatedAt": "2025-11-27T09:08:51.920Z" } } }, "cfcb90141d0b37458f1c2f25a8e506c7c2ceb4cb4e4c27f996e474f6e8c5b159": { "2e2c5497230ef2998811f833ae91e6403540c85762a127d81135370dfbdb4e46": { "jp": { - "updatedAt": "2025-11-26T07:24:02.728Z" + "updatedAt": "2025-11-27T09:08:51.944Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.727Z" + "updatedAt": "2025-11-27T09:08:51.942Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.728Z" + "updatedAt": "2025-11-27T09:08:51.944Z" } } }, "d5c4d2aff5bcd49a39c5a8969a66d9058ea8a6641de98e1f49a707b2a5eb6a06": { "c0bd7005e30dbceab4454c02004199f159d34c9dec509a5c13f2a23d8b720cff": { "jp": { - "updatedAt": "2025-11-26T07:24:02.721Z" + "updatedAt": "2025-11-27T09:08:51.918Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.721Z" + "updatedAt": "2025-11-27T09:08:51.918Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.720Z" + "updatedAt": "2025-11-27T09:08:51.918Z" } } }, "eac3b18e7887fa005afb72b037867082f68f247bb61d91f3260e28d28cb1e85a": { "d2aa320a8841951470c1da7b5a35b1b69bf507d11d9b795481a4e587ec4b7bdd": { "jp": { - "updatedAt": "2025-11-26T07:24:02.723Z" + "updatedAt": "2025-11-27T09:08:51.932Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.721Z" + "updatedAt": "2025-11-27T09:08:51.920Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.721Z" + "updatedAt": "2025-11-27T09:08:51.920Z" } } }, "211a9e255fdac9865968252978823dbe623bf314b09a28779424fb52243ba37e": { "267373ee71eb85826ed3e41dfc0938bb71fbd6c83484df63fbdce933b1a28d1e": { "jp": { - "updatedAt": "2025-11-26T07:24:02.729Z" + "updatedAt": "2025-11-27T09:08:51.947Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.729Z" + "updatedAt": "2025-11-27T09:08:51.946Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.730Z" + "updatedAt": "2025-11-27T09:08:51.948Z" } } }, "4ba1eac8610621c18306898ccbcb9d4eaf5521b4b230d99cc774ec22219c9a28": { "1aafbee1019940fc3e073990ae3817e08af6f7e2ec670ece7d26a194827351bb": { "jp": { - "updatedAt": "2025-11-26T07:24:02.726Z" + "updatedAt": "2025-11-27T09:08:51.940Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.726Z" + "updatedAt": "2025-11-27T09:08:51.940Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.726Z" + "updatedAt": "2025-11-27T09:08:51.940Z" } } }, @@ -10975,676 +11041,676 @@ }, "6b408329e73e771ef16b20b1ea0ca91a113a919ef9db09031d4181b038bc38ec": { "ru": { - "updatedAt": "2025-11-26T07:24:02.724Z" + "updatedAt": "2025-11-27T09:08:51.936Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.724Z" + "updatedAt": "2025-11-27T09:08:51.936Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.724Z" + "updatedAt": "2025-11-27T09:08:51.937Z" } } }, "67ea1760ac764890c103f9795d76f618a583b0bbbe0d32ad38a77c020d119d40": { "9a32d6666fc830213628b9c378f0039bc1280491f729f8bb75dd81bd764f13e5": { "jp": { - "updatedAt": "2025-11-26T07:24:02.730Z" + "updatedAt": "2025-11-27T09:08:51.948Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.730Z" + "updatedAt": "2025-11-27T09:08:51.947Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.730Z" + "updatedAt": "2025-11-27T09:08:51.947Z" } } }, "71b7871a9e60b8462bb9bc1ee2ff376b1641403aad826100b88e087426e5841f": { "3ad40142a5980106f0b667308b9b61cd075b9a565aa267c085988df32d9f9d20": { "jp": { - "updatedAt": "2025-11-26T07:24:02.729Z" + "updatedAt": "2025-11-27T09:08:51.945Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.729Z" + "updatedAt": "2025-11-27T09:08:51.945Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.728Z" + "updatedAt": "2025-11-27T09:08:51.944Z" } } }, "a9dd86f5f7da605aa9337f714a106fa513a631fcf9a168aa7b4e9a3b7ccaa531": { "ea6fc6dcc9635bc1877901795f75089be17712230ae183401a7e6eeaa9cfcf78": { "jp": { - "updatedAt": "2025-11-26T07:24:02.729Z" + "updatedAt": "2025-11-27T09:08:51.946Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.729Z" + "updatedAt": "2025-11-27T09:08:51.945Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.729Z" + "updatedAt": "2025-11-27T09:08:51.945Z" } } }, "b4b5cab881a02e5c4333f93e3149c6242284e0666d745952f3ccdc86593f7b52": { "112d13bcf3046cf70aa9ad7b11bd473fb40eb530504362a77d2a53dd8f9adac1": { "jp": { - "updatedAt": "2025-11-26T07:24:02.726Z" + "updatedAt": "2025-11-27T09:08:51.939Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.726Z" + "updatedAt": "2025-11-27T09:08:51.940Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.726Z" + "updatedAt": "2025-11-27T09:08:51.941Z" } } }, "e21164b6c8802133bb1a3d2aafc3fd517ab74e6f8d293b7d293ae968782a8bd6": { "04d3d33fa3cda8a0df74a6fb806ee0f2d01d7cd25cf9f21c9e07d1830f9a9a6c": { "jp": { - "updatedAt": "2025-11-26T07:24:02.725Z" + "updatedAt": "2025-11-27T09:08:51.937Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.724Z" + "updatedAt": "2025-11-27T09:08:51.937Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.725Z" + "updatedAt": "2025-11-27T09:08:51.937Z" } } }, "f9aa45e8fc85d0cb2d4c76b0e287f8743a40e6d92257f98ad0691dbde7bc3a9e": { "4866f2bf5a753196ff65a8b94a288fa39116ec9e4deeb7ae77c0598af8d582d9": { "jp": { - "updatedAt": "2025-11-26T07:24:02.727Z" + "updatedAt": "2025-11-27T09:08:51.942Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.727Z" + "updatedAt": "2025-11-27T09:08:51.941Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.726Z" + "updatedAt": "2025-11-27T09:08:51.939Z" } } }, "3e29eb5aca75381e4ec8ade4e6a0cf7d26b53d4a25cb26660ec2c44647941a73": { "c0bfc76e21aac5582f52b976b44aa4baf44b8f76caa3d562ec73e6e4ef161a92": { "jp": { - "updatedAt": "2025-11-26T07:24:12.090Z" + "updatedAt": "2025-11-27T09:08:51.989Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.746Z" + "updatedAt": "2025-11-27T09:08:51.978Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.746Z" + "updatedAt": "2025-11-27T09:08:51.980Z" } } }, "4b875d4cf08501af46c9a0dc4af0b755918205b50ba44a03d48aab3f7f49ac54": { "658a06aa55917c46e77861ee9b9b9643be0049c255c7052d4f6ae6166e655b01": { "jp": { - "updatedAt": "2025-11-26T07:24:12.092Z" + "updatedAt": "2025-11-27T09:08:51.991Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.096Z" + "updatedAt": "2025-11-27T09:08:51.999Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.092Z" + "updatedAt": "2025-11-27T09:08:51.992Z" } } }, "50ddd976e3ab8042db7b5db277b40561a4de66f66d7343d572a7ddd20ad31bd7": { "0aacc185d8105f7e3ea27585dc11ab225da3bb6c1db23c8daa11af166d8e972a": { "jp": { - "updatedAt": "2025-11-26T07:24:12.092Z" + "updatedAt": "2025-11-27T09:08:51.991Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.092Z" + "updatedAt": "2025-11-27T09:08:51.991Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.091Z" + "updatedAt": "2025-11-27T09:08:51.990Z" } } }, "54e7a0d28f060089af44ed7367d75f254a6d1b252f6ea6274e58dbe249470b30": { "4ced947fe881a2f40e14c2be1395d6c2cc3e15fe93e42e71df52ec929c2dcea4": { "ru": { - "updatedAt": "2025-11-26T07:24:12.092Z" + "updatedAt": "2025-11-27T09:08:51.992Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.092Z" + "updatedAt": "2025-11-27T09:08:51.993Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.096Z" + "updatedAt": "2025-11-27T09:08:51.999Z" } } }, "7a97c0a8a1d7a2b7124253b37f3cdff0f274d654965381e7ee3aeb4db3323631": { "ed2621c01542cd6c73825e5fe7639beff16cce375577d0d908b8b02c4bc1371b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.091Z" + "updatedAt": "2025-11-27T09:08:51.990Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.091Z" + "updatedAt": "2025-11-27T09:08:51.975Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.744Z" + "updatedAt": "2025-11-27T09:08:51.975Z" } } }, "893f6ba96a900463e4a20bfebef45d262bc3a3e1452bbe2f889f333b52e5fee5": { "b3a0a7a9c4f2e4c526bb71ba0bc5e6dac553aa232350b1910ad7fbf035734c06": { "jp": { - "updatedAt": "2025-11-26T07:24:02.745Z" + "updatedAt": "2025-11-27T09:08:51.977Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.744Z" + "updatedAt": "2025-11-27T09:08:51.975Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.746Z" + "updatedAt": "2025-11-27T09:08:51.979Z" } } }, "95a73804027437518f6cb49fd17638db0b1d6b9361ef329c1d59b49231f45112": { "e13f5fe9c753ab5e1cd5c3b9ef8db4c7e56caa299572d07d0368d8af887e99a3": { "jp": { - "updatedAt": "2025-11-26T07:24:12.092Z" + "updatedAt": "2025-11-27T09:08:51.993Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.096Z" + "updatedAt": "2025-11-27T09:08:51.999Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.092Z" + "updatedAt": "2025-11-27T09:08:51.992Z" } } }, "b624c3e0df3b6286b5d61538607b9030a6cd27129246f0485ab94c5f1b0efd7c": { "b4c584ccbf84daf8b7fe6aae9e1c393e8220224a9cecec6d5d2024e0cb7aa654": { "jp": { - "updatedAt": "2025-11-26T07:24:12.093Z" + "updatedAt": "2025-11-27T09:08:51.993Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.093Z" + "updatedAt": "2025-11-27T09:08:51.994Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.092Z" + "updatedAt": "2025-11-27T09:08:51.991Z" } } }, "e210bad99f1e8a957566f3f34d0853651d4ef532d83ae50fc1fb032d24e2dd28": { "0b6791886d00299fd2b8b71cf58d276a85916e6880c408cdbef78333d00f1d3a": { "jp": { - "updatedAt": "2025-11-26T07:24:12.091Z" + "updatedAt": "2025-11-27T09:08:51.990Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.093Z" + "updatedAt": "2025-11-27T09:08:51.993Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.096Z" + "updatedAt": "2025-11-27T09:08:51.999Z" } } }, "e77458d405603be885e941ab39a2c03ea7c893b38a1ed1b1c4a5beb9a703c04f": { "f78ef201b8464bb62128fd17fb1bcf8d3f42f167e5b4f4c8547866c5ecfbc7a9": { "jp": { - "updatedAt": "2025-11-26T07:24:12.091Z" + "updatedAt": "2025-11-27T09:08:51.990Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.091Z" + "updatedAt": "2025-11-27T09:08:51.990Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.091Z" + "updatedAt": "2025-11-27T09:08:51.989Z" } } }, "f38d701b9050913191927978c4e261dec48019c2bef4c6a3139c4059c71afaf8": { "0e1ad7c4e88f314e2b810b6f27ec43ba78bfe09eca3eec7d023374756f07bc64": { "jp": { - "updatedAt": "2025-11-26T07:24:02.746Z" + "updatedAt": "2025-11-27T09:08:51.980Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.745Z" + "updatedAt": "2025-11-27T09:08:51.977Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.090Z" + "updatedAt": "2025-11-27T09:08:51.989Z" } } }, "06b6f9b31956eb6e3cebe7421e22abac9ad0de32434585b3bedb572ca22fe779": { "ac6f44e72647bc384df3ba5b105e8bc37e9ce25a9c1c104570232ed738108026": { "jp": { - "updatedAt": "2025-11-26T07:24:18.938Z" + "updatedAt": "2025-11-27T09:08:52.093Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.938Z" + "updatedAt": "2025-11-27T09:08:52.095Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.936Z" + "updatedAt": "2025-11-27T09:08:52.088Z" } } }, "088f126360fc7b556a09516cc41a4880d4599464d2cb1ff9f6ea02417c6df429": { "04f510d66c9b376ce9989e4858fb9d1204bb45b666002f527435e252cc2dc4f8": { "jp": { - "updatedAt": "2025-11-26T07:24:12.108Z" + "updatedAt": "2025-11-27T09:08:52.114Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.108Z" + "updatedAt": "2025-11-27T09:08:52.114Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.101Z" + "updatedAt": "2025-11-27T09:08:52.088Z" } } }, "13195f1c973faf9aadf39f45b6a4df596efad0f6e4df019051e13dc77eb9fdfa": { "948846a8743f4a90ac77c6ba53e93f5386df8d5310a4b8182265798313dc6dc9": { "jp": { - "updatedAt": "2025-11-26T07:24:18.936Z" + "updatedAt": "2025-11-27T09:08:52.088Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.099Z" + "updatedAt": "2025-11-27T09:08:52.098Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.100Z" + "updatedAt": "2025-11-27T09:08:52.099Z" } } }, "2505693dc142fd4f445b3882dc548fa0cc38adca662a63dbfdb437b0f67776ba": { "f86b0dd8e53eca99c2eba408e02d7d92a906e77aee88846c9e24a2d79f1d998e": { "jp": { - "updatedAt": "2025-11-26T07:24:18.936Z" + "updatedAt": "2025-11-27T09:08:52.090Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.937Z" + "updatedAt": "2025-11-27T09:08:52.092Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.099Z" + "updatedAt": "2025-11-27T09:08:52.097Z" } } }, "266e0dc9c395c310374563d981fa2685a69b11a4eb800352e56423b5bd7e2901": { "d344c46f769e848e76522e3e0e64f31e4c4cd999a3de3ea3cc10400f0b2826ae": { "jp": { - "updatedAt": "2025-11-26T07:24:12.100Z" + "updatedAt": "2025-11-27T09:08:52.099Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.100Z" + "updatedAt": "2025-11-27T09:08:52.100Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.101Z" + "updatedAt": "2025-11-27T09:08:52.101Z" } } }, "3c3cdb595236de7ad8f9d05838ec2b8bf3f90caa6bca9eb1dbb703fe9b2c5f67": { "22c4567427f06c4ff596058d0963e1977f619d426a1cb0b04f22ad1721307091": { "jp": { - "updatedAt": "2025-11-26T07:24:18.937Z" + "updatedAt": "2025-11-27T09:08:52.090Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.930Z" + "updatedAt": "2025-11-27T09:08:52.077Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.931Z" + "updatedAt": "2025-11-27T09:08:52.077Z" } } }, "3cb2ac954c25f39475156759f2f4f8c8714328c659aaba596322bf83f3e3ecf3": { "da8c2bbfc6c34aa9551b3e0a532d71ec831fc09659ffc38734155072f907743e": { "jp": { - "updatedAt": "2025-11-26T07:24:18.938Z" + "updatedAt": "2025-11-27T09:08:52.094Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.928Z" + "updatedAt": "2025-11-27T09:08:52.073Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.937Z" + "updatedAt": "2025-11-27T09:08:52.092Z" } } }, "3f5009534c38cb29edcc48a3b2c5b50aa0363797569ad9ed3c962e075be3d711": { "e52f05211d11daf47cbab45322de5fb579805427116030493d255d74a6de33e6": { "jp": { - "updatedAt": "2025-11-26T07:24:18.931Z" + "updatedAt": "2025-11-27T09:08:52.079Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.931Z" + "updatedAt": "2025-11-27T09:08:52.079Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.929Z" + "updatedAt": "2025-11-27T09:08:52.075Z" } } }, "51d439a5ad94546b36a253aeeb85868911bfe6475f4fefb30756a75f43e01dc0": { "c9a05803f13e75801b4f09b8c52974299028da9cd5533d505c572edbdd11b9f8": { "jp": { - "updatedAt": "2025-11-26T07:24:18.931Z" + "updatedAt": "2025-11-27T09:08:52.078Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.931Z" + "updatedAt": "2025-11-27T09:08:52.078Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.931Z" + "updatedAt": "2025-11-27T09:08:52.078Z" } } }, "5227584ef900ca7684b844bf9b013a21d6faf12f8833191ac40e941a5fa9878f": { "5405382560ae38c848c605acfb1a4ec134912ef6bcad95aab5381530689e735b": { "jp": { - "updatedAt": "2025-11-26T07:24:18.932Z" + "updatedAt": "2025-11-27T09:08:52.079Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.932Z" + "updatedAt": "2025-11-27T09:08:52.079Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.931Z" + "updatedAt": "2025-11-27T09:08:52.078Z" } } }, "a5397922ad119e6b298a6b4b378a68f864ea43c8323107a35954165809de0589": { "488ca0a5b4cba0af7cf4ca440e3733d6860db7e0e1beb8403ae74e4cfd8e7753": { "jp": { - "updatedAt": "2025-11-26T07:24:18.929Z" + "updatedAt": "2025-11-27T09:08:52.073Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.937Z" + "updatedAt": "2025-11-27T09:08:52.093Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.937Z" + "updatedAt": "2025-11-27T09:08:52.092Z" } } }, "c6e56f828d1b34579ba790f93abaa05b29fb89f9585497258413971007a3a246": { "c2f203731c8694cfaf84b37109a789c0a0167657339f75db8fc7b685f948d2ea": { "jp": { - "updatedAt": "2025-11-26T07:24:18.932Z" + "updatedAt": "2025-11-27T09:08:52.079Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.929Z" + "updatedAt": "2025-11-27T09:08:52.075Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.931Z" + "updatedAt": "2025-11-27T09:08:52.078Z" } } }, "c8b0b34a39a4f363d421259bdd17b9dd8d0d01f815eda9607f0d9ef245895275": { "1126bfe846bb5fcdc4b0c7c2bfd10807cc64d6e12d190d2c824329258baf5efb": { "jp": { - "updatedAt": "2025-11-26T07:24:18.931Z" + "updatedAt": "2025-11-27T09:08:52.077Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.931Z" + "updatedAt": "2025-11-27T09:08:52.078Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.931Z" + "updatedAt": "2025-11-27T09:08:52.079Z" } } }, "ce10e9c3dd234b8bf0fa7265cc3f51606b9f80563a4be89f36f9805412c6a452": { "f80ac33db9f2499ec8763473f9aaab8f92e4f89d4fbb898fbee33da6e7d210d4": { "jp": { - "updatedAt": "2025-11-26T07:24:18.938Z" + "updatedAt": "2025-11-27T09:08:52.094Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.100Z" + "updatedAt": "2025-11-27T09:08:52.100Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.099Z" + "updatedAt": "2025-11-27T09:08:52.098Z" } } }, "e8941cfe3ebe51cf895d37bfced51319951864655bb65ed34110cfbbd542b577": { "1724335ae6c5171c92d1126311524dbb7f3ba7d451a7907320b5c0cbe7ebb3aa": { "jp": { - "updatedAt": "2025-11-26T07:24:12.100Z" + "updatedAt": "2025-11-27T09:08:52.100Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.937Z" + "updatedAt": "2025-11-27T09:08:52.093Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.099Z" + "updatedAt": "2025-11-27T09:08:52.098Z" } } }, "ee1d174b1119575726aa2ce11719dc7482af9a58eb1e4c20075010bcc5bc200a": { "85b1114daba44b005630b9c50a7b4b79dec7d53f4ef54586f1ecd92f3f5c5d72": { "jp": { - "updatedAt": "2025-11-26T07:24:18.937Z" + "updatedAt": "2025-11-27T09:08:52.091Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.936Z" + "updatedAt": "2025-11-27T09:08:52.088Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.099Z" + "updatedAt": "2025-11-27T09:08:52.097Z" } } }, "0cb711998b74fbafee6f9dbe1cf42999cd6bf81fb67aba52da75f9d6e7820916": { "1b31920ed434089b5c438486640b5af358c740bf6e33cef31bc59a7a8cf7708b": { "jp": { - "updatedAt": "2025-11-26T07:24:18.946Z" + "updatedAt": "2025-11-27T09:08:52.135Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.945Z" + "updatedAt": "2025-11-27T09:08:52.134Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.107Z" + "updatedAt": "2025-11-27T09:08:52.112Z" } } }, "0de197a09c02a6e7de6b2120720f01b2f26dd69cc09e57640234c52fe619cbe1": { "a3b2b2da1705264e477035d4c4f93d27e7c159e13c8fefc67fdbac404fa1df2f": { "jp": { - "updatedAt": "2025-11-26T07:24:18.945Z" + "updatedAt": "2025-11-27T09:08:52.135Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.945Z" + "updatedAt": "2025-11-27T09:08:52.135Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.942Z" + "updatedAt": "2025-11-27T09:08:52.133Z" } } }, "39f0108c94bbc9ceec29295e4a5c4a30bc3ed66e79dcf055c93bcb5e07df95b4": { "f14661437615304886b90084f8db1b8e50ccb8718cce1d8bb57271192cb3f924": { "jp": { - "updatedAt": "2025-11-26T07:24:12.101Z" + "updatedAt": "2025-11-27T09:08:52.102Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.101Z" + "updatedAt": "2025-11-27T09:08:52.101Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.101Z" + "updatedAt": "2025-11-27T09:08:52.102Z" } } }, "4511c24ad879085d0713bffa28b8695c1a87d24872ce30015bb857f43c961627": { "f33dc7dd4c81c9ff62d672ddd22da52fe2b3790feef29653e27d7dbf105dacdc": { "jp": { - "updatedAt": "2025-11-26T07:24:12.099Z" + "updatedAt": "2025-11-27T09:08:52.098Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.938Z" + "updatedAt": "2025-11-27T09:08:52.094Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.938Z" + "updatedAt": "2025-11-27T09:08:52.093Z" } } }, "7209b7ddab6e5d0aa0edb6dd2a9d28893ced1fa4a5e84eca66e18a12cbc9a471": { "b55f055c6ea298013d180b87459ca4cbef2d564e3a47054885bf85eca5781ed7": { "jp": { - "updatedAt": "2025-11-26T07:24:18.936Z" + "updatedAt": "2025-11-27T09:08:52.089Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.099Z" + "updatedAt": "2025-11-27T09:08:52.097Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.099Z" + "updatedAt": "2025-11-27T09:08:52.097Z" } } }, "8d5ac58622d05dc878c50a9901e001b81276e5c37349076f70389f7ec8731cb4": { "2a5bbf839d622f7ef15b7a5b8575e42dcbd0d1ab16bf6f98ab233f94cdbd68b3": { "jp": { - "updatedAt": "2025-11-26T07:24:18.937Z" + "updatedAt": "2025-11-27T09:08:52.092Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.100Z" + "updatedAt": "2025-11-27T09:08:52.099Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.938Z" + "updatedAt": "2025-11-27T09:08:52.095Z" } } }, "9da34b15afe0cf84a2c73d8d1acfc85dae89be8c90605898caceecbc4626da99": { "ce873407eda99feac5ab7638cb9c330da28e87de5b88e7f7e35b3b8dba2c1ffc": { "jp": { - "updatedAt": "2025-11-26T07:24:12.099Z" + "updatedAt": "2025-11-27T09:08:52.099Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.937Z" + "updatedAt": "2025-11-27T09:08:52.091Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.937Z" + "updatedAt": "2025-11-27T09:08:52.091Z" } } }, "b1eb4813b41c7ccc174d13cca2cec0592da899961dd7a66e59673fce738d90ed": { "d63a4009d7fadde4213a7f160c8741c105b3a63db320d984e375579df904dfc5": { "jp": { - "updatedAt": "2025-11-26T07:24:12.101Z" + "updatedAt": "2025-11-27T09:08:52.100Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.938Z" + "updatedAt": "2025-11-27T09:08:52.095Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.101Z" + "updatedAt": "2025-11-27T09:08:52.101Z" } } }, "bc635d7f6a9111bbbc3d31c625fcda3adb9eadc78253335799d1b3a12a509df7": { "b7a3734788840b662f127af66b64815bd7c85bf39dd4cf42306c85eb6f392d01": { "zh": { - "updatedAt": "2025-11-26T07:24:12.107Z" + "updatedAt": "2025-11-27T09:08:52.112Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.107Z" + "updatedAt": "2025-11-27T09:08:52.112Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.107Z" + "updatedAt": "2025-11-27T09:08:52.113Z" } } }, "bdf357b395b129f57e836477b2fc57675705bcf48e1acda08c190ab17a75951e": { "3a0381755f449a5032606d2fdab638ca733950978814b42e1aceb74203a2235b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.102Z" + "updatedAt": "2025-11-27T09:08:52.104Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.107Z" + "updatedAt": "2025-11-27T09:08:52.111Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.102Z" + "updatedAt": "2025-11-27T09:08:52.104Z" } } }, "c54fab4cf7043c79b8ce701279e089e154ad852ea3c4248cb2c8da671cbc17db": { "b6e7b7146868d159e85bc698be8dd009a8755c7a8c993e4406163a4d71a408a9": { "jp": { - "updatedAt": "2025-11-26T07:24:18.937Z" + "updatedAt": "2025-11-27T09:08:52.093Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.099Z" + "updatedAt": "2025-11-27T09:08:52.097Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.938Z" + "updatedAt": "2025-11-27T09:08:52.094Z" } } }, "c571247fa3e091098d027771a55d5ebe774d6d531b2c5384736de73837552959": { "e5aeca6ca592dd8ef3c7bcf54b278d64dd04a95cd012f8594105429290303c21": { "jp": { - "updatedAt": "2025-11-26T07:24:18.936Z" + "updatedAt": "2025-11-27T09:08:52.089Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.100Z" + "updatedAt": "2025-11-27T09:08:52.100Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.938Z" + "updatedAt": "2025-11-27T09:08:52.095Z" } } }, "cc311a7d9ae7be3e04c62efd5c5b7aa8cb9d6075749b29e99939d01baa76e3fe": { "3de10984a294ee3ab3e7105d5ba6c42208236c0f01721e7189efb0af99ca2490": { "jp": { - "updatedAt": "2025-11-26T07:24:18.936Z" + "updatedAt": "2025-11-27T09:08:52.089Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.938Z" + "updatedAt": "2025-11-27T09:08:52.096Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.100Z" + "updatedAt": "2025-11-27T09:08:52.099Z" } } }, "d49e422d3649c455dff8cb00cabeffadfc176bab2340583e83d8416f5fbb799a": { "551eaa35224112c0edb3f9e68292a528790f07b1ea2fe15b67e97ec37689af33": { "jp": { - "updatedAt": "2025-11-26T07:24:18.937Z" + "updatedAt": "2025-11-27T09:08:52.091Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.099Z" + "updatedAt": "2025-11-27T09:08:52.096Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.938Z" + "updatedAt": "2025-11-27T09:08:52.095Z" } } }, "ee343f5a3bf00722c8dacdf2e096fa970da83e5102fcb1446bbc99a4b089a390": { "72f38826fa27979a73a67e5413b3854cc5f5f2bfca9f1efe2890e20dc90a5020": { "jp": { - "updatedAt": "2025-11-26T07:24:12.098Z" + "updatedAt": "2025-11-27T09:08:52.096Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.099Z" + "updatedAt": "2025-11-27T09:08:52.098Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.928Z" + "updatedAt": "2025-11-27T09:08:52.073Z" } } }, "fc30da7ebddc5996d940ca4f9540cee6fa6b79f9c37ee5aa6cd56665488a65e6": { "20ab3ac2e587dcfbf842ef0e2dde364c4fac02225d76cf6a5a4b6a646b77e4d6": { "jp": { - "updatedAt": "2025-11-26T07:24:18.936Z" + "updatedAt": "2025-11-27T09:08:52.090Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.101Z" + "updatedAt": "2025-11-27T09:08:52.101Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.936Z" + "updatedAt": "2025-11-27T09:08:52.090Z" } } }, "fc92ad70da88c48808fdb53f68400c73f6f900eca6a95d544909915d2b22d9f0": { "16c47449f52759987429555de611585f7f1f6d6770d4c1ced0d74ae244ab45df": { "jp": { - "updatedAt": "2025-11-26T07:24:12.106Z" + "updatedAt": "2025-11-27T09:08:52.111Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.106Z" + "updatedAt": "2025-11-27T09:08:52.109Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.935Z" + "updatedAt": "2025-11-27T09:08:52.087Z" } } }, "fd2a3635e203221890fdb75fdb12cad083607f12a05af6e46565b58b28626a3f": { "69e391ff6463d09b09730e7e4366b4c486d3bb1759441114546febf2e97601a2": { "jp": { - "updatedAt": "2025-11-26T07:24:12.102Z" + "updatedAt": "2025-11-27T09:08:52.104Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.103Z" + "updatedAt": "2025-11-27T09:08:52.105Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.103Z" + "updatedAt": "2025-11-27T09:08:52.105Z" } } }, @@ -11659,18 +11725,29 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.953Z" } + }, + "99dd663f4b6f1f7c866a09ecc4aa890f3ab244afe08834a22596edafef952ca4": { + "jp": { + "updatedAt": "2025-11-27T09:08:52.138Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:52.145Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:52.145Z" + } } }, "0f88f2bd27c6a3bc5b20ffd358c1599368da4a7821aed81420035a719675f40a": { "947a7d558e471c72cf79437a217f341c9e6e2083cef8d20956a3839b9c085fa3": { "jp": { - "updatedAt": "2025-11-26T07:24:12.107Z" + "updatedAt": "2025-11-27T09:08:52.111Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.106Z" + "updatedAt": "2025-11-27T09:08:52.110Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.106Z" + "updatedAt": "2025-11-27T09:08:52.110Z" } } }, @@ -11685,83 +11762,94 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.953Z" } + }, + "634a6e8cc715dfe8bb5f0ed37757b192d5e78bbd3d002d9e758fc5e3428bf252": { + "jp": { + "updatedAt": "2025-11-27T09:08:52.140Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:52.140Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:52.144Z" + } } }, "24f89815412a9281c45be003f0d9b1edaffe253b9fb6e44d0b69114de2a8bb5c": { "856a0875860cb4e9fdc7fca531785d1b4ba67b93fdace5421889ea8cc500ef1f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.103Z" + "updatedAt": "2025-11-27T09:08:52.105Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.103Z" + "updatedAt": "2025-11-27T09:08:52.105Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.103Z" + "updatedAt": "2025-11-27T09:08:52.105Z" } } }, "309ede6dc77ce6e13f59939faf3901841606c221b6288c941fde4d97ebdb53a0": { "6f8a294f73c0c480fd655b8e9629eea0f71262b277a7a5e6748a17b7458ba88c": { "jp": { - "updatedAt": "2025-11-26T07:24:18.949Z" + "updatedAt": "2025-11-27T09:08:52.137Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.948Z" + "updatedAt": "2025-11-27T09:08:52.137Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.947Z" + "updatedAt": "2025-11-27T09:08:52.136Z" } } }, "417572f3f0c0dee81daaaf436d03f842c9160631b01f165595d06d9e99f3c6c0": { "bedae71b49b3c79b70e3ad0767d167ca7bf7f0cf3792f2786f3be6e243ac41f5": { "ru": { - "updatedAt": "2025-11-26T07:24:12.109Z" + "updatedAt": "2025-11-27T09:08:52.117Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.109Z" + "updatedAt": "2025-11-27T09:08:52.117Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:18.943Z" + "updatedAt": "2025-11-27T09:08:52.134Z" } } }, "453e82594457c450e00def5b4a049c6817c1f11b3242ecdc0c113a4fe824bda1": { "3e341e3a84064fbb72d1f07486692fcc58eba4c23ed96700a8697e160736a689": { "jp": { - "updatedAt": "2025-11-26T07:24:18.940Z" + "updatedAt": "2025-11-27T09:08:52.131Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.941Z" + "updatedAt": "2025-11-27T09:08:52.132Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.941Z" + "updatedAt": "2025-11-27T09:08:52.132Z" } } }, "4f6f1a6da73f8d186f0a18ad4c69138ec62d12a6b38064449c0eaf1293c82145": { "19880790e9525db190f5e72d85ffc766a344cde65183576c30c03ab560c76bad": { "jp": { - "updatedAt": "2025-11-26T07:24:12.102Z" + "updatedAt": "2025-11-27T09:08:52.103Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.108Z" + "updatedAt": "2025-11-27T09:08:52.113Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.108Z" + "updatedAt": "2025-11-27T09:08:52.113Z" } } }, "544e14c8df8e9aeba587c7a01debdb6de7b8d0dc480e2a471b321fe3cd637687": { "56a8436026a55bc58795064c90dcf48eb1783d7c4aeb6e25f3c6be910d52bfb0": { "jp": { - "updatedAt": "2025-11-26T07:24:12.102Z" + "updatedAt": "2025-11-27T09:08:52.103Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.107Z" + "updatedAt": "2025-11-27T09:08:52.112Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.106Z" + "updatedAt": "2025-11-27T09:08:52.110Z" } } }, @@ -11798,44 +11886,55 @@ "jp": { "updatedAt": "2025-11-26T07:24:18.940Z" } + }, + "ab2df52995cf3997a3baecd856f3989b8f29d5c7696a2ee4616a5675d7e62391": { + "zh": { + "updatedAt": "2025-11-27T09:08:52.119Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:52.121Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:52.121Z" + } } }, "596b0a954cde794b5e64f8babd89a81c1359843a6046215dd00cba539357857d": { "af24567e7b2b1b9a842510afc1c41e6a4f7a9634fdd16e4176a76bc4b3c3e091": { "jp": { - "updatedAt": "2025-11-26T07:24:12.106Z" + "updatedAt": "2025-11-27T09:08:52.110Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.107Z" + "updatedAt": "2025-11-27T09:08:52.112Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.101Z" + "updatedAt": "2025-11-27T09:08:52.102Z" } } }, "65351c23daaa6ae3579c1740e82b1f56ce6eb541ff65d23ed1f890694f6ea440": { "b999ab8a06deee210039a2eaf91d71da758c776e64c8fc322d876e73e8db2861": { "jp": { - "updatedAt": "2025-11-26T07:24:12.102Z" + "updatedAt": "2025-11-27T09:08:52.104Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.106Z" + "updatedAt": "2025-11-27T09:08:52.110Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.106Z" + "updatedAt": "2025-11-27T09:08:52.111Z" } } }, "942eceae58e0a094962eb7383ca418c7a0fb355bbdf35ed09b1fb271b8ef0622": { "a06cd352188c57c4dc80e07b3511cf0c55b644a5eac9806b52fee16a901321cc": { "jp": { - "updatedAt": "2025-11-26T07:24:12.102Z" + "updatedAt": "2025-11-27T09:08:52.103Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.107Z" + "updatedAt": "2025-11-27T09:08:52.111Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.106Z" + "updatedAt": "2025-11-27T09:08:52.110Z" } } }, @@ -11850,6 +11949,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.948Z" } + }, + "d74811a43a5692033b0db3a2c94f0a673f6dee42d90914ef696df7c4ddbac655": { + "jp": { + "updatedAt": "2025-11-27T09:08:52.119Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:52.120Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:52.120Z" + } } }, "a4265198145ae0d412153c5abd0417df656a57368c80042916957e2c00936a91": { @@ -11874,57 +11984,68 @@ "ru": { "updatedAt": "2025-11-26T07:24:12.104Z" } + }, + "2d62d69aec7a3be320c6934254cbe83967fa5402dfeafb0dbed6ee9c6bb6dd7e": { + "jp": { + "updatedAt": "2025-11-27T09:08:52.106Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:52.106Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:52.107Z" + } } }, "acaee03135e8e96bcdcf34c15546b735f613d1e5ae560184c16e47ce55501204": { "8a07567dde3044656ee0f3a1ecdd3437e3653bc1dbd011b4bab9edb2c0e04c95": { "jp": { - "updatedAt": "2025-11-26T07:24:12.107Z" + "updatedAt": "2025-11-27T09:08:52.112Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.936Z" + "updatedAt": "2025-11-27T09:08:52.088Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.107Z" + "updatedAt": "2025-11-27T09:08:52.113Z" } } }, "ae900fe149a5b14ee7a25d9f850a7fed9bbb24da3497c1861285d73a625852e6": { "178aea88d150360011d964d55863a4f9f7585cb6ddc5b56d142898d29ed03414": { "jp": { - "updatedAt": "2025-11-26T07:24:12.109Z" + "updatedAt": "2025-11-27T09:08:52.117Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.109Z" + "updatedAt": "2025-11-27T09:08:52.118Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.109Z" + "updatedAt": "2025-11-27T09:08:52.118Z" } } }, "cc14be3df8410373edcf3ea623a34273b7005b0668dcb8d261ee3fbada8f972a": { "029f36173935f1b92553f610da6f3be5d9b0976fea74e17265186d40a9f8f8b7": { "jp": { - "updatedAt": "2025-11-26T07:24:18.947Z" + "updatedAt": "2025-11-27T09:08:52.136Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.948Z" + "updatedAt": "2025-11-27T09:08:52.136Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.948Z" + "updatedAt": "2025-11-27T09:08:52.136Z" } } }, "d8cbf85de396e8d762bfdc573d415e4482bb687b9017d25d153c264728283316": { "62c5c6e1debf8e9f65330683895c791394dfa2b8f1cab9a3413558667b58ec1c": { "jp": { - "updatedAt": "2025-11-26T07:24:18.944Z" + "updatedAt": "2025-11-27T09:08:52.134Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.944Z" + "updatedAt": "2025-11-27T09:08:52.134Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.947Z" + "updatedAt": "2025-11-27T09:08:52.135Z" } } }, @@ -11950,18 +12071,29 @@ "jp": { "updatedAt": "2025-11-26T07:24:12.105Z" } + }, + "9833a13f1be1707f9e1e0c52ffe0e9c26df1dca4c21c0968e308a62a79da3578": { + "ru": { + "updatedAt": "2025-11-27T09:08:52.106Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:52.106Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:52.106Z" + } } }, "f6c796e2a223d7f3109d7a0e087b02b576111cee44e1affe20a492544e19a35d": { "5c1b2453bc509571ef5a9c5a79343853e690b58e16dd273eb4fedb719f0aabd8": { "jp": { - "updatedAt": "2025-11-26T07:24:12.109Z" + "updatedAt": "2025-11-27T09:08:52.116Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.109Z" + "updatedAt": "2025-11-27T09:08:52.115Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.108Z" + "updatedAt": "2025-11-27T09:08:52.114Z" } } }, @@ -11976,6 +12108,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.954Z" } + }, + "3cf60c4c63f78ca99a909e11fdd7b9ea46873225acbb7444b8eb966b6e9c4838": { + "ru": { + "updatedAt": "2025-11-27T09:08:52.138Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:52.139Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:52.140Z" + } } }, "134051a83cd4931696ccf591823f46126c6e7feed4971511434916eff09ce79f": { @@ -11992,13 +12135,13 @@ }, "7676a41c6d1e719ba8b13b8d322ace741b11f0fe672d3b38397d5e1d23081fd0": { "zh": { - "updatedAt": "2025-11-26T07:24:18.955Z" + "updatedAt": "2025-11-27T09:08:52.137Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:18.955Z" + "updatedAt": "2025-11-27T09:08:59.362Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.955Z" + "updatedAt": "2025-11-27T09:08:59.362Z" } } }, @@ -12013,6 +12156,17 @@ "ru": { "updatedAt": "2025-11-26T07:24:18.956Z" } + }, + "4e4923ee24e6317511ddbea23c7b6f8e03c0277f9d6ac0d56eb56dd0caae3746": { + "jp": { + "updatedAt": "2025-11-27T09:08:59.363Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:59.364Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:59.365Z" + } } }, "1c4c51a336d1e6dee310539258abd450be7834df46548255e22fae5d3686a247": { @@ -12026,44 +12180,55 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.954Z" } + }, + "5c602e02407de45f557f89046cb7b30682c56eaedacab7a3bfc0f1d208a1813f": { + "ru": { + "updatedAt": "2025-11-27T09:08:52.118Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:52.141Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:52.142Z" + } } }, "39df2af9870d3b0cc9ef00711b97902ed3b5f6df0419aadf0841770290785d7b": { "a18203de1411607a70e1437450eccbf17a073e8daa45c5c42ee8e0cba812d5f3": { "jp": { - "updatedAt": "2025-11-26T07:24:18.942Z" + "updatedAt": "2025-11-27T09:08:52.133Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.941Z" + "updatedAt": "2025-11-27T09:08:52.132Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.109Z" + "updatedAt": "2025-11-27T09:08:52.117Z" } } }, "40220941c00a4eef0a2069b02906e525beca179d4a354e0a2e5a911c363640b5": { "989d53822380f38745d79c1b84562bfb045e678799d0f7110947e9bf5d599700": { "jp": { - "updatedAt": "2025-11-26T07:24:18.943Z" + "updatedAt": "2025-11-27T09:08:52.133Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.940Z" + "updatedAt": "2025-11-27T09:08:52.131Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.941Z" + "updatedAt": "2025-11-27T09:08:52.132Z" } } }, "505cd1f1060fe51777563a177f877b84419bab382656d36901ea1615cd4c5f44": { "0a35a92e535e80b3a150fd73abbc1751ae0fa2688543577feac7ce7f4de53ae8": { "jp": { - "updatedAt": "2025-11-26T07:24:18.953Z" + "updatedAt": "2025-11-27T09:08:59.360Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.950Z" + "updatedAt": "2025-11-27T09:08:59.358Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.951Z" + "updatedAt": "2025-11-27T09:08:59.359Z" } } }, @@ -12078,6 +12243,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.949Z" } + }, + "4b25da1f59890cfa5a986a65cb021896d1be71d0919069a68ca0edb32d4bcb78": { + "zh": { + "updatedAt": "2025-11-27T09:08:52.122Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:52.130Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:52.131Z" + } } }, "6d56ddb9a5b3ccdf4eae29f57959e9374f0ff177ac9800e0d460527344dc64a0": { @@ -12091,6 +12267,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.945Z" } + }, + "eed3064741cb620f55aca288e3255646f75384bcfd7a8d5d63104f69d26df546": { + "ru": { + "updatedAt": "2025-11-27T09:08:52.119Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:52.121Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:52.130Z" + } } }, "839030474f427a460a6acfb9a8caa7662e1cd0c337e35995054bd2c956ad05d2": { @@ -12104,6 +12291,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.944Z" } + }, + "06b19ed602eff6e0f4c0b38b69d416263621f402f6591d9f78725c9fb8213249": { + "jp": { + "updatedAt": "2025-11-27T09:08:52.119Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:52.120Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:52.122Z" + } } }, "90511d719daa226bb864d0d2bb0fb993971dffcc30b3fda0d86ebc7ff7157a9f": { @@ -12117,18 +12315,29 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.952Z" } + }, + "1921b13e0a9667a216009da681a38ff65bb6e8e5e69fad4427f31e0dec85b1b7": { + "jp": { + "updatedAt": "2025-11-27T09:08:52.138Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:52.143Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:52.144Z" + } } }, "a0e5cd4bbd52095f645996d5a20cc34d462aed2b014ca882138e4ede52f7b410": { "b82f6c4650551ebe5f3c0e03e15ad59d0e9d79edf78e121c65d4de264d1e000e": { "jp": { - "updatedAt": "2025-11-26T07:24:18.941Z" + "updatedAt": "2025-11-27T09:08:52.132Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.941Z" + "updatedAt": "2025-11-27T09:08:52.132Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.102Z" + "updatedAt": "2025-11-27T09:08:52.104Z" } } }, @@ -12143,6 +12352,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.945Z" } + }, + "5dd603d0ea09ab4c18610adfac733616566b9465cbd159ab38037b65cf3ef036": { + "ru": { + "updatedAt": "2025-11-27T09:08:52.119Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:52.120Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:52.131Z" + } } }, "b52e68b0fa137214aee6134202f0428952a2f49c83cef796e483c36598106cd9": { @@ -12156,18 +12376,29 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.950Z" } + }, + "6a2d3b6f6eef53b77da900c4d9383e4c650a1b67df3b4bffcf8c1c982c61e7b0": { + "ru": { + "updatedAt": "2025-11-27T09:08:52.139Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:52.140Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:52.141Z" + } } }, "bbbf8ab907626ae0bd4c2e7f8f1e1a30e187356616b813a7f2bafdcb968b16e9": { "64de149ea6c99450b1d0a61247789522cc099815c912ed33f53b378aaf837bbb": { "jp": { - "updatedAt": "2025-11-26T07:24:18.944Z" + "updatedAt": "2025-11-27T09:08:52.134Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.942Z" + "updatedAt": "2025-11-27T09:08:52.133Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.943Z" + "updatedAt": "2025-11-27T09:08:52.133Z" } } }, @@ -12182,6 +12413,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.951Z" } + }, + "805a3c63750885bfc49f7e57abe2e015684ddc6eb6b23a0704a589da9585ba31": { + "jp": { + "updatedAt": "2025-11-27T09:08:52.143Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:52.143Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:52.144Z" + } } }, "be5a795a34e525ece1f0651b8ec65280cd3f71026a239b44cb087800474d6992": { @@ -12195,6 +12437,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.953Z" } + }, + "ab85b9c6ab0099af15f4a6be42857b06c4aac25bf43a4a5260304fb4ff3e6f6e": { + "jp": { + "updatedAt": "2025-11-27T09:08:52.142Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:52.143Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:52.144Z" + } } }, "c3c4a5cfc613b8b144029f13d913022c2d41ebc3c333e2fa61ed8d2f0df5a81b": { @@ -12208,6 +12461,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.948Z" } + }, + "f9910c6a76a99ff49c7ffee4a3987ae9207e8d7db851b61ec2efe4f6c5c50886": { + "zh": { + "updatedAt": "2025-11-27T09:08:52.120Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:52.122Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:52.142Z" + } } }, "d559f4bb7e0e75b052f6989f63565615397e09d8f05bc7535ae634a02281b78a": { @@ -12221,31 +12485,42 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.948Z" } + }, + "fdd897a9063250be652162e225953c203c05911a364b1cf87f47fa2b3ad6b297": { + "zh": { + "updatedAt": "2025-11-27T09:08:52.121Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:52.122Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:52.130Z" + } } }, "e54eba7f7c2e2d6d452b2d73f4934f9ba018e180585b2bbdb2f9f14bb9b5510d": { "d88ed4dda50a3c9ee265b067c0abda94e3cba629d2d6c9a695d77d254c4cd372": { "jp": { - "updatedAt": "2025-11-26T07:24:12.102Z" + "updatedAt": "2025-11-27T09:08:52.104Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.941Z" + "updatedAt": "2025-11-27T09:08:52.131Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.102Z" + "updatedAt": "2025-11-27T09:08:52.102Z" } } }, "f871545252cead274f81eec090f4a37c79aad733b302ff49eedc5242ba29b1cb": { "5ee24061522cb5a7ed68e5bfa59c658c0cb620eff70e3736f5e3800597533e77": { "jp": { - "updatedAt": "2025-11-26T07:24:12.109Z" + "updatedAt": "2025-11-27T09:08:52.117Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.950Z" + "updatedAt": "2025-11-27T09:08:59.358Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.950Z" + "updatedAt": "2025-11-27T09:08:59.358Z" } } }, @@ -12260,44 +12535,55 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.941Z" } + }, + "295554629ad06cadfbea57e08411547a44046d88bbc5cb20b34c13534fca808f": { + "zh": { + "updatedAt": "2025-11-27T09:08:52.118Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:52.120Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:52.121Z" + } } }, "00f0f8e4c4cba686bdd32c7eb510c5ff9cf2847654153d708f69ef3d1fae55b2": { "4cdabdb9af849dd79c526565751107e9b1abf0b12889130ad0f45424328feb65": { "jp": { - "updatedAt": "2025-11-26T07:24:18.961Z" + "updatedAt": "2025-11-27T09:08:52.148Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.963Z" + "updatedAt": "2025-11-27T09:08:52.150Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.962Z" + "updatedAt": "2025-11-27T09:08:52.149Z" } } }, "0819a7d3c5f71c0454ca26bc207870bf57571e75b815f9e6048c755eba88da5b": { "7c183351205668c7bd2a340b5ce1c7a91fbae1b7555a939a4d8e6611fda87e09": { "jp": { - "updatedAt": "2025-11-26T07:24:18.964Z" + "updatedAt": "2025-11-27T09:08:52.152Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.963Z" + "updatedAt": "2025-11-27T09:08:52.150Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.961Z" + "updatedAt": "2025-11-27T09:08:52.147Z" } } }, "0e624ceaf217ed28aa49746f8a0d8e6f11f50144de84c79c5bfc3cee61b7f1a3": { "2c646c9eed127c879e1e79d90542ee56c28b87e87984ce2e15248bed89ca7aa7": { "jp": { - "updatedAt": "2025-11-26T07:24:18.961Z" + "updatedAt": "2025-11-27T09:08:52.148Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.962Z" + "updatedAt": "2025-11-27T09:08:52.148Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.963Z" + "updatedAt": "2025-11-27T09:08:52.150Z" } } }, @@ -12312,18 +12598,29 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.957Z" } + }, + "ee5e9f3162a1197524aca6e97cf739a11ca65612be1b597e70bf103f7727993c": { + "jp": { + "updatedAt": "2025-11-27T09:08:59.370Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:59.371Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:59.373Z" + } } }, "2395cf7e448505fe5dff52c83b83b0eb98f08d6b30b33dff50d6380fa7e5932f": { "773ced00aebc468e3a46c4cc78b523aab8880ec08d2fdf077d970783ea2663cf": { "jp": { - "updatedAt": "2025-11-26T07:24:18.958Z" + "updatedAt": "2025-11-27T09:08:59.377Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.956Z" + "updatedAt": "2025-11-27T09:08:59.373Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.956Z" + "updatedAt": "2025-11-27T09:08:59.375Z" } } }, @@ -12338,6 +12635,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.954Z" } + }, + "b0b56f3e8d31dcc0efeac6d2feb5c7674647f73163b6e6bc288532a7e63ee696": { + "zh": { + "updatedAt": "2025-11-27T09:08:52.139Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:52.139Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:52.143Z" + } } }, "56433df9b9399e37671c12717a7e397ab2aec3e086e226fcf8bb3a338e336f38": { @@ -12351,6 +12659,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.956Z" } + }, + "01b3c2c46b1f5b875a5d0c20393042830caf8d92a7c7820943fa80463f760cdd": { + "ru": { + "updatedAt": "2025-11-27T09:08:59.364Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:59.367Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:59.370Z" + } } }, "7b92c9515ab243345c2edd443a9f36e432abeb01df31d0d197db37f7733b65f1": { @@ -12364,6 +12683,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.954Z" } + }, + "d2a0556b2ff529a2a6bc6f0f1474e276bb5cf693229f1efb4d5f047dca2bba21": { + "zh": { + "updatedAt": "2025-11-27T09:08:52.139Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:52.140Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:52.144Z" + } } }, "8150184b8463d89e5a92277a564104c399220d435ffb6ec7e6d2560672bb49d6": { @@ -12377,6 +12707,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.953Z" } + }, + "6156562270e5d113b2b835c17a4908c76e95978956ef4a57eaa61e1eed78520e": { + "ru": { + "updatedAt": "2025-11-27T09:08:52.119Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:52.141Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:52.141Z" + } } }, "8af19e1098601767cbf89d205cfc0d3cd2c79ba5ae84fa11d9cea6cc91850951": { @@ -12390,18 +12731,29 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.958Z" } + }, + "53c40fa63ea8e3ce50b35d7c9ab69f8ef252980df0deba29ae32d97edd799b2e": { + "jp": { + "updatedAt": "2025-11-27T09:08:59.364Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:59.364Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:59.372Z" + } } }, "8fad6511e155deebc0c7b7055ddf993b7213668bd651d77b46f4fef11c363990": { "00a2be5a931770b44b5dabd0013f35d169228fbee45d460fc63c58245bf78264": { "jp": { - "updatedAt": "2025-11-26T07:24:18.952Z" + "updatedAt": "2025-11-27T09:08:59.360Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.951Z" + "updatedAt": "2025-11-27T09:08:59.359Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.951Z" + "updatedAt": "2025-11-27T09:08:59.358Z" } } }, @@ -12416,18 +12768,29 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.952Z" } + }, + "3076a78d7676e145757a5c63a2dae4d7c0c748942ad74b8e147613b5ae9c6a2f": { + "zh": { + "updatedAt": "2025-11-27T09:08:52.138Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:52.142Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:52.143Z" + } } }, "9fd477532adc3dadf2dfed8071d354140eb7b667bd012aceca5476a9b5aeb7f1": { "cc0409c62d9e4b650b3ab8a4a2c2ea56b508c8a34ed0235cccc67f60cb557c17": { "jp": { - "updatedAt": "2025-11-26T07:24:18.951Z" + "updatedAt": "2025-11-27T09:08:59.358Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.952Z" + "updatedAt": "2025-11-27T09:08:59.359Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.952Z" + "updatedAt": "2025-11-27T09:08:59.360Z" } } }, @@ -12442,31 +12805,42 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.953Z" } + }, + "c338f65f8d100cd47e3a31d6f9e78ba015c1346b791cfa3ff6677795952a0807": { + "jp": { + "updatedAt": "2025-11-27T09:08:52.138Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:52.141Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:52.145Z" + } } }, "b24da7e78415a317d4fd792bce74b8acf47ca7b376eb80c5d2a81e9b874b5ec9": { "1b40db05914f87442600e04da552a114b9d6566703fff238531bf2dce4b3fb81": { "jp": { - "updatedAt": "2025-11-26T07:24:18.956Z" + "updatedAt": "2025-11-27T09:08:59.374Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.956Z" + "updatedAt": "2025-11-27T09:08:59.375Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.956Z" + "updatedAt": "2025-11-27T09:08:59.374Z" } } }, "bd066e14efb9c286ea6f6324b04ea5e37363afb94dde1cda3efc2008e77fe6c2": { "ac1b069ca0882ed4666acf6095038e0b7cb288b8596cbf3b1ce1e54a9df05e43": { "jp": { - "updatedAt": "2025-11-26T07:24:18.951Z" + "updatedAt": "2025-11-27T09:08:59.359Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.951Z" + "updatedAt": "2025-11-27T09:08:59.359Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.954Z" + "updatedAt": "2025-11-27T09:08:59.360Z" } } }, @@ -12481,31 +12855,42 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.952Z" } + }, + "c648cd50d62fa017bf9f75cb6b83f2c181571125b4792b76c86198da57d6b234": { + "jp": { + "updatedAt": "2025-11-27T09:08:52.139Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:52.141Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:52.142Z" + } } }, "ccb6f7b23e140ff82e19fc0391ef805c0f15507170cf5f60a78b0ea7f7bcf295": { "7b7eb66a4c1f465cbb23aa2d3f377abddba9aaa6d13866786810216306d2eb6e": { "jp": { - "updatedAt": "2025-11-26T07:24:18.951Z" + "updatedAt": "2025-11-27T09:08:59.359Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.950Z" + "updatedAt": "2025-11-27T09:08:59.357Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.951Z" + "updatedAt": "2025-11-27T09:08:59.358Z" } } }, "d79bc535529875a738bd248165a718dae8d93446b748ae71439f9b822c83972c": { "1a78ff0ba0c6860dc7ce6357e1df29d3b791afd1f3ea81e2713f99d9dd8d0199": { "jp": { - "updatedAt": "2025-11-26T07:24:18.940Z" + "updatedAt": "2025-11-27T09:08:59.357Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.952Z" + "updatedAt": "2025-11-27T09:08:59.360Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.950Z" + "updatedAt": "2025-11-27T09:08:59.358Z" } } }, @@ -12520,6 +12905,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.957Z" } + }, + "703c345dcb09b3d9c115ac6d960bc44df5ebbd21bde9ddaeb3fae08a63b1749a": { + "zh": { + "updatedAt": "2025-11-27T09:08:59.366Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:59.367Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:59.367Z" + } } }, "f181f03d87970ee159e60beef4cf41dfdb497fd8d950cab4164f13908b4a893c": { @@ -12533,6 +12929,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.958Z" } + }, + "01426a0b27a8046b6721227a23a347197804e15d2e71c528d46080c264354921": { + "ru": { + "updatedAt": "2025-11-27T09:08:59.365Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:59.371Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:59.371Z" + } } }, "0d57e95520df30873578c0c59ade72141faf51c3e622951bb9026968b4b2a96f": { @@ -12546,18 +12953,29 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.963Z" } + }, + "5f3840a29e61dbec4841a38be6722a8b6d3bc7281cc7d9139a2e112a47d2f251": { + "jp": { + "updatedAt": "2025-11-27T09:08:59.380Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:59.381Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:59.381Z" + } } }, "0f2ea76e0db5a6d5b78533ea69f6bf742d59e3c92cd69159341e1c7049a2aa97": { "9da14b2a7b04a5c4ff51174e32fb113e58f6e2c9b60265a9616f729614a2c9ba": { "jp": { - "updatedAt": "2025-11-26T07:24:18.964Z" + "updatedAt": "2025-11-27T09:08:52.153Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.963Z" + "updatedAt": "2025-11-27T09:08:52.151Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.961Z" + "updatedAt": "2025-11-27T09:08:52.147Z" } } }, @@ -12572,6 +12990,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.971Z" } + }, + "b92611dd6a3b9c353cc2b1383d42601917df331aae94df51cb078400430f456b": { + "ru": { + "updatedAt": "2025-11-27T09:08:52.156Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:52.157Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:52.158Z" + } } }, "11f2e3a49b018a860171016a699fa740752c02bc0aa8f5f79a0c57498338ec5e": { @@ -12585,6 +13014,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.966Z" } + }, + "e5c755dea01abaf11bf73c6cfd13729ae4bfa33d43a0a52ea3e0173460d3b39d": { + "zh": { + "updatedAt": "2025-11-27T09:08:52.145Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:59.380Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:59.380Z" + } } }, "259e682225d9b71ca3ea983216e57cd82c14b1caf25f00ea510ceadd3a70a0a7": { @@ -12598,31 +13038,42 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.959Z" } + }, + "e91d3b791b454b1a0ef05b57d40abdbf146ab1474ff1aeb70caabf9e4d32b816": { + "jp": { + "updatedAt": "2025-11-27T09:08:59.366Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:59.368Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:59.368Z" + } } }, "3b9d54215d217a013fc4c62df11f26627fb8449a0489b74cc0f54e6b67f41ecc": { "f789cb25007915b6d83be12f4ecf35805e8a487063a7a59b47c497602ae41559": { "jp": { - "updatedAt": "2025-11-26T07:24:18.962Z" + "updatedAt": "2025-11-27T09:08:52.149Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.960Z" + "updatedAt": "2025-11-27T09:08:59.361Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.956Z" + "updatedAt": "2025-11-27T09:08:59.373Z" } } }, "45c1b7f8bb110c2b37f34cc31252826058699640eef30ff8486c08761af44c43": { "605cfdad7a54e1e2f7b6a9998f6bfa8f8ff7b6a25aaa39281d58591fed0758e5": { "jp": { - "updatedAt": "2025-11-26T07:24:18.956Z" + "updatedAt": "2025-11-27T09:08:59.373Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.956Z" + "updatedAt": "2025-11-27T09:08:59.374Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.956Z" + "updatedAt": "2025-11-27T09:08:59.374Z" } } }, @@ -12637,18 +13088,29 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.960Z" } + }, + "2885a781a007a7ada8f0db66ad248161e6af984d5a6d09191834d6a2543db968": { + "jp": { + "updatedAt": "2025-11-27T09:08:59.370Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:59.371Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:59.372Z" + } } }, "57f74a21cf2fbbfbe54dc4c14d4c397429d32d51ea09651cbcba81a78f831e03": { "9aff12963c1e1db4b1b461b751a4d72394a3a26138c1713efd31eb628aa3b7c1": { "jp": { - "updatedAt": "2025-11-26T07:24:18.963Z" + "updatedAt": "2025-11-27T09:08:52.151Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.965Z" + "updatedAt": "2025-11-27T09:08:52.154Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.965Z" + "updatedAt": "2025-11-27T09:08:52.154Z" } } }, @@ -12663,31 +13125,42 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.957Z" } + }, + "4576bd6efc4271a9bbfd7ff64a67e6a5cd8120b9608e1f0f96745079351d1a69": { + "zh": { + "updatedAt": "2025-11-27T09:08:59.365Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:59.366Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:59.369Z" + } } }, "5e82ab99152b96f656e8dbc01527a2124dec1e8c721a629d4ba5aeccc219db56": { "4fe49458ceaccad1ac8e3af48d763a09070b1428ec46ac6e0a3b4c19aa2aff54": { "jp": { - "updatedAt": "2025-11-26T07:24:18.956Z" + "updatedAt": "2025-11-27T09:08:59.375Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.957Z" + "updatedAt": "2025-11-27T09:08:59.375Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.958Z" + "updatedAt": "2025-11-27T09:08:59.377Z" } } }, "61901cc301281214293209e58b53b0298e1dcffad02805348907ec14f5a36253": { "9b549c4be17898687f84e0ef17ef02ef8a374450b44096f17620746288db980c": { "jp": { - "updatedAt": "2025-11-26T07:24:18.962Z" + "updatedAt": "2025-11-27T09:08:52.148Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.960Z" + "updatedAt": "2025-11-27T09:08:59.361Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.961Z" + "updatedAt": "2025-11-27T09:08:52.148Z" } } }, @@ -12702,18 +13175,29 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.960Z" } + }, + "ecb585ec1fef87ae16a59e4392cad2214397ab76b4c1f98f967c69dae8f1c139": { + "zh": { + "updatedAt": "2025-11-27T09:08:59.367Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:59.372Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:59.372Z" + } } }, "8232385318fcb8ae5ab151696b217b22f9436e7402f061c4116986347a039995": { "d6b3588b7d8f126d5702902b6c9d58f3929c5d5c37ec39e19523d2d8bfcab2e9": { "jp": { - "updatedAt": "2025-11-26T07:24:18.962Z" + "updatedAt": "2025-11-27T09:08:52.149Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.961Z" + "updatedAt": "2025-11-27T09:08:59.378Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.962Z" + "updatedAt": "2025-11-27T09:08:52.150Z" } } }, @@ -12728,6 +13212,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.957Z" } + }, + "9f3903e67cba6261cb9be580a31bdd170498cc260e9c5d03c285d123770043ec": { + "zh": { + "updatedAt": "2025-11-27T09:08:59.363Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:59.363Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:59.365Z" + } } }, "a4b6a047b28cc22275775b0dd79539a2be86c95aa7ced10a1b187f12caf79320": { @@ -12741,6 +13236,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.956Z" } + }, + "af460729a46f510430df896945c2d1083b7a1cba8c13e697cbe6e79e39464dfe": { + "ru": { + "updatedAt": "2025-11-27T09:08:59.366Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:59.368Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:59.369Z" + } } }, "bab8d56663945997ddb532be83b22cfbee4c23f88c78951638579d4d2d0d0dc1": { @@ -12749,23 +13255,34 @@ "updatedAt": "2025-11-26T07:24:18.966Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.965Z" + "updatedAt": "2025-11-26T07:24:18.965Z" + }, + "jp": { + "updatedAt": "2025-11-26T07:24:18.966Z" + } + }, + "8e64108c88e2501340620384ddf14dd58507b8e1c81219be6f6e610fe3d9c772": { + "jp": { + "updatedAt": "2025-11-27T09:08:52.145Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:52.146Z" }, - "jp": { - "updatedAt": "2025-11-26T07:24:18.966Z" + "ru": { + "updatedAt": "2025-11-27T09:08:52.146Z" } } }, "bb10891887cb78110e7cb4ceb74ff22432d01fac9a3bff7cdeeb1886f79b1a65": { "caa3bae4c975b756d6c9bef7d4ca4f1118fd3ff3418d4538a30aa4c9e33515f9": { "jp": { - "updatedAt": "2025-11-26T07:24:18.963Z" + "updatedAt": "2025-11-27T09:08:52.150Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.964Z" + "updatedAt": "2025-11-27T09:08:52.153Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.962Z" + "updatedAt": "2025-11-27T09:08:52.149Z" } } }, @@ -12783,13 +13300,13 @@ }, "f874e3ae6b9b2413ff9c4415bbd53d217ecc53aa9c8754f7d8b43a840a56a1dd": { "zh": { - "updatedAt": "2025-11-26T07:24:18.955Z" + "updatedAt": "2025-11-27T09:08:52.137Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:18.955Z" + "updatedAt": "2025-11-27T09:08:52.138Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.955Z" + "updatedAt": "2025-11-27T09:08:59.362Z" } } }, @@ -12804,18 +13321,29 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.959Z" } + }, + "1487bdd2fa2f3944d2af9ce3c81c0bc560bc49e8a960f88b3b1bd574854de890": { + "ru": { + "updatedAt": "2025-11-27T09:08:59.368Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:59.369Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:59.369Z" + } } }, "e39ace6f98adf22617bf02b8e1b5e543cc789b8aca34a357f850131c862245ee": { "18eb1c50ac74effbf464a4c046b94e4cb6fa9eb96d70864437ccfb525503aa01": { "jp": { - "updatedAt": "2025-11-26T07:24:18.958Z" + "updatedAt": "2025-11-27T09:08:59.376Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.957Z" + "updatedAt": "2025-11-27T09:08:59.376Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.957Z" + "updatedAt": "2025-11-27T09:08:59.376Z" } } }, @@ -12830,57 +13358,68 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.969Z" } + }, + "ece9e5e8b9ede092044e89a8f22b5f4f8ad893ecb0b80c8ee957c1d036b8e7eb": { + "zh": { + "updatedAt": "2025-11-27T09:08:52.155Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:52.156Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:52.159Z" + } } }, "188f9a9bc3bec2ce321905c8a56a28198b42bc1f90b417b6ac00a4d9cf3c147b": { "8e6933142a9b80421dd489117c3233c45a2645cae67fe6bbf99c75fdf827c9ba": { "jp": { - "updatedAt": "2025-11-26T07:24:18.970Z" + "updatedAt": "2025-11-27T09:08:52.166Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.969Z" + "updatedAt": "2025-11-27T09:08:52.166Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.969Z" + "updatedAt": "2025-11-27T09:08:52.165Z" } } }, "1c00ec1111d4c97040f8a6b4705c820bc0afe08ce75657d4021750534563cc33": { "b2e299e5c648bc6c75f661d7ddb0d415bf3f4d2d15b1b81f676f8d781e4ab3d6": { "jp": { - "updatedAt": "2025-11-26T07:24:18.967Z" + "updatedAt": "2025-11-27T09:08:52.163Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.963Z" + "updatedAt": "2025-11-27T09:08:52.151Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.964Z" + "updatedAt": "2025-11-27T09:08:52.152Z" } } }, "251dd0b5213f0a3e9974d1b830a96625f3edc7164c0ea7373201dbcf17869d8f": { "420a595531db98470670f1f677ed2a055a31cba9f965d100ebd8b1fd45bd0c88": { "jp": { - "updatedAt": "2025-11-26T07:24:18.969Z" + "updatedAt": "2025-11-27T09:08:52.166Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.967Z" + "updatedAt": "2025-11-27T09:08:52.163Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.968Z" + "updatedAt": "2025-11-27T09:08:52.164Z" } } }, "2fe98a07a0771f0c918a105339c7465f1d1800b749a6786ae052b4f5792f8146": { "bc9d4d641f5b9a05f88360a2ee33515689607102fb6c336b63a7598960ba63de": { "jp": { - "updatedAt": "2025-11-26T07:24:18.967Z" + "updatedAt": "2025-11-27T09:08:52.162Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.969Z" + "updatedAt": "2025-11-27T09:08:52.165Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.967Z" + "updatedAt": "2025-11-27T09:08:52.162Z" } } }, @@ -12895,18 +13434,29 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.970Z" } + }, + "75703e9986b34937934165925fc58e72a3afca84531a9442ab6247ddcf89893e": { + "ru": { + "updatedAt": "2025-11-27T09:08:52.159Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:52.160Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:52.160Z" + } } }, "513fe6bad8509823ffdccf71f911e6632a1d6c62bc3828d6880a93c15b106872": { "8b0b91827d9a7c004ba4a826838ebb29f76a0224d429a5d945acb7d900b732fd": { "jp": { - "updatedAt": "2025-11-26T07:24:18.968Z" + "updatedAt": "2025-11-27T09:08:52.165Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.969Z" + "updatedAt": "2025-11-27T09:08:52.165Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.968Z" + "updatedAt": "2025-11-27T09:08:52.164Z" } } }, @@ -12921,6 +13471,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.970Z" } + }, + "30c6212c47a3a967e11aed7b52fa64caa3358560d58e4a0931019d75506f6232": { + "jp": { + "updatedAt": "2025-11-27T09:08:52.156Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:52.157Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:52.160Z" + } } }, "67b2cf74cdaca50f8911af9d708d0de9b1f69f0efeab9993911fd47c8fe2f59a": { @@ -12934,18 +13495,29 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.955Z" } + }, + "47b31a12063a879f2beddb3373c4c72ffa7b8dc29a27e09156d7cf03a46cf52b": { + "ru": { + "updatedAt": "2025-11-27T09:08:52.146Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:59.379Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:59.381Z" + } } }, "721c2734aaae37ab2cfa24011429e694a791b3fb975c20c543e63c974c336cde": { "9ecec8ec535a5264bf7ad03315791abb102815a602f895880c47fb817859cf24": { "jp": { - "updatedAt": "2025-11-26T07:24:18.964Z" + "updatedAt": "2025-11-27T09:08:52.152Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.961Z" + "updatedAt": "2025-11-27T09:08:59.378Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.962Z" + "updatedAt": "2025-11-27T09:08:52.149Z" } } }, @@ -12960,31 +13532,42 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.968Z" } + }, + "28b09452901cdc50d62751f8c7e48dda24bcdeceee8080b1e1efa2058fe428d1": { + "zh": { + "updatedAt": "2025-11-27T09:08:52.160Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:52.160Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:52.160Z" + } } }, "8315916bdb3d69fc26c0b36f0b4378146ed63f736e03228e62d22efe01d9dfd4": { "5856087df98f6740b4472f367157e174efdc961ef37e3c1247d0ced2db5782d4": { "jp": { - "updatedAt": "2025-11-26T07:24:18.961Z" + "updatedAt": "2025-11-27T09:08:52.148Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.963Z" + "updatedAt": "2025-11-27T09:08:52.151Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.961Z" + "updatedAt": "2025-11-27T09:08:52.147Z" } } }, "989eb966fc80a9e76f90dfcbc66e0dea7d1236c5a18dcfc3951a22c271c46183": { "501b56f9eae0cac02eb27cad28e73a3ea80b0a3e66d207d53190032406e903ec": { "jp": { - "updatedAt": "2025-11-26T07:24:18.964Z" + "updatedAt": "2025-11-27T09:08:52.153Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.960Z" + "updatedAt": "2025-11-27T09:08:59.361Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.964Z" + "updatedAt": "2025-11-27T09:08:52.152Z" } } }, @@ -12999,6 +13582,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.955Z" } + }, + "a85beb07457a8cd583ab4626e4a1665d17654cc132cfa7622752e519095ab48d": { + "zh": { + "updatedAt": "2025-11-27T09:08:52.147Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:59.379Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:59.381Z" + } } }, "c3e128b68f1271e67f658e6a27e710c60881f8641ac2288d555daa3208c005f9": { @@ -13012,6 +13606,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.961Z" } + }, + "4626508269ebe6c1920ad10ad096b8dba568bff0279bfb0356204ebd6e971f08": { + "ru": { + "updatedAt": "2025-11-27T09:08:52.147Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:59.380Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:59.381Z" + } } }, "c484fc5a7f3148583c4468ad2af97f94fd9cc073f7098786a953f31855eb484e": { @@ -13025,6 +13630,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.965Z" } + }, + "8e44081ae47c2cc39c56f929606d16db2e836b56a354be7dc6b701f4b95b4017": { + "ru": { + "updatedAt": "2025-11-27T09:08:52.145Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:52.146Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:52.146Z" + } } }, "cb12578467473a3c801b153c6cf4d13a10cf518318fd5f17155acd1793145e1b": { @@ -13038,109 +13654,120 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.962Z" } + }, + "0db5aa15e3dbe18b1c681a26cee8856fc9b32345cfacb7a3bf81dc6e5ea5df3b": { + "zh": { + "updatedAt": "2025-11-27T09:08:52.158Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:52.161Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:59.379Z" + } } }, "d7f86ec094d4fd68c7ec3902e09e9c8d6f32e759b1104bbeace470bd65c6ae68": { "aa75faa94f785331aff5bdbe2cbf5c4d6e4d398591d7ba48c786aa44ef7c17d8": { "jp": { - "updatedAt": "2025-11-26T07:24:18.968Z" + "updatedAt": "2025-11-27T09:08:52.164Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.962Z" + "updatedAt": "2025-11-27T09:08:52.161Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.966Z" + "updatedAt": "2025-11-27T09:08:52.161Z" } } }, "dae06bb227a02c2e0c6a941ce0fc26005199e52c806d58d5e67386d3ec46f9d2": { "7b4e58d24764fbe8ed14bec5a6c802f2f143b902c16c654c45567175ea3ba639": { "jp": { - "updatedAt": "2025-11-26T07:24:18.964Z" + "updatedAt": "2025-11-27T09:08:52.152Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.965Z" + "updatedAt": "2025-11-27T09:08:52.154Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.965Z" + "updatedAt": "2025-11-27T09:08:52.154Z" } } }, "dbffe2a957cf5e50f0d77de216e876face0751f13e47da2a20400d54d5665054": { "de205edb219286909fddbd177c0ceefb00f1d4bfa1753f3d37b2539c40ccb3b4": { "jp": { - "updatedAt": "2025-11-26T07:24:18.970Z" + "updatedAt": "2025-11-27T09:08:52.166Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.970Z" + "updatedAt": "2025-11-27T09:08:52.167Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.970Z" + "updatedAt": "2025-11-27T09:08:52.166Z" } } }, "e05629c59a8527d19506d4c60937f73b19f3d5ee1a52750f68b76b2d39b9d9ea": { "746136ea09bf1fea642a7fffc300c1227b17aefa177ec7ad998a0d64c56bbef6": { "jp": { - "updatedAt": "2025-11-26T07:24:18.964Z" + "updatedAt": "2025-11-27T09:08:52.153Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.964Z" + "updatedAt": "2025-11-27T09:08:52.151Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.964Z" + "updatedAt": "2025-11-27T09:08:52.153Z" } } }, "125f424723e0504386a4a184da1e7119c6a2785f018e32a19cce5e8d2b7e5836": { "b707bc414a14120fcb5707df2de39c191647cd3b486308a8a5dafb116a49cb6c": { "jp": { - "updatedAt": "2025-11-26T07:24:18.980Z" + "updatedAt": "2025-11-27T09:08:59.384Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.980Z" + "updatedAt": "2025-11-27T09:08:59.384Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.979Z" + "updatedAt": "2025-11-27T09:08:59.382Z" } } }, "19dc76f171fdf3b0cc1a3933538a1ce4395d12a9b9640597e4903ce3f6b18874": { "de4790564f72c39fe581e10e8ac3237721217d6c3c4ea4ad3cd07779bcc8dcf9": { "jp": { - "updatedAt": "2025-11-26T07:24:18.972Z" + "updatedAt": "2025-11-27T09:08:52.172Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.973Z" + "updatedAt": "2025-11-27T09:08:52.173Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.974Z" + "updatedAt": "2025-11-27T09:08:52.174Z" } } }, "1ce6daa0ad295dac3a93f320fa28494beb73c39ee95608595b498a15a3e40ffa": { "85d971b7567c96e52bcd05d9d21b9c8edef12dd133c8c50e8b309d2d5aa75dc9": { "jp": { - "updatedAt": "2025-11-26T07:24:18.980Z" + "updatedAt": "2025-11-27T09:08:59.386Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.981Z" + "updatedAt": "2025-11-27T09:08:59.386Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.980Z" + "updatedAt": "2025-11-27T09:08:59.385Z" } } }, "232c5ecb0f7a4603625517e022985cf3f01e1ead564c3eb970640640aaae8e12": { "3cf3a4419ef85aa0f20d163b55039c8180a0e1cb6acaf80999e00570756a5e6b": { "jp": { - "updatedAt": "2025-11-26T07:24:18.974Z" + "updatedAt": "2025-11-27T09:08:52.175Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.972Z" + "updatedAt": "2025-11-27T09:08:52.172Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.974Z" + "updatedAt": "2025-11-27T09:08:52.175Z" } } }, @@ -13155,18 +13782,29 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.974Z" } + }, + "86f5cb11e91525fe84a6d7ac02cc19c807d8d6cce44b69717c9bbcefc375cc31": { + "jp": { + "updatedAt": "2025-11-27T09:08:52.168Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:52.170Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:52.171Z" + } } }, "70cf97c8fc949e8db59f1ad657a9a53e576e424eaa88498f6a60d5b2e6729885": { "338d9d04b8e82dfebeacc09a54a398e5b4290b074e597a101394bc9922a1ee1c": { "jp": { - "updatedAt": "2025-11-26T07:24:18.967Z" + "updatedAt": "2025-11-27T09:08:52.163Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.967Z" + "updatedAt": "2025-11-27T09:08:52.162Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.967Z" + "updatedAt": "2025-11-27T09:08:52.162Z" } } }, @@ -13181,18 +13819,29 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.968Z" } + }, + "b37dc6bf582ff09f935ab13559b16785003bbc859edbc25cb5250cf6ed36730e": { + "jp": { + "updatedAt": "2025-11-27T09:08:52.156Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:52.161Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:59.379Z" + } } }, "9453ae6e6128bf52ca32a6699d5950c384605875acc28c886ac70d540ffb5753": { "ad123d6a5a72a60f6d9c309147475eb38bbb468cf9e3ff3d8588b1cabffc4b51": { "jp": { - "updatedAt": "2025-11-26T07:24:18.976Z" + "updatedAt": "2025-11-27T09:08:52.178Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.974Z" + "updatedAt": "2025-11-27T09:08:52.174Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.973Z" + "updatedAt": "2025-11-27T09:08:52.174Z" } } }, @@ -13207,6 +13856,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.970Z" } + }, + "8da324568d7b8b5274356df80d91630b941a46f186301011fca9d984a25b20f1": { + "ru": { + "updatedAt": "2025-11-27T09:08:52.156Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:52.159Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:52.159Z" + } } }, "9b57ca46e862eddb44a226a1ea028a1678344782bb5bedd683e47de11237eb37": { @@ -13220,6 +13880,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.974Z" } + }, + "68a496a4ec4c57830ab397ac2a3d04f92f17c400130928c2a18b7b319b353710": { + "jp": { + "updatedAt": "2025-11-27T09:08:52.169Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:52.169Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:52.170Z" + } } }, "a725d7aefcb81ca44df79432f1da90c48ccc1821c943c4aea64ec662f97fc340": { @@ -13233,6 +13904,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.969Z" } + }, + "1828935083cf996cff81aea1667dc9a5bb681eabb1001a486dc7de9c3d17be77": { + "ru": { + "updatedAt": "2025-11-27T09:08:52.157Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:52.158Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:52.159Z" + } } }, "aff518be70e64a7690e4ccddb5d480073f10c95e3ea3c17ad5f290330ba897bf": { @@ -13246,6 +13928,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.976Z" } + }, + "afced390065bbace06e3ad3e7d262d22da585d3d52fc35e6d2659ce9d6f1de55": { + "jp": { + "updatedAt": "2025-11-27T09:08:52.168Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:52.169Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:52.170Z" + } } }, "b02ce70d6dcff3632894b67e171d3cc1146833fe54d4b06011bbaa8c85a0884d": { @@ -13259,18 +13952,29 @@ "ru": { "updatedAt": "2025-11-26T07:24:18.977Z" } + }, + "16d290c771287aeaa511447cff48ba3f26790d6964ff9ef4e8d1df0086f94e4c": { + "ru": { + "updatedAt": "2025-11-27T09:08:52.155Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:52.170Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:52.171Z" + } } }, "b0eb0aa22feb0a0e87aa525beba888ab6c811439fb42a8629b3439c190197487": { "f0d582626df8dfbb7340a088943ebaa56822080b63fa866b42e18086e898b317": { "jp": { - "updatedAt": "2025-11-26T07:24:18.972Z" + "updatedAt": "2025-11-27T09:08:52.172Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.973Z" + "updatedAt": "2025-11-27T09:08:52.173Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.974Z" + "updatedAt": "2025-11-27T09:08:52.175Z" } } }, @@ -13285,6 +13989,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.974Z" } + }, + "9643b5165e89def525dc375e71c872c60a8f7dd711c239056b81159bc679dcbe": { + "ru": { + "updatedAt": "2025-11-27T09:08:52.170Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:52.171Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:52.171Z" + } } }, "d865d8906bab480f2412b8134877a2a96913a3533480602839cb1425678255d8": { @@ -13298,70 +14013,81 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.968Z" } + }, + "9d65695564bebf9c14e110dfe0a95ba918be4e978cdc05a279d1f5d41bd4ee32": { + "jp": { + "updatedAt": "2025-11-27T09:08:52.155Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:52.156Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:59.378Z" + } } }, "db1f6b413c1b5c95a7fe86857804d32fa0bf64bd126d0d1bb0a19d36642d1ff9": { "2a09e7a09ae046fb1bc7a86b262a2891822048befffff23b62cc68c9e7e58324": { "jp": { - "updatedAt": "2025-11-26T07:24:18.968Z" + "updatedAt": "2025-11-27T09:08:52.165Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.966Z" + "updatedAt": "2025-11-27T09:08:52.161Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.967Z" + "updatedAt": "2025-11-27T09:08:52.163Z" } } }, "deaf9da7af41c9dbd196870e7d946c2d92a2b4098eacc1d9d67ca6e552d438a5": { "fdf52ca20d97fc34fd94ada024eedfd00d77d9abbb0aed5df8411acf741dbddf": { "jp": { - "updatedAt": "2025-11-26T07:24:18.971Z" + "updatedAt": "2025-11-27T09:08:52.167Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.971Z" + "updatedAt": "2025-11-27T09:08:52.167Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.971Z" + "updatedAt": "2025-11-27T09:08:52.167Z" } } }, "ed51dd17995f6639353bb7c4089fa97d4f8dc7203bca3e26312cb31005fd949d": { "a382bedb279fccc3ac9fd5b4fe0ce9a876319b2d0652651cf74622f32f475762": { "jp": { - "updatedAt": "2025-11-26T07:24:18.968Z" + "updatedAt": "2025-11-27T09:08:52.164Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.967Z" + "updatedAt": "2025-11-27T09:08:52.163Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.968Z" + "updatedAt": "2025-11-27T09:08:52.164Z" } } }, "ef55ad557299e30ca7d8ccbe3f701f3efcfb9407e677358fda64040c88c2a0e3": { "b7534a46cfb2aba578904a3ead55b3a917dd6ea809c434df147c1f98e5defeeb": { "jp": { - "updatedAt": "2025-11-26T07:24:18.975Z" + "updatedAt": "2025-11-27T09:08:52.176Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.975Z" + "updatedAt": "2025-11-27T09:08:52.176Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.973Z" + "updatedAt": "2025-11-27T09:08:52.173Z" } } }, "f4e514c65ad19dadd6e36981ced2004e96119143057123e6f8343003c976414b": { "f9be206d9401669361ef8b3907f74e41604e01c3da770a270a3b262d0cf9e0b7": { "jp": { - "updatedAt": "2025-11-26T07:24:18.966Z" + "updatedAt": "2025-11-27T09:08:52.155Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.972Z" + "updatedAt": "2025-11-27T09:08:52.172Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.972Z" + "updatedAt": "2025-11-27T09:08:52.173Z" } } }, @@ -13376,83 +14102,94 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.971Z" } + }, + "0325309625a326b35142132e72492d62272031ba36d1a42a0998e56b1719cc40": { + "ru": { + "updatedAt": "2025-11-27T09:08:52.157Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:52.157Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:52.158Z" + } } }, "025fd49fff3f320d5bf6441808dc379cdaa73f78cddd66059a1f1d989a1102a9": { "5cb5606bdf1fcec7d40bb07c9211307f195d39d691aa2cabd78b397dd79771c5": { "jp": { - "updatedAt": "2025-11-26T07:24:18.977Z" + "updatedAt": "2025-11-27T09:08:52.179Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.994Z" + "updatedAt": "2025-11-27T09:08:59.438Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.986Z" + "updatedAt": "2025-11-27T09:08:59.432Z" } } }, "1e4b57e276f3147467bca9c9b34ef7237444bbb31a33e9319c88df9db588b8ef": { "781ade8017e15eb182d04e5802e03ea4655dd91aa963a8d3d6d5e111348f2ef9": { "jp": { - "updatedAt": "2025-11-26T07:24:18.982Z" + "updatedAt": "2025-11-27T09:08:59.390Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.981Z" + "updatedAt": "2025-11-27T09:08:59.387Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.980Z" + "updatedAt": "2025-11-27T09:08:59.384Z" } } }, "243d4d43037034f08f1c4e2b8b9dad2508192f28c9087e19fdb7e02cb828ad52": { "8945c696900efad4645c2f95b6f862201f4275bbed3998caa867b1ac37deb350": { "jp": { - "updatedAt": "2025-11-26T07:24:18.995Z" + "updatedAt": "2025-11-27T09:08:59.442Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.994Z" + "updatedAt": "2025-11-27T09:08:59.438Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.994Z" + "updatedAt": "2025-11-27T09:08:59.436Z" } } }, "2d5ce469cb4fcd9ac57756723325805176514ce512b8039ab05e3fde56bb12a1": { "37840663d4e6d0f5bd1b9b294c2b0feff352bd6bdd003b973cd9e9e03ef04b2a": { "jp": { - "updatedAt": "2025-11-26T07:24:18.995Z" + "updatedAt": "2025-11-27T09:08:59.440Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.995Z" + "updatedAt": "2025-11-27T09:08:59.440Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.995Z" + "updatedAt": "2025-11-27T09:08:59.440Z" } } }, "344aa60f54b872aa215951fce76265aad2f3f1d6ff8bacd50188b941ce5098c8": { "7a8f03b82b278bf1a01cbbd7ff1923941fcfc7239248c640ae1b2eec075f2bd0": { "jp": { - "updatedAt": "2025-11-26T07:24:18.976Z" + "updatedAt": "2025-11-27T09:08:52.178Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.976Z" + "updatedAt": "2025-11-27T09:08:52.177Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.976Z" + "updatedAt": "2025-11-27T09:08:52.178Z" } } }, "53d65ec30475ca0007e7da32916549bd02696879f561f268e8e3a58c0dfe9de5": { "e1d20246377ea7703705aeea779bd04141833d80b87084862959aeb3e9a08c2e": { "jp": { - "updatedAt": "2025-11-26T07:24:18.973Z" + "updatedAt": "2025-11-27T09:08:52.174Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.974Z" + "updatedAt": "2025-11-27T09:08:52.176Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.973Z" + "updatedAt": "2025-11-27T09:08:52.173Z" } } }, @@ -13467,135 +14204,146 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.975Z" } + }, + "aea269c29122c965661a61ed9e0de26050201cfa241ccd1b34c694f29cebaf67": { + "zh": { + "updatedAt": "2025-11-27T09:08:52.169Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:52.169Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:52.171Z" + } } }, "5c4dcedff3da1da80fb63b9461c1c89223beee53c37a3b5a538edc528453f0b2": { "620bb0c22df1a23b2a8df3eb395373d44296904b0332797c29514f90a31606b2": { "jp": { - "updatedAt": "2025-11-26T07:24:18.973Z" + "updatedAt": "2025-11-27T09:08:52.174Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.973Z" + "updatedAt": "2025-11-27T09:08:52.174Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.975Z" + "updatedAt": "2025-11-27T09:08:52.177Z" } } }, "719a6d655a54f957cec2c65e95d6651040b93a639ad6aa44861b85ae09c1c5c5": { "fafe4a083f40e8f75644ffb779bcedb7065ad373f06a042ecf2238313aeef393": { "jp": { - "updatedAt": "2025-11-26T07:24:18.966Z" + "updatedAt": "2025-11-27T09:08:52.171Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.975Z" + "updatedAt": "2025-11-27T09:08:52.176Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.976Z" + "updatedAt": "2025-11-27T09:08:52.177Z" } } }, "82b281d3017bb8cc4db38036df8fbbba3430846e468a784c1b2e6d4d8e43b6d7": { "617961c999f1bf6eb48c03b5f56f99b3a7309dba7bcdb74914b6a76f36a56413": { "jp": { - "updatedAt": "2025-11-26T07:24:18.966Z" + "updatedAt": "2025-11-27T09:08:52.155Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.977Z" + "updatedAt": "2025-11-27T09:08:52.179Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.977Z" + "updatedAt": "2025-11-27T09:08:52.179Z" } } }, "8cbea57ac40a6d6358183da1d28c1a09304c1b4a5edf96e2c4a808dc6773ba41": { "39a62a98184d3c0536249ba36e562c954047436e58e929927516fea5318e895b": { "jp": { - "updatedAt": "2025-11-26T07:24:18.976Z" + "updatedAt": "2025-11-27T09:08:52.177Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.975Z" + "updatedAt": "2025-11-27T09:08:52.176Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.975Z" + "updatedAt": "2025-11-27T09:08:52.176Z" } } }, "940796a1aae864d0eda15bb34a302626f3ad6a2c1d3af60ba921316d95e81a13": { "301a0a16ec26f11dd9fb52328307087f8c2528fea166cdea553309d6e58106d4": { "jp": { - "updatedAt": "2025-11-26T07:24:18.974Z" + "updatedAt": "2025-11-27T09:08:52.175Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.974Z" + "updatedAt": "2025-11-27T09:08:52.175Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.972Z" + "updatedAt": "2025-11-27T09:08:52.172Z" } } }, "ab91d27df4d8b8148381ccfd51e2bc9b99a1625ef08e73f1d9a0eb197e5397a2": { "a1465aea8fd40bd2a71567dcd05c6ce53e13c60e2ac21919e271ebe1b6782f74": { "jp": { - "updatedAt": "2025-11-26T07:24:18.983Z" + "updatedAt": "2025-11-27T09:08:59.391Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.979Z" + "updatedAt": "2025-11-27T09:08:59.383Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.976Z" + "updatedAt": "2025-11-27T09:08:52.177Z" } } }, "b7c59a245d47fd54f7c7477cbd498ba2937399586e98674be51c6a7c40b2ae70": { "410fd44fe625de2b185ba9098597ace5e062b1884403c90912660d14d188d9bc": { "jp": { - "updatedAt": "2025-11-26T07:24:18.976Z" + "updatedAt": "2025-11-27T09:08:52.178Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.976Z" + "updatedAt": "2025-11-27T09:08:52.177Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.977Z" + "updatedAt": "2025-11-27T09:08:52.178Z" } } }, "d03338e91e1f725469cbc573d2b5a49c055fe39e67ab09e92b408e3e6dce3361": { "fee22f53b36f6d80c05058f7c0b07e16a2dbb531dbf640d90efae0a82972bd4c": { "ru": { - "updatedAt": "2025-11-26T07:24:18.982Z" + "updatedAt": "2025-11-27T09:08:59.390Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.982Z" + "updatedAt": "2025-11-27T09:08:59.390Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:18.981Z" + "updatedAt": "2025-11-27T09:08:59.388Z" } } }, "e6adf4028e4ac7e7c24f84c4aa34ae7d43b6f397a67523ba3f4d24de317db247": { "93b602e423297a4fe948c7f19b73130ce3fb146f09d980aa1450c55a9055f392": { "jp": { - "updatedAt": "2025-11-26T07:24:18.973Z" + "updatedAt": "2025-11-27T09:08:52.174Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.972Z" + "updatedAt": "2025-11-27T09:08:52.172Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.974Z" + "updatedAt": "2025-11-27T09:08:52.175Z" } } }, "07567d62aae7f94a29e9f4d850ede3f6eec697596681ec8f0be305090388b473": { "781c617b76b44e877e7e119770ca6ecc45863cb3bae1a444fe8807d6ebada97d": { "jp": { - "updatedAt": "2025-11-26T07:24:18.996Z" + "updatedAt": "2025-11-27T09:08:59.442Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.993Z" + "updatedAt": "2025-11-27T09:08:59.435Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.996Z" + "updatedAt": "2025-11-27T09:08:59.444Z" } } }, @@ -13610,6 +14358,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.116Z" } + }, + "3a8f100e338d722f8c4dbb2e623e5c4dc5a4d6f3bb6f2d5ba48737830cec8fbf": { + "jp": { + "updatedAt": "2025-11-27T09:08:59.461Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:59.467Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:59.468Z" + } } }, "153ff0c08aecf20c420ae5dfa80993225532cf87b7d9c41e419a23934521c9a0": { @@ -13623,31 +14382,42 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.114Z" } + }, + "9d361fb3775a562cb507335e776089308bf758ae2747ae0957bd649d98faedc0": { + "jp": { + "updatedAt": "2025-11-27T09:08:59.458Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:59.464Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:59.468Z" + } } }, "24d0c9c911ed73221e135198269c3368d046b7994b57b0fb624351b888e71a8d": { "547964d07a357f1d9316aadc7016d3943cece91207d0037cea7d08bb8914f5fd": { "jp": { - "updatedAt": "2025-11-26T07:24:18.995Z" + "updatedAt": "2025-11-27T09:08:59.439Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.995Z" + "updatedAt": "2025-11-27T09:08:59.438Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.984Z" + "updatedAt": "2025-11-27T09:08:59.431Z" } } }, "32982205f1155c2c2e05fe89e04c9cd20828fb0a653c7c72c7da8d61c3253607": { "641d2a22f3cbbdbb5877f4694e0f7a70c2d4d0ea47aafe7ac478509d2f4bda90": { "jp": { - "updatedAt": "2025-11-26T07:24:18.997Z" + "updatedAt": "2025-11-27T09:08:59.448Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.110Z" + "updatedAt": "2025-11-27T09:08:59.449Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.110Z" + "updatedAt": "2025-11-27T09:08:59.449Z" } } }, @@ -13662,83 +14432,94 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.981Z" } + }, + "86296003488064b48670c7fa1dea340b94da850eefa6ecaf62711f1d83875b93": { + "zh": { + "updatedAt": "2025-11-27T09:08:52.180Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:52.180Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:52.181Z" + } } }, "38b350a818493921c30933efc9a00f13c8de2b1d444f825141d01c27a7c0dd78": { "5c8a7b7c41cedb9f12aa1dfb4a692603fdc40391fd020d73e7415f0890b583d6": { "jp": { - "updatedAt": "2025-11-26T07:24:18.996Z" + "updatedAt": "2025-11-27T09:08:59.443Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.988Z" + "updatedAt": "2025-11-27T09:08:59.434Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.994Z" + "updatedAt": "2025-11-27T09:08:59.437Z" } } }, "769f4a7a3d111208fa74381508655c4dc5d7dcae5fe2808879e68d3cdc7b3382": { "489e0fb1db1004ec357920c6836eb4613ef37b11126cdd9c08bcfd3ba4aff449": { "jp": { - "updatedAt": "2025-11-26T07:24:18.981Z" + "updatedAt": "2025-11-27T09:08:59.387Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.982Z" + "updatedAt": "2025-11-27T09:08:59.389Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.972Z" + "updatedAt": "2025-11-27T09:08:52.168Z" } } }, "79e713eaf2edf1bc512ae5d02a7d5d250a9659ca697b83603287e03063cf76ed": { "4ae0bd2c9234eb6b17182e97f10042bb3a03df6b39a2c2156858ba7f8c5537c8": { "jp": { - "updatedAt": "2025-11-26T07:24:18.981Z" + "updatedAt": "2025-11-27T09:08:59.386Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.982Z" + "updatedAt": "2025-11-27T09:08:59.388Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.980Z" + "updatedAt": "2025-11-27T09:08:59.385Z" } } }, "85ba3aaa892ebfeca0dd4e9f91647080ae86a451c4f6a00a9725e2f2d8687ecd": { "b2beddd5e719b038a7b64dcbb0affae7ddf832501e2aa7fafd227bbe1cb45855": { "jp": { - "updatedAt": "2025-11-26T07:24:18.983Z" + "updatedAt": "2025-11-27T09:08:59.392Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.984Z" + "updatedAt": "2025-11-27T09:08:59.393Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.983Z" + "updatedAt": "2025-11-27T09:08:59.393Z" } } }, "8f1cbe44d3d43c4cea34fea884586e29908abcb748f98fa025ccc41b62e45d3e": { "8e89cf7d6f4105f746591f40378eb84bf4bf9932ed4187023e334efc47a4b281": { "jp": { - "updatedAt": "2025-11-26T07:24:18.983Z" + "updatedAt": "2025-11-27T09:08:59.391Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.980Z" + "updatedAt": "2025-11-27T09:08:59.385Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.982Z" + "updatedAt": "2025-11-27T09:08:59.389Z" } } }, "a094ce3a28e694708179862da79fbac7d2795b1716246328a6d1d45989e4d89f": { "01511979759628779536c4426b3446323cd0ba908ba9e69ed46eef6c4e519583": { "jp": { - "updatedAt": "2025-11-26T07:24:18.996Z" + "updatedAt": "2025-11-27T09:08:59.443Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.995Z" + "updatedAt": "2025-11-27T09:08:59.441Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.993Z" + "updatedAt": "2025-11-27T09:08:59.436Z" } } }, @@ -13753,109 +14534,120 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.982Z" } + }, + "52272796a3ff10b33a617542859f14d9522e98d92a2f558892a1b3822e8ba86e": { + "zh": { + "updatedAt": "2025-11-27T09:08:52.179Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:52.180Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:52.180Z" + } } }, "b28fb4d49a614d643a46b4d31f46daf5e9fe6cda08176cd2f5e078a055407bab": { "4108560a1744ad0710588b9cd75e007435917814d8b73b2316426c9d931d44c6": { "jp": { - "updatedAt": "2025-11-26T07:24:18.988Z" + "updatedAt": "2025-11-27T09:08:59.434Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.988Z" + "updatedAt": "2025-11-27T09:08:59.434Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.988Z" + "updatedAt": "2025-11-27T09:08:59.434Z" } } }, "b626ba6a5d5d3ea8fc4f8b1fbab4067c3c422e1f441d82656ea4e1576b013f77": { "d39e1a92c96f946e67f7b31e6fa41e119a9a923698dbf319033ccb86b70446c3": { "jp": { - "updatedAt": "2025-11-26T07:24:18.972Z" + "updatedAt": "2025-11-27T09:08:52.168Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.979Z" + "updatedAt": "2025-11-27T09:08:59.382Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.979Z" + "updatedAt": "2025-11-27T09:08:59.382Z" } } }, "bfdad58f0ce19b8378572771619d14adf32b34da41695f420ad03ed4496197bf": { "c5d8b4488de9c51f7fa4c711f9885ca220f45c37ba8c7062bb02813316daa7be": { "jp": { - "updatedAt": "2025-11-26T07:24:18.979Z" + "updatedAt": "2025-11-27T09:08:59.383Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.980Z" + "updatedAt": "2025-11-27T09:08:59.383Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.979Z" + "updatedAt": "2025-11-27T09:08:59.382Z" } } }, "cb1ba7289dde002c321160e758dcebe6637312272f6a21430a36ca8d2bd0457e": { "6d2f41b7dfc6a91c7ad657ff5eb668944436fee3888a6396625bc67d1726719c": { "jp": { - "updatedAt": "2025-11-26T07:24:18.996Z" + "updatedAt": "2025-11-27T09:08:59.446Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.995Z" + "updatedAt": "2025-11-27T09:08:59.441Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.993Z" + "updatedAt": "2025-11-27T09:08:59.436Z" } } }, "cdbd4e3a0fcbd1a9915e133e9c7749b9e313633614596b23aedac6d6da31105d": { "184622e2d0685a2859808cd7eb92c85650ed8abc39d7a38af056d81ff2c94654": { "jp": { - "updatedAt": "2025-11-26T07:24:18.972Z" + "updatedAt": "2025-11-27T09:08:52.168Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.980Z" + "updatedAt": "2025-11-27T09:08:59.386Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.979Z" + "updatedAt": "2025-11-27T09:08:59.383Z" } } }, "dedecc80a24539ab5ef48968c83b54eb08fdd06c15720daadff55822ec0b257c": { "5da52f81a0a0c35a9810a8ba27a1945c10ef4931f047eff638a1e08016f6bd12": { "jp": { - "updatedAt": "2025-11-26T07:24:18.982Z" + "updatedAt": "2025-11-27T09:08:59.390Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.983Z" + "updatedAt": "2025-11-27T09:08:59.393Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.980Z" + "updatedAt": "2025-11-27T09:08:59.384Z" } } }, "e7ff4d7fd0bd848202048d33c9e285c0b7eaa06b86b242461c43fe7e001d1b39": { "574ff1d32ed4fa6964c51389dc9f9d35f7a76cff9623137d2922ce0856a65215": { "jp": { - "updatedAt": "2025-11-26T07:24:18.982Z" + "updatedAt": "2025-11-27T09:08:59.389Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.981Z" + "updatedAt": "2025-11-27T09:08:59.387Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.981Z" + "updatedAt": "2025-11-27T09:08:59.388Z" } } }, "e83fb55099e0c1e7efe462a3fc836fad5d3f3480534f4512599d1bb0307a952a": { "00125ab6f5435064f526a97e752f345080fe710b1445d06711d4011db26a78f3": { "jp": { - "updatedAt": "2025-11-26T07:24:18.997Z" + "updatedAt": "2025-11-27T09:08:59.448Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.983Z" + "updatedAt": "2025-11-27T09:08:59.391Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.983Z" + "updatedAt": "2025-11-27T09:08:59.392Z" } } }, @@ -13870,6 +14662,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.119Z" } + }, + "86d2b49dce63d0030956d9394380f458d82580fccf11182038c47ae25941e202": { + "jp": { + "updatedAt": "2025-11-27T09:08:59.476Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:59.481Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:59.482Z" + } } }, "027f426455e0e6842638722daa037b778ebc144d4ad338fe61f0710ec20e99b4": { @@ -13883,6 +14686,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.112Z" } + }, + "c1078383e79ac339256601f181a193ab1979b13400901d0b702e398f5163d3ca": { + "ru": { + "updatedAt": "2025-11-27T09:08:59.459Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:59.459Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:59.464Z" + } } }, "0819d9360d80872f0e20752e84412951fa413fcd532b41e457c8b552f0613288": { @@ -13896,6 +14710,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.119Z" } + }, + "d83c42928fec524182b7980ee07946e52ffe8f524b8943b83d109bf0a5e6b9b4": { + "ru": { + "updatedAt": "2025-11-27T09:08:52.184Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:52.185Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:59.480Z" + } } }, "24d804d8ac3ccf43c75fb8b0dabf735d89f27625497f0d7acaf06933ccacda4e": { @@ -13909,18 +14734,29 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.113Z" } + }, + "9ae107eff975761568ef37cb2d50a6120d87504b7eba954b3c75987d6acfcb56": { + "zh": { + "updatedAt": "2025-11-27T09:08:59.457Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:59.457Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:59.465Z" + } } }, "2e14d7ea42f23a61da8855e77c500092cd204a036888c976b84a9a6bf71b8eaf": { "1e988897ad46c538e51b835cd9cd1cf89a4e7059611c53ec91e71868db50124f": { "jp": { - "updatedAt": "2025-11-26T07:24:18.997Z" + "updatedAt": "2025-11-27T09:08:59.447Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.997Z" + "updatedAt": "2025-11-27T09:08:59.448Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.996Z" + "updatedAt": "2025-11-27T09:08:59.446Z" } } }, @@ -13935,57 +14771,68 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.116Z" } + }, + "7557e28163d56959272cc839ee4219d9744ff724198372cda0479d4869f1c55b": { + "jp": { + "updatedAt": "2025-11-27T09:08:59.456Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:59.457Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:59.460Z" + } } }, "52ccd94aa1e934784ca02ff91c16f3972d775ebf46b09dc38022536e439186ff": { "c395705e691a1be5ddcfb6d1b262f9a0dfd9470788de834bcb6fbc5d0d8f0c8c": { "jp": { - "updatedAt": "2025-11-26T07:24:18.987Z" + "updatedAt": "2025-11-27T09:08:59.433Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.977Z" + "updatedAt": "2025-11-27T09:08:52.179Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.994Z" + "updatedAt": "2025-11-27T09:08:59.438Z" } } }, "5564c05bb16d853324ac6b1bc9b36248c158160a7e1fbac14ae9b86cf5514569": { "ea348755a3baf8bbcd34194da4c4529bb44c7a9a402faf39e87b9d75135b0b81": { "jp": { - "updatedAt": "2025-11-26T07:24:12.117Z" + "updatedAt": "2025-11-27T09:08:59.472Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.117Z" + "updatedAt": "2025-11-27T09:08:59.473Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.118Z" + "updatedAt": "2025-11-27T09:08:59.474Z" } } }, "592a7f7d3a8dbeda07da824c065c0da9b3e247906e6dbf77674f6a63df3136da": { "2293abaeae3fe16820f6c7c9a37b91841e60a17efff63af19cb7a8d4a0eb2456": { "jp": { - "updatedAt": "2025-11-26T07:24:18.984Z" + "updatedAt": "2025-11-27T09:08:59.431Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.997Z" + "updatedAt": "2025-11-27T09:08:59.446Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.995Z" + "updatedAt": "2025-11-27T09:08:59.442Z" } } }, "59e3664663d669e021fbd29e32b23a365ecc37fceaccac1e3c9e74f070873d03": { "664e682e3d269a460d26982803f72d705695f346f7f43cd3b62de24703236061": { "jp": { - "updatedAt": "2025-11-26T07:24:18.984Z" + "updatedAt": "2025-11-27T09:08:59.394Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.996Z" + "updatedAt": "2025-11-27T09:08:59.445Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.996Z" + "updatedAt": "2025-11-27T09:08:59.445Z" } } }, @@ -14000,70 +14847,81 @@ "ru": { "updatedAt": "2025-11-26T07:24:12.113Z" } + }, + "7312a2f89d65b933514be67491fbd4c987461524ae097172ff5410ff3b41a21e": { + "ru": { + "updatedAt": "2025-11-27T09:08:59.461Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:59.462Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:59.462Z" + } } }, "650407ab32a2947c9874bd0fc813344a1675577ba430ba4ddefb9497ceec4df4": { "ad334487bb9276e08638e9be4af54b1205755e694d6c1911d00059d8415fae44": { "jp": { - "updatedAt": "2025-11-26T07:24:18.987Z" + "updatedAt": "2025-11-27T09:08:59.433Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.977Z" + "updatedAt": "2025-11-27T09:08:52.179Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.995Z" + "updatedAt": "2025-11-27T09:08:59.439Z" } } }, "77307f3a7d1b826bb6622b0f3ffa4c1f7706494839393590234d7206bbf2be8f": { "017f574127f909641a3e7c014420c6954edb618ef3d438854515fd0f5dd1e298": { "jp": { - "updatedAt": "2025-11-26T07:24:18.995Z" + "updatedAt": "2025-11-27T09:08:59.439Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.993Z" + "updatedAt": "2025-11-27T09:08:59.435Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.986Z" + "updatedAt": "2025-11-27T09:08:59.432Z" } } }, "914120dcc6c64903cecac105d4df906767aa83b440456a677f5192431cc83d6e": { "4af035b51000a041cbfd0989fe3c52f7370aaeec63d4f8ae146a2776b899fae3": { "jp": { - "updatedAt": "2025-11-26T07:24:18.984Z" + "updatedAt": "2025-11-27T09:08:59.431Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.987Z" + "updatedAt": "2025-11-27T09:08:59.433Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.994Z" + "updatedAt": "2025-11-27T09:08:59.437Z" } } }, "9c50ae2540822f01de38fd832846c44e0815140836bcf8df45e61a172e36831a": { "48e37702889833007771c8e75d0ebddc5a93b178a5f5ae6c2512d72beca89b15": { "jp": { - "updatedAt": "2025-11-26T07:24:12.116Z" + "updatedAt": "2025-11-27T09:08:59.470Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.115Z" + "updatedAt": "2025-11-27T09:08:59.470Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.116Z" + "updatedAt": "2025-11-27T09:08:59.470Z" } } }, "a1a93279f18aea8b2a8afde127dc919f6b9381d84fdb78e820af9fa87a4f85d7": { "8ef32573cad40bd5922dd07f6e65cb11c503497f1996866bd36c8bd70fdbb4a4": { "jp": { - "updatedAt": "2025-11-26T07:24:18.984Z" + "updatedAt": "2025-11-27T09:08:59.432Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.996Z" + "updatedAt": "2025-11-27T09:08:59.445Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.994Z" + "updatedAt": "2025-11-27T09:08:59.437Z" } } }, @@ -14078,6 +14936,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.117Z" } + }, + "ea316ef388947a1bd8b8ce3b019ab9377bd0b52bbf557f4ee29826ea0406c8d6": { + "jp": { + "updatedAt": "2025-11-27T09:08:59.454Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:59.461Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:59.466Z" + } } }, "b1eb514e8efc1da765f03844ec981e8df30e9e90bffe8f559550b33fcb148386": { @@ -14091,18 +14960,29 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.114Z" } + }, + "fe5653fd0a01cc377763c0dd39db11ab651632c5116e8e68e5b26336f447b84b": { + "ru": { + "updatedAt": "2025-11-27T09:08:59.455Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:59.467Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:59.468Z" + } } }, "c35229fb2bf6081a5aa25c5273a6bc76f7fb1f8586da22277f9b09cdfe9c161e": { "96b4bbf5cd710c7028d1dcff43630fc1346305b9fc31fd06b6feaa5771a11a01": { "jp": { - "updatedAt": "2025-11-26T07:24:18.996Z" + "updatedAt": "2025-11-27T09:08:59.444Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.995Z" + "updatedAt": "2025-11-27T09:08:59.440Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.996Z" + "updatedAt": "2025-11-27T09:08:59.444Z" } } }, @@ -14117,44 +14997,55 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.114Z" } + }, + "624184c131264cdb4084e3b3202e40b83320cab7475a7b58e74d2b6244ec0c40": { + "ru": { + "updatedAt": "2025-11-27T09:08:59.455Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:59.458Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:59.463Z" + } } }, "d88cb52cd1ee657459479ad84c5c952fbde653226d9799e31239473fa8b0fd23": { "fb9e79efbf3a2d62721e7f715f0699a0dc1f1dbc6e75db72c520ba3026346f5b": { "jp": { - "updatedAt": "2025-11-26T07:24:18.997Z" + "updatedAt": "2025-11-27T09:08:59.447Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.110Z" + "updatedAt": "2025-11-27T09:08:59.450Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.110Z" + "updatedAt": "2025-11-27T09:08:59.450Z" } } }, "fbb5789352a952225705586e3f21b0e7e42cd17127fe8ed8e8ca218112140a27": { "19f784e7b489f48a3d495a2e1c1d68856626b21b4cedf271ef931452b7add1ce": { "jp": { - "updatedAt": "2025-11-26T07:24:18.994Z" + "updatedAt": "2025-11-27T09:08:59.437Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.988Z" + "updatedAt": "2025-11-27T09:08:59.435Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.994Z" + "updatedAt": "2025-11-27T09:08:59.436Z" } } }, "123aeaa56592e54f31fc778623c345f09749d4e0e65e902af7d1a93337a425bf": { "f2e0676875f34dd5520562d2cd21b217af1b44b68311b6c948988adef7f432a4": { "jp": { - "updatedAt": "2025-11-26T07:24:02.777Z" + "updatedAt": "2025-11-27T09:08:52.192Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.778Z" + "updatedAt": "2025-11-27T09:08:52.193Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.779Z" + "updatedAt": "2025-11-27T09:08:52.197Z" } } }, @@ -14169,18 +15060,29 @@ "zh": { "updatedAt": "2025-11-26T07:24:02.774Z" } + }, + "0c123e0b345e289824f7799b173b1794fb0e64b2d9bca74c9615d96f2d87b4b3": { + "jp": { + "updatedAt": "2025-11-27T09:08:52.186Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:59.480Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:59.482Z" + } } }, "1f24f51d58cccfdaab17312855078466a67ec6632bf8534638b69f8f5f3551c5": { "ac3de3782a6dcd627cb900e0e3c325463324737e43db6385a4a9edbf6ff7796b": { "jp": { - "updatedAt": "2025-11-26T07:24:02.777Z" + "updatedAt": "2025-11-27T09:08:52.192Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.780Z" + "updatedAt": "2025-11-27T09:08:52.200Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.778Z" + "updatedAt": "2025-11-27T09:08:52.196Z" } } }, @@ -14195,6 +15097,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.984Z" } + }, + "56afa0eb5a088f7a9f1763feba7e0a86e58b5f20fd0b80d4eb17728b4ebe4e4f": { + "ru": { + "updatedAt": "2025-11-27T09:08:59.462Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:59.464Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:59.466Z" + } } }, "3a83cb18dec6067fc17dcd4bf9d92d724df7894996965a2aa6ddadaa218d8377": { @@ -14208,6 +15121,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:02.780Z" } + }, + "246e677fdb1037560ce0f99220806100065ce49a0a719ec84b0ef40a87caadcb": { + "ru": { + "updatedAt": "2025-11-27T09:08:52.195Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:52.195Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:52.196Z" + } } }, "4db1e2e4946307003f6c8e7296d88d16ea1fa0a50642705d3f4a2f6130b44a03": { @@ -14221,57 +15145,68 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.111Z" } + }, + "c65bebaf1409b6811c25b61ee9e1a29774f1a9a74497375c4b00bb9357be3fa7": { + "ru": { + "updatedAt": "2025-11-27T09:08:59.456Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:59.463Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:59.463Z" + } } }, "573d715ca8095f0e4ca44d1cba02fd75a74bbc9c173567252833684110e7eed3": { "87c69d03f3d553568b16a72f5fe7243c7fbedec0f55aa5c55695e0895009d96f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.112Z" + "updatedAt": "2025-11-27T09:08:59.451Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.111Z" + "updatedAt": "2025-11-27T09:08:59.394Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.113Z" + "updatedAt": "2025-11-27T09:08:59.452Z" } } }, "6127321ac3891bee9f802edc9f97eeefd28aa0d40a647d0fa4cda55abfce14ff": { "d3499050f8c6e7b0a1bd1cf5e8bb8e940304335d153d81d9717b6c21c16c2985": { "ru": { - "updatedAt": "2025-11-26T07:24:12.121Z" + "updatedAt": "2025-11-27T09:08:52.187Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.121Z" + "updatedAt": "2025-11-27T09:08:59.475Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.119Z" + "updatedAt": "2025-11-27T09:08:59.451Z" } } }, "650d9f2cc9a940fe5940498f6e144305c01bbf36d3ee2dc4bbd8968c9f8967c6": { "17de42c037b1a363aacffaae4c43b7e7c471839ed6cecff05326ffc1616e8599": { "jp": { - "updatedAt": "2025-11-26T07:24:12.111Z" + "updatedAt": "2025-11-27T09:08:59.394Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.112Z" + "updatedAt": "2025-11-27T09:08:59.452Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.111Z" + "updatedAt": "2025-11-27T09:08:59.394Z" } } }, "6813da4ad4c4af5afb1c7574805fe2dd8caa6c96f485a82e9c901ef475f08fee": { "b0517d0f55cd108acdbbe709883cd25fbda01a6703d9b51ff50bd2116dae6e4b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.116Z" + "updatedAt": "2025-11-27T09:08:59.471Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.116Z" + "updatedAt": "2025-11-27T09:08:59.471Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.116Z" + "updatedAt": "2025-11-27T09:08:59.471Z" } } }, @@ -14286,6 +15221,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.111Z" } + }, + "8f32e4aae111f92315bc93e0ccdf602c223cf64f5840140b6501f1f14e174cbb": { + "zh": { + "updatedAt": "2025-11-27T09:08:59.457Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:59.459Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:59.461Z" + } } }, "6fb070f1b02c940c98234a8aaec25f6c6469691d330c72faa861b07763ae4725": { @@ -14299,6 +15245,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:02.773Z" } + }, + "355de205d2e66f18b00c07141db16e3eae08111fa3207ff29e5d7e2db19cc526": { + "zh": { + "updatedAt": "2025-11-27T09:08:52.186Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:59.476Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:59.479Z" + } } }, "9d8c420729f6dd40353fd0b37376eb59e28f1b3a71685df761a9e2ad46f35ca4": { @@ -14312,18 +15269,29 @@ "zh": { "updatedAt": "2025-11-26T07:24:02.774Z" } + }, + "74b3411891901f287f4f0295c14cd3b703d6197988dcd91f4e53985964af404b": { + "ru": { + "updatedAt": "2025-11-27T09:08:52.186Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:59.479Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:59.483Z" + } } }, "9fe9b6ce42a6ad2189bab2836ba94c9f99886df803b81bdc3dec38815dad7c26": { "2a6580470ab1e345d52a27c96f69c6e94d335299083f18b83f4f16b1913c6ee0": { "jp": { - "updatedAt": "2025-11-26T07:24:02.775Z" + "updatedAt": "2025-11-27T09:08:52.189Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.774Z" + "updatedAt": "2025-11-27T09:08:52.188Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.774Z" + "updatedAt": "2025-11-27T09:08:52.189Z" } } }, @@ -14338,6 +15306,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.112Z" } + }, + "5db4f94f0470b0bb3fb558e3b1e3766ee12f80ad603da74665b1a15b3b16c254": { + "ru": { + "updatedAt": "2025-11-27T09:08:59.466Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:59.469Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:59.469Z" + } } }, "bca19f630581f8646ca04081842168a1d45e2ea5896cbdbab33c160594c627c3": { @@ -14351,6 +15330,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.984Z" } + }, + "0e3c63c854cf8f55abf51be5d8395d72aed010f11ba09ea870f1dd42d4d16794": { + "jp": { + "updatedAt": "2025-11-27T09:08:59.460Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:59.464Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:59.465Z" + } } }, "c7f475dc465af2e8a358403f37f7d9ab77fff25bfb2185434a3988227077f61c": { @@ -14375,6 +15365,17 @@ "jp": { "updatedAt": "2025-11-26T07:24:12.121Z" } + }, + "957fef1200e01d1d2a8bc6b685146a1418c4d936418ddfe9ecb18479516293d4": { + "ru": { + "updatedAt": "2025-11-27T09:08:52.186Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:59.481Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:59.481Z" + } } }, "cf53b09fb0c34e1e63e41a10d6bc7a6922adc30f419e11b91aa28c4b6550ff94": { @@ -14388,6 +15389,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.114Z" } + }, + "b2680ed1949ad3d0db6340dcfd927b99beee508808edbd641c4f0f3589bb32ec": { + "zh": { + "updatedAt": "2025-11-27T09:08:59.456Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:59.458Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:59.460Z" + } } }, "d85a58d074e13f650fae5bc844462e82b569a15037cf4beb81c7fc31334227bd": { @@ -14401,18 +15413,29 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.115Z" } + }, + "b6d6c294393317eabba321f888c00ac842ed017623140b48620c5b77ecf9538f": { + "jp": { + "updatedAt": "2025-11-27T09:08:52.187Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:59.455Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:59.479Z" + } } }, "e014a958a8137fc765da9797a531683aae1075024018fdd2793c345a9ea2837d": { "a3692c0caea63dccb572f30b9f84021d898cc0b99e942bba8475e5cddd746e9c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.112Z" + "updatedAt": "2025-11-27T09:08:59.451Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.113Z" + "updatedAt": "2025-11-27T09:08:59.454Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.114Z" + "updatedAt": "2025-11-27T09:08:59.469Z" } } }, @@ -14427,70 +15450,81 @@ "zh": { "updatedAt": "2025-11-26T07:24:02.776Z" } + }, + "51115dd7a55d295b9a3eb7a76ba8a295d6fcab50c6dbe15e410efebd02969067": { + "zh": { + "updatedAt": "2025-11-27T09:08:52.184Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:52.186Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:59.476Z" + } } }, "02fec6942d40034d750c654d9c675a575f12b3a87ec90a6e3786281d265a9b29": { "f8983bc303673b5b9632c8a2f95602dd3f90803ac3e493ee4ff7244ea4b98790": { "jp": { - "updatedAt": "2025-11-26T07:24:02.779Z" + "updatedAt": "2025-11-27T09:08:52.198Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.779Z" + "updatedAt": "2025-11-27T09:08:52.198Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.779Z" + "updatedAt": "2025-11-27T09:08:52.198Z" } } }, "0393512198efa57d46b32a113a35375ccd26518fa34d3bbabef4214d4fb8b53a": { "8103e61160aa52995bd2806ebc1f5871330feb5a4b2c8de0e9221fa8a70d1ac3": { "jp": { - "updatedAt": "2025-11-26T07:24:18.998Z" + "updatedAt": "2025-11-27T09:08:52.205Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.999Z" + "updatedAt": "2025-11-27T09:08:52.208Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.998Z" + "updatedAt": "2025-11-27T09:08:52.205Z" } } }, "0c5a65f577c71fbc834405efc189e3c50da0f84a64b7f1b1ba76d9fa8e7a3e9c": { "2d31634c588cb2805bebfc13a4cefde978ae8d078f32a88954c1ee076a081d1e": { "jp": { - "updatedAt": "2025-11-26T07:24:02.780Z" + "updatedAt": "2025-11-27T09:08:52.199Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.778Z" + "updatedAt": "2025-11-27T09:08:52.197Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.780Z" + "updatedAt": "2025-11-27T09:08:52.199Z" } } }, "0c607ec56978fcf7cc9280f736b890c5fb289db3ddfbeb737f9ed97fa79e3f05": { "c01c4184a1e5108e2ecbbc865220b88f0c11caf78ba66781b92ad690c80fa8d3": { "zh": { - "updatedAt": "2025-11-26T07:24:18.999Z" + "updatedAt": "2025-11-27T09:08:52.207Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:18.999Z" + "updatedAt": "2025-11-27T09:08:52.207Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.999Z" + "updatedAt": "2025-11-27T09:08:52.208Z" } } }, "16ea5fa75d5d08e032a72f3d2f70dfde100b84192a3a87d58596c7a636e73d4a": { "08b83c6534ed2ed43f2e271298926bbac6bd7c4e552372271ab8f870588ce545": { "jp": { - "updatedAt": "2025-11-26T07:24:02.780Z" + "updatedAt": "2025-11-27T09:08:52.199Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.778Z" + "updatedAt": "2025-11-27T09:08:52.197Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.780Z" + "updatedAt": "2025-11-27T09:08:52.200Z" } } }, @@ -14505,18 +15539,29 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.119Z" } + }, + "bc07f19137cb6dabf76e068e43903d8f0c0d4a5fd3ef5e4c48ca713d51eae844": { + "zh": { + "updatedAt": "2025-11-27T09:08:52.185Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:59.477Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:59.482Z" + } } }, "3e1a6a2d9604853fec0f6b9c21e1534bc36ba5880d4042f71f1d9a03ff9e0c74": { "50a43ff5465e5ed3b333a2938abb5b5a0fe5d616b29d9f1176535339c755b45f": { "jp": { - "updatedAt": "2025-11-26T07:24:02.778Z" + "updatedAt": "2025-11-27T09:08:52.194Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.777Z" + "updatedAt": "2025-11-27T09:08:52.192Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.778Z" + "updatedAt": "2025-11-27T09:08:52.194Z" } } }, @@ -14531,6 +15576,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:02.773Z" } + }, + "955b894f3bdf01356a56ddde8e74375c28f36a9ddacf9f8cca1d929b82dc3c8a": { + "zh": { + "updatedAt": "2025-11-27T09:08:59.478Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:59.478Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:59.480Z" + } } }, "5be58ce97a5c915ff2d4f6bb0a603580ec8a37cc97e4e9b54ce41df65adbfd1a": { @@ -14544,6 +15600,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.120Z" } + }, + "8c7e75be7714da47b7c687d7067a073e9ba05d82b6595b598a376227cab0ee4c": { + "zh": { + "updatedAt": "2025-11-27T09:08:52.187Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:59.476Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:59.482Z" + } } }, "5eb08e96fd1bc79722d094e6a779abcf8a842d610d831653012ca3687bc9f9d7": { @@ -14557,6 +15624,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:02.780Z" } + }, + "a7faed462f96219d02aa7307ac7bc7935bca6700485c60f90a7438b05da3f66e": { + "zh": { + "updatedAt": "2025-11-27T09:08:52.195Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:52.195Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:52.196Z" + } } }, "86002a1712dd0604dc6572e5d62e8b5302340810c0d6fb2d6a5457e65c731ba1": { @@ -14570,18 +15648,29 @@ "zh": { "updatedAt": "2025-11-26T07:24:02.777Z" } + }, + "ef2543418d200cf81a07878edce91cdbee829490d86129bd3c779f48958f1b32": { + "ru": { + "updatedAt": "2025-11-27T09:08:52.195Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:08:52.196Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:52.196Z" + } } }, "927c8bd22c5edb0ea1387b718e08b478ba16818cd5723ac48756552d7439254c": { "11b3f30b750a5e0956357a5f57ba8e702f81cf26a32d8a0825cee915379b0137": { "jp": { - "updatedAt": "2025-11-26T07:24:02.773Z" + "updatedAt": "2025-11-27T09:08:52.188Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.774Z" + "updatedAt": "2025-11-27T09:08:52.189Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.774Z" + "updatedAt": "2025-11-27T09:08:52.188Z" } } }, @@ -14596,18 +15685,29 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.123Z" } + }, + "c6165f3ca7b3425b951b4a1571401725d547adf52dc6626c445215fb9218c8f1": { + "zh": { + "updatedAt": "2025-11-27T09:08:52.185Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:59.477Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:59.483Z" + } } }, "98c18fb7bc391069017a8197ca9b4b5c5a8218b2cc79f1210a3aba08ce470c6c": { "81814115cad79ea901cacf1a4876697b9b219a7ce07476d4edac8f5cfb5017fe": { "jp": { - "updatedAt": "2025-11-26T07:24:02.776Z" + "updatedAt": "2025-11-27T09:08:52.191Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.776Z" + "updatedAt": "2025-11-27T09:08:52.190Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.120Z" + "updatedAt": "2025-11-27T09:08:59.454Z" } } }, @@ -14622,6 +15722,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:02.774Z" } + }, + "6b17506439ccc3610f6d989dbfd30e8ceef573be8f80fb3230ad3a6b4a276542": { + "zh": { + "updatedAt": "2025-11-27T09:08:52.184Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:52.186Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:59.475Z" + } } }, "a5f04cc970babcbd17a73219fd4d3f1d299602d839f96c355b2d5ca53d5cee5b": { @@ -14635,6 +15746,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:02.773Z" } + }, + "e965cf783f03102b23d52203220a90ea4ad4eeda8ea356dc2888850e3a1ee83c": { + "zh": { + "updatedAt": "2025-11-27T09:08:52.185Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:52.185Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:59.478Z" + } } }, "a6c3bc31e00e18f2175e34ff2c0292484093e1b725e792b68d1075913aa4dcab": { @@ -14659,18 +15781,29 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.121Z" } + }, + "8b70f77a580ae511ac0bf35f88454f6df63aca38b1be27503cffe5bd9b3b0d0f": { + "zh": { + "updatedAt": "2025-11-27T09:08:52.185Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:52.185Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:52.187Z" + } } }, "c43792a75d02793708f0f9c298dd1e81a2db715e26bb86c9a3a5e14f34e785c4": { "76526beb43a3126f9cd6e8837bdfd7a2b5b294aba899560796a163b8963fb64c": { "jp": { - "updatedAt": "2025-11-26T07:24:02.782Z" + "updatedAt": "2025-11-27T09:08:52.202Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.774Z" + "updatedAt": "2025-11-27T09:08:52.189Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.775Z" + "updatedAt": "2025-11-27T09:08:52.189Z" } } }, @@ -14685,6 +15818,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.124Z" } + }, + "9b5a33767927dbd5b8d2768daa909d9f65bb2a2f716af808a8f3eb55f623603a": { + "zh": { + "updatedAt": "2025-11-27T09:08:59.477Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:59.478Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:59.483Z" + } } }, "e1bc67bc420afe0f3e7e9ad857f155267b70dd99307c6a46ab1d985186a0ca42": { @@ -14701,390 +15845,390 @@ }, "520ab775b334277fd5691012ee012e3b785025e0c7722d8a9b7554a5f3a04f2d": { "jp": { - "updatedAt": "2025-11-26T07:24:02.777Z" + "updatedAt": "2025-11-27T09:08:52.193Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.778Z" + "updatedAt": "2025-11-27T09:08:52.194Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.778Z" + "updatedAt": "2025-11-27T09:08:52.194Z" } } }, "ec512023c5c9e376d6b5a73b27c72543c329f1031a88df1142e318e852a6f5e1": { "e3ddcb697170bf6b9accf7bd9484665c071ebdf44c1609b8c1f4a6ae733dd1c5": { "jp": { - "updatedAt": "2025-11-26T07:24:02.782Z" + "updatedAt": "2025-11-27T09:08:52.202Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.782Z" + "updatedAt": "2025-11-27T09:08:52.202Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.781Z" + "updatedAt": "2025-11-27T09:08:52.201Z" } } }, "f411f73869f1597bddd3a69a70dcdf627b2f48802b68eb1297c49cf998a1d590": { "6c152f17b58caad6637a04e4d427aba059026b111c90e5aa764f040e05e669bb": { "jp": { - "updatedAt": "2025-11-26T07:24:12.122Z" + "updatedAt": "2025-11-27T09:08:52.187Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.123Z" + "updatedAt": "2025-11-27T09:08:52.187Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.120Z" + "updatedAt": "2025-11-27T09:08:59.452Z" } } }, "0bba267be6ffcbb62a544c365f5d2cd85d6371c78dc289e5697b0225352a76ea": { "95f85b7c7a43494a5f08ae259de69c8952afb7851b1d9a887ad3107d5e6cbc01": { "jp": { - "updatedAt": "2025-11-26T07:24:19.004Z" + "updatedAt": "2025-11-27T09:08:52.218Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.003Z" + "updatedAt": "2025-11-27T09:08:52.216Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.000Z" + "updatedAt": "2025-11-27T09:08:52.210Z" } } }, "12f796f4ae9f25130a8cfc11aff488171e7376f25404278d4e5c173c8bf9ed02": { "55069f671a99d799cfd16eda4312b66b5a321376cc69b52c58ba054f313fa404": { "jp": { - "updatedAt": "2025-11-26T07:24:18.998Z" + "updatedAt": "2025-11-27T09:08:52.206Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.998Z" + "updatedAt": "2025-11-27T09:08:52.207Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.998Z" + "updatedAt": "2025-11-27T09:08:52.206Z" } } }, "16c87bceec945d0aeefa7e76d421913b507e3b04716834b3894e9fd3174d2613": { "b43921e7c1caab150d19b0823696bd909b5e9b9dd41fe7847acfc9dabaec0942": { "ru": { - "updatedAt": "2025-11-26T07:24:19.007Z" + "updatedAt": "2025-11-27T09:08:59.488Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.007Z" + "updatedAt": "2025-11-27T09:08:59.488Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:19.007Z" + "updatedAt": "2025-11-27T09:08:59.488Z" } } }, "17d2e02948e65273ef7e8779836f8951401fd8a1bb6a876c34f6a97cbcf3b851": { "ca17d3741e7a41499205b9a027d56688012d7f0f6551729af1b8a0839e254e11": { "jp": { - "updatedAt": "2025-11-26T07:24:02.780Z" + "updatedAt": "2025-11-27T09:08:52.199Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.779Z" + "updatedAt": "2025-11-27T09:08:52.198Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.780Z" + "updatedAt": "2025-11-27T09:08:52.199Z" } } }, "2644c145de6d61cff7556d3efdff355e849b2f38b5c7912fbc2eb07360771f61": { "0e301628684a655bb2d5641c57775c3259b037ac338372d82808d6c91cacbd8c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.118Z" + "updatedAt": "2025-11-27T09:08:59.474Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.778Z" + "updatedAt": "2025-11-27T09:08:52.194Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.778Z" + "updatedAt": "2025-11-27T09:08:52.193Z" } } }, "2936efa9c627e5f00c7abc38b09aacea29a31481a83c21e719db82d0ba4eed0f": { "60b3bf0f8d4b00d715fe94daf3931f6351a0e38fe807946e5d1f9eee04425171": { "jp": { - "updatedAt": "2025-11-26T07:24:02.782Z" + "updatedAt": "2025-11-27T09:08:52.203Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.783Z" + "updatedAt": "2025-11-27T09:08:52.203Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.783Z" + "updatedAt": "2025-11-27T09:08:52.203Z" } } }, "337fa5ffda5b1ce15febb15e28d78f509b83dd0442c0eecb4e5fd5ad01cee570": { "8ad0cc19f45e168f3328286b8c922f25ddb3753ff16efc3a1795161778bbea66": { "jp": { - "updatedAt": "2025-11-26T07:24:19.001Z" + "updatedAt": "2025-11-27T09:08:52.211Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.002Z" + "updatedAt": "2025-11-27T09:08:52.213Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.777Z" + "updatedAt": "2025-11-27T09:08:52.192Z" } } }, "3a39c3cb40c4a84e5848358c7bcda5a305e64fba4846580eecea963760143cbd": { "1a63ea8e13a6c3989444c8189eb5c95920d36ded548a2cbb106db39f91e17f56": { "jp": { - "updatedAt": "2025-11-26T07:24:19.000Z" + "updatedAt": "2025-11-27T09:08:52.209Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.000Z" + "updatedAt": "2025-11-27T09:08:52.209Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.997Z" + "updatedAt": "2025-11-27T09:08:52.205Z" } } }, "3b2a0db3103ecc795ff82061e46875995689dee845c28a19697c2e8b7d78fb8f": { "84bf17e2315c270d4f26795807428c5ef311a937dd6e53a4b6f3a8e26bf5e771": { "jp": { - "updatedAt": "2025-11-26T07:24:02.779Z" + "updatedAt": "2025-11-27T09:08:52.198Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.779Z" + "updatedAt": "2025-11-27T09:08:52.197Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.779Z" + "updatedAt": "2025-11-27T09:08:52.197Z" } } }, "4b8aa1992851fb5c48057b63ca4023aa0e9acf549f246ffd5bcc14a81c5cd167": { "772d1ec339365232324085e4dfa5c8d2dfd03a9c777ec73c8c547da8555d5860": { "jp": { - "updatedAt": "2025-11-26T07:24:02.781Z" + "updatedAt": "2025-11-27T09:08:52.201Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.782Z" + "updatedAt": "2025-11-27T09:08:52.202Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.782Z" + "updatedAt": "2025-11-27T09:08:52.201Z" } } }, "548882c1623ad246688470b47967ff13ad16868ecad4f09349b0182efc755985": { "76fc9813a272dfbb6dda3bb0096c7a2eeb3bf0a58d344e26c115c075a8cdf7d0": { "jp": { - "updatedAt": "2025-11-26T07:24:19.001Z" + "updatedAt": "2025-11-27T09:08:52.212Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.001Z" + "updatedAt": "2025-11-27T09:08:52.211Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.001Z" + "updatedAt": "2025-11-27T09:08:52.210Z" } } }, "7d0d5bb4af482b39457517f498efb3ea46e33dd5a7cfdef6d18b2beb02e7dc2f": { "a7f9fe4cf3ef806d2de5eb8e1f83c674deb8224319845c32faa2c509b9f0d89a": { "jp": { - "updatedAt": "2025-11-26T07:24:19.000Z" + "updatedAt": "2025-11-27T09:08:52.210Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.001Z" + "updatedAt": "2025-11-27T09:08:52.211Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.001Z" + "updatedAt": "2025-11-27T09:08:52.211Z" } } }, "819fce8b1343a94dee6cf3e428f8d46ff343c43b0d83b49efe18129ccf292430": { "af1d949b76a7c871e4cdce3092a3b2e2b1ea6afca4c4788054f8ff3eddde3ea5": { "jp": { - "updatedAt": "2025-11-26T07:24:18.998Z" + "updatedAt": "2025-11-27T09:08:52.205Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.999Z" + "updatedAt": "2025-11-27T09:08:52.207Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.998Z" + "updatedAt": "2025-11-27T09:08:52.205Z" } } }, "8756460c34802f52ffc72c46fd775666b61d2134d4e3d1de0bf4111a5a049571": { "483cc85982240fd19d9aaf9161c58f6f4b1f2cdf226fb60169450e02caea8384": { "jp": { - "updatedAt": "2025-11-26T07:24:19.000Z" + "updatedAt": "2025-11-27T09:08:52.209Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.998Z" + "updatedAt": "2025-11-27T09:08:52.206Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.000Z" + "updatedAt": "2025-11-27T09:08:52.209Z" } } }, "99effff387a3391b66ab69348b19106aa7ae02149e5cdda15d9bd9397ddf4c41": { "635055619056b153a2e20b6a09345d76348336b24340ba32f815de9c85a7f2b0": { "jp": { - "updatedAt": "2025-11-26T07:24:02.777Z" + "updatedAt": "2025-11-27T09:08:52.192Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.781Z" + "updatedAt": "2025-11-27T09:08:52.201Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.782Z" + "updatedAt": "2025-11-27T09:08:52.201Z" } } }, "a0698fed4f549f79afea06d1dac666b108eb6f5dc2fd3c91aff7c13f9d635593": { "7bafd49c863eb3620b55c3516c62d1d11ad2c81b1333e7396261c18b3d55cf9f": { "jp": { - "updatedAt": "2025-11-26T07:24:02.781Z" + "updatedAt": "2025-11-27T09:08:52.201Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.119Z" + "updatedAt": "2025-11-27T09:08:59.475Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.781Z" + "updatedAt": "2025-11-27T09:08:52.200Z" } } }, "ad1402ffed17fc7c6fda3f600f70cf8e3bbe5384d766081c16c2c90b4a775b7f": { "623f2f8c2f6006597fa106e18afad1304117a0a599684c3050b5f92f433dadf9": { "jp": { - "updatedAt": "2025-11-26T07:24:19.000Z" + "updatedAt": "2025-11-27T09:08:52.209Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.999Z" + "updatedAt": "2025-11-27T09:08:52.208Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.778Z" + "updatedAt": "2025-11-27T09:08:52.193Z" } } }, "d6127c27c939a8143d6bd93d737c445238b16aea350cd52caa535082aaed407a": { "af21361ca18f3026c0fcb3b223ce74e7a213c2e9016d2f7596b5103f9f243027": { "jp": { - "updatedAt": "2025-11-26T07:24:18.999Z" + "updatedAt": "2025-11-27T09:08:52.208Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.001Z" + "updatedAt": "2025-11-27T09:08:52.211Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.001Z" + "updatedAt": "2025-11-27T09:08:52.212Z" } } }, "d679b331b013310d0726e18cff38795d35a48a549ce862414366ed5d37b17a5a": { "6884d15ae61a9e31fa06e9f6cb793ec44513338525d28650cffaeecfdfd55f59": { "jp": { - "updatedAt": "2025-11-26T07:24:12.119Z" + "updatedAt": "2025-11-27T09:08:59.475Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.781Z" + "updatedAt": "2025-11-27T09:08:52.200Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.781Z" + "updatedAt": "2025-11-27T09:08:52.200Z" } } }, "f23d1fdbec8862f67bc4eb334787e78bade64fa097b14c338abf676e73a1ca62": { "0206d00d56a0c7be7a356c6499d1bc4c3b24602fe48380f49f1a8be277e30ae9": { "jp": { - "updatedAt": "2025-11-26T07:24:02.780Z" + "updatedAt": "2025-11-27T09:08:52.199Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.779Z" + "updatedAt": "2025-11-27T09:08:52.197Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.780Z" + "updatedAt": "2025-11-27T09:08:52.200Z" } } }, "f5d22ca5e2a60035bc7b1c39046c553ef2238bbf8c611bd22963a3cf3fe67663": { "9a33263baf26f23ddc1d61444b9f0bc17fe15f0d44c6aa520661947f7bc28d34": { "jp": { - "updatedAt": "2025-11-26T07:24:02.780Z" + "updatedAt": "2025-11-27T09:08:52.198Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.779Z" + "updatedAt": "2025-11-27T09:08:52.198Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.779Z" + "updatedAt": "2025-11-27T09:08:52.197Z" } } }, "0d3a0a09b86406c2c362ede819ee030f9d92d058939579cd1229e361973022f8": { "9fc104791c743a764dffa282d540ca4365e02a6a6590d6c336de81ff7f63da24": { "jp": { - "updatedAt": "2025-11-26T07:24:02.783Z" + "updatedAt": "2025-11-27T09:08:52.204Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.006Z" + "updatedAt": "2025-11-27T09:08:59.484Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.006Z" + "updatedAt": "2025-11-27T09:08:59.485Z" } } }, "14364235369dc388419efc9e290886ddaa202d5023e8adc55d75a61c89fc336a": { "328695ec26f7fc60b0c8aec17edefe2b5cd222a635c116a01ed4259436be44ae": { "jp": { - "updatedAt": "2025-11-26T07:24:19.010Z" + "updatedAt": "2025-11-27T09:08:59.496Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.011Z" + "updatedAt": "2025-11-27T09:08:59.500Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.012Z" + "updatedAt": "2025-11-27T09:08:59.500Z" } } }, "14a65362c725c7a0fae1767f0bdaecab08516f4549961fb82c9b0d3889476e2e": { "4b5208315e755dbc3f295c8a58958e452a782c2f41e4965b7aaafc2ecdf93523": { "jp": { - "updatedAt": "2025-11-26T07:24:19.007Z" + "updatedAt": "2025-11-27T09:08:59.487Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.007Z" + "updatedAt": "2025-11-27T09:08:59.487Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.007Z" + "updatedAt": "2025-11-27T09:08:59.488Z" } } }, "181aa5509e2dd7724e3095fd6c0f17cf6fedab2635b9af1d57fe9d1e2801ec31": { "bf2760368d2fc3a4c455358f8872f13eb6f6e7b8ccd6d529c68dfa016882d216": { "jp": { - "updatedAt": "2025-11-26T07:24:19.011Z" + "updatedAt": "2025-11-27T09:08:59.499Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.005Z" + "updatedAt": "2025-11-27T09:08:52.220Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.004Z" + "updatedAt": "2025-11-27T09:08:52.218Z" } } }, "5181bec59897499f787e1b509cc19c69de2efe0e1437cc2001f2c7dbe8022440": { "54af2191cc8de0b1a73c6bfeceff12420569139b7347df0f18a111a00cfa0d1f": { "jp": { - "updatedAt": "2025-11-26T07:24:19.003Z" + "updatedAt": "2025-11-27T09:08:52.216Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.003Z" + "updatedAt": "2025-11-27T09:08:52.217Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.003Z" + "updatedAt": "2025-11-27T09:08:52.216Z" } } }, "59475ce3a8014935df370b01b5266883e7814a8041f963545d8edaf3119557f2": { "53cc67b8b0dbfb95e446a4d98d10dfc35a026203fad1b1a20cb6bf733faba4e2": { "jp": { - "updatedAt": "2025-11-26T07:24:19.001Z" + "updatedAt": "2025-11-27T09:08:52.212Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.002Z" + "updatedAt": "2025-11-27T09:08:52.214Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.002Z" + "updatedAt": "2025-11-27T09:08:52.214Z" } } }, @@ -15102,962 +16246,962 @@ }, "d6c562ca4d62646ad4de68704867016d1f98e9422a7a7b9d1dab026eb4c410ef": { "jp": { - "updatedAt": "2025-11-26T07:24:02.778Z" + "updatedAt": "2025-11-27T09:08:52.193Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.783Z" + "updatedAt": "2025-11-27T09:08:52.204Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.997Z" + "updatedAt": "2025-11-27T09:08:52.204Z" } } }, "6d2c1d43528de97c8dcb1e3618555c13b1ee6ca0cec9035a38fdc267403c6c3a": { "a09b919bea9302ab3ba5a119614ec1de086c78f2af22957d06a895b8b1504bc9": { "jp": { - "updatedAt": "2025-11-26T07:24:18.998Z" + "updatedAt": "2025-11-27T09:08:52.206Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.999Z" + "updatedAt": "2025-11-27T09:08:52.207Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.999Z" + "updatedAt": "2025-11-27T09:08:52.207Z" } } }, "84d27978ad24cbc0448dc0661dc1cf62312406d39568cc877e9bee6c04e93677": { "4120b13b5f03f7c2fd4dd243edcbc718d6bd291d7358050064f6599242eeca09": { "jp": { - "updatedAt": "2025-11-26T07:24:18.998Z" + "updatedAt": "2025-11-27T09:08:52.207Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.998Z" + "updatedAt": "2025-11-27T09:08:52.206Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.997Z" + "updatedAt": "2025-11-27T09:08:52.205Z" } } }, "993eb4cbf451025e383f5baa954ba930c6f9ae51ff01592c72b8d36662548817": { "6397e782e35c68ed2849d7a8210eb150a2820241365b2424b92b3ac99815d60d": { "jp": { - "updatedAt": "2025-11-26T07:24:19.005Z" + "updatedAt": "2025-11-27T09:08:52.219Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.004Z" + "updatedAt": "2025-11-27T09:08:52.217Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.004Z" + "updatedAt": "2025-11-27T09:08:52.219Z" } } }, "bc95ac30c6163794df098cb1c5b0c612d68e460c1fee0982a9fde6ad2158ac24": { "d710ab3ea85690006a2ba44bbff81541eaffd450228382acc7544df0e34c7468": { "jp": { - "updatedAt": "2025-11-26T07:24:19.000Z" + "updatedAt": "2025-11-27T09:08:52.209Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.001Z" + "updatedAt": "2025-11-27T09:08:52.210Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.001Z" + "updatedAt": "2025-11-27T09:08:52.212Z" } } }, "bdea2c6c34b1129be3efdd889576a52c92a915a41e1639ec5331bfe00948aa9e": { "d5c5bd7080a73f05e45d4b278cac9e1b97c489d95a7c80a8edeeccfbc35abb0e": { "jp": { - "updatedAt": "2025-11-26T07:24:19.000Z" + "updatedAt": "2025-11-27T09:08:52.209Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.998Z" + "updatedAt": "2025-11-27T09:08:52.206Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.000Z" + "updatedAt": "2025-11-27T09:08:52.210Z" } } }, "bef9b0e0b7b38c7969e61c98c564c4f45f4514c4992c99602befb825815d3fe5": { "ecbe5e563d38c0a661a9495fe8b3be6dea6041fe9fe0a6e674428f8d203f2c76": { "jp": { - "updatedAt": "2025-11-26T07:24:19.000Z" + "updatedAt": "2025-11-27T09:08:52.210Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.999Z" + "updatedAt": "2025-11-27T09:08:52.208Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.999Z" + "updatedAt": "2025-11-27T09:08:52.208Z" } } }, "c86c73e2e1466ca9839d03145d28d089d50433e69d452f195d963042ce89ac2f": { "f65f3977310bfcdd03981a63ac5b1d00c85b04cbbc5ef4d29c352006d88c1be0": { "jp": { - "updatedAt": "2025-11-26T07:24:19.007Z" + "updatedAt": "2025-11-27T09:08:59.487Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.006Z" + "updatedAt": "2025-11-27T09:08:59.484Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.006Z" + "updatedAt": "2025-11-27T09:08:59.484Z" } } }, "cb9c09aa37313bf52611e34b607eaa3775f6ebfd79387f2120b6b2b2ed4b46e5": { "b033c9754be40272847cfcdbce3fd43701961388f8efc8698510876cb0c0fb40": { "jp": { - "updatedAt": "2025-11-26T07:24:19.004Z" + "updatedAt": "2025-11-27T09:08:52.218Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.004Z" + "updatedAt": "2025-11-27T09:08:52.218Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.002Z" + "updatedAt": "2025-11-27T09:08:52.215Z" } } }, "d7bfcfa62fea0cd11e8181ebab38199db1c954694d8230c3cb8be3a89f91c476": { "c1ce68737a5260a794d17040e187ca291588ef715aeba34369597a7058dc2af4": { "jp": { - "updatedAt": "2025-11-26T07:24:19.004Z" + "updatedAt": "2025-11-27T09:08:52.217Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.006Z" + "updatedAt": "2025-11-27T09:08:59.486Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.006Z" + "updatedAt": "2025-11-27T09:08:59.486Z" } } }, "eb4daa639a63e99d988bfe1cd009befb853ba7171f88047823ca4d63e119f46c": { "db3dcac7ca205ca613bb9129a98b90f70d1edd49164206d1bacd86ccbb885f5f": { "jp": { - "updatedAt": "2025-11-26T07:24:19.007Z" + "updatedAt": "2025-11-27T09:08:59.487Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.005Z" + "updatedAt": "2025-11-27T09:08:52.220Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.005Z" + "updatedAt": "2025-11-27T09:08:52.219Z" } } }, "ece18ee5cf148911a064ac3aabde31461f3fa90405c4631fe64e67bf35b3df8c": { "babc66efa89a5cb73d9a68a0dceb5ae1559780502d074014931e6370f64030af": { "jp": { - "updatedAt": "2025-11-26T07:24:19.002Z" + "updatedAt": "2025-11-27T09:08:52.213Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.002Z" + "updatedAt": "2025-11-27T09:08:52.214Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.002Z" + "updatedAt": "2025-11-27T09:08:52.213Z" } } }, "eec5db41f767e87040d1a1e1a235ad804968c2645819039af5e1306f75ee2ba6": { "3294839c4121817eb15af16f39ea52c308ef56de049782978aa71dcc4c38777a": { "jp": { - "updatedAt": "2025-11-26T07:24:19.004Z" + "updatedAt": "2025-11-27T09:08:52.217Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.003Z" + "updatedAt": "2025-11-27T09:08:52.216Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.003Z" + "updatedAt": "2025-11-27T09:08:52.216Z" } } }, "fcac219896966a54530a8593af31aa0dd688a431b44e0f3c677722d49352eb30": { "764c0b5706ee7c8505c4e4a557bdfcf617fad088da12e5302081d2d0510f71a1": { "jp": { - "updatedAt": "2025-11-26T07:24:18.999Z" + "updatedAt": "2025-11-27T09:08:52.208Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.997Z" + "updatedAt": "2025-11-27T09:08:52.205Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.998Z" + "updatedAt": "2025-11-27T09:08:52.206Z" } } }, "febea1a8af326ccd97db3bc68c3ffe9b9d02860dfb6225e2ad85613d0fd14f7a": { "96025027a22efdcf22fae68b1f8666c6d43d7197ab56d27461b40b4566ccacf3": { "jp": { - "updatedAt": "2025-11-26T07:24:19.002Z" + "updatedAt": "2025-11-27T09:08:52.213Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.002Z" + "updatedAt": "2025-11-27T09:08:52.212Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.002Z" + "updatedAt": "2025-11-27T09:08:52.213Z" } } }, "07413031937c2e03067e44df8e3cbca1210ee434cba21c6bfa6e51fe5d2f01e5": { "1e96680d8322f2acc44b5d97b8bff6f35462189f2158321fb5f3892804e98d6a": { "jp": { - "updatedAt": "2025-11-26T07:24:19.012Z" + "updatedAt": "2025-11-27T09:08:59.501Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.012Z" + "updatedAt": "2025-11-27T09:08:59.503Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.012Z" + "updatedAt": "2025-11-27T09:08:59.502Z" } } }, "08048e81a0b10f6fc876c8e10e896bba823ef23c25b37974243d3ce6241e95be": { "fa7004278db4a71dffabfc42db57fec5a575fb3dbd7222d4b9792bf19848b5d0": { "jp": { - "updatedAt": "2025-11-26T07:24:19.009Z" + "updatedAt": "2025-11-27T09:08:59.493Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.010Z" + "updatedAt": "2025-11-27T09:08:59.495Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.008Z" + "updatedAt": "2025-11-27T09:08:59.492Z" } } }, "184cb7accedb381551a80c780323d8467fa7bd7b87d916cb1c6e2e1927c800cd": { "20fbfd2eb1f5b24eda2f90fd903779fd0847f0d888d3b04f4c7e56590eff1492": { "jp": { - "updatedAt": "2025-11-26T07:24:19.013Z" + "updatedAt": "2025-11-27T09:08:59.530Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.013Z" + "updatedAt": "2025-11-27T09:08:59.531Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.013Z" + "updatedAt": "2025-11-27T09:08:59.503Z" } } }, "1f9e1a47c221609e49eb77fb61cad9a84a56bdb680185de6655f77145049570f": { "d2bac435d9afc706018821f07927cba0b34f6719b4e95a2c242a869d2c00be3d": { "jp": { - "updatedAt": "2025-11-26T07:24:19.011Z" + "updatedAt": "2025-11-27T09:08:59.498Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.003Z" + "updatedAt": "2025-11-27T09:08:52.215Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.008Z" + "updatedAt": "2025-11-27T09:08:59.492Z" } } }, "1fd11512dba8b586ce114f0a09f748f438a3592e967e6b26fdb70d49b49b5b34": { "528c254f1d39fc4b566d364735917ebd190685375530f8192104891def887095": { "jp": { - "updatedAt": "2025-11-26T07:24:19.009Z" + "updatedAt": "2025-11-27T09:08:59.495Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.011Z" + "updatedAt": "2025-11-27T09:08:59.499Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.003Z" + "updatedAt": "2025-11-27T09:08:52.215Z" } } }, "22dec589b8fb9f267b747bb6c4caa91619a82b138da7ac22fafdf2a4d36dbe70": { "540a7500cbfe21ee07e22edbd55ff6af883a067d691b6301d93bbec754f9da7f": { "jp": { - "updatedAt": "2025-11-26T07:24:19.003Z" + "updatedAt": "2025-11-27T09:08:52.216Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.003Z" + "updatedAt": "2025-11-27T09:08:52.215Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.003Z" + "updatedAt": "2025-11-27T09:08:52.217Z" } } }, "25a566b63d1b51f62e85f3301907bb9851c8e295092c6c0cbb274855aaf2075a": { "b194d71f6380d7cf9309e9c89f192bff2723d4c46d48e2aa2b48e736c874804d": { "jp": { - "updatedAt": "2025-11-26T07:24:19.005Z" + "updatedAt": "2025-11-27T09:08:52.219Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.783Z" + "updatedAt": "2025-11-27T09:08:52.204Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.005Z" + "updatedAt": "2025-11-27T09:08:52.220Z" } } }, "2dc1b2de19552e6b04e43bcf12a339877b5cd1caa1251210fa995f871b2381a2": { "8023c7e209034ddbc60f9efb8a61b992915d01ab6dcdc5f5a0b08c1c7a1cf28a": { "jp": { - "updatedAt": "2025-11-26T07:24:19.012Z" + "updatedAt": "2025-11-27T09:08:59.501Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.010Z" + "updatedAt": "2025-11-27T09:08:59.497Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.012Z" + "updatedAt": "2025-11-27T09:08:59.502Z" } } }, "356f390220f614f7e13052b738d6bac3386bcb14e99297bc57a7c7bf37c10fd1": { "eed67b4d5e2a37a8d51c1aaf6d8810650b97bd70d00122a88ebb97c212da9ee2": { "jp": { - "updatedAt": "2025-11-26T07:24:19.003Z" + "updatedAt": "2025-11-27T09:08:52.215Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.004Z" + "updatedAt": "2025-11-27T09:08:52.217Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.004Z" + "updatedAt": "2025-11-27T09:08:52.217Z" } } }, "35c7bfba55131ad9d6116db29b6547a45eabafbca7d547b5501ea16d51eede3f": { "6a8e1ca55281999c6130ae572325abcb150b29cfd12ebe451133060b6c502a1a": { "jp": { - "updatedAt": "2025-11-26T07:24:19.011Z" + "updatedAt": "2025-11-27T09:08:59.499Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.011Z" + "updatedAt": "2025-11-27T09:08:59.499Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.011Z" + "updatedAt": "2025-11-27T09:08:59.498Z" } } }, "43b396ef0d459a925fcad74ebe7dbd673c6bb8eab1d24fb377b596b6d6850d5b": { "83184a4d72d70281ddce4c2b92b731c5b7e8f98d6d6bebeedbdc0a053adf947c": { "jp": { - "updatedAt": "2025-11-26T07:24:19.012Z" + "updatedAt": "2025-11-27T09:08:59.502Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.010Z" + "updatedAt": "2025-11-27T09:08:59.497Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.010Z" + "updatedAt": "2025-11-27T09:08:59.497Z" } } }, "4d4c6c8d13e7ac14a5f189e798e199562f2150ad644328ef3e5b7e6d397aacb0": { "7c2190f84db7a1c33916eca37c2632206233059ad999d42ac355995a785c5d81": { "jp": { - "updatedAt": "2025-11-26T07:24:19.006Z" + "updatedAt": "2025-11-27T09:08:59.484Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.005Z" + "updatedAt": "2025-11-27T09:08:52.220Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.002Z" + "updatedAt": "2025-11-27T09:08:52.214Z" } } }, "5f7094d809fbf8e07ca4e02020e14a570a112a588701724679f8375a2bfbecb1": { "d84676e935f15fc8eda0f1c0db79ad9cef52b93ee23e53f9891fe1aaaa1180ba": { "jp": { - "updatedAt": "2025-11-26T07:24:19.002Z" + "updatedAt": "2025-11-27T09:08:52.214Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.009Z" + "updatedAt": "2025-11-27T09:08:59.493Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.009Z" + "updatedAt": "2025-11-27T09:08:59.494Z" } } }, "7c4de22baba4a87ac92a5d821ddef4976b0c230d25c52c53dfeac09fad83b108": { "6f7f34ba690c91122f3ae8820b83f342061fa594ff253407eb57463d3c34c326": { "jp": { - "updatedAt": "2025-11-26T07:24:19.004Z" + "updatedAt": "2025-11-27T09:08:52.218Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.005Z" + "updatedAt": "2025-11-27T09:08:52.219Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.003Z" + "updatedAt": "2025-11-27T09:08:52.216Z" } } }, "95b82f3948cc48386b85537e6acf7fd6313c1898cc6cfcb47de65f3d618b47b9": { "f133bde7d530ef897396fcb59df2fc8c01b400e070c72c6a25647dfdb9a15538": { "jp": { - "updatedAt": "2025-11-26T07:24:19.007Z" + "updatedAt": "2025-11-27T09:08:59.489Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.007Z" + "updatedAt": "2025-11-27T09:08:59.489Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.008Z" + "updatedAt": "2025-11-27T09:08:59.489Z" } } }, "9d97fe2dc29c4e251fff04450d9d510ccf9c2e831a0489dda3f038dcc1a6a2f3": { "e5572fcb5876d8a6b1d1de543d82369a494fcc0715dd6012be5bbf426e7ac03a": { "jp": { - "updatedAt": "2025-11-26T07:24:19.013Z" + "updatedAt": "2025-11-27T09:08:59.530Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.012Z" + "updatedAt": "2025-11-27T09:08:59.502Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.012Z" + "updatedAt": "2025-11-27T09:08:59.503Z" } } }, "9e660b008ccbb63b66a28b42d2ca373909f19186af16b9c41ba664f7930e07fe": { "41b27ab4937c7b922d42316551438b4ad659c0ecc6b4fa06f15edf97230d1798": { "jp": { - "updatedAt": "2025-11-26T07:24:19.003Z" + "updatedAt": "2025-11-27T09:08:52.215Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.005Z" + "updatedAt": "2025-11-27T09:08:52.219Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.005Z" + "updatedAt": "2025-11-27T09:08:52.219Z" } } }, "ac6b549d962e823e381f2519f7e5e9ff23ec0d86da8d61b9555feb375c459654": { "0f0b86bed0cbb0312f32be51c009ca122e78f92ff738c6606ff98754fca7f43c": { "jp": { - "updatedAt": "2025-11-26T07:24:19.006Z" + "updatedAt": "2025-11-27T09:08:59.486Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.004Z" + "updatedAt": "2025-11-27T09:08:52.218Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.006Z" + "updatedAt": "2025-11-27T09:08:59.485Z" } } }, "af7eb4d69ab4cdae0eb49d2ecd090def503798009a9d8e43c2370f01f9a1219d": { "048d3372a598f7a300c38f0ddefba7da299bf7d8ba7fe1a30bbf53fd7ec3546f": { "jp": { - "updatedAt": "2025-11-26T07:24:19.010Z" + "updatedAt": "2025-11-27T09:08:59.496Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.009Z" + "updatedAt": "2025-11-27T09:08:59.493Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.008Z" + "updatedAt": "2025-11-27T09:08:59.491Z" } } }, "d613460c9b562b02355db0de5e4d5e795d93c8356530d72c4e6943e450e0cd79": { "21c14d0cc95de05e66c6024e0bc731b06c4934474cc10eeacdc8bce66de73868": { "jp": { - "updatedAt": "2025-11-26T07:24:02.783Z" + "updatedAt": "2025-11-27T09:08:52.203Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.006Z" + "updatedAt": "2025-11-27T09:08:59.485Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.005Z" + "updatedAt": "2025-11-27T09:08:52.220Z" } } }, "d79d5c1626358051641a02a5df10627db3ec1f8bfe82c284ecff6fc5d29ba24d": { "4b36bae2acf0c20fa2db7f654f8bc8ca933e4db7d7940a5c9c9a26463fe1a7cd": { "jp": { - "updatedAt": "2025-11-26T07:24:19.009Z" + "updatedAt": "2025-11-27T09:08:59.494Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.011Z" + "updatedAt": "2025-11-27T09:08:59.500Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.012Z" + "updatedAt": "2025-11-27T09:08:59.501Z" } } }, "09892c5c8c7770850dc4f12c85271ef2eb4054c5c9c132e0c016cfae2c946ba7": { "dc7fead9cdbb478c71bec3f2d3de2e7f32d848c704aedac7d98e3ecb52061139": { "jp": { - "updatedAt": "2025-11-26T07:24:12.125Z" + "updatedAt": "2025-11-27T09:08:59.548Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.124Z" + "updatedAt": "2025-11-27T09:08:59.545Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.125Z" + "updatedAt": "2025-11-27T09:08:59.549Z" } } }, "2fcab50b97bbc9aee5c0c03f5a35d374e8c3cdd3db10dc78091477c88a2c1277": { "0a0ef87ced393ab506690dadba9b95b3965777f4f3358eb4d004ea111fe10a51": { "jp": { - "updatedAt": "2025-11-26T07:24:19.009Z" + "updatedAt": "2025-11-27T09:08:59.494Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.008Z" + "updatedAt": "2025-11-27T09:08:59.492Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.009Z" + "updatedAt": "2025-11-27T09:08:59.494Z" } } }, "326c8895de68add9af3b55b704f3bfc1105c0f592e4c66fcf4716d6ad3d6bd4d": { "67ed218e943e01dfd5ac6127ae3673f4c5704dc7e706fa765d94c11dd7f80e59": { "jp": { - "updatedAt": "2025-11-26T07:24:12.127Z" + "updatedAt": "2025-11-27T09:08:59.553Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.127Z" + "updatedAt": "2025-11-27T09:08:59.554Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.127Z" + "updatedAt": "2025-11-27T09:08:59.553Z" } } }, "3aef4f3512c85d4057c69557fd85794d38328c9e61205b126b37d4de45a963e9": { "06d1c97a15302255ab6d9a474e72aa8993ccc93d6749dfd1e5e94970da469d29": { "jp": { - "updatedAt": "2025-11-26T07:24:12.125Z" + "updatedAt": "2025-11-27T09:08:59.547Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.124Z" + "updatedAt": "2025-11-27T09:08:59.545Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.124Z" + "updatedAt": "2025-11-27T09:08:59.543Z" } } }, "467b72fd8dba8502decf3c42bc9358fa8c4d3014dfcfe6b42bb8f4dce198fd62": { "a67f1de09a8a84f9d6443a0df3a49146ce63494d30ed1c458b9929b32d5a4b7b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.126Z" + "updatedAt": "2025-11-27T09:08:59.550Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.127Z" + "updatedAt": "2025-11-27T09:08:59.554Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.127Z" + "updatedAt": "2025-11-27T09:08:59.555Z" } } }, "4a37cce1f00cda917ca47dd0a1a69934772f9e50b5150732050d2e9f70a019cd": { "f5d8080ef6746049caf9a9d8037b9090eeef2259b54e9f42ef3e6a135b796e6b": { "zh": { - "updatedAt": "2025-11-26T07:24:12.125Z" + "updatedAt": "2025-11-27T09:08:59.548Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.128Z" + "updatedAt": "2025-11-27T09:08:59.556Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.127Z" + "updatedAt": "2025-11-27T09:08:59.552Z" } } }, "4e436a71846d9aca6f15dc8c5445f526f911657bccffd77d51b5a4689a95bbf2": { "1ada5cacc80d636b19794a43afd3d71292a74c9e3f3fa93f182b39eb84ad7355": { "jp": { - "updatedAt": "2025-11-26T07:24:19.011Z" + "updatedAt": "2025-11-27T09:08:59.499Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.011Z" + "updatedAt": "2025-11-27T09:08:59.498Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.012Z" + "updatedAt": "2025-11-27T09:08:59.501Z" } } }, "625ac60abe1e4f7ce4df8ac9bffd1f30f906501c1b636c41e7dee039c1280348": { "eaab285929dea7d9ff8f319faad61a28e866d384a56d15e9eb7a2ea10d96b567": { "jp": { - "updatedAt": "2025-11-26T07:24:19.009Z" + "updatedAt": "2025-11-27T09:08:59.493Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.011Z" + "updatedAt": "2025-11-27T09:08:59.500Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.010Z" + "updatedAt": "2025-11-27T09:08:59.497Z" } } }, "67c93fd175b134b8986f749e1afceefc6f06a4487d9ef161d2ea74e2be618233": { "5418ed61ccd90e17c44bbf1d4246b7b4344bcf595b331971dc74df17def6dcab": { "jp": { - "updatedAt": "2025-11-26T07:24:19.013Z" + "updatedAt": "2025-11-27T09:08:59.531Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.013Z" + "updatedAt": "2025-11-27T09:08:59.503Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.013Z" + "updatedAt": "2025-11-27T09:08:59.532Z" } } }, "8719f0b66c142c6db2cf8773ebaddac3b3d310bd046ca6effa5bb15e73d1a00f": { "9c001ffc30fb8da63ebd6c0931ef3efb9ac209edc160ae449428bb65298622c3": { "jp": { - "updatedAt": "2025-11-26T07:24:12.125Z" + "updatedAt": "2025-11-27T09:08:59.546Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.015Z" + "updatedAt": "2025-11-27T09:08:59.543Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.126Z" + "updatedAt": "2025-11-27T09:08:59.549Z" } } }, "89ea779c156a999fdf17c325da1e81dd07a635d696dfd5a115e631154d3dbb2a": { "ecc1acdcb21d77d65ebcdd760265565e99254e242903d6b4483da0a6b4a59482": { "jp": { - "updatedAt": "2025-11-26T07:24:12.126Z" + "updatedAt": "2025-11-27T09:08:59.551Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.128Z" + "updatedAt": "2025-11-27T09:08:59.557Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.008Z" + "updatedAt": "2025-11-27T09:08:59.491Z" } } }, "9b137d113f115786a055cd8fbc160635ea3e53512ae73d845fd749380bc1f381": { "0e565f9a4b2a92384daeaab520393c6426e3c190a2625839b4ead735b7a693f3": { "jp": { - "updatedAt": "2025-11-26T07:24:19.015Z" + "updatedAt": "2025-11-27T09:08:59.542Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.126Z" + "updatedAt": "2025-11-27T09:08:59.550Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.126Z" + "updatedAt": "2025-11-27T09:08:59.551Z" } } }, "a524ef715c9704a1e92f4f92e0b9799ff822e7bf9860bf751ae2b1ff9edf0afe": { "e0f8014536b364d9d9409cff9471107e76279833faca677b2ccf2c077400b851": { "jp": { - "updatedAt": "2025-11-26T07:24:19.009Z" + "updatedAt": "2025-11-27T09:08:59.493Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.010Z" + "updatedAt": "2025-11-27T09:08:59.496Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.010Z" + "updatedAt": "2025-11-27T09:08:59.496Z" } } }, "bc010b67445245013c815d8c8dd2a711a400f2ac89689de6a705df179ad8c706": { "58a5d26b93b4269bbcac95ceeeb1329954babd6a907538f5319432f3ac4e6b22": { "jp": { - "updatedAt": "2025-11-26T07:24:12.124Z" + "updatedAt": "2025-11-27T09:08:59.545Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.126Z" + "updatedAt": "2025-11-27T09:08:59.551Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.124Z" + "updatedAt": "2025-11-27T09:08:59.544Z" } } }, "c0ac70d88c31f863cc7a3f822cfa525fe69266c4bf831f94c2029759cb9726db": { "b931df20b4f6c77ea8d226087a40d67fa3ecf5f9d09ed73922e7aa8f8f763fd7": { "jp": { - "updatedAt": "2025-11-26T07:24:12.125Z" + "updatedAt": "2025-11-27T09:08:59.546Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.125Z" + "updatedAt": "2025-11-27T09:08:59.547Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.127Z" + "updatedAt": "2025-11-27T09:08:59.554Z" } } }, "c58c920060a64568fe6e344fe00a5ce4d720ac37a93628692770ada830c5325e": { "4a343784a2e6508b5e218dd32d01eb13fe7c9d806b2cb07a5c39a775f7b2383d": { "jp": { - "updatedAt": "2025-11-26T07:24:19.013Z" + "updatedAt": "2025-11-27T09:08:59.533Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.013Z" + "updatedAt": "2025-11-27T09:08:59.533Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.013Z" + "updatedAt": "2025-11-27T09:08:59.532Z" } } }, "d61225a37fe0c4d963dda12e6171915748b61bb4ea252b20fee7017863e0f8cb": { "e22f186111d1f322fd63ea2a2ab6b8dabcc933c9f1a1d547efbcaa1d9f78faec": { "jp": { - "updatedAt": "2025-11-26T07:24:19.009Z" + "updatedAt": "2025-11-27T09:08:59.494Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.008Z" + "updatedAt": "2025-11-27T09:08:59.492Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.010Z" + "updatedAt": "2025-11-27T09:08:59.495Z" } } }, "e59d25e659a24273c3eef05daa226fdbfb119134fc9c360fb8f10fa1eda0bc5d": { "cea9fed32032cdfb1fc07ee3fd025b189b279642029231324022cc8c275879fa": { "jp": { - "updatedAt": "2025-11-26T07:24:19.010Z" + "updatedAt": "2025-11-27T09:08:59.495Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.011Z" + "updatedAt": "2025-11-27T09:08:59.498Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.010Z" + "updatedAt": "2025-11-27T09:08:59.496Z" } } }, "ebcf5c14bcf3f123a8337f0e4d01711d0d5350b19f8fceb4989ba4967a454d71": { "fcbe8a223dbb47bb59f5c3e6880beb175753d21025800e5178cb322086eb6eb5": { "jp": { - "updatedAt": "2025-11-26T07:24:12.124Z" + "updatedAt": "2025-11-27T09:08:59.545Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.127Z" + "updatedAt": "2025-11-27T09:08:59.555Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.126Z" + "updatedAt": "2025-11-27T09:08:59.551Z" } } }, "f8131ef0252b8ff50e0e16a5c5a263d8c4c19d0d5eed0109ad5127d0b7f1e617": { "10eec051f15e6d2b7349c390f8baebb76014741ed3b8e31aa94bf797e786189b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.126Z" + "updatedAt": "2025-11-27T09:08:59.549Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.128Z" + "updatedAt": "2025-11-27T09:08:59.556Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.127Z" + "updatedAt": "2025-11-27T09:08:59.552Z" } } }, "57ad9bdcde77c82a8b9abbf11d3820f549bfb779a29aa35c949fd4b27ff2f01f": { "1e38948feed7f1b2a7b35c47b430e56f07e2438c56f10e45d636ec500990a43d": { "jp": { - "updatedAt": "2025-11-26T07:24:12.126Z" + "updatedAt": "2025-11-27T09:08:59.550Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.125Z" + "updatedAt": "2025-11-27T09:08:59.547Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.015Z" + "updatedAt": "2025-11-27T09:08:59.543Z" } } }, "7ceb6e3c9247297b0f7f32b5bcc5fdd805490fb8b1ac4cb176afdba619355e4d": { "ac6e6531f103ea9f5613e39ee61cfcddac7133be00040a3d2577c40543aa27fe": { "jp": { - "updatedAt": "2025-11-26T07:24:12.125Z" + "updatedAt": "2025-11-27T09:08:59.548Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.125Z" + "updatedAt": "2025-11-27T09:08:59.546Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.127Z" + "updatedAt": "2025-11-27T09:08:59.553Z" } } }, "b623b9673e0f28805a4afdfc8013cc9c06d3af3bc31cc33238b2d1a449d4888f": { "141f6e9d777628dad68e29e4db62adc7411f17cbe61f3611de81835eed95ff15": { "jp": { - "updatedAt": "2025-11-26T07:24:12.124Z" + "updatedAt": "2025-11-27T09:08:59.544Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.124Z" + "updatedAt": "2025-11-27T09:08:59.544Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.008Z" + "updatedAt": "2025-11-27T09:08:59.491Z" } } }, "bd529fa629c3f10310f525658df96bc82a80d75ff52d1995cafe1e4b13e747cd": { "ff7e68ef737ee5b8e75daa40f60eb811c121bece05086608bbe25c6ac85d8715": { "jp": { - "updatedAt": "2025-11-26T07:24:12.128Z" + "updatedAt": "2025-11-27T09:08:59.558Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.128Z" + "updatedAt": "2025-11-27T09:08:59.557Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.128Z" + "updatedAt": "2025-11-27T09:08:59.558Z" } } }, "cbd3fd46a4918ee9b9919e72d00bd7ce3d00418bb1705c843c677adb3e595a3a": { "0613ad7af0509f61658a0f7a5e17e617139bdf209f37e63f862416353f1241ef": { "jp": { - "updatedAt": "2025-11-26T07:24:12.127Z" + "updatedAt": "2025-11-27T09:08:59.555Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.127Z" + "updatedAt": "2025-11-27T09:08:59.554Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.125Z" + "updatedAt": "2025-11-27T09:08:59.548Z" } } }, "e1167cae2cc6ec3ff98f99cc5fdc814c1613d183ffc5a294e5002a5c76629f89": { "bdc0fd08e9185e494c67e0405a76d6b5ff3f2a66fb66986f38ad9fb1486504d8": { "jp": { - "updatedAt": "2025-11-26T07:24:12.126Z" + "updatedAt": "2025-11-27T09:08:59.552Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.128Z" + "updatedAt": "2025-11-27T09:08:59.556Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.124Z" + "updatedAt": "2025-11-27T09:08:59.544Z" } } }, "fddeb9c1bb988ad91fa2ab2fd48f16446790394aee1f2ea892b74b4703663d8e": { "40a994cb1728118007e9bcec1d1e95be3ceda608e471c1a73b546b7c438f8ebe": { "jp": { - "updatedAt": "2025-11-26T07:24:12.125Z" + "updatedAt": "2025-11-27T09:08:59.547Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.128Z" + "updatedAt": "2025-11-27T09:08:59.556Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.128Z" + "updatedAt": "2025-11-27T09:08:59.557Z" } } }, "08bffe1dc74222857bd9847a9079d22910222fbbdc1dd9975d3beb50f284f3ee": { "6ff985dd3eb042cd0776c0981bb360df764da84db1d5f50ba4c7bc2fd4394a58": { "jp": { - "updatedAt": "2025-11-26T07:24:19.023Z" + "updatedAt": "2025-11-27T09:08:52.248Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.022Z" + "updatedAt": "2025-11-27T09:08:52.247Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.023Z" + "updatedAt": "2025-11-27T09:08:52.248Z" } } }, "3a9bf422a9a85629cde7696a05524d19ff37ff8a14e26aa9d363708d50ca69ae": { "3106e22f04396e24e2bcfddd311b6bf015d441abff426e8f3e45320a55f20c46": { "jp": { - "updatedAt": "2025-11-26T07:24:19.023Z" + "updatedAt": "2025-11-27T09:08:52.249Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.024Z" + "updatedAt": "2025-11-27T09:08:52.251Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.024Z" + "updatedAt": "2025-11-27T09:08:52.250Z" } } }, "0b2918c33c54636514f9106c16c6353f3c90189cb35c245462f264976b158e49": { "8b5e41f784e6af3f274d3cbab3bb71a982e9a0b2df5cd5050b3f76eca71460f7": { "jp": { - "updatedAt": "2025-11-26T07:24:19.023Z" + "updatedAt": "2025-11-27T09:08:52.249Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.021Z" + "updatedAt": "2025-11-27T09:08:52.243Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.021Z" + "updatedAt": "2025-11-27T09:08:52.244Z" } } }, "190291cbeb8e03da636d545882454df1f5969a43233fa8547a340888416e0d7a": { "1e21922b278cc488c7ca6142a0b58330666f67ff429c778024409f871aeca347": { "jp": { - "updatedAt": "2025-11-26T07:24:19.020Z" + "updatedAt": "2025-11-27T09:08:52.240Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.027Z" + "updatedAt": "2025-11-27T09:08:59.682Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.026Z" + "updatedAt": "2025-11-27T09:08:59.681Z" } } }, "1dbfde47d0ccaf8fabcd5ad6a4296155b1b096aae0b5f8d17a8c1b756b2695fb": { "665e7928e61709a3964eb76535bc335c1bee18c8bc09733558199e232956630c": { "jp": { - "updatedAt": "2025-11-26T07:24:19.021Z" + "updatedAt": "2025-11-27T09:08:52.244Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.022Z" + "updatedAt": "2025-11-27T09:08:52.245Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.021Z" + "updatedAt": "2025-11-27T09:08:52.244Z" } } }, "1e6d8899d944f96b533c9b1689dd0f3c45d1f4d88d4d1edd3d0cd126273c28ae": { "874433a820ac2a172772ed12a2a2e43d64d72b5fa3f8c9060c2ea70f9d9969b6": { "jp": { - "updatedAt": "2025-11-26T07:24:19.022Z" + "updatedAt": "2025-11-27T09:08:52.246Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.022Z" + "updatedAt": "2025-11-27T09:08:52.247Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.022Z" + "updatedAt": "2025-11-27T09:08:52.245Z" } } }, "267616b5e710386f1e95782b057051b61f78cf2ab9ab90a87b76171e1110ba0f": { "526635ff55be813366ca95dd8408fe2713af702ad3c42ee3f6df159c36d7d754": { "jp": { - "updatedAt": "2025-11-26T07:24:19.028Z" + "updatedAt": "2025-11-27T09:08:59.686Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.027Z" + "updatedAt": "2025-11-27T09:08:59.684Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.028Z" + "updatedAt": "2025-11-27T09:08:59.685Z" } } }, "3db2189c4ab253714a8026c40657f8d09c5b44880bacd30f5d37a00af55f0af9": { "2e5559b28181e920ab535b8433f1644911413cf5aad2b7f7f2077a2124cdb9a5": { "jp": { - "updatedAt": "2025-11-26T07:24:19.023Z" + "updatedAt": "2025-11-27T09:08:52.248Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.021Z" + "updatedAt": "2025-11-27T09:08:52.245Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.022Z" + "updatedAt": "2025-11-27T09:08:52.245Z" } } }, "4887a31d41443a8cec80c653b5cb1471ad7101392e2a0fd85344bf550b4479de": { "5d542d21d2aeff7420ac405c3efb0280de56bfcdabe3edfdeea55aee2ee0816f": { "jp": { - "updatedAt": "2025-11-26T07:24:19.021Z" + "updatedAt": "2025-11-27T09:08:52.245Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.021Z" + "updatedAt": "2025-11-27T09:08:52.244Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.021Z" + "updatedAt": "2025-11-27T09:08:52.244Z" } } }, "5e3e9bc17b90a0989880b5acd7291677843b0466fc3c36993015c0a7331f4c86": { "50e422154e7d9340b9ae3e608a02ad691373881011458d12ee9329b251e2ee21": { "jp": { - "updatedAt": "2025-11-26T07:24:12.158Z" + "updatedAt": "2025-11-27T09:08:59.672Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.025Z" + "updatedAt": "2025-11-27T09:08:52.252Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.024Z" + "updatedAt": "2025-11-27T09:08:52.252Z" } } }, "6820315a7841bbc8c89a60ac5aa8c0fe4457e414cad746f3bed1650c3f297bc6": { "6d8963200cc850f442fe2995954f739d20436c4a7fb4b2ec7f8a636bc53779a7": { "jp": { - "updatedAt": "2025-11-26T07:24:19.025Z" + "updatedAt": "2025-11-27T09:08:52.252Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.022Z" + "updatedAt": "2025-11-27T09:08:52.247Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.023Z" + "updatedAt": "2025-11-27T09:08:52.249Z" } } }, @@ -16075,117 +17219,117 @@ }, "3b63277eca58a6be86961cdf77d03b10bf3995740802c612a1fe8d80ea7d20ea": { "jp": { - "updatedAt": "2025-11-26T07:24:19.020Z" + "updatedAt": "2025-11-27T09:08:52.241Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.020Z" + "updatedAt": "2025-11-27T09:08:52.241Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.020Z" + "updatedAt": "2025-11-27T09:08:52.241Z" } } }, "e0c7e0ffde8dc72698165f5f5a97336beb9082111bdd4a6c98f10c02ab69cd27": { "1bd7f94ef79ae4a259d5eb60f577fdcaa8d2926824240d88238ffb4e9d917715": { "ru": { - "updatedAt": "2025-11-26T07:24:19.022Z" + "updatedAt": "2025-11-27T09:08:52.246Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.023Z" + "updatedAt": "2025-11-27T09:08:52.248Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:19.023Z" + "updatedAt": "2025-11-27T09:08:52.249Z" } } }, "09967fd0502ac05bc286aeb301c2cc87873b2a18ef14f3e2acde54345b2ce839": { "ced484d2a382f8655c9d000bcfd985aa94545bc671aae3824c264e06b17c1fb5": { "jp": { - "updatedAt": "2025-11-26T07:24:19.030Z" + "updatedAt": "2025-11-27T09:08:59.692Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.020Z" + "updatedAt": "2025-11-27T09:08:52.240Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.030Z" + "updatedAt": "2025-11-27T09:08:59.691Z" } } }, "181adac272e2abd83cc757fde65fb79cacfbbfdd22c49560ad9938dc95ca360f": { "6aca92cecd7097cb7ee90b10d02efba74d48a3de1843308bf7b14b842592c336": { "jp": { - "updatedAt": "2025-11-26T07:24:19.027Z" + "updatedAt": "2025-11-27T09:08:59.682Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.026Z" + "updatedAt": "2025-11-27T09:08:59.682Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.028Z" + "updatedAt": "2025-11-27T09:08:59.686Z" } } }, "1e8da80bc94e12875fbc8b4285abd87a9ebc00408979ef39716bb53ce4293704": { "cca901fd78a63bb4eb045aec0ee20699b9ea63520630a96e5bc254085761c479": { "jp": { - "updatedAt": "2025-11-26T07:24:19.030Z" + "updatedAt": "2025-11-27T09:08:59.690Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.030Z" + "updatedAt": "2025-11-27T09:08:59.691Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.030Z" + "updatedAt": "2025-11-27T09:08:59.690Z" } } }, "28af1868b1ea9cdd8d1446f03dc1a91a48ed271602879f18d0d3211752aa2e0d": { "38f892b234c9e0a9d0e3e6bf087768671979427a8bbaf831e2c0cd94e5730d2a": { "jp": { - "updatedAt": "2025-11-26T07:24:19.031Z" + "updatedAt": "2025-11-27T09:08:59.693Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.032Z" + "updatedAt": "2025-11-27T09:08:59.696Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.032Z" + "updatedAt": "2025-11-27T09:08:59.698Z" } } }, "352b7210abed12f4834ce3966861f5819c1b015976a552f4d8f3417367d6519c": { "aa0583b1c517ae46447bcd58d7475ba0f4350a3b5974cd1a472f07e84ea2b12b": { "zh": { - "updatedAt": "2025-11-26T07:24:19.035Z" + "updatedAt": "2025-11-27T09:08:52.255Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:19.026Z" + "updatedAt": "2025-11-27T09:08:59.679Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.036Z" + "updatedAt": "2025-11-27T09:08:52.257Z" } } }, "3e04e93b41ef14736c12d8caaaae2fd7c113b2b4ab71ad84553b87b688b2ce7c": { "44da72d1f89df587a02ef24e707acb1da8350d35e7f7a73fc92e5b863e479a62": { "jp": { - "updatedAt": "2025-11-26T07:24:19.032Z" + "updatedAt": "2025-11-27T09:08:59.697Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.032Z" + "updatedAt": "2025-11-27T09:08:59.697Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.029Z" + "updatedAt": "2025-11-27T09:08:59.688Z" } } }, "3e44364087b9660f0daf48e77e2d51e82485581dd45ba3635100c92a48f5cc81": { "32a51ef86f8ce4d5a89c21ac07056345cd0ad1dcf0c3eff8343941896b7a8a62": { "jp": { - "updatedAt": "2025-11-26T07:24:19.020Z" + "updatedAt": "2025-11-27T09:08:52.242Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.020Z" + "updatedAt": "2025-11-27T09:08:52.242Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.020Z" + "updatedAt": "2025-11-27T09:08:52.242Z" } } }, @@ -16203,78 +17347,78 @@ }, "f1f6c6ba727fcac4034e8e533a8a14914f296de5811f8ef69aaccc190ed52c04": { "jp": { - "updatedAt": "2025-11-26T07:24:19.020Z" + "updatedAt": "2025-11-27T09:08:52.241Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.026Z" + "updatedAt": "2025-11-27T09:08:59.680Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.026Z" + "updatedAt": "2025-11-27T09:08:59.681Z" } } }, "56a2d0968dd32b192f6e6833bf129bd2a1a73e16d498c9f8a64c8e8cefcb7635": { "85317ab67c21185490c8ce6da9f40ae75c6aa792d046b52122da1555de6a0d7a": { "jp": { - "updatedAt": "2025-11-26T07:24:19.027Z" + "updatedAt": "2025-11-27T09:08:59.683Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.028Z" + "updatedAt": "2025-11-27T09:08:59.686Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.027Z" + "updatedAt": "2025-11-27T09:08:59.684Z" } } }, "57fb93819b163681fc7674df87acd51d16808daf3c9a80875363e714ab6b6f0d": { "589fc5521d34b691619a0775483550005c0339c397f9c5eb2ad84a68d38fc0c5": { "jp": { - "updatedAt": "2025-11-26T07:24:19.028Z" + "updatedAt": "2025-11-27T09:08:59.686Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.027Z" + "updatedAt": "2025-11-27T09:08:59.683Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.027Z" + "updatedAt": "2025-11-27T09:08:59.684Z" } } }, "5f7acdc3b5ad3c4b70f2e0f6421eedcef49bbf5fe1541b93de796181d282e3f8": { "c3b3c36e1615ad52f46683413733ab6deb9809b9216880d962f14d2b316e6812": { "jp": { - "updatedAt": "2025-11-26T07:24:19.023Z" + "updatedAt": "2025-11-27T09:08:52.250Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.024Z" + "updatedAt": "2025-11-27T09:08:52.251Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.025Z" + "updatedAt": "2025-11-27T09:08:52.252Z" } } }, "720286aedee663b0895eadfbb8c855cf28e8c889a5c1e959eba2cb56410fe0ea": { "8b424c806172df3664b5a02f66fa091e75d922eace7c6d17ab06a1cd4d48ded0": { "jp": { - "updatedAt": "2025-11-26T07:24:19.027Z" + "updatedAt": "2025-11-27T09:08:59.683Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.028Z" + "updatedAt": "2025-11-27T09:08:59.686Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.027Z" + "updatedAt": "2025-11-27T09:08:59.683Z" } } }, "72359f73659f510486d116f7315a779a8e182fd9217ec98122618754e8e8e523": { "b7f70662c0d64e5760316e2f601553929e92b4cd5b7d382d9d395b743c0236de": { "jp": { - "updatedAt": "2025-11-26T07:24:19.025Z" + "updatedAt": "2025-11-27T09:08:59.678Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.159Z" + "updatedAt": "2025-11-27T09:08:59.672Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.025Z" + "updatedAt": "2025-11-27T09:08:59.676Z" } } }, @@ -16292,299 +17436,299 @@ }, "13a75f2e1510d071925413f0a9794c0c5df227d3f3007ca6a25a865fbf3c7afb": { "jp": { - "updatedAt": "2025-11-26T07:24:19.026Z" + "updatedAt": "2025-11-27T09:08:59.679Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.026Z" + "updatedAt": "2025-11-27T09:08:59.679Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.026Z" + "updatedAt": "2025-11-27T09:08:59.680Z" } } }, "a27f8d321849f13ef579bf79bd9fb504adce87fc32377cb34f1d87d0247b62fc": { "0af225620d1128bf2b7b6df1fd290b2f9272232c08e057bbcdddcb8da980d877": { "jp": { - "updatedAt": "2025-11-26T07:24:19.024Z" + "updatedAt": "2025-11-27T09:08:52.250Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.025Z" + "updatedAt": "2025-11-27T09:08:59.677Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.025Z" + "updatedAt": "2025-11-27T09:08:59.677Z" } } }, "bf4aa8d8478e9cbccac2af56a2392959e788a6b441ae1d334d378fe41c813431": { "03be8e55e0b7b3239928d3c046bcafe55731c78e43aa66ee2a92c237cad32296": { "jp": { - "updatedAt": "2025-11-26T07:24:19.024Z" + "updatedAt": "2025-11-27T09:08:52.252Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.023Z" + "updatedAt": "2025-11-27T09:08:52.249Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.023Z" + "updatedAt": "2025-11-27T09:08:52.250Z" } } }, "c6f8d4ed5ef7dc56f976117869cc7a69922f064662bcdd47f24b593a903bb511": { "66256e49527646d9c1360a5db02fe360c867281e0fbebf9751bf3d0a5e4e0116": { "jp": { - "updatedAt": "2025-11-26T07:24:19.028Z" + "updatedAt": "2025-11-27T09:08:59.685Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.022Z" + "updatedAt": "2025-11-27T09:08:52.247Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.023Z" + "updatedAt": "2025-11-27T09:08:52.248Z" } } }, "cf5cab052feab37e254b75324c3a852334a8eb3c58db22a1686c9494d09f443c": { "d809412f215411acf69b12810108cd424016766dd4d30a992351f8e69bf650e3": { "jp": { - "updatedAt": "2025-11-26T07:24:19.022Z" + "updatedAt": "2025-11-27T09:08:52.246Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.024Z" + "updatedAt": "2025-11-27T09:08:52.251Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.158Z" + "updatedAt": "2025-11-27T09:08:59.672Z" } } }, "d9f334133320c651967d1b5b665ba9cb709fe4d09178893258245d70b28c5b25": { "ab1cd75a382114032d421c93d59ddfaae337e9528e1ac6b02cc19764422a2124": { "jp": { - "updatedAt": "2025-11-26T07:24:19.031Z" + "updatedAt": "2025-11-27T09:08:59.693Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.032Z" + "updatedAt": "2025-11-27T09:08:59.695Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.030Z" + "updatedAt": "2025-11-27T09:08:59.692Z" } } }, "da0fe2e9eb4d4168fde541e5a4aa216882f11f0fe02c65758804bc42306051b7": { "460c5141199908b2fb1f8ada87d50d25899e1061548dd77278916ae9f0194eb1": { "jp": { - "updatedAt": "2025-11-26T07:24:19.025Z" + "updatedAt": "2025-11-27T09:08:59.677Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.024Z" + "updatedAt": "2025-11-27T09:08:52.250Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.024Z" + "updatedAt": "2025-11-27T09:08:52.251Z" } } }, "e1c1bce938fcd121a541dda56b44194cec991a3c399320d28f68662d4f2aa155": { "ab303b424478e35d2600d95fd49a29737cadb6308b63d04e43f98d10c38b5cd3": { "jp": { - "updatedAt": "2025-11-26T07:24:19.031Z" + "updatedAt": "2025-11-27T09:08:59.693Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.031Z" + "updatedAt": "2025-11-27T09:08:59.694Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.030Z" + "updatedAt": "2025-11-27T09:08:59.692Z" } } }, "fd5ff75cec53563913c25d3a84cb92ca6b7f928115d7912cef78a22dfc907f29": { "ba4164cf48205f79abd50e8ce1180feb106ddcdda361d67fbf580922f1a8bf3d": { "jp": { - "updatedAt": "2025-11-26T07:24:19.022Z" + "updatedAt": "2025-11-27T09:08:52.246Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.021Z" + "updatedAt": "2025-11-27T09:08:52.243Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.022Z" + "updatedAt": "2025-11-27T09:08:52.246Z" } } }, "176d0068a5182e14c24f7b86a941e2993dd5d5375dda5f359181472f50bb49a6": { "3c0a49ce0175e9ffb151adc18ac51e16f2d58c189a49b071eddff19741b2773b": { "jp": { - "updatedAt": "2025-11-26T07:24:19.036Z" + "updatedAt": "2025-11-27T09:08:52.257Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.036Z" + "updatedAt": "2025-11-27T09:08:52.256Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.037Z" + "updatedAt": "2025-11-27T09:08:52.258Z" } } }, "2fc9ece7b731c86425713493bf6fdb0053ccce96ffd9f63a70eea4019cdff660": { "547949490f707e9c4812b2f1acebb85c8f7858c6f4c8d030784a54ffa0f6764b": { "jp": { - "updatedAt": "2025-11-26T07:24:19.034Z" + "updatedAt": "2025-11-27T09:08:59.705Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.034Z" + "updatedAt": "2025-11-27T09:08:59.703Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.034Z" + "updatedAt": "2025-11-27T09:08:59.704Z" } } }, "356a5236e325bbd80f92c622b5549c7f59c011b169fdc94f7b59ad1948f64d59": { "32a464d65d3033a6f94c395c523bdf9d52473033f37bc7b58a4c7d5a3374d78c": { "jp": { - "updatedAt": "2025-11-26T07:24:19.033Z" + "updatedAt": "2025-11-27T09:08:59.702Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.033Z" + "updatedAt": "2025-11-27T09:08:59.702Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.033Z" + "updatedAt": "2025-11-27T09:08:59.702Z" } } }, "4dcf3a152974b0406b6bb68f5b1c541fe9249595ec4170e386cdf67f9e97d6c8": { "144e0319e32e38db32a1efd639ffc72bf732e5ea7b5d6a3d0883a97e4bec0cf7": { "jp": { - "updatedAt": "2025-11-26T07:24:19.035Z" + "updatedAt": "2025-11-27T09:08:52.254Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.038Z" + "updatedAt": "2025-11-27T09:08:52.260Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.037Z" + "updatedAt": "2025-11-27T09:08:52.258Z" } } }, "512bf2a261651531d1f44db97f0e2477f9009f4f748fece66e5ca2554439601d": { "f65ce8822ff0abf42d5c376dd8120812baee55885d0c7b7b65bd770ce9d25050": { "jp": { - "updatedAt": "2025-11-26T07:24:19.033Z" + "updatedAt": "2025-11-27T09:08:59.702Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.035Z" + "updatedAt": "2025-11-27T09:08:52.253Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.034Z" + "updatedAt": "2025-11-27T09:08:59.704Z" } } }, "65955c38f425b134d13cac38e2564b302a84b647113466a30fa84df4625f2aff": { "e5d27d0981cb097f6f8db2c3366ef654946ffdaba0ea5433e234e0200fed3d99": { "jp": { - "updatedAt": "2025-11-26T07:24:19.037Z" + "updatedAt": "2025-11-27T09:08:52.257Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.036Z" + "updatedAt": "2025-11-27T09:08:52.257Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.036Z" + "updatedAt": "2025-11-27T09:08:52.256Z" } } }, "70760b9ea84a1492768f54f60022928ceed80c33ef8d2cbbe522324f7979123c": { "5172acba2103f95752ebbc8f74579f1012ec0e81bba84d6402deb3f9ab3b0bfa": { "jp": { - "updatedAt": "2025-11-26T07:24:19.038Z" + "updatedAt": "2025-11-27T09:08:52.261Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.037Z" + "updatedAt": "2025-11-27T09:08:52.259Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.037Z" + "updatedAt": "2025-11-27T09:08:52.258Z" } } }, "832f10a64dee00c5573ad8927271c0f08e6912344a6142b218901f374557d6d4": { "c00fec44d98d20ecff726432315131e9d6815d1bc6d528bba1cbde655c11121f": { "jp": { - "updatedAt": "2025-11-26T07:24:19.030Z" + "updatedAt": "2025-11-27T09:08:59.689Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.029Z" + "updatedAt": "2025-11-27T09:08:59.688Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.029Z" + "updatedAt": "2025-11-27T09:08:59.687Z" } } }, "85aaa20028d2fe29973bbd19c0fe7f0bbf9b2028122048baf8aa80c366fa2134": { "3e3cfccfbfc2a9aaaa5c073111f54d43e1d4a01447a2fdcb70bbf2ad0fa40c15": { "jp": { - "updatedAt": "2025-11-26T07:24:19.029Z" + "updatedAt": "2025-11-27T09:08:59.689Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.029Z" + "updatedAt": "2025-11-27T09:08:59.687Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.029Z" + "updatedAt": "2025-11-27T09:08:59.689Z" } } }, "8edf9e4f287ceba4ca2d82f14382e035360e320bcc403a4bd0ffc3569444e7f7": { "0210849faec51fc728046caa3f03b71304bb9c646dc07169ab1c6d9e340a0aec": { "jp": { - "updatedAt": "2025-11-26T07:24:19.029Z" + "updatedAt": "2025-11-27T09:08:59.688Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.028Z" + "updatedAt": "2025-11-27T09:08:59.685Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.028Z" + "updatedAt": "2025-11-27T09:08:59.687Z" } } }, "9c07a7cf8bf10809ed5421b224c9702d1daf802a6511bc28a61380182a3cba5a": { "4e8ed6a1feb2aa52a5a2a4588b3ecb8b8ba68dec83a27b9280790c81f51a60e4": { "jp": { - "updatedAt": "2025-11-26T07:24:19.037Z" + "updatedAt": "2025-11-27T09:08:52.258Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.038Z" + "updatedAt": "2025-11-27T09:08:52.260Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.037Z" + "updatedAt": "2025-11-27T09:08:52.260Z" } } }, "aca562c01858d73f9360f0e4a8d8f95a124b249a19b0ac43f5ac37f630d90098": { "ee65e6b42c946faacb88190659aa69f5301c1f21f2e9cfd0f05fe8318bbc5c6e": { "jp": { - "updatedAt": "2025-11-26T07:24:19.030Z" + "updatedAt": "2025-11-27T09:08:59.690Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.031Z" + "updatedAt": "2025-11-27T09:08:59.694Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.030Z" + "updatedAt": "2025-11-27T09:08:59.692Z" } } }, "b39b9077d3c9edfb0122eda19c18f981a977ba3d4b35e87ca4e9808c93c00357": { "c4806c1db71a5a0e8cfe750303156d37b0c67170fa9901e7e2fcd40bc40df990": { "jp": { - "updatedAt": "2025-11-26T07:24:19.028Z" + "updatedAt": "2025-11-27T09:08:59.685Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.029Z" + "updatedAt": "2025-11-27T09:08:59.687Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.028Z" + "updatedAt": "2025-11-27T09:08:59.684Z" } } }, "b57ac847efe3da698e4e7e930e7c66f735f45e722a25a0fa39bc6f7bfcec60cf": { "9c431dd0d8265db20267a05a0e5cddc327c798c7acfd1be5071f066d5a7aee28": { "jp": { - "updatedAt": "2025-11-26T07:24:19.030Z" + "updatedAt": "2025-11-27T09:08:59.691Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.031Z" + "updatedAt": "2025-11-27T09:08:59.695Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.031Z" + "updatedAt": "2025-11-27T09:08:59.694Z" } } }, @@ -16599,3697 +17743,3708 @@ "zh": { "updatedAt": "2025-11-26T07:24:19.038Z" } + }, + "a9aaf3d0acf90c263febea571cd562058a89cc9ae231894d698d45f35f8a8089": { + "zh": { + "updatedAt": "2025-11-27T09:08:59.681Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:59.699Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:59.700Z" + } } }, "d6df5c4a34d83a6b139258c32c70c202447dbb8bd299cdbc95f1a4df8e0183c4": { "cc987465957a6c156c8cfb8e7e1f5591232ce2a233ba2e10cdaa0502c5170fc1": { "jp": { - "updatedAt": "2025-11-26T07:24:19.035Z" + "updatedAt": "2025-11-27T09:08:52.253Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.034Z" + "updatedAt": "2025-11-27T09:08:59.705Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.035Z" + "updatedAt": "2025-11-27T09:08:52.255Z" } } }, "e8326b6e3e229b53f7f7616dad224e62d5aabc8c99d1885fa0b294be36436442": { "e0c19959bdee8150958356d19999762296868f26f8c58d573bd31ee946774713": { "jp": { - "updatedAt": "2025-11-26T07:24:19.035Z" + "updatedAt": "2025-11-27T09:08:52.254Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.035Z" + "updatedAt": "2025-11-27T09:08:52.255Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.034Z" + "updatedAt": "2025-11-27T09:08:59.705Z" } } }, "f6456b0e678701e28c6a4e322798fee754b4c6d0f806d50583a4b3bd2c244c77": { "b8b48f150dd2033fc11782fa83bfba12af99e2588c361eae29e969d7df966696": { "jp": { - "updatedAt": "2025-11-26T07:24:19.034Z" + "updatedAt": "2025-11-27T09:08:59.704Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.034Z" + "updatedAt": "2025-11-27T09:08:59.704Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.034Z" + "updatedAt": "2025-11-27T09:08:59.703Z" } } }, "581431969901be3a99a89764a4cd843b136cf34d9c36a58c385d297bcf0b5576": { "848b4e2ed1094aeeb74cb89d7d3f155262e075c04ec6a136f164406460b1c404": { "jp": { - "updatedAt": "2025-11-26T07:24:19.034Z" + "updatedAt": "2025-11-27T09:08:59.703Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.035Z" + "updatedAt": "2025-11-27T09:08:52.253Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.033Z" + "updatedAt": "2025-11-27T09:08:59.702Z" } } }, "90b8b253ec086b1363c721e07a29dbd20c3e79932831c40618a9e15eaed1259d": { "558092fa5958f7bf2b9c27c89f455619f6ca6f3513e83b59425458536609e8ef": { "jp": { - "updatedAt": "2025-11-26T07:24:19.036Z" + "updatedAt": "2025-11-27T09:08:52.256Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.035Z" + "updatedAt": "2025-11-27T09:08:52.255Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.035Z" + "updatedAt": "2025-11-27T09:08:52.256Z" } } }, "b22d1260a64a32ed7c646aebdc8304e5522445a10e936e31715082f3976c0efb": { "0350b0c4a0edef07c101045887230f235288aae9414af376658d84671b54adbe": { "jp": { - "updatedAt": "2025-11-26T07:24:19.034Z" + "updatedAt": "2025-11-27T09:08:59.704Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.036Z" + "updatedAt": "2025-11-27T09:08:52.256Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.035Z" + "updatedAt": "2025-11-27T09:08:52.255Z" } } }, "ba3d45a637c836f2218890eff93fee4103508fa1c470944799207121717e02a5": { "f3fd1aa8bafa81bb6a7e865a5de62823158a0afcc7ff7586bf136a8b47ee3a88": { "jp": { - "updatedAt": "2025-11-26T07:24:19.035Z" + "updatedAt": "2025-11-27T09:08:52.253Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.035Z" + "updatedAt": "2025-11-27T09:08:52.254Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.034Z" + "updatedAt": "2025-11-27T09:08:59.703Z" } } }, "fb6facb17dc3579b44508a305bcb4895b64ecd0ac72b1f50f97559b26bc78b2c": { "ad02c360d5787e1cd581329efbb507dd02fe16448697b4344569b5bc44e930ea": { "jp": { - "updatedAt": "2025-11-26T07:24:19.037Z" + "updatedAt": "2025-11-27T09:08:52.259Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.038Z" + "updatedAt": "2025-11-27T09:08:52.260Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.037Z" + "updatedAt": "2025-11-27T09:08:52.259Z" } } }, "035ee5282a6d20879fad6bfb6f79b4341721a15ea3c52c10046b1dd3709aa16c": { "58cd6998f41fdded6a804039b2debea7d2278499d73c45aac0012b7439df220c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.174Z" + "updatedAt": "2025-11-27T09:08:52.305Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.173Z" + "updatedAt": "2025-11-27T09:08:52.304Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.174Z" + "updatedAt": "2025-11-27T09:08:52.306Z" } } }, "26fd7d38f92eb5055170efb295d4a4f87a521a38805a47e252302040001b2050": { "6311029c9bad9285962dc8c797429aff225c5d236c038434dbd0c88cfb8a7048": { "jp": { - "updatedAt": "2025-11-26T07:24:12.176Z" + "updatedAt": "2025-11-27T09:08:52.332Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.178Z" + "updatedAt": "2025-11-27T09:08:52.338Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.176Z" + "updatedAt": "2025-11-27T09:08:52.334Z" } } }, "3f43afba791f6baf15364b9b47e22c85a9f1b3dd6af0e12ec732f9dcec39457f": { "1dd4bcf22efaf403e36fb2a77e769a0046ad25b9ce5480ba0ffe16c707a0ef4e": { "jp": { - "updatedAt": "2025-11-26T07:24:12.180Z" + "updatedAt": "2025-11-27T09:08:52.342Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.178Z" + "updatedAt": "2025-11-27T09:08:52.338Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.178Z" + "updatedAt": "2025-11-27T09:08:52.338Z" } } }, "645f7fd9f0334b6f31287f3ff16746bdf9b9befb1bef269261f6079af9ff22a2": { "4cfca9fae37346c2e6b247de1cc83bb1880d5d141f5ad266dea6ae52b8cce258": { "jp": { - "updatedAt": "2025-11-26T07:24:12.178Z" + "updatedAt": "2025-11-27T09:08:52.337Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.059Z" + "updatedAt": "2025-11-27T09:08:59.759Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.179Z" + "updatedAt": "2025-11-27T09:08:52.340Z" } } }, "870cee0b248ecbcf72715dfd0eeb85ec9af5efaca8d3edcf0fe8c5264910fd76": { "31443088162bd3a031a32984a7f4bfd930cc979d324a47439b26f35ddd40c4c4": { "jp": { - "updatedAt": "2025-11-26T07:24:12.179Z" + "updatedAt": "2025-11-27T09:08:52.341Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.181Z" + "updatedAt": "2025-11-27T09:08:52.343Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.178Z" + "updatedAt": "2025-11-27T09:08:52.339Z" } } }, "87cdbf09a8306f33d341ac3e84a3332c186b170f3eaade4500b0517c76c52c33": { "27bd6d01dce2d6441ee156267183789fdfad03cbf3cae1fe51042763a3ae5190": { "jp": { - "updatedAt": "2025-11-26T07:24:12.178Z" + "updatedAt": "2025-11-27T09:08:52.338Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.177Z" + "updatedAt": "2025-11-27T09:08:52.336Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.173Z" + "updatedAt": "2025-11-27T09:08:52.305Z" } } }, "03d4f9de31c6bf8adc70ca8cc91ea13e8e9e9c9401061a886ff406f2ee77507e": { "31a8fa488c7303d5b196d590f58b9ffddcbbaf82dd7d661a3d06b19f60b7ddc5": { "jp": { - "updatedAt": "2025-11-26T07:24:12.175Z" + "updatedAt": "2025-11-27T09:08:52.331Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.064Z" + "updatedAt": "2025-11-27T09:08:59.774Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.065Z" + "updatedAt": "2025-11-27T09:08:59.776Z" } } }, "185920906ded891a9d2e00cce1434c3336837203f6a4afa9c0afd1752f259e14": { "fb5ace8ecf41cd7a84a0650f9d96ead8a0c11e0b73eb701d4b8a50861ed41f3c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.180Z" + "updatedAt": "2025-11-27T09:08:52.341Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.176Z" + "updatedAt": "2025-11-27T09:08:52.334Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.177Z" + "updatedAt": "2025-11-27T09:08:52.337Z" } } }, "3b5b38cf7b3fbbf741ef360cdeaf09b58c18acb3ff66337f95d902be5f6db59c": { "b37e005c51f403fc9b37bb6c5b5edef44101e2fc840f20186238b36701cc8e6f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.179Z" + "updatedAt": "2025-11-27T09:08:52.341Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.180Z" + "updatedAt": "2025-11-27T09:08:52.343Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.177Z" + "updatedAt": "2025-11-27T09:08:52.336Z" } } }, "3bc42dea80614a09ae6a300caa882b3109109bbf2c1ff3e4a3cad15872847cb5": { "90eb1bd6cd2087520e2d3b6a42056c3549761f9a48d001c400844b96b08b2d5e": { "jp": { - "updatedAt": "2025-11-26T07:24:12.179Z" + "updatedAt": "2025-11-27T09:08:52.341Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.180Z" + "updatedAt": "2025-11-27T09:08:52.341Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.179Z" + "updatedAt": "2025-11-27T09:08:52.340Z" } } }, "4864254e07b5f2ba04547ffdc42c9fa734db92774140cb47efb6c312ff52493e": { "6dadcbfab042a7bcad0c4076a815d1b10666957ab124f50642fb026d185c6859": { "jp": { - "updatedAt": "2025-11-26T07:24:12.175Z" + "updatedAt": "2025-11-27T09:08:52.332Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.177Z" + "updatedAt": "2025-11-27T09:08:52.336Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.180Z" + "updatedAt": "2025-11-27T09:08:52.342Z" } } }, "4b4055e2a3996b0cc1db8bb8b7f1a428a61fcab906f4eb7fc9e8525523570823": { "fe2aceb75f41309c99fba4ee2a1fcbdba1e53d1591a97e9fee22b69867854012": { "jp": { - "updatedAt": "2025-11-26T07:24:19.064Z" + "updatedAt": "2025-11-27T09:08:59.773Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.065Z" + "updatedAt": "2025-11-27T09:08:59.778Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.065Z" + "updatedAt": "2025-11-27T09:08:59.778Z" } } }, "4c57ae2a858123d1bbd05031233c5f830692e6ff38484e60425dc1e644619e86": { "ac07bacf3135df09429ba59c3085014c51cd2dd6322c81c9cf515a50ac42020d": { "jp": { - "updatedAt": "2025-11-26T07:24:19.063Z" + "updatedAt": "2025-11-27T09:08:59.770Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.062Z" + "updatedAt": "2025-11-27T09:08:59.770Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.182Z" + "updatedAt": "2025-11-27T09:08:52.346Z" } } }, "5f4dd4a5e3b9c2038ce5d97add1c57db4cab04802675890f9a71c7e24d65298e": { "54f6ee288acad5771ea6bb244846d3f7f6f97153a3e95cef843610f79d82f51f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.178Z" + "updatedAt": "2025-11-27T09:08:52.337Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.176Z" + "updatedAt": "2025-11-27T09:08:52.334Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.178Z" + "updatedAt": "2025-11-27T09:08:52.339Z" } } }, "8c9ac06d9f96470f385b45eb7382ea57d23824bef86ddd9dcd04eb31af945385": { "8fd53472854410898a96195caacb583e709b2c67f304949a81fcdc9a6ab77a22": { "ru": { - "updatedAt": "2025-11-26T07:24:12.179Z" + "updatedAt": "2025-11-27T09:08:52.341Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.179Z" + "updatedAt": "2025-11-27T09:08:52.340Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.180Z" + "updatedAt": "2025-11-27T09:08:52.343Z" } } }, "96f086ac06293e9e587823d8e326b7bdd10741ec2cca41ecf709e6dfda01a137": { "8cde4367a08c4c85a443e691e36a03de277bcadbc7b5b8042f83da242fb60262": { "jp": { - "updatedAt": "2025-11-26T07:24:12.179Z" + "updatedAt": "2025-11-27T09:08:52.339Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.177Z" + "updatedAt": "2025-11-27T09:08:52.336Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.178Z" + "updatedAt": "2025-11-27T09:08:52.338Z" } } }, "98763ad1765b4f7ce59ab7c28c03d9f16eb7ba20340f1fd72f141425b73dfcda": { "2b4ac034aba018ed0128e4b4b5e46817e96795dc002eb687680ef694d17118a7": { "jp": { - "updatedAt": "2025-11-26T07:24:19.062Z" + "updatedAt": "2025-11-27T09:08:59.769Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.173Z" + "updatedAt": "2025-11-27T09:08:52.305Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.062Z" + "updatedAt": "2025-11-27T09:08:59.770Z" } } }, "a1f67d04d8c6c016319715cd37f1aaa7fea045040cd960873db250061b59677d": { "c042f748c77a461dd754ffe542382a34bd504df511e412aaa671006d2a6ce920": { "jp": { - "updatedAt": "2025-11-26T07:24:19.062Z" + "updatedAt": "2025-11-27T09:08:59.769Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.173Z" + "updatedAt": "2025-11-27T09:08:52.303Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.062Z" + "updatedAt": "2025-11-27T09:08:59.769Z" } } }, "b6e6ba59aea8d42356d10f15f3e251c9ecdf84b70f6b284cc535f8f2715be871": { "78c8f7d218a9c211659cb2bb3308ce5d14d1718fcdc5e47d42d5c5f55050e6f9": { "jp": { - "updatedAt": "2025-11-26T07:24:12.174Z" + "updatedAt": "2025-11-27T09:08:52.306Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.173Z" + "updatedAt": "2025-11-27T09:08:52.304Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.173Z" + "updatedAt": "2025-11-27T09:08:52.304Z" } } }, "b96f31274279db19ee455ef4a211f35232718d535097413acc9e87b2c16cdee5": { "d1a30df1933d77a7366535efca514780aa4f237e66085e619643f85b025ea495": { "jp": { - "updatedAt": "2025-11-26T07:24:12.177Z" + "updatedAt": "2025-11-27T09:08:52.336Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.179Z" + "updatedAt": "2025-11-27T09:08:52.339Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.060Z" + "updatedAt": "2025-11-27T09:08:59.762Z" } } }, "be5bae686c5d8c7787f030404d9391d2b796570ebe3949ebccadac637ae696ad": { "aa76d4c663800697eb6cffaf9162ddacf8d4a6e9e85ae8732672b1aa668497b2": { "jp": { - "updatedAt": "2025-11-26T07:24:12.173Z" + "updatedAt": "2025-11-27T09:08:52.304Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.062Z" + "updatedAt": "2025-11-27T09:08:59.768Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.173Z" + "updatedAt": "2025-11-27T09:08:52.303Z" } } }, "c61d725ce51260e373784d5a559f17b1c985d873f35f4f40d34e5dc3c9d30214": { "164319294d8a4a2d8ae935edd6e5941fde821158fce1cb0fdc3c94aa7eba994f": { "jp": { - "updatedAt": "2025-11-26T07:24:19.062Z" + "updatedAt": "2025-11-27T09:08:59.769Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.059Z" + "updatedAt": "2025-11-27T09:08:59.759Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.062Z" + "updatedAt": "2025-11-27T09:08:59.768Z" } } }, "c9a3c995b2d1f1da16df65c84fc5fcd7d61a80112b46a37925da4d4c5cdfec2c": { "fe45037d34e9b052151f9190e1da1d3bf5cd89744c552cf345b160f37129f8f8": { "jp": { - "updatedAt": "2025-11-26T07:24:12.181Z" + "updatedAt": "2025-11-27T09:08:52.343Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.180Z" + "updatedAt": "2025-11-27T09:08:52.342Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.181Z" + "updatedAt": "2025-11-27T09:08:52.343Z" } } }, "e87d7bb771e6e969df1f4f17a2cea74b1703104f920ba5110ee4c2bc95819b7f": { "c626b9222d67c0a16c11e25def509ff96d4a34afadbccdcc1676284d3fb3c55c": { "jp": { - "updatedAt": "2025-11-26T07:24:19.059Z" + "updatedAt": "2025-11-27T09:08:59.760Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.062Z" + "updatedAt": "2025-11-27T09:08:59.768Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.062Z" + "updatedAt": "2025-11-27T09:08:59.768Z" } } }, "f366eb4cbbf4ae87e0ea8145cfd5006bd57589104335fc046ede417d016c390d": { "e26bd50b67b6a44512d1f83c42aa88dd3b0ee7eea44771e913a93704b405e585": { "jp": { - "updatedAt": "2025-11-26T07:24:19.061Z" + "updatedAt": "2025-11-27T09:08:59.767Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.062Z" + "updatedAt": "2025-11-27T09:08:59.768Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.062Z" + "updatedAt": "2025-11-27T09:08:59.767Z" } } }, "0dec45ecddb0d4b9ff3311f5a670eaeb053be15ec02969e2e3cc776a6771ff5c": { "77a1b67ca7c88505859a9611495e54062c95a3d5051d05c9862ba6120252576d": { "jp": { - "updatedAt": "2025-11-26T07:24:19.068Z" + "updatedAt": "2025-11-27T09:08:59.789Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.070Z" + "updatedAt": "2025-11-27T09:08:59.793Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.068Z" + "updatedAt": "2025-11-27T09:08:59.786Z" } } }, "1345e1194d63be447e8235ac3810d70f7853efd69e98e071d82ffea7cffd7a32": { "40371c6acad0719623ab143c6991d629d5eeef18fd54755245385719989fae91": { "jp": { - "updatedAt": "2025-11-26T07:24:19.064Z" + "updatedAt": "2025-11-27T09:08:59.774Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.063Z" + "updatedAt": "2025-11-27T09:08:59.771Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.063Z" + "updatedAt": "2025-11-27T09:08:59.772Z" } } }, "1784873802e351d4cbfd164226e7d919a480bb1d6312139fa09de23c15d16a8b": { "8742e923d01dd09dc7d8778dca915632a84b942a268948d3212bfca23e4e87e2": { "jp": { - "updatedAt": "2025-11-26T07:24:19.063Z" + "updatedAt": "2025-11-27T09:08:59.771Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.064Z" + "updatedAt": "2025-11-27T09:08:59.774Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.063Z" + "updatedAt": "2025-11-27T09:08:59.772Z" } } }, "1976a270e928ec95aa014d1eb571385ad93c7acfac83fd172543fcf63d413493": { "28f4800b7936b39a171e2fb6c8317b4c9829a963ca30e0d8f2cb33e3e1dba27f": { "jp": { - "updatedAt": "2025-11-26T07:24:19.069Z" + "updatedAt": "2025-11-27T09:08:59.791Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.068Z" + "updatedAt": "2025-11-27T09:08:59.786Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.181Z" + "updatedAt": "2025-11-27T09:08:52.344Z" } } }, "19d053d8db1755b3bac1323b8dc5bdf881a37b3de8c55e8397cfd48c70b492c7": { "a35e75c19a0f228c55c8e74114787fa88e13457d020f241643da1e080c35d9ae": { "jp": { - "updatedAt": "2025-11-26T07:24:19.066Z" + "updatedAt": "2025-11-27T09:08:59.779Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.063Z" + "updatedAt": "2025-11-27T09:08:59.770Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.181Z" + "updatedAt": "2025-11-27T09:08:52.344Z" } } }, "1de644041acf945417d447dae1559f7cba704ddb7f42f4989d75f53b3432bcc7": { "0d354a4bc3cf5327de48753ad84ff21b24119bc6b87f048f6f36a86e9a56461f": { "jp": { - "updatedAt": "2025-11-26T07:24:19.063Z" + "updatedAt": "2025-11-27T09:08:59.773Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.063Z" + "updatedAt": "2025-11-27T09:08:59.772Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.063Z" + "updatedAt": "2025-11-27T09:08:59.771Z" } } }, "21df29d894f5394f8a93a1ff43ddfcea466286f726a703a29d7f5ad5f777ca4f": { "f9004a0faa2530c5a49f802aa2e8e063889d07b4b5779757539ed40941914621": { "jp": { - "updatedAt": "2025-11-26T07:24:19.067Z" + "updatedAt": "2025-11-27T09:08:59.784Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.067Z" + "updatedAt": "2025-11-27T09:08:59.785Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.067Z" + "updatedAt": "2025-11-27T09:08:59.785Z" } } }, "22ff9a2316c586c12132ac52204a80c3282c99ea70504b739a00fc4e769b9090": { "9b6474c5f66a5e775df7e704ab5583bc77d7b503d80449e41bcb0fdca582d72f": { "jp": { - "updatedAt": "2025-11-26T07:24:19.066Z" + "updatedAt": "2025-11-27T09:08:59.781Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.181Z" + "updatedAt": "2025-11-27T09:08:52.345Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.066Z" + "updatedAt": "2025-11-27T09:08:59.781Z" } } }, "642f1cdcfe6481dcca55bd2f485397c27b2cb519506bae85d0903d1022a9a534": { "d58e38a4b38f0454d5c08c7d2887270f277c732f8c21e5a62fa24568ae4fc2a9": { "jp": { - "updatedAt": "2025-11-26T07:24:19.065Z" + "updatedAt": "2025-11-27T09:08:59.776Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.181Z" + "updatedAt": "2025-11-27T09:08:52.343Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.065Z" + "updatedAt": "2025-11-27T09:08:59.777Z" } } }, "76e148edd42e2339581c7f24e0a25ab51ee37d3723b355157641afd3cf2a92ac": { "96f0f82692a94d11ec4bd22df9bf9c367d91f54e7f111247f17715678d4f8a7c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.179Z" + "updatedAt": "2025-11-27T09:08:52.340Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.177Z" + "updatedAt": "2025-11-27T09:08:52.336Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.177Z" + "updatedAt": "2025-11-27T09:08:52.337Z" } } }, "877ff646acb9d8b60cc0a8c397ec6865271899314d2f8d8c3bc6835ea0a51d87": { "cf8035df5e02498f9892ec6d01d716e4e210be81d6a338a2a670b395f2d05b5f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.178Z" + "updatedAt": "2025-11-27T09:08:52.338Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.177Z" + "updatedAt": "2025-11-27T09:08:52.335Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.177Z" + "updatedAt": "2025-11-27T09:08:52.335Z" } } }, "ba2b228d4949b83493253e6cce36fa61e4aab29868007f5c4dea719bd97fe4e3": { "bb371d742e1c3d8bcdd77214bf030643a0331f8f48e7727cbd847a8a32b85ac5": { "jp": { - "updatedAt": "2025-11-26T07:24:12.179Z" + "updatedAt": "2025-11-27T09:08:52.340Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.176Z" + "updatedAt": "2025-11-27T09:08:52.333Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.176Z" + "updatedAt": "2025-11-27T09:08:52.332Z" } } }, "c88c05312ecb48fece611ecb971d8437aee67aab577a01d65950c88e236c100a": { "d28f12f9ff28bee751ec769892ca255d368223c72a14abe462c9cf6ad965a8cc": { "jp": { - "updatedAt": "2025-11-26T07:24:19.064Z" + "updatedAt": "2025-11-27T09:08:59.775Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.066Z" + "updatedAt": "2025-11-27T09:08:59.779Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.065Z" + "updatedAt": "2025-11-27T09:08:59.778Z" } } }, "d517690990eb5a5034e28f3526bde41c42990306742079c31f30f4ed4524ed91": { "9c79376ce670521bff71e976361e6729afb8128c48c2bd62e07e55c58efa6cbc": { "jp": { - "updatedAt": "2025-11-26T07:24:12.176Z" + "updatedAt": "2025-11-27T09:08:52.333Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.179Z" + "updatedAt": "2025-11-27T09:08:52.339Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.176Z" + "updatedAt": "2025-11-27T09:08:52.332Z" } } }, "e226489ddbcee1a5f588fea5844e21dcac309588b3ec1f6bbc9f7bfd26b0953b": { "5792c89f06fcaed31fc80316244e3ff2495629cc4d68214bf2ad0fc8b2cafcae": { "jp": { - "updatedAt": "2025-11-26T07:24:12.176Z" + "updatedAt": "2025-11-27T09:08:52.333Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.176Z" + "updatedAt": "2025-11-27T09:08:52.333Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.177Z" + "updatedAt": "2025-11-27T09:08:52.335Z" } } }, "e3904a052cbf5a3387388c389ae010ddc49649dbbbff19900f769f6e6cbfa1ee": { "e3e518cc255f67640d601fecd3cfb11ea7e915ddf282acc6eabba8311aae5b22": { "jp": { - "updatedAt": "2025-11-26T07:24:12.182Z" + "updatedAt": "2025-11-27T09:08:52.345Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.182Z" + "updatedAt": "2025-11-27T09:08:52.345Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.182Z" + "updatedAt": "2025-11-27T09:08:52.346Z" } } }, "e6ad4f2ee58b9c424f0cc4e12e443aa3bb9dfb641432accc87e403a8b0597b0b": { "d64cf4716347332440eb8c9bd7192e0eae84a3f3eb49ad6ba4155f87567e3861": { "jp": { - "updatedAt": "2025-11-26T07:24:12.182Z" + "updatedAt": "2025-11-27T09:08:52.346Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.180Z" + "updatedAt": "2025-11-27T09:08:52.342Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.180Z" + "updatedAt": "2025-11-27T09:08:52.342Z" } } }, "e8d810b58d2fc954739ecb8eae76ec7772a7459c01a08dd48ba208a5ab4b2b58": { "0d3df994d73dcce5dc7c4ae8f510488dca241f13863b2cb49c97f6056079afb1": { "jp": { - "updatedAt": "2025-11-26T07:24:12.177Z" + "updatedAt": "2025-11-27T09:08:52.335Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.176Z" + "updatedAt": "2025-11-27T09:08:52.334Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.178Z" + "updatedAt": "2025-11-27T09:08:52.337Z" } } }, "ee906a548fde378c55bde17a104978853c964efcc0ac2037f2cc5f90ff301836": { "f49e9e3f91b64b3519c5cc4cdc59ffcf9a84b52eba96cc9a68e95e42dec254a2": { "jp": { - "updatedAt": "2025-11-26T07:24:12.182Z" + "updatedAt": "2025-11-27T09:08:52.345Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.182Z" + "updatedAt": "2025-11-27T09:08:52.345Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.182Z" + "updatedAt": "2025-11-27T09:08:52.345Z" } } }, "f17585a5d8e2bdd6a2ebea5f856955881ef4c473fd73048cf4f26e56bdcb5db2": { "9e7753f5e285750271319abb9baa46c784486772a2b4da88514c28c5141c5c81": { "jp": { - "updatedAt": "2025-11-26T07:24:19.066Z" + "updatedAt": "2025-11-27T09:08:59.782Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.175Z" + "updatedAt": "2025-11-27T09:08:52.332Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.067Z" + "updatedAt": "2025-11-27T09:08:59.782Z" } } }, "fdfddb9175ea6844a8f625eb6ff292798d8dda51dbc62ca44009000f3177a4c8": { "a1fbebb2555661587982370786b093295909d4be9fcca7e32ae5eff02acae18d": { "jp": { - "updatedAt": "2025-11-26T07:24:12.177Z" + "updatedAt": "2025-11-27T09:08:52.335Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.176Z" + "updatedAt": "2025-11-27T09:08:52.334Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.060Z" + "updatedAt": "2025-11-27T09:08:59.762Z" } } }, "04fc2fc59d087b4841db1401316e4d1c9ac88f144242faabf25ec2e969a5215b": { "414e7c4dfb6cd3da8443de0d53c94c82fe3258fa5fdaf93915afe2a8ec3736d4": { "jp": { - "updatedAt": "2025-11-26T07:24:12.183Z" + "updatedAt": "2025-11-27T09:08:59.798Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.183Z" + "updatedAt": "2025-11-27T09:08:59.798Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.068Z" + "updatedAt": "2025-11-27T09:08:59.787Z" } } }, "2fe2ff96c504c59daad55285eb365e9e69fcc5eddd301d8a0409670d1de5a9ac": { "79af085e05f9fd1374cba79aa1eea65a5fa7bcadf0fcbabfc3df348faf04e6e8": { "jp": { - "updatedAt": "2025-11-26T07:24:19.069Z" + "updatedAt": "2025-11-27T09:08:59.790Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.182Z" + "updatedAt": "2025-11-27T09:08:59.798Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.069Z" + "updatedAt": "2025-11-27T09:08:59.792Z" } } }, "32c8d946bfccbad7f54bc00de27ceee1cc1719758ec7a678b9763d7236502014": { "6c958d1bfa513f4a8e0811e9c383ecdf775c2aa645e088ea7d02462f9209a69c": { "jp": { - "updatedAt": "2025-11-26T07:24:19.069Z" + "updatedAt": "2025-11-27T09:08:59.790Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.068Z" + "updatedAt": "2025-11-27T09:08:59.787Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.068Z" + "updatedAt": "2025-11-27T09:08:59.787Z" } } }, "341eea9182cfeebd2c27c019d06a39d1fcf951c990bcd80fa61f11ffc6f9e196": { "aba92e4ddf93c8ac27c276aa33d276f9987cda30270a7b50881edac3ee8d0b71": { "jp": { - "updatedAt": "2025-11-26T07:24:19.070Z" + "updatedAt": "2025-11-27T09:08:59.793Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.067Z" + "updatedAt": "2025-11-27T09:08:59.784Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.181Z" + "updatedAt": "2025-11-27T09:08:52.344Z" } } }, "3fe31c561edbb5416b22ecceae952bb5b07567cc07d75cd64ad4a2caca7689f8": { "af620cd5ed38d2654712e19961c6712bdc7c780d345e73f17ae49396a20d6df0": { "jp": { - "updatedAt": "2025-11-26T07:24:19.065Z" + "updatedAt": "2025-11-27T09:08:59.776Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.065Z" + "updatedAt": "2025-11-27T09:08:59.775Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.064Z" + "updatedAt": "2025-11-27T09:08:59.775Z" } } }, "4afdda2989ef4d77a80eb6666ee0e5fd90ac3afbba1e33f8e39a07be3bbd203f": { "6d99a0d2cef83d17f6510958c4402246edefbb9b9d564c2e37e017791950e3bd": { "jp": { - "updatedAt": "2025-11-26T07:24:19.069Z" + "updatedAt": "2025-11-27T09:08:59.789Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.070Z" + "updatedAt": "2025-11-27T09:08:59.794Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.069Z" + "updatedAt": "2025-11-27T09:08:59.791Z" } } }, "4ecdaa59771417d8a6341e9feb60dbd9c4d4fbb10361d6cf230a66334329d458": { "32e97893f5bdae1c411c78d8f927f38c3f5f53f548071542f0aaa587e832cecb": { "jp": { - "updatedAt": "2025-11-26T07:24:12.184Z" + "updatedAt": "2025-11-27T09:08:59.800Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.183Z" + "updatedAt": "2025-11-27T09:08:59.799Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.183Z" + "updatedAt": "2025-11-27T09:08:59.799Z" } } }, "5ed43729b9d1c584d6d2715ce2c8e0e8690a779f998a5295f954f2f562471776": { "1691e237ea64aacab998e397d87c92e5419d9695a9c24f1829f61653d169f1f3": { "jp": { - "updatedAt": "2025-11-26T07:24:12.181Z" + "updatedAt": "2025-11-27T09:08:52.344Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.064Z" + "updatedAt": "2025-11-27T09:08:59.773Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.066Z" + "updatedAt": "2025-11-27T09:08:59.779Z" } } }, "6b19fbc50a3d75e95082802f1b3acf6a3fdda3ff18cd375f0468fb5136f2256d": { "3dcab33a3b2dc5934e1b739f426935f58ec2cc8e37d9a43754b1941d524c7eb7": { "ru": { - "updatedAt": "2025-11-26T07:24:12.189Z" + "updatedAt": "2025-11-27T09:08:59.814Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.187Z" + "updatedAt": "2025-11-27T09:08:59.808Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.189Z" + "updatedAt": "2025-11-27T09:08:59.813Z" } } }, "7043bd98baa35080107f5165fe9bbec5ef39eb9956052fa0c10ef9ac22039a33": { "e6b73b30c4502fd5f9cd04636be35210ae5ea65dc8343c3daaa83eba16905924": { "jp": { - "updatedAt": "2025-11-26T07:24:19.069Z" + "updatedAt": "2025-11-27T09:08:59.790Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.070Z" + "updatedAt": "2025-11-27T09:08:59.792Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.068Z" + "updatedAt": "2025-11-27T09:08:59.789Z" } } }, "73cc61c275b13e314a195a2bcdc4cbfb3fba91139f9fd1bffb19f48a659d4e6a": { "190e7c7b34bba92cb96c18d30898280711152aa225a02af84331070d834800de": { "jp": { - "updatedAt": "2025-11-26T07:24:19.071Z" + "updatedAt": "2025-11-27T09:08:59.795Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.068Z" + "updatedAt": "2025-11-27T09:08:59.788Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.070Z" + "updatedAt": "2025-11-27T09:08:59.792Z" } } }, "7478bdb164a78a0066fd05a6a86be0fa7a2ddd64b6f73b9baf2265c59d70f4c4": { "e97df2367ee337a5ad2b8ce514b44485caf7b24462a66eac4a3d178503301830": { "jp": { - "updatedAt": "2025-11-26T07:24:19.066Z" + "updatedAt": "2025-11-27T09:08:59.779Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.064Z" + "updatedAt": "2025-11-27T09:08:59.773Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.065Z" + "updatedAt": "2025-11-27T09:08:59.777Z" } } }, "789c0931dffcacd3c5e4bd954c1cc49f734d35378bd8d9f099bac0b7d7de0017": { "58519a4d43db394ea6d5c15ae1e4f7bfc823bcba6a23e04e1f1b0fc5aea36241": { "jp": { - "updatedAt": "2025-11-26T07:24:12.184Z" + "updatedAt": "2025-11-27T09:08:59.800Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.183Z" + "updatedAt": "2025-11-27T09:08:59.800Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.183Z" + "updatedAt": "2025-11-27T09:08:59.799Z" } } }, "85409384bc3d4ff1f1449d76a33ced011be9773bdbf0758e6975a6dbd1ee1dae": { "1fee80d8af00c415d442c78b9ad825b9a0656bc47f1eb00d9ac9cec8430f1454": { "jp": { - "updatedAt": "2025-11-26T07:24:19.064Z" + "updatedAt": "2025-11-27T09:08:59.774Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.065Z" + "updatedAt": "2025-11-27T09:08:59.777Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.065Z" + "updatedAt": "2025-11-27T09:08:59.776Z" } } }, "940bcfdd1a4ad18a6a6ccd9181dfd460e21675b41985028b535c556f22904357": { "8379073d04e59c3c4b33a28508240fa2ad889504e267a63230a17f0b31b60377": { "jp": { - "updatedAt": "2025-11-26T07:24:19.071Z" + "updatedAt": "2025-11-27T09:08:59.796Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.183Z" + "updatedAt": "2025-11-27T09:08:59.798Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.183Z" + "updatedAt": "2025-11-27T09:08:59.799Z" } } }, "ad44e0a653a277028da523b8bb2ede38b5fb8ae3edb129aec78609264961e45b": { "c58dfcddfe9b317538f8fc75e87174efab26fa62ab436b5d3a1921bdcdb71dcc": { "jp": { - "updatedAt": "2025-11-26T07:24:12.181Z" + "updatedAt": "2025-11-27T09:08:52.344Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.064Z" + "updatedAt": "2025-11-27T09:08:59.773Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.064Z" + "updatedAt": "2025-11-27T09:08:59.775Z" } } }, "b0371f0c5ed81dd8c1a94c3d4fbb5068eda546a915ea97e900025b7967fdc506": { "1adc889763f86e0775ccdc2cb7db8ac95b53182b5f48d36f86a8daf7373c5e8a": { "jp": { - "updatedAt": "2025-11-26T07:24:12.175Z" + "updatedAt": "2025-11-27T09:08:52.331Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.065Z" + "updatedAt": "2025-11-27T09:08:59.777Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.063Z" + "updatedAt": "2025-11-27T09:08:59.772Z" } } }, "c720ce0e77810fdc639cfe83c2df1fe9c3d97ef4dd59cba6540e1d9e354f6866": { "3f956529d37242046b0834f1c686e59dd0dda8c1b7de96710b47b1ab8e5544f6": { "jp": { - "updatedAt": "2025-11-26T07:24:19.069Z" + "updatedAt": "2025-11-27T09:08:59.791Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.181Z" + "updatedAt": "2025-11-27T09:08:52.344Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.067Z" + "updatedAt": "2025-11-27T09:08:59.784Z" } } }, "dfd805b622edd8955d58dd44846aeefbda562b1c575f0740533a458f2478f495": { "c61769f8b34a280fa8e6d8215850f12fe517dd969c26c4527ce9543b9b4052d6": { "jp": { - "updatedAt": "2025-11-26T07:24:19.063Z" + "updatedAt": "2025-11-27T09:08:59.771Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.064Z" + "updatedAt": "2025-11-27T09:08:59.774Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.063Z" + "updatedAt": "2025-11-27T09:08:59.771Z" } } }, "f7fa9ae5c1d4a87ba39f7e52c396a41963265a407116a9be68d7fbee6e43fa14": { "bfc41c969cf12203663097a7aab28d304963f4e8f2c4310d76f5d5efac423d0a": { "jp": { - "updatedAt": "2025-11-26T07:24:19.066Z" + "updatedAt": "2025-11-27T09:08:59.780Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.066Z" + "updatedAt": "2025-11-27T09:08:59.781Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.066Z" + "updatedAt": "2025-11-27T09:08:59.780Z" } } }, "03b5ecbbf39334e6da0c384a22e5e44c1c2d4e7293956c81e85ebc5a1f9684da": { "a8ec8b1cfed8dd821d7646fedd89af692c1d5c39ff7e6c8263486a44277b6811": { "jp": { - "updatedAt": "2025-11-26T07:24:12.187Z" + "updatedAt": "2025-11-27T09:08:59.807Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.187Z" + "updatedAt": "2025-11-27T09:08:59.810Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.189Z" + "updatedAt": "2025-11-27T09:08:59.814Z" } } }, "0b126951a3c780c939a55fe4567f097c8702408c235f214c5763699ad6daaca4": { "5b529866221693a79922a1408a19f5b678c1f0fe4b7ca31e7401ad0a4ce64dfa": { "jp": { - "updatedAt": "2025-11-26T07:24:12.192Z" + "updatedAt": "2025-11-27T09:08:59.820Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.195Z" + "updatedAt": "2025-11-27T09:08:59.837Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.194Z" + "updatedAt": "2025-11-27T09:08:59.835Z" } } }, "0eafecab32cbe234424b7ea9a0db39d81bfbd85c2d891597fa1309dac8735c8a": { "94efd6e0e379a3b02b71963dbf0699cd5c5ab603e5cbabbb278630c8bc3eed6e": { "jp": { - "updatedAt": "2025-11-26T07:24:12.189Z" + "updatedAt": "2025-11-27T09:08:59.814Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.189Z" + "updatedAt": "2025-11-27T09:08:59.815Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.189Z" + "updatedAt": "2025-11-27T09:08:59.814Z" } } }, "10b35cb4c8e8659f2a4d059f4c8d06db7327005929bcd5601139e04cdddb5d7d": { "30d510ce8a27f91f4491b1ee9fd145d493a59bd27768a22c8e8a244401482566": { "jp": { - "updatedAt": "2025-11-26T07:24:12.186Z" + "updatedAt": "2025-11-27T09:08:59.806Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.187Z" + "updatedAt": "2025-11-27T09:08:59.808Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.187Z" + "updatedAt": "2025-11-27T09:08:59.809Z" } } }, "22a6c0463fdb5f5bd56c1f342f979b7e0fbc638e39a22abae139379b580611b6": { "c126bede64139b7c6ab143d42c036651e266197fad3b70012de0b058cfc8a7b4": { "jp": { - "updatedAt": "2025-11-26T07:24:12.194Z" + "updatedAt": "2025-11-27T09:08:59.834Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.192Z" + "updatedAt": "2025-11-27T09:08:59.821Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.193Z" + "updatedAt": "2025-11-27T09:08:59.833Z" } } }, "2f0ce2fe6b5d1318ca2c2c11f3ca3100561f2c3b056eac0c92885f76ad381df8": { "22f366f08d6beb4fd69cd03348a69d6ad0fa2634f22a96d663380fcc3e61900c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.186Z" + "updatedAt": "2025-11-27T09:08:59.805Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.187Z" + "updatedAt": "2025-11-27T09:08:59.809Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.188Z" + "updatedAt": "2025-11-27T09:08:59.810Z" } } }, "34bd47b9631a90da1872337df6289e0170c67b0cdd5f5773b7367e05d2dcfe48": { "7bea2cf57bd47e48dbaa0fb6eb99c5614d61a80b75f4b14d7d22036a5315b2a2": { "jp": { - "updatedAt": "2025-11-26T07:24:12.194Z" + "updatedAt": "2025-11-27T09:08:59.837Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.188Z" + "updatedAt": "2025-11-27T09:08:59.812Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.186Z" + "updatedAt": "2025-11-27T09:08:59.806Z" } } }, "3fae7c4513dfdc82bcd5d84b957baba453f6cf9cb2c3086a653e40e66ecab9e5": { "ebb4c00f401d9fc73b63d71739322aba770f129d6784c881ec5e9cd702ebc982": { "jp": { - "updatedAt": "2025-11-26T07:24:12.188Z" + "updatedAt": "2025-11-27T09:08:59.812Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.186Z" + "updatedAt": "2025-11-27T09:08:59.804Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.189Z" + "updatedAt": "2025-11-27T09:08:59.813Z" } } }, "8681a5dfe4cb1dc88d34f905cd6f0b880732c556d84f4c6c1a78c2a42a1e2e94": { "937c3315f8641ae220b02e6527a850efc428a4de748f9fc10c3b23118f915818": { "jp": { - "updatedAt": "2025-11-26T07:24:12.187Z" + "updatedAt": "2025-11-27T09:08:59.807Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.187Z" + "updatedAt": "2025-11-27T09:08:59.809Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.187Z" + "updatedAt": "2025-11-27T09:08:59.808Z" } } }, "9679382c066536c0e977c5bada387315bb3174921875fc2375dab0f8ecb14a9b": { "775c06f4143e15814d67624ccd103ecbff901762e4be69292f9800d11986493a": { "jp": { - "updatedAt": "2025-11-26T07:24:12.188Z" + "updatedAt": "2025-11-27T09:08:59.811Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.186Z" + "updatedAt": "2025-11-27T09:08:59.806Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.067Z" + "updatedAt": "2025-11-27T09:08:59.783Z" } } }, "9f914435087a98e271276ebb87f255c29380082ebf766e89899a246c457e4677": { "71530532e2635eadb067e7bfc1e67c37d37113e6474b6d00295249b91f5e556d": { "jp": { - "updatedAt": "2025-11-26T07:24:19.070Z" + "updatedAt": "2025-11-27T09:08:59.793Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.070Z" + "updatedAt": "2025-11-27T09:08:59.792Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.070Z" + "updatedAt": "2025-11-27T09:08:59.794Z" } } }, "b5043154caba774e4d5afd58609e8705791d168d7b610c441a9f5eb0c01aebe8": { "8640bb0e91d0ce2469cf06735ac41d782b10893d26d5a5e4bdd88f4ddcf19c10": { "jp": { - "updatedAt": "2025-11-26T07:24:19.071Z" + "updatedAt": "2025-11-27T09:08:59.795Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.071Z" + "updatedAt": "2025-11-27T09:08:59.797Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.071Z" + "updatedAt": "2025-11-27T09:08:59.796Z" } } }, "b6b46b2ddce58f83297d4fd3e22a20c0689c8846b02b00d6c901ad29353143df": { "6526c7597b3e43dfe18fbc51f8dfea10476408a65acfc8c77d19c20114264de2": { "jp": { - "updatedAt": "2025-11-26T07:24:19.068Z" + "updatedAt": "2025-11-27T09:08:59.788Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.070Z" + "updatedAt": "2025-11-27T09:08:59.794Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.069Z" + "updatedAt": "2025-11-27T09:08:59.790Z" } } }, "b760d26fdf8b09ae16032e0dbdd66a6e812e5b85cfc1a2dce387a41c031415a5": { "2a83ac2cbaf9b2ed36fecb623007bef63f6aaaf537e37429095c3057b999a156": { "jp": { - "updatedAt": "2025-11-26T07:24:19.071Z" + "updatedAt": "2025-11-27T09:08:59.795Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.068Z" + "updatedAt": "2025-11-27T09:08:59.788Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.067Z" + "updatedAt": "2025-11-27T09:08:59.782Z" } } }, "c94404af6396786f2d99e4b9e86fe62f37fba23be9fb0992cb4462421350617d": { "8e9c8e608b5e9c9eb4f01785fa62ca818e1a1957a5723d6cb412ed71f639a50b": { "jp": { - "updatedAt": "2025-11-26T07:24:19.071Z" + "updatedAt": "2025-11-27T09:08:59.796Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.071Z" + "updatedAt": "2025-11-27T09:08:59.795Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.182Z" + "updatedAt": "2025-11-27T09:08:59.797Z" } } }, "cb7281a29c8577f9362237b726ab73efa4133f66aa1f532e94603029a6608325": { "e7e9ff403010f7419e6fe70d3329c7fb4d95f62d59d52fda8025ee90af8ad89c": { "jp": { - "updatedAt": "2025-11-26T07:24:19.071Z" + "updatedAt": "2025-11-27T09:08:59.797Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.068Z" + "updatedAt": "2025-11-27T09:08:59.786Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.070Z" + "updatedAt": "2025-11-27T09:08:59.793Z" } } }, "cdf00c31e8da5ad17f2b40732cf7e7baf65150deaf7488eac143f7201d1dfb3e": { "3c8db57986756c0b913b89d2204dd19e77508a68267dc6a6d737df290161badc": { "jp": { - "updatedAt": "2025-11-26T07:24:19.070Z" + "updatedAt": "2025-11-27T09:08:59.794Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.069Z" + "updatedAt": "2025-11-27T09:08:59.790Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.069Z" + "updatedAt": "2025-11-27T09:08:59.791Z" } } }, "d28f5c5276140aee0909af043384a73dc6d1e54e307092d06f03528d2b1110ec": { "c4f358e96fb5460080efb17e46f53d378939fef04b5fcad4e3e2c5a580a10128": { "jp": { - "updatedAt": "2025-11-26T07:24:12.188Z" + "updatedAt": "2025-11-27T09:08:59.812Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.188Z" + "updatedAt": "2025-11-27T09:08:59.810Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.187Z" + "updatedAt": "2025-11-27T09:08:59.807Z" } } }, "04a08061427f75ae80f6c5be1bc33f6ed46cb17ac49c325b49ad3ed082b48721": { "8c2b821e3c5410720085eae977687f3169e4a39395d1aed6e45d331e39dc20b7": { "jp": { - "updatedAt": "2025-11-26T07:24:12.196Z" + "updatedAt": "2025-11-27T09:08:59.840Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.197Z" + "updatedAt": "2025-11-27T09:08:59.843Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.199Z" + "updatedAt": "2025-11-27T09:08:59.848Z" } } }, "0f4329370fc5999889692e3e2374c65bf3f4dd5e8903e64957d654e1c712ee1e": { "87fcfd05b5f0e870d641b6800c171abf3d47bc7484fb7612f4151d70caaaee3c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.190Z" + "updatedAt": "2025-11-27T09:08:59.815Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.199Z" + "updatedAt": "2025-11-27T09:08:59.851Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.199Z" + "updatedAt": "2025-11-27T09:08:59.849Z" } } }, "100c02e77cc38427381d9c58741ebe9d9d8964c870d4cbb14624da2f386e6691": { "2d845a508a5f777e5f61b8dae330312410e821c6f517150d000bebfbc18e03df": { "zh": { - "updatedAt": "2025-11-26T07:24:12.199Z" + "updatedAt": "2025-11-27T09:08:59.849Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.198Z" + "updatedAt": "2025-11-27T09:08:59.846Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.195Z" + "updatedAt": "2025-11-27T09:08:59.838Z" } } }, "1680a9db2b149a398008cc3048b13dba799f74c5bfd3549470992ac1fdd41eea": { "2b8b81210547bd248aa80daed1df50ad236049f83eec7fed484a31e64906811f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.193Z" + "updatedAt": "2025-11-27T09:08:59.832Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.184Z" + "updatedAt": "2025-11-27T09:08:59.800Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.192Z" + "updatedAt": "2025-11-27T09:08:59.821Z" } } }, "1b89e2e1ad09ff845cbc6d24f7a759d61540214cea8a5c79bc2e68f266ebcbba": { "9d8c96f15a9c91e38b4c55448e86a206752b8e56970d31964de0de00beac4133": { "jp": { - "updatedAt": "2025-11-26T07:24:12.192Z" + "updatedAt": "2025-11-27T09:08:59.821Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.191Z" + "updatedAt": "2025-11-27T09:08:59.820Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.192Z" + "updatedAt": "2025-11-27T09:08:59.831Z" } } }, "25332a58ba046cb340c206ff61639fed4457a1aad56ffaa7b53917205f1bb761": { "ca54f12c897481de5b60e4f4170eccc7217a2e000c56dcbfd023eac144ae760c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.190Z" + "updatedAt": "2025-11-27T09:08:59.817Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.192Z" + "updatedAt": "2025-11-27T09:08:59.831Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.194Z" + "updatedAt": "2025-11-27T09:08:59.834Z" } } }, "45912b7cfa3611f18ba43d31b4bf270d57e4bcee3fdf2ac5e2ff6ded3b672601": { "25bd45fdbb02d82cf7af7820d3acc7ccf1701c6afe3cfae317a6b4ac9289a67d": { "jp": { - "updatedAt": "2025-11-26T07:24:12.200Z" + "updatedAt": "2025-11-27T09:08:59.851Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.200Z" + "updatedAt": "2025-11-27T09:08:59.851Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.199Z" + "updatedAt": "2025-11-27T09:08:59.850Z" } } }, "5a251aa88d6ebebbfbc12913926476ff0da32b3862d705b6ecb28ea2c559b45f": { "b32b63bf76eb2d854a947bc3926ad7d875cc3ed3eeec677de22a5a760014a32d": { "jp": { - "updatedAt": "2025-11-26T07:24:12.193Z" + "updatedAt": "2025-11-27T09:08:59.832Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.193Z" + "updatedAt": "2025-11-27T09:08:59.833Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.193Z" + "updatedAt": "2025-11-27T09:08:59.834Z" } } }, "696be7be6ffadd8471bfb91d7ba6ec45956dc7e449f3fc81dbaa6fa67d66b3be": { "8aa635a63a82ddcda9a254960f313fdd8f129e472d9fe8d3e6dc10d1b38c37ad": { "jp": { - "updatedAt": "2025-11-26T07:24:12.186Z" + "updatedAt": "2025-11-27T09:08:59.805Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.189Z" + "updatedAt": "2025-11-27T09:08:59.814Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.187Z" + "updatedAt": "2025-11-27T09:08:59.809Z" } } }, "79e7241d6edd82b0dc1989f7d3211668c2f24f997b5fb74c55c6db437b7da25e": { "be2734886fbef14228e09151309f47d77c7dc82d6b8d68b9d3f8b6dedeaa8944": { "jp": { - "updatedAt": "2025-11-26T07:24:12.186Z" + "updatedAt": "2025-11-27T09:08:59.805Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.186Z" + "updatedAt": "2025-11-27T09:08:59.805Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.188Z" + "updatedAt": "2025-11-27T09:08:59.811Z" } } }, "7aca79eee9aaf67fab4127f69bfa7778f63bc7a7f6b384bee18e809c672f7b49": { "55febc4e35972c34cb1792867e0fc3cfea4841faadf9de0e30f4502a613b8363": { "jp": { - "updatedAt": "2025-11-26T07:24:12.195Z" + "updatedAt": "2025-11-27T09:08:59.837Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.194Z" + "updatedAt": "2025-11-27T09:08:59.837Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.191Z" + "updatedAt": "2025-11-27T09:08:59.819Z" } } }, "92f16152dca7a77dde912f0a5b22ce16b22c2dc499873bbedb28221aa56e8739": { "f3fafaf3dde2049ce02a32a17ef225150db00d0562e505ad5431a06ed8974f2b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.191Z" + "updatedAt": "2025-11-27T09:08:59.818Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.186Z" + "updatedAt": "2025-11-27T09:08:59.804Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.194Z" + "updatedAt": "2025-11-27T09:08:59.834Z" } } }, "972010f567fed406e9bc7e9fa61c22b7128c4779998665424ab71c46338d1f3e": { "ae02d48d7b29f026ead3f4af508a4e2b3a97657cb5051628dcbbee9111248f7f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.188Z" + "updatedAt": "2025-11-27T09:08:59.812Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.188Z" + "updatedAt": "2025-11-27T09:08:59.811Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.189Z" + "updatedAt": "2025-11-27T09:08:59.815Z" } } }, "a15ab08919f6acfa97670cff9afca686c2351120dfd9d4f8deb2b45ddb99aa0a": { "d344fdb9b77fe64b9863b88b7aea7e3a8e4c7d7db3d3d7a7d7584b626a3c8054": { "jp": { - "updatedAt": "2025-11-26T07:24:12.192Z" + "updatedAt": "2025-11-27T09:08:59.830Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.193Z" + "updatedAt": "2025-11-27T09:08:59.833Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.191Z" + "updatedAt": "2025-11-27T09:08:59.818Z" } } }, "bb1dea393979951d316dea0be45235c346fe0c28cfe6756a5876f4804290c7e3": { "d3ecf8e3f0da56d9ba8034a953040427b08dc7fa1c165a2173308415b8a6d17e": { "jp": { - "updatedAt": "2025-11-26T07:24:12.192Z" + "updatedAt": "2025-11-27T09:08:59.831Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.192Z" + "updatedAt": "2025-11-27T09:08:59.830Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.190Z" + "updatedAt": "2025-11-27T09:08:59.816Z" } } }, "cdb1f009589e1e0b485965e6b6f62f110d284ec9f225d0eb9717cf9f54e381c0": { "694473bb486e1e21cb8814dc53f5204436b1e5ffbd3f851984bd46f00c011179": { "jp": { - "updatedAt": "2025-11-26T07:24:19.067Z" + "updatedAt": "2025-11-27T09:08:59.783Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.067Z" + "updatedAt": "2025-11-27T09:08:59.783Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.188Z" + "updatedAt": "2025-11-27T09:08:59.811Z" } } }, "d0e32b471a739243b7fb2a6f7963104b64f7e71fb2ced20d4c1b5264def6f2e7": { "f89b1521bd67ab9c13a8691b974632ada07dc20a0b7f3c49de011b92ef181e27": { "jp": { - "updatedAt": "2025-11-26T07:24:12.187Z" + "updatedAt": "2025-11-27T09:08:59.808Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.186Z" + "updatedAt": "2025-11-27T09:08:59.806Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.188Z" + "updatedAt": "2025-11-27T09:08:59.812Z" } } }, "d7c9bac812afb3a149a06c61bd4d64e33efbdacc006619f813e625307caa403f": { "bdd5ad8ff2c6c4cbf81696dcd7cf80196be279d10a61a61d0f45caee15d90df1": { "jp": { - "updatedAt": "2025-11-26T07:24:12.193Z" + "updatedAt": "2025-11-27T09:08:59.831Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.194Z" + "updatedAt": "2025-11-27T09:08:59.836Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.194Z" + "updatedAt": "2025-11-27T09:08:59.835Z" } } }, "dd8bec416e1a990e1a7ef46ce2f7761b51432155f4c149641fdc484fffcbe786": { "e43ff80310727083fa06482849132d96578ddd46a8478a49dd3bf42b62882609": { "jp": { - "updatedAt": "2025-11-26T07:24:12.190Z" + "updatedAt": "2025-11-27T09:08:59.816Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.193Z" + "updatedAt": "2025-11-27T09:08:59.833Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.193Z" + "updatedAt": "2025-11-27T09:08:59.833Z" } } }, "de693811d680fc3f30e32c9bc40614fb35f73f55847f45a16264e614a65d74cd": { "8fa72ae7500048bac519db43150657d9500e969b9167f548ec14e8f2a73052c7": { "jp": { - "updatedAt": "2025-11-26T07:24:12.188Z" + "updatedAt": "2025-11-27T09:08:59.810Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.189Z" + "updatedAt": "2025-11-27T09:08:59.813Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.189Z" + "updatedAt": "2025-11-27T09:08:59.813Z" } } }, "f05e54b97f0cc26e7e6d19993081fe3b3e87410932334968bcda276a9ed28bd3": { "1d9ae46b239c5f237c2f10a2d4e4c6dbc9261c9c864accb4c80b847fe59481d8": { "jp": { - "updatedAt": "2025-11-26T07:24:12.191Z" + "updatedAt": "2025-11-27T09:08:59.818Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.190Z" + "updatedAt": "2025-11-27T09:08:59.816Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.193Z" + "updatedAt": "2025-11-27T09:08:59.832Z" } } }, "fe5b39e56c19c291226f7e3197f67720f7eec98c8343fadf7b1a283589869ee7": { "afa11621c4420fe8e64e6a032e92ea848928d0c35428ff0c7a1b50f7215c04fe": { "jp": { - "updatedAt": "2025-11-26T07:24:12.186Z" + "updatedAt": "2025-11-27T09:08:59.806Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.187Z" + "updatedAt": "2025-11-27T09:08:59.809Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.186Z" + "updatedAt": "2025-11-27T09:08:59.805Z" } } }, "010d68e65065006bb03ec5afd6da3fb00d5d932dc58d86d356a1fb32041700a1": { "097920bd8ae55b0c4c40422f164718639bf789af17784fc7d268a39285332660": { "jp": { - "updatedAt": "2025-11-26T07:24:12.196Z" + "updatedAt": "2025-11-27T09:08:59.842Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.199Z" + "updatedAt": "2025-11-27T09:08:59.849Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.196Z" + "updatedAt": "2025-11-27T09:08:59.842Z" } } }, "194312689f754af1eadafa36fb316871d927e7555a7e9237115b13fdf9c16217": { "efdd19891bd36c4b5ee32e3469c4609b62a971eec1305634c7e49ed5d594e5f0": { "jp": { - "updatedAt": "2025-11-26T07:24:12.198Z" + "updatedAt": "2025-11-27T09:08:59.846Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.197Z" + "updatedAt": "2025-11-27T09:08:59.844Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.199Z" + "updatedAt": "2025-11-27T09:08:59.850Z" } } }, "1d9872faa89c7d85b9aedea5b9a72b7f79022036a883f0d76368ba0aab461711": { "70eda1446c7a201ec8f6c37abb74c39a9535a96ae3e057af6538915558876b9a": { "jp": { - "updatedAt": "2025-11-26T07:24:12.195Z" + "updatedAt": "2025-11-27T09:08:59.839Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.197Z" + "updatedAt": "2025-11-27T09:08:59.844Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.198Z" + "updatedAt": "2025-11-27T09:08:59.846Z" } } }, "20fbec5fbf3b5f7168ad991d57410b2a6e132fb9884af790cd2c4a29f361d02f": { "36ab0d9536cb78b918f577f351ad01da73a11122ce416a9654035e7dd9a193bd": { "jp": { - "updatedAt": "2025-11-26T07:24:12.203Z" + "updatedAt": "2025-11-27T09:08:59.860Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.201Z" + "updatedAt": "2025-11-27T09:08:59.855Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.204Z" + "updatedAt": "2025-11-27T09:08:59.863Z" } } }, "286853d39a677e8828ecbe663218f27fedd5bf2bf0e04f6a0845b378f6e8eb8f": { "b384e9d652969f7c44b75186494dd5743f6f7d29a2d07cdc6516f906170b8ecf": { "jp": { - "updatedAt": "2025-11-26T07:24:12.198Z" + "updatedAt": "2025-11-27T09:08:59.847Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.196Z" + "updatedAt": "2025-11-27T09:08:59.840Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.195Z" + "updatedAt": "2025-11-27T09:08:59.839Z" } } }, "31135bad715065dcea06e31337e3a5dd947f27dc411676ba95164d339409a83d": { "763ca58dfeaadfb6457a37642666f8a6557e78cf6969b41e8b1c31735f7e55f1": { "jp": { - "updatedAt": "2025-11-26T07:24:12.204Z" + "updatedAt": "2025-11-27T09:08:59.862Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.204Z" + "updatedAt": "2025-11-27T09:08:59.863Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.203Z" + "updatedAt": "2025-11-27T09:08:59.860Z" } } }, "3d5ae5ca94ad055105e113940b4e5f4f01c26351d5e0aa85b01fb3569699f7c7": { "db7ea4892aba1694aea64f46778e44e4d3a93c6f1d8d5290b4d72c844116181b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.198Z" + "updatedAt": "2025-11-27T09:08:59.847Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.198Z" + "updatedAt": "2025-11-27T09:08:59.846Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.196Z" + "updatedAt": "2025-11-27T09:08:59.841Z" } } }, "42c6ee1d7586b75ddf294b270cd91e6cbfc04990b03c458263060339691f65f0": { "e28070dd3b8f9c8e1de1f84e6213088ded4997089a0463fdced52aa0d7126bee": { "jp": { - "updatedAt": "2025-11-26T07:24:12.203Z" + "updatedAt": "2025-11-27T09:08:59.859Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.203Z" + "updatedAt": "2025-11-27T09:08:59.860Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.204Z" + "updatedAt": "2025-11-27T09:08:59.862Z" } } }, "957a8d1238fb98455672f68cf73445d00c58150afae706f656904ea7f56bbef7": { "438d8f6bebdf4c4f748f67bb045a037db4fe70bfbe607e05bf05fab5e60702e8": { "jp": { - "updatedAt": "2025-11-26T07:24:12.196Z" + "updatedAt": "2025-11-27T09:08:59.841Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.197Z" + "updatedAt": "2025-11-27T09:08:59.844Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.198Z" + "updatedAt": "2025-11-27T09:08:59.848Z" } } }, "bddea4d6e2b142218cf0aa18075b105f560306487a43f98ae93666cc5b0a2088": { "d82b30f533151c915ffd2fccf00cb93c7247a81a9af41c32c0b6ee0a941f1dc4": { "jp": { - "updatedAt": "2025-11-26T07:24:12.190Z" + "updatedAt": "2025-11-27T09:08:59.816Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.194Z" + "updatedAt": "2025-11-27T09:08:59.836Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.194Z" + "updatedAt": "2025-11-27T09:08:59.835Z" } } }, "bf43a73f5fb45ab9aa1813ec5b3c6567e2f43085622a3981fc47bbafb9f28c10": { "e5f80b1293069b81103b1bd7abde9c4afd1e877bec64781bf8b20adfa5b92acd": { "jp": { - "updatedAt": "2025-11-26T07:24:12.190Z" + "updatedAt": "2025-11-27T09:08:59.817Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.191Z" + "updatedAt": "2025-11-27T09:08:59.819Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.184Z" + "updatedAt": "2025-11-27T09:08:59.801Z" } } }, "c2092e34e0d63b8d13f5c437a2c60457a006bad8bb89baf8c2cc3dceafc6ec29": { "afa4682df8ae8c2d39481ae157b1d008ea8cf2cf75aa79ffcfdf3cacb4d9b0be": { "jp": { - "updatedAt": "2025-11-26T07:24:12.192Z" + "updatedAt": "2025-11-27T09:08:59.821Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.190Z" + "updatedAt": "2025-11-27T09:08:59.817Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.191Z" + "updatedAt": "2025-11-27T09:08:59.819Z" } } }, "cf7f50d7a1e362e6ebac5f8205b53d0c8eb6dd0efeecc010f23b8d8f09ea8f80": { "b7f62ebe9c2d110ae4ae2cca482b48cb6a82bf22cf7a6a11933cd85ee6309d22": { "jp": { - "updatedAt": "2025-11-26T07:24:12.191Z" + "updatedAt": "2025-11-27T09:08:59.818Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.191Z" + "updatedAt": "2025-11-27T09:08:59.819Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.191Z" + "updatedAt": "2025-11-27T09:08:59.820Z" } } }, "d1838a9b36c0c0fbc1be851ae978af65ba7e34ab07c37daf5e5c0c741129fd76": { "14af3666e0c05efc3ffcab87b38768b94b93945123edbdb09cb8537e7a7d07b0": { "jp": { - "updatedAt": "2025-11-26T07:24:12.192Z" + "updatedAt": "2025-11-27T09:08:59.830Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.194Z" + "updatedAt": "2025-11-27T09:08:59.836Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.193Z" + "updatedAt": "2025-11-27T09:08:59.832Z" } } }, "d488e5566dd6bf95742db0d7525010310bd38f5971c4a87992a3ec793feba8bf": { "5ba7a81bc990b2456dc8374342d01a7253db45b5183ee93be9b51553586efb4f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.198Z" + "updatedAt": "2025-11-27T09:08:59.845Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.198Z" + "updatedAt": "2025-11-27T09:08:59.846Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.195Z" + "updatedAt": "2025-11-27T09:08:59.839Z" } } }, "dbd27b188ad3cd04691439c723e924796170d0bfdf59a9e9b53d90caca0178bd": { "80b5c91060724e755120c034531a62ece1e13c4c261ac38e2e448b4e2d0e61c2": { "jp": { - "updatedAt": "2025-11-26T07:24:12.199Z" + "updatedAt": "2025-11-27T09:08:59.851Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.198Z" + "updatedAt": "2025-11-27T09:08:59.847Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.199Z" + "updatedAt": "2025-11-27T09:08:59.850Z" } } }, "df4069454374e8aa9593f9687f16b9e3b26d64e2b0082ac22a7123faaef82740": { "e7ed1c4a6adc17da8ad5806d7ebfbb340ba0839bd13951ceea09267bd14c0a6b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.196Z" + "updatedAt": "2025-11-27T09:08:59.842Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.199Z" + "updatedAt": "2025-11-27T09:08:59.850Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.199Z" + "updatedAt": "2025-11-27T09:08:59.848Z" } } }, "e1f18ff34031035a08fe64318b680c893d2d37fb3ac9d30c908d0671a1180f50": { "85e7c92ceca8e1da3949120488020e40a9d10af04a565222bb41223f27a16de2": { "jp": { - "updatedAt": "2025-11-26T07:24:12.197Z" + "updatedAt": "2025-11-27T09:08:59.845Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.197Z" + "updatedAt": "2025-11-27T09:08:59.843Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.196Z" + "updatedAt": "2025-11-27T09:08:59.842Z" } } }, "e4102128c26bcb3f9ad172af76f46d964de749c24c132d5348f9ee3e3de5951e": { "9f2615fd10d6b26b0f5f878a17f58c2100fb6bca45e41b0b5783df222e6dc6e1": { "jp": { - "updatedAt": "2025-11-26T07:24:12.191Z" + "updatedAt": "2025-11-27T09:08:59.820Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.190Z" + "updatedAt": "2025-11-27T09:08:59.817Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.192Z" + "updatedAt": "2025-11-27T09:08:59.820Z" } } }, "e6493689e0bffb010f12f340386981233dcc9a2f28df11fd9a6e6066d3c5ce8a": { "8de8a8317a3584199eab7b620cccbff20a6c44103452bed63f66cf645cda12ea": { "jp": { - "updatedAt": "2025-11-26T07:24:12.195Z" + "updatedAt": "2025-11-27T09:08:59.837Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.195Z" + "updatedAt": "2025-11-27T09:08:59.838Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.194Z" + "updatedAt": "2025-11-27T09:08:59.835Z" } } }, "f1b73f2ce3c7b6d1ca6f0f28439acb8cc45586fb6f3d1fda35224a8483871689": { "84181ea71df19456b8c88cf67e1c18c054443ce40152a17b3fe3d33911ecc651": { "jp": { - "updatedAt": "2025-11-26T07:24:12.194Z" + "updatedAt": "2025-11-27T09:08:59.834Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.193Z" + "updatedAt": "2025-11-27T09:08:59.831Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.190Z" + "updatedAt": "2025-11-27T09:08:59.817Z" } } }, "0060f21968d741d1a0f39b19ac2622ebb5065bdb709b03e138eef82e28e31244": { "2670f637399d04628da2e0f038d37565f781605423d4d054185eb0cd33613948": { "jp": { - "updatedAt": "2025-11-26T07:24:12.201Z" + "updatedAt": "2025-11-27T09:08:59.854Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.202Z" + "updatedAt": "2025-11-27T09:08:59.859Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.201Z" + "updatedAt": "2025-11-27T09:08:59.856Z" } } }, "1e131dfad9800937839c4d2f0e5ef58daa6a99e44ee4ff5ea4e66de6069c7c37": { "f76c1f685c5d14375dafd9a42aa84e6f31aeb5b84b0d8c24a2915f02c875d4ca": { "jp": { - "updatedAt": "2025-11-26T07:24:12.206Z" + "updatedAt": "2025-11-27T09:08:59.868Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.209Z" + "updatedAt": "2025-11-27T09:08:59.874Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.210Z" + "updatedAt": "2025-11-27T09:08:59.877Z" } } }, "2149ec9c3299895bf0097e125705ba36a1e04efee5f43e59c08371caad0cfd45": { "349711e0368c3473e04141d6855c62a92897b88020143c2fd44659089f128368": { "jp": { - "updatedAt": "2025-11-26T07:24:12.210Z" + "updatedAt": "2025-11-27T09:08:59.878Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.211Z" + "updatedAt": "2025-11-27T09:08:59.879Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.210Z" + "updatedAt": "2025-11-27T09:08:59.879Z" } } }, "2a714f7169c51c1804757b5577385bc512ba198c41b0cd228e98a66dc148abb9": { "47388640fbbd48eba401a20cf2754eced76dbed9147e6841f469e2f4acc14075": { "jp": { - "updatedAt": "2025-11-26T07:24:12.204Z" + "updatedAt": "2025-11-27T09:08:59.863Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.204Z" + "updatedAt": "2025-11-27T09:08:59.862Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.202Z" + "updatedAt": "2025-11-27T09:08:59.858Z" } } }, "3f24f2c556bcea3bd4a8da649d898ac0d1aa590efbf76127ecbd252c8df9b55c": { "87fc99663ddeaf7b1d38d03a534b4d0b7cbb70edc9c3b460d5735be114f9f413": { "jp": { - "updatedAt": "2025-11-26T07:24:12.200Z" + "updatedAt": "2025-11-27T09:08:59.853Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.202Z" + "updatedAt": "2025-11-27T09:08:59.857Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.200Z" + "updatedAt": "2025-11-27T09:08:59.853Z" } } }, "42ee6b1cf2d60dae66ca7799b6e3c96a470d6fdbdff801031e35cb9e1891dfdc": { "ab655d464095f3f0a801879f7e0058f71ddf7741b59f1ac855f58f9f7d807344": { "jp": { - "updatedAt": "2025-11-26T07:24:12.196Z" + "updatedAt": "2025-11-27T09:08:59.840Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.197Z" + "updatedAt": "2025-11-27T09:08:59.843Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.199Z" + "updatedAt": "2025-11-27T09:08:59.848Z" } } }, "46e9f56a57a3931558fcf69333139681d05b4c2f69040e2cfe7a939c976963f3": { "e1fe2166283accd68531dcb58d1682b96cdfd9ca452ab7df14ceb9a7623b7419": { "jp": { - "updatedAt": "2025-11-26T07:24:12.204Z" + "updatedAt": "2025-11-27T09:08:59.862Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.205Z" + "updatedAt": "2025-11-27T09:08:59.864Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.203Z" + "updatedAt": "2025-11-27T09:08:59.859Z" } } }, "46ff568b059cec990fbf679bc4bed642abea08d09f7bafd4747a7036515b95cc": { "714391bd24db523bc05255d05254efcc0766f0f4b43e9f23aaaa7548eef953df": { "jp": { - "updatedAt": "2025-11-26T07:24:12.199Z" + "updatedAt": "2025-11-27T09:08:59.849Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.197Z" + "updatedAt": "2025-11-27T09:08:59.845Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.197Z" + "updatedAt": "2025-11-27T09:08:59.844Z" } } }, "4fbdb5b1520dff0a17e0429f575aa6011097f81752684475262c7ae6aa200bed": { "1ecda987c93d49e1fca1c7c93d39044137cd955db9a36fbd10169f0b85cbdbe1": { "jp": { - "updatedAt": "2025-11-26T07:24:12.202Z" + "updatedAt": "2025-11-27T09:08:59.858Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.203Z" + "updatedAt": "2025-11-27T09:08:59.861Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.200Z" + "updatedAt": "2025-11-27T09:08:59.839Z" } } }, "5083281bd3b547bf9df36adfb2bfba73c9e0cc795d0090fcfa111ce30996f661": { "b09f8b5ff58806fe3abfa9da3b343ccfd7b8e980a6c46bd43dc32927ebac6ce0": { "jp": { - "updatedAt": "2025-11-26T07:24:12.201Z" + "updatedAt": "2025-11-27T09:08:59.856Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.201Z" + "updatedAt": "2025-11-27T09:08:59.855Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.205Z" + "updatedAt": "2025-11-27T09:08:59.864Z" } } }, "5b010922cc17b528fce9cb609955f868e53ad71f5f8622066d24f7b3953f893a": { "83759792792ece10deacdd4a65c5c3b089a7e420df7df362574464fe94fb9408": { "jp": { - "updatedAt": "2025-11-26T07:24:12.207Z" + "updatedAt": "2025-11-27T09:08:59.869Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.207Z" + "updatedAt": "2025-11-27T09:08:59.870Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.209Z" + "updatedAt": "2025-11-27T09:08:59.877Z" } } }, "5c4315a7496585196dea68631d46489e99dab1c8daac61b452a0c580a509d21d": { "4c3fab4892c9a5c579a3017bb4cbe36c271aad9734d4760fecd5bc4ac75d16d6": { "jp": { - "updatedAt": "2025-11-26T07:24:12.202Z" + "updatedAt": "2025-11-27T09:08:59.857Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.201Z" + "updatedAt": "2025-11-27T09:08:59.856Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.202Z" + "updatedAt": "2025-11-27T09:08:59.858Z" } } }, "857a5c3ed29e79d55112d1802865f308f93fcc1035cbad65451f1392ced56b55": { "daf1366f4d86b97aac48da95d72257524192b5104b5dcfd34230427de3762a51": { "jp": { - "updatedAt": "2025-11-26T07:24:12.203Z" + "updatedAt": "2025-11-27T09:08:59.861Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.202Z" + "updatedAt": "2025-11-27T09:08:59.857Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.202Z" + "updatedAt": "2025-11-27T09:08:59.859Z" } } }, "8677ca6f754c9510b46dc0569151e8695270e1ddc3a7791067d3b1b9e5ed0ce4": { "daef99c2eee6c12072def84a2de12f54a7398d20df2b000023b0e91f2100e934": { "ru": { - "updatedAt": "2025-11-26T07:24:12.203Z" + "updatedAt": "2025-11-27T09:08:59.859Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.201Z" + "updatedAt": "2025-11-27T09:08:59.856Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.195Z" + "updatedAt": "2025-11-27T09:08:59.838Z" } } }, "9056916609446b5b12baca0332da8e5e8ad117eb3017488e4c5391bf09af1c65": { "5c1ac19a6dd8304196f8b5c3c4538997259c7d50017642a246b97a60197a70c3": { "jp": { - "updatedAt": "2025-11-26T07:24:12.197Z" + "updatedAt": "2025-11-27T09:08:59.843Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.198Z" + "updatedAt": "2025-11-27T09:08:59.848Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.198Z" + "updatedAt": "2025-11-27T09:08:59.847Z" } } }, "93878162d293d38a3f960218a0ee8b1904f199878f15fb0a11f80cc5c6b78ae4": { "38c7da17603cc8d822478a774e4a0851139aaaf988b5e6ac6aebd7c75546c08b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.196Z" + "updatedAt": "2025-11-27T09:08:59.841Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.190Z" + "updatedAt": "2025-11-27T09:08:59.815Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.197Z" + "updatedAt": "2025-11-27T09:08:59.845Z" } } }, "9dd17b4dded970a85df00496de13a74873211a7c3eabb2bfaf1670710eaff639": { "3c77cf690b82a05ac07374c03da339b16bb18f1f69cfa9c51ba296c56cc2f48f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.201Z" + "updatedAt": "2025-11-27T09:08:59.855Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.204Z" + "updatedAt": "2025-11-27T09:08:59.864Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.200Z" + "updatedAt": "2025-11-27T09:08:59.853Z" } } }, "c9c4898b83cd686a39de5d1507a5f2308fdf824b67d0f19322fe25b8230ae68e": { "81003853e9247deae604d51fc5acc18e581a4e0c4f0d79dae6b9207ceefe7142": { "jp": { - "updatedAt": "2025-11-26T07:24:12.205Z" + "updatedAt": "2025-11-27T09:08:59.864Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.205Z" + "updatedAt": "2025-11-27T09:08:59.864Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.204Z" + "updatedAt": "2025-11-27T09:08:59.862Z" } } }, "dc429afc1c845ad436d31b61fb908e473d3a84f5a8919f5d78c6cc647e6e44b7": { "f94a5951c5c6355f3214aef3392f0e31f245f1c2a14bce98a45d190388085326": { "jp": { - "updatedAt": "2025-11-26T07:24:12.195Z" + "updatedAt": "2025-11-27T09:08:59.840Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.195Z" + "updatedAt": "2025-11-27T09:08:59.839Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.197Z" + "updatedAt": "2025-11-27T09:08:59.843Z" } } }, "e8b753d96adf0305cf90b9e579ac4cf927e2e7f187ad62582b9b9a11bab53b3c": { "d6af628ddd5106feb87f50888fafc6fb21ea322d5d658688b385daaa6e2bbc05": { "jp": { - "updatedAt": "2025-11-26T07:24:12.196Z" + "updatedAt": "2025-11-27T09:08:59.841Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.190Z" + "updatedAt": "2025-11-27T09:08:59.815Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.199Z" + "updatedAt": "2025-11-27T09:08:59.849Z" } } }, "eaa9435dae8d90063d0ef13fb0d0245e00f3c444e99fd608251e1fbdb283ad76": { "5671b5319cbc284bc1f4dff7b698d72202dcbb66b153aa004c508aa68e5dff04": { "jp": { - "updatedAt": "2025-11-26T07:24:12.196Z" + "updatedAt": "2025-11-27T09:08:59.840Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.197Z" + "updatedAt": "2025-11-27T09:08:59.844Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.196Z" + "updatedAt": "2025-11-27T09:08:59.841Z" } } }, "0045741a471f4dac9a3db4c43669d28583bac040167b1d39d7e25215fcda5ccc": { "dab964b634db47350d340e0931ec7aea4b46dc1764c4d7c24c6cf164792b3f29": { "jp": { - "updatedAt": "2025-11-26T07:24:12.212Z" + "updatedAt": "2025-11-27T09:08:59.884Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.213Z" + "updatedAt": "2025-11-27T09:08:59.887Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.214Z" + "updatedAt": "2025-11-27T09:08:59.888Z" } } }, "189388fe355c19cd463ff375adbd81bb8d731d323bbf7cf2cdbbc3058b2bd826": { "5ed3b23bcc3bc844b8a42267d9198f127c4ab515a87acd7da5858ed9dd6fe278": { "jp": { - "updatedAt": "2025-11-26T07:24:12.208Z" + "updatedAt": "2025-11-27T09:08:59.874Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.207Z" + "updatedAt": "2025-11-27T09:08:59.871Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.209Z" + "updatedAt": "2025-11-27T09:08:59.876Z" } } }, "23c47eb4902870785fffe1e4baa6e41d6084e1f924e6ae197c27e7b51f843750": { "052d52be77d868d3d26620fa34155f9eb31b5090d664d799d412457b60c3f050": { "jp": { - "updatedAt": "2025-11-26T07:24:12.207Z" + "updatedAt": "2025-11-27T09:08:59.870Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.207Z" + "updatedAt": "2025-11-27T09:08:59.871Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.209Z" + "updatedAt": "2025-11-27T09:08:59.876Z" } } }, "242658032c19f8878ea27fde8bfaf1c2d950073ef6e50d896370f00b777e974b": { "9dced94c1aa74f4a1989dad0844123eff9d336fc99be750b0bd645446ef2190c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.212Z" + "updatedAt": "2025-11-27T09:08:59.883Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.205Z" + "updatedAt": "2025-11-27T09:08:59.866Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.213Z" + "updatedAt": "2025-11-27T09:08:59.886Z" } } }, "302b0ecec3c1a1792dd0c359652c37057d430e76b3e96aa7c8afde8a7172dc09": { "3c7b42d588a09f60f2e03cc7401555f547ab89b4421ae45faee2a50a6b0b0401": { "zh": { - "updatedAt": "2025-11-26T07:24:12.216Z" + "updatedAt": "2025-11-27T09:08:59.895Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.213Z" + "updatedAt": "2025-11-27T09:08:59.887Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.214Z" + "updatedAt": "2025-11-27T09:08:59.891Z" } } }, "52bc7e8ec1f25b547908a73830b6d7664f88e3007b6ea89191268490da4b6c29": { "e4376d6532a2d24e4f86f129429881de208f3ea0ab1bcb5f5e31cb841a06df0e": { "jp": { - "updatedAt": "2025-11-26T07:24:12.210Z" + "updatedAt": "2025-11-27T09:08:59.877Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.208Z" + "updatedAt": "2025-11-27T09:08:59.873Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.207Z" + "updatedAt": "2025-11-27T09:08:59.870Z" } } }, "55d7240c880120e92dc6163e0ae953ba2e5f00fe1352161637e7b7057888a3b6": { "d8020d4cb0f5381e78c97181bfa0e7bd2ff6585f606db5db616fcb0afaff7589": { "jp": { - "updatedAt": "2025-11-26T07:24:12.212Z" + "updatedAt": "2025-11-27T09:08:59.885Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.214Z" + "updatedAt": "2025-11-27T09:08:59.890Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.214Z" + "updatedAt": "2025-11-27T09:08:59.889Z" } } }, "59b41159dfba51bfc26167978b1127378d106b8d443bfaa28a298294319587b0": { "c8e3b18d83b85dea1ed5df57b3bcb5d76702cc3807eb0d8ccc3a2a6bcd46acfc": { "jp": { - "updatedAt": "2025-11-26T07:24:12.212Z" + "updatedAt": "2025-11-27T09:08:59.883Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.212Z" + "updatedAt": "2025-11-27T09:08:59.882Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.213Z" + "updatedAt": "2025-11-27T09:08:59.885Z" } } }, "5a412fdae8fb53a15204e66324bb2d0da4e638bc75ac56e67179382d206d7374": { "02f14c2f65f281503e41f11f04ee9f6cd6ab49c4babb7d84453226444e626ce3": { "jp": { - "updatedAt": "2025-11-26T07:24:12.206Z" + "updatedAt": "2025-11-27T09:08:59.867Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.206Z" + "updatedAt": "2025-11-27T09:08:59.867Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.208Z" + "updatedAt": "2025-11-27T09:08:59.873Z" } } }, "65b791b7c4a125ca183cc9f15c013f5460cca336367cbe0b2dfc01f119a90d1c": { "1a1f03cbe833217e0e2c1ae7fd100d78ebbcc8c0657e571385e72c88889a8da5": { "jp": { - "updatedAt": "2025-11-26T07:24:12.206Z" + "updatedAt": "2025-11-27T09:08:59.869Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.207Z" + "updatedAt": "2025-11-27T09:08:59.869Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.209Z" + "updatedAt": "2025-11-27T09:08:59.876Z" } } }, "6fbd798e9fc4be572840b3ebe3124e7c1982606aa96d7b42be53bd6c1ee9676b": { "123889af8c3d0c2ab264480c584493f0491363fd067fa94edea8459b1555318f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.208Z" + "updatedAt": "2025-11-27T09:08:59.872Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.208Z" + "updatedAt": "2025-11-27T09:08:59.874Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.209Z" + "updatedAt": "2025-11-27T09:08:59.875Z" } } }, "a44ac107c2f03ea1cfc68d15bea4e84005ab3111943ebc6245e22ba05bffe8e9": { "30eb0a47b3a70c9804063775a6d033975254804002f913220b776bebe7566da8": { "jp": { - "updatedAt": "2025-11-26T07:24:12.201Z" + "updatedAt": "2025-11-27T09:08:59.855Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.203Z" + "updatedAt": "2025-11-27T09:08:59.861Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.202Z" + "updatedAt": "2025-11-27T09:08:59.857Z" } } }, "b8b5935e6157dbf3000442e0ae9da10c119186446dab9b0b6ba59ecd8e081b43": { "3aec0cecfebdb1bcc89b6b5e6d7edb63838928162cbed60f94e123b0001dc3e2": { "jp": { - "updatedAt": "2025-11-26T07:24:12.209Z" + "updatedAt": "2025-11-27T09:08:59.876Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.205Z" + "updatedAt": "2025-11-27T09:08:59.865Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.205Z" + "updatedAt": "2025-11-27T09:08:59.865Z" } } }, "c2b6b4b09ba9a1b69a2623b9e76c0169f2800d8215a3a24ec9aaddb566e07410": { "a509a683d08d5f5fa0027e4566599afd99d8661f1932316929ed7b7f5f1434fc": { "jp": { - "updatedAt": "2025-11-26T07:24:12.200Z" + "updatedAt": "2025-11-27T09:08:59.853Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.201Z" + "updatedAt": "2025-11-27T09:08:59.854Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.204Z" + "updatedAt": "2025-11-27T09:08:59.861Z" } } }, "c78d724ce19757f519a89ae81413bdcf8c707c62709608c1fcd90f8f2ad2737c": { "ed98e153a80901d835f37a02ef176c4789e69c4833533e0096f7181d92ddda23": { "jp": { - "updatedAt": "2025-11-26T07:24:12.206Z" + "updatedAt": "2025-11-27T09:08:59.867Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.208Z" + "updatedAt": "2025-11-27T09:08:59.872Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.206Z" + "updatedAt": "2025-11-27T09:08:59.868Z" } } }, "ca734035b219f4714c9e6c2cdca7a1904792cff5ed4cbd21e39a0c5b2a486565": { "73b78bfc9381e1ef4959ec2997ac7ae0499ef6be647ea0c493a48b57261785b7": { "jp": { - "updatedAt": "2025-11-26T07:24:12.205Z" + "updatedAt": "2025-11-27T09:08:59.865Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.202Z" + "updatedAt": "2025-11-27T09:08:59.858Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.203Z" + "updatedAt": "2025-11-27T09:08:59.860Z" } } }, "d7e629dfded6aa789e7b13dbe976a72e204135dfeb9119292f63ce16cd39473c": { "995d171ddfcf778e23a9288af9f2f3b5372f8ce14a4ce8feb377503b79703cf2": { "jp": { - "updatedAt": "2025-11-26T07:24:12.208Z" + "updatedAt": "2025-11-27T09:08:59.872Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.209Z" + "updatedAt": "2025-11-27T09:08:59.875Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.207Z" + "updatedAt": "2025-11-27T09:08:59.871Z" } } }, "da9d4e8b0bdf930b4854e634849ad3b851aaff67143620d95a9ae1e5cb3a7b9a": { "bbba21070424707e5a6f8591bd4bfaa20069a36dd6b196fdc7050d7a1ab8486f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.195Z" + "updatedAt": "2025-11-27T09:08:59.838Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.204Z" + "updatedAt": "2025-11-27T09:08:59.863Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.201Z" + "updatedAt": "2025-11-27T09:08:59.854Z" } } }, "e774d95a2c81c53102c61249027c7f00d0f3179aabfad8f71a51ddceb6505a11": { "e0d72b4c4c836c1bd36aac8338da95ae7abce2d57528db5e7d5f1ed3d95b6f29": { "jp": { - "updatedAt": "2025-11-26T07:24:12.208Z" + "updatedAt": "2025-11-27T09:08:59.873Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.200Z" + "updatedAt": "2025-11-27T09:08:59.852Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.209Z" + "updatedAt": "2025-11-27T09:08:59.875Z" } } }, "eaef488a67183c3737450e1c070243954054aca5bcd96f3b4148d73f6a7399fa": { "893797365249d93ec499eaffe4b1ed5f848af3451b59dc62b1c2c0828602a016": { "jp": { - "updatedAt": "2025-11-26T07:24:12.203Z" + "updatedAt": "2025-11-27T09:08:59.861Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.201Z" + "updatedAt": "2025-11-27T09:08:59.854Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.202Z" + "updatedAt": "2025-11-27T09:08:59.857Z" } } }, "ec49a0cee949d263027a7b97accd10ea82850898c06f8611df19e985e58a554b": { "33e16cb7d3af2bae2f39127844a9524539563891c9e3db379b8d508c23f9b634": { "jp": { - "updatedAt": "2025-11-26T07:24:12.207Z" + "updatedAt": "2025-11-27T09:08:59.870Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.208Z" + "updatedAt": "2025-11-27T09:08:59.872Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.206Z" + "updatedAt": "2025-11-27T09:08:59.866Z" } } }, "ffb2e794247dc89ebed0e232b0ca7c0962e63c5651c684b4d99f74958eba032f": { "3e28ee25ce5b288bcfcc6aa247be220c6686ae678dc50aa107da3672ec9cea32": { "jp": { - "updatedAt": "2025-11-26T07:24:12.202Z" + "updatedAt": "2025-11-27T09:08:59.858Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.203Z" + "updatedAt": "2025-11-27T09:08:59.860Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.200Z" + "updatedAt": "2025-11-27T09:08:59.853Z" } } }, "10bf6a851bc722dc218ed84feeaf049930bd2d7b38be10d0175a4b45da4c9e3c": { "72a26e0ef3fe81a02e1eaba48c8ec2828431893b8e50ba8b3dd2152f58c16698": { "jp": { - "updatedAt": "2025-11-26T07:24:12.216Z" + "updatedAt": "2025-11-27T09:08:59.895Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.216Z" + "updatedAt": "2025-11-27T09:08:59.894Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.212Z" + "updatedAt": "2025-11-27T09:08:59.884Z" } } }, "2ba4aedf1481fd714296b22477ae890f08dba4b0496e12c98e62fe2811b6431f": { "e6c19e03fd150258214beab57caf618b7ccc0baf4e6d85d9c67796cb3ea9fd44": { "jp": { - "updatedAt": "2025-11-26T07:24:12.222Z" + "updatedAt": "2025-11-27T09:08:59.915Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.221Z" + "updatedAt": "2025-11-27T09:08:59.914Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.215Z" + "updatedAt": "2025-11-27T09:08:59.893Z" } } }, "2cbf8ac76941d9ddeefe32e9f176ff03397d09339a8d40eb2cfc57efa00fc1d7": { "2d3d7395ba3898aa08ea4bb981e7bffd7607a25fc091046d7a6a359bc9c589ba": { "jp": { - "updatedAt": "2025-11-26T07:24:12.214Z" + "updatedAt": "2025-11-27T09:08:59.890Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.215Z" + "updatedAt": "2025-11-27T09:08:59.893Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.215Z" + "updatedAt": "2025-11-27T09:08:59.891Z" } } }, "2cf9993a309ce837e0def1fde3b9ec81b984bdc367d668342cfcfe3647301013": { "f44de4bedc5c963bcfdfb8f911d7420b96d114fbac92a40412a2594ce4bc5180": { "jp": { - "updatedAt": "2025-11-26T07:24:12.214Z" + "updatedAt": "2025-11-27T09:08:59.889Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.216Z" + "updatedAt": "2025-11-27T09:08:59.897Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.214Z" + "updatedAt": "2025-11-27T09:08:59.890Z" } } }, "3682e2d45de97f6b173cd748b8b4d7583b7f1420f40557e91bf935dd09b009da": { "28eeefee37cae95ff6cae2142c3e8807b596db44875ceafb1b3e3c2b4f5b62be": { "jp": { - "updatedAt": "2025-11-26T07:24:12.214Z" + "updatedAt": "2025-11-27T09:08:59.891Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.213Z" + "updatedAt": "2025-11-27T09:08:59.885Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.216Z" + "updatedAt": "2025-11-27T09:08:59.895Z" } } }, "49403ebf7c98c9603a561ef10166db22cbd8708cc533f76c0feedc9aabdcf4ff": { "512f607384640e8f1cbaf19b2b517930edc16a84b9a618f37f91116a4393bef7": { "jp": { - "updatedAt": "2025-11-26T07:24:12.222Z" + "updatedAt": "2025-11-27T09:08:59.916Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.222Z" + "updatedAt": "2025-11-27T09:08:59.916Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.222Z" + "updatedAt": "2025-11-27T09:08:59.917Z" } } }, "4c4a469c4038db0bd30d547c74475eb77e6b3c4d4eb98a9b5406301541d45581": { "32eae8f070a25e27b3cb7b763fb46241c3e69525a2c4d2ba527136f413a778a2": { "jp": { - "updatedAt": "2025-11-26T07:24:12.213Z" + "updatedAt": "2025-11-27T09:08:59.887Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.212Z" + "updatedAt": "2025-11-27T09:08:59.882Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.214Z" + "updatedAt": "2025-11-27T09:08:59.890Z" } } }, "5e529ee6f1c6b44d742cab16c2436b0f98d61cee3d67b6c243eb91fc94e5747a": { "b5eaa7df44d170d16be268ccac271b07809b8f738fe7f6bc1658432e3f8af2ad": { "ru": { - "updatedAt": "2025-11-26T07:24:12.222Z" + "updatedAt": "2025-11-27T09:08:59.916Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.220Z" + "updatedAt": "2025-11-27T09:08:59.911Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.221Z" + "updatedAt": "2025-11-27T09:08:59.913Z" } } }, "69dc87a0a0efcdc9ce162824232e0caf45af3973a79857510730075407dab81b": { "f55102d7e2ca214c7f9f0866a2bb860df9999592d3a40c6d9b97a2ca5a47cf98": { "jp": { - "updatedAt": "2025-11-26T07:24:12.215Z" + "updatedAt": "2025-11-27T09:08:59.894Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.215Z" + "updatedAt": "2025-11-27T09:08:59.892Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.216Z" + "updatedAt": "2025-11-27T09:08:59.897Z" } } }, "7cf646c7ec8330a693b4b1f30fc05c3ef68f7af5200b4c3d5be55f5e6c627d12": { "b392f20796bafccc3efe1e80f4e6ac3a7db083acc7209c5e540ddcfe853a6127": { "jp": { - "updatedAt": "2025-11-26T07:24:12.211Z" + "updatedAt": "2025-11-27T09:08:59.881Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.212Z" + "updatedAt": "2025-11-27T09:08:59.883Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.216Z" + "updatedAt": "2025-11-27T09:08:59.896Z" } } }, "8b692c2ad787a446b25292433cebf4bef12b92c8e1c334682420d14be45948e3": { "59296f60723eaca7cd5a35c2a97534cb75c9c73d8715867db0a0e547de415157": { "jp": { - "updatedAt": "2025-11-26T07:24:12.214Z" + "updatedAt": "2025-11-27T09:08:59.891Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.212Z" + "updatedAt": "2025-11-27T09:08:59.884Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.215Z" + "updatedAt": "2025-11-27T09:08:59.893Z" } } }, "92ec8f6b08ecfb56cf3d8225b5aff3170cfbbd0aa5775ef3532b3a6f5090f16a": { "24d1012de894e965ee2332b480daaca127319bc8cedb17d9ff8c5d9d4b57de00": { "jp": { - "updatedAt": "2025-11-26T07:24:12.206Z" + "updatedAt": "2025-11-27T09:08:59.869Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.206Z" + "updatedAt": "2025-11-27T09:08:59.869Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.207Z" + "updatedAt": "2025-11-27T09:08:59.870Z" } } }, "9f34b6230075d04ee88d715b8efa4b4287ac5ef974d0bc4c4940ad96532f8fcc": { "8527ee18d786491e874ba6c6733def703ace3ed743538e924d577e8b8cf2ded0": { "jp": { - "updatedAt": "2025-11-26T07:24:12.207Z" + "updatedAt": "2025-11-27T09:08:59.871Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.208Z" + "updatedAt": "2025-11-27T09:08:59.873Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.206Z" + "updatedAt": "2025-11-27T09:08:59.868Z" } } }, "9f6597744edd6252f669f69c58d2636f8aa9a6b09dbc8b995f9479c4221e22e7": { "308c3f9e814a2ad27043440f48438bae8864dd4493497ab0a517cc656aa82356": { "jp": { - "updatedAt": "2025-11-26T07:24:12.210Z" + "updatedAt": "2025-11-27T09:08:59.878Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.211Z" + "updatedAt": "2025-11-27T09:08:59.879Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.208Z" + "updatedAt": "2025-11-27T09:08:59.874Z" } } }, "ac52e240a096d2b15ce8bfe0c48a2efac10eda017b425c2339c5001cfcb72318": { "56334f7f1fa03f9b3a42096ca5749c43c65a9573954fa56e40e339606f36c1c8": { "jp": { - "updatedAt": "2025-11-26T07:24:12.206Z" + "updatedAt": "2025-11-27T09:08:59.867Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.206Z" + "updatedAt": "2025-11-27T09:08:59.868Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.206Z" + "updatedAt": "2025-11-27T09:08:59.867Z" } } }, "ac7c945a9a70e136f7bf663953e5789b51065cda16bb4013fffa3f1f5633a518": { "79c8e3c46a6ede7e07368f66bfdc60525ced4d42f656a8f57a26ee701ec28b66": { "jp": { - "updatedAt": "2025-11-26T07:24:12.211Z" + "updatedAt": "2025-11-27T09:08:59.880Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.211Z" + "updatedAt": "2025-11-27T09:08:59.880Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.211Z" + "updatedAt": "2025-11-27T09:08:59.879Z" } } }, "c36157e661a0ed678a48034a7b5806bdd2feedb466d46088c035d8bde2fd79e9": { "4b9ecaa4510afe985e77b7c0bf367ca64dcfa7463bb738f45d328855c7efc166": { "jp": { - "updatedAt": "2025-11-26T07:24:12.205Z" + "updatedAt": "2025-11-27T09:08:59.866Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.211Z" + "updatedAt": "2025-11-27T09:08:59.881Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.215Z" + "updatedAt": "2025-11-27T09:08:59.893Z" } } }, "c3d15c85d4784a496cd8acb62a731024d5bb9915807be3522653ec7b1167d18a": { "608f13e19408e1adf4e6688ec8886b26bf677b304247727063c881c2d33f3968": { "jp": { - "updatedAt": "2025-11-26T07:24:12.210Z" + "updatedAt": "2025-11-27T09:08:59.878Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.207Z" + "updatedAt": "2025-11-27T09:08:59.871Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.209Z" + "updatedAt": "2025-11-27T09:08:59.876Z" } } }, "cd116d178423eaa55d4970d5d78d398dc1e5099ee13c6221d781e9ee5978b899": { "ec13b6563341c4b7d66f4d675ef48acbc1e40f169c0016ceecaeff7982621eca": { "jp": { - "updatedAt": "2025-11-26T07:24:12.210Z" + "updatedAt": "2025-11-27T09:08:59.877Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.208Z" + "updatedAt": "2025-11-27T09:08:59.873Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.209Z" + "updatedAt": "2025-11-27T09:08:59.875Z" } } }, "d0d17f6390066626b3cd9b1b5cf3bfbe37d88dad9a6142c1db99eeec90102fa3": { "f10f076ae99bcca2c49fc911b738e76676d074aa2444ae614ac526d5065f04f7": { "jp": { - "updatedAt": "2025-11-26T07:24:12.213Z" + "updatedAt": "2025-11-27T09:08:59.885Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.214Z" + "updatedAt": "2025-11-27T09:08:59.888Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.212Z" + "updatedAt": "2025-11-27T09:08:59.882Z" } } }, "f12a63823b74d3b2b90d31871ee06bcf19ba66effba17bcc94c800ce464bb39c": { "5f9e4fad6300cfb262a29845e8e0aaa91d2938f09671d81c5ae2b2c69f9a6483": { "jp": { - "updatedAt": "2025-11-26T07:24:12.200Z" + "updatedAt": "2025-11-27T09:08:59.852Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.200Z" + "updatedAt": "2025-11-27T09:08:59.852Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.206Z" + "updatedAt": "2025-11-27T09:08:59.868Z" } } }, "15e69bdeb4774e041a333e57689381522781cd859797d0c321068053bd1ac55d": { "ecfdec0409be257ba876146227e2e778ae5f272c3aa56e2fbc1cacb35dd43ca1": { "jp": { - "updatedAt": "2025-11-26T07:24:12.220Z" + "updatedAt": "2025-11-27T09:08:59.910Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.220Z" + "updatedAt": "2025-11-27T09:08:59.910Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.220Z" + "updatedAt": "2025-11-27T09:08:59.911Z" } } }, "2441b704f1648bc3443c9b054ec8854f3764cbbd77801b8747d10f0c1380e055": { "8946d488f9c46e6c14fad461ca002a664b5a2d6561da01977d53a7c95d31e4bc": { "jp": { - "updatedAt": "2025-11-26T07:24:19.072Z" + "updatedAt": "2025-11-27T09:08:59.942Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.073Z" + "updatedAt": "2025-11-27T09:08:59.946Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.073Z" + "updatedAt": "2025-11-27T09:08:59.946Z" } } }, "253c517a16655bd1af2910bca26a946ec5b5257507a84e5c1083bc68edcbaaae": { "383175d865a3e8e5eeeec2ad520a6706a7fe906490a2365a6c124bbbd35fbaea": { "jp": { - "updatedAt": "2025-11-26T07:24:12.217Z" + "updatedAt": "2025-11-27T09:08:59.900Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.218Z" + "updatedAt": "2025-11-27T09:08:59.902Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.217Z" + "updatedAt": "2025-11-27T09:08:59.901Z" } } }, "2c3512a703d975c2b75e7502a141cd8a3e8b086796e9dd5b92d66f1f2a58358c": { "f1c375550607f160ff41977c4e39aad3343f7094f427e196bc55d8e72c22aed3": { "jp": { - "updatedAt": "2025-11-26T07:24:12.225Z" + "updatedAt": "2025-11-27T09:08:59.936Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.218Z" + "updatedAt": "2025-11-27T09:08:59.904Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.220Z" + "updatedAt": "2025-11-27T09:08:59.908Z" } } }, "371cb4852709d9ca0ffc244925c1336472d7b3607e49eb600409ac2634d29c9d": { "2c08ba9df01012e99f6db6d87ed3274138d3991bb7ef1df26cf943bbe938c83c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.224Z" + "updatedAt": "2025-11-27T09:08:59.933Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.071Z" + "updatedAt": "2025-11-27T09:08:59.938Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.224Z" + "updatedAt": "2025-11-27T09:08:59.936Z" } } }, "38065e7c3b022c9edd666529a176fb393cfb28490dd15161ec6ac71c2d9529db": { "35e6467692a1dada24e738d0c85e6530cad77f3c956b13d30d9734eec88985a5": { "jp": { - "updatedAt": "2025-11-26T07:24:12.218Z" + "updatedAt": "2025-11-27T09:08:59.903Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.219Z" + "updatedAt": "2025-11-27T09:08:59.905Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.218Z" + "updatedAt": "2025-11-27T09:08:59.904Z" } } }, "3c1dbc013406b1c31a215c47a6b9edb7f3dcaf68974dc2c38989fd26dd392af4": { "54d4adf41787f75b127c52923ea0abbe3e269714267d20e9e3f8f38afabbaf56": { "jp": { - "updatedAt": "2025-11-26T07:24:12.211Z" + "updatedAt": "2025-11-27T09:08:59.880Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.217Z" + "updatedAt": "2025-11-27T09:08:59.899Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.217Z" + "updatedAt": "2025-11-27T09:08:59.900Z" } } }, "3d0840c01249868fda2bd1e95b3f042cdf2c618bd34004df654106ee3d7fe77b": { "abd6f88511214360a8b3d4a7acb1e68208916aae6edb5e22025418320d437381": { "jp": { - "updatedAt": "2025-11-26T07:24:19.073Z" + "updatedAt": "2025-11-27T09:08:59.947Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.073Z" + "updatedAt": "2025-11-27T09:08:59.947Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.073Z" + "updatedAt": "2025-11-27T09:08:59.943Z" } } }, "3eb17266fde17cf983c1426830939c4712a727fd7eeca3116f2fe348d7489f01": { "d7d5ceeef5f34571ef1e4827cc0966f80aabd85dc08e22be3a3583aa8cbe8a2f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.219Z" + "updatedAt": "2025-11-27T09:08:59.905Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.219Z" + "updatedAt": "2025-11-27T09:08:59.907Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.219Z" + "updatedAt": "2025-11-27T09:08:59.906Z" } } }, "6bf7c7b51f6adc00dec7d08e30d4d16d28e682b5d83a2a9112cfe37d49b6b1ad": { "3faae72ad8b1f70ba0b49e66e434c0ca46525d70f145c05758337bee07817ae9": { "jp": { - "updatedAt": "2025-11-26T07:24:12.213Z" + "updatedAt": "2025-11-27T09:08:59.886Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.215Z" + "updatedAt": "2025-11-27T09:08:59.892Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.212Z" + "updatedAt": "2025-11-27T09:08:59.884Z" } } }, "84bcc067be4c969ca78c33fa50f4efff4f2a2daacca3a415c5c86d0fceedd5ac": { "2eb8e19e71aa05266f701be373a387f43f2c6751db4a43fdf67169c2efcd862a": { "jp": { - "updatedAt": "2025-11-26T07:24:12.216Z" + "updatedAt": "2025-11-27T09:08:59.896Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.214Z" + "updatedAt": "2025-11-27T09:08:59.889Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.214Z" + "updatedAt": "2025-11-27T09:08:59.889Z" } } }, "85d48d85dd722310026bcee5e22617e344f2aacd9f8e9ec67d816fdb2703a37e": { "92cdab1f6b712fe93f35828375006e26f4c9671ddb601b08780bfafa9a16e196": { "jp": { - "updatedAt": "2025-11-26T07:24:12.215Z" + "updatedAt": "2025-11-27T09:08:59.892Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.213Z" + "updatedAt": "2025-11-27T09:08:59.886Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.216Z" + "updatedAt": "2025-11-27T09:08:59.896Z" } } }, "8d8defb12045ea6e4b617d20e5212582181c730d58236e675147eba18be53d95": { "c53f9e7ae5db8452601cd25c2b2d9ef7eb21620b4522dce992bc50fa2ca137a0": { "jp": { - "updatedAt": "2025-11-26T07:24:12.218Z" + "updatedAt": "2025-11-27T09:08:59.901Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.221Z" + "updatedAt": "2025-11-27T09:08:59.912Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.218Z" + "updatedAt": "2025-11-27T09:08:59.903Z" } } }, "a5236951d982490ee0af310dad8356d6d6153f403e1ee58f4ce2f1c0eda6a81a": { "c1b636cd594663b0ead8b055a758d770ff99552ec72b5c80bc4f4e7f722236c1": { "jp": { - "updatedAt": "2025-11-26T07:24:12.221Z" + "updatedAt": "2025-11-27T09:08:59.914Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.218Z" + "updatedAt": "2025-11-27T09:08:59.903Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.220Z" + "updatedAt": "2025-11-27T09:08:59.908Z" } } }, "d4c8c149a2085ffd9c567e330ccc163bc309990242e7b28d9b404761f935ba4e": { "37cd2110dc9673e6ecc3c129fd27e5e27a8e403857f4a2d17738870cab29a747": { "jp": { - "updatedAt": "2025-11-26T07:24:12.213Z" + "updatedAt": "2025-11-27T09:08:59.887Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.215Z" + "updatedAt": "2025-11-27T09:08:59.894Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.216Z" + "updatedAt": "2025-11-27T09:08:59.895Z" } } }, "d9be63b990bb973f2145b0fede5008f532e3efe16cc74b19670e7c30fb33cce3": { "6520ef784c8cb65030b31629babb751b59c90c4785704dd342ccc7196be05ee1": { "jp": { - "updatedAt": "2025-11-26T07:24:12.219Z" + "updatedAt": "2025-11-27T09:08:59.908Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.219Z" + "updatedAt": "2025-11-27T09:08:59.906Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.221Z" + "updatedAt": "2025-11-27T09:08:59.912Z" } } }, "eb49ba497d8db0f37c1298e8ea9f8be1b244b82d159157e8ede112df8f3c919d": { "4b16adf3d0e0aeab42ce3ab01c36acb9cff5de72d7b2802148d15353f359ea9b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.220Z" + "updatedAt": "2025-11-27T09:08:59.909Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.220Z" + "updatedAt": "2025-11-27T09:08:59.909Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.219Z" + "updatedAt": "2025-11-27T09:08:59.907Z" } } }, "ed2113745ac93661c6152589c4303163561a52fecfcb50853a532d0c4d3c4c8c": { "91a36f6307074f27f0253a1a697372b4dbbadd48aaa0cb2381adb6ffad7ec3ee": { "jp": { - "updatedAt": "2025-11-26T07:24:12.220Z" + "updatedAt": "2025-11-27T09:08:59.910Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.221Z" + "updatedAt": "2025-11-27T09:08:59.912Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.220Z" + "updatedAt": "2025-11-27T09:08:59.909Z" } } }, "f7ba33421a28aa3de7f23177b5e40153a4f0e0efc37a2106a3e8b5708fe45005": { "4211afcb557ca12ed79b2828ba3000b6bfc93501ef7266a7012e6f73ca63a27b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.219Z" + "updatedAt": "2025-11-27T09:08:59.906Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.221Z" + "updatedAt": "2025-11-27T09:08:59.913Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.222Z" + "updatedAt": "2025-11-27T09:08:59.915Z" } } }, "fae26c9194eff01a95214ca36a03f887f3e266e90a64a4b894ad55f02c179bb2": { "7386d025ae2748ca0b87ecef00be245390faaaae8fa265f80c33e3480d854a49": { "jp": { - "updatedAt": "2025-11-26T07:24:12.205Z" + "updatedAt": "2025-11-27T09:08:59.866Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.215Z" + "updatedAt": "2025-11-27T09:08:59.892Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.216Z" + "updatedAt": "2025-11-27T09:08:59.897Z" } } }, "fe50f04b639f9385b150579fabadf2782c0b03bef9f1dab65ea9a1faf29cec93": { "00b28a1b8b64ad6bcdcafb6006824d0afbd02b04374b7f66bd177dafb4725603": { "jp": { - "updatedAt": "2025-11-26T07:24:12.213Z" + "updatedAt": "2025-11-27T09:08:59.888Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.212Z" + "updatedAt": "2025-11-27T09:08:59.883Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.213Z" + "updatedAt": "2025-11-27T09:08:59.886Z" } } }, "04c615906de14bff138af4cdd85c3c07b4fc5433296761dca010e8ef60f78e93": { "91810a26e7bbbe9ffcd2f092006cc98930eec1fb41bd4802d4297bf1f45413c7": { "jp": { - "updatedAt": "2025-11-26T07:24:12.223Z" + "updatedAt": "2025-11-27T09:08:59.931Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.072Z" + "updatedAt": "2025-11-27T09:08:59.943Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.224Z" + "updatedAt": "2025-11-27T09:08:59.934Z" } } }, "1580309aeb8bf89a02431ce4e3958695fd0114d89488a627aab1a37097044adc": { "a04bc210be5bcbbe776786b33eff75770784c182f110822abfb00ecf17ff032d": { "jp": { - "updatedAt": "2025-11-26T07:24:19.073Z" + "updatedAt": "2025-11-27T09:08:59.945Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.225Z" + "updatedAt": "2025-11-27T09:08:59.938Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.072Z" + "updatedAt": "2025-11-27T09:08:59.942Z" } } }, "176150c0e3d077975a3bf364d1abf67e535d6c7aead2f176b61c34aca79abd59": { "844838ff96f065aabb06386cc366cf66f183135f983db2d969bbf61b47c89398": { "jp": { - "updatedAt": "2025-11-26T07:24:12.223Z" + "updatedAt": "2025-11-27T09:08:59.932Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.223Z" + "updatedAt": "2025-11-27T09:08:59.930Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.223Z" + "updatedAt": "2025-11-27T09:08:59.918Z" } } }, "1a55a8d8cd9d21c74eaa692dca8aac6491f16ba3aee28f43616128e2d9ef200b": { "da55650acb4be1e891fe2ae5f1756740a01821cd992f3a8ca4695951fa27e52c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.224Z" + "updatedAt": "2025-11-27T09:08:59.933Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.223Z" + "updatedAt": "2025-11-27T09:08:59.931Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.225Z" + "updatedAt": "2025-11-27T09:08:59.936Z" } } }, "1e61b3b890446ac615cfca4d43e26692a7bc7544426233b862918b5d3fb722da": { "68327a573af2128ef9f8b75c6d3764adaef0d6d6a2518cca36e25acebd3d72ff": { "jp": { - "updatedAt": "2025-11-26T07:24:19.072Z" + "updatedAt": "2025-11-27T09:08:59.940Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.072Z" + "updatedAt": "2025-11-27T09:08:59.940Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.225Z" + "updatedAt": "2025-11-27T09:08:59.938Z" } } }, "2365f342aa73537207eea12c5ea5e59b84982495f018fb65d762d8ced77d7432": { "303a2bb1adcbfc7e719c1aac71a6de6454f8a1ba771cf607483f97b277db1bd4": { "jp": { - "updatedAt": "2025-11-26T07:24:12.223Z" + "updatedAt": "2025-11-27T09:08:59.930Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.223Z" + "updatedAt": "2025-11-27T09:08:59.919Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.224Z" + "updatedAt": "2025-11-27T09:08:59.935Z" } } }, "361b5b1d32de2ebb3e52e8460adeb4b22ec4bc8ca04ceb0e717fedc703a31195": { "10b62158d3216eb8065dd2ff7515e8754275c4c7f5c6d4eed8d2ede3b37286ee": { "zh": { - "updatedAt": "2025-11-26T07:24:19.077Z" + "updatedAt": "2025-11-27T09:08:59.955Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:19.077Z" + "updatedAt": "2025-11-27T09:08:59.956Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.077Z" + "updatedAt": "2025-11-27T09:08:59.955Z" } } }, "3e3f9cdd02598c16b281b93fb32c30b1be85298c6b705aa31bfbce0e5880e103": { "e9242354e112109aceb1f980cb5bd9997a81807b4b2b9ad51d2e395d6925d743": { "jp": { - "updatedAt": "2025-11-26T07:24:12.217Z" + "updatedAt": "2025-11-27T09:08:59.899Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.224Z" + "updatedAt": "2025-11-27T09:08:59.935Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.224Z" + "updatedAt": "2025-11-27T09:08:59.934Z" } } }, "47db68ab348b969e40c4783275dbc11e1b7c3f0d1e0f7993066d41cd80abc360": { "eb30b9830f751c6d73c63c4e71376e8e862a1b79d67ead319e3a93512cfb332c": { "jp": { - "updatedAt": "2025-11-26T07:24:19.073Z" + "updatedAt": "2025-11-27T09:08:59.944Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.072Z" + "updatedAt": "2025-11-27T09:08:59.942Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.072Z" + "updatedAt": "2025-11-27T09:08:59.941Z" } } }, "49e360371f0bc0d697298f4470438952e521fabefd1b9e98218955be3cdbbcc0": { "974e376db0d1f6bc3a3c2778b18c785b8cbb420855a07c1b3d0cfb100fdf6562": { "jp": { - "updatedAt": "2025-11-26T07:24:19.074Z" + "updatedAt": "2025-11-27T09:08:59.948Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.075Z" + "updatedAt": "2025-11-27T09:08:59.952Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.074Z" + "updatedAt": "2025-11-27T09:08:59.948Z" } } }, "58cd3f4391882ce670046b8d82826c3c127fcee3b6aa2afc15ff717cd3d10d71": { "5015c123581af2b4d332b12ea65e8e6ccfdf0a8a5c76d9fab3a9a30aedfe8767": { "jp": { - "updatedAt": "2025-11-26T07:24:19.072Z" + "updatedAt": "2025-11-27T09:08:59.940Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.072Z" + "updatedAt": "2025-11-27T09:08:59.941Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.225Z" + "updatedAt": "2025-11-27T09:08:59.937Z" } } }, "5d6ff265e282770018f2a3801b1d623cdca059cd587edf9408ad75b7f0427f29": { "7bf23f00d17d99986e4f0927c2dad27c8d9b95293b0f84a3bd9420e9a2cd90c4": { "jp": { - "updatedAt": "2025-11-26T07:24:12.219Z" + "updatedAt": "2025-11-27T09:08:59.906Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.218Z" + "updatedAt": "2025-11-27T09:08:59.904Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.218Z" + "updatedAt": "2025-11-27T09:08:59.902Z" } } }, "92e00a40688842f014f868586a36e069a52b6ebff0afa9668aa0116030f149f7": { "507162d0c5f858cea0fe1b5f4cfb599166143072817567489682c950f1313b5a": { "jp": { - "updatedAt": "2025-11-26T07:24:12.217Z" + "updatedAt": "2025-11-27T09:08:59.901Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.218Z" + "updatedAt": "2025-11-27T09:08:59.902Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.217Z" + "updatedAt": "2025-11-27T09:08:59.899Z" } } }, "94305f7921348204002c5fceee250d8a329b22e97297f5de432297ca6b6ce190": { "68e6800c1c85abed9956b13cc6c1349b8178fe6cfb23ebcc8aa5475efd99f8e7": { "jp": { - "updatedAt": "2025-11-26T07:24:12.222Z" + "updatedAt": "2025-11-27T09:08:59.918Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.073Z" + "updatedAt": "2025-11-27T09:08:59.943Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.071Z" + "updatedAt": "2025-11-27T09:08:59.939Z" } } }, "978146b52bf1385e45bd326ef044217c2dcdc8bb47040c12f8ac16274fa8addc": { "229b20a3b9f2e01d63cbf0aa22d459b44b4535cff9593d53b6edbfdd28847fdf": { "jp": { - "updatedAt": "2025-11-26T07:24:12.224Z" + "updatedAt": "2025-11-27T09:08:59.932Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.224Z" + "updatedAt": "2025-11-27T09:08:59.934Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.225Z" + "updatedAt": "2025-11-27T09:08:59.937Z" } } }, "b65057e512e1d5ba2b482da61eb41e96a0451b3633379d8bfcd74a74bc5c5255": { "d590e32dca83cbf697fbc724c2b52de9f53b427e55f5e82add0e7c98c670b72f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.222Z" + "updatedAt": "2025-11-27T09:08:59.915Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.221Z" + "updatedAt": "2025-11-27T09:08:59.914Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.221Z" + "updatedAt": "2025-11-27T09:08:59.914Z" } } }, "bbc79010b259fcfbd187a6891a0f4fb7b780904c181f0266b6753f4d179bbd0b": { "9124cca07daf9271adc7984d01efad4c1a6d47441c45c6be540d3204e5502916": { "jp": { - "updatedAt": "2025-11-26T07:24:12.217Z" + "updatedAt": "2025-11-27T09:08:59.900Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.217Z" + "updatedAt": "2025-11-27T09:08:59.900Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.211Z" + "updatedAt": "2025-11-27T09:08:59.881Z" } } }, "c04de4891f93a0ba91486fc9aaf76205c21818b034acf58a753695af7332b3ac": { "783554b75229a238156945270a3356288601a5016510ae7113ea4d4f746a89d9": { "jp": { - "updatedAt": "2025-11-26T07:24:19.073Z" + "updatedAt": "2025-11-27T09:08:59.944Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.222Z" + "updatedAt": "2025-11-27T09:08:59.918Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.073Z" + "updatedAt": "2025-11-27T09:08:59.945Z" } } }, "c5ee15352746ad76714767dc88162427e77db4c02b35d0258b67bb1a35882ab6": { "1e07570b89f9d1753c7c6fa5c9dc7f96cd00626361968edca1ee15a898637fe7": { "jp": { - "updatedAt": "2025-11-26T07:24:12.221Z" + "updatedAt": "2025-11-27T09:08:59.913Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.222Z" + "updatedAt": "2025-11-27T09:08:59.917Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.222Z" + "updatedAt": "2025-11-27T09:08:59.916Z" } } }, "c9f381cce8333661e63bd1e01d8c4f1774748ca4686351ffff148b88e9e703cb": { "e4a9139614a7f11d3b10e77e31631df6b358e364a358b51b7e9d35e161a62d0c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.224Z" + "updatedAt": "2025-11-27T09:08:59.935Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.072Z" + "updatedAt": "2025-11-27T09:08:59.939Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.224Z" + "updatedAt": "2025-11-27T09:08:59.934Z" } } }, "decba6568d82bbae43bf10ae33288e0bb54460fab2d76fb910a5037c036d8b31": { "b3961ee327c6fafcf4999b1abd14b74444d3905528c75bc8bb8c2bfbefbe9765": { "jp": { - "updatedAt": "2025-11-26T07:24:12.211Z" + "updatedAt": "2025-11-27T09:08:59.881Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.218Z" + "updatedAt": "2025-11-27T09:08:59.902Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.217Z" + "updatedAt": "2025-11-27T09:08:59.901Z" } } }, "f8499afd2bca127eb328fcbbb1d86926a4b6ed99899c57bf912940e11e81fa53": { "57d37a6031f92bd82e315b49237fe134b84352ea376fc2fb6ae7f50d8a63cb03": { "jp": { - "updatedAt": "2025-11-26T07:24:12.220Z" + "updatedAt": "2025-11-27T09:08:59.911Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.221Z" + "updatedAt": "2025-11-27T09:08:59.913Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.219Z" + "updatedAt": "2025-11-27T09:08:59.907Z" } } }, "00801f2886d2097d3f3fd23c2495271df83abfb95d59a9c9a2b4a905b8ec2d19": { "20cf324bd963db14b9a1a4346dec4811329f6ebe733b3eeeaba7616399e4d20d": { "jp": { - "updatedAt": "2025-11-26T07:24:12.228Z" + "updatedAt": "2025-11-27T09:08:59.968Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.227Z" + "updatedAt": "2025-11-27T09:08:59.967Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.229Z" + "updatedAt": "2025-11-27T09:08:59.971Z" } } }, "0d7f085589a701521498ae4f2032eff79402e3efaae1bf069e42f610cc1714dc": { "65b6c024a83d6653e55cb1503b9816b66a3ad761b629019961fe3f8f698afb45": { "jp": { - "updatedAt": "2025-11-26T07:24:19.080Z" + "updatedAt": "2025-11-27T09:08:59.960Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.080Z" + "updatedAt": "2025-11-27T09:08:59.961Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.227Z" + "updatedAt": "2025-11-27T09:08:59.965Z" } } }, "1b24b02c3b8b44ef65014e1185ac74c302c13f1cd510990f907cbfb6af75565c": { "153f09d0dc6e1710e949f8df69bcf6dddffcd2f29e7b48e271192abe56431443": { "ru": { - "updatedAt": "2025-11-26T07:24:12.226Z" + "updatedAt": "2025-11-27T09:08:59.962Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.080Z" + "updatedAt": "2025-11-27T09:08:59.961Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.226Z" + "updatedAt": "2025-11-27T09:08:59.964Z" } } }, "1d3ae6305b61a5daa4272a2fdf5bc89befcde6b3c3cd8ac506e835ebca98d2ce": { "7cfed78448288b1e3ce81098eb348b43d832571045d5f68b5c05727141c3c15b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.230Z" + "updatedAt": "2025-11-27T09:08:59.975Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.229Z" + "updatedAt": "2025-11-27T09:08:59.973Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.229Z" + "updatedAt": "2025-11-27T09:08:59.973Z" } } }, "221df8cc4bd4c59f72e569ef5c6a2072eeed57f90181a227e34cf111231768d7": { "c38114543f910f77d0865008910f7e9c6395ef18ca1ffab216e250ed274cc4f4": { "jp": { - "updatedAt": "2025-11-26T07:24:12.228Z" + "updatedAt": "2025-11-27T09:08:59.967Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.226Z" + "updatedAt": "2025-11-27T09:08:59.964Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.080Z" + "updatedAt": "2025-11-27T09:08:59.961Z" } } }, "2dbf7fe23f006182359a9db8a0997fc25605a170bbf502414f10a4d0445f3741": { "a3d059702798e7975e6104e13702831f09dab10cf354c44b13f40788c8b697a6": { "jp": { - "updatedAt": "2025-11-26T07:24:12.227Z" + "updatedAt": "2025-11-27T09:08:59.965Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.228Z" + "updatedAt": "2025-11-27T09:08:59.969Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.228Z" + "updatedAt": "2025-11-27T09:08:59.970Z" } } }, "36a66d817a53f3419052a70bb1815a864c606b97c1626029b4822b58ad82c762": { "3d820438e1d508017cfc5d486b3974a03a6f0475286a479dfda2cf575d825e99": { "jp": { - "updatedAt": "2025-11-26T07:24:19.076Z" + "updatedAt": "2025-11-27T09:08:59.954Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.076Z" + "updatedAt": "2025-11-27T09:08:59.954Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.077Z" + "updatedAt": "2025-11-27T09:08:59.955Z" } } }, "424e2c03bd385b0d797e5742bd8f37c67a6d1d9878707ee374ab10fc13b79f63": { "a39308aed08887cbbf1b7ddcfcc47a901be42991586b7b0c15366672b1a8486a": { "jp": { - "updatedAt": "2025-11-26T07:24:19.079Z" + "updatedAt": "2025-11-27T09:08:59.959Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.079Z" + "updatedAt": "2025-11-27T09:08:59.959Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.079Z" + "updatedAt": "2025-11-27T09:08:59.958Z" } } }, "43e8a84fbf33b51194a80d037248d79de4e1436f50520586eff76e3d3f2af304": { "f19d15b264b03da92de17398ccc6c09d43af2b4d24b0b7c5e1a05393cd4b3fa6": { "jp": { - "updatedAt": "2025-11-26T07:24:19.078Z" + "updatedAt": "2025-11-27T09:08:59.957Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.078Z" + "updatedAt": "2025-11-27T09:08:59.958Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.078Z" + "updatedAt": "2025-11-27T09:08:59.957Z" } } }, "519d5b1a64a00744511c1f3e47df4f483237ba323bcad90f4c2eca4ce9a37794": { "f9c93f24237acc26028d821a685b28dcc71dc3b5ef28ed3f611cd0074fd7d695": { "jp": { - "updatedAt": "2025-11-26T07:24:12.223Z" + "updatedAt": "2025-11-27T09:08:59.920Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.223Z" + "updatedAt": "2025-11-27T09:08:59.931Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.071Z" + "updatedAt": "2025-11-27T09:08:59.939Z" } } }, "595165a4c673965a825c2516944ed6da341d1802ba4af0d1f8e1442aba248fa8": { "8396ae84019ca44433161f57c91a29f40404e3a589100e8cca8e8000206607f9": { "jp": { - "updatedAt": "2025-11-26T07:24:19.075Z" + "updatedAt": "2025-11-27T09:08:59.952Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.074Z" + "updatedAt": "2025-11-27T09:08:59.947Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.074Z" + "updatedAt": "2025-11-27T09:08:59.948Z" } } }, "7e455500c000c9cf2e608bee5ea8ceda40748f754e86eb2dfa6fb808fff46087": { "bad6198b79924e96476294bbd990cd527edc29dacccf3bc3408a2a70258e5f0b": { "jp": { - "updatedAt": "2025-11-26T07:24:19.077Z" + "updatedAt": "2025-11-27T09:08:59.956Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.077Z" + "updatedAt": "2025-11-27T09:08:59.956Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.077Z" + "updatedAt": "2025-11-27T09:08:59.956Z" } } }, "976d169b47215323ef4cab38c850345f280e34b651c35ee7a506d07e901ec587": { "91662735bc3f121c2f531adc960066dfb766691e7210f186029e52bc32f80b4a": { "jp": { - "updatedAt": "2025-11-26T07:24:19.075Z" + "updatedAt": "2025-11-27T09:08:59.952Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.076Z" + "updatedAt": "2025-11-27T09:08:59.953Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.076Z" + "updatedAt": "2025-11-27T09:08:59.954Z" } } }, "a2d877584716bec8ddf5f64a0ba5fd7a0a6b67f9077bed82dda87ee72bfffb8c": { "8d6d45dafb5a931c179b3f202896d1e34592ec42eecee9e2f9c96e83bc4cc999": { "jp": { - "updatedAt": "2025-11-26T07:24:12.222Z" + "updatedAt": "2025-11-27T09:08:59.918Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.072Z" + "updatedAt": "2025-11-27T09:08:59.939Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.225Z" + "updatedAt": "2025-11-27T09:08:59.938Z" } } }, "a5c7b243af8ea45f4cac1779bcbf974f63ad2778759dea05635eca542de84b9b": { "d7c29ef5219d22555b84953c119240e3967ba43e9caba2c80886d14046eb7fc2": { "jp": { - "updatedAt": "2025-11-26T07:24:12.223Z" + "updatedAt": "2025-11-27T09:08:59.919Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.074Z" + "updatedAt": "2025-11-27T09:08:59.949Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.074Z" + "updatedAt": "2025-11-27T09:08:59.949Z" } } }, "d20916d14ade0ee04f39675be5d395d4a057b6b2238ab20a85bf425d1e48c431": { "1ba41582c1e8ebc8a0609ed6a4c503280d425de63584ec900b123ce79c518b7b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.224Z" + "updatedAt": "2025-11-27T09:08:59.936Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.216Z" + "updatedAt": "2025-11-27T09:08:59.898Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.217Z" + "updatedAt": "2025-11-27T09:08:59.898Z" } } }, "e4ba3f71170ffd976d7ad1047d155c73155719b1d252f0fe0608a02ffa3d64ca": { "a6ee74f4a5fa3c471abd0d72cdd9151b4614ba229d109564ac3a2e5c5454bd4e": { "jp": { - "updatedAt": "2025-11-26T07:24:19.074Z" + "updatedAt": "2025-11-27T09:08:59.949Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.074Z" + "updatedAt": "2025-11-27T09:08:59.947Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.078Z" + "updatedAt": "2025-11-27T09:08:59.957Z" } } }, "e7b858b48d1c9c70d32c523d9dc6357d0917ee69b16fa5c6a88fd2a2cfac0098": { "092cf9506a86a0643021a3bc1abcb0426387f5124df02aa60181da49a76114c0": { "jp": { - "updatedAt": "2025-11-26T07:24:12.223Z" + "updatedAt": "2025-11-27T09:08:59.919Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.223Z" + "updatedAt": "2025-11-27T09:08:59.919Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.074Z" + "updatedAt": "2025-11-27T09:08:59.949Z" } } }, "eb1a1f01631b05bf1533ffd2c55c66414eb49c1741c154d4907afc8f73f7235f": { "9a41183439ccb685d921031462bb9652422322a842f20a13f989ee4825c98e54": { "jp": { - "updatedAt": "2025-11-26T07:24:19.077Z" + "updatedAt": "2025-11-27T09:08:59.955Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.077Z" + "updatedAt": "2025-11-27T09:08:59.955Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.075Z" + "updatedAt": "2025-11-27T09:08:59.952Z" } } }, "ecc50ef743da07587f50e2e433c891d853c4145a43e14073bee65beca199ca9d": { "e3d9d895a670833c385d032550d1d2f2e8ecc66328713f84bde5f6eb645a9a70": { "jp": { - "updatedAt": "2025-11-26T07:24:12.224Z" + "updatedAt": "2025-11-27T09:08:59.933Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.224Z" + "updatedAt": "2025-11-27T09:08:59.932Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.224Z" + "updatedAt": "2025-11-27T09:08:59.933Z" } } }, "f811cef1e60d3d76b1890136803c78a8a4f1f5c0702d5e269d8ea318cf5bc7b7": { "8ed2a0a54a6b4cc5249d9184642124cf15bfe670fcebd8151de225c2a95e77c4": { "jp": { - "updatedAt": "2025-11-26T07:24:12.225Z" + "updatedAt": "2025-11-27T09:08:59.937Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.223Z" + "updatedAt": "2025-11-27T09:08:59.920Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.223Z" + "updatedAt": "2025-11-27T09:08:59.931Z" } } }, "037cf7beb5f9d2290c0e219686b1115e8e4b773c79f541f5c81f9a4989e58cd3": { "3f6353039db49376892bd891e326535ed8f03543ad08cc2ad5b7bbbe193ee94e": { "jp": { - "updatedAt": "2025-11-26T07:24:12.226Z" + "updatedAt": "2025-11-27T09:08:59.964Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.227Z" + "updatedAt": "2025-11-27T09:08:59.967Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.227Z" + "updatedAt": "2025-11-27T09:08:59.965Z" } } }, "0a6b34520ca8168f8c366dbf6721239ffec9e0995481a49f17e32bfdf43182b3": { "d12d9428ec537b38678164b4a2d6a7eab105d1f3658778da83f05b64228fece8": { "jp": { - "updatedAt": "2025-11-26T07:24:19.080Z" + "updatedAt": "2025-11-27T09:08:59.961Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.080Z" + "updatedAt": "2025-11-27T09:08:59.961Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.226Z" + "updatedAt": "2025-11-27T09:08:59.963Z" } } }, "391cd20c30f8013777a8a8300b0127fdc765340375b9fa4c319adee3b24ec843": { "c91f5ec1d83b0cec76d7a0b4857bf98e46315d814f9cad3887ee4296fdb30001": { "jp": { - "updatedAt": "2025-11-26T07:24:12.229Z" + "updatedAt": "2025-11-27T09:08:59.971Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.229Z" + "updatedAt": "2025-11-27T09:08:59.974Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.229Z" + "updatedAt": "2025-11-27T09:08:59.972Z" } } }, "4fb36325d48e506203d8d75bcf6b70879d8bb4bd5ac0aef7b03cf1d784b85934": { "e592ec6dc8b770289b11562b8d28fce8a2ed7c9589b8caa85832638eef552890": { "jp": { - "updatedAt": "2025-11-26T07:24:12.236Z" + "updatedAt": "2025-11-27T09:08:59.998Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.237Z" + "updatedAt": "2025-11-27T09:08:59.999Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.237Z" + "updatedAt": "2025-11-27T09:08:59.999Z" } } }, "54668b892baede02e5b6a5cbaf788773fafac8277e523ed65fc920f4ea6df2de": { "0163d4482566b616b6e411361068fbb4094a1c1d66cab5c5f906a2faf1fe96f8": { "jp": { - "updatedAt": "2025-11-26T07:24:12.236Z" + "updatedAt": "2025-11-27T09:08:59.997Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.080Z" + "updatedAt": "2025-11-27T09:08:59.960Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.080Z" + "updatedAt": "2025-11-27T09:08:59.960Z" } } }, "59d8ec79d616c3429926d7db76bd740cbaafbbb1efd8c22b46480f65f400d6ed": { "a215229132a79542224dba0890d25487c4b0a3cc5a0109d4622445912b1ad347": { "jp": { - "updatedAt": "2025-11-26T07:24:12.226Z" + "updatedAt": "2025-11-27T09:08:59.963Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.226Z" + "updatedAt": "2025-11-27T09:08:59.963Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.225Z" + "updatedAt": "2025-11-27T09:08:59.962Z" } } }, "5ad0090f8bb37d66ad4ec384fd8c183a6ce6d85bd5c293bdc484cc9f40bbfc3d": { "fa3251d9fbc086f42e5d133962432d1e0e3306745b593aa2bc755f7b16f5bfa2": { "jp": { - "updatedAt": "2025-11-26T07:24:12.227Z" + "updatedAt": "2025-11-27T09:08:59.966Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.227Z" + "updatedAt": "2025-11-27T09:08:59.966Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.226Z" + "updatedAt": "2025-11-27T09:08:59.965Z" } } }, "67deff08df6c97036b3da071e7956e16555880aeb53c7d8ac63d1316e5f89993": { "8b19006f70430697684ec4194432408cb6d68b05965376bdeba185e83774be1d": { "jp": { - "updatedAt": "2025-11-26T07:24:12.226Z" + "updatedAt": "2025-11-27T09:08:59.965Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.226Z" + "updatedAt": "2025-11-27T09:08:59.964Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.080Z" + "updatedAt": "2025-11-27T09:08:59.961Z" } } }, "72054126de2c0ba649ef4842d3a88e42bc8fbabd3ec579abd629308399d48364": { "f53eec1c24f726e22bbfdd53d757a2f052bbadb6e11837183028dab74cbef510": { "jp": { - "updatedAt": "2025-11-26T07:24:19.076Z" + "updatedAt": "2025-11-27T09:08:59.953Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.076Z" + "updatedAt": "2025-11-27T09:08:59.953Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.075Z" + "updatedAt": "2025-11-27T09:08:59.951Z" } } }, "79354c33a23d98f8b63fe6e965aef5d6b18cdc962e36d20a3b148d8cf335f86c": { "a1b7db6e0aac3869ff670ca64a57cc2cb592944192a99aea022777ca4d6ae73a": { "jp": { - "updatedAt": "2025-11-26T07:24:19.078Z" + "updatedAt": "2025-11-27T09:08:59.957Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.077Z" + "updatedAt": "2025-11-27T09:08:59.956Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.078Z" + "updatedAt": "2025-11-27T09:08:59.957Z" } } }, "8ef8c9df9ddafcf602e81139aa8e6731772a4658d96021c4f2181a1d5e213669": { "bbc0b523bb0b92fbabe619f5570db6bf3895fcc93bc57a5e31d9f3b2110f036d": { "jp": { - "updatedAt": "2025-11-26T07:24:19.079Z" + "updatedAt": "2025-11-27T09:08:59.959Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.079Z" + "updatedAt": "2025-11-27T09:08:59.959Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.079Z" + "updatedAt": "2025-11-27T09:08:59.958Z" } } }, "9a882460cbd2fdc9c5ff521d87a5f2d2b7ccd55f1ba81bfb3906e7ca923d1c1e": { "437e57c81c3f0872003cb47aa8df2359ae68ecc690d887ec26b6e38a740144f6": { "jp": { - "updatedAt": "2025-11-26T07:24:19.076Z" + "updatedAt": "2025-11-27T09:08:59.954Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.076Z" + "updatedAt": "2025-11-27T09:08:59.954Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.077Z" + "updatedAt": "2025-11-27T09:08:59.955Z" } } }, "ad780b9bfd73ed606b7968549e04e8b3334085724088340ad05f2447559d540f": { "2bddef7ed07c45258897c9370efaa505180d67c313bb2d16ef2c830e5636aa00": { "jp": { - "updatedAt": "2025-11-26T07:24:12.226Z" + "updatedAt": "2025-11-27T09:08:59.962Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.225Z" + "updatedAt": "2025-11-27T09:08:59.961Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.075Z" + "updatedAt": "2025-11-27T09:08:59.951Z" } } }, "ae79c700aca5153218493e8a943d16630b2f7ea345ab07e3105236857b43d93b": { "b1e073c8374abc5e997e5c6b5beb49db3202f0731072d2c28d7fbb0d58ae5e38": { "jp": { - "updatedAt": "2025-11-26T07:24:12.229Z" + "updatedAt": "2025-11-27T09:08:59.970Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.228Z" + "updatedAt": "2025-11-27T09:08:59.968Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.228Z" + "updatedAt": "2025-11-27T09:08:59.969Z" } } }, "cad443b0bb3344ed063f7aa4c7fc2b79aced5e32830119e2376d8bc59ea14c52": { "7d224b4658e83885570c772a1a61546603db3deadf2539b9ba2ed630cb97e6a6": { "jp": { - "updatedAt": "2025-11-26T07:24:19.076Z" + "updatedAt": "2025-11-27T09:08:59.953Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.075Z" + "updatedAt": "2025-11-27T09:08:59.952Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.076Z" + "updatedAt": "2025-11-27T09:08:59.954Z" } } }, "ceefbdcea6747301b15ae01324b1afd1ac12aa220ed2fe99add6fbe53f6c7269": { "5840e875e6ec0ff5abbf5480df1b95d85a50786763ab037f67b711d24e4e67c7": { "jp": { - "updatedAt": "2025-11-26T07:24:19.076Z" + "updatedAt": "2025-11-27T09:08:59.953Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.075Z" + "updatedAt": "2025-11-27T09:08:59.951Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.077Z" + "updatedAt": "2025-11-27T09:08:59.955Z" } } }, "d4d0c35c5f0beed1c59fef3df7f5bfb3c862a52553491c973702a3bc2127649b": { "57ffcbf7d6cac66182cfea77cf8aba9e7c9e489b22f114253119e9ff7f8c1f83": { "jp": { - "updatedAt": "2025-11-26T07:24:19.074Z" + "updatedAt": "2025-11-27T09:08:59.950Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.078Z" + "updatedAt": "2025-11-27T09:08:59.957Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.079Z" + "updatedAt": "2025-11-27T09:08:59.958Z" } } }, "e14b170922435b64e35287ad9833a81f16ff54cafad9dec0721b50d4150e5eff": { "a7e402c7578841050808aadfed7d6deea52ece0e68f8352e2e942645abf29aa1": { "jp": { - "updatedAt": "2025-11-26T07:24:19.075Z" + "updatedAt": "2025-11-27T09:08:59.951Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.075Z" + "updatedAt": "2025-11-27T09:08:59.951Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.076Z" + "updatedAt": "2025-11-27T09:08:59.953Z" } } }, "f613caf640545aa0661fb14392a49a46e530351b4d92bd137405952d82f5b4c8": { "d8b96ae66a4502def2f78fdd03f27807df147056c6b3fc7bc330500d5a9451ba": { "jp": { - "updatedAt": "2025-11-26T07:24:19.076Z" + "updatedAt": "2025-11-27T09:08:59.952Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.075Z" + "updatedAt": "2025-11-27T09:08:59.952Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.076Z" + "updatedAt": "2025-11-27T09:08:59.953Z" } } }, "648b00935dbd871b726296d698650b456ca7a653fa072fd74ce364e23a608928": { "ebc9c5357fa68d5d160cb6ddf6f938a834ac5bfc24d527684b3b9feaa9bc6a60": { "jp": { - "updatedAt": "2025-11-26T07:24:12.228Z" + "updatedAt": "2025-11-27T09:08:59.967Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.227Z" + "updatedAt": "2025-11-27T09:08:59.966Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.227Z" + "updatedAt": "2025-11-27T09:08:59.966Z" } } }, "6d063f7195776042aa3f0a6d982cef56abab4e4b689ea926e2fc79ed09f5a2ff": { "cdca3b6d03d5aff13d620991a578cf9aae185e67396d308d55838c9401281d25": { "jp": { - "updatedAt": "2025-11-26T07:24:12.228Z" + "updatedAt": "2025-11-27T09:08:59.968Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.228Z" + "updatedAt": "2025-11-27T09:08:59.969Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.227Z" + "updatedAt": "2025-11-27T09:08:59.967Z" } } }, @@ -20307,127 +21462,130 @@ }, "000b1489bccc8788cf74aa6329f6c98ad06511f167f46f1b934a958a5c6ce2b4": { "ru": { - "updatedAt": "2025-11-26T07:24:19.074Z" + "updatedAt": "2025-11-27T09:08:59.950Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.074Z" + "updatedAt": "2025-11-27T09:08:59.950Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:19.075Z" + "updatedAt": "2025-11-27T09:08:59.950Z" } } }, "99b41ad75a6b23d70cb86b644a533c095785f9bb812c802ab52b650473d678ce": { "aa16d1a33d3312895cbf47d1ede82586dfb4df0a3507111d6cc8823a5446a979": { "jp": { - "updatedAt": "2025-11-26T07:24:12.229Z" + "updatedAt": "2025-11-27T09:08:59.972Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.225Z" + "updatedAt": "2025-11-27T09:08:59.962Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.228Z" + "updatedAt": "2025-11-27T09:08:59.968Z" } } }, "be4a5f793e39d6e7b18691ba8685878af8c580f898c9f09efc5b93e0979b3902": { "b95eddde3a53a14028e00000ea72057696b55e352e2a30cb66fda415c9ba5d5e": { "jp": { - "updatedAt": "2025-11-26T07:24:12.227Z" + "updatedAt": "2025-11-27T09:08:59.966Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.229Z" + "updatedAt": "2025-11-27T09:08:59.970Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.228Z" + "updatedAt": "2025-11-27T09:08:59.969Z" } } }, "c6fb4739e8e0ce948c34c03ed0f585498d9b45c24d566dfb8456926c4160207b": { "1d24888ce8aa77edfe5838c52a804ab3149a5d9497f036556a3e08576311a7ea": { "jp": { - "updatedAt": "2025-11-26T07:24:12.236Z" + "updatedAt": "2025-11-27T09:08:59.998Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.237Z" + "updatedAt": "2025-11-27T09:08:59.998Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.237Z" + "updatedAt": "2025-11-27T09:08:59.998Z" } } }, "d917e72b0a533c5af5b78c94fe1c05954dfd7ee48fb7ef7ab50f924f25fd68d2": { "b98abd6c9ba813c4b4a7cd9bc3018c8d18d3b4e71c0ec5233cf5d8da0a0f0441": { "jp": { - "updatedAt": "2025-11-26T07:24:12.229Z" + "updatedAt": "2025-11-27T09:08:59.971Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.230Z" + "updatedAt": "2025-11-27T09:08:59.974Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.230Z" + "updatedAt": "2025-11-27T09:08:59.975Z" } } }, "e05df611d62735d38ef4d916bb8f4ebe7a8d79a8773dcc1e94584527d5291d29": { "6ed109f9852559b92ce5667c817e8c2bc706b8ada65ecb41dd89ea0a07d5a71d": { "jp": { - "updatedAt": "2025-11-26T07:24:12.227Z" + "updatedAt": "2025-11-27T09:08:59.965Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.227Z" + "updatedAt": "2025-11-27T09:08:59.966Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.226Z" + "updatedAt": "2025-11-27T09:08:59.964Z" } } }, "8e4cc87be65a0de0b75cdf694f1e368b68e721094e28ad05d1ab2af1aa7c97c2": { "b4c7e25600e2e0bab1150a0a7777cdce0d61b9c3e50a9c73e33bae121c92cbba": { "jp": { - "updatedAt": "2025-11-26T07:24:12.268Z" + "updatedAt": "2025-11-27T09:09:00.137Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.268Z" + "updatedAt": "2025-11-27T09:09:00.136Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.268Z" + "updatedAt": "2025-11-27T09:09:00.137Z" } } }, "9dbbdc5c5acc11dc5874d8f84c2ec9210659a18cdd63bcc17e5b9addd0e11761": { "ca5dbd38b58fcc4d7a89bbb3e287de8dd7982f758f2a8e314589026ceed00758": { "jp": { - "updatedAt": "2025-11-26T07:24:12.266Z" + "updatedAt": "2025-11-27T09:09:00.133Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.273Z" + "updatedAt": "2025-11-27T09:09:00.149Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.084Z" + "updatedAt": "2025-11-27T09:09:00.110Z" } } }, "a1ae550295a483325655e321e7db058409614a56e29a23b67cbb7b001c387ca1": { "8978ba1f0ad1f751ccb53c78a3aacb61cbebe5e747e9d35fcdd7d9a45f55b790": { "jp": { - "updatedAt": "2025-11-26T07:24:19.085Z" + "updatedAt": "2025-11-27T09:09:00.111Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.267Z" + "updatedAt": "2025-11-27T09:09:00.134Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.267Z" + "updatedAt": "2025-11-27T09:09:00.135Z" } } }, "61f0a8604915cb104525b446cc68ebd80cf8899ebf0fa257572d6237e547d3a5": { "970fd98b5f6270b7a603548bf2a408b17c9f3faf502458492697c9181d1e0f94": { "ru": { - "updatedAt": "2025-11-22T00:01:34.576Z" + "updatedAt": "2025-11-27T09:08:59.377Z" }, "zh": { - "updatedAt": "2025-11-22T00:01:34.576Z" + "updatedAt": "2025-11-27T09:08:59.377Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:59.377Z" } }, "d63ffc42f5b7b98aca156ce3be1b5c567dc891c0a9cf6416b823b2f914a1bd16": { @@ -20445,10 +21603,13 @@ "757c782e8d474da0f84ccfdac904b2cece14a9ace176070652ca6e68725754d8": { "75153ddf88597dcf7d4845c82be2f7157f5b54a5600d6f87d0260f20627fa6ba": { "ru": { - "updatedAt": "2025-11-22T00:01:34.577Z" + "updatedAt": "2025-11-27T09:08:59.698Z" }, "zh": { - "updatedAt": "2025-11-22T00:01:34.577Z" + "updatedAt": "2025-11-27T09:08:59.698Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:59.698Z" } }, "4123bf4754603cd137b2c347ddc2ecbf727880d70156ebaba4224dfc6513ccdf": { @@ -20466,10 +21627,13 @@ "9191804c69304243793618ca68f05dc95dbe1536164c430808dfe34588c8aee2": { "84b2de69f847920fc63784bf74c5ca8579b39a03021b52b82da7179f93f2c1ec": { "ru": { - "updatedAt": "2025-11-22T00:01:34.577Z" + "updatedAt": "2025-11-27T09:08:52.116Z" }, "zh": { - "updatedAt": "2025-11-22T00:01:34.577Z" + "updatedAt": "2025-11-27T09:08:52.116Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:52.116Z" } }, "027d2488fe130352aa6298012c4d7a267915572c0674765bb593b91d195456d9": { @@ -20487,10 +21651,13 @@ "955f5f9d51c1666e2ab36912b9d7ce9512a594a94c3d4f68bbd34dc0b4b29a4e": { "6f46812ccb3dc07ac1bf4b75fa6d2db62eebab5e2babb299b409ef721772b3fc": { "ru": { - "updatedAt": "2025-11-22T00:01:34.577Z" + "updatedAt": "2025-11-27T09:08:52.261Z" }, "zh": { - "updatedAt": "2025-11-22T00:01:34.577Z" + "updatedAt": "2025-11-27T09:08:52.261Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:52.261Z" } }, "2020a467b74c2031b09501bd31ebb2d005e1c3d366aa4673be3ded168b7cf3c3": { @@ -20508,10 +21675,13 @@ "a9a32885aec922307101cfef7600ae677391595085fcd6297468544b56552a8e": { "949dc5765882d3049a833f98a36f43ad1154c9e9efef069a0addfb9756f011ff": { "ru": { - "updatedAt": "2025-11-22T00:01:34.578Z" + "updatedAt": "2025-11-27T09:08:51.892Z" }, "zh": { - "updatedAt": "2025-11-22T00:01:34.578Z" + "updatedAt": "2025-11-27T09:08:51.893Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:51.892Z" } }, "7a5bb2f087c25f879701711ef082d1c4f96849b9e503986360b56ef39c6c63f9": { @@ -20529,10 +21699,13 @@ "ae8f86a4950495ec40a22f13e62e97bb26b60535bf2661e78523aa5c7694d172": { "69eab969dd3a4deea83cb72fce308099ba9f5653da74e24c0d5b6729d1d35e7e": { "ru": { - "updatedAt": "2025-11-22T00:01:34.579Z" + "updatedAt": "2025-11-27T09:08:52.000Z" }, "zh": { - "updatedAt": "2025-11-22T00:01:34.579Z" + "updatedAt": "2025-11-27T09:08:51.989Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:52.000Z" } }, "dd283d1a28e64b9c3a918e0d3bde3c4a033fea0dbd6f195585d20309afb34e4b": { @@ -20550,10 +21723,13 @@ "b56483af638a1b6f0944e0c00f0fa305176ee14ac4e45829309f7b6e538490d3": { "170d46c76ba9a5cd8d872d1559290521006430ff9cc8cdcc56476d5691ac04ce": { "ru": { - "updatedAt": "2025-11-22T00:01:34.579Z" + "updatedAt": "2025-11-27T09:08:59.678Z" }, "zh": { - "updatedAt": "2025-11-22T00:01:34.579Z" + "updatedAt": "2025-11-27T09:08:59.678Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:59.678Z" } }, "577ed62b48635c445eebeacbb88dbd39baf7a0d333daf557dafed6c585ca94ea": { @@ -20571,10 +21747,13 @@ "d77d62a6594de01ac3e3969fc055ae87ccde060e7d7acddbf4ec2e3d79a2e678": { "6de3dd85799677d22dd193907cc88a15090aecc206e16c295ce44d33fa8561fe": { "ru": { - "updatedAt": "2025-11-22T00:01:34.579Z" + "updatedAt": "2025-11-27T09:08:59.866Z" }, "zh": { - "updatedAt": "2025-11-22T00:01:34.579Z" + "updatedAt": "2025-11-27T09:08:59.852Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:59.865Z" } }, "cc7f72228fd4c5bc53774460630b9517e289e1f5383ef462cb88faed6f738408": { @@ -20592,10 +21771,13 @@ "efe7462318a21cb44aed58f2c59069ee34b55da9d484d24f8da7d81958d002e7": { "3822a7e27cb2335f257b56b64020f994763bb456bdee4ebe1687086175a2ee2c": { "ru": { - "updatedAt": "2025-11-22T00:01:34.580Z" + "updatedAt": "2025-11-27T09:08:59.490Z" }, "zh": { - "updatedAt": "2025-11-22T00:01:34.580Z" + "updatedAt": "2025-11-27T09:08:59.490Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:59.490Z" } }, "9a3bedc470ecb7d70c00093922bfd5a3ad5036d83142a20658aba095fca0c285": { @@ -20613,13 +21795,13 @@ "466fe68cf77ba8d2f7e6b11a62dcea8f2b8466f8161a1a4fb8352442e971815f": { "0fb852baff9f99f784eb97ea0fe1e81f329d845d7e142f0cf03f1c59b7c10b6e": { "ru": { - "updatedAt": "2025-11-26T07:24:02.661Z" + "updatedAt": "2025-11-27T09:08:51.675Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.056Z" + "updatedAt": "2025-11-27T09:08:51.679Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.659Z" + "updatedAt": "2025-11-27T09:08:51.669Z" } }, "35ad145cf388d16f5d4a4011168a1fc7287db6205d3337996d98df0726ff1b0f": { @@ -20634,26 +21816,26 @@ "16c5698666ea7909d9e1753e9b13a5de1a08200f19d637afa8cab711a0379f73": { "38ea5377628be1984cefdabbe1181d528ddf34276864ec19a7193979c8dca03a": { "zh": { - "updatedAt": "2025-11-26T07:24:02.662Z" + "updatedAt": "2025-11-27T09:08:51.676Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.663Z" + "updatedAt": "2025-11-27T09:08:51.678Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.661Z" + "updatedAt": "2025-11-27T09:08:51.674Z" } } }, "85911f3bccb6d5539862e976203980d7d51391821089a818a002e7424e1242da": { "d7b1a435f7e4fe293383e5e8731be7cd7008caf825855a2e246a89ce3676aa9a": { "zh": { - "updatedAt": "2025-11-26T07:24:02.662Z" + "updatedAt": "2025-11-27T09:08:51.677Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.057Z" + "updatedAt": "2025-11-27T09:08:51.681Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.660Z" + "updatedAt": "2025-11-27T09:08:51.673Z" } }, "4ca4488b6240f0969f58775cdd28b38ea19b72d09ed672806dd6066698e103b1": { @@ -20668,13 +21850,13 @@ "237a635525e427bffb1c840b646e1b41486b8ccabc7712217a3d66d8c582f1b8": { "727edae2b97b38f4fc6c0b0dd353075d4fe831d345dda64ac9471ceaf897e490": { "zh": { - "updatedAt": "2025-11-26T07:24:02.663Z" + "updatedAt": "2025-11-27T09:08:51.677Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.661Z" + "updatedAt": "2025-11-27T09:08:51.675Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.661Z" + "updatedAt": "2025-11-27T09:08:51.674Z" } }, "b1a18bb55dc19c1ae6d59cc1d7b85fd42acff628d3ca1636bfb8236189f4e211": { @@ -20692,13 +21874,13 @@ "7f4450440bea714d4def4ce9d273c25160fbc93f8195d945039db1f03871b626": { "98ef39e86680ea8421985ec9e48a11480382a84780d7c51e21ba7c7c08ba5de3": { "zh": { - "updatedAt": "2025-11-26T07:24:02.651Z" + "updatedAt": "2025-11-27T09:08:51.656Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.651Z" + "updatedAt": "2025-11-27T09:08:51.656Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.650Z" + "updatedAt": "2025-11-27T09:08:51.654Z" } }, "046a9d5b6025a5438969893155368430145da58084c1a1cdb51b2f442bd31728": { @@ -20716,13 +21898,13 @@ "96339230d0b0662c9043872f701165e62b1dd1a9ee98448c3678014c12742331": { "f9dcd7d2195374981d74d8864cbac9660f4fe55a672e340bfa424e86bd032bd1": { "zh": { - "updatedAt": "2025-11-26T07:24:02.663Z" + "updatedAt": "2025-11-27T09:08:51.678Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.659Z" + "updatedAt": "2025-11-27T09:08:51.671Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.659Z" + "updatedAt": "2025-11-27T09:08:51.671Z" } }, "6e8878bf1b9d227317cb48a45ab9134707488c84ad6fd609253a2e8ba3d90635": { @@ -20737,13 +21919,13 @@ "7b1152a9f1bfab485338afd2d917ac4d27b6ac598d4df8c416b5d34f5f2f2dc6": { "e85d9475b25d51b62300a450688edb90649a6b929805c4c6c7dc02c5c82425fb": { "ru": { - "updatedAt": "2025-11-26T07:24:02.651Z" + "updatedAt": "2025-11-27T09:08:51.656Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.645Z" + "updatedAt": "2025-11-27T09:08:51.630Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.652Z" + "updatedAt": "2025-11-27T09:08:51.657Z" } }, "77b3f7333c54264798591573269c51eb187a6530077b8c89d00454a32b3814c7": { @@ -20758,13 +21940,13 @@ "ff3c9f598e696982267c2ce9a91a552bebc66583c1163dc1c4b27f82c5102f1d": { "128e8ba5fd3b5e0981c42ebd31c5b3e87b6845262805a4f4bff3b70534bfda44": { "ru": { - "updatedAt": "2025-11-26T07:24:02.663Z" + "updatedAt": "2025-11-27T09:08:51.678Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.659Z" + "updatedAt": "2025-11-27T09:08:51.670Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.658Z" + "updatedAt": "2025-11-27T09:08:51.668Z" } }, "21345561752f0d94aea8069e30373e2f370e4ba9287cafef0820ff4937dc0a05": { @@ -20779,13 +21961,13 @@ "0361e95538168e72e0cf9076b4f8a823f82bca2acba30f30499d1d7ab6a5509f": { "d46f5caa45acdc3ea0cac4ee761116eca50f70acb1faa2569b6101636d3704f8": { "zh": { - "updatedAt": "2025-11-26T07:24:02.663Z" + "updatedAt": "2025-11-27T09:08:51.679Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.056Z" + "updatedAt": "2025-11-27T09:08:51.680Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.056Z" + "updatedAt": "2025-11-27T09:08:51.680Z" } }, "7eff5614e108ffbe8fdbb7cb7a60ce43f1c34abb8dce2015fa7c6e289db7874f": { @@ -20800,13 +21982,13 @@ "4914840b74cd4cd05b93446005c1a3f9b45c7e7816eb8b20c953782a78417420": { "66ffb1d1eb8cc149ea48f7ecfeda0ca180b36051bed03928a1992c631dc4c19a": { "zh": { - "updatedAt": "2025-11-26T07:24:12.056Z" + "updatedAt": "2025-11-27T09:08:51.679Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.658Z" + "updatedAt": "2025-11-27T09:08:51.669Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.661Z" + "updatedAt": "2025-11-27T09:08:51.673Z" } }, "40abf84cb8f86fa1a58b9ec5523ea457c40aaf25e3b348ce068ffc50600529bd": { @@ -20821,13 +22003,13 @@ "7c40f4e2df36269b352d83d988edf0d606726b28f6527552e7eea3bbecafdef3": { "199bb81cde4d12c23b1adc97c7e2bce05a479079d23a4bb65c6826ef95452990": { "ru": { - "updatedAt": "2025-11-26T07:24:02.652Z" + "updatedAt": "2025-11-27T09:08:51.657Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.649Z" + "updatedAt": "2025-11-27T09:08:51.652Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.652Z" + "updatedAt": "2025-11-27T09:08:51.657Z" } }, "370a91b8533a723d2e4b1549c35c6735c837f2f50c1c4d609903126372f45d30": { @@ -20842,13 +22024,13 @@ "1eff56196650aabbed5f57974122db842d54e3093cc55755e2f4b980a957f4ac": { "598e57a0788cdc232382a72f993fe05e0d9a2ec8e815e0b23e6780d39b245171": { "zh": { - "updatedAt": "2025-11-26T07:24:12.056Z" + "updatedAt": "2025-11-27T09:08:51.680Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.659Z" + "updatedAt": "2025-11-27T09:08:51.670Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.660Z" + "updatedAt": "2025-11-27T09:08:51.673Z" } }, "4adeee00af2b7dc1689945fa1a3ea72870eb8d82635d23c24f5afacdaee2d9cc": { @@ -20863,13 +22045,13 @@ "3c95fa2e161d494b4ae0ef9bf3131f3b028f13b824f5b7ede9ad688d11b58387": { "904fe0150e0e8c168afe250519fee5a4c27e23da832c312dcab667da64fa503d": { "zh": { - "updatedAt": "2025-11-26T07:24:12.056Z" + "updatedAt": "2025-11-27T09:08:51.680Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.659Z" + "updatedAt": "2025-11-27T09:08:51.669Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.662Z" + "updatedAt": "2025-11-27T09:08:51.676Z" } }, "296904d83e2f05abd0d201b63756e4993fc070bdb04cab19f7310a5f4982f1f8": { @@ -20884,13 +22066,13 @@ "19260fee9e23907e67f7f4589d997bab22cbabd4ffa0aa96806703a3b19aad78": { "1352a2dbb90191a61432180810a0431b454c526d658886e1c33fdb1c71cfc2bc": { "zh": { - "updatedAt": "2025-11-26T07:24:02.658Z" + "updatedAt": "2025-11-27T09:08:51.668Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.660Z" + "updatedAt": "2025-11-27T09:08:51.672Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.658Z" + "updatedAt": "2025-11-27T09:08:51.668Z" } }, "7032d2644260720142d73bb5705b9bb1dd26018cb12c421cb43c6bd87452858c": { @@ -20905,13 +22087,13 @@ "c71190c424029f1f3166b0dc0c975e43b747cc77aaa7477e6c8834baafd715ec": { "40fb6fb53bc03ff95d4c2a5b88f33db598b6bbba4a8c8273a31dff8b7c9a3fcd": { "zh": { - "updatedAt": "2025-11-26T07:24:02.644Z" + "updatedAt": "2025-11-27T09:08:51.548Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.650Z" + "updatedAt": "2025-11-27T09:08:51.654Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.650Z" + "updatedAt": "2025-11-27T09:08:51.653Z" } }, "35eb622d4a1673d7a2b49ac6d4fbe5151e7dad205dad7c16e0e36879a5bbb7da": { @@ -20926,13 +22108,13 @@ "3490c72ebec2d9960e4cc311de931030fc0f1de3f2421d0d2a30876926a983e9": { "20143fdffbf6f144ae3f0a848c2c4135b1dd5359078f18a35f86e5ad0368f0bc": { "ru": { - "updatedAt": "2025-11-26T07:24:02.647Z" + "updatedAt": "2025-11-27T09:08:51.648Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.650Z" + "updatedAt": "2025-11-27T09:08:51.654Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.651Z" + "updatedAt": "2025-11-27T09:08:51.655Z" } }, "716d4abd1d53aff3d2fbee3ec30720b9388d98d71e41c650e6551e5ee79417a5": { @@ -20947,13 +22129,13 @@ "df1cbab9f5b7839553ad76ad0b3799099daaf2d5817b6bc1eea8369de5c5842a": { "3a49b42cc312e4959cc3883b924f895ba1f241473240bcbd42a5ff859048c600": { "zh": { - "updatedAt": "2025-11-26T07:24:12.060Z" + "updatedAt": "2025-11-27T09:08:51.737Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.061Z" + "updatedAt": "2025-11-27T09:08:51.737Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.061Z" + "updatedAt": "2025-11-27T09:08:51.737Z" } }, "66576350fa60992186887698075dc59ba76bb735288c2751fa40b91ce10698f2": { @@ -20968,13 +22150,13 @@ "d133c163191364466953c00a3494895f7b213291fa7eec0a3286c15ab6588c48": { "5b79efc25b16535ce983e05832f4052257d44d2790af29323a727be1048bc054": { "ru": { - "updatedAt": "2025-11-26T07:24:02.647Z" + "updatedAt": "2025-11-27T09:08:51.649Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.647Z" + "updatedAt": "2025-11-27T09:08:51.648Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.646Z" + "updatedAt": "2025-11-27T09:08:51.647Z" } }, "de7e11301702e7f96f6fbd025a9103d0ed8c30b19a1bb2d879dbd161c1061ad6": { @@ -20989,13 +22171,13 @@ "5ae13595aec14e94efae48ed27bd30882ef99ca22e926c6eecac01f4a69b6e60": { "4c6c9c998098906955cd0a416322eaf10b8ceb9a33df69bb90b4e0206e58399d": { "ru": { - "updatedAt": "2025-11-26T07:24:02.648Z" + "updatedAt": "2025-11-27T09:08:51.650Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.649Z" + "updatedAt": "2025-11-27T09:08:51.652Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.647Z" + "updatedAt": "2025-11-27T09:08:51.649Z" } }, "832ebe1b67ef5ee07034a93035676b1d6ba9f009d34428f33f25ec2daaa43771": { @@ -21010,13 +22192,13 @@ "52f1e721b650aa5a8bb67053afa7caf447a7332e92f416526d36e8941d726d04": { "8c41257fcdc2d116e76c9a1609bc65adf58513acff260b8f2aa36d74bccf31da": { "zh": { - "updatedAt": "2025-11-26T07:24:02.659Z" + "updatedAt": "2025-11-27T09:08:51.669Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.660Z" + "updatedAt": "2025-11-27T09:08:51.672Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.660Z" + "updatedAt": "2025-11-27T09:08:51.673Z" } }, "630e5b84780be36656bc937645ed65fb88179d11247d1e85ea1205ed29e6f931": { @@ -21031,13 +22213,13 @@ "5a0ce1710868a408e43b0c9859a80ada3b08b93b0d26cb45f2ea004556e9d2b3": { "ccdecf590d1994e9c17ae91e353b32d2f66c08e379ce1eeb73f06a674afd8375": { "ru": { - "updatedAt": "2025-11-26T07:24:02.648Z" + "updatedAt": "2025-11-27T09:08:51.650Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.648Z" + "updatedAt": "2025-11-27T09:08:51.651Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.648Z" + "updatedAt": "2025-11-27T09:08:51.651Z" } }, "a2d654d0961b9427057876a5b47403d5864939d9a0cc302f7941e73ea9093498": { @@ -21052,13 +22234,13 @@ "9b3e13e23b506d9d9ec9b2c5fbf8b9d2a62e1de7d0175c5f6330498124203aac": { "86c47ff8f3b3666e1a6b49b2c8302b448389e1e3b41ab3b1450e055082821549": { "ru": { - "updatedAt": "2025-11-26T07:24:02.646Z" + "updatedAt": "2025-11-27T09:08:51.645Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.646Z" + "updatedAt": "2025-11-27T09:08:51.647Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.651Z" + "updatedAt": "2025-11-27T09:08:51.655Z" } }, "8c1816d77d3551c7d6dd5710ccc8274f66e5809dd3cea3606629893483ebfef7": { @@ -21073,13 +22255,13 @@ "30f843a3827d19f26bae893b6a89699d15924309d3ee0d771f1309eb391c8171": { "a5eb46f97ff75367e3c2a77e86b555adee47157db34a73cbb68c4faa8e14d033": { "ru": { - "updatedAt": "2025-11-26T07:24:02.659Z" + "updatedAt": "2025-11-27T09:08:51.670Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.651Z" + "updatedAt": "2025-11-27T09:08:51.655Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.662Z" + "updatedAt": "2025-11-27T09:08:51.676Z" } }, "655ba8e4e20f3b5f89cae3033f51649118b5face2393e69b8ed2d63f7c170bed": { @@ -21094,13 +22276,13 @@ "15cacb127be1afdc884be3ff13c61ff48d4ae41e28740309f5f445002fb0fa90": { "a9c8fa4f53951ce4026e170171a0517a80777e9037e5bb2f16eab83d3ffaa9cc": { "zh": { - "updatedAt": "2025-11-26T07:24:02.649Z" + "updatedAt": "2025-11-27T09:08:51.653Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.651Z" + "updatedAt": "2025-11-27T09:08:51.655Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.648Z" + "updatedAt": "2025-11-27T09:08:51.651Z" } }, "c6b1ffeb8a927241e2108dbeb02a8cbb166d5b270f1e7cdf770147d6ef83a7d2": { @@ -21115,13 +22297,13 @@ "941b4aa0aa9dbadd0a190a16a820e2bcff3884350dd172d2d70c5e4bc21490d1": { "429135ca177730d77f47327bd61c6aecd212a21d1a4625d711d13a6e0c6886bd": { "ru": { - "updatedAt": "2025-11-26T07:24:12.061Z" + "updatedAt": "2025-11-27T09:08:51.738Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.061Z" + "updatedAt": "2025-11-27T09:08:51.738Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.061Z" + "updatedAt": "2025-11-27T09:08:51.738Z" } }, "d744ea0501987d0d0496e17c8100a30396b41d2cb02d4b4937b9c75678cffd0f": { @@ -21136,13 +22318,13 @@ "43aa5066af84a8c935f0fb2dab57ea37c855c50a8c4bf2fe5da1196726ec9767": { "8102f53c258449f037fd5c8bfbe1d4547d061cf4c8af817be8f9e6c45a4504b0": { "ru": { - "updatedAt": "2025-11-26T07:24:02.660Z" + "updatedAt": "2025-11-27T09:08:51.671Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.660Z" + "updatedAt": "2025-11-27T09:08:51.672Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.660Z" + "updatedAt": "2025-11-27T09:08:51.671Z" } }, "bc18044844f416597eef2c300fc30d72ea362c8100b916b3cde37fd6397a9e41": { @@ -21157,13 +22339,13 @@ "a3a2fbdc5aafe02b0407589bc3e1a8e94202c17584b7025219f1bfd6b9bf4a39": { "4874e6e4325e8473fce83ceca9411bf266bf400e8eb78d3c9e8eec128469d820": { "zh": { - "updatedAt": "2025-11-26T07:24:02.660Z" + "updatedAt": "2025-11-27T09:08:51.672Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.661Z" + "updatedAt": "2025-11-27T09:08:51.675Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.061Z" + "updatedAt": "2025-11-27T09:08:51.739Z" } }, "1b128db269c12be2125d03f195c663118806c04caea0bed54648c79f2879ccee": { @@ -21178,13 +22360,13 @@ "4877e91053b08c2c45734e5085ccf9117e8354554dd8460e2ec3e3afe7aa0ab7": { "1e4f5fb2eb3f3d09c80229402157ba0cccbf2f37d7521185e9cbb71109edeb84": { "ru": { - "updatedAt": "2025-11-26T07:24:02.650Z" + "updatedAt": "2025-11-27T09:08:51.653Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.650Z" + "updatedAt": "2025-11-27T09:08:51.654Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.649Z" + "updatedAt": "2025-11-27T09:08:51.653Z" } }, "ff50c271592348dfa10d95b4d2fa83784b90178a9865e6dcf8c7996829ea7358": { @@ -21199,858 +22381,858 @@ "a444951bd73cb75b037df1739eb17fc3c4057630058e2cd15b863d55feb1e497": { "be2b70c111bb68681c2eb58d9d87da824e86dac80806aaf1af31eb7e683ee46c": { "zh": { - "updatedAt": "2025-11-26T07:24:02.688Z" + "updatedAt": "2025-11-27T09:08:51.831Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.692Z" + "updatedAt": "2025-11-27T09:08:51.837Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.694Z" + "updatedAt": "2025-11-27T09:08:51.840Z" } } }, "b61feee503868b9ae36d297816fda3d2e834c0f1ae6f4deeefcdd9b66b895886": { "4ef342336cc701c4e8d32cd01c1302bec119023fab8a7c695a4baae3e097696f": { "zh": { - "updatedAt": "2025-11-26T07:24:12.057Z" + "updatedAt": "2025-11-27T09:08:51.681Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.059Z" + "updatedAt": "2025-11-27T09:08:51.733Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.059Z" + "updatedAt": "2025-11-27T09:08:51.734Z" } } }, "b2e9e9045947db36c00975d8bf16f27ba366df3f4c68a977779fbf5a78b77948": { "046cb0e8076cf8c0b6c68469e0acc454e928a24cf0dfeb0b83292ecb2957f821": { "zh": { - "updatedAt": "2025-11-26T07:24:02.688Z" + "updatedAt": "2025-11-27T09:08:51.831Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.692Z" + "updatedAt": "2025-11-27T09:08:51.837Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.691Z" + "updatedAt": "2025-11-27T09:08:51.836Z" } } }, "a8580441e057aef43ff213b00764e321caa0062300adad449c1147c6a00554d7": { "803165c43e8eb2cc396419bba2e85a710e5a34fa1c1f8c024a4ef0cd296866fa": { "ru": { - "updatedAt": "2025-11-26T07:24:02.698Z" + "updatedAt": "2025-11-27T09:08:51.845Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.702Z" + "updatedAt": "2025-11-27T09:08:51.853Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.699Z" + "updatedAt": "2025-11-27T09:08:51.846Z" } } }, "581f0a6e4c0d192c8606c68934251365ad7ea4136bd5acf7058f58a76f6d5710": { "ee59cd484bdaa73a60bc061cc701d580ffd417f73fdcd689e3fdd983d9f475d2": { "zh": { - "updatedAt": "2025-11-26T07:24:02.705Z" + "updatedAt": "2025-11-27T09:08:51.859Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.705Z" + "updatedAt": "2025-11-27T09:08:51.860Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:18.903Z" + "updatedAt": "2025-11-27T09:08:59.341Z" } } }, "8d435bf9e6c99e8e1a52f439de6bcbecd2baf3265ece4535053d1e1416ca45c2": { "0c0d01e2f586c0d713dccf1bdfde13a36570342ea30a52d1914566a1af56d594": { "ru": { - "updatedAt": "2025-11-26T07:24:02.699Z" + "updatedAt": "2025-11-27T09:08:51.845Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.701Z" + "updatedAt": "2025-11-27T09:08:51.852Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.701Z" + "updatedAt": "2025-11-27T09:08:51.851Z" } } }, "ff15f334dd81c6f832484d8628568a040ff836d4668005abe916911afbffe911": { "5255a26915e56655751575c9c47141ed725215520f648de9ddb2650d95ec7c9d": { "ru": { - "updatedAt": "2025-11-26T07:24:02.688Z" + "updatedAt": "2025-11-27T09:08:51.831Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.691Z" + "updatedAt": "2025-11-27T09:08:51.836Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.691Z" + "updatedAt": "2025-11-27T09:08:51.837Z" } } }, "84d3a07f6bb23015f78e31d1cc93e61eaf670a2dcee7c14342d97b32fb037866": { "e5b0ff50a5b4e2b593b51ad0606dd79a8525ea9ba7bc58e22bd24ad8c5a925cc": { "ru": { - "updatedAt": "2025-11-26T07:24:02.688Z" + "updatedAt": "2025-11-27T09:08:51.831Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.694Z" + "updatedAt": "2025-11-27T09:08:51.840Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.688Z" + "updatedAt": "2025-11-27T09:08:51.832Z" } } }, "54d5d67f63f4e8a40581478b2c6f0684322d03116d22c84c5ebed5934c483f47": { "04a1c4adbd60bd15811afb47b49c06837b0eb88b3c5f243bc17465571d25d192": { "ru": { - "updatedAt": "2025-11-26T07:24:02.699Z" + "updatedAt": "2025-11-27T09:08:51.846Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.704Z" + "updatedAt": "2025-11-27T09:08:51.857Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.700Z" + "updatedAt": "2025-11-27T09:08:51.849Z" } } }, "fbe38e1b6e52f3e6a217864f12729f9229c6e773c063d08c4fefa0972fe40f33": { "45c2a21595b33f95e98b84bb6f2c46e0dd1efdfbc1f9b42ba02cf96b3dc4ac1e": { "zh": { - "updatedAt": "2025-11-26T07:24:02.699Z" + "updatedAt": "2025-11-27T09:08:51.846Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.702Z" + "updatedAt": "2025-11-27T09:08:51.853Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.700Z" + "updatedAt": "2025-11-27T09:08:51.847Z" } } }, "e9c8787fbd5d3ab34de4fbc2069baaf46f6986970cc7b8edaffc49a991d61cf1": { "7b366931a91740ebcbb465a17f5142106ecae677c271c9b69d08fa475ef502a6": { "ru": { - "updatedAt": "2025-11-26T07:24:02.688Z" + "updatedAt": "2025-11-27T09:08:51.832Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.692Z" + "updatedAt": "2025-11-27T09:08:51.838Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.690Z" + "updatedAt": "2025-11-27T09:08:51.835Z" } } }, "14c0bbca8f7e350393ed679d410ca4b9cd58e0c5ee29885f7e65beae7f51c703": { "82258f2bbaceee1cc2b71c162991c1eb92c67498d494693cd385b4bbbb78fedf": { "zh": { - "updatedAt": "2025-11-26T07:24:02.699Z" + "updatedAt": "2025-11-27T09:08:51.846Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.704Z" + "updatedAt": "2025-11-27T09:08:51.857Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.698Z" + "updatedAt": "2025-11-27T09:08:51.845Z" } } }, "dd1f243e110cd8cd4c72fabd62923f7077ed63859ba2c578b1561943fa5490a9": { "38b8464001ddae6ec2a702908a9a44c1549405c54b818345c5ee01e6079833f1": { "ru": { - "updatedAt": "2025-11-26T07:24:02.706Z" + "updatedAt": "2025-11-27T09:08:51.860Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.901Z" + "updatedAt": "2025-11-27T09:08:59.340Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:18.900Z" + "updatedAt": "2025-11-27T09:08:59.339Z" } } }, "ba14369199fbec0937cc2e6400083d328a65fa21e4191586d4474ff60d50b27a": { "687b275c30319ae8712f2bb22a713be7698df9bf60e3f0a3a92687b0ad5813e5": { "zh": { - "updatedAt": "2025-11-26T07:24:12.070Z" + "updatedAt": "2025-11-27T09:08:51.795Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.071Z" + "updatedAt": "2025-11-27T09:08:51.797Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.073Z" + "updatedAt": "2025-11-27T09:08:51.801Z" } } }, "0aefd7962edb78c98f3d45305d81752ebb2eaf0195c75d6a1cd6e7ad0ef5617a": { "5d1d0d81a87bc16246cc6d195a4d9c9f3090b00692a1dcfb3dd44b533128b6dc": { "ru": { - "updatedAt": "2025-11-26T07:24:02.699Z" + "updatedAt": "2025-11-27T09:08:51.847Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.702Z" + "updatedAt": "2025-11-27T09:08:51.852Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.699Z" + "updatedAt": "2025-11-27T09:08:51.847Z" } } }, "6b0a1864f6fd70f19415c4e085caeeff45b83244daed33758454b88d9859c692": { "ecc79a94c617ae9c2438b3b427bea3004cc3f1e8a3f90157b36f8157166a99c0": { "ru": { - "updatedAt": "2025-11-26T07:24:02.653Z" + "updatedAt": "2025-11-27T09:08:51.658Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.653Z" + "updatedAt": "2025-11-27T09:08:51.658Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.653Z" + "updatedAt": "2025-11-27T09:08:51.659Z" } } }, "543d200284e9587853538717503646bf5a945bb43ccdb3b059dbf4eac4c1219f": { "54eb6cb69d7901f33c8b60f1ebf53444695ba214c41ecd088af34c6dde0d4e44": { "ru": { - "updatedAt": "2025-11-26T07:24:02.706Z" + "updatedAt": "2025-11-27T09:08:51.861Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.904Z" + "updatedAt": "2025-11-27T09:08:59.342Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.706Z" + "updatedAt": "2025-11-27T09:08:51.861Z" } } }, "fb3d54543e5565bc4305346ef7c2d5312674405acb6e193ffaf4fb30ddd7ce71": { "df9135ddc19fc1bbbb29d708bd2c3afbd621e4a67a544ede4538a80aa5b420b7": { "zh": { - "updatedAt": "2025-11-26T07:24:02.706Z" + "updatedAt": "2025-11-27T09:08:51.861Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.706Z" + "updatedAt": "2025-11-27T09:08:51.862Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.705Z" + "updatedAt": "2025-11-27T09:08:51.860Z" } } }, "14b4676b953c664afb277f933e119c8da2f742590c1a9a4bb7b2beee22a7eb7c": { "5ee021b8f49ccf1b18d5dd6f94a9b7418709365c4195a6b0854ae20f5132dd10": { "ru": { - "updatedAt": "2025-11-26T07:24:02.689Z" + "updatedAt": "2025-11-27T09:08:51.832Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.689Z" + "updatedAt": "2025-11-27T09:08:51.834Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.689Z" + "updatedAt": "2025-11-27T09:08:51.834Z" } } }, "0f67bde502826e1dba901c267e553e40b45a88ea2514fac35224b3011c9eee95": { "40ccc189c309d81655c42b58d6550569ed8e72b0cd53cc36991d1ab17eeb62a2": { "ru": { - "updatedAt": "2025-11-26T07:24:02.689Z" + "updatedAt": "2025-11-27T09:08:51.832Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.695Z" + "updatedAt": "2025-11-27T09:08:51.841Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.690Z" + "updatedAt": "2025-11-27T09:08:51.836Z" } } }, "93a056e5b771b1f20f3660dfb370f302960d593ccff14a5684b961c760cac61a": { "b34875547efada966d6f58a27a70b1a17213f7251649cd70a29b9fcfe4aeecfe": { "ru": { - "updatedAt": "2025-11-26T07:24:02.699Z" + "updatedAt": "2025-11-27T09:08:51.847Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.700Z" + "updatedAt": "2025-11-27T09:08:51.850Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.700Z" + "updatedAt": "2025-11-27T09:08:51.848Z" } } }, "ebc5db761ec12b7516bddcdbb93d868ef5c7d1458f56a4288fab25b5e45a980e": { "e20f9f94eb03e49c98c43e022936ac730a22ccaa64a4911703f457858a10f672": { "ru": { - "updatedAt": "2025-11-26T07:24:02.689Z" + "updatedAt": "2025-11-27T09:08:51.833Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.693Z" + "updatedAt": "2025-11-27T09:08:51.838Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.695Z" + "updatedAt": "2025-11-27T09:08:51.841Z" } } }, "f016a1612cced253f74884a4791ce47126fba584f3ee773967310982b7597b83": { "cc687fc17daeeb33c7c5bef1a2bc7ce51ba437f92c4354369ab58a024c2123b9": { "ru": { - "updatedAt": "2025-11-26T07:24:02.689Z" + "updatedAt": "2025-11-27T09:08:51.833Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.690Z" + "updatedAt": "2025-11-27T09:08:51.835Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.690Z" + "updatedAt": "2025-11-27T09:08:51.836Z" } } }, "f657cce435f5bbd4c37d13d06e137048b8588d93820f3ee19d2b600ed82b6819": { "f4e41d0b3fe1c04866d1690f92f407974255a1b7b269dd34af873b60f54ecb09": { "ru": { - "updatedAt": "2025-11-26T07:24:02.706Z" + "updatedAt": "2025-11-27T09:08:51.861Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.902Z" + "updatedAt": "2025-11-27T09:08:59.340Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.705Z" + "updatedAt": "2025-11-27T09:08:51.860Z" } } }, "5a8a41312c127bc8ee51985dd35b7a34db3722502d9dd3b6517218f83ee15209": { "cdc27bc165065afbf272c456901edc7e818c1288e8bf98aa8115b3cc4184e430": { "ru": { - "updatedAt": "2025-11-26T07:24:02.700Z" + "updatedAt": "2025-11-27T09:08:51.848Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.703Z" + "updatedAt": "2025-11-27T09:08:51.855Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.702Z" + "updatedAt": "2025-11-27T09:08:51.853Z" } } }, "bb301384e711a26eac5ab620725ba3651e9a050418e5c4b03409244a6916096a": { "fa37176654ae0b31692c4310f41376cac060e1fac5de1cd5fa4a6795dccc88be": { "ru": { - "updatedAt": "2025-11-26T07:24:02.689Z" + "updatedAt": "2025-11-27T09:08:51.833Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.698Z" + "updatedAt": "2025-11-27T09:08:51.844Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.701Z" + "updatedAt": "2025-11-27T09:08:51.850Z" } } }, "be5b2c5f34f09aeff162abaf45ccf882807b091723c8992305ab5dd6d9d85255": { "a4494efc6991ad7d0de3d84b86e624697071ddfce8e39ebd42923fd6777c8531": { "zh": { - "updatedAt": "2025-11-26T07:24:02.689Z" + "updatedAt": "2025-11-27T09:08:51.834Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.690Z" + "updatedAt": "2025-11-27T09:08:51.834Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.690Z" + "updatedAt": "2025-11-27T09:08:51.835Z" } } }, "b7ac58ff02407e2eedc607e8ffaadc709667604b213c6400361a10c2a2c6e252": { "ae94f635f518e540a73bbd471cee47b91d539ed719fbffdaf358c667006c4bb0": { "zh": { - "updatedAt": "2025-11-26T07:24:02.689Z" + "updatedAt": "2025-11-27T09:08:51.834Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.690Z" + "updatedAt": "2025-11-27T09:08:51.835Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.688Z" + "updatedAt": "2025-11-27T09:08:51.832Z" } } }, "f2566c10efb98a7e07538653cda7cc2135c5c1aaaef306a48e8e753ebc662a1e": { "86c47ff8f3b3666e1a6b49b2c8302b448389e1e3b41ab3b1450e055082821549": { "zh": { - "updatedAt": "2025-11-26T07:24:02.654Z" + "updatedAt": "2025-11-27T09:08:51.660Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.654Z" + "updatedAt": "2025-11-27T09:08:51.660Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.656Z" + "updatedAt": "2025-11-27T09:08:51.665Z" } } }, "c3d6ae1d7c3ab47f1321484233d7e2d4c6960c431966f43a50c94da67e615da5": { "7fe2061b7ffe48c965db16b4f632dfa6a0cb32888881320b91a370311396c437": { "ru": { - "updatedAt": "2025-11-26T07:24:12.077Z" + "updatedAt": "2025-11-27T09:08:51.808Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.076Z" + "updatedAt": "2025-11-27T09:08:51.808Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.077Z" + "updatedAt": "2025-11-27T09:08:51.808Z" } } }, "6f8f89ce13c70fe1235d08203ef798a559154950245f81065ab893d0e5c542e3": { "f96e0b809311db6c2baef6eea1807c7d62c21afafa50f43dcaed5dc333127e20": { "zh": { - "updatedAt": "2025-11-26T07:24:02.700Z" + "updatedAt": "2025-11-27T09:08:51.849Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.703Z" + "updatedAt": "2025-11-27T09:08:51.855Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.703Z" + "updatedAt": "2025-11-27T09:08:51.855Z" } } }, "857f78e82a54d7a2128693b3d739a16697e3d23a8ab3595b336d9da8d6d1d643": { "3fadea060a820d56c666c2cf5cdeb8e49e9c833dfa43de6b17bb735aecf7c763": { "ru": { - "updatedAt": "2025-11-26T07:24:02.700Z" + "updatedAt": "2025-11-27T09:08:51.849Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.703Z" + "updatedAt": "2025-11-27T09:08:51.854Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.703Z" + "updatedAt": "2025-11-27T09:08:51.855Z" } } }, "98f9d0cfd669fd1fa447820ed42dde75e265419fd66cf20c9292293dd4a825b7": { "ef840aa109bf499596594d13130b402a3f00f31d42de8569556571fe1c214cfc": { "ru": { - "updatedAt": "2025-11-26T07:24:02.706Z" + "updatedAt": "2025-11-27T09:08:51.862Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.706Z" + "updatedAt": "2025-11-27T09:08:51.862Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.705Z" + "updatedAt": "2025-11-27T09:08:51.860Z" } } }, "0ccba8d2db72b1884bbc46c41967afaeff1aa84c34d44e471d4f0a6956691e16": { "94c625175686dfb070b11d461168883b7020c135e87e95dc215bd6a1888c5c54": { "ru": { - "updatedAt": "2025-11-26T07:24:02.690Z" + "updatedAt": "2025-11-27T09:08:51.835Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.691Z" + "updatedAt": "2025-11-27T09:08:51.836Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.691Z" + "updatedAt": "2025-11-27T09:08:51.836Z" } } }, "c3624723e67987627989b19cf8887d0607b1cfe3b554bdb9b1a4afe0241fb796": { "394ce4286ff89f65fa6b50578d4a94d4eaf540883591642f71afb2825984bad3": { "zh": { - "updatedAt": "2025-11-26T07:24:12.062Z" + "updatedAt": "2025-11-27T09:08:51.739Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.062Z" + "updatedAt": "2025-11-27T09:08:51.740Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.062Z" + "updatedAt": "2025-11-27T09:08:51.740Z" } } }, "3f0eaac3f28ba8b2234626f11889b6f51135f12393d659a739adcfe6bb3acaee": { "b93542926f20e8394566dc0612022ddaf2939a3fdd8e5ae25b2ba31cb94de320": { "zh": { - "updatedAt": "2025-11-26T07:24:02.654Z" + "updatedAt": "2025-11-27T09:08:51.661Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.657Z" + "updatedAt": "2025-11-27T09:08:51.666Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.653Z" + "updatedAt": "2025-11-27T09:08:51.659Z" } } }, "101a525d5bb936cf99909df3325b1ed7ac0b685ee9889c47f517b4323eba52db": { "fead6f3f426b4d09ad7d10dd975751d5778ec0e92cce0f8ec88ce01950911970": { "zh": { - "updatedAt": "2025-11-26T07:24:12.058Z" + "updatedAt": "2025-11-27T09:08:51.730Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.059Z" + "updatedAt": "2025-11-27T09:08:51.731Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.057Z" + "updatedAt": "2025-11-27T09:08:51.682Z" } } }, "6bc2d77e531374ac95719fbbe878154b867b374b36d2f4e8485da1fa3a3820c6": { "d33c2c466bd3a7370a079c2bfd8752318550c559a12158bcc434cabdaec31040": { "zh": { - "updatedAt": "2025-11-26T07:24:02.700Z" + "updatedAt": "2025-11-27T09:08:51.850Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.702Z" + "updatedAt": "2025-11-27T09:08:51.854Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.698Z" + "updatedAt": "2025-11-27T09:08:51.844Z" } } }, "43bdb45dd285638fe98614183eaf90571d4631d1e726c04b99db3c3faa08af32": { "4ba84b799e9b0e8d9b223c47606c717ef7d6ddd565986bc7b238eb33165681f5": { "ru": { - "updatedAt": "2025-11-26T07:24:02.706Z" + "updatedAt": "2025-11-27T09:08:51.862Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.904Z" + "updatedAt": "2025-11-27T09:08:59.342Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:18.903Z" + "updatedAt": "2025-11-27T09:08:59.341Z" } } }, "fbc3d920f0695e12f892f5ecdcfa4bc88cf0bb49809defb12c39db77838dee89": { "505618685d75d6489d64b01bd2297e8b2e4ce44b92900a9edcf4d95a5eebb475": { "ru": { - "updatedAt": "2025-11-26T07:24:02.655Z" + "updatedAt": "2025-11-27T09:08:51.662Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.657Z" + "updatedAt": "2025-11-27T09:08:51.667Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.657Z" + "updatedAt": "2025-11-27T09:08:51.665Z" } } }, "67e6b09bfe484e48895cf047e4050cb1f08398f2f779e27c7acf3ff69d9c5e8d": { "7b905336c6f753917b4e006f53075b8ba27cb105a18643882989eab9b01e424f": { "ru": { - "updatedAt": "2025-11-26T07:24:02.701Z" + "updatedAt": "2025-11-27T09:08:51.850Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.703Z" + "updatedAt": "2025-11-27T09:08:51.856Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.699Z" + "updatedAt": "2025-11-27T09:08:51.845Z" } } }, "736363d0859d8864ef39d3c2b3906d5ee9e8520ec754a5daaa253102669dbfe3": { "4c2ab8cb337c681d306ce35ffbf49cc6acb8d68b78b1f946b2757bbefd07e898": { "zh": { - "updatedAt": "2025-11-26T07:24:02.701Z" + "updatedAt": "2025-11-27T09:08:51.850Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.702Z" + "updatedAt": "2025-11-27T09:08:51.853Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.701Z" + "updatedAt": "2025-11-27T09:08:51.852Z" } } }, "f9122446fb42667abd4d27483874244c927449544300488e6be5e19f0f5c5196": { "fc2f22b778e933aded713c592fc3c7f36b5925e3b1dddf870b9f00d0d86f3078": { "ru": { - "updatedAt": "2025-11-26T07:24:02.701Z" + "updatedAt": "2025-11-27T09:08:51.851Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.702Z" + "updatedAt": "2025-11-27T09:08:51.853Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.698Z" + "updatedAt": "2025-11-27T09:08:51.845Z" } } }, "235b40c46d2961005ce3297b1e97ffe8edc82de828ff56822b9e32359796e9a9": { "c5ef2e83c2e151559f9dd5524371a9d5b3447d2d1d74ee4818d09823d6de408d": { "zh": { - "updatedAt": "2025-11-26T07:24:02.678Z" + "updatedAt": "2025-11-27T09:08:51.813Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.692Z" + "updatedAt": "2025-11-27T09:08:51.838Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.698Z" + "updatedAt": "2025-11-27T09:08:51.843Z" } } }, "462cdde9af0d98973a369e372516b17fe788292eab3b5888894d73e9cbffb6cd": { "d745f7b346b2c1bf0d164fbdb236d9160be09038c4c9ffee5d2fe13aaa441118": { "zh": { - "updatedAt": "2025-11-26T07:24:12.073Z" + "updatedAt": "2025-11-27T09:08:51.800Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.074Z" + "updatedAt": "2025-11-27T09:08:51.802Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.072Z" + "updatedAt": "2025-11-27T09:08:51.799Z" } } }, "710ad55c0afad6985a560346d1622540e29d92eadcee6064888e0cacbfeda384": { "54f1a9cd08afe76cfdeea722af528c57303609afdc34748e3328885c439ce7bf": { "ru": { - "updatedAt": "2025-11-26T07:24:12.060Z" + "updatedAt": "2025-11-27T09:08:51.734Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.058Z" + "updatedAt": "2025-11-27T09:08:51.684Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.059Z" + "updatedAt": "2025-11-27T09:08:51.731Z" } } }, "0fb5c4c89db0cb83f6bd1cdef9a19071c391929cb24660f2f66de45b10763ba3": { "23aae78ddaf4de455a27e50918cb30da7db97d56977cd4dbe8df7b2e1cd49fc4": { "ru": { - "updatedAt": "2025-11-26T07:24:02.658Z" + "updatedAt": "2025-11-27T09:08:51.667Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.656Z" + "updatedAt": "2025-11-27T09:08:51.664Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.657Z" + "updatedAt": "2025-11-27T09:08:51.666Z" } } }, "45c65db56b87943c8cc881cc85fe81f875a263a988b758817095b2448ebeab1c": { "ef02a49eb6596c142aa773eb78cf22212510b6f1bb9809d02c025e4d34ab82d7": { "zh": { - "updatedAt": "2025-11-26T07:24:02.679Z" + "updatedAt": "2025-11-27T09:08:51.814Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.076Z" + "updatedAt": "2025-11-27T09:08:51.808Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.679Z" + "updatedAt": "2025-11-27T09:08:51.813Z" } } }, "b58d28384b38660cb355b5217eb858f4bc83ad7155278c40ae4663b230c74fd8": { "f5263d91719fc0aa0d4dc51eba8629ecf707553c3c6fd5144e8f1ca748775d75": { "zh": { - "updatedAt": "2025-11-26T07:24:02.675Z" + "updatedAt": "2025-11-27T09:08:51.783Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.068Z" + "updatedAt": "2025-11-27T09:08:51.790Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.674Z" + "updatedAt": "2025-11-27T09:08:51.780Z" } } }, "8d7c4ba98d5f5bbc6e42b2591da7f2b20f246b15396b0ab2075839fef18b5697": { "157c626f8a13dd4dc09e8313f1bf33c397d35bf379c354eb9d973e648827bef2": { "zh": { - "updatedAt": "2025-11-26T07:24:12.073Z" + "updatedAt": "2025-11-27T09:08:51.801Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.076Z" + "updatedAt": "2025-11-27T09:08:51.806Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.071Z" + "updatedAt": "2025-11-27T09:08:51.798Z" } } }, "4d0528f558f80f4881563682077f001ad134becf467e305c86fc84dd7697b089": { "42d9d42562a4f705923103bf4a3b7173addf1f1dd5adc163a37dbd936aa49889": { "ru": { - "updatedAt": "2025-11-26T07:24:02.679Z" + "updatedAt": "2025-11-27T09:08:51.814Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.677Z" + "updatedAt": "2025-11-27T09:08:51.811Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.077Z" + "updatedAt": "2025-11-27T09:08:51.809Z" } } }, "a5d93e69125f512b3e1f00266e424585b846115536039af5f58cae578c2829e3": { "ecacb8f11638f831b9c20da459d9a74e871ae3943e5721f34aba4985e3a9d9eb": { "zh": { - "updatedAt": "2025-11-26T07:24:02.667Z" + "updatedAt": "2025-11-27T09:08:51.765Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.666Z" + "updatedAt": "2025-11-27T09:08:51.764Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.667Z" + "updatedAt": "2025-11-27T09:08:51.766Z" } } }, "5bb6610775ffe555ff909d1e5c0cb423ff2c15c044240729c60b0ebe39bbca30": { "d2a5526c06779a9c79d3b4da1256e4feac0aed57c3171d923a4e08990a784158": { "ru": { - "updatedAt": "2025-11-26T07:24:02.679Z" + "updatedAt": "2025-11-27T09:08:51.814Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.078Z" + "updatedAt": "2025-11-27T09:08:51.810Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.682Z" + "updatedAt": "2025-11-27T09:08:51.819Z" } } }, "2c61f03a4fe808580cff4e8aa1a6939d84eb12b9a43724b98bab278d020bb194": { "4158e73583a46ee61d2835723076f3fd91bdae28b86fb6f4d6ab8870a8146937": { "ru": { - "updatedAt": "2025-11-26T07:24:02.675Z" + "updatedAt": "2025-11-27T09:08:51.783Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.675Z" + "updatedAt": "2025-11-27T09:08:51.782Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.674Z" + "updatedAt": "2025-11-27T09:08:51.782Z" } } }, "8fb2e5e5d61ff6b4830012f315c75ccd22ef6f64c4ee7685c2cd3215aabfe79d": { "c393d1a8b5995f5444564d2d762f97bb4815829fdfb74c4739bd527681d89cee": { "zh": { - "updatedAt": "2025-11-26T07:24:02.679Z" + "updatedAt": "2025-11-27T09:08:51.814Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.680Z" + "updatedAt": "2025-11-27T09:08:51.816Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.679Z" + "updatedAt": "2025-11-27T09:08:51.815Z" } } }, "1a54cbb6d0259ab1c0a7866c16289a6efb190e3d138af3035a9b892ce04da57d": { "35875b5d8355a345f2dea01781d4a86cccffca2873f0f1c8151df687559a6ee2": { "ru": { - "updatedAt": "2025-11-26T07:24:12.073Z" + "updatedAt": "2025-11-27T09:08:51.801Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.075Z" + "updatedAt": "2025-11-27T09:08:51.804Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.072Z" + "updatedAt": "2025-11-27T09:08:51.799Z" } } }, "c5c96baff0600024d6bbb610d9cae24faf4a22e4f54fbcc16da6eea5801d716e": { "75a61fac01b9a0c4dc6479a31dfe0ccf020bf8c906301ce66ddb70adc32e62a1": { "ru": { - "updatedAt": "2025-11-26T07:24:02.696Z" + "updatedAt": "2025-11-27T09:08:51.841Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.693Z" + "updatedAt": "2025-11-27T09:08:51.838Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.697Z" + "updatedAt": "2025-11-27T09:08:51.842Z" } } }, "be5b364ee73eb51fe865a890d10236c2eae4146ef19afc9755721c110139579f": { "e55f970b0157d55548b665f2a95fc93e3875eadfb7a385687eb591b21d592f97": { "zh": { - "updatedAt": "2025-11-26T07:24:12.062Z" + "updatedAt": "2025-11-27T09:08:51.741Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.061Z" + "updatedAt": "2025-11-27T09:08:51.739Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.062Z" + "updatedAt": "2025-11-27T09:08:51.741Z" } } }, "4449f60ff9c38182ac376f1ec8ad4f5c377a1d189bf6b8bd0b3f294437ebd1a5": { "b4657b26faf846e566012308f61103c34dbe662b80add135f7d0720222c74ea5": { "zh": { - "updatedAt": "2025-11-26T07:24:12.073Z" + "updatedAt": "2025-11-27T09:08:51.801Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.070Z" + "updatedAt": "2025-11-27T09:08:51.795Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.072Z" + "updatedAt": "2025-11-27T09:08:51.799Z" } } }, "809f990c2475c0e585de5f7677ad5e69d2c480395ed833dfa2922067881e3350": { "1534d3d5fab78c52b36945dc4157e83845141abc6b963eed5bb780b27e5e23e2": { "zh": { - "updatedAt": "2025-11-26T07:24:12.062Z" + "updatedAt": "2025-11-27T09:08:51.741Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.064Z" + "updatedAt": "2025-11-27T09:08:51.746Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.064Z" + "updatedAt": "2025-11-27T09:08:51.747Z" } } }, "8184344ce9b79685863100b25d75f907caba31a6f26b64caf68881e98ea41913": { "8fe3205e82057a29dc0d8aaa2e33ec896cd304ef416bcfb7264bf8da1fbaaa77": { "zh": { - "updatedAt": "2025-11-26T07:24:18.904Z" + "updatedAt": "2025-11-27T09:08:59.342Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.904Z" + "updatedAt": "2025-11-27T09:08:59.342Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:18.902Z" + "updatedAt": "2025-11-27T09:08:59.340Z" } } }, "0c03db74eb0923183ef12e6e957c01e6d8255d17051d0474807d2dfe15494516": { "8d293de1b22941bb10fe562a4e677c7c7472f7d882ef5aadce39c9033dabb63f": { "zh": { - "updatedAt": "2025-11-26T07:24:02.697Z" + "updatedAt": "2025-11-27T09:08:51.842Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.697Z" + "updatedAt": "2025-11-27T09:08:51.843Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.697Z" + "updatedAt": "2025-11-27T09:08:51.841Z" } } }, "a1c0860ae09b803ff5ed9c9a0c438bd6b2800982753e32c40c910f32979fca1d": { "48ad888591a6dabb0298398a02a18436095ab5c603d344f9156ff7e7ccdb28ae": { "zh": { - "updatedAt": "2025-11-26T07:24:02.703Z" + "updatedAt": "2025-11-27T09:08:51.856Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.703Z" + "updatedAt": "2025-11-27T09:08:51.854Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.699Z" + "updatedAt": "2025-11-27T09:08:51.846Z" } } }, "86a43cc92512a5c918f3385b494d3169c660273f3661eb8dafdc49055b720698": { "60b60a413c29322369042c265eefb3d9aa56d79f8c71fe607cd1ac9eeb60e393": { "zh": { - "updatedAt": "2025-11-26T07:24:02.704Z" + "updatedAt": "2025-11-27T09:08:51.856Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.704Z" + "updatedAt": "2025-11-27T09:08:51.856Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.700Z" + "updatedAt": "2025-11-27T09:08:51.848Z" } } }, "036300ef3b2f4858d6615f663b03ca7a594a026409e0fe0ca41882745b846afc": { "1ad91e7f68dcee666ce7f7d2260270095678629c6052b5b84bf68dc6d54020c4": { "ru": { - "updatedAt": "2025-11-26T07:24:12.063Z" + "updatedAt": "2025-11-27T09:08:51.743Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.062Z" + "updatedAt": "2025-11-27T09:08:51.740Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.062Z" + "updatedAt": "2025-11-27T09:08:51.742Z" } } }, "586898784b2000de57eead4932f64db3ae6900471f06aee84b184f3bf8efdf12": { "9c727f0fda6cea3eb8d9add0737f40fd7c2a246e0b779e6a2ea7559741c3af0b": { "zh": { - "updatedAt": "2025-11-26T07:24:12.063Z" + "updatedAt": "2025-11-27T09:08:51.743Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.063Z" + "updatedAt": "2025-11-27T09:08:51.743Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.063Z" + "updatedAt": "2025-11-27T09:08:51.744Z" } } }, @@ -22065,1097 +23247,1108 @@ "jp": { "updatedAt": "2025-11-26T07:24:02.670Z" } + }, + "5962997760b38b2cb309d629f1dcf48964113a84f277bdc508e98c8bad0fa965": { + "zh": { + "updatedAt": "2025-11-27T09:08:51.773Z" + }, + "jp": { + "updatedAt": "2025-11-27T09:08:51.774Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:08:51.774Z" + } } }, "e79b575c27312875f3076748b2d4de3bfd78216748310c894e316b5c6b915aa6": { "7a7699a4379151bff326d63b86c2e5f5b0c36a7de56625710bbef094f9488e4d": { "zh": { - "updatedAt": "2025-11-26T07:24:02.700Z" + "updatedAt": "2025-11-27T09:08:51.849Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.703Z" + "updatedAt": "2025-11-27T09:08:51.856Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.701Z" + "updatedAt": "2025-11-27T09:08:51.850Z" } } }, "c74acd4897e7b7ee4b2df0bff72a35b3b8acbfe976eaa8215f2fcfc031f94ccf": { "720c459362ca150d27eb7701d7e48ce41817e1142bf4ebb8b4e2a87705715ada": { "ru": { - "updatedAt": "2025-11-26T07:24:02.674Z" + "updatedAt": "2025-11-27T09:08:51.781Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.676Z" + "updatedAt": "2025-11-27T09:08:51.785Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.676Z" + "updatedAt": "2025-11-27T09:08:51.786Z" } } }, "503329b0d4a76ca6bed899e9672f8b552300a0c87af309f4216ae734b9861fd2": { "675e12d63a5beef8dc9c071b80bc5249b9dc320e87ed8e63ab1dba75742d1c49": { "zh": { - "updatedAt": "2025-11-26T07:24:02.674Z" + "updatedAt": "2025-11-27T09:08:51.781Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.675Z" + "updatedAt": "2025-11-27T09:08:51.783Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.675Z" + "updatedAt": "2025-11-27T09:08:51.782Z" } } }, "90f0e15a1b59f060a6f0f952d87af6522508eab261e93dd1ff9d2f135297bc7b": { "b323a03a283828a8dd2bdb1310eabc167e779d51e7e53bc928a0c3475022c6ed": { "zh": { - "updatedAt": "2025-11-26T07:24:18.901Z" + "updatedAt": "2025-11-27T09:08:59.339Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.904Z" + "updatedAt": "2025-11-27T09:08:59.342Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:18.901Z" + "updatedAt": "2025-11-27T09:08:59.340Z" } } }, "e1777c4c468ab2516b850e57b6f6bc5a611e182371ea737b4494074aa581da40": { "c93f95ca1da1b0eee11a33d644aec21a8b55b826129592b9eba161908812b369": { "ru": { - "updatedAt": "2025-11-26T07:24:12.077Z" + "updatedAt": "2025-11-27T09:08:51.809Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.678Z" + "updatedAt": "2025-11-27T09:08:51.812Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.682Z" + "updatedAt": "2025-11-27T09:08:51.819Z" } } }, "64e0092d1db56a02e6a5bca8f0b5056cf1f521390ec3925bb3e50df81aa7ac85": { "9a5dd87bf7b220294da0bc415b255ea64029a767c79b1e6a895b5d3d57801055": { "zh": { - "updatedAt": "2025-11-26T07:24:02.677Z" + "updatedAt": "2025-11-27T09:08:51.811Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.678Z" + "updatedAt": "2025-11-27T09:08:51.811Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.678Z" + "updatedAt": "2025-11-27T09:08:51.812Z" } } }, "d012409948884982e8bdf1e450327b34af2546383469b4fd132b635459e6f305": { "95aa9403608d32399c22cc7fc263d9ab30a605eea3844947170400f89d7e71d1": { "ru": { - "updatedAt": "2025-11-26T07:24:02.678Z" + "updatedAt": "2025-11-27T09:08:51.813Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.677Z" + "updatedAt": "2025-11-27T09:08:51.811Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.077Z" + "updatedAt": "2025-11-27T09:08:51.809Z" } } }, "00174dfb396f321fadf5749558a865565bf4dae8cc5d6fa8f305ef68a7f1c6b2": { "d2f79ac832b7a2d7aaa410633fb001b9e95f4660cc65da2bdbe34ab52df0894a": { "ru": { - "updatedAt": "2025-11-26T07:24:02.679Z" + "updatedAt": "2025-11-27T09:08:51.815Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.077Z" + "updatedAt": "2025-11-27T09:08:51.808Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.078Z" + "updatedAt": "2025-11-27T09:08:51.810Z" } } }, "774db99efcf187fd85ea22f0f07cfb6cf5fb6cc68251b2913b976e914e74a951": { "cc59400f1e7b6cc7c2ce5902dae7bd2a641bff181193f2f3f16b2cc24b094add": { "zh": { - "updatedAt": "2025-11-26T07:24:02.675Z" + "updatedAt": "2025-11-27T09:08:51.784Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.068Z" + "updatedAt": "2025-11-27T09:08:51.789Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.674Z" + "updatedAt": "2025-11-27T09:08:51.780Z" } } }, "4da7a2a8dcc0e8244d17285e749f8d2f66e7c939010b06d93f9506b5e0443395": { "5d4659d3e6e8c514f951b33a0e387bbd5340061d0fa6ede0b8d63a27a889570a": { "zh": { - "updatedAt": "2025-11-26T07:24:02.679Z" + "updatedAt": "2025-11-27T09:08:51.815Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.681Z" + "updatedAt": "2025-11-27T09:08:51.817Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.078Z" + "updatedAt": "2025-11-27T09:08:51.810Z" } } }, "8a9dc951991e7089ccd4e1eedd2df9ce190a4888a63408845057666bec28693d": { "3ea6e01fdab2aaecd5561d6a3738320c4c955d0937ec5157cb9ac2e69e3fa30b": { "ru": { - "updatedAt": "2025-11-26T07:24:02.697Z" + "updatedAt": "2025-11-27T09:08:51.842Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.697Z" + "updatedAt": "2025-11-27T09:08:51.842Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.697Z" + "updatedAt": "2025-11-27T09:08:51.841Z" } } }, "e0416bafda40f9b0abd3190774a6d8b8b6fecab49f9676913bac6e5e053b382e": { "aa3e533069b101ec06bf29cb5c1935709f54b0a36858f4636f093f238b277647": { "zh": { - "updatedAt": "2025-11-26T07:24:12.073Z" + "updatedAt": "2025-11-27T09:08:51.802Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.071Z" + "updatedAt": "2025-11-27T09:08:51.798Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.076Z" + "updatedAt": "2025-11-27T09:08:51.807Z" } } }, "6bec8fb9d627bbc8d58479b40c1ff2e2105bf84d0574e514ce2d4a909b35d280": { "9892fa9d4ee47152dab0a70403163228e13146e378a484ac01ec35395c96a186": { "zh": { - "updatedAt": "2025-11-26T07:24:02.703Z" + "updatedAt": "2025-11-27T09:08:51.855Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.701Z" + "updatedAt": "2025-11-27T09:08:51.851Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.701Z" + "updatedAt": "2025-11-27T09:08:51.851Z" } } }, "d600a99ead8b0977fbdf31462c610327f9207f07a47047e4cfafebac76ac6789": { "ba98a569e23d5a0b5a2bee157907242c18d05d010d12a96d4526528db77500b5": { "zh": { - "updatedAt": "2025-11-26T07:24:02.675Z" + "updatedAt": "2025-11-27T09:08:51.784Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.676Z" + "updatedAt": "2025-11-27T09:08:51.785Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.072Z" + "updatedAt": "2025-11-27T09:08:51.800Z" } } }, "6c4d95e5c9add2129eec07c7db776b15731e42064678712cecf1b19d27e9fe1e": { "26bab87ac6555b58f09e971a206121597dc934bf1607e0bc1d1c1ca74b3c8ab5": { "zh": { - "updatedAt": "2025-11-26T07:24:02.676Z" + "updatedAt": "2025-11-27T09:08:51.784Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.673Z" + "updatedAt": "2025-11-27T09:08:51.780Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.676Z" + "updatedAt": "2025-11-27T09:08:51.786Z" } } }, "c97c8d3fc1255144232e48ef1068845cf9a505bf268924eb00d02e4a764b06d4": { "cbf44b30af8d393437b434943a6b72c84ddfbb0c5021ffa6ee01fcee470fce64": { "zh": { - "updatedAt": "2025-11-26T07:24:02.667Z" + "updatedAt": "2025-11-27T09:08:51.766Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.666Z" + "updatedAt": "2025-11-27T09:08:51.764Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.667Z" + "updatedAt": "2025-11-27T09:08:51.765Z" } } }, "aa965228754f809fd54c3e57e8b77d0a2e9c4a048e0e68cef7ae8c333114457a": { "f9ce484d23646e185c37dd955d8f8211aaac0ff9716bb25cc7a6c1dfc7722732": { "zh": { - "updatedAt": "2025-11-26T07:24:12.073Z" + "updatedAt": "2025-11-27T09:08:51.802Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.075Z" + "updatedAt": "2025-11-27T09:08:51.806Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.070Z" + "updatedAt": "2025-11-27T09:08:51.796Z" } } }, "db4a603afaa721633684ab401b86356ad8252b3e4987d3d7f3a1c55750046ef3": { "c71c72e22f263d7e5cb4b6bc6151025b50d1a6999e50ff20143e7d9570eab7e8": { "zh": { - "updatedAt": "2025-11-26T07:24:12.074Z" + "updatedAt": "2025-11-27T09:08:51.802Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.074Z" + "updatedAt": "2025-11-27T09:08:51.803Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.074Z" + "updatedAt": "2025-11-27T09:08:51.803Z" } } }, "cde7d435635c91652b2386bf1619cb7ad40c1a75333e02d9abeca5d374b5fcd2": { "7ed8aea2f22f07b5e6da1bc31a668115f599b57278bd5f78ed4d027851ee59f9": { "ru": { - "updatedAt": "2025-11-26T07:24:12.074Z" + "updatedAt": "2025-11-27T09:08:51.802Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.070Z" + "updatedAt": "2025-11-27T09:08:51.795Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.072Z" + "updatedAt": "2025-11-27T09:08:51.798Z" } } }, "baa5800841c33574a763c76d84029b7167e28cd0e383b549d3c87bdde30230b1": { "4e66ec48e4681668b3829e07df4225df08079780a33326c20145dbd63d2cf115": { "ru": { - "updatedAt": "2025-11-26T07:24:02.697Z" + "updatedAt": "2025-11-27T09:08:51.842Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.693Z" + "updatedAt": "2025-11-27T09:08:51.839Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.694Z" + "updatedAt": "2025-11-27T09:08:51.839Z" } } }, "6999f92f0023fe1dd1e922ddaaf1df722f316e49e43a1f46219683d3add8c812": { "9280cf92c0f64187017d3e623d9d06cf5122c9cca98da66abea3317bbf634e3b": { "zh": { - "updatedAt": "2025-11-26T07:24:02.680Z" + "updatedAt": "2025-11-27T09:08:51.816Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.077Z" + "updatedAt": "2025-11-27T09:08:51.808Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.680Z" + "updatedAt": "2025-11-27T09:08:51.815Z" } } }, "534c97b1abac407b7ffecba5c237d20ca3ad4c270a44ed90b44e77de585a610d": { "7ba7deb86c597b598ca684677abf36c48f1d224dfbe3c8465bb1e2b40a280f81": { "ru": { - "updatedAt": "2025-11-26T07:24:02.667Z" + "updatedAt": "2025-11-27T09:08:51.767Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.668Z" + "updatedAt": "2025-11-27T09:08:51.767Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.669Z" + "updatedAt": "2025-11-27T09:08:51.770Z" } } }, "2c9a0b8bcdb6bc350cecc5d8a2a8571d9ab75452db549ce31e1fdb37159adb97": { "a30a7c92ea08285c067ff0984feefbb3785f4b1f14d7715bfc668fb4bbc9261f": { "ru": { - "updatedAt": "2025-11-26T07:24:02.676Z" + "updatedAt": "2025-11-27T09:08:51.784Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.677Z" + "updatedAt": "2025-11-27T09:08:51.787Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.676Z" + "updatedAt": "2025-11-27T09:08:51.785Z" } } }, "89191e0f0f3ac7ad6fcbe90e008723be94527b1dc5730c24b0ef28b7567b621a": { "db61043ee1c3c508cdf7d9dd474714bef6965ab628e609c3b20ddf986ef02cc9": { "zh": { - "updatedAt": "2025-11-26T07:24:12.074Z" + "updatedAt": "2025-11-27T09:08:51.803Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.076Z" + "updatedAt": "2025-11-27T09:08:51.806Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.076Z" + "updatedAt": "2025-11-27T09:08:51.807Z" } } }, "e9514b207fd2f0999e54604bcc5f81ff6fdaee6511cc23ec24b5e33bcbd7a748": { "9824c5507b882758b8df0cd7ac8ec6f8ec745839288f88d8cad0156e2ed55258": { "zh": { - "updatedAt": "2025-11-26T07:24:12.074Z" + "updatedAt": "2025-11-27T09:08:51.803Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.070Z" + "updatedAt": "2025-11-27T09:08:51.796Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.071Z" + "updatedAt": "2025-11-27T09:08:51.797Z" } } }, "bb75403cac8908b2d1e0f7435d3c432ee901f13dfdca991fb73204120a85338c": { "0a7663696896ca536cf8c5b6b0059cce8944689bcec816f2b5c5b41720cbd804": { "zh": { - "updatedAt": "2025-11-26T07:24:02.680Z" + "updatedAt": "2025-11-27T09:08:51.816Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.681Z" + "updatedAt": "2025-11-27T09:08:51.818Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.678Z" + "updatedAt": "2025-11-27T09:08:51.811Z" } } }, "c66448d10c048389547620c0efc34decc72e9f80bc32daa2c49d957e3c02fa1b": { "1f29d5a37e6fed39b5f9602645e28d9fa470dce74a39a6c598dbd0a16867a37c": { "ru": { - "updatedAt": "2025-11-26T07:24:02.680Z" + "updatedAt": "2025-11-27T09:08:51.816Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.678Z" + "updatedAt": "2025-11-27T09:08:51.813Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.679Z" + "updatedAt": "2025-11-27T09:08:51.815Z" } } }, "7a098dff053dea397b97871863eca7199375f5d95f819134c433310d813f3ae4": { "ea322771a5ea71a865948471da4a31d3c932f43e7f418fbd44d17ba4dd564761": { "zh": { - "updatedAt": "2025-11-26T07:24:02.668Z" + "updatedAt": "2025-11-27T09:08:51.767Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.669Z" + "updatedAt": "2025-11-27T09:08:51.769Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.669Z" + "updatedAt": "2025-11-27T09:08:51.769Z" } } }, "a36c558e3cc8eb2a3b03c01a4286bfac9d72237977464d90e7395a10cf2209e0": { "94ce7d6626e94f915dc3f8c3c80748074f7c1a750f5800beccd7406817b5d19f": { "zh": { - "updatedAt": "2025-11-26T07:24:12.074Z" + "updatedAt": "2025-11-27T09:08:51.804Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.076Z" + "updatedAt": "2025-11-27T09:08:51.806Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.074Z" + "updatedAt": "2025-11-27T09:08:51.803Z" } } }, "68ae98d78891d0611568e05de511ec72306b7b3511df399280a7ae2c79b3ee06": { "33c7517467d660435f217ea64c4bf7d1325b67636ba929b3ced122cbffac2355": { "zh": { - "updatedAt": "2025-11-26T07:24:12.063Z" + "updatedAt": "2025-11-27T09:08:51.742Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.064Z" + "updatedAt": "2025-11-27T09:08:51.746Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.063Z" + "updatedAt": "2025-11-27T09:08:51.745Z" } } }, "561284460b1fb2a4c59ce07e83be4fee1a8ff052b66a64ff66141a296715102c": { "30382cd05cdfc447ce68389ab117d0b72fb4faf154b6c67bed6c57d0ed565d98": { "ru": { - "updatedAt": "2025-11-26T07:24:02.680Z" + "updatedAt": "2025-11-27T09:08:51.817Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.681Z" + "updatedAt": "2025-11-27T09:08:51.818Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.681Z" + "updatedAt": "2025-11-27T09:08:51.819Z" } } }, "8b014d0b3ce023d8c15fd8c5eb2d350cacf9cf3c41dd4b69ff25dd2351d35db0": { "891d96677ae497189e4ef48d65804e3b886d35381aa01b9dd409f5c32ee066aa": { "ru": { - "updatedAt": "2025-11-26T07:24:02.681Z" + "updatedAt": "2025-11-27T09:08:51.817Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.681Z" + "updatedAt": "2025-11-27T09:08:51.818Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.681Z" + "updatedAt": "2025-11-27T09:08:51.818Z" } } }, "82fa28546b5677c4d98f580e1e222959c159ae3d9905e0932fbfebe2ebde8218": { "5207e407e3f1eccc511c0aaa51164bd35e4d15543e26e8e004002a81d42f5b90": { "ru": { - "updatedAt": "2025-11-26T07:24:02.668Z" + "updatedAt": "2025-11-27T09:08:51.768Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.668Z" + "updatedAt": "2025-11-27T09:08:51.768Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.669Z" + "updatedAt": "2025-11-27T09:08:51.770Z" } } }, "9e8c51287c7f24817ec004d3002c1ce3b305ec30df1100b9d028e5ebc63461bd": { "afbdd8bf1a036d21dd54275c5ec03df46552510b37adf7a05917d6570967651d": { "ru": { - "updatedAt": "2025-11-26T07:24:02.676Z" + "updatedAt": "2025-11-27T09:08:51.786Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.069Z" + "updatedAt": "2025-11-27T09:08:51.793Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.069Z" + "updatedAt": "2025-11-27T09:08:51.791Z" } } }, "2e86bca26b2ac693c6c25e4a60919c546b7872ba88d487d37cba83528dd4c1c0": { "82625a723fba7e62c237b3557661bd75bff3e41b4de031a888fc315f70bf8f60": { "ru": { - "updatedAt": "2025-11-26T07:24:12.075Z" + "updatedAt": "2025-11-27T09:08:51.804Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.071Z" + "updatedAt": "2025-11-27T09:08:51.798Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.076Z" + "updatedAt": "2025-11-27T09:08:51.807Z" } } }, "03f4f6675beb54a72bd7e3d62bec8c07f1c24ef51dcd84e88ba10e86e3a5a9b7": { "eb1beb44798239cd7a4b527f6d7acf65bd7638560f8fda08cbea63789789cbab": { "ru": { - "updatedAt": "2025-11-26T07:24:02.677Z" + "updatedAt": "2025-11-27T09:08:51.787Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.675Z" + "updatedAt": "2025-11-27T09:08:51.783Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.674Z" + "updatedAt": "2025-11-27T09:08:51.781Z" } } }, "32ffa87be40ab5f31e20d44d8997706429f8284873cee16bf953aa7c8a533e87": { "987df6e0573b5dadab1d721fb8b42546edd8a72a4c4ef547c90da774cfdc0384": { "zh": { - "updatedAt": "2025-11-26T07:24:12.075Z" + "updatedAt": "2025-11-27T09:08:51.804Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.073Z" + "updatedAt": "2025-11-27T09:08:51.800Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.073Z" + "updatedAt": "2025-11-27T09:08:51.801Z" } } }, "a2e55a90379e6ffc005d5cc760c9bf50e3a6631ad77cd354c2d442860ad851ea": { "a0801c6bb244ad72c6b1b26969b590462545f49f3c2c06d4078fe79f62be5841": { "ru": { - "updatedAt": "2025-11-26T07:24:02.677Z" + "updatedAt": "2025-11-27T09:08:51.787Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.068Z" + "updatedAt": "2025-11-27T09:08:51.789Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.675Z" + "updatedAt": "2025-11-27T09:08:51.784Z" } } }, "9d795e71c1e5b5159a55b2c1f0aef5b2b5ba275de3636e7962e76d9cac324863": { "e14d02d5377204ff07364b01b4777caa9edee903a191d54d14cd619978c349a5": { "ru": { - "updatedAt": "2025-11-26T07:24:02.677Z" + "updatedAt": "2025-11-27T09:08:51.788Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.068Z" + "updatedAt": "2025-11-27T09:08:51.790Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.069Z" + "updatedAt": "2025-11-27T09:08:51.793Z" } } }, "459dcfc8cfcb0c798eda34051037eaf36f0e8bdbf413d5ca0f86faf6d1ae4e24": { "f469d58719f2670441a26ddce21a692caf6821dcb698ad90eba442b062adb5aa": { "ru": { - "updatedAt": "2025-11-26T07:24:12.075Z" + "updatedAt": "2025-11-27T09:08:51.805Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.071Z" + "updatedAt": "2025-11-27T09:08:51.798Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.074Z" + "updatedAt": "2025-11-27T09:08:51.803Z" } } }, "6aaffe8268bf79e8f4faf87000cd0de5d6453e5299b00696c4cf31cfb8d96d5b": { "ddba7dec037a2fad87464c00483c81011ad76357b5c4963561b6fb33a626d74e": { "zh": { - "updatedAt": "2025-11-26T07:24:12.063Z" + "updatedAt": "2025-11-27T09:08:51.744Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.063Z" + "updatedAt": "2025-11-27T09:08:51.745Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.063Z" + "updatedAt": "2025-11-27T09:08:51.744Z" } } }, "299acd2896dbdcc7fc9ec56b51b4a1990b56dd0fe41acb3e57f9cae1bd915ac7": { "99ca8337276f2850a682286f3aa13f69597377997f305892b1182845150c4e2e": { "zh": { - "updatedAt": "2025-11-26T07:24:02.698Z" + "updatedAt": "2025-11-27T09:08:51.843Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.693Z" + "updatedAt": "2025-11-27T09:08:51.839Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.689Z" + "updatedAt": "2025-11-27T09:08:51.833Z" } } }, "3246877b14617a738e90832de040052391f7c8fc094ca44b2455eef30fbf314e": { "d6d3906022ccc3319721785ef9aa9f57093fc737336e72eddec0d952f2c844d7": { "zh": { - "updatedAt": "2025-11-26T07:24:18.905Z" + "updatedAt": "2025-11-27T09:08:59.343Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.905Z" + "updatedAt": "2025-11-27T09:08:59.343Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.706Z" + "updatedAt": "2025-11-27T09:08:51.862Z" } } }, "3635e79a2e76bb297d10c5dd4637f4fd94275c1ba1081c959a4f02a8d8049bf6": { "69cff4cb3337c445b437475f175d0c1ab8c863e57aa050035a2284326ea56533": { "zh": { - "updatedAt": "2025-11-26T07:24:12.077Z" + "updatedAt": "2025-11-27T09:08:51.809Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.678Z" + "updatedAt": "2025-11-27T09:08:51.812Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.681Z" + "updatedAt": "2025-11-27T09:08:51.818Z" } } }, "c3ae4d87db64f55d260d37bff7580e0a1ff638a6c1bebc984889a0f53e882bd1": { "c8ec9fc9c8400c3e7fc2098760f4d554623fe5eaab093ad69821218853b4e3b8": { "ru": { - "updatedAt": "2025-11-26T07:24:02.673Z" + "updatedAt": "2025-11-27T09:08:51.780Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.068Z" + "updatedAt": "2025-11-27T09:08:51.790Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.068Z" + "updatedAt": "2025-11-27T09:08:51.791Z" } } }, "7974b5d9fc7e953fa4aecd07c2f6f9176f90a9a89310ebe7fcb27dff7fdf734a": { "b66740bd12022ccefeb425eba94ee09c08528b3a5b347793bb597e953e4f21b2": { "ru": { - "updatedAt": "2025-11-26T07:24:12.077Z" + "updatedAt": "2025-11-27T09:08:51.809Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.680Z" + "updatedAt": "2025-11-27T09:08:51.817Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.680Z" + "updatedAt": "2025-11-27T09:08:51.816Z" } } }, "0d605e87bc30a8f48c930071ba0ea5cd2b5ebdbd6763536c9fdc4f2ed918a40d": { "8b7aa2cd071eea2c995cc398e7fb600f77f1f9a7fa0450f42449838022126464": { "ru": { - "updatedAt": "2025-11-26T07:24:02.676Z" + "updatedAt": "2025-11-27T09:08:51.786Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.068Z" + "updatedAt": "2025-11-27T09:08:51.791Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.676Z" + "updatedAt": "2025-11-27T09:08:51.785Z" } } }, "51f9cca65edfee082630f0b1fb8e3a29f4ab177d7d5452a9abc2e1f9b56e3c53": { "96fa3e43effb19ba6584f2d1ae472b68548bb3a136e72cc23135e36bd3bd7b5a": { "zh": { - "updatedAt": "2025-11-26T07:24:02.697Z" + "updatedAt": "2025-11-27T09:08:51.843Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.698Z" + "updatedAt": "2025-11-27T09:08:51.844Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.694Z" + "updatedAt": "2025-11-27T09:08:51.840Z" } } }, "0f09f5442f4b4bac183a39fe7c4ebb5f27e3e93b8fbdd22c1bf04db43e598523": { "8dd4d3197218cd45163cf27ba0c5e57b39a8db91e1ae9ccb34b1ee6871418db0": { "ru": { - "updatedAt": "2025-11-26T07:24:02.668Z" + "updatedAt": "2025-11-27T09:08:51.768Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.669Z" + "updatedAt": "2025-11-27T09:08:51.769Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.670Z" + "updatedAt": "2025-11-27T09:08:51.770Z" } } }, "04bd894d54eb7791d6c20efe6b82643d60ba5f94079895df60cd832a967a8b72": { "b4b191db3e0a1686174b935b4a408eec87a5d10accead9bfce53f6fdb0c78147": { "ru": { - "updatedAt": "2025-11-26T07:24:02.677Z" + "updatedAt": "2025-11-27T09:08:51.788Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.068Z" + "updatedAt": "2025-11-27T09:08:51.788Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.677Z" + "updatedAt": "2025-11-27T09:08:51.788Z" } } }, "ee7cf7082c51841ba27fc19b990495b38b92128a79d2a323ecbca6bb723f0e8e": { "7deda54447cba9acce76845c952c2c7f4ee86488c276f4a335c96e4c55dc6bcd": { "ru": { - "updatedAt": "2025-11-26T07:24:12.075Z" + "updatedAt": "2025-11-27T09:08:51.805Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.076Z" + "updatedAt": "2025-11-27T09:08:51.806Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.075Z" + "updatedAt": "2025-11-27T09:08:51.805Z" } } }, "cbfa6856b07360063ce643d5dc0c1d3cc2418e2639de759af00c6f665fc517e4": { "0140ef2e17d32f74a3b543e6327533884c8025b049e9fdc7af2a729378577a5e": { "ru": { - "updatedAt": "2025-11-26T07:24:12.075Z" + "updatedAt": "2025-11-27T09:08:51.805Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.075Z" + "updatedAt": "2025-11-27T09:08:51.805Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.076Z" + "updatedAt": "2025-11-27T09:08:51.807Z" } } }, "c91f782ae583639337bdc49114576cfdd9c9355b699a68919bf1bd023713faef": { "bec2f91a18ab29d790a84a8d99cfc87824936240769c4e0889827b57e2472e09": { "zh": { - "updatedAt": "2025-11-26T07:24:02.704Z" + "updatedAt": "2025-11-27T09:08:51.857Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.702Z" + "updatedAt": "2025-11-27T09:08:51.852Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.701Z" + "updatedAt": "2025-11-27T09:08:51.851Z" } } }, "abdc65a73d328d0f6587eba73db81db937a7f67106eeb840b67ebf52e35e6379": { "3d443c4abc73eddf8e334725cfa0abf5cbeb70f4475566a8d40953e253b629bc": { "zh": { - "updatedAt": "2025-11-26T07:24:12.069Z" + "updatedAt": "2025-11-27T09:08:51.791Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.069Z" + "updatedAt": "2025-11-27T09:08:51.792Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.068Z" + "updatedAt": "2025-11-27T09:08:51.790Z" } } }, "6f7b91f9de26806b740498adc5e643a9126c17702c3c29691e1666087c366cf0": { "a1903aea52e9e31c6386a9cb6e37a8b774a6be1ff6724d1c7674a90cee7e9059": { "ru": { - "updatedAt": "2025-11-26T07:24:12.069Z" + "updatedAt": "2025-11-27T09:08:51.792Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.069Z" + "updatedAt": "2025-11-27T09:08:51.792Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.068Z" + "updatedAt": "2025-11-27T09:08:51.789Z" } } }, "fae1576558dadb0c932329389ce8fbcbeee0d35379cb6c996673cd93aad35a13": { "3c3975cd182172060059f7637ba3d00c8b28a90dce27de128e912a0c986041da": { "ru": { - "updatedAt": "2025-11-26T07:24:02.682Z" + "updatedAt": "2025-11-27T09:08:51.819Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.683Z" + "updatedAt": "2025-11-27T09:08:51.819Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.681Z" + "updatedAt": "2025-11-27T09:08:51.818Z" } } }, "3f14c9de32cc2309c896fed678c5b28a7dbf39af5a00bc45e0fd013b9c4d05d5": { "30c6636556ee6c7c353538457f6b3b57a9f5c21c15e651b2997b487922e38fc3": { "ru": { - "updatedAt": "2025-11-26T07:24:18.905Z" + "updatedAt": "2025-11-27T09:08:59.343Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.902Z" + "updatedAt": "2025-11-27T09:08:59.341Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:18.905Z" + "updatedAt": "2025-11-27T09:08:59.342Z" } } }, "6bed7e7a83ecb81ba1dd2bac10ae908f5dca2985a1372a02ea6f37edc19fb8d6": { "d69df1442a7aad94ba9096815aac2b779c3a23eed85dba10c8cf5e643215acf7": { "ru": { - "updatedAt": "2025-11-26T07:24:02.683Z" + "updatedAt": "2025-11-27T09:08:51.830Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.683Z" + "updatedAt": "2025-11-27T09:08:51.831Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.683Z" + "updatedAt": "2025-11-27T09:08:51.830Z" } } }, "3e0601c102f0cd71b8eb284da75b1cb579b66391d37fa681cf6d4bc5e1cc1d58": { "4eeb3b260eb5599be93bf2151af54a52820bc5b7145e432d1d16218f6b0c376b": { "zh": { - "updatedAt": "2025-11-26T07:24:02.670Z" + "updatedAt": "2025-11-27T09:08:51.771Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.670Z" + "updatedAt": "2025-11-27T09:08:51.772Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.671Z" + "updatedAt": "2025-11-27T09:08:51.773Z" } } }, "8b38fc05c0c3883d9a4ec8bbf5caa1bbc4260e946b23ad31bf5c97563bd88229": { "58e3bcd0e949f466dc2d6e918d912d126143beea61afa2ee594bb6cb9d60e88d": { "zh": { - "updatedAt": "2025-11-26T07:24:02.670Z" + "updatedAt": "2025-11-27T09:08:51.772Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.666Z" + "updatedAt": "2025-11-27T09:08:51.765Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.669Z" + "updatedAt": "2025-11-27T09:08:51.769Z" } } }, "11f0d2e2fe5381cbdabf5c8d911e42f98d764106a83601de0c96203590ad4cc5": { "125142acfba42f104cc8a667d2cd001ded4684ba6896567aa756cbbcdfe1e975": { "zh": { - "updatedAt": "2025-11-26T07:24:12.069Z" + "updatedAt": "2025-11-27T09:08:51.793Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.070Z" + "updatedAt": "2025-11-27T09:08:51.794Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.070Z" + "updatedAt": "2025-11-27T09:08:51.795Z" } } }, "6152b4089faf21cb920f0b0e0f015947f4aa6a6539cc24579a8054117329f175": { "58de10c3764c8ae20317dce26cff68631d85677a41b3f5dbd50c51245bb6c66d": { "zh": { - "updatedAt": "2025-11-26T07:24:12.064Z" + "updatedAt": "2025-11-27T09:08:51.748Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.064Z" + "updatedAt": "2025-11-27T09:08:51.749Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.064Z" + "updatedAt": "2025-11-27T09:08:51.747Z" } } }, "bca14edd411fa9f3a8a9611aaacff6972d87258f38acd6410fdf5b4d4cdbaa55": { "6bdb09ec322273b515c242a0a196c778ff9876e649fa65392b8031cb787249d3": { "zh": { - "updatedAt": "2025-11-26T07:24:12.057Z" + "updatedAt": "2025-11-27T09:08:51.682Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.057Z" + "updatedAt": "2025-11-27T09:08:51.682Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.058Z" + "updatedAt": "2025-11-27T09:08:51.683Z" } } }, "90b37c7973739db627d82b16799b1a59ebcb776db33ad8298491b0bbbed6c3de": { "73ba6fad372ebd5b4ddf82f283b3e7b1f303a8f02d8ddee4e4e8d3c0290b12ee": { "zh": { - "updatedAt": "2025-11-26T07:24:12.058Z" + "updatedAt": "2025-11-27T09:08:51.683Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.059Z" + "updatedAt": "2025-11-27T09:08:51.732Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.058Z" + "updatedAt": "2025-11-27T09:08:51.684Z" } } }, "5dcc85853637a46f967236f293c74ce6629e743899ffb1d793ba5c7ffae90dbf": { "6777f02cb4aba6cf43d71fcfd0acc7ed50b7a116661de2ebd8193b82df093941": { "zh": { - "updatedAt": "2025-11-26T07:24:02.654Z" + "updatedAt": "2025-11-27T09:08:51.660Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.656Z" + "updatedAt": "2025-11-27T09:08:51.663Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.654Z" + "updatedAt": "2025-11-27T09:08:51.661Z" } } }, "094593271a536e71ddc700495b0cf0f1048d6ab6c2dad60a929934f0798430ea": { "3dd2ef060c7a1cfaa56099a332e54eba203c50d4214e0f5bf98d281ff70e8d9e": { "ru": { - "updatedAt": "2025-11-26T07:24:02.654Z" + "updatedAt": "2025-11-27T09:08:51.661Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.657Z" + "updatedAt": "2025-11-27T09:08:51.666Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.656Z" + "updatedAt": "2025-11-27T09:08:51.665Z" } } }, "27e2bd6338f55fdbb9b18fcf67e0a0a67489a58d4e1c0e9ebb6902b05fc36aac": { "8929ff1edb2d47de0f53425237359fc7c4a1036ef99e001d0d30c2d13140051c": { "ru": { - "updatedAt": "2025-11-26T07:24:02.655Z" + "updatedAt": "2025-11-27T09:08:51.662Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.655Z" + "updatedAt": "2025-11-27T09:08:51.663Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.653Z" + "updatedAt": "2025-11-27T09:08:51.659Z" } } }, "19a3aba2f96aa29e64f1d6662e4c6e8d99c98fade3c4d0aa0badaed1632f4c7c": { "dc4c51508caf2bb72e5375d6abe27b369e6eacb14cc00c78c196a37458e79501": { "ru": { - "updatedAt": "2025-11-26T07:24:12.058Z" + "updatedAt": "2025-11-27T09:08:51.731Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.059Z" + "updatedAt": "2025-11-27T09:08:51.733Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.060Z" + "updatedAt": "2025-11-27T09:08:51.734Z" } } }, "dfad0bc3b6417f406a00ff9ef3820a57dfc8f664400a7ce0134d81da437d7e07": { "79123cc58b0a88edb3bafb181767cf704d4908d66876b9628ebccd1e31728887": { "zh": { - "updatedAt": "2025-11-26T07:24:02.655Z" + "updatedAt": "2025-11-27T09:08:51.663Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.656Z" + "updatedAt": "2025-11-27T09:08:51.664Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.652Z" + "updatedAt": "2025-11-27T09:08:51.658Z" } } }, "4b87a5344a9b716648c77706eed8254331cf4a6ce21d8a43d267f67270734d1f": { "fb4dfb8f9e647f53e63097ab00045af768eb9222f514d424b3a57634d8f3681e": { "ru": { - "updatedAt": "2025-11-26T07:24:12.059Z" + "updatedAt": "2025-11-27T09:08:51.732Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.059Z" + "updatedAt": "2025-11-27T09:08:51.733Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.058Z" + "updatedAt": "2025-11-27T09:08:51.683Z" } } }, "f0a5d6e46b2ddd583ab900563a42b7687a1b4924afd5d0cb5260268c8952f6d0": { "3a8f69d0d17e9065a46d4d7456a503262e2f2a05ac3d4b37f49520b5f716b1c3": { "zh": { - "updatedAt": "2025-11-26T07:24:02.692Z" + "updatedAt": "2025-11-27T09:08:51.838Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.693Z" + "updatedAt": "2025-11-27T09:08:51.839Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.688Z" + "updatedAt": "2025-11-27T09:08:51.831Z" } } }, "9027438a5e9e30a2c6e8e4d197b479cebf29c05aaa3a716589f591c0ff697c0d": { "d5d6ea5e34429a4a6f22bad136f5d5eb712bbb922cae22a6c870b906c7befadf": { "zh": { - "updatedAt": "2025-11-26T07:24:18.902Z" + "updatedAt": "2025-11-27T09:08:59.340Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.902Z" + "updatedAt": "2025-11-27T09:08:59.340Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.706Z" + "updatedAt": "2025-11-27T09:08:51.861Z" } } }, "492b567700669f175480e40ecf1c553c463e77a0bb36e30e76eb3628c35e7db3": { "84c653bd2e6590cbd982437c2304ff4818581c1e60afb256437642c4a3dc66c5": { "ru": { - "updatedAt": "2025-11-26T07:24:12.078Z" + "updatedAt": "2025-11-27T09:08:51.810Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.678Z" + "updatedAt": "2025-11-27T09:08:51.812Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.680Z" + "updatedAt": "2025-11-27T09:08:51.817Z" } } }, "dbc3d877611d9d2c9a27f2ea076decc1afc5907f3c3c02044504a307308653af": { "79b34ec963ce2ab8bc60d33c073caf0fc42c9aed7f3b97c1ed638390938960de": { "zh": { - "updatedAt": "2025-11-26T07:24:12.071Z" + "updatedAt": "2025-11-27T09:08:51.797Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.072Z" + "updatedAt": "2025-11-27T09:08:51.800Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.073Z" + "updatedAt": "2025-11-27T09:08:51.802Z" } } }, "e5b56f33a8458d42151bcbd638d4692704a7d1f97fb2c4ed94143ff1e460a418": { "7eab19fd44668e93c10760c5fe2d6a1421e507a9cec55dfd91ed0fcab85c27f1": { "ru": { - "updatedAt": "2025-11-26T07:24:12.071Z" + "updatedAt": "2025-11-27T09:08:51.797Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.072Z" + "updatedAt": "2025-11-27T09:08:51.799Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.070Z" + "updatedAt": "2025-11-27T09:08:51.796Z" } } }, "3f3b14a0c691ae2b5345864fd4ad20a184225db1e35ffcbd455da1aeec5f0d48": { "a9c8fa4f53951ce4026e170171a0517a80777e9037e5bb2f16eab83d3ffaa9cc": { "zh": { - "updatedAt": "2025-11-26T07:24:02.657Z" + "updatedAt": "2025-11-27T09:08:51.666Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.656Z" + "updatedAt": "2025-11-27T09:08:51.664Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.655Z" + "updatedAt": "2025-11-27T09:08:51.662Z" } } }, "5b41c30593068b713e26045c49b89ef31bda4b2d25564fc71eeafadaa3a88b3b": { "ecb137fd1463f816c7efffc5bf4c604e7cfa7735755e22327018e286ec755267": { "zh": { - "updatedAt": "2025-11-26T07:24:02.702Z" + "updatedAt": "2025-11-27T09:08:51.852Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.703Z" + "updatedAt": "2025-11-27T09:08:51.854Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.699Z" + "updatedAt": "2025-11-27T09:08:51.847Z" } } }, "7c145e871f942571130b488686f2c93299c7784ad34d23a45c99e2947f75208c": { "193be2e12900fc92f5c6cf9d55c9d419bf67397ce7c166154cf4356eaee3bb11": { "zh": { - "updatedAt": "2025-11-26T07:24:02.702Z" + "updatedAt": "2025-11-27T09:08:51.852Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.703Z" + "updatedAt": "2025-11-27T09:08:51.854Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.700Z" + "updatedAt": "2025-11-27T09:08:51.848Z" } } }, "f5b83279dab37d495f5c4fd259883e2f59a812c65ccc8ed0c351f21a2028e710": { "caa363689f97df04d5bdb8cc80dfede581f616ede687804ff5915657268592d2": { "ru": { - "updatedAt": "2025-11-26T07:24:18.903Z" + "updatedAt": "2025-11-27T09:08:59.341Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.903Z" + "updatedAt": "2025-11-27T09:08:59.341Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:18.905Z" + "updatedAt": "2025-11-27T09:08:59.343Z" } } }, "bdeb28bdbd403e8a7dbfd53a18daf2d16a5ec80e2b272afff63299b084ee54d4": { "8d2b2934162408394b787a0c9376fd5fc5d3b70e883799983cb40e9cd3caec2b": { "ru": { - "updatedAt": "2025-11-26T07:24:02.694Z" + "updatedAt": "2025-11-27T09:08:51.840Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.694Z" + "updatedAt": "2025-11-27T09:08:51.840Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.698Z" + "updatedAt": "2025-11-27T09:08:51.843Z" } } }, "6d9be1cdfeaef3b95b6937fe4da26361e0723bbb44069a88774c3f6c426953ff": { "27c7a63e2afca841ae5e7d6fe8b9f6f3c513769116043f854361c07302afa76a": { "ru": { - "updatedAt": "2025-11-26T07:24:02.674Z" + "updatedAt": "2025-11-27T09:08:51.782Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.675Z" + "updatedAt": "2025-11-27T09:08:51.782Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.674Z" + "updatedAt": "2025-11-27T09:08:51.781Z" } } }, "08f3b123bce337ae576d91effb4c4e0aa8ce5818f4196baa0ba59915bd0d269e": { "a29ff4b6f7e821d9ae449a998417a11cc1c6705210186befa92aa45136de5da9": { "ru": { - "updatedAt": "2025-11-26T07:24:12.071Z" + "updatedAt": "2025-11-27T09:08:51.798Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.072Z" + "updatedAt": "2025-11-27T09:08:51.800Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.075Z" + "updatedAt": "2025-11-27T09:08:51.804Z" } } }, "0e3c84ac0dcb64d166a9e4cad32d3420219fe50fe305e36aa358456c172e2cf7": { "318568dae18d539030ba9900a07a5c387e0ffd38a7b84468080ad1adcdccfc39": { "ru": { - "updatedAt": "2025-11-26T07:24:02.677Z" + "updatedAt": "2025-11-27T09:08:51.811Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.678Z" + "updatedAt": "2025-11-27T09:08:51.813Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.078Z" + "updatedAt": "2025-11-27T09:08:51.810Z" } } }, "808e737b87d86c00037ee9499555e8d37bc7fd2e51f5ef796a4a104d5f453b14": { "4719caa724ba0e2a9f5dae16a0fe1e64ccb82cd37762f0d2649a253c1acc65eb": { "zh": { - "updatedAt": "2025-11-26T07:24:12.072Z" + "updatedAt": "2025-11-27T09:08:51.799Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.073Z" + "updatedAt": "2025-11-27T09:08:51.800Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.070Z" + "updatedAt": "2025-11-27T09:08:51.796Z" } } }, @@ -23165,6 +24358,19 @@ "updatedAt": "2025-11-26T07:19:33.942Z" } } + }, + "66bbf0d8525a651b70357530fa66ca0f30073bb1460c57979838338b1c0d8749": { + "9a8d534c4d4974d982e6c1d6d31787e905d1215b8eade3bf1524a2e15a6fa2c0": { + "jp": { + "updatedAt": "2025-11-27T09:09:00.007Z" + }, + "ru": { + "updatedAt": "2025-11-27T09:09:00.007Z" + }, + "zh": { + "updatedAt": "2025-11-27T09:09:00.007Z" + } + } } } } diff --git a/i18n/jp/code.json b/i18n/jp/code.json index 74b4afa66a5..1e7cfdc6688 100644 --- a/i18n/jp/code.json +++ b/i18n/jp/code.json @@ -68,8 +68,8 @@ "description": "検索ページ上の検索フィールド用の ARIA ラベル" }, "theme.SearchPage.algoliaLabel": { - "message": "Algolia を使って検索", - "description": "Algolia メンションの ARIA ラベル" + "message": "Algolia 提供の検索", + "description": "Algoliaメンション用のARIAラベル" }, "theme.SearchPage.noResultsText": { "message": "結果が見つかりません", @@ -84,60 +84,60 @@ "description": "ブログサイドバーの「最近の投稿」用 ARIA ラベル" }, "theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel": { - "message": "「{label}」の展開/折りたたみを切り替える", - "description": "折りたたみ式サイドバーカテゴリの切り替え用 ARIA ラベル" + "message": "折りたたみ式サイドバーのカテゴリ「{label}」を開閉する", + "description": "折りたたみ式サイドバーカテゴリを切り替えるためのARIAラベル" }, "theme.NavBar.navAriaLabel": { - "message": "ナビゲーション", + "message": "メイン", "description": "メインナビゲーションの ARIA ラベル" }, "theme.navbar.mobileLanguageDropdown.label": { - "message": "その他の言語", + "message": "言語", "description": "モバイル向け言語切り替えドロップダウンのラベル" }, "theme.blog.post.readMore": { - "message": "詳細を見る", - "description": "ブログ記事の抜粋部分に表示される、記事全文へのリンク用ラベル" + "message": "詳細はこちら", + "description": "ブログ記事の抜粋に表示され、記事全文へのリンクとして使われるラベル" }, "theme.blog.post.readMoreLabel": { - "message": "{title} の詳細を確認する", - "description": "抜粋からブログ記事の全文へのリンクに使用する ARIA ラベル" + "message": "{title} の詳細はこちら", + "description": "抜粋からブログ記事全文へのリンクに使用する ARIA ラベル" }, "theme.blog.post.readingTime.plurals": { - "message": "読了時間:約 {readingTime} 分", - "description": "「{readingTime} 分で読了」というテキストの複数形に対応したラベルです。ご利用の言語でサポートされている複数形の形を、可能な限り多く使用してください(\"|\" で区切ります)。詳しくは https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html を参照してください。" + "message": "1分で読めます|{readingTime}分で読めます", + "description": "「{readingTime} 分で読める」というラベルの複数形用文字列。使用する言語がサポートしている複数形の種類に応じて(\"|\" で区切って)指定してください(https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html を参照)。" }, "theme.docs.breadcrumbs.home": { "message": "ホーム", - "description": "パンくずリスト内のホームリンク用ARIAラベル" + "description": "パンくずリスト内のホームページ項目の ARIA ラベル" }, "theme.docs.sidebar.navAriaLabel": { "message": "ドキュメントのサイドバー", "description": "サイドバー ナビゲーションの ARIA ラベル" }, "theme.docs.sidebar.collapseButtonTitle": { - "message": "サイドバーを閉じる", - "description": "ドキュメントサイドバーの折りたたみボタン用の title 属性" + "message": "サイドバーを折りたたむ", + "description": "ドキュメントサイドバーの折りたたみボタンの title 属性" }, "theme.docs.sidebar.collapseButtonAriaLabel": { - "message": "サイドバーを閉じる", + "message": "サイドバーを折りたたむ", "description": "ドキュメントサイドバーの折りたたみボタンの title 属性" }, "theme.docs.sidebar.closeSidebarButtonAriaLabel": { - "message": "ナビゲーションを閉じる", - "description": "モバイルサイドバーの閉じるボタン用のARIAラベル" + "message": "ナビゲーションバーを閉じる", + "description": "モバイルサイドバーの閉じるボタンの ARIA ラベル" }, "theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel": { "message": "← メインメニューへ戻る", - "description": "モバイルナビバーのサイドバー内にあるセカンダリメニュー(通常はドキュメントサイドバーの表示に使用)からメインメニューに戻るための「戻る」ボタンのラベル" + "description": "モバイルナビバー内のサイドバーにあるセカンダリメニュー(主にドキュメントサイドバーの表示に使用)で、メインメニューに戻るための「戻る」ボタンのラベル" }, "theme.ErrorPageContent.title": { - "message": "エラーが発生しました", - "description": "ページがクラッシュしたときに表示される代替ページのタイトル" + "message": "このページでエラーが発生しました。", + "description": "ページがクラッシュしたときに表示されるフォールバックページのタイトル" }, "theme.BackToTopButton.buttonAriaLabel": { - "message": "ページの先頭へ戻る", - "description": "「先頭に戻る」ボタンの ARIA ラベル" + "message": "ページの先頭に戻る", + "description": "「ページの先頭に戻る」ボタンの ARIA ラベル" }, "theme.blog.title": { "message": "ナレッジベース", @@ -145,283 +145,282 @@ }, "theme.blog.archive.title": { "message": "アーカイブ", - "description": "ブログアーカイブページのページタイトルとヒーロータイトル" + "description": "ブログアーカイブページのページタイトルとヒーローセクションのタイトル" }, "theme.blog.archive.description": { "message": "アーカイブ", - "description": "ブログアーカイブページ用のページおよびヒーローの説明文" + "description": "ブログアーカイブページのページおよびヒーローの説明文" }, "theme.blog.paginator.navAriaLabel": { - "message": "ブログ記事一覧ナビゲーション", - "description": "ブログページネーション用の ARIA ラベル" + "message": "ブログ一覧ページのナビゲーション", + "description": "ブログのページネーションのための ARIA ラベル" }, "theme.blog.paginator.newerEntries": { - "message": "新規記事", - "description": "新しいブログ記事ページ(前のページ)に移動するためのラベル" + "message": "新しい投稿", + "description": "新しいブログ記事のページ(前のページ)に移動するためのラベル" }, "theme.blog.paginator.olderEntries": { - "message": "以前の記事", - "description": "古いブログ記事(次のページ)に移動するためのラベル" + "message": "以前のエントリー", + "description": "古いブログ記事のページ(次ページ)に移動するためのラベル" }, "theme.blog.post.paginator.navAriaLabel": { - "message": "ブログ記事ナビゲーション", - "description": "ブログ記事ページネーション用の ARIA ラベル" + "message": "ブログ記事ページ内ナビゲーション", + "description": "ブログ記事のページネーションの ARIA ラベル" }, "theme.blog.post.paginator.newerPost": { "message": "新しい記事", - "description": "前後のブログ記事に移動するボタンのラベル" + "description": "新しい/前のブログ記事に移動するためのボタンラベル" }, "theme.blog.post.paginator.olderPost": { - "message": "過去の記事", - "description": "前後のブログ記事に移動するナビゲーションボタンのラベル" + "message": "過去の投稿", + "description": "前/次のブログ記事へ移動するためのボタンラベル" }, "theme.tags.tagsPageLink": { "message": "すべてのタグを表示", - "description": "タグリストページへのリンク用ラベル" + "description": "タグ一覧ページへのリンクのラベル" }, "theme.colorToggle.ariaLabel": { - "message": "ダークモードを切り替える(現在:{mode})", - "description": "ナビゲーションバーのカラーモード切り替えトグル用の ARIA ラベル" + "message": "ダーク/ライトモードの切り替え(現在:{mode})", + "description": "ナビバーのカラーモード切り替えボタンの ARIA ラベル" }, "theme.colorToggle.ariaLabel.mode.dark": { "message": "ダークモード", - "description": "ダークモードの名称" + "description": "ダークカラーモードの名前" }, "theme.colorToggle.ariaLabel.mode.light": { "message": "ライトモード", - "description": "ライトカラーモード用の名前" + "description": "ライトカラーモードの名前" }, "theme.docs.DocCard.categoryDescription.plurals": { - "message": "{count} 件", - "description": "生成されたインデックスでカテゴリカードに表示され、そのカテゴリ内のアイテム数を示すデフォルトの説明文" + "message": "1件|{count}件", + "description": "生成されたインデックスで、このカテゴリに含まれるアイテム数を説明するカテゴリカードの既定の説明文" }, "theme.docs.paginator.navAriaLabel": { - "message": "ドキュメントのページング", - "description": "ドキュメントのページネーション用 ARIA ラベル" + "message": "ドキュメントページ", + "description": "ドキュメントのページ送り用 ARIA ラベル" }, "theme.docs.paginator.previous": { "message": "前へ", - "description": "前のドキュメントに移動するためのラベル" + "description": "前のドキュメントに移動するためのナビゲーションラベル" }, "theme.docs.paginator.next": { "message": "次へ", "description": "次のドキュメントに移動するためのラベル" }, "theme.docs.tagDocListPageTitle.nDocsTagged": { - "message": "{count} 件のタグ付き文書", - "description": "「{count} docs tagged」の複数形ラベル。使用する言語がサポートしているだけ多くの複数形フォームを \"|\" で区切って指定してください(https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html を参照)。" + "message": "タグ付けされたドキュメント 1 件|タグ付けされたドキュメント {count} 件", + "description": "「{count} docs tagged」というラベルの複数形表現です。対象言語がサポートする限り多くの複数形(「|」で区切って記述)を使用してください(https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html を参照)。" }, "theme.docs.tagDocListPageTitle": { - "message": "「{tagName}」タグの付いたドキュメント {nDocsTagged} 件", + "message": "「{tagName}」のタグが付いた {nDocsTagged}", "description": "ドキュメントタグのページタイトル" }, "theme.docs.versions.unreleasedVersionLabel": { - "message": "これは、{siteTitle} のプレリリース版 {versionLabel} に関するドキュメントです。", - "description": "ユーザーが未リリース版ドキュメントを閲覧していることを示すラベル" + "message": "これは、{siteTitle} {versionLabel} バージョン向けの未公開ドキュメントです。", + "description": "ユーザーに、未リリースのドキュメントのバージョンを閲覧中であることを知らせるためのラベル" }, "theme.docs.versions.unmaintainedVersionLabel": { - "message": "このドキュメントは {siteTitle} バージョン {versionLabel} 向けのもので、現在は更新されていません。", - "description": "保守されていないドキュメントのバージョンをユーザーが閲覧しているときに表示されるラベル" + "message": "これは、現在はメンテナンスが行われていない {siteTitle} {versionLabel} のドキュメントです。", + "description": "ユーザーに、保守されていないドキュメントのバージョンを閲覧していることを知らせるラベル" }, "theme.docs.versions.latestVersionSuggestionLabel": { "message": "最新のドキュメントは {latestVersionLink}({versionLabel})を参照してください。", - "description": "ユーザーに対し最新バージョンを確認するよう促すラベル" + "description": "ユーザーに最新バージョンの確認を促すためのラベル" }, "theme.docs.versions.latestVersionLinkLabel": { "message": "最新バージョン", - "description": "「最新バージョンを提案」リンクに表示されるラベル" + "description": "最新バージョンを提案するリンクに使用されるラベル" }, "theme.docs.versionBadge.label": { - "message": "バージョン: {versionLabel}", - "description": "バージョンラベル" + "message": "バージョン: {versionLabel}" }, "theme.common.editThisPage": { "message": "このページを編集", - "description": "現在のページ編集リンクのラベル" + "description": "現在のページを編集するリンクのラベル" }, "theme.common.headingLinkTitle": { - "message": "{heading} への固定リンク", - "description": "この見出しへのリンク" + "message": "「{heading}」への直接リンク", + "description": "見出しへのリンク用タイトル" }, "theme.lastUpdated.atDate": { - "message": "{date} に", - "description": "ページの最終更新日を表示する際に使用されるテキスト" + "message": " {date} 時点で", + "description": "ページの最終更新日を示す文言" }, "theme.lastUpdated.byUser": { - "message": "{user}", - "description": "ページの最終更新者を示すラベル" + "message": " 作成者: {user}", + "description": "ページの最終更新者を示す語" }, "theme.lastUpdated.lastUpdatedAtBy": { - "message": "最終更新: {atDate}{byUser}", - "description": "ページの最終更新日時と更新者を示すテキスト" + "message": "最終更新{atDate}{byUser}", + "description": "ページの最終更新日時と更新者を表示するための文" }, "theme.tags.tagsListLabel": { "message": "タグ:", - "description": "タグリストの横に表示されるラベル" + "description": "タグリスト横のラベル" }, "theme.AnnouncementBar.closeButtonAriaLabel": { "message": "閉じる", - "description": "お知らせバーの閉じるボタンの ARIA ラベル" + "description": "お知らせバーの閉じるボタン用の ARIA ラベル" }, "theme.admonition.warning": { "message": "警告", - "description": "警告ブロック(:::warning)のデフォルトラベル" + "description": "Warning アドモニション(:::warning)に使用されるデフォルトのラベル" }, "theme.CodeBlock.copied": { - "message": "コピーしました!", - "description": "コードブロックの「コピー」ボタンのラベル" + "message": "コピー済み", + "description": "コードブロック上の「コピーしました」ボタンラベル" }, "theme.CodeBlock.copyButtonAriaLabel": { - "message": "コードをコピー", - "description": "「コードをコピー」ボタンの ARIA ラベル" + "message": "コードをクリップボードにコピー", + "description": "コードブロックをコピーするボタン用の ARIA ラベル" }, "theme.CodeBlock.copy": { "message": "コピー", - "description": "コードブロックの「コピー」ボタンのラベル" + "description": "コードブロック内の「コピー」ボタンのラベル" }, "theme.CodeBlock.wordWrapToggle": { "message": "行の折り返しを切り替える", - "description": "コードブロックの行折り返し切り替えボタンの title 属性" + "description": "コードブロックの行の折り返しを切り替えるボタンの title 属性" }, "theme.DocSidebarItem.expandCategoryAriaLabel": { - "message": "「{label}」の目次を開く", + "message": "「{label}」カテゴリを展開", "description": "サイドバーのカテゴリを展開するための ARIA ラベル" }, "theme.DocSidebarItem.collapseCategoryAriaLabel": { - "message": "{label} の目次を閉じる", - "description": "サイドバーのカテゴリを折りたたむための ARIA ラベル" + "message": "サイドバーの「{label}」カテゴリを折りたたむ", + "description": "サイドバーのカテゴリを折りたたむためのARIAラベル" }, "theme.NotFound.p1": { - "message": "お探しのページは見つかりませんでした", + "message": "お探しのものが見つかりませんでした。", "description": "404 ページの第1段落" }, "theme.NotFound.p2": { - "message": "このページへリンクしているサイトの管理者に、リンクがリンク切れであることをお知らせください。", - "description": "404ページの第2段落" + "message": "元のURLにリンクしていたサイトの管理者に連絡し、そのリンクが切れていることをお知らせください。", + "description": "404 ページの 2 番目の段落" }, "theme.TOCCollapsible.toggleButtonLabel": { - "message": "このページ内の見出し", + "message": "このページの内容", "description": "折りたたみ式目次コンポーネントのボタンに表示されるラベル" }, "theme.docs.sidebar.toggleSidebarButtonAriaLabel": { - "message": "ナビゲーションバーを開く", - "description": "モバイルナビゲーションのハンバーガーメニューボタンの ARIA ラベル" + "message": "ナビゲーションバーの表示を切り替え", + "description": "モバイルナビゲーションのハンバーガーメニューボタンに設定する ARIA ラベル" }, "theme.docs.sidebar.expandButtonTitle": { "message": "サイドバーを開く", - "description": "ドキュメントサイドバーの展開ボタン用ARIAラベルとtitle属性" + "description": "ドキュメントサイドバーの展開ボタンに使用する ARIA ラベルと title 属性" }, "theme.docs.sidebar.expandButtonAriaLabel": { - "message": "サイドバーを開く", - "description": "ドキュメントサイドバーの展開ボタンで使用される ARIA ラベルと title 属性" + "message": "サイドバーを展開", + "description": "ドキュメントサイドバーの展開ボタンに使用する ARIA ラベルと title 属性" }, "theme.SearchBar.label": { "message": "検索", "description": "検索ボタンの ARIA ラベルとプレースホルダー" }, "theme.SearchModal.searchBox.resetButtonTitle": { - "message": "クリア", - "description": "検索ボックスのリセットボタンのラベルおよび ARIA ラベル" + "message": "クエリをクリア", + "description": "検索ボックスのリセットボタン用のラベルと ARIA ラベル" }, "theme.SearchModal.searchBox.cancelButtonText": { "message": "キャンセル", "description": "検索ボックスのキャンセルボタンのラベルおよび ARIA ラベル" }, "theme.SearchModal.startScreen.recentSearchesTitle": { - "message": "最近の検索", - "description": "最近の検索のタイトル" + "message": "最近", + "description": "最近の検索の見出し" }, "theme.SearchModal.startScreen.noRecentSearchesText": { "message": "最近の検索はありません", - "description": "最近の検索がない場合に表示されるテキスト" + "description": "最近の検索がない場合に表示するテキスト" }, "theme.SearchModal.startScreen.saveRecentSearchButtonTitle": { "message": "この検索条件を保存", - "description": "「最近の検索を保存」ボタンのラベル" + "description": "最近の検索を保存するボタンのラベル" }, "theme.SearchModal.startScreen.removeRecentSearchButtonTitle": { - "message": "履歴からこの検索を削除", - "description": "[最近の検索をクリア]ボタンのラベル" + "message": "この検索を履歴から削除", + "description": "「最近の検索を削除」ボタンのラベル" }, "theme.SearchModal.startScreen.favoriteSearchesTitle": { - "message": "保存した検索", - "description": "お気に入り検索用のタイトル" + "message": "お気に入り", + "description": "お気に入り検索のタイトル" }, "theme.SearchModal.startScreen.removeFavoriteSearchButtonTitle": { - "message": "この検索をお気に入りから削除", - "description": "「お気に入り検索を削除」ボタンのラベル" + "message": "この検索条件をお気に入りから削除", + "description": "お気に入り検索を削除するボタンのラベル" }, "theme.SearchModal.errorScreen.titleText": { - "message": "検索結果を取得できませんでした", + "message": "結果を取得できませんでした", "description": "検索モーダルのエラー画面用タイトル" }, "theme.SearchModal.errorScreen.helpText": { "message": "ネットワーク接続を確認してください。", - "description": "検索モーダルのエラー画面に表示するヘルプテキスト" + "description": "検索モーダルのエラー画面に表示されるヘルプテキスト" }, "theme.SearchModal.footer.selectText": { - "message": "選択", - "description": "Enterキー押下時の動作の説明" + "message": "選択する", + "description": "Enter キーに割り当てられたアクションの説明テキスト" }, "theme.SearchModal.footer.selectKeyAriaLabel": { "message": "Enterキー", - "description": "選択を確定するための Enter キーボタンの ARIA ラベル" + "description": "選択を確定する Enter キー ボタン用の ARIA ラベル" }, "theme.SearchModal.footer.navigateText": { - "message": "実行", - "description": "上矢印キーおよび下矢印キーの動作説明テキスト" + "message": "移動する", + "description": "↑キーおよび↓キーの操作内容を説明するテキスト" }, "theme.SearchModal.footer.navigateUpKeyAriaLabel": { - "message": "上矢印キー", - "description": "ナビゲーション用の上矢印キー ボタンの ARIA ラベル" + "message": "上向き矢印", + "description": "ナビゲーションを行うための「上向き矢印キー」ボタン用の ARIA ラベル" }, "theme.SearchModal.footer.navigateDownKeyAriaLabel": { - "message": "下向き矢印キー", - "description": "ナビゲーションを操作する下向き矢印キー ボタンの ARIA ラベル" + "message": "下向きの矢印", + "description": "ナビゲーション用の下向き矢印キー ボタンの ARIA ラベル" }, "theme.SearchModal.footer.closeText": { "message": "閉じる", - "description": "Esc キー動作の説明" + "description": "Escapeキー押下時の動作を説明するテキスト" }, "theme.SearchModal.footer.closeKeyAriaLabel": { "message": "Escキー", - "description": "モーダルを閉じるための Escape キーボタン用の ARIA ラベル" + "description": "Escape キーでモーダルを閉じるボタンの ARIA ラベル" }, "theme.SearchModal.footer.searchByText": { - "message": "検索", - "description": "この文章は、検索機能が Algolia によって実現されていることを説明しています。" + "message": "検索条件", + "description": "このテキストでは、検索が Algolia によって実行されていることを説明しています。" }, "theme.SearchModal.noResultsScreen.noResultsText": { - "message": "該当する結果はありません", - "description": "このテキストは、次の検索に対して結果が見つからなかったことを示しています" + "message": "該当する結果がありません", + "description": "このテキストは、次の検索に結果がないことを説明しています。" }, "theme.SearchModal.noResultsScreen.suggestedQueryText": { - "message": "次の検索を試してください:", - "description": "以下の検索で結果が見つからなかった場合に表示される、提案検索クエリのテキスト" + "message": "検索してみてください", + "description": "次の検索で結果が見つからなかった場合に表示する、提案クエリのテキスト" }, "theme.SearchModal.noResultsScreen.reportMissingResultsText": { - "message": "もっと良い検索結果はありますか?", - "description": "ユーザーが一部の結果が抜けていると感じたときに表示されるプロンプト用のテキスト" + "message": "このクエリで結果が返るはずだとお考えですか?", + "description": "ユーザーが結果が不足していると感じたときの質問文のテキスト" }, "theme.SearchModal.noResultsScreen.reportMissingResultsLinkText": { - "message": "レポート", - "description": "不足している結果を報告するためのリンクのラベル" + "message": "ご連絡ください。", + "description": "結果が見つからないことを報告するリンク用のテキスト" }, "theme.SearchModal.placeholder": { - "message": "ドキュメントを検索", - "description": "DocSearch ポップアップモーダル内の入力フィールド用プレースホルダーテキスト" + "message": "ドキュメント検索", + "description": "DocSearch ポップアップモーダルの入力フィールドのプレースホルダー" }, "theme.blog.post.plurals": { - "message": "{count} 件", - "description": "「{count} 件の投稿」に対応する複数形ラベル。言語がサポートする複数形の形をすべて使用し(\"|\" で区切る)、詳細は https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html を参照してください。" + "message": "1件の投稿|{count}件の投稿", + "description": "「{count} 件の投稿」に対応する複数形ラベルです。使用している言語でサポートされているだけの複数形(\"|\" で区切る)を使用してください(https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html を参照)。" }, "theme.blog.tagTitle": { - "message": "「{tagName}」タグが付いた投稿が {nPosts} 件あります", + "message": "「{tagName}」タグが付いた投稿 {nPosts} 件", "description": "ブログタグページのタイトル" }, "theme.blog.author.pageTitle": { "message": "{authorName} - 投稿 {nPosts}件", - "description": "ブログ執筆者ページのタイトル" + "description": "ブログ著者向けページのタイトル" }, "theme.blog.authorsList.pageTitle": { "message": "著者", @@ -429,35 +428,35 @@ }, "theme.blog.authorsList.viewAll": { "message": "すべての著者を表示", - "description": "ブログ執筆者ページへのリンクラベル" + "description": "ブログ著者ページへのリンクのラベル" }, "theme.blog.author.noPosts": { - "message": "この著者はまだ何も投稿していません。", - "description": "まだブログ記事を投稿していない著者向けのテキスト" + "message": "この著者はまだ投稿を公開していません。", + "description": "ブログ記事をまだ投稿していない著者向けのテキスト" }, "theme.contentVisibility.unlistedBanner.title": { - "message": "非公開ページ", + "message": "非掲載ページ", "description": "限定公開コンテンツ用バナーのタイトル" }, "theme.contentVisibility.unlistedBanner.message": { - "message": "このページは非公開です。検索結果には表示されず、このページへの直接リンクを知っているユーザーのみが閲覧できます。", - "description": "限定公開コンテンツバナーのメッセージ" + "message": "このページは一覧に表示されません。検索エンジンでインデックスされず、直接のリンクを知っているユーザーだけがアクセスできます。", + "description": "限定公開コンテンツ用バナー メッセージ" }, "theme.contentVisibility.draftBanner.title": { "message": "下書きページ", - "description": "下書きコンテンツ用バナーのタイトル" + "description": "下書きコンテンツのバナータイトル" }, "theme.contentVisibility.draftBanner.message": { - "message": "このページはドラフトであり、本番環境で一般公開されているコンテンツには含まれていません。", - "description": "ドラフトコンテンツのバナーメッセージ" + "message": "このページはドラフトです。開発環境でのみ表示され、本番ビルドからは除外されます。", + "description": "ドラフトコンテンツバナーのメッセージ" }, "theme.ErrorPageContent.tryAgain": { - "message": "再試行してください。", - "description": "React のエラーバウンダリがエラーを検知した際に、レンダリングを再試行するボタンのラベル" + "message": "再試行してください", + "description": "React のエラーバウンダリがエラーをキャプチャしたときに、再度レンダリングを試行するためのボタンのラベル" }, "theme.common.skipToMainContent": { "message": "メインコンテンツへスキップ", - "description": "アクセシビリティのために使用される「コンテンツへスキップ」ラベル。キーボードの Tab/Enter による操作で、ユーザーがメインコンテンツへすばやく移動できるようにします" + "description": "キーボードの Tab/Enter 操作でメインコンテンツへすばやく移動できるようにする、アクセシビリティ対応の「コンテンツへスキップ」ラベル" }, "theme.tags.tagsPageTitle": { "message": "タグ", @@ -586,20 +585,16 @@ "description": "有用なデータセットとチュートリアル" }, "sidebar.dropdownCategories.category.Cloud": { - "message": "クラウド", - "description": "クラウド" + "message": "クラウド" }, "sidebar.dropdownCategories.category.description.Cloud": { - "message": "ClickHouse を最速でデプロイする方法", - "description": "ClickHouse を最速でデプロイする方法" + "message": "ClickHouse を最速でデプロイする方法" }, "sidebar.dropdownCategories.category.Cloud.Get Started": { - "message": "はじめに", - "description": "はじめに" + "message": "はじめに" }, "sidebar.dropdownCategories.category.Cloud.Get Started.description": { - "message": "今すぐ ClickHouse Cloud を始めましょう", - "description": "ClickHouse Cloud をすぐに使い始める" + "message": "ClickHouse Cloud をすぐに使い始める" }, "sidebar.dropdownCategories.category.Cloud.Managing Cloud": { "message": "クラウド管理", @@ -746,36 +741,28 @@ "description": "ClickHouse の運用・管理に役立つメタデータテーブル" }, "sidebar.dropdownCategories.category.Reference": { - "message": "リファレンス", - "description": "リファレンス" + "message": "リファレンス" }, "sidebar.dropdownCategories.category.description.Reference": { - "message": "ClickHouse 機能のリファレンスドキュメント", - "description": "ClickHouse 機能リファレンス" + "message": "ClickHouse 機能のリファレンスドキュメント" }, "sidebar.dropdownCategories.category.Reference.Introduction": { - "message": "概要", - "description": "はじめに" + "message": "概要" }, "sidebar.dropdownCategories.category.Reference.Introduction.description": { - "message": "ClickHouse の構文を学ぶ", - "description": "ClickHouse の構文を学ぶ" + "message": "ClickHouse の構文を学習する" }, "sidebar.dropdownCategories.category.Reference.Functions": { - "message": "関数", - "description": "関数" + "message": "関数" }, "sidebar.dropdownCategories.category.Reference.Functions.description": { - "message": "データ分析向けの数百種類の組み込み関数", - "description": "データ分析のための数百の組み込み関数" + "message": "データ分析に役立つ数百の組み込み関数" }, "sidebar.dropdownCategories.category.Reference.Engines": { - "message": "エンジン", - "description": "エンジン" + "message": "エンジン" }, "sidebar.dropdownCategories.category.Reference.Engines.description": { - "message": "データに最適なテーブルエンジンおよびデータベースエンジンを利用する", - "description": "データに適したテーブルエンジンとデータベースエンジンを選ぶ" + "message": "データに適したテーブルエンジンとデータベースエンジンを選択する" }, "sidebar.dropdownCategories.category.Reference.Other Features": { "message": "追加の機能", @@ -786,12 +773,10 @@ "description": "ClickHouse のその他の機能を詳しく見る" }, "sidebar.dropdownCategories.category.Integrations": { - "message": "連携", - "description": "連携" + "message": "連携" }, "sidebar.dropdownCategories.category.description.Integrations": { - "message": "ClickHouse 用のインテグレーション、クライアント、ドライバー", - "description": "ClickHouse のインテグレーション、クライアント、およびドライバー" + "message": "ClickHouse で利用できるインテグレーション、クライアント、ドライバー" }, "sidebar.dropdownCategories.category.Integrations.All Integrations": { "message": "すべての連携", @@ -810,12 +795,10 @@ "description": "お好みのプログラミング言語から ClickHouse を利用する" }, "sidebar.dropdownCategories.category.Integrations.ClickPipes": { - "message": "ClickPipes", - "description": "ClickPipes" + "message": "ClickPipes" }, "sidebar.dropdownCategories.category.Integrations.ClickPipes.description": { - "message": "ClickHouse へのデータ取り込みを最も簡単に行う方法", - "description": "ClickHouse にデータを取り込む最も簡単な方法" + "message": "ClickHouse へのデータ取り込みを最も簡単に行う方法" }, "sidebar.dropdownCategories.category.Integrations.Native Clients & Interfaces": { "message": "ネイティブクライアントとインターフェース", @@ -858,20 +841,16 @@ "description": "さまざまな ELT ツールで ClickHouse にデータを取り込む" }, "sidebar.dropdownCategories.category.chDB": { - "message": "chDB", - "description": "chDB" + "message": "chDB" }, "sidebar.dropdownCategories.category.description.chDB": { - "message": "chDB は、ClickHouse の組み込み版です。", - "description": "chDB は組み込み型 ClickHouse データベースです" + "message": "chDB は ClickHouse の組み込み版です" }, "sidebar.dropdownCategories.category.chDB.Learn chDB": { - "message": "chDB について詳しく知る", - "description": "chDB を学ぶ" + "message": "chDB を学ぶ" }, "sidebar.dropdownCategories.category.chDB.Learn chDB.description": { - "message": "chDB の使用方法を学ぶ", - "description": "chDB を使用する" + "message": "chDB の使用方法を学ぶ" }, "sidebar.dropdownCategories.category.chDB.Language Integrations": { "message": "言語インテグレーション", @@ -882,44 +861,34 @@ "description": "プログラミング言語向けクライアントライブラリを使用して chDB に接続する" }, "sidebar.dropdownCategories.category.chDB.Guides": { - "message": "ガイド", - "description": "ガイド" + "message": "ガイド" }, "sidebar.dropdownCategories.category.chDB.Guides.description": { - "message": "chDB の利用ガイド", - "description": "chDB の利用ガイド" + "message": "chDB を活用するためのガイド" }, "sidebar.dropdownCategories.category.About": { - "message": "概要", - "description": "概要" + "message": "概要" }, "sidebar.dropdownCategories.category.description.About": { - "message": "ClickHouse の詳細を確認する", - "description": "ClickHouse についてさらに詳しく知る" + "message": "ClickHouse の詳細を確認する" }, "sidebar.dropdownCategories.category.About.Adopters": { - "message": "実装例", - "description": "導入企業" + "message": "採用企業" }, "sidebar.dropdownCategories.category.About.Adopters.description": { - "message": "ClickHouse を導入している企業", - "description": "ClickHouse ユーザー" + "message": "ClickHouse 採用企業" }, "sidebar.dropdownCategories.category.About.Changelogs": { - "message": "変更履歴", - "description": "更新履歴" + "message": "変更履歴" }, "sidebar.dropdownCategories.category.About.Changelogs.description": { - "message": "最新の ClickHouse の変更内容を確認", - "description": "ClickHouse の最近の変更を確認" + "message": "ClickHouse の最新の変更内容を表示" }, "sidebar.dropdownCategories.category.About.Support": { - "message": "サポート", - "description": "サポート" + "message": "サポート" }, "sidebar.dropdownCategories.category.About.Support.description": { - "message": "ClickHouse エンジニアによるサポート", - "description": "ClickHouse エンジニアに相談する" + "message": "ClickHouse エンジニアによるサポート" }, "sidebar.dropdownCategories.category.About.Development and Contributing": { "message": "開発と貢献", @@ -938,408 +907,29 @@ "Report an issue": { "message": "問題を報告する" }, - "theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel": { - "message": "サイドバーの折りたたみカテゴリ「{label}」の表示/非表示を切り替える", - "description": "折りたたみ式サイドバーカテゴリを切り替えるための ARIA ラベル" - }, - "theme.NavBar.navAriaLabel": { - "message": "メイン", - "description": "メインナビゲーションの ARIA ラベル" - }, - "theme.navbar.mobileLanguageDropdown.label": { - "message": "言語", - "description": "モバイル版の言語切り替えドロップダウンのラベル" - }, - "theme.NotFound.p1": { - "message": "お探しの内容が見つかりませんでした。", - "description": "404 ページの第1段落" - }, - "theme.NotFound.p2": { - "message": "元のURLへリンクしていたサイトの管理者に連絡し、そのリンクがリンク切れであることを知らせてください。", - "description": "404ページの2番目の段落" - }, - "theme.blog.post.readingTime.plurals": { - "message": "読了時間1分|読了時間{readingTime}分", - "description": "「{readingTime} 分で読める」のラベルを複数形にしたものです。あなたの言語がサポートする複数形の形ごとにラベルを用意し、\"|\" で区切って指定してください(https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html を参照)。" - }, - "theme.docs.breadcrumbs.home": { - "message": "ホームページ", - "description": "パンくずリスト内のホームページ用の ARIA ラベル" - }, - "theme.blog.post.readMore": { - "message": "続きを読む", - "description": "ブログ記事の抜粋に表示され、完全な記事へのリンクとして使われるラベル" - }, - "theme.blog.post.readMoreLabel": { - "message": "{title} について詳しく見る", - "description": "抜粋からブログ記事の全文へのリンク用の ARIA ラベル" - }, - "theme.docs.sidebar.collapseButtonTitle": { - "message": "サイドバーを折りたたむ", - "description": "ドキュメントサイドバーの折りたたみボタンの title 属性" - }, - "theme.docs.sidebar.collapseButtonAriaLabel": { - "message": "サイドバーを閉じる", - "description": "ドキュメントサイドバーの折りたたみボタンに設定する title 属性" - }, - "theme.docs.sidebar.navAriaLabel": { - "message": "ドキュメントのサイドバー", - "description": "サイドバー ナビゲーションの ARIA ラベル" - }, - "theme.docs.sidebar.closeSidebarButtonAriaLabel": { - "message": "ナビゲーションバーを閉じる", - "description": "モバイルサイドバーの閉じるボタンの ARIA ラベル" - }, - "theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel": { - "message": "← メインメニューに戻る", - "description": "モバイル用ナビバーのサイドバーにあるセカンダリメニュー(主にドキュメントサイドバーの表示に使用)で、メインメニューへ戻るための戻るボタンのラベル" - }, - "theme.ErrorPageContent.title": { - "message": "このページでエラーが発生しました。", - "description": "ページクラッシュ時に表示されるフォールバックページのタイトル" - }, - "theme.BackToTopButton.buttonAriaLabel": { - "message": "ページトップに戻る", - "description": "「ページの先頭に戻る」ボタンのARIAラベル" - }, - "theme.blog.archive.title": { - "message": "アーカイブ", - "description": "ブログアーカイブページのページタイトルおよびヒーロータイトル" - }, - "theme.blog.archive.description": { - "message": "アーカイブ", - "description": "ブログアーカイブページのページ全体およびヒーローセクションの説明文" - }, - "theme.blog.paginator.navAriaLabel": { - "message": "ブログ一覧ページのナビゲーション", - "description": "ブログのページネーション用の ARIA ラベル" - }, - "theme.blog.paginator.newerEntries": { - "message": "新しい投稿", - "description": "新しいブログ記事のページ(前のページ)に移動するためのラベル" - }, - "theme.blog.paginator.olderEntries": { - "message": "過去のエントリ", - "description": "古いブログ記事のページ(次のページ)に移動するためのラベル" - }, - "theme.blog.post.paginator.navAriaLabel": { - "message": "ブログ記事ページのナビゲーション", - "description": "ブログ記事のページネーションに使用する ARIA ラベル" - }, - "theme.blog.post.paginator.newerPost": { - "message": "新しい記事", - "description": "新しい/前のブログ記事へ移動するためのボタンラベル" - }, - "theme.blog.post.paginator.olderPost": { - "message": "以前の投稿", - "description": "前/次のブログ記事へ移動するためのボタンラベル" - }, - "theme.tags.tagsPageLink": { - "message": "すべてのタグを表示", - "description": "タグ一覧ページへのリンクのラベル" - }, - "theme.colorToggle.ariaLabel": { - "message": "ダークモード/ライトモードを切り替える(現在:{mode})", - "description": "ナビゲーションバーのカラーモード切り替えトグル用の ARIA ラベル" - }, - "theme.colorToggle.ariaLabel.mode.dark": { - "message": "ダークモード", - "description": "ダークカラーモードの名称" - }, - "theme.colorToggle.ariaLabel.mode.light": { - "message": "ライトモード", - "description": "ライトカラーモードの名前" - }, - "theme.docs.DocCard.categoryDescription.plurals": { - "message": "1 件|{count} 件", - "description": "自動生成されたインデックスで、このカテゴリに含まれる項目数を示すカテゴリカードの既定の説明文" - }, - "theme.docs.paginator.navAriaLabel": { - "message": "ドキュメントページ", - "description": "ドキュメントページネーション用の ARIA ラベル" - }, - "theme.docs.paginator.previous": { - "message": "前へ", - "description": "前のドキュメントに戻るためのラベル" - }, - "theme.docs.paginator.next": { - "message": "次へ", - "description": "次のドキュメントに進むためのラベル" - }, - "theme.docs.tagDocListPageTitle.nDocsTagged": { - "message": "1 件のドキュメントにタグ付け済み|{count} 件のドキュメントにタグ付け済み", - "description": "「{count} docs tagged」というラベルの複数形。使用する言語がサポートする複数形の形の種類だけ、\"|\" で区切って指定してください(https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html を参照)。" - }, - "theme.docs.tagDocListPageTitle": { - "message": "「{tagName}」タグ付きの{nDocsTagged}", - "description": "ドキュメントタグのページタイトル" - }, - "theme.docs.versionBadge.label": { - "message": "バージョン: {versionLabel}" - }, - "theme.docs.versions.unreleasedVersionLabel": { - "message": "これは、{siteTitle} の {versionLabel} バージョンに関する未リリースのドキュメントです。", - "description": "ユーザーに未リリースのドキュメントバージョンを閲覧中であることを知らせるラベル" - }, - "theme.docs.versions.unmaintainedVersionLabel": { - "message": "これは、{siteTitle} {versionLabel} 向けのドキュメントで、現在は積極的にはメンテナンスされていません。", - "description": "ユーザーに、閲覧中のドキュメントがメンテナンスされていないバージョンであることを知らせるためのラベル" - }, - "theme.docs.versions.latestVersionSuggestionLabel": { - "message": "最新のドキュメントは、{latestVersionLink}({versionLabel})を参照してください。", - "description": "ユーザーに最新バージョンの確認を促すラベル" - }, - "theme.docs.versions.latestVersionLinkLabel": { - "message": "最新バージョン", - "description": "最新バージョンの提案リンク用のラベル" - }, - "theme.common.editThisPage": { - "message": "このページを編集", - "description": "現在のページを編集するリンクのラベル" - }, - "theme.common.headingLinkTitle": { - "message": "{heading} への直接リンク", - "description": "見出しリンクのタイトル" - }, - "theme.lastUpdated.atDate": { - "message": " {date} に", - "description": "ページの最終更新日を示す文言" - }, - "theme.lastUpdated.byUser": { - "message": " 著者: {user}", - "description": "ページの最終更新者を示す文言" - }, - "theme.lastUpdated.lastUpdatedAtBy": { - "message": "最終更新日時{atDate}{byUser}", - "description": "ページの最終更新日時と更新者を表示するための文言" - }, - "theme.tags.tagsListLabel": { - "message": "タグ:", - "description": "タグリストの横にあるラベル" - }, - "theme.admonition.warning": { - "message": "警告", - "description": "Warning アドモニション (:::warning) に使用されるデフォルトのラベル" - }, - "theme.AnnouncementBar.closeButtonAriaLabel": { - "message": "閉じる", - "description": "お知らせバーの閉じるボタンの ARIA ラベル" - }, - "theme.CodeBlock.copied": { - "message": "コピーしました", - "description": "コードブロック上の「コピー済み」ボタンのラベル" - }, - "theme.CodeBlock.copyButtonAriaLabel": { - "message": "コードをクリップボードにコピー", - "description": "コードブロックをコピーするボタン用の ARIA ラベル" - }, - "theme.CodeBlock.copy": { - "message": "コピー", - "description": "コードブロックのコピーボタンのラベル" - }, - "theme.CodeBlock.wordWrapToggle": { - "message": "行の折り返しを切り替える", - "description": "コードブロックの行折り返しを切り替えるボタンの title 属性" - }, - "theme.DocSidebarItem.expandCategoryAriaLabel": { - "message": "サイドバーの「{label}」カテゴリを展開する", - "description": "サイドバーのカテゴリを展開するための ARIA ラベル" - }, - "theme.DocSidebarItem.collapseCategoryAriaLabel": { - "message": "サイドバーの「{label}」カテゴリを折りたたむ", - "description": "サイドバーのカテゴリを折りたたむための ARIA ラベル" - }, - "theme.TOCCollapsible.toggleButtonLabel": { - "message": "このページの内容", - "description": "折りたたみ式目次コンポーネントのボタンに表示されるラベル" - }, - "theme.docs.sidebar.toggleSidebarButtonAriaLabel": { - "message": "ナビゲーションバーの表示切り替え", - "description": "モバイルナビゲーションのハンバーガーメニューボタンのARIAラベル" - }, - "theme.docs.sidebar.expandButtonTitle": { - "message": "サイドバーを展開", - "description": "ドキュメントサイドバーの展開ボタンに使用する ARIA ラベルおよび title 属性" - }, - "theme.docs.sidebar.expandButtonAriaLabel": { - "message": "サイドバーを展開", - "description": "ドキュメントサイドバーの展開ボタンに設定する ARIA ラベルおよび title 属性" - }, - "theme.SearchPage.algoliaLabel": { - "message": "Algolia による検索", - "description": "Algolia メンション用の ARIA ラベル" - }, - "theme.SearchBar.label": { - "message": "検索", - "description": "検索ボタンの ARIA ラベルとプレースホルダー" - }, - "theme.SearchModal.searchBox.resetButtonTitle": { - "message": "クエリをクリア", - "description": "検索ボックスのリセットボタンのラベルと ARIA ラベル" - }, - "theme.SearchModal.searchBox.cancelButtonText": { - "message": "キャンセル", - "description": "検索ボックスのキャンセルボタンのラベルおよび ARIA ラベル" - }, - "theme.SearchModal.startScreen.recentSearchesTitle": { - "message": "最近", - "description": "最近の検索の見出し" - }, - "theme.SearchModal.startScreen.noRecentSearchesText": { - "message": "最近の検索はありません", - "description": "最近の検索がない場合に表示するテキスト" - }, - "theme.SearchModal.startScreen.saveRecentSearchButtonTitle": { - "message": "この検索条件を保存", - "description": "「最近の検索を保存」ボタンのラベル" - }, - "theme.SearchModal.startScreen.removeRecentSearchButtonTitle": { - "message": "この検索を履歴から削除", - "description": "最近の検索の削除ボタンのラベル" - }, - "theme.SearchModal.startScreen.favoriteSearchesTitle": { - "message": "お気に入り", - "description": "お気に入り検索のタイトル" - }, - "theme.SearchModal.startScreen.removeFavoriteSearchButtonTitle": { - "message": "お気に入りからこの検索を削除", - "description": "お気に入り検索の削除ボタンのラベル" - }, - "theme.SearchModal.errorScreen.titleText": { - "message": "結果を取得できませんでした", - "description": "検索モーダルのエラー画面タイトル" - }, - "theme.SearchModal.errorScreen.helpText": { - "message": "ネットワーク接続を確認してください。", - "description": "検索モーダルのエラー画面に表示されるヘルプテキスト" - }, - "theme.SearchModal.footer.selectText": { - "message": "選択する", - "description": "Enterキー押下時の動作の説明文" - }, - "theme.SearchModal.footer.selectKeyAriaLabel": { - "message": "Enterキー", - "description": "選択を確定する Enter キー ボタンの ARIA ラベル" - }, - "theme.SearchModal.footer.navigateText": { - "message": "移動する", - "description": "↑キーおよび↓キーの操作内容を説明するテキスト" - }, - "theme.SearchModal.footer.navigateUpKeyAriaLabel": { - "message": "上矢印", - "description": "ナビゲーション用の上矢印キー ボタンの ARIA ラベル" - }, - "theme.SearchModal.footer.navigateDownKeyAriaLabel": { - "message": "下向きの矢印", - "description": "ナビゲーションを開始する下向き矢印キー ボタンの ARIA ラベル" - }, - "theme.SearchModal.footer.closeText": { - "message": "閉じる", - "description": "Escape キー押下時の動作を説明するテキスト" - }, - "theme.SearchModal.footer.closeKeyAriaLabel": { - "message": "Escキー", - "description": "モーダルを閉じるための Esc キーボタンの ARIA ラベル" - }, - "theme.SearchModal.footer.searchByText": { - "message": "検索方法", - "description": "このテキストでは、検索に Algolia を使用していることを説明しています。" - }, - "theme.SearchModal.noResultsScreen.noResultsText": { - "message": "の検索結果はありません", - "description": "このテキストは、次の検索に対する結果が存在しないことを説明しています" - }, - "theme.SearchModal.noResultsScreen.suggestedQueryText": { - "message": "次のキーワードで検索してみてください", - "description": "次の検索で結果が見つからなかった場合に表示する、提案クエリのテキスト" - }, - "theme.SearchModal.noResultsScreen.reportMissingResultsText": { - "message": "このクエリで結果が返るはずだとお考えですか?", - "description": "ユーザーが結果が不足していると感じたときに表示される質問のテキスト" - }, - "theme.SearchModal.noResultsScreen.reportMissingResultsLinkText": { - "message": "ご連絡ください。", - "description": "不足している結果を報告するためのリンクテキスト" - }, - "theme.SearchModal.placeholder": { - "message": "ドキュメントを検索", - "description": "DocSearch のポップアップモーダルにある入力フィールドのプレースホルダー" - }, - "theme.blog.post.plurals": { - "message": "1件の投稿|{count}件の投稿", - "description": "「{count} 件の投稿」の複数形用ラベルです。使用言語がサポートする複数形のパターンをすべて(\"|\" で区切って)指定してください(https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html を参照)。" - }, - "theme.blog.tagTitle": { - "message": "「{tagName}」タグが付いた投稿 {nPosts} 件", - "description": "ブログタグ用ページのタイトル" - }, - "theme.blog.author.pageTitle": { - "message": "{authorName} - 投稿 {nPosts}件", - "description": "ブログ著者ページのタイトル" - }, - "theme.blog.authorsList.pageTitle": { - "message": "著者", - "description": "著者ページのタイトル" - }, - "theme.blog.authorsList.viewAll": { - "message": "すべての著者を表示", - "description": "ブログ著者ページへのリンクのラベル" - }, - "theme.blog.author.noPosts": { - "message": "この著者はまだ投稿を作成していません。", - "description": "ブログ投稿が 0 件の著者向けテキスト" - }, - "theme.contentVisibility.unlistedBanner.title": { - "message": "非公開ページ", - "description": "非公開コンテンツバナーのタイトル" - }, - "theme.contentVisibility.unlistedBanner.message": { - "message": "このページは非公開設定になっています。検索エンジンによってインデックスされることはなく、このページへの直接リンクを知っているユーザーだけがアクセスできます。", - "description": "非公開コンテンツバナーのメッセージ" - }, - "theme.contentVisibility.draftBanner.title": { - "message": "下書きページ", - "description": "下書きコンテンツバナーのタイトル" - }, - "theme.contentVisibility.draftBanner.message": { - "message": "このページはドラフトです。開発環境でのみ表示され、本番環境のビルドには含まれません。", - "description": "下書きコンテンツ用バナーのメッセージ" - }, - "theme.ErrorPageContent.tryAgain": { - "message": "再試行", - "description": "React のエラーバウンダリがエラーを捕捉した際に、再レンダリングを試みるボタンのラベル" - }, - "theme.common.skipToMainContent": { - "message": "メインコンテンツへスキップ", - "description": "アクセシビリティ向上のために使用される「コンテンツへスキップ」ラベルで、キーボードの Tab/Enter 操作によってメインコンテンツへ素早く移動できるようにします" - }, - "theme.tags.tagsPageTitle": { - "message": "タグ", - "description": "タグ一覧ページのタイトル" - }, "sidebar.dropdownCategories.category.Get started": { "message": "はじめに" }, "sidebar.dropdownCategories.category.description.Get started": { - "message": "ClickHouse の使い方を学ぶ" + "message": "ClickHouse の使い方を習得する" }, "sidebar.dropdownCategories.category.Get started.Introduction": { - "message": "イントロダクション" + "message": "概要" }, "sidebar.dropdownCategories.category.Get started.Introduction.description": { - "message": "ClickHouse の紹介" + "message": "ClickHouse の概要" }, "sidebar.dropdownCategories.category.Get started.Concepts": { - "message": "コンセプト" + "message": "基本概念" }, "sidebar.dropdownCategories.category.Get started.Concepts.description": { - "message": "知っておくべき中核概念" + "message": "理解しておくべき基本概念" }, "sidebar.dropdownCategories.category.Get started.Starter guides": { - "message": "スターターガイド" + "message": "入門ガイド" }, "sidebar.dropdownCategories.category.Get started.Starter guides.description": { - "message": "ClickHouse を学ぶならここから" + "message": "ClickHouse を学ぶなら、まずはここから" }, "sidebar.dropdownCategories.category.Get started.Best practices": { "message": "ベストプラクティス" @@ -1348,16 +938,16 @@ "message": "ClickHouse のベストプラクティスに従う" }, "sidebar.dropdownCategories.category.Get started.Migration guides": { - "message": "マイグレーションガイド" + "message": "移行ガイド" }, "sidebar.dropdownCategories.category.Get started.Migration guides.description": { "message": "データベースを ClickHouse に移行する" }, "sidebar.dropdownCategories.category.Get started.Use case guides": { - "message": "ユースケースガイド" + "message": "ユースケース別ガイド" }, "sidebar.dropdownCategories.category.Get started.Use case guides.description": { - "message": "ClickHouse の一般的なユースケースガイド" + "message": "ClickHouse の代表的なユースケースガイド" }, "sidebar.dropdownCategories.category.Get started.Example datasets": { "message": "サンプルデータセット" @@ -1366,28 +956,16 @@ "message": "役立つデータセットとチュートリアル" }, "sidebar.dropdownCategories.category.Get started.Tips and community wisdom": { - "message": "ヒントとコミュニティの知恵" + "message": "ヒントとコミュニティからの知見" }, "sidebar.dropdownCategories.category.Get started.Tips and community wisdom.description": { "message": "コミュニティからのヒントとコツ" }, - "sidebar.dropdownCategories.category.Cloud": { - "message": "Cloud" - }, - "sidebar.dropdownCategories.category.description.Cloud": { - "message": "ClickHouse をデプロイする最速の方法" - }, - "sidebar.dropdownCategories.category.Cloud.Get Started": { - "message": "はじめる" - }, - "sidebar.dropdownCategories.category.Cloud.Get Started.description": { - "message": "ClickHouse Cloud をすぐに始める" - }, "sidebar.dropdownCategories.category.Cloud.Features": { "message": "機能" }, "sidebar.dropdownCategories.category.Cloud.Features.description": { - "message": "ClickHouse Cloud が提供する機能" + "message": "ClickHouse Cloud の提供機能" }, "sidebar.dropdownCategories.category.Cloud.Guides": { "message": "ガイド" @@ -1399,52 +977,52 @@ "message": "リファレンス" }, "sidebar.dropdownCategories.category.Cloud.Reference.description": { - "message": "ClickHouse Cloud のリファレンスドキュメント" + "message": "ClickHouse Cloud リファレンスドキュメント" }, "sidebar.dropdownCategories.category.Manage data": { - "message": "データ管理" + "message": "データを管理する" }, "sidebar.dropdownCategories.category.description.Manage data": { - "message": "ClickHouse でデータを管理する方法" + "message": "ClickHouse でのデータ管理方法" }, "sidebar.dropdownCategories.category.Manage data.Core data concepts": { - "message": "コアデータコンセプト" + "message": "データの基本概念" }, "sidebar.dropdownCategories.category.Manage data.Core data concepts.description": { - "message": "ClickHouse の内部概念を理解する" + "message": "ClickHouse の内部的な概念を理解する" }, "sidebar.dropdownCategories.category.Manage data.Updating data": { "message": "データの更新" }, "sidebar.dropdownCategories.category.Manage data.Updating data.description": { - "message": "ClickHouse でデータを更新・置換する" + "message": "ClickHouse のデータの更新と置換" }, "sidebar.dropdownCategories.category.Manage data.Deleting data": { "message": "データの削除" }, "sidebar.dropdownCategories.category.Manage data.Deleting data.description": { - "message": "ClickHouse でデータを削除する" + "message": "ClickHouse でのデータ削除" }, "sidebar.dropdownCategories.category.Manage data.Data modeling": { "message": "データモデリング" }, "sidebar.dropdownCategories.category.Manage data.Data modeling.description": { - "message": "スキーマとデータモデルを最適化する" + "message": "スキーマとデータモデルの最適化" }, "sidebar.dropdownCategories.category.Manage data.Performance and optimizations": { "message": "パフォーマンスと最適化" }, "sidebar.dropdownCategories.category.Manage data.Performance and optimizations.description": { - "message": "ClickHouse を最適化するためのガイド" + "message": "ClickHouse の最適化に役立つガイド" }, "sidebar.dropdownCategories.category.Server admin": { - "message": "サーバー管理" + "message": "サーバー管理者" }, "sidebar.dropdownCategories.category.description.Server admin": { "message": "ClickHouse の管理とデプロイ" }, "sidebar.dropdownCategories.category.Server admin.Deployments and scaling": { - "message": "デプロイとスケーリング" + "message": "デプロイメントとスケーリング" }, "sidebar.dropdownCategories.category.Server admin.Deployments and scaling.description": { "message": "ClickHouse をデプロイする方法" @@ -1453,16 +1031,16 @@ "message": "セキュリティと認証" }, "sidebar.dropdownCategories.category.Server admin.Security and authentication.description": { - "message": "ClickHouse デプロイメントを保護する" + "message": "ClickHouse デプロイメントをセキュアにする" }, "sidebar.dropdownCategories.category.Server admin.Settings": { "message": "設定" }, "sidebar.dropdownCategories.category.Server admin.Settings.description": { - "message": "ClickHouse を設定する" + "message": "ClickHouse の設定" }, "sidebar.dropdownCategories.category.Server admin.Tools and utilities": { - "message": "ツールとユーティリティ" + "message": "ツールおよびユーティリティ" }, "sidebar.dropdownCategories.category.Server admin.Tools and utilities.description": { "message": "ClickHouse を管理するためのツール" @@ -1471,115 +1049,79 @@ "message": "システムテーブル" }, "sidebar.dropdownCategories.category.Server admin.System tables.description": { - "message": "ClickHouse を管理するためのメタデータテーブル" - }, - "sidebar.dropdownCategories.category.Reference": { - "message": "リファレンス" - }, - "sidebar.dropdownCategories.category.description.Reference": { - "message": "ClickHouse 機能のリファレンスドキュメント" - }, - "sidebar.dropdownCategories.category.Reference.Introduction": { - "message": "イントロダクション" - }, - "sidebar.dropdownCategories.category.Reference.Introduction.description": { - "message": "ClickHouse の構文を学ぶ" - }, - "sidebar.dropdownCategories.category.Reference.Functions": { - "message": "関数" - }, - "sidebar.dropdownCategories.category.Reference.Functions.description": { - "message": "データ分析に役立つ数百の組み込み関数" - }, - "sidebar.dropdownCategories.category.Reference.Engines": { - "message": "エンジン" - }, - "sidebar.dropdownCategories.category.Reference.Engines.description": { - "message": "データに適したテーブルおよびデータベースエンジンを使用する" - }, - "sidebar.dropdownCategories.category.Integrations": { - "message": "インテグレーション" - }, - "sidebar.dropdownCategories.category.description.Integrations": { - "message": "ClickHouse で使用するインテグレーション、クライアント、ドライバー" + "message": "ClickHouse の管理を支援するメタデータテーブル" }, "sidebar.dropdownCategories.category.Integrations.All integrations": { - "message": "すべてのインテグレーション" + "message": "すべての統合" }, "sidebar.dropdownCategories.category.Integrations.All integrations.description": { "message": "ClickHouse を他のデータベースやアプリケーションと統合する" }, "sidebar.dropdownCategories.category.Integrations.Language clients": { - "message": "言語クライアント" + "message": "各種言語向けクライアント" }, "sidebar.dropdownCategories.category.Integrations.Language clients.description": { - "message": "お好みの言語で ClickHouse を使用する" - }, - "sidebar.dropdownCategories.category.Integrations.ClickPipes": { - "message": "ClickPipes" - }, - "sidebar.dropdownCategories.category.Integrations.ClickPipes.description": { - "message": "ClickHouse にデータを取り込む最も簡単な方法" + "message": "ClickHouse はお好みの言語から利用できます" }, "sidebar.dropdownCategories.category.Integrations.Native clients & interfaces": { "message": "ネイティブクライアントとインターフェース" }, "sidebar.dropdownCategories.category.Integrations.Native clients & interfaces.description": { - "message": "ClickHouse に接続するクライアントとインターフェースを選択する" + "message": "ClickHouse に接続するためのクライアントとインターフェースを選択する" }, "sidebar.dropdownCategories.category.Integrations.Data sources": { "message": "データソース" }, "sidebar.dropdownCategories.category.Integrations.Data sources.description": { - "message": "お好みのソースから ClickHouse にデータを読み込む" + "message": "お好みのソースから ClickHouse にデータを取り込む" }, "sidebar.dropdownCategories.category.Integrations.Data visualization": { - "message": "データ可視化" + "message": "データの可視化" }, "sidebar.dropdownCategories.category.Integrations.Data visualization.description": { - "message": "ClickHouse をお好みの可視化ツールに接続する" + "message": "ClickHouse をお気に入りの可視化ツールに接続する" }, "sidebar.dropdownCategories.category.Integrations.Data formats": { - "message": "データフォーマット" + "message": "データ形式" }, "sidebar.dropdownCategories.category.Integrations.Data formats.description": { - "message": "ClickHouse がサポートするデータフォーマットを探索する" + "message": "ClickHouse がサポートするデータ形式" }, "sidebar.dropdownCategories.category.Integrations.Data ingestion": { - "message": "データ取り込み" + "message": "データインジェスト" }, "sidebar.dropdownCategories.category.Integrations.Data ingestion.description": { - "message": "さまざまな ELT ツールで ClickHouse にデータを取り込む" + "message": "多様な ELT ツールを活用して ClickHouse にデータを取り込む" }, "sidebar.dropdownCategories.category.ClickStack": { "message": "ClickStack" }, "sidebar.dropdownCategories.category.description.ClickStack": { - "message": "ClickStack - ClickHouse 可観測性スタック" + "message": "ClickStack - ClickHouse オブザーバビリティ スタック" }, "sidebar.dropdownCategories.category.ClickStack.Getting started": { "message": "はじめに" }, "sidebar.dropdownCategories.category.ClickStack.Getting started.description": { - "message": "ClickStack を始める" + "message": "ClickStack の始め方" }, "sidebar.dropdownCategories.category.ClickStack.Sample datasets": { "message": "サンプルデータセット" }, "sidebar.dropdownCategories.category.ClickStack.Sample datasets.description": { - "message": "サンプルデータセットで ClickStack を学ぶ" + "message": "サンプルデータセットを使って ClickStack を学ぶ" }, "sidebar.dropdownCategories.category.ClickStack.Architecture": { "message": "アーキテクチャ" }, "sidebar.dropdownCategories.category.ClickStack.Architecture.description": { - "message": "ClickStack のアーキテクチャに慣れる" + "message": "ClickStack のアーキテクチャを把握する" }, "sidebar.dropdownCategories.category.ClickStack.Deployment": { "message": "デプロイメント" }, "sidebar.dropdownCategories.category.ClickStack.Deployment.description": { - "message": "ClickStack のデプロイメントモードを選択する" + "message": "ClickStack のデプロイ方式を選択する" }, "sidebar.dropdownCategories.category.ClickStack.Ingesting data": { "message": "データの取り込み" @@ -1588,144 +1130,33 @@ "message": "ClickStack にデータを取り込む" }, "sidebar.dropdownCategories.category.ClickStack.Configuration options": { - "message": "設定オプション" + "message": "構成オプション" }, "sidebar.dropdownCategories.category.ClickStack.Configuration options.description": { - "message": "本番環境で ClickStack をデプロイする" + "message": "本番環境での ClickStack のデプロイ" }, "sidebar.dropdownCategories.category.ClickStack.Production": { "message": "本番環境" }, "sidebar.dropdownCategories.category.ClickStack.Production.description": { - "message": "本番環境で ClickStack をデプロイする" + "message": "本番環境に ClickStack をデプロイする" }, "sidebar.dropdownCategories.category.ClickStack.Integration examples": { - "message": "インテグレーション例" + "message": "統合の例" }, "sidebar.dropdownCategories.category.ClickStack.Integration examples.description": { - "message": "インテグレーションクイックスタートガイド" - }, - "sidebar.dropdownCategories.category.chDB": { - "message": "chDB" - }, - "sidebar.dropdownCategories.category.description.chDB": { - "message": "chDB は ClickHouse の組み込みバージョン" - }, - "sidebar.dropdownCategories.category.chDB.Learn chDB": { - "message": "chDB を学ぶ" - }, - "sidebar.dropdownCategories.category.chDB.Learn chDB.description": { - "message": "chDB の使い方を学ぶ" + "message": "インテグレーション用クイックスタートガイド" }, "sidebar.dropdownCategories.category.chDB.Language integrations": { - "message": "言語インテグレーション" + "message": "言語別インテグレーション" }, "sidebar.dropdownCategories.category.chDB.Language integrations.description": { - "message": "言語クライアントを使用して chDB に接続する" - }, - "sidebar.dropdownCategories.category.chDB.Guides": { - "message": "ガイド" - }, - "sidebar.dropdownCategories.category.chDB.Guides.description": { - "message": "chDB を使用するためのガイド" - }, - "sidebar.dropdownCategories.category.About": { - "message": "について" - }, - "sidebar.dropdownCategories.category.description.About": { - "message": "ClickHouse についてもっと知る" - }, - "sidebar.dropdownCategories.category.About.Adopters": { - "message": "採用企業" - }, - "sidebar.dropdownCategories.category.About.Adopters.description": { - "message": "ClickHouse 採用企業" - }, - "sidebar.dropdownCategories.category.About.Changelogs": { - "message": "変更履歴" - }, - "sidebar.dropdownCategories.category.About.Changelogs.description": { - "message": "ClickHouse の最新の変更を確認する" - }, - "sidebar.dropdownCategories.category.About.Support": { - "message": "サポート" - }, - "sidebar.dropdownCategories.category.About.Support.description": { - "message": "ClickHouse エンジニアからサポートを受ける" + "message": "プログラミング言語クライアントを使用して chDB に接続する" }, "sidebar.dropdownCategories.category.About.Development and contributing": { - "message": "開発と貢献" + "message": "開発および貢献" }, "sidebar.dropdownCategories.category.About.Development and contributing.description": { - "message": "ClickHouse に貢献する方法を学ぶ" - }, - "homepage.hero.description": { - "message": "ガイド、リファレンスドキュメント、ビデオを通じて ClickHouse の使い方を学ぶ" - }, - "homepage.hero.quickStart": { - "message": "クイックスタート" - }, - "homepage.hero.getStartedCloud": { - "message": "Cloud を始める" - }, - "homepage.hero.installLocally": { - "message": "ローカルにインストール" - }, - "homepage.hero.getStartedOSS": { - "message": "OSS を始める" - }, - "homepage.search.title": { - "message": "ドキュメントを検索" - }, - "homepage.connect.title": { - "message": "ClickHouse に接続" - }, - "homepage.connect.description": { - "message": "数分でアプリケーションを ClickHouse に接続" - }, - "homepage.connect.viewAll": { - "message": "すべてのクライアントとドライバーを見る" - }, - "homepage.connect.clickhouseCli": { - "message": "ClickHouse CLI" - }, - "homepage.connect.cloudSqlConsole": { - "message": "Cloud SQL コンソール" - }, - "homepage.migrate.title": { - "message": "ClickHouse に移行" - }, - "homepage.migrate.description": { - "message": "他のデータベース、データウェアハウス、オブジェクトストレージからデータを読み込む" - }, - "homepage.migrate.viewAll": { - "message": "すべての統合を見る" - }, - "homepage.deploy.title": { - "message": "ClickHouse をデプロイ" - }, - "homepage.deploy.description": { - "message": "ClickHouse をクラウドまたは独自のインフラストラクチャにデプロイ" - }, - "homepage.deploy.cloud": { - "message": "Cloud" - }, - "homepage.deploy.nodeDeployment": { - "message": "ノードデプロイ" - }, - "homepage.deploy.clusterDeployment": { - "message": "クラスターデプロイ" - }, - "homepage.resources.title": { - "message": "その他のリソース" - }, - "homepage.resources.contactSupport": { - "message": "サポートに連絡" - }, - "homepage.resources.changelog": { - "message": "変更履歴" - }, - "homepage.resources.sampleDatasets": { - "message": "サンプルデータセット" + "message": "ClickHouse への貢献方法を学ぶ" } -} +} \ No newline at end of file diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/best-practices/avoid_mutations.md b/i18n/jp/docusaurus-plugin-content-docs/current/best-practices/avoid_mutations.md index 2f09a40b275..cf317c7b8ed 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/best-practices/avoid_mutations.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/best-practices/avoid_mutations.md @@ -8,6 +8,6 @@ keywords: ['ミューテーション'] doc_type: 'guide' --- -import Content from '@site/i18n/jp/docusaurus-plugin-content-docs/current/best-practices/_snippets/_avoid_mutations.md'; +import Content from '@site/docs/best-practices/_snippets/_avoid_mutations.md'; diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/best-practices/avoid_optimize_final.md b/i18n/jp/docusaurus-plugin-content-docs/current/best-practices/avoid_optimize_final.md index 55f102b6ace..6e008bedae7 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/best-practices/avoid_optimize_final.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/best-practices/avoid_optimize_final.md @@ -11,6 +11,6 @@ doc_type: 'guide' # `OPTIMIZE FINAL` の使用を避ける -import Content from '@site/i18n/jp/docusaurus-plugin-content-docs/current/best-practices/_snippets/_avoid_optimize_final.md'; +import Content from '@site/docs/best-practices/_snippets/_avoid_optimize_final.md'; diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/features/09_support.md b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/features/09_support.md index 27ff4aebcd6..20a5c283c51 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/features/09_support.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/features/09_support.md @@ -8,6 +8,6 @@ hide_title: true doc_type: 'guide' --- -import Content from '@site/i18n/jp/docusaurus-plugin-content-docs/current/about-us/support.md'; +import Content from '@site/docs/about-us/support.md'; diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/data-modeling/projections/1_projections.md b/i18n/jp/docusaurus-plugin-content-docs/current/data-modeling/projections/1_projections.md index 6c103d1e085..26693041255 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/data-modeling/projections/1_projections.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/data-modeling/projections/1_projections.md @@ -1,7 +1,7 @@ --- slug: /data-modeling/projections title: 'プロジェクション' -description: 'プロジェクションとは何か、クエリ性能の向上のための活用方法、マテリアライズドビューとの違いについて説明するページ。' +description: 'このページでは、プロジェクションとは何か、クエリパフォーマンスの改善にどのように活用できるか、そしてマテリアライズドビューとの違いについて説明します。' keywords: ['プロジェクション', 'プロジェクション', 'クエリ最適化'] sidebar_order: 1 doc_type: 'guide' @@ -14,97 +14,100 @@ import Image from '@theme/IdealImage'; # プロジェクション - - ## はじめに {#introduction} -ClickHouse は、大量データに対するリアルタイムの分析クエリを高速化するための、さまざまな仕組みを提供しています。その 1 つが、_Projection_ を利用してクエリを高速化する方法です。Projection は、関心のある属性によってデータを並び替えることで、クエリを最適化します。これは次のいずれかになり得ます。 +ClickHouse は、リアルタイムなシナリオで大規模なデータに対する分析クエリを高速化するための、さまざまなメカニズムを提供します。その 1 つが、_Projection_ を利用してクエリを高速化する方法です。Projection は、関心のある属性でデータを並べ替えることでクエリを最適化します。これは次のような形を取ることができます。 -1. データの完全な並び替え -2. 元のテーブルの一部で、異なる並び順を持つもの -3. あらかじめ計算された集約(マテリアライズドビューに類似)であり、その集約に合わせて最適化された並び順を持つもの +1. テーブル全体の並べ替え +2. 元のテーブルの一部を、異なる順序で保持したもの +3. 事前計算された集計(マテリアライズドビューに類似)であり、集計に合わせた並び順を持つもの
- - + -## Projections はどのように動作しますか? {#how-do-projections-work} +## Projection はどのように動作しますか? {#how-do-projections-work} -実務的には、Projection は元のテーブルに対する追加の「非表示テーブル」と考えることができます。Projection は元のテーブルとは異なる行順序を持つことができ、その結果として異なるプライマリインデックスを持つことができ、さらに集約値を自動的かつ段階的に事前計算できます。その結果、Projections を使用すると、クエリ実行を高速化するための 2 つの「チューニング手段」を得られます: +実際には、Projection は元のテーブルに付随する追加の「不可視なテーブル」のようなものと考えることができます。Projection は元のテーブルとは異なる行の順序を持つことができ、その結果として異なるプライマリインデックスを持つことができ、さらに集約値を自動的かつインクリメンタルに事前計算できます。その結果、Projection を使用すると、クエリ実行を高速化するための 2 つの「チューニング手段」を得られます: -- **プライマリインデックスを適切に利用する** -- **集約を事前計算する** +- **プライマリインデックスを適切に活用すること** +- **集約を事前計算すること** -Projections は、複数の行順序を持つテーブルを用意でき、挿入時に集約を事前計算できるという点で [Materialized Views](/materialized-views) と似ています。 -Projections は自動的に更新され、元のテーブルと同期された状態に保たれますが、Materialized Views は明示的に更新する必要があります。クエリが元のテーブルを対象とする場合、 -ClickHouse はプライマリキーを自動的にサンプリングし、同じ正しい結果を生成でき、かつ読み取るデータ量が最も少なくて済むテーブルを選択します。これは次の図に示すとおりです: +Projection は、複数の行順序を持ち、挿入時に集約を事前計算できるという点で [Materialized Views](/materialized-views) +(マテリアライズドビュー)と似ています。 +Projection は自動的に更新され、元のテーブルと同期が維持されますが、マテリアライズドビューは明示的に更新する必要があります。クエリが元のテーブルを対象とする場合、 +ClickHouse はプライマリキーを自動的にサンプリングし、同じ正しい結果を生成でき、かつ読み取る必要があるデータ量が最も少ないテーブルを、以下の図のように選択します: -ClickHouse における Projections +ClickHouse における Projection -### `_part_offset` を使ったよりスマートなストレージ {#smarter_storage_with_part_offset} +### `_part_offset` を用いたよりスマートなストレージ {#smarter_storage_with_part_offset} -バージョン 25.5 以降、ClickHouse は Projection 内で仮想カラム `_part_offset` をサポートしており、Projection を定義する新しい方法を提供します。 +バージョン 25.5 以降、ClickHouse はプロジェクション内で仮想カラム `_part_offset` を +サポートしており、プロジェクションの新しい定義方法を提供します。 -現在、Projection を定義する方法は 2 つあります: +現在、プロジェクションを定義する方法は 2 通りあります。 -- **全カラムを保存する(従来の動作)**: Projection には完全なデータが含まれ、直接読み取ることができます。そのため、フィルタが Projection のソート順と一致する場合に高速なパフォーマンスを提供します。 +- **全カラムを保存する(従来の動作)**: プロジェクションには完全なデータが含まれ、 + プロジェクションのソート順とフィルタが一致する場合は、プロジェクションから直接読み取ることで + 高速に処理できます。 -- **ソートキーと `_part_offset` のみを保存する**: Projection はインデックスのように動作します。 - ClickHouse は Projection のプライマリインデックスを使用して一致する行を特定しますが、実際のデータはベーステーブルから読み取ります。これにより、クエリ時の I/O がわずかに増える代わりに、ストレージのオーバーヘッドを削減できます。 +- **ソートキー + `_part_offset` のみを保存する**: プロジェクションはインデックスのように動作します。 + ClickHouse はプロジェクションのプライマリインデックスを使って一致する行を特定しますが、 + 実際のデータはベーステーブルから読み取ります。これにより、クエリ時の I/O がやや増える + 代わりにストレージのオーバーヘッドを削減できます。 -上記のアプローチは組み合わせて使用することもでき、一部のカラムを Projection 内に保存し、その他を `_part_offset` を介して間接的に保存できます。 +上記のアプローチは組み合わせることもでき、プロジェクションに一部のカラムを直接保存し、 +その他のカラムを `_part_offset` を介して間接的に保存できます。 +## プロジェクションを使用するタイミング {#when-to-use-projections} +プロジェクションは、新しいユーザーにとって魅力的な機能です。というのも、データ挿入時に自動的に +維持されるためです。さらに、クエリは 1 つのテーブルに対して送信するだけでよく、可能な場合には +プロジェクションが利用されて応答時間が短縮されます。 -## プロジェクションをいつ使用すべきか {#when-to-use-projections} - -プロジェクションは、新規ユーザーにとって魅力的な機能です。データの挿入に応じて自動的に -メンテナンスされるためです。さらに、クエリは単一のテーブルに対して送るだけでよく、可能な場合には -プロジェクションが活用されて応答時間を短縮できます。 - -これはマテリアライズドビューとは対照的です。マテリアライズドビューでは、ユーザーがフィルタ条件に +これはマテリアライズドビューとは対照的であり、マテリアライズドビューでは、ユーザーはフィルタに 応じて適切に最適化されたターゲットテーブルを選択するか、クエリを書き換える必要があります。 -そのためユーザーアプリケーション側への要求が大きくなり、クライアント側の複雑さが増加します。 +これにより、ユーザーアプリケーションへの依存度が高まり、クライアント側の複雑さが増します。 -これらの利点にもかかわらず、プロジェクションには本質的な制約がいくつか存在するため、ユーザーはそれらを -理解したうえで、慎重に使用する必要があります。 +これらの利点にもかかわらず、プロジェクションには本質的な制約がいくつか存在するため、 +ユーザーはその点を理解したうえで、必要最小限の利用にとどめるべきです。 -- プロジェクションでは、ソーステーブルと(非表示の)ターゲットテーブルで異なる TTL を使用できませんが、 - マテリアライズドビューでは異なる TTL を使用できます。 +- プロジェクションでは、ソーステーブルと(非表示の)ターゲットテーブルで異なる TTL を + 使用することはできませんが、マテリアライズドビューでは異なる TTL を使用できます。 - プロジェクションを持つテーブルでは、軽量な更新および削除はサポートされていません。 -- マテリアライズドビューは連鎖させることができます。1 つのマテリアライズドビューのターゲットテーブルを、 - 別のマテリアライズドビューのソーステーブルとして利用することができます。しかし、プロジェクションでは - これはできません。 -- プロジェクションは JOIN をサポートしませんが、マテリアライズドビューはサポートします。 -- プロジェクションはフィルタ(`WHERE` 句)をサポートしませんが、マテリアライズドビューはサポートします。 - -次のような場合にはプロジェクションの使用を推奨します。 - -- データの完全な並べ替えが必要な場合。理論上、プロジェクション内の式で `GROUP BY` を使用することも - できますが、集計の維持にはマテリアライズドビューの方が効果的です。クエリオプティマイザも、 - `SELECT * ORDER BY x` のような単純な並べ替えを行うプロジェクションをより積極的に活用する傾向があります。 - この式では、ストレージ使用量を削減するために、一部の列のみを選択することもできます。 -- ストレージ使用量の増加およびデータを 2 回書き込むことによるオーバーヘッドが発生する可能性を +- マテリアライズドビューはチェーン化できます。1 つのマテリアライズドビューのターゲットテーブルを、 + 別のマテリアライズドビューのソーステーブルとして利用することができます。このようなことは + プロジェクションでは不可能です。 +- プロジェクション定義では JOIN はサポートされませんが、マテリアライズドビューではサポートされます。 + ただし、プロジェクションを持つテーブルに対するクエリでは、自由に JOIN を使用できます。 +- プロジェクション定義ではフィルタ(`WHERE` 句)はサポートされませんが、マテリアライズドビューでは + サポートされます。とはいえ、プロジェクションを持つテーブルに対するクエリでは、自由にフィルタできます。 + +プロジェクションの使用を推奨するのは、次のような場合です。 + +- データの完全な並べ替えが必要な場合。理論上は、プロジェクション内の式で `GROUP BY` を + 使用することも可能ですが、集計の維持にはマテリアライズドビューの方が効果的です。 + クエリオプティマイザも、単純な並べ替え、すなわち `SELECT * ORDER BY x` を使用する + プロジェクションの方をより活用しやすくなります。 + ユーザーは、この式内で列のサブセットを選択することで、ストレージフットプリントを削減できます。 +- ストレージフットプリントの増加や、データを書き込む処理が 2 回になることに伴うオーバーヘッドを 許容できる場合。挿入速度への影響をテストし、 [ストレージオーバーヘッドを評価](/data-compression/compression-in-clickhouse)してください。 +## 例 {#examples} - -## 例 - -### プライマリキーに含まれていない列でのフィルタリング +### プライマリキーに含まれないカラムでのフィルタリング この例では、テーブルに Projection を追加する方法を説明します。 -また、テーブルのプライマリキーに含まれていない列を条件とするクエリを高速化するために、 -Projection をどのように利用できるかも見ていきます。 +また、この Projection を使用して、テーブルのプライマリキーに含まれない +カラムでフィルタリングを行うクエリを高速化する方法も見ていきます。 -この例では、`pickup_datetime` でソートされている、 +この例では、`pickup_datetime` で並べ替えられている、 [sql.clickhouse.com](https://sql.clickhouse.com/) で利用可能な New York Taxi Data -というデータセットを使用します。 +データセットを使用します。 -乗客がドライバーに 200 ドルを超えるチップを支払ったすべてのトリップ ID を検索する、 -単純なクエリを書いてみましょう。 +乗客が運転手に 200 ドルを超える額のチップを支払った +すべてのトリップ ID を検索する、簡単なクエリを書いてみましょう。 ```sql runnable SELECT @@ -115,16 +118,16 @@ FROM nyc_taxi.trips WHERE tip_amount > 200 AND trip_duration_min > 0 ORDER BY tip_amount, trip_id ASC ``` -`ORDER BY` に含まれていない `tip_amount` でフィルタリングしているため、ClickHouse はテーブル全体をスキャンする必要がありました。クエリを高速化しましょう。 +`ORDER BY` に含まれていない `tip_amount` でフィルタリングしているため、ClickHouse はテーブル全体をスキャンする必要がありました。このクエリを高速化していきましょう。 -元のテーブルとその結果を保持するために、新しいテーブルを作成し、`INSERT INTO SELECT` を使ってデータをコピーします。 +元のテーブルと結果を保持するために、新しいテーブルを作成し、`INSERT INTO SELECT` を使ってデータをコピーします。 ```sql CREATE TABLE nyc_taxi.trips_with_projection AS nyc_taxi.trips; INSERT INTO nyc_taxi.trips_with_projection SELECT * FROM nyc_taxi.trips; ``` -プロジェクションを追加するには、`ALTER TABLE` ステートメントと `ADD PROJECTION` ステートメントを組み合わせて使用します。 +プロジェクションを追加するには、`ALTER TABLE` 文と `ADD PROJECTION` 文を組み合わせて使用します。 ```sql ALTER TABLE nyc_taxi.trips_with_projection @@ -135,7 +138,7 @@ ADD PROJECTION prj_tip_amount ) ``` -プロジェクションを追加した後は、その中のデータを上記で指定したクエリに従って物理的に並び替えて書き換えるために、`MATERIALIZE PROJECTION` ステートメントを使用する必要があります。 +プロジェクションを追加した後は、上記で指定したクエリに従って、その中のデータが物理的に並べ替えおよび再書き込みされるように、`MATERIALIZE PROJECTION` ステートメントを実行する必要があります。 ```sql ALTER TABLE nyc.trips_with_projection MATERIALIZE PROJECTION prj_tip_amount @@ -152,10 +155,10 @@ FROM nyc_taxi.trips_with_projection WHERE tip_amount > 200 AND trip_duration_min ORDER BY tip_amount, trip_id ASC ``` -クエリの実行時間を大幅に短縮できており、スキャンする行数も少なくなっていることに注目してください。 +クエリ時間を大幅に短縮でき、スキャンが必要な行数も少なくなっていることに注目してください。 -上記のクエリが実際に作成したプロジェクションを使用していることは、 -`system.query_log` テーブルをクエリすることで確認できます。 +上記のクエリが実際に作成したプロジェクションを使用していたことは、 +`system.query_log` テーブルを参照することで確認できます。 ```sql SELECT query, projections @@ -173,17 +176,14 @@ WHERE query_id='' └───────────────────────────────────────────────────────────────────────────────┴──────────────────────────────────┘ ``` -### プロジェクションを使用した UK Price Paid クエリの高速化 -プロジェクションを使用してクエリパフォーマンスを高速化できることを示すために、実際のデータセットを用いた例を見ていきます。この例では、チュートリアル [UK Property Price Paid](https://clickhouse.com/docs/getting-started/example-datasets/uk-price-paid) で使用している 3,003 万行のテーブルを使用します。このデータセットは -[sql.clickhouse.com](https://sql.clickhouse.com/?query_id=6IDMHK3OMR1C97J6M9EUQS) -環境内でも利用可能です。 +### プロジェクションを使用してUK不動産価格データのクエリを高速化する + +プロジェクションを使用してクエリパフォーマンスを高速化する方法を実証するため、実際のデータセットを使用した例を見ていきます。この例では、3,003万行を含む[UK Property Price Paid](https://clickhouse.com/docs/getting-started/example-datasets/uk-price-paid)チュートリアルのテーブルを使用します。このデータセットは[sql.clickhouse.com](https://sql.clickhouse.com/?query_id=6IDMHK3OMR1C97J6M9EUQS)環境でも利用可能です。 -テーブルの作成方法とデータの挿入方法を確認したい場合は、 -[「The UK property prices dataset」](/getting-started/example-datasets/uk-price-paid) -ページを参照してください。 +テーブルの作成方法とデータの挿入方法を確認する場合は、["英国不動産価格データセット"](/getting-started/example-datasets/uk-price-paid)のページを参照してください。 -このデータセットに対して 2 つの簡単なクエリを実行してみます。1 つ目はロンドンにある郡を、支払われた価格が高い順に一覧表示するもので、2 つ目は各郡の平均価格を計算するものです。 +このデータセットに対して2つの簡単なクエリを実行できます。1つ目はロンドンで最も高い支払価格を記録した郡を一覧表示し、2つ目は郡ごとの平均価格を計算します。 ```sql runnable SELECT @@ -195,7 +195,6 @@ ORDER BY price DESC LIMIT 3 ``` - ```sql runnable SELECT county, @@ -206,7 +205,7 @@ ORDER BY avg(price) DESC LIMIT 3 ``` -クエリ自体は非常に高速ですが、どちらのクエリでも 3,003 万行すべてに対してフルテーブルスキャンが発生している点に注目してください。これは、テーブル作成時の `ORDER BY` 句に `town` と `price` のどちらも含めなかったためです。 +両方のクエリで全3,003万行のフルテーブルスキャンが発生したことに注意してください。非常に高速ではありますが、これはテーブル作成時の ORDER BY 句に`town`も`price`も含まれていなかったためです: ```sql CREATE TABLE uk.uk_price_paid @@ -218,16 +217,16 @@ ENGINE = MergeTree ORDER BY (postcode1, postcode2, addr1, addr2); ``` -プロジェクションを使ってこのクエリを高速化できるか確認してみましょう。 +プロジェクションを使用してこのクエリを高速化できるか見てみましょう。 -元のテーブルと結果を保持するために、新しいテーブルを作成し、`INSERT INTO SELECT` を使ってデータをコピーします。 +元のテーブルと結果を保持するために、新しいテーブルを作成し、`INSERT INTO SELECT`を使用してデータをコピーします: ```sql CREATE TABLE uk.uk_price_paid_with_projections AS uk_price_paid; INSERT INTO uk.uk_price_paid_with_projections SELECT * FROM uk.uk_price_paid; ``` -ここでは、町と価格で並べ替えられたプライマリインデックスを持つ追加の(非表示の)テーブルを生成するプロジェクション `prj_oby_town_price` を作成し、データを投入します。これは、特定の町における最高支払額に対する郡の一覧を取得するクエリを最適化するためのものです。 +プロジェクション `prj_oby_town_price` を作成してデータを投入します。これにより、町と価格で順序付けされたプライマリインデックスを持つ追加の(非表示)テーブルが生成され、特定の町で最高価格が支払われた郡を一覧表示するクエリが最適化されます: ```sql ALTER TABLE uk.uk_price_paid_with_projections @@ -246,11 +245,9 @@ ALTER TABLE uk.uk_price_paid_with_projections SETTINGS mutations_sync = 1 ``` -[`mutations_sync`](/operations/settings/settings#mutations_sync) 設定は、 -同期実行を強制するために使用します。 +[`mutations_sync`](/operations/settings/settings#mutations_sync)設定を使用して、同期実行を強制します。 -投影 `prj_gby_county` を作成してデータを投入します。これは追加の(非表示の)テーブルで、 -既存の英国 130 郡すべてについて avg(price) 集約値を増分的に前計算します。 +プロジェクション `prj_gby_county` を作成して投入します。これは追加の(非表示の)テーブルであり、既存の英国130郡すべてについて avg(price) 集計値を段階的に事前計算します: ```sql ALTER TABLE uk.uk_price_paid_with_projections @@ -270,15 +267,14 @@ SETTINGS mutations_sync = 1 ``` :::note -上記の `prj_gby_county` プロジェクションのように、プロジェクション内で `GROUP BY` 句が使用されている場合、(非表示の)テーブルの基盤となるストレージエンジンは `AggregatingMergeTree` になり、すべての集約関数は `AggregateFunction` に変換されます。これにより、増分集約が適切に行われます。 +上記の `prj_gby_county` プロジェクションのように、プロジェクション内で `GROUP BY` 句が使用されている場合、(隠された)テーブルの基盤となるストレージエンジンは `AggregatingMergeTree` になり、すべての集約関数は `AggregateFunction` に変換されます。これにより、適切な増分データ集約が保証されます。 ::: -以下の図はメインテーブル `uk_price_paid_with_projections` -と、その 2 つのプロジェクションの可視化です。 +以下の図は、メインテーブル `uk_price_paid_with_projections` とその2つのプロジェクションの視覚化です: -メインテーブル uk_price_paid_with_projections とその 2 つのプロジェクションの可視化 +メインテーブル uk_price_paid_with_projections と、その 2 つのプロジェクションの可視化 -ロンドンにおける支払価格が最も高い上位 3 件の郡を列挙するクエリを再度実行すると、クエリパフォーマンスが向上していることが分かります。 +ロンドンにおける上位3件の高額取引価格の郡を一覧表示するクエリを再実行すると、クエリパフォーマンスが向上していることが確認できます: ```sql runnable SELECT @@ -290,7 +286,7 @@ ORDER BY price DESC LIMIT 3 ``` -同様に、平均支払価格が最も高い英国の郡を上位 3 件取得するクエリは次のとおりです。 +同様に、平均支払価格が最も高い上位3つの英国カウンティをリストするクエリの場合: ```sql runnable SELECT @@ -302,19 +298,13 @@ ORDER BY avg(price) DESC LIMIT 3 ``` -両方のクエリが元のテーブルを対象としており、2 つのプロジェクションを作成する前は、 -いずれのクエリもフルテーブルスキャン(ディスクから 3,003 万行すべてがストリーミングされた) -になっていることに注意してください。 +両方のクエリが元のテーブルを対象としており、2つのプロジェクションを作成する前は、両方のクエリでフルテーブルスキャン(全3,003万行がディスクから読み込まれる)が発生していたことに注意してください。 -また、支払価格が最も高い上位 3 件についてロンドンのカウンティを列挙するクエリでは、 -217 万行がストリーミングされていることにも注意してください。このクエリ用に最適化された -2 つ目のテーブルを直接使用した場合、ディスクからストリーミングされたのは 8.192 万行だけでした。 +また、ロンドンの郡を支払価格が最も高い上位 3 件について列挙するクエリでは、2.17 百万行がストリーミングされている点にも注意してください。このクエリ向けに最適化された 2 つ目のテーブルを直接使用した場合、ディスクから読み出されたのは 8.192 万行だけでした。 -この違いが生じる理由は、前述の `optimize_read_in_order` 最適化が、現時点では -プロジェクションではサポートされていないためです。 +この差が生じる理由は、上で述べた `optimize_read_in_order` 最適化が、現時点ではプロジェクションではサポートされていないためです。 -`system.query_log` テーブルを調査して、上記 2 つのクエリに対して ClickHouse が -2 つのプロジェクションを自動的に使用していることを確認します(以下の projections 列を参照): +`system.query_log` テーブルを確認すると、上記 2 つのクエリに対して ClickHouse が自動的に 2 つのプロジェクションを使用していることが分かります(下の projections 列を参照): ```sql SELECT @@ -330,7 +320,6 @@ ORDER BY initial_query_start_time DESC FORMAT Vertical ``` - ```response 行 1: ────── @@ -361,23 +350,25 @@ query_duration: 11 ms read_rows: 2.29 million projections: ['uk.uk_price_paid_with_projections.prj_obj_town_price'] -2行のセット。経過時間: 0.006秒。 +2行のセット。経過時間: 0.006秒 ``` -### さらに例を見てみましょう -次の例では、同じUKの価格データセットを使用し、プロジェクションあり/なしのクエリを比較します。 +### さらに例を示します -オリジナルのテーブル(およびそのパフォーマンス)を保持するため、再度 `CREATE AS` と `INSERT INTO SELECT` を使用してテーブルのコピーを作成します。 +次の例では、同じ英国の価格データセットを使用し、プロジェクションを使用するクエリと使用しないクエリを比較します。 + +元のテーブル(とそのパフォーマンス)を維持するため、ここでも `CREATE AS` と `INSERT INTO SELECT` を使ってテーブルのコピーを作成します。 ```sql CREATE TABLE uk.uk_price_paid_with_projections_v2 AS uk.uk_price_paid; INSERT INTO uk.uk_price_paid_with_projections_v2 SELECT * FROM uk.uk_price_paid; ``` + #### プロジェクションを作成する -`toYear(date)`、`district`、`town` をディメンションとする集約プロジェクションを作成してみましょう。 +`toYear(date)`、`district`、`town` をディメンションとする集約プロジェクションを作成します: ```sql ALTER TABLE uk.uk_price_paid_with_projections_v2 @@ -397,7 +388,7 @@ ALTER TABLE uk.uk_price_paid_with_projections_v2 ) ``` -既存データに対してプロジェクションを適用します。(マテリアライズしない場合、プロジェクションは新規に挿入されるデータに対してのみ作成されます): +既存データに対してプロジェクションをマテリアライズします。(マテリアライズしない場合、プロジェクションは新たに挿入されるデータに対してのみ作成されます): ```sql ALTER TABLE uk.uk_price_paid_with_projections_v2 @@ -405,7 +396,8 @@ ALTER TABLE uk.uk_price_paid_with_projections_v2 SETTINGS mutations_sync = 1 ``` -以下のクエリでは、プロジェクションあり/なしの場合のパフォーマンスを比較します。プロジェクションを無効にするには、デフォルトで有効になっている設定 [`optimize_use_projections`](/operations/settings/settings#optimize_use_projections) を使用します。 +次のクエリでは、プロジェクションあり/なしの場合のパフォーマンスを比較します。プロジェクションの使用を無効にするには、デフォルトで有効になっている設定 [`optimize_use_projections`](/operations/settings/settings#optimize_use_projections) を変更します。 + #### クエリ 1. 年ごとの平均価格 @@ -431,9 +423,10 @@ ORDER BY year ASC ``` -結果は同じですが、後者の例の方がパフォーマンスに優れています。 +結果は同じになるはずですが、後者の例のほうがパフォーマンスは良くなります。 -#### クエリ 2. ロンドンの年別平均価格 + +#### クエリ 2. ロンドンにおける年ごとの平均価格 ```sql runnable SELECT @@ -458,9 +451,10 @@ GROUP BY year ORDER BY year ASC ``` -#### クエリ 3. 最も高価な地区 -条件 `(date >= '2020-01-01')` は、投影ディメンション(`toYear(date) >= 2020)`)に一致するように変更する必要があります。 +#### クエリ 3. 最も高価な地域 + +条件 (date >= '2020-01-01') を、プロジェクションのディメンション (`toYear(date) >= 2020)` と一致するように変更します。 ```sql runnable SELECT @@ -480,7 +474,6 @@ LIMIT 100 SETTINGS optimize_use_projections=0 ``` - ```sql runnable SELECT town, @@ -498,22 +491,26 @@ ORDER BY price DESC LIMIT 100 ``` -同じ結果になりますが、2 番目のクエリではクエリ性能が向上している点に注目してください。 +今回も結果は同じですが、2 番目のクエリではクエリ性能が向上している点に注目してください。 + ### 1 つのクエリでプロジェクションを組み合わせる -バージョン 25.6 からは、前のバージョンで導入された `_part_offset` サポートを基盤として、 -ClickHouse は複数のプロジェクションを用いて、複数のフィルタ条件を持つ 1 つのクエリを高速化できるようになりました。 +バージョン 25.6 以降では、前のバージョンで導入された `_part_offset` のサポートに基づき、 +ClickHouse は複数のプロジェクションを使用して、複数のフィルター条件を持つ +単一のクエリを高速化できるようになりました。 -重要なのは、ClickHouse は依然として 1 つのプロジェクション(またはベーステーブル)からのみデータを読み取りますが、 -読み取り前に不要なパーツを除外するために、他のプロジェクションのプライマリインデックスを利用できる点です。 -これは、複数のカラムでフィルタし、それぞれが異なるプロジェクションに一致し得るようなクエリで特に有用です。 +重要な点として、ClickHouse は依然として 1 つのプロジェクション(またはベーステーブル) +からしかデータを読み取りませんが、読み取り前に不要なパーツを除外するために、 +他のプロジェクションのプライマリインデックスを利用できます。 +これは、複数の列でフィルタリングを行い、それぞれが異なるプロジェクションに +マッチする可能性があるクエリに特に有用です。 -> 現在、この仕組みはパーツ全体のみを除外します。グラニュールレベルでの除外は -> まだサポートされていません。 +> 現在、このメカニズムはパーツ全体のみをプルーニングします。 +> グラニュールレベルでのプルーニングはまだサポートされていません。 -これを示すために、`_part_offset` カラムを利用するプロジェクション付きのテーブルを定義し、 -上記の図に対応する 5 行のサンプルデータを挿入します。 +これを示すため、(`_part_offset` 列を使用するプロジェクションを持つ)テーブルを定義し、 +上の図に対応する 5 行のサンプルデータを挿入します。 ```sql CREATE TABLE page_views @@ -535,11 +532,11 @@ CREATE TABLE page_views ENGINE = MergeTree ORDER BY (event_date, id) SETTINGS - index_granularity = 1, -- 1グラニュールあたり1行 - max_bytes_to_merge_at_max_space_in_pool = 1; -- マージを無効にする + index_granularity = 1, -- グラニュールあたり1行 + max_bytes_to_merge_at_max_space_in_pool = 1; -- マージを無効化 ``` -次に、テーブルにデータを挿入します。 +次にテーブルにデータを挿入します。 ```sql INSERT INTO page_views VALUES ( @@ -555,30 +552,30 @@ INSERT INTO page_views VALUES ( ``` :::note -注意: このテーブルでは、説明用に 1 行単位のグラニュールやパーツマージの無効化などのカスタム設定を使用していますが、本番環境での使用は推奨されません。 +注意: このテーブルは説明のために、1 行ごとの granule や part のマージ無効化といったカスタム設定を使用していますが、これらは本番環境での利用には推奨されません。 ::: -この構成により、次のような状態になります: +このセットアップにより、次のような状態になります: -* 5 つの個別のパーツ(挿入された各行につき 1 パーツ) -* 各行に対して 1 つのプライマリインデックスエントリ(ベーステーブルおよび各プロジェクション) -* 各パーツにはちょうど 1 行のみが含まれる +* 5 つの個別の part(挿入された各行につき 1 つ) +* ベーステーブルおよび各 projection で、行ごとに 1 つのプライマリインデックスエントリ +* 各 part にはちょうど 1 行のみが含まれる この構成で、`region` と `user_id` の両方でフィルタするクエリを実行します。 -ベーステーブルのプライマリインデックスは `event_date` と `id` から構築されているため、 -ここでは有用ではなく、そのため ClickHouse は次を使用します: +ベーステーブルのプライマリインデックスは `event_date` と `id` から構築されているため +ここでは役に立たないため、ClickHouse は代わりに次を使用します: -* `region_proj` を使って region ごとにパーツを絞り込み -* `user_id_proj` を使ってさらに `user_id` で絞り込み +* `region_proj` を用いて region に基づき part を絞り込む +* `user_id_proj` を用いてさらに `user_id` による絞り込みを行う -この挙動は `EXPLAIN projections = 1` を使うと確認でき、ClickHouse がプロジェクションをどのように選択し、適用しているかが分かります。 +この挙動は `EXPLAIN projections = 1` を使うことで確認できます。これにより、 +ClickHouse が projection をどのように選択し適用するかを確認できます。 ```sql EXPLAIN projections=1 SELECT * FROM page_views WHERE region = 'us_west' AND user_id = 107; ``` - ```response ┌─explain────────────────────────────────────────────────────────────────────────────────┐ 1. │ Expression ((Project names + Projection)) │ @@ -606,20 +603,21 @@ SELECT * FROM page_views WHERE region = 'us_west' AND user_id = 107; └────────────────────────────────────────────────────────────────────────────────────────┘ ``` -上に示した `EXPLAIN` の出力は、論理クエリプランを上から順に示しています: +上に示した `EXPLAIN` の出力は、論理クエリプランを上から下へと示しています。 + -| Row number | Description | -| ---------- | ---------------------------------------------------------------------------------------- | -| 3 | `page_views` ベーステーブルから読み取るプラン | -| 5-13 | `region_proj` を使用して region = 'us_west' である 3 つのパーツを特定し、5 つのパーツのうち 2 つをプルーニング | -| 14-22 | `user_id = 107` である 1 つのパーツを特定するために `user_id_proj` を使用し、残り 3 つのパーツのうちさらに 2 つをプルーニング | +| 行番号 | 説明 | +|--------|--------------------------------------------------------------------------------------------------------------| +| 3 | `page_views` ベーステーブルから読み取りを行う | +| 5-13 | `region_proj` を使用して region = 'us_west' である 3 つのパーツを特定し、5 つのパーツのうち 2 つを除外 | +| 14-22 | `user_id_proj` を使用して `user_id = 107` である 1 つのパーツを特定し、残り 3 つのパーツのうちさらに 2 つを除外 | 最終的に、ベーステーブルから読み取られるのは **5 つのパーツのうち 1 つだけ** です。 -複数のプロジェクションのインデックス分析を組み合わせることで、ClickHouse はスキャンするデータ量を大幅に削減し、 +複数の Projection に対するインデックス解析を組み合わせることで、ClickHouse はスキャンするデータ量を大幅に削減し、 ストレージのオーバーヘッドを抑えつつパフォーマンスを向上させます。 - ## 関連コンテンツ {#related-content} -- [ClickHouse のプライマリインデックスに関する実践的入門](/guides/best-practices/sparse-primary-indexes#option-3-projections) + +- [ClickHouse のプライマリインデックス実践入門](/guides/best-practices/sparse-primary-indexes#option-3-projections) - [マテリアライズドビュー](/docs/materialized-views) -- [ALTER PROJECTION](/sql-reference/statements/alter/projection) +- [ALTER PROJECTION](/sql-reference/statements/alter/projection) \ No newline at end of file diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/data-modeling/projections/2_materialized-views-versus-projections.md b/i18n/jp/docusaurus-plugin-content-docs/current/data-modeling/projections/2_materialized-views-versus-projections.md index 359497f2ee1..a94b9cfd346 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/data-modeling/projections/2_materialized-views-versus-projections.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/data-modeling/projections/2_materialized-views-versus-projections.md @@ -1,83 +1,77 @@ --- slug: /managing-data/materialized-views-versus-projections -sidebar_label: 'マテリアライズドビューとプロジェクションの比較' -title: 'マテリアライズドビューとプロジェクション' +sidebar_label: 'マテリアライズドビュー vs プロジェクション' +title: 'マテリアライズドビューとプロジェクションの比較' hide_title: false -description: 'ClickHouse におけるマテリアライズドビューとプロジェクションを、ユースケース、パフォーマンス、制約とあわせて比較する記事。' +description: 'ClickHouse におけるマテリアライズドビューとプロジェクションを、ユースケース、パフォーマンス、制約の観点から比較する記事です。' doc_type: 'reference' -keywords: ['materialized views', 'projections', 'differences'] +keywords: ['マテリアライズドビュー', 'プロジェクション', '違い'] --- -> ユーザーからよく寄せられる質問に、どのような場合にマテリアライズドビューを使用し、どのような場合に -> プロジェクションを使用すべきかというものがあります。本記事では、これら 2 つの機能の主な違いと、特定のシナリオでどちらを選択すべきかについて説明します。 +> ユーザーからよく寄せられる質問のひとつが、マテリアライズドビューと +プロジェクションのどちらをいつ使うべきかという点です。本記事では、この 2 つの主な違いと、どのような場面で一方を他方より選択すべきかを解説します。 +## 重要な違いのまとめ {#key-differences} - -## 主な違いの概要 {#key-differences} - -以下の表は、さまざまな観点から見たマテリアライズドビューとプロジェクションの主な違いをまとめたものです。 +以下の表は、検討すべきさまざまな観点における、マテリアライズドビューとプロジェクションの主な違いをまとめたものです。 | Aspect | Materialized views | Projections | |----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Data storage and location | 結果を**別個の明示的なターゲットテーブル**に保存し、ソーステーブルへの挿入時に挿入トリガーとして動作します。 | プロジェクションは最適化されたデータレイアウトを作成し、それらは物理的に**メインテーブルのデータと並んで保存**され、ユーザーからは見えません。 | -| Update mechanism | (増分マテリアライズドビューの場合)ソーステーブルへの `INSERT` に対して**同期的に**動作します。注: リフレッシュ可能なマテリアライズドビューを使用して**スケジュール実行**することもできます。 | メインテーブルへの `INSERT` 時に、バックグラウンドで**非同期的**に更新されます。 | -| Query interaction | マテリアライズドビューを利用する場合は、**ターゲットテーブルを直接クエリ**する必要があるため、クエリを作成する際にマテリアライズドビューの存在をユーザーが認識している必要があります。 | プロジェクションは ClickHouse のクエリオプティマイザによって**自動的に選択**され、ユーザーがプロジェクションを利用するために、そのテーブルに対するクエリを変更する必要がないという意味で透過的です。バージョン 25.6 からは、複数のプロジェクションによるフィルタリングも可能です。 | -| Handling `UPDATE` / `DELETE` | マテリアライズドビューはソーステーブルについての知識を持たず、ソーステーブル_への_挿入トリガーとしてのみ動作するため、ソーステーブルに対する `UPDATE` や `DELETE` 操作に**自動的には反応しません**。これによりソーステーブルとターゲットテーブルの間でデータの不整合や陳腐化が発生する可能性があり、回避にはワークアラウンドや定期的なフルリフレッシュ(リフレッシュ可能なマテリアライズドビュー経由)が必要です。 | 既定では、(特に lightweight delete(軽量削除)において)**`DELETED` 行とは互換性がありません**。`lightweight_mutation_projection_mode`(v24.7+)を使用することで互換性を有効化できます。 | -| `JOIN` support | 対応。リフレッシュ可能なマテリアライズドビューを用いて複雑な非正規化を行うことができます。増分マテリアライズドビューは、最も左側のテーブルへの挿入のみでトリガーされます。 | 非対応。プロジェクション定義内では、マテリアライズされたデータをフィルタリングするための `JOIN` 演算はサポートされていません。 | -| `WHERE` clause in definition | 対応。マテリアライズ前にデータをフィルタリングするために `WHERE` 句を含めることができます。 | 非対応。プロジェクション定義内では、マテリアライズされたデータをフィルタリングするための `WHERE` 句はサポートされていません。 | -| Chaining capabilities | 対応。あるマテリアライズドビューのターゲットテーブルを別のマテリアライズドビューのソースとして使用でき、多段パイプラインを構築できます。 | 非対応。プロジェクションを連鎖させることはできません。 | -| Applicable table engines | さまざまなソーステーブルエンジンで使用できますが、ターゲットテーブルは通常 `MergeTree` ファミリです。 | `MergeTree` ファミリのテーブルエンジンでのみ**利用可能**です。 | -| Failure handling | データ挿入時に失敗するとターゲットテーブル側でデータが失われるため、不整合が発生する可能性があります。 | 障害はバックグラウンドで**サイレントに**処理されます。クエリでは、マテリアライズ済みパーツと未マテリアライズパーツを透過的に混在させることができます。 | -| Operational overhead | 明示的なターゲットテーブルの作成と、しばしば手動でのバックフィルが必要です。`UPDATE`/`DELETE` との整合性維持には追加の複雑さが伴います。 | プロジェクションは自動的に管理され同期が保たれるため、一般に運用負荷は低くなります。 | -| `FINAL` query compatibility | 概ね互換性がありますが、多くの場合、ターゲットテーブル側で `GROUP BY` が必要になります。 | `FINAL` クエリでは**動作しません**。 | -| Lazy materialization | 対応。 | マテリアライゼーション関連機能を使用する際は、プロジェクション互換性の問題を監視してください。`query_plan_optimize_lazy_materialization = false` を設定する必要がある場合があります。 | -| Parallel replicas | 対応。 | 非対応。 | -| [`optimize_read_in_order`](/operations/settings/settings#optimize_read_in_order) | 対応。 | 対応。 | -| Lightweight updates and deletes | 対応。 | 非対応。 | - - +| Data storage and location | 結果を**別個の明示的なターゲットテーブル**に保存し、ソーステーブルへの `INSERT` 時に挿入トリガーとして動作します。 | プロジェクションは最適化されたデータレイアウトを作成し、物理的には**メインテーブルのデータと並んで保存**され、ユーザーからは見えません。 | +| Update mechanism | (インクリメンタルなマテリアライズドビューの場合)ソーステーブルへの `INSERT` に対して**同期的**に動作します。注: refreshable materialized view を使用することで、**スケジュール**実行も可能です。 | メインテーブルへの `INSERT` 後にバックグラウンドで**非同期的**に更新されます。 | +| Query interaction | Materialized View を利用するには**ターゲットテーブルを直接クエリ**する必要があり、クエリを書く際にユーザーはマテリアライズドビューの存在を意識する必要があります。 | プロジェクションは ClickHouse のクエリオプティマイザによって**自動的に選択**されます。ユーザーはプロジェクション付きテーブルに対してクエリを書き換える必要はなく、その点で透過的です。バージョン 25.6 以降では、複数のプロジェクションを条件に応じて併用することも可能です。 | +| Handling `UPDATE` / `DELETE` | materialized view は、ソーステーブルに関する情報を持たず、ソーステーブルへの挿入トリガーとしてのみ動作するため、ソーステーブルでの `UPDATE` や `DELETE` 操作に**自動では反応しません**。このためソーステーブルとターゲットテーブル間でデータの陳腐化や不整合が生じる可能性があり、回避にはワークアラウンドや、refreshable materialized view による定期的な完全リフレッシュが必要です。 | 既定では、(特に lightweight delete において)**`DELETED` 行とは非互換**です。`lightweight_mutation_projection_mode`(v24.7+)を有効にすることで互換性を持たせることができます。 | +| `JOIN` support | 対応あり。Refreshable materialized view は複雑な非正規化に利用できます。インクリメンタルなマテリアライズドビューは、左端のテーブルへの挿入時のみトリガーされます。 | 対応なし。プロジェクション定義内では、materialized なデータをフィルタリングするための `JOIN` 操作はサポートされません。ただし、プロジェクションを持つテーブル同士を結合するクエリ自体は通常どおり動作し、プロジェクションは各テーブルへのアクセスを個別に最適化します。 | +| `WHERE` clause in definition | 対応あり。マテリアライズ前にデータをフィルタするために `WHERE` 句を含めることができます。 | 対応なし。プロジェクション定義内では、materialized なデータをフィルタリングするための `WHERE` 句はサポートされていません。 | +| Chaining capabilities | 対応あり。あるマテリアライズドビューのターゲットテーブルを別のマテリアライズドビューのソースとして利用でき、多段パイプラインを構成できます。 | 対応なし。プロジェクションを連結(チェーン)することはできません。 | +| Applicable table engines | 各種ソーステーブルエンジンで利用できますが、ターゲットテーブルは通常 `MergeTree` ファミリーです。 | `MergeTree` ファミリーのテーブルエンジンに対してのみ**利用可能**です。 | +| Failure handling | データ挿入中に失敗した場合、ターゲットテーブル側でデータが失われ、整合性に問題が生じる可能性があります。 | 失敗はバックグラウンドで**サイレントに**処理されます。クエリは materialized なパーツと非 materialized なパーツをシームレスに混在させて参照できます。 | +| Operational overhead | 明示的なターゲットテーブルの作成と、多くの場合手動でのバックフィルが必要です。`UPDATE`/`DELETE` と整合性を保つための管理は複雑さを増します。 | プロジェクションは自動的に維持・同期され、一般的に運用上の負荷は低くなります。 | +| `FINAL` query compatibility | 概ね互換性がありますが、ターゲットテーブル上で `GROUP BY` が必要になることが多いです。 | `FINAL` クエリとは**併用できません**。 | +| Lazy materialization | 対応あり。 | materialization 関連機能を使用する際は、プロジェクションの互換性問題に注意してください。必要に応じて `query_plan_optimize_lazy_materialization = false` を設定する必要があります。 | +| Parallel replicas | 対応あり。 | 対応なし。 | +| [`optimize_read_in_order`](/operations/settings/settings#optimize_read_in_order) | 対応あり。 | 対応あり。 | +| Lightweight updates and deletes | 対応あり。 | 対応なし。 | ## マテリアライズドビューとプロジェクションの比較 {#choose-between} -### マテリアライズドビューを選ぶべきケース {#choosing-materialized-views} - -マテリアライズドビューの利用を検討すべきなのは次のような場合です: - -- **リアルタイム ETL と多段階データパイプライン** を扱う場合: データ到着時に複雑な変換や集約を実行したり、ビューをチェインして複数ステージにわたってデータをルーティングする必要がある場合。 -- **複雑な非正規化** が必要な場合: 複数のソース(テーブル、サブクエリ、ディクショナリ)からのデータを 1 つのクエリ最適化済みテーブルに事前結合する必要があり、特にリフレッシュ可能なマテリアライズドビューを使った定期的なフルリフレッシュが許容できる場合。 -- **スキーマを明示的に制御したい** 場合: 事前計算済み結果用に、独自のスキーマとエンジンを持つ独立したターゲットテーブルが必要であり、データモデリングの柔軟性を高めたい場合。 -- **インジェスト時にフィルタリングしたい** 場合: データがマテリアライズされる _前に_ フィルタリングし、ターゲットテーブルに書き込まれるデータ量を削減する必要がある場合。 +### マテリアライズドビューを選択するタイミング {#choosing-materialized-views} -### マテリアライズドビューを避けるべきケース {#avoid-materialized-views} +次のような場合は、マテリアライズドビューの利用を検討してください。 -マテリアライズドビューの使用を避けることを検討すべきなのは次のような場合です: +- **リアルタイム ETL と多段階のデータパイプライン**を扱う場合: データが到着したタイミングで複雑な変換や集計を実行したり、ビューを連結することで複数のステージにまたがってデータをルーティングする必要がある場合。 +- **複雑な非正規化**が必要な場合: 複数のソース(テーブル、サブクエリ、またはディクショナリ)のデータを 1 つのクエリ最適化されたテーブルに事前結合する必要があり、特にリフレッシュ可能なマテリアライズドビューを用いた定期的なフルリフレッシュが許容できる場合。 +- **スキーマを明示的に制御**したい場合: 事前計算済みの結果を保持するために、それ専用のスキーマとエンジンを持つ独立したターゲットテーブルが必要であり、データモデリングの柔軟性を高めたい場合。 +- **インジェスト時にフィルタリング**したい場合: データがマテリアライズされる_前に_フィルタリングを行い、ターゲットテーブルに書き込まれるデータ量を削減する必要がある場合。 -- **ソースデータが頻繁に更新または削除される** 場合: ソーステーブルとターゲットテーブル間の整合性を維持するための追加戦略がないと、増分マテリアライズドビューが古くなり、不整合を起こす可能性があります。 -- **シンプルさと自動最適化を優先したい** 場合: 別個のターゲットテーブルを管理したくない場合。 +### マテリアライズドビューの使用を避けるべき場合 {#avoid-materialized-views} -### プロジェクションを選ぶべきケース {#choosing-projections} +次のような場合には、マテリアライズドビューの使用を避けることを検討してください。 -プロジェクションの利用を検討すべきなのは次のような場合です: +- **ソースデータが頻繁に更新または削除される場合**: ソーステーブルとターゲットテーブル間の一貫性を保つための追加の戦略がないと、増分マテリアライズドビューは古くなり、一貫性が失われる可能性があります。 +- **シンプルさや自動最適化を重視する場合**: 別個のターゲットテーブルを管理することを避けたい場合。 -- **単一テーブルに対するクエリを最適化する** 場合: 主な目的が、単一のベーステーブルに対するクエリを高速化することであり、そのために別のソート順を提供したり、プライマリキーに含まれない列上のフィルタを最適化したり、単一テーブルに対する集約を事前計算したりする場合。 -- **クエリの透過性** を求める場合: クエリを変更せずに元のテーブルを対象にし、ClickHouse がクエリごとに最適なデータレイアウトを選択することに任せたい場合。 +### プロジェクションを選択すべきケース {#choosing-projections} -### プロジェクションを避けるべきケース {#avoid-projections} +次のような場合には、プロジェクションの利用を検討してください。 -プロジェクションの使用を避けることを検討すべきなのは次のような場合です: +- **単一テーブルに対するクエリの最適化**: 主な目的が、単一のベーステーブルに対するクエリを高速化することであり、そのために別のソート順を用意したり、プライマリキーに含まれない列に対するフィルタを最適化したり、単一テーブルに対する集計をあらかじめ計算しておきたい場合。 +- **クエリの透過性**を求める場合: クエリでは元のテーブルをそのまま対象とし、変更を加えずに、特定のクエリに対して ClickHouse が最適なデータレイアウトを自動的に選択するようにしたい場合。 -- **複雑なデータ変換や多段階 ETL が必要** な場合: プロジェクションは、その定義内で `JOIN` 演算をサポートせず、多段階パイプラインを構築するように変更することもできず、ウィンドウ関数や複雑な `CASE` 式など一部の SQL 機能も扱えません。そのため、複雑なデータ変換には適していません。 -- **マテリアライズされるデータを明示的にフィルタリングする必要がある** 場合: プロジェクションは、その定義内で `WHERE` 句をサポートしておらず、プロジェクション自体にマテリアライズされるデータをフィルタリングできません。 -- **MergeTree 以外のテーブルエンジンが使用されている** 場合: プロジェクションは `MergeTree` ファミリーのエンジンを使用するテーブルに対してのみ利用できます。 -- `FINAL` クエリが不可欠な場合: プロジェクションは、重複排除のために使用されることがある `FINAL` クエリでは機能しません。 -- [parallel replicas](/deployment-guides/parallel-replicas) が必要な場合: プロジェクションではサポートされていません。 +### プロジェクションの利用を避けるべき場合 {#avoid-projections} +次のような場合には、プロジェクションの使用を避けることを検討してください。 +- **複雑なデータ変換や多段階の ETL が必要な場合**: プロジェクション定義は `JOIN` 演算をサポートせず、多段階パイプラインを構築するために連鎖させることもできません。また、ウィンドウ関数や複雑な `CASE` 式など、一部の SQL 機能を扱うこともできません。プロジェクションを持つテーブルに対するクエリは自由に結合できますが、プロジェクション自体は複雑なデータ変換には適していません。 +- **マテリアライズするデータを明示的にフィルタリングする必要がある場合**: プロジェクションは、そのプロジェクションにマテリアライズされるデータをフィルタリングするための `WHERE` 句を定義内でサポートしていません。 +- **MergeTree 以外のテーブルエンジンを使用している場合**: プロジェクションは、`MergeTree` ファミリーのエンジンを使用するテーブルでのみ利用可能です。 +- **`FINAL` クエリが不可欠な場合**: プロジェクションは、重複排除などの目的で使用されることがある `FINAL` クエリとは併用できません。 +- **[parallel replicas](/deployment-guides/parallel-replicas) が必要な場合**: parallel replicas はプロジェクションと併用できません。 -## Summary {#summary} +## まとめ {#summary} -マテリアライズドビューとプロジェクションは、どちらもクエリの最適化やデータ変換のための強力なツールであり、一般的には「どちらか一方を選ぶ」ものとして考えることは推奨しません。代わりに、これらを補完的に組み合わせて使用することで、クエリのパフォーマンスを最大限に引き出すことができます。そのため、ClickHouse でマテリアライズドビューとプロジェクションのどちらを選択するかは、具体的なユースケースやアクセスパターンに大きく依存します。 +マテリアライズドビューとプロジェクションは、いずれもクエリの最適化やデータ変換のための強力なツールであり、一般的には「どちらか一方だけを選ぶ」ものとして捉える必要はありません。むしろ、両者を補完的に組み合わせて使用することで、クエリから最大限のパフォーマンスを引き出すことができます。そのため、ClickHouse においてマテリアライズドビューとプロジェクションのどちらを選択するかは、特定のユースケースやアクセスパターンに大きく依存します。 -一般的な指針として、1 つ以上のソーステーブルからターゲットテーブルへデータを集約したり、大規模な複雑な変換処理を実行する必要がある場合には、マテリアライズドビューの利用を検討すべきです。マテリアライズドビューは、高コストな集約処理の負荷をクエリ実行時から挿入時へと移すのに非常に優れています。日次・月次のロールアップやリアルタイムダッシュボード、データサマリなどに最適な選択肢です。 +一般的な指針として、1 つ以上のソーステーブルからターゲットテーブルへデータを集約したり、大規模かつ複雑な変換処理を行う必要がある場合は、マテリアライズドビューの利用を検討すべきです。マテリアライズドビューは、高コストな集計処理の負荷をクエリ時ではなく挿入時に移すことに非常に優れています。日次・月次ロールアップ、リアルタイムダッシュボード、サマリーデータなどの用途に最適な選択肢です。 -一方で、テーブルのプライマリキー(ディスク上のデータの物理的な並び順を決定するカラム)とは異なるカラムでフィルタするクエリを最適化する必要がある場合には、プロジェクションを使用すべきです。特に、テーブルのプライマリキーをもはや変更できない状況や、アクセスパターンがプライマリキーで表現できる範囲よりも多様である場合に有用です。 +一方で、プロジェクションを使うべきなのは、テーブルのプライマリキー(ディスク上のデータの物理的な並び順を決定する列)とは異なる列でフィルタリングするクエリを最適化する必要がある場合です。特に、テーブルのプライマリキーを変更することがもはや不可能な場合や、アクセスパターンがプライマリキーで想定されているものより多様な場合に有用です。 \ No newline at end of file diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/data-modeling/schema-design.md b/i18n/jp/docusaurus-plugin-content-docs/current/data-modeling/schema-design.md index 7b3aba6c19f..db5d3055cfb 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/data-modeling/schema-design.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/data-modeling/schema-design.md @@ -1,8 +1,8 @@ --- slug: /data-modeling/schema-design -title: 'Schema Design' -description: 'Optimizing ClickHouse schema for query performance' -keywords: ['schema', 'schema design', 'query optimization'] +title: 'スキーマ設計' +description: 'クエリパフォーマンスを最適化する ClickHouse スキーマ設計' +keywords: ['スキーマ', 'スキーマ設計', 'クエリ最適化'] doc_type: 'guide' --- @@ -10,29 +10,32 @@ import stackOverflowSchema from '@site/static/images/data-modeling/stackoverflow import schemaDesignIndices from '@site/static/images/data-modeling/schema-design-indices.png'; import Image from '@theme/IdealImage'; -Understanding effective schema design is key to optimizing ClickHouse performance and includes choices that often involve trade-offs, with the optimal approach depending on the queries being served as well as factors such as data update frequency, latency requirements, and data volume. This guide provides an overview of schema design best practices and data modeling techniques for optimizing ClickHouse performance. +効果的なスキーマ設計を理解することは、ClickHouse のパフォーマンスを最適化するうえでの重要な鍵です。スキーマ設計にはしばしばトレードオフを伴う選択が含まれ、提供されるクエリの内容に加え、データの更新頻度、レイテンシ要件、データ量などの要因によって最適なアプローチは異なります。本ガイドでは、ClickHouse のパフォーマンスを最適化するためのスキーマ設計のベストプラクティスとデータモデリング手法を概説します。 -## Stack Overflow dataset {#stack-overflow-dataset} -For the examples in this guide, we use a subset of the Stack Overflow dataset. This contains every post, vote, user, comment and badge that has occurred on Stack Overflow from 2008 to Apr 2024. This data is available in Parquet using the schemas below under the S3 bucket `s3://datasets-documentation/stackoverflow/parquet/`: +## Stack Overflow データセット {#stack-overflow-dataset} -> The primary keys and relationships indicated are not enforced through constraints (Parquet is file not table format) and purely indicate how the data is related and the unique keys it possesses. +このガイドの例では、Stack Overflow データセットのサブセットを使用します。これには、2008 年から 2024 年 4 月までに Stack Overflow 上で行われたすべての投稿、投票、ユーザー、コメント、およびバッジが含まれます。このデータは、以下のスキーマに従った Parquet 形式で、S3 バケット `s3://datasets-documentation/stackoverflow/parquet/` から利用できます: -Stack Overflow Schema +> 示されている主キーおよびリレーションは制約としては強制されていません(Parquet はテーブル形式ではなくファイル形式であるため)ので、データ同士の関係性と、それぞれが持つ一意キーを示しているに過ぎません。 + +Stack Overflow スキーマ
-The Stack Overflow dataset contains a number of related tables. In any data modeling task, we recommend users focus on loading their primary table first. This may not necessarily be the largest table but rather the one on which you expect to receive most analytical queries. This will allow you to familiarize yourself with the main ClickHouse concepts and types, especially important if coming from a predominantly OLTP background. This table may require remodeling as additional tables are added to fully exploit ClickHouse features and obtain optimal performance. +Stack Overflow データセットには、相互に関連する複数のテーブルが含まれています。いかなるデータモデリング作業においても、まずは主となるテーブルの読み込みに集中することを推奨します。これは必ずしも最大のテーブルとは限らず、分析クエリの大半が発行されると想定されるテーブルです。これにより、主な ClickHouse の概念や型に慣れることができます。特に、主に OLTP を扱ってきたバックグラウンドから移行する場合には重要です。このテーブルは、追加のテーブルを取り込むにつれて、ClickHouse の機能を十分に活用し、最適なパフォーマンスを得るために再モデリングが必要になる場合があります。 + +上記のスキーマは、このガイドの目的上、意図的に最適化されていません。 -The above schema is intentionally not optimal for the purposes of this guide. -## Establish initial schema {#establish-initial-schema} -Since the `posts` table will be the target for most analytics queries, we focus on establishing a schema for this table. This data is available in the public S3 bucket `s3://datasets-documentation/stackoverflow/parquet/posts/*.parquet` with a file per year. +## 初期スキーマを定義する -> Loading data from S3 in Parquet format represents the most common and preferred way to load data into ClickHouse. ClickHouse is optimized for processing Parquet and can potentially read and insert 10s of millions of rows from S3 per second. +`posts` テーブルはほとんどの分析クエリの対象となるため、このテーブルのスキーマ定義に焦点を当てます。このデータは、パブリックな S3 バケット `s3://datasets-documentation/stackoverflow/parquet/posts/*.parquet` に年ごとのファイルとして配置されています。 -ClickHouse provides a schema inference capability to automatically identify the types for a dataset. This is supported for all data formats, including Parquet. We can exploit this feature to identify the ClickHouse types for the data via s3 table function and[`DESCRIBE`](/sql-reference/statements/describe-table) command. Note below we use the glob pattern `*.parquet` to read all files in the `stackoverflow/parquet/posts` folder. +> Parquet 形式で S3 からデータを読み込む方法は、ClickHouse にデータをロードする最も一般的で推奨される方法です。ClickHouse は Parquet の処理に最適化されており、S3 から毎秒数千万行を読み取りおよび挿入することができます。 + +ClickHouse には、データセットの型を自動的に特定するスキーマ推論機能があります。これは Parquet を含むすべてのデータ形式でサポートされています。この機能を利用して、S3 テーブル関数と [`DESCRIBE`](/sql-reference/statements/describe-table) コマンドを通じて、このデータに対する ClickHouse の型を特定できます。以下の例では、`stackoverflow/parquet/posts` フォルダ内のすべてのファイルを読み取るために、グロブパターン `*.parquet` を使用しています。 ```sql DESCRIBE TABLE s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/parquet/posts/*.parquet') @@ -64,9 +67,9 @@ SETTINGS describe_compact_output = 1 └───────────────────────┴────────────────────────────────┘ ``` -> The [s3 table function](/sql-reference/table-functions/s3) allows data in S3 to be queried in-place from ClickHouse. This function is compatible with all of the file formats ClickHouse supports. +> [s3 table function](/sql-reference/table-functions/s3) を使用すると、S3 上のデータを ClickHouse から直接クエリできます。この関数は、ClickHouse がサポートするすべてのファイル形式と互換性があります。 -This provides us with an initial non-optimized schema. By default, ClickHouse maps these to equivalent Nullable types. We can create a ClickHouse table using these types with a simple `CREATE EMPTY AS SELECT` command. +これにより、まずは最適化されていない初期スキーマが得られます。デフォルトでは、ClickHouse はこれらを対応する Nullable 型にマッピングします。これらの型を用いて、単純な `CREATE EMPTY AS SELECT` コマンドで ClickHouse テーブルを作成できます。 ```sql CREATE TABLE posts @@ -75,108 +78,114 @@ ORDER BY () EMPTY AS SELECT * FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/parquet/posts/*.parquet') ``` -A few important points: +いくつか重要なポイントがあります。 -Our posts table is empty after running this command. No data has been loaded. -We have specified the MergeTree as our table engine. MergeTree is the most common ClickHouse table engine you will likely use. It's the multi-tool in your ClickHouse box, capable of handling PB of data, and serves most analytical use cases. Other table engines exist for use cases such as CDC which need to support efficient updates. +このコマンドを実行した後、`posts` テーブルは空のままです。データはまだロードされていません。 +テーブルエンジンとして MergeTree を指定しました。MergeTree は、一般的に最もよく使われる ClickHouse のテーブルエンジンです。ClickHouse のツールボックスにあるマルチツールのような存在で、PB 級のデータを扱うことができ、ほとんどの分析ユースケースに対応します。ほかにも、効率的な更新をサポートする必要がある CDC(変更データキャプチャ) などのユースケース向けに、別のテーブルエンジンも存在します。 -The clause `ORDER BY ()` means we have no index, and more specifically no order in our data. More on this later. For now, just know all queries will require a linear scan. +`ORDER BY ()` という句は、インデックスが存在しないこと、より正確にはデータに順序がないことを意味します。これについては後ほど詳しく説明します。今のところは、すべてのクエリが線形スキャンを必要とする、という点だけ理解しておいてください。 -To confirm the table has been created: +テーブルが作成されたことを確認するには: ```sql SHOW CREATE TABLE posts +``` + CREATE TABLE posts ( - `Id` Nullable(Int64), - `PostTypeId` Nullable(Int64), - `AcceptedAnswerId` Nullable(Int64), - `CreationDate` Nullable(DateTime64(3, 'UTC')), - `Score` Nullable(Int64), - `ViewCount` Nullable(Int64), - `Body` Nullable(String), - `OwnerUserId` Nullable(Int64), - `OwnerDisplayName` Nullable(String), - `LastEditorUserId` Nullable(Int64), - `LastEditorDisplayName` Nullable(String), - `LastEditDate` Nullable(DateTime64(3, 'UTC')), - `LastActivityDate` Nullable(DateTime64(3, 'UTC')), - `Title` Nullable(String), - `Tags` Nullable(String), - `AnswerCount` Nullable(Int64), - `CommentCount` Nullable(Int64), - `FavoriteCount` Nullable(Int64), - `ContentLicense` Nullable(String), - `ParentId` Nullable(String), - `CommunityOwnedDate` Nullable(DateTime64(3, 'UTC')), - `ClosedDate` Nullable(DateTime64(3, 'UTC')) +`Id` Nullable(Int64), +`PostTypeId` Nullable(Int64), +`AcceptedAnswerId` Nullable(Int64), +`CreationDate` Nullable(DateTime64(3, 'UTC')), +`Score` Nullable(Int64), +`ViewCount` Nullable(Int64), +`Body` Nullable(String), +`OwnerUserId` Nullable(Int64), +`OwnerDisplayName` Nullable(String), +`LastEditorUserId` Nullable(Int64), +`LastEditorDisplayName` Nullable(String), +`LastEditDate` Nullable(DateTime64(3, 'UTC')), +`LastActivityDate` Nullable(DateTime64(3, 'UTC')), +`Title` Nullable(String), +`Tags` Nullable(String), +`AnswerCount` Nullable(Int64), +`CommentCount` Nullable(Int64), +`FavoriteCount` Nullable(Int64), +`ContentLicense` Nullable(String), +`ParentId` Nullable(String), +`CommunityOwnedDate` Nullable(DateTime64(3, 'UTC')), +`ClosedDate` Nullable(DateTime64(3, 'UTC')) ) -ENGINE = MergeTree('/clickhouse/tables/{uuid}/{shard}', '{replica}') +ENGINE = MergeTree('/clickhouse/tables/{uuid}/{shard}', '{replica}') ORDER BY tuple() -``` -With our initial schema defined, we can populate the data using an `INSERT INTO SELECT`, reading the data using the s3 table function. The following loads the `posts` data in around 2 mins on an 8-core ClickHouse Cloud instance. +```` + +初期スキーマを定義したら、`INSERT INTO SELECT` を使用してデータを投入できます。この際、S3 テーブル関数を使用してデータを読み込みます。以下は、8コアの ClickHouse Cloud インスタンスで約2分かけて `posts` データを読み込む例です。 ```sql INSERT INTO posts SELECT * FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/parquet/posts/*.parquet') 0 rows in set. Elapsed: 148.140 sec. Processed 59.82 million rows, 38.07 GB (403.80 thousand rows/s., 257.00 MB/s.) -``` +```` + +> 上記のクエリは 6,000 万行を読み込みます。これは ClickHouse にとっては小規模ですが、インターネット接続が遅い環境では、データの一部だけを読み込みたい場合があるかもしれません。その場合は、読み込みたい年を glob パターンで指定するだけで実現できます。例: `https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/parquet/posts/2008.parquet` や `https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/parquet/posts/{2008, 2009}.parquet`。glob パターンを使ってファイルのサブセットを指定する方法については[こちら](/sql-reference/table-functions/file#globs-in-path)を参照してください。 + + +## 型の最適化 {#optimizing-types} -> The above query loads 60m rows. While small for ClickHouse, users with slower internet connections may wish to load a subset of data. This can be achieved by simply specifying the years they wish to load via a glob pattern e.g. `https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/parquet/posts/2008.parquet` or `https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/parquet/posts/{2008, 2009}.parquet`. See [here](/sql-reference/table-functions/file#globs-in-path) for how glob patterns can be used to target subsets of files. +ClickHouse のクエリ性能の秘訣の 1 つは圧縮です。 -## Optimizing Types {#optimizing-types} +ディスク上のデータ量が少ないほど I/O が減り、結果としてクエリや INSERT が高速になります。CPU に対する圧縮アルゴリズムのオーバーヘッドは、多くの場合 I/O の削減によって十分に相殺されます。したがって、ClickHouse のクエリを高速にする際には、まずデータの圧縮率を改善することに注力すべきです。 -One of the secrets to ClickHouse query performance is compression. +> ClickHouse がなぜここまで高い圧縮率を実現できるかについては、[この記事](https://clickhouse.com/blog/optimize-clickhouse-codecs-compression-schema) を参照してください。要約すると、カラム指向データベースとして、値はカラム順に書き込まれます。これらの値がソートされている場合、同じ値が互いに隣接するようになります。圧縮アルゴリズムは、このような連続したデータパターンを利用します。加えて、ClickHouse にはコーデックやきめ細かいデータ型が用意されており、ユーザーは圧縮手法をさらに調整できます。 -Less data on disk means less I/O and thus faster queries and inserts. The overhead of any compression algorithm with respect to CPU will in most cases be out weighted by the reduction in IO. Improving the compression of the data should therefore be the first focus when working on ensuring ClickHouse queries are fast. +ClickHouse における圧縮は主に 3 つの要素の影響を受けます: 並び替えキー、データ型、および使用されるコーデックです。これらはすべてスキーマを通じて設定されます。 -> For why ClickHouse compresses data so well, we recommend [this article](https://clickhouse.com/blog/optimize-clickhouse-codecs-compression-schema). In summary, as a column-oriented database, values will be written in column order. If these values are sorted, the same values will be adjacent to each other. Compression algorithms exploit contiguous patterns of data. On top of this, ClickHouse has codecs and granular data types which allow users to tune the compression techniques further. +圧縮率とクエリ性能における最初の大きな改善は、単純な型の最適化プロセスによって得られます。スキーマを最適化するために、いくつかの簡単なルールを適用できます: -Compression in ClickHouse will be impacted by 3 main factors: the ordering key, the data types, and any codecs used. All of these are configured through the schema. +- **厳密な型を使用する** - 初期スキーマでは、多くのカラムで明らかに数値であるにもかかわらず String が使用されていました。正しい型を使用することで、フィルタリングや集計時に期待通りのセマンティクスが保証されます。同じことは日付型にも当てはまり、Parquet ファイルではこれらが正しく指定されています。 +- **Nullable カラムを避ける** - デフォルトでは、上記のカラムは Null を取りうるものと想定されています。Nullable 型では、クエリが空値と Null 値の違いを判別できるようになります。これは UInt8 型の別カラムを生成します。この追加カラムは、ユーザーが nullable カラムを扱うたびに処理する必要があります。その結果、追加のストレージ領域が必要になり、ほぼ確実にクエリ性能に悪影響を与えます。ある型におけるデフォルトの空値と Null とで意味上の違いがある場合にのみ Nullable を使用してください。例えば、`ViewCount` カラムにおいて、空値を 0 で表現しても、ほとんどのクエリでは十分であり、結果に影響しないでしょう。空値を別扱いにすべき場合、多くの場合はフィルタによってクエリから除外することもできます。 +- **数値型は最小限の精度を使用する** - ClickHouse には、さまざまな数値範囲と精度向けに設計された複数の数値型があります。常に、カラムを表現するために使用するビット数を最小化することを目指してください。たとえば異なるサイズの整数型 (例: Int16) に加えて、ClickHouse には最小値が 0 の符号なしバリアントもあります。これにより、カラムに使用するビット数をさらに削減できます。例えば UInt16 の最大値は 65535 で、Int16 の 2 倍です。可能であれば、より大きな符号付き型よりもこれらの型を優先してください。 +- **日付型の精度を最小限にする** - ClickHouse は複数の日付および日時型をサポートしています。Date と Date32 は純粋な日付の保存に使用でき、後者はより多くのビットと引き換えに、より広い日付範囲をサポートします。DateTime と DateTime64 は日時をサポートします。DateTime は秒単位の粒度に制限され、32 ビットを使用します。名前が示すように、DateTime64 は 64 ビットを使用しますが、ナノ秒単位までの粒度をサポートします。常に、クエリで許容される中で最も粗いバージョンを選択し、必要なビット数を最小化してください。 +- **LowCardinality を使用する** - 少数のユニーク値しか持たない数値、文字列、Date、または DateTime カラムは、LowCardinality 型を使用してエンコードできる可能性があります。これは辞書エンコードによって値を格納し、ディスク上のサイズを削減します。ユニーク値が 1 万未満のカラムについて検討してください。 +- **FixedString は特殊なケースに使用する** - 固定長の文字列は、FixedString 型でエンコードできます (例: 言語コードや通貨コード)。これは、データ長が正確に N バイトである場合に効率的です。それ以外のケースでは、効率を下げる可能性が高く、通常は LowCardinality を使用することが推奨されます。 +- **データ検証のための Enum** - Enum 型は、列挙型を効率的にエンコードするために使用できます。Enum は、保持する必要があるユニーク値の数に応じて、8 ビットまたは 16 ビットにできます。INSERT 時の関連する検証 (宣言されていない値は拒否される) が必要な場合や、Enum の値に自然な順序があり、それを利用するクエリを実行したい場合に使用を検討してください。例えば、ユーザーのフィードバックを含むカラムに `Enum(':(' = 1, ':|' = 2, ':)' = 3)` のような定義を持たせることを想像してください。 -The largest initial improvement in compression and query performance can be obtained through a simple process of type optimization. A few simple rules can be applied to optimize the schema: +> ヒント: すべてのカラムの値の範囲とユニーク値の数を調べるには、`SELECT * APPLY min, * APPLY max, * APPLY uniq FROM table FORMAT Vertical` という簡単なクエリを使用できます。これは高コストになりうるため、データの小さなサブセットに対して実行することを推奨します。このクエリで正確な結果を得るには、数値が少なくとも数値型として定義されている必要があります (つまり String ではないこと)。 -- **Use strict types** - Our initial schema used Strings for many columns which are clearly numerics. Usage of the correct types will ensure the expected semantics when filtering and aggregating. The same applies to date types, which have been correctly provided in the Parquet files. -- **Avoid nullable Columns** - By default the above columns have been assumed to be Null. The Nullable type allows queries to determine the difference between an empty and Null value. This creates a separate column of UInt8 type. This additional column has to be processed every time a user works with a nullable column. This leads to additional storage space used and almost always negatively affects query performance. Only use Nullable if there is a difference between the default empty value for a type and Null. For example, a value of 0 for empty values in the `ViewCount` column will likely be sufficient for most queries and not impact results. If empty values should be treated differently, they can often also be excluded from queries with a filter. -Use the minimal precision for numeric types - ClickHouse has a number of numeric types designed for different numeric ranges and precision. Always aim to minimize the number of bits used to represent a column. As well as integers of different size e.g. Int16, ClickHouse offers unsigned variants whose minimum value is 0. These can allow fewer bits to be used for a column e.g. UInt16 has a maximum value of 65535, twice that of an Int16. Prefer these types over larger signed variants if possible. -- **Minimal precision for date types** - ClickHouse supports a number of date and datetime types. Date and Date32 can be used for storing pure dates, with the latter supporting a larger date range at the expense of more bits. DateTime and DateTime64 provide support for date times. DateTime is limited to second granularity and uses 32 bits. DateTime64, as the name suggests, uses 64 bits but provides support up to nanosecond granularity. As ever, choose the more coarse version acceptable for queries, minimizing the number of bits needed. -- **Use LowCardinality** - Numbers, strings, Date or DateTime columns with a low number of unique values can potentially be encoded using the LowCardinality type. This dictionary encodes values, reducing the size on disk. Consider this for columns with less than 10k unique values. -FixedString for special cases - Strings which have a fixed length can be encoded with the FixedString type e.g. language and currency codes. This is efficient when data has the length of precisely N bytes. In all other cases, it is likely to reduce efficiency and LowCardinality is preferred. -- **Enums for data validation** - The Enum type can be used to efficiently encode enumerated types. Enums can either be 8 or 16 bits, depending on the number of unique values they are required to store. Consider using this if you need either the associated validation at insert time (undeclared values will be rejected) or wish to perform queries which exploit a natural ordering in the Enum values e.g. imagine a feedback column containing user responses `Enum(':(' = 1, ':|' = 2, ':)' = 3)`. +これらの簡単なルールを posts テーブルに適用することで、各カラムに対する最適な型を特定できます。 -> Tip: To find the range of all columns, and the number of distinct values, users can use the simple query `SELECT * APPLY min, * APPLY max, * APPLY uniq FROM table FORMAT Vertical`. We recommend performing this over a smaller subset of the data as this can be expensive. This query requires numerics to be at least defined as such for an accurate result i.e. not a String. -By applying these simple rules to our posts table, we can identify an optimal type for each column: -| Column | Is Numeric | Min, Max | Unique Values | Nulls | Comment | Optimized Type | -|------------------------|------------|------------------------------------------------------------------------|----------------|--------|----------------------------------------------------------------------------------------------|------------------------------------------| -| `PostTypeId` | Yes | 1, 8 | 8 | No | | `Enum('Question' = 1, 'Answer' = 2, 'Wiki' = 3, 'TagWikiExcerpt' = 4, 'TagWiki' = 5, 'ModeratorNomination' = 6, 'WikiPlaceholder' = 7, 'PrivilegeWiki' = 8)` | -| `AcceptedAnswerId` | Yes | 0, 78285170 | 12282094 | Yes | Differentiate Null with 0 value | UInt32 | -| `CreationDate` | No | 2008-07-31 21:42:52.667000000, 2024-03-31 23:59:17.697000000 | - | No | Millisecond granularity is not required, use DateTime | DateTime | -| `Score` | Yes | -217, 34970 | 3236 | No | | Int32 | -| `ViewCount` | Yes | 2, 13962748 | 170867 | No | | UInt32 | -| `Body` | No | - | - | No | | String | -| `OwnerUserId` | Yes | -1, 4056915 | 6256237 | Yes | | Int32 | -| `OwnerDisplayName` | No | - | 181251 | Yes | Consider Null to be empty string | String | -| `LastEditorUserId` | Yes | -1, 9999993 | 1104694 | Yes | 0 is an unused value can be used for Nulls | Int32 | -| `LastEditorDisplayName` | No | - | 70952 | Yes | Consider Null to be an empty string. Tested LowCardinality and no benefit | String | -| `LastEditDate` | No | 2008-08-01 13:24:35.051000000, 2024-04-06 21:01:22.697000000 | - | No | Millisecond granularity is not required, use DateTime | DateTime | -| `LastActivityDate` | No | 2008-08-01 12:19:17.417000000, 2024-04-06 21:01:22.697000000 | - | No | Millisecond granularity is not required, use DateTime | DateTime | -| `Title` | No | - | - | No | Consider Null to be an empty string | String | -| `Tags` | No | - | - | No | Consider Null to be an empty string | String | -| `AnswerCount` | Yes | 0, 518 | 216 | No | Consider Null and 0 to same | UInt16 | -| `CommentCount` | Yes | 0, 135 | 100 | No | Consider Null and 0 to same | UInt8 | -| `FavoriteCount` | Yes | 0, 225 | 6 | Yes | Consider Null and 0 to same | UInt8 | -| `ContentLicense` | No | - | 3 | No | LowCardinality outperforms FixedString | LowCardinality(String) | -| `ParentId` | No | - | 20696028 | Yes | Consider Null to be an empty string | String | -| `CommunityOwnedDate` | No | 2008-08-12 04:59:35.017000000, 2024-04-01 05:36:41.380000000 | - | Yes | Consider default 1970-01-01 for Nulls. Millisecond granularity is not required, use DateTime | DateTime | -| `ClosedDate` | No | 2008-09-04 20:56:44, 2024-04-06 18:49:25.393000000 | - | Yes | Consider default 1970-01-01 for Nulls. Millisecond granularity is not required, use DateTime | DateTime | +| 列 | 数値であるか | 最小, 最大 | ユニーク値 | NULL 値 | コメント | 最適化型 | +| ----------------------- | ------ | ------------------------------------------------------------ | -------- | ------ | ------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `PostTypeId` | はい | 1, 8 | 8 | なし | | `Enum('Question' = 1, 'Answer' = 2, 'Wiki' = 3, 'TagWikiExcerpt' = 4, 'TagWiki' = 5, 'ModeratorNomination' = 6, 'WikiPlaceholder' = 7, 'PrivilegeWiki' = 8)` | +| `AcceptedAnswerId` | はい | 0, 78285170 | 12282094 | はい | Null と 0 を区別する | UInt32 | +| `CreationDate` | いいえ | 2008-07-31 21:42:52.667000000, 2024-03-31 23:59:17.697000000 | * | いいえ | ミリ秒精度が不要な場合は、DateTime を使用します | DateTime | +| `Score` | はい | -217, 34970 | 3236 | いいえ | | Int32 | +| `ViewCount` | はい | 2, 13962748 | 170867 | いいえ | | UInt32 | +| `Body` | いいえ | - | * | いいえ | | 文字列 | +| `OwnerUserId` | はい | -1, 4056915 | 6256237 | はい | | Int32 | +| `OwnerDisplayName` | いいえ | - | 181251 | はい | NULL を空文字列として扱う | String | +| `LastEditorUserId` | はい | -1, 9999993 | 1104694 | はい | 0 は未使用の値であり、Null の代わりとして使用できる | Int32 | +| `LastEditorDisplayName` | いいえ | * | 70952 | はい | Null は空文字列と見なす。LowCardinality も試したが、特にメリットはなかった。 | String | +| `LastEditDate` | いいえ | 2008-08-01 13:24:35.051000000, 2024-04-06 21:01:22.697000000 | - | いいえ | ミリ秒精度が不要な場合は、DateTime 型を使用する | DateTime | +| `LastActivityDate` | いいえ | 2008-08-01 12:19:17.417000000, 2024-04-06 21:01:22.697000000 | * | いいえ | ミリ秒精度が不要な場合は、DateTime を使用します | DateTime | +| `Title` | いいえ | - | * | いいえ | Null を空文字列として扱う | String | +| `タグ` | いいえ | - | * | いいえ | NULL を空文字列として扱う | String | +| `AnswerCount` | はい | 0, 518 | 216 | いいえ | Null と 0 を同一視する | UInt16 | +| `CommentCount` | はい | 0, 135 | 100 | いいえ | NULL と 0 を同一視する | UInt8 | +| `FavoriteCount` | はい | 0, 225 | 6 | はい | Null と 0 を同一視する | UInt8 | +| `ContentLicense` | いいえ | - | 3 | いいえ | LowCardinality は FixedString より高いパフォーマンスを発揮します | LowCardinality(String) | +| `ParentId` | いいえ | * | 20696028 | はい | Null を空文字列として扱う | 文字列 | +| `CommunityOwnedDate` | いいえ | 2008-08-12 04:59:35.017000000, 2024-04-01 05:36:41.380000000 | - | はい | Null 値のデフォルトは 1970-01-01 とする。ミリ秒単位の精度は不要なため、DateTime 型を使用する | DateTime | +| `ClosedDate` | いいえ | 2008-09-04 20:56:44, 2024-04-06 18:49:25.393000000 | * | はい | Null 値の既定値として 1970-01-01 を使用することを検討してください。ミリ秒精度は不要なため、DateTime 型を使用してください | DateTime |
-The above gives us the following schema: +すると、上記のようなスキーマになります。 ```sql CREATE TABLE posts_v2 @@ -206,10 +215,10 @@ CREATE TABLE posts_v2 ) ENGINE = MergeTree ORDER BY tuple() -COMMENT 'Optimized types' +COMMENT '最適化された型' ``` -We can populate this with a simple `INSERT INTO SELECT`, reading the data from our previous table and inserting into this one: +前のテーブルからデータを読み出し、このテーブルに挿入する単純な `INSERT INTO SELECT` 文でデータを投入できます。 ```sql INSERT INTO posts_v2 SELECT * FROM posts @@ -217,36 +226,37 @@ INSERT INTO posts_v2 SELECT * FROM posts 0 rows in set. Elapsed: 146.471 sec. Processed 59.82 million rows, 83.82 GB (408.40 thousand rows/s., 572.25 MB/s.) ``` -We don't retain any nulls in our new schema. The above insert converts these implicitly to default values for their respective types - 0 for integers and an empty value for strings. ClickHouse also automatically converts any numerics to their target precision. +新しいスキーマでは NULL は保持されません。上記の insert によって、それぞれの型に対するデフォルト値へ暗黙的に変換されます。整数型なら 0、文字列型なら空文字列です。ClickHouse は、あらゆる数値を自動的に対象の精度へ変換します。 Primary (Ordering) Keys in ClickHouse -Users coming from OLTP databases often look for the equivalent concept in ClickHouse. +OLTP データベースから移行してくるユーザーは、しばしば ClickHouse における同等の概念を探します。 -## Choosing an ordering key {#choosing-an-ordering-key} -At the scale at which ClickHouse is often used, memory and disk efficiency are paramount. Data is written to ClickHouse tables in chunks known as parts, with rules applied for merging the parts in the background. In ClickHouse, each part has its own primary index. When parts are merged, then the merged part's primary indexes are also merged. The primary index for a part has one index entry per group of rows - this technique is called sparse indexing. +## オーダリングキーの選択 -Sparse Indexing in ClickHouse +ClickHouse がよく利用されるスケールでは、メモリ効率とディスク効率が最重要になります。データは、`parts` と呼ばれるチャンク単位で ClickHouse のテーブルに書き込まれ、バックグラウンドでこれらのパーツをマージするためのルールが適用されます。ClickHouse では、それぞれのパーツが独自のプライマリインデックスを持ちます。パーツがマージされると、マージされたパーツのプライマリインデックスも同様にマージされます。1 つのパーツに対するプライマリインデックスは、行グループごとに 1 つのインデックスエントリを持ち、この手法は疎インデックス(sparse indexing)と呼ばれます。 -The selected key in ClickHouse will determine not only the index, but also order in which data is written on disk. Because of this, it can dramatically impact compression levels which can in turn affect query performance. An ordering key which causes the values of most columns to be written in contiguous order will allow the selected compression algorithm (and codecs) to compress the data more effectively. +ClickHouse における疎インデックス -> All columns in a table will be sorted based on the value of the specified ordering key, regardless of whether they are included in the key itself. For instance, if `CreationDate` is used as the key, the order of values in all other columns will correspond to the order of values in the `CreationDate` column. Multiple ordering keys can be specified - this will order with the same semantics as an `ORDER BY` clause in a `SELECT` query. +ClickHouse で選択したキーは、インデックスだけでなく、データがディスク上に書き込まれる順序も決定します。このため、圧縮率に大きく影響し、その結果としてクエリ性能にも影響を与えます。ほとんどのカラムの値が連続した順序で書き込まれるようなオーダリングキーを選択すると、選択した圧縮アルゴリズム(およびコーデック)がデータをより効果的に圧縮できるようになります。 -Some simple rules can be applied to help choose an ordering key. The following can sometimes be in conflict, so consider these in order. Users can identify a number of keys from this process, with 4-5 typically sufficient: +> テーブル内のすべてのカラムは、指定されたオーダリングキーの値に基づいてソートされます。これは、そのカラムがキー自体に含まれているかどうかに関係ありません。たとえば、`CreationDate` がキーとして使用されている場合、他のすべてのカラムの値の順序は、`CreationDate` カラムの値の順序に対応します。複数のオーダリングキーを指定することも可能で、これは `SELECT` クエリにおける `ORDER BY` 句と同じセマンティクスで並び替えを行います。 -- Select columns which align with your common filters. If a column is used frequently in `WHERE` clauses, prioritize including these in your key over those which are used less frequently. -Prefer columns which help exclude a large percentage of the total rows when filtered, thus reducing the amount of data which needs to be read. -- Prefer columns which are likely to be highly correlated with other columns in the table. This will help ensure these values are also stored contiguously, improving compression. -`GROUP BY` and `ORDER BY` operations for columns in the ordering key can be made more memory efficient. +いくつかの単純なルールを適用することで、オーダリングキーの選択を助けることができます。以下のルールは互いに衝突する場合もあるため、順番に検討してください。ユーザーはこのプロセスから複数のキー候補を洗い出すことができ、通常は 4〜5 個程度で十分です。 -When identifying the subset of columns for the ordering key, declare the columns in a specific order. This order can significantly influence both the efficiency of the filtering on secondary key columns in queries, and the compression ratio for the table's data files. In general, it is best to order the keys in ascending order of cardinality. This should be balanced against the fact that filtering on columns that appear later in the ordering key will be less efficient than filtering on those that appear earlier in the tuple. Balance these behaviors and consider your access patterns (and most importantly test variants). +* よく使われるフィルタ条件に合致するカラムを選択します。`WHERE` 句で頻繁に使用されるカラムがある場合、使用頻度の低いカラムよりも、それらを優先的にキーに含めます。 + フィルタ適用時に、全体の行数の大部分を除外できるようなカラムを優先すると、読み取る必要のあるデータ量を削減できます。 +* テーブル内の他のカラムと高い相関が見込まれるカラムを優先します。これにより、それらの値も連続して格納されやすくなり、圧縮が改善されます。 + オーダリングキーに含まれるカラムに対する `GROUP BY` や `ORDER BY` 演算は、よりメモリ効率よく実行できます。 -### Example {#example} +オーダリングキーに含めるカラムの部分集合を特定したら、それらのカラムを特定の順序で宣言します。この順序は、クエリでのセカンダリキーとなるカラムに対するフィルタ効率と、テーブルのデータファイルに対する圧縮率の両方に大きな影響を与えます。一般的には、カーディナリティの昇順でキーを並べるのが最適です。ただし、オーダリングキーの後ろに現れるカラムに対するフィルタは、先頭に近いカラムに対するフィルタよりも効率が低くなるという事実とのバランスを取る必要があります。これらの挙動とアクセスパターンを総合的に考慮し(そして何より重要なのは、候補パターンを実際にテストすることです)、バランスをとってください。 -Applying the above guidelines to our `posts` table, let's assume that our users wish to perform analytics which filter by date and post type e.g.: +### 例 -"Which questions had the most comments in the last 3 months". +上記のガイドラインを `posts` テーブルに適用すると、ユーザーが日付と投稿タイプでフィルタされた分析を行いたいと仮定してみましょう。たとえば次のようなものです: -The query for this question using our earlier `posts_v2` table with optimized types but no ordering key: +「過去 3 ヶ月で最も多くコメントされた質問はどれか」。 + +型を最適化したものの、オーダリングキーをまだ定義していない `posts_v2` テーブルを使用して、この問いに対するクエリは次のようになります。 ```sql SELECT @@ -268,11 +278,12 @@ LIMIT 3 Peak memory usage: 429.38 MiB. ``` -> The query here is very fast even though all 60m rows have been linearly scanned - ClickHouse is just fast :) You'll have to trust us ordering keys is worth it at TB and PB scale! +> ここでのクエリは、6000万行すべてを全件走査しているにもかかわらず非常に高速です。ClickHouse はそれだけ高速なのです :) TB~PB スケールでは、オーダリングキーを設定する価値があるという点は、ぜひ信じてください。 + +`PostTypeId` と `CreationDate` の列をオーダリングキーとして選択してみましょう。 -Lets select the columns `PostTypeId` and `CreationDate` as our ordering keys. -Maybe in our case, we expect users to always filter by `PostTypeId`. This has a cardinality of 8 and represents the logical choice for the first entry in our ordering key. Recognizing date granularity filtering is likely to be sufficient (it will still benefit datetime filters) so we use `toDate(CreationDate)` as the 2nd component of our key. This will also produce a smaller index as a date can be represented by 16, speeding up filtering. Our final key entry is the `CommentCount` to assist with finding the most commented posts (the final sort). +今回のケースでは、ユーザーが常に `PostTypeId` でフィルタリングすると想定します。これは基数が 8 であり、並び替えキーの最初の要素として論理的な選択です。日付粒度でのフィルタリングで十分であると判断できるため(`datetime` によるフィルタリングでも依然として効果があります)、キーの 2 番目の要素として `toDate(CreationDate)` を使用します。これによりインデックスも小さくなります。日付は 16 で表現できるため、フィルタリングの高速化につながります。最後のキー要素は `CommentCount` で、コメント数の多い投稿(最終ソート)を見つけるのを支援します。 ```sql CREATE TABLE posts_v3 @@ -302,16 +313,16 @@ CREATE TABLE posts_v3 ) ENGINE = MergeTree ORDER BY (PostTypeId, toDate(CreationDate), CommentCount) -COMMENT 'Ordering Key' +COMMENT 'ソートキー' ---populate table from existing table +--既存のテーブルからデータを投入 INSERT INTO posts_v3 SELECT * FROM posts_v2 0 rows in set. Elapsed: 158.074 sec. Processed 59.82 million rows, 76.21 GB (378.42 thousand rows/s., 482.14 MB/s.) Peak memory usage: 6.41 GiB. -Our previous query improves the query response time by over 3x: +このクエリにより、クエリ応答時間が3倍以上改善されます: SELECT Id, @@ -325,25 +336,26 @@ LIMIT 3 10 rows in set. Elapsed: 0.020 sec. Processed 290.09 thousand rows, 21.03 MB (14.65 million rows/s., 1.06 GB/s.) ``` -For users interested in the compression improvements achieved by using specific types and appropriate ordering keys, see [Compression in ClickHouse](/data-compression/compression-in-clickhouse). If users need to further improve compression we also recommend the section [Choosing the right column compression codec](/data-compression/compression-in-clickhouse#choosing-the-right-column-compression-codec). +特定の型と適切な並び替えキーを使用することで得られる圧縮効率の向上に関心がある場合は、[Compression in ClickHouse](/data-compression/compression-in-clickhouse) を参照してください。さらに圧縮を改善する必要がある場合は、[Choosing the right column compression codec](/data-compression/compression-in-clickhouse#choosing-the-right-column-compression-codec) のセクションも併せて参照することを推奨します。 + -## Next: Data Modeling Techniques {#next-data-modeling-techniques} +## 次のステップ: データモデリング手法 {#next-data-modeling-techniques} -Until now, we've migrated only a single table. While this has allowed us to introduce some core ClickHouse concepts, most schemas are unfortunately not this simple. +ここまでで、移行したのは 1 つのテーブルだけです。これによって ClickHouse のいくつかのコアな概念を紹介することはできましたが、残念ながら多くのスキーマはここまで単純ではありません。 -In the other guides listed below, we will explore a number of techniques to restructure our wider schema for optimal ClickHouse querying. Throughout this process we aim for `Posts` to remain our central table through which most analytical queries are performed. While other tables can still be queried in isolation, we assume most analytics want to be performed in the context of `posts`. +以下に挙げる他のガイドでは、より広いスキーマ全体を対象に、ClickHouse に最適化されたクエリを実行できるよう再構成するための、さまざまな手法を見ていきます。このプロセス全体を通じて、`Posts` を分析クエリの大半が実行される中心的なテーブルとして維持することを目標とします。他のテーブルを単独でクエリすることも可能ですが、多くの分析は `Posts` のコンテキストで実行されることを想定しています。 -> Through this section, we use optimized variants of our other tables. While we provide the schemas for these, for the sake of brevity we omit the decisions made. These are based on the rules described earlier and we leave inferring the decisions to the reader. +> このセクション全体を通して、他のテーブルについては最適化済みのバリエーションを使用します。これらのスキーマは提示しますが、簡潔さを優先して、どのような設計判断を行ったかの説明は省略しています。これらの判断は前述のルールに基づいており、その内容の推測は読者に委ねます。 -The following approaches all aim to minimize the need to use JOINs to optimize reads and improve query performance. While JOINs are fully supported in ClickHouse, we recommend they are used sparingly (2 to 3 tables in a JOIN query is fine) to achieve optimal performance. +以下のアプローチはいずれも、読み取りの最適化とクエリ性能の向上のために JOIN の必要性を最小限に抑えることを目的としています。ClickHouse では JOIN は完全にサポートされていますが、最適なパフォーマンスを得るために、JOIN クエリで使用するテーブル数は控えめにすることを推奨します(2〜3 テーブル程度であれば問題ありません)。 -> ClickHouse has no notion of foreign keys. This does not prohibit joins but means referential integrity is left to the user to manage at an application level. In OLAP systems like ClickHouse, data integrity is often managed at the application level or during the data ingestion process rather than being enforced by the database itself where it incurs a significant overhead. This approach allows for more flexibility and faster data insertion. This aligns with ClickHouse's focus on speed and scalability of read and insert queries with very large datasets. +> ClickHouse には外部キーという概念がありません。これは JOIN を禁止するものではありませんが、参照整合性の維持はアプリケーションレベルでユーザーが管理する必要があることを意味します。ClickHouse のような OLAP システムでは、多くの場合、データの整合性はアプリケーションレベル、あるいはデータのインジェスト処理中に管理され、データベース自体が強制することはありません。なぜなら、それには大きなオーバーヘッドが伴うためです。このアプローチにより、柔軟性が増し、高速なデータ挿入が可能になります。これは、非常に大規模なデータセットに対する読み取りおよび挿入クエリの速度とスケーラビリティに重点を置く ClickHouse の設計思想と一致しています。 -In order to minimize the use of Joins at query time, users have several tools/approaches: +クエリ時における JOIN の使用を最小限にするために、ユーザーには次のようないくつかのツール/アプローチが用意されています。 -- [**Denormalizing data**](/data-modeling/denormalization) - Denormalize data by combining tables and using complex types for non 1:1 relationships. This often involves moving any joins from query time to insert time. -- [**Dictionaries**](/dictionary) - A ClickHouse specific feature for handling direct joins and key value lookups. -- [**Incremental Materialized Views**](/materialized-view/incremental-materialized-view) - A ClickHouse feature for shifting the cost of a computation from query time to insert time, including the ability to incrementally compute aggregate values. -- [**Refreshable Materialized Views**](/materialized-view/refreshable-materialized-view) - Similar to materialized views used in other database products, this allows the results of a query to be periodically computed and the result cached. +- [**Denormalizing data**](/data-modeling/denormalization) - テーブルを結合し、1:1 ではないリレーションに対して複合型を用いることでデータを非正規化します。これは多くの場合、JOIN をクエリ時から挿入時へと移動することを意味します。 +- [**Dictionaries**](/dictionary) - 直接的な JOIN やキー・バリュー型のルックアップを扱うための、ClickHouse 固有の機能です。 +- [**Incremental Materialized Views**](/materialized-view/incremental-materialized-view) - 計算コストをクエリ時から挿入時へとシフトする ClickHouse の機能であり、集約値を増分的に計算することも可能です。 +- [**Refreshable Materialized Views**](/materialized-view/refreshable-materialized-view) - 他のデータベース製品で利用されるマテリアライズドビューと同様に、クエリ結果を定期的に計算し、その結果をキャッシュとして保持できる機能です。 -We explore each of these approaches in each guide, highlighting when each is appropriate with an example showing how it can be applied to solving questions for the Stack Overflow dataset. +これらの各アプローチについて、それぞれのガイドで詳しく取り上げ、どのような状況で適切かを示しつつ、Stack Overflow データセットに対する実際の課題を解決するための適用例を示します。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/development/developer-instruction.md b/i18n/jp/docusaurus-plugin-content-docs/current/development/developer-instruction.md index 2538b5bb412..b2c1c4cfa99 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/development/developer-instruction.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/development/developer-instruction.md @@ -1,62 +1,58 @@ --- -description: 'ClickHouse 開発用の前提条件とセットアップ手順' +description: 'ClickHouse 開発のための前提条件とセットアップ手順' sidebar_label: '前提条件' sidebar_position: 5 slug: /development/developer-instruction -title: '開発者向けの前提条件' +title: '開発者向け前提条件' doc_type: 'guide' --- - - # 前提条件 ClickHouse は Linux、FreeBSD、macOS 上でビルドできます。 -Windows を使用している場合でも、Ubuntu を実行している [VirtualBox](https://www.virtualbox.org/) などの Linux 仮想マシン上で ClickHouse をビルドできます。 - - +Windows を使用している場合でも、Linux を実行している仮想マシン上で ClickHouse をビルドできます。たとえば、Ubuntu を実行する [VirtualBox](https://www.virtualbox.org/) などです。 ## GitHub にリポジトリを作成する -ClickHouse 向けの開発を始めるには、[GitHub](https://www.github.com/) アカウントが必要です。 -まだ SSH キーを持っていない場合は、ローカルで SSH キーを作成し、その公開鍵を GitHub にアップロードしてください。これはパッチを貢献するための前提条件です。 +ClickHouse の開発を開始するには、[GitHub](https://www.github.com/) アカウントが必要です。 +まだ SSH キーをお持ちでない場合はローカルで SSH キーを生成し、その公開鍵を GitHub にアップロードしてください。これはパッチをコントリビュートするための前提条件です。 -次に、右上隅の「fork」ボタンをクリックして、ご自身のアカウントの下に [ClickHouse リポジトリ](https://github.com/ClickHouse/ClickHouse/) をフォークします。 +次に、右上隅にある「fork」ボタンをクリックして、ご自身のアカウントに [ClickHouse リポジトリ](https://github.com/ClickHouse/ClickHouse/) の fork を作成します。 -Issue の修正や機能追加などの変更を貢献するには、まずフォークしたリポジトリ内のブランチに変更をコミットし、その変更をメインのリポジトリに対して反映する「Pull Request」を作成します。 +変更をコントリビュートするには(例: issue の修正や新機能の追加など)、まず fork 先のブランチに変更を commit し、その変更をメインリポジトリに反映する「Pull Request」を作成します。 -Git リポジトリを操作するには、Git をインストールしてください。たとえば、Ubuntu では次のコマンドを実行します。 +Git リポジトリを扱うために、Git をインストールしてください。たとえば Ubuntu では、次のコマンドを実行します。 ```sh sudo apt update sudo apt install git ``` -Git のチートシートは[こちら](https://education.github.com/git-cheat-sheet-education.pdf)から確認できます。 -Git の詳細なマニュアルは[こちら](https://git-scm.com/book/en/v2)を参照してください。 +Git チートシートは [こちら](https://education.github.com/git-cheat-sheet-education.pdf) から入手できます。 +より詳細な Git マニュアルは [こちら](https://git-scm.com/book/en/v2) にあります。 ## リポジトリを開発マシンにクローンする -まず、作業用マシンにソースファイルを取得します。具体的には、リポジトリをクローンします。 +まず、作業用マシンにソースファイルを取得するため、リポジトリをクローンします。 ```sh -git clone git@github.com:your_github_username/ClickHouse.git # プレースホルダーをご自身のGitHubユーザー名に置き換えてください +git clone git@github.com:your_github_username/ClickHouse.git # プレースホルダーを自分のGitHubユーザー名に置き換えてください cd ClickHouse ``` -このコマンドは、ソースコード、テスト、その他のファイルを含むディレクトリ `ClickHouse/` を作成します。 -URL の後ろに任意のディレクトリ名を指定してチェックアウト先を変更できますが、このパスに空白(スペース)を含めないことが重要です。空白が含まれていると、その後のビルドが失敗する可能性があります。 +このコマンドは、ソースコード、テスト、およびその他のファイルを含むディレクトリ `ClickHouse/` を作成します。 +URL の後にチェックアウト先のカスタムディレクトリを指定できますが、このパスに空白文字を含めないことが重要です。空白を含むと、後続のビルドが失敗する可能性があります。 ClickHouse の Git リポジトリは、サードパーティライブラリを取得するためにサブモジュールを使用しています。 サブモジュールはデフォルトではチェックアウトされません。 -次のいずれかの方法を使用できます。 +次のいずれかを実行できます。 -* `git clone` を `--recurse-submodules` オプション付きで実行する。 +* オプション `--recurse-submodules` を付けて `git clone` を実行する。 -* `git clone` を `--recurse-submodules` なしで実行した場合、`git submodule update --init --jobs ` を実行して、すべてのサブモジュールを明示的にチェックアウトする(`` は、たとえば `12` に設定してダウンロードを並列化できます)。 +* `git clone` を `--recurse-submodules` なしで実行した場合、`git submodule update --init --jobs ` を実行して、すべてのサブモジュールを明示的にチェックアウトする(`` はダウンロードを並列化するために、例えば `12` に設定できます)。 -* `git clone` を `--recurse-submodules` なしで実行し、不要なファイルや履歴をサブモジュールから省いてディスク使用量を削減するために [sparse](https://github.blog/2020-01-17-bring-your-monorepo-down-to-size-with-sparse-checkout/) および [shallow](https://github.blog/2020-12-21-get-up-to-speed-with-partial-clone-and-shallow-clone/) なサブモジュールチェックアウトを利用したい場合は、`./contrib/update-submodules.sh` を実行します。この方法は CI では使用されていますが、サブモジュールの操作が不便になり遅くもなるため、ローカル開発には推奨されません。 +* `git clone` を `--recurse-submodules` なしで実行し、サブモジュールの履歴を省略して容量を節約するために [shallow](https://github.blog/2020-12-21-get-up-to-speed-with-partial-clone-and-shallow-clone/) なサブモジュールチェックアウトを使用したい場合は、`./contrib/update-submodules.sh` を実行します。この方法は CI では使用されていますが、サブモジュールの操作が不便になり遅くなるため、ローカル開発には推奨されません。 Git サブモジュールのステータスを確認するには、`git submodule status` を実行します。 @@ -70,92 +66,86 @@ fatal: Could not read from remote repository. およびリポジトリが存在することを確認してください。 ``` -GitHub に接続するための SSH キーが見つかりません。 +GitHub に SSH 接続するための SSH キーが存在しません。 これらのキーは通常 `~/.ssh` に保存されています。 -SSH キーを利用できるようにするには、GitHub の設定画面からアップロードする必要があります。 +SSH キーを認証に利用するには、GitHub の設定画面からアップロードしておく必要があります。 -また、HTTPS 経由でリポジトリをクローンすることもできます。 +HTTPS 経由でリポジトリをクローンすることもできます: ```sh git clone https://github.com/ClickHouse/ClickHouse.git ``` -しかし、この方法だけでは変更内容をサーバーにプッシュすることはできません。 -一時的にこのまま利用し、後から SSH キーを追加して、`git remote` コマンドでリポジトリのリモートアドレスを置き換えることもできます。 +ただし、この設定のままでは変更内容をサーバーに送信(プッシュ)することはできません。 +一時的にはこのまま使用し、後から SSH キーを追加して、`git remote` コマンドでリポジトリのリモートアドレスを置き換えることもできます。 -また、オリジナルの ClickHouse リポジトリのアドレスをローカルリポジトリに追加して、そこから更新を取得することもできます。 +また、元の ClickHouse リポジトリのアドレスをローカルリポジトリに追加して、そこから更新を取得することもできます。 ```sh git remote add upstream git@github.com:ClickHouse/ClickHouse.git ``` -このコマンドの実行に成功すると、`git pull upstream master` を実行して、メインの ClickHouse リポジトリから更新を取得できるようになります。 +このコマンドの実行に成功すると、`git pull upstream master` を実行することで、ClickHouse のメインリポジトリから更新を取り込めるようになります。 :::tip -`git push` をそのまま使用しないでください。誤って間違ったリモートやブランチに push してしまう可能性があります。 +`git push` をそのまま実行しないでください。誤ったリモートやブランチに push してしまう可能性があります。 `git push origin my_branch_name` のように、リモート名とブランチ名を明示的に指定することを推奨します。 ::: -## コードの記述 {#writing-code} +## コードを書く {#writing-code} -以下に、ClickHouse 用のコードを書く際に役立つクイックリンクを示します。 +以下は、ClickHouse 向けのコードを記述する際に役立つクイックリンクです。 - [ClickHouse のアーキテクチャ](/development/architecture/). - [コードスタイルガイド](/development/style/). - [サードパーティライブラリ](/development/contrib#adding-and-maintaining-third-party-libraries) -- [テストの記述](/development/tests/) -- [未解決の Issue](https://github.com/ClickHouse/ClickHouse/issues?q=is%3Aopen+is%3Aissue+label%3A%22easy+task%22) +- [テストの作成](/development/tests/) +- [未解決の課題](https://github.com/ClickHouse/ClickHouse/issues?q=is%3Aopen+is%3Aissue+label%3A%22easy+task%22) ### IDE {#ide} -[Visual Studio Code](https://code.visualstudio.com/) と [Neovim](https://neovim.io/) は、ClickHouse の開発で実績のある 2 つの選択肢です。VS Code を使用する場合は、IntelliSense の代わりに、はるかに高性能な [clangd 拡張機能](https://marketplace.visualstudio.com/items?itemName=llvm-vs-code-extensions.vscode-clangd) を使用することを推奨します。 - -[CLion](https://www.jetbrains.com/clion/) も優れた選択肢です。ただし、ClickHouse のような大規模なプロジェクトでは動作が遅くなる場合があります。CLion を使用する際は、次の点に留意してください。 +[Visual Studio Code](https://code.visualstudio.com/) と [Neovim](https://neovim.io/) は、ClickHouse の開発環境としてこれまで実績のある 2 つの選択肢です。VS Code を使用する場合は、パフォーマンスが大幅に高いため、IntelliSense の代わりに [clangd extension](https://marketplace.visualstudio.com/items?itemName=llvm-vs-code-extensions.vscode-clangd) を使用することを推奨します。 -- CLion は自動的に `build` ディレクトリを作成し、ビルドタイプとして `debug` を自動選択します -- ユーザーがインストールしたものではなく、CLion 内で定義されている CMake のバージョンを使用します -- CLion は、ビルドタスクの実行に `ninja` ではなく `make` を使用します(これは通常の動作です) - -使用できるその他の IDE としては、[Sublime Text](https://www.sublimetext.com/)、[Qt Creator](https://www.qt.io/product/development-tools)、[Kate](https://kate-editor.org/) などがあります。 +[CLion](https://www.jetbrains.com/clion/) も優れた選択肢です。ただし、ClickHouse のような大規模なプロジェクトでは動作が遅くなる場合があります。CLion を使用する際の注意点は次のとおりです。 +- CLion は独自に `build` パスを作成し、ビルドタイプとして自動的に `debug` を選択します +- 使用される CMake のバージョンは、ローカルにインストールしたものではなく、CLion 内で定義されているものです +- CLion はビルドタスクの実行に `ninja` ではなく `make` を使用します(これは通常の動作です) +使用可能なその他の IDE としては、[Sublime Text](https://www.sublimetext.com/)、[Qt Creator](https://www.qt.io/product/development-tools)、[Kate](https://kate-editor.org/) があります。 ## プルリクエストを作成する {#create-a-pull-request} -GitHub の UI で自分の fork リポジトリに移動します。 +GitHub の UI で自分の fork リポジトリを開きます。 ブランチで開発している場合は、そのブランチを選択する必要があります。 -画面上に「Pull request」ボタンが表示されます。 -つまり、これは「自分の変更をメインリポジトリに取り込んでもらうようにリクエストを作成する」という意味です。 +画面上に「Pull request」ボタンが表示されているはずです。 +これは要するに、「自分の変更をメインリポジトリに取り込んでもらうためのリクエストを作成する」という意味です。 -作業がまだ完了していなくても、プルリクエストは作成できます。 -この場合、タイトルの先頭に「WIP」(work in progress)を付けてください。後で変更してもかまいません。 -これは、変更内容の共同レビューやディスカッション、および利用可能なすべてのテストを実行するのに役立ちます。 -変更内容について簡潔な説明を記載することが重要です。これは後でリリースの変更履歴(changelog)を生成する際に使用されます。 +作業がまだ完了していなくても、プルリクエストを作成することができます。 +この場合、タイトルの先頭に「WIP」(work in progress)という単語を付けてください。これは後で変更可能です。 +これは、変更内容の共同レビューやディスカッション、および利用可能なすべてのテストの実行に役立ちます。 +変更内容について簡潔な説明を記載することが重要です。これは後にリリースの変更履歴を生成する際に使用されます。 -ClickHouse の担当者があなたの PR に「can be tested」タグを付けると、テストが開始されます。 +ClickHouse のメンバーがあなたのプルリクエスト(PR)に「can be tested」というタグを付けると、テストが開始されます。 最初のいくつかのチェック結果(例: コードスタイル)は数分以内に返ってきます。 ビルドチェックの結果は 30 分以内に届きます。 -主要なテストセットの結果は 1 時間以内に報告されます。 - -システムは、あなたのプルリクエスト専用の ClickHouse バイナリビルドを用意します。 -これらのビルドを取得するには、チェック一覧の「Builds」項目の横にある「Details」リンクをクリックしてください。 -そこには、ClickHouse のビルド済み .deb パッケージへの直接リンクがあり、必要であれば本番サーバーにデプロイすることもできます。 - - - -## ドキュメントを作成する {#write-documentation} +メインのテストセットは 1 時間以内に完了します。 -新機能を追加するプルリクエストには、必ず適切なドキュメントを含めてください。 -ドキュメントの変更をプレビューしたい場合は、ドキュメントページをローカルでビルドする手順が、README.md ファイル内の[こちら](https://github.com/ClickHouse/clickhouse-docs)に記載されています。 -ClickHouse に新しい関数を追加する際は、以下のテンプレートをガイドとして使用できます。 +システムは、あなたのプルリクエスト専用の ClickHouse バイナリビルドを準備します。 +これらのビルドを取得するには、チェック一覧で「Builds」項目の横にある「Details」リンクをクリックします。 +そこから ClickHouse のビルド済み .deb パッケージへの直接リンクにアクセスでき、それらは(問題なければ)本番サーバーにそのままデプロイすることもできます。 +## ドキュメントを作成する +新機能を追加するプルリクエストには、必ずそれに対応するドキュメントを含めてください。 +ドキュメントの変更内容をプレビューしたい場合は、ドキュメントページをローカルでビルドする手順が README.md ファイル内の[こちら](https://github.com/ClickHouse/clickhouse-docs)に記載されています。 +ClickHouse に新しい関数を追加する際は、以下のテンプレートをガイドとして利用できます。 ````markdown # newFunctionName -関数の簡単な説明をここに記載します。この関数が何を行うか、および典型的な使用例を簡潔に説明してください。 +関数の簡潔な説明をここに記載します。関数の機能と典型的な使用例を簡潔に説明してください。 **構文** @@ -165,17 +155,17 @@ newFunctionName(arg1, arg2[, arg3]) **引数** -- `arg1` — 引数の説明。 [DataType](../data-types/float.md) -- `arg2` — 引数の説明。 [DataType](../data-types/float.md) -- `arg3` — オプション引数の説明(省略可能)。 [DataType](../data-types/float.md) +- `arg1` — 引数の説明。[DataType](../data-types/float.md) +- `arg2` — 引数の説明。[DataType](../data-types/float.md) +- `arg3` — オプション引数の説明(省略可能)。[DataType](../data-types/float.md) **実装の詳細** -関連する場合、実装の詳細についての説明を記載します。 +関連する実装の詳細についての説明。 **戻り値** -- {関数が返す内容をここに挿入}を返します。 [DataType](../data-types/float.md) +- {関数が返す内容をここに記載}を返します。[DataType](../data-types/float.md) **例** @@ -185,7 +175,7 @@ newFunctionName(arg1, arg2[, arg3]) SELECT 'write your example query here'; \``` -結果: +レスポンス: \```response ┌───────────────────────────────────┐ @@ -195,12 +185,12 @@ SELECT 'write your example query here'; ```` -## テストデータの使用 +## テストデータの利用 -ClickHouse の開発にあたっては、実際の利用状況に近いデータセットを読み込む必要があることがよくあります。 -これは特にパフォーマンス テストにおいて重要です。 -そのために、Web アナリティクスの匿名化データを特別に用意しています。 -これを利用するには、追加で約 3 GB の空きディスク容量が必要です。 +ClickHouse の開発では、実運用に近いデータセットを読み込む必要があります。 +これは特にパフォーマンステストにおいて重要です。 +そのために、匿名化されたウェブアナリティクスのデータセットを特別に用意しています。 +これには、追加で約 3GB の空きディスク容量が必要です。 ```sh sudo apt install wget xz-utils @@ -214,24 +204,20 @@ ClickHouse の開発にあたっては、実際の利用状況に近いデータ clickhouse-client ``` -clickhouse-client で実行します: +clickhouse-client で実行: + ```sql CREATE DATABASE IF NOT EXISTS test; -``` - CREATE TABLE test.hits ( 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.Key1` Array(String), `ParsedParams.Key2` Array(String), `ParsedParams.Key3` Array(String), `ParsedParams.Key4` Array(String), `ParsedParams.Key5` Array(String), `ParsedParams.ValueDouble` Array(Float64), IslandID FixedString(16), RequestNum UInt32, RequestTry UInt8) ENGINE = MergeTree PARTITION BY toYYYYMM(EventDate) SAMPLE BY intHash32(UserID) ORDER BY (CounterID, EventDate, intHash32(UserID), EventTime); +CREATE TABLE test.visits ( CounterID UInt32, StartDate Date, Sign Int8, IsNew UInt8, VisitID UInt64, UserID UInt64, StartTime DateTime, Duration UInt32, UTCStartTime DateTime, PageViews Int32, Hits Int32, IsBounce UInt8, Referer String, StartURL String, RefererDomain String, StartURLDomain String, EndURL String, LinkURL String, IsDownload UInt8, TraficSourceID Int8, SearchEngineID UInt16, SearchPhrase String, AdvEngineID UInt8, PlaceID Int32, RefererCategories Array(UInt16), URLCategories Array(UInt16), URLRegions Array(UInt32), RefererRegions Array(UInt32), IsYandex UInt8, GoalReachesDepth Int32, GoalReachesURL Int32, GoalReachesAny Int32, SocialSourceNetworkID UInt8, SocialSourcePage String, MobilePhoneModel String, ClientEventTime DateTime, RegionID UInt32, ClientIP UInt32, ClientIP6 FixedString(16), RemoteIP UInt32, RemoteIP6 FixedString(16), IPNetworkID UInt32, SilverlightVersion3 UInt32, CodeVersion UInt32, ResolutionWidth UInt16, ResolutionHeight UInt16, UserAgentMajor UInt16, UserAgentMinor UInt16, WindowClientWidth UInt16, WindowClientHeight UInt16, SilverlightVersion2 UInt8, SilverlightVersion4 UInt16, FlashVersion3 UInt16, FlashVersion4 UInt16, ClientTimeZone Int16, OS UInt8, UserAgent UInt8, ResolutionDepth UInt8, FlashMajor UInt8, FlashMinor UInt8, NetMajor UInt8, NetMinor UInt8, MobilePhone UInt8, SilverlightVersion1 UInt8, Age UInt8, Sex UInt8, Income UInt8, JavaEnable UInt8, CookieEnable UInt8, JavascriptEnable UInt8, IsMobile UInt8, BrowserLanguage UInt16, BrowserCountry UInt16, Interests UInt16, Robotness UInt8, GeneralInterests Array(UInt16), Params Array(String), `Goals.ID` Array(UInt32), `Goals.Serial` Array(UInt32), `Goals.EventTime` Array(DateTime), `Goals.Price` Array(Int64), `Goals.OrderID` Array(String), `Goals.CurrencyID` Array(UInt32), WatchIDs Array(UInt64), ParamSumPrice Int64, ParamCurrency FixedString(3), ParamCurrencyID UInt16, ClickLogID UInt64, ClickEventID Int32, ClickGoodEvent Int32, ClickEventTime DateTime, ClickPriorityID Int32, ClickPhraseID Int32, ClickPageID Int32, ClickPlaceID Int32, ClickTypeID Int32, ClickResourceID Int32, ClickCost UInt32, ClickClientIP UInt32, ClickDomainID UInt32, ClickURL String, ClickAttempt UInt8, ClickOrderID UInt32, ClickBannerID UInt32, ClickMarketCategoryID UInt32, ClickMarketPP UInt32, ClickMarketCategoryName String, ClickMarketPPName String, ClickAWAPSCampaignName String, ClickPageName String, ClickTargetType UInt16, ClickTargetPhraseID UInt64, ClickContextType UInt8, ClickSelectType Int8, ClickOptions String, ClickGroupBannerID Int32, OpenstatServiceName String, OpenstatCampaignID String, OpenstatAdID String, OpenstatSourceID String, UTMSource String, UTMMedium String, UTMCampaign String, UTMContent String, UTMTerm String, FromTag String, HasGCLID UInt8, FirstVisit DateTime, PredLastVisit Date, LastVisit Date, TotalVisits UInt32, `TraficSource.ID` Array(Int8), `TraficSource.SearchEngineID` Array(UInt16), `TraficSource.AdvEngineID` Array(UInt8), `TraficSource.PlaceID` Array(UInt16), `TraficSource.SocialSourceNetworkID` Array(UInt8), `TraficSource.Domain` Array(String), `TraficSource.SearchPhrase` Array(String), `TraficSource.SocialSourcePage` Array(String), Attendance FixedString(16), CLID UInt32, YCLID UInt64, NormalizedRefererHash UInt64, SearchPhraseHash UInt64, RefererDomainHash UInt64, NormalizedStartURLHash UInt64, StartURLDomainHash UInt64, NormalizedEndURLHash UInt64, TopLevelDomain UInt64, URLScheme UInt64, OpenstatServiceNameHash UInt64, OpenstatCampaignIDHash UInt64, OpenstatAdIDHash UInt64, OpenstatSourceIDHash UInt64, UTMSourceHash UInt64, UTMMediumHash UInt64, UTMCampaignHash UInt64, UTMContentHash UInt64, UTMTermHash UInt64, FromHash UInt64, WebVisorEnabled UInt8, WebVisorActivity UInt32, `ParsedParams.Key1` Array(String), `ParsedParams.Key2` Array(String), `ParsedParams.Key3` Array(String), `ParsedParams.Key4` Array(String), `ParsedParams.Key5` Array(String), `ParsedParams.ValueDouble` Array(Float64), `Market.Type` Array(UInt8), `Market.GoalID` Array(UInt32), `Market.OrderID` Array(String), `Market.OrderPrice` Array(Int64), `Market.PP` Array(UInt32), `Market.DirectPlaceID` Array(UInt32), `Market.DirectOrderID` Array(UInt32), `Market.DirectBannerID` Array(UInt32), `Market.GoodID` Array(String), `Market.GoodName` Array(String), `Market.GoodQuantity` Array(Int32), `Market.GoodPrice` Array(Int64), IslandID FixedString(16)) ENGINE = CollapsingMergeTree(Sign) PARTITION BY toYYYYMM(StartDate) SAMPLE BY intHash32(UserID) ORDER BY (CounterID, StartDate, intHash32(UserID), VisitID); +``` - -CREATE TABLE test.visits ( CounterID UInt32, StartDate Date, Sign Int8, IsNew UInt8, VisitID UInt64, UserID UInt64, StartTime DateTime, Duration UInt32, UTCStartTime DateTime, PageViews Int32, Hits Int32, IsBounce UInt8, Referer String, StartURL String, RefererDomain String, StartURLDomain String, EndURL String, LinkURL String, IsDownload UInt8, TraficSourceID Int8, SearchEngineID UInt16, SearchPhrase String, AdvEngineID UInt8, PlaceID Int32, RefererCategories Array(UInt16), URLCategories Array(UInt16), URLRegions Array(UInt32), RefererRegions Array(UInt32), IsYandex UInt8, GoalReachesDepth Int32, GoalReachesURL Int32, GoalReachesAny Int32, SocialSourceNetworkID UInt8, SocialSourcePage String, MobilePhoneModel String, ClientEventTime DateTime, RegionID UInt32, ClientIP UInt32, ClientIP6 FixedString(16), RemoteIP UInt32, RemoteIP6 FixedString(16), IPNetworkID UInt32, SilverlightVersion3 UInt32, CodeVersion UInt32, ResolutionWidth UInt16, ResolutionHeight UInt16, UserAgentMajor UInt16, UserAgentMinor UInt16, WindowClientWidth UInt16, WindowClientHeight UInt16, SilverlightVersion2 UInt8, SilverlightVersion4 UInt16, FlashVersion3 UInt16, FlashVersion4 UInt16, ClientTimeZone Int16, OS UInt8, UserAgent UInt8, ResolutionDepth UInt8, FlashMajor UInt8, FlashMinor UInt8, NetMajor UInt8, NetMinor UInt8, MobilePhone UInt8, SilverlightVersion1 UInt8, Age UInt8, Sex UInt8, Income UInt8, JavaEnable UInt8, CookieEnable UInt8, JavascriptEnable UInt8, IsMobile UInt8, BrowserLanguage UInt16, BrowserCountry UInt16, Interests UInt16, Robotness UInt8, GeneralInterests Array(UInt16), Params Array(String), `Goals.ID` Array(UInt32), `Goals.Serial` Array(UInt32), `Goals.EventTime` Array(DateTime), `Goals.Price` Array(Int64), `Goals.OrderID` Array(String), `Goals.CurrencyID` Array(UInt32), WatchIDs Array(UInt64), ParamSumPrice Int64, ParamCurrency FixedString(3), ParamCurrencyID UInt16, ClickLogID UInt64, ClickEventID Int32, ClickGoodEvent Int32, ClickEventTime DateTime, ClickPriorityID Int32, ClickPhraseID Int32, ClickPageID Int32, ClickPlaceID Int32, ClickTypeID Int32, ClickResourceID Int32, ClickCost UInt32, ClickClientIP UInt32, ClickDomainID UInt32, ClickURL String, ClickAttempt UInt8, ClickOrderID UInt32, ClickBannerID UInt32, ClickMarketCategoryID UInt32, ClickMarketPP UInt32, ClickMarketCategoryName String, ClickMarketPPName String, ClickAWAPSCampaignName String, ClickPageName String, ClickTargetType UInt16, ClickTargetPhraseID UInt64, ClickContextType UInt8, ClickSelectType Int8, ClickOptions String, ClickGroupBannerID Int32, OpenstatServiceName String, OpenstatCampaignID String, OpenstatAdID String, OpenstatSourceID String, UTMSource String, UTMMedium String, UTMCampaign String, UTMContent String, UTMTerm String, FromTag String, HasGCLID UInt8, FirstVisit DateTime, PredLastVisit Date, LastVisit Date, TotalVisits UInt32, `TraficSource.ID` Array(Int8), `TraficSource.SearchEngineID` Array(UInt16), `TraficSource.AdvEngineID` Array(UInt8), `TraficSource.PlaceID` Array(UInt16), `TraficSource.SocialSourceNetworkID` Array(UInt8), `TraficSource.Domain` Array(String), `TraficSource.SearchPhrase` Array(String), `TraficSource.SocialSourcePage` Array(String), Attendance FixedString(16), CLID UInt32, YCLID UInt64, NormalizedRefererHash UInt64, SearchPhraseHash UInt64, RefererDomainHash UInt64, NormalizedStartURLHash UInt64, StartURLDomainHash UInt64, NormalizedEndURLHash UInt64, TopLevelDomain UInt64, URLScheme UInt64, OpenstatServiceNameHash UInt64, OpenstatCampaignIDHash UInt64, OpenstatAdIDHash UInt64, OpenstatSourceIDHash UInt64, UTMSourceHash UInt64, UTMMediumHash UInt64, UTMCampaignHash UInt64, UTMContentHash UInt64, UTMTermHash UInt64, FromHash UInt64, WebVisorEnabled UInt8, WebVisorActivity UInt32, `ParsedParams.Key1` Array(String), `ParsedParams.Key2` Array(String), `ParsedParams.Key3` Array(String), `ParsedParams.Key4` Array(String), `ParsedParams.Key5` Array(String), `ParsedParams.ValueDouble` Array(Float64), `Market.Type` Array(UInt8), `Market.GoalID` Array(UInt32), `Market.OrderID` Array(String), `Market.OrderPrice` Array(Int64), `Market.PP` Array(UInt32), `Market.DirectPlaceID` Array(UInt32), `Market.DirectOrderID` Array(UInt32), `Market.DirectBannerID` Array(UInt32), `Market.GoodID` Array(String), `Market.GoodName` Array(String), `Market.GoodQuantity` Array(Int32), `Market.GoodPrice` Array(Int64), IslandID FixedString(16)) ENGINE = CollapsingMergeTree(Sign) PARTITION BY toYYYYMM(StartDate) SAMPLE BY intHash32(UserID) ORDER BY (CounterID, StartDate, intHash32(UserID), VisitID); - -```` - -データをインポートします: +データをインポートする: ```bash clickhouse-client --max_insert_block_size 100000 --query "INSERT INTO test.hits FORMAT TSV" < hits_v1.tsv clickhouse-client --max_insert_block_size 100000 --query "INSERT INTO test.visits FORMAT TSV" < visits_v1.tsv -```` +``` diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/development/index.md b/i18n/jp/docusaurus-plugin-content-docs/current/development/index.md index 4ad8d48567c..1a404581152 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/development/index.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/development/index.md @@ -1,40 +1,20 @@ --- -description: '開発と貢献のインデックスページ' +description: "開発とコントリビューションのインデックスページ" slug: /development/ -title: '開発と貢献' -doc_type: 'landing-page' +title: "開発とコントリビューション" +doc_type: "landing-page" --- -このセクションには、次のページが含まれます。 +このセクションでは、以下のページをご覧いただけます: -{/* 以下の目次は、YAML フロントマターの title、description、slug フィールドから、 - 次のスクリプトによって自動生成されています: + -{/*AUTOGENERATED_START*/ } - -| Page | Description | -| ------------------------------------------------------------------------------------------- | --------------------------------------------------------- | -| [Developer Prerequisites](/development/developer-instruction) | ClickHouse 開発の前提条件とセットアップ手順 | -| [How to Build ClickHouse on Linux](/development/build) | Linux システム上で ClickHouse をソースからビルドするためのステップバイステップガイド | -| [Build on macOS for macOS](/development/build-osx) | macOS システム上で ClickHouse をソースからビルドするためのガイド | -| [Build on Linux for macOS](/development/build-cross-osx) | Linux 上で macOS 向けに ClickHouse をクロスコンパイルするためのガイド | -| [How to Build ClickHouse on Linux for AARCH64](/development/build-cross-arm) | AARCH64 アーキテクチャ向けに ClickHouse をソースからビルドするためのガイド | -| [How to Build ClickHouse on Linux for RISC-V 64](/development/build-cross-riscv) | RISC-V 64 アーキテクチャ向けに ClickHouse をソースからビルドするためのガイド | -| [Build on Linux for s390x (zLinux)](/development/build-cross-s390x) | s390x アーキテクチャ向けに ClickHouse をソースからビルドするためのガイド | -| [Build on Linux for E2K](/development/build-e2k) | E2K アーキテクチャ向けに ClickHouse をソースからビルドするためのガイド | -| [Build on Linux for LoongArch64](/development/build-cross-loongarch) | LoongArch64 アーキテクチャ向けに ClickHouse をソースからビルドするためのガイド | -| [Testing ClickHouse](/development/tests) | ClickHouse のテスト実行およびテストスイートの実行方法に関するガイド | -| [Architecture Overview](/development/architecture) | ClickHouse のアーキテクチャとカラム指向設計に関する包括的な概要 | -| [Continuous Integration (CI)](/development/continuous-integration) | ClickHouse の継続的インテグレーション (CI) システムの概要 | -| [Third-Party Libraries](/development/contrib) | ClickHouse におけるサードパーティライブラリの利用方法、およびライブラリの追加と保守方法を説明するページ | -| [C++ Style Guide](/development/style) | ClickHouse の C++ 開発におけるコーディングスタイルガイドライン | -| [Build Clickhouse with DEFLATE_QPL](/development/building_and_benchmarking_deflate_qpl) | ClickHouse を DEFLATE_QPL コーデック付きでビルドし、ベンチマークを実行する方法 | -| [Integrating Rust Libraries](/development/integrating_rust_libraries) | Rust ライブラリを ClickHouse に統合するためのガイド | - -{/*AUTOGENERATED_END*/ } + + diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/database-engines/index.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/database-engines/index.md index b6421800e80..309487af08e 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/database-engines/index.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/database-engines/index.md @@ -1,5 +1,5 @@ --- -description: 'データベースエンジンに関するドキュメント' +description: 'データベースエンジンのドキュメント' slug: /engines/database-engines/ toc_folder_title: 'データベースエンジン' toc_priority: 27 @@ -12,30 +12,16 @@ doc_type: 'landing-page' # データベースエンジン -データベースエンジンは、テーブルを操作するための仕組みです。デフォルトでは、ClickHouse は [Atomic](../../engines/database-engines/atomic.md) データベースエンジンを使用しており、これにより設定可能な[テーブルエンジン](../../engines/table-engines/index.md)と [SQL の方言](../../sql-reference/syntax.md)が提供されます。 +データベースエンジンを使用することで、テーブルを操作できます。デフォルトでは、ClickHouseは[Atomic](../../engines/database-engines/atomic.md)データベースエンジンを使用しており、設定可能な[テーブルエンジン](../../engines/table-engines/index.md)と[SQL方言](../../sql-reference/syntax.md)を提供します。 -利用可能なデータベースエンジンの一覧は次のとおりです。詳細については、各リンクを参照してください。 +以下は、利用可能なデータベースエンジンの完全なリストです。詳細については、リンク先を参照してください: -{/* このページの目次は、YAML フロントマターのフィールド slug、description、title から - https://github.com/ClickHouse/clickhouse-docs/blob/main/scripts/autogenerate-table-of-contents.sh - によって自動生成されています。 + -{/*AUTOGENERATED_START*/ } - -| Page | Description | -| --------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | -| [Shared](/engines/database-engines/shared) | ClickHouse Cloud で利用可能な `Shared` データベースエンジンについて説明します。 | -| [Atomic](/engines/database-engines/atomic) | `Atomic` エンジンは、ブロックしない `DROP TABLE` および `RENAME TABLE` クエリと、アトミックな `EXCHANGE TABLES` クエリをサポートします。`Atomic` データベースエンジンはデフォルトで使用されます。 | -| [Lazy](/engines/database-engines/lazy) | 最終アクセスから `expiration_time_in_seconds` 秒間のみテーブルを RAM に保持します。Log 型テーブルでのみ使用できます。 | -| [Replicated](/engines/database-engines/replicated) | このエンジンは Atomic エンジンを基盤としています。ZooKeeper に書き込まれる DDL ログを介してメタデータのレプリケーションをサポートし、対象データベースのすべてのレプリカで実行されます。 | -| [PostgreSQL](/engines/database-engines/postgresql) | リモートの PostgreSQL サーバー上のデータベースに接続できます。 | -| [MySQL](/engines/database-engines/mysql) | リモートの MySQL サーバー上のデータベースに接続し、ClickHouse と MySQL 間でデータを交換するために `INSERT` および `SELECT` クエリを実行できます。 | -| [SQLite](/engines/database-engines/sqlite) | SQLite データベースに接続し、ClickHouse と SQLite 間でデータを交換するために `INSERT` および `SELECT` クエリを実行できます。 | -| [MaterializedPostgreSQL](/engines/database-engines/materialized-postgresql) | PostgreSQL データベース内のテーブルを用いて ClickHouse データベースを作成します。 | -| [Backup](/engines/database-engines/backup) | バックアップからテーブル/データベースを読み取り専用モードで即座にアタッチできます。 | -| [DataLakeCatalog](/engines/database-engines/datalakecatalog) | DataLakeCatalog データベースエンジンを使用すると、ClickHouse を外部データカタログに接続し、オープンテーブル形式のデータをクエリできます。 | - -{/*AUTOGENERATED_END*/ } + + diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/azure-queue.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/azure-queue.md index 1fe1381f930..b991faddb36 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/azure-queue.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/azure-queue.md @@ -1,5 +1,5 @@ --- -description: 'このエンジンは Azure Blob Storage エコシステムとの統合を提供し、ストリーミングデータの取り込みを可能にします。' +description: 'このエンジンは Azure Blob Storage エコシステムとの統合を提供し、ストリーミングデータのインポートを可能にします。' sidebar_label: 'AzureQueue' sidebar_position: 181 slug: /engines/table-engines/integrations/azure-queue @@ -7,15 +7,11 @@ title: 'AzureQueue テーブルエンジン' doc_type: 'reference' --- - - # AzureQueue テーブルエンジン -このエンジンは [Azure Blob Storage](https://azure.microsoft.com/en-us/products/storage/blobs) エコシステムとの統合を提供し、ストリーミングデータの取り込みを可能にします。 - - +このエンジンは [Azure Blob Storage](https://azure.microsoft.com/en-us/products/storage/blobs) エコシステムとの統合を提供し、ストリーミングデータのインポートを可能にします。 -## テーブルの作成 {#creating-a-table} +## テーブルの作成 ```sql CREATE TABLE test (name String, value UInt32) @@ -29,9 +25,9 @@ CREATE TABLE test (name String, value UInt32) **エンジンパラメータ** -`AzureQueue`のパラメータは`AzureBlobStorage`テーブルエンジンと同じです。パラメータの詳細については[こちら](../../../engines/table-engines/integrations/azureBlobStorage.md)を参照してください。 +`AzureQueue` のパラメータは、`AzureBlobStorage` テーブルエンジンでサポートされるものと同一です。パラメータについては[こちら](../../../engines/table-engines/integrations/azureBlobStorage.md)を参照してください。 -[AzureBlobStorage](/engines/table-engines/integrations/azureBlobStorage)テーブルエンジンと同様に、ローカルでのAzure Storage開発にはAzuriteエミュレータを使用できます。詳細については[こちら](https://learn.microsoft.com/en-us/azure/storage/common/storage-use-azurite?tabs=docker-hub%2Cblob-storage)を参照してください。 +[AzureBlobStorage](/engines/table-engines/integrations/azureBlobStorage) テーブルエンジンと同様に、ローカル環境での Azure Storage 開発には Azurite エミュレーターを利用できます。詳細は[こちら](https://learn.microsoft.com/en-us/azure/storage/common/storage-use-azurite?tabs=docker-hub%2Cblob-storage)を参照してください。 **例** @@ -46,21 +42,59 @@ SETTINGS mode = 'unordered' ``` -## 設定 {#settings} +## Settings \{#settings\} + +サポートされている設定項目は、ほとんどが `S3Queue` テーブルエンジンと同じですが、`s3queue_` プレフィックスは付きません。[設定の全リスト](../../../engines/table-engines/integrations/s3queue.md#settings)を参照してください。 +テーブルに対して構成されている設定の一覧を取得するには、`system.azure_queue_settings` テーブルを使用します。`24.10` 以降で利用可能です。 + +以下は、AzureQueue にのみ対応し、S3Queue には適用されない設定です。 + +### `after_processing_move_connection_string` \{#after_processing_move_connection_string\} + +宛先が別の Azure コンテナーである場合に、正常に処理されたファイルを移動するための Azure Blob Storage 接続文字列。 + +指定可能な値: + +- 文字列。 + +デフォルト値: 空文字列。 + +### `after_processing_move_container` + +移動先が別の Azure コンテナである場合に、正常に処理されたファイルを移動する移動先コンテナ名。 + +指定可能な値: -サポートされている設定は`S3Queue`テーブルエンジンと同じですが、`s3queue_`プレフィックスは付きません。[設定の完全なリスト](../../../engines/table-engines/integrations/s3queue.md#settings)を参照してください。 -テーブルに設定されている設定のリストを取得するには、`system.azure_queue_settings`テーブルを使用します。`24.10`から利用可能です。 +* 文字列。 +デフォルト値: 空文字列。 + +例: + +```sql +CREATE TABLE azure_queue_engine_table +( + `key` UInt64, + `data` String +) +ENGINE = AzureQueue('DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://azurite1:10000/devstoreaccount1/;', 'testcontainer', '*', 'CSV') +SETTINGS + mode = 'unordered', + after_processing = 'move', + after_processing_move_connection_string = 'DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://azurite1:10000/devstoreaccount1/;', + after_processing_move_container = 'dst-container'; +``` -## Description {#description} -`SELECT`はストリーミングインポートにはあまり有用ではありません(デバッグを除く)。各ファイルは一度しかインポートできないためです。[マテリアライズドビュー](../../../sql-reference/statements/create/view.md)を使用してリアルタイム処理を作成する方が実用的です。これを行うには: +## 説明 -1. エンジンを使用してS3の指定されたパスから読み取るテーブルを作成し、それをデータストリームとして扱います。 -2. 必要な構造を持つテーブルを作成します。 -3. エンジンからデータを変換し、事前に作成したテーブルに格納するマテリアライズドビューを作成します。 +`SELECT` は、各ファイルを 1 回しかインポートできないため(デバッグ用途を除き)ストリーミングインポートにはあまり有用ではありません。代わりに、[マテリアライズドビュー](../../../sql-reference/statements/create/view.md) を使用してリアルタイム処理フローを作成する方が実用的です。これを行うには、次のようにします。 -`MATERIALIZED VIEW`がエンジンに接続されると、バックグラウンドでデータの収集が開始されます。 +1. エンジンを使用して、S3 内の指定パスからデータを取り込むテーブルを作成し、それをデータストリームとみなします。 +2. 目的の構造を持つテーブルを作成します。 +3. エンジンからのデータを変換し、事前に作成したテーブルに格納するマテリアライズドビューを作成します。 + +`MATERIALIZED VIEW` をエンジンと関連付けると、バックグラウンドでデータの取り込みを開始します。 例: @@ -80,60 +114,59 @@ SELECT * FROM stats ORDER BY key; ``` -## 仮想カラム {#virtual-columns} - -- `_path` — ファイルへのパス -- `_file` — ファイル名 +## 仮想カラム \{#virtual-columns\} -仮想カラムの詳細については、[こちら](../../../engines/table-engines/index.md#table_engines-virtual_columns)を参照してください。 +- `_path` — ファイルパス。 +- `_file` — ファイル名。 +仮想カラムの詳細については[こちら](../../../engines/table-engines/index.md#table_engines-virtual_columns)を参照してください。 -## イントロスペクション {#introspection} +## イントロスペクション -テーブル設定 `enable_logging_to_queue_log=1` でテーブルのログ記録を有効にします。 +テーブル設定 `enable_logging_to_queue_log=1` を有効にして、テーブルに対するログ記録を有効化します。 -イントロスペクション機能は [S3Queueテーブルエンジン](/engines/table-engines/integrations/s3queue#introspection) と同じですが、いくつかの相違点があります: +イントロスペクション機能は [S3Queue テーブルエンジン](/engines/table-engines/integrations/s3queue#introspection) と同じですが、いくつか明確な違いがあります: -1. サーババージョン >= 25.1 では、キューのインメモリ状態に `system.azure_queue` を使用します。それ以前のバージョンでは `system.s3queue` を使用します(`azure` テーブルの情報も含まれます)。 -2. メインのClickHouse設定で `system.azure_queue_log` を有効にします。例: +1. サーバーバージョンが >= 25.1 の場合、キューのインメモリ状態には `system.azure_queue` を使用します。古いバージョンでは `system.s3queue` を使用します(こちらにも `azure` テーブルに関する情報が含まれます)。 +2. メインの ClickHouse 設定で `system.azure_queue_log` を有効化します。例: ```xml - - system - azure_queue_log
-
+ + system + azure_queue_log
+
``` -この永続テーブルは `system.s3queue` と同じ情報を持ちますが、処理済みおよび失敗したファイルに関するものです。 +この永続テーブルは、`system.s3queue` と同様の情報を保持しますが、対象は処理済みおよび失敗したファイルです。 -テーブルは以下の構造を持ちます: +このテーブルの構造は次のとおりです。 ```sql CREATE TABLE system.azure_queue_log ( `hostname` LowCardinality(String) COMMENT 'ホスト名', - `event_date` Date COMMENT 'このログ行を書き込んだイベント日付', - `event_time` DateTime COMMENT 'このログ行を書き込んだイベント時刻', - `database` String COMMENT '現在のS3Queueテーブルが存在するデータベースの名前', - `table` String COMMENT 'S3Queueテーブルの名前', + `event_date` Date COMMENT 'このログ行の書き込みイベント日付', + `event_time` DateTime COMMENT 'このログ行の書き込みイベント時刻', + `database` String COMMENT '現在のS3Queueテーブルが存在するデータベース名。', + `table` String COMMENT 'S3Queueテーブル名。', `uuid` String COMMENT 'S3QueueテーブルのUUID', - `file_name` String COMMENT '処理ファイルのファイル名', + `file_name` String COMMENT '処理対象ファイルのファイル名', `rows_processed` UInt64 COMMENT '処理された行数', - `status` Enum8('Processed' = 0, 'Failed' = 1) COMMENT '処理ファイルのステータス', + `status` Enum8('Processed' = 0, 'Failed' = 1) COMMENT 'ファイル処理のステータス', `processing_start_time` Nullable(DateTime) COMMENT 'ファイル処理の開始時刻', `processing_end_time` Nullable(DateTime) COMMENT 'ファイル処理の終了時刻', - `exception` String COMMENT '発生した例外メッセージ' + `exception` String COMMENT '例外が発生した場合の例外メッセージ' ) ENGINE = MergeTree PARTITION BY toYYYYMM(event_date) ORDER BY (event_date, event_time) SETTINGS index_granularity = 8192 -COMMENT 'S3Queueエンジンによって処理されたファイルの情報を含むログエントリを格納します。' +COMMENT 'S3Queueエンジンによって処理されるファイルの情報を含むログエントリを格納する。' ``` -例: +例: ```sql SELECT * @@ -141,7 +174,7 @@ FROM system.azure_queue_log LIMIT 1 FORMAT Vertical -Row 1: +行 1: ────── hostname: clickhouse event_date: 2024-12-16 @@ -156,6 +189,6 @@ processing_start_time: 2024-12-16 13:42:47 processing_end_time: 2024-12-16 13:42:47 exception: -1 row in set. Elapsed: 0.002 sec. +1行が結果セットに含まれています。経過時間: 0.002秒。 ``` diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/index.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/index.md index 1723df5a009..aefa374c57f 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/index.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/index.md @@ -1,54 +1,24 @@ --- -description: '統合向けテーブルエンジンのドキュメント' -sidebar_label: '統合' +description: 'インテグレーション向けテーブルエンジンのドキュメント' +sidebar_label: 'インテグレーション' sidebar_position: 40 slug: /engines/table-engines/integrations/ -title: '統合向けテーブルエンジン' +title: 'インテグレーション向けテーブルエンジン' doc_type: 'reference' --- -# 連携向けテーブルエンジン +# 統合用テーブルエンジン -ClickHouse は、テーブルエンジンを含むさまざまな手段で外部システムと連携できます。他のすべてのテーブルエンジンと同様に、設定は `CREATE TABLE` または `ALTER TABLE` クエリを使って行います。ユーザーの視点から見ると、設定された連携は通常のテーブルのように見えますが、そのテーブルへのクエリは外部システムにプロキシされます。この透過的なクエリ実行は、辞書やテーブル関数のような代替的な連携方法に比べた、このアプローチの主な利点の 1 つです。代替方法では、利用のたびにカスタムクエリ手法を用いる必要があります。 +ClickHouseは、テーブルエンジンを含む外部システムとの統合のための様々な手段を提供しています。他のすべてのテーブルエンジンと同様に、設定は`CREATE TABLE`または`ALTER TABLE`クエリを使用して行われます。ユーザーの観点からは、設定された統合は通常のテーブルのように見えますが、それに対するクエリは外部システムにプロキシされます。この透過的なクエリ実行は、使用するたびにカスタムクエリメソッドを必要とする辞書やテーブル関数のような代替統合方法に対する、このアプローチの主要な利点の1つです。 -{/* このページの目次テーブルは、YAML フロントマターのフィールド slug、description、title から - https://github.com/ClickHouse/clickhouse-docs/blob/main/scripts/autogenerate-table-of-contents.sh - によって自動生成されます。 + - -{/*AUTOGENERATED_START*/ } - -| ページ | 概要 | -| ---------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | -| [AzureBlobStorage テーブルエンジン](/engines/table-engines/integrations/azureBlobStorage) | このエンジンは、Azure Blob Storage エコシステムとの統合機能を提供します。 | -| [DeltaLake テーブルエンジン](/engines/table-engines/integrations/deltalake) | このエンジンにより、Amazon S3 上の既存の Delta Lake テーブルと読み取り専用で連携できます。 | -| [EmbeddedRocksDB テーブルエンジン](/engines/table-engines/integrations/embedded-rocksdb) | このエンジンを使用すると、ClickHouse と RocksDB を統合できます | -| [ExternalDistributed テーブルエンジン](/engines/table-engines/integrations/ExternalDistributed) | `ExternalDistributed` エンジンを使用すると、リモートサーバー上の MySQL または PostgreSQL に格納されたデータに対して `SELECT` クエリを実行できます。MySQL または PostgreSQL エンジンを引数として受け取るため、シャーディングが可能です。 | -| [TimeSeries テーブルエンジン](/engines/table-engines/special/time_series) | タイムスタンプおよびタグ(またはラベル)に関連付けられた値の集合としての時系列データを格納するテーブルエンジン。 | -| [HDFS テーブルエンジン](/engines/table-engines/integrations/hdfs) | このエンジンは、ClickHouse 経由で HDFS 上のデータを管理できるようにすることで、Apache Hadoop エコシステムとの統合を実現します。このエンジンは File エンジンおよび URL エンジンに類似していますが、Hadoop 固有の機能を提供します。 | -| [Hive テーブルエンジン](/engines/table-engines/integrations/hive) | Hive エンジンを使用すると、HDFS 上の Hive テーブルに対して `SELECT` クエリを実行できます。 | -| [Hudi テーブルエンジン](/engines/table-engines/integrations/hudi) | このエンジンは、Amazon S3 上の既存の Apache Hudi テーブルとの読み取り専用統合を提供します。 | -| [Iceberg テーブルエンジン](/engines/table-engines/integrations/iceberg) | このエンジンは、Amazon S3、Azure、HDFS およびローカルに保存された既存の Apache Iceberg テーブルと読み取り専用で連携します。 | -| [JDBC テーブルエンジン](/engines/table-engines/integrations/jdbc) | ClickHouse が JDBC を介して外部データベースに接続できるようにします。 | -| [Kafka テーブルエンジン](/engines/table-engines/integrations/kafka) | Kafka Table Engine は Apache Kafka と連携して使用でき、データフローの公開および購読、耐障害性のあるストレージの構成、そしてストリームが利用可能になり次第その処理を行うことができます。 | -| [MaterializedPostgreSQL テーブルエンジン](/engines/table-engines/integrations/materialized-postgresql) | PostgreSQL テーブルのデータを初期ダンプして ClickHouse テーブルを作成し、レプリケーションを開始します。 | -| [MongoDB テーブルエンジン](/engines/table-engines/integrations/mongodb) | MongoDB エンジンは、リモートのコレクションからデータを読み出すための読み取り専用テーブルエンジンです。 | -| [MySQL テーブルエンジン](/engines/table-engines/integrations/mysql) | MySQL テーブルエンジンに関するドキュメント | -| [NATS テーブルエンジン](/engines/table-engines/integrations/nats) | このエンジンを使用すると、ClickHouse を NATS と連携させてメッセージのサブジェクトを公開・購読し、新着メッセージを利用可能になり次第処理できます。 | -| [ODBC テーブルエンジン](/engines/table-engines/integrations/odbc) | ClickHouse が ODBC 経由で外部データベースに接続できるようにします。 | -| [PostgreSQL テーブルエンジン](/engines/table-engines/integrations/postgresql) | PostgreSQL エンジンを使用すると、リモートの PostgreSQL サーバー上に保存されたデータに対して `SELECT` および `INSERT` クエリを実行できます。 | -| [RabbitMQ テーブルエンジン](/engines/table-engines/integrations/rabbitmq) | このエンジンを使用すると、ClickHouse を RabbitMQ と統合できます。 | -| [Redis テーブルエンジン](/engines/table-engines/integrations/redis) | このエンジンを使用すると、ClickHouse を Redis と統合できます。 | -| [S3 テーブルエンジン](/engines/table-engines/integrations/s3) | このエンジンは Amazon S3 エコシステムとの統合を提供します。HDFS エンジンに似ていますが、S3 に特化した機能も備えています。 | -| [S3Queue テーブルエンジン](/engines/table-engines/integrations/s3queue) | このエンジンは Amazon S3 エコシステムと統合されており、ストリーミングによるインポートをサポートします。Kafka や RabbitMQ エンジンと同様ですが、S3 固有の機能を備えています。 | -| [AzureQueue テーブルエンジン](/engines/table-engines/integrations/azure-queue) | このエンジンは Azure Blob Storage エコシステムと統合されており、ストリーミングによるデータ取り込みをサポートします。 | -| [YTsaurus テーブルエンジン](/engines/table-engines/integrations/ytsaurus) | YTsaurus クラスターからデータをインポートするためのテーブルエンジン。 | -| [SQLite テーブルエンジン](/engines/table-engines/integrations/sqlite) | このエンジンでは、SQLite との間でデータのインポートおよびエクスポートを行え、ClickHouse から SQLite のテーブルに対して直接クエリを実行できます。 | -| [ArrowFlight テーブルエンジン](/engines/table-engines/integrations/arrowflight) | このエンジンは、Apache Arrow Flight を介してリモートデータセットに対してクエリを実行できます。 | - -{/*AUTOGENERATED_END*/ } + + diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/s3queue.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/s3queue.md index 7c2d73bb4c7..9cd619aed07 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/s3queue.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/s3queue.md @@ -1,5 +1,5 @@ --- -description: 'このエンジンは Amazon S3 エコシステムとの統合を提供し、ストリーミングによるインポートを可能にします。Kafka エンジンや RabbitMQ エンジンと類似していますが、S3 固有の機能も備えています。' +description: 'このエンジンは Amazon S3 エコシステムとの統合機能を提供し、ストリーミングインポートを可能にします。Kafka エンジンおよび RabbitMQ エンジンと同様ですが、S3 固有の機能を提供します。' sidebar_label: 'S3Queue' sidebar_position: 181 slug: /engines/table-engines/integrations/s3queue @@ -12,13 +12,11 @@ import ScalePlanFeatureBadge from '@theme/badges/ScalePlanFeatureBadge' # S3Queue テーブルエンジン -このエンジンは [Amazon S3](https://aws.amazon.com/s3/) エコシステムとの統合を提供し、ストリーミングによるインポートを可能にします。このエンジンは [Kafka](../../../engines/table-engines/integrations/kafka.md)、[RabbitMQ](../../../engines/table-engines/integrations/rabbitmq.md) エンジンに似ていますが、S3 固有の機能を備えています。 +このエンジンは [Amazon S3](https://aws.amazon.com/s3/) エコシステムとの統合を提供し、ストリーミングインポートを可能にします。このエンジンは [Kafka](../../../engines/table-engines/integrations/kafka.md)、[RabbitMQ](../../../engines/table-engines/integrations/rabbitmq.md) エンジンと類似していますが、S3 固有の機能を提供します。 -[S3Queue 実装の元となった PR](https://github.com/ClickHouse/ClickHouse/pull/49086/files#diff-e1106769c9c8fbe48dd84f18310ef1a250f2c248800fde97586b3104e9cd6af8R183) にある次の注意事項を理解しておくことが重要です。`MATERIALIZED VIEW` がこのエンジンに紐付けられると、S3Queue テーブルエンジンはバックグラウンドでデータの収集を開始します。 +[S3Queue 実装の元となった PR](https://github.com/ClickHouse/ClickHouse/pull/49086/files#diff-e1106769c9c8fbe48dd84f18310ef1a250f2c248800fde97586b3104e9cd6af8R183) に記載されている次の注意点を理解しておくことが重要です。`MATERIALIZED VIEW` がこのエンジンに接続されると、S3Queue テーブルエンジンはバックグラウンドでデータの収集を開始します。 - - -## テーブルの作成 {#creating-a-table} +## テーブルを作成する ```sql CREATE TABLE s3_queue_engine_table (name String, value UInt32) @@ -49,12 +47,12 @@ CREATE TABLE s3_queue_engine_table (name String, value UInt32) ``` :::warning -`24.7`より前では、`mode`、`after_processing`、`keeper_path`以外のすべての設定に`s3queue_`プレフィックスを使用する必要があります。 +`24.7` より前のバージョンでは、`mode`、`after_processing`、`keeper_path` を除くすべての設定項目で `s3queue_` プレフィックスを使用する必要があります。 ::: **エンジンパラメータ** -`S3Queue`のパラメータは`S3`テーブルエンジンがサポートするものと同じです。パラメータセクションは[こちら](../../../engines/table-engines/integrations/s3.md#parameters)を参照してください。 +`S3Queue` のパラメータは、`S3` テーブルエンジンがサポートしているものと同一です。パラメータについては[こちら](../../../engines/table-engines/integrations/s3.md#parameters)を参照してください。 **例** @@ -65,7 +63,7 @@ SETTINGS mode = 'unordered'; ``` -名前付きコレクションの使用: +名前付きコレクションの使用: ```xml @@ -87,93 +85,190 @@ SETTINGS ``` -## 設定 {#settings} +## 設定 \{#settings\} -テーブルに設定された設定のリストを取得するには、`system.s3_queue_settings`テーブルを使用します。`24.10`から利用可能です。 +テーブルに対して構成された設定の一覧を取得するには、`system.s3_queue_settings` テーブルを使用します。`24.10` 以降で利用可能です。 -### モード {#mode} +### Mode \{#mode\} -指定可能な値: +指定可能な値: -- unordered — 順序なしモードでは、すでに処理されたすべてのファイルのセットがZooKeeper内の永続ノードで追跡されます。 -- ordered — 順序ありモードでは、ファイルは辞書順で処理されます。これは、'BBB'という名前のファイルがある時点で処理され、その後'AA'という名前のファイルがバケットに追加された場合、それは無視されることを意味します。正常に処理されたファイルの最大名(辞書順)と、読み込み失敗後に再試行されるファイルの名前のみがZooKeeperに保存されます。 +- unordered — `unordered` モードでは、すでに処理されたすべてのファイルの集合が ZooKeeper 内の永続ノードとして管理されます。 +- ordered — `ordered` モードでは、ファイルは辞書順で処理されます。つまり、ファイル名 `BBB` のファイルがある時点で処理され、その後にファイル名 `AA` のファイルがバケットに追加された場合、そのファイルは無視されます。ZooKeeper には、正常に取り込まれたファイル名のうち最大のもの(辞書順での最大値)と、読み込みに失敗して再試行対象となるファイル名のみが保存されます。 -デフォルト値: 24.6より前のバージョンでは`ordered`。24.6以降はデフォルト値がなく、手動で指定する必要があります。以前のバージョンで作成されたテーブルについては、互換性のためデフォルト値は`Ordered`のままとなります。 +デフォルト値: バージョン 24.6 より前は `ordered`。24.6 以降ではデフォルト値は存在せず、この設定は手動で指定する必要があります。以前のバージョンで作成されたテーブルについては、互換性のためデフォルト値は引き続き `Ordered` のままです。 -### `after_processing` {#after_processing} +### `after_processing` + +ファイルの処理が正常に完了した後の扱い方法。 -処理が正常に完了した後、ファイルを削除するか保持するかを指定します。 指定可能な値: -- keep。 -- delete。 +* keep。 +* delete。 +* move。 +* tag。 デフォルト値: `keep`。 -### `keeper_path` {#keeper_path} +move を使用するには追加の設定が必要です。同一バケット内で移動する場合は、新しいパスプレフィックスを `after_processing_move_prefix` として指定する必要があります。 + +別の S3 バケットへ移動する場合は、移動先バケットの URI を `after_processing_move_uri` として、S3 クレデンシャルを `after_processing_move_access_key_id` および `after_processing_move_secret_access_key` として指定する必要があります。 + +例: + +```sql +CREATE TABLE s3queue_engine_table (name String, value UInt32) +ENGINE=S3Queue('https://clickhouse-public-datasets.s3.amazonaws.com/my-test-bucket-768/*', 'CSV', 'gzip') +SETTINGS + mode = 'unordered', + after_processing = 'move', + after_processing_retries = 20, + after_processing_move_prefix = 'dst_prefix', + after_processing_move_uri = 'https://clickhouse-public-datasets.s3.amazonaws.com/dst-bucket', + after_processing_move_access_key_id = 'test', + after_processing_move_secret_access_key = 'test'; +``` + +Azure コンテナから別の Azure コンテナに移動するには、Blob Storage の接続文字列を `after_processing_move_connection_string` に、コンテナ名を `after_processing_move_container` に指定します。詳しくは [AzureQueue の設定](../../../engines/table-engines/integrations/azure-queue.md#settings) を参照してください。 + +タグ付けを行うには、タグキーと値をそれぞれ `after_processing_tag_key` および `after_processing_tag_value` として指定します。 + + +### `after_processing_retries` \{#after_processing_retries\} + +要求された後処理アクションに対して、処理を中止するまでに行う再試行回数。 + +設定可能な値: + +- 0 以上の整数。 + +デフォルト値: `10`。 + +### `after_processing_move_access_key_id` \{#after_processing_move_access_key_id\} + +移動先が別の S3 バケットである場合に、正常に処理されたファイルをそのバケットへ移動するための Access Key ID。 + +設定可能な値: + +- 文字列。 + +デフォルト値: 空文字列。 + +### `after_processing_move_prefix` \{#after_processing_move_prefix\} + +正常に処理されたファイルを移動する先のパスプレフィックスです。同一バケット内での移動と、別のバケットへの移動の両方で有効です。 -ZooKeeper内のパスは、テーブルエンジンの設定として指定するか、グローバル設定で提供されるパスとテーブルUUIDから形成されるデフォルトパスを使用できます。 指定可能な値: +- String。 + +デフォルト値: 空文字列。 + +### `after_processing_move_secret_access_key` \{#after_processing_move_secret_access_key\} + +移動先が別の S3 バケットである場合に、正常に処理されたファイルをそのバケットへ移動するための Secret Access Key。 + +設定可能な値: + - 文字列。 -デフォルト値: `/`。 +デフォルト値: 空文字列。 -### `s3queue_loading_retries` {#loading_retries} +### `after_processing_move_uri` \{#after_processing_move_uri\} + +宛先が別の S3 バケットである場合に、正常に処理されたファイルを移動する先となる S3 バケットの URI。 + +取りうる値: + +- 文字列。 + +デフォルト値: 空文字列。 + +### `after_processing_tag_key` \{#after_processing_tag_key\} + +`after_processing='tag'` の場合に、正常に処理されたファイルへタグ付けを行うためのタグキー。 + +指定可能な値: + +- 文字列。 + +デフォルト値: 空文字列。 + +### `after_processing_tag_value` \{#after_processing_tag_value\} + +`after_processing` が `tag` の場合に、正常に処理されたファイルに付与するタグ値。 -指定された回数までファイルの読み込みを再試行します。デフォルトでは再試行は行われません。 指定可能な値: +- 文字列。 + +デフォルト値: 空文字列。 + +### `keeper_path` \{#keeper_path\} + +ZooKeeper 内のパスはテーブルエンジンの設定として指定するか、グローバル設定で指定されたパスとテーブル UUID から既定パスを生成できます。 +取りうる値: + +- 文字列。 + +既定値: `/`。 + +### `s3queue_loading_retries` \{#loading_retries\} + +指定された回数までファイルの読み込みを再試行します。デフォルトでは再試行は行われません。 +取りうる値: + - 正の整数。 デフォルト値: `0`。 -### `s3queue_processing_threads_num` {#processing_threads_num} +### `s3queue_processing_threads_num` \{#processing_threads_num\} -処理を実行するスレッド数。`Unordered`モードにのみ適用されます。 +処理を実行するスレッド数。`Unordered` モードでのみ適用されます。 -デフォルト値: CPUの数または16。 +デフォルト値: CPU の数または 16。 -### `s3queue_parallel_inserts` {#parallel_inserts} +### `s3queue_parallel_inserts` \{#parallel_inserts\} -デフォルトでは、`processing_threads_num`は1つの`INSERT`を生成するため、複数のスレッドでファイルのダウンロードと解析のみを行います。 -しかし、これは並列性を制限するため、より高いスループットを得るには`parallel_inserts=true`を使用してください。これによりデータを並列に挿入できます(ただし、MergeTreeファミリーでは生成されるデータパーツの数が増加することに注意してください)。 +デフォルトでは、`processing_threads_num` は 1 つの `INSERT` しか生成されないため、複数スレッドで実行されるのはファイルのダウンロードとパース処理だけです。 +しかし、これは並列度を制限するため、スループットを向上させるには `parallel_inserts=true` を使用してください。これによりデータを並列に挿入できるようになります(ただし、その結果として MergeTree ファミリーのテーブルに対して生成されるデータパーツの数が増加する点に注意してください)。 :::note -`INSERT`は`max_process*_before_commit`設定に従って生成されます。 +`INSERT` は `max_process*_before_commit` 設定を考慮して生成されます。 ::: デフォルト値: `false`。 -### `s3queue_enable_logging_to_s3queue_log` {#enable_logging_to_s3queue_log} +### `s3queue_enable_logging_to_s3queue_log` \{#enable_logging_to_s3queue_log\} -`system.s3queue_log`へのログ記録を有効にします。 +`system.s3queue_log` へのログ記録を有効にします。 デフォルト値: `0`。 -### `s3queue_polling_min_timeout_ms` {#polling_min_timeout_ms} +### `s3queue_polling_min_timeout_ms` \{#polling_min_timeout_ms\} -次のポーリング試行を行う前にClickHouseが待機する最小時間をミリ秒単位で指定します。 +ClickHouse が次のポーリングを実行する前に待機する最小時間をミリ秒単位で指定します。 -指定可能な値: +設定可能な値: - 正の整数。 デフォルト値: `1000`。 -### `s3queue_polling_max_timeout_ms` {#polling_max_timeout_ms} +### `s3queue_polling_max_timeout_ms` \{#polling_max_timeout_ms\} -次のポーリング試行を開始する前にClickHouseが待機する最大時間をミリ秒単位で定義します。 +ClickHouse が次のポーリング試行を開始するまでに待機する最大時間を、ミリ秒単位で定義します。 -指定可能な値: +可能な値: - 正の整数。 -デフォルト値: `10000`。 +デフォルト値: `10000`. -### `s3queue_polling_backoff_ms` {#polling_backoff_ms} +### `s3queue_polling_backoff_ms` \{#polling_backoff_ms\} -新しいファイルが見つからない場合に、前回のポーリング間隔に追加される待機時間を決定します。次のポーリングは、前回の間隔とこのバックオフ値の合計、または最大間隔のいずれか小さい方の後に実行されます。 +新しいファイルが見つからなかった場合に、前回のポーリング間隔に追加される待機時間を決定します。次回のポーリングは、前回の間隔にこのバックオフ値を加えた値と最大間隔のうち、短い方の時間が経過した後に行われます。 指定可能な値: @@ -181,69 +276,66 @@ ZooKeeper内のパスは、テーブルエンジンの設定として指定す デフォルト値: `0`。 -### `s3queue_tracked_files_limit` {#tracked_files_limit} +### `s3queue_tracked_files_limit` \{#tracked_files_limit\} -'unordered'モードが使用されている場合にZooKeeperノードの数を制限できます。'ordered'モードでは何も行いません。 -制限に達すると、最も古い処理済みファイルがZooKeeperノードから削除され、再度処理されます。 +`unordered` モードが使用されている場合に、ZooKeeper ノードの数に上限を設けるための設定です。`ordered` モードでは何も行いません。 +上限に達した場合、最も古く処理されたファイルが ZooKeeper ノードから削除され、再度処理されます。 -指定可能な値: +取り得る値: - 正の整数。 デフォルト値: `1000`。 -### `s3queue_tracked_file_ttl_sec` {#tracked_file_ttl_sec} +### `s3queue_tracked_file_ttl_sec` \{#tracked_file_ttl_sec\} -'unordered'モードにおいて、処理済みファイルをZooKeeperノードに保存する最大秒数(デフォルトでは永続的に保存)。'ordered'モードでは何も行いません。 -指定された秒数が経過すると、ファイルは再インポートされます。 +`unordered` モードにおいて、処理済みファイルを ZooKeeper のノードに保持しておく最大秒数(デフォルトでは無期限に保存)を指定します。`ordered` モードでは何もしません。 +指定された秒数が経過すると、そのファイルは再インポートされます。 -指定可能な値: +設定可能な値: -- 正の整数。 +- 正の整数 デフォルト値: `0`。 -### `s3queue_cleanup_interval_min_ms` {#cleanup_interval_min_ms} +### `s3queue_cleanup_interval_min_ms` \{#cleanup_interval_min_ms\} -'Ordered'モード用。追跡ファイルのTTLと最大追跡ファイルセットの維持を担当するバックグラウンドタスクの再スケジュール間隔の最小境界を定義します。 +'Ordered' モード用。追跡対象ファイルの TTL および追跡対象ファイル集合の最大数を維持するバックグラウンドタスクについて、その再スケジュールの間隔の下限値を定義します。 デフォルト値: `10000`。 -### `s3queue_cleanup_interval_max_ms` {#cleanup_interval_max_ms} +### `s3queue_cleanup_interval_max_ms` \{#cleanup_interval_max_ms\} - -'Ordered'モード用。追跡ファイルのTTLと追跡ファイル数の上限を管理するバックグラウンドタスクの再スケジュール間隔の最大値を定義します。 +「Ordered」モード用。追跡対象ファイルの TTL と、追跡対象ファイル集合の最大数を維持するバックグラウンドタスクの再スケジュール間隔に対する上限値を定義します。 デフォルト値: `30000`。 -### `s3queue_buckets` {#buckets} - -'Ordered'モード用。`24.6`以降で利用可能。S3Queueテーブルの複数のレプリカが存在し、それぞれがkeeperの同じメタデータディレクトリで動作している場合、`s3queue_buckets`の値は少なくともレプリカ数以上である必要があります。`s3queue_processing_threads`設定も併用する場合は、`s3queue_buckets`設定の値をさらに増やすことが推奨されます。これは`S3Queue`処理の実際の並列度を定義するためです。 +### `s3queue_buckets` \{#buckets\} -### `use_persistent_processing_nodes` {#use_persistent_processing_nodes} +「Ordered」モードで使用します。`24.6` から利用可能です。S3Queue テーブルのレプリカが複数あり、それぞれが keeper 内の同一のメタデータディレクトリを使用している場合、`s3queue_buckets` の値はレプリカ数以上に設定する必要があります。`s3queue_processing_threads` 設定も併用している場合は、`S3Queue` の処理における実際の並列度を決定するため、`s3queue_buckets` 設定の値をさらに大きくすることが推奨されます。 -デフォルトでは、S3Queueテーブルは常にエフェメラル処理ノードを使用しています。これにより、S3Queueが処理を開始した後、処理済みファイルをzookeeperにコミットする前にzookeeperセッションが期限切れになった場合、データの重複が発生する可能性があります。この設定により、keeperセッションが期限切れになった場合でも重複の可能性を排除します。 +### `use_persistent_processing_nodes` \{#use_persistent_processing_nodes\} -### `persistent_processing_nodes_ttl_seconds` {#persistent_processing_nodes_ttl_seconds} +デフォルトでは、S3Queue テーブルは常に一時的な処理ノードを使用しており、ZooKeeper セッションが、S3Queue が処理済みファイルを ZooKeeper にコミットする前に期限切れになり、かつ処理は開始されていた場合、データが重複する可能性がありました。この設定は、keeper セッションの期限切れに起因する重複が発生しないよう、サーバーに強制します。 -サーバーが正常終了しなかった場合、`use_persistent_processing_nodes`が有効になっていると、削除されていない処理ノードが残る可能性があります。この設定は、これらの処理ノードを安全にクリーンアップできる期間を定義します。 +### `persistent_processing_nodes_ttl_seconds` \{#persistent_processing_nodes_ttl_seconds\} -デフォルト値: `3600`(1時間)。 +サーバーが正常終了しなかった場合、`use_persistent_processing_nodes` が有効になっていると、処理ノードが削除されずに残る可能性があります。この設定は、それらの処理ノードを安全にクリーンアップできる猶予時間を定義します。 +デフォルト値: `3600`(1時間)。 -## S3関連の設定 {#s3-settings} +## S3 に関連する設定 \{#s3-settings\} -このエンジンはすべてのS3関連設定をサポートしています。S3設定の詳細については、[こちら](../../../engines/table-engines/integrations/s3.md)を参照してください。 +このエンジンでは、すべての S3 関連設定が利用できます。S3 設定の詳細は[こちら](../../../engines/table-engines/integrations/s3.md)を参照してください。 +## S3 ロールベースアクセス -## S3ロールベースアクセス {#s3-role-based-access} + - +`s3Queue` テーブルエンジンはロールベースのアクセスをサポートしています。 +バケットにアクセスするためのロールを設定する手順については、[こちら](/cloud/data-sources/secure-s3) のドキュメントを参照してください。 -s3Queueテーブルエンジンは、ロールベースアクセスをサポートしています。 -バケットへのアクセスに必要なロールの設定手順については、[こちら](/cloud/data-sources/secure-s3)のドキュメントを参照してください。 - -ロールの設定が完了したら、以下のように`extra_credentials`パラメータを使用して`roleARN`を指定できます: +ロールを設定したら、以下のように `extra_credentials` パラメータで `roleARN` を指定できます: ```sql CREATE TABLE s3_table @@ -260,28 +352,24 @@ SETTINGS ``` -## S3Queue順序付きモード {#ordered-mode} - -`S3Queue`処理モードでは、ZooKeeper内に保存するメタデータを削減できますが、時間的に後から追加されるファイルは、アルファベット順で大きい名前を持つ必要があるという制限があります。 - -`S3Queue`の`ordered`モードは、`unordered`モードと同様に、`(s3queue_)processing_threads_num`設定(`s3queue_`プレフィックスは省略可能)をサポートしており、サーバー上でローカルに`S3`ファイルを処理するスレッド数を制御できます。 - -さらに、`ordered`モードでは`(s3queue_)buckets`という別の設定が導入されており、これは「論理スレッド」を意味します。分散環境において、複数のサーバーに`S3Queue`テーブルのレプリカが存在する場合、この設定が処理単位の数を定義します。例えば、各`S3Queue`レプリカ上の各処理スレッドは、処理のために特定の`bucket`をロックしようとし、各`bucket`はファイル名のハッシュによって特定のファイルに割り当てられます。したがって、分散環境では、`(s3queue_)buckets`設定をレプリカ数以上に設定することを強く推奨します。バケット数がレプリカ数より多くても問題ありません。最も最適なシナリオは、`(s3queue_)buckets`設定を`number_of_replicas`と`(s3queue_)processing_threads_num`の積に等しくすることです。 - -`(s3queue_)processing_threads_num`設定は、バージョン`24.6`より前での使用は推奨されません。 +## S3Queue の ordered モード \{#ordered-mode\} -`(s3queue_)buckets`設定は、バージョン`24.6`以降で利用可能です。 +`S3Queue` の処理モードでは、ZooKeeper に保存するメタデータ量を減らせますが、時間的に後から追加されるファイルの名前は、英数字としてそれ以前のファイル名より大きくなる必要があるという制約があります。 +`S3Queue` の `ordered` モードは、`unordered` と同様に `(s3queue_)processing_threads_num` 設定(`s3queue_` プレフィックスは任意)をサポートしており、サーバー上で `S3` ファイルのローカル処理を行うスレッド数を制御できます。 +さらに、`ordered` モードでは、論理スレッド(logical threads)を意味する `(s3queue_)buckets` という別の設定も導入されています。これは、`S3Queue` テーブルのレプリカを持つ複数のサーバーが存在するような分散シナリオにおいて、この設定が処理単位の数を定義することを意味します。例えば、各 `S3Queue` レプリカ上の各処理スレッドは、処理対象として特定の `bucket` をロックしようとし、各 `bucket` はファイル名のハッシュによって特定のファイルに割り当てられます。そのため、分散シナリオでは、`(s3queue_)buckets` 設定をレプリカ数以上、またはそれより大きく設定することが強く推奨されます。`bucket` の数がレプリカ数より多くても問題ありません。最適な構成は、`(s3queue_)buckets` 設定が `number_of_replicas` と `(s3queue_)processing_threads_num` の積と等しくなるようにすることです。 +`(s3queue_)processing_threads_num` 設定は、バージョン `24.6` より前での使用は推奨されません。 +`(s3queue_)buckets` 設定は、バージョン `24.6` から利用可能です。 -## Description {#description} +## 説明 -`SELECT`はストリーミングインポートにはあまり有用ではありません(デバッグを除く)。各ファイルは一度しかインポートできないためです。[マテリアライズドビュー](../../../sql-reference/statements/create/view.md)を使用してリアルタイム処理を作成する方が実用的です。これを行うには: +`SELECT` は、各ファイルを 1 回しかインポートできないため(デバッグ用途を除いて)ストリーミングインポートにはあまり有用ではありません。代わりに、[マテリアライズドビュー](../../../sql-reference/statements/create/view.md) を使ってリアルタイムの処理フローを作成する方が実用的です。そのためには次のようにします。 -1. エンジンを使用してS3の指定されたパスからデータを取得するテーブルを作成し、それをデータストリームとして扱います。 -2. 必要な構造を持つテーブルを作成します。 -3. エンジンからデータを変換し、事前に作成したテーブルに格納するマテリアライズドビューを作成します。 +1. 指定した S3 内のパスからデータを消費するテーブルを S3 エンジンで作成し、それをデータストリームと見なします。 +2. 目的の構造を持つテーブルを作成します。 +3. エンジンからのデータを変換し、事前に作成したテーブルに書き込むマテリアライズドビューを作成します。 -`MATERIALIZED VIEW`がエンジンに接続されると、バックグラウンドでデータの収集が開始されます。 +`MATERIALIZED VIEW` がエンジンに紐付けられると、バックグラウンドでデータの取り込みを開始します。 例: @@ -301,47 +389,44 @@ SETTINGS ``` -## 仮想カラム {#virtual-columns} +## 仮想カラム \{#virtual-columns\} - `_path` — ファイルへのパス。 - `_file` — ファイル名。 -- `_size` — ファイルのサイズ。 +- `_size` — ファイルサイズ。 - `_time` — ファイルの作成時刻。 -仮想カラムの詳細については、[こちら](../../../engines/table-engines/index.md#table_engines-virtual_columns)を参照してください。 +仮想カラムの詳細については[こちら](../../../engines/table-engines/index.md#table_engines-virtual_columns)を参照してください。 +## パス内のワイルドカード \{#wildcards-in-path\} -## パス内のワイルドカード {#wildcards-in-path} +`path` 引数では、bash 風のワイルドカードを使用して複数のファイルを指定できます。ファイルが処理対象となるには、実際に存在し、パスパターン全体に完全一致している必要があります。ファイルの一覧は `SELECT` 実行時に決定されます(`CREATE` 時点ではありません)。 -`path` 引数では、bashライクなワイルドカードを使用して複数のファイルを指定できます。処理されるファイルは存在し、パスパターン全体に一致している必要があります。ファイルのリストは `SELECT` 実行時に決定されます(`CREATE` 時ではありません)。 +- `*` — `/` を除く任意の文字列(空文字列を含む)に対して任意の長さでマッチします。 +- `**` — `/` を含む任意の文字列(空文字列を含む)に対して任意の長さでマッチします。 +- `?` — 任意の 1 文字にマッチします。 +- `{some_string,another_string,yet_another_one}` — 文字列 `'some_string', 'another_string', 'yet_another_one'` のいずれか 1 つにマッチします。 +- `{N..M}` — N から M までの範囲(両端を含む)の任意の数値にマッチします。N と M には先頭にゼロを含めることができ、例えば `000..078` のように指定できます。 -- `*` — `/` を除く任意の文字を任意の数(空文字列を含む)にマッチします。 -- `**` — `/` を含む任意の文字を任意の数(空文字列を含む)にマッチします。 -- `?` — 任意の1文字にマッチします。 -- `{some_string,another_string,yet_another_one}` — `'some_string'`、`'another_string'`、`'yet_another_one'` のいずれかの文字列にマッチします。 -- `{N..M}` — N から M までの範囲内の任意の数値にマッチします(両端を含む)。N と M は先頭にゼロを含むことができます(例: `000..078`)。 +`{}` を用いた構文は [remote](../../../sql-reference/table-functions/remote.md) テーブル関数と類似しています。 -`{}` を使用した構文は、[remote](../../../sql-reference/table-functions/remote.md) テーブル関数と同様です。 +## 制限事項 \{#limitations\} +1. 行の重複は以下の要因により発生する可能性があります: -## 制限事項 {#limitations} +- ファイル処理の途中でパース中に例外が発生し、`s3queue_loading_retries` によってリトライが有効になっている場合。 -1. 重複行は以下の理由により発生する可能性があります: - -- ファイル処理の途中で解析中に例外が発生し、`s3queue_loading_retries`による再試行が有効になっている場合; - -- `S3Queue`が複数のサーバーでZooKeeperの同じパスを指すように設定されており、あるサーバーが処理済みファイルのコミットを完了する前にKeeperセッションが期限切れになった場合、別のサーバーがそのファイルの処理を引き継ぐ可能性があります。このファイルは最初のサーバーによって部分的または完全に処理されている可能性があります。ただし、`use_persistent_processing_nodes = 1`の場合、バージョン25.8以降ではこの問題は発生しません; +- 複数のサーバーで同じ zookeeper のパスを指すように `S3Queue` が構成されており、1つのサーバーが処理済みファイルをコミットする前に keeper セッションが期限切れになった場合。これにより、別のサーバーがそのファイルの処理を引き継ぐ可能性があり、そのファイルは最初のサーバーによって部分的または完全に処理されている場合があります。ただし、バージョン 25.8 以降で `use_persistent_processing_nodes = 1` が設定されている場合、これは発生しません。 - サーバーの異常終了。 -2. `S3Queue`が複数のサーバーでZooKeeperの同じパスを指すように設定されており、`Ordered`モードが使用されている場合、`s3queue_loading_retries`は機能しません。この問題は近日中に修正される予定です。 +2. 複数のサーバーで同じ zookeeper のパスを指すように `S3Queue` が構成されており、かつ `Ordered` モードが使用されている場合、`s3queue_loading_retries` は動作しません。これは近いうちに修正される予定です。 +## 内部状態の確認 -## イントロスペクション {#introspection} +内部状態の確認には、ステートレスな `system.s3queue` テーブルと永続的な `system.s3queue_log` テーブルを使用します。 -イントロスペクションには、`system.s3queue`ステートレステーブルと`system.s3queue_log`永続テーブルを使用します。 - -1. `system.s3queue`。このテーブルは永続化されず、`S3Queue`のインメモリ状態を表示します。現在処理中のファイル、処理済みまたは失敗したファイルを示します。 +1. `system.s3queue`。このテーブルは永続化されず、`S3Queue` のメモリ上の状態を表示します。現在処理中のファイル、処理済みのファイル、失敗したファイルを確認できます。 ```sql ┌─statement──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ @@ -358,11 +443,11 @@ SETTINGS `exception` String ) ENGINE = SystemS3Queue -COMMENT 'S3Queueメタデータのインメモリ状態とファイルごとの現在処理中の行数を含みます。' │ +COMMENT 'S3Queueメタデータのインメモリ状態と、ファイルごとに現在処理されている行を含みます。' │ └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ ``` -例: +例: ```sql @@ -381,14 +466,14 @@ ProfileEvents: {'ZooKeeperTransactions':3,'ZooKeeperGet':2,'ZooKeeperMul exception: ``` -2. `system.s3queue_log`。永続テーブル。`system.s3queue`と同じ情報を持ちますが、`processed`および`failed`ファイルに関するものです。 +2. `system.s3queue_log`。永続テーブル。`system.s3queue` と同じ情報を持ちますが、対象は `processed` および `failed` のファイルです。 -このテーブルは以下の構造を持ちます: +このテーブルは次の構造を持ちます。 ```sql SHOW CREATE TABLE system.s3queue_log -Query id: 0ad619c3-0f2a-4ee4-8b40-c73d86e04314 +クエリ ID: 0ad619c3-0f2a-4ee4-8b40-c73d86e04314 ┌─statement──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ │ CREATE TABLE system.s3queue_log @@ -411,7 +496,7 @@ SETTINGS index_granularity = 8192 │ └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ ``` -`system.s3queue_log`を使用するには、サーバー設定ファイルでその設定を定義します: +`system.s3queue_log` を使用するには、サーバーの設定ファイルでその構成を定義してください。 ```xml diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/index.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/index.md index 75251b18fea..75c8d47a378 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/index.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/index.md @@ -9,40 +9,24 @@ doc_type: 'reference' -# MergeTree エンジンファミリー +# MergeTreeエンジンファミリー -MergeTree ファミリーに属するテーブルエンジンは、ClickHouse のデータストレージ機能の中核となります。これらは、カラム型ストレージ、カスタムパーティショニング、疎なプライマリインデックス、セカンダリのデータスキップインデックスなど、耐障害性と高性能なデータ取得のためのほとんどの機能を提供します。 +MergeTreeファミリーのテーブルエンジンは、ClickHouseのデータストレージ機能の中核です。耐障害性と高性能なデータ取得のための主要な機能を提供します:カラムナストレージ、カスタムパーティショニング、スパースプライマリインデックス、セカンダリデータスキッピングインデックスなど。 -ベースとなる [MergeTree](../../../engines/table-engines/mergetree-family/mergetree.md) テーブルエンジンは、単一ノードの ClickHouse インスタンスにおけるデフォルトのテーブルエンジンとみなすことができます。汎用性が高く、幅広いユースケースに対して実用的だからです。 +基本的な[MergeTree](../../../engines/table-engines/mergetree-family/mergetree.md)テーブルエンジンは、シングルノードのClickHouseインスタンスにおけるデフォルトのテーブルエンジンと考えることができます。幅広いユースケースに対して汎用性が高く実用的であるためです。 -本番環境での利用には [ReplicatedMergeTree](../../../engines/table-engines/mergetree-family/replication.md) を使うのが一般的です。通常の MergeTree エンジンのすべての機能に高可用性が追加されるためです。さらに、データのインジェスト時に自動的な重複排除が行われるため、挿入中にネットワークの問題が発生しても、ソフトウェア側で安全にリトライできます。 +本番環境では、[ReplicatedMergeTree](../../../engines/table-engines/mergetree-family/replication.md)の使用を推奨します。通常のMergeTreeエンジンのすべての機能に高可用性を追加するためです。さらに、データ取り込み時の自動重複排除機能により、挿入中にネットワークの問題が発生した場合でも、安全に再試行できます。 -MergeTree ファミリーのその他すべてのエンジンは、特定のユースケース向けに追加機能を提供します。通常、これはバックグラウンドでの追加のデータ操作として実装されます。 +MergeTreeファミリーの他のエンジンは、特定のユースケースに対して追加機能を提供します。通常、これらはバックグラウンドでの追加的なデータ操作として実装されています。 -MergeTree エンジンの主な欠点は、比較的ヘビーウェイトであることです。そのため、典型的なパターンとしては、それほど多くのテーブルを作成しない構成になります。多くの小さなテーブル(たとえば一時データ用)が必要な場合は、[Log エンジンファミリー](../../../engines/table-engines/log-family/index.md) の利用を検討してください。 +MergeTreeエンジンの主な欠点は、比較的重量級であることです。そのため、一般的なパターンとしては、多数のテーブルを作成しないようにします。一時データなど、多数の小さなテーブルが必要な場合は、[Logエンジンファミリー](../../../engines/table-engines/log-family/index.md)の使用を検討してください。 -{/* このページの目次は、 - https://github.com/ClickHouse/clickhouse-docs/blob/main/scripts/autogenerate-table-of-contents.sh - によって、YAML フロントマターのフィールド(slug、description、title)から自動生成されています。 + -{/*AUTOGENERATED_START*/ } - -| Page | Description | -| ------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | -| [MergeTree テーブルエンジン](/engines/table-engines/mergetree-family/mergetree) | `MergeTree` ファミリーのテーブルエンジンは、高いデータ取り込みレートと大規模なデータ量に対応するよう設計されています。 | -| [Replicated* テーブルエンジン](/engines/table-engines/mergetree-family/replication) | ClickHouse における Replicated* ファミリーのテーブルエンジンを用いたデータレプリケーションの概要です。 | -| [カスタムパーティションキー](/engines/table-engines/mergetree-family/custom-partitioning-key) | MergeTree テーブルにカスタムパーティションキーを追加する方法を説明します。 | -| [ReplacingMergeTree テーブルエンジン](/engines/table-engines/mergetree-family/replacingmergetree) | MergeTree と異なり、同じソートキー値(`ORDER BY` 句で指定される列であり、`PRIMARY KEY` ではありません)を持つ重複したエントリを削除します。 | -| [CoalescingMergeTree テーブルエンジン](/engines/table-engines/mergetree-family/coalescingmergetree) | CoalescingMergeTree は MergeTree エンジンを継承しています。主な特徴は、パーツのマージ時に各列の最後の非 NULL 値を自動的に保存できることです。 | -| [SummingMergeTree テーブルエンジン](/engines/table-engines/mergetree-family/summingmergetree) | SummingMergeTree は MergeTree エンジンを継承しています。主な特徴は、パーツのマージ時に数値データを自動的に集計(合計)できることです。 | -| [AggregatingMergeTree テーブルエンジン](/engines/table-engines/mergetree-family/aggregatingmergetree) | 同じプライマリキー(より正確には、同じ [ソートキー](../../../engines/table-engines/mergetree-family/mergetree.md))を持つすべての行を、集約関数の状態を組み合わせて保存した 1 行(単一のデータパーツ内)に置き換えます。 | -| [CollapsingMergeTree テーブルエンジン](/engines/table-engines/mergetree-family/collapsingmergetree) | MergeTree を継承していますが、マージ処理中に行を折りたたむロジックが追加されています。 | -| [VersionedCollapsingMergeTree テーブルエンジン](/engines/table-engines/mergetree-family/versionedcollapsingmergetree) | 継続的に変化するオブジェクトの状態を高速に書き込み、古いオブジェクト状態をバックグラウンドで削除できるようにします。 | -| [GraphiteMergeTree テーブルエンジン](/engines/table-engines/mergetree-family/graphitemergetree) | Graphite データの間引きおよび集約・平均化(ロールアップ)のために設計されています。 | -| [Exact および Approximate Vector Search](/engines/table-engines/mergetree-family/annindexes) | Exact および Approximate Vector Search についてのドキュメントです。 | -| [テキストインデックスを使用した全文検索](/engines/table-engines/mergetree-family/invertedindexes) | テキスト内から検索語句を高速に見つけます。 | - -{/*AUTOGENERATED_END*/ } + + diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/mergetree.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/mergetree.md index a1f7a01e209..cb224663bc3 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/mergetree.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/mergetree.md @@ -1,8 +1,8 @@ --- -description: '`MergeTree` ファミリーのテーブルエンジンは、高いデータ取り込み速度と大量のデータを扱うために設計されています。' +description: '`MergeTree` ファミリーのテーブルエンジンは、高速なデータ取り込みと膨大なデータ量に対応するよう設計されています。' sidebar_label: 'MergeTree' sidebar_position: 11 -slug: /engines/table-engines/mergetree-family/mergetree +slug: /engines/table-engines/mergetree-family/mergettree title: 'MergeTree テーブルエンジン' doc_type: 'reference' --- @@ -13,28 +13,26 @@ import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; # MergeTree テーブルエンジン -`MergeTree` エンジンおよび `ReplacingMergeTree`、`AggregatingMergeTree` などの `MergeTree` ファミリーの他のエンジンは、ClickHouse で最も一般的に使用され、最も堅牢なテーブルエンジンです。 +`MergeTree` エンジンおよび `MergeTree` ファミリーの他のエンジン(例: `ReplacingMergeTree`、`AggregatingMergeTree`)は、ClickHouse で最も一般的に使用され、最も堅牢なテーブルエンジンです。 -`MergeTree` ファミリーのテーブルエンジンは、高いデータ取り込みレートと膨大なデータ量を扱えるように設計されています。 -INSERT 操作によりテーブルパーツが作成され、それらはバックグラウンドプロセスによって他のテーブルパーツとマージされます。 +`MergeTree` ファミリーのテーブルエンジンは、高いデータ取り込みレートと巨大なデータ量を扱えるように設計されています。 +`INSERT` 操作によりテーブルパーツが作成され、バックグラウンドプロセスによって他のテーブルパーツとマージされます。 -`MergeTree` ファミリーのテーブルエンジンの主な特長: +`MergeTree` ファミリーのテーブルエンジンの主な特徴は次のとおりです。 -- テーブルの主キーは、各テーブルパーツ内のソート順(クラスタ化インデックス)を決定します。主キーは個々の行ではなく、グラニュールと呼ばれる 8192 行のブロックを参照します。これにより、巨大なデータセットの主キーであっても主メモリに常駐できる程度に小さく保たれつつ、ディスク上のデータへの高速アクセスが可能になります。 +- テーブルの主キーは、各テーブルパーツ内でのソート順(クラスタ化インデックス)を決定します。主キーは個々の行ではなく、グラニュールと呼ばれる 8192 行のブロックを参照します。これにより、巨大なデータセットに対しても主キーをメインメモリに常駐できる程度の小ささに保ちながら、ディスク上のデータへ高速にアクセスできます。 -- テーブルは任意のパーティション式を用いてパーティション分割できます。パーティションプルーニングにより、クエリが許す場合は読み取り対象からパーティションが除外されます。 +- テーブルは任意のパーティション式でパーティション分割できます。パーティションプルーニングにより、クエリ条件に応じて読み取り対象からパーティションを除外できます。 -- 高可用性、フェイルオーバー、およびゼロダウンタイムでのアップグレードのために、複数のクラスタノード間でデータをレプリケートできます。詳細は [Data replication](/engines/table-engines/mergetree-family/replication.md) を参照してください。 +- 可用性の向上、フェイルオーバー、およびゼロダウンタイムでのアップグレードのために、データを複数のクラスタノード間でレプリケートできます。詳しくは [Data replication](/engines/table-engines/mergetree-family/replication.md) を参照してください。 -- `MergeTree` テーブルエンジンは、クエリ最適化を支援するために、さまざまな統計情報の種類とサンプリング手法をサポートします。 +- `MergeTree` テーブルエンジンは、クエリ最適化に役立つさまざまな種類の統計情報とサンプリング手法をサポートします。 :::note 名前は似ていますが、[Merge](/engines/table-engines/special/merge) エンジンは `*MergeTree` エンジンとは異なります。 ::: - - -## テーブルの作成 {#table_engine-mergetree-creating-a-table} +## テーブルの作成 ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -59,197 +57,196 @@ ORDER BY expr [SETTINGS name = value, ...] ``` -パラメータの詳細については、[CREATE TABLE](/sql-reference/statements/create/table.md)文を参照してください。 +パラメータの詳細については、[CREATE TABLE](/sql-reference/statements/create/table.md) ステートメントを参照してください。 -### クエリ句 {#mergetree-query-clauses} -#### ENGINE {#engine} +### クエリ構文 \{#mergetree-query-clauses\} -`ENGINE` — エンジンの名前とパラメータ。`ENGINE = MergeTree()`。`MergeTree`エンジンにはパラメータがありません。 +#### ENGINE \{#engine\} -#### ORDER BY {#order_by} +`ENGINE` — エンジンの名前とパラメータを指定します。`ENGINE = MergeTree()`。`MergeTree` エンジンにはパラメータがありません。 -`ORDER BY` — ソートキー。 +#### ORDER BY \{#order_by\} -カラム名または任意の式のタプル。例: `ORDER BY (CounterID + 1, EventDate)`。 +`ORDER BY` — ソートキーです。 -プライマリキーが定義されていない場合(つまり`PRIMARY KEY`が指定されていない場合)、ClickHouseはソートキーをプライマリキーとして使用します。 +カラム名または任意の式のタプルを指定します。例: `ORDER BY (CounterID + 1, EventDate)`。 -ソートが不要な場合は、`ORDER BY tuple()`という構文を使用できます。 -または、設定`create_table_empty_primary_key_by_default`が有効になっている場合、`ORDER BY ()`が`CREATE TABLE`文に暗黙的に追加されます。[プライマリキーの選択](#selecting-a-primary-key)を参照してください。 +`PRIMARY KEY` が定義されていない場合(つまり `PRIMARY KEY` が指定されていない場合)、ClickHouse はそのソートキーをプライマリキーとして使用します。 -#### PARTITION BY {#partition-by} +ソートが不要な場合は、`ORDER BY tuple()` 構文を使用できます。 +また、設定 `create_table_empty_primary_key_by_default` が有効な場合、`ORDER BY ()` が `CREATE TABLE` 文に暗黙的に追加されます。[プライマリキーの選択](#selecting-a-primary-key) を参照してください。 -`PARTITION BY` — [パーティショニングキー](/engines/table-engines/mergetree-family/custom-partitioning-key.md)。オプション。ほとんどの場合、パーティションキーは不要です。パーティション分割が必要な場合でも、通常は月単位よりも細かいパーティションキーは必要ありません。パーティション分割はクエリを高速化しません(ORDER BY式とは対照的です)。過度に細かいパーティション分割は決して使用しないでください。クライアント識別子や名前でデータをパーティション分割しないでください(代わりに、クライアント識別子や名前をORDER BY式の最初のカラムにしてください)。 +#### PARTITION BY \{#partition-by\} -月単位でパーティション分割するには、`toYYYYMM(date_column)`式を使用します。ここで`date_column`は[Date](/sql-reference/data-types/date.md)型の日付を持つカラムです。この場合のパーティション名は`"YYYYMM"`形式になります。 +`PARTITION BY` — [パーティションキー](/engines/table-engines/mergetree-family/custom-partitioning-key.md)。省略可能です。ほとんどの場合、パーティションキーは不要であり、パーティション分割が必要な場合でも、通常は月単位より細かい粒度のパーティションキーは必要ありません。パーティション分割は(ORDER BY 式とは対照的に)クエリを高速化しません。パーティションは決して細かくしすぎないでください。データをクライアント識別子や名前でパーティション分割しないでください(その代わりに、クライアント識別子または名前を ORDER BY 式の先頭のカラムにしてください)。 -#### PRIMARY KEY {#primary-key} +月単位でパーティション分割するには、`toYYYYMM(date_column)` 式を使用します。ここで、`date_column` は [Date](/sql-reference/data-types/date.md) 型の日付を保持するカラムです。この場合のパーティション名は `"YYYYMM"` 形式になります。 -`PRIMARY KEY` — [ソートキーと異なる](#choosing-a-primary-key-that-differs-from-the-sorting-key)場合のプライマリキー。オプション。 +#### PRIMARY KEY \{#primary-key\} -ソートキーを指定すると(`ORDER BY`句を使用)、暗黙的にプライマリキーが指定されます。 -通常、ソートキーに加えてプライマリキーを指定する必要はありません。 +`PRIMARY KEY` — [ソートキーと異なる場合](#choosing-a-primary-key-that-differs-from-the-sorting-key)に指定するプライマリキーです。省略可能です。 -#### SAMPLE BY {#sample-by} +ソートキー(`ORDER BY` 句)を指定すると、暗黙的にプライマリキーも指定されます。 +通常、ソートキーとは別にプライマリキーを指定する必要はありません。 -`SAMPLE BY` — サンプリング式。オプション。 +#### SAMPLE BY \{#sample-by\} -指定する場合は、プライマリキーに含まれている必要があります。 -サンプリング式は符号なし整数を返す必要があります。 +`SAMPLE BY` — サンプリング用の式です。省略可能です。 -例: `SAMPLE BY intHash32(UserID) ORDER BY (CounterID, EventDate, intHash32(UserID))`。 +指定する場合は、主キーに含まれている必要があります。 +サンプリング式は符号なし整数値を返さなければなりません。 -#### TTL {#ttl} +例: `SAMPLE BY intHash32(UserID) ORDER BY (CounterID, EventDate, intHash32(UserID))`. -`TTL` — 行の保存期間と[ディスクとボリューム間](#table_engine-mergetree-multiple-volumes)での自動パーツ移動のロジックを指定するルールのリスト。オプション。 +#### TTL \{#ttl\} -式は`Date`または`DateTime`を返す必要があります。例: `TTL date + INTERVAL 1 DAY`。 +`TTL` — 行の保存期間と、[ディスクおよびボリューム間](#table_engine-mergetree-multiple-volumes)の自動的なパーツ移動ロジックを指定するルールのリストです。省略可能です。 +式は `Date` または `DateTime` 型の値を返す必要があります。例: `TTL date + INTERVAL 1 DAY`。 -ルール `DELETE|TO DISK 'xxx'|TO VOLUME 'xxx'|GROUP BY` のタイプは、式が満たされた場合(現在時刻に達した場合)にパートに対して実行されるアクションを指定します:期限切れ行の削除、パートの移動(パート内のすべての行で式が満たされた場合)を指定されたディスク(`TO DISK 'xxx'`)またはボリューム(`TO VOLUME 'xxx'`)へ、または期限切れ行の値の集約です。ルールのデフォルトタイプは削除(`DELETE`)です。複数のルールのリストを指定できますが、`DELETE` ルールは1つまでです。 +ルール種別 `DELETE|TO DISK 'xxx'|TO VOLUME 'xxx'|GROUP BY` は、式が満たされた(現在時刻に達した)ときにそのパーツに対して実行されるアクションを指定します。具体的には、有効期限切れの行の削除、パーツ内のすべての行に対して式が満たされている場合にそのパーツを指定したディスク(`TO DISK 'xxx'`)またはボリューム(`TO VOLUME 'xxx'`)へ移動すること、あるいは有効期限切れの行の値を集約することです。ルールのデフォルト種別は削除(`DELETE`)です。複数のルールを指定できますが、`DELETE` ルールは 1 つまでにする必要があります。 -詳細については、[カラムとテーブルのTTL](#table_engine-mergetree-ttl)を参照してください。 +詳細については、[カラムおよびテーブルの TTL](#table_engine-mergetree-ttl) を参照してください。 -#### SETTINGS {#settings} +#### 設定 -[MergeTree設定](../../../operations/settings/merge-tree-settings.md)を参照してください。 +[MergeTree Settings](../../../operations/settings/merge-tree-settings.md) を参照してください。 -**セクション設定の例** +**Sections 設定の例** ```sql ENGINE MergeTree() PARTITION BY toYYYYMM(EventDate) ORDER BY (CounterID, EventDate, intHash32(UserID)) SAMPLE BY intHash32(UserID) SETTINGS index_granularity=8192 ``` -この例では、月ごとのパーティショニングを設定しています。 +この例では、パーティションを月単位で設定しています。 -また、ユーザーIDによるハッシュとしてサンプリング用の式を設定しています。これにより、各`CounterID`と`EventDate`に対してテーブル内のデータを疑似ランダム化できます。データを選択する際に[SAMPLE](/sql-reference/statements/select/sample)句を定義すると、ClickHouseはユーザーのサブセットに対して均等に疑似ランダムなデータサンプルを返します。 +また、ユーザー ID をハッシュ化したものをサンプリング用の式として設定しています。これにより、テーブル内のデータを各 `CounterID` と `EventDate` ごとに擬似乱数的に分散させることができます。データを選択する際に [SAMPLE](/sql-reference/statements/select/sample) 句を指定すると、ClickHouse はユーザーのサブセットに対して偏りの少ない擬似乱数サンプルデータを返します。 -`index_granularity`設定は、8192がデフォルト値であるため省略できます。 +`index_granularity` 設定は省略できます。デフォルト値が 8192 のためです。
+ テーブル作成の非推奨メソッド -非推奨のテーブル作成方法 + :::note + 新しいプロジェクトではこの方法を使用しないでください。可能であれば、既存のプロジェクトも上記で説明した方法に切り替えてください。 + ::: -:::note -新しいプロジェクトではこの方法を使用しないでください。可能であれば、古いプロジェクトを上記の方法に切り替えてください。 -::: + ```sql + CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] + ( + name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1], + name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2], + ... + ) ENGINE [=] MergeTree(date-column [, sampling_expression], (primary, key), index_granularity) + ``` -```sql -CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] -( - name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1], - name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2], - ... -) ENGINE [=] MergeTree(date-column [, sampling_expression], (primary, key), index_granularity) -``` - -**MergeTree()パラメータ** + **MergeTree() のパラメータ** -- `date-column` — [Date](/sql-reference/data-types/date.md)型のカラムの名前。ClickHouseはこのカラムに基づいて月ごとのパーティションを自動的に作成します。パーティション名は`"YYYYMM"`形式です。 -- `sampling_expression` — サンプリング用の式。 -- `(primary, key)` — プライマリキー。型: [Tuple()](/sql-reference/data-types/tuple.md) -- `index_granularity` — インデックスの粒度。インデックスの「マーク」間のデータ行数。ほとんどのタスクでは8192の値が適切です。 + * `date-column` — [Date](/sql-reference/data-types/date.md) 型のカラム名。ClickHouse はこのカラムに基づいて自動的に月ごとのパーティションを作成します。パーティション名は `"YYYYMM"` 形式になります。 + * `sampling_expression` — サンプリング用の式。 + * `(primary, key)` — 主キー。型: [Tuple()](/sql-reference/data-types/tuple.md) + * `index_granularity` — インデックスの粒度。インデックスの「マーク」間のデータ行数。8192 という値はほとんどのユースケースに適しています。 -**例** + **例** -```sql -MergeTree(EventDate, intHash32(UserID), (CounterID, EventDate, intHash32(UserID)), 8192) -``` - -`MergeTree`エンジンは、メインエンジン設定方法の上記の例と同じ方法で設定されます。 + ```sql + MergeTree(EventDate, intHash32(UserID), (CounterID, EventDate, intHash32(UserID)), 8192) + ``` + `MergeTree` エンジンは、メインのエンジン構成方法について上記の例と同様に設定されます。
-## データストレージ {#mergetree-data-storage} - -テーブルは、プライマリキーでソートされたデータパートで構成されます。 +## データストレージ \{#mergetree-data-storage\} -テーブルにデータが挿入されると、個別のデータパートが作成され、それぞれがプライマリキーで辞書順にソートされます。例えば、プライマリキーが`(CounterID, Date)`の場合、パート内のデータは`CounterID`でソートされ、各`CounterID`内では`Date`で順序付けられます。 +テーブルは、主キーでソートされたデータパーツから構成されます。 -異なるパーティションに属するデータは、異なるパートに分離されます。ClickHouseはバックグラウンドで、より効率的なストレージのためにデータパートをマージします。異なるパーティションに属するパートはマージされません。マージメカニズムは、同じプライマリキーを持つすべての行が同じデータパートに存在することを保証しません。 +テーブルにデータが挿入されると、個別のデータパーツが作成され、それぞれが主キーに従って辞書順でソートされます。たとえば、主キーが `(CounterID, Date)` の場合、そのパーツ内のデータはまず `CounterID` でソートされ、各 `CounterID` の範囲内では `Date` の順に並びます。 -データパートは`Wide`または`Compact`形式で保存できます。`Wide`形式では、各カラムがファイルシステム内の個別のファイルに保存され、`Compact`形式ではすべてのカラムが1つのファイルに保存されます。`Compact`形式は、小規模で頻繁な挿入のパフォーマンスを向上させるために使用できます。 +異なるパーティションに属するデータは、異なるパーツに分離されます。バックグラウンドで ClickHouse は、より効率的に保存できるようにデータパーツをマージします。異なるパーティションに属するパーツはマージされません。マージの仕組みは、同じ主キーを持つすべての行が同じデータパーツ内に配置されることを保証しません。 -データ保存形式は、テーブルエンジンの`min_bytes_for_wide_part`および`min_rows_for_wide_part`設定によって制御されます。データパート内のバイト数または行数が対応する設定値より少ない場合、パートは`Compact`形式で保存されます。それ以外の場合は`Wide`形式で保存されます。これらの設定がいずれも設定されていない場合、データパートは`Wide`形式で保存されます。 +データパーツは `Wide` または `Compact` フォーマットで保存できます。`Wide` フォーマットでは各カラムがファイルシステム上の別々のファイルに保存され、`Compact` フォーマットではすべてのカラムが 1 つのファイルに保存されます。`Compact` フォーマットは、小さなデータの頻繁な挿入時のパフォーマンス向上に利用できます。 -各データパートは論理的にグラニュールに分割されます。グラニュールは、ClickHouseがデータを選択する際に読み取る最小の不可分なデータセットです。ClickHouseは行や値を分割しないため、各グラニュールには常に整数個の行が含まれます。グラニュールの最初の行には、その行のプライマリキーの値がマークされます。各データパートに対して、ClickHouseはマークを保存するインデックスファイルを作成します。各カラムについて、プライマリキーに含まれるかどうかに関わらず、ClickHouseは同じマークを保存します。これらのマークにより、カラムファイル内のデータを直接検索できます。 +データの保存形式は、テーブルエンジンの `min_bytes_for_wide_part` および `min_rows_for_wide_part` 設定によって制御されます。データパーツ内のバイト数または行数が対応する設定値より小さい場合、そのパーツは `Compact` フォーマットで保存されます。そうでない場合は `Wide` フォーマットで保存されます。これらの設定がどちらも指定されていない場合、データパーツは `Wide` フォーマットで保存されます。 -グラニュールのサイズは、テーブルエンジンの`index_granularity`および`index_granularity_bytes`設定によって制限されます。グラニュール内の行数は、行のサイズに応じて`[1, index_granularity]`の範囲内にあります。単一行のサイズが設定値より大きい場合、グラニュールのサイズは`index_granularity_bytes`を超えることがあります。この場合、グラニュールのサイズは行のサイズと等しくなります。 +各データパーツは論理的にグラニュールに分割されます。グラニュールは、ClickHouse がデータを選択する際に読み取る最小の不可分なデータ集合です。ClickHouse は行や値を分割しないため、各グラニュールは常に整数個の行を含みます。グラニュールの先頭行には、その行の主キーの値によってマークが付けられます。各データパーツごとに、ClickHouse はこれらのマークを保存するインデックスファイルを作成します。各カラムに対して、主キーに含まれるかどうかに関わらず、ClickHouse は同じマークも保存します。これらのマークによって、カラムファイル内のデータを直接特定できます。 +グラニュールサイズは、テーブルエンジンの `index_granularity` および `index_granularity_bytes` 設定によって制限されます。グラニュール内の行数は、行のサイズに応じて `[1, index_granularity]` の範囲になります。単一行のサイズが設定値より大きい場合、グラニュールのサイズは `index_granularity_bytes` を超えることがあります。この場合、グラニュールのサイズはその行のサイズと等しくなります。 -## クエリにおける主キーとインデックス {#primary-keys-and-indexes-in-queries} +## クエリにおける主キーとインデックス -`(CounterID, Date)` という主キーを例に取ります。この場合、ソートとインデックスは次のように図示できます: +例として、主キー `(CounterID, Date)` を取り上げます。この場合、並び順とインデックスは次のように示されます。 ```text -Whole data: [---------------------------------------------] +全データ: [---------------------------------------------] CounterID: [aaaaaaaaaaaaaaaaaabbbbcdeeeeeeeeeeeeefgggggggghhhhhhhhhiiiiiiiiikllllllll] Date: [1111111222222233331233211111222222333211111112122222223111112223311122333] -Marks: | | | | | | | | | | | +マーク: | | | | | | | | | | | a,1 a,2 a,3 b,3 e,2 e,3 g,1 h,2 i,1 i,3 l,3 -Marks numbers: 0 1 2 3 4 5 6 7 8 9 10 +マーク番号: 0 1 2 3 4 5 6 7 8 9 10 ``` -データクエリが次のように指定された場合: +データクエリが次のように指定されている場合: + +* `CounterID in ('a', 'h')` の場合、サーバーはマーク範囲 `[0, 3)` および `[6, 8)` のデータを読み込みます。 +* `CounterID IN ('a', 'h') AND Date = 3` の場合、サーバーはマーク範囲 `[1, 3)` および `[7, 8)` のデータを読み込みます。 +* `Date = 3` の場合、サーバーはマーク範囲 `[1, 10]` のデータを読み込みます。 -- `CounterID in ('a', 'h')` の場合、サーバーはマーク `[0, 3)` および `[6, 8)` の範囲のデータを読み取ります。 -- `CounterID IN ('a', 'h') AND Date = 3` の場合、サーバーはマーク `[1, 3)` および `[7, 8)` の範囲のデータを読み取ります。 -- `Date = 3` の場合、サーバーはマーク `[1, 10]` の範囲のデータを読み取ります。 +上記の例から、常にフルスキャンよりもインデックスを使用する方が効率的であることがわかります。 -上記の例は、フルスキャンよりもインデックスを使用する方が常に効果的であることを示しています。 +疎なインデックスでは、追加のデータが読み込まれることがあります。主キーの単一の範囲を読み込む場合、各データブロックで最大 `index_granularity * 2` 行まで余分な行が読み込まれる可能性があります。 -スパースインデックスでは、余分なデータが読み取られることがあります。主キーの単一範囲を読み取る際、各データブロックで最大 `index_granularity * 2` 行の余分な行が読み取られる可能性があります。 +疎なインデックスを使用すると、非常に多くのテーブル行を扱うことができます。ほとんどの場合、このようなインデックスはコンピュータの RAM に収まるためです。 -スパースインデックスを使用すると、非常に多数のテーブル行を扱うことができます。これは、ほとんどの場合、このようなインデックスがコンピュータのRAMに収まるためです。 +ClickHouse では、一意なプライマリキーは不要です。同じプライマリキーを持つ複数の行を挿入できます。 -ClickHouseは一意な主キーを必要としません。同じ主キーを持つ複数の行を挿入できます。 +`PRIMARY KEY` および `ORDER BY` 句では `Nullable` 型の式を使用できますが、これは強く非推奨です。この機能を許可するには、[allow_nullable_key](/operations/settings/merge-tree-settings/#allow_nullable_key) 設定を有効にします。`ORDER BY` 句での `NULL` 値には、[NULLS_LAST](/sql-reference/statements/select/order-by.md/#sorting-of-special-values) の原則が適用されます。 -`PRIMARY KEY` および `ORDER BY` 句で `Nullable` 型の式を使用できますが、強く非推奨です。この機能を有効にするには、[allow_nullable_key](/operations/settings/merge-tree-settings/#allow_nullable_key) 設定をオンにしてください。`ORDER BY` 句における `NULL` 値には [NULLS_LAST](/sql-reference/statements/select/order-by.md/#sorting-of-special-values) の原則が適用されます。 -### 主キーの選択 {#selecting-a-primary-key} +### 主キーの選択 \{#selecting-a-primary-key\} -主キーの列数に明示的な制限はありません。データ構造に応じて、主キーに含める列を増減できます。これにより次のような効果が得られる可能性があります: +主キーに含める列数には明確な制限はありません。データ構造に応じて、主キーに含める列を増やしたり減らしたりできます。これにより次の効果が得られる可能性があります。 -- インデックスのパフォーマンスを向上させる。 +- インデックスのパフォーマンスが向上する。 - 主キーが `(a, b)` の場合、次の条件が満たされていれば、別の列 `c` を追加することでパフォーマンスが向上します: - - 列 `c` に対する条件を持つクエリが存在する。 - - `(a, b)` の値が同一である長いデータ範囲(`index_granularity` の数倍の長さ)が一般的である。言い換えれば、別の列を追加することで、かなり長いデータ範囲をスキップできる場合。 + 主キーが `(a, b)` の場合に、さらに列 `c` を追加すると、次の条件が満たされるときにパフォーマンスが向上します。 -- データ圧縮を向上させる。 + - 列 `c` に条件を持つクエリが存在する。 + - `(a, b)` の値が同一である長いデータ範囲(`index_granularity` の数倍の長さ)がよく現れる。言い換えると、列を追加することで、かなり長いデータ範囲をスキップできる場合です。 - ClickHouseは主キーでデータをソートするため、一貫性が高いほど圧縮率が向上します。 +- データ圧縮が向上する。 -- [CollapsingMergeTree](/engines/table-engines/mergetree-family/collapsingmergetree) および [SummingMergeTree](/engines/table-engines/mergetree-family/summingmergetree.md) エンジンでデータパーツをマージする際に追加のロジックを提供する。 + ClickHouse はデータを主キーでソートして保存するため、データの並びの一貫性が高いほど圧縮率が向上します。 - この場合、主キーとは異なる_ソートキー_を指定することが理にかなっています。 +- [CollapsingMergeTree](/engines/table-engines/mergetree-family/collapsingmergetree) および [SummingMergeTree](/engines/table-engines/mergetree-family/summingmergetree.md) エンジンでデータパーツをマージする際に、追加のロジックを提供できる。 -長い主キーは挿入パフォーマンスとメモリ消費に悪影響を及ぼしますが、主キーの余分な列は `SELECT` クエリ実行時のClickHouseのパフォーマンスには影響しません。 + この場合、主キーとは異なる *sorting key* を指定することが有効です。 -`ORDER BY tuple()` 構文を使用して、主キーなしでテーブルを作成できます。この場合、ClickHouseはデータを挿入順に格納します。`INSERT ... SELECT` クエリでデータを挿入する際にデータの順序を保持したい場合は、[max_insert_threads = 1](/operations/settings/settings#max_insert_threads) を設定してください。 +長い主キーは挿入パフォーマンスやメモリ消費に悪影響を及ぼしますが、主キーに余分な列があっても、`SELECT` クエリ時の ClickHouse のパフォーマンスには影響しません。 -初期順序でデータを選択するには、[シングルスレッド](/operations/settings/settings.md/#max_threads)の `SELECT` クエリを使用してください。 +`ORDER BY tuple()` 構文を使うことで、主キーなしのテーブルを作成できます。この場合、ClickHouse はデータを挿入順に保存します。`INSERT ... SELECT` クエリで挿入時のデータ順序を保持したい場合は、[max_insert_threads = 1](/operations/settings/settings#max_insert_threads) を設定してください。 -### ソートキーとは異なる主キーの選択 {#choosing-a-primary-key-that-differs-from-the-sorting-key} +挿入時の順序でデータを取得するには、[single-threaded](/operations/settings/settings.md/#max_threads) な `SELECT` クエリを使用します。 +### 並べ替えキーと異なる主キーを選択する \{#choosing-a-primary-key-that-differs-from-the-sorting-key\} -プライマリキー(各マークに対してインデックスファイルに書き込まれる値の式)を、ソートキー(データパート内の行をソートするための式)とは異なるものとして指定することができます。この場合、プライマリキー式のタプルは、ソートキー式のタプルの接頭辞である必要があります。 +主キー(各マークごとのインデックスファイルに書き込まれる値を持つ式)は、並べ替えキー(データパーツ内の行を並べ替えるための式)とは異なるものを指定できます。この場合、主キーの式タプルは、並べ替えキーの式タプルのプレフィックスでなければなりません。 -この機能は、[SummingMergeTree](/engines/table-engines/mergetree-family/summingmergetree.md)および[AggregatingMergeTree](/engines/table-engines/mergetree-family/aggregatingmergetree.md)テーブルエンジンを使用する際に有用です。これらのエンジンを使用する一般的なケースでは、テーブルには2種類のカラムがあります:_ディメンション_と_メジャー_です。典型的なクエリは、任意の`GROUP BY`でメジャーカラムの値を集計し、ディメンションでフィルタリングします。SummingMergeTreeとAggregatingMergeTreeは、ソートキーの値が同じ行を集計するため、すべてのディメンションをソートキーに追加することが自然です。その結果、キー式は長いカラムのリストで構成され、このリストは新しく追加されるディメンションで頻繁に更新する必要があります。 +この機能は [SummingMergeTree](/engines/table-engines/mergetree-family/summingmergetree.md) および +[AggregatingMergeTree](/engines/table-engines/mergetree-family/aggregatingmergetree.md) テーブルエンジンを使用する際に有用です。これらのエンジンを利用する一般的なケースでは、テーブルには 2 種類のカラム、つまり *dimensions* と *measures* があります。典型的なクエリでは、任意の `GROUP BY` を用いて measure カラムの値を集約し、dimensions でフィルタリングします。SummingMergeTree と AggregatingMergeTree は並べ替えキーの値が同一の行を集約するため、すべての dimensions を並べ替えキーに含めるのが自然です。その結果、キー式は多数のカラムから成る長いリストとなり、新たな dimensions を追加するたびにこのリストを頻繁に更新しなければなりません。 -この場合、効率的な範囲スキャンを提供する少数のカラムのみをプライマリキーに残し、残りのディメンションカラムをソートキーのタプルに追加することが合理的です。 +このような場合、効率的なレンジスキャンを行うために必要な少数のカラムだけを主キーに残し、残りの dimension カラムを並べ替えキーのタプルに追加するのが理にかなっています。 -ソートキーの[ALTER](/sql-reference/statements/alter/index.md)は軽量な操作です。新しいカラムがテーブルとソートキーに同時に追加される際、既存のデータパートを変更する必要がないためです。古いソートキーが新しいソートキーの接頭辞であり、新しく追加されたカラムにはデータが存在しないため、テーブル変更の時点でデータは古いソートキーと新しいソートキーの両方でソートされています。 +並べ替えキーの [ALTER](/sql-reference/statements/alter/index.md) は軽量な操作です。新しいカラムがテーブルおよび並べ替えキーに同時に追加される場合、既存のデータパーツを変更する必要がないためです。古い並べ替えキーが新しい並べ替えキーのプレフィックスであり、新しく追加されたカラムにはデータが存在しないので、テーブルを変更した時点では、データは古い並べ替えキーと新しい並べ替えキーの両方に従って並べ替えられていることになります。 -### クエリにおけるインデックスとパーティションの使用 {#use-of-indexes-and-partitions-in-queries} +### クエリにおけるインデックスとパーティションの利用 -`SELECT`クエリに対して、ClickHouseはインデックスが使用可能かどうかを分析します。`WHERE/PREWHERE`句に、等価または不等価比較演算を表す式(結合要素の1つとして、または全体として)がある場合、またはプライマリキーまたはパーティショニングキーに含まれるカラムや式、あるいはこれらのカラムの特定の部分的反復関数、またはこれらの式の論理関係に対して、固定接頭辞を持つ`IN`または`LIKE`がある場合、インデックスを使用できます。 +`SELECT` クエリに対して、ClickHouse はインデックスを利用できるかどうかを解析して判断します。`WHERE/PREWHERE` 句に、等価比較または不等価比較の演算(連言要素の 1 つ、もしくは式全体)を表す式が含まれている場合、あるいは、プライマリキーまたはパーティションキーに含まれる列や式、それらの列に対する特定の部分的に反復的な関数、さらにそれらの式同士の論理関係に対して、固定プレフィックスを伴う `IN` または `LIKE` が含まれている場合、インデックスを使用できます。 -したがって、プライマリキーの1つまたは複数の範囲に対してクエリを高速に実行することができます。この例では、特定のトラッキングタグ、特定のタグと日付範囲、特定のタグと日付、日付範囲を持つ複数のタグなどに対してクエリを実行する場合に高速になります。 +そのため、プライマリキーの 1 つまたは複数の範囲に対してクエリを高速に実行できます。この例では、特定のトラッキングタグ、特定のタグと日付範囲、特定のタグと特定の日付、複数のタグと日付範囲などに対するクエリは高速に実行されます。 -次のように設定されたエンジンを見てみましょう: +次のように設定されたエンジンを見てみましょう。 ```sql ENGINE MergeTree() @@ -258,7 +255,7 @@ ORDER BY (CounterID, EventDate) SETTINGS index_granularity=8192 ``` -この場合、以下のクエリにおいて: +この場合、クエリは次のようになります: ```sql SELECT count() FROM table @@ -276,42 +273,42 @@ AND CounterID IN (101500, 731962, 160656) AND (CounterID = 101500 OR EventDate != toDate('2014-05-01')) ``` -ClickHouseは、プライマリキーインデックスを使用して不適切なデータを削減し、月次パーティショニングキーを使用して不適切な日付範囲のパーティションを削減します。 +ClickHouse は、プライマリキーインデックスを使用して不適切なデータを除外し、月単位のパーティショニングキーを使用して不適切な日付範囲にあるパーティションを除外します。 -上記のクエリは、複雑な式に対してもインデックスが使用されることを示しています。テーブルからの読み取りは、インデックスの使用がフルスキャンよりも遅くならないように構成されています。 +上記のクエリは、複雑な式に対してもインデックスが使用されることを示しています。テーブルからの読み取り処理は、インデックスを使用してもフルスキャンより遅くならないように設計されています。 -以下の例では、インデックスを使用できません。 +次の例では、インデックスを利用できません。 ```sql SELECT count() FROM table WHERE CounterID = 34 OR URL LIKE '%upyachka%' ``` -クエリ実行時にClickHouseがインデックスを使用できるかどうかを確認するには、[force_index_by_date](/operations/settings/settings.md/#force_index_by_date)および[force_primary_key](/operations/settings/settings#force_primary_key)設定を使用してください。 +クエリ実行時に ClickHouse がインデックスを利用できるかどうかを確認するには、設定 [force_index_by_date](/operations/settings/settings.md/#force_index_by_date) と [force_primary_key](/operations/settings/settings#force_primary_key) を使用します。 -月次パーティショニングのキーにより、適切な範囲の日付を含むデータブロックのみを読み取ることができます。この場合、データブロックには多数の日付(最大で1か月全体)のデータが含まれる可能性があります。ブロック内では、データはプライマリキーでソートされており、プライマリキーの最初のカラムに日付が含まれていない場合があります。このため、プライマリキーの接頭辞を指定しない日付条件のみを使用するクエリでは、単一の日付に対するよりも多くのデータが読み取られることになります。 +月単位のパーティションキーは、指定した範囲に含まれる日付を持つデータブロックだけを読み取れるようにします。この場合、データブロックには多数の日付(最大で 1 か月分)に対応するデータが含まれている可能性があります。ブロック内ではデータは主キーでソートされていますが、主キーの先頭の列として日付が含まれていない場合があります。そのため、主キーのプレフィックスを指定せずに日付条件のみを含むクエリを使用すると、単一の日付だけを対象とする場合よりも多くのデータを読み取ることになります。 -### 部分的に単調なプライマリキーに対するインデックスの使用 {#use-of-index-for-partially-monotonic-primary-keys} +### 部分的に単調な主キーに対するインデックスの利用 \{#use-of-index-for-partially-monotonic-primary-keys\} -例えば、月の日付を考えてみましょう。これらは1か月の間は[単調数列](https://en.wikipedia.org/wiki/Monotonic_function)を形成しますが、より長い期間では単調ではありません。これは部分的単調数列です。ユーザーが部分的単調プライマリキーを持つテーブルを作成すると、ClickHouseは通常通りスパースインデックスを作成します。ユーザーがこの種のテーブルからデータを選択すると、ClickHouseはクエリ条件を分析します。ユーザーがインデックスの2つのマーク間のデータを取得したい場合で、両方のマークが1か月以内に収まる場合、ClickHouseはこの特定のケースでインデックスを使用できます。これは、クエリのパラメータとインデックスマーク間の距離を計算できるためです。 +例として、月の日付を考えてみます。1 か月の中では [単調な数列](https://en.wikipedia.org/wiki/Monotonic_function) を形成しますが、より長い期間では単調ではありません。これは部分的に単調な数列です。ユーザーが部分的に単調な主キーでテーブルを作成した場合、ClickHouse は通常どおりスパースインデックスを作成します。ユーザーがこの種のテーブルからデータを `SELECT` する際、ClickHouse はクエリ条件を解析します。ユーザーがインデックスの 2 つのマークの間のデータを取得しようとしており、その両方のマークが同じ 1 か月の範囲内に収まる場合、ClickHouse はこの特定のケースではインデックスを利用できます。これは、クエリパラメータとインデックスマークとの距離を計算できるためです。 -クエリパラメータ範囲内のプライマリキーの値が単調数列を表さない場合、ClickHouseはインデックスを使用できません。この場合、ClickHouseはフルスキャン方式を使用します。 +クエリのパラメータ範囲内に含まれる主キーの値が単調な数列を表さない場合、ClickHouse はインデックスを利用できません。この場合、ClickHouse はフルスキャンを行います。 -ClickHouseはこのロジックを月の日付の数列だけでなく、部分的単調数列を表すあらゆるプライマリキーに対して使用します。 +ClickHouse は、このロジックを月の日付の数列に対してだけでなく、部分的に単調な数列を表すあらゆる主キーに対しても適用します。 -### データスキップインデックス {#table_engine-mergetree-data_skipping-indexes} +### データスキップインデックス -インデックス宣言は`CREATE`クエリのカラムセクションに記述します。 +インデックスの宣言は、`CREATE` クエリのカラム定義セクション内に記述します。 ```sql INDEX index_name expr TYPE type(...) [GRANULARITY granularity_value] ``` -`*MergeTree`ファミリーのテーブルでは、データスキップインデックスを指定できます。 +`*MergeTree` ファミリーのテーブルでは、データスキップインデックスを指定できます。 -これらのインデックスは、`granularity_value`個のグラニュール(グラニュールのサイズはテーブルエンジンの`index_granularity`設定で指定されます)で構成されるブロック上の指定された式に関する情報を集約します。その後、これらの集約は`SELECT`クエリで使用され、`where`句を満たさない大きなデータブロックをスキップすることで、ディスクから読み取るデータ量を削減します。 +これらのインデックスは、ブロック上で指定された式に関する情報の一部を集約します。ブロックは `granularity_value` 個のグラニュールから構成されます(グラニュールのサイズはテーブルエンジンの `index_granularity` 設定で指定します)。その後、これらの集約値は `SELECT` クエリの実行時に使用され、`WHERE` 句の条件を満たし得ない大きなデータブロックをスキップすることで、ディスクから読み取るデータ量を削減します。 -`GRANULARITY`句は省略可能で、`granularity_value`のデフォルト値は1です。 +`GRANULARITY` 句は省略可能であり、`granularity_value` のデフォルト値は 1 です。 **例** @@ -329,7 +326,7 @@ CREATE TABLE table_name ... ``` -この例のインデックスは、以下のクエリでディスクから読み取るデータ量を削減するためにClickHouseで使用できます: +サンプルで定義したインデックスは、以下のクエリでは ClickHouse がディスクから読み取るデータ量を減らすために利用できます。 ```sql SELECT count() FROM table WHERE u64 == 10; @@ -337,7 +334,7 @@ SELECT count() FROM table WHERE u64 * i32 >= 1234 SELECT count() FROM table WHERE u64 * length(s) == 1234 ``` -データスキップインデックスは複合カラムに対しても作成できます: +データスキップインデックスは複合列にも作成できます: ```sql -- Map型のカラムに対して: @@ -353,90 +350,93 @@ INDEX nested_1_index col.nested_col1 TYPE bloom_filter INDEX nested_2_index col.nested_col2 TYPE bloom_filter ``` -### スキップインデックスの種類 {#skip-index-types} -`MergeTree`テーブルエンジンは以下の種類のスキップインデックスをサポートしています。 -スキップインデックスをパフォーマンス最適化に使用する方法の詳細については、 -["ClickHouseデータスキップインデックスの理解"](/optimize/skipping-indexes)を参照してください。 +### スキップインデックスの種類 \{#skip-index-types\} -- [`MinMax`](#minmax)インデックス -- [`Set`](#set)インデックス -- [`bloom_filter`](#bloom-filter)インデックス -- [`ngrambf_v1`](#n-gram-bloom-filter)インデックス -- [`tokenbf_v1`](#token-bloom-filter)インデックス +`MergeTree` テーブルエンジンは、次の種類のスキップインデックスをサポートします。 +スキップインデックスをパフォーマンス最適化にどのように利用できるかについては、 +["ClickHouse のデータスキッピングインデックスを理解する"](/optimize/skipping-indexes) を参照してください。 -#### MinMaxスキップインデックス {#minmax} +- [`MinMax`](#minmax) インデックス +- [`Set`](#set) インデックス +- [`bloom_filter`](#bloom-filter) インデックス +- [`ngrambf_v1`](#n-gram-bloom-filter) インデックス +- [`tokenbf_v1`](#token-bloom-filter) インデックス -各インデックスグラニュールに対して、式の最小値と最大値が格納されます。 -(式が`tuple`型の場合、各タプル要素の最小値と最大値が格納されます。) +#### MinMax スキップインデックス -```text title="構文" +各インデックスグラニュールごとに、式の最小値と最大値が格納されます。 +(式の型が `tuple` の場合は、各タプル要素ごとに最小値と最大値が格納されます。) + +```text title="Syntax" minmax ``` -#### Set {#set} -各インデックスグラニュールに対して、指定された式の最大`max_rows`個のユニークな値が格納されます。 -`max_rows = 0`は「すべてのユニークな値を格納する」ことを意味します。 +#### Set + +各インデックスグラニュールごとに、指定された式のユニークな値が最大 `max_rows` 個まで保存されます。 +`max_rows = 0` の場合は「すべてのユニークな値を保存する」ことを意味します。 -```text title="構文" +```text title="Syntax" set(max_rows) ``` -#### Bloomフィルタ {#bloom-filter} -各インデックスグラニュールに対して、指定されたカラムの[Bloomフィルタ](https://en.wikipedia.org/wiki/Bloom_filter)を格納します。 +#### ブルームフィルタ + +各インデックスグラニュールは、指定された列に対して [Bloom filter](https://en.wikipedia.org/wiki/Bloom_filter) を保持します。 -```text title="構文" +```text title="Syntax" bloom_filter([false_positive_rate]) ``` -`false_positive_rate`パラメータは0から1の間の値を取ることができ(デフォルト: `0.025`)、偽陽性を生成する確率を指定します(これにより読み取るデータ量が増加します)。 - - -以下のデータ型がサポートされています: - -- `(U)Int*` -- `Float*` -- `Enum` -- `Date` -- `DateTime` -- `String` -- `FixedString` -- `Array` -- `LowCardinality` -- `Nullable` -- `UUID` -- `Map` - -:::note Mapデータ型: キーまたは値を使用したインデックス作成の指定 -`Map`データ型の場合、[`mapKeys`](/sql-reference/functions/tuple-map-functions.md/#mapkeys)または[`mapValues`](/sql-reference/functions/tuple-map-functions.md/#mapvalues)関数を使用して、キーまたは値のどちらに対してインデックスを作成するかを指定できます。 +`false_positive_rate` パラメータには 0 から 1 の値を指定できます(既定値: `0.025`)。このパラメータは、偽陽性が発生する確率(これにより読み取られるデータ量が増加します)を指定します。 + +次のデータ型がサポートされています。 + +* `(U)Int*` +* `Float*` +* `Enum` +* `Date` +* `DateTime` +* `String` +* `FixedString` +* `Array` +* `LowCardinality` +* `Nullable` +* `UUID` +* `Map` + +:::note Map データ型: キーまたは値に対するインデックス作成の指定 +`Map` データ型では、クライアントは [`mapKeys`](/sql-reference/functions/tuple-map-functions.md/#mapkeys) または [`mapValues`](/sql-reference/functions/tuple-map-functions.md/#mapvalues) 関数を使用して、キーに対してインデックスを作成するか、値に対してインデックスを作成するかを指定できます。 ::: -#### N-gramブルームフィルタ {#n-gram-bloom-filter} -各インデックスグラニュールに対して、指定されたカラムの[n-gram](https://en.wikipedia.org/wiki/N-gram)用の[ブルームフィルタ](https://en.wikipedia.org/wiki/Bloom_filter)を格納します。 +#### N-gram ブルームフィルタ + +各インデックスグラニュールには、指定された列の [n-gram](https://en.wikipedia.org/wiki/N-gram) に対する [bloom filter](https://en.wikipedia.org/wiki/Bloom_filter) が格納されます。 -```text title="構文" +```text title="Syntax" ngrambf_v1(n, size_of_bloom_filter_in_bytes, number_of_hash_functions, random_seed) ``` -| パラメータ | 説明 | -| ------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | -| `n` | ngramのサイズ | -| `size_of_bloom_filter_in_bytes` | ブルームフィルタのサイズ(バイト単位)。圧縮効率が高いため、例えば`256`や`512`などの大きな値を使用できます。 | -| `number_of_hash_functions` | ブルームフィルタで使用されるハッシュ関数の数。 | -| `random_seed` | ブルームフィルタのハッシュ関数用のシード値。 | +| Parameter | Description | +| ------------------------------- | -------------------------------------------------------------------------------- | +| `n` | n-gram のサイズ | +| `size_of_bloom_filter_in_bytes` | Bloom フィルタのサイズ(バイト単位)。ここには `256` や `512` などの大きな値を指定できます。Bloom フィルタは高い圧縮率で格納できます。 | +| `number_of_hash_functions` | Bloom フィルタで使用されるハッシュ関数の数。 | +| `random_seed` | Bloom フィルタのハッシュ関数に使用するシード値。 | -このインデックスは以下のデータ型でのみ動作します: +このインデックスが利用できるデータ型は次のとおりです。 -- [`String`](/sql-reference/data-types/string.md) -- [`FixedString`](/sql-reference/data-types/fixedstring.md) -- [`Map`](/sql-reference/data-types/map.md) +* [`String`](/sql-reference/data-types/string.md) +* [`FixedString`](/sql-reference/data-types/fixedstring.md) +* [`Map`](/sql-reference/data-types/map.md) -`ngrambf_v1`のパラメータを推定するには、以下の[ユーザー定義関数(UDF)](/sql-reference/statements/create/function.md)を使用できます。 +`ngrambf_v1` のパラメータを見積もるには、次の [ユーザー定義関数 (UDF)](/sql-reference/statements/create/function.md) を使用できます。 -```sql title="ngrambf_v1用のUDF" +```sql title="UDFs for ngrambf_v1" CREATE FUNCTION bfEstimateFunctions [ON CLUSTER cluster] AS (total_number_of_all_grams, size_of_bloom_filter_in_bits) -> round((size_of_bloom_filter_in_bits / total_number_of_all_grams) * log(2)); @@ -454,16 +454,16 @@ AS (number_of_hash_functions, probability_of_false_positives, size_of_bloom_filter_in_bytes) -> ceil(size_of_bloom_filter_in_bytes / (-number_of_hash_functions / log(1 - exp(log(probability_of_false_positives) / number_of_hash_functions)))) ``` -これらの関数を使用するには、少なくとも以下の2つのパラメータを指定する必要があります: +これらの関数を使用するには、少なくとも次の 2 つのパラメータを指定する必要があります。 -- `total_number_of_all_grams` -- `probability_of_false_positives` +* `total_number_of_all_grams` +* `probability_of_false_positives` -例えば、グラニュールに`4300`個のngramがあり、偽陽性率を`0.0001`未満にしたい場合、 -以下のクエリを実行することで他のパラメータを推定できます: +たとえば、ある granule に `4300` 個の ngram があり、偽陽性の確率を `0.0001` 未満にしたいとします。 +この場合、他のパラメータは次のクエリを実行することで推定できます。 ```sql ---- フィルタのビット数を推定 +--- フィルタ内のビット数を推定 SELECT bfEstimateBmSize(4300, 0.0001) / 8 AS size_of_bloom_filter_in_bytes; ┌─size_of_bloom_filter_in_bytes─┐ @@ -478,88 +478,87 @@ SELECT bfEstimateFunctions(4300, bfEstimateBmSize(4300, 0.0001)) as number_of_ha └──────────────────────────┘ ``` -もちろん、これらの関数を使用して他の条件に対するパラメータを推定することもできます。 -上記の関数は[こちら](https://hur.st/bloomfilter)のブルームフィルタ計算機を参照しています。 +もちろん、これらの関数は他の条件のパラメータを見積もるためにも使用できます。 +上記の関数は、ブルームフィルター計算ツール[こちら](https://hur.st/bloomfilter)を参照しています。 + -#### トークンブルームフィルタ {#token-bloom-filter} +#### トークンブルームフィルター -トークンブルームフィルタは`ngrambf_v1`と同じですが、ngramの代わりにトークン(英数字以外の文字で区切られたシーケンス)を格納します。 +トークンブルームフィルターは `ngrambf_v1` と同様ですが、n-gram ではなく、英数字以外の文字で区切られたトークン(文字列のまとまり)を保存します。 -```text title="構文" -tokenbf_v1(size_of_bloom_filter_in_bytes, number_of_hash_functions, random_seed) +```text title="Syntax" +tokenbf_v1(ブルームフィルタのサイズ(バイト), ハッシュ関数の数, ランダムシード) ``` -#### スパースグラムブルームフィルター {#sparse-grams-bloom-filter} +#### スパースグラム Bloom フィルター -スパースグラムブルームフィルターは`ngrambf_v1`と類似していますが、nグラムの代わりに[スパースグラムトークン](/sql-reference/functions/string-functions.md/#sparseGrams)を使用します。 +スパースグラム Bloom フィルターは `ngrambf_v1` と似ていますが、n-gram の代わりに [スパースグラムトークン](/sql-reference/functions/string-functions.md/#sparseGrams) を使用します。 -```text title="構文" +```text title="Syntax" sparse_grams(min_ngram_length, max_ngram_length, min_cutoff_length, size_of_bloom_filter_in_bytes, number_of_hash_functions, random_seed) ``` -### テキストインデックス {#text} -全文検索をサポートしています。詳細は[こちら](invertedindexes.md)を参照してください。 +### テキストインデックス \{#text\} -#### ベクトル類似度 {#vector-similarity} +全文検索をサポートします。詳細は[こちら](invertedindexes.md)を参照してください。 -近似最近傍探索をサポートしています。詳細は[こちら](annindexes.md)を参照してください。 +#### ベクトル類似性 \{#vector-similarity\} -### 関数のサポート {#functions-support} +近似最近傍検索をサポートしています。詳細は[こちら](annindexes.md)をご覧ください。 -`WHERE`句の条件には、カラムを操作する関数の呼び出しが含まれます。カラムがインデックスの一部である場合、ClickHouseは関数を実行する際にこのインデックスの使用を試みます。ClickHouseは、インデックスを使用するための異なる関数のサブセットをサポートしています。 +### 関数のサポート \{#functions-support\} -`set`型のインデックスはすべての関数で利用できます。その他のインデックス型は以下のようにサポートされています: +`WHERE` 句の条件式には、カラムを操作する関数呼び出しが含まれます。カラムがインデックスの一部である場合、ClickHouse は関数を評価する際にそのインデックスを利用しようとします。ClickHouse では、インデックスで利用できる関数のサブセットがインデックスタイプごとに異なります。 +`set` 型のインデックスは、あらゆる関数で利用できます。その他のインデックスタイプは次のようにサポートされます。 -| 関数(演算子)/インデックス | 主キー | minmax | ngrambf_v1 | tokenbf_v1 | bloom_filter | text | sparse_grams | -| ------------------------------------------------------------------------------------------------------------------------- | --- | ------ | -------------- | -------------- | ---------------- | ---- | ---------------- | -| [equals(=, ==)](/sql-reference/functions/comparison-functions.md/#equals) | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | -| [notEquals(!=, <>)](/sql-reference/functions/comparison-functions.md/#notEquals) | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | -| [like](/sql-reference/functions/string-search-functions.md/#like) | ✔ | ✔ | ✔ | ✔ | ✗ | ✔ | ✔ | -| [notLike](/sql-reference/functions/string-search-functions.md/#notLike) | ✔ | ✔ | ✔ | ✔ | ✗ | ✔ | ✔ | -| [match](/sql-reference/functions/string-search-functions.md/#match) | ✗ | ✗ | ✔ | ✔ | ✗ | ✔ | ✔ | -| [startsWith](/sql-reference/functions/string-functions.md/#startsWith) | ✔ | ✔ | ✔ | ✔ | ✗ | ✔ | ✔ | -| [endsWith](/sql-reference/functions/string-functions.md/#endsWith) | ✗ | ✗ | ✔ | ✔ | ✗ | ✔ | ✔ | -| [multiSearchAny](/sql-reference/functions/string-search-functions.md/#multiSearchAny) | ✗ | ✗ | ✔ | ✗ | ✗ | ✗ | ✗ | -| [in](/sql-reference/functions/in-functions) | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | -| [notIn](/sql-reference/functions/in-functions) | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | -| [より小さい (`<`)](/sql-reference/functions/comparison-functions.md/#less) | ✔ | ✔ | ✗ | ✗ | ✗ | ✗ | ✗ | -| [大なり (`>`)](/sql-reference/functions/comparison-functions.md/#greater) | ✔ | ✔ | ✗ | ✗ | ✗ | ✗ | ✗ | -| [lessOrEquals (`<=`)](/sql-reference/functions/comparison-functions.md/#lessOrEquals) | ✔ | ✔ | ✗ | ✗ | ✗ | ✗ | ✗ | -| [greaterOrEquals (`>=`)](/sql-reference/functions/comparison-functions.md/#greaterOrEquals) | ✔ | ✔ | ✗ | ✗ | ✗ | ✗ | ✗ | -| [empty](/sql-reference/functions/array-functions/#empty) | ✔ | ✔ | ✗ | ✗ | ✗ | ✗ | ✗ | -| [notEmpty](/sql-reference/functions/array-functions/#notEmpty) | ✗ | ✔ | ✗ | ✗ | ✗ | ✗ | ✔ | -| [has](/sql-reference/functions/array-functions#has) | ✗ | ✗ | ✔ | ✔ | ✔ | ✔ | ✔ | -| [hasAny](/sql-reference/functions/array-functions#hasAny) | ✗ | ✗ | ✔ | ✔ | ✔ | ✗ | ✔ | -| [hasAll](/sql-reference/functions/array-functions#hasAll) | ✗ | ✗ | ✔ | ✔ | ✔ | ✗ | ✔ | -| [hasToken](/sql-reference/functions/string-search-functions.md/#hasToken) | ✗ | ✗ | ✗ | ✔ | ✗ | ✔ | ✗ | -| [hasTokenOrNull](/sql-reference/functions/string-search-functions.md/#hasTokenOrNull) | ✗ | ✗ | ✗ | ✔ | ✗ | ✔ | ✗ | -| [hasTokenCaseInsensitive (`*`)](/sql-reference/functions/string-search-functions.md/#hasTokenCaseInsensitive) | ✗ | ✗ | ✗ | ✔ | ✗ | ✗ | ✗ | -| [hasTokenCaseInsensitiveOrNull (`*`)](/sql-reference/functions/string-search-functions.md/#hasTokenCaseInsensitiveOrNull) | ✗ | ✗ | ✗ | ✔ | ✗ | ✗ | ✗ | -| [hasAnyTokens](/sql-reference/functions/string-search-functions.md/#hasAnyTokens) | ✗ | ✗ | ✗ | ✗ | ✗ | ✔ | ✗ | -| [hasAllTokens](/sql-reference/functions/string-search-functions.md/#hasAllTokens) | ✗ | ✗ | ✗ | ✗ | ✗ | ✔ | ✗ | -| [mapContains](/sql-reference/functions/tuple-map-functions#mapcontains) | ✗ | ✗ | ✗ | ✗ | ✗ | ✔ | ✗ | +| 関数(演算子)/ 索引 | 主キー | minmax | ngrambf_v1 | tokenbf_v1 | bloom_filter | sparse_grams | テキスト | +| ------------------------------------------------------------------------------------------------------------------------- | --- | ------ | -------------- | -------------- | ---------------- | ---------------- | ---- | +| [equals (=, ==)](/sql-reference/functions/comparison-functions.md/#equals) | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| [notEquals(!=, <>)](/sql-reference/functions/comparison-functions.md/#notEquals) | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| [like](/sql-reference/functions/string-search-functions.md/#like) | ✔ | ✔ | ✔ | ✔ | ✗ | ✔ | ✔ | +| [notLike](/sql-reference/functions/string-search-functions.md/#notLike) | ✔ | ✔ | ✔ | ✔ | ✗ | ✔ | ✔ | +| [match](/sql-reference/functions/string-search-functions.md/#match) | ✗ | ✗ | ✔ | ✔ | ✗ | ✔ | ✔ | +| [startsWith](/sql-reference/functions/string-functions.md/#startsWith) | ✔ | ✔ | ✔ | ✔ | ✗ | ✔ | ✔ | +| [endsWith](/sql-reference/functions/string-functions.md/#endsWith) | ✗ | ✗ | ✔ | ✔ | ✗ | ✔ | ✔ | +| [multiSearchAny](/sql-reference/functions/string-search-functions.md/#multiSearchAny) | ✗ | ✗ | ✔ | ✗ | ✗ | ✗ | ✗ | +| [in](/sql-reference/functions/in-functions) | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| [notIn](/sql-reference/functions/in-functions) | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| [less(`<`)](/sql-reference/functions/comparison-functions.md/#less) | ✔ | ✔ | ✗ | ✗ | ✗ | ✗ | ✗ | +| [greater(`>`)](/sql-reference/functions/comparison-functions.md/#greater) | ✔ | ✔ | ✗ | ✗ | ✗ | ✗ | ✗ | +| [以下 (`<=`)](/sql-reference/functions/comparison-functions.md/#lessOrEquals) | ✔ | ✔ | ✗ | ✗ | ✗ | ✗ | ✗ | +| [greaterOrEquals (`>=`)](/sql-reference/functions/comparison-functions.md/#greaterOrEquals) | ✔ | ✔ | ✗ | ✗ | ✗ | ✗ | ✗ | +| [empty](/sql-reference/functions/array-functions/#empty) | ✔ | ✔ | ✗ | ✗ | ✗ | ✗ | ✗ | +| [notEmpty](/sql-reference/functions/array-functions/#notEmpty) | ✗ | ✔ | ✗ | ✗ | ✗ | ✔ | ✗ | +| [has](/sql-reference/functions/array-functions#has) | ✗ | ✗ | ✔ | ✔ | ✔ | ✔ | ✔ | +| [hasAny](/sql-reference/functions/array-functions#hasAny) | ✗ | ✗ | ✔ | ✔ | ✔ | ✔ | ✗ | +| [hasAll](/sql-reference/functions/array-functions#hasAll) | ✗ | ✗ | ✔ | ✔ | ✔ | ✔ | ✗ | +| [hasToken](/sql-reference/functions/string-search-functions.md/#hasToken) | ✗ | ✗ | ✗ | ✔ | ✗ | ✗ | ✔ | +| [hasTokenOrNull](/sql-reference/functions/string-search-functions.md/#hasTokenOrNull) | ✗ | ✗ | ✗ | ✔ | ✗ | ✗ | ✔ | +| [hasTokenCaseInsensitive (`*`)](/sql-reference/functions/string-search-functions.md/#hasTokenCaseInsensitive) | ✗ | ✗ | ✗ | ✔ | ✗ | ✗ | ✗ | +| [hasTokenCaseInsensitiveOrNull (`*`)](/sql-reference/functions/string-search-functions.md/#hasTokenCaseInsensitiveOrNull) | ✗ | ✗ | ✗ | ✔ | ✗ | ✗ | ✗ | +| [hasAnyTokens](/sql-reference/functions/string-search-functions.md/#hasAnyTokens) | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✔ | +| [hasAllTokens](/sql-reference/functions/string-search-functions.md/#hasAllTokens) | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✔ | +| [mapContains](/sql-reference/functions/tuple-map-functions#mapcontains) | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✔ | +`ngrambf_v1` によるクエリ最適化では、定数引数の値が ngram サイズより小さい関数は使用できません。 - -`ngrambf_v1` では、定数引数が ngram のサイズより小さい関数はクエリ最適化に使用できません。 - -(*) `hasTokenCaseInsensitive` および `hasTokenCaseInsensitiveOrNull` を効果的に機能させるには、`tokenbf_v1` インデックスを小文字化したデータに対して作成する必要があります。例えば `INDEX idx (lower(str_col)) TYPE tokenbf_v1(512, 3, 0)` のようにします。 +(*) `hasTokenCaseInsensitive` および `hasTokenCaseInsensitiveOrNull` を効果的に機能させるには、`tokenbf_v1` インデックスを小文字化されたデータ上に作成する必要があります。たとえば `INDEX idx (lower(str_col)) TYPE tokenbf_v1(512, 3, 0)` のように指定します。 :::note -Bloom filter には偽陽性が発生する可能性があるため、`ngrambf_v1`、`tokenbf_v1`、`sparse_grams`、および `bloom_filter` インデックスは、関数の結果が false であることが期待されるクエリの最適化には使用できません。 +Bloom filter では偽陽性が発生し得るため、`ngrambf_v1`、`tokenbf_v1`、`sparse_grams`、`bloom_filter` 各インデックスは、関数の結果が false になることを前提としてクエリを最適化する目的には使用できません。 -例えば: +例: -- 最適化できるもの: +- 最適化可能: - `s LIKE '%test%'` - `NOT s NOT LIKE '%test%'` - `s = 1` - `NOT s != 1` - `startsWith(s, 'test')` -- 最適化できないもの: +- 最適化不可能: - `NOT s LIKE '%test%'` - `s NOT LIKE '%test%'` - `NOT s = 1` @@ -567,80 +566,78 @@ Bloom filter には偽陽性が発生する可能性があるため、`ngrambf_v - `NOT startsWith(s, 'test')` ::: +## プロジェクション \{#projections\} - -## プロジェクション {#projections} - -プロジェクションは[マテリアライズドビュー](/sql-reference/statements/create/view)に似ていますが、パートレベルで定義されます。クエリでの自動使用とともに一貫性を保証します。 +プロジェクションは [マテリアライズドビュー](/sql-reference/statements/create/view) に似ていますが、パーツレベルで定義されます。クエリで自動的に利用されることに加えて、一貫性を保証します。 :::note -プロジェクションを実装する際は、[force_optimize_projection](/operations/settings/settings#force_optimize_projection)設定も考慮してください。 +プロジェクションを実装する際には、[force_optimize_projection](/operations/settings/settings#force_optimize_projection) の設定も併せて検討する必要があります。 ::: -プロジェクションは[FINAL](/sql-reference/statements/select/from#final-modifier)修飾子を使用した`SELECT`文ではサポートされていません。 +プロジェクションは、[FINAL](/sql-reference/statements/select/from#final-modifier) 修飾子付きの `SELECT` ステートメントではサポートされていません。 -### プロジェクションクエリ {#projection-query} +### プロジェクションクエリ -プロジェクションクエリはプロジェクションを定義するものです。親テーブルから暗黙的にデータを選択します。 +プロジェクションクエリは、プロジェクションを定義するクエリです。親テーブルからデータを暗黙的に選択します。 **構文** ```sql SELECT [GROUP BY] [ORDER BY] ``` -プロジェクションは[ALTER](/sql-reference/statements/alter/projection.md)文で変更または削除できます。 +プロジェクションは [ALTER](/sql-reference/statements/alter/projection.md) 文で変更または削除できます。 -### プロジェクションストレージ {#projection-storage} -プロジェクションはパートディレクトリ内に保存されます。インデックスに似ていますが、匿名の`MergeTree`テーブルのパートを保存するサブディレクトリを含みます。テーブルはプロジェクションの定義クエリによって生成されます。`GROUP BY`句がある場合、基盤となるストレージエンジンは[AggregatingMergeTree](aggregatingmergetree.md)となり、すべての集約関数は`AggregateFunction`に変換されます。`ORDER BY`句がある場合、`MergeTree`テーブルはそれをプライマリキー式として使用します。マージプロセス中、プロジェクションパートはそのストレージのマージルーチンを介してマージされます。親テーブルのパートのチェックサムはプロジェクションのパートと結合されます。その他のメンテナンス作業はスキップインデックスと同様です。 +### プロジェクションのストレージ \{#projection-storage\} -### クエリ解析 {#projection-query-analysis} +プロジェクションはパーツディレクトリ内に保存されます。インデックスに似ていますが、匿名の `MergeTree` テーブルのパーツを保存するサブディレクトリを含みます。このテーブルは、プロジェクションの定義クエリに基づいて定義されます。`GROUP BY` 句がある場合、下層のストレージエンジンは [AggregatingMergeTree](aggregatingmergetree.md) になり、すべての集約関数は `AggregateFunction` に変換されます。`ORDER BY` 句がある場合、`MergeTree` テーブルはそれを主キー式として使用します。マージ処理中、プロジェクションのパーツは、そのストレージのマージルーチンによってマージされます。親テーブルのパーツのチェックサムは、プロジェクションのパーツと組み合わされます。その他のメンテナンス処理はスキップインデックスと同様です。 -1. プロジェクションが指定されたクエリに応答するために使用できるかどうか、つまりベーステーブルへのクエリと同じ結果を生成するかどうかを確認します。 -2. 読み取るグラニュールが最も少ない、最適な実行可能な一致を選択します。 -3. プロジェクションを使用するクエリパイプラインは、元のパートを使用するものとは異なります。一部のパートでプロジェクションが存在しない場合、その場で「プロジェクト」するパイプラインを追加できます。 +### クエリ解析 \{#projection-query-analysis\} +1. プロジェクションがベーステーブルに対するクエリと同じ結果を生成し、与えられたクエリに対する回答として利用できるかを確認します。 +2. 読み取る必要があるグラニュール数が最も少ない、実行可能な最適な一致を選択します。 +3. プロジェクションを利用するクエリパイプラインは、元のパーツを利用するものとは異なります。あるパーツにプロジェクションが存在しない場合、その場で「投影」するためのパイプラインを追加できます。 -## 同時データアクセス {#concurrent-data-access} +## 同時データアクセス \{#concurrent-data-access\} -テーブルへの同時アクセスには、マルチバージョニングを使用しています。つまり、テーブルの読み取りと更新が同時に行われる場合、データはクエリ実行時点で最新のパーツセットから読み取られます。長時間のロックは発生しません。挿入操作が読み取り操作を妨げることはありません。 +テーブルへの同時アクセスにはマルチバージョン方式を使用します。つまり、テーブルで読み取りと更新が同時に行われている場合でも、クエリ時点で有効なパーツの集合からデータが読み取られます。長時間にわたるロックは発生しません。挿入処理が読み取り操作の妨げになることもありません。 テーブルからの読み取りは自動的に並列化されます。 +## 列およびテーブルの TTL -## カラムとテーブルのTTL {#table_engine-mergetree-ttl} - -値の有効期間を決定します。 +値の有効期間(time-to-live)を決定します。 -`TTL`句は、テーブル全体および個々のカラムに対して設定できます。テーブルレベルの`TTL`では、ディスクとボリューム間でのデータの自動移動や、すべてのデータが期限切れになったパーツの再圧縮のロジックを指定することもできます。 +`TTL` 句はテーブル全体にも、各列ごとにも設定できます。テーブルレベルの `TTL` では、ディスクやボリューム間でデータを自動的に移動するロジックや、すべてのデータが期限切れになったパーツを再圧縮するロジックも指定できます。 -式は[Date](/sql-reference/data-types/date.md)、[Date32](/sql-reference/data-types/date32.md)、[DateTime](/sql-reference/data-types/datetime.md)、または[DateTime64](/sql-reference/data-types/datetime64.md)データ型として評価される必要があります。 +式は [Date](/sql-reference/data-types/date.md)、[Date32](/sql-reference/data-types/date32.md)、[DateTime](/sql-reference/data-types/datetime.md)、または [DateTime64](/sql-reference/data-types/datetime64.md) 型として評価されなければなりません。 **構文** -カラムの有効期間を設定する: +列の TTL を設定する場合: ```sql TTL time_column TTL time_column + interval ``` -`interval`を定義するには、[時間間隔](/sql-reference/operators#operators-for-working-with-dates-and-times)演算子を使用します。例: +`interval` を定義するには、[time interval](/sql-reference/operators#operators-for-working-with-dates-and-times) 演算子を使用します。たとえば、次のようにします。 ```sql TTL date_time + INTERVAL 1 MONTH TTL date_time + INTERVAL 15 HOUR ``` -### カラムTTL {#mergetree-column-ttl} -カラム内の値が期限切れになると、ClickHouseはそれらをカラムデータ型のデフォルト値で置き換えます。データパート内のすべてのカラム値が期限切れになった場合、ClickHouseはファイルシステム内のデータパートからこのカラムを削除します。 +### カラム TTL \{#mergetree-column-ttl\} -`TTL`句はキーカラムには使用できません。 +カラム内の値の有効期限が切れると、ClickHouse はそれらをカラムのデータ型におけるデフォルト値に置き換えます。データパート内のそのカラムの値がすべて有効期限切れになった場合、ClickHouse はファイルシステム上のそのデータパートからこのカラムを削除します。 + +`TTL` 句はキー列には使用できません。 **例** -#### `TTL`を使用したテーブルの作成: {#creating-a-table-with-ttl} +#### `TTL` を設定したテーブルの作成: ```sql CREATE TABLE tab @@ -655,7 +652,8 @@ PARTITION BY toYYYYMM(d) ORDER BY d; ``` -#### 既存テーブルのカラムにTTLを追加する {#adding-ttl-to-a-column-of-an-existing-table} + +#### 既存のテーブルの列に TTL を追加する ```sql ALTER TABLE tab @@ -663,7 +661,8 @@ ALTER TABLE tab c String TTL d + INTERVAL 1 DAY; ``` -#### カラムのTTLを変更する {#altering-ttl-of-the-column} + +#### 列のTTLを変更する ```sql ALTER TABLE tab @@ -671,9 +670,10 @@ ALTER TABLE tab c String TTL d + INTERVAL 1 MONTH; ``` -### テーブルTTL {#mergetree-table-ttl} -テーブルには、期限切れ行を削除するための式と、[ディスクまたはボリューム](#table_engine-mergetree-multiple-volumes)間でパーツを自動的に移動するための複数の式を設定できます。テーブル内の行が期限切れになると、ClickHouseは対応するすべての行を削除します。パーツの移動または再圧縮の場合、パーツのすべての行が`TTL`式の条件を満たす必要があります。 +### テーブルの TTL + +テーブルには、有効期限が切れた行を削除するための式と、[ディスクまたはボリューム](#table_engine-mergetree-multiple-volumes)間でパーツを自動的に移動するための複数の式を定義できます。テーブル内の行が有効期限切れになると、ClickHouse は対応する行をすべて削除します。パーツの移動または再圧縮が行われるためには、そのパーツ内のすべての行が `TTL` 式の条件を満たしている必要があります。 ```sql TTL expr @@ -682,27 +682,28 @@ TTL expr [GROUP BY key_expr [SET v1 = aggr_func(v1) [, v2 = aggr_func(v2) ...]] ] ``` -TTLルールのタイプは各TTL式の後に指定できます。これは、式が満たされた(現在時刻に達した)ときに実行されるアクションを決定します: +TTL ルールの種類は、それぞれの TTL 式の後に続けて指定できます。これは、式が満たされた(現在時刻に達した)ときに実行されるアクションを決定します: -- `DELETE` - 期限切れ行を削除する(デフォルトアクション) -- `RECOMPRESS codec_name` - `codec_name`でデータパーツを再圧縮する -- `TO DISK 'aaa'` - パーツをディスク`aaa`に移動する -- `TO VOLUME 'bbb'` - パーツをボリューム`bbb`に移動する -- `GROUP BY` - 期限切れ行を集約する +* `DELETE` - 期限切れの行を削除します(デフォルトのアクション); +* `RECOMPRESS codec_name` - データパートを `codec_name` で再圧縮します; +* `TO DISK 'aaa'` - パートをディスク `aaa` に移動します; +* `TO VOLUME 'bbb'` - パートをボリューム `bbb` に移動します; +* `GROUP BY` - 期限切れの行を集約します。 -`DELETE`アクションは`WHERE`句と組み合わせて使用でき、フィルタリング条件に基づいて期限切れ行の一部のみを削除できます: +`DELETE` アクションは `WHERE` 句と組み合わせて使用でき、フィルタリング条件に基づいて期限切れの行の一部のみを削除できます: ```sql TTL time_column + INTERVAL 1 MONTH DELETE WHERE column = 'value' ``` -`GROUP BY`式は、テーブルのプライマリキーの接頭辞である必要があります。 +`GROUP BY` 式はテーブルの主キーの先頭部分でなければなりません。 -カラムが`GROUP BY`式の一部ではなく、`SET`句で明示的に設定されていない場合、結果行にはグループ化された行からの任意の値が含まれます(集約関数`any`が適用されたかのように)。 +ある列が `GROUP BY` 式の一部ではなく、かつ `SET` 句で明示的に設定されていない場合、その列の値には、結果行でグループ化された行のいずれか 1 つからの値が入ります(あたかも集約関数 `any` が適用されたかのように振る舞います)。 **例** -#### `TTL`を使用したテーブルの作成: {#creating-a-table-with-ttl-1} + +#### `TTL` を指定したテーブルの作成: ```sql CREATE TABLE tab @@ -718,15 +719,15 @@ TTL d + INTERVAL 1 MONTH DELETE, d + INTERVAL 2 WEEK TO DISK 'bbb'; ``` -#### テーブルの`TTL`を変更する: {#altering-ttl-of-the-table} + +#### テーブルの `TTL` を変更する: ```sql ALTER TABLE tab MODIFY TTL d + INTERVAL 1 DAY; ``` - -1ヶ月後に行の有効期限が切れるテーブルを作成します。日付が月曜日である期限切れの行は削除されます: +行が 1 か月後に期限切れとなるテーブルを作成します。期限切れとなった行のうち、日付が月曜日であるものが削除されます。 ```sql CREATE TABLE table_with_where @@ -740,7 +741,8 @@ ORDER BY d TTL d + INTERVAL 1 MONTH DELETE WHERE toDayOfWeek(d) = 1; ``` -#### 期限切れの行が再圧縮されるテーブルの作成: {#creating-a-table-where-expired-rows-are-recompressed} + +#### 期限切れの行が再圧縮されるテーブルの作成: ```sql CREATE TABLE table_for_recompression @@ -755,7 +757,7 @@ TTL d + INTERVAL 1 MONTH RECOMPRESS CODEC(ZSTD(17)), d + INTERVAL 1 YEAR RECOMPR SETTINGS min_rows_for_wide_part = 0, min_bytes_for_wide_part = 0; ``` -期限切れの行が集約されるテーブルを作成します。結果の行では、`x`はグループ化された行全体の最大値、`y`は最小値、`d`はグループ化された行からの任意の値を含みます。 +有効期限切れの行を集約するテーブルを作成します。結果の行では、`x` にはグループ化された行全体での最大値が、`y` には最小値が、`d` にはグループ化された行からのいずれか 1 つの値が含まれます。 ```sql CREATE TABLE table_for_aggregation @@ -771,65 +773,64 @@ ORDER BY (k1, k2) TTL d + INTERVAL 1 MONTH GROUP BY k1, k2 SET x = max(x), y = min(y); ``` -### 期限切れデータの削除 {#mergetree-removing-expired-data} - -`TTL`が期限切れとなったデータは、ClickHouseがデータパートをマージする際に削除されます。 -ClickHouseがデータの期限切れを検出すると、スケジュール外のマージを実行します。このようなマージの頻度を制御するには、`merge_with_ttl_timeout`を設定できます。値が低すぎると、多くのリソースを消費する可能性のあるスケジュール外のマージが頻繁に実行されます。 +### 期限切れデータの削除 \{#mergetree-removing-expired-data\} -マージの間に`SELECT`クエリを実行すると、期限切れのデータが取得される可能性があります。これを回避するには、`SELECT`の前に[OPTIMIZE](/sql-reference/statements/optimize.md)クエリを使用してください。 +`TTL` が期限切れになったデータは、ClickHouse がデータパーツをマージする際に削除されます。 -**関連項目** +ClickHouse がデータの期限切れを検出すると、スケジュール外のマージを実行します。このようなマージの頻度を制御するには、`merge_with_ttl_timeout` を設定できます。値を低くしすぎると、多数のスケジュール外マージが実行され、多くのリソースを消費する可能性があります。 -- [ttl_only_drop_parts](/operations/settings/merge-tree-settings#ttl_only_drop_parts)設定 +マージとマージの間に `SELECT` クエリを実行すると、期限切れデータが返される場合があります。これを避けるには、`SELECT` の前に [OPTIMIZE](/sql-reference/statements/optimize.md) クエリを実行してください。 +**関連項目** -## ディスクタイプ {#disk-types} +- [ttl_only_drop_parts](/operations/settings/merge-tree-settings#ttl_only_drop_parts) 設定 -ローカルブロックデバイスに加えて、ClickHouseは以下のストレージタイプをサポートしています: +## ディスクの種類 \{#disk-types\} -- [`s3` S3およびMinIO向け](#table_engine-mergetree-s3) -- [`gcs` GCS向け](/integrations/data-ingestion/gcs/index.md/#creating-a-disk) -- [`blob_storage_disk` Azure Blob Storage向け](/operations/storing-data#azure-blob-storage) -- [`hdfs` HDFS向け](/engines/table-engines/integrations/hdfs) -- [`web` Webからの読み取り専用アクセス向け](/operations/storing-data#web-storage) -- [`cache` ローカルキャッシュ向け](/operations/storing-data#using-local-cache) -- [`s3_plain` S3へのバックアップ向け](/operations/backup#backuprestore-using-an-s3-disk) -- [`s3_plain_rewritable` S3上の不変・非レプリケートテーブル向け](/operations/storing-data.md#s3-plain-rewritable-storage) +ローカルブロックデバイスに加えて、ClickHouse は次のストレージタイプをサポートします: +- [`s3` — S3 および MinIO 用](#table_engine-mergetree-s3) +- [`gcs` — GCS 用](/integrations/data-ingestion/gcs/index.md/#creating-a-disk) +- [`blob_storage_disk` — Azure Blob Storage 用](/operations/storing-data#azure-blob-storage) +- [`hdfs` — HDFS 用](/engines/table-engines/integrations/hdfs) +- [`web` — Web からの読み取り専用](/operations/storing-data#web-storage) +- [`cache` — ローカルキャッシュ用](/operations/storing-data#using-local-cache) +- [`s3_plain` — S3 へのバックアップ用](/operations/backup#backuprestore-using-an-s3-disk) +- [`s3_plain_rewritable` — S3 上の変更不可な非レプリケートテーブル用](/operations/storing-data.md#s3-plain-rewritable-storage) -## データ保存のための複数のブロックデバイスを使用する {#table_engine-mergetree-multiple-volumes} +## データストレージで複数のブロックデバイスを利用する \{#table_engine-mergetree-multiple-volumes\} -### はじめに {#introduction} +### はじめに \{#introduction\} -`MergeTree` ファミリーのテーブルエンジンは、複数のブロックデバイスにデータを格納できます。例えば、あるテーブルのデータが「ホット」と「コールド」に暗黙のうちに分けられる場合に有用です。最近のデータは頻繁にアクセスされますが、必要なストレージ容量は少量です。一方、ファットテールの古い履歴データはアクセス頻度が低いです。複数のディスクが利用可能な場合、「ホット」データは高速ディスク(例: NVMe SSD やメモリ内)に、「コールド」データは比較的低速なディスク(例: HDD)に配置できます。 +`MergeTree` ファミリーのテーブルエンジンは、複数のブロックデバイス上にデータを保存できます。たとえば、特定のテーブルのデータが事実上「ホット」と「コールド」に分割されている場合に有用です。最新のデータは頻繁に参照されますが、必要な容量は小さくて済みます。対照的に、裾の重い履歴データはまれにしか参照されません。複数のディスクが利用可能な場合、「ホット」データは高速なディスク(たとえば NVMe SSD やメモリ上)に配置し、「コールド」データは比較的低速なディスク(たとえば HDD)上に配置できます。 -データパーツは、`MergeTree` エンジンのテーブルにおける最小の移動単位です。一つのパーツに属するデータは一つのディスクに格納されます。データパーツは、バックグラウンドで(ユーザー設定に基づいて)ディスク間で移動でき、また [ALTER](/sql-reference/statements/alter/partition) クエリによっても移動可能です。 +データパーツは、`MergeTree` エンジンのテーブルにおける最小の移動可能な単位です。1 つのパーツに属するデータは 1 台のディスク上に保存されます。データパーツは、バックグラウンドでユーザー設定に従ってディスク間を移動できるほか、[ALTER](/sql-reference/statements/alter/partition) クエリを使用して移動することもできます。 -### 用語 {#terms} +### 用語 \{#terms\} -- Disk — ファイルシステムにマウントされたブロックデバイス。 -- Default disk — [path](/operations/server-configuration-parameters/settings.md/#path) サーバー設定で指定されたパスにデータを格納するディスク。 -- Volume — 同一のディスクからなる順序付き集合([JBOD](https://en.wikipedia.org/wiki/Non-RAID_drive_architectures) に類似)。 -- Storage policy — ボリュームの集合と、それら間でデータを移動するためのルール。 +- ディスク — ファイルシステムにマウントされたブロックデバイス。 +- デフォルトディスク — [path](/operations/server-configuration-parameters/settings.md/#path) サーバー設定で指定されたパス上にデータを保存するディスク。 +- ボリューム — 同一条件のディスクを順序付きで並べた集合([JBOD](https://en.wikipedia.org/wiki/Non-RAID_drive_architectures) に類似)。 +- ストレージポリシー — ボリュームの集合と、それらの間でデータを移動するためのルール。 -記述されたエンティティの名前は、システムテーブル [system.storage_policies](/operations/system-tables/storage_policies) および [system.disks](/operations/system-tables/disks) で確認できます。構成済みのストレージポリシーのうちの一つをテーブルに適用するには、`MergeTree` エンジンファミリーテーブルの `storage_policy` 設定を使用します。 +ここで説明した各エンティティの名称は、システムテーブル [system.storage_policies](/operations/system-tables/storage_policies) および [system.disks](/operations/system-tables/disks) で確認できます。テーブルに対して設定済みのストレージポリシーのいずれかを適用するには、`MergeTree` エンジンファミリーのテーブルで `storage_policy` 設定を使用します。 -### 設定 {#table_engine-mergetree-multiple-volumes_configure} +### 設定 -ディスク、ボリューム、およびストレージポリシーは、`config.d` ディレクトリのファイル内の `` タグで宣言します。 +ディスク、ボリューム、およびストレージポリシーは、`config.d` ディレクトリ内のファイルにある `` タグ内で宣言する必要があります。 :::tip -ディスクはクエリの `SETTINGS` セクションで宣言することも可能です。これは、例えば URL でホストされたディスクを一時的にアタッチするアドホック分析に便利です。 -詳細は [dynamic storage](/operations/storing-data#dynamic-configuration) を参照してください。 +ディスクはクエリの `SETTINGS` セクション内で宣言することもできます。これは、例えば URL で公開されているディスクを一時的にアタッチしてアドホックな分析を行う場合に便利です。 +詳細については、[dynamic storage](/operations/storing-data#dynamic-configuration) を参照してください。 ::: -設定構造: +設定の構造: ```xml - + /mnt/fast_ssd/clickhouse/ @@ -850,13 +851,13 @@ ClickHouseがデータの期限切れを検出すると、スケジュール外 タグ: -- `` — ディスク名。すべてのディスクで名前は一意でなければなりません。 -- `path` — サーバーがデータを格納するパス(`data` および `shadow` フォルダ)、末尾に '/' を付ける必要があります。 -- `keep_free_space_bytes` — 予約する空きディスク容量の量。 +* `` — ディスク名。すべてのディスクで名前が重複しないようにする必要があります。 +* `path` — サーバーがデータ(`data` および `shadow` フォルダ)を保存するパス。末尾は '/' で終わる必要があります。 +* `keep_free_space_bytes` — 予約しておく空きディスク容量のバイト数。 -ディスクの定義順序は重要ではありません。 +ディスク定義の順序は重要ではありません。 -ストレージポリシーの設定マークアップ: +ストレージポリシー構成のマークアップ: ```xml @@ -870,17 +871,17 @@ ClickHouseがデータの期限切れを検出すると、スケジュール外 round_robin - + - + 0.2 - + - + ... @@ -889,22 +890,22 @@ ClickHouseがデータの期限切れを検出すると、スケジュール外 タグ: -* `policy_name_N` — ポリシー名。ポリシー名は一意でなければなりません。 -* `volume_name_N` — ボリューム名。ボリューム名は一意でなければなりません。 +* `policy_name_N` — ポリシー名。ポリシー名は一意である必要があります。 +* `volume_name_N` — ボリューム名。ボリューム名は一意である必要があります。 * `disk` — ボリューム内のディスク。 -* `max_data_part_size_bytes` — そのボリューム内のいずれのディスク上にも保存できるパーツの最大サイズ。マージ後のパーツサイズが `max_data_part_size_bytes` より大きくなると見積もられた場合、そのパーツは次のボリュームに書き込まれます。基本的にこの機能により、新しい/小さいパーツをホット(SSD)ボリュームに保持し、大きなサイズに達したときにコールド(HDD)ボリュームへ移動できます。ポリシーにボリュームが 1 つしかない場合は、この設定を使用しないでください。 -* `move_factor` — 利用可能な空き容量がこの係数より小さくなったとき、自動的にデータを次のボリューム(存在する場合)へ移動し始めます(デフォルトは 0.1)。ClickHouse は既存のパーツをサイズ順に大きいものから小さいものへ(降順で)ソートし、`move_factor` 条件を満たすのに十分な合計サイズとなるようにパーツを選択します。全パーツの合計サイズが不十分な場合は、すべてのパーツが移動されます。 -* `perform_ttl_move_on_insert` — データパーツ INSERT 時の TTL による移動を無効にします。デフォルト(有効な場合)では、TTL move ルールですでに期限切れとなっているデータパーツを挿入すると、直ちに移動ルールで指定されたボリューム/ディスクへ移動されます。宛先のボリューム/ディスクが低速(例:S3 のようなリモートストレージ)の場合、これは INSERT を大幅に遅くする可能性があります。無効にした場合、すでに期限切れのデータパーツはいったんデフォルトボリュームに書き込まれ、その直後に TTL ボリュームへ移動されます。 -* `load_balancing` - ディスクバランシングのポリシー。`round_robin` または `least_used`。 -* `least_used_ttl_ms` - すべてのディスクの利用可能な空き容量を更新するためのタイムアウト(ミリ秒単位)を設定します(`0` - 常に更新、`-1` - 決して更新しない、デフォルトは `60000`)。なお、そのディスクが ClickHouse のみで使用され、オンラインでのファイルシステムのサイズ変更(拡張/縮小)の対象とならない場合は `-1` を使用できます。それ以外のケースでは推奨されません。時間の経過とともに空き容量の把握が不正確になり、容量分布が偏る原因となるためです。 -* `prefer_not_to_merge` — この設定は使用しないでください。このボリューム上のデータパーツのマージを無効にします(有害であり、パフォーマンス低下を招きます)。この設定が有効な場合(有効にしないでください)、このボリューム上でのマージは許可されません(これは望ましくありません)。これにより(ただし、その必要はありません)、ClickHouse が低速ディスクをどのように扱うかを制御できますが(何かを制御したくなる時点で誤りです)、ClickHouse の方が適切に扱うため、この設定は使用しないでください。 -* `volume_priority` — ボリュームがどの優先度(順序)で埋められるかを定義します。値が小さいほど優先度が高くなります。パラメータ値は自然数でなければならず、1 から N(与えられた中で最も低い優先度)までの範囲を欠番なしで網羅する必要があります。 - * *すべての* ボリュームがタグ付けされている場合、それらは指定された順序で優先されます。 - * 一部のボリュームのみがタグ付けされている場合、タグのないボリュームは最も優先度が低く、設定ファイル内で定義された順序で優先されます。 - * *一つも* ボリュームがタグ付けされていない場合、その優先度は設定ファイル内で宣言された順序に対応して設定されます。 - * 2 つのボリュームが同じ優先度値を持つことはできません。 - -Configuration examples: +* `max_data_part_size_bytes` — いずれのボリューム上のディスクにも保存可能なパーツの最大サイズ。マージされたパーツのサイズが `max_data_part_size_bytes` より大きくなると見積もられた場合、そのパーツは次のボリュームに書き込まれます。この機能により、新規/小さいパーツをホット (SSD) ボリュームに保持し、サイズが大きくなったときにコールド (HDD) ボリュームへ移動できます。ポリシーにボリュームが 1 つしかない場合、この設定は使用しないでください。 +* `move_factor` — 空き容量がこの係数より小さくなったとき、自動的にデータを次のボリュームに移動し始めます (既定値は 0.1)。ClickHouse は既存のパーツをサイズの大きい順 (降順) にソートし、`move_factor` 条件を満たすのに十分な合計サイズとなるようにパーツを選択します。すべてのパーツの合計サイズが不十分な場合は、すべてのパーツが移動されます。 +* `perform_ttl_move_on_insert` — データパーツの INSERT 時の TTL move を無効化します。既定では (有効な場合)、挿入するデータパーツが TTL move ルールによりすでに期限切れとなっている場合、そのパーツは直ちに move ルールで指定されたボリューム/ディスクに配置されます。宛先ボリューム/ディスクが遅い場合 (例: S3)、これは INSERT を大幅に遅くする可能性があります。無効にした場合、すでに期限切れのデータパーツはいったんデフォルトボリュームに書き込まれ、その直後に TTL ボリュームへ移動されます。 +* `load_balancing` — ディスクのバランシングポリシー。`round_robin` または `least_used`。 +* `least_used_ttl_ms` — すべてのディスク上の空き容量情報を更新するためのタイムアウト (ミリ秒単位) を設定します (`0` - 常に更新、`-1` - 更新しない、既定値は `60000`)。注意: ディスクが ClickHouse 専用であり、オンラインのファイルシステムのリサイズ/縮小の対象にならない場合は `-1` を使用できますが、それ以外のケースでは推奨されません。最終的に空き容量の不適切な分散を招くためです。 +* `prefer_not_to_merge` — この設定は使用しないでください。このボリューム上のデータパーツのマージを無効化します (これは有害であり、パフォーマンス低下につながります)。この設定が有効な場合 (有効にしないでください)、このボリューム上でのマージは許可されません (これは望ましくありません)。これは (必要ありませんが) ClickHouse が遅いディスクをどのように扱うかを制御することを可能にします (しかし、何かを制御しようとしている時点で誤りであり、ClickHouse の方が賢いので、この設定は使用しないでください)。 +* `volume_priority` — ボリュームが埋められる優先度 (順序) を定義します。値が小さいほど優先度が高くなります。このパラメータの値は自然数とし、1 から N (最も低い優先度の値) までの範囲を欠番なくすべて網羅する必要があります。 + * *すべての* ボリュームにタグが付いている場合、指定された順序で優先されます。 + * 一部のボリュームのみにタグが付いている場合、タグのないボリュームは最も低い優先度となり、設定ファイル内で定義された順に優先されます。 + * ボリュームに *まったく* タグが付いていない場合、設定ファイル内で宣言された順序に対応して優先度が設定されます。 + * 2 つのボリュームが同じ優先度の値を持つことはできません。 + +構成例: ```xml @@ -948,15 +949,15 @@ Configuration examples: ``` -この例では、`hdd_in_order` ポリシーは [ラウンドロビン](https://en.wikipedia.org/wiki/Round-robin_scheduling) 方式を実装しています。このポリシーは1つのボリューム(`single`)のみを定義し、データパーツはすべてのディスクに循環順序で格納されます。このようなポリシーは、複数の類似したディスクがシステムにマウントされているが RAID が構成されていない場合に非常に有用です。個々のディスクドライブは信頼性が高くないため、レプリケーション係数を3以上にして補う必要があることに留意してください。 +この例では、`hdd_in_order` ポリシーは [round-robin](https://en.wikipedia.org/wiki/Round-robin_scheduling) 方式を実装しています。そのため、このポリシーは 1 つのボリューム(`single`)のみを定義し、そのすべてのディスク上にデータパーツをラウンドロビンで保存します。RAID を構成していないものの、同種のディスクが複数台システムにマウントされている場合、このようなポリシーは非常に有用です。各ディスクドライブ単体は信頼性が高くないことに注意し、レプリケーション係数を 3 以上にして補償することを検討してください。 -システムに異なる種類のディスクが利用可能な場合は、代わりに `moving_from_ssd_to_hdd` ポリシーを使用できます。ボリューム `hot` は SSD ディスク(`fast_ssd`)で構成され、このボリュームに格納できるパーツの最大サイズは 1GB です。1GB より大きいサイズのパーツはすべて、HDD ディスク `disk1` を含む `cold` ボリュームに直接格納されます。 -また、ディスク `fast_ssd` が 80% 以上満たされると、バックグラウンドプロセスによってデータが `disk1` に転送されます。 +システムに異なる種類のディスクが存在する場合は、代わりに `moving_from_ssd_to_hdd` ポリシーを使用できます。`hot` ボリュームは SSD ディスク(`fast_ssd`)で構成されており、このボリュームに保存できる 1 パートの最大サイズは 1GB です。サイズが 1GB を超えるすべてのパーツは、HDD ディスク `disk1` を含む `cold` ボリュームに直接保存されます。 +また、ディスク `fast_ssd` の使用率が 80% を超えると、バックグラウンドプロセスによってデータが `disk1` に転送されます。 -ストレージポリシー内のボリューム列挙の順序は、リストされたボリュームの少なくとも1つに明示的な `volume_priority` パラメータがない場合に重要です。 -ボリュームが満杯になると、データは次のボリュームに移動されます。ディスク列挙の順序も重要です。なぜなら、データは順番にディスクに格納されるためです。 +ストレージポリシー内でのボリュームの列挙順序は、列挙されたボリュームのうち少なくとも 1 つに明示的な `volume_priority` パラメータが設定されていない場合に重要です。 +あるボリュームが満杯になると、データは次のボリュームへ移動されます。ディスクの列挙順も同様に重要であり、データはそれらに順番に保存されます。 -テーブルを作成する際、構成されたストレージポリシーの1つを適用できます: +テーブルを作成する際、そのテーブルに対して設定済みストレージポリシーのいずれかを適用できます。 ```sql CREATE TABLE table_with_non_default_policy ( @@ -970,47 +971,45 @@ PARTITION BY toYYYYMM(EventDate) SETTINGS storage_policy = 'moving_from_ssd_to_hdd' ``` -`default` ストレージポリシーは、`` で指定された1つのディスクのみで構成される1つのボリュームのみを使用することを意味します。 -テーブル作成後に [ALTER TABLE ... MODIFY SETTING] クエリでストレージポリシーを変更できますが、新しいポリシーには同じ名前のすべての古いディスクとボリュームを含める必要があります。 - -データパーツのバックグラウンド移動を実行するスレッド数は、[background_move_pool_size](/operations/server-configuration-parameters/settings.md/#background_move_pool_size) 設定で変更できます。 +`default` ストレージポリシーは、`` で指定された 1 つのディスクのみから構成される 1 つのボリュームだけを使用することを意味します。 +テーブル作成後でも [ALTER TABLE ... MODIFY SETTING] クエリを使用してストレージポリシーを変更できますが、新しいポリシーには、同じ名前を持つすべての既存ディスクおよびボリュームを含める必要があります。 -### 詳細 {#details} +データパーツのバックグラウンド移動を実行するスレッド数は、[background_move_pool_size](/operations/server-configuration-parameters/settings.md/#background_move_pool_size) 設定で変更できます。 -`MergeTree` テーブルの場合、データは以下のさまざまな方法でディスクに書き込まれます: -- 挿入の結果として(`INSERT` クエリ)。 -- バックグラウンドマージおよび [ミューテーション](/sql-reference/statements/alter#mutations) 中。 -- 別のレプリカからダウンロードする際。 -- パーティションフリーズの結果として [ALTER TABLE ... FREEZE PARTITION](/sql-reference/statements/alter/partition#freeze-partition)。 +### 詳細 \{#details\} -ミューテーションとパーティションフリーズを除くこれらすべてのケースにおいて、パーツは指定されたストレージポリシーに従ってボリュームとディスクに格納されます: +`MergeTree` テーブルの場合、データは次のようなさまざまな方法でディスクに書き込まれます。 -1. パーツを格納するのに十分なディスク容量(`unreserved_space > current_part_size`)があり、指定されたサイズのパーツの格納を許可する(`max_data_part_size_bytes > current_part_size`)最初のボリューム(定義順)が選択されます。 -2. このボリューム内で、前のデータチャンクの格納に使用されたディスクの次のディスクであり、パーツサイズより大きい空き容量(`unreserved_space - keep_free_space_bytes > current_part_size`)を持つディスクが選択されます。 +- 挿入(`INSERT` クエリ)の結果として。 +- バックグラウンドでのマージおよび[ミューテーション](/sql-reference/statements/alter#mutations)の実行中。 +- 別のレプリカからのダウンロード時。 +- パーティションのフリーズ [ALTER TABLE ... FREEZE PARTITION](/sql-reference/statements/alter/partition#freeze-partition) の結果として。 -内部的には、ミューテーションとパーティションフリーズは [ハードリンク](https://en.wikipedia.org/wiki/Hard_link) を使用します。異なるディスク間のハードリンクはサポートされていないため、このような場合、結果のパーツは初期のパーツと同じディスクに格納されます。 +ミューテーションとパーティションのフリーズを除くすべての場合において、パーツは指定されたストレージポリシーに従ってボリュームおよびディスク上に保存されます。 -バックグラウンドでは、構成ファイルでボリュームが宣言された順序に従って、空き容量(`move_factor` パラメータ)に基づいてパーツがボリューム間で移動されます。 -データは最後のボリュームから最初のボリュームに転送されることはありません。バックグラウンド移動を監視するには、システムテーブル [system.part_log](/operations/system-tables/part_log)(フィールド `type = MOVE_PART`)および [system.parts](/operations/system-tables/parts.md)(フィールド `path` および `disk`)を使用できます。また、詳細情報はサーバーログで確認できます。 +1. パーツを保存するのに十分な空きディスク容量があり(`unreserved_space > current_part_size`)、かつ指定サイズのパーツの保存が許可されている(`max_data_part_size_bytes > current_part_size`)最初のボリューム(定義順)が選択されます。 +2. このボリューム内では、直前のデータチャンクを保存していたディスクの次のディスクであって、かつその空き容量がパーツサイズを上回るもの(`unreserved_space - keep_free_space_bytes > current_part_size`)が選択されます。 -ユーザーは、クエリ [ALTER TABLE ... MOVE PART\|PARTITION ... TO VOLUME\|DISK ...](/sql-reference/statements/alter/partition) を使用して、パーツまたはパーティションをあるボリュームから別のボリュームに強制的に移動できます。バックグラウンド操作のすべての制限が考慮されます。このクエリは独自に移動を開始し、バックグラウンド操作の完了を待ちません。十分な空き容量がない場合、または必要な条件のいずれかが満たされていない場合、ユーザーはエラーメッセージを受け取ります。 +内部的には、ミューテーションとパーティションのフリーズは[ハードリンク](https://en.wikipedia.org/wiki/Hard_link)を利用します。異なるディスク間のハードリンクはサポートされないため、このような場合には結果として生成されるパーツは元のパーツと同じディスク上に保存されます。 -データの移動はデータレプリケーションに干渉しません。したがって、異なるレプリカ上の同じテーブルに対して異なるストレージポリシーを指定できます。 +バックグラウンドでは、設定ファイル内で宣言されたボリュームの順序に従い、空き容量(`move_factor` パラメータ)に基づいてパーツがボリューム間で移動されます。 +最後のボリュームから他のボリュームへの移動および他のボリュームから最初のボリュームへの移動は行われません。バックグラウンドでの移動は、システムテーブル [system.part_log](/operations/system-tables/part_log)(フィールド `type = MOVE_PART`)および [system.parts](/operations/system-tables/parts.md)(フィールド `path` と `disk`)を使用して監視できます。より詳細な情報はサーバーログで確認できます。 +ユーザーは、クエリ [ALTER TABLE ... MOVE PART\|PARTITION ... TO VOLUME\|DISK ...](/sql-reference/statements/alter/partition) を使用して、パーツまたはパーティションをあるボリュームから別のボリュームへ強制的に移動できます。バックグラウンド操作に対するすべての制約が考慮されます。このクエリは独自に移動処理を開始し、バックグラウンド操作の完了を待ちません。必要な空き容量が不足している場合や、必要条件のいずれかが満たされていない場合、ユーザーにはエラーメッセージが返されます。 -バックグラウンドで実行されるマージおよびミューテーションが完了した後、古いパーツは、一定時間(`old_parts_lifetime`)が経過してから削除されます。 -この間、それらは他のボリュームやディスクに移動されません。したがって、パーツが最終的に削除されるまでは、ディスク使用量の算出に引き続き含まれます。 +データの移動はデータレプリケーションの動作を妨げません。そのため、同じテーブルに対しても、レプリカごとに異なるストレージポリシーを指定できます。 -ユーザーは、[min_bytes_to_rebalance_partition_over_jbod](/operations/settings/merge-tree-settings.md/#min_bytes_to_rebalance_partition_over_jbod) 設定を使用することで、新しい大きなパーツを [JBOD](https://en.wikipedia.org/wiki/Non-RAID_drive_architectures) ボリューム内の複数ディスクにバランス良く割り当てることができます。 +バックグラウンドでのマージおよびミューテーションが完了した後、古いパーツは一定時間(`old_parts_lifetime`)経過してから削除されます。 +この期間中、それらのパーツは他のボリュームやディスクには移動されません。したがってパーツが最終的に削除されるまでは、使用中ディスク容量の計算に引き続き含まれます。 +ユーザーは、[JBOD](https://en.wikipedia.org/wiki/Non-RAID_drive_architectures) ボリュームの複数ディスクに新しい大きなパーツをバランス良く割り当てるために、設定 [min_bytes_to_rebalance_partition_over_jbod](/operations/settings/merge-tree-settings.md/#min_bytes_to_rebalance_partition_over_jbod) を使用できます。 +## データの保存に外部ストレージを使用する -## 外部ストレージを使用したデータ保存 {#table_engine-mergetree-s3} +[MergeTree](/engines/table-engines/mergetree-family/mergetree.md) ファミリーのテーブルエンジンは、それぞれ `s3`、`azure_blob_storage`、`hdfs` タイプのディスクを使用して、データを `S3`、`AzureBlobStorage`、`HDFS` に保存できます。詳細は、[外部ストレージオプションの設定](/operations/storing-data.md/#configuring-external-storage)を参照してください。 -[MergeTree](/engines/table-engines/mergetree-family/mergetree.md)ファミリーのテーブルエンジンは、`s3`、`azure_blob_storage`、`hdfs`のディスクタイプを使用して、それぞれ`S3`、`AzureBlobStorage`、`HDFS`にデータを保存できます。詳細については、[外部ストレージオプションの設定](/operations/storing-data.md/#configuring-external-storage)を参照してください。 - -`s3`タイプのディスクを使用した外部ストレージとしての[S3](https://aws.amazon.com/s3/)の例を以下に示します。 +ディスクタイプ `s3` を使用して [S3](https://aws.amazon.com/s3/) を外部ストレージとして利用する例を以下に示します。 設定マークアップ: @@ -1056,33 +1055,33 @@ SETTINGS storage_policy = 'moving_from_ssd_to_hdd' [外部ストレージオプションの設定](/operations/storing-data.md/#configuring-external-storage)も参照してください。 :::note キャッシュ設定 -ClickHouseバージョン22.3から22.7では異なるキャッシュ設定を使用します。これらのバージョンを使用している場合は、[ローカルキャッシュの使用](/operations/storing-data.md/#using-local-cache)を参照してください。 +ClickHouse バージョン 22.3 から 22.7 までは異なるキャッシュ設定が使用されています。これらのバージョンのいずれかを使用している場合は、[ローカルキャッシュの使用](/operations/storing-data.md/#using-local-cache)を参照してください。 ::: -## 仮想カラム {#virtual-columns} - -- `_part` — パートの名前。 -- `_part_index` — クエリ結果内のパートの連番インデックス。 -- `_part_starting_offset` — クエリ結果内のパートの累積開始行。 -- `_part_offset` — パート内の行番号。 -- `_part_granule_offset` — パート内のグラニュール番号。 -- `_partition_id` — パーティションの名前。 -- `_part_uuid` — 一意のパート識別子(MergeTree設定`assign_part_uuids`が有効な場合)。 -- `_part_data_version` — パートのデータバージョン(最小ブロック番号またはミューテーションバージョンのいずれか)。 -- `_partition_value` — `partition by`式の値(タプル)。 -- `_sample_factor` — サンプリング係数(クエリより)。 -- `_block_number` — 挿入時に割り当てられた行の元のブロック番号。設定`enable_block_number_column`が有効な場合、マージ時に保持される。 -- `_block_offset` — 挿入時に割り当てられたブロック内の元の行番号。設定`enable_block_offset_column`が有効な場合、マージ時に保持される。 -- `_disk_name` — ストレージに使用されるディスク名。 +## 仮想カラム \{#virtual-columns\} +- `_part` — パーツ名。 +- `_part_index` — クエリ結果内でのパーツの連番インデックス番号。 +- `_part_starting_offset` — クエリ結果内でのパーツの累積開始行番号。 +- `_part_offset` — パーツ内での行番号。 +- `_part_granule_offset` — パーツ内でのグラニュール番号。 +- `_partition_id` — パーティション名。 +- `_part_uuid` — 一意のパーツ識別子(MergeTree 設定 `assign_part_uuids` が有効な場合)。 +- `_part_data_version` — パーツのデータバージョン(最小ブロック番号またはミューテーションバージョンのいずれか)。 +- `_partition_value` — `partition by` 式の値(タプル)。 +- `_sample_factor` — クエリで指定されたサンプル係数。 +- `_block_number` — 行に挿入時に割り当てられた元のブロック番号で、`enable_block_number_column` 設定が有効な場合はマージ時も保持される。 +- `_block_offset` — ブロック内の行に挿入時に割り当てられた元の行番号で、`enable_block_offset_column` 設定が有効な場合はマージ時も保持される。 +- `_disk_name` — ストレージで使用されるディスク名。 -## カラム統計 {#column-statistics} +## カラム統計 + -統計の宣言は、`set allow_experimental_statistics = 1`を有効にした場合、`*MergeTree*`ファミリーのテーブルに対する`CREATE`クエリのカラムセクションに記述します。 +`set allow_experimental_statistics = 1` を有効にすると、`*MergeTree*` ファミリーのテーブルに対する `CREATE` クエリの `COLUMNS` セクション内で統計を宣言します。 ```sql CREATE TABLE tab @@ -1094,69 +1093,69 @@ ENGINE = MergeTree ORDER BY a ``` -`ALTER`文を使用して統計を操作することもできます。 +`ALTER` ステートメントを使用して統計情報を変更することもできます。 ```sql ALTER TABLE tab ADD STATISTICS b TYPE TDigest, Uniq; ALTER TABLE tab DROP STATISTICS a; ``` -これらの軽量な統計は、カラム内の値の分布に関する情報を集約します。統計は各パートに保存され、挿入が行われるたびに更新されます。 -統計は、`set allow_statistics_optimize = 1`を有効にした場合にのみ、prewhere最適化に使用できます。 +これらの軽量な統計情報は、列内の値の分布に関する情報を集約します。統計情報は各パートに保存され、挿入が行われるたびに更新されます。 +`set allow_statistics_optimize = 1` を有効にした場合にのみ、PREWHERE 最適化に利用できます。 -### 利用可能なカラム統計のタイプ {#available-types-of-column-statistics} + +### 利用可能な列統計の種類 \{#available-types-of-column-statistics\} - `MinMax` - 数値カラムに対する範囲フィルタの選択性を推定するための、カラムの最小値と最大値です。 + 数値型列に対する範囲フィルターの選択性を推定できるようにする、列の最小値と最大値。 - 構文: `minmax` + 構文: `minmax` - `TDigest` - 数値カラムに対して近似パーセンタイル(例: 90パーセンタイル)を計算できる[TDigest](https://github.com/tdunning/t-digest)スケッチです。 + 数値型列に対して近似パーセンタイル(例: 第90パーセンタイル)を計算できる [TDigest](https://github.com/tdunning/t-digest) スケッチ。 - 構文: `tdigest` + 構文: `tdigest` - `Uniq` - カラムに含まれる個別値の数を推定する[HyperLogLog](https://en.wikipedia.org/wiki/HyperLogLog)スケッチです。 + 列に含まれる異なる値の個数を推定する [HyperLogLog](https://en.wikipedia.org/wiki/HyperLogLog) スケッチ。 - 構文: `uniq` + 構文: `uniq` - `CountMin` - カラム内の各値の出現頻度の近似カウントを提供する[CountMin](https://en.wikipedia.org/wiki/Count%E2%80%93min_sketch)スケッチです。 - - 構文: `countmin` + 列内の各値の出現頻度を近似的にカウントする [CountMin](https://en.wikipedia.org/wiki/Count%E2%80%93min_sketch) スケッチ。 -### サポートされるデータ型 {#supported-data-types} + 構文: `countmin` -| | (U)Int*, Float*, Decimal(_), Date_, Boolean, Enum\* | String or FixedString | -| -------- | --------------------------------------------------- | --------------------- | -| CountMin | ✔ | ✔ | -| MinMax | ✔ | ✗ | -| TDigest | ✔ | ✗ | -| Uniq | ✔ | ✔ | +### サポートされているデータ型 \{#supported-data-types\} -### サポートされる操作 {#supported-operations} +| | (U)Int*, Float*, Decimal(*), Date*, Boolean, Enum* | String または FixedString | +|-----------|----------------------------------------------------|---------------------------| +| CountMin | ✔ | ✔ | +| MinMax | ✔ | ✗ | +| TDigest | ✔ | ✗ | +| Uniq | ✔ | ✔ | -| | 等価フィルタ (==) | 範囲フィルタ (`>, >=, <, <=`) | -| -------- | --------------------- | ------------------------------ | -| CountMin | ✔ | ✗ | -| MinMax | ✗ | ✔ | -| TDigest | ✗ | ✔ | -| Uniq | ✔ | ✗ | +### サポートされる操作 \{#supported-operations\} +| | 等値フィルター (==) | 範囲フィルター (`>, >=, <, <=`) | +|-----------|---------------------|------------------------------| +| CountMin | ✔ | ✗ | +| MinMax | ✗ | ✔ | +| TDigest | ✗ | ✔ | +| Uniq | ✔ | ✗ | -## カラムレベルの設定 {#column-level-settings} +## 列レベルの設定 -特定のMergeTree設定はカラムレベルで上書きできます: +一部の MergeTree の設定は列レベルで上書きできます。 -- `max_compress_block_size` — テーブルへの書き込み時に圧縮する前の非圧縮データブロックの最大サイズ。 -- `min_compress_block_size` — 次のマークを書き込む際に圧縮に必要な非圧縮データブロックの最小サイズ。 +* `max_compress_block_size` — テーブルに書き込む際に、圧縮前のデータブロックの最大サイズ。 +* `min_compress_block_size` — 次のマークを書き込む際に圧縮を行うために必要となる、圧縮前のデータブロックの最小サイズ。 -例: +例: ```sql CREATE TABLE tab @@ -1168,21 +1167,21 @@ ENGINE = MergeTree ORDER BY id ``` -カラムレベルの設定は[ALTER MODIFY COLUMN](/sql-reference/statements/alter/column.md)を使用して変更または削除できます。例: +カラムレベルの設定は、たとえば [ALTER MODIFY COLUMN](/sql-reference/statements/alter/column.md) を使用して変更または削除できます。 -- カラム宣言から`SETTINGS`を削除する: +* カラム定義の `SETTINGS` を削除する: ```sql ALTER TABLE tab MODIFY COLUMN document REMOVE SETTINGS; ``` -- 設定を変更する: +* 設定を変更します: ```sql ALTER TABLE tab MODIFY COLUMN document MODIFY SETTING min_compress_block_size = 8192; ``` -- 1つ以上の設定をリセットする。これによりテーブルのCREATEクエリのカラム式における設定宣言も削除されます。 +* 1 つ以上の設定をリセットします。また、テーブルの CREATE クエリの列式から設定宣言も削除します。 ```sql ALTER TABLE tab MODIFY COLUMN document RESET SETTING min_compress_block_size; diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/alias.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/alias.md index 0a81e922891..331387416fb 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/alias.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/alias.md @@ -1,5 +1,5 @@ --- -description: 'Alias テーブルエンジンは、別のテーブルへの透過的なプロキシを作成します。すべての操作は対象テーブルに委譲され、Alias 自体にはデータは保持されません。' +description: 'Alias テーブルエンジンは、別のテーブルへの透過的なプロキシとして機能します。すべての操作は対象テーブルに転送され、エイリアス自体はデータを保持しません。' sidebar_label: 'Alias' sidebar_position: 5 slug: /engines/table-engines/special/alias @@ -7,22 +7,30 @@ title: 'Alias テーブルエンジン' doc_type: 'reference' --- +import ExperimentalBadge from '@theme/badges/ExperimentalBadge'; # Alias テーブルエンジン -`Alias` エンジンは、別のテーブルへのプロキシを作成するテーブルエンジンです。すべての読み取りおよび書き込み操作は対象テーブルに転送され、エイリアス自体はデータを保持せず、対象テーブルへの参照のみを保持します。 + +`Alias` エンジンは、別のテーブルへのプロキシを作成します。すべての読み取りおよび書き込み操作は対象テーブルに転送され、エイリアス自体はデータを保持せず、対象テーブルへの参照のみを保持します。 +:::info +これは実験的な機能であり、将来のリリースで後方互換性を損なう形で変更される可能性があります。 +`Alias` テーブルエンジンを使用するには、 +[allow_experimental_alias_table_engine](/operations/settings/settings#allow_experimental_alias_table_engine) 設定を有効にしてください。 +次のコマンドを実行します: `set allow_experimental_alias_table_engine = 1`。 +::: -## テーブルを作成する +## テーブルの作成 ```sql CREATE TABLE [db_name.]alias_name ENGINE = Alias(target_table) ``` -または、データベース名を明示的に指定して: +または、データベース名を明示的に指定する場合: ```sql CREATE TABLE [db_name.]alias_name @@ -30,53 +38,50 @@ ENGINE = Alias(target_db, target_table) ``` :::note -`Alias` テーブルでは、カラムを明示的に定義することはできません。カラムは自動的に対象テーブルから継承されます。これにより、エイリアスは常に対象テーブルのスキーマと一致することが保証されます。 +`Alias` テーブルでは、明示的な列定義を行うことはできません。列はターゲットテーブルから自動的に継承されます。これにより、エイリアスは常にターゲットテーブルのスキーマと一致します。 ::: ## エンジンパラメータ {#engine-parameters} -- **`target_db (optional)`** — 対象テーブルを含むデータベース名。 -- **`target_table`** — 対象テーブル名。 - +- **`target_db (optional)`** — 対象テーブルを含むデータベースの名前(省略可能)。 +- **`target_table`** — 対象テーブルの名前。 - -## サポートされる操作 {#supported-operations} +## サポートされている操作 {#supported-operations} `Alias` テーブルエンジンは、主要な操作をすべてサポートします。 -### 対象テーブルへの操作 {#operations-on-target} -これらの操作は、エイリアスを介して対象テーブルに対して実行されます: +### ターゲットテーブルに対する操作 {#operations-on-target} + +これらの操作はターゲットテーブルに対してプロキシ経由で実行されます: | Operation | Support | Description | |-----------|---------|-------------| -| `SELECT` | ✅ | 対象テーブルからデータを読み取る | -| `INSERT` | ✅ | 対象テーブルにデータを書き込む | -| `INSERT SELECT` | ✅ | 対象テーブルへのバッチ挿入を行う | -| `ALTER TABLE ADD COLUMN` | ✅ | 対象テーブルにカラムを追加する | -| `ALTER TABLE MODIFY SETTING` | ✅ | 対象テーブルの設定を変更する | -| `ALTER TABLE PARTITION` | ✅ | 対象テーブルに対するパーティション操作 (DETACH/ATTACH/DROP) を行う | -| `ALTER TABLE UPDATE` | ✅ | 対象テーブル内の行を更新する (ミューテーション) | -| `ALTER TABLE DELETE` | ✅ | 対象テーブルから行を削除する (ミューテーション) | -| `OPTIMIZE TABLE` | ✅ | 対象テーブルを最適化する (パーツをマージする) | -| `TRUNCATE TABLE` | ✅ | 対象テーブルを空にする | +| `SELECT` | ✅ | ターゲットテーブルからデータを読み取る | +| `INSERT` | ✅ | ターゲットテーブルにデータを書き込む | +| `INSERT SELECT` | ✅ | ターゲットテーブルへのバッチ挿入を行う | +| `ALTER TABLE ADD COLUMN` | ✅ | ターゲットテーブルに列を追加する | +| `ALTER TABLE MODIFY SETTING` | ✅ | ターゲットテーブルの設定を変更する | +| `ALTER TABLE PARTITION` | ✅ | ターゲットに対するパーティション操作 (DETACH/ATTACH/DROP) を行う | +| `ALTER TABLE UPDATE` | ✅ | ターゲットテーブルの行を更新する (mutation) | +| `ALTER TABLE DELETE` | ✅ | ターゲットテーブルから行を削除する (mutation) | +| `OPTIMIZE TABLE` | ✅ | ターゲットテーブルを最適化する (パートをマージ) | +| `TRUNCATE TABLE` | ✅ | ターゲットテーブルを空にする | -### `Alias` 自体への操作 {#operations-on-alias} +### エイリアス自体への操作 {#operations-on-alias} -これらの操作はエイリアスのみに影響し、対象テーブルには **影響しません**: +これらの操作はエイリアスのみに作用し、ターゲットテーブルには**影響しません**。 | Operation | Support | Description | |-----------|---------|-------------| -| `DROP TABLE` | ✅ | エイリアスのみを削除し、対象テーブルは変更されない | -| `RENAME TABLE` | ✅ | エイリアスの名前のみを変更し、対象テーブルは変更されない | +| `DROP TABLE` | ✅ | エイリアスのみを削除し、ターゲットテーブルには変更が加わらない | +| `RENAME TABLE` | ✅ | エイリアスの名前だけを変更し、ターゲットテーブルには変更が加わらない | - - -## 使用例 +## 使用例 {#usage-examples} ### 基本的なエイリアスの作成 -同じデータベース内にシンプルなエイリアスを作成します。 +同一データベース内で簡単なエイリアスを作成します。 ```sql -- ソーステーブルを作成 @@ -93,7 +98,7 @@ INSERT INTO source_data VALUES (1, 'one', 10.1), (2, 'two', 20.2); -- エイリアスを作成 CREATE TABLE data_alias ENGINE = Alias('source_data'); --- エイリアス経由でクエリを実行 +-- エイリアス経由でクエリ SELECT * FROM data_alias; ``` @@ -104,9 +109,10 @@ SELECT * FROM data_alias; └────┴──────┴───────┘ ``` + ### データベース間エイリアス -別のデータベース内のテーブルを指すエイリアスを作成します: +別のデータベース内のテーブルを参照するエイリアスを作成します。 ```sql -- データベースを作成 @@ -127,14 +133,15 @@ CREATE TABLE db2.events_alias ENGINE = Alias('db1', 'events'); -- またはdatabase.table形式を使用 CREATE TABLE db2.events_alias2 ENGINE = Alias('db1.events'); --- 両方のエイリアスは同一に動作 +-- どちらのエイリアスも同じように動作します INSERT INTO db2.events_alias VALUES (now(), 'click', 100); SELECT * FROM db2.events_alias2; ``` -### エイリアス経由の書き込み操作 -すべての書き込み操作はターゲットテーブルに転送されます。 +### エイリアス経由での書き込み操作 + +すべての書き込みはターゲットテーブルに転送されます。 ```sql CREATE TABLE metrics ( @@ -146,7 +153,7 @@ ORDER BY ts; CREATE TABLE metrics_alias ENGINE = Alias('metrics'); --- エイリアスを介して挿入 +-- エイリアス経由で挿入 INSERT INTO metrics_alias VALUES (now(), 'cpu_usage', 45.2), (now(), 'memory_usage', 78.5); @@ -162,9 +169,10 @@ SELECT count() FROM metrics; -- 7を返す SELECT count() FROM metrics_alias; -- 7を返す ``` + ### スキーマの変更 -`ALTER` 操作は対象テーブルのスキーマを変更します。 +ALTER 操作は対象テーブルのスキーマを変更します。 ```sql CREATE TABLE users ( @@ -190,9 +198,10 @@ DESCRIBE users; └───────┴────────┴──────────────┴────────────────────┘ ``` + ### データの変更 -`UPDATE` および `DELETE` 操作がサポートされています。 +UPDATE 文および DELETE 文がサポートされています。 ```sql CREATE TABLE products ( @@ -216,7 +225,7 @@ ALTER TABLE products_alias UPDATE price = price * 1.1 WHERE status = 'active'; -- エイリアス経由で削除 ALTER TABLE products_alias DELETE WHERE status = 'inactive'; --- 変更は対象テーブルに適用されます +-- 変更は対象テーブルに適用される SELECT * FROM products ORDER BY id; ``` @@ -227,10 +236,10 @@ SELECT * FROM products ORDER BY id; └────┴──────────┴───────┴────────┘ ``` -### パーティション操作 -パーティション化されたテーブルでは、パーティション操作はフォワードされます。 +### パーティション操作 +パーティション化されたテーブルでは、パーティション操作はそのまま伝播されます。 ```sql CREATE TABLE logs ( @@ -259,9 +268,10 @@ ALTER TABLE logs_alias ATTACH PARTITION '202402'; SELECT count() FROM logs_alias; -- 3を返す ``` -### テーブルの最適化 -ターゲットテーブルに対するパーツのマージ処理を最適化します。 +### テーブル最適化 + +ターゲットテーブル内のパーツをマージする処理を最適化します。 ```sql CREATE TABLE events ( @@ -272,30 +282,31 @@ ORDER BY id; CREATE TABLE events_alias ENGINE = Alias('events'); --- 複数の挿入により複数のパートが作成されます +-- 複数の INSERT により複数のパートが作成される INSERT INTO events_alias VALUES (1, 'data1'); INSERT INTO events_alias VALUES (2, 'data2'); INSERT INTO events_alias VALUES (3, 'data3'); --- パート数を確認します +-- パート数を確認 SELECT count() FROM system.parts WHERE database = currentDatabase() AND table = 'events' AND active; --- エイリアス経由で最適化します +-- エイリアス経由で最適化 OPTIMIZE TABLE events_alias FINAL; --- ターゲットテーブルでパートがマージされます +-- ターゲットテーブルでパートがマージされる SELECT count() FROM system.parts WHERE database = currentDatabase() AND table = 'events' - AND active; -- 1を返します + AND active; -- 1 を返す ``` + ### エイリアスの管理 -エイリアスは個別に名前を変更したり削除したりできます。 +エイリアスはそれぞれ独立して名前を変更したり削除したりできます。 ```sql CREATE TABLE important_data ( @@ -308,15 +319,15 @@ INSERT INTO important_data VALUES (1, 'critical'), (2, 'important'); CREATE TABLE old_alias ENGINE = Alias('important_data'); --- エイリアスの名前を変更(ターゲットテーブルは変更されません) +-- エイリアスの名前を変更(対象テーブルは変更されません) RENAME TABLE old_alias TO new_alias; -- 同じテーブルに別のエイリアスを作成 CREATE TABLE another_alias ENGINE = Alias('important_data'); --- エイリアスを1つ削除(ターゲットテーブルと他のエイリアスは変更されません) +-- エイリアスを1つ削除(対象テーブルと他のエイリアスは変更されません) DROP TABLE new_alias; -SELECT * FROM another_alias; -- 引き続き機能します +SELECT * FROM another_alias; -- 引き続き動作します SELECT count() FROM important_data; -- データは保持されており、2を返します ``` diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/index.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/index.md index e6134f97d1c..45fe0855d7f 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/index.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/index.md @@ -3,7 +3,7 @@ description: '特殊なテーブルエンジンに関するドキュメント' sidebar_label: '特殊' sidebar_position: 50 slug: /engines/table-engines/special/ -title: '特殊テーブルエンジン' +title: '特殊なテーブルエンジン' doc_type: 'reference' --- @@ -11,42 +11,20 @@ doc_type: 'reference' # 特殊なテーブルエンジン -テーブルエンジンには、主に次の 3 つのカテゴリがあります。 - -* 本番利用向けの [MergeTree エンジンファミリー](../../../engines/table-engines/mergetree-family/index.md)。 -* 小規模な一時データ向けの [Log エンジンファミリー](../../../engines/table-engines/log-family/index.md)。 -* [連携用テーブルエンジン](../../../engines/table-engines/integrations/index.md)。 - -それ以外のエンジンは用途が固有で、まだファミリーとしてグループ化されていないため、この「特殊」カテゴリに分類されています。 - -{/* このページの目次テーブルは、 - https://github.com/ClickHouse/clickhouse-docs/blob/main/scripts/autogenerate-table-of-contents.sh - によって、YAML フロントマターのフィールド slug、description、title から自動生成されています。 - - 誤りに気付いた場合は、該当ページの YML フロントマターを編集してください。 - */ } - - -{/*AUTOGENERATED_START*/ } - -| Page | 説明 | -| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | -| [Alias table engine](/engines/table-engines/special/alias) | Alias テーブルエンジンは、別のテーブルへの透過的なプロキシを作成します。すべての操作は対象テーブルに転送され、エイリアス自体はデータを保持しません。 | -| [Distributed table engine](/engines/table-engines/special/distributed) | Distributed エンジンを持つテーブルは自身のデータを一切保持しませんが、複数サーバー上での分散クエリ処理を可能にします。読み取りは自動的に並列化されます。読み取り時には、存在する場合はリモートサーバー上のテーブルインデックスが使用されます。 | -| [Dictionary table engine](/engines/table-engines/special/dictionary) | `Dictionary` エンジンは、辞書データを ClickHouse テーブルとして表示します。 | -| [Merge table engine](/engines/table-engines/special/merge) | `Merge` エンジン(`MergeTree` と混同しないでください)は自体ではデータを保存しませんが、任意の数の他のテーブルから同時に読み取ることを可能にします。 | -| [Executable and ExecutablePool table engines](/engines/table-engines/special/executable) | `Executable` および `ExecutablePool` テーブルエンジンを使用すると、(行を **stdout** に書き出すことで)定義したスクリプトから行が生成されるテーブルを定義できます。 | -| [File table engine](/engines/table-engines/special/file) | File テーブルエンジンは、サポートされているファイル形式(`TabSeparated`、`Native` など)のいずれかでデータをファイル内に保持します。 | -| [Null table engine](/engines/table-engines/special/null) | `Null` テーブルに書き込むと、データは破棄されます。`Null` テーブルから読み取ると、レスポンスは空になります。 | -| [Set table engine](/engines/table-engines/special/set) | 常に RAM 上に存在するデータセットです。`IN` 演算子の右側での使用を意図しています。 | -| [Join table engine](/engines/table-engines/special/join) | JOIN 演算で使用するためのオプションの事前構築済みデータ構造です。 | -| [URL table engine](/engines/table-engines/special/url) | リモートの HTTP/HTTPS サーバーとの間でデータをクエリします。このエンジンは File エンジンに似ています。 | -| [View table engine](/engines/table-engines/special/view) | ビューを実装するために使用されます(詳細は `CREATE VIEW query` を参照してください)。データは保存せず、指定された `SELECT` クエリのみを保持します。テーブルから読み取るときには、このクエリを実行し(クエリから不要なカラムをすべて削除します)。 | -| [Memory table engine](/engines/table-engines/special/memory) | Memory エンジンは、データを RAM 上に非圧縮形式で保存します。データは、読み出す際にも受信時とまったく同じ形式のまま保持されます。言い換えると、このテーブルからの読み取りには一切の追加処理が発生しません。 | -| [Buffer table engine](/engines/table-engines/special/buffer) | 書き込み対象のデータを RAM 上でバッファリングし、定期的に別のテーブルへフラッシュします。読み取り操作時には、バッファともう一方のテーブルの両方から同時にデータが読み取られます。 | -| [External data for query processing](/engines/table-engines/special/external-data) | ClickHouse では、`SELECT` クエリと一緒に、クエリを処理するために必要なデータをサーバーに送信できます。このデータは一時テーブルに格納され、クエリ内で(たとえば `IN` 演算子で)使用できます。 | -| [GenerateRandom table engine](/engines/table-engines/special/generate) | GenerateRandom テーブルエンジンは、指定されたテーブルスキーマに対してランダムなデータを生成します。 | -| [KeeperMap table engine](/engines/table-engines/special/keeper-map) | このエンジンを使用すると、Keeper/ZooKeeper クラスタを、一貫性のあるキー・バリュー・ストアとして、線形化可能な書き込みと逐次一貫性を持つ読み取りで利用できます。 | -| [FileLog table engine](/engines/table-engines/special/filelog) | このエンジンを使用すると、アプリケーションのログファイルをレコードストリームとして処理できます。 | - -{/*AUTOGENERATED_END*/ } +テーブルエンジンには主に3つのカテゴリがあります: + +- 本番環境での主要な用途向けの[MergeTreeエンジンファミリー](../../../engines/table-engines/mergetree-family/index.md) +- 小規模な一時データ向けの[Logエンジンファミリー](../../../engines/table-engines/log-family/index.md) +- [統合用のテーブルエンジン](../../../engines/table-engines/integrations/index.md) + +残りのエンジンはその用途が独自であり、まだファミリーにグループ化されていないため、この「特殊」カテゴリに分類されています。 + + + + + diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_deb_install.md b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_deb_install.md index ff1d2595a4b..dd094b4ac40 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_deb_install.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_deb_install.md @@ -1,6 +1,8 @@ import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; + + # Debian/UbuntuへのClickHouseのインストール {#install-from-deb-packages} > **Debian**または**Ubuntu**では、公式のプリコンパイル済み`deb`パッケージの使用を推奨します。 @@ -17,18 +19,28 @@ ClickHouse をインストールするには、次のコマンドを実行しま ```bash # 前提パッケージをインストール sudo apt-get install -y apt-transport-https ca-certificates curl gnupg +``` + # ClickHouse の GPG キーをダウンロードしてキーリングに保存する curl -fsSL 'https://packages.clickhouse.com/rpm/lts/repodata/repomd.xml.key' | sudo gpg --dearmor -o /usr/share/keyrings/clickhouse-keyring.gpg + + # システムのアーキテクチャを取得する ARCH=$(dpkg --print-architecture) + + # ClickHouse リポジトリを apt のソースリストに追加する echo "deb [signed-by=/usr/share/keyrings/clickhouse-keyring.gpg arch=${ARCH}] https://packages.clickhouse.com/deb stable main" | sudo tee /etc/apt/sources.list.d/clickhouse.list + + # apt パッケージリストを更新する + sudo apt-get update + ``` - 必要に応じて、`stable`を`lts`に置き換えることで、異なる[リリース種別](/knowledgebase/production)を使用できます。 @@ -36,32 +48,49 @@ sudo apt-get update
debパッケージをインストールする旧ディストリビューション方式 +``` + ```bash # 前提パッケージのインストール sudo apt-get install apt-transport-https ca-certificates dirmngr +``` + # パッケージの認証に使用する ClickHouse の GPG キーを追加する sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 8919F6BD2B48D754 + + # APT のソースリストに ClickHouse リポジトリを追加する echo "deb https://packages.clickhouse.com/deb stable main" | sudo tee \ /etc/apt/sources.list.d/clickhouse.list + + # apt パッケージリストを更新 sudo apt-get update + + # ClickHouse サーバーおよびクライアントのパッケージをインストールする sudo apt-get install -y clickhouse-server clickhouse-client + + # ClickHouse サーバーのサービスを起動する sudo service clickhouse-server start + + # ClickHouse コマンドラインクライアントを起動する -clickhouse-client # パスワードを設定している場合は "clickhouse-client --password" を使用します。 + +clickhouse-client # パスワードを設定している場合は "clickhouse-client --password" を使用します。 + ```
+``` ## ClickHouse サーバーとクライアントのインストール @@ -131,7 +160,6 @@ sudo systemctl status clickhouse-keeper | `clickhouse-keeper` | 専用の ClickHouse Keeper ノードに ClickHouse Keeper をインストールするために使用します。ClickHouse server と同じサーバー上で ClickHouse Keeper を実行している場合、このパッケージをインストールする必要はありません。ClickHouse Keeper 本体とデフォルトの ClickHouse Keeper 設定ファイルをインストールします。 |
- :::info 特定のバージョンの ClickHouse をインストールする必要がある場合は、同じバージョンのパッケージをすべてインストールする必要があります: `sudo apt-get install clickhouse-server=21.8.5.7 clickhouse-client=21.8.5.7 clickhouse-common-static=21.8.5.7` diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/install/debian_ubuntu.md b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/install/debian_ubuntu.md index f1036c846c6..61f9992212b 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/install/debian_ubuntu.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/install/debian_ubuntu.md @@ -10,4 +10,4 @@ doc_type: 'guide' import DebianProd from './_snippets/_deb_install.md' - + diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/asyncinserts.md b/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/asyncinserts.md index fc09fb000b3..8b95ee660b3 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/asyncinserts.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/asyncinserts.md @@ -7,6 +7,6 @@ doc_type: 'guide' keywords: ['非同期挿入', 'async_insert', 'ベストプラクティス', 'データのバッチ処理', 'パフォーマンス最適化'] --- -import Content from '@site/i18n/jp/docusaurus-plugin-content-docs/current/best-practices/_snippets/_async_inserts.md'; +import Content from '@site/docs/best-practices/_snippets/_async_inserts.md'; diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/avoidmutations.md b/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/avoidmutations.md index b9ed7a3cc8c..e1c375e61de 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/avoidmutations.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/avoidmutations.md @@ -7,6 +7,6 @@ doc_type: 'guide' keywords: ['ミューテーションを避ける', 'ALTER クエリ', 'テーブルデータ変更', 'ベストプラクティス', 'パフォーマンス最適化'] --- -import Content from '@site/i18n/jp/docusaurus-plugin-content-docs/current/best-practices/_snippets/_avoid_mutations.md'; +import Content from '@site/docs/best-practices/_snippets/_avoid_mutations.md'; diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/avoidnullablecolumns.md b/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/avoidnullablecolumns.md index c473893e79a..def00256fb3 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/avoidnullablecolumns.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/avoidnullablecolumns.md @@ -7,6 +7,6 @@ doc_type: 'guide' keywords: ['Nullable 列を避ける', 'Nullable 列', 'データ型', 'ベストプラクティス', 'パフォーマンス最適化'] --- -import Content from '@site/i18n/jp/docusaurus-plugin-content-docs/current/best-practices/_snippets/_avoid_nullable_columns.md'; +import Content from '@site/docs/best-practices/_snippets/_avoid_nullable_columns.md'; diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/avoidoptimizefinal.md b/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/avoidoptimizefinal.md index e8bdd59e884..ca3d6846970 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/avoidoptimizefinal.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/avoidoptimizefinal.md @@ -7,6 +7,6 @@ doc_type: 'guide' keywords: ['OPTIMIZE FINAL の回避', 'OPTIMIZE TABLE FINAL', 'ベストプラクティス', 'データパーツのマージ', 'パフォーマンス最適化'] --- -import Content from '@site/i18n/jp/docusaurus-plugin-content-docs/current/best-practices/_snippets/_avoid_optimize_final.md'; +import Content from '@site/docs/best-practices/_snippets/_avoid_optimize_final.md'; diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/bulkinserts.md b/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/bulkinserts.md index 8b2ae8bc6fc..a5c0b337d6d 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/bulkinserts.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/bulkinserts.md @@ -7,6 +7,6 @@ keywords: ['バルクインサート', 'バッチインサート', 'INSERT の doc_type: 'guide' --- -import Content from '@site/i18n/jp/docusaurus-plugin-content-docs/current/best-practices/_snippets/_bulk_inserts.md'; +import Content from '@site/docs/best-practices/_snippets/_bulk_inserts.md'; diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/partitioningkey.md b/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/partitioningkey.md index 527c82e61f0..653bb08bfac 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/partitioningkey.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/partitioningkey.md @@ -7,6 +7,6 @@ doc_type: 'guide' keywords: ['パーティショニング', 'パーティションキー', 'データの整理', 'ベストプラクティス', 'パフォーマンス'] --- -import Content from '@site/i18n/jp/docusaurus-plugin-content-docs/current/best-practices/partitioning_keys.mdx'; +import Content from '@site/docs/best-practices/partitioning_keys.mdx'; diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/guides/developer/lightweight-delete.md b/i18n/jp/docusaurus-plugin-content-docs/current/guides/developer/lightweight-delete.md index fe64ef15a3e..7c414e8ca90 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/guides/developer/lightweight-delete.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/guides/developer/lightweight-delete.md @@ -6,6 +6,6 @@ description: 'ClickHouse における軽量削除の概要' doc_type: 'reference' --- -import Content from '@site/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/statements/delete.md'; +import Content from '@site/docs/sql-reference/statements/delete.md'; diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/apache-beam.md b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/apache-beam.md deleted file mode 100644 index e4845093cce..00000000000 --- a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/apache-beam.md +++ /dev/null @@ -1,153 +0,0 @@ ---- -sidebar_label: 'Apache Beam' -slug: /integrations/apache-beam -description: 'Apache Beam を使用して ClickHouse にデータを取り込む' -title: 'Apache Beam と ClickHouse の統合' -doc_type: 'guide' -integration: - - support_level: 'core' - - category: 'data_ingestion' -keywords: ['apache beam', 'stream processing', 'batch processing', 'jdbc connector', 'data pipeline'] ---- - -import ClickHouseSupportedBadge from '@theme/badges/ClickHouseSupported'; - -# Apache Beam と ClickHouse の統合 - - - -**Apache Beam** は、開発者がバッチ処理とストリーム(連続)データ処理パイプラインの両方を定義および実行できるオープンソースの統一プログラミングモデルです。Apache Beam の柔軟性は、ETL(抽出、変換、ロード)操作から複雑なイベント処理やリアルタイム分析まで、幅広いデータ処理シナリオをサポートできる点にあります。 -この統合では、基盤となる挿入レイヤーに ClickHouse の公式 [JDBC コネクタ](https://github.com/ClickHouse/clickhouse-java)を使用しています。 - -## 統合パッケージ {#integration-package} - -Apache Beam と ClickHouse を統合するために必要な統合パッケージは、[Apache Beam I/O Connectors](https://beam.apache.org/documentation/io/connectors/) — 多くの人気のあるデータストレージシステムやデータベースの統合バンドル — の下で保守および開発されています。 -`org.apache.beam.sdk.io.clickhouse.ClickHouseIO` の実装は [Apache Beam リポジトリ](https://github.com/apache/beam/tree/0bf43078130d7a258a0f1638a921d6d5287ca01e/sdks/java/io/clickhouse/src/main/java/org/apache/beam/sdk/io/clickhouse)内にあります。 - -## Apache Beam ClickHouse パッケージのセットアップ {#setup-of-the-apache-beam-clickhouse-package} - -### パッケージのインストール {#package-installation} - -パッケージ管理フレームワークに次の依存関係を追加します: -```xml - - org.apache.beam - beam-sdks-java-io-clickhouse - ${beam.version} - -``` - -:::important 推奨される Beam バージョン -`ClickHouseIO` コネクタは、Apache Beam バージョン `2.59.0` 以降での使用を推奨しています。 -それ以前のバージョンでは、コネクタの機能を完全にサポートしていない可能性があります。 -::: - -アーティファクトは[公式 Maven リポジトリ](https://mvnrepository.com/artifact/org.apache.beam/beam-sdks-java-io-clickhouse)で見つけることができます。 - -### コード例 {#code-example} - -次の例では、`input.csv` という名前の CSV ファイルを `PCollection` として読み込み、それを(定義されたスキーマを使用して)Row オブジェクトに変換し、`ClickHouseIO` を使用してローカルの ClickHouse インスタンスに挿入します: - -```java - -package org.example; - -import org.apache.beam.sdk.Pipeline; -import org.apache.beam.sdk.io.TextIO; -import org.apache.beam.sdk.io.clickhouse.ClickHouseIO; -import org.apache.beam.sdk.schemas.Schema; -import org.apache.beam.sdk.transforms.DoFn; -import org.apache.beam.sdk.transforms.ParDo; -import org.apache.beam.sdk.values.PCollection; -import org.apache.beam.sdk.values.Row; -import org.joda.time.DateTime; - -public class Main { - - public static void main(String[] args) { - // Create a Pipeline object. - Pipeline p = Pipeline.create(); - - Schema SCHEMA = - Schema.builder() - .addField(Schema.Field.of("name", Schema.FieldType.STRING).withNullable(true)) - .addField(Schema.Field.of("age", Schema.FieldType.INT16).withNullable(true)) - .addField(Schema.Field.of("insertion_time", Schema.FieldType.DATETIME).withNullable(false)) - .build(); - - // Apply transforms to the pipeline. - PCollection lines = p.apply("ReadLines", TextIO.read().from("src/main/resources/input.csv")); - - PCollection rows = lines.apply("ConvertToRow", ParDo.of(new DoFn() { - @ProcessElement - public void processElement(@Element String line, OutputReceiver out) { - - String[] values = line.split(","); - Row row = Row.withSchema(SCHEMA) - .addValues(values[0], Short.parseShort(values[1]), DateTime.now()) - .build(); - out.output(row); - } - })).setRowSchema(SCHEMA); - - rows.apply("Write to ClickHouse", - ClickHouseIO.write("jdbc:clickhouse://localhost:8123/default?user=default&password=******", "test_table")); - - // Run the pipeline. - p.run().waitUntilFinish(); - } -} - -``` - -## サポートされているデータ型 {#supported-data-types} - -| ClickHouse | Apache Beam | サポート状況 | 備考 | -|------------------------------------|----------------------------|--------------|------------------------------------------------------------------------------------------------------------------------------------------| -| `TableSchema.TypeName.FLOAT32` | `Schema.TypeName#FLOAT` | ✅ | | -| `TableSchema.TypeName.FLOAT64` | `Schema.TypeName#DOUBLE` | ✅ | | -| `TableSchema.TypeName.INT8` | `Schema.TypeName#BYTE` | ✅ | | -| `TableSchema.TypeName.INT16` | `Schema.TypeName#INT16` | ✅ | | -| `TableSchema.TypeName.INT32` | `Schema.TypeName#INT32` | ✅ | | -| `TableSchema.TypeName.INT64` | `Schema.TypeName#INT64` | ✅ | | -| `TableSchema.TypeName.STRING` | `Schema.TypeName#STRING` | ✅ | | -| `TableSchema.TypeName.UINT8` | `Schema.TypeName#INT16` | ✅ | | -| `TableSchema.TypeName.UINT16` | `Schema.TypeName#INT32` | ✅ | | -| `TableSchema.TypeName.UINT32` | `Schema.TypeName#INT64` | ✅ | | -| `TableSchema.TypeName.UINT64` | `Schema.TypeName#INT64` | ✅ | | -| `TableSchema.TypeName.DATE` | `Schema.TypeName#DATETIME` | ✅ | | -| `TableSchema.TypeName.DATETIME` | `Schema.TypeName#DATETIME` | ✅ | | -| `TableSchema.TypeName.ARRAY` | `Schema.TypeName#ARRAY` | ✅ | | -| `TableSchema.TypeName.ENUM8` | `Schema.TypeName#STRING` | ✅ | | -| `TableSchema.TypeName.ENUM16` | `Schema.TypeName#STRING` | ✅ | | -| `TableSchema.TypeName.BOOL` | `Schema.TypeName#BOOLEAN` | ✅ | | -| `TableSchema.TypeName.TUPLE` | `Schema.TypeName#ROW` | ✅ | | -| `TableSchema.TypeName.FIXEDSTRING` | `FixedBytes` | ✅ | `FixedBytes` は、
`org.apache.beam.sdk.schemas.logicaltypes` にある、
固定長バイト配列を表す `LogicalType` です | -| | `Schema.TypeName#DECIMAL` | ❌ | | -| | `Schema.TypeName#MAP` | ❌ | | - -## ClickHouseIO.Write パラメータ {#clickhouseiowrite-parameters} - -次のセッター関数を使用して、`ClickHouseIO.Write` の構成を調整できます: - -| パラメータセッター関数 | 引数の型 | デフォルト値 | 説明 | -|-----------------------------|-----------------------------|-------------------------------|-----------------------------------------------------------------| -| `withMaxInsertBlockSize` | `(long maxInsertBlockSize)` | `1000000` | 挿入する行のブロックの最大サイズ。 | -| `withMaxRetries` | `(int maxRetries)` | `5` | 挿入失敗時の最大リトライ回数。 | -| `withMaxCumulativeBackoff` | `(Duration maxBackoff)` | `Duration.standardDays(1000)` | リトライ時の最大累積バックオフ期間。 | -| `withInitialBackoff` | `(Duration initialBackoff)` | `Duration.standardSeconds(5)` | 最初のリトライ前の初期バックオフ期間。 | -| `withInsertDistributedSync` | `(Boolean sync)` | `true` | true の場合、分散テーブルへの挿入操作を同期します。 | -| `withInsertQuorum` | `(Long quorum)` | `null` | 挿入操作を確認するために必要なレプリカの数。 | -| `withInsertDeduplicate` | `(Boolean deduplicate)` | `true` | true の場合、挿入操作の重複排除が有効になります。 | -| `withTableSchema` | `(TableSchema schema)` | `null` | ターゲット ClickHouse テーブルのスキーマ。 | - -## 制限事項 {#limitations} - -コネクタを使用する際は、次の制限事項を考慮してください: -* 現時点では、Sink 操作のみがサポートされています。コネクタは Source 操作をサポートしていません。 -* ClickHouse は、`ReplicatedMergeTree` または `ReplicatedMergeTree` の上に構築された `Distributed` テーブルに挿入する際に重複排除を実行します。レプリケーションがない場合、通常の MergeTree への挿入は、挿入が失敗してから正常にリトライされると重複が発生する可能性があります。ただし、各ブロックはアトミックに挿入され、ブロックサイズは `ClickHouseIO.Write.withMaxInsertBlockSize(long)` を使用して構成できます。重複排除は、挿入されたブロックのチェックサムを使用して実現されます。重複排除の詳細については、[重複排除](/guides/developer/deduplication)および[重複排除挿入設定](/operations/settings/settings#insert_deduplicate)を参照してください。 -* コネクタは DDL ステートメントを実行しないため、挿入前にターゲットテーブルが存在している必要があります。 - -## 関連コンテンツ {#related-content} -* `ClickHouseIO` クラスの[ドキュメント](https://beam.apache.org/releases/javadoc/current/org/apache/beam/sdk/io/clickhouse/ClickHouseIO.html)。 -* 例の `Github` リポジトリ [clickhouse-beam-connector](https://github.com/ClickHouse/clickhouse-beam-connector)。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/cli.mdx b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/cli.mdx index 6b9c9875e1d..044a90c8e1b 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/cli.mdx +++ b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/cli.mdx @@ -13,6 +13,6 @@ integration: keywords: ['clickhouse-client', 'CLI', 'コマンドラインインターフェース', 'SQL クライアント', 'ターミナル'] --- -import Content from '@site/i18n/jp/docusaurus-plugin-content-docs/current/interfaces/cli.md'; +import Content from '@site/docs/interfaces/cli.md'; diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/dbms/odbc-with-clickhouse.md b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/dbms/odbc-with-clickhouse.md index dc152503eb9..6f2b83fae72 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/dbms/odbc-with-clickhouse.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/dbms/odbc-with-clickhouse.md @@ -9,6 +9,6 @@ hide_title: true keywords: ['odbc', 'データベース接続', '統合', '外部データ', 'ドライバー'] --- -import Content from '@site/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/odbc.md'; +import Content from '@site/docs/engines/table-engines/integrations/odbc.md'; diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/apache-beam.md b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/apache-beam.md index 18cf2d96176..43822949e8a 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/apache-beam.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/apache-beam.md @@ -133,6 +133,12 @@ public class Main { | | `Schema.TypeName#DECIMAL` | ❌ | | | | `Schema.TypeName#MAP` | ❌ | | + + + + + + ## ClickHouseIO.Write のパラメータ {#clickhouseiowrite-parameters} 次のセッターメソッドを使用して `ClickHouseIO.Write` の設定を調整できます。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/s3/index.md b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/s3/index.md index 60b1034df4e..2693b4f1b37 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/s3/index.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/s3/index.md @@ -1,10 +1,10 @@ --- slug: /integrations/s3 sidebar_position: 1 -sidebar_label: 'Integrating S3 with ClickHouse' -title: 'Integrating S3 with ClickHouse' -description: 'Page describing how to integrate S3 with ClickHouse' -keywords: ['Amazon S3', 'object storage', 'cloud storage', 'data lake', 'S3 integration'] +sidebar_label: 'ClickHouse と S3 の統合' +title: 'ClickHouse と S3 の統合' +description: 'S3 と ClickHouse の統合方法を説明するページ' +keywords: ['Amazon S3', 'オブジェクトストレージ', 'クラウドストレージ', 'データレイク', 'S3 連携'] doc_type: 'guide' integration: - support_level: 'core' @@ -17,13 +17,16 @@ import Bucket1 from '@site/static/images/integrations/data-ingestion/s3/bucket1. import Bucket2 from '@site/static/images/integrations/data-ingestion/s3/bucket2.png'; import Image from '@theme/IdealImage'; -# Integrating S3 with ClickHouse -You can insert data from S3 into ClickHouse and also use S3 as an export destination, thus allowing interaction with "Data Lake" architectures. Furthermore, S3 can provide "cold" storage tiers and assist with separating storage and compute. In the sections below we use the New York City taxi dataset to demonstrate the process of moving data between S3 and ClickHouse, as well as identifying key configuration parameters and providing hints on optimizing performance. +# ClickHouse と S3 の統合 -## S3 table functions {#s3-table-functions} +S3 から ClickHouse にデータを挿入できるほか、S3 をエクスポート先としても利用できるため、「データレイク」アーキテクチャとの連携が可能になります。さらに、S3 は「コールド」ストレージ階層を提供し、ストレージとコンピュートの分離にも役立ちます。以下のセクションでは、New York City taxi データセットを用いて、S3 と ClickHouse 間でデータを移動する手順を示すとともに、主要な構成パラメータを明らかにし、パフォーマンスを最適化するためのヒントを紹介します。 -The `s3` table function allows you to read and write files from and to S3 compatible storage. The outline for this syntax is: + + +## S3 テーブル関数 + +`s3` テーブル関数を使用すると、S3 互換ストレージからおよび S3 互換ストレージへファイルの読み取りと書き込みができます。構文の概要は次のとおりです。 ```sql s3(path, [aws_access_key_id, aws_secret_access_key,] [format, [structure, [compression]]]) @@ -31,76 +34,81 @@ s3(path, [aws_access_key_id, aws_secret_access_key,] [format, [structure, [compr where: -* path — Bucket URL with a path to the file. This supports following wildcards in read-only mode: `*`, `?`, `{abc,def}` and `{N..M}` where `N`, `M` are numbers, `'abc'`, `'def'` are strings. For more information, see the docs on [using wildcards in path](/engines/table-engines/integrations/s3/#wildcards-in-path). -* format — The [format](/interfaces/formats#formats-overview) of the file. -* structure — Structure of the table. Format `'column1_name column1_type, column2_name column2_type, ...'`. -* compression — Parameter is optional. Supported values: `none`, `gzip/gz`, `brotli/br`, `xz/LZMA`, `zstd/zst`. By default, it will autodetect compression by file extension. +* path — ファイルへのパスを含むバケットの URL。読み取り専用モードで次のワイルドカードをサポートします: `*`, `?`, `{abc,def}`, `{N..M}`。ここで、`N`, `M` は数値、`'abc'`, `'def'` は文字列です。詳細は、[パスでのワイルドカードの使用](/engines/table-engines/integrations/s3/#wildcards-in-path)に関するドキュメントを参照してください。 +* format — ファイルの[フォーマット](/interfaces/formats#formats-overview)。 +* structure — テーブルの構造。書式は `'column1_name column1_type, column2_name column2_type, ...'` です。 +* compression — 省略可能なパラメータ。サポートされている値: `none`, `gzip/gz`, `brotli/br`, `xz/LZMA`, `zstd/zst`。デフォルトでは、ファイル拡張子から圧縮形式を自動検出します。 -Using wildcards in the path expression allow multiple files to be referenced and opens the door for parallelism. +パス式でワイルドカードを使用すると、複数のファイルを参照できるようになり、並列処理による読み取りが可能になります。 -### Preparation {#preparation} +### 準備 -Prior to creating the table in ClickHouse, you may want to first take a closer look at the data in the S3 bucket. You can do this directly from ClickHouse using the `DESCRIBE` statement: +ClickHouse でテーブルを作成する前に、まず S3 バケット内のデータを詳しく確認しておくとよいでしょう。これは、ClickHouse から直接 `DESCRIBE` ステートメントを使用して実行できます。 ```sql DESCRIBE TABLE s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi/trips_*.gz', 'TabSeparatedWithNames'); ``` -The output of the `DESCRIBE TABLE` statement should show you how ClickHouse would automatically infer this data, as viewed in the S3 bucket. Notice that it also automatically recognizes and decompresses the gzip compression format: +`DESCRIBE TABLE` ステートメントの出力を見ると、S3 バケット内のデータを ClickHouse がどのように自動推論するかがわかります。また、gzip 圧縮形式も自動的に認識して解凍されることに注意してください。 ```sql DESCRIBE TABLE s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi/trips_*.gz', 'TabSeparatedWithNames') SETTINGS describe_compact_output=1 +``` + ┌─name──────────────────┬─type───────────────┐ -│ trip_id │ Nullable(Int64) │ -│ vendor_id │ Nullable(Int64) │ -│ pickup_date │ Nullable(Date) │ -│ pickup_datetime │ Nullable(DateTime) │ -│ dropoff_date │ Nullable(Date) │ -│ dropoff_datetime │ Nullable(DateTime) │ -│ store_and_fwd_flag │ Nullable(Int64) │ -│ rate_code_id │ Nullable(Int64) │ -│ pickup_longitude │ Nullable(Float64) │ -│ pickup_latitude │ Nullable(Float64) │ -│ dropoff_longitude │ Nullable(Float64) │ -│ dropoff_latitude │ Nullable(Float64) │ -│ passenger_count │ Nullable(Int64) │ -│ trip_distance │ Nullable(String) │ -│ fare_amount │ Nullable(String) │ +│ trip_id │ Nullable(Int64) │ +│ vendor_id │ Nullable(Int64) │ +│ pickup_date │ Nullable(Date) │ +│ pickup_datetime │ Nullable(DateTime) │ +│ dropoff_date │ Nullable(Date) │ +│ dropoff_datetime │ Nullable(DateTime) │ +│ store_and_fwd_flag │ Nullable(Int64) │ +│ rate_code_id │ Nullable(Int64) │ +│ pickup_longitude │ Nullable(Float64) │ +│ pickup_latitude │ Nullable(Float64) │ +│ dropoff_longitude │ Nullable(Float64) │ +│ dropoff_latitude │ Nullable(Float64) │ +│ passenger_count │ Nullable(Int64) │ +│ trip_distance │ Nullable(String) │ +│ fare_amount │ Nullable(String) │ │ extra │ Nullable(String) │ -│ mta_tax │ Nullable(String) │ -│ tip_amount │ Nullable(String) │ -│ tolls_amount │ Nullable(Float64) │ -│ ehail_fee │ Nullable(Int64) │ -│ improvement_surcharge │ Nullable(String) │ -│ total_amount │ Nullable(String) │ -│ payment_type │ Nullable(String) │ -│ trip_type │ Nullable(Int64) │ +│ mta_tax │ Nullable(String) │ +│ tip_amount │ Nullable(String) │ +│ tolls_amount │ Nullable(Float64) │ +│ ehail_fee │ Nullable(Int64) │ +│ improvement_surcharge │ Nullable(String) │ +│ total_amount │ Nullable(String) │ +│ payment_type │ Nullable(String) │ +│ trip_type │ Nullable(Int64) │ │ pickup │ Nullable(String) │ │ dropoff │ Nullable(String) │ -│ cab_type │ Nullable(String) │ -│ pickup_nyct2010_gid │ Nullable(Int64) │ -│ pickup_ctlabel │ Nullable(Float64) │ -│ pickup_borocode │ Nullable(Int64) │ -│ pickup_ct2010 │ Nullable(String) │ -│ pickup_boroct2010 │ Nullable(String) │ -│ pickup_cdeligibil │ Nullable(String) │ -│ pickup_ntacode │ Nullable(String) │ -│ pickup_ntaname │ Nullable(String) │ -│ pickup_puma │ Nullable(Int64) │ -│ dropoff_nyct2010_gid │ Nullable(Int64) │ -│ dropoff_ctlabel │ Nullable(Float64) │ -│ dropoff_borocode │ Nullable(Int64) │ -│ dropoff_ct2010 │ Nullable(String) │ -│ dropoff_boroct2010 │ Nullable(String) │ -│ dropoff_cdeligibil │ Nullable(String) │ -│ dropoff_ntacode │ Nullable(String) │ -│ dropoff_ntaname │ Nullable(String) │ -│ dropoff_puma │ Nullable(Int64) │ +│ cab_type │ Nullable(String) │ +│ pickup_nyct2010_gid │ Nullable(Int64) │ +│ pickup_ctlabel │ Nullable(Float64) │ +│ pickup_borocode │ Nullable(Int64) │ +│ pickup_ct2010 │ Nullable(String) │ +│ pickup_boroct2010 │ Nullable(String) │ +│ pickup_cdeligibil │ Nullable(String) │ +│ pickup_ntacode │ Nullable(String) │ +│ pickup_ntaname │ Nullable(String) │ +│ pickup_puma │ Nullable(Int64) │ +│ dropoff_nyct2010_gid │ Nullable(Int64) │ +│ dropoff_ctlabel │ Nullable(Float64) │ +│ dropoff_borocode │ Nullable(Int64) │ +│ dropoff_ct2010 │ Nullable(String) │ +│ dropoff_boroct2010 │ Nullable(String) │ +│ dropoff_cdeligibil │ Nullable(String) │ +│ dropoff_ntacode │ Nullable(String) │ +│ dropoff_ntaname │ Nullable(String) │ +│ dropoff_puma │ Nullable(Int64) │ └───────────────────────┴────────────────────┘ + +``` + +S3ベースのデータセットを操作するために、標準的な`MergeTree`テーブルを宛先として準備します。以下のステートメントは、デフォルトデータベースに`trips`という名前のテーブルを作成します。上記で推論されたデータ型の一部を変更しており、特に[`Nullable()`](/sql-reference/data-types/nullable)データ型修飾子は使用しないようにしています。これは、不要な追加ストレージと若干のパフォーマンスオーバーヘッドを引き起こす可能性があるためです。 ``` -To interact with our S3-based dataset, we prepare a standard `MergeTree` table as our destination. The statement below creates a table named `trips` in the default database. Note that we have chosen to modify some of those data types as inferred above, particularly to not use the [`Nullable()`](/sql-reference/data-types/nullable) data type modifier, which could cause some unnecessary additional stored data and some additional performance overhead: ```sql CREATE TABLE trips @@ -156,13 +164,13 @@ PARTITION BY toYYYYMM(pickup_date) ORDER BY pickup_datetime ``` -Note the use of [partitioning](/engines/table-engines/mergetree-family/custom-partitioning-key) on the `pickup_date` field. Usually a partition key is for data management, but later on we will use this key to parallelize writes to S3. +`pickup_date` フィールドに対する[パーティショニング](/engines/table-engines/mergetree-family/custom-partitioning-key)の利用に注目してください。通常、パーティションキーはデータ管理のために使用されますが、後ほどこのキーを使って S3 への書き込みを並列化します。 -Each entry in our taxi dataset contains a taxi trip. This anonymized data consists of 20M records compressed in the S3 bucket https://datasets-documentation.s3.eu-west-3.amazonaws.com/ under the folder **nyc-taxi**. The data is in the TSV format with approximately 1M rows per file. +タクシーデータセットの各エントリは、1 件のタクシー乗車を表しています。この匿名化されたデータは、S3 バケット [https://datasets-documentation.s3.eu-west-3.amazonaws.com/](https://datasets-documentation.s3.eu-west-3.amazonaws.com/) の **nyc-taxi** フォルダ内に格納された、圧縮済みの 2,000 万件のレコードで構成されています。データは TSV 形式で、ファイルあたりおよそ 100 万行が含まれています。 -### Reading Data from S3 {#reading-data-from-s3} +### S3 からデータを読み込む -We can query S3 data as a source without requiring persistence in ClickHouse. In the following query, we sample 10 rows. Note the absence of credentials here as the bucket is publicly accessible: +ClickHouse に永続化することなく、S3 上のデータをソースとしてクエリできます。次のクエリでは、10 行だけをサンプリングします。バケットが公開されているため、ここでは認証情報が不要である点に注意してください。 ```sql SELECT * @@ -170,9 +178,9 @@ FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi/trip LIMIT 10; ``` -Note that we are not required to list the columns since the `TabSeparatedWithNames` format encodes the column names in the first row. Other formats, such as `CSV` or `TSV`, will return auto-generated columns for this query, e.g., `c1`, `c2`, `c3` etc. +`TabSeparatedWithNames` 形式では最初の行にカラム名が含まれているため、カラム名を明示的に指定する必要はないことに注意してください。`CSV` や `TSV` などの他の形式では、このクエリに対して `c1`、`c2`、`c3` のような自動生成されたカラムが返されます。 -Queries additionally support [virtual columns](../sql-reference/table-functions/s3#virtual-columns), like `_path` and `_file`, that provide information regarding the bucket path and filename respectively. For example: +クエリではさらに、バケット内のパスおよびファイル名に関する情報をそれぞれ提供する `_path` や `_file` のような[仮想カラム](../sql-reference/table-functions/s3#virtual-columns)もサポートしています。例えば: ```sql SELECT _path, _file, trip_id @@ -180,6 +188,7 @@ FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi/trip LIMIT 5; ``` + ```response ┌─_path──────────────────────────────────────┬─_file──────┬────trip_id─┐ │ datasets-documentation/nyc-taxi/trips_0.gz │ trips_0.gz │ 1199999902 │ @@ -190,7 +199,7 @@ LIMIT 5; └────────────────────────────────────────────┴────────────┴────────────┘ ``` -Confirm the number of rows in this sample dataset. Note the use of wildcards for file expansion, so we consider all twenty files. This query will take around 10 seconds, depending on the number of cores on the ClickHouse instance: +このサンプルデータセットに含まれる行数を確認します。ファイル展開のためにワイルドカードを使用しているため、20 個すべてのファイルが対象になります。ClickHouse インスタンス上のコア数にもよりますが、このクエリの実行にはおよそ 10 秒かかります。 ```sql SELECT count() AS count @@ -203,20 +212,20 @@ FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi/trip └──────────┘ ``` -While useful for sampling data and executing ae-hoc, exploratory queries, reading data directly from S3 is not something you want to do regularly. When it is time to get serious, import the data into a `MergeTree` table in ClickHouse. +S3 から直接データを読み取る方法は、データのサンプリングやアドホックな探索的クエリを実行するには有用ですが、日常的に行うべきものではありません。本格的に運用する段階になったら、ClickHouse の `MergeTree` テーブルにデータをインポートしてください。 -### Using clickhouse-local {#using-clickhouse-local} +### clickhouse-local の使用 -The `clickhouse-local` program enables you to perform fast processing on local files without deploying and configuring the ClickHouse server. Any queries using the `s3` table function can be performed with this utility. For example: +`clickhouse-local` プログラムを使用すると、ClickHouse サーバーをデプロイしたり設定したりすることなく、ローカルファイルに対して高速な処理を実行できます。`s3` テーブル関数を用いたクエリは、すべてこのユーティリティで実行できます。例えば、次のように実行します。 ```sql clickhouse-local --query "SELECT * FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi/trips_*.gz', 'TabSeparatedWithNames') LIMIT 10" ``` -### Inserting Data from S3 {#inserting-data-from-s3} +### S3 からのデータ挿入 -To exploit the full capabilities of ClickHouse, we next read and insert the data into our instance. -We combine our `s3` function with a simple `INSERT` statement to achieve this. Note that we aren't required to list our columns because our target table provides the required structure. This requires the columns to appear in the order specified in the table DDL statement: columns are mapped according to their position in the `SELECT` clause. The insertion of all 10m rows can take a few minutes depending on the ClickHouse instance. Below we insert 1M rows to ensure a prompt response. Adjust the `LIMIT` clause or column selection to import subsets as required: +ClickHouse の機能を最大限に活用するために、次にデータを読み取り、インスタンスに挿入します。 +これを行うために、`s3` 関数とシンプルな `INSERT` 文を組み合わせます。ターゲットテーブル側で必要な構造が定義されているため、列を列挙する必要はない点に注意してください。この場合、テーブルの DDL 文で指定された順序で列が並んでいる必要があります。列は `SELECT` 句内での位置に基づいてマッピングされます。1,000 万行すべてを挿入する処理には、ClickHouse インスタンスによっては数分かかる場合があります。以下では、すばやく結果を得るために 100 万行のみを挿入しています。必要に応じて、`LIMIT` 句や列の選択を調整して、一部だけをインポートしてください。 ```sql INSERT INTO trips @@ -225,23 +234,23 @@ INSERT INTO trips LIMIT 1000000; ``` -### Remote Insert using ClickHouse Local {#remote-insert-using-clickhouse-local} +### ClickHouse Local を使用したリモート挿入 -If network security policies prevent your ClickHouse cluster from making outbound connections, you can potentially insert S3 data using `clickhouse-local`. In the example below, we read from an S3 bucket and insert into ClickHouse using the `remote` function: +ネットワークセキュリティポリシーによって ClickHouse クラスターからの外向き接続が禁止されている場合、`clickhouse-local` を使用して S3 データを挿入することもできます。以下の例では、S3 バケットから読み取り、`remote` 関数を使用して ClickHouse に挿入します。 ```sql clickhouse-local --query "INSERT INTO TABLE FUNCTION remote('localhost:9000', 'default.trips', 'username', 'password') (*) SELECT * FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi/trips_*.gz', 'TabSeparatedWithNames') LIMIT 10" ``` :::note -To execute this over a secure SSL connection, utilize the `remoteSecure` function. +これを安全な SSL 接続で実行するには、`remoteSecure` 関数を使用します。 ::: -### Exporting data {#exporting-data} +### データのエクスポート -You can write to files in S3 using the `s3` table function. This will require appropriate permissions. We pass the credentials needed in the request, but view the [Managing Credentials](#managing-credentials) page for more options. +`s3` テーブル関数を使用して S3 上のファイルに書き込むことができます。これには適切な権限が必要です。必要な認証情報はリクエスト内で渡しますが、その他のオプションについては [Managing Credentials](#managing-credentials) ページを参照してください。 -In the simple example below, we use the table function as a destination instead of a source. Here we stream 10,000 rows from the `trips` table to a bucket, specifying `lz4` compression and output type of `CSV`: +以下のシンプルな例では、テーブル関数をソースではなく出力先として使用しています。ここでは、`trips` テーブルから 10,000 行を、`lz4` 圧縮と出力形式としての `CSV` を指定して、S3 バケットにストリーミングしています。 ```sql INSERT INTO FUNCTION @@ -256,13 +265,14 @@ FROM trips LIMIT 10000; ``` -Note here how the format of the file is inferred from the extension. We also don't need to specify the columns in the `s3` function - this can be inferred from the `SELECT`. -### Splitting large files {#splitting-large-files} +ここでは、ファイルの形式が拡張子から自動的に判別されることに注目してください。また、`s3` 関数では列を指定する必要もありません。これは `SELECT` から自動的に推論されます。 -It is unlikely you will want to export your data as a single file. Most tools, including ClickHouse, will achieve higher throughput performance when reading and writing to multiple files due to the possibility of parallelism. We could execute our `INSERT` command multiple times, targeting a subset of the data. ClickHouse offers a means of automatic splitting files using a `PARTITION` key. +### 大きなファイルの分割 -In the example below, we create ten files using a modulus of the `rand()` function. Notice how the resulting partition ID is referenced in the filename. This results in ten files with a numerical suffix, e.g. `trips_0.csv.lz4`, `trips_1.csv.lz4` etc...: +データを 1 つのファイルとしてエクスポートしたいケースはあまりないでしょう。ClickHouse を含むほとんどのツールは、並列処理が可能になるため、複数ファイルへの読み書きを行うことでスループットが向上します。`INSERT` コマンドを複数回実行し、データのサブセットを対象にすることもできます。ClickHouse には、`PARTITION` キーを使用してファイルを自動的に分割する方法が用意されています。 + +次の例では、`rand()` 関数の剰余を用いて 10 個のファイルを作成します。生成されたパーティション ID がファイル名でどのように参照されているかに注目してください。これにより、`trips_0.csv.lz4`、`trips_1.csv.lz4` などのように、数値のサフィックスを持つ 10 個のファイルが生成されます。 ```sql INSERT INTO FUNCTION @@ -278,7 +288,7 @@ FROM trips LIMIT 100000; ``` -Alternatively, we can reference a field in the data. For this dataset, the `payment_type` provides a natural partitioning key with a cardinality of 5. +別の方法として、データ内のフィールドを参照することもできます。このデータセットでは、`payment_type` は 5 種類の値を持つ自然なパーティションキーになります。 ```sql INSERT INTO FUNCTION @@ -294,27 +304,28 @@ FROM trips LIMIT 100000; ``` -### Utilizing clusters {#utilizing-clusters} +### クラスターの活用 -The above functions are all limited to execution on a single node. Read speeds will scale linearly with CPU cores until other resources (typically network) are saturated, allowing users to vertically scale. However, this approach has its limitations. While users can alleviate some resource pressure by inserting into a distributed table when performing an `INSERT INTO SELECT` query, this still leaves a single node reading, parsing, and processing the data. To address this challenge and allow us to scale reads horizontally, we have the [s3Cluster](/sql-reference/table-functions/s3Cluster.md) function. +上記の関数はすべて、単一ノード上での実行に限定されています。読み取り速度は、他のリソース(通常はネットワーク)が飽和するまで CPU コア数に比例して向上し、ユーザーは垂直スケールが可能です。しかし、このアプローチには制約があります。ユーザーは `INSERT INTO SELECT` クエリを実行する際に分散テーブルに挿入することで、ある程度リソースの負荷を軽減できますが、それでも単一ノードでデータの読み取り、パース、処理を行う点は変わりません。この課題に対処し、読み取りを水平方向にスケールさせるために用意されているのが、[s3Cluster](/sql-reference/table-functions/s3Cluster.md) 関数です。 -The node which receives the query, known as the initiator, creates a connection to every node in the cluster. The glob pattern determining which files need to be read is resolved to a set of files. The initiator distributes files to the nodes in the cluster, which act as workers. These workers, in turn, request files to process as they complete reads. This process ensures that we can scale reads horizontally. +クエリを受け取るノードはイニシエーターと呼ばれ、クラスター内のすべてのノードに接続を確立します。どのファイルを読み取る必要があるかを決定するグロブパターンは、読み取る対象となるファイルの集合へと解決されます。イニシエーターは、クラスター内のノード(ワーカーとして動作)にファイルを分配します。これらのワーカーは、読み取りを完了するごとに、処理するファイルを要求します。このプロセスにより、読み取りを水平方向にスケールさせることができます。 -The `s3Cluster` function takes the same format as the single node variants, except that a target cluster is required to denote the worker nodes: +`s3Cluster` 関数は、対象となるクラスターをワーカーノードとして指定する必要がある点を除き、単一ノード版と同じ形式を取ります。 ```sql s3Cluster(cluster_name, source, [access_key_id, secret_access_key,] format, structure) ``` -* `cluster_name` — Name of a cluster that is used to build a set of addresses and connection parameters to remote and local servers. -* `source` — URL to a file or a bunch of files. Supports following wildcards in read-only mode: `*`, `?`, `{'abc','def'}` and `{N..M}` where N, M — numbers, abc, def — strings. For more information see [Wildcards In Path](/engines/table-engines/integrations/s3.md/#wildcards-in-path). -* `access_key_id` and `secret_access_key` — Keys that specify credentials to use with the given endpoint. Optional. -* `format` — The [format](/interfaces/formats#formats-overview) of the file. -* `structure` — Structure of the table. Format 'column1_name column1_type, column2_name column2_type, ...'. +* `cluster_name` — リモートおよびローカルサーバーへのアドレスと接続パラメータの集合を構成するために使用されるクラスタ名。 +* `source` — 単一または複数ファイルへの URL。読み取り専用モードで次のワイルドカードをサポートします: `*`, `?`, `{'abc','def'}` および `{N..M}`。ここで N, M は数値、abc, def は文字列です。詳細は [Wildcards In Path](/engines/table-engines/integrations/s3.md/#wildcards-in-path) を参照してください。 +* `access_key_id` と `secret_access_key` — 指定されたエンドポイントで使用する認証情報を表すキー。省略可能です。 +* `format` — ファイルの [format](/interfaces/formats#formats-overview)。 +* `structure` — テーブルの構造。フォーマットは 'column1_name column1_type, column2_name column2_type, ...' です。 + +任意の `s3` 関数と同様に、バケットが保護されていない場合や、IAM ロールなどの環境経由で認証・権限付与を行っている場合は、認証情報は省略可能です。ただし s3 関数とは異なり、22.3.1 時点ではリクエスト内で `structure` を指定する必要があり、スキーマは自動推論されません。 -Like any `s3` functions, the credentials are optional if the bucket is insecure or you define security through the environment, e.g., IAM roles. Unlike the s3 function, however, the structure must be specified in the request as of 22.3.1, i.e., the schema is not inferred. +この関数は、ほとんどのケースで `INSERT INTO SELECT` の一部として使用されます。この場合、多くは分散テーブルに対して INSERT を行います。以下では、trips_all が分散テーブルである単純な例を示します。このテーブルは events クラスタを使用していますが、読み取りおよび書き込みに使用されるノードの一貫性は必須要件ではありません。 -This function will be used as part of an `INSERT INTO SELECT` in most cases. In this case, you will often be inserting a distributed table. We illustrate a simple example below where trips_all is a distributed table. While this table uses the events cluster, the consistency of the nodes used for reads and writes is not a requirement: ```sql INSERT INTO default.trips_all @@ -326,11 +337,12 @@ INSERT INTO default.trips_all ) ``` -Inserts will occur against the initiator node. This means that while reads will occur on each node, the resulting rows will be routed to the initiator for distribution. In high throughput scenarios, this may prove a bottleneck. To address this, set the parameter [parallel_distributed_insert_select](/operations/settings/settings/#parallel_distributed_insert_select) for the `s3cluster` function. +INSERT は `initiator` ノードに対して実行されます。つまり、読み取りは各ノードで行われますが、得られた行は分散処理のために `initiator` にルーティングされます。高スループットなシナリオでは、これがボトルネックとなる可能性があります。これに対処するには、`s3cluster` 関数に対してパラメータ [parallel_distributed_insert_select](/operations/settings/settings/#parallel_distributed_insert_select) を設定します。 -## S3 table engines {#s3-table-engines} -While the `s3` functions allow ad-hoc queries to be performed on data stored in S3, they are syntactically verbose. The `S3` table engine allows you to not have to specify the bucket URL and credentials over and over again. To address this, ClickHouse provides the S3 table engine. +## S3 テーブルエンジン + +`s3` 関数を使用すると、S3 に保存されたデータに対してアドホッククエリを実行できますが、構文が冗長になりがちです。この問題を解決するために用意されているのが、バケットの URL や認証情報を何度も指定する必要がなくなる `S3` テーブルエンジンです。 ```sql CREATE TABLE s3_engine_table (name String, value UInt32) @@ -338,14 +350,15 @@ CREATE TABLE s3_engine_table (name String, value UInt32) [SETTINGS ...] ``` -* `path` — Bucket URL with a path to the file. Supports following wildcards in read-only mode: `*`, `?`, `{abc,def}` and `{N..M}` where N, M — numbers, 'abc', 'def' — strings. For more information, see [here](/engines/table-engines/integrations/s3#wildcards-in-path). -* `format` — The[ format](/interfaces/formats#formats-overview) of the file. -* `aws_access_key_id`, `aws_secret_access_key` - Long-term credentials for the AWS account user. You can use these to authenticate your requests. The parameter is optional. If credentials are not specified, configuration file values are used. For more information, see [Managing credentials](#managing-credentials). -* `compression` — Compression type. Supported values: none, gzip/gz, brotli/br, xz/LZMA, zstd/zst. The parameter is optional. By default, it will autodetect compression by file extension. +* `path` — ファイルへのパスを含むバケットの URL。読み取り専用モードでは、次のワイルドカードをサポートします: `*`、`?`、`{abc,def}`、`{N..M}`。ここで N、M は数値、'abc'、'def' は文字列です。詳細は[こちら](/engines/table-engines/integrations/s3#wildcards-in-path)を参照してください。 +* `format` — ファイルの[フォーマット](/interfaces/formats#formats-overview)。 +* `aws_access_key_id`, `aws_secret_access_key` - AWS アカウントユーザー用の長期認証情報。リクエストの認証に使用できます。このパラメータは省略可能です。認証情報が指定されていない場合は、設定ファイルの値が使用されます。詳細は[認証情報の管理](#managing-credentials)を参照してください。 +* `compression` — 圧縮形式。サポートされる値: none, gzip/gz, brotli/br, xz/LZMA, zstd/zst。パラメータは省略可能です。デフォルトでは、ファイル拡張子に基づいて圧縮方式を自動検出します。 + +### データの読み取り -### Reading data {#reading-data} +次の例では、`https://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi/` バケット内にある最初の 10 個の TSV ファイルを使用して、`trips_raw` という名前のテーブルを作成します。各ファイルには 100 万行が含まれます。 -In the following example, we create a table named `trips_raw` using the first ten TSV files located in the `https://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi/` bucket. Each of these contains 1M rows each: ```sql CREATE TABLE trips_raw @@ -398,7 +411,7 @@ CREATE TABLE trips_raw ) ENGINE = S3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi/trips_{0..9}.gz', 'TabSeparatedWithNames', 'gzip'); ``` -Notice the use of the `{0..9}` pattern to limit to the first ten files. Once created, we can query this table like any other table: +最初の10個のファイルに限定するために `{0..9}` パターンを使用している点に注意してください。作成されたら、このテーブルには他のテーブルと同様にクエリを実行できます。 ```sql SELECT DISTINCT(pickup_ntaname) @@ -419,11 +432,11 @@ LIMIT 10; └──────────────────────────────────────────────────┘ ``` -### Inserting data {#inserting-data} +### データの挿入 -The `S3` table engine supports parallel reads. Writes are only supported if the table definition does not contain glob patterns. The above table, therefore, would block writes. +`S3` テーブルエンジンは並列読み出しをサポートします。書き込みは、テーブル定義にグロブパターンが含まれていない場合にのみサポートされます。そのため、上記のテーブルでは書き込みは行えません。 -To demonstrate writes, create a table that points to a writable S3 bucket: +書き込みを示すために、書き込み可能な S3 バケットを参照するテーブルを作成します。 ```sql CREATE TABLE trips_dest @@ -437,6 +450,7 @@ CREATE TABLE trips_dest ) ENGINE = S3('/trips.bin', 'Native'); ``` + ```sql INSERT INTO trips_dest SELECT @@ -464,27 +478,28 @@ SELECT * FROM trips_dest LIMIT 5; └────────────┴─────────────┴─────────────────────┴─────────────────────┴────────────┴──────────────┘ ``` -Note that rows can only be inserted into new files. There are no merge cycles or file split operations. Once a file is written, subsequent inserts will fail. Users have two options here: +行は新しいファイルにしか挿入できないことに注意してください。マージサイクルやファイル分割処理はありません。いったんファイルに書き込まれると、その後の挿入は失敗します。ユーザーには次の 2 つの選択肢があります。 -* Specify the setting `s3_create_new_file_on_insert=1`. This will cause the creation of new files on each insert. A numeric suffix will be appended to the end of each file that will monotonically increase for each insert operation. For the above example, a subsequent insert would cause the creation of a trips_1.bin file. -* Specify the setting `s3_truncate_on_insert=1`. This will cause a truncation of the file, i.e. it will only contain the newly inserted rows once complete. +* 設定 `s3_create_new_file_on_insert=1` を指定します。これにより、挿入ごとに新しいファイルが作成されます。各ファイルの末尾には数値のサフィックスが付加され、挿入操作ごとに単調増加します。上記の例では、後続の挿入を行うと trips_1.bin ファイルが作成されます。 +* 設定 `s3_truncate_on_insert=1` を指定します。これによりファイルが切り詰められ、完了時には新たに挿入された行のみを含むようになります。 -Both of these settings default to 0 - thus forcing the user to set one of them. `s3_truncate_on_insert` will take precedence if both are set. +これら 2 つの設定のデフォルト値はいずれも 0 であるため、どちらか一方をユーザーが設定する必要があります。両方が設定されている場合は `s3_truncate_on_insert` が優先されます。 -Some notes about the `S3` table engine: +`S3` テーブルエンジンについての注意点: -- Unlike a traditional `MergeTree` family table, dropping an `S3` table will not delete the underlying data. -- Full settings for this table type can be found [here](/engines/table-engines/integrations/s3.md/#settings). -- Be aware of the following caveats when using this engine: - * ALTER queries are not supported - * SAMPLE operations are not supported - * There is no notion of indexes, i.e. primary or skip. +* 従来の `MergeTree` ファミリのテーブルとは異なり、`S3` テーブルを DROP しても、基盤となるデータは削除されません。 +* このテーブルタイプの完全な設定一覧は、[こちら](/engines/table-engines/integrations/s3.md/#settings)にあります。 +* このエンジンを使用する際は、次の点に注意してください: + * ALTER クエリはサポートされません。 + * SAMPLE 操作はサポートされません。 + * 主キーやスキップインデックスといったインデックスの概念はありません。 -## Managing credentials {#managing-credentials} -In the previous examples, we have passed credentials in the `s3` function or `S3` table definition. While this may be acceptable for occasional usage, users require less explicit authentication mechanisms in production. To address this, ClickHouse has several options: +## 認証情報の管理 {#managing-credentials} -* Specify the connection details in the **config.xml** or an equivalent configuration file under **conf.d**. The contents of an example file are shown below, assuming installation using the debian package. +前の例では、`s3` 関数または `S3` テーブル定義の中で認証情報を渡してきました。これは単発の利用であれば許容できる場合もありますが、本番環境では、ユーザーは認証情報を明示的に記述しなくてもよい認証メカニズムを必要とします。これに対応するため、ClickHouse にはいくつかの選択肢があります。 + +* 接続情報を **config.xml** または **conf.d** 配下の同等の設定ファイルに指定します。以下に、Debian パッケージを用いてインストールしたことを前提とした例ファイルの内容を示します。 ```xml ubuntu@single-node-clickhouse:/etc/clickhouse-server/config.d$ cat s3.xml @@ -501,9 +516,9 @@ In the previous examples, we have passed credentials in the `s3` function or `S3
``` - These credentials will be used for any requests where the endpoint above is an exact prefix match for the requested URL. Also, note the ability in this example to declare an authorization header as an alternative to access and secret keys. A complete list of supported settings can be found [here](/engines/table-engines/integrations/s3.md/#settings). + これらの認証情報は、上記のエンドポイントが要求された URL の先頭部分と完全に一致するリクエストに対して使用されます。また、この例ではアクセスキーおよびシークレットキーの代わりに、認可ヘッダーを指定できることにも注目してください。サポートされている設定の完全な一覧は[こちら](/engines/table-engines/integrations/s3.md/#settings)にあります。 -* The example above highlights the availability of the configuration parameter `use_environment_credentials`. This configuration parameter can also be set globally at the `s3` level: +* 上の例では、設定パラメータ `use_environment_credentials` を利用できることを示しています。この設定パラメータは、`s3` レベルでグローバルに設定することもできます。 ```xml @@ -513,38 +528,42 @@ In the previous examples, we have passed credentials in the `s3` function or `S3 ``` - This setting turns on an attempt to retrieve S3 credentials from the environment, thus allowing access through IAM roles. Specifically, the following order of retrieval is performed: + この設定を有効にすると、環境から S3 の認証情報を取得しようと試みるようになり、IAM ロールを通じてアクセスできるようになります。具体的には、次の順序で認証情報の取得が行われます。 + + * 環境変数 `AWS_ACCESS_KEY_ID`、`AWS_SECRET_ACCESS_KEY` および `AWS_SESSION_TOKEN` の参照 + * **$HOME/.aws** の確認 + * AWS Security Token Service 経由で取得した一時的な認証情報([`AssumeRole`](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) API 経由) + * ECS 環境変数 `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI` または `AWS_CONTAINER_CREDENTIALS_FULL_URI` および `AWS_ECS_CONTAINER_AUTHORIZATION_TOKEN` に対する認証情報の確認 + * [AWS_EC2_METADATA_DISABLED](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html#envvars-list-AWS_EC2_METADATA_DISABLED) が true に設定されていない場合に、[Amazon EC2 インスタンスメタデータ](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-metadata.html) 経由で認証情報を取得 + * これらと同じ設定は、同じプレフィックスマッチング規則を用いて特定のエンドポイントに対しても設定できます。 - * A lookup for the environment variables `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY` and `AWS_SESSION_TOKEN` - * Check performed in **$HOME/.aws** - * Temporary credentials obtained via the AWS Security Token Service - i.e. via [`AssumeRole`](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) API - * Checks for credentials in the ECS environment variables `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI` or `AWS_CONTAINER_CREDENTIALS_FULL_URI` and `AWS_ECS_CONTAINER_AUTHORIZATION_TOKEN`. - * Obtains the credentials via [Amazon EC2 instance metadata](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-metadata.html) provided [AWS_EC2_METADATA_DISABLED](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html#envvars-list-AWS_EC2_METADATA_DISABLED) is not set to true. - * These same settings can also be set for a specific endpoint, using the same prefix matching rule. -## Optimizing for performance {#s3-optimizing-performance} -For how to optimize reading and inserting using the S3 function, see the [dedicated performance guide](./performance.md). +## パフォーマンス最適化 {#s3-optimizing-performance} -### S3 storage tuning {#s3-storage-tuning} +S3 関数を使用した読み取りおよび挿入の最適化方法については、[専用のパフォーマンスガイド](./performance.md)を参照してください。 -Internally, the ClickHouse merge tree uses two primary storage formats: [`Wide` and `Compact`](/engines/table-engines/mergetree-family/mergetree.md/#mergetree-data-storage). While the current implementation uses the default behavior of ClickHouse (controlled through the settings `min_bytes_for_wide_part` and `min_rows_for_wide_part`), we expect behavior to diverge for S3 in the future releases, e.g., a larger default value of `min_bytes_for_wide_part` encouraging a more `Compact` format and thus fewer files. Users may now wish to tune these settings when using exclusively S3 storage. +### S3 ストレージのチューニング {#s3-storage-tuning} -## S3 backed MergeTree {#s3-backed-mergetree} +内部的には、ClickHouse の MergeTree は 2 つの主要なストレージ形式([`Wide` と `Compact`](/engines/table-engines/mergetree-family/mergetree.md/#mergetree-data-storage))を使用します。現在の実装では、ClickHouse のデフォルトの動作(`min_bytes_for_wide_part` および `min_rows_for_wide_part` 設定によって制御)に準拠していますが、今後のリリースでは S3 向けに動作が変化すると予想されます。例えば、`min_bytes_for_wide_part` のデフォルト値を大きくすることで、より `Compact` な形式が推奨され、その結果としてファイル数が減少します。S3 ストレージのみを使用する場合は、これらの設定の調整を検討してください。 -The `s3` functions and associated table engine allow us to query data in S3 using familiar ClickHouse syntax. However, concerning data management features and performance, they are limited. There is no support for primary indexes, no-cache support, and files inserts need to be managed by the user. -ClickHouse recognizes that S3 represents an attractive storage solution, especially where query performance on "colder" data is less critical, and users seek to separate storage and compute. To help achieve this, support is provided for using S3 as the storage for a MergeTree engine. This will enable users to exploit the scalability and cost benefits of S3, and the insert and query performance of the MergeTree engine. -### Storage Tiers {#storage-tiers} +## S3 バックエンドの MergeTree -ClickHouse storage volumes allow physical disks to be abstracted from the MergeTree table engine. Any single volume can be composed of an ordered set of disks. Whilst principally allowing multiple block devices to be potentially used for data storage, this abstraction also allows other storage types, including S3. ClickHouse data parts can be moved between volumes and fill rates according to storage policies, thus creating the concept of storage tiers. +`s3` 関数と関連するテーブルエンジンを使用すると、なじみのある ClickHouse の構文で S3 上のデータをクエリできます。ただし、データ管理機能およびパフォーマンスの観点からは制限があります。プライマリインデックスのサポートがなく、キャッシュ機構のサポートもありません。また、ファイルの挿入(書き込み)はユーザーが管理する必要があります。 -Storage tiers unlock hot-cold architectures where the most recent data, which is typically also the most queried, requires only a small amount of space on high-performing storage, e.g., NVMe SSDs. As the data ages, SLAs for query times increase, as does query frequency. This fat tail of data can be stored on slower, less performant storage such as HDD or object storage such as S3. +ClickHouse は、特に「コールド」データに対するクエリ性能がそれほど重要ではなく、ストレージとコンピュートを分離したい場合に、S3 が魅力的なストレージソリューションであることを認識しています。これを実現するために、MergeTree エンジンのストレージとして S3 を使用するためのサポートが提供されています。これにより、ユーザーは S3 のスケーラビリティとコストメリット、および MergeTree エンジンの挿入とクエリのパフォーマンスを活用できるようになります。 -### Creating a disk {#creating-a-disk} +### ストレージ階層 -To utilize an S3 bucket as a disk, we must first declare it within the ClickHouse configuration file. Either extend config.xml or preferably provide a new file under conf.d. An example of an S3 disk declaration is shown below: +ClickHouse のストレージボリューム機能により、物理ディスクを MergeTree テーブルエンジンから抽象化できます。単一のボリュームは、順序付けられたディスクの集合で構成できます。これは主に複数のブロックデバイスをデータストレージに利用できるようにするためのものですが、この抽象化により S3 を含む他のストレージタイプも利用可能になります。ClickHouse のデータパーツは、ストレージポリシーに従ってボリューム間を移動したり、使用率に応じて移動したりできるため、ストレージ階層という概念が生まれます。 + +ストレージ階層によりホット・コールド アーキテクチャが可能になります。もっとも新しいデータは、通常もっとも頻繁にクエリされるため、高性能ストレージ(例: NVMe SSD)の比較的小さな容量のみを必要とします。データが古くなるにつれて、SLA で許容されるクエリ時間は長くなり、クエリ頻度も下がります。この裾野の広いロングテールのデータは、HDD のような低速で性能の低いストレージや、S3 のようなオブジェクトストレージに保存できます。 + +### ディスクの作成 + +S3 バケットをディスクとして利用するには、まず ClickHouse の設定ファイル内で宣言する必要があります。`config.xml` を拡張するか、望ましくは `conf.d` 配下に新しいファイルを用意します。S3 ディスクの定義例を次に示します。 ```xml @@ -572,11 +591,11 @@ To utilize an S3 bucket as a disk, we must first declare it within the ClickHous ``` -A complete list of settings relevant to this disk declaration can be found [here](/engines/table-engines/mergetree-family/mergetree.md/#table_engine-mergetree-s3). Note that credentials can be managed here using the same approaches described in [Managing credentials](#managing-credentials), i.e., the use_environment_credentials can be set to true in the above settings block to use IAM roles. +このディスク宣言に関連する設定の完全な一覧は[こちら](/engines/table-engines/mergetree-family/mergetree.md/#table_engine-mergetree-s3)にあります。クレデンシャルは、[Managing credentials](#managing-credentials) で説明したのと同じ手法を用いてここで管理できます。たとえば、上記の設定ブロックで use_environment_credentials を true に設定することで、IAM ロールを使用できます。 -### Creating a storage policy {#creating-a-storage-policy} +### ストレージポリシーの作成 -Once configured, this "disk" can be used by a storage volume declared within a policy. For the example below, we assume s3 is our only storage. This ignores more complex hot-cold architectures where data can be relocated based on TTLs and fill rates. +一度設定すると、この「ディスク」はポリシー内で宣言されたストレージボリュームで使用できます。以下の例では、s3 が唯一のストレージであると仮定します。これは、TTL や使用率に基づいてデータを再配置できる、より複雑なホット・コールド構成は考慮していません。 ```xml @@ -602,9 +621,10 @@ Once configured, this "disk" can be used by a storage volume declared within a p ``` -### Creating a table {#creating-a-table} +### テーブルの作成 + +書き込み権限を持つバケットを使用するようにディスクを構成していると仮定すると、以下の例のようなテーブルを作成できるはずです。説明を簡潔にするため、NYC タクシー・データセットのカラムの一部のみを使用し、データを S3 をバックエンドとするテーブルへ直接ストリーミングします。 -Assuming you have configured your disk to use a bucket with write access, you should be able to create a table such as in the example below. For purposes of brevity, we use a subset of the NYC taxi columns and stream data directly to the s3 backed table: ```sql CREATE TABLE trips_s3 @@ -633,15 +653,15 @@ SETTINGS storage_policy='s3_main' INSERT INTO trips_s3 SELECT trip_id, pickup_date, pickup_datetime, dropoff_datetime, pickup_longitude, pickup_latitude, dropoff_longitude, dropoff_latitude, passenger_count, trip_distance, tip_amount, total_amount, payment_type FROM s3('https://ch-nyc-taxi.s3.eu-west-3.amazonaws.com/tsv/trips_{0..9}.tsv.gz', 'TabSeparatedWithNames') LIMIT 1000000; ``` -Depending on the hardware, this latter insert of 1m rows may take a few minutes to execute. You can confirm the progress via the system.processes table. Feel free to adjust the row count up to the limit of 10m and explore some sample queries. +ハードウェアによっては、この後の 100 万行の挿入の実行に数分かかる場合があります。`system.processes` テーブルで進行状況を確認できます。行数は最大 1,000 万行まで調整し、いくつかのサンプルクエリを試してみてください。 ```sql SELECT passenger_count, avg(tip_amount) AS avg_tip, avg(total_amount) AS avg_amount FROM trips_s3 GROUP BY passenger_count; ``` -### Modifying a table {#modifying-a-table} +### テーブルの変更 -Occasionally users may need to modify the storage policy of a specific table. Whilst this is possible, it comes with limitations. The new target policy must contain all of the disks and volumes of the previous policy, i.e., data will not be migrated to satisfy a policy change. When validating these constraints, volumes and disks will be identified by their name, with attempts to violate resulting in an error. However, assuming you use the previous examples, the following changes are valid. +特定のテーブルのストレージポリシーを変更する必要が生じることがあります。これは可能ですが、いくつか制限があります。新しいターゲットポリシーには、以前のポリシーに含まれていたすべてのディスクおよびボリュームが含まれていなければなりません。つまり、ポリシー変更に合わせてデータが移動されることはありません。これらの制約を検証する際には、ボリュームとディスクは名前によって識別され、これに反する変更を行おうとするとエラーになります。ただし、前述の例を使用している場合、次の変更は許可されます。 ```xml @@ -670,34 +690,41 @@ Occasionally users may need to modify the storage policy of a specific table. Wh ALTER TABLE trips_s3 MODIFY SETTING storage_policy='s3_tiered' ``` -Here we reuse the main volume in our new s3_tiered policy and introduce a new hot volume. This uses the default disk, which consists of only one disk configured via the parameter ``. Note that our volume names and disks do not change. New inserts to our table will reside on the default disk until this reaches move_factor * disk_size - at which data will be relocated to S3. +ここでは、新しい `s3_tiered` ポリシーで既存のメインボリュームを再利用し、新しいホットボリュームを導入します。これはデフォルトディスクを使用しており、このデフォルトディスクはパラメータ `` で設定された 1 つのディスクのみで構成されています。ボリューム名とディスクが変わらない点に注意してください。テーブルへの新規挿入データは、`move_factor * disk_size` に到達するまではデフォルトディスク上に保持され、その時点でデータは S3 に移動されます。 + +### レプリケーションの処理 -### Handling replication {#handling-replication} +S3 ディスクを用いたレプリケーションは、`ReplicatedMergeTree` テーブルエンジンを使用することで実現できます。詳細については、[S3 Object Storage を使用して 2 つの AWS リージョン間で単一シャードをレプリケートする](#s3-multi-region) ガイドを参照してください。 -Replication with S3 disks can be accomplished by using the `ReplicatedMergeTree` table engine. See the [replicating a single shard across two AWS regions using S3 Object Storage](#s3-multi-region) guide for details. +### 読み取りと書き込み -### Read & writes {#read--writes} +以下の注意事項では、ClickHouse における S3 との連携実装について説明します。多くは参考情報レベルですが、[パフォーマンス最適化](#s3-optimizing-performance) を行う際の助けとなる場合があります。 -The following notes cover the implementation of S3 interactions with ClickHouse. Whilst generally only informative, it may help the readers when [Optimizing for Performance](#s3-optimizing-performance): -* By default, the maximum number of query processing threads used by any stage of the query processing pipeline is equal to the number of cores. Some stages are more parallelizable than others, so this value provides an upper bound. Multiple query stages may execute at once since data is streamed from the disk. The exact number of threads used for a query may thus exceed this. Modify through the setting [max_threads](/operations/settings/settings#max_threads). -* Reads on S3 are asynchronous by default. This behavior is determined by setting `remote_filesystem_read_method`, set to the value `threadpool` by default. When serving a request, ClickHouse reads granules in stripes. Each of these stripes potentially contain many columns. A thread will read the columns for their granules one by one. Rather than doing this synchronously, a prefetch is made for all columns before waiting for the data. This offers significant performance improvements over synchronous waits on each column. Users will not need to change this setting in most cases - see [Optimizing for Performance](#s3-optimizing-performance). -* Writes are performed in parallel, with a maximum of 100 concurrent file writing threads. `max_insert_delayed_streams_for_parallel_write`, which has a default value of 1000, controls the number of S3 blobs written in parallel. Since a buffer is required for each file being written (~1MB), this effectively limits the memory consumption of an INSERT. It may be appropriate to lower this value in low server memory scenarios. +* デフォルトでは、クエリ処理パイプラインの任意のステージで使用されるクエリ処理用スレッドの最大数は、コア数と同じになります。ステージによって並列化のしやすさが異なるため、この値が上限として機能します。ディスクからデータがストリーミングされるため、複数のクエリステージが同時に実行される場合があります。そのため、クエリで実際に使用されるスレッド数がこの値を超えることもあります。この動作は設定 [max_threads](/operations/settings/settings#max_threads) で変更できます。 +* S3 上での読み取りは、デフォルトでは非同期で行われます。この挙動は `remote_filesystem_read_method` 設定によって決まり、デフォルト値は `threadpool` です。リクエストを処理する際、ClickHouse はストライプ単位でグラニュールを読み取ります。各ストライプには多くのカラムが含まれる可能性があります。1 本のスレッドが、そのグラニュールに対応するカラムを一つずつ読み取ります。これを同期的に行う代わりに、データを待つ前にすべてのカラムに対して先読み(prefetch)を行います。この方式により、各カラムを同期的に待機する場合と比べて大きな性能向上が得られます。多くのケースでは、この設定を変更する必要はありません。詳細は [パフォーマンス最適化](#s3-optimizing-performance) を参照してください。 +* 書き込みは並列で実行され、最大 100 本のファイル書き込みスレッドが同時に動作します。`max_insert_delayed_streams_for_parallel_write` はデフォルト値 1000 で、並列に書き込まれる S3 の BLOB オブジェクトの数を制御します。書き込み中の各ファイルごとにバッファ(約 1MB)が必要になるため、これは実質的に INSERT のメモリ消費量の上限を制約します。サーバーのメモリが少ない環境では、この値を下げることが適切な場合があります。 -## Use S3 object storage as a ClickHouse disk {#configuring-s3-for-clickhouse-use} -If you need step-by-step instructions to create buckets and an IAM role, then expand **Create S3 buckets and an IAM role** and follow along: + +## S3 オブジェクトストレージを ClickHouse のディスクとして使用する + +バケットと IAM ロールを作成するためのステップバイステップの手順が必要な場合は、**Create S3 buckets and an IAM role** を展開して、手順に従ってください。 -### Configure ClickHouse to use the S3 bucket as a disk {#configure-clickhouse-to-use-the-s3-bucket-as-a-disk} -The following example is based on a Linux Deb package installed as a service with default ClickHouse directories. +### ClickHouse を構成して S3 バケットをディスクとして使用する + +次の例は、デフォルトの ClickHouse ディレクトリを使用してサービスとしてインストールされた Linux の DEB パッケージを前提としています。 + +1. ストレージ構成を保存するために、ClickHouse の `config.d` ディレクトリに新しいファイルを作成します。 -1. Create a new file in the ClickHouse `config.d` directory to store the storage configuration. ```bash vim /etc/clickhouse-server/config.d/storage_config.xml ``` -2. Add the following for storage configuration; substituting the bucket path, access key and secret keys from earlier steps + +2. ストレージ設定として以下を追加し、先ほどの手順で取得したバケットパス、アクセスキー、シークレットキーに置き換えます + ```xml @@ -730,30 +757,37 @@ vim /etc/clickhouse-server/config.d/storage_config.xml ``` :::note -The tags `s3_disk` and `s3_cache` within the `` tag are arbitrary labels. These can be set to something else but the same label must be used in the `` tab under the `` tab to reference the disk. -The `` tag is also arbitrary and is the name of the policy which will be used as the identifier storage target when creating resources in ClickHouse. +`` タグ内の `s3_disk` および `s3_cache` は任意のラベルです。これらは別の名前に設定できますが、そのディスクを参照するために、同じラベルを `` タグ配下の `` タグでも使用する必要があります。 +`` タグも任意であり、ClickHouse 内でリソースを作成する際に、ストレージターゲットを識別するために使用されるポリシー名です。 -The configuration shown above is for ClickHouse version 22.8 or higher, if you are using an older version please see the [storing data](/operations/storing-data.md/#using-local-cache) docs. +上記の設定は ClickHouse バージョン 22.8 以降向けです。以前のバージョンを使用している場合は、[storing data](/operations/storing-data.md/#using-local-cache) ドキュメントを参照してください。 -For more information about using S3: +S3 の利用に関する詳細については、次を参照してください: Integrations Guide: [S3 Backed MergeTree](#s3-backed-mergetree) ::: -3. Update the owner of the file to the `clickhouse` user and group +3. ファイルの所有者を `clickhouse` ユーザーおよびグループに変更します + ```bash chown clickhouse:clickhouse /etc/clickhouse-server/config.d/storage_config.xml ``` -4. Restart the ClickHouse instance to have the changes take effect. + +4. 変更を有効にするために ClickHouse インスタンスを再起動します。 + ```bash service clickhouse-server restart ``` -### Testing {#testing} -1. Log in with the ClickHouse client, something like the following +### テスト + +1. 次のようなコマンドを使用して ClickHouse クライアントにログインします + ```bash clickhouse-client --user default --password ClickHouse123! ``` -2. Create a table specifying the new S3 storage policy + +2. 新しい S3 ストレージポリシーを指定したテーブルを作成する + ```sql CREATE TABLE s3_table1 ( @@ -765,10 +799,12 @@ CREATE TABLE s3_table1 SETTINGS storage_policy = 's3_main'; ``` -3. Show that the table was created with the correct policy +3. テーブルが適切なポリシーで作成されていることを確認します + ```sql SHOW CREATE TABLE s3_table1; ``` + ```response ┌─statement──────────────────────────────────────────────────── │ CREATE TABLE default.s3_table1 @@ -782,7 +818,8 @@ SETTINGS storage_policy = 's3_main', index_granularity = 8192 └────────────────────────────────────────────────────────────── ``` -4. Insert test rows into the table +4. テーブルにテスト用の行を挿入する + ```sql INSERT INTO s3_table1 (id, column1) @@ -790,6 +827,7 @@ INSERT INTO s3_table1 (1, 'abc'), (2, 'xyz'); ``` + ```response INSERT INTO s3_table1 (id, column1) FORMAT Values @@ -799,60 +837,70 @@ Ok. 2 rows in set. Elapsed: 0.337 sec. ``` -5. View the rows + +5. 行を確認する + ```sql SELECT * FROM s3_table1; ``` + ```response ┌─id─┬─column1─┐ │ 1 │ abc │ │ 2 │ xyz │ └────┴─────────┘ +``` + + +2 行が結果に含まれます。経過時間: 0.284 秒。 -2 rows in set. Elapsed: 0.284 sec. ``` -6. In the AWS console, navigate to the buckets, and select the new one and the folder. -You should see something like the following: +6. AWSコンソールで、バケットに移動し、新しく作成したバケットとフォルダを選択します。 +以下のような表示が確認できます。 + +S3に保存されたClickHouseデータファイルを表示するAWSコンソールのS3バケットビュー +``` -S3 bucket view in AWS console showing ClickHouse data files stored in S3 -## Replicating a single shard across two AWS regions using S3 Object Storage {#s3-multi-region} +## S3 オブジェクトストレージを使用して単一シャードを 2 つの AWS リージョン間でレプリケートする :::tip -Object storage is used by default in ClickHouse Cloud, you do not need to follow this procedure if you are running in ClickHouse Cloud. +ClickHouse Cloud ではデフォルトでオブジェクトストレージが使用されるため、ClickHouse Cloud 上で実行している場合はこの手順を実施する必要はありません。 ::: -### Plan the deployment {#plan-the-deployment} -This tutorial is based on deploying two ClickHouse Server nodes and three ClickHouse Keeper nodes in AWS EC2. The data store for the ClickHouse servers is S3. Two AWS regions, with a ClickHouse Server and an S3 Bucket in each region, are used in order to support disaster recovery. +### デプロイを計画する + +このチュートリアルは、AWS EC2 上に 2 つの ClickHouse サーバーノードと 3 つの ClickHouse Keeper ノードをデプロイすることを前提としています。ClickHouse サーバーのデータストアには S3 を使用します。ディザスタリカバリをサポートするために、2 つの AWS リージョンを使用し、それぞれのリージョンに 1 つずつ ClickHouse サーバーと S3 バケットを配置します。 -ClickHouse tables are replicated across the two servers, and therefore across the two regions. +ClickHouse テーブルは 2 台のサーバー間でレプリケートされるため、2 つのリージョン間でもレプリケートされます。 -### Install software {#install-software} +### ソフトウェアをインストールする -#### ClickHouse server nodes {#clickhouse-server-nodes} -Refer to the [installation instructions](/getting-started/install/install.mdx) when performing the deployment steps on the ClickHouse server nodes. +#### ClickHouse サーバーノード -#### Deploy ClickHouse {#deploy-clickhouse} +ClickHouse サーバーノードでデプロイ手順を実行する際は、[インストール手順](/getting-started/install/install.mdx) を参照してください。 -Deploy ClickHouse on two hosts, in the sample configurations these are named `chnode1`, `chnode2`. +#### ClickHouse をデプロイする -Place `chnode1` in one AWS region, and `chnode2` in a second. +2 つのホストに ClickHouse をデプロイします。サンプル構成では、これらは `chnode1`、`chnode2` という名前になっています。 -#### Deploy ClickHouse Keeper {#deploy-clickhouse-keeper} +`chnode1` を 1 つ目の AWS リージョンに、`chnode2` を 2 つ目のリージョンに配置します。 -Deploy ClickHouse Keeper on three hosts, in the sample configurations these are named `keepernode1`, `keepernode2`, and `keepernode3`. `keepernode1` can be deployed in the same region as `chnode1`, `keepernode2` with `chnode2`, and `keepernode3` in either region but a different availability zone from the ClickHouse node in that region. +#### ClickHouse Keeper をデプロイする -Refer to the [installation instructions](/getting-started/install/install.mdx) when performing the deployment steps on the ClickHouse Keeper nodes. +3 つのホストに ClickHouse Keeper をデプロイします。サンプル構成では、これらは `keepernode1`、`keepernode2`、`keepernode3` という名前になっています。`keepernode1` は `chnode1` と同じリージョンに、`keepernode2` は `chnode2` と同じリージョンに、`keepernode3` はいずれかのリージョン内で、そのリージョンの ClickHouse ノードとは別のアベイラビリティーゾーンにデプロイします。 -### Create S3 buckets {#create-s3-buckets} +ClickHouse Keeper ノードでデプロイ手順を実行する際は、[インストール手順](/getting-started/install/install.mdx) を参照してください。 -Create two S3 buckets, one in each of the regions that you have placed `chnode1` and `chnode2`. +### S3 バケットを作成する -If you need step-by-step instructions to create buckets and an IAM role, then expand **Create S3 buckets and an IAM role** and follow along: +`chnode1` と `chnode2` を配置したそれぞれのリージョンに、S3 バケットを 1 つずつ、合計 2 つ作成します。 + +バケットと IAM ロールの作成についてステップごとの手順が必要な場合は、**S3 バケットと IAM ロールの作成** を展開して、手順に従ってください。 -The configuration files will then be placed in `/etc/clickhouse-server/config.d/`. Here is a sample configuration file for one bucket, the other is similar with the three highlighted lines differing: +その後、設定ファイルは `/etc/clickhouse-server/config.d/` に配置します。以下は 1 つのバケットに対するサンプル設定ファイルであり、もう一方も同様ですが、ハイライトされている 3 行のみが異なります。 ```xml title="/etc/clickhouse-server/config.d/storage_config.xml" @@ -887,15 +935,17 @@ The configuration files will then be placed in `/etc/clickhouse-server/config.d/ ``` + :::note -Many of the steps in this guide will ask you to place a configuration file in `/etc/clickhouse-server/config.d/`. This is the default location on Linux systems for configuration override files. When you put these files into that directory ClickHouse will use the content to override the default configuration. By placing these files in the override directory you will avoid losing your configuration during an upgrade. +このガイドの多くの手順では、設定ファイルを `/etc/clickhouse-server/config.d/` に配置するよう指示されます。これは、Linux システムにおける設定上書き用ファイルのデフォルトの場所です。これらのファイルをそのディレクトリに配置すると、ClickHouse はその内容を使用してデフォルト設定を上書きします。これらのファイルをオーバーライド用ディレクトリに配置しておくことで、アップグレード時に設定が失われるのを防ぐことができます。 ::: -### Configure ClickHouse Keeper {#configure-clickhouse-keeper} +### ClickHouse Keeper を設定する + +ClickHouse Keeper を単体で(ClickHouse サーバーとは別に)実行する場合、設定は 1 つの XML ファイルで構成されます。このチュートリアルでは、そのファイルは `/etc/clickhouse-keeper/keeper_config.xml` です。3 台すべての Keeper サーバーは同じ設定を使用しますが、1 か所だけ異なる設定があります。それが `` です。 -When running ClickHouse Keeper standalone (separate from ClickHouse server) the configuration is a single XML file. In this tutorial, the file is `/etc/clickhouse-keeper/keeper_config.xml`. All three Keeper servers use the same configuration with one setting different; ``. -`server_id` indicates the ID to be assigned to the host where the configuration files is used. In the example below, the `server_id` is `3`, and if you look further down in the file in the `` section, you will see that server 3 has the hostname `keepernode3`. This is how the ClickHouse Keeper process knows which other servers to connect to when choosing a leader and all other activities. +`server_id` は、その設定ファイルを使用するホストに割り当てられる ID を示します。以下の例では、`server_id` は `3` であり、ファイル内のさらに下にある `` セクションを見ると、サーバー 3 のホスト名が `keepernode3` となっていることがわかります。ClickHouse Keeper プロセスは、この情報を基に、リーダーの選出やその他の処理全般を行う際に、どのサーバーへ接続すべきかを認識します。 ```xml title="/etc/clickhouse-keeper/keeper_config.xml" @@ -943,17 +993,18 @@ When running ClickHouse Keeper standalone (separate from ClickHouse server) the ``` -Copy the configuration file for ClickHouse Keeper in place (remembering to set the ``): +ClickHouse Keeper の設定ファイルを所定の場所にコピーします(`` を必ず設定してください): + ```bash sudo -u clickhouse \ cp keeper.xml /etc/clickhouse-keeper/keeper.xml ``` -### Configure ClickHouse server {#configure-clickhouse-server} +### ClickHouse サーバーの設定 -#### Define a cluster {#define-a-cluster} +#### クラスターの定義 -ClickHouse cluster(s) are defined in the `` section of the configuration. In this sample one cluster, `cluster_1S_2R`, is defined and it consists of a single shard with two replicas. The replicas are located on the hosts `chnode1` and `chnode2`. +ClickHouse のクラスターは設定の `` セクション内で定義します。この例では `cluster_1S_2R` という 1 つのクラスターが定義されており、単一のシャードと 2 つのレプリカで構成されています。レプリカはそれぞれ `chnode1` と `chnode2` のホスト上に配置されています。 ```xml title="/etc/clickhouse-server/config.d/remote-servers.xml" @@ -974,7 +1025,7 @@ ClickHouse cluster(s) are defined in the `` section of the confi ``` -When working with clusters it is handy to define macros that populate DDL queries with the cluster, shard, and replica settings. This sample allows you to specify the use of a replicated table engine without providing `shard` and `replica` details. When you create a table you can see how the `shard` and `replica` macros are used by querying `system.tables`. +クラスタを扱う場合、クラスタ、シャード、レプリカの設定を DDL クエリに埋め込むマクロを定義しておくと便利です。このサンプルでは、`shard` と `replica` を個別に指定しなくても、レプリケーション対応テーブルエンジンを利用できるようにしています。テーブルを作成したら、`system.tables` をクエリすることで、`shard` と `replica` のマクロがどのように展開されているかを確認できます。 ```xml title="/etc/clickhouse-server/config.d/macros.xml" @@ -988,15 +1039,17 @@ When working with clusters it is handy to define macros that populate DDL querie ``` + :::note -The above macros are for `chnode1`, on `chnode2` set `replica` to `replica_2`. +上記のマクロは `chnode1` 向けです。`chnode2` では `replica` を `replica_2` に設定してください。 ::: -#### Disable zero-copy replication {#disable-zero-copy-replication} +#### ゼロコピー レプリケーションを無効化する -In ClickHouse versions 22.7 and lower the setting `allow_remote_fs_zero_copy_replication` is set to `true` by default for S3 and HDFS disks. This setting should be set to `false` for this disaster recovery scenario, and in version 22.8 and higher it is set to `false` by default. -This setting should be false for two reasons: 1) this feature is not production ready; 2) in a disaster recovery scenario both the data and metadata need to be stored in multiple regions. Set `allow_remote_fs_zero_copy_replication` to `false`. +ClickHouse バージョン 22.7 以前では、`allow_remote_fs_zero_copy_replication` 設定は S3 および HDFS ディスクに対してデフォルトで `true` に設定されています。このディザスタリカバリのシナリオでは、この設定を `false` にする必要があり、バージョン 22.8 以降ではデフォルトで `false` に設定されています。 + +この設定は次の 2 つの理由から `false` にする必要があります。1) この機能はまだ本番環境での利用に十分な成熟度に達していないこと、2) ディザスタリカバリシナリオでは、データとメタデータの両方を複数のリージョンに保存する必要があることです。`allow_remote_fs_zero_copy_replication` を `false` に設定してください。 ```xml title="/etc/clickhouse-server/config.d/remote-servers.xml" @@ -1006,7 +1059,7 @@ This setting should be false for two reasons: 1) this feature is not production ``` -ClickHouse Keeper is responsible for coordinating the replication of data across the ClickHouse nodes. To inform ClickHouse about the ClickHouse Keeper nodes add a configuration file to each of the ClickHouse nodes. +ClickHouse Keeper は、ClickHouse ノード間でのデータレプリケーションを調整する役割を担います。ClickHouse に ClickHouse Keeper ノードを認識させるには、各 ClickHouse ノードに設定ファイルを追加します。 ```xml title="/etc/clickhouse-server/config.d/use_keeper.xml" @@ -1027,11 +1080,11 @@ ClickHouse Keeper is responsible for coordinating the replication of data across ``` -### Configure networking {#configure-networking} +### ネットワークの設定 -See the [network ports](../../../guides/sre/network-ports.md) list when you configure the security settings in AWS so that your servers can communicate with each other, and you can communicate with them. +サーバー同士、また利用者がサーバーと通信できるようにするために、AWS のセキュリティ設定を行う際は、[ネットワークポート](../../../guides/sre/network-ports.md)の一覧を参照してください。 -All three servers must listen for network connections so that they can communicate between the servers and with S3. By default, ClickHouse listens only on the loopback address, so this must be changed. This is configured in `/etc/clickhouse-server/config.d/`. Here is a sample that configures ClickHouse and ClickHouse Keeper to listen on all IP v4 interfaces. see the documentation or the default configuration file `/etc/clickhouse/config.xml` for more information. +3 台すべてのサーバーが、サーバー間および S3 との通信を行えるように、ネットワーク接続を待ち受けるよう構成する必要があります。デフォルトでは ClickHouse はループバックアドレスでのみ待ち受けるため、これを変更する必要があります。これは `/etc/clickhouse-server/config.d/` で設定します。以下は、ClickHouse および ClickHouse Keeper がすべての IPv4 インターフェイスで待ち受けるように構成するサンプルです。詳細については、ドキュメントまたはデフォルトの設定ファイル `/etc/clickhouse/config.xml` を参照してください。 ```xml title="/etc/clickhouse-server/config.d/networking.xml" @@ -1039,11 +1092,11 @@ All three servers must listen for network connections so that they can communica ``` -### Start the servers {#start-the-servers} +### サーバーを起動する -#### Run ClickHouse Keeper {#run-clickhouse-keeper} +#### ClickHouse Keeper を起動する -On each Keeper server run the commands for your operating system, for example: +各 Keeper サーバーで、使用しているオペレーティングシステムに応じたコマンドを実行します。例えば: ```bash sudo systemctl enable clickhouse-keeper @@ -1051,13 +1104,15 @@ sudo systemctl start clickhouse-keeper sudo systemctl status clickhouse-keeper ``` -#### Check ClickHouse Keeper status {#check-clickhouse-keeper-status} +#### ClickHouse Keeper の状態を確認する + +`netcat` を使って ClickHouse Keeper にコマンドを送信します。たとえば、`mntr` は ClickHouse Keeper クラスターの状態を返します。各 Keeper ノードでこのコマンドを実行すると、1 つがリーダーで、残り 2 つがフォロワーであることを確認できます。 -Send commands to the ClickHouse Keeper with `netcat`. For example, `mntr` returns the state of the ClickHouse Keeper cluster. If you run the command on each of the Keeper nodes you will see that one is a leader, and the other two are followers: ```bash echo mntr | nc localhost 9181 ``` + ```response zk_version v22.7.2.15-stable-f843089624e8dd3ff7927b8a125cf3a7a769c069 zk_avg_latency 0 @@ -1084,18 +1139,19 @@ zk_synced_followers 2 # highlight-end ``` -#### Run ClickHouse server {#run-clickhouse-server} +#### ClickHouse サーバーを起動する -On each ClickHouse server run +各 ClickHouse サーバーで次を実行します。 ```bash sudo service clickhouse-server start ``` -#### Verify ClickHouse server {#verify-clickhouse-server} +#### ClickHouse サーバーを検証する -When you added the [cluster configuration](#define-a-cluster) a single shard replicated across the two ClickHouse nodes was defined. In this verification step you will check that the cluster was built when ClickHouse was started, and you will create a replicated table using that cluster. -- Verify that the cluster exists: +[クラスタ設定](#define-a-cluster)を追加したとき、2 つの ClickHouse ノード間でレプリケートされる 1 つのシャードが定義されました。この検証ステップでは、ClickHouse の起動時にクラスタが構築されていることを確認し、そのクラスタを使用してレプリケートされたテーブルを作成します。 + +* クラスタが存在することを確認します: ```sql show clusters ``` @@ -1107,7 +1163,7 @@ When you added the [cluster configuration](#define-a-cluster) a single shard rep 1 row in set. Elapsed: 0.009 sec. ` ``` -- Create a table in the cluster using the `ReplicatedMergeTree` table engine: +* `ReplicatedMergeTree` テーブルエンジンを使用してクラスタ内にテーブルを作成します: ```sql create table trips on cluster 'cluster_1S_2R' ( `trip_id` UInt32, @@ -1134,56 +1190,66 @@ When you added the [cluster configuration](#define-a-cluster) a single shard rep │ chnode2 │ 9000 │ 0 │ │ 0 │ 0 │ └─────────┴──────┴────────┴───────┴─────────────────────┴──────────────────┘ ``` -- Understand the use of the macros defined earlier - The macros `shard`, and `replica` were [defined earlier](#define-a-cluster), and in the highlighted line below you can see where the values are substituted on each ClickHouse node. Additionally, the value `uuid` is used; `uuid` is not defined in the macros as it is generated by the system. +* 先ほど定義したマクロの使われ方を確認する + + マクロ `shard` と `replica` は[前に定義しました](#define-a-cluster)。下のハイライトされた行では、各 ClickHouse ノードでそれぞれの値がどのように置き換えられているかを確認できます。さらに `uuid` という値も使用されています。`uuid` はシステムによって生成されるため、マクロ内では定義されていません。 + ```sql SELECT create_table_query FROM system.tables WHERE name = 'trips' FORMAT Vertical ``` + ```response Query id: 4d326b66-0402-4c14-9c2f-212bedd282c0 + ``` - Row 1: - ────── - create_table_query: CREATE TABLE default.trips (`trip_id` UInt32, `pickup_date` Date, `pickup_datetime` DateTime, `dropoff_datetime` DateTime, `pickup_longitude` Float64, `pickup_latitude` Float64, `dropoff_longitude` Float64, `dropoff_latitude` Float64, `passenger_count` UInt8, `trip_distance` Float64, `tip_amount` Float32, `total_amount` Float32, `payment_type` Enum8('UNK' = 0, 'CSH' = 1, 'CRE' = 2, 'NOC' = 3, 'DIS' = 4)) - # highlight-next-line - ENGINE = ReplicatedMergeTree('/clickhouse/tables/{uuid}/{shard}', '{replica}') - PARTITION BY toYYYYMM(pickup_date) ORDER BY pickup_datetime SETTINGS storage_policy = 's3_main' - 1 row in set. Elapsed: 0.012 sec. - ``` - :::note - You can customize the zookeeper path `'clickhouse/tables/{uuid}/{shard}` shown above by setting `default_replica_path` and `default_replica_name`. The docs are [here](/operations/server-configuration-parameters/settings.md/#default_replica_path). - ::: +1 行目: +────── +create_table_query: CREATE TABLE default.trips (`trip_id` UInt32, `pickup_date` Date, `pickup_datetime` DateTime, `dropoff_datetime` DateTime, `pickup_longitude` Float64, `pickup_latitude` Float64, `dropoff_longitude` Float64, `dropoff_latitude` Float64, `passenger_count` UInt8, `trip_distance` Float64, `tip_amount` Float32, `total_amount` Float32, `payment_type` Enum8('UNK' = 0, 'CSH' = 1, 'CRE' = 2, 'NOC' = 3, 'DIS' = 4)) -### Testing {#testing-1} +# highlight-next-line -These tests will verify that data is being replicated across the two servers, and that it is stored in the S3 Buckets and not on local disk. +ENGINE = ReplicatedMergeTree('/clickhouse/tables/{uuid}/{shard}', '{replica}') +PARTITION BY toYYYYMM(pickup_date) ORDER BY pickup_datetime SETTINGS storage_policy = 's3_main' -- Add data from the New York City taxi dataset: - ```sql - INSERT INTO trips - SELECT trip_id, - pickup_date, - pickup_datetime, - dropoff_datetime, - pickup_longitude, - pickup_latitude, - dropoff_longitude, - dropoff_latitude, - passenger_count, - trip_distance, - tip_amount, - total_amount, - payment_type - FROM s3('https://ch-nyc-taxi.s3.eu-west-3.amazonaws.com/tsv/trips_{0..9}.tsv.gz', 'TabSeparatedWithNames') LIMIT 1000000; - ``` -- Verify that data is stored in S3. +1 行がセットに含まれています。経過時間: 0.012 秒。 + +```` +:::note +上記のzookeeperパス `'clickhouse/tables/{uuid}/{shard}` は、`default_replica_path` と `default_replica_name` を設定することでカスタマイズできます。ドキュメントは[こちら](/operations/server-configuration-parameters/settings.md/#default_replica_path)をご参照ください。 +::: + +### テスト {#testing-1} + +以下のテストでは、データが2つのサーバー間でレプリケーションされていること、およびローカルディスクではなくS3バケットに保存されていることを検証します。 + +- New York Cityタクシーデータセットからデータを追加します: +```sql +INSERT INTO trips +SELECT trip_id, + pickup_date, + pickup_datetime, + dropoff_datetime, + pickup_longitude, + pickup_latitude, + dropoff_longitude, + dropoff_latitude, + passenger_count, + trip_distance, + tip_amount, + total_amount, + payment_type + FROM s3('https://ch-nyc-taxi.s3.eu-west-3.amazonaws.com/tsv/trips_{0..9}.tsv.gz', 'TabSeparatedWithNames') LIMIT 1000000; +```` + +* データが S3 に保存されていることを確認します。 + + このクエリは、ディスク上のデータサイズと、どのディスクが使用されるかを決定するために使用されているストレージポリシーを表示します。 - This query shows the size of the data on disk, and the policy used to determine which disk is used. ```sql SELECT engine, @@ -1195,6 +1261,7 @@ These tests will verify that data is being replicated across the two servers, an WHERE name = 'trips' FORMAT Vertical ``` + ```response Query id: af7a3d1b-7730-49e0-9314-cc51c4cf053c @@ -1209,39 +1276,41 @@ These tests will verify that data is being replicated across the two servers, an 1 row in set. Elapsed: 0.009 sec. ``` - Check the size of data on the local disk. From above, the size on disk for the millions of rows stored is 36.42 MiB. This should be on S3, and not the local disk. The query above also tells us where on local disk data and metadata is stored. Check the local data: + ローカルディスク上のデータサイズを確認します。上の結果から、保存されている数百万行のディスク上のサイズは 36.42 MiB です。これはローカルディスクではなく S3 上にあるはずです。上記のクエリからは、ローカルディスク上のデータとメタデータの保存場所も分かります。ローカル側のデータを確認します: + ```response root@chnode1:~# du -sh /var/lib/clickhouse/disks/s3_disk/store/551 536K /var/lib/clickhouse/disks/s3_disk/store/551 ``` - Check the S3 data in each S3 Bucket (the totals are not shown, but both buckets have approximately 36 MiB stored after the inserts): + 各 S3 バケット内のデータを確認します(合計は表示されていませんが、両方のバケットにはインサート後に約 36 MiB が保存されています): -Size of data in first S3 bucket showing storage usage metrics +最初の S3 バケット内のデータサイズ(ストレージ使用量メトリクスを表示) -Size of data in second S3 bucket showing storage usage metrics +2 番目の S3 バケット内のデータサイズ(ストレージ使用量メトリクスを表示) -## S3Express {#s3express} -[S3Express](https://aws.amazon.com/s3/storage-classes/express-one-zone/) is a new high-performance, single-Availability Zone storage class in Amazon S3. +## S3Express -You could refer to this [blog](https://aws.amazon.com/blogs/storage/clickhouse-cloud-amazon-s3-express-one-zone-making-a-blazing-fast-analytical-database-even-faster/) to read about our experience testing S3Express with ClickHouse. +[S3Express](https://aws.amazon.com/s3/storage-classes/express-one-zone/) は、Amazon S3 における新しい高性能な単一アベイラビリティーゾーン向けストレージクラスです。 + +S3Express を ClickHouse でテストした際の経験については、この [ブログ記事](https://aws.amazon.com/blogs/storage/clickhouse-cloud-amazon-s3-express-one-zone-making-a-blazing-fast-analytical-database-even-faster/) を参照してください。 :::note - S3Express stores data within a single AZ. It means data will be unavailable in case of AZ outage. +S3Express はデータを単一の AZ 内に保存します。これは、AZ 障害時にはデータにアクセスできなくなることを意味します。 ::: -### S3 disk {#s3-disk} +### S3 disk -Creating a table with storage backed by a S3Express bucket involves the following steps: +S3Express バケット上のストレージをバックエンドとするテーブルを作成するには、次の手順を実行します。 -1. Create a bucket of `Directory` type -2. Install appropriate bucket policy to grant all required permissions to your S3 user (e.g. `"Action": "s3express:*"` to simply allow unrestricted access) -3. When configuring the storage policy please provide the `region` parameter +1. `Directory` タイプのバケットを作成する +2. S3 ユーザーに必要なすべての権限を付与するため、適切なバケットポリシーを設定する(例: 無制限アクセスを許可するために `"Action": "s3express:*"` を設定) +3. ストレージポリシーを設定する際に、`region` パラメータを指定する -Storage configuration is the same as for ordinary S3 and for example might look the following way: +ストレージ構成は通常の S3 と同じであり、たとえば次のようになります。 -``` sql +```sql @@ -1264,9 +1333,9 @@ Storage configuration is the same as for ordinary S3 and for example might look ``` -And then create a table on the new storage: +次に、新しいストレージ上にテーブルを作成します。 -``` sql +```sql CREATE TABLE t ( a UInt64, @@ -1277,17 +1346,17 @@ ORDER BY a SETTINGS storage_policy = 's3_express'; ``` -### S3 storage {#s3-storage} +### S3 ストレージ -S3 storage is also supported but only for `Object URL` paths. Example: +S3 ストレージもサポートされていますが、`Object URL` 形式のパスに対してのみ利用できます。例: -``` sql +```sql SELECT * FROM s3('https://test-bucket--eun1-az1--x-s3.s3express-eun1-az1.eu-north-1.amazonaws.com/file.csv', ...) ``` -it also requires specifying bucket region in the config: +また、設定でバケットのリージョンを指定する必要もあります: -``` xml +```xml https://test-bucket--eun1-az1--x-s3.s3express-eun1-az1.eu-north-1.amazonaws.com @@ -1296,11 +1365,11 @@ it also requires specifying bucket region in the config: ``` -### Backups {#backups} +### バックアップ -It is possible to store a backup on the disk we created above: +上で作成したディスクにバックアップを保存できます。 -``` sql +```sql BACKUP TABLE t TO Disk('s3_express', 't.zip') ┌─id───────────────────────────────────┬─status─────────┐ @@ -1308,7 +1377,7 @@ BACKUP TABLE t TO Disk('s3_express', 't.zip') └──────────────────────────────────────┴────────────────┘ ``` -``` sql +```sql RESTORE TABLE t AS t_restored FROM Disk('s3_express', 't.zip') ┌─id───────────────────────────────────┬─status───┐ diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/s3/performance.md b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/s3/performance.md index f93cf1601da..823a99a38a0 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/s3/performance.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/s3/performance.md @@ -1,9 +1,9 @@ --- slug: /integrations/s3/performance sidebar_position: 2 -sidebar_label: 'パフォーマンスの最適化' -title: 'S3 の挿入および読み取りパフォーマンスの最適化' -description: 'S3 の読み取りと挿入のパフォーマンスを最適化する' +sidebar_label: 'パフォーマンス最適化' +title: 'S3 の書き込みおよび読み取りパフォーマンスの最適化' +description: 'S3 の読み取りおよび書き込みパフォーマンスの最適化' doc_type: 'guide' keywords: ['s3', 'performance', 'optimization', 'object storage', 'data loading'] --- @@ -17,145 +17,158 @@ import InsertThreads from '@site/static/images/integrations/data-ingestion/s3/in import S3Cluster from '@site/static/images/integrations/data-ingestion/s3/s3Cluster.png'; import HardwareSize from '@site/static/images/integrations/data-ingestion/s3/hardware_size.png'; -このセクションでは、[s3 テーブル関数](/sql-reference/table-functions/s3)を使用して S3 からデータを読み取りおよび挿入する際のパフォーマンス最適化に焦点を当てています。 +このセクションでは、[s3 テーブル関数](/sql-reference/table-functions/s3) を使用して S3 からデータを読み取りおよび挿入する際のパフォーマンス最適化に焦点を当てます。 :::info -**このガイドで説明されているレッスンは、[GCS](/sql-reference/table-functions/gcs) や [Azure Blob storage](/sql-reference/table-functions/azureBlobStorage) などの専用テーブル関数を持つ他のオブジェクトストレージ実装にも適用できます。** +**本ガイドで説明する手法は、[GCS](/sql-reference/table-functions/gcs) や [Azure Blob storage](/sql-reference/table-functions/azureBlobStorage) など、独自の専用テーブル関数を持つ他のオブジェクトストレージ実装にも適用できます。** ::: -スレッドとブロックサイズを調整して挿入パフォーマンスを向上させる前に、S3 挿入のメカニクスを理解することをお勧めします。挿入メカニクスに精通している場合、またはクイックヒントだけが必要な場合は、[以下](/integrations/s3/performance#example-dataset)の例にスキップしてください。 +挿入パフォーマンスを向上させるためにスレッド数やブロックサイズをチューニングする前に、まずは S3 への INSERT の仕組みを理解することをお勧めします。すでに INSERT の仕組みに慣れている場合や、すぐに役立つヒントだけを知りたい場合は、以下の[サンプルデータセット](/integrations/s3/performance#example-dataset)に進んでください。 -## 挿入メカニクス(単一ノード) {#insert-mechanics-single-node} -ハードウェアサイズに加えて、ClickHouse のデータ挿入メカニクス(単一ノード用)のパフォーマンスとリソース使用量に影響を与える主な要因は 2 つあります: **挿入ブロックサイズ** と **挿入並列性** です。 +## 挿入メカニズム(単一ノード) -### 挿入ブロックサイズ {#insert-block-size} +ハードウェアの規模に加えて、ClickHouse のデータ挿入メカニズム(単一ノード)のパフォーマンスとリソース使用量に影響を与える主な要因は 2 つあります。**挿入ブロックサイズ** と **挿入の並列度** です。 -ClickHouse における挿入ブロックサイズのメカニクス +### 挿入ブロックサイズ -`INSERT INTO SELECT` を実行すると、ClickHouse はデータ部分を受け取り、①受け取ったデータから([パーティショニングキー](/engines/table-engines/mergetree-family/custom-partitioning-key)ごとに)少なくとも 1 つのインメモリ挿入ブロックを形成します。ブロックのデータはソートされ、テーブルエンジン固有の最適化が適用されます。次にデータは圧縮され、②新しいデータパートの形式でデータベースストレージに書き込まれます。 +ClickHouse における挿入ブロックサイズのメカニズム -挿入ブロックサイズは、ClickHouse サーバーの[ディスクファイル I/O 使用量](https://en.wikipedia.org/wiki/Category:Disk_file_systems)とメモリ使用量の両方に影響します。より大きな挿入ブロックはより多くのメモリを使用しますが、より大きく、より少ない初期パートを生成します。大量のデータをロードするために ClickHouse が作成する必要があるパートが少ないほど、ディスクファイル I/O と自動[バックグラウンドマージの必要性](https://clickhouse.com/blog/supercharge-your-clickhouse-data-loads-part1#more-parts--more-background-part-merges)が少なくなります。 +`INSERT INTO SELECT` を実行する際、ClickHouse はデータの一部を受け取り、受信したデータから ① メモリ上に(少なくとも 1 つ、[パーティショニングキー](/engines/table-engines/mergetree-family/custom-partitioning-key) ごとに)挿入ブロックを形成します。ブロック内のデータはソートされ、テーブルエンジン固有の最適化が適用されます。その後、データは圧縮され、② 新しい data part の形式でデータベースストレージに書き込まれます。 -統合テーブルエンジンまたはテーブル関数と組み合わせて `INSERT INTO SELECT` クエリを使用する場合、データは ClickHouse サーバーによってプルされます: +挿入ブロックサイズは、ClickHouse サーバーの [ディスクファイル I/O 使用量](https://en.wikipedia.org/wiki/Category:Disk_file_systems) とメモリ使用量の両方に影響します。より大きな挿入ブロックはより多くのメモリを使用しますが、より大きく数の少ない初期の data part を生成します。大量のデータをロードする際に ClickHouse が作成する必要がある part の数が少ないほど、必要なディスクファイル I/O と自動[バックグラウンドマージ](https://clickhouse.com/blog/supercharge-your-clickhouse-data-loads-part1#more-parts--more-background-part-merges)は少なくなります。 -Pulling data from external sources in ClickHouse +`INSERT INTO SELECT` クエリをインテグレーションテーブルエンジンまたはテーブル関数と組み合わせて使用する場合、データは ClickHouse サーバー側からプルされます。 -Until the data is completely loaded, the server executes a loop: +ClickHouse における外部ソースからのデータプル + +データが完全にロードされるまで、サーバーはループを実行し続けます。 ```bash -① Pull and parse the next portion of data and form an in-memory data block (one per partitioning key) from it. +① 次のデータの一部を取得して解析し、インメモリのデータブロック(パーティションキーごとに1つ)を作成する。 -② Write the block into a new part on storage. +② そのブロックをストレージ上の新しいパートとして書き込む。 -Go to ① +①に戻る ``` -In ①, the size depends on the insert block size, which can be controlled with two settings: +①では、サイズは挿入ブロックサイズに依存し、これは次の 2 つの設定で制御できます。 -- [`min_insert_block_size_rows`](/operations/settings/settings#min_insert_block_size_rows) (default: `1048545` million rows) -- [`min_insert_block_size_bytes`](/operations/settings/settings#min_insert_block_size_bytes) (default: `256 MiB`) +* [`min_insert_block_size_rows`](/operations/settings/settings#min_insert_block_size_rows)(デフォルト: `1048545` 百万行) +* [`min_insert_block_size_bytes`](/operations/settings/settings#min_insert_block_size_bytes)(デフォルト: `256 MiB`) -When either the specified number of rows is collected in the insert block, or the configured amount of data is reached (whichever happens first), then this will trigger the block being written into a new part. The insert loop continues at step ①. +挿入ブロック内に指定した行数が集まるか、設定したデータ量に到達すると(先に到達した方)、そのタイミングでブロックが新しいパートとして書き込まれます。挿入ループはステップ ① に戻ります。 -Note that the `min_insert_block_size_bytes` value denotes the uncompressed in-memory block size (and not the compressed on-disk part size). Also, note that the created blocks and parts rarely precisely contain the configured number of rows or bytes because ClickHouse streams and [processes](https://clickhouse.com/company/events/query-performance-introspection) data row-[block](/operations/settings/settings#max_block_size)-wise. Therefore, these settings specify minimum thresholds. +`min_insert_block_size_bytes` の値は、圧縮前のメモリ上のブロックサイズ(オンディスクの圧縮後パートサイズではない)を表す点に注意してください。また、ClickHouse はデータを行単位ではなく[ブロック](/operations/settings/settings#max_block_size)単位でストリーミングおよび[処理](https://clickhouse.com/company/events/query-performance-introspection)するため、作成されるブロックおよびパートが設定された行数やバイト数を厳密に満たすことはほとんどありません。そのため、これらの設定は最小しきい値を指定するものです。 -#### Be aware of merges {#be-aware-of-merges} +#### マージに注意する -The smaller the configured insert block size is, the more initial parts get created for a large data load, and the more background part merges are executed concurrently with the data ingestion. This can cause resource contention (CPU and memory) and require additional time (for reaching a [healthy](/operations/settings/merge-tree-settings#parts_to_throw_insert) (3000) number of parts) after the ingestion is finished. +設定された挿入ブロックサイズが小さいほど、大量データロード時に作成される初期パートの数が増え、データのインジェストと同時にバックグラウンドのパートマージがより多く実行されます。これにより、リソース(CPU とメモリ)の競合が発生し、インジェスト完了後に[健全な](/operations/settings/merge-tree-settings#parts_to_throw_insert)(3000)パート数に到達するまでに追加の時間が必要になる可能性があります。 :::important -ClickHouse query performance will be negatively impacted if the part count exceeds the [recommended limits](/operations/settings/merge-tree-settings#parts_to_throw_insert). +パート数が[推奨上限](/operations/settings/merge-tree-settings#parts_to_throw_insert)を超えると、ClickHouse のクエリパフォーマンスは悪化します。 ::: -ClickHouse will continuously [merge parts](https://clickhouse.com/blog/asynchronous-data-inserts-in-clickhouse#data-needs-to-be-batched-for-optimal-performance) into larger parts until they [reach](/operations/settings/merge-tree-settings#max_bytes_to_merge_at_max_space_in_pool) a compressed size of ~150 GiB. This diagram shows how a ClickHouse server merges parts: +ClickHouse は、圧縮サイズが約 150 GiB に[到達](/operations/settings/merge-tree-settings#max_bytes_to_merge_at_max_space_in_pool)するまで、継続的に[パートをマージ](https://clickhouse.com/blog/asynchronous-data-inserts-in-clickhouse#data-needs-to-be-batched-for-optimal-performance)して、より大きなパートにまとめます。次の図は、ClickHouse サーバーがどのようにパートをマージするかを示しています。 -Background merges in ClickHouse +ClickHouse におけるバックグラウンドマージ -A single ClickHouse server utilizes several [background merge threads](/operations/server-configuration-parameters/settings#background_pool_size) to execute concurrent [part merges](https://clickhouse.com/blog/supercharge-your-clickhouse-data-loads-part1#more-parts--more-background-part-merges:~:text=to%20execute%20concurrent-,part%20merges,-.%20Each%20thread%20executes). Each thread executes a loop: +1 台の ClickHouse サーバーは、複数の[バックグラウンドマージスレッド](/operations/server-configuration-parameters/settings#background_pool_size)を使用して、同時に[パートマージ](https://clickhouse.com/blog/supercharge-your-clickhouse-data-loads-part1#more-parts--more-background-part-merges:~:text=to%20execute%20concurrent-,part%20merges,-.%20Each%20thread%20executes)を実行します。各スレッドはループを実行します。 ```bash -① Decide which parts to merge next, and load these parts as blocks into memory. +① 次にマージする部分を決定し、それらをブロックとしてメモリにロードします。 -② Merge the loaded blocks in memory into a larger block. +② メモリにロードされたブロックをマージして、より大きなブロックにします。 +``` -③ Write the merged block into a new part on disk. -Go to ① -``` +③ マージされたブロックをディスク上の新しいパートに書き込む。 -Note that [increasing](https://clickhouse.com/blog/supercharge-your-clickhouse-data-loads-part1#hardware-size) the number of CPU cores and the size of RAM increases the background merge throughput. +① に戻る -Parts that were merged into larger parts are marked as [inactive](/operations/system-tables/parts) and finally deleted after a [configurable](/operations/settings/merge-tree-settings#old_parts_lifetime) number of minutes. Over time, this creates a tree of merged parts (hence the name [`MergeTree`](/engines/table-engines/mergetree-family) table). +```` -### Insert parallelism {#insert-parallelism} +CPU コア数と RAM 容量を[増やす](https://clickhouse.com/blog/supercharge-your-clickhouse-data-loads-part1#hardware-size)と、バックグラウンドマージのスループットが向上することに注意してください。 -Resource usage for insert parallelism +より大きなパーツにマージされたパーツは [inactive](/operations/system-tables/parts) としてマークされ、[設定可能](/operations/settings/merge-tree-settings#old_parts_lifetime)な分数が経過すると最終的に削除されます。時間の経過とともに、これによりマージされたパーツからなる木構造が形成されます(これが [`MergeTree`](/engines/table-engines/mergetree-family) テーブルという名前の由来です)。 -A ClickHouse server can process and insert data in parallel. The level of insert parallelism impacts the ingest throughput and memory usage of a ClickHouse server. Loading and processing data in parallel requires more main memory but increases the ingest throughput as data is processed faster. +### 挿入の並列性 {#insert-parallelism} -Table functions like s3 allow specifying sets of to-be-loaded-file names via glob patterns. When a glob pattern matches multiple existing files, ClickHouse can parallelize reads across and within these files and insert the data in parallel into a table by utilizing parallel running insert threads (per server): +Insert parallelism におけるリソース使用量 -Parallel insert threads in ClickHouse +ClickHouse サーバーは、データを並列に処理して挿入できます。挿入の並列度は、ClickHouse サーバーの取り込みスループットとメモリ使用量に影響します。データを並列に読み込み・処理するにはより多くのメインメモリが必要ですが、データ処理が高速になるため取り込みスループットが向上します。 -Until all data from all files is processed, each insert thread executes a loop: +s3 のようなテーブル関数では、グロブパターンを使って読み込み対象ファイル名の集合を指定できます。グロブパターンが複数の既存ファイルにマッチする場合、ClickHouse はそれらのファイル間およびファイル内で読み取りを並列化し、サーバーごとに並列で実行される挿入スレッドを利用して、データをテーブルに並列挿入できます。 + +ClickHouse における並列挿入スレッド + +すべてのファイルのすべてのデータが処理されるまで、各挿入スレッドは次のループを実行します: ```bash -① Get the next portion of unprocessed file data (portion size is based on the configured block size) and create an in-memory data block from it. +① 未処理のファイルデータの次の部分を取得し(部分サイズは設定されたブロックサイズに基づく)、そこからインメモリのデータブロックを作成する。 -② Write the block into a new part on storage. +② そのブロックをストレージ上の新しいパーツに書き込む。 -Go to ①. -``` +① に戻る。 +```` + +このような並列挿入スレッドの数は、[`max_insert_threads`](/operations/settings/settings#max_insert_threads) 設定で指定できます。デフォルト値は、オープンソース版 ClickHouse では `1`、[ClickHouse Cloud](https://clickhouse.com/cloud) では `4` です。 + +大量のファイルがある場合、複数の挿入スレッドによる並列処理が有効に機能します。これにより、利用可能な CPU コアおよびネットワーク帯域幅(ファイルの並列ダウンロード)を十分に使い切ることができます。少数の大きなファイルだけをテーブルにロードするシナリオでは、ClickHouse は自動的に高いレベルのデータ処理並列性を実現し、各挿入スレッドごとに追加のリーダースレッドを生成して、大きなファイル内のより多くの別々の範囲を並列に読み取り(ダウンロード)することでネットワーク帯域幅の使用を最適化します。 + +`s3` 関数およびテーブルの場合、個々のファイルの並列ダウンロードは [max_download_threads](https://clickhouse.com/codebrowser/ClickHouse/src/Core/Settings.h.html#DB::SettingsTraits::Data::max_download_threads) と [max_download_buffer_size](https://clickhouse.com/codebrowser/ClickHouse/src/Core/Settings.h.html#DB::SettingsTraits::Data::max_download_buffer_size) の値によって決まります。ファイルサイズが `2 * max_download_buffer_size` より大きい場合にのみ、ファイルは並列でダウンロードされます。デフォルトでは、`max_download_buffer_size` は 10MiB に設定されています。場合によっては、各ファイルが単一スレッドによってダウンロードされるようにすることを目的として、このバッファサイズを 50 MB(`max_download_buffer_size=52428800`)まで安全に増やすことができます。これにより、各スレッドが行う S3 呼び出しに要する時間を短縮でき、その結果として S3 の待ち時間も短縮されます。さらに、並列読み取りには小さすぎるファイルについてスループットを向上させるために、ClickHouse はそのようなファイルを非同期に先読みすることでデータを自動的にプリフェッチします。 + + +## パフォーマンスの測定 {#measuring-performance} -The number of such parallel insert threads can be configured with the [`max_insert_threads`](/operations/settings/settings#max_insert_threads) setting. The default value is `1` for open-source ClickHouse and 4 for [ClickHouse Cloud](https://clickhouse.com/cloud). +S3 テーブル関数を使用するクエリのパフォーマンス最適化は、次の 2 つのケースで必要になります。1 つ目は、S3 上のデータをその場に置いたままクエリする場合、すなわちデータは元の形式のまま S3 に残し、ClickHouse の計算リソースのみを使用するアドホッククエリの場合、2 つ目は、S3 から ClickHouse の MergeTree テーブルエンジンにデータを挿入する場合です。特に明記がない限り、以下の推奨事項は両方のシナリオに適用されます。 -With a large number of files, the parallel processing by multiple insert threads works well. It can fully saturate both the available CPU cores and the network bandwidth (for parallel file downloads). In scenarios where just a few large files will be loaded into a table, ClickHouse automatically establishes a high level of data processing parallelism and optimizes network bandwidth usage by spawning additional reader threads per insert thread for reading (downloading) more distinct ranges within large files in parallel. -For the s3 function and table, parallel downloading of an individual file is determined by the values [max_download_threads](https://clickhouse.com/codebrowser/ClickHouse/src/Core/Settings.h.html#DB::SettingsTraits::Data::max_download_threads) and [max_download_buffer_size](https://clickhouse.com/codebrowser/ClickHouse/src/Core/Settings.h.html#DB::SettingsTraits::Data::max_download_buffer_size). Files will only be downloaded in parallel if their size is greater than `2 * max_download_buffer_size`. By default, the `max_download_buffer_size` default is set to 10MiB. In some cases, you can safely increase this buffer size to 50 MB (`max_download_buffer_size=52428800`), with the aim of ensuring each file was downloaded by a single thread. This can reduce the time each thread spends making S3 calls and thus also lower the S3 wait time. Furthermore, for files that are too small for parallel reading, to increase throughput, ClickHouse automatically prefetches data by pre-reading such files asynchronously. -## Measuring performance {#measuring-performance} +## ハードウェア規模の影響 {#impact-of-hardware-size} -Optimizing the performance of queries using the S3 table functions is required when both running queries against data in place i.e. ad-hoc querying where only ClickHouse compute is used and the data remains in S3 in its original format, and when inserting data from S3 into a ClickHouse MergeTree table engine. Unless specified the following recommendations apply to both scenarios. +ハードウェア規模が ClickHouse のパフォーマンスに与える影響 -## Impact of hardware size {#impact-of-hardware-size} +利用可能な CPU コア数と RAM 容量は、次の点に影響します。 -Impact of hardware size on ClickHouse performance +- サポートされる[パーツの初期サイズ](#insert-block-size) +- 可能な[挿入処理の並列度](#insert-parallelism) +- [バックグラウンドでのパーツマージ](https://clickhouse.com/blog/supercharge-your-clickhouse-data-loads-part1#more-parts--more-background-part-merges)のスループット -The number of available CPU cores and the size of RAM impacts the: +したがって、取り込み全体のスループットにも影響します。 -- supported [initial size of parts](#insert-block-size) -- possible level of [insert parallelism](#insert-parallelism) -- throughput of [background part merges](https://clickhouse.com/blog/supercharge-your-clickhouse-data-loads-part1#more-parts--more-background-part-merges) -and, therefore, the overall ingest throughput. -## Region locality {#region-locality} +## リージョンのローカリティ {#region-locality} -Ensure your buckets are located in the same region as your ClickHouse instances. This simple optimization can dramatically improve throughput performance, especially if you deploy your ClickHouse instances on AWS infrastructure. +バケットが ClickHouse インスタンスと同じリージョンに存在することを確認してください。この簡単な最適化により、特に ClickHouse インスタンスを AWS のインフラストラクチャ上にデプロイしている場合、スループットが大幅に向上する可能性があります。 -## Formats {#formats} -ClickHouse can read files stored in S3 buckets in the [supported formats](/interfaces/formats#formats-overview) using the `s3` function and `S3` engine. If reading raw files, some of these formats have distinct advantages: -* Formats with encoded column names such as Native, Parquet, CSVWithNames, and TabSeparatedWithNames will be less verbose to query since the user will not be required to specify the column name is the `s3` function. The column names allow this information to be inferred. -* Formats will differ in performance with respect to read and write throughputs. Native and parquet represent the most optimal formats for read performance since they are already column orientated and more compact. The native format additionally benefits from alignment with how ClickHouse stores data in memory - thus reducing processing overhead as data is streamed into ClickHouse. -* The block size will often impact the latency of reads on large files. This is very apparent if you only sample the data, e.g., returning the top N rows. In the case of formats such as CSV and TSV, files must be parsed to return a set of rows. Formats such as Native and Parquet will allow faster sampling as a result. -* Each compression format brings pros and cons, often balancing the compression level for speed and biasing compression or decompression performance. If compressing raw files such as CSV or TSV, lz4 offers the fastest decompression performance, sacrificing the compression level. Gzip typically compresses better at the expense of slightly slower read speeds. Xz takes this further by usually offering the best compression with the slowest compression and decompression performance. If exporting, Gz and lz4 offer comparable compression speeds. Balance this against your connection speeds. Any gains from faster decompression or compression will be easily negated by a slower connection to your s3 buckets. -* Formats such as native or parquet do not typically justify the overhead of compression. Any savings in data size are likely to be minimal since these formats are inherently compact. The time spent compressing and decompressing will rarely offset network transfer times - especially since s3 is globally available with higher network bandwidth. +## フォーマット {#formats} -## Example dataset {#example-dataset} +ClickHouse は、`s3` 関数および `S3` エンジンを使用して、S3 バケットに保存されたファイルを [サポートされているフォーマット](/interfaces/formats#formats-overview) で読み取ることができます。元のファイルを直接読み取る場合、これらのフォーマットにはいくつかの明確な利点があります。 -To illustrate further potential optimizations, purposes we will use [the posts from the Stack Overflow dataset](/data-modeling/schema-design#stack-overflow-dataset) - optimizing both the query and insert performance of this data. +* Native、Parquet、CSVWithNames、TabSeparatedWithNames のようにカラム名がエンコードされているフォーマットでは、ユーザーが `s3` 関数にカラム名を指定する必要がないため、クエリが簡潔になります。カラム名からこの情報を推論できます。 +* フォーマットごとに、読み書きスループットの観点で性能が異なります。Native と Parquet はすでにカラム指向であり、よりコンパクトであるため、読み取り性能の点で最適なフォーマットです。Native フォーマットはさらに、ClickHouse がメモリ内にデータを格納する方法と整合しているため、データが ClickHouse にストリーミングされる際の処理オーバーヘッドを削減できます。 +* ブロックサイズは、大きなファイルの読み取りレイテンシにしばしば影響します。これは、たとえば先頭 N 行だけを返すなど、データをサンプリングする場合に顕著です。CSV や TSV のようなフォーマットでは、行の集合を返すためにファイルをパースする必要があります。Native や Parquet のようなフォーマットでは、この結果としてより高速なサンプリングが可能になります。 +* 各圧縮フォーマットには一長一短があり、多くの場合、圧縮率と速度、および圧縮・解凍それぞれの性能のバランスを取ります。CSV や TSV のような元のファイルを圧縮する場合、lz4 は圧縮率を犠牲にする代わりに、最速の解凍性能を提供します。Gzip は一般的に、読み取り速度がわずかに低下する代わりに、より高い圧縮率を実現します。Xz はこれをさらに推し進め、通常は最も高い圧縮率を提供しますが、圧縮および解凍の性能は最も低くなります。エクスポートする場合、Gz と lz4 は概ね同程度の圧縮速度を提供します。これを接続速度と比較して検討してください。解凍や圧縮が高速になることによる利点は、S3 バケットへの接続が遅いと簡単に相殺されてしまいます。 +* Native や Parquet のようなフォーマットでは、通常、圧縮のオーバーヘッドを正当化できません。これらのフォーマットは本質的にコンパクトであるため、データサイズ削減の効果は小さいことが多いです。圧縮および解凍に費やす時間は、ネットワーク転送時間を相殺することはほとんどありません。特に S3 はグローバルに利用可能であり、高いネットワーク帯域幅を持つため、なおさらです。 -This dataset consists of 189 Parquet files, with one for every month between July 2008 and March 2024. -Note that we use Parquet for performance, per our [recommendations above](#formats), executing all queries on a ClickHouse Cluster located in the same region as the bucket. This cluster has 3 nodes, each with 32GiB of RAM and 8 vCPUs. -With no tuning, we demonstrate the performance to insert this dataset into a MergeTree table engine as well as execute a query to compute the users asking the most questions. Both of these queries intentionally require a complete scan of the data. +## 例となるデータセット + +さらなる最適化の可能性を示すために、ここでは [Stack Overflow データセットの投稿](/data-modeling/schema-design#stack-overflow-dataset) を利用し、このデータに対するクエリおよび書き込みパフォーマンスの両方を最適化していきます。 + +このデータセットは 189 個の Parquet ファイルで構成されており、2008 年 7 月から 2024 年 3 月までの各月につき 1 ファイルずつ存在します。 + +[上記の推奨事項](#formats) に従い、パフォーマンス向上のために Parquet を使用し、すべてのクエリをバケットと同じリージョンに配置された ClickHouse クラスター上で実行しています。このクラスターは 3 ノードで構成され、各ノードは 32GiB の RAM と 8 vCPU を備えています。 + +チューニングなしの状態で、このデータセットを MergeTree テーブルエンジンに挿入する際のパフォーマンスと、最も多く質問を投稿しているユーザーを算出するクエリを実行する際のパフォーマンスを示します。これら 2 つのクエリはいずれも、意図的にデータのフルスキャンを必要とします。 ```sql --- Top usernames +-- トップユーザー名 SELECT OwnerDisplayName, count() AS num_posts @@ -173,34 +186,35 @@ LIMIT 5 │ user3559349 │ 3068 │ └──────────────────┴───────────┘ -5 rows in set. Elapsed: 3.013 sec. Processed 59.82 million rows, 24.03 GB (19.86 million rows/s., 7.98 GB/s.) -Peak memory usage: 603.64 MiB. +5 行が返されました。経過時間: 3.013 秒。処理: 59.82 百万行、24.03 GB (19.86 百万行/秒、7.98 GB/秒)。 +ピーク時メモリ使用量: 603.64 MiB。 --- Load into posts table +-- posts テーブルにロード INSERT INTO posts SELECT * FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/parquet/posts/by_month/*.parquet') -0 rows in set. Elapsed: 191.692 sec. Processed 59.82 million rows, 24.03 GB (312.06 thousand rows/s., 125.37 MB/s.) +0 行が返されました。経過時間: 191.692 秒。処理: 59.82 百万行、24.03 GB (312.06 千行/秒、125.37 MB/秒)。 ``` -In our example we only return a few rows. If measuring the performance of `SELECT` queries, where large volumes of data are returned to the client, either utilize the [null format](/interfaces/formats/Null) for queries or direct results to the [`Null` engine](/engines/table-engines/special/null.md). This should avoid the client being overwhelmed with data and network saturation. +この例では、数行のみを返しています。大量のデータをクライアントに返す `SELECT` クエリのパフォーマンスを測定する場合は、クエリで [null format](/interfaces/formats/Null) を利用するか、結果を [`Null` engine](/engines/table-engines/special/null.md) に送るようにしてください。これにより、クライアントが過剰なデータ量で圧迫されたり、ネットワークが飽和したりすることを防げます。 :::info -When reading from queries, the initial query can often appear slower than if the same query is repeated. This can be attributed to both S3's own caching but also the [ClickHouse Schema Inference Cache](/operations/system-tables/schema_inference_cache). This stores the inferred schema for files and means the inference step can be skipped on subsequent accesses, thus reducing query time. +クエリを実行して読み取りを行う際、同じクエリを繰り返し実行した場合と比べて、最初のクエリが遅く見えることがよくあります。これは、S3 側のキャッシュと [ClickHouse Schema Inference Cache](/operations/system-tables/schema_inference_cache) の両方によるものです。後者はファイルに対して推論されたスキーマを保存するため、後続のアクセスではスキーマ推論ステップを省略でき、その結果クエリ時間を短縮できます。 ::: -## Using threads for reads {#using-threads-for-reads} -Read performance on S3 will scale linearly with the number of cores, provided you are not limited by network bandwidth or local I/O. Increasing the number of threads also has memory overhead permutations that users should be aware of. The following can be modified to improve read throughput performance potentially: +## 読み取りにスレッドを使用する + +S3 上での読み取りパフォーマンスは、ネットワーク帯域幅やローカル I/O によって制限されない限り、コア数に比例してスケールします。スレッド数を増やすと追加のメモリオーバーヘッドも発生するため、ユーザーはこれを理解しておく必要があります。読み取りスループットを向上させるために、次の項目を調整できます。 -* Usually, the default value of `max_threads` is sufficient, i.e., the number of cores. If the amount of memory used for a query is high, and this needs to be reduced, or the `LIMIT` on results is low, this value can be set lower. Users with plenty of memory may wish to experiment with increasing this value for possible higher read throughput from S3. Typically this is only beneficial on machines with lower core counts, i.e., < 10. The benefit from further parallelization typically diminishes as other resources act as a bottleneck, e.g., network and CPU contention. -* Versions of ClickHouse before 22.3.1 only parallelized reads across multiple files when using the `s3` function or `S3` table engine. This required the user to ensure files were split into chunks on S3 and read using a glob pattern to achieve optimal read performance. Later versions now parallelize downloads within a file. -* In low thread count scenarios, users may benefit from setting `remote_filesystem_read_method` to "read" to cause the synchronous reading of files from S3. -* For the s3 function and table, parallel downloading of an individual file is determined by the values [`max_download_threads`](/operations/settings/settings#max_download_threads) and [`max_download_buffer_size`](/operations/settings/settings#max_download_buffer_size). While [`max_download_threads`](/operations/settings/settings#max_download_threads) controls the number of threads used, files will only be downloaded in parallel if their size is greater than 2 * `max_download_buffer_size`. By default, the `max_download_buffer_size` default is set to 10MiB. In some cases, you can safely increase this buffer size to 50 MB (`max_download_buffer_size=52428800`), with the aim of ensuring smaller files are only downloaded by a single thread. This can reduce the time each thread spends making S3 calls and thus also lower the S3 wait time. See [this blog post](https://clickhouse.com/blog/clickhouse-1-trillion-row-challenge) for an example of this. +* 通常、`max_threads` のデフォルト値、すなわちコア数で十分です。クエリで使用されるメモリ量が多く、これを削減する必要がある場合、あるいは結果に対する `LIMIT` が小さい場合には、この値をより小さく設定できます。メモリに十分な余裕がある環境では、S3 からの読み取りスループット向上の可能性を確認するために、この値を増やしてみることもできます。一般的に、これはコア数が少ないマシン、すなわち 10 未満の場合にのみ有益です。さらなる並列化によるメリットは、ネットワークや CPU の競合など、他のリソースがボトルネックとして働くにつれて通常は減少します。 +* ClickHouse 22.3.1 より前のバージョンでは、`s3` 関数または `S3` テーブルエンジンを使用した場合にのみ、複数ファイルにまたがる読み取りが並列化されていました。このため、ユーザーは最適な読み取り性能を達成するために、S3 上のファイルをチャンクに分割し、glob パターンを使って読み取る必要がありました。後続のバージョンでは、ファイル内でのダウンロードも並列化されるようになっています。 +* スレッド数が少ないシナリオでは、`remote_filesystem_read_method` を "read" に設定して、S3 からのファイル読み取りを同期的に実行することでメリットを得られる場合があります。 +* `s3` 関数およびテーブルにおいて、個々のファイルの並列ダウンロードは、[`max_download_threads`](/operations/settings/settings#max_download_threads) と [`max_download_buffer_size`](/operations/settings/settings#max_download_buffer_size) の値によって決定されます。[`max_download_threads`](/operations/settings/settings#max_download_threads) は使用されるスレッド数を制御しますが、ファイルが並列にダウンロードされるのは、そのサイズが 2 * `max_download_buffer_size` より大きい場合のみです。デフォルトでは、`max_download_buffer_size` は 10MiB に設定されています。場合によっては、このバッファサイズを安全に 50 MB (`max_download_buffer_size=52428800`) まで増やし、小さなファイルが単一スレッドによってのみダウンロードされるようにすることができます。これにより、各スレッドが S3 呼び出しに費やす時間を減らし、S3 の待機時間も短縮できます。具体例については [このブログ記事](https://clickhouse.com/blog/clickhouse-1-trillion-row-challenge) を参照してください。 -Before making any changes to improve performance, ensure you measure appropriately. As S3 API calls are sensitive to latency and may impact client timings, use the query log for performance metrics, i.e., `system.query_log`. +パフォーマンス改善のために変更を加える前に、適切に計測していることを確認してください。S3 API コールはレイテンシに敏感であり、クライアント側のタイミングに影響を与える可能性があるため、パフォーマンスメトリクスには `system.query_log` などのクエリログを使用してください。 -Consider our earlier query, doubling the `max_threads` to `16` (default `max_thread` is the number of cores on a node) improves our read query performance by 2x at the expense of higher memory. Further increasing `max_threads` has diminishing returns as shown. +先ほどのクエリを例に取ると、`max_threads` を `16` に倍増させることで(デフォルトの `max_thread` はノード上のコア数)、メモリ消費が増える代わりに読み取りクエリ性能を 2 倍に向上させることができます。`max_threads` をそれ以上増やしても、以下に示すように効果は逓減します。 ```sql SELECT @@ -235,33 +249,34 @@ SETTINGS max_threads = 64 Peak memory usage: 639.99 MiB. ``` -## Tuning threads and block size for inserts {#tuning-threads-and-block-size-for-inserts} -To achieve maximum ingestion performance, you must choose (1) an insert block size and (2) an appropriate level of insert parallelism based on (3) the amount of available CPU cores and RAM available. In summary: +## INSERT におけるスレッド数とブロックサイズのチューニング -- The larger we [configure the insert block size](#insert-block-size), the fewer parts ClickHouse has to create, and the fewer [disk file I/O](https://en.wikipedia.org/wiki/Category:Disk_file_systems) and [background merges](https://clickhouse.com/blog/supercharge-your-clickhouse-data-loads-part1#more-parts--more-background-part-merges) are required. -- The higher we configure the [number of parallel insert threads](#insert-parallelism), the faster the data will be processed. +インジェスト性能を最大化するには、(1) INSERT のブロックサイズ、(2) INSERT の並列度を、(3) 利用可能な CPU コア数と RAM 量に基づいて選択・設定する必要があります。まとめると次のとおりです。 -There is a conflicting tradeoff between these two performance factors (plus a tradeoff with the background part merging). The amount of available main memory of ClickHouse servers is limited. Larger blocks use more main memory, which limits the number of parallel insert threads we can utilize. Conversely, a higher number of parallel insert threads requires more main memory, as the number of insert threads determines the number of insert blocks created in memory concurrently. This limits the possible size of insert blocks. Additionally, there can be resource contention between insert threads and background merge threads. A high number of configured insert threads (1) creates more parts that need to be merged and (2) takes away CPU cores and memory space from background merge threads. +* [INSERT のブロックサイズ](#insert-block-size) を大きく設定すればするほど、ClickHouse が作成しなければならないパーツの数が減り、必要となる [ディスクファイル I/O](https://en.wikipedia.org/wiki/Category:Disk_file_systems) と[バックグラウンドマージ](https://clickhouse.com/blog/supercharge-your-clickhouse-data-loads-part1#more-parts--more-background-part-merges) の回数も減少します。 +* [並列 INSERT スレッド数](#insert-parallelism) を多く設定すればするほど、データはより高速に処理されます。 -For a detailed description of how the behavior of these parameters impacts performance and resources, we recommend [reading this blog post](https://clickhouse.com/blog/supercharge-your-clickhouse-data-loads-part2). As described in this blog post, tuning can involve a careful balance of the two parameters. This exhaustive testing is often impractical, so in summary, we recommend: +これら 2 つの性能要因の間には、互いに相反するトレードオフ(さらにバックグラウンドでのパーツマージとのトレードオフ)があります。ClickHouse サーバーで利用可能なメインメモリ量には上限があります。ブロックを大きくするとメインメモリの使用量が増えるため、利用可能な並列 INSERT スレッド数が制限されます。逆に、並列 INSERT スレッド数を増やすと、メモリ内で同時に生成される INSERT ブロック数が増えるため、より多くのメインメモリを必要とします。その結果、設定できる INSERT ブロックサイズが制限されます。さらに、INSERT スレッドとバックグラウンドマージスレッドの間でリソース競合が発生する可能性があります。多くの INSERT スレッドを設定すると、(1) マージ対象となるパーツがより多く作成され、(2) バックグラウンドマージスレッドが利用できる CPU コアとメモリ領域が奪われます。 + +これらのパラメータの動作がパフォーマンスとリソースにどのような影響を与えるかについての詳細な説明は、[このブログ記事](https://clickhouse.com/blog/supercharge-your-clickhouse-data-loads-part2) を参照してください。このブログ記事で説明されているように、チューニングには 2 つのパラメータ間の慎重なバランス調整が関わります。このような網羅的なテストを行うのは実務上困難な場合が多いため、要約として次の推奨事項があります。 ```bash -• max_insert_threads: choose ~ half of the available CPU cores for insert threads (to leave enough dedicated cores for background merges) +• max_insert_threads: 挿入スレッド用に利用可能なCPUコアの約半分を選択します(バックグラウンドマージ用に十分な専用コアを確保するため) -• peak_memory_usage_in_bytes: choose an intended peak memory usage; either all available RAM (if it is an isolated ingest) or half or less (to leave room for other concurrent tasks) +• peak_memory_usage_in_bytes: 想定されるピークメモリ使用量を選択します。独立した取り込み処理の場合は利用可能なRAMをすべて使用するか、他の同時実行タスク用の余地を残すために半分以下にします -Then: +次に: min_insert_block_size_bytes = peak_memory_usage_in_bytes / (~3 * max_insert_threads) ``` -With this formula, you can set `min_insert_block_size_rows` to 0 (to disable the row based threshold) while setting `max_insert_threads` to the chosen value and `min_insert_block_size_bytes` to the calculated result from the above formula. +この式を使うと、`min_insert_block_size_rows` を 0(行ベースのしきい値を無効にする)に設定しつつ、`max_insert_threads` を任意の値に設定し、`min_insert_block_size_bytes` を上記の式から計算された結果に設定できます。 -Using this formula with our earlier Stack Overflow example. +先ほどの Stack Overflow の例にこの式を適用します。 -- `max_insert_threads=4` (8 cores per node) -- `peak_memory_usage_in_bytes` - 32 GiB (100% of node resources) or `34359738368` bytes. -- `min_insert_block_size_bytes` = `34359738368/(3*4) = 2863311530` +* `max_insert_threads=4`(ノードあたり 8 コア) +* `peak_memory_usage_in_bytes` は 32 GiB(ノードリソースの 100%)、すなわち `34359738368` バイト +* `min_insert_block_size_bytes` = `34359738368/(3*4) = 2863311530` ```sql INSERT INTO posts SELECT * @@ -270,15 +285,16 @@ FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow 0 rows in set. Elapsed: 128.566 sec. Processed 59.82 million rows, 24.03 GB (465.28 thousand rows/s., 186.92 MB/s.) ``` -As shown, tuning of these setting has improved insert performance by over `33%`. We leave this to the reader to see if they can improve single node performance further. +示したように、これらの設定を調整することで、挿入パフォーマンスは `33%` 以上向上しました。単一ノードでのパフォーマンスをさらに向上できるかどうかは、読者の検証に委ねます。 + -## Scaling with resources and nodes {#scaling-with-resources-and-nodes} +## リソースおよびノードによるスケーリング -Scaling with resources and nodes applies to both read and insert queries. +リソースおよびノードによるスケーリングは、読み取りクエリと挿入クエリの両方に適用されます。 -### Vertical scaling {#vertical-scaling} +### 垂直スケーリング -All previous tuning and queries have only used a single node in our ClickHouse Cloud cluster. Users will also often have more than one node of ClickHouse available. We recommend users scale vertically initially, improving S3 throughput linearly with the number of cores. If we repeat our earlier insert and read queries on a larger ClickHouse Cloud node to twice the resources (64GiB, 16 vCPUs) with appropriate settings, both execute approximately twice as fast. +これまでのすべてのチューニングとクエリは、ClickHouse Cloud クラスター内の単一ノードのみを使用していました。実際には、ユーザーは複数の ClickHouse ノードを利用できることがよくあります。まずは垂直スケーリングを行い、コア数に応じて S3 のスループットを線形に向上させることを推奨します。以前の挿入クエリと読み取りクエリを、リソースを 2 倍(64GiB、16 vCPU)にした、より大きな ClickHouse Cloud ノード上で適切な設定とともに再実行すると、どちらもおおよそ 2 倍の速度で実行されます。 ```sql INSERT INTO posts SELECT * @@ -300,22 +316,22 @@ SETTINGS max_threads = 92 ``` :::note -Individual nodes can also be bottlenecked by network and S3 GET requests, preventing linear scaling of performance vertically. +個々のノードはネットワークや S3 の GET リクエストによってボトルネックとなる場合もあり、その結果、垂直方向の性能を線形にはスケールできなくなります。 ::: -### Horizontal scaling {#horizontal-scaling} +### 水平スケーリング -Eventually, horizontal scaling is often necessary due to hardware availability and cost-efficiency. In ClickHouse Cloud, production clusters have at least 3 nodes. Users may also wish to therefore utilize all nodes for an insert. +最終的には、ハードウェアの入手性やコスト効率の観点から、水平スケーリングが必要になることがよくあります。ClickHouse Cloud では、本番クラスターは少なくとも 3 ノードで構成されています。そのため、ユーザーは挿入処理にすべてのノードを利用したい場合もあるでしょう。 -Utilizing a cluster for S3 reads requires using the `s3Cluster` function as described in [Utilizing Clusters](/integrations/s3#utilizing-clusters). This allows reads to be distributed across nodes. +S3 からの読み取りにクラスターを利用するには、[Utilizing Clusters](/integrations/s3#utilizing-clusters) で説明されているように `s3Cluster` 関数を使用する必要があります。これにより、読み取りをノード間で分散できます。 -The server that initially receives the insert query first resolves the glob pattern and then dispatches the processing of each matching file dynamically to itself and the other servers. +挿入クエリを最初に受信したサーバーは、まずグロブパターンを解決してから、一致した各ファイルの処理を自分自身および他のサーバーに動的にディスパッチします。 -s3Cluster function in ClickHouse +ClickHouse における s3Cluster 関数 -We repeat our earlier read query distributing the workload across 3 nodes, adjusting the query to use `s3Cluster`. This is performed automatically in ClickHouse Cloud, by referring to the `default` cluster. +以前の読み取りクエリを再度実行し、`s3Cluster` を使用するようにクエリを調整して、ワークロードを 3 ノードに分散します。ClickHouse Cloud では、`default` クラスターを参照することで、これは自動的に実行されます。 -As noted in [Utilizing Clusters](/integrations/s3#utilizing-clusters) this work is distributed a file level. To benefit from this feature users will require a sufficient number of files i.e. at least > the number of nodes. +[Utilizing Clusters](/integrations/s3#utilizing-clusters) で述べたように、この処理はファイル単位で分散されます。この機能の恩恵を受けるには、ユーザーは十分な数のファイル、つまり少なくともノード数を上回るファイル数を用意する必要があります。 ```sql SELECT @@ -340,7 +356,7 @@ SETTINGS max_threads = 16 Peak memory usage: 176.74 MiB. ``` -Likewise, our insert query can be distributed, using the improved settings identified earlier for a single node: +同様に、単一ノード向けに前述で特定した改善済みの設定を使用して、挿入クエリも分散実行できます。 ```sql INSERT INTO posts SELECT * @@ -349,9 +365,10 @@ FROM s3Cluster('default', 'https://datasets-documentation.s3.eu-west-3.amazonaws 0 rows in set. Elapsed: 171.202 sec. Processed 59.82 million rows, 24.03 GB (349.41 thousand rows/s., 140.37 MB/s.) ``` -Readers will notice the reading of files has improved query but not insert performance. By default, although reads are distributed using `s3Cluster`, inserts will occur against the initiator node. This means that while reads will occur on each node, the resulting rows will be routed to the initiator for distribution. In high throughput scenarios, this may prove a bottleneck. To address this, set the parameter `parallel_distributed_insert_select` for the `s3cluster` function. -Setting this to `parallel_distributed_insert_select=2`, ensures the `SELECT` and `INSERT` will be executed on each shard from/to the underlying table of the distributed engine on each node. +ファイルの読み込みではクエリ性能は向上しますが、挿入性能は改善されていないことに気付くでしょう。デフォルトでは、読み取りは `s3Cluster` を使って分散されますが、挿入はイニシエーターノードに対して行われます。これは、読み取り自体は各ノードで行われる一方で、得られた行は分散処理のためにイニシエーターノードへルーティングされることを意味します。高スループットなシナリオでは、これがボトルネックとなる可能性があります。これに対処するには、`s3cluster` 関数に対してパラメータ `parallel_distributed_insert_select` を設定します。 + +これを `parallel_distributed_insert_select=2` に設定すると、各ノード上の分散エンジンの下位テーブルに対して、各シャードで `SELECT` および `INSERT` が実行されるようになります。 ```sql INSERT INTO posts @@ -363,15 +380,16 @@ SETTINGS parallel_distributed_insert_select = 2, min_insert_block_size_rows=0, m Peak memory usage: 11.75 GiB. ``` -As expected, this reduces insert performance by 3x. +予想どおり、これにより挿入パフォーマンスは 3 分の 1 に低下します。 -## Further tuning {#further-tuning} -### Disable de-duplication {#disable-de-duplication} +## さらなるチューニング -Insert operations can sometimes fail due to errors such as timeouts. When inserts fail, data may or may not have been successfully inserted. To allow inserts to be safely re-tried by the client, by default in distributed deployments such as ClickHouse Cloud, ClickHouse tries to determine whether the data has already been successfully inserted. If the inserted data is marked as a duplicate, ClickHouse does not insert it into the destination table. However, the user will still receive a successful operation status as if the data had been inserted normally. +### 重複排除の無効化 -While this behavior, which incurs an insert overhead, makes sense when loading data from a client or in batches it can be unnecessary when performing an `INSERT INTO SELECT` from object storage. By disabling this functionality at insert time, we can improve performance as shown below: +挿入操作は、タイムアウトなどのエラーにより失敗することがあります。挿入が失敗した場合、データが実際に挿入されたかどうかは分からないことがあります。クライアント側で安全に挿入を再試行できるようにするため、ClickHouse Cloud のような分散デプロイメントでは、デフォルトで ClickHouse がそのデータがすでに正常に挿入されているかどうかを確認しようとします。挿入されたデータが重複とマークされた場合、ClickHouse はそれを宛先テーブルに挿入しません。ただし、ユーザー側には、あたかもデータが通常どおり挿入されたかのように、操作成功ステータスが返されます。 + +この挙動は、クライアントからのデータロードやバッチ処理では挿入時のオーバーヘッドがかかるものの妥当ですが、オブジェクトストレージ上のデータに対して `INSERT INTO SELECT` を実行する場合には不要な場合があります。挿入時にこの機能を無効にすることで、以下に示すようにパフォーマンスを向上できます。 ```sql INSERT INTO posts @@ -384,11 +402,11 @@ SETTINGS parallel_distributed_insert_select = 2, min_insert_block_size_rows = 0, Peak memory usage: 26.57 GiB. ``` -### Optimize on insert {#optimize-on-insert} +### 挿入時の最適化 -In ClickHouse, the `optimize_on_insert` setting controls whether data parts are merged during the insert process. When enabled (`optimize_on_insert = 1` by default), small parts are merged into larger ones as they are inserted, improving query performance by reducing the number of parts that need to be read. However, this merging adds overhead to the insert process, potentially slowing down high-throughput insertions. +ClickHouse では、`optimize_on_insert` 設定は挿入処理中にデータパーツをマージするかどうかを制御します。有効な場合(デフォルトで `optimize_on_insert = 1`)、小さなパーツは挿入時により大きなパーツにマージされ、読み取る必要があるパーツ数を減らすことでクエリ性能を向上させます。ただし、このマージ処理は挿入処理にオーバーヘッドを追加するため、高スループットの挿入を遅くする可能性があります。 -Disabling this setting (`optimize_on_insert = 0`) skips merging during inserts, allowing data to be written more quickly, especially when handling frequent small inserts. The merging process is deferred to the background, allowing for better insert performance but temporarily increasing the number of small parts, which may slow down queries until the background merge completes. This setting is ideal when insert performance is a priority, and the background merge process can handle optimization efficiently later. As shown below, disabling setting can improve insert throughput: +この設定を無効化すると(`optimize_on_insert = 0`)、挿入時のマージがスキップされ、特に小さな挿入が頻繁に発生する場合にデータを書き込みやすくなります。マージ処理はバックグラウンドに延期されるため、挿入性能は向上しますが、その完了までの間は小さなパーツ数が一時的に増加し、バックグラウンドマージが完了するまでクエリが遅くなる可能性があります。この設定は、挿入性能を優先し、後でバックグラウンドマージ処理によって効率的に最適化できる場合に最適です。以下に示すように、この設定を無効化することで挿入スループットを向上できます。 ```sql SELECT * @@ -398,6 +416,7 @@ SETTINGS parallel_distributed_insert_select = 2, min_insert_block_size_rows = 0, 0 rows in set. Elapsed: 49.688 sec. Processed 59.82 million rows, 24.03 GB (1.20 million rows/s., 483.66 MB/s.) ``` -## Misc notes {#misc-notes} -* For low memory scenarios, consider lowering `max_insert_delayed_streams_for_parallel_write` if inserting into S3. +## その他の注意事項 {#misc-notes} + +* メモリが限られた環境では、S3 へのデータ挿入時に `max_insert_delayed_streams_for_parallel_write` の値を下げることを検討してください。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/interfaces/cli.md b/i18n/jp/docusaurus-plugin-content-docs/current/interfaces/cli.md index f0f18f0d72f..e99fef975b9 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/interfaces/cli.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/interfaces/cli.md @@ -859,20 +859,21 @@ ClickHouse リポジトリにあるサンプル設定ファイルを参照して | Option | Description | Default | |----------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------| -| `--connection ` | 設定ファイルであらかじめ定義された接続設定の名前。[接続認証情報](#connection-credentials) を参照してください。 | - | -| `-d [ --database ] ` | この接続でデフォルトとして使用するデータベースを選択します。 | サーバー設定での現在のデータベース(デフォルトでは `default`) | -| `-h [ --host ] ` | 接続先の ClickHouse サーバーのホスト名。ホスト名、IPv4 アドレス、IPv6 アドレスのいずれかを指定できます。複数のホストは、複数回の引数指定で渡すことができます。 | `localhost` | -| `--jwt ` | 認証に JSON Web Token (JWT) を使用します。

JWT によるサーバー側認可は ClickHouse Cloud でのみ利用可能です。 | - | -| `--no-warnings` | クライアントがサーバーに接続するときに、`system.warnings` からの警告を表示しないようにします。 | - | -| `--password ` | データベースユーザーのパスワード。接続用のパスワードは設定ファイル内で指定することもできます。パスワードを指定しない場合、クライアントが入力を求めます。 | - | -| `--port ` | サーバーが接続を受け付けるポート。デフォルトのポートは 9440(TLS)と 9000(TLS なし)です。

注意:クライアントは HTTP(S) ではなくネイティブプロトコルを使用します。 | `--secure` が指定されている場合は `9440`、それ以外は `9000`。ホスト名が `.clickhouse.cloud` で終わる場合は、常に `9440` がデフォルト。 | -| `-s [ --secure ]` | TLS を使用するかどうか。

ポート 9440(デフォルトのセキュアポート)または ClickHouse Cloud へ接続する場合は、自動的に有効になります。

[設定ファイル](#configuration_files) で CA 証明書を設定する必要がある場合があります。利用可能な設定項目は、[サーバー側 TLS 設定](../operations/server-configuration-parameters/settings.md#openssl) と同じです。 | ポート 9440 または ClickHouse Cloud に接続する場合に自動的に有効 | -| `--ssh-key-file ` | サーバーへの認証に使用する SSH 秘密鍵を含むファイル。 | - | +| `--connection ` | 設定ファイルで事前設定されている接続設定の名前。[Connection credentials](#connection-credentials) を参照してください。 | - | +| `-d [ --database ] ` | この接続でデフォルトとして使用するデータベースを選択します。 | サーバー設定で現在有効なデータベース(デフォルトでは `default`) | +| `-h [ --host ] ` | 接続先の ClickHouse サーバーのホスト名。ホスト名、IPv4 アドレス、または IPv6 アドレスを指定できます。複数のホストを指定する場合は、このオプションを複数回指定します。 | `localhost` | +| `--jwt ` | 認証に JSON Web Token (JWT) を使用します。

JWT によるサーバー側の認可は ClickHouse Cloud でのみ利用可能です。 | - | +| `--no-warnings` | クライアントがサーバーに接続するときに `system.warnings` からの警告を表示しないようにします。 | - | +| `--no-server-client-version-message` | クライアントがサーバーに接続するときに、サーバーとクライアントのバージョン不一致メッセージを表示しないようにします。 | - | +| `--password ` | データベースユーザーのパスワード。接続用パスワードは設定ファイルでも指定できます。パスワードを指定しない場合、クライアントが入力を求めます。 | - | +| `--port ` | サーバーが接続を受け付けるポート番号。デフォルトのポートは 9440 (TLS) と 9000 (非 TLS) です。

注: クライアントは HTTP(S) ではなくネイティブプロトコルを使用します。 | `--secure` が指定されている場合は `9440`、それ以外の場合は `9000`。ホスト名が `.clickhouse.cloud` で終わる場合は常に `9440` がデフォルトになります。 | +| `-s [ --secure ]` | TLS を使用するかどうか。

ポート 9440(デフォルトのセキュアポート)または ClickHouse Cloud に接続する場合は自動的に有効になります。

[設定ファイル](#configuration_files) で CA 証明書を設定する必要がある場合があります。利用可能な設定項目は [サーバー側の TLS 設定](../operations/server-configuration-parameters/settings.md#openssl) と同じです。 | ポート 9440 または ClickHouse Cloud に接続する場合に自動的に有効化 | +| `--ssh-key-file ` | サーバーに対して認証を行うための SSH 秘密鍵を格納したファイル。 | - | | `--ssh-key-passphrase ` | `--ssh-key-file` で指定した SSH 秘密鍵のパスフレーズ。 | - | -| `-u [ --user ] ` | 接続時に使用するデータベースユーザー。 | `default` | +| `-u [ --user ] ` | 接続時に使用するデータベースユーザー。 | `default` | :::note -`--host`、`--port`、`--user`、`--password` オプションの代わりに、クライアントは [接続文字列](#connection_string) もサポートしています。 +`--host`、`--port`、`--user`、`--password` オプションの代わりに、クライアントは [connection strings](#connection_string)(接続文字列)もサポートしています。 ::: ### クエリオプション {#command-line-options-query} diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/interfaces/formats/Prometheus.md b/i18n/jp/docusaurus-plugin-content-docs/current/interfaces/formats/Prometheus.md index 6ce5a749eac..55f1db62127 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/interfaces/formats/Prometheus.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/interfaces/formats/Prometheus.md @@ -70,6 +70,8 @@ http_request_duration_seconds_bucket{le="1"} 133988 http_request_duration_seconds_bucket{le="+Inf"} 144320 http_request_duration_seconds_sum 53423 http_request_duration_seconds_count 144320 +``` + # HELP http_requests_total HTTPリクエストの総数 # TYPE http_requests_total counter @@ -78,17 +80,23 @@ http_requests_total{code="400",method="post"} 3 1395066363000 metric_without_timestamp_and_labels 12.47 -# HELP rpc_duration_seconds RPC の処理時間(秒)のサマリー。 -# TYPE rpc_duration_seconds summary -rpc_duration_seconds{quantile="0.01"} 3102 -rpc_duration_seconds{quantile="0.05"} 3272 -rpc_duration_seconds{quantile="0.5"} 4773 -rpc_duration_seconds{quantile="0.9"} 9001 -rpc_duration_seconds{quantile="0.99"} 76656 -rpc_duration_seconds_sum 17560473 -rpc_duration_seconds_count 2693 - -something_weird{problem="ゼロによる除算"} +Inf -3982045 + + +# HELP rpc_duration_seconds RPC の処理時間(秒)のサマリー。 + +# TYPE rpc_duration_seconds summary + +rpc_duration_seconds{quantile="0.01"} 3102 +rpc_duration_seconds{quantile="0.05"} 3272 +rpc_duration_seconds{quantile="0.5"} 4773 +rpc_duration_seconds{quantile="0.9"} 9001 +rpc_duration_seconds{quantile="0.99"} 76656 +rpc_duration_seconds_sum 17560473 +rpc_duration_seconds_count 2693 + +something_weird{problem="ゼロによる除算"} +Inf -3982045 + +``` ``` diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/managing-data/core-concepts/primary-indexes.mdx b/i18n/jp/docusaurus-plugin-content-docs/current/managing-data/core-concepts/primary-indexes.mdx index 6f9c8d9fab9..3170c67395b 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/managing-data/core-concepts/primary-indexes.mdx +++ b/i18n/jp/docusaurus-plugin-content-docs/current/managing-data/core-concepts/primary-indexes.mdx @@ -19,17 +19,17 @@ import Image from '@theme/IdealImage'; ::: -## ClickHouse におけるスパース主キーインデックスはどのように機能しますか? \{#how-does-the-sparse-primary-index-work-in-clickHouse\} +## ClickHouse におけるスパースなプライマリインデックスの仕組み \{#how-does-the-sparse-primary-index-work-in-clickHouse\}
-ClickHouse のスパース主キーインデックスは、テーブルの ^^primary key^^ 列に対するクエリ条件と一致する可能性のあるデータを含む[グラニュール](https://clickhouse.com/docs/guides/best-practices/sparse-primary-indexes#data-is-organized-into-granules-for-parallel-data-processing)(行のブロック)を効率的に特定するために利用されます。次のセクションでは、このインデックスがそれらの列の値からどのように構築されるかを説明します。 +ClickHouse のスパースなプライマリインデックスは、テーブルの ^^primary key^^ 列に対するクエリ条件に一致するデータを含んでいる可能性がある[グラニュール](/guides/best-practices/sparse-primary-indexes#data-is-organized-into-granules-for-parallel-data-processing)(行ブロック)を効率的に特定するのに役立ちます。次のセクションでは、このインデックスがこれらの列の値からどのように構成されるかを説明します。 ### 疎なプライマリインデックスの作成 \{#sparse-primary-index-creation\} -疎なプライマリインデックスがどのように構築されるかを説明するために、[uk_price_paid_simple](https://clickhouse.com/docs/parts) テーブルといくつかのアニメーションを使用します。 +疎なプライマリインデックスがどのように構築されるかを説明するために、[uk_price_paid_simple](/parts) テーブルといくつかのアニメーションを使用します。 -[おさらい](https://clickhouse.com/docs/parts)として、① ^^primary key^^ が (town, street) の例のテーブルでは、② 挿入されたデータは ③ ディスク上に保存され、^^primary key^^ 列の値でソートされ、各列ごとの個別ファイルに圧縮されます。 +[おさらいとして](/parts)、① ^^primary key^^ (town, street) を持つ例のテーブルでは、② 挿入されたデータは ③ ディスク上に格納され、^^primary key^^ の列値でソートされ、圧縮され、各列ごとに別々のファイルとして保存されます。 @@ -37,9 +37,9 @@ ClickHouse のスパース主キーインデックスは、テーブルの ^^pri
-処理のために、各列のデータは ④ 論理的に granule に分割されます。各 granule は 8,192 行をカバーし、ClickHouse のデータ処理の仕組みが扱う最小単位です。 +処理のために、各列のデータは ④ 論理的にグラニュールに分割されます。各グラニュールは 8,192 行を含み、ClickHouse のデータ処理メカニズムが扱う最小単位です。 -この ^^granule^^ 構造こそが、プライマリインデックスを**疎**にしている理由です。すべての行をインデックスする代わりに、ClickHouse は ⑤ 各 ^^granule^^ につき 1 行だけ、具体的には先頭行の ^^primary key^^ の値を保存します。これにより、^^granule^^ ごとに 1 つのインデックスエントリが作成されます。 +この ^^granule^^ 構造こそが、プライマリインデックスが **疎** である理由です。すべての行をインデックスする代わりに、ClickHouse は ⑤ 各 ^^granule^^ について 1 行分、具体的には最初の行の ^^primary key^^ の値だけを保存します。これにより、^^granule^^ ごとに 1 つのインデックスエントリが作成されます。 @@ -47,7 +47,7 @@ ClickHouse のスパース主キーインデックスは、テーブルの ^^pri
-疎であることから、プライマリインデックスはメモリ内に完全に収まるほど小さくなり、^^primary key^^ 列に述語を持つクエリのフィルタリングを高速に行えます。次のセクションでは、これがそのようなクエリの高速化にどのように役立つかを示します。 +このように疎であるおかげで、プライマリインデックスはメモリに完全に収まるほど小さくなり、^^primary key^^ 列に対して述語を持つクエリを高速にフィルタリングできます。次のセクションでは、このインデックスがそのようなクエリの高速化にどのように貢献するかを示します。 ### プライマリインデックスの利用方法 \{#primary-index-usage\} diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/query-cache.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/query-cache.md index 4ba837f5118..556b67566a7 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/query-cache.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/query-cache.md @@ -1,5 +1,5 @@ --- -description: 'ClickHouse におけるクエリキャッシュ機能の使用方法と設定に関するガイド' +description: 'ClickHouse のクエリキャッシュ機能の利用と設定に関するガイド' sidebar_label: 'クエリキャッシュ' sidebar_position: 65 slug: /operations/query-cache @@ -7,36 +7,34 @@ title: 'クエリキャッシュ' doc_type: 'guide' --- - - # クエリキャッシュ -クエリキャッシュを使用すると、`SELECT` クエリを一度だけ計算し、その後の同一クエリの結果をキャッシュから直接返すことができます。 -クエリの種類によっては、これにより ClickHouse サーバーのレイテンシとリソース消費を大幅に削減できます。 - - - -## 背景、設計、および制限事項 {#background-design-and-limitations} +クエリキャッシュを使用すると、`SELECT` クエリを一度だけ実行して結果を保存し、同じクエリの後続の実行にはキャッシュから直接結果を返すことができます。 +クエリの種類によっては、これにより ClickHouse サーバーのレイテンシとリソース消費を劇的に削減できます。 -クエリキャッシュは一般的に、トランザクション整合性があるものとないものに分類できます。 +## 背景、設計、および制限事項 \{#background-design-and-limitations\} -- トランザクション整合性があるキャッシュでは、`SELECT`クエリの結果が変更された場合、または変更される可能性がある場合に、データベースはキャッシュされたクエリ結果を無効化(破棄)します。ClickHouseでは、データを変更する操作には、テーブルへの挿入/更新/削除、または圧縮マージが含まれます。トランザクション整合性があるキャッシュは、特にOLTPデータベースに適しています。例えば、[MySQL](https://dev.mysql.com/doc/refman/5.6/en/query-cache.html)(v8.0以降でクエリキャッシュを削除)や[Oracle](https://docs.oracle.com/database/121/TGDBA/tune_result_cache.htm)などです。 -- トランザクション整合性がないキャッシュでは、すべてのキャッシュエントリに有効期限(例:1分)が設定され、その期間中に基礎データがわずかしか変化しないという前提のもと、クエリ結果にわずかな不正確さが許容されます。このアプローチは全体的にOLAPデータベースにより適しています。トランザクション整合性がないキャッシュで十分な例として、複数のユーザーが同時にアクセスするレポートツールの時間別売上レポートを考えてみましょう。売上データは通常、十分にゆっくりと変化するため、データベースはレポートを一度だけ計算すればよく(最初の`SELECT`クエリで表される)、それ以降のクエリはクエリキャッシュから直接提供できます。この例では、妥当な有効期限は30分程度です。 +クエリキャッシュは一般的に、トランザクション一貫性があるものと、ないものに分類できます。 -トランザクション整合性がないキャッシュは、従来、データベースと連携するクライアントツールやプロキシパッケージ(例:[chproxy](https://www.chproxy.org/configuration/caching/))によって提供されてきました。その結果、同じキャッシュロジックと設定が重複することがよくありました。ClickHouseのクエリキャッシュでは、キャッシュロジックがサーバー側に移行します。これにより、保守作業が軽減され、冗長性が回避されます。 +- トランザクション一貫性のあるキャッシュでは、`SELECT` クエリの結果が変化した場合、または変化する可能性がある場合に、データベースがキャッシュ済みのクエリ結果を無効化(破棄)します。ClickHouse においてデータを変更する操作には、テーブルへの挿入・更新・削除や、テーブルからの削除、あるいは collapsing merge が含まれます。トランザクション一貫性のあるキャッシュは、特に OLTP データベースに適しており、たとえば + [MySQL](https://dev.mysql.com/doc/refman/5.6/en/query-cache.html)(v8.0 でクエリキャッシュは削除)や + [Oracle](https://docs.oracle.com/database/121/TGDBA/tune_result_cache.htm) などがあります。 +- トランザクション一貫性のないキャッシュでは、すべてのキャッシュエントリに有効期間(例: 1 分)を割り当て、その期間経過後に期限切れになること、そしてその期間内には基盤となるデータの変更がごくわずかにとどまることを前提として、クエリ結果がわずかに不正確になることを許容します。この手法は、全体として OLAP データベースにより適しています。トランザクション一貫性のないキャッシュで十分な例としては、複数ユーザーが同時にアクセスするレポーティングツールにおける毎時の売上レポートが挙げられます。売上データの変化は通常十分に遅いため、データベースはレポートを一度だけ計算すればよく(最初の `SELECT` クエリ)、以降のクエリはすべてクエリキャッシュから直接提供できます。この例では、妥当な有効期間は 30 分程度と考えられます。 +トランザクション一貫性のないキャッシュは、従来はデータベースと連携するクライアントツールやプロキシパッケージ(例: +[chproxy](https://www.chproxy.org/configuration/caching/))によって提供されてきました。その結果、同じキャッシュロジックや設定が重複しがちです。ClickHouse のクエリキャッシュでは、キャッシュロジックがサーバー側に移動します。これにより、保守作業が軽減され、冗長性を回避できます。 -## 設定とその使用方法 {#configuration-settings-and-usage} +## 設定と使用方法 :::note -ClickHouse Cloudでは、クエリキャッシュの設定を編集するために[クエリレベル設定](/operations/settings/query-level)を使用する必要があります。[設定ファイルレベルの設定](/operations/configuration-files)の編集は現在サポートされていません。 +ClickHouse Cloud では、クエリキャッシュ設定を編集するには [クエリレベルの設定](/operations/settings/query-level) を使用する必要があります。[コンフィグレベルの設定](/operations/configuration-files) の編集は現在サポートされていません。 ::: :::note -[clickhouse-local](utilities/clickhouse-local.md)は一度に1つのクエリのみを実行します。クエリ結果のキャッシュは意味をなさないため、clickhouse-localではクエリ結果キャッシュが無効になっています。 +[clickhouse-local](utilities/clickhouse-local.md) は一度に 1 つのクエリのみを実行します。クエリ結果キャッシュを利用する意味がないため、clickhouse-local ではクエリ結果キャッシュは無効になっています。 ::: -設定[use_query_cache](/operations/settings/settings#use_query_cache)を使用して、特定のクエリまたは現在のセッションのすべてのクエリがクエリキャッシュを利用するかどうかを制御できます。例えば、次のクエリの最初の実行では +[use_query_cache](/operations/settings/settings#use_query_cache) 設定を使用すると、特定のクエリ、または現在のセッション内のすべてのクエリでクエリキャッシュを利用するかどうかを制御できます。例えば、あるクエリを最初に実行したときは ```sql SELECT some_expensive_calculation(column_1, column_2) @@ -44,13 +42,16 @@ FROM table SETTINGS use_query_cache = true; ``` -クエリ結果がクエリキャッシュに保存されます。同じクエリの後続の実行(同様に`use_query_cache = true`パラメータを指定)では、計算された結果がキャッシュから読み取られ、即座に返されます。 +クエリ結果はクエリキャッシュに保存されます。その後に同じクエリを実行した場合(パラメータ `use_query_cache = true` を指定した場合も同様)、計算済みの結果をキャッシュから読み取り、即座に返します。 :::note -設定`use_query_cache`およびその他すべてのクエリキャッシュ関連の設定は、独立した`SELECT`文に対してのみ効果があります。特に、`CREATE VIEW AS SELECT [...] SETTINGS use_query_cache = true`で作成されたビューへの`SELECT`の結果は、`SELECT`文が`SETTINGS use_query_cache = true`で実行されない限りキャッシュされません。 +`use_query_cache` およびその他すべてのクエリキャッシュ関連設定は、スタンドアロンの `SELECT` 文に対してのみ効果があります。とくに、 +`CREATE VIEW AS SELECT [...] SETTINGS use_query_cache = true` で作成されたビューに対する `SELECT` の結果は、その `SELECT` +文が `SETTINGS use_query_cache = true` を指定して実行されない限りキャッシュされません。 ::: -キャッシュの利用方法は、設定[enable_writes_to_query_cache](/operations/settings/settings#enable_writes_to_query_cache)と[enable_reads_from_query_cache](/operations/settings/settings#enable_reads_from_query_cache)(両方ともデフォルトで`true`)を使用してより詳細に設定できます。前者の設定はクエリ結果がキャッシュに保存されるかどうかを制御し、後者の設定はデータベースがキャッシュからクエリ結果を取得しようとするかどうかを決定します。例えば、次のクエリはキャッシュを受動的にのみ使用します。つまり、キャッシュからの読み取りは試みますが、結果をキャッシュに保存しません: +キャッシュの利用方法は、設定 [enable_writes_to_query_cache](/operations/settings/settings#enable_writes_to_query_cache) +および [enable_reads_from_query_cache](/operations/settings/settings#enable_reads_from_query_cache)(どちらもデフォルトは `true`)を使って、より細かく設定できます。前者の設定はクエリ結果をキャッシュに保存するかどうかを制御し、後者の設定はデータベースがキャッシュからクエリ結果を取得しようとするかどうかを決定します。たとえば、次のクエリはキャッシュを受動的にのみ使用します。つまり、キャッシュからの読み取りは試みますが、自身の結果をキャッシュに保存しません。 ```sql SELECT some_expensive_calculation(column_1, column_2) @@ -58,17 +59,21 @@ FROM table SETTINGS use_query_cache = true, enable_writes_to_query_cache = false; ``` -最大限の制御を行うには、設定`use_query_cache`、`enable_writes_to_query_cache`、`enable_reads_from_query_cache`を特定のクエリに対してのみ指定することが一般的に推奨されます。ユーザーレベルまたはプロファイルレベルでキャッシュを有効にすること(例:`SET use_query_cache = true`経由)も可能ですが、その場合すべての`SELECT`クエリがキャッシュされた結果を返す可能性があることに留意する必要があります。 +最大限の制御を行うため、一般的には `use_query_cache`、`enable_writes_to_query_cache`、`enable_reads_from_query_cache` の設定は特定のクエリに対してのみ指定することを推奨します。ユーザーまたはプロファイル単位(例:`SET +use_query_cache = true`)でキャッシュを有効化することも可能ですが、その場合、すべての `SELECT` クエリがキャッシュされた結果を返すようになることに注意してください。 -クエリキャッシュは`SYSTEM DROP QUERY CACHE`文を使用してクリアできます。クエリキャッシュの内容はシステムテーブル[system.query_cache](system-tables/query_cache.md)に表示されます。データベース起動以降のクエリキャッシュのヒット数とミス数は、システムテーブル[system.events](system-tables/events.md)のイベント「QueryCacheHits」と「QueryCacheMisses」として表示されます。両方のカウンターは、設定`use_query_cache = true`で実行される`SELECT`クエリに対してのみ更新され、その他のクエリは「QueryCacheMisses」に影響しません。システムテーブル[system.query_log](system-tables/query_log.md)のフィールド`query_cache_usage`は、実行された各クエリについて、クエリ結果がクエリキャッシュに書き込まれたか、またはクエリキャッシュから読み取られたかを示します。システムテーブル[system.metrics](system-tables/metrics.md)のメトリクス`QueryCacheEntries`と`QueryCacheBytes`は、クエリキャッシュが現在含んでいるエントリ数とバイト数を示します。 +クエリキャッシュは `SYSTEM DROP QUERY CACHE` ステートメントを使用してクリアできます。クエリキャッシュの内容はシステムテーブル +[system.query_cache](system-tables/query_cache.md) に表示されます。データベース起動以降のクエリキャッシュのヒット数とミス数は、システムテーブル [system.events](system-tables/events.md) 内のイベント +"QueryCacheHits" および "QueryCacheMisses" として表示されます。両方のカウンタは、設定 `use_query_cache = true` で実行される `SELECT` クエリに対してのみ更新され、それ以外のクエリは "QueryCacheMisses" には影響しません。システムテーブル [system.query_log](system-tables/query_log.md) 内のフィールド `query_cache_usage` は、各実行クエリについて、その結果がクエリキャッシュに書き込まれたか、あるいはクエリキャッシュから読み出されたかを示します。システムテーブル +[system.metrics](system-tables/metrics.md) 内のメトリクス `QueryCacheEntries` および `QueryCacheBytes` は、現在クエリキャッシュに含まれるエントリ数およびバイト数を示します。 -クエリキャッシュはClickHouseサーバープロセスごとに1つ存在します。ただし、キャッシュ結果はデフォルトではユーザー間で共有されません。これは変更可能ですが(後述)、セキュリティ上の理由から推奨されません。 +クエリキャッシュは ClickHouse サーバープロセスごとに 1 つ存在します。ただし、キャッシュ結果はデフォルトではユーザー間で共有されません。これは(後述のように)変更可能ですが、セキュリティ上の理由から推奨されません。 -クエリ結果は、クエリの[抽象構文木(AST)](https://en.wikipedia.org/wiki/Abstract_syntax_tree)によってクエリキャッシュ内で参照されます。これは、キャッシュが大文字・小文字を区別しないことを意味します。例えば、`SELECT 1`と`select 1`は同じクエリとして扱われます。マッチングをより自然にするため、クエリキャッシュに関連するすべてのクエリレベル設定と[出力フォーマット](settings/settings-formats.md)の設定はASTから除外されます。 +クエリ結果は、そのクエリの [抽象構文木 (AST)](https://en.wikipedia.org/wiki/Abstract_syntax_tree) によってクエリキャッシュ内で参照されます。これは、キャッシュが大文字・小文字を区別しないことを意味し、たとえば `SELECT 1` と `select 1` は同一のクエリとして扱われます。より自然なマッチングを行うため、クエリキャッシュおよび[出力フォーマット](settings/settings-formats.md)に関連するクエリレベルのすべての設定は AST から削除されます。 -例外またはユーザーによるキャンセルによってクエリが中止された場合、クエリキャッシュにエントリは書き込まれません。 +クエリが例外またはユーザーによるキャンセルによって中断された場合、そのエントリはクエリキャッシュに書き込まれません。 -クエリキャッシュのバイト単位のサイズ、キャッシュエントリの最大数、および個々のキャッシュエントリの最大サイズ(バイト単位およびレコード単位)は、さまざまな[サーバー設定オプション](/operations/server-configuration-parameters/settings#query_cache)を使用して設定できます。 +クエリキャッシュのサイズ(バイト数)、キャッシュエントリの最大数、および個々のキャッシュエントリの最大サイズ(バイト数およびレコード数)は、さまざまな[サーバー構成オプション](/operations/server-configuration-parameters/settings#query_cache)を使用して設定できます。 ```xml @@ -81,19 +86,18 @@ SETTINGS use_query_cache = true, enable_writes_to_query_cache = false; ``` [settings profiles](settings/settings-profiles.md) と [settings -constraints](settings/constraints-on-settings.md) を使用して、個々のユーザーごとにキャッシュ使用量を制限することもできます。具体的には、クエリキャッシュ内でユーザーが割り当て可能なメモリの最大量(バイト単位)や、保存されるクエリ結果の最大数を制限できます。そのためには、まず `users.xml` 内のユーザープロファイルで +constraints](settings/constraints-on-settings.md) を使用して、個々のユーザーのキャッシュ利用量を制限することもできます。具体的には、ユーザーがクエリキャッシュ内で割り当て可能なメモリの最大量(バイト単位)と、保存できるクエリ結果の最大数を制限できます。そのためには、まず `users.xml` 内のユーザープロファイルで [query_cache_max_size_in_bytes](/operations/settings/settings#query_cache_max_size_in_bytes) と -[query_cache_max_entries](/operations/settings/settings#query_cache_max_entries) を設定し、そのうえで両方の設定を -readonly にします。 +[query_cache_max_entries](/operations/settings/settings#query_cache_max_entries) を設定し、その後両方の設定を読み取り専用(readonly)にします。 ```xml - + 10000 - + 100 - + @@ -106,7 +110,7 @@ readonly にします。 ``` -クエリの結果をキャッシュ対象とするために、そのクエリが少なくともどの程度の時間実行されている必要があるかを指定するには、設定 +クエリ結果をキャッシュ対象とするための最小実行時間を定義するには、設定 [query_cache_min_query_duration](/operations/settings/settings#query_cache_min_query_duration) を使用できます。たとえば、次のクエリの結果は ```sql @@ -115,67 +119,74 @@ FROM table SETTINGS use_query_cache = true, query_cache_min_query_duration = 5000; ``` -は、クエリの実行時間が 5 秒を超えた場合にのみキャッシュされます。クエリの結果がキャッシュされるまでに、そのクエリを何回実行する必要があるかを指定することもできます。その場合は、設定 [query_cache_min_query_runs](/operations/settings/settings#query_cache_min_query_runs) を使用します。 +クエリ結果は、クエリの実行時間が 5 秒より長い場合にのみキャッシュされます。クエリの結果がキャッシュされるまでに、そのクエリを何回実行する必要があるかも指定できます。その場合は設定 [query_cache_min_query_runs](/operations/settings/settings#query_cache_min_query_runs) を使用します。 -クエリキャッシュ内のエントリは、一定時間が経過すると期限切れ(stale)になります(TTL: time-to-live)。デフォルトでは、この期間は 60 秒ですが、設定 [query_cache_ttl](/operations/settings/settings#query_cache_ttl) を使用して、セッション、プロファイル、またはクエリ単位で異なる値を指定できます。クエリキャッシュはエントリを「遅延(lazy)」方式で削除します。つまり、エントリが期限切れになっても、すぐにはキャッシュから削除されません。代わりに、新しいエントリをクエリキャッシュに挿入しようとしたとき、データベースは新しいエントリ用の空き容量がキャッシュに十分あるかどうかを確認します。十分でない場合、データベースはすべての期限切れエントリを削除しようとします。それでもキャッシュに十分な空き容量がない場合、新しいエントリは挿入されません。 +クエリキャッシュ内のエントリは、一定時間が経過すると古くなります(time-to-live)。デフォルトではこの期間は 60 秒ですが、[query_cache_ttl](/operations/settings/settings#query_cache_ttl) 設定を使って、セッション、プロファイル、またはクエリ単位で別の値を指定できます。クエリキャッシュはエントリを「遅延的に」追い出します。つまり、エントリが古くなっても、キャッシュから即座には削除されません。代わりに、新しいエントリをクエリキャッシュに挿入しようとしたとき、データベースは新しいエントリ用の空き領域がキャッシュ内に十分あるかどうかを確認します。そうでない場合、データベースはすべての古いエントリを削除しようとします。それでもキャッシュに十分な空き領域がない場合は、新しいエントリは挿入されません。 -クエリキャッシュ内のエントリは、デフォルトで圧縮されます。これにより、クエリキャッシュ全体のメモリ消費量が削減されますが、その代わりにクエリキャッシュへの書き込み/読み出しは遅くなります。圧縮を無効にするには、設定 [query_cache_compress_entries](/operations/settings/settings#query_cache_compress_entries) を使用します。 +クエリが HTTP 経由で実行される場合、ClickHouse はキャッシュされたエントリの経過時間(秒単位)と有効期限のタイムスタンプを示す `Age` および `Expires` ヘッダーを設定します。 -同じクエリに対して複数の結果をキャッシュしておきたい場合があります。これは、クエリキャッシュエントリのラベル(または名前空間)のように機能する設定 [query_cache_tag](/operations/settings/settings#query_cache_tag) を使用することで実現できます。クエリキャッシュは、同じクエリであってもタグが異なる結果は別物として扱います。 +クエリキャッシュ内のエントリは、デフォルトで圧縮されます。これは、クエリキャッシュへの書き込み/読み取りが遅くなる代わりに、全体的なメモリ使用量を削減するためです。圧縮を無効にするには、設定 [query_cache_compress_entries](/operations/settings/settings#query_cache_compress_entries) を使用します。 + +同じクエリに対して複数の結果をキャッシュしておきたい場合があります。これは、クエリキャッシュエントリのラベル(またはネームスペース)の役割を果たす設定 [query_cache_tag](/operations/settings/settings#query_cache_tag) を使用することで実現できます。クエリキャッシュは、同じクエリでもタグが異なれば、結果を別物として扱います。 同じクエリに対して 3 つの異なるクエリキャッシュエントリを作成する例: ```sql -SELECT 1 SETTINGS use_query_cache = true; -- query_cache_tagは暗黙的に''(空文字列)です +SELECT 1 SETTINGS use_query_cache = true; -- query_cache_tag は暗黙的に ''(空文字列)になります SELECT 1 SETTINGS use_query_cache = true, query_cache_tag = 'tag 1'; SELECT 1 SETTINGS use_query_cache = true, query_cache_tag = 'tag 2'; ``` -クエリキャッシュからタグ `tag` の付いたエントリだけを削除するには、`SYSTEM DROP QUERY CACHE TAG 'tag'` ステートメントを使用できます。 +クエリキャッシュからタグ `tag` が付いたエントリのみを削除するには、`SYSTEM DROP QUERY CACHE TAG 'tag'` 文を使用します。 + +ClickHouse は、テーブルデータを [max_block_size](/operations/settings/settings#max_block_size) 行のブロック単位で読み取ります。フィルタリングや集約などにより、 +結果ブロックは通常は `max_block_size` よりかなり小さくなりますが、逆にそれより大きくなる場合もあります。 +[query_cache_squash_partial_results](/operations/settings/settings#query_cache_squash_partial_results)(デフォルトで有効)を設定すると、 +クエリ結果キャッシュへの挿入前に、結果ブロックが(非常に小さい場合は)まとめられ、(大きい場合は)`max_block_size` の大きさのブロックに分割されるかどうかを制御できます。 +これによりクエリキャッシュへの書き込み性能は低下しますが、キャッシュエントリの圧縮率が向上し、 +後でクエリキャッシュからクエリ結果を提供する際に、より自然なブロック粒度が得られます。 -ClickHouse はテーブルデータを [max_block_size](/operations/settings/settings#max_block_size) 行のブロック単位で読み込みます。フィルタリングや集約などにより、 -結果ブロックは通常は `max_block_size` よりかなり小さくなりますが、場合によってはそれよりも大きくなることもあります。 -[query_cache_squash_partial_results](/operations/settings/settings#query_cache_squash_partial_results)(デフォルトで有効)は、結果ブロックがクエリ結果 -キャッシュに挿入される前に、ブロックが非常に小さい場合にはまとめ、大きい場合には `max_block_size` のサイズのブロックに分割するかどうかを制御します。 -これによりクエリキャッシュへの書き込み性能は低下しますが、キャッシュエントリの圧縮率が向上し、後でクエリキャッシュからクエリ結果を返す際の -ブロック粒度がより自然になります。 +その結果として、クエリキャッシュは各クエリに対して複数の(部分)結果ブロックを保存します。 +この挙動は有用なデフォルトですが、設定 +[query_cache_squash_partial_results](/operations/settings/settings#query_cache_squash_partial_results) によって無効化できます。 -その結果、クエリキャッシュは各クエリに対して複数の(部分的な)結果ブロックを保存します。この挙動はデフォルトとしては有用ですが、設定 -[query_cache_squash_partial_results](/operations/settings/settings#query_cache_squash_partial_results) を用いて抑制できます。 +また、非決定的関数を含むクエリの結果は、デフォルトではキャッシュされません。これらの関数には次のようなものが含まれます。 -また、非決定的関数を含むクエリの結果はデフォルトではキャッシュされません。そのような関数には次のものが含まれます。 -- 辞書へのアクセス用関数: [`dictGet()`](/sql-reference/functions/ext-dict-functions#dictget-dictgetordefault-dictgetornull) など -- XML 定義内にタグ `true` を持たない [ユーザー定義関数](../sql-reference/statements/create/function.md) -- 現在の日付や時刻を返す関数: [`now()`](../sql-reference/functions/date-time-functions.md#now), +- 辞書にアクセスする関数([`dictGet()`](/sql-reference/functions/ext-dict-functions#dictget-dictgetordefault-dictgetornull) など) +- XML 定義内にタグ `true` を持たない + [ユーザー定義関数](../sql-reference/statements/create/function.md) +- 現在の日付または時刻を返す関数: + [`now()`](../sql-reference/functions/date-time-functions.md#now), [`today()`](../sql-reference/functions/date-time-functions.md#today), [`yesterday()`](../sql-reference/functions/date-time-functions.md#yesterday) など -- ランダムな値を返す関数: [`randomString()`](../sql-reference/functions/random-functions.md#randomString), +- ランダムな値を返す関数: + [`randomString()`](../sql-reference/functions/random-functions.md#randomString), [`fuzzBits()`](../sql-reference/functions/random-functions.md#fuzzBits) など -- クエリ処理に用いられる内部チャンクのサイズや順序に結果が依存する関数: +- クエリ処理に使用される内部チャンクのサイズと順序に応じて結果が変化する関数: [`nowInBlock()`](../sql-reference/functions/date-time-functions.md#nowInBlock) など、 [`rowNumberInBlock()`](../sql-reference/functions/other-functions.md#rowNumberInBlock), [`runningDifference()`](../sql-reference/functions/other-functions.md#runningDifference), [`blockSize()`](../sql-reference/functions/other-functions.md#blockSize) など -- 環境に依存する関数: [`currentUser()`](../sql-reference/functions/other-functions.md#currentUser), +- 実行環境に依存する関数: + [`currentUser()`](../sql-reference/functions/other-functions.md#currentUser), [`queryID()`](/sql-reference/functions/other-functions#queryID), [`getMacro()`](../sql-reference/functions/other-functions.md#getMacro) など。 -非決定的関数を含むクエリの結果を、デフォルト設定に関係なく強制的にキャッシュしたい場合は、 -[query_cache_nondeterministic_function_handling](/operations/settings/settings#query_cache_nondeterministic_function_handling) 設定を使用します。 +非決定的関数を含むクエリの結果であっても強制的にキャッシュしたい場合は、 +[query_cache_nondeterministic_function_handling](/operations/settings/settings#query_cache_nondeterministic_function_handling) を設定します。 system テーブル(例: [system.processes](system-tables/processes.md) や [information_schema.tables](system-tables/information_schema.md))を含むクエリの結果は、デフォルトではキャッシュされません。 system テーブルを含むクエリの結果を強制的にキャッシュしたい場合は、 -[query_cache_system_table_handling](/operations/settings/settings#query_cache_system_table_handling) 設定を使用します。 - -最後に、セキュリティ上の理由から、クエリキャッシュ内のエントリはユーザー間で共有されません。例えば、ユーザー A が、行ポリシーが存在しない別の -ユーザー B と同じクエリを実行することで、あるテーブル上の行ポリシーを回避できてはなりません。しかし、必要であれば、 -[query_cache_share_between_users](/operations/settings/settings#query_cache_share_between_users) 設定を指定することで、キャッシュエントリを他のユーザー -からアクセス可能(すなわち共有)としてマークできます。 - +[query_cache_system_table_handling](/operations/settings/settings#query_cache_system_table_handling) を設定します。 +最後に、セキュリティ上の理由から、クエリキャッシュ内のエントリはユーザー間で共有されません。たとえば、ユーザー A は、 +ユーザー B(そのようなポリシーが存在しないユーザー)と同じクエリを実行することで、テーブルに対する行ポリシーを回避できてはなりません。 +ただし、必要に応じて、設定 +[query_cache_share_between_users](/operations/settings/settings#query_cache_share_between_users) を指定することで、 +キャッシュエントリを他のユーザーからアクセス可能(すなわち共有)としてマークできます。 -## 関連コンテンツ {#related-content} +## 関連コンテンツ \{#related-content\} -- ブログ: [ClickHouseクエリキャッシュの紹介](https://clickhouse.com/blog/introduction-to-the-clickhouse-query-cache-and-design) +- ブログ記事: [Introducing the ClickHouse Query Cache](https://clickhouse.com/blog/introduction-to-the-clickhouse-query-cache-and-design) \ No newline at end of file diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/server-configuration-parameters/settings.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/server-configuration-parameters/settings.md index 445d6b228f2..240c2837cac 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/server-configuration-parameters/settings.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/server-configuration-parameters/settings.md @@ -1,6 +1,6 @@ --- -description: 'このセクションでは、サーバー設定、すなわちセッションレベルやクエリレベルでは変更できない設定について説明します。' -keywords: ['グローバルサーバー設定'] +description: 'このセクションでは、セッション単位やクエリ単位では変更できないサーバー設定について説明します。' +keywords: ['グローバルなサーバー設定'] sidebar_label: 'サーバー設定' sidebar_position: 57 slug: /operations/server-configuration-parameters/settings @@ -8,5131 +8,6 @@ title: 'サーバー設定' doc_type: 'reference' --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; -import SystemLogParameters from '@site/docs/operations/server-configuration-parameters/_snippets/_system-log-parameters.md'; -import SettingsInfoBlock from '@theme/SettingsInfoBlock/SettingsInfoBlock'; - - -# サーバー設定 - -このセクションでは、サーバー設定について説明します。これらはセッションやクエリ単位では変更できない設定です。 - -ClickHouse における設定ファイルの詳細については、[「Configuration Files」](/operations/configuration-files) を参照してください。 - -その他の設定については、「[Settings](/operations/settings/overview)」セクションで説明しています。 -設定について理解する前に、[Configuration files](/operations/configuration-files) セクションを読み、置換(`incl` および `optional` 属性)の使い方に注意することを推奨します。 - - - -## abort_on_logical_error {#abort_on_logical_error} - -LOGICAL_ERROR 例外発生時にサーバーをクラッシュさせます。上級者向けの設定です。 - - - -## access_control_improvements - -アクセス制御システムに対する任意の改善用設定です。 - -| Setting | Description | Default | -| ----------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -| `users_without_row_policies_can_read_rows` | 行ポリシーを持たないユーザーでも、`SELECT` クエリを使用して行を読み取れるかどうかを設定します。たとえば、ユーザー A と B がいて、行ポリシーが A に対してのみ定義されている場合、この設定が true であれば、ユーザー B はすべての行を閲覧できます。この設定が false の場合、ユーザー B はいずれの行も閲覧できません。 | `true` | -| `on_cluster_queries_require_cluster_grant` | `ON CLUSTER` クエリに `CLUSTER` 権限が必要かどうかを設定します。 | `true` | -| `select_from_system_db_requires_grant` | `SELECT * FROM system.` を実行する際に、権限が必要かどうか、また任意のユーザーが実行できるかどうかを設定します。true に設定した場合、このクエリには `system` 以外のテーブルと同様に `GRANT SELECT ON system.
` が必要です。例外として、いくつかの `system` テーブル(`tables`、`columns`、`databases`、および `one`、`contributors` のような一部の定数テーブル)は引き続き全ユーザーが参照可能です。また、`SHOW` 権限(例: `SHOW USERS`)が付与されている場合、対応する `system` テーブル(つまり `system.users`)にはアクセスできます。 | `true` | -| `select_from_information_schema_requires_grant` | `SELECT * FROM information_schema.
` を実行する際に、権限が必要かどうか、また任意のユーザーが実行できるかどうかを設定します。true に設定した場合、このクエリには通常のテーブルと同様に `GRANT SELECT ON information_schema.
` が必要です。 | `true` | -| `settings_constraints_replace_previous` | ある設定に対する設定プロファイル内の制約が、その設定に対して以前に定義された制約(他のプロファイル内で定義されたもの)の動作を、新しい制約で値が設定されていないフィールドも含めて打ち消すかどうかを設定します。また、`changeable_in_readonly` 制約タイプを有効にします。 | `true` | -| `table_engines_require_grant` | 特定のテーブルエンジンを用いてテーブルを作成する際に、権限が必要かどうかを設定します。 | `false` | -| `role_cache_expiration_time_seconds` | 最終アクセスからの経過秒数として、ロールが `Role Cache` に保持される時間を設定します。 | `600` | - -Example: - -```xml - - true - true - true - true - true - false - 600 - -``` - - -## access_control_path {#access_control_path} - -ClickHouse サーバーが、SQL コマンドで作成されたユーザーおよびロールの設定を格納するディレクトリへのパス。 - -**関連項目** - -- [アクセス制御とアカウント管理](/operations/access-rights#access-control-usage) - - - -## aggregate_function_group_array_action_when_limit_is_reached {#aggregate_function_group_array_action_when_limit_is_reached} - -groupArray で配列要素数の上限を超えた場合に実行する動作: 例外を `throw` するか、超過した値を `discard` するかを指定します - - - -## aggregate_function_group_array_max_element_size {#aggregate_function_group_array_max_element_size} - -groupArray 関数における配列要素の最大サイズ(バイト単位)。この制限はシリアル化時に検証され、集約状態が過度に大きくなるのを防ぎます。 - - - -## allow_feature_tier {#allow_feature_tier} - - -異なる機能ティアごとの設定をユーザーが変更できるかどうかを制御します。 - -- `0` - すべての設定の変更が許可されます(experimental、beta、production)。 -- `1` - beta および production の機能設定のみ変更が許可されます。experimental 設定の変更は拒否されます。 -- `2` - production の設定のみ変更が許可されます。experimental および beta の設定の変更は拒否されます。 - -これは、すべての `EXPERIMENTAL` / `BETA` 機能に読み取り専用の制約を設定するのと同等です。 - -:::note -値が `0` の場合、すべての設定を変更できます。 -::: - - - - -## allow_impersonate_user {#allow_impersonate_user} - -`IMPERSONATE` 機能(`EXECUTE AS target_user`)を有効または無効にします。 - - - -## allow_implicit_no_password - -'IDENTIFIED WITH no_password' が明示的に指定されていない限り、ユーザーをパスワードなしで作成することを禁止します。 - -```xml -1 -``` - - -## allow_no_password - -安全ではないパスワード種別である no_password を許可するかどうかを設定します。 - -```xml -1 -``` - - -## allow_plaintext_password - -プレーンテキストのパスワード方式(安全ではない)を許可するかどうかを設定します。 - -```xml -1 -``` - - -## allow_use_jemalloc_memory {#allow_use_jemalloc_memory} - -jemalloc によるメモリの使用を許可します。 - - - -## allowed_disks_for_table_engines {#allowed_disks_for_table_engines} - -Iceberg で使用が許可されているディスクの一覧 - - - -## async_insert_queue_flush_on_shutdown {#async_insert_queue_flush_on_shutdown} - -`true` の場合、グレースフルシャットダウン時に非同期挿入キューがフラッシュされます - - - -## async_insert_threads {#async_insert_threads} - -バックグラウンドでデータを解析して挿入するために使用されるスレッドの最大数。0 の場合、非同期モードは無効になります - - - -## async_load_databases - - - -データベースおよびテーブルの非同期ロード。 - -* `true` の場合、すべての非システムデータベースのうち、エンジンが `Ordinary`、`Atomic`、`Replicated` のものは、ClickHouse サーバーの起動後に非同期でロードされます。`system.asynchronous_loader` テーブルおよび `tables_loader_background_pool_size`、`tables_loader_foreground_pool_size` サーバー設定を参照してください。まだロードされていないテーブルへアクセスしようとするクエリは、そのテーブルが起動して利用可能になるまで待機します。ロードジョブが失敗した場合、クエリは(`async_load_databases = false` の場合のようにサーバー全体をシャットダウンするのではなく)エラーを再スローします。少なくとも 1 つのクエリが待機しているテーブルは、より高い優先度でロードされます。データベースに対する DDL クエリは、そのデータベースが起動して利用可能になるまで待機します。また、待機中のクエリ総数に対する制限として `max_waiting_queries` の設定も検討してください。 -* `false` の場合、すべてのデータベースはサーバー起動時にロードされます。 - -**例** - -```xml -true -``` - - -## async_load_system_database - - - -`system` データベース内に多数のログテーブルやパーツがある場合に有用な、システムテーブルの非同期読み込みを有効にします。`async_load_databases` 設定とは独立しています。 - -* `true` に設定した場合、ClickHouse サーバー起動後に、`Ordinary`、`Atomic`、`Replicated` エンジンを持つすべての `system` データベースが非同期に読み込まれます。`system.asynchronous_loader` テーブル、およびサーバー設定 `tables_loader_background_pool_size` と `tables_loader_foreground_pool_size` を参照してください。まだ読み込まれていないシステムテーブルへアクセスしようとするクエリは、そのテーブルの読み込みが完了するまで待機します。少なくとも 1 件のクエリから待機されているテーブルは、より高い優先度で読み込まれます。また、待機中のクエリ総数を制限するために `max_waiting_queries` 設定の利用も検討してください。 -* `false` に設定した場合、システムデータベースはサーバー起動前に読み込まれます。 - -**例** - -```xml -true -``` - - -## asynchronous_heavy_metrics_update_period_s {#asynchronous_heavy_metrics_update_period_s} - -負荷の高い非同期メトリクスを更新する間隔(秒単位)。 - - - -## asynchronous_insert_log - -非同期インサートのログを記録するための [asynchronous_insert_log](/operations/system-tables/asynchronous_insert_log) システムテーブルの設定。 - - - -**例** - -```xml - - - system -
asynchronous_insert_log
- 7500 - toYYYYMM(event_date) - 1048576 - 8192 - 524288 - false - - -
-``` - - -## asynchronous_metric_log - -ClickHouse Cloud のデプロイメントでは、デフォルトで有効になっています。 - -お使いの環境でこの設定がデフォルトで有効になっていない場合は、ClickHouse のインストール方法に応じて、以下の手順に従って設定を有効化または無効化できます。 - -**有効化** - -非同期メトリックログ履歴の収集 [`system.asynchronous_metric_log`](../../operations/system-tables/asynchronous_metric_log.md) を手動で有効にするには、次の内容で `/etc/clickhouse-server/config.d/asynchronous_metric_log.xml` を作成します。 - -```xml - - - system - asynchronous_metric_log
- 7500 - 1000 - 1048576 - 8192 - 524288 - false -
-
-``` - -**無効化** - -`asynchronous_metric_log` 設定を無効にするには、次の内容のファイル `/etc/clickhouse-server/config.d/disable_asynchronous_metric_log.xml` を作成します: - -```xml - -``` - - - - -## asynchronous_metrics_enable_heavy_metrics {#asynchronous_metrics_enable_heavy_metrics} - -負荷の高い非同期メトリクスの計算を有効にします。 - - - -## asynchronous_metrics_update_period_s {#asynchronous_metrics_update_period_s} - -非同期メトリクスの更新間隔(秒)。 - - - -## auth_use_forwarded_address {#auth_use_forwarded_address} - -プロキシ経由で接続されたクライアントに対して、認証時に元の発信元アドレスを使用します。 - -:::note -転送されたアドレスは容易に偽装できるため、この設定は細心の注意を払って使用する必要があります。そのような認証を受け入れるサーバーには、直接アクセスせず、必ず信頼できるプロキシ経由でのみアクセスするようにしてください。 -::: - - - -## background_buffer_flush_schedule_pool_size {#background_buffer_flush_schedule_pool_size} - -バックグラウンドで [Buffer エンジン](/engines/table-engines/special/buffer) テーブルのフラッシュ処理を実行するために使用されるスレッドの最大数。 - - - -## background_common_pool_size {#background_common_pool_size} - -バックグラウンドで [*MergeTree エンジン](/engines/table-engines/mergetree-family) テーブルに対して各種処理(主にガーベジコレクション)を実行するために使用されるスレッド数の最大値。 - - - -## background_distributed_schedule_pool_size {#background_distributed_schedule_pool_size} - -分散送信の実行に使用されるスレッド数の上限。 - - - -## background_fetches_pool_size {#background_fetches_pool_size} - -バックグラウンドで [*MergeTree-engine](/engines/table-engines/mergetree-family) テーブルの他のレプリカからデータパーツを取得するために使用されるスレッド数の最大値です。 - - - -## background_merges_mutations_concurrency_ratio {#background_merges_mutations_concurrency_ratio} - - -スレッド数に対する、同時に実行できるバックグラウンドのマージおよびミューテーション処理数の比率を設定します。 - -たとえば、この比率が 2 で、[`background_pool_size`](/operations/server-configuration-parameters/settings#background_pool_size) が 16 に設定されている場合、ClickHouse は 32 個のバックグラウンドマージを同時に実行できます。これは、バックグラウンド処理を一時停止および延期できるためです。これは、小さいマージにより高い実行優先度を与えるために必要です。 - -:::note -この比率は実行時には増やすことしかできません。値を下げるにはサーバーを再起動する必要があります。 - -[`background_pool_size`](/operations/server-configuration-parameters/settings#background_pool_size) 設定と同様に、[`background_merges_mutations_concurrency_ratio`](/operations/server-configuration-parameters/settings#background_merges_mutations_concurrency_ratio) も後方互換性のために `default` プロファイルから適用できます。 -::: - - - - -## background_merges_mutations_scheduling_policy {#background_merges_mutations_scheduling_policy} - - -バックグラウンドマージおよびミューテーションのスケジューリング方法を決定するポリシーです。指定可能な値は `round_robin` と `shortest_task_first` です。 - -バックグラウンドスレッドプールが、次に実行するマージまたはミューテーションを選択する際に用いるアルゴリズムです。ポリシーはサーバーの再起動なしに、実行時に変更できます。 -後方互換性のために `default` プロファイルから適用することができます。 - -設定可能な値: - -- `round_robin` — すべての同時マージおよびミューテーションは、ラウンドロビン順に実行され、飢餓状態が発生しないようにします。小さいマージはマージ対象のブロック数が少ないため、大きいマージよりも速く完了します。 -- `shortest_task_first` — 常にサイズの小さいマージまたはミューテーションを実行します。マージおよびミューテーションには、結果のサイズに基づいて優先度が割り当てられます。サイズの小さいマージは大きいマージよりも厳密に優先されます。このポリシーは小さいパーツを可能な限り速くマージすることを保証しますが、`INSERT` が大量に発生しているパーティションでは、大きなマージが無期限に実行されないまま飢餓状態になる可能性があります。 - - - - -## background_message_broker_schedule_pool_size {#background_message_broker_schedule_pool_size} - -メッセージストリーミングのバックグラウンド処理を実行するために使用されるスレッドの最大数。 - - - -## background_move_pool_size {#background_move_pool_size} - -バックグラウンドでデータパーツを別のディスクまたはボリュームに移動する際に使用される、*MergeTree エンジンテーブル用の最大スレッド数です。 - - - -## background_pool_size - - - -MergeTree エンジンを使用するテーブルに対して、バックグラウンドでマージおよびミューテーションを実行するスレッド数を設定します。 - -:::note - -* この設定は、後方互換性のために、ClickHouse サーバー起動時に `default` プロファイルの設定から適用することもできます。 -* 実行中に変更できるのは、スレッド数を増やす場合のみです。 -* スレッド数を減らすにはサーバーを再起動する必要があります。 -* この設定を調整することで、CPU とディスクの負荷を制御できます。 - ::: - -:::danger -プールサイズを小さくすると CPU とディスクのリソース消費は減りますが、バックグラウンド処理の進行が遅くなり、最終的にはクエリ性能に影響を与える可能性があります。 -::: - -この値を変更する前に、次のような関連する MergeTree 設定も確認してください。 - -* [`number_of_free_entries_in_pool_to_lower_max_size_of_merge`](../../operations/settings/merge-tree-settings.md#number_of_free_entries_in_pool_to_lower_max_size_of_merge). -* [`number_of_free_entries_in_pool_to_execute_mutation`](../../operations/settings/merge-tree-settings.md#number_of_free_entries_in_pool_to_execute_mutation). -* [`number_of_free_entries_in_pool_to_execute_optimize_entire_partition`](/operations/settings/merge-tree-settings#number_of_free_entries_in_pool_to_execute_optimize_entire_partition) - -**例** - -```xml -16 -``` - - -## background_schedule_pool_max_parallel_tasks_per_type_ratio {#background_schedule_pool_max_parallel_tasks_per_type_ratio} - -同一種別のタスクを同時に実行できる、プール内スレッド数の最大比率。 - - - -## background_schedule_pool_size {#background_schedule_pool_size} - -レプリケーテッドテーブル、Kafka ストリーミング、DNS キャッシュの更新などの軽量な定期的処理を継続的に実行するために使用されるスレッドの最大数です。 - - - -## backup_log - -`BACKUP` および `RESTORE` 操作を記録するための [backup_log](../../operations/system-tables/backup_log.md) システムテーブル用の設定。 - - - -**例** - -```xml - - - system - backup_log
- 1000 - toYYYYMM(event_date) - 1048576 - 8192 - 524288 - false - -
-
-``` - - -## backup_threads {#backup_threads} - -`BACKUP` リクエストを実行するスレッド数の上限。 - - - -## backups {#backups} - -[`BACKUP` および `RESTORE`](../backup.md) ステートメントを実行する際に使用されるバックアップ設定です。 - -次の設定はサブタグごとに構成できます。 - - - -{/* SQL - WITH settings AS ( - SELECT arrayJoin([ - ('allow_concurrent_backups', 'Bool','同一ホスト上で複数のバックアップ処理を同時に実行できるかどうかを決定します。', 'true'), - ('allow_concurrent_restores', 'Bool', '同一ホスト上で複数のリストア処理を同時に実行できるかどうかを決定します。', 'true'), - ('allowed_disk', 'String', '`File()` を使用する際のバックアップ先ディスクです。この設定は `File` を使用するために必須です。', ''), - ('allowed_path', 'String', '`File()` を使用する際のバックアップ先パスです。この設定は `File` を使用するために必須です。', ''), - ('attempts_to_collect_metadata_before_sleep', 'UInt', '収集したメタデータの比較後に不整合があった場合、スリープに入る前にメタデータ収集を試行する回数です。', '2'), - ('collect_metadata_timeout', 'UInt64', 'バックアップ中にメタデータを収集する際のタイムアウト(ミリ秒)です。', '600000'), - ('compare_collected_metadata', 'Bool', '`true` の場合、バックアップ中にメタデータが変更されていないことを保証するために、収集したメタデータを既存のメタデータと比較します。', 'true'), - ('create_table_timeout', 'UInt64', 'リストア中にテーブルを作成する際のタイムアウト(ミリ秒)です。', '300000'), - ('max_attempts_after_bad_version', 'UInt64', '協調バックアップ/リストア中に bad version エラーが発生した後にリトライを行う最大試行回数です。', '3'), - ('max_sleep_before_next_attempt_to_collect_metadata', 'UInt64', '次回のメタデータ収集を試行する前にスリープする最大時間(ミリ秒)です。', '100'), - ('min_sleep_before_next_attempt_to_collect_metadata', 'UInt64', '次回のメタデータ収集を試行する前にスリープする最小時間(ミリ秒)です。', '5000'), - ('remove_backup_files_after_failure', 'Bool', '`BACKUP` コマンドが失敗した場合、ClickHouse は失敗前にバックアップへコピー済みのファイルを削除しようとします。そうしない場合、コピー済みファイルはそのまま残ります。', 'true'), - ('sync_period_ms', 'UInt64', '協調バックアップ/リストアの同期間隔(ミリ秒)です。', '5000'), - ('test_inject_sleep', 'Bool', 'テスト用途のスリープ挿入設定です。', 'false'), - ('test_randomize_order', 'Bool', '`true` の場合、テスト目的で特定の処理順序をランダム化します。', 'false'), - ('zookeeper_path', 'String', '`ON CLUSTER` 句を使用する場合に、バックアップおよびリストアのメタデータが保存される ZooKeeper 上のパスです。', '/clickhouse/backups') - ]) AS t ) - SELECT concat('`', t.1, '`') AS Setting, t.2 AS Type, t.3 AS Description, concat('`', t.4, '`') AS Default FROM settings FORMAT Markdown +{/* NOTE: このファイル内の設定は自動生成されています。 + 詳細については、次を参照してください: ["Generating documentation from source code"](https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md) */ } - -| 設定 | 型 | 概要 | デフォルト | -| :-------------------------------------------------- | :-------- | :---------------------------------------------------------------------------------------------------- | :-------------------- | -| `allow_concurrent_backups` | Bool | 同一ホスト上で複数のバックアップ処理を同時に実行できるかどうかを制御します。 | `true` | -| `allow_concurrent_restores` | Bool(ブール) | 同一ホストで複数の復元処理を並行実行できるかどうかを指定します。 | `true` | -| `allowed_disk` | 文字列 | `File()` を使用する際にバックアップ先として利用するディスク。この設定を行わないと `File()` は使用できません。 | `` | -| `allowed_path` | String | `File()` 使用時のバックアップ先パス。この設定を指定しないと `File` は使用できません。 | `` | -| `attempts_to_collect_metadata_before_sleep` | UInt | 収集したメタデータを比較して不整合があった場合に、スリープに入る前にメタデータの収集を再試行する回数。 | `2` | -| `collect_metadata_timeout` | UInt64 | バックアップ時のメタデータ収集のタイムアウト(ミリ秒単位)。 | `600000` | -| `compare_collected_metadata` | Bool | true の場合、収集したメタデータを既存のメタデータと比較し、バックアップ中に変更されていないことを検証します。 | `true` | -| `create_table_timeout` | UInt64 | 復元中のテーブル作成タイムアウト(ミリ秒)。 | `300000` | -| `max_attempts_after_bad_version` | UInt64 | 協調バックアップ/リストア処理中に「bad version」エラーが発生した場合に行う再試行の最大回数。 | `3` | -| `max_sleep_before_next_attempt_to_collect_metadata` | UInt64 | 次回のメタデータ収集試行までの最大スリープ時間(ミリ秒)。 | `100` | -| `min_sleep_before_next_attempt_to_collect_metadata` | UInt64 | 次のメタデータ収集を試行するまでの最小スリープ時間(ミリ秒)。 | `5000` | -| `remove_backup_files_after_failure` | Bool | `BACKUP` コマンドが失敗した場合、ClickHouse は失敗が発生する前にバックアップにコピーされたファイルを削除しようとしますが、削除できなかったファイルについてはコピーされたまま残します。 | `true` | -| `sync_period_ms` | UInt64 | バックアップ/リストアを連携して実行するための同期間隔(ミリ秒単位)。 | `5000` | -| `test_inject_sleep` | Bool | テスト用スリープ処理 | `false` | -| `test_randomize_order` | Bool | true に設定すると、テスト目的で一部の操作の実行順序をランダム化します。 | `false` | -| `zookeeper_path` | String | `ON CLUSTER` 句使用時に、バックアップおよびリストアのメタデータが保存される ZooKeeper 内のパス。 | `/clickhouse/backups` | - -この設定はデフォルトで次のように構成されています: - -```xml - - .... - -``` - - -## backups_io_thread_pool_queue_size {#backups_io_thread_pool_queue_size} - - -Backups IO Thread プールにスケジュールできるジョブの最大数です。現在の S3 バックアップのロジック上、このキューは無制限のままにしておくことが推奨されます。 - -:::note -`0`(デフォルト)の値は無制限を意味します。 -::: - - - - -## bcrypt_workfactor - -`bcrypt_password` 認証タイプで使用される [Bcrypt アルゴリズム](https://wildlyinaccurate.com/bcrypt-choosing-a-work-factor/) のワークファクタです。 -ワークファクタは、ハッシュの計算およびパスワード検証に必要な計算量と時間を定義します。 - -```xml -12 -``` - -:::warning -認証処理を頻繁に行うアプリケーションでは、 -高いワークファクター設定時の bcrypt の計算コストを考慮し、 -別の認証方式の利用を検討してください。 -::: - - -## blob_storage_log - -[`blob_storage_log`](../system-tables/blob_storage_log.md) システムテーブルに関する設定です。 - - - -例: - -```xml - - systemblob_storage_logtoYYYYMM(event_date) - 7500event_date + INTERVAL 30 DAY - -``` - - -## builtin_dictionaries_reload_interval - -組み込みディクショナリを再読み込みするまでの間隔を秒単位で指定します。 - -ClickHouse は、組み込みディクショナリを x 秒ごとに再読み込みします。これにより、サーバーを再起動することなくディクショナリを即時に編集できます。 - -**例** - -```xml -3600 -``` - - -## cache_size_to_ram_max_ratio {#cache_size_to_ram_max_ratio} - -キャッシュサイズを RAM の最大値に対する比率として設定します。メモリ容量の小さいシステムでキャッシュサイズを小さく抑えることができます。 - - - -## cannot_allocate_thread_fault_injection_probability {#cannot_allocate_thread_fault_injection_probability} - -テスト目的のための設定です。 - - - -## cgroups_memory_usage_observer_wait_time {#cgroups_memory_usage_observer_wait_time} - - -サーバーの最大許容メモリ使用量を、cgroups 内の対応するしきい値に基づいて調整する際の、秒単位の間隔。 - -cgroup オブザーバーを無効にするには、この値を `0` に設定します。 - - - - -## compiled_expression_cache_elements_size {#compiled_expression_cache_elements_size} - -[コンパイル済み式](../../operations/caches.md)用キャッシュのサイズ(要素数)を設定します。 - - - -## compiled_expression_cache_size {#compiled_expression_cache_size} - -[コンパイル済み式](../../operations/caches.md)のキャッシュサイズをバイト単位で設定します。 - - - -## compression - -[MergeTree](../../engines/table-engines/mergetree-family/mergetree.md) エンジンのテーブルに対するデータ圧縮設定です。 - -:::note -ClickHouse を使い始めたばかりの場合は、この設定は変更しないことをお勧めします。 -::: - -**設定テンプレート**: - -```xml - - - ... - ... - ... - ... - - ... - -``` - -**`` フィールド**: - -* `min_part_size` – データパートの最小サイズ。 -* `min_part_size_ratio` – データパートサイズとテーブルサイズの比率。 -* `method` – 圧縮方式。指定可能な値: `lz4`, `lz4hc`, `zstd`, `deflate_qpl`。 -* `level` – 圧縮レベル。[Codecs](/sql-reference/statements/create/table#general-purpose-codecs) を参照。 - -:::note -複数の `` セクションを設定できます。 -::: - -**条件が満たされたときの動作**: - -* データパートがいずれかの条件セットに一致した場合、ClickHouse は指定された圧縮方式を使用します。 -* データパートが複数の条件セットに一致した場合、ClickHouse は最初に一致した条件セットを使用します。 - -:::note -データパートに対していずれの条件も満たされない場合、ClickHouse は `lz4` 圧縮を使用します。 -::: - -**例** - -```xml - - - 10000000000 - 0.01 - zstd - 1 - - -``` - - -## concurrent_threads_scheduler {#concurrent_threads_scheduler} - - -`concurrent_threads_soft_limit_num` と `concurrent_threads_soft_limit_ratio_to_cores` で指定された CPU スロットをどのようにスケジューリングするかを決定するポリシーです。制限された数の CPU スロットを同時実行クエリ間でどのように分配するかを制御するアルゴリズムでもあります。スケジューラは、サーバーを再起動することなく実行時に変更できます。 - -設定可能な値: - -- `round_robin` — `use_concurrency_control` = 1 に設定された各クエリは、最大で `max_threads` 個の CPU スロットを確保します。スレッドごとに 1 スロットです。競合が発生した場合、CPU スロットはクエリ間でラウンドロビン方式で割り当てられます。最初のスロットは無条件に付与される点に注意してください。このため、多数の `max_threads` = 1 のクエリが存在する状況では、`max_threads` が大きいクエリが不公平に扱われ、レイテンシーが増加する可能性があります。 -- `fair_round_robin` — `use_concurrency_control` = 1 に設定された各クエリは、最大で `max_threads - 1` 個の CPU スロットを確保します。各クエリの最初のスレッドには CPU スロットを必要としないという点で、`round_robin` のバリエーションです。これにより、`max_threads` = 1 のクエリはスロットを一切必要とせず、不公平に全スロットを占有してしまうことがなくなります。無条件に付与されるスロットは存在しません。 - - - - -## concurrent_threads_soft_limit_num {#concurrent_threads_soft_limit_num} - - -リモートサーバーからデータを取得するスレッドを除き、すべてのクエリで使用できるクエリ処理スレッドの最大数です。これはハードリミットではありません。制限に達した場合でも、そのクエリには少なくとも 1 つのスレッドが割り当てられて実行されます。より多くのスレッドが利用可能になった場合、実行中のクエリは必要なスレッド数までスケールアップできます。 - -:::note -`0`(デフォルト)の場合は無制限を意味します。 -::: - - - - -## concurrent_threads_soft_limit_ratio_to_cores {#concurrent_threads_soft_limit_ratio_to_cores} - -[`concurrent_threads_soft_limit_num`](#concurrent_threads_soft_limit_num) と同様ですが、コア数に対する比率として指定します。 - - - -## config_reload_interval_ms {#config_reload_interval_ms} - - -ClickHouse が設定を再読み込みし、新しい変更の有無を確認する間隔 - - - - -## core_dump - -コアダンプファイルサイズのソフトリミットを設定します。 - -:::note -ハードリミットはシステムツールで構成します -::: - -**例** - -```xml - - 1073741824 - -``` - - -## cpu_slot_preemption - - - -CPU リソース(MASTER THREAD と WORKER THREAD)のワークロードスケジューリング方法を定義します。 - -* `true`(推奨)の場合、実際に消費された CPU 時間に基づいて使用状況の計測が行われます。競合するワークロードに対して、公平な量の CPU 時間が割り当てられます。スロットは一定時間のみ割り当てられ、有効期限後に再度要求されます。CPU リソースが過負荷の場合、スロット要求がスレッド実行をブロックすることがあり、つまりプリエンプションが発生する可能性があります。これにより CPU 時間の公平性が確保されます。 -* `false`(デフォルト)の場合、計測は割り当てられた CPU スロット数に基づいて行われます。競合するワークロードに対して、公平な数の CPU スロットが割り当てられます。スレッド開始時にスロットが割り当てられ、スレッドの実行が終了するまで継続的に保持され、その後解放されます。クエリ実行に割り当てられるスレッド数は 1 から `max_threads` までしか増加せず、減少することはありません。これは長時間実行されるクエリに有利に働き、短時間クエリが CPU リソースの飢餓状態に陥る可能性があります。 - -**例** - -```xml -true -``` - -**関連項目** - -* [Workload Scheduling](/operations/workload-scheduling.md) - - -## cpu_slot_preemption_timeout_ms - - - -プリエンプション中、つまり別の CPU スロットが付与されるのを待つ間に、ワーカースレッドが待機できる時間(ミリ秒)を定義します。このタイムアウト後も新しい CPU スロットを取得できなかった場合、そのスレッドは終了し、クエリは同時実行スレッド数がより少ない状態へ動的にスケールダウンされます。マスタースレッド自体がスケールダウンされることはありませんが、無期限にプリエンプトされる可能性がある点に注意してください。`cpu_slot_preemption` が有効であり、かつ WORKER THREAD に対して CPU リソースが定義されている場合にのみ意味を持ちます。 - -**例** - -```xml -1000 -``` - -**関連項目** - -* [Workload Scheduling](/operations/workload-scheduling.md) - - -## cpu_slot_quantum_ns - - - -これは、スレッドが CPU スロットを取得してから、別の CPU スロットを再度要求するまでに消費できる CPU ナノ秒数を定義します。`cpu_slot_preemption` が有効であり、かつ MASTER THREAD または WORKER THREAD に CPU リソースが定義されている場合にのみ有効です。 - -**例** - -```xml -10000000 -``` - -**関連項目** - -* [ワークロードのスケジューリング](/operations/workload-scheduling.md) - - -## crash_log - -[crash_log](../../operations/system-tables/crash_log.md) システムテーブルの動作に関する設定です。 - -以下の設定はサブタグで構成できます。 - -| Setting | Description | Default | Note | -| ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------- | ----------------------------------------------------------------------------------- | -| `database` | データベース名。 | | | -| `table` | システムテーブル名。 | | | -| `engine` | システムテーブル用の [MergeTree エンジン定義](/engines/table-engines/mergetree-family/mergetree#table_engine-mergetree-creating-a-table)。 | | `partition_by` または `order_by` が定義されている場合は使用できません。指定しない場合、デフォルトで `MergeTree` が選択されます | -| `partition_by` | システムテーブル用の [カスタムパーティショニングキー](/engines/table-engines/mergetree-family/custom-partitioning-key.md)。 | | システムテーブルに対して `engine` を指定する場合、`partition_by` パラメータは直接 `engine` 内で指定する必要があります | -| `ttl` | テーブルの [TTL](/engines/table-engines/mergetree-family/mergetree#table_engine-mergetree-ttl) を指定します。 | | システムテーブルに対して `engine` を指定する場合、`ttl` パラメータは直接 `engine` 内で指定する必要があります | -| `order_by` | システムテーブル用の [カスタムソートキー](/engines/table-engines/mergetree-family/mergetree#order_by)。`engine` が定義されている場合は使用できません。 | | システムテーブルに対して `engine` を指定する場合、`order_by` パラメータは直接 `engine` 内で指定する必要があります | -| `storage_policy` | テーブルに使用するストレージポリシー名(任意)。 | | システムテーブルに対して `engine` を指定する場合、`storage_policy` パラメータは直接 `engine` 内で指定する必要があります | -| `settings` | MergeTree の動作を制御する [追加パラメータ](/engines/table-engines/mergetree-family/mergetree/#settings)(任意)。 | | システムテーブルに対して `engine` を指定する場合、`settings` パラメータは直接 `engine` 内で指定する必要があります | -| `flush_interval_milliseconds` | メモリ上のバッファからテーブルへデータをフラッシュする間隔。 | `7500` | | -| `max_size_rows` | ログの最大行数。未フラッシュのログ数が `max_size_rows` に達すると、ログがディスクにダンプされます。 | `1024` | | -| `reserved_size_rows` | ログ用に事前に確保しておくメモリサイズ(行数)。 | `1024` | | -| `buffer_size_rows_flush_threshold` | 行数に対するしきい値。このしきい値に達すると、バックグラウンドでログのディスクへのフラッシュが実行されます。 | `max_size_rows / 2` | | -| `flush_on_crash` | クラッシュ時にログをディスクへダンプするかどうかを設定します。 | `false` | | - -デフォルトのサーバー設定ファイル `config.xml` には、次の設定セクションが含まれています。 - -```xml - - system - crash_log
- toYYYYMM(event_date) - 7500 - 1024 - 1024 - 512 - false -
-``` - - -## custom_cached_disks_base_directory - -この設定は、カスタム(SQL から作成された)キャッシュディスクのキャッシュパスを指定します。 -`custom_cached_disks_base_directory` はカスタムディスクに対して `filesystem_caches_path`(`filesystem_caches_path.xml` 内にあります)よりも高い優先度を持ち、 -前者が存在しない場合に後者が使用されます。 -ファイルシステムキャッシュのパスは必ずこのディレクトリ配下でなければなりません。 -そうでない場合は、ディスクの作成を防ぐために例外がスローされます。 - -:::note -これは、サーバーのアップグレード前に古いバージョンで作成されたディスクには影響しません。 -この場合、サーバーが正常に起動できるように、例外はスローされません。 -::: - -例: - -```xml -/var/lib/clickhouse/caches/ -``` - - -## custom_settings_prefixes - -[カスタム設定](/operations/settings/query-level#custom_settings)用のプレフィックスの一覧です。複数指定する場合はカンマ区切りで指定します。 - -**例** - -```xml -custom_ -``` - -**関連項目** - -* [カスタム設定](/operations/settings/query-level#custom_settings) - - -## database_atomic_delay_before_drop_table_sec {#database_atomic_delay_before_drop_table_sec} - - -[`UNDROP`](/sql-reference/statements/undrop.md) ステートメントを使用して削除されたテーブルを復元できる猶予時間です。`DROP TABLE` が `SYNC` 修飾子付きで実行された場合、この設定は無視されます。 -この設定のデフォルト値は `480`(8 分)です。 - - - - -## database_catalog_drop_error_cooldown_sec {#database_catalog_drop_error_cooldown_sec} - -テーブルの削除に失敗した場合、ClickHouse はこのタイムアウト時間が経過するまで待機してから操作を再試行します。 - - - -## database_catalog_drop_table_concurrency {#database_catalog_drop_table_concurrency} - -テーブルを削除する際に使用されるスレッドプールのサイズ。 - - - -## database_catalog_unused_dir_cleanup_period_sec {#database_catalog_unused_dir_cleanup_period_sec} - - -`store/` ディレクトリから不要なデータをクリーンアップするタスクのパラメータです。 -このタスクの実行間隔(スケジューリング周期)を設定します。 - -:::note -`0` を指定するとタスクは実行されません。デフォルト値は 1 日に相当します。 -::: - - - - -## database_catalog_unused_dir_hide_timeout_sec {#database_catalog_unused_dir_hide_timeout_sec} - - -`store/` ディレクトリから不要なデータをクリーンアップするタスクのパラメータです。 -あるサブディレクトリが clickhouse-server によって使用されておらず、かつ直近 -[`database_catalog_unused_dir_hide_timeout_sec`](/operations/server-configuration-parameters/settings#database_catalog_unused_dir_hide_timeout_sec) 秒の間に更新されていない場合、このタスクはそのディレクトリの -すべてのアクセス権を削除することで、そのディレクトリを「非表示」にします。これは、clickhouse-server が -`store/` 内に存在することを想定していないディレクトリにも適用されます。 - -:::note -`0` の値は「即時」を意味します。 -::: - - - - -## database_catalog_unused_dir_rm_timeout_sec {#database_catalog_unused_dir_rm_timeout_sec} - - -`store/` ディレクトリから不要なディレクトリをクリーンアップするタスクのパラメータです。 -サブディレクトリが clickhouse-server によって使用されておらず、以前に「非表示」 -([database_catalog_unused_dir_hide_timeout_sec](/operations/server-configuration-parameters/settings#database_catalog_unused_dir_hide_timeout_sec) を参照) -にされていて、そのディレクトリが直近 -[`database_catalog_unused_dir_rm_timeout_sec`](/operations/server-configuration-parameters/settings#database_catalog_unused_dir_rm_timeout_sec) 秒間変更されていない場合、このタスクはそのディレクトリを削除します。 -また、clickhouse-server が -`store/` 内に存在することを想定していないディレクトリに対しても動作します。 - -:::note -値が `0` の場合は「削除しない(無期限に保持する)」ことを意味します。デフォルト値は 30 日に相当します。 -::: - - - - -## database_replicated_allow_detach_permanently {#database_replicated_allow_detach_permanently} - -Replicated データベースでテーブルを恒久的にデタッチできるようにします - - - -## database_replicated_drop_broken_tables {#database_replicated_drop_broken_tables} - -予期しないテーブルを、別のローカルデータベースに移動するのではなく Replicated データベースから削除します - - - -## dead_letter_queue - -「dead_letter_queue」システムテーブルの設定です。 - - - -デフォルトの設定は次のとおりです。 - -```xml - - system - dead_letter
- toYYYYMM(event_date) - 7500 -
-``` - - -## default_database {#default_database} - -デフォルトのデータベース名です。 - - - -## default_password_type - -`CREATE USER u IDENTIFIED BY 'p'` のようなクエリで、自動的に使用されるパスワードの種類を指定します。 - -指定可能な値は次のとおりです: - -* `plaintext_password` -* `sha256_password` -* `double_sha1_password` -* `bcrypt_password` - -```xml -sha256_password -``` - - -## default_profile - -既定の設定プロファイルです。設定プロファイルは、設定 `user_config` で指定されたファイルに定義されています。 - -**例** - -```xml -default -``` - - -## default_replica_name - - - -ZooKeeper 上のレプリカ名。 - -**例** - -```xml -{replica} -``` - - -## default_replica_path - - - -ZooKeeper 上のテーブルへのパス。 - -**例** - -```xml -/clickhouse/tables/{uuid}/{shard} -``` - - -## default_session_timeout - -セッションのデフォルトタイムアウト時間(秒単位)。 - -```xml -60 -``` - - -## dictionaries_config - -ディクショナリ設定ファイルへのパス。 - -パス: - -* 絶対パス、またはサーバー設定ファイルからの相対パスを指定します。 -* パスにはワイルドカードの * や ? を含めることができます。 - -関連項目: - -* "[Dictionaries](../../sql-reference/dictionaries/index.md)"。 - -**例** - -```xml -*_dictionary.xml -``` - - -## dictionaries_lazy_load - - - -ディクショナリを遅延ロードします。 - -* `true` の場合、各ディクショナリは最初に使用されたときに読み込まれます。読み込みに失敗した場合、そのディクショナリを使用していた関数は例外をスローします。 -* `false` の場合、サーバーは起動時にすべてのディクショナリを読み込みます。 - -:::note -サーバーは、すべてのディクショナリの読み込みが完了するまで起動時に待機し、それまでは接続を受け付けません -(例外: [`wait_dictionaries_load_at_startup`](/operations/server-configuration-parameters/settings#wait_dictionaries_load_at_startup) が `false` に設定されている場合)。 -::: - -**例** - -```xml -true -``` - - -## dictionary_background_reconnect_interval {#dictionary_background_reconnect_interval} - -`background_reconnect` が有効になっている、接続に失敗した MySQL および Postgres 辞書に対して行う再接続試行の間隔(ミリ秒単位)。 - - - -## disable_insertion_and_mutation {#disable_insertion_and_mutation} - - -`INSERT`/`ALTER`/`DELETE` クエリを無効化します。読み取り専用ノードが必要で、挿入やミューテーションが読み取りパフォーマンスに影響するのを防ぎたい場合に、この設定を有効化します。この設定が有効な場合でも、外部エンジン(S3、DataLake、MySQL、PostgreSQL、Kafka など)への `INSERT` は許可されます。 - - - - -## disable_internal_dns_cache {#disable_internal_dns_cache} - -内部 DNS キャッシュを無効にします。Kubernetes など、インフラが頻繁に変化するシステムで ClickHouse を運用する場合に推奨されます。 - - - -## disable_tunneling_for_https_requests_over_http_proxy - -デフォルトでは、`HTTP` プロキシ経由で `HTTPS` リクエストを送信する際、トンネリング(つまり `HTTP CONNECT`)が使用されます。この設定でトンネリングを無効化できます。 - -**no_proxy** - -デフォルトでは、すべてのリクエストがプロキシを経由します。特定のホストに対してプロキシ経由を無効化するには、`no_proxy` 変数を設定する必要があります。 -これは、list resolver と remote resolver では `` 句の中で、environment resolver では環境変数として設定できます。 -IP アドレス、ドメイン、サブドメインに加え、完全にバイパスするためのワイルドカード `'*'` をサポートします。curl と同様に、先頭のドットは取り除かれます。 - -**Example** - -次の設定では、`clickhouse.cloud` およびそのすべてのサブドメイン(例: `auth.clickhouse.cloud`)へのリクエストはプロキシを経由しません。 -GitLab に対しても同様で、先頭にドットが付いていても同じ挙動になります。`gitlab.com` と `about.gitlab.com` の両方がプロキシをバイパスします。 - -```xml - - clickhouse.cloud,.gitlab.com - - http://proxy1 - http://proxy2:3128 - - - http://proxy1:3128 - - -``` - - -## disk_connections_soft_limit {#disk_connections_soft_limit} - -この制限を超える接続は、保持期間が大幅に短くなります。この制限はディスクへの接続に適用されます。 - - - -## disk_connections_store_limit {#disk_connections_store_limit} - -この上限を超えると、使用後に接続はリセットされます。接続キャッシュを無効にするには 0 を設定します。この上限はディスク接続に適用されます。 - - - -## disk_connections_warn_limit {#disk_connections_warn_limit} - -使用中の接続数がこの制限を超えると、警告メッセージがログに書き込まれます。この制限はディスクへの接続に適用されます。 - - - -## display_secrets_in_show_and_select {#display_secrets_in_show_and_select} - - -テーブル、データベース、テーブル関数、およびディクショナリに対する `SHOW` および `SELECT` クエリでシークレットを表示するかどうかを切り替えます。 - -シークレットを表示したいユーザーは、 -[`format_display_secrets_in_show_and_select` フォーマット設定](../settings/formats#format_display_secrets_in_show_and_select) -を有効にし、 -[`displaySecretsInShowAndSelect`](/sql-reference/statements/grant#displaysecretsinshowandselect) 権限 -を付与されている必要があります。 - -設定可能な値: - -- `0` — 無効。 -- `1` — 有効。 - - - - -## distributed_cache_apply_throttling_settings_from_client {#distributed_cache_apply_throttling_settings_from_client} - -キャッシュサーバーがクライアントから受信したスロットリング設定を適用するかどうか。 - - - -## distributed_cache_keep_up_free_connections_ratio {#distributed_cache_keep_up_free_connections_ratio} - -分散キャッシュが空き状態として確保しておこうとするアクティブ接続数のソフトリミットです。空き接続数が distributed_cache_keep_up_free_connections_ratio * max_connections を下回ると、空き接続数がこの閾値を上回るまで、最後にアクティビティが発生してからの経過時間が最も長い接続から順に閉じられます。 - - - -## distributed_ddl - -クラスタ上で [分散 DDL クエリ](../../sql-reference/distributed-ddl.md)(`CREATE`、`DROP`、`ALTER`、`RENAME`)の実行を管理します。 -[ZooKeeper](/operations/server-configuration-parameters/settings#zookeeper) が有効化されている場合にのみ機能します。 - -`` 内で設定可能な項目は次のとおりです。 - -| Setting | Description | Default Value | -| ---------------------- | ----------------------------------------------------------------------------------- | ----------------------------- | -| `path` | DDL クエリ用の `task_queue` に対応する Keeper 上のパス | | -| `profile` | DDL クエリの実行に使用されるプロファイル | | -| `pool_size` | 同時に実行できる `ON CLUSTER` クエリの数 | | -| `max_tasks_in_queue` | キュー内に保持できるタスクの最大数 | `1,000` | -| `task_max_lifetime` | ノードの存続時間がこの値を超えた場合に、そのノードを削除します。 | `7 * 24 * 60 * 60`(秒換算で 1 週間) | -| `cleanup_delay_period` | 直近のクリーンアップが `cleanup_delay_period` 秒よりも前に実行されている場合に、新しいノードイベントを受信した後でクリーンアップを開始します。 | `60` 秒 | - -**例** - -```xml - - - /clickhouse/task_queue/ddl - - - default - - - 1 - - - - - 604800 - - - 60 - - - 1000 - -``` - - -## distributed_ddl_use_initial_user_and_roles {#distributed_ddl_use_initial_user_and_roles} - -有効にすると、ON CLUSTER クエリはリモートシャード上での実行時に、実行元のユーザーおよびロールを保持して使用します。これによりクラスタ全体で一貫したアクセス制御が実現されますが、そのユーザーおよびロールがすべてのノードに存在している必要があります。 - - - -## dns_allow_resolve_names_to_ipv4 {#dns_allow_resolve_names_to_ipv4} - -ホスト名を IPv4 アドレスに解決することを許可します。 - - - -## dns_allow_resolve_names_to_ipv6 {#dns_allow_resolve_names_to_ipv6} - -IPv6 アドレスへの名前解決を許可します。 - - - -## dns_cache_max_entries {#dns_cache_max_entries} - -内部 DNS キャッシュに格納されるエントリの最大数。 - - - -## dns_cache_update_period {#dns_cache_update_period} - -内部 DNS キャッシュの更新間隔(秒)。 - - - -## dns_max_consecutive_failures {#dns_max_consecutive_failures} - -あるホスト名が ClickHouse の DNS キャッシュから削除されるまでに許容される DNS 解決失敗の最大回数。 - - - -## drop_distributed_cache_pool_size {#drop_distributed_cache_pool_size} - -分散キャッシュを削除する際に使用されるスレッドプールのサイズ。 - - - -## drop_distributed_cache_queue_size {#drop_distributed_cache_queue_size} - -分散キャッシュの削除に使用されるスレッドプールのキューサイズ。 - - - -## enable_azure_sdk_logging {#enable_azure_sdk_logging} - -Azure SDK からのログ出力を有効にします - - - -## encryption - -[encryption codecs](/sql-reference/statements/create/table#encryption-codecs) で使用するキーを取得するためのコマンドを構成します。キー(複数可)は環境変数で指定するか、設定ファイルで設定する必要があります。 - -キーは長さ 16 バイトの 16 進数値または文字列でなければなりません。 - -**例** - -設定ファイルから読み込む場合: - -```xml - - - 1234567812345678 - - -``` - -:::note -キーを設定ファイルに保存することは推奨されません。安全ではないためです。キーは安全なディスク上の別の設定ファイルに移動し、その設定ファイルへのシンボリックリンクを `config.d/` フォルダに配置できます。 -::: - -キーが16進数表現である場合の、設定ファイルからの読み込み: - -```xml - - - 00112233445566778899aabbccddeeff - - -``` - -環境変数からキーを読み込む: - -```xml - - - - - -``` - -ここでは `current_key_id` で暗号化に使用する現在のキーを指定し、指定したすべてのキーを復号に使用できます。 - -これらの各手法は、複数のキーに対して適用できます。 - -```xml - - - 00112233445566778899aabbccddeeff - - 1 - - -``` - -ここで `current_key_id` は、暗号化に使用されている現在のキーを示します。 - -また、ユーザーは長さ 12 バイトの nonce を追加できます(デフォルトでは、暗号化および復号処理では、すべてゼロバイトの nonce が使用されます): - -```xml - - - 012345678910 - - -``` - -または 16進数で指定できます: - -```xml - - - abcdefabcdef - - -``` - -:::note -上記で説明した内容は、`aes_256_gcm_siv` にもすべて適用できます(ただしキーは 32 バイトである必要があります)。 -::: - - -## error_log - -デフォルトでは無効になっています。 - -**有効化** - -エラー履歴の収集 [`system.error_log`](../../operations/system-tables/error_log.md) を手動で有効にするには、次の内容で `/etc/clickhouse-server/config.d/error_log.xml` を作成します。 - -```xml - - - system - error_log
- 7500 - 1000 - 1048576 - 8192 - 524288 - false -
-
-``` - -**無効化** - -`error_log` 設定を無効化するには、次の内容で `/etc/clickhouse-server/config.d/disable_error_log.xml` ファイルを作成します。 - -```xml - - - -``` - - - - -## format_parsing_thread_pool_queue_size {#format_parsing_thread_pool_queue_size} - - -入力のパース用スレッドプールにスケジュールできるジョブの最大数。 - -:::note -`0` の値は無制限を意味します。 -::: - - - - -## format_schema_path - -[CapnProto](/interfaces/formats/CapnProto) フォーマットなどの入力データ用スキーマファイルを含むディレクトリへのパスです。 - -**例** - -```xml - -format_schemas/ -``` - - -## global_profiler_cpu_time_period_ns {#global_profiler_cpu_time_period_ns} - -グローバルプロファイラにおける CPU クロックタイマーの周期(ナノ秒単位)です。CPU クロックグローバルプロファイラを無効にするには、値 0 を設定します。推奨値は、単一クエリのプロファイリングには少なくとも 10000000(1 秒間に 100 回)、クラスタ全体のプロファイリングには 1000000000(1 秒に 1 回)です。 - - - -## global_profiler_real_time_period_ns {#global_profiler_real_time_period_ns} - -グローバルプロファイラの実時間クロックタイマーの周期(ナノ秒単位)。実時間グローバルプロファイラを無効にするには、値を 0 に設定します。推奨値は、単一クエリの場合は少なくとも 10000000(1 秒あたり 100 回)、クラスタ全体のプロファイリングの場合は 1000000000(1 秒に 1 回)です。 - - - -## google_protos_path - -Protobuf 型の proto ファイルを含むディレクトリを指定します。 - -例: - -```xml -/usr/share/clickhouse/protos/ -``` - - -## graphite - -[Graphite](https://github.com/graphite-project) へデータを送信します。 - -設定: - -* `host` – Graphite サーバー。 -* `port` – Graphite サーバーのポート。 -* `interval` – 送信間隔(秒)。 -* `timeout` – データ送信のタイムアウト(秒)。 -* `root_path` – キーのプレフィックス。 -* `metrics` – [system.metrics](/operations/system-tables/metrics) テーブルからデータを送信。 -* `events` – [system.events](/operations/system-tables/events) テーブルから、指定期間に蓄積された差分データを送信。 -* `events_cumulative` – [system.events](/operations/system-tables/events) テーブルから累積データを送信。 -* `asynchronous_metrics` – [system.asynchronous_metrics](/operations/system-tables/asynchronous_metrics) テーブルからデータを送信。 - -複数の `` 句を設定できます。たとえば、異なるデータを異なる間隔で送信する用途に利用できます。 - -**例** - -```xml - - localhost - 42000 - 0.1 - 60 - one_min - true - true - false - true - -``` - - -## graphite_rollup - -Graphite のデータを間引くための設定です。 - -詳細については、[GraphiteMergeTree](../../engines/table-engines/mergetree-family/graphitemergetree.md) を参照してください。 - -**例** - -```xml - - - max - - 0 - 60 - - - 3600 - 300 - - - 86400 - 3600 - - - -``` - - -## hsts_max_age - -HSTS の有効期限を秒単位で指定します。 - -:::note -`0` を指定すると、ClickHouse は HSTS を無効化します。正の数値を設定すると HSTS が有効化され、max-age は設定した数値になります。 -::: - -**例** - -```xml -600000 -``` - - -## http_connections_soft_limit {#http_connections_soft_limit} - -この制限を超えた接続は、有効期間が大幅に短くなります。この制限は、いずれのディスクやストレージにも属さない HTTP 接続に適用されます。 - - - -## http_connections_store_limit {#http_connections_store_limit} - -この制限を超えた接続は、使用後にリセットされます。接続キャッシュを無効にするには 0 を設定します。この制限は、いずれのディスクやストレージにも紐づけられていない HTTP 接続に適用されます。 - - - -## http_connections_warn_limit {#http_connections_warn_limit} - -使用中の接続数がこの制限値を超えた場合、警告メッセージがログに書き込まれます。この制限は、ディスクやストレージのいずれにも属さない HTTP 接続に適用されます。 - - - -## http_handlers - -カスタム HTTP ハンドラーを使用できるようにします。 -新しい HTTP ハンドラーを追加するには、新しい `` を追加するだけです。 -ルールは定義された順に上からチェックされ、 -最初にマッチしたもののハンドラーが実行されます。 - -以下の設定はサブタグによって構成できます: - -| Sub-tags | Definition | -| -------------------- | ----------------------------------------------------------------------------------------------- | -| `url` | リクエスト URL にマッチさせます。正規表現マッチを使用するには、プレフィックスとして 'regex:' を付与します(任意) | -| `methods` | リクエストメソッドにマッチさせます。複数のメソッドを指定する場合はカンマ区切りで指定します(任意) | -| `headers` | リクエストヘッダーにマッチさせます。各子要素(子要素名がヘッダー名)ごとにマッチさせ、正規表現マッチを使用するにはプレフィックスとして 'regex:' を付与します(任意) | -| `handler` | リクエストハンドラー | -| `empty_query_string` | URL にクエリ文字列が存在しないことをチェックします | - -`handler` には以下の設定が含まれており、サブタグによって構成できます: - -| Sub-tags | Definition | -| ------------------ | -------------------------------------------------------------------------------------------------------------------------------------- | -| `url` | リダイレクト先の場所 | -| `type` | サポートされるタイプ: static, dynamic_query_handler, predefined_query_handler, redirect | -| `status` | static タイプと併用し、レスポンスのステータスコードを指定します | -| `query_param_name` | dynamic_query_handler タイプと併用し、HTTP リクエストパラメータから `` に対応する値を抽出して実行します | -| `query` | predefined_query_handler タイプと併用し、ハンドラーが呼び出されたときにクエリを実行します | -| `content_type` | static タイプと併用し、レスポンスの Content-Type を指定します | -| `response_content` | static タイプと併用し、クライアントに送信するレスポンスコンテンツを指定します。プレフィックスに 'file://' または 'config://' を使用すると、ファイルまたは設定からコンテンツを取得してクライアントに送信します | - -ルールの一覧に加えて、すべてのデフォルトハンドラーを有効にする `` を指定できます。 - -例: - -```xml - - - / - POST,GET - no-cache - - dynamic_query_handler - query - - - - - /predefined_query - POST,GET - - predefined_query_handler - SELECT * FROM system.settings - - - - - - static - 200 - text/plain; charset=UTF-8 - config://http_server_default_response - - - -``` - - -## http_options_response - -`OPTIONS` HTTP リクエストのレスポンスにヘッダーを追加するために使用します。 -`OPTIONS` メソッドは、CORS プリフライト リクエストを行う際に使用されます。 - -詳細については、[OPTIONS](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/OPTIONS) を参照してください。 - -例: - -```xml - -
- Access-Control-Allow-Origin - * -
-
- Access-Control-Allow-Headers - origin, x-requested-with, x-clickhouse-format, x-clickhouse-user, x-clickhouse-key, Authorization -
-
- Access-Control-Allow-Methods - POST, GET, OPTIONS -
-
- Access-Control-Max-Age - 86400 -
-
-``` - - -## http_server_default_response - -ClickHouse の HTTP(S) サーバーにアクセスしたときに、デフォルトで表示されるページです。 -デフォルト値は "Ok."(末尾に改行(LF)付き)です。 - -**例** - -`http://localhost: http_port` にアクセスしたときに `https://tabix.io/` が開きます。 - -```xml - -
]]> -
-``` - - -## iceberg_catalog_threadpool_pool_size {#iceberg_catalog_threadpool_pool_size} - -Iceberg カタログ用バックグラウンドスレッドプールのサイズ - - - -## iceberg_catalog_threadpool_queue_size {#iceberg_catalog_threadpool_queue_size} - -Iceberg カタログプールに投入可能なタスクの最大数 - - - -## iceberg_metadata_files_cache_max_entries {#iceberg_metadata_files_cache_max_entries} - -iceberg メタデータファイルキャッシュの最大エントリ数。0 の場合は無効になります。 - - - -## iceberg_metadata_files_cache_policy {#iceberg_metadata_files_cache_policy} - -Iceberg メタデータファイルのキャッシュポリシー名。 - - - -## iceberg_metadata_files_cache_size {#iceberg_metadata_files_cache_size} - -Iceberg メタデータキャッシュの最大サイズ(バイト単位)。0 を指定すると無効になります。 - - - -## iceberg_metadata_files_cache_size_ratio {#iceberg_metadata_files_cache_size_ratio} - -SLRU ポリシーの場合、iceberg メタデータキャッシュにおける保護キューのサイズがキャッシュ全体サイズに対して占める割合。 - - - -## ignore_empty_sql_security_in_create_view_query {#ignore_empty_sql_security_in_create_view_query} - - -true の場合、ClickHouse は `CREATE VIEW` クエリ内で空の SQL security ステートメントに対するデフォルト値を記録しません。 - -:::note -この設定は移行期間中にのみ必要であり、24.4 で廃止される予定です。 -::: - - - - -## include_from - -置換定義を含むファイルへのパスです。XML 形式と YAML 形式の両方がサポートされています。 - -詳細については、「[設定ファイル](/operations/configuration-files)」セクションを参照してください。 - -**例** - -```xml -/etc/metrica.xml -``` - - -## index_mark_cache_policy {#index_mark_cache_policy} - -セカンダリインデックスのマークキャッシュポリシー名。 - - - -## index_mark_cache_size {#index_mark_cache_size} - - -インデックスマーク用キャッシュの最大サイズ。 - -:::note - -`0` を指定すると無効になります。 - -この設定は実行時に変更でき、即座に反映されます。 -::: - - - - -## index_mark_cache_size_ratio {#index_mark_cache_size_ratio} - -セカンダリインデックスマークキャッシュにおける保護キュー(SLRU ポリシーの場合)のサイズを、キャッシュ全体に対する比率で指定します。 - - - -## セカンダリインデックス非圧縮キャッシュポリシー {#index_uncompressed_cache_policy} - -セカンダリインデックスの非圧縮キャッシュ用のポリシー名。 - - - -## index_uncompressed_cache_size {#index_uncompressed_cache_size} - - -圧縮されていない `MergeTree` インデックスブロック用キャッシュの最大サイズです。 - -:::note -値が `0` の場合は無効になります。 - -この設定は実行時に変更でき、変更は直ちに反映されます。 -::: - - - - -## index_uncompressed_cache_size_ratio {#index_uncompressed_cache_size_ratio} - -セカンダリインデックスの非圧縮キャッシュにおける保護キュー(SLRU ポリシーの場合)のサイズを、そのキャッシュの総サイズに対する比率で指定します。 - - - -## interserver_http_credentials - -[レプリケーション](../../engines/table-engines/mergetree-family/replication.md)時に他のサーバーへ接続する際に使用されるユーザー名とパスワードです。加えて、サーバーはこれらの認証情報を用いて他のレプリカを認証します。 -そのため、`interserver_http_credentials` はクラスター内のすべてのレプリカで同一である必要があります。 - -:::note - -* 既定では、`interserver_http_credentials` セクションを省略した場合、レプリケーション時に認証は使用されません。 -* `interserver_http_credentials` の設定は、ClickHouse クライアント認証情報の[設定](../../interfaces/cli.md#configuration_files)とは関係ありません。 -* これらの認証情報は、`HTTP` および `HTTPS` によるレプリケーションで共通です。 - ::: - -次の設定はサブタグで指定できます。 - -* `user` — ユーザー名。 -* `password` — パスワード。 -* `allow_empty` — `true` の場合、認証情報が設定されていても、他のレプリカが認証なしで接続することを許可します。`false` の場合、認証なしの接続は拒否されます。既定値: `false`。 -* `old` — 認証情報ローテーション時に使用されていた古い `user` と `password` を含みます。複数の `old` セクションを指定できます。 - -**認証情報のローテーション** - -ClickHouse は、すべてのレプリカを同時に停止して設定を更新することなく、インターサーバー認証情報の動的なローテーションをサポートします。認証情報は複数のステップで変更できます。 - -認証を有効にするには、`interserver_http_credentials.allow_empty` を `true` に設定し、認証情報を追加します。これにより、認証ありおよび認証なしの両方の接続が許可されます。 - -```xml - - admin - 111 - true - -``` - -すべてのレプリカの設定が完了したら、`allow_empty` を `false` に設定するか、この設定を削除してください。これにより、新しい認証情報での認証が必須になります。 - -既存の認証情報を変更するには、ユーザー名とパスワードを `interserver_http_credentials.old` セクションに移動し、`user` と `password` を新しい値に更新します。この時点で、サーバーは他のレプリカへの接続には新しい認証情報を使用し、接続の受け入れ時には新旧どちらの認証情報も受け付けます。 - -```xml - - admin - 222 - - admin - 111 - - - temp - 000 - - -``` - -新しい資格情報がすべてのレプリカに適用されたら、古い資格情報は削除できます。 - - -## interserver_http_host - -他のサーバーがこのサーバーへアクセスする際に使用するホスト名です。 - -省略した場合は、`hostname -f` コマンドと同様に決定されます。 - -特定のネットワークインターフェイスに依存しないようにする場合に便利です。 - -**例** - -```xml -example.clickhouse.com -``` - - -## interserver_http_port - -ClickHouse サーバー間でデータを交換するためのポート。 - -**例** - -```xml -9009 -``` - - -## interserver_https_host - -[`interserver_http_host`](#interserver_http_host) と同様ですが、このホスト名は、他のサーバーが `HTTPS` 経由でこのサーバーにアクセスするために使用されます。 - -**例** - -```xml -example.clickhouse.com -``` - - -## interserver_https_port - -`HTTPS` 経由で ClickHouse サーバー間のデータを交換するためのポート。 - -**例** - -```xml -9010 -``` - - -## interserver_listen_host - -ClickHouse サーバー間でデータを交換できるホストを制限します。 -Keeper を使用している場合は、異なる Keeper インスタンス間の通信にも同じ制限が適用されます。 - -:::note -デフォルトでは、この値は [`listen_host`](#listen_host) 設定と同じです。 -::: - -**例** - -```xml -::ffff:a00:1 -10.0.0.1 -``` - -型: - -デフォルト: - - -## io_thread_pool_queue_size {#io_thread_pool_queue_size} - - -IO スレッドプールにスケジュールできるジョブ数の最大値。 - -:::note -値が `0` の場合は無制限を意味します。 -::: - - - - -## jemalloc_collect_global_profile_samples_in_trace_log {#jemalloc_collect_global_profile_samples_in_trace_log} - -jemalloc によるサンプリング済みのアロケーションを system.trace_log に保存する - - - -## jemalloc_enable_background_threads {#jemalloc_enable_background_threads} - -jemalloc のバックグラウンドスレッドを有効にします。jemalloc はバックグラウンドスレッドを使って未使用のメモリページをクリーンアップします。これを無効にすると、パフォーマンスが低下する可能性があります。 - - - -## jemalloc_enable_global_profiler {#jemalloc_enable_global_profiler} - -すべてのスレッドで jemalloc のアロケーションプロファイラを有効にします。jemalloc はアロケーションをサンプリングし、サンプリングされたアロケーションに対するすべての解放を追跡します。 -プロファイルは、アロケーション解析に使用できる `SYSTEM JEMALLOC FLUSH PROFILE` を用いてフラッシュできます。 -サンプルは、設定 `jemalloc_collect_global_profile_samples_in_trace_log` またはクエリ設定 `jemalloc_collect_profile_samples_in_trace_log` を使用して `system.trace_log` に保存することもできます。 -[Allocation Profiling](/operations/allocation-profiling) を参照してください。 - - - -## jemalloc_flush_profile_interval_bytes {#jemalloc_flush_profile_interval_bytes} - -グローバルなピークメモリ使用量が jemalloc_flush_profile_interval_bytes バイト増加するたびに、jemalloc プロファイルがフラッシュされます - - - -## jemalloc_flush_profile_on_memory_exceeded {#jemalloc_flush_profile_on_memory_exceeded} - -総メモリ超過エラー発生時に jemalloc プロファイルのフラッシュが行われます - - - -## jemalloc_max_background_threads_num {#jemalloc_max_background_threads_num} - -作成する jemalloc バックグラウンドスレッドの最大数です。0 に設定すると jemalloc のデフォルト値を使用します - - - -## keep_alive_timeout - - - -HTTP プロトコルで、ClickHouse が接続を閉じる前に受信リクエストを待機する秒数です。 - -**例** - -```xml -10 -``` - - -## keeper_hosts {#keeper_hosts} - -動的な設定です。ClickHouse が接続候補とする [Zoo]Keeper ホストの集合を含みます。`` の情報は含まれません。 - - - -## keeper_multiread_batch_size {#keeper_multiread_batch_size} - - -バッチ処理をサポートしている [Zoo]Keeper への MultiRead リクエストにおけるバッチの最大サイズ。0 に設定した場合、バッチ処理は無効になります。ClickHouse Cloud でのみ利用可能です。 - - - - -## ldap_servers {#ldap_servers} - -接続パラメータ付きで LDAP サーバーをここに列挙します。これにより、次のことが可能になります: -- `password` の代わりに `ldap` 認証メカニズムが指定された専用のローカルユーザーの認証手段として使用する -- リモートユーザーディレクトリとして使用する - -次の設定はサブタグで構成できます: - -| Setting | Description | -|--------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `host` | LDAP サーバーのホスト名または IP。必須パラメータであり、空にはできません。 | -| `port` | LDAP サーバーポート。`enable_tls` が true の場合のデフォルトは 636、それ以外の場合は `389` です。 | -| `bind_dn` | バインドする DN を構築するために使用されるテンプレート。最終的な DN は、各認証試行時にテンプレート中のすべての `\{user_name\}` 部分文字列を実際のユーザー名で置き換えることによって構築されます。 | -| `user_dn_detection` | バインドされたユーザーの実際のユーザー DN を検出するための LDAP 検索パラメータを含むセクション。これは主に、サーバーが Active Directory の場合のロールマッピングに用いる検索フィルターで使用されます。結果として得られるユーザー DN は、許可されている場所で `\{user_dn\}` 部分文字列を置き換える際に使用されます。デフォルトではユーザー DN は bind DN と同一に設定されますが、一度検索が実行されると、検出された実際のユーザー DN の値に更新されます。 | -| `verification_cooldown` | 正常にバインドが行われた後、その後のすべてのリクエストに対して LDAP サーバーへ接続することなく、ユーザーが認証済みであるとみなされる秒数。キャッシュを無効にし、各認証リクエストごとに LDAP サーバーへの接続を強制するには、`0`(デフォルト)を指定します。 | -| `enable_tls` | LDAP サーバーへの安全な接続の使用を有効にするフラグ。プレーンテキストの (`ldap://`) プロトコル(非推奨)を使用するには `no` を指定します。SSL/TLS 上の LDAP (`ldaps://`) プロトコル(推奨、デフォルト)を使用するには `yes` を指定します。レガシーな StartTLS プロトコル(プレーンテキスト (`ldap://`) プロトコルから TLS へアップグレード)を使用するには `starttls` を指定します。 | -| `tls_minimum_protocol_version` | SSL/TLS の最小プロトコルバージョン。指定可能な値は: `ssl2`, `ssl3`, `tls1.0`, `tls1.1`, `tls1.2`(デフォルト)。 | -| `tls_require_cert` | SSL/TLS ピア証明書の検証動作。指定可能な値は: `never`, `allow`, `try`, `demand`(デフォルト)。 | -| `tls_cert_file` | 証明書ファイルへのパス。 | -| `tls_key_file` | 証明書鍵ファイルへのパス。 | -| `tls_ca_cert_file` | CA 証明書ファイルへのパス。 | -| `tls_ca_cert_dir` | CA 証明書を含むディレクトリへのパス。 | -| `tls_cipher_suite` | 許可される暗号スイート(OpenSSL 表記)。 | - -`user_dn_detection` 設定はサブタグで構成できます: - -| Setting | Description | -|-----------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `base_dn` | LDAP 検索用のベース DN を構築するために使用されるテンプレート。最終的な DN は、LDAP 検索中にテンプレート中のすべての `\{user_name\}` および `\{bind_dn\}` 部分文字列を、実際のユーザー名および bind DN で置き換えることによって構築されます。 | -| `scope` | LDAP 検索のスコープ。指定可能な値は: `base`, `one_level`, `children`, `subtree`(デフォルト)。 | -| `search_filter` | LDAP 検索用の検索フィルターを構築するために使用されるテンプレート。最終的なフィルターは、LDAP 検索中にテンプレート中のすべての `\{user_name\}`, `\{bind_dn\}`, `\{base_dn\}` 部分文字列を、実際のユーザー名、bind DN、および base DN で置き換えることによって構築されます。特別な文字は XML 内で適切にエスケープされている必要がある点に注意してください。 | - -Example: - - - -```xml - - localhost - 636 - uid={user_name},ou=users,dc=example,dc=com - 300 - yes - tls1.2 - demand - /path/to/tls_cert_file - /path/to/tls_key_file - /path/to/tls_ca_cert_file - /path/to/tls_ca_cert_dir - ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:AES256-GCM-SHA384 - -``` - -例(以降のロールマッピングのためにユーザー DN 検出を設定した典型的な Active Directory): - -```xml - - localhost - 389 - EXAMPLE\{user_name} - - CN=Users,DC=example,DC=com - (&(objectClass=user)(sAMAccountName={user_name})) - - no - -``` - - -## license_key {#license_key} - -ClickHouse Enterprise Edition のライセンスキー - - - -## listen_backlog - -listen ソケットのバックログ(保留中接続のキューサイズ)。デフォルト値の `4096` は Linux [5.4+](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=19f92a030ca6d772ab44b22ee6a01378a8cb32d4)) と同じです。 - -通常、この値を変更する必要はありません。理由は次のとおりです。 - -* デフォルト値が十分に大きいこと、 -* クライアントからの接続を受け付ける処理はサーバーの別スレッドで行われること。 - -そのため、`nstat` の `TcpExtListenOverflows` が 0 以外で、このカウンタが ClickHouse サーバーに対して増加していたとしても、必ずしもこの値を増やす必要があることを意味しません。理由は次のとおりです。 - -* 通常、`4096` で足りない場合は ClickHouse の内部スケーリングの問題を示しているため、issue として報告した方がよいです。 -* それはサーバーが後からより多くの接続を処理できることを意味しません(仮に処理できたとしても、その時点ではクライアントがすでにいない、あるいは切断されている可能性があります)。 - -**例** - -```xml -4096 -``` - - -## listen_host - -リクエストを受け付けるホストを制限する設定です。すべてのホストからのリクエストにサーバーで応答させたい場合は、`::` を指定します。 - -例: - -```xml -::1 -127.0.0.1 -``` - - -## listen_reuse_port - -同一のアドレスとポート番号で複数のサーバーが待ち受けできるようにします。リクエストはオペレーティングシステムによってランダムに選ばれたサーバーへルーティングされます。この設定を有効化することは推奨されません。 - -**例** - -```xml -0 -``` - -型: - -デフォルト: - - -## listen_try - -サーバーは、リッスンを試みている際に IPv6 または IPv4 ネットワークが利用できなくても終了しません。 - -**例** - -```xml -0 -``` - - -## load_marks_threadpool_pool_size {#load_marks_threadpool_pool_size} - -マーク読み込み用のバックグラウンドプールのサイズ - - - -## load_marks_threadpool_queue_size {#load_marks_threadpool_queue_size} - -プリフェッチプールに投入可能なタスクの最大数 - - - -## logger {#logger} - -ログメッセージの出力場所とフォーマットを設定します。 - -**キー**: - -| Key | Description | -|------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `level` | ログレベル。指定可能な値: `none` (ログ出力を無効化)、`fatal`, `critical`, `error`, `warning`, `notice`, `information`,`debug`, `trace`, `test` | -| `log` | ログファイルへのパス。 | -| `errorlog` | エラーログファイルへのパス。 | -| `size` | ローテーションポリシー: ログファイルの最大サイズ (バイト単位)。ログファイルサイズがこのしきい値を超えると、名前が変更されてアーカイブされ、新しいログファイルが作成されます。 | -| `count` | ローテーションポリシー: ClickHouse で保持される履歴ログファイルの最大数。 | -| `stream_compress` | LZ4 を使用してログメッセージを圧縮します。有効にするには `1` または `true` を設定します。 | -| `console` | コンソールへのログ出力を有効にします。有効にするには `1` または `true` を設定します。ClickHouse がデーモンモードで動作していない場合のデフォルトは `1`、それ以外は `0` です。 | -| `console_log_level` | コンソール出力用のログレベル。デフォルトは `level` の値です。 | -| `formatting.type` | コンソール出力のログフォーマット。現在は `json` のみサポートされています。 | -| `use_syslog` | ログ出力を syslog にも転送します。 | -| `syslog_level` | syslog へのログ出力時のログレベル。 | -| `async` | `true` (デフォルト) の場合、ログは非同期に出力されます (出力チャネルごとに 1 本のバックグラウンドスレッド)。それ以外の場合は、LOG を呼び出したスレッド内でログを出力します。 | -| `async_queue_max_size` | 非同期ログ出力を使用する場合、書き出し待ちキューに保持されるメッセージ数の最大値。超過したメッセージは破棄されます。 | -| `startup_level` | サーバー起動時にルートロガーのレベルを設定するために使用される起動レベル。起動後はログレベルが `level` 設定値に戻されます。 | -| `shutdown_level` | サーバーのシャットダウン時にルートロガーのレベルを設定するために使用されるシャットダウンレベル。 | - -**ログフォーマット指定子** - -`log` および `errorLog` パス内のファイル名では、生成されるファイル名に対して以下の書式指定子を使用できます (ディレクトリ部分では使用できません)。 - -「Example」列は、`2023-07-06 18:32:07` 時点での出力例を示します。 - - - -| 指定子 | 概要 | 例 | -| ---- | ---------------------------------------------------------------------------------------------------------------------- | ----------------------- | -| `%%` | リテラルの % 文字 | `%` | -| `%n` | 改行文字 | | -| `%t` | 水平タブ文字 | | -| `%Y` | 年を10進数で表した値(例: 2017) | `2023` | -| `%y` | 年の下2桁を10進数で表した値(範囲 [00,99]) | `23` | -| `%C` | 年を10進数で表したときの先頭2桁(範囲 [00,99]) | `20` | -| `%G` | 4桁の[ISO 8601 週番号ベースの年](https://en.wikipedia.org/wiki/ISO_8601#Week_dates)、つまり指定された週を含む年。通常は `%V` と組み合わせて使用する場合にのみ意味がある | `2023` | -| `%g` | [ISO 8601 週基準年](https://en.wikipedia.org/wiki/ISO_8601#Week_dates)の末尾2桁(指定された週を含む年)。 | `23` | -| `%b` | 省略された月名。例: Oct(ロケールに依存) | `Jul` | -| `%h` | %b の同義語 | `7月` | -| `%B` | 月名をフルスペルで表示(例: October。ロケールに依存) | `7月` | -| `%m` | 月を 10 進数で表した値(範囲 [01,12]) | `07` | -| `%U` | 年内の週番号(10進数)(週の始まりは日曜日)(範囲 [00,53]) | `27` | -| `%W` | 年内の週番号を10進数で表したもの(週の始まりは月曜日)(範囲 [00,53]) | `27` | -| `%V` | ISO 8601 の週番号(範囲 [01,53]) | `27` | -| `%j` | 年内通算日を 10 進数の 3 桁で表した値(範囲 [001,366]) | `187` | -| `%d` | 月の日付をゼロ埋めした 10 進数で表したもの(範囲 [01,31])。1 桁の値は先頭にゼロを付けます。 | `06` | -| `%e` | 月内の日を、先頭にスペースを入れた10進数で表します(範囲 [1,31])。1桁の場合は先頭にスペースが付きます。 | `  6` | -| `%a` | 省略形の曜日名。例: Fri(ロケールに依存) | `木` | -| `%A` | 曜日名のフルスペル。例: Friday(ロケール依存) | `木曜日` | -| `%w` | 曜日を表す整数値。日曜日を0とする(範囲 [0-6]) | `4` | -| `%u` | 曜日を表す10進数。月曜日を1とする(ISO 8601 形式)(範囲 [1-7]) | `4` | -| `%H` | 24 時間制における時を 10 進数で表現(範囲 [00-23]) | `18` | -| `%I` | 12 時間制における 10 進数表記の時(範囲 [01,12]) | `06` | -| `%M` | 分(10 進数、範囲 [00,59]) | `32` | -| `%S` | 秒を表す10進数(範囲 [00,60]) | `07` | -| `%c` | 標準的な日付と時刻の文字列表現。例: Sun Oct 17 04:41:13 2010(ロケールに依存) | `2023年7月6日(木) 18:32:07` | -| `%x` | ロケールに応じた日付表現(ロケール依存) | `2023/07/06` | -| `%X` | ローカライズされた時刻表記(例:18:40:20 や 6:40:20 PM、ロケールに依存) | `18:32:07` | -| `%D` | 短い MM/DD/YY 形式の日付(%m/%d/%y と同等)。 | `2023/07/06` | -| `%F` | 短い YYYY-MM-DD 形式の日付。%Y-%m-%d と同等です。 | `2023-07-06` | -| `%r` | ロケールに応じた12時間制の時刻表記 | `06:32:07 PM` | -| `%R` | 「%H:%M」と同等です | `18:32` | -| `%T` | "%H:%M:%S"(ISO 8601 の時刻形式)と同等 | `18:32:07` | -| `%p` | ローカライズされた午前/午後(a.m./p.m.)の表記(ロケール依存) | `PM` | -| `%z` | UTC からのオフセットを ISO 8601 形式で表したもの(例: -0430)、タイムゾーン情報が利用できない場合は空文字 | `+0800` | -| `%Z` | ロケール依存のタイムゾーン名または略称。タイムゾーン情報が利用できない場合は何も出力されません | `Z AWST ` | - -**例** - -```xml - - trace - /var/log/clickhouse-server/clickhouse-server-%F-%T.log - /var/log/clickhouse-server/clickhouse-server-%F-%T.err.log - 1000M - 10 - true - -``` - -ログメッセージをコンソールのみに出力するには: - -```xml - - information - true - -``` - -**レベルごとのオーバーライド** - -個々のログ名ごとにログレベルをオーバーライドできます。たとえば、ロガー「Backup」と「RBAC」のすべてのメッセージを出力しないようにするには、次のようにします。 - -```xml - - - - Backup - none - - - RBAC - none - - - -``` - -**syslog** - -ログメッセージを `syslog` にも出力するには、次のように設定します。 - -```xml - - 1 - -
syslog.remote:10514
- myhost.local - LOG_LOCAL6 - syslog -
-
-``` - -`` のキー: - -| Key | Description | -| ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `address` | `host\[:port\]` 形式の syslog アドレス。省略した場合はローカルデーモンが使用されます。 | -| `hostname` | ログを送信するホストの名前(任意)。 | -| `facility` | syslog の [facility キーワード](https://en.wikipedia.org/wiki/Syslog#Facility)。すべて大文字で、先頭に `"LOG_"` プレフィックスを付けて指定する必要があります(例: `LOG_USER`、`LOG_DAEMON`、`LOG_LOCAL3` など)。デフォルト: `address` が指定されている場合は `LOG_USER`、それ以外は `LOG_DAEMON`。 | -| `format` | ログメッセージの形式。指定可能な値: `bsd` および `syslog`。 | - -**ログ形式** - -コンソールログに出力されるログ形式を指定できます。現在は JSON のみがサポートされています。 - -**例** - -出力される JSON ログの例を次に示します。 - -```json -{ - "date_time_utc": "2024-11-06T09:06:09Z", - "date_time": "1650918987.180175", - "thread_name": "#1", - "thread_id": "254545", - "level": "Trace", - "query_id": "", - "logger_name": "BaseDaemon", - "message": "シグナル2を受信", - "source_file": "../base/daemon/BaseDaemon.cpp; virtual void SignalListener::run()", - "source_line": "192" -} -``` - -JSON ログのサポートを有効にするには、次のスニペットを使用してください。 - -```xml - - - json - - - - date_time - thread_name - thread_id - level - query_id - logger_name - message - source_file - source_line - - - -``` - -**JSON ログのキー名の変更** - -キー名は、`` タグ内のタグの値を変更することで変更できます。たとえば、`DATE_TIME` を `MY_DATE_TIME` に変更するには、`MY_DATE_TIME` と指定します。 - -**JSON ログのキーの省略** - -ログプロパティは、そのプロパティをコメントアウトすることで省略できます。たとえば、ログに `query_id` を出力したくない場合は、`` タグをコメントアウトします。 - - -## macros - -レプリケートテーブル用のパラメータマクロです。 - -レプリケートテーブルを使用しない場合は省略可能です。 - -詳細については、[レプリケートテーブルの作成](../../engines/table-engines/mergetree-family/replication.md#creating-replicated-tables)を参照してください。 - -**例** - -```xml - -``` - - -## mark_cache_policy {#mark_cache_policy} - -マークキャッシュのポリシー名。 - - - -## mark_cache_prewarm_ratio {#mark_cache_prewarm_ratio} - -マークキャッシュの合計サイズのうち、プリウォームで事前に埋めておく割合。 - - - -## mark_cache_size {#mark_cache_size} - - -[`MergeTree`](/engines/table-engines/mergetree-family) ファミリーのテーブルにおけるマーク(インデックス)キャッシュの最大サイズ。 - -:::note -この設定は実行時に変更でき、すぐに有効になります。 -::: - - - - -## mark_cache_size_ratio {#mark_cache_size_ratio} - -SLRU ポリシー使用時に、マークキャッシュ内の保護キューのサイズを、キャッシュ全体サイズに対する比率で指定します。 - - - -## max_active_parts_loading_thread_pool_size {#max_active_parts_loading_thread_pool_size} - -起動時にアクティブなデータパーツ集合(Active のもの)を読み込むためのスレッド数。 - - - -## max_authentication_methods_per_user {#max_authentication_methods_per_user} - - -1 人のユーザーについて、作成または変更時に設定できる認証方式の最大数です。 -この設定を変更しても、既存のユーザーには影響しません。認証に関連する create/alter クエリがこの設定で指定された上限を超えると、クエリは失敗します。 -認証に関係しない create/alter クエリは成功します。 - -:::note -値を `0` にすると無制限になります。 -::: - - - - -## max_backup_bandwidth_for_server {#max_backup_bandwidth_for_server} - -サーバー上で実行されるすべてのバックアップの最大読み取り速度(1 秒あたりのバイト数)。0 は無制限を意味します。 - - - -## max_backups_io_thread_pool_free_size {#max_backups_io_thread_pool_free_size} - -Backups IO スレッドプール内のアイドル状態のスレッド数が `max_backup_io_thread_pool_free_size` を超える場合、ClickHouse はアイドル状態のスレッドによって占有されているリソースを解放し、プールサイズを縮小します。必要に応じてスレッドは再作成されます。 - - - -## max_backups_io_thread_pool_size {#max_backups_io_thread_pool_size} - -ClickHouse は S3 バックアップの I/O 処理を行うために Backups IO Thread プールのスレッドを使用します。`max_backups_io_thread_pool_size` は、このプール内のスレッド数の上限を設定します。 - - - -## max_build_vector_similarity_index_thread_pool_size {#max_build_vector_similarity_index_thread_pool_size} - - -ベクトルインデックスを構築する際に使用するスレッド数の上限。 - -:::note -値が `0` の場合は、すべてのコアを使用します。 -::: - - - - -## max_concurrent_insert_queries {#max_concurrent_insert_queries} - - -同時に実行できる `INSERT` クエリの総数の上限。 - -:::note - -`0`(デフォルト)の場合は無制限を意味します。 - -この設定は実行時に変更でき、即座に反映されます。すでに実行中のクエリには影響しません。 -::: - - - - -## max_concurrent_queries {#max_concurrent_queries} - - -同時に実行できるクエリの総数の上限です。`INSERT` および `SELECT` クエリの上限や、ユーザーごとの最大クエリ数の上限も合わせて考慮する必要があります。 - -あわせて参照: -- [`max_concurrent_insert_queries`](/operations/server-configuration-parameters/settings#max_concurrent_insert_queries) -- [`max_concurrent_select_queries`](/operations/server-configuration-parameters/settings#max_concurrent_select_queries) -- [`max_concurrent_queries_for_all_users`](/operations/settings/settings#max_concurrent_queries_for_all_users) - -:::note - -`0`(デフォルト)の場合は無制限を意味します。 - -この設定は実行時に変更可能で、直ちに反映されます。すでに実行中のクエリには影響しません。 -::: - - - - -## max_concurrent_select_queries {#max_concurrent_select_queries} - - -同時に実行できる `SELECT` クエリの総数の上限。 - -:::note - -`0`(デフォルト)の場合は無制限を意味します。 - -この設定は実行時に変更でき、直ちに反映されます。すでに実行中のクエリには影響しません。 -::: - - - - -## max_connections {#max_connections} - -サーバーの最大接続数。 - - - -## max_database_num_to_throw {#max_database_num_to_throw} - -データベースの数がこの値を超えると、サーバーは例外をスローします。0 は制限なしを意味します。 - - - -## max_database_num_to_warn - - - -アタッチされているデータベースの数が指定した値を超えると、ClickHouseサーバーが警告メッセージを `system.warnings` テーブルに追加します。 - -**例** - -```xml -50 -``` - - -## max_database_replicated_create_table_thread_pool_size {#max_database_replicated_create_table_thread_pool_size} - -DatabaseReplicated において、レプリカ復旧中にテーブルを作成するために使用するスレッド数です。0 を指定すると、スレッド数はコア数と同じになります。 - - - -## max_dictionary_num_to_throw - - - -辞書の数がこの値より大きい場合、サーバーは例外を発生させます。 - -次のデータベースエンジンのテーブルのみを数えます: - -* Atomic -* Ordinary -* Replicated -* Lazy - -:::note -値を `0` に設定すると、制限がなくなります。 -::: - -**例** - -```xml -400 -``` - - -## max_dictionary_num_to_warn - - - -アタッチされているディクショナリの数が指定値を超えると、ClickHouse サーバーは `system.warnings` テーブルに警告メッセージを追加します。 - -**例** - -```xml -400 -``` - - -## max_distributed_cache_read_bandwidth_for_server {#max_distributed_cache_read_bandwidth_for_server} - -サーバーの分散キャッシュからの合計読み取り速度の最大値(秒あたりのバイト数)。0 は無制限を意味します。 - - - -## max_distributed_cache_write_bandwidth_for_server {#max_distributed_cache_write_bandwidth_for_server} - -サーバーにおける分散キャッシュへの合計書き込み帯域幅の上限(1 秒あたりのバイト数)。0 は無制限を意味します。 - - - -## max_entries_for_hash_table_stats {#max_entries_for_hash_table_stats} - -集約時に収集されるハッシュテーブル統計情報に含めることができるエントリ数の上限 - - - -## max_fetch_partition_thread_pool_size {#max_fetch_partition_thread_pool_size} - -ALTER TABLE FETCH PARTITION 操作に使用するスレッド数。 - - - -## max_format_parsing_thread_pool_free_size {#max_format_parsing_thread_pool_free_size} - - -入力のパースに使用するスレッドプールに保持しておく、アイドル状態の待機スレッドの最大数。 - - - - -## max_format_parsing_thread_pool_size {#max_format_parsing_thread_pool_size} - - -入力データのパースに使用するスレッドの合計最大数。 - - - - -## max_io_thread_pool_free_size {#max_io_thread_pool_free_size} - - -IO スレッドプール内の**アイドル状態の**スレッド数が `max_io_thread_pool_free_size` を超えた場合、ClickHouse はアイドル状態のスレッドによって占有されているリソースを解放し、プールサイズを縮小します。必要に応じてスレッドは再作成されます。 - - - - -## max_io_thread_pool_size {#max_io_thread_pool_size} - - -ClickHouse は I/O スレッドプール内のスレッドを使用して、一部の I/O 処理(例:S3 とのやり取り)を実行します。`max_io_thread_pool_size` は、このプール内のスレッド数の上限を設定します。 - - - - -## max_keep_alive_requests - - - -1 つの keep-alive 接続で、ClickHouse サーバーによって接続がクローズされるまでに処理されるリクエストの最大数。 - -**例** - -```xml -10 -``` - - -## max_local_read_bandwidth_for_server {#max_local_read_bandwidth_for_server} - - -ローカルでの読み取りの最大速度を、1 秒あたりのバイト数で指定します。 - -:::note -`0` を指定すると無制限になります。 -::: - - - - -## max_local_write_bandwidth_for_server {#max_local_write_bandwidth_for_server} - - -ローカル書き込みの最大速度(1 秒あたりのバイト数)。 - -:::note -値が `0` の場合は無制限を意味します。 -::: - - - - -## max_materialized_views_count_for_table {#max_materialized_views_count_for_table} - - -1つのテーブルに関連付けられるマテリアライズドビューの数の上限。 - -:::note -この設定ではテーブルに直接依存するビューのみが対象であり、あるビューを基に別のビューを作成する場合は考慮されません。 -::: - - - - -## max_merges_bandwidth_for_server {#max_merges_bandwidth_for_server} - -サーバー上のすべてのマージ処理に対する最大読み取り速度(1 秒あたりのバイト数)。0 の場合は無制限です。 - - - -## max_mutations_bandwidth_for_server {#max_mutations_bandwidth_for_server} - -サーバー上のすべてのミューテーションの最大読み取り速度を、1 秒あたりのバイト数で指定します。0 の場合は無制限です。 - - - -## max_named_collection_num_to_throw - - - -名前付きコレクションの数がこの値を超えると、サーバーは例外を送出します。 - -:::note -`0` の値は制限なしを意味します。 -::: - -**例** - -```xml -400 -``` - - -## max_named_collection_num_to_warn - - - -名前付きコレクションの数が指定された値を超えた場合、ClickHouse サーバーは警告メッセージを `system.warnings` テーブルに追加します。 - -**例** - -```xml -400 -``` - - -## max_open_files - -同時に開くことができるファイル数の上限。 - -:::note -`getrlimit()` 関数が誤った値を返すため、macOS ではこのオプションを使用することを推奨します。 -::: - -**例** - -```xml -262144 -``` - - -## max_os_cpu_wait_time_ratio_to_drop_connection {#max_os_cpu_wait_time_ratio_to_drop_connection} - - -接続を切断するかどうかを判断するための、OS の CPU 待機時間(`OSCPUWaitMicroseconds` メトリクス)とビジー時間(`OSCPUVirtualTimeMicroseconds` メトリクス)の最大比率です。確率を計算するために、最小値と最大値の間で線形補間が行われ、この値では確率が 1 になります。 -詳細は [サーバー CPU 過負荷時の動作制御](/operations/settings/server-overload) を参照してください。 - - - - -## max_outdated_parts_loading_thread_pool_size {#max_outdated_parts_loading_thread_pool_size} - -起動時に非アクティブなデータパーツ(古いパーツ)の集合を読み込むためのスレッド数。 - - - -## max_part_num_to_warn - - - -アクティブなパーツの数が指定された値を超えた場合、ClickHouse サーバーは警告メッセージを `system.warnings` テーブルに追加します。 - -**例** - -```xml -400 -``` - - -## max_partition_size_to_drop - - - -パーティション削除に関する制限。 - -[MergeTree](../../engines/table-engines/mergetree-family/mergetree.md) テーブルのサイズが [`max_partition_size_to_drop`](#max_partition_size_to_drop)(バイト単位)を超える場合、[DROP PARTITION](../../sql-reference/statements/alter/partition.md#drop-partitionpart) クエリを使用してパーティションを削除することはできません。 -この設定は ClickHouse サーバーの再起動なしで反映されます。この制限を無効にする別の方法として、`/flags/force_drop_table` ファイルを作成する方法があります。 - -:::note -値 `0` は、パーティションを制限なく削除できることを意味します。 - -この制限は DROP TABLE および TRUNCATE TABLE には適用されません。[max_table_size_to_drop](/operations/settings/settings#max_table_size_to_drop) を参照してください。 -::: - -**例** - -```xml -0 -``` - - -## max_parts_cleaning_thread_pool_size {#max_parts_cleaning_thread_pool_size} - -非アクティブなデータパーツを同時に削除するためのスレッド数。 - - - -## max_pending_mutations_execution_time_to_warn - - - -保留中の mutation のいずれかが設定値(秒)を超えた場合、ClickHouse サーバーは `system.warnings` テーブルに警告メッセージを追加します。 - -**例** - -```xml -10000 -``` - - -## max_pending_mutations_to_warn - - - -保留中のミューテーションの数が指定された値を超えると、ClickHouse サーバーは `system.warnings` テーブルに警告メッセージを追加します。 - -**例** - -```xml -400 -``` - - -## max_prefixes_deserialization_thread_pool_free_size {#max_prefixes_deserialization_thread_pool_free_size} - - -prefixes のデシリアライズ用スレッドプール内の**アイドル**スレッド数が `max_prefixes_deserialization_thread_pool_free_size` を超えた場合、ClickHouse はそれらのスレッドが占有しているリソースを解放し、プールのサイズを縮小します。必要に応じてスレッドは再び作成されます。 - - - - -## max_prefixes_deserialization_thread_pool_size {#max_prefixes_deserialization_thread_pool_size} - - -ClickHouse は、MergeTree の Wide 形式パーツ内のファイルプレフィックスから列およびサブ列のメタデータを並列に読み取るために、prefixes のデシリアライズ用スレッドプールのスレッドを使用します。`max_prefixes_deserialization_thread_pool_size` は、このプール内のスレッド数の最大値を設定します。 - - - - -## max_remote_read_network_bandwidth_for_server {#max_remote_read_network_bandwidth_for_server} - - -読み取り時にネットワーク経由でデータを送受信する際の最大速度(1 秒あたりのバイト数)です。 - -:::note -値が `0`(デフォルト)の場合は、無制限を意味します。 -::: - - - - -## max_remote_write_network_bandwidth_for_server {#max_remote_write_network_bandwidth_for_server} - - -書き込み時におけるネットワーク経由のデータ交換の最大速度(1 秒あたりのバイト数)。 - -:::note -`0`(デフォルト)の場合は無制限を意味します。 -::: - - - - -## max_replicated_fetches_network_bandwidth_for_server {#max_replicated_fetches_network_bandwidth_for_server} - -レプリケートフェッチにおけるネットワーク経由のデータ交換速度の上限(1秒あたりのバイト数)。0 は無制限を意味します。 - - - -## max_replicated_sends_network_bandwidth_for_server {#max_replicated_sends_network_bandwidth_for_server} - -レプリケート送信における、ネットワーク経由でのデータ交換の最大速度(1 秒あたりのバイト数)。0 は無制限を意味します。 - - - -## max_replicated_table_num_to_throw - - - -レプリケートテーブルの数がこの値を超えると、サーバーは例外をスローします。 - -次のデータベースエンジンのテーブルのみをカウントします: - -* Atomic -* Ordinary -* Replicated -* Lazy - -:::note -`0` の場合は制限なしを意味します。 -::: - -**例** - -```xml -400 -``` - - -## max_server_memory_usage {#max_server_memory_usage} - - -サーバーが使用することを許可されるメモリの最大量です。バイト単位で指定されます。 - -:::note -サーバーの最大メモリ消費量は、`max_server_memory_usage_to_ram_ratio` の設定によってさらに制限されます。 -::: - -特例として、値が `0`(デフォルト)の場合、サーバーは(`max_server_memory_usage_to_ram_ratio` によって課される追加の制限を除き)利用可能なメモリをすべて使用できます。 - - - - -## max_server_memory_usage_to_ram_ratio {#max_server_memory_usage_to_ram_ratio} - - -サーバーが使用することを許可されているメモリの最大量を、利用可能なメモリ全体に対する比率で指定します。 - -たとえば、値が `0.9`(デフォルト)の場合、サーバーは利用可能なメモリの 90% までを消費することができます。 - -メモリの少ないシステムでのメモリ使用量を抑えることができます。 -RAM とスワップが少ないホストでは、[`max_server_memory_usage_to_ram_ratio`](#max_server_memory_usage_to_ram_ratio) を 1 より大きい値に設定する必要が生じる場合があります。 - -:::note -サーバーの最大メモリ使用量は、`max_server_memory_usage` の設定によってさらに制限されます。 -::: - - - - -## max_session_timeout - -セッションの最大タイムアウト時間(秒単位)。 - -例: - -```xml -3600 -``` - - -## max_table_num_to_throw - - - -テーブル数がこの値を超える場合、サーバーは例外をスローします。 - -次の種類のテーブルはカウントされません: - -* view -* remote -* dictionary -* system - -次のデータベースエンジンのテーブルのみがカウントされます: - -* Atomic -* Ordinary -* Replicated -* Lazy - -:::note -値が `0` の場合、制限がないことを意味します。 -::: - -**例** - -```xml -400 -``` - - -## max_table_num_to_warn - - - -アタッチされているテーブル数が指定された値を超えると、ClickHouse サーバーは警告メッセージを `system.warnings` テーブルに追加します。 - -**例** - -```xml -400 -``` - - -## max_table_size_to_drop - - - -テーブルの削除に関する制限です。 - -[MergeTree](../../engines/table-engines/mergetree-family/mergetree.md) テーブルのサイズが `max_table_size_to_drop`(バイト単位)を超える場合、[`DROP`](../../sql-reference/statements/drop.md) クエリや [`TRUNCATE`](../../sql-reference/statements/truncate.md) クエリを使用して削除することはできません。 - -:::note -`0` を設定すると、制限なしで任意のテーブルを削除できます。 - -この設定を適用するために ClickHouse サーバーの再起動は不要です。制限を無効にする別の方法として、`/flags/force_drop_table` ファイルを作成することもできます。 -::: - -**例** - -```xml -0 -``` - - -## max_temporary_data_on_disk_size {#max_temporary_data_on_disk_size} - - -外部集計、結合、ソートに使用できる一時データの最大ディスク使用量。 -この制限を超えたクエリは、例外を送出して失敗します。 - -:::note -`0` の値は無制限を意味します。 -::: - -関連項目: -- [`max_temporary_data_on_disk_size_for_user`](/operations/settings/settings#max_temporary_data_on_disk_size_for_user) -- [`max_temporary_data_on_disk_size_for_query`](/operations/settings/settings#max_temporary_data_on_disk_size_for_query) - - - - -## max_thread_pool_free_size - - - -グローバルスレッドプール内の**アイドル**スレッド数が[`max_thread_pool_free_size`](/operations/server-configuration-parameters/settings#max_thread_pool_free_size)より大きい場合、ClickHouse は一部のスレッドによって占有されているリソースを解放し、プールサイズを縮小します。必要に応じて、スレッドは再作成されます。 - -**例** - -```xml -1200 -``` - - -## max_thread_pool_size - - - -ClickHouse はクエリを処理するために、グローバルスレッドプール内のスレッドを使用します。クエリを処理するための空きスレッドがない場合、プールに新しいスレッドが作成されます。`max_thread_pool_size` はプール内のスレッド数の上限を設定します。 - -**例** - -```xml -12000 -``` - - -## max_unexpected_parts_loading_thread_pool_size {#max_unexpected_parts_loading_thread_pool_size} - -起動時に非アクティブな予期しないデータパーツ集合を読み込むためのスレッド数。 - - - -## max_view_num_to_throw - - - -ビュー数がこの値を超えると、サーバーは例外をスローします。 - -次のデータベースエンジンのテーブルのみをカウント対象とします: - -* Atomic -* Ordinary -* Replicated -* Lazy - -:::note -値が `0` の場合は制限がありません。 -::: - -**例** - -```xml -400 -``` - - -## max_view_num_to_warn - - - -アタッチされているビューの数が指定値を超えると、ClickHouseサーバーは `system.warnings` テーブルに警告メッセージを追加します。 - -**例** - -```xml -400 -``` - - -## max_waiting_queries {#max_waiting_queries} - - -同時に待機状態となるクエリの総数に対する上限。 -待機中のクエリの実行は、必要なテーブルが非同期で読み込まれている間ブロックされます([`async_load_databases`](/operations/server-configuration-parameters/settings#async_load_databases) を参照)。 - -:::note -待機中のクエリは、次の設定で制御される制限をチェックする際のカウントには含まれません。 - -- [`max_concurrent_queries`](/operations/server-configuration-parameters/settings#max_concurrent_queries) -- [`max_concurrent_insert_queries`](/operations/server-configuration-parameters/settings#max_concurrent_insert_queries) -- [`max_concurrent_select_queries`](/operations/server-configuration-parameters/settings#max_concurrent_select_queries) -- [`max_concurrent_queries_for_user`](/operations/settings/settings#max_concurrent_queries_for_user) -- [`max_concurrent_queries_for_all_users`](/operations/settings/settings#max_concurrent_queries_for_all_users) - -この調整は、サーバー起動直後にこれらの制限にすぐ達してしまうことを避けるために行われます。 -::: - -:::note - -`0`(デフォルト)の値は無制限を意味します。 - -この設定は実行時に変更でき、即座に反映されます。すでに実行中のクエリには影響しません。 -::: - - - - -## memory_worker_correct_memory_tracker {#memory_worker_correct_memory_tracker} - - -バックグラウンドのメモリワーカーが、`jemalloc` や `cgroups` などの外部ソースからの情報に基づいて内部メモリトラッカーを補正するかどうかを制御します。 - - - - -## memory_worker_period_ms {#memory_worker_period_ms} - - -メモリ使用量が高くなった場合に、メモリトラッカーによるメモリ使用量を補正し、未使用ページをクリーンアップするバックグラウンド メモリワーカーのティック周期(ミリ秒)。0 に設定した場合、メモリ使用元の種類に応じてデフォルト値が使用されます。 - - - - -## memory_worker_use_cgroup {#memory_worker_use_cgroup} - -現在の cgroup のメモリ使用量情報を利用して、メモリトラッキングを補正します。 - - - -## merge_tree - -[MergeTree](../../engines/table-engines/mergetree-family/mergetree.md) テーブルのための詳細な設定項目です。 - -詳細については、MergeTreeSettings.h ヘッダーファイルを参照してください。 - -**例** - -```xml - - 5 - -``` - - -## merge_workload {#merge_workload} - - -マージ処理とその他のワークロード間でのリソースの使用および共有方法を制御するために使用します。指定した値は、すべてのバックグラウンドマージに対して `workload` 設定の値として使用されます。マージツリーの設定で上書きできます。 - -**関連項目** -- [Workload Scheduling](/operations/workload-scheduling.md) - - - - -## merges_mutations_memory_usage_soft_limit - - - -マージおよびミューテーション操作を実行する際に使用が許可される RAM の上限(ソフトリミット)を設定します。 -ClickHouse が設定された上限に達すると、新しいバックグラウンドのマージまたはミューテーション操作はスケジュールされなくなりますが、すでにスケジュール済みのタスクの実行は継続されます。 - -:::note -値が `0` の場合は無制限を意味します。 -::: - -**例** - -```xml -0 -``` - - -## merges_mutations_memory_usage_to_ram_ratio {#merges_mutations_memory_usage_to_ram_ratio} - - -`merges_mutations_memory_usage_soft_limit` のデフォルト値は、`memory_amount * merges_mutations_memory_usage_to_ram_ratio` によって算出されます。 - -**関連項目:** - -- [max_memory_usage](/operations/settings/settings#max_memory_usage) -- [merges_mutations_memory_usage_soft_limit](/operations/server-configuration-parameters/settings#merges_mutations_memory_usage_soft_limit) - - - - -## metric_log - -既定では無効です。 - -**有効化** - -メトリクスの履歴収集機能 [`system.metric_log`](../../operations/system-tables/metric_log.md) を手動で有効にするには、次の内容で `/etc/clickhouse-server/config.d/metric_log.xml` を作成します。 - -```xml - - - system - metric_log
- 7500 - 1000 - 1048576 - 8192 - 524288 - false -
-
-``` - -**無効化** - -`metric_log` 設定を無効化するには、以下の内容で `/etc/clickhouse-server/config.d/disable_metric_log.xml` ファイルを作成します。 - -```xml - - - -``` - - - - -## min_os_cpu_wait_time_ratio_to_drop_connection {#min_os_cpu_wait_time_ratio_to_drop_connection} - - -接続の切断を検討する際の、OS の CPU 待機時間(`OSCPUWaitMicroseconds` メトリクス)とビジー時間(`OSCPUVirtualTimeMicroseconds` メトリクス)の比率における最小値です。切断確率の計算には、最小比率と最大比率の間で線形補間が使用され、この最小比率では確率は 0 になります。 -詳細については、[サーバー CPU 過負荷時の動作制御](/operations/settings/server-overload) を参照してください。 - - - - -## mlock_executable - -起動後に `mlockall` を実行し、最初のクエリのレイテンシを低減し、高い I/O 負荷時に ClickHouse の実行ファイルがページアウトされるのを防ぎます。 - -:::note -このオプションの有効化を推奨しますが、起動時間が最大で数秒ほど長くなります。 -また、この設定は "CAP_IPC_LOCK" ケーパビリティがない場合は機能しないことに注意してください。 -::: - -**例** - -```xml -false -``` - - -## mmap_cache_size {#mmap_cache_size} - - -この設定は、頻繁な open/close 呼び出し(後続のページフォールトにより非常にコストが高い)を回避し、複数のスレッドおよびクエリ間でマッピングを再利用できるようにします。設定値はマッピングされた領域の数(通常はマッピングされたファイル数と等しい)です。 - -マッピングされたファイル内のデータ量は、次のシステムテーブルにおいて、以下のメトリクスで監視できます。 - -- `MMappedFiles`/`MMappedFileBytes`/`MMapCacheCells` — [`system.metrics`](/operations/system-tables/metrics)、[`system.metric_log`](/operations/system-tables/metric_log) -- `CreatedReadBufferMMap`/`CreatedReadBufferMMapFailed`/`MMappedFileCacheHits`/`MMappedFileCacheMisses` — [`system.events`](/operations/system-tables/events)、[`system.processes`](/operations/system-tables/processes)、[`system.query_log`](/operations/system-tables/query_log)、[`system.query_thread_log`](/operations/system-tables/query_thread_log)、[`system.query_views_log`](/operations/system-tables/query_views_log) - -:::note -マッピングされたファイル内のデータ量はメモリを直接消費せず、クエリまたはサーバーのメモリ使用量にも計上されません。これは、このメモリが OS のページキャッシュと同様に破棄可能であるためです。キャッシュは、MergeTree ファミリーのテーブルで古いパーツが削除されるタイミングで(ファイルがクローズされることで)自動的に破棄されます。また、`SYSTEM DROP MMAP CACHE` クエリを使用して手動で破棄することもできます。 - -この設定は実行時に変更可能であり、変更は即座に有効になります。 -::: - - - - -## mutation_workload {#mutation_workload} - - -ミューテーションと他のワークロード間で、リソースの利用・共有を制御するために使用します。指定した値は、すべてのバックグラウンドミューテーションに対して `workload` 設定値として使用されます。MergeTree の設定で上書きできます。 - -**関連項目** -- [Workload Scheduling](/operations/workload-scheduling.md) - - - - -## mysql_port - -MySQL プロトコルでクライアントと通信するためのポート。 - -:::note - -* 正の整数を指定すると、そのポート番号で待ち受けます。 -* 空の値を指定すると、MySQL プロトコルによるクライアントとの通信が無効になります。 - ::: - -**例** - -```xml -9004 -``` - - -## mysql_require_secure_transport {#mysql_require_secure_transport} - -true に設定すると、[mysql_port](#mysql_port) 経由でクライアントとのセキュアな通信が必須となります。`--ssl-mode=none` オプションでの接続は拒否されます。[OpenSSL](#openssl) の設定と併せて使用してください。 - - - -## openSSL {#openssl} - -SSL クライアント/サーバーの構成。 - -SSL のサポートは `libpoco` ライブラリによって提供されます。利用可能な構成オプションについては [SSLManager.h](https://github.com/ClickHouse-Extras/poco/blob/master/NetSSL_OpenSSL/include/Poco/Net/SSLManager.h) を参照してください。デフォルト値は [SSLManager.cpp](https://github.com/ClickHouse-Extras/poco/blob/master/NetSSL_OpenSSL/src/SSLManager.cpp) で確認できます。 - -サーバー/クライアント構成用のキー: - - - -| オプション | 概要 | デフォルト値 | -| ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ | -| `privateKeyFile` | PEM 証明書の秘密鍵を格納したファイルへのパスです。ファイルには鍵と証明書を同一ファイル内に含めることができます。 | | -| `certificateFile` | PEM 形式のクライアント/サーバー証明書ファイルへのパス。`privateKeyFile` に証明書が含まれている場合は指定を省略できます。 | | -| `caConfig` | 信頼された CA 証明書を含むファイルまたはディレクトリへのパスです。ファイルを参照している場合、そのファイルは PEM 形式である必要があり、複数の CA 証明書を含めることができます。ディレクトリを参照している場合、そのディレクトリには CA 証明書ごとに 1 つの .pem ファイルが含まれている必要があります。ファイル名は CA のサブジェクト名のハッシュ値で検索されます。詳細は [SSL_CTX_load_verify_locations](https://www.openssl.org/docs/man3.0/man3/SSL_CTX_load_verify_locations.html) の man ページを参照してください。 | | -| `verificationMode` | ノードの証明書の検証方法。詳細は [Context](https://github.com/ClickHouse-Extras/poco/blob/master/NetSSL_OpenSSL/include/Poco/Net/Context.h) クラスの説明を参照してください。設定可能な値: `none`, `relaxed`, `strict`, `once`。 | `relaxed` | -| `verificationDepth` | 検証チェーンの最大長です。証明書チェーンの長さがこの値を超えると、検証は失敗します。 | `9` | -| `loadDefaultCAFile` | OpenSSL 用の組み込み CA 証明書を使用するかどうかを指定します。ClickHouse は、組み込み CA 証明書がファイル `/etc/ssl/cert.pem`(またはディレクトリ `/etc/ssl/certs`)にあるか、環境変数 `SSL_CERT_FILE`(または `SSL_CERT_DIR`)で指定されたファイル(またはディレクトリ)内にあると想定します。 | `true` | -| `cipherList` | サポートされている OpenSSL の暗号スイート | `ALL:!ADH:!LOW:!EXP:!MD5:!3DES:@STRENGTH` | -| `cacheSessions` | セッションキャッシュを有効または無効にします。`sessionIdContext` と組み合わせて使用する必要があります。設定可能な値:`true`、`false`。 | `false` | -| `sessionIdContext` | サーバーが生成する各識別子に付加される、サーバー固有のランダムな文字列です。文字列の長さは `SSL_MAX_SSL_SESSION_ID_LENGTH` を超えてはなりません。サーバー側でセッションをキャッシュする場合とクライアントがキャッシュを要求した場合の両方で問題を回避するのに役立つため、このパラメータを設定することを常に推奨します。 | `$\{application.name\}` | -| `sessionCacheSize` | サーバーがキャッシュするセッションの最大数。値を `0` にすると、セッション数は無制限になります。 | [1024*20](https://github.com/ClickHouse/boringssl/blob/master/include/openssl/ssl.h#L1978) | -| `sessionTimeout` | サーバー上でのセッションキャッシュの保持時間(時間単位)。 | `2` | -| `extendedVerification` | 有効化されている場合は、証明書の CN または SAN がピアのホスト名と一致していることを確認します。 | `false` | -| `requireTLSv1` | TLSv1 接続を要求します。指定可能な値は `true` または `false` です。 | `false` | -| `requireTLSv1_1` | TLSv1.1 接続を必須とします。指定可能な値:`true`、`false`。 | `false` | -| `requireTLSv1_2` | TLSv1.2 接続を必須とします。有効な値: `true`, `false`。 | `false` | -| `fips` | OpenSSL の FIPS モードを有効化します。ライブラリで使用している OpenSSL のバージョンが FIPS をサポートしている場合にのみ有効です。 | `false` | -| `privateKeyPassphraseHandler` | 秘密鍵にアクセスするためのパスフレーズを要求するクラス(PrivateKeyPassphraseHandler のサブクラス)。例えば: ``, `KeyFileHandler`, `test`, ``。 | `KeyConsoleHandler` | -| `invalidCertificateHandler` | 無効な証明書を検証するためのクラス(CertificateHandler のサブクラス)。例えば、` RejectCertificateHandler ` のように指定します。 | `RejectCertificateHandler` | -| `disableProtocols` | 使用が禁止されているプロトコル。 | | -| `preferServerCiphers` | クライアント優先のサーバー側暗号スイート。 | `false` | - -**設定例:** - -```xml - - - - /etc/clickhouse-server/server.crt - /etc/clickhouse-server/server.key - - /etc/clickhouse-server/dhparam.pem - none - true - true - sslv2,sslv3 - true - - - true - true - sslv2,sslv3 - true - - - - RejectCertificateHandler - - - -``` - - -## opentelemetry_span_log - -[`opentelemetry_span_log`](../system-tables/opentelemetry_span_log.md) システムテーブルの設定。 - - - -例: - -```xml - - - engine MergeTree - partition by toYYYYMM(finish_date) - order by (finish_date, finish_time_us, trace_id) - - system - opentelemetry_span_log
- 7500 - 1048576 - 8192 - 524288 - false -
-``` - - -## os_cpu_busy_time_threshold {#os_cpu_busy_time_threshold} - -CPU が有用な処理を行っていると見なすための、OS 上の CPU のビジー時間(`OSCPUVirtualTimeMicroseconds` メトリクス)の閾値(マイクロ秒単位)。ビジー時間がこの値未満の場合は、CPU 過負荷状態とは見なされません。 - - - -## os_threads_nice_value_distributed_cache_tcp_handler {#os_threads_nice_value_distributed_cache_tcp_handler} - - -分散キャッシュ TCP ハンドラーのスレッドに対する Linux の nice 値です。値が小さいほど CPU の優先度は高くなります。 - -CAP_SYS_NICE ケーパビリティが必要で、ない場合は効果がありません(no-op)。 - -取りうる値: -20 ~ 19。 - - - - -## os_threads_nice_value_merge_mutate {#os_threads_nice_value_merge_mutate} - - -マージおよびミューテーション処理用スレッドに対する Linux の nice 値。値が小さいほど CPU 優先度は高くなります。 - -CAP_SYS_NICE ケーパビリティが必要です。付与されていない場合は無効です。 - -取りうる値: -20 〜 19。 - - - - -## os_threads_nice_value_zookeeper_client_send_receive {#os_threads_nice_value_zookeeper_client_send_receive} - - -ZooKeeper クライアントの送信スレッドおよび受信スレッド用の、Linux における nice 値。値が小さいほど CPU 優先度は高くなります。 - -CAP_SYS_NICE ケーパビリティが必要で、付与されていない場合は何も行われません。 - -取りうる値: -20 ~ 19。 - - - - -## page_cache_free_memory_ratio {#page_cache_free_memory_ratio} - -メモリ上限に対し、ユーザースペースページキャッシュとしては使用せずに空けておく割合。Linux の `min_free_kbytes` 設定に相当します。 - - - -## page_cache_history_window_ms {#page_cache_history_window_ms} - -解放されたメモリがユーザー空間のページキャッシュとして利用可能になるまでの遅延。 - - - -## page_cache_max_size {#page_cache_max_size} - -ユーザー空間ページキャッシュの最大サイズです。キャッシュを無効にするには 0 に設定します。`page_cache_min_size` より大きい場合、キャッシュサイズはこの範囲内で継続的に調整され、利用可能なメモリを最大限活用しつつ、合計メモリ使用量が上限(`max_server_memory_usage[_to_ram_ratio]`)を下回るように保たれます。 - - - -## page_cache_min_size {#page_cache_min_size} - -ユーザー空間ページキャッシュの最小サイズ。 - - - -## page_cache_policy {#page_cache_policy} - -ユーザー空間のページキャッシュポリシー名。 - - - -## page_cache_shards {#page_cache_shards} - -ユーザー空間のページキャッシュをこの数のシャードに分割してストライピングし、ミューテックスの競合を減らします。実験的機能であり、性能向上はあまり見込めません。 - - - -## page_cache_size_ratio {#page_cache_size_ratio} - -ユーザー空間ページキャッシュにおける保護キューのサイズを、キャッシュ全体のサイズに対する割合で表します。 - - - -## part_log - -[MergeTree](../../engines/table-engines/mergetree-family/mergetree.md) に関連するログイベントを記録します。例えば、データの追加やマージなどです。ログを使用してマージアルゴリズムの動作をシミュレートし、その特性を比較できます。マージ処理を可視化することもできます。 - -クエリは別ファイルではなく、[system.part_log](/operations/system-tables/part_log) テーブルに記録されます。このテーブル名は `table` パラメータで設定できます(以下を参照)。 - - - -**例** - -```xml - - system - part_log
- toMonday(event_date) - 7500 - 1048576 - 8192 - 524288 - false -
-``` - - -## parts_kill_delay_period {#parts_kill_delay_period} - - -SharedMergeTree のパーツを完全に削除するまでの猶予期間。ClickHouse Cloud でのみ利用可能です - - - - -## parts_kill_delay_period_random_add {#parts_kill_delay_period_random_add} - - -極めて多くのテーブルが存在する場合に、`kill_delay_period` に 0 から x 秒までの一様分布に従う値を加算して、thundering herd 問題およびその結果として発生しうる ZooKeeper への DoS を回避します。ClickHouse Cloud でのみ利用可能です。 - - - - -## parts_killer_pool_size {#parts_killer_pool_size} - - -共有 MergeTree テーブルの古くなったパーツをクリーンアップするためのスレッド数です。ClickHouse Cloud でのみ利用可能です。 - - - - -## path - -データが格納されているディレクトリへのパス。 - -:::note -末尾のスラッシュは必須です。 -::: - -**例** - -```xml -/var/lib/clickhouse/ -``` - - -## postgresql_port - -PostgreSQL プロトコル経由でクライアントと通信するためのポート。 - -:::note - -* 正の整数はリッスンするポート番号を指定します。 -* 空の値は、PostgreSQL プロトコル経由でのクライアントとの通信を無効にするために使用します。 - ::: - -**例** - -```xml -9005 -``` - - -## postgresql_require_secure_transport {#postgresql_require_secure_transport} - -true に設定すると、[postgresql_port](#postgresql_port) を介したクライアントとの通信にはセキュアな経路が必須になります。`sslmode=disable` オプションによる接続は拒否されます。[OpenSSL](#openssl) の設定と併用してください。 - - - -## prefetch_threadpool_pool_size {#prefetch_threadpool_pool_size} - -リモートオブジェクトストレージのプリフェッチを行うバックグラウンドプールのサイズ - - - -## prefetch_threadpool_queue_size {#prefetch_threadpool_queue_size} - -プリフェッチプールに投入可能なタスクの最大数 - - - -## prefixes_deserialization_thread_pool_thread_pool_queue_size {#prefixes_deserialization_thread_pool_thread_pool_queue_size} - - -prefixes deserialization スレッドプールにスケジュールできるジョブの最大数です。 - -:::note -`0` の場合は無制限を意味します。 -::: - - - - -## prepare_system_log_tables_on_startup {#prepare_system_log_tables_on_startup} - - -true の場合、ClickHouse は起動前にあらかじめ、設定されているすべての `system.*_log` テーブルを作成します。起動時に実行されるスクリプトがこれらのテーブルに依存している場合に役立ちます。 - - - - -## primary_index_cache_policy {#primary_index_cache_policy} - -プライマリインデックスキャッシュポリシーの名前。 - - - -## primary_index_cache_prewarm_ratio {#primary_index_cache_prewarm_ratio} - -マークキャッシュ全体サイズのうち、プリウォームで事前に埋める部分の割合。 - - - -## primary_index_cache_size {#primary_index_cache_size} - -プライマリインデックスキャッシュの最大サイズ(MergeTree ファミリーのテーブルで使用されるインデックス)。 - - - -## primary_index_cache_size_ratio {#primary_index_cache_size_ratio} - -primary index キャッシュにおいて、(SLRU ポリシーの場合の)保護キューのサイズがキャッシュの総サイズに占める比率です。 - - - -## process_query_plan_packet - - - -この設定を有効にすると、QueryPlan パケットを読み取れるようになります。これは、`serialize_query_plan` が有効な場合に、分散クエリに対して送信されるパケットです。 -クエリプランのバイナリデシリアライズ処理におけるバグによって発生しうるセキュリティ上の問題を回避するため、デフォルトでは無効になっています。 - -**例** - -```xml -true -``` - - -## processors_profile_log - -[`processors_profile_log`](../system-tables/processors_profile_log.md) システムテーブルの設定です。 - - - -デフォルトの設定は次のとおりです。 - -```xml - - system - processors_profile_log
- toYYYYMM(event_date) - 7500 - 1048576 - 8192 - 524288 - false -
-``` - - -## prometheus - -[Prometheus](https://prometheus.io) によるスクレイプ向けにメトリクスデータを公開します。 - -設定項目: - -* `endpoint` – Prometheus サーバーがメトリクスをスクレイプするための HTTP エンドポイント。先頭は '/' から開始します。 -* `port` – `endpoint` 用のポート。 -* `metrics` – [system.metrics](/operations/system-tables/metrics) テーブルからメトリクスを公開します。 -* `events` – [system.events](/operations/system-tables/events) テーブルからメトリクスを公開します。 -* `asynchronous_metrics` – [system.asynchronous_metrics](/operations/system-tables/asynchronous_metrics) テーブルから現在のメトリクス値を公開します。 -* `errors` - サーバーの最後の再起動以降に発生したエラーコードごとのエラー数を公開します。この情報は [system.errors](/operations/system-tables/errors) からも取得できます。 - -**例** - -```xml - - 0.0.0.0 - 8123 - 9000 - - - /metrics - 9363 - true - true - true - true - - - -``` - -確認します(`127.0.0.1` を ClickHouse サーバーの IP アドレスまたはホスト名に置き換えてください): - -```bash -curl 127.0.0.1:9363/metrics -``` - - -## proxy - -HTTP および HTTPS リクエスト向けのプロキシサーバーを定義します。現在は S3 ストレージ、S3 テーブル関数、および URL 関数でサポートされています。 - -プロキシサーバーを定義する方法は 3 通りあります。 - -* 環境変数 -* プロキシリスト -* リモートプロキシリゾルバ - -特定のホストについては、`no_proxy` を使用してプロキシサーバーをバイパスすることもできます。 - -**Environment variables** - -`http_proxy` と `https_proxy` 環境変数を使用すると、 -特定のプロトコルに対してプロキシサーバーを指定できます。システム上でこれらが設定されていれば、そのまま問題なく動作します。 - -この方法は、特定のプロトコルに対して -プロキシサーバーが 1 つだけであり、そのプロキシサーバーが変更されない場合に最も簡単です。 - -**Proxy lists** - -この方法では、あるプロトコル向けのプロキシサーバーを 1 つ以上指定できます。複数のプロキシサーバーが定義されている場合、 -ClickHouse は各プロキシをラウンドロビン方式で使用し、サーバー間で負荷を分散します。これは、1 つのプロトコルに対して複数の -プロキシサーバーが存在し、そのプロキシサーバーのリストが変更されない場合に最も簡単な方法です。 - -**Configuration template** - -```xml - - - http://proxy1 - http://proxy2:3128 - - - http://proxy1:3128 - - -``` - -下のタブから親フィールドを選択すると、その子フィールドが表示されます: - - - - | Field | Description | - | --------- | --------------------- | - | `` | 1 つ以上の HTTP プロキシのリスト | - | `` | 1 つ以上の HTTPS プロキシのリスト | - - - - | Field | Description | - | ------- | ----------- | - | `` | プロキシの URI | - - - -**リモートプロキシリゾルバ** - -プロキシサーバーが動的に変更される可能性があります。 -その場合、リゾルバのエンドポイントを定義できます。ClickHouse は -そのエンドポイントに空の GET リクエストを送信し、リモートリゾルバはプロキシホストを返す必要があります。 -ClickHouse は、次のテンプレートを使用してプロキシ URI を組み立てる際にこれを利用します: `\{proxy_scheme\}://\{proxy_host\}:{proxy_port}` - -**設定テンプレート** - -```xml - - - - http://resolver:8080/hostname - http - 80 - 10 - - - - - - http://resolver:8080/hostname - http - 3128 - 10 - - - - -``` - -下のタブから親フィールドを選択して、その子要素を表示します: - - - - | Field | Description | - | --------- | --------------------- | - | `` | 1 つ以上の resolver のリスト* | - | `` | 1 つ以上の resolver のリスト* | - - - - | Field | Description | - | ------------ | -------------------------- | - | `` | resolver のエンドポイントおよびその他の詳細 | - - :::note - 複数の `` 要素を定義できますが、特定のプロトコルごとに使用されるのは - 最初の `` だけです。そのプロトコルに対するその他の `` - 要素は無視されます。つまり、必要に応じたロードバランシングはリモート側の resolver で実装する必要があります。 - ::: - - - - | Field | Description | - | -------------------- | ------------------------------------------------------------------------------------------------------------------- | - | `` | プロキシ resolver の URI | - | `` | 最終的なプロキシ URI のプロトコル。`http` または `https` のいずれかを指定できます。 | - | `` | プロキシ resolver のポート番号 | - | `` | resolver から取得した値を ClickHouse がキャッシュする秒数。この値を `0` に設定すると、ClickHouse はすべての HTTP および HTTPS リクエストごとに resolver に問い合わせます。 | - - - -**優先順位** - -プロキシ設定は、次の順序で決定されます: - - -| 順序 | 設定 | -|------|--------------------------| -| 1. | リモートプロキシリゾルバ | -| 2. | プロキシリスト | -| 3. | 環境変数 | - -ClickHouse は、リクエストプロトコルに対して最も優先度の高いリゾルバタイプを参照します。定義されていない場合は、 -環境変数リゾルバに到達するまで、次に優先度の高いリゾルバタイプを順に参照します。 -これにより、複数種類のリゾルバタイプを組み合わせて使用することも可能です。 - - - -## query_cache - -[Query cache](../query-cache.md) の設定です。 - -利用可能な設定は次のとおりです。 - -| Setting | Description | Default Value | -| ------------------------- | ---------------------------------------------- | ------------- | -| `max_size_in_bytes` | キャッシュの最大サイズ(バイト数)。`0` の場合、クエリキャッシュは無効になります。 | `1073741824` | -| `max_entries` | キャッシュに保存される `SELECT` クエリ結果の最大件数。 | `1024` | -| `max_entry_size_in_bytes` | キャッシュに保存される `SELECT` クエリ結果 1 件あたりの最大サイズ(バイト数)。 | `1048576` | -| `max_entry_size_in_rows` | キャッシュに保存される `SELECT` クエリ結果 1 件あたりの最大行数。 | `30000000` | - -:::note - -* 設定を変更すると即座に反映されます。 -* クエリキャッシュ用のデータは DRAM に割り当てられます。メモリが逼迫している場合は、`max_size_in_bytes` を小さい値に設定するか、クエリキャッシュを無効化することを検討してください。 - ::: - -**例** - -```xml - - 1073741824 - 1024 - 1048576 - 30000000 - -``` - - -## query_condition_cache_policy {#query_condition_cache_policy} - -クエリ条件キャッシュポリシーの名前。 - - - -## query_condition_cache_size {#query_condition_cache_size} - - -クエリ条件キャッシュの最大サイズです。 -:::note -この設定は実行時に変更でき、即座に反映されます。 -::: - - - - -## query_condition_cache_size_ratio {#query_condition_cache_size_ratio} - -クエリ条件キャッシュ内の保護キュー(SLRU ポリシーの場合)のサイズが、キャッシュ全体サイズに対して占める比率です。 - - - -## query_log - -[log_queries=1](../../operations/settings/settings.md) 設定で受信したクエリのログ出力に関する設定です。 - -クエリは個別のファイルではなく、[system.query_log](/operations/system-tables/query_log) テーブルに記録されます。テーブル名は `table` パラメーターで変更できます(下記参照)。 - - - -テーブルが存在しない場合は、ClickHouse によって作成されます。ClickHouse サーバーのアップデートによって query log の構造が変更された場合、古い構造のテーブルは名前が変更され、新しいテーブルが自動的に作成されます。 - -**例** - -```xml - - system - query_log
- Engine = MergeTree PARTITION BY event_date ORDER BY event_time TTL event_date + INTERVAL 30 day - 7500 - 1048576 - 8192 - 524288 - false -
-``` - - -## query_masking_rules - -正規表現ベースのルールで、サーバーログに保存される前のクエリおよびすべてのログメッセージに適用されます。 -[`system.query_log`](/operations/system-tables/query_log)、[`system.text_log`](/operations/system-tables/text_log)、[`system.processes`](/operations/system-tables/processes) テーブル、ならびにクライアントに送信されるログに適用されます。これにより、氏名、メールアドレス、個人識別子、クレジットカード番号など、SQL クエリに含まれる機密データがログに漏洩するのを防ぐことができます。 - -**例** - -```xml - - - SSNを非表示 - (^|\D)\d{3}-\d{2}-\d{4}($|\D) - 000-00-0000 - - -``` - -**設定フィールド**: - -| Setting | Description | -| --------- | ------------------------------------------ | -| `name` | ルール名(省略可) | -| `regexp` | RE2 互換正規表現(必須) | -| `replace` | 機微データを置き換えるための文字列(省略可。指定しない場合はアスタリスク 6 文字) | - -マスキングルールはクエリ全体に適用されます(不正な/パース不能なクエリから機微データが漏洩するのを防ぐため)。 - -[`system.events`](/operations/system-tables/events) テーブルには `QueryMaskingRulesMatch` というカウンタがあり、クエリマスキングルールにマッチした回数の総計を保持します。 - -分散クエリの場合は、各サーバーを個別に設定する必要があります。そうしないと、他のノードに渡されるサブクエリはマスキングされずに保存されます。 - - -## query_metric_log - -デフォルトでは無効になっています。 - -**有効化** - -メトリクス履歴の収集 [`system.query_metric_log`](../../operations/system-tables/query_metric_log.md) を手動で有効にするには、次の内容で `/etc/clickhouse-server/config.d/query_metric_log.xml` を作成します。 - -```xml - - - system - query_metric_log
- 7500 - 1000 - 1048576 - 8192 - 524288 - false -
-
-``` - -**無効化** - -`query_metric_log` 設定を無効化するには、以下の内容で `/etc/clickhouse-server/config.d/disable_query_metric_log.xml` ファイルを作成します。 - -```xml - - - -``` - - - - -## query_thread_log - -[log_query_threads=1](/operations/settings/settings#log_query_threads) 設定で受信したクエリのスレッドをログに記録するための設定です。 - -クエリは個別のファイルではなく、[system.query_thread_log](/operations/system-tables/query_thread_log) テーブルに記録されます。テーブル名は `table` パラメータで変更できます(後述)。 - - - -テーブルが存在しない場合、ClickHouse はテーブルを作成します。ClickHouse サーバーを更新した際にクエリスレッドログの構造が変更されていた場合は、旧構造を持つテーブルの名前が変更され、新しいテーブルが自動的に作成されます。 - -**例** - -```xml - - system - query_thread_log
- toMonday(event_date) - 7500 - 1048576 - 8192 - 524288 - false -
-``` - - -## query_views_log - -[log_query_views=1](/operations/settings/settings#log_query_views) 設定付きで受信したクエリに応じて、ビュー(ライブビュー、マテリアライズドビューなど)をログに記録するための設定です。 - -クエリは別ファイルではなく、[system.query_views_log](/operations/system-tables/query_views_log) テーブルに記録されます。`table` パラメータ(後述)でテーブル名を変更できます。 - - - -テーブルが存在しない場合、ClickHouse が作成します。ClickHouse サーバーのアップデート時に query views log の構造が変更されている場合は、古い構造のテーブルの名前が変更され、新しいテーブルが自動的に作成されます。 - -**例** - -```xml - - system - query_views_log
- toYYYYMM(event_date) - 7500 - 1048576 - 8192 - 524288 - false -
-``` - - -## remap_executable - -ヒュージページを使用して機械コード(「text」セクション)用のメモリを再割り当てするための設定です。 - -:::note -この機能は非常に実験的です。 -::: - -例: - -```xml -false -``` - - -## remote_servers - -[Distributed](../../engines/table-engines/special/distributed.md) テーブルエンジンおよび `cluster` テーブル関数で使用されるクラスターを設定します。 - -**例** - -```xml - -``` - -`incl` 属性の値については、「[設定ファイル](/operations/configuration-files)」セクションを参照してください。 - -**関連項目** - -* [skip_unavailable_shards](../../operations/settings/settings.md#skip_unavailable_shards) -* [クラスターディスカバリー](../../operations/cluster-discovery.md) -* [Replicated データベースエンジン](../../engines/database-engines/replicated.md) - - -## remote_url_allow_hosts - -URL 関連のストレージエンジンおよびテーブル関数で使用することが許可されているホストのリストです。 - -`\` XML タグでホストを追加する場合: - -* DNS 解決の前に名前がチェックされるため、URL に記載されているものと完全に同一の形式で指定する必要があります。例: `clickhouse.com` -* URL でポートが明示的に指定されている場合は、host:port 全体としてチェックされます。例: `clickhouse.com:80` -* ホストがポートなしで指定されている場合、そのホストの任意のポートが許可されます。例えば `clickhouse.com` が指定されている場合、`clickhouse.com:20` (FTP)、`clickhouse.com:80` (HTTP)、`clickhouse.com:443` (HTTPS) などが許可されます。 -* ホストが IP アドレスとして指定されている場合、URL に記載されたとおりにチェックされます。例: `[2a02:6b8:a::a]`。 -* リダイレクトが存在し、リダイレクトのサポートが有効な場合は、すべてのリダイレクト (`Location` フィールド) がチェックされます。 - -例: - -```sql - - clickhouse.com - -``` - - -## replica_group_name - -Replicated データベースで使用するレプリカグループ名。 - -Replicated データベースによって作成されるクラスターは、同じグループに属するレプリカのみで構成されます。 -DDL クエリは、同じグループに属するレプリカのみに対して待機します。 - -デフォルトでは空です。 - -**例** - -```xml -バックアップ -``` - - -## replicated_fetches_http_connection_timeout {#replicated_fetches_http_connection_timeout} - -パーツフェッチリクエスト用の HTTP 接続タイムアウト。明示的に設定しない場合は、デフォルトプロファイルの `http_connection_timeout` を継承します。 - - - -## replicated_fetches_http_receive_timeout {#replicated_fetches_http_receive_timeout} - -フェッチパーツリクエストに対する HTTP の受信タイムアウト。明示的に設定されていない場合は、デフォルトプロファイルの `http_receive_timeout` の値が使用されます。 - - - -## replicated_fetches_http_send_timeout {#replicated_fetches_http_send_timeout} - -パーツのフェッチリクエストに対する HTTP 送信タイムアウト。明示的に設定されていない場合は、デフォルトプロファイルの `http_send_timeout` を継承します。 - - - -## replicated_merge_tree - -[ReplicatedMergeTree](../../engines/table-engines/mergetree-family/mergetree.md) のテーブル用の微調整設定です。この設定の優先順位が高くなります。 - -詳細は MergeTreeSettings.h ヘッダーファイルを参照してください。 - -**例** - -```xml - - 5 - -``` - - -## restore_threads {#restore_threads} - -RESTORE リクエストの実行に使用する最大スレッド数。 - - - -## s3_credentials_provider_max_cache_size {#s3_credentials_provider_max_cache_size} - -キャッシュできる S3 クレデンシャルプロバイダの最大数 - - - -## s3_max_redirects {#s3_max_redirects} - -許可されるS3リダイレクトのホップ回数の上限。 - - - -## s3_retry_attempts {#s3_retry_attempts} - -Aws::Client::RetryStrategy 用の設定です。Aws::Client は自身でリトライ処理を行い、0 はリトライしないことを意味します。 - - - -## s3queue_disable_streaming {#s3queue_disable_streaming} - -テーブルが作成済みで、マテリアライズドビューがアタッチされている場合でも、S3Queue でのストリーミングを無効化します - - - -## s3queue_log - -`s3queue_log` システムテーブルに関する設定です。 - - - -デフォルト設定は次のとおりです。 - -```xml - - system - s3queue_log
- toYYYYMM(event_date) - 7500 -
-``` - - -## send_crash_reports - -ClickHouse コア開発チームにクラッシュレポートを送信するための設定です。 - -特に本番前環境では、有効化していただけると非常に助かります。 - -キー: - -| Key | Description | -| --------------------- | -------------------------------------------------------------------------------------------------------- | -| `enabled` | 機能を有効にするかどうかを指定するブール値フラグ。デフォルトは `true`。クラッシュレポートを送信したくない場合は `false` に設定します。 | -| `send_logical_errors` | `LOGICAL_ERROR` は `assert` のようなもので、ClickHouse におけるバグを示します。このブール値フラグを有効にすると、これらの例外も送信されます(デフォルト: `true`)。 | -| `endpoint` | クラッシュレポート送信先のエンドポイント URL を上書きできます。 | - -**推奨される使い方** - -```xml - - true - -``` - - -## series_keeper_path {#series_keeper_path} - - -Keeper 内のパスであり、`generateSerialID` 関数によって自動インクリメントされる番号が割り当てられます。各シリーズはこのパス直下のノードとして作成されます。 - - - - -## show_addresses_in_stack_traces {#show_addresses_in_stack_traces} - -true に設定すると、スタックトレースにアドレスが表示されます - - - -## shutdown_wait_backups_and_restores {#shutdown_wait_backups_and_restores} - -true に設定されている場合、ClickHouse はシャットダウンする前に、実行中のバックアップおよびリストアが完了するまで待機します。 - - - -## shutdown_wait_unfinished {#shutdown_wait_unfinished} - -未完了のクエリが完了するまで待機する秒数 - - - -## shutdown_wait_unfinished_queries {#shutdown_wait_unfinished_queries} - -true に設定すると、ClickHouse はシャットダウンする前に実行中のクエリが完了するまで待機します。 - - - -## skip_binary_checksum_checks {#skip_binary_checksum_checks} - -ClickHouse バイナリのチェックサムによる整合性検証をスキップします - - - -## ssh_server - -ホストキーの公開鍵部分は、初回接続時に SSH クライアント側の known_hosts ファイルに書き込まれます。 - -ホストキー設定はデフォルトでは無効です。 -ホストキー設定のコメントアウトを解除し、対応する SSH キーへのパスを指定して有効化してください。 - -例: - -```xml - - path_to_the_ssh_key - path_to_the_ssh_key - path_to_the_ssh_key - -``` - - -## startup_mv_delay_ms {#startup_mv_delay_ms} - -マテリアライズドビューの作成遅延をシミュレートするためのデバッグパラメータ - - - -## storage_configuration - -ストレージのマルチディスク構成を行うための設定です。 - -ストレージ構成は次の構造に従います。 - -```xml - - - - - - - - -``` - -### ディスクの設定 - -`disks` の設定は、以下のような構成になります。 - -```xml - - - - /mnt/fast_ssd/clickhouse/ - - - /mnt/hdd1/clickhouse/ - 10485760 - - - /mnt/hdd2/clickhouse/ - 10485760 - - ... - - -``` - -上記のサブタグは、`disks` に対して次の設定を指定します: - -| Setting | Description | -| ----------------------- | ---------------------------------------------------------- | -| `` | 一意である必要があるディスクの名前。 | -| `path` | サーバーデータ(`data` および `shadow` カタログ)が保存されるパス。`/` で終わる必要があります。 | -| `keep_free_space_bytes` | ディスク上で確保しておく空き領域のサイズ。 | - -:::note -ディスクの順序は関係ありません。 -::: - -### ポリシーの設定 - -上記のサブタグは、`policies` に対して次の設定を指定します: - - -| Setting | Description | -|------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `policy_name_N` | ポリシー名。ポリシー名は一意である必要があります。 | -| `volume_name_N` | ボリューム名。ボリューム名は一意である必要があります。 | -| `disk` | ボリューム内に配置されているディスク。 | -| `max_data_part_size_bytes` | このボリューム内の任意のディスク上に存在できるデータチャンクの最大サイズ。この値より大きくなると予想されるチャンクサイズでマージが行われる場合、そのチャンクは次のボリュームに書き込まれます。基本的に、この機能により、新規/小さいチャンクをホット(SSD)ボリュームに保存し、サイズが大きくなったらコールド(HDD)ボリュームに移動できます。ポリシー内にボリュームが 1 つしかない場合は、このオプションを使用しないでください。 | -| `move_factor` | ボリューム上で利用可能な空き容量の割合。この割合を下回ると、(存在する場合は)データの次のボリュームへの転送が開始されます。転送時には、チャンクはサイズの大きい順(降順)に並べ替えられ、合計サイズが `move_factor` の条件を満たすのに十分なチャンクが選択されます。すべてのチャンクの合計サイズが不十分な場合は、すべてのチャンクが移動されます。 | -| `perform_ttl_move_on_insert` | 挿入時に、TTL が期限切れのデータを移動する動作を無効にします。デフォルト(有効)の場合、TTL ベースの移動ルールに従ってすでに期限切れとなっているデータを挿入すると、即座に移動ルールで指定されたボリューム/ディスクに移動されます。ターゲットのボリューム/ディスクが遅い場合(例: S3)、これにより挿入が大幅に低速化する可能性があります。無効にした場合、期限切れのデータ部分はいったんデフォルトボリュームに書き込まれ、その後すぐに、期限切れ TTL 用のルールで指定されたボリュームに移動されます。 | -| `load_balancing` | ディスクの負荷分散ポリシー。`round_robin` または `least_used` を指定します。 | -| `least_used_ttl_ms` | すべてのディスク上の空き容量を更新するタイムアウト(ミリ秒)を設定します(`0` - 常に更新、`-1` - 更新しない、デフォルト値は `60000`)。ディスクが ClickHouse だけに使用され、オンラインでファイルシステムをリサイズしない場合は、`-1` の値を使用できます。それ以外の場合、この値は推奨されません。最終的に不正確な空き容量の割り当てにつながるためです。 | -| `prefer_not_to_merge` | このボリューム上でのデータパーツのマージを無効にします。注意: これは潜在的に有害であり、パフォーマンス低下の原因となる可能性があります。この設定を有効にすると(推奨しません)、このボリューム上でのデータのマージは禁止されます(望ましくありません)。これにより、ClickHouse が低速ディスクとどのようにやり取りするかを制御できますが、基本的には使用しないことを推奨します。 | -| `volume_priority` | ボリュームがどの順序で埋められるかの優先度(順序)を定義します。値が小さいほど優先度は高くなります。パラメータの値は自然数であり、1 から N(N は指定されたパラメータ値の最大値)までの範囲を欠番なく網羅している必要があります。 | - -`volume_priority` について: -- すべてのボリュームにこのパラメータが設定されている場合、指定された順序で優先されます。 -- _一部の_ ボリュームにだけ設定されている場合、設定されていないボリュームは最も低い優先度になります。設定されているボリュームはタグ値に従って優先され、残りのボリュームの優先度は、設定ファイル内での記述順によって決まります。 -- _いずれの_ ボリュームにもこのパラメータが設定されていない場合、優先度は設定ファイル内での記述順によって決まります。 -- ボリュームの優先度が同一である必要はありません。 - - - -## storage_connections_soft_limit {#storage_connections_soft_limit} - -この上限を超えた接続は、有効期間(TTL)が大幅に短くなります。この上限はストレージへの接続に適用されます。 - - - -## storage_connections_store_limit {#storage_connections_store_limit} - -この上限を超えた接続は、使用後にリセットされます。接続キャッシュを無効にするには 0 を設定します。この上限はストレージ接続に適用されます。 - - - -## storage_connections_warn_limit {#storage_connections_warn_limit} - -使用中の接続数がこの閾値を超えた場合、警告メッセージがログに書き込まれます。この閾値はストレージの接続に適用されます。 - - - -## storage_metadata_write_full_object_key {#storage_metadata_write_full_object_key} - -ディスクメタデータファイルを VERSION_FULL_OBJECT_KEY 形式で書き込みます。既定で有効になっています。この設定は非推奨です。 - - - -## storage_shared_set_join_use_inner_uuid {#storage_shared_set_join_use_inner_uuid} - -有効にすると、SharedSet および SharedJoin の作成時に内部 UUID が生成されます。ClickHouse Cloud 専用です。 - - - -## table_engines_require_grant {#table_engines_require_grant} - -true に設定した場合、ユーザーは特定のテーブルエンジンを使用してテーブルを作成するための GRANT 権限が必要になります(例: `GRANT TABLE ENGINE ON TinyLog TO user`)。 - -:::note -既定では後方互換性のため、特定のテーブルエンジンを指定してテーブルを作成する際に GRANT 権限は無視されますが、この設定を true にすることでこの動作を変更できます。 -::: - - - -## tables_loader_background_pool_size {#tables_loader_background_pool_size} - - -バックグラウンドプールで非同期ロードジョブを実行するスレッド数を設定します。バックグラウンドプールは、そのテーブルを待っているクエリがない場合に、サーバー起動後にテーブルを非同期でロードするために使用されます。テーブル数が多い場合は、バックグラウンドプール内のスレッド数を少なく保つことで有利になる場合があります。これにより、同時クエリ実行のための CPU リソースを確保できます。 - -:::note -値が `0` の場合、利用可能なすべての CPU が使用されます。 -::: - - - - -## tables_loader_foreground_pool_size {#tables_loader_foreground_pool_size} - - -フォアグラウンドプールでロードジョブを実行するスレッド数を設定します。フォアグラウンドプールは、サーバーがポートでのリッスンを開始する前にテーブルを同期的にロードする場合や、ロード完了を待機しているテーブルをロードする場合に使用されます。フォアグラウンドプールはバックグラウンドプールよりも優先度が高く、フォアグラウンドプールでジョブが実行中の間は、バックグラウンドプールでジョブは開始されません。 - -:::note -値が `0` の場合、利用可能なすべての CPU が使用されます。 -::: - - - - -## tcp_close_connection_after_queries_num {#tcp_close_connection_after_queries_num} - -1 つの TCP 接続で、接続を閉じるまでに実行できるクエリの最大数です。無制限にするには 0 を設定します。 - - - -## tcp_close_connection_after_queries_seconds {#tcp_close_connection_after_queries_seconds} - -TCP 接続が閉じられるまでの最大存続期間(秒)。接続の存続期間を無制限にするには 0 に設定します。 - - - -## tcp_port - -クライアントとの TCP 通信に使用するポート。 - -**例** - -```xml -9000 -``` - - -## tcp_port_secure - -クライアントとのセキュアな通信に使用する TCP ポートです。[OpenSSL](#openssl) の設定と組み合わせて使用します。 - -**デフォルト値** - -```xml -9440 -``` - - -## tcp_ssh_port - -ユーザーが PTY 経由で組み込みクライアントを使用して対話的に接続し、クエリを実行するための SSH サーバーのポート。 - -例: - -```xml -9022 -``` - - -## temporary_data_in_cache - -このオプションを使用すると、特定のディスクについて、一時データがそのディスクのキャッシュに保存されます。 -このセクションでは、タイプが `cache` のディスク名を指定する必要があります。 -この場合、キャッシュと一時データは同じ領域を共有し、一時データを作成するためにディスクキャッシュが破棄される(追い出される)可能性があります。 - -:::note -一時データの保存先を設定するには、`tmp_path`、`tmp_policy`、`temporary_data_in_cache` のいずれか 1 つのみを使用できます。 -::: - -**例** - -`local_disk` 用のキャッシュと一時データの両方が、ファイルシステム上の `/tiny_local_cache` に保存され、`tiny_local_cache` によって管理されます。 - -```xml - - - - -local -/local_disk/ - - - - -cache -local_disk -/tiny_local_cache/ -10M -1M -1 - - - - - - -tiny_local_cache - - -``` - - -## temporary_data_in_distributed_cache {#temporary_data_in_distributed_cache} - -一時データを分散キャッシュ内に保存するかどうかを指定します。 - - - -## text_index_dictionary_block_cache_max_entries {#text_index_dictionary_block_cache_max_entries} - -テキストインデックス辞書ブロックのキャッシュサイズ(エントリ数)。0 を指定すると無効になります。 - - - -## text_index_dictionary_block_cache_policy {#text_index_dictionary_block_cache_policy} - -テキストインデックス辞書ブロックキャッシュのポリシー名です。 - - - -## text_index_dictionary_block_cache_size {#text_index_dictionary_block_cache_size} - -テキストインデックス辞書ブロック用キャッシュのサイズ。ゼロの場合は無効になります。 - -:::note -この設定は実行時に変更でき、即座に反映されます。 -::: - - - -## text_index_dictionary_block_cache_size_ratio {#text_index_dictionary_block_cache_size_ratio} - -テキストインデックス辞書ブロックキャッシュにおける、キャッシュ全体サイズに対する保護キュー(SLRU ポリシーの場合)のサイズ比率。 - - - -## text_index_header_cache_max_entries {#text_index_header_cache_max_entries} - -テキストインデックスヘッダー用キャッシュのサイズ(エントリ数)。0 を指定すると無効になります。 - - - -## text_index_header_cache_policy {#text_index_header_cache_policy} - -テキストインデックスヘッダーキャッシュポリシーの名前。 - - - -## text_index_header_cache_size {#text_index_header_cache_size} - -テキストインデックスヘッダー用キャッシュのサイズ。0 の場合は無効になります。 - -:::note -この設定は実行時に変更でき、変更は直ちに反映されます。 -::: - - - -## text_index_header_cache_size_ratio {#text_index_header_cache_size_ratio} - -テキストインデックスヘッダーキャッシュにおける、SLRU ポリシー使用時の保護キューのサイズを、キャッシュ全体サイズに対する比率で指定します。 - - - -## text_index_postings_cache_max_entries {#text_index_postings_cache_max_entries} - -テキストインデックスのポスティングリスト用キャッシュのサイズ(エントリ数)。0 に設定すると無効になります。 - - - -## text_index_postings_cache_policy {#text_index_postings_cache_policy} - -テキストインデックスのポスティングリストのキャッシュポリシー名。 - - - -## text_index_postings_cache_size {#text_index_postings_cache_size} - -テキストインデックスのポスティングリスト用キャッシュサイズ。0 にすると無効になります。 - -:::note -この設定は実行時に変更でき、即座に反映されます。 -::: - - - -## text_index_postings_cache_size_ratio {#text_index_postings_cache_size_ratio} - -テキストインデックスのポスティングリストキャッシュにおいて、保護キュー(SLRU ポリシーの場合)のサイズがキャッシュ全体サイズに対して占める割合を指定します。 - - - -## text_log - -テキストメッセージをログ出力するための [text_log](/operations/system-tables/text_log) システムテーブルの設定です。 - - - -加えて、次の設定があります。 - -| Setting | Description | Default Value | -| ------- | ------------------------------------ | ------------- | -| `level` | テーブルに保存されるメッセージの最大レベル(既定値は `Trace`)。 | `Trace` | - -**例** - -```xml - - - notice - system - text_log
- 7500 - 1048576 - 8192 - 524288 - false - - Engine = MergeTree PARTITION BY event_date ORDER BY event_time TTL event_date + INTERVAL 30 day -
-
-``` - - -## thread_pool_queue_size - - - -グローバルスレッドプールにスケジュールできるジョブの最大数です。キューサイズを大きくするとメモリ使用量が増加します。この値は [`max_thread_pool_size`](/operations/server-configuration-parameters/settings#max_thread_pool_size) と同じ値にすることを推奨します。 - -:::note -`0` は無制限を意味します。 -::: - -**例** - -```xml -12000 -``` - - -## threadpool_local_fs_reader_pool_size {#threadpool_local_fs_reader_pool_size} - -`local_filesystem_read_method = 'pread_threadpool'` の場合に、ローカルファイルシステムからの読み込みを行うスレッドプールのスレッド数。 - - - -## threadpool_local_fs_reader_queue_size {#threadpool_local_fs_reader_queue_size} - -ローカルファイルシステムからの読み込みを行うためにスレッドプールにスケジュールできるジョブの最大数。 - - - -## threadpool_remote_fs_reader_pool_size {#threadpool_remote_fs_reader_pool_size} - -`remote_filesystem_read_method = 'threadpool'` の場合に、リモートファイルシステムからの読み取りに使用されるスレッドプールのスレッド数。 - - - -## threadpool_remote_fs_reader_queue_size {#threadpool_remote_fs_reader_queue_size} - -リモートファイルシステムからの読み取りのためにスレッドプールにスケジュールできるジョブの最大数。 - - - -## threadpool_writer_pool_size {#threadpool_writer_pool_size} - -オブジェクトストレージへの書き込みリクエストを処理するバックグラウンドプールのサイズ - - - -## threadpool_writer_queue_size {#threadpool_writer_queue_size} - -オブジェクトストレージへの書き込みリクエストを処理するバックグラウンドプールに投入できるタスクの最大数 - - - -## throw_on_unknown_workload - - - -クエリ設定 'workload' を使用して未知の WORKLOAD にアクセスした際の動作を定義します。 - -* `true` の場合、未知の WORKLOAD へアクセスしようとするクエリから RESOURCE_ACCESS_DENIED 例外がスローされます。これは、WORKLOAD 階層が確立され、`WORKLOAD default` を含むようになった後に、すべてのクエリに対してリソーススケジューリングを強制するのに有用です。 -* `false`(デフォルト)の場合、'workload' 設定が未知の WORKLOAD を指していても、そのクエリはリソーススケジューリングなしで無制限にアクセスできます。これは、`WORKLOAD default` が追加される前の WORKLOAD 階層の設定中に重要となります。 - -**例** - -```xml -true -``` - -**関連項目** - -* [ワークロードのスケジューリング](/operations/workload-scheduling.md) - - -## timezone - -サーバーのタイムゾーンです。 - -UTC タイムゾーンまたは地理的位置を表す IANA 識別子で指定します(例: Africa/Abidjan)。 - -タイムゾーンは、DateTime フィールドをテキスト形式で出力する際(画面表示やファイル出力)、および文字列から DateTime を取得する際に、String と DateTime の形式を相互に変換するために必要です。さらに、入力パラメータとしてタイムゾーンを受け取らない時間・日付関連の関数においても、内部で使用されます。 - -**例** - -```xml -Asia/Istanbul -``` - -**関連項目** - -* [session_timezone](../settings/settings.md#session_timezone) - - -## tmp_path - -大規模なクエリを処理するための一時データを保存するローカルファイルシステム上のパス。 - -:::note - -* 一時データの保存先を設定するオプションとして使用できるのは、`tmp_path`、`tmp_policy`、`temporary_data_in_cache` のいずれか 1 つだけです。 -* 末尾のスラッシュは必須です。 - ::: - -**例** - -```xml -/var/lib/clickhouse/tmp/ -``` - - -## tmp_policy - -一時データを格納するストレージ用のポリシーです。`tmp` プレフィックスを持つすべてのファイルは起動時に削除されます。 - -:::note -`tmp_policy` としてオブジェクトストレージを使用する際の推奨事項: - -* 各サーバーで個別の `bucket:path` を使用する -* `metadata_type=plain` を使用する -* このバケットに対して TTL を設定することも検討してください - ::: - -:::note - -* 一時データストレージの設定には、`tmp_path`、`tmp_policy`、`temporary_data_in_cache` のいずれか一つしか使用できません。 -* `move_factor`、`keep_free_space_bytes`、`max_data_part_size_bytes` は無視されます。 -* ポリシーは *1 つのボリューム* のみを持つ必要があります - -詳細については [MergeTree Table Engine](/engines/table-engines/mergetree-family/mergetree) のドキュメントを参照してください。 -::: - -**例** - -`/disk1` がいっぱいになった場合、一時データは `/disk2` に保存されます。 - -```xml - - - - -/disk1/ - - -/disk2/ - - - - - - - -
-disk1 -disk2 -
-
-
- -
-
- - -tmp_two_disks - -
-``` - - -## top_level_domains_list - -追加するカスタムトップレベルドメインのリストを定義します。各エントリは `/path/to/file` という形式です。 - -例えば次のようになります。 - -```xml - - /path/to/public_suffix_list.dat - -``` - -関連項目: - -* 関数 [`cutToFirstSignificantSubdomainCustom`](../../sql-reference/functions/url-functions.md/#cutToFirstSignificantSubdomainCustom) およびそのバリエーション。 - これらはカスタムの TLD リスト名を受け取り、トップレベルドメイン直下から最初の意味のあるサブドメインまでを含むドメイン部分を返します。 - - -## total_memory_profiler_sample_max_allocation_size {#total_memory_profiler_sample_max_allocation_size} - -`total_memory_profiler_sample_probability` と同じ確率で、指定した値以下のサイズのランダムなメモリ割り当てを収集します。0 は無効を意味します。このしきい値が意図したとおりに動作するようにするには、`max_untracked_memory` を 0 に設定することを推奨します。 - - - -## total_memory_profiler_sample_min_allocation_size {#total_memory_profiler_sample_min_allocation_size} - -指定した値以上のサイズのメモリアロケーションを、`total_memory_profiler_sample_probability` の確率でランダムに収集します。0 の場合は無効です。このしきい値が想定どおりに動作するように、`max_untracked_memory` を 0 に設定することを検討してください。 - - - -## total_memory_profiler_step {#total_memory_profiler_step} - -サーバーのメモリ使用量が、指定されたバイト数ごとの各ステップを超えるたびに、メモリプロファイラがメモリ割り当て時のスタックトレースを収集します。ゼロを指定すると、メモリプロファイラは無効になります。数メガバイトより小さい値を指定すると、サーバーが遅くなります。 - - - -## total_memory_tracker_sample_probability {#total_memory_tracker_sample_probability} - - -ランダムなメモリの割り当ておよび解放を収集し、指定した確率で `trace_type` が `MemorySample` の行として [system.trace_log](../../operations/system-tables/trace_log.md) システムテーブルに書き込みます。この確率は、割り当てサイズに関係なく、各割り当ておよび解放ごとに適用されます。サンプリングは、未追跡メモリ量が未追跡メモリ制限(デフォルト値は `4` MiB)を超えた場合にのみ行われる点に注意してください。[total_memory_profiler_step](/operations/server-configuration-parameters/settings#total_memory_profiler_step) を小さくすると、この制限を下げることができます。より細かい粒度でサンプリングするには、`total_memory_profiler_step` を `1` に設定できます。 - -設定可能な値: - -- 正の倍精度実数。 -- `0` — `system.trace_log` システムテーブルへのランダムな割り当ておよび解放の書き込みを無効にします。 - - - - -## trace_log - -[trace_log](/operations/system-tables/trace_log) システムテーブルの動作を制御するための設定です。 - - - -デフォルトのサーバー設定ファイル `config.xml` には、次の設定セクションが含まれています。 - -```xml - - system - trace_log
- toYYYYMM(event_date) - 7500 - 1048576 - 8192 - 524288 - false - false -
-``` - - -## uncompressed_cache_policy {#uncompressed_cache_policy} - -非圧縮キャッシュのポリシー名。 - - - -## uncompressed_cache_size {#uncompressed_cache_size} - - -MergeTree ファミリーのテーブルエンジンが使用する非圧縮データ用キャッシュの最大サイズ(バイト単位)。 - -サーバー全体で共有されるキャッシュが 1 つだけ存在します。メモリはオンデマンドで割り当てられます。オプション `use_uncompressed_cache` が有効な場合にキャッシュが使用されます。 - -非圧縮キャッシュは、一部のケースでの非常に短いクエリに対して有利に働きます。 - -:::note -値が `0` の場合は無効を意味します。 - -この設定は実行時に変更でき、即座に反映されます。 -::: - - - - -## uncompressed_cache_size_ratio {#uncompressed_cache_size_ratio} - -非圧縮キャッシュにおいて(SLRU ポリシーの場合)、保護キューのサイズがキャッシュの総サイズに対して占める比率。 - - - -## url_scheme_mappers - -短縮された、またはシンボリックな URL プレフィックスをフル URL に変換するための設定。 - -例: - -```xml - - - https://{bucket}.s3.amazonaws.com - - - https://storage.googleapis.com/{bucket} - - - https://{bucket}.oss.aliyuncs.com - - -``` - - -## use_minimalistic_part_header_in_zookeeper {#use_minimalistic_part_header_in_zookeeper} - -ZooKeeper 内でのデータパートヘッダーの保存方法を指定します。この設定は [`MergeTree`](/engines/table-engines/mergetree-family) ファミリーにのみ適用されます。次のいずれかの方法で指定できます。 - -**`config.xml` ファイルの [merge_tree](#merge_tree) セクションでグローバルに指定** - -ClickHouse はサーバー上のすべてのテーブルに対してこの設定を適用します。この設定はいつでも変更できます。既存のテーブルも、設定が変更されるとその動作が変わります。 - -**テーブルごとに指定** - -テーブルを作成するときに、対応する [エンジン設定](../../engines/table-engines/mergetree-family/mergetree.md#table_engine-mergetree-creating-a-table) を指定します。この設定を持つ既存のテーブルの動作は、グローバル設定が変わっても変化しません。 - -**設定可能な値** - -- `0` — 機能を無効にします。 -- `1` — 機能を有効にします。 - -[`use_minimalistic_part_header_in_zookeeper = 1`](#use_minimalistic_part_header_in_zookeeper) の場合、[replicated](../../engines/table-engines/mergetree-family/replication.md) テーブルは、1 つの `znode` を使ってデータパートヘッダーをコンパクトに保存します。テーブルに多くのカラムが含まれている場合、この保存方法により ZooKeeper に保存されるデータ量を大幅に削減できます。 - -:::note -`use_minimalistic_part_header_in_zookeeper = 1` を適用した後は、この設定をサポートしていないバージョンの ClickHouse サーバーにダウングレードすることはできません。クラスタ内のサーバーで ClickHouse をアップグレードする際は注意してください。すべてのサーバーを一度にアップグレードしないでください。ClickHouse の新バージョンは、テスト環境やクラスタ内の一部のサーバーで事前に検証しておく方が安全です。 - -この設定を有効にした状態で既に保存されたデータパートヘッダーは、以前の(非コンパクトな)形式に復元することはできません。 -::: - - - -## user_defined_executable_functions_config - -実行可能なユーザー定義関数の設定ファイルへのパスです。 - -パス: - -* 絶対パスまたはサーバー設定ファイルからの相対パスを指定します。 -* パスにはワイルドカードの * と ? を含めることができます。 - -参照: - -* "[Executable User Defined Functions](/sql-reference/functions/udf#executable-user-defined-functions)." - -**例** - -```xml -*_function.xml -``` - - -## user_defined_path - -ユーザー定義ファイルを配置するディレクトリです。[SQL User Defined Functions](/sql-reference/functions/udf) による SQL ユーザー定義関数で使用されます。 - -**例** - -```xml -/var/lib/clickhouse/user_defined/ -``` - - -## user_directories - -各種設定を含む設定ファイル内のセクションです。 - -* 事前定義されたユーザーが記述されている設定ファイルへのパス。 -* SQL コマンドで作成されたユーザーが保存されるフォルダーへのパス。 -* SQL コマンドで作成されたユーザーが保存およびレプリケートされる ZooKeeper ノードのパス。 - -このセクションが指定されている場合、[users_config](/operations/server-configuration-parameters/settings#users_config) と [access_control_path](../../operations/server-configuration-parameters/settings.md#access_control_path) のパスは使用されません。 - -`user_directories` セクションには任意の数の項目を含めることができ、項目の並び順が優先順位を表します(上にある項目ほど優先順位が高くなります)。 - -**例** - -```xml - - - /etc/clickhouse-server/users.xml - - - /var/lib/clickhouse/access/ - - -``` - -ユーザー、ロール、行ポリシー、クオータおよびプロファイルは、ZooKeeperに保存することもできます。 - -```xml - - - /etc/clickhouse-server/users.xml - - - /clickhouse/access/ - - -``` - -セクションとして `memory` を定義することもできます。これは情報をディスクに書き込まずメモリ上のみに保持することを意味します。また、`ldap` は LDAP サーバー上に情報を保存することを意味します。 - -ローカルに定義されていないユーザーのリモートユーザーディレクトリとして LDAP サーバーを追加するには、次の設定を持つ 1 つの `ldap` セクションを定義します。 - -| Setting | Description | -| -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `server` | `ldap_servers` 設定セクションで定義された LDAP サーバー名のいずれか。このパラメータは必須で、空にはできません。 | -| `roles` | LDAP サーバーから取得された各ユーザーに割り当てられる、ローカルで定義されたロールの一覧を持つセクション。ロールが指定されていない場合、ユーザーは認証後に一切の操作を実行できません。列挙されたロールのいずれかが認証時点でローカルに定義されていない場合、認証試行は与えられたパスワードが誤っている場合と同様に失敗します。 | - -**例** - -```xml - - my_ldap_server - - - - - -``` - - -## user_files_path - -ユーザーファイルが格納されているディレクトリです。テーブル関数 [file()](../../sql-reference/table-functions/file.md)、[fileCluster()](../../sql-reference/table-functions/fileCluster.md) で使用されます。 - -**例** - -```xml -/var/lib/clickhouse/user_files/ -``` - - -## user_scripts_path - -ユーザースクリプトファイルを配置するディレクトリです。実行可能なユーザー定義関数で使用されます。詳しくは[Executable User Defined Functions](/sql-reference/functions/udf#executable-user-defined-functions)を参照してください。 - -**例** - -```xml -/var/lib/clickhouse/user_scripts/ -``` - -型: - -デフォルト値: - - -## users_config - -次の内容を含むファイルへのパスです: - -* ユーザー設定 -* アクセス権 -* 設定プロファイル -* クォータ設定 - -**例** - -```xml -users.xml -``` - - -## validate_tcp_client_information - -クエリパケットを受信したときに、クライアント情報の検証を有効にするかどうかを指定します。 - -デフォルトでは `false` です。 - -```xml -false -``` - - -## vector_similarity_index_cache_max_entries {#vector_similarity_index_cache_max_entries} - -ベクトル類似度インデックス用キャッシュのサイズ(エントリ数)。0 を指定すると無効になります。 - - - -## vector_similarity_index_cache_policy {#vector_similarity_index_cache_policy} - -ベクトル類似インデックスのキャッシュポリシー名。 - - - -## vector_similarity_index_cache_size {#vector_similarity_index_cache_size} - -ベクトル類似性インデックス用キャッシュのサイズ。0 の場合は無効になります。 - -:::note -この設定は実行時に変更でき、直ちに反映されます。 -::: - - - -## vector_similarity_index_cache_size_ratio {#vector_similarity_index_cache_size_ratio} - -ベクトル類似インデックスキャッシュにおいて、SLRU ポリシー使用時の保護キューの大きさを、キャッシュ全体のサイズに対する比率で指定します。 - - - -## wait_dictionaries_load_at_startup - - - -この設定は、`dictionaries_lazy_load` が `false` の場合の動作を指定します。 -(`dictionaries_lazy_load` が `true` の場合、この設定は何の影響も与えません。) - -`wait_dictionaries_load_at_startup` が `false` の場合、サーバーは起動時に -すべてのディクショナリのロードを開始し、そのロードと並行して接続を受け付けます。 -あるディクショナリがクエリ内で初めて使用されるとき、そのディクショナリがまだロードされていなければ、 -クエリはそのディクショナリのロードが完了するまで待機します。 -`wait_dictionaries_load_at_startup` を `false` に設定すると、ClickHouse の起動を高速化できますが、 -一部のクエリの実行が遅くなる場合があります(特定のディクショナリのロード完了を待つ必要があるため)。 - -`wait_dictionaries_load_at_startup` が `true` の場合、サーバーは起動時に -すべてのディクショナリのロード(成功/失敗を問わず)が完了するまで待機し、それが完了してから接続を受け付けます。 - -**例** - -```xml -true -``` - - -## workload_path - -すべての `CREATE WORKLOAD` および `CREATE RESOURCE` クエリの保存先として使用されるディレクトリです。デフォルトでは、サーバーのワーキングディレクトリ配下の `/workload/` ディレクトリが使用されます。 - -**例** - -```xml -/var/lib/clickhouse/workload/ -``` - -**関連項目** - -* [ワークロード階層構造](/operations/workload-scheduling.md#workloads) -* [workload_zookeeper_path](#workload_zookeeper_path) - - -## workload_zookeeper_path - -ZooKeeper ノードへのパスです。`CREATE WORKLOAD` および `CREATE RESOURCE` クエリすべての保存先として使用されます。一貫性を保つため、すべての SQL 定義はこの単一の znode の値として保存されます。デフォルトでは ZooKeeper は使用されず、定義は [disk](#workload_path) に保存されます。 - -**例** - -```xml -/clickhouse/workload/definitions.sql -``` - -**関連項目** - -* [ワークロード階層構造](/operations/workload-scheduling.md#workloads) -* [workload_path](#workload_path) - - -## zookeeper - -ClickHouse が [ZooKeeper](http://zookeeper.apache.org/) クラスターと連携するための設定を含みます。ClickHouse はレプリケーテッドテーブルを使用する際に、レプリカのメタデータを保存するために ZooKeeper を使用します。レプリケーテッドテーブルを使用しない場合、このセクションのパラメータは省略できます。 - -次の設定はサブタグで指定できます。 - -| Setting | Description | -| ------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `node` | ZooKeeper のエンドポイント。複数のエンドポイントを設定できます。例: `example_host2181`。`index` 属性は、ZooKeeper クラスターへの接続を試行する際のノードの順序を指定します。 | -| `session_timeout_ms` | クライアントセッションの最大タイムアウト(ミリ秒)。 | -| `operation_timeout_ms` | 1 回の操作の最大タイムアウト(ミリ秒)。 | -| `root` (optional) | ClickHouse サーバーが使用する znode 群に対してルートとして使用される znode。 | -| `fallback_session_lifetime.min` (optional) | プライマリが利用できないとき(ロードバランシング)のフォールバックノードに対する ZooKeeper セッション存続期間の最小制限。秒単位で指定します。デフォルト: 3 時間。 | -| `fallback_session_lifetime.max` (optional) | プライマリが利用できないとき(ロードバランシング)のフォールバックノードに対する ZooKeeper セッション存続期間の最大制限。秒単位で指定します。デフォルト: 6 時間。 | -| `identity` (optional) | 要求された znode にアクセスするために ZooKeeper が要求するユーザーとパスワード。 | -| `use_compression` (optional) | true に設定すると Keeper プロトコルで圧縮を有効にします。 | - -また、ZooKeeper ノードの選択アルゴリズムを選べる `zookeeper_load_balancing` 設定(オプション)もあります。 - -| Algorithm Name | Description | -| ------------------------------- | -------------------------------------------------------------------- | -| `random` | ZooKeeper ノードのうち 1 つをランダムに選択します。 | -| `in_order` | 最初の ZooKeeper ノードを選択し、それが利用できない場合は 2 番目、その次という順に選択します。 | -| `nearest_hostname` | サーバーのホスト名と最も類似したホスト名を持つ ZooKeeper ノードを選択します。ホスト名は名前のプレフィックスで比較されます。 | -| `hostname_levenshtein_distance` | `nearest_hostname` と同様ですが、ホスト名をレーベンシュタイン距離で比較します。 | -| `first_or_random` | 最初の ZooKeeper ノードを選択し、それが利用できない場合は残りの ZooKeeper ノードからランダムに 1 つ選択します。 | -| `round_robin` | 最初の ZooKeeper ノードを選択し、再接続が発生した場合は次のノードを選択します。 | - -**設定例** - -```xml - - - example1 - 2181 - - - example2 - 2181 - - 30000 - 10000 - - /path/to/zookeeper/node - - user:password - - random - -``` - -**関連項目** - -* [レプリケーション](../../engines/table-engines/mergetree-family/replication.md) -* [ZooKeeper プログラマーズガイド](http://zookeeper.apache.org/doc/current/zookeeperProgrammers.html) -* [ClickHouse と ZooKeeper 間のオプションのセキュア通信](/operations/ssl-zookeeper) - - -## zookeeper_log - -[`zookeeper_log`](/operations/system-tables/zookeeper_log) システムテーブルの設定です。 - -以下の設定はサブタグで指定できます。 - - - -**例** - -```xml - - - system - zookeeper_log
- 7500 - event_date + INTERVAL 1 WEEK DELETE -
-
-``` diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/settings/index.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/settings/index.md index c298e4776e4..085f5be1a0f 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/settings/index.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/settings/index.md @@ -1,35 +1,17 @@ --- -description: '設定の目次ページ' +description: "設定の目次ページ" sidebar_position: 1 slug: /operations/settings/ -title: '設定' -doc_type: 'landing-page' +title: "設定" +doc_type: "landing-page" --- -{/* このページの目次テーブルは、 - https://github.com/ClickHouse/clickhouse-docs/blob/main/scripts/autogenerate-table-of-contents.sh - によって、YAML フロントマターの slug、description、title 各フィールドから自動生成されています。 + -{/*AUTOGENERATED_START*/ } - -| ページ | 説明 | -| ------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | -| [Settings Overview](/operations/settings/overview) | 設定の概要ページ。 | -| [Permissions for queries](/operations/settings/permissions-for-queries) | クエリ権限に関する設定。 | -| [Restrictions on query complexity](/operations/settings/query-complexity) | クエリの複雑さを制限するための設定。 | -| [Settings profiles](/operations/settings/settings-profiles) | 同じ名前でグループ化された設定の集合。 | -| [Constraints on settings](/operations/settings/constraints-on-settings) | 設定に対する制約は、`user.xml` 設定ファイルの `profiles` セクションで定義でき、ユーザーが `SET` クエリを使用して一部の設定を変更することを禁止できます。 | -| [Users and roles settings](/operations/settings/settings-users) | ユーザーおよびロールを構成するための設定。 | -| [Composable protocols](/operations/settings/composable-protocols) | Composable protocols により、ClickHouse サーバーへの TCP アクセスをより柔軟に構成できます。 | -| [Format Settings](/operations/settings/formats) | 入出力フォーマットを制御する設定。 | -| [Memory overcommit](/operations/settings/memory-overcommit) | クエリごとのメモリ制限をより柔軟に設定できるようにすることを目的とした実験的な手法。 | -| [MergeTree tables settings](/operations/settings/merge-tree-settings) | `system.merge_tree_settings` にある MergeTree 用の設定。 | -| [Query-level Session Settings](/operations/settings/query-level) | クエリ単位の設定。 | -| [Server overload](/operations/settings/server-overload) | サーバー CPU 過負荷時の挙動の制御。 | -| [Session Settings](/operations/settings/settings) | `system.settings` テーブルに含まれる設定。 | -| [TCP connection limits](/operations/settings/tcp-connection-limits) | TCP 接続数の制限。 | - -{/*AUTOGENERATED_END*/ } + + diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/settings/merge-tree-settings.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/settings/merge-tree-settings.md index f18643d0419..aa5eec971ba 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/settings/merge-tree-settings.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/settings/merge-tree-settings.md @@ -1,5 +1,5 @@ --- -description: '`system.merge_tree_settings` にある MergeTree 用の設定' +description: '`system.merge_tree_settings` に含まれる MergeTree の設定' slug: /operations/settings/merge-tree-settings title: 'MergeTree テーブルの設定' doc_type: 'reference' @@ -10,13 +10,13 @@ import BetaBadge from '@theme/badges/BetaBadge'; import SettingsInfoBlock from '@theme/SettingsInfoBlock/SettingsInfoBlock'; import VersionHistory from '@theme/VersionHistory/VersionHistory'; -システムテーブル `system.merge_tree_settings` には、グローバルに有効な MergeTree 設定が表示されます。 +システムテーブル `system.merge_tree_settings` には、グローバルに設定されている MergeTree の設定が表示されます。 -MergeTree の設定は、サーバー設定ファイル内の `merge_tree` セクションで設定するか、`CREATE TABLE` 文の `SETTINGS` 句で各 `MergeTree` テーブルごとに個別に指定できます。 +MergeTree の設定は、サーバー設定ファイルの `merge_tree` セクションで設定するか、`CREATE TABLE` 文の `SETTINGS` 句で個々の `MergeTree` テーブルごとに指定できます。 -`max_suspicious_broken_parts` 設定をカスタマイズする例: +設定 `max_suspicious_broken_parts` をカスタマイズする例: -サーバー設定ファイル内で、すべての `MergeTree` テーブルに対するデフォルト値を設定します: +すべての `MergeTree` テーブルに対するデフォルト値をサーバー設定ファイルで設定します: ```text @@ -24,7 +24,7 @@ MergeTree の設定は、サーバー設定ファイル内の `merge_tree` セ ``` -特定のテーブルに対する設定: +特定のテーブル用の設定: ```sql CREATE TABLE tab @@ -36,7 +36,7 @@ ORDER BY tuple() SETTINGS max_suspicious_broken_parts = 500; ``` -特定のテーブルの設定は、`ALTER TABLE ... MODIFY SETTING` を使用して変更します。 +特定のテーブルの設定は `ALTER TABLE ... MODIFY SETTING` を使用して変更します。 ```sql ALTER TABLE tab MODIFY SETTING max_suspicious_broken_parts = 100; @@ -48,3107 +48,6 @@ ALTER TABLE tab RESET SETTING max_suspicious_broken_parts; ## MergeTree の設定 -{/* 以下の設定は、次のスクリプトにより自動生成されています +{/* 以下の設定は、次のスクリプトによって自動生成されたものです https://github.com/ClickHouse/clickhouse-docs/blob/main/scripts/settings/autogenerate-settings.sh */ } - -## adaptive_write_buffer_initial_size - - - -アダプティブな書き込みバッファの初期サイズ - - -## add_implicit_sign_column_constraint_for_collapsing_engine {#add_implicit_sign_column_constraint_for_collapsing_engine} - - -true の場合は、CollapsingMergeTree または VersionedCollapsingMergeTree テーブルの `sign` 列に対して、 -有効な値(`1` および `-1`)のみを許可する暗黙の制約を追加します。 - - - -## add_minmax_index_for_numeric_columns {#add_minmax_index_for_numeric_columns} - - - - -有効にすると、テーブル内のすべての数値カラムに min-max(スキップ)インデックスが作成されます。 - - - -## add_minmax_index_for_string_columns {#add_minmax_index_for_string_columns} - - - - -有効にすると、テーブル内のすべての文字列カラムに min-max(スキップ)インデックスが追加されます。 - - - -## allow_coalescing_columns_in_partition_or_order_key {#allow_coalescing_columns_in_partition_or_order_key} - - - - -有効にすると、`CoalescingMergeTree` テーブル内の coalescing 対象カラムをパーティションキーまたはソートキーとして使用できるようになります。 - - - -## allow_experimental_replacing_merge_with_cleanup {#allow_experimental_replacing_merge_with_cleanup} - - - - -`is_deleted` カラムを持つ ReplacingMergeTree に対して、実験的な CLEANUP マージを許可します。有効化すると、`OPTIMIZE ... FINAL CLEANUP` を使用して、パーティション内のすべてのパーツを手動で 1 つのパーツにマージし、削除済み行を削除できるようになります。 - -また、`min_age_to_force_merge_seconds`、`min_age_to_force_merge_on_partition_only`、`enable_replacing_merge_with_cleanup_for_min_age_to_force_merge` の各設定を使用して、この種のマージをバックグラウンドで自動的に実行できるようにもなります。 - - - -## allow_experimental_reverse_key - - - - - - - -MergeTree のソートキーで降順ソートをサポートします。 -この設定は特に時系列分析や Top-N クエリに有用であり、データを逆時系列で -保存することでクエリパフォーマンスを最適化できます。 - -`allow_experimental_reverse_key` を有効にすると、MergeTree テーブルの -`ORDER BY` 句の中で降順ソートを定義できます。これにより、降順クエリに対して -`ReadInReverseOrder` ではなく、より効率的な `ReadInOrder` 最適化を利用できるようになります。 - -**例** - -```sql -CREATE TABLE example -( -time DateTime, -key Int32, -value String -) ENGINE = MergeTree -ORDER BY (time DESC, key) -- time フィールドを降順で指定 -SETTINGS allow_experimental_reverse_key = 1; - -SELECT * FROM example WHERE key = 'xxx' ORDER BY time DESC LIMIT 10; -``` - -クエリで `ORDER BY time DESC` を指定すると、`ReadInOrder` が適用されます。 - -**デフォルト値:** false - - -## allow_floating_point_partition_key {#allow_floating_point_partition_key} - - -パーティションキーとして浮動小数点数の使用を許可します。 - -取りうる値: -- `0` — 浮動小数点数のパーティションキーは許可されません。 -- `1` — 浮動小数点数のパーティションキーが許可されます。 - - - -## allow_nullable_key {#allow_nullable_key} - - -`Nullable` 型を主キーに使用することを許可します。 - - - -## allow_part_offset_column_in_projections {#allow_part_offset_column_in_projections} - - - - -プロジェクションに対する `SELECT` クエリで `_part_offset` 列の使用を許可します。 - - - -## allow_reduce_blocking_parts_task {#allow_reduce_blocking_parts_task} - - - - -共有 MergeTree テーブルのブロッキングパーツを減らすバックグラウンドタスクです。 -ClickHouse Cloud でのみ利用可能です。 - - - -## allow_remote_fs_zero_copy_replication {#allow_remote_fs_zero_copy_replication} - - - - -本番環境ではこの設定を使用しないでください。まだ本番利用できる状態ではありません。 - - - -## allow_summing_columns_in_partition_or_order_key {#allow_summing_columns_in_partition_or_order_key} - - - - -有効にすると、SummingMergeTree テーブルの合計列をパーティションキーまたはソートキーに使用できるようになります。 - - - -## allow_suspicious_indices {#allow_suspicious_indices} - - -同一の式を使用するプライマリ/セカンダリインデックスおよびソートキーを拒否する - - - -## allow_vertical_merges_from_compact_to_wide_parts {#allow_vertical_merges_from_compact_to_wide_parts} - - -コンパクトパーツからワイドパーツへの垂直マージを許可します。この設定は、すべてのレプリカで同一の値でなければなりません。 - - - -## alter_column_secondary_index_mode {#alter_column_secondary_index_mode} - - - - -セカンダリインデックスによってカバーされている列を変更する `ALTER` コマンドを許可するかどうか、また許可する場合にどのような動作を行うかを設定します。デフォルトでは、このような `ALTER` コマンドは許可され、インデックスは再構築されます。 - -設定可能な値: -- `rebuild` (default): `ALTER` コマンド内の列によって影響を受けるすべてのセカンダリインデックスを再構築します。 -- `throw`: セカンダリインデックスでカバーされている列に対するあらゆる `ALTER` を、例外をスローして禁止します。 -- `drop`: 依存しているセカンダリインデックスを削除します。新しいパーツにはインデックスが存在しないため、それらを再作成するには `MATERIALIZE INDEX` が必要です。 -- `compatibility`: 元の動作に合わせます: `ALTER ... MODIFY COLUMN` では `throw`、`ALTER ... UPDATE/DELETE` では `rebuild` となります。 -- `ignore`: 上級者向けの設定です。インデックスを不整合な状態のままにし、誤ったクエリ結果が返される可能性があります。 - - - -## always_fetch_merged_part {#always_fetch_merged_part} - - -true の場合、このレプリカは自らパーツをマージせず、常に他のレプリカからマージ済みパーツをダウンロードします。 - -使用可能な値: -- true, false - - - -## always_use_copy_instead_of_hardlinks {#always_use_copy_instead_of_hardlinks} - - -ミューテーション、リプレース、デタッチなどの操作時には、ハードリンクではなく常にデータをコピーします。 - - - -## apply_patches_on_merge {#apply_patches_on_merge} - - - - -`true` の場合、マージ時にパッチパーツが適用されます。 - - - -## assign_part_uuids {#assign_part_uuids} - - -有効にすると、新しいパーツごとに一意のパーツ識別子が割り当てられます。 -有効化する前に、すべてのレプリカが UUID バージョン 4 をサポートしていることを確認してください。 - - - -## async_block_ids_cache_update_wait_ms {#async_block_ids_cache_update_wait_ms} - - -各挿入イテレーションが async_block_ids_cache の更新を待機する最大時間 - - - -## async_insert {#async_insert} - - -true の場合、INSERT クエリのデータはキューに格納され、その後バックグラウンドでテーブルに書き込まれます。 - - - -## auto_statistics_types {#auto_statistics_types} - - - - -すべての対象となるカラムで自動的に計算される統計タイプを、カンマ区切りで指定するリスト。 -サポートされている統計タイプ:tdigest, countmin, minmax, uniq。 - - - -## background_task_preferred_step_execution_time_ms {#background_task_preferred_step_execution_time_ms} - - -マージまたはミューテーションの 1 ステップの実行時間に対する目標値。 -1 ステップの処理に時間がかかる場合は、この値を超えることがあります。 - - - -## cache_populated_by_fetch {#cache_populated_by_fetch} - - -:::note -この設定は ClickHouse Cloud にのみ適用されます。 -::: - -`cache_populated_by_fetch` が無効(デフォルト設定)の場合、新しいデータパーツは、 -それらのパーツを必要とするクエリが実行されたときにのみキャッシュにロードされます。 - -有効化されている場合、`cache_populated_by_fetch` により、クエリによるトリガーを必要とせずに、 -すべてのノードがストレージから新しいデータパーツをキャッシュにロードするようになります。 - -**関連項目** - -- [ignore_cold_parts_seconds](/operations/settings/settings#ignore_cold_parts_seconds) -- [prefer_warmed_unmerged_parts_seconds](/operations/settings/settings#prefer_warmed_unmerged_parts_seconds) -- [cache_warmer_threads](/operations/settings/settings#cache_warmer_threads) - - - -## cache_populated_by_fetch_filename_regexp {#cache_populated_by_fetch_filename_regexp} - - - - -:::note -この設定は ClickHouse Cloud にのみ適用されます。 -::: - -空でない場合は、この正規表現にマッチするファイルのみが、fetch 後にキャッシュへプリウォームされます(`cache_populated_by_fetch` が有効になっている場合)。 - - - -## check_delay_period {#check_delay_period} - -廃止済みの設定で、効果はありません。 -## check_sample_column_is_correct {#check_sample_column_is_correct} - - -テーブル作成時に、サンプリングまたはサンプリング式用の列のデータ型が正しいかどうかをチェックします。 -データ型は、`UInt8`、`UInt16`、`UInt32`、`UInt64` のいずれかの符号なし -[整数型](/sql-reference/data-types/int-uint) でなければなりません。 - -設定可能な値: -- `true` — チェックを有効にします。 -- `false` — テーブル作成時のチェックを無効にします。 - -デフォルト値: `true`。 - -デフォルトでは、ClickHouse サーバーはテーブル作成時に、サンプリングまたはサンプリング式用の列のデータ型をチェックします。すでに不正なサンプリング式を持つテーブルが存在しており、サーバーの起動時に例外がスローされるのを避けたい場合は、`check_sample_column_is_correct` を `false` に設定してください。 - - - -## clean_deleted_rows {#clean_deleted_rows} - -廃止された設定で、何も行いません。 -## cleanup_delay_period {#cleanup_delay_period} - - -古いキューのログ、ブロックのハッシュおよびパーツをクリーンアップするための最小間隔。 - - - -## cleanup_delay_period_random_add {#cleanup_delay_period_random_add} - - -多数のテーブルが存在する場合に、`cleanup_delay_period` に 0〜x 秒の一様分布の乱数値を加算することで、 -一斉アクセス(thundering herd)による輻輳と、それに続く ZooKeeper への DoS を回避します。 - - - -## cleanup_thread_preferred_points_per_iteration {#cleanup_thread_preferred_points_per_iteration} - - -バックグラウンドでのクリーンアップ処理における推奨バッチサイズです(ポイントは抽象的な単位ですが、1ポイントはおおよそ挿入されたブロック1個に相当します)。 - - - -## cleanup_threads {#cleanup_threads} - -廃止された設定で、現在は何も行いません。 -## columns_and_secondary_indices_sizes_lazy_calculation {#columns_and_secondary_indices_sizes_lazy_calculation} - - - - -テーブルの初期化時ではなく、最初のリクエスト時に列およびセカンダリインデックスのサイズを遅延的に計算します。 - - - -## columns_to_prewarm_mark_cache {#columns_to_prewarm_mark_cache} - - -マークキャッシュを事前ウォームする対象のカラム一覧(この設定が有効な場合)。空の場合は全カラムが対象になります - - - -## compact_parts_max_bytes_to_buffer {#compact_parts_max_bytes_to_buffer} - - -ClickHouse Cloud でのみ利用可能です。コンパクトパーツ内で 1 つのストライプに書き込むバイト数の最大値です。 - - - -## compact_parts_max_granules_to_buffer {#compact_parts_max_granules_to_buffer} - - -ClickHouse Cloud でのみ利用可能です。コンパクトパーツ内で 1 つのストライプに書き込むグラニュール数の上限を指定します。 - - - -## compact_parts_merge_max_bytes_to_prefetch_part {#compact_parts_merge_max_bytes_to_prefetch_part} - - -ClickHouse Cloud でのみ利用可能です。マージ処理中にコンパクトパーツ全体をメモリに読み込む際の最大サイズ。 - - - -## compatibility_allow_sampling_expression_not_in_primary_key {#compatibility_allow_sampling_expression_not_in_primary_key} - - -サンプリング式がプライマリキーに含まれていないテーブルを作成できるようにします。これは、後方互換性のために、誤った定義のテーブルを含むサーバーを一時的に稼働させる必要がある場合にのみ利用します。 - - - -## compress_marks {#compress_marks} - - -マークの圧縮をサポートし、マークファイルのサイズを削減してネットワーク転送を高速化します。 - - - -## compress_primary_key {#compress_primary_key} - - -主キーの圧縮をサポートし、主キーのファイルサイズを削減してネットワーク転送を高速化します。 - - - -## concurrent_part_removal_threshold {#concurrent_part_removal_threshold} - - -非アクティブなデータパーツ数がこの値以上の場合にのみ、 -パーツの並行削除(`max_part_removal_threads` を参照)を有効化します。 - - - -## deduplicate_merge_projection_mode {#deduplicate_merge_projection_mode} - - - - -クラシックではない MergeTree、すなわち (Replicated, Shared) MergeTree ではない MergeTree を使用するテーブルに対して、プロジェクションの作成を許可するかどうかを指定します。`ignore` オプションは互換性維持のためだけに存在し、誤った結果をもたらす可能性があります。作成を許可する場合、マージ時にプロジェクションをドロップするか再構築するか、どのアクションを取るかを指定します。クラシックな MergeTree はこの設定を無視します。この設定は `OPTIMIZE DEDUPLICATE` にも影響し、MergeTree ファミリーのすべてのメンバーに適用されます。`lightweight_mutation_projection_mode` オプションと同様に、パーツ単位の設定です。 - -設定可能な値: -- `ignore` -- `throw` -- `drop` -- `rebuild` - - - -## default_compression_codec {#default_compression_codec} - - - - -テーブル定義で特定のカラムに対して圧縮コーデックが定義されていない場合に使用される、デフォルトの圧縮コーデックを指定します。 -カラムに対する圧縮コーデックが選択される優先順位: -1. テーブル定義内でそのカラムに対して定義された圧縮コーデック -2. `default_compression_codec`(この設定)で定義された圧縮コーデック -3. `compression` 設定で定義されたデフォルトの圧縮コーデック - -デフォルト値: 空文字列(未設定)。 - - - -## detach_not_byte_identical_parts {#detach_not_byte_identical_parts} - - -マージまたはミューテーションの後に、他のレプリカ上のデータパーツとバイトレベルで同一ではない場合、そのレプリカ上のデータパーツをデタッチするかどうかを有効または無効にします。無効の場合、データパーツは削除されます。そのようなパーツを後で分析したい場合は、この設定を有効にします。 - -この設定は、[データレプリケーション](/engines/table-engines/mergetree-family/replacingmergetree) を有効にした `MergeTree` テーブルに適用されます。 - -設定可能な値: - -- `0` — パーツを削除します。 -- `1` — パーツをデタッチします。 - - - -## detach_old_local_parts_when_cloning_replica {#detach_old_local_parts_when_cloning_replica} - - -失われたレプリカを修復する際に、古いローカルパーツを削除しないようにします。 - -取り得る値: -- `true` -- `false` - - - -## disable_detach_partition_for_zero_copy_replication {#disable_detach_partition_for_zero_copy_replication} - - -ゼロコピーレプリケーションに対する `DETACH PARTITION` クエリを無効にします。 - - - -## disable_fetch_partition_for_zero_copy_replication {#disable_fetch_partition_for_zero_copy_replication} - - -ゼロコピー レプリケーションでの `FETCH PARTITION` クエリを無効化します。 - - - -## disable_freeze_partition_for_zero_copy_replication {#disable_freeze_partition_for_zero_copy_replication} - - -ゼロコピーレプリケーションでの `FREEZE PARTITION` クエリを無効にします。 - - - -## disk {#disk} - - -ストレージディスクの名前。`storage_policy` の代わりに指定できます。 - - - -## dynamic_serialization_version {#dynamic_serialization_version} - - - - -Dynamic データ型のシリアル化バージョン。互換性を保つために必要です。 - -設定可能な値: -- `v1` -- `v2` -- `v3` - - - -## enable_block_number_column {#enable_block_number_column} - - -各行ごとに `_block_number` 列を永続化します。 - - - -## enable_block_offset_column {#enable_block_offset_column} - - -マージ時に仮想カラム `_block_number` を永続化します。 - - - -## enable_index_granularity_compression {#enable_index_granularity_compression} - - -可能な場合は、インデックス粒度の値をメモリ上で圧縮します - - - -## enable_max_bytes_limit_for_min_age_to_force_merge {#enable_max_bytes_limit_for_min_age_to_force_merge} - - - - -設定 `min_age_to_force_merge_seconds` および -`min_age_to_force_merge_on_partition_only` が、設定 -`max_bytes_to_merge_at_max_space_in_pool` に従うかどうかを制御します。 - -設定可能な値: -- `true` -- `false` - - - -## enable_mixed_granularity_parts {#enable_mixed_granularity_parts} - - -`index_granularity_bytes` 設定を使用してグラニュールサイズを制御するモードへの切り替えを有効または無効にします。バージョン 19.11 より前は、グラニュールサイズを制限するための設定は `index_granularity` のみでした。 -`index_granularity_bytes` 設定は、大きな行(数十〜数百メガバイト)を含むテーブルからデータを選択する場合に、ClickHouse のパフォーマンスを向上させます。 -行サイズの大きいテーブルがある場合は、そのテーブルに対してこの設定を有効にすると、`SELECT` クエリの効率を改善できます。 - - - -## enable_replacing_merge_with_cleanup_for_min_age_to_force_merge {#enable_replacing_merge_with_cleanup_for_min_age_to_force_merge} - - - - - - -パーティションを単一のパーツにマージする際に、ReplacingMergeTree に対して CLEANUP マージを使用するかどうかを指定します。`allow_experimental_replacing_merge_with_cleanup`、`min_age_to_force_merge_seconds`、`min_age_to_force_merge_on_partition_only` を有効にしておく必要があります。 - -指定可能な値: -- `true` -- `false` - - - -## enable_the_endpoint_id_with_zookeeper_name_prefix {#enable_the_endpoint_id_with_zookeeper_name_prefix} - - -レプリケーテッド MergeTree テーブルで、ZooKeeper 名のプレフィックス付きエンドポイント ID を有効にします。 - - - -## enable_vertical_merge_algorithm {#enable_vertical_merge_algorithm} - - -Vertical マージアルゴリズムの使用を有効にします。 - - - -## enforce_index_structure_match_on_partition_manipulation {#enforce_index_structure_match_on_partition_manipulation} - - - - -パーティション操作クエリ(`ATTACH/MOVE/REPLACE PARTITION`)の宛先テーブルに対してこの設定を有効にすると、インデックスとプロジェクションは元のテーブルと宛先テーブルで同一である必要があります。無効な場合は、宛先テーブルのインデックスおよびプロジェクションは元のテーブルの上位集合であってもかまいません。 - - - -## escape_variant_subcolumn_filenames {#escape_variant_subcolumn_filenames} - - - - -MergeTree テーブルの Wide パーツにおける Variant データ型のサブカラム用に作成されるファイル名内の特殊文字をエスケープします。互換性維持のために必要です。 - - - -## exclude_deleted_rows_for_part_size_in_merge {#exclude_deleted_rows_for_part_size_in_merge} - - -有効にすると、パーツをマージする際に、データパーツの実効サイズの推定値(つまり、`DELETE FROM` によって削除された行を除いたサイズ)が使用されます。なお、この挙動が適用されるのは、この設定を有効にした後に実行された `DELETE FROM` によって影響を受けたデータパーツのみです。 - -可能な値: -- `true` -- `false` - -**関連項目** -- [load_existing_rows_count_for_old_parts](#load_existing_rows_count_for_old_parts) 設定 - - - -## exclude_materialize_skip_indexes_on_merge - - - -マージ処理中に構築および保存される対象から、カンマ区切りリストで指定されたスキップインデックスを除外します。 -[materialize_skip_indexes_on_merge](#materialize_skip_indexes_on_merge) が `false` の場合は効果がありません。 - -除外されたスキップインデックスも、明示的な -[MATERIALIZE INDEX](/sql-reference/statements/alter/skipping-index.md/#materialize-index) クエリ、または -[materialize_skip_indexes_on_insert](/operations/settings/settings.md/#materialize_skip_indexes_on_insert) -セッション設定に応じて INSERT 時にも構築および保存されます。 - -例: - -```sql -CREATE TABLE tab -( -a UInt64, -b UInt64, -INDEX idx_a a TYPE minmax, -INDEX idx_b b TYPE set(3) -) -ENGINE = MergeTree ORDER BY tuple() SETTINGS exclude_materialize_skip_indexes_on_merge = 'idx_a'; - -INSERT INTO tab SELECT number, number / 50 FROM numbers(100); -- この設定はINSERT時には影響しません - --- idx_aはバックグラウンドマージまたはOPTIMIZE TABLE FINALによる明示的なマージ中の更新から除外されます - --- リストを指定することで複数のインデックスを除外できます -ALTER TABLE tab MODIFY SETTING exclude_materialize_skip_indexes_on_merge = 'idx_a, idx_b'; - --- デフォルト設定、マージ中の更新から除外されるインデックスはありません -ALTER TABLE tab MODIFY SETTING exclude_materialize_skip_indexes_on_merge = ''; -``` - - -## execute_merges_on_single_replica_time_threshold {#execute_merges_on_single_replica_time_threshold} - - -この設定が 0 より大きい値に設定されている場合、1 つのレプリカのみが直ちにマージを開始し、他のレプリカはローカルでマージを実行する代わりに、その時間まで結果のダウンロードを待機します。選択されたレプリカがその時間内にマージを完了しない場合は、標準的な動作にフォールバックします。 - -可能な値: -- 任意の正の整数。 - - - -## fault_probability_after_part_commit {#fault_probability_after_part_commit} - - -テスト目的の設定です。変更しないでください。 - - - -## fault_probability_before_part_commit {#fault_probability_before_part_commit} - - -テスト目的の設定です。変更しないでください。 - - - -## finished_mutations_to_keep {#finished_mutations_to_keep} - - -完了したミューテーションに関する記録をいくつ保持するかを指定します。0 の場合は、すべてを保持します。 - - - -## force_read_through_cache_for_merges {#force_read_through_cache_for_merges} - - - - -マージ時の読み取りを必ずファイルシステムキャッシュ経由にする - - - -## fsync_after_insert {#fsync_after_insert} - - -挿入された各パーツに対して `fsync` を実行します。 -挿入処理のパフォーマンスを大幅に低下させるため、`wide parts` との併用は推奨されません。 - - - -## fsync_part_directory {#fsync_part_directory} - - -すべてのパート操作(書き込み、リネームなど)の完了後に、パートディレクトリに対して `fsync` を実行します。 - - - -## in_memory_parts_enable_wal {#in_memory_parts_enable_wal} - -廃止された設定であり、効果はありません。 -## in_memory_parts_insert_sync {#in_memory_parts_insert_sync} - -廃止された設定であり、効果はありません。 -## inactive_parts_to_delay_insert {#inactive_parts_to_delay_insert} - - -テーブル内の単一パーティションに存在する非アクティブなパーツの数が -`inactive_parts_to_delay_insert` の値を超えた場合、`INSERT` は意図的に -遅延されます。 - -:::tip -サーバーがパーツを十分な速度でクリーンアップできない場合に有用です。 -::: - -可能な値: -- 任意の正の整数。 - - - -## inactive_parts_to_throw_insert {#inactive_parts_to_throw_insert} - - -単一パーティション内の非アクティブパーツの数が -`inactive_parts_to_throw_insert` の値を超えると、`INSERT` は次のエラーで中断されます: - -> "Too many inactive parts (N). Parts cleaning are processing significantly -slower than inserts" exception." - -設定可能な値: -- 任意の正の整数。 - - - -## index_granularity {#index_granularity} - - -インデックスのマーク間に含めることのできるデータ行の最大数です。つまり、1 つのプライマリキー値に対応する行数です。 - - - -## index_granularity_bytes {#index_granularity_bytes} - - -データグラニュールの最大サイズ(バイト単位)。 - -グラニュールのサイズを行数のみで制限するには、`0` を設定します(推奨されません)。 - - - -## initialization_retry_period {#initialization_retry_period} - - -テーブルの初期化を再試行する間隔(秒)。 - - - -## kill_delay_period {#kill_delay_period} - -廃止された設定であり、何も行いません。 -## kill_delay_period_random_add {#kill_delay_period_random_add} - -廃止された設定であり、何も行いません。 -## kill_threads {#kill_threads} - -廃止された設定であり、何も行いません。 -## lightweight_mutation_projection_mode {#lightweight_mutation_projection_mode} - - -デフォルトでは、軽量な削除 `DELETE` はプロジェクションを持つテーブルでは動作しません。これは、プロジェクション内の行が `DELETE` 操作の影響を受ける可能性があるためです。そのため、デフォルト値は `throw` になっています。ただし、この設定で動作を変更できます。値を `drop` または `rebuild` のいずれかにすると、プロジェクションを持つテーブルでも削除が動作するようになります。`drop` はプロジェクション自体を削除するため、現在のクエリではプロジェクション削除分だけ高速になる可能性がありますが、その後はプロジェクションが存在しないため、将来のクエリが低速になる可能性があります。`rebuild` はプロジェクションを再構築するため、現在のクエリのパフォーマンスに影響を与える可能性がありますが、将来のクエリは高速化される可能性があります。なお、これらのオプションはパーツ単位でのみ動作します。つまり、対象にならないパーツ内のプロジェクションは、そのまま保持され、`drop` や `rebuild` のようなアクションはトリガーされません。 - -可能な値: -- `throw` -- `drop` -- `rebuild` - - - -## load_existing_rows_count_for_old_parts {#load_existing_rows_count_for_old_parts} - - -[exclude_deleted_rows_for_part_size_in_merge](#exclude_deleted_rows_for_part_size_in_merge) と併せて有効化すると、 -既存のデータパーツに対する削除済み行数がテーブルの -起動時に計算されます。テーブル起動時の読み込みが遅くなる可能性がある点に注意してください。 - -設定可能な値: -- `true` -- `false` - -**関連項目** -- [exclude_deleted_rows_for_part_size_in_merge](#exclude_deleted_rows_for_part_size_in_merge) 設定 - - - -## lock_acquire_timeout_for_background_operations {#lock_acquire_timeout_for_background_operations} - - -マージやミューテーションなどのバックグラウンド処理において、テーブルロックの取得を失敗とみなすまでの秒数。 - - - -## marks_compress_block_size {#marks_compress_block_size} - - -マークの圧縮ブロックサイズであり、圧縮されるブロックの実際のサイズです。 - - - -## marks_compression_codec {#marks_compression_codec} - - -マークに使用される圧縮コーデックです。マークは十分に小さくキャッシュされるため、デフォルトの圧縮方式は ZSTD(3) です。 - - - -## materialize_skip_indexes_on_merge {#materialize_skip_indexes_on_merge} - - - - -有効にすると、マージ処理時に新しいパーツに対してスキップインデックスを構築して保存します。 -無効な場合、スキップインデックスは明示的な [MATERIALIZE INDEX](/sql-reference/statements/alter/skipping-index.md/#materialize-index) -または [INSERT 時](/operations/settings/settings.md/#materialize_skip_indexes_on_insert) に作成・保存されます。 - -より細かく制御するには [exclude_materialize_skip_indexes_on_merge](#exclude_materialize_skip_indexes_on_merge) も参照してください。 - - - -## materialize_ttl_recalculate_only {#materialize_ttl_recalculate_only} - - -MATERIALIZE TTL 実行時にのみ TTL 情報を再計算します - - - -## max_avg_part_size_for_too_many_parts {#max_avg_part_size_for_too_many_parts} - - -`parts_to_delay_insert` と `parts_to_throw_insert` に基づく「too many parts」チェックは、該当するパーティション内の平均パーツサイズが指定したしきい値以下の場合にのみ有効になります。平均パーツサイズが指定したしきい値を超える場合、INSERT は遅延も拒否もされません。これにより、パーツがより大きなパーツへと正常にマージされている限り、単一サーバー上の単一テーブルに数百テラバイトのデータを保持することができます。これは、非アクティブなパーツ数やパーツ総数に基づくしきい値には影響しません。 - - - -## max_bytes_to_merge_at_max_space_in_pool {#max_bytes_to_merge_at_max_space_in_pool} - - -十分なリソースが利用可能な場合に、1 つのパーツへマージされるパーツ全体の最大サイズ(バイト単位)。自動バックグラウンドマージによって作成されうるパーツの最大サイズのおおよその上限に相当します。(0 の場合、マージは無効化されます) - -設定可能な値: - -- 0 以上の整数。 - -マージスケジューラは定期的にパーティション内のパーツのサイズと数を分析し、プール内に十分な空きリソースがある場合はバックグラウンドマージを開始します。マージは、ソースパーツの合計サイズが `max_bytes_to_merge_at_max_space_in_pool` を超えるまで実行されます。 - -[OPTIMIZE FINAL](/sql-reference/statements/optimize) によって開始されるマージは `max_bytes_to_merge_at_max_space_in_pool` を無視します(空きディスク容量のみが考慮されます)。 - - - -## max_bytes_to_merge_at_min_space_in_pool {#max_bytes_to_merge_at_min_space_in_pool} - - -バックグラウンドプール内で使用可能なリソースが最小限しかない場合に、1 つのパートへマージできるパート全体の最大サイズ(バイト数)。 - -設定可能な値: -- 任意の正の整数。 - -`max_bytes_to_merge_at_min_space_in_pool` は、(プール内の)利用可能なディスク容量が不足していてもマージ可能なパートの合計サイズの上限を定義します。これは、小さなパートの数と `Too many parts` エラーが発生する可能性を減らすために必要です。 -マージ処理は、マージ対象パートの合計サイズを 2 倍したディスク容量を事前に確保します。 -そのため、空きディスク容量が少ない場合には、空き容量自体は存在していても、その容量が進行中の大きなマージ処理によってすでに確保されているため、他のマージを開始できず、挿入のたびに小さなパートの数が増加していく状況が発生する可能性があります。 - - - -## max_cleanup_delay_period {#max_cleanup_delay_period} - - -古いキューログ、ブロックハッシュ、およびパーツをクリーンアップするまでの最大期間。 - - - -## max_compress_block_size {#max_compress_block_size} - - -テーブルへの書き込み時に、圧縮を行う前の非圧縮データブロックの最大サイズです。この設定はグローバル設定でも指定できます([max_compress_block_size](/operations/settings/merge-tree-settings#max_compress_block_size) 設定を参照)。テーブル作成時に指定した値は、この設定のグローバル値を上書きします。 - - - -## max_concurrent_queries - - - -MergeTree テーブルに関連するクエリの同時実行数の上限。 -クエリ数は、他の `max_concurrent_queries` 設定によっても引き続き制限されます。 - -設定可能な値: - -* 正の整数。 -* `0` — 制限なし。 - -デフォルト値: `0`(制限なし)。 - -**例** - -```xml -50 -``` - - -## max_delay_to_insert - - - -単位は秒で、1つのパーティション内のアクティブパーツ数が -[parts_to_delay_insert](#parts_to_delay_insert) の値を超えた場合に、 -`INSERT` の遅延時間を計算するために使用されます。 - -設定可能な値: - -* 任意の正の整数。 - -`INSERT` の遅延時間 (ミリ秒単位) は次の式で計算されます: - -```code -max_k = parts_to_throw_insert - parts_to_delay_insert -k = 1 + parts_count_in_partition - parts_to_delay_insert -delay_milliseconds = pow(max_delay_to_insert * 1000, k / max_k) -``` - -例えば、あるパーティションにアクティブなパーツが 299 個あり、parts_to_throw_insert = 300、parts_to_delay_insert = 150、max_delay_to_insert = 1 の場合、`INSERT` は `pow( 1 * 1000, (1 + 299 - 150) / (300 - 150) ) = 1000` ミリ秒遅延されます。 - -バージョン 23.1 以降では、この式は次のように変更されました。 - -```code -allowed_parts_over_threshold = parts_to_throw_insert - parts_to_delay_insert -parts_over_threshold = parts_count_in_partition - parts_to_delay_insert + 1 -delay_milliseconds = max(min_delay_to_insert_ms, (max_delay_to_insert * 1000) -* parts_over_threshold / allowed_parts_over_threshold) -``` - -たとえば、あるパーティションに 224 個のアクティブなパーツがあり、parts_to_throw_insert = 300、parts_to_delay_insert = 150、max_delay_to_insert = 1、min_delay_to_insert_ms = 10 の場合、`INSERT` の実行は `max( 10, 1 * 1000 * (224 - 150 + 1) / (300 - 150) ) = 500` ミリ秒だけ遅延します。 - - -## max_delay_to_mutate_ms {#max_delay_to_mutate_ms} - - -未完了のミューテーションが多数存在する場合に、MergeTree テーブルへのミューテーション適用を遅延させる最大時間(ミリ秒単位) - - - -## max_digestion_size_per_segment {#max_digestion_size_per_segment} - - - - - -廃止された設定であり、何も行いません。 -## max_file_name_length {#max_file_name_length} - - -ファイル名をハッシュせず、そのまま保持できる最大の長さ。 -設定 `replace_long_file_name_to_hash` が有効な場合にのみ有効です。 -この設定値にはファイル拡張子の長さは含まれません。そのため、 -ファイルシステムエラーを避けるために、最大ファイル名長(通常は255バイト) -よりいくらか余裕を持って小さい値に設定することを推奨します。 - - - -## max_files_to_modify_in_alter_columns {#max_files_to_modify_in_alter_columns} - - -変更(削除、追加)の対象となるファイル数がこの設定値を超える場合は、ALTER を適用しないでください。 - -取りうる値: - -- 任意の正の整数。 - -デフォルト値: 75 - - - -## max_files_to_remove_in_alter_columns {#max_files_to_remove_in_alter_columns} - - -削除対象となるファイル数がこの設定値より多い場合、ALTER は適用されません。 - -可能な値: -- 任意の正の整数。 - - - -## max_merge_delayed_streams_for_parallel_write {#max_merge_delayed_streams_for_parallel_write} - - - - -並列でフラッシュ処理を行えるストリーム(カラム)の最大数です -(マージにおける max_insert_delayed_streams_for_parallel_write の類似設定)。Vertical マージに対してのみ有効です。 - - - -## max_merge_selecting_sleep_ms {#max_merge_selecting_sleep_ms} - - -マージ対象のパーツが一つも選択されなかった後に、再度マージ対象のパーツを選択しようとするまで待機する最大時間。値を小さくすると、`background_schedule_pool` でのタスク選択が頻繁にトリガーされ、大規模クラスターでは ZooKeeper へのリクエストが大量に発生する可能性があります。 - - - -## max_number_of_merges_with_ttl_in_pool {#max_number_of_merges_with_ttl_in_pool} - -プール内の TTL を伴うマージ数が指定値を超えている場合、新たな TTL 付きマージは割り当てません。これは通常のマージ用にスレッドを確保し、"Too many parts" エラーを回避するためです。 - - - -## max_number_of_mutations_for_replica {#max_number_of_mutations_for_replica} - - -レプリカごとのパーツのミューテーション数を、指定した値に制限します。 -0 の場合、レプリカごとのミューテーション数に上限はありません(ただし、実行自体は他の設定によって制限される場合があります)。 - - - -## max_part_loading_threads {#max_part_loading_threads} - -廃止されており、現在は効果のない設定です。 -## max_part_removal_threads {#max_part_removal_threads} - -廃止されており、現在は効果のない設定です。 -## max_partitions_to_read {#max_partitions_to_read} - - -1 つのクエリでアクセスできるパーティション数の上限を設定します。 - -テーブル作成時に指定した設定値は、クエリレベルの設定によって上書きできます。 - -設定可能な値は次のとおりです: -- 任意の正の整数。 - -クエリ / セッション / プロファイルレベルで、クエリの複雑さに関する設定 [max_partitions_to_read](/operations/settings/settings#max_partitions_to_read) を指定することもできます。 - - - -## max_parts_in_total {#max_parts_in_total} - - -テーブルのすべてのパーティションにおけるアクティブなパーツの合計数が -`max_parts_in_total` の値を超える場合、`INSERT` は `Too many parts -(N)` という例外とともに中断されます。 - -設定可能な値: -- 任意の正の整数。 - -テーブル内のパーツ数が多すぎると、ClickHouse クエリのパフォーマンスが低下し、 -ClickHouse の起動時間も長くなります。多くの場合、これは誤った設計 -(パーティショニング戦略の選択ミスによりパーティションが小さすぎること) -の結果として発生します。 - - - -## max_parts_to_merge_at_once {#max_parts_to_merge_at_once} - - -一度にマージ可能なパーツの最大数(0 で無効化)。 -`OPTIMIZE FINAL` クエリには影響しません。 - - - -## max_postpone_time_for_failed_mutations_ms {#max_postpone_time_for_failed_mutations_ms} - - -失敗したミューテーションを延期する最大時間。 - - - -## max_postpone_time_for_failed_replicated_fetches_ms {#max_postpone_time_for_failed_replicated_fetches_ms} - - - - -失敗したレプリケートフェッチの実行を延期できる最大時間。 - - - -## max_postpone_time_for_failed_replicated_merges_ms {#max_postpone_time_for_failed_replicated_merges_ms} - - - - -失敗したレプリケートマージを延期できる最大時間。 - - - -## max_postpone_time_for_failed_replicated_tasks_ms {#max_postpone_time_for_failed_replicated_tasks_ms} - - - - -失敗したレプリケーションタスクを延期する最大時間。タスクが fetch、merge、または mutation でない場合にこの値が適用されます。 - - - -## max_projections {#max_projections} - - -MergeTree プロジェクションの最大数。 - - - -## max_replicated_fetches_network_bandwidth {#max_replicated_fetches_network_bandwidth} - - -ネットワーク上でのデータ交換速度の上限を、[replicated](../../engines/table-engines/mergetree-family/replication.md) -フェッチに対して 1 秒あたりのバイト数で制限します。この設定は特定のテーブルに適用されます。一方で -[`max_replicated_fetches_network_bandwidth_for_server`](/operations/settings/merge-tree-settings#max_replicated_fetches_network_bandwidth) -設定はサーバーレベルで適用されます。 - -サーバーレベルとテーブル単位の両方でネットワーク帯域を制限できますが、その場合は -テーブルレベルの設定値をサーバーレベルの設定値よりも小さくする必要があります。そうでない場合は、 -サーバーは `max_replicated_fetches_network_bandwidth_for_server` 設定のみを考慮します。 - -この設定値は厳密に守られるわけではありません。 - -設定可能な値: - -- 正の整数。 -- `0` — 無制限。 - -デフォルト値: `0`。 - -**使用例** - -新しいノードの追加や置き換えのためにデータをレプリケートする際に、速度を制限する目的で使用できます。 - - - -## max_replicated_logs_to_keep {#max_replicated_logs_to_keep} - - -非アクティブなレプリカが存在する場合に、ClickHouse Keeper ログ内に保持される可能性があるレコード数。 -この値を超えると、非アクティブなレプリカは失われたものと見なされます。 - -指定可能な値: -- 任意の正の整数。 - - - -## max_replicated_merges_in_queue {#max_replicated_merges_in_queue} - - -ReplicatedMergeTree のキュー内で、パーツのマージおよびミューテーションのタスクを同時に実行できる最大数を指定します。 - - - -## max_replicated_merges_with_ttl_in_queue {#max_replicated_merges_with_ttl_in_queue} - - -ReplicatedMergeTree のキュー内で、TTL を伴うパーツのマージ処理を同時に実行できる最大数を指定します。 - - - -## max_replicated_mutations_in_queue {#max_replicated_mutations_in_queue} - - -ReplicatedMergeTree のキュー内で、パーツに対する mutation タスクを同時にいくつまで許可するかを指定します。 - - - -## max_replicated_sends_network_bandwidth {#max_replicated_sends_network_bandwidth} - - -ネットワーク経由でのデータ交換の最大速度を、1 秒あたりのバイト数で -[replicated](/engines/table-engines/mergetree-family/replacingmergetree) -テーブルでの送信について制限します。[`max_replicated_sends_network_bandwidth_for_server`](/operations/settings/merge-tree-settings#max_replicated_sends_network_bandwidth) -設定がサーバー全体に適用されるのに対し、この設定は特定のテーブルに -適用されます。 - -サーバーレベルのネットワーク帯域と特定テーブルの両方に制限を設定できますが、 -その場合、テーブルレベルの設定値はサーバーレベルの設定値よりも小さく -なければなりません。そうでない場合、サーバーは -`max_replicated_sends_network_bandwidth_for_server` 設定のみを考慮します。 - -この設定は厳密に守られるわけではありません。 - -可能な値: - -- 正の整数。 -- `0` — 無制限。 - -**使用方法** - -新しいノードの追加または置き換えのためにデータをレプリケーションする際に、 -送信速度を制限する用途で使用できます。 - - - -## max_suspicious_broken_parts {#max_suspicious_broken_parts} - - -1 つのパーティション内の破損パーツの数が -`max_suspicious_broken_parts` の値を超えると、自動削除は行われません。 - -設定可能な値: -- 任意の正の整数。 - - - -## max_suspicious_broken_parts_bytes {#max_suspicious_broken_parts_bytes} - - -破損したすべてのパーツの最大サイズ。この値を超える場合は、自動削除を行いません。 - -指定可能な値: -- 任意の正の整数。 - - - -## max_uncompressed_bytes_in_patches {#max_uncompressed_bytes_in_patches} - - - - -すべてのパッチパーツ内のデータの未圧縮サイズ合計の上限(バイト単位)。 -すべてのパッチパーツ内のデータ量がこの値を超えると、lightweight update は拒否されます。 -0 の場合は無制限。 - - - -## merge_max_block_size {#merge_max_block_size} - - -マージされたパーツからメモリに読み込まれる行数です。 - -設定可能な値: -- 任意の正の整数。 - -マージ処理では、パーツから `merge_max_block_size` 行ずつブロック単位で行を読み込み、 -それらをマージして結果を新しいパーツに書き込みます。読み込まれたブロックは RAM 上に -保持されるため、`merge_max_block_size` はマージに必要な RAM 容量に影響します。 -そのため、非常に幅の広い行を持つテーブルでは、マージが大量の RAM を消費する可能性があります -(平均行サイズが 100kb で 10 個のパーツをマージする場合、 -(100kb * 10 * 8192) = 約 8GB の RAM が必要になります)。`merge_max_block_size` を小さくすると、 -マージに必要な RAM 量を減らすことができますが、マージ処理は遅くなります。 - - - -## merge_max_block_size_bytes {#merge_max_block_size_bytes} - - -マージ処理時に生成するブロックのバイト数を指定します。デフォルトでは -`index_granularity_bytes` と同じ値になります。 - - - -## merge_max_bytes_to_prewarm_cache {#merge_max_bytes_to_prewarm_cache} - - - - -ClickHouse Cloud でのみ利用可能です。マージ処理中にキャッシュを事前にウォームアップする対象となるパーツ(compact または packed)の最大サイズを指定します。 - - - -## merge_max_dynamic_subcolumns_in_wide_part {#merge_max_dynamic_subcolumns_in_wide_part} - - - - -マージ後の Wide データパートにおいて、各カラムで作成可能な動的サブカラムの最大数を指定します。 -この設定により、データ型で指定された動的パラメータに関係なく、Wide データパート内で作成されるファイル数を削減できます。 - -例えば、テーブルに JSON(max_dynamic_paths=1024) 型のカラムがあり、設定 `merge_max_dynamic_subcolumns_in_wide_part` が 128 に設定されている場合、 -Wide データパートへのマージ後、このパートにおける動的パスの数は 128 に削減され、動的サブカラムとして書き込まれるパスも 128 個のみになります。 - - - -## merge_selecting_sleep_ms {#merge_selecting_sleep_ms} - - -パーツが1つも選択されなかった場合に、マージ対象のパーツを再度選択しようとするまで待機する最小時間です。設定値を低くすると、background_schedule_pool でのタスク選択が頻繁にトリガーされ、その結果、大規模クラスターでは ZooKeeper へのリクエストが大量に発生します。 - - - -## merge_selecting_sleep_slowdown_factor {#merge_selecting_sleep_slowdown_factor} - - -マージ選択タスクのスリープ時間は、マージするものがない場合にはこの係数を掛けて増加させ、マージが割り当てられたときにはこの係数で割って短縮します。 - - - -## merge_selector_algorithm {#merge_selector_algorithm} - - - - -マージの割り当てに使用するパーツ選択アルゴリズム - - - -## merge_selector_base {#merge_selector_base} - -割り当てられたマージ処理の書き込み増幅に影響します(上級者向けの設定です。動作を理解していない場合は変更しないでください)。Simple および StochasticSimple マージセレクタで有効です。 - - - -## merge_selector_blurry_base_scale_factor {#merge_selector_blurry_base_scale_factor} - - -パーティション内のパーツ数に対して、このロジックが有効になるタイミングを制御します。係数が大きいほど、反応はより遅くなります。 - - - -## merge_selector_enable_heuristic_to_remove_small_parts_at_right {#merge_selector_enable_heuristic_to_remove_small_parts_at_right} - - -マージ対象のパーツを選択する際に、範囲の右側にあるパーツのうち、そのサイズが合計サイズ `sum_size` の指定された比率 (0.01) 未満のものを対象から除外するヒューリスティックを有効にします。 -`Simple` および `StochasticSimple` マージセレクタで動作します。 - - - -## merge_selector_window_size {#merge_selector_window_size} - - -一度に確認するパーツの数。 - - - -## merge_total_max_bytes_to_prewarm_cache {#merge_total_max_bytes_to_prewarm_cache} - - - - -ClickHouse Cloud でのみ利用可能です。マージ処理中にキャッシュをプリウォームする対象パーツの合計最大サイズです。 - - - -## merge_tree_clear_old_broken_detached_parts_ttl_timeout_seconds {#merge_tree_clear_old_broken_detached_parts_ttl_timeout_seconds} - -非推奨の設定であり、現在は何も行いません。 -## merge_tree_clear_old_parts_interval_seconds {#merge_tree_clear_old_parts_interval_seconds} - - -古いパーツ、WAL、および mutation のクリーンアップを ClickHouse が実行する間隔(秒)を設定します。 - -可能な値: -- 任意の正の整数。 - - - -## merge_tree_clear_old_temporary_directories_interval_seconds {#merge_tree_clear_old_temporary_directories_interval_seconds} - - -ClickHouse が古い一時ディレクトリのクリーンアップを実行するための間隔(秒単位)を設定します。 - -設定可能な値: -- 任意の正の整数値 - - - -## merge_tree_enable_clear_old_broken_detached {#merge_tree_enable_clear_old_broken_detached} - -廃止された設定で、何も行いません。 -## merge_with_recompression_ttl_timeout {#merge_with_recompression_ttl_timeout} - - -再圧縮 TTL を伴うマージを再実行するまでの最小遅延時間(秒単位)。 - - - -## merge_with_ttl_timeout {#merge_with_ttl_timeout} - - -削除 TTL を伴うマージを再実行するまでの最小待機時間(秒)。 - - - -## merge_workload {#merge_workload} - - -マージ処理と他のワークロードとの間で、リソースの使用および共有方法を制御するために使用されます。指定した値は、このテーブルのバックグラウンドマージに対する `workload` 設定値として用いられます。指定されていない場合(空文字列の場合)は、サーバー設定の `merge_workload` の値が代わりに使用されます。 - -**関連項目** -- [Workload Scheduling](/operations/workload-scheduling.md) - - - -## min_absolute_delay_to_close {#min_absolute_delay_to_close} - - -リクエストの処理を停止し、ステータスチェック中に `Ok` を返さず、接続をクローズするまでの最小の絶対遅延時間。 - - - -## min_age_to_force_merge_on_partition_only {#min_age_to_force_merge_on_partition_only} - - -`min_age_to_force_merge_seconds` を、パーティションの一部ではなくパーティション全体に対してのみ適用するかどうかを制御します。 - -デフォルトでは、設定 `max_bytes_to_merge_at_max_space_in_pool` を無視します(`enable_max_bytes_limit_for_min_age_to_force_merge` を参照)。 - -取りうる値: -- true, false - - - -## min_age_to_force_merge_seconds {#min_age_to_force_merge_seconds} - - -範囲内のすべてのパーツが `min_age_to_force_merge_seconds` の値よりも古い場合に、これらのパーツをマージします。 - -デフォルトでは、設定 `max_bytes_to_merge_at_max_space_in_pool` を無視します -(`enable_max_bytes_limit_for_min_age_to_force_merge` を参照)。 - -設定可能な値: -- 正の整数。 - - - -## min_bytes_for_compact_part {#min_bytes_for_compact_part} - -廃止された設定であり、現在は効果がありません。 -## min_bytes_for_full_part_storage {#min_bytes_for_full_part_storage} - - -ClickHouse Cloud でのみ利用可能です。データパートをパック形式ではなく -フルなストレージ形式で保存するための、非圧縮サイズ(バイト単位)の最小値です。 - - - -## min_bytes_for_wide_part {#min_bytes_for_wide_part} - - -`Wide` 形式で保存できるデータパート内の最小バイト数/行数です。これらの設定は、一方のみ、両方とも、あるいはいずれも設定しないことができます。 - - - -## min_bytes_to_prewarm_caches {#min_bytes_to_prewarm_caches} - - - - -新しいパーツに対してマークキャッシュおよびプライマリインデックスキャッシュを事前にウォームアップするための、非圧縮時のバイト数による最小サイズ。 - - - -## min_bytes_to_rebalance_partition_over_jbod {#min_bytes_to_rebalance_partition_over_jbod} - - -新しい大きなパーツをボリューム内のディスク [JBOD](https://en.wikipedia.org/wiki/Non-RAID_drive_architectures) に分散配置する際に、バランシングを有効にするための最小バイト数を設定します。 - -設定可能な値: - -- 正の整数。 -- `0` — バランシングを無効にします。 - -**使用方法** - -`min_bytes_to_rebalance_partition_over_jbod` 設定の値は、 -[max_bytes_to_merge_at_max_space_in_pool](/operations/settings/merge-tree-settings#max_bytes_to_merge_at_max_space_in_pool) -/ 1024 の値より小さくしてはいけません。そうでない場合、ClickHouse は例外をスローします。 - - - -## min_compress_block_size {#min_compress_block_size} - - -次のマークを書き込む際に圧縮を行うために必要となる、非圧縮データブロックの最小サイズです。 -この設定はグローバル設定でも指定できます -([min_compress_block_size](/operations/settings/merge-tree-settings#min_compress_block_size) 設定を参照)。 -テーブル作成時に指定した値は、この設定に対するグローバル値を上書きします。 - - - -## min_compressed_bytes_to_fsync_after_fetch {#min_compressed_bytes_to_fsync_after_fetch} - - -フェッチ後のパーツに対して `fsync` を実行する際の、圧縮済みデータの最小バイト数(0 の場合は無効) - - - -## min_compressed_bytes_to_fsync_after_merge {#min_compressed_bytes_to_fsync_after_merge} - - -マージ後のパーツに対して `fsync` を実行するための、圧縮済みバイト数の最小値(0 の場合は無効) - - - -## min_delay_to_insert_ms {#min_delay_to_insert_ms} - - -単一パーティション内に多数の未マージパーツが存在する場合に適用される、MergeTree テーブルへのデータ挿入の最小遅延時間(ミリ秒単位)。 - - - -## min_delay_to_mutate_ms {#min_delay_to_mutate_ms} - - -未完了の mutation が多数存在する場合に、MergeTree テーブルへの mutation を実行するまでの最小遅延時間(ミリ秒単位) - - - -## min_free_disk_bytes_to_perform_insert {#min_free_disk_bytes_to_perform_insert} - - -データを挿入するために、ディスクの空き容量として必要な最小バイト数を指定します。利用可能な空きバイト数が -`min_free_disk_bytes_to_perform_insert` より少ない場合は例外がスローされ、 -挿入は実行されません。この設定についての注意点は次のとおりです。 -- `keep_free_space_bytes` 設定を考慮します。 -- `INSERT` 操作によって書き込まれるデータ量は考慮しません。 -- 正の(ゼロではない)バイト数が指定されている場合にのみチェックされます。 - -取りうる値: -- 任意の正の整数。 - -:::note -`min_free_disk_bytes_to_perform_insert` と `min_free_disk_ratio_to_perform_insert` -の両方が指定されている場合、ClickHouse はより多くの空きディスク容量で -挿入を実行できる値を採用します。 -::: - - - -## min_free_disk_ratio_to_perform_insert {#min_free_disk_ratio_to_perform_insert} - - -`INSERT` を実行するために必要な、空きディスク容量とディスク総容量の比率の最小値です。0 から 1 の間の浮動小数点値である必要があります。なお、この設定には次の特徴があります: -- `keep_free_space_bytes` 設定を考慮します。 -- `INSERT` 操作によって書き込まれるデータ量は考慮しません。 -- 正の(ゼロ以外の)比率が指定されている場合にのみチェックされます。 - -取りうる値: -- Float, 0.0 - 1.0 - -`min_free_disk_ratio_to_perform_insert` と -`min_free_disk_bytes_to_perform_insert` の両方が指定されている場合、ClickHouse は、より多くの空きディスク容量を確保できる方の値を採用します。 - - - -## min_index_granularity_bytes {#min_index_granularity_bytes} - - -データグラニュールの許容される最小サイズ(バイト単位)。 - -`index_granularity_bytes` が極端に小さいテーブルを誤って作成してしまうことを防ぐための保護機構です。 - - - -## min_level_for_full_part_storage {#min_level_for_full_part_storage} - - - - -ClickHouse Cloud でのみ利用可能です。データパートに対して、packed ではなく full タイプのストレージ形式を使用するための最小のパートレベルです。 - - - -## min_level_for_wide_part {#min_level_for_wide_part} - - - - -`Compact` 形式ではなく `Wide` 形式でデータパートを作成する際の、パートレベルの最小値。 - - - -## min_marks_to_honor_max_concurrent_queries - - - -クエリに対して [`max_concurrent_queries`](#max_concurrent_queries) -設定を適用するために、クエリが読み取る必要があるマーク数の最小値です。 - -:::note -クエリは他の `max_concurrent_queries` 設定によっても引き続き制限されます。 -::: - -設定可能な値: - -* 正の整数。 -* `0` — 無効(`max_concurrent_queries` 制限はどのクエリにも適用されません)。 - -**例** - -```xml -10 -``` - - -## min_merge_bytes_to_use_direct_io {#min_merge_bytes_to_use_direct_io} - - -ストレージディスクへの direct I/O アクセスを使用するために必要な、マージ処理における最小データ量です。データパーツをマージする際、ClickHouse はマージ対象となるすべてのデータの合計ストレージ容量を計算します。容量が `min_merge_bytes_to_use_direct_io` バイトを超える場合、ClickHouse は direct I/O インターフェイス(`O_DIRECT` オプション)を使用してストレージディスクに対してデータを読み書きします。 -`min_merge_bytes_to_use_direct_io = 0` の場合、direct I/O は無効になります。 - - - -## min_parts_to_merge_at_once {#min_parts_to_merge_at_once} - - -マージセレクタが一度にマージ対象として選択できるデータパーツ数の最小値 -(上級者向けの設定です。動作を理解していない場合は変更しないでください)。 -0 - 無効。Simple および StochasticSimple マージセレクタで使用されます。 - - - -## min_relative_delay_to_close {#min_relative_delay_to_close} - - -他のレプリカとの差分遅延の最小値。この値を超えると、そのレプリカはクローズされ、リクエストの処理を停止し、ステータスチェック時に OK を返さなくなります。 - - - -## min_relative_delay_to_measure {#min_relative_delay_to_measure} - - -絶対的な遅延がこの値以上の場合にのみ、レプリカの相対遅延を計算します。 - - - -## min_relative_delay_to_yield_leadership {#min_relative_delay_to_yield_leadership} - -廃止された設定であり、何も行いません。 -## min_replicated_logs_to_keep {#min_replicated_logs_to_keep} - - -ZooKeeper のログで、最後のレコードをおおよそこの数だけ保持します。レコードが -古くなっていても保持されます。テーブルの動作には影響せず、ZooKeeper ログを -クリーンアップする前の診断にのみ使用されます。 - -取り得る値: -- 任意の正の整数。 - - - -## min_rows_for_compact_part {#min_rows_for_compact_part} - -廃止された設定で、現在は効果がありません。 -## min_rows_for_full_part_storage {#min_rows_for_full_part_storage} - - -ClickHouse Cloud でのみ利用可能です。データパートに対して、パック形式ではなくフルタイプのストレージを使用するための最小行数。 - - - -## min_rows_for_wide_part {#min_rows_for_wide_part} - - -`Compact` 形式ではなく `Wide` 形式でデータパートを作成するための最小行数。 - - - -## min_rows_to_fsync_after_merge {#min_rows_to_fsync_after_merge} - - -マージ後のパートに対して fsync を実行する際の最小行数(0 で無効) - - - -## mutation_workload {#mutation_workload} - - -ミューテーションとその他のワークロード間で、リソースの使用および共有をどのように行うかを調整するために使用します。指定した値は、このテーブルのバックグラウンドミューテーションに対する `workload` 設定値として使用されます。指定されていない場合(空文字列が指定された場合)は、代わりにサーバー設定の `mutation_workload` が使用されます。 - -**関連項目** -- [Workload Scheduling](/operations/workload-scheduling.md) - - - -## non_replicated_deduplication_window {#non_replicated_deduplication_window} - - -レプリケーションなしの -[MergeTree](../../engines/table-engines/mergetree-family/mergetree.md) テーブルで、 -重複チェックのためにハッシュサムを保持する、直近で挿入されたブロック数。 - -設定可能な値: -- 任意の正の整数。 -- `0`(重複排除を無効化)。 - -レプリケートテーブルで使用されるものと同様の重複排除メカニズム([replicated_deduplication_window](#replicated_deduplication_window) 設定を参照)が使用されます。 -作成されたパーツのハッシュサムは、ディスク上のローカルファイルに書き込まれます。 - - - -## notify_newest_block_number {#notify_newest_block_number} - - - - - - -最新のブロック番号を SharedJoin または SharedSet に通知します。ClickHouse Cloud でのみ利用可能です。 - - - -## number_of_free_entries_in_pool_to_execute_mutation {#number_of_free_entries_in_pool_to_execute_mutation} - - -プール内の空きエントリ数が指定値未満の場合、パーツに対するミューテーションを実行しません。これは通常のマージ処理用にスレッドを残し、「Too many parts」エラーを回避するためです。 - -取りうる値: -- 任意の正の整数。 - -**使用方法** - -`number_of_free_entries_in_pool_to_execute_mutation` 設定の値は、[background_pool_size](/operations/server-configuration-parameters/settings.md/#background_pool_size) -* [background_merges_mutations_concurrency_ratio](/operations/server-configuration-parameters/settings.md/#background_merges_mutations_concurrency_ratio) の値(積)より小さくする必要があります。 -そうでない場合、ClickHouse は例外をスローします。 - - - -## number_of_free_entries_in_pool_to_execute_optimize_entire_partition {#number_of_free_entries_in_pool_to_execute_optimize_entire_partition} - - -プール内の空きエントリ数が指定した数より少ない場合、バックグラウンドでパーティション全体の最適化を実行しません(このタスクは `min_age_to_force_merge_seconds` を設定し、 -`min_age_to_force_merge_on_partition_only` を有効にしたときに生成されます)。これは、通常のマージ処理用のスレッドを確保し、「Too many parts」の発生を防ぐためです。 - -設定可能な値: -- 正の整数。 - -`number_of_free_entries_in_pool_to_execute_optimize_entire_partition` -設定の値は、 -[background_pool_size](/operations/server-configuration-parameters/settings.md/#background_pool_size) -* [background_merges_mutations_concurrency_ratio](/operations/server-configuration-parameters/settings.md/#background_merges_mutations_concurrency_ratio) -の値より小さくなければなりません。そうでない場合、ClickHouse は例外をスローします。 - - - -## number_of_free_entries_in_pool_to_lower_max_size_of_merge {#number_of_free_entries_in_pool_to_lower_max_size_of_merge} - - -プール(またはレプリケーションキュー)内の空きエントリ数が指定した数を下回った場合、処理するマージ(またはキューに投入するマージ)の最大サイズを下げ始めます。 -これは、小さなマージを処理できるようにし、長時間実行されるマージだけでプールが埋まってしまうことを防ぐためのものです。 - -設定可能な値: -- 正の整数。 - - - -## number_of_mutations_to_delay {#number_of_mutations_to_delay} - -テーブルに未完了のミューテーションがこの数以上存在する場合、テーブルのミューテーションを意図的に遅くします。 -0 に設定すると無効になります。 - - - -## number_of_mutations_to_throw {#number_of_mutations_to_throw} - - -テーブルに未完了のミューテーションがこの数以上存在する場合、`Too many mutations` 例外をスローします。0 を指定すると無効になります。 - - - -## number_of_partitions_to_consider_for_merge {#number_of_partitions_to_consider_for_merge} - - - - -ClickHouse Cloud でのみ利用可能です。マージ対象として考慮するパーティションの上位 N 個までを対象とします。パーティションは重み付きランダム方式で選択され、重みはそのパーティション内でマージ可能な data parts の数に基づきます。 - - - -## object_serialization_version {#object_serialization_version} - - - - -JSON データ型用のシリアル化バージョンです。互換性を維持するために必要です。 - -設定可能な値: -- `v1` -- `v2` -- `v3` - -共有データのシリアル化バージョンの変更をサポートするのは、`v3` のみです。 - - - -## object_shared_data_buckets_for_compact_part {#object_shared_data_buckets_for_compact_part} - - - - -Compact パーツにおける JSON 共有データのシリアル化に使用するバケット数を指定します。`map_with_buckets` および `advanced` の共有データシリアル化で使用されます。 - - - -## object_shared_data_buckets_for_wide_part {#object_shared_data_buckets_for_wide_part} - - - - -ワイドパートにおける共有データの JSON シリアル化に使用するバケット数。`map_with_buckets` および `advanced` 方式の共有データシリアル化で有効です。 - - - -## object_shared_data_serialization_version {#object_shared_data_serialization_version} - - - - -JSON データ型内の共有データに対するシリアル化バージョン。 - -使用可能な値: -- `map` - 共有データを `Map(String, String)` として保存します。 -- `map_with_buckets` - 共有データを複数の個別の `Map(String, String)` 列として保存します。バケットを使用すると、共有データから個々のパスを読み取む処理が高速化されます。 -- `advanced` - 共有データの個々のパスの読み取りを大幅に高速化することを目的とした、共有データ向けの特別なシリアル化方式です。 - このシリアル化方式では、多くの追加情報を保存するため、ディスク上の共有データのストレージサイズが増加する点に注意してください。 - -`map_with_buckets` および `advanced` シリアル化におけるバケット数は、設定 -[object_shared_data_buckets_for_compact_part](#object_shared_data_buckets_for_compact_part)/[object_shared_data_buckets_for_wide_part](#object_shared_data_buckets_for_wide_part) -によって決定されます。 - - - -## object_shared_data_serialization_version_for_zero_level_parts {#object_shared_data_serialization_version_for_zero_level_parts} - - - - -この設定では、挿入処理中に作成されるゼロレベルパーツについて、JSON 型内の共有データに対して異なるシリアル化バージョンを指定できます。 -ゼロレベルパーツに対しては、`advanced` 共有データシリアル化の使用は推奨されません。挿入時間が大きく増加する可能性があるためです。 - - - -## old_parts_lifetime {#old_parts_lifetime} - - -予期しないサーバー再起動時のデータ損失を防ぐために、非アクティブなパーツを保持しておく時間(秒)。 - -取り得る値: -- 任意の正の整数。 - -複数のパーツをマージして新しいパーツを作成した後、ClickHouse は元のパーツを非アクティブとしてマークし、`old_parts_lifetime` 秒経過してから削除します。 -非アクティブなパーツは、現在のクエリで使用されていない場合、すなわちそのパーツの `refcount` が 1 の場合に削除されます。 - -新しいパーツに対しては `fsync` は呼び出されないため、一定時間のあいだ新しいパーツはサーバーの RAM(OS キャッシュ)内にしか存在しません。サーバーが予期せず再起動された場合、新しいパーツは失われるか破損する可能性があります。データを保護するため、非アクティブなパーツは即座には削除されません。 - -起動時に ClickHouse はパーツの整合性をチェックします。マージ後のパーツが破損している場合、ClickHouse は非アクティブなパーツをアクティブなパーツの一覧に戻し、その後あらためてマージします。そして破損したパーツは(`broken_` プレフィックスが追加されて)リネームされ、`detached` フォルダに移動されます。マージ後のパーツが破損していない場合、元の非アクティブなパーツは(`ignored_` プレフィックスが追加されて)リネームされ、`detached` フォルダに移動されます。 - -デフォルトの `dirty_expire_centisecs` の値(Linux カーネルの設定)は 30 秒(書き込まれたデータが RAM のみに保持される最大時間)ですが、ディスクシステムに高負荷がかかっている場合、データの書き込みがさらに遅れることがあります。実験的に、`old_parts_lifetime` の値として 480 秒が選択されており、この間に新しいパーツが確実にディスクへ書き込まれることが保証されます。 - - - -## optimize_row_order {#optimize_row_order} - - -行の順序を挿入時に最適化して、新しく挿入されるテーブルパーツの -圧縮効率を改善するかどうかを制御します。 - -通常の MergeTree エンジンテーブルに対してのみ効果があります。 -特殊な MergeTree エンジンテーブル(例: CollapsingMergeTree)には効果がありません。 - -MergeTree テーブルは(任意で)[compression codecs](/sql-reference/statements/create/table#column_compression_codec) -を使って圧縮されます。LZ4 や ZSTD のような汎用圧縮コーデックは、 -データにパターンが現れている場合に最大限の圧縮率を達成します。 -同一値が長く連続するランは、一般的に非常によく圧縮されます。 - -この設定が有効な場合、ClickHouse は新しく挿入されるパーツのデータを、 -新しいテーブルパーツの列全体で同一値ランの数が最小となるような -行順序で保存しようと試みます。 -言い換えると、同一値ランの数が少ないということは、個々のランが長くなり、 -よく圧縮されることを意味します。 - -最適な行順序を見つけることは計算量的に実行不可能(NP 困難)です。 -そのため ClickHouse は、元の行順序よりも圧縮率を向上させつつ、 -高速に良好な行順序を見つけるためのヒューリスティクスを使用します。 - -
- -行順序を見つけるためのヒューリスティクス - -SQL では、同じテーブル(テーブルパーツ)が異なる行順序であっても -同値とみなされるため、一般にはテーブル(あるいはテーブルパーツ)の -行を自由にシャッフルすることが可能です。 - -テーブルにプライマリキーが定義されている場合、この行シャッフルの自由度は -制限されます。ClickHouse では、プライマリキー `C1, C2, ..., CN` は、 -テーブルの行が列 `C1`, `C2`, ... `Cn` でソートされていることを -強制します([clustered index](https://en.wikipedia.org/wiki/Database_index#Clustered))。 -その結果、行は「同値類」の中でのみシャッフルできます。 -すなわち、プライマリキー列の値が同一である行同士です。 -直感的には、`DateTime64` タイプのタイムスタンプ列を含む -プライマリキーのような高カーディナリティのプライマリキーは、 -多数の小さな同値類を生みます。 -同様に、低カーディナリティのプライマリキーを持つテーブルは、 -少数の大きな同値類を生みます。プライマリキーを持たないテーブルは、 -すべての行を含む 1 つの同値類という極端なケースを表します。 - -同値類の数が少なくサイズが大きいほど、行を再シャッフルする際の -自由度は高くなります。 - -各同値類の内部で最適な行順序を見つけるために適用される -ヒューリスティクスは、D. Lemire と O. Kaser による -[Reordering columns for smaller indexes](https://doi.org/10.1016/j.ins.2011.02.002) -で提案されたものであり、各同値類の行を、非プライマリキー列の -カーディナリティの昇順でソートすることに基づいています。 - -これは以下の 3 ステップを実行します: -1. プライマリキー列の行値に基づいて、すべての同値類を見つけます。 -2. 各同値類について、非プライマリキー列のカーディナリティを -(通常は推定により)計算します。 -3. 各同値類について、非プライマリキー列のカーディナリティが -昇順となるように行をソートします。 - -
- -有効にすると、新しいデータの行順序を解析・最適化するために、 -挿入操作で追加の CPU コストが発生します。 -データの特性にもよりますが、INSERT の実行時間は 30–50% 長くなると -想定されます。 -LZ4 や ZSTD の圧縮率は平均して 20–40% 向上します。 - -この設定は、プライマリキーを持たないテーブル、または -低カーディナリティのプライマリキーを持つテーブル、 -すなわち異なるプライマリキー値の数が少ないテーブルに対して -最も効果的です。 -`DateTime64` 型のタイムスタンプ列を含むような -高カーディナリティのプライマリキーは、この設定による恩恵は -期待できません。 - - - -## part_moves_between_shards_delay_seconds {#part_moves_between_shards_delay_seconds} - - - - -シャード間でパーツを移動する前後に待機する秒数。 - - - -## part_moves_between_shards_enable {#part_moves_between_shards_enable} - - - - -シャード間でパーツを移動するための実験的かつ未完成の機能です。 -シャーディング式は考慮されません。 - - - -## parts_to_delay_insert {#parts_to_delay_insert} - - -1 つのパーティション内に存在するアクティブなパーツ数が -`parts_to_delay_insert` の値を超えた場合、`INSERT` の実行は意図的に遅延されます。 - -設定可能な値: -- 任意の正の整数。 - -ClickHouse は `INSERT` の実行時間を意図的に延ばし(「sleep」を追加し)、バックグラウンドでのマージ処理が、新しいパーツが追加される速度よりも速くパーツをマージできるようにします。 - - - -## parts_to_throw_insert {#parts_to_throw_insert} - - -単一パーティション内のアクティブパーツ数が -`parts_to_throw_insert` の値を超えると、`INSERT` は `Too many -parts (N). Merges are processing significantly slower than inserts` -という例外とともに中断されます。 - -設定可能な値: -- 任意の正の整数。 - -`SELECT` クエリのパフォーマンスを最大化するには、処理されるパーツ数を最小化する必要があります。詳細は [Merge Tree](/development/architecture#merge-tree) を参照してください。 - -バージョン 23.6 より前では、この設定は 300 に設定されていました。この値をより大きく設定すると、`Too many parts` -エラーが発生する可能性を減らせますが、その一方で `SELECT` のパフォーマンスが低下する可能性があります。また、マージ処理に問題(たとえばディスク容量不足など)が発生した場合、元の 300 の設定と比べて、その問題に気付くのが遅くなります。 - - - - -## prefer_fetch_merged_part_size_threshold {#prefer_fetch_merged_part_size_threshold} - - -パーツのサイズの合計がこのしきい値を超え、かつレプリケーションログエントリが作成されてからの経過時間が -`prefer_fetch_merged_part_time_threshold` より長い場合、ローカルでマージを実行する代わりに、 -レプリカからマージ済みパーツを取得することを優先します。これは非常に時間のかかるマージ処理を高速化するための設定です。 - -設定可能な値: -- 任意の正の整数。 - - - -## prefer_fetch_merged_part_time_threshold {#prefer_fetch_merged_part_time_threshold} - - -レプリケーションログ(ClickHouse Keeper または ZooKeeper)のエントリ作成からの経過時間がこのしきい値を超え、かつパーツのサイズの合計が `prefer_fetch_merged_part_size_threshold` より大きい場合、ローカルでマージを実行するのではなく、レプリカからマージ済みパーツを取得することを優先します。これは、非常に時間のかかるマージを高速化するためのものです。 - -取りうる値: -- 任意の正の整数値。 - - - -## prewarm_mark_cache {#prewarm_mark_cache} - -`true` の場合、挿入、マージ、フェッチ時およびサーバー起動時にマークをマークキャッシュに保存して、 -マークキャッシュを事前にウォームアップします - - - -## prewarm_primary_key_cache {#prewarm_primary_key_cache} - - - -true の場合、挿入、マージ、フェッチ処理およびサーバー起動時にマークをマークキャッシュに保存することで、プライマリインデックスキャッシュを事前にウォームアップします。 - - - -## primary_key_compress_block_size {#primary_key_compress_block_size} - - -プライマリキーの圧縮ブロックサイズ。圧縮するブロックの実際のサイズです。 - - - -## primary_key_compression_codec {#primary_key_compression_codec} - - -プライマリキーに対して使用される圧縮コーデックです。プライマリキーは十分に小さく、キャッシュされているため、デフォルトの圧縮方式は ZSTD(3) です。 - - - -## primary_key_lazy_load {#primary_key_lazy_load} - -テーブルの初期化時ではなく、初回の利用時にプライマリキーをメモリにロードします。多数のテーブルが存在する場合にメモリを節約できます。 - - - -## primary_key_ratio_of_unique_prefix_values_to_skip_suffix_columns {#primary_key_ratio_of_unique_prefix_values_to_skip_suffix_columns} - - -データパーツ内で、プライマリキーを構成するあるカラムの値がこの比率以上の頻度で変化する場合、後続のカラムをメモリに読み込むことをスキップします。これにより、プライマリキーの不要なカラムを読み込まずに済み、メモリ使用量を削減できます。 - - - -## ratio_of_defaults_for_sparse_serialization - - - -列内の *すべての* 値の個数に対する、*デフォルト* 値の個数の最小比率。 -この値を設定すると、その列はスパースシリアライゼーションを用いて保存されます。 - -列がスパース(ほとんどがゼロ)である場合、ClickHouse はそれをスパース形式で -エンコードし、計算を自動的に最適化できます。クエリ実行時にデータを完全に -伸長する必要がありません。このスパースシリアライゼーションを有効にするには、 -`ratio_of_defaults_for_sparse_serialization` 設定を 1.0 未満に設定します。 -値が 1.0 以上の場合、列は常に通常のフルシリアライゼーションで書き込まれます。 - -取りうる値: - -* スパースシリアライゼーションを有効にするには、`0` から `1` の間の浮動小数点数 -* スパースシリアライゼーションを使用しない場合は `1.0`(またはそれ以上) - -**例** - -次のテーブルでは、`s` 列は 95% の行で空文字列になっている点に注目してください。 -`my_regular_table` ではスパースシリアライゼーションを使用せず、 -`my_sparse_table` では `ratio_of_defaults_for_sparse_serialization` を 0.95 に -設定しています: - -```sql -CREATE TABLE my_regular_table -( -`id` UInt64, -`s` String -) -ENGINE = MergeTree -ORDER BY id; - -INSERT INTO my_regular_table -SELECT -number AS id, -number % 20 = 0 ? toString(number): '' AS s -FROM -numbers(10000000); - - -CREATE TABLE my_sparse_table -( -`id` UInt64, -`s` String -) -ENGINE = MergeTree -ORDER BY id -SETTINGS ratio_of_defaults_for_sparse_serialization = 0.95; - -INSERT INTO my_sparse_table -SELECT -number, -number % 20 = 0 ? toString(number): '' -FROM -numbers(10000000); -``` - -`my_sparse_table` の `s` 列が、ディスク上でより少ないストレージ容量しか使用していないことに注目してください。 - -```sql -SELECT table, name, data_compressed_bytes, data_uncompressed_bytes FROM system.columns -WHERE table LIKE 'my_%_table'; -``` - -```response -┌─table────────────┬─name─┬─data_compressed_bytes─┬─data_uncompressed_bytes─┐ -│ my_regular_table │ id │ 37790741 │ 75488328 │ -│ my_regular_table │ s │ 2451377 │ 12683106 │ -│ my_sparse_table │ id │ 37790741 │ 75488328 │ -│ my_sparse_table │ s │ 2283454 │ 9855751 │ -└──────────────────┴──────┴───────────────────────┴─────────────────────────┘ -``` - -列がスパースエンコーディングを使用しているかどうかは、`system.parts_columns` テーブルの `serialization_kind` 列を参照して確認できます。 - -```sql -SELECT column, serialization_kind FROM system.parts_columns -WHERE table LIKE 'my_sparse_table'; -``` - -疎シリアライゼーションによって `s` のどの部分が保存されたかを確認できます。 - -```response -┌─column─┬─serialization_kind─┐ -│ id │ Default │ -│ s │ Default │ -│ id │ Default │ -│ s │ Default │ -│ id │ Default │ -│ s │ Sparse │ -│ id │ Default │ -│ s │ Sparse │ -│ id │ Default │ -│ s │ Sparse │ -│ id │ Default │ -│ s │ Sparse │ -│ id │ Default │ -│ s │ Sparse │ -│ id │ Default │ -│ s │ Sparse │ -│ id │ Default │ -│ s │ Sparse │ -│ id │ Default │ -│ s │ Sparse │ -│ id │ Default │ -│ s │ Sparse │ -└────────┴────────────────────┘ -``` - - -## reduce_blocking_parts_sleep_ms {#reduce_blocking_parts_sleep_ms} - - - - -ClickHouse Cloud でのみ利用可能です。範囲が一切削除/置換されなかったあとに、ブロッキングパーツの削減を再度試行するまで待機する最小時間です。値を小さくすると、`background_schedule_pool` 内のタスクが頻繁にトリガーされ、大規模クラスタでは ZooKeeper へのリクエストが大量に発生します。 - - - -## refresh_parts_interval {#refresh_parts_interval} - - - - -0 より大きい値に設定されている場合、基盤となるファイルシステムからデータパーツの一覧を更新し、裏側でデータが更新されていないかを確認します。 -この設定は、テーブルが読み取り専用ディスク上にある場合にのみ設定できます(これは、別のレプリカがデータを書き込んでいる間、このレプリカが読み取り専用レプリカであることを意味します)。 - - - -## refresh_statistics_interval {#refresh_statistics_interval} - - - - -統計キャッシュの更新間隔(秒)。0 に設定すると、更新は無効になります。 - - - -## remote_fs_execute_merges_on_single_replica_time_threshold {#remote_fs_execute_merges_on_single_replica_time_threshold} - - -この設定が 0 より大きい値に設定されている場合、共有ストレージ上にマージ後のパーツを配置する際には、単一のレプリカのみが即座にマージを開始します。 - -:::note -ゼロコピーレプリケーションは本番環境利用の準備がまだ整っていません -ゼロコピーレプリケーションは ClickHouse バージョン 22.8 以降では、デフォルトで無効になっています。 - -この機能は本番環境での使用は推奨されません。 -::: - -可能な値: -- 任意の正の整数。 - - - -## remote_fs_zero_copy_path_compatible_mode {#remote_fs_zero_copy_path_compatible_mode} - - - - -変換処理中は、互換モードでゼロコピーを実行します。 - - - -## remote_fs_zero_copy_zookeeper_path {#remote_fs_zero_copy_zookeeper_path} - - - - -テーブル非依存のゼロコピー情報を保存するための ZooKeeper パス。 - - - -## remove_empty_parts {#remove_empty_parts} - - -TTL やミューテーション、または CollapsingMergeTree のマージアルゴリズムによって内容が削除され空になったパーツを削除します。 - - - -## remove_rolled_back_parts_immediately {#remove_rolled_back_parts_immediately} - - - - -不完全な実験的機能向けの設定です。 - - - -## remove_unused_patch_parts {#remove_unused_patch_parts} - - - - -すべてのアクティブパーツに適用済みのパッチパーツをバックグラウンドで削除します。 - - - -## replace_long_file_name_to_hash {#replace_long_file_name_to_hash} - - -列のファイル名が長すぎる場合(`max_file_name_length` バイトを超える場合)、SipHash128 によるハッシュ値に置き換えます。 - - - -## replicated_can_become_leader {#replicated_can_become_leader} - - -true の場合、このノード上の Replicated テーブルのレプリカは -リーダーになろうとします。 - -設定可能な値: -- `true` -- `false` - - - -## replicated_deduplication_window {#replicated_deduplication_window} - - - - -ClickHouse Keeper が重複チェックのためにハッシュ値を保持する、直近で挿入されたブロックの数。 - -設定可能な値: -- 任意の正の整数 -- 0(重複排除を無効にする) - -`Insert` コマンドは 1 つ以上のブロック(パーツ)を作成します。 -[挿入の重複排除](../../engines/table-engines/mergetree-family/replication.md)において、 -レプリケーテッドテーブルに書き込むとき、ClickHouse は作成されたパーツのハッシュ値を -ClickHouse Keeper に書き込みます。ハッシュ値は、直近の `replicated_deduplication_window` -個のブロック分のみ保存されます。最も古いハッシュ値は ClickHouse Keeper から削除されます。 - -`replicated_deduplication_window` を大きな値にすると、比較すべきエントリが増えるため -`Insert` の処理が遅くなります。ハッシュ値は、フィールド名と型、および -挿入されたパーツ(バイト列)のデータの構成から計算されます。 - - - -## replicated_deduplication_window_for_async_inserts {#replicated_deduplication_window_for_async_inserts} - - -ClickHouse Keeper が重複チェックのためにハッシュ値を保持する、直近の非同期挿入ブロックの数。 - -Possible values: -- 任意の正の整数。 -- 0(`async_inserts` の重複排除を無効化) - -[Async Insert](/operations/settings/settings#async_insert) コマンドは、1 つ以上のブロック(パーツ)にキャッシュされます。[insert deduplication](/engines/table-engines/mergetree-family/replication) のためにレプリケートされたテーブルへ書き込む際、ClickHouse は各挿入のハッシュ値を ClickHouse Keeper に書き込みます。ハッシュ値は、直近の `replicated_deduplication_window_for_async_inserts` 個のブロックに対してのみ保存されます。最も古いハッシュ値は ClickHouse Keeper から削除されます。 -`replicated_deduplication_window_for_async_inserts` の値が大きすぎると、より多くのエントリを比較する必要があるため、非同期挿入(Async Insert)の処理が遅くなります。 -ハッシュ値は、フィールド名と型の組み合わせおよび挿入データ(バイト列)から計算されます。 - - - -## replicated_deduplication_window_seconds {#replicated_deduplication_window_seconds} - - - - -挿入されたブロックのハッシュ値は、指定した秒数が経過すると -ClickHouse Keeper から削除されます。 - -設定可能な値: -- 任意の正の整数。 - -[replicated_deduplication_window](#replicated_deduplication_window) と同様に、 -`replicated_deduplication_window_seconds` は、挿入データの重複排除のために -ブロックのハッシュ値をどのくらいの期間保持するかを指定します。 -`replicated_deduplication_window_seconds` より古いハッシュ値は、 -たとえ `replicated_deduplication_window` より小さくても ClickHouse Keeper から削除されます。 - -時間はウォールクロック時刻ではなく、最新レコードの時刻を基準とします。 -それが唯一のレコードである場合は無期限に保持されます。 - - - -## replicated_deduplication_window_seconds_for_async_inserts {#replicated_deduplication_window_seconds_for_async_inserts} - - -非同期インサートのハッシュサムが ClickHouse Keeper から削除されるまでの秒数。 - -可能な値: -- 任意の正の整数。 - -[replicated_deduplication_window_for_async_inserts](#replicated_deduplication_window_for_async_inserts) と同様に、 -`replicated_deduplication_window_seconds_for_async_inserts` は、非同期インサートの -重複排除のためにブロックのハッシュサムをどれくらいの期間保持するかを指定します。 -`replicated_deduplication_window_seconds_for_async_inserts` より古いハッシュサムは、 -`replicated_deduplication_window_for_async_inserts` より短い期間であっても -ClickHouse Keeper から削除されます。 - -この時間はウォールクロックではなく、最新レコードの時刻を基準とします。 -それが唯一のレコードであれば、永久に保持されます。 - - - -## replicated_fetches_http_connection_timeout {#replicated_fetches_http_connection_timeout} - -廃止された設定であり、何も効果はありません。 -## replicated_fetches_http_receive_timeout {#replicated_fetches_http_receive_timeout} - -廃止された設定であり、何も効果はありません。 -## replicated_fetches_http_send_timeout {#replicated_fetches_http_send_timeout} - -廃止された設定であり、何も効果はありません。 -## replicated_max_mutations_in_one_entry {#replicated_max_mutations_in_one_entry} - - -1 つの `MUTATE_PART` エントリ内でまとめてマージして実行できる -ミューテーションコマンドの最大数(0 は無制限を意味します) - - - -## replicated_max_parallel_fetches {#replicated_max_parallel_fetches} - -廃止された設定で、何の効果もありません。 -## replicated_max_parallel_fetches_for_host {#replicated_max_parallel_fetches_for_host} - -廃止された設定で、何の効果もありません。 -## replicated_max_parallel_fetches_for_table {#replicated_max_parallel_fetches_for_table} - -廃止された設定で、何の効果もありません。 -## replicated_max_parallel_sends {#replicated_max_parallel_sends} - -廃止された設定で、何の効果もありません。 -## replicated_max_parallel_sends_for_table {#replicated_max_parallel_sends_for_table} - -廃止された設定で、何の効果もありません。 -## replicated_max_ratio_of_wrong_parts {#replicated_max_ratio_of_wrong_parts} - - -不正なパーツ数とパーツ総数の比率がこの値より小さい場合は、起動を許可します。 - -可能な値: -- Float、0.0 ~ 1.0 - - - -## search_orphaned_parts_disks {#search_orphaned_parts_disks} - - - - -ClickHouse は、未定義(ポリシーに含まれていない)のディスク上のデータパーツを取りこぼさないようにするため、任意の ATTACH または CREATE TABLE 操作が行われるたびに、すべてのディスク上の孤立したパーツをスキャンします。 -孤立パーツは、ディスクがストレージポリシーから除外された場合など、安全でない可能性のあるストレージ再構成によって発生します。 -この設定は、ディスクの特性によって、検索対象となるディスクの範囲を制限します。 - -取りうる値: -- any - 検索対象ディスクの範囲は制限されません。 -- local - 検索対象ディスクの範囲はローカルディスクに制限されます。 -- none - 検索対象ディスクの範囲は空となり、ディスクを検索しません。 - - - -## serialization_info_version {#serialization_info_version} - - - - -`serialization.json` の書き込み時に使用されるシリアライズ情報バージョンです。 -クラスタのアップグレード(特にローリングアップグレード)時の互換性のために必要な設定です。 - -指定可能な値: -- `basic` - 基本フォーマット。 -- `with_types` - 追加の `types_serialization_versions` フィールドを含むフォーマットで、型ごとのシリアライズバージョンを指定できます。 -これにより `string_serialization_version` などの設定が有効になります。 - -ローリングアップグレード中は、`basic` に設定しておくことで、新しいサーバーが古いサーバーと互換性のあるデータパーツを生成します。アップグレード完了後に、 -型ごとのシリアライズバージョンを有効にするために `with_types` に切り替えます。 - - - -## shared_merge_tree_activate_coordinated_merges_tasks {#shared_merge_tree_activate_coordinated_merges_tasks} - - - - - - -協調マージタスクの再スケジューリングを有効にします。これは -`shared_merge_tree_enable_coordinated_merges=0` の場合でも有用です。この設定によりマージコーディネーターの -統計情報が蓄積され、コールドスタート時の改善に役立ちます。 - - - -## shared_merge_tree_create_per_replica_metadata_nodes {#shared_merge_tree_create_per_replica_metadata_nodes} - - - - -ZooKeeper にレプリカごとの /metadata および /columns ノードを作成できるようにします。 -ClickHouse Cloud でのみ使用可能です。 - - - -## shared_merge_tree_disable_merges_and_mutations_assignment {#shared_merge_tree_disable_merges_and_mutations_assignment} - - -共有 MergeTree に対するマージ処理の割り当てを停止します。ClickHouse Cloud でのみ利用可能です。 - - - -## shared_merge_tree_empty_partition_lifetime {#shared_merge_tree_empty_partition_lifetime} - - - - -パーツを持たないパーティションを Keeper に保持しておく時間(秒)。 - - - -## shared_merge_tree_enable_automatic_empty_partitions_cleanup {#shared_merge_tree_enable_automatic_empty_partitions_cleanup} - - - - -空パーティション用 Keeper エントリのクリーンアップを有効にします。 - - - -## shared_merge_tree_enable_coordinated_merges {#shared_merge_tree_enable_coordinated_merges} - - - - - - -協調マージ戦略を有効化します - - - -## shared_merge_tree_enable_keeper_parts_extra_data {#shared_merge_tree_enable_keeper_parts_extra_data} - - - - - - -keeper 内で仮想パーツへの属性の書き込みとブロックのコミットを有効にします。 - - - -## shared_merge_tree_enable_outdated_parts_check {#shared_merge_tree_enable_outdated_parts_check} - - - - -古くなったパーツのチェックを有効化します。ClickHouse Cloud でのみ利用可能です - - - -## shared_merge_tree_idle_parts_update_seconds {#shared_merge_tree_idle_parts_update_seconds} - - - - -shared MergeTree において、ZooKeeper の watch によってトリガーされないパーツ更新を行う際の間隔(秒)。ClickHouse Cloud でのみ利用可能です - - - -## shared_merge_tree_initial_parts_update_backoff_ms {#shared_merge_tree_initial_parts_update_backoff_ms} - - - - -パーツ更新の初期バックオフ時間。ClickHouse Cloud でのみ利用可能です - - - -## shared_merge_tree_interserver_http_connection_timeout_ms {#shared_merge_tree_interserver_http_connection_timeout_ms} - - - - -サーバー間 HTTP 接続のタイムアウト時間です。ClickHouse Cloud でのみ利用可能です。 - - - -## shared_merge_tree_interserver_http_timeout_ms {#shared_merge_tree_interserver_http_timeout_ms} - - - - -サーバー間 HTTP 通信のタイムアウト時間。ClickHouse Cloud でのみ利用可能です。 - - - -## shared_merge_tree_leader_update_period_random_add_seconds {#shared_merge_tree_leader_update_period_random_add_seconds} - - - - -`shared_merge_tree_leader_update_period` に対して、0 以上 x 秒以下の一様分布に従う値を加算し、thundering herd 問題を回避します。ClickHouse Cloud でのみ利用可能です。 - - - -## shared_merge_tree_leader_update_period_seconds {#shared_merge_tree_leader_update_period_seconds} - - - - -パーツ更新時のリーダーシップを再確認する最大間隔です。 -ClickHouse Cloud でのみ利用可能です。 - - - -## shared_merge_tree_max_outdated_parts_to_process_at_once {#shared_merge_tree_max_outdated_parts_to_process_at_once} - - - - -1 回の HTTP リクエストで、リーダーが削除対象として確認しようとする期限切れパーツの最大数。ClickHouse Cloud でのみ利用可能です。 - - - -## shared_merge_tree_max_parts_update_backoff_ms {#shared_merge_tree_max_parts_update_backoff_ms} - - - - -パーツ更新における最大バックオフ時間。ClickHouse Cloud でのみ利用可能です。 - - - -## shared_merge_tree_max_parts_update_leaders_in_total {#shared_merge_tree_max_parts_update_leaders_in_total} - - - - -パーツ更新リーダー数の上限。ClickHouse Cloud でのみ利用可能です - - - -## shared_merge_tree_max_parts_update_leaders_per_az {#shared_merge_tree_max_parts_update_leaders_per_az} - - - - -パーツ更新リーダー数の上限。ClickHouse Cloud でのみ利用可能です。 - - - -## shared_merge_tree_max_replicas_for_parts_deletion {#shared_merge_tree_max_replicas_for_parts_deletion} - - - - -パーツ削除処理(キラースレッド)に参加するレプリカの最大数。ClickHouse Cloud でのみ利用可能です - - - -## shared_merge_tree_max_replicas_to_merge_parts_for_each_parts_range {#shared_merge_tree_max_replicas_to_merge_parts_for_each_parts_range} - - - - -競合する可能性のあるマージの割り当てを試みるレプリカの最大数(マージ割り当てにおける不要な競合の発生を回避するため)。0 は無効を意味します。ClickHouse Cloud でのみ利用可能です。 - - - -## shared_merge_tree_max_suspicious_broken_parts {#shared_merge_tree_max_suspicious_broken_parts} - - - - -SMT に対して許可される破損パーツの最大数。この値を超えた場合は、自動デタッチを行いません。 - - - -## shared_merge_tree_max_suspicious_broken_parts_bytes {#shared_merge_tree_max_suspicious_broken_parts_bytes} - - - - -SMT におけるすべての破損したパーツの合計サイズの上限。この値を超える場合は自動的な detach を拒否する。 - - - -## shared_merge_tree_memo_ids_remove_timeout_seconds {#shared_merge_tree_memo_ids_remove_timeout_seconds} - - - - -挿入の再試行時に誤った処理が行われるのを防ぐために、挿入メモ化 ID をどのくらいの期間保持するかを指定します。ClickHouse Cloud でのみ利用可能です。 - - - -## shared_merge_tree_merge_coordinator_election_check_period_ms {#shared_merge_tree_merge_coordinator_election_check_period_ms} - - - - - - -マージコーディネーター選出スレッドの実行と実行の間隔 - - - -## shared_merge_tree_merge_coordinator_factor {#shared_merge_tree_merge_coordinator_factor} - - - - - - -コーディネータスレッドの遅延時間を調整する係数 - - - -## shared_merge_tree_merge_coordinator_fetch_fresh_metadata_period_ms {#shared_merge_tree_merge_coordinator_fetch_fresh_metadata_period_ms} - - - - - - -マージコーディネーターが ZooKeeper と同期を行い、最新のメタデータを取得する頻度 - - - -## shared_merge_tree_merge_coordinator_max_merge_request_size {#shared_merge_tree_merge_coordinator_max_merge_request_size} - - - - - - -コーディネーターが MergerMutator に対して一度に要求できるマージ数 - - - -## shared_merge_tree_merge_coordinator_max_period_ms {#shared_merge_tree_merge_coordinator_max_period_ms} - - - - - - -マージコーディネータースレッドの実行間隔の最大値 - - - -## shared_merge_tree_merge_coordinator_merges_prepare_count {#shared_merge_tree_merge_coordinator_merges_prepare_count} - - - - - - -コーディネーターが準備し、各ワーカーに配分するマージエントリの数 - - - -## shared_merge_tree_merge_coordinator_min_period_ms {#shared_merge_tree_merge_coordinator_min_period_ms} - - - - - - -マージコーディネータースレッドの実行間隔の最小値 - - - -## shared_merge_tree_merge_worker_fast_timeout_ms {#shared_merge_tree_merge_worker_fast_timeout_ms} - - - - - - -即時の処理後に状態を更新する必要がある場合に、マージワーカースレッドが使用するタイムアウト値。 - - - -## shared_merge_tree_merge_worker_regular_timeout_ms {#shared_merge_tree_merge_worker_regular_timeout_ms} - - - - - - -マージワーカースレッドが実行される間隔 - - - -## shared_merge_tree_outdated_parts_group_size {#shared_merge_tree_outdated_parts_group_size} - - - - -古くなったパーツのクリーンアップ時に、同じランデブーハッシュグループに含めるレプリカの数。 -ClickHouse Cloud でのみ利用可能です。 - - - -## shared_merge_tree_partitions_hint_ratio_to_reload_merge_pred_for_mutations {#shared_merge_tree_partitions_hint_ratio_to_reload_merge_pred_for_mutations} - - -`/` の比率がこの設定値より高い場合、merge/mutate の選択タスクにおいて merge predicate を再読み込みします。ClickHouse Cloud でのみ利用可能です。 - - - -## shared_merge_tree_parts_load_batch_size {#shared_merge_tree_parts_load_batch_size} - - -一度にスケジュールするパーツメタデータフェッチジョブの数。ClickHouse Cloud でのみ利用可能です。 - - - -## shared_merge_tree_postpone_next_merge_for_locally_merged_parts_ms {#shared_merge_tree_postpone_next_merge_for_locally_merged_parts_ms} - - - - -ローカルでマージされたパーツを、それを含む新たなマージを開始せずに保持しておく時間。 -他のレプリカがそのパーツを取得し、そのマージを開始できるようにするための猶予を与えます。 -ClickHouse Cloud でのみ利用可能です。 - - - -## shared_merge_tree_postpone_next_merge_for_locally_merged_parts_rows_threshold {#shared_merge_tree_postpone_next_merge_for_locally_merged_parts_rows_threshold} - - - - -ローカルでのマージ完了直後に次のマージの割り当てを延期するための、パーツの最小サイズ(行数単位)。ClickHouse Cloud でのみ利用可能です。 - - - -## shared_merge_tree_range_for_merge_window_size {#shared_merge_tree_range_for_merge_window_size} - - - - -このパーツを含む新しいマージを開始せずに、ローカルでマージ済みパーツを保持しておく時間です。他のレプリカがそのパーツを取得して、同じマージを開始できるようにするための猶予を与えます。 -ClickHouse Cloud でのみ利用可能です。 - - - -## shared_merge_tree_read_virtual_parts_from_leader {#shared_merge_tree_read_virtual_parts_from_leader} - - - - -可能な場合はリーダーから仮想パーツを読み込みます。ClickHouse -Cloud でのみ利用可能です。 - - - -## shared_merge_tree_try_fetch_part_in_memory_data_from_replicas {#shared_merge_tree_try_fetch_part_in_memory_data_from_replicas} - - - - -有効にすると、すべてのレプリカが、すでにそのデータが存在している他のレプリカから、メモリ上のパーツデータ(主キー、パーティション情報など)を取得しようとします。 - - - -## shared_merge_tree_update_replica_flags_delay_ms {#shared_merge_tree_update_replica_flags_delay_ms} - - - - -レプリカがバックグラウンドのスケジュールに従ってフラグの再読み込みを試行する頻度を指定します。 - - - -## shared_merge_tree_use_metadata_hints_cache {#shared_merge_tree_use_metadata_hints_cache} - - - - -他のレプリカ上にあるインメモリキャッシュから、FS キャッシュのヒントを要求できるようにします。ClickHouse Cloud でのみ利用可能です。 - - - -## shared_merge_tree_use_outdated_parts_compact_format {#shared_merge_tree_use_outdated_parts_compact_format} - - - - -outdated parts に対してコンパクト形式を使用します。Keeper への負荷を軽減し、outdated parts の処理効率を向上させます。ClickHouse Cloud でのみ利用可能です。 - - - -## shared_merge_tree_use_too_many_parts_count_from_virtual_parts {#shared_merge_tree_use_too_many_parts_count_from_virtual_parts} - - - - -有効化すると、過剰なパーツ数を検知するカウンターは、ローカルレプリカの状態ではなく Keeper 内の共有データを参照します。ClickHouse Cloud でのみ利用可能です。 - - - -## shared_merge_tree_virtual_parts_discovery_batch {#shared_merge_tree_virtual_parts_discovery_batch} - - - - - - -1 回のバッチにまとめるパーティション検出の件数 - - - -## simultaneous_parts_removal_limit {#simultaneous_parts_removal_limit} - - -古いパーツが多数存在する場合、クリーンアップスレッドは 1 回のイテレーションで最大 -`simultaneous_parts_removal_limit` 個のパーツを削除しようとします。 -`simultaneous_parts_removal_limit` が `0` に設定されている場合は無制限を意味します。 - - - -## sleep_before_commit_local_part_in_replicated_table_ms {#sleep_before_commit_local_part_in_replicated_table_ms} - - -テスト目的の設定です。変更しないでください。 - - - -## sleep_before_loading_outdated_parts_ms {#sleep_before_loading_outdated_parts_ms} - - -テスト目的の設定です。変更しないでください。 - - - -## storage_policy {#storage_policy} - - -ストレージディスクのポリシー名 - - - -## string_serialization_version {#string_serialization_version} - - - - -トップレベルの `String` カラムに対するシリアル化フォーマットを制御します。 - -この設定は、`serialization_info_version` が "with_types" に設定されている場合にのみ有効です。 -この設定を有効にすると、トップレベルの `String` カラムは、文字列長を保持する `.size` -サブカラムをインラインではなく分離してシリアル化します。これにより実際の `.size` -サブカラムが利用可能になり、圧縮効率が向上する場合があります。 - -ネストされた `String` 型(`Nullable`、`LowCardinality`、`Array`、`Map` 内など) -には影響しませんが、`Tuple` 内に現れる場合は例外です。 - -指定可能な値: - -- `single_stream` — サイズをインラインで保持する標準的なシリアル化フォーマットを使用します。 -- `with_size_stream` — トップレベルの `String` カラムに対して、サイズ専用のストリームを別に使用します。 - - - -## table_disk {#table_disk} - - - - -これは table_disk 設定であり、path/endpoint はデータベース全体のデータではなくテーブルデータを指す必要があります。s3_plain/s3_plain_rewritable/web の場合にのみ設定できます。 - - - -## temporary_directories_lifetime {#temporary_directories_lifetime} - - -`tmp_` ディレクトリを保持しておく時間(秒)です。この値をあまり下げないでください。 -この設定値が低すぎると、マージやミューテーションが正常に動作しない可能性があります。 - - - -## try_fetch_recompressed_part_timeout {#try_fetch_recompressed_part_timeout} - - -再圧縮を伴うマージを開始するまでのタイムアウト時間(秒単位)。この時間の間、ClickHouse は、その再圧縮マージが割り当てられているレプリカから、再圧縮済みパートの取得を試みます。 - -多くの場合、再圧縮は処理に時間がかかるため、このタイムアウトに達するまでは再圧縮を伴うマージ処理を開始せず、該当の再圧縮マージが割り当てられているレプリカから再圧縮済みパートの取得を試みます。 - -設定可能な値: -- 任意の正の整数。 - - - -## ttl_only_drop_parts {#ttl_only_drop_parts} - - -`TTL` 設定に基づいて、そのパーツ内のすべての行が有効期限切れになったときに、MergeTree テーブルのデータパーツを完全に削除するかどうかを制御します。 - -`ttl_only_drop_parts` が無効(デフォルト)の場合、`TTL` 設定に基づいて有効期限切れになった行だけが削除されます。 - -`ttl_only_drop_parts` が有効な場合、そのパーツ内のすべての行が `TTL` 設定に従って有効期限切れになった場合、そのパーツ全体が削除されます。 - - - -## use_adaptive_write_buffer_for_dynamic_subcolumns {#use_adaptive_write_buffer_for_dynamic_subcolumns} - - -動的サブカラムの書き込み時に適応型書き込みバッファを使用し、メモリ使用量を削減できるようにします - - - -## use_async_block_ids_cache {#use_async_block_ids_cache} - - -`true` の場合、非同期インサートのハッシュ値をキャッシュします。 - -取りうる値: -- `true` -- `false` - -複数の非同期インサートを含むブロックは、複数のハッシュ値を生成します。 -インサートの一部が重複している場合、Keeper は 1 回の RPC で重複したハッシュ値を 1 つしか返さないため、不要な RPC の再試行が発生します。 -このキャッシュは Keeper 内のハッシュ値が格納されたパスを監視します。Keeper 側で更新が検知されると、キャッシュは可能な限り早く更新されるため、メモリ上で重複インサートをフィルタリングできるようになります。 - - - -## use_compact_variant_discriminators_serialization {#use_compact_variant_discriminators_serialization} - - -`Variant` データ型における判別子のバイナリシリアル化でコンパクトモードを有効にします。 -このモードでは、ほとんどが 1 種類のバリアントである場合や `NULL` 値が非常に多い場合に、 -パーツ内で判別子を保存するために必要なメモリ使用量を大幅に削減できます。 - - - -## use_const_adaptive_granularity {#use_const_adaptive_granularity} - - -パーツ全体に対して常に固定の粒度を使用します。これにより、インデックス粒度の値をメモリ上で圧縮できます。非常に大規模なワークロードで、スリムなテーブルに対して有用な場合があります。 - - - -## use_metadata_cache {#use_metadata_cache} - -非推奨の設定であり、現在は何も行いません。 -## use_minimalistic_checksums_in_zookeeper {#use_minimalistic_checksums_in_zookeeper} - - -ZooKeeper 内のパートのチェックサムについて、通常の形式(数十 KB)ではなく、 -より小さい形式(数十バイト)を使用します。有効化する前に、すべてのレプリカが -新しい形式をサポートしていることを確認してください。 - - - -## use_minimalistic_part_header_in_zookeeper {#use_minimalistic_part_header_in_zookeeper} - - -ZooKeeper 内でのデータパーツのヘッダーの保存方式を設定します。有効にすると、ZooKeeper に保存されるデータ量が少なくなります。詳細は[こちら](/operations/server-configuration-parameters/settings#use_minimalistic_part_header_in_zookeeper)を参照してください。 - - - -## use_primary_key_cache {#use_primary_key_cache} - - - -すべてのインデックスをメモリに保持するのではなく、プライマリインデックス用のキャッシュを使用します。非常に大きなテーブルで有用です。 - - - -## vertical_merge_algorithm_min_bytes_to_activate {#vertical_merge_algorithm_min_bytes_to_activate} - - -Vertical merge アルゴリズムを有効化するために必要な、マージ対象パーツの非圧縮サイズ合計の最小(概算)バイト数。 - - - -## vertical_merge_algorithm_min_columns_to_activate {#vertical_merge_algorithm_min_columns_to_activate} - - -Vertical マージアルゴリズムを有効化するために必要な非 PK 列の最小数。 - - - -## vertical_merge_algorithm_min_rows_to_activate {#vertical_merge_algorithm_min_rows_to_activate} - - -Vertical マージアルゴリズムを有効化するために必要な、 -マージ対象パーツに含まれる行数の最小(概算)合計値。 - - - -## vertical_merge_optimize_lightweight_delete {#vertical_merge_optimize_lightweight_delete} - - - - -`true` の場合、`vertical merge` 時に `lightweight delete` が最適化されます。 - - - -## vertical_merge_remote_filesystem_prefetch {#vertical_merge_remote_filesystem_prefetch} - - -`true` の場合、マージ処理中に次の列に対して、リモートファイルシステムからのデータの先読みが行われます。 - - - -## wait_for_unique_parts_send_before_shutdown_ms {#wait_for_unique_parts_send_before_shutdown_ms} - - -シャットダウン前に、テーブルは一意なパーツ(現在のレプリカのみに存在するもの)が他のレプリカによってフェッチされるまで、設定された時間だけ待機します(0 の場合は無効)。 - - - -## write_ahead_log_bytes_to_fsync {#write_ahead_log_bytes_to_fsync} - -廃止された設定で、何も行いません。 -## write_ahead_log_interval_ms_to_fsync {#write_ahead_log_interval_ms_to_fsync} - -廃止された設定で、何も行いません。 -## write_ahead_log_max_bytes {#write_ahead_log_max_bytes} - -廃止された設定で、何も行いません。 -## write_final_mark {#write_final_mark} - -廃止された設定で、何も行いません。 -## write_marks_for_substreams_in_compact_parts {#write_marks_for_substreams_in_compact_parts} - - - - -Compact パーツで、各カラムごとではなく各サブストリームごとにマークを書き込むことを有効化します。 -これにより、データパーツから個々のサブカラムを効率的に読み取ることができます。 - -例えば、カラム `t Tuple(a String, b UInt32, c Array(Nullable(UInt32)))` は、次のサブストリームとしてシリアライズされます: -- タプル要素 `a` の String データ用の `t.a` -- タプル要素 `b` の UInt32 データ用の `t.b` -- タプル要素 `c` の配列サイズ用の `t.c.size0` -- タプル要素 `c` のネストした配列要素の null マップ用の `t.c.null` -- タプル要素 `c` のネストした配列要素の UInt32 データ用の `t.c` - -この設定が有効な場合、これら 5 つのサブストリームそれぞれに対してマークを書き込みます。これは、必要に応じて各サブストリームのデータをグラニュールから個別に読み取ることができることを意味します。例えば、サブカラム `t.c` を読み取りたい場合、サブストリーム `t.c.size0`、`t.c.null`、`t.c` のデータのみを読み取り、サブストリーム `t.a` と `t.b` のデータは読み取りません。この設定が無効な場合、トップレベルカラム `t` に対してのみマークを書き込みます。これは、特定のサブストリームのデータだけが必要な場合でも、常にグラニュールからカラム全体のデータを読み取ることになることを意味します。 - - - -## zero_copy_concurrent_part_removal_max_postpone_ratio {#zero_copy_concurrent_part_removal_max_postpone_ratio} - - -より小さな独立した範囲を得るために、削除を延期できるトップレベルのパーツの最大割合です。変更しないことを推奨します。 - - - -## zero_copy_concurrent_part_removal_max_split_times {#zero_copy_concurrent_part_removal_max_split_times} - - -独立した Outdated パーツの範囲を、より小さなサブレンジに分割する際の再帰処理の最大深さです。変更しないことを推奨します。 - - - -## zero_copy_merge_mutation_min_parts_size_sleep_before_lock {#zero_copy_merge_mutation_min_parts_size_sleep_before_lock} - - -ゼロコピーレプリケーションが有効な場合、マージまたはミューテーション用のパーツのサイズに応じて、ロックを取得しようとする前にランダムな時間だけスリープします。 - - - -## zero_copy_merge_mutation_min_parts_size_sleep_no_scale_before_lock {#zero_copy_merge_mutation_min_parts_size_sleep_no_scale_before_lock} - - - - -ゼロコピーレプリケーションが有効な場合、マージまたはミューテーションのロックを試行する前に、最大 500ms のランダムな時間だけ待機します。 - - - -## zookeeper_session_expiration_check_period {#zookeeper_session_expiration_check_period} - - -ZooKeeper セッション有効期限のチェック間隔(秒)。 - -可能な値: -- 任意の正の整数。 - diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/settings/settings-formats.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/settings/settings-formats.md index 078ffa6e256..ecec7626a19 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/settings/settings-formats.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/settings/settings-formats.md @@ -1,2804 +1,10 @@ --- -title: 'フォーマット設定' +description: 'フォーマット関連の設定' sidebar_label: 'フォーマット設定' slug: /operations/settings/formats +title: 'フォーマット設定' toc_max_heading_level: 2 -description: '入力および出力フォーマットを制御する設定。' doc_type: 'reference' --- -import ExperimentalBadge from '@theme/badges/ExperimentalBadge'; -import BetaBadge from '@theme/badges/BetaBadge'; -import SettingsInfoBlock from '@theme/SettingsInfoBlock/SettingsInfoBlock'; -import VersionHistory from '@theme/VersionHistory/VersionHistory'; - -{/* 自動生成 */ } - -これらの設定は、[ソースコード](https://github.com/ClickHouse/ClickHouse/blob/master/src/Core/FormatFactorySettings.h) から自動生成されています。 - - -## allow_special_bool_values_inside_variant {#allow_special_bool_values_inside_variant} - - - -Variant 型内の Bool 値について、"on"、"off"、"enable"、"disable" などの特殊なテキスト表現も Bool 値として解釈できるようにします。 - - - -## bool_false_representation {#bool_false_representation} - - - -TSV/CSV/Vertical/Pretty 形式で bool 型の false を表現するための文字列。 - - - -## bool_true_representation {#bool_true_representation} - - - -TSV/CSV/Vertical/Pretty 形式での `true` ブール値の表現に使用する文字列。 - - - -## column_names_for_schema_inference {#column_names_for_schema_inference} - - - -列名を含まないフォーマットに対して、スキーマ推論で使用する列名の一覧を指定します。形式: 'column1,column2,column3,...' - - - -## cross_to_inner_join_rewrite {#cross_to_inner_join_rewrite} - - - -WHERE 句に結合条件が含まれている場合、カンマ結合 / クロス結合を inner join に書き換えて使用します。値: 0 - 書き換えなし、1 - 可能であればカンマ結合 / クロス結合に適用、2 - すべてのカンマ結合を強制的に書き換え、cross - 可能であればクロス結合を書き換え - - - -## date_time_64_output_format_cut_trailing_zeros_align_to_groups_of_thousands {#date_time_64_output_format_cut_trailing_zeros_align_to_groups_of_thousands} - - - -datetime64 の値の末尾のゼロを動的に切り詰めて、出力スケールを [0, 3, 6] に調整します。 -それぞれ 'seconds'、'milliseconds'、'microseconds' に対応します。 - - - -## date_time_input_format {#date_time_input_format} - - - -日時のテキスト表現を解析するパーサーを選択できます。 - -この設定は[日時関数](../../sql-reference/functions/date-time-functions.md)には適用されません。 - -設定可能な値: - -- `'best_effort'` — 拡張された解析を有効にします。 - - ClickHouse は基本形式 `YYYY-MM-DD HH:MM:SS` と、すべての [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) 日時形式を解析できます。例えば、`'2018-06-08T01:02:03.000Z'` です。 - -- `'best_effort_us'` — `best_effort` と同様です([parseDateTimeBestEffortUS](../../sql-reference/functions/type-conversion-functions#parsedatetimebesteffortus) との違いを参照)。 - -- `'basic'` — 基本パーサーを使用します。 - - ClickHouse は基本形式 `YYYY-MM-DD HH:MM:SS` または `YYYY-MM-DD` のみを解析できます。例えば、`2019-08-20 10:18:56` や `2019-08-20` です。 - -Cloud でのデフォルト値: `'best_effort'`。 - -関連項目: - -- [DateTime データ型。](../../sql-reference/data-types/datetime.md) -- [日付と時刻を扱う関数。](../../sql-reference/functions/date-time-functions.md) - - - -## date_time_output_format {#date_time_output_format} - - - -日付と時刻のテキスト表現による出力フォーマットを選択できます。 - -指定可能な値: - -- `simple` - シンプルな出力フォーマット。 - - ClickHouse が日付と時刻を `YYYY-MM-DD hh:mm:ss` 形式で出力します。例えば `2019-08-20 10:18:56`。計算はデータ型に設定されたタイムゾーン(存在する場合)またはサーバーのタイムゾーンに従って行われます。 - -- `iso` - ISO 出力フォーマット。 - - ClickHouse が日付と時刻を [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) の `YYYY-MM-DDThh:mm:ssZ` 形式で出力します。例えば `2019-08-20T10:18:56Z`。出力は UTC である点に注意してください(`Z` は UTC を意味します)。 - -- `unix_timestamp` - Unix タイムスタンプ出力フォーマット。 - - ClickHouse が日付と時刻を [Unix timestamp](https://en.wikipedia.org/wiki/Unix_time) 形式で出力します。例えば `1566285536`。 - -関連項目: - -- [DateTime データ型。](../../sql-reference/data-types/datetime.md) -- [日付と時刻を扱う関数。](../../sql-reference/functions/date-time-functions.md) - - - -## date_time_overflow_behavior {#date_time_overflow_behavior} - - - -[Date](../../sql-reference/data-types/date.md)、[Date32](../../sql-reference/data-types/date32.md)、[DateTime](../../sql-reference/data-types/datetime.md)、[DateTime64](../../sql-reference/data-types/datetime64.md) または整数を Date、Date32、DateTime、DateTime64 に変換する際に、その値が結果の型で表現できない場合の動作を定義します。 - -指定可能な値: - -- `ignore` — オーバーフローを黙って無視します。結果は未定義です。 -- `throw` — オーバーフローが発生した場合に例外をスローします。 -- `saturate` — 結果を飽和させます。値が対象の型で表現可能な最小値より小さい場合、結果は表現可能な最小値になります。値が対象の型で表現可能な最大値より大きい場合、結果は表現可能な最大値になります。 - -デフォルト値: `ignore`. - - - -## dictionary_use_async_executor {#dictionary_use_async_executor} - - - -辞書ソースの読み取りパイプラインを複数スレッドで実行します。ローカルの ClickHouse ソースを持つ辞書でのみサポートされます。 - - - -## errors_output_format {#errors_output_format} - - - -Errors をテキスト出力として書き出す方式。 - - - -## exact_rows_before_limit {#exact_rows_before_limit} - - - -有効にすると、ClickHouse は `rows_before_limit_at_least` 統計値に対して正確な値を返しますが、その代わりに `LIMIT` より前のデータを完全に読み込む必要があります。 - - - -## format_avro_schema_registry_url {#format_avro_schema_registry_url} - - - -AvroConfluent 形式向けの Confluent Schema Registry の URL。 - - - -## format_binary_max_array_size {#format_binary_max_array_size} - - - -RowBinary 形式における Array の許可される最大サイズです。破損したデータにより大量のメモリが割り当てられることを防ぎます。0 は上限がないことを意味します。 - - - -## format_binary_max_string_size {#format_binary_max_string_size} - - - -RowBinary 形式における String の許可される最大サイズです。破損したデータにより大量のメモリが割り当てられることを防ぎます。0 を指定すると上限はありません。 - - - -## format_capn_proto_enum_comparising_mode {#format_capn_proto_enum_comparising_mode} - - - -ClickHouse の Enum 型と CapnProto の Enum 型の対応付け方法 - - - -## format_capn_proto_use_autogenerated_schema {#format_capn_proto_use_autogenerated_schema} - - - -format_schema が設定されていない場合は、自動生成された CapnProto スキーマを使用する - - - -## format_csv_allow_double_quotes {#format_csv_allow_double_quotes} - - - -true に設定すると、二重引用符で囲まれた文字列を許可します。 - - - -## format_csv_allow_single_quotes {#format_csv_allow_single_quotes} - - - -true に設定すると、文字列を単一引用符(シングルクォート)で囲んで指定できるようになります。 - - - -## format_csv_delimiter {#format_csv_delimiter} - - - -CSV データ内で区切り文字として使用される文字です。文字列で設定する場合、その文字列の長さは 1 である必要があります。 - - - -## format_csv_null_representation {#format_csv_null_representation} - - - -CSV 形式における NULL の独自表現 - - - -## format_custom_escaping_rule {#format_custom_escaping_rule} - - - -フィールドのエスケープ規則(CustomSeparated 形式用) - - - -## format_custom_field_delimiter {#format_custom_field_delimiter} - - - -フィールド間の区切り文字(CustomSeparated 形式用) - - - -## format_custom_result_after_delimiter {#format_custom_result_after_delimiter} - - - -結果セットの後ろに付与するサフィックス(CustomSeparated 形式用) - - - -## format_custom_result_before_delimiter {#format_custom_result_before_delimiter} - - - -結果セットの前に付加される接頭辞(CustomSeparated 形式用) - - - -## format_custom_row_after_delimiter {#format_custom_row_after_delimiter} - - - -最後の列のフィールドの後ろに付加される区切り文字(`CustomSeparated` 形式用) - - - -## format_custom_row_before_delimiter {#format_custom_row_before_delimiter} - - - -先頭列のフィールドの前に置かれる区切り文字(CustomSeparated 形式用) - - - -## format_custom_row_between_delimiter {#format_custom_row_between_delimiter} - - - -行間の区切り文字(CustomSeparated 形式用) - - - -## format_display_secrets_in_show_and_select {#format_display_secrets_in_show_and_select} - - - -テーブル、データベース、テーブル関数、およびディクショナリに対する `SHOW` および `SELECT` クエリでシークレットを表示するかどうかを制御します。 - -シークレットを表示したいユーザーは、 -[`display_secrets_in_show_and_select` server setting](../server-configuration-parameters/settings#display_secrets_in_show_and_select) -を有効にし、さらに -[`displaySecretsInShowAndSelect`](/sql-reference/statements/grant#displaysecretsinshowandselect) 権限を持っている必要があります。 - -設定可能な値: - -- 0 — 無効。 -- 1 — 有効。 - - - -## format_json_object_each_row_column_for_object_name {#format_json_object_each_row_column_for_object_name} - - - -[JSONObjectEachRow](/interfaces/formats/JSONObjectEachRow) フォーマットでオブジェクト名を格納および書き込むために使用される列の名前です。 -列の型は String 型である必要があります。値が空の場合、オブジェクト名としてデフォルト名 `row_{i}` が使用されます。 - - - -## format_protobuf_use_autogenerated_schema {#format_protobuf_use_autogenerated_schema} - - - -format_schema が設定されていない場合に自動生成された Protobuf を使用します - - - -## format_regexp {#format_regexp} - - - -正規表現(Regexp 形式) - - - -## format_regexp_escaping_rule {#format_regexp_escaping_rule} - - - -フィールドのエスケープルール(Regexp フォーマット用) - - - -## format_regexp_skip_unmatched {#format_regexp_skip_unmatched} - - - -正規表現に一致しない行をスキップします(Regexp フォーマット用) - - - -## format_schema {#format_schema} - - - -このパラメータは、[Cap'n Proto](https://capnproto.org/) や [Protobuf](https://developers.google.com/protocol-buffers/) のような、スキーマ定義を必要とするフォーマットを使用する場合に利用します。パラメータ値はフォーマットによって異なります。 - - - -## format_schema_message_name {#format_schema_message_name} - - - -`format_schema` で定義されたスキーマ内で、対象となるメッセージの名前を定義します。 -旧来の `format_schema` 形式(`file_name:message_name`)との互換性を維持するため、次のルールが適用されます: -- `format_schema_message_name` が指定されていない場合、メッセージ名は旧来の `format_schema` の値の `message_name` 部分から自動的に決定されます。 -- 旧来の形式を使用しているときに `format_schema_message_name` が指定されている場合は、エラーが発生します。 - - - -## format_schema_source {#format_schema_source} - - - -`format_schema` のソースを定義します。 -指定可能な値は次のとおりです: -- 'file' (デフォルト): `format_schema` は `format_schemas` ディレクトリ内にあるスキーマファイルの名前です。 -- 'string': `format_schema` はスキーマのリテラルな内容です。 -- 'query': `format_schema` はスキーマを取得するためのクエリです。 -`format_schema_source` が 'query' に設定されている場合、次の条件が適用されます: -- クエリは必ずちょうど 1 つの値を返す必要があります。つまり、1 行かつ 1 つの文字列カラムのみを返します。 -- クエリの結果はスキーマの内容として扱われます。 -- この結果はローカルで `format_schemas` ディレクトリにキャッシュされます。 -- ローカルキャッシュは `SYSTEM DROP FORMAT SCHEMA CACHE FOR Files` コマンドでクリアできます。 -- 一度キャッシュされると、キャッシュが明示的にクリアされるまで、同一クエリはスキーマ取得のために再実行されません。 -- ローカルキャッシュファイルに加えて、Protobuf メッセージもメモリ内にキャッシュされます。ローカルキャッシュファイルをクリアした後でも、スキーマを完全にリフレッシュするには `SYSTEM DROP FORMAT SCHEMA CACHE [FOR Protobuf]` を使用してメモリ内キャッシュもクリアする必要があります。 -- クエリ `SYSTEM DROP FORMAT SCHEMA CACHE` を実行すると、キャッシュファイルと Protobuf メッセージのスキーマの両方のキャッシュを一度にクリアできます。 - - - -## format_template_resultset {#format_template_resultset} - - - -結果セット用のフォーマット文字列を含むファイルのパス(Template フォーマット用) - - - -## format_template_resultset_format {#format_template_resultset_format} - - - -結果セットのフォーマット文字列(Template 形式) - - - -## format_template_row {#format_template_row} - - - -行ごとのフォーマット文字列が記述されたファイルへのパス(Template 形式用) - - - -## format_template_row_format {#format_template_row_format} - - - -Template フォーマット用の行フォーマット文字列 - - - -## format_template_rows_between_delimiter {#format_template_rows_between_delimiter} - - - -行間の区切り文字(Template フォーマット用) - - - -## format_tsv_null_representation {#format_tsv_null_representation} - - - -TSV 形式での NULL 表現のカスタマイズ - - - -## input_format_allow_errors_num {#input_format_allow_errors_num} - - - -テキスト形式(CSV、TSV など)から読み込む際に許容されるエラー数の上限を設定します。 - -デフォルト値は0です。 - -必ず `input_format_allow_errors_ratio` と併用してください。 - -行の読み取り中にエラーが発生しても、エラー数カウンタがまだ `input_format_allow_errors_num` 未満であれば、ClickHouse はその行を無視して次の行の処理に進みます。 - -`input_format_allow_errors_num` と `input_format_allow_errors_ratio` の両方で上限を超えた場合、ClickHouse は例外をスローします。 - - - -## input_format_allow_errors_ratio {#input_format_allow_errors_ratio} - - - -テキストフォーマット(CSV、TSV など)から読み取る際に許可されるエラーの最大割合を設定します。 -エラーの割合は 0 から 1 までの浮動小数点数で指定します。 - -デフォルト値は 0 です。 - -必ず `input_format_allow_errors_num` と組み合わせて使用してください。 - -行の読み取り中にエラーが発生しても、エラーの割合がまだ `input_format_allow_errors_ratio` 未満であれば、ClickHouse はその行を無視して次の行の読み取りを続行します。 - -`input_format_allow_errors_num` と `input_format_allow_errors_ratio` の両方を超えた場合、ClickHouse は例外を送出します。 - - - -## input_format_allow_seeks {#input_format_allow_seeks} - - - -ORC/Parquet/Arrow 入力フォーマットを読み込む際に、シーク(任意位置へのアクセス)を許可します。 - -デフォルトで有効になっています。 - - - -## input_format_arrow_allow_missing_columns {#input_format_arrow_allow_missing_columns} - - - -Arrow 形式の入力を読み込む際に、欠損している列を許可する - - - -## input_format_arrow_case_insensitive_column_matching {#input_format_arrow_case_insensitive_column_matching} - - - -Arrow のカラムと ClickHouse のカラムを照合する際に、大文字小文字の違いを無視します。 - - - -## input_format_arrow_skip_columns_with_unsupported_types_in_schema_inference {#input_format_arrow_skip_columns_with_unsupported_types_in_schema_inference} - - - -Arrow フォーマットのスキーマ推論時に、サポートされていない型を持つカラムをスキップする - - - -## input_format_avro_allow_missing_fields {#input_format_avro_allow_missing_fields} - - - -Avro/AvroConfluent 形式用: スキーマ内に対応するフィールドが存在しない場合は、エラーではなくデフォルト値を使用します - - - -## input_format_avro_null_as_default {#input_format_avro_null_as_default} - - - -Avro/AvroConfluent フォーマットの場合: 非 Nullable 列の値が null の場合にデフォルト値を挿入します - - - -## input_format_binary_decode_types_in_binary_format {#input_format_binary_decode_types_in_binary_format} - - - -RowBinaryWithNamesAndTypes 入力フォーマットで、型名ではなくデータ型をバイナリ形式で読み取ります - - - -## input_format_binary_read_json_as_string {#input_format_binary_read_json_as_string} - - - -RowBinary 入力フォーマットで、[JSON](../../sql-reference/data-types/newjson.md) データ型の値を [String](../../sql-reference/data-types/string.md) 型の JSON 文字列として読み取ります。 - - - -## input_format_bson_skip_fields_with_unsupported_types_in_schema_inference {#input_format_bson_skip_fields_with_unsupported_types_in_schema_inference} - - - -BSON 形式のスキーマ推論時に、サポートされていない型のフィールドをスキップします。 - - - -## input_format_capn_proto_skip_fields_with_unsupported_types_in_schema_inference {#input_format_capn_proto_skip_fields_with_unsupported_types_in_schema_inference} - - - -CapnProto 形式のスキーマ推論時に、サポートされていない型の列をスキップする - - - -## input_format_csv_allow_cr_end_of_line {#input_format_csv_allow_cr_end_of_line} - - - -true に設定すると、後続がない行末の \\r が許可されます - - - -## input_format_csv_allow_variable_number_of_columns {#input_format_csv_allow_variable_number_of_columns} - - - -CSV 入力で余分な列(ファイルに想定より多くの列がある場合)は無視し、CSV 入力で不足しているフィールドにはデフォルト値を使用します - - - -## input_format_csv_allow_whitespace_or_tab_as_delimiter {#input_format_csv_allow_whitespace_or_tab_as_delimiter} - - - -CSV 文字列でフィールド区切り文字としてスペースおよびタブ (\\t) の使用を許可します - - - -## input_format_csv_arrays_as_nested_csv {#input_format_csv_arrays_as_nested_csv} - - - -CSV から Array を読み取る際に、その要素が入れ子の CSV 形式としてシリアル化され、その結果が文字列として格納されていることを想定します。例: \"[\"\"Hello\"\", \"\"world\"\", \"\"42\"\"\"\" TV\"\"]\"。配列を囲む角括弧は省略可能です。 - - - -## input_format_csv_deserialize_separate_columns_into_tuple {#input_format_csv_deserialize_separate_columns_into_tuple} - - - -true に設定すると、CSV 形式で書き出された個別の列を Tuple 列としてデシリアライズできます。 - - - -## input_format_csv_detect_header {#input_format_csv_detect_header} - - - -CSV 形式の名前と型情報を含むヘッダー行を自動検出します - - - -## input_format_csv_empty_as_default {#input_format_csv_empty_as_default} - - - -CSV 入力の空フィールドをデフォルト値として扱います。 - - - -## input_format_csv_enum_as_number {#input_format_csv_enum_as_number} - - - -CSV 形式で挿入された enum 値を enum インデックスとして扱います - - - -## input_format_csv_skip_first_lines {#input_format_csv_skip_first_lines} - - - -CSV 形式データの先頭から指定した行数をスキップします - - - -## input_format_csv_skip_trailing_empty_lines {#input_format_csv_skip_trailing_empty_lines} - - - -CSV 形式で末尾の空行をスキップします - - - -## input_format_csv_trim_whitespaces {#input_format_csv_trim_whitespaces} - - - -CSV 文字列の先頭と末尾にあるスペースおよびタブ (\\t) 文字を除去します - - - -## input_format_csv_try_infer_numbers_from_strings {#input_format_csv_try_infer_numbers_from_strings} - - - -有効にすると、スキーマ推論の際に ClickHouse は文字列フィールドから数値を推論しようとします。 -CSV データに引用符で囲まれた UInt64 型の数値が含まれている場合に有用です。 - -デフォルトでは無効です。 - - - -## input_format_csv_try_infer_strings_from_quoted_tuples {#input_format_csv_try_infer_strings_from_quoted_tuples} - - - -入力データ内の引用符で囲まれたタプルを、String 型の値として解釈します。 - - - -## input_format_csv_use_best_effort_in_schema_inference {#input_format_csv_use_best_effort_in_schema_inference} - - - -CSV 形式のスキーマを推論する際に、いくつかの調整およびヒューリスティック手法を用います - - - -## input_format_csv_use_default_on_bad_values {#input_format_csv_use_default_on_bad_values} - - - -不正な値により CSV フィールドのデシリアライズが失敗した場合、その列にデフォルト値を設定できるようにします - - - -## input_format_custom_allow_variable_number_of_columns {#input_format_custom_allow_variable_number_of_columns} - - - -CustomSeparated 形式の入力で、ファイルに期待される列数より多い列が含まれている場合は余分な列を無視し、不足しているフィールドはデフォルト値として扱います - - - -## input_format_custom_detect_header {#input_format_custom_detect_header} - - - -CustomSeparated 形式で、名前および型を含むヘッダー行を自動検出します - - - -## input_format_custom_skip_trailing_empty_lines {#input_format_custom_skip_trailing_empty_lines} - - - -CustomSeparated 形式で末尾の空行をスキップする - - - -## input_format_defaults_for_omitted_fields {#input_format_defaults_for_omitted_fields} - - - -`INSERT` クエリを実行する際、省略された入力カラムの値を対応するカラムのデフォルト値で置き換えます。 -このオプションは、[JSONEachRow](/interfaces/formats/JSONEachRow)(およびその他の JSON フォーマット)、[CSV](/interfaces/formats/CSV)、[TabSeparated](/interfaces/formats/TabSeparated)、[TSKV](/interfaces/formats/TSKV)、[Parquet](/interfaces/formats/Parquet)、[Arrow](/interfaces/formats/Arrow)、[Avro](/interfaces/formats/Avro)、[ORC](/interfaces/formats/ORC)、[Native](/interfaces/formats/Native) フォーマットおよび `WithNames`/`WithNamesAndTypes` サフィックスを持つフォーマットに適用されます。 - -:::note -このオプションを有効にすると、拡張テーブルメタデータがサーバーからクライアントへ送信されます。これによりサーバー側で追加の計算リソースを消費し、パフォーマンスが低下する可能性があります。 -::: - -設定可能な値: - -- 0 — 無効。 -- 1 — 有効。 - - - -## input_format_force_null_for_omitted_fields {#input_format_force_null_for_omitted_fields} - - - -省略されたフィールドを強制的に `null` 値で初期化する - - - -## input_format_hive_text_allow_variable_number_of_columns {#input_format_hive_text_allow_variable_number_of_columns} - - - -Hive Text 入力で余分な列(ファイルに想定より多くの列がある場合)を無視し、Hive Text 入力で欠損しているフィールドにはデフォルト値を用います - - - -## input_format_hive_text_collection_items_delimiter {#input_format_hive_text_collection_items_delimiter} - - - -Hive Text File におけるコレクション(array または map)要素間の区切り文字 - - - -## input_format_hive_text_fields_delimiter {#input_format_hive_text_fields_delimiter} - - - -Hive TextFile 形式でのフィールド区切り文字 - - - -## input_format_hive_text_map_keys_delimiter {#input_format_hive_text_map_keys_delimiter} - - - -Hive Text File において、マップのキー/値ペア間を区切るデリミタ。 - - - -## input_format_import_nested_json {#input_format_import_nested_json} - - - -ネストされたオブジェクトを含む JSON データの挿入を有効または無効にします。 - -サポートされているフォーマット: - -- [JSONEachRow](/interfaces/formats/JSONEachRow) - -可能な値: - -- 0 — 無効。 -- 1 — 有効。 - -関連項目: - -- `JSONEachRow` フォーマットでの[ネストされた構造の利用](/integrations/data-formats/json/other-formats#accessing-nested-json-objects)。 - - - -## input_format_ipv4_default_on_conversion_error {#input_format_ipv4_default_on_conversion_error} - - - -IPv4 のデシリアライズ時に変換エラーが発生した場合、例外をスローする代わりにデフォルト値を使用します。 - -デフォルトでは無効です。 - - - -## input_format_ipv6_default_on_conversion_error {#input_format_ipv6_default_on_conversion_error} - - - -IPv6 のデシリアライズ時に変換エラーが発生した場合、例外をスローせずデフォルト値を使用します。 - -デフォルトでは無効です。 - - - -## input_format_json_compact_allow_variable_number_of_columns {#input_format_json_compact_allow_variable_number_of_columns} - - - -JSONCompact/JSONCompactEachRow 入力フォーマットで、行ごとに可変数のカラム数を許可します。 -想定より多いカラムを持つ行では余分なカラムを無視し、不足しているカラムにはデフォルト値を使用します。 - -デフォルトでは無効です。 - - - -## input_format_json_defaults_for_missing_elements_in_named_tuple {#input_format_json_defaults_for_missing_elements_in_named_tuple} - - - -名前付きタプルを解析する際、JSON オブジェクトに存在しない要素に対してデフォルト値を挿入します。 -この設定は、`input_format_json_named_tuples_as_objects` 設定が有効になっている場合にのみ機能します。 - -デフォルトで有効です。 - - - -## input_format_json_empty_as_default {#input_format_json_empty_as_default} - - - -有効にすると、JSON 内の空の入力フィールドをデフォルト値で置き換えます。複雑なデフォルト値の式を使用する場合は、`input_format_defaults_for_omitted_fields` も有効にする必要があります。 - -取りうる値: - -+ 0 — 無効。 -+ 1 — 有効。 - - - -## input_format_json_ignore_unknown_keys_in_named_tuple {#input_format_json_ignore_unknown_keys_in_named_tuple} - - - -名前付きタプルに対する JSON オブジェクト内の不明なキーを無視します。 - -デフォルトで有効です。 - - - -## input_format_json_ignore_unnecessary_fields {#input_format_json_ignore_unnecessary_fields} - - - -不要なフィールドを無視し、それらを解析しません。これを有効にすると、無効な形式や重複したフィールドを含む JSON 文字列に対しても、例外がスローされない場合があります。 - - - -## input_format_json_infer_array_of_dynamic_from_array_of_different_types - - - -有効にすると、スキーマ推論の際に ClickHouse は、異なるデータ型の値を含む JSON 配列に対して Array(Dynamic) 型を使用します。 - -例: - -```sql -SET input_format_json_infer_array_of_dynamic_from_array_of_different_types=1; -DESC format(JSONEachRow, '{"a" : [42, "hello", [1, 2, 3]]}'); -``` - -```response -┌─name─┬─type───────────┐ -│ a │ Array(Dynamic) │ -└──────┴────────────────┘ -``` - -```sql -SET input_format_json_infer_array_of_dynamic_from_array_of_different_types=0; -DESC format(JSONEachRow, '{"a" : [42, "hello", [1, 2, 3]]}'); -``` - -```response -┌─name─┬─type─────────────────────────────────────────────────────────────┐ -│ a │ Tuple(Nullable(Int64), Nullable(String), Array(Nullable(Int64))) │ -└──────┴──────────────────────────────────────────────────────────────────┘ -``` - -デフォルトで有効です。 - - -## input_format_json_infer_incomplete_types_as_strings - - - -スキーマ推論中に、データサンプル内で `Null` / `{}` / `[]` のみを含む JSON キーを String 型として扱えるようにします。 -JSON 形式では任意の値を String 型として読み取ることができるため、スキーマ推論時に `Cannot determine type for column 'column_name' by first 25000 rows of data, most likely this column contains only Nulls or empty Arrays/Maps` のようなエラーが発生するのを、 -型が不明なキーに String 型を使用することで回避できます。 - -例: - -```sql -SET input_format_json_infer_incomplete_types_as_strings = 1, input_format_json_try_infer_named_tuples_from_objects = 1; -DESCRIBE format(JSONEachRow, '{"obj" : {"a" : [1,2,3], "b" : "hello", "c" : null, "d" : {}, "e" : []}}'); -SELECT * FROM format(JSONEachRow, '{"obj" : {"a" : [1,2,3], "b" : "hello", "c" : null, "d" : {}, "e" : []}}'); -``` - -結果: - -``` -┌─name─┬─type───────────────────────────────────────────────────────────────────────────────────────────────────────────────────┬─default_type─┬─default_expression─┬─comment─┬─codec_expression─┬─ttl_expression─┐ -│ obj │ Tuple(a Array(Nullable(Int64)), b Nullable(String), c Nullable(String), d Nullable(String), e Array(Nullable(String))) │ │ │ │ │ │ -└──────┴────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴──────────────┴────────────────────┴─────────┴──────────────────┴────────────────┘ - -┌─obj────────────────────────────┐ -│ ([1,2,3],'hello',NULL,'{}',[]) │ -└────────────────────────────────┘ -``` - -デフォルトで有効になっています。 - - -## input_format_json_map_as_array_of_tuples {#input_format_json_map_as_array_of_tuples} - - - -マップ型の列を、タプルの JSON 配列としてデシリアライズします。 - -デフォルトでは無効です。 - - - -## input_format_json_max_depth {#input_format_json_max_depth} - - - -JSON 内のフィールド階層の最大深さ。これは厳密な制限ではなく、必ずしも厳密に適用されるわけではありません。 - - - -## input_format_json_named_tuples_as_objects {#input_format_json_named_tuples_as_objects} - - - -名前付きタプル列を JSON オブジェクトとしてパースします。 - -デフォルトで有効です。 - - - -## input_format_json_read_arrays_as_strings - - - -JSON 入力形式で、JSON 配列を文字列として解釈できるようにします。 - -例: - -```sql -SET input_format_json_read_arrays_as_strings = 1; -SELECT arr, toTypeName(arr), JSONExtractArrayRaw(arr)[3] from format(JSONEachRow, 'arr String', '{"arr" : [1, "Hello", [1,2,3]]}'); -``` - -結果: - -``` -┌─arr───────────────────┬─toTypeName(arr)─┬─arrayElement(JSONExtractArrayRaw(arr), 3)─┐ -│ [1, "Hello", [1,2,3]] │ String │ [1,2,3] │ -└───────────────────────┴─────────────────┴───────────────────────────────────────────┘ -``` - -デフォルトで有効です。 - - -## input_format_json_read_bools_as_numbers {#input_format_json_read_bools_as_numbers} - - - -JSON 形式の入力で、ブール値を数値として解釈できるようにします。 - -デフォルトで有効です。 - - - -## input_format_json_read_bools_as_strings {#input_format_json_read_bools_as_strings} - - - -JSON 形式の入力で、ブール値を文字列としてパースすることを許可します。 - -デフォルトで有効です。 - - - -## input_format_json_read_numbers_as_strings {#input_format_json_read_numbers_as_strings} - - - -JSON 入力フォーマットで、数値を文字列として解析することを許可します。 - -デフォルトで有効です。 - - - -## input_format_json_read_objects_as_strings - - - -JSON 入力フォーマットで、JSON オブジェクトを文字列として解析できるようにします。 - -例: - -```sql -SET input_format_json_read_objects_as_strings = 1; -CREATE TABLE test (id UInt64, obj String, date Date) ENGINE=Memory(); -INSERT INTO test FORMAT JSONEachRow {"id" : 1, "obj" : {"a" : 1, "b" : "Hello"}, "date" : "2020-01-01"}; -SELECT * FROM test; -``` - -結果: - -``` -┌─id─┬─obj──────────────────────┬───────date─┐ -│ 1 │ {"a" : 1, "b" : "Hello"} │ 2020-01-01 │ -└────┴──────────────────────────┴────────────┘ -``` - -デフォルトで有効です。 - - -## input_format_json_throw_on_bad_escape_sequence {#input_format_json_throw_on_bad_escape_sequence} - - - -JSON 入力フォーマットにおいて、JSON 文字列に不正なエスケープシーケンスが含まれている場合に例外をスローします。無効にした場合、不正なエスケープシーケンスはデータ内にそのまま保持されます。 - -デフォルトで有効です。 - - - -## input_format_json_try_infer_named_tuples_from_objects - - - -有効にすると、スキーマ推論時に ClickHouse は JSON オブジェクトから名前付き Tuple を推論しようとします。 -生成される名前付き Tuple には、サンプルデータ中の対応するすべての JSON オブジェクトに含まれる全要素が含まれます。 - -例: - -```sql -SET input_format_json_try_infer_named_tuples_from_objects = 1; -DESC format(JSONEachRow, '{"obj" : {"a" : 42, "b" : "Hello"}}, {"obj" : {"a" : 43, "c" : [1, 2, 3]}}, {"obj" : {"d" : {"e" : 42}}}') -``` - -結果: - -``` -┌─name─┬─type───────────────────────────────────────────────────────────────────────────────────────────────┬─default_type─┬─default_expression─┬─comment─┬─codec_expression─┬─ttl_expression─┐ -│ obj │ Tuple(a Nullable(Int64), b Nullable(String), c Array(Nullable(Int64)), d Tuple(e Nullable(Int64))) │ │ │ │ │ │ -└──────┴────────────────────────────────────────────────────────────────────────────────────────────────────┴──────────────┴────────────────────┴─────────┴──────────────────┴────────────────┘ -``` - -デフォルトで有効になっています。 - - -## input_format_json_try_infer_numbers_from_strings {#input_format_json_try_infer_numbers_from_strings} - - - -有効にすると、スキーマ推論の際に ClickHouse は文字列フィールドから数値型を推測しようとします。 -JSON データに引用符で囲まれた UInt64 の数値が含まれている場合に有用です。 - -デフォルトでは無効です。 - - - -## input_format_json_use_string_type_for_ambiguous_paths_in_named_tuples_inference_from_objects {#input_format_json_use_string_type_for_ambiguous_paths_in_named_tuples_inference_from_objects} - - - -名前付きタプルの推論中に JSON オブジェクト内のパスが曖昧な場合は、例外の代わりに String 型を使用する - - - -## input_format_json_validate_types_from_metadata {#input_format_json_validate_types_from_metadata} - - - -JSON/JSONCompact/JSONColumnsWithMetadata の入力形式では、この設定が 1 に設定されている場合、 -入力データ内のメタデータに記載されている型と、テーブル内の対応する列の型が照合されます。 - -デフォルトで有効です。 - - - -## input_format_max_block_size_bytes {#input_format_max_block_size_bytes} - - - -入力フォーマットでデータを解析する際に、バイト単位で形成されるブロックのサイズを制限します。ClickHouse 側でブロックが形成される行ベースの入力フォーマットで使用されます。 -0 を指定すると、バイト数に上限がないことを意味します。 - - - -## input_format_max_bytes_to_read_for_schema_inference {#input_format_max_bytes_to_read_for_schema_inference} - - - -自動スキーマ推論時に読み取るデータ量の最大値(バイト単位)。 - - - -## input_format_max_rows_to_read_for_schema_inference {#input_format_max_rows_to_read_for_schema_inference} - - - -自動スキーマ推論時に読み取るデータ行数の上限です。 - - - -## input_format_msgpack_number_of_columns {#input_format_msgpack_number_of_columns} - - - -挿入される MsgPack データに含まれる列数。データからスキーマを自動推論する際に使用されます。 - - - -## input_format_mysql_dump_map_column_names {#input_format_mysql_dump_map_column_names} - - - -MySQL ダンプ内のテーブルの列と ClickHouse テーブルの列を列名で対応付けます - - - -## input_format_mysql_dump_table_name {#input_format_mysql_dump_table_name} - - - -データを読み取る元となる MySQL ダンプ内のテーブル名 - - - -## input_format_native_allow_types_conversion {#input_format_native_allow_types_conversion} - - - -Native 入力フォーマットでデータ型の変換を許可する - - - -## input_format_native_decode_types_in_binary_format {#input_format_native_decode_types_in_binary_format} - - - -Native 入力フォーマットで、型名ではなくデータ型をバイナリ形式で読み込みます - - - -## input_format_null_as_default {#input_format_null_as_default} - - - -この設定は、[NULL](/sql-reference/syntax#literals) フィールドのデータ型が [nullable](/sql-reference/data-types/nullable) でない場合に、それらのフィールドを[デフォルト値](/sql-reference/statements/create/table#default_values)で初期化するかどうかを制御します。 -カラム型が non-nullable でこの設定が無効な場合、`NULL` を挿入すると例外が発生します。カラム型が nullable の場合、この設定に関係なく、`NULL` の値はそのまま挿入されます。 - -この設定は、ほとんどの入力フォーマットに適用されます。 - -複雑なデフォルト式を使用する場合は、`input_format_defaults_for_omitted_fields` も有効にする必要があります。 - -指定可能な値: - -- 0 — non-nullable カラムに `NULL` を挿入すると例外が発生します。 -- 1 — `NULL` フィールドはカラムのデフォルト値で初期化されます。 - - - -## input_format_orc_allow_missing_columns {#input_format_orc_allow_missing_columns} - - - -ORC 入力フォーマットの読み取り時に、存在しない列を許容する - - - -## input_format_orc_case_insensitive_column_matching {#input_format_orc_case_insensitive_column_matching} - - - -ORC 列と CH 列を照合する際に大文字小文字の違いを無視します。 - - - -## input_format_orc_dictionary_as_low_cardinality {#input_format_orc_dictionary_as_low_cardinality} - - - -ORC ファイルの読み込み時に、辞書エンコードされた ORC カラムを LowCardinality カラムとして扱います。 - - - -## input_format_orc_filter_push_down {#input_format_orc_filter_push_down} - - - -ORC ファイルを読み取る際に、`WHERE` / `PREWHERE` 句の条件式、最小値/最大値の統計情報、または ORC メタデータ内のブルームフィルターに基づいて、ストライプ全体または行グループをスキップします。 - - - -## input_format_orc_reader_time_zone_name {#input_format_orc_reader_time_zone_name} - - - -ORC 行リーダー用のタイムゾーン名です。デフォルトの ORC 行リーダーのタイムゾーンは GMT です。 - - - -## input_format_orc_row_batch_size {#input_format_orc_row_batch_size} - - - -ORC ストライプを読み取る際のバッチサイズ。 - - - -## input_format_orc_skip_columns_with_unsupported_types_in_schema_inference {#input_format_orc_skip_columns_with_unsupported_types_in_schema_inference} - - - -ORC 形式のスキーマ推論時にサポートされていない型の列をスキップする - - - -## input_format_orc_use_fast_decoder {#input_format_orc_use_fast_decoder} - - - -高速な ORC デコーダー実装を使用します。 - - - -## input_format_parquet_allow_geoparquet_parser {#input_format_parquet_allow_geoparquet_parser} - - - -`geo` 列用パーサーを使用して、`Array(UInt8)` を `Point` / `Linestring` / `Polygon` / `MultiLineString` / `MultiPolygon` 型に変換します - - - -## input_format_parquet_allow_missing_columns {#input_format_parquet_allow_missing_columns} - - - -Parquet 形式の入力を読み込む際に、欠落している列を許容する - - - -## input_format_parquet_bloom_filter_push_down {#input_format_parquet_bloom_filter_push_down} - - - -Parquet ファイルを読み込む際に、WHERE 句の条件式と Parquet メタデータ内のブルームフィルターに基づいて、行グループ全体をスキップします。 - - - -## input_format_parquet_case_insensitive_column_matching {#input_format_parquet_case_insensitive_column_matching} - - - -Parquet の列を ClickHouse の列にマッチさせる際、列名の大文字・小文字の違いを無視します。 - - - -## input_format_parquet_enable_json_parsing {#input_format_parquet_enable_json_parsing} - - - -Parquet ファイルを読み込む際に、JSON 列を ClickHouse の JSON 列として解析します。 - - - -## input_format_parquet_enable_row_group_prefetch {#input_format_parquet_enable_row_group_prefetch} - - - -Parquet を解析する際に Row Group のプリフェッチを有効にします。現在は、単一スレッドでの解析でのみプリフェッチを行えます。 - - - -## input_format_parquet_filter_push_down {#input_format_parquet_filter_push_down} - - - -Parquet ファイルを読み込む際に、Parquet メタデータ内の min/max 統計情報と WHERE/PREWHERE 式に基づいて、行グループ全体をスキップします。 - - - -## input_format_parquet_local_file_min_bytes_for_seek {#input_format_parquet_local_file_min_bytes_for_seek} - - - -Parquet 入力フォーマットで、読み飛ばしによる読み取りではなくシークを行うために、ローカルファイル読み取り時に必要な最小バイト数 - - - -## input_format_parquet_local_time_as_utc {#input_format_parquet_local_time_as_utc} - - - -`isAdjustedToUTC=false` の Parquet タイムスタンプに対して、スキーマ推論で使用されるデータ型を決定します。true の場合は DateTime64(..., 'UTC')、false の場合は DateTime64(...) になります。ClickHouse にはローカルのウォールクロック時刻を表すデータ型が存在しないため、どちらの挙動も完全に正しいわけではありません。直感に反しますが、「true」の方がまだ誤りが少ないと考えられます。というのも、'UTC' タイムスタンプを String としてフォーマットすると、正しいローカル時刻の表現が得られるためです。 - - - -## input_format_parquet_max_block_size {#input_format_parquet_max_block_size} - - - -Parquet リーダーにおける最大ブロックサイズ。 - - - -## input_format_parquet_memory_high_watermark {#input_format_parquet_memory_high_watermark} - - - -Parquet リーダー v3 用のおおよそのメモリ上限です。並列に読み取れる行グループまたは列の数を制限します。1 つのクエリで複数ファイルを読み取る場合、この上限はそれらのファイル全体でのメモリ使用量の合計に適用されます。 - - - -## input_format_parquet_memory_low_watermark {#input_format_parquet_memory_low_watermark} - - - -メモリ使用量がこのしきい値未満の場合、プリフェッチをより積極的に行うようスケジューリングします。たとえば、小さな Bloom フィルタが多数あり、それらをネットワーク越しに読み込む必要がある場合などに有用です。 - - - -## input_format_parquet_page_filter_push_down {#input_format_parquet_page_filter_push_down} - - - -カラムインデックスに含まれる最小値/最大値を利用してページをスキップします。 - - - -## input_format_parquet_prefer_block_bytes {#input_format_parquet_prefer_block_bytes} - - - -Parquet リーダーが出力するブロックの平均サイズ(バイト単位) - - - -## input_format_parquet_preserve_order {#input_format_parquet_preserve_order} - - - -Parquet ファイルから読み込む際に行の並び替えを行わないようにします。行の順序は一般的に保証されず、クエリパイプラインの他の部分で変更される可能性があるため、この設定の使用は推奨されません。代わりに `ORDER BY _row_number` を使用してください。 - - - -## input_format_parquet_skip_columns_with_unsupported_types_in_schema_inference {#input_format_parquet_skip_columns_with_unsupported_types_in_schema_inference} - - - -Parquet 形式のスキーマ推論時に、サポートされていない型の列をスキップする - - - -## input_format_parquet_use_native_reader {#input_format_parquet_use_native_reader} - - - -ネイティブ Parquet リーダー v1 を使用します。比較的高速ですが、まだ未完成です。非推奨です。 - - - -## input_format_parquet_use_native_reader_v3 {#input_format_parquet_use_native_reader_v3} - - - -Parquet リーダー v3 を使用します。 - - - -## input_format_parquet_use_offset_index {#input_format_parquet_use_offset_index} - - - -ページフィルタリングを使用しない場合の、Parquet ファイルからのページの読み取り方法に対する軽微な調整を行う設定です。 - - - -## input_format_parquet_verify_checksums {#input_format_parquet_verify_checksums} - - - -Parquet ファイルを読み込む際にページのチェックサムを検証します。 - - - -## input_format_protobuf_flatten_google_wrappers {#input_format_protobuf_flatten_google_wrappers} - - - -通常の非ネスト列に対して Google ラッパーを有効にします。例えば、String 列 `str` に対して google.protobuf.StringValue `str` を使用します。Nullable 列では、空のラッパーはデフォルト値として解釈され、ラッパーが存在しない場合は null として扱われます。 - - - -## input_format_protobuf_oneof_presence {#input_format_protobuf_oneof_presence} - - - -専用の列に enum 値を設定することで、protobuf の oneof フィールドのうちどれが検出されたかを示します。 - - - -## input_format_protobuf_skip_fields_with_unsupported_types_in_schema_inference {#input_format_protobuf_skip_fields_with_unsupported_types_in_schema_inference} - - - -Protobuf 形式のスキーマ推論時に、サポートされていない型を持つフィールドをスキップします - - - -## input_format_record_errors_file_path {#input_format_record_errors_file_path} - - - -テキスト形式(CSV、TSV)の読み取り時に発生したエラーを記録するファイルのパス。 - - - -## input_format_skip_unknown_fields {#input_format_skip_unknown_fields} - - - -余分なデータの挿入をスキップするかどうかを切り替えます。 - -データを書き込むとき、入力データに対象テーブルに存在しない列が含まれている場合、ClickHouse は例外をスローします。スキップが有効な場合、ClickHouse は余分なデータを挿入せず、例外もスローしません。 - -対応フォーマット: - -- [JSONEachRow](/interfaces/formats/JSONEachRow)(およびその他の JSON フォーマット) -- [BSONEachRow](/interfaces/formats/BSONEachRow)(およびその他の JSON フォーマット) -- [TSKV](/interfaces/formats/TSKV) -- WithNames/WithNamesAndTypes というサフィックスを持つすべてのフォーマット -- [MySQLDump](/interfaces/formats/MySQLDump) -- [Native](/interfaces/formats/Native) - -設定可能な値: - -- 0 — 無効。 -- 1 — 有効。 - - - -## input_format_try_infer_dates {#input_format_try_infer_dates} - - - -有効化されている場合、ClickHouse はテキスト形式のスキーマ推論時に、文字列フィールドから `Date` 型を推測しようとします。入力データの 1 つの列に含まれるすべてのフィールドが日付として正常にパースされた場合、その結果の型は `Date` になります。少なくとも 1 つでも日付としてパースされなかったフィールドがある場合、その結果の型は `String` になります。 - -デフォルトで有効です。 - - - -## input_format_try_infer_datetimes {#input_format_try_infer_datetimes} - - - -有効にすると、ClickHouse はテキスト形式に対するスキーマ推論時に、文字列フィールドから型 `DateTime64` を推定しようとします。入力データのある列のすべてのフィールドが日時として正常にパースされた場合、その結果の型は `DateTime64` になり、少なくとも 1 つでも日時としてパースされなかったフィールドがある場合、その結果の型は `String` になります。 - -デフォルトで有効です。 - - - -## input_format_try_infer_datetimes_only_datetime64 {#input_format_try_infer_datetimes_only_datetime64} - - - -input_format_try_infer_datetimes が有効な場合、DateTime 型は推論せず、DateTime64 型のみを推論します - - - -## input_format_try_infer_exponent_floats {#input_format_try_infer_exponent_floats} - - - -テキスト形式でスキーマ推論を行う際に、指数表記の数値を浮動小数点数として推論することを試みます(JSON では指数表記の数値は常に浮動小数点数として推論されます) - - - -## input_format_try_infer_integers {#input_format_try_infer_integers} - - - -有効にすると、ClickHouse はテキスト形式のスキーマ推論時に、浮動小数点数ではなく整数として解釈しようとします。入力データの列内のすべての数値が整数であれば、結果の型は `Int64` になり、少なくとも 1 つでも浮動小数点数の値が含まれていれば、結果の型は `Float64` になります。 - -デフォルトで有効です。 - - - -## input_format_try_infer_variants {#input_format_try_infer_variants} - - - -有効にすると、テキスト形式のスキーマ推論において、列や配列要素に対して複数の候補となる型が存在する場合に、ClickHouse は型 [`Variant`](../../sql-reference/data-types/variant.md) を推論しようとします。 - -設定可能な値: - -- 0 — 無効。 -- 1 — 有効。 - - - -## input_format_tsv_allow_variable_number_of_columns {#input_format_tsv_allow_variable_number_of_columns} - - - -TSV 入力で余分な列(ファイルに想定より多くの列がある場合)を無視し、不足しているフィールドにはデフォルト値を使用します - - - -## input_format_tsv_crlf_end_of_line {#input_format_tsv_crlf_end_of_line} - - - -true に設定すると、`file` 関数は改行に `\n` ではなく `\r\n` を用いる TSV 形式を読み取ります。 - - - -## input_format_tsv_detect_header {#input_format_tsv_detect_header} - - - -TSV 形式の列名および型を含むヘッダー行を自動検出します - - - -## input_format_tsv_empty_as_default {#input_format_tsv_empty_as_default} - - - -TSV 入力の空フィールドをデフォルト値として扱います。 - - - -## input_format_tsv_enum_as_number {#input_format_tsv_enum_as_number} - - - -TSV 形式で挿入された Enum の値を、Enum のインデックスとして解釈します。 - - - -## input_format_tsv_skip_first_lines {#input_format_tsv_skip_first_lines} - - - -TSV 形式のデータの先頭から指定した行数をスキップします。 - - - -## input_format_tsv_skip_trailing_empty_lines {#input_format_tsv_skip_trailing_empty_lines} - - - -TSV 形式で末尾の空行を読み飛ばす - - - -## input_format_tsv_use_best_effort_in_schema_inference {#input_format_tsv_use_best_effort_in_schema_inference} - - - -TSV 形式のスキーマ推論に、いくつかの調整やヒューリスティック手法を用います - - - -## input_format_values_accurate_types_of_literals {#input_format_values_accurate_types_of_literals} - - - -Values フォーマットの場合: template を使用して式を解析および評価する際に、オーバーフローや精度の問題を避けるため、リテラルの実際の型を確認します。 - - - -## input_format_values_deduce_templates_of_expressions {#input_format_values_deduce_templates_of_expressions} - - - -Values 形式で、フィールドがストリーミングパーサーで解析できなかった場合は、SQL パーサーを実行して SQL 式のテンプレートを推論し、そのテンプレートを使ってすべての行の解析を試みたうえで、すべての行に対して式を評価します。 - - - -## input_format_values_interpret_expressions {#input_format_values_interpret_expressions} - - - -Values 形式の場合、フィールドがストリーミングパーサーで解析できなかった場合に、SQL パーサーを実行し、そのフィールドを SQL 式として解釈しようとします。 - - - -## input_format_with_names_use_header {#input_format_with_names_use_header} - - - -データ挿入時に列の順序をチェックするかどうかを制御します。 - -入力データの列順が対象テーブルと同一であることが確実な場合は、挿入パフォーマンスを向上させるために、このチェックを無効にすることを推奨します。 - -サポートされるフォーマット: - -- [CSVWithNames](/interfaces/formats/CSVWithNames) -- [CSVWithNamesAndTypes](/interfaces/formats/CSVWithNamesAndTypes) -- [TabSeparatedWithNames](/interfaces/formats/TabSeparatedWithNames) -- [TabSeparatedWithNamesAndTypes](/interfaces/formats/TabSeparatedWithNamesAndTypes) -- [JSONCompactEachRowWithNames](/interfaces/formats/JSONCompactEachRowWithNames) -- [JSONCompactEachRowWithNamesAndTypes](/interfaces/formats/JSONCompactEachRowWithNamesAndTypes) -- [JSONCompactStringsEachRowWithNames](/interfaces/formats/JSONCompactStringsEachRowWithNames) -- [JSONCompactStringsEachRowWithNamesAndTypes](/interfaces/formats/JSONCompactStringsEachRowWithNamesAndTypes) -- [RowBinaryWithNames](/interfaces/formats/RowBinaryWithNames) -- [RowBinaryWithNamesAndTypes](/interfaces/formats/RowBinaryWithNamesAndTypes) -- [CustomSeparatedWithNames](/interfaces/formats/CustomSeparatedWithNames) -- [CustomSeparatedWithNamesAndTypes](/interfaces/formats/CustomSeparatedWithNamesAndTypes) - -設定可能な値: - -- 0 — 無効。 -- 1 — 有効。 - - - -## input_format_with_types_use_header {#input_format_with_types_use_header} - - - -フォーマットパーサが、入力データのデータ型が対象テーブルのデータ型と一致しているかどうかをチェックするかを制御します。 - -対応フォーマット: - -- [CSVWithNamesAndTypes](/interfaces/formats/CSVWithNamesAndTypes) -- [TabSeparatedWithNamesAndTypes](/interfaces/formats/TabSeparatedWithNamesAndTypes) -- [JSONCompactEachRowWithNamesAndTypes](/interfaces/formats/JSONCompactEachRowWithNamesAndTypes) -- [JSONCompactStringsEachRowWithNamesAndTypes](/interfaces/formats/JSONCompactStringsEachRowWithNamesAndTypes) -- [RowBinaryWithNamesAndTypes](/interfaces/formats/RowBinaryWithNamesAndTypes) -- [CustomSeparatedWithNamesAndTypes](/interfaces/formats/CustomSeparatedWithNamesAndTypes) - -取りうる値: - -- 0 — 無効。 -- 1 — 有効。 - - - -## insert_distributed_one_random_shard {#insert_distributed_one_random_shard} - - - -分散キーが存在しない場合に、[Distributed](/engines/table-engines/special/distributed) テーブルへのランダムなシャードへの挿入を有効または無効にします。 - -既定では、複数のシャードを持つ `Distributed` テーブルにデータを挿入する際、分散キーが存在しない場合は ClickHouse サーバーは挿入要求を拒否します。`insert_distributed_one_random_shard = 1` の場合、挿入が許可され、データはすべてのシャードの中からランダムに選ばれたシャードへルーティングされます。 - -設定値: - -- 0 — 複数のシャードが存在し、かつ分散キーが指定されていない場合は挿入を拒否します。 -- 1 — 分散キーが指定されていない場合、利用可能なすべてのシャードの中からランダムに選ばれたシャードへ挿入します。 - - - -## interval_output_format {#interval_output_format} - - - -Interval 型の文字列表現に対する出力フォーマットを選択します。 - -可能な値: - -- `kusto` - KQL 形式の出力フォーマット。 - - ClickHouse は interval を [KQL 形式](https://learn.microsoft.com/en-us/dotnet/standard/base-types/standard-timespan-format-strings#the-constant-c-format-specifier) で出力します。例えば、`toIntervalDay(2)` は `2.00:00:00` という形式になります。長さが可変の interval 型(例えば `IntervalMonth` や `IntervalYear`)については、1 つの interval あたりの平均秒数が考慮されます。 - -- `numeric` - 数値形式の出力フォーマット。 - - ClickHouse は interval を、その内部の数値表現として出力します。例えば、`toIntervalDay(2)` は `2` という形式になります。 - -参照: - -- [Interval](../../sql-reference/data-types/special-data-types/interval.md) - - - -## into_outfile_create_parent_directories {#into_outfile_create_parent_directories} - - - -INTO OUTFILE を使用する際に、親ディレクトリが存在しない場合は自動的に作成します。 - - - -## json_type_escape_dots_in_keys {#json_type_escape_dots_in_keys} - - - -この設定を有効にすると、解析時に JSON キー内のドット文字がエスケープされます。 - - - -## output_format_arrow_compression_method {#output_format_arrow_compression_method} - - - -Arrow 出力フォーマットの圧縮方式。サポートされているコーデック:lz4_frame、zstd、none(非圧縮) - - - -## output_format_arrow_fixed_string_as_fixed_byte_array {#output_format_arrow_fixed_string_as_fixed_byte_array} - - - -FixedString 型の列に対して、Binary 型の代わりに Arrow の FIXED_SIZE_BINARY 型を使用します。 - - - -## output_format_arrow_low_cardinality_as_dictionary {#output_format_arrow_low_cardinality_as_dictionary} - - - -有効にすると、LowCardinality 型を Dictionary Arrow 型として出力します - - - -## output_format_arrow_string_as_string {#output_format_arrow_string_as_string} - - - -String 型の列に対して Binary ではなく Arrow の String 型を使用する。 - - - -## output_format_arrow_use_64_bit_indexes_for_dictionary {#output_format_arrow_use_64_bit_indexes_for_dictionary} - - - -Arrow 形式では、辞書インデックスに常に 64 ビット整数を使用します - - - -## output_format_arrow_use_signed_indexes_for_dictionary {#output_format_arrow_use_signed_indexes_for_dictionary} - - - -Arrow 形式で辞書インデックスに符号付き整数を使用します - - - -## output_format_avro_codec {#output_format_avro_codec} - - - -出力に使用される圧縮コーデックです。指定可能な値は `'null'`, `'deflate'`, `'snappy'`, `'zstd'` です。 - - - -## output_format_avro_rows_in_file {#output_format_avro_rows_in_file} - - - -ストレージが許容する場合の1ファイルあたりの最大行数 - - - -## output_format_avro_string_column_pattern {#output_format_avro_string_column_pattern} - - - -Avro 形式で、AVRO の string として扱う `String` 列を選択するための正規表現。 - - - -## output_format_avro_sync_interval {#output_format_avro_sync_interval} - - - -同期間隔(バイト単位)。 - - - -## output_format_binary_encode_types_in_binary_format {#output_format_binary_encode_types_in_binary_format} - - - -RowBinaryWithNamesAndTypes 出力形式で、型名ではなくデータ型をバイナリ形式で出力します - - - -## output_format_binary_write_json_as_string {#output_format_binary_write_json_as_string} - - - -RowBinary 出力形式では、[JSON](../../sql-reference/data-types/newjson.md) データ型の値を JSON 文字列([String](../../sql-reference/data-types/string.md) 型)として書き出します。 - - - -## output_format_bson_string_as_string {#output_format_bson_string_as_string} - - - -String カラムには Binary 型ではなく BSON の String 型を使用します。 - - - -## output_format_csv_crlf_end_of_line {#output_format_csv_crlf_end_of_line} - - - -true に設定すると、CSV 形式の改行コードが \\n ではなく \\r\\n になります。 - - - -## output_format_csv_serialize_tuple_into_separate_columns {#output_format_csv_serialize_tuple_into_separate_columns} - - - -true に設定すると、CSV 形式のタプルは別々の列としてシリアライズされます(つまり、タプル内での入れ子構造は失われます)。 - - - -## output_format_decimal_trailing_zeros {#output_format_decimal_trailing_zeros} - - - -Decimal 値を出力する際に、小数点以下の末尾のゼロも出力します。例: 1.23 ではなく 1.230000。 - -デフォルトでは無効です。 - - - -## output_format_json_array_of_rows - - - -[JSONEachRow](/interfaces/formats/JSONEachRow) フォーマットで、すべての行を JSON 配列として出力できるようにする設定です。 - -設定可能な値: - -* 1 — ClickHouse は、すべての行を配列として出力し、それぞれの行は `JSONEachRow` フォーマットになります。 -* 0 — ClickHouse は、各行を個別に `JSONEachRow` フォーマットで出力します。 - -**この設定を有効にしたクエリの例** - -クエリ: - -```sql -SET output_format_json_array_of_rows = 1; -SELECT number FROM numbers(3) FORMAT JSONEachRow; -``` - -結果: - -```text -[ -{"number":"0"}, -{"number":"1"}, -{"number":"2"} -] -``` - -**設定を無効にした場合のクエリ例** - -クエリ: - -```sql -SET output_format_json_array_of_rows = 0; -SELECT number FROM numbers(3) FORMAT JSONEachRow; -``` - -結果: - -```text -{"number":"0"} -{"number":"1"} -{"number":"2"} -``` - - -## output_format_json_escape_forward_slashes {#output_format_json_escape_forward_slashes} - - - -JSON 出力形式での文字列出力におけるスラッシュ `/` のエスケープ有無を制御します。これは JavaScript との互換性を目的としています。常にエスケープされるバックスラッシュ `\` と混同しないでください。 - -デフォルトで有効です。 - - - -## output_format_json_map_as_array_of_tuples {#output_format_json_map_as_array_of_tuples} - - - -`Map` 型カラムを、タプルの配列からなる JSON 配列としてシリアライズします。 - -デフォルトでは無効です。 - - - -## output_format_json_named_tuples_as_objects {#output_format_json_named_tuples_as_objects} - - - -名前付きタプルの列を JSON オブジェクトとしてシリアライズします。 - -デフォルトで有効です。 - - - -## output_format_json_pretty_print - - - -この設定は、JSON 出力形式を使用する際に、`data` 配列内で Tuple、Map、Array などのネストされた構造をどのように表示するかを制御します。 - -たとえば、次のような出力ではなく: - -```json -"data": -[ - { - "tuple": {"a":1,"b":2,"c":3}, - "array": [1,2,3], - "map": {"a":1,"b":2,"c":3} - } -], -``` - -出力は次のように整形されます: - -```json -"data": -[ - { - "tuple": { - "a": 1, - "b": 2, - "c": 3 - }, - "array": [ - 1, - 2, - 3 - ], - "map": { - "a": 1, - "b": 2, - "c": 3 - } - } -], -``` - -デフォルトで有効になっています。 - - -## output_format_json_quote_64bit_floats {#output_format_json_quote_64bit_floats} - - - -JSON* 形式での出力時に、64 ビット [floats](../../sql-reference/data-types/float.md) をクオートするかどうかを制御します。 - -デフォルトでは無効です。 - - - -## output_format_json_quote_64bit_integers {#output_format_json_quote_64bit_integers} - - - -[整数](../../sql-reference/data-types/int-uint.md)(`UInt64` や `Int128` など)のうち、64 ビット以上のものを [JSON](/interfaces/formats/JSON) 形式で出力する際に、引用符で囲むかどうかを制御します。 -このような整数は、デフォルトでは引用符で囲んで出力されます。この動作は、ほとんどの JavaScript 実装と互換性があります。 - -指定可能な値: - -- 0 — 整数を引用符なしで出力します。 -- 1 — 整数を引用符で囲んで出力します。 - - - -## output_format_json_quote_decimals {#output_format_json_quote_decimals} - - - -JSON 出力フォーマットにおける decimal 型値のクオート有無を制御します。 - -デフォルトでは無効です。 - - - -## output_format_json_quote_denormals - - - -[JSON](/interfaces/formats/JSON) 出力形式で `+nan`、`-nan`、`+inf`、`-inf` の出力を有効化します。 - -設定可能な値: - -* 0 — 無効。 -* 1 — 有効。 - -**例** - -次のテーブル `account_orders` があるとします。 - -```text -┌─id─┬─name───┬─duration─┬─period─┬─area─┐ -│ 1 │ Andrew │ 20 │ 0 │ 400 │ -│ 2 │ John │ 40 │ 0 │ 0 │ -│ 3 │ Bob │ 15 │ 0 │ -100 │ -└────┴────────┴──────────┴────────┴──────┘ -``` - -`output_format_json_quote_denormals = 0` の場合、クエリの出力には `null` 値が含まれます。 - -```sql -SELECT area/period FROM account_orders FORMAT JSON; -``` - -```json -{ - "meta": - [ - { - "name": "divide(area, period)", - "type": "Float64" - } - ], - - "data": - [ - { - "divide(area, period)": null - }, - { - "divide(area, period)": null - }, - { - "divide(area, period)": null - } - ], - - "rows": 3, - - "statistics": - { - "elapsed": 0.003648093, - "rows_read": 3, - "bytes_read": 24 - } -} -``` - -`output_format_json_quote_denormals = 1` の場合、クエリは次のような結果を返します。 - -```json -{ - "meta": - [ - { - "name": "divide(area, period)", - "type": "Float64" - } - ], - - "data": - [ - { - "divide(area, period)": "inf" - }, - { - "divide(area, period)": "-nan" - }, - { - "divide(area, period)": "-inf" - } - ], - - "rows": 3, - - "statistics": - { - "elapsed": 0.000070241, - "rows_read": 3, - "bytes_read": 24 - } -} -``` - - -## output_format_json_skip_null_value_in_named_tuples {#output_format_json_skip_null_value_in_named_tuples} - - - -名前付きタプル列を JSON オブジェクトとしてシリアライズする際、値が null のキーと値のペアをスキップします。これは、output_format_json_named_tuples_as_objects が true の場合にのみ有効です。 - - - -## output_format_json_validate_utf8 {#output_format_json_validate_utf8} - - - -JSON 出力フォーマットでの UTF-8 シーケンスの検証を制御します。`JSON` / `JSONCompact` / `JSONColumnsWithMetadata` フォーマットには影響しません。これらのフォーマットでは常に UTF-8 の検証が行われます。 - -デフォルトでは無効です。 - - - -## output_format_markdown_escape_special_characters - - - -有効にすると、Markdown 内の特殊文字をエスケープします。 - -[CommonMark](https://spec.commonmark.org/0.30/#example-12) では、次の特殊文字をエスケープできると定義しています: - -``` -! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~ -``` - -指定可能な値: - -* 0 — 無効 -* 1 — 有効 - - -## output_format_msgpack_uuid_representation {#output_format_msgpack_uuid_representation} - - - -UUID を MsgPack 形式で出力する方法を指定します。 - - - -## output_format_native_encode_types_in_binary_format {#output_format_native_encode_types_in_binary_format} - - - -Native 出力形式で、型名ではなくデータ型をバイナリ形式で出力します - - - -## output_format_native_use_flattened_dynamic_and_json_serialization {#output_format_native_use_flattened_dynamic_and_json_serialization} - - - -[JSON](../../sql-reference/data-types/newjson.md) 列および [Dynamic](../../sql-reference/data-types/dynamic.md) 列のデータを、すべての型やパスを個別のサブカラムとして扱うフラットな形式で出力します。 - - - -## output_format_native_write_json_as_string {#output_format_native_write_json_as_string} - - - -[JSON](../../sql-reference/data-types/newjson.md) 列のデータを、デフォルトのネイティブな JSON シリアル化ではなく、JSON 文字列を格納する [String](../../sql-reference/data-types/string.md) 列として書き込みます。 - - - -## output_format_orc_compression_block_size {#output_format_orc_compression_block_size} - - - -ORC 形式の出力における圧縮ブロックのサイズ(バイト単位)。 - - - -## output_format_orc_compression_method {#output_format_orc_compression_method} - - - -ORC 形式の出力に使用する圧縮方式。サポートされているコーデック: lz4、snappy、zlib、zstd、none(非圧縮) - - - -## output_format_orc_dictionary_key_size_threshold {#output_format_orc_dictionary_key_size_threshold} - - - -ORC 出力フォーマットにおける文字列列について、NULL 以外の行数の合計に対する異なる値の個数の割合がこの値を超える場合は辞書エンコーディングを無効にします。超えない場合は辞書エンコーディングを有効にします。 - - - -## output_format_orc_row_index_stride {#output_format_orc_row_index_stride} - - - -ORC 出力形式における行インデックスストライドの目標値 - - - -## output_format_orc_string_as_string {#output_format_orc_string_as_string} - - - -String 列には Binary 型ではなく ORC の String 型を使用します - - - -## output_format_orc_writer_time_zone_name {#output_format_orc_writer_time_zone_name} - - - -ORC writer のタイムゾーン名です。ORC writer のデフォルトのタイムゾーンは GMT です。 - - - -## output_format_parquet_batch_size {#output_format_parquet_batch_size} - - - -この行数ごとにページサイズを確認します。各値の平均サイズが数 KB を超える列がある場合は、この値を小さくすることを検討してください。 - - - -## output_format_parquet_bloom_filter_bits_per_value {#output_format_parquet_bloom_filter_bits_per_value} - - - -Parquet のブルームフィルター内の各ユニーク値に対して使用するビット数のおおよその値。偽陽性率の推定値: - * 6 ビット - 10% - * 10.5 ビット - 1% - * 16.9 ビット - 0.1% - * 26.4 ビット - 0.01% - * 41 ビット - 0.001% - - - -## output_format_parquet_bloom_filter_flush_threshold_bytes {#output_format_parquet_bloom_filter_flush_threshold_bytes} - - - -parquet ファイル内のどの位置に Bloom filter を配置するかを指定します。Bloom filter は概ねこの値のサイズごとのグループ単位で書き込まれます。具体的には: - * 0 の場合、各 row group の Bloom filter はその row group の直後に書き込まれます。 - * すべての Bloom filter の合計サイズより大きい場合、すべての row group の Bloom filter はメモリに蓄積され、ファイル末尾付近でまとめて書き込まれます。 - * それ以外の場合、Bloom filter はメモリに蓄積され、その合計サイズがこの値を超えるたびに書き出されます。 - - - -## output_format_parquet_compliant_nested_types {#output_format_parquet_compliant_nested_types} - - - -Parquet ファイルスキーマでは、リスト要素に 'item' ではなく 'element' という名前を使用します。これは Arrow ライブラリ実装に由来する歴史的な経緯によるものです。一般的には互換性が向上しますが、一部の古いバージョンの Arrow では互換性の問題が生じる可能性があります。 - - - -## output_format_parquet_compression_method {#output_format_parquet_compression_method} - - - -Parquet 出力フォーマットの圧縮方式。サポートされているコーデックは次のとおりです: snappy、lz4、brotli、zstd、gzip、none(無圧縮) - - - -## output_format_parquet_data_page_size {#output_format_parquet_data_page_size} - - - -圧縮前のページサイズの目標値(バイト単位)。 - - - -## output_format_parquet_date_as_uint16 {#output_format_parquet_date_as_uint16} - - - -`Date` の値を、32 ビットの parquet `DATE` 型(読み出し時は `Date32`)に変換する代わりに、16 ビットのプレーンな数値として書き出します(読み出し時は `UInt16` として読み取られます)。 - - - -## output_format_parquet_datetime_as_uint32 {#output_format_parquet_datetime_as_uint32} - - - -DateTime の値を、ミリ秒に変換して(読み取り時は DateTime64(3) として)書き出すのではなく、生の Unix タイムスタンプ(読み取り時は UInt32)として書き出します。 - - - -## output_format_parquet_enum_as_byte_array {#output_format_parquet_enum_as_byte_array} - - - -Enum を Parquet の物理型 BYTE_ARRAY および論理型 ENUM として書き込みます - - - -## output_format_parquet_fixed_string_as_fixed_byte_array {#output_format_parquet_fixed_string_as_fixed_byte_array} - - - -FixedString 列には Binary 型ではなく、Parquet の FIXED_LEN_BYTE_ARRAY 型を使用します。 - - - -## output_format_parquet_geometadata {#output_format_parquet_geometadata} - - - -Parquet のメタデータに geo 列に関する情報を書き込み、列を WKB 形式でエンコードできるようにします。 - - - -## output_format_parquet_max_dictionary_size {#output_format_parquet_max_dictionary_size} - - - -辞書サイズがこのバイト数を超えた場合、辞書なしエンコーディングに切り替えます。辞書エンコーディングを無効にするには 0 を設定します。 - - - -## output_format_parquet_parallel_encoding {#output_format_parquet_parallel_encoding} - - - -Parquet のエンコードを複数スレッドで実行します。使用するには output_format_parquet_use_custom_encoder の有効化が必要です。 - - - -## output_format_parquet_row_group_size {#output_format_parquet_row_group_size} - - - -ターゲットとする行グループのサイズ(行数)。 - - - -## output_format_parquet_row_group_size_bytes {#output_format_parquet_row_group_size_bytes} - - - -圧縮前の、目標とする行グループサイズ(バイト単位)。 - - - -## output_format_parquet_string_as_string {#output_format_parquet_string_as_string} - - - -String 列に Binary 型ではなく Parquet の String 型を使用します。 - - - -## output_format_parquet_use_custom_encoder {#output_format_parquet_use_custom_encoder} - - - -より高速な Parquet エンコーダー実装を使用します。 - - - -## output_format_parquet_version {#output_format_parquet_version} - - - -出力フォーマットに使用する Parquet フォーマットのバージョン。サポートされているバージョン: 1.0、2.4、2.6、および 2.latest(既定) - - - -## output_format_parquet_write_bloom_filter {#output_format_parquet_write_bloom_filter} - - - -Parquet ファイルにブルームフィルタを書き込みます。output_format_parquet_use_custom_encoder = true を設定している必要があります。 - - - -## output_format_parquet_write_checksums {#output_format_parquet_write_checksums} - - - -CRC32 チェックサムを Parquet のページヘッダーに書き込みます。 - - - -## output_format_parquet_write_page_index {#output_format_parquet_write_page_index} - - - -カラムインデックスとオフセットインデックス(各データページに関する統計情報であり、読み取り時のフィルタープッシュダウンに利用される場合があります)を Parquet ファイルに書き込みます。 - - - -## output_format_pretty_color {#output_format_pretty_color} - - - -Pretty 形式で ANSI エスケープシーケンスを使用します。0 - 無効、1 - 有効、'auto' - 出力先がターミナルの場合に有効。 - - - -## output_format_pretty_display_footer_column_names - - - -テーブルの行数が多い場合に、フッターに列名を表示します。 - -可能な値: - -* 0 — フッターに列名を表示しません。 -* 1 — 行数が [output_format_pretty_display_footer_column_names_min_rows](#output_format_pretty_display_footer_column_names_min_rows)(デフォルトは 50)で設定されたしきい値以上の場合に、フッターに列名を表示します。 - -**例** - -クエリ: - -```sql -SELECT *, toTypeName(*) FROM (SELECT * FROM system.numbers LIMIT 1000); -``` - -結果: - -```response - ┌─number─┬─toTypeName(number)─┐ - 1. │ 0 │ UInt64 │ - 2. │ 1 │ UInt64 │ - 3. │ 2 │ UInt64 │ - ... - 999. │ 998 │ UInt64 │ -1000. │ 999 │ UInt64 │ - └─number─┴─toTypeName(number)─┘ -``` - - -## output_format_pretty_display_footer_column_names_min_rows {#output_format_pretty_display_footer_column_names_min_rows} - - - -設定 [output_format_pretty_display_footer_column_names](#output_format_pretty_display_footer_column_names) が有効な場合に、列名を含むフッターが表示される最小行数を指定します。 - - - -## output_format_pretty_fallback_to_vertical {#output_format_pretty_fallback_to_vertical} - - - -有効にすると、テーブルが横に広く行数が少ない場合に、Pretty 形式は Vertical 形式と同様の形式で出力します。 -この動作を詳細に調整するには、`output_format_pretty_fallback_to_vertical_max_rows_per_chunk` と `output_format_pretty_fallback_to_vertical_min_table_width` を参照してください。 - - - -## output_format_pretty_fallback_to_vertical_max_rows_per_chunk {#output_format_pretty_fallback_to_vertical_max_rows_per_chunk} - - - -フォールバック先の Vertical 形式(`output_format_pretty_fallback_to_vertical` を参照)は、チャンク内のレコード数が指定された値以下の場合にのみ有効になります。 - - - -## output_format_pretty_fallback_to_vertical_min_columns {#output_format_pretty_fallback_to_vertical_min_columns} - - - -Vertical 形式へのフォールバック(`output_format_pretty_fallback_to_vertical` を参照)は、列数が指定した値を超える場合にのみ行われます。 - - - -## output_format_pretty_fallback_to_vertical_min_table_width {#output_format_pretty_fallback_to_vertical_min_table_width} - - - -フォールバック先の Vertical 形式(`output_format_pretty_fallback_to_vertical` を参照)は、テーブル内の列幅の合計が指定された値以上である場合、または少なくとも 1 つの値に改行文字が含まれている場合にのみ有効化されます。 - - - -## output_format_pretty_glue_chunks {#output_format_pretty_glue_chunks} - - - -Pretty 形式でレンダリングされるデータが、遅延を伴って複数のチャンクに分かれて到着した場合でも、次のチャンクの列幅が前のチャンクと同じであれば、ANSI エスケープシーケンスを使用して前の行に戻り、前のチャンクのフッターを上書きして、新しいチャンクのデータを続きとして表示します。これにより、結果の見た目が向上します。 - -0 - 無効、1 - 有効、'auto' - 端末上で実行されている場合に有効。 - - - -## output_format_pretty_grid_charset {#output_format_pretty_grid_charset} - - - -グリッドの枠線を出力する際の文字セットです。利用可能な文字セット: ASCII, UTF-8(デフォルト)。 - - - -## output_format_pretty_highlight_digit_groups {#output_format_pretty_highlight_digit_groups} - - - -有効にすると、出力先がターミナルの場合、千や百万などの桁を表す数字を下線付きで強調表示します。 - - - -## output_format_pretty_highlight_trailing_spaces {#output_format_pretty_highlight_trailing_spaces} - - - -有効にすると、出力先がターミナルの場合、行末の空白文字をグレーと下線で強調表示します。 - - - -## output_format_pretty_max_column_name_width_cut_to {#output_format_pretty_max_column_name_width_cut_to} - - - -列名が長すぎる場合、この値の長さに切り詰めます。 -列名は、`output_format_pretty_max_column_name_width_cut_to` と `output_format_pretty_max_column_name_width_min_chars_to_cut` を合計した長さを超える場合に切り詰められます。 - - - -## output_format_pretty_max_column_name_width_min_chars_to_cut {#output_format_pretty_max_column_name_width_min_chars_to_cut} - - - -カラム名が長すぎる場合に切り詰める際の最小文字数。 -カラム名の長さが `output_format_pretty_max_column_name_width_cut_to` に `output_format_pretty_max_column_name_width_min_chars_to_cut` を加えた値より長い場合、切り詰められます。 - - - -## output_format_pretty_max_column_pad_width {#output_format_pretty_max_column_pad_width} - - - -Pretty 形式において、列内のすべての値に適用されるパディングの最大幅。 - - - -## output_format_pretty_max_rows {#output_format_pretty_max_rows} - - - -Pretty フォーマットで表示する行数の上限。 - - - -## output_format_pretty_max_value_width {#output_format_pretty_max_value_width} - - - -Pretty フォーマットで表示する値の最大幅。これを超えると値は切り詰められます。 -値 0 は「一切切り詰めない」ことを意味します。 - - - -## output_format_pretty_max_value_width_apply_for_single_value {#output_format_pretty_max_value_width_apply_for_single_value} - - - -ブロック内の値が単一の値でない場合にのみ、値を切り詰めます(`output_format_pretty_max_value_width` 設定を参照)。それ以外の場合は値を省略せずに出力します。これは `SHOW CREATE TABLE` クエリに役立ちます。 - - - -## output_format_pretty_multiline_fields {#output_format_pretty_multiline_fields} - - - -有効な場合、Pretty 形式ではテーブルセル内の複数行フィールドをセル内に収めて表示し、テーブルの枠線が保たれるようにします。 -無効な場合、それらはそのまま表示されるため、テーブルが変形する可能性があります(オフにしておく利点としては、複数行の値をコピー&ペーストしやすくなることが挙げられます)。 - - - -## output_format_pretty_row_numbers {#output_format_pretty_row_numbers} - - - -Pretty 出力形式で各行の前に行番号を追加します - - - -## output_format_pretty_single_large_number_tip_threshold {#output_format_pretty_single_large_number_tip_threshold} - - - -ブロックが単一の数値のみで構成され、その値がこの閾値(0 を除く)を超える場合、テーブルの右側に読みやすい形式に変換した数値の注釈を表示します。 - - - -## output_format_pretty_squash_consecutive_ms {#output_format_pretty_squash_consecutive_ms} - - - -次のブロックを指定したミリ秒数間待機し、書き込み前に前のブロックにまとめます。 -これにより、小さすぎるブロックが頻繁に出力されることを防ぎつつ、ストリーミング形式でデータを表示できます。 - - - -## output_format_pretty_squash_max_wait_ms {#output_format_pretty_squash_max_wait_ms} - - - -前回の出力から指定したミリ秒数を超えて経過している場合、pretty 系フォーマットで保留中のブロックを出力します。 - - - -## output_format_protobuf_nullables_with_google_wrappers {#output_format_protobuf_nullables_with_google_wrappers} - - - -Google の wrapper 型を使用して Nullable 列をシリアライズする場合、デフォルト値を空の wrapper としてシリアライズします。オフにすると、デフォルト値と null 値はシリアライズされません。 - - - -## output_format_schema {#output_format_schema} - - - -自動生成されたスキーマが [Cap'n Proto](/interfaces/formats/CapnProto) または [Protobuf](/interfaces/formats/Protobuf) 形式で保存されるファイルのパス。 - - - -## output_format_sql_insert_include_column_names {#output_format_sql_insert_include_column_names} - - - -INSERT クエリに列名を含める - - - -## output_format_sql_insert_max_batch_size {#output_format_sql_insert_max_batch_size} - - - -1つの INSERT 文で挿入できる最大行数。 - - - -## output_format_sql_insert_quote_names {#output_format_sql_insert_quote_names} - - - -カラム名を `(バッククォート)で囲みます - - - -## output_format_sql_insert_table_name {#output_format_sql_insert_table_name} - - - -出力される INSERT クエリ内で使用されるテーブルの名前 - - - -## output_format_sql_insert_use_replace {#output_format_sql_insert_use_replace} - - - -INSERT 文ではなく REPLACE 文を使用する - - - -## output_format_tsv_crlf_end_of_line {#output_format_tsv_crlf_end_of_line} - - - -`true` に設定すると、TSV 形式の行末は `\n` ではなく `\r\n` になります。 - - - -## output_format_values_escape_quote_with_quote {#output_format_values_escape_quote_with_quote} - - - -true の場合は ' を '' でエスケープし、それ以外の場合は \' でクオートします。 - - - -## output_format_write_statistics {#output_format_write_statistics} - - - -読み取られた行数、バイト数、経過時間に関する統計情報を、適切な出力フォーマットで書き出します。 - -既定で有効です - - - -## precise_float_parsing {#precise_float_parsing} - - - -より高精度だが低速な浮動小数点数解析アルゴリズムを優先して使用する - - - -## regexp_dict_allow_hyperscan {#regexp_dict_allow_hyperscan} - - - -Hyperscan ライブラリを使用する `regexp_tree` 辞書を許可します。 - - - -## regexp_dict_flag_case_insensitive {#regexp_dict_flag_case_insensitive} - - - -regexp_tree 辞書に対して大文字・小文字を区別しないマッチングを行います。個々の式ごとに `(?i)` または `(?-i)` を指定して上書きできます。 - - - -## regexp_dict_flag_dotall {#regexp_dict_flag_dotall} - - - -`.` が `regexp_tree` 辞書で改行文字にもマッチすることを許可します。 - - - -## rows_before_aggregation {#rows_before_aggregation} - - - -有効にすると、ClickHouse は rows_before_aggregation という統計情報の正確な値を提供します。これは、集約処理を行う前に読み取られた行数を表します。 - - - -## schema_inference_hints - -スキーマを持たないフォーマットに対して、スキーマ推論のヒントとして使用する列名と型の一覧です。 - -例: - -クエリ: - -```sql -desc format(JSONEachRow, '{"x" : 1, "y" : "String", "z" : "0.0.0.0" }') settings schema_inference_hints='x UInt8, z IPv4'; -``` - -結果: - -```sql -x UInt8 -y Nullable(String) -z IPv4 -``` - -:::note -`schema_inference_hints` が正しくフォーマットされていない場合、または入力ミスや誤ったデータ型などが含まれている場合は、`schema_inference_hints` 全体が無視されます。 -::: - - -## schema_inference_make_columns_nullable {#schema_inference_make_columns_nullable} - - - -スキーマ推論において、推論された型を `Nullable` にするかどうかを制御します。 -指定可能な値: - * 0 - 推論された型は決して `Nullable` になりません(この場合の null 値の扱いは input_format_null_as_default で制御します)。 - * 1 - すべての推論された型が `Nullable` になります。 - * 2 または `auto` - スキーマ推論中に解析されるサンプル内で、その列に `NULL` が含まれている場合、またはファイルメタデータに列の Nullable 情報が含まれている場合にのみ、推論された型は `Nullable` になります。 - * 3 - フォーマットがファイルメタデータに null 許容性情報を持つ場合(例: Parquet)は、そのメタデータに従って推論された型が `Nullable` かどうかが決まり、それ以外の場合(例: CSV)は常に `Nullable` になります。 - - - -## schema_inference_make_json_columns_nullable {#schema_inference_make_json_columns_nullable} - - - -スキーマ推論時に、推論された JSON 型を `Nullable` として扱うかどうかを制御します。 -この設定を `schema_inference_make_columns_nullable` と併せて有効にした場合、推論される JSON 型は `Nullable` として扱われます。 - - - -## schema_inference_mode {#schema_inference_mode} - - - -スキーマ推論のモード。`default` — すべてのファイルが同一のスキーマを持つと仮定し、任意のファイルからスキーマを推論できるモード。`union` — ファイルごとに異なるスキーマを持ち得るものとし、結果のスキーマをすべてのファイルのスキーマの和集合とするモード。 - - - -## show_create_query_identifier_quoting_rule {#show_create_query_identifier_quoting_rule} - - - -SHOW CREATE クエリで使用される識別子のクォート規則を設定します - - - -## show_create_query_identifier_quoting_style {#show_create_query_identifier_quoting_style} - - - -SHOW CREATE クエリで識別子に使用する引用符のスタイルを設定します - - - -## type_json_skip_duplicated_paths {#type_json_skip_duplicated_paths} - - - -有効にすると、JSON オブジェクトを JSON 型に解析する際に、重複するパスは無視され、例外は送出されず最初のものだけが挿入されます。 - - - -## validate_experimental_and_suspicious_types_inside_nested_types {#validate_experimental_and_suspicious_types_inside_nested_types} - - - -Array/Map/Tuple などのネストされた型内での experimental および suspicious 型の使用を検証する - - +{/*編集しないでください – このファイルは自動生成されたものです*/ } diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/settings/settings.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/settings/settings.md index 7a518f02e92..9cb420688f5 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/settings/settings.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/settings/settings.md @@ -1,11440 +1,10 @@ --- title: 'セッション設定' +description: 'system.settings から設定されるセッション用の設定' sidebar_label: 'セッション設定' slug: /operations/settings/settings toc_max_heading_level: 2 -description: '``system.settings`` テーブルに含まれる設定項目です。' doc_type: 'reference' --- -import ExperimentalBadge from '@theme/badges/ExperimentalBadge'; -import BetaBadge from '@theme/badges/BetaBadge'; -import CloudOnlyBadge from '@theme/badges/CloudOnlyBadge'; -import SettingsInfoBlock from '@theme/SettingsInfoBlock/SettingsInfoBlock'; -import VersionHistory from '@theme/VersionHistory/VersionHistory'; - -{/* 自動生成 */ } - -以下の設定はすべて、テーブル [system.settings](/docs/operations/system-tables/settings) でも利用できます。これらの設定は [ソースコード](https://github.com/ClickHouse/ClickHouse/blob/master/src/Core/Settings.cpp) から自動生成されています。 - - -## add_http_cors_header {#add_http_cors_header} - - - -HTTP CORS ヘッダーを書き込みます。 - -## additional_result_filter - -`SELECT` クエリの結果に適用する追加のフィルタ式です。 -この設定は、どのサブクエリにも適用されません。 - -**例** - -```sql -INSERT INTO table_1 VALUES (1, 'a'), (2, 'bb'), (3, 'ccc'), (4, 'dddd'); -SElECT * FROM table_1; -``` - -```response -┌─x─┬─y────┐ -│ 1 │ a │ -│ 2 │ bb │ -│ 3 │ ccc │ -│ 4 │ dddd │ -└───┴──────┘ -``` - -```sql -SELECT * -FROM table_1 -SETTINGS additional_result_filter = 'x != 2' -``` - -```response -┌─x─┬─y────┐ -│ 1 │ a │ -│ 3 │ ccc │ -│ 4 │ dddd │ -└───┴──────┘ -``` - - -## additional_table_filters - - - -指定されたテーブルからの読み込み後に適用される追加のフィルタ式。 - -**例** - -```sql -INSERT INTO table_1 VALUES (1, 'a'), (2, 'bb'), (3, 'ccc'), (4, 'dddd'); -SELECT * FROM table_1; -``` - -```response -┌─x─┬─y────┐ -│ 1 │ a │ -│ 2 │ bb │ -│ 3 │ ccc │ -│ 4 │ dddd │ -└───┴──────┘ -``` - -```sql -SELECT * -FROM table_1 -SETTINGS additional_table_filters = {'table_1': 'x != 2'} -``` - -```response -┌─x─┬─y────┐ -│ 1 │ a │ -│ 3 │ ccc │ -│ 4 │ dddd │ -└───┴──────┘ -``` - - -## aggregate_functions_null_for_empty - - - -クエリ内のすべての集約関数を書き換え、末尾に [-OrNull](/sql-reference/aggregate-functions/combinators#-ornull) 接尾辞を追加するかどうかを有効または無効にします。SQL 標準との互換性を保つために有効にしてください。 -分散クエリで一貫した結果を得るために、[count_distinct_implementation](#count_distinct_implementation) 設定と同様にクエリ書き換えとして実装されています。 - -設定可能な値: - -* 0 — 無効。 -* 1 — 有効。 - -**例** - -集約関数を含む次のクエリを例とします。 - -```sql -SELECT SUM(-1), MAX(0) FROM system.one WHERE 0; -``` - -`aggregate_functions_null_for_empty = 0` を設定すると、次のようになります: - -```text -┌─SUM(-1)─┬─MAX(0)─┐ -│ 0 │ 0 │ -└─────────┴────────┘ -``` - -`aggregate_functions_null_for_empty = 1` を指定すると、結果は次のようになります。 - -```text -┌─SUMOrNull(-1)─┬─MAXOrNull(0)─┐ -│ NULL │ NULL │ -└───────────────┴──────────────┘ -``` - - -## aggregation_in_order_max_block_bytes {#aggregation_in_order_max_block_bytes} - - - -主キー順で集約を行う際に蓄積されるブロックの最大サイズ(バイト単位)。ブロックサイズを小さくすると、集約処理の最終マージ段階をより高い並列度で実行できます。 - -## aggregation_memory_efficient_merge_threads {#aggregation_memory_efficient_merge_threads} - - - -メモリ効率モードで中間集約結果をマージする際に使用するスレッド数。値を大きくすると、より多くのメモリが消費されます。0 を指定した場合は「max_threads」と同じ値を意味します。 - -## allow_aggregate_partitions_independently {#allow_aggregate_partitions_independently} - - - -パーティションキーが `GROUP BY` キーと対応している場合、パーティションごとに別スレッドで独立して集計できるようにします。パーティション数がコア数に近く、かつパーティションのサイズがほぼ同じ場合に有効です。 - -## allow_archive_path_syntax {#allow_archive_path_syntax} - - - - - -File/S3 エンジンおよびテーブル関数では、アーカイブが正しい拡張子を持つ場合、'::' を含むパスを `::` として解析します。 - -## allow_asynchronous_read_from_io_pool_for_merge_tree {#allow_asynchronous_read_from_io_pool_for_merge_tree} - - - -バックグラウンドの I/O プールを使用して MergeTree テーブルからデータを読み取ります。この設定により、I/O にボトルネックがあるクエリのパフォーマンスが向上する可能性があります。 - -## allow_changing_replica_until_first_data_packet {#allow_changing_replica_until_first_data_packet} - - - -有効にすると、ヘッジ付きリクエストにおいて、すでにある程度進捗している場合でも(ただし、その進捗が `receive_data_timeout` の間更新されていない場合)、最初のデータパケットを受信するまで新しい接続を開始できます。無効な場合は、最初に進捗が発生した時点以降はレプリカの切り替えを行いません。 - -## allow_create_index_without_type {#allow_create_index_without_type} - - - -TYPE を指定せずに `CREATE INDEX` クエリを実行することを許可します。クエリは無視されます。SQL 互換性テスト用の設定です。 - -## allow_custom_error_code_in_throwif {#allow_custom_error_code_in_throwif} - - - -throwIf() 関数でカスタムエラーコードを有効にします。有効にすると、スローされる例外に想定外のエラーコードが設定される可能性があります。 - -## allow_ddl {#allow_ddl} - - - -true に設定されている場合、ユーザーは DDL クエリを実行できます。 - -## allow_deprecated_database_ordinary {#allow_deprecated_database_ordinary} - - - -非推奨の Ordinary データベースエンジンを使用したデータベースの作成を許可する - -## allow_deprecated_error_prone_window_functions {#allow_deprecated_error_prone_window_functions} - - - - - -非推奨でエラーを招きやすいウィンドウ関数(neighbor、runningAccumulate、runningDifferenceStartingWithFirstValue、runningDifference)の使用を許可 - -## allow_deprecated_snowflake_conversion_functions {#allow_deprecated_snowflake_conversion_functions} - - - - - -関数 `snowflakeToDateTime`、`snowflakeToDateTime64`、`dateTimeToSnowflake`、`dateTime64ToSnowflake` は非推奨であり、デフォルトでは無効になっています。 -代わりに、`snowflakeIDToDateTime`、`snowflakeIDToDateTime64`、`dateTimeToSnowflakeID`、`dateTime64ToSnowflakeID` を使用してください。 - -非推奨の関数を再度有効化する場合(たとえば移行期間中など)は、この設定を `true` に設定してください。 - -## allow_deprecated_syntax_for_merge_tree {#allow_deprecated_syntax_for_merge_tree} - - - -非推奨のエンジン定義構文を使用した MergeTree テーブルの作成を許可します - -## allow_distributed_ddl {#allow_distributed_ddl} - - - -`true` に設定されている場合、ユーザーによる分散 DDL クエリの実行が許可されます。 - -## allow_drop_detached {#allow_drop_detached} - - - -ALTER TABLE ... DROP DETACHED PART[ITION] ... クエリの実行を許可します - -## allow_dynamic_type_in_join_keys {#allow_dynamic_type_in_join_keys} - - - - - -JOIN キーで Dynamic 型を使用できるようにします。互換性確保のために追加された設定です。Dynamic 型を JOIN キーで使用することは推奨されません。他の型との比較で予期しない結果を招く可能性があるためです。 - -## allow_execute_multiif_columnar {#allow_execute_multiif_columnar} - - - -multiIf 関数のカラム指向での実行を許可する - -## allow_experimental_alias_table_engine {#allow_experimental_alias_table_engine} - - - - - - - -Alias テーブルエンジンを使用してテーブルを作成できるようにします。 - -## allow_experimental_analyzer {#allow_experimental_analyzer} - -**別名**: `enable_analyzer` - - - - - -新しいクエリアナライザーを有効にします。 - -## allow_experimental_codecs {#allow_experimental_codecs} - - - - - -true に設定すると、実験的な圧縮コーデックを指定できるようになります(ただし、現時点ではそのようなコーデックは存在せず、このオプションには何の効果もありません)。 - -## allow_experimental_correlated_subqueries {#allow_experimental_correlated_subqueries} - - - - - - - -相関サブクエリの実行を許可します。 - -## allow_experimental_database_glue_catalog {#allow_experimental_database_glue_catalog} - - - -**別名**: `allow_database_glue_catalog` - - - - - -catalog_type = 'glue' の実験的な DataLakeCatalog データベースエンジンを許可 - -## allow_experimental_database_hms_catalog {#allow_experimental_database_hms_catalog} - - - - - - - -catalog_type = 'hms' の実験的なデータベースエンジン DataLakeCatalog を許可 - -## allow_experimental_database_iceberg {#allow_experimental_database_iceberg} - - - -**別名**: `allow_database_iceberg` - - - - - -catalog_type = 'iceberg' を使用する実験的なデータベースエンジン DataLakeCatalog を有効にします - -## allow_experimental_database_materialized_postgresql {#allow_experimental_database_materialized_postgresql} - - - - - -Engine=MaterializedPostgreSQL(...) を使用するデータベースを作成できるようにします。 - -## allow_experimental_database_unity_catalog {#allow_experimental_database_unity_catalog} - - - -**エイリアス**: `allow_database_unity_catalog` - - - - - -catalog_type = 'unity' の実験的なデータベースエンジン DataLakeCatalog を許可します - -## allow_experimental_delta_kernel_rs {#allow_experimental_delta_kernel_rs} - - - - - - - -実験的な delta-kernel-rs 実装を有効にします。 - -## allow_experimental_delta_lake_writes {#allow_experimental_delta_lake_writes} - - - - - - - -delta-kernel の書き込み機能を有効にします。 - -## allow_experimental_full_text_index {#allow_experimental_full_text_index} - - - - - - - -true に設定すると、実験的なテキストインデックスを使用できるようになります。 - -## allow_experimental_funnel_functions {#allow_experimental_funnel_functions} - - - - - -ファネル分析向けの実験的関数を有効にします。 - -## allow_experimental_hash_functions {#allow_experimental_hash_functions} - - - - - -実験的なハッシュ関数を有効化します - -## allow_experimental_iceberg_compaction {#allow_experimental_iceberg_compaction} - - - - - - - -Iceberg テーブルに対して `OPTIMIZE` を明示的に使用できるようにします。 - -## allow_experimental_insert_into_iceberg {#allow_experimental_insert_into_iceberg} - - - - - - - -Iceberg への `INSERT` クエリの実行を許可します。 - -## allow_experimental_join_right_table_sorting {#allow_experimental_join_right_table_sorting} - - - - - - - -この設定が true に設定されていて、`join_to_sort_minimum_perkey_rows` と `join_to_sort_maximum_table_rows` の条件を満たす場合、LEFT または INNER ハッシュ結合のパフォーマンスを向上させるために、右テーブルをキーで並べ替えます。 - -## allow_experimental_kafka_offsets_storage_in_keeper {#allow_experimental_kafka_offsets_storage_in_keeper} - - - - - - - -Kafka に関連するオフセットを ClickHouse Keeper に保存する実験的機能を有効にします。有効化すると、Kafka テーブルエンジンに ClickHouse Keeper のパスとレプリカ名を指定できるようになります。これにより、通常の Kafka エンジンの代わりに、コミット済みオフセットを主に ClickHouse Keeper に保存する新しいタイプのストレージエンジンが使用されます。 - -## allow_experimental_kusto_dialect {#allow_experimental_kusto_dialect} - - - - - - - -SQL の代替となる Kusto Query Language (KQL) を有効にします。 - -## allow_experimental_materialized_postgresql_table {#allow_experimental_materialized_postgresql_table} - - - - - -MaterializedPostgreSQL テーブルエンジンの使用を有効にします。実験的な機能であるため、デフォルトでは無効になっています。 - -## allow_experimental_nlp_functions {#allow_experimental_nlp_functions} - - - - - -自然言語処理向けの実験的関数を有効にします。 - -## allow_experimental_parallel_reading_from_replicas {#allow_experimental_parallel_reading_from_replicas} - - - -**エイリアス**: `enable_parallel_replicas` - - - -SELECT クエリの実行において、各シャードから最大 `max_parallel_replicas` 個のレプリカを使用します。読み取りは並列化され、動的に協調制御されます。0 - 無効、1 - 有効(失敗時は例外を投げずに暗黙的に無効化)、2 - 有効(失敗時は例外をスロー) - -## allow_experimental_prql_dialect {#allow_experimental_prql_dialect} - - - - - - - -PRQL(SQL の代替となるクエリ言語)を有効にします。 - -## allow_experimental_qbit_type {#allow_experimental_qbit_type} - - - - - - - -[QBit](../../sql-reference/data-types/qbit.md) データ型を作成できるようにします。 - -## allow_experimental_query_deduplication {#allow_experimental_query_deduplication} - - - - - -パーツの UUID に基づく SELECT クエリ向けの実験的なデータの重複排除機能 - -## allow_experimental_statistics {#allow_experimental_statistics} - - - -**エイリアス**: `allow_experimental_statistic` - - - - - -[statistics](../../engines/table-engines/mergetree-family/mergetree.md/#table_engine-mergetree-creating-a-table) を利用するカラムの定義および [statistics の操作](../../engines/table-engines/mergetree-family/mergetree.md/#column-statistics)を許可します。 - -## allow_experimental_time_series_aggregate_functions {#allow_experimental_time_series_aggregate_functions} - - - -**別名**: `allow_experimental_ts_to_grid_aggregate_function` - - - - - -Prometheus ライクな時系列データのリサンプリング、レートおよびデルタの計算を行うための実験的な timeSeries* 集約関数です。 - -## allow_experimental_time_series_table {#allow_experimental_time_series_table} - - - - - - - -[TimeSeries](../../engines/table-engines/integrations/time-series.md) テーブルエンジンを使用するテーブルの作成を許可します。設定可能な値: - -- 0 — [TimeSeries](../../engines/table-engines/integrations/time-series.md) テーブルエンジンは無効です。 -- 1 — [TimeSeries](../../engines/table-engines/integrations/time-series.md) テーブルエンジンは有効です。 - -## allow_experimental_time_time64_type {#allow_experimental_time_time64_type} - - - -**別名**: `enable_time_time64_type` - - - - - -[Time](../../sql-reference/data-types/time.md) および [Time64](../../sql-reference/data-types/time64.md) データ型の作成を許可します。 - -## allow_experimental_window_view {#allow_experimental_window_view} - - - - - -WINDOW VIEW を有効にします。まだ十分に安定していません。 - -## allow_experimental_ytsaurus_dictionary_source {#allow_experimental_ytsaurus_dictionary_source} - - - - - - - -YTsaurus との統合向けの実験的な辞書ソース。 - -## allow_experimental_ytsaurus_table_engine {#allow_experimental_ytsaurus_table_engine} - - - - - - - -YTsaurus と統合するための実験的テーブルエンジン。 - -## allow_experimental_ytsaurus_table_function {#allow_experimental_ytsaurus_table_function} - - - - - - - -YTsaurus との統合用の実験的なテーブルエンジンです。 - -## allow_general_join_planning {#allow_general_join_planning} - - - - - -ハッシュ結合でのみ使用できるが、より複雑な条件も扱える、より汎用的な結合計画アルゴリズムを有効にします。ハッシュ結合が有効になっていない場合は、この設定値にかかわらず通常の結合計画アルゴリズムが使用されます。 - -## allow_get_client_http_header {#allow_get_client_http_header} - - - - - -現在の HTTP リクエストのヘッダー値を取得できる関数 `getClientHTTPHeader` の使用を許可します。`Cookie` など機密情報を含む可能性のあるヘッダーがあるため、セキュリティ上の理由からデフォルトでは有効になっていません。なお、`X-ClickHouse-*` ヘッダーおよび `Authentication` ヘッダーは常に取得が制限されており、この関数で取得することはできません。 - -## allow_hyperscan {#allow_hyperscan} - - - -Hyperscan ライブラリを使用する関数を許可します。コンパイル時間の増大や過度なリソース使用を避けたい場合は無効にします。 - -## allow_introspection_functions {#allow_introspection_functions} - - - -クエリプロファイリング用の[イントロスペクション関数](../../sql-reference/functions/introspection.md)を有効または無効にします。 - -設定可能な値: - -- 1 — イントロスペクション関数を有効にする -- 0 — イントロスペクション関数を無効にする - -**関連項目** - -- [Sampling Query Profiler](../../operations/optimizing-performance/sampling-query-profiler.md) -- システムテーブル [trace_log](/operations/system-tables/trace_log) - -## allow_materialized_view_with_bad_select {#allow_materialized_view_with_bad_select} - - - - - -存在しないテーブルまたはカラムを参照する SELECT クエリを伴う CREATE MATERIALIZED VIEW を許可します。クエリは構文的に正しい必要があります。リフレッシュ可能な MV には適用されません。SELECT クエリから MV のスキーマを推論する必要がある場合(つまり、CREATE にカラムリストも TO テーブルも指定されていない場合)には適用されません。ソーステーブルより先に MV(マテリアライズドビュー)を作成する場合に利用できます。 - -## allow_named_collection_override_by_default {#allow_named_collection_override_by_default} - - - -名前付きコレクションのフィールドの上書きをデフォルトで許可します。 - -## allow_non_metadata_alters {#allow_non_metadata_alters} - - - -テーブルのメタデータだけでなく、ディスク上のデータにも影響を与える `ALTER` 操作の実行を許可します - -## allow_nonconst_timezone_arguments {#allow_nonconst_timezone_arguments} - - - - - -toTimeZone(), fromUnixTimestamp*(), snowflakeToDateTime*() などの一部の時間関連の関数で、定数ではないタイムゾーン引数を許可します。 -この設定は互換性のためだけに存在します。ClickHouse では、タイムゾーンはデータ型のプロパティであり、それに対応するカラムのプロパティでもあります。 -この設定を有効にすると、1 つのカラム内で値ごとに異なるタイムゾーンを持てるかのような誤った印象を与えます。 -したがって、この設定は有効化しないでください。 - -## allow_nondeterministic_mutations - - - -レプリケーテッドテーブル上のミューテーションで、`dictGet` などの非決定的関数を使用できるようにするユーザーレベルの設定です。 - -たとえばディクショナリはノード間で同期されていない可能性があるため、その値を取得するミューテーションは、デフォルトではレプリケーテッドテーブル上では許可されていません。この設定を有効にするとこの挙動が許可され、使用されるデータがすべてのノード間で同期されていることを保証する責任はユーザー側に移ります。 - -**例** - -```xml - - - 1 - - - - - - - -``` - - -## allow_nondeterministic_optimize_skip_unused_shards {#allow_nondeterministic_optimize_skip_unused_shards} - - - -シャーディングキーで非決定的な関数(`rand` や `dictGet` など。後者は更新時にいくつか注意点があります)の使用を許可します。 - -設定可能な値: - -- 0 — 許可しない。 -- 1 — 許可する。 - -## allow_not_comparable_types_in_comparison_functions {#allow_not_comparable_types_in_comparison_functions} - - - - - -比較関数 `equal/less/greater/etc` で、JSON や AggregateFunction などの比較不能な型を使用できるかどうかを許可または制限します。 - -## allow_not_comparable_types_in_order_by {#allow_not_comparable_types_in_order_by} - - - - - -JSON や AggregateFunction などの比較不可能な型を ORDER BY キーで使用できるかどうかを制御します。 - -## allow_prefetched_read_pool_for_local_filesystem {#allow_prefetched_read_pool_for_local_filesystem} - - - -すべてのパーツがローカルファイルシステム上にある場合、プリフェッチ済みのスレッドプールを優先的に使用します。 - -## allow_prefetched_read_pool_for_remote_filesystem {#allow_prefetched_read_pool_for_remote_filesystem} - - - -すべてのパーツがリモートファイルシステム上にある場合、プリフェッチ読み取り用スレッドプールを優先して使用します - -## allow_push_predicate_ast_for_distributed_subqueries {#allow_push_predicate_ast_for_distributed_subqueries} - - - - - -アナライザが有効な分散サブクエリに対して、AST レベルでの述語プッシュを許可します - -## allow_push_predicate_when_subquery_contains_with {#allow_push_predicate_when_subquery_contains_with} - - - -サブクエリに WITH 句が含まれている場合に述語プッシュダウンを許可します - -## allow_reorder_prewhere_conditions {#allow_reorder_prewhere_conditions} - - - - - -WHERE から PREWHERE へ条件を移動する際、フィルタリングを最適化できるよう条件の並び替えを許可します - -## allow_settings_after_format_in_insert - - - - - -`INSERT` クエリで `FORMAT` の後に `SETTINGS` を許可するかどうかを制御します。`SETTINGS` の一部が値として解釈されてしまう可能性があるため、この設定の使用は推奨されません。 - -例: - -```sql -INSERT INTO FUNCTION null('foo String') SETTINGS max_threads=1 VALUES ('bar'); -``` - -ただし、次のクエリが動作するのは、`allow_settings_after_format_in_insert` が有効になっている場合のみです。 - -```sql -SET allow_settings_after_format_in_insert=1; -INSERT INTO FUNCTION null('foo String') VALUES ('bar') SETTINGS max_threads=1; -``` - -取り得る値: - -* 0 — 不許可 -* 1 — 許可 - -:::note -古い構文に依存するユースケースがある場合の後方互換性のためにのみ、この設定を使用してください。 -::: - - -## allow_simdjson {#allow_simdjson} - - - -AVX2 命令が利用可能な場合に、`JSON*` 関数で simdjson ライブラリの使用を許可します。無効にした場合は rapidjson が使用されます。 - -## allow_special_serialization_kinds_in_output_formats {#allow_special_serialization_kinds_in_output_formats} - - - - - -Sparse や Replicated などの特殊なシリアル化種別を持つカラムを、完全なカラム表現に変換せずに出力できるようにします。 -これにより、フォーマット処理中の不要なデータコピーを回避できます。 - -## allow_statistics_optimize {#allow_statistics_optimize} - - - -**Aliases**: `allow_statistic_optimize` - - - - - -クエリの最適化に統計を使用することを許可します。 - -## allow_suspicious_codecs {#allow_suspicious_codecs} - - - - - -true に設定すると、無意味な圧縮コーデックも指定できるようになります。 - -## allow_suspicious_fixed_string_types {#allow_suspicious_fixed_string_types} - - - -CREATE TABLE ステートメントで、FixedString(n) 型かつ n > 256 の列を作成できるようにします。長さが 256 以上の FixedString は不審と見なされ、多くの場合は誤用である可能性があります。 - -## allow_suspicious_indices {#allow_suspicious_indices} - - - - - -同一の式を持つ primary/secondary インデックスおよびソートキーを拒否します - -## allow_suspicious_low_cardinality_types {#allow_suspicious_low_cardinality_types} - - - -8 バイト以下の固定サイズを持つデータ型(数値型および `FixedString(8_bytes_or_less)`)と [LowCardinality](../../sql-reference/data-types/lowcardinality.md) の併用を許可または制限します。 - -小さな固定長値に対しては、各行に対して ClickHouse が数値インデックスを保存するため、`LowCardinality` を使用しても通常は非効率です。その結果: - -- ディスク使用量が増加する可能性があります。 -- 辞書サイズによっては、RAM 使用量が多くなる可能性があります。 -- 追加のエンコード/デコード処理が発生するため、一部の関数が遅くなる場合があります。 - -上記のすべての理由により、[MergeTree](../../engines/table-engines/mergetree-family/mergetree.md) エンジンのテーブルではマージ処理時間が長くなる可能性があります。 - -設定可能な値: - -- 1 — `LowCardinality` の使用を制限しません。 -- 0 — `LowCardinality` の使用を制限します。 - -## allow_suspicious_primary_key {#allow_suspicious_primary_key} - - - - - -MergeTree(例: SimpleAggregateFunction)に対する問題のある `PRIMARY KEY` / `ORDER BY` を許可します。 - -## allow_suspicious_ttl_expressions {#allow_suspicious_ttl_expressions} - - - - - -テーブルのいずれのカラムにも依存しない TTL 式を拒否します。これはほとんどの場合、ユーザーの誤りであることを示します。 - -## allow_suspicious_types_in_group_by {#allow_suspicious_types_in_group_by} - - - - - -GROUP BY 句のキーとして [Variant](../../sql-reference/data-types/variant.md) 型および [Dynamic](../../sql-reference/data-types/dynamic.md) 型を使用できるかどうかを制御します。 - -## allow_suspicious_types_in_order_by {#allow_suspicious_types_in_order_by} - - - - - -ORDER BY キーで [Variant](../../sql-reference/data-types/variant.md) 型および [Dynamic](../../sql-reference/data-types/dynamic.md) 型を使用することを許可するかどうかを制御します。 - -## allow_suspicious_variant_types {#allow_suspicious_variant_types} - - - - - -この設定を有効にすると、`CREATE TABLE` 文で、類似したバリアント型(たとえば、異なる数値型や日付型など)を持つ `Variant` 型を指定できるようになります。この設定を有効にすると、類似した型の値を扱う際に曖昧さが生じる可能性があります。 - -## allow_unrestricted_reads_from_keeper {#allow_unrestricted_reads_from_keeper} - - - -`system.zookeeper` テーブルに対して、パス条件なしの無制限な読み取りを許可します。便利な場合もありますが、`ZooKeeper` に対して安全ではありません。 - -## alter_move_to_space_execute_async {#alter_move_to_space_execute_async} - - - -ALTER TABLE MOVE ... TO [DISK|VOLUME] を非同期で実行します - -## alter_partition_verbose_result - - - -パーティションおよびパーツに対する操作が正常に適用されたパーツに関する情報の表示を有効または無効にします。 -[ATTACH PARTITION|PART](/sql-reference/statements/alter/partition#attach-partitionpart) および [FREEZE PARTITION](/sql-reference/statements/alter/partition#freeze-partition) に適用されます。 - -設定可能な値: - -* 0 — 詳細表示を無効にします。 -* 1 — 詳細表示を有効にします。 - -**例** - -```sql -CREATE TABLE test(a Int64, d Date, s String) ENGINE = MergeTree PARTITION BY toYYYYMDECLARE(d) ORDER BY a; -INSERT INTO test VALUES(1, '2021-01-01', ''); -INSERT INTO test VALUES(1, '2021-01-01', ''); -ALTER TABLE test DETACH PARTITION ID '202101'; - -ALTER TABLE test ATTACH PARTITION ID '202101' SETTINGS alter_partition_verbose_result = 1; - -┌─command_type─────┬─partition_id─┬─part_name────┬─old_part_name─┐ -│ ATTACH PARTITION │ 202101 │ 202101_7_7_0 │ 202101_5_5_0 │ -│ ATTACH PARTITION │ 202101 │ 202101_8_8_0 │ 202101_6_6_0 │ -└──────────────────┴──────────────┴──────────────┴───────────────┘ - -ALTER TABLE test FREEZE SETTINGS alter_partition_verbose_result = 1; - -┌─command_type─┬─partition_id─┬─part_name────┬─backup_name─┬─backup_path───────────────────┬─part_backup_path────────────────────────────────────────────┐ -│ FREEZE ALL │ 202101 │ 202101_7_7_0 │ 8 │ /var/lib/clickhouse/shadow/8/ │ /var/lib/clickhouse/shadow/8/data/default/test/202101_7_7_0 │ -│ FREEZE ALL │ 202101 │ 202101_8_8_0 │ 8 │ /var/lib/clickhouse/shadow/8/ │ /var/lib/clickhouse/shadow/8/data/default/test/202101_8_8_0 │ -└──────────────┴──────────────┴──────────────┴─────────────┴───────────────────────────────┴─────────────────────────────────────────────────────────────┘ -``` - - -## alter_sync {#alter_sync} - -**エイリアス**: `replication_alter_partitions_sync` - - - -[ALTER](../../sql-reference/statements/alter/index.md)、[OPTIMIZE](../../sql-reference/statements/optimize.md)、[TRUNCATE](../../sql-reference/statements/truncate.md) クエリによってレプリカ上で実行されるアクションについて、完了をどの程度待機するかを設定します。 - -設定可能な値: - -- `0` — 待機しない。 -- `1` — 自身のレプリカでの実行が完了するまで待機する。 -- `2` — すべてのレプリカでの実行が完了するまで待機する。 - -Cloud 環境でのデフォルト値: `1`。 - -:::note -`alter_sync` は `Replicated` テーブルにのみ適用され、`Replicated` ではないテーブルに対する ALTER には影響しません。 -::: - -## alter_update_mode {#alter_update_mode} - - - - - -`UPDATE` コマンドを含む `ALTER` クエリの動作モードです。 - -指定可能な値: - -- `heavy` - 通常のミューテーションを実行します。 -- `lightweight` - 可能であれば軽量アップデートを実行し、それ以外の場合は通常のミューテーションを実行します。 -- `lightweight_force` - 可能であれば軽量アップデートを実行し、それ以外の場合は例外をスローします。 - -## analyze_index_with_space_filling_curves {#analyze_index_with_space_filling_curves} - - - -テーブルのインデックスが空間充填曲線(例:`ORDER BY mortonEncode(x, y)` や `ORDER BY hilbertEncode(x, y)`)を使用しており、クエリにその引数に対する条件(例:`x >= 10 AND x <= 20 AND y >= 20 AND y <= 30`)が含まれている場合は、インデックス解析に空間充填曲線を利用します。 - -## analyzer_compatibility_allow_compound_identifiers_in_unflatten_nested {#analyzer_compatibility_allow_compound_identifiers_in_unflatten_nested} - - - - - -`Nested` カラムに複合識別子を追加できるようにします。クエリ結果が変化するため、互換性に関する設定です。無効にすると、`SELECT a.b.c FROM table ARRAY JOIN a` は使用できず、`SELECT a FROM table` の結果にも、`Nested a` の結果として `a.b.c` 列が含まれなくなります。 - -## analyzer_compatibility_join_using_top_level_identifier {#analyzer_compatibility_join_using_top_level_identifier} - - - - - -JOIN USING 内で使用される識別子を Projection から解決するよう強制します(例えば `SELECT a + 1 AS b FROM t1 JOIN t2 USING (b)` の場合、結合は `t1.b = t2.b` ではなく `t1.a + 1 = t2.b` を条件として実行されます)。 - -## any_join_distinct_right_table_keys {#any_join_distinct_right_table_keys} - - - - - -`ANY INNER|LEFT JOIN` 演算において、従来の ClickHouse サーバーのレガシーな動作を有効にします。 - -:::note -レガシーな `JOIN` の動作に依存するユースケースがある場合にのみ、後方互換性のためにこの設定を使用してください。 -::: - -レガシー動作が有効な場合: - -- ClickHouse が左テーブルから右テーブルへのキーの多対一マッピングロジックを使用するため、`t1 ANY LEFT JOIN t2` と `t2 ANY RIGHT JOIN t1` の結果は等しくなりません。 -- `ANY INNER JOIN` の結果には、`SEMI LEFT JOIN` と同様に、左テーブルからのすべての行が含まれます。 - -レガシー動作が無効な場合: - -- ClickHouse が `ANY RIGHT JOIN` 演算においてキーの一対多マッピングを行うロジックを使用するため、`t1 ANY LEFT JOIN t2` と `t2 ANY RIGHT JOIN t1` の結果は等しくなります。 -- `ANY INNER JOIN` の結果には、左テーブルおよび右テーブルの両方から、各キーにつき 1 行のみが含まれます。 - -取りうる値: - -- 0 — レガシー動作は無効。 -- 1 — レガシー動作は有効。 - -関連項目: - -- [JOIN の厳密さ](/sql-reference/statements/select/join#settings) - -## apply_deleted_mask {#apply_deleted_mask} - - - -軽量 DELETE で削除された行をフィルタリングします。無効にすると、クエリからそれらの行を読み取れるようになります。デバッグや「削除の取り消し」シナリオで有用です。 - -## apply_mutations_on_fly {#apply_mutations_on_fly} - - - -true の場合は、データパーツにマテリアライズされていないミューテーション(UPDATE および DELETE)が SELECT 時に適用されます。 - -## apply_patch_parts {#apply_patch_parts} - - - - - -true の場合、軽量な更新を表すパッチパーツが SELECT クエリ実行時に適用されます。 - -## apply_patch_parts_join_cache_buckets {#apply_patch_parts_join_cache_buckets} - - - - - -Join モードでパッチパーツを適用する際に使用される一時キャッシュのバケット数。 - -## apply_settings_from_server {#apply_settings_from_server} - - - - - -クライアントがサーバーから送られてくる設定を受け入れるかどうかを指定します。 - -これはクライアント側で実行される処理のみに影響します。特に、INSERT の入力データのパースやクエリ結果のフォーマットに影響します。クエリ実行の大部分はサーバー側で行われ、この設定の影響を受けません。 - -通常、この設定はユーザープロファイル(`users.xml` または `ALTER USER` のようなクエリ)で設定すべきであり、クライアント側(クライアントのコマンドライン引数、`SET` クエリ、`SELECT` クエリの `SETTINGS` セクション)から設定すべきではありません。クライアントからは、この値を `false` に変更することはできますが、`true` に変更することはできません(ユーザープロファイルで `apply_settings_from_server = false` が設定されている場合、サーバーは設定値を送信しないためです)。 - -なお、当初(24.12)にはサーバー側設定(`send_settings_to_client`)が存在していましたが、その後、使い勝手を向上させるため、このクライアント側設定に置き換えられました。 - -## arrow_flight_request_descriptor_type {#arrow_flight_request_descriptor_type} - - - - - -Arrow Flight リクエストで使用するディスクリプターの種別。'path' はデータセット名を path ディスクリプターとして送信します。'command' は SQL クエリを command ディスクリプターとして送信します(Dremio では必須)。 - -指定可能な値: - -- 'path' — FlightDescriptor::Path を使用します(デフォルト。ほとんどの Arrow Flight サーバーで動作します) -- 'command' — FlightDescriptor::Command を SELECT クエリと共に使用します(Dremio では必須) - -## asterisk_include_alias_columns {#asterisk_include_alias_columns} - - - -ワイルドカードクエリ(`SELECT *`)で [ALIAS](../../sql-reference/statements/create/table.md/#alias) カラムを含めるかどうかを設定します。 - -設定可能な値: - -- 0 - 無効 -- 1 - 有効 - -## asterisk_include_materialized_columns {#asterisk_include_materialized_columns} - - - -ワイルドカードクエリ(`SELECT *`)に [MATERIALIZED](/sql-reference/statements/create/view#materialized-view) 列を含めるかどうかを制御します。 - -設定可能な値: - -- 0 - 無効 -- 1 - 有効 - -## async_insert {#async_insert} - - - -true の場合、INSERT クエリのデータはキューに保存され、その後バックグラウンドでテーブルに書き込まれます。wait_for_async_insert が false の場合、INSERT クエリはほぼ即座に処理されます。そうでない場合、クライアントはデータがテーブルに書き込まれるまで待機します。 - -## async_insert_busy_timeout_decrease_rate {#async_insert_busy_timeout_decrease_rate} - - - - - -適応型非同期挿入タイムアウトが減少していく際の指数的変化率 - -## async_insert_busy_timeout_increase_rate {#async_insert_busy_timeout_increase_rate} - - - - - -適応型非同期挿入タイムアウトの増加に使われる指数的成長率 - -## async_insert_busy_timeout_max_ms {#async_insert_busy_timeout_max_ms} - -**別名**: `async_insert_busy_timeout_ms` - - - - - -最初のデータが現れてから、クエリごとに収集されたデータをフラッシュするまでに待機する最大時間です。 - -## async_insert_busy_timeout_min_ms {#async_insert_busy_timeout_min_ms} - - - - - -`async_insert_use_adaptive_busy_timeout` によって自動調整が有効になっている場合、最初のデータが現れてから、クエリ単位で収集されたデータをフラッシュ(書き出し)するまでに待機する最短時間です。また、適応アルゴリズムに対する初期値としても機能します。 - -## async_insert_deduplicate {#async_insert_deduplicate} - - - -レプリケートテーブルに対する非同期 INSERT クエリで、挿入されるブロックの重複排除を行うかどうかを指定します。 - -## async_insert_max_data_size {#async_insert_max_data_size} - - - - - -挿入前にクエリごとに収集される未解析データの最大サイズ(バイト単位)。 - -## async_insert_max_query_number {#async_insert_max_query_number} - - - -挿入が実行される前に蓄積される挿入クエリの最大数。 -設定 [`async_insert_deduplicate`](#async_insert_deduplicate) が 1 の場合にのみ有効です。 - -## async_insert_poll_timeout_ms {#async_insert_poll_timeout_ms} - - - - - -非同期挿入キューからデータをポーリングするためのタイムアウト時間 - -## async_insert_use_adaptive_busy_timeout {#async_insert_use_adaptive_busy_timeout} - - - - - -true に設定すると、非同期挿入に対してアダプティブなビジータイムアウトを使用します。 - -## async_query_sending_for_remote {#async_query_sending_for_remote} - - - - - -リモートクエリ実行時に、接続の確立とクエリ送信を非同期で行えるようにします。 - -デフォルトで有効です。 - -## async_socket_for_remote {#async_socket_for_remote} - - - - - -リモートクエリの実行時に、ソケットからの非同期読み取りを有効にします。 - -デフォルトで有効です。 - -## azure_allow_parallel_part_upload {#azure_allow_parallel_part_upload} - - - - - -Azure マルチパートアップロードに複数のスレッドを使用します。 - -## azure_check_objects_after_upload {#azure_check_objects_after_upload} - - - - - -アップロードが成功したことを確認するために、Azure Blob Storage にアップロードされた各オブジェクトを検証します - -## azure_connect_timeout_ms {#azure_connect_timeout_ms} - - - - - -Azure ディスク上のホストへの接続タイムアウト時間。 - -## azure_create_new_file_on_insert {#azure_create_new_file_on_insert} - - - -Azure エンジンのテーブルで、各 `INSERT` ごとに新しいファイルを作成するかどうかを有効または無効にします - -## azure_ignore_file_doesnt_exist {#azure_ignore_file_doesnt_exist} - - - - - -特定のキーを読み取る際、対応するファイルが存在しない場合でもエラーとせずに無視します。 - -設定可能な値: - -- 1 — `SELECT` は空の結果を返します。 -- 0 — `SELECT` は例外をスローします。 - -## azure_list_object_keys_size {#azure_list_object_keys_size} - - - -1 回の ListObject リクエストでバッチとして返されるファイル数の最大値 - -## azure_max_blocks_in_multipart_upload {#azure_max_blocks_in_multipart_upload} - - - - - -Azure のマルチパートアップロードで使用できるブロック数の上限。 - -## azure_max_get_burst {#azure_max_get_burst} - - - - - -1 秒あたりのリクエスト数の上限に達する前に、同時に発行できる最大リクエスト数です。デフォルト値 (0) の場合、`azure_max_get_rps` と同じ値になります。 - -## azure_max_get_rps {#azure_max_get_rps} - - - - - -スロットリングが行われる前の、Azure に対する 1 秒あたりの GET リクエスト数の上限値です。0 の場合は無制限を意味します。 - -## azure_max_inflight_parts_for_one_file {#azure_max_inflight_parts_for_one_file} - - - - - -マルチパートアップロードリクエストで同時にアップロードされるパーツの最大数です。0 を指定すると無制限になります。 - -## azure_max_put_burst {#azure_max_put_burst} - - - - - -1 秒あたりのリクエスト数制限に達する前に、同時に発行できる最大リクエスト数。デフォルト値 0 の場合は、`azure_max_put_rps` と同一です。 - -## azure_max_put_rps {#azure_max_put_rps} - - - - - -スロットリングが行われる前の、Azure への 1 秒あたりの PUT リクエスト数の上限です。0 は無制限を意味します。 - -## azure_max_redirects {#azure_max_redirects} - - - - - -Azure リダイレクトで許可されるホップ数の上限。 - -## azure_max_single_part_copy_size {#azure_max_single_part_copy_size} - - - - - -単一パートコピーで Azure Blob Storage にコピーできるオブジェクトの最大サイズ。 - -## azure_max_single_part_upload_size {#azure_max_single_part_upload_size} - - - - - -Azure Blob Storage への単一パートアップロードでアップロードできるオブジェクトの最大サイズ。 - -## azure_max_single_read_retries {#azure_max_single_read_retries} - - - -単一の Azure Blob Storage 読み取り処理時の最大リトライ回数。 - -## azure_max_unexpected_write_error_retries {#azure_max_unexpected_write_error_retries} - - - - - -Azure Blob Storage への書き込み中に予期しないエラーが発生した場合の最大再試行回数 - -## azure_max_upload_part_size {#azure_max_upload_part_size} - - - - - -Azure Blob Storage へのマルチパートアップロード時にアップロードするパートの最大サイズ。 - -## azure_min_upload_part_size {#azure_min_upload_part_size} - - - - - -Azure Blob Storage へのマルチパートアップロードで使用するパートの最小サイズ。 - -## azure_request_timeout_ms {#azure_request_timeout_ms} - - - - - -Azure とのデータ送受信における非アクティブ状態のタイムアウトです。1 回の TCP 読み取りまたは書き込み呼び出しがこの時間だけブロックされた場合は失敗とみなします。 - -## azure_sdk_max_retries {#azure_sdk_max_retries} - - - - - -Azure SDK の最大リトライ回数 - -## azure_sdk_retry_initial_backoff_ms {#azure_sdk_retry_initial_backoff_ms} - - - - - -Azure SDK の再試行間における最小バックオフ時間 - -## azure_sdk_retry_max_backoff_ms {#azure_sdk_retry_max_backoff_ms} - - - - - -Azure SDK の再試行間の最大バックオフ時間 - -## azure_skip_empty_files {#azure_skip_empty_files} - - - - - -Azure テーブルエンジンで空のファイルをスキップするかどうかを有効または無効にします。 - -取り得る値: - -- 0 — 要求されたフォーマットと互換性のない空ファイルがある場合、`SELECT` は例外をスローします。 -- 1 — 空ファイルに対して、`SELECT` は空の結果を返します。 - -## azure_strict_upload_part_size {#azure_strict_upload_part_size} - - - - - -Azure Blob Storage へのマルチパートアップロード時にアップロードする各パートの厳密なサイズ。 - -## azure_throw_on_zero_files_match {#azure_throw_on_zero_files_match} - - - - - -グロブ展開ルールに従って一致したファイルが 0 件の場合にエラーをスローします。 - -設定値: - -- 1 — `SELECT` が例外をスローします。 -- 0 — `SELECT` が空の結果を返します。 - -## azure_truncate_on_insert {#azure_truncate_on_insert} - - - -azure エンジンテーブルでの挿入前のトランケート処理を有効または無効にします。 - -## azure_upload_part_size_multiply_factor {#azure_upload_part_size_multiply_factor} - - - - - -Azure Blob Storage への 1 回の書き込みで azure_multiply_parts_count_threshold 個のパーツがアップロードされるたびに、azure_min_upload_part_size にこの係数を掛けます。 - -## azure_upload_part_size_multiply_parts_count_threshold {#azure_upload_part_size_multiply_parts_count_threshold} - - - - - -この数のパーツが Azure Blob Storage にアップロードされるたびに、azure_min_upload_part_size は azure_upload_part_size_multiply_factor 倍に増加します。 - -## azure_use_adaptive_timeouts {#azure_use_adaptive_timeouts} - - - - - -`true` に設定すると、すべての Azure リクエストにおいて、最初の 2 回の試行は送信および受信タイムアウトが短いタイムアウト値で行われます。 -`false` に設定すると、すべての試行で同一のタイムアウト値が使用されます。 - -## backup_restore_batch_size_for_keeper_multi {#backup_restore_batch_size_for_keeper_multi} - - - -バックアップまたはリストア時に [Zoo]Keeper へ送信される multi リクエストの、1バッチあたりの最大サイズ - -## backup_restore_batch_size_for_keeper_multiread {#backup_restore_batch_size_for_keeper_multiread} - - - -バックアップまたはリストアの際に [Zoo]Keeper へ送信される multiread リクエストの最大バッチサイズ - -## backup_restore_failure_after_host_disconnected_for_seconds {#backup_restore_failure_after_host_disconnected_for_seconds} - - - - - -BACKUP ON CLUSTER または RESTORE ON CLUSTER の操作中に、ホストがこの時間内に ZooKeeper 内の一時的な `alive` ノードを再作成しない場合、そのバックアップまたはリストア全体は失敗したものとみなされます。 -この値は、障害発生後にホストが ZooKeeper に再接続するための妥当な時間よりも大きく設定する必要があります。 -0 は無制限を意味します。 - -## backup_restore_finish_timeout_after_error_sec {#backup_restore_finish_timeout_after_error_sec} - - - - - -イニシエーターが、他のホストが `error` ノードを検知して現在の `BACKUP ON CLUSTER` または `RESTORE ON CLUSTER` 操作での処理を停止するまで待機する時間。 - -## backup_restore_keeper_fault_injection_probability {#backup_restore_keeper_fault_injection_probability} - - - -バックアップまたはリストア中の keeper リクエストに対する障害発生のおおよその確率。有効な値は [0.0f, 1.0f] の範囲です。 - -## backup_restore_keeper_fault_injection_seed {#backup_restore_keeper_fault_injection_seed} - - - -0 の場合はランダムシード、それ以外の場合は設定値を使用 - -## backup_restore_keeper_max_retries {#backup_restore_keeper_max_retries} - - - - - -BACKUP または RESTORE 操作の実行中に行われる [Zoo]Keeper 操作の最大リトライ回数。 -一時的な [Zoo]Keeper 障害によって操作全体が失敗しないように、十分に大きな値を設定する必要があります。 - -## backup_restore_keeper_max_retries_while_handling_error {#backup_restore_keeper_max_retries_while_handling_error} - - - - - -BACKUP ON CLUSTER または RESTORE ON CLUSTER 操作のエラー処理中に実行される [Zoo]Keeper 操作の最大再試行回数。 - -## backup_restore_keeper_max_retries_while_initializing {#backup_restore_keeper_max_retries_while_initializing} - - - - - -BACKUP ON CLUSTER または RESTORE ON CLUSTER 操作の初期化中に実行される [Zoo]Keeper 操作の最大再試行回数。 - -## backup_restore_keeper_retry_initial_backoff_ms {#backup_restore_keeper_retry_initial_backoff_ms} - - - -バックアップまたはリストア中の [Zoo]Keeper 操作に対するバックオフの初期待機時間 - -## backup_restore_keeper_retry_max_backoff_ms {#backup_restore_keeper_retry_max_backoff_ms} - - - -バックアップまたはリストア処理中の [Zoo]Keeper 操作におけるバックオフの最大待機時間 - -## backup_restore_keeper_value_max_size {#backup_restore_keeper_value_max_size} - - - -バックアップ時の [Zoo]Keeper ノードのデータの最大サイズ - -## backup_restore_s3_retry_attempts {#backup_restore_s3_retry_attempts} - - - - - -Aws::Client::RetryStrategy のための設定です。Aws::Client 側でリトライ処理を行い、0 を指定するとリトライは行われません。バックアップ/リストア時にのみ有効です。 - -## backup_restore_s3_retry_initial_backoff_ms {#backup_restore_s3_retry_initial_backoff_ms} - - - - - -バックアップおよびリストア中の最初のリトライを行う前の初期待機時間(ミリ秒単位)。その後の各リトライでは、`backup_restore_s3_retry_max_backoff_ms` で指定された最大値まで、待機時間が指数関数的に増加します。 - -## backup_restore_s3_retry_jitter_factor {#backup_restore_s3_retry_jitter_factor} - - - - - -バックアップおよびリストア処理中に、`Aws::Client::RetryStrategy` のリトライバックオフ遅延に適用されるジッタ係数です。計算されたバックオフ遅延は、範囲 [1.0, 1.0 + jitter] の乱数係数を掛けた値となり、最大で `backup_restore_s3_retry_max_backoff_ms` まで増加します。値は [0.0, 1.0] の範囲で指定する必要があります。 - -## backup_restore_s3_retry_max_backoff_ms {#backup_restore_s3_retry_max_backoff_ms} - - - - - -バックアップおよびリストア処理でのリトライ間隔の最大遅延時間(ミリ秒単位)。 - -## backup_slow_all_threads_after_retryable_s3_error {#backup_slow_all_threads_after_retryable_s3_error} - - - - - -`true` に設定すると、同じバックアップエンドポイントに対して S3 リクエストを実行しているすべてのスレッドが、どれか 1 つの S3 リクエストで「Slow Down」などの再試行可能な S3 エラーが発生した後に、まとめてスローダウンされます。 -`false` に設定すると、各スレッドは他のスレッドとは独立して S3 リクエストのバックオフを処理します。 - -## cache_warmer_threads {#cache_warmer_threads} - - - - - -ClickHouse Cloud でのみ有効です。[cache_populated_by_fetch](merge-tree-settings.md/#cache_populated_by_fetch) が有効な場合に、新しいデータパートをファイルキャッシュに先行的にダウンロードするバックグラウンドスレッド数を指定します。0 を指定すると無効になります。 - -## calculate_text_stack_trace {#calculate_text_stack_trace} - - - -クエリ実行中に例外が発生した場合に、テキスト形式のスタックトレースを取得します。これがデフォルト設定です。大量の誤ったクエリを実行するファジングテストでは、シンボルの解決処理が必要になるため、処理が遅くなる可能性があります。通常は、このオプションを無効にしないでください。 - -## cancel_http_readonly_queries_on_client_close {#cancel_http_readonly_queries_on_client_close} - - - -クライアントがレスポンスを待たずに接続を閉じたときに、HTTP 経由の読み取り専用クエリ(例:SELECT)をキャンセルします。 - -Cloud におけるデフォルト値: `0`。 - -## cast_ipv4_ipv6_default_on_conversion_error {#cast_ipv4_ipv6_default_on_conversion_error} - - - - - -CAST 演算子による IPv4 型および IPv6 型への変換、および toIPv4、toIPv6 関数は、変換エラーが発生した場合に例外をスローするのではなく、デフォルト値を返します。 - -## cast_keep_nullable - - - -[CAST](/sql-reference/functions/type-conversion-functions#cast) 演算において、`Nullable` データ型を保持するかどうかを制御します。 - -この設定が有効で、`CAST` 関数の引数の型が `Nullable` の場合、結果も `Nullable` 型に変換されます。設定が無効な場合、結果は常に指定された変換先のデータ型になります。 - -設定可能な値: - -* 0 — `CAST` の結果は、指定された変換先データ型と完全に一致します。 -* 1 — 引数の型が `Nullable` の場合、`CAST` の結果は `Nullable(DestinationDataType)` に変換されます。 - -**使用例** - -次のクエリでは、結果のデータ型は変換先のデータ型と完全に一致します。 - -```sql -SET cast_keep_nullable = 0; -SELECT CAST(toNullable(toInt32(0)) AS Int32) as x, toTypeName(x); -``` - -結果: - -```text -┌─x─┬─toTypeName(CAST(toNullable(toInt32(0)), 'Int32'))─┐ -│ 0 │ Int32 │ -└───┴───────────────────────────────────────────────────┘ -``` - -次のクエリでは、出力先のデータ型に `Nullable` 修飾子が付きます。 - -```sql -SET cast_keep_nullable = 1; -SELECT CAST(toNullable(toInt32(0)) AS Int32) as x, toTypeName(x); -``` - -結果: - -```text -┌─x─┬─toTypeName(CAST(toNullable(toInt32(0)), 'Int32'))─┐ -│ 0 │ Nullable(Int32) │ -└───┴───────────────────────────────────────────────────┘ -``` - -**関連項目** - -* [CAST](/sql-reference/functions/type-conversion-functions#cast) 関数 - - -## cast_string_to_date_time_mode {#cast_string_to_date_time_mode} - - - - - -String からのキャスト時に、日付と時刻のテキスト表現を解釈するパーサーを選択できます。 - -指定可能な値: - -- `'best_effort'` — 拡張的なパースを有効にします。 - - ClickHouse は、基本形式 `YYYY-MM-DD HH:MM:SS` と、すべての [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) 日付・時刻形式をパースできます。例: `'2018-06-08T01:02:03.000Z'`。 - -- `'best_effort_us'` — `best_effort` とほぼ同じです(違いについては [parseDateTimeBestEffortUS](../../sql-reference/functions/type-conversion-functions#parsedatetimebesteffortus) を参照)。 - -- `'basic'` — 基本パーサーを使用します。 - - ClickHouse は、基本形式 `YYYY-MM-DD HH:MM:SS` または `YYYY-MM-DD` のみをパースできます。例: `2019-08-20 10:18:56` または `2019-08-20`。 - -関連項目: - -- [DateTime データ型](../../sql-reference/data-types/datetime.md) -- [日付と時刻を扱う関数](../../sql-reference/functions/date-time-functions.md) - -## cast_string_to_dynamic_use_inference {#cast_string_to_dynamic_use_inference} - - - - - -String から Dynamic への変換時に型推論を行います - -## cast_string_to_variant_use_inference {#cast_string_to_variant_use_inference} - - - - - -String から Variant への変換時に型推論を行います。 - -## check_query_single_value_result {#check_query_single_value_result} - - - -`MergeTree` ファミリーエンジンに対する [CHECK TABLE](/sql-reference/statements/check-table) クエリ結果の詳細度を定義します。 - -設定可能な値: - -- 0 — クエリはテーブル内の各データパーツごとのチェック結果を表示します。 -- 1 — クエリはテーブル全体のチェック結果を表示します。 - -## check_referential_table_dependencies {#check_referential_table_dependencies} - - - -DDL クエリ(`DROP TABLE` や `RENAME` など)が参照テーブルの依存関係を壊さないことをチェックします - -## check_table_dependencies {#check_table_dependencies} - - - -DDL クエリ(`DROP TABLE` や `RENAME` など)が依存関係を破壊しないことを確認します。 - -## checksum_on_read {#checksum_on_read} - - - -読み込み時にチェックサムを検証します。これはデフォルトで有効になっており、本番環境では常に有効にしておく必要があります。この設定を無効にしても利点はありません。実験やベンチマーク用途でのみ使用してください。この設定は MergeTree ファミリーのテーブルにのみ適用されます。他のテーブルエンジンや、ネットワーク経由でデータを受信する場合には、チェックサムは常に検証されます。 - -## cloud_mode {#cloud_mode} - - - -クラウドモード - -## cloud_mode_database_engine {#cloud_mode_database_engine} - - - - - -Cloud で許可されるデータベースエンジン。1 の場合は DDL を Replicated データベースを使用するように書き換え、2 の場合は DDL を Shared データベースを使用するように書き換える。 - -## cloud_mode_engine {#cloud_mode_engine} - - - -Cloud で使用を許可されるエンジンファミリー。 - -- 0 - すべてのエンジンを許可する -- 1 - DDL を書き換えて *ReplicatedMergeTree を使用する -- 2 - DDL を書き換えて SharedMergeTree を使用する -- 3 - 明示的に指定された remote disk がある場合を除き、DDL を書き換えて SharedMergeTree を使用する - -公開部分を最小化するために UInt64 型を使用 - -## cluster_for_parallel_replicas {#cluster_for_parallel_replicas} - - - -現在のサーバーが存在するシャード用のクラスタ - -## cluster_function_process_archive_on_multiple_nodes {#cluster_function_process_archive_on_multiple_nodes} - - - - - -`true` に設定すると、クラスタ関数におけるアーカイブ処理のパフォーマンスが向上します。以前のバージョンでアーカイブを伴うクラスタ関数を使用している場合は、互換性を保ち、25.7 以降へのアップグレード時のエラーを回避するために `false` に設定してください。 - -## cluster_table_function_buckets_batch_size {#cluster_table_function_buckets_batch_size} - - - - - -`bucket` 単位での分割粒度を持つクラスタテーブル関数において、タスクの分散処理に使用されるバッチのおおよそのサイズ(バイト単位)を指定します。システムは、少なくともこの値に達するまでデータを蓄積します。実際のサイズは、データ境界に揃えるためにわずかに大きくなる場合があります。 - -## cluster_table_function_split_granularity {#cluster_table_function_split_granularity} - - - - - -CLUSTER TABLE FUNCTION を実行する際に、データがタスクにどのように分割されるかを制御します。 - -この設定は、クラスタ全体における作業分配の粒度を定義します: - -- `file` — 各タスクがファイル全体を処理します。 -- `bucket` — タスクがファイル内の内部データブロックごとに作成されます(例えば、Parquet の行グループ)。 - -より細かい粒度(`bucket` など)を選択すると、少数の巨大なファイルを扱う場合に並列性を高めることができます。 -例えば、1 つの Parquet ファイルに複数の行グループが含まれている場合、`bucket` 粒度を有効にすると、各グループを異なるワーカーが独立して処理できるようになります。 - -## collect_hash_table_stats_during_aggregation {#collect_hash_table_stats_during_aggregation} - - - -メモリ割り当てを最適化するために、ハッシュテーブルの統計情報を収集します - -## collect_hash_table_stats_during_joins {#collect_hash_table_stats_during_joins} - - - - - -メモリ割り当てを最適化するために、ハッシュテーブル統計の収集を有効にします。 - -## compatibility {#compatibility} - -`compatibility` 設定は、設定値として指定した過去バージョンの ClickHouse のデフォルト設定を ClickHouse に使用させます。 - -設定がデフォルト以外の値に変更されている場合は、その値が優先されます(`compatibility` 設定の影響を受けるのは、変更されていない設定のみです)。 - -この設定には、`22.3` や `22.8` のように ClickHouse のバージョン番号を文字列として指定します。空の値は、この設定が無効であることを意味します。 - -デフォルトでは無効です。 - -:::note -ClickHouse Cloud では、サービスレベルのデフォルトの `compatibility` 設定は ClickHouse Cloud サポートによって設定される必要があります。設定を希望する場合は、[ケースを作成](https://clickhouse.cloud/support)してください。 -ただし、ユーザー、ロール、プロファイル、クエリ、またはセッション単位では、`SET compatibility = '22.3'`(セッション内)や `SETTINGS compatibility = '22.3'`(クエリ内)のような、標準的な ClickHouse の設定機構を用いて `compatibility` 設定をオーバーライドできます。 -::: - -## compatibility_ignore_auto_increment_in_create_table {#compatibility_ignore_auto_increment_in_create_table} - - - -true の場合、カラム定義内の AUTO_INCREMENT キーワードを無視し、それ以外の場合はエラーを返します。これにより、MySQL からの移行が容易になります。 - -## compatibility_ignore_collation_in_create_table {#compatibility_ignore_collation_in_create_table} - - - -`CREATE TABLE` の照合順序設定を無視する互換性オプション - -## compile_aggregate_expressions {#compile_aggregate_expressions} - - - -集約関数をネイティブコードに JIT コンパイルするかどうかを有効または無効にします。有効にするとパフォーマンスが向上する場合があります。 - -設定可能な値: - -- 0 — 集約は JIT コンパイルなしで実行されます。 -- 1 — 集約は JIT コンパイルを使用して実行されます。 - -**関連項目** - -- [min_count_to_compile_aggregate_expression](#min_count_to_compile_aggregate_expression) - -## compile_expressions {#compile_expressions} - - - - - -一部のスカラー関数および演算子をネイティブコードにコンパイルします。 - -## compile_sort_description {#compile_sort_description} - - - -ソート記述子をネイティブコードにコンパイルします。 - -## connect_timeout {#connect_timeout} - - - -レプリカが存在しない場合の接続タイムアウト - -## connect_timeout_with_failover_ms {#connect_timeout_with_failover_ms} - - - - - -`shard` セクションと `replica` セクションがクラスタ定義で使用されている場合に、Distributed テーブルエンジンがリモートサーバーに接続するためのタイムアウト時間(ミリ秒単位)です。 -接続に失敗した場合は、異なるレプリカへの接続が複数回試行されます。 - -## connect_timeout_with_failover_secure_ms {#connect_timeout_with_failover_secure_ms} - - - - - -最初の正常なレプリカを選択する際の接続タイムアウト(セキュア接続時)。 - -## connection_pool_max_wait_ms {#connection_pool_max_wait_ms} - - - -接続プールが満杯のときに、接続確立を待機する時間(ミリ秒)。 - -取りうる値: - -- 正の整数。 -- 0 — 無制限のタイムアウト。 - -## connections_with_failover_max_tries {#connections_with_failover_max_tries} - - - -Distributed テーブルエンジンにおいて、各レプリカごとの接続試行回数の上限。 - -## convert_query_to_cnf - - - -`true` に設定すると、`SELECT` クエリは連言標準形(CNF: Conjunctive Normal Form)に変換されます。クエリを CNF に書き換えることで、より高速に実行される場合があります(詳しくは、この [GitHub issue](https://github.com/ClickHouse/ClickHouse/issues/11749) を参照してください)。 - -たとえば、デフォルトの動作では次の `SELECT` クエリは変換されません。 - -```sql -EXPLAIN SYNTAX -SELECT * -FROM -( - SELECT number AS x - FROM numbers(20) -) AS a -WHERE ((x >= 1) AND (x <= 5)) OR ((x >= 10) AND (x <= 15)) -SETTINGS convert_query_to_cnf = false; -``` - -結果は次のとおりです。 - -```response -┌─explain────────────────────────────────────────────────────────┐ -│ SELECT x │ -│ FROM │ -│ ( │ -│ SELECT number AS x │ -│ FROM numbers(20) │ -│ WHERE ((x >= 1) AND (x <= 5)) OR ((x >= 10) AND (x <= 15)) │ -│ ) AS a │ -│ WHERE ((x >= 1) AND (x <= 5)) OR ((x >= 10) AND (x <= 15)) │ -│ SETTINGS convert_query_to_cnf = 0 │ -└────────────────────────────────────────────────────────────────┘ -``` - -`convert_query_to_cnf` を `true` に設定して、何が変わるか確認してみましょう。 - -```sql -EXPLAIN SYNTAX -SELECT * -FROM -( - SELECT number AS x - FROM numbers(20) -) AS a -WHERE ((x >= 1) AND (x <= 5)) OR ((x >= 10) AND (x <= 15)) -SETTINGS convert_query_to_cnf = true; -``` - -`WHERE` 句が CNF に書き換えられている点に注目してください。ただし、結果セットは同一であり、ブール論理は変わっていません。 - -```response -┌─explain───────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ -│ SELECT x │ -│ FROM │ -│ ( │ -│ SELECT number AS x │ -│ FROM numbers(20) │ -│ WHERE ((x <= 15) OR (x <= 5)) AND ((x <= 15) OR (x >= 1)) AND ((x >= 10) OR (x <= 5)) AND ((x >= 10) OR (x >= 1)) │ -│ ) AS a │ -│ WHERE ((x >= 10) OR (x >= 1)) AND ((x >= 10) OR (x <= 5)) AND ((x <= 15) OR (x >= 1)) AND ((x <= 15) OR (x <= 5)) │ -│ SETTINGS convert_query_to_cnf = 1 │ -└───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ -``` - -指定可能な値: true, false - - -## correlated_subqueries_default_join_kind {#correlated_subqueries_default_join_kind} - - - - - -デコリレーション後のクエリプランにおける結合種別を制御します。デフォルト値は `right` であり、これはデコリレーション後のプランにおいて、サブクエリの入力が右側に位置する RIGHT JOIN が含まれることを意味します。 - -取り得る値: - -- `left` - デコリレーション処理は LEFT JOIN を生成し、入力テーブルは左側に配置されます。 -- `right` - デコリレーション処理は RIGHT JOIN を生成し、入力テーブルは右側に配置されます。 - -## correlated_subqueries_substitute_equivalent_expressions {#correlated_subqueries_substitute_equivalent_expressions} - - - - - -CROSS JOIN を作成する代わりに、フィルター式から等価な式を推論してそれらに置き換えます。 - -## count_distinct_implementation {#count_distinct_implementation} - - - -`COUNT(DISTINCT ...)` 構文を実行する際に使用する `uniq*` 関数を指定します。参照: [COUNT(DISTINCT ...)](/sql-reference/aggregate-functions/reference/count) - -指定可能な値: - -- [uniq](/sql-reference/aggregate-functions/reference/uniq) -- [uniqCombined](/sql-reference/aggregate-functions/reference/uniqcombined) -- [uniqCombined64](/sql-reference/aggregate-functions/reference/uniqcombined64) -- [uniqHLL12](/sql-reference/aggregate-functions/reference/uniqhll12) -- [uniqExact](/sql-reference/aggregate-functions/reference/uniqexact) - -## count_distinct_optimization {#count_distinct_optimization} - - - -`COUNT(DISTINCT ...)` を `GROUP BY` を用いたサブクエリに書き換えます - -## count_matches_stop_at_empty_match {#count_matches_stop_at_empty_match} - - - - - -`countMatches` 関数で、パターンが長さ 0(空文字列)にマッチした時点でカウントを停止します。 - -## create_if_not_exists {#create_if_not_exists} - - - - - -`CREATE` ステートメントに対して、デフォルトで `IF NOT EXISTS` を有効にします。この設定または `IF NOT EXISTS` のいずれかが指定されていて、指定された名前のテーブルがすでに存在する場合、例外は発生しません。 - -## create_index_ignore_unique {#create_index_ignore_unique} - - - -CREATE UNIQUE INDEX における UNIQUE キーワードを無視します。SQL 互換性テスト向けの設定です。 - -## create_replicated_merge_tree_fault_injection_probability {#create_replicated_merge_tree_fault_injection_probability} - - - -ZooKeeper でメタデータを作成した後のテーブル作成時に、障害注入が行われる確率 - -## create_table_empty_primary_key_by_default {#create_table_empty_primary_key_by_default} - - - - - -ORDER BY および PRIMARY KEY が指定されていない場合に、PRIMARY KEY が空の *MergeTree テーブルの作成を許可します - -## cross_join_min_bytes_to_compress {#cross_join_min_bytes_to_compress} - - - - - -CROSS JOIN で圧縮対象とするブロックの最小サイズ。値を 0 にすると、このしきい値は無効になります。行数またはバイト数のいずれかのしきい値に達した時点で、そのブロックが圧縮されます。 - -## cross_join_min_rows_to_compress {#cross_join_min_rows_to_compress} - - - - - -CROSS JOIN 時にブロックを圧縮する際の最小行数。0 を指定すると、このしきい値は無効化されます。行数またはバイト数のいずれか一方のしきい値に達した時点で、このブロックは圧縮されます。 - -## data_type_default_nullable {#data_type_default_nullable} - - - -カラム定義で明示的な修飾子 [NULL または NOT NULL](/sql-reference/statements/create/table#null-or-not-null-modifiers) が指定されていないデータ型を、[Nullable](/sql-reference/data-types/nullable) 型として扱うかどうかを制御します。 - -設定可能な値: - -- 1 — カラム定義内のデータ型は、デフォルトで `Nullable` に設定されます。 -- 0 — カラム定義内のデータ型は、デフォルトで `Nullable` ではない型に設定されます。 - -## database_atomic_wait_for_drop_and_detach_synchronously {#database_atomic_wait_for_drop_and_detach_synchronously} - - - -すべての `DROP` および `DETACH` クエリに修飾子 `SYNC` を追加します。 - -設定可能な値: - -- 0 — クエリは遅延して実行されます。 -- 1 — クエリは遅延なしで実行されます。 - -## database_replicated_allow_explicit_uuid {#database_replicated_allow_explicit_uuid} - - - - - -0 - Replicated データベース内のテーブルに対して UUID を明示的に指定することを許可しない。1 - 許可する。2 - 許可するが、指定された UUID は無視して代わりにランダムな UUID を生成する。 - -## database_replicated_allow_heavy_create {#database_replicated_allow_heavy_create} - - - - - -Replicated データベースエンジンで、長時間実行される DDL クエリ(CREATE AS SELECT や POPULATE)を許可します。DDL キューを長時間にわたってブロックする可能性がある点に注意してください。 - -## database_replicated_allow_only_replicated_engine {#database_replicated_allow_only_replicated_engine} - - - -Replicated エンジンのデータベース内では、Replicated テーブルのみ作成できるように制限します - -## database_replicated_allow_replicated_engine_arguments {#database_replicated_allow_replicated_engine_arguments} - - - - - -0 - Replicated データベース内の *MergeTree テーブルで ZooKeeper パスおよびレプリカ名を明示的に指定することを許可しない。1 - 許可する。2 - 許可するが、指定されたパスは無視してデフォルトのパスを使用する。3 - 許可し、警告をログに出力しない。 - -## database_replicated_always_detach_permanently {#database_replicated_always_detach_permanently} - - - -データベースエンジンが Replicated の場合、`DETACH TABLE` を `DETACH TABLE PERMANENTLY` として実行します。 - -## database_replicated_enforce_synchronous_settings {#database_replicated_enforce_synchronous_settings} - - - -一部のクエリに対して、同期的な完了待ちを強制します(`database_atomic_wait_for_drop_and_detach_synchronously`、`mutations_sync`、`alter_sync` も参照)。これらの設定を有効化することは推奨されません。 - -## database_replicated_initial_query_timeout_sec {#database_replicated_initial_query_timeout_sec} - - - -最初の DDL クエリが、Replicated データベースによる先行する DDL キューエントリの処理完了を待機する時間を秒単位で設定します。 - -指定可能な値: - -- 正の整数。 -- 0 — 無制限。 - -## database_shared_drop_table_delay_seconds {#database_shared_drop_table_delay_seconds} - - - - - -Shared データベースからドロップされたテーブルが実際に削除されるまでの遅延時間(秒単位)。この時間内であれば、`UNDROP TABLE` ステートメントを使用してテーブルを復元できます。 - -## decimal_check_overflow {#decimal_check_overflow} - - - -10 進数型の算術演算および比較演算におけるオーバーフローをチェックする - -## deduplicate_blocks_in_dependent_materialized_views {#deduplicate_blocks_in_dependent_materialized_views} - - - -Replicated\* テーブルからデータを受け取るマテリアライズドビューに対する重複排除チェックを有効または無効にします。 - -設定可能な値: - -0 — 無効。 - 1 — 有効。 - -有効にすると、ClickHouse は Replicated\* テーブルに依存するマテリアライズドビュー内のブロックの重複排除処理を行います。 -この設定は、障害により挿入操作がリトライされている場合に、マテリアライズドビューに重複データが含まれないようにするのに役立ちます。 - -**関連項目** - -- [IN 演算子における NULL の処理](/guides/developer/deduplicating-inserts-on-retries#insert-deduplication-with-materialized-views) - -## default_materialized_view_sql_security {#default_materialized_view_sql_security} - - - - - -マテリアライズドビューを作成する際の SQL SECURITY オプションのデフォルト値を設定します。[SQL セキュリティの詳細](../../sql-reference/statements/create/view.md/#sql_security)。 - -デフォルト値は `DEFINER` です。 - -## default_max_bytes_in_join {#default_max_bytes_in_join} - - - -制限が必要だが `max_bytes_in_join` が設定されていない場合に適用される、結合の右側テーブルの最大サイズ。 - -## default_normal_view_sql_security {#default_normal_view_sql_security} - - - - - -通常ビューを作成する際のデフォルトの `SQL SECURITY` オプションを設定します。[SQL SECURITY の詳細](../../sql-reference/statements/create/view.md/#sql_security)。 - -デフォルト値は `INVOKER` です。 - -## default_table_engine - - - - - -`CREATE` 文で `ENGINE` が設定されていない場合に使用されるデフォルトのテーブルエンジン。 - -可能な値: - -* 任意の有効なテーブルエンジン名を表す文字列 - -Cloud でのデフォルト値: `SharedMergeTree`. - -**例** - -クエリ: - -```sql -SET default_table_engine = 'Log'; - -SELECT name, value, changed FROM system.settings WHERE name = 'default_table_engine'; -``` - -結果: - -```response -┌─name─────────────────┬─value─┬─changed─┐ -│ default_table_engine │ Log │ 1 │ -└──────────────────────┴───────┴─────────┘ -``` - -この例では、`Engine` を指定していない新しく作成されるテーブルはすべて、`Log` テーブルエンジンを使用します。 - -クエリ: - -```sql -CREATE TABLE my_table ( - x UInt32, - y UInt32 -); - -SHOW CREATE TABLE my_table; -``` - -結果: - -```response -┌─statement────────────────────────────────────────────────────────────────┐ -│ CREATE TABLE default.my_table -( - `x` UInt32, - `y` UInt32 -) -ENGINE = Log -└──────────────────────────────────────────────────────────────────────────┘ -``` - - -## default_temporary_table_engine - - - -一時テーブルに対する設定であり、[default_table_engine](#default_table_engine) と同様です。 - -この例では、`Engine` を指定していない新しい一時テーブルはすべて、`Log` テーブルエンジンを使用します。 - -クエリ: - -```sql -SET default_temporary_table_engine = 'Log'; - -CREATE TEMPORARY TABLE my_table ( - x UInt32, - y UInt32 -); - -SHOW CREATE TEMPORARY TABLE my_table; -``` - -結果: - -```response -┌─statement────────────────────────────────────────────────────────────────┐ -│ CREATE TEMPORARY TABLE default.my_table -( - `x` UInt32, - `y` UInt32 -) -ENGINE = Log -└──────────────────────────────────────────────────────────────────────────┘ -``` - - -## default_view_definer {#default_view_definer} - - - - - -ビュー作成時のデフォルトの `DEFINER` オプションを設定できます。[SQL セキュリティの詳細](../../sql-reference/statements/create/view.md/#sql_security)。 - -デフォルト値は `CURRENT_USER` です。 - -## delta_lake_enable_engine_predicate {#delta_lake_enable_engine_predicate} - - - - - -delta-kernel の内部データのプルーニングを有効にします。 - -## delta_lake_enable_expression_visitor_logging {#delta_lake_enable_expression_visitor_logging} - - - - - -Delta Lake の expression visitor に対するテストレベルのログ出力を有効にします。これらのログは、テスト用ログとしても冗長になりすぎる可能性があります。 - -## delta_lake_insert_max_bytes_in_data_file {#delta_lake_insert_max_bytes_in_data_file} - - - - - -Delta Lake で挿入される単一のデータファイルのサイズ上限(バイト数)を定義します。 - -## delta_lake_insert_max_rows_in_data_file {#delta_lake_insert_max_rows_in_data_file} - - - - - -Delta Lake において、1 回の挿入で作成される 1 つのデータファイルに含める行数の上限を指定します。 - -## delta_lake_log_metadata {#delta_lake_log_metadata} - - - - - -Delta Lake のメタデータファイルを system テーブルにログとして記録できるようにします。 - -## delta_lake_snapshot_version {#delta_lake_snapshot_version} - - - - - -読み込む Delta Lake スナップショットのバージョン。値 -1 は最新バージョンを読み込むことを意味します(0 も有効なスナップショットバージョンです)。 - -## delta_lake_throw_on_engine_predicate_error {#delta_lake_throw_on_engine_predicate_error} - - - - - -delta-kernel でスキャン述語を解析中にエラーが発生した場合に、例外をスローするかどうかを指定します。 - -## describe_compact_output {#describe_compact_output} - - - -true の場合、DESCRIBE クエリの結果には列名と型のみが含まれます - -## describe_include_subcolumns {#describe_include_subcolumns} - - - -[DESCRIBE](../../sql-reference/statements/describe-table.md) クエリでサブカラムを出力するかどうかを制御します。たとえば、[Tuple](../../sql-reference/data-types/tuple.md) のメンバーや、[Map](/sql-reference/data-types/map#reading-subcolumns-of-map)、[Nullable](../../sql-reference/data-types/nullable.md/#finding-null)、[Array](../../sql-reference/data-types/array.md/#array-size) データ型のサブカラムなどです。 - -設定可能な値: - -- 0 — サブカラムは `DESCRIBE` クエリに含まれません。 -- 1 — サブカラムは `DESCRIBE` クエリに含まれます。 - -**Example** - -[DESCRIBE](../../sql-reference/statements/describe-table.md) ステートメントの例を参照してください。 - -## describe_include_virtual_columns {#describe_include_virtual_columns} - - - -true に設定すると、テーブルの仮想カラムも DESCRIBE クエリの結果に含まれます - -## dialect {#dialect} - - - -クエリの解析に使用する dialect - -## dictionary_validate_primary_key_type {#dictionary_validate_primary_key_type} - - - - - -辞書の主キー型を検証します。デフォルトでは、simple レイアウトでは id の型が暗黙的に UInt64 に変換されます。 - -## distinct_overflow_mode {#distinct_overflow_mode} - - - -データ量がいずれかの制限値を超えたときの動作を設定します。 - -指定可能な値: - -- `throw`: 例外をスローする(デフォルト)。 -- `break`: クエリの実行を停止し、入力元データが尽きたかのように部分的な結果を返します。 - -## distributed_aggregation_memory_efficient {#distributed_aggregation_memory_efficient} - - - -分散アグリゲーションのメモリ効率化モードを有効にするかどうかを指定します。 - -## distributed_background_insert_batch {#distributed_background_insert_batch} - -**別名**: `distributed_directory_monitor_batch_inserts` - - - -挿入されたデータをバッチで送信するかどうかを制御します。 - -バッチ送信が有効な場合、[Distributed](../../engines/table-engines/special/distributed.md) テーブルエンジンは、挿入データの複数のファイルを個別に送信するのではなく、1 回の操作でまとめて送信しようとします。バッチ送信により、サーバーおよびネットワークリソースをより有効に活用できるため、クラスターのパフォーマンスが向上します。 - -設定可能な値: - -- 1 — 有効。 -- 0 — 無効。 - -## distributed_background_insert_max_sleep_time_ms {#distributed_background_insert_max_sleep_time_ms} - -**別名**: `distributed_directory_monitor_max_sleep_time_ms` - - - -[Distributed](../../engines/table-engines/special/distributed.md) テーブルエンジンがデータを送信するための最大間隔です。設定 [`distributed_background_insert_sleep_time_ms`](#distributed_background_insert_sleep_time_ms) で指定された間隔の指数的な増加を制限します。 - -設定可能な値: - -- ミリ秒単位の正の整数値。 - -## distributed_background_insert_sleep_time_ms {#distributed_background_insert_sleep_time_ms} - -**別名**: `distributed_directory_monitor_sleep_time_ms` - - - -[Distributed](../../engines/table-engines/special/distributed.md) テーブルエンジンがデータを送信する際の基準となる間隔です。エラーが発生した場合、実際の間隔は指数関数的に増加します。 - -設定可能な値: - -- ミリ秒単位の正の整数値。 - -## distributed_background_insert_split_batch_on_failure {#distributed_background_insert_split_batch_on_failure} - -**別名**: `distributed_directory_monitor_split_batch_on_failure` - - - -失敗時にバッチを分割するかどうかを有効/無効にします。 - -特定のバッチをリモートシャードへ送信する際、後段の複雑なパイプライン(例: `GROUP BY` を含む `MATERIALIZED VIEW`)が原因で、`Memory limit exceeded` などのエラーにより失敗することがあります。この場合、リトライしても状況は改善せず(そのテーブルの分散送信が詰まったままになります)が、そのバッチ内のファイルを 1 件ずつ送信すれば INSERT が成功する場合があります。 - -そのため、この設定を `1` にすると、そのようなバッチに対してバッチ処理を無効化します(すなわち、失敗したバッチに対して一時的に `distributed_background_insert_batch` を無効化します)。 - -設定可能な値: - -- 1 — 有効。 -- 0 — 無効。 - -:::note -この設定は、壊れたバッチにも影響します(これはサーバー(マシン)の異常終了と、[Distributed](../../engines/table-engines/special/distributed.md) テーブルエンジンで `fsync_after_insert` / `fsync_directories` を行っていないことが原因で発生することがあります)。 -::: - -:::note -自動バッチ分割に依存すべきではありません。性能を損なう可能性があります。 -::: - -## distributed_background_insert_timeout {#distributed_background_insert_timeout} - -**エイリアス**: `insert_distributed_timeout` - - - -`Distributed` テーブルへの挿入クエリのタイムアウトです。`insert_distributed_sync` が有効な場合にのみ使用されます。値が 0 の場合はタイムアウトなしを意味します。 - -## distributed_cache_alignment {#distributed_cache_alignment} - - - - - - - -ClickHouse Cloud でのみ有効です。テスト目的の設定であり、変更しないでください。 - -## distributed_cache_bypass_connection_pool {#distributed_cache_bypass_connection_pool} - - - - - - - -ClickHouse Cloud でのみ有効です。distributed cache の接続プールをバイパスできるようにします。 - -## distributed_cache_connect_backoff_max_ms {#distributed_cache_connect_backoff_max_ms} - - - - - - - -ClickHouse Cloud でのみ有効です。分散キャッシュ接続の確立時に使用されるバックオフ時間の最大値(ミリ秒)です。 - -## distributed_cache_connect_backoff_min_ms {#distributed_cache_connect_backoff_min_ms} - - - - - - - -ClickHouse Cloud でのみ有効です。分散キャッシュ接続を確立する際のバックオフ時間の最小値(ミリ秒単位)を指定します。 - -## distributed_cache_connect_max_tries {#distributed_cache_connect_max_tries} - - - - - - - -ClickHouse Cloud でのみ有効です。分散キャッシュへの接続が失敗した場合に行う再試行の回数です。 - -## distributed_cache_connect_timeout_ms {#distributed_cache_connect_timeout_ms} - - - - - - - -ClickHouse Cloud でのみ有効です。分散キャッシュサーバーへの接続時の接続タイムアウトです。 - -## distributed_cache_credentials_refresh_period_seconds {#distributed_cache_credentials_refresh_period_seconds} - - - - - - - -ClickHouse Cloud でのみ有効です。認証情報の更新間隔です。 - -## distributed_cache_data_packet_ack_window {#distributed_cache_data_packet_ack_window} - - - - - - - -ClickHouse Cloud でのみ有効です。単一の分散キャッシュ読み取りリクエストにおける DataPacket シーケンスに対して ACK を送信するためのウィンドウを指定します。 - -## distributed_cache_discard_connection_if_unread_data {#distributed_cache_discard_connection_if_unread_data} - - - - - - - -ClickHouse Cloud でのみ有効です。未読み取りのデータがある場合は接続を破棄します。 - -## distributed_cache_fetch_metrics_only_from_current_az {#distributed_cache_fetch_metrics_only_from_current_az} - - - - - - - -ClickHouse Cloud でのみ有効です。system.distributed_cache_metrics および system.distributed_cache_events において、現在のアベイラビリティゾーンからのみメトリクスを取得します。 - -## distributed_cache_log_mode {#distributed_cache_log_mode} - - - - - - - -ClickHouse Cloud でのみ有効です。system.distributed_cache_log への書き込みモードを指定します。 - -## distributed_cache_max_unacked_inflight_packets {#distributed_cache_max_unacked_inflight_packets} - - - - - - - -ClickHouse Cloud でのみ有効です。単一の distributed cache 読み取りリクエスト内における、未 ACK の in-flight パケット数の上限を指定します。 - -## distributed_cache_min_bytes_for_seek {#distributed_cache_min_bytes_for_seek} - - - - - - - -ClickHouse Cloud のみで効果があります。分散キャッシュでシークを実行する際の最小バイト数を指定します。 - -## distributed_cache_pool_behaviour_on_limit {#distributed_cache_pool_behaviour_on_limit} - - - - - - - -ClickHouse Cloud でのみ効果があります。プールの上限に達した際に、分散キャッシュ接続がどのように動作するかを指定します。 - -## distributed_cache_prefer_bigger_buffer_size {#distributed_cache_prefer_bigger_buffer_size} - - - - - - - -ClickHouse Cloud でのみ有効です。filesystem_cache_prefer_bigger_buffer_size と同様ですが、分散キャッシュ用の設定です。 - -## distributed_cache_read_only_from_current_az {#distributed_cache_read_only_from_current_az} - - - - - - - -ClickHouse Cloud でのみ有効です。現在のアベイラビリティゾーン内のキャッシュサーバーからの読み取りだけを許可します。無効にすると、すべてのアベイラビリティゾーン内のすべてのキャッシュサーバーから読み取ります。 - -## distributed_cache_read_request_max_tries {#distributed_cache_read_request_max_tries} - - - - - - - -ClickHouse Cloud でのみ有効です。分散キャッシュリクエストが失敗した場合に再試行する回数を指定します。 - -## distributed_cache_receive_response_wait_milliseconds {#distributed_cache_receive_response_wait_milliseconds} - - - - - - - -ClickHouse Cloud でのみ有効です。分散キャッシュからリクエストに対するデータを受信するまでの待機時間をミリ秒単位で指定します。 - -## distributed_cache_receive_timeout_milliseconds {#distributed_cache_receive_timeout_milliseconds} - - - - - - - -ClickHouse Cloud でのみ有効です。分散キャッシュから何らかの応答を受信するまでの待機時間をミリ秒で指定します。 - -## distributed_cache_receive_timeout_ms {#distributed_cache_receive_timeout_ms} - - - - - - - -ClickHouse Cloud でのみ有効です。分散キャッシュサーバーからデータを受信する際のタイムアウトをミリ秒単位で指定します。この時間内に 1 バイトもデータを受信しなかった場合、例外がスローされます。 - -## distributed_cache_send_timeout_ms {#distributed_cache_send_timeout_ms} - - - - - - - -ClickHouse Cloud でのみ効果があります。分散キャッシュサーバーへのデータ送信タイムアウトをミリ秒単位で指定します。クライアントがデータを送信する必要があるにもかかわらず、この時間内に 1 バイトも送信できなかった場合は、例外がスローされます。 - -## distributed_cache_tcp_keep_alive_timeout_ms {#distributed_cache_tcp_keep_alive_timeout_ms} - - - - - - - -ClickHouse Cloud でのみ有効です。分散キャッシュサーバーへの接続がアイドル状態になってから、TCP が keepalive プローブの送信を開始するまでの時間をミリ秒単位で指定します。 - -## distributed_cache_throw_on_error {#distributed_cache_throw_on_error} - - - - - - - -ClickHouse Cloud でのみ有効です。分散キャッシュとの通信中に発生した例外、または分散キャッシュから受信した例外を再スローします。それ以外の場合は、エラー時に分散キャッシュをスキップするフォールバック動作になります。 - -## distributed_cache_wait_connection_from_pool_milliseconds {#distributed_cache_wait_connection_from_pool_milliseconds} - - - - - - - -ClickHouse Cloud でのみ有効です。`distributed_cache_pool_behaviour_on_limit` が `wait` の場合に、接続プールから接続を取得するまでの待機時間(ミリ秒)を指定します。 - -## distributed_connections_pool_size {#distributed_connections_pool_size} - - - -1 つの Distributed テーブルに対するすべてのクエリを分散処理する際に使用される、リモートサーバーへの同時接続数の上限です。クラスター内のサーバー数以上の値を設定することを推奨します。 - -## distributed_ddl_entry_format_version {#distributed_ddl_entry_format_version} - - - -分散 DDL(`ON CLUSTER`)クエリの互換性バージョン - -## distributed_ddl_output_mode {#distributed_ddl_output_mode} - - - -分散 DDL クエリの結果形式を設定します。 - -設定可能な値: - -- `throw` — クエリが完了したすべてのホストについて、クエリ実行ステータスを含む結果セットを返します。クエリが一部のホストで失敗した場合は、最初の例外を再スローします。クエリが一部のホストでまだ完了しておらず、[distributed_ddl_task_timeout](#distributed_ddl_task_timeout) を超過した場合は、`TIMEOUT_EXCEEDED` 例外をスローします。 -- `none` — `throw` と同様ですが、分散 DDL クエリは結果セットを返しません。 -- `null_status_on_timeout` — 対応するホストでクエリが完了していない場合に `TIMEOUT_EXCEEDED` をスローする代わりに、結果セット内の一部の行の実行ステータスとして `NULL` を返します。 -- `never_throw` — 一部のホストでクエリが失敗しても `TIMEOUT_EXCEEDED` をスローせず、例外も再スローしません。 -- `none_only_active` - `none` と同様ですが、`Replicated` データベースの非アクティブなレプリカを待ちません。注意: このモードでは、一部のレプリカでクエリが実行されておらず、バックグラウンドで実行されることになる状況を把握することはできません。 -- `null_status_on_timeout_only_active` — `null_status_on_timeout` と同様ですが、`Replicated` データベースの非アクティブなレプリカを待ちません。 -- `throw_only_active` — `throw` と同様ですが、`Replicated` データベースの非アクティブなレプリカを待ちません。 - -Cloud におけるデフォルト値: `throw`。 - -## distributed_ddl_task_timeout {#distributed_ddl_task_timeout} - - - -クラスタ内のすべてのホストからの DDL クエリ応答に対するタイムアウト時間を設定します。DDL リクエストがすべてのホストで実行されていない場合、応答にはタイムアウトエラーが含まれ、リクエストは非同期モードで実行されます。負の値は無限を意味します。 - -取りうる値: - -- 正の整数。 -- 0 — 非同期モード。 -- 負の整数 — 無限のタイムアウト。 - -## distributed_foreground_insert {#distributed_foreground_insert} - -**別名**: `insert_distributed_sync` - - - -[Distributed](/engines/table-engines/special/distributed) テーブルへの同期的なデータ挿入を有効または無効にします。 - -デフォルトでは、`Distributed` テーブルにデータを挿入すると、ClickHouse サーバーはバックグラウンドモードでクラスターノードにデータを送信します。`distributed_foreground_insert=1` の場合、データは同期的に処理され、すべてのデータがすべてのシャード上に保存された後にのみ `INSERT` 操作が成功します(`internal_replication` が true の場合は、各シャードについて少なくとも 1 つのレプリカに保存されている必要があります)。 - -設定可能な値: - -- `0` — データはバックグラウンドモードで挿入されます。 -- `1` — データは同期モードで挿入されます。 - -Cloud でのデフォルト値: `0`。 - -**関連項目** - -- [Distributed テーブルエンジン](/engines/table-engines/special/distributed) -- [Distributed テーブルの管理](/sql-reference/statements/system#managing-distributed-tables) - -## distributed_group_by_no_merge - - - -分散クエリ処理において、異なるサーバーからの集約状態をマージしません。シャードごとに異なるキーが存在することが明らかな場合に使用できます。 - -可能な値: - -* `0` — 無効(最終的なクエリ処理はイニシエーターノードで実行されます)。 -* `1` - 分散クエリ処理において、異なるサーバーからの集約状態をマージしません(クエリはシャード側で完全に処理され、イニシエーターノードはデータを中継するだけです)。シャードごとに異なるキーが存在することが明らかな場合に使用できます。 -* `2` - `1` と同様ですが、イニシエーターノード側で `ORDER BY` および `LIMIT` を適用します(`distributed_group_by_no_merge=1` の場合のように、クエリがリモートノード上だけで完全に処理される場合には不可能です)。`ORDER BY` および/または `LIMIT` を含むクエリで使用できます。 - -**Example** - -```sql -SELECT * -FROM remote('127.0.0.{2,3}', system.one) -GROUP BY dummy -LIMIT 1 -SETTINGS distributed_group_by_no_merge = 1 -FORMAT PrettyCompactMonoBlock - -┌─dummy─┐ -│ 0 │ -│ 0 │ -└───────┘ -``` - -```sql -SELECT * -FROM remote('127.0.0.{2,3}', system.one) -GROUP BY dummy -LIMIT 1 -SETTINGS distributed_group_by_no_merge = 2 -FORMAT PrettyCompactMonoBlock - -┌─dummy─┐ -│ 0 │ -└───────┘ -``` - - -## distributed_insert_skip_read_only_replicas {#distributed_insert_skip_read_only_replicas} - - - - - -Distributed テーブルへの INSERT クエリで読み取り専用レプリカをスキップできるようにします。 - -設定可能な値: - -- 0 — INSERT は通常どおり行われ、読み取り専用レプリカに送信された場合は失敗します -- 1 — クエリの発行元ノードは、データをシャードに送信する前に読み取り専用レプリカをスキップします。 - -## distributed_plan_default_reader_bucket_count {#distributed_plan_default_reader_bucket_count} - - - - - - - -分散クエリで並列読み取りを行うタスク数のデフォルト値です。タスクはレプリカ間で分散されます。 - -## distributed_plan_default_shuffle_join_bucket_count {#distributed_plan_default_shuffle_join_bucket_count} - - - - - - - -分散シャッフルハッシュ結合におけるバケット数のデフォルト値。 - -## distributed_plan_execute_locally {#distributed_plan_execute_locally} - - - - - - - -分散クエリプラン内のすべてのタスクをローカルで実行します。テストやデバッグに有用です。 - -## distributed_plan_force_exchange_kind {#distributed_plan_force_exchange_kind} - - - - - -分散クエリステージ間で、指定した種類の Exchange オペレーターを使用するよう強制します。 - -可能な値: - -- '' - いずれの種類の Exchange オペレーターも強制せず、オプティマイザに選択を任せる - - 'Persisted' - オブジェクトストレージ内の一時ファイルを使用する - - 'Streaming' - Exchange のデータをネットワーク経由でストリーミングする - -## distributed_plan_force_shuffle_aggregation {#distributed_plan_force_shuffle_aggregation} - - - - - - - -分散クエリプランにおいて、PartialAggregation + Merge の代わりに Shuffle 集約戦略を使用します。 - -## distributed_plan_max_rows_to_broadcast {#distributed_plan_max_rows_to_broadcast} - - - - - - - -分散クエリプランにおいて、シャッフル結合ではなくブロードキャスト結合を使用するかどうかを判断する際の最大行数。 - -## distributed_plan_optimize_exchanges {#distributed_plan_optimize_exchanges} - - - - - -分散クエリプラン内の不要な Exchange を削除します。デバッグ用途では無効にしてください。 - -## distributed_product_mode {#distributed_product_mode} - - - -[分散サブクエリ](../../sql-reference/operators/in.md)の動作を変更します。 - -クエリに分散テーブルの積(product)が含まれている場合、つまり分散テーブルに対するクエリの中に、その分散テーブルに対する非 `GLOBAL` なサブクエリが含まれている場合に、ClickHouse はこの設定を適用します。 - -制約: - -- `IN` および `JOIN` のサブクエリに対してのみ適用されます。 -- `FROM` 句で、複数シャードを含む分散テーブルを使用している場合にのみ適用されます。 -- サブクエリの対象が、複数シャードを含む分散テーブルである場合にのみ適用されます。 -- テーブル値関数である [remote](../../sql-reference/table-functions/remote.md) 関数には使用されません。 - -設定値: - -- `deny` — デフォルト値。この種のサブクエリの使用を禁止します(`Double-distributed in/JOIN subqueries is denied` という例外を返します)。 -- `local` — サブクエリ内のデータベースおよびテーブルを、宛先サーバー(シャード)のローカルなものに置き換え、通常の `IN`/`JOIN` のままにします。 -- `global` — `IN`/`JOIN` クエリを `GLOBAL IN`/`GLOBAL JOIN` に置き換えます。 -- `allow` — この種のサブクエリの使用を許可します。 - -## distributed_push_down_limit {#distributed_push_down_limit} - - - -各シャードごとに個別に [LIMIT](#limit) を適用するかどうかを制御します。 - -これにより、次のことを回避できます: - -- 余分な行をネットワーク経由で送信すること -- イニシエーター側で、LIMIT を超えた行を処理すること - -バージョン 21.9 以降では、`distributed_push_down_limit` がクエリ実行を変更するのは、少なくとも次の条件のいずれかが満たされる場合に限られるため、不正確な結果が返されることはありません。 - -- [distributed_group_by_no_merge](#distributed_group_by_no_merge) > 0。 -- クエリに `GROUP BY` / `DISTINCT` / `LIMIT BY` **がなく**、`ORDER BY` / `LIMIT` がある。 -- クエリに `GROUP BY` / `DISTINCT` / `LIMIT BY` と `ORDER BY` / `LIMIT` **があり**、かつ: - - [optimize_skip_unused_shards](#optimize_skip_unused_shards) が有効。 - - [optimize_distributed_group_by_sharding_key](#optimize_distributed_group_by_sharding_key) が有効。 - -取りうる値: - -- 0 — 無効。 -- 1 — 有効。 - -関連項目: - -- [distributed_group_by_no_merge](#distributed_group_by_no_merge) -- [optimize_skip_unused_shards](#optimize_skip_unused_shards) -- [optimize_distributed_group_by_sharding_key](#optimize_distributed_group_by_sharding_key) - -## distributed_replica_error_cap {#distributed_replica_error_cap} - - - -- 種別: 符号なし整数 -- デフォルト値: 1000 - -各レプリカのエラー数はこの値で上限が設けられ、単一のレプリカが過度に多くのエラーを蓄積するのを防ぎます。 - -関連項目: - -- [load_balancing](#load_balancing-round_robin) -- [テーブルエンジン Distributed](../../engines/table-engines/special/distributed.md) -- [distributed_replica_error_half_life](#distributed_replica_error_half_life) -- [distributed_replica_max_ignored_errors](#distributed_replica_max_ignored_errors) - -## distributed_replica_error_half_life {#distributed_replica_error_half_life} - - - -- 種類: 秒 -- デフォルト値: 60 秒 - -分散テーブルにおけるエラー数がどの程度の速さでゼロにリセットされるかを制御します。あるレプリカがしばらくの間利用不能となり、エラーを 5 回蓄積し、`distributed_replica_error_half_life` が 1 秒に設定されている場合、そのレプリカは最後のエラーから 3 秒後に正常と見なされます。 - -関連項目: - -- [load_balancing](#load_balancing-round_robin) -- [Table engine Distributed](../../engines/table-engines/special/distributed.md) -- [distributed_replica_error_cap](#distributed_replica_error_cap) -- [distributed_replica_max_ignored_errors](#distributed_replica_max_ignored_errors) - -## distributed_replica_max_ignored_errors {#distributed_replica_max_ignored_errors} - - - -- 型: 符号なし整数 -- デフォルト値: 0 - -レプリカを選択する際に(`load_balancing` アルゴリズムに従って)、無視されるエラーの件数。 - -関連項目: - -- [load_balancing](#load_balancing-round_robin) -- [テーブルエンジン Distributed](../../engines/table-engines/special/distributed.md) -- [distributed_replica_error_cap](#distributed_replica_error_cap) -- [distributed_replica_error_half_life](#distributed_replica_error_half_life) - -## do_not_merge_across_partitions_select_final {#do_not_merge_across_partitions_select_final} - - - -`FINAL` 付きの `SELECT` クエリで、1 つのパーティション内のパーツのみをマージする - -## empty_result_for_aggregation_by_constant_keys_on_empty_set {#empty_result_for_aggregation_by_constant_keys_on_empty_set} - - - -空集合を定数キーで集約する場合は、空の結果を返します。 - -## empty_result_for_aggregation_by_empty_set {#empty_result_for_aggregation_by_empty_set} - - - -空の集合に対してキーを指定しない集計を実行した場合に、空の結果を返します。 - -## enable_adaptive_memory_spill_scheduler {#enable_adaptive_memory_spill_scheduler} - - - - - - - -プロセッサをトリガーして、状況に応じてデータを外部ストレージにスピルします。現在は grace join がサポートされています。 - -## enable_add_distinct_to_in_subqueries {#enable_add_distinct_to_in_subqueries} - - - - - -`IN` サブクエリに対して `DISTINCT` を有効にします。これはトレードオフとなる設定です。有効化すると、分散 IN サブクエリで転送される一時テーブルのサイズを大幅に削減し、一意な値だけが送信されるようにすることで、シャード間のデータ転送を大幅に高速化できます。 -ただし、この設定を有効にすると、各ノードでのマージ処理が追加で発生します。重複排除(DISTINCT)を実行する必要があるためです。ネットワーク転送がボトルネックとなっており、追加のマージコストが許容できる場合に、この設定を使用してください。 - -## enable_blob_storage_log {#enable_blob_storage_log} - - - - - -BLOB ストレージの操作情報を system.blob_storage_log テーブルに書き込む - -## enable_deflate_qpl_codec {#enable_deflate_qpl_codec} - - - -有効にすると、DEFLATE_QPL コーデックを列の圧縮に使用できます。 - -## enable_early_constant_folding {#enable_early_constant_folding} - - - -関数やサブクエリの結果を評価し、定数と判断できる部分がある場合にクエリを書き換える最適化を有効にします - -## enable_extended_results_for_datetime_functions {#enable_extended_results_for_datetime_functions} - - - -`Date` 型と比較して値域が拡張された `Date32` 型、または `DateTime` 型と比較して値域が拡張された `DateTime64` 型の結果を返すかどうかを制御します。 - -指定可能な値: - -- `0` — すべての種類の引数に対して、関数は `Date` または `DateTime` を返します。 -- `1` — `Date32` または `DateTime64` の引数に対しては、関数は `Date32` または `DateTime64` を返し、それ以外の場合は `Date` または `DateTime` を返します。 - -下表は、さまざまな日時関数に対するこの設定の動作を示しています。 - -| 関数 | `enable_extended_results_for_datetime_functions = 0` | `enable_extended_results_for_datetime_functions = 1` | -| ------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | -| `toStartOfYear` | `Date` または `DateTime` 型を返す | `Date`/`DateTime` を入力とした場合は `Date`/`DateTime` を返す
`Date32`/`DateTime64` を入力とした場合は `Date32`/`DateTime64` を返す | -| `toStartOfISOYear` | `Date` または `DateTime` を返します。 | `Date`/`DateTime` 型の入力に対しては `Date`/`DateTime` 型を返します
`Date32`/`DateTime64` 型の入力に対しては `Date32`/`DateTime64` 型を返します | -| `toStartOfQuarter` | `Date` または `DateTime` を返します | `Date`/`DateTime` 型の入力に対しては `Date`/`DateTime` 型を返す
`Date32`/`DateTime64` 型の入力に対しては `Date32`/`DateTime64` 型を返す | -| `toStartOfMonth` | `Date` または `DateTime` を返します。 | `Date`/`DateTime` を入力とした場合は `Date`/`DateTime` を返す
`Date32`/`DateTime64` を入力とした場合は `Date32`/`DateTime64` を返す | -| `toStartOfWeek` | `Date` または `DateTime` 型を返す | `Date`/`DateTime` 型の入力に対しては `Date`/`DateTime` 型を返します
`Date32`/`DateTime64` 型の入力に対しては `Date32`/`DateTime64` 型を返します | -| `toLastDayOfWeek` | `Date` または `DateTime` を返します。 | `Date`/`DateTime` を入力とした場合は `Date`/`DateTime` を返す
`Date32`/`DateTime64` を入力とした場合は `Date32`/`DateTime64` を返す | -| `toLastDayOfMonth` | `Date` または `DateTime` 型を返す | `Date`/`DateTime` 型の入力に対して `Date`/`DateTime` を返します
`Date32`/`DateTime64` 型の入力に対して `Date32`/`DateTime64` を返します | -| `toMonday` | `Date` または `DateTime` を返します | `Date`/`DateTime` 型の入力に対して `Date`/`DateTime` を返します
`Date32`/`DateTime64` 型の入力に対して `Date32`/`DateTime64` を返します | -| `toStartOfDay` | 戻り値は `DateTime` 型です
*注意: 1970~2149年の範囲外の値では誤った結果が返されます* | `Date`/`DateTime` の入力に対して `DateTime` を返します
`Date32`/`DateTime64` の入力に対して `DateTime64` を返します | -| `toStartOfHour` | `DateTime` を返します
*注: 1970~2149 年の範囲外の値では誤った結果が返されます* | `Date`/`DateTime` 型の入力に対しては `DateTime` 型を返します
`Date32`/`DateTime64` 型の入力に対しては `DateTime64` 型を返します | -| `toStartOfFifteenMinutes` | `DateTime` を返します
*注意: 1970〜2149年の範囲外の値では正しくない結果が返されます* | `Date`/`DateTime` 型の入力に対しては `DateTime` を返す
`Date32`/`DateTime64` 型の入力に対しては `DateTime64` を返す | -| `toStartOfTenMinutes` | `DateTime` を返します
*注: 1970〜2149 年の範囲外の値の場合は誤った結果を返します* | `Date`/`DateTime` の入力に対して `DateTime` を返す
`Date32`/`DateTime64` の入力に対して `DateTime64` を返す | -| `toStartOfFiveMinutes` | `DateTime` を返します
*注: 1970~2149 年の範囲外の値では誤った結果が返されます* | `Date`/`DateTime` 型の入力では `DateTime` 型を返す
`Date32`/`DateTime64` 型の入力では `DateTime64` 型を返す | -| `toStartOfMinute` | `DateTime` を返す
*注意: 1970〜2149 年の範囲外の値では誤った結果になります* | `Date`/`DateTime` 型の入力に対しては `DateTime` 型を返します
`Date32`/`DateTime64` 型の入力に対しては `DateTime64` 型を返します | -| `timeSlot` | Returns `DateTime`
*注意: 1970〜2149 の範囲外の値では誤った結果になる可能性があります* | `Date`/`DateTime` 型の入力に対しては `DateTime` 型を返します
`Date32`/`DateTime64` 型の入力に対しては `DateTime64` 型を返します | - -## enable_filesystem_cache {#enable_filesystem_cache} - - - -リモートファイルシステムに対してキャッシュを使用します。この設定自体はディスク用キャッシュのオン/オフを切り替えるものではなく(それはディスク設定で行う必要があります)、必要に応じて一部のクエリでキャッシュをバイパスできるようにします。 - -## enable_filesystem_cache_log {#enable_filesystem_cache_log} - - - -各クエリごとにファイルシステムキャッシュのログを記録できるようにします。 - -## enable_filesystem_cache_on_write_operations {#enable_filesystem_cache_on_write_operations} - - - -`write-through` キャッシュを有効または無効にします。`false` に設定すると、書き込み処理に対する `write-through` キャッシュは無効になります。`true` に設定すると、サーバー設定ファイルのキャッシュディスク設定セクションで `cache_on_write_operations` が有効になっている限り、`write-through` キャッシュが有効になります。 -詳細については「[ローカルキャッシュの使用](/operations/storing-data#using-local-cache)」を参照してください。 - -## enable_filesystem_read_prefetches_log {#enable_filesystem_read_prefetches_log} - - - -クエリ実行中に `system.filesystem_prefetch_log` にログを出力します。テストやデバッグ目的のみに使用してください。デフォルトで有効にしておくことは推奨されません。 - -## enable_global_with_statement {#enable_global_with_statement} - - - - - -WITH 句を UNION クエリおよびすべてのサブクエリに伝播させます - -## enable_hdfs_pread {#enable_hdfs_pread} - - - - - -HDFS ファイルに対して pread を有効または無効にします。デフォルトでは `hdfsPread` が使用されます。無効にした場合、HDFS ファイルの読み取りには `hdfsRead` と `hdfsSeek` が使用されます。 - -## enable_http_compression {#enable_http_compression} - - - - - -HTTP リクエストへのレスポンスで、データ圧縮を有効または無効にします。 - -詳細については、[HTTP インターフェイスの説明](../../interfaces/http.md)を参照してください。 - -設定可能な値: - -- 0 — 無効。 -- 1 — 有効。 - -## enable_job_stack_trace {#enable_job_stack_trace} - - - - - -ジョブが例外で終了した場合に、そのジョブを作成した側のスタックトレースを出力します。パフォーマンスへの影響を避けるため、デフォルトでは無効になっています。 - -## enable_join_runtime_filters {#enable_join_runtime_filters} - - - - - - - -実行時に右側から収集した JOIN キーの集合を用いて左側をフィルタリングします。 - -## enable_lazy_columns_replication {#enable_lazy_columns_replication} - - - - - -JOIN および ARRAY JOIN において遅延カラムレプリケーションを有効にします。これにより、同一行がメモリ上で不要に複数回コピーされるのを防ぎます。 - -## enable_lightweight_delete {#enable_lightweight_delete} - -**別名**: `allow_experimental_lightweight_delete` - - - -MergeTree テーブルで軽量な DELETE mutation を有効にします。 - -## enable_lightweight_update {#enable_lightweight_update} - - - -**別名**: `allow_experimental_lightweight_update` - - - - - -軽量更新の使用を許可します。 - -## enable_memory_bound_merging_of_aggregation_results {#enable_memory_bound_merging_of_aggregation_results} - - - -集約処理に対して、メモリ制約付きのマージ戦略を有効化します。 - -## enable_multiple_prewhere_read_steps {#enable_multiple_prewhere_read_steps} - - - -WHERE 句から PREWHERE 句により多くの条件を移動し、AND で結合された複数の条件がある場合は、ディスクからの読み取りとフィルタリングを複数段階に分けて実行します - -## enable_named_columns_in_function_tuple {#enable_named_columns_in_function_tuple} - - - - - -すべての名前が一意で、引用符なしの識別子として扱える場合に、tuple() 関数で名前付きタプルを生成します。 - -## enable_optimize_predicate_expression {#enable_optimize_predicate_expression} - - - - - -`SELECT` クエリにおける述語プッシュダウンを有効にします。 - -述語プッシュダウンは、分散クエリのネットワークトラフィックを大幅に削減できる場合があります。 - -可能な値: - -- 0 — 無効。 -- 1 — 有効。 - -使用方法 - -次のクエリを考えてみます: - -1. `SELECT count() FROM test_table WHERE date = '2018-10-10'` -2. `SELECT count() FROM (SELECT * FROM test_table) WHERE date = '2018-10-10'` - -`enable_optimize_predicate_expression = 1` の場合、ClickHouse は処理時にサブクエリに対して `WHERE` を適用するため、これら 2 つのクエリの実行時間は同じになります。 - -`enable_optimize_predicate_expression = 0` の場合、`WHERE` 句はサブクエリの実行完了後にすべてのデータに適用されるため、2 番目のクエリの実行時間ははるかに長くなります。 - -## enable_optimize_predicate_expression_to_final_subquery {#enable_optimize_predicate_expression_to_final_subquery} - - - -述語を final サブクエリにプッシュダウンできるようにします。 - -## enable_order_by_all - - - -`ORDER BY ALL` 構文によるソートを有効または無効にします。詳細は [ORDER BY](../../sql-reference/statements/select/order-by.md) を参照してください。 - -設定可能な値: - -* 0 — ORDER BY ALL を無効にします。 -* 1 — ORDER BY ALL を有効にします。 - -**例** - -クエリ: - -```sql -CREATE TABLE TAB(C1 Int, C2 Int, ALL Int) ENGINE=Memory(); - -INSERT INTO TAB VALUES (10, 20, 30), (20, 20, 10), (30, 10, 20); - -SELECT * FROM TAB ORDER BY ALL; -- ALL が曖昧であるというエラーを返します - -SELECT * FROM TAB ORDER BY ALL SETTINGS enable_order_by_all = 0; -``` - -結果: - -```text -┌─C1─┬─C2─┬─ALL─┐ -│ 20 │ 20 │ 10 │ -│ 30 │ 10 │ 20 │ -│ 10 │ 20 │ 30 │ -└────┴────┴─────┘ -``` - - -## enable_parallel_blocks_marshalling {#enable_parallel_blocks_marshalling} - - - - - -分散クエリにのみ影響します。有効にすると、ブロックはイニシエーターに送信する前後でパイプラインスレッド上で(デ)シリアライズおよび(デ)圧縮されます(つまり、デフォルトよりも高い並列性で処理されます)。 - -## enable_parsing_to_custom_serialization {#enable_parsing_to_custom_serialization} - - - - - -true の場合、テーブルから取得したシリアライズ方式に関するヒント情報に基づいて、データを(Sparse などの)カスタムシリアライズ方式を持つカラムに直接パースできます。 - -## enable_positional_arguments - - - - - -[GROUP BY](/sql-reference/statements/select/group-by)、[LIMIT BY](../../sql-reference/statements/select/limit-by.md)、[ORDER BY](../../sql-reference/statements/select/order-by.md) ステートメントで位置引数のサポートを有効または無効にします。 - -設定可能な値: - -* 0 — 位置引数はサポートされません。 -* 1 — 位置引数がサポートされます。列名の代わりに列番号を使用できます。 - -**例** - -クエリ: - -```sql -CREATE TABLE positional_arguments(one Int, two Int, three Int) ENGINE=Memory(); - -INSERT INTO positional_arguments VALUES (10, 20, 30), (20, 20, 10), (30, 10, 20); - -SELECT * FROM positional_arguments ORDER BY 2,3; -``` - -結果: - -```text -┌─one─┬─two─┬─three─┐ -│ 30 │ 10 │ 20 │ -│ 20 │ 20 │ 10 │ -│ 10 │ 20 │ 30 │ -└─────┴─────┴───────┘ -``` - - -## enable_producing_buckets_out_of_order_in_aggregation {#enable_producing_buckets_out_of_order_in_aggregation} - - - - - -メモリ効率の高い集約(`distributed_aggregation_memory_efficient` を参照)が、バケットを順不同で生成することを許可します。 -レプリカが、まだ小さい ID の重いバケットを処理している間に、より大きな ID を持つバケットをイニシエーターに送信できるようにすることで、集約バケットのサイズに偏りがある場合のパフォーマンスを向上させる可能性があります。 -欠点として、メモリ使用量が増加する可能性があります。 - -## enable_reads_from_query_cache {#enable_reads_from_query_cache} - - - -有効化すると、`SELECT` クエリの結果が[クエリキャッシュ](../query-cache.md)から取得されます。 - -設定可能な値: - -- 0 - 無効 -- 1 - 有効 - -## enable_s3_requests_logging {#enable_s3_requests_logging} - - - -S3 リクエストの非常に詳細なログ記録を有効にします。デバッグ時にのみ有効です。 - -## enable_scalar_subquery_optimization {#enable_scalar_subquery_optimization} - - - - - -true に設定されている場合、大きなスカラー値に対するスカラー副問い合わせのシリアル化/デシリアル化を防ぎ、同じ副問い合わせを複数回実行せずに済む場合があります。 - -## enable_scopes_for_with_statement {#enable_scopes_for_with_statement} - - - - - -この設定を無効にすると、親の WITH 句で行われた宣言は、現在のスコープ内で宣言されたものと同じスコープに属するものとして扱われます。 - -これは新しいアナライザー用の互換性設定であり、旧アナライザーでも実行できていた一部の不正なクエリを新しいアナライザーでも実行可能にするためのものです。 - -## enable_shared_storage_snapshot_in_query - - - - - -有効にすると、単一のクエリ内のすべてのサブクエリは、各テーブルに対して同じ `StorageSnapshot` を共有します。 -これにより、同じテーブルに複数回アクセスする場合でも、クエリ全体で一貫したデータビューが保証されます。 - -これは、データパーツの内部一貫性が重要となるクエリで必須となる設定です。例: - -```sql -SELECT - count() -FROM events -WHERE (_part, _part_offset) IN ( - SELECT _part, _part_offset - FROM events - WHERE user_id = 42 -) -``` - -この設定を行わない場合、外側のクエリと内側のクエリが異なるデータスナップショットを参照して動作し、誤った結果につながる可能性があります。 - -:::note -この設定を有効にすると、プランニング段階が完了した後にスナップショットから不要なデータパーツを削除する最適化が無効化されます。 -その結果、長時間実行されるクエリが、その実行期間全体にわたって古いパーツを保持し続ける可能性があり、パーツのクリーンアップが遅延し、ストレージへの負荷が増大します。 - -この設定は現在、MergeTree ファミリーのテーブルにのみ適用されます。 -::: - -設定可能な値: - -* 0 - 無効 -* 1 - 有効 - - -## enable_sharing_sets_for_mutations {#enable_sharing_sets_for_mutations} - - - -同じミューテーション内の異なるタスク間で、IN サブクエリ用に構築されたセットオブジェクトを共有できるようにします。これにより、メモリ使用量と CPU 使用量を削減できます。 - -## enable_software_prefetch_in_aggregation {#enable_software_prefetch_in_aggregation} - - - -集約処理でソフトウェアによるプリフェッチを有効にします。 - -## enable_unaligned_array_join {#enable_unaligned_array_join} - - - -異なるサイズの複数の配列に対する ARRAY JOIN を許可します。この設定を有効にすると、配列は最も長い配列の長さに合わせてリサイズされます。 - -## enable_url_encoding {#enable_url_encoding} - - - - - -[URL](../../engines/table-engines/special/url.md) エンジンのテーブルで、URI 内パスのエンコード/デコード処理を有効/無効にします。 - -デフォルトでは無効です。 - -## enable_vertical_final {#enable_vertical_final} - - - - - -有効にすると、FINAL 処理時に行をマージする代わりに、重複した行に削除フラグを付け、その後のフィルタリングで重複行を除去します - -## enable_writes_to_query_cache {#enable_writes_to_query_cache} - - - -有効にすると、`SELECT` クエリの結果が[クエリキャッシュ](../query-cache.md)に保存されます。 - -設定可能な値: - -- 0 - 無効 -- 1 - 有効 - -## enable_zstd_qat_codec {#enable_zstd_qat_codec} - - - - - -この設定を有効にすると、`ZSTD_QAT` コーデックを使用して列を圧縮できます。 - -## enforce_strict_identifier_format {#enforce_strict_identifier_format} - - - - - -有効にすると、英数字とアンダースコアのみを含む識別子が許可されます。 - -## engine_file_allow_create_multiple_files {#engine_file_allow_create_multiple_files} - - - -フォーマットにサフィックス(`JSON`、`ORC`、`Parquet` など)がある場合に、file エンジンテーブルへの各 `INSERT` ごとに新しいファイルを作成するかどうかを制御します。有効にした場合、各 `INSERT` ごとに次のパターンに従った名前の新しいファイルが作成されます。 - -`data.Parquet` -> `data.1.Parquet` -> `data.2.Parquet` など。 - -取りうる値: - -- 0 — `INSERT` クエリは既存ファイルの末尾に新しいデータを追記します。 -- 1 — `INSERT` クエリは新しいファイルを作成します。 - -## engine_file_empty_if_not_exists {#engine_file_empty_if_not_exists} - - - -基となるファイルが存在しない場合でも、File エンジンテーブルから `SELECT` を実行できるようにします。 - -可能な値: - -- 0 — `SELECT` は例外をスローします。 -- 1 — `SELECT` は空の結果を返します。 - -## engine_file_skip_empty_files {#engine_file_skip_empty_files} - - - -[File](../../engines/table-engines/special/file.md) エンジンのテーブルで、空のファイルをスキップするかどうかを制御します。 - -設定可能な値: - -- 0 — 空のファイルが要求された形式と互換性がない場合、`SELECT` は例外をスローします。 -- 1 — 空のファイルに対して、`SELECT` は空の結果を返します。 - -## engine_file_truncate_on_insert {#engine_file_truncate_on_insert} - - - -[File](../../engines/table-engines/special/file.md) エンジンのテーブルで、`INSERT` 前にファイルを truncate(内容を削除)するかどうかを有効または無効にします。 - -設定可能な値: - -- 0 — `INSERT` クエリは新しいデータをファイルの末尾に追記します。 -- 1 — `INSERT` クエリはファイルの既存の内容を破棄し、新しいデータで置き換えます。 - -## engine_url_skip_empty_files {#engine_url_skip_empty_files} - - - -[URL](../../engines/table-engines/special/url.md) エンジンテーブルで空ファイルをスキップするかどうかを有効または無効にします。 - -有効な値: - -- 0 — 空ファイルが要求された形式と互換性がない場合、`SELECT` は例外をスローします。 -- 1 — 空ファイルに対して、`SELECT` は空の結果を返します。 - -## except_default_mode {#except_default_mode} - - - -EXCEPT クエリのデフォルトモードを設定します。指定可能な値: 空文字列、`ALL`、`DISTINCT`。空文字列を指定した場合、モードが指定されていないクエリは例外をスローします。 - -## exclude_materialize_skip_indexes_on_insert - - - -指定されたスキップインデックスを、INSERT 実行時に構築および保存する対象から除外します。除外されたスキップインデックスは、[マージ時](merge-tree-settings.md/#materialize_skip_indexes_on_merge)、または明示的な -[MATERIALIZE INDEX](/sql-reference/statements/alter/skipping-index.md/#materialize-index) クエリによって、引き続き構築および保存されます。 - -[materialize_skip_indexes_on_insert](#materialize_skip_indexes_on_insert) が false の場合は、効果はありません。 - -例: - -```sql -CREATE TABLE tab -( - a UInt64, - b UInt64, - INDEX idx_a a TYPE minmax, - INDEX idx_b b TYPE set(3) -) -ENGINE = MergeTree ORDER BY tuple(); - -SET exclude_materialize_skip_indexes_on_insert='idx_a'; -- idx_a は挿入時に更新されません ---SET exclude_materialize_skip_indexes_on_insert='idx_a, idx_b'; -- いずれのインデックスも挿入時に更新されません - -INSERT INTO tab SELECT number, number / 50 FROM numbers(100); -- idx_b のみ更新されます - --- セッション設定のため、クエリ単位で設定可能です -INSERT INTO tab SELECT number, number / 50 FROM numbers(100, 100) SETTINGS exclude_materialize_skip_indexes_on_insert='idx_b'; - -ALTER TABLE tab MATERIALIZE INDEX idx_a; -- このクエリでインデックスを明示的にマテリアライズできます - -SET exclude_materialize_skip_indexes_on_insert = DEFAULT; -- 設定をデフォルトにリセットします -``` - - -## execute_exists_as_scalar_subquery {#execute_exists_as_scalar_subquery} - - - - - -非相関な `EXISTS` サブクエリをスカラサブクエリとして実行します。スカラサブクエリと同様にキャッシュが利用され、結果には定数畳み込みが適用されます。 - -## external_storage_connect_timeout_sec {#external_storage_connect_timeout_sec} - - - -接続タイムアウトを秒単位で指定します。現在は MySQL のみに対応しています。 - -## external_storage_max_read_bytes {#external_storage_max_read_bytes} - - - -外部エンジンを使用するテーブルが履歴データをフラッシュする際に読み取る最大バイト数を制限します。現在は MySQL テーブルエンジン、データベースエンジン、および辞書でのみサポートされています。0 を指定した場合、この設定は無効になります。 - -## external_storage_max_read_rows {#external_storage_max_read_rows} - - - -外部エンジンを使用するテーブルが履歴データをフラッシュする際に読み取る行数の上限を設定します。現在は MySQL テーブルエンジン、データベースエンジン、およびディクショナリでのみサポートされています。0 の場合、この設定は無効になります。 - -## external_storage_rw_timeout_sec {#external_storage_rw_timeout_sec} - - - -読み取り/書き込みタイムアウト(秒)。現在は MySQL のみに対応しています - -## external_table_functions_use_nulls {#external_table_functions_use_nulls} - - - -[mysql](../../sql-reference/table-functions/mysql.md)、[postgresql](../../sql-reference/table-functions/postgresql.md)、[odbc](../../sql-reference/table-functions/odbc.md) テーブル関数が Nullable カラムをどのように扱うかを定義します。 - -指定可能な値: - -- 0 — テーブル関数は Nullable カラムを明示的に使用します。 -- 1 — テーブル関数は Nullable カラムを暗黙的に使用します。 - -**使用方法** - -設定が `0` の場合、テーブル関数はカラムを Nullable として扱わず、NULL の代わりにデフォルト値を挿入します。これは配列内の NULL 値にも適用されます。 - -## external_table_strict_query {#external_table_strict_query} - - - -true に設定すると、外部テーブルに対するクエリにおいて、式をローカルフィルタへ変換することが禁止されます。 - -## extract_key_value_pairs_max_pairs_per_row {#extract_key_value_pairs_max_pairs_per_row} - -**別名**: `extract_kvp_max_pairs_per_row` - - - - - -`extractKeyValuePairs` 関数によって生成できるペアの最大数。メモリの過剰消費を防ぐための保護機構として使用されます。 - -## extremes {#extremes} - - - -クエリ結果の列における極値(最小値と最大値)をカウントするかどうかを指定します。0 または 1 を指定できます。既定値は 0(無効)です。 -詳細については、「極値」のセクションを参照してください。 - -## fallback_to_stale_replicas_for_distributed_queries {#fallback_to_stale_replicas_for_distributed_queries} - - - -更新されたデータが利用できない場合に、クエリを古い状態のレプリカに対して強制的に実行します。詳細は [Replication](../../engines/table-engines/mergetree-family/replication.md) を参照してください。 - -ClickHouse は、テーブルの古いレプリカの中から最も適切なものを選択します。 - -レプリケートされたテーブルを参照する分散テーブルに対して `SELECT` を実行するときに使用されます。 - -デフォルトは 1(有効)です。 - -## filesystem_cache_allow_background_download {#filesystem_cache_allow_background_download} - - - - - -リモートストレージから読み取ったデータについて、ファイルシステムキャッシュがバックグラウンドでのダウンロードをキューイングすることを許可します。現在のクエリ/セッションでダウンロードをフォアグラウンドで実行したい場合は無効にします。 - -## filesystem_cache_boundary_alignment {#filesystem_cache_boundary_alignment} - - - - - -ファイルシステムキャッシュの境界合わせ。この設定は、ディスクを伴わない読み取りの場合にのみ適用されます(たとえば、リモートテーブルエンジン/テーブル関数のキャッシュには適用されますが、MergeTree テーブルのストレージ設定には適用されません)。値 0 は境界合わせを行わないことを意味します。 - -## filesystem_cache_enable_background_download_during_fetch {#filesystem_cache_enable_background_download_during_fetch} - - - - - - - -ClickHouse Cloud でのみ有効です。ファイルシステムキャッシュ内の容量を予約するためにキャッシュをロックする際の待機時間です。 - -## filesystem_cache_enable_background_download_for_metadata_files_in_packed_storage {#filesystem_cache_enable_background_download_for_metadata_files_in_packed_storage} - - - - - - - -ClickHouse Cloud でのみ有効です。filesystem cache で領域を確保するためにキャッシュをロックするまでの待ち時間を制御します。 - -## filesystem_cache_max_download_size {#filesystem_cache_max_download_size} - - - -1回のクエリでダウンロードできるリモートファイルシステムキャッシュの最大サイズ - -## filesystem_cache_name {#filesystem_cache_name} - - - -ステートレステーブルエンジンまたはデータレイクで使用するファイルシステムキャッシュ名 - -## filesystem_cache_prefer_bigger_buffer_size {#filesystem_cache_prefer_bigger_buffer_size} - - - - - -filesystem cache が有効な場合、小さなファイルセグメントの書き込みによるキャッシュ性能の低下を避けるため、より大きなバッファサイズの使用を優先します。一方、この設定を有効にするとメモリ使用量が増加する可能性があります。 - -## filesystem_cache_reserve_space_wait_lock_timeout_milliseconds {#filesystem_cache_reserve_space_wait_lock_timeout_milliseconds} - - - - - -ファイルシステムキャッシュで領域を予約するためにキャッシュのロック取得を待機する時間 - -## filesystem_cache_segments_batch_size {#filesystem_cache_segments_batch_size} - - - -キャッシュから読み取りバッファが要求できる、単一バッチ内のファイルセグメントのサイズ上限です。値が小さすぎるとキャッシュへの要求が過剰になり、逆に大きすぎるとキャッシュからの削除(エビクション)処理が遅くなる可能性があります。 - -## filesystem_cache_skip_download_if_exceeds_per_query_cache_write_limit {#filesystem_cache_skip_download_if_exceeds_per_query_cache_write_limit} - -**別名**: `skip_download_if_exceeds_query_cache` - - - - - -クエリキャッシュサイズを超える場合は、リモートファイルシステムからのダウンロードをスキップします。 - -## filesystem_prefetch_max_memory_usage {#filesystem_prefetch_max_memory_usage} - - - -プリフェッチで使用されるメモリの最大使用量。 - -## filesystem_prefetch_step_bytes {#filesystem_prefetch_step_bytes} - - - -プリフェッチのステップサイズをバイト数で指定します。ゼロの場合は `auto` を意味し、おおよそ最適なプリフェッチステップが自動的に推定されますが、必ずしも完全に最適とは限りません。実際の値は、設定 `filesystem_prefetch_min_bytes_for_single_read_task` によって異なる場合があります。 - -## filesystem_prefetch_step_marks {#filesystem_prefetch_step_marks} - - - -マーク単位のプリフェッチステップを指定します。0 を指定すると `auto` を意味し、おおよそ最適なプリフェッチステップが自動で推定されますが、必ずしも 100% 最適とは限りません。実際の値は、設定 `filesystem_prefetch_min_bytes_for_single_read_task` によって変わる場合があります。 - -## filesystem_prefetches_limit {#filesystem_prefetches_limit} - - - -プリフェッチの最大数です。0 を指定すると無制限になります。プリフェッチを制限したい場合は、`filesystem_prefetches_max_memory_usage` 設定の使用をより推奨します。 - -## final - - - -クエリ内の、[FINAL](../../sql-reference/statements/select/from.md/#final-modifier) 修飾子を適用可能なすべてのテーブルに対して、結合テーブル、サブクエリ内のテーブル、および分散テーブルも含めて、自動的に [FINAL](../../sql-reference/statements/select/from.md/#final-modifier) 修飾子を適用します。 - -取りうる値: - -* 0 - 無効 -* 1 - 有効 - -例: - -```sql -CREATE TABLE test -( - key Int64, - some String -) -ENGINE = ReplacingMergeTree -ORDER BY key; - -INSERT INTO test FORMAT Values (1, 'first'); -INSERT INTO test FORMAT Values (1, 'second'); - -SELECT * FROM test; -┌─key─┬─some───┐ -│ 1 │ second │ -└─────┴────────┘ -┌─key─┬─some──┐ -│ 1 │ first │ -└─────┴───────┘ - -SELECT * FROM test SETTINGS final = 1; -┌─key─┬─some───┐ -│ 1 │ second │ -└─────┴────────┘ - -SET final = 1; -SELECT * FROM test; -┌─key─┬─some───┐ -│ 1 │ second │ -└─────┴────────┘ -``` - - -## flatten_nested - - - -[ネスト](../../sql-reference/data-types/nested-data-structures/index.md)列のデータ形式を設定します。 - -指定可能な値: - -* 1 — ネスト列を個別の配列にフラット化します。 -* 0 — ネスト列をタプルの単一配列のままにします。 - -**使用方法** - -この設定が `0` の場合、任意のレベルまで入れ子にできます。 - -**例** - -クエリ: - -```sql -SET flatten_nested = 1; -CREATE TABLE t_nest (`n` Nested(a UInt32, b UInt32)) ENGINE = MergeTree ORDER BY tuple(); - -SHOW CREATE TABLE t_nest; -``` - -結果: - -```text -┌─statement───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ -│ CREATE TABLE default.t_nest -( - `n.a` Array(UInt32), - `n.b` Array(UInt32) -) -ENGINE = MergeTree -ORDER BY tuple() -SETTINGS index_granularity = 8192 │ -└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ -``` - -クエリ: - -```sql -SET flatten_nested = 0; - -CREATE TABLE t_nest (`n` Nested(a UInt32, b UInt32)) ENGINE = MergeTree ORDER BY tuple(); - -SHOW CREATE TABLE t_nest; -``` - -結果: - -```text -┌─statement──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ -│ CREATE TABLE default.t_nest -( - `n` Nested(a UInt32, b UInt32) -) -ENGINE = MergeTree -ORDER BY tuple() -SETTINGS index_granularity = 8192 │ -└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## force_aggregate_partitions_independently {#force_aggregate_partitions_independently} - - - -適用可能であるにもかかわらず、ヒューリスティクスにより使用しないと判断された最適化を強制的に有効化します - -## force_aggregation_in_order {#force_aggregation_in_order} - - - -この設定は、分散クエリをサポートするためにサーバー内部で使用されます。通常の動作が損なわれるため、手動で変更しないでください。(分散集約時に、リモートノードでの順序付き集約の利用を強制します)。 - -## force_data_skipping_indices - -指定された data skipping インデックスが使用されなかった場合、クエリ実行を行いません。 - -次の例を考えます。 - -```sql -CREATE TABLE data -( - key Int, - d1 Int, - d1_null Nullable(Int), - INDEX d1_idx d1 TYPE minmax GRANULARITY 1, - INDEX d1_null_idx assumeNotNull(d1_null) TYPE minmax GRANULARITY 1 -) -Engine=MergeTree() -ORDER BY key; - -SELECT * FROM data_01515; -SELECT * FROM data_01515 SETTINGS force_data_skipping_indices=''; -- クエリはCANNOT_PARSE_TEXTエラーを発生させます。 -SELECT * FROM data_01515 SETTINGS force_data_skipping_indices='d1_idx'; -- クエリはINDEX_NOT_USEDエラーを発生させます。 -SELECT * FROM data_01515 WHERE d1 = 0 SETTINGS force_data_skipping_indices='d1_idx'; -- 正常。 -SELECT * FROM data_01515 WHERE d1 = 0 SETTINGS force_data_skipping_indices='`d1_idx`'; -- 正常(フル機能パーサーの例)。 -SELECT * FROM data_01515 WHERE d1 = 0 SETTINGS force_data_skipping_indices='`d1_idx`, d1_null_idx'; -- d1_null_idxが使用されていないため、クエリはINDEX_NOT_USEDエラーを発生させます。 -SELECT * FROM data_01515 WHERE d1 = 0 AND assumeNotNull(d1_null) = 0 SETTINGS force_data_skipping_indices='`d1_idx`, d1_null_idx'; -- 正常。 -``` - - -## force_grouping_standard_compatibility {#force_grouping_standard_compatibility} - - - - - -引数が集約キーとして使用されていない場合、GROUPING 関数が 1 を返します - -## force_index_by_date {#force_index_by_date} - - - -インデックスを日付で使用できない場合に、クエリの実行を禁止します。 - -MergeTree ファミリーのテーブルで動作します。 - -`force_index_by_date=1` の場合、ClickHouse はクエリにデータ範囲の絞り込みに使用できる日付キーに対する条件があるかどうかを確認します。適切な条件がない場合は、例外をスローします。ただし、その条件によって実際に読み取るデータ量が減少するかどうかはチェックしません。たとえば、条件 `Date != ' 2000-01-01 '` は、テーブル内のすべてのデータに一致する場合(つまり、クエリの実行に全件スキャンが必要な場合)でも許容されます。MergeTree テーブルにおけるデータ範囲の詳細については、[MergeTree](../../engines/table-engines/mergetree-family/mergetree.md) を参照してください。 - -## force_optimize_projection {#force_optimize_projection} - - - -[projections](../../engines/table-engines/mergetree-family/mergetree.md/#projections) の最適化が有効な場合([optimize_use_projections](#optimize_use_projections) 設定を参照)、`SELECT` クエリでプロジェクションの使用を必須にするかどうかを制御します。 - -取り得る値: - -- 0 — プロジェクション最適化は必須ではありません。 -- 1 — プロジェクション最適化は必須です。 - -## force_optimize_projection_name {#force_optimize_projection_name} - -空文字列ではない値が設定されている場合、その projection がクエリで少なくとも一度は使用されているかをチェックします。 - -指定可能な値: - -- string: クエリで使用される projection の名前 - -## force_optimize_skip_unused_shards {#force_optimize_skip_unused_shards} - - - -[optimize_skip_unused_shards](#optimize_skip_unused_shards) が有効で、未使用シャードをスキップできない場合に、クエリの実行を許可するかどうかを制御します。スキップできず、この設定が有効な場合は、例外がスローされます。 - -可能な値: - -- 0 — 無効。ClickHouse は例外をスローしません。 -- 1 — 有効。テーブルにシャーディングキーがある場合にのみ、クエリの実行が無効になります。 -- 2 — 有効。テーブルにシャーディングキーが定義されているかどうかに関係なく、クエリの実行が無効になります。 - -## force_optimize_skip_unused_shards_nesting {#force_optimize_skip_unused_shards_nesting} - - - -分散クエリのネストレベル(`Distributed` テーブルが別の `Distributed` テーブルを参照するケース)に応じて、[`force_optimize_skip_unused_shards`](#force_optimize_skip_unused_shards) の動作を制御します(そのため、[`force_optimize_skip_unused_shards`](#force_optimize_skip_unused_shards) 自体も有効になっている必要があります)。 - -可能な値: - -- 0 - 無効。`force_optimize_skip_unused_shards` は常に動作します。 -- 1 — 第 1 レベルに対してのみ `force_optimize_skip_unused_shards` を有効にします。 -- 2 — 第 2 レベルまで `force_optimize_skip_unused_shards` を有効にします。 - -## force_primary_key {#force_primary_key} - - - -プライマリキーによるインデックス付けができない場合、そのクエリの実行を禁止します。 - -MergeTree ファミリーに属するテーブルで有効です。 - -`force_primary_key=1` の場合、ClickHouse はクエリにデータ範囲の絞り込みに利用できるプライマリキー条件が含まれているかどうかをチェックします。適切な条件が存在しない場合、例外をスローします。ただし、その条件が読み取るデータ量を実際に削減するかどうかはチェックしません。MergeTree テーブルにおけるデータ範囲の詳細については、[MergeTree](../../engines/table-engines/mergetree-family/mergetree.md) を参照してください。 - -## force_remove_data_recursively_on_drop {#force_remove_data_recursively_on_drop} - - - -DROP クエリでデータを再帰的に削除します。`Directory not empty` エラーを回避しますが、切り離されたデータが通知なしに削除されてしまう可能性があります - -## formatdatetime_e_with_space_padding {#formatdatetime_e_with_space_padding} - - - - - -関数 `formatDateTime` におけるフォーマッタ `%e` は、1 桁の日を先頭にスペースを付けて出力します(例: `'2'` ではなく `' 2'`)。 - -## formatdatetime_f_prints_scale_number_of_digits {#formatdatetime_f_prints_scale_number_of_digits} - - - - - -関数 `formatDateTime` におけるフォーマット指定子 `%f` は、固定の 6 桁ではなく、DateTime64 のスケールで指定された桁数のみを出力します。 - -## formatdatetime_f_prints_single_zero {#formatdatetime_f_prints_single_zero} - - - - - -`formatDateTime` 関数のフォーマッタ `%f` は、フォーマット対象に小数秒が含まれない場合、6 個の 0 ではなく 1 個の 0 を出力します。 - -## formatdatetime_format_without_leading_zeros {#formatdatetime_format_without_leading_zeros} - - - -関数 'formatDateTime' におけるフォーマッタ '%c'、'%l'、'%k' は、月および時刻を先頭のゼロを付けずに出力します。 - -## formatdatetime_parsedatetime_m_is_month_name {#formatdatetime_parsedatetime_m_is_month_name} - - - - - -`formatDateTime` 関数および `parseDateTime` 関数におけるフォーマット指定子 `%M` は、分ではなく月名を出力/解析します。 - -## fsync_metadata {#fsync_metadata} - - - -`.sql` ファイルを書き込む際に [fsync](http://pubs.opengroup.org/onlinepubs/9699919799/functions/fsync.html) を有効または無効にします。既定では有効です。 - -サーバー上で、非常に小さいテーブルが何百万個も継続的に作成および破棄されている場合には、これを無効にすることが有効な場合があります。 - -## function_date_trunc_return_type_behavior {#function_date_trunc_return_type_behavior} - - - - - -`dateTrunc` 関数の結果型の挙動を変更できるようにします。 - -設定可能な値: - -- 0 - 第 2 引数が `DateTime64/Date32` の場合、戻り値の型は第 1 引数の時間単位に関わらず `DateTime64/Date32` になります。 -- 1 - `Date32` の場合、結果は常に `Date` になります。`DateTime64` の場合、時間単位が `second` 以上のとき、結果は `DateTime` になります。 - -## function_implementation {#function_implementation} - -特定のターゲットまたはバリアント向けの関数実装を選択します(実験的)。空のままにすると、すべてが有効になります。 - -## function_json_value_return_type_allow_complex - - - -`json_value` 関数が struct、array、map などの複合型を返すことを許可するかどうかを制御します。 - -```sql -SELECT JSON_VALUE('{"hello":{"world":"!"}}', '$.hello') settings function_json_value_return_type_allow_complex=true - -┌─JSON_VALUE('{"hello":{"world":"!"}}', '$.hello')─┐ -│ {"world":"!"} │ -└──────────────────────────────────────────────────┘ - -1行取得。経過時間: 0.001秒 -``` - -指定可能な値: - -* true — 許可する。 -* false — 許可しない。 - - -## function_json_value_return_type_allow_nullable - - - -JSON_VALUE 関数で、値が存在しない場合に `NULL` を返すことを許可するかどうかを制御します。 - -```sql -SELECT JSON_VALUE('{"hello":"world"}', '$.b') settings function_json_value_return_type_allow_nullable=true; - -┌─JSON_VALUE('{"hello":"world"}', '$.b')─┐ -│ ᴺᵁᴸᴸ │ -└────────────────────────────────────────┘ - -1 row in set. Elapsed: 0.001 sec. -``` - -取り得る値: - -* true — 許可する。 -* false — 許可しない。 - - -## function_locate_has_mysql_compatible_argument_order {#function_locate_has_mysql_compatible_argument_order} - - - - - -関数 [locate](../../sql-reference/functions/string-search-functions.md/#locate) の引数の順序を制御します。 - -設定可能な値: - -- 0 — 関数 `locate` は引数 `(haystack, needle[, start_pos])` を受け取ります。 -- 1 — 関数 `locate` は引数 `(needle, haystack, [, start_pos])` を受け取ります (MySQL 互換動作)。 - -## function_range_max_elements_in_block {#function_range_max_elements_in_block} - - - -関数 [range](/sql-reference/functions/array-functions#range) によって生成されるデータ量に対する安全のためのしきい値を設定します。データの 1 ブロックあたりで関数によって生成される値の最大数(ブロック内の各行に対する配列サイズの合計)を定義します。 - -設定可能な値: - -- 正の整数。 - -**関連項目** - -- [`max_block_size`](#max_block_size) -- [`min_insert_block_size_rows`](#min_insert_block_size_rows) - -## function_sleep_max_microseconds_per_block {#function_sleep_max_microseconds_per_block} - - - - - -関数 `sleep` が各ブロックごとにスリープできる最大マイクロ秒数です。ユーザーがそれより大きい値で呼び出した場合には、例外をスローします。これは安全性を確保するための閾値です。 - -## function_visible_width_behavior {#function_visible_width_behavior} - - - - - -`visibleWidth` の動作バージョン。0 - コードポイント数のみをカウントする。1 - ゼロ幅文字および結合文字を正しくカウントし、全角文字は 2 文字分として扱い、タブ幅を推定し、削除文字もカウントする。 - -## geo_distance_returns_float64_on_float64_arguments {#geo_distance_returns_float64_on_float64_arguments} - - - - - -`geoDistance`、`greatCircleDistance`、`greatCircleAngle` 関数の4つの引数すべてが Float64 の場合、戻り値は Float64 となり、内部計算には倍精度で処理を行います。以前の ClickHouse のバージョンでは、これらの関数は常に Float32 を返していました。 - -## geotoh3_argument_order {#geotoh3_argument_order} - - - - - - - -関数 `geoToH3` は、`lon_lat` に設定されている場合は (lon, lat)、`lat_lon` に設定されている場合は (lat, lon) を引数として取ります。 - -## glob_expansion_max_elements {#glob_expansion_max_elements} - - - -許可されるアドレス数の上限(外部ストレージやテーブル関数など)。 - -## grace_hash_join_initial_buckets {#grace_hash_join_initial_buckets} - - - - - -Grace ハッシュ結合における初期バケット数 - -## grace_hash_join_max_buckets {#grace_hash_join_max_buckets} - - - - - -Grace Hash Join で使用するバケット数の上限 - -## group_by_overflow_mode {#group_by_overflow_mode} - - - -集約における一意キーの数が上限を超えたときの動作を設定します。 - -- `throw`: 例外をスローする -- `break`: クエリの実行を停止し、部分的な結果を返す -- `any`: 集合に含まれているキーについては集約を続行するが、新しいキーは集合に追加しない - -`any` を指定すると、GROUP BY の近似的な処理を実行できます。 -この近似の精度は、データの統計的な性質に依存します。 - -## group_by_two_level_threshold {#group_by_two_level_threshold} - - - -キー数がいくつ以上になったら 2 レベル集約を開始するかを指定します。0 の場合、しきい値は設定されません。 - -## group_by_two_level_threshold_bytes {#group_by_two_level_threshold_bytes} - - - -集約状態のサイズ(バイト数)がどの程度以上になったときに二段階集約を使用し始めるかを指定します。0 の場合、しきい値は設定されません。いずれかのしきい値が満たされた場合に二段階集約が使用されます。 - -## group_by_use_nulls {#group_by_use_nulls} - - - -[GROUP BY 句](/sql-reference/statements/select/group-by) における集約キー型の扱い方を変更します。 -`ROLLUP`、`CUBE`、`GROUPING SETS` 指定子が使用されている場合、一部の集約キーは特定の結果行を生成する際に使用されない場合があります。 -この設定に応じて、これらのキーに対応する列は、該当する行でデフォルト値または `NULL` で埋められます。 - -設定値: - -- 0 — 欠損値を生成する際に、集約キー型のデフォルト値を使用します。 -- 1 — ClickHouse は SQL 標準どおりに `GROUP BY` を実行します。集約キーの型は [Nullable](/sql-reference/data-types/nullable) に変換されます。対応する集約キーの列は、そのキーが使用されなかった行では [NULL](/sql-reference/syntax#null) で埋められます。 - -関連情報: - -- [GROUP BY 句](/sql-reference/statements/select/group-by) - -## h3togeo_lon_lat_result_order {#h3togeo_lon_lat_result_order} - - - - - -関数 `h3ToGeo` は、true の場合は (lon, lat)、それ以外の場合は (lat, lon) を返します。 - -## handshake_timeout_ms {#handshake_timeout_ms} - - - -ハンドシェイク時にレプリカから Hello パケットを受信するまでのタイムアウト(ミリ秒)。 - -## hdfs_create_new_file_on_insert {#hdfs_create_new_file_on_insert} - - - -HDFS エンジンテーブルで、挿入ごとに新しいファイルを作成するかどうかを制御します。有効にすると、各 `INSERT` ごとに、次のパターンに類似した名前で新しい HDFS ファイルが作成されます。 - -初期名: `data.Parquet.gz` -> `data.1.Parquet.gz` -> `data.2.Parquet.gz` など - -設定可能な値: - -- 0 — `INSERT` クエリは既存ファイルの末尾に新しいデータを追記します。 -- 1 — `INSERT` クエリは新しいファイルを作成します。 - -## hdfs_ignore_file_doesnt_exist {#hdfs_ignore_file_doesnt_exist} - - - - - -特定のキーを読み取る際、対象のファイルが存在しない場合は、ファイルが存在しないことを無視します。 - -取りうる値: - -- 1 — `SELECT` は空の結果を返します。 -- 0 — `SELECT` は例外をスローします。 - -## hdfs_replication {#hdfs_replication} - - - -実際のレプリケーション数は、HDFS ファイルの作成時に指定できます。 - -## hdfs_skip_empty_files {#hdfs_skip_empty_files} - - - -[HDFS](../../engines/table-engines/integrations/hdfs.md) エンジンのテーブルで空ファイルをスキップするかどうかを有効または無効にします。 - -設定可能な値: - -- 0 — 空ファイルが要求された形式と互換性がない場合、`SELECT` は例外をスローします。 -- 1 — 空ファイルに対して、`SELECT` は空の結果を返します。 - -## hdfs_throw_on_zero_files_match {#hdfs_throw_on_zero_files_match} - - - - - -グロブ展開ルールに従って一致するファイルが 1 件もない場合に、エラーをスローします。 - -可能な値: - -- 1 — `SELECT` は例外をスローします。 -- 0 — `SELECT` は空の結果を返します。 - -## hdfs_truncate_on_insert {#hdfs_truncate_on_insert} - - - -`hdfs` エンジンテーブルへの `INSERT` 実行前に、ファイルを切り詰め(truncate)るかどうかを制御します。無効な場合、対象の HDFS 上のファイルが既に存在していると、`INSERT` 実行時に例外が送出されます。 - -Possible values: - -- 0 — `INSERT` クエリは新しいデータをファイルの末尾に追記します。 -- 1 — `INSERT` クエリはファイルの既存コンテンツを新しいデータで置き換えます。 - -## hedged_connection_timeout_ms {#hedged_connection_timeout_ms} - - - - - -Hedged リクエストにおいて、レプリカへの接続を確立する際の接続タイムアウト - -## hnsw_candidate_list_size_for_search {#hnsw_candidate_list_size_for_search} - - - - - -ベクトル類似性インデックスを検索するときの動的候補リストのサイズです。`ef_search` とも呼ばれます。 - -## hsts_max_age {#hsts_max_age} - - - -HSTS の有効期間。0 は HSTS を無効にします。 - -## http_connection_timeout {#http_connection_timeout} - - - -HTTP 接続のタイムアウト(秒)。 - -設定可能な値: - -- 任意の正の整数。 -- 0 - 無効(タイムアウトなし)。 - -## http_headers_progress_interval_ms {#http_headers_progress_interval_ms} - - - -HTTP ヘッダー `X-ClickHouse-Progress` を、指定された間隔より短い間隔では送信しません。 - -## http_make_head_request {#http_make_head_request} - - - -`http_make_head_request` 設定は、HTTP からデータを読み込む際に `HEAD` リクエストを実行し、読み取るファイルのサイズなどの情報を取得できるようにします。デフォルトで有効になっているため、サーバーが `HEAD` リクエストをサポートしていない場合などでは、この設定を無効にすることが望ましい場合があります。 - -## http_max_field_name_size {#http_max_field_name_size} - - - -HTTP ヘッダー内のフィールド名の最大長 - -## http_max_field_value_size {#http_max_field_value_size} - - - -HTTP ヘッダー内のフィールド値の最大長さ - -## http_max_fields {#http_max_fields} - - - -HTTP ヘッダー内のフィールド数の上限 - -## http_max_multipart_form_data_size {#http_max_multipart_form_data_size} - - - -multipart/form-data コンテンツのサイズ上限です。この設定は URL パラメータからは指定できず、ユーザープロファイル内で設定する必要があります。コンテンツはクエリ実行開始前にパースされ、外部テーブルがメモリ上に作成される点に注意してください。また、この段階に影響を与えるのはこの制限のみが有効です(`max_memory_usage` や `max_execution_time` などの制限は、HTTP フォームデータを読み込んでいる間は効果がありません)。 - -## http_max_request_param_data_size {#http_max_request_param_data_size} - - - -事前定義された HTTP リクエストで、クエリパラメータとして送信されるリクエストデータのサイズ上限。 - -## http_max_tries {#http_max_tries} - - - -HTTP 経由で読み取る際の最大試行回数。 - -## http_max_uri_size {#http_max_uri_size} - - - -HTTPリクエストのURIの最大長を設定します。 - -設定可能な値: - -- 正の整数 - -## http_native_compression_disable_checksumming_on_decompress {#http_native_compression_disable_checksumming_on_decompress} - - - -クライアントからの HTTP POST データを解凍する際に、チェックサム検証を有効または無効にします。ClickHouse ネイティブ圧縮形式でのみ使用されます(`gzip` や `deflate` では使用されません)。 - -詳細については、[HTTP インターフェイスの説明](../../interfaces/http.md)を参照してください。 - -設定可能な値: - -- 0 — 無効。 -- 1 — 有効。 - -## http_receive_timeout {#http_receive_timeout} - - - - - -HTTP 受信時のタイムアウト時間(秒)。 - -設定可能な値: - -- 任意の正の整数 -- 0 - 無効(タイムアウト無制限) - -## http_response_buffer_size {#http_response_buffer_size} - - - -HTTP レスポンスをクライアントへ送信する前、または(http_wait_end_of_query が有効な場合に)ディスクへフラッシュする前に、サーバーのメモリでバッファリングするバイト数。 - -## http_response_headers {#http_response_headers} - - - - - -サーバーがクエリを正常に処理した結果を返す際の HTTP レスポンスヘッダーを追加または上書きできます。 -これは HTTP インターフェイスにのみ影響します。 - -ヘッダーが既定で既に設定されている場合は、その値が指定された値で上書きされます。 -ヘッダーが既定で設定されていない場合は、そのヘッダーがヘッダー一覧に追加されます。 -サーバーによって既定で設定され、この設定で上書きされていないヘッダーはそのまま残ります。 - -この設定では、ヘッダーを一定の値に固定できます。現時点では、動的に計算された値をヘッダーに設定する方法はありません。 - -名前または値のどちらにも ASCII 制御文字を含めることはできません。 - -返されたヘッダーに基づいて処理を行いつつ、ユーザーが設定を変更できる UI アプリケーションを実装する場合は、この設定を読み取り専用に制限することを推奨します。 - -例: `SET http_response_headers = '{"Content-Type": "image/png"}'` - -## http_retry_initial_backoff_ms {#http_retry_initial_backoff_ms} - - - -HTTP 経由での読み取りを再試行する際のバックオフ時間の最小値(ミリ秒) - -## http_retry_max_backoff_ms {#http_retry_max_backoff_ms} - - - -HTTP 経由の読み取りを再試行する際のバックオフ時間の最大値(ミリ秒) - -## http_send_timeout {#http_send_timeout} - - - - - -HTTP 送信タイムアウト(秒単位)。 - -Possible values: - -- 任意の正の整数。 -- 0 - 無効化(タイムアウトなし/無限)。 - -:::note -これはデフォルトプロファイルにのみ適用されます。変更を反映させるにはサーバーの再起動が必要です。 -::: - -## http_skip_not_found_url_for_globs {#http_skip_not_found_url_for_globs} - - - -HTTP_NOT_FOUND エラーが返されたグロブパターンの URL をスキップする - -## http_wait_end_of_query {#http_wait_end_of_query} - - - -サーバー側で HTTP レスポンスのバッファリングを有効にします。 - -## http_write_exception_in_output_format {#http_write_exception_in_output_format} - - - - - -例外情報を出力フォーマットで出力し、正しい形式の出力を生成します。JSON および XML フォーマットで機能します。 - -## http_zlib_compression_level {#http_zlib_compression_level} - - - -[enable_http_compression = 1](#enable_http_compression) の場合、HTTP リクエストに対するレスポンスで使用するデータ圧縮レベルを設定します。 - -取り得る値:1 から 9 までの数値。 - -## iceberg_delete_data_on_drop {#iceberg_delete_data_on_drop} - - - - - -`DROP` 時にすべての Iceberg ファイルを削除するかどうかを制御します。 - -## iceberg_insert_max_bytes_in_data_file {#iceberg_insert_max_bytes_in_data_file} - - - - - -INSERT 操作時における Iceberg の Parquet データファイルの最大サイズ(バイト単位)。 - -## iceberg_insert_max_partitions {#iceberg_insert_max_partitions} - - - - - -Iceberg テーブルエンジンに対する 1 回の INSERT 操作で許可されるパーティション数の上限。 - -## iceberg_insert_max_rows_in_data_file {#iceberg_insert_max_rows_in_data_file} - - - - - -`INSERT` 操作時に作成される Iceberg Parquet データファイルの最大行数。 - -## iceberg_metadata_compression_method {#iceberg_metadata_compression_method} - - - - - -`.metadata.json` ファイルの圧縮方式を指定します。 - -## iceberg_metadata_log_level {#iceberg_metadata_log_level} - - - - - -Iceberg テーブルのメタデータログレベルを system.iceberg_metadata_log に対して制御します。 -通常はデバッグ目的でのみ変更します。 - -設定可能な値: - -- none - メタデータログを出力しません。 -- metadata - ルートの metadata.json ファイル。 -- manifest_list_metadata - 上記すべて + スナップショットに対応する avro manifest list からのメタデータ。 -- manifest_list_entry - 上記すべて + avro manifest list の各エントリ。 -- manifest_file_metadata - 上記すべて + 走査された avro manifest ファイルからのメタデータ。 -- manifest_file_entry - 上記すべて + 走査された avro manifest ファイルの各エントリ。 - -## iceberg_snapshot_id {#iceberg_snapshot_id} - - - - - -特定のスナップショット ID を指定して Iceberg テーブルをクエリします。 - -## iceberg_timestamp_ms {#iceberg_timestamp_ms} - - - - - -特定のタイムスタンプ時点でアクティブだったスナップショットを使用して Iceberg テーブルをクエリします。 - -## idle_connection_timeout {#idle_connection_timeout} - - - -指定した秒数の経過後に、アイドル状態の TCP 接続を閉じるまでのタイムアウト値です。 - -設定可能な値: - -- 正の整数(0 - 0 秒後、つまり即時に閉じる)。 - -## ignore_cold_parts_seconds {#ignore_cold_parts_seconds} - - - - - -ClickHouse Cloud でのみ有効です。新しいデータパーツを、事前ウォームアップされる([cache_populated_by_fetch](merge-tree-settings.md/#cache_populated_by_fetch) を参照)か、指定した秒数が経過するまで、SELECT クエリの対象から除外します。Replicated-/SharedMergeTree 用です。 - -## ignore_data_skipping_indices - -クエリで使用されている場合でも、指定されたスキッピングインデックスを無視します。 - -次の例を考えてみましょう。 - -```sql -CREATE TABLE data -( - key Int, - x Int, - y Int, - INDEX x_idx x TYPE minmax GRANULARITY 1, - INDEX y_idx y TYPE minmax GRANULARITY 1, - INDEX xy_idx (x,y) TYPE minmax GRANULARITY 1 -) -Engine=MergeTree() -ORDER BY key; - -INSERT INTO data VALUES (1, 2, 3); - -SELECT * FROM data; -SELECT * FROM data SETTINGS ignore_data_skipping_indices=''; -- クエリはCANNOT_PARSE_TEXTエラーを発生させます。 -SELECT * FROM data SETTINGS ignore_data_skipping_indices='x_idx'; -- 正常に動作します。 -SELECT * FROM data SETTINGS ignore_data_skipping_indices='na_idx'; -- 正常に動作します。 - -SELECT * FROM data WHERE x = 1 AND y = 1 SETTINGS ignore_data_skipping_indices='xy_idx',force_data_skipping_indices='xy_idx' ; -- xy_idxが明示的に無視されているため、クエリはINDEX_NOT_USEDエラーを発生させます。 -SELECT * FROM data WHERE x = 1 AND y = 2 SETTINGS ignore_data_skipping_indices='xy_idx'; -``` - -インデックスを無視しない場合のクエリ: - -```sql -EXPLAIN indexes = 1 SELECT * FROM data WHERE x = 1 AND y = 2; - -Expression ((射影 + ORDER BY 前)) - Filter (WHERE) - ReadFromMergeTree (default.data) - インデックス: - プライマリキー - 条件: true - パート: 1/1 - グラニュール: 1/1 - スキップ - 名前: x_idx - 説明: minmax GRANULARITY 1 - パート: 0/1 - グラニュール: 0/1 - スキップ - 名前: y_idx - 説明: minmax GRANULARITY 1 - パート: 0/0 - グラニュール: 0/0 - スキップ - 名前: xy_idx - 説明: minmax GRANULARITY 1 - パート: 0/0 - グラニュール: 0/0 -``` - -`xy_idx` インデックスを無視する: - -```sql -EXPLAIN indexes = 1 SELECT * FROM data WHERE x = 1 AND y = 2 SETTINGS ignore_data_skipping_indices='xy_idx'; - -Expression ((Projection + Before ORDER BY)) - Filter (WHERE) - ReadFromMergeTree (default.data) - Indexes: - PrimaryKey - Condition: true - Parts: 1/1 - Granules: 1/1 - Skip - Name: x_idx - Description: minmax GRANULARITY 1 - Parts: 0/1 - Granules: 0/1 - Skip - Name: y_idx - Description: minmax GRANULARITY 1 - Parts: 0/0 - Granules: 0/0 -``` - -MergeTree ファミリーに属するテーブルで動作します。 - - -## ignore_drop_queries_probability {#ignore_drop_queries_probability} - - - - - -有効にすると、サーバーは指定された確率で、すべての DROP TABLE クエリを無視します(Memory エンジンおよび JOIN エンジンの場合は DROP を TRUNCATE に置き換えます)。テスト目的で使用します。 - -## ignore_materialized_views_with_dropped_target_table {#ignore_materialized_views_with_dropped_target_table} - - - - - -ビューへのプッシュ処理時に、対象テーブルが削除されたマテリアライズドビュー (MV) を無視します - -## ignore_on_cluster_for_replicated_access_entities_queries {#ignore_on_cluster_for_replicated_access_entities_queries} - - - -レプリケートされたアクセスエンティティを管理するクエリで、ON CLUSTER 句を無視します。 - -## ignore_on_cluster_for_replicated_named_collections_queries {#ignore_on_cluster_for_replicated_named_collections_queries} - - - - - -レプリケートされた名前付きコレクションを管理するクエリに対して、ON CLUSTER 句を無視します。 - -## ignore_on_cluster_for_replicated_udf_queries {#ignore_on_cluster_for_replicated_udf_queries} - - - -レプリケートされた UDF の管理クエリに対して ON CLUSTER 句を無視します。 - -## implicit_select {#implicit_select} - - - - - -先頭の `SELECT` キーワードなしでシンプルな SELECT クエリを書けるようにします。これにより電卓のような用途で簡単に使うことができ、例えば `1 + 2` のような式も有効なクエリとして扱われます。 - -`clickhouse-local` ではデフォルトで有効になっており、明示的に無効化することもできます。 - -## implicit_table_at_top_level {#implicit_table_at_top_level} - - - -空でない場合、トップレベルで FROM 句を持たないクエリは、`system.one` ではなくこのテーブルから読み取ります。 - -これは clickhouse-local における入力データ処理に使用されます。 -この設定はユーザーが明示的に指定することもできますが、そのような用途を意図したものではありません。 - -副問い合わせ(スカラー副問い合わせ、FROM 句や IN 句を含む副問い合わせなど)は、この設定の影響を受けません。 -UNION、INTERSECT、EXCEPT のチェーンにおけるトップレベルの SELECT 文は、一様に扱われ、この設定の影響を受けます。これは括弧でどのようにグルーピングされているかに関係ありません。 -この設定がビューおよび分散クエリにどのような影響を与えるかは未定義です。 - -この設定にはテーブル名(その場合、テーブルは現在のデータベースから解決されます)、または 'database.table' 形式の修飾名を指定できます。 -database 名と table 名の両方はクォートせずに指定する必要があり、単純識別子のみが許可されます。 - -## implicit_transaction {#implicit_transaction} - - - - - -有効化されていて、かつ既にトランザクション内で実行されていない場合、クエリを完全なトランザクション(begin + commit または rollback)として実行します - -## inject_random_order_for_select_without_order_by {#inject_random_order_for_select_without_order_by} - - - - - -有効化すると、ORDER BY 句を含まない SELECT クエリに対して 'ORDER BY rand()' を挿入します。 -サブクエリの深さが 0 の場合にのみ適用されます。サブクエリおよび INSERT INTO ... SELECT には影響しません。 -トップレベルの構文が UNION の場合、'ORDER BY rand()' はすべての子要素に対して個別に挿入されます。 -テストおよび開発用途にのみ有用です(ORDER BY が指定されていないことは、クエリ結果を非決定的にする原因となります)。 - -## input_format_parallel_parsing {#input_format_parallel_parsing} - - - -データフォーマットの順序を保持した並列パースを有効または無効にします。[TabSeparated (TSV)](/interfaces/formats/TabSeparated)、[TSKV](/interfaces/formats/TSKV)、[CSV](/interfaces/formats/CSV)、[JSONEachRow](/interfaces/formats/JSONEachRow) フォーマットでのみ利用できます。 - -利用可能な値: - -- 1 — 有効。 -- 0 — 無効。 - -## insert_allow_materialized_columns {#insert_allow_materialized_columns} - - - -この設定を有効にすると、INSERT 文で materialized カラムの指定を許可します。 - -## insert_deduplicate {#insert_deduplicate} - - - -`INSERT` のブロック重複排除(Replicated\* テーブル用)を有効または無効にします。 - -指定可能な値: - -- 0 — 無効。 -- 1 — 有効。 - -デフォルトでは、`INSERT` 文によってレプリケートされたテーブルに挿入されるブロックは重複排除されます([Data Replication](../../engines/table-engines/mergetree-family/replication.md) を参照)。 -レプリケートされたテーブルでは、デフォルトで各パーティションについて直近 100 個のブロックのみが重複排除されます([replicated_deduplication_window](merge-tree-settings.md/#replicated_deduplication_window)、[replicated_deduplication_window_seconds](merge-tree-settings.md/#replicated_deduplication_window_seconds) を参照)。 -レプリケートされていないテーブルについては、[non_replicated_deduplication_window](merge-tree-settings.md/#non_replicated_deduplication_window) を参照してください。 - -## insert_deduplication_token - -この設定により、ユーザーは MergeTree/ReplicatedMergeTree において独自の重複排除セマンティクスを指定できます。 -たとえば、各 `INSERT` ステートメントでこの設定に一意な値を指定することで、 -同じデータが挿入された場合に、それが重複として扱われて排除されるのを防ぐことができます。 - -取りうる値: - -* 任意の文字列 - -`insert_deduplication_token` は、空でない場合にのみ重複排除に使用されます。 - -Replicated テーブルでは、デフォルトで各パーティションについて直近 100 件の INSERT のみが重複排除されます([replicated_deduplication_window](merge-tree-settings.md/#replicated_deduplication_window)、[replicated_deduplication_window_seconds](merge-tree-settings.md/#replicated_deduplication_window_seconds) を参照)。 -非 Replicated テーブルについては [non_replicated_deduplication_window](merge-tree-settings.md/#non_replicated_deduplication_window) を参照してください。 - -:::note -`insert_deduplication_token` はパーティション単位で動作します(`insert_deduplication` チェックサムと同様)。複数のパーティションが同じ `insert_deduplication_token` を持つことができます。 -::: - -例: - -```sql -CREATE TABLE test_table -( A Int64 ) -ENGINE = MergeTree -ORDER BY A -SETTINGS non_replicated_deduplication_window = 100; - -INSERT INTO test_table SETTINGS insert_deduplication_token = 'test' VALUES (1); - --- 次の挿入は重複排除されません。insert_deduplication_token が異なるためです -INSERT INTO test_table SETTINGS insert_deduplication_token = 'test1' VALUES (1); - --- 次の挿入は重複排除されます。insert_deduplication_token が --- 以前のいずれかと同じであるためです -INSERT INTO test_table SETTINGS insert_deduplication_token = 'test' VALUES (2); - -SELECT * FROM test_table - -┌─A─┐ -│ 1 │ -└───┘ -┌─A─┐ -│ 1 │ -└───┘ -``` - - -## insert_keeper_fault_injection_probability {#insert_keeper_fault_injection_probability} - - - -挿入処理中の keeper リクエストが失敗するおおよその確率。指定できる値は [0.0f, 1.0f] の範囲です。 - -## insert_keeper_fault_injection_seed {#insert_keeper_fault_injection_seed} - - - -0 - 0 の場合はランダムシード、それ以外の場合は設定値をそのまま使用します - -## insert_keeper_max_retries - - - - - -この設定は、replicated MergeTree テーブルへの INSERT 時に行われる ClickHouse Keeper(または ZooKeeper)リクエストの最大リトライ回数を設定します。ネットワークエラー、Keeper セッションタイムアウト、またはリクエストタイムアウトが原因で失敗した Keeper リクエストのみがリトライ対象となります。 - -取りうる値: - -* 正の整数。 -* 0 — リトライを無効にする - -Cloud でのデフォルト値: `20`。 - -Keeper リクエストのリトライは、一定時間のタイムアウト後に実行されます。タイムアウトは次の設定で制御されます: `insert_keeper_retry_initial_backoff_ms`, `insert_keeper_retry_max_backoff_ms`。 -最初のリトライは `insert_keeper_retry_initial_backoff_ms` のタイムアウト後に実行されます。以降のタイムアウトは次のように計算されます: - -``` -timeout = min(insert_keeper_retry_max_backoff_ms, latest_timeout * 2) -``` - -例えば、`insert_keeper_retry_initial_backoff_ms=100`、`insert_keeper_retry_max_backoff_ms=10000`、`insert_keeper_max_retries=8` の場合、タイムアウト値は `100, 200, 400, 800, 1600, 3200, 6400, 10000` となります。 - -フォールトトレランスに加えて、リトライはユーザーエクスペリエンスの向上も目的としています。例えば Keeper がアップグレードなどにより再起動された場合でも、INSERT の実行中にエラーを返さずに済むようにするためです。 - - -## insert_keeper_retry_initial_backoff_ms {#insert_keeper_retry_initial_backoff_ms} - - - -INSERT クエリ実行中に失敗した Keeper リクエストを再試行するまでの初回待機時間(ミリ秒) - -可能な値: - -- 正の整数。 -- 0 — 待機時間なし - -## insert_keeper_retry_max_backoff_ms {#insert_keeper_retry_max_backoff_ms} - - - -INSERT クエリの実行中に失敗した Keeper リクエストを再試行する際の最大タイムアウト時間(ミリ秒)。 - -設定可能な値: - -- 正の整数。 -- 0 — 最大タイムアウトを無制限にする。 - -## insert_null_as_default {#insert_null_as_default} - - - -[NULL](/sql-reference/syntax#null) の代わりに、[Nullable](/sql-reference/data-types/nullable) ではないデータ型のカラムに [default values](/sql-reference/statements/create/table#default_values) を挿入するかどうかを制御します。 -カラムの型が Nullable ではなく、この設定が無効になっている場合、`NULL` を挿入すると例外が発生します。カラムの型が Nullable の場合、この設定に関わらず `NULL` の値はそのまま挿入されます。 - -この設定は [INSERT ... SELECT](../../sql-reference/statements/insert-into.md/#inserting-the-results-of-select) クエリに適用されます。`SELECT` サブクエリは `UNION ALL` 句で連結される場合があることに注意してください。 - -可能な値: - -- 0 — Nullable ではないカラムに `NULL` を挿入すると例外が発生します。 -- 1 — `NULL` の代わりにカラムのデフォルト値が挿入されます。 - -## insert_quorum {#insert_quorum} - - - -:::note -この設定は SharedMergeTree には適用されません。詳細は [SharedMergeTree の一貫性](/cloud/reference/shared-merge-tree#consistency) を参照してください。 -::: - -クォーラム書き込みを有効にします。 - -- `insert_quorum < 2` の場合、クォーラム書き込みは無効です。 -- `insert_quorum >= 2` の場合、クォーラム書き込みは有効です。 -- `insert_quorum = 'auto'` の場合、クォーラム数として過半数(`number_of_replicas / 2 + 1`)を使用します。 - -クォーラム書き込み - -`INSERT` は、ClickHouse が `insert_quorum_timeout` の間に `insert_quorum` 個のレプリカへ正しくデータを書き込めた場合にのみ成功します。何らかの理由で書き込みに成功したレプリカ数が `insert_quorum` に達しない場合、その書き込みは失敗と見なされ、ClickHouse はすでにデータが書き込まれているすべてのレプリカから挿入済みブロックを削除します。 - -`insert_quorum_parallel` が無効な場合、クォーラム内のすべてのレプリカは整合しています。つまり、すべての過去の `INSERT` クエリのデータを保持しています(`INSERT` のシーケンスは線形化されます)。`insert_quorum` を使用して書き込まれたデータを読み取り、かつ `insert_quorum_parallel` が無効な場合、[`select_sequential_consistency`](#select_sequential_consistency) を使用して `SELECT` クエリに逐次一貫性を有効にできます。 - -ClickHouse は次の場合に例外をスローします: - -- クエリ時点で利用可能なレプリカ数が `insert_quorum` 未満の場合。 -- `insert_quorum_parallel` が無効な状態で、前のブロックがまだレプリカの `insert_quorum` に挿入されていないうちにデータを書き込もうとした場合。この状況は、ユーザーが、`insert_quorum` を指定した前の `INSERT` が完了する前に、同じテーブルに対して別の `INSERT` クエリを実行しようとしたときに発生する可能性があります。 - -あわせて参照: - -- [insert_quorum_timeout](#insert_quorum_timeout) -- [insert_quorum_parallel](#insert_quorum_parallel) -- [select_sequential_consistency](#select_sequential_consistency) - -## insert_quorum_parallel {#insert_quorum_parallel} - - - - - -:::note -この設定は SharedMergeTree には適用されません。詳しくは [SharedMergeTree の一貫性](/cloud/reference/shared-merge-tree#consistency) を参照してください。 -::: - -クォーラム付き `INSERT` クエリに対する並列実行を有効または無効にします。有効な場合、前のクエリがまだ完了していなくても、追加の `INSERT` クエリを送信できます。無効な場合、同じテーブルへの追加の書き込みは拒否されます。 - -設定可能な値: - -- 0 — 無効。 -- 1 — 有効。 - -関連項目: - -- [insert_quorum](#insert_quorum) -- [insert_quorum_timeout](#insert_quorum_timeout) -- [select_sequential_consistency](#select_sequential_consistency) - -## insert_quorum_timeout {#insert_quorum_timeout} - - - -クオラムへの書き込みのタイムアウトをミリ秒単位で指定します。タイムアウトまでに書き込みが行われなかった場合、ClickHouse は例外をスローし、クライアントは同じブロックを同じレプリカまたは別のレプリカに書き込むためにクエリを再実行する必要があります。 - -関連項目: - -- [insert_quorum](#insert_quorum) -- [insert_quorum_parallel](#insert_quorum_parallel) -- [select_sequential_consistency](#select_sequential_consistency) - -## insert_shard_id - - - -`0` 以外の場合、データを同期的に挿入する [Distributed](/engines/table-engines/special/distributed) テーブルのシャードを指定します。 - -`insert_shard_id` の値が正しくない場合、サーバーは例外を送出します。 - -`requested_cluster` 上のシャード数を取得するには、サーバー構成を確認するか、次のクエリを使用します。 - -```sql -SELECT uniq(shard_num) FROM system.clusters WHERE cluster = 'requested_cluster'; -``` - -指定可能な値: - -* 0 — 無効。 -* 対応する [Distributed](/engines/table-engines/special/distributed) テーブルにおける `1` から `shards_num` までの任意の数値。 - -**例** - -クエリ: - -```sql -CREATE TABLE x AS system.numbers ENGINE = MergeTree ORDER BY number; -CREATE TABLE x_dist AS x ENGINE = Distributed('test_cluster_two_shards_localhost', currentDatabase(), x); -INSERT INTO x_dist SELECT * FROM numbers(5) SETTINGS insert_shard_id = 1; -SELECT * FROM x_dist ORDER BY number ASC; -``` - -結果: - -```text -┌─number─┐ -│ 0 │ -│ 0 │ -│ 1 │ -│ 1 │ -│ 2 │ -│ 2 │ -│ 3 │ -│ 3 │ -│ 4 │ -│ 4 │ -└────────┘ -``` - - -## interactive_delay {#interactive_delay} - - - -リクエストの実行がキャンセルされているかを確認し、進捗情報を送信するための間隔(マイクロ秒単位)。 - -## intersect_default_mode {#intersect_default_mode} - - - -INTERSECT クエリにおけるデフォルトモードを設定します。指定可能な値: 空文字列、'ALL'、'DISTINCT'。空文字列に設定した場合、モードを指定しないクエリは例外をスローします。 - -## jemalloc_collect_profile_samples_in_trace_log {#jemalloc_collect_profile_samples_in_trace_log} - - - - - -jemalloc によるメモリ割り当ておよび解放のサンプルをトレースログ内に収集します。 - -## jemalloc_enable_profiler {#jemalloc_enable_profiler} - - - - - -クエリに対して jemalloc プロファイラを有効にします。jemalloc はメモリ割り当てをサンプリングし、サンプリングされた割り当てに対するすべての解放を記録します。 -プロファイルは、メモリ割り当ての分析に利用できる SYSTEM JEMALLOC FLUSH PROFILE を使用してフラッシュできます。 -サンプルは、設定 jemalloc_collect_global_profile_samples_in_trace_log、またはクエリ設定 jemalloc_collect_profile_samples_in_trace_log を使用して system.trace_log に保存することもできます。 -詳細は [アロケーションプロファイリング](/operations/allocation-profiling) を参照してください。 - -## join_algorithm {#join_algorithm} - - - - - -使用される [JOIN](../../sql-reference/statements/select/join.md) アルゴリズムを指定します。 - -複数のアルゴリズムを指定でき、クエリごとに種類/厳密さとテーブルエンジンに基づいて利用可能なものが選択されます。 - -指定可能な値: - -- grace_hash - -[Grace hash join](https://en.wikipedia.org/wiki/Hash_join#Grace_hash_join) が使用されます。Grace hash は、メモリ使用量を制限しつつ複雑な join を高い性能で実行できるアルゴリズムの選択肢です。 - -Grace join の第 1 フェーズでは右テーブルを読み取り、キー列のハッシュ値に応じて N 個のバケットに分割します (初期値の N は `grace_hash_join_initial_buckets`)。これは、それぞれのバケットを独立して処理できるようにするためです。最初のバケットの行はインメモリのハッシュテーブルに追加され、残りはディスクに保存されます。ハッシュテーブルがメモリ制限 (例えば [`max_bytes_in_join`](/operations/settings/settings#max_bytes_in_join) で設定された値) を超えて成長した場合、バケット数が増加し、各行に割り当てられるバケットが再計算されます。現在のバケットに属さない行はフラッシュされて再割り当てされます。 - -`INNER/LEFT/RIGHT/FULL ALL/ANY JOIN` をサポートします。 - -- hash - -[Hash join アルゴリズム](https://en.wikipedia.org/wiki/Hash_join) が使用されます。種類と厳密さのあらゆる組み合わせ、および `JOIN ON` 節で `OR` で結合される複数の join キーをサポートする最も汎用的な実装です。 - -`hash` アルゴリズムを使用する場合、`JOIN` の右側は RAM にロードされます。 - -- parallel_hash - -データをバケットに分割し、1 つではなく複数のハッシュテーブルを並行して構築することで処理を高速化する、`hash` join のバリエーションです。 - -`parallel_hash` アルゴリズムを使用する場合、`JOIN` の右側は RAM にロードされます。 - -- partial_merge - -[ソートマージアルゴリズム](https://en.wikipedia.org/wiki/Sort-merge_join) の変種で、右テーブルのみが完全にソートされます。 - -`RIGHT JOIN` と `FULL JOIN` は `ALL` 厳密さでのみサポートされます (`SEMI`、`ANTI`、`ANY`、`ASOF` はサポートされません)。 - -`partial_merge` アルゴリズムを使用する場合、ClickHouse はデータをソートしてディスクに書き出します。ClickHouse における `partial_merge` アルゴリズムは、古典的な実装とは若干異なります。まず、ClickHouse は右テーブルを join キーでブロック単位にソートし、ソート済みブロックに対して min-max インデックスを作成します。次に、左テーブルの一部を `join key` でソートし、右テーブルと join します。このとき、不要な右テーブルブロックをスキップするために min-max インデックスも使用されます。 - -- direct - -右テーブルのストレージがキー値リクエストをサポートしている場合に適用できるアルゴリズムです。 - -`direct` アルゴリズムは、左テーブルの行をキーとして使用し、右テーブルをルックアップします。これは [Dictionary](/engines/table-engines/special/dictionary) や [EmbeddedRocksDB](../../engines/table-engines/integrations/embedded-rocksdb.md) のような特殊なストレージでのみサポートされ、かつ `LEFT` および `INNER` JOIN のみが対象です。 - -- auto - -`auto` に設定すると、最初に `hash` join が試行され、メモリ制限に違反した場合には、その場で別のアルゴリズムに切り替えられます。 - -- full_sorting_merge - -結合前に両テーブルを完全にソートしてから実行する [ソートマージアルゴリズム](https://en.wikipedia.org/wiki/Sort-merge_join) です。 - -- prefer_partial_merge - -可能な場合は常に `partial_merge` join を使用し、それ以外の場合は `hash` を使用します。*非推奨* で、`partial_merge,hash` と同じです。 - -- default (deprecated) - -レガシーな値のため、今後は使用しないでください。 -`direct,hash` と同じであり、(この順序で) direct join と hash join の利用を試行します。 - -## join_any_take_last_row {#join_any_take_last_row} - - - -`ANY` 厳密モードの JOIN の動作を変更します。 - -:::note -この設定は、[Join](../../engines/table-engines/special/join.md) エンジンのテーブルに対する `JOIN` 演算にのみ適用されます。 -::: - -設定可能な値: - -- 0 — 右側のテーブルに複数の一致する行がある場合、最初に見つかった 1 行だけが結合されます。 -- 1 — 右側のテーブルに複数の一致する行がある場合、最後に見つかった 1 行だけが結合されます。 - -関連項目: - -- [JOIN 句](/sql-reference/statements/select/join) -- [Join テーブルエンジン](../../engines/table-engines/special/join.md) -- [join_default_strictness](#join_default_strictness) - -## join_default_strictness {#join_default_strictness} - - - -[JOIN 句](/sql-reference/statements/select/join)のデフォルトの厳密さを設定します。 - -設定可能な値: - -- `ALL` — 右側のテーブルに複数の一致する行がある場合、ClickHouse はそれらの行から[デカルト積](https://en.wikipedia.org/wiki/Cartesian_product)を生成します。これは標準 SQL における通常の `JOIN` の動作です。 -- `ANY` — 右側のテーブルに複数の一致する行がある場合、最初に見つかった 1 行だけが結合されます。右側のテーブルに一致する行が 1 行しかない場合、`ANY` と `ALL` の結果は同じになります。 -- `ASOF` — 一致があいまいなシーケンスを結合するために使用します。 -- `Empty string` — クエリ内で `ALL` または `ANY` が指定されていない場合、ClickHouse は例外をスローします。 - -## join_on_disk_max_files_to_merge {#join_on_disk_max_files_to_merge} - - - -ディスク上で実行される `MergeJoin` 処理において、並列ソートに使用できるファイル数の上限を指定します。 - -この設定値が大きいほど、より多くのメモリが使用されますが、必要なディスク I/O は少なくなります。 - -設定可能な値: - -- 2 以上の任意の正の整数。 - -## join_output_by_rowlist_perkey_rows_threshold {#join_output_by_rowlist_perkey_rows_threshold} - - - - - -ハッシュ結合において行リスト出力を行うかどうかを判定するための、右テーブルにおけるキーごとの平均行数の下限値。 - -## join_overflow_mode {#join_overflow_mode} - - - -次のいずれかの結合制限に到達したときに、ClickHouse が実行する挙動を定義します: - -- [max_bytes_in_join](/operations/settings/settings#max_bytes_in_join) -- [max_rows_in_join](/operations/settings/settings#max_rows_in_join) - -指定可能な値: - -- `THROW` — ClickHouse は例外をスローし、処理を中断します。 -- `BREAK` — ClickHouse は処理を中断し、例外はスローしません。 - -デフォルト値: `THROW` - -**関連項目** - -- [JOIN 句](/sql-reference/statements/select/join) -- [Join テーブルエンジン](/engines/table-engines/special/join) - -## join_runtime_bloom_filter_bytes {#join_runtime_bloom_filter_bytes} - - - - - - - -JOIN ランタイムフィルターとして使用される Bloom フィルターのサイズ(バイト単位)。`enable_join_runtime_filters` 設定を参照。 - -## join_runtime_bloom_filter_hash_functions {#join_runtime_bloom_filter_hash_functions} - - - - - - - -JOIN のランタイムフィルターとして使用される Bloom フィルターにおけるハッシュ関数の数(enable_join_runtime_filters 設定を参照)。 - -## join_runtime_filter_exact_values_limit {#join_runtime_filter_exact_values_limit} - - - - - - - -ランタイムフィルタ内で、そのまま set として格納される要素数の上限。このしきい値を超えると、ランタイムフィルタは Bloom フィルタ方式に切り替わります。 - -## join_to_sort_maximum_table_rows {#join_to_sort_maximum_table_rows} - - - - - - - -LEFT JOIN または INNER JOIN において、右テーブルをキーで再ソートするかどうかを判断するための、右テーブルの最大行数。 - -## join_to_sort_minimum_perkey_rows {#join_to_sort_minimum_perkey_rows} - - - - - - - -左結合または内部結合において、右テーブルをキーで再ソートするかどうかを判断するための、右テーブル側のキーごとの平均行数の下限値。この設定により、キー分布がスパースなテーブルに対してはこの最適化が適用されないようにします - -## join_use_nulls {#join_use_nulls} - - - -[JOIN](../../sql-reference/statements/select/join.md) の動作の種類を設定します。テーブルを結合すると、空のセルが発生する場合があります。この設定に応じて、ClickHouse はそれらを異なる方法で埋めます。 - -取りうる値: - -- 0 — 空のセルは、対応するフィールド型のデフォルト値で埋められます。 -- 1 — `JOIN` は標準 SQL と同じように動作します。対応するフィールドの型は [Nullable](/sql-reference/data-types/nullable) に変換され、空のセルは [NULL](/sql-reference/syntax) で埋められます。 - -## joined_block_split_single_row {#joined_block_split_single_row} - - - - - -左テーブルの単一行に対応する行単位で、ハッシュ結合結果をチャンクに分割できるようにします。 -これは、右テーブル側に多数のマッチを持つ行が存在する場合のメモリ使用量を削減するのに役立ちますが、CPU 使用量が増加する可能性があります。 -この設定を有効に機能させるには、`max_joined_block_size_rows != 0` であることが必須です。 -この設定と組み合わせて使用する `max_joined_block_size_bytes` は、右テーブル側に多数のマッチを持つ大きな行を含むような偏りのあるデータの場合に、過剰なメモリ使用を回避するのに役立ちます。 - -## joined_subquery_requires_alias {#joined_subquery_requires_alias} - - - -正しく名前を修飾するために、結合に用いるサブクエリおよびテーブル関数にはエイリアスの指定を必須とします。 - -## kafka_disable_num_consumers_limit {#kafka_disable_num_consumers_limit} - - - -利用可能な CPU コア数に依存する `kafka_num_consumers` の制限を無効にします。 - -## kafka_max_wait_ms {#kafka_max_wait_ms} - - - -[Kafka](/engines/table-engines/integrations/kafka) からメッセージを読み取る際に、再試行を行うまで待機する時間(ミリ秒単位)。 - -可能な値: - -- 正の整数。 -- 0 — タイムアウトなし(無制限)。 - -関連項目: - -- [Apache Kafka](https://kafka.apache.org/) - -## keeper_map_strict_mode {#keeper_map_strict_mode} - - - -KeeperMap に対する操作時に追加のチェックを行います。例えば、すでに存在するキーを挿入しようとした場合には例外をスローします。 - -## keeper_max_retries {#keeper_max_retries} - - - - - -一般的な Keeper 操作に対する最大再試行回数 - -## keeper_retry_initial_backoff_ms {#keeper_retry_initial_backoff_ms} - - - - - -Keeper の一般的な操作に対するリトライの初期バックオフ待機時間 - -## keeper_retry_max_backoff_ms {#keeper_retry_max_backoff_ms} - - - - - -一般的な Keeper 操作向けバックオフの最大タイムアウト - -## least_greatest_legacy_null_behavior {#least_greatest_legacy_null_behavior} - - - - - -有効にすると、`least` 関数および `greatest` 関数は、いずれかの引数が NULL の場合に NULL を返します。 - -## legacy_column_name_of_tuple_literal {#legacy_column_name_of_tuple_literal} - - - - - -大きなタプルリテラルについて、要素名をハッシュではなく列名としてすべて列挙します。この設定は互換性のためだけに存在します。バージョン 21.7 未満からそれ以降のバージョンへクラスタをローリングアップデートする際にのみ、'true' に設定する意味があります。 - -## lightweight_delete_mode {#lightweight_delete_mode} - - - - - -軽量削除の一部として実行される、内部の UPDATE クエリのモードです。 - -設定可能な値: - -- `alter_update` - 重いミューテーションを作成する `ALTER UPDATE` クエリを実行します。 -- `lightweight_update` - 可能であれば軽量更新を実行し、不可能な場合は `ALTER UPDATE` を実行します。 -- `lightweight_update_force` - 可能であれば軽量更新を実行し、不可能な場合は例外をスローします。 - -## lightweight_deletes_sync {#lightweight_deletes_sync} - - - - - -[`mutations_sync`](#mutations_sync) と同様ですが、`lightweight delete` の実行のみを制御します。 - -設定可能な値: - -| Value | Description | -|-------|-------------------------------------------------------------------------------------------------------------------------------------------------------| -| `0` | mutation は非同期で実行されます。 | -| `1` | クエリは、現在のサーバー上で `lightweight delete` が完了するまで待機します。 | -| `2` | クエリは、すべてのレプリカ(存在する場合)で `lightweight delete` が完了するまで待機します。 | -| `3` | クエリはアクティブなレプリカのみを待機します。`SharedMergeTree` でのみサポートされます。`ReplicatedMergeTree` では `mutations_sync = 2` と同様に動作します。| - -**関連項目** - -- [ALTER クエリの同期性](../../sql-reference/statements/alter/index.md/#synchronicity-of-alter-queries) -- [Mutations](../../sql-reference/statements/alter/index.md/#mutations) - -## limit {#limit} - - - -クエリ結果から取得する行数の上限を設定します。クエリ内で設定された [LIMIT](/sql-reference/statements/select/limit) 句の値に対する上限として機能し、クエリで指定された上限がこの設定で定めた上限を超えないようにします。 - -設定可能な値: - -- 0 — 行数を制限しません。 -- 正の整数。 - -## load_balancing {#load_balancing} - - - -分散クエリ処理で使用するレプリカ選択アルゴリズムを指定します。 - -ClickHouse は、レプリカを選択するためのアルゴリズムとして次の方式をサポートします。 - -- [Random(ランダム)](#load_balancing-random)(デフォルト) -- [Nearest hostname(最も近いホスト名)](#load_balancing-nearest_hostname) -- [Hostname levenshtein distance(ホスト名のレーベンシュタイン距離)](#load_balancing-hostname_levenshtein_distance) -- [In order(順番どおり)](#load_balancing-in_order) -- [First or random(先頭またはランダム)](#load_balancing-first_or_random) -- [Round robin(ラウンドロビン)](#load_balancing-round_robin) - -関連項目: - -- [distributed_replica_max_ignored_errors](#distributed_replica_max_ignored_errors) - -### ランダム(デフォルト) - -```sql -load_balancing = random -``` - -エラー数は各レプリカごとにカウントされます。クエリはエラー数が最も少ないレプリカに送信され、該当するレプリカが複数ある場合はいずれか 1 つに送信されます。 -欠点: サーバー間の近接性は考慮されません。また、レプリカごとに保持しているデータが異なる場合、取得されるデータも異なります。 - - -### 最寄りのホスト名 - -```sql -load_balancing = nearest_hostname -``` - -エラー数は各レプリカごとにカウントされます。5分ごとに、エラー数は整数除算で 2 で割られます。これにより、エラー数は直近の期間に対して指数平滑化された形で算出されます。1 つのレプリカだけが最小のエラー数である場合(つまり、他のレプリカでは最近エラーが発生している場合)、クエリはそのレプリカに送信されます。同じ最小エラー数を持つレプリカが複数ある場合、クエリは設定ファイル内で定義されたサーバーのホスト名と最も類似したホスト名を持つレプリカに送信されます(両方のホスト名のうち短い方の長さまで、同じ位置にある文字の相違数に基づいて判断します)。 - -たとえば、example01-01-1 と example01-01-2 は 1 文字だけ異なりますが、example01-01-1 と example01-02-2 は 2 か所異なります。 -この方法は単純に見えるかもしれませんが、ネットワークトポロジーに関する外部データを必要とせず、また IPv6 アドレスでは扱いが複雑になる IP アドレスの比較も行いません。 - -したがって、レプリカが同等である場合は、ホスト名が最も近いものが優先されます。 -また、障害がない限り、同じサーバーにクエリを送信すると、分散クエリも同じサーバー群に送られるとみなせます。そのため、たとえレプリカに配置されているデータが異なっていても、クエリはほぼ同じ結果を返します。 - - -### ホスト名のレーベンシュタイン距離 - -```sql -load_balancing = hostname_levenshtein_distance -``` - -`nearest_hostname` と同様ですが、ホスト名を [レーベンシュタイン距離](https://en.wikipedia.org/wiki/Levenshtein_distance) に基づいて比較します。例えば、次のようになります: - -```text -example-clickhouse-0-0 ample-clickhouse-0-0 -1 - -example-clickhouse-0-0 example-clickhouse-1-10 -2 - -example-clickhouse-0-0 example-clickhouse-12-0 -3 -``` - - -### この順序で - -```sql -load_balancing = in_order -``` - -エラー数が同じレプリカには、設定で指定された順序どおりにアクセスされます。 -この方式は、どのレプリカを優先すべきかを正確に把握している場合に適しています。 - - -### 先頭 または ランダム - -```sql -load_balancing = first_or_random -``` - -このアルゴリズムは、セット内の最初のレプリカを選択し、最初のレプリカが利用できない場合はランダムなレプリカを選択します。クロスレプリケーショントポロジの構成では有効ですが、その他の構成では有効ではありません。 - -`first_or_random` アルゴリズムは、`in_order` アルゴリズムの問題を解決します。`in_order` では、1 つのレプリカがダウンすると、次のレプリカが通常の 2 倍の負荷を受け、その間も残りのレプリカは通常どおりのトラフィック量のみを処理します。`first_or_random` アルゴリズムを使用すると、まだ利用可能なレプリカ間で負荷が均等に分散されます。 - -設定項目 `load_balancing_first_offset` を使用して、どのレプリカを「最初の」レプリカとみなすかを明示的に定義できます。これにより、レプリカ間でのクエリワークロードの再分散を、より細かく制御できるようになります。 - - -### ラウンドロビン - -```sql -load_balancing = round_robin -``` - -このアルゴリズムでは、エラー数が同じレプリカ間でラウンドロビン方式を用います(対象となるのは `round_robin` ポリシーが指定されたクエリのみです)。 - - -## load_balancing_first_offset {#load_balancing_first_offset} - - - -FIRST_OR_RANDOM ロードバランシング戦略を使用する際に、優先的にクエリを送信するレプリカの番号。 - -## load_marks_asynchronously {#load_marks_asynchronously} - - - -MergeTree のマークを非同期で読み込む - -## local_filesystem_read_method {#local_filesystem_read_method} - - - -ローカルファイルシステムからデータを読み取る方法です。次のいずれかを指定します: read, pread, mmap, io_uring, pread_threadpool。 - -`io_uring` メソッドは実験的なものであり、Log、TinyLog、StripeLog、File、Set、Join など、追記可能なファイルを持つテーブルに対しては、読み取りと書き込みが同時に行われる状況では動作しません。 -インターネット上の `io_uring` に関するさまざまな記事を読んでも、それらに惑わされないでください。`io_uring` は、大量の小さな IO リクエストが発生するケース(ClickHouse では該当しないケース)を除いて、ファイル読み取りにおいて特に優れた方法ではありません。`io_uring` を有効化する理由はありません。 - -## local_filesystem_read_prefetch {#local_filesystem_read_prefetch} - - - -ローカルファイルシステムからデータを読み込む際にプリフェッチを使用するかどうかを指定します。 - -## lock_acquire_timeout {#lock_acquire_timeout} - - - -ロックリクエストが失敗するまで待機する秒数を定義します。 - -ロックタイムアウトは、テーブルに対する読み取り/書き込み操作の実行中にデッドロックを防ぐために使用されます。タイムアウトに達してロックリクエストが失敗すると、ClickHouse サーバーはエラーコード `DEADLOCK_AVOIDED` とともに、例外 "Locking attempt timed out! Possible deadlock avoided. Client should retry." をスローします。 - -設定可能な値: - -- 正の整数(秒)。 -- 0 — ロックタイムアウトなし。 - -## log_comment - -[system.query_log](../system-tables/query_log.md) テーブルの `log_comment` フィールドの値と、サーバーログ用のコメントテキストを指定します。 - -サーバーログの可読性を向上させるために使用できます。さらに、[clickhouse-test](../../development/tests.md) の実行後に `system.query_log` からテストに関連するクエリを抽出するのにも役立ちます。 - -指定可能な値: - -* [max_query_size](#max_query_size) 以下の任意の文字列。max_query_size を超えた場合、サーバーは例外をスローします。 - -**例** - -クエリ: - -```sql -SET log_comment = 'log_comment test', log_queries = 1; -SELECT 1; -SYSTEM FLUSH LOGS; -SELECT type, query FROM system.query_log WHERE log_comment = 'log_comment test' AND event_date >= yesterday() ORDER BY event_time DESC LIMIT 2; -``` - -結果: - -```text -┌─type────────┬─query─────┐ -│ QueryStart │ SELECT 1; │ -│ QueryFinish │ SELECT 1; │ -└─────────────┴───────────┘ -``` - - -## log_formatted_queries {#log_formatted_queries} - - - -フォーマット済みクエリを [system.query_log](../../operations/system-tables/query_log.md) システムテーブルにログとして記録できるようにします([system.query_log](../../operations/system-tables/query_log.md) の `formatted_query` 列に値を設定します)。 - -設定可能な値: - -- 0 — フォーマット済みクエリはシステムテーブルに記録されません。 -- 1 — フォーマット済みクエリはシステムテーブルに記録されます。 - -## log_processors_profiles {#log_processors_profiles} - - - - - -プロセッサが実行中およびデータ待機中に費やした時間を、`system.processors_profile_log` テーブルに書き込みます。 - -関連項目: - -- [`system.processors_profile_log`](../../operations/system-tables/processors_profile_log.md) -- [`EXPLAIN PIPELINE`](../../sql-reference/statements/explain.md/#explain-pipeline) - -## log_profile_events {#log_profile_events} - - - -クエリのパフォーマンスに関する統計情報を、`query_log`、`query_thread_log`、`query_views_log` に記録します。 - -## log_queries - - - -クエリログの設定を行います。 - -この設定を有効にすると、ClickHouse に送信されたクエリは、[query_log](../../operations/server-configuration-parameters/settings.md/#query_log) サーバー設定パラメータのルールに従って記録されます。 - -例: - -```text -log_queries=1 -``` - - -## log_queries_cut_to_length {#log_queries_cut_to_length} - - - -クエリの長さが指定したしきい値(バイト数)を超える場合、クエリログへの書き込み時にクエリを途中で切ります。また、通常のテキストログに出力されるクエリ文字列の長さも制限します。 - -## log_queries_min_query_duration_ms {#log_queries_min_query_duration_ms} - - - -有効になっている場合(0 以外)、この設定値より速く完了したクエリはログに記録されません([MySQL Slow Query Log](https://dev.mysql.com/doc/refman/5.7/slow-query-log.html) における `long_query_time` のようなものと考えることができます)。つまり、それらのクエリは次のテーブルには含まれません。 - -- `system.query_log` -- `system.query_thread_log` - -次のタイプを持つクエリのみがログに記録されます。 - -- `QUERY_FINISH` -- `EXCEPTION_WHILE_PROCESSING` - -- タイプ: ミリ秒 -- デフォルト値: 0(すべてのクエリ) - -## log_queries_min_type - - - -`query_log` に書き込むレコードの最小タイプ。 - -利用可能な値: - -* `QUERY_START` (`=1`) -* `QUERY_FINISH` (`=2`) -* `EXCEPTION_BEFORE_START` (`=3`) -* `EXCEPTION_WHILE_PROCESSING` (`=4`) - -`query_log` に記録される対象を制限するために使用できます。たとえば、エラーのみに関心がある場合は `EXCEPTION_WHILE_PROCESSING` を使用します。 - -```text -log_queries_min_type='EXCEPTION_WHILE_PROCESSING' -``` - - -## log_queries_probability {#log_queries_probability} - - - -指定した確率に基づいて、[query_log](../../operations/system-tables/query_log.md)、[query_thread_log](../../operations/system-tables/query_thread_log.md)、および [query_views_log](../../operations/system-tables/query_views_log.md) システムテーブルに記録されるクエリのうち、一部のみをランダムにサンプリングして書き込むようにします。1 秒あたりのクエリ数が非常に多い場合の負荷軽減に役立ちます。 - -取り得る値は次のとおりです。 - -- 0 — システムテーブルにはクエリが記録されません。 -- [0..1] の範囲の正の浮動小数点数。例えば設定値が `0.5` の場合、おおよそ半分のクエリがシステムテーブルに記録されます。 -- 1 — すべてのクエリがシステムテーブルに記録されます。 - -## log_query_settings {#log_query_settings} - - - -query_log と OpenTelemetry の span ログにクエリ設定を記録します。 - -## log_query_threads - - - -クエリスレッドのログ記録を構成します。 - -クエリスレッドは [system.query_thread_log](../../operations/system-tables/query_thread_log.md) テーブルにログ出力されます。この設定は [log_queries](#log_queries) が true の場合にのみ有効です。この設定により ClickHouse が実行するクエリのスレッドは、[query_thread_log](/operations/server-configuration-parameters/settings#query_thread_log) サーバー設定パラメータで定義されたルールに従って記録されます。 - -設定可能な値: - -* 0 — 無効。 -* 1 — 有効。 - -**例** - -```text -log_query_threads=1 -``` - - -## log_query_views - - - -クエリビューのログ記録を設定します。 - -この設定を有効にした状態で ClickHouse によって実行されたクエリに関連するビュー(マテリアライズドビューまたはライブビュー)がある場合、それらは [query_views_log](/operations/server-configuration-parameters/settings#query_views_log) サーバー設定パラメータに記録されます。 - -例: - -```text -log_query_views=1 -``` - - -## low_cardinality_allow_in_native_format {#low_cardinality_allow_in_native_format} - - - -[Native](/interfaces/formats/Native) フォーマットで [LowCardinality](../../sql-reference/data-types/lowcardinality.md) データ型を使用できるかどうかを制御します。 - -`LowCardinality` の使用が制限されている場合、ClickHouse サーバーは `SELECT` クエリに対して `LowCardinality` 列を通常の列に変換し、`INSERT` クエリに対して通常の列を `LowCardinality` 列に変換します。 - -この設定は主に、`LowCardinality` データ型をサポートしていないサードパーティクライアント向けに必要となります。 - -可能な値: - -- 1 — `LowCardinality` の使用は制限されません。 -- 0 — `LowCardinality` の使用は制限されます。 - -## low_cardinality_max_dictionary_size {#low_cardinality_max_dictionary_size} - - - -[LowCardinality](../../sql-reference/data-types/lowcardinality.md) データ型用の共有グローバル辞書について、ストレージファイルシステムに書き込むことができる最大サイズ(行数)を設定します。この設定により、辞書が無制限に増加した場合の RAM に関する問題を防止します。最大辞書サイズの制限によりエンコードできないデータはすべて、ClickHouse によって通常の方法で書き込まれます。 - -取り得る値: - -- 任意の正の整数。 - -## low_cardinality_use_single_dictionary_for_part {#low_cardinality_use_single_dictionary_for_part} - - - -データパートに対して単一の辞書のみを使用するかどうかを有効または無効にします。 - -デフォルトでは、ClickHouse サーバーは辞書のサイズを監視し、ある辞書がオーバーフローすると次の辞書への書き込みを開始します。複数の辞書の作成を禁止するには、`low_cardinality_use_single_dictionary_for_part = 1` を設定します。 - -設定可能な値: - -- 1 — データパートに対して複数の辞書を作成することを禁止します。 -- 0 — データパートに対して複数の辞書を作成することを禁止しません。 - -## low_priority_query_wait_time_ms {#low_priority_query_wait_time_ms} - - - - - - - -クエリの優先順位付けメカニズムが使用されている場合(設定 `priority` を参照)、低優先度のクエリは高優先度のクエリが終了するまで待機します。この設定で、その待機時間を指定します。 - -## make_distributed_plan {#make_distributed_plan} - - - - - - - -分散クエリプランを作成します。 - -## materialize_skip_indexes_on_insert {#materialize_skip_indexes_on_insert} - - - - - -この設定が有効な場合、`INSERT` 時にスキップインデックスが構築・保存されます。無効な場合、スキップインデックスは [マージ時](merge-tree-settings.md/#materialize_skip_indexes_on_merge) もしくは明示的な [MATERIALIZE INDEX](/sql-reference/statements/alter/skipping-index.md/#materialize-index) によってのみ構築および保存されます。 - -[exclude_materialize_skip_indexes_on_insert](#exclude_materialize_skip_indexes_on_insert) も参照してください。 - -## materialize_statistics_on_insert {#materialize_statistics_on_insert} - - - - - -有効な場合、`INSERT` 実行時に統計情報が構築されて書き込まれます。無効な場合は、統計情報はマージ処理中、または明示的な `MATERIALIZE STATISTICS` によって構築および保存されます。 - -## materialize_ttl_after_modify {#materialize_ttl_after_modify} - - - -ALTER MODIFY TTL クエリの実行後に、古いデータへ TTL を適用します。 - -## materialized_views_ignore_errors {#materialized_views_ignore_errors} - - - -MATERIALIZED VIEW で発生したエラーを無視し、マテリアライズドビューに関係なく元のブロックをテーブルに書き込めるようにします - -## materialized_views_squash_parallel_inserts {#materialized_views_squash_parallel_inserts} - - - - - -単一の INSERT クエリでマテリアライズドビューの宛先テーブルに対して行われる並列インサートをまとめ、生成されるパーツ数を削減します。 -false に設定され、かつ `parallel_view_processing` が有効な場合、INSERT クエリは宛先テーブルに対して `max_insert_thread` の各スレッドごとにパーツを生成します。 - -## max_analyze_depth {#max_analyze_depth} - - - -インタープリタが行う解析の最大数です。 - -## max_ast_depth {#max_ast_depth} - - - -クエリの構文木における最大のネスト深さです。これを超えると例外がスローされます。 - -:::note -現時点では、解析中ではなく、クエリの解析後にのみチェックされます。 -つまり、解析中に深さが深すぎる構文木が生成される可能性がありますが、 -その場合、そのクエリは失敗します。 -::: - -## max_ast_elements {#max_ast_elements} - - - -クエリの構文木に含めることができる要素数の上限です。これを超えると例外がスローされます。 - -:::note -現時点では、構文解析中ではなく、クエリの構文解析が完了した後にのみチェックされます。 -つまり、構文解析の過程で深さが大きすぎる構文木が生成される可能性がありますが、 -その場合、そのクエリは失敗します。 -::: - -## max_autoincrement_series {#max_autoincrement_series} - - - - - -`generateSerialID` 関数によって作成されるシリーズ数の上限です。 - -各シリーズは Keeper 内のノードを表すため、その数は数百万程度を上限とすることを推奨します。 - -## max_backup_bandwidth {#max_backup_bandwidth} - - - -サーバー上の特定のバックアップの最大読み取り速度(バイト/秒)。0 の場合は無制限です。 - -## max_block_size {#max_block_size} - - - -ClickHouse では、データはブロック単位で処理されます。ブロックとは、複数のカラムパーツの集合です。1 つのブロックに対する内部処理サイクルは効率的ですが、各ブロックを処理する際には無視できないコストが発生します。 - -`max_block_size` 設定は、テーブルからデータを読み込む際に 1 つのブロックに含める推奨の最大行数を示します。常に `max_block_size` の大きさのブロックがテーブルから読み込まれるとは限りません。ClickHouse が、取得すべきデータ量がより少ないと判断した場合には、より小さいブロックが処理されます。 - -ブロックサイズが小さすぎると、各ブロックの処理にかかるコストが目立つようになります。一方で、ブロックサイズが大きすぎると、最初のブロックを処理した後に LIMIT 句付きクエリで結果をすばやく返すことが難しくなります。`max_block_size` を設定する際の目的は、多数のカラムを複数スレッドで抽出する際でも過剰なメモリ消費を避けるとともに、少なくともある程度のキャッシュ局所性を維持することです。 - -## max_bytes_before_external_group_by {#max_bytes_before_external_group_by} - - - -クラウドでのデフォルト値: レプリカごとのメモリ量の半分。 - -`GROUP BY` 句の外部メモリ上での実行を有効または無効にします。 -([外部メモリでの GROUP BY](/sql-reference/statements/select/group-by#group-by-in-external-memory) を参照) - -設定可能な値: - -- 単一の [GROUP BY](/sql-reference/statements/select/group-by) 処理で使用可能な RAM の最大容量(バイト単位)。 -- `0` — 外部メモリでの `GROUP BY` を無効化。 - -:::note -GROUP BY の実行中にメモリ使用量がこの閾値(バイト単位)を超えた場合、 -「外部集約」モードを有効化し(データをディスクに書き出します)、処理を継続します。 - -推奨値は、利用可能なシステムメモリの半分です。 -::: - -## max_bytes_before_external_sort {#max_bytes_before_external_sort} - - - -Cloud のデフォルト値: レプリカごとに利用可能なメモリ量の半分。 - -`ORDER BY` 句を外部メモリで実行するかどうかを切り替えます。詳細は [ORDER BY Implementation Details](../../sql-reference/statements/select/order-by.md#implementation-details) を参照してください。 -`ORDER BY` 実行中のメモリ使用量が、このしきい値(バイト数)を超えた場合、外部ソートモード(ディスクへのスピル)が有効になります。 - -設定可能な値: - -- 単一の [ORDER BY](../../sql-reference/statements/select/order-by.md) 操作で使用可能な RAM の最大容量(バイト数)。 - 推奨値は利用可能なシステムメモリの半分です。 -- `0` — 外部メモリでの `ORDER BY` を無効にします。 - -## max_bytes_before_remerge_sort {#max_bytes_before_remerge_sort} - - - -ORDER BY と LIMIT を伴うクエリで、メモリ使用量が指定されたしきい値を超えた場合には、最終マージの前にブロックを追加でマージし、上位 LIMIT 行のみを保持します。 - -## max_bytes_in_distinct {#max_bytes_in_distinct} - - - -`DISTINCT` を使用する際に、メモリ上のハッシュテーブルが保持する状態データ(非圧縮バイト数)の最大サイズ。 - -## max_bytes_in_join {#max_bytes_in_join} - - - -テーブルを結合する際に使用されるハッシュテーブルの最大サイズ(バイト数)。 - -この設定は [SELECT ... JOIN](/sql-reference/statements/select/join) -操作および [Join table engine](/engines/table-engines/special/join) に適用されます。 - -クエリに JOIN が含まれている場合、ClickHouse はすべての中間結果に対してこの設定を確認します。 - -制限に達したときに ClickHouse がどのように動作するかは複数の選択肢があります。 -[join_overflow_mode](/operations/settings/settings#join_overflow_mode) 設定を使用して動作を選択します。 - -設定可能な値: - -- 正の整数。 -- 0 — メモリ使用量の制御を無効にする。 - -## max_bytes_in_set {#max_bytes_in_set} - - - -サブクエリから作成された `IN` 句内の set が使用する(非圧縮データの)最大バイト数。 - -## max_bytes_ratio_before_external_group_by {#max_bytes_ratio_before_external_group_by} - - - - - -`GROUP BY` で使用を許可する利用可能メモリの比率です。この閾値に達すると、 -集約処理に外部メモリが使用されます。 - -例えば `0.6` に設定した場合、実行開始時点で `GROUP BY` は利用可能メモリ -(サーバー / ユーザー / マージ用)の 60% まで使用できます。その後は、 -外部集約の利用を開始します。 - -## max_bytes_ratio_before_external_sort {#max_bytes_ratio_before_external_sort} - - - - - -利用可能なメモリのうち、`ORDER BY` で使用することを許可する割合です。この割合に達すると、外部ソートが使用されます。 - -例えば `0.6` に設定した場合、`ORDER BY` は実行開始時点で利用可能なメモリ(サーバー / ユーザー / マージ用)の `60%` までを使用し、その後は外部ソートの使用を開始します。 - -`max_bytes_before_external_sort` は引き続き有効である点に注意してください。ディスクへのスピルは、ソートブロックが `max_bytes_before_external_sort` よりも大きい場合にのみ行われます。 - -## max_bytes_to_read {#max_bytes_to_read} - - - -クエリを実行するときに、テーブルから読み取ることができる非圧縮データの最大バイト数です。 -この制限は処理される各データチャンクごとにチェックされ、最も深いテーブル式にのみ適用されます。また、リモートサーバーから読み取る場合には、そのリモートサーバー側でのみチェックされます。 - -## max_bytes_to_read_leaf {#max_bytes_to_read_leaf} - - - -分散クエリを実行する際に、リーフノード上のローカルテーブルから読み取ることができる非圧縮データの最大バイト数です。分散クエリは各シャード(リーフ)に対して複数のサブクエリを発行できますが、この制限はリーフノードでの読み取り段階でのみチェックされ、ルートノードでの結果マージ段階では無視されます。 - -たとえば、クラスタが 2 つのシャードで構成されており、各シャードには 100 バイトのデータを持つテーブルがあるとします。両方のテーブルからすべてのデータを読み取る分散クエリを `max_bytes_to_read=150` を指定して実行すると、合計で 200 バイトになるため失敗します。一方、`max_bytes_to_read_leaf=150` を指定したクエリは、リーフノードが最大 100 バイトまでしか読み取らないため成功します。 - -この制限は、処理されるデータチャンクごとにチェックされます。 - -:::note -この設定は `prefer_localhost_replica=1` の場合、動作が不安定になります。 -::: - -## max_bytes_to_sort {#max_bytes_to_sort} - - - -ソート時に処理できる非圧縮データの最大バイト数です。ORDER BY の処理で、この設定値を超える非圧縮バイト数を処理する必要がある場合、挙動は `sort_overflow_mode` によって決まり、デフォルトでは `throw` に設定されています。 - -## max_bytes_to_transfer {#max_bytes_to_transfer} - - - -`GLOBAL IN` / `JOIN` セクションが実行されるときに、リモートサーバーに送信するか一時テーブルに保存できる非圧縮データの最大バイト数。 - -## max_columns_to_read {#max_columns_to_read} - - - -1回のクエリでテーブルから読み取ることができる列の最大数です。 -クエリでこの設定値で指定した列数を超える列の読み取りが必要な場合は、例外がスローされます。 - -:::tip -この設定は、過度に複雑なクエリを防ぐのに役立ちます。 -::: - -`0` を指定した場合は無制限になります。 - -## max_compress_block_size {#max_compress_block_size} - - - -テーブルへの書き込み時に、圧縮前のデータブロックの最大サイズです。デフォルトは 1,048,576 (1 MiB) です。より小さいブロックサイズを指定すると、通常、圧縮率はわずかに低下しますが、キャッシュ局所性により圧縮および伸長の速度はわずかに向上し、メモリ消費量は削減されます。 - -:::note -これはエキスパート向けの設定であり、ClickHouse を使い始めたばかりの場合は変更しないでください。 -::: - -圧縮用のブロック(バイトから成るメモリチャンク)と、クエリ処理用のブロック(テーブルの行の集合)を混同しないようにしてください。 - -## max_concurrent_queries_for_all_users - - - -この設定値が現在同時に処理中のクエリ数以下になると、例外をスローします。 - -例: すべてのユーザーに対して `max_concurrent_queries_for_all_users` を 99 に設定し、データベース管理者はサーバーが過負荷のときでも調査用クエリを実行できるよう、自身については 100 に設定できます。 - -1 つのクエリまたはユーザーに対して設定を変更しても、他のクエリやユーザーには影響しません。 - -取りうる値: - -* 正の整数。 -* 0 — 制限なし。 - -**例** - -```xml -99 -``` - -**関連項目** - -* [max_concurrent_queries](/operations/server-configuration-parameters/settings#max_concurrent_queries) - - -## max_concurrent_queries_for_user - - - -ユーザーごとに同時に処理できるクエリ数の最大値。 - -設定可能な値: - -* 正の整数。 -* 0 — 無制限。 - -**例** - -```xml -5 -``` - - -## max_distributed_connections {#max_distributed_connections} - - - -単一の Distributed テーブルに対する 1 件のクエリを分散処理する際に、リモートサーバーとの同時接続数の上限を表します。クラスター内のサーバー数以上の値に設定することを推奨します。 - -次のパラメータは Distributed テーブルの作成時(およびサーバー起動時)にのみ使用されるため、実行時に変更しても意味がありません。 - -## max_distributed_depth {#max_distributed_depth} - - - -[Distributed](../../engines/table-engines/special/distributed.md) テーブルに対する再帰クエリの最大深度を制限します。 - -値がこの上限を超えた場合、サーバーは例外を送出します。 - -設定可能な値: - -- 正の整数 -- 0 — 深さに制限なし - -## max_download_buffer_size {#max_download_buffer_size} - - - -各スレッドにおける並列ダウンロード(例: URL エンジン)用バッファの最大サイズ。 - -## max_download_threads {#max_download_threads} - - - -データをダウンロードするためのスレッド数の上限(例:URL エンジンで使用)。 - -## max_estimated_execution_time {#max_estimated_execution_time} - - - - - -クエリの推定実行時間の最大値を秒単位で指定します。 -[`timeout_before_checking_execution_speed`](/operations/settings/settings#timeout_before_checking_execution_speed) -が期限切れになると、各データブロックでチェックされます。 - -## max_execution_speed {#max_execution_speed} - - - -1 秒あたりに実行される行数の上限です。 -[`timeout_before_checking_execution_speed`](/operations/settings/settings#timeout_before_checking_execution_speed) -の値に達するたびに、各データブロックごとにチェックされます。実行速度が高すぎる場合は、実行速度が抑制されます。 - -## max_execution_speed_bytes {#max_execution_speed_bytes} - - - -1 秒あたりの最大実行バイト数です。[`timeout_before_checking_execution_speed`](/operations/settings/settings#timeout_before_checking_execution_speed) が -満了するたびに、各データブロックごとにチェックされます。実行速度が高すぎる場合、実行速度は抑えられます。 - -## max_execution_time {#max_execution_time} - - - -クエリの最大実行時間(秒単位)です。 - -`max_execution_time` パラメータは少し分かりにくい場合があります。 -これは、現在のクエリ実行速度に対する補間に基づいて動作します -(この挙動は [`timeout_before_checking_execution_speed`](/operations/settings/settings#timeout_before_checking_execution_speed) によって制御されます)。 - -ClickHouse は、予測される実行時間が指定した `max_execution_time` を超える場合、 -クエリを中断します。デフォルトでは `timeout_before_checking_execution_speed` -は 10 秒に設定されています。つまり、クエリ実行から 10 秒経過すると、ClickHouse は -総実行時間の見積もりを開始します。例えば、`max_execution_time` を 3600 秒(1 時間) -に設定している場合、予測時間がこの 3600 秒の制限を超えると、ClickHouse はクエリを -終了します。`timeout_before_checking_execution_speed` を 0 に設定すると、 -ClickHouse は `max_execution_time` の基準として経過時間を使用します。 - -クエリの実行時間が指定した秒数を超えた場合の動作は、 -`timeout_overflow_mode` によって決まり、デフォルトでは `throw` に設定されています。 - -:::note -タイムアウトはデータ処理中の特定の箇所でのみチェックされ、そのタイミングでのみクエリを停止できます。 -現在のところ、集約状態のマージ処理中やクエリ解析中には停止できないため、 -実際の実行時間はこの設定値より長くなります。 -::: - -## max_execution_time_leaf - - - -意味的には [`max_execution_time`](#max_execution_time) と似ていますが、 -分散クエリやリモートクエリにおいてリーフノードにのみ適用されます。 - -例えば、リーフノードでの実行時間を `10s` に制限しつつ、 -初期ノード側では制限を設けたくない場合は、ネストされたサブクエリの設定で -`max_execution_time` を指定する代わりに、次のようにします: - -```sql -SELECT count() -FROM cluster(cluster, view(SELECT * FROM t SETTINGS max_execution_time = 10)); -``` - -クエリ設定としては `max_execution_time_leaf` を使用できます。 - -```sql -SELECT count() -FROM cluster(cluster, view(SELECT * FROM t)) SETTINGS max_execution_time_leaf = 10; -``` - - -## max_expanded_ast_elements {#max_expanded_ast_elements} - - - -エイリアスおよびアスタリスクの展開後のクエリ構文木におけるノード数の最大値。 - -## max_fetch_partition_retries_count {#max_fetch_partition_retries_count} - - - -別のホストからパーティションを取得する際の再試行回数の上限。 - -## max_final_threads {#max_final_threads} - - - -[FINAL](/sql-reference/statements/select/from#final-modifier) 修飾子付きの `SELECT` クエリにおけるデータ読み取りフェーズの最大並列スレッド数を設定します。 - -指定できる値: - -- 正の整数。 -- 0 または 1 — 無効。`SELECT` クエリは単一スレッドで実行されます。 - -## max_http_get_redirects {#max_http_get_redirects} - - - -許可される HTTP GET リダイレクトの最大ホップ数です。悪意のあるサーバーがリクエストを予期しないサービスへリダイレクトすることを防ぐための追加のセキュリティ対策です。\n\n外部サーバーが別のアドレスにリダイレクトし、そのアドレスが会社のインフラストラクチャ内のアドレスであるように見える場合があります。その結果、内部サーバーへ HTTP リクエストを送信して、内部ネットワークから認証を迂回して内部 API を呼び出したり、さらには Redis や Memcached などの他のサービスに対してクエリを実行できてしまう可能性があります。内部インフラストラクチャ(localhost 上で動作しているものを含む)を持っていない場合や、サーバーを信頼している場合には、リダイレクトを許可しても安全です。ただし、URL が HTTPS ではなく HTTP を使用している場合には、リモートサーバーだけでなく ISP やその間に存在するすべてのネットワークも信頼する必要があることに注意してください。 - -## max_hyperscan_regexp_length - - - -[hyperscan multi-match functions](/sql-reference/functions/string-search-functions#multiMatchAny) における各正規表現の最大長さを定義します。 - -設定可能な値: - -* 正の整数。 -* 0 - 長さを制限しません。 - -**例** - -クエリ: - -```sql -SELECT multiMatchAny('abcd', ['ab','bcd','c','d']) SETTINGS max_hyperscan_regexp_length = 3; -``` - -結果: - -```text -┌─multiMatchAny('abcd', ['ab', 'bcd', 'c', 'd'])─┐ -│ 1 │ -└────────────────────────────────────────────────┘ -``` - -クエリ: - -```sql -SELECT multiMatchAny('abcd', ['ab','bcd','c','d']) SETTINGS max_hyperscan_regexp_length = 2; -``` - -結果: - -```text -例外: 正規表現の長さが大きすぎます。 -``` - -**関連項目** - -* [max_hyperscan_regexp_total_length](#max_hyperscan_regexp_total_length) - - -## max_hyperscan_regexp_total_length - - - -各 [hyperscan multi-match function](/sql-reference/functions/string-search-functions#multiMatchAny) で、すべての正規表現の合計の長さの最大値を設定します。 - -取り得る値: - -* 正の整数。 -* 0 - 長さに制限はありません。 - -**例** - -クエリ: - -```sql -SELECT multiMatchAny('abcd', ['a','b','c','d']) SETTINGS max_hyperscan_regexp_total_length = 5; -``` - -結果: - -```text -┌─multiMatchAny('abcd', ['a', 'b', 'c', 'd'])─┐ -│ 1 │ -└─────────────────────────────────────────────┘ -``` - -クエリ: - -```sql -SELECT multiMatchAny('abcd', ['ab','bc','c','d']) SETTINGS max_hyperscan_regexp_total_length = 5; -``` - -結果: - -```text -例外: 正規表現の合計長が大きすぎます。 -``` - -**関連項目** - -* [max_hyperscan_regexp_length](#max_hyperscan_regexp_length) - - -## max_insert_block_size {#max_insert_block_size} - - - -テーブルへの挿入時に作成されるブロックのサイズ(行数単位)を指定します。 -この設定が適用されるのは、サーバー側でブロックを作成する場合のみです。 -たとえば HTTP インターフェイス経由の INSERT では、サーバーがデータフォーマットをパースし、指定されたサイズのブロックを作成します。 -一方、clickhouse-client を使用する場合、クライアント側でデータをパースするため、サーバー側の `max_insert_block_size` 設定は挿入されるブロックサイズに影響しません。 -また、INSERT SELECT を使用する場合にもこの設定は有効に機能しません。これは、SELECT 実行後に形成されたブロックと同じブロックを使ってデータが挿入されるためです。 - -デフォルト値は `max_block_size` よりわずかに大きくなっています。これは、特定のテーブルエンジン(`*MergeTree`)が、挿入される各ブロックごとにディスク上にデータパーツを作成し、このデータパーツ自体がかなり大きな単位であるためです。同様に、`*MergeTree` テーブルは挿入時にデータをソートし、十分に大きなブロックサイズを指定することで、より多くのデータを RAM 内でソートできるようになります。 - -## max_insert_delayed_streams_for_parallel_write {#max_insert_delayed_streams_for_parallel_write} - - - -最終パートのフラッシュを遅延させるためのストリーム(カラム)の最大数。デフォルトは自動で、基盤ストレージが S3 などのように並列書き込みをサポートしている場合は 100、それ以外の場合は無効。 - -## max_insert_threads {#max_insert_threads} - - - -`INSERT SELECT` クエリを実行するスレッドの最大数。 - -設定可能な値: - -- 0 (または 1) — `INSERT SELECT` は並列実行しない。 -- 正の整数。1 より大きい値。 - -Cloud におけるデフォルト値: - -- メモリ 8 GiB のノードでは `1` -- メモリ 16 GiB のノードでは `2` -- それより大きいノードでは `4` - -並列 `INSERT SELECT` が有効になるのは、`SELECT` 部分が並列実行される場合のみです。[`max_threads`](#max_threads) 設定を参照してください。 -値を大きくするとメモリ使用量が増加します。 - -## max_joined_block_size_bytes {#max_joined_block_size_bytes} - - - - - -JOIN 結果の最大ブロックサイズ(JOIN アルゴリズムがサポートしている場合)。単位はバイト。0 を指定すると無制限になります。 - -## max_joined_block_size_rows {#max_joined_block_size_rows} - - - -JOIN の結果に対する最大ブロックサイズ(結合アルゴリズムが対応している場合)。0 を指定すると無制限になります。 - -## max_limit_for_vector_search_queries {#max_limit_for_vector_search_queries} - - - - - -この設定値を超える LIMIT を指定した SELECT クエリでは、ベクトル類似性インデックスを使用できません。ベクトル類似性インデックスにおけるメモリオーバーフローの発生を防ぐための設定です。 - -## max_local_read_bandwidth {#max_local_read_bandwidth} - - - -ローカル読み取りの最大速度(1 秒あたりのバイト数)。 - -## max_local_write_bandwidth {#max_local_write_bandwidth} - - - -ローカルへの書き込み速度の最大値(1 秒あたりのバイト数)。 - -## max_memory_usage {#max_memory_usage} - - - -クラウドでのデフォルト値: レプリカのRAM容量に依存します。 - -単一サーバー上でクエリを実行する際に使用できるRAMの最大量です。 -`0` の場合は無制限を意味します。 - -この設定は、利用可能なメモリ量やマシン上の総メモリ量を考慮しません。 -制限は単一サーバー内の単一クエリに対して適用されます。 - -各クエリの現在のメモリ消費量を確認するには、`SHOW PROCESSLIST` を使用できます。 -各クエリのピークメモリ消費量は追跡され、ログに書き込まれます。 - -次の集約関数については、`String` および `Array` 引数をとる状態に対して、 -メモリ使用量が完全には追跡されません: - -- `min` -- `max` -- `any` -- `anyLast` -- `argMin` -- `argMax` - -メモリ消費量は、[`max_memory_usage_for_user`](/operations/settings/settings#max_memory_usage_for_user) -および [`max_server_memory_usage`](/operations/server-configuration-parameters/settings#max_server_memory_usage) のパラメータによっても制限されます。 - -## max_memory_usage_for_user - - - -単一サーバー上で特定ユーザーのクエリを実行する際に使用できる RAM の最大量です。0 は無制限を意味します。 - -デフォルトでは、この量は制限されていません(`max_memory_usage_for_user = 0`)。 - -[`max_memory_usage`](/operations/settings/settings#max_memory_usage) の説明も参照してください。 - -たとえば `clickhouse_read` という名前のユーザーに対して `max_memory_usage_for_user` を 1000 バイトに設定するには、次のステートメントを使用します。 - -```sql -ALTER USER clickhouse_read SETTINGS max_memory_usage_for_user = 1000; -``` - -クライアントから一度ログアウトして再度ログインし、その後で `getSetting` 関数を使用することで、正しく動作していることを確認できます。 - -```sql -SELECT getSetting('max_memory_usage_for_user'); -``` - - -## max_network_bandwidth {#max_network_bandwidth} - - - -ネットワーク上でのデータ交換速度を、1 秒あたりのバイト数で制限します。この設定はすべてのクエリに適用されます。 - -設定可能な値: - -- 正の整数値。 -- 0 — 帯域幅制御を無効にします。 - -## max_network_bandwidth_for_all_users {#max_network_bandwidth_for_all_users} - - - -ネットワーク上でデータが転送される速度を、1 秒あたりのバイト数で制限します。この設定は、サーバー上で同時に実行されているすべてのクエリに適用されます。 - -指定可能な値: - -- 正の整数。 -- 0 — データ転送速度の制御を無効にします。 - -## max_network_bandwidth_for_user {#max_network_bandwidth_for_user} - - - -ネットワーク経由でのデータ交換速度を、1 秒あたりのバイト数で制限します。この設定は、1 人のユーザーによって同時に実行されるすべてのクエリに適用されます。 - -設定可能な値: - -- 正の整数。 -- 0 — データ転送速度の制御を無効にします。 - -## max_network_bytes {#max_network_bytes} - - - -クエリの実行時に、ネットワーク経由で受信または送信されるデータ量(バイト数)を制限します。この設定は各クエリごとに個別に適用されます。 - -設定可能な値: - -- 正の整数 -- 0 — データ量の制御を無効にします。 - -## max_number_of_partitions_for_independent_aggregation {#max_number_of_partitions_for_independent_aggregation} - - - -最適化を適用できるテーブル内パーティション数の最大値 - -## max_os_cpu_wait_time_ratio_to_throw {#max_os_cpu_wait_time_ratio_to_throw} - - - - - -クエリを拒否するかどうかを判断するために用いる、OS レベルの CPU 待ち時間(OSCPUWaitMicroseconds メトリクス)とビジー時間(OSCPUVirtualTimeMicroseconds メトリクス)の比の上限。確率の計算には最小比と最大比の間での線形補間が使用され、この最大比に達した時点で確率は 1 になります。 - -## max_parallel_replicas {#max_parallel_replicas} - - - - - -クエリ実行時に、各シャードで使用される最大レプリカ数。 - -設定可能な値: - -- 正の整数。 - -**補足情報** - -この設定は、他の設定との組み合わせによって、異なる結果を生じる場合があります。 - -:::note -この設定は、結合やサブクエリが関係し、かつすべてのテーブルが特定の要件を満たしていない場合、誤った結果を生成する可能性があります。詳細については、[Distributed Subqueries and max_parallel_replicas](/operations/settings/settings#max_parallel_replicas) を参照してください。 -::: - -### `SAMPLE` キーを使用した並列処理 - -クエリは複数のサーバー上で並列に実行することで、高速に処理できる場合があります。ただし、次のような場合にはクエリのパフォーマンスが低下することがあります。 - -- サンプリングキーのパーティショニングキー内での位置が、効率的なレンジスキャンを行うのに適していない場合。 -- テーブルにサンプリングキーを追加したことで、他の列によるフィルタリングが非効率になる場合。 -- サンプリングキーが計算コストの高い式である場合。 -- クラスターのレイテンシ分布にロングテールがあり、より多くのサーバーにクエリを送るほどクエリ全体のレイテンシが増加してしまう場合。 - -### [parallel_replicas_custom_key](#parallel_replicas_custom_key) を使用した並列処理 - -この設定は、あらゆるレプリケーテッドテーブルで有用です。 - -## max_parser_backtracks {#max_parser_backtracks} - - - - - -パーサーがバックトラックできる最大回数(再帰下降構文解析の過程で異なる選択肢を試す回数の上限)。 - -## max_parser_depth {#max_parser_depth} - - - -再帰下降パーサーにおける再帰処理の最大深度を制限します。スタックサイズを制御するために使用します。 - -取りうる値: - -- 正の整数。 -- 0 — 再帰深度は無制限となります。 - -## max_parsing_threads {#max_parsing_threads} - - - - - -並列パースをサポートする入力フォーマットでデータを解析する際に使用されるスレッド数の最大値を指定します。デフォルトでは自動的に決定されます。 - -## max_partition_size_to_drop {#max_partition_size_to_drop} - - - -クエリでパーティションを削除する際の制限です。値が `0` の場合は、制限なくパーティションを削除できます。 - -Cloud におけるデフォルト値: 1 TB。 - -:::note -このクエリ設定は、対応するサーバー設定を上書きします。 [max_partition_size_to_drop](/operations/server-configuration-parameters/settings#max_partition_size_to_drop) を参照してください。 -::: - -## max_partitions_per_insert_block {#max_partitions_per_insert_block} - - - - - -単一の挿入ブロックに含めることができるパーティション数の最大値を制限し、 -ブロックに含まれるパーティション数が多すぎる場合は例外をスローします。 - -- 正の整数。 -- `0` — パーティション数は無制限。 - -**詳細** - -データ挿入時、ClickHouse は挿入ブロック内のパーティション数を計算します。 -パーティション数が `max_partitions_per_insert_block` を超える場合、 -ClickHouse は `throw_on_max_partitions_per_insert_block` の設定に応じて -警告をログに記録するか、または例外をスローします。例外メッセージは次のとおりです: - -> "Too many partitions for a single INSERT block (`partitions_count` partitions, limit is " + toString(max_partitions) + "). - The limit is controlled by the 'max_partitions_per_insert_block' setting. - A large number of partitions is a common misconception. It will lead to severe - negative performance impact, including slow server startup, slow INSERT queries - and slow SELECT queries. Recommended total number of partitions for a table is - under 1000..10000. Please note, that partitioning is not intended to speed up - SELECT queries (ORDER BY key is sufficient to make range queries fast). - Partitions are intended for data manipulation (DROP PARTITION, etc)." - -:::note -この設定は、多数のパーティションを使用することが一般的な誤解であるために設けられた、安全性のためのしきい値です。 -::: - -## max_partitions_to_read {#max_partitions_to_read} - - - -1 つのクエリでアクセスできるパーティションの最大数を制限します。 - -テーブル作成時に指定した設定値は、クエリ単位の設定で上書きできます。 - -設定可能な値は次のとおりです: - -- 正の整数 -- `-1` - 無制限(デフォルト) - -:::note -テーブルの設定で、MergeTree の設定項目 [`max_partitions_to_read`](/operations/settings/settings#max_partitions_to_read) を指定することもできます。 -::: - -## max_parts_to_move {#max_parts_to_move} - - - - - -1 回のクエリで移動できるパーツの数を制限します。0 の場合は無制限です。 - -## max_projection_rows_to_use_projection_index {#max_projection_rows_to_use_projection_index} - - - - - -プロジェクションインデックスから読み取る行数がこのしきい値以下の場合、ClickHouse はクエリ実行中にプロジェクションインデックスの適用を試みます。 - -## max_query_size {#max_query_size} - - - -SQL パーサーが解析できるクエリ文字列の最大バイト数です。 -INSERT クエリの VALUES 句内のデータは、別のストリームパーサー(RAM を O(1) しか消費しない)によって処理され、この制限の対象にはなりません。 - -:::note -`max_query_size` は SQL クエリ内(例: `SELECT now() SETTINGS max_query_size=10000`)では設定できません。ClickHouse はクエリを解析するためのバッファを事前に確保する必要があり、そのバッファサイズは `max_query_size` 設定によって決定されます。このため、この設定はクエリが実行される前に構成しておく必要があります。 -::: - -## max_read_buffer_size {#max_read_buffer_size} - - - -ファイルシステムから読み込む際に使用されるバッファの最大サイズ。 - -## max_read_buffer_size_local_fs {#max_read_buffer_size_local_fs} - - - -ローカルファイルシステムから読み込む際のバッファの最大サイズです。0 に設定すると、`max_read_buffer_size` が使用されます。 - -## max_read_buffer_size_remote_fs {#max_read_buffer_size_remote_fs} - - - -リモートファイルシステムから読み込む際のバッファの最大サイズです。0 に設定した場合は、`max_read_buffer_size` が使用されます。 - -## max_recursive_cte_evaluation_depth {#max_recursive_cte_evaluation_depth} - - - - - -再帰CTE評価の最大深度 - -## max_remote_read_network_bandwidth {#max_remote_read_network_bandwidth} - - - -読み取り時にネットワーク経由で行うデータ交換の最大速度(バイト/秒)。 - -## max_remote_write_network_bandwidth {#max_remote_write_network_bandwidth} - - - -書き込み用にネットワーク経由でデータを送信する際の最大速度(1 秒あたりのバイト数)。 - -## max_replica_delay_for_distributed_queries {#max_replica_delay_for_distributed_queries} - - - -分散クエリに対して、遅延しているレプリカを除外します。 [Replication](../../engines/table-engines/mergetree-family/replication.md) を参照してください。 - -秒数で設定します。レプリカのラグがこの値以上の場合、そのレプリカは使用されません。 - -設定可能な値は次のとおりです: - -- 正の整数値。 -- 0 — レプリカのラグはチェックされません。 - -ラグが 0 でないすべてのレプリカの使用を防ぐには、このパラメータを 1 に設定します。 - -レプリケーテッドテーブルを指す分散テーブルに対して `SELECT` を実行する際に使用されます。 - -## max_result_bytes {#max_result_bytes} - - - -結果のサイズ(非圧縮)をバイト単位で制限します。しきい値に達した場合、クエリはデータブロック 1 つ分の処理を終えた時点で停止しますが、 -結果の最後のブロックは途中で切り捨てられないため、結果のサイズがしきい値より大きくなる場合があります。 - -**注意事項** - -このしきい値では、メモリ上における結果サイズが考慮されます。 -結果サイズ自体が小さくても、メモリ上のより大きなデータ構造 -(LowCardinality カラムの辞書や AggregateFunction カラムの Arenas など) -を参照している可能性があり、その場合は結果サイズが小さくても、しきい値を超えることがあります。 - -:::warning -この設定はかなり低レベルなものであり、慎重に使用する必要があります -::: - -## max_result_rows {#max_result_rows} - - - -クラウドでのデフォルト値: `0`。 - -結果の行数の上限を制限します。サブクエリおよび、分散クエリの一部をリモートサーバー上で実行する際にもチェックされます。 -値が `0` の場合は制限が適用されません。 - -しきい値に達した場合、クエリはデータブロックを 1 つ処理し終えた時点で停止しますが、 -結果の最後のブロックを途中で切り捨てることはないため、最終的な結果の行数は -しきい値を上回る場合があります。 - -## max_reverse_dictionary_lookup_cache_size_bytes {#max_reverse_dictionary_lookup_cache_size_bytes} - - - - - -関数 `dictGetKeys` が使用する、クエリごとの逆引き辞書ルックアップキャッシュの最大サイズ(バイト単位)。このキャッシュは、同一クエリ内で辞書を再スキャンしないように、属性値ごとにシリアル化されたキーのタプルを保存します。上限に達した場合、エントリは LRU 方式で削除されます。キャッシュを無効にするには 0 に設定します。 - -## max_rows_in_distinct {#max_rows_in_distinct} - - - -DISTINCT 使用時に許容される異なる行数の上限。 - -## max_rows_in_join {#max_rows_in_join} - - - -結合に使用されるハッシュテーブル内の行数を制限します。 - -この設定は、[SELECT ... JOIN](/sql-reference/statements/select/join) -操作および [Join](/engines/table-engines/special/join) テーブルエンジンに適用されます。 - -クエリに複数の結合が含まれている場合、ClickHouse は各中間結果に対してこの設定を確認します。 - -上限に達したとき、ClickHouse は異なる動作を取ることができます。 -[`join_overflow_mode`](/operations/settings/settings#join_overflow_mode) 設定を使用して動作を選択します。 - -設定可能な値: - -- 正の整数。 -- `0` — 行数は無制限。 - -## max_rows_in_set {#max_rows_in_set} - - - -サブクエリから生成される `IN` 句のデータセットに対する行数の上限。 - -## max_rows_in_set_to_optimize_join {#max_rows_in_set_to_optimize_join} - - - - - -結合の前に、互いの行セットに基づいて結合対象のテーブルをフィルタリングする際に使用される `set` の最大サイズ。 - -設定可能な値: - -- 0 — 無効。 -- 任意の正の整数。 - -## max_rows_to_group_by {#max_rows_to_group_by} - - - -集約で得られる一意キーの最大数です。この設定により、 -集約処理時のメモリ使用量を制限できます。 - -GROUP BY 中の集約によって生成される行の数(一意な GROUP BY キー)が -指定した値を超えた場合の動作は `group_by_overflow_mode` によって決まり、 -デフォルトでは `throw` ですが、近似的な GROUP BY モードに切り替えることもできます。 - -## max_rows_to_read {#max_rows_to_read} - - - -クエリの実行時に、テーブルから読み取ることができる行数の最大値です。 -この制限は処理されるそれぞれのデータチャンクごとにチェックされ、最下位のテーブル式にのみ適用されます。また、リモートサーバーから読み取る場合は、リモートサーバー側でのみチェックされます。 - -## max_rows_to_read_leaf {#max_rows_to_read_leaf} - - - -分散クエリを実行する際に、リーフノード上のローカルテーブルから読み取ることができる最大行数です。分散クエリは各シャード(リーフ)に対して複数のサブクエリを発行できますが、この制限がチェックされるのはリーフノードでの読み取り段階のみであり、ルートノードでの結果マージ段階では無視されます。 - -例えば、2 つのシャードから成るクラスターがあり、各シャードに 100 行を含むテーブルがあるとします。両方のテーブルからすべてのデータを読み取ることを目的とした分散クエリを、設定 `max_rows_to_read=150` で実行すると、合計で 200 行になるため失敗します。一方、`max_rows_to_read_leaf=150` を指定したクエリは成功します。リーフノードごとに最大でも 100 行しか読み取られないためです。 - -この制限は、処理される各データチャンクごとにチェックされます。 - -:::note -この設定は `prefer_localhost_replica=1` の場合、動作が安定しません。 -::: - -## max_rows_to_sort {#max_rows_to_sort} - - - -ソートを行う前の最大行数です。これにより、ソート時のメモリ消費量を制限できます。 -ORDER BY 操作で処理しなければならないレコード数が指定した数を超えた場合の挙動は、 -`sort_overflow_mode` 設定によって決まり、デフォルト値は `throw` です。 - -## max_rows_to_transfer {#max_rows_to_transfer} - - - -GLOBAL IN/JOIN 句が実行される際に、リモートサーバーに渡すか一時テーブルに保存できるデータの最大行数。 - -## max_sessions_for_user - - - -認証済みユーザーごとに許可される、ClickHouseサーバーへの同時セッション数の上限。 - -例: - -```xml - - - 1 - - - 2 - - - 0 - - - - - - single_session_user - - - - two_sessions_profile - - - - unlimited_sessions_profile - - -``` - -取りうる値: - -* 正の整数 -* `0` - 同時セッション数が無制限(デフォルト) - - -## max_size_to_preallocate_for_aggregation {#max_size_to_preallocate_for_aggregation} - - - - - -集計前に、すべてのハッシュテーブルで事前に領域を確保することを許可する要素数の合計上限を指定します。 - -## max_size_to_preallocate_for_joins {#max_size_to_preallocate_for_joins} - - - - - -結合を実行する前に、すべてのハッシュテーブルを合計して何要素分の領域を事前割り当てできるかを指定します。 - -## max_streams_for_merge_tree_reading {#max_streams_for_merge_tree_reading} - - - -この設定が 0 以外の値に設定されている場合、MergeTree テーブルの読み取りストリーム数を制限します。 - -## max_streams_multiplier_for_merge_tables {#max_streams_multiplier_for_merge_tables} - - - -Merge テーブルから読み取る際に、使用するストリーム数を増やします。ストリームは、Merge テーブルが参照する各テーブルに分散されます。これにより、スレッド間で作業がより均等に分配され、特にマージ対象となるテーブル同士のサイズが異なる場合に効果的です。 - -## max_streams_to_max_threads_ratio {#max_streams_to_max_threads_ratio} - - - -スレッド数より多くのソースを使用して、処理をスレッド間でより均等に分散できるようにします。これは一時的な対処であり、将来的にはソース数をスレッド数と同数に保ちつつ、各ソースが利用可能な処理を動的に選択できるようにすることが想定されています。 - -## max_subquery_depth {#max_subquery_depth} - - - -クエリ内のネストされたサブクエリの数が、指定された値を超えた場合に -例外をスローします。 - -:::tip -これにより、クラスタのユーザーが過度に複雑なクエリを書くことを防ぐための -健全性チェックとして機能します。 -::: - -## max_table_size_to_drop {#max_table_size_to_drop} - - - -クエリ実行時にテーブルを削除する際の制限を設定します。値 `0` は、制限なしにすべてのテーブルを削除できることを意味します。 - -ClickHouse Cloud でのデフォルト値: 1 TB。 - -:::note -このクエリ設定はサーバー設定の同名パラメータを上書きします。詳細は [max_table_size_to_drop](/operations/server-configuration-parameters/settings#max_table_size_to_drop) を参照してください。 -::: - -## max_temporary_columns {#max_temporary_columns} - - - -クエリの実行時に、定数カラムを含めて同時に RAM 内に保持する必要がある一時カラム数の最大値です。クエリの中間計算の結果としてメモリ内に生成される一時カラム数がこの値を超えた場合、例外がスローされます。 - -:::tip -この設定は、過度に複雑なクエリの実行を防ぐのに役立ちます。 -::: - -`0` の場合は無制限を意味します。 - -## max_temporary_data_on_disk_size_for_query {#max_temporary_data_on_disk_size_for_query} - - - -同時に実行中のすべてのクエリで、ディスク上の一時ファイルにより消費されるデータ量の上限(バイト単位)。 - -可能な値: - -- 正の整数 -- `0` — 無制限(デフォルト) - -## max_temporary_data_on_disk_size_for_user {#max_temporary_data_on_disk_size_for_user} - - - -同時に実行されているすべてのユーザークエリに対し、ディスク上の一時ファイルによるデータ使用量の上限(バイト単位)。 - -設定可能な値: - -- 正の整数。 -- `0` — 無制限(デフォルト) - -## max_temporary_non_const_columns {#max_temporary_non_const_columns} - - - -`max_temporary_columns` と同様に、クエリ実行時に同時に RAM 内に保持しておく必要がある一時カラムの最大数ですが、定数カラムは数えません。 - -:::note -クエリ実行時には定数カラムはかなり頻繁に生成されますが、ほとんど計算リソースを消費しません。 -::: - -## max_threads {#max_threads} - - - -クエリ処理スレッドの最大数を指定します。リモートサーバーからデータを取得するためのスレッドは含みません(`max_distributed_connections` パラメータを参照)。 - -このパラメータは、クエリ処理パイプラインの同一ステージを並列に実行するスレッドに適用されます。 -たとえばテーブルから読み込む際に、関数による式の評価、WHERE でのフィルタ処理、および GROUP BY のための事前集約を、少なくとも `max_threads` 個のスレッドを用いて並列に実行できる場合は、`max_threads` の値だけスレッドが使用されます。 - -LIMIT によりすぐに完了するクエリでは、`max_threads` を小さく設定できます。たとえば、必要な件数のエントリがそれぞれのブロック内に存在し、`max_threads = 8` の場合、実際には 1 ブロックを読むだけで十分であっても 8 ブロックが読み込まれます。 - -`max_threads` の値を小さくするほど、消費メモリ量は少なくなります。 - -ClickHouse Cloud におけるデフォルト値: `auto(3)` - -## max_threads_for_indexes {#max_threads_for_indexes} - - - -インデックス処理に使用されるスレッド数の上限。 - -## max_untracked_memory {#max_untracked_memory} - - - -小さなメモリアロケーションおよび解放はスレッドローカル変数で集約され、(絶対値での)合計量が指定された値を超えた場合にのみ追跡またはプロファイルされます。指定した値が `memory_profiler_step` より大きい場合は、実質的に `memory_profiler_step` の値に引き下げられます。 - -## memory_overcommit_ratio_denominator {#memory_overcommit_ratio_denominator} - - - - - -グローバルなハードリミットに到達したときのソフトメモリ上限を表します。 -この値は、クエリのオーバーコミット比率を計算するために使用されます。 -ゼロの場合はクエリをスキップします。 -詳細は[メモリのオーバーコミット](memory-overcommit.md)を参照してください。 - -## memory_overcommit_ratio_denominator_for_user {#memory_overcommit_ratio_denominator_for_user} - - - - - -ユーザーレベルでハードリミットに達したときに適用されるソフトメモリ上限を表します。 -この値は、クエリごとのオーバーコミット率を計算するために使用されます。 -値が 0 の場合、そのクエリはスキップされます。 -詳細は、[メモリのオーバーコミット](memory-overcommit.md)を参照してください。 - -## memory_profiler_sample_max_allocation_size {#memory_profiler_sample_max_allocation_size} - - - -`memory_profiler_sample_probability` に等しい確率で、サイズが指定した値以下であるメモリアロケーションをランダムに収集します。0 は無効を意味します。このしきい値が期待どおりに動作するようにするには、`max_untracked_memory` を 0 に設定することを検討してください。 - -## memory_profiler_sample_min_allocation_size {#memory_profiler_sample_min_allocation_size} - - - -指定した値以上のサイズのメモリアロケーションを、`memory_profiler_sample_probability` に等しい確率でランダムに収集します。0 に設定すると無効になります。このしきい値が意図したとおりに機能するようにするには、`max_untracked_memory` を 0 に設定することを検討してください。 - -## memory_profiler_sample_probability {#memory_profiler_sample_probability} - - - -ランダムに選択したメモリの割り当ておよび解放を収集し、それらを `system.trace_log` に `trace_type` として `MemorySample` で書き込みます。確率は、割り当てサイズに関係なく、すべての alloc/free に対して適用されます(`memory_profiler_sample_min_allocation_size` および `memory_profiler_sample_max_allocation_size` で変更できます)。サンプリングは、未追跡メモリ量が `max_untracked_memory` を超えたときにのみ行われる点に注意してください。より細かい粒度でサンプリングを行いたい場合は、`max_untracked_memory` を 0 に設定することを検討してください。 - -## memory_profiler_step {#memory_profiler_step} - - - -メモリプロファイラのステップ幅(しきい値間隔)をバイト単位で設定します。クエリのメモリ使用量が、各ステップのしきい値を超えるたびに、メモリプロファイラは割り当て元のスタックトレースを収集し、それを [trace_log](/operations/system-tables/trace_log) に書き込みます。 - -設定可能な値: - -- 正の整数(バイト数)。 - -- 0 の場合、メモリプロファイラを無効にします。 - -## memory_tracker_fault_probability {#memory_tracker_fault_probability} - - - -例外安全性のテストのために、指定した確率でメモリを割り当てるたびに例外をスローします。 - -## memory_usage_overcommit_max_wait_microseconds {#memory_usage_overcommit_max_wait_microseconds} - - - -ユーザーレベルでメモリのオーバーコミットが発生した場合に、メモリが解放されるまでスレッドが待機する最大時間です。 -タイムアウトに達してもメモリが解放されない場合、例外がスローされます。 -詳細については、[メモリのオーバーコミット](memory-overcommit.md)を参照してください。 - -## merge_table_max_tables_to_look_for_schema_inference {#merge_table_max_tables_to_look_for_schema_inference} - - - - - -`Merge` テーブルを明示的なスキーマを指定せずに作成する場合、または `merge` テーブル関数を使用する場合、スキーマは一致するテーブルのうち最大で指定された数のテーブルを対象として、その和集合として推論されます。 -テーブル数がそれより多い場合、スキーマは最初の指定された数のテーブルから推論されます。 - -## merge_tree_coarse_index_granularity {#merge_tree_coarse_index_granularity} - - - -データを検索する際、ClickHouse はインデックスファイル内のデータマークをチェックします。必要なキーがある範囲内に存在すると判断すると、その範囲を `merge_tree_coarse_index_granularity` 個のサブレンジに分割し、その中で必要なキーを再帰的に検索します。 - -設定可能な値: - -- 正の偶数である任意の整数値。 - -## merge_tree_compact_parts_min_granules_to_multibuffer_read {#merge_tree_compact_parts_min_granules_to_multibuffer_read} - - - - - -ClickHouse Cloud でのみ有効です。MergeTree テーブルのコンパクトパートのストライプ内に含まれる granule の数を指定し、この値に基づいて並列読み取りとプリフェッチをサポートするマルチバッファリーダーを使用します。リモートファイルシステムから読み取る場合、マルチバッファリーダーの使用により読み取り要求数が増加します。 - -## merge_tree_determine_task_size_by_prewhere_columns {#merge_tree_determine_task_size_by_prewhere_columns} - - - -読み取りタスクのサイズを決定する際に、prewhere 列のサイズのみを使用するかどうかを制御します。 - -## merge_tree_max_bytes_to_use_cache {#merge_tree_max_bytes_to_use_cache} - - - -ClickHouse が 1 つのクエリで `merge_tree_max_bytes_to_use_cache` バイトを超えて読み込む必要がある場合、非圧縮ブロックのキャッシュは使用されません。 - -非圧縮ブロックのキャッシュには、クエリのために抽出されたデータが保存されます。ClickHouse は、このキャッシュを使用して、繰り返し実行される小さなクエリへの応答を高速化します。この設定は、多量のデータを読み込むクエリによってキャッシュが無駄に消費されるのを防ぎます。[uncompressed_cache_size](/operations/server-configuration-parameters/settings#uncompressed_cache_size) サーバー設定は、非圧縮ブロックのキャッシュのサイズを設定します。 - -可能な値: - -- 任意の正の整数。 - -## merge_tree_max_rows_to_use_cache {#merge_tree_max_rows_to_use_cache} - - - -ClickHouse が 1 回のクエリで `merge_tree_max_rows_to_use_cache` 行を超えて読み取る場合、非圧縮ブロックキャッシュは使用されません。 - -非圧縮ブロックキャッシュには、クエリ用に抽出されたデータが保存されます。ClickHouse は、このキャッシュを利用して、繰り返し実行される小さなクエリへの応答を高速化します。この設定は、大量のデータを読み取るクエリによってキャッシュが無駄に占有されることを防ぎます。[uncompressed_cache_size](/operations/server-configuration-parameters/settings#uncompressed_cache_size) サーバー設定は、非圧縮ブロックキャッシュのサイズを定義します。 - -設定可能な値: - -- 任意の正の整数。 - -## merge_tree_min_bytes_for_concurrent_read {#merge_tree_min_bytes_for_concurrent_read} - - - -[MergeTree](../../engines/table-engines/mergetree-family/mergetree.md) エンジンのテーブルにおいて、1 つのファイルから読み取るバイト数が `merge_tree_min_bytes_for_concurrent_read` を超える場合、ClickHouse はこのファイルを複数スレッドで並行して読み込もうとします。 - -設定可能な値: - -- 正の整数。 - -## merge_tree_min_bytes_for_concurrent_read_for_remote_filesystem {#merge_tree_min_bytes_for_concurrent_read_for_remote_filesystem} - - - - - -リモートファイルシステムから読み取る際に、[MergeTree](../../engines/table-engines/mergetree-family/mergetree.md) エンジンが読み取りを並列化できるようになるために、1つのファイルから読み取る必要がある最小バイト数です。この設定の使用は推奨されません。 - -使用可能な値: - -- 正の整数。 - -## merge_tree_min_bytes_for_seek {#merge_tree_min_bytes_for_seek} - - - -1 つのファイル内で読み取る 2 つのデータブロック間の距離が `merge_tree_min_bytes_for_seek` バイト未満の場合、ClickHouse は両方のブロックを含むファイルの範囲を連続して読み取り、追加のシークを回避します。 - -取りうる値: - -- 任意の正の整数値。 - -## merge_tree_min_bytes_per_task_for_remote_reading {#merge_tree_min_bytes_per_task_for_remote_reading} - -**別名**: `filesystem_prefetch_min_bytes_for_single_read_task` - - - - - -各タスクで読み取る最小バイト数。 - -## merge_tree_min_read_task_size {#merge_tree_min_read_task_size} - - - - - -タスクサイズの厳密な下限値です(グラニュール数が少なく、利用可能なスレッド数が多い場合でも、この値より小さいタスクは割り当てません)。 - -## merge_tree_min_rows_for_concurrent_read {#merge_tree_min_rows_for_concurrent_read} - - - -[MergeTree](../../engines/table-engines/mergetree-family/mergetree.md) テーブルのファイルから読み取る行数が `merge_tree_min_rows_for_concurrent_read` を超えると、ClickHouse はこのファイルを複数スレッドで並行して読み取ろうとします。 - -取りうる値: - -- 正の整数。 - -## merge_tree_min_rows_for_concurrent_read_for_remote_filesystem {#merge_tree_min_rows_for_concurrent_read_for_remote_filesystem} - - - - - -リモートファイルシステムから読み込む際に、[MergeTree](../../engines/table-engines/mergetree-family/mergetree.md) エンジンが読み取りを並列化できるようになるために、1 つのファイルから読み込む必要がある最小行数です。この設定の使用は推奨されません。 - -設定可能な値: - -- 正の整数 - -## merge_tree_min_rows_for_seek {#merge_tree_min_rows_for_seek} - - - -1 つのファイル内で読み取る 2 つのデータブロック間の行数の差が `merge_tree_min_rows_for_seek` 行未満の場合、ClickHouse はファイル内をシークせず、データを連続して読み込みます。 - -指定可能な値: - -- 任意の正の整数。 - -## merge_tree_read_split_ranges_into_intersecting_and_non_intersecting_injection_probability {#merge_tree_read_split_ranges_into_intersecting_and_non_intersecting_injection_probability} - - - - - -`PartsSplitter` のテスト用。指定された確率で、MergeTree から読み取るたびに読み取り範囲を交差するものと交差しないものに分割します。 - -## merge_tree_storage_snapshot_sleep_ms {#merge_tree_storage_snapshot_sleep_ms} - - - - - -MergeTree テーブルのストレージスナップショットを作成する際に、ミリ秒単位の意図的な遅延を挿入します。 -テストおよびデバッグの目的でのみ使用します。 - -取りうる値: - -- 0 - 遅延なし(デフォルト) -- N - ミリ秒単位の遅延 - -## merge_tree_use_const_size_tasks_for_remote_reading {#merge_tree_use_const_size_tasks_for_remote_reading} - - - -リモートテーブルからの読み取りに一定サイズのタスクを使用するかどうかを制御します。 - -## merge_tree_use_deserialization_prefixes_cache {#merge_tree_use_deserialization_prefixes_cache} - - - - - -MergeTree でリモートディスクから読み込む際に、ファイルプレフィックスから取得される列メタデータをキャッシュします。 - -## merge_tree_use_prefixes_deserialization_thread_pool {#merge_tree_use_prefixes_deserialization_thread_pool} - - - - - -MergeTree の Wide パーツにおけるプレフィックスの並列読み取りでスレッドプールの使用を有効化します。このスレッドプールのサイズは、サーバー設定 `max_prefixes_deserialization_thread_pool_size` によって制御されます。 - -## merge_tree_use_v1_object_and_dynamic_serialization {#merge_tree_use_v1_object_and_dynamic_serialization} - - - - - -有効にすると、MergeTree では JSON 型および Dynamic 型に対して V2 ではなく V1 のシリアライゼーションバージョンが使用されます。この設定の変更は、サーバーの再起動後にのみ反映されます。 - -## metrics_perf_events_enabled {#metrics_perf_events_enabled} - - - -有効にすると、クエリの実行中を通して一部の perf イベントが計測されます。 - -## metrics_perf_events_list {#metrics_perf_events_list} - -クエリ実行中に計測する perf メトリクスをカンマ区切りで指定するリストです。空の場合は、すべてのイベントが対象になります。利用可能なイベントについては、ソースコード中の PerfEventInfo を参照してください。 - -## min_bytes_to_use_direct_io {#min_bytes_to_use_direct_io} - - - -ストレージディスクに対して direct I/O アクセスを使用する際に必要となる最小データ量です。 - -ClickHouse はテーブルからデータを読み取る際にこの設定を使用します。読み取るすべてのデータの合計容量が `min_bytes_to_use_direct_io` バイトを超える場合、ClickHouse は `O_DIRECT` オプションを使用してストレージディスクからデータを読み取ります。 - -設定可能な値: - -- 0 — direct I/O を無効にする。 -- 正の整数。 - -## min_bytes_to_use_mmap_io {#min_bytes_to_use_mmap_io} - - - -これは実験的な設定です。カーネルからユーザ空間へのデータコピーを行わずに大きなファイルを読み込む際に使用する、最小メモリ量を設定します。推奨されるしきい値は約 64 MB です。これは [mmap/munmap](https://en.wikipedia.org/wiki/Mmap) が低速であるためです。大きなファイルに対してのみ有効であり、データがページキャッシュ上に存在する場合にのみ効果があります。 - -可能な値: - -- 正の整数。 -- 0 — 大きなファイルは、カーネルからユーザ空間へのデータコピーのみを用いて読み込まれます。 - -## min_chunk_bytes_for_parallel_parsing {#min_chunk_bytes_for_parallel_parsing} - - - -- 型: unsigned int -- デフォルト値: 1 MiB - -各スレッドが並列に解析するチャンクの最小サイズ(バイト単位)。 - -## min_compress_block_size {#min_compress_block_size} - - - -[MergeTree](../../engines/table-engines/mergetree-family/mergetree.md) テーブルに適用されます。クエリ処理時のレイテンシを削減するため、次のマークを書き込む際に、そのサイズが `min_compress_block_size` 以上であればブロックは圧縮されます。デフォルトは 65,536 です。 - -実際のブロックサイズは、非圧縮データが `max_compress_block_size` 未満である場合、この値以上であり、かつ 1 つのマークに対応するデータ量以上になります。 - -例を見てみましょう。テーブル作成時に `index_granularity` を 8192 に設定したとします。 - -UInt32 型のカラム(1 値あたり 4 バイト)を書き込むとします。8192 行を書き込むと、合計で 32 KB のデータになります。`min_compress_block_size = 65,536` なので、2 つのマークごとに 1 つの圧縮ブロックが形成されます。 - -String 型の URL カラム(平均サイズは 1 値あたり 60 バイト)を書き込むとします。8192 行を書き込むと、平均して 500 KB 弱のデータになります。これは 65,536 より大きいため、各マークごとに 1 つの圧縮ブロックが形成されます。この場合、ディスクから単一マークの範囲のデータを読み込むときに、余分なデータを伸長する必要はありません。 - -:::note -これはエキスパート向けの設定であり、ClickHouse を使い始めたばかりの場合は変更すべきではありません。 -::: - -## min_count_to_compile_aggregate_expression {#min_count_to_compile_aggregate_expression} - - - -同一の集約式に対して JIT コンパイルを開始するための最小個数です。[compile_aggregate_expressions](#compile_aggregate_expressions) 設定が有効な場合にのみ機能します。 - -設定可能な値: - -- 正の整数。 -- 0 — 同一の集約式は常に JIT コンパイルされます。 - -## min_count_to_compile_expression {#min_count_to_compile_expression} - - - -同じ式がコンパイル対象となるまでに必要な、その式の最小実行回数。 - -## min_count_to_compile_sort_description {#min_count_to_compile_sort_description} - - - -同一のソート記述が JIT コンパイルされるまでに必要な回数 - -## min_execution_speed {#min_execution_speed} - - - -1 秒あたりの行数で表される最小実行速度です。[`timeout_before_checking_execution_speed`](/operations/settings/settings#timeout_before_checking_execution_speed) -の制限時間が経過するたびに、各データブロックごとにチェックされます。実行速度がこの値より低い場合、例外がスローされます。 - -## min_execution_speed_bytes {#min_execution_speed_bytes} - - - -1 秒あたりの最小実行バイト数です。 -[`timeout_before_checking_execution_speed`](/operations/settings/settings#timeout_before_checking_execution_speed) -が満了するたびに、すべてのデータブロックでチェックされます。実行速度がこれを下回る場合、例外がスローされます。 - -## min_external_table_block_size_bytes {#min_external_table_block_size_bytes} - - - - - -ブロックが十分な大きさでない場合、外部テーブルに渡されるブロックを指定したバイト数のサイズになるようにまとめます。 - -## min_external_table_block_size_rows {#min_external_table_block_size_rows} - - - - - -外部テーブルに渡されるブロックが十分な大きさでない場合、指定した行数にまとめます。 - -## min_free_disk_bytes_to_perform_insert {#min_free_disk_bytes_to_perform_insert} - - - - - -INSERT を実行する際に必要な最小の空きディスク容量(バイト数)。 - -## min_free_disk_ratio_to_perform_insert {#min_free_disk_ratio_to_perform_insert} - - - - - -INSERT を実行する際に必要となる最小の空きディスク容量の比率です。 - -## min_free_disk_space_for_temporary_data {#min_free_disk_space_for_temporary_data} - - - -外部ソートおよび集約で使用される一時データを書き込む際に、確保しておく必要がある最小のディスク空き容量。 - -## min_hit_rate_to_use_consecutive_keys_optimization {#min_hit_rate_to_use_consecutive_keys_optimization} - - - -集約処理において連続キー最適化に使用されるキャッシュの最小ヒット率。この値以上である限り、最適化は有効のまま維持されます。 - -## min_insert_block_size_bytes {#min_insert_block_size_bytes} - - - -`INSERT` クエリによってテーブルに挿入できるブロックの最小バイト数を設定します。これより小さいサイズのブロックは、より大きなブロックにまとめられます。 - -設定可能な値: - -- 正の整数。 -- 0 — まとめ処理を無効にします。 - -## min_insert_block_size_bytes_for_materialized_views {#min_insert_block_size_bytes_for_materialized_views} - - - -`INSERT` クエリによってテーブルに挿入できるブロックの最小バイト数を設定します。より小さいサイズのブロックは、より大きなブロックにまとめられます。この設定は、[マテリアライズドビュー](../../sql-reference/statements/create/view.md) に挿入されるブロックに対してのみ適用されます。この設定を調整することで、マテリアライズドビューへの書き込み時のブロックのまとめ方を制御し、過剰なメモリ使用量を回避できます。 - -可能な値: - -- 任意の正の整数。 -- 0 — ブロックのまとめ処理を無効にします。 - -**参照** - -- [min_insert_block_size_bytes](#min_insert_block_size_bytes) - -## min_insert_block_size_rows {#min_insert_block_size_rows} - - - -`INSERT` クエリでテーブルに挿入できるブロック内の最小行数を設定します。より小さいブロックは、より大きなブロックにまとめられます。 - -設定可能な値: - -- 正の整数。 -- 0 — まとめ処理を無効にします。 - -## min_insert_block_size_rows_for_materialized_views {#min_insert_block_size_rows_for_materialized_views} - - - -`INSERT` クエリでテーブルに挿入できるブロック内の最小行数を設定します。より小さいブロックは、より大きなブロックにまとめられます。この設定は、[マテリアライズドビュー](../../sql-reference/statements/create/view.md) に挿入されるブロックに対してのみ適用されます。この設定を調整することで、マテリアライズドビューへの書き込み時のブロックのまとめ方を制御し、過剰なメモリ使用を回避できます。 - -取りうる値: - -- 任意の正の整数。 -- 0 — まとめ処理を無効にする。 - -**参照** - -- [min_insert_block_size_rows](#min_insert_block_size_rows) - -## min_joined_block_size_bytes {#min_joined_block_size_bytes} - - - - - -JOIN の入力および出力ブロック(JOIN アルゴリズムがサポートしている場合)に対する最小ブロックサイズ(バイト単位)。小さいブロックはまとめられます。0 を指定すると無制限を意味します。 - -## min_joined_block_size_rows {#min_joined_block_size_rows} - - - - - -JOIN の入力および出力ブロックに対する行数単位の最小ブロックサイズ(JOIN アルゴリズムがこれをサポートする場合)。小さいブロックはまとめられます。0 は無制限を意味します。 - -## min_os_cpu_wait_time_ratio_to_throw {#min_os_cpu_wait_time_ratio_to_throw} - - - - - -クエリを拒否するかどうかを判断する際に使用される、OS の CPU 待機時間(`OSCPUWaitMicroseconds` メトリクス)とビジー時間(`OSCPUVirtualTimeMicroseconds` メトリクス)の最小比率。拒否確率の計算には、最小比率と最大比率の間の線形補間が使用され、この比率では確率は 0 になります。 - -## min_outstreams_per_resize_after_split {#min_outstreams_per_resize_after_split} - - - - - -パイプライン生成時に行われる分割処理の後における `Resize` または `StrictResize` プロセッサの出力ストリーム数の最小値を指定します。結果として得られるストリーム数がこの値より小さい場合、分割処理は実行されません。 - -### Resize ノードとは - -`Resize` ノードは、クエリパイプライン内でパイプラインを流れるデータストリームの本数を調整するプロセッサです。スレッドやプロセッサ間でワークロードを均等化するために、ストリーム数を増減させることができます。たとえば、クエリでより高い並列性が必要な場合、`Resize` ノードは単一のストリームを複数のストリームに分割できます。逆に、複数のストリームをより少ないストリームに統合して、データ処理を集約することもできます。 - -`Resize` ノードは、データブロックの構造を維持しながら、データがストリーム間で均等に分配されるようにします。これにより、リソース利用が最適化され、クエリパフォーマンスが向上します。 - -### Resize ノードを分割する必要がある理由 - -パイプライン実行中、集中ハブとなっている `Resize` ノードの ExecutingGraph::Node::status_mutex に対して、特にコア数の多い環境では激しい競合が発生し、この競合により次の問題が生じます。 - -1. ExecutingGraph::updateNode のレイテンシが増加し、クエリ性能に直接悪影響を与える。 -2. スピンロックでの競合(native_queued_spin_lock_slowpath)によって過剰な CPU サイクルが消費され、効率が低下する。 -3. CPU 利用率が低下し、並列実行性とスループットが制限される。 - -### Resize ノードが分割される仕組み - -1. 出力ストリーム数を確認し、分割を実行できるかどうかを検証します。具体的には、各分割後のプロセッサの出力ストリーム数が `min_outstreams_per_resize_after_split` の閾値以上である必要があります。 -2. `Resize` ノードは、同一のポート数を持つ複数の小さな `Resize` ノードに分割され、それぞれが入力・出力ストリームの一部を担当します。 -3. 各グループは独立して処理されるため、ロック競合が軽減されます。 - -### 任意の入力/出力を持つ Resize ノードの分割 - -入力/出力の数が分割後の `Resize` ノード数で割り切れない場合には、一部の入力を `NullSource` に、一部の出力を `NullSink` に接続します。これにより、全体のデータフローに影響を与えることなく分割を行うことができます。 - -### この設定の目的 - -`min_outstreams_per_resize_after_split` 設定は、`Resize` ノードの分割が十分な効果を持つようにし、ストリーム数が少なすぎる状態になることを防ぐためのものです。ストリーム数が少なすぎると並列処理の効率が低下する可能性があります。出力ストリームの最小数を強制することで、この設定は並列性とオーバーヘッドのバランスを維持し、ストリームの分割やマージを伴うシナリオにおけるクエリ実行を最適化します。 - -### 設定の無効化 - -`Resize` ノードの分割を無効にするには、この設定値を 0 にします。これにより、パイプライン生成中に `Resize` ノードが分割されることがなくなり、より小さなノードに分割されず元の構造を保持できるようになります。 - -## min_table_rows_to_use_projection_index {#min_table_rows_to_use_projection_index} - - - - - -テーブルから読み取る行数の推定値がこのしきい値以上の場合、クエリ実行中に ClickHouse はプロジェクションインデックスを使用しようとします。 - -## mongodb_throw_on_unsupported_query {#mongodb_throw_on_unsupported_query} - - - - - -有効にすると、MongoDB テーブルは MongoDB クエリを構築できない場合にエラーを返します。無効にすると、ClickHouse はテーブル全体を読み取り、ローカルで処理します。このオプションは `allow_experimental_analyzer=0` のときには適用されません。 - -## move_all_conditions_to_prewhere {#move_all_conditions_to_prewhere} - - - -WHERE 句から PREWHERE 句へ、適用可能なすべての条件を移動します - -## move_primary_key_columns_to_end_of_prewhere {#move_primary_key_columns_to_end_of_prewhere} - - - -PRIMARY KEY 列を含む PREWHERE 条件を、AND で連結された条件の末尾へ移動します。これらの条件は主キー解析の段階で考慮される可能性が高く、そのため PREWHERE によるフィルタリング効果はそれほど大きくありません。 - -## multiple_joins_try_to_keep_original_names {#multiple_joins_try_to_keep_original_names} - - - -複数の JOIN を書き換える際に、トップレベルの式リストにエイリアスを追加しない - -## mutations_execute_nondeterministic_on_initiator {#mutations_execute_nondeterministic_on_initiator} - - - -`true` の場合、定数である非決定的関数(例: 関数 `now()`)はイニシエータ側で実行され、`UPDATE` および `DELETE` クエリ内ではリテラルに置き換えられます。これにより、定数の非決定的関数を用いたミューテーションを実行する際に、レプリカ間のデータを同期した状態に保つのに役立ちます。デフォルト値: `false`。 - -## mutations_execute_subqueries_on_initiator {#mutations_execute_subqueries_on_initiator} - - - -`true` の場合、スカラーサブクエリはイニシエーター側で実行され、`UPDATE` および `DELETE` クエリ内でリテラルに置き換えられます。デフォルト値: `false`。 - -## mutations_max_literal_size_to_replace {#mutations_max_literal_size_to_replace} - - - -`UPDATE` および `DELETE` クエリで置換対象となる、シリアル化されたリテラル値の最大サイズ(バイト単位)。この設定は、上記 2 つの設定のうち少なくとも 1 つが有効になっている場合にのみ適用されます。デフォルト値は 16384 (16 KiB) です。 - -## mutations_sync {#mutations_sync} - - - -`ALTER TABLE ... UPDATE|DELETE|MATERIALIZE INDEX|MATERIALIZE PROJECTION|MATERIALIZE COLUMN|MATERIALIZE STATISTICS` クエリ([mutation](../../sql-reference/statements/alter/index.md/#mutations))を同期的に実行するかどうかを制御します。 - -設定可能な値: - -| Value | Description | -|-------|-------------------------------------------------------------------------------------------------------------------------------------------------------| -| `0` | mutation を非同期で実行します。 | -| `1` | クエリは、現在のサーバー上のすべての mutation が完了するまで待機します。 | -| `2` | クエリは、すべてのレプリカ(存在する場合)での mutation が完了するまで待機します。 | -| `3` | クエリはアクティブなレプリカのみを待機します。`SharedMergeTree` でのみサポートされます。`ReplicatedMergeTree` では `mutations_sync = 2` と同じ動作になります。| - -## mysql_datatypes_support_level {#mysql_datatypes_support_level} - -MySQL の型が対応する ClickHouse の型にどのように変換されるかを定義します。`decimal`、`datetime64`、`date2Date32`、`date2String` を任意に組み合わせて指定するカンマ区切りのリストです。 - -- `decimal`: 精度が許す場合に `NUMERIC` および `DECIMAL` 型を `Decimal` に変換します。 -- `datetime64`: 精度が `0` でない場合に `DATETIME` および `TIMESTAMP` 型を `DateTime` ではなく `DateTime64` に変換します。 -- `date2Date32`: `DATE` を `Date` ではなく `Date32` に変換します。`date2String` より優先されます。 -- `date2String`: `DATE` を `Date` ではなく `String` に変換します。`datetime64` によって上書きされます。 - -## mysql_map_fixed_string_to_text_in_show_columns {#mysql_map_fixed_string_to_text_in_show_columns} - - - - - -有効にすると、[FixedString](../../sql-reference/data-types/fixedstring.md) ClickHouse データ型は、[SHOW COLUMNS](../../sql-reference/statements/show.md/#show_columns) で `TEXT` として表示されます。 - -MySQL ワイヤープロトコル経由の接続時にのみ有効です。 - -- 0 - `BLOB` を使用。 -- 1 - `TEXT` を使用。 - -## mysql_map_string_to_text_in_show_columns {#mysql_map_string_to_text_in_show_columns} - - - - - -有効にすると、ClickHouse の [String](../../sql-reference/data-types/string.md) データ型は、[SHOW COLUMNS](../../sql-reference/statements/show.md/#show_columns) で `TEXT` として表示されます。 - -MySQL ワイヤプロトコル経由で接続された場合にのみ有効です。 - -- 0 - `BLOB` を使用。 -- 1 - `TEXT` を使用。 - -## mysql_max_rows_to_insert {#mysql_max_rows_to_insert} - - - -MySQL ストレージエンジンでのバッチ挿入における最大行数 - -## network_compression_method {#network_compression_method} - - - -クライアント/サーバー間およびサーバー間通信を圧縮するためのコーデック。 - -指定可能な値は次のとおりです: - -- `NONE` — 圧縮しない。 -- `LZ4` — LZ4 コーデックを使用する。 -- `LZ4HC` — LZ4HC コーデックを使用する。 -- `ZSTD` — ZSTD コーデックを使用する。 - -**関連項目** - -- [network_zstd_compression_level](#network_zstd_compression_level) - -## network_zstd_compression_level {#network_zstd_compression_level} - - - -ZSTD 圧縮のレベルを調整します。[network_compression_method](#network_compression_method) が `ZSTD` に設定されている場合にのみ使用されます。 - -可能な値: - -- 1 から 15 までの正の整数 - -## normalize_function_names {#normalize_function_names} - - - - - -関数名をカノニカルな名前に正規化します - -## number_of_mutations_to_delay {#number_of_mutations_to_delay} - - - -ミューテーション対象のテーブルに未完了のミューテーションがこの数以上存在する場合、テーブルのミューテーションを意図的に遅延させます。0 の場合は無効です。 - -## number_of_mutations_to_throw {#number_of_mutations_to_throw} - - - -ミューテーション対象のテーブルに、未完了のミューテーションがこの値以上ある場合に「Too many mutations ...」例外をスローします。0 の場合は無効です。 - -## odbc_bridge_connection_pool_size {#odbc_bridge_connection_pool_size} - - - -ODBC ブリッジにおいて、各接続設定文字列ごとの接続プールサイズ。 - -## odbc_bridge_use_connection_pooling {#odbc_bridge_use_connection_pooling} - - - -ODBC ブリッジでコネクションプーリングを使用します。`false` に設定すると、その都度新しい接続が確立されます。 - -## offset - - - -クエリで行の返却を開始する前にスキップする行数を設定します。[OFFSET](/sql-reference/statements/select/offset) 句で設定されたオフセットに対して調整を行い、この 2 つの値が合算されるようにします。 - -指定可能な値: - -* 0 — 行をスキップしません。 -* 正の整数。 - -**例** - -入力テーブル: - -```sql -CREATE TABLE test (i UInt64) ENGINE = MergeTree() ORDER BY i; -INSERT INTO test SELECT number FROM numbers(500); -``` - -クエリ: - -```sql -SET limit = 5; -SET offset = 7; -SELECT * FROM test LIMIT 10 OFFSET 100; -``` - -結果: - -```text -┌───i─┐ -│ 107 │ -│ 108 │ -│ 109 │ -└─────┘ -``` - - -## opentelemetry_start_trace_probability {#opentelemetry_start_trace_probability} - - - -(親の [trace context](https://www.w3.org/TR/trace-context/) が渡されていない場合に)ClickHouse が実行されたクエリに対してトレースを開始できる確率を設定します。 - -指定可能な値: - -- 0 — (親の trace context が渡されていない場合に)すべての実行されたクエリに対するトレースを無効にします。 -- [0..1] の範囲の正の浮動小数点数。たとえば設定値が `0,5` の場合、ClickHouse は平均してクエリの半分に対してトレースを開始できます。 -- 1 — すべての実行されたクエリに対するトレースを有効にします。 - -## opentelemetry_trace_cpu_scheduling {#opentelemetry_trace_cpu_scheduling} - - - - - -ワークロードのプリエンプティブ CPU スケジューリングに関する OpenTelemetry のスパンを収集します。 - -## opentelemetry_trace_processors {#opentelemetry_trace_processors} - - - -プロセッサ用の OpenTelemetry スパンを収集します。 - -## optimize_aggregation_in_order {#optimize_aggregation_in_order} - - - -[MergeTree](../../engines/table-engines/mergetree-family/mergetree.md) テーブルで、対応する順序でデータを集計する際の [SELECT](../../sql-reference/statements/select/index.md) クエリにおける [GROUP BY](/sql-reference/statements/select/group-by) の最適化を有効にします。 - -取り得る値: - -- 0 — `GROUP BY` の最適化を無効にします。 -- 1 — `GROUP BY` の最適化を有効にします。 - -**関連項目** - -- [GROUP BY の最適化](/sql-reference/statements/select/group-by#group-by-optimization-depending-on-table-sorting-key) - -## optimize_aggregators_of_group_by_keys {#optimize_aggregators_of_group_by_keys} - - - -SELECT 句において、GROUP BY キーに対する min/max/any/anyLast 集約関数を除去します - -## optimize_and_compare_chain {#optimize_and_compare_chain} - - - - - -`AND` チェーン内の定数を用いた比較条件を補完し、フィルタリングの効果を高めます。演算子 `<`、`<=`、`>`、`>=`、`=` およびそれらの組み合わせをサポートします。例えば、`(a < b) AND (b < c) AND (c < 5)` は `(a < b) AND (b < c) AND (c < 5) AND (b < 5) AND (a < 5)` となります。 - -## optimize_append_index {#optimize_append_index} - - - -インデックス条件を追加するために[制約](../../sql-reference/statements/create/table.md/#constraints)を使用します。デフォルトは `false` です。 - -指定可能な値: - -- true, false - -## optimize_arithmetic_operations_in_aggregate_functions {#optimize_arithmetic_operations_in_aggregate_functions} - - - -集約関数の外に算術演算を移動する - -## optimize_const_name_size {#optimize_const_name_size} - - - - - -大きな定数をスカラー値に置き換え、名前としてハッシュを使用します(サイズは名前の長さに基づいて推定されます)。 - -取り得る値: - -- 正の整数 — 名前の最大長, -- 0 — 常に置き換える, -- 負の整数 — 置き換えを行わない。 - -## optimize_count_from_files {#optimize_count_from_files} - - - -さまざまな入力フォーマットのファイルに対する行数カウント処理の最適化を有効または無効にします。テーブル関数/エンジン `file`/`s3`/`url`/`hdfs`/`azureBlobStorage` に適用されます。 - -設定可能な値: - -- 0 — 最適化を無効にする。 -- 1 — 最適化を有効にする。 - -## optimize_distinct_in_order {#optimize_distinct_in_order} - - - -`DISTINCT` で使用される一部のカラムがソートキーの先頭部分(プレフィックス)になっている場合に、`DISTINCT` の最適化を有効にします。たとえば、MergeTree のソートキーや、`ORDER BY` 句で指定したソートキーの先頭部分などです。 - -## optimize_distributed_group_by_sharding_key {#optimize_distributed_group_by_sharding_key} - - - -イニシエータサーバー上でコストの高い集約処理を回避することで、`GROUP BY sharding_key` クエリを最適化します(これにより、イニシエータサーバー上でのクエリのメモリ使用量が削減されます)。 - -次の種類のクエリがサポートされます(およびそれらのあらゆる組み合わせ): - -- `SELECT DISTINCT [..., ]sharding_key[, ...] FROM dist` -- `SELECT ... FROM dist GROUP BY sharding_key[, ...]` -- `SELECT ... FROM dist GROUP BY sharding_key[, ...] ORDER BY x` -- `SELECT ... FROM dist GROUP BY sharding_key[, ...] LIMIT 1` -- `SELECT ... FROM dist GROUP BY sharding_key[, ...] LIMIT 1 BY x` - -次の種類のクエリはサポートされません(一部については今後サポートが追加される可能性があります): - -- `SELECT ... GROUP BY sharding_key[, ...] WITH TOTALS` -- `SELECT ... GROUP BY sharding_key[, ...] WITH ROLLUP` -- `SELECT ... GROUP BY sharding_key[, ...] WITH CUBE` -- `SELECT ... GROUP BY sharding_key[, ...] SETTINGS extremes=1` - -設定可能な値: - -- 0 — 無効。 -- 1 — 有効。 - -関連項目: - -- [distributed_group_by_no_merge](#distributed_group_by_no_merge) -- [distributed_push_down_limit](#distributed_push_down_limit) -- [optimize_skip_unused_shards](#optimize_skip_unused_shards) - -:::note -現時点では `optimize_skip_unused_shards` が必要です。理由は、将来的にこの設定がデフォルトで有効化される可能性があり、その場合、データが Distributed テーブル経由で挿入されている、つまりデータが sharding_key に従って分散されている場合にのみ正しく動作するためです。 -::: - -## optimize_empty_string_comparisons {#optimize_empty_string_comparisons} - - - - - -`col = ''` や `'' = col` のような式を `empty(col)` に、`col != ''` や `'' != col` のような式を `notEmpty(col)` に変換します。ただし、`col` が `String` または `FixedString` 型の場合にのみ有効です。 - -## optimize_extract_common_expressions {#optimize_extract_common_expressions} - - - - - -WHERE、PREWHERE、ON、HAVING、QUALIFY の各式において、論理和から共通部分式を抽出できるようにします。`(A AND B) OR (A AND C)` のような論理式は `A AND (B OR C)` の形に書き換えることができ、次の点で有利になる可能性があります: - -- 単純なフィルタリング式でのインデックス利用 -- CROSS JOIN を INNER JOIN に変換する最適化 - -## optimize_functions_to_subcolumns {#optimize_functions_to_subcolumns} - - - - - -一部の関数をサブカラムの読み取りに変換することで、最適化を有効または無効にします。これにより、読み取るデータ量を削減できます。 - -次の関数が変換の対象になります: - -- [length](/sql-reference/functions/array-functions#length) — [size0](../../sql-reference/data-types/array.md/#array-size) サブカラムを読み取ります。 -- [empty](/sql-reference/functions/array-functions#empty) — [size0](../../sql-reference/data-types/array.md/#array-size) サブカラムを読み取ります。 -- [notEmpty](/sql-reference/functions/array-functions#notEmpty) — [size0](../../sql-reference/data-types/array.md/#array-size) サブカラムを読み取ります。 -- [isNull](/sql-reference/functions/functions-for-nulls#isNull) — [null](../../sql-reference/data-types/nullable.md/#finding-null) サブカラムを読み取ります。 -- [isNotNull](/sql-reference/functions/functions-for-nulls#isNotNull) — [null](../../sql-reference/data-types/nullable.md/#finding-null) サブカラムを読み取ります。 -- [count](/sql-reference/aggregate-functions/reference/count) — [null](../../sql-reference/data-types/nullable.md/#finding-null) サブカラムを読み取ります。 -- [mapKeys](/sql-reference/functions/tuple-map-functions#mapkeys) — [keys](/sql-reference/data-types/map#reading-subcolumns-of-map) サブカラムを読み取ります。 -- [mapValues](/sql-reference/functions/tuple-map-functions#mapvalues) — [values](/sql-reference/data-types/map#reading-subcolumns-of-map) サブカラムを読み取ります。 - -設定値: - -- 0 — 最適化を無効にします。 -- 1 — 最適化を有効にします。 - -## optimize_group_by_constant_keys {#optimize_group_by_constant_keys} - - - - - -ブロック内のすべてのキーが定数値である場合に GROUP BY を最適化します - -## optimize_group_by_function_keys {#optimize_group_by_function_keys} - - - -GROUP BY 句内における他のキーへの関数適用を除去します - -## optimize_if_chain_to_multiif {#optimize_if_chain_to_multiif} - - - -if(cond1, then1, if(cond2, ...)) のチェーンを multiIf に置き換えます。現時点では数値型に対してはメリットがありません。 - -## optimize_if_transform_strings_to_enum {#optimize_if_transform_strings_to_enum} - - - -`If` および `Transform` 内の文字列型引数を `enum` に置き換えます。分散クエリで一貫性のない変更が発生し、クエリが失敗する可能性があるため、デフォルトでは無効です。 - -## optimize_injective_functions_in_group_by {#optimize_injective_functions_in_group_by} - - - - - -GROUP BY セクション内の単射関数をその引数に置き換えます - -## optimize_injective_functions_inside_uniq {#optimize_injective_functions_inside_uniq} - - - -uniq*() 関数内にある、1 つの引数を取る単射関数を削除します。 - -## optimize_min_equality_disjunction_chain_length {#optimize_min_equality_disjunction_chain_length} - - - -`expr = x1 OR ... expr = xN` という式が最適化の対象となるための最小長 - -## optimize_min_inequality_conjunction_chain_length {#optimize_min_inequality_conjunction_chain_length} - - - -式 `expr <> x1 AND ... expr <> xN` が最適化の対象となるための最小長 - -## optimize_move_to_prewhere {#optimize_move_to_prewhere} - - - -[SELECT](../../sql-reference/statements/select/index.md) クエリにおける自動 [`PREWHERE`](../../sql-reference/statements/select/prewhere.md) 最適化を有効または無効にします。 - -[*MergeTree](../../engines/table-engines/mergetree-family/index.md) テーブルでのみ動作します。 - -可能な値: - -- 0 — 自動 `PREWHERE` 最適化を無効にします。 -- 1 — 自動 `PREWHERE` 最適化を有効にします。 - -## optimize_move_to_prewhere_if_final {#optimize_move_to_prewhere_if_final} - - - -[FINAL](/sql-reference/statements/select/from#final-modifier) 修飾子を含む [SELECT](../../sql-reference/statements/select/index.md) クエリに対して、自動的な [PREWHERE](../../sql-reference/statements/select/prewhere.md) 最適化を有効または無効にします。 - -[*MergeTree](../../engines/table-engines/mergetree-family/index.md) テーブルでのみ動作します。 - -設定可能な値: - -- 0 — `FINAL` 修飾子を持つ `SELECT` クエリでの自動 `PREWHERE` 最適化を無効にします。 -- 1 — `FINAL` 修飾子を持つ `SELECT` クエリでの自動 `PREWHERE` 最適化を有効にします。 - -**関連項目** - -- [optimize_move_to_prewhere](#optimize_move_to_prewhere) 設定 - -## optimize_multiif_to_if {#optimize_multiif_to_if} - - - -1 つだけ条件を持つ `multiIf` を `if` に置き換えます。 - -## optimize_normalize_count_variants {#optimize_normalize_count_variants} - - - - - -意味上 `count()` と同等の集約関数を `count()` に書き換えます。 - -## optimize_on_insert - - - - - -挿入前に、(テーブルエンジンに従って)このブロックに対してマージが実行されたかのようにデータ変換を行うかどうかを制御します。 - -取りうる値: - -* 0 — 無効。 -* 1 — 有効。 - -**例** - -有効な場合と無効な場合の違い: - -クエリ: - -```sql -SET optimize_on_insert = 1; - -CREATE TABLE test1 (`FirstTable` UInt32) ENGINE = ReplacingMergeTree ORDER BY FirstTable; - -INSERT INTO test1 SELECT number % 2 FROM numbers(5); - -SELECT * FROM test1; - -SET optimize_on_insert = 0; - -CREATE TABLE test2 (`SecondTable` UInt32) ENGINE = ReplacingMergeTree ORDER BY SecondTable; - -INSERT INTO test2 SELECT number % 2 FROM numbers(5); - -SELECT * FROM test2; -``` - -結果: - -```text -┌─FirstTable─┐ -│ 0 │ -│ 1 │ -└────────────┘ - -┌─SecondTable─┐ -│ 0 │ -│ 0 │ -│ 0 │ -│ 1 │ -│ 1 │ -└─────────────┘ -``` - -この設定は、[マテリアライズドビュー](/sql-reference/statements/create/view#materialized-view) の動作に影響します。 - - -## optimize_or_like_chain {#optimize_or_like_chain} - - - -複数の OR LIKE を multiMatchAny に最適化します。この最適化は、場合によってはインデックスの解析を妨げるため、デフォルトでは有効化すべきではありません。 - -## optimize_qbit_distance_function_reads {#optimize_qbit_distance_function_reads} - - - - - -`QBit` データ型に対する距離関数を、計算に必要な列のみをストレージから読み取る同等の関数に置き換えます。 - -## optimize_read_in_order {#optimize_read_in_order} - - - -[MergeTree](../../engines/table-engines/mergetree-family/mergetree.md) テーブルからデータを読み取る [SELECT](../../sql-reference/statements/select/index.md) クエリにおける [ORDER BY](/sql-reference/statements/select/order-by#optimization-of-data-reading) の最適化を有効にします。 - -設定可能な値: - -- 0 — `ORDER BY` の最適化を無効にします。 -- 1 — `ORDER BY` の最適化を有効にします。 - -**関連項目** - -- [ORDER BY 句](/sql-reference/statements/select/order-by#optimization-of-data-reading) - -## optimize_read_in_window_order {#optimize_read_in_window_order} - - - -MergeTree テーブルでデータを指定された順序で読み取れるように、ウィンドウ句の ORDER BY の最適化を有効にします。 - -## optimize_redundant_functions_in_order_by {#optimize_redundant_functions_in_order_by} - - - -引数も ORDER BY に含まれている関数を ORDER BY から削除します - -## optimize_respect_aliases {#optimize_respect_aliases} - - - -true に設定すると、WHERE/GROUP BY/ORDER BY 句内のエイリアスが考慮されるようになり、パーティションプルーニング/セカンダリインデックス/optimize_aggregation_in_order/optimize_read_in_order/optimize_trivial_count の最適化に役立ちます。 - -## optimize_rewrite_aggregate_function_with_if {#optimize_rewrite_aggregate_function_with_if} - - - -論理的に等価である場合、引数として `if` 式を取る集約関数を書き換えます。 -例えば、`avg(if(cond, col, null))` は `avgOrNullIf(cond, col)` に書き換えることができます。これにより、パフォーマンスが向上する可能性があります。 - -:::note -アナライザー(`enable_analyzer = 1`)使用時のみサポートされます。 -::: - -## optimize_rewrite_array_exists_to_has {#optimize_rewrite_array_exists_to_has} - - - -`arrayExists()` 関数を、論理的に等価な場合には `has()` に書き換えます。たとえば、`arrayExists(x -> x = 1, arr)` は `has(arr, 1)` に書き換えることができます。 - -## optimize_rewrite_like_perfect_affix {#optimize_rewrite_like_perfect_affix} - - - - - -完全な前方一致または後方一致の LIKE 式(例: `col LIKE 'ClickHouse%'`)を、`startsWith` や `endsWith` 関数(例: `startsWith(col, 'ClickHouse')`)の呼び出しに書き換えます。 - -## optimize_rewrite_regexp_functions {#optimize_rewrite_regexp_functions} - - - - - -正規表現関連の関数をより単純で効率的な形に書き換えます - -## optimize_rewrite_sum_if_to_count_if {#optimize_rewrite_sum_if_to_count_if} - - - - - -論理的に同値である場合、`sumIf()` 関数および `sum(if())` 関数を `countIf()` 関数に書き換えます。 - -## optimize_skip_merged_partitions {#optimize_skip_merged_partitions} - - - -`level > 0` のパーツが 1 つだけ存在し、そのパーツに期限切れ TTL がない場合に、[OPTIMIZE TABLE ... FINAL](../../sql-reference/statements/optimize.md) クエリの最適化を有効化するかどうかを制御します。 - -- `OPTIMIZE TABLE ... FINAL SETTINGS optimize_skip_merged_partitions=1` - -デフォルトでは、`OPTIMIZE TABLE ... FINAL` クエリは、パーツが 1 つしかない場合でもそのパーツを再書き込みします。 - -設定値: - -- 1 - 最適化を有効にする。 -- 0 - 最適化を無効にする。 - -## optimize_skip_unused_shards {#optimize_skip_unused_shards} - - - -`WHERE/PREWHERE` にシャーディングキー条件が含まれる [SELECT](../../sql-reference/statements/select/index.md) クエリについて、未使用シャードをスキップするかどうかを制御します(データがシャーディングキーで分散されていることを前提としており、そうでない場合はクエリ結果が不正確になります)。 - -設定可能な値: - -- 0 — 無効。 -- 1 — 有効。 - -## optimize_skip_unused_shards_limit {#optimize_skip_unused_shards_limit} - - - -シャーディングキー値の数に対する上限。この上限に達すると、`optimize_skip_unused_shards` は無効になります。 - -値の数が多すぎると処理コストが大きくなりますが、その効果はあまり期待できません。`IN (...)` に非常に多くの値が含まれている場合、結局のところクエリはすべてのシャードに送信される可能性が高いためです。 - -## optimize_skip_unused_shards_nesting {#optimize_skip_unused_shards_nesting} - - - -分散クエリのネストレベル(ある `Distributed` テーブルが別の `Distributed` テーブルを参照しているケース)に応じて [`optimize_skip_unused_shards`](#optimize_skip_unused_shards) の動作を制御します(そのため、[`optimize_skip_unused_shards`](#optimize_skip_unused_shards) 自体を有効にしておく必要があります)。 - -可能な値: - -- 0 — 無効。`optimize_skip_unused_shards` は常に動作します。 -- 1 — 最初のレベルに対してのみ `optimize_skip_unused_shards` を有効にします。 -- 2 — 第 2 レベルまで `optimize_skip_unused_shards` を有効にします。 - -## optimize_skip_unused_shards_rewrite_in {#optimize_skip_unused_shards_rewrite_in} - - - -リモートシャードへのクエリ内にある `IN` 述語を書き換え、そのシャードに属さない値を除外します(`optimize_skip_unused_shards` が有効である必要があります)。 - -可能な値: - -- 0 — 無効。 -- 1 — 有効。 - -## optimize_sorting_by_input_stream_properties {#optimize_sorting_by_input_stream_properties} - - - -入力ストリームのソート特性を利用してソートを最適化する - -## optimize_substitute_columns {#optimize_substitute_columns} - - - -列の置換に [constraints](../../sql-reference/statements/create/table.md/#constraints) を使用します。デフォルト値は `false` です。 - -設定可能な値: - -- true, false - -## optimize_syntax_fuse_functions - - - -同一の引数を持つ集約関数を統合して処理できるようにします。クエリ内に、同一の引数を持つ [sum](/sql-reference/aggregate-functions/reference/sum)、[count](/sql-reference/aggregate-functions/reference/count)、または [avg](/sql-reference/aggregate-functions/reference/avg) が 2 つ以上含まれている場合、それらを [sumCount](/sql-reference/aggregate-functions/reference/sumcount) に書き換えます。 - -指定可能な値: - -* 0 — 同一の引数を持つ関数は統合されません。 -* 1 — 同一の引数を持つ関数は統合されます。 - -**例** - -クエリ: - -```sql -CREATE TABLE fuse_tbl(a Int8, b Int8) Engine = Log; -SET optimize_syntax_fuse_functions = 1; -EXPLAIN SYNTAX SELECT sum(a), sum(b), count(b), avg(b) from fuse_tbl FORMAT TSV; -``` - -結果: - -```text -SELECT - sum(a), - sumCount(b).1, - sumCount(b).2, - (sumCount(b).1) / (sumCount(b).2) -FROM fuse_tbl -``` - - -## optimize_throw_if_noop {#optimize_throw_if_noop} - - - -[OPTIMIZE](../../sql-reference/statements/optimize.md) クエリがマージを実行しなかった場合に、例外をスローするかどうかを制御します。 - -デフォルトでは、`OPTIMIZE` は何も行わなかった場合でも正常終了します。この設定により、そのような状況を判別し、例外メッセージとしてその理由を取得できます。 - -可能な値: - -- 1 — 例外をスローする。 -- 0 — 例外をスローしない。 - -## optimize_time_filter_with_preimage {#optimize_time_filter_with_preimage} - - - - col >= '2023-01-01' AND col <= '2023-12-31')"}]}]}/> - -関数を型変換なしで等価な比較式に変換することで、Date および DateTime の述語を最適化します(例: `toYear(col) = 2023 -> col >= '2023-01-01' AND col <= '2023-12-31'`) - -## optimize_trivial_approximate_count_query {#optimize_trivial_approximate_count_query} - - - -EmbeddedRocksDB など、その種の推定をサポートするストレージに対する単純な `count` クエリの最適化に、近似値を使用します。 - -取りうる値: - -- 0 — 最適化を無効化。 - - 1 — 最適化を有効化。 - -## optimize_trivial_count_query {#optimize_trivial_count_query} - - - -MergeTree のメタデータを使用して、`SELECT count() FROM table` のような単純なクエリを最適化するかどうかを切り替えます。行レベルセキュリティを使用する場合は、この設定を無効にしてください。 - -設定可能な値: - -- 0 — 最適化を無効にする。 - - 1 — 最適化を有効にする。 - -関連項目: - -- [optimize_functions_to_subcolumns](#optimize_functions_to_subcolumns) - -## optimize_trivial_insert_select {#optimize_trivial_insert_select} - - - - - -単純な `INSERT INTO table SELECT ... FROM TABLES` クエリの最適化 - -## optimize_uniq_to_count {#optimize_uniq_to_count} - - - -サブクエリに `DISTINCT` または `GROUP BY` 句がある場合、`uniq` とその派生関数(`uniqUpTo` を除く)を `count` に変換します。 - -## optimize_use_implicit_projections {#optimize_use_implicit_projections} - - - -`SELECT` クエリのために暗黙のプロジェクションを自動的に選択します - -## optimize_use_projection_filtering {#optimize_use_projection_filtering} - - - - - -SELECT クエリの実行にプロジェクションが選択されていない場合でも、パート範囲のフィルタリングにプロジェクションを使用できるようにします。 - -## optimize_use_projections {#optimize_use_projections} - -**別名**: `allow_experimental_projection_optimization` - - - -`SELECT` クエリを処理する際に、[projection](../../engines/table-engines/mergetree-family/mergetree.md/#projections) の最適化を有効または無効にします。 - -設定可能な値: - -- 0 — projection の最適化を無効にします。 -- 1 — projection の最適化を有効にします。 - -## optimize_using_constraints {#optimize_using_constraints} - - - -クエリの最適化に[制約](../../sql-reference/statements/create/table.md/#constraints)を使用します。デフォルトは `false` です。 - -取りうる値: - -- true, false - -## os_threads_nice_value_materialized_view {#os_threads_nice_value_materialized_view} - - - - - -マテリアライズドビューのスレッドに対する Linux の nice 値を指定します。値が低いほど CPU の優先度が高くなります。 - -CAP_SYS_NICE ケイパビリティが必要で、付与されていない場合は何も行われません。 - -取りうる値:-20〜19。 - -## os_threads_nice_value_query {#os_threads_nice_value_query} - -**別名**: `os_thread_priority` - - - - - -クエリ処理スレッドに対する Linux の nice 値です。値が低いほど CPU の優先度は高くなります。 - -CAP_SYS_NICE ケーパビリティが必要であり、ない場合は効果はありません。 - -取り得る値: -20 ~ 19。 - -## output_format_compression_level {#output_format_compression_level} - - - - - -クエリ出力が圧縮される場合のデフォルトの圧縮レベルです。`SELECT` クエリに `INTO OUTFILE` が指定されている場合、またはテーブル関数 `file`、`url`、`hdfs`、`s3`、`azureBlobStorage` へ書き込む場合に、この設定が適用されます。 - -設定可能な値: `1` から `22` まで - -## output_format_compression_zstd_window_log {#output_format_compression_zstd_window_log} - - - - - -出力の圧縮方式が `zstd` の場合に使用できます。`0` より大きい値を設定すると、この設定により圧縮ウィンドウサイズ(`2` のべき乗)が明示的に指定され、zstd 圧縮の long-range モードが有効になります。これにより、より高い圧縮率を達成できる場合があります。 - -取りうる値: 0 以上の整数。値が小さすぎる、または大きすぎる場合、`zstdlib` は例外を送出します。典型的な値は `20`(ウィンドウサイズ = `1MB`)から `30`(ウィンドウサイズ = `1GB`)の範囲です。 - -## output_format_parallel_formatting {#output_format_parallel_formatting} - - - -データ形式のフォーマット処理を並列実行するかどうかを切り替えます。[TSV](/interfaces/formats/TabSeparated)、[TSKV](/interfaces/formats/TSKV)、[CSV](/interfaces/formats/CSV)、[JSONEachRow](/interfaces/formats/JSONEachRow) 形式でのみサポートされます。 - -取りうる値: - -- 1 — 有効。 -- 0 — 無効。 - -## page_cache_block_size {#page_cache_block_size} - - - - - -ユーザー空間ページキャッシュに保存するファイルチャンクのサイズ(バイト単位)。キャッシュを経由するすべての読み取りは、このサイズの倍数に切り上げられます。 - -この設定はクエリ単位で調整できますが、異なるブロックサイズをもつキャッシュエントリは再利用できません。この設定を変更すると、事実上既存のキャッシュエントリは無効化されます。 - -1 MiB などの大きな値は高スループットなクエリに適しており、64 KiB などの小さな値は低レイテンシなポイントクエリに適しています。 - -## page_cache_inject_eviction {#page_cache_inject_eviction} - - - - - -ユーザースペースのページキャッシュがランダムに一部のページを無効化します。テスト用途向けです。 - -## page_cache_lookahead_blocks {#page_cache_lookahead_blocks} - - - - - -ユーザー空間ページキャッシュのミスが発生した場合、キャッシュに存在しない連続したブロックを、基盤となるストレージから最大でこの数だけ一度に読み込みます。各ブロックのサイズは page_cache_block_size バイトです。 - -この設定値を大きくするとスループット重視のクエリには有利ですが、低レイテンシなポイントクエリでは、先読みを行わない方が適しています。 - -## parallel_distributed_insert_select {#parallel_distributed_insert_select} - - - - - -分散 `INSERT ... SELECT` クエリの並列実行を有効にします。 - -`INSERT INTO distributed_table_a SELECT ... FROM distributed_table_b` クエリを実行する際に、両方のテーブルが同じクラスターを使用しており、かつ両方のテーブルがどちらも[レプリケートされた](../../engines/table-engines/mergetree-family/replication.md)テーブル、またはどちらも非レプリケートテーブルである場合、このクエリは各シャード上でローカルに処理されます。 - -設定値: - -- `0` — 無効。 -- `1` — `SELECT` は distributed エンジンの基礎となるテーブルに対して、各シャード上で実行されます。 -- `2` — `SELECT` と `INSERT` は distributed エンジンの基礎となるテーブルに対して/から、各シャード上で実行されます。 - -この設定を使用する場合は、`enable_parallel_replicas = 1` を設定する必要があります。 - -## parallel_hash_join_threshold {#parallel_hash_join_threshold} - - - - - -ハッシュベースの結合アルゴリズムが適用される場合、このしきい値は(右側のテーブルのサイズを推定できる場合に限り)`hash` と `parallel_hash` のどちらを使用するかを決定するために用いられます。 -右側のテーブルのサイズがこのしきい値より小さいと分かっている場合は、前者が使用されます。 - -## parallel_replica_offset {#parallel_replica_offset} - - - - - -これは内部用の設定であり、直接指定して使用することは想定されていません。「parallel replicas」モードの実装上の詳細を表します。この設定は、並列レプリカのうちクエリ処理に参加するレプリカのインデックスに対して、分散クエリのイニシエータサーバーによって自動的に設定されます。 - -## parallel_replicas_allow_in_with_subquery {#parallel_replicas_allow_in_with_subquery} - - - - - - - -true の場合、IN 述語のサブクエリはすべてのフォロワーレプリカで実行されます。 - -## parallel_replicas_connect_timeout_ms {#parallel_replicas_connect_timeout_ms} - - - - - - - -parallel replicas を用いたクエリ実行時に、リモートレプリカへの接続に使用されるタイムアウトをミリ秒単位で指定します。タイムアウトに達した場合、そのレプリカはクエリ実行には使用されません。 - -## parallel_replicas_count {#parallel_replicas_count} - - - - - -これは内部設定であり、直接使用することは想定されておらず、`parallel replicas` モードの実装上の詳細を表します。この設定は、分散クエリにおいてクエリ処理に参加する並列レプリカの数に応じて、イニシエーターサーバーによって自動的に設定されます。 - -## parallel_replicas_custom_key {#parallel_replicas_custom_key} - - - -特定のテーブルに対して、レプリカ間で処理を分割するために使用できる任意の整数式です。 -値には任意の整数式を指定できます。 - -主キーを用いた単純な式が推奨されます。 - -この設定を、単一シャードかつ複数レプリカで構成されるクラスタで使用した場合、それらのレプリカは仮想シャードに変換されます。 -それ以外の場合は `SAMPLE` キーと同様に動作し、各シャードの複数レプリカを使用します。 - -## parallel_replicas_custom_key_range_lower {#parallel_replicas_custom_key_range_lower} - - - - - - - -フィルタタイプ `range` が、カスタム範囲 `[parallel_replicas_custom_key_range_lower, INT_MAX]` に基づいて、レプリカ間で処理を均等に分散できるようにします。 - -[parallel_replicas_custom_key_range_upper](#parallel_replicas_custom_key_range_upper) と併用すると、範囲 `[parallel_replicas_custom_key_range_lower, parallel_replicas_custom_key_range_upper]` について、フィルタがレプリカ間で処理を均等に分散できるようになります。 - -注意:この設定によってクエリ処理中に追加のデータがフィルタリングされることはありません。代わりに、並列処理のために範囲フィルタが `[0, INT_MAX]` を分割する境界ポイントが変更されます。 - -## parallel_replicas_custom_key_range_upper {#parallel_replicas_custom_key_range_upper} - - - - - - - -フィルター種別 `range` が、カスタム範囲 `[0, parallel_replicas_custom_key_range_upper]` に基づいて、レプリカ間で処理負荷を均等に分割できるようにします。値が 0 の場合は上限が無効となり、カスタムキー式の最大値が上限として使用されます。 - -[parallel_replicas_custom_key_range_lower](#parallel_replicas_custom_key_range_lower) と併用すると、範囲 `[parallel_replicas_custom_key_range_lower, parallel_replicas_custom_key_range_upper]` について、レプリカ間で処理負荷を均等に分割できるようになります。 - -注意: この設定によってクエリ処理中に追加のデータがフィルタリングされることはなく、`[0, INT_MAX]` の範囲を並列処理のために range フィルタが分割する境界点が変わるだけです。 - -## parallel_replicas_for_cluster_engines {#parallel_replicas_for_cluster_engines} - - - - - -テーブル関数エンジンを、対応する `-Cluster` 版に置き換えます - -## parallel_replicas_for_non_replicated_merge_tree {#parallel_replicas_for_non_replicated_merge_tree} - - - - - -true の場合、ClickHouse はレプリケーションされていない MergeTree テーブルに対しても parallel replicas アルゴリズムを使用します - -## parallel_replicas_index_analysis_only_on_coordinator {#parallel_replicas_index_analysis_only_on_coordinator} - - - - - - - -インデックス解析はレプリカコーディネーター上でのみ実行され、他のレプリカではスキップされます。parallel_replicas_local_plan が有効な場合にのみ機能します。 - -## parallel_replicas_insert_select_local_pipeline {#parallel_replicas_insert_select_local_pipeline} - - - - - - - -並列レプリカを用いた分散 INSERT SELECT の実行時にローカルパイプラインを使用する - -## parallel_replicas_local_plan {#parallel_replicas_local_plan} - - - - - - - -ローカルレプリカ用のローカルプランを構築する - -## parallel_replicas_mark_segment_size {#parallel_replicas_mark_segment_size} - - - - - - - -パーツは、並列読み取りのためにレプリカ間で分散される仮想的なセグメントに分割されます。この設定は、これらのセグメントのサイズを制御します。何をしているか完全に理解している場合を除き、変更することは推奨されません。値は [128; 16384] の範囲である必要があります。 - -## parallel_replicas_min_number_of_rows_per_replica {#parallel_replicas_min_number_of_rows_per_replica} - - - - - -クエリで使用されるレプリカ数を、(読み取りが想定される行数 / min_number_of_rows_per_replica) に制限します。最大値は引き続き `max_parallel_replicas` によって制限されます。 - -## parallel_replicas_mode {#parallel_replicas_mode} - - - - - - - -parallel replicas 用のカスタムキーに対して使用するフィルターの種類を指定します。`default` — カスタムキーに対して剰余(modulo)演算を使用します。`range` — カスタムキーの値型で取り得るすべての値を使って、カスタムキーに対するレンジフィルターを使用します。 - -## parallel_replicas_only_with_analyzer {#parallel_replicas_only_with_analyzer} - - - - - - - -並列レプリカを使用するには、analyzer を有効化する必要があります。analyzer が無効な場合、並列レプリカからの読み取りが有効になっていても、クエリ実行はローカル実行にフォールバックします。analyzer を有効化せずに並列レプリカを使用することはサポートされません。 - -## parallel_replicas_prefer_local_join {#parallel_replicas_prefer_local_join} - - - - - - - -true の場合に、JOIN が parallel replicas アルゴリズムで実行可能で、かつ JOIN の右側部分のすべてのストレージが *MergeTree のとき、GLOBAL JOIN の代わりにローカル JOIN が使用されます。 - -## parallel_replicas_support_projection {#parallel_replicas_support_projection} - - - - - - - -プロジェクションの最適化を並列レプリカで適用できます。これは、parallel_replicas_local_plan が有効であり、かつ aggregation_in_order が無効な場合にのみ有効です。 - -## parallel_view_processing {#parallel_view_processing} - - - -アタッチされたビューへのプッシュ処理を、順次ではなく並行して実行できるようにします。 - -## parallelize_output_from_storages {#parallelize_output_from_storages} - - - - - -ストレージからの読み取りステップの出力を並列化します。可能な場合は、ストレージからの読み取り直後からクエリ処理を並列実行できるようにします。 - -## parsedatetime_e_requires_space_padding {#parsedatetime_e_requires_space_padding} - - - - - -関数 `parseDateTime` におけるフォーマッタ `%e` では、1 桁の日付はスペースでパディングされている必要があります。たとえば `' 2'` は受け付けられますが、`'2'` はエラーになります。 - -## parsedatetime_parse_without_leading_zeros {#parsedatetime_parse_without_leading_zeros} - - - - - -`parseDateTime` 関数では、フォーマット指定子 `%c`、`%l`、`%k` は先頭のゼロなしで月および時を解析します。 - -## partial_merge_join_left_table_buffer_bytes {#partial_merge_join_left_table_buffer_bytes} - - - -0 以外の場合、部分マージ結合において左テーブル側のブロックを、より大きなブロックにまとめます。結合スレッドごとに、指定されたメモリ量の最大 2 倍まで使用します。 - -## partial_merge_join_rows_in_right_blocks {#partial_merge_join_rows_in_right_blocks} - - - -部分マージ結合アルゴリズムにおける [JOIN](../../sql-reference/statements/select/join.md) クエリの右側の結合データブロックのサイズを制限します。 - -ClickHouse サーバーは次の処理を行います。 - -1. 右側の結合データを、指定された行数までのブロックに分割します。 -2. 各ブロックを、その最小値と最大値でインデックス付けします。 -3. 可能な場合は、準備済みブロックをディスクに書き出します。 - -設定可能な値: - -- 任意の正の整数。推奨範囲: \[1000, 100000\]。 - -## partial_result_on_first_cancel {#partial_result_on_first_cancel} - - - -クエリがキャンセルされた後に部分的な結果を返すことを許可します。 - -## parts_to_delay_insert {#parts_to_delay_insert} - - - -宛先テーブルに、1 つのパーティション内でこの数以上のアクティブパーツが含まれている場合、テーブルへの挿入処理を意図的に遅延させます。 - -## parts_to_throw_insert {#parts_to_throw_insert} - - - -宛先テーブルの1つのパーティション内でアクティブなパーツ数がこの値を超えた場合、'Too many parts ...' という例外をスローします。 - -## per_part_index_stats {#per_part_index_stats} - - - - - -パートごとのインデックス統計をログに記録します - -## poll_interval {#poll_interval} - - - -サーバー側のクエリ待機ループで、指定された秒数だけ処理をブロックします。 - -## postgresql_connection_attempt_timeout {#postgresql_connection_attempt_timeout} - - - - - -PostgreSQL エンドポイントへの 1 回の接続試行における接続タイムアウト(秒)。 -この値は接続 URL の `connect_timeout` パラメータとして渡されます。 - -## postgresql_connection_pool_auto_close_connection {#postgresql_connection_pool_auto_close_connection} - - - -接続をプールに戻す前に接続を閉じます。 - -## postgresql_connection_pool_retries {#postgresql_connection_pool_retries} - - - - - -PostgreSQL テーブルエンジンおよびデータベースエンジンにおける、コネクションプールの push/pop のリトライ回数。 - -## postgresql_connection_pool_size {#postgresql_connection_pool_size} - - - -PostgreSQL のテーブルエンジンおよびデータベースエンジンで使用する接続プールのサイズ。 - -## postgresql_connection_pool_wait_timeout {#postgresql_connection_pool_wait_timeout} - - - -PostgreSQL テーブルエンジンおよびデータベースエンジンにおいて、接続プールが空の場合の push/pop 操作のタイムアウトです。デフォルトでは、プールが空のときブロックされたままになります。 - -## postgresql_fault_injection_probability {#postgresql_fault_injection_probability} - - - - - -レプリケーション用の内部 PostgreSQL クエリが失敗する、おおよその確率です。有効な値の範囲は [0.0f, 1.0f] です。 - -## prefer_column_name_to_alias - - - -クエリの式および句の中で、エイリアスではなく元のカラム名を使用するかどうかを切り替えます。特に、エイリアスがカラム名と同じ場合に重要です。詳細は [Expression Aliases](/sql-reference/syntax#notes-on-usage) を参照してください。ClickHouse のエイリアス構文ルールを、ほとんどの他のデータベースエンジンとより互換性の高いものにするには、この設定を有効にします。 - -設定可能な値: - -* 0 — カラム名はエイリアスで置き換えられます。 -* 1 — カラム名はエイリアスで置き換えられません。 - -**例** - -有効/無効の違い: - -クエリ: - -```sql -SET prefer_column_name_to_alias = 0; -SELECT avg(number) AS number, max(number) FROM numbers(10); -``` - -結果: - -```text -サーバーから例外を受信しました (バージョン 21.5.1): -コード: 184. DB::Exception: localhost:9000 から受信。DB::Exception: クエリ内で集約関数 avg(number) が別の集約関数内に検出されました: avg(number) AS number の処理中。 -``` - -クエリ: - -```sql -SET prefer_column_name_to_alias = 1; -SELECT avg(number) AS number, max(number) FROM numbers(10); -``` - -結果: - -```text -┌─number─┬─max(number)─┐ -│ 4.5 │ 9 │ -└────────┴─────────────┘ -``` - - -## prefer_external_sort_block_bytes {#prefer_external_sort_block_bytes} - - - - - -外部ソートで使用するブロックの最大サイズを優先し、マージ時のメモリ使用量を抑えます。 - -## prefer_global_in_and_join {#prefer_global_in_and_join} - - - -`IN`/`JOIN` 演算子を `GLOBAL IN`/`GLOBAL JOIN` に置き換えることを有効にします。 - -設定可能な値: - -- 0 — 無効。`IN`/`JOIN` 演算子は `GLOBAL IN`/`GLOBAL JOIN` に置き換えられません。 -- 1 — 有効。`IN`/`JOIN` 演算子は `GLOBAL IN`/`GLOBAL JOIN` に置き換えられます。 - -**使用方法** - -`SET distributed_product_mode=global` は分散テーブルに対するクエリの挙動を変更できますが、ローカルテーブルや外部リソース由来のテーブルには適していません。ここで `prefer_global_in_and_join` 設定が役立ちます。 - -たとえば、分散に適さないローカルテーブルを保持しているクエリ処理ノードがあるとします。分散処理中に `GLOBAL` キーワード(`GLOBAL IN`/`GLOBAL JOIN`)を用いて、そのデータをオンザフライで分散させる必要があります。 - -`prefer_global_in_and_join` の別のユースケースは、外部エンジンによって作成されたテーブルへのアクセスです。この設定は、そのようなテーブルを結合する際に外部ソースへの呼び出し回数を削減するのに役立ちます。クエリあたり 1 回の呼び出しで済むようになります。 - -**関連項目:** - -- `GLOBAL IN`/`GLOBAL JOIN` の使用方法の詳細については、[Distributed subqueries](/sql-reference/operators/in#distributed-subqueries) を参照してください。 - -## prefer_localhost_replica {#prefer_localhost_replica} - - - -分散クエリを処理するときに、`localhost` レプリカを優先的に使用するかどうかを有効/無効にします。 - -設定値: - -- 1 — `localhost` レプリカが存在する場合、ClickHouse は常にそのレプリカにクエリを送信します。 -- 0 — ClickHouse は [load_balancing](#load_balancing) 設定で指定されたバランシング戦略を使用します。 - -:::note -[parallel_replicas_custom_key](#parallel_replicas_custom_key) を使用せずに [max_parallel_replicas](#max_parallel_replicas) を使用する場合は、この設定を無効にしてください。 -[parallel_replicas_custom_key](#parallel_replicas_custom_key) が設定されている場合は、複数のレプリカを含む複数のシャードからなるクラスタで使用する場合にのみ、この設定を無効にしてください。 -単一シャードかつ複数レプリカのクラスタで使用する場合にこの設定を無効にすると、悪影響を及ぼします。 -::: - -## prefer_warmed_unmerged_parts_seconds {#prefer_warmed_unmerged_parts_seconds} - - - - - -ClickHouse Cloud でのみ有効です。マージ済みパーツがこの値(秒)より新しく、かつ事前ウォームされていない場合([cache_populated_by_fetch](merge-tree-settings.md/#cache_populated_by_fetch) を参照)、ただしその元となるすべてのパーツが利用可能で事前ウォーム済みであれば、SELECT クエリは代わりにそれらのパーツから読み取ります。Replicated-/SharedMergeTree のみ対象です。これは CacheWarmer がそのパーツを処理したかどうかだけを確認する点に注意してください。パーツが他の処理によってキャッシュにフェッチされていたとしても、CacheWarmer が処理するまではコールドとして扱われます。また、一度ウォームされた後にキャッシュからエビクト(追い出し)された場合でも、ウォーム済みとして扱われます。 - -## preferred_block_size_bytes {#preferred_block_size_bytes} - - - -この設定はクエリ処理時のデータブロックサイズを調整するもので、より大まかな `max_block_size` 設定に対する追加の細かなチューニングを行います。カラムが大きく、`max_block_size` 行を含むブロックのサイズが指定されたバイト数を超えそうな場合には、CPU キャッシュの局所性を高めるためにブロックサイズが小さく調整されます。 - -## preferred_max_column_in_block_size_bytes {#preferred_max_column_in_block_size_bytes} - - - -読み取り時における、ブロック内のカラムの最大サイズの上限値です。キャッシュミスの回数を減らすのに役立ちます。L2 キャッシュサイズに近い値にすることを推奨します。 - -## preferred_optimize_projection_name {#preferred_optimize_projection_name} - -空でない文字列が設定されている場合、ClickHouse はクエリで指定されたプロジェクションを適用しようとします。 - -設定可能な値: - -- string: 優先するプロジェクションの名前 - -## prefetch_buffer_size {#prefetch_buffer_size} - - - -ファイルシステムから読み込む際に使用するプリフェッチバッファの最大サイズ。 - -## print_pretty_type_names - - - - - -`DESCRIBE` クエリおよび `toTypeName()` 関数で、入れ子構造の深い型名をインデント付きで見やすく出力できるようにします。 - -例: - -```sql -CREATE TABLE test (a Tuple(b String, c Tuple(d Nullable(UInt64), e Array(UInt32), f Array(Tuple(g String, h Map(String, Array(Tuple(i String, j UInt64))))), k Date), l Nullable(String))) ENGINE=Memory; -DESCRIBE TABLE test FORMAT TSVRaw SETTINGS print_pretty_type_names=1; -``` - -``` -a Tuple( - b String, - c Tuple( - d Nullable(UInt64), - e Array(UInt32), - f Array(Tuple( - g String, - h Map( - String, - Array(Tuple( - i String, - j UInt64 - )) - ) - )), - k Date - ), - l Nullable(String) -) -``` - - -## priority {#priority} - - - -クエリの優先度。1 が最も高く、値が大きいほど優先度は低くなります。0 の場合は優先度制御を行いません。 - -## promql_database {#promql_database} - - - - - -'promql' 方言で使用するデータベース名を指定します。空文字列の場合は、現在のデータベースを使用します。 - -## promql_evaluation_time {#promql_evaluation_time} - - - -**エイリアス**: `evaluation_time` - - - - - -PromQL ダイアレクトで使用する評価時刻を設定します。`auto` は現在時刻を意味します。 - -## promql_table {#promql_table} - - - - - -「promql」方言で使用される TimeSeries テーブルの名前を指定します。 - -## push_external_roles_in_interserver_queries {#push_external_roles_in_interserver_queries} - - - - - -クエリの実行中に、発行元ノードから他のノードへユーザーロールをプッシュできるようにします。 - -## query_cache_compress_entries {#query_cache_compress_entries} - - - -[query cache](../query-cache.md) 内のエントリを圧縮します。クエリキャッシュへの挿入およびクエリキャッシュからの読み取りが遅くなる代わりに、クエリキャッシュのメモリ消費を抑えます。 - -可能な値: - -- 0 - 無効 -- 1 - 有効 - -## query_cache_max_entries {#query_cache_max_entries} - - - -現在のユーザーが [query cache](../query-cache.md) に保存できるクエリ結果の最大数です。0 は無制限を意味します。 - -設定可能な値: - -- 0 以上の整数。 - -## query_cache_max_size_in_bytes {#query_cache_max_size_in_bytes} - - - -現在のユーザーが [query cache](../query-cache.md) 内で確保できるメモリの最大量(バイト単位)。0 は無制限を意味します。 - -設定可能な値: - -- 0 以上の整数。 - -## query_cache_min_query_duration {#query_cache_min_query_duration} - - - -クエリ結果が[クエリキャッシュ](../query-cache.md)に保存されるための条件となる、クエリの最小実行時間(ミリ秒単位)。 - -取りうる値: - -- 0 以上の正の整数。 - -## query_cache_min_query_runs {#query_cache_min_query_runs} - - - -`SELECT` クエリの結果が[クエリキャッシュ](../query-cache.md)に保存されるまでに、そのクエリが実行される必要がある最小回数です。 - -取り得る値: - -- 0 以上の正の整数。 - -## query_cache_nondeterministic_function_handling {#query_cache_nondeterministic_function_handling} - - - -[クエリキャッシュ](../query-cache.md) が、`rand()` や `now()` のような非決定的関数を含む `SELECT` クエリをどのように扱うかを制御します。 - -設定値: - -- `'throw'` - 例外をスローし、クエリ結果をキャッシュしません。 -- `'save'` - クエリ結果をキャッシュします。 -- `'ignore'` - クエリ結果をキャッシュせず、例外もスローしません。 - -## query_cache_share_between_users {#query_cache_share_between_users} - - - -有効化すると、[query cache](../query-cache.md) にキャッシュされた `SELECT` クエリの結果を他のユーザーが読み取れるようになります。 -セキュリティ上の理由から、この設定を有効にすることは推奨されません。 - -設定可能な値: - -- 0 - 無効 -- 1 - 有効 - -## query_cache_squash_partial_results {#query_cache_squash_partial_results} - - - -部分結果ブロックを、サイズが [max_block_size](#max_block_size) のブロックにまとめます。[query cache](../query-cache.md) への挿入パフォーマンスは低下しますが、キャッシュエントリの圧縮効率が向上します([query_cache_compress-entries](#query_cache_compress_entries) を参照)。 - -可能な値: - -- 0 - 無効 -- 1 - 有効 - -## query_cache_system_table_handling {#query_cache_system_table_handling} - - - - - -`system.*` および `information_schema.*` データベース内のテーブル、つまり system テーブルに対する `SELECT` クエリを [query cache](../query-cache.md) がどのように扱うかを制御します。 - -設定可能な値: - -- `'throw'` - 例外をスローし、クエリ結果をキャッシュしません。 -- `'save'` - クエリ結果をキャッシュします。 -- `'ignore'` - クエリ結果をキャッシュせず、例外もスローしません。 - -## query_cache_tag {#query_cache_tag} - - - -[クエリキャッシュ](../query-cache.md) のエントリに対するラベルとして機能する文字列です。 -同じクエリでもタグが異なる場合、クエリキャッシュでは別のものとして扱われます。 - -設定可能な値: - -- 任意の文字列 - -## query_cache_ttl {#query_cache_ttl} - - - -この秒数が経過すると、[query cache](../query-cache.md) 内のエントリは古いものと見なされます。 - -取り得る値: - -- 0 以上の整数。 - -## query_condition_cache_store_conditions_as_plaintext {#query_condition_cache_store_conditions_as_plaintext} - - - - - -[query condition cache](/operations/query-condition-cache) のフィルタ条件を平文で保存します。 -有効にすると、system.query_condition_cache にフィルタ条件がそのまま表示されるため、キャッシュに関する問題のデバッグが容易になります。 -フィルタ条件を平文で保存すると機密情報が露出する可能性があるため、デフォルトでは無効になっています。 - -取りうる値: - -- 0 - 無効 -- 1 - 有効 - -## query_metric_log_interval {#query_metric_log_interval} - - - - - -個々のクエリに対して [query_metric_log](../../operations/system-tables/query_metric_log.md) が収集される間隔(ミリ秒単位)。 - -負の値に設定した場合は、[query_metric_log 設定](/operations/server-configuration-parameters/settings#query_metric_log) の `collect_interval_milliseconds` の値が使用され、その設定が存在しない場合はデフォルトで 1000 が使用されます。 - -単一のクエリに対する収集を無効化するには、`query_metric_log_interval` を 0 に設定します。 - -デフォルト値: -1 - -## query_plan_aggregation_in_order {#query_plan_aggregation_in_order} - - - - - -クエリプランレベルでの集約処理のインオーダー最適化を切り替えます。 -設定 [`query_plan_enable_optimizations`](#query_plan_enable_optimizations) が 1 の場合にのみ有効です。 - -:::note -これは開発者がデバッグ用途でのみ使用すべきエキスパート向けの設定です。この設定は将来、後方互換性のない形で変更されるか、削除される可能性があります。 -::: - -取りうる値: - -- 0 - 無効 -- 1 - 有効 - -## query_plan_convert_any_join_to_semi_or_anti_join {#query_plan_convert_any_join_to_semi_or_anti_join} - - - - - -JOIN 後のフィルタが、マッチしなかった行またはマッチした行に対して常に false と評価される場合に、ANY JOIN を SEMI JOIN または ANTI JOIN に変換できるようにします - -## query_plan_convert_join_to_in {#query_plan_convert_join_to_in} - - - - - -出力列が左側のテーブルのみに結び付いている場合に、`JOIN` を `IN` を用いたサブクエリへ変換することを許可します。ANY 以外の JOIN(たとえばデフォルトである ALL JOIN)の場合には、誤った結果になる可能性があります。 - -## query_plan_convert_outer_join_to_inner_join {#query_plan_convert_outer_join_to_inner_join} - - - - - -JOIN の後段のフィルタが常にデフォルト値を除外する場合に `OUTER JOIN` を `INNER JOIN` に変換することを許可する - -## query_plan_direct_read_from_text_index {#query_plan_direct_read_from_text_index} - - - - - -クエリプラン内で転置インデックスのみを使用して全文検索のフィルタリングを実行できるようにします。 - -## query_plan_display_internal_aliases {#query_plan_display_internal_aliases} - - - - - -EXPLAIN PLAN で、元のクエリで指定されたエイリアスではなく、内部エイリアス(`__table1` など)を表示します。 - -## query_plan_enable_multithreading_after_window_functions {#query_plan_enable_multithreading_after_window_functions} - - - -ウィンドウ関数の評価後にマルチスレッド処理を有効にして、ストリーム処理を並列に実行できるようにします - -## query_plan_enable_optimizations {#query_plan_enable_optimizations} - - - -クエリプランレベルでのクエリ最適化を切り替えます。 - -:::note -これは開発者がデバッグ目的でのみ使用すべきエキスパート向けの設定です。この設定は将来、後方互換性のない形で変更されたり、削除されたりする可能性があります。 -::: - -設定可能な値: - -- 0 - クエリプランレベルでのすべての最適化を無効にする -- 1 - クエリプランレベルでの最適化を有効にする(ただし、個々の最適化は、対応する個別の設定によって無効化されている場合があります) - -## query_plan_execute_functions_after_sorting {#query_plan_execute_functions_after_sorting} - - - -ソート処理ステップの後に式を移動する、クエリプランレベルの最適化を有効/無効にします。 -設定 [`query_plan_enable_optimizations`](#query_plan_enable_optimizations) が 1 の場合にのみ有効になります。 - -:::note -これは開発者がデバッグ目的で使用することのみを想定したエキスパート向けの設定です。この設定は将来、後方互換性のない形で変更されたり、削除されたりする可能性があります。 -::: - -設定可能な値: - -- 0 - 無効 -- 1 - 有効 - -## query_plan_filter_push_down {#query_plan_filter_push_down} - - - -クエリプランレベルの最適化を有効にし、フィルタを実行プラン内のより下位の段階へ移動します。 -設定 [query_plan_enable_optimizations](#query_plan_enable_optimizations) が 1 に設定されている場合にのみ有効になります。 - -:::note -これは開発者がデバッグ目的でのみ使用すべき上級者向け設定です。この設定は将来、後方互換性のない形で変更されたり、削除されたりする可能性があります。 -::: - -取りうる値: - -- 0 - 無効 -- 1 - 有効 - -## query_plan_join_shard_by_pk_ranges {#query_plan_join_shard_by_pk_ranges} - - - - - -両方のテーブルで、JOIN キーが `PRIMARY KEY` の先頭部分(プレフィックス)を含む場合に、JOIN に対してシャーディングを適用します。`hash`、`parallel_hash`、`full_sorting_merge` アルゴリズムをサポートします。通常はクエリの高速化にはつながりませんが、メモリ消費量を抑えられる可能性があります。 - -## query_plan_join_swap_table {#query_plan_join_swap_table} - - - - - -結合のどちら側のテーブルをビルドテーブル(インナーテーブルとも呼ばれ、ハッシュ結合でハッシュテーブルに挿入される側)としてクエリプランで使用するかを決定します。この設定は、`JOIN ON` 句を伴う `ALL` 結合の厳密さでのみサポートされます。取りうる値は次のとおりです。 - -- `auto`: どちらのテーブルをビルドテーブルとして使用するかをプランナーに任せます。 - - `false`: テーブルを入れ替えません(右テーブルがビルドテーブルになります)。 - - `true`: 常にテーブルを入れ替えます(左テーブルがビルドテーブルになります)。 - -## query_plan_lift_up_array_join {#query_plan_lift_up_array_join} - - - -ARRAY JOIN を実行計画内のより上位の段階に移動する、クエリプランレベルの最適化を有効/無効にします。 -設定 [query_plan_enable_optimizations](#query_plan_enable_optimizations) が 1 の場合にのみ有効になります。 - -:::note -これは開発者がデバッグ目的でのみ使用すべきエキスパート向けの設定です。今後、後方互換性のない形で変更されたり、削除されたりする可能性があります。 -::: - -Possible values: - -- 0 - 無効 -- 1 - 有効 - -## query_plan_lift_up_union {#query_plan_lift_up_union} - - - -クエリプランレベルの最適化を切り替えます。この最適化は、さらなる最適化を可能にするために、クエリプラン上のより大きなサブツリーを union に持ち上げて配置します。 -設定 [`query_plan_enable_optimizations`](#query_plan_enable_optimizations) が 1 の場合にのみ有効になります。 - -:::note -これは開発者がデバッグ目的でのみ使用すべき上級者向け設定です。今後、この設定は後方互換性のない形で変更されるか、削除される可能性があります。 -::: - -取りうる値: - -- 0 - 無効 -- 1 - 有効 - -## query_plan_max_limit_for_lazy_materialization {#query_plan_max_limit_for_lazy_materialization} - - - - - -遅延マテリアライゼーション最適化でクエリプランを使用できる最大値を制御します。0 の場合、上限はありません。 - -## query_plan_max_optimizations_to_apply {#query_plan_max_optimizations_to_apply} - - - -クエリプランに適用される最適化の総数を制限します。設定 [query_plan_enable_optimizations](#query_plan_enable_optimizations) を参照してください。 -複雑なクエリで最適化に時間がかかりすぎることを防ぐのに役立ちます。 -EXPLAIN PLAN クエリでは、この上限に達した時点でそれ以上の最適化を行うのをやめ、その時点のプランをそのまま返します。 -通常のクエリ実行では、実際に行われた最適化の回数がこの設定値を超えた場合、例外がスローされます。 - -:::note -これは開発者がデバッグ用途でのみ使用すべき上級者向けの設定です。この設定は将来、後方互換性のない形で変更されたり削除されたりする可能性があります。 -::: - -## query_plan_max_step_description_length {#query_plan_max_step_description_length} - - - - - -EXPLAIN PLAN におけるステップ説明の最大長。 - -## query_plan_merge_expressions {#query_plan_merge_expressions} - - - -連続するフィルターをマージするクエリプランレベルの最適化を切り替えます。 -設定 [query_plan_enable_optimizations](#query_plan_enable_optimizations) が 1 の場合にのみ有効になります。 - -:::note -これは、開発者がデバッグ用途でのみ使用すべきエキスパート向け設定です。将来、後方互換性のない形で変更されたり、削除されたりする可能性があります。 -::: - -取り得る値: - -- 0 - 無効 -- 1 - 有効 - -## query_plan_merge_filter_into_join_condition {#query_plan_merge_filter_into_join_condition} - - - - - -フィルターを `JOIN` の条件にマージし、`CROSS JOIN` を `INNER JOIN` に変換できるようにします。 - -## query_plan_merge_filters {#query_plan_merge_filters} - - - - - -クエリプラン内でフィルターをマージできるようにします。 - -## query_plan_optimize_join_order_limit {#query_plan_optimize_join_order_limit} - - - - - -同一サブクエリ内の結合順序を最適化します。現在はごく限られたケースでのみサポートされています。 - 値は、最適化を行うテーブル数の上限です。 - -## query_plan_optimize_lazy_materialization {#query_plan_optimize_lazy_materialization} - - - - - -遅延マテリアライゼーションの最適化にクエリプランを使用します。 - -## query_plan_optimize_prewhere {#query_plan_optimize_prewhere} - - - - - -サポートされているストレージでフィルタを PREWHERE 式にプッシュダウンできるようにします - -## query_plan_push_down_limit {#query_plan_push_down_limit} - - - -実行計画内で `LIMIT` を下位ノードに移動する、クエリプランレベルの最適化機能の有効/無効を切り替えます。 -設定 [query_plan_enable_optimizations](#query_plan_enable_optimizations) が 1 の場合にのみ有効になります。 - -:::note -これは開発者がデバッグ目的でのみ使用すべきエキスパート向け設定です。将来的に後方互換性のない形で変更されたり、削除されたりする可能性があります。 -::: - -取りうる値: - -- 0 - 無効 -- 1 - 有効 - -## query_plan_read_in_order {#query_plan_read_in_order} - - - -クエリプランレベルの「順序どおり読み取り」最適化を切り替えます。 -設定 [`query_plan_enable_optimizations`](#query_plan_enable_optimizations) が 1 の場合にのみ有効になります。 - -:::note -これは開発者によるデバッグ用途のみに使用すべき上級者向けの設定です。将来的に後方互換性のない形で変更されたり、削除される可能性があります。 -::: - -取りうる値: - -- 0 - 無効 -- 1 - 有効 - -## query_plan_remove_redundant_distinct {#query_plan_remove_redundant_distinct} - - - - - -冗長な DISTINCT ステップを削除するクエリプランレベルの最適化を有効/無効にします。 -設定 [`query_plan_enable_optimizations`](#query_plan_enable_optimizations) が 1 の場合にのみ有効になります。 - -:::note -これは開発者がデバッグ目的でのみ使用すべき上級者向けの設定です。この設定は将来、後方互換性のない形で変更されたり、削除されたりする可能性があります。 -::: - -取り得る値: - -- 0 - 無効 -- 1 - 有効 - -## query_plan_remove_redundant_sorting {#query_plan_remove_redundant_sorting} - - - - - -クエリプランレベルで、サブクエリなどにおける冗長なソートステップを削除する最適化を有効/無効にします。 -設定 [`query_plan_enable_optimizations`](#query_plan_enable_optimizations) が 1 の場合にのみ有効になります。 - -:::note -これは開発者によるデバッグ用途に限定されるべき上級者向け設定です。この設定は将来、後方互換性のない形で変更されたり、削除されたりする可能性があります。 -::: - -指定可能な値: - -- 0 - 無効 -- 1 - 有効 - -## query_plan_remove_unused_columns {#query_plan_remove_unused_columns} - - - - - -クエリプランレベルで、クエリプランのステップから未使用の列(入力列・出力列の両方)を削除しようとする最適化の有効/無効を切り替えます。 -[query_plan_enable_optimizations](#query_plan_enable_optimizations) が 1 の場合にのみ有効になります。 - -:::note -これは開発者によるデバッグの目的にのみ使用すべき上級者向けの設定です。将来、この設定は後方互換性のない形で変更されたり、削除されたりする可能性があります。 -::: - -可能な値: - -- 0 - 無効 -- 1 - 有効 - -## query_plan_reuse_storage_ordering_for_window_functions {#query_plan_reuse_storage_ordering_for_window_functions} - - - -ウィンドウ関数のソート時にストレージのソート順を利用する、クエリプランレベルの最適化を有効/無効にします。 -設定 [`query_plan_enable_optimizations`](#query_plan_enable_optimizations) が 1 の場合にのみ有効になります。 - -:::note -これは開発者によるデバッグ目的でのみ使用すべきエキスパート向けの設定です。この設定は将来、後方互換性のない形で変更されたり削除されたりする可能性があります。 -::: - -取りうる値: - -- 0 - 無効 -- 1 - 有効 - -## query_plan_split_filter {#query_plan_split_filter} - - - -:::note -これは開発者がデバッグ目的でのみ使用すべき上級者向けの設定です。この設定は将来、後方互換性のない形で変更されたり、削除されたりする可能性があります。 -::: - -フィルタを個々の式に分割する、クエリプランレベルの最適化を有効/無効にします。 -設定 [query_plan_enable_optimizations](#query_plan_enable_optimizations) が 1 の場合にのみ有効になります。 - -取りうる値: - -- 0 - 無効 -- 1 - 有効 - -## query_plan_try_use_vector_search {#query_plan_try_use_vector_search} - - - - - -ベクトル類似性インデックスの利用を試みる、クエリプランレベルの最適化の有効/無効を切り替えます。 -設定 [`query_plan_enable_optimizations`](#query_plan_enable_optimizations) が 1 の場合にのみ有効になります。 - -:::note -これは開発者によるデバッグ用途にのみ使用すべき、上級者向けの設定です。将来、後方互換性のない形で変更されたり、削除されたりする可能性があります。 -::: - -設定可能な値: - -- 0 - 無効 -- 1 - 有効 - -## query_plan_use_new_logical_join_step {#query_plan_use_new_logical_join_step} - -**別名**: `query_plan_use_logical_join_step` - - - - - -クエリプランにおいて論理 JOIN ステップを使用します。 -注: 設定 `query_plan_use_new_logical_join_step` は非推奨です。代わりに `query_plan_use_logical_join_step` を使用してください。 - -## query_profiler_cpu_time_period_ns {#query_profiler_cpu_time_period_ns} - - - -[query profiler](../../operations/optimizing-performance/sampling-query-profiler.md) の CPU クロックタイマーの周期を設定します。このタイマーは CPU 時間のみをカウントします。 - -設定可能な値: - -- 正の整数で表されるナノ秒数。 - - 推奨値: - - - 単一クエリには 10000000(1 秒間に 100 回)ナノ秒以上。 - - クラスター全体のプロファイリングには 1000000000(1 秒に 1 回)。 - -- 0 を指定すると、タイマーを無効化します。 - -**ClickHouse Cloud では一時的に無効化されています。** - -関連項目: - -- システムテーブル [trace_log](/operations/system-tables/trace_log) - -## query_profiler_real_time_period_ns {#query_profiler_real_time_period_ns} - - - -[query profiler](../../operations/optimizing-performance/sampling-query-profiler.md) のリアルクロックタイマーの周期を設定します。リアルクロックタイマーはウォールクロック時間を計測します。 - -設定可能な値: - -- 正の整数値(ナノ秒単位)。 - - 推奨値: - - - 単一クエリ向けには 10000000 ナノ秒(1 秒間に 100 回)以下。 - - クラスター全体のプロファイリングには 1000000000 ナノ秒(1 秒に 1 回)。 - -- 0 を指定するとタイマーを無効にします。 - -**ClickHouse Cloud では一時的に無効化されています。** - -関連項目: - -- システムテーブル [trace_log](/operations/system-tables/trace_log) - -## queue_max_wait_ms {#queue_max_wait_ms} - - - -同時リクエスト数が上限を超えた場合に、リクエストキューで待機する時間。 - -## rabbitmq_max_wait_ms {#rabbitmq_max_wait_ms} - - - -RabbitMQ からの読み取りを再試行する前に待機する時間。 - -## read_backoff_max_throughput {#read_backoff_max_throughput} - - - -読み取り速度が低下した場合にスレッド数を削減するための設定です。読み取り帯域幅が 1 秒あたりこの値のバイト数未満になったときにイベントをカウントします。 - -## read_backoff_min_concurrency {#read_backoff_min_concurrency} - - - -低速な読み取りが発生した場合でも、利用するスレッド数がこの最小値を下回らないようにするための設定です。 - -## read_backoff_min_events {#read_backoff_min_events} - - - -低速な読み取りが発生した場合にスレッド数を減らすための設定です。スレッド数を減らすきっかけとなるイベント数を指定します。 - -## read_backoff_min_interval_between_events_ms {#read_backoff_min_interval_between_events_ms} - - - -読み取りが遅い場合に、スレッド数を削減するための設定です。前回のイベントから一定時間が経過していない場合は、そのイベントを無視します。 - -## read_backoff_min_latency_ms {#read_backoff_min_latency_ms} - - - -低速な読み取りが発生した場合にスレッド数を減らすための設定です。この値以上の時間がかかった読み取りのみを考慮します。 - -## read_from_distributed_cache_if_exists_otherwise_bypass_cache {#read_from_distributed_cache_if_exists_otherwise_bypass_cache} - - - - - - - -ClickHouse Cloud でのみ有効です。`read_from_filesystem_cache_if_exists_otherwise_bypass_cache` と同様の設定ですが、分散キャッシュに対して動作します。 - -## read_from_filesystem_cache_if_exists_otherwise_bypass_cache {#read_from_filesystem_cache_if_exists_otherwise_bypass_cache} - - - -ファイルシステムキャッシュをパッシブモードで利用できるようにします。既存のキャッシュエントリは利用しますが、新しいエントリはキャッシュに追加しません。重いアドホッククエリに対してこの設定を有効にし、短時間のリアルタイムクエリでは無効のままにしておくことで、負荷の高いクエリによるキャッシュのスラッシングを回避し、システム全体の効率を向上させることができます。 - -## read_from_page_cache_if_exists_otherwise_bypass_cache {#read_from_page_cache_if_exists_otherwise_bypass_cache} - - - - - -`read_from_filesystem_cache_if_exists_otherwise_bypass_cache` と同様に、パッシブモードでユーザースペースのページキャッシュを使用します。 - -## read_in_order_two_level_merge_threshold {#read_in_order_two_level_merge_threshold} - - - -プライマリキー順でのマルチスレッド読み取り時に、事前マージステップを実行するために読み込むパーツ数の最小個数。 - -## read_in_order_use_buffering {#read_in_order_use_buffering} - - - - - -主キー順で読み取る際に、マージの前にバッファリングを使用します。これによりクエリ実行の並列度が向上します。 - -## read_in_order_use_virtual_row {#read_in_order_use_virtual_row} - - - - - -主キーまたはその単調関数に基づく順序で読み取る際に仮想行を使用します。複数のパーツにまたがって検索する場合に、関連するものだけにアクセスできるため有用です。 - -## read_overflow_mode {#read_overflow_mode} - - - -制限を超えた場合にどのように処理するかを指定します。 - -## read_overflow_mode_leaf {#read_overflow_mode_leaf} - - - -読み取ったデータ量がいずれかのリーフ制限を超えた場合の動作を設定します。 - -指定可能なオプション: - -- `throw`: 例外をスローする(デフォルト)。 -- `break`: クエリの実行を停止し、部分的な結果を返す。 - -## read_priority {#read_priority} - - - -ローカルファイルシステムまたはリモートファイルシステムからデータを読み込む際の優先度。ローカルファイルシステムでは `pread_threadpool` メソッド、リモートファイルシステムでは `threadpool` メソッドでのみサポートされます。 - -## read_through_distributed_cache {#read_through_distributed_cache} - - - - - - - -ClickHouse Cloud でのみ有効です。分散キャッシュからの読み取りを許可します。 - -## readonly {#readonly} - - - -0 - 読み取り専用の制限なし。1 - 読み取りリクエストのみ許可され、さらに明示的に許可された設定のみ変更可能。2 - 読み取りリクエストのみ許可され、`readonly` 設定を除くすべての設定変更が可能。 - -## receive_data_timeout_ms {#receive_data_timeout_ms} - - - -レプリカから最初のデータパケット、または正の進捗を示すパケットを受信するまでの接続タイムアウト - -## receive_timeout {#receive_timeout} - - - -ネットワークからデータを受信する際のタイムアウト時間(秒)です。この間に1バイトも受信されなかった場合、例外がスローされます。クライアント側でこの設定を行うと、対応するサーバー側接続のソケットに対しても `send_timeout` が設定されます。 - -## regexp_max_matches_per_row {#regexp_max_matches_per_row} - - - -1 行内で 1 つの正規表現がマッチできる最大回数を設定します。貪欲な正規表現を [extractAllGroupsHorizontal](/sql-reference/functions/string-search-functions#extractAllGroupsHorizontal) 関数で使用する際のメモリ過負荷を防ぐために使用します。 - -設定可能な値: - -- 正の整数 - -## reject_expensive_hyperscan_regexps {#reject_expensive_hyperscan_regexps} - - - -NFA の状態爆発により hyperscan での評価コストが高くなると予想されるパターンを拒否します - -## remerge_sort_lowered_memory_bytes_ratio {#remerge_sort_lowered_memory_bytes_ratio} - - - -リマージ後のメモリ使用量がこの比率までには減少しない場合、リマージは無効化されます。 - -## remote_filesystem_read_method {#remote_filesystem_read_method} - - - -リモートファイルシステムからデータを読み込む方法です。`read` または `threadpool` のいずれかを指定します。 - -## remote_filesystem_read_prefetch {#remote_filesystem_read_prefetch} - - - -リモートファイルシステムからデータを読み込む際にプリフェッチを行うかどうかを指定します。 - -## remote_fs_read_backoff_max_tries {#remote_fs_read_backoff_max_tries} - - - -バックオフを伴う読み取りの最大試行回数 - -## remote_fs_read_max_backoff_ms {#remote_fs_read_max_backoff_ms} - - - -リモートディスクからデータを読み取る際の最大待機時間 - -## remote_read_min_bytes_for_seek {#remote_read_min_bytes_for_seek} - - - -シークを行うためにリモート読み取り(url、S3)に必要な最小バイト数。この値未満の場合は、シークせずに読み飛ばしによる読み取りを行います。 - -## rename_files_after_processing {#rename_files_after_processing} - -- **Type:** 文字列 - -- **Default value:** 空文字列 - -この設定では、`file` テーブル関数で処理されたファイルに適用するファイル名の変更パターンを指定できます。オプションが設定されている場合、`file` テーブル関数によって読み込まれたすべてのファイルは、処理が正常に完了した場合に限り、指定されたプレースホルダ付きパターンに従ってリネームされます。 - -### プレースホルダー - -- `%a` — 元のフルファイル名(例: "sample.csv")。 -- `%f` — 拡張子を除いた元のファイル名(例: "sample")。 -- `%e` — 先頭にドットを含む元の拡張子(例: ".csv")。 -- `%t` — タイムスタンプ(マイクロ秒単位)。 -- `%%` — パーセント記号 ("%")。 - -### 例 - -- オプション:`--rename_files_after_processing="processed_%f_%t%e"` - -- クエリ:`SELECT * FROM file('sample.csv')` - -`sample.csv` の読み取りに成功すると、ファイルは `processed_sample_1683473210851438.csv` に名前が変更されます - -## replace_running_query {#replace_running_query} - - - -HTTP インターフェイスを使用する場合、`query_id` パラメータを渡すことができます。これはクエリ識別子として機能する任意の文字列です。 -同一ユーザーから同じ `query_id` を持つクエリがその時点ですでに存在する場合、その動作は `replace_running_query` パラメータに依存します。 - -`0`(デフォルト) – 例外をスローします(同じ `query_id` のクエリがすでに実行中の場合、新しいクエリの実行を許可しません)。 - -`1` – 以前のクエリをキャンセルして新しいクエリの実行を開始します。 - -セグメンテーション条件に対するサジェスト機能を実装する場合、このパラメータを 1 に設定します。次の文字が入力されたとき、古いクエリがまだ完了していなければ、それがキャンセルされるようにします。 - -## replace_running_query_max_wait_ms {#replace_running_query_max_wait_ms} - - - -[replace_running_query](#replace_running_query) 設定が有効な場合に、同じ `query_id` を持つ実行中のクエリが終了するまで待機する時間。 - -設定可能な値: - -- 正の整数。 -- 0 — サーバーがすでに同じ `query_id` のクエリを実行している場合、新しいクエリの実行を許可しない例外をスローする。 - -## replication_wait_for_inactive_replica_timeout {#replication_wait_for_inactive_replica_timeout} - - - -非アクティブなレプリカが [`ALTER`](../../sql-reference/statements/alter/index.md)、[`OPTIMIZE`](../../sql-reference/statements/optimize.md)、または [`TRUNCATE`](../../sql-reference/statements/truncate.md) クエリを実行するまで待機する時間(秒)を指定します。 - -設定可能な値: - -- `0` — 待機しません。 -- 負の整数 — 無制限に待機します。 -- 正の整数 — 待機する秒数。 - -## restore_replace_external_dictionary_source_to_null {#restore_replace_external_dictionary_source_to_null} - - - - - -リストア時に外部ディクショナリのソースを Null に置き換えます。テスト目的に有用です。 - -## restore_replace_external_engines_to_null {#restore_replace_external_engines_to_null} - - - - - -テスト目的で使用する設定です。すべての外部エンジンを Null に置き換え、外部接続が確立されないようにします。 - -## restore_replace_external_table_functions_to_null {#restore_replace_external_table_functions_to_null} - - - - - -テスト目的で使用する設定です。すべての外部テーブル関数を Null に置き換え、外部接続が確立されないようにします。 - -## restore_replicated_merge_tree_to_shared_merge_tree {#restore_replicated_merge_tree_to_shared_merge_tree} - - - - - -RESTORE 実行時にテーブルエンジンを Replicated*MergeTree から Shared*MergeTree に置き換えます。 - -## result_overflow_mode - - - -Cloud におけるデフォルト値: `throw` - -結果の量がいずれかの制限を超えた場合にどうするかを設定します。 - -設定可能な値: - -* `throw`: 例外をスローする(デフォルト)。 -* `break`: クエリの実行を停止し、ソースデータが尽きたかのように部分的な結果を返します。 - -`break` を使用することは LIMIT 句を使用することに似ています。`break` はブロックレベルでのみ実行を中断します。つまり、返される行数は -[`max_result_rows`](/operations/settings/settings#max_result_rows) より多く、[`max_block_size`](/operations/settings/settings#max_block_size) の倍数であり、 -[`max_threads`](/operations/settings/settings#max_threads) に依存します。 - -**例** - -```sql title="Query" -SET max_threads = 3, max_block_size = 3333; -SET max_result_rows = 3334, result_overflow_mode = 'break'; - -SELECT * -FROM numbers_mt(100000) -FORMAT Null; -``` - -```text title="Result" -6666行のデータセット。... -``` - - -## rewrite_count_distinct_if_with_count_distinct_implementation {#rewrite_count_distinct_if_with_count_distinct_implementation} - - - - - -`countDistcintIf` を [count_distinct_implementation](#count_distinct_implementation) 設定で書き換えられるようにします。 - -可能な値: - -- true — 許可する。 -- false — 許可しない。 - -## rewrite_in_to_join {#rewrite_in_to_join} - - - - - - - -「x IN subquery」のような式を JOIN を用いたものに書き換えます。JOIN の順序変更によってクエリ全体を最適化するのに役立つ可能性があります。 - -## s3_allow_multipart_copy {#s3_allow_multipart_copy} - - - - - -S3 のマルチパートコピーを有効にします。 - -## s3_allow_parallel_part_upload {#s3_allow_parallel_part_upload} - - - -S3 のマルチパートアップロードに複数スレッドを使用します。メモリ使用量がわずかに増加する可能性があります。 - -## s3_check_objects_after_upload {#s3_check_objects_after_upload} - - - -アップロード済みの各オブジェクトに対して S3 に HEAD リクエストを送信し、アップロードが成功したことを確認します - -## s3_connect_timeout_ms {#s3_connect_timeout_ms} - - - - - -S3 ディスクで使用するホスト接続のタイムアウト。 - -## s3_create_new_file_on_insert {#s3_create_new_file_on_insert} - - - -S3 エンジンテーブルへの各 `INSERT` ごとに新しいファイルを作成するかどうかを制御します。有効な場合、各 `INSERT` ごとに次のパターンのようなキーで新しい S3 オブジェクトが作成されます: - -initial: `data.Parquet.gz` -> `data.1.Parquet.gz` -> `data.2.Parquet.gz` など。 - -取り得る値: - -- 0 — `INSERT` クエリは、新しいファイルを作成するか、ファイルが既に存在していて s3_truncate_on_insert が設定されていない場合は失敗します。 -- 1 — `INSERT` クエリは、s3_truncate_on_insert が設定されていない場合、(2 回目以降の挿入から)サフィックスを使用して、各 `INSERT` ごとに新しいファイルを作成します。 - -詳細は[こちら](/integrations/s3#inserting-data)を参照してください。 - -## s3_disable_checksum {#s3_disable_checksum} - - - -S3 にファイルを送信するときにチェックサムを計算しません。これにより、ファイルに対する余分な処理パスを回避することで、書き込みを高速化します。MergeTree テーブルのデータはそもそも ClickHouse によってチェックサムが計算されているため、これはほとんどのケースで安全であり、さらに S3 に HTTPS でアクセスする場合、ネットワーク経由で転送する際のデータ完全性はすでに TLS レイヤーによって保証されています。一方で、S3 上で追加のチェックサムを行うことは、防御の層を厚くすることにもなります。 - -## s3_ignore_file_doesnt_exist {#s3_ignore_file_doesnt_exist} - - - - - -特定のキーを読み取る際に、ファイルが存在しない場合は、そのファイルが存在しないことを無視します。 - -設定可能な値: - -- 1 — `SELECT` は空の結果を返します。 -- 0 — `SELECT` は例外をスローします。 - -## s3_list_object_keys_size {#s3_list_object_keys_size} - - - -ListObject リクエストで 1 回のバッチで返されるファイル数の最大値 - -## s3_max_connections {#s3_max_connections} - - - -サーバーごとの最大接続数。 - -## s3_max_get_burst {#s3_max_get_burst} - - - -1 秒あたりのリクエスト数制限に達する前に、同時に発行できる最大リクエスト数です。デフォルト値の 0 は `s3_max_get_rps` と同じです。 - -## s3_max_get_rps {#s3_max_get_rps} - - - -スロットリングが適用される前の、1 秒あたりの S3 GET リクエスト数の上限です。0 は無制限を意味します。 - -## s3_max_inflight_parts_for_one_file {#s3_max_inflight_parts_for_one_file} - - - -マルチパートアップロードリクエストで同時にアップロードされるパーツ数の最大値。0 を指定すると無制限になります。 - -## s3_max_part_number {#s3_max_part_number} - - - - - -S3 アップロード時のパート番号の上限。 - -## s3_max_put_burst {#s3_max_put_burst} - - - -` s3_max_put_rps` で設定された 1 秒あたりのリクエスト数の上限に達する前に、同時に発行できる最大リクエスト数。デフォルト値 (0) の場合は `s3_max_put_rps` と同じ値になります。 - -## s3_max_put_rps {#s3_max_put_rps} - - - -スロットリングが行われる前の、1 秒あたりの S3 PUT リクエストレートの上限です。0 の場合は無制限を意味します。 - -## s3_max_single_operation_copy_size {#s3_max_single_operation_copy_size} - - - - - -S3 での単一操作コピーの最大サイズです。この設定は s3_allow_multipart_copy が true の場合にのみ有効です。 - -## s3_max_single_part_upload_size {#s3_max_single_part_upload_size} - - - -single-part アップロード方式を使用して S3 にアップロードするオブジェクトの最大サイズ。 - -## s3_max_single_read_retries {#s3_max_single_read_retries} - - - -単一の S3 読み取り時に行う最大リトライ回数。 - -## s3_max_unexpected_write_error_retries {#s3_max_unexpected_write_error_retries} - - - -S3 への書き込み中に予期しないエラーが発生した場合に行う再試行の最大回数。 - -## s3_max_upload_part_size {#s3_max_upload_part_size} - - - -S3 へのマルチパートアップロード時にアップロードする各パートの最大サイズ。 - -## s3_min_upload_part_size {#s3_min_upload_part_size} - - - -マルチパートアップロードで S3 に送信するパートの最小サイズです。 - -## s3_request_timeout_ms {#s3_request_timeout_ms} - - - -S3 へのデータ送受信時に適用される無通信状態のタイムアウト。単一の TCP 読み取りまたは書き込み呼び出しがこの時間以上ブロックされた場合は失敗とみなします。 - -## s3_skip_empty_files {#s3_skip_empty_files} - - - - - -[S3](../../engines/table-engines/integrations/s3.md) エンジンテーブルで空のファイルをスキップするかどうかを制御します。 - -設定可能な値: - -- 0 — 空のファイルが要求されたフォーマットと互換性がない場合、`SELECT` は例外をスローします。 -- 1 — 空のファイルに対して、`SELECT` は空の結果を返します。 - -## s3_slow_all_threads_after_network_error {#s3_slow_all_threads_after_network_error} - - - - - -`true` に設定すると、同じバックアップエンドポイントに対して S3 リクエストを実行しているすべてのスレッドの処理が、 -ソケットタイムアウトのようなリトライ可能なネットワークエラーが 1 つの S3 リクエストで発生した後に遅くなります。 -`false` に設定すると、各スレッドは他のスレッドとは独立して S3 リクエストのバックオフを処理します。 - -## s3_strict_upload_part_size {#s3_strict_upload_part_size} - - - -マルチパートアップロードで S3 にアップロードするパートの厳密なサイズを指定します(一部の実装では可変サイズのパートをサポートしていません)。 - -## s3_throw_on_zero_files_match {#s3_throw_on_zero_files_match} - - - -ListObjects リクエストで一致するファイルが 1 件も見つからない場合にエラーをスローします - -## s3_truncate_on_insert {#s3_truncate_on_insert} - - - -s3 エンジンテーブルへの挿入前にトランケート(truncate)を行うかどうかを有効または無効にします。無効にした場合、S3 オブジェクトがすでに存在しているときに挿入しようとすると、例外がスローされます。 - -指定可能な値: - -- 0 — `INSERT` クエリは新しいファイルを作成するか、ファイルが存在していて `s3_create_new_file_on_insert` が設定されていない場合は失敗します。 -- 1 — `INSERT` クエリは、そのファイルの既存の内容を新しいデータで置き換えます。 - -詳細は[こちら](/integrations/s3#inserting-data)を参照してください。 - -## s3_upload_part_size_multiply_factor {#s3_upload_part_size_multiply_factor} - - - -S3 への 1 回の書き込みからアップロードされたパーツ数が s3_multiply_parts_count_threshold に達するたびに、s3_min_upload_part_size にこの係数を乗じます。 - -## s3_upload_part_size_multiply_parts_count_threshold {#s3_upload_part_size_multiply_parts_count_threshold} - - - -この数のパートが S3 にアップロードされるたびに、`s3_min_upload_part_size` は `s3_upload_part_size_multiply_factor` によって乗算されます。 - -## s3_use_adaptive_timeouts {#s3_use_adaptive_timeouts} - - - -`true` に設定すると、すべての S3 リクエストに対して、最初の 2 回の試行は送信および受信タイムアウトを低めにして実行されます。 -`false` に設定すると、すべての試行で同一のタイムアウト値が使用されます。 - -## s3_validate_request_settings {#s3_validate_request_settings} - - - - - -S3 リクエスト設定の検証を有効にします。 -設定可能な値: - -- 1 — 設定を検証する。 -- 0 — 設定を検証しない。 - -## s3queue_default_zookeeper_path {#s3queue_default_zookeeper_path} - - - -S3Queue エンジン用の ZooKeeper パスのデフォルトプレフィックス - -## s3queue_enable_logging_to_s3queue_log {#s3queue_enable_logging_to_s3queue_log} - - - -system.s3queue_log への書き込みを有効にします。テーブル設定を使用して、テーブルごとにこの設定値を上書きできます。 - -## s3queue_keeper_fault_injection_probability {#s3queue_keeper_fault_injection_probability} - - - - - -S3Queue 用 Keeper のフォールトインジェクション確率。 - -## s3queue_migrate_old_metadata_to_buckets {#s3queue_migrate_old_metadata_to_buckets} - - - - - -S3Queueテーブルの古いメタデータ構造を新しい構造に移行します - -## schema_inference_cache_require_modification_time_for_url {#schema_inference_cache_require_modification_time_for_url} - - - -最終更新時刻の検証を行ったうえで、URL 向けにキャッシュされたスキーマを使用します(`Last-Modified` ヘッダーを持つ URL 向け) - -## schema_inference_use_cache_for_azure {#schema_inference_use_cache_for_azure} - - - -Azure テーブル関数使用時のスキーマ推論でキャッシュを使用する - -## schema_inference_use_cache_for_file {#schema_inference_use_cache_for_file} - - - -file テーブル関数を使用する際、スキーマ推論時にキャッシュを利用します。 - -## schema_inference_use_cache_for_hdfs {#schema_inference_use_cache_for_hdfs} - - - -hdfs テーブル関数でスキーマを推論する際にキャッシュを使用する - -## schema_inference_use_cache_for_s3 {#schema_inference_use_cache_for_s3} - - - -S3 テーブル関数を使用する際に、スキーマ推論でキャッシュを使用するかどうかを指定します - -## schema_inference_use_cache_for_url {#schema_inference_use_cache_for_url} - - - -`url` テーブル関数でスキーマ推論を行う際にキャッシュを使用する。 - -## secondary_indices_enable_bulk_filtering {#secondary_indices_enable_bulk_filtering} - - - - - -インデックスに対する一括フィルタリングアルゴリズムを有効にします。常により良い動作が期待されていますが、互換性および制御のためにこの設定が用意されています。 - -## select_sequential_consistency {#select_sequential_consistency} - - - -:::note -この設定は SharedMergeTree と ReplicatedMergeTree で動作が異なります。SharedMergeTree における `select_sequential_consistency` の動作の詳細については、[SharedMergeTree consistency](/cloud/reference/shared-merge-tree#consistency) を参照してください。 -::: - -`SELECT` クエリに対する逐次一貫性を有効または無効にします。`insert_quorum_parallel` が無効であることが必要です(デフォルトでは有効)。 - -可能な値: - -- 0 — 無効。 -- 1 — 有効。 - -使用方法 - -逐次一貫性が有効な場合、ClickHouse はクライアントに対し、`insert_quorum` を有効にして実行されたすべての以前の `INSERT` クエリのデータを保持しているレプリカに対してのみ `SELECT` クエリを実行することを許可します。クライアントが不完全なレプリカを参照しようとした場合、ClickHouse は例外をスローします。`SELECT` クエリには、まだクォーラムレプリカに書き込まれていないデータは含まれません。 - -`insert_quorum_parallel` が有効(デフォルト)な場合、`select_sequential_consistency` は機能しません。これは、並列な `INSERT` クエリが異なるクォーラムレプリカ集合に書き込まれる可能性があるため、単一のレプリカがすべての書き込みを受け取っていることを保証できないためです。 - -関連項目: - -- [insert_quorum](#insert_quorum) -- [insert_quorum_timeout](#insert_quorum_timeout) -- [insert_quorum_parallel](#insert_quorum_parallel) - -## send_logs_level {#send_logs_level} - - - -指定した最小レベル以上のサーバーのテキストログをクライアントに送信します。有効な値: 'trace', 'debug', 'information', 'warning', 'error', 'fatal', 'none' - -## send_logs_source_regexp {#send_logs_source_regexp} - -指定した正規表現にマッチするログソース名のサーバーのテキストログを送信します。空の場合はすべてのソースが対象になります。 - -## send_profile_events {#send_profile_events} - - - - - -[ProfileEvents](/native-protocol/server.md#profile-events) パケットをクライアントに送信するかどうかを有効または無効にします。 - -プロファイルイベントを必要としないクライアント向けには、ネットワークトラフィックを削減するために無効化できます。 - -設定可能な値: - -- 0 — 無効。 -- 1 — 有効。 - -## send_progress_in_http_headers {#send_progress_in_http_headers} - - - -`clickhouse-server` のレスポンスで、`X-ClickHouse-Progress` HTTPレスポンスヘッダーを有効または無効にします。 - -詳細については、[HTTPインターフェイスの説明](../../interfaces/http.md)を参照してください。 - -設定可能な値: - -- 0 — 無効。 -- 1 — 有効。 - -## send_timeout {#send_timeout} - - - -ネットワークへのデータ送信におけるタイムアウト時間(秒)です。クライアントがデータを送信する必要があるにもかかわらず、この時間内に 1 バイトも送信できなかった場合、例外がスローされます。この設定をクライアント側で指定すると、対応するサーバー側接続のソケットにも `receive_timeout` が設定されます。 - -## serialize_query_plan {#serialize_query_plan} - - - - - -分散処理のためにクエリプランをシリアル化します - -## session_timezone - - - -現在のセッションまたはクエリの暗黙的なタイムゾーンを設定します。 -暗黙的なタイムゾーンとは、明示的なタイムゾーンが指定されていない DateTime/DateTime64 型の値に適用されるタイムゾーンです。 -この設定は、グローバルに構成された(サーバーレベルの)暗黙的なタイムゾーンよりも優先して適用されます。 -値が ''(空文字列)の場合、現在のセッションまたはクエリの暗黙的なタイムゾーンは [サーバーのタイムゾーン](../server-configuration-parameters/settings.md/#timezone) と同じになります。 - -セッションのタイムゾーンとサーバーのタイムゾーンを取得するには、`timeZone()` および `serverTimeZone()` 関数を使用できます。 - -設定可能な値: - -* `system.time_zones` に含まれる任意のタイムゾーン名(例: `Europe/Berlin`、`UTC`、`Zulu`) - -例: - -```sql -SELECT timeZone(), serverTimeZone() FORMAT CSV - -"Europe/Berlin","Europe/Berlin" -``` - -```sql -SELECT timeZone(), serverTimeZone() SETTINGS session_timezone = 'Asia/Novosibirsk' FORMAT CSV - -"Asia/Novosibirsk","Europe/Berlin" -``` - -セッションのタイムゾーン「America/Denver」を、タイムゾーン未指定の内部 DateTime に適用します: - -```sql -SELECT toDateTime64(toDateTime64('1999-12-12 23:23:23.123', 3), 3, 'Europe/Zurich') SETTINGS session_timezone = 'America/Denver' FORMAT TSV - -1999-12-13 07:23:23.123 -``` - -:::warning -DateTime/DateTime64 をパースする関数の中には `session_timezone` を考慮しないものがあります。その結果、気付きにくい不具合が発生する可能性があります。 -以下の例と説明を参照してください。 -::: - -```sql -CREATE TABLE test_tz (`d` DateTime('UTC')) ENGINE = Memory AS SELECT toDateTime('2000-01-01 00:00:00', 'UTC'); - -SELECT *, timeZone() FROM test_tz WHERE d = toDateTime('2000-01-01 00:00:00') SETTINGS session_timezone = 'Asia/Novosibirsk' -0 rows in set. - -SELECT *, timeZone() FROM test_tz WHERE d = '2000-01-01 00:00:00' SETTINGS session_timezone = 'Asia/Novosibirsk' -┌───────────────────d─┬─timeZone()───────┐ -│ 2000-01-01 00:00:00 │ Asia/Novosibirsk │ -└─────────────────────┴──────────────────┘ -``` - -これは、異なるパース処理パイプラインによって生じます。 - -* 明示的なタイムゾーンを指定せずに、最初の `SELECT` クエリ内で使用された `toDateTime()` では、`session_timezone` 設定とグローバルタイムゾーンが適用されます。 -* 2つ目のクエリでは、DateTime は String からパースされ、既存の列 `d` の型とタイムゾーンを継承します。そのため、`session_timezone` 設定とグローバルタイムゾーンは適用されません。 - -**関連項目** - -* [timezone](../server-configuration-parameters/settings.md/#timezone) - - -## set_overflow_mode {#set_overflow_mode} - - - -データ量がいずれかの制限を超えた場合の動作を設定します。 - -指定可能な値: - -- `throw`: 例外をスローします(デフォルト)。 -- `break`: クエリの実行を停止し、ソースデータが尽きたかのように途中までの結果を返します。 - -## shared_merge_tree_sync_parts_on_partition_operations {#shared_merge_tree_sync_parts_on_partition_operations} - - - - - -SMT テーブルに対する MOVE | REPLACE | ATTACH パーティション操作の後に、データパーツの集合を自動的に同期します。Cloud 環境でのみ有効です - -## short_circuit_function_evaluation {#short_circuit_function_evaluation} - - - -[if](../../sql-reference/functions/conditional-functions.md/#if)、[multiIf](../../sql-reference/functions/conditional-functions.md/#multiIf)、[and](/sql-reference/functions/logical-functions#and)、および [or](/sql-reference/functions/logical-functions#or) 関数を、[ショートサーキット評価](https://en.wikipedia.org/wiki/Short-circuit_evaluation)に従って評価できるようにします。これにより、これらの関数内で複雑な式の実行を最適化し、(想定されていないゼロ除算などの)例外の発生を防ぐのに役立ちます。 - -取り得る値: - -- `enable` — 該当する関数(例外をスローする可能性がある、または計算コストが高いもの)に対して、関数のショートサーキット評価を有効にします。 -- `force_enable` — すべての関数に対して、関数のショートサーキット評価を有効にします。 -- `disable` — 関数のショートサーキット評価を無効にします。 - -## short_circuit_function_evaluation_for_nulls {#short_circuit_function_evaluation_for_nulls} - - - - - -いずれかの引数が NULL の場合に NULL を返す関数の評価を最適化します。関数の引数に含まれる NULL 値の割合が short_circuit_function_evaluation_for_nulls_threshold を超えると、システムは関数を行単位で評価することを省略します。その代わり、すべての行に対して即座に NULL を返し、不要な計算を回避します。 - -## short_circuit_function_evaluation_for_nulls_threshold {#short_circuit_function_evaluation_for_nulls_threshold} - - - - - -NULL 値を含む行の割合に対するしきい値。`Nullable` 引数を持つ関数を、すべての引数が非 NULL 値である行に対してのみ実行します。`short_circuit_function_evaluation_for_nulls` 設定が有効な場合に適用されます。 -NULL 値を含む行数と全行数との比率がこのしきい値を超えると、NULL 値を含む行は評価対象から除外されます。 - -## show_data_lake_catalogs_in_system_tables {#show_data_lake_catalogs_in_system_tables} - - - - - -system テーブルでデータレイクカタログを表示できるようにします。 - -## show_processlist_include_internal {#show_processlist_include_internal} - - - - - -`SHOW PROCESSLIST` クエリの出力に、内部の補助プロセスを表示します。 - -内部プロセスには、ディクショナリのリロード、リフレッシュ可能なマテリアライズドビューのリロード、`SHOW ...` クエリ内で実行される補助的な `SELECT`、破損したテーブルに対処するために内部的に実行される補助的な `CREATE DATABASE ...` クエリなどが含まれます。 - -## show_table_uuid_in_table_create_query_if_not_nil {#show_table_uuid_in_table_create_query_if_not_nil} - - - - - -`SHOW TABLE` クエリの表示内容を設定します。 - -指定可能な値: - -- 0 — クエリはテーブル UUID を含めずに表示されます。 -- 1 — クエリはテーブル UUID を含めて表示されます。 - -## single_join_prefer_left_table {#single_join_prefer_left_table} - - - -単一の JOIN の場合、識別子があいまいなときは左側のテーブルを優先します - -## skip_redundant_aliases_in_udf - - - - - -ユーザー定義関数の利用を簡素化するため、冗長なエイリアスは UDF 内では使用・展開されません。 - -設定可能な値: - -* 1 — UDF 内でエイリアスをスキップ(展開せずに処理)します。 -* 0 — UDF 内でエイリアスをスキップしません(通常どおり扱います)。 - -**例** - -有効時と無効時の違い: - -クエリ: - -```sql -SET skip_redundant_aliases_in_udf = 0; -CREATE FUNCTION IF NOT EXISTS test_03274 AS ( x ) -> ((x + 1 as y, y + 2)); - -EXPLAIN SYNTAX SELECT test_03274(4 + 2); -``` - -結果: - -```text -SELECT ((4 + 2) + 1 AS y, y + 2) -``` - -クエリ: - -```sql -SET skip_redundant_aliases_in_udf = 1; -CREATE FUNCTION IF NOT EXISTS test_03274 AS ( x ) -> ((x + 1 as y, y + 2)); - -EXPLAIN SYNTAX SELECT test_03274(4 + 2); -``` - -結果: - -```text -SELECT ((4 + 2) + 1, ((4 + 2) + 1) + 2) -``` - - -## skip_unavailable_shards {#skip_unavailable_shards} - - - -利用できないシャードをエラーなくスキップするかどうかを有効または無効にします。 - -すべてのレプリカが利用できない場合、そのシャードは利用不可と見なされます。レプリカが利用不可と見なされるのは、次のような場合です。 - -- 何らかの理由で ClickHouse がレプリカに接続できない。 - - レプリカへの接続時、ClickHouse は複数回の接続試行を行います。これらの試行がすべて失敗した場合、そのレプリカは利用不可と見なされます。 - -- レプリカが DNS を通じて名前解決できない。 - - レプリカのホスト名が DNS で名前解決できない場合、次のような状況を示している可能性があります。 - - - レプリカのホストに DNS レコードが存在しない。これは動的 DNS を用いるシステム、たとえば [Kubernetes](https://kubernetes.io) ではよくあることであり、ノードがダウンタイム中に名前解決できなくなっても、それ自体はエラーではありません。 - - - 設定ミス。ClickHouse の設定ファイルに誤ったホスト名が記載されている。 - -取りうる値: - -- 1 — スキップを有効。 - - シャードが利用不可の場合、ClickHouse は一部のデータに基づいた結果を返し、ノードの可用性に関する問題を報告しません。 - -- 0 — スキップを無効。 - - シャードが利用不可の場合、ClickHouse は例外をスローします。 - -## sleep_after_receiving_query_ms {#sleep_after_receiving_query_ms} - - - -TCPHandler でクエリを受信した後に待機する時間 - -## sleep_in_send_data_ms {#sleep_in_send_data_ms} - - - -TCPHandler におけるデータ送信時のスリープ時間 - -## sleep_in_send_tables_status_ms {#sleep_in_send_tables_status_ms} - - - -TCPHandler でテーブルステータス応答を送信する際にスリープする時間 - -## sort_overflow_mode {#sort_overflow_mode} - - - -ソート前に受信した行数がいずれかの制限を超えた場合の動作を設定します。 - -指定可能な値: - -- `throw`: 例外をスローします。 -- `break`: クエリの実行を停止し、部分的な結果を返します。 - -## split_intersecting_parts_ranges_into_layers_final {#split_intersecting_parts_ranges_into_layers_final} - - - - - -FINAL 最適化中に、互いに重なり合うパーツ範囲をレイヤーに分割します - -## split_parts_ranges_into_intersecting_and_non_intersecting_final {#split_parts_ranges_into_intersecting_and_non_intersecting_final} - - - - - -FINAL 最適化時に、パーツの範囲を交差するものと交差しないものに分割します - -## splitby_max_substrings_includes_remaining_string {#splitby_max_substrings_includes_remaining_string} - - - -引数 `max_substrings` に 0 より大きい値を指定した場合に、関数 [splitBy*()](../../sql-reference/functions/splitting-merging-functions.md) が結果配列の最後の要素に残りの文字列を含めるかどうかを制御します。 - -設定可能な値: - -- `0` - 残りの文字列は結果配列の最後の要素に含められません。 -- `1` - 残りの文字列は結果配列の最後の要素に含められます。これは、Spark の [`split()`](https://spark.apache.org/docs/3.1.2/api/python/reference/api/pyspark.sql.functions.split.html) 関数および Python の [`string.split()`](https://docs.python.org/3/library/stdtypes.html#str.split) メソッドの動作と同じです。 - -## stop_refreshable_materialized_views_on_startup {#stop_refreshable_materialized_views_on_startup} - - - - - -サーバー起動時に、`SYSTEM STOP VIEWS` を実行した場合と同様に、リフレッシュ可能なマテリアライズドビューをスケジュールしないようにします。必要に応じて、その後に `SYSTEM START VIEWS` または `SYSTEM START VIEW <name>` を使用して手動で開始できます。新しく作成されたビューにも適用されます。リフレッシュ非対応のマテリアライズドビューには影響しません。 - -## storage_file_read_method {#storage_file_read_method} - - - -ストレージファイルからデータを読み取る方法を指定します。指定可能な値は `read`、`pread`、`mmap` のいずれかです。`mmap` メソッドは clickhouse-server では使用できず、clickhouse-local 向けです。 - -## storage_system_stack_trace_pipe_read_timeout_ms {#storage_system_stack_trace_pipe_read_timeout_ms} - - - -`system.stack_trace` テーブルをクエリする際に、スレッドから情報を受信するためにパイプから読み取ることが許容される最大時間。 -この設定はテスト用途専用であり、ユーザーが変更することは想定されていません。 - -## stream_flush_interval_ms {#stream_flush_interval_ms} - - - -タイムアウトが発生した場合、またはスレッドが [max_insert_block_size](#max_insert_block_size) 行を生成した場合に、ストリーミングを行うテーブルで有効になります。 - -デフォルト値は 7500 です。 - -値を小さくするほど、テーブルへのデータフラッシュがより頻繁に行われます。値を小さくし過ぎるとパフォーマンスの低下につながります。 - -## stream_like_engine_allow_direct_select {#stream_like_engine_allow_direct_select} - - - - - -Kafka、RabbitMQ、FileLog、Redis Streams、NATS エンジンに対する直接の SELECT クエリを許可します。マテリアライズドビューがアタッチされている場合、この設定が有効でも SELECT クエリは許可されません。 - -## stream_like_engine_insert_queue {#stream_like_engine_insert_queue} - -stream-like エンジンが複数のキューからデータを読み出す場合、書き込み時には挿入先とするキューを 1 つ選択する必要があります。Redis Streams や NATS で使用されます。 - -## stream_poll_timeout_ms {#stream_poll_timeout_ms} - - - -ストリーミングストレージとの間でデータを送受信する際に行うポーリングのタイムアウト時間。 - -## system_events_show_zero_values - - - -[`system.events`](../../operations/system-tables/events.md) から値がゼロのイベントも選択できるようにします。 - -一部の監視システムでは、メトリクス値がゼロであっても、各チェックポイントごとにすべてのメトリクス値を送信する必要があります。 - -可能な値: - -* 0 — 無効。 -* 1 — 有効。 - -**例** - -クエリ - -```sql -SELECT * FROM system.events WHERE event='QueryMemoryLimitExceeded'; -``` - -結果 - -```text -Ok. -``` - -クエリ - -```sql -SET system_events_show_zero_values = 1; -SELECT * FROM system.events WHERE event='QueryMemoryLimitExceeded'; -``` - -結果 - -```text -┌─event────────────────────┬─value─┬─description───────────────────────────────────────────┐ -│ QueryMemoryLimitExceeded │ 0 │ クエリのメモリ制限を超過した回数。 │ -└──────────────────────────┴───────┴───────────────────────────────────────────────────────┘ -``` - - -## table_engine_read_through_distributed_cache {#table_engine_read_through_distributed_cache} - - - - - - - -ClickHouse Cloud でのみ効果があります。テーブルエンジン/テーブル関数(S3、Azure など)を介して分散キャッシュからの読み取りを許可します。 - -## table_function_remote_max_addresses {#table_function_remote_max_addresses} - - - -[remote](../../sql-reference/table-functions/remote.md) 関数において、パターンから生成されるアドレス数の最大値を設定します。 - -設定可能な値: - -- 正の整数 - -## tcp_keep_alive_timeout {#tcp_keep_alive_timeout} - - - -TCP がキープアライブプローブの送信を開始するまで、接続がアイドル状態のままでいられる時間(秒) - -## temporary_data_in_cache_reserve_space_wait_lock_timeout_milliseconds {#temporary_data_in_cache_reserve_space_wait_lock_timeout_milliseconds} - - - - - -一時データ用にファイルシステムキャッシュ内の領域を予約する際に、キャッシュのロックを待機する時間 - -## temporary_files_buffer_size {#temporary_files_buffer_size} - - - - - -一時ファイルの書き込み用バッファのサイズです。バッファサイズを大きくするとシステムコールの回数は減りますが、メモリ使用量が増加します。 - -## temporary_files_codec {#temporary_files_codec} - - - -ディスク上でのソートおよび結合処理で使用される一時ファイルの圧縮コーデックを設定します。 - -設定可能な値: - -- LZ4 — [LZ4](https://en.wikipedia.org/wiki/LZ4_(compression_algorithm)) 圧縮が適用されます。 -- NONE — 圧縮は適用されません。 - -## text_index_use_bloom_filter {#text_index_use_bloom_filter} - - - - - -テスト目的で、テキストインデックスにおける Bloom フィルターの利用を有効化または無効化します。 - -## throw_if_deduplication_in_dependent_materialized_views_enabled_with_async_insert {#throw_if_deduplication_in_dependent_materialized_views_enabled_with_async_insert} - - - - - -`deduplicate_blocks_in_dependent_materialized_views` 設定が有効な状態で `async_insert` も有効になっている場合、INSERT クエリの実行時に例外をスローします。これらの機能は同時に動作できないため、この設定により処理の正当性が保証されます。 - -## throw_if_no_data_to_insert {#throw_if_no_data_to_insert} - - - -空の INSERT を許可するかどうかを制御します。デフォルトでは有効で、空の INSERT に対してエラーをスローします。[`clickhouse-client`](/interfaces/cli) を使用した INSERT、または [gRPC インターフェース](/interfaces/grpc) を使用した INSERT にのみ適用されます。 - -## throw_on_error_from_cache_on_write_operations {#throw_on_error_from_cache_on_write_operations} - - - -書き込み操作(INSERT、マージ)時のキャッシュで発生したエラーを無視します - -## throw_on_max_partitions_per_insert_block {#throw_on_max_partitions_per_insert_block} - - - -`max_partitions_per_insert_block` に到達したときの挙動を制御します。 - -取りうる値: - -- `true` - 挿入ブロックが `max_partitions_per_insert_block` に到達したときに、例外を送出します。 -- `false` - `max_partitions_per_insert_block` に到達したときに、警告をログ出力します。 - -:::tip -[`max_partitions_per_insert_block`](/operations/settings/settings#max_partitions_per_insert_block) を変更した際に、それがユーザーへ与える影響を把握したい場合に役立ちます。 -::: - -## throw_on_unsupported_query_inside_transaction {#throw_on_unsupported_query_inside_transaction} - - - - - -トランザクション内でサポートされていないクエリが使用された場合に例外をスローします。 - -## timeout_before_checking_execution_speed {#timeout_before_checking_execution_speed} - - - -指定された秒数が経過した後、実行速度が遅すぎない(`min_execution_speed` を下回らない)ことをチェックします。 - -## timeout_overflow_mode {#timeout_overflow_mode} - - - -クエリの実行時間が `max_execution_time` を超えた場合、または推定実行時間が `max_estimated_execution_time` を超える場合にどうするかを指定します。 - -設定値: - -- `throw`: 例外をスローします(デフォルト)。 -- `break`: クエリの実行を停止し、ソースデータが尽きたかのように部分的な結果を返します。 - -## timeout_overflow_mode_leaf {#timeout_overflow_mode_leaf} - - - -リーフノードでのクエリ実行時間が `max_execution_time_leaf` を超えた場合の動作を設定します。 - -設定可能な値: - -- `throw`: 例外をスローします(デフォルト)。 -- `break`: クエリの実行を停止して部分的な結果を返します。これは、 -ソースデータが尽きた場合と同様の動作です。 - -## totals_auto_threshold {#totals_auto_threshold} - - - -`totals_mode = 'auto'` のときのしきい値です。 -「WITH TOTALS 修飾子」のセクションを参照してください。 - -## totals_mode {#totals_mode} - - - -HAVING 句が指定されている場合、さらに `max_rows_to_group_by` と `group_by_overflow_mode = 'any'` が設定されている場合に、TOTALS をどのように計算するかを指定します。 -「WITH TOTALS 修飾子」セクションを参照してください。 - -## trace_profile_events {#trace_profile_events} - - - -各 `profile event` の更新ごとに、`profile event` の名前とインクリメントされた値とあわせてスタックトレースを収集し、それらを [trace_log](/operations/system-tables/trace_log) に送信するかどうかを切り替えます。 - -設定可能な値: - -- 1 — `profile event` のトレースを有効にします。 -- 0 — `profile event` のトレースを無効にします。 - -## transfer_overflow_mode {#transfer_overflow_mode} - - - -データ量がいずれかの制限を超えたときの動作を設定します。 - -指定可能な値: - -- `throw`: 例外をスローします(デフォルト)。 -- `break`: クエリの実行を停止して部分的な結果を返します。ソースデータが尽きた場合と同様の動作になります。 - -## transform_null_in - - - -[IN](../../sql-reference/operators/in.md) 演算子において [NULL](/sql-reference/syntax#null) 値同士を等しいものとして扱うかどうかを制御します。 - -デフォルトでは、`NULL` は未定義値を意味するため、`NULL` 値は比較できません。したがって、`expr = NULL` という比較は常に `false` を返さなければなりません。この設定を有効にすると、`IN` 演算子において `NULL = NULL` が `true` を返すようになります。 - -指定可能な値: - -* 0 — `IN` 演算子における `NULL` 値の比較は `false` を返します。 -* 1 — `IN` 演算子における `NULL` 値の比較は `true` を返します。 - -**例** - -次の `null_in` テーブルを使用します: - -```text -┌──idx─┬─────i─┐ -│ 1 │ 1 │ -│ 2 │ NULL │ -│ 3 │ 3 │ -└──────┴───────┘ -``` - -クエリ: - -```sql -SELECT idx, i FROM null_in WHERE i IN (1, NULL) SETTINGS transform_null_in = 0; -``` - -結果: - -```text -┌──idx─┬────i─┐ -│ 1 │ 1 │ -└──────┴──────┘ -``` - -クエリ: - -```sql -SELECT idx, i FROM null_in WHERE i IN (1, NULL) SETTINGS transform_null_in = 1; -``` - -結果: - -```text -┌──idx─┬─────i─┐ -│ 1 │ 1 │ -│ 2 │ NULL │ -└──────┴───────┘ -``` - -**関連項目** - -* [IN 演算子での NULL の処理](/sql-reference/operators/in#null-processing) - - -## traverse_shadow_remote_data_paths {#traverse_shadow_remote_data_paths} - - - - - -system.remote_data_paths をクエリする際に、実テーブルデータに加えてフリーズされたデータ(シャドウディレクトリ)も走査します。 - -## union_default_mode {#union_default_mode} - -`SELECT` クエリ結果を結合する際のモードを設定します。`UNION ALL` または `UNION DISTINCT` を明示的に指定していない [UNION](../../sql-reference/statements/select/union.md) と組み合わせて使用される場合にのみ有効です。 - -可能な値: - -- `'DISTINCT'` — クエリを結合した結果から、ClickHouse は重複行を削除して行を出力します。 -- `'ALL'` — クエリを結合した結果から、ClickHouse は重複行も含めてすべての行を出力します。 -- `''` — `UNION` と共に使用された場合、ClickHouse は例外をスローします。 - -[UNION](../../sql-reference/statements/select/union.md) の例を参照してください。 - -## unknown_packet_in_send_data {#unknown_packet_in_send_data} - - - -N 番目のデータパケットを不明なパケットに置き換えて送信する - -## update_parallel_mode {#update_parallel_mode} - - - - - -同時に実行される `UPDATE` クエリの動作を決定します。 - -設定可能な値: - -- `sync` - すべての `UPDATE` クエリを順次実行します。 -- `auto` - 同一クエリ内で更新される列と、別のクエリの式で使用される列との間に依存関係がある `UPDATE` クエリのみ、順次実行します。 -- `async` - `UPDATE` クエリの実行を同期しません。 - -## update_sequential_consistency {#update_sequential_consistency} - - - - - -true の場合、更新を実行する前にパーツセットが最新バージョンに更新されます。 - -## use_async_executor_for_materialized_views {#use_async_executor_for_materialized_views} - - - - - -マテリアライズドビューのクエリを非同期で、かつ必要に応じてマルチスレッドで実行します。INSERT 時のビュー処理を高速化できますが、メモリ消費量が増える可能性があります。 - -## use_cache_for_count_from_files {#use_cache_for_count_from_files} - - - -テーブル関数 `file`/`s3`/`url`/`hdfs`/`azureBlobStorage` によるファイルを対象とした `count` 実行時に、行数をキャッシュする機能を有効にします。 - -デフォルトで有効です。 - -## use_client_time_zone {#use_client_time_zone} - - - -DateTime 文字列値を解釈する際に、サーバー側のタイムゾーンではなくクライアント側のタイムゾーンを使用します。 - -## use_compact_format_in_distributed_parts_names {#use_compact_format_in_distributed_parts_names} - - - - - -バックグラウンド(`distributed_foreground_insert`)で `Distributed` エンジンのテーブルに対して実行される INSERT において、ブロックをコンパクトな形式で保存します。 - -可能な値: - -- 0 — `user[:password]@host:port#default_database` というディレクトリ形式を使用します。 -- 1 — `[shard{shard_index}[_replica{replica_index}]]` というディレクトリ形式を使用します。 - -:::note - -- `use_compact_format_in_distributed_parts_names=0` の場合、クラスタ定義の変更はバックグラウンド INSERT には適用されません。 -- `use_compact_format_in_distributed_parts_names=1` の場合、クラスタ定義内でノードの順序を変更すると `shard_index` / `replica_index` が変更されるため注意してください。 -::: - -## use_concurrency_control {#use_concurrency_control} - - - - - -サーバーの同時実行制御(`concurrent_threads_soft_limit_num` および `concurrent_threads_soft_limit_ratio_to_cores` のグローバルサーバー設定を参照)に従います。無効にした場合、サーバーが過負荷状態であっても、より多くのスレッドを使用できるようになります(通常の利用には推奨されず、主にテスト用途で必要になります)。 - -## use_hedged_requests {#use_hedged_requests} - - - - - -リモートクエリに対して hedged requests のロジックを有効にします。これにより、単一のクエリに対して複数のレプリカへ同時に接続を確立できるようになります。 -既存のレプリカへの接続が `hedged_connection_timeout` 以内に確立されなかった場合、または `receive_data_timeout` 以内にデータが受信されなかった場合には、新しい接続が確立されます。クエリは、空でない progress パケット(または `allow_changing_replica_until_first_data_packet` が有効な場合はデータパケット)を最初に送信した接続を使用し、 -その他の接続はキャンセルされます。`max_parallel_replicas > 1` のクエリにも対応しています。 - -デフォルトで有効です。 - -Cloud でのデフォルト値: `1` - -## use_hive_partitioning {#use_hive_partitioning} - - - - - -有効にすると、ClickHouse はファイル系テーブルエンジン [File](/sql-reference/table-functions/file#hive-style-partitioning)/[S3](/sql-reference/table-functions/s3#hive-style-partitioning)/[URL](/sql-reference/table-functions/url#hive-style-partitioning)/[HDFS](/sql-reference/table-functions/hdfs#hive-style-partitioning)/[AzureBlobStorage](/sql-reference/table-functions/azureBlobStorage#hive-style-partitioning) のパス内 (`/name=value/`) にある Hive 形式のパーティショニングを検出し、クエリ内でパーティション列を仮想列として使用できるようにします。これらの仮想列は、パーティションのパス内の列と同じ名前を持ちますが、先頭に `_` が付きます。 - -## use_iceberg_metadata_files_cache {#use_iceberg_metadata_files_cache} - - - - - -有効にすると、Iceberg テーブル関数および Iceberg ストレージで Iceberg メタデータファイルキャッシュを利用できます。 - -指定可能な値: - -- 0 - 無効 -- 1 - 有効 - -## use_iceberg_partition_pruning {#use_iceberg_partition_pruning} - - - - - -Iceberg テーブルで Iceberg パーティションプルーニングを使用します - -## use_index_for_in_with_subqueries {#use_index_for_in_with_subqueries} - - - -`IN` 演算子の右辺にサブクエリまたはテーブル式がある場合に、インデックスの利用を試みます。 - -## use_index_for_in_with_subqueries_max_values {#use_index_for_in_with_subqueries_max_values} - - - -`IN` 演算子の右辺にある集合について、フィルタリングにテーブルインデックスを使用する際の最大サイズを指定します。このサイズを超える場合は、テーブルインデックスを使用しません。大規模なクエリで追加のデータ構造を準備することによるパフォーマンス低下やメモリ使用量の増加を回避するための設定です。0 は制限なしを意味します。 - -## use_join_disjunctions_push_down {#use_join_disjunctions_push_down} - - - - - -OR で結合された JOIN 条件の一部を、対応する入力側にプッシュダウンすることを有効にします(「部分的プッシュダウン」)。 -これによりストレージエンジンがより早い段階でフィルタリングを実行でき、読み取るデータ量を削減できる場合があります。 -この最適化はクエリの意味を変えないものであり、各トップレベルの OR ブランチが、対象側に対して少なくとも 1 つの決定的な述語を含む場合にのみ適用されます。 - -## use_legacy_to_time {#use_legacy_to_time} - - - - - -有効化すると、従来の `toTime` 関数を使用できるようになります。この関数は、日時を固定の日付に変換しつつ、時刻部分を保持します。 -無効にすると、新しい `toTime` 関数が使用され、さまざまな型のデータを `Time` 型に変換します。 -従来の関数は、`toTimeWithFixedDate` として常に利用可能です。 - -## use_page_cache_for_disks_without_file_cache {#use_page_cache_for_disks_without_file_cache} - - - - - -ファイルシステムキャッシュが有効になっていないリモートディスクに対して、ユーザー空間ページキャッシュを使用します。 - -## use_page_cache_with_distributed_cache {#use_page_cache_with_distributed_cache} - - - - - -分散キャッシュ使用時にユーザー空間のページキャッシュを使用します。 - -## use_paimon_partition_pruning {#use_paimon_partition_pruning} - - - - - - - -Paimon テーブル関数で Paimon のパーティションプルーニングを使用します - -## use_query_cache {#use_query_cache} - - - -有効にすると、`SELECT` クエリで [クエリキャッシュ](../query-cache.md) を利用できるようになります。パラメータ [enable_reads_from_query_cache](#enable_reads_from_query_cache) と [enable_writes_to_query_cache](#enable_writes_to_query_cache) によって、キャッシュの使用方法をより詳細に制御できます。 - -設定可能な値: - -- 0 - 無効 -- 1 - 有効 - -## use_query_condition_cache {#use_query_condition_cache} - - - - - -[query condition cache](/operations/query-condition-cache) を有効にします。キャッシュは、`WHERE` 句内の条件を満たさないデータパート内のグラニュールの範囲を保存し、 -その後のクエリで一時的なインデックスとしてこの情報を再利用します。 - -設定可能な値: - -- 0 - 無効 -- 1 - 有効 - -## use_roaring_bitmap_iceberg_positional_deletes {#use_roaring_bitmap_iceberg_positional_deletes} - - - - - -Iceberg の位置指定削除に Roaring Bitmap を使用します。 - -## use_skip_indexes {#use_skip_indexes} - - - -クエリ実行時にデータスキップインデックスを使用します。 - -設定可能な値: - -- 0 — 無効。 -- 1 — 有効。 - -## use_skip_indexes_if_final {#use_skip_indexes_if_final} - - - - - -クエリで `FINAL` 修飾子を使用して実行する際に、スキップインデックスを使用するかどうかを制御します。 - -スキップインデックスは、最新のデータを含む行(グラニュール単位)を除外してしまう可能性があり、その結果、`FINAL` 修飾子付きクエリで誤った結果を返す場合があります。この設定が有効な場合は、`FINAL` 修飾子が指定されていてもスキップインデックスが適用され、パフォーマンスが向上する可能性がありますが、直近の更新を取りこぼすリスクがあります。この設定は、設定 `use_skip_indexes_if_final_exact_mode`(デフォルトで有効)と同期して有効にする必要があります。 - -設定可能な値: - -- 0 — 無効。 -- 1 — 有効。 - -## use_skip_indexes_if_final_exact_mode {#use_skip_indexes_if_final_exact_mode} - - - - - -FINAL 修飾子付きクエリを実行する際に、スキップインデックスによって返されたグラニュールを、より新しいパーツにも展開して読み取り、正しい結果を返すかどうかを制御します。 - -スキップインデックスを使用すると、最新データを含む行(グラニュール)が除外されてしまい、その結果が不正確になる可能性があります。この設定を有効にすると、スキップインデックスによって返された範囲と重複する、より新しいパーツをスキャンすることで、正しい結果が返されるようにできます。スキップインデックスを参照して得られる近似的な結果で問題ないアプリケーションの場合にのみ、この設定を無効にしてください。 - -設定可能な値: - -- 0 — 無効。 -- 1 — 有効。 - -## use_skip_indexes_on_data_read {#use_skip_indexes_on_data_read} - - - - - -データ読み取り時にデータスキップインデックスを使用するかどうかを制御します。 - -有効にすると、クエリ実行開始前に事前解析されるのではなく、各データグラニュールが読み取られるタイミングでスキップインデックスが動的に評価されます。これにより、クエリ開始時のレイテンシを削減できる場合があります。 - -設定可能な値: - -- 0 — 無効。 -- 1 — 有効。 - -## use_statistics_cache {#use_statistics_cache} - - - - - - - -各パーツの統計情報を読み込む際のオーバーヘッドを避けるために、クエリで統計キャッシュを使用します - -## use_structure_from_insertion_table_in_table_functions {#use_structure_from_insertion_table_in_table_functions} - - - - - -データからスキーマを推論するのではなく、挿入先テーブルの構造を使用します。設定可能な値: 0 - 無効, 1 - 有効, 2 - 自動 - -## use_text_index_dictionary_cache {#use_text_index_dictionary_cache} - - - - - -デシリアライズされたテキストインデックス辞書ブロックのキャッシュを使用するかどうかを指定します。 -テキストインデックス辞書ブロックキャッシュを使用すると、大量のテキストインデックスクエリを処理する際のレイテンシを大幅に削減し、スループットを向上させることができます。 - -## use_text_index_header_cache {#use_text_index_header_cache} - - - - - -デシリアライズ済みテキストインデックスヘッダーのキャッシュを使用するかどうかを制御します。 -テキストインデックスヘッダーキャッシュを使用すると、多数のテキストインデックスクエリを処理する場合に、レイテンシーを大幅に削減し、スループットを向上させることができます。 - -## use_text_index_postings_cache {#use_text_index_postings_cache} - - - - - -逆シリアル化されたテキストインデックスのポスティングリストのキャッシュを使用するかどうかを指定します。 -このキャッシュを有効にすると、大量のテキストインデックスクエリを処理する際のレイテンシを大幅に削減し、スループットを向上させることができます。 - -## use_uncompressed_cache {#use_uncompressed_cache} - - - -非圧縮ブロックのキャッシュを使用するかどうかを指定します。0 または 1 を受け付けます。デフォルトは 0(無効)です。 -非圧縮キャッシュ(MergeTree ファミリーのテーブルでのみ有効)を使用すると、多数の短いクエリを処理する際のレイテンシを大幅に低減し、スループットを向上させることができます。頻繁に短いリクエストを送信するユーザー向けに、この設定を有効にしてください。また、[uncompressed_cache_size](/operations/server-configuration-parameters/settings#uncompressed_cache_size) 構成パラメータ(設定ファイルでのみ指定可能)にも注意してください。これは非圧縮キャッシュブロックのサイズを表し、デフォルトは 8 GiB です。非圧縮キャッシュは必要に応じて格納され、使用頻度の低いデータは自動的に削除されます。 - -ある程度以上のデータ量(100 万行以上)を読み取るクエリでは、小さなクエリのための領域を確保するために、非圧縮キャッシュは自動的に無効になります。したがって、`use_uncompressed_cache` 設定は常に 1 に設定したままにしておくことができます。 - -## use_variant_as_common_type - - - - - -引数型に共通の型が存在しない場合に、[if](../../sql-reference/functions/conditional-functions.md/#if)/[multiIf](../../sql-reference/functions/conditional-functions.md/#multiIf)/[array](../../sql-reference/functions/array-functions.md)/[map](../../sql-reference/functions/tuple-map-functions.md) 関数の結果型として `Variant` 型を使用できるようにします。 - -例: - -```sql -SET use_variant_as_common_type = 1; -SELECT toTypeName(if(number % 2, number, range(number))) as variant_type FROM numbers(1); -SELECT if(number % 2, number, range(number)) as variant FROM numbers(5); -``` - -```text -┌─variant_type───────────────────┐ -│ Variant(Array(UInt64), UInt64) │ -└────────────────────────────────┘ -┌─variant───┐ -│ [] │ -│ 1 │ -│ [0,1] │ -│ 3 │ -│ [0,1,2,3] │ -└───────────┘ -``` - -```sql -SET use_variant_as_common_type = 1; -SELECT toTypeName(multiIf((number % 4) = 0, 42, (number % 4) = 1, [1, 2, 3], (number % 4) = 2, 'Hello, World!', NULL)) AS variant_type FROM numbers(1); -SELECT multiIf((number % 4) = 0, 42, (number % 4) = 1, [1, 2, 3], (number % 4) = 2, 'Hello, World!', NULL) AS variant FROM numbers(4); -``` - -```text -─variant_type─────────────────────────┐ -│ Variant(Array(UInt8), String, UInt8) │ -└──────────────────────────────────────┘ - -┌─variant───────┐ -│ 42 │ -│ [1,2,3] │ -│ Hello, World! │ -│ ᴺᵁᴸᴸ │ -└───────────────┘ -``` - -```sql -SET use_variant_as_common_type = 1; -SELECT toTypeName(array(range(number), number, 'str_' || toString(number))) as array_of_variants_type from numbers(1); -SELECT array(range(number), number, 'str_' || toString(number)) as array_of_variants FROM numbers(3); -``` - -```text -┌─array_of_variants_type────────────────────────┐ -│ Array(Variant(Array(UInt64), String, UInt64)) │ -└───────────────────────────────────────────────┘ - -┌─array_of_variants─┐ -│ [[],0,'str_0'] │ -│ [[0],1,'str_1'] │ -│ [[0,1],2,'str_2'] │ -└───────────────────┘ -``` - -```sql -SET use_variant_as_common_type = 1; -SELECT toTypeName(map('a', range(number), 'b', number, 'c', 'str_' || toString(number))) as map_of_variants_type from numbers(1); -SELECT map('a', range(number), 'b', number, 'c', 'str_' || toString(number)) as map_of_variants FROM numbers(3); -``` - -```text -┌─map_of_variants_type────────────────────────────────┐ -│ Map(String, Variant(Array(UInt64), String, UInt64)) │ -└─────────────────────────────────────────────────────┘ - -┌─map_of_variants───────────────┐ -│ {'a':[],'b':0,'c':'str_0'} │ -│ {'a':[0],'b':1,'c':'str_1'} │ -│ {'a':[0,1],'b':2,'c':'str_2'} │ -└───────────────────────────────┘ -``` - - -## use_with_fill_by_sorting_prefix {#use_with_fill_by_sorting_prefix} - - - - - -ORDER BY 句において WITH FILL 列より前に指定された列は、ソートプレフィックスを構成します。ソートプレフィックスの値が異なる行は、それぞれ独立して補完されます - -## validate_enum_literals_in_operators {#validate_enum_literals_in_operators} - - - - - -有効にすると、`IN`、`NOT IN`、`==`、`!=` などの演算子で使用される列挙型リテラルを、その列挙型の定義に対して検証し、リテラルが有効な列挙値でない場合は例外を発生させます。 - -## validate_mutation_query {#validate_mutation_query} - - - - - -ミューテーションクエリを受け付ける前に検証します。ミューテーションはバックグラウンドで実行されるため、無効なクエリを実行するとミューテーションが停止したままになり、手動での対応が必要になります。 - -後方互換性のないバグに遭遇した場合にのみ、この設定を変更してください。 - -## validate_polygons {#validate_polygons} - - - - - -ポリゴンが自己交差または自己接触している場合に、[pointInPolygon](/sql-reference/functions/geo/coordinates#pointinpolygon) 関数で例外をスローするかどうかを有効または無効にします。 - -設定可能な値: - -- 0 — 例外のスローを無効にします。`pointInPolygon` は不正なポリゴンを受け付け、それらに対して誤った結果を返す可能性があります。 -- 1 — 例外のスローを有効にします。 - -## vector_search_filter_strategy {#vector_search_filter_strategy} - - - - - -ベクター検索クエリに `WHERE` 句が含まれる場合、この設定は、その `WHERE` 句を先に評価するか(プリフィルタリング)、あるいは先にベクター類似度インデックスを参照するか(ポストフィルタリング)を決定します。指定可能な値は次のとおりです。 - -- 'auto' - ポストフィルタリング(将来、厳密な意味は変更される可能性があります)。 -- 'postfilter' - まずベクター類似度インデックスを使用して最近傍を特定し、その後に他のフィルターを適用します。 -- 'prefilter' - まず他のフィルターを評価し、その後に総当たり検索で近傍を特定します。 - -## vector_search_index_fetch_multiplier {#vector_search_index_fetch_multiplier} - -**別名**: `vector_search_postfilter_multiplier` - - - - - -ベクトル類似度インデックスから取得する最近傍ベクトルの件数を、この値で乗算します。ほかの述語との組み合わせによる後段のフィルタ処理(post-filtering)時、または設定 'vector_search_with_rescoring = 1' の場合にのみ適用されます。 - -## vector_search_with_rescoring {#vector_search_with_rescoring} - - - - - -ClickHouse がベクトル類似度インデックスを使用するクエリに対してリスコアリングを実行するかどうかを制御します。 -リスコアリングを行わない場合、ベクトル類似度インデックスは最良のマッチを含む行だけを直接返します。 -リスコアリングを行う場合、行はグラニュール単位のレベルにまで拡張され、そのグラニュール内のすべての行が再度チェックされます。 -ほとんどの状況では、リスコアリングは精度の向上にはわずかにしか寄与せず、ベクトル検索クエリのパフォーマンスを大きく低下させます。 -注意: リスコアリングなし・並列レプリカ有効で実行されたクエリは、リスコアリングにフォールバックする場合があります。 - -## wait_changes_become_visible_after_commit_mode {#wait_changes_become_visible_after_commit_mode} - - - - - -コミット済みの変更が最新のスナップショットに実際に反映されて見えるようになるまで待機します - -## wait_for_async_insert {#wait_for_async_insert} - - - -true の場合、非同期挿入の処理が完了するまで待機します。 - -## wait_for_async_insert_timeout {#wait_for_async_insert_timeout} - - - -非同期挿入処理を待機する際のタイムアウト - -## wait_for_window_view_fire_signal_timeout {#wait_for_window_view_fire_signal_timeout} - - - - - -イベント時刻処理において、window view の発火シグナルを待機する際のタイムアウト - -## window_view_clean_interval {#window_view_clean_interval} - - - - - -ウィンドウビューで古いデータを削除するためのクリーン処理の実行間隔(秒単位)。 - -## window_view_heartbeat_interval {#window_view_heartbeat_interval} - - - - - -監視クエリが生存していることを示すためのハートビート間隔(秒単位)。 - -## workload {#workload} - - - -リソースにアクセスするために使用するワークロード名 - -## write_full_path_in_iceberg_metadata {#write_full_path_in_iceberg_metadata} - - - - - - - -Iceberg メタデータファイルに、フルパス(s3:// を含む)を書き込みます。 - -## write_through_distributed_cache {#write_through_distributed_cache} - - - - - - - -ClickHouse Cloud でのみ効果があります。分散キャッシュへの書き込みを許可します(S3 への書き込みも分散キャッシュ経由で行われます)。 - -## write_through_distributed_cache_buffer_size {#write_through_distributed_cache_buffer_size} - - - - - - - -ClickHouse Cloud でのみ効果があります。write-through 方式の distributed cache のバッファサイズを設定します。0 の場合、distributed cache がない場合に使用されるバッファサイズが使用されます。 - -## zstd_window_log_max {#zstd_window_log_max} - - - -ZSTD の最大ウィンドウログ値を選択できます(MergeTree ファミリーのテーブルでは使用されません)。 \ No newline at end of file +{/* 自動生成されたファイルのため、編集しないでください */ } diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/asynchronous_inserts.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/asynchronous_inserts.md index c510d412dc1..99f52d34efe 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/asynchronous_inserts.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/asynchronous_inserts.md @@ -1,6 +1,6 @@ --- -description: 'キュー内の保留中の非同期インサートに関する情報を含むシステムテーブル。' -keywords: ['system table', 'asynchronous_inserts'] +description: 'キュー内の保留中の非同期挿入に関する情報を保持するシステムテーブル。' +keywords: ['システムテーブル', 'asynchronous_inserts'] slug: /operations/system-tables/asynchronous_inserts title: 'system.asynchronous_inserts' doc_type: 'reference' @@ -10,26 +10,17 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -キューに入っている保留中の非同期挿入に関する情報を含みます。 +キュー内で保留中の非同期挿入に関する情報を保持します。 列: {/*AUTOGENERATED_START*/ } -* `query` ([String](../../sql-reference/data-types/)) — クエリテキスト。 -* `database` ([String](../../sql-reference/data-types/)) — データベース名。 -* `table` ([String](../../sql-reference/data-types/)) — テーブル名。 -* `format` ([String](../../sql-reference/data-types/)) — フォーマット名。 -* `first_update` ([DateTime64(6)](../../sql-reference/data-types/)) — マイクロ秒精度の最初の挿入時刻。 -* `total_bytes` ([UInt64](../../sql-reference/data-types/)) — キュー内で待機中の合計バイト数。 -* `entries.query_id` ([Array(String)](../../sql-reference/data-types/)) — キュー内で待機中の挿入クエリのクエリIDの配列。 -* `entries.bytes` ([Array(UInt64)](../../sql-reference/data-types/)) — キュー内で待機中の各挿入クエリのバイト数の配列。 - {/*AUTOGENERATED_END*/ } **例** -クエリ: +クエリ: ```sql SELECT * FROM system.asynchronous_inserts LIMIT 1 \G; @@ -38,7 +29,7 @@ SELECT * FROM system.asynchronous_inserts LIMIT 1 \G; 結果: ```text -Row 1: +行 1: ────── query: INSERT INTO public.data_guess (user_id, datasource_id, timestamp, path, type, num, str) FORMAT CSV database: public @@ -52,5 +43,5 @@ entries.bytes: [133223] **関連項目** -* [system.query_log](/operations/system-tables/query_log) — クエリ実行に関する共通情報を含む `query_log` システムテーブルの説明です。 -* [system.asynchronous_insert_log](/operations/system-tables/asynchronous_insert_log) — 実行された非同期 INSERT に関する情報を含むシステムテーブルです。 +* [system.query_log](/operations/system-tables/query_log) — クエリ実行に関する共通情報を含む `query_log` システムテーブルの説明。 +* [system.asynchronous_insert_log](/operations/system-tables/asynchronous_insert_log) — 実行された非同期インサートに関する情報を含むテーブル。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/asynchronous_loader.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/asynchronous_loader.md index a73027ec5ae..adbea086558 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/asynchronous_loader.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/asynchronous_loader.md @@ -1,6 +1,6 @@ --- -description: '最近の非同期ジョブ(例:読み込み中のテーブルなど)に関する情報およびステータスを含むシステムテーブルです。このテーブルには、ジョブごとに 1 行が格納されます。' -keywords: ['システムテーブル', 'asynchronous_loader'] +description: '最近の非同期ジョブ(例: 読み込み中のテーブルに対するジョブ)に関する情報と状態を含むシステムテーブル。このテーブルにはジョブごとに 1 行が格納されます。' +keywords: ['system テーブル', 'asynchronous_loader'] slug: /operations/system-tables/asynchronous_loader title: 'system.asynchronous_loader' doc_type: 'reference' @@ -13,7 +13,7 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -最近の非同期ジョブ(例: テーブルの読み込み)の情報およびステータスを含みます。テーブルには、各ジョブごとに 1 行が格納されます。このテーブルの情報を可視化するためのツールとして `utils/async_loader_graph` が用意されています。 +最近の非同期ジョブ(例: テーブルのロード)に関する情報およびステータスを含みます。このテーブルには、各ジョブごとに 1 行が格納されます。このテーブルの情報を可視化するためのツールとして `utils/async_loader_graph` が用意されています。 例: @@ -28,53 +28,38 @@ FORMAT Vertical {/*AUTOGENERATED_START*/ } -* `job` ([String](../../sql-reference/data-types/)) — ジョブ名(一意でない場合があります)。 -* `job_id` ([UInt64](../../sql-reference/data-types/)) — ジョブの一意の ID。 -* `dependencies` ([Array(UInt64)](../../sql-reference/data-types/)) — このジョブの前に完了している必要があるジョブ ID のリスト。 -* `dependencies_left` ([UInt64](../../sql-reference/data-types/)) — まだ完了していない依存関係の現在の数。 -* `status` ([Enum8('PENDING' = 0, 'OK' = 1, 'FAILED' = 2, 'CANCELED' = 3)](../../sql-reference/data-types/)) — ジョブの現在のロードステータス。PENDING: ロードジョブはまだ開始されていません。OK: ロードジョブは実行され、成功しました。FAILED: ロードジョブは実行されましたが失敗しました。CANCELED: 削除または依存関係の失敗により、ロードジョブは実行されません。 -* `is_executing` ([UInt8](../../sql-reference/data-types/)) — ジョブが現在ワーカーによって実行中であることを示します。 -* `is_blocked` ([UInt8](../../sql-reference/data-types/)) — ジョブが依存関係の完了を待機していることを示します。 -* `is_ready` ([UInt8](../../sql-reference/data-types/)) — ジョブが実行可能であり、ワーカーを待機していることを示します。 -* `elapsed` ([Float64](../../sql-reference/data-types/)) — 実行開始から経過した秒数。ジョブが開始されていない場合は 0。ジョブが終了している場合は合計実行時間。 -* `pool_id` ([UInt64](../../sql-reference/data-types/)) — 現在ジョブに割り当てられているプールの ID。 -* `pool` ([String](../../sql-reference/data-types/)) — `pool_id` プールの名前。 -* `priority` ([Int64](../../sql-reference/data-types/)) — `pool_id` プールの優先度。 -* `execution_pool_id` ([UInt64](../../sql-reference/data-types/)) — ジョブが実行されるプールの ID。実行開始前は、最初に割り当てられたプールと同じです。 -* `execution_pool` ([String](../../sql-reference/data-types/)) — `execution_pool_id` プールの名前。 -* `execution_priority` ([Int64](../../sql-reference/data-types/)) — `execution_pool_id` プールの優先度。 -* `ready_seqno` ([Nullable(UInt64)](../../sql-reference/data-types/)) — レディ状態のジョブでは null ではありません。ワーカーは、そのプールのレディキューから次に実行するジョブを取得します。複数のレディジョブがある場合は、`ready_seqno` の値が最も小さいジョブが選択されます。 -* `waiters` ([UInt64](../../sql-reference/data-types/)) — このジョブを待機しているスレッドの数。 -* `exception` ([Nullable(String)](../../sql-reference/data-types/)) — 失敗およびキャンセルされたジョブでは null ではありません。クエリ実行中に発生したエラーメッセージ、またはこのジョブのキャンセルにつながったエラーと、その依存関係の失敗に関するジョブ名のチェーンを保持します。 -* `schedule_time` ([DateTime64(6)](../../sql-reference/data-types/)) — ジョブが作成され、(通常はすべての依存関係とともに)実行予定としてスケジュールされた時刻。 -* `enqueue_time` ([Nullable(DateTime64(6))](../../sql-reference/data-types/)) — ジョブがレディ状態になり、そのプールのレディキューにエンキューされた時刻。ジョブがまだレディでない場合は null。 -* `start_time` ([Nullable(DateTime64(6))](../../sql-reference/data-types/)) — ワーカーがレディキューからジョブをデキューして実行を開始した時刻。ジョブがまだ開始されていない場合は null。 -* `finish_time` ([Nullable(DateTime64(6))](../../sql-reference/data-types/)) — ジョブの実行が終了した時刻。ジョブがまだ終了していない場合は null。 - {/*AUTOGENERATED_END*/ } -保留中のジョブは、次のいずれかの状態になります: +保留中のジョブは、次のいずれかの状態になっている可能性があります: + +* `is_executing` (`UInt8`) - ジョブが現在ワーカーによって実行中である。 +* `is_blocked` (`UInt8`) - ジョブが依存関係の完了を待機している。 +* `is_ready` (`UInt8`) - ジョブが実行可能な状態で、ワーカーを待機している。 +* `elapsed` (`Float64`) - 実行開始から経過した秒数。ジョブが開始されていなければ 0。ジョブが完了していれば合計実行時間。 + +すべてのジョブには関連付けられたプールがあり、そのプール内で開始されます。各プールには固定の優先度と、変更可能な最大ワーカー数があります。優先度が高い(`priority` 値が低い)ジョブが先に実行されます。少なくとも 1 つの高優先度ジョブが実行中または実行可能である間は、低優先度ジョブは開始されません。ジョブの優先度は(下げることはできませんが)引き上げることができ、ジョブを優先順位付けすることで行います。たとえば、あるテーブルのロードや起動に関するジョブは、そのテーブルを必要とするクエリが到着した場合に優先されます。ジョブの実行中に優先順位付けを行うことも可能ですが、その場合でもジョブは `execution_pool` から新たに割り当てられた `pool` へは移動しません。ジョブは優先度逆転を避けるために、新しいジョブを作成する際に `pool` を使用します。すでに開始されたジョブは、高優先度ジョブによってプリエンプトされることはなく、開始後は常に完了まで実行されます。 + +* `pool_id` (`UInt64`) - 現在そのジョブに割り当てられているプールの ID。 + +* `pool` (`String`) - `pool_id` のプール名。 + +* `priority` (`Int64`) - `pool_id` のプールの優先度。 + +* `execution_pool_id` (`UInt64`) - ジョブが実行されているプールの ID。実行開始前に最初に割り当てられたプールと同一。 + +* `execution_pool` (`String`) - `execution_pool_id` のプール名。 + +* `execution_priority` (`Int64`) - `execution_pool_id` のプールの優先度。 -* `is_executing` (`UInt8`) - ジョブは現在ワーカーによって実行されています。 -* `is_blocked` (`UInt8`) - ジョブは依存関係の完了を待っています。 -* `is_ready` (`UInt8`) - ジョブは実行可能な状態で、ワーカーを待っています。 -* `elapsed` (`Float64`) - 実行開始から経過した秒数。ジョブが開始されていない場合は 0。ジョブが終了している場合は合計実行時間です。 +* `ready_seqno` (`Nullable(UInt64)`) - 実行可能なジョブに対して非 Null。ワーカーは、そのプールの ready キューから次に実行するジョブを取得します。複数の実行可能ジョブがある場合、`ready_seqno` の値が最も小さいジョブが選択されます。 +* `waiters` (`UInt64`) - このジョブを待機しているスレッド数。 -すべてのジョブには関連付けられたプールがあり、そのプール内で開始されます。各プールには一定の優先度と可変のワーカー最大数があります。優先度が高い(`priority` の値が小さい)ジョブが先に実行されます。少なくとも 1 つの高優先度ジョブが実行可能または実行中である間は、低優先度のジョブは開始されません。ジョブの優先度は(引き下げることはできませんが)優先扱いとすることで引き上げることができます。たとえば、テーブルのロードや起動のためのジョブは、受信したクエリがそのテーブルを必要とした場合に優先扱いされます。ジョブの実行中に優先扱いすることも可能ですが、その場合でもジョブは `execution_pool` から新たに割り当てられた `pool` へ移動されません。ジョブは優先度逆転を避けるために、新しいジョブを作成する際には `pool` を使用します。すでに開始されたジョブは高優先度ジョブによってプリエンプトされず、開始後は常に完了まで実行されます。 -- `pool_id` (`UInt64`) - 現在ジョブに割り当てられているプールの ID。 -- `pool` (`String`) - `pool_id` のプール名。 -- `priority` (`Int64`) - `pool_id` のプールの優先度。 -- `execution_pool_id` (`UInt64`) - ジョブが実行されているプールの ID。実行開始前に最初に割り当てられたプールと同じ。 -- `execution_pool` (`String`) - `execution_pool_id` のプール名。 -- `execution_priority` (`Int64`) - `execution_pool_id` のプールの優先度。 +* `exception` (`Nullable(String)`) - 失敗またはキャンセルされたジョブに対して非 Null。クエリ実行中に発生したエラーメッセージ、またはこのジョブのキャンセルの原因となったエラーと、それに至る依存関係の失敗によるジョブ名のチェーンを保持します。 -- `ready_seqno` (`Nullable(UInt64)`) - 実行可能なジョブの場合に非 NULL。ワーカーは、自身のプールの実行待ちキューから次に実行するジョブを取得します。複数の実行可能ジョブがある場合、`ready_seqno` の値が最も小さいジョブが選択されます。 -- `waiters` (`UInt64`) - このジョブを待機しているスレッド数。 -- `exception` (`Nullable(String)`) - 失敗したジョブおよびキャンセルされたジョブの場合に非 NULL。クエリ実行中に発生したエラーメッセージ、またはこのジョブのキャンセルにつながったエラーと、その依存関係の失敗に関わるジョブ名のチェーンを保持します。 +ジョブのライフタイム中の時刻情報: -ジョブのライフタイム中の時刻: -- `schedule_time` (`DateTime64`) - ジョブが作成され、(通常はすべての依存関係とともに)実行予定としてスケジュールされた時刻。 -- `enqueue_time` (`Nullable(DateTime64)`) - ジョブが実行可能となり、そのプールの実行待ちキューに投入された時刻。ジョブがまだ実行可能でない場合は NULL。 -- `start_time` (`Nullable(DateTime64)`) - ワーカーが実行待ちキューからジョブを取り出して実行を開始した時刻。ジョブがまだ開始されていない場合は NULL。 -- `finish_time` (`Nullable(DateTime64)`) - ジョブの実行が完了した時刻。ジョブがまだ完了していない場合は NULL。 +* `schedule_time` (`DateTime64`) - ジョブが作成され、(通常はすべての依存関係とともに)実行するようスケジュールされた時刻。 +* `enqueue_time` (`Nullable(DateTime64)`) - ジョブが実行可能になり、そのプールの ready キューにエンキューされた時刻。ジョブがまだ実行可能でなければ Null。 +* `start_time` (`Nullable(DateTime64)`) - ワーカーが ready キューからジョブをデキューし、その実行を開始した時刻。ジョブがまだ開始されていなければ Null。 +* `finish_time` (`Nullable(DateTime64)`) - ジョブの実行が完了した時刻。ジョブがまだ完了していなければ Null。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/azure_queue_settings.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/azure_queue_settings.md index 1db3c138e52..a9231ae147f 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/azure_queue_settings.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/azure_queue_settings.md @@ -1,6 +1,6 @@ --- description: 'AzureQueue テーブルの設定に関する情報を含むシステムテーブル。 - サーバーバージョン `24.10` から利用可能。' + サーバーのバージョン `24.10` から利用可能。' keywords: ['system table', 'azure_queue_settings'] slug: /operations/system-tables/azure_queue_settings title: 'system.azure_queue_settings' @@ -8,19 +8,10 @@ doc_type: 'reference' --- [AzureQueue](../../engines/table-engines/integrations/azure-queue.md) テーブルの設定に関する情報を含みます。 -サーバーバージョン `24.10` から利用可能です。 +サーバーのバージョン `24.10` から利用可能です。 列: {/*AUTOGENERATED_START*/ } -* `database` ([String](../../sql-reference/data-types/)) — S3Queue Engine を持つテーブルが属するデータベース。 -* `table` ([String](../../sql-reference/data-types/)) — S3Queue Engine を持つテーブル名。 -* `name` ([String](../../sql-reference/data-types/)) — 設定名。 -* `value` ([String](../../sql-reference/data-types/)) — 設定値。 -* `type` ([String](../../sql-reference/data-types/)) — 設定の型(実装固有の文字列)。 -* `changed` ([UInt8](../../sql-reference/data-types/)) — 設定が設定ファイルで明示的に定義されたか、明示的に変更された場合は 1。 -* `description` ([String](../../sql-reference/data-types/)) — 設定の説明。 -* `alterable` ([UInt8](../../sql-reference/data-types/)) — 現在のユーザーが ALTER TABLE MODIFY SETTING を通じて設定を変更できるかどうかを示します: 0 — 現在のユーザーは設定を変更できます、1 — 現在のユーザーは設定を変更できません。 - {/*AUTOGENERATED_END*/ } diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/build_options.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/build_options.md index 4dadf166012..1a16333f483 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/build_options.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/build_options.md @@ -1,19 +1,16 @@ --- -description: 'ClickHouse サーバーのビルドオプションに関する情報を含む system テーブル。' +description: 'ClickHouse サーバーのビルドオプションに関する情報を保持する system テーブル。' slug: /operations/system-tables/build_options title: 'system.build_options' -keywords: ['system table', 'build_options'] +keywords: ['system テーブル', 'build_options'] doc_type: 'reference' --- -ClickHouse サーバーのビルドオプションに関する情報が含まれています。 +ClickHouse サーバーのビルドオプションに関する情報を保持します。 列: -{/*AUTOGENERGED_START*/ } - -* `name` ([String](../../sql-reference/data-types/)) — ビルドオプションの名前。 -* `value` ([String](../../sql-reference/data-types/)) — ビルドオプションの値。 +{/*AUTOGENERATED_START*/ } {/*AUTOGENERATED_END*/ } diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/clusters.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/clusters.md index 808e1936bc0..dee3ed325b4 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/clusters.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/clusters.md @@ -1,40 +1,17 @@ --- -description: '設定ファイルで利用可能なクラスタおよびそれらに定義されているサーバーに関する情報を含むシステムテーブル。' -keywords: ['システムテーブル', 'クラスタ'] +description: '設定ファイルで利用可能なクラスターと、それらで定義されているサーバーに関する情報を含むシステムテーブルです。' +keywords: ['system table', 'clusters'] slug: /operations/system-tables/clusters title: 'system.clusters' doc_type: 'reference' --- -設定ファイルで利用可能なクラスタと、それらに含まれるサーバーに関する情報を保持します。 +設定ファイルで利用可能なクラスターと、そのクラスター内のサーバーに関する情報を含みます。 列: {/*AUTOGENERATED_START*/ } -* `cluster` ([String](../../sql-reference/data-types/)) — クラスター名。 -* `shard_num` ([UInt32](../../sql-reference/data-types/)) — クラスター内のシャード番号。1 から始まる。 -* `shard_name` ([String](../../sql-reference/data-types/)) — クラスター内のシャード名。 -* `shard_weight` ([UInt32](../../sql-reference/data-types/)) — データ書き込み時におけるシャードの相対的な重み。 -* `internal_replication` ([UInt8](../../sql-reference/data-types/)) — このホストが、自身でデータをレプリケートできるアンサンブルの一部であるかどうかを示すフラグ。 -* `replica_num` ([UInt32](../../sql-reference/data-types/)) — シャード内のレプリカ番号。1 から始まる。 -* `host_name` ([String](../../sql-reference/data-types/)) — 設定で指定されたホスト名。 -* `host_address` ([String](../../sql-reference/data-types/)) — DNS から取得したホストの IP アドレス。 -* `port` ([UInt16](../../sql-reference/data-types/)) — サーバーへの接続に使用するポート。 -* `is_local` ([UInt8](../../sql-reference/data-types/)) — ホストがローカルかどうかを示すフラグ。 -* `user` ([String](../../sql-reference/data-types/)) — サーバーへの接続に使用するユーザー名。 -* `default_database` ([String](../../sql-reference/data-types/)) — デフォルトのデータベース名。 -* `errors_count` ([UInt32](../../sql-reference/data-types/)) — このホストがレプリカに到達できなかった回数。 -* `slowdowns_count` ([UInt32](../../sql-reference/data-types/)) — ヘッジ付きリクエストで接続を確立する際に、レプリカの切り替えを引き起こしたスローダウンの回数。 -* `estimated_recovery_time` ([UInt32](../../sql-reference/data-types/)) — レプリカのエラー数がリセットされ、正常と見なされるまでの残り秒数。 -* `database_shard_name` ([String](../../sql-reference/data-types/)) — `Replicated` データベースのシャード名(`Replicated` データベースに属するクラスターの場合)。 -* `database_replica_name` ([String](../../sql-reference/data-types/)) — `Replicated` データベースのレプリカ名(`Replicated` データベースに属するクラスターの場合)。 -* `is_shared_catalog_cluster` ([UInt8](../../sql-reference/data-types/)) — クラスターが共有カタログに属しているかどうかを示すブール値。 -* `is_active` ([Nullable(UInt8)](../../sql-reference/data-types/)) — Replicated データベースのレプリカのステータス(Replicated データベースに属するクラスターの場合)。1 は「replica is online」、0 は「replica is offline」、NULL は「unknown」を意味する。 -* `unsynced_after_recovery` ([Nullable(UInt8)](../../sql-reference/data-types/)) — Replicated データベースのレプリカが、作成または復旧後に max_replication_lag_to_enqueue を超えるレプリケーションラグを持っているかどうかを示す。 -* `replication_lag` ([Nullable(UInt32)](../../sql-reference/data-types/)) — Replicated データベースのレプリカのレプリケーションラグ(Replicated データベースに属するクラスターの場合)。 -* `recovery_time` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Replicated データベースのレプリカの復旧時間(Replicated データベースに属するクラスターの場合)。ミリ秒単位。 - {/*AUTOGENERATED_END*/ } **例** @@ -67,34 +44,30 @@ estimated_recovery_time: 0 database_shard_name: database_replica_name: is_active: NULL -``` - Row 2: ────── -cluster: test_cluster_two_shards -shard_num: 2 -shard_name: shard_02 -shard_weight: 1 -replica_num: 1 -host_name: 127.0.0.2 -host_address: 127.0.0.2 +cluster: test_cluster_two_shards +shard_num: 2 +shard_name: shard_02 +shard_weight: 1 +replica_num: 1 +host_name: 127.0.0.2 +host_address: 127.0.0.2 port: 9000 -is_local: 0 +is_local: 0 user: default -default_database: -errors_count: 0 -slowdowns_count: 0 -estimated_recovery_time: 0 -database_shard_name: -database_replica_name: -is_active: NULL - +default_database: +errors_count: 0 +slowdowns_count: 0 +estimated_recovery_time: 0 +database_shard_name: +database_replica_name: +is_active: NULL ``` **関連項目** -- [Distributedテーブルエンジン](../../engines/table-engines/special/distributed.md) -- [distributed_replica_error_cap設定](../../operations/settings/settings.md#distributed_replica_error_cap) -- [distributed_replica_error_half_life設定](../../operations/settings/settings.md#distributed_replica_error_half_life) -``` +* [Distributed テーブルエンジン](../../engines/table-engines/special/distributed.md) +* [distributed_replica_error_cap 設定](../../operations/settings/settings.md#distributed_replica_error_cap) +* [distributed_replica_error_half_life 設定](../../operations/settings/settings.md#distributed_replica_error_half_life) diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/codecs.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/codecs.md index cf065422cae..add873509a8 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/codecs.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/codecs.md @@ -1,28 +1,19 @@ --- -description: 'キュー内のコーデックに関する情報を含むシステムテーブル' -keywords: ['system table', 'codecs', 'compression'] +description: 'キュー内のコーデックに関する情報を含むシステムテーブル。' +keywords: ['system table', 'コーデック', '圧縮'] slug: /operations/system-tables/codecs title: 'system.codecs' doc_type: 'reference' --- -圧縮および暗号化コーデックに関する情報を保持します。 +圧縮および暗号化コーデックに関する情報を保持しています。 このテーブルを使用して、利用可能な圧縮および暗号化コーデックに関する情報を取得できます。 -`system.codecs` テーブルには、次の列が含まれます(括弧内は列の型です)。 +`system.codecs` テーブルには次の列が含まれます(括弧内は列のデータ型を示します)。 {/*AUTOGENERATED_START*/ } -* `name` ([String](../../sql-reference/data-types/)) — コーデック名。 -* `method_byte` ([UInt8](../../sql-reference/data-types/)) — 圧縮ファイル内でコーデックを示すバイト値。 -* `is_compression` ([UInt8](../../sql-reference/data-types/)) — このコーデックがデータを圧縮する場合は true。それ以外の場合は、圧縮を補助するための単なる変換である場合があります。 -* `is_generic_compression` ([UInt8](../../sql-reference/data-types/)) — コーデックが lz4、zstd のような汎用圧縮アルゴリズムであることを示します。 -* `is_encryption` ([UInt8](../../sql-reference/data-types/)) — コーデックが暗号化を行うことを示します。 -* `is_timeseries_codec` ([UInt8](../../sql-reference/data-types/)) — コーデックが浮動小数点タイムシリーズ用コーデックであることを示します。 -* `is_experimental` ([UInt8](../../sql-reference/data-types/)) — コーデックが実験的であることを示します。 -* `description` ([String](../../sql-reference/data-types/)) — コーデックの概要。 - {/*AUTOGENERATED_END*/ } **例** @@ -33,7 +24,7 @@ doc_type: 'reference' SELECT * FROM system.codecs WHERE name='LZ4' ``` -結果: +結果: ```text Row 1: @@ -45,5 +36,5 @@ is_generic_compression: 1 is_encryption: 0 is_timeseries_codec: 0 is_experimental: 0 -description: 極めて高速、優れた圧縮率、速度と効率のバランスが良い。 +description: 極めて高速、優れた圧縮率、速度と効率のバランスが良好。 ``` diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/columns.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/columns.md index bfc725873c1..e0a855162ab 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/columns.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/columns.md @@ -6,40 +6,16 @@ title: 'system.columns' doc_type: 'reference' --- -すべてのテーブル内のカラムに関する情報を含むシステムテーブルです。 +すべてのテーブル内のカラムに関する情報を格納しています。 -このテーブルを使用すると、[DESCRIBE TABLE](../../sql-reference/statements/describe-table.md) クエリと同様の情報を、複数のテーブルに対して一度に取得できます。 +このテーブルを使用すると、複数のテーブルに対してまとめて、[DESCRIBE TABLE](../../sql-reference/statements/describe-table.md) クエリと同様の情報を取得できます。 -[一時テーブル](../../sql-reference/statements/create/table.md#temporary-tables) のカラムは、それらが作成されたセッション内でのみ `system.columns` に表示されます。これらは `database` フィールドが空の状態で表示されます。 +[一時テーブル](../../sql-reference/statements/create/table.md#temporary-tables) のカラムは、それらが作成されたセッションでのみ `system.columns` に表示されます。これらは空の `database` フィールドで表示されます。 -`system.columns` テーブルには次のカラムが含まれます(カラムの型は括弧内に示します)。 +`system.columns` テーブルには、次のカラムが含まれます(カラム型は括弧内に示します): {/*AUTOGENERATED_START*/ } -* `database` ([String](../../sql-reference/data-types/)) — データベース名。 -* `table` ([String](../../sql-reference/data-types/)) — テーブル名。 -* `name` ([String](../../sql-reference/data-types/)) — カラム名。 -* `type` ([String](../../sql-reference/data-types/)) — カラムの型。 -* `position` ([UInt64](../../sql-reference/data-types/)) — テーブル内でのカラムの序数位置。1 から始まる。 -* `default_kind` ([String](../../sql-reference/data-types/)) — デフォルト値の式の種類 (DEFAULT, MATERIALIZED, ALIAS)。定義されていない場合は空文字列。 -* `default_expression` ([String](../../sql-reference/data-types/)) — デフォルト値の式。定義されていない場合は空文字列。 -* `data_compressed_bytes` ([UInt64](../../sql-reference/data-types/)) — 圧縮データのサイズ (バイト数)。 -* `data_uncompressed_bytes` ([UInt64](../../sql-reference/data-types/)) — 非圧縮データのサイズ (バイト数)。 -* `marks_bytes` ([UInt64](../../sql-reference/data-types/)) — マークのサイズ (バイト数)。 -* `comment` ([String](../../sql-reference/data-types/)) — カラムに対するコメント。定義されていない場合は空文字列。 -* `is_in_partition_key` ([UInt8](../../sql-reference/data-types/)) — カラムがパーティション式に含まれているかどうかを示すフラグ。 -* `is_in_sorting_key` ([UInt8](../../sql-reference/data-types/)) — カラムがソートキー式に含まれているかどうかを示すフラグ。 -* `is_in_primary_key` ([UInt8](../../sql-reference/data-types/)) — カラムがプライマリキー式に含まれているかどうかを示すフラグ。 -* `is_in_sampling_key` ([UInt8](../../sql-reference/data-types/)) — カラムがサンプリングキー式に含まれているかどうかを示すフラグ。 -* `compression_codec` ([String](../../sql-reference/data-types/)) — 圧縮コーデック名。 -* `character_octet_length` ([Nullable(UInt64)](../../sql-reference/data-types/)) — バイナリデータ、文字データ、テキストデータ、および画像データの最大バイト長。ClickHouse では `FixedString` データ型に対してのみ意味を持ち、それ以外の場合は NULL が返される。 -* `numeric_precision` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 近似数値データ、正確な数値データ、整数データ、または金額データの精度。ClickHouse では整数型に対してはビット幅、`Decimal` 型に対しては小数精度を表す。それ以外の場合は NULL が返される。 -* `numeric_precision_radix` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 近似数値データ、正確な数値データ、整数データ、または金額データの精度に対する数値体系の基数。ClickHouse では整数型に対しては 2、`Decimal` 型に対しては 10。それ以外の場合は NULL が返される。 -* `numeric_scale` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 近似数値データ、正確な数値データ、整数データ、または金額データのスケール。ClickHouse では `Decimal` 型に対してのみ意味を持ち、それ以外の場合は NULL が返される。 -* `datetime_precision` ([Nullable(UInt64)](../../sql-reference/data-types/)) — `DateTime64` データ型の小数精度。他のデータ型の場合は NULL が返される。 -* `serialization_hint` ([Nullable(String)](../../sql-reference/data-types/)) — 統計に基づいて挿入時のシリアル化方法を選択するための、カラムに対するヒント。 -* `statistics` ([String](../../sql-reference/data-types/)) — このカラムで作成された統計情報の種類。 - {/*AUTOGENERATED_END*/ } **例** @@ -48,53 +24,52 @@ doc_type: 'reference' SELECT * FROM system.columns LIMIT 2 FORMAT Vertical; ``` - ```text -行 1: +Row 1: ────── -データベース: INFORMATION_SCHEMA -テーブル: COLUMNS -名前: table_catalog -型: String -位置: 1 -デフォルト種別: -デフォルト式: -圧縮後データバイト数: 0 -非圧縮データバイト数: 0 -マークバイト数: 0 -コメント: -パーティションキーに含まれるか: 0 -ソートキーに含まれるか: 0 -主キーに含まれるか: 0 -サンプリングキーに含まれるか: 0 -圧縮コーデック: -文字オクテット長: ᴺᵁᴸᴸ -数値精度: ᴺᵁᴸᴸ -数値精度の基数: ᴺᵁᴸᴸ -数値スケール: ᴺᵁᴸᴸ -日時精度: ᴺᵁᴸᴸ +database: INFORMATION_SCHEMA +table: COLUMNS +name: table_catalog +type: String +position: 1 +default_kind: +default_expression: +data_compressed_bytes: 0 +data_uncompressed_bytes: 0 +marks_bytes: 0 +comment: +is_in_partition_key: 0 +is_in_sorting_key: 0 +is_in_primary_key: 0 +is_in_sampling_key: 0 +compression_codec: +character_octet_length: ᴺᵁᴸᴸ +numeric_precision: ᴺᵁᴸᴸ +numeric_precision_radix: ᴺᵁᴸᴸ +numeric_scale: ᴺᵁᴸᴸ +datetime_precision: ᴺᵁᴸᴸ -行 2: +Row 2: ────── -データベース: INFORMATION_SCHEMA -テーブル: COLUMNS -名前: table_schema -型: String -位置: 2 -デフォルト種別: -デフォルト式: -圧縮後データバイト数: 0 -非圧縮データバイト数: 0 -マークバイト数: 0 -コメント: -パーティションキーに含まれるか: 0 -ソートキーに含まれるか: 0 -主キーに含まれるか: 0 -サンプリングキーに含まれるか: 0 -圧縮コーデック: -文字オクテット長: ᴺᵁᴸᴸ -数値精度: ᴺᵁᴸᴸ -数値精度の基数: ᴺᵁᴸᴸ -数値スケール: ᴺᵁᴸᴸ -日時精度: ᴺᵁᴸᴸ +database: INFORMATION_SCHEMA +table: COLUMNS +name: table_schema +type: String +position: 2 +default_kind: +default_expression: +data_compressed_bytes: 0 +data_uncompressed_bytes: 0 +marks_bytes: 0 +comment: +is_in_partition_key: 0 +is_in_sorting_key: 0 +is_in_primary_key: 0 +is_in_sampling_key: 0 +compression_codec: +character_octet_length: ᴺᵁᴸᴸ +numeric_precision: ᴺᵁᴸᴸ +numeric_precision_radix: ᴺᵁᴸᴸ +numeric_scale: ᴺᵁᴸᴸ +datetime_precision: ᴺᵁᴸᴸ ``` diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/contributors.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/contributors.md index ca8d43cca5c..3b2f57b0e65 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/contributors.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/contributors.md @@ -1,19 +1,17 @@ --- -description: 'コントリビューターに関する情報を含むシステムテーブルです。' +description: '貢献者に関する情報を格納するシステムテーブル。' keywords: ['system table', 'contributors'] slug: /operations/system-tables/contributors title: 'system.contributors' doc_type: 'reference' --- -コントリビューターに関する情報を含みます。クエリ実行時の並び順はランダムです。 +貢献者に関する情報を格納します。クエリ実行時の並び順はランダムです。 列: {/*AUTOGENERATED_START*/ } -* `name` ([String](../../sql-reference/data-types/)) — Git ログから取得したコントリビューター(著者)名。 - {/*AUTOGENERATED_END*/ } **例** @@ -37,7 +35,7 @@ SELECT * FROM system.contributors LIMIT 10 └──────────────────┘ ``` -テーブル内で自分のレコードを確認するには、次のクエリを実行します: +テーブル内から自分に該当するレコードを探すには、次のクエリを実行します。 ```sql SELECT * FROM system.contributors WHERE name = 'Olga Khvostikova' diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/dashboards.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/dashboards.md index be4220c3725..9945993595a 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/dashboards.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/dashboards.md @@ -6,12 +6,12 @@ title: 'system.dashboards' doc_type: 'reference' --- -`/dashboard` ページで使用されるクエリを含むテーブルであり、[HTTP インターフェイス](/interfaces/http.md) 経由でアクセスできます。 -このテーブルは、監視やトラブルシューティングに役立ちます。テーブルには、ダッシュボード内の各チャートごとに 1 行が格納されます。 +`/dashboard` ページで使用されるクエリを含むテーブルで、[HTTP インターフェイス](/interfaces/http.md) 経由でアクセスできます。 +このテーブルは監視およびトラブルシューティングに役立ちます。テーブルには、ダッシュボード内の各チャートごとに 1 行が含まれます。 :::note -`/dashboard` ページは、`system.dashboards` だけでなく、同じスキーマを持つ任意のテーブルからのクエリも表示できます。 -これにより、カスタムダッシュボードの作成に利用できます。 +`/dashboard` ページは `system.dashboards` だけでなく、同じスキーマを持つ任意のテーブルに含まれるクエリも表示できます。 +これはカスタムダッシュボードを作成する際に役立ちます。 ::: 例: @@ -64,12 +64,8 @@ GROUP BY t ORDER BY t WITH FILL STEP {rounding:UInt32} ``` -列: +列: {/*AUTOGENERATED_START*/ } -* `dashboard` ([String](../../sql-reference/data-types/)) — ダッシュボード名。 -* `title` ([String](../../sql-reference/data-types/)) — チャートのタイトル。 -* `query` ([String](../../sql-reference/data-types/)) — 表示用のデータを取得するクエリ。 - {/*AUTOGENERATED_END*/ } diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/data_skipping_indices.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/data_skipping_indices.md index 39d026928cb..825453e8058 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/data_skipping_indices.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/data_skipping_indices.md @@ -1,5 +1,5 @@ --- -description: 'すべてのテーブルに存在するデータスキップインデックスに関する情報を含むシステムテーブルです。' +description: 'すべてのテーブルに存在するデータスキップインデックスに関する情報を含むシステムテーブル。' keywords: ['system table', 'data_skipping_indices'] slug: /operations/system-tables/data_skipping_indices title: 'system.data_skipping_indices' @@ -12,17 +12,6 @@ doc_type: 'reference' {/*AUTOGENERATED_START*/ } -* `database` ([String](../../sql-reference/data-types/)) — データベース名。 -* `table` ([String](../../sql-reference/data-types/)) — テーブル名。 -* `name` ([String](../../sql-reference/data-types/)) — インデックス名。 -* `type` ([String](../../sql-reference/data-types/)) — インデックスの種類。 -* `type_full` ([String](../../sql-reference/data-types/)) — CREATE 文に記述されたインデックス種類の式。 -* `expr` ([String](../../sql-reference/data-types/)) — インデックス計算用の式。 -* `granularity` ([UInt64](../../sql-reference/data-types/)) — ブロック内のグラニュール数。 -* `data_compressed_bytes` ([UInt64](../../sql-reference/data-types/)) — 圧縮データのサイズ(バイト単位)。 -* `data_uncompressed_bytes` ([UInt64](../../sql-reference/data-types/)) — 非圧縮データのサイズ(バイト単位)。 -* `marks_bytes` ([UInt64](../../sql-reference/data-types/)) — マークのサイズ(バイト単位)。 - {/*AUTOGENERATED_END*/ } **例** diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/data_type_families.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/data_type_families.md index 377d253ba5f..524767414cd 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/data_type_families.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/data_type_families.md @@ -1,21 +1,17 @@ --- -description: 'サポートされているデータ型に関する情報を含むシステムテーブル' +description: 'サポートされているデータ型に関する情報を保持するシステムテーブル' keywords: ['system table', 'data_type_families'] slug: /operations/system-tables/data_type_families title: 'system.data_type_families' doc_type: 'reference' --- -サポートされている[データ型](../../sql-reference/data-types/index.md)に関する情報を含むシステムテーブルです。 +サポートされている[データ型](../../sql-reference/data-types/index.md)に関する情報を保持しています。 -列: +列: {/*AUTOGENERATED_START*/ } -* `name` ([String](../../sql-reference/data-types/)) — データ型名。 -* `case_insensitive` ([UInt8](../../sql-reference/data-types/)) — クエリ内でデータ型名を大文字・小文字を区別せずに使用できるかどうかを示すプロパティ。たとえば、`Date` と `date` はどちらも有効です。 -* `alias_to` ([String](../../sql-reference/data-types/)) — `name` がエイリアスであるデータ型名。 - {/*AUTOGENERATED_END*/ } **例** @@ -41,4 +37,4 @@ SELECT * FROM system.data_type_families WHERE alias_to = 'String' **関連項目** -* [Syntax](../../sql-reference/syntax.md) — サポートされている構文についての情報。 +* [Syntax](../../sql-reference/syntax.md) — サポートされている構文に関する情報。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/database_engines.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/database_engines.md index 8f90b2efa97..438cfedc823 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/database_engines.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/database_engines.md @@ -1,19 +1,17 @@ --- -description: 'サーバーがサポートしているデータベースエンジンの一覧を含むシステムテーブル。' +description: 'サーバーでサポートされているデータベースエンジンの一覧を保持するシステムテーブル。' keywords: ['system table', 'database_engines'] slug: /operations/system-tables/database_engines title: 'system.database_engines' doc_type: 'reference' --- -このシステムテーブルには、サーバーがサポートしているデータベースエンジンの一覧が含まれます。 +サーバーでサポートされているデータベースエンジンの一覧を保持します。 -このテーブルには次の列が含まれます(括弧内は列の型を示します)。 +このテーブルには次の列が含まれます(列の型は括弧内に示します)。 {/*AUTOGENERATED_START*/ } -* `name` ([String](../../sql-reference/data-types/)) — データベースエンジン名。 - {/*AUTOGENERATED_END*/ } 例: @@ -26,8 +24,8 @@ WHERE name IN ('Atomic', 'Lazy', 'Ordinary') ```text ┌─name─────┐ -│ 通常 │ -│ アトミック │ -│ 遅延 │ +│ Ordinary │ +│ Atomic │ +│ Lazy │ └──────────┘ ``` diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/database_replicas.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/database_replicas.md index aba94038693..710f954e66b 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/database_replicas.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/database_replicas.md @@ -1,29 +1,17 @@ --- -description: 'レプリケーテッドデータベースの情報および状態を含むシステムテーブル。' +description: 'レプリケーテッドデータベースのレプリカに関する情報およびステータスを格納するシステムテーブル。' keywords: ['system table', 'database_replicas'] slug: /operations/system-tables/database_replicas title: 'system.database_replicas' doc_type: 'reference' --- -各 Replicated データベースのレプリカに関する情報を含みます。 +各 Replicated データベースのレプリカに関する情報およびステータスを保持します。 列: {/*AUTOGENERATED_START*/ } -* `database` ([String](../../sql-reference/data-types/)) — Replicated データベースの名前。 -* `is_readonly` ([UInt8](../../sql-reference/data-types/)) — データベースレプリカが読み取り専用モードかどうか。 -* `max_log_ptr` ([Int32](../../sql-reference/data-types/)) — 全体アクティビティログ内の最大エントリ番号。 -* `replica_name` ([String](../../sql-reference/data-types/)) — ClickHouse Keeper におけるレプリカ名。 -* `replica_path` ([String](../../sql-reference/data-types/)) — ClickHouse Keeper におけるレプリカデータへのパス。 -* `zookeeper_path` ([String](../../sql-reference/data-types/)) — ClickHouse Keeper におけるデータベースデータへのパス。 -* `shard_name` ([String](../../sql-reference/data-types/)) — クラスタ内のシャード名。 -* `log_ptr` ([Int32](../../sql-reference/data-types/)) — レプリカが実行キューにコピーした全体アクティビティログ内の最大エントリ番号に 1 を足した値。 -* `total_replicas` ([UInt32](../../sql-reference/data-types/)) — このデータベースの既知のレプリカ数の合計。 -* `zookeeper_exception` ([String](../../sql-reference/data-types/)) — ClickHouse Keeper から情報を取得する際にエラーが発生した場合に取得された、直近の例外メッセージ。 -* `is_session_expired` ([UInt8](../../sql-reference/data-types/)) — ClickHouse Keeper とのセッションが期限切れになっているかどうか。基本的には `is_readonly` と同義。 - {/*AUTOGENERATED_END*/ } **例** @@ -33,7 +21,7 @@ SELECT * FROM system.database_replicas FORMAT Vertical; ``` ```text -行 1: +Row 1: ────── database: db_2 is_readonly: 0 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/databases.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/databases.md index 596a26cfe20..ada1e584d1d 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/databases.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/databases.md @@ -1,25 +1,16 @@ --- -description: '現在のユーザーがアクセス可能なデータベースに関する情報を含むシステムテーブル。' +description: '現在のユーザーが利用可能なデータベースに関する情報を格納するシステムテーブル。' keywords: ['system table', 'databases'] slug: /operations/system-tables/databases title: 'system.databases' doc_type: 'reference' --- -現在のユーザーがアクセス可能なデータベースに関する情報を含みます。 +現在のユーザーが利用可能なデータベースに関する情報を格納します。 列: -{/*AUTOGENERGED_START*/ } - -* `name` ([String](../../sql-reference/data-types/)) — データベース名。 -* `engine` ([String](../../sql-reference/data-types/)) — データベースエンジン。 -* `data_path` ([String](../../sql-reference/data-types/)) — データパス。 -* `metadata_path` ([String](../../sql-reference/data-types/)) — メタデータパス。 -* `uuid` ([UUID](../../sql-reference/data-types/)) — データベースの UUID。 -* `engine_full` ([String](../../sql-reference/data-types/)) — データベースエンジンのパラメータ。 -* `comment` ([String](../../sql-reference/data-types/)) — データベースに対するコメント。 -* `is_external` ([UInt8](../../sql-reference/data-types/)) — 外部データベースかどうか(例: PostgreSQL/DataLakeCatalog)。 +{/*AUTOGENERATED_START*/ } {/*AUTOGENERATED_END*/ } @@ -27,13 +18,13 @@ doc_type: 'reference' **例** -データベースを作成します。 +データベースを作成する。 ```sql CREATE DATABASE test; ``` -ユーザーが利用可能なすべてのデータベースを確認します。 +ユーザーが利用可能なすべてのデータベースを確認する。 ```sql SELECT * FROM system.databases; diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/detached_tables.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/detached_tables.md index 1626ac75ea5..1da6b580b3d 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/detached_tables.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/detached_tables.md @@ -1,23 +1,17 @@ --- -description: 'デタッチされた各テーブルに関する情報を保持するシステムテーブル。' +description: '切り離された各テーブルに関する情報を含むシステムテーブル。' keywords: ['system table', 'detached_tables'] slug: /operations/system-tables/detached_tables title: 'system.detached_tables' doc_type: 'reference' --- -デタッチされた各テーブルに関する情報を保持します。 +切り離された各テーブルに関する情報を含むシステムテーブルです。 列: {/*AUTOGENERATED_START*/ } -* `database` ([String](../../sql-reference/data-types/)) — テーブルが属しているデータベース名。 -* `table` ([String](../../sql-reference/data-types/)) — テーブル名。 -* `uuid` ([UUID](../../sql-reference/data-types/)) — Atomic データベースにおけるテーブルの UUID。 -* `metadata_path` ([String](../../sql-reference/data-types/)) — ファイルシステム内のテーブルメタデータへのパス。 -* `is_permanently` ([UInt8](../../sql-reference/data-types/)) — テーブルが完全にデタッチされているかどうか。 - {/*AUTOGENERATED_END*/ } **例** diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/dictionaries.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/dictionaries.md index 5812acba5a6..de676b8f7d6 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/dictionaries.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/dictionaries.md @@ -10,55 +10,17 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -[辞書](../../sql-reference/dictionaries/index.md) に関する情報が含まれます。 - -列: +[辞書](../../sql-reference/dictionaries/index.md)に関する情報を含みます。 +列: {/*AUTOGENERATED_START*/ } -* `database` ([String](../../sql-reference/data-types/)) — DDL クエリによって作成された辞書を含むデータベース名。その他の辞書の場合は空文字列。 -* `name` ([String](../../sql-reference/data-types/)) — 辞書名。 -* `uuid` ([UUID](../../sql-reference/data-types/)) — 辞書の UUID。 -* `status` ([Enum8('NOT_LOADED' = 0, 'LOADED' = 1, 'FAILED' = 2, 'LOADING' = 3, 'FAILED_AND_RELOADING' = 4, 'LOADED_AND_RELOADING' = 5, 'NOT_EXIST' = 6)](../../sql-reference/data-types/)) — 辞書のステータス。取りうる値: - * **NOT_LOADED** — 使用されていないため、辞書はロードされていない - * **LOADED** — 辞書が正常にロードされた - * **FAILED** — エラーにより辞書をロードできなかった - * **LOADING** — 現在辞書をロード中 - * **LOADED_AND_RELOADING** — 辞書は正常にロードされており、現在再ロード中(よくある理由: SYSTEM RELOAD DICTIONARY クエリ、タイムアウト、辞書設定の変更) - * **and is being reloaded right now (frequent reasons: SYSTEM RELOAD DICTIONARY query** — - * **timeout** — - * **dictionary config has changed)** — - * **FAILED_AND_RELOADING** — エラーにより辞書をロードできず、現在再ロード中。 -* `origin` ([String](../../sql-reference/data-types/)) — 辞書を定義する設定ファイルへのパス。 -* `type` ([String](../../sql-reference/data-types/)) — 辞書の割り当て方式の種類。メモリ内に辞書を格納する方式。 -* `key.names` ([Array(String)](../../sql-reference/data-types/)) — 辞書によって提供されるキー名の配列。 -* `key.types` ([Array(String)](../../sql-reference/data-types/)) — 辞書によって提供されるキー型の対応する配列。 -* `attribute.names` ([Array(String)](../../sql-reference/data-types/)) — 辞書によって提供される属性名の配列。 -* `attribute.types` ([Array(String)](../../sql-reference/data-types/)) — 辞書によって提供される属性型の対応する配列。 -* `bytes_allocated` ([UInt64](../../sql-reference/data-types/)) — 辞書に割り当てられた RAM の量。 -* `hierarchical_index_bytes_allocated` ([UInt64](../../sql-reference/data-types/)) — 階層インデックスに割り当てられた RAM の量。 -* `query_count` ([UInt64](../../sql-reference/data-types/)) — 辞書がロードされてから、または直近の正常な再ロード以降のクエリ数。 -* `hit_rate` ([Float64](../../sql-reference/data-types/)) — キャッシュ辞書について、値がキャッシュ内に存在した参照の割合(パーセンテージ)。 -* `found_rate` ([Float64](../../sql-reference/data-types/)) — 値が見つかった参照の割合(パーセンテージ)。 -* `element_count` ([UInt64](../../sql-reference/data-types/)) — 辞書に保存されている項目数。 -* `load_factor` ([Float64](../../sql-reference/data-types/)) — 辞書の使用率(ハッシュ辞書の場合はハッシュテーブルの使用率/ロードファクタ)。 -* `source` ([String](../../sql-reference/data-types/)) — 辞書のデータソースを記述するテキスト。 -* `lifetime_min` ([UInt64](../../sql-reference/data-types/)) — メモリ内での辞書の最小存続時間。この時間経過後、ClickHouse は辞書の再ロードを試みる(`invalidate_query` が設定されている場合は、その内容が変更されたときのみ)。秒単位で指定。 -* `lifetime_max` ([UInt64](../../sql-reference/data-types/)) — メモリ内での辞書の最大存続時間。この時間経過後、ClickHouse は辞書の再ロードを試みる(`invalidate_query` が設定されている場合は、その内容が変更されたときのみ)。秒単位で指定。 -* `loading_start_time` ([DateTime](../../sql-reference/data-types/)) — 辞書のロード開始時刻。 -* `last_successful_update_time` ([DateTime](../../sql-reference/data-types/)) — 辞書のロードまたは更新の終了時刻。辞書ソースに関する問題を監視し、原因を調査するのに役立つ。 -* `error_count` ([UInt64](../../sql-reference/data-types/)) — 直近の正常なロード以降のエラー数。辞書ソースに関する問題を監視し、原因を調査するのに役立つ。 -* `loading_duration` ([Float32](../../sql-reference/data-types/)) — 辞書のロードに要した時間。 -* `last_exception` ([String](../../sql-reference/data-types/)) — 辞書の作成または再ロード時に、辞書を作成できなかった場合に発生したエラーの内容。 -* `comment` ([String](../../sql-reference/data-types/)) — 辞書に対するコメントの内容。 - {/*AUTOGENERATED_END*/ } **例** -辞書を設定します。 - +辞書を設定します: ```sql CREATE DICTIONARY dictionary_with_comment @@ -70,7 +32,7 @@ PRIMARY KEY id SOURCE(CLICKHOUSE(HOST 'localhost' PORT tcpPort() TABLE 'source_table')) LAYOUT(FLAT()) LIFETIME(MIN 0 MAX 1000) -COMMENT '一時的な辞書'; +COMMENT '一時ディクショナリ'; ``` 辞書が読み込まれていることを確認してください。 @@ -80,7 +42,7 @@ SELECT * FROM system.dictionaries LIMIT 1 FORMAT Vertical; ``` ```text -1 行目: +Row 1: ────── database: default name: dictionary_with_comment diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/disks.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/disks.md index 4ad1b16347d..127bf8d8345 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/disks.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/disks.md @@ -1,37 +1,21 @@ --- -description: 'サーバー構成で定義されているディスクに関する情報を含むシステムテーブル' -keywords: ['system table', 'ディスク'] +description: 'サーバーの設定で定義されたディスクに関する情報を保持するシステムテーブル' +keywords: ['システムテーブル', 'ディスク'] slug: /operations/system-tables/disks title: 'system.disks' -doc_type: 'reference' +doc_type: 'リファレンス' --- import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -[サーバー設定](../../engines/table-engines/mergetree-family/mergetree.md#table_engine-mergetree-multiple-volumes_configure)で定義されたディスクに関する情報を保持します。 +[サーバー構成](../../engines/table-engines/mergetree-family/mergetree.md#table_engine-mergetree-multiple-volumes_configure)で定義されたディスクに関する情報が格納されています。 列: {/*AUTOGENERATED_START*/ } -* `name` ([String](../../sql-reference/data-types/)) — サーバー設定内でのディスク名。 -* `path` ([String](../../sql-reference/data-types/)) — ファイルシステムにおけるマウントポイントへのパス。 -* `free_space` ([UInt64](../../sql-reference/data-types/)) — ディスク上の空き容量(バイト単位)。 -* `total_space` ([UInt64](../../sql-reference/data-types/)) — ディスクの総容量(バイト単位)。 -* `unreserved_space` ([UInt64](../../sql-reference/data-types/)) — 予約に使用されていない空き容量(`free_space` から、現在実行中のマージ、挿入、およびその他のディスク書き込み操作による予約サイズを差し引いた値)。 -* `keep_free_space` ([UInt64](../../sql-reference/data-types/)) — ディスク上で常に確保しておくべき空き容量(バイト単位)。ディスク設定の `keep_free_space_bytes` パラメータで定義されます。 -* `type` ([String](../../sql-reference/data-types/)) — このディスクがデータをどこに保存するかを示すディスクタイプ(RAM、ローカルドライブ、リモートストレージなど)。 -* `object_storage_type` ([String](../../sql-reference/data-types/)) — ディスクタイプが `object_storage` の場合のオブジェクトストレージの種類。 -* `metadata_type` ([String](../../sql-reference/data-types/)) — ディスクタイプが `object_storage` の場合のメタデータストレージの種類。 -* `is_encrypted` ([UInt8](../../sql-reference/data-types/)) — このディスクが基盤となるデータを暗号化しているかどうかを示すフラグ。 -* `is_read_only` ([UInt8](../../sql-reference/data-types/)) — このディスクに対して読み取り操作のみ実行できることを示すフラグ。 -* `is_write_once` ([UInt8](../../sql-reference/data-types/)) — ディスクが一度だけ書き込み可能かどうかを示すフラグ。この場合、このディスクへの BACKUP はサポートされますが、このディスク上の MergeTree テーブルへの INSERT はサポートされません。 -* `is_remote` ([UInt8](../../sql-reference/data-types/)) — このディスクに対するどの操作がネットワーク通信を伴うかを示すフラグ。 -* `is_broken` ([UInt8](../../sql-reference/data-types/)) — ディスクが故障しているかどうかを示すフラグ。故障したディスクの容量は 0 となり、利用できません。 -* `cache_path` ([String](../../sql-reference/data-types/)) — ディスクがキャッシュをサポートしている場合の、ローカルドライブ上のキャッシュディレクトリへのパス。 - {/*AUTOGENERATED_END*/ } **例** @@ -45,5 +29,5 @@ SELECT * FROM system.disks; │ default │ /var/lib/clickhouse/ │ 276392587264 │ 490652508160 │ 0 │ └─────────┴──────────────────────┴──────────────┴──────────────┴─────────────────┘ -1 行が返されました。経過時間: 0.001 秒。 +1行が返されました。経過時間: 0.001秒 ``` diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/distributed_ddl_queue.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/distributed_ddl_queue.md index 7f6e6b1d746..511f3faa846 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/distributed_ddl_queue.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/distributed_ddl_queue.md @@ -1,33 +1,17 @@ --- -description: 'クラスター上で実行された分散 DDL クエリ(ON CLUSTER 句を使用するクエリ)に関する情報を含むシステムテーブル。' +description: 'クラスタ上で実行された分散 DDL クエリ(ON CLUSTER 句を使用するクエリ)に関する情報を含むシステムテーブル。' keywords: ['system table', 'distributed_ddl_queue'] slug: /operations/system-tables/distributed_ddl_queue title: 'system.distributed_ddl_queue' doc_type: 'reference' --- -クラスター上で実行された[分散 DDL クエリ(ON CLUSTER 句)](../../sql-reference/distributed-ddl.md)に関する情報を含みます。 +クラスタ上で実行された[分散 DDL クエリ(ON CLUSTER 句)](../../sql-reference/distributed-ddl.md)に関する情報を保持します。 列: {/*AUTOGENERATED_START*/ } -* `entry` ([String](../../sql-reference/data-types/)) — クエリ ID。 -* `entry_version` ([Nullable(UInt8)](../../sql-reference/data-types/)) — エントリのバージョン。 -* `initiator_host` ([Nullable(String)](../../sql-reference/data-types/)) — DDL 操作を開始したホスト。 -* `initiator_port` ([Nullable(UInt16)](../../sql-reference/data-types/)) — 開始ホストが使用したポート。 -* `cluster` ([String](../../sql-reference/data-types/)) — クラスター名。未確定の場合は空。 -* `query` ([String](../../sql-reference/data-types/)) — 実行されたクエリ。 -* `settings` ([Map(String, String)](../../sql-reference/data-types/)) — DDL 操作で使用された設定。 -* `query_create_time` ([DateTime](../../sql-reference/data-types/)) — クエリの作成時刻。 -* `host` ([Nullable(String)](../../sql-reference/data-types/)) — ホスト名。 -* `port` ([Nullable(UInt16)](../../sql-reference/data-types/)) — ホストのポート。 -* `status` ([Nullable(Enum8('Inactive' = 0, 'Active' = 1, 'Finished' = 2, 'Removing' = 3, 'Unknown' = 4))](../../sql-reference/data-types/)) — クエリの状態。 -* `exception_code` ([Nullable(UInt16)](../../sql-reference/data-types/)) — 例外コード。 -* `exception_text` ([Nullable(String)](../../sql-reference/data-types/)) — 例外メッセージ。 -* `query_finish_time` ([Nullable(DateTime)](../../sql-reference/data-types/)) — クエリの終了時刻。 -* `query_duration_ms` ([Nullable(UInt64)](../../sql-reference/data-types/)) — クエリの実行時間(ミリ秒)。 - {/*AUTOGENERATED_END*/ } **例** @@ -53,7 +37,7 @@ settings: {'max_threads':'16','use_uncompressed_cache':'0'} query_create_time: 2023-09-01 16:15:14 host: clickhouse-01 port: 9000 -status: 完了 +status: Finished exception_code: 0 exception_text: query_finish_time: 2023-09-01 16:15:14 @@ -71,9 +55,9 @@ settings: {'max_threads':'16','use_uncompressed_cache':'0'} query_create_time: 2023-09-01 16:15:14 host: clickhouse-01 port: 9000 -status: 完了 +status: Finished exception_code: 630 -exception_text: Code: 630. DB::Exception: test_db を削除または名前変更できません。依存するテーブルが存在するためです: +exception_text: Code: 630. DB::Exception: Cannot drop or rename test_db, because some tables depend on it: query_finish_time: 2023-09-01 16:15:14 query_duration_ms: 154 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/distribution_queue.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/distribution_queue.md index 137b815404f..60ab842ddca 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/distribution_queue.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/distribution_queue.md @@ -1,29 +1,17 @@ --- -description: 'シャードに送信するためのキューに入っているローカルファイルに関する情報を含むシステムテーブル。' +description: 'シャードに送信するためのキューに入っているローカルファイルに関する情報を格納するシステムテーブルです。' keywords: ['システムテーブル', 'distribution_queue'] slug: /operations/system-tables/distribution_queue title: 'system.distribution_queue' doc_type: 'reference' --- -シャードに送信するためのキューに入っているローカルファイルに関する情報を含みます。これらのローカルファイルには、非同期モードで Distributed テーブルに新しいデータを挿入することによって作成された新しいパーツが含まれます。 +シャードに送信するためのキューに入っているローカルファイルに関する情報を格納します。これらのローカルファイルには、非同期モードで Distributed テーブルに新しいデータを挿入した際に作成される新しいパーツが含まれます。 -カラム: +列: {/*AUTOGENERATED_START*/ } -* `database` ([String](../../sql-reference/data-types/)) — データベース名。 -* `table` ([String](../../sql-reference/data-types/)) — テーブル名。 -* `data_path` ([String](../../sql-reference/data-types/)) — ローカルファイルが格納されているフォルダへのパス。 -* `is_blocked` ([UInt8](../../sql-reference/data-types/)) — ローカルファイルのサーバーへの送信がブロックされているかどうかを示すフラグ。 -* `error_count` ([UInt64](../../sql-reference/data-types/)) — エラー数。 -* `data_files` ([UInt64](../../sql-reference/data-types/)) — フォルダ内のローカルファイル数。 -* `data_compressed_bytes` ([UInt64](../../sql-reference/data-types/)) — ローカルファイル内の圧縮データサイズ(バイト単位)。 -* `broken_data_files` ([UInt64](../../sql-reference/data-types/)) — 破損(エラーにより)としてマークされたファイル数。 -* `broken_data_compressed_bytes` ([UInt64](../../sql-reference/data-types/)) — 破損ファイル内の圧縮データサイズ(バイト単位)。 -* `last_exception` ([String](../../sql-reference/data-types/)) — 最後に発生したエラーに関するテキストメッセージ(存在する場合)。 -* `last_exception_time` ([DateTime](../../sql-reference/data-types/)) — 最後の例外が発生した時刻。 - {/*AUTOGENERATED_END*/ } **例** diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/dns_cache.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/dns_cache.md index 6308c0115a0..d5175e7793c 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/dns_cache.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/dns_cache.md @@ -1,6 +1,6 @@ --- -description: 'キャッシュされた DNSレコードに関する情報を含むシステムテーブル。' -keywords: ['system table', 'dns_cache'] +description: 'DNS レコードのキャッシュ情報を保持するシステムテーブル。' +keywords: ['システムテーブル', 'dns_cache'] slug: /operations/system-tables/dns_cache title: 'system.dns_cache' doc_type: 'reference' @@ -10,22 +10,17 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -キャッシュされた DNS レコードに関する情報を格納します。 +キャッシュされた DNS レコードに関する情報を保持します。 列: {/*AUTOGENERATED_START*/ } -* `hostname` ([String](../../sql-reference/data-types/)) — ホスト名。 -* `ip_address` ([String](../../sql-reference/data-types/)) — IP アドレス。 -* `ip_family` ([Enum8('IPv4' = 0, 'IPv6' = 1, 'UNIX_LOCAL' = 2)](../../sql-reference/data-types/)) — IP アドレスファミリ。 -* `cached_at` ([DateTime](../../sql-reference/data-types/)) — レコードがキャッシュされたタイムスタンプ。 - {/*AUTOGENERATED_END*/ } **例** -クエリ: +クエリ: ```sql SELECT * FROM system.dns_cache; diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/dropped_tables.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/dropped_tables.md index 7d55c569c6f..594f88f7645 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/dropped_tables.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/dropped_tables.md @@ -1,30 +1,22 @@ --- -description: 'DROP TABLE が実行されたものの、まだデータのクリーンアップが行われていないテーブルに関する情報を保持する system テーブル' -keywords: ['system テーブル', 'dropped_tables'] +description: 'DROP TABLE が実行されたが、まだデータのクリーンアップが行われていないテーブルに関する情報を保持するシステムテーブル' +keywords: ['system table', 'dropped_tables'] slug: /operations/system-tables/dropped_tables title: 'system.dropped_tables' doc_type: 'reference' --- -DROP TABLE が実行されたものの、まだデータのクリーンアップが行われていないテーブルに関する情報を保持します。 +DROP TABLE が実行されたが、まだデータのクリーンアップが行われていないテーブルに関する情報を保持します。 -Columns: +列: {/*AUTOGENERATED_START*/ } -* `index` ([UInt32](../../sql-reference/data-types/)) — marked_dropped_tables キュー内でのインデックス。 -* `database` ([String](../../sql-reference/data-types/)) — データベース名。 -* `table` ([String](../../sql-reference/data-types/)) — テーブル名。 -* `uuid` ([UUID](../../sql-reference/data-types/)) — テーブルの UUID。 -* `engine` ([String](../../sql-reference/data-types/)) — テーブルエンジンの名前。 -* `metadata_dropped_path` ([String](../../sql-reference/data-types/)) — metadata_dropped ディレクトリ内にあるテーブルのメタデータファイルのパス。 -* `table_dropped_time` ([DateTime](../../sql-reference/data-types/)) — テーブルデータの削除が次回試行されるようにスケジュールされている時刻。通常は、テーブルが削除された時刻に `database_atomic_delay_before_drop_table_sec` を加算したもの。 - {/*AUTOGENERATED_END*/ } **例** -次の例では、`dropped_tables` に関する情報を取得する方法を示します。 +以下の例では、`dropped_tables` に関する情報を取得する方法を示します。 ```sql SELECT * @@ -32,7 +24,7 @@ FROM system.dropped_tables\G ``` ```text -行 1: +Row 1: ────── index: 0 database: default diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/error_log.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/error_log.md index a7f0ff465b3..bad80ff051d 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/error_log.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/error_log.md @@ -1,5 +1,5 @@ --- -description: '`system.errors` テーブルのエラー値の履歴を保持するシステムテーブルで、内容は定期的にディスクにフラッシュされます。' +description: 'テーブル `system.errors` に記録されたエラー値の履歴を保持し、定期的にディスクへフラッシュするシステムテーブル。' keywords: ['システムテーブル', 'error_log'] slug: /operations/system-tables/system-error-log title: 'system.error_log' @@ -10,17 +10,21 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -テーブル `system.errors` に含まれるエラー値の履歴を保持しており、定期的にディスクにフラッシュされます。 +テーブル `system.errors` に記録されるエラー値の履歴を保持しており、定期的にディスクにフラッシュされます。 列: -* `hostname` ([LowCardinality(String)](../../sql-reference/data-types/string.md)) — クエリを実行しているサーバーのホスト名。 +* `hostname` ([LowCardinality(String)](../../sql-reference/data-types/string.md)) — クエリを実行したサーバーのホスト名。 * `event_date` ([Date](../../sql-reference/data-types/date.md)) — イベントの日付。 * `event_time` ([DateTime](../../sql-reference/data-types/datetime.md)) — イベントの時刻。 * `code` ([Int32](../../sql-reference/data-types/int-uint.md)) — エラーコード番号。 -* `error` ([LowCardinality(String)](../../sql-reference/data-types/string.md)) — エラー名。 +* `error` ([LowCardinality(String)](../../sql-reference/data-types/string.md)) - エラー名。 * `value` ([UInt64](../../sql-reference/data-types/int-uint.md)) — このエラーが発生した回数。 -* `remote` ([UInt8](../../sql-reference/data-types/int-uint.md)) — リモート例外(分散クエリのいずれかの実行中に受信したもの)。 +* `remote` ([UInt8](../../sql-reference/data-types/int-uint.md)) — リモート例外(例: 分散クエリのいずれかの実行中に受信したもの)。 +* `last_error_time` ([DateTime](../../sql-reference/data-types/datetime.md)) — 最後に発生したエラーの時刻。 +* `last_error_message` ([String](../../sql-reference/data-types/string.md)) — 最後に発生したエラーのメッセージ。 +* `last_error_query_id` ([String](../../sql-reference/data-types/string.md)) — 最後のエラーを引き起こしたクエリの ID(存在する場合)。 +* `last_error_trace` ([Array(UInt64)](../../sql-reference/data-types/array.md)) — 呼び出されたメソッドが格納されている物理アドレスの一覧を表すスタックトレース。 **例** @@ -31,17 +35,21 @@ SELECT * FROM system.error_log LIMIT 1 FORMAT Vertical; ```text Row 1: ────── -hostname: clickhouse.eu-central1.internal -event_date: 2024-06-18 -event_time: 2024-06-18 07:32:39 -code: 999 -error: KEEPER_EXCEPTION -value: 2 -remote: 0 +hostname: clickhouse.testing.internal +event_date: 2025-11-11 +event_time: 2025-11-11 11:35:28 +code: 60 +error: UNKNOWN_TABLE +value: 1 +remote: 0 +last_error_time: 2025-11-11 11:35:28 +last_error_message: スコープ SELECT * FROM system.table_not_exist 内でテーブル式識別子 'system.table_not_exist' が見つかりません +last_error_query_id: 77ad9ece-3db7-4236-9b5a-f789bce4aa2e +last_error_trace: [100506790044914,100506534488542,100506409937998,100506409936517,100506425182891,100506618154123,100506617994473,100506617990486,100506617988112,100506618341386,100506630272160,100506630266232,100506630276900,100506629795243,100506633519500,100506633495783,100506692143858,100506692248921,100506790779783,100506790781278,100506790390399,100506790380047,123814948752036,123814949330028] ``` **関連項目** -* [error_log 設定](../../operations/server-configuration-parameters/settings.md#error_log) — 設定の有効化および無効化について。 -* [system.errors](../../operations/system-tables/errors.md) — 発生回数とともにエラーコードを保持します。 -* [Monitoring](../../operations/monitoring.md) — ClickHouse の監視に関する基本概念。 +* [error_log 設定](../../operations/server-configuration-parameters/settings.md#error_log) — この設定の有効化および無効化について。 +* [system.errors](../../operations/system-tables/errors.md) — エラーコードとその発生回数を保持します。 +* [Monitoring](../../operations/monitoring.md) — ClickHouse のモニタリングに関する基本的な概念。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/errors.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/errors.md index 530a04e9826..81b6131f751 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/errors.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/errors.md @@ -1,5 +1,5 @@ --- -description: 'エラーコードとその発生回数を保持するシステムテーブル。' +description: 'エラーコードとその発生回数を含むシステムテーブル。' keywords: ['system table', 'エラー'] slug: /operations/system-tables/errors title: 'system.errors' @@ -10,28 +10,18 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -このテーブルには、各エラーコードとその発生回数が含まれます。 +エラーコードと、それぞれが発生した回数を含みます。 -未発生のものも含め、取り得るすべてのエラーコードを表示するには、設定 [system_events_show_zero_values](../settings/settings.md#system_events_show_zero_values) を 1 にします。 +まだ発生していないものも含めて、想定されるすべてのエラーコードを表示するには、設定 [system_events_show_zero_values](../settings/settings.md#system_events_show_zero_values) を 1 に設定します。 列: {/*AUTOGENERATED_START*/ } -* `name` ([String](../../sql-reference/data-types/)) — エラー名(errorCodeToName)。 -* `code` ([Int32](../../sql-reference/data-types/)) — エラーのコード番号。 -* `value` ([UInt64](../../sql-reference/data-types/)) — このエラーが発生した回数。 -* `last_error_time` ([DateTime](../../sql-reference/data-types/)) — 最後にエラーが発生した時刻。 -* `last_error_message` ([String](../../sql-reference/data-types/)) — 最後のエラーのメッセージ。 -* `last_error_format_string` ([String](../../sql-reference/data-types/)) — 最後のエラー用のフォーマット文字列。 -* `last_error_trace` ([Array(UInt64)](../../sql-reference/data-types/)) — 呼び出されたメソッドが格納されている物理アドレスの一覧を表すスタックトレース。 -* `remote` ([UInt8](../../sql-reference/data-types/)) — リモート例外(分散クエリのいずれかの実行中に受信したもの)。 -* `query_id` ([String](../../sql-reference/data-types/)) — エラーを引き起こしたクエリ ID(取得可能な場合)。 - {/*AUTOGENERATED_END*/ } :::note -一部のエラーについては、クエリが正常に実行された場合でもカウンターが増加することがあります。対応するエラーが誤検知になる可能性がないと確信できる場合を除き、このテーブルをサーバー監視の目的で使用することは推奨されません。 +一部のエラーについては、クエリが正常に実行された場合でもカウンターが増加することがあります。対応するエラーが誤検知となる可能性がないと確信できない限り、このテーブルをサーバーの監視目的で使用することは推奨されません。 ::: **例** diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/events.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/events.md index ad4b01f31a4..ea776be1b19 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/events.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/events.md @@ -1,6 +1,6 @@ --- -description: 'システムで発生したイベント数に関する情報を保持するシステムテーブル。' -keywords: ['system table', 'イベント'] +description: 'システム内で発生したイベントの回数に関する情報を保持するシステムテーブル。' +keywords: ['システムテーブル', 'イベント'] slug: /operations/system-tables/events title: 'system.events' doc_type: 'reference' @@ -10,19 +10,15 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -システム内で発生したイベントの数に関する情報が含まれています。たとえば、このテーブルでは、ClickHouse サーバーの起動以降に処理された `SELECT` クエリの件数を確認できます。 +システム内で発生したイベント数に関する情報を含みます。たとえば、このテーブルでは、ClickHouse サーバーの起動以降に処理された `SELECT` クエリの件数を確認できます。 列: {/*AUTOGENERATED_START*/ } -* `event` ([String](../../sql-reference/data-types/)) — イベント名。 -* `value` ([UInt64](../../sql-reference/data-types/)) — 発生したイベント数。 -* `description` ([String](../../sql-reference/data-types/)) — イベントの説明。 - {/*AUTOGENERATED_END*/ } -サポートされているイベントの一覧は、ソースファイル [src/Common/ProfileEvents.cpp](https://github.com/ClickHouse/ClickHouse/blob/master/src/Common/ProfileEvents.cpp) で確認できます。 +サポートされているすべてのイベントは、ソースファイル [src/Common/ProfileEvents.cpp](https://github.com/ClickHouse/ClickHouse/blob/master/src/Common/ProfileEvents.cpp) で確認できます。 **例** @@ -31,18 +27,18 @@ SELECT * FROM system.events LIMIT 5 ``` ```text -┌─イベント─────────────────────────────────┬─値─┬─説明────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ -│ Query │ 12 │ 解釈され、実行される可能性のあるクエリの数。パースに失敗したクエリや、AST サイズ制限、クォータ制限、同時に実行されているクエリ数の制限により拒否されたクエリは含まない。ClickHouse 自身によって開始される内部クエリを含む場合がある。サブクエリはカウントしない。 │ -│ SelectQuery │ 8 │ Query と同様だが、SELECT クエリのみを対象とする。 │ +┌─event─────────────────────────────────┬─value─┬─description────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ Query │ 12 │ 解釈および実行される可能性のあるクエリの数。パースに失敗したクエリ、ASTサイズ制限、クォータ制限、または同時実行クエリ数の制限により拒否されたクエリは含まれません。ClickHouse自体が開始した内部クエリを含む場合があります。サブクエリはカウントされません。 │ +│ SelectQuery │ 8 │ Queryと同様ですが、SELECTクエリのみが対象です。 │ │ FileOpen │ 73 │ 開かれたファイルの数。 │ -│ ReadBufferFromFileDescriptorRead │ 155 │ ファイルディスクリプタからの読み取り(read/pread)の回数。ソケットは含まない。 │ -│ ReadBufferFromFileDescriptorReadBytes │ 9931 │ ファイルディスクリプタから読み取られたバイト数。ファイルが圧縮されている場合は、圧縮後のデータサイズを示す。 │ +│ ReadBufferFromFileDescriptorRead │ 155 │ ファイルディスクリプタからの読み取り回数(read/pread)。ソケットは含まれません。 │ +│ ReadBufferFromFileDescriptorReadBytes │ 9931 │ ファイルディスクリプタから読み取られたバイト数。ファイルが圧縮されている場合は、圧縮後のデータサイズが表示されます。 │ └───────────────────────────────────────┴───────┴────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ ``` **関連項目** -* [system.asynchronous_metrics](/operations/system-tables/asynchronous_metrics) — 定期的に計算されるメトリクスが格納されています。 -* [system.metrics](/operations/system-tables/metrics) — 即時に計算されるメトリクスが格納されています。 -* [system.metric_log](/operations/system-tables/metric_log) — テーブル `system.metrics` および `system.events` のメトリクス値の履歴が格納されています。 -* [Monitoring](../../operations/monitoring.md) — ClickHouse のモニタリングに関する基本的な概念。 +* [system.asynchronous_metrics](/operations/system-tables/asynchronous_metrics) — 定期的に計算されるメトリクスを保持します。 +* [system.metrics](/operations/system-tables/metrics) — 即時に計算されるメトリクスを保持します。 +* [system.metric_log](/operations/system-tables/metric_log) — テーブル `system.metrics` および `system.events` のメトリクス値の履歴を保持します。 +* [Monitoring](../../operations/monitoring.md) — ClickHouse のモニタリングに関する基本概念です。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/functions.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/functions.md index d0da13b564f..4c5ad734266 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/functions.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/functions.md @@ -6,27 +6,12 @@ title: 'system.functions' doc_type: 'reference' --- -通常関数および集約関数に関する情報を含みます。 +通常関数および集約関数に関する情報が含まれます。 -カラム: +列: {/*AUTOGENERATED_START*/ } -* `name` ([String](../../sql-reference/data-types/)) — 関数名。 -* `is_aggregate` ([UInt8](../../sql-reference/data-types/)) — 関数が集約関数かどうか。 -* `case_insensitive` ([UInt8](../../sql-reference/data-types/)) — 関数名を大文字小文字を区別せずに使用できるかどうか。 -* `alias_to` ([String](../../sql-reference/data-types/)) — 関数名がエイリアスである場合の元の関数名。 -* `create_query` ([String](../../sql-reference/data-types/)) — 廃止。 -* `origin` ([Enum8('System' = 0, 'SQLUserDefined' = 1, 'ExecutableUserDefined' = 2)](../../sql-reference/data-types/)) — 廃止。 -* `description` ([String](../../sql-reference/data-types/)) — 関数が何を行うかの概要。 -* `syntax` ([String](../../sql-reference/data-types/)) — 関数のシグネチャ。 -* `arguments` ([String](../../sql-reference/data-types/)) — 関数の引数。 -* `parameters` ([String](../../sql-reference/data-types/)) — 関数のパラメータ(集約関数の場合のみ)。 -* `returned_value` ([String](../../sql-reference/data-types/)) — 関数が返す値。 -* `examples` ([String](../../sql-reference/data-types/)) — 使用例。 -* `introduced_in` ([String](../../sql-reference/data-types/)) — 関数が最初に導入された ClickHouse のバージョン。 -* `categories` ([String](../../sql-reference/data-types/)) — 関数のカテゴリ。 - {/*AUTOGENERATED_END*/ } **例** diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/graphite_retentions.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/graphite_retentions.md index 22d230a6e71..2ebd3560d8c 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/graphite_retentions.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/graphite_retentions.md @@ -1,26 +1,15 @@ --- -description: 'エンジンタイプが `GraphiteMergeTree` のテーブルで使用されるパラメータ `graphite_rollup` に関する情報を含むシステムテーブルです。' -keywords: ['システムテーブル', 'graphite_retentions'] +description: '`GraphiteMergeTree` 型エンジンを使用するテーブルで利用されるパラメータ `graphite_rollup` に関する情報を含むシステムテーブルです。' +keywords: ['system table', 'graphite_retentions'] slug: /operations/system-tables/graphite_retentions title: 'system.graphite_retentions' doc_type: 'reference' --- -[*GraphiteMergeTree](../../engines/table-engines/mergetree-family/graphitemergetree.md) エンジンのテーブルで使用されるパラメータ [graphite_rollup](../../operations/server-configuration-parameters/settings.md#graphite) に関する情報を保持します。 +[`GraphiteMergeTree`](../../engines/table-engines/mergetree-family/graphitemergetree.md) エンジンを使用するテーブルで利用されるパラメータ [graphite_rollup](../../operations/server-configuration-parameters/settings.md#graphite) に関する情報が含まれています。 列: {/*AUTOGENERATED_START*/ } -* `config_name` ([String](../../sql-reference/data-types/)) — graphite_rollup パラメーター名。 -* `rule_type` ([String](../../sql-reference/data-types/)) — ルールタイプ。取りうる値: RuleTypeAll = 0 - 既定。正規表現あり、旧スキームと互換性あり; RuleTypePlain = 1 - プレーンなメトリクス。正規表現あり、旧スキームと互換性あり; RuleTypeTagged = 2 - タグ付きメトリクス。正規表現あり、旧スキームと互換性あり; RuleTypeTagList = 3 - タグ付きメトリクス。正規表現あり('retention=10min ; env=(staging|prod)' のような文字列から RuleTypeTagged に変換)。 -* `regexp` ([String](../../sql-reference/data-types/)) — メトリクス名用のパターン。 -* `function` ([String](../../sql-reference/data-types/)) — 集約関数名。 -* `age` ([UInt64](../../sql-reference/data-types/)) — データの最小経過時間(秒)。 -* `precision` ([UInt64](../../sql-reference/data-types/)) — データの経過時間を秒単位でどの程度の精度で指定するか。 -* `priority` ([UInt16](../../sql-reference/data-types/)) — パターンの優先度。 -* `is_default` ([UInt8](../../sql-reference/data-types/)) — パターンが既定かどうか。 -* `Tables.database` ([Array(String)](../../sql-reference/data-types/)) — `config_name` パラメーターを使用するデータベース内のテーブル名の配列。 -* `Tables.table` ([Array(String)](../../sql-reference/data-types/)) — `config_name` パラメーターを使用するテーブル名の配列。 - {/*AUTOGENERATED_END*/ } diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/histogram_metrics.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/histogram_metrics.md index 738dc7496ae..f9af3b9860b 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/histogram_metrics.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/histogram_metrics.md @@ -1,6 +1,6 @@ --- -description: 'このテーブルには、即時に計算して Prometheus 形式でエクスポートできるヒストグラムメトリクスが含まれています。常に最新の状態に保たれています。' -keywords: ['システムテーブル', 'histogram_metrics'] +description: 'このテーブルには、即時に計算でき、Prometheus 形式でエクスポート可能なヒストグラムメトリクスが格納されており、常に最新の状態が保たれます。' +keywords: ['system table', 'histogram_metrics'] slug: /operations/system-tables/histogram_metrics title: 'system.histogram_metrics' doc_type: 'reference' @@ -13,22 +13,17 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -このテーブルには、即座に計算でき、Prometheus 形式でエクスポート可能なヒストグラムメトリクスが含まれます。常に最新の状態が維持されます。非推奨となった `system.latency_log` の代替です。 +このテーブルには、即座に計算でき、Prometheus 形式でエクスポートできるヒストグラムメトリクスが含まれています。常に最新の状態です。非推奨となった `system.latency_log` を置き換えます。 列: {/*AUTOGENERATED_START*/ } -* `metric` ([String](../../sql-reference/data-types/)) — メトリック名。 -* `value` ([Int64](../../sql-reference/data-types/)) — メトリック値。 -* `description` ([String](../../sql-reference/data-types/)) — メトリックの説明。 -* `labels` ([Map(String, String)](../../sql-reference/data-types/)) — メトリックのラベル。 - {/*AUTOGENERATED_END*/ } **例** -Prometheus フォーマットですべてのヒストグラムメトリクスをエクスポートするには、次のようなクエリを使用できます。 +すべてのヒストグラムメトリクスを Prometheus 形式でエクスポートするには、次のようなクエリを使用できます。 ```sql SELECT @@ -45,10 +40,12 @@ FORMAT Prometheus ## メトリクスの説明 {#metric_descriptions} ### keeper_response_time_ms_bucket {#keeper_response_time_ms_bucket} -Keeper の応答時間(ミリ秒単位)です。 + +Keeper の応答時間(ミリ秒単位)。 **関連項目** -- [system.asynchronous_metrics](/operations/system-tables/asynchronous_metrics) — 定期的に計算されるメトリクスを格納します。 -- [system.events](/operations/system-tables/events) — 発生したイベントの数を格納します。 -- [system.metric_log](/operations/system-tables/metric_log) — テーブル `system.metrics` および `system.events` のメトリクス値の履歴を格納します。 -- [Monitoring](../../operations/monitoring.md) — ClickHouse の監視に関する基本概念を説明します。 + +- [system.asynchronous_metrics](/operations/system-tables/asynchronous_metrics) — 定期的に計算されるメトリクスを含みます。 +- [system.events](/operations/system-tables/events) — 発生した各種イベントを含みます。 +- [system.metric_log](/operations/system-tables/metric_log) — テーブル `system.metrics` および `system.events` からのメトリクス値の履歴を含みます。 +- [Monitoring](../../operations/monitoring.md) — ClickHouse モニタリングの基本的な概念。 \ No newline at end of file diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/iceberg_history.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/iceberg_history.md index 22bbcc5a91b..2c338e8f229 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/iceberg_history.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/iceberg_history.md @@ -1,26 +1,17 @@ --- -description: 'システム Iceberg スナップショットの履歴' +description: 'system iceberg スナップショットの履歴' keywords: ['system iceberg_history'] slug: /operations/system-tables/iceberg_history title: 'system.iceberg_history' doc_type: 'reference' --- - - # system.iceberg_history -この system テーブルには、ClickHouse 内に存在する Iceberg テーブルのスナップショット履歴が含まれます。ClickHouse に Iceberg テーブルが 1 つも存在しない場合、このテーブルは空になります。 +このシステムテーブルには、ClickHouse 内に存在する Iceberg テーブルのスナップショット履歴が格納されています。ClickHouse に Iceberg テーブルが存在しない場合、このテーブルは空になります。 列: {/*AUTOGENERATED_START*/ } -* `database` ([String](../../sql-reference/data-types/)) — データベース名。 -* `table` ([String](../../sql-reference/data-types/)) — テーブル名。 -* `made_current_at` ([Nullable(DateTime64(3))](../../sql-reference/data-types/)) — このスナップショットが現在のスナップショットになった日時。 -* `snapshot_id` ([UInt64](../../sql-reference/data-types/)) — スナップショットを識別するための ID。 -* `parent_id` ([UInt64](../../sql-reference/data-types/)) — 親スナップショットの ID。 -* `is_current_ancestor` ([UInt8](../../sql-reference/data-types/)) — このスナップショットが現在のスナップショットの祖先であるかどうかを示すフラグ。 - {/*AUTOGENERATED_END*/ } diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/index.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/index.md index 30855a80cc8..eaf5f6a3a32 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/index.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/index.md @@ -1,136 +1,20 @@ --- -description: 'system テーブルとは何かと、その有用性の概要。' -keywords: ['system テーブル', '概要'] +description: "システムテーブルとは何か、およびその有用性についての概要。" +keywords: ["システムテーブル", "概要"] pagination_next: operations/system-tables/asynchronous_metric_log -sidebar_label: '概要' +sidebar_label: "概要" sidebar_position: 52 slug: /operations/system-tables/ -title: 'System テーブル' -doc_type: 'reference' +title: "システムテーブル" +doc_type: "reference" --- -{/* このページの目次テーブルは、 - https://github.com/ClickHouse/clickhouse-docs/blob/main/scripts/autogenerate-table-of-contents.sh - によって、YAML フロントマターのフィールド(slug、description、title)から自動生成されます。 + - -{/*AUTOGENERATED_START*/ } - -| ページ | 概要 | -| ----------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -| [システムテーブルの概要](/operations/system-tables/overview) | システムテーブルとは何か、そしてそれがなぜ有用なのかの概要。 | -| [INFORMATION_SCHEMA](/operations/system-tables/information_schema) | データベースオブジェクトのメタデータに対する、ほぼ標準化された DBMS に依存しないビューを提供するシステムデータベース。 | -| [system.asynchronous_insert_log](/operations/system-tables/asynchronous_insert_log) | 非同期挿入に関する情報を格納するシステムテーブルです。各エントリは、非同期挿入としてバッファリングされた INSERT クエリを表します。 | -| [system.asynchronous_loader](/operations/system-tables/asynchronous_loader) | 最近の非同期ジョブ(例:データをロード中のテーブルに対するジョブ)の情報およびステータスを含むシステムテーブルです。各ジョブごとに1行が格納されます。 | -| [system.asynchronous_metric_log](/operations/system-tables/asynchronous_metric_log) | `system.asynchronous_metrics` の過去の値を含むシステムテーブルです。値は一定の時間間隔ごと(デフォルトでは 1 秒ごと)に保存されます。 | -| [system.asynchronous_inserts](/operations/system-tables/asynchronous_inserts) | 非同期挿入キュー内の保留中の挿入に関する情報を格納するシステムテーブル。 | -| [system.asynchronous_metrics](/operations/system-tables/asynchronous_metrics) | バックグラウンドで定期的に計算されるメトリクスを保持するシステムテーブルです。例えば、使用中のメモリ量などが含まれます。 | -| [system.azure_queue_settings](/operations/system-tables/azure_queue_settings) | AzureQueue テーブルの設定に関する情報を含むシステムテーブル。サーバーバージョン `24.10` 以降で利用可能。 | -| [system.backup_log](/operations/system-tables/backup_log) | `BACKUP` および `RESTORE` 操作に関する情報を含むログエントリを格納するシステムテーブル。 | -| [system.backups](/operations/system-tables/backups) | `BACKUP` および `RESTORE` 操作に関する情報を含むログエントリを格納するシステムテーブル。 | -| [system.blob_storage_log](/operations/system-tables/blob_storage_log) | アップロードや削除など、さまざまな BLOB ストレージ操作に関する情報を含むログエントリを保持するシステムテーブル。 | -| [system.build_options](/operations/system-tables/build_options) | ClickHouse サーバーのビルドオプションに関する情報を含むシステムテーブル。 | -| [system.clusters](/operations/system-tables/clusters) | 設定ファイルで利用可能なクラスタおよびその中で定義されているサーバーに関する情報を保持するシステムテーブル。 | -| [system.codecs](/operations/system-tables/codecs) | キュー内のコーデック情報を含むシステムテーブルです。 | -| [system.columns](/operations/system-tables/columns) | すべてのテーブルの列情報を保持するシステムテーブル | -| [system.contributors](/operations/system-tables/contributors) | コントリビューターに関する情報を保持するシステムテーブル。 | -| [system.crash_log](/operations/system-tables/crash_log) | 致命的エラーのスタックトレース情報を格納するシステムテーブル。 | -| [system.current_roles](/operations/system-tables/current_roles) | 現在のユーザーに対して有効なロールを保持するシステムテーブル。 | -| [system.dashboards](/operations/system-tables/dashboards) | HTTP インターフェイスからアクセスできる `/dashboard` ページで使用されるクエリを含みます。監視およびトラブルシューティングに役立ちます。 | -| [system.data_skipping_indices](/operations/system-tables/data_skipping_indices) | すべてのテーブルに存在するデータスキップインデックスに関する情報を格納するシステムテーブル。 | -| [system.data_type_families](/operations/system-tables/data_type_families) | サポートされているデータ型に関する情報を保持する system テーブル | -| [system.database_engines](/operations/system-tables/database_engines) | サーバーがサポートするデータベースエンジンの一覧を保持するシステムテーブル。 | -| [system.database_replicas](/operations/system-tables/database_replicas) | レプリケートデータベースの情報およびステータスを保持するシステムテーブル。 | -| [system.databases](/operations/system-tables/databases) | 現在のユーザーが利用できるデータベースに関する情報を保持するシステムテーブルです。 | -| [system.dead_letter_queue](/operations/system-tables/dead_letter_queue) | ストリーミングエンジンを介して受信され、パース時にエラーが発生したメッセージの情報を保持するシステムテーブル。 | -| [system.delta_lake_metadata_log](/operations/system-tables/delta_lake_metadata_log) | Delta Lake テーブルから読み取ったメタデータファイルに関する情報を保持するシステムテーブル。各エントリはルートメタデータ JSON ファイルを表します。 | -| [system.detached_parts](/operations/system-tables/detached_parts) | MergeTree テーブルのデタッチされたパーツに関する情報を保持するシステムテーブル | -| [system.detached_tables](/operations/system-tables/detached_tables) | 各デタッチ済みテーブルに関する情報を保持するシステムテーブル。 | -| [system.dictionaries](/operations/system-tables/dictionaries) | 辞書に関する情報を格納するシステムテーブル | -| [system.dimensional_metrics](/operations/system-tables/dimensional_metrics) | このテーブルには、即座に計算して Prometheus 形式でエクスポートできるディメンションメトリクスが含まれており、常に最新の状態に保たれています。 | -| [system.disks](/operations/system-tables/disks) | サーバー構成で定義されたディスクに関する情報を保持するシステムテーブル | -| [system.distributed_ddl_queue](/operations/system-tables/distributed_ddl_queue) | クラスター上で実行された分散 DDL クエリ(ON CLUSTER 句を使用するクエリ)に関する情報を格納するシステムテーブル。 | -| [system.distribution_queue](/operations/system-tables/distribution_queue) | シャードへ送信されるためのキューに入っているローカルファイルに関する情報を保持するシステムテーブル。 | -| [system.dns_cache](/operations/system-tables/dns_cache) | DNS レコードのキャッシュ情報を保持するシステムテーブル。 | -| [system.dropped_tables](/operations/system-tables/dropped_tables) | `DROP TABLE` が実行されたものの、まだデータのクリーンアップが行われていないテーブルに関する情報を保持するシステムテーブル | -| [system.dropped_tables_parts](/operations/system-tables/dropped_tables_parts) | `system.dropped_tables` にある削除済み MergeTree テーブルのパーツに関する情報を含むシステムテーブル | -| [system.enabled_roles](/operations/system-tables/enabled_roles) | 現在有効なすべてのロールを保持するシステムテーブルであり、現在のユーザーの現在のロールおよびそのロールに付与されているロールを含みます | -| [system.error_log](/operations/system-tables/system-error-log) | テーブル `system.errors` に含まれるエラー値の履歴を保持し、定期的にディスクにフラッシュされるシステムテーブルです。 | -| [system.errors](/operations/system-tables/errors) | エラーコードとその発生回数を含むシステムテーブル。 | -| [system.events](/operations/system-tables/events) | システム内で発生したイベント数に関する情報を保持するシステムテーブル。 | -| [system.functions](/operations/system-tables/functions) | 通常の関数および集約関数に関する情報を含むシステムテーブル。 | -| [system.grants](/operations/system-tables/grants) | ClickHouse ユーザーアカウントに付与されている権限を示すシステムテーブル。 | -| [system.graphite_retentions](/operations/system-tables/graphite_retentions) | `GraphiteMergeTree` 型エンジンのテーブルで使用される `graphite_rollup` パラメータに関する情報を保持するシステムテーブルです。 | -| [system.histogram_metrics](/operations/system-tables/histogram_metrics) | このテーブルには、即座に計算でき、Prometheus 形式でエクスポート可能なヒストグラムメトリクスが含まれます。常に最新の状態です。 | -| [system.iceberg_history](/operations/system-tables/iceberg_history) | システム Iceberg スナップショットの履歴 | -| [system.iceberg_metadata_log](/operations/system-tables/iceberg_metadata_log) | Iceberg テーブルから読み取られたメタデータファイルに関する情報を含むシステムテーブル。各エントリは、ルートメタデータファイル、Avro ファイルから抽出されたメタデータ、または Avro ファイル内の個々のエントリのいずれかを表します。 | -| [system.jemalloc_bins](/operations/system-tables/jemalloc_bins) | jemalloc アロケータによるサイズクラス(bin)ごとのメモリアロケーション情報を、すべてのアリーナから集約して保持するシステムテーブル。 | -| [system.kafka_consumers](/operations/system-tables/kafka_consumers) | Kafka コンシューマに関する情報を格納するシステムテーブル。 | -| [system.licenses](/operations/system-tables/licenses) | ClickHouse ソース内の contrib ディレクトリに配置されているサードパーティライブラリのライセンス情報を保持する system テーブル。 | -| [system.merge_tree_settings](/operations/system-tables/merge_tree_settings) | MergeTree テーブルの設定情報を含むシステムテーブル。 | -| [system.merges](/operations/system-tables/merges) | MergeTree ファミリーのテーブルに対して現在実行中のマージおよびパーツミューテーションに関する情報を持つシステムテーブルです。 | -| [system.metric_log](/operations/system-tables/metric_log) | `system.metrics` および `system.events` テーブルからのメトリクス値の履歴を保持するシステムテーブルで、定期的にディスクにフラッシュされます。 | -| [system.metrics](/operations/system-tables/metrics) | その場で計算可能な、または現在値を保持しているメトリクスを含むシステムテーブルです。 | -| [system.moves](/operations/system-tables/moves) | 進行中の MergeTree テーブルのデータパーツ移動に関する情報を含むシステムテーブル。各データパーツの移動は 1 行として表されます。 | -| [system.mutations](/operations/system-tables/mutations) | MergeTree テーブルのミューテーションとその進行状況に関する情報を持つシステムテーブルです。各ミューテーションコマンドは 1 行で表されます。 | -| [system.numbers_mt](/operations/system-tables/numbers_mt) | `system.numbers` に類似したシステムテーブルであり、読み取りが並列実行されるため、数値は任意の順序で返されます。 | -| [system.numbers](/operations/system-tables/numbers) | `number` という名前の UInt64 型の単一列を持ち、その列に 0 から始まるほぼすべての自然数が含まれるシステムテーブル。 | -| [system.one](/operations/system-tables/one) | 1 行だけを持ち、その行に値 0 を含む `dummy` という名前の UInt8 型列が 1 列だけ存在するシステムテーブル。他の DBMS に見られる `DUAL` テーブルに相当します。 | -| [system.opentelemetry_span_log](/operations/system-tables/opentelemetry_span_log) | 実行されたクエリのトレーススパン情報を保持するシステムテーブル。 | -| [system.part_log](/operations/system-tables/part_log) | MergeTree ファミリーのテーブルにおいて発生した、データパーツの追加やマージなどのイベントに関する情報を格納するシステムテーブルです。 | -| [system.parts](/operations/system-tables/parts) | MergeTree のパーツに関する情報を含むシステムテーブル | -| [system.parts_columns](/operations/system-tables/parts_columns) | MergeTree テーブルのパーツおよび列に関する情報を保持するシステムテーブル。 | -| [system.processes](/operations/system-tables/processes) | `SHOW PROCESSLIST` クエリの実装に用いられるシステムテーブル。 | -| [system.processors_profile_log](/operations/system-tables/processors_profile_log) | プロセッサレベルのプロファイリング情報を含むシステムテーブル(`EXPLAIN PIPELINE` で確認できる) | -| [system.projection_parts_columns](/operations/system-tables/projection_parts_columns) | MergeTree ファミリーのテーブルにおけるプロジェクションパーツのカラム情報を保持するシステムテーブル | -| [system.projection_parts](/operations/system-tables/projection_parts) | MergeTree ファミリーのテーブルのプロジェクションパーツに関する情報を含むシステムテーブル。 | -| [system.projections](/operations/system-tables/projections) | すべてのテーブル内に存在するプロジェクションに関する情報を格納するシステムテーブル。 | -| [system.query_views_log](/operations/system-tables/query_views_log) | クエリを実行した際に実行された依存ビューに関する情報(ビューの種類や実行時間など)を保持するシステムテーブル。 | -| [system.query_condition_cache](/operations/system-tables/query_condition_cache) | クエリ条件キャッシュの内容を表示するシステムテーブルです。 | -| [system.query_thread_log](/operations/system-tables/query_thread_log) | クエリを実行するスレッドに関する情報を含むシステムテーブルです。例えば、スレッド名、スレッドの開始時刻、クエリ処理時間などです。 | -| [system.query_metric_log](/operations/system-tables/query_metric_log) | 個々のクエリごとに、`system.events` テーブル由来のメモリおよびメトリクス値の履歴を格納し、定期的にディスクへフラッシュするシステムテーブルです。 | -| [system.query_log](/operations/system-tables/query_log) | 実行されたクエリに関する情報を含むシステムテーブル。たとえば、開始時刻、処理にかかった時間、エラーメッセージなど。 | -| [system.query_cache](/operations/system-tables/query_cache) | クエリキャッシュの内容を表示するシステムテーブル。 | -| [system.quota_usage](/operations/system-tables/quota_usage) | 現在のユーザーによるクォータの使用状況(使用済み量および残りの量)に関する情報を含むシステムテーブルです。 | -| [system.quota_limits](/operations/system-tables/quota_limits) | すべてのクォータのすべての間隔に対する上限値に関する情報を含むシステムテーブルです。1 つのクォータに対して、任意の数の行、または 0 行が対応することがあります。 | -| [system.quotas_usage](/operations/system-tables/quotas_usage) | 全ユーザーのクオータ使用状況に関する情報を保持するシステムテーブル。 | -| [system.quotas](/operations/system-tables/quotas) | クォータに関する情報を含むシステムテーブル。 | -| [system.replicas](/operations/system-tables/replicas) | ローカルサーバー上に存在するレプリケートされたテーブルの情報および状態を含むシステムテーブル。監視に役立ちます。 | -| [system.replicated_fetches](/operations/system-tables/replicated_fetches) | 現在実行中のバックグラウンドフェッチに関する情報を保持するシステムテーブルです。 | -| [system.replication_queue](/operations/system-tables/replication_queue) | `ReplicatedMergeTree` ファミリーのテーブルについて、ClickHouse Keeper または ZooKeeper に格納されているレプリケーションキュー内のタスク情報を保持するシステムテーブルです。 | -| [system.resources](/operations/system-tables/resources) | ローカルサーバー上に存在するリソースに関する情報を保持するシステムテーブルで、各リソースにつき 1 行が割り当てられます。 | -| [system.role_grants](/operations/system-tables/role_grants) | ユーザーおよびロールに対して付与されたロール情報を含むシステムテーブル。 | -| [system.roles](/operations/system-tables/roles) | 構成済みのロールに関する情報を含むシステムテーブル。 | -| [system.row_policies](/operations/system-tables/row_policies) | ある特定のテーブルに対するフィルタと、この行ポリシーを適用するロールおよび/またはユーザーの一覧を保持するシステムテーブル。 | -| [system.s3_queue_settings](/operations/system-tables/s3_queue_settings) | S3Queue テーブルの設定に関する情報を含むシステムテーブル。サーバーのバージョン `24.10` 以降で利用可能です。 | -| [system.scheduler](/operations/system-tables/scheduler) | ローカルサーバー上に存在するスケジューリングノードの情報およびステータスを保持するシステムテーブル。 | -| [system.schema_inference_cache](/operations/system-tables/schema_inference_cache) | すべてのキャッシュ済みファイルのスキーマ情報を保持するシステムテーブル。 | -| [system.server_settings](/operations/system-tables/server_settings) | サーバーのグローバル設定に関する情報を格納するシステムテーブルで、これらの設定は `config.xml` で指定されます。 | -| [system.session_log](/operations/system-tables/session_log) | すべてのログインおよびログアウトの成功/失敗イベントに関する情報を格納するシステムテーブル。 | -| [system.settings](/operations/system-tables/settings) | 現在のユーザーのセッション設定情報を含むシステムテーブル。 | -| [system.settings_profile_elements](/operations/system-tables/settings_profile_elements) | 設定プロファイルの内容(制約、この設定が適用されるロールおよびユーザー、親設定プロファイル)を表すシステムテーブル。 | -| [system.settings_changes](/operations/system-tables/settings_changes) | 以前の ClickHouse バージョンでの設定変更に関する情報を含むシステムテーブル。 | -| [system.settings_profiles](/operations/system-tables/settings_profiles) | 設定プロファイルのプロパティを格納するシステムテーブル。 | -| [system.stack_trace](/operations/system-tables/stack_trace) | すべてのサーバースレッドのスタックトレースを含むシステムテーブル。開発者がサーバーの状態を詳細に把握できるようにします。 | -| [system.storage_policies](/operations/system-tables/storage_policies) | サーバー設定で定義されたストレージポリシーおよびボリュームに関する情報を保持するシステムテーブル。 | -| [system.symbols](/operations/system-tables/symbols) | C++ のエキスパートや ClickHouse エンジニア向けのシステムテーブルで、`clickhouse` バイナリのイントロスペクションを行うための情報を含んでいます。 | -| [system.table_engines](/operations/system-tables/table_engines) | サーバーがサポートするテーブルエンジンと、それぞれで利用可能な機能の説明を含むシステムテーブル。 | -| [system.tables](/operations/system-tables/tables) | サーバーが把握している各テーブルのメタデータを保持するシステムテーブル。 | -| [system.text_log](/operations/system-tables/text_log) | ログエントリを保持するシステムテーブル。 | -| [system.time_zones](/operations/system-tables/time_zones) | ClickHouse サーバーがサポートするタイムゾーンの一覧を含むシステムテーブル。 | -| [system.trace_log](/operations/system-tables/trace_log) | サンプリングクエリプロファイラーによって収集されたスタックトレースを保持するシステムテーブル。 | -| [system.unicode](/operations/system-tables/unicode) | Unicode 文字とそのプロパティの一覧を格納するシステムテーブル。 | -| [system.user_processes](/operations/system-tables/user_processes) | ユーザーごとのメモリ使用量および ProfileEvents の概要を把握するために有用な情報を含むシステムテーブル。 | -| [system.users](/operations/system-tables/users) | サーバー上で設定されているユーザーアカウントの一覧を保持するシステムテーブル。 | -| [system.view_refreshes](/operations/system-tables/view_refreshes) | Refreshable マテリアライズドビューに関する情報を保持するシステムテーブルです。 | -| [system.warnings](/operations/system-tables/system_warnings) | このテーブルには、ClickHouse サーバーに関する警告メッセージが含まれています。 | -| [system.workloads](/operations/system-tables/workloads) | ローカルサーバー上で動作するワークロードに関する情報を格納するシステムテーブル。 | -| [system.zookeeper_log](/operations/system-tables/zookeeper_log) | ZooKeeper サーバーへのリクエストのパラメーターとその応答に関する情報を含むシステムテーブル。 | -| [system.zookeeper_connection](/operations/system-tables/zookeeper_connection) | ZooKeeper が設定されている場合にのみ存在するシステムテーブルです。現在の ZooKeeper への接続(補助 ZooKeeper を含む)を表示します。 | -| [system.zookeeper_connection_log](/operations/system-tables/zookeeper_connection_log) | ZooKeeper への接続履歴を表示します(補助 ZooKeeper を含みます)。 | -| [system.zookeeper](/operations/system-tables/zookeeper) | ClickHouse Keeper または ZooKeeper が構成されている場合にのみ存在するシステムテーブルです。設定で定義された Keeper クラスターのデータを公開します。 | - -{/*AUTOGENERATED_END*/ } + + diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/jemalloc_bins.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/jemalloc_bins.md index 7ccc60b3e20..52740e977a4 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/jemalloc_bins.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/jemalloc_bins.md @@ -1,5 +1,5 @@ --- -description: 'jemalloc アロケータによるメモリアロケーションについて、異なるサイズクラス(bin)ごとに、すべての arena から集約した情報を保持するシステムテーブル。' +description: 'すべてのアリーナから集約した、jemalloc アロケータによるサイズクラス(ビン)別のメモリアロケーション情報を保持するシステムテーブル。' keywords: ['system table', 'jemalloc_bins'] slug: /operations/system-tables/jemalloc_bins title: 'system.jemalloc_bins' @@ -10,24 +10,18 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -異なるサイズクラス(bin)ごとに、jemalloc アロケータによって行われたメモリアロケーションに関する情報を、すべてのアリーナから集約したものです。 -jemalloc におけるスレッドローカルキャッシュの影響により、これらの統計は完全に正確ではない可能性があります。 +jemalloc アロケーターによるサイズクラス(bin)ごとのメモリアロケーション情報を、すべてのアリーナから集約したものを含みます。 +jemalloc におけるスレッドローカルキャッシュの影響により、これらの統計は完全に正確ではない場合があります。 列: {/*AUTOGENERATED_START*/ } -* `index` ([UInt16](../../sql-reference/data-types/)) — サイズ順に並べられたビンのインデックス。 -* `large` ([UInt8](../../sql-reference/data-types/)) — 大きな割り当てであれば True、小さい場合は False。 -* `size` ([UInt64](../../sql-reference/data-types/)) — このビンに含まれる割り当てのサイズ。 -* `allocations` ([Int64](../../sql-reference/data-types/)) — 割り当ての回数。 -* `deallocations` ([Int64](../../sql-reference/data-types/)) — 解放の回数。 - -{/*自動生成_終了*/ } +{/*AUTOGENERATED_END*/ } **例** -現在の総メモリ使用量に最も大きな影響を与えている割り当てのサイズを特定します。 +現在のメモリ使用量のうち、特に大きく影響しているアロケーションのサイズを特定します。 ```sql SELECT diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/kafka_consumers.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/kafka_consumers.md index ccc73ac0272..f1628605057 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/kafka_consumers.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/kafka_consumers.md @@ -1,9 +1,9 @@ --- -description: 'Kafka コンシューマーに関する情報を保持するシステムテーブル。' -keywords: ['システムテーブル', 'kafka_consumers'] +description: 'Kafka コンシューマーに関する情報を含む system テーブル。' +keywords: ['system テーブル', 'kafka_consumers'] slug: /operations/system-tables/kafka_consumers title: 'system.kafka_consumers' -doc_type: 'リファレンス' +doc_type: 'reference' --- import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; @@ -11,32 +11,12 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; Kafka コンシューマに関する情報を保持します。 -[Kafka テーブルエンジン](../../engines/table-engines/integrations/kafka)(ClickHouse ネイティブ統合)で利用できます。 +[Kafka table engine](../../engines/table-engines/integrations/kafka)(ネイティブな ClickHouse 統合機能)に適用されます。 列: {/*AUTOGENERATED_START*/ } -* `database` ([String](../../sql-reference/data-types/)) — Kafka Engine を使用するテーブルの属するデータベース。 -* `table` ([String](../../sql-reference/data-types/)) — Kafka Engine を使用するテーブル名。 -* `consumer_id` ([String](../../sql-reference/data-types/)) — Kafka コンシューマ識別子。1 つのテーブルには複数のコンシューマを設定できます。`kafka_num_consumers` パラメータで指定します。 -* `assignments.topic` ([Array(String)](../../sql-reference/data-types/)) — Kafka トピック。 -* `assignments.partition_id` ([Array(Int32)](../../sql-reference/data-types/)) — Kafka パーティション ID。1 つのパーティションには 1 つのコンシューマのみが割り当て可能です。 -* `assignments.current_offset` ([Array(Int64)](../../sql-reference/data-types/)) — 現在のオフセット。 -* `assignments.intent_size` ([Array(Nullable(Int64))](../../sql-reference/data-types/)) — 新しい StorageKafka において、プッシュされたがまだコミットされていないメッセージ数。 -* `exceptions.time` ([Array(DateTime)](../../sql-reference/data-types/)) — 直近 10 件の例外が発生したタイムスタンプ。 -* `exceptions.text` ([Array(String)](../../sql-reference/data-types/)) — 直近 10 件の例外のテキスト。 -* `last_poll_time` ([DateTime](../../sql-reference/data-types/)) — 最新の poll のタイムスタンプ。 -* `num_messages_read` ([UInt64](../../sql-reference/data-types/)) — コンシューマによって読み取られたメッセージ数。 -* `last_commit_time` ([DateTime](../../sql-reference/data-types/)) — 最新の poll のタイムスタンプ。 -* `num_commits` ([UInt64](../../sql-reference/data-types/)) — コンシューマによるコミットの合計回数。 -* `last_rebalance_time` ([DateTime](../../sql-reference/data-types/)) — 最新の Kafka リバランスのタイムスタンプ。 -* `num_rebalance_revocations` ([UInt64](../../sql-reference/data-types/)) — コンシューマからパーティションの割り当てが取り消された回数。 -* `num_rebalance_assignments` ([UInt64](../../sql-reference/data-types/)) — コンシューマが Kafka クラスターに割り当てられた回数。 -* `is_currently_used` ([UInt8](../../sql-reference/data-types/)) — コンシューマが現在使用中かどうかを示すフラグ。 -* `last_used` ([DateTime64(6)](../../sql-reference/data-types/)) — このコンシューマが最後に使用された時刻。 -* `rdkafka_stat` ([String](../../sql-reference/data-types/)) — ライブラリ内部の統計情報。無効にするには `statistics_interval_ms` を 0 に設定します。デフォルトは 3000(3 秒に 1 回)です。 - {/*AUTOGENERATED_END*/ } 例: @@ -48,7 +28,7 @@ FORMAT Vertical ``` ```text -Row 1: +行 1: ────── database: test table: kafka diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/licenses.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/licenses.md index ea820ea2103..59a9a76fb11 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/licenses.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/licenses.md @@ -1,26 +1,19 @@ --- -description: 'ClickHouse ソースコードの contrib ディレクトリに配置されているサードパーティ製ライブラリのライセンス情報を含むシステムテーブル。' +description: 'ClickHouse ソースコードの contrib ディレクトリにあるサードパーティライブラリのライセンスを格納しているシステムテーブル。' keywords: ['システムテーブル', 'ライセンス'] slug: /operations/system-tables/licenses title: 'system.licenses' doc_type: 'reference' --- - - # system.licenses -ClickHouse のソース内の [contrib](https://github.com/ClickHouse/ClickHouse/tree/master/contrib) ディレクトリに配置されているサードパーティライブラリのライセンスが格納されています。 +ClickHouse のソースコード内にある [contrib](https://github.com/ClickHouse/ClickHouse/tree/master/contrib) ディレクトリに含まれるサードパーティライブラリのライセンスが格納されています。 列: {/*AUTOGENERATED_START*/ } -* `library_name` ([String](../../sql-reference/data-types/)) — ライブラリ名。 -* `license_type` ([String](../../sql-reference/data-types/)) — ライセンスの種類(例: Apache、MIT)。 -* `license_path` ([String](../../sql-reference/data-types/)) — ライセンス本文を含むファイルへのパス。 -* `license_text` ([String](../../sql-reference/data-types/)) — ライセンス本文。 - {/*AUTOGENERATED_END*/ } **例** diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/merge_tree_settings.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/merge_tree_settings.md index 1a365abd110..2bddfd2d439 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/merge_tree_settings.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/merge_tree_settings.md @@ -1,41 +1,19 @@ --- -description: 'MergeTree テーブルの設定に関する情報を格納するシステムテーブル。' -keywords: ['システムテーブル', 'merge_tree_settings'] +description: 'MergeTree テーブルの設定に関する情報を格納する system テーブル。' +keywords: ['system table', 'merge_tree_settings'] slug: /operations/system-tables/merge_tree_settings title: 'system.merge_tree_settings' -doc_type: 'リファレンス' +doc_type: 'reference' --- - - # system.merge_tree_settings -`MergeTree` テーブルの設定に関する情報を含みます。 +`MergeTree` テーブルの設定に関する情報を保持します。 列: {/*AUTOGENERATED_START*/ } -* `name` ([String](../../sql-reference/data-types/)) — 設定名。 -* `value` ([String](../../sql-reference/data-types/)) — 設定値。 -* `default` ([String](../../sql-reference/data-types/)) — 設定のデフォルト値。 -* `changed` ([UInt8](../../sql-reference/data-types/)) — 設定が設定ファイルで明示的に定義されたか、または明示的に変更された場合は 1。 -* `description` ([String](../../sql-reference/data-types/)) — 設定の説明。 -* `min` ([Nullable(String)](../../sql-reference/data-types/)) — 制約によって設定されている場合の、この設定の最小値。最小値がない場合は NULL を含みます。 -* `max` ([Nullable(String)](../../sql-reference/data-types/)) — 制約によって設定されている場合の、この設定の最大値。最大値がない場合は NULL を含みます。 -* `disallowed_values` ([Array(String)](../../sql-reference/data-types/)) — 許可されていない値のリスト。 -* `readonly` ([UInt8](../../sql-reference/data-types/)) — 現在のユーザーが設定を変更できるかどうかを示します。0 — 現在のユーザーは設定を変更できる、1 — 現在のユーザーは設定を変更できない。 -* `type` ([String](../../sql-reference/data-types/)) — 設定の型(実装依存の文字列値)。 -* `is_obsolete` ([UInt8](../../sql-reference/data-types/)) — 設定が廃止されているかどうかを示します。 -* `tier` ([Enum8('Production' = 0, 'Obsolete' = 4, 'Experimental' = 8, 'Beta' = 12)](../../sql-reference/data-types/)) — - この機能のサポートレベル。ClickHouse の機能はティアに整理されており、その時点での開発状況と、 - 利用時に期待できる性質に応じて区分されています。 - -- PRODUCTION: 機能は安定しており、安全に使用でき、他の PRODUCTION 機能との相互作用に問題はありません。 -- BETA: 機能は安定しており安全です。ただし、他の機能と組み合わせて使用した場合の結果は不明であり、正しさは保証されません。テストおよび報告を歓迎します。 -- EXPERIMENTAL: 機能は開発中です。開発者および ClickHouse の愛好家のみを対象としています。機能が動作するかどうかは不明であり、いつでも削除される可能性があります。 -- OBSOLETE: もはやサポートされていません。すでに削除されているか、今後のリリースで削除される予定です。 - {/*AUTOGENERATED_END*/ } **例** @@ -58,7 +36,7 @@ name: min_compress_block_size value: 0 default: 0 changed: 0 -description: グラニュール書き込み時に、バッファ内の保留中の未圧縮データのサイズが指定された閾値以上の場合、データを圧縮します。この設定が未指定の場合は、対応するグローバル設定が使用されます。 +description: グラニュール書き込み時に、バッファ内の未圧縮データのサイズが指定された閾値以上の場合、データを圧縮します。この設定が未指定の場合は、対応するグローバル設定が使用されます。 min: ᴺᵁᴸᴸ max: ᴺᵁᴸᴸ readonly: 0 @@ -72,7 +50,7 @@ name: max_compress_block_size value: 0 default: 0 changed: 0 -description: バッファ内の保留中の未圧縮データのサイズが指定された閾値以上の場合、データを圧縮します。現在のグラニュールが未完了の場合でも、データブロックは圧縮されます。この設定が未指定の場合は、対応するグローバル設定が使用されます。 +description: バッファ内の未圧縮データのサイズが指定された閾値以上の場合、データを圧縮します。現在のグラニュールが未完了の場合でも、データブロックは圧縮されます。この設定が未指定の場合は、対応するグローバル設定が使用されます。 min: ᴺᵁᴸᴸ max: ᴺᵁᴸᴸ readonly: 0 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/merges.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/merges.md index f3fe819bd27..18744dd8fe1 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/merges.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/merges.md @@ -1,6 +1,6 @@ --- -description: 'MergeTree ファミリーのテーブルで現在進行中のマージおよびパーツのミューテーション(変更処理)に関する情報を含む system テーブル。' -keywords: ['system テーブル', 'マージ'] +description: 'MergeTree ファミリーに属するテーブルに対して現在実行中のマージおよびパーツのミューテーションに関する情報を含む system テーブル。' +keywords: ['system テーブル', 'マージ処理'] slug: /operations/system-tables/merges title: 'system.merges' doc_type: 'reference' @@ -13,35 +13,10 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -MergeTree ファミリーのテーブルに対して、現在進行中のマージおよびパーツのミューテーション(mutation)に関する情報を含みます。 +MergeTree ファミリーのテーブルに対して現在実行中のマージおよびパーツのミューテーションに関する情報が含まれます。 列: {/*AUTOGENERATED_START*/ } -* `database` ([String](../../sql-reference/data-types/)) — テーブルが属しているデータベース名。 -* `table` ([String](../../sql-reference/data-types/)) — テーブル名。 -* `elapsed` ([Float64](../../sql-reference/data-types/)) — マージ開始からの経過時間(秒)。 -* `progress` ([Float64](../../sql-reference/data-types/)) — 完了した処理の割合(0 から 1)。 -* `num_parts` ([UInt64](../../sql-reference/data-types/)) — マージ対象となるパーツ数。 -* `source_part_names` ([Array(String)](../../sql-reference/data-types/)) — ソースパーツ名のリスト。 -* `result_part_name` ([String](../../sql-reference/data-types/)) — マージの結果として生成されるパーツ名。 -* `source_part_paths` ([Array(String)](../../sql-reference/data-types/)) — 各ソースパーツのパスのリスト。 -* `result_part_path` ([String](../../sql-reference/data-types/)) — マージの結果として生成されるパーツのパス。 -* `partition_id` ([String](../../sql-reference/data-types/)) — マージが実行されているパーティションの識別子。 -* `partition` ([String](../../sql-reference/data-types/)) — パーティション名。 -* `is_mutation` ([UInt8](../../sql-reference/data-types/)) — この処理がパーツのミューテーションである場合は 1。 -* `total_size_bytes_compressed` ([UInt64](../../sql-reference/data-types/)) — マージされたチャンク内の圧縮データの合計サイズ。 -* `total_size_bytes_uncompressed` ([UInt64](../../sql-reference/data-types/)) — マージされたチャンク内の非圧縮データの合計サイズ。 -* `total_size_marks` ([UInt64](../../sql-reference/data-types/)) — マージされたパーツ内のマークの総数。 -* `bytes_read_uncompressed` ([UInt64](../../sql-reference/data-types/)) — 読み込まれた非圧縮バイト数。 -* `rows_read` ([UInt64](../../sql-reference/data-types/)) — 読み込まれた行数。 -* `bytes_written_uncompressed` ([UInt64](../../sql-reference/data-types/)) — 書き込まれた非圧縮バイト数。 -* `rows_written` ([UInt64](../../sql-reference/data-types/)) — 書き込まれた行数。 -* `columns_written` ([UInt64](../../sql-reference/data-types/)) — 書き込まれた列数(Vertical マージアルゴリズムの場合)。 -* `memory_usage` ([UInt64](../../sql-reference/data-types/)) — マージ処理によるメモリ使用量。 -* `thread_id` ([UInt64](../../sql-reference/data-types/)) — マージ処理のスレッド ID。 -* `merge_type` ([String](../../sql-reference/data-types/)) — 現在のマージの種類。ミューテーションの場合は空。 -* `merge_algorithm` ([String](../../sql-reference/data-types/)) — 現在のマージで使用されているアルゴリズム。ミューテーションの場合は空。 - {/*AUTOGENERATED_END*/ } diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/metrics.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/metrics.md index d95d45c62ab..ccdbaf99ef4 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/metrics.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/metrics.md @@ -1,6 +1,6 @@ --- -description: 'その場で計算できる、または現在値を保持しているメトリクスを含むシステムテーブル。' -keywords: ['system table', 'メトリクス'] +description: '即時計算できる、または現在値を持つメトリクスを含むシステムテーブル。' +keywords: ['システムテーブル', 'メトリクス'] slug: /operations/system-tables/metrics title: 'system.metrics' doc_type: 'reference' @@ -13,19 +13,15 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -即時に算出できるメトリクス、または現在値を持つメトリクスを含みます。例えば、同時に処理されているクエリ数や現在のレプリカ遅延などです。このテーブルは常に最新の値を反映します。 +即座に計算できるメトリクス、または現在値を表すメトリクスを含みます。例えば、同時に処理されているクエリ数や、現在のレプリカ遅延などです。このテーブルの内容は常に最新です。 列: {/*AUTOGENERATED_START*/ } -* `metric` ([String](../../sql-reference/data-types/)) — メトリック名。 -* `value` ([Int64](../../sql-reference/data-types/)) — メトリックの値。 -* `description` ([String](../../sql-reference/data-types/)) — メトリックの説明。 - {/*AUTOGENERATED_END*/ } -サポートされているすべてのメトリクスの一覧は、[src/Common/CurrentMetrics.cpp](https://github.com/ClickHouse/ClickHouse/blob/master/src/Common/CurrentMetrics.cpp) で確認できます。 +サポートされているメトリクスの一覧は、ソースファイル [src/Common/CurrentMetrics.cpp](https://github.com/ClickHouse/ClickHouse/blob/master/src/Common/CurrentMetrics.cpp) で確認できます。 **例** @@ -35,16 +31,16 @@ SELECT * FROM system.metrics LIMIT 10 ```text ┌─metric───────────────────────────────┬─value─┬─description────────────────────────────────────────────────────────────┐ -│ Query │ 1 │ 実行中のクエリ数 │ -│ Merge │ 0 │ 実行中のバックグラウンドマージ数 │ -│ PartMutation │ 0 │ ミューテーション数(ALTER DELETE/UPDATE) │ -│ ReplicatedFetch │ 0 │ レプリカから取得中のデータパーツ数 │ -│ ReplicatedSend │ 0 │ レプリカへ送信中のデータパーツ数 │ -│ ReplicatedChecks │ 0 │ 整合性チェック中のデータパーツ数 │ -│ BackgroundMergesAndMutationsPoolTask │ 0 │ 関連バックグラウンドプール内のアクティブなマージとミューテーション数 │ -│ BackgroundFetchesPoolTask │ 0 │ 関連バックグラウンドプール内のアクティブなフェッチ数 │ -│ BackgroundCommonPoolTask │ 0 │ 関連バックグラウンドプール内のアクティブなタスク数 │ -│ BackgroundMovePoolTask │ 0 │ BackgroundProcessingPool内の移動用アクティブタスク数 │ +│ Query │ 1 │ 実行中のクエリ数 │ +│ Merge │ 0 │ 実行中のバックグラウンドマージ数 │ +│ PartMutation │ 0 │ ミューテーション数(ALTER DELETE/UPDATE) │ +│ ReplicatedFetch │ 0 │ レプリカから取得中のデータパーツ数 │ +│ ReplicatedSend │ 0 │ レプリカへ送信中のデータパーツ数 │ +│ ReplicatedChecks │ 0 │ 整合性チェック中のデータパーツ数 │ +│ BackgroundMergesAndMutationsPoolTask │ 0 │ 関連するバックグラウンドプール内のアクティブなマージとミューテーション数│ +│ BackgroundFetchesPoolTask │ 0 │ 関連するバックグラウンドプール内のアクティブなフェッチ数 │ +│ BackgroundCommonPoolTask │ 0 │ 関連するバックグラウンドプール内のアクティブなタスク数 │ +│ BackgroundMovePoolTask │ 0 │ BackgroundProcessingPool内の移動用アクティブタスク数 │ └──────────────────────────────────────┴───────┴────────────────────────────────────────────────────────────────────────┘ ``` @@ -61,23 +57,23 @@ Aggregator スレッドプール内のスレッド数。 ### TablesLoaderForegroundThreads {#tablesloaderforegroundthreads} -非同期ローダーのフォアグラウンドスレッドプール内のスレッド数。 +非同期ローダーのフォアグラウンドスレッドプールで使用されるスレッド数。 ### TablesLoaderForegroundThreadsActive {#tablesloaderforegroundthreadsactive} -タスクを実行中の非同期ローダーのフォアグラウンドスレッドプール内のスレッド数。 +タスクを実行中の非同期ローダー用フォアグラウンドスレッドプール内のスレッド数。 ### TablesLoaderBackgroundThreads {#tablesloaderbackgroundthreads} -非同期ローダーのバックグラウンドスレッドプール内のスレッド数。 +非同期ローダー用バックグラウンドスレッドプールのスレッド数。 ### TablesLoaderBackgroundThreadsActive {#tablesloaderbackgroundthreadsactive} -タスクを実行中の非同期ローダーのバックグラウンドスレッドプール内のスレッド数。 +非同期ローダーのバックグラウンドスレッドプールでタスクを実行中のスレッド数。 ### AsyncInsertCacheSize {#asyncinsertcachesize} -キャッシュ内の非同期挿入ハッシュ ID の数。 +キャッシュ内に保持されている非同期インサートのハッシュIDの数 ### AsynchronousInsertThreads {#asynchronousinsertthreads} @@ -85,133 +81,131 @@ AsynchronousInsert スレッドプール内のスレッド数。 ### AsynchronousInsertThreadsActive {#asynchronousinsertthreadsactive} -タスクを実行中の AsynchronousInsert スレッドプール内のスレッド数。 +タスクを実行している AsynchronousInsert スレッドプール内のスレッド数。 ### AsynchronousReadWait {#asynchronousreadwait} -非同期読み取りを待機しているスレッド数。 +非同期読み取りを待機中のスレッド数。 ### BackgroundBufferFlushSchedulePoolSize {#backgroundbufferflushschedulepoolsize} -BackgroundBufferFlushSchedulePool 内のタスク数の上限。 +BackgroundBufferFlushSchedulePool 内のタスク数の最大値 ### BackgroundBufferFlushSchedulePoolTask {#backgroundbufferflushschedulepooltask} -BackgroundBufferFlushSchedulePool 内のアクティブなタスク数。このプールは、定期的な Buffer フラッシュに使用されます。 +BackgroundBufferFlushSchedulePool 内のアクティブなタスク数。このプールは Buffer を定期的にフラッシュするために使用されます。 ### BackgroundCommonPoolSize {#backgroundcommonpoolsize} -関連付けられたバックグラウンドプール内のタスク数の上限。 +関連するバックグラウンドプールのタスク数の上限 ### BackgroundCommonPoolTask {#backgroundcommonpooltask} -関連付けられたバックグラウンドプール内のアクティブなタスク数。 +対応するバックグラウンドプール内のアクティブなタスク数 ### BackgroundDistributedSchedulePoolSize {#backgrounddistributedschedulepoolsize} -BackgroundDistributedSchedulePool 内のタスク数の上限。 +BackgroundDistributedSchedulePool 内のタスク数の上限 ### BackgroundDistributedSchedulePoolTask {#backgrounddistributedschedulepooltask} -BackgroundDistributedSchedulePool 内のアクティブなタスク数。このプールは、バックグラウンドで行われる分散送信に使用されます。 +BackgroundDistributedSchedulePool 内のアクティブなタスク数。このプールは、バックグラウンドで行われる分散送信処理に使用されます。 ### BackgroundFetchesPoolSize {#backgroundfetchespoolsize} -関連付けられたバックグラウンドプール内で同時に実行できるフェッチの上限数。 +関連するバックグラウンドプールでの同時フェッチ数の上限 ### BackgroundFetchesPoolTask {#backgroundfetchespooltask} -関連付けられたバックグラウンドプール内のアクティブなフェッチ数。 +関連するバックグラウンドプール内のアクティブなフェッチ数 ### BackgroundMergesAndMutationsPoolSize {#backgroundmergesandmutationspoolsize} -関連付けられたバックグラウンドプール内のアクティブなマージおよびミューテーションの上限数。 +関連するバックグラウンドプール内でアクティブなマージおよびミューテーション数の上限 ### BackgroundMergesAndMutationsPoolTask {#backgroundmergesandmutationspooltask} -関連付けられたバックグラウンドプール内のアクティブなマージおよびミューテーションの数。 +関連するバックグラウンドプール内のアクティブなマージおよびミューテーションの数 ### BackgroundMessageBrokerSchedulePoolSize {#backgroundmessagebrokerschedulepoolsize} -メッセージストリーミング用の BackgroundProcessingPool 内のタスク数の上限。 +メッセージストリーミング用 BackgroundProcessingPool におけるタスク数の上限 ### BackgroundMessageBrokerSchedulePoolTask {#backgroundmessagebrokerschedulepooltask} -メッセージストリーミング用の BackgroundProcessingPool 内のアクティブなタスク数。 +メッセージストリーミング向け BackgroundProcessingPool のアクティブタスク数 ### BackgroundMovePoolSize {#backgroundmovepoolsize} -移動処理用の BackgroundProcessingPool 内のタスク数の上限。 +移動処理用 BackgroundProcessingPool におけるタスク数の上限 ### BackgroundMovePoolTask {#backgroundmovepooltask} -移動処理用の BackgroundProcessingPool 内のアクティブなタスク数。 +移動処理用の BackgroundProcessingPool におけるアクティブなタスク数 ### BackgroundSchedulePoolSize {#backgroundschedulepoolsize} -BackgroundSchedulePool 内のタスク数の上限。このプールは、古いデータパーツの削除、データパーツの変更、レプリカの再初期化など、ReplicatedMergeTree の定期タスクに使用されます。 +BackgroundSchedulePool 内のタスク数の上限。このプールは、古いデータパーツのクリーンアップ、データパーツの ALTER、レプリカの再初期化など、`ReplicatedMergeTree` の定期的なタスクに使用されます。 ### BackgroundSchedulePoolTask {#backgroundschedulepooltask} -BackgroundSchedulePool 内のアクティブなタスク数。このプールは、古いデータパーツの削除、データパーツの変更、レプリカの再初期化など、ReplicatedMergeTree の定期タスクに使用されます。 +BackgroundSchedulePool 内のアクティブなタスク数です。このプールは、古いデータパーツの削除、データパーツに対する ALTER 操作、レプリカの再初期化など、ReplicatedMergeTree の定期タスクに使用されます。 ### BackupsIOThreads {#backupsiothreads} -BackupsIO スレッドプール内のスレッド数。 +BackupsIO スレッドプールのスレッド数。 ### BackupsIOThreadsActive {#backupsiothreadsactive} -タスクを実行中の BackupsIO スレッドプール内のスレッド数。 +BackupsIO スレッドプール内でタスクを実行中のスレッド数。 ### BackupsThreads {#backupsthreads} -BACKUP 用スレッドプール内のスレッド数。 +BACKUP用のスレッドプール内のスレッド数。 ### BackupsThreadsActive {#backupsthreadsactive} -タスクを実行中の BACKUP 用スレッドプール内のスレッド数。 +BACKUP タスクを実行中のスレッドプール内のスレッド数。 ### BrokenDistributedFilesToInsert {#brokendistributedfilestoinsert} -Distributed テーブルへの非同期挿入用ファイルのうち、破損としてマークされたファイル数。このメトリクスは起動時に 0 から開始します。各シャードのファイル数が合算されます。 +非同期で Distributed テーブルに挿入するためのファイルのうち、破損としてマークされたファイル数。このメトリクス値は起動時に 0 から開始します。各シャードごとのファイル数を合算した値です。 ### CacheDetachedFileSegments {#cachedetachedfilesegments} -存在するデタッチ済みキャッシュファイルセグメントの数。 +既存の切り離されたキャッシュファイルセグメントの数 ### CacheDictionaryThreads {#cachedictionarythreads} -CacheDictionary スレッドプール内のスレッド数。 +CacheDictionary のスレッドプール内のスレッド数。 ### CacheDictionaryThreadsActive {#cachedictionarythreadsactive} - - タスクを実行中の CacheDictionary スレッドプール内のスレッド数。 ### CacheDictionaryUpdateQueueBatches {#cachedictionaryupdatequeuebatches} -CacheDictionary の更新キュー内に存在する「バッチ」(キーの集合)の数。 +CacheDictionary における更新キュー内の「バッチ」(キー集合)の数。 ### CacheDictionaryUpdateQueueKeys {#cachedictionaryupdatequeuekeys} -CacheDictionary の更新キュー内に存在するキーの正確な数。 +CacheDictionary の更新キュー内にあるキーの正確な数。 ### CacheFileSegments {#cachefilesegments} -既存のキャッシュファイルセグメントの数。 +既存のキャッシュファイルセグメント数 ### ContextLockWait {#contextlockwait} -Context 内でロック待ちをしているスレッド数。このロックはグローバルロック。 +Context 内でロック獲得待ちのスレッド数。これはグローバルロックです。 ### DDLWorkerThreads {#ddlworkerthreads} -ON CLUSTER クエリ用の DDLWorker スレッドプール内のスレッド数。 +ON CLUSTER クエリに対応する DDLWorker スレッドプールのスレッド数。 ### DDLWorkerThreadsActive {#ddlworkerthreadsactive} -ON CLUSTER クエリ用の DDLWorker スレッドプール内でタスクを実行中のスレッド数。 +`ON CLUSTER` クエリのタスクを実行している `DDLWORKER` スレッドプール内のスレッド数。 ### DatabaseCatalogThreads {#databasecatalogthreads} @@ -219,67 +213,67 @@ DatabaseCatalog スレッドプール内のスレッド数。 ### DatabaseCatalogThreadsActive {#databasecatalogthreadsactive} -DatabaseCatalog スレッドプール内でタスクを実行中のスレッド数。 +タスクを実行中の DatabaseCatalog スレッドプール内のスレッド数。 ### DatabaseOnDiskThreads {#databaseondiskthreads} -DatabaseOnDisk スレッドプール内のスレッド数。 +DatabaseOnDisk のスレッドプール内のスレッド数。 ### DatabaseOnDiskThreadsActive {#databaseondiskthreadsactive} -DatabaseOnDisk スレッドプール内でタスクを実行中のスレッド数。 +タスクを実行している DatabaseOnDisk スレッドプール内のスレッド数。 ### DelayedInserts {#delayedinserts} -MergeTree テーブルのあるパーティションでアクティブなデータパーツ数が多すぎるためにスロットリングされている INSERT クエリの数。 +MergeTree テーブルのパーティションでアクティブなデータパーツ数が多すぎるためにスロットルされた INSERT クエリの数。 ### DestroyAggregatesThreads {#destroyaggregatesthreads} -集約状態の破棄用スレッドプール内のスレッド数。 +集約状態の破棄を行うスレッドプールのスレッド数。 ### DestroyAggregatesThreadsActive {#destroyaggregatesthreadsactive} -集約状態の破棄用スレッドプール内でタスクを実行中のスレッド数。 +集約状態の破棄タスクを実行するスレッドプール内のスレッド数。 ### DictCacheRequests {#dictcacherequests} -キャッシュ型ディクショナリのデータソースに対して送信中のリクエスト数。 +キャッシュ型ディクショナリのデータソースに対する処理中のリクエスト数。 ### DiskObjectStorageAsyncThreads {#diskobjectstorageasyncthreads} -DiskObjectStorage 用の非同期スレッドプール内のスレッド数。 +DiskObjectStorage の非同期スレッドプールのスレッド数。 ### DiskObjectStorageAsyncThreadsActive {#diskobjectstorageasyncthreadsactive} -DiskObjectStorage 用の非同期スレッドプール内でタスクを実行中のスレッド数。 +DiskObjectStorage の非同期スレッドプールでタスクを実行中のスレッド数。 ### DiskSpaceReservedForMerge {#diskspacereservedformerge} -現在実行中のバックグラウンドマージのために予約されているディスク容量。現在マージ中のパーツ合計サイズよりわずかに多くなる。 +バックグラウンドで実行中のマージ処理のために予約されているディスクスペース。現在マージ中のパーツの合計サイズよりもわずかに多めに確保されます。 ### DistributedFilesToInsert {#distributedfilestoinsert} -Distributed テーブルへの非同期挿入のために処理待ちとなっているファイル数。各シャードごとのファイル数の合計。 +Distributed テーブルへの非同期挿入で処理待ちとなっているファイル数。シャードごとのファイル数を合計した値。 ### DistributedSend {#distributedsend} -Distributed テーブルに対して INSERT されたデータを送信しているリモートサーバーへの接続数。同期・非同期モードの両方を含む。 +Distributed テーブルに対して INSERT されたデータを送信するリモートサーバーへの接続数。同期モードおよび非同期モードの両方を対象とする。 ### EphemeralNode {#ephemeralnode} -ZooKeeper で保持しているエフェメラル(一時)ノードの数。 +ZooKeeper に保持されているエフェメラルノードの数。 ### FilesystemCacheElements {#filesystemcacheelements} -ファイルシステムキャッシュ要素(ファイルセグメント)。 +ファイルシステムキャッシュ要素(ファイルセグメント) ### FilesystemCacheReadBuffers {#filesystemcachereadbuffers} -アクティブなキャッシュバッファの数。 +アクティブなキャッシュバッファの数 ### FilesystemCacheSize {#filesystemcachesize} -ファイルシステムキャッシュのサイズ(バイト単位)。 +ファイルシステムキャッシュのサイズ(バイト単位) ### QueryCacheBytes {#querycachebytes} @@ -287,49 +281,45 @@ ZooKeeper で保持しているエフェメラル(一時)ノードの数。 ### QueryCacheEntries {#querycacheentries} -クエリキャッシュ内のエントリ総数。 +クエリキャッシュ内のエントリー総数。 ### UncompressedCacheBytes {#uncompressedcachebytes} -非圧縮キャッシュの合計サイズ(バイト単位)。非圧縮キャッシュは通常パフォーマンスを改善せず、ほとんどの場合は使用を避けるべき。 +非圧縮キャッシュの合計サイズ(バイト単位)。非圧縮キャッシュは通常パフォーマンス向上には寄与しないため、使用は極力避けるべきです。 ### UncompressedCacheCells {#uncompressedcachecells} ### CompiledExpressionCacheBytes {#compiledexpressioncachebytes} -JIT コンパイルされたコードのキャッシュに使用されている合計バイト数。 +JIT コンパイル済みコードのキャッシュに使用されている総バイト数。 ### CompiledExpressionCacheCount {#compiledexpressioncachecount} -JIT コンパイルされたコードのキャッシュ内のエントリ総数。 +JIT コンパイルされたコードのキャッシュ内のエントリ総数です。 ### MMapCacheCells {#mmapcachecells} -`mmap`(メモリマップ)で開かれているファイル数。これは、設定 `local_filesystem_read_method` が `mmap` に設定されたクエリで使用される。`mmap` で開かれたファイルは、高コストな TLB フラッシュを避けるためキャッシュに保持される。 +`mmap`(メモリマップ)で開かれているファイル数。これは、設定 `local_filesystem_read_method` が `mmap` に設定されているクエリで使用されます。`mmap` で開かれたファイルは、高コストな TLB フラッシュを回避するためにキャッシュに保持されます。 ### MarkCacheBytes {#markcachebytes} -マークキャッシュの合計サイズ(バイト単位)。 +マークキャッシュの合計サイズ(バイト単位) ### MarkCacheFiles {#markcachefiles} -マークキャッシュ内にキャッシュされているマークファイルの総数。 +マークキャッシュに格納されているマークファイルの総数 ### GlobalThread {#globalthread} -グローバルスレッドプール内のスレッド数。 +グローバルスレッドプールのスレッド数。 ### GlobalThreadActive {#globalthreadactive} -グローバルスレッドプール内でタスクを実行中のスレッド数。 +グローバルスレッドプールでタスクを実行しているスレッド数。 ### HTTPConnection {#httpconnection} -HTTP サーバーへの接続数。 - -### HashedDictionaryThreads {#hasheddictionarythreads} - - +HTTP サーバーへの接続数 ### HashedDictionaryThreads {#hasheddictionarythreads} @@ -337,35 +327,35 @@ HashedDictionary スレッドプール内のスレッド数。 ### HashedDictionaryThreadsActive {#hasheddictionarythreadsactive} -タスクを実行中の HashedDictionary スレッドプール内のスレッド数。 +HashedDictionary のスレッドプールでタスクを実行中のスレッド数。 ### IOPrefetchThreads {#ioprefetchthreads} -IO プリフェッチスレッドプール内のスレッド数。 +IOプリフェッチ用スレッドプール内のスレッド数。 ### IOPrefetchThreadsActive {#ioprefetchthreadsactive} -タスクを実行中の IO プリフェッチスレッドプール内のスレッド数。 +IO プリフェッチスレッドプールで現在タスクを実行しているスレッド数。 ### IOThreads {#iothreads} -IO スレッドプール内のスレッド数。 +IOスレッドプール内のスレッド数。 ### IOThreadsActive {#iothreadsactive} -タスクを実行中の IO スレッドプール内のスレッド数。 +タスクを実行している IO スレッドプール内のスレッド数。 ### IOUringInFlightEvents {#iouringinflightevents} -処理中(in flight)の io_uring SQE の数。 +処理中の io_uring SQEの数 ### IOUringPendingEvents {#iouringpendingevents} -送信待ちの io_uring SQE の数。 +送信待ちの io_uring SQE 数 ### IOWriterThreads {#iowriterthreads} -IO ライタースレッドプール内のスレッド数。 +IO writer スレッドプール内のスレッド数。 ### IOWriterThreadsActive {#iowriterthreadsactive} @@ -373,83 +363,83 @@ IO ライタースレッドプール内のスレッド数。 ### InterserverConnection {#interserverconnection} -パーツを取得するために他のレプリカから確立されている接続数。 +他のレプリカがパーツを取得するために確立している接続数 ### KafkaAssignedPartitions {#kafkaassignedpartitions} -Kafka テーブルに現在割り当てられているパーティション数。 +Kafka テーブルに現在割り当てられているパーティション数 ### KafkaBackgroundReads {#kafkabackgroundreads} -現在動作中のバックグラウンドリードの数(Kafka からマテリアライズドビューを構築しているもの)。 +現在動作中のバックグラウンド読み取りの数(Kafka からマテリアライズドビューを更新している処理の数) ### KafkaConsumers {#kafkaconsumers} -アクティブな Kafka コンシューマーの数。 +アクティブな Kafka コンシューマーの数 ### KafkaConsumersInUse {#kafkaconsumersinuse} -現在、直接またはバックグラウンドリードで使用されているコンシューマーの数。 +直接またはバックグラウンドでの読み出しに現在使用されているコンシューマーの数 ### KafkaConsumersWithAssignment {#kafkaconsumerswithassignment} -何らかのパーティションが割り当てられているアクティブな Kafka コンシューマーの数。 +パーティションが割り当てられているアクティブな Kafka コンシューマーの数。 ### KafkaLibrdkafkaThreads {#kafkalibrdkafkathreads} -アクティブな librdkafka スレッドの数。 +アクティブな librdkafka スレッド数 ### KafkaProducers {#kafkaproducers} -作成済みのアクティブな Kafka プロデューサーの数。 +作成済みのアクティブな Kafka プロデューサー数 ### KafkaWrites {#kafkawrites} -Kafka への実行中の INSERT の数。 +現在実行中の Kafka への INSERT の数 ### KeeperAliveConnections {#keeperaliveconnections} -有効な接続数。 +有効な接続数 ### KeeperOutstandingRequests {#keeperoutstandingrequests} -未処理リクエスト数。 +未処理リクエスト数 ### LocalThread {#localthread} -ローカルスレッドプール内のスレッド数。ローカルスレッドプール内のスレッドはグローバルスレッドプールから取得されます。 +ローカルスレッドプール内のスレッド数です。ローカルスレッドプール内のスレッドは、グローバルスレッドプールから供給されます。 ### LocalThreadActive {#localthreadactive} -タスクを実行中のローカルスレッドプール内のスレッド数。 +ローカルのスレッドプールでタスクを実行しているスレッドの数。 ### MMappedAllocBytes {#mmappedallocbytes} -mmapped アロケーションのバイト数合計。 +mmap によるアロケーションの合計バイト数 ### MMappedAllocs {#mmappedallocs} -mmapped アロケーションの総数。 +mmap によるメモリ割り当ての総数 ### MMappedFileBytes {#mmappedfilebytes} -mmapped ファイル領域のサイズ合計。 +メモリマップされたファイル領域の合計サイズ。 ### MMappedFiles {#mmappedfiles} -mmapped ファイルの総数。 +メモリマップファイルの総数。 ### MarksLoaderThreads {#marksloaderthreads} -マークをロードするためのスレッドプール内のスレッド数。 +マーク読み込み用スレッドプールのスレッド数。 ### MarksLoaderThreadsActive {#marksloaderthreadsactive} -タスクを実行中の、マークをロードするためのスレッドプール内のスレッド数。 +マークを読み込むためのスレッドプール内で、タスクを実行中のスレッド数。 ### MaxDDLEntryID {#maxddlentryid} -DDLWorker が処理した DDL エントリ ID の最大値。 +DDLWorker によって処理された DDL エントリの最大 ID。 ### MaxPushedDDLEntryID {#maxpushedddlentryid} @@ -457,23 +447,23 @@ DDLWorker が ZooKeeper にプッシュした DDL エントリ ID の最大値 ### MemoryTracking {#memorytracking} -サーバーによって割り当てられたメモリ総量(バイト単位)。 +サーバーによって割り当てられたメモリの総バイト数。 ### Merge {#merge} -実行中のバックグラウンドマージの数。 +実行中のバックグラウンドマージ数 ### MergeTreeAllRangesAnnouncementsSent {#mergetreeallrangesannouncementssent} -データパーツ集合(MergeTree テーブル用)について、リモートサーバーからイニシエーターサーバーに対して送信中(in flight)のアナウンスの現在の数。リモートサーバー側で計測されます。 +リモートサーバー側で、データパーツの集合(MergeTree テーブル用)についてイニシエータサーバー宛てに送信中のアナウンス数の現在値。計測はリモートサーバー側で行われます。 ### MergeTreeBackgroundExecutorThreads {#mergetreebackgroundexecutorthreads} -MergeTreeBackgroundExecutor スレッドプール内のスレッド数。 +MergeTreeBackgroundExecutor のスレッドプールのスレッド数。 ### MergeTreeBackgroundExecutorThreadsActive {#mergetreebackgroundexecutorthreadsactive} -タスクを実行中の MergeTreeBackgroundExecutor スレッドプール内のスレッド数。 +タスクを実行中の MergeTreeBackgroundExecutor スレッドプール内で稼働しているスレッド数。 ### MergeTreeDataSelectExecutorThreads {#mergetreedataselectexecutorthreads} @@ -485,121 +475,119 @@ MergeTreeDataSelectExecutor スレッドプール内のスレッド数。 ### MergeTreePartsCleanerThreads {#mergetreepartscleanerthreads} -MergeTree パーツクリーナースレッドプール内のスレッド数。 - - +MergeTree のパーツクリーナースレッドプール内のスレッド数。 ### MergeTreePartsCleanerThreadsActive {#mergetreepartscleanerthreadsactive} -タスクを実行中の、MergeTree パーツクリーナー用スレッドプール内のスレッド数。 +タスクを実行している MergeTree パーツクリーナー用スレッドプール内のスレッド数。 ### MergeTreePartsLoaderThreads {#mergetreepartsloaderthreads} -MergeTree パーツローダー用スレッドプール内のスレッド数。 +MergeTree パーツローダースレッドプール内のスレッド数。 ### MergeTreePartsLoaderThreadsActive {#mergetreepartsloaderthreadsactive} -タスクを実行中の、MergeTree パーツローダー用スレッドプール内のスレッド数。 +タスクを実行している MergeTree パーツローダー用スレッドプール内のスレッド数。 ### MergeTreeReadTaskRequestsSent {#mergetreereadtaskrequestssent} -リモートサーバーから読み取りタスクを選択するために(MergeTree テーブル用)発行元サーバーへ送信中のコールバックリクエスト数(現在の数)。リモートサーバー側で計測されます。 +リモートサーバーから開始側サーバーに対して、読み取りタスク(MergeTree テーブル用)を選択するために送信されるコールバックリクエストのうち、現在処理中のものの数。リモートサーバー側で計測されます。 ### Move {#move} -現在実行中の MOVE 操作数。 +現在実行中の Move の数 ### MySQLConnection {#mysqlconnection} -MySQL プロトコルを使用しているクライアント接続数。 +MySQL プロトコルを使用しているクライアント接続数 ### NetworkReceive {#networkreceive} -ネットワークからデータを受信しているスレッド数。ClickHouse 関連のネットワーク処理のみが含まれ、サードパーティライブラリによるものは含まれません。 +ネットワークからデータを受信するスレッド数です。ClickHouse に関連するネットワーク処理のみが対象で、サードパーティライブラリによるものは含まれません。 ### NetworkSend {#networksend} -ネットワークへデータを送信しているスレッド数。ClickHouse 関連のネットワーク処理のみが含まれ、サードパーティライブラリによるものは含まれません。 +ネットワークへデータを送信しているスレッド数。ClickHouse 関連のネットワーク処理のみが対象で、サードパーティライブラリによるものは含まれません。 ### OpenFileForRead {#openfileforread} -読み取り用にオープンされているファイル数。 +読み取り用に開かれているファイル数 ### OpenFileForWrite {#openfileforwrite} -書き込み用にオープンされているファイル数。 +書き込みのために開かれているファイル数 ### ParallelFormattingOutputFormatThreads {#parallelformattingoutputformatthreads} -ParallelFormattingOutputFormatThreads スレッドプール内のスレッド数。 +ParallelFormattingOutputFormatThreads のスレッドプール内のスレッド数。 ### ParallelFormattingOutputFormatThreadsActive {#parallelformattingoutputformatthreadsactive} -タスクを実行中の、ParallelFormattingOutputFormatThreads スレッドプール内のスレッド数。 +タスクを実行中の ParallelFormattingOutputFormatThreads スレッドプール内で稼働しているスレッド数。 ### PartMutation {#partmutation} -ミューテーション(ALTER DELETE/UPDATE)の数。 +ミューテーション(ALTER DELETE/UPDATE)の実行回数 ### PartsActive {#partsactive} -現在および今後の SELECT で使用されるアクティブなデータパーツ数。 +現在および今後実行される SELECT で使用されるアクティブなデータパーツ。 ### PartsCommitted {#partscommitted} -非推奨。PartsActive を参照してください。 +非推奨です。PartsActive を参照してください。 ### PartsCompact {#partscompact} -コンパクトパーツ数。 +Compact 形式のパーツ。 ### PartsDeleteOnDestroy {#partsdeleteondestroy} -別のディスクに移動され、自身のデストラクタ内で削除されるべきパーツ数。 +パートは別のディスクに移動されており、自身のデストラクタで削除されるべきです。 ### PartsDeleting {#partsdeleting} -参照カウンタが 1 の非アクティブなデータパーツで、現在クリーナーによって削除中のものの数。 +識別用参照カウンタを持つ非アクティブなデータパーツで、現在クリーンアップ処理により削除中の状態です。 ### PartsOutdated {#partsoutdated} -非アクティブなデータパーツだが、現在の SELECT のみで使用される可能性があり、SELECT の完了後に削除可能なものの数。 +アクティブなデータパーツではありませんが、現在実行中の `SELECT` によってのみ使用される可能性があります。`SELECT` が完了すると削除できる場合があります。 ### PartsPreActive {#partspreactive} -`data_parts` 内には存在するが、SELECT では使用されていないパーツ数。 +パーツは `data_parts` 内に存在しますが、`SELECT` クエリでは使用されません。 ### PartsPreCommitted {#partsprecommitted} -非推奨。PartsPreActive を参照してください。 +非推奨です。PartsPreActive を参照してください。 ### PartsTemporary {#partstemporary} -現在生成中であり、`data_parts` リストには含まれていないパーツ数。 +パーツは現在生成中で、まだ `data_parts` リストには含まれていません。 ### PartsWide {#partswide} -ワイドパーツ数。 +Wide 形式のパーツです。 ### PendingAsyncInsert {#pendingasyncinsert} -フラッシュ待ちの非同期 INSERT の数。 +フラッシュされるのを待っている非同期挿入の数。 ### PostgreSQLConnection {#postgresqlconnection} -PostgreSQL プロトコルを使用しているクライアント接続数。 +PostgreSQL プロトコルを使用しているクライアント接続数 -### Query {#query} +### クエリ {#query} -実行中のクエリ数。 +実行中のクエリ数 ### QueryPreempted {#querypreempted} -`priority` 設定により停止され待機中のクエリ数。 +`priority` 設定により停止されて待機状態となったクエリの数。 ### QueryThread {#querythread} -クエリ処理スレッド数。 +クエリ処理スレッド数 ### RWLockActiveReaders {#rwlockactivereaders} @@ -611,101 +599,99 @@ PostgreSQL プロトコルを使用しているクライアント接続数。 ### RWLockWaitingReaders {#rwlockwaitingreaders} -テーブルの RWLock で読み取り待ち状態のスレッド数。 +テーブルの RWLock に対して読み取りロックの取得を待機しているスレッド数。 ### RWLockWaitingWriters {#rwlockwaitingwriters} -テーブルの RWLock で書き込み待ち状態のスレッド数。 +テーブルの RWLock の書き込みロック獲得を待っているスレッド数。 -### Read {#read} +### 読み取り {#read} -進行中の読み取り系(read, pread, io_getevents など)システムコール数。 +実行中の read 系(`read`、`pread`、`io_getevents` など)システムコールの数 ### ReadTaskRequestsSent {#readtaskrequestssent} -リモートサーバーから読み取りタスクを選択するために(s3Cluster テーブル関数など用)発行元サーバーへ送信中のコールバックリクエスト数(現在の数)。リモートサーバー側で計測されます。 +リモートサーバーからイニシエーターサーバーへ、読み取りタスクを選択するために送信されているコールバックリクエストの現在の数(`s3Cluster` テーブル関数などにおいて)。リモートサーバー側で計測されます。 ### ReadonlyReplica {#readonlyreplica} -ZooKeeper セッション喪失後の再初期化、または ZooKeeper 未設定での起動により、現在 readonly 状態にある Replicated テーブルの数。 +ZooKeeper セッションの喪失後の再初期化、または ZooKeeper が構成されていない状態での起動により、現在読み取り専用状態になっている Replicated テーブルの数。 ### RemoteRead {#remoteread} -リモートリーダーで実行中の読み取り処理数。 +リモートリーダーで実行中の読み取り数 ### ReplicatedChecks {#replicatedchecks} -一貫性チェック中のデータパーツ数。 +一貫性を検証中のデータパーツ数 ### ReplicatedFetch {#replicatedfetch} -レプリカからフェッチ中のデータパーツ数。 +レプリカからフェッチ中のデータパーツ数 ### ReplicatedSend {#replicatedsend} -レプリカへ送信中のデータパーツ数。 - - +レプリカへ送信しているデータパーツの数 ### RestartReplicaThreads {#restartreplicathreads} -RESTART REPLICA スレッドプール内のスレッド数。 +RESTART REPLICA のスレッドプールで使用されるスレッド数。 ### RestartReplicaThreadsActive {#restartreplicathreadsactive} -タスクを実行中の RESTART REPLICA スレッドプール内のスレッド数。 +RESTART REPLICA スレッドプール内でタスクを実行中のスレッド数。 ### RestoreThreads {#restorethreads} -RESTORE 用スレッドプール内のスレッド数。 +RESTORE 用スレッドプールのスレッド数。 ### RestoreThreadsActive {#restorethreadsactive} -タスクを実行中の RESTORE 用スレッドプール内のスレッド数。 +RESTORE のタスクを実行するスレッドプール内のスレッド数。 -### Revision {#revision} +### リビジョン {#revision} -サーバーのリビジョン。パッチリリースを除き、各リリースまたはリリース候補ごとに増加する数値。 +サーバーのリビジョンです。パッチリリースを除き、各リリースまたはリリース候補ごとにインクリメントされる番号です。 ### S3Requests {#s3requests} -S3 リクエスト数。 +S3 リクエスト ### SendExternalTables {#sendexternaltables} -外部テーブル用のデータをリモートサーバーに送信している接続数。外部テーブルは、分散サブクエリを伴う GLOBAL IN および GLOBAL JOIN 演算子を実装するために使用されます。 +リモートサーバーに外部テーブル用のデータを送信している接続の数です。外部テーブルは、分散サブクエリで `GLOBAL IN` および `GLOBAL JOIN` 演算子を実装するために使用されます。 ### SendScalars {#sendscalars} -スカラー値用のデータをリモートサーバーに送信している接続数。 +スカラーデータをリモートサーバーに送信している接続数です。 ### StorageBufferBytes {#storagebufferbytes} -Buffer テーブルのバッファ内のバイト数。 +Buffer テーブルのバッファ内にあるバイト数 ### StorageBufferRows {#storagebufferrows} -Buffer テーブルのバッファ内の行数。 +Buffer テーブルのバッファにある行数 ### StorageDistributedThreads {#storagedistributedthreads} -StorageDistributed スレッドプール内のスレッド数。 +StorageDistributed のスレッドプールのスレッド数。 ### StorageDistributedThreadsActive {#storagedistributedthreadsactive} -タスクを実行中の StorageDistributed スレッドプール内のスレッド数。 +タスクを実行している StorageDistributed スレッドプール内のスレッド数。 ### StorageHiveThreads {#storagehivethreads} -StorageHive スレッドプール内のスレッド数。 +StorageHive のスレッドプールにおけるスレッド数。 ### StorageHiveThreadsActive {#storagehivethreadsactive} -タスクを実行中の StorageHive スレッドプール内のスレッド数。 +タスクを実行している StorageHive スレッドプール内のスレッド数。 ### StorageS3Threads {#storages3threads} -StorageS3 スレッドプール内のスレッド数。 +StorageS3 のスレッドプールで使用されるスレッド数。 ### StorageS3ThreadsActive {#storages3threadsactive} @@ -713,93 +699,91 @@ StorageS3 スレッドプール内のスレッド数。 ### SystemReplicasThreads {#systemreplicasthreads} -system.replicas スレッドプール内のスレッド数。 +system.replicas のスレッドプール内のスレッド数。 ### SystemReplicasThreadsActive {#systemreplicasthreadsactive} -タスクを実行中の system.replicas スレッドプール内のスレッド数。 +system.replicas のスレッドプールでタスクを実行しているスレッド数。 ### TCPConnection {#tcpconnection} -TCP サーバー(ネイティブインターフェイスを持つクライアント)への接続数。サーバー間の分散クエリ接続も含まれます。 +TCP サーバー(ネイティブインターフェイスを使用するクライアント)への接続数。サーバー間の分散クエリ接続も含まれます。 ### TablesToDropQueueSize {#tablestodropqueuesize} -バックグラウンドでのデータ削除を待機している削除済みテーブルの数。 +バックグラウンドでのデータ削除を待っている削除対象テーブルの数。 ### TemporaryFilesForAggregation {#temporaryfilesforaggregation} -外部集約のために作成された一時ファイル数。 +外部集約で作成される一時ファイルの数 ### TemporaryFilesForJoin {#temporaryfilesforjoin} -JOIN 用に作成された一時ファイル数。 +JOIN 用に作成された一時ファイルの数 ### TemporaryFilesForSort {#temporaryfilesforsort} -外部ソートのために作成された一時ファイル数。 +外部ソートのために作成された一時ファイルの数 ### TemporaryFilesUnknown {#temporaryfilesunknown} -用途が不明な一時ファイル数。 +用途不明の一時ファイルの作成数 ### ThreadPoolFSReaderThreads {#threadpoolfsreaderthreads} -local_filesystem_read_method=threadpool 用スレッドプール内のスレッド数。 +local_filesystem_read_method=threadpool 使用時のスレッドプールのスレッド数。 ### ThreadPoolFSReaderThreadsActive {#threadpoolfsreaderthreadsactive} -タスクを実行中の local_filesystem_read_method=threadpool 用スレッドプール内のスレッド数。 +local_filesystem_read_method=threadpool のタスクを実行中のスレッドプール内のスレッド数。 ### ThreadPoolRemoteFSReaderThreads {#threadpoolremotefsreaderthreads} -remote_filesystem_read_method=threadpool 用スレッドプール内のスレッド数。 +remote_filesystem_read_method=threadpool の場合に使用されるスレッドプールのスレッド数。 ### ThreadPoolRemoteFSReaderThreadsActive {#threadpoolremotefsreaderthreadsactive} -タスクを実行中の remote_filesystem_read_method=threadpool 用スレッドプール内のスレッド数。 +remote_filesystem_read_method=threadpool で実行中のタスクを処理しているスレッドプール内のスレッド数。 ### ThreadsInOvercommitTracker {#threadsinovercommittracker} -OvercommitTracker 内で待機しているスレッド数。 +OvercommitTracker 内で待機中のスレッド数 ### TotalTemporaryFiles {#totaltemporaryfiles} -作成された一時ファイルの総数。 +作成された一時ファイル数 ### VersionInteger {#versioninteger} -サーバーのバージョンを base-1000 の単一の整数で表した値。たとえば、バージョン 11.22.33 は 11022033 に変換されます。 +サーバーのバージョンを、基数 1000(base-1000)の単一の整数値で表します。たとえば、バージョン 11.22.33 は 11022033 に変換されます。 ### Write {#write} -発行された書き込み(write, pwrite, io_getevents など)システムコールの数。 +fly における write(write、pwrite、io_getevents など)システムコールの回数 ### ZooKeeperRequest {#zookeeperrequest} -発行された ZooKeeper へのリクエスト数。 +処理中の ZooKeeper へのリクエスト数。 ### ZooKeeperSession {#zookeepersession} -ZooKeeper へのセッション(接続)数。1 つを超えてはなりません。複数の ZooKeeper 接続を使用すると、ZooKeeper の整合性モデルが許容する線形化されない動作(古い読み取り)によりバグを引き起こす可能性があるためです。 +ZooKeeper へのセッション(接続)の数。1 つを超えてはいけません。ZooKeeper の一貫性モデルは線形化可能性を満たさず(古い読み取りを許容している)ため、複数の接続を使用するとバグを引き起こす可能性があります。 ### ZooKeeperWatch {#zookeeperwatch} -ZooKeeper におけるウォッチ(イベント購読)の数。 +ZooKeeper 内のウォッチ数(イベントサブスクリプション数)。 ### ConcurrencyControlAcquired {#concurrencycontrolacquired} -取得された CPU スロットの総数。 - - +確保された CPU スロット数の合計。 ### ConcurrencyControlSoftLimit {#concurrencycontrolsoftlimit} -CPU スロット数に対するソフトリミットの値。 +CPU スロット数に対するソフトリミット値。 **関連項目** -- [system.asynchronous_metrics](/operations/system-tables/asynchronous_metrics) — 定期的に計算されるメトリクスを格納します。 -- [system.events](/operations/system-tables/events) — 発生したイベントの数を格納します。 -- [system.metric_log](/operations/system-tables/metric_log) — テーブル `system.metrics` および `system.events` のメトリクス値の履歴を格納します。 -- [Monitoring](../../operations/monitoring.md) — ClickHouse の監視の基本概念。 +- [system.asynchronous_metrics](/operations/system-tables/asynchronous_metrics) — 定期的に計算されるメトリクスが含まれます。 +- [system.events](/operations/system-tables/events) — 発生したイベントの数が含まれます。 +- [system.metric_log](/operations/system-tables/metric_log) — テーブル `system.metrics` と `system.events` のメトリクス値の履歴が含まれます。 +- [Monitoring](../../operations/monitoring.md) — ClickHouse モニタリングの基本概念について説明します。 \ No newline at end of file diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/moves.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/moves.md index 1876a2474e4..5e52dbfed01 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/moves.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/moves.md @@ -1,32 +1,20 @@ --- -description: '進行中の MergeTree テーブルにおけるデータパート移動に関する情報を含む - システムテーブル。各データパートの移動は 1 行で表されます。' -keywords: ['system テーブル', '移動'] +description: '進行中のデータパーツの移動に関する情報を含む MergeTree テーブルのシステムテーブル。各データパーツの移動は 1 行として表されます。' +keywords: ['システムテーブル', '移動'] slug: /operations/system-tables/moves title: 'system.moves' doc_type: 'reference' --- - - # system.moves -このテーブルには、[MergeTree](/engines/table-engines/mergetree-family/mergetree.md) テーブルにおける進行中の [データパーツの移動](/sql-reference/statements/alter/partition#move-partitionpart) に関する情報が含まれます。各データパーツの移動は 1 行で表されます。 +このテーブルには、[MergeTree](/engines/table-engines/mergetree-family/mergetree.md) テーブルにおける進行中の [データパート移動](/sql-reference/statements/alter/partition#move-partitionpart) に関する情報が含まれます。各データパートの移動は 1 行で表されます。 列: {/*AUTOGENERATED_START*/ } -* `database` ([String](../../sql-reference/data-types/)) — データベース名。 -* `table` ([String](../../sql-reference/data-types/)) — 移動中のデータパーツを含むテーブル名。 -* `elapsed` ([Float64](../../sql-reference/data-types/)) — データパーツの移動開始からの経過時間(秒)。 -* `target_disk_name` ([String](../../sql-reference/data-types/)) — データパーツの移動先ディスク名。 -* `target_disk_path` ([String](../../sql-reference/data-types/)) — ファイルシステム内におけるディスクのマウントポイントのパス。 -* `part_name` ([String](../../sql-reference/data-types/)) — 移動中のデータパーツ名。 -* `part_size` ([UInt64](../../sql-reference/data-types/)) — データパーツのサイズ。 -* `thread_id` ([UInt64](../../sql-reference/data-types/)) — 移動処理を実行しているスレッドの識別子。 - -{/* 自動生成ここまで */ } +{/*AUTOGENERATED_END*/ } **例** @@ -43,5 +31,5 @@ SELECT * FROM system.moves **関連項目** * [MergeTree](/engines/table-engines/mergetree-family/mergetree.md) テーブルエンジン -* [データストレージに複数のブロックデバイスを使用する](/engines/table-engines/mergetree-family/mergetree#table_engine-mergetree-multiple-volumes) +* [データストレージ向けに複数のブロックデバイスを使用する](/engines/table-engines/mergetree-family/mergetree#table_engine-mergetree-multiple-volumes) * [ALTER TABLE ... MOVE PART](/sql-reference/statements/alter/partition#move-partitionpart) コマンド diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/mutations.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/mutations.md index f7ce06cc84d..901d30b6541 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/mutations.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/mutations.md @@ -1,73 +1,69 @@ --- -description: 'MergeTree テーブルのミューテーションおよびその進行状況に関する情報を保持する system テーブルです。各ミューテーションコマンドは 1 行で表されます。' -keywords: ['system テーブル', 'ミューテーション'] +description: 'MergeTree テーブルに対する mutation(データ変更処理)とその進行状況に関する情報を含むシステムテーブルです。各 mutation コマンドは 1 行として表現されます。' +keywords: ['system table', 'mutations'] slug: /operations/system-tables/mutations title: 'system.mutations' doc_type: 'reference' --- - - # system.mutations -このテーブルには、[MergeTree](/engines/table-engines/mergetree-family/mergetree.md) テーブルに対する[ミューテーション](/sql-reference/statements/alter/index.md#mutations)と、その進行状況に関する情報が含まれます。各ミューテーションコマンドは 1 行で表現されます。 - +このテーブルには、[MergeTree](/engines/table-engines/mergetree-family/mergetree.md) テーブルに対する[ミューテーション](/sql-reference/statements/alter/index.md#mutations)とその進捗状況に関する情報が含まれます。各ミューテーションコマンドは 1 行として表されます。 +## 列: \{#columns\} -## Columns: {#columns} +- `database` ([String](/sql-reference/data-types/string.md)) — ミューテーションが適用されたデータベース名。 +- `table` ([String](/sql-reference/data-types/string.md)) — ミューテーションが適用されたテーブル名。 +- `mutation_id` ([String](/sql-reference/data-types/string.md)) — ミューテーションの ID。レプリケーテッドテーブルの場合、これらの ID は ClickHouse Keeper 内の `/mutations/` ディレクトリにある znode 名に対応します。非レプリケーテッドテーブルの場合、ID はテーブルのデータディレクトリ内のファイル名に対応します。 +- `command` ([String](/sql-reference/data-types/string.md)) — ミューテーションコマンド文字列(クエリ中の `ALTER TABLE [db.]table` 以降の部分)。 +- `create_time` ([DateTime](/sql-reference/data-types/datetime.md)) — ミューテーションコマンドが実行用に送信された日時。 +- `block_numbers.partition_id` ([Array](/sql-reference/data-types/array.md)([String](/sql-reference/data-types/string.md))) — レプリケーテッドテーブルのミューテーションの場合、パーティション ID を格納する配列(各パーティションにつき 1 レコード)。非レプリケーテッドテーブルのミューテーションの場合、この配列は空です。 +- `block_numbers.number` ([Array](/sql-reference/data-types/array.md)([Int64](/sql-reference/data-types/int-uint.md))) — レプリケーテッドテーブルのミューテーションの場合、各パーティションごとに 1 レコードを格納する配列で、ミューテーションによって取得されたブロック番号を含みます。パーティション内では、この番号より小さい番号を持つブロックを含むパーツのみがミューテートされます。非レプリケーテッドテーブルでは、すべてのパーティションにわたるブロック番号が単一のシーケンスを形成します。つまり、非レプリケーテッドテーブルのミューテーションでは、この列にはミューテーションによって取得された単一のブロック番号を持つ 1 レコードのみが含まれます。 +- `parts_in_progress_names` ([Array](/sql-reference/data-types/array.md)([String](/sql-reference/data-types/string.md))) — 現在ミューテート中のデータパーツの名前の配列。 +- `parts_to_do_names` ([Array](/sql-reference/data-types/array.md)([String](/sql-reference/data-types/string.md))) — ミューテーション完了のためにミューテートする必要があるデータパーツの名前の配列。 +- `parts_to_do` ([Int64](/sql-reference/data-types/int-uint.md)) — ミューテーション完了のためにミューテートする必要があるデータパーツの数。 +- `is_killed` ([UInt8](/sql-reference/data-types/int-uint.md)) — ミューテーションが kill されているかどうかを示します。**ClickHouse Cloud でのみ利用可能です。** -- `database` ([String](/sql-reference/data-types/string.md)) — ミューテーションが適用されたデータベースの名前。 -- `table` ([String](/sql-reference/data-types/string.md)) — ミューテーションが適用されたテーブルの名前。 -- `mutation_id` ([String](/sql-reference/data-types/string.md)) — ミューテーションのID。レプリケートされたテーブルの場合、これらのIDはClickHouse Keeperの`/mutations/`ディレクトリ内のznode名に対応します。レプリケートされていないテーブルの場合、IDはテーブルのデータディレクトリ内のファイル名に対応します。 -- `command` ([String](/sql-reference/data-types/string.md)) — ミューテーションコマンド文字列(`ALTER TABLE [db.]table`の後のクエリ部分)。 -- `create_time` ([DateTime](/sql-reference/data-types/datetime.md)) — ミューテーションコマンドが実行のために送信された日時。 -- `block_numbers.partition_id` ([Array](/sql-reference/data-types/array.md)([String](/sql-reference/data-types/string.md))) — レプリケートされたテーブルのミューテーションの場合、配列にはパーティションのID(各パーティションに1つのレコード)が含まれます。レプリケートされていないテーブルのミューテーションの場合、配列は空です。 -- `block_numbers.number` ([Array](/sql-reference/data-types/array.md)([Int64](/sql-reference/data-types/int-uint.md))) — レプリケートされたテーブルのミューテーションの場合、配列には各パーティションに対して1つのレコードが含まれ、ミューテーションによって取得されたブロック番号が格納されます。パーティション内では、この番号より小さい番号のブロックを含むパートのみがミューテーションされます。レプリケートされていないテーブルでは、すべてのパーティションのブロック番号が単一のシーケンスを形成します。つまり、レプリケートされていないテーブルのミューテーションの場合、この列にはミューテーションによって取得された単一のブロック番号を持つ1つのレコードが含まれます。 -- `parts_to_do_names` ([Array](/sql-reference/data-types/array.md)([String](/sql-reference/data-types/string.md))) — ミューテーションを完了するためにミューテーションする必要があるデータパートの名前の配列。 -- `parts_to_do` ([Int64](/sql-reference/data-types/int-uint.md)) — ミューテーションを完了するためにミューテーションする必要があるデータパートの数。 -- `is_killed` ([UInt8](/sql-reference/data-types/int-uint.md)) — ミューテーションが強制終了されたかどうかを示します。**ClickHouse Cloudでのみ利用可能です。** - -:::note -`is_killed=1`は、必ずしもミューテーションが完全に終了したことを意味するわけではありません。`is_killed=1`かつ`is_done=0`の状態が長期間続くことがあります。これは、別の長時間実行されているミューテーションが強制終了されたミューテーションをブロックしている場合に発生する可能性があります。これは正常な状況です。 +:::note +`is_killed=1` は、ミューテーションが完全に確定していることを必ずしも意味しません。`is_killed=1` かつ `is_done=0` の状態のまま長時間残り続けることがあります。これは、別の長時間実行中のミューテーションが kill されたミューテーションをブロックしている場合に発生します。この状況は想定された動作です。 ::: -- `is_done` ([UInt8](/sql-reference/data-types/int-uint.md)) — ミューテーションが完了しているかどうかを示すフラグ。可能な値: - - `1` ミューテーションが完了している場合、 - - `0` ミューテーションがまだ処理中の場合。 +- `is_done` ([UInt8](/sql-reference/data-types/int-uint.md)) — ミューテーションが完了しているかどうかを示すフラグ。取りうる値: + - ミューテーションが完了している場合は `1` + - ミューテーションがまだ進行中の場合は `0` :::note -`parts_to_do = 0`であっても、長時間実行されている`INSERT`クエリがミューテーションする必要がある新しいデータパートを作成するため、レプリケートされたテーブルのミューテーションがまだ完了していない可能性があります。 +`parts_to_do = 0` の場合でも、レプリケーテッドテーブルのミューテーションがまだ完了していない可能性があります。これは、新しいデータパーツを作成し、そのパーツをミューテートする必要がある長時間実行中の `INSERT` クエリが存在する場合に発生します。 ::: -一部のデータパートのミューテーションに問題があった場合、以下の列に追加情報が含まれます: - -- `latest_failed_part` ([String](/sql-reference/data-types/string.md)) — ミューテーションできなかった最新のパートの名前。 -- `latest_fail_time` ([DateTime](/sql-reference/data-types/datetime.md)) — 最新のパートミューテーション失敗の日時。 -- `latest_fail_reason` ([String](/sql-reference/data-types/string.md)) — 最新のパートミューテーション失敗の原因となった例外メッセージ。 +一部のデータパーツのミューテートに問題があった場合、次の列に追加情報が格納されます: +- `latest_failed_part` ([String](/sql-reference/data-types/string.md)) — ミューテートに失敗した最新のパーツ名。 +- `latest_fail_time` ([DateTime](/sql-reference/data-types/datetime.md)) — 最新のパーツミューテーション失敗の発生日時。 +- `latest_fail_reason` ([String](/sql-reference/data-types/string.md)) — 最新のパーツミューテーション失敗を引き起こした例外メッセージ。 -## ミューテーションの監視 {#monitoring-mutations} +## ミューテーションの監視 -`system.mutations`テーブルで進行状況を追跡するには、以下のクエリを使用します: +`system.mutations` テーブルの進捗状況を追跡するには、次のクエリを使用します。 ```sql SELECT * FROM clusterAllReplicas('cluster_name', 'system', 'mutations') WHERE is_done = 0 AND table = 'tmp'; --- or +-- もしくは SELECT * FROM clusterAllReplicas('cluster_name', 'system.mutations') WHERE is_done = 0 AND table = 'tmp'; ``` -注:これには`system.*`テーブルに対する読み取り権限が必要です。 +注意: これには `system.*` テーブルに対する読み取り権限が必要です。 -:::tip Cloudでの使用 -ClickHouse Cloudでは、各ノードの`system.mutations`テーブルにクラスタ内のすべてのミューテーションが含まれているため、`clusterAllReplicas`を使用する必要はありません。 +:::tip Cloud usage +ClickHouse Cloud では、各ノード上の `system.mutations` テーブルにクラスター内のすべての変更操作が含まれているため、`clusterAllReplicas` を使用する必要はありません。 ::: **関連項目** -- [ミューテーション](/sql-reference/statements/alter/index.md#mutations) -- [MergeTree](/engines/table-engines/mergetree-family/mergetree.md)テーブルエンジン -- [ReplicatedMergeTree](/engines/table-engines/mergetree-family/replication.md)ファミリー +* [Mutations](/sql-reference/statements/alter/index.md#mutations) +* [MergeTree](/engines/table-engines/mergetree-family/mergetree.md) テーブルエンジン +* [ReplicatedMergeTree](/engines/table-engines/mergetree-family/replication.md) ファミリー diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/processes.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/processes.md index 7a53f176521..bf168b2084b 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/processes.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/processes.md @@ -1,5 +1,5 @@ --- -description: '`SHOW PROCESSLIST` クエリを実装するために使用されるシステムテーブル。' +description: '`SHOW PROCESSLIST` クエリの実装に使用されるシステムテーブル。' keywords: ['システムテーブル', 'プロセス'] slug: /operations/system-tables/processes title: 'system.processes' @@ -11,59 +11,14 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; # system.processes - + -このシステムテーブルは、`SHOW PROCESSLIST` クエリの実装に使用されます。 +このシステムテーブルは、`SHOW PROCESSLIST` クエリを実装するために使用されます。 列: - - {/*AUTOGENERATED_START*/ } -* `is_initial_query` ([UInt8](../../sql-reference/data-types/)) — このクエリがユーザーから直接発行されたものか、分散クエリ実行の一部として ClickHouse サーバーによって発行されたものかを示します。 -* `user` ([String](../../sql-reference/data-types/)) — クエリを実行したユーザー。分散処理の場合、クエリはデフォルトユーザーとしてリモートサーバーに送信されることに注意してください。このフィールドには、このクエリ自体を実行したユーザー名が格納され、このクエリによって起動された別のクエリのユーザー名は含まれません。 -* `query_id` ([String](../../sql-reference/data-types/)) — クエリ ID(定義されている場合)。 -* `address` ([IPv6](../../sql-reference/data-types/)) — クエリが実行された送信元の IP アドレス。分散処理の場合も同様です。分散クエリがもともとどこから実行されたかを追跡するには、クエリ送信元サーバー上の system.processes を参照します。 -* `port` ([UInt16](../../sql-reference/data-types/)) — クエリが送信されたクライアントのポート番号。 -* `initial_user` ([String](../../sql-reference/data-types/)) — 分散クエリ実行において最初のクエリを実行したユーザーの名前。 -* `initial_query_id` ([String](../../sql-reference/data-types/)) — 分散クエリ実行時の初回クエリ ID。 -* `initial_address` ([IPv6](../../sql-reference/data-types/)) — 親クエリが実行された送信元の IP アドレス。 -* `initial_port` ([UInt16](../../sql-reference/data-types/)) — 親クエリを実行する際に使用されたクライアントポート。 -* `interface` ([UInt8](../../sql-reference/data-types/)) — クエリを送信する際に使用されたインターフェイス。TCP = 1、HTTP = 2、GRPC = 3、MYSQL = 4、POSTGRESQL = 5、LOCAL = 6、TCP_INTERSERVER = 7。 -* `os_user` ([String](../../sql-reference/data-types/)) — clickhouse-client を実行している OS のユーザー名。` -* `client_hostname` ([String](../../sql-reference/data-types/)) — clickhouse-client または他の TCP クライアントが実行されているクライアントマシンのホスト名。 -* `client_name` ([String](../../sql-reference/data-types/)) — clickhouse-client またはその他の TCP クライアントの名前。 -* `client_revision` ([UInt64](../../sql-reference/data-types/)) — clickhouse-client または他の TCP クライアントのリビジョン番号。 -* `client_version_major` ([UInt64](../../sql-reference/data-types/)) — clickhouse-client または別の TCP クライアントのメジャーバージョン番号。 -* `client_version_minor` ([UInt64](../../sql-reference/data-types/)) — clickhouse-client または他の TCP クライアントのマイナーバージョン。 -* `client_version_patch` ([UInt64](../../sql-reference/data-types/)) — clickhouse-client または別の TCP クライアントのバージョン番号のパッチ部分。 -* `http_method` ([UInt8](../../sql-reference/data-types/)) — クエリを開始した HTTP メソッド。取り得る値: 0 — クエリが TCP インターフェイスから実行された。1 — GET メソッドが使用された。2 — POST メソッドが使用された。 -* `http_user_agent` ([String](../../sql-reference/data-types/)) — HTTP クエリで送信された HTTP ヘッダー `User-Agent`。 -* `http_referer` ([String](../../sql-reference/data-types/)) — HTTP クエリで送信された Referer HTTP ヘッダー(クエリを実行したページの絶対または部分的な URL を含む)。 -* `forwarded_for` ([String](../../sql-reference/data-types/)) — HTTP クエリで送信された X-Forwarded-For HTTP ヘッダー。 -* `quota_key` ([String](../../sql-reference/data-types/)) — `quotas` 設定で指定されたクォータのキー(`keyed` を参照)。 -* `distributed_depth` ([UInt64](../../sql-reference/data-types/)) — クエリがサーバーノード間で内部的に再送された回数。 -* `elapsed` ([Float64](../../sql-reference/data-types/)) — リクエストの実行開始からの経過時間(秒)。 -* `is_cancelled` ([UInt8](../../sql-reference/data-types/)) — クエリがキャンセルされたかどうかを示します。 -* `is_all_data_sent` ([UInt8](../../sql-reference/data-types/)) — すべてのデータがクライアントに送信されたかどうか(つまり、サーバー側でクエリの実行が完了したかどうか)を示します。 -* `read_rows` ([UInt64](../../sql-reference/data-types/)) — テーブルから読み取られた行数。分散処理の場合、リクエスト元サーバーでは、すべてのリモートサーバーの合計値となります。 -* `read_bytes` ([UInt64](../../sql-reference/data-types/)) — テーブルから読み込まれた非圧縮バイト数。分散処理の場合、リクエスト元サーバーでは、すべてのリモートサーバー分を合計した値となります。 -* `total_rows_approx` ([UInt64](../../sql-reference/data-types/)) — 読み取られるべき行数のおおよその値。分散処理においては、要求元サーバー上では、すべてのリモートサーバー分を合計した値となる。処理対象となる新しいソースが判明した場合、リクエスト処理中に更新されることがある。 -* `written_rows` ([UInt64](../../sql-reference/data-types/)) — ストレージに書き込まれた行数。 -* `written_bytes` ([UInt64](../../sql-reference/data-types/)) — ストレージに書き込まれたバイト数。 -* `memory_usage` ([Int64](../../sql-reference/data-types/)) — クエリが使用する RAM の量。一部の専用メモリ領域は含まれない場合があります -* `peak_memory_usage` ([Int64](../../sql-reference/data-types/)) — 現在までの最大メモリ使用量。 -* `query` ([String](../../sql-reference/data-types/)) — クエリ文字列。INSERT の場合、挿入するデータは含まれません。 -* `normalized_query_hash` ([UInt64](../../sql-reference/data-types/)) — リテラル値のみが異なるクエリであれば同一になる数値ハッシュ値。 -* `query_kind` ([String](../../sql-reference/data-types/)) — クエリの種別(SELECT、INSERT など)。 -* `thread_ids` ([Array(UInt64)](../../sql-reference/data-types/)) — このクエリに参加したすべてのスレッドの識別子一覧。 -* `peak_threads_usage` ([UInt64](../../sql-reference/data-types/)) — 同時にクエリを実行しているスレッド数の最大値。 -* `ProfileEvents` ([Map(String, UInt64)](../../sql-reference/data-types/)) — このクエリに対して計算された ProfileEvents を示します。 -* `Settings` ([Map(String, String)](../../sql-reference/data-types/)) — 変更されたユーザーレベルの設定リスト。 -* `current_database` ([String](../../sql-reference/data-types/)) — 現在のデータベースの名前。 -* `is_internal` ([UInt8](../../sql-reference/data-types/)) — 内部的に実行される補助クエリかどうかを示します。 - {/*AUTOGENERATED_END*/ } ```sql @@ -71,7 +26,7 @@ SELECT * FROM system.processes LIMIT 10 FORMAT Vertical; ``` ```response -Row 1: +行 1: ────── is_initial_query: 1 user: default @@ -108,5 +63,5 @@ thread_ids: [67] ProfileEvents: {'Query':1,'SelectQuery':1,'ReadCompressedBytes':36,'CompressedReadBufferBlocks':1,'CompressedReadBufferBytes':10,'IOBufferAllocs':1,'IOBufferAllocBytes':89,'ContextLock':15,'RWLockAcquiredReadLocks':1} Settings: {'background_pool_size':'32','load_balancing':'random','allow_suspicious_low_cardinality_types':'1','distributed_aggregation_memory_efficient':'1','skip_unavailable_shards':'1','log_queries':'1','max_bytes_before_external_group_by':'20000000000','max_bytes_before_external_sort':'20000000000','allow_introspection_functions':'1'} -1 rows in set. Elapsed: 0.002 sec. +1行を取得しました。経過時間: 0.002秒 ``` diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/projection_parts.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/projection_parts.md index 76b4d81323e..d13674bf9a6 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/projection_parts.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/projection_parts.md @@ -1,84 +1,17 @@ --- -description: 'MergeTree ファミリーに属するテーブルの Projection のパーツに関する情報を含むシステムテーブル。' +description: 'MergeTree ファミリーのテーブル用のプロジェクションパーツに関する情報を格納するシステムテーブル。' keywords: ['システムテーブル', 'projection_parts'] slug: /operations/system-tables/projection_parts title: 'system.projection_parts' doc_type: 'reference' --- - - # system.projection_parts -このテーブルには、MergeTree ファミリーのテーブルに対する Projection パーツに関する情報が含まれます。 - - - -## 列 {#columns} - +このテーブルには、MergeTree ファミリーのテーブルにおけるプロジェクションパーツに関する情報が格納されています。 +## 列 {/*AUTOGENERATED_START*/ } -* `partition` ([String](../../sql-reference/data-types/)) — パーティションの名前。 -* `name` ([String](../../sql-reference/data-types/)) — データパーツの名称。 -* `part_type` ([String](../../sql-reference/data-types/)) — データパーツの保存形式。取り得る値: Wide(カラムごとに 1 ファイル)および Compact(すべてのカラムを 1 つのファイルにまとめる)。 -* `parent_name` ([String](../../sql-reference/data-types/)) — 元の(親)データパートの名前。 -* `parent_uuid` ([UUID](../../sql-reference/data-types/)) — 元の(親)データパートの UUID。 -* `parent_part_type` ([String](../../sql-reference/data-types/)) — ソース(親)データパーツの格納形式。 -* `active` ([UInt8](../../sql-reference/data-types/)) — データパーツがアクティブかどうかを示すフラグ。データパーツがアクティブな場合、そのパーツはテーブルで使用されます。そうでない場合、そのパーツは削除対象となります。非アクティブなデータパーツは、マージやミューテーション操作の後に生成されます。 -* `marks` ([UInt64](../../sql-reference/data-types/)) — マークの数。データパート内のおおよその行数を見積もるには、`marks` にインデックスの粒度(通常は 8192)を掛けます(この目安はアダプティブ粒度では利用できません)。 -* `rows` ([UInt64](../../sql-reference/data-types/)) — 行数。 -* `bytes_on_disk` ([UInt64](../../sql-reference/data-types/)) — すべてのデータパーツファイルのサイズの合計(バイト単位)。 -* `data_compressed_bytes` ([UInt64](../../sql-reference/data-types/)) — データパーツ内の圧縮データの合計サイズ。マークファイルなどの補助ファイルは含まれません。 -* `data_uncompressed_bytes` ([UInt64](../../sql-reference/data-types/)) — データパート内の非圧縮データの合計サイズ。補助ファイル(たとえばマークファイルなど)は含まれません。 -* `marks_bytes` ([UInt64](../../sql-reference/data-types/)) — マークファイルのサイズ。 -* `parent_marks` ([UInt64](../../sql-reference/data-types/)) — 元(親)パーツ内に含まれるマークの数。 -* `parent_rows` ([UInt64](../../sql-reference/data-types/)) — 元の(親)パーツ内の行数。 -* `parent_bytes_on_disk` ([UInt64](../../sql-reference/data-types/)) — すべてのソース(親)データパートファイルの合計サイズ(バイト単位)。 -* `parent_data_compressed_bytes` ([UInt64](../../sql-reference/data-types/)) — 元の(親)データパートに含まれる圧縮データの合計サイズ。 -* `parent_data_uncompressed_bytes` ([UInt64](../../sql-reference/data-types/)) — ソース(親)データパート内の非圧縮データの合計サイズ。 -* `parent_marks_bytes` ([UInt64](../../sql-reference/data-types/)) — ソース(親)データパーツに含まれるマークファイルのサイズ。 -* `modification_time` ([DateTime](../../sql-reference/data-types/)) — データパーツを格納しているディレクトリが更新された時刻。通常はデータパーツが作成された時刻に対応します。 -* `remove_time` ([DateTime](../../sql-reference/data-types/)) — データパーツが非アクティブになった時刻。 -* `refcount` ([UInt32](../../sql-reference/data-types/)) — データパーツが使用されている場所の数。値が 2 より大きい場合、そのデータパーツがクエリまたはマージで使用されていることを示します。 -* `min_date` ([Date](../../sql-reference/data-types/)) — データパーツにおける日付キーの最小値。 -* `max_date` ([Date](../../sql-reference/data-types/)) — データパーツ内の日付キーの最大値。 -* `min_time` ([DateTime](../../sql-reference/data-types/)) — データパート内の日時キーの最小値。 -* `max_time` ([DateTime](../../sql-reference/data-types/)) — データパート内の日付と時刻キーの最大値。 -* `partition_id` ([String](../../sql-reference/data-types/)) — パーティション ID。 -* `min_block_number` ([Int64](../../sql-reference/data-types/)) — マージ後に現在のパーツを構成するデータパーツのうち、最小のブロック番号。 -* `max_block_number` ([Int64](../../sql-reference/data-types/)) — マージ後の現在のパーツを構成するデータパーツの最大ブロック番号。 -* `level` ([UInt32](../../sql-reference/data-types/)) — マージツリーの深さを表します。0 の場合、現在のパートは他のパートとのマージではなく、挿入(INSERT)によって作成されたことを意味します。 -* `data_version` ([UInt64](../../sql-reference/data-types/)) — データパーツにどのミューテーションを適用するかを判定するために使用される番号(この値より大きいバージョン番号を持つミューテーションが適用される)。 -* `primary_key_bytes_in_memory` ([UInt64](../../sql-reference/data-types/)) — プライマリキー値が使用しているメモリ量(バイト単位)。 -* `primary_key_bytes_in_memory_allocated` ([UInt64](../../sql-reference/data-types/)) — プライマリキー値用に確保されているメモリ量(バイト単位)。 -* `is_frozen` ([UInt8](../../sql-reference/data-types/)) — パーティションデータのバックアップが存在するかどうかを示すフラグ。1: バックアップが存在する。0: バックアップは存在しない。 -* `database` ([String](../../sql-reference/data-types/)) — データベースの名前。 -* `table` ([String](../../sql-reference/data-types/)) — テーブルの名前。 -* `engine` ([String](../../sql-reference/data-types/)) — パラメータなしのテーブルエンジン名。 -* `disk_name` ([String](../../sql-reference/data-types/)) — データパートを格納しているディスクの名前。 -* `path` ([String](../../sql-reference/data-types/)) — データパートのファイルが格納されているフォルダーへの絶対パス。 -* `hash_of_all_files` ([String](../../sql-reference/data-types/)) — 圧縮済みファイルの sipHash128 ハッシュ値。 -* `hash_of_uncompressed_files` ([String](../../sql-reference/data-types/)) — 非圧縮ファイル(マークファイル、インデックスファイルなど)の sipHash128 ハッシュ値。 -* `uncompressed_hash_of_compressed_files` ([String](../../sql-reference/data-types/)) — 圧縮ファイル内のデータを非圧縮データとして扱って計算した sipHash128 ハッシュ値。 -* `delete_ttl_info_min` ([DateTime](../../sql-reference/data-types/)) — TTL の DELETE ルールにおける日時キーの最小値。 -* `delete_ttl_info_max` ([DateTime](../../sql-reference/data-types/)) — TTL DELETE ルールにおける日時キーの最大値。 -* `move_ttl_info.expression` ([Array(String)](../../sql-reference/data-types/)) — 式の配列。各式が TTL MOVE ルールを定義します。 -* `move_ttl_info.min` ([Array(DateTime)](../../sql-reference/data-types/)) — 日時値の配列。各要素は TTL MOVE ルールの最小キー値を表します。 -* `move_ttl_info.max` ([Array(DateTime)](../../sql-reference/data-types/)) — 日時値の配列。各要素は、TTL MOVE ルールごとのキー値の最大値を表します。 -* `default_compression_codec` ([String](../../sql-reference/data-types/)) — このデータパーツを圧縮するために使用されるコーデックの名前(列に明示的なコーデックが指定されていない場合)。 -* `recompression_ttl_info.expression` ([Array(String)](../../sql-reference/data-types/)) — TTL 式。 -* `recompression_ttl_info.min` ([Array(DateTime)](../../sql-reference/data-types/)) — このパーツ内で計算された TTL 式の結果の最小値。少なくとも 1 行でも TTL が期限切れになっているかどうかを判別するために使用されます。 -* `recompression_ttl_info.max` ([Array(DateTime)](../../sql-reference/data-types/)) — このパート内で計算された TTL 式の値のうち最大のもの。すべての行の TTL が期限切れかどうかを判断するために使用されます。 -* `group_by_ttl_info.expression` ([Array(String)](../../sql-reference/data-types/)) — TTL の式。 -* `group_by_ttl_info.min` ([Array(DateTime)](../../sql-reference/data-types/)) — このパート内で計算された TTL 式の最小値。少なくとも 1 行は TTL が期限切れになっているかどうかを把握するために使用されます。 -* `group_by_ttl_info.max` ([Array(DateTime)](../../sql-reference/data-types/)) — このパーツ内の TTL 式の計算結果の最大値。TTL が期限切れになっている行がこのパーツ内にすべて含まれているかどうかを判断するために使用します。 -* `rows_where_ttl_info.expression` ([Array(String)](../../sql-reference/data-types/)) — TTL の式。 -* `rows_where_ttl_info.min` ([Array(DateTime)](../../sql-reference/data-types/)) — このパーツ内で評価された TTL 式の最小値。少なくとも 1 行以上、TTL が期限切れとなっている行が存在するかどうかを判断するために使用されます。 -* `rows_where_ttl_info.max` ([Array(DateTime)](../../sql-reference/data-types/)) — このパーツ内で評価された TTL 式の値の最大値です。TTL が期限切れになっている行がすべて含まれているかどうかを確認するために使用します。 -* `is_broken` ([UInt8](../../sql-reference/data-types/)) — プロジェクションパーツが破損しているかどうかを示します -* `exception_code` ([Int32](../../sql-reference/data-types/)) — プロジェクションパーツの破損状態を説明する例外メッセージ -* `exception` ([String](../../sql-reference/data-types/)) — プロジェクションパートの異常状態の原因を示す例外コード - {/*AUTOGENERATED_END*/ } diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/projection_parts_columns.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/projection_parts_columns.md index d6eb6b36aea..253558e4855 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/projection_parts_columns.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/projection_parts_columns.md @@ -1,72 +1,17 @@ --- -description: 'MergeTree ファミリーに属するテーブルのプロジェクションパーツに含まれる列に関する情報を保持するシステムテーブル' +description: 'MergeTree ファミリーのテーブルにおける projection パーツのカラム情報を含むシステムテーブル' keywords: ['システムテーブル', 'projection_parts_columns'] slug: /operations/system-tables/projection_parts_columns title: 'system.projection_parts_columns' doc_type: 'reference' --- - - # system.projection_parts_columns -このテーブルには、MergeTree ファミリーに属するテーブルのプロジェクションパーツに含まれる列に関する情報が格納されます。 - - - -## カラム {#columns} - +このテーブルには、MergeTree ファミリーのテーブルにおけるプロジェクションパーツ内の列に関する情報が格納されています。 +## カラム {/*AUTOGENERATED_START*/ } -* `partition` ([String](../../sql-reference/data-types/)) — パーティションの名前。 -* `name` ([String](../../sql-reference/data-types/)) — データパーツ名。 -* `part_type` ([String](../../sql-reference/data-types/)) — データパーツの格納形式。 -* `parent_name` ([String](../../sql-reference/data-types/)) — 元となる(親)データパートの名前。 -* `parent_uuid` ([UUID](../../sql-reference/data-types/)) — ソース(親)データパートの UUID。 -* `parent_part_type` ([String](../../sql-reference/data-types/)) — 元の(親)データパーツを格納している形式。 -* `active` ([UInt8](../../sql-reference/data-types/)) — データパーツがアクティブであるかどうかを示すフラグ -* `marks` ([UInt64](../../sql-reference/data-types/)) — マーク数。 -* `rows` ([UInt64](../../sql-reference/data-types/)) — 行数。 -* `bytes_on_disk` ([UInt64](../../sql-reference/data-types/)) — すべてのデータパーツファイルのバイト数の合計。 -* `data_compressed_bytes` ([UInt64](../../sql-reference/data-types/)) — データパーツ内の圧縮データの合計サイズ。マークを含む補助ファイルは一切含まれません。 -* `data_uncompressed_bytes` ([UInt64](../../sql-reference/data-types/)) — データパーツ内の非圧縮データの合計サイズ。補助ファイル(たとえばマークファイルなど)は含まれません。 -* `marks_bytes` ([UInt64](../../sql-reference/data-types/)) — マークファイルのサイズ。 -* `parent_marks` ([UInt64](../../sql-reference/data-types/)) — 元の(親)パーツ内のマーク数。 -* `parent_rows` ([UInt64](../../sql-reference/data-types/)) — ソース(親)パーツ内の行数。 -* `parent_bytes_on_disk` ([UInt64](../../sql-reference/data-types/)) — すべてのソース(親)データパーツファイルの合計サイズ(バイト単位)。 -* `parent_data_compressed_bytes` ([UInt64](../../sql-reference/data-types/)) — 元の(親)データパーツ内にある圧縮済みデータの合計サイズ。 -* `parent_data_uncompressed_bytes` ([UInt64](../../sql-reference/data-types/)) — ソース(親)データパーツ内の非圧縮データの合計サイズ。 -* `parent_marks_bytes` ([UInt64](../../sql-reference/data-types/)) — ソース(親)データパーツにおけるマークファイルのサイズ。 -* `modification_time` ([DateTime](../../sql-reference/data-types/)) — データパーツを格納しているディレクトリが更新された時刻。通常はデータパーツが作成された時刻に対応します。 -* `remove_time` ([DateTime](../../sql-reference/data-types/)) — データパーツが非アクティブになった日時。 -* `refcount` ([UInt32](../../sql-reference/data-types/)) — データパーツが参照されている箇所の数。値が 2 より大きい場合、そのデータパーツがクエリまたはマージで使用されていることを示します。 -* `min_date` ([Date](../../sql-reference/data-types/)) — パーティションキーに Date 型の列が含まれている場合、その列の最小値。 -* `max_date` ([Date](../../sql-reference/data-types/)) — パーティションキーに `Date` 型の列が含まれている場合、その列の最大値。 -* `min_time` ([DateTime](../../sql-reference/data-types/)) — DateTime 列がパーティションキーに含まれている場合の最小値。 -* `max_time` ([DateTime](../../sql-reference/data-types/)) — `DateTime` 列がパーティションキーに含まれている場合、その列の最大値。 -* `partition_id` ([String](../../sql-reference/data-types/)) — パーティション ID。 -* `min_block_number` ([Int64](../../sql-reference/data-types/)) — マージ後の現在のパーツを構成するデータパーツの最小番号。 -* `max_block_number` ([Int64](../../sql-reference/data-types/)) — マージ後の現在のパーツを構成するデータパーツ番号の最大値。 -* `level` ([UInt32](../../sql-reference/data-types/)) — MergeTree の深さ。0 は、現在のパーツが他のパーツをマージして生成されたのではなく、INSERT によって作成されたことを意味します。 -* `data_version` ([UInt64](../../sql-reference/data-types/)) — データパーツにどのミューテーションを適用すべきかを判定するために使用される数値(`data_version` より大きいバージョンを持つミューテーションが適用対象)。 -* `primary_key_bytes_in_memory` ([UInt64](../../sql-reference/data-types/)) — 主キー値が使用しているメモリ量(バイト単位)。 -* `primary_key_bytes_in_memory_allocated` ([UInt64](../../sql-reference/data-types/)) — 主キー値用に確保されているメモリ量(バイト単位)。 -* `database` ([String](../../sql-reference/data-types/)) — データベースの名前。 -* `table` ([String](../../sql-reference/data-types/)) — テーブル名。 -* `engine` ([String](../../sql-reference/data-types/)) — パラメータを含まないテーブルエンジンの名前。 -* `disk_name` ([String](../../sql-reference/data-types/)) — データパートを格納しているディスク名。 -* `path` ([String](../../sql-reference/data-types/)) — データパートファイルが格納されているディレクトリへの絶対パス。 -* `column` ([String](../../sql-reference/data-types/)) — 列名。 -* `type` ([String](../../sql-reference/data-types/)) — 列の型。 -* `column_position` ([UInt64](../../sql-reference/data-types/)) — テーブル内での列の位置(1 から始まります)。 -* `default_kind` ([String](../../sql-reference/data-types/)) — デフォルト値用の式の種類(DEFAULT、MATERIALIZED、ALIAS)。未定義の場合は空文字列。 -* `default_expression` ([String](../../sql-reference/data-types/)) — デフォルト値の式。定義されていない場合は空文字列です。 -* `column_bytes_on_disk` ([UInt64](../../sql-reference/data-types/)) — 列の合計サイズ(バイト単位)。 -* `column_data_compressed_bytes` ([UInt64](../../sql-reference/data-types/)) — この列の圧縮データの合計サイズ(バイト単位)。 -* `column_data_uncompressed_bytes` ([UInt64](../../sql-reference/data-types/)) — 列内の伸長後データの合計サイズ(バイト単位)。 -* `column_marks_bytes` ([UInt64](../../sql-reference/data-types/)) — マーク付き列のサイズ(バイト単位)。 -* `column_modification_time` ([Nullable(DateTime)](../../sql-reference/data-types/)) — 列が最後に変更された時刻を示します。 - {/*AUTOGENERATED_END*/ } diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/projections.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/projections.md index b97d7b5c5af..a28a7d4db8d 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/projections.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/projections.md @@ -1,28 +1,19 @@ --- description: 'すべてのテーブルに存在するプロジェクションに関する情報を含むシステムテーブル。' -keywords: ['system table', 'projections'] +keywords: ['システムテーブル', 'プロジェクション'] slug: /operations/system-tables/projections title: 'system.projections' doc_type: 'reference' --- - - # system.projections すべてのテーブルに存在するプロジェクションに関する情報を含みます。 -列: +カラム: {/*AUTOGENERATED_START*/ } -* `database` ([String](../../sql-reference/data-types/)) — データベース名。 -* `table` ([String](../../sql-reference/data-types/)) — テーブル名。 -* `name` ([String](../../sql-reference/data-types/)) — プロジェクション名。 -* `type` ([Enum8('Normal' = 0, 'Aggregate' = 1)](../../sql-reference/data-types/)) — プロジェクションタイプ。 -* `sorting_key` ([Array(String)](../../sql-reference/data-types/)) — プロジェクションのソートキー。 -* `query` ([String](../../sql-reference/data-types/)) — プロジェクションのクエリ。 - {/*AUTOGENERATED_END*/ } **例** diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/query_cache.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/query_cache.md index 36f35beb83a..42155404e08 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/query_cache.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/query_cache.md @@ -15,20 +15,10 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; [クエリキャッシュ](../query-cache.md) の内容を表示します。 -列: +列: {/*AUTOGENERATED_START*/ } -* `query` ([String](../../sql-reference/data-types/)) — クエリ文字列。 -* `query_id` ([String](../../sql-reference/data-types/)) — クエリのID。 -* `result_size` ([UInt64](../../sql-reference/data-types/)) — クエリキャッシュエントリのサイズ。 -* `tag` ([LowCardinality(String)](../../sql-reference/data-types/)) — クエリキャッシュエントリのタグ。 -* `stale` ([UInt8](../../sql-reference/data-types/)) — クエリキャッシュエントリが期限切れかどうか。 -* `shared` ([UInt8](../../sql-reference/data-types/)) — クエリキャッシュエントリが複数ユーザー間で共有されているかどうか。 -* `compressed` ([UInt8](../../sql-reference/data-types/)) — クエリキャッシュエントリが圧縮されているかどうか。 -* `expires_at` ([DateTime](../../sql-reference/data-types/)) — クエリキャッシュエントリが期限切れになる時刻。 -* `key_hash` ([UInt64](../../sql-reference/data-types/)) — クエリ文字列のハッシュ値で、クエリキャッシュエントリを検索する際のキーとして使用される。 - {/*AUTOGENERATED_END*/ } **例** @@ -38,7 +28,7 @@ SELECT * FROM system.query_cache FORMAT Vertical; ``` ```text -1 行目: +Row 1: ────── query: SELECT 1 SETTINGS use_query_cache = 1 query_id: 7c28bbbb-753b-4eba-98b1-efcbe2b9bdf6 @@ -50,5 +40,5 @@ compressed: 1 expires_at: 2023-10-13 13:35:45 key_hash: 12188185624808016954 -結果セット内の行数: 1。経過時間: 0.004 秒。 +1行取得。経過時間: 0.004秒 ``` diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/query_condition_cache.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/query_condition_cache.md index 791022752f1..581427d44eb 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/query_condition_cache.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/query_condition_cache.md @@ -13,19 +13,12 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -[クエリ条件キャッシュ](../query-condition-cache.md)の内容を表示します。 +[クエリ条件キャッシュ](../query-condition-cache.md) の内容を表示します。 列: {/*AUTOGENERATED_START*/ } -* `table_uuid` ([UUID](../../sql-reference/data-types/)) — テーブルの UUID。 -* `part_name` ([String](../../sql-reference/data-types/)) — パート名。 -* `condition` ([String](../../sql-reference/data-types/)) — ハッシュ化されたフィルター条件。設定 `query_condition_cache_store_conditions_as_plaintext` が true の場合にのみ設定されます。 -* `condition_hash` ([UInt64](../../sql-reference/data-types/)) — フィルター条件のハッシュ値。 -* `entry_size` ([UInt64](../../sql-reference/data-types/)) — エントリーのサイズ(バイト単位)。 -* `matching_marks` ([String](../../sql-reference/data-types/)) — 一致するマーク。 - {/*AUTOGENERATED_END*/ } **例** @@ -40,9 +33,9 @@ SELECT * FROM system.query_condition_cache FORMAT Vertical; table_uuid: 28270a24-ea27-49f6-99cd-97b9bee976ac part_name: all_1_1_0 condition: or(equals(b, 10000_UInt16), equals(c, 10000_UInt16)) -condition_hash: 5456494897146899690 -- 5.46 quintillion(約 5.46×10^18) +condition_hash: 5456494897146899690 -- 5.46 quintillion entry_size: 40 matching_marks: 111111110000000000000000000000000000000000000000000000000111111110000000000000000 -1 行が結果セットに含まれます。経過時間: 0.004 秒。 +1行のセット。経過時間: 0.004秒 ``` diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/quota_usage.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/quota_usage.md index fd0b281b822..2b82e1bd7f7 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/quota_usage.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/quota_usage.md @@ -1,6 +1,6 @@ --- -description: '現在のユーザーのクォータ使用状況(どれだけ使用済みか、どれだけ残っているかなど)に関する情報を含むシステムテーブル。' -keywords: ['system table', 'quota_usage'] +description: '現在のユーザーによるクォータ使用状況(使用済みクォータ量と残りのクォータ量など)に関する情報を保持する system テーブル。' +keywords: ['system テーブル', 'quota_usage'] slug: /operations/system-tables/quota_usage title: 'system.quota_usage' doc_type: 'reference' @@ -12,42 +12,13 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; 現在のユーザーのクォータ使用状況:使用量と残量を示します。 - 列: {/*AUTOGENERATED_START*/ } -* `quota_name` ([String](../../sql-reference/data-types/)) — クォータ名。 -* `quota_key` ([String](../../sql-reference/data-types/)) — キー値。 -* `start_time` ([Nullable(DateTime)](../../sql-reference/data-types/)) — リソース消費量の計算を開始する時刻。 -* `end_time` ([Nullable(DateTime)](../../sql-reference/data-types/)) — リソース消費量の計算を終了する時刻。 -* `duration` ([Nullable(UInt32)](../../sql-reference/data-types/)) — リソース消費量を計算する時間間隔の長さ(秒単位)。 -* `queries` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 現在までに実行されたクエリ数。 -* `max_queries` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 実行を許可されている、すべての種類のクエリの最大実行数。 -* `query_selects` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 現在までに実行された SELECT クエリ数。 -* `max_query_selects` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 実行を許可されている SELECT クエリの最大実行数。 -* `query_inserts` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 現在までに実行された INSERT クエリ数。 -* `max_query_inserts` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 実行を許可されている INSERT クエリの最大実行数。 -* `errors` ([Nullable(UInt64)](../../sql-reference/data-types/)) — エラーで終了したクエリの現在の件数。 -* `max_errors` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 指定された期間内にエラーで終了することが許容されるクエリの最大件数。 -* `result_rows` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 現在の期間内のすべてのクエリの結果セットに含まれる行数の現在の合計。 -* `max_result_rows` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 指定された期間内に許容される、すべてのクエリの結果セットに含まれる行数の最大合計。 -* `result_bytes` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 現在の期間内のすべてのクエリの結果セットに含まれるバイト数の現在の合計。 -* `max_result_bytes` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 指定された期間内に許容される、すべてのクエリの結果セットに含まれるバイト数の最大合計。 -* `read_rows` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 現在の期間内に、すべてのクエリの実行中に読み取られた行数の現在の合計。 -* `max_read_rows` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 指定された期間内に、すべてのクエリの実行中に読み取ることが許可されている行数の最大値。 -* `read_bytes` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 現在の期間内に、すべてのクエリの実行中に読み取られたバイト数の現在の合計。 -* `max_read_bytes` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 指定された期間内に、すべてのクエリの実行中に読み取ることが許可されているバイト数の最大値。 -* `execution_time` ([Nullable(Float64)](../../sql-reference/data-types/)) — 現在の期間内にクエリの実行に費やされた時間の現在の合計(ナノ秒単位)。 -* `max_execution_time` ([Nullable(Float64)](../../sql-reference/data-types/)) — 指定された期間内に、すべてのクエリの実行に許可されている時間の最大値(ナノ秒単位)。 -* `written_bytes` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 現在の期間内に、すべてのクエリの実行中に書き込まれたバイト数の現在の合計。 -* `max_written_bytes` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 指定された期間内に、すべてのクエリの実行中に書き込むことが許可されているバイト数の最大値。 -* `failed_sequential_authentications` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 現在の期間内の連続した認証失敗の現在の件数。 -* `max_failed_sequential_authentications` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 指定された期間内に許容される連続した認証失敗の最大件数。 - {/*AUTOGENERATED_END*/ } ## 関連項目 {#see-also} -- [SHOW QUOTA](/sql-reference/statements/show#show-quota)) +- [SHOW QUOTA](/sql-reference/statements/show#show-quota)) \ No newline at end of file diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/quotas_usage.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/quotas_usage.md index 511f9ccf334..cff7842cbc2 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/quotas_usage.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/quotas_usage.md @@ -1,6 +1,6 @@ --- description: 'すべてのユーザーのクォータ使用状況に関する情報を含むシステムテーブル。' -keywords: ['システムテーブル', 'quotas_usage', 'quota'] +keywords: ['system table', 'quotas_usage', 'quota'] slug: /operations/system-tables/quotas_usage title: 'system.quotas_usage' doc_type: 'reference' @@ -13,44 +13,15 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -全ユーザーのクォータ使用状況。 +すべてのユーザーのクォータ使用状況。 列: {/*AUTOGENERATED_START*/ } -* `quota_name` ([String](../../sql-reference/data-types/)) — クォータ名。 -* `quota_key` ([String](../../sql-reference/data-types/)) — キー値。 -* `is_current` ([UInt8](../../sql-reference/data-types/)) — 現在のユーザーに対するクォータ使用状況。 -* `start_time` ([Nullable(DateTime)](../../sql-reference/data-types/)) — リソース消費量の計算を開始する時刻。 -* `end_time` ([Nullable(DateTime)](../../sql-reference/data-types/)) — リソース消費量の計算を終了する時刻。 -* `duration` ([Nullable(UInt32)](../../sql-reference/data-types/)) — リソース消費量を計算する時間間隔の長さ(秒単位)。 -* `queries` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 現在までに実行されたクエリの総数。 -* `max_queries` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 実行を許可されている全種類のクエリの最大数。 -* `query_selects` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 現在までに実行された SELECT クエリの数。 -* `max_query_selects` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 実行を許可されている SELECT クエリの最大数。 -* `query_inserts` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 現在までに実行された INSERT クエリの数。 -* `max_query_inserts` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 実行を許可されている INSERT クエリの最大数。 -* `errors` ([Nullable(UInt64)](../../sql-reference/data-types/)) — エラーで終了したクエリの現在の数。 -* `max_errors` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 指定された期間内にエラーで終了することが許可されているクエリの最大数。 -* `result_rows` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 現在の期間内のすべてのクエリの結果セットに含まれる行数の現在の合計。 -* `max_result_rows` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 指定された期間内に許可されている、すべてのクエリの結果セットに含まれる行数の最大合計。 -* `result_bytes` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 現在の期間内のすべてのクエリの結果セットに含まれるバイト数の現在の合計。 -* `max_result_bytes` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 指定された期間内に許可されている、すべてのクエリの結果セットに含まれるバイト数の最大合計。 -* `read_rows` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 現在の期間内にすべてのクエリの実行中に読み取られた行数の現在の合計。 -* `max_read_rows` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 指定された期間内に許可されている、すべてのクエリの実行中に読み取る行数の最大値。 -* `read_bytes` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 現在の期間内にすべてのクエリの実行中に読み取られたバイト数の現在の合計。 -* `max_read_bytes` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 指定された期間内に許可されている、すべてのクエリの実行中に読み取るバイト数の最大値。 -* `execution_time` ([Nullable(Float64)](../../sql-reference/data-types/)) — 現在の期間内にクエリの実行に費やされた時間の合計(ナノ秒単位)。 -* `max_execution_time` ([Nullable(Float64)](../../sql-reference/data-types/)) — 指定された期間内にすべてのクエリの実行に許可されている時間の最大値(ナノ秒単位)。 -* `written_bytes` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 現在の期間内にすべてのクエリの実行中に書き込まれたバイト数の現在の合計。 -* `max_written_bytes` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 指定された期間内に許可されている、すべてのクエリの実行中に書き込むバイト数の最大値。 -* `failed_sequential_authentications` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 現在の期間内の連続した認証失敗の現在の回数。 -* `max_failed_sequential_authentications` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 指定された期間内に許可されている連続した認証失敗の最大回数。 - {/*AUTOGENERATED_END*/ } ## 関連項目 {#see-also} -- [SHOW QUOTA](/sql-reference/statements/show#show-quota)) +- [SHOW QUOTA](/sql-reference/statements/show#show-quota)) \ No newline at end of file diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/replicated_fetches.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/replicated_fetches.md index 6aecfc36389..331a25c40fe 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/replicated_fetches.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/replicated_fetches.md @@ -13,29 +13,12 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -現在実行中のバックグラウンドのフェッチ処理に関する情報を保持します。 +現在実行中のバックグラウンドでのフェッチ処理に関する情報を含みます。 列: {/*AUTOGENERATED_START*/ } -* `database` ([String](../../sql-reference/data-types/)) — データベース名。 -* `table` ([String](../../sql-reference/data-types/)) — テーブル名。 -* `elapsed` ([Float64](../../sql-reference/data-types/)) — 現在実行中のバックグラウンドフェッチの表示を開始してからの経過時間(秒単位)。 -* `progress` ([Float64](../../sql-reference/data-types/)) — 完了した処理の割合(0〜1)。 -* `result_part_name` ([String](../../sql-reference/data-types/)) — 現在実行中のバックグラウンドフェッチの結果として形成されるパーツ名。 -* `result_part_path` ([String](../../sql-reference/data-types/)) — 現在実行中のバックグラウンドフェッチの結果として形成されるパーツへの絶対パス。 -* `partition_id` ([String](../../sql-reference/data-types/)) — パーティションの ID。 -* `total_size_bytes_compressed` ([UInt64](../../sql-reference/data-types/)) — 結果パーツ内の圧縮データの合計サイズ(バイト単位)。 -* `bytes_read_compressed` ([UInt64](../../sql-reference/data-types/)) — 結果パーツから読み取られた圧縮バイト数。 -* `source_replica_path` ([String](../../sql-reference/data-types/)) — ソースレプリカへの絶対パス。 -* `source_replica_hostname` ([String](../../sql-reference/data-types/)) — ソースレプリカのホスト名。 -* `source_replica_port` ([UInt16](../../sql-reference/data-types/)) — ソースレプリカのポート番号。 -* `interserver_scheme` ([String](../../sql-reference/data-types/)) — サーバー間スキーム名。 -* `URI` ([String](../../sql-reference/data-types/)) — Uniform Resource Identifier(URI)。 -* `to_detached` ([UInt8](../../sql-reference/data-types/)) — 現在実行中のバックグラウンドフェッチが `TO DETACHED` 句を使用して実行されているかどうかを示すフラグ。 -* `thread_id` ([UInt64](../../sql-reference/data-types/)) — スレッド識別子。 - {/*AUTOGENERATED_END*/ } **例** @@ -45,7 +28,7 @@ SELECT * FROM system.replicated_fetches LIMIT 1 FORMAT Vertical; ``` ```text -行 1: +Row 1: ────── database: default table: t diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/resources.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/resources.md index ea391dc449b..4d9b02498e4 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/resources.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/resources.md @@ -1,16 +1,14 @@ --- -description: 'ローカルサーバー上に存在するリソースに関する情報を格納するシステムテーブルであり、1つのリソースごとに1行が格納されます。' -keywords: ['system table', 'リソース'] +description: 'ローカルサーバー上に存在するリソースに関する情報を含むシステムテーブルであり、各リソースにつき 1 行を持ちます。' +keywords: ['システムテーブル', 'リソース'] slug: /operations/system-tables/resources title: 'system.resources' doc_type: 'reference' --- - - # system.resources -ローカルサーバー上に存在する[リソース](/operations/workload-scheduling.md#workload_entity_storage)に関する情報が含まれます。テーブルには各リソースごとに 1 行が存在します。 +ローカルサーバー上に存在する[リソース](/operations/workload-scheduling.md#workload_entity_storage)に関する情報が含まれます。テーブルには、各リソースにつき 1 行が格納されます。 例: @@ -21,14 +19,14 @@ FORMAT Vertical ``` ```text -Row 1: +行 1: ────── name: io_read read_disks: ['s3'] write_disks: [] create_query: CREATE RESOURCE io_read (READ DISK s3) -Row 2: +行 2: ────── name: io_write read_disks: [] @@ -36,14 +34,8 @@ write_disks: ['s3'] create_query: CREATE RESOURCE io_write (WRITE DISK s3) ``` -カラム: +列: {/*AUTOGENERATED_START*/ } -* `name` ([String](../../sql-reference/data-types/)) — リソースの名前。 -* `read_disks` ([Array(String)](../../sql-reference/data-types/)) — 読み取り操作にこのリソースを使用するディスク名の一覧。 -* `write_disks` ([Array(String)](../../sql-reference/data-types/)) — 書き込み操作にこのリソースを使用するディスク名の一覧。 -* `unit` ([String](../../sql-reference/data-types/)) — コスト測定用に使用されるリソース単位。 -* `create_query` ([String](../../sql-reference/data-types/)) — このリソースの CREATE クエリ。 - {/*AUTOGENERATED_END*/ } diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/roles.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/roles.md index 57d9549355c..e60283b39e7 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/roles.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/roles.md @@ -1,28 +1,22 @@ --- -description: '構成済みロールに関する情報を含む system テーブル。' +description: '設定されているロールに関する情報を含むシステムテーブル。' keywords: ['システムテーブル', 'ロール'] slug: /operations/system-tables/roles title: 'system.roles' doc_type: 'reference' --- - - # system.roles -構成された[ロール](../../guides/sre/user-management/index.md#role-management)に関する情報を保持します。 +設定されている[ロール](../../guides/sre/user-management/index.md#role-management)に関する情報を保持します。 列: {/*AUTOGENERATED_START*/ } -* `name` ([String](../../sql-reference/data-types/)) — ロール名。 -* `id` ([UUID](../../sql-reference/data-types/)) — ロールID。 -* `storage` ([String](../../sql-reference/data-types/)) — ロールのストレージのパス。`access_control_path` パラメータで設定します。 - {/*AUTOGENERATED_END*/ } -## 関連項目 {#see-also} +## 関連情報 {#see-also} -- [SHOW ROLES](/sql-reference/statements/show#show-roles) +- [SHOW ROLES](/sql-reference/statements/show#show-roles) \ No newline at end of file diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/row_policies.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/row_policies.md index ea41f8e7f4d..039ec19ad1d 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/row_policies.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/row_policies.md @@ -1,36 +1,22 @@ --- -description: '特定の 1 つのテーブルに対するフィルター条件と、その行ポリシーを適用すべきロールおよび/またはユーザーのリストを含むシステムテーブル。' +description: '特定のテーブルに対するフィルタと、その行ポリシーを使用するロールおよび/またはユーザーの一覧を含む system テーブル。' keywords: ['system table', 'row_policies'] slug: /operations/system-tables/row_policies title: 'system.row_policies' doc_type: 'reference' --- - - # system.row_policies -特定の 1 つのテーブル用のフィルタと、この行ポリシーを適用するロールおよび/またはユーザーの一覧を含みます。 +特定の 1 つのテーブルに対するフィルターと、この行ポリシーを使用するロールおよび/またはユーザーの一覧を含みます。 列: {/*AUTOGENERATED_START*/ } -* `name` ([String](../../sql-reference/data-types/)) — 行ポリシーの名前。 -* `short_name` ([String](../../sql-reference/data-types/)) — 行ポリシーの短い名前。行ポリシーの名前は複合名であり、例えば myfilter ON mydb.mytable のようになります。ここで 'myfilter ON mydb.mytable' が行ポリシーの名前であり、'myfilter' がその短い名前です。 -* `database` ([String](../../sql-reference/data-types/)) — データベース名。 -* `table` ([String](../../sql-reference/data-types/)) — テーブル名。データベースに対するポリシーの場合は空。 -* `id` ([UUID](../../sql-reference/data-types/)) — 行ポリシーのID。 -* `storage` ([String](../../sql-reference/data-types/)) — 行ポリシーが保存されているディレクトリ名。 -* `select_filter` ([Nullable(String)](../../sql-reference/data-types/)) — `SELECT` クエリでのフィルタリングに使用される式。 -* `is_restrictive` ([UInt8](../../sql-reference/data-types/)) — 行ポリシーが行へのアクセスを制限するかどうかを示します。値: • 0 — 行ポリシーが `AS PERMISSIVE` 句で定義されている場合 • 1 — 行ポリシーが `AS RESTRICTIVE` 句で定義されている場合。 -* `apply_to_all` ([UInt8](../../sql-reference/data-types/)) — 行ポリシーがすべてのロールおよび/またはユーザーに対して設定されていることを示します。 -* `apply_to_list` ([Array(String)](../../sql-reference/data-types/)) — 行ポリシーが適用されるロールおよび/またはユーザーの一覧。 -* `apply_to_except` ([Array(String)](../../sql-reference/data-types/)) — 一覧に含まれるロールおよび/またはユーザーを除くすべてに行ポリシーが適用されます。 - {/*AUTOGENERATED_END*/ } ## 関連項目 {#see-also} -- [SHOW POLICIES](/sql-reference/statements/show#show-policies) +- [SHOW POLICIES](/sql-reference/statements/show#show-policies) \ No newline at end of file diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/s3_queue_settings.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/s3_queue_settings.md index 57587f35f3e..35ae633ed3b 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/s3_queue_settings.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/s3_queue_settings.md @@ -1,28 +1,18 @@ --- -description: 'S3Queue テーブルの設定情報を含む system テーブル。サーバーバージョン `24.10` 以降で利用可能。' -keywords: ['system table', 's3_queue_settings'] +description: 'S3Queue テーブルの設定に関する情報を格納する system テーブル。 + サーバーバージョン `24.10` 以降で利用可能。' +keywords: ['system テーブル', 's3_queue_settings'] slug: /operations/system-tables/s3_queue_settings title: 'system.s3_queue_settings' doc_type: 'reference' --- - - # system.s3_queue_settings -[S3Queue](../../engines/table-engines/integrations/s3queue.md) テーブルの設定に関する情報を格納します。サーバーバージョン `24.10` 以降で利用可能です。 +[S3Queue](../../engines/table-engines/integrations/s3queue.md) テーブルの設定に関する情報を含みます。サーバーバージョン `24.10` 以降で利用可能です。 列: {/*AUTOGENERATED_START*/ } -* `database` ([String](../../sql-reference/data-types/)) — S3Queue Engine を使用するテーブルが属するデータベース名。 -* `table` ([String](../../sql-reference/data-types/)) — S3Queue Engine を使用するテーブル名。 -* `name` ([String](../../sql-reference/data-types/)) — 設定名。 -* `value` ([String](../../sql-reference/data-types/)) — 設定値。 -* `type` ([String](../../sql-reference/data-types/)) — 設定の型(実装固有の文字列値)。 -* `changed` ([UInt8](../../sql-reference/data-types/)) — 設定が設定ファイルで明示的に定義された、または明示的に変更された場合は 1。 -* `description` ([String](../../sql-reference/data-types/)) — 設定の説明。 -* `alterable` ([UInt8](../../sql-reference/data-types/)) — 現在のユーザーが ALTER TABLE MODIFY SETTING で設定を変更できるかを示す:0 — 現在のユーザーは設定を変更できる、1 — 現在のユーザーは設定を変更できない。 - {/*AUTOGENERATED_END*/ } diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/scheduler.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/scheduler.md index fe7de451102..2ec20847b98 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/scheduler.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/scheduler.md @@ -1,6 +1,6 @@ --- -description: 'ローカルサーバー上のスケジューリングノードの情報および状態を含むシステムテーブル。' -keywords: ['system table', 'スケジューラ'] +description: 'ローカルサーバー上に配置されているスケジューリングノードの情報および状態を含むシステムテーブル。' +keywords: ['システムテーブル', 'スケジューラ'] slug: /operations/system-tables/scheduler title: 'system.scheduler' doc_type: 'reference' @@ -13,8 +13,8 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -ローカルサーバー上にある[スケジューリングノード](/operations/workload-scheduling.md/#hierarchy)に関する情報およびステータスを保持します。 -このテーブルは監視用途に使用できます。テーブルには各スケジューリングノードにつき 1 行が格納されます。 +ローカルサーバー上に存在する[スケジューリングノード](/operations/workload-scheduling.md/#hierarchy)に関する情報とステータスを含みます。 +このテーブルは監視に使用できます。テーブルには各スケジューリングノードごとに1行が格納されます。 例: @@ -56,37 +56,8 @@ throttling_us: ᴺᵁᴸᴸ tokens: ᴺᵁᴸᴸ ``` -カラム: - +列: {/*AUTOGENERATED_START*/ } -* `resource` ([String](../../sql-reference/data-types/)) — リソース名 -* `path` ([String](../../sql-reference/data-types/)) — このリソーススケジューリング階層内のスケジューリングノードを指すパス -* `type` ([String](../../sql-reference/data-types/)) — スケジューリングノードの種類。 -* `weight` ([Float64](../../sql-reference/data-types/)) — ノードの重み。`fair` 型の親ノードで使用されます。 -* `priority` ([Int64](../../sql-reference/data-types/)) — ノードの優先度。`priority` 型の親ノードで使用されます(値が小さいほど優先度が高くなります)。 -* `is_active` ([UInt8](../../sql-reference/data-types/)) — このノードが現在アクティブかどうか(キューから取り出すべきリソース要求があり、かつ制約が満たされているかどうか)を示します。 -* `active_children` ([UInt64](../../sql-reference/data-types/)) — アクティブな状態にある子の数。 -* `dequeued_requests` ([UInt64](../../sql-reference/data-types/)) — このノードでキューからデキューされたリソース要求の総数。 -* `canceled_requests` ([UInt64](../../sql-reference/data-types/)) — このノードからのリソース要求のうち、キャンセルされたものの合計数。 -* `dequeued_cost` ([Int64](../../sql-reference/data-types/)) — このノードからデキューされたすべてのリクエストのコスト(例: バイト数)の合計。 -* `throughput` ([Float64](../../sql-reference/data-types/)) — 現在の平均スループット(1 秒あたりにデキューされたコスト)。 -* `canceled_cost` ([Int64](../../sql-reference/data-types/)) — このノードでキャンセルされたすべてのリクエストのコスト(例:バイト数)の合計。 -* `busy_periods` ([UInt64](../../sql-reference/data-types/)) — このノードで非アクティブ化が行われた総回数。 -* `vruntime` ([Nullable(Float64)](../../sql-reference/data-types/)) — `fair` ノードに属する子ノードにのみ適用。SFQ アルゴリズムが max-min 公平な方法で次に処理する子ノードを選択するために使用されるノードの仮想ランタイム。 -* `system_vruntime` ([Nullable(Float64)](../../sql-reference/data-types/)) — `fair` ノードでのみ使用されます。最後に処理されたリソース要求の `vruntime` を示す仮想ランタイムであり、子ノードの有効化時に新しい `vruntime` の値として使用されます。 -* `queue_length` ([Nullable(UInt64)](../../sql-reference/data-types/)) — `fifo` ノードでのみ有効。現在キューに滞留しているリソースリクエストの数。 -* `queue_cost` ([Nullable(Int64)](../../sql-reference/data-types/)) — FIFO ノードでのみ使用されます。キュー内に存在するすべてのリクエストのコスト(例:バイト単位のサイズ)の合計です。 -* `budget` ([Nullable(Int64)](../../sql-reference/data-types/)) — FIFO ノード専用。新しいリソース要求に対して利用可能な「コスト単位」の数。不足が、リソース要求の推定コストと実際のコストの間で生じた場合(例: 読み取り/書き込み障害後)に設定されることがあります。 -* `is_satisfied` ([Nullable(UInt8)](../../sql-reference/data-types/)) — 制約ノードでのみ使用されます(例: `inflight_limit`)。このノードに設定されたすべての制約が満たされている場合は `1` です。 -* `inflight_requests` ([Nullable(Int64)](../../sql-reference/data-types/)) — `inflight_limit` ノード専用。現在「消費」状態にある、このノードからデキューされたリソースリクエストの数。 -* `inflight_cost` ([Nullable(Int64)](../../sql-reference/data-types/)) — `inflight_limit` ノード専用。現在消費中の、このノードからデキューされたすべてのリソース要求のコスト(例:バイト数)の合計。 -* `max_requests` ([Nullable(Int64)](../../sql-reference/data-types/)) — `inflight_limit` ノード専用。制約違反となる `inflight_requests` の上限。` -* `max_cost` ([Nullable(Int64)](../../sql-reference/data-types/)) — `inflight_limit` ノード専用。制約違反となる `inflight_cost` の上限。 -* `max_speed` ([Nullable(Float64)](../../sql-reference/data-types/)) — `bandwidth_limit` ノードにのみ適用されます。帯域幅の上限値(トークン/秒)。 -* `max_burst` ([Nullable(Float64)](../../sql-reference/data-types/)) — `bandwidth_limit` ノード専用。トークンバケット方式のスロットリングで利用可能なトークン数の上限。 -* `throttling_us` ([Nullable(Int64)](../../sql-reference/data-types/)) — `bandwidth_limit` ノードにのみ適用。このノードがスロットリング状態にあった時間の合計(マイクロ秒)。 -* `tokens` ([Nullable(Float64)](../../sql-reference/data-types/)) — `bandwidth_limit` ノードでのみ使用。トークンバケット方式のスロットリングで現在利用可能なトークン数。 - {/*AUTOGENERATED_END*/ } diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/schema_inference_cache.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/schema_inference_cache.md index e286634cb55..6f817819cc6 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/schema_inference_cache.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/schema_inference_cache.md @@ -1,6 +1,6 @@ --- -description: 'すべてのキャッシュ済みファイルスキーマに関する情報を含むシステムテーブル。' -keywords: ['システムテーブル', 'schema_inference_cache'] +description: 'キャッシュされたすべてのファイルスキーマに関する情報を含む system テーブル。' +keywords: ['system テーブル', 'schema_inference_cache'] slug: /operations/system-tables/schema_inference_cache title: 'system.schema_inference_cache' doc_type: 'reference' @@ -19,20 +19,11 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; {/*AUTOGENERATED_START*/ } -* `storage` ([String](../../sql-reference/data-types/)) — ストレージ名。File、URL、S3、HDFS のいずれか。 -* `source` ([String](../../sql-reference/data-types/)) — ファイルソース。 -* `format` ([String](../../sql-reference/data-types/)) — フォーマット名。 -* `additional_format_info` ([String](../../sql-reference/data-types/)) — スキーマを特定するために必要な追加情報。たとえば、フォーマット固有の設定。 -* `registration_time` ([DateTime](../../sql-reference/data-types/)) — スキーマがキャッシュに追加されたタイムスタンプ。 -* `schema` ([Nullable(String)](../../sql-reference/data-types/)) — キャッシュされたスキーマ。 -* `number_of_rows` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 指定されたフォーマットのファイル内の行数。データファイルからの単純な count() の結果や、スキーマ推論中にメタデータから取得した行数をキャッシュするために使用されます。 -* `schema_inference_mode` ([Nullable(String)](../../sql-reference/data-types/)) — スキーマ推論モード。 - {/*AUTOGENERATED_END*/ } **例** -次の内容を持つファイル `data.jsonl` があるとします。 +`data.jsonl` というファイルがあり、その内容が次のような内容だとします: ```json {"id" : 1, "age" : 25, "name" : "Josh", "hobbies" : ["football", "cooking", "music"]} @@ -42,7 +33,7 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; ``` :::tip -`data.jsonl` を `user_files_path` ディレクトリに配置してください。これは ClickHouse の設定ファイルを確認することで特定できます。デフォルトは次のとおりです: +`data.jsonl` を `user_files_path` ディレクトリに配置します。これは ClickHouse の設定ファイルを確認することで特定できます。デフォルトは次のとおりです。 ```sql /var/lib/clickhouse/user_files/ @@ -50,7 +41,7 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; ::: -`clickhouse-client` を開き、`DESCRIBE` クエリを実行します。 +`clickhouse-client` を起動し、`DESCRIBE` クエリを実行します。 ```sql DESCRIBE file('data.jsonl') SETTINGS input_format_try_infer_integers=0; @@ -74,7 +65,7 @@ FORMAT Vertical ``` ```response -Row 1: +行 1: ────── storage: File source: /home/droscigno/user_files/data.jsonl diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/settings_changes.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/settings_changes.md index 18b69e377a4..3a2b5769390 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/settings_changes.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/settings_changes.md @@ -1,25 +1,19 @@ --- -description: '以前の ClickHouse バージョンで行われた設定変更に関する情報を含むシステムテーブル。' -keywords: ['system table', 'settings_changes'] +description: '過去の ClickHouse バージョンで行われた設定変更に関する情報を含む system テーブル。' +keywords: ['system テーブル', 'settings_changes'] slug: /operations/system-tables/settings_changes title: 'system.settings_changes' doc_type: 'reference' --- - - # system.settings_changes -過去の ClickHouse バージョンで行われた設定変更に関する情報を保持します。 +以前の ClickHouse バージョンにおける設定変更に関する情報を保持します。 列: {/*AUTOGENERATED_START*/ } -* `type` ([Enum8('Session' = 0, 'MergeTree' = 1)](../../sql-reference/data-types/)) — 設定のグループ(Session、MergeTree など)。 -* `version` ([String](../../sql-reference/data-types/)) — ClickHouse サーバーのバージョン。 -* `changes` ([Array(Tuple(name String, previous_value String, new_value String, reason String))](../../sql-reference/data-types/)) — ClickHouse の動作を変更した設定変更の一覧。 - {/*AUTOGENERATED_END*/ } **例** @@ -36,10 +30,10 @@ Row 1: ────── type: Core version: 23.5 -changes: [('input_format_parquet_preserve_order','1','0','並列処理の向上のため、Parquetリーダーによる行の並べ替えを許可します。'),('parallelize_output_from_storages','0','1','file/url/S3などから読み取るクエリの実行時に並列処理を許可します。これにより行が並べ替えられる場合があります。'),('use_with_fill_by_sorting_prefix','0','1','ORDER BY句でWITH FILL列より前にある列がソートプレフィックスを構成します。ソートプレフィックスの値が異なる行は独立して補完されます'),('output_format_parquet_compliant_nested_types','0','1','出力Parquetファイルスキーマ内の内部フィールド名を変更します。')] +changes: [('input_format_parquet_preserve_order','1','0','Parquetリーダーが並列性向上のために行を並べ替えることを許可します。'),('parallelize_output_from_storages','0','1','file/url/s3などから読み取るクエリ実行時の並列処理を許可します。これにより行が並べ替えられる可能性があります。'),('use_with_fill_by_sorting_prefix','0','1','ORDER BY句内のWITH FILL列より前の列がソートプレフィックスを形成します。ソートプレフィックスで異なる値を持つ行は独立して埋められます。'),('output_format_parquet_compliant_nested_types','0','1','出力Parquetファイルスキーマ内の内部フィールド名を変更します。')] ``` **関連項目** -* [設定](/operations/system-tables/overview#system-tables-introduction) +* [Settings](/operations/system-tables/overview#system-tables-introduction) * [system.settings](settings.md) diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/settings_profile_elements.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/settings_profile_elements.md index d2e19230650..86f708c8dc8 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/settings_profile_elements.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/settings_profile_elements.md @@ -1,16 +1,14 @@ --- -description: '設定プロファイルの内容(制約、この設定が適用されるロールおよびユーザー、親設定プロファイル)を説明するシステムテーブル。' -keywords: ['system table', 'settings_profile_elements'] +description: 'SETTINGS PROFILE の内容、すなわち制約、この設定が適用されるロールおよびユーザー、親設定プロファイルを表す system テーブル。' +keywords: ['system テーブル', 'settings_profile_elements'] slug: /operations/system-tables/settings_profile_elements title: 'system.settings_profile_elements' doc_type: 'reference' --- - - # system.settings_profile_elements -設定プロファイルの内容について説明します。 +設定プロファイルの内容を表します: * 制約 * 設定が適用されるロールとユーザー @@ -20,15 +18,4 @@ doc_type: 'reference' {/*AUTOGENERATED_START*/ } -* `profile_name` ([Nullable(String)](../../sql-reference/data-types/)) — 設定プロファイルの名前。 -* `user_name` ([Nullable(String)](../../sql-reference/data-types/)) — ユーザー名。 -* `role_name` ([Nullable(String)](../../sql-reference/data-types/)) — ロール名。 -* `index` ([UInt64](../../sql-reference/data-types/)) — 設定プロファイル要素の通し番号。 -* `setting_name` ([Nullable(String)](../../sql-reference/data-types/)) — 設定名。 -* `value` ([Nullable(String)](../../sql-reference/data-types/)) — 設定値。 -* `min` ([Nullable(String)](../../sql-reference/data-types/)) — 設定の最小値。設定されていない場合は NULL。 -* `max` ([Nullable(String)](../../sql-reference/data-types/)) — 設定の最大値。設定されていない場合は NULL。 -* `writability` ([Nullable(Enum8('WRITABLE' = 0, 'CONST' = 1, 'CHANGEABLE_IN_READONLY' = 2))](../../sql-reference/data-types/)) — 設定を変更可能かどうかを示すプロパティ。 -* `inherit_profile` ([Nullable(String)](../../sql-reference/data-types/)) — この設定プロファイルの親プロファイル。設定されていない場合は NULL。設定プロファイルは、親プロファイルからすべての設定値と制約(min、max、readonly)を継承する。 - {/*AUTOGENERATED_END*/ } diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/settings_profiles.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/settings_profiles.md index 8b12503802d..cf18a2ad4da 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/settings_profiles.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/settings_profiles.md @@ -1,13 +1,11 @@ --- -description: '設定プロファイルのプロパティを格納するシステムテーブル。' -keywords: ['system table', 'settings_profiles'] +description: '構成済み設定プロファイルのプロパティを含むシステムテーブル。' +keywords: ['システムテーブル', 'settings_profiles'] slug: /operations/system-tables/settings_profiles title: 'system.settings_profiles' doc_type: 'reference' --- - - # system.settings_profiles 構成済みの設定プロファイルのプロパティを保持します。 @@ -16,17 +14,9 @@ doc_type: 'reference' {/*AUTOGENERATED_START*/ } -* `name` ([String](../../sql-reference/data-types/)) — 設定プロファイル名。 -* `id` ([UUID](../../sql-reference/data-types/)) — 設定プロファイル ID。 -* `storage` ([String](../../sql-reference/data-types/)) — 設定プロファイルのストレージへのパス。`access_control_path` パラメータで設定します。 -* `num_elements` ([UInt64](../../sql-reference/data-types/)) — このプロファイルに対する `system.settings_profile_elements` テーブル内の要素数。 -* `apply_to_all` ([UInt8](../../sql-reference/data-types/)) — 設定プロファイルがすべてのロールおよび/またはユーザーに対して設定されていることを示します。 -* `apply_to_list` ([Array(String)](../../sql-reference/data-types/)) — 設定プロファイルが適用されるロールおよび/またはユーザーの一覧。 -* `apply_to_except` ([Array(String)](../../sql-reference/data-types/)) — 設定プロファイルが、一覧に含まれるものを除くすべてのロールおよび/またはユーザーに適用されます。 - {/*AUTOGENERATED_END*/ } ## 関連項目 {#see-also} -- [SHOW PROFILES](/sql-reference/statements/show#show-profiles) +- [SHOW PROFILES](/sql-reference/statements/show#show-profiles) \ No newline at end of file diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/table_engines.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/table_engines.md index d4589a85585..bfcb94e3927 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/table_engines.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/table_engines.md @@ -1,34 +1,22 @@ --- -description: 'サーバーがサポートするテーブルエンジンと、それぞれがサポートする機能に関する説明を含むシステムテーブル。' +description: 'サーバーがサポートするテーブルエンジンと、その対応機能の説明を含むシステムテーブル。' keywords: ['システムテーブル', 'table_engines'] slug: /operations/system-tables/table_engines title: 'system.table_engines' doc_type: 'reference' --- - - # system.table_engines -サーバーでサポートされているテーブルエンジンと、それぞれの機能サポート情報を記述します。 +サーバーがサポートするテーブルエンジンと、それぞれの機能サポート情報の説明を含みます。 -このテーブルには次の列が含まれます(列の型は括弧内に示します): +このテーブルには次の列が含まれます(かっこ内は列の型を示します)。 {/*AUTOGENERATED_START*/ } -* `name` ([String](../../sql-reference/data-types/)) — テーブルエンジンの名前。 -* `supports_settings` ([UInt8](../../sql-reference/data-types/)) — テーブルエンジンが `SETTINGS` 句をサポートするかどうかを示すフラグ。 -* `supports_skipping_indices` ([UInt8](../../sql-reference/data-types/)) — テーブルエンジンがスキップインデックスをサポートするかどうかを示すフラグ。 -* `supports_projections` ([UInt8](../../sql-reference/data-types/)) — テーブルエンジンがプロジェクションをサポートするかどうかを示すフラグ。 -* `supports_sort_order` ([UInt8](../../sql-reference/data-types/)) — テーブルエンジンが `PARTITION_BY`、`PRIMARY_KEY`、`ORDER_BY`、`SAMPLE_BY` 句をサポートするかどうかを示すフラグ。 -* `supports_ttl` ([UInt8](../../sql-reference/data-types/)) — テーブルエンジンが `TTL` をサポートするかどうかを示すフラグ。 -* `supports_replication` ([UInt8](../../sql-reference/data-types/)) — テーブルエンジンがデータのレプリケーションをサポートするかどうかを示すフラグ。 -* `supports_deduplication` ([UInt8](../../sql-reference/data-types/)) — テーブルエンジンがデータの重複排除をサポートするかどうかを示すフラグ。 -* `supports_parallel_insert` ([UInt8](../../sql-reference/data-types/)) — テーブルエンジンが並列挿入(`max_insert_threads` 設定を参照)をサポートするかどうかを示すフラグ。 - {/*AUTOGENERATED_END*/ } -例: +例: ```sql SELECT * diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/time_zones.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/time_zones.md index 89ecdfc7cee..f1d91b2767f 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/time_zones.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/time_zones.md @@ -1,23 +1,19 @@ --- -description: 'ClickHouse サーバーがサポートしているタイムゾーンの一覧を格納するシステムテーブル。' -keywords: ['system table', 'time_zones'] +description: 'ClickHouse サーバーでサポートされているタイムゾーンの一覧を含む system テーブル。' +keywords: ['system テーブル', 'time_zones'] slug: /operations/system-tables/time_zones title: 'system.time_zones' doc_type: 'reference' --- - - # system.time_zones -ClickHouse サーバーがサポートしているタイムゾーンの一覧を保持します。このタイムゾーン一覧は、ClickHouse のバージョンによって異なる場合があります。 +ClickHouse サーバーがサポートしているタイムゾーンの一覧を保持します。この一覧は ClickHouse のバージョンによって異なる場合があります。 列: {/*AUTOGENERATED_START*/ } -* `time_zone` ([String](../../sql-reference/data-types/)) — サポートされているタイムゾーンの一覧。 - {/*AUTOGENERATED_END*/ } **例** diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/user_processes.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/user_processes.md index 2c431c2f501..a805a476772 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/user_processes.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/user_processes.md @@ -1,6 +1,6 @@ --- -description: 'ユーザーのメモリ使用量と ProfileEvents の概要を把握するのに有用な情報を含む system テーブル。' -keywords: ['system テーブル', 'user_processes'] +description: 'メモリ使用量およびユーザーの ProfileEvents の概要を把握するのに役立つ情報を含むシステムテーブル。' +keywords: ['system table', 'user_processes'] slug: /operations/system-tables/user_processes title: 'system.user_processes' doc_type: 'reference' @@ -13,17 +13,12 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -このシステムテーブルは、ユーザーごとのメモリ使用量および ProfileEvents の概要を取得するために使用できます。 +このシステムテーブルを使用すると、ユーザーごとのメモリ使用量と ProfileEvents の概要を確認できます。 列: {/*AUTOGENERATED_START*/ } -* `user` ([String](../../sql-reference/data-types/)) — ユーザー名。 -* `memory_usage` ([Int64](../../sql-reference/data-types/)) — ユーザーのすべてのプロセスで使用されているメモリの合計。一部の種類の専用メモリは含まれない場合があります。`max_memory_usage` 設定を参照してください。 -* `peak_memory_usage` ([Int64](../../sql-reference/data-types/)) — ユーザーのメモリ使用量のピーク値。ユーザーに対してクエリが実行されていない場合はリセットされることがあります。 -* `ProfileEvents` ([Map(String, UInt64)](../../sql-reference/data-types/)) — ユーザーに対してさまざまなメトリクスを計測する `ProfileEvents` の集計。これらの説明は `system.events` テーブルで確認できます。 - {/*AUTOGENERATED_END*/ } ```sql diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/users.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/users.md index f32d283bf85..3801ae90246 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/users.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/users.md @@ -1,13 +1,11 @@ --- -description: 'サーバー上で構成されているユーザーアカウントの一覧を保持する system テーブル。' +description: 'サーバー上で構成されているユーザーアカウントの一覧を含む system テーブル。' keywords: ['system テーブル', 'ユーザー'] slug: /operations/system-tables/users title: 'system.users' doc_type: 'reference' --- - - # system.users サーバー上で構成されている[ユーザーアカウント](../../guides/sre/user-management/index.md#user-account-management)の一覧を含みます。 @@ -16,26 +14,9 @@ doc_type: 'reference' {/*AUTOGENERATED_START*/ } -* `name` ([String](../../sql-reference/data-types/)) — ユーザー名。 -* `id` ([UUID](../../sql-reference/data-types/)) — ユーザー ID。 -* `storage` ([String](../../sql-reference/data-types/)) — ユーザーのストレージへのパス。`access_control_path` パラメータで設定されます。 -* `auth_type` ([Array(Enum8('no_password' = 0, 'plaintext_password' = 1, 'sha256_password' = 2, 'double_sha1_password' = 3, 'ldap' = 4, 'kerberos' = 5, 'ssl_certificate' = 6, 'bcrypt_password' = 7, 'ssh_key' = 8, 'http' = 9, 'jwt' = 10, 'scram_sha256_password' = 11, 'no_authentication' = 12))](../../sql-reference/data-types/)) — 認証タイプを示します。ユーザー認証には複数の方式があります。パスワードなし、平文パスワード、SHA256 でエンコードされたパスワード、二重 SHA-1 でエンコードされたパスワード、bcrypt でエンコードされたパスワードなど。 -* `auth_params` ([Array(String)](../../sql-reference/data-types/)) — `auth_type` に応じた JSON 形式の認証パラメータ。 -* `host_ip` ([Array(String)](../../sql-reference/data-types/)) — ClickHouse サーバーへの接続が許可されているホストの IP アドレス。 -* `host_names` ([Array(String)](../../sql-reference/data-types/)) — ClickHouse サーバーへの接続が許可されているホスト名。 -* `host_names_regexp` ([Array(String)](../../sql-reference/data-types/)) — ClickHouse サーバーへの接続が許可されているホスト名に対する正規表現。 -* `host_names_like` ([Array(String)](../../sql-reference/data-types/)) — LIKE 述語を使用して指定された、ClickHouse サーバーへの接続が許可されているホスト名。 -* `default_roles_all` ([UInt8](../../sql-reference/data-types/)) — 付与されたすべてのロールが、そのユーザーに対してデフォルトとして設定されていることを示します。 -* `default_roles_list` ([Array(String)](../../sql-reference/data-types/)) — デフォルトで付与されるロールのリスト。 -* `default_roles_except` ([Array(String)](../../sql-reference/data-types/)) — デフォルトとして設定される付与済みロールのうち、一覧に挙げられたものを除くすべて。 -* `grantees_any` ([UInt8](../../sql-reference/data-types/)) — 任意の GRANT オプションを持つユーザーが、その権限を誰にでも付与できるかどうかを示すフラグ。 -* `grantees_list` ([Array(String)](../../sql-reference/data-types/)) — このユーザーが GRANT オプションを付与することを許可されているユーザーまたはロールのリスト。 -* `grantees_except` ([Array(String)](../../sql-reference/data-types/)) — このユーザーが GRANT オプションを付与することを禁止されているユーザーまたはロールのリスト。 -* `default_database` ([String](../../sql-reference/data-types/)) — このユーザーのデフォルトデータベース名。 - {/*AUTOGENERATED_END*/ } -## 関連情報 {#see-also} +## 関連項目 {#see-also} -- [SHOW USERS](/sql-reference/statements/show#show-users) +- [SHOW USERS](/sql-reference/statements/show#show-users) \ No newline at end of file diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/view_refreshes.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/view_refreshes.md index fc70b52453e..98e1e817ff6 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/view_refreshes.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/view_refreshes.md @@ -1,6 +1,6 @@ --- -description: 'リフレッシュ可能なマテリアライズドビューに関する情報を含むシステムテーブル。' -keywords: ['システムテーブル', 'view_refreshes'] +description: 'Refreshable マテリアライズドビューに関する情報を保持する system テーブル。' +keywords: ['system table', 'view_refreshes'] slug: /operations/system-tables/view_refreshes title: 'system.view_refreshes' doc_type: 'reference' @@ -13,30 +13,12 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -[Refreshable Materialized Views](../../sql-reference/statements/create/view.md#refreshable-materialized-view) に関する情報を含みます。リフレッシュ処理が進行中かどうかに関係なく、すべてのリフレッシュ可能なマテリアライズドビューが含まれます。 +[Refreshable Materialized Views](../../sql-reference/statements/create/view.md#refreshable-materialized-view) に関する情報。リフレッシュ処理の進行中かどうかに関係なく、すべてのリフレッシュ可能なマテリアライズドビューを含みます。 列: {/*AUTOGENERATED_START*/ } -* `database` ([String](../../sql-reference/data-types/)) — テーブルが存在するデータベース名。 -* `view` ([String](../../sql-reference/data-types/)) — テーブル名。 -* `uuid` ([UUID](../../sql-reference/data-types/)) — テーブルの UUID(Atomic データベース)。 -* `status` ([String](../../sql-reference/data-types/)) — リフレッシュの現在の状態。 -* `last_success_time` ([Nullable(DateTime)](../../sql-reference/data-types/)) — 直近で正常に完了したリフレッシュが開始された時刻。サーバーの起動またはテーブル作成以降に正常終了したリフレッシュがない場合は NULL。 -* `last_success_duration_ms` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 直近のリフレッシュに要した時間。 -* `last_refresh_time` ([Nullable(DateTime)](../../sql-reference/data-types/)) — 直近のリフレッシュ試行が終了した時刻(不明な場合や実行中の場合は開始時刻)。サーバーの起動またはテーブル作成以降にリフレッシュ試行がない場合は NULL。 -* `last_refresh_replica` ([String](../../sql-reference/data-types/)) — コーディネーションが有効な場合、現在(実行中の場合)または直前(実行中でない場合)のリフレッシュ試行を実行したレプリカ名。 -* `next_refresh_time` ([Nullable(DateTime)](../../sql-reference/data-types/)) — 次回のリフレッシュが開始予定の時刻。status が Scheduled の場合のみ。 -* `exception` ([String](../../sql-reference/data-types/)) — 直前の試行が失敗した場合のエラーメッセージ。 -* `retry` ([UInt64](../../sql-reference/data-types/)) — 現在のリフレッシュについて、これまでに失敗した試行回数。status が `RunningOnAnotherReplica` の場合は利用不可。 -* `progress` ([Nullable(Float64)](../../sql-reference/data-types/)) — 指定されたレプリカにおける、現在実行中または直近で完了したリフレッシュの進行状況(0〜1 の範囲)。status が `RunningOnAnotherReplica` の場合、またはリフレッシュが実行中でない場合は NULL。 -* `read_rows` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 指定されたレプリカにおける、現在実行中または直近で完了したリフレッシュで読み取られた行数。status が `RunningOnAnotherReplica` の場合は NULL。 -* `read_bytes` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 指定されたレプリカにおける、現在実行中または直近で完了したリフレッシュで読み取られたバイト数。status が `RunningOnAnotherReplica` の場合は NULL。 -* `total_rows` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 指定されたレプリカにおける、現在実行中または直近で完了したリフレッシュで読み取る必要があると推定される総行数。status が `RunningOnAnotherReplica` の場合は NULL。 -* `written_rows` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 指定されたレプリカにおける、現在実行中または直近で完了したリフレッシュで書き込まれた行数。status が `RunningOnAnotherReplica` の場合は NULL。 -* `written_bytes` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 指定されたレプリカにおける、現在実行中または直近で完了したリフレッシュで書き込まれたバイト数。status が `RunningOnAnotherReplica` の場合は NULL。 - {/*AUTOGENERATED_END*/ } **例** diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/workloads.md b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/workloads.md index 1be5318410a..6ff21773775 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/workloads.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/operations/system-tables/workloads.md @@ -1,16 +1,14 @@ --- -description: 'ローカルサーバー上のワークロードに関する情報を格納するシステムテーブル。' +description: 'ローカルサーバー上で動作するワークロードに関する情報を格納するシステムテーブル。' keywords: ['system table', 'ワークロード'] slug: /operations/system-tables/workloads title: 'system.workloads' doc_type: 'reference' --- - - # system.workloads -ローカルサーバー上にある[ワークロード](/operations/workload-scheduling.md#workload_entity_storage)に関する情報を保持します。テーブルには各ワークロードにつき 1 行が格納されます。 +ローカルサーバー上に存在する [workloads](/operations/workload-scheduling.md#workload_entity_storage) に関する情報を含みます。テーブルには各 workload ごとに 1 行が格納されます。 例: @@ -21,31 +19,27 @@ FORMAT Vertical ``` ```text -行 1: +Row 1: ────── name: production parent: all create_query: CREATE WORKLOAD production IN `all` SETTINGS weight = 9 -行 2: +Row 2: ────── name: development parent: all create_query: CREATE WORKLOAD development IN `all` -行 3: +Row 3: ────── name: all parent: create_query: CREATE WORKLOAD `all` ``` -カラム: +列: {/*AUTOGENERATED_START*/ } -* `name` ([String](../../sql-reference/data-types/)) — ワークロードの名前。 -* `parent` ([String](../../sql-reference/data-types/)) — 親ワークロードの名前。 -* `create_query` ([String](../../sql-reference/data-types/)) — ワークロードの CREATE クエリ。 - {/*AUTOGENERATED_END*/ } diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/aggregate-functions/reference/index.md b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/aggregate-functions/reference/index.md index de6d92e674e..7b9cdfc0175 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/aggregate-functions/reference/index.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/aggregate-functions/reference/index.md @@ -1,5 +1,5 @@ --- -description: '集約関数のランディングページ(集約関数の全一覧)' +description: '集約関数のランディングページ(すべての集約関数の完全な一覧)' sidebar_position: 36 slug: /sql-reference/aggregate-functions/reference/ title: '集約関数' @@ -12,153 +12,14 @@ doc_type: 'landing-page' # 集約関数 -ClickHouse は、すべての標準的な SQL 集約関数([sum](../reference/sum.md)、[avg](../reference/avg.md)、[min](../reference/min.md)、[max](../reference/max.md)、[count](../reference/count.md))に加えて、幅広いその他の集約関数もサポートしています。 +ClickHouseは、標準的なSQL集約関数([sum](../reference/sum.md)、[avg](../reference/avg.md)、[min](../reference/min.md)、[max](../reference/max.md)、[count](../reference/count.md))のすべてに加え、その他多数の集約関数をサポートしています。 -{/* このページの目次テーブルは、次のスクリプトによって、 - YAML フロントマターのフィールド(slug、description、title)から自動生成されています。 - https://github.com/ClickHouse/clickhouse-docs/blob/main/scripts/autogenerate-table-of-contents.sh + - -{/*AUTOGENERATED_START*/ } - -| ページ | 説明 | -| --------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [aggThrow](/sql-reference/aggregate-functions/reference/aggthrow) | この関数は例外安全性のテストに使用できます。指定した確率で生成時に例外をスローします。 | -| [analysisOfVariance](/sql-reference/aggregate-functions/reference/analysis_of_variance) | 一元配置分散分析(ANOVA)の統計的検定を提供します。これは、正規分布に従う複数のグループについて、すべてのグループの平均が同じかどうかを判定するための検定です。 | -| [any](/sql-reference/aggregate-functions/reference/any) | 指定した列で最初に出現した値を選択します。 | -| [anyHeavy](/sql-reference/aggregate-functions/reference/anyheavy) | heavy hitters アルゴリズムを使用して、頻出する値を選択します。クエリの各実行スレッドにおいて、出現回数がそのスレッド内の全体の半数を超える値が存在する場合、その値が返されます。通常、結果は非決定的です。 | -| [anyLast](/sql-reference/aggregate-functions/reference/anylast) | 列で最後に出現した値を選択します。 | -| [approx_top_k](/sql-reference/aggregate-functions/reference/approxtopk) | 指定した列において、おおよその最頻値とその出現回数の配列を返します。 | -| [approx_top_sum](/sql-reference/aggregate-functions/reference/approxtopsum) | 指定した列について、おおよそ最も頻出する値とその出現回数を要素とする配列を返します。 | -| [argMax](/sql-reference/aggregate-functions/reference/argmax) | 最大の `val` に対応する `arg` の値を計算します。 | -| [argMin](/sql-reference/aggregate-functions/reference/argmin) | 最小の `val` 値に対応する `arg` 値を計算します。最小の `val` が同じ値の行が複数ある場合、どの `arg` が返されるかは保証されません。 | -| [argAndMin](/sql-reference/aggregate-functions/reference/argandmin) | 最小の `val` 値に対する `arg` と `val` を計算します。最小の `val` が同じ値を持つ行が複数ある場合、どの行に対応する `arg` と `val` が返されるかは非決定的です。 | -| [argAndMax](/sql-reference/aggregate-functions/reference/argandmax) | 最大の `val` に対応する `arg` と `val` の値を計算します。最大となる `val` を持つ行が複数ある場合、どの行の `arg` と `val` が返されるかは非決定的です。 | -| [groupArrayArray](/sql-reference/aggregate-functions/reference/grouparrayarray) | 配列を集約し、それらを要素とするより大きな配列を生成します。 | -| [avg](/sql-reference/aggregate-functions/reference/avg) | 算術平均を計算します。 | -| [avgWeighted](/sql-reference/aggregate-functions/reference/avgweighted) | 加重平均を計算します。 | -| [boundingRatio](/sql-reference/aggregate-functions/reference/boundingRatio) | 値のグループに対して、最左端と最右端の点の間の傾きを計算する集約関数。 | -| [categoricalInformationValue](/sql-reference/aggregate-functions/reference/categoricalinformationvalue) | 各カテゴリごとに、`(P(tag = 1) - P(tag = 0))(log(P(tag = 1)) - log(P(tag = 0)))` の値を計算します。 | -| [contingency](/sql-reference/aggregate-functions/reference/contingency) | `contingency` 関数は、コンティンジェンシー係数を計算します。これは、表内の 2 つの列間の関連の強さを測定する値です。計算は `cramersV` 関数と似ていますが、平方根内の分母が異なります。 | -| [corr](/sql-reference/aggregate-functions/reference/corr) | ピアソン相関係数を計算します。 | -| [corrMatrix](/sql-reference/aggregate-functions/reference/corrmatrix) | N 個の変数について相関行列を計算します。 | -| [corrStable](/sql-reference/aggregate-functions/reference/corrstable) | ピアソンの相関係数を、数値的に安定なアルゴリズムで計算します。 | -| [count](/sql-reference/aggregate-functions/reference/count) | 行数または NULL 以外の値の個数を数えます。 | -| [covarPop](/sql-reference/aggregate-functions/reference/covarpop) | 母集団共分散を計算します | -| [covarPopMatrix](/sql-reference/aggregate-functions/reference/covarpopmatrix) | N 個の変数の母共分散行列を返します。 | -| [covarPopStable](/sql-reference/aggregate-functions/reference/covarpopstable) | 母集団共分散の値を計算する | -| [covarSamp](/sql-reference/aggregate-functions/reference/covarsamp) | `Σ((x - x̅)(y - y̅)) / (n - 1)` の値を計算します | -| [covarSampMatrix](/sql-reference/aggregate-functions/reference/covarsampmatrix) | N個の変数の標本共分散行列を返します。 | -| [covarSampStable](/sql-reference/aggregate-functions/reference/covarsampstable) | covarSamp と同様に動作しますが、計算誤差をより小さく抑えられる代わりに処理速度が遅くなります。 | -| [cramersV](/sql-reference/aggregate-functions/reference/cramersv) | `cramersV` 関数の結果は 0(変数間に連関がないことに対応)から 1 の範囲を取り、各値が他方の値によって完全に決定される場合にのみ 1 になります。これは、2 つの変数間の連関の強さを、それらが取り得る最大限の変動に対する割合として解釈できます。 | -| [cramersVBiasCorrected](/sql-reference/aggregate-functions/reference/cramersvbiascorrected) | バイアス補正を行った Cramer's V を計算します。 | -| [deltaSum](/sql-reference/aggregate-functions/reference/deltasum) | 連続する行同士の算術的な差分を合計します。 | -| [deltaSumTimestamp](/sql-reference/aggregate-functions/reference/deltasumtimestamp) | 連続する行同士の差分を加算します。差分が負の場合は無視されます。 | -| [entropy](/sql-reference/aggregate-functions/reference/entropy) | 列内の値のシャノンエントロピーを計算します。 | -| [estimateCompressionRatio](/sql-reference/aggregate-functions/reference/estimateCompressionRatio) | 指定した列を圧縮処理を行わずに、その圧縮率を推定します。 | -| [exponentialMovingAverage](/sql-reference/aggregate-functions/reference/exponentialMovingAverage) | 指定された期間に対する値の指数移動平均を計算します。 | -| [exponentialTimeDecayedAvg](/sql-reference/aggregate-functions/reference/exponentialTimeDecayedAvg) | 時刻 `t` における時系列の値の指数平滑加重移動平均を返します。 | -| [exponentialTimeDecayedCount](/sql-reference/aggregate-functions/reference/exponentialTimeDecayedCount) | 時系列に対し、時間インデックス `t` における累積的な指数減衰を返します。 | -| [exponentialTimeDecayedMax](/sql-reference/aggregate-functions/reference/exponentialTimeDecayedMax) | 時系列において、時点 `t` で計算された指数平滑移動平均と、時点 `t-1` での指数平滑移動平均のうち大きい方を返します。 | -| [exponentialTimeDecayedSum](/sql-reference/aggregate-functions/reference/exponentialTimeDecayedSum) | 時系列データに対して、時刻 `t` における指数平滑移動平均の値の合計を返します。 | -| [first_value](/sql-reference/aggregate-functions/reference/first_value) | `any` のエイリアスですが、ウィンドウ関数との互換性のために導入されました。ウィンドウ関数では、場合によっては `NULL` 値を処理する必要があるためです(デフォルトでは、ClickHouse のすべての集約関数は `NULL` 値を無視します)。 | -| [flameGraph](/sql-reference/aggregate-functions/reference/flame_graph) | スタックトレースのリストからフレームグラフを生成する集約関数。 | -| [groupArray](/sql-reference/aggregate-functions/reference/grouparray) | 引数の値から配列を生成します。配列に値が追加される順序は不定です。 | -| [groupArrayInsertAt](/sql-reference/aggregate-functions/reference/grouparrayinsertat) | 配列の指定された位置に値を挿入します。 | -| [groupArrayIntersect](/sql-reference/aggregate-functions/reference/grouparrayintersect) | 指定された配列の共通要素を返します(すべての配列に含まれる要素のみを返します)。 | -| [groupArrayLast](/sql-reference/aggregate-functions/reference/grouparraylast) | 最後の引数の値から配列を作成します。 | -| [groupArrayMovingSum](/sql-reference/aggregate-functions/reference/grouparraymovingsum) | 入力値の移動合計を計算します。 | -| [groupArrayMovingAvg](/sql-reference/aggregate-functions/reference/grouparraymovingavg) | 入力値の移動平均を算出します。 | -| [groupArraySample](/sql-reference/aggregate-functions/reference/grouparraysample) | サンプルとなる引数値の配列を作成します。結果の配列の要素数は `max_size` を上限とします。引数値はランダムに選択され、配列に追加されます。 | -| [timeSeriesGroupArray](/sql-reference/aggregate-functions/reference/timeSeriesGroupArray) | タイムスタンプで時系列データを昇順に並べ替えます。 | -| [groupArraySorted](/sql-reference/aggregate-functions/reference/grouparraysorted) | 先頭 N 個の要素を昇順に並べた配列を返します。 | -| [groupBitAnd](/sql-reference/aggregate-functions/reference/groupbitand) | 数値列に対してビット単位の `AND` を適用します。 | -| [groupBitmap](/sql-reference/aggregate-functions/reference/groupbitmap) | 符号なし整数列に対してビットマップまたは集約計算を行うと、型 UInt64 の基数(cardinality)を返します。サフィックス -State を付けると、ビットマップオブジェクトを返します。 | -| [groupBitmapAnd](/sql-reference/aggregate-functions/reference/groupbitmapand) | ビットマップ列の AND 演算を行い、UInt64 型のカーディナリティを返します。関数名に -State サフィックスを付けると、ビットマップオブジェクトを返します。 | -| [groupBitmapOr](/sql-reference/aggregate-functions/reference/groupbitmapor) | ビットマップ列の OR 演算を行い、UInt64 型のカーディナリティを返します。サフィックス -State を付けると、ビットマップオブジェクトを返します。これは `groupBitmapMerge` と同等です。 | -| [groupBitmapXor](/sql-reference/aggregate-functions/reference/groupbitmapxor) | ビットマップ列に対して XOR を計算し、その結果の基数を UInt64 型で返します。末尾に -State サフィックスを付けて使用した場合は、ビットマップオブジェクトを返します。 | -| [groupBitOr](/sql-reference/aggregate-functions/reference/groupbitor) | 一連の数値にビットごとの `OR` を適用します。 | -| [groupBitXor](/sql-reference/aggregate-functions/reference/groupbitxor) | 一連の数値に対して、ビット単位の `XOR` 演算を適用します。 | -| [groupUniqArray](/sql-reference/aggregate-functions/reference/groupuniqarray) | 複数の引数の値から配列を作成します。 | -| [intervalLengthSum](/sql-reference/aggregate-functions/reference/intervalLengthSum) | すべての範囲(数値軸上の線分)の和集合の長さの合計を計算します。 | -| [kolmogorovSmirnovTest](/sql-reference/aggregate-functions/reference/kolmogorovsmirnovtest) | 2つの母集団からの標本にコルモゴロフ–スミルノフ検定を適用します。 | -| [kurtPop](/sql-reference/aggregate-functions/reference/kurtpop) | データ列(シーケンス)の尖度を計算します。 | -| [kurtSamp](/sql-reference/aggregate-functions/reference/kurtsamp) | シーケンスの標本尖度を計算します。 | -| [largestTriangleThreeBuckets](/sql-reference/aggregate-functions/reference/largestTriangleThreeBuckets) | 入力データに Largest Triangle Three Buckets アルゴリズムを適用します。 | -| [last_value](/sql-reference/aggregate-functions/reference/last_value) | `anyLast` と同様に最後に出現した値を選択しますが、NULL も値として許容します。 | -| [mannWhitneyUTest](/sql-reference/aggregate-functions/reference/mannwhitneyutest) | 2つの母集団からの標本に対して Mann-Whitney の順位検定を適用します。 | -| [max](/sql-reference/aggregate-functions/reference/max) | 値のグループの中で最大値を計算する集約関数。 | -| [maxIntersections](/sql-reference/aggregate-functions/reference/maxintersections) | すべての区間が少なくとも 1 回は互いに交差している場合に、一連の区間同士が交差する回数の最大値を計算する集約関数。 | -| [maxIntersectionsPosition](/sql-reference/aggregate-functions/reference/maxintersectionsposition) | `maxIntersections` 関数の各出現位置を計算する集約関数。 | -| [maxMap](/sql-reference/aggregate-functions/reference/maxmap) | `key` 配列で指定されたキーに従って、`value` 配列の最大値を返します。 | -| [meanZTest](/sql-reference/aggregate-functions/reference/meanztest) | 2つの母集団からの標本に平均値のZ検定を適用します。 | -| [median](/sql-reference/aggregate-functions/reference/median) | `median*` 関数は、対応する `quantile*` 関数のエイリアスです。数値データのサンプルに対する中央値を計算します。 | -| [min](/sql-reference/aggregate-functions/reference/min) | 値グループ内の最小値を計算する集約関数です。 | -| [minMap](/sql-reference/aggregate-functions/reference/minmap) | `key` 配列で指定されたキーに従って、`value` 配列から最小値を求めます。 | -| [quantile](/sql-reference/aggregate-functions/reference/quantile) | 数値データ系列の近似分位数を計算します。 | -| [quantileDD](/sql-reference/aggregate-functions/reference/quantileddsketch) | 相対誤差を保証したうえで、サンプルの近似分位点を計算します。 | -| [quantileBFloat16](/sql-reference/aggregate-functions/reference/quantilebfloat16) | bfloat16 数値からなる標本の近似分位数を計算します。 | -| [quantileDeterministic](/sql-reference/aggregate-functions/reference/quantiledeterministic) | 数値データ系列の近似分位数を計算します。 | -| [quantileExact 関数](/sql-reference/aggregate-functions/reference/quantileexact) | quantileExact、quantileExactLow、quantileExactHigh、quantileExactExclusive、quantileExactInclusive 関数 | -| [quantileExactWeighted](/sql-reference/aggregate-functions/reference/quantileexactweighted) | 数値データ系列の分位数を、各要素の重みを考慮して厳密に計算します。 | -| [quantileGK](/sql-reference/aggregate-functions/reference/quantileGK) | Greenwald-Khanna アルゴリズムを使用して数値データシーケンスの分位数を計算します。 | -| [quantileExactWeightedInterpolated](/sql-reference/aggregate-functions/reference/quantileExactWeightedInterpolated) | 各要素の重みを考慮し、線形補間を用いて数値データ列の分位数を計算します。 | -| [quantileInterpolatedWeighted](/sql-reference/aggregate-functions/reference/quantileInterpolatedWeighted) | 各要素の重みを考慮し、線形補間を用いて数値データ列の分位数を計算します。 | -| [quantiles 関数](/sql-reference/aggregate-functions/reference/quantiles) | quantiles, quantilesExactExclusive, quantilesExactInclusive, quantilesGK | -| [quantileTDigest](/sql-reference/aggregate-functions/reference/quantiletdigest) | t-digest アルゴリズムを使用して、数値データ列の近似分位点を計算します。 | -| [quantileTDigestWeighted](/sql-reference/aggregate-functions/reference/quantiletdigestweighted) | t-digest アルゴリズムを使用して、数値データ系列の近似分位数を計算します。 | -| [quantileTiming](/sql-reference/aggregate-functions/reference/quantiletiming) | 指定された精度で数値データのシーケンスに対する分位数を計算します。 | -| [quantileTimingWeighted](/sql-reference/aggregate-functions/reference/quantiletimingweighted) | 指定された精度で、シーケンス内の各要素に割り当てられた重みに基づき、数値データ系列の分位数を計算します。 | -| [rankCorr](/sql-reference/aggregate-functions/reference/rankCorr) | 順位相関係数を計算します。 | -| [simpleLinearRegression](/sql-reference/aggregate-functions/reference/simplelinearregression) | 単純(1次元の)線形回帰を行います。 | -| [singleValueOrNull](/sql-reference/aggregate-functions/reference/singlevalueornull) | 集約関数 `singleValueOrNull` は、`x = ALL (SELECT ...)` のようなサブクエリ演算子を実装するために使用されます。データ内に非 NULL の値がただ 1 種類だけ存在するかどうかを確認します。 | -| [skewPop](/sql-reference/aggregate-functions/reference/skewpop) | シーケンスの歪度を計算します。 | -| [skewSamp](/sql-reference/aggregate-functions/reference/skewsamp) | データ列の標本歪度を計算します。 | -| [sparkbar](/sql-reference/aggregate-functions/reference/sparkbar) | この関数は、区間 `[min_x, max_x]` における値 `x` とその出現回数 `y` の度数ヒストグラムをプロットします。 | -| [stddevPop](/sql-reference/aggregate-functions/reference/stddevpop) | 結果は varPop の平方根に等しくなります。 | -| [stddevPopStable](/sql-reference/aggregate-functions/reference/stddevpopstable) | 結果は varPop の平方根と等しくなります。stddevPop とは異なり、この関数は数値的に安定なアルゴリズムを使用します。 | -| [stddevSamp](/sql-reference/aggregate-functions/reference/stddevsamp) | 結果は varSamp の平方根である | -| [stddevSampStable](/sql-reference/aggregate-functions/reference/stddevsampstable) | 結果は varSamp の平方根と同じです。この関数は varSamp とは異なり、数値的に安定なアルゴリズムを使用します。 | -| [stochasticLinearRegression](/sql-reference/aggregate-functions/reference/stochasticlinearregression) | この関数は確率的線形回帰を実装します。学習率、L2 正則化係数、ミニバッチサイズなどのカスタムパラメータをサポートし、重み更新のための複数の手法(Adam、単純な SGD、Momentum、Nesterov)を備えています。 | -| [stochasticLogisticRegression](/sql-reference/aggregate-functions/reference/stochasticlogisticregression) | この関数は確率的ロジスティック回帰を実装します。二値分類問題に利用でき、`stochasticLinearRegression` と同じカスタムパラメータをサポートし、動作も同様です。 | -| [studentTTest](/sql-reference/aggregate-functions/reference/studentttest) | 2つの母集団からの標本に対してスチューデントのt検定を適用します。 | -| [sum](/sql-reference/aggregate-functions/reference/sum) | 合計を計算します。数値にのみ使用できます。 | -| [studentTTestOneSample](/sql-reference/aggregate-functions/reference/studentttestonesample) | 既知の母平均に対して1標本のスチューデントのt検定を行います。 | -| [sumCount](/sql-reference/aggregate-functions/reference/sumcount) | 数値の合計を計算すると同時に、行数もカウントします。ClickHouse のクエリオプティマイザで使用される関数です。クエリ内に複数の `sum`、`count`、`avg` 関数がある場合、それらは 1 つの `sumCount` 関数に置き換えられ、計算結果を再利用できます。この関数を明示的に使用する必要があるケースはまれです。 | -| [sumKahan](/sql-reference/aggregate-functions/reference/sumkahan) | Kahan補償和アルゴリズムを用いて数値の総和を計算します | -| [sumMap](/sql-reference/aggregate-functions/reference/summap) | `key` 配列で指定されたキーに従って、1 つ以上の `value` 配列の合計を計算します。ソート順に並んだキー配列と、それに対応する値をオーバーフローなしで合計した値配列からなるタプルを返します。 | -| [sumMapWithOverflow](/sql-reference/aggregate-functions/reference/summapwithoverflow) | `key` 配列で指定されたキーに基づいて、`value` 配列の値を合計します。ソート順のキー配列と、それぞれのキーに対応して合計された値の配列という、2 つの配列からなるタプルを返します。オーバーフローを許容して加算を行う点が、sumMap 関数と異なります。 | -| [sumWithOverflow](/sql-reference/aggregate-functions/reference/sumwithoverflow) | 数値の合計を計算し、結果にも入力パラメータと同じデータ型を使用します。合計がこのデータ型の最大値を超える場合は、オーバーフローを伴って計算されます。 | -| [theilsU](/sql-reference/aggregate-functions/reference/theilsu) | `theilsU` 関数は、Theil の U 不確実性係数を計算します。この係数は、テーブル内の 2 つの列間の関連の強さを表す指標です。 | -| [topK](/sql-reference/aggregate-functions/reference/topk) | 指定した列における、おおよそ最も頻度の高い値を要素とする配列を返します。結果の配列は、値そのものではなく、値のおおよその出現頻度が高い順(降順)に並び替えられます。 | -| [topKWeighted](/sql-reference/aggregate-functions/reference/topkweighted) | 指定された列において、おおよそ最頻出となる値の配列を返します。結果の配列は、値そのものではなく、値の概算の出現頻度に基づいて出現頻度の高い順に並べ替えられます。さらに、値の重みも考慮されます。 | -| [uniq](/sql-reference/aggregate-functions/reference/uniq) | 引数の異なる値のおおよその個数を計算します。 | -| [uniqCombined](/sql-reference/aggregate-functions/reference/uniqcombined) | 異なる引数値のおおよその数を計算します。 | -| [uniqCombined64](/sql-reference/aggregate-functions/reference/uniqcombined64) | 異なる引数値のおおよその個数を計算します。`uniqCombined` と同様ですが、`String` データ型だけでなく、すべてのデータ型に対して 64 ビットハッシュを使用します。 | -| [uniqExact](/sql-reference/aggregate-functions/reference/uniqexact) | 異なる引数値の個数を正確に算出します。 | -| [uniqHLL12](/sql-reference/aggregate-functions/reference/uniqhll12) | HyperLogLog アルゴリズムを使用して、引数の異なる値のおおよその個数を計算します。 | -| [uniqTheta](/sql-reference/aggregate-functions/reference/uniqthetasketch) | Theta Sketch Framework を使用して、異なる引数値の概算個数を計算します。 | -| [varPop](/sql-reference/aggregate-functions/reference/varPop) | 母分散を計算します。 | -| [varPopStable](/sql-reference/aggregate-functions/reference/varpopstable) | 母分散を返します。`varPop` とは異なり、この関数は数値的に安定したアルゴリズムを使用します。処理は遅くなりますが、計算誤差はより小さくなります。 | -| [varSamp](/sql-reference/aggregate-functions/reference/varSamp) | データセットの標本分散を算出します。 | -| [varSampStable](/sql-reference/aggregate-functions/reference/varsampstable) | データセットの標本分散を計算します。`varSamp` とは異なり、この関数は数値的に安定したアルゴリズムを使用します。処理速度は遅くなりますが、計算誤差を小さく抑えられます。 | -| [welchTTest](/sql-reference/aggregate-functions/reference/welchttest) | 2つの母集団から得られた標本にWelchのt検定を適用します。 | -| [distinctDynamicTypes](/sql-reference/aggregate-functions/reference/distinctdynamictypes) | Dynamic 列に格納されている重複のないデータ型の一覧を返します。 | -| [distinctJSONPaths](/sql-reference/aggregate-functions/reference/distinctjsonpaths) | JSON列に保存されている重複のないパスの一覧を算出します。 | -| [timeSeriesDeltaToGrid](/sql-reference/aggregate-functions/reference/timeSeriesDeltaToGrid) | 指定されたグリッド上の時系列データに対して、PromQL の `delta` 関数と同様の変化量を計算する集約関数。 | -| [timeSeriesInstantDeltaToGrid](/sql-reference/aggregate-functions/reference/timeSeriesInstantDeltaToGrid) | 指定したグリッドに従って時系列データに対し、PromQL の idelta と同様の値を計算する集約関数。 | -| [timeSeriesInstantRateToGrid](/sql-reference/aggregate-functions/reference/timeSeriesInstantRateToGrid) | 指定されたグリッド上の時系列データに対して、PromQL の irate 関数に類似した値を計算する集約関数。 | -| [timeSeriesLastTwoSamples](/sql-reference/aggregate-functions/reference/timeSeriesLastTwoSamples) | PromQL ライクな irate および idelta 計算のために時系列データを再サンプリングする集約関数 | -| [timeSeriesRateToGrid](/sql-reference/aggregate-functions/reference/timeSeriesRateToGrid) | 指定したグリッドに従って時系列データの PromQL 風 rate を計算する集約関数。 | -| [timeSeriesResampleToGridWithStaleness](/sql-reference/aggregate-functions/reference/timeSeriesResampleToGridWithStaleness) | 時系列データを指定したグリッドに再サンプリングする集約関数。 | -| [timeSeriesDerivToGrid](/sql-reference/aggregate-functions/reference/timeSeriesDerivToGrid) | 指定されたグリッドに沿って時系列データの PromQL 風微分を計算する集約関数です。 | -| [timeSeriesPredictLinearToGrid](/sql-reference/aggregate-functions/reference/timeSeriesPredictLinearToGrid) | 指定されたグリッド上の時系列データに対して、PromQL 風の線形予測を計算する集約関数。 | -| [timeSeriesChangesToGrid](/sql-reference/aggregate-functions/reference/timeSeriesChangesToGrid) | 指定したグリッドに従って時系列データの PromQL ライクな変化量を計算する集約関数。 | -| [timeSeriesResetsToGrid](/sql-reference/aggregate-functions/reference/timeSeriesResetsToGrid) | 指定されたグリッドに基づいて、時系列データに対する PromQL 風のリセット回数を計算する集約関数。 | -| [groupConcat](/sql-reference/aggregate-functions/reference/groupconcat) | 文字列のグループを、任意の区切り文字で区切って連結した文字列を生成し、必要に応じて要素数の最大値で制限します。 | -| [quantilePrometheusHistogram](/sql-reference/aggregate-functions/reference/quantilePrometheusHistogram) | 線形補間を用いてヒストグラムの分位点を計算します。 | - -{/*AUTOGENERATED_END*/ } + + diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/data-types/aggregatefunction.md b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/data-types/aggregatefunction.md index 066eb055a7a..b5835f0a7c7 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/data-types/aggregatefunction.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/data-types/aggregatefunction.md @@ -1,5 +1,5 @@ --- -description: 'ClickHouse における AggregateFunction データ型に関するドキュメントであり、AggregateFunction データ型は集約関数の中間状態を格納します' +description: '集約関数の中間状態を格納する ClickHouse の AggregateFunction データ型に関するドキュメント' keywords: ['AggregateFunction', 'Type'] sidebar_label: 'AggregateFunction' sidebar_position: 46 @@ -8,28 +8,22 @@ title: 'AggregateFunction 型' doc_type: 'reference' --- - - # AggregateFunction 型 - - ## 説明 {#description} -ClickHouse のすべての [集計関数](/sql-reference/aggregate-functions) には、 -`AggregateFunction` データ型としてシリアライズしてテーブルに保存できる、 -実装依存の中間状態があります。これは通常、 -[マテリアライズドビュー](../../sql-reference/statements/create/view.md) を用いて行います。 +ClickHouse のすべての [集約関数](/sql-reference/aggregate-functions) には、 +実装固有の中間状態があり、それを `AggregateFunction` データ型としてシリアル化して +テーブルに保存できます。これは通常、[マテリアライズドビュー](../../sql-reference/statements/create/view.md) +を用いて行うのが一般的です。 -`AggregateFunction` 型と組み合わせてよく使用される集計関数の +`AggregateFunction` 型とともに一般的に用いられる集約関数の [コンビネータ](/sql-reference/aggregate-functions/combinators) が 2 つあります: -- 集計関数名に付加すると `AggregateFunction` の中間状態を生成する - [`-State`](/sql-reference/aggregate-functions/combinators#-state) 集計関数コンビネータ。 +- 集約関数名に付けると `AggregateFunction` の中間状態を生成する + [`-State`](/sql-reference/aggregate-functions/combinators#-state) 集約関数コンビネータ。 - 中間状態から集約の最終結果を取得するために使用される - [`-Merge`](/sql-reference/aggregate-functions/combinators#-merge) 集計関数コンビネータ。 - - + [`-Merge`](/sql-reference/aggregate-functions/combinators#-merge) 集約関数コンビネータ。 ## 構文 @@ -39,7 +33,7 @@ AggregateFunction(集約関数名, 引数の型...) **パラメータ** -* `aggregate_function_name` - 集約関数の名前。関数がパラメータを取る場合は、そのパラメータも指定する必要があります。 +* `aggregate_function_name` - 集約関数の名前。関数がパラメータ付きである場合は、そのパラメータも指定する必要があります。 * `types_of_arguments` - 集約関数の引数の型。 例: @@ -54,17 +48,17 @@ CREATE TABLE t ``` -## 使用方法 +## 使用方法 {#usage} ### データ挿入 `AggregateFunction` 型のカラムを持つテーブルにデータを挿入するには、 集約関数と -[`-State`](/sql-reference/aggregate-functions/combinators#-state) 集約関数コンビネータを組み合わせた -`INSERT SELECT` を使用できます。 +[`-State`](/sql-reference/aggregate-functions/combinators#-state) +という集約関数コンビネータを用いた `INSERT SELECT` を使用できます。 -たとえば、`AggregateFunction(uniq, UInt64)` 型および -`AggregateFunction(quantiles(0.5, 0.9), UInt64)` 型のカラムにデータを挿入する場合は、 +例えば、型が `AggregateFunction(uniq, UInt64)` および +`AggregateFunction(quantiles(0.5, 0.9), UInt64)` のカラムにデータを挿入する場合は、 次のようなコンビネータ付きの集約関数を使用します。 ```sql @@ -72,26 +66,30 @@ uniqState(UserID) quantilesState(0.5, 0.9)(SendTiming) ``` -`uniq` や `quantiles` 関数とは対照的に、`uniqState` および `quantilesState` -(`-State` コンビネータが付いたもの)は、最終的な値ではなく状態を返します。 +`uniq` および `quantiles` 関数とは対照的に、`uniqState` と `quantilesState` +(`-State` コンビネータが付与されたもの)は、最終値ではなく状態を返します。 言い換えると、これらは `AggregateFunction` 型の値を返します。 -`SELECT` クエリの結果において、`AggregateFunction` 型の値は、 -すべての ClickHouse の出力フォーマットで実装依存のバイナリ表現を持ちます。 +`SELECT` クエリの結果では、`AggregateFunction` 型の値は、 +すべての ClickHouse の出力フォーマットにおいて、実装依存のバイナリ表現を持ちます。 + +入力値から状態を構築できるようにする、セッションレベルの特別な設定 `aggregate_function_input_format` があります。 +これは次のフォーマットをサポートします。 + +* `state` - シリアライズされた状態を含むバイナリ文字列(デフォルト)。 + たとえば、`SELECT` クエリで `TabSeparated` フォーマットにデータをダンプした場合、 + このダンプは `INSERT` クエリを使って再読み込みできます。 +* `value` - フォーマットは集約関数の引数の単一の値、もしくは複数引数の場合はそれらのタプルを受け取り、それをデシリアライズして対応する状態を構成します。 +* `array` - フォーマットは上記の `value` オプションで説明したような値の Array を受け取り、その配列内のすべての要素を集約して状態を構成します。 -たとえば、`SELECT` クエリで `TabSeparated` フォーマットにデータをダンプした場合、 -このダンプは `INSERT` クエリを用いて再度読み込むことができます。 ### データの選択 -`AggregatingMergeTree` テーブルからデータを選択する際には、`GROUP BY` 句と、 -データ挿入時と同じ集約関数を使用しますが、 -その際に [`-Merge`](/sql-reference/aggregate-functions/combinators#-merge) コンビネータを付けて使用します。 +`AggregatingMergeTree` テーブルからデータを選択する場合は、データを挿入したときと同じ集約関数を `GROUP BY` 句とともに使用しますが、[`-Merge`](/sql-reference/aggregate-functions/combinators#-merge) コンビネータを付けて使用します。 -`-Merge` コンビネータが付いた集約関数は、状態の集合を受け取り、それらをマージし、 -完全なデータ集約の結果を返します。 +`-Merge` コンビネータが付いた集約関数は、一連の状態を受け取り、それらを結合して、完全なデータ集約の結果を返します。 -たとえば、次の 2 つのクエリは同じ結果を返します。 +例えば、次の 2 つのクエリは同じ結果を返します。 ```sql SELECT uniq(UserID) FROM table @@ -104,11 +102,9 @@ SELECT uniqMerge(state) FROM (SELECT uniqState(UserID) AS state FROM table GROUP [AggregatingMergeTree](../../engines/table-engines/mergetree-family/aggregatingmergetree.md) エンジンの説明を参照してください。 - - ## 関連コンテンツ {#related-content} - ブログ記事: [Using Aggregate Combinators in ClickHouse](https://clickhouse.com/blog/aggregate-functions-combinators-in-clickhouse-for-arrays-maps-and-states) - [MergeState](/sql-reference/aggregate-functions/combinators#-mergestate) - コンビネータ。 -- [State](/sql-reference/aggregate-functions/combinators#-state) コンビネータ。 + コンビネータ +- [State](/sql-reference/aggregate-functions/combinators#-state) コンビネータ \ No newline at end of file diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/data-types/data-types-binary-encoding.md b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/data-types/data-types-binary-encoding.md index 5a885e1fa4d..38979e28bc1 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/data-types/data-types-binary-encoding.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/data-types/data-types-binary-encoding.md @@ -1,22 +1,18 @@ --- -description: 'データ型のバイナリ符号化仕様に関するドキュメント' -sidebar_label: 'データ型のバイナリ符号化仕様' +description: 'データ型のバイナリエンコーディング仕様に関するドキュメント' +sidebar_label: 'データ型のバイナリエンコーディング仕様' sidebar_position: 56 slug: /sql-reference/data-types/data-types-binary-encoding -title: 'データ型のバイナリ符号化仕様' +title: 'データ型のバイナリエンコーディング仕様' doc_type: 'reference' --- - - # データ型のバイナリエンコーディング仕様 -本仕様では、ClickHouse のデータ型をバイナリ形式でエンコードおよびデコードするために使用できるバイナリフォーマットについて説明します。このフォーマットは `Dynamic` カラムの[バイナリシリアライズ](dynamic.md#binary-output-format)で使用され、対応する設定のもとで入出力フォーマット [RowBinaryWithNamesAndTypes](/interfaces/formats/RowBinaryWithNamesAndTypes) および [Native](/interfaces/formats/Native) でも使用できます。 - -以下の表では、各データ型がバイナリ形式でどのように表現されるかを説明します。各データ型のエンコードは、型を示す 1 バイトと、必要に応じて追加されるオプションの情報から構成されます。 -バイナリエンコーディングにおける `var_uint` は、サイズが可変長数量 (Variable-Length Quantity) による圧縮方式でエンコードされることを意味します。 - +この仕様では、ClickHouse のデータ型のバイナリエンコードおよびデコードに使用できるバイナリ形式について説明します。この形式は `Dynamic` カラムの[バイナリシリアル化](dynamic.md#binary-output-format)で使用され、対応する設定の下で入出力フォーマット [RowBinaryWithNamesAndTypes](/interfaces/formats/RowBinaryWithNamesAndTypes) および [Native](/interfaces/formats/Native) でも使用できます。 +次の表では、各データ型がバイナリ形式でどのように表現されるかを説明します。各データ型のエンコードは、型を示す 1 バイトと、必要に応じて追加される情報で構成されます。 +バイナリエンコーディングにおける `var_uint` は、サイズが Variable-Length Quantity 圧縮を用いてエンコードされていることを意味します。 | ClickHouse のデータ型 | バイナリ符号化 | | --------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -74,42 +70,40 @@ doc_type: 'reference' | `Time64(P)` | `0x34` | | `QBit(T, N)` | `0x36` | +`JSON` 型の場合、バイト `uint8_serialization_version` はシリアル化のバージョンを表します。現在のところバージョンは常に 0 ですが、今後 `JSON` 型に新しい引数が導入された場合には変更される可能性があります。 +### Interval 種別のバイナリ エンコーディング {#interval-kind-binary-encoding} -型 `JSON` のバイト列 `uint8_serialization_version` は、シリアル化のバージョンを示します。現時点では常に 0 ですが、将来 `JSON` 型に新しい引数が追加された場合には変更される可能性があります。 - -### Interval 種別のバイナリエンコード {#interval-kind-binary-encoding} - -次の表は、`Interval` データ型の各種 Interval 種別がどのようにエンコードされるかを示します。 +次の表は、`Interval` データ型のさまざまな種別がどのようにバイナリ形式でエンコードされるかを示します。 -| Interval kind | Binary encoding | -|---------------|-----------------| -| `Nanosecond` | `0x00` | -| `Microsecond` | `0x01` | -| `Millisecond` | `0x02` | -| `Second` | `0x03` | -| `Minute` | `0x04` | -| `Hour` | `0x05` | -| `Day` | `0x06` | -| `Week` | `0x07` | -| `Month` | `0x08` | -| `Quarter` | `0x09` | -| `Year` | `0x1A` | +| Interval の種別 | バイナリ エンコーディング | +|-----------------|----------------------------| +| `Nanosecond` | `0x00` | +| `Microsecond` | `0x01` | +| `Millisecond` | `0x02` | +| `Second` | `0x03` | +| `Minute` | `0x04` | +| `Hour` | `0x05` | +| `Day` | `0x06` | +| `Week` | `0x07` | +| `Month` | `0x08` | +| `Quarter` | `0x09` | +| `Year` | `0x1A` | -### 集約関数パラメータのバイナリエンコード {#aggregate-function-parameter-binary-encoding} +### 集約関数パラメータのバイナリエンコーディング {#aggregate-function-parameter-binary-encoding} -次の表は、`AggregateFunction` および `SimpleAggregateFunction` のパラメータがどのようにエンコードされるかを示します。 -パラメータのエンコードは、パラメータの型を示す 1 バイトと、その値本体から構成されます。 +次の表は、`AggregateFunction` および `SimpleAggregateFunction` のパラメータがどのようにエンコードされるかを示します。 +パラメータのエンコードは、パラメータの型を示す 1 バイトと、その値そのものから構成されます。 -| Parameter type | Binary encoding | +| パラメータ型 | バイナリエンコード形式 | |--------------------------|--------------------------------------------------------------------------------------------------------------------------------| | `Null` | `0x00` | | `UInt64` | `0x01` | | `Int64` | `0x02` | | `UInt128` | `0x03` | | `Int128` | `0x04` | -| `UInt128` | `0x05` | -| `Int128` | `0x06` | +| `UInt256` | `0x05` | +| `Int256` | `0x06` | | `Float64` | `0x07` | | `Decimal32` | `0x08` | | `Decimal64` | `0x09` | @@ -126,4 +120,4 @@ doc_type: 'reference' | `Object` | `0x14...` | | `AggregateFunctionState` | `0x15` | | `Negative infinity` | `0xFE` | -| `Positive infinity` | `0xFF` | +| `Positive infinity` | `0xFF` | \ No newline at end of file diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/arithmetic-functions.md b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/arithmetic-functions.md index b37ec84b9a9..7ab4fd36c43 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/arithmetic-functions.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/arithmetic-functions.md @@ -1,28 +1,24 @@ --- -description: '算術関数のドキュメント' +description: '算術関数のリファレンス' sidebar_label: '算術' slug: /sql-reference/functions/arithmetic-functions title: '算術関数' doc_type: 'reference' --- - - # 算術関数 - - ## 概要 -算術関数は、`UInt8`、`UInt16`、`UInt32`、`UInt64`、`Int8`、`Int16`、`Int32`、`Int64`、`Float32`、`Float64` 型のいずれか 2 つのオペランドに対して動作します。 +算術関数は、`UInt8`、`UInt16`、`UInt32`、`UInt64`、`Int8`、`Int16`、`Int32`、`Int64`、`Float32`、`Float64` 型の任意の 2 つのオペランドに対して動作します。 -演算を実行する前に、両方のオペランドは結果の型にキャストされます。結果の型は次のように決定されます(この後の関数ドキュメントで別途指定されていない限り): +演算を実行する前に、両方のオペランドは結果型にキャストされます。結果型は(後述の各関数のドキュメントで別途指定されていない限り)次のように決定されます。 -* 両方のオペランドが 32 ビット以下の場合、結果の型のサイズは、2 つのオペランドのうちビット幅が大きい方の「次に大きい」型のサイズになります(整数サイズの昇格)。たとえば、`UInt8 + UInt16 = UInt32` や `Float32 * Float32 = Float64` です。 -* オペランドの一方が 64 ビット以上の場合、結果の型のサイズは、2 つのオペランドのうちビット幅が大きい方と同じサイズになります。たとえば、`UInt32 + UInt128 = UInt128` や `Float32 * Float64 = Float64` です。 -* オペランドの一方が符号付き型の場合、結果の型も符号付き型になり、そうでない場合は符号なし型になります。たとえば、`UInt32 * Int32 = Int64` です。 +* 両方のオペランドが 32 ビット以下の場合、結果型のサイズは、2 つのオペランドのうち大きい方よりも 1 段階大きい型のサイズになります(整数サイズの昇格)。例: `UInt8 + UInt16 = UInt32` や `Float32 * Float32 = Float64`。 +* どちらか一方のオペランドが 64 ビット以上の場合、結果型のサイズは 2 つのオペランドのうち大きい方と同じサイズになります。例: `UInt32 + UInt128 = UInt128` や `Float32 * Float64 = Float64`。 +* どちらか一方のオペランドが符号付きである場合、結果型も符号付きになり、そうでない場合は符号なしになります。例: `UInt32 * Int32 = Int64`。 -これらのルールにより、結果の型はあらゆる可能な結果を表現できる最小の型になります。これにより値域の境界付近でオーバーフローが発生するリスクはありますが、64 ビットという最大のネイティブ整数幅を用いて高速に計算を実行できます。この動作は、64 ビット整数(BIGINT)を最大の整数型として提供する多くの他のデータベースとの互換性も保証します。 +これらのルールにより、結果型はあらゆる可能な結果を表現できる最小の型になります。これは値域の境界付近でオーバーフローのリスクを伴いますが、64 ビットという最大のネイティブ整数幅を利用して計算を高速に実行できるようにします。この挙動はまた、最大の整数型として 64 ビット整数(BIGINT)を提供する多くの他のデータベースとの互換性も保証します。 例: @@ -36,1282 +32,14 @@ SELECT toTypeName(0), toTypeName(0 + 0), toTypeName(0 + 0 + 0), toTypeName(0 + 0 └───────────────┴────────────────────────┴─────────────────────────────────┴──────────────────────────────────────────┘ ``` -オーバーフローは C++ と同様の挙動で発生します。 +オーバーフローは C++ と同様に発生します。 {/* - 以下のタグの内側の内容は、ドキュメントフレームワークのビルド時に - system.functions から自動生成されたドキュメントに置き換えられます。タグを変更または削除しないでください。 - 参照: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md + 以下のタグ内の内容は、ドキュメントフレームワークのビルド時に + system.functions から生成されたドキュメントで置き換えられます。タグを変更または削除しないでください。 + 詳細は https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md を参照してください。 */ } - {/*AUTOGENERATED_START*/ } -## abs - -導入バージョン: v1.1 - -`x` の絶対値を計算します。`x` が符号なし型の場合は効果はありません。`x` が符号付き型の場合は、符号なしの数値を返します。 - -**構文** - -```sql -abs(x) -``` - -**引数** - -* `x` — 絶対値を求める対象の値 - -**返り値** - -`x` の絶対値 - -**例** - -**使用例** - -```sql title=Query -SELECT abs(-0.5) -``` - -```response title=Response -0.5 -``` - - -## avg2 - -導入バージョン: v25.11 - -指定された引数の平均値を計算して返します。 -数値型および日時型をサポートします。 - -**構文** - -```sql -avg2(x1, x2]) -``` - -**引数** - -* `x1, x2]` — 平均値を計算するための 2 つの値を受け取ります。 - -**戻り値** - -指定された引数の平均値を、互換性のある型のうち最も広い型に型昇格したうえで返します。 - -**使用例** - -**数値型** - -```sql title=Query -SELECT avg2(toUInt8(3), 1.0) AS result, toTypeName(result) AS type; --- 返される型はFloat64です。比較のためにUInt8を64ビットに昇格する必要があるためです。 -``` - -```response title=Response -┌─result─┬─type────┐ -│ 2 │ Float64 │ -└────────┴─────────┘ -``` - -**Decimal 型** - -```sql title=Query -SELECT avg2(toDecimal32(1, 2), 2) AS result, toTypeName(result) AS type; -``` - -```response title=Response -┌─result─┬─type──────────┐ -│ 1.5 │ Decimal(9, 2) │ -└────────┴───────────────┘ -``` - -**日付型** - -```sql title=Query -SELECT avg2(toDate('2025-01-01'), toDate('2025-01-05')) AS result, toTypeName(result) AS type; -``` - -```response title=Response -┌─────result─┬─type─┐ -│ 2025-01-03 │ Date │ -└────────────┴──────┘ -``` - -**DateTime型** - -```sql title=Query -SELECT avg2(toDateTime('2025-01-01 00:00:00'), toDateTime('2025-01-03 12:00:00')) AS result, toTypeName(result) AS type; -``` - -```response title=Response -┌──────────────result─┬─type─────┐ -│ 2025-01-02 06:00:00 │ DateTime │ -└─────────────────────┴──────────┘ -``` - -**Time64型** - -```sql title=Query -SELECT avg2(toTime64('12:00:00', 0), toTime64('14:00:00', 0)) AS result, toTypeName(result) AS type; -``` - -```response title=Response -┌───result─┬─type──────┐ -│ 13:00:00 │ Time64(0) │ -└──────────┴───────────┘ -``` - - -## byteSwap - -導入バージョン: v23.10 - -整数のバイト順を反転し、その結果として[エンディアン](https://en.wikipedia.org/wiki/Endianness)を変更します。 - -以下の例は次の手順で求めることができます。 - -1. 10進整数をビッグエンディアンでの16進表現に変換する。例: 3351772109 -> C7 C7 FB CD(4バイト) -2. バイト列を反転する。例: C7 C7 FB CD -> CD FB C7 C7 -3. 結果をビッグエンディアンとして整数に戻す。例: CD FB C7 C7 -> 3455829959 - -この関数のユースケースの 1 つは、IPv4 アドレスのバイト順を反転することです。 - -```result -┌─toIPv4(byteSwap(toUInt32(toIPv4('205.251.199.199'))))─┐ -│ 199.199.251.205 │ -└───────────────────────────────────────────────────────┘ -``` - -**構文** - -```sql -byteSwap(x) -``` - -**引数** - -* `x` — 整数値。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**戻り値** - -バイト順を反転した `x` を返します。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT byteSwap(3351772109) -``` - -```response title=Response -3455829959 -``` - -**8ビット** - -```sql title=Query -SELECT byteSwap(54) -``` - -```response title=Response -54 -``` - -**16ビット** - -```sql title=Query -SELECT byteSwap(4135) -``` - -```response title=Response -10000 -``` - -**32ビット** - -```sql title=Query -SELECT byteSwap(3351772109) -``` - -```response title=Response -3455829959 -``` - -**64ビット** - -```sql title=Query -SELECT byteSwap(123294967295) -``` - -```response title=Response -18439412204227788800 -``` - - -## divide - -導入バージョン: v1.1 - -2つの値 `a` と `b` の商を計算します。結果の型は常に [Float64](/sql-reference/data-types/float) です。 -整数除算は `intDiv` 関数で提供されます。 - -:::note -`0` で除算した場合は `inf`、`-inf`、または `nan` を返します。 -::: - -**構文** - -```sql -divide(x, y) -``` - -**引数** - -* `x` — 被除数、`y` — 除数 - -**返される値** - -x を y で割った結果の商 - -**例** - -**2 つの数値を割る** - -```sql title=Query -SELECT divide(25,5) AS quotient, toTypeName(quotient) -``` - -```response title=Response -5 Float64 -``` - -**ゼロ除算** - -```sql title=Query -SELECT divide(25,0) -``` - -```response title=Response -inf -``` - - -## divideDecimal - -導入バージョン: v22.12 - -2つの Decimal に対して除算を行います。結果の値の型は [Decimal256](/sql-reference/data-types/decimal) になります。 -結果のスケールは `result_scale` 引数(範囲 `[0, 76]` の定数 Integer)で明示的に指定できます。指定しない場合、結果のスケールは与えられた引数のスケールの最大値になります。 - -:::note -これらの関数は通常の `divide` 関数と比べて大幅に低速です。 -精度の厳密な制御が不要な場合や、高速な計算が必要な場合は、[divide](#divide) の使用を検討してください。 -::: - -**構文** - -```sql -divideDecimal(x, y[, result_scale]) -``` - -**引数** - -* `x` — 1 つ目の値: [Decimal](/sql-reference/data-types/decimal). - `y` — 2 つ目の値: [Decimal](/sql-reference/data-types/decimal). - `result_scale` — 結果のスケール(小数桁数)。型 [Int/UInt](/sql-reference/data-types/int-uint). - -**戻り値** - -指定されたスケールでの除算結果。[`Decimal256`](/sql-reference/data-types/decimal) - -**例** - -**例 1** - -```sql title=Query -divideDecimal(toDecimal256(-12, 0), toDecimal32(2.1, 1), 10) -``` - -```response title=Response -┌─divideDecimal(toDecimal256(-12, 0), toDecimal32(2.1, 1), 10)─┐ -│ -5.7142857142 │ -└──────────────────────────────────────────────────────────────┘ -``` - -**例 2** - -```sql title=Query -SELECT toDecimal64(-12, 1) / toDecimal32(2.1, 1); -SELECT toDecimal64(-12, 1) as a, toDecimal32(2.1, 1) as b, divideDecimal(a, b, 1), divideDecimal(a, b, 5); -``` - -```response title=Response -┌─divide(toDecimal64(-12, 1), toDecimal32(2.1, 1))─┐ -│ -5.7 │ -└──────────────────────────────────────────────────┘ -┌───a─┬───b─┬─divideDecimal(toDecimal64(-12, 1), toDecimal32(2.1, 1), 1)─┬─divideDecimal(toDecimal64(-12, 1), toDecimal32(2.1, 1), 5)─┐ -│ -12 │ 2.1 │ -5.7 │ -5.71428 │ -└─────┴─────┴────────────────────────────────────────────────────────────┴────────────────────────────────────────────────────────────┘ -``` - - -## divideOrNull - -導入バージョン: v25.5 - -`divide` と同様ですが、0 で除算した場合は NULL を返します。 - -**構文** - -```sql -divideOrNull(x, y) -``` - -**引数** - -* `x` — 被除数、`y` — 除数 - -**戻り値** - -x を y で割った商、または NULL。 - -**例** - -**ゼロで割る場合** - -```sql title=Query -SELECT divideOrNull(25, 0) -``` - -```response title=Response -\N -``` - - -## gcd - -導入: v1.1 - -2 つの値 a と b の最大公約数を返します。 - -0 で割った場合、または最小の負の値を -1 で割った場合には、例外がスローされます。 - -**構文** - -```sql -gcd(x, y) -``` - -**引数** - -* `x` — 第1の整数、`y` — 第2の整数 - -**戻り値** - -`x` と `y` の最大公約数を返します。 - -**例** - -**使用例** - -```sql title=Query -SELECT gcd(12, 18) -``` - -```response title=Response -6 -``` - - -## ifNotFinite - -導入バージョン: v20.3 - -浮動小数点値が有限かどうかを判定します。 - -[三項演算子](/sql-reference/functions/conditional-functions#if) を使用して、同様の結果を得られます:`isFinite(x) ? x : y`。 - -**構文** - -```sql -ifNotFinite(x,y) -``` - -**引数** - -* `x` — 無限かどうかを判定する値。[`Float*`](/sql-reference/data-types/float) -* `y` — フォールバック値。[`Float*`](/sql-reference/data-types/float) - -**戻り値** - -* `x` が有限の場合は `x`。 -* `x` が有限でない場合は `y`。 - -**例** - -**使用例** - -```sql title=Query -SELECT 1/0 AS infimum, ifNotFinite(infimum,42) -``` - -```response title=Response -inf 42 -``` - - -## intDiv - -導入バージョン: v1.1 - -2 つの値 `x` を `y` で整数除算します。言い換えると、商を直前のより小さい整数値に切り下げて計算します。 - -結果のビット幅は被除数(第 1 引数)と同じになります。 - -0 で除算した場合、商が被除数の表現範囲に収まらない場合、または表現可能な最小の負の値を -1 で除算した場合には、例外がスローされます。 - -**構文** - -```sql -intDiv(x, y) -``` - -**引数** - -* `x` — 左辺のオペランド。 -* `y` — 右辺のオペランド。 - -**戻り値** - -`x` と `y` の整数除算の結果。 - -**例** - -**2 つの浮動小数点数の整数除算** - -```sql title=Query -SELECT intDiv(toFloat64(1), 0.001) AS res, toTypeName(res) -``` - -```response title=Response -┌──res─┬─toTypeName(intDiv(toFloat64(1), 0.001))─┐ -│ 1000 │ Int64 │ -└──────┴─────────────────────────────────────────┘ -``` - -**商が被除数の表現範囲に収まりません** - -```sql title=Query -SELECT -intDiv(1, 0.001) AS res, -toTypeName(res) -``` - -```response title=Response -サーバーから例外を受信しました (バージョン 23.2.1): -Code: 153. DB::Exception: Received from localhost:9000. DB::Exception: -整数除算を実行できません。無限大または過大な数値が生成されるためです: intDiv(1, 0.001) AS res, toTypeName(res) の処理中。 -(ILLEGAL_DIVISION) -``` - - -## intDivOrNull - -導入バージョン: v25.5 - -`intDiv` と同様ですが、ゼロ除算を行う場合、または最小の負の整数値をマイナス 1 で割る場合に NULL を返します。 - -**構文** - -```sql -intDivOrNull(x, y) -``` - -**引数** - -* `x` — 左側のオペランド。[`(U)Int*`](/sql-reference/data-types/int-uint) -* `y` — 右側のオペランド。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**戻り値** - -`x` と `y` の整数除算の結果、または NULL。 - -**使用例** - -**0 による整数除算** - -```sql title=Query -SELECT intDivOrNull(1, 0) -``` - -```response title=Response -\N -``` - -**最小の負の数を −1 で割る** - -```sql title=Query -SELECT intDivOrNull(-9223372036854775808, -1) -``` - -```response title=Response -\N -``` - - -## intDivOrZero - -導入バージョン: v1.1 - -`intDiv` と同じですが、ゼロで除算した場合、または最小の負の整数を -1 で除算した場合に 0 を返します。 - -**構文** - -```sql -intDivOrZero(a, b) -``` - -**引数** - -* `a` — 左側のオペランド。[`(U)Int*`](/sql-reference/data-types/int-uint) -* `b` — 右側のオペランド。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**戻り値** - -a を b で整数除算した結果、または 0。 - -**例** - -**0 での整数除算** - -```sql title=Query -SELECT intDivOrZero(1, 0) -``` - -```response title=Response -0 -``` - -**最小の負の数を -1 で割る** - -```sql title=Query -SELECT intDivOrZero(0.05, -1) -``` - -```response title=Response -0 -``` - - -## isFinite - -導入: v1.1 - -Float32 または Float64 型の引数が無限大ではなく、かつ `NaN` でもない場合に `1` を返し、 -それ以外の場合には `0` を返します。 - -**構文** - -```sql -isFinite(x) -``` - -**引数** - -* `x` — 有限かどうかを判定する対象の数値。[`Float*`](/sql-reference/data-types/float) - -**戻り値** - -`x` が無限大でも `NaN` でもない場合は `1`、それ以外は `0` を返します。 - -**例** - -**数値が有限かどうかを判定する** - -```sql title=Query -SELECT isFinite(inf) -``` - -```response title=Response -0 -``` - - -## isInfinite - -導入バージョン: v1.1 - -Float32 または Float64 型の引数が無限大の場合は `1` を返し、それ以外の場合は `0` を返します。 -`NaN` に対しては `0` が返される点に注意してください。 - -**構文** - -```sql -isInfinite(x) -``` - -**引数** - -* `x` — 無限大かどうかを判定する数値。[`Float*`](/sql-reference/data-types/float) - -**戻り値** - -`x` が無限大であれば `1`、それ以外(`NaN` を含む)の場合は `0`。 - -**使用例** - -**数値が無限大かどうかを判定する** - -```sql title=Query -SELECT isInfinite(inf), isInfinite(NaN), isInfinite(10)) -``` - -```response title=Response -1 0 0 -``` - - -## isNaN - -導入バージョン: v1.1 - -浮動小数点数型の Float32 および Float64 の引数が `NaN` の場合は `1` を返し、それ以外の場合は `0` を返します。 - -**構文** - -```sql -isNaN(x) -``` - -**引数** - -* `x` — `NaN` かどうかを判定する対象。[`Float*`](/sql-reference/data-types/float) - -**戻り値** - -`NaN` の場合は `1`、それ以外は `0`。 - -**例** - -**使用例** - -```sql title=Query -SELECT isNaN(NaN) -``` - -```response title=Response -1 -``` - - -## lcm - -導入バージョン: v1.1 - -2つの値 `x` と `y` の最小公倍数を返します。 - -ゼロで除算した場合、または最小の負の値をマイナス1で除算した場合に例外がスローされます。 - -**構文** - -```sql -lcm(x, y) -``` - -**引数** - -* `x` — 1つ目の整数。[`(U)Int*`](/sql-reference/data-types/int-uint) -* `y` — 2つ目の整数。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**戻り値** - -`x` と `y` の最小公倍数を返します。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT lcm(6, 8) -``` - -```response title=Response -24 -``` - - -## max2 - -導入されたバージョン: v21.11 - -2 つの数値 `x` と `y` のうち、大きい方を返します。 - -**構文** - -```sql -max2(x, y) -``` - -**引数** - -* `x` — 1つ目の値 [`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) -* `y` — 2つ目の値 [`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) - -**戻り値** - -`x` と `y` のうち大きい方の値を返します。[`Float64`](/sql-reference/data-types/float) - -**例** - -**使用例** - -```sql title=Query -SELECT max2(-1, 2) -``` - -```response title=Response -2 -``` - - -## midpoint - -導入バージョン: v25.11 - -指定された引数の平均値を計算して返します。 -数値型および時間データ型をサポートします。 - -**構文** - -```sql -midpoint(x1[, x2, ...]) -``` - -**引数** - -* `x1[, x2, ...]` — 平均を計算するための単一値または複数の値を受け取ります。 - -**返り値** - -指定された引数の平均値を返し、その値は互換性のある型のうち最も大きい型に昇格されます。 - -**例** - -**数値型** - -```sql title=Query -SELECT midpoint(1, toUInt8(3), 0.5) AS result, toTypeName(result) AS type; --- 返される型はFloat64です。比較のためにUInt8を64ビットに昇格する必要があるためです。 -``` - -```response title=Response -┌─result─┬─type────┐ -│ 1.5 │ Float64 │ -└────────┴─────────┘ -``` - -**Decimal 型** - -```sql title=Query -SELECT midpoint(toDecimal32(1.5, 2), toDecimal32(1, 1), 2) AS result, toTypeName(result) AS type; -``` - -```response title=Response -┌─result─┬─type──────────┐ -│ 1.5 │ Decimal(9, 2) │ -└────────┴───────────────┘ -``` - -**日付型** - -```sql title=Query -SELECT midpoint(toDate('2025-01-01'), toDate('2025-01-05')) AS result, toTypeName(result) AS type; -``` - -```response title=Response -┌─────result─┬─type─┐ -│ 2025-01-03 │ Date │ -└────────────┴──────┘ -``` - -**DateTime 型** - -```sql title=Query -SELECT midpoint(toDateTime('2025-01-01 00:00:00'), toDateTime('2025-01-03 12:00:00')) AS result, toTypeName(result) AS type; -``` - -```response title=Response -┌──────────────result─┬─type─────┐ -│ 2025-01-02 06:00:00 │ DateTime │ -└─────────────────────┴──────────┘ -``` - -**Time64 型** - -```sql title=Query -SELECT midpoint(toTime64('12:00:00', 0), toTime64('14:00:00', 0)) AS result, toTypeName(result) AS type; -``` - -```response title=Response -┌───result─┬─type──────┐ -│ 13:00:00 │ Time64(0) │ -└──────────┴───────────┘ -``` - - -## min2 - -導入バージョン: v21.11 - -2つの数値 `x` と `y` のうち小さい方を返します。 - -**構文** - -```sql -min2(x, y) -``` - -**引数** - -* `x` — 1つ目の値 [`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) -* `y` — 2つ目の値 [`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) - -**戻り値** - -`x` と `y` のうち小さい方の値を返します。[`Float64`](/sql-reference/data-types/float) - -**例** - -**使用例** - -```sql title=Query -SELECT min2(-1, 2) -``` - -```response title=Response --1 -``` - - -## minus - -導入バージョン: v1.1 - -2 つの値 `a` と `b` の差を計算します。結果は常に符号付きです。 -`plus` と同様に、日付または日時から整数を減算できます。 -さらに、日時同士の減算もサポートされており、その時間差が結果として得られます。 - -**構文** - -```sql -minus(x, y) -``` - -**引数** - -* `x` — 被減数。- `y` — 減数。 - -**戻り値** - -x から y を引いた結果 - -**例** - -**2 つの数値の減算** - -```sql title=Query -SELECT minus(10, 5) -``` - -```response title=Response -5 -``` - -**整数と日付の減算** - -```sql title=Query -SELECT minus(toDate('2025-01-01'),5) -``` - -```response title=Response -2024-12-27 -``` - - -## modulo - -導入: v1.1 - -2つの値 a と b に対して、a を b で割った余りを計算します。 - -両方の入力が整数の場合、結果の型は整数型です。入力の一方が -浮動小数点数の場合、結果の型は Float64 になります。 - -余りは C++ と同様に計算されます。負の数に対しては切り捨て除算が使用されます。 - -ゼロで除算した場合、または最小の負の値を -1 で除算した場合は、例外がスローされます。 - -**構文** - -```sql -modulo(a, b) -``` - -**エイリアス**: `mod` - -**引数** - -* `a` — 被除数 -* `b` — 除数(法) - -**戻り値** - -`a % b` の剰余 - -**例** - -**使用例** - -```sql title=Query -SELECT modulo(5, 2) -``` - -```response title=Response -1 -``` - - -## moduloOrNull - -導入バージョン: v25.5 - -`a` を `b` で割ったときの剰余を計算します。関数 `modulo` と似ていますが、右側の引数が 0 の場合には `moduloOrNull` は NULL を返します。 - -**構文** - -```sql -moduloOrNull(x, y) -``` - -**別名**: `modOrNull` - -**引数** - -* `x` — 被除数。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) -* `y` — 除数(モジュロ)。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) - -**戻り値** - -`x` を `y` で割った余り、または除数がゼロの場合は null を返します。 - -**例** - -**ゼロ除算時の moduloOrNull** - -```sql title=Query -SELECT moduloOrNull(5, 0) -``` - -```response title=Response -\N -``` - - -## moduloOrZero - -導入バージョン: v20.3 - -`modulo` に似ていますが、割る数が 0 の場合に例外を送出する `modulo` 関数とは異なり、0 を返します。 - -**構文** - -```sql -moduloOrZero(a, b) -``` - -**引数** - -* `a` — 被除数。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) -* `b` — 除数(法)。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) - -**返される値** - -a % b の余りを返します。除数が `0` の場合は `0` を返します。 - -**例** - -**使用例** - -```sql title=Query -SELECT moduloOrZero(5, 0) -``` - -```response title=Response -0 -``` - - -## multiply - -導入バージョン: v1.1 - -2つの値 `x` と `y` の積を計算します。 - -**構文** - -```sql -multiply(x, y) -``` - -**引数** - -* `x` — 因子。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) -* `y` — 因子。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) - -**戻り値** - -x と y の積を返します。 - -**例** - -**2 つの数値の乗算** - -```sql title=Query -SELECT multiply(5,5) -``` - -```response title=Response -25 -``` - - -## multiplyDecimal - -導入バージョン: v22.12 - -2つの Decimal 値に対して乗算を行います。結果の値の型は [Decimal256](/sql-reference/data-types/decimal) になります。 -結果のスケールは `result_scale` 引数(範囲 `[0, 76]` の定数の整数値)で明示的に指定できます。指定しない場合、結果のスケールは引数として与えた値のスケールの最大値になります。 - -:::note -これらの関数は通常の `multiply` よりもかなり遅く動作します。 -厳密な精度の制御が不要な場合や、高速な計算が必要な場合は [multiply](#multiply) の利用を検討してください。 -::: - -**構文** - -```sql -multiplyDecimal(a, b[, result_scale]) -``` - -**引数** - -* `a` — 1つ目の値。[`Decimal`](/sql-reference/data-types/decimal) -* `b` — 2つ目の値。[`Decimal`](/sql-reference/data-types/decimal) -* `result_scale` — 結果のスケール(桁数)。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**戻り値** - -指定したスケールでの乗算の結果。型: [`Decimal256`](/sql-reference/data-types/decimal) - -**例** - -**使用例** - -```sql title=Query -SELECT multiplyDecimal(toDecimal256(-12, 0), toDecimal32(-2.1, 1), 1) -``` - -```response title=Response -25.2 -``` - -**通常の乗算との違い** - -```sql title=Query -SELECT multiplyDecimal(toDecimal256(-12, 0), toDecimal32(-2.1, 1), 1) -``` - -```response title=Response -┌─multiply(toDecimal64(-12.647, 3), toDecimal32(2.1239, 4))─┐ -│ -26.8609633 │ -└───────────────────────────────────────────────────────────┘ -┌─multiplyDecimal(toDecimal64(-12.647, 3), toDecimal32(2.1239, 4))─┐ -│ -26.8609 │ -└──────────────────────────────────────────────────────────────────┘ -``` - -**Decimal オーバーフロー** - -```sql title=Query -SELECT - toDecimal64(-12.647987876, 9) AS a, - toDecimal64(123.967645643, 9) AS b, - multiplyDecimal(a, b); -SELECT - toDecimal64(-12.647987876, 9) AS a, - toDecimal64(123.967645643, 9) AS b, - a * b; -``` - -```response title=Response -┌─────────────a─┬─────────────b─┬─multiplyDecimal(toDecimal64(-12.647987876, 9), toDecimal64(123.967645643, 9))─┐ -│ -12.647987876 │ 123.967645643 │ -1567.941279108 │ -└───────────────┴───────────────┴───────────────────────────────────────────────────────────────────────────────┘ -サーバーから例外を受信しました (バージョン 22.11.1): -コード: 407. DB::Exception: localhost:9000 から受信しました。DB::Exception: Decimal演算オーバーフロー: -toDecimal64(-12.647987876, 9) AS a, toDecimal64(123.967645643, 9) AS b, a * b の処理中。(DECIMAL_OVERFLOW) -``` - - -## negate - -導入バージョン: v1.1 - -引数 `x` の符号を反転します。結果は常に符号付きになります。 - -**構文** - -```sql -negate(x) -``` - -**引数** - -* `x` — 符号を反転する対象の値。 - -**返り値** - -x の符号を反転した値 -x を返します。 - -**例** - -**使用例** - -```sql title=Query -SELECT negate(10) -``` - -```response title=Response --10 -``` - - -## plus - -導入バージョン: v1.1 - -2 つの値 `x` と `y` の合計を計算します。別名: `x + y`(演算子)。 -整数と日付、または日時を加算することもできます。前者の -演算では日付に日数が加算され、後者の演算では日時に秒数が加算されます。 - -**構文** - -```sql -plus(x, y) -``` - -**引数** - -* `x` — 左側のオペランド。 - `y` — 右側のオペランド。 - -**戻り値** - -x と y の合計を返します。 - -**例** - -**2 つの数値を加算する** - -```sql title=Query -SELECT plus(5,5) -``` - -```response title=Response -10 -``` - -**整数型と日付型を加算する** - -```sql title=Query -SELECT plus(toDate('2025-01-01'),5) -``` - -```response title=Response -2025-01-06 -``` - - -## positiveModulo - -導入されたバージョン: v22.11 - -`x` を `y` で割ったときの余りを計算します。関数 `modulo` と似ていますが、`positiveModulo` は常に非負の数を返します。 - -**構文** - -```sql -positiveModulo(x, y) -``` - -**別名**: `positive_modulo`, `pmod` - -**引数** - -* `x` — 被除数。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) -* `y` — 除数(法)。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) - -**返される値** - -`x` 以下で `y` で割り切れる最も近い数値と `x` との差を返します。 - -**例** - -**使用例** - -```sql title=Query -SELECT positiveModulo(-1, 10) -``` - -```response title=Response -9 -``` - - -## positiveModuloOrNull - -導入バージョン: v25.5 - -`a` を `b` で割った余りを計算します。`positiveModulo` 関数と似ていますが、右側の引数が 0 の場合は、`positiveModuloOrNull` は NULL を返します。 - -**構文** - -```sql -positiveModuloOrNull(x, y) -``` - -**別名**: `positive_modulo_or_null`, `pmodOrNull` - -**引数** - -* `x` — 被除数。[`(U)Int*`](/sql-reference/data-types/int-uint)/[`Float32/64`](/sql-reference/data-types/float)。 -* `y` — 除数(法)。[`(U)Int*`](/sql-reference/data-types/int-uint)/[`Float32/64`](/sql-reference/data-types/float)。 - -**戻り値** - -`x` 以下で `y` で割り切れる最も近い整数と `x` との差を返します。除数がゼロの場合は `null` を返します。 - -**例** - -**positiveModuloOrNull** - -```sql title=Query -SELECT positiveModuloOrNull(5, 0) -``` - -```response title=Response -\N -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/array-functions.md b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/array-functions.md index c2c1f04eac0..2ae8c663bc6 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/array-functions.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/array-functions.md @@ -6,5013 +6,19 @@ title: '配列関数' doc_type: 'reference' --- - - -# 配列関連関数 +# 配列関数 {/* - 以下のタグ内の内容は、ドキュメントフレームワークのビルド時に - system.functions から自動生成されるドキュメントに置き換えられます。タグ自体は変更したり削除したりしないでください。 - 詳細は https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md を参照してください。 + 以下のタグの内側のコンテンツは、ドキュメントフレームワークのビルド時に + system.functions から自動生成されたドキュメントで置き換えられます。タグを変更または削除しないでください。 + 詳細は次を参照してください: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## array - -導入バージョン: v1.1 - -関数の引数から配列を作成します。 - -引数は定数であり、共通の上位型を持つ型でなければなりません。 -どの型の配列を作成するかが不明確になるため、少なくとも 1 つの引数を渡す必要があります。 -つまり、この関数を使用して空の配列を作成することはできません。空の配列を作成するには、`emptyArray*` 関数を使用してください。 - -同等の機能には `[ ]` 演算子を使用します。 - -**構文** - -```sql -array(x1 [, x2, ..., xN]) -``` - -**引数** - -* `x1` — 任意の型 T の定数値。この引数だけが指定された場合、配列の型は T になります。 - `[, x2, ..., xN]` — `x1` と共通のスーパータイプを持つ追加の N 個の定数値 - -**戻り値** - -渡された引数から求められる最小の共通型 T を要素型とする配列を返します。[`Array(T)`](/sql-reference/data-types/array) - -**例** - -**有効な使用例** - -```sql title=Query -SELECT array(toInt32(1), toUInt16(2), toInt8(3)) AS a, toTypeName(a) -``` - -```response title=Response -┌─a───────┬─toTypeName(a)─┐ -│ [1,2,3] │ Array(Int32) │ -└─────────┴───────────────┘ -``` - -**不正な使い方** - -```sql title=Query -SELECT array(toInt32(5), toDateTime('1998-06-16'), toInt8(5)) AS a, toTypeName(a) -``` - -```response title=Response -サーバーから例外を受信しました (バージョン 25.4.3): -Code: 386. DB::Exception: Received from localhost:9000. DB::Exception: -型 Int32、DateTime、Int8 の共通スーパータイプが存在しません ... -``` - - -## arrayAUCPR - -導入バージョン: v20.4 - -適合率‐再現率(PR)曲線における曲線下面積を計算します。 -適合率‐再現率曲線は、すべてのしきい値に対して、y軸に適合率、x軸に再現率をプロットすることで作成されます。 -得られる値は 0 から 1 の範囲であり、値が大きいほどモデルの性能が高いことを示します。 -PR AUC は不均衡データセットに対して特に有用であり、そのようなケースでは ROC AUC と比較して性能をより明確に比較できます。 -詳細については [こちら](https://developers.google.com/machine-learning/glossary#pr-auc-area-under-the-pr-curve)、[こちら](https://developers.google.com/machine-learning/crash-course/classification/roc-and-auc#expandable-1)、および [こちら](https://en.wikipedia.org/wiki/Receiver_operating_characteristic#Area_under_the_curve) を参照してください。 - -**構文** - -```sql -arrayAUCPR(scores, labels[, partial_offsets]) -``` - -**別名**: `arrayPRAUC` - -**引数** - -* `cores` — 予測モデルが出力するスコア。[`Array((U)Int*)`](/sql-reference/data-types/array) または [`Array(Float*)`](/sql-reference/data-types/array) -* `labels` — サンプルのラベル。通常、正例には 1、負例には 0 を使用します。[`Array((U)Int*)`](/sql-reference/data-types/array) または [`Array(Enum)`](/sql-reference/data-types/array) -* `partial_offsets` — -* オプション。PR 曲線全体の AUC ではなく、PR 曲線下の部分領域(PR 空間の縦方向のバンドに相当)を計算するための、非負整数 3 要素からなる [`Array(T)`](/sql-reference/data-types/array)。このオプションは、PR AUC の分散計算に有用です。配列には次の要素 [`higher_partitions_tp`, `higher_partitions_fp`, `total_positives`] を含める必要があります。 - * `higher_partitions_tp`: より高いスコアのパーティション内にある正例ラベルの数。 - * `higher_partitions_fp`: より高いスコアのパーティション内にある負例ラベルの数。 - * `total_positives`: データセット全体に含まれる正例サンプルの総数。 - -:::note -`arr_partial_offsets` を使用する場合、`arr_scores` と `arr_labels` は、スコアのある区間に対応する、データセット全体の 1 つのパーティションだけを表す必要があります。 -データセットは連続したパーティションに分割され、それぞれのパーティションには、スコアが特定の範囲に属するデータのサブセットが含まれている必要があります。 -例えば次のようになります: - -* あるパーティションには、[0, 0.5) の範囲にあるすべてのスコアを含めることができます。 -* 別のパーティションには、[0.5, 1.0] の範囲にあるスコアを含めることができます。 - ::: - -**返り値** - -適合率-再現率 (PR) 曲線下の面積を返します。[`Float64`](/sql-reference/data-types/float) - -**例** - -**使用例** - -```sql title=Query -SELECT arrayAUCPR([0.1, 0.4, 0.35, 0.8], [0, 0, 1, 1]); -``` - -```response title=Response -┌─arrayAUCPR([0.1, 0.4, 0.35, 0.8], [0, 0, 1, 1])─┐ -│ 0.8333333333333333 │ -└─────────────────────────────────────────────────┘ -``` - - -## arrayAll - -導入バージョン: v1.1 - -ラムダ式 `func(x [, y1, y2, ... yN])` がすべての要素に対して true を返す場合は `1` を返します。そうでない場合は `0` を返します。 - -**構文** - -```sql -arrayAll(func(x[, y1, ..., yN]), source_arr[, cond1_arr, ... , condN_arr]) -``` - -**引数** - -* `func(x[, y1, ..., yN])` — ソース配列(`x`)および条件配列(`y1, ..., yN`)の要素を処理するラムダ関数。[`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `source_arr` — 処理対象となるソース配列。[`Array(T)`](/sql-reference/data-types/array) -* `cond1_arr, ...` — 省略可能。ラムダ関数に追加の引数を渡すための N 個の条件配列。[`Array(T)`](/sql-reference/data-types/array) - -**戻り値** - -ラムダ関数がすべての要素に対して `true` を返す場合は `1`、それ以外の場合は `0` を返す。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**すべての要素が条件を満たす場合** - -```sql title=Query -SELECT arrayAll(x, y -> x=y, [1, 2, 3], [1, 2, 3]) -``` - -```response title=Response -1 -``` - -**すべての要素が一致しているとは限りません** - -```sql title=Query -SELECT arrayAll(x, y -> x=y, [1, 2, 3], [1, 1, 1]) -``` - -```response title=Response -0 -``` - - -## arrayAvg - -導入バージョン: v21.1 - -入力配列の要素の平均値を返します。 - -ラムダ関数 `func` が指定された場合は、そのラムダの結果の平均値を返します。 - -**構文** - -```sql -arrayAvg([func(x[, y1, ..., yN])], source_arr[, cond1_arr, ... , condN_arr]) -``` - -**引数** - -* `func(x[, y1, ..., yN])` — 省略可能。ソース配列 (`x`) および条件配列 (`y`) の要素に対して処理を行うラムダ関数。[`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `source_arr` — 処理対象となるソース配列。[`Array(T)`](/sql-reference/data-types/array) -* `[, cond1_arr, ... , condN_arr]` — 省略可能。ラムダ関数に追加の引数を渡す N 個の条件配列。[`Array(T)`](/sql-reference/data-types/array) - -**戻り値** - -ソース配列内の要素の平均値、またはラムダ関数が指定されている場合は、その結果要素の平均値を返します。[`Float64`](/sql-reference/data-types/float) - -**使用例** - -**基本的な例** - -```sql title=Query -SELECT arrayAvg([1, 2, 3, 4]); -``` - -```response title=Response -2.5 -``` - -**Lambda 関数での使用方法** - -```sql title=Query -SELECT arrayAvg(x, y -> x*y, [2, 3], [2, 3]) AS res; -``` - -```response title=Response -6.5 -``` - - -## arrayCompact - -導入: v20.1 - -配列から連続する重複要素(`null` 値を含む)を削除します。結果の配列における値の順序は、元の配列内の順序によって決まります。 - -**構文** - -```sql -arrayCompact(arr) -``` - -**引数** - -* `arr` — 重複要素を削除する対象の配列。[`Array(T)`](/sql-reference/data-types/array) - -**戻り値** - -重複値を含まない配列を返します。[`Array(T)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT arrayCompact([1, 1, nan, nan, 2, 3, 3, 3]); -``` - -```response title=Response -[1,nan,2,3] -``` - - -## arrayConcat - -導入バージョン: v1.1 - -引数として渡された配列を連結します。 - -**構文** - -```sql -arrayConcat(arr1 [, arr2, ... , arrN]) -``` - -**引数** - -* `arr1 [, arr2, ... , arrN]` — 連結する N 個の配列。[`Array(T)`](/sql-reference/data-types/array) - -**戻り値** - -引数として指定された配列を結合した 1 つの配列を返します。[`Array(T)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT arrayConcat([1, 2], [3, 4], [5, 6]) AS res -``` - -```response title=Response -[1, 2, 3, 4, 5, 6] -``` - - -## arrayCount - -導入バージョン: v1.1 - -`func(arr1[i], ..., arrN[i])` が true を返す要素の数を返します。 -`func` が指定されていない場合は、配列内の非ゼロ要素の数を返します。 - -`arrayCount` は[高階関数](/sql-reference/functions/overview#higher-order-functions)です。 - -**構文** - -```sql -arrayCount([func, ] arr1, ...) -``` - -**引数** - -* `func` — 省略可能。配列の各要素に適用する関数。[`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `arr1, ..., arrN` — N 個の配列。[`Array(T)`](/sql-reference/data-types/array) - -**戻り値** - -`func` が true を返す要素の数を返します。`func` が指定されていない場合は、配列内の非ゼロ要素の数を返します。[`UInt32`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT arrayCount(x -> (x % 2), groupArray(number)) FROM numbers(10) -``` - -```response title=Response -5 -``` - - -## arrayCumSum - -導入バージョン: v1.1 - -元の配列の要素に対する部分和(累積和)からなる配列を返します。ラムダ関数が指定されている場合、各位置の要素にラムダを適用した結果に基づいて和を計算します。 - -**構文** - -```sql -arrayCumSum([func,] arr1[, arr2, ... , arrN]) -``` - -**引数** - -* `func` — 省略可。各位置の配列要素に適用するラムダ関数。[`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `arr1` — 数値を含む元の配列。[`Array(T)`](/sql-reference/data-types/array) -* `[arr2, ..., arrN]` — 省略可。同じサイズの追加の配列。指定されている場合、ラムダ関数への引数として渡されます。[`Array(T)`](/sql-reference/data-types/array) - -**戻り値** - -元の配列の要素について、各位置までの部分和(累積和)の配列を返します。結果の型は入力配列の数値型と一致します。[`Array(T)`](/sql-reference/data-types/array) - -**例** - -**基本的な使い方** - -```sql title=Query -SELECT arrayCumSum([1, 1, 1, 1]) AS res -``` - -```response title=Response -[1, 2, 3, 4] -``` - -**Lambda を使用する場合** - -```sql title=Query -SELECT arrayCumSum(x -> x * 2, [1, 2, 3]) AS res -``` - -```response title=Response -[2, 6, 12] -``` - - -## arrayCumSumNonNegative - -導入バージョン: v18.12 - -元の配列の要素について、部分和(累積和)の配列を返し、負の累積和はゼロに置き換えます。ラムダ関数が指定されている場合は、各位置の配列要素にラムダを適用した結果に対する累積和を計算します。 - -**構文** - -```sql -arrayCumSumNonNegative([func,] arr1[, arr2, ... , arrN]) -``` - -**引数** - -* `func` — 省略可能。各位置の配列要素に適用するラムダ関数。[`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `arr1` — 数値を含む元の配列。[`Array(T)`](/sql-reference/data-types/array) -* `[arr2, ..., arrN]` — 省略可能。同じサイズの追加配列。指定された場合、ラムダ関数への引数として渡されます。[`Array(T)`](/sql-reference/data-types/array) - -**戻り値** - -元の配列内の要素の部分和からなる配列を返しますが、負の累積和はゼロに置き換えられます。結果の型は入力配列の数値型と一致します。[`Array(T)`](/sql-reference/data-types/array) - -**使用例** - -**基本的な使い方** - -```sql title=Query -SELECT arrayCumSumNonNegative([1, 1, -4, 1]) AS res -``` - -```response title=Response -[1, 2, 0, 1] -``` - -**ラムダを使用する場合** - -```sql title=Query -SELECT arrayCumSumNonNegative(x -> x * 2, [1, -2, 3]) AS res -``` - -```response title=Response -[2, 0, 6] -``` - - -## arrayDifference - -導入バージョン: v1.1 - -隣接する配列要素同士の差からなる配列を計算します。 -結果配列の最初の要素は 0 となり、2 番目は `arr[1] - arr[0]`、3 番目は `arr[2] - arr[1]` というように続きます。 -結果配列中の要素の型は、減算における型推論ルールによって決定されます(例: `UInt8` - `UInt8` = `Int16`)。 - -**構文** - -```sql -arrayDifference(arr) -``` - -**引数** - -* `arr` — 隣接する要素間の差分を計算する対象の配列。[`Array(T)`](/sql-reference/data-types/array) - -**戻り値** - -隣接する配列要素間の差分を要素とする配列を返します。[`UInt*`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT arrayDifference([1, 2, 3, 4]); -``` - -```response title=Response -[0,1,1,1] -``` - -**結果型が Int64 の場合のオーバーフロー例** - -```sql title=Query -SELECT arrayDifference([0, 10000000000000000000]); -``` - -```response title=Response -┌─arrayDifference([0, 10000000000000000000])─┐ -│ [0,-8446744073709551616] │ -└────────────────────────────────────────────┘ -``` - - -## arrayDistinct - -導入: v1.1 - -配列から重複を取り除き、一意な要素だけを含む配列を返します。 - -**構文** - -```sql -arrayDistinct(arr) -``` - -**引数** - -* `arr` — 重複のない要素を抽出する対象の配列。[`Array(T)`](/sql-reference/data-types/array) - -**返り値** - -重複のない要素を含む配列を返します。[`Array(T)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT arrayDistinct([1, 2, 2, 3, 1]); -``` - -```response title=Response -[1,2,3] -``` - - -## arrayDotProduct - -v23.5 で導入 - -2 つの配列のドット積を返します。 - -:::note -2 つのベクトルの長さは同じである必要があります。Array および Tuple には、異なる型の要素が混在していてもかまいません。 -::: - -**構文** - -```sql -arrayDotProduct(v1, v2) -``` - -**引数** - -* `v1` — 1番目のベクトル。[`Array((U)Int* | Float* | Decimal)`](/sql-reference/data-types/array) または [`Tuple((U)Int* | Float* | Decimal)`](/sql-reference/data-types/tuple) -* `v2` — 2番目のベクトル。[`Array((U)Int* | Float* | Decimal)`](/sql-reference/data-types/array) または [`Tuple((U)Int* | Float* | Decimal)`](/sql-reference/data-types/tuple) - -**戻り値** - -2つのベクトルのドット積。 - -:::note -戻り値の型は引数の型によって決まります。Array または Tuple に複数の異なる要素型が含まれている場合、結果の型はそれらのスーパータイプになります。 -::: - -[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) - -**例** - -**Array の例** - -```sql title=Query -SELECT arrayDotProduct([1, 2, 3], [4, 5, 6]) AS res, toTypeName(res); -``` - -```response title=Response -32 UInt16 -``` - -**タプルの例** - -```sql title=Query -SELECT dotProduct((1::UInt16, 2::UInt8, 3::Float32),(4::Int16, 5::Float32, 6::UInt8)) AS res, toTypeName(res); -``` - -```response title=Response -32 Float64 -``` - - -## arrayElement - -導入バージョン: v1.1 - -指定された配列の要素をインデックス `n` で取得します。ここで `n` は任意の整数型です。 -インデックスが配列の範囲外の場合、デフォルト値(数値なら 0、文字列なら空文字列など)を返します。 -ただし、引数が非定数配列で、インデックスに定数の 0 を指定した場合は例外で、この場合は `Array indices are 1-based` というエラーになります。 - -:::note -ClickHouse の配列のインデックスは 1 始まりです。 -::: - -負のインデックスもサポートされています。この場合、末尾から数えて番号付けされた対応する要素が選択されます。例えば、`arr[-1]` は配列の最後の要素です。 - -演算子 `[n]` は同じ機能を提供します。 - -**構文** - -```sql -arrayElement(arr, n) -``` - -**引数** - -* `arr` — 検索する配列。[`Array(T)`](/sql-reference/data-types/array)。 - `n` — 取得する要素の位置。[`(U)Int*`](/sql-reference/data-types/int-uint)。 - -**戻り値** - -指定した配列引数を結合した 1 つの配列を返します。[`Array(T)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT arrayElement(arr, 2) FROM (SELECT [1, 2, 3] AS arr) -``` - -```response title=Response -2 -``` - -**負のインデックス指定** - -```sql title=Query -SELECT arrayElement(arr, -1) FROM (SELECT [1, 2, 3] AS arr) -``` - -```response title=Response -3 -``` - -**[n] 表記の使用** - -```sql title=Query -SELECT arr[2] FROM (SELECT [1, 2, 3] AS arr) -``` - -```response title=Response -2 -``` - -**配列範囲外のインデックス** - -```sql title=Query -SELECT arrayElement(arr, 4) FROM (SELECT [1, 2, 3] AS arr) -``` - -```response title=Response -0 -``` - - -## arrayElementOrNull - -導入バージョン: v1.1 - -任意の整数型である `n` をインデックスとして、指定された配列の要素を取得します。 -インデックスが配列の範囲外の場合、デフォルト値ではなく `NULL` が返されます。 - -:::note -ClickHouse の配列はインデックスが 1 から始まります。 -::: - -負のインデックスもサポートされています。この場合、末尾から数えた位置に対応する要素を選択します。たとえば、`arr[-1]` は配列の最後の要素です。 - -**構文** - -```sql -arrayElementOrNull(配列) -``` - -**引数** - -* `arrays` — 任意数の配列引数。[`Array`](/sql-reference/data-types/array) - -**戻り値** - -与えられた配列引数を結合した単一の配列を返します。[`Array(T)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT arrayElementOrNull(arr, 2) FROM (SELECT [1, 2, 3] AS arr) -``` - -```response title=Response -2 -``` - -**負のインデックス** - -```sql title=Query -SELECT arrayElementOrNull(arr, -1) FROM (SELECT [1, 2, 3] AS arr) -``` - -```response title=Response -3 -``` - -**配列の範囲外のインデックス** - -```sql title=Query -SELECT arrayElementOrNull(arr, 4) FROM (SELECT [1, 2, 3] AS arr) -``` - -```response title=Response -NULL -``` - - -## arrayEnumerate - -導入バージョン: v1.1 - -配列 `[1, 2, 3, ..., length (arr)]` を返します。 - -この関数は通常、[`ARRAY JOIN`](/sql-reference/statements/select/array-join) 句と一緒に使用されます。`ARRAY JOIN` を適用した後、各配列ごとに一度だけカウントできるようにします。 -この関数は高階関数内でも使用できます。たとえば、条件に一致する要素の配列インデックスを取得するために使用できます。 - -**構文** - -```sql -arrayEnumerate(arr) -``` - -**引数** - -* `arr` — 列挙対象の配列。[`Array`](/sql-reference/data-types/array) - -**戻り値** - -配列 `[1, 2, 3, ..., length(arr)]` を返します。[`Array(UInt32)`](/sql-reference/data-types/array) - -**例** - -**ARRAY JOIN を使用した基本的な例** - -```sql title=Query -CREATE TABLE test -( - `id` UInt8, - `tag` Array(String), - `version` Array(String) -) -ENGINE = MergeTree -ORDER BY id; - -INSERT INTO test VALUES (1, ['release-stable', 'dev', 'security'], ['2.4.0', '2.6.0-alpha', '2.4.0-sec1']); - -SELECT - id, - tag, - version, - seq -FROM test -ARRAY JOIN - tag, - version, - arrayEnumerate(tag) AS seq -``` - -```response title=Response -┌─id─┬─tag────────────┬─version─────┬─seq─┐ -│ 1 │ release-stable │ 2.4.0 │ 1 │ -│ 1 │ dev │ 2.6.0-alpha │ 2 │ -│ 1 │ security │ 2.4.0-sec1 │ 3 │ -└────┴────────────────┴─────────────┴─────┘ -``` - - -## arrayEnumerateDense - -導入バージョン: v18.12 - -元の配列と同じサイズの配列を返し、各要素が元の配列内で最初に出現するインデックスを示します。 - -**構文** - -```sql -arrayEnumerateDense(arr) -``` - -**引数** - -* `arr` — 列挙する配列。[`Array(T)`](/sql-reference/data-types/array) - -**戻り値** - -`arr` と同じサイズの配列を返します。各要素が元の配列 [`Array(T)`](/sql-reference/data-types/array) 内で最初に出現する位置(インデックス)を示します。 - -**例** - -**使用例** - -```sql title=Query -SELECT arrayEnumerateDense([10, 20, 10, 30]) -``` - -```response title=Response -[1,2,1,3] -``` - - -## arrayEnumerateDenseRanked - -導入バージョン: v20.1 - -元の配列と同じサイズの配列を返し、元の配列内で各要素が最初に出現する位置を示します。多次元配列を列挙する際に、配列のどの深さまで探索するかを指定できます。 - -**構文** - -```sql -arrayEnumerateDenseRanked(clear_depth, arr, max_array_depth) -``` - -**引数** - -* `clear_depth` — 指定した階層レベルの要素を個別に列挙します。`max_arr_depth` 以下である必要があります。[`UInt*`](/sql-reference/data-types/int-uint) -* `arr` — 列挙対象の N 次元配列。[`Array(T)`](/sql-reference/data-types/array) -* `max_array_depth` — 有効な最大深さ。`arr` の深さ以下である必要があります。[`UInt*`](/sql-reference/data-types/int-uint) - -**戻り値** - -各要素が元の配列内で最初に出現した位置を示す配列を返します。[`Array`](/sql-reference/data-types/array) - -**例** - -**基本的な使い方** - -```sql title=Query --- clear_depth=1 かつ max_array_depth=1 の場合、結果は arrayEnumerateDense が返す値と同一です。 - -SELECT arrayEnumerateDenseRanked(1,[10, 20, 10, 30],1); -``` - -```response title=Response -[1,2,1,3] -``` - -**多次元配列での利用方法** - -```sql title=Query --- この例では、arrayEnumerateDenseRankedを使用して、多次元配列の各要素が --- 同じ値を持つ要素の中で何番目に位置するかを示す配列を取得します。 --- 渡された配列の1行目[10, 10, 30, 20]に対して、結果の対応する1行目は[1, 1, 2, 3]となり、 --- これは10が位置1と2で1番目に出現する数値、30が位置3で2番目に出現する数値、 --- 20が位置4で3番目に出現する数値であることを示しています。 --- 2行目[40, 50, 10, 30]に対して、結果の対応する2行目は[4,5,1,2]となり、これは40と50が --- その行の位置1と2で4番目と5番目に出現する数値であり、もう一つの10 --- (1番目に出現する数値)が位置3にあり、30(2番目に出現する数値)が最後の位置にあることを示しています。 - -SELECT arrayEnumerateDenseRanked(1,[[10,10,30,20],[40,50,10,30]],2); -``` - -```response title=Response -[[1,1,2,3],[4,5,1,2]] -``` - -**`clear_depth` を大きく設定した例** - -```sql title=Query --- clear_depth=2 に変更すると、行ごとに列挙が個別に実行されます。 - -SELECT arrayEnumerateDenseRanked(2,[[10,10,30,20],[40,50,10,30]],2); -``` - -```response title=Response -[[1, 1, 2, 3], [1, 2, 3, 4]] -``` - - -## arrayEnumerateUniq - -導入されたバージョン: v1.1 - -元の配列と同じサイズの配列を返し、各要素について、その値が同じである要素の中で何番目の出現であるかを示します。 - -この関数は、`ARRAY JOIN` と配列要素の集約を使用する場合に便利です。 - -この関数は、同じサイズの複数の配列を引数として受け取ることができます。この場合、一意性は、すべての配列において同じ位置にある要素のタプルに基づいて判定されます。 - -**構文** - -```sql -arrayEnumerateUniq(arr1[, arr2, ... , arrN]) -``` - -**引数** - -* `arr1` — 処理対象となる最初の配列。[`Array(T)`](/sql-reference/data-types/array) -* `arr2, ...` — 省略可能。タプルの一意性を判定するための、同じサイズの追加配列。[`Array(UInt32)`](/sql-reference/data-types/array) - -**返される値** - -各要素が、同じ値またはタプルを持つ要素群の中での位置を表す配列を返します。[`Array(T)`](/sql-reference/data-types/array) - -**例** - -**基本的な使い方** - -```sql title=Query -SELECT arrayEnumerateUniq([10, 20, 10, 30]); -``` - -```response title=Response -[1, 1, 2, 1] -``` - -**複数の配列** - -```sql title=Query -SELECT arrayEnumerateUniq([1, 1, 1, 2, 2, 2], [1, 1, 2, 1, 1, 2]); -``` - -```response title=Response -[1,2,1,1,2,1] -``` - -**ARRAY JOIN による集約** - -```sql title=Query --- 各ゴールIDには、コンバージョン数(Goalsネスト構造の各要素は達成されたゴールであり、これをコンバージョンと呼びます) --- およびセッション数の計算が含まれます。ARRAY JOINを使用しない場合、セッション数はsum(Sign)としてカウントされます。しかし、このケースでは、 --- ネストされたGoals構造により行が複製されるため、各セッションを1回だけカウントするために、 --- arrayEnumerateUniq(Goals.ID)関数の値に条件を適用します。 - -SELECT - Goals.ID AS GoalID, - sum(Sign) AS Reaches, - sumIf(Sign, num = 1) AS Visits -FROM test.visits -ARRAY JOIN - Goals, - arrayEnumerateUniq(Goals.ID) AS num -WHERE CounterID = 160656 -GROUP BY GoalID -ORDER BY Reaches DESC -LIMIT 10 -``` - -```response title=Response -┌──GoalID─┬─Reaches─┬─Visits─┐ -│ 53225 │ 3214 │ 1097 │ -│ 2825062 │ 3188 │ 1097 │ -│ 56600 │ 2803 │ 488 │ -│ 1989037 │ 2401 │ 365 │ -│ 2830064 │ 2396 │ 910 │ -│ 1113562 │ 2372 │ 373 │ -│ 3270895 │ 2262 │ 812 │ -│ 1084657 │ 2262 │ 345 │ -│ 56599 │ 2260 │ 799 │ -│ 3271094 │ 2256 │ 812 │ -└─────────┴─────────┴────────┘ -``` - - -## arrayEnumerateUniqRanked - -導入: v20.1 - -元の配列と同じ次元を持つ配列(または多次元配列)を返し、 -各要素について、同じ値を持つ要素の中でその要素が何番目に位置するかを示します。 -多次元配列について、配列のどの深さまでを探索するかを指定して列挙できます。 - -**構文** - -```sql -arrayEnumerateUniqRanked(clear_depth, arr, max_array_depth) -``` - -**引数** - -* `clear_depth` — 指定したレベルの要素をそれぞれ別個に列挙します。`max_arr_depth` 以下の正の整数。[`UInt*`](/sql-reference/data-types/int-uint) -* `arr` — 列挙対象の N 次元配列。[`Array(T)`](/sql-reference/data-types/array) -* `max_array_depth` — 有効な最大の深さ。`arr` の深さ以下の正の整数。[`UInt*`](/sql-reference/data-types/int-uint) - -**戻り値** - -`arr` と同じサイズの N 次元配列を返します。各要素には、同じ値を持つ他の要素の中での位置が示されます。[`Array(T)`](/sql-reference/data-types/array) - -**例** - -**例 1** - -```sql title=Query --- clear_depth=1 かつ max_array_depth=1 の場合、arrayEnumerateUniqRanked の結果は --- 同じ配列に対して arrayEnumerateUniq が返す結果と同一です。 - -SELECT arrayEnumerateUniqRanked(1, [1, 2, 1], 1); -``` - -```response title=Response -[1, 1, 2] -``` - -**例 2** - -```sql title=Query --- clear_depth=1 および max_array_depth=1 の場合、arrayEnumerateUniqRanked の結果は --- 同じ配列に対して arrayEnumerateUniq が返す結果と同一になります。 - -SELECT arrayEnumerateUniqRanked(1, [[1, 2, 3], [2, 2, 1], [3]], 2);", "[[1, 1, 1], [2, 3, 2], [2]] -``` - -```response title=Response -[1, 1, 2] -``` - -**例 3** - -```sql title=Query --- この例では、arrayEnumerateUniqRankedを使用して、多次元配列の各要素が --- 同じ値を持つ要素の中で何番目に出現するかを示す配列を取得します。渡された配列の1行目[1, 2, 3]に対しては、 --- 対応する結果は[1, 1, 1]となり、1、2、3がそれぞれ初めて出現することを示しています。 --- 2行目の配列[2, 2, 1]に対しては、対応する結果は[2, 3, 3]となり、 --- 2が2回目と3回目に出現し、1が2回目に出現することを示しています。同様に、 --- 3行目の配列[3]に対しては、対応する結果は[2]となり、 --- 3が2回目に出現することを示しています。 - -SELECT arrayEnumerateUniqRanked(1, [[1, 2, 3], [2, 2, 1], [3]], 2); -``` - -```response title=Response -[[1, 1, 1], [2, 3, 2], [2]] -``` - -**例4** - -```sql title=Query --- clear_depth=2に変更すると、各行ごとに要素が個別に列挙されます。 -SELECT arrayEnumerateUniqRanked(2,[[1, 2, 3],[2, 2, 1],[3]], 2); -``` - -```response title=Response -[[1, 1, 1], [1, 2, 1], [1]] -``` - - -## arrayExcept - -導入バージョン: v25.9 - -`source` に含まれる要素のうち、`except` には存在しない要素だけを、元の順序を維持したまま返します。 - -この関数は、2 つの配列間で集合の差分操作を行います。`source` の各要素について、厳密な比較により同一の要素が `except` に存在するかを確認します。存在しない場合、その要素は結果に含まれます。 - -この操作には次の特性があります: - -1. `source` の要素の順序は保持される -2. `source` 内の重複要素は、`except` に存在しない限り保持される -3. NULL は独立した値として扱われる - -**構文** - -```sql -arrayExcept(source, except) -``` - -**引数** - -* `source` — フィルタ対象の要素を含む配列。[`Array(T)`](/sql-reference/data-types/array) -* `except` — 結果から除外する要素を含む配列。[`Array(T)`](/sql-reference/data-types/array) - -**戻り値** - -`source` に含まれる要素のうち、`except` に存在しない要素だけを保持した、入力配列と同じ型の配列を返します。[`Array(T)`](/sql-reference/data-types/array) - -**使用例** - -**基本** - -```sql title=Query -SELECT arrayExcept([1, 2, 3, 2, 4], [3, 5]) -``` - -```response title=Response -[1, 2, 2, 4] -``` - -**with_nulls1** - -```sql title=Query -SELECT arrayExcept([1, NULL, 2, NULL], [2]) -``` - -```response title=Response -[1, NULL, NULL] -``` - -**with_nulls2** - -```sql title=Query -SELECT arrayExcept([1, NULL, 2, NULL], [NULL, 2, NULL]) -``` - -```response title=Response -[1] -``` - -**文字列** - -```sql title=Query -SELECT arrayExcept(['apple', 'banana', 'cherry'], ['banana', 'date']) -``` - -```response title=Response -['apple', 'cherry'] -``` - - -## arrayExists - -導入バージョン: v1.1 - -ソース配列内に、`func(x[, y1, y2, ... yN])` が true を返す要素が 1 つ以上存在する場合は `1` を返します。そうでない場合は `0` を返します。 - -**構文** - -```sql -arrayExists(func(x[, y1, ..., yN]), source_arr[, cond1_arr, ... , condN_arr]) -``` - -**引数** - -* `func(x[, y1, ..., yN])` — ソース配列 (`x`) と条件配列 (`y`) の要素に適用されるラムダ関数。[`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `source_arr` — 処理対象のソース配列。[`Array(T)`](/sql-reference/data-types/array) -* `[, cond1_arr, ... , condN_arr]` — 省略可。ラムダ関数に追加の引数を渡すための N 個の条件配列。[`Array(T)`](/sql-reference/data-types/array) - -**戻り値** - -少なくとも 1 つの要素に対してラムダ関数が `true` を返した場合は `1` を、それ以外の場合は `0` を返す。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT arrayExists(x, y -> x=y, [1, 2, 3], [0, 0, 0]) -``` - -```response title=Response -0 -``` - - -## arrayFill - -導入バージョン: v20.1 - -`arrayFill` 関数は、ソース配列を先頭の要素から最後の要素まで順に処理し、 -ソース配列および条件配列の要素を用いて、各位置でラムダ式の条件を評価します。 -位置 i においてラムダ関数の評価結果が false の場合、その要素は、 -配列の現在の状態における位置 i-1 の要素で置き換えられます。 -先頭要素は、どのような条件であっても常に保持されます。 - -**構文** - -```sql -arrayFill(func(x [, y1, ..., yN]), source_arr[, cond1_arr, ... , condN_arr]) -``` - -**引数** - -* `func(x [, y1, ..., yN])` — ソース配列(`x`)および条件配列(`y`)の要素に適用されるラムダ関数 `func(x [, y1, y2, ... yN]) → F(x [, y1, y2, ... yN])`。[`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `source_arr` — 処理対象となるソース配列。[`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `[, cond1_arr, ... , condN_arr]` — 省略可能。ラムダ関数に追加の引数を提供する N 個の条件配列。[`Array(T)`](/sql-reference/data-types/array) - -**戻り値** - -配列 [`Array(T)`](/sql-reference/data-types/array) を返します。 - -**使用例** - -**単一配列の例** - -```sql title=Query -SELECT arrayFill(x -> not isNull(x), [1, null, 2, null]) AS res -``` - -```response title=Response -[1, 1, 2, 2] -``` - -**2 つの配列の例** - -```sql title=Query -SELECT arrayFill(x, y, z -> x > y AND x < z, [5, 3, 6, 2], [4, 7, 1, 3], [10, 2, 8, 5]) AS res -``` - -```response title=Response -[5, 5, 6, 6] -``` - - -## arrayFilter - -導入バージョン: v1.1 - -ソース配列の要素のうち、ラムダ関数を適用した結果が true になるものだけを含む配列を返します。 - -**構文** - -```sql -arrayFilter(func(x[, y1, ..., yN]), source_arr[, cond1_arr, ... , condN_arr])] -``` - -**引数** - -* `func(x[, y1, ..., yN])` — ソース配列 (`x`) および条件配列 (`y`) の要素を処理するラムダ関数。[`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `source_arr` — 処理対象となるソース配列。[`Array(T)`](/sql-reference/data-types/array) -* `[, cond1_arr, ... , condN_arr]` — 省略可。ラムダ関数に追加の引数を提供する N 個の条件配列。[`Array(T)`](/sql-reference/data-types/array) - -**返される値** - -ソース配列の部分集合を返します。[`Array(T)`](/sql-reference/data-types/array) - -**使用例** - -**例 1** - -```sql title=Query -SELECT arrayFilter(x -> x LIKE '%World%', ['Hello', 'abc World']) AS res -``` - -```response title=Response -['abc World'] -``` - -**例 2** - -```sql title=Query -SELECT - arrayFilter( - (i, x) -> x LIKE '%World%', - arrayEnumerate(arr), - ['Hello', 'abc World'] AS arr) - AS res -``` - -```response title=Response -[2] -``` - - -## arrayFirst - -導入: v1.1 - -`func(x[, y1, y2, ... yN])` が true を返す、元の配列内の最初の要素を返します。該当する要素がない場合はデフォルト値を返します。 - -**構文** - -```sql -arrayFirst(func(x[, y1, ..., yN]), source_arr[, cond1_arr, ... , condN_arr]) -``` - -**引数** - -* `func(x[, y1, ..., yN])` — ソース配列 (`x`) および条件配列 (`y`) の要素に適用されるラムダ関数。[Lambda function](/sql-reference/functions/overview#arrow-operator-and-lambda)。- `source_arr` — 処理対象となるソース配列。[`Array(T)`](/sql-reference/data-types/array)。- `[, cond1_arr, ... , condN_arr]` — 省略可能。ラムダ関数に追加の引数を提供する N 個の条件配列。[`Array(T)`](/sql-reference/data-types/array)。 - -**返される値** - -`λ` が true を返す最初のソース配列の要素を返し、それ以外の場合は型 `T` のデフォルト値を返します。 - -**例** - -**使用例** - -```sql title=Query -SELECT arrayFirst(x, y -> x=y, ['a', 'b', 'c'], ['c', 'b', 'a']) -``` - -```response title=Response -b -``` - -**該当なし** - -```sql title=Query -SELECT arrayFirst(x, y -> x=y, [0, 1, 2], [3, 3, 3]) AS res, toTypeName(res) -``` - -```response title=Response -0 UInt8 -``` - - -## arrayFirstIndex - -導入バージョン: v1.1 - -`func(x[, y1, y2, ... yN])` が true を返す最初の要素のインデックスをソース配列から返します。該当する要素がない場合は '0' を返します。 - -**構文** - -```sql -arrayFirstIndex(func(x[, y1, ..., yN]), source_arr[, cond1_arr, ... , condN_arr]) -``` - -**引数** - -* `func(x[, y1, ..., yN])` — ソース配列 (`x`) および条件配列 (`y`) の要素に適用されるラムダ関数。[ラムダ関数](/sql-reference/functions/overview#arrow-operator-and-lambda)。 -* `source_arr` — 処理対象となるソース配列。[`Array(T)`](/sql-reference/data-types/array)。 -* `[, cond1_arr, ... , condN_arr]` — 省略可。ラムダ関数に追加の引数を提供する N 個の条件配列。[`Array(T)`](/sql-reference/data-types/array)。 - -**戻り値** - -`func` が true となるソース配列の最初の要素のインデックスを返し、それ以外の場合は `0` を返します。戻り値の型は [`UInt32`](/sql-reference/data-types/int-uint) です。 - -**例** - -**使用例** - -```sql title=Query -SELECT arrayFirstIndex(x, y -> x=y, ['a', 'b', 'c'], ['c', 'b', 'a']) -``` - -```response title=Response -2 -``` - -**該当なし** - -```sql title=Query -SELECT arrayFirstIndex(x, y -> x=y, ['a', 'b', 'c'], ['d', 'e', 'f']) -``` - -```response title=Response -0 -``` - - -## arrayFirstOrNull - -導入バージョン: v1.1 - -`func(x[, y1, y2, ... yN])` が true を返す最初の要素をソース配列から返します。該当する要素がない場合は `NULL` を返します。 - -**構文** - -```sql -arrayFirstOrNull(func(x[, y1, ..., yN]), source_arr[, cond1_arr, ... , condN_arr]) -``` - -**引数** - -* `func(x[, y1, ..., yN])` — ソース配列(`x`)および条件配列(`y`)の要素を処理するラムダ関数。[`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `source_arr` — 処理対象となるソース配列。[`Array(T)`](/sql-reference/data-types/array) -* `[, cond1_arr, ... , condN_arr]` — 省略可。ラムダ関数に追加の引数を提供する N 個の条件配列。[`Array(T)`](/sql-reference/data-types/array) - -**戻り値** - -`func` が真となるソース配列の最初の要素を返し、それ以外の場合は `NULL` を返します。 - -**例** - -**使用例** - -```sql title=Query -SELECT arrayFirstOrNull(x, y -> x=y, ['a', 'b', 'c'], ['c', 'b', 'a']) -``` - -```response title=Response -b -``` - -**該当なし** - -```sql title=Query -SELECT arrayFirstOrNull(x, y -> x=y, [0, 1, 2], [3, 3, 3]) AS res, toTypeName(res) -``` - -```response title=Response -NULL Nullable(UInt8) -``` - - -## arrayFlatten - -導入バージョン: v20.1 - -配列の配列をフラットな配列に変換します。 - -この関数には次の特徴があります。 - -* 任意の深さにネストされた配列に適用できます。 -* すでにフラットな配列は変更しません。 - -フラット化された配列には、すべての元の配列に含まれる要素が格納されます。 - -**構文** - -```sql -arrayFlatten(arr) -``` - -**別名**: `flatten` - -**引数** - -* `arr` — 多次元配列。型は [`Array(Array(T))`](/sql-reference/data-types/array) - -**返される値** - -多次元配列をフラット化した配列 [`Array(T)`](/sql-reference/data-types/array) を返します。 - -**例** - -**使用例** - -```sql title=Query -SELECT arrayFlatten([[[1]], [[2], [3]]]); -``` - -```response title=Response -[1, 2, 3] -``` - - -## arrayFold - -導入バージョン: v23.10 - -サイズが等しい 1 つ以上の配列に対してラムダ関数を適用し、その結果をアキュムレータに蓄積します。 - -**構文** - -```sql -arrayFold(λ(acc, x1 [, x2, x3, ... xN]), arr1 [, arr2, arr3, ... arrN], acc) -``` - -**引数** - -* `λ(x, x1 [, x2, x3, ... xN])` — ラムダ関数 `λ(acc, x1 [, x2, x3, ... xN]) → F(acc, x1 [, x2, x3, ... xN])`。ここで `F` は `acc` と `x` からの配列値に適用される演算であり、その結果である `acc` が再利用されます。[`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `arr1 [, arr2, arr3, ... arrN]` — 演算を行う N 個の配列。[`Array(T)`](/sql-reference/data-types/array) -* `acc` — ラムダ関数の戻り値と同じ型を持つアキュムレータ(累積)値。 - -**返される値** - -最終的な `acc` の値を返します。 - -**例** - -**使用例** - -```sql title=Query -SELECT arrayFold(acc,x -> acc + x*2, [1, 2, 3, 4], 3::Int64) AS res; -``` - -```response title=Response -23 -``` - -**フィボナッチ数列** - -```sql title=Query -SELECT arrayFold(acc, x -> (acc.2, acc.2 + acc.1),range(number),(1::Int64, 0::Int64)).1 AS fibonacci FROM numbers(1,10); -``` - -```response title=Response -┌─fibonacci─┐ -│ 0 │ -│ 1 │ -│ 1 │ -│ 2 │ -│ 3 │ -│ 5 │ -│ 8 │ -│ 13 │ -│ 21 │ -│ 34 │ -└───────────┘ -``` - -**複数の配列を使う例** - -```sql title=Query -SELECT arrayFold( -(acc, x, y) -> acc + (x * y), -[1, 2, 3, 4], -[10, 20, 30, 40], -0::Int64 -) AS res; -``` - -```response title=Response -300 -``` - - -## arrayIntersect - -導入: v1.1 - -複数の配列を受け取り、すべての入力配列に存在する要素だけを含む配列を返します。結果には一意の値のみが含まれます。 - -**構文** - -```sql -arrayIntersect(arr, arr1, ..., arrN) -``` - -**引数** - -* `arrN` — 新しい配列を作成するための N 個の配列。[`Array(T)`](/sql-reference/data-types/array)。 - -**戻り値** - -すべての N 個の配列に共通して存在する一意な要素のみを含む配列を返します。[`Array(T)`](/sql-reference/data-types/array)。 - -**例** - -**使用例** - -```sql title=Query -SELECT -arrayIntersect([1, 2], [1, 3], [2, 3]) AS empty_intersection, -arrayIntersect([1, 2], [1, 3], [1, 4]) AS non_empty_intersection -``` - -```response title=Response -┌─non_empty_intersection─┬─empty_intersection─┐ -│ [] │ [1] │ -└────────────────────────┴────────────────────┘ -``` - - -## arrayJaccardIndex - -導入バージョン: v23.7 - -2 つの配列の [Jaccard index](https://en.wikipedia.org/wiki/Jaccard_index) を返します。 - -**構文** - -```sql -arrayJaccardIndex(arr_x, arr_y) -``` - -**引数** - -* `arr_x` — 1 つ目の配列。[`Array(T)`](/sql-reference/data-types/array) -* `arr_y` — 2 つ目の配列。[`Array(T)`](/sql-reference/data-types/array) - -**返り値** - -`arr_x` と `arr_y` の Jaccard 指数を返します。[`Float64`](/sql-reference/data-types/float) - -**例** - -**使用例** - -```sql title=Query -SELECT arrayJaccardIndex([1, 2], [2, 3]) AS res -``` - -```response title=Response -0.3333333333333333 -``` - - -## arrayJoin - -導入バージョン: v1.1 - -`arrayJoin` 関数は、配列を含む 1 行を受け取り、それを展開して、配列の各要素ごとに 1 行ずつ複数行を生成します。 -これは、同じ行の中で入力値を出力値に対応づける ClickHouse の通常の関数とは対照的であり、 -また、複数行を受け取ってそれらを 1 つのサマリー行に「圧縮」または「集約」する集約関数とも異なります -(`GROUP BY` と併用する場合は、サマリー行内の 1 つの値になります)。 - -この関数が適用される列を除き、列内のすべての値は単純にコピーされます。 -適用された列の値は、対応する配列要素の値に置き換えられます。 - -**構文** - -```sql -arrayJoin(arr) -``` - -**引数** - -* `arr` — 展開する対象の配列。[`Array(T)`](/sql-reference/data-types/array) - -**戻り値** - -`arr` を展開して得られる行の集合を返します。 - -**例** - -**基本的な使い方** - -```sql title=Query -SELECT arrayJoin([1, 2, 3] AS src) AS dst, 'Hello', src -``` - -```response title=Response -┌─dst─┬─\'Hello\'─┬─src─────┐ -│ 1 │ Hello │ [1,2,3] │ -│ 2 │ Hello │ [1,2,3] │ -│ 3 │ Hello │ [1,2,3] │ -└─────┴───────────┴─────────┘ -``` - -**arrayJoin はクエリのすべての部分に影響します** - -```sql title=Query --- arrayJoin関数は、WHERE句を含むクエリのすべてのセクションに影響を与えます。サブクエリが1行を返しているにもかかわらず、結果が2になることに注意してください。 - -SELECT sum(1) AS impressions -FROM -( - SELECT ['Istanbul', 'Berlin', 'Bobruisk'] AS cities -) -WHERE arrayJoin(cities) IN ['Istanbul', 'Berlin']; -``` - -```response title=Response -┌─impressions─┐ -│ 2 │ -└─────────────┘ -``` - -**複数の arrayJoin 関数を使用する** - -```sql title=Query -- クエリでは複数のarrayJoin関数を使用できます。この場合、変換が複数回実行され、行が増幅されます。 - -SELECT - sum(1) AS impressions, - arrayJoin(cities) AS city, - arrayJoin(browsers) AS browser -FROM -( - SELECT - ['Istanbul', 'Berlin', 'Bobruisk'] AS cities, - ['Firefox', 'Chrome', 'Chrome'] AS browsers -) -GROUP BY - 2, - 3 -``` - -```response title=Response -┌─impressions─┬─city─────┬─browser─┐ -│ 2 │ Istanbul │ Chrome │ -│ 1 │ Istanbul │ Firefox │ -│ 2 │ Berlin │ Chrome │ -│ 1 │ Berlin │ Firefox │ -│ 2 │ Bobruisk │ Chrome │ -│ 1 │ Bobruisk │ Firefox │ -└─────────────┴──────────┴─────────┘ -``` - -**最適化によって生じる予期しない結果** - -```sql title=Query --- 同じ式で複数のarrayJoinを使用すると、最適化により期待した結果が得られない場合があります。 --- このような場合は、結合結果に影響しない追加の操作を加えて、繰り返される配列式を変更することを検討してください。 -- 例: arrayJoin(arraySort(arr)), arrayJoin(arrayConcat(arr, [])) - -SELECT - arrayJoin(dice) as first_throw, - /* arrayJoin(dice) as second_throw */ -- 技術的には正しいが、結果セットが消失します - arrayJoin(arrayConcat(dice, [])) as second_throw -- 再評価を強制するために意図的に式を変更しています -FROM ( - SELECT [1, 2, 3, 4, 5, 6] as dice -); -``` - - -```response title=Response -┌─最初の投げ─┬─2回目の投げ─┐ -│ 1 │ 1 │ -│ 1 │ 2 │ -│ 1 │ 3 │ -│ 1 │ 4 │ -│ 1 │ 5 │ -│ 1 │ 6 │ -│ 2 │ 1 │ -│ 2 │ 2 │ -│ 2 │ 3 │ -│ 2 │ 4 │ -│ 2 │ 5 │ -│ 2 │ 6 │ -│ 3 │ 1 │ -│ 3 │ 2 │ -│ 3 │ 3 │ -│ 3 │ 4 │ -│ 3 │ 5 │ -│ 3 │ 6 │ -│ 4 │ 1 │ -│ 4 │ 2 │ -│ 4 │ 3 │ -│ 4 │ 4 │ -│ 4 │ 5 │ -│ 4 │ 6 │ -│ 5 │ 1 │ -│ 5 │ 2 │ -│ 5 │ 3 │ -│ 5 │ 4 │ -│ 5 │ 5 │ -│ 5 │ 6 │ -│ 6 │ 1 │ -│ 6 │ 2 │ -│ 6 │ 3 │ -│ 6 │ 4 │ -│ 6 │ 5 │ -│ 6 │ 6 │ -└─────────────┴──────────────┘ -``` - -**ARRAY JOIN 構文の使用** - -```sql title=Query --- 以下の`SELECT`クエリにおけるARRAY JOIN構文に注目してください。これにより、より幅広い処理が可能になります。 --- ARRAY JOINを使用すると、同じ要素数を持つ複数の配列を同時に展開できます。 - -SELECT - sum(1) AS impressions, - city, - browser -FROM -( - SELECT - ['Istanbul', 'Berlin', 'Bobruisk'] AS cities, - ['Firefox', 'Chrome', 'Chrome'] AS browsers -) -ARRAY JOIN - cities AS city, - browsers AS browser -GROUP BY - 2, - 3 -``` - -```response title=Response -┌─impressions─┬─city─────┬─browser─┐ -│ 1 │ Istanbul │ Firefox │ -│ 1 │ Berlin │ Chrome │ -│ 1 │ Bobruisk │ Chrome │ -└─────────────┴──────────┴─────────┘ -``` - -**Tuple の使用** - -```sql title=Query --- Tupleを使用することもできます - -SELECT - sum(1) AS impressions, - (arrayJoin(arrayZip(cities, browsers)) AS t).1 AS city, - t.2 AS browser -FROM -( - SELECT - ['Istanbul', 'Berlin', 'Bobruisk'] AS cities, - ['Firefox', 'Chrome', 'Chrome'] AS browsers -) -GROUP BY - 2, - 3 -``` - -```response title=Response -┌─impressions─┬─city─────┬─browser─┐ -│ 1 │ Istanbul │ Firefox │ -│ 1 │ Berlin │ Chrome │ -│ 1 │ Bobruisk │ Chrome │ -└─────────────┴──────────┴─────────┘ -``` - - -## arrayLast - -導入バージョン: v1.1 - -ラムダ `func(x [, y1, y2, ... yN])` が true を返すソース配列内の最後の要素を返します。該当する要素がない場合は、デフォルト値を返します。 - -**構文** - -```sql -arrayLast(func(x[, y1, ..., yN]), source[, cond1, ... , condN_arr]) -``` - -**引数** - -* `func(x[, y1, ..., yN])` — ソース配列 (`x`) および条件配列 (`y`) の要素を処理するラムダ関数。[ラムダ関数](/sql-reference/functions/overview#arrow-operator-and-lambda)。 - `source` — 処理対象のソース配列。[`Array(T)`](/sql-reference/data-types/array)。 - `[, cond1, ... , condN]` — 任意。ラムダ関数への追加引数として渡される N 個の条件配列。[`Array(T)`](/sql-reference/data-types/array)。 - -**戻り値** - -`func` が真となるソース配列の最後の要素を返し、それ以外の場合には `T` のデフォルト値を返します。 - -**例** - -**使用例** - -```sql title=Query -SELECT arrayLast(x, y -> x=y, ['a', 'b', 'c'], ['a', 'b', 'c']) -``` - -```response title=Response -c -``` - -**該当なし** - -```sql title=Query -SELECT arrayFirst(x, y -> x=y, [0, 1, 2], [3, 3, 3]) AS res, toTypeName(res) -``` - -```response title=Response -0 UInt8 -``` - - -## arrayLastIndex - -導入バージョン: v1.1 - -`func(x[, y1, y2, ... yN])` が true を返すソース配列内の最後の要素のインデックスを返します。該当する要素がない場合は '0' を返します。 - -**構文** - -```sql -arrayLastIndex(func(x[, y1, ..., yN]), source_arr[, cond1_arr, ... , condN_arr]) -``` - -**引数** - -* `func(x[, y1, ..., yN])` — ソース配列 (`x`) および条件配列 (`y`) の要素に適用されるラムダ関数。 [`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `source_arr` — 処理対象のソース配列。 [`Array(T)`](/sql-reference/data-types/array) -* `[, cond1_arr, ... , condN_arr]` — 省略可能。ラムダ関数に追加の引数を与える N 個の条件配列。 [`Array(T)`](/sql-reference/data-types/array) - -**返り値** - -`func` が真となるソース配列の最後の要素のインデックスを返し、それ以外の場合は `0` を返す。 [`UInt32`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT arrayLastIndex(x, y -> x=y, ['a', 'b', 'c'], ['a', 'b', 'c']); -``` - -```response title=Response -3 -``` - -**該当なし** - -```sql title=Query -SELECT arrayLastIndex(x, y -> x=y, ['a', 'b', 'c'], ['d', 'e', 'f']); -``` - -```response title=Response -0 -``` - - -## arrayLastOrNull - -導入: v1.1 - -ラムダ式 `func(x [, y1, y2, ... yN])` が true を返す、入力配列内の最後の要素を返します。該当する要素がない場合は `NULL` を返します。 - -**構文** - -```sql -arrayLastOrNull(func(x[, y1, ..., yN]), source_arr[, cond1_arr, ... , condN_arr]) -``` - -**引数** - -* `func(x [, y1, ..., yN])` — ソース配列 (`x`) および条件配列 (`y`) の要素に適用されるラムダ関数。[ラムダ関数](/sql-reference/functions/overview#arrow-operator-and-lambda)。 - `source_arr` — 処理対象となるソース配列。[`Array(T)`](/sql-reference/data-types/array)。 - `[, cond1_arr, ... , condN_arr]` — 任意。ラムダ関数に追加の引数を渡すための N 個の条件配列。[`Array(T)`](/sql-reference/data-types/array)。 - -**戻り値** - -`λ` が true にならないソース配列要素のうち最後のものを返し、それ以外の場合は `NULL` を返します。 - -**例** - -**使用例** - -```sql title=Query -SELECT arrayLastOrNull(x, y -> x=y, ['a', 'b', 'c'], ['a', 'b', 'c']) -``` - -```response title=Response -c -``` - -**該当なし** - -```sql title=Query -SELECT arrayLastOrNull(x, y -> x=y, [0, 1, 2], [3, 3, 3]) AS res, toTypeName(res) -``` - -```response title=Response -NULL Nullable(UInt8) -``` - - -## arrayLevenshteinDistance - -導入バージョン: v25.4 - -2つの配列間の Levenshtein 距離を計算します。 - -**構文** - -```sql -arrayLevenshteinDistance(from, to) -``` - -**引数** - -* `from` — 1番目の配列。[`Array(T)`](/sql-reference/data-types/array)。- `to` — 2番目の配列。[`Array(T)`](/sql-reference/data-types/array)。 - -**戻り値** - -1番目の配列と2番目の配列のレーベンシュタイン距離。[`Float64`](/sql-reference/data-types/float) - -**例** - -**使用例** - -```sql title=Query -SELECT arrayLevenshteinDistance([1, 2, 4], [1, 2, 3]) -``` - -```response title=Response -1 -``` - - -## arrayLevenshteinDistanceWeighted - -導入バージョン: v25.4 - -2 つの配列に対して、各要素に対するカスタム重みを用いてレーベンシュタイン距離を計算します。 -配列とその重みの要素数は一致している必要があります。 - -**構文** - -```sql -arrayLevenshteinDistanceWeighted(from, to, from_weights, to_weights) -``` - -**引数** - -* `from` — 最初の配列。[`Array(T)`](/sql-reference/data-types/array). - `to` — 2 番目の配列。[`Array(T)`](/sql-reference/data-types/array). - `from_weights` — 最初の配列に対する重み。[`Array((U)Int*|Float*)`](/sql-reference/data-types/array) -* `to_weights` — 2 番目の配列に対する重み。[`Array((U)Int*|Float*)`](/sql-reference/data-types/array) - -**戻り値** - -各要素に対してカスタム重みを用いた、最初の配列と 2 番目の配列間の Levenshtein 距離。[`Float64`](/sql-reference/data-types/float) - -**例** - -**使用例** - -```sql title=Query -SELECT arrayLevenshteinDistanceWeighted(['A', 'B', 'C'], ['A', 'K', 'L'], [1.0, 2, 3], [3.0, 4, 5]) -``` - -```response title=Response -14 -``` - - -## arrayMap - -導入バージョン: v1.1 - -各要素にラムダ関数を適用して、元の配列から生成した配列を返します。 - -**構文** - -```sql -arrayMap(func, arr) -``` - -**引数** - -* `func` — ソース配列 (`x`) と条件配列 (`y`) の要素に対して処理を行うラムダ関数。[`ラムダ関数`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `arr` — 処理対象となる N 個の配列。[`Array(T)`](/sql-reference/data-types/array) - -**戻り値** - -ラムダ関数の結果から生成された配列を返します。[`Array(T)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT arrayMap(x -> (x + 2), [1, 2, 3]) as res; -``` - -```response title=Response -[3, 4, 5] -``` - -**異なる配列の要素からタプルを作成する** - -```sql title=Query -SELECT arrayMap((x, y) -> (x, y), [1, 2, 3], [4, 5, 6]) AS res -``` - -```response title=Response -[(1, 4),(2, 5),(3, 6)] -``` - - -## arrayMax - -導入バージョン: v21.1 - -入力配列内の最大要素を返します。 - -ラムダ関数 `func` が指定された場合、ラムダ適用後の結果の最大要素を返します。 - -**構文** - -```sql -arrayMax([func(x[, y1, ..., yN])], source_arr[, cond1_arr, ... , condN_arr]) -``` - -**引数** - -* `func(x[, y1, ..., yN])` — オプション。ソース配列 (`x`) および条件配列 (`y`) の要素を処理するラムダ関数。[`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `source_arr` — 処理対象となるソース配列。[`Array(T)`](/sql-reference/data-types/array) -* `[, cond1_arr, ... , condN_arr]` — オプション。ラムダ関数への追加引数を提供する N 個の条件配列。[`Array(T)`](/sql-reference/data-types/array) - -**戻り値** - -ソース配列内の最大要素を返します。ラムダ関数が指定されている場合は、その結果の最大要素を返します。 - -**例** - -**基本的な例** - -```sql title=Query -SELECT arrayMax([5, 3, 2, 7]); -``` - -```response title=Response -7 -``` - -**Lambda 関数での利用方法** - -```sql title=Query -SELECT arrayMax(x, y -> x/y, [4, 8, 12, 16], [1, 2, 1, 2]); -``` - -```response title=Response -12 -``` - - -## arrayMin - -導入されたバージョン: v21.1 - -ソース配列内の最小要素を返します。 - -ラムダ関数 `func` が指定された場合は、ラムダの評価結果の最小要素を返します。 - -**構文** - -```sql -arrayMin([func(x[, y1, ..., yN])], source_arr[, cond1_arr, ... , condN_arr]) -``` - -**引数** - -* `func(x[, y1, ..., yN])` — 省略可能。ソース配列 (`x`) と条件配列 (`y`) の要素に適用されるラムダ関数。[`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `source_arr` — 処理対象となるソース配列。[`Array(T)`](/sql-reference/data-types/array) -* `cond1_arr, ...` — 省略可能。ラムダ関数に渡される追加の引数を提供する N 個の条件配列。[`Array(T)`](/sql-reference/data-types/array) - -**戻り値** - -ソース配列内の最小要素、またはラムダ関数が指定されている場合は、その結果の最小要素を返します。 - -**例** - -**基本的な例** - -```sql title=Query -SELECT arrayMin([5, 3, 2, 7]); -``` - -```response title=Response -2 -``` - -**Lambda 関数での使用** - -```sql title=Query -SELECT arrayMin(x, y -> x/y, [4, 8, 12, 16], [1, 2, 1, 2]); -``` - -```response title=Response -4 -``` - - -## arrayNormalizedGini - -導入バージョン: v25.1 - -正規化されたジニ係数を計算します。 - -**構文** - -```sql -arrayNormalizedGini(predicted, label) -``` - -**引数** - -* `predicted` — 予測値。[`Array(T)`](/sql-reference/data-types/array) -* `label` — 実際の値。[`Array(T)`](/sql-reference/data-types/array) - -**戻り値** - -予測値の Gini 係数、正規化された値の Gini 係数、および正規化 Gini 係数(= 前者2つの Gini 係数の比)を含むタプル [`Tuple(Float64, Float64, Float64)`](/sql-reference/data-types/tuple) - -**例** - -**使用例** - -```sql title=Query -SELECT arrayNormalizedGini([0.9, 0.3, 0.8, 0.7],[6, 1, 0, 2]); -``` - -```response title=Response -(0.18055555555555558, 0.2638888888888889, 0.6842105263157896) -``` - - -## arrayPartialReverseSort - -導入バージョン: v23.2 - -この関数は `arrayReverseSort` と同じですが、追加の引数 `limit` によって配列の一部のみをソートできます。 - -:::tip -ソートされた要素だけを保持するには `arrayResize` を使用してください。 -::: - -**構文** - -```sql -arrayPartialReverseSort([f,] arr [, arr1, ... ,arrN], limit) -``` - -**引数** - -* `f(arr[, arr1, ... ,arrN])` — 配列 `x` の要素に適用するラムダ関数。[`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `arr` — ソート対象の配列。[`Array(T)`](/sql-reference/data-types/array) -* `arr1, ... ,arrN` — `f` が複数の引数を受け取る場合に指定する、追加の N 個の配列。[`Array(T)`](/sql-reference/data-types/array) -* `limit` — どのインデックスまでソートを行うかを示す上限値。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返される値** - -元の配列と同じサイズの配列を返します。範囲 `[1..limit]` 内の要素は降順にソートされます。 -残りの要素 `(limit..N]` の順序は未定義です。 - -**例** - -**simple_int** - -```sql title=Query -SELECT arrayPartialReverseSort(2, [5, 9, 1, 3]) -``` - -```response title=Response -[9, 5, 1, 3] -``` - -**simple_string** - -```sql title=Query -SELECT arrayPartialReverseSort(2, ['expenses','lasso','embolism','gladly']) -``` - -```response title=Response -['lasso','gladly','expenses','embolism'] -``` - -**retain_sorted** - -```sql title=Query -SELECT arrayResize(arrayPartialReverseSort(2, [5, 9, 1, 3]), 2) -``` - -```response title=Response -[9, 5] -``` - -**lambda_simple** - -```sql title=Query -SELECT arrayPartialReverseSort((x) -> -x, 2, [5, 9, 1, 3]) -``` - -```response title=Response -[1, 3, 5, 9] -``` - -**lambda_complex** - -```sql title=Query -SELECT arrayPartialReverseSort((x, y) -> -y, 1, [0, 1, 2], [1, 2, 3]) as res -``` - -```response title=Response -[0, 1, 2] -``` - - -## arrayPartialShuffle - -導入バージョン: v23.2 - -元の配列と同じ長さの配列を返します。範囲 `[1..limit]` の要素は、元の配列からランダムに選ばれた部分集合となります。残りの範囲 `(limit..n]` には、範囲 `[1..limit]` に含まれない要素が未定義の順序で格納されます。 -`limit` の値は `[1..n]` の範囲でなければなりません。この範囲外の値を指定した場合は、完全な `arrayShuffle` を実行するのと同等の動作になります。 - -:::note -この関数は定数をマテリアライズしません。 - -`limit` の値は `[1..N]` の範囲である必要があります。この範囲外の値を指定した場合は、完全な [`arrayShuffle`](#arrayShuffle) を実行するのと同等の動作になります。 -::: - -**構文** - -```sql -arrayPartialShuffle(arr [, limit[, seed]]) -``` - -**引数** - -* `arr` — シャッフルする配列。[`Array(T)`](/sql-reference/data-types/array) -* `seed` — 任意。乱数生成に使用するシード。指定しない場合はランダムな値が使用されます。[`(U)Int*`](/sql-reference/data-types/int-uint) -* `limit` — 任意。要素の入れ替え回数の上限を `[1..N]` の範囲で指定します。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**戻り値** - -要素が一部シャッフルされた配列。[`Array(T)`](/sql-reference/data-types/array) - -**例** - -**no_limit1** - -```sql title=Query -SELECT arrayPartialShuffle([1, 2, 3, 4], 0) -``` - -```response title=Response -[2, 4, 3, 1] -``` - -**no_limit2** - -```sql title=Query -SELECT arrayPartialShuffle([1, 2, 3, 4]) -``` - -```response title=Response -[4, 1, 3, 2] -``` - -**random_seed** - -```sql title=Query -SELECT arrayPartialShuffle([1, 2, 3, 4], 2) -``` - -```response title=Response -[3, 4, 1, 2] -``` - -**explicit_seed** - -```sql title=Query -SELECT arrayPartialShuffle([1, 2, 3, 4], 2, 41) -``` - -```response title=Response -[3, 2, 1, 4] -``` - -**materialize(マテリアライズ)** - -```sql title=Query -SELECT arrayPartialShuffle(materialize([1, 2, 3, 4]), 2, 42), arrayPartialShuffle([1, 2, 3], 2, 42) FROM numbers(10) -``` - -```response title=Response -┌─arrayPartial⋯4]), 2, 42)─┬─arrayPartial⋯ 3], 2, 42)─┐ -│ [3,2,1,4] │ [3,2,1] │ -│ [3,2,1,4] │ [3,2,1] │ -│ [4,3,2,1] │ [3,2,1] │ -│ [1,4,3,2] │ [3,2,1] │ -│ [3,4,1,2] │ [3,2,1] │ -│ [1,2,3,4] │ [3,2,1] │ -│ [1,4,3,2] │ [3,2,1] │ -│ [1,4,3,2] │ [3,2,1] │ -│ [3,1,2,4] │ [3,2,1] │ -│ [1,3,2,4] │ [3,2,1] │ -└──────────────────────────┴──────────────────────────┘ -``` - - -## arrayPartialSort - -導入バージョン: v23.2 - -この関数は `arraySort` と同じですが、部分的なソートを可能にする追加の引数 `limit` を受け取ります。 - -:::tip -ソートされた要素のみを保持するには `arrayResize` を使用してください。 -::: - -**構文** - -```sql -arrayPartialSort([f,] arr [, arr1, ... ,arrN], limit) -``` - -**引数** - -* `f(arr[, arr1, ... ,arrN])` — 配列 `x` の要素に適用するラムダ関数。[`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `arr` — ソート対象の配列。[`Array(T)`](/sql-reference/data-types/array) -* `arr1, ... ,arrN` — `f` が複数の引数を受け取る場合の追加の N 個の配列。[`Array(T)`](/sql-reference/data-types/array) -* `limit` — ソートを行う上限となるインデックス値。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**戻り値** - -元の配列と同じサイズの配列を返します。範囲 `[1..limit]` 内の要素は昇順にソートされ、残りの要素 `(limit..N]` の順序は未定義です。 - -**使用例** - -**simple_int** - -```sql title=Query -SELECT arrayPartialSort(2, [5, 9, 1, 3]) -``` - -```response title=Response -[1, 3, 5, 9] -``` - -**simple_string** - -```sql title=Query -SELECT arrayPartialSort(2, ['expenses', 'lasso', 'embolism', 'gladly']) -``` - -```response title=Response -['embolism', 'expenses', 'gladly', 'lasso'] -``` - -**retain_sorted** - -```sql title=Query -SELECT arrayResize(arrayPartialSort(2, [5, 9, 1, 3]), 2) -``` - -```response title=Response -[1, 3] -``` - -**lambda_simple** - -```sql title=Query -SELECT arrayPartialSort((x) -> -x, 2, [5, 9, 1, 3]) -``` - -```response title=Response -[9, 5, 1, 3] -``` - -**lambda_complex** - -```sql title=Query -SELECT arrayPartialSort((x, y) -> -y, 1, [0, 1, 2], [1, 2, 3]) as res -``` - -```response title=Response -[2, 1, 0] -``` - - -## arrayPopBack - -導入バージョン: v1.1 - -配列の末尾の要素を削除します。 - -**構文** - -```sql -arrayPopBack(arr) -``` - -**引数** - -* `arr` — 最後の要素を削除する配列。[`Array(T)`](/sql-reference/data-types/array) - -**返り値** - -`arr` と同一だが、`arr` の最後の要素を含まない配列を返します。[`Array(T)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT arrayPopBack([1, 2, 3]) AS res; -``` - -```response title=Response -[1, 2] -``` - - -## arrayPopFront - -導入バージョン: v1.1 - -配列の先頭要素を削除します。 - -**構文** - -```sql -arrayPopFront(arr) -``` - -**引数** - -* `arr` — 先頭要素を削除する対象となる配列。[`Array(T)`](/sql-reference/data-types/array) - -**返される値** - -`arr` と同一だが、`arr` の先頭要素を含まない配列を返します。[`Array(T)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT arrayPopFront([1, 2, 3]) AS res; -``` - -```response title=Response -[2, 3] -``` - - -## arrayProduct - -導入: v21.1 - -入力配列の要素の積を返します。 - -ラムダ関数 `func` が指定されている場合は、そのラムダを適用した結果の要素の積を返します。 - -**構文** - -```sql -arrayProduct([func(x[, y1, ..., yN])], source_arr[, cond1_arr, ... , condN_arr]) -``` - -**引数** - -* `func(x[, y1, ..., yN])` — 省略可能。ソース配列(`x`)および条件配列(`y`)の要素を処理するラムダ関数。[`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `source_arr` — 処理対象となるソース配列。[`Array(T)`](/sql-reference/data-types/array) -* `[, cond1_arr, ... , condN_arr]` — 省略可能。ラムダ関数に追加の引数を渡すための N 個の条件配列。[`Array(T)`](/sql-reference/data-types/array) - -**戻り値** - -ソース配列の要素の積、またはラムダ関数が指定されている場合はその結果要素の積を返します。[`Float64`](/sql-reference/data-types/float) - -**使用例** - -**基本的な例** - -```sql title=Query -SELECT arrayProduct([1, 2, 3, 4]); -``` - -```response title=Response -24 -``` - -**Lambda 関数での利用** - -```sql title=Query -SELECT arrayProduct(x, y -> x+y, [2, 2], [2, 2]) AS res; -``` - -```response title=Response -16 -``` - - -## arrayPushBack - -導入バージョン: v1.1 - -配列の末尾に要素を 1 つ追加します。 - -**構文** - -```sql -arrayPushBack(arr, x) -``` - -**引数** - -* `arr` — 値 `x` を末尾に追加する配列。[`Array(T)`](/sql-reference/data-types/array) -* `x` — -* 配列の末尾に追加する単一の値。[`Array(T)`](/sql-reference/data-types/array)。 - -:::note - -* 数値の配列には数値のみ、文字列の配列には文字列のみを追加できます。 -* 数値を追加する場合、ClickHouse は配列のデータ型に合わせて `x` の型を自動的に設定します。 -* `NULL` を指定できます。この関数は配列に `NULL` 要素を追加し、配列要素の型を `Nullable` に変換します。 - -ClickHouse におけるデータ型の詳細は、[Data types](/sql-reference/data-types) を参照してください。 -::: - -**戻り値** - -`arr` と同一で、配列の末尾に値 `x` が 1 つ追加された配列を返します。[`Array(T)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT arrayPushBack(['a'], 'b') AS res; -``` - -```response title=Response -['a','b'] -``` - - -## arrayPushFront - -導入バージョン: v1.1 - -配列の先頭に要素を1つ追加します。 - -**構文** - -```sql -arrayPushFront(arr, x) -``` - -**引数** - -* `arr` — 値 `x` を末尾に追加する対象の配列。[`Array(T)`](/sql-reference/data-types/array)。 -* `x` — 配列の先頭に追加する単一の値。[`Array(T)`](/sql-reference/data-types/array)。 - -:::note - -* 数値配列には数値のみ、文字列配列には文字列のみ追加できます。 -* 数値を追加する場合、ClickHouse は配列のデータ型に合わせて `x` の型を自動的に設定します。 -* `NULL` を指定できます。この関数は配列に `NULL` 要素を追加し、配列要素の型を `Nullable` に変換します。 - -ClickHouse のデータ型の詳細については、[Data types](/sql-reference/data-types) を参照してください。 -::: - -**戻り値** - -`arr` と同一ですが、配列の先頭に値 `x` が 1 つ追加された配列 [`Array(T)`](/sql-reference/data-types/array) を返します。 - -**例** - -**使用例** - -```sql title=Query -SELECT arrayPushFront(['b'], 'a') AS res; -``` - -```response title=Response -['a','b'] -``` - - -## arrayROCAUC - -導入バージョン: v20.4 - -受信者操作特性(ROC)曲線の下の面積を計算します。 -ROC 曲線は、すべての閾値において真陽性率 (TPR) を y 軸に、偽陽性率 (FPR) を x 軸にプロットすることで作成されます。 -得られる値は 0 から 1 の範囲をとり、値が大きいほどモデルの性能が高いことを示します。 - -ROC AUC(単に AUC とも呼ばれます)は、機械学習における評価指標の一つです。 -詳細は [こちら](https://developers.google.com/machine-learning/glossary#pr-auc-area-under-the-pr-curve)、[こちら](https://developers.google.com/machine-learning/crash-course/classification/roc-and-auc#expandable-1)、および [こちら](https://en.wikipedia.org/wiki/Receiver_operating_characteristic#Area_under_the_curve) を参照してください。 - -**構文** - -```sql -arrayROCAUC(scores, labels[, scale[, partial_offsets]]) -``` - -**別名**: `arrayAUC` - -**引数** - -* `scores` — 予測モデルが出力するスコア。[`Array((U)Int*)`](/sql-reference/data-types/array) または [`Array(Float*)`](/sql-reference/data-types/array) -* `labels` — サンプルのラベル。通常、正例サンプルには 1、負例サンプルには 0 を使用します。[`Array((U)Int*)`](/sql-reference/data-types/array) または [`Enum`](/sql-reference/data-types/enum) -* `scale` — 省略可能。正規化された面積を返すかどうかを決定します。false の場合は、代わりに TP(true positives)× FP(false positives)曲線の下の面積を返します。デフォルト値: true。[`Bool`](/sql-reference/data-types/boolean) -* `partial_offsets` — -* 全体の AUC ではなく、ROC 曲線の一部の面積(ROC 空間における縦方向の帯に相当)を計算するための、4 つの非負整数からなる配列。このオプションは、ROC AUC の分散計算に有用です。配列には次の要素 [`higher_partitions_tp`, `higher_partitions_fp`, `total_positives`, `total_negatives`] を含める必要があります。非負の [整数](../data-types/int-uint.md) の [Array](/sql-reference/data-types/array)。省略可能。 - * `higher_partitions_tp`: より高いスコアのパーティションに含まれる正例ラベルの数。 - * `higher_partitions_fp`: より高いスコアのパーティションに含まれる負例ラベルの数。 - * `total_positives`: データセット全体に含まれる正例サンプルの総数。 - * `total_negatives`: データセット全体に含まれる負例サンプルの総数。 - -:::note -`arr_partial_offsets` が使用される場合、`arr_scores` と `arr_labels` はデータセット全体の一部のみを含み、スコアのある区間に対応している必要があります。 -データセットは連続したパーティションに分割され、それぞれのパーティションはスコアが特定の範囲に入るデータの部分集合を含むようにします。 -例: - -* あるパーティションには [0, 0.5) の範囲のすべてのスコアを含めることができます。 -* 別のパーティションには [0.5, 1.0] の範囲のスコアを含めることができます。 - ::: - -**戻り値** - -受信者動作特性 (ROC) 曲線の下の面積を返します。[`Float64`](/sql-reference/data-types/float) - -**例** - -**使用例** - -```sql title=Query -SELECT arrayROCAUC([0.1, 0.4, 0.35, 0.8], [0, 0, 1, 1]); -``` - -```response title=Response -0.75 -``` - - -## arrayRandomSample - -導入バージョン: v23.10 - -入力配列からランダムに選んだ `samples` 個の要素からなる部分集合を返します。`samples` が入力配列のサイズを超える場合、サンプル数は配列サイズに制限されます。つまり、すべての配列要素が返されますが、その順序は保証されません。この関数はフラットな配列とネストされた配列の両方を処理できます。 - -**構文** - -```sql -arrayRandomSample(arr, samples) -``` - -**引数** - -* `arr` — 要素をサンプリングするための入力配列または多次元配列。[`Array(T)`](/sql-reference/data-types/array) -* `samples` — ランダムサンプルに含める要素数。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**戻り値** - -入力配列からランダムにサンプリングされた要素を含む配列。[`Array(T)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT arrayRandomSample(['apple', 'banana', 'cherry', 'date'], 2) as res; -``` - -```response title=Response -['cherry','apple'] -``` - -**多次元配列の使用** - -```sql title=Query -SELECT arrayRandomSample([[1, 2], [3, 4], [5, 6]], 2) as res; -``` - -```response title=Response -[[3,4],[5,6]] -``` - - -## arrayReduce - -導入バージョン: v1.1 - -配列要素に集約関数を適用し、その結果を返します。 -集約関数の名前は、シングルクォートで囲んだ文字列として渡します(例: `'max'`, `'sum'`)。 -パラメトリックな集約関数を使用する場合は、関数名の後ろに括弧でパラメータを指定します(例: `'uniqUpTo(6)'`)。 - -**構文** - -```sql -arrayReduce(agg_f, arr1 [, arr2, ... , arrN)]) -``` - -**引数** - -* `agg_f` — 定数である必要がある集計関数の名前。[`String`](/sql-reference/data-types/string) -* `arr1 [, arr2, ... , arrN)]` — `agg_f` の引数に対応する N 個の配列。[`Array(T)`](/sql-reference/data-types/array) - -**返り値** - -集計関数の結果を返します。 - -**例** - -**使用例** - -```sql title=Query -SELECT arrayReduce('max', [1, 2, 3]); -``` - -```response title=Response -┌─arrayReduce('max', [1, 2, 3])─┐ -│ 3 │ -└───────────────────────────────┘ -``` - -**複数引数を取る集約関数の例** - -```sql title=Query ---集約関数が複数の引数を取る場合、この関数は同じサイズの複数の配列に適用する必要があります。 - -SELECT arrayReduce('maxIf', [3, 5], [1, 0]); -``` - -```response title=Response -┌─arrayReduce('maxIf', [3, 5], [1, 0])─┐ -│ 3 │ -└──────────────────────────────────────┘ -``` - -**パラメトリック集約関数の例** - -```sql title=Query -SELECT arrayReduce('uniqUpTo(3)', [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -``` - -```response title=Response -┌─arrayReduce('uniqUpTo(3)', [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])─┐ -│ 4 │ -└─────────────────────────────────────────────────────────────┘ -``` - - -## arrayReduceInRanges - -導入バージョン: v20.4 - -指定された各範囲の配列要素に集約関数を適用し、その範囲ごとの結果を要素とする配列を返します。 -この関数は、`arrayReduce(agg_func, arraySlice(arr1, index, length), ...)` を複数回個別に実行した場合と同じ結果を返します。 - -**構文** - -```sql -arrayReduceInRanges(agg_f, ranges, arr1 [, arr2, ... ,arrN)]) -``` - -**引数** - -* `agg_f` — 使用する集約関数の名前。[`String`](/sql-reference/data-types/string) -* `ranges` — 集約を行う範囲。`(i, r)` 形式のタプルからなる配列で、`i` は集約を開始するインデックス、`r` は集約を行う範囲を表す。[`Array(T)`](/sql-reference/data-types/array) または [`Tuple(T)`](/sql-reference/data-types/tuple) -* `arr1 [, arr2, ... ,arrN)]` — 集約関数の引数として渡す N 個の配列。[`Array(T)`](/sql-reference/data-types/array) - -**戻り値** - -指定された各範囲に対して集約関数を適用した結果を含む配列を返す。[`Array(T)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT arrayReduceInRanges( - 'sum', - [(1, 5), (2, 3), (3, 4), (4, 4)], - [1000000, 200000, 30000, 4000, 500, 60, 7] -) AS res -``` - -```response title=Response -┌─res─────────────────────────┐ -│ [1234500,234000,34560,4567] │ -└─────────────────────────────┘ -``` - - -## arrayRemove - -導入バージョン: v25.11 - -配列から、指定した値と等しいすべての要素を削除します。 -NULL 同士は等しいものとして扱われます。 - -**構文** - -```sql -arrayRemove(arr, elem) -``` - -**別名**: `array_remove` - -**引数** - -* `arr` — Array(T) - `elem` — T - -**戻り値** - -元の配列 [`Array(T)`](/sql-reference/data-types/array) の部分集合を返します。 - -**例** - -**例 1** - -```sql title=Query -SELECT arrayRemove([1, 2, 2, 3], 2) -``` - -```response title=Response -[1, 3] -``` - -**例 2** - -```sql title=Query -SELECT arrayRemove(['a', NULL, 'b', NULL], NULL) -``` - -```response title=Response -['a', 'b'] -``` - - -## arrayResize - -導入バージョン: v1.1 - -配列の長さを変更します。 - -**構文** - -```sql -arrayResize(arr, size[, extender]) -``` - -**引数** - -* `arr` — サイズ変更する配列。[`Array(T)`](/sql-reference/data-types/array) -* `size` — - * 配列の新しい長さ。 - `size` が元の配列の長さより小さい場合、配列は末尾から切り詰められます。 - `size` が元の配列の長さより大きい場合、配列は末尾に `extender` の値、または配列要素のデータ型のデフォルト値を追加して拡張されます。 -* `extender` — 配列を拡張する際に使用する値。`NULL` を指定できます。 - -**返される値** - -長さが `size` の配列。[`Array(T)`](/sql-reference/data-types/array) - -**例** - -**例 1** - -```sql title=Query -SELECT arrayResize([1], 3); -``` - -```response title=Response -[1,0,0] -``` - -**例 2** - -```sql title=Query -SELECT arrayResize([1], 3, NULL); -``` - -```response title=Response -[1,NULL,NULL] -``` - - -## arrayReverse - -導入: v1.1 - -指定された配列の要素の順序を反転します。 - -:::note -関数 `reverse(arr)` も同じ機能を持ちますが、配列だけでなく他のデータ型にも利用できます。 -::: - -**構文** - -```sql -arrayReverse(arr) -``` - -**引数** - -* `arr` — 逆順に並べ替える配列。[`Array(T)`](/sql-reference/data-types/array) - -**戻り値** - -元の配列と同じサイズで、要素を逆順に並べた配列を返します。[`Array(T)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT arrayReverse([1, 2, 3]) -``` - -```response title=Response -[3,2,1] -``` - - -## arrayReverseFill - -導入バージョン: v20.1 - -`arrayReverseFill` 関数は、ソース配列を最後の要素から最初の要素に向かって順に処理し、ソース配列と条件配列の要素を用いて各位置でラムダ式による条件を評価します。位置 i において条件が false と評価された場合、その要素は、配列の現在の状態における位置 i+1 の要素で置き換えられます。最後の要素は、どのような条件であっても常に保持されます。 - -**構文** - -```sql -arrayReverseFill(func(x[, y1, ..., yN]), source_arr[, cond1_arr, ... , condN_arr]) -``` - -**引数** - -* `func(x[, y1, ..., yN])` — ソース配列 (`x`) および条件配列 (`y`) の要素に対して処理を行うラムダ関数。[`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `source_arr` — 処理対象となるソース配列。[`Array(T)`](/sql-reference/data-types/array) -* `[, cond1_arr, ... , condN_arr]` — 省略可。ラムダ関数に追加の引数を提供する N 個の条件配列。[`Array(T)`](/sql-reference/data-types/array) - -**戻り値** - -ラムダ関数の結果でソース配列の要素を置き換えた配列を返します。[`Array(T)`](/sql-reference/data-types/array) - -**使用例** - -**単一配列の例** - -```sql title=Query -SELECT arrayReverseFill(x -> not isNull(x), [1, null, 2, null]) AS res -``` - -```response title=Response -[1, 2, 2, NULL] -``` - -**2つの配列の例** - -```sql title=Query -SELECT arrayReverseFill(x, y, z -> x > y AND x < z, [5, 3, 6, 2], [4, 7, 1, 3], [10, 2, 8, 5]) AS res; -``` - -```response title=Response -[5, 6, 6, 2] -``` - - -## arrayReverseSort - -導入バージョン: v1.1 - -配列の要素を降順にソートします。 -関数 `f` が指定された場合、指定された配列は、その要素に関数を適用した結果に従ってソートされ、その後、ソート済み配列が反転されます。 -`f` が複数の引数を受け取る場合、`arrayReverseSort` 関数には複数の配列が渡され、`f` の各引数がそれぞれの配列に対応します。 - -ソート対象の配列に `-Inf`、`NULL`、`NaN`、`Inf` が含まれている場合、次の順序でソートされます。 - -1. `-Inf` -2. `Inf` -3. `NaN` -4. `NULL` - -`arrayReverseSort` は[高階関数](/sql-reference/functions/overview#higher-order-functions)です。 - -**構文** - -```sql -arrayReverseSort([f,] arr [, arr1, ... ,arrN) -``` - -**引数** - -* `f(y1[, y2 ... yN])` — 配列 `x` の要素に適用するラムダ関数。 -* `arr` — ソート対象の配列。[`Array(T)`](/sql-reference/data-types/array) -* `arr1, ..., yN` — 任意。`f` が複数の引数を受け取る場合に指定する、追加の N 個の配列。 - -**返される値** - -ラムダ関数が指定されていない場合は、配列 `x` を降順にソートしたものを返します。ラムダ関数が指定されている場合は、そのラムダ関数のロジックに従って配列をソートし、その結果を反転した配列を返します。[`Array(T)`](/sql-reference/data-types/array)。 - -**例** - -**例 1** - -```sql title=Query -SELECT arrayReverseSort((x, y) -> y, [4, 3, 5], ['a', 'b', 'c']) AS res; -``` - -```response title=Response -[5,3,4] -``` - -**例 2** - -```sql title=Query -SELECT arrayReverseSort((x, y) -> -y, [4, 3, 5], [1, 2, 3]) AS res; -``` - -```response title=Response -[4,3,5] -``` - - -## arrayReverseSplit - -導入バージョン: v20.1 - -元の配列を複数の配列に分割します。`func(x[, y1, ..., yN])` が 0 以外の値を返したとき、その要素の右側で配列を分割します。最後の要素の後では配列は分割されません。 - -**構文** - -```sql -arrayReverseSplit(func(x[, y1, ..., yN]), source_arr[, cond1_arr, ... , condN_arr]) -``` - -**引数** - -* `func(x[, y1, ..., yN])` — 入力配列 (`x`) および条件配列 (`y`) の要素に適用されるラムダ関数。[`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `source_arr` — 処理対象となる入力配列。[`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `[, cond1_arr, ... , condN_arr]` — 省略可。ラムダ関数に追加の引数を提供する N 個の条件配列。[`Array(T)`](/sql-reference/data-types/array) - -**返り値** - -配列の配列を返します。[`Array(Array(T))`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT arrayReverseSplit((x, y) -> y, [1, 2, 3, 4, 5], [1, 0, 0, 1, 0]) AS res -``` - -```response title=Response -[[1], [2, 3, 4], [5]] -``` - - -## arrayRotateLeft - -導入バージョン: v23.8 - -指定された要素数だけ配列を左方向に回転させます。`n` が負の値の場合は、その絶対値だけ右方向に回転させるものとして解釈されます。 - -**構文** - -```sql -arrayRotateLeft(arr, n) -``` - -**引数** - -* `arr` — 要素を回転させる配列。[`Array(T)`](/sql-reference/data-types/array)。 - `n` — 回転させる要素数。[`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint)。 - -**戻り値** - -指定された要素数だけ左に回転した配列。[`Array(T)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT arrayRotateLeft([1,2,3,4,5,6], 2) as res; -``` - -```response title=Response -[3,4,5,6,1,2] -``` - -**n が負の値** - -```sql title=Query -SELECT arrayRotateLeft([1,2,3,4,5,6], -2) as res; -``` - -```response title=Response -[5,6,1,2,3,4] -``` - - -## arrayRotateRight - -導入バージョン: v23.8 - -指定された要素数だけ配列を右方向に回転します。`n` が負の値の場合は、その絶対値だけ左方向に回転したものとして扱われます。 - -**構文** - -```sql -arrayRotateRight(arr, n) -``` - -**引数** - -* `arr` — 要素を回転させる対象となる配列。[`Array(T)`](/sql-reference/data-types/array)。 - `n` — 回転させる要素数。[`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint)。 - -**戻り値** - -指定された要素数だけ右に回転した配列。[`Array(T)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT arrayRotateRight([1,2,3,4,5,6], 2) as res; -``` - -```response title=Response -[5,6,1,2,3,4] -``` - -**n が負の場合** - -```sql title=Query -SELECT arrayRotateRight([1,2,3,4,5,6], -2) as res; -``` - -```response title=Response -[3,4,5,6,1,2] -``` - - -## arrayShiftLeft - -導入バージョン: v23.8 - -配列を、指定した要素数だけ左方向にシフトします。 -新しい要素には、指定された引数、または配列要素型のデフォルト値が設定されます。 -要素数が負の値の場合は、配列は右方向にシフトされます。 - -**構文** - -```sql -arrayShiftLeft(arr, n[, default]) -``` - -**引数** - -* `arr` — 要素をシフトする対象の配列。[`Array(T)`](/sql-reference/data-types/array) - -- `n` — シフトする要素数。[`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) -- `default` — 省略可能。新しい要素に使用するデフォルト値。 - -**戻り値** - -指定された要素数だけ左方向にシフトされた配列 [`Array(T)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT arrayShiftLeft([1,2,3,4,5,6], 2) as res; -``` - -```response title=Response -[3,4,5,6,0,0] -``` - -**n が負の値の場合** - -```sql title=Query -SELECT arrayShiftLeft([1,2,3,4,5,6], -2) as res; -``` - -```response title=Response -[0,0,1,2,3,4] -``` - -**デフォルト値を使用する** - -```sql title=Query -SELECT arrayShiftLeft([1,2,3,4,5,6], 2, 42) as res; -``` - -```response title=Response -[3,4,5,6,42,42] -``` - - -## arrayShiftRight - -導入バージョン: v23.8 - -配列を、指定した要素数だけ右にシフトします。 -新しい要素は、指定した引数または配列要素型のデフォルト値で埋められます。 -要素数が負の値の場合、配列は左にシフトされます。 - -**構文** - -```sql -arrayShiftRight(arr, n[, default]) -``` - -**引数** - -* `arr` — 要素をシフトする配列。[`Array(T)`](/sql-reference/data-types/array) -* `n` — シフトする要素数。[`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) -* `default` — 任意。新しく追加される要素のデフォルト値。 - -**戻り値** - -指定した要素数だけ右にシフトされた配列。[`Array(T)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT arrayShiftRight([1, 2, 3, 4, 5, 6], 2) as res; -``` - -```response title=Response -[0, 0, 1, 2, 3, 4] -``` - -**n の負の値** - -```sql title=Query -SELECT arrayShiftRight([1, 2, 3, 4, 5, 6], -2) as res; -``` - -```response title=Response -[3, 4, 5, 6, 0, 0] -``` - -**デフォルト値を使用する** - -```sql title=Query -SELECT arrayShiftRight([1, 2, 3, 4, 5, 6], 2, 42) as res; -``` - -```response title=Response -[42, 42, 1, 2, 3, 4] -``` - - -## arrayShingles - -導入バージョン: v24.1 - -入力配列から、指定された長さの連続した部分配列(文字列に対する n-gram に相当)である shingle の配列を生成します。 - -**構文** - -```sql -arrayShingles(arr, l) -``` - -**引数** - -* `arr` — シングル (shingle) 配列を生成する対象の配列。[`Array(T)`](/sql-reference/data-types/array) -* `l` — 各シングルの長さ。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返り値** - -生成されたシングル (shingle) の配列。[`Array(T)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT arrayShingles([1, 2, 3, 4], 3) as res; -``` - -```response title=Response -[[1, 2, 3], [2, 3, 4]] -``` - - -## arrayShuffle - -導入バージョン: v23.2 - -元の配列と同じサイズで、要素をシャッフルした順序で含む配列を返します。 -要素は、その要素のあらゆる順列が等しい確率で現れるように並べ替えられます。 - -:::note -この関数は定数をマテリアライズしません。 -::: - -**構文** - -```sql -arrayShuffle(arr [, seed]) -``` - -**引数** - -* `arr` — シャッフルする配列。[`Array(T)`](/sql-reference/data-types/array) -* `seed (optional)` — 省略可。乱数生成に使用するシード値。指定しない場合はランダムなシード値が使用されます。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**戻り値** - -要素がシャッフルされた配列 [`Array(T)`](/sql-reference/data-types/array) - -**例** - -**シードなしの例(結果は非決定的)** - -```sql title=Query -SELECT arrayShuffle([1, 2, 3, 4]); -``` - -```response title=Response -[1,4,2,3] -``` - -**シード未指定時の例(安定した結果)** - -```sql title=Query -SELECT arrayShuffle([1, 2, 3, 4], 41); -``` - -```response title=Response -[3,2,1,4] -``` - - -## arraySimilarity - -導入バージョン: v25.4 - -重み付きレーベンシュタイン距離に基づいて、2つの配列の類似度を `0` から `1` の範囲で計算します。 - -**構文** - -```sql -arraySimilarity(from, to, from_weights, to_weights) -``` - -**引数** - -* `from` — 1 つ目の配列 [`Array(T)`](/sql-reference/data-types/array) -* `to` — 2 つ目の配列 [`Array(T)`](/sql-reference/data-types/array) -* `from_weights` — 1 つ目の配列に対する重み [`Array((U)Int*|Float*)`](/sql-reference/data-types/array) -* `to_weights` — 2 つ目の配列に対する重み [`Array((U)Int*|Float*)`](/sql-reference/data-types/array) - -**戻り値** - -加重レーベンシュタイン距離に基づいて、2 つの配列間の類似度(`0` から `1` の範囲)を返します。[`Float64`](/sql-reference/data-types/float) - -**例** - -**使用例** - -```sql title=Query -SELECT arraySimilarity(['A', 'B', 'C'], ['A', 'K', 'L'], [1.0, 2, 3], [3.0, 4, 5]); -``` - -```response title=Response -0.2222222222222222 -``` - - -## arraySlice - -導入バージョン: v1.1 - -`NULL` 要素を含む配列のスライスを返します。 - -**構文** - -```sql -arraySlice(arr, offset [, length]) -``` - -**引数** - -* `arr` — スライス対象の配列。[`Array(T)`](/sql-reference/data-types/array) -* `offset` — 配列の端からのオフセット。正の値は左側からのオフセット、負の値は右側からのオフセットを表します。配列要素の番号付けは `1` から始まります。[`(U)Int*`](/sql-reference/data-types/int-uint) -* `length` — 取得するスライスの長さ。負の値を指定した場合、関数は `[offset, array_length - length]` の範囲のスライス(末尾側を `length` 分だけ除いたスライス)を返します。値を省略した場合、関数は `[offset, 配列の終端]` のスライスを返します。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返り値** - -指定された `offset` から `length` 要素分の配列スライスを返します。[`Array(T)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT arraySlice([1, 2, NULL, 4, 5], 2, 3) AS res; -``` - -```response title=Response -[2, NULL, 4] -``` - - -## arraySort - -導入バージョン: v1.1 - -指定された配列の要素を昇順でソートします。 -ラムダ関数 `f` が指定されている場合、ソート順は配列の各要素にラムダを適用した結果によって決定されます。 -ラムダが複数の引数を受け取る場合、`arraySort` 関数には複数の配列が渡され、`f` の各引数はそれぞれの配列に対応します。 - -ソート対象の配列に `-Inf`、`NULL`、`NaN`、`Inf` が含まれる場合、それらは次の順序でソートされます: - -1. `-Inf` -2. `Inf` -3. `NaN` -4. `NULL` - -`arraySort` は[高階関数](/sql-reference/functions/overview#higher-order-functions)です。 - -**構文** - -```sql -arraySort([f,] arr [, arr1, ... ,arrN]) -``` - -**引数** - -* `f(y1[, y2 ... yN])` — 配列 `x` の要素に適用するラムダ関数。 - `arr` — ソート対象の配列。[`Array(T)`](/sql-reference/data-types/array) - `arr1, ..., yN` — 省略可能。`f` が複数の引数を受け取る場合に指定する、追加の N 個の配列。 - -**返り値** - -ラムダ関数が指定されていない場合は、配列 `arr` を昇順にソートして返します。指定されている場合は、そのラムダ関数のロジックに従ってソートされた配列を返します。[`Array(T)`](/sql-reference/data-types/array)。 - -**例** - -**例 1** - -```sql title=Query -SELECT arraySort([1, 3, 3, 0]); -``` - -```response title=Response -[0,1,3,3] -``` - -**例 2** - -```sql title=Query -SELECT arraySort(['hello', 'world', '!']); -``` - -```response title=Response -['!','hello','world'] -``` - -**例 3** - -```sql title=Query -SELECT arraySort([1, nan, 2, NULL, 3, nan, -4, NULL, inf, -inf]); -``` - -```response title=Response -[-inf,-4,1,2,3,inf,nan,nan,NULL,NULL] -``` - - -## arraySplit - -導入バージョン: v20.1 - -入力配列を複数の配列に分割します。`func(x [, y1, ..., yN])` がゼロ以外を返した場合、その要素の左側で配列が分割されます。最初の要素の前では配列は分割されません。 - -**構文** - -```sql -arraySplit(func(x[, y1, ..., yN]), source_arr[, cond1_arr, ... , condN_arr]) -``` - -**引数** - -* `func(x[, y1, ..., yN])` — ソース配列 (`x`) および条件配列 (`y`) の要素を処理するラムダ関数。[Lambda function](/sql-reference/functions/overview#arrow-operator-and-lambda)。- `source_arr` — 分割対象のソース配列。[`Array(T)`](/sql-reference/data-types/array)。- `[, cond1_arr, ... , condN_arr]` — 省略可。ラムダ関数に追加の引数を渡すための N 個の条件配列。[`Array(T)`](/sql-reference/data-types/array)。 - -**返される値** - -配列の配列を返します。[`Array(Array(T))`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT arraySplit((x, y) -> y, [1, 2, 3, 4, 5], [1, 0, 0, 1, 0]) AS res -``` - -```response title=Response -[[1, 2, 3], [4, 5]] -``` - - -## arraySum - -導入バージョン: v21.1 - -入力配列内の要素の合計を返します。 - -ラムダ関数 `func` が指定された場合は、そのラムダを各要素に適用した結果の合計を返します。 - -**構文** - -```sql -arrayMax([func(x[, y1, ..., yN])], source_arr[, cond1_arr, ... , condN_arr]) -``` - -**引数** - -* `func(x[, y1, ..., yN])` — 省略可。ソース配列 (`x`) および条件配列 (`y`) の要素に適用されるラムダ関数。[`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `source_arr` — 処理対象のソース配列。[`Array(T)`](/sql-reference/data-types/array) -* `, cond1_arr, ... , condN_arr]` — 省略可。ラムダ関数に追加の引数を渡すための N 個の条件配列。[`Array(T)`](/sql-reference/data-types/array) - -**戻り値** - -ソース配列内の要素の合計、またはラムダ関数が指定されている場合は、その結果要素の合計値を返します。 - -**使用例** - -**基本的な例** - -```sql title=Query -SELECT arraySum([1, 2, 3, 4]); -``` - -```response title=Response -10 -``` - -**Lambda 関数での使用方法** - -```sql title=Query -SELECT arraySum(x, y -> x+y, [1, 1, 1, 1], [1, 1, 1, 1]); -``` - -```response title=Response -8 -``` - - -## arraySymmetricDifference - -導入バージョン: v25.4 - -複数の配列を受け取り、すべての入力配列に共通して存在しない要素からなる配列を返します。結果には一意な値のみが含まれます。 - -:::note -*2つを超える集合*の対称差は、入力集合のうち奇数個の集合に含まれるすべての入力要素の集合として[数学的に定義されています](https://en.wikipedia.org/wiki/Symmetric_difference#n-ary_symmetric_difference)。 -これに対して、関数 `arraySymmetricDifference` は、すべての入力集合に含まれない入力要素の集合のみを返します。 -::: - -**構文** - -```sql -arraySymmetricDifference(arr1, arr2, ... , arrN) -``` - -**引数** - -* `arrN` — 新しい配列を作成するための N 個の配列。[`Array(T)`](/sql-reference/data-types/array)。 - -**返される値** - -すべての元の配列に共通して存在しない要素のみから成る、重複のない配列を返します。[`Array(T)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT -arraySymmetricDifference([1, 2], [1, 2], [1, 2]) AS empty_symmetric_difference, -arraySymmetricDifference([1, 2], [1, 2], [1, 3]) AS non_empty_symmetric_difference; -``` - -```response title=Response -┌─empty_symmetric_difference─┬─non_empty_symmetric_difference─┐ -│ [] │ [3] │ -└────────────────────────────┴────────────────────────────────┘ -``` - - -## arrayUnion - -導入バージョン: v24.10 - -複数の配列を受け取り、入力配列のいずれかに存在するすべての要素を含む配列を返します。結果には一意の値のみが含まれます。 - -**構文** - -```sql -arrayUnion(arr1, arr2, ..., arrN) -``` - -**引数** - -* `arrN` — 新しい配列を作成するための N 個の配列。[`Array(T)`](/sql-reference/data-types/array) - -**戻り値** - -元の配列群に含まれる要素のうち重複を取り除いた配列を返します。[`Array(T)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT -arrayUnion([-2, 1], [10, 1], [-2], []) as num_example, -arrayUnion(['hi'], [], ['hello', 'hi']) as str_example, -arrayUnion([1, 3, NULL], [2, 3, NULL]) as null_example -``` - -```response title=Response -┌─num_example─┬─str_example────┬─null_example─┐ -│ [10,-2,1] │ ['hello','hi'] │ [3,2,1,NULL] │ -└─────────────┴────────────────┴──────────────┘ -``` - - -## arrayUniq - -導入バージョン: v1.1 - -引数が 1 つだけ渡された場合、配列内の異なる要素の個数を数えます。 -複数の引数が渡された場合、複数の配列において同じ位置にある要素からなる **タプル** を構成し、そのタプルのうち異なるものの個数を数えます。 - -たとえば `SELECT arrayUniq([1,2], [3,4], [5,6])` は次のタプルを生成します。 - -* 位置 1: (1,3,5) -* 位置 2: (2,4,6) - -その後、一意なタプルの個数を数えます。この場合は `2` になります。 - -渡されるすべての配列は同じ長さである必要があります。 - -:::tip -配列内の一意な要素のリストを取得したい場合は、`arrayReduce('groupUniqArray', arr)` を使用できます。 -::: - -**構文** - -```sql -arrayUniq(arr1[, arr2, ..., arrN]) -``` - -**引数** - -* `arr1` — 一意な要素の数をカウントする対象の配列。[`Array(T)`](/sql-reference/data-types/array) -* `[, arr2, ..., arrN]` — 省略可。複数の配列において同じ位置にある要素から成る一意なタプルの数をカウントするために使用される追加の配列。[`Array(T)`](/sql-reference/data-types/array) - -**返される値** - -単一引数の場合は、一意な要素の数を返します。複数引数の場合は、 -配列間で同じ位置にある要素から構成される一意なタプルの数を返します。 -[`UInt32`](/sql-reference/data-types/int-uint) - -**例** - -**単一引数** - -```sql title=Query -SELECT arrayUniq([1, 1, 2, 2]) -``` - -```response title=Response -2 -``` - -**複数の引数** - -```sql title=Query -SELECT arrayUniq([1, 2, 3, 1], [4, 5, 6, 4]) -``` - -```response title=Response -3 -``` - - -## arrayWithConstant - -導入バージョン: v20.1 - -長さ `length` の配列を作成し、そのすべての要素を定数 `x` で埋めます。 - -**構文** - -```sql -arrayWithConstant(N, x) -``` - -**引数** - -* `length` — 配列内の要素数。[`(U)Int*`](/sql-reference/data-types/int-uint) -* `x` — 配列内の `N` 個の要素の値。任意の型の値を取ることができます。 - -**戻り値** - -値が `x` の `N` 個の要素を持つ Array を返します。[`Array(T)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT arrayWithConstant(3, 1) -``` - -```response title=Response -[1, 1, 1] -``` - - -## arrayZip - -導入バージョン: v20.1 - -複数の配列を1つの配列に結合します。結果の配列には、引数で指定された順序で、元の配列の対応する要素がタプルにまとめられて含まれます。 - -**構文** - -```sql -arrayZip(arr1, arr2, ... , arrN) -``` - -**引数** - -* `arr1, arr2, ... , arrN` — 結合して 1 つの配列にする N 個の配列。[`Array(T)`](/sql-reference/data-types/array) - -**戻り値** - -元の配列の要素をタプルごとにまとめた配列を返します。タプル内のデータ型は入力配列の型と同一であり、配列が渡された順序と同じ順序になります。[`Array(T)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT arrayZip(['a', 'b', 'c'], [5, 2, 1]); -``` - -```response title=Response -[('a', 5), ('b', 2), ('c', 1)] -``` - - -## arrayZipUnaligned - -導入バージョン: v20.1 - -複数の配列を 1 つの配列に結合し、長さが揃っていない配列(長さの異なる配列)も扱います。結果の配列には、引数で指定した順序に従い、元の各配列の対応する要素をまとめたタプルが含まれます。 - -**構文** - -```sql -arrayZipUnaligned(arr1, arr2, ..., arrN) -``` - -**引数** - -* `arr1, arr2, ..., arrN` — 1 つの配列に結合する N 個の配列。[`Array(T)`](/sql-reference/data-types/array) - -**返される値** - -ソース配列の要素をタプルごとにまとめた配列を返します。タプル内のデータ型は入力配列の型と同一であり、配列が渡された順序どおりに並びます。[`Array(T)`](/sql-reference/data-types/array) または [`Tuple(T1, T2, ...)`](/sql-reference/data-types/tuple) - -**例** - -**使用例** - -```sql title=Query -SELECT arrayZipUnaligned(['a'], [1, 2, 3]); -``` - -```response title=Response -[('a', 1),(NULL, 2),(NULL, 3)] -``` - - -## countEqual - -導入: v1.1 - -配列内で `x` に等しい要素の個数を返します。`arrayCount(elem -> elem = x, arr)` と同等です。 - -`NULL` 要素は個別の値として扱われます。 - -**構文** - -```sql -countEqual(arr, x) -``` - -**引数** - -* `arr` — 検索対象の配列。[`Array(T)`](/sql-reference/data-types/array) -* `x` — 配列内でカウントする値。任意の型。 - -**戻り値** - -`x` と等しい配列要素の数を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT countEqual([1, 2, NULL, NULL], NULL) -``` - -```response title=Response -2 -``` - - -## empty - -導入バージョン: v1.1 - -入力配列が空かどうかを確認します。 - -配列に要素が 1 つも含まれていない場合、その配列は空とみなされます。 - -:::note -[`optimize_functions_to_subcolumns` 設定](/operations/settings/settings#optimize_functions_to_subcolumns)を有効にすることで最適化できます。`optimize_functions_to_subcolumns = 1` の場合、この関数は配列列全体を読み取って処理する代わりに、[size0](/sql-reference/data-types/array#array-size) サブカラムのみを読み取ります。クエリ `SELECT empty(arr) FROM TABLE;` は `SELECT arr.size0 = 0 FROM TABLE;` に変換されます。 -::: - -この関数は String 型や UUID 型にも使用できます。 - -**構文** - -```sql -empty(arr) -``` - -**引数** - -* `arr` — 入力配列。[`Array(T)`](/sql-reference/data-types/array) - -**戻り値** - -空配列の場合は `1`、空でない配列の場合は `0` を返します。戻り値の型は [`UInt8`](/sql-reference/data-types/int-uint) です。 - -**例** - -**使用例** - -```sql title=Query -SELECT empty([]); -``` - -```response title=Response -1 -``` - - -## emptyArrayDate - -導入バージョン: v1.1 - -空の Date 型配列を返します。 - -**構文** - -```sql -emptyArrayDate() -``` - -**引数** - -* なし。 - -**戻り値** - -空の Date 型配列。[`Array(T)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT emptyArrayDate -``` - -```response title=Response -[] -``` - - -## emptyArrayDateTime - -導入されたバージョン: v1.1 - -空の DateTime 配列を返します。 - -**構文** - -```sql -emptyArrayDateTime() -``` - -**引数** - -* なし - -**戻り値** - -空の DateTime 型の配列。[`Array(T)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT emptyArrayDateTime -``` - -```response title=Response -[] -``` - - -## emptyArrayFloat32 - -導入バージョン: v1.1 - -空の Float32 配列を返します。 - -**構文** - -```sql -emptyArrayFloat32() -``` - -**引数** - -* なし。 - -**戻り値** - -空の Float32 配列。 [`Array(T)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT emptyArrayFloat32 -``` - -```response title=Response -[] -``` - - -## emptyArrayFloat64 - -導入バージョン: v1.1 - -空の Float64 型配列を返します - -**構文** - -```sql -emptyArrayFloat64() -``` - -**引数** - -* なし - -**戻り値** - -空の Float64 配列。[`Array(T)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT emptyArrayFloat64 -``` - -```response title=Response -[] -``` - - -## emptyArrayInt16 - -導入バージョン: v1.1 - -空の Int16 配列を返します - -**構文** - -```sql -emptyArrayInt16() -``` - -**引数** - -* なし。 - -**戻り値** - -空の Int16 配列。[`Array(T)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT emptyArrayInt16 -``` - -```response title=Response -[] -``` - - -## emptyArrayInt32 - -導入: v1.1 - -空の Int32 配列を返します。 - -**構文** - -```sql -emptyArrayInt32() -``` - -**引数** - -* なし。 - -**戻り値** - -空の Int32 配列。[`Array(T)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT emptyArrayInt32 -``` - -```response title=Response -[] -``` - - -## emptyArrayInt64 - -導入バージョン: v1.1 - -空の Int64 配列を返します - -**構文** - -```sql -emptyArrayInt64() -``` - -**引数** - -* なし。 - -**戻り値** - -空の Int64 配列。[`Array(T)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT emptyArrayInt64 -``` - -```response title=Response -[] -``` - - -## emptyArrayInt8 - -導入バージョン: v1.1 - -空の Int8 型の配列を返します。 - -**構文** - -```sql -emptyArrayInt8() -``` - -**引数** - -* なし。 - -**戻り値** - -空の Int8 配列。[`Array(T)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT emptyArrayInt8 -``` - -```response title=Response -[] -``` - - -## emptyArrayString - -導入バージョン: v1.1 - -空の String 型配列を返します。 - -**構文** - -```sql -emptyArrayString() -``` - -**引数** - -* なし。 - -**戻り値** - -空の String 型配列。[`Array(T)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT emptyArrayString -``` - -```response title=Response -[] -``` - - -## emptyArrayToSingle - -導入されたバージョン: v1.1 - -空の配列を受け取り、デフォルト値と同じ値を持つ 1 要素の配列を返します。 - -**構文** - -```sql -emptyArrayToSingle(arr) -``` - -**引数** - -* `arr` — 空の配列。[`Array(T)`](/sql-reference/data-types/array) - -**返される値** - -配列要素型 `T` のデフォルト値 1 つを含む配列。[`Array(T)`](/sql-reference/data-types/array) - -**例** - -**基本例** - -```sql title=Query -CREATE TABLE test ( - a Array(Int32), - b Array(String), - c Array(DateTime) -) -ENGINE = MergeTree -ORDER BY tuple(); - -INSERT INTO test VALUES ([], [], []); - -SELECT emptyArrayToSingle(a), emptyArrayToSingle(b), emptyArrayToSingle(c) FROM test; -``` - -```response title=Response -┌─emptyArrayToSingle(a)─┬─emptyArrayToSingle(b)─┬─emptyArrayToSingle(c)───┐ -│ [0] │ [''] │ ['1970-01-01 01:00:00'] │ -└───────────────────────┴───────────────────────┴─────────────────────────┘ -``` - - -## emptyArrayUInt16 - -導入: v1.1 - -空の UInt16 配列を返します。 - -**構文** - -```sql -emptyArrayUInt16() -``` - -**引数** - -* なし。 - -**戻り値** - -空の UInt16 配列。[`Array(T)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT emptyArrayUInt16 -``` - -```response title=Response -[] -``` - - -## emptyArrayUInt32 - -導入バージョン: v1.1 - -空の UInt32 型の配列を返します。 - -**構文** - -```sql -emptyArrayUInt32() -``` - -**引数** - -* なし。 - -**戻り値** - -空の UInt32 配列。[`Array(T)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT emptyArrayUInt32 -``` - -```response title=Response -[] -``` - - -## emptyArrayUInt64 - -導入バージョン: v1.1 - -空の UInt64 型の配列を返します。 - -**構文** - -```sql -emptyArrayUInt64() -``` - -**引数** - -* なし。 - -**返り値** - -空の UInt64 配列。[`Array(T)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT emptyArrayUInt64 -``` - -```response title=Response -[] -``` - - -## emptyArrayUInt8 - -導入バージョン: v1.1 - -空の UInt8 配列を返します。 - -**構文** - -```sql -emptyArrayUInt8() -``` - -**引数** - -* なし。 - -**戻り値** - -空のUInt8配列。[`Array(T)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT emptyArrayUInt8 -``` - -```response title=Response -[] -``` - - -## has - -導入バージョン: v1.1 - -指定した要素が配列に含まれているかどうかを返します。 - -**構文** - -```sql -has(arr, x) -``` - -**引数** - -* `arr` — 元の配列。[`Array(T)`](/sql-reference/data-types/array) -* `x` — 配列内で検索する値。 - -**戻り値** - -配列が指定した要素を含む場合は `1` を、含まない場合は `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**基本的な使用例** - -```sql title=Query -SELECT has([1, 2, 3], 2) -``` - -```response title=Response -1 -``` - -**見つかりませんでした** - -```sql title=Query -SELECT has([1, 2, 3], 4) -``` - -```response title=Response -0 -``` - - -## hasAll - -導入バージョン: v1.1 - -ある配列が別の配列の部分集合であるかどうかを確認します。 - -* 空の配列は任意の配列の部分集合です。 -* `Null` は値として処理されます。 -* どちらの配列においても、値の順序は問題になりません。 - -**構文** - -```sql -hasAll(set, subset) -``` - -**引数** - -* `set` — 要素の集合を持つ任意の型の配列。[`Array(T)`](/sql-reference/data-types/array) -* `subset` — `set` と共通のスーパータイプを持ち、`set` の部分集合かどうかをテストする対象の要素を含む任意の型の配列。[`Array(T)`](/sql-reference/data-types/array) - -**返り値** - -* `set` に `subset` のすべての要素が含まれている場合は `1`。 -* それ以外の場合は `0`。 - -`set` と `subset` の要素が共通のスーパータイプを持たない場合は、`NO_COMMON_TYPE` 例外をスローします。 - -**使用例** - -**空配列** - -```sql title=Query -SELECT hasAll([], []) -``` - -```response title=Response -1 -``` - -**NULL 値を含む配列** - -```sql title=Query -SELECT hasAll([1, Null], [Null]) -``` - -```response title=Response -1 -``` - -**異なる型の値を含む配列** - -```sql title=Query -SELECT hasAll([1.0, 2, 3, 4], [1, 3]) -``` - -```response title=Response -1 -``` - -**文字列値を含む配列** - -```sql title=Query -SELECT hasAll(['a', 'b'], ['a']) -``` - -```response title=Response -1 -``` - -**共通の型を持たない配列** - -```sql title=Query -SELECT hasAll([1], ['a']) -``` - -```response title=Response -NO_COMMON_TYPE例外を発生させます -``` - -**配列の配列** - -```sql title=Query -SELECT hasAll([[1, 2], [3, 4]], [[1, 2], [3, 5]]) -``` - -```response title=Response -0 -``` - - -## hasAny - -導入バージョン: v1.1 - -2 つの配列に、少なくとも 1 つ共通する要素(交差)があるかどうかを判定します。 - -* `Null` は値として扱われます。 -* 両方の配列内の値の順序は関係ありません。 - -**構文** - -```sql -hasAny(arr_x, arr_y) -``` - -**引数** - -* `arr_x` — 任意の型の要素を含む配列。[`Array(T)`](/sql-reference/data-types/array) -* `arr_y` — 配列 `arr_x` と共通のスーパータイプを持つ任意の型の要素からなる配列。[`Array(T)`](/sql-reference/data-types/array) - -**戻り値** - -* `arr_x` と `arr_y` に少なくとも 1 つ同じ要素がある場合は `1`。 -* それ以外の場合は `0`。 - -2 つの配列の要素のいずれかが共通のスーパータイプを持たない場合、`NO_COMMON_TYPE` 例外を送出します。 - -**例** - -**一方の配列が空の場合** - -```sql title=Query -SELECT hasAny([1], []) -``` - -```response title=Response -0 -``` - -**NULL 値を含む配列** - -```sql title=Query -SELECT hasAny([Null], [Null, 1]) -``` - -```response title=Response -1 -``` - -**異なる型の値を含む配列** - -```sql title=Query -SELECT hasAny([-128, 1., 512], [1]) -``` - -```response title=Response -1 -``` - -**共通の型を持たない配列** - -```sql title=Query -SELECT hasAny([[1, 2], [3, 4]], ['a', 'c']) -``` - -```response title=Response -`NO_COMMON_TYPE` 例外を発生させます -``` - -**配列の配列** - -```sql title=Query -SELECT hasAll([[1, 2], [3, 4]], [[1, 2], [1, 2]]) -``` - -```response title=Response -1 -``` - - -## hasSubstr - -導入バージョン: v20.6 - -array2 のすべての要素が、同一の順序で array1 内に出現するかどうかを判定します。 -したがって、この関数は array1 = prefix + array2 + suffix の場合に限り `1` を返します。 - -言い換えると、この関数は `hasAll` 関数と同様に、array2 のすべての要素が array1 に含まれているかどうかを確認します。 -さらに、それらの要素が array1 と array2 の両方で同じ順序で現れることも確認します。 - -* array2 が空の場合、関数は `1` を返します。 -* `Null` は値として扱われます。つまり、`hasSubstr([1, 2, NULL, 3, 4], [2,3])` は `0` を返します。一方、`hasSubstr([1, 2, NULL, 3, 4], [2,NULL,3])` は `1` を返します。 -* 両方の配列における要素の順序は重要です。 - -2 つの配列のいずれかの要素が共通のスーパータイプを持たない場合、`NO_COMMON_TYPE` 例外をスローします。 - -**構文** - -```sql -hasSubstr(arr1, arr2) -``` - -**引数** - -* `arr1` — 任意の型の要素からなる配列。[`Array(T)`](/sql-reference/data-types/array) -* `arr2` — 任意の型の要素からなる配列。[`Array(T)`](/sql-reference/data-types/array) - -**戻り値** - -配列 `arr1` が配列 `arr2` を含む場合は `1` を返します。そうでない場合は `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**両方の配列が空の場合** - -```sql title=Query -SELECT hasSubstr([], []) -``` - -```response title=Response -1 -``` - -**NULL 値を含む配列** - -```sql title=Query -SELECT hasSubstr([1, Null], [Null]) -``` - -```response title=Response -1 -``` - -**異なる型の値を含む配列** - -```sql title=Query -SELECT hasSubstr([1.0, 2, 3, 4], [1, 3]) -``` - -```response title=Response -0 -``` - -**文字列を含む配列** - -```sql title=Query -SELECT hasSubstr(['a', 'b'], ['a']) -``` - -```response title=Response -1 -``` - -**有効な順序付けのある配列** - -```sql title=Query -SELECT hasSubstr(['a', 'b' , 'c'], ['a', 'b']) -``` - -```response title=Response -1 -``` - -**不正な順序の配列** - -```sql title=Query -SELECT hasSubstr(['a', 'b' , 'c'], ['a', 'c']) -``` - -```response title=Response -0 -``` - -**配列の配列** - -```sql title=Query -SELECT hasSubstr([[1, 2], [3, 4], [5, 6]], [[1, 2], [3, 4]]) -``` - -```response title=Response -1 -``` - -**共通の型を持たない配列** - -```sql title=Query -SELECT hasSubstr([1, 2, NULL, 3, 4], ['a']) -``` - -```response title=Response -`NO_COMMON_TYPE` 例外を発生させます -``` - - -## indexOf - -導入バージョン: v1.1 - -配列内に値 'x' を持つ要素が存在する場合、その最初の要素のインデックス(1 から始まる)を返します。 -配列に検索対象の値が含まれていない場合、関数は `0` を返します。 - -`NULL` に設定された要素は通常の値として扱われます。 - -**構文** - -```sql -indexOf(arr, x) -``` - -**引数** - -* `arr` — `x` を検索する対象の配列。[`Array(T)`](/sql-reference/data-types/array) -* `x` — `arr` 内で最初に一致し、そのインデックスを返す要素の値。[`UInt64`](/sql-reference/data-types/int-uint) - -**返り値** - -`arr` 内に `x` が存在する場合、最初の `x` のインデックス(1 始まり)を返します。存在しない場合は `0` を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**基本的な例** - -```sql title=Query -SELECT indexOf([5, 4, 1, 3], 3) -``` - -```response title=Response -4 -``` - -**NULL 値を含む配列** - -```sql title=Query -SELECT indexOf([1, 3, NULL, NULL], NULL) -``` - -```response title=Response -3 -``` - - -## indexOfAssumeSorted - -導入バージョン: v24.12 - -配列内に値 'x' がある場合、最初に現れる要素のインデックス(`1` から開始)を返します。 -配列に検索対象の値が含まれていない場合、関数は `0` を返します。 - -:::note -`indexOf` 関数とは異なり、この関数は配列が昇順にソートされていることを前提とします。 -配列がソートされていない場合、結果は未定義です。 -::: - -**構文** - -```sql -indexOfAssumeSorted(arr, x) -``` - -**引数** - -* `arr` — 検索対象となるソート済み配列。[`Array(T)`](/sql-reference/data-types/array) -* `x` — ソート済み `arr` 内で、インデックスを取得する対象となる最初に一致する要素の値。[`UInt64`](/sql-reference/data-types/int-uint) - -**返り値** - -`x` が存在する場合は、`arr` 内で最初に現れる `x` のインデックス(1 から始まる番号)を返します。存在しない場合は `0` を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**基本的な例** - -```sql title=Query -SELECT indexOfAssumeSorted([1, 3, 3, 3, 4, 4, 5], 4) -``` - -```response title=Response -5 -``` - - -## length - -導入バージョン: v1.1 - -文字列または配列の長さを計算します。 - -* String または FixedString 引数の場合: 文字列内のバイト数を計算します。 -* Array 引数の場合: 配列内の要素数を計算します。 -* FixedString 引数に適用された場合、この関数は定数式になります。 - -文字列のバイト数は、Unicode の「コードポイント」の数とも、 -Unicode の「書記素クラスター」(一般的に「文字」と呼ぶもの)の数とも、 -見た目上の文字列幅とも一致しないことに注意してください。 - -文字列に ASCII の NULL バイトを含めても問題はなく、それらも長さとしてカウントされます。 - -**構文** - -```sql -length(x) -``` - -**エイリアス**: `OCTET_LENGTH` - -**引数** - -* `x` — バイト数(String/FixedString の場合)または要素数(Array の場合)を計算する対象の値。[`String`](/sql-reference/data-types/string)、[`FixedString`](/sql-reference/data-types/fixedstring)、または [`Array(T)`](/sql-reference/data-types/array) - -**戻り値** - -String/FixedString `x` のバイト数、または配列 `x` の要素数を返します。型は [`UInt64`](/sql-reference/data-types/int-uint) です。 - -**例** - -**String の例** - -```sql title=Query -SELECT length('Hello, world!') -``` - -```response title=Response -13 -``` - -**配列の例** - -```sql title=Query -SELECT length(['Hello', 'world']) -``` - -```response title=Response -2 -``` - -**constexpr の例** - -```sql title=Query -WITH 'hello' || toString(number) AS str -SELECT str, -isConstant(length(str)) AS str_length_is_constant, -isConstant(length(str::FixedString(6))) AS fixed_str_length_is_constant -FROM numbers(3) -``` - -```response title=Response -┌─str────┬─str_length_is_constant─┬─fixed_str_length_is_constant─┐ -│ hello0 │ 0 │ 1 │ -│ hello1 │ 0 │ 1 │ -│ hello2 │ 0 │ 1 │ -└────────┴────────────────────────┴──────────────────────────────┘ -``` - -**Unicodeの例** - -```sql title=Query -SELECT 'ёлка' AS str1, length(str1), lengthUTF8(str1), normalizeUTF8NFKD(str1) AS str2, length(str2), lengthUTF8(str2) -``` - -```response title=Response -┌─str1─┬─length(str1)─┬─lengthUTF8(str1)─┬─str2─┬─length(str2)─┬─lengthUTF8(str2)─┐ -│ ёлка │ 8 │ 4 │ ёлка │ 10 │ 5 │ -└──────┴──────────────┴──────────────────┴──────┴──────────────┴──────────────────┘ -``` - -**ascii_vs_utf8 の例** - -```sql title=Query -SELECT 'ábc' AS str, length(str), lengthUTF8(str) -``` - -```response title=Response -┌─str─┬─length(str)──┬─lengthUTF8(str)─┐ -│ ábc │ 4 │ 3 │ -└─────┴──────────────┴─────────────────┘ -``` - - -## notEmpty - -導入バージョン: v1.1 - -入力配列が空でないかどうかをチェックします。 - -少なくとも 1 つの要素を含む配列は、空でないと見なされます。 - -:::note -[`optimize_functions_to_subcolumns`](/operations/settings/settings#optimize_functions_to_subcolumns) 設定を有効にすることで最適化できます。`optimize_functions_to_subcolumns = 1` の場合、この関数は配列列全体を読み取って処理する代わりに、[size0](/sql-reference/data-types/array#array-size) サブカラムのみを読み取ります。クエリ `SELECT notEmpty(arr) FROM table` は `SELECT arr.size0 != 0 FROM TABLE` に変換されます。 -::: - -この関数は String 型や UUID 型に対しても動作します。 - -**構文** - -```sql -notEmpty(arr) -``` - -**引数** - -* `arr` — 入力配列。[`Array(T)`](/sql-reference/data-types/array) - -**戻り値** - -配列が空でない場合は `1`、空の場合は `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT notEmpty([1,2]); -``` - -```response title=Response -1 -``` - - -## range - -導入バージョン: v1.1 - -`start` から `end - 1` までを `step` ごとに並べた数値の配列を返します。 - -サポートされている型は次のとおりです: - -* `UInt8/16/32/64` - -* `Int8/16/32/64` - -* すべての引数 `start`、`end`、`step` は上記のいずれかのサポート対象の型でなければなりません。返される配列の要素の型は、引数の上位型になります。 - -* 関数が返す配列の要素数の合計が、設定 [`function_range_max_elements_in_block`](../../operations/settings/settings.md#function_range_max_elements_in_block) で指定された要素数を超える場合は、例外がスローされます。 - -* いずれかの引数が Nullable(nothing) 型の場合は `NULL` を返します。いずれかの引数が `NULL` 値(Nullable(T) 型)を持つ場合は、例外がスローされます。 - -**構文** - -```sql -range([start, ] end [, step]) -``` - -**引数** - -* `start` — 省略可能。配列の先頭要素。`step` を使用する場合は必須。デフォルト値: `0`。 - `end` — 必須。配列に含める値の上限となる数値(この値の直前までが配列に含まれる)。 - `step` — 省略可能。配列内の各要素間の増分値を指定する。デフォルト値: `1`。 - -**戻り値** - -`start` から `end - 1` までを `step` 刻みで並べた数値の配列。[`Array(T)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT range(5), range(1, 5), range(1, 5, 2), range(-1, 5, 2); -``` - -```response title=Response -┌─range(5)────┬─range(1, 5)─┬─range(1, 5, 2)─┬─range(-1, 5, 2)─┐ -│ [0,1,2,3,4] │ [1,2,3,4] │ [1,3] │ [-1,1,3] │ -└─────────────┴─────────────┴────────────────┴─────────────────┘ -``` - - -## replicate - -導入バージョン: v1.1 - -単一の値からなる配列を作成します。 - -**構文** - -```sql -replicate(x, arr) -``` - -**引数** - -* `x` — 結果配列を埋める値。[`Any`](/sql-reference/data-types) -* `arr` — 配列。[`Array(T)`](/sql-reference/data-types/array) - -**返される値** - -`arr` と同じ長さで、値 `x` が詰められた配列を返します。[`Array(T)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT replicate(1, ['a', 'b', 'c']); -``` - -```response title=Response -┌─replicate(1, ['a', 'b', 'c'])───┐ -│ [1, 1, 1] │ -└─────────────────────────────────┘ -``` - - -## reverse - -導入バージョン: v1.1 - -入力配列の要素、または入力文字列の文字の順序を反転します。 - -**構文** - -```sql -reverse(arr | str) -``` - -**引数** - -* `arr | str` — 元の配列または文字列。[`Array(T)`](/sql-reference/data-types/array) または [`String`](/sql-reference/data-types/string) - -**戻り値** - -要素または文字の順序を逆にした配列または文字列を返します。 - -**例** - -**配列を逆順にする** - -```sql title=Query -SELECT reverse([1, 2, 3, 4]); -``` - -```response title=Response -[4, 3, 2, 1] -``` - -**文字列の反転** - -```sql title=Query -SELECT reverse('abcd'); -``` - -```response title=Response -'dcba' -``` - {/*AUTOGENERATED_END*/ } ## 距離関数 {#distance-functions} -サポートされているすべての関数は、[距離関数のドキュメント](../../sql-reference/functions/distance-functions.md)で説明されています。 +サポートされているすべての関数については、[距離関数のドキュメント](../../sql-reference/functions/distance-functions.md)を参照してください。 \ No newline at end of file diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/bit-functions.md b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/bit-functions.md index ba6e2e942c9..538b04aedb0 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/bit-functions.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/bit-functions.md @@ -6,693 +6,18 @@ title: 'ビット関数' doc_type: 'reference' --- - - # ビット関数 -ビット関数は、`UInt8`、`UInt16`、`UInt32`、`UInt64`、`Int8`、`Int16`、`Int32`、`Int64`、`Float32`、`Float64` のいずれかの型の組み合わせに対して動作します。一部の関数は `String` および `FixedString` 型もサポートします。 +ビット関数は、`UInt8`、`UInt16`、`UInt32`、`UInt64`、`Int8`、`Int16`、`Int32`、`Int64`、`Float32`、`Float64` の任意の 2 つの型の組み合わせに対して動作します。一部の関数は `String` および `FixedString` 型もサポートします。 -結果の型は、引数のうち最大のビット幅を持つ型のビット数を幅とする整数型になります。少なくとも1つの引数が符号付きである場合、結果は符号付きの数値になります。引数が浮動小数点数型である場合、それは `Int64` 型にキャストされます。 +結果の型は、引数のビット数の最大値と同じビット数を持つ整数型になります。少なくとも一方の引数が符号付きの場合、結果は符号付きの数値になります。引数が浮動小数点数の場合は、`Int64` にキャストされます。 {/* 以下のタグ内の内容は、ドキュメントフレームワークのビルド時に - system.functions から自動生成されたドキュメントで置き換えられます。タグを変更したり削除したりしないでください。 - 詳細は次を参照してください: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md + system.functions から自動生成されたドキュメントに置き換えられます。タグを変更または削除しないでください。 + 参照: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## bitAnd - -導入バージョン: v1.1 - -2 つの値に対してビット単位の AND 演算を行います。 - -**構文** - -```sql -bitAnd(a, b) -``` - -**引数** - -* `a` — 1 番目の値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) -* `b` — 2 番目の値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) - -**返り値** - -ビット単位の演算 `a AND b` の結果を返します。 - -**例** - -**使用例** - -```sql title=Query -CREATE TABLE bits -( - `a` UInt8, - `b` UInt8 -) -ENGINE = Memory; - -INSERT INTO bits VALUES (0, 0), (0, 1), (1, 0), (1, 1); - -SELECT - a, - b, - bitAnd(a, b) -FROM bits -``` - -```response title=Response -┌─a─┬─b─┬─bitAnd(a, b)─┐ -│ 0 │ 0 │ 0 │ -│ 0 │ 1 │ 0 │ -│ 1 │ 0 │ 0 │ -│ 1 │ 1 │ 1 │ -└───┴───┴──────────────┘ -``` - - -## bitCount - -導入バージョン: v20.3 - -数値の2進数表現において、1にセットされているビット数を計算します。 - -**構文** - -```sql -bitCount(x) -``` - -**引数** - -* `x` — 整数または浮動小数点数の値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) - -**返り値** - -`x` の中で 1 に設定されているビット数を返します。[`UInt8`](../data-types/int-uint.md)。 - -:::note -この関数は入力値をより大きい型に変換しません([符号拡張](https://en.wikipedia.org/wiki/Sign_extension))。 -例: `bitCount(toUInt8(-1)) = 8`。 -::: - -**例** - -**使用例** - -```sql title=Query -SELECT bin(333), bitCount(333); -``` - -```response title=Response -┌─bin(333)─────────┬─bitCount(333)─┐ -│ 0000000101001101 │ 5 │ -└──────────────────┴───────────────┘ -``` - - -## bitHammingDistance - -導入バージョン: v21.1 - -2 つの数値のビット表現間の[ハミング距離](https://en.wikipedia.org/wiki/Hamming_distance)を返します。 -[`SimHash`](../../sql-reference/functions/hash-functions.md#ngramSimHash) 関数と組み合わせて、準重複(類似)文字列の検出に使用できます。 -距離が小さいほど、文字列同士がより類似していることを意味します。 - -**構文** - -```sql -bitHammingDistance(x, y) -``` - -**引数** - -* `x` — ハミング距離を計算する最初の数値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) -* `y` — ハミング距離を計算する2番目の数値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) - -**返り値** - -`x` と `y` のハミング距離を返します。型は [`UInt8`](/sql-reference/data-types/int-uint) です。 - -**例** - -**使用例** - -```sql title=Query -SELECT bitHammingDistance(111, 121); -``` - -```response title=Response -┌─bitHammingDistance(111, 121)─┐ -│ 3 │ -└──────────────────────────────┘ -``` - - -## bitNot - -導入バージョン: v1.1 - -ビット単位の NOT 演算を行います。 - -**構文** - -```sql -bitNot(a) -``` - -**引数** - -* `a` — ビット単位の NOT 演算を適用する値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`String`](/sql-reference/data-types/string) - -**戻り値** - -`~a` の結果である、ビットが反転された `a` を返します。 - -**例** - -**使用例** - -```sql title=Query -SELECT - CAST('5', 'UInt8') AS original, - bin(original) AS original_binary, - bitNot(original) AS result, - bin(bitNot(original)) AS result_binary; -``` - -```response title=Response -┌─original─┬─original_binary─┬─result─┬─result_binary─┐ -│ 5 │ 00000101 │ 250 │ 11111010 │ -└──────────┴─────────────────┴────────┴───────────────┘ -``` - - -## bitOr - -導入バージョン: v1.1 - -2 つの値に対してビット単位 OR 演算を実行します。 - -**構文** - -```sql -bitOr(a, b) -``` - -**引数** - -* `a` — 最初の値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) -* `b` — 2 番目の値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) - -**戻り値** - -ビット単位 OR 演算 `a OR b` の結果を返します。 - -**例** - -**使用例** - -```sql title=Query -CREATE TABLE bits -( - `a` UInt8, - `b` UInt8 -) -ENGINE = Memory; - -INSERT INTO bits VALUES (0, 0), (0, 1), (1, 0), (1, 1); - -SELECT - a, - b, - bitOr(a, b) -FROM bits; -``` - -```response title=Response -┌─a─┬─b─┬─bitOr(a, b)─┐ -│ 0 │ 0 │ 0 │ -│ 0 │ 1 │ 1 │ -│ 1 │ 0 │ 1 │ -│ 1 │ 1 │ 1 │ -└───┴───┴─────────────┘ -``` - - -## bitRotateLeft - -導入されたバージョン: v1.1 - -ビットを指定した数だけ左にローテートします。あふれたビットは右側に回り込みます。 - -**構文** - -```sql -bitRotateLeft(a, N) -``` - -**引数** - -* `a` — 回転対象の値。[`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) -* `N` — 左方向に回転させるビット数。[`UInt8/16/32/64`](/sql-reference/data-types/int-uint) - -**戻り値** - -`a` と同じ型の回転後の値を返します。[`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT 99 AS a, bin(a), bitRotateLeft(a, 2) AS a_rotated, bin(a_rotated); -``` - -```response title=Response -┌──a─┬─bin(a)───┬─a_rotated─┬─bin(a_rotated)─┐ -│ 99 │ 01100011 │ 141 │ 10001101 │ -└────┴──────────┴───────────┴────────────────┘ -``` - - -## bitRotateRight - -導入バージョン: v1.1 - -ビット列を指定した数だけ右に回転させます。はみ出したビットは左側に回り込みます。 - -**構文** - -```sql -bitRotateRight(a, N) -``` - -**引数** - -* `a` — 回転させる値。[`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) -* `N` — 右方向に回転させるビット数。[`UInt8/16/32/64`](/sql-reference/data-types/int-uint) - -**戻り値** - -`a` と同じ型の回転後の値を返します。[`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT 99 AS a, bin(a), bitRotateRight(a, 2) AS a_rotated, bin(a_rotated); -``` - -```response title=Response -┌──a─┬─bin(a)───┬─a_rotated─┬─bin(a_rotated)─┐ -│ 99 │ 01100011 │ 216 │ 11011000 │ -└────┴──────────┴───────────┴────────────────┘ -``` - - -## bitShiftLeft - -導入バージョン: v1.1 - -値の2進数表現を、指定したビット数だけ左にシフトします。 - -`FixedString` や `String` は、単一のマルチバイト値として扱われます。 - -`FixedString` の値では、シフトによって範囲外に出たビットは失われます。 -一方、`String` の値は追加のバイトで拡張されるため、ビットが失われることはありません。 - -**構文** - -```sql -bitShiftLeft(a, N) -``` - -**引数** - -* `a` — シフトする値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`String`](/sql-reference/data-types/string) または [`FixedString`](/sql-reference/data-types/fixedstring) -* `N` — シフトする位置数。[`UInt8/16/32/64`](/sql-reference/data-types/int-uint) - -**戻り値** - -`a` と同じ型のシフト後の値を返します。 - -**例** - -**バイナリエンコーディングを使用した使用例** - -```sql title=Query -SELECT 99 AS a, bin(a), bitShiftLeft(a, 2) AS a_shifted, bin(a_shifted); -``` - -```response title=Response -┌──a─┬─bin(99)──┬─a_shifted─┬─bin(bitShiftLeft(99, 2))─┐ -│ 99 │ 01100011 │ 140 │ 10001100 │ -└────┴──────────┴───────────┴──────────────────────────┘ -``` - -**16進数エンコードの使用例** - -```sql title=Query -SELECT 'abc' AS a, hex(a), bitShiftLeft(a, 4) AS a_shifted, hex(a_shifted); -``` - -```response title=Response -┌─a───┬─hex('abc')─┬─a_shifted─┬─hex(bitShiftLeft('abc', 4))─┐ -│ abc │ 616263 │ &0 │ 06162630 │ -└─────┴────────────┴───────────┴─────────────────────────────┘ -``` - -**FixedString エンコーディングの使用例** - -```sql title=Query -SELECT toFixedString('abc', 3) AS a, hex(a), bitShiftLeft(a, 4) AS a_shifted, hex(a_shifted); -``` - -```response title=Response -┌─a───┬─hex(toFixedString('abc', 3))─┬─a_shifted─┬─hex(bitShiftLeft(toFixedString('abc', 3), 4))─┐ -│ abc │ 616263 │ &0 │ 162630 │ -└─────┴──────────────────────────────┴───────────┴───────────────────────────────────────────────┘ -``` - - -## bitShiftRight - -導入バージョン: v1.1 - -値の2進表現を、指定されたビット数だけ右にシフトします。 - -`FixedString` または `String` は、1つのマルチバイト値として扱われます。 - -`FixedString` 値では、シフトによって押し出されたビットは失われます。 -一方、`String` 値は追加のバイトで拡張されるため、ビットは失われません。 - -**構文** - -```sql -bitShiftRight(a, N) -``` - -**引数** - -* `a` — シフトする値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`String`](/sql-reference/data-types/string) または [`FixedString`](/sql-reference/data-types/fixedstring) -* `N` — シフトするビット数。[`UInt8/16/32/64`](/sql-reference/data-types/int-uint) - -**戻り値** - -`a` と同じ型の、シフト後の値を返します。 - -**例** - -**バイナリ符号化での使用例** - -```sql title=Query -SELECT 101 AS a, bin(a), bitShiftRight(a, 2) AS a_shifted, bin(a_shifted); -``` - -```response title=Response -┌───a─┬─bin(101)─┬─a_shifted─┬─bin(bitShiftRight(101, 2))─┐ -│ 101 │ 01100101 │ 25 │ 00011001 │ -└─────┴──────────┴───────────┴────────────────────────────┘ -``` - -**16進数エンコードを使った使用例** - -```sql title=Query -SELECT 'abc' AS a, hex(a), bitShiftLeft(a, 4) AS a_shifted, hex(a_shifted); -``` - -```response title=Response -┌─a───┬─hex('abc')─┬─a_shifted─┬─hex(bitShiftRight('abc', 12))─┐ -│ abc │ 616263 │ │ 0616 │ -└─────┴────────────┴───────────┴───────────────────────────────┘ -``` - -**Fixed String エンコーディングの使用例** - -```sql title=Query -SELECT toFixedString('abc', 3) AS a, hex(a), bitShiftRight(a, 12) AS a_shifted, hex(a_shifted); -``` - -```response title=Response -┌─a───┬─hex(toFixedString('abc', 3))─┬─a_shifted─┬─hex(bitShiftRight(toFixedString('abc', 3), 12))─┐ -│ abc │ 616263 │ │ 000616 │ -└─────┴──────────────────────────────┴───────────┴─────────────────────────────────────────────────┘ -``` - - -## bitSlice - -導入バージョン: v22.2 - -`offset` インデックスのビット位置から始まり、`length` ビット分の部分ビット列(サブストリング)を返します。 - -**構文** - -```sql -bitSlice(s, offset[, length]) -``` - -**引数** - -* `s` — スライス対象の String または FixedString。[`String`](/sql-reference/data-types/string) または [`FixedString`](/sql-reference/data-types/fixedstring) -* `offset` — - 開始ビット位置(1 始まりのインデックス)。 -* 正の値: 文字列の先頭から数えます。 -* 負の値: 文字列の末尾から数えます。 - - [`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) -* `length` — - 省略可能。抽出するビット数。 -* 正の値: `length` ビットを抽出します。 -* 負の値: offset から `(string_length - |length|)` までを抽出します。 -* 省略時: offset から文字列の末尾までを抽出します。 -* length が 8 の倍数でない場合、結果は右側がゼロで埋められます。 - [`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) - -**返される値** - -抽出されたビットを 2 進ビット列として表現した文字列を返します。結果は常にバイト境界(8 ビットの倍数)になるようにパディングされます。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT bin('Hello'), bin(bitSlice('Hello', 1, 8)); -SELECT bin('Hello'), bin(bitSlice('Hello', 1, 2)); -SELECT bin('Hello'), bin(bitSlice('Hello', 1, 9)); -SELECT bin('Hello'), bin(bitSlice('Hello', -4, 8)); -``` - -```response title=Response -┌─bin('Hello')─────────────────────────────┬─bin(bitSlice('Hello', 1, 8))─┐ -│ 0100100001100101011011000110110001101111 │ 01001000 │ -└──────────────────────────────────────────┴──────────────────────────────┘ -┌─bin('Hello')─────────────────────────────┬─bin(bitSlice('Hello', 1, 2))─┐ -│ 0100100001100101011011000110110001101111 │ 01000000 │ -└──────────────────────────────────────────┴──────────────────────────────┘ -┌─bin('Hello')─────────────────────────────┬─bin(bitSlice('Hello', 1, 9))─┐ -│ 0100100001100101011011000110110001101111 │ 0100100000000000 │ -└──────────────────────────────────────────┴──────────────────────────────┘ -┌─bin('Hello')─────────────────────────────┬─bin(bitSlice('Hello', -4, 8))─┐ -│ 0100100001100101011011000110110001101111 │ 11110000 │ -└──────────────────────────────────────────┴───────────────────────────────┘ -``` - - -## bitTest - -導入バージョン: v1.1 - -任意の数値を[2進数表現](https://en.wikipedia.org/wiki/Binary_number)に変換し、指定した位置にあるビットの値を返します。ビットの位置は右端から左方向に、0 を起点として数えます。 - -**構文** - -```sql -bitTest(a, i) -``` - -**引数** - -* `a` — 変換対象の数値。[`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) -* `i` — 返すビット位置。[`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) - -**返り値** - -`a` の 2 進表現における位置 `i` のビット値を返します。型は [`UInt8`](/sql-reference/data-types/int-uint) です。 - -**例** - -**使用例** - -```sql title=Query -SELECT bin(2), bitTest(2, 1); -``` - -```response title=Response -┌─bin(2)───┬─bitTest(2, 1)─┐ -│ 00000010 │ 1 │ -└──────────┴───────────────┘ -``` - - -## bitTestAll - -導入バージョン: v1.1 - -指定された位置のすべてのビットに対する[論理積](https://en.wikipedia.org/wiki/Logical_conjunction)(AND 演算子)の結果を返します。 -右端を 0 として左方向に数えます。 - -2 つのビット間の論理 AND は、両方の入力ビットが真である場合に限り真になります。 - -**構文** - -```sql -bitTestAll(a, index1[, index2, ... , indexN]) -``` - -**引数** - -* `a` — 整数値。[`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) -* `index1, ...` — 1つ以上のビット位置。[`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) - -**戻り値** - -論理積の結果を[`UInt8`](/sql-reference/data-types/int-uint)型で返します。 - -**例** - -**使用例 1** - -```sql title=Query -SELECT bitTestAll(43, 0, 1, 3, 5); -``` - -```response title=Response -┌─bin(43)──┬─bitTestAll(43, 0, 1, 3, 5)─┐ -│ 00101011 │ 1 │ -└──────────┴────────────────────────────┘ -``` - -**使用例 2** - -```sql title=Query -SELECT bitTestAll(43, 0, 1, 3, 5, 2); -``` - -```response title=Response -┌─bin(43)──┬─bitTestAll(4⋯1, 3, 5, 2)─┐ -│ 00101011 │ 0 │ -└──────────┴──────────────────────────┘ -``` - - -## bitTestAny - -導入バージョン: v1.1 - -数値内の指定された位置にあるすべてのビットについて、[論理和](https://en.wikipedia.org/wiki/Logical_disjunction)(OR 演算)の結果を返します。 -ビット位置は右から左に数え、0 から開始します。 - -2 つのビットの論理和は、少なくとも一方の入力ビットが真である場合に真となります。 - -**構文** - -```sql -bitTestAny(a, index1[, index2, ... , indexN]) -``` - -**引数** - -* `a` — 整数値。[`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) -* `index1, ...` — 1 つ以上のビットの位置。[`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) - -**返り値** - -論理和の結果を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**使用例 1** - -```sql title=Query -SELECT bitTestAny(43, 0, 2); -``` - -```response title=Response -┌─bin(43)──┬─bitTestAny(43, 0, 2)─┐ -│ 00101011 │ 1 │ -└──────────┴──────────────────────┘ -``` - -**使用例 2** - -```sql title=Query -SELECT bitTestAny(43, 4, 2); -``` - -```response title=Response -┌─bin(43)──┬─bitTestAny(43, 4, 2)─┐ -│ 00101011 │ 0 │ -└──────────┴──────────────────────┘ -``` - - -## bitXor - -導入バージョン: v1.1 - -2つの値に対してビット単位の排他的論理和 (XOR) 演算を行います。 - -**構文** - -```sql -bitXor(a, b) -``` - -**引数** - -* `a` — 1番目の値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) -* `b` — 2番目の値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) - -**戻り値** - -ビット単位の排他的論理和演算 `a XOR b` の結果を返します。 - -**例** - -**使用例** - -```sql title=Query -CREATE TABLE bits -( - `a` UInt8, - `b` UInt8 -) -ENGINE = Memory; - -INSERT INTO bits VALUES (0, 0), (0, 1), (1, 0), (1, 1); - -SELECT - a, - b, - bitXor(a, b) -FROM bits; -``` - -```response title=Response -┌─a─┬─b─┬─bitXor(a, b)─┐ -│ 0 │ 0 │ 0 │ -│ 0 │ 1 │ 1 │ -│ 1 │ 0 │ 1 │ -│ 1 │ 1 │ 0 │ -└───┴───┴──────────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/bitmap-functions.md b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/bitmap-functions.md index ae497de730d..f09029705c5 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/bitmap-functions.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/bitmap-functions.md @@ -1,725 +1,22 @@ --- -description: 'ビットマップ関数に関するドキュメント' +description: 'ビットマップ関数リファレンス' sidebar_label: 'ビットマップ' slug: /sql-reference/functions/bitmap-functions title: 'ビットマップ関数' doc_type: 'reference' --- - - # ビットマップ関数 -ビットマップは 2 通りの方法で作成できます。1 つ目の方法は、集約関数 groupBitmap の `-State` 付きバージョンによって作成する方法です。もう 1 つの方法は、Array オブジェクトからビットマップを作成する方法です。 +ビットマップは 2 通りの方法で構築できます。1 つ目は集約関数 groupBitmap に `-State` を付けて構築する方法で、もう 1 つは Array オブジェクトからビットマップを構築する方法です。 {/* - 以下のタグ内の内容は、ドキュメントフレームワークのビルド時に - system.functions から自動生成されたドキュメントに置き換えられます。タグを変更または削除しないでください。 - 詳しくは https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md を参照してください。 + 以下のタグの内部の内容は、ドキュメントフレームワークのビルド時に + system.functions から自動生成されたドキュメントで置き換えられます。 + タグを変更または削除しないでください。 + 詳細は、https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md を参照してください。 */ } - {/*AUTOGENERATED_START*/ } -## bitmapAnd - -導入バージョン: v20.1 - -2 つのビットマップの論理積 (AND) を計算します。 - -**構文** - -```sql -bitmapAnd(bitmap1, bitmap2) -``` - -**引数** - -* `bitmap1` — 1 番目のビットマップオブジェクト。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction) -* `bitmap2` — 2 番目のビットマップオブジェクト。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction) - -**返される値** - -両方の入力ビットマップに共通するビットを含むビットマップを返します。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction) - -**例** - -**使用例** - -```sql title=Query -SELECT bitmapToArray(bitmapAnd(bitmapBuild([1, 2, 3]), bitmapBuild([3, 4, 5]))) AS res; -``` - -```response title=Response -┌─res─┐ -│ [3] │ -└─────┘ -``` - - -## bitmapAndCardinality - -導入バージョン: v20.1 - -2つのビットマップの論理積 (AND) のカーディナリティ(要素数)を返します。 - -**構文** - -```sql -bitmapAndCardinality(bitmap1, bitmap2) -``` - -**引数** - -* `bitmap1` — 1つ目のビットマップオブジェクト。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - `bitmap2` — 2つ目のビットマップオブジェクト。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - -**戻り値** - -2つのビットマップの積集合において、ビットがセットされている数を返します。型は [`UInt64`](/sql-reference/data-types/int-uint) です。 - -**例** - -**使用例** - -```sql title=Query -SELECT bitmapAndCardinality(bitmapBuild([1,2,3]), bitmapBuild([3,4,5])) AS res; -``` - -```response title=Response -┌─res─┐ -│ 1 │ -└─────┘ -``` - - -## bitmapAndnot - -導入バージョン: v20.1 - -2つのビットマップについて、集合差 A AND-NOT B を計算します。 - -**構文** - -```sql -bitmapAndnot(bitmap1, bitmap2) -``` - -**引数** - -* `bitmap1` — 1つ目のビットマップオブジェクト。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - `bitmap2` — 2つ目のビットマップオブジェクト。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - -**返り値** - -1つ目のビットマップには含まれているが、2つ目のビットマップには含まれていないビットが立っているビットマップを返します。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction) - -**例** - -**使用例** - -```sql title=Query -SELECT bitmapToArray(bitmapAndnot(bitmapBuild([1, 2, 3]), bitmapBuild([3, 4, 5]))) AS res; -``` - -```response title=Response -┌─res────┐ -│ [1, 2] │ -└────────┘ -``` - - -## bitmapAndnotCardinality - -導入バージョン: v20.1 - -2 つのビットマップに対する AND-NOT 演算のカーディナリティ(基数)を返します。 - -**構文** - -```sql -bitmapAndnotCardinality(bitmap1, bitmap2) -``` - -**引数** - -* `bitmap1` — 1番目のビットマップオブジェクト。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - `bitmap2` — 2番目のビットマップオブジェクト。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - -**返される値** - -`bitmap1 AND-NOT bitmap2` の結果における、セットされているビット数([`UInt64`](/sql-reference/data-types/int-uint))を返します。 - -**例** - -**使用例** - -```sql title=Query -SELECT bitmapAndnotCardinality(bitmapBuild([1,2,3]), bitmapBuild([3,4,5])) AS res; -``` - -```response title=Response -┌─res─┐ -│ 2 │ -└─────┘ -``` - - -## bitmapBuild - -導入: v20.1 - -符号なし整数の配列からビットマップを構築します。関数 [`bitmapToArray`](/sql-reference/functions/bitmap-functions#bitmapToArray) とは逆の関係にあります。 - -**構文** - -```sql -bitmapBuild(array) -``` - -**引数** - -* `array` — 符号なし整数の配列。[`Array(UInt*)`](/sql-reference/data-types/array) - -**戻り値** - -指定された配列からビットマップを生成して返します。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction) - -**例** - -**使用例** - -```sql title=Query -SELECT bitmapBuild([1, 2, 3, 4, 5]) AS res, toTypeName(res); -``` - -```response title=Response -┌─res─┬─toTypeName(bitmapBuild([1, 2, 3, 4, 5]))─────┐ -│ │ AggregateFunction(groupBitmap, UInt8) │ -└─────┴──────────────────────────────────────────────┘ -``` - - -## bitmapCardinality - -導入バージョン: v20.1 - -ビットマップ内で 1 に設定されているビット数(カーディナリティ)を返します。 - -**構文** - -```sql -bitmapCardinality(bitmap) -``` - -**引数** - -* `bitmap` — Bitmap オブジェクト。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction)。 - -**戻り値** - -ビットマップ内で 1 に設定されているビットの数を返します。型は [`UInt64`](/sql-reference/data-types/int-uint) です。 - -**例** - -**使用例** - -```sql title=Query -SELECT bitmapCardinality(bitmapBuild([1, 3, 3, 5, 7, 7])) AS res -``` - -```response title=Response -┌─res─┐ -│ 4 │ -└─────┘ -``` - - -## bitmapContains - -導入バージョン: v20.1 - -特定の要素がビットマップに含まれているかを確認します。 - -**構文** - -```sql -bitmapContains(bitmap, value) -``` - -**引数** - -* `bitmap` — Bitmap オブジェクト。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction)。- `value` — 含まれているかをチェックする要素。[(U)Int8/16/32/64](/sql-reference/data-types/int-uint/) - -**戻り値** - -ビットマップ内に指定した値が含まれている場合は `1`、それ以外の場合は `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT bitmapContains(bitmapBuild([1, 2, 3]), 2) AS res; -``` - -```response title=Response -┌─res─┐ -│ 1 │ -└─────┘ -``` - - -## bitmapHasAll - -導入バージョン: v20.1 - -最初のビットマップが、2番目のビットマップのすべてのセットビットを含んでいるかどうかを判定します。 - -**構文** - -```sql -bitmapHasAll(bitmap1, bitmap2) -``` - -**引数** - -* `bitmap1` — 1 番目のビットマップオブジェクト。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction) -* `bitmap2` — 2 番目のビットマップオブジェクト。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction) - -**戻り値** - -2 番目のビットマップでセットされているすべてのビットが 1 番目のビットマップにも存在する場合は `1` を返し、それ以外の場合は `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT bitmapHasAll(bitmapBuild([1, 2, 3]), bitmapBuild([2, 3])) AS res; -``` - -```response title=Response -┌─res─┐ -│ 1 │ -└─────┘ -``` - - -## bitmapHasAny - -導入バージョン: v20.1 - -最初のビットマップが、2 番目のビットマップでセットされているビットを 1 つ以上含んでいるかどうかを判定します。 - -**構文** - -```sql -bitmapHasAny(bitmap1, bitmap2) -``` - -**引数** - -* `bitmap1` — 1 番目のビットマップオブジェクト。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction) 型。 - `bitmap2` — 2 番目のビットマップオブジェクト。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction) 型。 - -**戻り値** - -2 番目のビットマップのビットのうちいずれかが 1 番目のビットマップに存在する場合は `1` を返し、そうでない場合は `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT bitmapHasAny(bitmapBuild([1, 2, 3]), bitmapBuild([3, 4, 5])) AS res; -``` - -```response title=Response -┌─res─┐ -│ 1 │ -└─────┘ -``` - - -## bitmapMax - -導入バージョン: v20.1 - -ビットマップ内で最も大きいビットが立っている位置を返します。ビットマップが空の場合は `0` を返します。 - -**構文** - -```sql -bitmapMax(bitmap) -``` - -**引数** - -* `bitmap` — Bitmap オブジェクト。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction)。 - -**返される値** - -ビットマップ内で 1 にセットされているビットのうち、最も大きい位置を返し、該当するビットがない場合は `0` を返します。型は [`UInt64`](/sql-reference/data-types/int-uint) です。 - -**例** - -**使用例** - -```sql title=Query -SELECT bitmapMax(bitmapBuild([1, 2, 3, 4, 5])) AS res; -``` - -```response title=Response -┌─res─┐ -│ 5 │ -└─────┘ -``` - - -## bitmapMin - -導入バージョン: v20.1 - -ビットマップ内で 1 に設定されているビットのうち、最小のビット(最下位ビット)の位置を返します。すべてのビットが未設定の場合は `UINT32_MAX` を、ビットマップが `2^64` ビットを超える場合は `UINT64_MAX` を返します。 - -**構文** - -```sql -bitmapMin(bitmap) -``` - -**引数** - -* `bitmap` — ビットマップオブジェクト。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction)。 - -**返される値** - -ビットマップ内で 1 に設定されている最小のビット位置、または `UINT32_MAX`/`UINT64_MAX` [`UInt64`](/sql-reference/data-types/int-uint) を返します。 - -**例** - -**使用例** - -```sql title=Query -SELECT bitmapMin(bitmapBuild([3, 5, 2, 6])) AS res; -``` - -```response title=Response -┌─res─┐ -│ 2 │ -└─────┘ -``` - - -## bitmapOr - -導入バージョン: v20.1 - -2つのビットマップの論理和 (OR) を計算します。 - -**構文** - -```sql -bitmapOr(bitmap1, bitmap2) -``` - -**引数** - -* `bitmap1` — 1つ目のビットマップオブジェクト。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - `bitmap2` — 2つ目のビットマップオブジェクト。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - -**戻り値** - -いずれかの入力ビットマップ [`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction) に存在するセットビットを含むビットマップを返します。 - -**例** - -**使用例** - -```sql title=Query -SELECT bitmapToArray(bitmapOr(bitmapBuild([1, 2, 3]), bitmapBuild([3, 4, 5]))) AS res; -``` - -```response title=Response -┌─res─────────────┐ -│ [1, 2, 3, 4, 5] │ -└─────────────────┘ -``` - - -## bitmapOrCardinality - -導入バージョン: v20.1 - -2 つのビットマップに対する論理和 (OR) のカーディナリティ(要素数)を返します。 - -**構文** - -```sql -bitmapOrCardinality(bitmap1, bitmap2) -``` - -**引数** - -* `bitmap1` — 1 つ目のビットマップオブジェクト。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - `bitmap2` — 2 つ目のビットマップオブジェクト。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - -**戻り値** - -2 つのビットマップの和集合において、セットされているビット数を返します。型は [`UInt64`](/sql-reference/data-types/int-uint) です。 - -**例** - -**使用例** - -```sql title=Query -SELECT bitmapOrCardinality(bitmapBuild([1,2,3]), bitmapBuild([3,4,5])) AS res; -``` - -```response title=Response -┌─res─┐ -│ 5 │ -└─────┘ -``` - - -## bitmapSubsetInRange - -導入バージョン: v20.1 - -指定された範囲 [start, end) にあるセットビットのみを含むビットマップの部分集合を返します。インデックスは 1 始まりです。 - -**構文** - -```sql -bitmapSubsetInRange(bitmap, start, end) -``` - -**引数** - -* `bitmap` — サブセットを抽出するビットマップ。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - `start` — 範囲の開始位置(含む)。[`UInt*`](/sql-reference/data-types/int-uint) - `end` — 範囲の終了位置(含まない)。[`UInt*`](/sql-reference/data-types/int-uint) - -**戻り値** - -指定した範囲内でセットされているビットのみを含むビットマップを返します。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction) - -**例** - -**使用例** - -```sql title=Query -SELECT bitmapToArray(bitmapSubsetInRange(bitmapBuild([1, 2, 3, 4, 5]), 2, 5)) AS res; -``` - -```response title=Response -┌─res───────┐ -│ [2, 3, 4] │ -└───────────┘ -``` - - -## bitmapSubsetLimit - -導入バージョン: v20.1 - -ビットマップの `range_start` 位置から、最大で `cardinality_limit` 個のビットが 1 に設定された要素を含む部分集合を返します。インデックスは 1 始まりです。 - -**構文** - -```sql -bitmapSubsetLimit(bitmap, range_start, cardinality_limit) -``` - -**引数** - -* `bitmap` — Bitmap オブジェクト。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - `range_start` — 範囲の開始位置(含む)。[`UInt32`](/sql-reference/data-types/int-uint) - `cardinality_limit` — 部分集合の最大カーディナリティ。[`UInt32`](/sql-reference/data-types/int-uint) - -**戻り値** - -`range_start` から開始して、最大で `cardinality_limit` 個までビットがセットされた Bitmap を返します。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction) - -**例** - -**使用例** - -```sql title=Query -SELECT bitmapToArray(bitmapSubsetLimit(bitmapBuild([1, 5, 3, 2, 8]), 3, 2)) AS res; -``` - -```response title=Response -┌─res────┐ -│ [5, 3] │ -└────────┘ -``` - - -## bitmapToArray - -導入バージョン: v20.1 - -ビットマップを符号なし整数の配列に変換します。これは、関数 [`bitmapBuild`](/sql-reference/functions/bitmap-functions#bitmapBuild) の逆の処理を行います。 - -**構文** - -```sql -bitmapToArray(bitmap) -``` - -**引数** - -* `bitmap` — 変換するビットマップ。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction)。 - -**返り値** - -ビットマップに含まれる符号なし整数から成る配列を返します。[`Array(UInt*)`](/sql-reference/data-types/array)。 - -**例** - -**使用例** - -```sql title=Query -SELECT bitmapToArray(bitmapBuild([1, 2, 3, 4, 5])) AS res; -``` - -```response title=Response -┌─res─────────────┐ -│ [1, 2, 3, 4, 5] │ -└─────────────────┘ -``` - - -## bitmapTransform - -導入バージョン: v20.1 - -`from_array` 内の特定のビット値を `to_array` 内の対応するビット値に置き換えることで、ビットマップ中の最大 N 個のビットを変更します。 - -**構文** - -```sql -bitmapTransform(bitmap, from_array, to_array) -``` - -**引数** - -* `bitmap` — ビットマップオブジェクト。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - `from_array` — 置き換え対象となる元のセットビットの配列。[`Array(T)`](/sql-reference/data-types/array). - `to_array` — 置き換え後の新しいセットビットの配列。[`Array(T)`](/sql-reference/data-types/array). - -**戻り値** - -指定されたマッピングに従って要素が変換されたビットマップを返します。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction) - -**例** - -**使用例** - -```sql title=Query -SELECT bitmapToArray(bitmapTransform(bitmapBuild([1, 2, 3, 4, 5]), [2, 4], [20, 40])) AS res; -``` - -```response title=Response -┌─res───────────────┐ -│ [1, 3, 5, 20, 40] │ -└───────────────────┘ -``` - - -## bitmapXor - -導入バージョン: v20.1 - -2つのビットマップの対称差(XOR)を計算します。 - -**構文** - -```sql -bitmapXor(bitmap1, bitmap2) -``` - -**引数** - -* `bitmap1` — 1番目のビットマップオブジェクト。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction) - `bitmap2` — 2番目のビットマップオブジェクト。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction) - -**返される値** - -いずれか一方の入力ビットマップには存在するが、両方には存在しないセットビットを含むビットマップを返します。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction) - -**例** - -**使用例** - -```sql title=Query -SELECT bitmapToArray(bitmapXor(bitmapBuild([1, 2, 3]), bitmapBuild([3, 4, 5]))) AS res; -``` - -```response title=Response -┌─res──────────┐ -│ [1, 2, 4, 5] │ -└──────────────┘ -``` - - -## bitmapXorCardinality - -導入バージョン: v20.1 - -2 つのビットマップの XOR(対称差)のカーディナリティ(要素数)を返します。 - -**構文** - -```sql -bitmapXorCardinality(bitmap1, bitmap2) -``` - -**引数** - -* `bitmap1` — 1つ目のビットマップオブジェクト。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - `bitmap2` — 2つ目のビットマップオブジェクト。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - -**返される値** - -2つのビットマップの対称差におけるセットビット数を返します。型は [`UInt64`](/sql-reference/data-types/int-uint) です。 - -**例** - -**使用例** - -```sql title=Query -SELECT bitmapXorCardinality(bitmapBuild([1,2,3]), bitmapBuild([3,4,5])) AS res; -``` - -```response title=Response -┌─res─┐ -│ 4 │ -└─────┘ -``` - - -## subBitmap - -導入バージョン: v21.9 - -ビットマップの `offset` から始まる部分集合を返します。返されるビットマップの最大要素数(カーディナリティ)は `cardinality_limit` です。 - -**構文** - -```sql -subBitmap(bitmap, offset, cardinality_limit) -``` - -**引数** - -* `bitmap` — ビットマップオブジェクト。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - `offset` — 先頭からスキップするセットビットの数(0 始まり)。[`UInt32`](/sql-reference/data-types/int-uint) - `cardinality_limit` — サブセットに含めるセットビットの最大数。[`UInt32`](/sql-reference/data-types/int-uint) - -**戻り値** - -セットビットを昇順に見て先頭から `offset` 個スキップした後、最大 `limit` 個のセットビットを含むビットマップを返します。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction) - -**例** - -**使用例** - -```sql title=Query -SELECT bitmapToArray(subBitmap(bitmapBuild([1, 2, 3, 4, 5]), 2, 2)) AS res; -``` - -```response title=Response -┌─res────┐ -│ [3, 4] │ -└────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/comparison-functions.md b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/comparison-functions.md index 8903273e5d8..6e3a231ff71 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/comparison-functions.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/comparison-functions.md @@ -6,350 +6,36 @@ title: '比較関数' doc_type: 'reference' --- - - # 比較関数 - - ## 比較ルール -以下の比較関数は、[UInt8](/sql-reference/data-types/int-uint) 型で `0` または `1` を返します。同じグループ内の値のみが -比較可能です(例: `UInt16` と `UInt64`)であり、グループをまたいだ比較(例: `UInt16` と `DateTime`)はできません。 -数値と文字列の比較に加えて、文字列と日付、日付と時刻の比較も可能です。 -タプルおよび配列については辞書式順序で比較されます。つまり、左側と右側のタプル/配列の -それぞれ対応する要素ごとに比較が行われます。 +以下の比較関数は、型 [UInt8](/sql-reference/data-types/int-uint) の `0` または `1` を返します。同じグループ内の値同士のみが +比較可能です(例: `UInt16` と `UInt64`)。グループをまたいだ比較(例: `UInt16` と `DateTime`)はできません。 +数値と文字列の比較、文字列と日付、日付と時刻の比較は可能です。 +タプルおよび配列の場合、比較は辞書式(レキシコグラフィック)になり、左側と右側のタプル/配列の各対応要素を順に比較します。 比較可能な型は次のとおりです: -* 数値と 10 進数 -* 文字列と固定長文字列 +* 数値および小数 +* 文字列および固定長文字列 * 日付 * 日付と時刻 * タプル(辞書式比較) * 配列(辞書式比較) :::note -文字列はバイト単位で比較されます。そのため、一方の文字列に UTF-8 でエンコードされたマルチバイト文字が含まれている場合、意図しない結果になる可能性があります。 -文字列 S1 が別の文字列 S2 を前方一致(プレフィックス)として含む場合、S1 は S2 より長いと見なされます。 +文字列はバイト単位で比較されます。一方の文字列に UTF-8 エンコードされたマルチバイト文字が含まれている場合、予期しない結果になる可能性があります。 +文字列 S1 が別の文字列 S2 を接頭辞として持つ場合、S1 は S2 より長いと見なされます。 ::: {/* - 以下のタグ内の内容は、ドキュメントフレームワークのビルド時に - system.functions から自動生成されたドキュメントに置き換えられます。タグは変更したり削除したりしないでください。 + 以下のタグ内のコンテンツは、ドキュメントフレームワークのビルド時に + system.functions から生成されたドキュメントで置き換えられます。 + これらのタグを変更または削除しないでください。 詳細は https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md を参照してください。 */ } - {/*AUTOGENERATED_START*/ } -## equals - -導入バージョン: v1.1 - -2 つの値が等しいかどうかを比較します。 - -**構文** - -```sql -equals(a, b) - -- a = b - -- a == b -``` - -**引数** - -* `a` — 1つ目の値。[*](#comparison-rules) - `b` — 2つ目の値。[*](#comparison-rules) - -**返される値** - -`a` が `b` と等しい場合は `1` を、それ以外の場合は `0` を返します([`UInt8`](/sql-reference/data-types/int-uint) 型)。 - -**例** - -**使用例** - -```sql title=Query -SELECT 1 = 1, 1 = 2; -``` - -```response title=Response -┌─equals(1, 1)─┬─equals(1, 2)─┐ -│ 1 │ 0 │ -└──────────────┴──────────────┘ -``` - - -## greater - -導入バージョン: v1.1 - -2つの値を比較し、一方が他方より大きいかどうかを判定します。 - -**構文** - -```sql -greater(a, b) - -- a > b -``` - -**引数** - -* `a` — 1番目の値。[*](#comparison-rules) - `b` — 2番目の値。[*](#comparison-rules) - -**戻り値** - -`a` が `b` より大きい場合は `1`、それ以外の場合は `0` を返します([`UInt8`](/sql-reference/data-types/int-uint) 型)。 - -**例** - -**使用例** - -```sql title=Query -SELECT 2 > 1, 1 > 2; -``` - -```response title=Response -┌─greater(2, 1)─┬─greater(1, 2)─┐ -│ 1 │ 0 │ -└───────────────┴───────────────┘ -``` - - -## greaterOrEquals - -バージョン v1.1 で導入 - -2 つの値を比較し、「以上」の関係にあるかどうかを判定します。 - -**構文** - -```sql -greaterOrEquals(a, b) - -- a >= b(a が b 以上) -``` - -**引数** - -* `a` — 1 番目の値。[*](#comparison-rules) - `b` — 2 番目の値。[*](#comparison-rules) - -**返される値** - -`a` が `b` 以上の場合は `1`、それ以外の場合は `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT 2 >= 1, 2 >= 2, 1 >= 2; -``` - -```response title=Response -┌─greaterOrEquals(2, 1)─┬─greaterOrEquals(2, 2)─┬─greaterOrEquals(1, 2)─┐ -│ 1 │ 1 │ 0 │ -└───────────────────────┴───────────────────────┴───────────────────────┘ -``` - - -## isDistinctFrom - -導入バージョン: v25.9 - -2 つの値の間で、NULL セーフな「等しくない」比較を行います。 -一方の値が NULL で他方が NULL ではない場合を含め、値が異なる(等しくない)場合に `true` を返します。 -値が等しい場合、または両方が NULL の場合は `false` を返します。 - -**構文** - -```sql -isDistinctFrom(x, y) -``` - -**引数** - -* `x` — 比較する1番目の値。任意の ClickHouse データ型を指定できます。[`Any`](/sql-reference/data-types) -* `y` — 比較する2番目の値。任意の ClickHouse データ型を指定できます。[`Any`](/sql-reference/data-types) - -**戻り値** - -2つの値が異なる場合に `true` を返します。NULL は比較対象として扱われます。 - -* x != y の場合に `true` を返します。 -* x または y の一方のみが NULL の場合に `true` を返します。 -* x = y の場合、または x と y の両方が NULL の場合に `false` を返します。[`Bool`](/sql-reference/data-types/boolean) - -**例** - -**数値と NULL を使った基本的な使用例** - -```sql title=Query -SELECT - isDistinctFrom(1, 2) AS result_1, - isDistinctFrom(1, 1) AS result_2, - isDistinctFrom(NULL, 1) AS result_3, - isDistinctFrom(NULL, NULL) AS result_4 -``` - -```response title=Response -┌─result_1─┬─result_2─┬─result_3─┬─result_4─┐ -│ 1 │ 0 │ 1 │ 0 │ -└──────────┴──────────┴──────────┴──────────┘ -``` - - -## isNotDistinctFrom - -導入バージョン: v25.9 - -2 つの値に対して、NULL セーフな「等価」比較を実行します。 -両方が NULL の場合を含め、値が等しいときは `true` を返します。 -値が異なる場合、または片方のみが NULL の場合は `false` を返します。 - -**構文** - -```sql -isNotDistinctFrom(x, y) -``` - -**引数** - -* `x` — 比較する1つ目の値。任意の ClickHouse データ型を指定できます。[`Any`](/sql-reference/data-types) -* `y` — 比較する2つ目の値。任意の ClickHouse データ型を指定できます。[`Any`](/sql-reference/data-types) - -**戻り値** - -2つの値が等しい場合に `true` を返します。NULL も比較可能な値として扱います。 - -* x = y の場合、`true` を返します。 -* x と y が両方とも NULL の場合、`true` を返します。 -* x != y の場合、または x と y のどちらか一方のみが NULL の場合、`false` を返します。[`Bool`](/sql-reference/data-types/boolean) - -**例** - -**数値と NULL を使った基本的な使用例** - -```sql title=Query -SELECT - isNotDistinctFrom(1, 1) AS result_1, - isNotDistinctFrom(1, 2) AS result_2, - isNotDistinctFrom(NULL, NULL) AS result_3, - isNotDistinctFrom(NULL, 1) AS result_4 -``` - -```response title=Response -┌─result_1─┬─result_2─┬─result_3─┬─result_4─┐ -│ 1 │ 0 │ 1 │ 0 │ -└──────────┴──────────┴──────────┴──────────┘ -``` - - -## less - -導入バージョン: v1.1 - -2 つの値を比較し、一方が他方より小さいかどうかを判定します。 - -**構文** - -```sql -less(a, b) - -- a < b -``` - -**引数** - -* `a` — 1 番目の値。[*](#comparison-rules) - `b` — 2 番目の値。[*](#comparison-rules) - -**戻り値** - -`a` が `b` より小さい場合は `1`、それ以外の場合は `0`([`UInt8`](/sql-reference/data-types/int-uint) 型)を返します。 - -**例** - -**使用例** - -```sql title=Query -SELECT 1 < 2, 2 < 1; -``` - -```response title=Response -┌─less(1, 2)─┬─less(2, 1)─┐ -│ 1 │ 0 │ -└────────────┴────────────┘ -``` - - -## lessOrEquals - -v1.1 で導入。 - -2つの値が「以下」の関係にあるかどうかを比較します。 - -**構文** - -```sql -lessOrEquals(a, b) --- a <= b -``` - -**引数** - -* `a` — 1つ目の値。[*](#comparison-rules) - `b` — 2つ目の値。[*](#comparison-rules) - -**返される値** - -`a` が `b` 以下の場合は `1` を返し、それ以外の場合は `0` を返します。戻り値の型は [`UInt8`](/sql-reference/data-types/int-uint) です。 - -**例** - -**使用例** - -```sql title=Query -SELECT 1 <= 2, 2 <= 2, 3 <= 2; -``` - -```response title=Response -┌─lessOrEquals(1, 2)─┬─lessOrEquals(2, 2)─┬─lessOrEquals(3, 2)─┐ -│ 1 │ 1 │ 0 │ -└────────────────────┴────────────────────┴────────────────────┘ -``` - - -## notEquals - -導入バージョン: v1.1 - -2 つの値が等しくないかどうかを判定します。 - -**構文** - -```sql -notEquals(a, b) - -- a != b - -- a <> b -``` - -**引数** - -* `a` — 1つ目の値。[*](#comparison-rules) - `b` — 2つ目の値。[*](#comparison-rules) - -**返り値** - -`a` が `b` と等しくない場合は `1`、それ以外の場合は `0` を返します([`UInt8`](/sql-reference/data-types/int-uint))。 - -**例** - -**使用例** - -```sql title=Query -SELECT 1 != 2, 1 != 1; -``` - -```response title=Response -┌─notEquals(1, 2)─┬─notEquals(1, 1)─┐ -│ 1 │ 0 │ -└─────────────────┴─────────────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/conditional-functions.md b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/conditional-functions.md index 766b32eb854..c3304401fa5 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/conditional-functions.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/conditional-functions.md @@ -1,22 +1,18 @@ --- -description: '条件付き関数のドキュメント' +description: '条件付き関数に関するドキュメント' sidebar_label: '条件' slug: /sql-reference/functions/conditional-functions title: '条件付き関数' -doc_type: 'reference' +doc_type: 'リファレンス' --- - - # 条件付き関数 +## 概要 {#overview} +### 条件式の結果を直接使用する -## 概要 - -### 条件式の結果を直接利用する - -条件式は常に `0`、`1`、または `NULL` を返します。そのため、次のように条件式の結果をそのまま利用できます。 +条件式は常に `0`、`1`、または `NULL` を返します。そのため、次のように条件式の結果を直接使用できます。 ```sql SELECT left < right AS is_small @@ -31,9 +27,10 @@ FROM LEFT_RIGHT └──────────┘ ``` + ### 条件式における NULL 値 -条件式に `NULL` 値が含まれている場合、その評価結果も `NULL` になります。 +条件式に `NULL` が含まれている場合、その評価結果も `NULL` になります。 ```sql SELECT @@ -47,9 +44,9 @@ SELECT └───────────────┴───────────────┴──────────────────┴────────────────────┘ ``` -そのため、型が `Nullable` の場合には、クエリを慎重に記述する必要があります。 +そのため、型が `Nullable` の場合はクエリを慎重に構築する必要があります。 -次の例は、`multiIf` に等値条件を追加していないために失敗することを示しています。 +次の例は、`multiIf` に等値条件を追加しなかったために失敗するケースを示しています。 ```sql SELECT @@ -67,15 +64,16 @@ FROM LEFT_RIGHT └──────┴───────┴──────────────────┘ ``` + ### CASE ステートメント ClickHouse の CASE 式は、SQL の CASE 演算子と同様の条件付きロジックを提供します。条件を評価し、最初に一致した条件に基づいて値を返します。 -ClickHouse は CASE 式の 2 つの形式をサポートします: +ClickHouse は 2 つの形式の CASE をサポートしています: 1. `CASE WHEN ... THEN ... ELSE ... END`
- この形式は柔軟性が高く、内部的には [multiIf](/sql-reference/functions/conditional-functions#multiIf) 関数を使って実装されています。各条件は独立して評価され、式には非定数値を含めることができます。 + この形式は柔軟に記述でき、内部的には [multiIf](/sql-reference/functions/conditional-functions#multiIf) 関数を使用して実装されています。各条件は独立して評価され、式には非定数値を含めることができます。 ```sql SELECT @@ -108,9 +106,9 @@ WHERE number < 5 2. `CASE WHEN THEN ... WHEN THEN ... ELSE ... END`
- このよりコンパクトな形式は定数値の一致に最適化されており、内部的には `caseWithExpression()` を使用します。 + このよりコンパクトな形式は、定数値との比較に最適化されており、内部的には `caseWithExpression()` を使用します。 -たとえば、次のような記述は有効です: +例えば、次の記述は有効です。 ```sql SELECT @@ -130,8 +128,6 @@ SELECT caseWithExpression(number, 0, 100, 1, 200, 0) AS result FROM system.numbers WHERE number < 3 -``` - ┌─number─┬─result─┐ │ 0 │ 100 │ @@ -139,11 +135,10 @@ WHERE number < 3 │ 2 │ 0 │ └────────┴────────┘ -3 行の結果。経過時間: 0.002 秒。 - -```` +3行のセット。経過時間: 0.002秒。 +``` -この形式では、返り値の式を定数にする必要はありません。 +この形式でも、戻り値式を定数にする必要はありません。 ```sql SELECT @@ -156,7 +151,7 @@ SELECT FROM system.numbers WHERE number < 3; --- 次のように変換されます +-- 以下のように変換されます SELECT number, @@ -170,18 +165,19 @@ WHERE number < 3 │ 2 │ 2 │ └────────┴──────────────────────────┘ -3行のセット。経過時間: 0.001秒。 -```` +3 rows in set. Elapsed: 0.001 sec. +``` + -#### 注意事項 +#### 注意点 -ClickHouse は、CASE 式(または `multiIf` のような、内部で同等の役割を果たすもの)の結果型を、どの条件も評価する前に決定します。これは、戻り値の式の型が異なる場合(異なるタイムゾーンや数値型など)に重要になります。 +ClickHouse は、CASE 式(`multiIf` などの内部的に同等な式を含む)について、条件を評価する前の段階で結果の型を決定します。これは、戻り値の式同士で型が異なる場合(異なるタイムゾーンや数値型など)に重要になります。 -* 結果型は、すべてのブランチの中で互換性のある「最大」の型に基づいて選択されます。 -* いったんこの型が選択されると、他のすべてのブランチは暗黙的にその型へキャストされます — たとえそのブランチの条件が実行時に一度も真にならない場合でも同様です。 -* DateTime64 のように、タイムゾーンが型シグネチャの一部になっている型においては、これが意外な動作につながることがあります。最初に出現したタイムゾーンが、他のブランチで異なるタイムゾーンを指定していても、すべてのブランチに対して使用されてしまう場合があります。 +* 結果の型は、すべての分岐の中で互換性のある型のうち最も「大きい」型に基づいて選択されます。 +* 一度この型が選択されると、他のすべての分岐は、その条件が実行時に決して真にならない場合でも、暗黙的にこの型へキャストされます。 +* DateTime64 のように、タイムゾーンが型シグネチャの一部になっている型では、これが予期しない挙動につながることがあります。最初に見つかったタイムゾーンがすべての分岐で使用されてしまい、他の分岐で異なるタイムゾーンを指定していてもそれが反映されない場合があります。 -たとえば、以下の例では、すべての行で最初にマッチしたブランチのタイムゾーン、すなわち `Asia/Kolkata` でのタイムスタンプが返されます。 +例えば、以下では、すべての行が最初にマッチした分岐のタイムゾーン、つまり `Asia/Kolkata` でタイムスタンプを返します。 ```sql SELECT @@ -208,12 +204,12 @@ WHERE number < 3 │ 2 │ 1970-01-01 05:30:00.000 │ └────────┴─────────────────────────┘ -3行のセット。経過時間: 0.011秒。 +3 rows in set. Elapsed: 0.011 sec. ``` -ここで、ClickHouse は複数の `DateTime64(3, )` の戻り値の型を認識します。最初に見つかったものとして共通型を `DateTime64(3, 'Asia/Kolkata'` と推論し、他の分岐も暗黙的にこの型にキャストします。 +ここでは、ClickHouse は複数の `DateTime64(3, )` の戻り値型を検出します。最初に見つかったものに基づき、共通の型を `DateTime64(3, 'Asia/Kolkata'` と推論し、他の分岐も暗黙的にこの型へキャストします。 -これは、意図したタイムゾーン表記を保持するために文字列に変換することで対処できます。 +これは、意図したタイムゾーンの書式を保持するために文字列へ変換することで対処できます。 ```sql SELECT @@ -226,15 +222,13 @@ SELECT FROM system.numbers WHERE number < 3; --- is translated to +-- 以下のように変換されます SELECT number, multiIf(number = 0, formatDateTime(fromUnixTimestamp64Milli(0), '%F %T', 'Asia/Kolkata'), number = 1, formatDateTime(fromUnixTimestamp64Milli(0), '%F %T', 'America/Los_Angeles'), formatDateTime(fromUnixTimestamp64Milli(0), '%F %T', 'UTC')) AS tz FROM system.numbers WHERE number < 3 -``` - ┌─number─┬─tz──────────────────┐ │ 0 │ 1970-01-01 05:30:00 │ @@ -242,334 +236,15 @@ WHERE number < 3 │ 2 │ 1970-01-01 00:00:00 │ └────────┴─────────────────────┘ -3 行の結果。経過時間: 0.002 秒. - -``` - - +3行のセット。経過時間: 0.002秒。 ``` +{/* + 以下のタグ内の内容は、ドキュメントフレームワークのビルド時に + system.functions から自動生成されたドキュメントで置き換えられます。タグを変更したり削除したりしないでください。 + 詳細は https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md を参照してください。 + */ } {/*AUTOGENERATED_START*/ } -## clamp - -導入バージョン: v24.5 - -値を指定された最小値と最大値の範囲内に制限します。 - -値が最小値より小さい場合は最小値を返します。値が最大値より大きい場合は最大値を返します。それ以外の場合は、元の値を返します。 - -すべての引数は相互に比較可能な型でなければなりません。結果の型は、すべての引数の中で互換性のある型のうち最も幅の広い型になります。 - -**構文** - -```sql -clamp(value, min, max) -``` - -**引数** - -* `value` — クランプする値。 - `min` — 最小値。 - `max` — 最大値。 - -**戻り値** - -値を `[min, max]` の範囲に収まるようにして返します。 - -**例** - -**基本的な使用例** - -```sql title=Query -SELECT clamp(5, 1, 10) AS result; -``` - -```response title=Response -┌─result─┐ -│ 5 │ -└────────┘ -``` - -**最小値未満** - -```sql title=Query -SELECT clamp(-3, 0, 7) AS result; -``` - -```response title=Response -┌─result─┐ -│ 0 │ -└────────┘ -``` - -**最大値を超えた値** - -```sql title=Query -SELECT clamp(15, 0, 7) AS result; -``` - -```response title=Response -┌─result─┐ -│ 7 │ -└────────┘ -``` - - -## greatest - -導入されたバージョン: v1.1 - -引数の中で最も大きい値を返します。 -`NULL` の引数は無視されます。 - -* 配列の場合、辞書順で最も大きい配列を返します。 -* `DateTime` 型の場合、結果の型は最も大きい型に昇格されます(例: `DateTime32` と混在する場合は `DateTime64`)。 - -:::note `NULL` の挙動を変更するには設定 `least_greatest_legacy_null_behavior` を使用する -バージョン [24.12](/whats-new/changelog/2024#a-id2412a-clickhouse-release-2412-2024-12-19) では後方互換性のない変更が導入され、`NULL` 値が無視されるようになりました。以前は、引数のいずれかが `NULL` の場合は `NULL` を返していました。 -以前の挙動を維持するには、設定 `least_greatest_legacy_null_behavior`(デフォルト: `false`)を `true` に設定してください。 -::: - -**構文** - -```sql -greatest(x1[, x2, ...]) -``` - -**引数** - -* `x1[, x2, ...]` — 比較する 1 つ以上の値。すべての引数は互いに比較可能な型である必要があります。[`Any`](/sql-reference/data-types) - -**返り値** - -引数の中で最大の値を返し、その値は互換性のある型のうち最大の型に昇格されます。[`Any`](/sql-reference/data-types) - -**例** - -**数値型** - -```sql title=Query -SELECT greatest(1, 2, toUInt8(3), 3.) AS result, toTypeName(result) AS type; --- 返される型はFloat64です。比較のためにUInt8を64ビットに昇格する必要があるためです。 -``` - -```response title=Response -┌─result─┬─type────┐ -│ 3 │ Float64 │ -└────────┴─────────┘ -``` - -**配列** - -```sql title=Query -SELECT greatest(['hello'], ['there'], ['world']); -``` - -```response title=Response -┌─greatest(['hello'], ['there'], ['world'])─┐ -│ ['world'] │ -└───────────────────────────────────────────┘ -``` - -**DateTime 型** - -```sql title=Query -SELECT greatest(toDateTime32(now() + toIntervalDay(1)), toDateTime64(now(), 3)); --- 返される型はDateTime64です。比較のためにDateTime32を64ビットに昇格する必要があるためです。 -``` - -```response title=Response -┌─greatest(toD⋯(now(), 3))─┐ -│ 2025-05-28 15:50:53.000 │ -└──────────────────────────┘ -``` - - -## if - -導入バージョン: v1.1 - -条件分岐を行います。 - -* 条件 `cond` が 0 以外の値に評価される場合、関数は式 `then` の結果を返します。 -* `cond` が 0 または NULL に評価される場合、`else` 式の結果を返します。 - -設定 [`short_circuit_function_evaluation`](/operations/settings/settings#short_circuit_function_evaluation) によって、ショートサーキット評価を使用するかどうかを制御できます。 - -有効にすると、`then` 式は `cond` が true の行でのみ評価され、`else` 式は `cond` が false の行でのみ評価されます。 - -例えば、ショートサーキット評価が有効な場合、次のクエリを実行してもゼロ除算の例外はスローされません。 - -```sql -SELECT if(number = 0, 0, intDiv(42, number)) FROM numbers(10) -``` - -`then` と `else` は同種の型でなければなりません。 - -**構文** - -```sql -if(cond, then, else) -``` - -**引数** - -* `cond` — 評価対象の条件。[`UInt8`](/sql-reference/data-types/int-uint) または [`Nullable(UInt8)`](/sql-reference/data-types/nullable) または [`NULL`](/sql-reference/syntax#null) -* `then` — `cond` が true の場合に返される式。`else` — `cond` が false または `NULL` の場合に返される式。 - -**戻り値** - -条件 `cond` に応じて、`then` または `else` のいずれかの式の結果が返されます。 - -**例** - -**使用例** - -```sql title=Query -SELECT if(1, 2 + 2, 2 + 6) AS res; -``` - -```response title=Response -┌─res─┐ -│ 4 │ -└─────┘ -``` - - -## least - -導入バージョン: v1.1 - -引数の中で最も小さい値を返します。 -`NULL` の引数は無視されます。 - -* 配列の場合、辞書順で最小の配列を返します。 -* DateTime 型の場合、結果の型はより大きい型に昇格します(例: DateTime32 と混在する場合は DateTime64)。 - -:::note `NULL` の動作を変更するには設定 `least_greatest_legacy_null_behavior` を使用する -バージョン [24.12](/whats-new/changelog/2024#a-id2412a-clickhouse-release-2412-2024-12-19) では、後方互換性のない変更として、`NULL` 値が無視されるようになりました。以前は、引数のいずれかが `NULL` の場合は `NULL` を返していました。 -以前の動作を維持するには、設定 `least_greatest_legacy_null_behavior`(デフォルト: `false`)を `true` に設定してください。 -::: - -**構文** - -```sql -least(x1[, x2, ...]) -``` - -**引数** - -* `x1[, x2, ...]` — 比較する 1 つ以上の値。すべての引数は比較可能な型でなければなりません。[`Any`](/sql-reference/data-types) - -**返される値** - -引数の中で最小の値を返し、その値は互換性のある型のうち最も広い型に昇格されます。[`Any`](/sql-reference/data-types) - -**例** - -**数値型** - -```sql title=Query -SELECT least(1, 2, toUInt8(3), 3.) AS result, toTypeName(result) AS type; --- 返される型はFloat64です。比較のためにUInt8を64ビットに昇格する必要があるためです。 -``` - -```response title=Response -┌─result─┬─type────┐ -│ 1 │ Float64 │ -└────────┴─────────┘ -``` - -**配列** - -```sql title=Query -SELECT least(['hello'], ['there'], ['world']); -``` - -```response title=Response -┌─least(['hell⋯ ['world'])─┐ -│ ['hello'] │ -└──────────────────────────┘ -``` - -**DateTime 型** - -```sql title=Query -SELECT least(toDateTime32(now() + toIntervalDay(1)), toDateTime64(now(), 3)); --- 返される型はDateTime64です。比較のためにDateTime32を64ビットに昇格する必要があるためです。 -``` - -```response title=Response -┌─least(toDate⋯(now(), 3))─┐ -│ 2025-05-27 15:55:20.000 │ -└──────────────────────────┘ -``` - - -## multiIf - -導入バージョン: v1.1 - -クエリ内で [`CASE`](/sql-reference/operators#conditional-expression) 演算子をより簡潔に記述できるようにします。 -条件を順番に評価し、最初に真(ゼロ以外かつ `NULL` でない)になった条件に対応するブランチ値を返します。 -いずれの条件も真にならない場合は、`else` の値を返します。 - -設定 [`short_circuit_function_evaluation`](/operations/settings/settings#short_circuit_function_evaluation) によって、 -短絡評価(ショートサーキット評価)を使用するかどうかを制御します。有効にすると、`then_i` 式は -`((NOT cond_1) AND ... AND (NOT cond_{i-1}) AND cond_i)` が真となる行でのみ評価されます。 - -たとえば、短絡評価が有効な場合、次のクエリを実行してもゼロ除算の例外は発生しません。 - -```sql -SELECT multiIf(number = 2, intDiv(1, number), number = 5) FROM numbers(10) -``` - -すべての分岐および `else` 式は、共通の上位型を持つ必要があります。`NULL` 条件は false として扱われます。 - -**構文** - -```sql -multiIf(cond_1, then_1, cond_2, then_2, ..., else) -``` - -**別名**: `caseWithoutExpression`, `caseWithoutExpr` - -**引数** - -* `cond_N` — `then_N` が返されるかどうかを制御する N 番目の条件。[`UInt8`](/sql-reference/data-types/int-uint) または [`Nullable(UInt8)`](/sql-reference/data-types/nullable) または [`NULL`](/sql-reference/syntax#null) -* `then_N` — `cond_N` が true の場合に関数が返す結果。`else` — いずれの条件も true でない場合に関数が返す結果。 - -**返される値** - -一致する `cond_N` に対する `then_N` の結果を返し、それ以外の場合は `else` の結果を返します。 - -**例** - -**使用例** - -```sql title=Query -CREATE TABLE LEFT_RIGHT (left Nullable(UInt8), right Nullable(UInt8)) ENGINE = Memory; -INSERT INTO LEFT_RIGHT VALUES (NULL, 4), (1, 3), (2, 2), (3, 1), (4, NULL); - -SELECT - left, - right, - multiIf(left < right, 'leftの方が小さい', left > right, 'leftの方が大きい', left = right, '両方とも等しい', 'NULL値') AS result -FROM LEFT_RIGHT; -``` - -```response title=Response -┌─left─┬─right─┬─result──────────┐ -│ ᴺᵁᴸᴸ │ 4 │ Null値 │ -│ 1 │ 3 │ leftが小さい │ -│ 2 │ 2 │ 両方とも等しい │ -│ 3 │ 1 │ leftが大きい │ -│ 4 │ ᴺᵁᴸᴸ │ Null値 │ -└──────┴───────┴─────────────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/date-time-functions.md b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/date-time-functions.md index aa6bc248f64..2530373cc4e 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/date-time-functions.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/date-time-functions.md @@ -1,16 +1,14 @@ --- -description: '日付と時刻を扱う関数のドキュメント' +description: '日付と時刻を扱う関数に関するドキュメント' sidebar_label: '日付と時刻' slug: /sql-reference/functions/date-time-functions title: '日付と時刻を扱う関数' doc_type: 'reference' --- - - # 日付と時刻を扱う関数 -このセクションのほとんどの関数は、`Europe/Amsterdam` のようなオプションのタイムゾーン引数を指定できます。この場合、ローカル(デフォルト)のタイムゾーンではなく、指定したタイムゾーンが使用されます。 +このセクションのほとんどの関数は、`Europe/Amsterdam` のようなオプションのタイムゾーン引数を受け付けます。この場合、タイムゾーンにはローカル(デフォルト)の代わりに、指定されたものが使用されます。 **例** @@ -29,5648 +27,11 @@ SELECT ``` {/* - 以下のタグ内の内容は、ドキュメントフレームワークのビルド時に - system.functions から自動生成されるドキュメントで置き換えられます。タグ自体は変更したり削除したりしないでください。 - 参照: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md + 以下のタグ内のコンテンツは、ドキュメントフレームワークのビルド時に + system.functions から自動生成されたドキュメントで置き換えられます。これらのタグを変更または削除しないでください。 + 詳細は次を参照してください: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## UTCTimestamp - -導入バージョン: v22.11 - -クエリ解析時点の現在の日時を返します。この関数は定数式として扱われます。 - -この関数は `now('UTC')` と同じ結果を返します。MySQL との互換性のためだけに追加されました。[`now`](#now) の利用が推奨されます。 - -**構文** - -```sql -UTCTimestamp() -``` - -**別名**: `UTC_timestamp` - -**引数** - -* なし。 - -**返り値** - -クエリ解析時点での現在の日時を返します。型は [`DateTime`](/sql-reference/data-types/datetime) です。 - -**使用例** - -**現在の UTC タイムスタンプを取得** - -```sql title=Query -SELECT UTCTimestamp() -``` - -```response title=Response -┌──────UTCTimestamp()─┐ -│ 2024-05-28 08:32:09 │ -└─────────────────────┘ -``` - - -## YYYYMMDDToDate - -導入バージョン: v23.9 - -年月日を表す数値を `Date` に変換します。 -この関数は、関数 [`toYYYYMMDD()`](/sql-reference/functions/date-time-functions#toYYYYMMDD) の逆にあたります。 -入力が有効な `Date` 値を表していない場合、出力は未定義です。 - -**構文** - -```sql -YYYYMMDDToDate(YYYYMMDD) -``` - -**引数** - -* `YYYYMMDD` — 年・月・日を表す数値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) - -**返り値** - -指定された引数から `Date` 型の値を返します。[`Date`](/sql-reference/data-types/date) - -**使用例** - -**例** - -```sql title=Query -SELECT YYYYMMDDToDate(20230911); -``` - -```response title=Response -┌─toYYYYMMDD(20230911)─┐ -│ 2023-09-11 │ -└──────────────────────┘ -``` - - -## YYYYMMDDToDate32 - -導入バージョン: v23.9 - -年月日を表す数値を `Date32` に変換します。 -この関数は、関数 [`toYYYYMMDD()`](/sql-reference/functions/date-time-functions#toYYYYMMDD) と逆の変換を行います。 -入力が有効な `Date32` 値を表していない場合、出力は未定義です。 - -**構文** - -```sql -YYYYMMDDToDate32(YYYYMMDD) -``` - -**引数** - -* `YYYYMMDD` — 年、月、日を表す数値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) - -**戻り値** - -指定された引数から `Date32` 型の値を返します。[`Date32`](/sql-reference/data-types/date32) - -**使用例** - -**例** - -```sql title=Query -SELECT YYYYMMDDToDate32(20000507); -``` - -```response title=Response -┌─YYYYMMDDToDate32(20000507)─┐ -│ 2000-05-07 │ -└────────────────────────────┘ -``` - - -## YYYYMMDDhhmmssToDateTime - -導入: v23.9 - -年、月、日、時、分、秒を表す数値を `DateTime` に変換します。 -この関数は、関数 [`toYYYYMMDDhhmmss()`](/sql-reference/functions/date-time-functions#toYYYYMMDDhhmmss) と逆の変換を行います。 -入力が有効な `DateTime` 値をエンコードしていない場合、出力は未定義です。 - -**構文** - -```sql -YYYYMMDDhhmmssToDateTime(YYYYMMDDhhmmss[, timezone]) -``` - -**引数** - -* `YYYYMMDDhhmmss` — 年、月、日、時、分、秒を含む数値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) -* `timezone` — タイムゾーン名。[`String`](/sql-reference/data-types/string) - -**戻り値** - -指定された引数から `DateTime` の値を返します。[`DateTime`](/sql-reference/data-types/datetime) - -**使用例** - -**例** - -```sql title=Query -SELECT YYYYMMDDToDateTime(20230911131415); -``` - -```response title=Response -┌──────YYYYMMDDhhmmssToDateTime(20230911131415)─┐ -│ 2023-09-11 13:14:15 │ -└───────────────────────────────────────────────┘ -``` - - -## YYYYMMDDhhmmssToDateTime64 - -導入バージョン: v23.9 - -年・月・日・時・分・秒を含む数値を `DateTime64` に変換します。 -この関数は、関数 [`toYYYYMMDDhhmmss()`](/sql-reference/functions/date-time-functions#toYYYYMMDDhhmmss) の逆にあたる関数です。 -入力が有効な `DateTime64` 値を表していない場合、出力は未定義です。 - -**構文** - -```sql -YYYYMMDDhhmmssToDateTime64(YYYYMMDDhhmmss[, precision[, timezone]]) -``` - -**引数** - -* `YYYYMMDDhhmmss` — 年、月、日、時、分、秒を含む数値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) -* `precision` — 小数部の桁数 (0-9)。[`UInt8`](/sql-reference/data-types/int-uint) -* `timezone` — タイムゾーン名。[`String`](/sql-reference/data-types/string) - -**返される値** - -指定された引数から `DateTime64` 値を生成して返します。[`DateTime64`](/sql-reference/data-types/datetime64) - -**使用例** - -**例** - -```sql title=Query -SELECT YYYYMMDDhhmmssToDateTime64(20230911131415, 3, 'Asia/Istanbul'); -``` - -```response title=Response -┌─YYYYMMDDhhmm⋯/Istanbul')─┐ -│ 2023-09-11 13:14:15.000 │ -└──────────────────────────┘ -``` - - -## addDate - -導入バージョン: v23.9 - -指定された `Date`、日時、または文字列表現の `Date` もしくは日時に時間間隔を加算します。 -加算結果がデータ型の範囲外になる場合、その結果は未定義です。 - -**構文** - -```sql -addDate(datetime, interval) -``` - -**引数** - -* `datetime` — `interval` を加算する対象となる日付または日時。[`Date`](/sql-reference/data-types/date)、[`Date32`](/sql-reference/data-types/date32)、[`DateTime`](/sql-reference/data-types/datetime)、[`DateTime64`](/sql-reference/data-types/datetime64)、または [`String`](/sql-reference/data-types/string) -* `interval` — 加算する時間間隔。[`Interval`](/sql-reference/data-types/int-uint) - -**戻り値** - -`datetime` に `interval` を加算して得られる日付または日時を返します。[`Date`](/sql-reference/data-types/date)、[`Date32`](/sql-reference/data-types/date32)、[`DateTime`](/sql-reference/data-types/datetime)、または [`DateTime64`](/sql-reference/data-types/datetime64) - -**例** - -**日付に interval を加算する** - -```sql title=Query -SELECT addDate(toDate('2018-01-01'), INTERVAL 3 YEAR) -``` - -```response title=Response -┌─addDate(toDa⋯valYear(3))─┐ -│ 2021-01-01 │ -└──────────────────────────┘ -``` - - -## addDays - -導入バージョン: v1.1 - -日付、日時、または文字列表現の日付/日時に、指定した日数を加算します。 - -**構文** - -```sql -addDays(datetime, num) -``` - -**引数** - -* `datetime` — 指定した日数を加算する対象の日付または日時。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) または [`String`](/sql-reference/data-types/string) -* `num` — 加算する日数。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) - -**戻り値** - -`datetime` に `num` 日を加算した値を返します。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) - -**例** - -**異なる日付型に日数を加算する** - -```sql title=Query -WITH - toDate('2024-01-01') AS date, - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - addDays(date, 5) AS add_days_with_date, - addDays(date_time, 5) AS add_days_with_date_time, - addDays(date_time_string, 5) AS add_days_with_date_time_string -``` - -```response title=Response -┌─add_days_with_date─┬─add_days_with_date_time─┬─add_days_with_date_time_string─┐ -│ 2024-01-06 │ 2024-01-06 00:00:00 │ 2024-01-06 00:00:00.000 │ -└────────────────────┴─────────────────────────┴────────────────────────────────┘ -``` - -**別の INTERVAL 構文の使用** - -```sql title=Query -SELECT dateAdd('1998-06-16'::Date, INTERVAL 10 day) -``` - -```response title=Response -┌─plus(CAST('1⋯valDay(10))─┐ -│ 1998-06-26 │ -└──────────────────────────┘ -``` - - -## addHours - -導入バージョン: v1.1 - -指定した時間を、日付、日時、または文字列として表現された日付・日時に加算します。 - -**構文** - -```sql -addHours(datetime, num) -``` - -**引数** - -* `datetime` — 指定した時間を加算する対象の日付または日時。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) または [`String`](/sql-reference/data-types/string) -* `num` — 加算する時間数。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) - -**戻り値** - -`datetime` に `num` 時間を加算した値を返す。型は [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64(3)`](/sql-reference/data-types/datetime64)。 - -**例** - -**異なる日付型に時間を加算する** - -```sql title=Query -WITH - toDate('2024-01-01') AS date, - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - addHours(date, 12) AS add_hours_with_date, - addHours(date_time, 12) AS add_hours_with_date_time, - addHours(date_time_string, 12) AS add_hours_with_date_time_string -``` - -```response title=Response -┌─add_hours_with_date─┬─add_hours_with_date_time─┬─add_hours_with_date_time_string─┐ -│ 2024-01-01 12:00:00 │ 2024-01-01 12:00:00 │ 2024-01-01 12:00:00.000 │ -└─────────────────────┴──────────────────────────┴─────────────────────────────────┘ -``` - -**別の INTERVAL 構文の利用** - -```sql title=Query -SELECT dateAdd('1998-06-16'::Date, INTERVAL 10 hour) -``` - -```response title=Response -┌─plus(CAST('1⋯alHour(10))─┐ -│ 1998-06-16 10:00:00 │ -└──────────────────────────┘ -``` - - -## addInterval - -導入バージョン: v22.11 - -あるインターバル、またはインターバルのタプルに別のインターバルを加算します。 - -:::note -同じ種類のインターバルは単一のインターバルにまとめられます。たとえば `toIntervalDay(1)` と `toIntervalDay(2)` が渡された場合、結果は `(1,1)` ではなく `(3)` になります。 -::: - -**構文** - -```sql -addInterval(interval_1, interval_2) -``` - -**引数** - -* `interval_1` — 最初の `Interval`、または `Interval` のタプル。[`Interval`](/sql-reference/data-types/int-uint) または [`Tuple(Interval)`](/sql-reference/data-types/tuple) -* `interval_2` — 加算する 2 番目の `Interval`。[`Interval`](/sql-reference/data-types/int-uint) - -**戻り値** - -`Interval` のタプル [`Tuple(Interval)`](/sql-reference/data-types/tuple) を返します。 - -**例** - -**Interval を加算する** - -```sql title=Query -SELECT addInterval(INTERVAL 1 DAY, INTERVAL 1 MONTH); -SELECT addInterval((INTERVAL 1 DAY, INTERVAL 1 YEAR), INTERVAL 1 MONTH); -SELECT addInterval(INTERVAL 2 DAY, INTERVAL 1 DAY) -``` - -```response title=Response -┌─addInterval(toIntervalDay(1), toIntervalMonth(1))─┐ -│ (1,1) │ -└───────────────────────────────────────────────────┘ -┌─addInterval((toIntervalDay(1), toIntervalYear(1)), toIntervalMonth(1))─┐ -│ (1,1,1) │ -└────────────────────────────────────────────────────────────────────────┘ -┌─addInterval(toIntervalDay(2), toIntervalDay(1))─┐ -│ (3) │ -└─────────────────────────────────────────────────┘ -``` - - -## addMicroseconds - -導入バージョン: v22.6 - -指定された数のマイクロ秒を、日時型または文字列表現の日時に加算します。 - -**構文** - -```sql -addMicroseconds(datetime, num) -``` - -**引数** - -* `datetime` — 指定したマイクロ秒数を加算する日付と時刻。[`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) または [`String`](/sql-reference/data-types/string) -* `num` — 加算するマイクロ秒数。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) - -**戻り値** - -`date_time` に `num` マイクロ秒を加算した値を返す。戻り値の型は [`DateTime64`](/sql-reference/data-types/datetime64) - -**使用例** - -**異なる日時型にマイクロ秒を加算する** - -```sql title=Query -WITH - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - addMicroseconds(date_time, 1000000) AS add_microseconds_with_date_time, - addMicroseconds(date_time_string, 1000000) AS add_microseconds_with_date_time_string -``` - -```response title=Response -┌─add_microseconds_with_date_time─┬─add_microseconds_with_date_time_string─┐ -│ 2024-01-01 00:00:01.000000 │ 2024-01-01 00:00:01.000000 │ -└─────────────────────────────────┴────────────────────────────────────────┘ -``` - -**代替の INTERVAL 構文を使用する** - -```sql title=Query -SELECT dateAdd('1998-06-16'::DateTime, INTERVAL 10 microsecond) -``` - -```response title=Response -┌─plus(CAST('19⋯osecond(10))─┐ -│ 1998-06-16 00:00:00.000010 │ -└────────────────────────────┘ -``` - - -## addMilliseconds - -導入バージョン: v22.6 - -日付時刻の値、または日付時刻を表す文字列に、指定したミリ秒数を加算します。 - -**構文** - -```sql -addMilliseconds(datetime, num) -``` - -**引数** - -* `datetime` — 指定したミリ秒数を加算する日時。[`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) または [`String`](/sql-reference/data-types/string) -* `num` — 加算するミリ秒数。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) - -**返り値** - -`datetime` に `num` ミリ秒を加算した [`DateTime64`](/sql-reference/data-types/datetime64) を返します。 - -**例** - -**異なる日付時刻データ型にミリ秒を加算する** - -```sql title=Query -WITH - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - addMilliseconds(date_time, 1000) AS add_milliseconds_with_date_time, - addMilliseconds(date_time_string, 1000) AS add_milliseconds_with_date_time_string -``` - -```response title=Response -┌─add_milliseconds_with_date_time─┬─add_milliseconds_with_date_time_string─┐ -│ 2024-01-01 00:00:01.000 │ 2024-01-01 00:00:01.000 │ -└─────────────────────────────────┴────────────────────────────────────────┘ -``` - -**別の INTERVAL 構文を使用する** - -```sql title=Query -SELECT dateAdd('1998-06-16'::DateTime, INTERVAL 10 millisecond) -``` - -```response title=Response -┌─plus(CAST('1⋯second(10))─┐ -│ 1998-06-16 00:00:00.010 │ -└──────────────────────────┘ -``` - - -## addMinutes - -導入バージョン: v1.1 - -指定した分数を、日付、日時、または文字列として表現された日付/日時に加算します。 - -**構文** - -```sql -addMinutes(datetime, num) -``` - -**引数** - -* `datetime` — 分を加算する対象の日付または日時。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) または [`String`](/sql-reference/data-types/string) -* `num` — 加算する分の数値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) - -**戻り値** - -`datetime` に `num` 分を加算した値を返します。戻り値の型は [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64(3)`](/sql-reference/data-types/datetime64) です。 - -**使用例** - -**異なる日付型に分を加算する** - -```sql title=Query -WITH - toDate('2024-01-01') AS date, - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - addMinutes(date, 20) AS add_minutes_with_date, - addMinutes(date_time, 20) AS add_minutes_with_date_time, - addMinutes(date_time_string, 20) AS add_minutes_with_date_time_string -``` - -```response title=Response -┌─add_minutes_with_date─┬─add_minutes_with_date_time─┬─add_minutes_with_date_time_string─┐ -│ 2024-01-01 00:20:00 │ 2024-01-01 00:20:00 │ 2024-01-01 00:20:00.000 │ -└───────────────────────┴────────────────────────────┴───────────────────────────────────┘ -``` - -**代替の INTERVAL 構文の使用** - -```sql title=Query -SELECT dateAdd('1998-06-16'::Date, INTERVAL 10 minute) -``` - -```response title=Response -┌─plus(CAST('1⋯Minute(10))─┐ -│ 1998-06-16 00:10:00 │ -└──────────────────────────┘ -``` - - -## addMonths - -導入バージョン: v1.1 - -日付、日時、または文字列として表現された日付・日時に、指定した月数を追加します。 - -**構文** - -```sql -addMonths(datetime, num) -``` - -**引数** - -* `datetime` — 指定した月数を加算する対象の日付または日時。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) または [`String`](/sql-reference/data-types/string) -* `num` — 加算する月数。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) - -**戻り値** - -`datetime` に `num` か月を加算した値を返します。型は [`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) です。 - -**例** - -**異なる日付型に対して月数を加算する** - -```sql title=Query -WITH - toDate('2024-01-01') AS date, - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - addMonths(date, 6) AS add_months_with_date, - addMonths(date_time, 6) AS add_months_with_date_time, - addMonths(date_time_string, 6) AS add_months_with_date_time_string -``` - -```response title=Response -┌─add_months_with_date─┬─add_months_with_date_time─┬─add_months_with_date_time_string─┐ -│ 2024-07-01 │ 2024-07-01 00:00:00 │ 2024-07-01 00:00:00.000 │ -└──────────────────────┴───────────────────────────┴──────────────────────────────────┘ -``` - -**代替の INTERVAL 構文を使用する** - -```sql title=Query -SELECT dateAdd('1998-06-16'::Date, INTERVAL 10 month) -``` - -```response title=Response -┌─plus(CAST('1⋯lMonth(10))─┐ -│ 1999-04-16 │ -└──────────────────────────┘ -``` - - -## addNanoseconds - -導入バージョン: v22.6 - -日時、または文字列で表現された日時に、指定したナノ秒数を加算します。 - -**構文** - -```sql -addNanoseconds(datetime, num) -``` - -**引数** - -* `datetime` — 指定したナノ秒数を加算する日付と時刻。[`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) または [`String`](/sql-reference/data-types/string) -* `num` — 加算するナノ秒数。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) - -**返される値** - -`datetime` に `num` ナノ秒を加算した値を返します([`DateTime64`](/sql-reference/data-types/datetime64))。 - -**使用例** - -**異なる日時型にナノ秒を加算する** - -```sql title=Query -WITH - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - addNanoseconds(date_time, 1000) AS add_nanoseconds_with_date_time, - addNanoseconds(date_time_string, 1000) AS add_nanoseconds_with_date_time_string -``` - -```response title=Response -┌─add_nanoseconds_with_date_time─┬─add_nanoseconds_with_date_time_string─┐ -│ 2024-01-01 00:00:00.000001000 │ 2024-01-01 00:00:00.000001000 │ -└────────────────────────────────┴───────────────────────────────────────┘ -``` - -**別の INTERVAL 構文を使用する** - -```sql title=Query -SELECT dateAdd('1998-06-16'::DateTime, INTERVAL 1000 nanosecond) -``` - -```response title=Response -┌─plus(CAST('199⋯osecond(1000))─┐ -│ 1998-06-16 00:00:00.000001000 │ -└───────────────────────────────┘ -``` - - -## addQuarters - -導入されたバージョン: v20.1 - -日付、日時、または文字列表現の日付もしくは日時に、指定した数の四半期を加算します。 - -**構文** - -```sql -addQuarters(datetime, num) -``` - -**引数** - -* `datetime` — 指定した四半期数を加算する対象の日付または日時。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) または [`String`](/sql-reference/data-types/string) -* `num` — 加算する四半期の数。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) - -**戻り値** - -`datetime` に `num` 四半期を加算した値を返します。型は [`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) です。 - -**使用例** - -**異なる日付型に四半期を加算する** - -```sql title=Query -WITH - toDate('2024-01-01') AS date, - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - addQuarters(date, 1) AS add_quarters_with_date, - addQuarters(date_time, 1) AS add_quarters_with_date_time, - addQuarters(date_time_string, 1) AS add_quarters_with_date_time_string -``` - -```response title=Response -┌─add_quarters_with_date─┬─add_quarters_with_date_time─┬─add_quarters_with_date_time_string─┐ -│ 2024-04-01 │ 2024-04-01 00:00:00 │ 2024-04-01 00:00:00.000 │ -└────────────────────────┴─────────────────────────────┴────────────────────────────────────┘ -``` - -**代替の INTERVAL 構文の使用** - -```sql title=Query -SELECT dateAdd('1998-06-16'::Date, INTERVAL 10 quarter) -``` - -```response title=Response -┌─plus(CAST('1⋯uarter(10))─┐ -│ 2000-12-16 │ -└──────────────────────────┘ -``` - - -## addSeconds - -導入バージョン: v1.1 - -日付、日時、または文字列形式の日付・日時に、指定した秒数を加算します。 - -**構文** - -```sql -addSeconds(datetime, num) -``` - -**引数** - -* `datetime` — 指定した秒数を加算する対象の日付または日時。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) または [`String`](/sql-reference/data-types/string) -* `num` — 加算する秒数。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) - -**戻り値** - -`datetime` に `num` 秒を加算した値を返す。型は [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64(3)`](/sql-reference/data-types/datetime64) となる。 - -**使用例** - -**さまざまな日付型に秒を加算する** - -```sql title=Query -WITH - toDate('2024-01-01') AS date, - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - addSeconds(date, 30) AS add_seconds_with_date, - addSeconds(date_time, 30) AS add_seconds_with_date_time, - addSeconds(date_time_string, 30) AS add_seconds_with_date_time_string -``` - -```response title=Response -┌─add_seconds_with_date─┬─add_seconds_with_date_time─┬─add_seconds_with_date_time_string─┐ -│ 2024-01-01 00:00:30 │ 2024-01-01 00:00:30 │ 2024-01-01 00:00:30.000 │ -└───────────────────────┴────────────────────────────┴───────────────────────────────────┘ -``` - -**代替の INTERVAL 構文の使用** - -```sql title=Query -SELECT dateAdd('1998-06-16'::Date, INTERVAL 10 second) -``` - -```response title=Response -┌─dateAdd('1998-06-16'::Date, INTERVAL 10 second)─┐ -│ 1998-06-16 00:00:10 │ -└─────────────────────────────────────────────────┘ -``` - - -## addTupleOfIntervals - -導入バージョン: v22.11 - -日付または日時に、タプルで指定された複数のインターバルを順番に加算します。 - -**構文** - -```sql -addTupleOfIntervals(datetime, intervals) -``` - -**引数** - -* `datetime` — インターバルを加算する対象の日付または日時値。[`Date`](/sql-reference/data-types/date)、[`Date32`](/sql-reference/data-types/date32)、[`DateTime`](/sql-reference/data-types/datetime)、[`DateTime64`](/sql-reference/data-types/datetime64) のいずれか。 -* `intervals` — `datetime` に加算するインターバルのタプル。[`Tuple(Interval)`](/sql-reference/data-types/tuple) - -**戻り値** - -`intervals` を加算した `date` を返す。型は [`Date`](/sql-reference/data-types/date)、[`Date32`](/sql-reference/data-types/date32)、[`DateTime`](/sql-reference/data-types/datetime)、[`DateTime64`](/sql-reference/data-types/datetime64) のいずれか。 - -**例** - -**タプルで指定したインターバルを日付に加算する** - -```sql title=Query -WITH toDate('2018-01-01') AS date -SELECT addTupleOfIntervals(date, (INTERVAL 1 DAY, INTERVAL 1 MONTH, INTERVAL 1 YEAR)) -``` - -```response title=Response -┌─addTupleOfIntervals(date, (toIntervalDay(1), toIntervalMonth(1), toIntervalYear(1)))─┐ -│ 2019-02-02 │ -└──────────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## addWeeks - -導入バージョン: v1.1 - -指定した週数を、日付、日時、または文字列でエンコードされた日付または日時に加算します。 - -**構文** - -```sql -addWeeks(datetime, num) -``` - -**引数** - -* `datetime` — 指定した週数を加算する対象の日付または日時。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) または [`String`](/sql-reference/data-types/string) -* `num` — 加算する週数。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) - -**返される値** - -`datetime` に `num` 週を加算した値を返す。型は [`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) です。 - -**例** - -**さまざまな日付型への週の加算** - -```sql title=Query -WITH - toDate('2024-01-01') AS date, - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - addWeeks(date, 5) AS add_weeks_with_date, - addWeeks(date_time, 5) AS add_weeks_with_date_time, - addWeeks(date_time_string, 5) AS add_weeks_with_date_time_string -``` - -```response title=Response -┌─add_weeks_with_date─┬─add_weeks_with_date_time─┬─add_weeks_with_date_time_string─┐ -│ 2024-02-05 │ 2024-02-05 00:00:00 │ 2024-02-05 00:00:00.000 │ -└─────────────────────┴──────────────────────────┴─────────────────────────────────┘ -``` - -**代替の INTERVAL 構文を使用する** - -```sql title=Query -SELECT dateAdd('1998-06-16'::Date, INTERVAL 10 week) -``` - -```response title=Response -┌─plus(CAST('1⋯alWeek(10))─┐ -│ 1998-08-25 │ -└──────────────────────────┘ -``` - - -## addYears - -導入バージョン: v1.1 - -日付、日時、または文字列表現の日付・日時に指定した年数を加算します。 - -**構文** - -```sql -addYears(datetime, num) -``` - -**引数** - -* `datetime` — 指定した年数を加算する対象の日付または日時。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) または [`String`](/sql-reference/data-types/string) -* `num` — 加算する年数。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) - -**戻り値** - -`datetime` に `num` 年を加算した値を返します。型は [`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) です。 - -**使用例** - -**異なる日付型に年を加算する** - -```sql title=Query -WITH - toDate('2024-01-01') AS date, - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - addYears(date, 1) AS add_years_with_date, - addYears(date_time, 1) AS add_years_with_date_time, - addYears(date_time_string, 1) AS add_years_with_date_time_string -``` - -```response title=Response -┌─add_years_with_date─┬─add_years_with_date_time─┬─add_years_with_date_time_string─┐ -│ 2025-01-01 │ 2025-01-01 00:00:00 │ 2025-01-01 00:00:00.000 │ -└─────────────────────┴──────────────────────────┴─────────────────────────────────┘ -``` - -**別の INTERVAL 構文の利用** - -```sql title=Query -SELECT dateAdd('1998-06-16'::Date, INTERVAL 10 year) -``` - -```response title=Response -┌─plus(CAST('1⋯alYear(10))─┐ -│ 2008-06-16 │ -└──────────────────────────┘ -``` - - -## age - -導入バージョン: v23.1 - -`startdate` と `enddate` の差分のうち、指定した単位の値を返します。 -差分は 1 ナノ秒の精度で計算されます。 - -例えば、2021-12-29 と 2022-01-01 の差分は、日単位では 3 日、 -月単位では 0 か月、年単位では 0 年です。 - -`age` の代替としては、[`dateDiff`](#dateDiff) 関数を参照してください。 - -**構文** - -```sql -age('unit', startdate, enddate[, timezone]) -``` - -**引数** - -* `unit` — 結果の間隔の単位。 - -| Unit | 使用可能な値 | -| ----------- | ---------------------------------------- | -| nanosecond | `nanosecond`, `nanoseconds`, `ns` | -| microsecond | `microsecond`, `microseconds`, `us`, `u` | -| millisecond | `millisecond`, `milliseconds`, `ms` | -| second | `second`, `seconds`, `ss`, `s` | -| minute | `minute`, `minutes`, `mi`, `n` | -| hour | `hour`, `hours`, `hh`, `h` | -| day | `day`, `days`, `dd`, `d` | -| week | `week`, `weeks`, `wk`, `ww` | -| month | `month`, `months`, `mm`, `m` | -| quarter | `quarter`, `quarters`, `qq`, `q` | -| year | `year`, `years`, `yyyy`, `yy` | - -* `startdate` — 減算される最初の時刻値(減数)。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) -* `enddate` — 減算の基準となる 2 番目の時刻値(被減数)。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) -* `timezone` — 省略可能。タイムゾーン名。指定された場合、`startdate` と `enddate` の両方に適用されます。指定されていない場合は、`startdate` と `enddate` に設定されているタイムゾーンが使用されます。それらが同一でない場合、結果は未定義となります。[`String`](/sql-reference/data-types/string) - -**戻り値** - -`enddate` と `startdate` の差を `unit` で表した値を返します。[`Int32`](/sql-reference/data-types/int-uint) - -**使用例** - -**時間単位で年齢を計算する** - -```sql title=Query -SELECT age('hour', toDateTime('2018-01-01 22:30:00'), toDateTime('2018-01-02 23:00:00')) -``` - -```response title=Response -┌─age('hour', toDateTime('2018-01-01 22:30:00'), toDateTime('2018-01-02 23:00:00'))─┐ -│ 24 │ -└───────────────────────────────────────────────────────────────────────────────────┘ -``` - -**年齢を異なる単位で計算する** - -```sql title=Query -SELECT - toDate('2022-01-01') AS e, - toDate('2021-12-29') AS s, - age('day', s, e) AS day_age, - age('month', s, e) AS month_age, - age('year', s, e) AS year_age -``` - -```response title=Response -┌──────────e─┬──────────s─┬─day_age─┬─month_age─┬─year_age─┐ -│ 2022-01-01 │ 2021-12-29 │ 3 │ 0 │ 0 │ -└────────────┴────────────┴─────────┴───────────┴──────────┘ -``` - - -## changeDay - -導入バージョン: v24.7 - -日付または日時の「日」要素を変更します。 - -**構文** - -```sql -changeDay(date_or_datetime, value) -``` - -**引数** - -* `date_or_datetime` — 変更対象の値。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) -* `value` — 新しい値。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返り値** - -`date_or_datetime` と同じ型で、日の要素が変更された値を返します。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) - -**例** - -**使用例** - -```sql title=Query -SELECT changeDay('2024-01-31'::DateTime, 15) -``` - -```response title=Response -2024-01-15 00:00:00 -``` - - -## changeHour - -導入バージョン: v24.7 - -日付または日時の時の部分を変更します。 - -**構文** - -```sql -changeHour(date_or_datetime, value) -``` - -**引数** - -* `date_or_datetime` — 変更対象の値。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) -* `value` — 新しい値。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返り値** - -`date_or_datetime` と同じ型で、時刻の「時」コンポーネントを変更した値を返します。[`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) - -**例** - -**使用例** - -```sql title=Query -SELECT changeHour('2024-01-01 12:00:00'::DateTime, 5) -``` - -```response title=Response -2024-01-01 05:00:00 -``` - - -## changeMinute - -導入バージョン: v24.7 - -`Date` または `DateTime` の分の値を変更します。 - -**構文** - -```sql -changeMinute(date_or_datetime, value) -``` - -**引数** - -* `date_or_datetime` — 変更対象の値。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) -* `value` — 新しい値。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返される値** - -`date_or_datetime` と同じ型で、分の値を変更したものを返します。[`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) - -**例** - -**使用例** - -```sql title=Query -SELECT changeMinute('2024-01-01 12:30:00'::DateTime, 45) -``` - -```response title=Response -2024-01-01 12:45:00 -``` - - -## changeMonth - -導入バージョン: v24.7 - -日付または日時の月の値を変更します。 - -**構文** - -```sql -changeMonth(date_or_datetime, value) -``` - -**引数** - -* `date_or_datetime` — 変更対象の値。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) -* `value` — 新しい値。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返される値** - -`date_or_datetime` と同じ型で、月の部分が変更された値を返します。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) - -**例** - -**使用例** - -```sql title=Query -SELECT changeMonth('2024-01-01'::DateTime, 12) -``` - -```response title=Response -2024-12-01 00:00:00 -``` - - -## changeSecond - -導入バージョン: v24.7 - -日付または日時の秒の値を変更します。 - -**構文** - -```sql -changeSecond(date_or_datetime, value) -``` - -**引数** - -* `date_or_datetime` — 変更対象の値。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) -* `value` — 新しい値。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返される値** - -`date_or_datetime` と同じ型で、秒の部分が変更された値を返します。[`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) - -**例** - -**使用例** - -```sql title=Query -SELECT changeSecond('2024-01-01 12:30:45'::DateTime, 15) -``` - -```response title=Response -2024-01-01 12:30:15 -``` - - -## changeYear - -導入バージョン: v24.7 - -日付または日時の年の部分を変更します。 - -**構文** - -```sql -changeYear(date_or_datetime, value) -``` - -**引数** - -* `date_or_datetime` — 変更対象の値。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) -* `value` — 新しい値。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**戻り値** - -`date_or_datetime` と同じ型で、年の部分を変更した値を返します。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) - -**例** - -**使用例** - -```sql title=Query -SELECT changeYear('2024-01-01'::DateTime, 2023) -``` - -```response title=Response -2023-01-01 00:00:00 -``` - - -## dateDiff - -導入バージョン: v23.4 - -指定された `unit` の境界が、`startdate` から `enddate` までの間にいくつ跨いだかを返します。 -差分は相対単位を用いて計算されます。たとえば、2021-12-29 と 2022-01-01 の差分は、`unit` が `day` の場合は 3 日 -([`toRelativeDayNum`](#toRelativeDayNum) を参照)、`unit` が `month` の場合は 1 か月([`toRelativeMonthNum`](#toRelativeMonthNum) を参照)、`unit` が `year` の場合は 1 年 -([`toRelativeYearNum`](#toRelativeYearNum) を参照)となります。 - -`unit` に `week` が指定された場合、`dateDiff` は週の開始日を月曜日とみなします。 -この動作は、デフォルトで週の開始日を日曜日とする関数 `toWeek()` とは異なることに注意してください。 - -`dateDiff` の代替としては、関数 [`age`](#age) を参照してください。 - -**構文** - -```sql -dateDiff(unit, startdate, enddate[, timezone]) -``` - -**エイリアス**: `timestampDiff`, `TIMESTAMP_DIFF`, `DATE_DIFF`, `date_diff`, `timestamp_diff` - -**引数** - -* `unit` — 結果の単位となる間隔の種類。 - -| Unit | Possible values | -| ----------- | ---------------------------------------- | -| nanosecond | `nanosecond`, `nanoseconds`, `ns` | -| microsecond | `microsecond`, `microseconds`, `us`, `u` | -| millisecond | `millisecond`, `milliseconds`, `ms` | -| second | `second`, `seconds`, `ss`, `s` | -| minute | `minute`, `minutes`, `mi`, `n` | -| hour | `hour`, `hours`, `hh`, `h` | -| day | `day`, `days`, `dd`, `d` | -| week | `week`, `weeks`, `wk`, `ww` | -| month | `month`, `months`, `mm`, `m` | -| quarter | `quarter`, `quarters`, `qq`, `q` | -| year | `year`, `years`, `yyyy`, `yy` | - -* `startdate` — 減算される最初の時刻値(減数)。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) -* `enddate` — 減算の基準となる 2 番目の時刻値(被減数)。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) -* `timezone` — オプション。タイムゾーン名。指定された場合、`startdate` と `enddate` の両方に適用されます。指定されていない場合は、`startdate` と `enddate` のタイムゾーンが使用されます。それらが同一でない場合、結果は未定義です。[`String`](/sql-reference/data-types/string) - -**戻り値** - -`enddate` と `startdate` の差分を、`unit` で表して返します。[`Int64`](/sql-reference/data-types/int-uint) - -**例** - -**日付の差分を時間単位で計算する** - -```sql title=Query -SELECT dateDiff('hour', toDateTime('2018-01-01 22:00:00'), toDateTime('2018-01-02 23:00:00')) AS res -``` - -```response title=Response -┌─res─┐ -│ 25 │ -└─────┘ -``` - -**異なる単位で日付差を計算する** - -```sql title=Query -SELECT - toDate('2022-01-01') AS e, - toDate('2021-12-29') AS s, - dateDiff('day', s, e) AS day_diff, - dateDiff('month', s, e) AS month_diff, - dateDiff('year', s, e) AS year_diff -``` - -```response title=Response -┌──────────e─┬──────────s─┬─day_diff─┬─month_diff─┬─year_diff─┐ -│ 2022-01-01 │ 2021-12-29 │ 3 │ 1 │ 1 │ -└────────────┴────────────┴──────────┴────────────┴───────────┘ -``` - - -## dateName - -導入バージョン: v21.7 - -日付の指定した部分を返します。 - -指定可能な値: - -* 'year' -* 'quarter' -* 'month' -* 'week' -* 'dayofyear' -* 'day' -* 'weekday' -* 'hour' -* 'minute' -* 'second' - -**構文** - -```sql -dateName(date_part, date[, timezone]) -``` - -**引数** - -* `date_part` — 抽出したい日付要素。[`String`](/sql-reference/data-types/string) -* `datetime` — 日付、または日付と時刻の値。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) -* `timezone` — 省略可。タイムゾーン。[`String`](/sql-reference/data-types/string) - -**戻り値** - -指定した日付要素を返します。[`String`](/sql-reference/data-types/string) - -**使用例** - -**さまざまな日付要素を抽出する** - -```sql title=Query -WITH toDateTime('2021-04-14 11:22:33') AS date_value -SELECT - dateName('year', date_value), - dateName('month', date_value), - dateName('day', date_value) -``` - -```response title=Response -┌─dateName('year', date_value)─┬─dateName('month', date_value)─┬─dateName('day', date_value)─┐ -│ 2021 │ April │ 14 │ -└──────────────────────────────┴───────────────────────────────┴─────────────────────────────┘ -``` - - -## dateTrunc - -導入バージョン: v20.8 - -日付・時刻の値を、指定した日付要素まで切り捨てます。 - -**構文** - -```sql -dateTrunc(unit, datetime[, timezone]) -``` - -**別名**: `DATE_TRUNC` - -**引数** - -* `unit` — - 結果をどの単位で切り捨てるかを指定します。`unit` 引数は大文字・小文字を区別しません。 - | Unit | 互換性 | - | -------------------------------------------- | ---------------------- | - | `nanosecond` | DateTime64 とのみ互換性があります | - | `microsecond` | DateTime64 とのみ互換性があります | - | `millisecond` | DateTime64 とのみ互換性があります | - | `second` | | - | `minute` | | - | `hour` | | - | `day` | | - | `week` | | - | `month` | | - | `quarter` | | - | `year` | | - | [`String`](/sql-reference/data-types/string) | | -* `datetime` — 日付と時刻。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) -* `timezone` — 省略可能。返される日時のタイムゾーン名。指定されない場合、関数は `datetime` パラメータのタイムゾーンを使用します。[`String`](/sql-reference/data-types/string) - -**戻り値** - -切り捨て後の日付と時刻の値を返します。 - -| Unit 引数 | `datetime` 引数 | 戻り値の型 | -| -------------------------- | --------------------------------------------------- | --------------------------------------------------------------------------------------- | -| Year, Quarter, Month, Week | `Date32` または `DateTime64` または `Date` または `DateTime` | [`Date32`](../data-types/date32.md) または [`Date`](../data-types/date.md) | -| Day, Hour, Minute, Second | `Date32`, `DateTime64`, `Date`, または `DateTime` | [`DateTime64`](../data-types/datetime64.md) または [`DateTime`](../data-types/datetime.md) | -| Millisecond, Microsecond, | 任意 | [`DateTime64`](../data-types/datetime64.md) | -| Nanosecond | | スケール 3、6、または 9 | - -**例** - -**タイムゾーンを指定しない切り捨て** - -```sql title=Query -SELECT now(), dateTrunc('hour', now()); -``` - -```response title=Response -┌───────────────now()─┬─dateTrunc('hour', now())──┐ -│ 2020-09-28 10:40:45 │ 2020-09-28 10:00:00 │ -└─────────────────────┴───────────────────────────┘ -``` - -**指定したタイムゾーンで切り捨てを行う** - -```sql title=Query -SELECT now(), dateTrunc('hour', now(), 'Asia/Istanbul'); -``` - -```response title=Response -┌───────────────now()─┬─dateTrunc('hour', now(), 'Asia/Istanbul')──┐ -│ 2020-09-28 10:46:26 │ 2020-09-28 13:00:00 │ -└─────────────────────┴────────────────────────────────────────────┘ -``` - - -## formatDateTime - -導入バージョン: v1.1 - -指定されたフォーマット文字列に従って、日付または日時をフォーマットします。`format` は定数式であるため、1 つの結果カラムに複数のフォーマットを指定することはできません。 - -`formatDateTime` は MySQL の datetime フォーマットスタイルを使用します。詳細は [mysql docs](https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_date-format) を参照してください。 - -この関数の逆の操作は [`parseDateTime`](/sql-reference/functions/type-conversion-functions#parsedatetime) です。 - -置換フィールドを使用して、結果となる文字列のパターンを定義できます。 -下表の例カラムは、`2018-01-02 22:33:44` をフォーマットした結果を示しています。 - -**置換フィールド:** - -| プレースホルダー | 説明 | 例 | -| -------- | ------------------------------------- | ---------- | -| %a | 曜日の省略名 (Mon-Sun) | Mon | -| %b | 月の省略名 (Jan-Dec) | Jan | -| %c | 月を整数 (01-12) で表現 | 01 | -| %C | 年を 100 で割り、整数に切り捨てた値 (00-99) | 20 | -| %d | 月の日、ゼロ埋め (01-31) | 02 | -| %D | 短い MM/DD/YY 形式の日付、%m/%d/%y と同等 | 01/02/18 | -| %e | 月の日、スペース埋め (1-31) | 2 | -| %f | 秒未満の値 | 123456 | -| %F | 短い YYYY-MM-DD 形式の日付、%Y-%m-%d と同等 | 2018-01-02 | -| %g | ISO 8601 に合わせた 2 桁の年形式 | 18 | -| %G | ISO 週番号に対応する 4 桁の年形式 | 2018 | -| %h | 12 時間制の時 (01-12) | 09 | -| %H | 24 時間制の時 (00-23) | 22 | -| %i | 分 (00-59) | 33 | -| %I | 12 時間制の時 (01-12) | 10 | -| %j | 年内通算日 (001-366) | 002 | -| %k | 24 時間制の時 (00-23) | 14 | -| %l | 12 時間制の時 (01-12) | 09 | -| %m | 月を整数 (01-12) で表現 | 01 | -| %M | 月の完全名 (January-December) | January | -| %n | 改行文字 | | -| %p | AM または PM の指定 | PM | -| %Q | 四半期 (1-4) | 1 | -| %r | 12 時間制 HH:MM AM/PM 時刻、%h:%i %p と同等 | 10:30 PM | -| %R | 24 時間制 HH:MM 時刻、%H:%i と同等 | 22:33 | -| %s | 秒 (00-59) | 44 | -| %S | 秒 (00-59) | 44 | -| %t | 水平タブ文字 | | -| %T | ISO 8601 時刻形式 (HH:MM:SS)、%H:%i:%S と同等 | 22:33:44 | -| %u | 月曜日を 1 とする ISO 8601 の曜日番号 (1-7) | 2 | -| %V | ISO 8601 の週番号 (01-53) | 01 | -| %w | 日曜日を 0 とする曜日番号 (0-6) | 2 | -| %W | 曜日の完全名 (Monday-Sunday) | Monday | -| %y | 年の下 2 桁 (00-99) | 18 | -| %Y | 年 | 2018 | -| %z | UTC からの時差を +HHMM または -HHMM で表現 | -0500 | -| %% | % 記号 | % | - -* ClickHouse v23.4 より前のバージョンでは、`%f` はフォーマット対象が Date、Date32、DateTime (いずれも秒未満を持たない) または精度 0 の DateTime64 の場合、単一のゼロ (0) を出力します。 -* ClickHouse v25.1 より前のバージョンでは、`%f` は固定 6 桁ではなく、DateTime64 のスケールで指定された桁数を出力します。 -* ClickHouse v23.4 より前のバージョンでは、`%M` は月の完全名 (January-December) の代わりに分 (00-59) を出力します。 - -**構文** - -```sql -formatDateTime(datetime, format[, timezone]) -``` - -**エイリアス**: `DATE_FORMAT` - -**引数** - - -* `datetime` — フォーマットする日付または日時。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) -* `format` — 置換フィールドを含むフォーマット文字列。[`String`](/sql-reference/data-types/string) -* `timezone` — オプション。フォーマットされた時刻に使用するタイムゾーン名。[`String`](/sql-reference/data-types/string) - -**戻り値** - -指定したフォーマットに従って日付と時刻の値を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**年のプレースホルダーを使って日付をフォーマットする** - -```sql title=Query -SELECT formatDateTime(toDate('2010-01-04'), '%g') -``` - -```response title=Response -┌─formatDateTime(toDate('2010-01-04'), '%g')─┐ -│ 10 │ -└────────────────────────────────────────────┘ -``` - -**DateTime64 を小数秒付きでフォーマットする** - -```sql title=Query -SELECT formatDateTime(toDateTime64('2010-01-04 12:34:56.123456', 7), '%f') -``` - -```response title=Response -┌─formatDateTime(toDateTime64('2010-01-04 12:34:56.123456', 7), '%f')─┐ -│ 1234560 │ -└─────────────────────────────────────────────────────────────────────┘ -``` - -**タイムゾーン付きでのフォーマット** - -```sql title=Query -SELECT - now() AS ts, - time_zone, - formatDateTime(ts, '%T', time_zone) AS str_tz_time -FROM system.time_zones -WHERE time_zone LIKE 'Europe%' -LIMIT 10 -``` - -```response title=Response -┌──────────────────ts─┬─time_zone─────────┬─str_tz_time─┐ -│ 2023-09-08 19:13:40 │ Europe/Amsterdam │ 21:13:40 │ -│ 2023-09-08 19:13:40 │ Europe/Andorra │ 21:13:40 │ -│ 2023-09-08 19:13:40 │ Europe/Astrakhan │ 23:13:40 │ -│ 2023-09-08 19:13:40 │ Europe/Athens │ 22:13:40 │ -│ 2023-09-08 19:13:40 │ Europe/Belfast │ 20:13:40 │ -│ 2023-09-08 19:13:40 │ Europe/Belgrade │ 21:13:40 │ -│ 2023-09-08 19:13:40 │ Europe/Berlin │ 21:13:40 │ -│ 2023-09-08 19:13:40 │ Europe/Bratislava │ 21:13:40 │ -│ 2023-09-08 19:13:40 │ Europe/Brussels │ 21:13:40 │ -│ 2023-09-08 19:13:40 │ Europe/Bucharest │ 22:13:40 │ -└─────────────────────┴───────────────────┴─────────────┘ -``` - - -## formatDateTimeInJodaSyntax - -導入バージョン: v20.1 - -`formatDateTime` と似ていますが、日時を MySQL スタイルではなく Joda スタイルでフォーマットします。詳細は [Joda Time のドキュメント](https://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormat.html)を参照してください。 - -この関数の逆の処理は [`parseDateTimeInJodaSyntax`](/sql-reference/functions/type-conversion-functions#parsedatetimeinjodasyntax) です。 - -置換フィールドを使用して、出力される文字列のパターンを定義できます。 - -**置換フィールド:** - -| プレースホルダ | 説明 | 表現形式 | 例 | -| ---------- | ------------------- | ----- | -------------------------- | -| G | 時代 | テキスト | AD | -| C | 時代の世紀 (>=0) | 数値 | 20 | -| Y | 時代の年 (>=0) | 年 | 1996 | -| x | weekyear (未サポート) | 年 | 1996 | -| w | weekyear の週 (未サポート) | 数値 | 27 | -| e | 曜日 | 数値 | 2 | -| E | 曜日 | テキスト | Tuesday; Tue | -| y | 年 | 年 | 1996 | -| D | 年内通算日 | 数値 | 189 | -| M | 月 | 月 | July; Jul; 07 | -| d | 日 (月内通算日) | 数値 | 10 | -| a | 午前/午後 | テキスト | PM | -| K | 午前/午後内の時 (0~11) | 数値 | 0 | -| h | 午前/午後内の時計時刻 (1~12) | 数値 | 12 | -| H | 1 日の時 (0~23) | 数値 | 0 | -| k | 1 日の時計時刻 (1~24) | 数値 | 24 | -| m | 分 | 数値 | 30 | -| s | 秒 | 数値 | 55 | -| S | 秒の小数部 | 数値 | 978 | -| z | タイムゾーン | テキスト | Eastern Standard Time; EST | -| Z | タイムゾーンオフセット | ゾーン | -0800; -0812 | -| ' | テキストのエスケープ | 区切り記号 | | -| '' | シングルクォート | リテラル | ' | - -**構文** - -```sql -formatDateTimeInJodaSyntax(datetime, format[, timezone]) -``` - -**引数** - -* `datetime` — フォーマットする日付または日時。[`DateTime`](/sql-reference/data-types/datetime) または [`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime64`](/sql-reference/data-types/datetime64) -* `format` — Joda 形式の置換フィールドを含むフォーマット文字列。[`String`](/sql-reference/data-types/string) -* `timezone` — 省略可能。フォーマット対象の時刻に使用するタイムゾーン名。[`String`](/sql-reference/data-types/string) - -**戻り値** - -指定されたフォーマットに従った日時の値を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**Joda 構文を使用して datetime をフォーマットする** - -```sql title=Query -SELECT formatDateTimeInJodaSyntax(toDateTime('2010-01-04 12:34:56'), 'yyyy-MM-dd HH:mm:ss') -``` - -```response title=Response -┌─formatDateTimeInJodaSyntax(toDateTime('2010-01-04 12:34:56'), 'yyyy-MM-dd HH:mm:ss')─┐ -│ 2010-01-04 12:34:56 │ -└─────────────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## fromDaysSinceYearZero - -導入バージョン: v23.11 - -[0000年1月1日](https://en.wikipedia.org/wiki/Year_zero)からの経過日数が与えられると、[ISO 8601 で定義されるプロレプティック・グレゴリオ暦](https://en.wikipedia.org/wiki/Gregorian_calendar#Proleptic_Gregorian_calendar)における対応する日付を返します。 - -計算方法は MySQL の `FROM_DAYS()` 関数と同じです。結果が [Date](../data-types/date.md) 型の範囲内で表現できない場合、結果は未定義です。 - -**構文** - -```sql -fromDaysSinceYearZero(days) -``` - -**エイリアス**: `FROM_DAYS` - -**引数** - -* `days` — 年 0 から経過した日数。[`UInt32`](/sql-reference/data-types/int-uint) - -**返される値** - -年 0 からの経過日数に対応する日付を返します。[`Date`](/sql-reference/data-types/date) - -**例** - -**年 0 からの経過日数を日付に変換する** - -```sql title=Query -SELECT -fromDaysSinceYearZero(739136) AS date1, -fromDaysSinceYearZero(toDaysSinceYearZero(toDate('2023-09-08'))) AS date2 -``` - -```response title=Response -┌──────date1─┬──────date2─┐ -│ 2023-09-08 │ 2023-09-08 │ -└────────────┴────────────┘ -``` - - -## fromDaysSinceYearZero32 - -導入バージョン: v23.11 - -[西暦0年1月1日](https://en.wikipedia.org/wiki/Year_zero) からの経過日数を指定すると、[ISO 8601 で定義されるプロレプティック・グレゴリオ暦](https://en.wikipedia.org/wiki/Gregorian_calendar#Proleptic_Gregorian_calendar)における対応する日付を返します。 -計算方法は MySQL の `FROM_DAYS()` 関数と同じです。結果が [`Date32`](../data-types/date32.md) 型の範囲で表現できない場合、結果は未定義です。 - -**構文** - -```sql -fromDaysSinceYearZero32(days) -``` - -**引数** - -* `days` — 年 0 からの経過日数。[`UInt32`](/sql-reference/data-types/int-uint) - -**返される値** - -指定された年 0 からの経過日数に対応する日付を返します。[`Date32`](/sql-reference/data-types/date32) - -**使用例** - -**年 0 からの経過日数を日付に変換する** - -```sql title=Query -SELECT -fromDaysSinceYearZero32(739136) AS date1, -fromDaysSinceYearZero32(toDaysSinceYearZero(toDate('2023-09-08'))) AS date2 -``` - -```response title=Response -┌──────date1─┬──────date2─┐ -│ 2023-09-08 │ 2023-09-08 │ -└────────────┴────────────┘ -``` - - -## fromModifiedJulianDay - -導入: v21.1 - -[修正ユリウス日](https://en.wikipedia.org/wiki/Julian_day#Variants)番号を、テキスト形式 `YYYY-MM-DD` の[前推グレゴリオ暦](https://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar)の日付に変換します。この関数がサポートする日番号の範囲は `-678941` から `2973483` までです(それぞれ 0000-01-01 および 9999-12-31 に対応します)。日番号がサポート範囲外の場合は例外をスローします。 - -**構文** - -```sql -fromModifiedJulianDay(day) -``` - -**引数** - -* `day` — 修正ユリウス日番号。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**戻り値** - -日付をテキスト形式(文字列)で返します。[`String`](/sql-reference/data-types/string) - -**例** - -**修正ユリウス日を日付に変換する** - -```sql title=Query -SELECT fromModifiedJulianDay(58849) -``` - -```response title=Response -┌─fromModifiedJulianDay(58849)─┐ -│ 2020-01-01 │ -└──────────────────────────────┘ -``` - - -## fromModifiedJulianDayOrNull - -導入: v21.1 - -[`fromModifiedJulianDay()`](#fromModifiedJulianDay) と同様ですが、例外を送出する代わりに `NULL` を返します。 - -**構文** - -```sql -fromModifiedJulianDayOrNull(day) -``` - -**引数** - -* `day` — 修正ユリウス日番号。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返される値** - -有効な `day` 引数が指定された場合はテキスト形式の日付を返し、それ以外の場合は `null` を返します。[`Nullable(String)`](/sql-reference/data-types/nullable) - -**使用例** - -**null を考慮して修正ユリウス日を日付に変換する** - -```sql title=Query -SELECT fromModifiedJulianDayOrNull(58849); -SELECT fromModifiedJulianDayOrNull(60000000); -- 無効な引数、NULLを返す -``` - -```response title=Response -┌─fromModified⋯Null(58849)─┐ -│ 2020-01-01 │ -└──────────────────────────┘ -┌─fromModified⋯l(60000000)─┐ -│ ᴺᵁᴸᴸ │ -└──────────────────────────┘ -``` - - -## fromUTCTimestamp - -導入バージョン: v22.1 - -UTC タイムゾーンの日付または日時の値を、指定したタイムゾーンの日付または日時の値に変換します。この関数は主に Apache Spark および類似フレームワークとの互換性のために提供されています。 - -**構文** - -```sql -fromUTCTimestamp(datetime, time_zone) -``` - -**別名**: `from_utc_timestamp` - -**引数** - -* `datetime` — 日付または日時の定数値、もしくはその式。[`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) -* `time_zone` — タイムゾーンを表す String 型の定数値または式。[`String`](/sql-reference/data-types/string) - -**戻り値** - -指定したタイムゾーンの DateTime/DateTime64 値を返します。[`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) - -**例** - -**UTC タイムゾーンを指定のタイムゾーンに変換する** - -```sql title=Query -SELECT fromUTCTimestamp(toDateTime64('2023-03-16 10:00:00', 3), 'Asia/Shanghai') -``` - -```response title=Response -┌─fromUTCTimestamp(toDateTime64('2023-03-16 10:00:00',3), 'Asia/Shanghai')─┐ -│ 2023-03-16 18:00:00.000 │ -└─────────────────────────────────────────────────────────────────────────┘ -``` - - -## fromUnixTimestamp - -導入バージョン: v20.8 - -この関数は Unix タイムスタンプをカレンダー日付および一日の時刻に変換します。 - -2 通りの呼び出し方があります: - -* 単一の引数として型 [`Integer`](../data-types/int-uint.md) を受け取った場合は、型 [`DateTime`](../data-types/datetime.md) の値を返します。これは [`toDateTime`](../../sql-reference/functions/type-conversion-functions.md#todatetime) と同様に動作します。 -* 2 つまたは 3 つの引数を取り、1 番目の引数が型 [`Integer`](../data-types/int-uint.md)、[`Date`](../data-types/date.md)、[`Date32`](../data-types/date32.md)、[`DateTime`](../data-types/datetime.md) または [`DateTime64`](../data-types/datetime64.md) の値であり、2 番目の引数が定数のフォーマット文字列、3 番目の引数がオプションの定数タイムゾーン文字列である場合、この関数は型 [`String`](../data-types/string.md) の値を返します。これは [`formatDateTime`](#formatDateTime) と同様に動作します。 - この場合、[MySQL の datetime フォーマットスタイル](https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_date-format) が使用されます。 - -**構文** - -```sql -fromUnixTimestamp(timestamp) -fromUnixTimestamp(timestamp[, format[, timezone]]) -``` - -**別名**: `FROM_UNIXTIME` - -**引数** - -* `timestamp` — Unix タイムスタンプ、または日付/日時の値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) -* `format` — 省略可能。出力の書式設定に使用する定数フォーマット文字列。[`String`](/sql-reference/data-types/string) -* `timezone` — 省略可能。タイムゾーンを表す定数文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -1 つの引数で呼び出された場合は、タイムスタンプに対応する `DateTime` を返し、2 または 3 つの引数で呼び出された場合は `String` を返します。[`DateTime`](/sql-reference/data-types/datetime) または [`String`](/sql-reference/data-types/string) - -**例** - -**Unix タイムスタンプを DateTime に変換する** - -```sql title=Query -SELECT fromUnixTimestamp(423543535) -``` - -```response title=Response -┌─fromUnixTimestamp(423543535)─┐ -│ 1983-06-04 10:58:55 │ -└──────────────────────────────┘ -``` - -**指定したフォーマットで Unix タイムスタンプを変換** - -```sql title=Query -SELECT fromUnixTimestamp(1234334543, '%Y-%m-%d %R:%S') AS DateTime -``` - -```response title=Response -┌─DateTime────────────┐ -│ 2009-02-11 14:42:23 │ -└─────────────────────┘ -``` - - -## fromUnixTimestampInJodaSyntax - -導入バージョン: v23.1 - -この関数は Unix タイムスタンプを暦日と一日の時刻に変換します。 - -この関数は 2 通りの呼び出し方ができます。 - -1 つの引数として [`Integer`](../data-types/int-uint.md) 型の値を渡した場合、[`DateTime`](../data-types/datetime.md) 型の値を返します。つまり、[`toDateTime`](../../sql-reference/functions/type-conversion-functions.md#todatetime) と同様に動作します。 - -2 つまたは 3 つの引数を渡した場合で、1 番目の引数が [`Integer`](../data-types/int-uint.md)、[`Date`](../data-types/date.md)、[`Date32`](../data-types/date32.md)、[`DateTime`](../data-types/datetime.md)、または [`DateTime64`](../data-types/datetime64.md) 型の値、2 番目の引数が定数のフォーマット文字列、3 番目の引数が省略可能な定数のタイムゾーン文字列であるとき、この関数は [`String`](../data-types/string.md) 型の値を返します。つまり、[`formatDateTimeInJodaSyntax`](#formatDateTimeInJodaSyntax) と同様に動作します。この場合、[Joda の日時フォーマットスタイル](https://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormat.html) が使用されます。 - -**構文** - -```sql -fromUnixTimestampInJodaSyntax(timestamp) -fromUnixTimestampInJodaSyntax(timestamp, format[, timezone]) -``` - -**引数** - -* `timestamp` — Unix タイムスタンプまたは日時値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) -* `format` — オプション。出力の書式設定に使用する Joda 構文の定数フォーマット文字列。[`String`](/sql-reference/data-types/string) -* `timezone` — オプション。タイムゾーンを表す定数文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -引数が 1 つで呼び出された場合は日時を返し、2 つまたは 3 つの引数で呼び出された場合は文字列を返します。[`DateTime`](/sql-reference/data-types/datetime) または [`String`](/sql-reference/data-types/string) - -**例** - -**Unix タイムスタンプを Joda フォーマットで変換する** - -```sql title=Query -SELECT fromUnixTimestampInJodaSyntax(1234334543, 'yyyy-MM-dd HH:mm:ss', 'UTC') AS DateTime -``` - -```response title=Response -┌─DateTime────────────┐ -│ 2009-02-11 06:42:23 │ -└─────────────────────┘ -``` - - -## makeDate - -導入: v22.6 - -次のいずれかから `Date` を作成します。 - -* 年・月・日 -* 年・年内通算日 - -**構文** - -```sql -makeDate(year, month, day) -makeDate(year, day_of_year) -``` - -**引数** - -* `year` — 年を表す数値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) -* `month` — 月を表す数値 (1〜12)。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) -* `day` — 日を表す数値 (1〜31)。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) -* `day_of_year` — 年内通算日を表す数値 (1〜365)。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) - -**返される値** - -指定された引数から構築された `Date` 値を返します。[`Date`](/sql-reference/data-types/date) - -**例** - -**年・月・日から `Date` 値を生成** - -```sql title=Query -SELECT makeDate(2023, 2, 28) AS date; -``` - -```response title=Response -┌───────date─┐ -│ 2023-02-28 │ -└────────────┘ -``` - -**年と年内通算日から日付を求める** - -```sql title=Query -SELECT makeDate(2023, 42) AS date; -``` - -```response title=Response -┌───────date─┐ -│ 2023-02-11 │ -└────────────┘ -``` - - -## makeDate32 - -導入バージョン:v22.6 - -次のいずれかから `Date32` を作成します: - -* 年・月・日 -* 年と年内通算日 - -**構文** - -```sql -makeDate32(year, month, day) -makeDate32(year, day_of_year) -``` - -**引数** - -* `year` — 年を表す数値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) -* `month` — 月を表す数値 (1-12)。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) -* `day` — 日を表す数値 (1-31)。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) -* `day_of_year` — その年の通算日を表す数値 (1-365)。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) - -**返り値** - -指定された引数から構築された `Date32` 値を返します。[`Date32`](/sql-reference/data-types/date32) - -**使用例** - -**year, month, day から Date32 を作成** - -```sql title=Query -SELECT makeDate(2023, 2, 28) AS date; -``` - -```response title=Response -┌───────date─┐ -│ 2023-02-28 │ -└────────────┘ -``` - -**年と年内通算日からの Date32** - -```sql title=Query -SELECT makeDate(2023, 42) AS date; -``` - -```response title=Response -┌───────date─┐ -│ 2023-02-11 │ -└────────────┘ -``` - - -## makeDateTime - -導入バージョン: v22.6 - -年、月、日、時、分、秒と任意のタイムゾーン指定から `DateTime` を生成します。 - -**構文** - -```sql -makeDateTime(year, month, day, hour, minute, second[, timezone]) -``` - -**引数** - -* `year` — 年を表す数値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) -* `month` — 月を表す数値 (1-12)。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) -* `day` — 日にち (1-31)。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) -* `hour` — 時 (0-23)。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) -* `minute` — 分 (0-59)。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) -* `second` — 秒 (0-59)。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) -* `timezone` — タイムゾーン名。[`String`](/sql-reference/data-types/string) - -**戻り値** - -指定された引数から構築された [`DateTime`](/sql-reference/data-types/datetime) 型の値を返します。 - -**例** - -**year, month, day, hour, minute, second から DateTime を生成** - -```sql title=Query -SELECT makeDateTime(2023, 2, 28, 17, 12, 33) AS DateTime; -``` - -```response title=Response -┌────────────DateTime─┐ -│ 2023-02-28 17:12:33 │ -└─────────────────────┘ -``` - - -## makeDateTime64 - -導入バージョン: v22.6 - -年、月、日、時、分、秒から `DateTime64` を生成します。オプションで小数部、精度、およびタイムゾーンを指定できます。 - -**構文** - -```sql -makeDateTime64(year, month, day, hour, minute, second[, fraction[, precision[, timezone]]]) -``` - -**引数** - -* `year` — 年を表す数値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) -* `month` — 月を表す数値 (1-12)。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) -* `day` — 日を表す数値 (1-31)。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) -* `hour` — 時 (0-23)。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) -* `minute` — 分 (0-59)。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) -* `second` — 秒 (0-59)。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) -* `fraction` — 秒の小数部。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) -* `precision` — 小数部の精度 (0-9)。[`UInt8`](/sql-reference/data-types/int-uint) -* `timezone` — タイムゾーンの名前。[`String`](/sql-reference/data-types/string) - -**戻り値** - -指定された引数から構築された `DateTime64` 値を返します。[`DateTime64`](/sql-reference/data-types/datetime64) - -**例** - -**year, month, day, hour, minute, second からの DateTime64** - -```sql title=Query -SELECT makeDateTime64(2023, 5, 15, 10, 30, 45, 779, 5); -``` - -```response title=Response -┌─makeDateTime64(2023, 5, 15, 10, 30, 45, 779, 5)─┐ -│ 2023-05-15 10:30:45.00779 │ -└─────────────────────────────────────────────────┘ -``` - - -## monthName - -導入バージョン: v22.1 - -日付または日時の値から、その月の名称を文字列で返します。 - -**構文** - -```sql -monthName(datetime) -``` - -**引数** - -* `datetime` — 日付または日時。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) - -**戻り値** - -月の名前を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**日付から月名を取得する** - -```sql title=Query -WITH toDateTime('2021-04-14 11:22:33') AS date_value -SELECT monthName(date_value) -``` - -```response title=Response -┌─monthName(date_value)─┐ -│ April │ -└───────────────────────┘ -``` - - -## now - -導入バージョン: v1.1 - -クエリ解析時の現在の日時を返します。この関数は定数式です。 - -**構文** - -```sql -now([timezone]) -``` - -**エイリアス**: `current_timestamp` - -**引数** - -* `timezone` — 省略可能。返される値のタイムゾーン名。[`String`](/sql-reference/data-types/string) - -**戻り値** - -現在の日時を返します。[`DateTime`](/sql-reference/data-types/datetime) - -**例** - -**タイムゾーンを指定しないクエリ** - -```sql title=Query -SELECT now() -``` - -```response title=Response -┌───────────────now()─┐ -│ 2020-10-17 07:42:09 │ -└─────────────────────┘ -``` - -**指定したタイムゾーンでクエリを実行** - -```sql title=Query -SELECT now('Asia/Istanbul') -``` - -```response title=Response -┌─now('Asia/Istanbul')─┐ -│ 2020-10-17 10:42:23 │ -└──────────────────────┘ -``` - - -## now64 - -導入バージョン: v20.1 - -クエリ解析の時点における現在の日時を、サブ秒精度で返します。この関数は定数式です。 - -**構文** - -```sql -now64([scale[, timezone]]) -``` - -**引数** - -* `scale` — 省略可。ティックサイズ(精度)。10^-scale 秒。指定可能な範囲: [0 : 9]。通常は 3(デフォルト、ミリ秒)、6(マイクロ秒)、9(ナノ秒)が使用されます。[`UInt8`](/sql-reference/data-types/int-uint) -* `timezone` — 省略可。返される値のタイムゾーン名。[`String`](/sql-reference/data-types/string) - -**戻り値** - -サブ秒精度を持つ現在の日時を返します。[`DateTime64`](/sql-reference/data-types/datetime64) - -**使用例** - -**デフォルト精度とカスタム精度を指定したクエリ** - -```sql title=Query -SELECT now64(), now64(9, 'Asia/Istanbul') -``` - -```response title=Response -┌─────────────────now64()─┬─────now64(9, 'Asia/Istanbul')─┐ -│ 2022-08-21 19:34:26.196 │ 2022-08-21 22:34:26.196542766 │ -└─────────────────────────┴───────────────────────────────┘ -``` - - -## nowInBlock - -導入バージョン: v22.8 - -各データブロックの処理時点における現在の日時を返します。関数 [`now`](#now) とは異なり、これは定数式ではなく、長時間実行されるクエリではブロックごとに異なる値が返されます。 - -この関数は、長時間実行される `INSERT SELECT` クエリ内で現在時刻を生成する用途に適しています。 - -**構文** - -```sql -nowInBlock([timezone]) -``` - -**引数** - -* `timezone` — 任意。返される値のタイムゾーン名。[`String`](/sql-reference/data-types/string) - -**返される値** - -各データブロックの処理時点における現在の日時を返します。[`DateTime`](/sql-reference/data-types/datetime) - -**例** - -**now() 関数との違い** - -```sql title=Query -SELECT - now(), - nowInBlock(), - sleep(1) -FROM numbers(3) -SETTINGS max_block_size = 1 -FORMAT PrettyCompactMonoBlock -``` - -```response title=Response -┌───────────────now()─┬────────nowInBlock()─┬─sleep(1)─┐ -│ 2022-08-21 19:41:19 │ 2022-08-21 19:41:19 │ 0 │ -│ 2022-08-21 19:41:19 │ 2022-08-21 19:41:20 │ 0 │ -│ 2022-08-21 19:41:19 │ 2022-08-21 19:41:21 │ 0 │ -└─────────────────────┴─────────────────────┴──────────┘ -``` - - -## nowInBlock64 - -導入バージョン: v25.8 - -各データブロックを処理する時点の現在日時をミリ秒単位で返します。関数 [now64](#now64) と異なり定数式ではないため、長時間実行されるクエリでは、ブロックごとに返される値が異なります。 - -長時間実行される INSERT SELECT クエリで現在時刻を生成する用途に、この関数を使用すると有効です。 - -**構文** - -```sql -nowInBlock([scale[, timezone]]) -``` - -**引数** - -* `scale` — 省略可能。ティックサイズ(精度):10^-precision 秒。 有効範囲: [0 : 9]。通常は 3(デフォルト)(ミリ秒)、6(マイクロ秒)、9(ナノ秒)が使用されます。 [`UInt8`](/sql-reference/data-types/int-uint) -* `timezone` — 省略可能。返される値のタイムゾーン名。 [`String`](/sql-reference/data-types/string) - -**戻り値** - -各データブロックを処理する時点の現在日時を、サブ秒精度で返します。 [`DateTime64`](/sql-reference/data-types/datetime64) - -**例** - -**now64() 関数との違い** - -```sql title=Query -SELECT - now64(), - nowInBlock64(), - sleep(1) -FROM numbers(3) -SETTINGS max_block_size = 1 -FORMAT PrettyCompactMonoBlock -``` - -```response title=Response -┌─────────────────now64()─┬──────────nowInBlock64()─┬─sleep(1)─┐ -│ 2025-07-29 17:07:29.526 │ 2025-07-29 17:07:29.534 │ 0 │ -│ 2025-07-29 17:07:29.526 │ 2025-07-29 17:07:30.535 │ 0 │ -│ 2025-07-29 17:07:29.526 │ 2025-07-29 17:07:31.535 │ 0 │ -└─────────────────────────┴─────────────────────────┴──────────┘ -``` - - -## serverTimezone - -導入バージョン: v23.6 - -サーバーのタイムゾーン([`timezone`](/operations/server-configuration-parameters/settings#timezone) 設定の値)を返します。 -関数が分散テーブルのコンテキストで実行された場合は、各シャードに対応した値を持つ通常の列を生成します。そうでない場合は、定数値を生成します。 - -**構文** - -```sql -serverTimeZone() -``` - -**エイリアス**: `serverTimeZone` - -**引数** - -* なし。 - -**戻り値** - -サーバーのタイムゾーンを [`String`](/sql-reference/data-types/string) 型で返します。 - -**例** - -**使用例** - -```sql title=Query -SELECT serverTimeZone() -``` - -```response title=Response -┌─serverTimeZone()─┐ -│ UTC │ -└──────────────────┘ -``` - - -## subDate - -導入バージョン: v23.9 - -指定された日付、日時、または文字列としてエンコードされた日付もしくは日時から時間間隔を減算します。 -減算の結果がデータ型の範囲外となる場合、その結果は未定義です。 - -**構文** - -```sql -subDate(datetime, interval) -``` - -**引数** - -* `datetime` — この値から `interval` を減算する日付または日時。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) -* `interval` — 減算に用いるインターバル。[`Interval`](/sql-reference/data-types/int-uint) - -**戻り値** - -`datetime` から `interval` を減算して得られる日付または日時を返します。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) - -**例** - -**日付から `interval` を減算する** - -```sql title=Query -SELECT subDate(toDate('2018-01-01'), INTERVAL 3 YEAR) -``` - -```response title=Response -┌─subDate(toDate('2018-01-01'), toIntervalYear(3))─┐ -│ 2015-01-01 │ -└──────────────────────────────────────────────────┘ -``` - - -## subtractDays - -導入バージョン: v1.1 - -日付、日時、またはそれらを表す文字列から、指定した日数を減算します。 - -**構文** - -```sql -subtractDays(datetime, num) -``` - -**引数** - -* `datetime` — 指定した日数を減算する対象の日付または日時。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) または [`String`](/sql-reference/data-types/string) -* `num` — 減算する日数。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) - -**戻り値** - -`datetime` から `num` 日を減算した値を返します。戻り値の型は [`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) です。 - -**使用例** - -**異なる日付型から日数を減算する** - -```sql title=Query -WITH - toDate('2024-01-01') AS date, - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - subtractDays(date, 31) AS subtract_days_with_date, - subtractDays(date_time, 31) AS subtract_days_with_date_time, - subtractDays(date_time_string, 31) AS subtract_days_with_date_time_string -``` - -```response title=Response -┌─subtract_days_with_date─┬─subtract_days_with_date_time─┬─subtract_days_with_date_time_string─┐ -│ 2023-12-01 │ 2023-12-01 00:00:00 │ 2023-12-01 00:00:00.000 │ -└─────────────────────────┴──────────────────────────────┴─────────────────────────────────────┘ -``` - -**別の INTERVAL 構文の使用** - -```sql title=Query -SELECT dateSub('1998-06-16'::Date, INTERVAL 10 day) -``` - -```response title=Response -┌─minus(CAST('⋯valDay(10))─┐ -│ 1998-06-06 │ -└──────────────────────────┘ -``` - - -## subtractHours - -v1.1 で導入 - -日付、日時、または文字列としてエンコードされた日付・日時から、指定した数の時間を減算します。 - -**構文** - -```sql -subtractHours(datetime, num) -``` - -**引数** - -* `datetime` — 指定された時間数を減算する対象の日付または日時。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) または [`String`](/sql-reference/data-types/string) -* `num` — 減算する時間数。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) - -**戻り値** - -`datetime` から `num` 時間を減算した結果を返す。戻り値の型は [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64(3)`](/sql-reference/data-types/datetime64) - -**使用例** - -**異なる日付型から時間を減算する** - -```sql title=Query -WITH - toDate('2024-01-01') AS date, - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - subtractHours(date, 12) AS subtract_hours_with_date, - subtractHours(date_time, 12) AS subtract_hours_with_date_time, - subtractHours(date_time_string, 12) AS subtract_hours_with_date_time_string -``` - -```response title=Response -┌─subtract_hours_with_date─┬─subtract_hours_with_date_time─┬─subtract_hours_with_date_time_string─┐ -│ 2023-12-31 12:00:00 │ 2023-12-31 12:00:00 │ 2023-12-31 12:00:00.000 │ -└──────────────────────────┴───────────────────────────────┴──────────────────────────────────────┘ -``` - -**別の INTERVAL 構文を使用する** - -```sql title=Query -SELECT dateSub('1998-06-16'::Date, INTERVAL 10 hour) -``` - -```response title=Response -┌─minus(CAST('⋯alHour(10))─┐ -│ 1998-06-15 14:00:00 │ -└──────────────────────────┘ -``` - - -## subtractInterval - -導入バージョン: v22.11 - -符号が反転したインターバルを、別のインターバルまたはインターバルのタプルに加算します。 - -注意: 同じ型のインターバルは 1 つのインターバルにまとめられます。たとえば `toIntervalDay(2)` と `toIntervalDay(1)` が -渡された場合、結果は `(2,1)` ではなく `(1)` になります。 - -**構文** - -```sql -subtractInterval(interval_1, interval_2) -``` - -**引数** - -* `interval_1` — 1 つ目のインターバル、またはインターバルのタプル。[`Interval`](/sql-reference/data-types/int-uint) または [`Tuple(Interval)`](/sql-reference/data-types/tuple) -* `interval_2` — 符号を反転する 2 つ目のインターバル。[`Interval`](/sql-reference/data-types/int-uint) - -**戻り値** - -インターバルのタプル [`Tuple(T)`](/sql-reference/data-types/tuple) を返します。 - -**使用例** - -**インターバルを減算する** - -```sql title=Query -SELECT subtractInterval(INTERVAL 1 DAY, INTERVAL 1 MONTH); -SELECT subtractInterval((INTERVAL 1 DAY, INTERVAL 1 YEAR), INTERVAL 1 MONTH); -SELECT subtractInterval(INTERVAL 2 DAY, INTERVAL 1 DAY); -``` - -```response title=Response -┌─subtractInterval(toIntervalDay(1), toIntervalMonth(1))─┐ -│ (1,-1) │ -└────────────────────────────────────────────────────────┘ -┌─subtractInterval((toIntervalDay(1), toIntervalYear(1)), toIntervalMonth(1))─┐ -│ (1,1,-1) │ -└─────────────────────────────────────────────────────────────────────────────┘ -┌─subtractInterval(toIntervalDay(2), toIntervalDay(1))─┐ -│ (1) │ -└──────────────────────────────────────────────────────┘ -``` - - -## subtractMicroseconds - -導入バージョン: v22.6 - -日時型の値、または文字列として表現された日時から、指定したマイクロ秒数を減算します。 - -**構文** - -```sql -subtractMicroseconds(datetime, num) -``` - -**引数** - -* `datetime` — 指定したマイクロ秒数を減算する対象の日時。[`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) または [`String`](/sql-reference/data-types/string) -* `num` — 減算するマイクロ秒数。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) - -**戻り値** - -`datetime` から `num` マイクロ秒を引いた [`DateTime64`](/sql-reference/data-types/datetime64) 値を返します。 - -**使用例** - -**さまざまな日時型からマイクロ秒を減算する** - -```sql title=Query -WITH - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - subtractMicroseconds(date_time, 1000000) AS subtract_microseconds_with_date_time, - subtractMicroseconds(date_time_string, 1000000) AS subtract_microseconds_with_date_time_string -``` - -```response title=Response -┌─subtract_microseconds_with_date_time─┬─subtract_microseconds_with_date_time_string─┐ -│ 2023-12-31 23:59:59.000000 │ 2023-12-31 23:59:59.000000 │ -└──────────────────────────────────────┴─────────────────────────────────────────────┘ -``` - -**別の INTERVAL 構文を使用する** - -```sql title=Query -SELECT dateSub('1998-06-16'::DateTime, INTERVAL 10 microsecond) -``` - -```response title=Response -┌─minus(CAST('1⋯osecond(10))─┐ -│ 1998-06-15 23:59:59.999990 │ -└────────────────────────────┘ -``` - - -## subtractMilliseconds - -導入バージョン: v22.6 - -日時値、または文字列表現の日時から、指定したミリ秒数だけ減算します。 - -**構文** - -```sql -subtractMilliseconds(datetime, num) -``` - -**引数** - -* `datetime` — 指定したミリ秒数を差し引く対象の日時。[`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) または [`String`](/sql-reference/data-types/string) -* `num` — 減算するミリ秒数。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) - -**返される値** - -`datetime` から `num` ミリ秒を引いた結果を返します。型は [`DateTime64`](/sql-reference/data-types/datetime64) です。 - -**使用例** - -**異なる日時型からミリ秒を減算する** - -```sql title=Query -WITH - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - subtractMilliseconds(date_time, 1000) AS subtract_milliseconds_with_date_time, - subtractMilliseconds(date_time_string, 1000) AS subtract_milliseconds_with_date_time_string -``` - -```response title=Response -┌─subtract_milliseconds_with_date_time─┬─subtract_milliseconds_with_date_time_string─┐ -│ 2023-12-31 23:59:59.000 │ 2023-12-31 23:59:59.000 │ -└──────────────────────────────────────┴─────────────────────────────────────────────┘ -``` - -**代替の INTERVAL 構文を使用する** - -```sql title=Query -SELECT dateSub('1998-06-16'::DateTime, INTERVAL 10 millisecond) -``` - -```response title=Response -┌─minus(CAST('⋯second(10))─┐ -│ 1998-06-15 23:59:59.990 │ -└──────────────────────────┘ -``` - - -## subtractMinutes - -導入バージョン: v1.1 - -指定した分だけ、日付、日時、または文字列で表現された日付もしくは日時から減算します。 - -**構文** - -```sql -subtractMinutes(datetime, num) -``` - -**引数** - -* `datetime` — 指定した分だけ減算する対象の日付または日時。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) または [`String`](/sql-reference/data-types/string) -* `num` — 減算する分(分単位の数値)。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) - -**戻り値** - -`datetime` から `num` 分を減算した値を返します。型は [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64(3)`](/sql-reference/data-types/datetime64) - -**使用例** - -**異なる日付型から分を減算する** - -```sql title=Query -WITH - toDate('2024-01-01') AS date, - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - subtractMinutes(date, 30) AS subtract_minutes_with_date, - subtractMinutes(date_time, 30) AS subtract_minutes_with_date_time, - subtractMinutes(date_time_string, 30) AS subtract_minutes_with_date_time_string -``` - -```response title=Response -┌─subtract_minutes_with_date─┬─subtract_minutes_with_date_time─┬─subtract_minutes_with_date_time_string─┐ -│ 2023-12-31 23:30:00 │ 2023-12-31 23:30:00 │ 2023-12-31 23:30:00.000 │ -└────────────────────────────┴─────────────────────────────────┴────────────────────────────────────────┘ -``` - -**INTERVAL の別構文を使用する** - -```sql title=Query -SELECT dateSub('1998-06-16'::Date, INTERVAL 10 minute) -``` - -```response title=Response -┌─minus(CAST('⋯Minute(10))─┐ -│ 1998-06-15 23:50:00 │ -└──────────────────────────┘ -``` - - -## subtractMonths - -導入バージョン: v1.1 - -日付、日時、または文字列としてエンコードされた日付/日時から、指定した数の月を減算します。 - -**構文** - -```sql -subtractMonths(datetime, num) -``` - -**引数** - -* `datetime` — 指定された月数だけ減算する対象の日付または日時。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) または [`String`](/sql-reference/data-types/string) -* `num` — 減算する月数。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) - -**戻り値** - -`datetime` から `num` か月を減算した値を返します。型は [`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) のいずれかです。 - -**例** - -**さまざまな日付型から月を減算する** - -```sql title=Query -WITH - toDate('2024-01-01') AS date, - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - subtractMonths(date, 1) AS subtract_months_with_date, - subtractMonths(date_time, 1) AS subtract_months_with_date_time, - subtractMonths(date_time_string, 1) AS subtract_months_with_date_time_string -``` - -```response title=Response -┌─subtract_months_with_date─┬─subtract_months_with_date_time─┬─subtract_months_with_date_time_string─┐ -│ 2023-12-01 │ 2023-12-01 00:00:00 │ 2023-12-01 00:00:00.000 │ -└───────────────────────────┴────────────────────────────────┴───────────────────────────────────────┘ -``` - -**代替の INTERVAL 構文の使用** - -```sql title=Query -SELECT dateSub('1998-06-16'::Date, INTERVAL 10 month) -``` - -```response title=Response -┌─minus(CAST('⋯lMonth(10))─┐ -│ 1997-08-16 │ -└──────────────────────────┘ -``` - - -## subtractNanoseconds - -導入バージョン: v20.1 - -日付時刻型、または文字列としてエンコードされた日付時刻から、指定したナノ秒数を減算します。 - -**構文** - -```sql -subtractNanoseconds(datetime, num) -``` - -**引数** - -* `datetime` — 指定したナノ秒数を減算する基準となる日時。[`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) または [`String`](/sql-reference/data-types/string) -* `num` — 減算するナノ秒数。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) - -**戻り値** - -`datetime` から `num` ナノ秒を減算した値を返します(戻り値の型は [`DateTime64`](/sql-reference/data-types/datetime64))。 - -**例** - -**異なる日時型からナノ秒を減算する** - -```sql title=Query -WITH - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - subtractNanoseconds(date_time, 1000) AS subtract_nanoseconds_with_date_time, - subtractNanoseconds(date_time_string, 1000) AS subtract_nanoseconds_with_date_time_string -``` - -```response title=Response -┌─subtract_nanoseconds_with_date_time─┬─subtract_nanoseconds_with_date_time_string─┐ -│ 2023-12-31 23:59:59.999999000 │ 2023-12-31 23:59:59.999999000 │ -└─────────────────────────────────────┴────────────────────────────────────────────┘ -``` - -**別の INTERVAL 構文の利用** - -```sql title=Query -SELECT dateSub('1998-06-16'::DateTime, INTERVAL 10 nanosecond) -``` - -```response title=Response -┌─minus(CAST('19⋯anosecond(10))─┐ -│ 1998-06-15 23:59:59.999999990 │ -└───────────────────────────────┘ -``` - - -## subtractQuarters - -導入バージョン: v20.1 - -日付、日時、または文字列表現の日付もしくは日時から、指定した数の四半期を減算します。 - -**構文** - -```sql -subtractQuarters(datetime, num) -``` - -**引数** - -* `datetime` — 指定した四半期数を減算する日付または日時。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) または [`String`](/sql-reference/data-types/string) -* `num` — 減算する四半期の数。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) - -**戻り値** - -`datetime` から `num` 四半期を減算した値を返します。型は [`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) です。 - -**使用例** - -**さまざまな日付型から四半期を減算する** - -```sql title=Query -WITH - toDate('2024-01-01') AS date, - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - subtractQuarters(date, 1) AS subtract_quarters_with_date, - subtractQuarters(date_time, 1) AS subtract_quarters_with_date_time, - subtractQuarters(date_time_string, 1) AS subtract_quarters_with_date_time_string -``` - -```response title=Response -┌─subtract_quarters_with_date─┬─subtract_quarters_with_date_time─┬─subtract_quarters_with_date_time_string─┐ -│ 2023-10-01 │ 2023-10-01 00:00:00 │ 2023-10-01 00:00:00.000 │ -└─────────────────────────────┴──────────────────────────────────┴─────────────────────────────────────────┘ -``` - -**別の INTERVAL 構文を使用する** - -```sql title=Query -SELECT dateSub('1998-06-16'::Date, INTERVAL 10 quarter) -``` - -```response title=Response -┌─minus(CAST('1⋯Quarter(10))─┐ -│ 1996-09-16 │ -└───────────────────────────┘ -``` - - -## subtractSeconds - -導入バージョン: v1.1 - -指定した秒数を日付、日時、または文字列表現の日付・日時から減算します。 - -**構文** - -```sql -subtractSeconds(datetime, num) -``` - -**引数** - -* `datetime` — 指定した秒数を差し引く対象の日付または日時。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) または [`String`](/sql-reference/data-types/string) -* `num` — 減算する秒数。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) - -**戻り値** - -`datetime` から `num` 秒を減算した値を返します。型は [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64(3)`](/sql-reference/data-types/datetime64) です。 - -**使用例** - -**異なる日付型から秒数を減算する** - -```sql title=Query -WITH - toDate('2024-01-01') AS date, - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - subtractSeconds(date, 60) AS subtract_seconds_with_date, - subtractSeconds(date_time, 60) AS subtract_seconds_with_date_time, - subtractSeconds(date_time_string, 60) AS subtract_seconds_with_date_time_string -``` - -```response title=Response -┌─subtract_seconds_with_date─┬─subtract_seconds_with_date_time─┬─subtract_seconds_with_date_time_string─┐ -│ 2023-12-31 23:59:00 │ 2023-12-31 23:59:00 │ 2023-12-31 23:59:00.000 │ -└────────────────────────────┴─────────────────────────────────┴────────────────────────────────────────┘ -``` - -**別の INTERVAL 構文を使用する** - -```sql title=Query -SELECT dateSub('1998-06-16'::Date, INTERVAL 10 second) -``` - -```response title=Response -┌─minus(CAST('⋯Second(10))─┐ -│ 1998-06-15 23:59:50 │ -└──────────────────────────┘ -``` - - -## subtractTupleOfIntervals - -導入バージョン: v22.11 - -日付または日時から、タプル形式で指定された複数の時間間隔を順に減算します。 - -**構文** - -```sql -subtractTupleOfIntervals(datetime, intervals) -``` - -**引数** - -* `datetime` — 期間を減算する対象の日付または日時。[`Date`](/sql-reference/data-types/date)、[`Date32`](/sql-reference/data-types/date32)、[`DateTime`](/sql-reference/data-types/datetime)、または [`DateTime64`](/sql-reference/data-types/datetime64) -* `intervals` — `datetime` から減算する期間のタプル。[`Tuple(Interval)`](/sql-reference/data-types/tuple) - -**戻り値** - -`intervals` を減算した `date` を返す。[`Date`](/sql-reference/data-types/date)、[`Date32`](/sql-reference/data-types/date32)、[`DateTime`](/sql-reference/data-types/datetime)、または [`DateTime64`](/sql-reference/data-types/datetime64) - -**例** - -**日付から期間のタプルを減算する** - -```sql title=Query -WITH toDate('2018-01-01') AS date SELECT subtractTupleOfIntervals(date, (INTERVAL 1 DAY, INTERVAL 1 YEAR)) -``` - -```response title=Response -┌─subtractTupl⋯alYear(1)))─┐ -│ 2016-12-31 │ -└──────────────────────────┘ -``` - - -## subtractWeeks - -導入バージョン: v1.1 - -指定した週数を、日付、日時、または文字列形式の日付もしくは日時から減算します。 - -**構文** - -```sql -subtractWeeks(datetime, num) -``` - -**引数** - -* `datetime` — 指定した週数を減算する基準となる日付または日時。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) または [`String`](/sql-reference/data-types/string) -* `num` — 減算する週数。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) - -**戻り値** - -`datetime` から `num` 週を差し引いた値を返します。型は [`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) - -**使用例** - -**異なる日付型から週を減算する** - -```sql title=Query -WITH - toDate('2024-01-01') AS date, - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - subtractWeeks(date, 1) AS subtract_weeks_with_date, - subtractWeeks(date_time, 1) AS subtract_weeks_with_date_time, - subtractWeeks(date_time_string, 1) AS subtract_weeks_with_date_time_string -``` - -```response title=Response -┌─subtract_weeks_with_date─┬─subtract_weeks_with_date_time─┬─subtract_weeks_with_date_time_string─┐ -│ 2023-12-25 │ 2023-12-25 00:00:00 │ 2023-12-25 00:00:00.000 │ -└──────────────────────────┴───────────────────────────────┴──────────────────────────────────────┘ -``` - -**別の INTERVAL 構文を使用する** - -```sql title=Query -SELECT dateSub('1998-06-16'::Date, INTERVAL 10 week) -``` - -```response title=Response -┌─minus(CAST('⋯alWeek(10))─┐ -│ 1998-04-07 │ -└──────────────────────────┘ -``` - - -## subtractYears - -導入: v1.1 - -日付、日時、または文字列表現の日付・日時から、指定した年数を引きます。 - -**構文** - -```sql -subtractYears(datetime, num) -``` - -**引数** - -* `datetime` — 指定した年数を減算する対象の日付または日時。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) または [`String`](/sql-reference/data-types/string) -* `num` — 減算する年数。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) - -**返される値** - -`datetime` から `num` 年を引いた値を返します。型は [`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) です。 - -**例** - -**異なる日付型から年数を減算する** - -```sql title=Query -WITH - toDate('2024-01-01') AS date, - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - subtractYears(date, 1) AS subtract_years_with_date, - subtractYears(date_time, 1) AS subtract_years_with_date_time, - subtractYears(date_time_string, 1) AS subtract_years_with_date_time_string -``` - -```response title=Response -┌─subtract_years_with_date─┬─subtract_years_with_date_time─┬─subtract_years_with_date_time_string─┐ -│ 2023-01-01 │ 2023-01-01 00:00:00 │ 2023-01-01 00:00:00.000 │ -└──────────────────────────┴───────────────────────────────┴──────────────────────────────────────┘ -``` - -**別の INTERVAL 構文の使用** - -```sql title=Query -SELECT dateSub('1998-06-16'::Date, INTERVAL 10 year) -``` - -```response title=Response -┌─minus(CAST('⋯alYear(10))─┐ -│ 1988-06-16 │ -└──────────────────────────┘ -``` - - -## timeDiff - -導入バージョン: v23.4 - -2 つの日付、または日時の値の差を秒単位で返します。 -差は `enddate` - `startdate` として計算されます。 - -この関数は `dateDiff('second', startdate, enddate)` と同等です。 - -他の単位(時間、日、月など)で時間差を計算する場合は、代わりに [`dateDiff`](#dateDiff) 関数を使用してください。 - -**構文** - -```sql -timeDiff(startdate, enddate) -``` - -**引数** - -* `startdate` — 減算される最初の時刻値(減数)。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) -* `enddate` — 減算元となる 2 番目の時刻値(被減数)。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) - -**返される値** - -`enddate` と `startdate` の差を秒単位で返します。[`Int64`](/sql-reference/data-types/int-uint) - -**例** - -**時間差を秒で計算する** - -```sql title=Query -SELECT timeDiff(toDateTime('2018-01-01 22:00:00'), toDateTime('2018-01-02 23:00:00')) AS res -``` - -```response title=Response -┌───res─┐ -│ 90000 │ -└───────┘ -``` - -**時間差を計算し、時間に換算する** - -```sql title=Query -SELECT timeDiff(toDateTime('2018-01-01 22:00:00'), toDateTime('2018-01-02 23:00:00')) / 3600 AS hours -``` - -```response title=Response -┌─hours─┐ -│ 25 │ -└───────┘ -``` - -**秒単位の dateDiff と同等** - -```sql title=Query -SELECT - timeDiff(toDateTime('2021-12-29'), toDateTime('2022-01-01')) AS time_diff_result, - dateDiff('second', toDateTime('2021-12-29'), toDateTime('2022-01-01')) AS date_diff_result -``` - -```response title=Response -┌─time_diff_result─┬─date_diff_result─┐ -│ 259200 │ 259200 │ -└──────────────────┴──────────────────┘ -``` - - -## timeSlot - -導入バージョン: v1.1 - -時刻を 30 分間隔の開始時刻に丸めます。 - -:::note -この関数は拡張型である `Date32` および `DateTime64` の値も引数として受け取ることができますが、 -通常の範囲(`Date` では 1970 年から 2149 年、`DateTime` では 1970 年から 2106 年)外の時刻を渡すと正しくない結果になります。 -::: - -**構文** - -```sql -timeSlot(time[, time_zone]) -``` - -**引数** - -* `time` — 30 分間隔の区間の開始時刻に丸める対象の時刻。[`DateTime`](/sql-reference/data-types/datetime) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime64`](/sql-reference/data-types/datetime64) -* `time_zone` — 省略可能。タイムゾーンを表す `String` 型の定数値または式。[`String`](/sql-reference/data-types/string) - -**返り値** - -30 分間隔の区間の開始時刻に丸められた時刻を返します。[`DateTime`](/sql-reference/data-types/datetime) - -**使用例** - -**時刻を 30 分間隔の開始時刻に丸める** - -```sql title=Query -SELECT timeSlot(toDateTime('2000-01-02 03:04:05', 'UTC')) -``` - -```response title=Response -┌─timeSlot(toDateTime('2000-01-02 03:04:05', 'UTC'))─┐ -│ 2000-01-02 03:00:00 │ -└────────────────────────────────────────────────────┘ -``` - - -## timeSlots - -導入バージョン: v1.1 - -`StartTime` から始まり `Duration` 秒間続く時間間隔に対して、その間隔内の時刻を、`Size` 秒単位で切り捨てた時刻の配列として返します。`Size` は省略可能なパラメーターで、デフォルトは 1800(30 分)です。 - -これは、たとえば対応するセッション内のページビューを検索する場合などに役立ちます。 - -`DateTime64` に対しては、戻り値のスケールは `StartTime` のスケールと異なる場合があります。与えられたすべての引数のうち、最大のスケールが使用されます。 - -**構文** - -```sql -timeSlots(StartTime, Duration[, Size]) -``` - -**引数** - -* `StartTime` — 区間の開始時刻。[`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) -* `Duration` — 区間の継続時間(秒)。[`UInt32`](/sql-reference/data-types/int-uint) または [`DateTime64`](/sql-reference/data-types/datetime64) -* `Size` — 省略可。時間スロットの長さ(秒)。デフォルトは 1800(30 分)。[`UInt32`](/sql-reference/data-types/int-uint) または [`DateTime64`](/sql-reference/data-types/datetime64) - -**戻り値** - -DateTime/DateTime64 の配列を返します(戻り値の型は `StartTime` の型に一致します)。DateTime64 の場合、戻り値のスケール(小数精度)は `StartTime` のスケールと異なることがあります。指定されたすべての引数の中で最大のスケールが使用されます。[`Array(DateTime)`](/sql-reference/data-types/array) または [`Array(DateTime64)`](/sql-reference/data-types/array) - -**例** - -**区間に対する時間スロットを生成する** - -```sql title=Query -SELECT timeSlots(toDateTime('2012-01-01 12:20:00'), toUInt32(600)); -SELECT timeSlots(toDateTime('1980-12-12 21:01:02', 'UTC'), toUInt32(600), 299); -SELECT timeSlots(toDateTime64('1980-12-12 21:01:02.1234', 4, 'UTC'), toDecimal64(600.1, 1), toDecimal64(299, 0)) -``` - -```response title=Response -┌─timeSlots(toDateTime('2012-01-01 12:20:00'), toUInt32(600))─┐ -│ ['2012-01-01 12:00:00','2012-01-01 12:30:00'] │ -└─────────────────────────────────────────────────────────────┘ -┌─timeSlots(toDateTime('1980-12-12 21:01:02', 'UTC'), toUInt32(600), 299)─┐ -│ ['1980-12-12 20:56:13','1980-12-12 21:01:12','1980-12-12 21:06:11'] │ -└─────────────────────────────────────────────────────────────────────────┘ -┌─timeSlots(toDateTime64('1980-12-12 21:01:02.1234', 4, 'UTC'), toDecimal64(600.1, 1), toDecimal64(299, 0))─┐ -│ ['1980-12-12 20:56:13.0000','1980-12-12 21:01:12.0000','1980-12-12 21:06:11.0000'] │ -└───────────────────────────────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## timestamp - -導入バージョン: v23.9 - -最初の引数 `expr` を型 [`DateTime64(6)`](/sql-reference/data-types/datetime64) に変換します。 -2番目の引数 `expr_time` が指定されている場合、指定された時間を変換後の値に加算します。 - -**構文** - -```sql -timestamp(expr[, expr_time]) -``` - -**引数** - -* `expr` — 日付、または日時を表す文字列。[`String`](/sql-reference/data-types/string) -* `expr_time` — オプション。変換後の値に加算する時刻を表す文字列。[`String`](/sql-reference/data-types/string) - -**返り値** - -`expr` を変換した値、または `expr` に時刻を加算した値を返します。型は [`DateTime64(6)`](/sql-reference/data-types/datetime64) です。 - -**例** - -**日付文字列を DateTime64(6) に変換する** - -```sql title=Query -SELECT timestamp('2023-12-31') AS ts; -``` - -```response title=Response -┌─────────────────────────ts─┐ -│ 2023-12-31 00:00:00.000000 │ -└────────────────────────────┘ -``` - -**日付文字列に時刻を追加する** - -```sql title=Query -SELECT timestamp('2023-12-31 12:00:00', '12:00:00.11') AS ts; -``` - -```response title=Response -┌─────────────────────────ts─┐ -│ 2024-01-01 00:00:00.110000 │ -└────────────────────────────┘ -``` - - -## timezone - -導入バージョン: v21.4 - -現在のセッションのタイムゾーン名を返すか、タイムゾーンのオフセットまたは名前を正規のタイムゾーン名に変換します。 - -**構文** - -```sql -timezone() -``` - -**別名**: `timeZone` - -**引数** - -* なし - -**返り値** - -正規のタイムゾーン名を [`String`](/sql-reference/data-types/string) 型で返します。 - -**例** - -**使用例** - -```sql title=Query -SELECT timezone() -``` - -```response title=Response -┌─timezone()───────┐ -│ Europe/Amsterdam │ -└──────────────────┘ -``` - - -## timezoneOf - -導入バージョン: v21.4 - -[`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) 型の値のタイムゾーン名を返します。 - -**構文** - -```sql -timeZoneOf(datetime) -``` - -**別名**: `timeZoneOf` - -**引数** - -* `datetime` — 型 [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) の値。 -* `timezone` — 省略可能。`datetime` の値を変換する先のタイムゾーン名。型は [`String`](/sql-reference/data-types/string) です。 - -**返される値** - -`datetime` のタイムゾーン名を返します。型は [`String`](/sql-reference/data-types/string) です。 - -**例** - -**使用例** - -```sql title=Query -SELECT timezoneOf(now()); -``` - -```response title=Response -┌─timezoneOf(now())─┐ -│ Europe/Amsterdam │ -└───────────────────┘ -``` - - -## timezoneOffset - -導入バージョン: v21.6 - -[UTC](https://en.wikipedia.org/wiki/Coordinated_Universal_Time) からの時差を秒単位で返します。 -この関数は、指定された日時における夏時間および歴史的なタイムゾーンの変更を考慮します。 - -**構文** - -```sql -timeZoneOffset(datetime) -``` - -**別名**: `timeZoneOffset` - -**引数** - -* `datetime` — タイムゾーンオフセットを取得する対象の `DateTime` 値。[`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) - -**戻り値** - -UTC からのオフセットを秒単位の [`Int32`](/sql-reference/data-types/int-uint) 値として返します - -**例** - -**使用例** - -```sql title=Query -SELECT toDateTime('2021-04-21 10:20:30', 'America/New_York') AS Time, -toTypeName(Time) AS Type, -timeZoneOffset(Time) AS Offset_in_seconds, -(Offset_in_seconds / 3600) AS Offset_in_hours; -``` - -```response title=Response -┌────────────────Time─┬─Type─────────────────────────┬─Offset_in_seconds─┬─Offset_in_hours─┐ -│ 2021-04-21 10:20:30 │ DateTime('America/New_York') │ -14400 │ -4 │ -└─────────────────────┴──────────────────────────────┴───────────────────┴─────────────────┘ -``` - - -## toDayOfMonth - -導入バージョン: v1.1 - -`Date` または `DateTime` の月内の日 (1-31) を返します。 - -**構文** - -```sql -toDayOfMonth(datetime) -``` - -**エイリアス**: `DAY`, `DAYOFMONTH` - -**引数** - -* `datetime` — 日を取得する対象の日時。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) - -**返される値** - -指定した日時の「日」を返します。型は [`UInt8`](/sql-reference/data-types/int-uint) です。 - -**例** - -**使用例** - -```sql title=Query -SELECT toDayOfMonth(toDateTime('2023-04-21 10:20:30')) -``` - -```response title=Response -┌─toDayOfMonth(toDateTime('2023-04-21 10:20:30'))─┐ -│ 21 │ -└─────────────────────────────────────────────────┘ -``` - - -## toDayOfWeek - -導入バージョン: v1.1 - -`Date` または `DateTime` の値に対して、その週における曜日番号を返します。 - -2 つの引数を取る形式の `toDayOfWeek()` では、週の開始曜日を月曜日または日曜日のどちらにするか、 -および戻り値を 0〜6 または 1〜7 のどちらの範囲にするかを指定できます。 - -| モード | 週の開始曜日 | 範囲 | -| --- | ------ | ----------------------------------- | -| 0 | 月曜日 | 1〜7: 月曜日 = 1, 火曜日 = 2, ..., 日曜日 = 7 | -| 1 | 月曜日 | 0〜6: 月曜日 = 0, 火曜日 = 1, ..., 日曜日 = 6 | -| 2 | 日曜日 | 0〜6: 日曜日 = 0, 月曜日 = 1, ..., 土曜日 = 6 | -| 3 | 日曜日 | 1〜7: 日曜日 = 1, 月曜日 = 2, ..., 土曜日 = 7 | - -**構文** - -```sql -toDayOfWeek(datetime[, mode[, timezone]]) -``` - -**別名**: `DAYOFWEEK` - -**引数** - -* `datetime` — 曜日を取得する対象の日付または日時。[`Date`](/sql-reference/data-types/date)、[`Date32`](/sql-reference/data-types/date32)、[`DateTime`](/sql-reference/data-types/datetime)、[`DateTime64`](/sql-reference/data-types/datetime64) のいずれか。 -* `mode` — 省略可能。週モードを指定する整数値 (0-3)。省略時は 0 が使用される。[`UInt8`](/sql-reference/data-types/int-uint) -* `timezone` — 省略可能。変換に使用するタイムゾーン。[`String`](/sql-reference/data-types/string) - -**戻り値** - -指定された `Date` または `DateTime` の曜日を [`UInt8`](/sql-reference/data-types/int-uint) 型で返す。 - -**例** - -**使用例** - -```sql title=Query --- 以下の日付は2023年4月21日で、金曜日でした: -SELECT - toDayOfWeek(toDateTime('2023-04-21')), - toDayOfWeek(toDateTime('2023-04-21'), 1) -``` - -```response title=Response -┌─toDayOfWeek(toDateTime('2023-04-21'))─┬─toDayOfWeek(toDateTime('2023-04-21'), 1)─┐ -│ 5 │ 4 │ -└───────────────────────────────────────┴──────────────────────────────────────────┘ -``` - - -## toDayOfYear - -導入バージョン: v18.4 - -`Date` または `DateTime` 型の値について、年内における日付の通し番号 (1〜366) を返します。 - -**構文** - -```sql -toDayOfYear(datetime) -``` - -**別名**: `DAYOFYEAR` - -**引数** - -* `datetime` — 年内の通算日を取得する対象の日付または日時。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) - -**戻り値** - -指定された Date または DateTime の年内の通算日を返します。型は [`UInt16`](/sql-reference/data-types/int-uint) です。 - -**例** - -**使用例** - -```sql title=Query -SELECT toDayOfYear(toDateTime('2023-04-21 10:20:30')) -``` - -```response title=Response -┌─toDayOfYear(toDateTime('2023-04-21 10:20:30'))─┐ -│ 111 │ -└────────────────────────────────────────────────┘ -``` - - -## toDaysSinceYearZero - -導入バージョン: v23.9 - -指定した日付に対して、[ISO 8601 で定義されるプロレプティック・グレゴリオ暦](https://en.wikipedia.org/wiki/Gregorian_calendar#Proleptic_Gregorian_calendar)における -[西暦 0000 年 1 月 1 日](https://en.wikipedia.org/wiki/Year_zero) から経過した日数を返します。 - -計算は MySQL の [`TO_DAYS`](https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_to-days) 関数と同じです。 - -**構文** - -```sql -toDaysSinceYearZero(date[, time_zone]) -``` - -**別名**: `TO_DAYS` - -**引数** - -* `date` — 西暦0年からの経過日数を計算する対象となる日付または日時。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) -* `time_zone` — タイムゾーン。[`String`](/sql-reference/data-types/string) - -**戻り値** - -日付 `0000-01-01` からの経過日数を返します。[`UInt32`](/sql-reference/data-types/int-uint) - -**例** - -**西暦0年からの経過日数を計算する** - -```sql title=Query -SELECT toDaysSinceYearZero(toDate('2023-09-08')) -``` - -```response title=Response -┌─toDaysSinceYearZero(toDate('2023-09-08')))─┐ -│ 713569 │ -└────────────────────────────────────────────┘ -``` - - -## toHour - -導入されたバージョン: v1.1 - -`DateTime` または `DateTime64` の値から、時の部分(0〜23)を返します。 - -**構文** - -```sql -toHour(datetime) -``` - -**別名**: `HOUR` - -**引数** - -* `datetime` — 時刻を含む日付。ここから時間を取得します。[`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64)。 - -**戻り値** - -`datetime` の時間 (0-23) を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT toHour(toDateTime('2023-04-21 10:20:30')) -``` - -```response title=Response -┌─toHour(toDateTime('2023-04-21 10:20:30'))─┐ -│ 10 │ -└───────────────────────────────────────────┘ -``` - - -## toISOYear - -導入バージョン: v18.4 - -日付または日時を ISO 年番号に変換します。 - -**構文** - -```sql -toISOYear(datetime) -``` - -**引数** - -* `datetime` — 日付、または日付と時刻を表す値。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) - -**戻り値** - -入力値を ISO 年番号に変換して返します。[`UInt16`](/sql-reference/data-types/int-uint) - -**例** - -**日付値から ISO 年を取得する** - -```sql title=Query -SELECT -toISOYear(toDate('2024/10/02')) as year1, -toISOYear(toDateTime('2024-10-02 01:30:00')) as year2 -``` - -```response title=Response -┌─week1─┬─week2─┐ -│ 40 │ 40 │ -└───────┴───────┘ -``` - - -## toLastDayOfMonth - -導入バージョン: v1.1 - -日付または日付と時刻を、その月の最終日に切り上げます。 - -:::note -戻り値の型は、[`enable_extended_results_for_datetime_functions`](/operations/settings/settings#enable_extended_results_for_datetime_functions) を設定することで変更できます。 -::: - -**構文** - -```sql -toLastDayOfMonth(value) -``` - -**別名**: `LAST_DAY` - -**引数** - -* `value` — 月末日に切り上げる対象の日付または日時。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) - -**返される値** - -指定された日付または日時に対して、その月の最終日の日付を返します。[`Date`](/sql-reference/data-types/date) - -**例** - -**月末日に切り上げる** - -```sql title=Query -SELECT toLastDayOfMonth(toDateTime('2023-04-21 10:20:30')) -``` - -```response title=Response -┌─toLastDayOfMonth(toDateTime('2023-04-21 10:20:30'))─┐ -│ 2023-04-30 │ -└─────────────────────────────────────────────────────┘ -``` - - -## toLastDayOfWeek - -導入バージョン: v23.5 - -日付または日時を、次の土曜日または日曜日まで切り上げます。 - -:::note -戻り値の型は、[`enable_extended_results_for_datetime_functions`](/operations/settings/settings#enable_extended_results_for_datetime_functions) を設定することで変更できます。 -::: - -**構文** - -```sql -toLastDayOfWeek(datetime[, mode[, timezone]]) -``` - -**引数** - -* `datetime` — 変換対象の日付または日時。[`Date`](/sql-reference/data-types/date) または [`DateTime`](/sql-reference/data-types/datetime) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime64`](/sql-reference/data-types/datetime64) -* `mode` — `toWeek()` 関数で説明されているとおり、週の最初の曜日を決定します。デフォルトは `0`。[`UInt8`](/sql-reference/data-types/int-uint) -* `timezone` — 省略可能。変換に使用するタイムゾーン。指定しない場合はサーバーのタイムゾーンが使用されます。[`String`](/sql-reference/data-types/string) - -**戻り値** - -`mode` に応じて、指定された日付を基準に当日を含めて以降で最も近い土曜日または日曜日の日付を返します。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) - -**例** - -**最も近い土曜日または日曜日に切り上げる** - -```sql title=Query -SELECT - toLastDayOfWeek(toDateTime('2023-04-21 10:20:30')), /* 金曜日 */ - toLastDayOfWeek(toDateTime('2023-04-21 10:20:30'), 1), /* 金曜日 */ - toLastDayOfWeek(toDate('2023-04-23')), /* 日曜日 */ - toLastDayOfWeek(toDate('2023-04-23'), 1) /* 日曜日 */ -FORMAT Vertical -``` - -```response title=Response -Row 1: -────── -toLastDayOfWeek(toDateTime('2023-04-21 10:20:30')): 2023-04-23 -toLastDayOfWeek(toDateTime('2023-04-21 10:20:30'), 1): 2023-04-22 -toLastDayOfWeek(toDate('2023-04-23')): 2023-04-23 -toLastDayOfWeek(toDate('2023-04-23'), 1): 2023-04-23 -``` - - -## toMillisecond - -導入バージョン: v24.2 - -`DateTime` または `DateTime64` 値のミリ秒部分 (0-999) を返します。 - -**構文** - -```sql -toMillisecond(datetime) -``` - -**別名**: `MILLISECOND` - -**引数** - -* `datetime` — ミリ秒を取得する対象の日時値。[`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) - -**返される値** - -`datetime` の分内のミリ秒 (0 - 59) を返します。[`UInt16`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT toMillisecond(toDateTime64('2023-04-21 10:20:30.456', 3)); -``` - -```response title=Response -┌──toMillisecond(toDateTime64('2023-04-21 10:20:30.456', 3))─┐ -│ 456 │ -└────────────────────────────────────────────────────────────┘ -``` - - -## toMinute - -導入バージョン: v1.1 - -`Date` または `DateTime` の値から分(0〜59)を返します。 - -**構文** - -```sql -toMinute(datetime) -``` - -**別名**: `MINUTE` - -**引数** - -* `datetime` — 分を取得する対象の日時。[`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) - -**戻り値** - -`datetime` の時の分 (0 - 59) を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT toMinute(toDateTime('2023-04-21 10:20:30')) -``` - -```response title=Response -┌─toMinute(toDateTime('2023-04-21 10:20:30'))─┐ -│ 20 │ -└─────────────────────────────────────────────┘ -``` - - -## toModifiedJulianDay - -導入バージョン: v21.1 - -テキスト形式 `YYYY-MM-DD` の[プロレプティック・グレゴリオ暦](https://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar)の日付を、`Int32` 型の[修正ユリウス日](https://en.wikipedia.org/wiki/Julian_day#Variants)に変換します。この関数は `0000-01-01` から `9999-12-31` までの日付をサポートします。引数が日付としてパースできない場合、または日付が不正な場合には例外をスローします。 - -**構文** - -```sql -toModifiedJulianDay(date) -``` - -**引数** - -* `date` — 文字列形式の日付。[`String`](/sql-reference/data-types/string) または [`FixedString`](/sql-reference/data-types/fixedstring) - -**戻り値** - -修正ユリウス日番号を返します。[`Int32`](/sql-reference/data-types/int-uint) - -**例** - -**日付を修正ユリウス日番号に変換** - -```sql title=Query -SELECT toModifiedJulianDay('2020-01-01') -``` - -```response title=Response -┌─toModifiedJulianDay('2020-01-01')─┐ -│ 58849 │ -└───────────────────────────────────┘ -``` - - -## toModifiedJulianDayOrNull - -導入バージョン: v21.1 - -[`toModifiedJulianDay()`](#toModifiedJulianDay) と同様ですが、例外を送出する代わりに `NULL` を返します。 - -**構文** - -```sql -toModifiedJulianDayOrNull(date) -``` - -**引数** - -* `date` — テキスト形式の日付。[`String`](/sql-reference/data-types/string) または [`FixedString`](/sql-reference/data-types/fixedstring) - -**戻り値** - -有効な `date` に対しては修正ユリウス日番号を返し、それ以外の場合は `null` を返します。[`Nullable(Int32)`](/sql-reference/data-types/nullable) - -**例** - -**null を考慮して日付を修正ユリウス日番号に変換** - -```sql title=Query -SELECT toModifiedJulianDayOrNull('2020-01-01'); -SELECT toModifiedJulianDayOrNull('0000-00-00'); -- 無効な日付、NULLを返します -``` - -```response title=Response -┌─toModifiedJu⋯020-01-01')─┐ -│ 58849 │ -└──────────────────────────┘ -┌─toModifiedJu⋯000-00-00')─┐ -│ ᴺᵁᴸᴸ │ -└──────────────────────────┘ -``` - - -## toMonday - -導入バージョン: v1.1 - -日付または日時を、その週の月曜日に切り下げます。日付を返します。 - -:::note -戻り値の型は、[`enable_extended_results_for_datetime_functions`](/operations/settings/settings#enable_extended_results_for_datetime_functions) を設定することで変更できます。 -::: - -**構文** - -```sql -toMonday(value) -``` - -**引数** - -* `value` — 週の月曜日に切り下げる対象となる日付または日時。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) - -**戻り値** - -指定した日付または日時と同じ週における月曜日の日付を返します。[`Date`](/sql-reference/data-types/date) - -**使用例** - -**週の月曜日への切り下げ** - -```sql title=Query -SELECT -toMonday(toDateTime('2023-04-21 10:20:30')), -- 金曜日 -toMonday(toDate('2023-04-24')); -- 既に月曜日 -``` - -```response title=Response -┌─toMonday(toDateTime('2023-04-21 10:20:30'))─┬─toMonday(toDate('2023-04-24'))─┐ -│ 2023-04-17 │ 2023-04-24 │ -└─────────────────────────────────────────────┴────────────────────────────────┘ -``` - - -## toMonth - -導入バージョン: v1.1 - -`Date` または `DateTime` 型の値から月 (1~12) を返します。 - -**構文** - -```sql -toMonth(datetime) -``` - -**エイリアス**: `MONTH` - -**引数** - -* `datetime` — 月を取得する対象の日付または日時。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) - -**戻り値** - -指定された日付/日時の月を返します。型は [`UInt8`](/sql-reference/data-types/int-uint) です。 - -**例** - -**使用例** - -```sql title=Query -SELECT toMonth(toDateTime('2023-04-21 10:20:30')) -``` - -```response title=Response -┌─toMonth(toDateTime('2023-04-21 10:20:30'))─┐ -│ 4 │ -└────────────────────────────────────────────┘ -``` - - -## toMonthNumSinceEpoch - -導入バージョン: v25.3 - -1970年からの経過月数を返します。 - -**構文** - -```sql -toMonthNumSinceEpoch(date) -``` - -**引数** - -* `date` — 日付または日付と時刻。[`Date`](/sql-reference/data-types/date) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) - -**戻り値** - -正の整数 - -**例** - -**例** - -```sql title=Query -SELECT toMonthNumSinceEpoch(toDate('2024-10-01')) -``` - -```response title=Response -657 -``` - - -## toQuarter - -導入バージョン: v1.1 - -指定された `Date` または `DateTime` 値に対して、その年の四半期(1〜4)を返します。 - -**構文** - -```sql -toQuarter(datetime) -``` - -**別名**: `QUARTER` - -**引数** - -* `datetime` — 年の四半期を取得する対象となる日付または日時の値。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) - -**返り値** - -指定された日付/時刻に対応する年の四半期を返します。型は [`UInt8`](/sql-reference/data-types/int-uint) です。 - -**例** - -**使用例** - -```sql title=Query -SELECT toQuarter(toDateTime('2023-04-21 10:20:30')) -``` - -```response title=Response -┌─toQuarter(toDateTime('2023-04-21 10:20:30'))─┐ -│ 2 │ -└──────────────────────────────────────────────┘ -``` - - -## toRelativeDayNum - -導入バージョン: v1.1 - -日付または日時を、過去のある固定点からの経過日数に変換します。 -その固定点は実装上の詳細であり、この関数を単体で使用することは想定されていません。 -この関数の主な用途は、2 つの日付または日時間の日数差を計算することであり、例えば `toRelativeDayNum(dt1) - toRelativeDayNum(dt2)` のように使用します。 - -**構文** - -```sql -toRelativeDayNum(date) -``` - -**引数** - -* `date` — 日付または日時。[`Date`](/sql-reference/data-types/date) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) - -**戻り値** - -過去の固定された基準点からの経過日数を返します。[`UInt32`](/sql-reference/data-types/int-uint) - -**例** - -**相対日数を取得する** - -```sql title=Query -SELECT toRelativeDayNum(toDate('2023-04-01')) - toRelativeDayNum(toDate('2023-01-01')) -``` - -```response title=Response -┌─minus(toRela⋯3-01-01')))─┐ -│ 90 │ -└──────────────────────────┘ -``` - - -## toRelativeHourNum - -導入バージョン: v1.1 - -日付、または日時を、過去のある固定時点からの経過時間(時間数)に変換します。 -その正確な時点は実装の詳細であり、この関数を単独で使用することは想定されていません。 -この関数の主な目的は、2 つの日付または日時の間の時間差を計算することです。たとえば、`toRelativeHourNum(dt1) - toRelativeHourNum(dt2)` のように使用します。 - -**構文** - -```sql -toRelativeHourNum(date) -``` - -**引数** - -* `date` — 日付または日時。[`Date`](/sql-reference/data-types/date) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) - -**戻り値** - -過去の固定参照点からの経過時間(時間数)を返します。[`UInt32`](/sql-reference/data-types/int-uint) - -**例** - -**相対的な時間番号(時間数)を取得する** - -```sql title=Query -SELECT toRelativeHourNum(toDateTime('2023-01-01 12:00:00')) - toRelativeHourNum(toDateTime('2023-01-01 00:00:00')) AS hours_difference -``` - -```response title=Response -┌─hours_difference─┐ -│ 12 │ -└──────────────────┘ -``` - - -## toRelativeMinuteNum - -導入: v1.1 - -日付または日時を、過去のある固定時点からの経過分数値に変換します。 -その正確な時点は実装上の詳細に属するものであり、この関数自体を単体で使用することは想定されていません。 -関数の主な用途は、2 つの日付または日時の間の差を分単位で計算することです。例えば、`toRelativeMinuteNum(dt1) - toRelativeMinuteNum(dt2)` のように使用します。 - -**構文** - -```sql -toRelativeMinuteNum(date) -``` - -**引数** - -* `date` — 日付または日時。[`Date`](/sql-reference/data-types/date) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) - -**戻り値** - -過去の固定基準点からの分数を返します。[`UInt32`](/sql-reference/data-types/int-uint) - -**例** - -**相対的な分番号を取得する** - -```sql title=Query -SELECT toRelativeMinuteNum(toDateTime('2023-01-01 00:30:00')) - toRelativeMinuteNum(toDateTime('2023-01-01 00:00:00')) AS minutes_difference -``` - -```response title=Response -┌─minutes_difference─┐ -│ 30 │ -└────────────────────┘ -``` - - -## toRelativeMonthNum - -導入バージョン: v1.1 - -日付または日付と時刻を、過去のある固定時点からの経過月数に変換します。 -その固定時点は実装上の詳細であり、この関数を単体で使用することは想定されていません。 -この関数の主な用途は、2 つの日付または日付と時刻の間の月数の差を計算することです。例: `toRelativeMonthNum(dt1) - toRelativeMonthNum(dt2)`。 - -**構文** - -```sql -toRelativeMonthNum(date) -``` - -**引数** - -* `date` — 日付または日時。[`Date`](/sql-reference/data-types/date)、[`DateTime`](/sql-reference/data-types/datetime)、または [`DateTime64`](/sql-reference/data-types/datetime64) - -**戻り値** - -過去の固定の基準時点からの月数を返します。[`UInt32`](/sql-reference/data-types/int-uint) - -**例** - -**相対月番号を取得する** - -```sql title=Query -SELECT toRelativeMonthNum(toDate('2023-04-01')) - toRelativeMonthNum(toDate('2023-01-01')) AS months_difference -``` - -```response title=Response -┌─months_difference─┐ -│ 3 │ -└───────────────────┘ -``` - - -## toRelativeQuarterNum - -導入バージョン: v1.1 - -日付または日時を、過去のある固定時点から経過した四半期数に変換します。 -その基準時点の詳細は実装依存であり、この関数を単体で使用することは想定されていません。 -この関数の主な目的は、2 つの日付または日時の間の四半期数の差を計算することであり、例えば `toRelativeQuarterNum(dt1) - toRelativeQuarterNum(dt2)` のように使用します。 - -**構文** - -```sql -toRelativeQuarterNum(date) -``` - -**引数** - -* `date` — 日付または日時。[`Date`](/sql-reference/data-types/date) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) - -**戻り値** - -過去の固定の基準時点からの四半期数を返します。[`UInt32`](/sql-reference/data-types/int-uint) - -**使用例** - -**相対四半期番号を取得する** - -```sql title=Query -SELECT toRelativeQuarterNum(toDate('2023-04-01')) - toRelativeQuarterNum(toDate('2023-01-01')) AS quarters_difference -``` - -```response title=Response -┌─quarters_difference─┐ -│ 1 │ -└─────────────────────┘ -``` - - -## toRelativeSecondNum - -導入バージョン: v1.1 - -日付または日時を、過去のある固定された時点からの経過秒数に変換します。 -その正確な時点は実装上の詳細に過ぎないため、この関数を単体で使用することは想定されていません。 -この関数の主な用途は、2つの日付または日時の差分を秒単位で計算することであり、例えば `toRelativeSecondNum(dt1) - toRelativeSecondNum(dt2)` のように使用します。 - -**構文** - -```sql -toRelativeSecondNum(date) -``` - -**引数** - -* `date` — 日付または日時。[`Date`](/sql-reference/data-types/date) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) - -**戻り値** - -過去の固定基準時点からの経過秒数を返します。[`UInt32`](/sql-reference/data-types/int-uint) - -**例** - -**相対的な秒数を取得する** - -```sql title=Query -SELECT toRelativeSecondNum(toDateTime('2023-01-01 00:01:00')) - toRelativeSecondNum(toDateTime('2023-01-01 00:00:00')) AS seconds_difference -``` - -```response title=Response -┌─seconds_difference─┐ -│ 60 │ -└────────────────────┘ -``` - - -## toRelativeWeekNum - -導入: v1.1 - -日付または日時を、過去の特定の基準時点からの経過週数に変換します。 -その基準時点となる時刻は実装の詳細であり、この関数を単体で使用することは想定されていません。 -この関数の主な目的は、2つの日付または日時の間の週数の差を計算することであり、例えば `toRelativeWeekNum(dt1) - toRelativeWeekNum(dt2)` のように使用します。 - -**構文** - -```sql -toRelativeWeekNum(date) -``` - -**引数** - -* `date` — 日付または日時。[`Date`](/sql-reference/data-types/date) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) - -**戻り値** - -過去の固定基準時点からの週番号を返します。[`UInt32`](/sql-reference/data-types/int-uint) - -**例** - -**相対週番号を取得する** - -```sql title=Query -SELECT toRelativeWeekNum(toDate('2023-01-08')) - toRelativeWeekNum(toDate('2023-01-01')) AS weeks_difference -``` - -```response title=Response -┌─weeks_difference─┐ -│ 1 │ -└──────────────────┘ -``` - - -## toRelativeYearNum - -導入バージョン: v1.1 - -日付または日時を、過去のある固定時点から経過した年数に変換します。 -その正確な時点は実装上の詳細であり、この関数は単体で使用することを意図していません。 -この関数の主な目的は、2 つの日付または日時の年数の差を計算することであり、例としては `toRelativeYearNum(dt1) - toRelativeYearNum(dt2)` のような使い方が挙げられます。 - -**構文** - -```sql -toRelativeYearNum(date) -``` - -**引数** - -* `date` — 日付または日時。[`Date`](/sql-reference/data-types/date) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) - -**戻り値** - -過去に固定された基準点からの年数を返します。[`UInt16`](/sql-reference/data-types/int-uint) - -**使用例** - -**相対的な年数を取得する** - -```sql title=Query -SELECT toRelativeYearNum('2010-10-01'::DateTime) - toRelativeYearNum('2000-01-01'::DateTime) -``` - -```response title=Response -┌─minus(toRela⋯ateTime')))─┐ -│ 10 │ -└──────────────────────────┘ -``` - - -## toSecond - -導入バージョン: v1.1 - -`DateTime` または `DateTime64` の値から秒(0〜59)を返します。 - -**構文** - -```sql -toSecond(datetime) -``` - -**エイリアス**: `SECOND` - -**引数** - -* `datetime` — 秒を取得する対象の日時。[`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) - -**返される値** - -`datetime` が表す分の秒 (0 - 59) を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT toSecond(toDateTime('2023-04-21 10:20:30')) -``` - -```response title=Response -┌─toSecond(toDateTime('2023-04-21 10:20:30'))─┐ -│ 30 │ -└─────────────────────────────────────────────┘ -``` - - -## toStartOfDay - -導入バージョン: v1.1 - -日時をその日の開始時刻に切り捨てます。 - -:::note -戻り値の型は、[`enable_extended_results_for_datetime_functions`](/operations/settings/settings#enable_extended_results_for_datetime_functions) を設定することで変更できます。 -::: - -**構文** - -```sql -toStartOfDay(datetime) -``` - -**引数** - -* `datetime` — 丸め対象の日付または日時。[`Date`](/sql-reference/data-types/date) または [`DateTime`](/sql-reference/data-types/datetime) - -**返り値** - -日付または日時を、その日の開始時刻まで切り捨てて返します。[`Date`](/sql-reference/data-types/date) または [`DateTime`](/sql-reference/data-types/datetime) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime64`](/sql-reference/data-types/datetime64) - -**例** - -**その日の開始時刻への切り捨て** - -```sql title=Query -SELECT toStartOfDay(toDateTime('2023-04-21 10:20:30')) -``` - -```response title=Response -┌─toStartOfDay(toDateTime('2023-04-21 10:20:30'))─┐ -│ 2023-04-21 00:00:00 │ -└─────────────────────────────────────────────────┘ -``` - - -## toStartOfFifteenMinutes - -導入バージョン: v1.1 - -日時を直前の15分間区切りの開始時刻に切り捨てます。 - -:::note -戻り値の型は、[`enable_extended_results_for_datetime_functions`](/operations/settings/settings#enable_extended_results_for_datetime_functions) を設定することで変更できます。 -::: - -**構文** - -```sql -toStartOfFifteenMinutes(datetime) -``` - -**引数** - -* `datetime` — 丸める対象の日付または日時。[`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) - -**返される値** - -最も近い15分単位の開始時刻に丸めた日時を返します。[`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) - -**使用例** - -**例** - -```sql title=Query -SELECT - toStartOfFifteenMinutes(toDateTime('2023-04-21 10:17:00')), - toStartOfFifteenMinutes(toDateTime('2023-04-21 10:20:00')), - toStartOfFifteenMinutes(toDateTime('2023-04-21 10:23:00')) -FORMAT Vertical -``` - -```response title=Response -Row 1: -────── -toStartOfFifteenMinutes(toDateTime('2023-04-21 10:17:00')): 2023-04-21 10:15:00 -toStartOfFifteenMinutes(toDateTime('2023-04-21 10:20:00')): 2023-04-21 10:15:00 -toStartOfFifteenMinutes(toDateTime('2023-04-21 10:23:00')): 2023-04-21 10:15:00 -``` - - -## toStartOfFiveMinutes - -導入バージョン: v22.6 - -日時を直前の5分間隔の開始時刻に切り捨てます。 - -:::note -戻り値の型は、[`enable_extended_results_for_datetime_functions`](/operations/settings/settings#enable_extended_results_for_datetime_functions) を設定することで変更できます。 -::: - -**構文** - -```sql -toStartOfFiveMinutes(datetime) -``` - -**別名**: `toStartOfFiveMinute` - -**引数** - -* `datetime` — 丸め対象の日時。[`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) - -**返り値** - -最も近い5分間隔の開始時刻に丸めた日時を返します。型は [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) です。 - -**例** - -**例** - -```sql title=Query -SELECT - toStartOfFiveMinutes(toDateTime('2023-04-21 10:17:00')), - toStartOfFiveMinutes(toDateTime('2023-04-21 10:20:00')), - toStartOfFiveMinutes(toDateTime('2023-04-21 10:23:00')) -FORMAT Vertical -``` - -```response title=Response -Row 1: -────── -toStartOfFiveMinutes(toDateTime('2023-04-21 10:17:00')): 2023-04-21 10:15:00 -toStartOfFiveMinutes(toDateTime('2023-04-21 10:20:00')): 2023-04-21 10:20:00 -toStartOfFiveMinutes(toDateTime('2023-04-21 10:23:00')): 2023-04-21 10:20:00 -``` - - -## toStartOfHour - -導入: v1.1 - -日時をその時間の開始時刻(時単位)に切り捨てます。 - -:::note -戻り値の型は、[`enable_extended_results_for_datetime_functions`](/operations/settings/settings#enable_extended_results_for_datetime_functions) を設定することで変更できます。 -::: - -**構文** - -```sql -toStartOfHour(datetime) -``` - -**引数** - -* `datetime` — 丸め対象の日時。[`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) - -**返される値** - -時刻を切り下げて、その時刻が属する時間の先頭に揃えた日時を返します。[`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) - -**例** - -**時間の先頭への切り下げ** - -```sql title=Query -SELECT - toStartOfHour(toDateTime('2023-04-21 10:20:30')); -``` - -```response title=Response -┌─────────────────res─┬─toTypeName(res)─┐ -│ 2023-04-21 10:00:00 │ DateTime │ -└─────────────────────┴─────────────────┘ -``` - - -## toStartOfISOYear - -導入バージョン: v1.1 - -日付または日時を、ISO 年の初日まで切り捨てます。ISO 年は通常の暦年とは異なる場合があります。詳細は [ISO week date](https://en.wikipedia.org/wiki/ISO_week_date) を参照してください。 - -:::note -戻り値の型は、[`enable_extended_results_for_datetime_functions`](/operations/settings/settings#enable_extended_results_for_datetime_functions) を設定することで変更できます。 -::: - -**構文** - -```sql -toStartOfISOYear(value) -``` - -**引数** - -* `value` — ISO 年の最初の日に切り捨てる対象となる日付または日時。[`Date`](/sql-reference/data-types/date)、[`Date32`](/sql-reference/data-types/date32)、[`DateTime`](/sql-reference/data-types/datetime)、[`DateTime64`](/sql-reference/data-types/datetime64) のいずれか。 - -**戻り値** - -指定された日付または日時が属する ISO 年の最初の日を返します。型は [`Date`](/sql-reference/data-types/date) です。 - -**使用例** - -**ISO 年の最初の日への切り捨て** - -```sql title=Query -SELECT toStartOfISOYear(toDateTime('2023-04-21 10:20:30')) -``` - -```response title=Response -┌─toStartOfISOYear(toDateTime('2023-04-21 10:20:30'))─┐ -│ 2023-01-02 │ -└─────────────────────────────────────────────────────┘ -``` - - -## toStartOfInterval - -導入バージョン: v20.1 - -この関数は、`toStartOfInterval(date_or_date_with_time, INTERVAL x unit [, time_zone])` という構文で、他の `toStartOf*()` 関数を一般化したものです。 - -例えば、 - -* `toStartOfInterval(t, INTERVAL 1 YEAR)` は `toStartOfYear(t)` と同じ値を返します。 -* `toStartOfInterval(t, INTERVAL 1 MONTH)` は `toStartOfMonth(t)` と同じ値を返します。 -* `toStartOfInterval(t, INTERVAL 1 DAY)` は `toStartOfDay(t)` と同じ値を返します。 -* `toStartOfInterval(t, INTERVAL 15 MINUTE)` は `toStartOfFifteenMinutes(t)` と同じ値を返します。 - -計算は特定の基準時点を起点として行われます。基準は次のとおりです。 - -| Interval | Start | -| ------------------------------------------------- | ---------------------- | -| YEAR | year 0 | -| QUARTER | 1900 Q1 | -| MONTH | 1900 January | -| WEEK | 1970, 1st week (01-05) | -| DAY | 1970-01-01 | -| HOUR | (*) | -| MINUTE | 1970-01-01 00:00:00 | -| SECOND | 1970-01-01 00:00:00 | -| MILLISECOND | 1970-01-01 00:00:00 | -| MICROSECOND | 1970-01-01 00:00:00 | -| NANOSECOND | 1970-01-01 00:00:00 | -| (*) 時間単位の間隔は特別であり、計算は常に当日 00:00:00(真夜中)を基準に行われます。 | | -| そのため、1〜23 の時間値のみが有用です。 | | - -単位として `WEEK` が指定された場合、`toStartOfInterval` は週の開始日を月曜日と見なします。この動作は、デフォルトでは週の開始日が日曜日である `toStartOfWeek` 関数とは異なることに注意してください。 - -2つ目のオーバーロードは、TimescaleDB の `time_bucket()` 関数および PostgreSQL の `date_bin()` 関数の動作を模倣します。 - -**構文** - -```sql -toStartOfInterval(value, INTERVAL x unit[, time_zone]) -toStartOfInterval(value, INTERVAL x unit[, origin[, time_zone]]) -``` - -**別名**: `date_bin`, `time_bucket` - -**引数** - -* `value` — 切り下げ対象の日付、または日時の値。[`Date`](/sql-reference/data-types/date) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) -* `x` — 間隔の長さを表す数値。 - `unit` — 間隔の単位: YEAR, QUARTER, MONTH, WEEK, DAY, HOUR, MINUTE, SECOND, MILLISECOND, MICROSECOND, NANOSECOND。 - `time_zone` — 省略可。タイムゾーン名を表す文字列。 - `origin` — 省略可。計算の基準点(2 番目のオーバーロードでのみ使用)。 - -**返される値** - -入力値を含む間隔の開始時点を返します。[`DateTime`](/sql-reference/data-types/datetime) - -**例** - -**基本的な間隔での丸め** - -```sql title=Query -SELECT toStartOfInterval(toDateTime('2023-01-15 14:30:00'), INTERVAL 1 MONTH) -``` - -```response title=Response -┌─toStartOfInt⋯alMonth(1))─┐ -│ 2023-01-01 │ -└──────────────────────────┘ -``` - -**原点を使用する** - -```sql title=Query -SELECT toStartOfInterval(toDateTime('2023-01-01 14:45:00'), INTERVAL 1 MINUTE, toDateTime('2023-01-01 14:35:30')) -``` - -```response title=Response -┌─toStartOfInt⋯14:35:30'))─┐ -│ 2023-01-01 14:44:30 │ -└──────────────────────────┘ -``` - - -## toStartOfMicrosecond - -導入バージョン: v22.6 - -日時をマイクロ秒の開始時刻に切り捨てます。 - -**構文** - -```sql -toStartOfMicrosecond(datetime[, timezone]) -``` - -**引数** - -* `datetime` — 日付と時刻。[`DateTime64`](/sql-reference/data-types/datetime64) -* `timezone` — 省略可能。返される値に使用するタイムゾーン。指定されていない場合、関数は `value` 引数のタイムゾーンを使用します。[`String`](/sql-reference/data-types/string) - -**戻り値** - -サブマイクロ秒精度での入力値 [`DateTime64`](/sql-reference/data-types/datetime64) - -**例** - -**タイムゾーン指定なしのクエリ** - -```sql title=Query -WITH toDateTime64('2020-01-01 10:20:30.999999999', 9) AS dt64 -SELECT toStartOfMicrosecond(dt64); -``` - -```response title=Response -┌────toStartOfMicrosecond(dt64)─┐ -│ 2020-01-01 10:20:30.999999000 │ -└───────────────────────────────┘ -``` - -**タイムゾーンを指定してクエリを実行** - -```sql title=Query -WITH toDateTime64('2020-01-01 10:20:30.999999999', 9) AS dt64 -SELECT toStartOfMicrosecond(dt64, 'Asia/Istanbul'); -``` - -```response title=Response -┌─toStartOfMicrosecond(dt64, 'Asia/Istanbul')─┐ -│ 2020-01-01 12:20:30.999999000 │ -└─────────────────────────────────────────────┘ -``` - - -## toStartOfMillisecond - -導入: v22.6 - -日時を、そのミリ秒の開始時刻まで切り捨てます。 - -**構文** - -```sql -toStartOfMillisecond(datetime[, timezone]) -``` - -**引数** - -* `datetime` — 日付と時刻。[`DateTime64`](/sql-reference/data-types/datetime64) -* `timezone` — 省略可能。返される値のタイムゾーン。指定されていない場合、関数は `value` 引数のタイムゾーンを使用します。[`String`](/sql-reference/data-types/string) - -**返される値** - -サブミリ秒精度付きの入力値。[`DateTime64`](/sql-reference/data-types/datetime64) - -**例** - -**タイムゾーンなしのクエリ** - -```sql title=Query -WITH toDateTime64('2020-01-01 10:20:30.999999999', 9) AS dt64 -SELECT toStartOfMillisecond(dt64); -``` - -```response title=Response -┌────toStartOfMillisecond(dt64)─┐ -│ 2020-01-01 10:20:30.999000000 │ -└───────────────────────────────┘ -``` - -**タイムゾーン指定でのクエリ** - -```sql title=Query -WITH toDateTime64('2020-01-01 10:20:30.999999999', 9) AS dt64 -SELECT toStartOfMillisecond(dt64, 'Asia/Istanbul'); -``` - -```response title=Response -┌─toStartOfMillisecond(dt64, 'Asia/Istanbul')─┐ -│ 2020-01-01 12:20:30.999000000 │ -└─────────────────────────────────────────────┘ -``` - - -## toStartOfMinute - -導入バージョン: v1.1 - -日時を、その分の開始時刻に切り捨てます。 - -:::note -戻り値の型は、[`enable_extended_results_for_datetime_functions`](/operations/settings/settings#enable_extended_results_for_datetime_functions) を設定することで変更できます。 -::: - -**構文** - -```sql -toStartOfMinute(datetime) -``` - -**引数** - -* `datetime` — 丸める対象の日時。[`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) - -**戻り値** - -分の先頭に切り捨てた日時を返します。[`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) - -**例** - -**分の先頭への切り捨て** - -```sql title=Query -SELECT - toStartOfMinute(toDateTime('2023-04-21 10:20:30')), - toStartOfMinute(toDateTime64('2023-04-21 10:20:30.5300', 8)) -FORMAT Vertical -``` - -```response title=Response -行 1: -────── -toStartOfMinute(toDateTime('2023-04-21 10:20:30')): 2023-04-21 10:20:00 -toStartOfMinute(toDateTime64('2023-04-21 10:20:30.5300', 8)): 2023-04-21 10:20:00 -``` - - -## toStartOfMonth - -導入バージョン: v1.1 - -日付または日時を、その月の月初日に切り下げます。 - -:::note -戻り値の型は、[`enable_extended_results_for_datetime_functions`](/operations/settings/settings#enable_extended_results_for_datetime_functions) を設定することで変更できます。 -::: - -**構文** - -```sql -toStartOfMonth(value) -``` - -**引数** - -* `value` — 月の初日に切り捨てる対象となる日付または日時。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) - -**戻り値** - -指定した日付または日時に対応する月の初日を返します。[`Date`](/sql-reference/data-types/date) - -**使用例** - -**月の初日への切り捨て** - -```sql title=Query -SELECT toStartOfMonth(toDateTime('2023-04-21 10:20:30')) -``` - -```response title=Response -┌─toStartOfMonth(toDateTime('2023-04-21 10:20:30'))─┐ -│ 2023-04-01 │ -└───────────────────────────────────────────────────┘ -``` - - -## toStartOfNanosecond - -導入バージョン: v22.6 - -日時をナノ秒単位に切り捨てます。 - -**構文** - -```sql -toStartOfNanosecond(datetime[, timezone]) -``` - -**引数** - -* `datetime` — 日付と時刻。[`DateTime64`](/sql-reference/data-types/datetime64) -* `timezone` — 省略可。返される値のタイムゾーン。指定しない場合、関数は `value` パラメータのタイムゾーンを使用します。[`String`](/sql-reference/data-types/string) - -**返される値** - -ナノ秒精度を持つ入力値。[`DateTime64`](/sql-reference/data-types/datetime64) - -**例** - -**タイムゾーン指定なしのクエリ** - -```sql title=Query -WITH toDateTime64('2020-01-01 10:20:30.999999999', 9) AS dt64 -SELECT toStartOfNanosecond(dt64); -``` - -```response title=Response -┌─────toStartOfNanosecond(dt64)─┐ -│ 2020-01-01 10:20:30.999999999 │ -└───────────────────────────────┘ -``` - -**タイムゾーンを指定したクエリ** - -```sql title=Query -WITH toDateTime64('2020-01-01 10:20:30.999999999', 9) AS dt64 -SELECT toStartOfNanosecond(dt64, 'Asia/Istanbul'); -``` - -```response title=Response -┌─toStartOfNanosecond(dt64, 'Asia/Istanbul')─┐ -│ 2020-01-01 12:20:30.999999999 │ -└────────────────────────────────────────────┘ -``` - - -## toStartOfQuarter - -導入バージョン: v1.1 - -日付または日時を、その四半期の最初の日まで切り下げます。四半期の最初の日は、1月1日、4月1日、7月1日、または10月1日のいずれかです。 - -:::note -戻り値の型は、[`enable_extended_results_for_datetime_functions`](/operations/settings/settings#enable_extended_results_for_datetime_functions) を設定することで変更できます。 -::: - -**構文** - -```sql -toStartOfQuarter(value) -``` - -**引数** - -* `value` — 四半期の初日に切り捨てる対象の日時または日付。[`Date`](/sql-reference/data-types/date)、[`Date32`](/sql-reference/data-types/date32)、[`DateTime`](/sql-reference/data-types/datetime)、[`DateTime64`](/sql-reference/data-types/datetime64) - -**戻り値** - -指定された日付または日時が属する四半期の初日を返します。[`Date`](/sql-reference/data-types/date) - -**例** - -**四半期の初日への切り捨て** - -```sql title=Query -SELECT toStartOfQuarter(toDateTime('2023-04-21 10:20:30')) -``` - -```response title=Response -┌─toStartOfQuarter(toDateTime('2023-04-21 10:20:30'))─┐ -│ 2023-04-01 │ -└─────────────────────────────────────────────────────┘ -``` - - -## toStartOfSecond - -導入バージョン: v20.5 - -日時を秒単位の開始に切り捨てます。 - -**構文** - -```sql -toStartOfSecond(datetime[, timezone]) -``` - -**引数** - -* `datetime` — 小数秒部分を切り捨てる対象の日時値。[`DateTime64`](/sql-reference/data-types/datetime64) -* `timezone` — 省略可。返される値に適用するタイムゾーン。指定しない場合、関数は `value` パラメータのタイムゾーンを使用します。[`String`](/sql-reference/data-types/string) - -**返される値** - -小数秒部分を除いた入力値を返します。[`DateTime64`](/sql-reference/data-types/datetime64) - -**例** - -**タイムゾーンを指定しないクエリ** - -```sql title=Query -WITH toDateTime64('2020-01-01 10:20:30.999', 3) AS dt64 -SELECT toStartOfSecond(dt64); -``` - -```response title=Response -┌───toStartOfSecond(dt64)─┐ -│ 2020-01-01 10:20:30.000 │ -└─────────────────────────┘ -``` - -**タイムゾーンを指定してクエリを実行する** - -```sql title=Query -WITH toDateTime64('2020-01-01 10:20:30.999', 3) AS dt64 -SELECT toStartOfSecond(dt64, 'Asia/Istanbul'); -``` - -```response title=Response -┌─toStartOfSecond(dt64, 'Asia/Istanbul')─┐ -│ 2020-01-01 13:20:30.000 │ -└────────────────────────────────────────┘ -``` - - -## toStartOfTenMinutes - -導入バージョン: v20.1 - -日時を最も近い 10 分間隔の開始時刻に切り捨てます。 - -:::note -戻り値の型は、[`enable_extended_results_for_datetime_functions`](/operations/settings/settings#enable_extended_results_for_datetime_functions) を設定することで変更できます。 -::: - -**構文** - -```sql -toStartOfTenMinutes(datetime) -``` - -**引数** - -* `datetime` — 時刻を含む日付。型は [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64)。 - -**返り値** - -時刻を含む日付を、最も近い 10 分間隔の開始時刻に丸めた日時を返します。戻り値の型は [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) です。 - -**例** - -**例** - -```sql title=Query -SELECT - toStartOfTenMinutes(toDateTime('2023-04-21 10:17:00')), - toStartOfTenMinutes(toDateTime('2023-04-21 10:20:00')), - toStartOfTenMinutes(toDateTime('2023-04-21 10:23:00')) -FORMAT Vertical -``` - -```response title=Response -Row 1: -────── -toStartOfTenMinutes(toDateTime('2023-04-21 10:17:00')): 2023-04-21 10:10:00 -toStartOfTenMinutes(toDateTime('2023-04-21 10:20:00')): 2023-04-21 10:20:00 -toStartOfTenMinutes(toDateTime('2023-04-21 10:23:00')): 2023-04-21 10:20:00 -``` - - -## toStartOfWeek - -導入: v20.1 - -日付または日時を、日曜日または月曜日を週の開始日とみなして、その直前の該当する日付に切り捨てます。 - -:::note -戻り値の型は、[`enable_extended_results_for_datetime_functions`](/operations/settings/settings#enable_extended_results_for_datetime_functions) を設定することで制御できます。 -::: - -**構文** - -```sql -toStartOfWeek(datetime[, mode[, timezone]]) -``` - -**引数** - -* `datetime` — 変換対象の日付または日時。[`Date`](/sql-reference/data-types/date) または [`DateTime`](/sql-reference/data-types/datetime) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime64`](/sql-reference/data-types/datetime64) -* `mode` — `toWeek()` 関数で説明されているように、週の開始曜日を決定します。デフォルトは `0`。[`UInt8`](/sql-reference/data-types/int-uint) -* `timezone` — 変換に使用するタイムゾーン。指定しない場合はサーバーのタイムゾーンが使用されます。[`String`](/sql-reference/data-types/string) - -**戻り値** - -`mode` に応じて、指定された日付の同日またはそれ以前における、最も近い日曜日または月曜日の日付を返します。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) - -**使用例** - -**最も近い日曜日または月曜日への切り捨て** - -```sql title=Query -SELECT - toStartOfWeek(toDateTime('2023-04-21 10:20:30')), /* 金曜日 */ - toStartOfWeek(toDateTime('2023-04-21 10:20:30'), 1), /* 金曜日 */ - toStartOfWeek(toDate('2023-04-24')), /* 月曜日 */ - toStartOfWeek(toDate('2023-04-24'), 1) /* 月曜日 */ - FORMAT Vertical -``` - -```response title=Response -Row 1: - ────── - toStartOfWeek(toDateTime('2023-04-21 10:20:30')): 2023-04-17 - toStartOfWeek(toDateTime('2023-04-21 10:20:30'), 1): 2023-04-17 - toStartOfWeek(toDate('2023-04-24')): 2023-04-24 - toStartOfWeek(toDate('2023-04-24'), 1): 2023-04-24 -``` - - -## toStartOfYear - -導入バージョン: v1.1 - -日付または日時を、その年の最初の日(1月1日)に切り下げます。戻り値は `Date` オブジェクトです。 - -:::note -戻り値の型は、[`enable_extended_results_for_datetime_functions`](/operations/settings/settings#enable_extended_results_for_datetime_functions) を設定することで変更できます。 -::: - -**構文** - -```sql -toStartOfYear(value) -``` - -**引数** - -* `value` — 切り捨て対象の日付または日時。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) - -**返り値** - -指定された日付/日時に対して、その年の初日を [`Date`](/sql-reference/data-types/date) 型で返します。 - -**例** - -**年の初日への切り捨て** - -```sql title=Query -SELECT toStartOfYear(toDateTime('2023-04-21 10:20:30')) -``` - -```response title=Response -┌─toStartOfYear(toDateTime('2023-04-21 10:20:30'))─┐ -│ 2023-01-01 │ -└──────────────────────────────────────────────────┘ -``` - - -## toTimeWithFixedDate - -導入バージョン: v1.1 - -日付、または日時から時間部分を抽出します。 -返される結果は、現在は `1970-01-02` に固定された時点からのオフセットですが、 -この固定時点そのものは将来変更される可能性のある実装上の詳細です。 - -そのため、`toTime` を単独で使用することは想定されていません。 -この関数の主な目的は、2 つの日付または日時同士の時間差を計算することです(例: `toTime(dt1) - toTime(dt2)`)。 - -**構文** - -```sql -toTime(date[, timezone]) -``` - -**引数** - -* `date` — 時刻に変換する日付。[`Date`](/sql-reference/data-types/date) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) -* `timezone` — 省略可能。返される値のタイムゾーン。[`String`](/sql-reference/data-types/string) - -**返り値** - -日付または日時から、固定された基準時点(現在は 1970-01-02)へのオフセットとして、時刻部分を返します。[`DateTime`](/sql-reference/data-types/datetime) - -**例** - -**2 つの日付間の時間差を計算する** - -```sql title=Query -SELECT toTime('2025-06-15 12:00:00'::DateTime) - toTime('2024-05-10 11:00:00'::DateTime) AS result, toTypeName(result) -``` - -```response title=Response -┌─result─┬─toTypeName(result)─┐ -│ 3600 │ Int32 │ -└────────┴────────────────────┘ -``` - - -## toTimezone - -導入バージョン: v1.1 - -`DateTime` または `DateTime64` を指定したタイムゾーンに変換します。 -データの内部値(UNIX 時間の秒数)は変化しません。 -変化するのは、値に設定されているタイムゾーン属性と値の文字列表現だけです。 - -**構文** - -```sql -toTimeZone(datetime, timezone) -``` - -**エイリアス**: `toTimeZone` - -**引数** - -* `date` — 変換する値。[`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) -* `timezone` — 変換先のタイムゾーン名。[`String`](/sql-reference/data-types/string) - -**返される値** - -入力と同じタイムスタンプを、指定されたタイムゾーンを持つ [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) として返します。 - -**例** - -**使用例** - -```sql title=Query -SELECT toDateTime('2019-01-01 00:00:00', 'UTC') AS time_utc, -toTypeName(time_utc) AS type_utc, -toInt32(time_utc) AS int32utc, -toTimeZone(time_utc, 'Asia/Yekaterinburg') AS time_yekat, -toTypeName(time_yekat) AS type_yekat, -toInt32(time_yekat) AS int32yekat, -toTimeZone(time_utc, 'US/Samoa') AS time_samoa, -toTypeName(time_samoa) AS type_samoa, -toInt32(time_samoa) AS int32samoa -FORMAT Vertical; -``` - -```response title=Response -行 1: -────── -time_utc: 2019-01-01 00:00:00 -type_utc: DateTime('UTC') -int32utc: 1546300800 -time_yekat: 2019-01-01 05:00:00 -type_yekat: DateTime('Asia/Yekaterinburg') -int32yekat: 1546300800 -time_samoa: 2018-12-31 13:00:00 -type_samoa: DateTime('US/Samoa') -int32samoa: 1546300800 -``` - - -## toUTCTimestamp - -導入バージョン: v23.8 - -あるタイムゾーンの `date` または日時の値を、UTC タイムゾーンのタイムスタンプに変換します。この関数は主に Apache Spark や類似のフレームワークとの互換性のために提供されています。 - -**構文** - -```sql -toUTCTimestamp(datetime, time_zone) -``` - -**別名**: `to_utc_timestamp` - -**引数** - -* `datetime` — 日付または日時型の定数値または式。[`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) -* `time_zone` — タイムゾーンを表す String 型の定数値または式。[`String`](/sql-reference/data-types/string) - -**戻り値** - -UTC タイムゾーンでの日付または日時を返します。[`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) - -**例** - -**タイムゾーンを UTC に変換** - -```sql title=Query -SELECT toUTCTimestamp(toDateTime('2023-03-16'), 'Asia/Shanghai') -``` - -```response title=Response -┌─toUTCTimestamp(toDateTime('2023-03-16'), 'Asia/Shanghai')─┐ -│ 2023-03-15 16:00:00 │ -└─────────────────────────────────────────────────────────┘ -``` - - -## toUnixTimestamp - -導入バージョン: v1.1 - -`String`、`Date`、または `DateTime` を、`1970-01-01 00:00:00 UTC` からの経過秒を表す Unix タイムスタンプ(`UInt32` 型)に変換します。 - -**構文** - -```sql -toUnixTimestamp(date[, timezone]) -``` - -**引数** - -* `date` — 変換する値。[`Date`](/sql-reference/data-types/date)、[`Date32`](/sql-reference/data-types/date32)、[`DateTime`](/sql-reference/data-types/datetime)、[`DateTime64`](/sql-reference/data-types/datetime64)、または [`String`](/sql-reference/data-types/string) -* `timezone` — 省略可能。変換に使用するタイムゾーンです。指定しない場合はサーバーのタイムゾーンが使用されます。[`String`](/sql-reference/data-types/string) - -**戻り値** - -Unixタイムスタンプを返します。[`UInt32`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT -'2017-11-05 08:07:47' AS dt_str, -toUnixTimestamp(dt_str) AS from_str, -toUnixTimestamp(dt_str, 'Asia/Tokyo') AS from_str_tokyo, -toUnixTimestamp(toDateTime(dt_str)) AS from_datetime, -toUnixTimestamp(toDateTime64(dt_str, 0)) AS from_datetime64, -toUnixTimestamp(toDate(dt_str)) AS from_date, -toUnixTimestamp(toDate32(dt_str)) AS from_date32 -FORMAT Vertical; -``` - -```response title=Response -Row 1: -────── -dt_str: 2017-11-05 08:07:47 -from_str: 1509869267 -from_str_tokyo: 1509836867 -from_datetime: 1509869267 -from_datetime64: 1509869267 -from_date: 1509840000 -from_date32: 1509840000 -``` - - -## toWeek - -導入バージョン: v20.1 - -この関数は、日付または日時に対する週番号を返します。2 つの引数を取る `toWeek()` 形式では、週の開始曜日を日曜日または月曜日から選択できるほか、戻り値の範囲を `0` ~ `53` にするか `1` ~ `53` にするかを指定できます。 - -[`toISOWeek()`](#toWeek) は互換性のための関数であり、`toWeek(date,3)` と等価です。 - -次の表は、mode 引数の動作を示します。 - -| Mode | First day of week | Range | Week 1 is the first week ... | -| ---- | ----------------- | ----- | ---------------------------- | -| 0 | Sunday | 0-53 | この年に日曜日を含む週 | -| 1 | Monday | 0-53 | この年に 4 日以上含まれる週 | -| 2 | Sunday | 1-53 | この年に日曜日を含む週 | -| 3 | Monday | 1-53 | この年に 4 日以上含まれる週 | -| 4 | Sunday | 0-53 | この年に 4 日以上含まれる週 | -| 5 | Monday | 0-53 | この年に月曜日を含む週 | -| 6 | Sunday | 1-53 | この年に 4 日以上含まれる週 | -| 7 | Monday | 1-53 | この年に月曜日を含む週 | -| 8 | Sunday | 1-53 | 1 月 1 日を含む週 | -| 9 | Monday | 1-53 | 1 月 1 日を含む週 | - -意味が「この年に 4 日以上含まれる週」となる mode 値では、週番号は ISO 8601:1988 に従って付与されます: - -* 1 月 1 日を含む週に、新しい年の日が 4 日以上含まれている場合、その週が week 1 になります。 -* そうでない場合、その週は前年の最終週となり、その次の週が week 1 になります。 - -意味が「1 月 1 日を含む」となる mode 値では、1 月 1 日を含む週が week 1 になります。 -その週に新しい年の日が何日含まれているかは関係なく、1 日だけしか含まれていなくても同様です。 -つまり、12 月の最終週が翌年の 1 月 1 日を含む場合、その週は翌年の week 1 となります。 - -最初の引数は、[`parseDateTime64BestEffort()`](type-conversion-functions.md#parsedatetime64besteffort) がサポートする形式の [`String`](../data-types/string.md) で指定することもできます。文字列引数のサポートは、特定のサードパーティーツールが期待する MySQL との互換性のためにのみ存在します。将来的には、文字列引数のサポートが新しい MySQL 互換性設定に依存するよう変更される可能性があること、また一般的に文字列のパースは遅い処理であることから、この機能の使用は推奨されません。 - -**構文** - -```sql -toWeek(datetime[, mode[, time_zone]]) -``` - -**別名**: `week` - -**引数** - -* `datetime` — 週番号を取得する対象の日付、または日時。[`Date`](/sql-reference/data-types/date) または [`DateTime`](/sql-reference/data-types/datetime) -* `mode` — 省略可能。`0` から `9` のモードで、週の開始曜日と週番号の範囲を決定します。デフォルトは `0`。 -* `time_zone` — 省略可能。タイムゾーン。[`String`](/sql-reference/data-types/string) - -**返される値** - -指定したモードに従った週番号を返します。[`UInt32`](/sql-reference/data-types/int-uint) - -**例** - -**異なるモードで週番号を取得する** - -```sql title=Query -SELECT toDate('2016-12-27') AS date, toWeek(date) AS week0, toWeek(date,1) AS week1, toWeek(date,9) AS week9 -``` - -```response title=Response -┌───────date─┬─week0─┬─week1─┬─week9─┐ -│ 2016-12-27 │ 52 │ 52 │ 1 │ -└────────────┴───────┴───────┴───────┘ -``` - - -## toYYYYMM - -導入バージョン: v1.1 - -日付、または日付と時刻を、年と月を表す `UInt32` 型の数値(YYYY * 100 + MM)に変換します。 -2 番目の省略可能な引数としてタイムゾーンを受け取ります。指定する場合、タイムゾーンは文字列リテラルでなければなりません。 - -この関数は、関数 `YYYYMMDDToDate()` の逆の動作を行います。 - -**構文** - -```sql -toYYYYMM(datetime[, timezone]) -``` - -**引数** - -* `datetime` — 変換対象の日付または日時。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) -* `timezone` — 省略可能。変換に使用するタイムゾーン。指定する場合、タイムゾーンは文字列定数である必要があります。[`String`](/sql-reference/data-types/string) - -**戻り値** - -年と月の値を含む UInt32 型の数値を返します (YYYY * 100 + MM)。[`UInt32`](/sql-reference/data-types/int-uint) - -**例** - -**現在の日付を YYYYMM 形式に変換する** - -```sql title=Query -SELECT toYYYYMM(now(), 'US/Eastern') -``` - -```response title=Response -┌─toYYYYMM(now(), 'US/Eastern')─┐ -│ 202303 │ -└───────────────────────────────┘ -``` - - -## toYYYYMMDD - -導入バージョン: v1.1 - -日付または日時を、年・月・日を表す `UInt32` 型の数値(YYYY * 10000 + MM * 100 + DD)に変換します。第 2 引数として任意のタイムゾーンを指定できます。指定する場合、タイムゾーンは文字列リテラルでなければなりません。 - -**構文** - -```sql -toYYYYMMDD(datetime[, timezone]) -``` - -**引数** - -* `datetime` — 変換対象の日付または日時。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) -* `timezone` — 省略可。変換に使用するタイムゾーン。指定する場合、タイムゾーンは文字列定数である必要があります。[`String`](/sql-reference/data-types/string) - -**戻り値** - -年・月・日を含む `UInt32` 値(YYYY * 10000 + MM * 100 + DD)を返します。[`UInt32`](/sql-reference/data-types/int-uint) - -**例** - -**現在の日付を YYYYMMDD 形式に変換する** - -```sql title=Query -SELECT toYYYYMMDD(now(), 'US/Eastern') -``` - -```response title=Response -┌─toYYYYMMDD(now(), 'US/Eastern')─┐ -│ 20230302 │ -└─────────────────────────────────┘ -``` - - -## toYYYYMMDDhhmmss - -導入バージョン: v1.1 - -日付、または日時を、年・月・日・時・分・秒を含む `UInt64` 型の数値 (YYYY * 10000000000 + MM * 100000000 + DD * 1000000 + hh * 10000 + mm * 100 + ss) に変換します。 -オプションの第 2 引数としてタイムゾーンを受け取ります。指定する場合、タイムゾーンは文字列定数でなければなりません。 - -**構文** - -```sql -toYYYYMMDDhhmmss(datetime[, timezone]) -``` - -**引数** - -* `datetime` — 変換対象の日付または日時。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) -* `timezone` — 省略可能。変換に使用するタイムゾーン。指定する場合、タイムゾーンは文字列定数でなければなりません。[`String`](/sql-reference/data-types/string) - -**返り値** - -年、月、日、時、分、秒 (YYYY * 10000000000 + MM * 100000000 + DD * 1000000 + hh * 10000 + mm * 100 + ss) を表す `UInt64` 型の数値を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**使用例** - -**現在の日付と時刻を YYYYMMDDhhmmss 形式に変換** - -```sql title=Query -SELECT toYYYYMMDDhhmmss(now(), 'US/Eastern') -``` - -```response title=Response -┌─toYYYYMMDDhhmmss(now(), 'US/Eastern')─┐ -│ 20230302112209 │ -└───────────────────────────────────────┘ -``` - - -## toYear - -導入バージョン: v1.1 - -`Date` または `DateTime` 値の西暦年の部分を返します。 - -**構文** - -```sql -toYear(datetime) -``` - -**別名**: `YEAR` - -**引数** - -* `datetime` — 年を取得する対象とする日付または日時。[`Date`](/sql-reference/data-types/date) または [`Date32`](/sql-reference/data-types/date32) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) - -**返り値** - -指定された Date または DateTime の年を返します。型は [`UInt16`](/sql-reference/data-types/int-uint) です。 - -**例** - -**使用例** - -```sql title=Query -SELECT toYear(toDateTime('2023-04-21 10:20:30')) -``` - -```response title=Response -┌─toYear(toDateTime('2023-04-21 10:20:30'))─┐ -│ 2023 │ -└───────────────────────────────────────────┘ -``` - - -## toYearNumSinceEpoch - -導入バージョン: v25.3 - -1970 年からの経過年数を返します。 - -**構文** - -```sql -toYearNumSinceEpoch(date) -``` - -**引数** - -* `date` — 変換する日付または日時。[`Date`](/sql-reference/data-types/date) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) - -**戻り値** - -正の整数値 - -**例** - -**例** - -```sql title=Query -SELECT toYearNumSinceEpoch(toDate('2024-10-01')) -``` - -```response title=Response -54 -``` - - -## toYearWeek - -導入バージョン: v20.1 - -日付について、年と週番号を返します。結果で返される年は、その年の最初および最後の週では、引数として指定した日付の年と異なる場合があります。 - -`mode` 引数は、[`toWeek()`](/sql-reference/functions/date-time-functions#toWeek) の `mode` 引数と同様に動作します。 - -警告: `toYearWeek()` が返す週番号は、`toWeek()` が返す値と異なる場合があります。`toWeek()` は常に与えられた日付が属する年の範囲内で週番号を返し、`toWeek()` が `0` を返す場合には、`toYearWeek()` は前年の最終週に対応する値を返します。下記の例にある `prev_yearWeek` を参照してください。 - -最初の引数は、[`parseDateTime64BestEffort()`](type-conversion-functions.md#parsedatetime64besteffort) でサポートされる形式の [`String`](../data-types/string.md) として指定することもできます。文字列引数のサポートは、一部のサードパーティーツールが期待する MySQL との互換性のためだけに存在します。将来的には、文字列引数のサポートが新しい MySQL 互換性設定に依存するようになる可能性があり、また一般に文字列のパースは低速であるため、使用しないことを推奨します。 - -**構文** - -```sql -toYearWeek(datetime[, mode[, timezone]]) -``` - -**別名**: `yearweek` - -**引数** - -* `datetime` — 年と週を取得する対象の日付または日時。[`Date`](/sql-reference/data-types/date) または [`DateTime`](/sql-reference/data-types/datetime) -* `mode` — 省略可。`0` から `9` のモードで、週の開始曜日と週番号の範囲を決定します。デフォルトは `0`。 -* `timezone` — 省略可。タイムゾーン。[`String`](/sql-reference/data-types/string) - -**返される値** - -年と週番号を結合した整数値を返します。[`UInt32`](/sql-reference/data-types/int-uint) - -**例** - -**さまざまなモードで年-週の組み合わせを取得する** - -```sql title=Query -SELECT toDate('2016-12-27') AS date, toYearWeek(date) AS yearWeek0, toYearWeek(date,1) AS yearWeek1, toYearWeek(date,9) AS yearWeek9, toYearWeek(toDate('2022-01-01')) AS prev_yearWeek -``` - -```response title=Response -┌───────date─┬─yearWeek0─┬─yearWeek1─┬─yearWeek9─┬─prev_yearWeek─┐ -│ 2016-12-27 │ 201652 │ 201652 │ 201701 │ 202152 │ -└────────────┴───────────┴───────────┴───────────┴───────────────┘ -``` - - -## today - -導入バージョン: v1.1 - -クエリ解析時点での現在の日付を返します。`toDate(now())` と同じです。 - -**構文** - -```sql -today() -``` - -**別名**: `curdate`, `current_date` - -**引数** - -* なし。 - -**戻り値** - -現在の日付([`Date`](/sql-reference/data-types/date) 型)を返します。 - -**例** - -**使用例** - -```sql title=Query -SELECT today() AS today, curdate() AS curdate, current_date() AS current_date FORMAT Pretty -``` - -```response title=Response -┏━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━━━┓ -┃ today ┃ curdate ┃ current_date ┃ -┡━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━┩ -│ 2025-03-03 │ 2025-03-03 │ 2025-03-03 │ -└────────────┴────────────┴──────────────┘ -``` - - -## yesterday - -導入バージョン: v1.1 - -引数は取らず、クエリ解析のいずれかの時点で評価された昨日の日付を返します。 - -**構文** - -```sql -yesterday() -``` - -**引数** - -* なし。 - -**戻り値** - -昨日の日付を返します。[`Date`](/sql-reference/data-types/date) - -**使用例** - -**昨日の日付を取得する** - -```sql title=Query -SELECT yesterday(); -SELECT today() - 1; -``` - -```response title=Response -┌─yesterday()─┐ -│ 2025-06-09 │ -└─────────────┘ -┌─minus(today(), 1)─┐ -│ 2025-06-09 │ -└───────────────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/distance-functions.md b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/distance-functions.md index ac8620d8ce5..7584d14792e 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/distance-functions.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/distance-functions.md @@ -3,629 +3,18 @@ description: '距離関数に関するドキュメント' sidebar_label: '距離' slug: /sql-reference/functions/distance-functions title: '距離関数' -keywords: ['距離関数', 'ノルム', '距離', 'ベクトル'] +keywords: ['distance functions', 'norms', 'distances', 'vectors'] doc_type: 'reference' --- - - # 距離関数 {/* - 以下のタグ内のコンテンツは、ドキュメントフレームワークのビルド時に - system.functions から自動生成されるドキュメントで置き換えられます。タグを変更または削除しないでください。 - 参照: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md + 以下のタグ内の内容は、ドキュメントフレームワークのビルド時に + system.functions から生成されたドキュメントで置き換えられます。タグを変更または削除しないでください。 + 詳細は https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md を参照してください。 */ } - {/*AUTOGENERATED_START*/ } -## L1Distance - -導入バージョン: v21.11 - -`L1` 空間(1-ノルム([タクシー幾何学](https://en.wikipedia.org/wiki/Taxicab_geometry) における距離、いわゆるマンハッタン距離))において、2 つの点(ベクトルの要素を座標とみなしたもの)間の距離を計算します。 - -**構文** - -```sql -L1Distance(vector1, vector2) -``` - -**エイリアス**: `distanceL1` - -**引数** - -* `vector1` — 1つ目のベクトル。[`Tuple(T)`](/sql-reference/data-types/tuple) または [`Array(T)`](/sql-reference/data-types/array) -* `vector2` — 2つ目のベクトル。[`Tuple(T)`](/sql-reference/data-types/tuple) または [`Array(T)`](/sql-reference/data-types/array) - -**戻り値** - -1-ノルム距離を返します。[`UInt32`](/sql-reference/data-types/int-uint) または [`Float64`](/sql-reference/data-types/float) - -**例** - -**基本的な使い方** - -```sql title=Query -SELECT L1Distance((1, 2), (2, 3)) -``` - -```response title=Response -┌─L1Distance((1, 2), (2, 3))─┐ -│ 2 │ -└────────────────────────────┘ -``` - - -## L1Norm - -導入バージョン: v21.11 - -ベクトル要素の絶対値の総和を計算します。 - -**構文** - -```sql -L1Norm(vector) -``` - -**別名**: `normL1` - -**引数** - -* `vector` — 数値のベクトルまたはタプル。[`Array(T)`](/sql-reference/data-types/array) または [`Tuple(T)`](/sql-reference/data-types/tuple) - -**返り値** - -L1 ノルム([タクシー幾何学](https://en.wikipedia.org/wiki/Taxicab_geometry) における距離)を返します。[`UInt*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) - -**使用例** - -**基本的な使い方** - -```sql title=Query -SELECT L1Norm((1, 2)) -``` - -```response title=Response -┌─L1Norm((1, 2))─┐ -│ 3 │ -└────────────────┘ -``` - - -## L1Normalize - -導入バージョン: v21.11 - -与えられたベクトル(タプルの要素が座標)に対して、`L1` 空間([タクシー幾何学](https://en.wikipedia.org/wiki/Taxicab_geometry))における単位ベクトルを計算します。 - -**構文** - -```sql -L1Normalize(tuple) -``` - -**別名**: `normalizeL1` - -**引数** - -* `tuple` — 数値からなるタプル。[`Tuple(T)`](/sql-reference/data-types/tuple) - -**戻り値** - -単位ベクトルを返します。[`Tuple(Float64)`](/sql-reference/data-types/tuple) - -**例** - -**基本的な使用例** - -```sql title=Query -SELECT L1Normalize((1, 2)) -``` - -```response title=Response -┌─L1Normalize((1, 2))─────────────────────┐ -│ (0.3333333333333333,0.6666666666666666) │ -└─────────────────────────────────────────┘ -``` - - -## L2Distance - -導入: v21.11 - -ユークリッド空間において、2つの点間の距離(ここでベクトルの要素が座標を表します)を[ユークリッド距離](https://en.wikipedia.org/wiki/Euclidean_distance)として計算します。 - -**構文** - -```sql -L2Distance(vector1, vector2) -``` - -**別名**: `distanceL2` - -**引数** - -* `vector1` — 1つ目のベクトル。[`Tuple(T)`](/sql-reference/data-types/tuple) または [`Array(T)`](/sql-reference/data-types/array) -* `vector2` — 2つ目のベクトル。[`Tuple(T)`](/sql-reference/data-types/tuple) または [`Array(T)`](/sql-reference/data-types/array) - -**戻り値** - -2-ノルム距離を返します。[`Float64`](/sql-reference/data-types/float) - -**例** - -**基本的な使用方法** - -```sql title=Query -SELECT L2Distance((1, 2), (2, 3)) -``` - -```response title=Response -┌─L2Distance((1, 2), (2, 3))─┐ -│ 1.4142135623730951 │ -└────────────────────────────┘ -``` - - -## L2DistanceTransposed - -導入バージョン: v25.10 - -ユークリッド空間における 2 点間のユークリッド距離([Euclidean distance](https://en.wikipedia.org/wiki/Euclidean_distance))を、ベクトルの各成分を座標として近似的に計算します。 - -**構文** - -```sql -L2DistanceTransposed(vector1, vector2, p) -``` - -**エイリアス**: `distanceL2Transposed` - -**引数** - -* `vectors` — ベクトル。[`QBit(T, UInt64)`](/sql-reference/data-types/qbit) -* `reference` — 参照ベクトル。[`Array(T)`](/sql-reference/data-types/array) -* `p` — 距離計算で各ベクトル要素から使用するビット数(1 から要素のビット幅まで)。量子化レベルによって、精度と速度のトレードオフを調整します。使用するビット数を減らすと I/O と計算は高速になりますが精度は低下し、ビット数を増やすと精度は向上しますがパフォーマンスは低下します。[`UInt`](/sql-reference/data-types/int-uint) - -**戻り値** - -概算の 2-ノルム距離を返します。[`Float64`](/sql-reference/data-types/float) - -**使用例** - -**基本的な使用例** - -```sql title=Query -CREATE TABLE qbit (id UInt32, vec QBit(Float64, 2)) ENGINE = Memory; -INSERT INTO qbit VALUES (1, [0, 1]); -SELECT L2DistanceTransposed(vec, array(1.0, 2.0), 16) FROM qbit;" -``` - -```response title=Response -┌─L2DistanceTransposed([0, 1], [1.0, 2.0], 16)─┐ -│ 1.4142135623730951 │ -└──────────────────────────────────────────────┘ -``` - - -## L2Norm - -導入バージョン: v21.11 - -ベクトル各要素を二乗した値の和の平方根を計算します。 - -**構文** - -```sql -L2Norm(vector) -``` - -**別名**: `normL2` - -**引数** - -* `vector` — 数値のベクトルまたはタプル。[`Tuple(T)`](/sql-reference/data-types/tuple) または [`Array(T)`](/sql-reference/data-types/array) - -**戻り値** - -L2 ノルムまたは[ユークリッド距離](https://en.wikipedia.org/wiki/Euclidean_distance)を返します。[`UInt*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) - -**例** - -**基本的な使用例** - -```sql title=Query -SELECT L2Norm((1, 2)) -``` - -```response title=Response -┌───L2Norm((1, 2))─┐ -│ 2.23606797749979 │ -└──────────────────┘ -``` - - -## L2Normalize - -導入バージョン: v21.11 - -ユークリッド空間において、与えられたベクトル(タプルの要素を座標とする)から単位ベクトルを計算します([ユークリッド距離](https://en.wikipedia.org/wiki/Euclidean_distance) を使用)。 - -**構文** - -```sql -L2Normalize(tuple) -``` - -**別名**: `normalizeL2` - -**引数** - -* `tuple` — 数値のタプル。[`Tuple(T)`](/sql-reference/data-types/tuple) - -**戻り値** - -単位ベクトルを返します。[`Tuple(Float64)`](/sql-reference/data-types/tuple) - -**例** - -**基本的な使用例** - -```sql title=Query -SELECT L2Normalize((3, 4)) -``` - -```response title=Response -┌─L2Normalize((3, 4))─┐ -│ (0.6,0.8) │ -└─────────────────────┘ -``` - - -## L2SquaredDistance - -導入バージョン: v22.7 - -2 つのベクトルの対応する要素の差の二乗の和を計算します。 - -**構文** - -```sql -L2SquaredDistance(vector1, vector2) -``` - -**エイリアス**: `distanceL2Squared` - -**引数** - -* `vector1` — 1つ目のベクトル。[`Tuple(T)`](/sql-reference/data-types/tuple) または [`Array(T)`](/sql-reference/data-types/array) -* `vector2` — 2つ目のベクトル。[`Tuple(T)`](/sql-reference/data-types/tuple) または [`Array(T)`](/sql-reference/data-types/array) - -**返り値** - -2つのベクトルの対応する要素の差の二乗の和を返します。[`Float64`](/sql-reference/data-types/float) - -**例** - -**基本的な使用例** - -```sql title=Query -SELECT L2SquaredDistance([1, 2, 3], [0, 0, 0]) -``` - -```response title=Response -┌─L2SquaredDis⋯ [0, 0, 0])─┐ -│ 14 │ -└──────────────────────────┘ -``` - - -## L2SquaredNorm - -導入バージョン: v22.7 - -ベクトル要素の二乗和の平方根([`L2Norm`](#L2Norm))の二乗を計算します。 - -**構文** - -```sql -L2SquaredNorm(vector) -``` - -**別名**: `normL2Squared` - -**引数** - -* `vector` — 数値のベクトルまたはタプル。[`Array(T)`](/sql-reference/data-types/array) または [`Tuple(T)`](/sql-reference/data-types/tuple) - -**戻り値** - -L2 ノルムの二乗を返します。[`UInt*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) - -**例** - -**基本的な使い方** - -```sql title=Query -SELECT L2SquaredNorm((1, 2)) -``` - -```response title=Response -┌─L2SquaredNorm((1, 2))─┐ -│ 5 │ -└───────────────────────┘ -``` - - -## LinfDistance - -導入バージョン: v21.11 - -ベクトルの要素を座標とみなした 2 点間の距離を、`L_{inf}` 空間([最大ノルム]([https://en.wikipedia.org/wiki/Norm_(mathematics)#Maximum_norm_(special_case_of:_infinity_norm,_uniform_norm,_or_supremum_norm)))で計算します。](https://en.wikipedia.org/wiki/Norm_\(mathematics\)#Maximum_norm_\(special_case_of:_infinity_norm,_uniform_norm,_or_supremum_norm\)))で計算します。) - -**構文** - -```sql -LinfDistance(vector1, vector2) -``` - -**別名**: `distanceLinf` - -**引数** - -* `vector1` — 1番目のベクトル。[`Tuple(T)`](/sql-reference/data-types/tuple) または [`Array(T)`](/sql-reference/data-types/array) -* `vector2` — 2番目のベクトル。[`Tuple(T)`](/sql-reference/data-types/tuple) または [`Array(T)`](/sql-reference/data-types/array) - -**戻り値** - -無限ノルム距離を返します。[`Float64`](/sql-reference/data-types/float) - -**使用例** - -**基本的な使用方法** - -```sql title=Query -SELECT LinfDistance((1, 2), (2, 3)) -``` - -```response title=Response -┌─LinfDistance((1, 2), (2, 3))─┐ -│ 1 │ -└──────────────────────────────┘ -``` - - -## LinfNorm - -導入バージョン: v21.11 - -ベクトル要素の絶対値のうち最大のものを計算します。 - -**構文** - -```sql -LinfNorm(vector) -``` - -**別名**: `normLinf` - -**引数** - -* `vector` — 数値のベクトルまたはタプル。[`Array(T)`](/sql-reference/data-types/array) または [`Tuple(T)`](/sql-reference/data-types/tuple) - -**戻り値** - -Linf ノルム、つまり絶対値の最大値を返します。[`Float64`](/sql-reference/data-types/float) - -**例** - -**基本的な使い方** - -```sql title=Query -SELECT LinfNorm((1, -2)) -``` - -```response title=Response -┌─LinfNorm((1, -2))─┐ -│ 2 │ -└───────────────────┘ -``` - - -## LinfNormalize - -導入バージョン: v21.11 - -与えられたベクトル(タプルの要素を座標とみなす)について、`L_{inf}` 空間における単位ベクトル([最大ノルム](https://en.wikipedia.org/wiki/Norm_\(mathematics\)#Maximum_norm_\(special_case_of:_infinity_norm,_uniform_norm,_or_supremum_norm\))を使用)を計算します。 - -**構文** - -```sql -LinfNormalize(tuple) -``` - -**エイリアス**: `normalizeLinf` - -**引数** - -* `tuple` — 数値のタプル。[`Tuple(T)`](/sql-reference/data-types/tuple) - -**返される値** - -単位ベクトルを返します。[`Tuple(Float64)`](/sql-reference/data-types/tuple) - -**例** - -**基本的な使用例** - -```sql title=Query -SELECT LinfNormalize((3, 4)) -``` - -```response title=Response -┌─LinfNormalize((3, 4))─┐ -│ (0.75,1) │ -└───────────────────────┘ -``` - - -## LpDistance - -導入バージョン: v21.11 - -`Lp` 空間([p-ノルム距離](https://en.wikipedia.org/wiki/Norm_\(mathematics\)#p-norm))において、ベクトルの要素を座標とみなした 2 点間の距離を計算します。 - -**構文** - -```sql -LpDistance(vector1, vector2, p) -``` - -**別名**: `distanceLp` - -**引数** - -* `vector1` — 第1ベクトル。[`Tuple(T)`](/sql-reference/data-types/tuple) または [`Array(T)`](/sql-reference/data-types/array) -* `vector2` — 第2ベクトル。[`Tuple(T)`](/sql-reference/data-types/tuple) または [`Array(T)`](/sql-reference/data-types/array) -* `p` — 冪指数。取りうる値: `[1; inf)` の実数。[`UInt*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) - -**戻り値** - -p-ノルム距離を返します。[`Float64`](/sql-reference/data-types/float) - -**例** - -**基本的な使用方法** - -```sql title=Query -SELECT LpDistance((1, 2), (2, 3), 3) -``` - -```response title=Response -┌─LpDistance((1, 2), (2, 3), 3)─┐ -│ 1.2599210498948732 │ -└───────────────────────────────┘ -``` - - -## LpNorm - -導入バージョン: v21.11 - -ベクトルの p-ノルムを計算します。これは、その要素の絶対値の p 乗の総和の p 乗根です。 - -特別な場合: - -* p=1 のとき、L1Norm(マンハッタン距離)と同等です。 -* p=2 のとき、L2Norm(ユークリッド距離)と同等です。 -* p=∞ のとき、LinfNorm(最大ノルム)と同等です。 - -**構文** - -```sql -LpNorm(vector, p) -``` - -**エイリアス**: `normLp` - -**引数** - -* `vector` — 数値のベクトルまたはタプル。[`Tuple(T)`](/sql-reference/data-types/tuple) または [`Array(T)`](/sql-reference/data-types/array) -* `p` — 冪指数。取り得る値は `[1; inf)` の範囲の実数です。型は [`UInt*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) - -**戻り値** - -[Lp-ノルム](https://en.wikipedia.org/wiki/Norm_\(mathematics\)#p-norm) を返します。型は [`Float64`](/sql-reference/data-types/float) です。 - -**例** - -**基本的な使い方** - -```sql title=Query -SELECT LpNorm((1, -2), 2) -``` - -```response title=Response -┌─LpNorm((1, -2), 2)─┐ -│ 2.23606797749979 │ -└────────────────────┘ -``` - - -## LpNormalize - -導入バージョン: v21.11 - -与えられたベクトル(タプルの要素を座標とする)について、`Lp` 空間における単位ベクトル([p-ノルム](https://en.wikipedia.org/wiki/Norm_\(mathematics\)#p-norm)を用いる)を計算します。 - -**構文** - -```sql -LpNormalize(tuple, p) -``` - -**別名**: `normalizeLp` - -**引数** - -* `tuple` — 数値からなるタプル。[`Tuple(T)`](/sql-reference/data-types/tuple) -* `p` — べき数。取りうる値は `[1; inf)`(1以上の任意の数値)の範囲内。[`UInt*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) - -**戻り値** - -単位ベクトルを返します。[`Tuple(Float64)`](/sql-reference/data-types/tuple) - -**例** - -**使用例** - -```sql title=Query -SELECT LpNormalize((3, 4), 5) -``` - -```response title=Response -┌─LpNormalize((3, 4), 5)──────────────────┐ -│ (0.7187302630182624,0.9583070173576831) │ -└─────────────────────────────────────────┘ -``` - - -## cosineDistance - -導入バージョン: v1.1 - -2 つのベクトル間のコサイン距離を計算します(タプルの要素は座標を表します)。返される値が小さいほど、ベクトル同士の類似度は高くなります。 - -**構文** - -```sql -cosineDistance(vector1, vector2) -``` - -**引数** - -* `vector1` — 1 番目のタプル。[`Tuple(T)`](/sql-reference/data-types/tuple) または [`Array(T)`](/sql-reference/data-types/array) -* `vector2` — 2 番目のタプル。[`Tuple(T)`](/sql-reference/data-types/tuple) または [`Array(T)`](/sql-reference/data-types/array) - -**戻り値** - -2 つのベクトル間のなす角の余弦を 1 から引いた値を返します。[`Float64`](/sql-reference/data-types/float) - -**使用例** - -**基本的な使い方** - -```sql title=Query -SELECT cosineDistance((1, 2), (2, 3)); -``` - -```response title=Response -┌─cosineDistance((1, 2), (2, 3))─┐ -│ 0.007722123286332261 │ -└────────────────────────────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/encoding-functions.md b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/encoding-functions.md index 45240d3b1f8..cb35981f8a0 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/encoding-functions.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/encoding-functions.md @@ -1,1106 +1,20 @@ --- -description: 'エンコード関数のドキュメント' +description: 'エンコード関数に関するドキュメント' sidebar_label: 'エンコード' slug: /sql-reference/functions/encoding-functions title: 'エンコード関数' -keywords: ['エンコーディング', '通常の関数', 'エンコード', 'デコード'] +keywords: ['エンコード', '通常の関数', 'エンコード', 'デコード'] doc_type: 'reference' --- - - # エンコード関数 {/* 以下のタグの内部の内容は、ドキュメントフレームワークのビルド時に - system.functions から生成されるドキュメントに置き換えられます。タグを変更または削除しないでください。 - 詳しくは https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md を参照してください。 + system.functions から自動生成されたドキュメントで置き換えられます。タグを変更または削除しないでください。 + 詳細は https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md を参照してください。 */ } - {/*AUTOGENERATED_START*/ } -## bech32Decode - -導入バージョン: v25.6 - -bech32 または bech32m アルゴリズムのいずれかによって生成された Bech32 アドレス文字列をデコードします。 - -:::note -`encode` 関数とは異なり、`Bech32Decode` はパディング済みの FixedString 型を自動的に処理します。 -::: - -**構文** - -```sql -bech32Decode(address) -``` - -**引数** - -* `address` — デコードする Bech32 形式の文字列。[`String`](/sql-reference/data-types/string) または [`FixedString`](/sql-reference/data-types/fixedstring) - -**戻り値** - -文字列のエンコードに使用された `(hrp, data)` からなるタプルを返します。`data` はバイナリ形式です。[`Tuple(String, String)`](/sql-reference/data-types/tuple) - -**例** - -**アドレスのデコード** - -```sql title=Query -SELECT tup.1 AS hrp, hex(tup.2) AS data FROM (SELECT bech32Decode('bc1w508d6qejxtdg4y5r3zarvary0c5xw7kj7gz7z') AS tup) -``` - -```response title=Response -bc 751E76E8199196D454941C45D1B3A323F1433BD6 -``` - -**テストネットアドレス** - -```sql title=Query -SELECT tup.1 AS hrp, hex(tup.2) AS data FROM (SELECT bech32Decode('tb1w508d6qejxtdg4y5r3zarvary0c5xw7kzp034v') AS tup) -``` - -```response title=Response -tb 751E76E8199196D454941C45D1B3A323F1433BD6 -``` - - -## bech32Encode - -導入バージョン: v25.6 - -バイナリデータ文字列と human-readable part(HRP)を、[Bech32 または Bech32m](https://en.bitcoin.it/wiki/Bech32) アルゴリズムでエンコードします。 - -:::note -[`FixedString`](../data-types/fixedstring.md) データ型を使用する場合、値が列の長さを満たさないときはヌル文字でパディングされます。 -`bech32Encode` 関数は `hrp` 引数についてはこのパディングを自動的に処理しますが、`data` 引数については値がパディングされていてはいけません。 -このため、すべての値が同じ長さであることが確実であり、かつ `FixedString` 列の長さもそれに合わせて設定している場合を除き、 -データ値に [`FixedString`](../data-types/fixedstring.md) データ型を使用することは推奨されません。 -::: - -**構文** - -```sql -bech32Encode(hrp, data[, witver]) -``` - -**引数** - -* `hrp` — コードの「human-readable part(人間可読部)」を指定する、小文字のみからなる `1〜83` 文字の文字列。通常は 'bc' または 'tb'。[`String`](/sql-reference/data-types/string) または [`FixedString`](/sql-reference/data-types/fixedstring) -* `data` — エンコード対象のバイナリデータを表す文字列。[`String`](/sql-reference/data-types/string) または [`FixedString`](/sql-reference/data-types/fixedstring) -* `witver` — 省略可能。witness バージョン(デフォルト = 1)。実行するアルゴリズムのバージョンを指定する `UInt*`。Bech32 の場合は `0`、Bech32m の場合は `1` 以上。[`UInt*`](/sql-reference/data-types/int-uint) - -**戻り値** - -human-readable part と、常に '1' となる区切り文字、およびデータ部から構成される Bech32 アドレス文字列を返します。文字列の長さが 90 文字を超えることはありません。入力から有効なアドレスを生成できない場合は、空文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**デフォルトの Bech32m** - -```sql title=Query --- witness バージョンが指定されていない場合、デフォルトは 1 となり、更新された Bech32m アルゴリズムが使用されます。 -SELECT bech32Encode('bc', unhex('751e76e8199196d454941c45d1b3a323f1433bd6')) -``` - -```response title=Response -bc1w508d6qejxtdg4y5r3zarvary0c5xw7k8zcwmq -``` - -**Bech32 アルゴリズム** - -```sql title=Query --- witness バージョンを 0 に設定すると、異なるアドレス文字列が生成されます。 -SELECT bech32Encode('bc', unhex('751e76e8199196d454941c45d1b3a323f1433bd6'), 0) -``` - -```response title=Response -bc1w508d6qejxtdg4y5r3zarvary0c5xw7kj7gz7z -``` - -**カスタムHRP** - -```sql title=Query --- 'bc'(メインネット)と'tb'(テストネット)はSegWitアドレス形式で許可されている唯一のhrp値ですが、 --- Bech32は上記の要件を満たす任意のhrpを使用できます。 -SELECT bech32Encode('abcdefg', unhex('751e76e8199196d454941c45d1b3a323f1433bd6'), 10) -``` - -```response title=Response -abcdefg1w508d6qejxtdg4y5r3zarvary0c5xw7k9rp8r4 -``` - - -## bin - -導入バージョン: v21.8 - -引数のバイナリ表現を含む文字列を、型ごとに次のロジックに従って返します。 - -| Type | Description | -| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | -| `(U)Int*` | 最上位ビットから最下位ビットへ(ビッグエンディアン、いわゆる「人間が読みやすい」順序)でビット列を出力します。先頭の非ゼロバイトから開始します(先頭のゼロバイトは省略)が、先頭ビットが 0 の場合でも各バイトについて常に 8 桁のビット列を出力します。 | -| `Date` and `DateTime` | 対応する整数値としてフォーマットされます(`Date` はエポックからの日数、`DateTime` は Unix タイムスタンプ値)。 | -| `String` and `FixedString` | すべてのバイトは単純に 8 ビットの 2 進数としてエンコードされます。ゼロバイトも省略されません。 | -| `Float*` and `Decimal` | メモリ上の表現そのものとしてエンコードされます。サポートしているアーキテクチャはリトルエンディアンであるため、リトルエンディアンでエンコードされます。先頭および末尾のゼロバイトも省略されません。 | -| `UUID` | ビッグエンディアン順の文字列としてエンコードされます。 | - -**構文** - -```sql -bin(arg) -``` - -**引数** - -* `arg` — 2 進数に変換する値。[`String`](/sql-reference/data-types/string)、[`FixedString`](/sql-reference/data-types/fixedstring)、[`(U)Int*`](/sql-reference/data-types/int-uint)、[`Float*`](/sql-reference/data-types/float)、[`Decimal`](/sql-reference/data-types/decimal)、[`Date`](/sql-reference/data-types/date)、[`DateTime`](/sql-reference/data-types/datetime) のいずれか。 - -**戻り値** - -引数の 2 進数表現を含む文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**単純な整数** - -```sql title=Query -SELECT bin(14) -``` - -```response title=Response -┌─bin(14)──┐ -│ 00001110 │ -└──────────┘ -``` - -**Float32 型の数値** - -```sql title=Query -SELECT bin(toFloat32(number)) AS bin_presentation FROM numbers(15, 2) -``` - -```response title=Response -┌─bin_presentation─────────────────┐ -│ 00000000000000000111000001000001 │ -│ 00000000000000001000000001000001 │ -└──────────────────────────────────┘ -``` - -**Float64 数値** - -```sql title=Query -SELECT bin(toFloat64(number)) AS bin_presentation FROM numbers(15, 2) -``` - -```response title=Response -┌─bin_presentation─────────────────────────────────────────────────┐ -│ 0000000000000000000000000000000000000000000000000010111001000000 │ -│ 0000000000000000000000000000000000000000000000000011000001000000 │ -└──────────────────────────────────────────────────────────────────┘ -``` - -**UUID 変換** - -```sql title=Query -SELECT bin(toUUID('61f0c404-5cb3-11e7-907b-a6006ad3dba0')) AS bin_uuid -``` - -```response title=Response -┌─bin_uuid─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ -│ 01100001111100001100010000000100010111001011001100010001111001111001000001111011101001100000000001101010110100111101101110100000 │ -└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## bitPositionsToArray - -導入バージョン: v21.7 - -この関数は、符号なし整数の2進表現における値が1のビットの位置を(昇順で)返します。 -符号付き整数の入力は、まず符号なし整数にキャストされます。 - -**構文** - -```sql -bitPositionsToArray(引数) -``` - -**引数** - -* `arg` — 整数値。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**戻り値** - -入力の2進表現において、ビット値が 1 となっている位置を昇順に並べた配列を返します。[`Array(UInt64)`](/sql-reference/data-types/array) - -**例** - -**単一ビットのみがセットされている場合** - -```sql title=Query -SELECT bitPositionsToArray(toInt8(1)) AS bit_positions -``` - -```response title=Response -┌─bit_positions─┐ -│ [0] │ -└───────────────┘ -``` - -**全ビットが 1** - -```sql title=Query -SELECT bitPositionsToArray(toInt8(-1)) AS bit_positions -``` - -```response title=Response -┌─bit_positions─────────────┐ -│ [0, 1, 2, 3, 4, 5, 6, 7] │ -└───────────────────────────┘ -``` - - -## bitmaskToArray - -導入バージョン: v1.1 - -この関数は、整数を 2 の冪の和の形に分解します。 -2 の冪は昇順に並んだ配列として返されます。 - -**構文** - -```sql -bitmaskToArray(num) -``` - -**引数** - -* `num` — 整数値。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返される値** - -入力された数値と等しくなるように合計した 2 の冪を、昇順に並べた配列を返します。[`Array(UInt64)`](/sql-reference/data-types/array) - -**例** - -**基本的な例** - -```sql title=Query -SELECT bitmaskToArray(50) AS powers_of_two -``` - -```response title=Response -┌─powers_of_two───┐ -│ [2, 16, 32] │ -└─────────────────┘ -``` - -**2 のべき乗のみ** - -```sql title=Query -SELECT bitmaskToArray(8) AS powers_of_two -``` - -```response title=Response -┌─powers_of_two─┐ -│ [8] │ -└───────────────┘ -``` - - -## bitmaskToList - -導入バージョン: v1.1 - -bitmaskToArray と同様ですが、2 のべき乗をカンマ区切りの文字列として返します。 - -**構文** - -```sql -bitmaskToList(num) -``` - -**引数** - -* `num` — 整数値。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**戻り値** - -カンマ区切りの 2 のべき乗を含む文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**基本的な例** - -```sql title=Query -SELECT bitmaskToList(50) AS powers_list -``` - -```response title=Response -┌─powers_list───┐ -│ 2, 16, 32 │ -└───────────────┘ -``` - - -## char - -導入バージョン: v20.1 - -渡された引数の数と同じ長さを持ち、各バイトの値が対応する引数の値になる文字列を返します。数値型の複数の引数を受け取ります。 - -引数の値が `UInt8` データ型の範囲外の場合、必要に応じて丸めやオーバーフローが発生しながら `UInt8` に変換されます。 - -**構文** - -```sql -char(num1[, num2[, ...]]) -``` - -**引数** - -* `num1[, num2[, num3 ...]]` — 整数として解釈される数値引数。[`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) - -**戻り値** - -指定されたバイト列からなる文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**基本的な例** - -```sql title=Query -SELECT char(104.1, 101, 108.9, 108.9, 111) AS hello; -``` - -```response title=Response -┌─hello─┐ -│ hello │ -└───────┘ -``` - -**任意のエンコーディングの構築** - -```sql title=Query --- 対応するバイト列を渡すことで、任意のエンコーディングの文字列を生成できます。 --- 例えば UTF-8 の場合 -SELECT char(0xD0, 0xBF, 0xD1, 0x80, 0xD0, 0xB8, 0xD0, 0xB2, 0xD0, 0xB5, 0xD1, 0x82) AS hello; -``` - -```response title=Response -┌─hello──┐ -│ привет │ -└────────┘ -``` - - -## hex - -導入バージョン: v1.1 - -引数の 16 進数表現を表す文字列を、型ごとに次のロジックに従って返します。 - -| Type | Description | -| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | -| `(U)Int*` | 最上位から下位へ(ビッグエンディアン、すなわち「人間が読みやすい」順序)に 16 進数字(「ニブル」)を出力します。最上位の非ゼロバイトから開始し(先頭のゼロバイトは省略されます)が、各バイトについては先頭の桁が 0 であっても必ず 2 桁を出力します。 | -| `Date` および `DateTime` | 対応する整数としてフォーマットされます(`Date` の場合はエポックからの日数、`DateTime` の場合は Unix タイムスタンプの値)。 | -| `String` および `FixedString` | すべてのバイトが単純に 2 桁の 16 進数としてエンコードされます。0 バイトも省略されません。 | -| `Float*` および `Decimal` | メモリ上の表現としてエンコードされます。ClickHouse は内部的に値を常にリトルエンディアンで表現するため、その形式でエンコードされます。先頭および末尾の 0 バイトも省略されません。 | -| `UUID` | ビッグエンディアン順の文字列としてエンコードされます。 | - -この関数は `A-F` の大文字を使用し、プレフィックス(`0x` など)やサフィックス(`h` など)は使用しません。 - -**構文** - -```sql -hex(arg) -``` - -**引数** - -* `arg` — 16進数に変換する値。[`String`](/sql-reference/data-types/string) または [`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) または [`Date`](/sql-reference/data-types/date) または [`DateTime`](/sql-reference/data-types/datetime) - -**戻り値** - -引数を16進数で表現した文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**単純な整数** - -```sql title=Query -SELECT hex(1) -``` - -```response title=Response -01 -``` - -**Float32 型の数値** - -```sql title=Query -SELECT hex(toFloat32(number)) AS hex_presentation FROM numbers(15, 2) -``` - -```response title=Response -┌─hex_presentation─┐ -│ 00007041 │ -│ 00008041 │ -└──────────────────┘ -``` - -**Float64 型の数値** - -```sql title=Query -SELECT hex(toFloat64(number)) AS hex_presentation FROM numbers(15, 2) -``` - -```response title=Response -┌─hex_presentation─┐ -│ 0000000000002E40 │ -│ 0000000000003040 │ -└──────────────────┘ -``` - -**UUID 変換** - -```sql title=Query -SELECT lower(hex(toUUID('61f0c404-5cb3-11e7-907b-a6006ad3dba0'))) AS uuid_hex -``` - -```response title=Response -┌─uuid_hex─────────────────────────┐ -│ 61f0c4045cb311e7907ba6006ad3dba0 │ -└──────────────────────────────────┘ -``` - - -## hilbertDecode - -導入バージョン: v24.6 - -Hilbert 曲線のインデックスを復号し、多次元空間における座標を表す符号なし整数のタプルに変換します。 - -`hilbertEncode` 関数と同様に、この関数には 2 つの動作モードがあります。 - -* **シンプル** -* **拡張** - -**シンプルモード** - -最大 2 個までの符号なし整数を引数として受け取り、`UInt64` コードを生成します。 - -**拡張モード** - -最初の引数として範囲マスク(タプル)を受け取り、他の引数として最大 2 個までの符号なし整数を -受け取ります。マスク内の各数値は、それに対応する引数を左シフトするビット数を指定し、 -事実上、その引数をその範囲内でスケーリングします。 - -範囲の拡張は、範囲(またはカーディナリティ)が大きく異なる引数間で -類似した分布を得たい場合に有用です。例: 「IP アドレス」`(0...FFFFFFFF)` と -「国コード」`(0...FF)`。エンコード関数と同様に、最大 8 個の数値までに制限されています。 - -**構文** - -```sql -hilbertDecode(tuple_size, code) -``` - -**引数** - -* `tuple_size` — `2` 以下の整数値。[`UInt8/16/32/64`](/sql-reference/data-types/int-uint) または [`Tuple(UInt8/16/32/64)`](/sql-reference/data-types/tuple) -* `code` — `UInt64` 型のコード。[`UInt64`](/sql-reference/data-types/int-uint) - -**返り値** - -指定されたサイズのタプルを返します。[`Tuple(UInt64)`](/sql-reference/data-types/tuple) - -**例** - -**シンプルモード** - -```sql title=Query -SELECT hilbertDecode(2, 31) -``` - -```response title=Response -["3", "4"] -``` - -**単一の引数** - -```sql title=Query --- 1つの引数に対するヒルベルト符号は、常にその引数自体(タプルとして)です。 -SELECT hilbertDecode(1, 1) -``` - -```response title=Response -["1"] -``` - -**拡張モード** - -```sql title=Query --- ビットシフトを指定するタプルを持つ単一の引数は、それに応じて右シフトされます。 -SELECT hilbertDecode(tuple(2), 32768) -``` - -```response title=Response -["128"] -``` - -**列の利用** - -```sql title=Query --- まずテーブルを作成し、いくつかのデータを挿入します -CREATE TABLE hilbert_numbers( - n1 UInt32, - n2 UInt32 -) -ENGINE=MergeTree() -ORDER BY n1 SETTINGS index_granularity = 8192, index_granularity_bytes = '10Mi'; -insert into hilbert_numbers (*) values(1,2); - --- 関数の引数には定数ではなくカラム名を使用します -SELECT untuple(hilbertDecode(2, hilbertEncode(n1, n2))) FROM hilbert_numbers; -``` - -```response title=Response -1 2 -``` - - -## hilbertEncode - -導入バージョン: v24.6 - -符号なし整数のリストに対して、Hilbert 曲線のコードを計算します。 - -この関数には 2 つの動作モードがあります。 - -* **Simple** -* **Expanded** - -**Simple モード** - -最大 2 個の符号なし整数を引数として受け取り、UInt64 のコードを生成します。 - -**Expanded モード** - -最初の引数として範囲マスク ([Tuple](../../sql-reference/data-types/tuple.md)) を、 -その他の引数として最大 2 個の[符号なし整数](../../sql-reference/data-types/int-uint.md) -を受け取ります。 - -マスク中のそれぞれの数値は、対応する引数を左シフトするビット数を指定し、 -対応する引数をその範囲内でスケーリングします。 - -**構文** - -```sql --- シンプルモード -hilbertEncode(args) - --- 拡張モード -hilbertEncode(range_mask, args) -``` - -**引数** - -* `args` — 最大 2 つの `UInt` 値、または `UInt` 型のカラム。[`UInt8/16/32/64`](/sql-reference/data-types/int-uint) -* `range_mask` — 拡張モードでは、最大 2 つの `UInt` 値、または `UInt` 型のカラム。[`UInt8/16/32/64`](/sql-reference/data-types/int-uint) - -**戻り値** - -`UInt64` のコードを返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**シンプルモード** - -```sql title=Query -SELECT hilbertEncode(3, 4) -``` - -```response title=Response -31 -``` - -**拡張モード** - -```sql title=Query --- 範囲の拡張は、範囲(またはカーディナリティ)が大きく異なる引数に対しても、 --- 似たような分布が必要な場合に有用です。 --- 例: 「IPアドレス」(0...FFFFFFFF) と 「国コード」(0...FF)。 --- 注意: タプルのサイズは、他の引数の個数と等しくなければなりません。 -SELECT hilbertEncode((10, 6), 1024, 16) -``` - -```response title=Response -4031541586602 -``` - -**単一引数** - -```sql title=Query --- タプルではない単一の引数が指定された場合、この関数は --- 次元マッピングが不要なため、その引数自体を Hilbert インデックスとして返します。 -SELECT hilbertEncode(1) -``` - -```response title=Response -1 -``` - -**展開後の単一引数** - -```sql title=Query --- タプルでビットシフトを指定した単一の引数が提供された場合、 --- 関数は指定されたビット数だけ引数を左にシフトします。 -SELECT hilbertEncode(tuple(2), 128) -``` - -```response title=Response -512 -``` - -**列の使用方法** - -```sql title=Query --- まずテーブルを作成し、いくつかデータを挿入します -CREATE TABLE hilbert_numbers( - n1 UInt32, - n2 UInt32 -) -ENGINE=MergeTree() -ORDER BY n1; -insert into hilbert_numbers (*) values(1, 2); - --- 関数の引数には定数ではなくカラム名を使用します -SELECT hilbertEncode(n1, n2) FROM hilbert_numbers; -``` - -```response title=Response -13 -``` - - -## mortonDecode - -導入バージョン: v24.6 - -Morton 符号化 (ZCurve) を対応する符号なし整数タプルにデコードします。 - -`mortonEncode` 関数と同様に、この関数には 2 つの動作モードがあります。 - -* **シンプル** -* **拡張** - -**シンプルモード** - -最初の引数として結果タプルのサイズ、2 番目の引数としてコードを受け取ります。 - -**拡張モード** - -最初の引数として範囲マスク (タプル)、2 番目の引数としてコードを受け取ります。 -マスク内の各数値は、範囲縮小の度合いを設定します。 - -* `1` - 縮小なし -* `2` - 2 倍の縮小 -* `3` - 3 倍の縮小 - ⋮ -* 最大 8 倍の縮小。 - -引数ごとの範囲 (またはカーディナリティ) が大きく異なる場合に、類似した分布が必要なときは、 -範囲の拡張を行うことが有用です。例: 'IP Address' `(0...FFFFFFFF)` と -'Country code' `(0...FF)`。エンコード関数と同様に、これは最大 8 個の数値までに制限されます。 - -**構文** - -```sql --- シンプルモード -mortonDecode(tuple_size, code) - --- 拡張モード -mortonDecode(range_mask, code) -``` - -**引数** - -* `tuple_size` — 8 以下の整数値。 [`UInt8/16/32/64`](/sql-reference/data-types/int-uint) -* `range_mask` — 拡張モードにおいて、各引数に対するマスク。マスクは符号なし整数のタプルで、マスク内の各数値で範囲の縮小量を設定する。 [`Tuple(UInt8/16/32/64)`](/sql-reference/data-types/tuple) -* `code` — UInt64 のコード。 [`UInt64`](/sql-reference/data-types/int-uint) - -**戻り値** - -指定したサイズのタプルを返す。 [`Tuple(UInt64)`](/sql-reference/data-types/tuple) - -**例** - -**シンプルモード** - -```sql title=Query -SELECT mortonDecode(3, 53) -``` - -```response title=Response -["1", "2", "3"] -``` - -**単一引数** - -```sql title=Query -SELECT mortonDecode(1, 1) -``` - -```response title=Response -["1"] -``` - -**拡張モード:引数を 1 つにまとめる** - -```sql title=Query -SELECT mortonDecode(tuple(2), 32768) -``` - -```response title=Response -["128"] -``` - -**カラムの使用** - -```sql title=Query --- まずテーブルを作成し、データを挿入します -CREATE TABLE morton_numbers( - n1 UInt32, - n2 UInt32, - n3 UInt16, - n4 UInt16, - n5 UInt8, - n6 UInt8, - n7 UInt8, - n8 UInt8 -) -ENGINE=MergeTree() -ORDER BY n1; -INSERT INTO morton_numbers (*) values(1, 2, 3, 4, 5, 6, 7, 8); - --- 関数の引数として定数の代わりに列名を使用します -SELECT untuple(mortonDecode(8, mortonEncode(n1, n2, n3, n4, n5, n6, n7, n8))) FROM morton_numbers; -``` - -```response title=Response -1 2 3 4 5 6 7 8 -``` - - -## mortonEncode - -導入バージョン: v24.6 - -符号なし整数のリストに対して、Morton 符号化(ZCurve)を計算します。 - -この関数には 2 つの動作モードがあります: - -* **シンプル** -* *拡張* - -**シンプルモード** - -最大 8 個の符号なし整数を引数として受け取り、`UInt64` のコード値を生成します。 - -**拡張モード** - -最初の引数として範囲マスク([Tuple](../data-types/tuple.md))を受け取り、 -その他の引数として最大 8 個の[符号なし整数](../data-types/int-uint.md)を受け取ります。 - -マスク内の各数値は、範囲拡張の倍率を指定します: - -* 1 - 拡張なし -* 2 - 2 倍拡張 -* 3 - 3 倍拡張 - ⋮ -* 最大 8 倍拡張。 - -**構文** - -```sql --- 簡易モード -mortonEncode(args) - --- 拡張モード -mortonEncode(range_mask, args) -``` - -**引数** - -* `args` — 最大 8 個の符号なし整数、または前述の型のカラム。[`UInt8/16/32/64`](/sql-reference/data-types/int-uint) -* `range_mask` — 拡張モードで使用する、各引数に対応するマスク。マスクは `1`〜`8` の符号なし整数からなるタプルです。マスク内の各数値は、範囲をどれだけ縮小するかの量を設定します。[`Tuple(UInt8/16/32/64)`](/sql-reference/data-types/tuple) - -**戻り値** - -`UInt64` のコードを返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**シンプルモード** - -```sql title=Query -SELECT mortonEncode(1, 2, 3) -``` - -```response title=Response -53 -``` - -**詳細モード** - -```sql title=Query --- 範囲拡張は、大きく異なる範囲(またはカーディナリティ)を持つ --- 引数に対して類似した分布が必要な場合に有用です --- 例:「IPアドレス」(0...FFFFFFFF)と「国コード」(0...FF) --- 注:タプルのサイズは他の引数の数と一致する必要があります。 -SELECT mortonEncode((1,2), 1024, 16) -``` - -```response title=Response -1572864 -``` - -**単一の引数** - -```sql title=Query --- 1つの引数に対するMortonエンコーディングは常に引数自体です -SELECT mortonEncode(1) -``` - -```response title=Response -1 -``` - -**展開後の単一引数** - -```sql title=Query -SELECT mortonEncode(tuple(2), 128) -``` - -```response title=Response -32768 -``` - -**カラムの利用** - -```sql title=Query --- まずテーブルを作成し、いくつかデータを挿入します -CREATE TABLE morton_numbers( - n1 UInt32, - n2 UInt32, - n3 UInt16, - n4 UInt16, - n5 UInt8, - n6 UInt8, - n7 UInt8, - n8 UInt8 -) -ENGINE=MergeTree() -ORDER BY n1; -INSERT INTO morton_numbers (*) values(1, 2, 3, 4, 5, 6, 7, 8); - --- 関数の引数には定数ではなくカラム名を指定します -SELECT mortonEncode(n1, n2, n3, n4, n5, n6, n7, n8) FROM morton_numbers; -``` - -```response title=Response -2155374165 -``` - - -## sqidDecode - -導入: v24.1 - -[sqid](https://sqids.org/) を数値の配列にデコードします。 - -**構文** - -```sql -sqidDecode(sqid) -``` - -**引数** - -* `sqid` — デコードする sqid。[`String`](/sql-reference/data-types/string) - -**戻り値** - -`sqid` から得られる数値の配列を返します。[`Array(UInt64)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT sqidDecode('gXHfJ1C6dN'); -``` - -```response title=Response -┌─sqidDecode('gXHfJ1C6dN')─────┐ -│ [1, 2, 3, 4, 5] │ -└──────────────────────────────┘ -``` - - -## sqidEncode - -導入バージョン: v24.1 - -数値を [sqid](https://sqids.org/)(YouTube の動画 ID のような ID 文字列)にエンコードします。 - -**構文** - -```sql -sqidEncode(n1[, n2, ...]) -``` - -**エイリアス**: `sqid` - -**引数** - -* `n1[, n2, ...]` — 任意の数の数値。[`UInt8/16/32/64`](/sql-reference/data-types/int-uint) - -**戻り値** - -ハッシュ ID を返します。型は [`String`](/sql-reference/data-types/string) です。 - -**例** - -**使用例** - -```sql title=Query -SELECT sqidEncode(1, 2, 3, 4, 5); -``` - -```response title=Response -┌─sqidEncode(1, 2, 3, 4, 5)─┐ -│ gXHfJ1C6dN │ -└───────────────────────────┘ -``` - - -## unbin - -導入バージョン: v21.8 - -引数内の各 2 ビットの組を数値として解釈し、その数値で表されるバイトへ変換します。この関数は `bin` と逆の処理を行います。 - -数値の引数に対しては、`unbin()` は `bin()` の逆変換を返しません。結果を数値に変換したい場合は、`reverse` および `reinterpretAs` 関数を使用できます。 - -:::note -`clickhouse-client` 内から `unbin` が呼び出された場合、バイナリ文字列は UTF-8 を用いて表示されます。 -::: - -2 進数の数字 `0` と `1` をサポートします。2 進数の桁数は 8 の倍数である必要はありません。引数の文字列に 2 進数以外の文字が含まれている場合、 -結果は未定義です(例外はスローされません)。 - -**構文** - -```sql -unbin(arg) -``` - -**引数** - -* `arg` — 任意長の2進数ビット列を含む文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -バイナリ文字列(BLOB)を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**基本的な使用例** - -```sql title=Query -SELECT UNBIN('001100000011000100110010'), UNBIN('0100110101111001010100110101000101001100') -``` - -```response title=Response -┌─unbin('001100000011000100110010')─┬─unbin('0100110101111001010100110101000101001100')─┐ -│ 012 │ MySQL │ -└───────────────────────────────────┴───────────────────────────────────────────────────┘ -``` - -**数値に変換** - -```sql title=Query -SELECT reinterpretAsUInt64(reverse(unbin('1110'))) AS num -``` - -```response title=Response -┌─num─┐ -│ 14 │ -└─────┘ -``` - - -## unhex - -導入バージョン: v1.1 - -[`hex`](#hex) と逆の操作を行います。引数内の 16 進数の各 2 桁を数値として解釈し、その数値が表すバイトに変換します。戻り値はバイナリ文字列 (BLOB) です。 - -結果を数値に変換したい場合は、`reverse` 関数および `reinterpretAs` 関数を使用できます。 - -:::note -`clickhouse-client` は文字列を UTF-8 として解釈します。 -そのため、`hex` が返す値の表示が予期しないものに見える場合があります。 -::: - -大文字および小文字の `A-F` の両方をサポートします。 -16 進数の桁数は偶数である必要はありません。 -奇数の場合、最後の 1 桁は `00-0F` バイトの下位 4 ビットとして解釈されます。 -引数の文字列に 16 進数字以外の文字が含まれている場合、実装依存の結果が返されます (例外はスローされません)。 -数値引数に対しては、unhex() によって hex(N) の逆変換は行われません。 - -**構文** - -```sql -unhex(arg) -``` - -**引数** - -* `arg` — 任意個の 16 進数の数字を含む文字列。[`String`](/sql-reference/data-types/string) または [`FixedString`](/sql-reference/data-types/fixedstring) - -**戻り値** - -バイナリ文字列(BLOB)を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**基本的な使用方法** - -```sql title=Query -SELECT unhex('303132'), UNHEX('4D7953514C') -``` - -```response title=Response -┌─unhex('303132')─┬─unhex('4D7953514C')─┐ -│ 012 │ MySQL │ -└─────────────────┴─────────────────────┘ -``` - -**数値に変換** - -```sql title=Query -SELECT reinterpretAsUInt64(reverse(unhex('FFF'))) AS num -``` - -```response title=Response -┌──num─┐ -│ 4095 │ -└──────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/encryption-functions.md b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/encryption-functions.md index b40b81945ad..e76f32e1434 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/encryption-functions.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/encryption-functions.md @@ -1,395 +1,26 @@ --- -description: '暗号化関数のドキュメント' +description: '暗号化関数に関するドキュメント' sidebar_label: '暗号化' slug: /sql-reference/functions/encryption-functions title: '暗号化関数' -keywords: ['暗号化', '通常関数', '暗号化', '復号化'] +keywords: ['暗号化', '通常の関数', '暗号化', '復号'] doc_type: 'reference' --- - - # 暗号化関数 -これらの関数は、AES(Advanced Encryption Standard)アルゴリズムを用いてデータの暗号化および復号を行います。 +これらの関数は、AES(Advanced Encryption Standard)アルゴリズムを使用してデータの暗号化および復号を行います。 -鍵長は暗号化モードに依存します。`-128-`、`-196-`、`-256-` 各モードに対して、それぞれ `16`、`24`、`32` バイトの長さになります。 +鍵長は暗号化モードによって異なり、`-128-`、`-196-`、`-256-` の各モードに対して、それぞれ `16`、`24`、`32` バイトです。 -初期化ベクトルの長さは常に 16 バイトです(16 バイトを超える部分は無視されます)。 +初期化ベクトルの長さは常に 16 バイトであり、16 バイトを超える部分は無視されます。 {/* 以下のタグ内の内容は、ドキュメントフレームワークのビルド時に - system.functions から自動生成されたドキュメントで置き換えられます。タグを変更または削除しないでください。 + system.functions から生成されたドキュメントに置き換えられます。タグを変更または削除しないでください。 詳細は https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md を参照してください。 */ } - -{/*自動生成開始*/ } - -## aes_decrypt_mysql - -導入バージョン: v20.12 - -MySQL の [`AES_ENCRYPT`](https://dev.mysql.com/doc/refman/8.0/en/encryption-functions.html#function_aes-encrypt) 関数で暗号化されたデータを復号します。 - -同じ入力に対しては、[`decrypt`](#decrypt) と同じ平文を生成します。 -`key` や `iv` が本来想定される長さより長い場合、`aes_decrypt_mysql` は MySQL の `aes_decrypt` と同様に動作し、`key` を「折りたたみ」、`iv` の余分なビットを無視します。 - -以下の復号モードをサポートします: - -* aes-128-ecb, aes-192-ecb, aes-256-ecb -* aes-128-cbc, aes-192-cbc, aes-256-cbc -* aes-128-cfb128 -* aes-128-ofb, aes-192-ofb, aes-256-ofb - -**構文** - -```sql -aes_decrypt_mysql(mode, ciphertext, key[, iv]) -``` - -**引数** - -* `mode` — 復号モード。[`String`](/sql-reference/data-types/string) -* `ciphertext` — 復号する暗号化されたテキスト。[`String`](/sql-reference/data-types/string) -* `key` — 復号鍵。[`String`](/sql-reference/data-types/string) -* `iv` — 省略可。初期化ベクトル。[`String`](/sql-reference/data-types/string) - -**戻り値** - -復号後の文字列を返します。[`String`](/sql-reference/data-types/string) - -**使用例** - -**MySQL データの復号** - -```sql title=Query --- MySQLで事前に暗号化したデータを復号化してみましょう: -mysql> SET block_encryption_mode='aes-256-ofb'; -Query OK, 0 rows affected (0.00 sec) - -mysql> SELECT aes_encrypt('Secret', '123456789101213141516171819202122', 'iviviviviviviviv123456') as ciphertext; -+------------------------+ -| ciphertext | -+------------------------+ -| 0x24E9E4966469 | -+------------------------+ -1 row in set (0.00 sec) - -SELECT aes_decrypt_mysql('aes-256-ofb', unhex('24E9E4966469'), '123456789101213141516171819202122', 'iviviviviviviviv123456') AS plaintext -``` - -```response title=Response -┌─plaintext─┐ -│ シークレット │ -└───────────┘ -``` - - -## aes_encrypt_mysql - -導入バージョン: v20.12 - -MySQL の `AES_ENCRYPT` 関数と同じ方法でテキストを暗号化します。 -生成された暗号文は MySQL の `AES_DECRYPT` 関数で復号できます。 -同じ入力に対しては `encrypt` 関数と同じ暗号文を生成します。 -`key` または `iv` が本来の長さより長い場合、`aes_encrypt_mysql` は MySQL の `aes_encrypt` と同様に動作し、`key` を「折りたたみ」処理し、`iv` の余分なビットは無視します。 - -サポートされている暗号化モードは次のとおりです: - -* aes-128-ecb, aes-192-ecb, aes-256-ecb -* aes-128-cbc, aes-192-cbc, aes-256-cbc -* aes-128-ofb, aes-192-ofb, aes-256-ofb - -**構文** - -```sql -aes_encrypt_mysql(mode, plaintext, key[, iv]) -``` - -**引数** - -* `mode` — 暗号化モード。[`String`](/sql-reference/data-types/string) -* `plaintext` — 暗号化するテキスト。[`String`](/sql-reference/data-types/string) -* `key` — 暗号鍵。`mode` が要求する長さより長い場合、MySQL 固有のキー折りたたみ処理が行われます。[`String`](/sql-reference/data-types/string) -* `iv` — 任意。初期化ベクトル。先頭の 16 バイトのみが考慮されます。[`String`](/sql-reference/data-types/string) - -**戻り値** - -暗号文を表すバイナリ文字列。[`String`](/sql-reference/data-types/string) - -**使用例** - -**同一入力の比較** - -```sql title=Query --- 同じ入力が与えられた場合、encryptとaes_encrypt_mysqlは同じ暗号文を生成します: -SELECT encrypt('aes-256-ofb', 'Secret', '12345678910121314151617181920212', 'iviviviviviviviv') = aes_encrypt_mysql('aes-256-ofb', 'Secret', '12345678910121314151617181920212', 'iviviviviviviviv') AS ciphertexts_equal; -``` - -```response title=Response -┌─ciphertexts_equal─┐ -│ 1 │ -└───────────────────┘ -``` - -**長いキーを使用すると暗号化に失敗する** - -```sql title=Query --- ただし、keyまたはivが想定より長い場合、encryptは失敗します: -SELECT encrypt('aes-256-ofb', 'Secret', '123456789101213141516171819202122', 'iviviviviviviviv123'); -``` - -```response title=Response -サーバーから例外を受信しました (バージョン 22.6.1): -Code: 36. DB::Exception: localhost:9000 から受信。DB::Exception: 無効なキーサイズ: 33 が指定されましたが、32 が必要です: encrypt('aes-256-ofb', 'Secret', '123456789101213141516171819202122', 'iviviviviviviviv123') の処理中。 -``` - -**MySQL 互換性** - -```sql title=Query --- aes_encrypt_mysql は MySQL 互換の出力を生成します: -SELECT hex(aes_encrypt_mysql('aes-256-ofb', 'Secret', '123456789101213141516171819202122', 'iviviviviviviviv123')) AS ciphertext; -``` - -```response title=Response -┌─ciphertext───┐ -│ 24E9E4966469 │ -└──────────────┘ -``` - -**IV を長くしても結果は同じ** - -```sql title=Query --- より長いIVを指定しても同じ結果が得られることに注意 -SELECT hex(aes_encrypt_mysql('aes-256-ofb', 'Secret', '123456789101213141516171819202122', 'iviviviviviviviv123456')) AS ciphertext -``` - -```response title=Response -┌─ciphertext───┐ -│ 24E9E4966469 │ -└──────────────┘ -``` - - -## decrypt - -導入バージョン: v20.12 - -この関数は、以下のモードで AES により暗号化されたバイナリ文字列を復号します。 - -* aes-128-ecb, aes-192-ecb, aes-256-ecb -* aes-128-cbc, aes-192-cbc, aes-256-cbc -* aes-128-ofb, aes-192-ofb, aes-256-ofb -* aes-128-gcm, aes-192-gcm, aes-256-gcm -* aes-128-ctr, aes-192-ctr, aes-256-ctr -* aes-128-cfb, aes-128-cfb1, aes-128-cfb8 - -**構文** - -```sql -decrypt(mode, ciphertext, key[, iv, aad]) -``` - -**引数** - -* `mode` — 復号モード。[`String`](/sql-reference/data-types/string) -* `ciphertext` — 復号対象の暗号化されたテキスト。[`String`](/sql-reference/data-types/string) -* `key` — 復号鍵。[`String`](/sql-reference/data-types/string) -* `iv` — 初期化ベクトル。`-gcm` モードでは必須で、それ以外では任意。[`String`](/sql-reference/data-types/string) -* `aad` — 追加認証データ。この値が正しくない場合は復号されません。`-gcm` モードでのみ有効で、それ以外のモードでは例外をスローします。[`String`](/sql-reference/data-types/string) - -**戻り値** - -復号されたプレーンテキストを返します。[`String`](/sql-reference/data-types/string) - -**例** - -**暗号化されたデータを正しく復号する** - -```sql title=Query --- encrypt関数の例のテーブルを再利用 -SELECT comment, hex(secret) FROM encryption_test; -``` - -```response title=Response -┌─comment──────────────┬─hex(secret)──────────────────────────────────┐ -│ aes-256-gcm │ A8A3CCBC6426CFEEB60E4EAE03D3E94204C1B09E0254 │ -│ aes-256-gcm with AAD │ A8A3CCBC6426D9A1017A0A932322F1852260A4AD6837 │ -└──────────────────────┴──────────────────────────────────────────────┘ -┌─comment──────────────────────────┬─hex(secret)──────────────────────┐ -│ aes-256-ofb no IV │ B4972BDC4459 │ -│ aes-256-ofb no IV, different key │ 2FF57C092DC9 │ -│ aes-256-ofb with IV │ 5E6CB398F653 │ -│ aes-256-cbc no IV │ 1BC0629A92450D9E73A00E7D02CF4142 │ -└──────────────────────────────────┴──────────────────────────────────┘ -``` - -**暗号化データの誤復号** - -```sql title=Query -SELECT comment, decrypt('aes-256-cfb128', secret, '12345678910121314151617181920212') AS plaintext FROM encryption_test -``` - -```response title=Response --- データの一部のみが正しく復号化され、残りは暗号化時に `mode`、`key`、または `iv` が異なっていたため判読不能になっていることに注意してください。 -┌─comment──────────────┬─plaintext──┐ -│ aes-256-gcm │ OQ�E - �t�7T�\���\� │ -│ aes-256-gcm with AAD │ OQ�E - �\��si����;�o�� │ -└──────────────────────┴────────────┘ -┌─comment──────────────────────────┬─plaintext─┐ -│ aes-256-ofb no IV │ Secret │ -│ aes-256-ofb no IV, different key │ �4� - � │ -│ aes-256-ofb with IV │ ���6�~ │ -│aes-256-cbc no IV │ �2*4�h3c�4w��@ -└──────────────────────────────────┴───────────┘ -``` - - -## encrypt - -導入バージョン: v20.12 - -平文を次のいずれかのモードで AES を使用して暗号文に変換します: - -* aes-128-ecb, aes-192-ecb, aes-256-ecb -* aes-128-cbc, aes-192-cbc, aes-256-cbc -* aes-128-ofb, aes-192-ofb, aes-256-ofb -* aes-128-gcm, aes-192-gcm, aes-256-gcm -* aes-128-ctr, aes-192-ctr, aes-256-ctr -* aes-128-cfb, aes-128-cfb1, aes-128-cfb8 - -**構文** - -```sql -encrypt(mode, plaintext, key[, iv, aad]) -``` - -**引数** - -* `mode` — 暗号化モード。[`String`](/sql-reference/data-types/string) -* `plaintext` — 暗号化対象のテキスト。[`String`](/sql-reference/data-types/string) -* `key` — 暗号鍵。[`String`](/sql-reference/data-types/string) -* `iv` — 初期化ベクトル。`-gcm` モードでは必須で、それ以外では任意。[`String`](/sql-reference/data-types/string) -* `aad` — 追加認証データ。これは暗号化されないが、復号に影響する。`-gcm` モードでのみ有効で、それ以外では例外がスローされる。[`String`](/sql-reference/data-types/string) - -**戻り値** - -バイナリ文字列形式の暗号文を返す。[`String`](/sql-reference/data-types/string) - -**例** - -**暗号化の例** - -```sql title=Query -CREATE TABLE encryption_test -( - `comment` String, - `secret` String -) -ENGINE = MergeTree; - -INSERT INTO encryption_test VALUES -('aes-256-ofb IVなし', encrypt('aes-256-ofb', 'Secret', '12345678910121314151617181920212')), -('aes-256-ofb IVなし、異なるキー', encrypt('aes-256-ofb', 'Secret', 'keykeykeykeykeykeykeykeykeykeyke')), -('aes-256-ofb IVあり', encrypt('aes-256-ofb', 'Secret', '12345678910121314151617181920212', 'iviviviviviviviv')), -('aes-256-cbc IVなし', encrypt('aes-256-cbc', 'Secret', '12345678910121314151617181920212')); - -SELECT comment, hex(secret) FROM encryption_test; -``` - -```response title=Response -┌─comment──────────────────────────┬─hex(secret)──────────────────────┐ -│ aes-256-ofb IV なし │ B4972BDC4459 │ -│ aes-256-ofb IV なし、異なるキー │ 2FF57C092DC9 │ -│ aes-256-ofb IV あり │ 5E6CB398F653 │ -│ aes-256-cbc IV なし │ 1BC0629A92450D9E73A00E7D02CF4142 │ -└──────────────────────────────────┴──────────────────────────────────┘ -``` - -**GCM モードの使用例** - -```sql title=Query -INSERT INTO encryption_test VALUES -('aes-256-gcm', encrypt('aes-256-gcm', 'Secret', '12345678910121314151617181920212', 'iviviviviviviviv')), - -('aes-256-gcm (AAD付き)', encrypt('aes-256-gcm', 'Secret', '12345678910121314151617181920212', 'iviviviviviviviv', 'aad')); - -SELECT comment, hex(secret) FROM encryption_test WHERE comment LIKE '%gcm%'; -``` - -```response title=Response -┌─comment──────────────┬─hex(secret)──────────────────────────────────┐ -│ aes-256-gcm │ A8A3CCBC6426CFEEB60E4EAE03D3E94204C1B09E0254 │ -│ aes-256-gcm (AAD付き) │ A8A3CCBC6426D9A1017A0A932322F1852260A4AD6837 │ -└──────────────────────┴──────────────────────────────────────────────┘ -``` - - -## tryDecrypt - -導入バージョン: v22.10 - -`decrypt` 関数と類似していますが、誤ったキーを使用して復号に失敗した場合には `NULL` を返します。 - -**構文** - -```sql -tryDecrypt(mode, ciphertext, key[, iv, aad]) -``` - -**引数** - -* `mode` — 復号モード。[`String`](/sql-reference/data-types/string) -* `ciphertext` — 復号対象の暗号化テキスト。[`String`](/sql-reference/data-types/string) -* `key` — 復号キー。[`String`](/sql-reference/data-types/string) -* `iv` — オプション。初期化ベクトル。`-gcm` モードでは必須で、それ以外のモードでは任意。[`String`](/sql-reference/data-types/string) -* `aad` — オプション。追加認証データ。この値が正しくない場合は復号は行われません。`-gcm` モードでのみ有効で、それ以外のモードでは例外をスローします。[`String`](/sql-reference/data-types/string) - -**戻り値** - -復号された文字列を返し、復号に失敗した場合は `NULL` を返します。[`Nullable(String)`](/sql-reference/data-types/nullable) - -**例** - -**テーブルの作成とデータの挿入** - -```sql title=Query --- user_id が一意のユーザーID、encrypted が暗号化された文字列フィールド、iv が復号化/暗号化のための初期化ベクトルであるテーブルを作成します。 --- ユーザーは自身のIDと暗号化されたフィールドを復号化するためのキーを知っていることを前提とします: -CREATE TABLE decrypt_null -( - dt DateTime, - user_id UInt32, - encrypted String, - iv String -) -ENGINE = MergeTree; - --- データを挿入します: -INSERT INTO decrypt_null VALUES -('2022-08-02 00:00:00', 1, encrypt('aes-256-gcm', 'value1', 'keykeykeykeykeykeykeykeykeykey01', 'iv1'), 'iv1'), -('2022-09-02 00:00:00', 2, encrypt('aes-256-gcm', 'value2', 'keykeykeykeykeykeykeykeykeykey02', 'iv2'), 'iv2'), -('2022-09-02 00:00:01', 3, encrypt('aes-256-gcm', 'value3', 'keykeykeykeykeykeykeykeykeykey03', 'iv3'), 'iv3'); - --- 1つのキーで復号化を試行します: -SELECT - dt, - user_id, - tryDecrypt('aes-256-gcm', encrypted, 'keykeykeykeykeykeykeykeykeykey02', iv) AS value -FROM decrypt_null -ORDER BY user_id ASC -``` - -```response title=Response -┌──────────────────dt─┬─user_id─┬─value──┐ -│ 2022-08-02 00:00:00 │ 1 │ ᴺᵁᴸᴸ │ -│ 2022-09-02 00:00:00 │ 2 │ value2 │ -│ 2022-09-02 00:00:01 │ 3 │ ᴺᵁᴸᴸ │ -└─────────────────────┴─────────┴────────┘ -``` +{/*AUTOGENERATED_START*/ } {/*AUTOGENERATED_END*/ } diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/ext-dict-functions.md b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/ext-dict-functions.md index a1534f24f58..5863fb9e4e7 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/ext-dict-functions.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/ext-dict-functions.md @@ -1,64 +1,60 @@ --- -description: '辞書を操作する関数のドキュメント' +description: '辞書操作用の関数に関するドキュメント' sidebar_label: '辞書' slug: /sql-reference/functions/ext-dict-functions -title: '辞書を操作する関数' +title: '辞書操作用の関数' doc_type: 'reference' --- - - -# 辞書を扱うための関数 +# 辞書を扱う関数 :::note -[DDL クエリ](../../sql-reference/statements/create/dictionary.md)で作成された辞書については、`dict_name` パラメータを `.` の形式で完全修飾して指定する必要があります。そうしない場合は、現在のデータベースが使用されます。 +[DDL クエリ](../../sql-reference/statements/create/dictionary.md)で作成された辞書の場合、`dict_name` パラメーターは `.` のように完全修飾名で指定する必要があります。省略した場合は、現在のデータベースが使用されます。 ::: -辞書の接続と設定方法については、[辞書](../../sql-reference/dictionaries/index.md) を参照してください。 - - +辞書の接続と設定の方法については、[辞書](../../sql-reference/dictionaries/index.md)を参照してください。 -## dictGet, dictGetOrDefault, dictGetOrNull +## dictGet、dictGetOrDefault、dictGetOrNull -辞書から値を取得します。 +ディクショナリから値を取得します。 ```sql -dictGet('ディクショナリ名', 属性名, ID式) -dictGetOrDefault('ディクショナリ名', 属性名, ID式, デフォルト値式) -dictGetOrNull('ディクショナリ名', 属性名, ID式) +dictGet('dict_name', attr_names, id_expr) +dictGetOrDefault('dict_name', attr_names, id_expr, default_value_expr) +dictGetOrNull('dict_name', attr_name, id_expr) ``` **引数** -* `dict_name` — 辞書の名前。[String literal](/sql-reference/syntax#string)。 -* `attr_names` — 辞書の列名 ([String literal](/sql-reference/syntax#string))、または列名のタプル ([Tuple](/sql-reference/data-types/tuple)([String literal](/sql-reference/syntax#string))。 -* `id_expr` — キー値。[Expression](/sql-reference/syntax#expressions)。辞書の設定に応じて、辞書のキー型の値、または [Tuple](../data-types/tuple.md) 型の値を返します。 -* `default_value_expr` — 辞書に `id_expr` キーを持つ行が存在しない場合に返される値。[Expression](/sql-reference/syntax#expressions) または [Tuple](../data-types/tuple.md)([Expression](/sql-reference/syntax#expressions)) であり、`attr_names` 属性に設定されたデータ型の値(または複数の値)を返します。 +* `dict_name` — 辞書の名前。[文字列リテラル](/sql-reference/syntax#string)。 +* `attr_names` — 辞書の列名を指定する [String literal](/sql-reference/syntax#string)、または列名のタプルを指定する [Tuple](/sql-reference/data-types/tuple)([String literal](/sql-reference/syntax#string))。 +* `id_expr` — キーの値。ディクショナリの設定に応じて、ディクショナリのキー型の値または [Tuple](../data-types/tuple.md) 型の値を返す [Expression](/sql-reference/syntax#expressions) です。 +* `default_value_expr` — 辞書に `id_expr` キーを持つ行が存在しない場合に返される値。[Expression](/sql-reference/syntax#expressions) または [Tuple](../data-types/tuple.md)([Expression](/sql-reference/syntax#expressions)) であり、`attr_names` 属性に対して設定されたデータ型で値(または複数の値)を返します。 -**戻り値** +**返り値** -* ClickHouse が [属性のデータ型](/sql-reference/dictionaries#dictionary-key-and-fields) に従って属性を正しく解析できた場合、関数は `id_expr` に対応する辞書属性の値を返します。 +* ClickHouse が [属性のデータ型](/sql-reference/dictionaries#dictionary-key-and-fields) に従って属性を正常にパースできた場合、関数は `id_expr` に対応する辞書の属性の値を返します。 -* `id_expr` に対応するキーが辞書内に存在しない場合は、次のようになります。 +* 辞書に `id_expr` に対応するキーが存在しない場合は、次のようになります。 - * `dictGet` は、辞書設定でその属性に対して指定された `` 要素の内容を返します。 + * `dictGet` は、辞書の設定で対象の属性に対して指定された `` 要素の内容を返します。 * `dictGetOrDefault` は、`default_value_expr` パラメータとして渡された値を返します。 - * `dictGetOrNull` は、辞書内でキーが見つからなかった場合に `NULL` を返します。 + * `dictGetOrNull` は、キーが辞書内で見つからなかった場合に `NULL` を返します。 -ClickHouse は、属性の値を解析できない場合、または値が属性のデータ型と一致しない場合、例外を送出します。 +ClickHouseは、属性値を解析できない場合、または属性値がデータ型と一致しない場合に例外をスローします。 -**単一キー辞書の例** +**シンプルキーディクショナリの例** -次の内容を含むテキストファイル `ext-dict-test.csv` を作成します。 +以下の内容を含むテキストファイル `ext-dict-test.csv` を作成します: ```text 1,1 2,2 ``` -最初の列は `id`、2 番目の列は `c1` です。 +最初の列は `id`、2番目の列は `c1` です。 -辞書を構成します: +ディクショナリを設定する: ```xml @@ -88,7 +84,7 @@ ClickHouse は、属性の値を解析できない場合、または値が属性 ``` -次のクエリを実行します: +クエリを実行してください: ```sql SELECT @@ -106,9 +102,9 @@ LIMIT 3; └─────┴────────┘ ``` -**複合キー辞書の例** +**複合キーディクショナリの例** -次の内容を含むテキストファイル `ext-dict-mult.csv` を作成します。 +以下の内容を含むテキストファイル `ext-dict-mult.csv` を作成します: ```text 1,1,'1' @@ -116,10 +112,9 @@ LIMIT 3; 3,3,'3' ``` -最初の列は `id`、2番目の列は `c1`、3番目の列は `c2` です。 - -辞書を設定します: +最初の列は `id`、2番目は `c1`、3番目は `c2` です。 +ディクショナリを設定する: ```xml @@ -154,7 +149,7 @@ LIMIT 3; ``` -次のクエリを実行します: +クエリを実行してください: ```sql SELECT @@ -174,7 +169,10 @@ LIMIT 3; **範囲キー辞書の例** -入力テーブル: +入力テーブル: + +````sql +範囲キーディクショナリのソーステーブルを作成します: ```sql CREATE TABLE range_key_dictionary_source_table @@ -186,13 +184,18 @@ CREATE TABLE range_key_dictionary_source_table value_nullable Nullable(String) ) ENGINE = TinyLog(); +``` +データを挿入します: + +```sql INSERT INTO range_key_dictionary_source_table VALUES(1, toDate('2019-05-20'), toDate('2019-05-20'), 'First', 'First'); INSERT INTO range_key_dictionary_source_table VALUES(2, toDate('2019-05-20'), toDate('2019-05-20'), 'Second', NULL); INSERT INTO range_key_dictionary_source_table VALUES(3, toDate('2019-05-20'), toDate('2019-05-20'), 'Third', 'Third'); ``` +```` -辞書を作成します: +辞書を作成します。 ```sql CREATE DICTIONARY range_key_dictionary @@ -210,7 +213,7 @@ LAYOUT(RANGE_HASHED()) RANGE(MIN start_date MAX end_date); ``` -次のクエリを実行してください: +次のクエリを実行します: ```sql SELECT @@ -234,12 +237,12 @@ FROM system.numbers LIMIT 5 FORMAT TabSeparated; **関連項目** -* [辞書](../../sql-reference/dictionaries/index.md) +* [ディクショナリ](../../sql-reference/dictionaries/index.md) ## dictHas -辞書にキーが存在するかどうかを確認します。 +辞書内に指定したキーが存在するかどうかを確認します。 ```sql dictHas('dict_name', id_expr) @@ -247,8 +250,8 @@ dictHas('dict_name', id_expr) **引数** -* `dict_name` — 辞書名。[文字列リテラル](/sql-reference/syntax#string)。 -* `id_expr` — キー値。辞書の設定に応じて、辞書のキー型の値、または [Tuple](../data-types/tuple.md) 型の値を返す [式](/sql-reference/syntax#expressions)。 +* `dict_name` — 辞書の名前。[文字列リテラル](/sql-reference/syntax#string)。 +* `id_expr` — キーの値。辞書の設定に応じて、辞書のキー型の値または [Tuple](../data-types/tuple.md) 型の値を返す [式](/sql-reference/syntax#expressions)。 **戻り値** @@ -258,7 +261,7 @@ dictHas('dict_name', id_expr) ## dictGetHierarchy -[階層型辞書](../../sql-reference/dictionaries/index.md#hierarchical-dictionaries)内の指定したキーについて、そのすべての親キーを含む配列を作成します。 +[階層型ディクショナリ](../../sql-reference/dictionaries/index.md#hierarchical-dictionaries)内のキーについて、そのすべての親要素を含む配列を作成します。 **構文** @@ -268,17 +271,17 @@ dictGetHierarchy('dict_name', key) **引数** -* `dict_name` — 辞書の名前。[String literal](/sql-reference/syntax#string)。 -* `key` — キーの値。[Expression](/sql-reference/syntax#expressions) で、[UInt64](../data-types/int-uint.md) 型の値を返します。 +* `dict_name` — 辞書名。[String literal](/sql-reference/syntax#string)。 +* `key` — キー値。[Expression](/sql-reference/syntax#expressions) で、[UInt64](../data-types/int-uint.md) 型の値を返します。 **戻り値** -* キーの親。[Array(UInt64)](../data-types/array.md)。 +* キーに対応する親の配列。[Array(UInt64)](../data-types/array.md)。 ## dictIsIn -辞書の階層チェーン全体を対象に、キーの祖先が存在するかどうかを判定します。 +辞書内の階層構造全体をたどって、キーの先祖を確認します。 ```sql dictIsIn('dict_name', child_id_expr, ancestor_id_expr) @@ -286,9 +289,9 @@ dictIsIn('dict_name', child_id_expr, ancestor_id_expr) **引数** -* `dict_name` — 辞書名。[String literal](/sql-reference/syntax#string)。 -* `child_id_expr` — チェック対象となるキー。[Expression](/sql-reference/syntax#expressions)。[UInt64](../data-types/int-uint.md) 型の値を返す式。 -* `ancestor_id_expr` — `child_id_expr` キーの想定される祖先。[Expression](/sql-reference/syntax#expressions)。[UInt64](../data-types/int-uint.md) 型の値を返す式。 +* `dict_name` — 辞書の名前。[String literal](/sql-reference/syntax#string)。 +* `child_id_expr` — チェック対象となるキー。[Expression](/sql-reference/syntax#expressions) で、[UInt64](../data-types/int-uint.md) 型の値を返します。 +* `ancestor_id_expr` — `child_id_expr` キーの想定される祖先キー。[Expression](/sql-reference/syntax#expressions) で、[UInt64](../data-types/int-uint.md) 型の値を返します。 **戻り値** @@ -298,7 +301,7 @@ dictIsIn('dict_name', child_id_expr, ancestor_id_expr) ## dictGetChildren -第1階層の子要素をインデックスの配列として返します。[dictGetHierarchy](#dictgethierarchy) に対する逆変換です。 +直下の子要素をインデックスの配列として返します。これは [dictGetHierarchy](#dictgethierarchy) の逆変換です。 **構文** @@ -308,12 +311,12 @@ dictGetChildren(dict_name, key) **引数** -* `dict_name` — 辞書名。[文字列リテラル](/sql-reference/syntax#string)。 -* `key` — キーの値。[式](/sql-reference/syntax#expressions) で、[UInt64](../data-types/int-uint.md) 型の値を返します。 +* `dict_name` — 辞書の名前。[文字列リテラル](/sql-reference/syntax#string)。 +* `key` — キーの値。[式](/sql-reference/syntax#expressions)で、[UInt64](../data-types/int-uint.md) 型の値を返します。 -**返される値** +**戻り値** -* 指定したキーに対する第1レベルの子孫。[Array](../data-types/array.md)([UInt64](../data-types/int-uint.md))。 +* 指定したキーの第1階層の子孫。[Array](../data-types/array.md)([UInt64](../data-types/int-uint.md))。 **例** @@ -328,7 +331,7 @@ dictGetChildren(dict_name, key) └────┴───────────┘ ``` -第1階層の子要素: +第1レベルの子要素: ```sql SELECT dictGetChildren('hierarchy_flat_dictionary', number) FROM system.numbers LIMIT 4; @@ -346,7 +349,7 @@ SELECT dictGetChildren('hierarchy_flat_dictionary', number) FROM system.numbers ## dictGetDescendant -[dictGetChildren](#dictgetchildren) 関数を `level` 回再帰的に適用した場合と同じように、すべての子孫を返します。 +[dictGetChildren](#dictgetchildren) 関数を `level` 回にわたって再帰的に適用した場合と同様に、すべての子孫を返します。 **構文** @@ -358,15 +361,15 @@ dictGetDescendants(dict_name, key, level) * `dict_name` — 辞書名。[文字列リテラル](/sql-reference/syntax#string)。 * `key` — キーの値。[式](/sql-reference/syntax#expressions)で、[UInt64](../data-types/int-uint.md) 型の値を返します。 -* `level` — 階層レベル。`level = 0` の場合、末端までのすべての子孫を返します。[UInt8](../data-types/int-uint.md)。 +* `level` — 階層レベル。`level = 0` の場合は、末端までのすべての子孫を返します。[UInt8](../data-types/int-uint.md)。 -**返される値** +**戻り値** * 指定したキーの子孫。[Array](../data-types/array.md)([UInt64](../data-types/int-uint.md))。 **例** -次のような階層型辞書を考えます。 +次のような階層型辞書を考えます: ```text ┌─id─┬─parent_id─┐ @@ -377,7 +380,7 @@ dictGetDescendants(dict_name, key, level) └────┴───────────┘ ``` -すべての子孫要素: +すべての子孫: ```sql SELECT dictGetDescendants('hierarchy_flat_dictionary', number) FROM system.numbers LIMIT 4; @@ -392,7 +395,7 @@ SELECT dictGetDescendants('hierarchy_flat_dictionary', number) FROM system.numbe └─────────────────────────────────────────────────────────┘ ``` -第1階層の子要素: +第1階層の子要素: ```sql SELECT dictGetDescendants('hierarchy_flat_dictionary', number, 1) FROM system.numbers LIMIT 4; @@ -410,9 +413,9 @@ SELECT dictGetDescendants('hierarchy_flat_dictionary', number, 1) FROM system.nu ## dictGetAll -[正規表現ツリーディクショナリ](../../sql-reference/dictionaries/index.md#regexp-tree-dictionary)内で各キーに一致したすべてのノードの属性値を取得します。 +[正規表現ツリーディクショナリ](../../sql-reference/dictionaries/index.md#regexp-tree-dictionary)の各キーにマッチしたすべてのノードの属性値を取得します。 -`T` の代わりに `Array(T)` 型の値を返す点を除き、この関数は [`dictGet`](#dictget-dictgetordefault-dictgetornull) と同様に動作します。 +`T` ではなく `Array(T)` 型の値を返すことを除けば、この関数の動作は [`dictGet`](#dictget-dictgetordefault-dictgetornull) と同様です。 **構文** @@ -423,21 +426,21 @@ dictGetAll('dict_name', attr_names, id_expr[, limit]) **引数** * `dict_name` — 辞書の名前。[String literal](/sql-reference/syntax#string)。 -* `attr_names` — 辞書のカラム名([String literal](/sql-reference/syntax#string))、またはカラム名のタプル([Tuple](/sql-reference/data-types/tuple)([String literal](/sql-reference/syntax#string)))。 -* `id_expr` — キーの値を表す [Expression](/sql-reference/syntax#expressions) で、辞書の設定に応じて、辞書キー型の値の配列または [Tuple](/sql-reference/data-types/tuple) 型の値を返します。 -* `limit` - 返される各値配列の最大長。切り詰めが行われる場合は、親ノードより子ノードが優先され、それ以外の場合は regexp ツリー辞書で定義されたリスト順が維持されます。指定されていない場合、配列の長さに制限はありません。 +* `attr_names` — 辞書のカラム名を表す [String literal](/sql-reference/syntax#string)、またはカラム名のタプルを表す [Tuple](/sql-reference/data-types/tuple)([String literal](/sql-reference/syntax#string))。 +* `id_expr` — キー値。[Expression](/sql-reference/syntax#expressions) で、辞書の設定に応じて、辞書のキー型の値の配列、または [Tuple](/sql-reference/data-types/tuple) 型の値を返します。 +* `limit` - 返される各値配列の最大長。切り詰める際は、親ノードより子ノードが優先され、それ以外の場合は regexp tree dictionary に定義されたリスト順が尊重されます。指定されていない場合、配列長は無制限です。 **戻り値** -* ClickHouse が、辞書で定義された属性のデータ型として属性を正しく解析できた場合、`attr_names` で指定された各属性について、`id_expr` に対応する辞書属性値の配列を返します。 +* ClickHouse が、辞書で定義された属性のデータ型として属性を正常にパースできた場合、`attr_names` で指定された各属性について、`id_expr` に対応する辞書属性値の配列を返します。 * `id_expr` に対応するキーが辞書内に存在しない場合、空の配列が返されます。 -ClickHouse は、属性の値を解析できない場合、または値が属性のデータ型と一致しない場合には例外をスローします。 +ClickHouse は、属性の値をパースできない場合、または値が属性のデータ型と一致しない場合に例外をスローします。 **例** -次の regexp ツリー辞書を例にします。 +次の regexp tree dictionary を想定します: ```sql CREATE DICTIONARY regexp_dict @@ -451,7 +454,6 @@ LAYOUT(regexp_tree) ... ``` - ```yaml # /var/lib/clickhouse/user_files/regexp_tree.yaml - regexp: 'foo' @@ -462,7 +464,7 @@ LAYOUT(regexp_tree) tag: 'baz_attr' ``` -一致する値をすべて取得: +一致するすべての値を取得: ```sql SELECT dictGetAll('regexp_dict', 'tag', 'foobarbaz'); @@ -474,7 +476,7 @@ SELECT dictGetAll('regexp_dict', 'tag', 'foobarbaz'); └───────────────────────────────────────────────┘ ``` -最大 2 個の一致する値を取得: +一致する値を最大 2 件取得: ```sql SELECT dictGetAll('regexp_dict', 'tag', 'foobarbaz', 2); @@ -489,7 +491,7 @@ SELECT dictGetAll('regexp_dict', 'tag', 'foobarbaz', 2); ## dictGetKeys -指定した値と等しい属性値を持つ辞書キーを返します。これは単一の属性に対する [`dictGet`](#dictget-dictgetordefault-dictgetornull) の逆操作です。 +指定した値に等しい属性値を持つ辞書キーを返します。これは、単一の属性に対する [`dictGet`](#dictget-dictgetordefault-dictgetornull) の逆操作です。 **構文** @@ -501,21 +503,21 @@ dictGetKeys('dict_name', 'attr_name', value_expr); * `dict_name` — 辞書の名前。[String literal](/sql-reference/syntax#string)。 * `attr_name` — 辞書の属性列の名前。[String literal](/sql-reference/syntax#string)。 -* `value_expr` — 属性と比較する値。[Expression](/sql-reference/syntax#expressions) であり、その属性のデータ型に変換可能なもの。 +* `value_expr` — 属性と照合する値。属性のデータ型に変換可能な [Expression](/sql-reference/syntax#expressions) です。 -**戻り値** +**返り値** -* 単一キー辞書の場合: 属性が `value_expr` と等しいキーの配列。[Array(T)](../data-types/array.md) で、`T` は辞書キーのデータ型。 +* 単一キー辞書の場合: 属性が `value_expr` と等しいキーの配列。[Array(T)](../data-types/array.md)。ここで `T` は辞書キーのデータ型です。 -* 複合キー辞書の場合: 属性が `value_expr` と等しいキーのタプルの配列。[Array](../data-types/array.md)([Tuple(T1, T2, ...)](../data-types/tuple.md)) であり、各 `Tuple` には辞書キーの列が順序通りに含まれる。 +* 複合キー辞書の場合: 属性が `value_expr` と等しいキーのタプルの配列。[Array](../data-types/array.md)([Tuple(T1, T2, ...)](../data-types/tuple.md)) であり、各 `Tuple` には辞書キーの列が順番に含まれます。 -* `value_expr` に対応する属性が辞書内に存在しない場合は、空の配列が返される。 +* `value_expr` に対応する属性が辞書内に存在しない場合は、空の配列が返されます。 -属性の値をパースできない場合、または値を属性のデータ型に変換できない場合、ClickHouse は例外をスローします。 +ClickHouse は、属性の値を解釈できない場合、またはその値を属性のデータ型に変換できない場合に例外をスローします。 **例** -次の辞書を想定します: +次の辞書を例にします: ```txt ┌─id─┬─level──┐ @@ -526,7 +528,7 @@ dictGetKeys('dict_name', 'attr_name', value_expr); └────┴────────┘ ``` -次に、level が `high` のすべての ID を取得します: +次に、レベルが `high` のすべての ID を取得してみましょう: ```sql SELECT dictGetKeys('levels', 'level', 'high') AS ids; @@ -539,15 +541,15 @@ SELECT dictGetKeys('levels', 'level', 'high') AS ids; ``` :::note -`dictGetKeys` が使用するクエリごとの逆引きキャッシュのサイズ上限を設定するには、`max_reverse_dictionary_lookup_cache_size_bytes` を使用します。このキャッシュは、同一クエリ内で辞書を再スキャンしないように、各属性値に対応するシリアル化されたキーのタプルを保存します。キャッシュはクエリ間で永続化されません。上限に達すると、エントリは LRU で破棄されます。これは、辞書が大きく、入力のカーディナリティが低く、作業セットがキャッシュに収まる場合に最も効果的です。キャッシュを無効にするには `0` を設定します。 +`max_reverse_dictionary_lookup_cache_size_bytes` 設定を使用して、`dictGetKeys` が使用するクエリごとの逆引きキャッシュの最大サイズを制限します。キャッシュには、同じクエリ内で辞書を再スキャンしないように、各属性値に対応するシリアライズ済みキーのタプルが保存されます。キャッシュはクエリ間では永続化されません。上限に達すると、エントリは LRU 方式で削除されます。これは、入力のカーディナリティが低く、ワーキングセットがキャッシュに収まる大規模な辞書で最も効果的です。キャッシュを無効にするには `0` を設定します。 -さらに、`attr_name` 列のユニークな値がキャッシュ内に収まる場合、多くのケースで関数の実行は入力行数に対して線形となり、そこに少数回の辞書スキャンが加わる程度になります。 +さらに、`attr_name` 列のユニーク値がキャッシュに収まる場合、多くのケースで、関数の実行コストは入力行数に対して線形となり、そこに少数回分の辞書スキャンが加わる程度になります。 ::: ## その他の関数 -ClickHouse は、辞書の設定に関係なく、辞書属性の値を特定のデータ型に変換する専用関数をサポートしています。 +ClickHouse は、辞書の設定に依存せず、辞書属性の値を特定のデータ型に変換するための特殊な関数をサポートしています。 関数: @@ -560,7 +562,7 @@ ClickHouse は、辞書の設定に関係なく、辞書属性の値を特定の * `dictGetString` * `dictGetIPv4`, `dictGetIPv6` -これらすべての関数には、`OrDefault` が付いたバージョンがあります。例えば、`dictGetDateOrDefault` です。 +これらすべての関数には、`OrDefault` という修飾子付きのバリアントがあります。例えば、`dictGetDateOrDefault` です。 構文: @@ -571,16 +573,16 @@ dictGet[Type]OrDefault('dict_name', 'attr_name', id_expr, default_value_expr) **引数** -* `dict_name` — 辞書の名前。[文字列リテラル](/sql-reference/syntax#string)。 -* `attr_name` — 辞書の列名。[文字列リテラル](/sql-reference/syntax#string)。 -* `id_expr` — キー値。[式](/sql-reference/syntax#expressions) であり、辞書の設定に応じて [UInt64](../data-types/int-uint.md) または [Tuple](../data-types/tuple.md) 型の値を返します。 -* `default_value_expr` — `id_expr` キーを持つ行が辞書に存在しない場合に返される値。[式](/sql-reference/syntax#expressions) であり、`attr_name` 属性に設定されたデータ型の値を返します。 +* `dict_name` — 辞書の名前。[String literal](/sql-reference/syntax#string)。 +* `attr_name` — 辞書の列名。[String literal](/sql-reference/syntax#string)。 +* `id_expr` — キーの値。辞書の設定に応じて、[UInt64](../data-types/int-uint.md) または [Tuple](../data-types/tuple.md) 型の値を返す [Expression](/sql-reference/syntax#expressions)。 +* `default_value_expr` — 辞書に `id_expr` キーを持つ行が存在しない場合に返される値。`attr_name` 属性に設定されているデータ型の値を返す [Expression](/sql-reference/syntax#expressions)。 **戻り値** -* ClickHouse が [属性のデータ型](/sql-reference/dictionaries#dictionary-key-and-fields) として属性を正常に解析できる場合、関数は `id_expr` に対応する辞書属性の値を返します。 +* ClickHouse が [属性のデータ型](/sql-reference/dictionaries#dictionary-key-and-fields) で属性を正常に解析できた場合、関数は `id_expr` に対応する辞書属性の値を返します。 -* 要求された `id_expr` が辞書に存在しない場合は、次のようになります。 +* 辞書に要求された `id_expr` が存在しない場合は、次のとおりです。 * `dictGet[Type]` は、辞書の設定でその属性に対して指定された `` 要素の内容を返します。 * `dictGet[Type]OrDefault` は、`default_value_expr` パラメータとして渡された値を返します。 @@ -588,57 +590,56 @@ dictGet[Type]OrDefault('dict_name', 'attr_name', id_expr, default_value_expr) ClickHouse は、属性の値を解析できない場合、または値が属性のデータ型と一致しない場合に例外を送出します。 -## 辞書の例 {#example-dictionary} +## 例となる辞書 {#example-dictionary} -このセクションの例では、以下の辞書を使用します。以下で説明する関数の例を実行するには、ClickHouseでこれらの辞書を作成してください。 +このセクションの例では、次の辞書を使用します。以下で説明する関数の例を実行するには、これらを ClickHouse で作成してください。
-dictGet\およびdictGet\OrDefault関数用の辞書例 +dictGet<T> および dictGet<T>OrDefault 関数用の例となる辞書 ```sql --- 必要なすべてのデータ型を持つテーブルを作成 +-- 必要なすべてのデータ型を含むテーブルを作成 CREATE TABLE all_types_test ( `id` UInt32, - - -- 文字列型 + + -- String 型 `String_value` String, - + -- 符号なし整数型 `UInt8_value` UInt8, `UInt16_value` UInt16, `UInt32_value` UInt32, `UInt64_value` UInt64, - + -- 符号付き整数型 `Int8_value` Int8, `Int16_value` Int16, `Int32_value` Int32, `Int64_value` Int64, - + -- 浮動小数点型 `Float32_value` Float32, `Float64_value` Float64, - + -- 日付/時刻型 `Date_value` Date, `DateTime_value` DateTime, - + -- ネットワーク型 `IPv4_value` IPv4, `IPv6_value` IPv6, - - -- UUID型 + + -- UUID 型 `UUID_value` UUID -) ENGINE = MergeTree() +) ENGINE = MergeTree() ORDER BY id; ``` - ```sql -- テストデータを挿入 INSERT INTO all_types_test VALUES ( 1, -- id - 'ClickHouse', -- 文字列 + 'ClickHouse', -- String 100, -- UInt8 5000, -- UInt16 1000000, -- UInt32 @@ -649,8 +650,8 @@ INSERT INTO all_types_test VALUES -9223372036854775808, -- Int64 123.45, -- Float32 987654.123456, -- Float64 - '2024-01-15', -- 日付 - '2024-01-15 10:30:00', -- 日時 + '2024-01-15', -- Date + '2024-01-15 10:30:00', -- DateTime '192.168.1.1', -- IPv4 '2001:db8::1', -- IPv6 '550e8400-e29b-41d4-a716-446655440000' -- UUID @@ -684,13 +685,12 @@ SOURCE(CLICKHOUSE(HOST 'localhost' PORT 9000 USER 'default' TABLE 'all_types_tes LAYOUT(HASHED()) LIFETIME(MIN 300 MAX 600); ``` -
-dictGetAll用の辞書例 +dictGetAll 用の例となる辞書 -正規表現ツリー辞書のデータを格納するテーブルを作成します: +regexp ツリー辞書用のデータを保存するテーブルを作成します: ```sql CREATE TABLE regexp_os( @@ -703,10 +703,10 @@ CREATE TABLE regexp_os( ENGINE = Memory; ``` -テーブルにデータを挿入します: +テーブルにデータを挿入します: ```sql -INSERT INTO regexp_os +INSERT INTO regexp_os SELECT * FROM s3( 'https://datasets-documentation.s3.eu-west-3.amazonaws.com/' || @@ -714,7 +714,7 @@ FROM s3( ); ``` -正規表現ツリー辞書を作成します: +regexp ツリー辞書を作成します: ```sql CREATE DICTIONARY regexp_tree @@ -731,2050 +731,148 @@ SOURCE(CLICKHOUSE(TABLE 'regexp_os')) LIFETIME(MIN 0 MAX 0) LAYOUT(REGEXP_TREE); ``` -
-範囲キー辞書の例 - -入力テーブルを作成します: - -```sql -CREATE TABLE range_key_dictionary_source_table -( - key UInt64, - start_date Date, - end_date Date, - value String, - value_nullable Nullable(String) -) -ENGINE = TinyLog(); -``` - -入力テーブルにデータを挿入します: - - -```sql -INSERT INTO range_key_dictionary_source_table VALUES(1, toDate('2019-05-20'), toDate('2019-05-20'), 'First', 'First'); -INSERT INTO range_key_dictionary_source_table VALUES(2, toDate('2019-05-20'), toDate('2019-05-20'), 'Second', NULL); -INSERT INTO range_key_dictionary_source_table VALUES(3, toDate('2019-05-20'), toDate('2019-05-20'), 'Third', 'Third'); -``` - -ディクショナリを作成します: - -```sql -CREATE DICTIONARY range_key_dictionary -( - key UInt64, - start_date Date, - end_date Date, - value String, - value_nullable Nullable(String) -) -PRIMARY KEY key -SOURCE(CLICKHOUSE(HOST 'localhost' PORT tcpPort() TABLE 'range_key_dictionary_source_table')) -LIFETIME(MIN 1 MAX 1000) -LAYOUT(RANGE_HASHED()) -RANGE(MIN start_date MAX end_date); -``` - + 範囲キー辞書の例 + + 入力テーブルを作成します。 + + ```sql + CREATE TABLE range_key_dictionary_source_table + ( + key UInt64, + start_date Date, + end_date Date, + value String, + value_nullable Nullable(String) + ) + ENGINE = TinyLog(); + ``` + + データを入力テーブルに挿入します。 + + ```sql + INSERT INTO range_key_dictionary_source_table VALUES(1, toDate('2019-05-20'), toDate('2019-05-20'), 'First', 'First'); + INSERT INTO range_key_dictionary_source_table VALUES(2, toDate('2019-05-20'), toDate('2019-05-20'), 'Second', NULL); + INSERT INTO range_key_dictionary_source_table VALUES(3, toDate('2019-05-20'), toDate('2019-05-20'), 'Third', 'Third'); + ``` + + 辞書を作成します。 + + ```sql + CREATE DICTIONARY range_key_dictionary + ( + key UInt64, + start_date Date, + end_date Date, + value String, + value_nullable Nullable(String) + ) + PRIMARY KEY key + SOURCE(CLICKHOUSE(HOST 'localhost' PORT tcpPort() TABLE 'range_key_dictionary_source_table')) + LIFETIME(MIN 1 MAX 1000) + LAYOUT(RANGE_HASHED()) + RANGE(MIN start_date MAX end_date); + ```
-複合キーディクショナリの例 - -ソーステーブルを作成します: - -```sql -CREATE TABLE dict_mult_source -( -id UInt32, -c1 UInt32, -c2 String -) ENGINE = Memory; -``` - -ソーステーブルにデータを挿入します: - -```sql -INSERT INTO dict_mult_source VALUES -(1, 1, '1'), -(2, 2, '2'), -(3, 3, '3'); -``` - -ディクショナリを作成します: - -```sql -CREATE DICTIONARY ext_dict_mult -( - id UInt32, - c1 UInt32, - c2 String -) -PRIMARY KEY id -SOURCE(CLICKHOUSE(HOST 'localhost' PORT 9000 USER 'default' TABLE 'dict_mult_source' DB 'default')) -LAYOUT(FLAT()) -LIFETIME(MIN 0 MAX 0); -``` - + 複合キー辞書の例 + + ソーステーブルを作成します。 + + ```sql + CREATE TABLE dict_mult_source + ( + id UInt32, + c1 UInt32, + c2 String + ) ENGINE = Memory; + ``` + + データをソーステーブルに挿入します。 + + ```sql + INSERT INTO dict_mult_source VALUES + (1, 1, '1'), + (2, 2, '2'), + (3, 3, '3'); + ``` + + 辞書を作成します。 + + ```sql + CREATE DICTIONARY ext_dict_mult + ( + id UInt32, + c1 UInt32, + c2 String + ) + PRIMARY KEY id + SOURCE(CLICKHOUSE(HOST 'localhost' PORT 9000 USER 'default' TABLE 'dict_mult_source' DB 'default')) + LAYOUT(FLAT()) + LIFETIME(MIN 0 MAX 0); + ```
-階層型ディクショナリの例 - -ソーステーブルを作成します: - -```sql -CREATE TABLE hierarchy_source -( - id UInt64, - parent_id UInt64, - name String -) ENGINE = Memory; -``` - -ソーステーブルにデータを挿入します: - -```sql -INSERT INTO hierarchy_source VALUES -(0, 0, 'Root'), -(1, 0, 'Level 1 - Node 1'), -(2, 1, 'Level 2 - Node 2'), -(3, 1, 'Level 2 - Node 3'), -(4, 2, 'Level 3 - Node 4'), -(5, 2, 'Level 3 - Node 5'), -(6, 3, 'Level 3 - Node 6'); - --- 0 (Root) --- └── 1 (Level 1 - Node 1) --- ├── 2 (Level 2 - Node 2) --- │ ├── 4 (Level 3 - Node 4) --- │ └── 5 (Level 3 - Node 5) --- └── 3 (Level 2 - Node 3) --- └── 6 (Level 3 - Node 6) -``` + 階層型辞書の例 -ディクショナリを作成します: + ソーステーブルを作成します。 -```sql -CREATE DICTIONARY hierarchical_dictionary -( + ```sql + CREATE TABLE hierarchy_source + ( id UInt64, - parent_id UInt64 HIERARCHICAL, + parent_id UInt64, name String -) -PRIMARY KEY id -SOURCE(CLICKHOUSE(HOST 'localhost' PORT 9000 USER 'default' TABLE 'hierarchy_source' DB 'default')) -LAYOUT(HASHED()) -LIFETIME(MIN 300 MAX 600); -``` - + ) ENGINE = Memory; + ``` + + データをソーステーブルに挿入します。 + + ```sql + INSERT INTO hierarchy_source VALUES + (0, 0, 'Root'), + (1, 0, 'Level 1 - Node 1'), + (2, 1, 'Level 2 - Node 2'), + (3, 1, 'Level 2 - Node 3'), + (4, 2, 'Level 3 - Node 4'), + (5, 2, 'Level 3 - Node 5'), + (6, 3, 'Level 3 - Node 6'); + + -- 0 (Root) + -- └── 1 (Level 1 - Node 1) + -- ├── 2 (Level 2 - Node 2) + -- │ ├── 4 (Level 3 - Node 4) + -- │ └── 5 (Level 3 - Node 5) + -- └── 3 (Level 2 - Node 3) + -- └── 6 (Level 3 - Node 6) + ``` + + 辞書を作成します。 + + ```sql + CREATE DICTIONARY hierarchical_dictionary + ( + id UInt64, + parent_id UInt64 HIERARCHICAL, + name String + ) + PRIMARY KEY id + SOURCE(CLICKHOUSE(HOST 'localhost' PORT 9000 USER 'default' TABLE 'hierarchy_source' DB 'default')) + LAYOUT(HASHED()) + LIFETIME(MIN 300 MAX 600); + ```
- - +{/* + 以下のタグ内の内容は、ドキュメントフレームワークのビルド時に + system.functions から自動生成されたドキュメントに置き換えられます。タグを変更または削除しないでください。 + 詳細は https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md を参照してください。 + */ } {/*AUTOGENERATED_START*/ } -## dictGet - -導入バージョン: v18.16 - -ディクショナリから値を取得します。 - -**構文** - -```sql -dictGet('dict_name', attr_names, id_expr) -``` - -**引数** - -* `dict_name` — 辞書の名前。[`String`](/sql-reference/data-types/string) -* `attr_names` — 辞書の列名、または列名のタプル。[`String`](/sql-reference/data-types/string) または [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — キー値。`UInt64`/`Tuple(T)` を返す式。[`UInt64`](/sql-reference/data-types/int-uint) または [`Tuple(T)`](/sql-reference/data-types/tuple) - -**戻り値** - -キーが見つかった場合、`id_expr` に対応する辞書属性の値を返します。 -キーが見つからない場合、辞書の設定でその属性用に指定されている `` 要素の内容を返します。 - -**例** - -**単一の属性を取得する** - -```sql title=Query -SELECT dictGet('ext_dict_test', 'c1', toUInt64(1)) AS val -``` - -```response title=Response -1 -``` - -**複数の属性** - -```sql title=Query -SELECT - dictGet('ext_dict_mult', ('c1','c2'), number + 1) AS val, - toTypeName(val) AS type -FROM system.numbers -LIMIT 3; -``` - -```response title=Response -┌─val─────┬─type───────────┐ -│ (1,'1') │ Tuple( ↴│ -│ │↳ c1 UInt32,↴│ -│ │↳ c2 String) │ -│ (2,'2') │ Tuple( ↴│ -│ │↳ c1 UInt32,↴│ -│ │↳ c2 String) │ -│ (3,'3') │ Tuple( ↴│ -│ │↳ c1 UInt32,↴│ -│ │↳ c2 String) │ -└─────────┴────────────────┘ -``` - - -## dictGetAll - -導入バージョン: v23.5 - -辞書の設定内容に関係なく、辞書属性の値を `All` データ型に変換します。 - -**構文** - -```sql -dictGetAll(dict_name, attr_name, id_expr) -``` - -**引数** - -* `dict_name` — 辞書の名前。[`String`](/sql-reference/data-types/string) -* `attr_name` — 辞書のカラム名。[`String`](/sql-reference/data-types/string) または [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — キーの値。辞書のキー型の値、またはタプル値を返す式(辞書の設定に依存)。[`Expression`](/sql-reference/data-types/special-data-types/expression) または [`Tuple(T)`](/sql-reference/data-types/tuple) - -**戻り値** - -`id_expr` に対応する辞書属性の値を返します。 -それ以外の場合は、辞書の設定でその属性に対して指定された `` 要素の内容を返します。 - -:::note -ClickHouse は、属性の値を解析できない場合、または値が属性のデータ型と一致しない場合に例外をスローします。 -::: - -**例** - -**使用例** - -```sql title=Query -SELECT - 'Mozilla/5.0 (Linux; Android 12; SM-G998B) Mobile Safari/537.36' AS user_agent, - - -- すべての該当パターンにマッチします - dictGetAll('regexp_tree', 'os_replacement', 'Mozilla/5.0 (Linux; Android 12; SM-G998B) Mobile Safari/537.36') AS all_matches, - - -- 最初にマッチしたもののみを返します - dictGet('regexp_tree', 'os_replacement', 'Mozilla/5.0 (Linux; Android 12; SM-G998B) Mobile Safari/537.36') AS first_match; -``` - -```response title=Response -┌─user_agent─────────────────────────────────────────────────────┬─all_matches─────────────────────────────┬─first_match─┐ -│ Mozilla/5.0 (Linux; Android 12; SM-G998B) Mobile Safari/537.36 │ ['Android','Android','Android','Linux'] │ Android │ -└────────────────────────────────────────────────────────────────┴─────────────────────────────────────────┴─────────────┘ -``` - - -## dictGetChildren - -導入バージョン: v21.4 - -第1階層の子要素をインデックスの配列として返します。これは [dictGetHierarchy](#dictgethierarchy) の逆変換です。 - -**構文** - -```sql -dictGetChildren(dict_name, key) -``` - -**引数** - -* `dict_name` — 辞書の名前。[`String`](/sql-reference/data-types/string) -* `key` — 対象とするキー。[`const String`](/sql-reference/data-types/string) - -**返り値** - -指定したキーの第1階層の子孫を返します。[`Array(UInt64)`](/sql-reference/data-types/array) - -**使用例** - -**辞書の第1階層の子孫を取得する** - -```sql title=Query -SELECT dictGetChildren('hierarchical_dictionary', 2); -``` - -```response title=Response -┌─dictGetChild⋯ionary', 2)─┐ -│ [4,5] │ -└──────────────────────────┘ -``` - - -## dictGetDate - -導入バージョン: v1.1 - -辞書の設定に関係なく、辞書属性の値を `Date` データ型に変換します。 - -**構文** - -```sql -dictGetDate(dict_name, attr_name, id_expr) -``` - -**引数** - -* `dict_name` — 辞書の名前。[`String`](/sql-reference/data-types/string) -* `attr_name` — 辞書のカラム名。[`String`](/sql-reference/data-types/string) または [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — キーの値。辞書のキー型の値、またはタプル値を返す式(辞書の設定に依存)。[`Expression`](/sql-reference/data-types/special-data-types/expression) または [`Tuple(T)`](/sql-reference/data-types/tuple) - -**戻り値** - -`id_expr` に対応する辞書属性の値を返します。 -それ以外の場合は、辞書設定内でその属性に対して指定されている `` 要素の値を返します。 - -:::note -属性の値をパースできない場合、または値が属性のデータ型と一致しない場合、ClickHouse は例外をスローします。 -::: - -**例** - -**使用例** - -```sql title=Query -SELECT dictGetDate('all_types_dict', 'Date_value', 1) -``` - -```response title=Response -┌─dictGetDate(⋯_value', 1)─┐ -│ 2020-01-01 │ -└──────────────────────────┘ -``` - - -## dictGetDateOrDefault - -導入バージョン: v1.1 - -辞書の設定に関係なく、辞書属性の値を `Date` データ型として取得します。キーが見つからない場合は、指定されたデフォルト値を返します。 - -**構文** - -```sql -dictGetDateOrDefault(dict_name, attr_name, id_expr, default_value_expr) -``` - -**引数** - -* `dict_name` — 辞書の名前。[`String`](/sql-reference/data-types/string) -* `attr_name` — 辞書のカラム名。[`String`](/sql-reference/data-types/string) または [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — キーの値。辞書のキー型の値、またはタプル値を返す式(辞書の設定に依存)。[`Expression`](/sql-reference/data-types/special-data-types/expression) または [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value_expr` — 辞書に `id_expr` キーを持つ行が存在しない場合に返される値(もしくは値のタプル)。[`Expression`](/sql-reference/data-types/special-data-types/expression) または [`Tuple(T)`](/sql-reference/data-types/tuple) - -**戻り値** - -`id_expr` に対応する辞書属性の値を返し、 -対応する値が存在しない場合は `default_value_expr` パラメータで渡された値を返します。 - -:::note -属性の値をパースできない場合、または値が属性のデータ型と一致しない場合、ClickHouse は例外をスローします。 -::: - -**例** - -**使用例** - -```sql title=Query --- キーが存在する場合 -SELECT dictGetDate('all_types_dict', 'Date_value', 1); - --- キーが存在しない場合は、指定したデフォルト値を返す -SELECT dictGetDateOrDefault('all_types_dict', 'Date_value', 999, toDate('1970-01-01')); -``` - -```response title=Response -┌─dictGetDate(⋯_value', 1)─┐ -│ 2024-01-15 │ -└──────────────────────────┘ -┌─dictGetDateO⋯70-01-01'))─┐ -│ 1970-01-01 │ -└──────────────────────────┘ -``` - - -## dictGetDateTime - -導入: v1.1 - -辞書の設定に関係なく、辞書の属性値を `DateTime` データ型に変換します。 - -**構文** - -```sql -dictGetDateTime(dict_name, attr_name, id_expr) -``` - -**引数** - -* `dict_name` — 辞書の名前。[`String`](/sql-reference/data-types/string) -* `attr_name` — 辞書の列名。[`String`](/sql-reference/data-types/string) または [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — キー値。辞書のキー型の値、またはタプル値を返す式(辞書設定に依存)。[`Expression`](/sql-reference/data-types/special-data-types/expression) または [`Tuple(T)`](/sql-reference/data-types/tuple) - -**戻り値** - -`id_expr` に対応する辞書属性の値を返します。 -対応する値が存在しない場合は、辞書設定でその属性に対して指定された `` 要素の内容を返します。 - -:::note -ClickHouse は、属性の値を解釈できない場合、または値が属性のデータ型と一致しない場合に例外を発生させます。 -::: - -**例** - -**使用例** - -```sql title=Query -SELECT dictGetDateTime('all_types_dict', 'DateTime_value', 1) -``` - -```response title=Response -┌─dictGetDateT⋯_value', 1)─┐ -│ 2024-01-15 10:30:00 │ -└──────────────────────────┘ -``` - - -## dictGetDateTimeOrDefault - -導入バージョン: v1.1 - -辞書の設定内容に関係なく、辞書属性値を `DateTime` データ型に変換するか、キーが見つからない場合は指定したデフォルト値を返します。 - -**構文** - -```sql -dictGetDateTimeOrDefault(辞書名, 属性名, ID式, デフォルト値式) -``` - -**引数** - -* `dict_name` — 辞書の名前。[`String`](/sql-reference/data-types/string) -* `attr_name` — 辞書のカラム名。[`String`](/sql-reference/data-types/string) または [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — キーの値。辞書のキー型の値またはタプル値を返す式(辞書の設定に依存)。[`Expression`](/sql-reference/data-types/special-data-types/expression) または [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value_expr` — 辞書に `id_expr` キーを持つ行が存在しない場合に返される値(複数可)。[`Expression`](/sql-reference/data-types/special-data-types/expression) または [`Tuple(T)`](/sql-reference/data-types/tuple) - -**戻り値** - -`id_expr` に対応する辞書の属性値を返し、存在しない場合は `default_value_expr` パラメータで渡された値を返します。 - -:::note -ClickHouse は、属性の値を解析できない場合、または値が属性のデータ型と一致しない場合に例外を送出します。 -::: - -**例** - -**使用例** - -```sql title=Query --- キーが存在する場合 -SELECT dictGetDateTime('all_types_dict', 'DateTime_value', 1); - --- キーが存在しない場合は、指定したデフォルト値を返す -SELECT dictGetDateTimeOrDefault('all_types_dict', 'DateTime_value', 999, toDateTime('1970-01-01 00:00:00')); -``` - -```response title=Response -┌─dictGetDateT⋯_value', 1)─┐ -│ 2024-01-15 10:30:00 │ -└──────────────────────────┘ -┌─dictGetDateT⋯0:00:00'))──┐ -│ 1970-01-01 00:00:00 │ -└──────────────────────────┘ -``` - - -## dictGetDescendants - -導入バージョン: v21.4 - -[`dictGetChildren`](#dictGetChildren) 関数を `level` 回再帰的に適用した場合と同じ結果として、すべての子孫を返します。 - -**構文** - -```sql -dictGetDescendants(dict_name, key, level) -``` - -**引数** - -* `dict_name` — 辞書名。[`String`](/sql-reference/data-types/string) -* `key` — 照会対象のキー。[`const String`](/sql-reference/data-types/string) -* `level` — 照会対象キーの階層レベル。`level = 0` の場合、末端までのすべての子孫を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**戻り値** - -指定したキーに対する子孫を返します。[`Array(UInt64)`](/sql-reference/data-types/array) - -**例** - -**辞書の第 1 階層の子要素を取得する** - -```sql title=Query --- 以下の階層型ディクショナリを考えます: --- 0 (ルート) --- └── 1 (レベル 1 - ノード 1) --- ├── 2 (レベル 2 - ノード 2) --- │ ├── 4 (レベル 3 - ノード 4) --- │ └── 5 (レベル 3 - ノード 5) --- └── 3 (レベル 2 - ノード 3) --- └── 6 (レベル 3 - ノード 6) - -SELECT dictGetDescendants('hierarchical_dictionary', 0, 2) -``` - -```response title=Response -┌─dictGetDesce⋯ary', 0, 2)─┐ -│ [3,2] │ -└──────────────────────────┘ -``` - - -## dictGetFloat32 - -導入バージョン: v1.1 - -辞書の設定に関係なく、辞書属性の値を `Float32` 型に変換します。 - -**構文** - -```sql -dictGetFloat32(dict_name, attr_name, id_expr) -``` - -**引数** - -* `dict_name` — 辞書の名前。[`String`](/sql-reference/data-types/string) -* `attr_name` — 辞書の列名。[`String`](/sql-reference/data-types/string) または [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — キー値。辞書キー型の値、またはタプル値(辞書の設定に依存)を返す式。[`Expression`](/sql-reference/data-types/special-data-types/expression) または [`Tuple(T)`](/sql-reference/data-types/tuple) - -**返り値** - -`id_expr` に対応する辞書属性の値を返します。 -それ以外の場合は、辞書設定でその属性に対して指定されている `` 要素の内容を返します。 - -:::note -属性の値を解析できない場合、または値が属性のデータ型と一致しない場合、ClickHouse は例外をスローします。 -::: - -**例** - -**使用例** - -```sql title=Query -SELECT dictGetFloat32('all_types_dict', 'Float32_value', 1) -``` - -```response title=Response -┌─dictGetFloat⋯_value', 1)─┐ -│ -123.123 │ -└──────────────────────────┘ -``` - - -## dictGetFloat32OrDefault - -導入バージョン: v1.1 - -辞書の設定に関係なく、辞書属性の値を `Float32` データ型に変換するか、キーが見つからない場合は指定されたデフォルト値を返します。 - -**構文** - -```sql -dictGetFloat32OrDefault(辞書名, 属性名, ID式, デフォルト値式) -``` - -**引数** - -* `dict_name` — 辞書の名前。[`String`](/sql-reference/data-types/string) -* `attr_name` — 辞書のカラム名。[`String`](/sql-reference/data-types/string) または [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — キー値。辞書のキー型の値、またはタプル値を返す式(辞書の設定に依存)。[`Expression`](/sql-reference/data-types/special-data-types/expression) または [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value_expr` — 辞書に `id_expr` キーを持つ行が存在しない場合に返される値(複数可)。[`Expression`](/sql-reference/data-types/special-data-types/expression) または [`Tuple(T)`](/sql-reference/data-types/tuple) - -**戻り値** - -`id_expr` に対応する辞書の属性値を返し、 -存在しない場合は `default_value_expr` パラメータとして渡された値を返します。 - -:::note -ClickHouse は、属性の値をパースできない場合、または値が属性のデータ型と一致しない場合に例外をスローします。 -::: - -**例** - -**使用例** - -```sql title=Query --- キーが存在する場合 -SELECT dictGetFloat32('all_types_dict', 'Float32_value', 1); - --- キーが存在しない場合は、指定したデフォルト値(-1.0)を返す -SELECT dictGetFloat32OrDefault('all_types_dict', 'Float32_value', 999, -1.0); -``` - -```response title=Response -┌─dictGetFloat⋯_value', 1)─┐ -│ 123.45 │ -└──────────────────────────┘ -┌─dictGetFloat⋯e', 999, -1)─┐ -│ -1 │ -└───────────────────────────┘ -``` - - -## dictGetFloat64 - -導入バージョン: v1.1 - -ディクショナリの設定内容に関係なく、ディクショナリ属性の値を `Float64` 型に変換します。 - -**構文** - -```sql -dictGetFloat64(dict_name, attr_name, id_expr) -``` - -**引数** - -* `dict_name` — 辞書の名前。[`String`](/sql-reference/data-types/string) -* `attr_name` — 辞書のカラム名。[`String`](/sql-reference/data-types/string) または [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — キー値。辞書のキー型の値、またはタプル値を返す式(辞書の設定によって異なる)。[`Expression`](/sql-reference/data-types/special-data-types/expression) または [`Tuple(T)`](/sql-reference/data-types/tuple) - -**戻り値** - -`id_expr` に対応する辞書属性の値を返します。 -それ以外の場合には、辞書の設定でその属性に対して指定された `` 要素の内容を返します。 - -:::note -属性の値をパースできない場合、または値が属性のデータ型と一致しない場合、ClickHouse は例外をスローします。 -::: - -**例** - -**使用例** - -```sql title=Query -SELECT dictGetFloat64('all_types_dict', 'Float64_value', 1) -``` - -```response title=Response -┌─dictGetFloat⋯_value', 1)─┐ -│ -123.123 │ -└──────────────────────────┘ -``` - - -## dictGetFloat64OrDefault - -導入バージョン: v1.1 - -辞書の設定に関係なく、辞書属性値を `Float64` 型に変換するか、キーが見つからない場合は指定されたデフォルト値を返します。 - -**構文** - -```sql -dictGetFloat64OrDefault(辞書名, 属性名, ID式, デフォルト値式) -``` - -**引数** - -* `dict_name` — 辞書の名前。[`String`](/sql-reference/data-types/string) -* `attr_name` — 辞書の列名。[`String`](/sql-reference/data-types/string) または [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — キー値。辞書のキー型の値、またはタプル値を返す式(辞書の設定に依存します)。[`Expression`](/sql-reference/data-types/special-data-types/expression) または [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value_expr` — 辞書に `id_expr` キーを持つ行が存在しない場合に返される値。[`Expression`](/sql-reference/data-types/special-data-types/expression) または [`Tuple(T)`](/sql-reference/data-types/tuple) - -**戻り値** - -`id_expr` に対応する辞書の属性値を返し、 -存在しない場合は `default_value_expr` パラメータで渡された値を返します。 - -:::note -属性値を解析できない場合、または値が属性のデータ型と一致しない場合、ClickHouse は例外を送出します。 -::: - -**例** - -**使用例** - -```sql title=Query --- キーが存在する場合 -SELECT dictGetFloat64('all_types_dict', 'Float64_value', 1); - --- キーが存在しない場合は、指定したデフォルト値(nan)を返す -SELECT dictGetFloat64OrDefault('all_types_dict', 'Float64_value', 999, nan); -``` - -```response title=Response -┌─dictGetFloat⋯_value', 1)─┐ -│ 987654.123456 │ -└──────────────────────────┘ -┌─dictGetFloat⋯, 999, nan)─┐ -│ nan │ -└──────────────────────────┘ -``` - - -## dictGetHierarchy - -導入バージョン: v1.1 - -[階層型辞書](../../sql-reference/dictionaries/index.md#hierarchical-dictionaries)における、指定したキーのすべての親を含む配列を作成します。 - -**構文** - -```sql -dictGetHierarchy(dict_name, key) -``` - -**引数** - -* `dict_name` — 辞書名。[`String`](/sql-reference/data-types/string) -* `key` — キーの値。[`const String`](/sql-reference/data-types/string) - -**戻り値** - -キーに対応する親を返します。[`Array(UInt64)`](/sql-reference/data-types/array) - -**例** - -**キーの階層を取得する** - -```sql title=Query -SELECT dictGetHierarchy('hierarchical_dictionary', 5) -``` - -```response title=Response -┌─dictGetHiera⋯ionary', 5)─┐ -│ [5,2,1] │ -└──────────────────────────┘ -``` - - -## dictGetIPv4 - -導入バージョン: v1.1 - -辞書の設定に関係なく、辞書の属性値を `IPv4` データ型に変換します。 - -**構文** - -```sql -dictGetIPv4(dict_name, attr_name, id_expr) -``` - -**引数** - -* `dict_name` — 辞書の名前。[`String`](/sql-reference/data-types/string) -* `attr_name` — 辞書の列名。[`String`](/sql-reference/data-types/string) または [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — キーの値。辞書のキー型の値、またはタプル値を返す式(辞書の設定に依存)。[`Expression`](/sql-reference/data-types/special-data-types/expression) または [`Tuple(T)`](/sql-reference/data-types/tuple) - -**返り値** - -`id_expr` に対応する辞書属性の値を返します。 -対応する値がない場合は、辞書設定でその属性に対して指定されている `` 要素の内容を返します。 - -:::note -ClickHouse は、属性の値を解析できない場合、または値が属性のデータ型と一致しない場合に例外をスローします。 -::: - -**例** - -**使用例** - -```sql title=Query -SELECT dictGetIPv4('all_types_dict', 'IPv4_value', 1) -``` - -```response title=Response -┌─dictGetIPv4('all_⋯ 'IPv4_value', 1)─┐ -│ 192.168.0.1 │ -└─────────────────────────────────────┘ -``` - - -## dictGetIPv4OrDefault - -導入バージョン: v23.1 - -辞書の設定に関係なく、辞書の属性値を `IPv4` データ型に変換するか、キーが見つからない場合には指定されたデフォルト値を返します。 - -**構文** - -```sql -dictGetIPv4OrDefault(辞書名, 属性名, ID式, デフォルト値式) -``` - -**引数** - -* `dict_name` — 辞書の名前。[`String`](/sql-reference/data-types/string) -* `attr_name` — 辞書の列名。[`String`](/sql-reference/data-types/string) または [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — キー値。辞書のキー型の値、またはタプル値を返す式(辞書の設定に依存します)。[`Expression`](/sql-reference/data-types/special-data-types/expression) または [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value_expr` — 辞書に `id_expr` キーを持つ行が存在しない場合に返される値(または値の組)。[`Expression`](/sql-reference/data-types/special-data-types/expression) または [`Tuple(T)`](/sql-reference/data-types/tuple) - -**戻り値** - -`id_expr` に対応する辞書属性の値を返し、存在しない場合は `default_value_expr` パラメータとして渡された値を返します。 - -:::note -属性の値を解析できない場合、または値が属性のデータ型と一致しない場合、ClickHouse は例外を発生させます。 -::: - -**例** - -**使用例** - -```sql title=Query --- キーが存在する場合 -SELECT dictGetIPv4('all_types_dict', 'IPv4_value', 1); - --- キーが存在しない場合は、指定したデフォルト値を返す -SELECT dictGetIPv4OrDefault('all_types_dict', 'IPv4_value', 999, toIPv4('0.0.0.0')); -``` - -```response title=Response -┌─dictGetIPv4('all_⋯ 'IPv4_value', 1)─┐ -│ 192.168.0.1 │ -└─────────────────────────────────────┘ -┌─dictGetIPv4OrDefa⋯0.0.0.0'))─┐ -│ 0.0.0.0 │ -└──────────────────────────────┘ -``` - - -## dictGetIPv6 - -導入バージョン: v23.1 - -ディクショナリの設定に関係なく、ディクショナリ属性の値を `IPv6` 型に変換します。 - -**構文** - -```sql -dictGetIPv6(dict_name, attr_name, id_expr) -``` - -**引数** - -* `dict_name` — 辞書の名前。[`String`](/sql-reference/data-types/string) -* `attr_name` — 辞書のカラム名。[`String`](/sql-reference/data-types/string) または [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — キー値。辞書のキー型の値またはタプル値(辞書の設定に依存)を返す式。[`Expression`](/sql-reference/data-types/special-data-types/expression) または [`Tuple(T)`](/sql-reference/data-types/tuple) - -**戻り値** - -`id_expr` に対応する辞書属性の値を返します。 -対応する値が存在しない場合は、辞書の設定でその属性に対して指定された `` 要素の内容を返します。 - -:::note -属性の値を解析できない場合、または値が属性のデータ型と一致しない場合、ClickHouse は例外をスローします。 -::: - -**例** - -**使用例** - -```sql title=Query -SELECT dictGetIPv6('all_types_dict', 'IPv6_value', 1) -``` - -```response title=Response -┌─dictGetIPv6('all_⋯ 'IPv6_value', 1)─┐ -│ 2001:db8:85a3::8a2e:370:7334 │ -└─────────────────────────────────────┘ -``` - - -## dictGetIPv6OrDefault - -導入バージョン: v23.1 - -辞書の設定に関係なく、辞書属性値を `IPv6` データ型に変換し、キーが見つからない場合は指定されたデフォルト値を返します。 - -**構文** - -```sql -dictGetIPv6OrDefault(dict_name, attr_name, id_expr, default_value_expr) -``` - -**引数** - -* `dict_name` — 辞書の名前。[`String`](/sql-reference/data-types/string) -* `attr_name` — 辞書のカラム名。[`String`](/sql-reference/data-types/string) または [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — キー値。辞書のキー型の値、またはタプル値を返す式(辞書の構成に依存)。[`Expression`](/sql-reference/data-types/special-data-types/expression) または [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value_expr` — 辞書に `id_expr` キーを持つ行が存在しない場合に返される値。[`Expression`](/sql-reference/data-types/special-data-types/expression) または [`Tuple(T)`](/sql-reference/data-types/tuple) - -**戻り値** - -`id_expr` に対応する辞書属性の値を返し、 -存在しない場合は `default_value_expr` パラメータとして渡された値を返します。 - -:::note -ClickHouse は、属性の値をパースできない場合、または値が属性のデータ型と一致しない場合に例外をスローします。 -::: - -**例** - -**使用例** - -```sql title=Query --- 存在するキーの場合 -SELECT dictGetIPv6('all_types_dict', 'IPv6_value', 1); - --- 存在しないキーの場合は、指定したデフォルト値を返す -SELECT dictGetIPv6OrDefault('all_types_dict', 'IPv6_value', 999, '::1'::IPv6); -``` - -```response title=Response -┌─dictGetIPv6('all_⋯ 'IPv6_value', 1)─┐ -│ 2001:db8:85a3::8a2e:370:7334 │ -└─────────────────────────────────────┘ -┌─dictGetIPv6OrDefa⋯:1'::IPv6)─┐ -│ ::1 │ -└──────────────────────────────┘ -``` - - -## dictGetInt16 - -導入バージョン: v1.1 - -辞書設定に関係なく、辞書属性値を `Int16` データ型に変換します。 - -**構文** - -```sql -dictGetInt16(dict_name, attr_name, id_expr) -``` - -**引数** - -* `dict_name` — 辞書の名前。[`String`](/sql-reference/data-types/string) -* `attr_name` — 辞書の列名。[`String`](/sql-reference/data-types/string) または [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — キー値。辞書のキー型の値、またはタプル値を返す式(辞書の設定に依存)。[`Expression`](/sql-reference/data-types/special-data-types/expression) または [`Tuple(T)`](/sql-reference/data-types/tuple) - -**戻り値** - -`id_expr` に対応する辞書属性の値を返します。 -対応する値がない場合は、辞書設定でその属性に対して指定された `` 要素の内容を返します。 - -:::note -属性の値を解析できない場合、または値が属性のデータ型と一致しない場合、ClickHouse は例外をスローします。 -::: - -**例** - -**使用例** - -```sql title=Query -SELECT dictGetInt16('all_types_dict', 'Int16_value', 1) -``` - -```response title=Response -┌─dictGetInt16⋯_value', 1)─┐ -│ -5000 │ -└──────────────────────────┘ -``` - - -## dictGetInt16OrDefault - -導入バージョン: v1.1 - -辞書設定に関係なく、辞書属性値を `Int16` 型に変換するか、キーが見つからない場合は指定されたデフォルト値を返します。 - -**構文** - -```sql -dictGetInt16OrDefault(辞書名, 属性名, ID式, デフォルト値式) -``` - -**引数** - -* `dict_name` — 辞書の名前。[`String`](/sql-reference/data-types/string) -* `attr_name` — 辞書のカラム名。[`String`](/sql-reference/data-types/string) または [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — キー値。辞書のキー型の値、またはタプル値を返す式(辞書の設定に依存します)。[`Expression`](/sql-reference/data-types/special-data-types/expression) または [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value_expr` — 辞書に `id_expr` キーを持つ行が存在しない場合に返される値。[`Expression`](/sql-reference/data-types/special-data-types/expression) または [`Tuple(T)`](/sql-reference/data-types/tuple) - -**戻り値** - -`id_expr` に対応する辞書の属性の値を返します。 -対応する値がない場合は、`default_value_expr` パラメータとして渡された値を返します。 - -:::note -ClickHouse は、属性の値を解析できない場合、または値が属性のデータ型と一致しない場合に例外をスローします。 -::: - -**例** - -**使用例** - -```sql title=Query --- キーが存在する場合 -SELECT dictGetInt16('all_types_dict', 'Int16_value', 1); - --- キーが存在しない場合は、指定したデフォルト値(-1)を返す -SELECT dictGetInt16OrDefault('all_types_dict', 'Int16_value', 999, -1); -``` - -```response title=Response -┌─dictGetInt16⋯_value', 1)─┐ -│ -5000 │ -└──────────────────────────┘ -┌─dictGetInt16⋯', 999, -1)─┐ -│ -1 │ -└──────────────────────────┘ -``` - - -## dictGetInt32 - -導入バージョン: v1.1 - -辞書の設定に関係なく、辞書属性の値を `Int32` 型に変換します。 - -**構文** - -```sql -dictGetInt32(dict_name, attr_name, id_expr) -``` - -**引数** - -* `dict_name` — 辞書の名前。[`String`](/sql-reference/data-types/string) -* `attr_name` — 辞書の列名。[`String`](/sql-reference/data-types/string) または [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — キー値。辞書のキー型の値、またはタプル値を返す式(辞書設定によって異なる)。[`Expression`](/sql-reference/data-types/special-data-types/expression) または [`Tuple(T)`](/sql-reference/data-types/tuple) - -**返り値** - -`id_expr` に対応する辞書属性の値を返します。 -対応する値がない場合は、辞書設定でその属性に対して指定された `` 要素の内容を返します。 - -:::note -属性の値を解析できない場合、または値が属性のデータ型と一致しない場合、ClickHouse は例外をスローします。 -::: - -**例** - -**使用例** - -```sql title=Query -SELECT dictGetInt32('all_types_dict', 'Int32_value', 1) -``` - -```response title=Response -┌─dictGetInt32⋯_value', 1)─┐ -│ -1000000 │ -└──────────────────────────┘ -``` - - -## dictGetInt32OrDefault - -導入バージョン: v1.1 - -ディクショナリの設定内容に関係なく、ディクショナリ属性値を `Int32` 型に変換するか、キーが見つからない場合は指定されたデフォルト値を返します。 - -**構文** - -```sql -dictGetInt32OrDefault(辞書名, 属性名, ID式, デフォルト値式) -``` - -**引数** - -* `dict_name` — 辞書の名前。[`String`](/sql-reference/data-types/string) -* `attr_name` — 辞書の列名。[`String`](/sql-reference/data-types/string) または [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — キー値。辞書のキー型の値またはタプル値を返す式(辞書の設定に依存)。[`Expression`](/sql-reference/data-types/special-data-types/expression) または [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value_expr` — 辞書に `id_expr` キーの行が存在しない場合に返される値(複数可)。[`Expression`](/sql-reference/data-types/special-data-types/expression) または [`Tuple(T)`](/sql-reference/data-types/tuple) - -**戻り値** - -`id_expr` に対応する辞書の属性値を返し、 -それ以外の場合は `default_value_expr` パラメータで渡された値を返します。 - -:::note -属性の値を解析できない場合、または値が属性のデータ型と一致しない場合、ClickHouse は例外をスローします。 -::: - -**例** - -**使用例** - -```sql title=Query --- 存在するキーの場合 -SELECT dictGetInt32('all_types_dict', 'Int32_value', 1); - --- 存在しないキーの場合は、指定したデフォルト値(-1)を返す -SELECT dictGetInt32OrDefault('all_types_dict', 'Int32_value', 999, -1); -``` - -```response title=Response -┌─dictGetInt32⋯_value', 1)─┐ -│ -1000000 │ -└──────────────────────────┘ -┌─dictGetInt32⋯', 999, -1)─┐ -│ -1 │ -└──────────────────────────┘ -``` - - -## dictGetInt64 - -導入バージョン: v1.1 - -辞書の設定に関係なく、辞書の属性値を `Int64` データ型に変換します。 - -**構文** - -```sql -dictGetInt64(dict_name, attr_name, id_expr) -``` - -**引数** - -* `dict_name` — 辞書の名前。[`String`](/sql-reference/data-types/string) -* `attr_name` — 辞書のカラム名。[`String`](/sql-reference/data-types/string) または [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — キー値。辞書のキー型の値、またはタプル値を返す式(辞書の設定に依存)。[`Expression`](/sql-reference/data-types/special-data-types/expression) または [`Tuple(T)`](/sql-reference/data-types/tuple) - -**戻り値** - -`id_expr` に対応する辞書の属性値を返します。 -該当する値がない場合は、辞書の設定でその属性に指定された `` 要素の内容を返します。 - -:::note -ClickHouse は、属性の値をパースできない場合、または値が属性のデータ型と一致しない場合に例外をスローします。 -::: - -**例** - -**使用例** - -```sql title=Query -SELECT dictGetInt64('all_types_dict', 'Int64_value', 1) -``` - -```response title=Response -┌─dictGetInt64⋯_value', 1)───┐ -│ -9223372036854775807 │ -└────────────────────────────┘ -``` - - -## dictGetInt64OrDefault - -導入バージョン: v1.1 - -辞書の設定に関係なく、辞書属性の値を `Int64` データ型に変換し、キーが見つからない場合は指定されたデフォルト値を返します。 - -**構文** - -```sql -dictGetInt64OrDefault(dict_name, attr_name, id_expr, default_value_expr) -``` - -**引数** - -* `dict_name` — 辞書の名前。[`String`](/sql-reference/data-types/string) -* `attr_name` — 辞書の列名。[`String`](/sql-reference/data-types/string) または [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — キーの値。辞書のキー型の値またはタプル値を返す式(辞書の設定に依存)。[`Expression`](/sql-reference/data-types/special-data-types/expression) または [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value_expr` — 辞書に `id_expr` キーの行が存在しない場合に返される値。[`Expression`](/sql-reference/data-types/special-data-types/expression) または [`Tuple(T)`](/sql-reference/data-types/tuple) - -**戻り値** - -`id_expr` に対応する辞書属性の値を返し、 -それ以外の場合には `default_value_expr` パラメータで渡された値を返します。 - -:::note -ClickHouse は、属性の値を解析できない場合、または値が属性のデータ型と一致しない場合に例外をスローします。 -::: - -**例** - -**使用例** - -```sql title=Query --- キーが存在する場合 -SELECT dictGetInt64('all_types_dict', 'Int64_value', 1); - --- キーが存在しない場合は、指定したデフォルト値(-1)を返す -SELECT dictGetInt64OrDefault('all_types_dict', 'Int64_value', 999, -1); -``` - -```response title=Response -┌─dictGetInt64⋯_value', 1)─┐ -│ -9223372036854775808 │ -└──────────────────────────┘ -┌─dictGetInt64⋯', 999, -1)─┐ -│ -1 │ -└──────────────────────────┘ -``` - - -## dictGetInt8 - -導入バージョン: v1.1 - -辞書の設定に関係なく、辞書属性の値を `Int8` 型に変換します。 - -**構文** - -```sql -dictGetInt8(dict_name, attr_name, id_expr) -``` - -**引数** - -* `dict_name` — 辞書の名前。[`String`](/sql-reference/data-types/string) -* `attr_name` — 辞書の列名。[`String`](/sql-reference/data-types/string) または [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — キー値。辞書のキーの型の値、またはタプル値(辞書設定に依存)を返す式。[`Expression`](/sql-reference/data-types/special-data-types/expression) または [`Tuple(T)`](/sql-reference/data-types/tuple) - -**戻り値** - -`id_expr` に対応する辞書属性の値を返します。 -対応する値が存在しない場合は、辞書設定でその属性に対して指定された `` 要素の内容を返します。 - -:::note -ClickHouseは、属性の値をパースできない場合、または値が属性のデータ型と一致しない場合に例外をスローします。 -::: - -**例** - -**使用例** - -```sql title=Query -SELECT dictGetInt8('all_types_dict', 'Int8_value', 1) -``` - -```response title=Response -┌─dictGetInt8(⋯_value', 1)─┐ -│ -100 │ -└──────────────────────────┘ -``` - - -## dictGetInt8OrDefault - -導入バージョン: v1.1 - -辞書の設定に関わらず、辞書の属性値を `Int8` データ型に変換するか、キーが見つからない場合は指定されたデフォルト値を返します。 - -**構文** - -```sql -dictGetInt8OrDefault(dict_name, attr_name, id_expr, default_value_expr) -``` - -**引数** - -* `dict_name` — 辞書の名前。[`String`](/sql-reference/data-types/string) -* `attr_name` — 辞書のカラム名。[`String`](/sql-reference/data-types/string) または [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — キー値。辞書のキー型の値、またはタプル値を返す式(辞書の設定によって異なる)。[`Expression`](/sql-reference/data-types/special-data-types/expression) または [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value_expr` — 辞書に `id_expr` キーの行が存在しない場合に返す値。[`Expression`](/sql-reference/data-types/special-data-types/expression) または [`Tuple(T)`](/sql-reference/data-types/tuple) - -**戻り値** - -`id_expr` に対応する辞書属性の値を返し、 -存在しない場合は `default_value_expr` パラメータで渡された値を返します。 - -:::note -属性の値をパースできない場合、または値が属性のデータ型と一致しない場合、ClickHouse は例外をスローします。 -::: - -**例** - -**使用例** - -```sql title=Query --- キーが存在する場合 -SELECT dictGetInt8('all_types_dict', 'Int8_value', 1); - --- キーが存在しない場合は、指定したデフォルト値(-1)を返す -SELECT dictGetInt8OrDefault('all_types_dict', 'Int8_value', 999, -1); -``` - -```response title=Response -┌─dictGetInt8(⋯_value', 1)─┐ -│ -100 │ -└──────────────────────────┘ -┌─dictGetInt8O⋯', 999, -1)─┐ -│ -1 │ -└──────────────────────────┘ -``` - - -## dictGetKeys - -導入バージョン: v25.11 - -指定した値と等しい属性を持つ辞書キー(複数可)を返します。これは単一属性に対する関数 `dictGet` の逆演算に相当します。 - -設定 `max_reverse_dictionary_lookup_cache_size_bytes` を使用して、`dictGetKeys` が利用するクエリごとの逆引きキャッシュのサイズ上限を設定します。 -このキャッシュは、同一クエリ内で辞書を再スキャンしないように、各属性値に対するシリアライズ済みキーのタプルを保存します。 -キャッシュはクエリ間で永続化されません。上限に達した場合、エントリは LRU に基づいて削除されます。 -これは、入力のカーディナリティが低く、ワーキングセットがキャッシュに収まる大規模な辞書で最も効果的です。キャッシュを無効化するには `0` を設定します。 - -**構文** - -```sql -dictGetKeys('dict_name', 'attr_name', value_expr) -``` - -**引数** - -* `dict_name` — 辞書の名前。[`String`](/sql-reference/data-types/string) -* `attr_name` — 照合対象の属性名。[`String`](/sql-reference/data-types/string) -* `value_expr` — 属性と比較する値。[`Expression`](/sql-reference/data-types/special-data-types/expression) - -**戻り値** - -単一キーの辞書の場合: 属性が `value_expr` と等しいキーの配列。複合キーの辞書の場合: 属性が `value_expr` と等しいキーのタプルの配列。辞書内に `value_expr` に対応する属性が存在しない場合は、空の配列が返されます。ClickHouse は、属性の値をパースできない場合、または値を属性のデータ型に変換できない場合に例外をスローします。 - -**例** - - -## dictGetOrDefault - -導入バージョン: v18.16 - -辞書から値を取得し、キーが見つからない場合はデフォルト値を返します。 - -**構文** - -```sql -dictGetOrDefault('dict_name', attr_names, id_expr, default_value) -``` - -**引数** - -* `dict_name` — 辞書の名前。[`String`](/sql-reference/data-types/string) -* `attr_names` — 辞書の列名、または列名のタプル。[`String`](/sql-reference/data-types/string) または [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — キーの値。UInt64/Tuple(T) を返す式。[`UInt64`](/sql-reference/data-types/int-uint) または [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value` — キーが見つからない場合に返すデフォルト値。型は属性のデータ型と一致している必要があります。 - -**戻り値** - -キーが見つかった場合、`id_expr` に対応する辞書属性の値を返します。 -キーが見つからない場合、指定された `default_value` を返します。 - -**例** - -**デフォルト値付きで値を取得** - -```sql title=Query -SELECT dictGetOrDefault('ext_dict_mult', 'c1', toUInt64(999), 0) AS val -``` - -```response title=Response -0 -``` - - -## dictGetOrNull - -導入バージョン: v21.4 - -辞書から値を取得し、キーが見つからない場合は NULL を返します。 - -**構文** - -```sql -dictGetOrNull('dict_name', 'attr_name', id_expr) -``` - -**引数** - -* `dict_name` — 辞書名。文字列リテラル。 - `attr_name` — 取得するカラム名。文字列リテラル。 - `id_expr` — キーの値。辞書のキー型の値を返す式。 - -**返り値** - -キーが見つかった場合、`id_expr` に対応する辞書属性の値を返します。 -キーが見つからない場合は `NULL` を返します。 - -**例** - -**範囲キー辞書を使用する例** - -```sql title=Query -SELECT - (number, toDate('2019-05-20')), - dictGetOrNull('range_key_dictionary', 'value', number, toDate('2019-05-20')), -FROM system.numbers LIMIT 5 FORMAT TabSeparated; -``` - -```response title=Response -(0,'2019-05-20') \N -(1,'2019-05-20') First -(2,'2019-05-20') Second -(3,'2019-05-20') Third -(4,'2019-05-20') \N -``` - - -## dictGetString - -導入されたバージョン: v1.1 - -辞書の設定内容に関わらず、辞書の属性値を `String` データ型に変換します。 - -**構文** - -```sql -dictGetString(dict_name, attr_name, id_expr) -``` - -**引数** - -* `dict_name` — 辞書の名前。[`String`](/sql-reference/data-types/string) -* `attr_name` — 辞書の列名。[`String`](/sql-reference/data-types/string) または [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — キー値。辞書のキー型の値、またはタプル値を返す式(辞書の設定に依存)。[`Expression`](/sql-reference/data-types/special-data-types/expression) または [`Tuple(T)`](/sql-reference/data-types/tuple) - -**戻り値** - -`id_expr` に対応する辞書属性の値を返します。 -対応する値がない場合は、辞書設定でその属性に対して指定された `` 要素の内容を返します。 - -:::note -ClickHouse は、属性の値を解析できない場合、または値が属性のデータ型と一致しない場合に例外をスローします。 -::: - -**例** - -**使用例** - -```sql title=Query -SELECT dictGetString('all_types_dict', 'String_value', 1) -``` - -```response title=Response -┌─dictGetString(⋯_value', 1)─┐ -│ test string │ -└────────────────────────────┘ -``` - - -## dictGetStringOrDefault - -導入バージョン: v1.1 - -辞書の設定に関係なく辞書属性の値を `String` 型に変換するか、キーが見つからない場合には指定されたデフォルト値を返します。 - -**構文** - -```sql -dictGetStringOrDefault(辞書名, 属性名, ID式, デフォルト値式) -``` - -**引数** - -* `dict_name` — 辞書の名前。[`String`](/sql-reference/data-types/string) -* `attr_name` — 辞書の列名。[`String`](/sql-reference/data-types/string) または [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — キー値。辞書のキー型の値、または値のタプルを返す式(辞書の設定に依存)。[`Expression`](/sql-reference/data-types/special-data-types/expression) または [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value_expr` — `id_expr` キーを持つ行が辞書に存在しない場合に返される値(複数可)。[`Expression`](/sql-reference/data-types/special-data-types/expression) または [`Tuple(T)`](/sql-reference/data-types/tuple) - -**戻り値** - -`id_expr` に対応する辞書属性の値を返し、 -それ以外の場合は `default_value_expr` パラメータとして渡された値を返します。 - -:::note -ClickHouse は、属性の値を解析できない場合、または値が属性のデータ型と一致しない場合に例外をスローします。 -::: - -**例** - -**使用例** - -```sql title=Query --- キーが存在する場合 -SELECT dictGetString('all_types_dict', 'String_value', 1); - --- キーが存在しない場合は、指定したデフォルト値を返す -SELECT dictGetStringOrDefault('all_types_dict', 'String_value', 999, 'default'); -``` - -```response title=Response -┌─dictGetString(⋯_value', 1)─┐ -│ test string │ -└────────────────────────────┘ -┌─dictGetStringO⋯ 999, 'default')─┐ -│ default │ -└─────────────────────────────────┘ -``` - - -## dictGetUInt16 - -導入バージョン: v1.1 - -辞書の設定内容に関係なく、辞書属性の値を `UInt16` 型に変換します。 - -**構文** - -```sql -dictGetUInt16(dict_name, attr_name, id_expr) -``` - -**引数** - -* `dict_name` — 辞書の名前。[`String`](/sql-reference/data-types/string) -* `attr_name` — 辞書の列名。[`String`](/sql-reference/data-types/string) または [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — キーの値。辞書のキー型の値、またはタプル値を返す式(辞書の設定に依存します)。[`Expression`](/sql-reference/data-types/special-data-types/expression) または [`Tuple(T)`](/sql-reference/data-types/tuple) - -**戻り値** - -`id_expr` に対応する辞書属性の値を返します。 -該当する値がない場合は、辞書設定内でその属性に対して指定された `` 要素の内容を返します。 - -:::note -属性の値をパースできない場合、または値が属性のデータ型と一致しない場合、ClickHouse は例外をスローします。 -::: - -**例** - -**使用例** - -```sql title=Query -SELECT dictGetUInt16('all_types_dict', 'UInt16_value', 1) -``` - -```response title=Response -┌─dictGetUInt1⋯_value', 1)─┐ -│ 5000 │ -└──────────────────────────┘ -``` - - -## dictGetUInt16OrDefault - -導入バージョン: v1.1 - -辞書の設定に関係なく、辞書属性の値を `UInt16` データ型に変換します。キーが見つからない場合は、指定されたデフォルト値を返します。 - -**構文** - -```sql -dictGetUInt16OrDefault(dict_name, attr_name, id_expr, default_value_expr) -``` - -**引数** - -* `dict_name` — 辞書の名前。[`String`](/sql-reference/data-types/string) -* `attr_name` — 辞書のカラム名。[`String`](/sql-reference/data-types/string) または [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — キーの値。辞書のキー型の値、またはタプル値を返す式(辞書の設定に依存します)。[`Expression`](/sql-reference/data-types/special-data-types/expression) または [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value_expr` — 辞書に `id_expr` キーを持つ行が存在しない場合に返される値。[`Expression`](/sql-reference/data-types/special-data-types/expression) または [`Tuple(T)`](/sql-reference/data-types/tuple) - -**戻り値** - -`id_expr` に対応する辞書属性の値を返し、 -存在しない場合は `default_value_expr` パラメータで渡された値を返します。 - -:::note -属性の値を解釈できない場合、または値が属性のデータ型と一致しない場合、ClickHouse は例外をスローします。 -::: - -**例** - -**使用例** - -```sql title=Query --- キーが存在する場合 -SELECT dictGetUInt16('all_types_dict', 'UInt16_value', 1); - --- キーが存在しない場合は、指定したデフォルト値(0)を返す -SELECT dictGetUInt16OrDefault('all_types_dict', 'UInt16_value', 999, 0); -``` - -```response title=Response -┌─dictGetUInt1⋯_value', 1)─┐ -│ 5000 │ -└──────────────────────────┘ -┌─dictGetUInt1⋯e', 999, 0)─┐ -│ 0 │ -└──────────────────────────┘ -``` - - -## dictGetUInt32 - -導入バージョン: v1.1 - -辞書の設定内容に関わらず、辞書属性の値を `UInt32` データ型に変換します。 - -**構文** - -```sql -dictGetUInt32(dict_name, attr_name, id_expr) -``` - -**引数** - -* `dict_name` — 辞書の名前。[`String`](/sql-reference/data-types/string) -* `attr_name` — 辞書のカラム名。[`String`](/sql-reference/data-types/string) または [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — キーの値。辞書のキー型の値、またはタプル値を返す式(辞書の設定に依存)。[`Expression`](/sql-reference/data-types/special-data-types/expression) または [`Tuple(T)`](/sql-reference/data-types/tuple) - -**戻り値** - -`id_expr` に対応する辞書属性の値を返し、 -対応する値がない場合は、辞書設定でその属性に対して指定された `` 要素の内容を返します。 - -:::note -ClickHouse は、属性の値を解析できない場合や、その値が属性のデータ型と一致しない場合に例外をスローします。 -::: - -**例** - -**使用例** - -```sql title=Query -SELECT dictGetUInt32('all_types_dict', 'UInt32_value', 1) -``` - -```response title=Response -┌─dictGetUInt3⋯_value', 1)─┐ -│ 1000000 │ -└──────────────────────────┘ -``` - - -## dictGetUInt32OrDefault - -導入バージョン: v1.1 - -辞書の設定内容に関係なく、辞書属性の値を `UInt32` 型に変換します。キーが見つからない場合は、指定したデフォルト値を返します。 - -**構文** - -```sql -dictGetUInt32OrDefault(dict_name, attr_name, id_expr, default_value_expr) -``` - -**引数** - -* `dict_name` — 辞書の名前。[`String`](/sql-reference/data-types/string) -* `attr_name` — 辞書の列名。[`String`](/sql-reference/data-types/string) または [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — キー値。辞書のキー型の値、またはタプル値を返す式(辞書の設定に依存)。[`Expression`](/sql-reference/data-types/special-data-types/expression) または [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value_expr` — 辞書に `id_expr` キーを持つ行が存在しない場合に返される値。[`Expression`](/sql-reference/data-types/special-data-types/expression) または [`Tuple(T)`](/sql-reference/data-types/tuple) - -**戻り値** - -`id_expr` に対応する辞書属性の値を返し、対応する値が存在しない場合は `default_value_expr` パラメータで渡された値を返します。 - -:::note -ClickHouse は、属性の値を解析できない場合、または値が属性のデータ型と一致しない場合に例外をスローします。 -::: - -**例** - -**使用例** - -```sql title=Query --- キーが存在する場合 -SELECT dictGetUInt32('all_types_dict', 'UInt32_value', 1); - --- キーが存在しない場合は、指定したデフォルト値(0)を返す -SELECT dictGetUInt32OrDefault('all_types_dict', 'UInt32_value', 999, 0); -``` - -```response title=Response -┌─dictGetUInt3⋯_value', 1)─┐ -│ 1000000 │ -└──────────────────────────┘ -┌─dictGetUInt3⋯e', 999, 0)─┐ -│ 0 │ -└──────────────────────────┘ -``` - - -## dictGetUInt64 - -導入バージョン: v1.1 - -辞書の設定に関係なく、辞書属性の値を `UInt64` データ型に変換します。 - -**構文** - -```sql -dictGetUInt64(dict_name, attr_name, id_expr) -``` - -**引数** - -* `dict_name` — 辞書の名前。[`String`](/sql-reference/data-types/string) -* `attr_name` — 辞書の列名。[`String`](/sql-reference/data-types/string) または [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — キーの値。辞書のキー型の値、またはタプル値を返す式(辞書の設定に依存)。[`Expression`](/sql-reference/data-types/special-data-types/expression) または [`Tuple(T)`](/sql-reference/data-types/tuple) - -**戻り値** - -`id_expr` に対応する辞書属性の値を返します。 -対応する値が存在しない場合は、その属性について辞書の設定で指定された `` 要素の内容を返します。 - -:::note -属性の値をパースできない場合、または値が属性のデータ型と一致しない場合、ClickHouse は例外をスローします。 -::: - -**例** - -**使用例** - -```sql title=Query -SELECT dictGetUInt64('all_types_dict', 'UInt64_value', 1) -``` - -```response title=Response -┌─dictGetUInt6⋯_value', 1)─┐ -│ 9223372036854775807 │ -└──────────────────────────┘ -``` - - -## dictGetUInt64OrDefault - -導入バージョン: v1.1 - -ディクショナリの設定内容に関係なくディクショナリの属性値を `UInt64` 型に変換するか、キーが見つからない場合は指定されたデフォルト値を返します。 - -**構文** - -```sql -dictGetUInt64OrDefault(辞書名, 属性名, ID式, デフォルト値式) -``` - -**引数** - -* `dict_name` — 辞書の名前。[`String`](/sql-reference/data-types/string) -* `attr_name` — 辞書のカラム名。[`String`](/sql-reference/data-types/string) または [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — キー値。辞書のキー型の値、またはタプル値を返す式(辞書の構成に依存します)。[`Expression`](/sql-reference/data-types/special-data-types/expression) または [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value_expr` — 辞書に `id_expr` キーを持つ行が存在しない場合に返される値。[`Expression`](/sql-reference/data-types/special-data-types/expression) または [`Tuple(T)`](/sql-reference/data-types/tuple) - -**戻り値** - -`id_expr` に対応する辞書属性の値を返し、 -存在しない場合は `default_value_expr` パラメータとして渡された値を返します。 - -:::note -属性の値を解析できない場合、またはその値が属性のデータ型と一致しない場合、ClickHouse は例外を送出します。 -::: - -**例** - -**使用例** - -```sql title=Query --- キーが存在する場合 -SELECT dictGetUInt64('all_types_dict', 'UInt64_value', 1); - --- キーが存在しない場合、指定されたデフォルト値(0)を返す -SELECT dictGetUInt64OrDefault('all_types_dict', 'UInt64_value', 999, 0); -``` - -```response title=Response -┌─dictGetUInt6⋯_value', 1)─┐ -│ 9223372036854775807 │ -└──────────────────────────┘ -┌─dictGetUInt6⋯e', 999, 0)─┐ -│ 0 │ -└──────────────────────────┘ -``` - - -## dictGetUInt8 - -導入バージョン: v1.1 - -辞書の設定内容に関係なく、辞書属性値を `UInt8` データ型に変換します。 - -**構文** - -```sql -dictGetUInt8(dict_name, attr_name, id_expr) -``` - -**引数** - -* `dict_name` — 辞書の名前。[`String`](/sql-reference/data-types/string) -* `attr_name` — 辞書の列の名前。[`String`](/sql-reference/data-types/string) または [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — キーの値。辞書のキー型の値、またはタプル値を返す式(辞書の設定に依存します)。[`Expression`](/sql-reference/data-types/special-data-types/expression) または [`Tuple(T)`](/sql-reference/data-types/tuple) - -**戻り値** - -`id_expr` に対応する辞書属性の値を返します。 -対応する値がない場合は、辞書設定でその属性に対して指定されている `` 要素の内容を返します。 - -:::note -属性の値をパースできない場合、または値が属性のデータ型と一致しない場合、ClickHouse は例外をスローします。 -::: - -**例** - -**使用例** - -```sql title=Query -SELECT dictGetUInt8('all_types_dict', 'UInt8_value', 1) -``` - -```response title=Response -┌─dictGetUInt8⋯_value', 1)─┐ -│ 100 │ -└──────────────────────────┘ -``` - - -## dictGetUInt8OrDefault - -導入バージョン: v1.1 - -辞書の設定に関係なく、辞書属性値を `UInt8` 型に変換するか、キーが見つからない場合は指定されたデフォルト値を返します。 - -**構文** - -```sql -dictGetUInt8OrDefault(辞書名, 属性名, ID式, デフォルト値式) -``` - -**引数** - -* `dict_name` — 辞書の名前。[`String`](/sql-reference/data-types/string) -* `attr_name` — 辞書の列名。[`String`](/sql-reference/data-types/string) または [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — キー値。辞書のキー型の値またはタプル値を返す式(辞書の構成に依存)。[`Expression`](/sql-reference/data-types/special-data-types/expression) または [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value_expr` — 辞書に `id_expr` キーを持つ行が存在しない場合に返される値(複数可)。[`Expression`](/sql-reference/data-types/special-data-types/expression) または [`Tuple(T)`](/sql-reference/data-types/tuple) - -**戻り値** - -`id_expr` に対応する辞書属性の値を返し、 -それ以外の場合は `default_value_expr` パラメータとして渡された値を返します。 - -:::note -ClickHouse は、属性の値を解析できない場合、または値が属性のデータ型と一致しない場合には例外を送出します。 -::: - -**例** - -**使用例** - -```sql title=Query --- キーが存在する場合 -SELECT dictGetUInt8('all_types_dict', 'UInt8_value', 1); - --- キーが存在しない場合、指定したデフォルト値(0)を返す -SELECT dictGetUInt8OrDefault('all_types_dict', 'UInt8_value', 999, 0); -``` - -```response title=Response -┌─dictGetUInt8⋯_value', 1)─┐ -│ 100 │ -└──────────────────────────┘ -┌─dictGetUInt8⋯e', 999, 0)─┐ -│ 0 │ -└──────────────────────────┘ -``` - - -## dictGetUUID - -導入バージョン: v1.1 - -辞書の設定内容に関係なく、辞書属性の値を `UUID` データ型に変換します。 - -**構文** - -```sql -dictGetUUID(dict_name, attr_name, id_expr) -``` - -**引数** - -* `dict_name` — 辞書の名前。[`String`](/sql-reference/data-types/string) -* `attr_name` — 辞書のカラム名。[`String`](/sql-reference/data-types/string) または [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — キー値。辞書のキー型の値、またはタプル値を返す式(辞書の設定に依存)。[`Expression`](/sql-reference/data-types/special-data-types/expression) または [`Tuple(T)`](/sql-reference/data-types/tuple) - -**戻り値** - -`id_expr` に対応する辞書の属性値を返します。 -対応する値が存在しない場合は、辞書の設定で属性に対して指定された `` 要素の内容を返します。 - -:::note -属性の値を解析できない場合、または値が属性のデータ型と一致しない場合、ClickHouse は例外をスローします。 -::: - -**例** - -**使用例** - -```sql title=Query -SELECT dictGetUUID('all_types_dict', 'UUID_value', 1) -``` - -```response title=Response -┌─dictGetUUID(⋯_value', 1)─────────────┐ -│ 123e4567-e89b-12d3-a456-426614174000 │ -└──────────────────────────────────────┘ -``` - - -## dictGetUUIDOrDefault - -導入バージョン: v1.1 - -辞書の設定に関係なく、辞書属性の値を `UUID` データ型に変換するか、キーが見つからない場合は指定されたデフォルト値を返します。 - -**構文** - -```sql -dictGetUUIDOrDefault(dict_name, attr_name, id_expr, default_value_expr) -``` - -**引数** - -* `dict_name` — 辞書名。[`String`](/sql-reference/data-types/string) -* `attr_name` — 辞書の列名。[`String`](/sql-reference/data-types/string) または [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — キーの値。辞書のキー型の値、またはタプル値を返す式(辞書の設定に依存)。[`Expression`](/sql-reference/data-types/special-data-types/expression) または [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value_expr` — 辞書に `id_expr` キーを持つ行が存在しない場合に返される値(複数可)。[`Expression`](/sql-reference/data-types/special-data-types/expression) または [`Tuple(T)`](/sql-reference/data-types/tuple) - -**戻り値** - -`id_expr` に対応する辞書属性の値を返し、 -対応する値が存在しない場合は `default_value_expr` パラメータとして渡された値を返します。 - -:::note -ClickHouse は、属性の値を解析できない場合、または値が属性のデータ型と一致しない場合に例外を送出します。 -::: - -**例** - -**使用例** - -```sql title=Query --- キーが存在する場合 -SELECT dictGetUUID('all_types_dict', 'UUID_value', 1); - --- キーが存在しない場合は、指定したデフォルト値を返す -SELECT dictGetUUIDOrDefault('all_types_dict', 'UUID_value', 999, '00000000-0000-0000-0000-000000000000'::UUID); -``` - -```response title=Response -┌─dictGetUUID('all_t⋯ 'UUID_value', 1)─┐ -│ 550e8400-e29b-41d4-a716-446655440000 │ -└──────────────────────────────────────┘ -┌─dictGetUUIDOrDefa⋯000000000000'::UUID)─┐ -│ 00000000-0000-0000-0000-000000000000 │ -└────────────────────────────────────────┘ -``` - - -## dictHas - -導入: v1.1 - -キーが辞書に存在するかどうかを判定します。 - -**構文** - -```sql -dictHas('dict_name', id_expr) -``` - -**引数** - -* `dict_name` — 辞書名。[`String`](/sql-reference/data-types/string) -* `id_expr` — キーの値。[`const String`](/sql-reference/data-types/string) - -**戻り値** - -キーが存在する場合は `1`、存在しない場合は `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**使用例** - -**辞書内にキーが存在するかを確認する** - -```sql title=Query --- 以下の階層型ディクショナリを考えます: --- 0 (ルート) --- └── 1 (レベル1 - ノード1) --- ├── 2 (レベル2 - ノード2) --- │ ├── 4 (レベル3 - ノード4) --- │ └── 5 (レベル3 - ノード5) --- └── 3 (レベル2 - ノード3) --- └── 6 (レベル3 - ノード6) - -SELECT dictHas('hierarchical_dictionary', 2); -SELECT dictHas('hierarchical_dictionary', 7); -``` - -```response title=Response -┌─dictHas('hie⋯ionary', 2)─┐ -│ 1 │ -└──────────────────────────┘ -┌─dictHas('hie⋯ionary', 7)─┐ -│ 0 │ -└──────────────────────────┘ -``` - - -## dictIsIn - -導入バージョン: v1.1 - -辞書において、キーの先祖が階層チェーン全体のどこかに存在するかどうかを判定します。 - -**構文** - -```sql -dictIsIn(dict_name, child_id_expr, ancestor_id_expr) -``` - -**引数** - -* `dict_name` — 辞書の名前。[`String`](/sql-reference/data-types/string) -* `child_id_expr` — 確認するキー。[`String`](/sql-reference/data-types/string) -* `ancestor_id_expr` — `child_id_expr` キーの想定される祖先。[`const String`](/sql-reference/data-types/string) - -**返される値** - -`child_id_expr` が `ancestor_id_expr` の子でない場合は `0` を返し、`child_id_expr` が `ancestor_id_expr` の子である場合、または `child_id_expr` 自体が `ancestor_id_expr` である場合は `1` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**階層関係の確認** - -```sql title=Query --- 有効な階層 -SELECT dictIsIn('hierarchical_dictionary', 6, 3) - --- 無効な階層 -SELECT dictIsIn('hierarchical_dictionary', 3, 5) -``` - -```response title=Response -┌─dictIsIn('hi⋯ary', 6, 3)─┐ -│ 1 │ -└──────────────────────────┘ -┌─dictIsIn('hi⋯ary', 3, 5)─┐ -│ 0 │ -└──────────────────────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/financial-functions.md b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/financial-functions.md index fee0086a0fa..07060689e2e 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/financial-functions.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/financial-functions.md @@ -1,261 +1,29 @@ --- -description: '財務関数のドキュメント' +description: '財務関数に関するドキュメント' sidebar_label: '財務' slug: /sql-reference/functions/financial-functions title: '財務関数' -keywords: ['財務', '利回り', '正味現在価値'] +keywords: ['財務', '収益率', '正味現在価値'] doc_type: 'reference' --- - - # 財務関数 :::note -以下のドキュメントは、`system.functions` システムテーブルを元に自動生成されています。 +このドキュメントは `system.functions` システムテーブルを元に生成されています ::: {/* - 以下のタグ内の内容は、ドキュメントフレームワークのビルド時に - system.functions から自動生成されたドキュメントに置き換えられます。タグを変更または削除しないでください。 + 以下のタグの内側の内容は、ドキュメントフレームワークのビルド時に + system.functions から自動生成されたドキュメントで置き換えられます。タグを変更したり削除したりしないでください。 詳細は https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md を参照してください。 */ } - {/*AUTOGENERATED_START*/ } -## financialInternalRateOfReturn - -導入バージョン: v25.7 - -一定間隔で発生する一連のキャッシュフローの内部収益率 (IRR) を計算します。 -IRR は、正味現在価値 (NPV) がゼロとなる割引率です。 - -IRR は次の方程式を満たす割引率として求められます: - -$$ -\sum_{i=0}^n \frac{cashflow_i}{(1 + irr)^i} = 0 -$$ - -**構文** - -```sql -financialInternalRateOfReturn(cashflows[, guess]) -``` - -**引数** - -* `cashflows` — キャッシュフローの配列。各値は支払い(負の値)または収入(正の値)を表します。[`Array(Int8/16/32/64)`](/sql-reference/data-types/array) または [`Array(Float*)`](/sql-reference/data-types/array) -* `[, guess]` — 内部収益率の初期推定値(定数値、既定値は 0.1)。省略可能な引数です。[`Float*`](/sql-reference/data-types/float) - -**返り値** - -内部収益率を返します。計算が収束しない場合、入力配列が空または要素が 1 つだけの場合、すべてのキャッシュフローが 0 の場合、またはその他の計算エラーが発生した場合は `NaN` を返します。[`Float64`](/sql-reference/data-types/float) - -**例** - -**simple_example** - -```sql title=Query -SELECT financialInternalRateOfReturn([-100, 39, 59, 55, 20]) -``` - -```response title=Response -0.2809484211599611 -``` - -**simple_example_with_guess** - -```sql title=Query -SELECT financialInternalRateOfReturn([-100, 39, 59, 55, 20], 0.1) -``` - -```response title=Response -0.2809484211599611 -``` - - -## financialInternalRateOfReturnExtended {#financialInternalRateOfReturnExtended} - -導入バージョン: v25.7 - -不規則な間隔で発生する一連のキャッシュフローに対して拡張内部収益率(XIRR)を計算します。XIRRは、すべてのキャッシュフローの正味現在価値(NPV)がゼロになる割引率です。 - -XIRRは以下の方程式を解きます(`ACT_365F`の例): - -$$ -\sum_{i=0}^n \frac{cashflow_i}{(1 + rate)^{(date_i - date_0)/365}} = 0 -$$ - -配列は日付の昇順でソートされている必要があります。日付は一意である必要があります。 - -**構文** - -```sql -financialInternalRateOfReturnExtended(cashflow, date [, guess, daycount]) -``` - -**引数** - -- `cashflow` — 第2パラメータの日付に対応するキャッシュフローの配列。[`Array(Int8/16/32/64)`](/sql-reference/data-types/array)または[`Array(Float*)`](/sql-reference/data-types/array) -- `date` — キャッシュフローに対応する一意の日付のソート済み配列。[`Array(Date)`](/sql-reference/data-types/array)または[`Array(Date32)`](/sql-reference/data-types/array) -- `[, guess]` — オプション。XIRR計算の初期推定値(定数値)。[`Float*`](/sql-reference/data-types/float) -- `[, daycount]` — - オプション。日数計算規則(デフォルトは'ACT_365F')。サポートされる値: -- 'ACT_365F' - Actual/365 Fixed:日付間の実際の日数を365で除算 -- 'ACT_365_25' - Actual/365.25:日付間の実際の日数を365.25で除算 - [`String`](/sql-reference/data-types/string) - -**返り値** - -XIRR値を返します。計算を実行できない場合はNaNを返します。[`Float64`](/sql-reference/data-types/float) - -**例** - -**基本的な例** - -```sql title=Query -SELECT financialInternalRateOfReturnExtended([-10000, 5750, 4250, 3250], [toDate('2020-01-01'), toDate('2020-03-01'), toDate('2020-10-30'), toDate('2021-02-15')]) -``` - -```response title=Response -0.6342972615260243 -``` - -**推定値を指定した例** - -```sql title=Query -SELECT financialInternalRateOfReturnExtended([-10000, 5750, 4250, 3250], [toDate('2020-01-01'), toDate('2020-03-01'), toDate('2020-10-30'), toDate('2021-02-15')], 0.5) -``` - -```response title=Response -0.6342972615260243 -``` - -**日数計算規則を指定した例** - -```sql title=Query -SELECT round(financialInternalRateOfReturnExtended([100000, -110000], [toDate('2020-01-01'), toDate('2021-01-01')], 0.1, 'ACT_365_25'), 6) AS xirr_365_25 -``` - -```response title=Response -0.099785 -``` - - -## financialNetPresentValue - -導入バージョン: v25.7 - -等間隔で発生するキャッシュフロー系列の正味現在価値(NPV: Net Present Value)を計算します。 - -デフォルトのバリアント(`start_from_zero` = true)の場合: - -$$ -\sum_{i=0}^{N-1} \frac{values_i}{(1 + rate)^i} -$$ - -Excel互換のバリアント(`start_from_zero` = false)の場合: - -$$ -\sum_{i=1}^{N} \frac{values_i}{(1 + rate)^i} -$$ - -**構文** - -```sql -financialNetPresentValue(rate, cashflows[, start_from_zero]) -``` - -**引数** - -* `rate` — 適用する割引率。[`Float*`](/sql-reference/data-types/float) -* `cashflows` — キャッシュフローの配列。各値は支払い(負の値)または収入(正の値)を表します。[`Array(Int8/16/32/64)`](/sql-reference/data-types/array) または [`Array(Float*)`](/sql-reference/data-types/array) -* `[, start_from_zero]` — NPV を期間 `0`(true)から計算するか、期間 `1`(false、Excel 互換)から計算するかを示すオプションのブール値型パラメータ。デフォルト: true。[`Bool`](/sql-reference/data-types/boolean) - -**戻り値** - -正味現在価値 (NPV) を Float64 値として返します。[`Float64`](/sql-reference/data-types/float) - -**例** - -**default_calculation** - -```sql title=Query -SELECT financialNetPresentValue(0.08, [-40000., 5000., 8000., 12000., 30000.]) -``` - -```response title=Response -3065.2226681795255 -``` - -**excel_compatible_calculation** - -```sql title=Query -SELECT financialNetPresentValue(0.08, [-40000., 5000., 8000., 12000., 30000.], false) -``` - -```response title=Response -2838.1691372032656 -``` - - -## financialNetPresentValueExtended {#financialNetPresentValueExtended} - -導入バージョン: v25.7 - -不規則な間隔で発生する一連のキャッシュフローに対して拡張正味現在価値(XNPV)を計算します。XNPVは現在価値を計算する際に各キャッシュフローの具体的なタイミングを考慮します。 - -`ACT_365F`のXNPV計算式: - -$$ -XNPV=\sum_{i=1}^n \frac{cashflow_i}{(1 + rate)^{(date_i - date_0)/365}} -$$ - -配列は日付の昇順でソートする必要があります。日付は一意である必要があります。 - -**構文** - -```sql -financialNetPresentValueExtended(rate, cashflows, dates[, daycount]) -``` - -**引数** - -- `rate` — 適用する割引率。[`Float*`](/sql-reference/data-types/float) -- `cashflows` — キャッシュフローの配列。各値は支払い(負の値)または収入(正の値)を表します。少なくとも1つの正の値と1つの負の値を含む必要があります。[`Array(Int8/16/32/64)`](/sql-reference/data-types/array)または[`Array(Float*)`](/sql-reference/data-types/array) -- `dates` — 各キャッシュフローに対応する日付の配列。cashflows配列と同じサイズである必要があります。[`Array(Date)`](/sql-reference/data-types/array)または[`Array(Date32)`](/sql-reference/data-types/array) -- `[, daycount]` — オプションの日数計算規則。サポートされる値: `'ACT_365F'`(デフォルト)— Actual/365 Fixed、`'ACT_365_25'` — Actual/365.25。[`String`](/sql-reference/data-types/string) - -**戻り値** - -正味現在価値をFloat64値として返します。[`Float64`](/sql-reference/data-types/float) - -**例** - -**基本的な使用方法** - -```sql title=クエリ -SELECT financialNetPresentValueExtended(0.1, [-10000., 5750., 4250., 3250.], [toDate('2020-01-01'), toDate('2020-03-01'), toDate('2020-10-30'), toDate('2021-02-15')]) -``` - -```response title=レスポンス -2506.579458169746 -``` - -**異なる日数計算規則の使用** - -```sql title=クエリ -SELECT financialNetPresentValueExtended(0.1, [-10000., 5750., 4250., 3250.], [toDate('2020-01-01'), toDate('2020-03-01'), toDate('2020-10-30'), toDate('2021-02-15')], 'ACT_365_25') -``` - -```response title=レスポンス -2507.067268742502 -``` - - +{/*AUTOGENERATED_END*/ } ## 関連リソース {#related-resources} -- [ClickHouse の財務関数を解説した動画](https://www.youtube.com/watch?v=BePLPVa0w_o) +- [ClickHouse の金融関数に関する動画](https://www.youtube.com/watch?v=BePLPVa0w_o) \ No newline at end of file diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/functions-for-nulls.md b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/functions-for-nulls.md index 103726bd286..943c529ac3e 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/functions-for-nulls.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/functions-for-nulls.md @@ -1,481 +1,20 @@ --- -description: 'Nullable 値を扱う関数に関するドキュメント' +description: 'NULL 値を扱う関数に関するドキュメント' sidebar_label: 'Nullable' slug: /sql-reference/functions/functions-for-nulls -title: 'Nullable 値を扱う関数' +title: 'NULL 値を扱う関数' keywords: ['nullable', 'functions'] doc_type: 'reference' --- - - -# NULL 可能な値を扱う関数 +# Nullable 型の値を扱う関数 {/* - 以下のタグ内のコンテンツは、ドキュメントフレームワークのビルド時に - system.functions から生成されるドキュメントで置き換えられます。タグを変更または削除しないでください。 - 詳細は次を参照してください: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md + 以下のタグ内のコンテンツは、ドキュメントフレームワークのビルド時に、 + system.functions から自動生成されたドキュメントに置き換えられます。タグを変更または削除しないでください。 + 参照: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## assumeNotNull - -導入バージョン: v1.1 - -型 [`Nullable`](../data-types/nullable.md) の値に対して、対応する非 `Nullable` 型の値を返します。 -元の値が `NULL` の場合、不定の結果が返されることがあります。 - -関連項目: 関数 [`ifNull`](#ifNull)、[`coalesce`](#coalesce)。 - -**構文** - -```sql -assumeNotNull(x) -``` - -**引数** - -* `x` — 任意の `Nullable` 型の元の値。[`Nullable(T)`](/sql-reference/data-types/nullable) - -**戻り値** - -元の値が `NULL` でない場合は非 `Nullable` 型の値を返し、入力値が `NULL` の場合は任意の値を返します。[`Any`](/sql-reference/data-types) - -**例** - -**使用例** - -````sql title=Query -```sql title=クエリ -CREATE TABLE t_null (x Int8, y Nullable(Int8)) -ENGINE=MergeTree() -ORDER BY x; - -INSERT INTO t_null VALUES (1, NULL), (2, 3); - -SELECT assumeNotNull(y) FROM table; -SELECT toTypeName(assumeNotNull(y)) FROM t_null; -``` -```` - -```response title=Response -┌─assumeNotNull(y)─┐ -│ 0 │ -│ 3 │ -└──────────────────┘ -┌─toTypeName(assumeNotNull(y))─┐ -│ Int8 │ -│ Int8 │ -└──────────────────────────────┘ -``` - - -## coalesce - -導入バージョン: v1.1 - -最も左側にある `NULL` ではない引数を返します。 - -**構文** - -```sql -coalesce(x[, y, ...]) -``` - -**引数** - -* `x[, y, ...]` — 任意個数の非複合型パラメータ。すべてのパラメータは互いに互換性のあるデータ型である必要があります。[`Any`](/sql-reference/data-types) - -**戻り値** - -最初の `NULL` ではない引数を返します。すべての引数が `NULL` の場合は `NULL` を返します。[`Any`](/sql-reference/data-types) または [`NULL`](/sql-reference/syntax#null) - -**例** - -**使用例** - -```sql title=Query --- 顧客への複数の連絡方法を指定可能な連絡先リストを考えます。 - -CREATE TABLE aBook -( - name String, - mail Nullable(String), - phone Nullable(String), - telegram Nullable(UInt32) -) -ENGINE = MergeTree -ORDER BY tuple(); - -INSERT INTO aBook VALUES ('client 1', NULL, '123-45-67', 123), ('client 2', NULL, NULL, NULL); - --- mailフィールドとphoneフィールドはString型ですが、telegramフィールドはUInt32型のため、String型への変換が必要です。 - --- 連絡先リストから顧客の利用可能な最初の連絡方法を取得します - -SELECT name, coalesce(mail, phone, CAST(telegram,'Nullable(String)')) FROM aBook; -``` - -```response title=Response -┌─name─────┬─coalesce(mail, phone, CAST(telegram, 'Nullable(String)'))─┐ -│ client 1 │ 123-45-67 │ -│ client 2 │ ᴺᵁᴸᴸ │ -└──────────┴───────────────────────────────────────────────────────────┘ -``` - - -## firstNonDefault - -導入バージョン: v25.9 - -引数の中から、デフォルト値ではない最初の値を返します。 - -**構文** - -```sql -``` - -**引数** - -* `arg1` — 確認する最初の引数 - `arg2` — 確認する2番目の引数 - `...` — 確認する追加の引数 - -**返り値** - -結果の型は、すべての引数のスーパータイプになります - -**例** - -**整数** - -```sql title=Query -SELECT firstNonDefault(0, 1, 2) -``` - -```response title=Response -1 -``` - -**文字列** - -```sql title=Query -SELECT firstNonDefault('', 'hello', 'world') -``` - -```response title=Response -'hello' -``` - -**NULL 値** - -```sql title=Query -SELECT firstNonDefault(NULL, 0 :: UInt8, 1 :: UInt8) -``` - -```response title=Response -1 -``` - -**NULL 許容ゼロ** - -```sql title=Query -SELECT firstNonDefault(NULL, 0 :: Nullable(UInt8), 1 :: Nullable(UInt8)) -``` - -```response title=Response -0 -``` - - -## ifNull - -導入バージョン: v1.1 - -最初の引数が `NULL` の場合に、代わりの値を返します。 - -**構文** - -```sql -ifNull(x, alt) -``` - -**引数** - -* `x` — `NULL` かどうかをチェックする値。[`Any`](/sql-reference/data-types) -* `alt` — `x` が `NULL` の場合に関数が返す値。[`Any`](/sql-reference/data-types) - -**返される値** - -`x` が `NULL` でない場合は `x` の値を返し、それ以外の場合は `alt` を返します。[`Any`](/sql-reference/data-types) - -**例** - -**使用例** - -```sql title=Query -SELECT ifNull('a', 'b'), ifNull(NULL, 'b'); -``` - -```response title=Response -┌─ifNull('a', 'b')─┬─ifNull(NULL, 'b')─┐ -│ a │ b │ -└──────────────────┴───────────────────┘ -``` - - -## isNotNull - -導入: v1.1 - -引数が `NULL` でないかどうかを判定します。 - -関連項目: 演算子 [`IS NOT NULL`](/sql-reference/operators#is_not_null)。 - -**構文** - -```sql -isNotNull(x) -``` - -**引数** - -* `x` — 非複合データ型の値。[`Any`](/sql-reference/data-types) - -**戻り値** - -`x` が `NULL` でない場合は `1`、それ以外の場合は `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -CREATE TABLE t_null -( - x Int32, - y Nullable(Int32) -) -ENGINE = MergeTree -ORDER BY tuple(); - -INSERT INTO t_null VALUES (1, NULL), (2, 3); - -SELECT x FROM t_null WHERE isNotNull(y); -``` - -```response title=Response -┌─x─┐ -│ 2 │ -└───┘ -``` - - -## isNull - -導入バージョン: v1.1 - -引数が `NULL` かどうかをチェックします。 - -関連項目: 演算子 [`IS NULL`](/sql-reference/operators#is_null)。 - -**構文** - -```sql -isNull(x) -``` - -**引数** - -* `x` — 非複合データ型の値。[`Any`](/sql-reference/data-types) - -**戻り値** - -`x` が `NULL` の場合は `1` を、それ以外の場合は `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -CREATE TABLE t_null -( - x Int32, - y Nullable(Int32) -) -ENGINE = MergeTree -ORDER BY tuple(); - -INSERT INTO t_null VALUES (1, NULL), (2, 3); - -SELECT x FROM t_null WHERE isNull(y); -``` - -```response title=Response -┌─x─┐ -│ 1 │ -└───┘ -``` - - -## isNullable - -導入: v22.7 - -引数のデータ型が `Nullable`(`NULL` 値を許容する型)かどうかを判定します。 - -**構文** - -```sql -isNullable(x) -``` - -**引数** - -* `x` — 任意のデータ型の値。[`Any`](/sql-reference/data-types) - -**戻り値** - -`x` が `Nullable` データ型であれば `1` を返し、それ以外の場合は `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -CREATE TABLE tab ( - ordinary_col UInt32, - nullable_col Nullable(UInt32) -) -ENGINE = MergeTree -ORDER BY tuple(); -INSERT INTO tab (ordinary_col, nullable_col) VALUES (1,1), (2, 2), (3,3); -SELECT isNullable(ordinary_col), isNullable(nullable_col) FROM tab; -``` - -```response title=Response -┌───isNullable(ordinary_col)──┬───isNullable(nullable_col)──┐ -│ 0 │ 1 │ -│ 0 │ 1 │ -│ 0 │ 1 │ -└─────────────────────────────┴─────────────────────────────┘ -``` - - -## isZeroOrNull - -導入バージョン: v20.3 - -引数がゼロ(`0`)または `NULL` かどうかをチェックします。 - -**構文** - -```sql -isZeroOrNull(x) -``` - -**引数** - -* `x` — 数値型の値。[`UInt`](/sql-reference/data-types/int-uint) - -**返される値** - -`x` が `NULL` またはゼロに等しい場合は `1` を返し、それ以外の場合は `0` を返します。[`UInt8/16/32/64`](/sql-reference/data-types/int-uint) または [`Float32/Float64`](/sql-reference/data-types/float) - -**例** - -**使用例** - -```sql title=Query -CREATE TABLE t_null -( - x Int32, - y Nullable(Int32) -) -ENGINE = MergeTree -ORDER BY tuple(); - -INSERT INTO t_null VALUES (1, NULL), (2, 0), (3, 3); - -SELECT x FROM t_null WHERE isZeroOrNull(y); -``` - -```response title=Response -┌─x─┐ -│ 1 │ -│ 2 │ -└───┘ -``` - - -## nullIf - -導入バージョン: v1.1 - -2つの引数が等しい場合、`NULL` を返します。 - -**構文** - -```sql -nullIf(x, y) -``` - -**引数** - -* `x` — 1つ目の値。[`Any`](/sql-reference/data-types) -* `y` — 2つ目の値。[`Any`](/sql-reference/data-types) - -**戻り値** - -両方の引数が同じ値の場合は `NULL` を返し、それ以外の場合は 1つ目の引数を返します。[`NULL`](/sql-reference/syntax#null) または [`Nullable(x)`](/sql-reference/data-types/nullable) - -**例** - -**使用例** - -```sql title=Query -SELECT nullIf(1, 1), nullIf(1, 2); -``` - -```response title=Response -┌─nullIf(1, 1)─┬─nullIf(1, 2)─┐ -│ ᴺᵁᴸᴸ │ 1 │ -└──────────────┴──────────────┘ -``` - - -## toNullable - -導入バージョン: v1.1 - -指定された引数の型を `Nullable` 型に変換します。 - -**構文** - -```sql -toNullable(x) -``` - -**引数** - -* `x` — 任意の非複合型の値。[`Any`](/sql-reference/data-types) - -**戻り値** - -入力値と同じ値を返すが、その型は `Nullable` となる。[`Nullable(Any)`](/sql-reference/data-types/nullable) - -**例** - -**使用例** - -```sql title=Query -SELECT toTypeName(10), toTypeName(toNullable(10)); -``` - -```response title=Response -┌─toTypeName(10)─┬─toTypeName(toNullable(10))─┐ -│ UInt8 │ Nullable(UInt8) │ -└────────────────┴────────────────────────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/hash-functions.md b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/hash-functions.md index 54d127bab5b..46fc87f155e 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/hash-functions.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/hash-functions.md @@ -6,18 +6,16 @@ title: 'ハッシュ関数' doc_type: 'reference' --- - - # ハッシュ関数 -ハッシュ関数は、要素を決定論的かつ疑似ランダムにシャッフルするために使用できます。 +ハッシュ関数は、要素を決定論的に疑似ランダムな順序へシャッフルするために使用できます。 -SimHash はハッシュ関数であり、近い(類似した)引数に対して近いハッシュ値を返します。 +Simhash は、近い(類似した)引数に対して近いハッシュ値を返すハッシュ関数です。 -ほとんどのハッシュ関数は、任意の型の任意個数の引数を受け付けます。 +ほとんどのハッシュ関数は、任意の型の引数を任意個受け付けます。 :::note -NULL のハッシュ値は NULL です。Nullable 列の NULL ではないハッシュ値を取得するには、それをタプルでラップしてください: +NULL のハッシュは NULL です。Nullable カラムに対して NULL ではないハッシュ値を得るには、次のようにタプルでラップします: ```sql SELECT cityHash64(tuple(NULL)) @@ -26,2639 +24,16 @@ SELECT cityHash64(tuple(NULL)) ::: :::note -テーブル全体の内容のハッシュを計算するには、`sum(cityHash64(tuple(*)))`(または他のハッシュ関数)を使用してください。`tuple` により、NULL 値を含む行が除外されなくなります。`sum` により、行の順序に依存しなくなります。 +テーブル全体の内容のハッシュを計算するには、`sum(cityHash64(tuple(*)))`(または他のハッシュ関数)を使用します。`tuple` によって、NULL 値を含む行がスキップされるのを防ぎます。`sum` によって、行の順序に依存しないようにします。 ::: {/* 以下のタグ内の内容は、ドキュメントフレームワークのビルド時に - system.functions から生成されるドキュメントに置き換えられます。 - これらのタグを変更したり削除したりしないでください。 + system.functions から生成されたドキュメントに置き換えられます。 + これらのタグを変更または削除しないでください。 詳細は https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md を参照してください。 */ } - {/*AUTOGENERATED_START*/ } -## BLAKE3 - -導入バージョン: v22.10 - -BLAKE3 ハッシュ値を計算し、その結果のバイト列を FixedString として返します。 -この暗号学的ハッシュ関数は、BLAKE3 Rust ライブラリを用いて ClickHouse に統合されています。 -この関数はかなり高速で、SHA-2 と比べておよそ 2 倍の速度を発揮しつつ、SHA-256 と同じ長さのハッシュを生成します。 -戻り値は、型 FixedString(32) のバイト配列としての BLAKE3 ハッシュです。 - -**構文** - -```sql -BLAKE3(message) -``` - -**引数** - -* `message` — ハッシュ化する入力文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -入力文字列の BLAKE3 による 32 バイトのハッシュ値を固定長文字列として返します。[`FixedString(32)`](/sql-reference/data-types/fixedstring) - -**例** - -**hash** - -```sql title=Query -SELECT hex(BLAKE3('ABC')) -``` - -```response title=Response -┌─hex(BLAKE3('ABC'))───────────────────────────────────────────────┐ -│ D1717274597CF0289694F75D96D444B992A096F1AFD8E7BBFA6EBB1D360FEDFC │ -└──────────────────────────────────────────────────────────────────┘ -``` - - -## MD4 - -導入バージョン: v21.11 - -指定した文字列の MD4 ハッシュ値を計算します。 - -**構文** - -```sql -MD4(s) -``` - -**引数** - -* `s` — ハッシュ化する入力文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -指定された入力文字列の MD4 ハッシュ値を固定長の文字列として返します。[`FixedString(16)`](/sql-reference/data-types/fixedstring) - -**例** - -**使用例** - -```sql title=Query -SELECT HEX(MD4('abc')); -``` - -```response title=Response -┌─hex(MD4('abc'))──────────────────┐ -│ A448017AAF21D8525FC10AE87AA6729D │ -└──────────────────────────────────┘ -``` - - -## MD5 - -導入バージョン: v1.1 - -指定された文字列の MD5 ハッシュ値を計算します。 - -**構文** - -```sql -MD5(s) -``` - -**引数** - -* `s` — ハッシュ化する入力文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -指定された入力文字列の MD5 ハッシュ値を固定長の文字列として返します。[`FixedString(16)`](/sql-reference/data-types/fixedstring) - -**例** - -**使用例** - -```sql title=Query -SELECT HEX(MD5('abc')); -``` - -```response title=Response -┌─hex(MD5('abc'))──────────────────┐ -│ 900150983CD24FB0D6963F7D28E17F72 │ -└──────────────────────────────────┘ -``` - - -## RIPEMD160 - -導入バージョン: v24.10 - -指定された文字列の RIPEMD-160 ハッシュ値を計算します。 - -**構文** - -```sql -RIPEMD160(s) -``` - -**引数** - -* `s` — ハッシュ化する入力文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -指定された入力文字列の RIPEMD160 ハッシュを固定長文字列として返します。[`FixedString(20)`](/sql-reference/data-types/fixedstring) - -**例** - -**使用例** - -```sql title=Query -SELECT HEX(RIPEMD160('素早い茶色の狐が怠惰な犬を飛び越える')); -``` - -```response title=Response -┌─HEX(RIPEMD160('The quick brown fox jumps over the lazy dog'))─┐ -│ 37F332F68DB77BD9D7EDD4969571AD671CF9DD3B │ -└───────────────────────────────────────────────────────────────┘ -``` - - -## SHA1 - -導入バージョン: v1.1 - -指定された文字列の SHA1 ハッシュ値を計算します。 - -**構文** - -```sql -SHA1(s) -``` - -**引数** - -* `s` — ハッシュ化する入力文字列 [`String`](/sql-reference/data-types/string) - -**戻り値** - -指定された入力文字列のSHA1ハッシュ値を固定長の文字列として返します。[`FixedString(20)`](/sql-reference/data-types/fixedstring) - -**例** - -**使用例** - -```sql title=Query -SELECT HEX(SHA1('abc')); -``` - -```response title=Response -┌─hex(SHA1('abc'))─────────────────────────┐ -│ A9993E364706816ABA3E25717850C26C9CD0D89D │ -└──────────────────────────────────────────┘ -``` - - -## SHA224 - -導入バージョン:v1.1 - -指定した文字列の SHA224 ハッシュ値を計算します。 - -**構文** - -```sql -SHA224(s) -``` - -**引数** - -* `s` — ハッシュ化する入力文字列。[`String`](/sql-reference/data-types/string) - -**返される値** - -指定した入力文字列の SHA224 ハッシュ値を固定長の文字列として返します。[`FixedString(28)`](/sql-reference/data-types/fixedstring) - -**例** - -**使用例** - -```sql title=Query -SELECT HEX(SHA224('abc')); -``` - -```response title=Response -┌─hex(SHA224('abc'))───────────────────────────────────────┐ -│ 23097D223405D8228642A477BDA255B32AADBCE4BDA0B3F7E36C9DA7 │ -└──────────────────────────────────────────────────────────┘ -``` - - -## SHA256 - -導入バージョン: v1.1 - -指定した文字列の SHA256 ハッシュを計算します。 - -**構文** - -```sql -SHA256(s) -``` - -**引数** - -* `s` — ハッシュ化する入力文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -指定された入力文字列の SHA256 ハッシュ値を固定長文字列として返します。[`FixedString(32)`](/sql-reference/data-types/fixedstring) - -**例** - -**使用例** - -```sql title=Query -SELECT HEX(SHA256('abc')); -``` - -```response title=Response -┌─hex(SHA256('abc'))───────────────────────────────────────────────┐ -│ BA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61F20015AD │ -└──────────────────────────────────────────────────────────────────┘ -``` - - -## SHA384 - -導入バージョン:v1.1 - -指定した文字列の SHA384 ハッシュ値を計算します。 - -**構文** - -```sql -SHA384(s) -``` - -**引数** - -* `s` — ハッシュ化する入力文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -指定された入力文字列の SHA384 ハッシュ値を固定長の文字列として返します。[`FixedString(48)`](/sql-reference/data-types/fixedstring) - -**例** - -**使用例** - -```sql title=Query -SELECT HEX(SHA384('abc')); -``` - -```response title=Response -┌─hex(SHA384('abc'))───────────────────────────────────────────────────────────────────────────────┐ -│ CB00753F45A35E8BB5A03D699AC65007272C32AB0EDED1631A8B605A43FF5BED8086072BA1E7CC2358BAECA134C825A7 │ -└──────────────────────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## SHA512 - -導入バージョン: v1.1 - -与えられた文字列の SHA512 ハッシュ値を計算します。 - -**構文** - -```sql -SHA512(s) -``` - -**引数** - -* `s` — ハッシュ化する入力文字列 [`String`](/sql-reference/data-types/string) - -**戻り値** - -与えられた入力文字列の SHA512 ハッシュ値を固定長文字列として返します。[`FixedString(64)`](/sql-reference/data-types/fixedstring) - -**例** - -**使用例** - -```sql title=Query -SELECT HEX(SHA512('abc')); -``` - -```response title=Response -┌─hex(SHA512('abc'))───────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ -│ DDAF35A193617ABACC417349AE20413112E6FA4E89A97EA20A9EEEE64B55D39A2192992A274FC1A836BA3C23A3FEEBBD454D4423643CE80E2A9AC94FA54CA49F │ -└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## SHA512_256 - -導入バージョン: v1.1 - -指定された文字列の SHA512_256 ハッシュ値を計算します。 - -**構文** - -```sql -SHA512_256(s) -``` - -**引数** - -* `s` — ハッシュ化する入力文字列。[`String`](/sql-reference/data-types/string) - -**返される値** - -指定された入力文字列の SHA512_256 ハッシュを固定長文字列として返します。[`FixedString(32)`](/sql-reference/data-types/fixedstring) - -**例** - -**使用例** - -```sql title=Query -SELECT HEX(SHA512_256('abc')); -``` - -```response title=Response -┌─hex(SHA512_256('abc'))───────────────────────────────────────────┐ -│ 53048E2681941EF99B2E29B76B4C7DABE4C2D0C634FC6D46E0E2F13107E7AF23 │ -└──────────────────────────────────────────────────────────────────┘ -``` - - -## URLHash - -導入バージョン: v1.1 - -URL から取得した文字列に対して、何らかの正規化処理を行ったうえで適用する、高速かつ十分な品質を備えた非暗号学的ハッシュ関数です。 - -このハッシュ関数には 2 つのモードがあります: - -| Mode | Description | -| ----------------- | ------------------------------------------------------------------------------------------------------------- | -| `URLHash(url)` | 末尾に存在する場合は、末尾の `/`、`?`、`#` のいずれか 1 文字を取り除いた文字列からハッシュを計算します。 | -| `URLHash(url, N)` | 末尾に存在する場合は、末尾の `/`、`?`、`#` のいずれか 1 文字を取り除いたうえで、URL 階層の N レベル目までの文字列からハッシュを計算します。レベルの定義は `URLHierarchy` と同じです。 | - -**構文** - -```sql -URLHash(url[, N]) -``` - -**引数** - -* `url` — ハッシュ化する URL 文字列。[`String`](/sql-reference/data-types/string) -* `N` — 省略可能。URL 階層内のレベル。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**戻り値** - -`url` の算出されたハッシュ値を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT URLHash('https://www.clickhouse.com') -``` - -```response title=Response -┌─URLHash('htt⋯house.com')─┐ -│ 13614512636072854701 │ -└──────────────────────────┘ -``` - -**指定レベルでの URL のハッシュ** - -```sql title=Query -SELECT URLHash('https://www.clickhouse.com/docs', 0); -SELECT URLHash('https://www.clickhouse.com/docs', 1); -``` - -```response title=Response --- https://www.clickhouse.com のハッシュ -┌─URLHash('htt⋯m/docs', 0)─┐ -│ 13614512636072854701 │ -└──────────────────────────┘ --- https://www.clickhouse.com/docs のハッシュ -┌─URLHash('htt⋯m/docs', 1)─┐ -│ 13167253331440520598 │ -└──────────────────────────┘ -``` - - -## cityHash64 - -導入バージョン: v1.1 - -64 ビットの [CityHash](https://github.com/google/cityhash) ハッシュ値を生成します。 - -これは高速な非暗号学的ハッシュ関数です。 -文字列型の引数には CityHash アルゴリズムを使用し、それ以外のデータ型の引数には実装依存の高速な非暗号学的ハッシュ関数を使用します。 -この関数は、最終結果を得るために CityHash のコンビネーターを使用します。 - -:::info -Google は、CityHash が ClickHouse に追加された後に CityHash のアルゴリズムを変更しました。 -つまり、ClickHouse の cityHash64 と Google のアップストリーム CityHash は現在異なる結果を生成します。 -ClickHouse の cityHash64 は CityHash v1.0.2 に対応しています。 -::: - -:::note -異なる引数型であっても、同じ入力値に対して計算されるハッシュ値が等しくなる場合があります。 -これは例えば、サイズの異なる整数型、同じデータを持つ名前付き・名前なしの `Tuple`、および同じデータを持つ `Map` とそれに対応する `Array(Tuple(key, value))` 型などに影響します。 -::: - -**構文** - -```sql -cityHash64(arg1[, arg2, ...]) -``` - -**引数** - -* `arg1[, arg2, ...]` — ハッシュ値を計算する対象となる可変個数の入力引数。[`Any`](/sql-reference/data-types) - -**戻り値** - -入力引数に対して計算されたハッシュ値を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**呼び出し例** - -```sql title=Query -SELECT cityHash64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS CityHash, toTypeName(CityHash) AS type; -``` - -```response title=Response -┌─────────────CityHash─┬─type───┐ -│ 12072650598913549138 │ UInt64 │ -└──────────────────────┴────────┘ -``` - -**行の順序も含めてテーブル全体のチェックサムを計算する** - -```sql title=Query -CREATE TABLE users ( - id UInt32, - name String, - age UInt8, - city String -) -ENGINE = MergeTree -ORDER BY tuple(); - -INSERT INTO users VALUES -(1, 'Alice', 25, 'New York'), -(2, 'Bob', 30, 'London'), -(3, 'Charlie', 35, 'Tokyo'); - -SELECT groupBitXor(cityHash64(*)) FROM users; -``` - -```response title=Response -┌─groupBitXor(⋯age, city))─┐ -│ 11639977218258521182 │ -└──────────────────────────┘ -``` - - -## farmFingerprint64 - -導入バージョン: v20.12 - -`Fingerprint64` メソッドを使用して 64 ビットの [FarmHash](https://github.com/google/farmhash) 値を生成します。 - -:::tip -[`farmHash64`](#farmHash64) よりも安定かつ移植性の高い値が必要な場合は、`farmFingerprint64` の使用を推奨します。 -::: - -:::note -計算されるハッシュ値は、引数の型が異なっていても、同じ入力値に対して等しくなる場合があります。 -これは、たとえばサイズの異なる整数型、同じデータを持つ名前付きおよび名前なしの `Tuple`、同じデータを持つ `Map` と、それに対応する `Array(Tuple(key, value))` 型などが該当します。 -::: - -**構文** - -```sql -farmFingerprint64(arg1[, arg2, ...]) -``` - -**引数** - -* `arg1[, arg2, ...]` — ハッシュを計算する可変長の入力引数。[`Any`](/sql-reference/data-types) - -**戻り値** - -入力引数から計算されたハッシュ値を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT farmFingerprint64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS FarmFingerprint, toTypeName(FarmFingerprint) AS type; -``` - -```response title=Response -┌─────FarmFingerprint─┬─type───┐ -│ 5752020380710916328 │ UInt64 │ -└─────────────────────┴────────┘ -``` - - -## farmHash64 - -導入バージョン: v1.1 - -`Hash64` メソッドを使用して 64 ビットの [FarmHash](https://github.com/google/farmhash) を生成します。 - -:::tip -安定かつ移植性の高い値が必要な場合は [`farmFingerprint64`](#farmFingerprint64) の使用を推奨します。 -::: - -:::note -計算されるハッシュ値は、異なる引数型であっても、同じ入力値に対して同一になる場合があります。 -これは、たとえばサイズの異なる整数型、同一データを持つ名前付きおよび名前なしの `Tuple`、同一データを持つ `Map` と、それに対応する `Array(Tuple(key, value))` 型などに影響します。 -::: - -**構文** - -```sql -farmHash64(arg1[, arg2, ...]) -``` - -**引数** - -* `arg1[, arg2, ...]` — ハッシュ値を計算する任意個の入力引数。[`Any`](/sql-reference/data-types) - -**戻り値** - -入力引数のハッシュ値を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT farmHash64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS FarmHash, toTypeName(FarmHash) AS type; -``` - -```response title=Response -┌─────────────FarmHash─┬─type───┐ -│ 18125596431186471178 │ UInt64 │ -└──────────────────────┴────────┘ -``` - - -## gccMurmurHash - -導入バージョン: v20.1 - -入力値に対して、[GCC](https://github.com/gcc-mirror/gcc/blob/41d6b10e96a1de98e90a7c0378437c3255814b16/libstdc%2B%2B-v3/include/bits/functional_hash.h#L191) で使用されているものと同じシードを用いて、64ビットの [MurmurHash2](https://github.com/aappleby/smhasher) ハッシュを計算します。 - -Clang と GCC のビルド間で同じ結果が得られます。 - -**構文** - -```sql -gccMurmurHash(arg1[, arg2, ...]) -``` - -**引数** - -* `arg1[, arg2, ...]` — ハッシュを計算する任意個の引数。[`Any`](/sql-reference/data-types) - -**戻り値** - -入力引数に対して計算されたハッシュ値を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT - gccMurmurHash(1, 2, 3) AS res1, - gccMurmurHash(('a', [1, 2, 3], 4, (4, ['foo', 'bar'], 1, (1, 2)))) AS res2 -``` - -```response title=Response -┌─────────────────res1─┬────────────────res2─┐ -│ 12384823029245979431 │ 1188926775431157506 │ -└──────────────────────┴─────────────────────┘ -``` - - -## halfMD5 - -導入バージョン: v1.1 - -すべての入力パラメータを文字列として[解釈し](/sql-reference/functions/type-conversion-functions#reinterpretasstring)、それぞれに対して MD5 ハッシュ値を計算します。次に、それらのハッシュ値を連結し、得られた文字列のハッシュの先頭 8 バイトを取り出し、それをビッグエンディアンのバイト順で [UInt64](/sql-reference/data-types/int-uint) として解釈します。この関数は比較的低速です(1 プロセッサコアあたり 1 秒間に 500 万件の短い文字列)。 - -代わりに [`sipHash64`](#sipHash64) 関数の使用を検討してください。 - -この関数は可変数の入力パラメータを取ります。 -引数には、サポートされている任意のデータ型を指定できます。 -一部のデータ型では、引数の型が異なっていても(サイズの異なる整数、同一データを持つ名前付きおよび名前なしの Tuple、同一データを持つ Map と、同一データを持つ対応する Array(Tuple(key, value)) 型など)、同じ値に対してはハッシュ関数の計算結果が同じになる場合があります。 - -**構文** - -```sql -halfMD5(arg1[, arg2, ..., argN]) -``` - -**引数** - -* `arg1[, arg2, ..., argN]` — ハッシュを計算する可変個数の引数。[`Any`](/sql-reference/data-types) - -**戻り値** - -指定した入力引数の half MD5 ハッシュ値を計算し、ビッグエンディアンのバイト順序で `UInt64` として返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT HEX(halfMD5('abc', 'cde', 'fgh')); -``` - -```response title=Response -┌─hex(halfMD5('abc', 'cde', 'fgh'))─┐ -│ 2C9506B7374CFAF4 │ -└───────────────────────────────────┘ -``` - - -## hiveHash - -導入バージョン: v20.1 - -文字列から「HiveHash」を計算します。 -これは符号ビットをゼロクリアした [`JavaHash`](#javaHash) と同じです。 -この関数は、バージョン 3.0 より前の [Apache Hive](https://en.wikipedia.org/wiki/Apache_Hive) で使用されています。 - -:::caution -このハッシュ関数は性能が高くありません。 -すでに別のシステムでこのアルゴリズムが使われており、同じ結果を計算する必要がある場合にのみ使用してください。 -::: - -**構文** - -```sql -hiveHash(arg) -``` - -**引数** - -* `arg` — ハッシュ化する入力文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -入力文字列に対して計算された「hive hash」の値を返します。[`Int32`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT hiveHash('Hello, world!'); -``` - -```response title=Response -┌─hiveHash('Hello, world!')─┐ -│ 267439093 │ -└───────────────────────────┘ -``` - - -## icebergHash - -導入バージョン: v25.5 - -Iceberg の [ハッシュ変換](https://iceberg.apache.org/spec/#appendix-b-32-bit-hash-requirements)ロジックを実装します。 - -**構文** - -```sql -icebergHash(value) -``` - -**引数** - -* `value` — ハッシュ値を計算する入力値。[`Integer`](/sql-reference/data-types/int-uint)、[`Bool`](/sql-reference/data-types/boolean)、[`Decimal`](/sql-reference/data-types/decimal)、[`Float*`](/sql-reference/data-types/float)、[`String`](/sql-reference/data-types/string)、[`FixedString`](/sql-reference/data-types/fixedstring)、[`UUID`](/sql-reference/data-types/uuid)、[`Date`](/sql-reference/data-types/date)、[`Time`](/sql-reference/data-types/time)、[`DateTime`](/sql-reference/data-types/datetime) のいずれか。 - -**返される値** - -32 ビットの Murmur3 ハッシュ(x86 バリアント、シード値 0)を表す [`Int32`](/sql-reference/data-types/int-uint) 型の値を返します。 - -**例** - -**使用例** - -```sql title=Query -SELECT icebergHash(1.0 :: Float32) -``` - -```response title=Response --142385009 -``` - - -## intHash32 - -導入: v1.1 - -整数の 32 ビットハッシュ値を計算します。 - -このハッシュ関数は比較的高速ですが、暗号学的ハッシュ関数ではありません。 - -**構文** - -```sql -intHash32(arg) -``` - -**引数** - -* `arg` — ハッシュ化する整数。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**戻り値** - -入力整数の32ビットハッシュ値([`UInt32`](/sql-reference/data-types/int-uint))を返します。 - -**例** - -**使用例** - -```sql title=Query -SELECT intHash32(42); -``` - -```response title=Response -┌─intHash32(42)─┐ -│ 1228623923 │ -└───────────────┘ -``` - - -## intHash64 - -導入バージョン: v1.1 - -整数の 64 ビットハッシュ値を計算します。 - -このハッシュ関数は比較的高速で([`intHash32`](#intHash32) よりも高速ですが)、暗号学的ハッシュ関数ではありません。 - -**構文** - -```sql -intHash64(int) -``` - -**引数** - -* `int` — ハッシュ化する整数値。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**戻り値** - -64ビットのハッシュコード。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT intHash64(42); -``` - -```response title=Response -┌────────intHash64(42)─┐ -│ 11490350930367293593 │ -└──────────────────────┘ -``` - - -## javaHash - -導入バージョン: v20.1 - -次の値から JavaHash を計算します: - -* [string](http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/478a4add975b/src/share/classes/java/lang/String.java#l1452), -* [Byte](https://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/478a4add975b/src/share/classes/java/lang/Byte.java#l405), -* [Short](https://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/478a4add975b/src/share/classes/java/lang/Short.java#l410), -* [Integer](https://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/478a4add975b/src/share/classes/java/lang/Integer.java#l959), -* [Long](https://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/478a4add975b/src/share/classes/java/lang/Long.java#l1060). - -:::caution -このハッシュ関数は効率が良くありません。 -すでに別のシステムでこのアルゴリズムが使われており、同じ結果を計算する必要がある場合にのみ使用してください。 -::: - -:::note -Java は符号付き整数に対するハッシュの計算のみをサポートしています。 -符号なし整数のハッシュを計算したい場合は、適切な符号付きの ClickHouse 型にキャストする必要があります。 -::: - -**構文** - -```sql -javaHash(arg) -``` - -**引数** - -* `arg` — ハッシュ計算の対象となる入力値。[`Any`](/sql-reference/data-types) - -**戻り値** - -`arg` のハッシュ値を計算して返します。[`Int32`](/sql-reference/data-types/int-uint) - -**例** - -**使用例 1** - -```sql title=Query -SELECT javaHash(toInt32(123)); -``` - -```response title=Response -┌─javaHash(toInt32(123))─┐ -│ 123 │ -└────────────────────────┘ -``` - -**使用例2** - -```sql title=Query -SELECT javaHash('Hello, world!'); -``` - -```response title=Response -┌─javaHash('Hello, world!')─┐ -│ -1880044555 │ -└───────────────────────────┘ -``` - - -## javaHashUTF16LE - -導入バージョン: v20.1 - -UTF-16LE でエンコードされた文字列を表すバイト列が含まれていると仮定して、その文字列から [JavaHash](http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/478a4add975b/src/share/classes/java/lang/String.java#l1452) を計算します。 - -**構文** - -```sql -javaHashUTF16LE(arg) -``` - -**引数** - -* `arg` — UTF-16LE でエンコードされた文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -UTF-16LE でエンコードされた文字列のハッシュ値を返します。[`Int32`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT javaHashUTF16LE(convertCharset('test', 'utf-8', 'utf-16le')); -``` - -```response title=Response -┌─javaHashUTF16LE(convertCharset('test', 'utf-8', 'utf-16le'))─┐ -│ 3556498 │ -└──────────────────────────────────────────────────────────────┘ -``` - - -## jumpConsistentHash - -導入バージョン: v1.1 - -整数に対して[jump consistent hash](https://arxiv.org/pdf/1406.2294.pdf)を計算します。 - -**構文** - -```sql -jumpConsistentHash(key, buckets) -``` - -**引数** - -* `key` — 入力キー。[`UInt64`](/sql-reference/data-types/int-uint) -* `buckets` — バケット数。[`Int32`](/sql-reference/data-types/int-uint) - -**戻り値** - -計算されたハッシュ値を返します。[`Int32`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT jumpConsistentHash(256, 4) -``` - -```response title=Response -┌─jumpConsistentHash(256, 4)─┐ -│ 3 │ -└────────────────────────────┘ -``` - - -## kafkaMurmurHash - -導入: v23.4 - -入力値の 32 ビット [MurmurHash2](https://github.com/aappleby/smhasher) ハッシュ値を、[Kafka](https://github.com/apache/kafka/blob/461c5cfe056db0951d9b74f5adc45973670404d7/clients/src/main/java/org/apache/kafka/common/utils/Utils.java#L482) で使用されているものと同じシードを用い、かつ最上位ビットを除外することで、[Default Partitioner](https://github.com/apache/kafka/blob/139f7709bd3f5926901a21e55043388728ccca78/clients/src/main/java/org/apache/kafka/clients/producer/internals/BuiltInPartitioner.java#L328) と互換性を持つように計算します。 - -**構文** - -```sql -kafkaMurmurHash(arg1[, arg2, ...]) -``` - -**引数** - -* `arg1[, arg2, ...]` — ハッシュ値を計算するための可変個の引数。[`Any`](/sql-reference/data-types) - -**戻り値** - -入力引数に対して計算されたハッシュ値を返します。[`UInt32`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT - kafkaMurmurHash('foobar') AS res1, - kafkaMurmurHash(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS res2 -``` - -```response title=Response -┌───────res1─┬─────res2─┐ -│ 1357151166 │ 85479775 │ -└────────────┴──────────┘ -``` - - -## keccak256 - -導入されたバージョン: v25.4 - -指定された文字列の Keccak-256 暗号学的ハッシュ値を計算します。 -このハッシュ関数はブロックチェーンアプリケーション、特に Ethereum で広く使用されています。 - -**構文** - -```sql -keccak256(message) -``` - -**引数** - -* `message` — ハッシュ化する入力文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -入力文字列の 32 バイトの Keccak-256 ハッシュ値を固定長文字列として返します。[`FixedString(32)`](/sql-reference/data-types/fixedstring) - -**例** - -**使用例** - -```sql title=Query -SELECT hex(keccak256('hello')) -``` - -```response title=Response -┌─hex(keccak256('hello'))──────────────────────────────────────────┐ -│ 1C8AFF950685C2ED4BC3174F3472287B56D9517B9C948127319A09A7A36DEAC8 │ -└──────────────────────────────────────────────────────────────────┘ -``` - - -## kostikConsistentHash - -導入バージョン: v22.6 - -Konstantin 'Kostik' Oblakov による、時間計算量および空間計算量がともに O(1) のコンシステントハッシュアルゴリズム。 -`n <= 32768` の場合にのみ効率的です。 - -**構文** - -```sql -kostikConsistentHash(input, n) -``` - -**別名**: `yandexConsistentHash` - -**引数** - -* `input` — 整数のキー。[`UInt64`](/sql-reference/data-types/int-uint) -* `n` — バケット数。[`UInt16`](/sql-reference/data-types/int-uint) - -**戻り値** - -計算されたハッシュ値を返します。[`UInt16`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT kostikConsistentHash(16045690984833335023, 2); -``` - -```response title=Response -┌─kostikConsistentHash(16045690984833335023, 2)─┐ -│ 1 │ -└───────────────────────────────────────────────┘ -``` - - -## metroHash64 - -導入バージョン: v1.1 - -64 ビットの [MetroHash](http://www.jandrewrogers.com/2015/05/27/metrohash/) ハッシュ値を生成します。 - -:::note -計算されるハッシュ値は、型が異なる引数であっても、同じ入力値に対して同一になる場合があります。 -これは例えば、サイズの異なる整数型や、同一データを持つ名前付きおよび名前なしの `Tuple`、同一データを持つ `Map` と、それに対応する `Array(Tuple(key, value))` 型などに影響します。 -::: - -**構文** - -```sql -metroHash64(arg1[, arg2, ...]) -``` - -**引数** - -* `arg1[, arg2, ...]` — ハッシュを計算するための任意個の入力引数。[`Any`](/sql-reference/data-types) - -**戻り値** - -入力引数に対して計算されたハッシュ値を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT metroHash64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS MetroHash, toTypeName(MetroHash) AS type; -``` - -```response title=Response -┌────────────MetroHash─┬─type───┐ -│ 14235658766382344533 │ UInt64 │ -└──────────────────────┴────────┘ -``` - - -## murmurHash2_32 - -導入バージョン: v18.5 - -入力値に対して [MurmurHash2](https://github.com/aappleby/smhasher) ハッシュを計算します。 - -:::note -異なる引数型であっても、同じ入力値に対して計算されるハッシュ値が同一になる場合があります。 -このことは、例えばサイズの異なる整数型、同一データを持つ名前付きおよび名前なしの `Tuple`、同一データを持つ `Map` と対応する `Array(Tuple(key, value))` 型などに影響します。 -::: - -**構文** - -```sql -murmurHash2_32(arg1[, arg2, ...]) -``` - -**引数** - -* `arg1[, arg2, ...]` — ハッシュ値を計算する可変個の入力引数。[`Any`](/sql-reference/data-types) - -**戻り値** - -入力引数に対して計算されたハッシュ値を返します。[`UInt32`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT murmurHash2_32(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS MurmurHash2, toTypeName(MurmurHash2) AS type; -``` - -```response title=Response -┌─MurmurHash2─┬─type───┐ -│ 3681770635 │ UInt32 │ -└─────────────┴────────┘ -``` - - -## murmurHash2_64 - -導入バージョン: v18.10 - -入力値に対して [MurmurHash2](https://github.com/aappleby/smhasher) ハッシュを計算します。 - -:::note -同じ入力値に対しても、引数の型が異なる場合には、計算されるハッシュ値が同一になることがあります。 -これは、たとえばサイズの異なる整数型、同じデータを持つ名前付きおよび名前なしの `Tuple`、同じデータを持つ `Map` とそれに対応する `Array(Tuple(key, value))` 型などが該当します。 -::: - -**構文** - -```sql -murmurHash2_64(arg1[, arg2, ...]) -``` - -**引数** - -* `arg1[, arg2, ...]` — ハッシュを計算する対象となる可変個の入力引数。[`Any`](/sql-reference/data-types) - -**戻り値** - -入力引数に対して計算されたハッシュ値を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT murmurHash2_64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS MurmurHash2, toTypeName(MurmurHash2) AS type; -``` - -```response title=Response -┌──────────MurmurHash2─┬─type───┐ -│ 11832096901709403633 │ UInt64 │ -└──────────────────────┴────────┘ -``` - - -## murmurHash3_128 - -導入バージョン: v18.10 - -入力値の 128 ビット [MurmurHash3](https://github.com/aappleby/smhasher) ハッシュ値を計算します。 - -**構文** - -```sql -murmurHash3_128(arg1[, arg2, ...]) -``` - -**引数** - -* `arg1[, arg2, ...]` — ハッシュを計算する対象となる可変個数の入力引数。[`Any`](/sql-reference/data-types) - -**戻り値** - -入力引数の 128 ビット `MurmurHash3` ハッシュ値を返します。[`FixedString(16)`](/sql-reference/data-types/fixedstring) - -**例** - -**使用例** - -```sql title=Query -SELECT hex(murmurHash3_128('foo', 'foo', 'foo')); -``` - -```response title=Response -┌─hex(murmurHash3_128('foo', 'foo', 'foo'))─┐ -│ F8F7AD9B6CD4CF117A71E277E2EC2931 │ -└───────────────────────────────────────────┘ -``` - - -## murmurHash3_32 - -導入: v18.10 - -[MurmurHash3](https://github.com/aappleby/smhasher) のハッシュ値を生成します。 - -:::note -計算されるハッシュ値は、引数の型が異なっていても、同じ入力値に対して同一になる場合があります。 -例えば、サイズの異なる整数型、同一データを持つ名前付きおよび非名前付きの `Tuple`、同一データを持つ `Map` とそれに対応する `Array(Tuple(key, value))` 型などが該当します。 -::: - -**構文** - -```sql -murmurHash3_32(arg1[, arg2, ...]) -``` - -**引数** - -* `arg1[, arg2, ...]` — ハッシュ値を計算する対象となる可変個数の入力引数。[`Any`](/sql-reference/data-types) - -**戻り値** - -入力引数から計算されたハッシュ値を返します。[`UInt32`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT murmurHash3_32(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS MurmurHash3, toTypeName(MurmurHash3) AS type; -``` - -```response title=Response -┌─MurmurHash3─┬─type───┐ -│ 2152717 │ UInt32 │ -└─────────────┴────────┘ -``` - - -## murmurHash3_64 - -導入: v18.10 - -入力値に対して [MurmurHash3](https://github.com/aappleby/smhasher) ハッシュを計算します。 - -:::note -同じ入力値であっても、引数の型が異なる場合に計算されるハッシュ値が同一になることがあります。 -これは、たとえばサイズの異なる整数型、同じデータを持つ名前付き/名前なしの `Tuple`、同じデータを持つ `Map` 型および対応する `Array(Tuple(key, value))` 型などに該当します。 -::: - -**構文** - -```sql -murmurHash3_64(arg1[, arg2, ...]) -``` - -**引数** - -* `arg1[, arg2, ...]` — ハッシュ値を計算するための任意個数の入力引数。[`Any`](/sql-reference/data-types) - -**戻り値** - -入力引数に対して計算されたハッシュ値を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT murmurHash3_64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS MurmurHash3, toTypeName(MurmurHash3) AS type; -``` - -```response title=Response -┌──────────MurmurHash3─┬─type───┐ -│ 11832096901709403633 │ UInt64 │ -└──────────────────────┴────────┘ -``` - - -## ngramMinHash - -導入バージョン: v21.1 - -ASCII 文字列を、`ngramsize` 個の文字からなる n-gram に分割し、各 n-gram のハッシュ値を計算して、それらのハッシュ値を要素とするタプルを返します。 -`hashnum` 個の最小ハッシュを用いて最小ハッシュを計算し、`hashnum` 個の最大ハッシュを用いて最大ハッシュを計算します。 -大文字と小文字は区別されます。 - -[`tupleHammingDistance`](../functions/tuple-functions.md#tupleHammingDistance) を使用して、類似した文字列を検出するために利用できます。 -2 つの文字列に対して、返されるハッシュ値が両方の文字列で同じであれば、それらの文字列は同一です。 - -**構文** - -```sql -ngramMinHash(string[, ngramsize, hashnum]) -``` - -**引数** - -* `string` — ハッシュ値を計算する対象の文字列。[`String`](/sql-reference/data-types/string) -* `ngramsize` — 省略可能。n-gram のサイズ。`1` から `25` までの任意の数値。デフォルト値は `3`。[`UInt8`](/sql-reference/data-types/int-uint) -* `hashnum` — 省略可能。結果の計算に使用する最小ハッシュおよび最大ハッシュの個数。`1` から `25` までの任意の数値。デフォルト値は `6`。[`UInt8`](/sql-reference/data-types/int-uint) - -**戻り値** - -最小値と最大値、2 つのハッシュ値からなるタプルを返します。[`Tuple`](/sql-reference/data-types/tuple) - -**例** - -**使用例** - -```sql title=Query -SELECT ngramMinHash('ClickHouse') AS Tuple; -``` - -```response title=Response -┌─Tuple──────────────────────────────────────┐ -│ (18333312859352735453,9054248444481805918) │ -└────────────────────────────────────────────┘ -``` - - -## ngramMinHashArg - -導入バージョン: v21.1 - -ASCII 文字列を `ngramsize` 文字からなる N-グラムに分割し、同じ入力に対して [`ngramMinHash`](#ngramMinHash) 関数で計算されるハッシュ値のうち、最小値と最大値を持つ N-グラムを返します。 -大文字と小文字を区別します。 - -**構文** - -```sql -ngramMinHashArg(string[, ngramsize, hashnum]) -``` - -**引数** - -* `string` — ハッシュ値を計算する対象の文字列。[`String`](/sql-reference/data-types/string) -* `ngramsize` — 省略可。n-gram のサイズ。`1` から `25` までの任意の数値。デフォルト値は `3`。[`UInt8`](/sql-reference/data-types/int-uint) -* `hashnum` — 省略可。結果を計算する際に使用される最小ハッシュ数および最大ハッシュ数。`1` から `25` までの任意の数値。デフォルト値は `6`。[`UInt8`](/sql-reference/data-types/int-uint) - -**戻り値** - -`hashnum` 個の n-gram を持つ 2 つのタプルから成るタプルを返します。[`Tuple(String)`](/sql-reference/data-types/tuple) - -**例** - -**使用例** - -```sql title=Query -SELECT ngramMinHashArg('ClickHouse') AS Tuple; -``` - -```response title=Response -┌─Tuple─────────────────────────────────────────────────────────────────────────┐ -│ (('ous','ick','lic','Hou','kHo','use'),('Hou','lic','ick','ous','ckH','Cli')) │ -└───────────────────────────────────────────────────────────────────────────────┘ -``` - - -## ngramMinHashArgCaseInsensitive - -導入バージョン: v21.1 - -ASCII 文字列を `ngramsize` 文字からなる n-gram に分割し、同じ入力に対して [`ngramMinHashCaseInsensitive`](#ngramMinHashCaseInsensitive) 関数で計算される、ハッシュ値が最小の n-gram と最大の n-gram を返します。 -大文字小文字は区別されません。 - -**構文** - -```sql -ngramMinHashArgCaseInsensitive(string[, ngramsize, hashnum]) -``` - -**引数** - -* `string` — ハッシュを計算する対象の文字列。[`String`](/sql-reference/data-types/string) -* `ngramsize` — 省略可。n-グラムのサイズ。`1` から `25` までの任意の数値。デフォルト値は `3`。[`UInt8`](/sql-reference/data-types/int-uint) -* `hashnum` — 省略可。結果の計算に使用される最小ハッシュおよび最大ハッシュの個数。`1` から `25` までの任意の数値。デフォルト値は `6`。[`UInt8`](/sql-reference/data-types/int-uint) - -**戻り値** - -`hashnum` 個の n-グラムを持つ 2 つのタプルから成るタプルを返します。[`Tuple(Tuple(String))`](/sql-reference/data-types/tuple) - -**例** - -**使用例** - -```sql title=Query -SELECT ngramMinHashArgCaseInsensitive('ClickHouse') AS Tuple; -``` - -```response title=Response -┌─Tuple─────────────────────────────────────────────────────────────────────────┐ -│ (('ous','ick','lic','kHo','use','Cli'),('kHo','lic','ick','ous','ckH','Hou')) │ -└───────────────────────────────────────────────────────────────────────────────┘ -``` - - -## ngramMinHashArgCaseInsensitiveUTF8 - -導入バージョン: v21.1 - -UTF-8 文字列を、`ngramsize` 文字からなる n-gram に分割し、同じ入力に対して ngramMinHashCaseInsensitiveUTF8 関数で計算されるハッシュ値が最小および最大の n-gram を返します。 -大文字と小文字は区別されません。 - -**構文** - -```sql -ngramMinHashArgCaseInsensitiveUTF8(string[, ngramsize, hashnum]) -``` - -**引数** - -* `string` — ハッシュ値を計算する対象の文字列。[`String`](/sql-reference/data-types/string) -* `ngramsize` — 省略可。n-gram のサイズ。`1` から `25` までの任意の数値。デフォルト値は `3`。[`UInt8`](/sql-reference/data-types/int-uint) -* `hashnum` — 省略可。結果を計算する際に使用する最小ハッシュおよび最大ハッシュの個数。`1` から `25` までの任意の数値。デフォルト値は `6`。[`UInt8`](/sql-reference/data-types/int-uint) - -**戻り値** - -それぞれに `hashnum` 個の n-gram を含む 2 つのタプルから成るタプルを返します。[`Tuple(Tuple(String))`](/sql-reference/data-types/tuple) - -**例** - -**使用例** - -```sql title=Query -SELECT ngramMinHashArgCaseInsensitiveUTF8('ClickHouse') AS Tuple; -``` - -```response title=Response -┌─Tuple─────────────────────────────────────────────────────────────────────────┐ -│ (('ckH','ous','ick','lic','kHo','use'),('kHo','lic','ick','ous','ckH','Hou')) │ -└───────────────────────────────────────────────────────────────────────────────┘ -``` - - -## ngramMinHashArgUTF8 - -導入バージョン: v21.1 - -UTF-8 文字列を `ngramsize` 文字から成る N グラムに分割し、同じ入力に対して `ngramMinHashUTF8` 関数で計算されるハッシュ値が最小および最大となる N グラムを返します。 -大文字と小文字は区別されます。 - -**構文** - -```sql -ngramMinHashArgUTF8(string[, ngramsize, hashnum]) -``` - -**引数** - -* `string` — ハッシュを計算する対象の文字列。[`String`](/sql-reference/data-types/string) -* `ngramsize` — 省略可。n-gram のサイズ。`1` から `25` までの任意の数値。デフォルトは `3`。[`UInt8`](/sql-reference/data-types/int-uint) -* `hashnum` — 省略可。結果の計算に使用される最小および最大ハッシュの数。`1` から `25` までの任意の数値。デフォルトは `6`。[`UInt8`](/sql-reference/data-types/int-uint) - -**戻り値** - -`hashnum` 個の n-gram を持つ 2 つのタプルからなるタプルを返します。[`Tuple(Tuple(String))`](/sql-reference/data-types/tuple) - -**例** - -**使用例** - -```sql title=Query -SELECT ngramMinHashArgUTF8('ClickHouse') AS Tuple; -``` - -```response title=Response -┌─Tuple─────────────────────────────────────────────────────────────────────────┐ -│ (('ous','ick','lic','Hou','kHo','use'),('kHo','Hou','lic','ick','ous','ckH')) │ -└───────────────────────────────────────────────────────────────────────────────┘ -``` - - -## ngramMinHashCaseInsensitive - -導入バージョン: v21.1 - -ASCII文字列を `ngramsize` 文字の n-gram に分割し、各 n-gram のハッシュ値を計算して、それらのハッシュを含むタプルを返します。 -`hashnum` 個の最小ハッシュを用いて最小ハッシュを計算し、`hashnum` 個の最大ハッシュを用いて最大ハッシュを計算します。 -大文字小文字は区別しません。 - -[`tupleHammingDistance`](../functions/tuple-functions.md#tupleHammingDistance) を使って、準重複文字列を検出するために利用できます。 -2 つの文字列に対して、返されるハッシュが両方の文字列で同じであれば、それらの文字列は同一とみなせます。 - -**構文** - -```sql -ngramMinHashCaseInsensitive(string[, ngramsize, hashnum]) -``` - -**引数** - -* `string` — 文字列。[String](../data-types/string.md)。- `ngramsize` — n-gram のサイズ。省略可能。許容値: `1` から `25` までの任意の整数値。デフォルト値: `3`。[UInt8](../data-types/int-uint.md)。- `hashnum` — 結果を計算する際に使用する、最小ハッシュおよび最大ハッシュの数。省略可能。許容値: `1` から `25` までの任意の整数値。デフォルト値: `6`。[UInt8](../data-types/int-uint.md)。 - -**戻り値** - -2 つのハッシュ(最小値と最大値)を含むタプル。[Tuple](../data-types/tuple.md)([UInt64](../data-types/int-uint.md), [UInt64](../data-types/int-uint.md))。[`Tuple`](/sql-reference/data-types/tuple) - -**例** - -**使用例** - -```sql title=Query -SELECT ngramMinHashCaseInsensitive('ClickHouse') AS Tuple; -``` - -```response title=Response -┌─Tuple──────────────────────────────────────┐ -│ (2106263556442004574,13203602793651726206) │ -└────────────────────────────────────────────┘ -``` - - -## ngramMinHashCaseInsensitiveUTF8 - -導入バージョン: v21.1 - -UTF-8 文字列を `ngramsize` 個の文字からなる n-gram に分割し、それぞれの n-gram に対してハッシュ値を計算し、それらのハッシュを要素とするタプルを返します。 -`hashnum` 個の最小ハッシュを使って最小ハッシュを計算し、`hashnum` 個の最大ハッシュを使って最大ハッシュを計算します。 -大文字・小文字は区別しません。 - -[`tupleHammingDistance`](../functions/tuple-functions.md#tupleHammingDistance) を用いて、部分的に重複した(セミ重複)文字列を検出するために使用できます。 -2 つの文字列に対して、返されるハッシュが同じであれば、それらの文字列は同一と見なされます。 - -**構文** - -```sql -ngramMinHashCaseInsensitiveUTF8(文字列 [, nグラムサイズ, ハッシュ数]) -``` - -**引数** - -* `string` — ハッシュを計算する対象の文字列。[`String`](/sql-reference/data-types/string) -* `ngramsize` — 省略可能。N-gram のサイズ。`1` から `25` までの任意の数値。デフォルト値は `3`。[`UInt8`](/sql-reference/data-types/int-uint) -* `hashnum` — 省略可能。結果の計算に使用するハッシュ値の最小個数および最大個数。`1` から `25` までの任意の数値。デフォルト値は `6`。[`UInt8`](/sql-reference/data-types/int-uint) - -**返される値** - -最小値と最大値の 2 つのハッシュを要素として含むタプルを返します。[`Tuple`](/sql-reference/data-types/tuple) - -**例** - -**使用例** - -```sql title=Query -SELECT ngramMinHashCaseInsensitiveUTF8('ClickHouse') AS Tuple; -``` - -```response title=Response -┌─Tuple───────────────────────────────────────┐ -│ (12493625717655877135,13203602793651726206) │ -└─────────────────────────────────────────────┘ -``` - - -## ngramMinHashUTF8 - -導入バージョン: v21.1 - -UTF-8 文字列を `ngramsize` 文字の n-gram に分割し、各 n-gram のハッシュ値を計算して、それらのハッシュからなるタプルを返します。 -`hashnum` 個の最小ハッシュ値を用いて最小ハッシュを計算し、`hashnum` 個の最大ハッシュ値を用いて最大ハッシュを計算します。 -大文字と小文字は区別されます。 - -[`tupleHammingDistance`](../functions/tuple-functions.md#tupleHammingDistance) を使って、部分的に重複した文字列を検出するために使用できます。 -2 つの文字列について、返されるハッシュが両方で同じであれば、それらの文字列は同一です。 - -**構文** - -```sql -ngramMinHashUTF8(string[, ngramsize, hashnum]) -``` - -**引数** - -* `string` — ハッシュ値を計算する対象の文字列。[`String`](/sql-reference/data-types/string) -* `ngramsize` — 省略可能。N-gram のサイズ。`1` から `25` の任意の数値。デフォルト値は `3`。[`UInt8`](/sql-reference/data-types/int-uint) -* `hashnum` — 省略可能。結果の計算に使用する最小および最大ハッシュの数。`1` から `25` の任意の数値。デフォルト値は `6`。[`UInt8`](/sql-reference/data-types/int-uint) - -**戻り値** - -2 つのハッシュ(最小値と最大値)を要素とするタプルを返します。[`Tuple`](/sql-reference/data-types/tuple) - -**例** - -**使用例** - -```sql title=Query -SELECT ngramMinHashUTF8('ClickHouse') AS Tuple; -``` - -```response title=Response -┌─Tuple──────────────────────────────────────┐ -│ (18333312859352735453,6742163577938632877) │ -└────────────────────────────────────────────┘ -``` - - -## ngramSimHash - -導入バージョン: v21.1 - -ASCII 文字列を、長さ `ngramsize` の記号からなる n-gram に分割し、その n-gram の `simhash` を返します。 - -[`bitHammingDistance`](../functions/bit-functions.md/#bitHammingDistance) と組み合わせて、部分的に重複した文字列の検出に使用できます。 -2 つの文字列について計算された `simhashes` 間の[ハミング距離](https://en.wikipedia.org/wiki/Hamming_distance)が小さいほど、それらの文字列が同一である可能性が高くなります。 - -**構文** - -```sql -ngramSimHash(string[, ngramsize]) -``` - -**引数** - -* `string` — 大文字・小文字を区別して `simhash` を計算する対象の文字列。[`String`](/sql-reference/data-types/string) -* `ngramsize` — 省略可能。n-gram のサイズで、`1` から `25` までの任意の数値。既定値は `3`。[`UInt8`](/sql-reference/data-types/int-uint) - -**戻り値** - -入力文字列のハッシュ値を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT ngramSimHash('ClickHouse') AS Hash; -``` - -```response title=Response -┌───────Hash─┐ -│ 1627567969 │ -└────────────┘ -``` - - -## ngramSimHashCaseInsensitive - -導入バージョン: v21.1 - -ASCII 文字列を、`ngramsize` 文字からなる n-gram に分割し、n-gram の `simhash` を返します。 -大文字と小文字を区別しません。 - -[`bitHammingDistance`](/sql-reference/functions/bit-functions#bitHammingDistance) と組み合わせて、重複に近い文字列の検出に使用できます。 -2 つの文字列について計算した `simhash` の[ハミング距離](https://en.wikipedia.org/wiki/Hamming_distance)が小さいほど、それらの文字列が同一である可能性が高くなります。 - -**構文** - -```sql -ngramSimHashCaseInsensitive(string[, ngramsize]) -``` - -**引数** - -* `string` — 大文字小文字を区別せずに `simhash` を計算する対象の文字列。[`String`](/sql-reference/data-types/string) -* `ngramsize` — 省略可能。n-gram のサイズで、`1` から `25` までの任意の数値。デフォルト値は `3`。[`UInt8`](/sql-reference/data-types/int-uint) - -**戻り値** - -ハッシュ値。[UInt64](../data-types/int-uint.md)。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT ngramSimHashCaseInsensitive('ClickHouse') AS Hash; -``` - -```response title=Response -┌──────Hash─┐ -│ 562180645 │ -└───────────┘ -``` - - -## ngramSimHashCaseInsensitiveUTF8 - -導入バージョン: v21.1 - -UTF-8 文字列を `ngramsize` 個の文字からなる n-gram に分割し、n-gram の `simhash` を返します。 -大文字と小文字を区別しません。 - -[bitHammingDistance](../functions/bit-functions.md/#bitHammingDistance) と組み合わせて、重複度の高い文字列の検出に使用できます。2 つの文字列について計算された `simhash` 値同士の [Hamming Distance](https://en.wikipedia.org/wiki/Hamming_distance) が小さいほど、それらの文字列が同一である可能性が高くなります。 - -**構文** - -```sql -ngramSimHashCaseInsensitiveUTF8(string[, ngramsize]) -``` - -**引数** - -* `string` — ハッシュを計算する対象の文字列。[`String`](/sql-reference/data-types/string) -* `ngramsize` — 省略可能。n-gram のサイズ。`1` から `25` までの任意の数値。デフォルト値は `3`。[`UInt8`](/sql-reference/data-types/int-uint) - -**戻り値** - -計算されたハッシュ値を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT ngramSimHashCaseInsensitiveUTF8('ClickHouse') AS Hash; -``` - -```response title=Response -┌───────Hash─┐ -│ 1636742693 │ -└────────────┘ -``` - - -## ngramSimHashUTF8 - -導入バージョン: v21.1 - -UTF-8 エンコードされた文字列を `ngramsize` 個の文字からなる n-gram に分割し、その n-gram の `simhash` を返します。 -大文字と小文字を区別します。 - -[`bitHammingDistance`](../functions/bit-functions.md/#bitHammingDistance) と組み合わせて、部分的に重複した文字列の検出に使用できます。 -2 つの文字列について計算された `simhashes` の[ハミング距離](https://en.wikipedia.org/wiki/Hamming_distance)が小さいほど、それらの文字列が同一である可能性が高くなります。 - -**構文** - -```sql -ngramSimHashUTF8(string[, ngramsize]) -``` - -**引数** - -* `string` — ハッシュを計算する対象の文字列。[`String`](/sql-reference/data-types/string) -* `ngramsize` — 省略可能。n-gram のサイズで、`1` から `25` までの任意の数値。デフォルト値は `3`。[`UInt8`](/sql-reference/data-types/int-uint) - -**戻り値** - -計算されたハッシュ値を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT ngramSimHashUTF8('ClickHouse') AS Hash; -``` - -```response title=Response -┌───────Hash─┐ -│ 1628157797 │ -└────────────┘ -``` - - -## sipHash128 - -導入バージョン: v1.1 - -[`sipHash64`](#sipHash64) に似ていますが、128 ビットのハッシュ値を生成します。つまり、最終的な XOR フォールディング処理が 128 ビットまで行われます。 - -:::tip 新規プロジェクトでは sipHash128Reference を使用する -この 128 ビット版はリファレンス実装と異なり、安全性がより低い実装です。 -このバージョンが存在するのは、作成当時 SipHash の公式な 128 ビット拡張が存在しなかったためです。 -新規プロジェクトでは [`sipHash128Reference`](#sipHash128Reference) の使用を推奨します。 -::: - -**構文** - -```sql -sipHash128(arg1[, arg2, ...]) -``` - -**引数** - -* `arg1[, arg2, ...]` — ハッシュを計算する任意個の入力引数。[`Any`](/sql-reference/data-types) - -**戻り値** - -128ビットの `SipHash` ハッシュ値を返します。[`FixedString(16)`](/sql-reference/data-types/fixedstring) - -**例** - -**使用例** - -```sql title=Query -SELECT hex(sipHash128('foo', '\x01', 3)); -``` - -```response title=Response -┌─hex(sipHash128('foo', '', 3))────┐ -│ 9DE516A64A414D4B1B609415E4523F24 │ -└──────────────────────────────────┘ -``` - - -## sipHash128Keyed - -導入バージョン: v23.2 - -[`sipHash128`](#sipHash128) と同じですが、固定キーを使う代わりに明示的なキー引数を追加で受け取ります。 - -:::tip 新しいプロジェクトでは sipHash128ReferenceKeyed を使用してください -この 128 ビット版はリファレンス実装とは異なり、より弱くなっています。 -このバージョンが存在するのは、これが実装された当時、SipHash には公式な 128 ビット拡張が存在しなかったためです。 -新しいプロジェクトでは [`sipHash128ReferenceKeyed`](#sipHash128ReferenceKeyed) の使用が推奨されます。 -::: - -**構文** - -```sql -sipHash128Keyed((k0, k1), [arg1, arg2, ...]) -``` - -**引数** - -* `(k0, k1)` — キーを表す 2 つの UInt64 値からなるタプル。[`Tuple(UInt64, UInt64)`](/sql-reference/data-types/tuple) -* `arg1[, arg2, ...]` — ハッシュを計算するための任意個数の入力引数。[`Any`](/sql-reference/data-types) - -**戻り値** - -型 [FixedString(16)](../data-types/fixedstring.md) の 128 ビットの `SipHash` ハッシュ値。[`FixedString(16)`](/sql-reference/data-types/fixedstring) - -**例** - -**使用例** - -```sql title=Query -SELECT hex(sipHash128Keyed((506097522914230528, 1084818905618843912),'foo', '\x01', 3)); -``` - -```response title=Response -┌─hex(sipHash128Keyed((506097522914230528, 1084818905618843912), 'foo', '', 3))─┐ -│ B8467F65C8B4CFD9A5F8BD733917D9BF │ -└───────────────────────────────────────────────────────────────────────────────┘ -``` - - -## sipHash128Reference - -導入バージョン: v23.2 - -[`sipHash128`](/sql-reference/functions/hash-functions#sipHash128) と同様ですが、SipHash の原著者による 128 ビットアルゴリズムを実装しています。 - -**構文** - -```sql -sipHash128Reference(arg1[, arg2, ...]) -``` - -**引数** - -* `arg1[, arg2, ...]` — ハッシュを計算する対象となる可変個の入力引数。[`Any`](/sql-reference/data-types) - -**戻り値** - -入力引数に対して計算された 128 ビットの `SipHash` ハッシュ値を返します。[`FixedString(16)`](/sql-reference/data-types/fixedstring) - -**例** - -**使用例** - -```sql title=Query -SELECT hex(sipHash128Reference('foo', '', 3)); -``` - -```response title=Response -┌─hex(sipHash128Reference('foo', '', 3))─┐ -│ 4D1BE1A22D7F5933C0873E1698426260 │ -└────────────────────────────────────────┘ -``` - - -## sipHash128ReferenceKeyed - -導入バージョン: v23.2 - -[`sipHash128Reference`](#sipHash128Reference) と同様ですが、固定キーを使用する代わりに、明示的なキー引数を取ります。 - -**構文** - -```sql -sipHash128ReferenceKeyed((k0, k1), arg1[, arg2, ...]) -``` - -**引数** - -* `(k0, k1)` — キーを表す 2 つの値からなるタプル。[`Tuple(UInt64, UInt64)`](/sql-reference/data-types/tuple) -* `arg1[, arg2, ...]` — ハッシュを計算する対象となる可変個数の入力引数。[`Any`](/sql-reference/data-types) - -**戻り値** - -入力引数に対して計算された 128 ビットの `SipHash` ハッシュ値を返します。[`FixedString(16)`](/sql-reference/data-types/fixedstring) - -**例** - -**使用例** - -```sql title=Query -SELECT hex(sipHash128Reference('foo', '', 3)); -``` - -```response title=Response -┌─hex(sipHash128Reference('foo', '', 3))─┐ -│ 4D1BE1A22D7F5933C0873E1698426260 │ -└────────────────────────────────────────┘ -``` - - -## sipHash64 - -導入バージョン: v1.1 - -64 ビットの [SipHash](https://en.wikipedia.org/wiki/SipHash) ハッシュ値を生成します。 - -これは暗号学的ハッシュ関数です。[`MD5`](#MD5) ハッシュ関数より少なくとも 3 倍高速で動作します。 - -この関数は、すべての入力パラメータを文字列として[解釈](/sql-reference/functions/type-conversion-functions#reinterpretasstring)し、それぞれについてハッシュ値を計算します。 -その後、以下のアルゴリズムでそれらのハッシュ値を結合します: - -1. 1 番目と 2 番目のハッシュ値を連結して配列を作成し、それをハッシュします。 -2. 直前に計算したハッシュ値と 3 番目の入力パラメータのハッシュ値を、同様の方法でハッシュします。 -3. この計算を、元の入力に対応する残りすべてのハッシュ値に対して繰り返します。 - -:::note -同じ入力値でも、引数の型が異なる場合には、計算されるハッシュ値が同一になることがあります。 -これは、たとえばサイズの異なる整数型、同じデータを持つ名前付きおよび名前なしの `Tuple`、同じデータを持つ `Map` と、それに対応する `Array(Tuple(key, value))` 型などに影響します。 -::: - -**構文** - -```sql -sipHash64(arg1[, arg2, ...]) -``` - -**引数** - -* `arg1[, arg2, ...]` — 可変個数の入力引数。[`Any`](/sql-reference/data-types) - -**戻り値** - -入力引数に対して計算されたハッシュ値を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT sipHash64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS SipHash, toTypeName(SipHash) AS type; -``` - -```response title=Response -┌──────────────SipHash─┬─type───┐ -│ 11400366955626497465 │ UInt64 │ -└──────────────────────┴────────┘ -``` - - -## sipHash64Keyed - -導入バージョン: v23.2 - -[`sipHash64`](#sipHash64) と同様ですが、固定キーではなく、明示的に指定したキー引数を取ります。 - -**構文** - -```sql -sipHash64Keyed((k0, k1), arg1[,arg2, ...]) -``` - -**引数** - -* `(k0, k1)` — キーを表す 2 つの値のタプル。[`Tuple(UInt64, UInt64)`](/sql-reference/data-types/tuple) -* `arg1[,arg2, ...]` — 可変個の入力引数。[`Any`](/sql-reference/data-types) - -**返り値** - -入力値から計算されたハッシュ値を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT sipHash64Keyed((506097522914230528, 1084818905618843912), array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS SipHash, toTypeName(SipHash) AS type; -``` - -```response title=Response -┌─────────────SipHash─┬─type───┐ -│ 8017656310194184311 │ UInt64 │ -└─────────────────────┴────────┘ -``` - - -## wordShingleMinHash - -導入バージョン: v21.1 - -ASCII 文字列を `shinglesize` 語からなる部分列(シングル)に分割し、各シングルごとにハッシュ値を計算して、それらのハッシュを要素とするタプルを返します。 -最小ハッシュの計算には `hashnum` 個の最小ハッシュを、最大ハッシュの計算には `hashnum` 個の最大ハッシュを使用します。 -大文字と小文字は区別されます。 - -[`tupleHammingDistance`](../functions/tuple-functions.md#tupleHammingDistance) を使って、準重複文字列を検出するために利用できます。 -2 つの文字列に対して、返されるハッシュが両方の文字列で同じであれば、それらの文字列は同一であるとみなせます。 - -**構文** - -```sql -wordShingleMinHash(string[, shinglesize, hashnum]) -``` - -**引数** - -* `string` — ハッシュ値を計算する対象の文字列。[`String`](/sql-reference/data-types/string) -* `shinglesize` — 省略可能。ワードシングル(shingle)のサイズ。`1` から `25` の範囲の任意の整数。デフォルト値は `3`。[`UInt8`](/sql-reference/data-types/int-uint) -* `hashnum` — 省略可能。結果の計算に使用される最小ハッシュ値および最大ハッシュ値の数。`1` から `25` の範囲の任意の整数。デフォルト値は `6`。[`UInt8`](/sql-reference/data-types/int-uint) - -**戻り値** - -2 つのハッシュ値(最小値と最大値)を要素とするタプルを返します。[`Tuple(UInt64, UInt64)`](/sql-reference/data-types/tuple) - -**例** - -**使用例** - -```sql title=Query -SELECT wordShingleMinHash('ClickHouse® is a column-oriented database management system (DBMS) for online analytical processing of queries (OLAP).') AS Tuple; -``` - -```response title=Response -┌─Tuple──────────────────────────────────────┐ -│ (16452112859864147620,5844417301642981317) │ -└────────────────────────────────────────────┘ -``` - - -## wordShingleMinHashArg - -導入バージョン: v1.1 - -ASCII 文字列を `shinglesize` 語ごとの部分(シングル)に分割し、同じ入力を用いて wordShingleMinHash 関数で計算される単語ハッシュの最小値および最大値を持つシングルを返します。 -ケースセンシティブです。 - -**構文** - -```sql -wordShingleMinHashArg(string[, shinglesize, hashnum]) -``` - -**引数** - -* `string` — ハッシュを計算する対象の文字列。[`String`](/sql-reference/data-types/string) -* `shinglesize` — 省略可能。ワードシングル(word shingle)のサイズ。`1` から `25` までの任意の数値。デフォルト値は `3`。[`UInt8`](/sql-reference/data-types/int-uint) -* `hashnum` — 省略可能。結果の計算に使用する最小ハッシュと最大ハッシュの個数。`1` から `25` までの任意の数値。デフォルト値は `6`。[`UInt8`](/sql-reference/data-types/int-uint) - -**戻り値** - -`hashnum` 個のワードシングルを含む 2 つのタプルからなるタプルを返します。[`Tuple(Tuple(String))`](/sql-reference/data-types/tuple) - -**例** - -**使用例** - -```sql title=Query -SELECT wordShingleMinHashArg('ClickHouse®は、オンライン分析処理(OLAP)のための列指向データベース管理システム(DBMS)です。', 1, 3) AS Tuple; -``` - -```response title=Response -┌─Tuple─────────────────────────────────────────────────────────────────┐ -│ (('OLAP','database','analytical'),('online','oriented','processing')) │ -└───────────────────────────────────────────────────────────────────────┘ -``` - - -## wordShingleMinHashArgCaseInsensitive - -導入バージョン: v21.1 - -ASCII文字列を、`shinglesize` 個の単語からなる部分(シングル)に分割し、同じ入力に対して [`wordShingleMinHashCaseInsensitive`](#wordShingleMinHashCaseInsensitive) 関数で計算される、単語ハッシュが最小および最大となるシングルを返します。 -大文字と小文字は区別されません。 - -**構文** - -```sql -wordShingleMinHashArgCaseInsensitive(string[, shinglesize, hashnum]) -``` - -**引数** - -* `string` — ハッシュを計算する対象の文字列。[`String`](/sql-reference/data-types/string) -* `shinglesize` — 省略可能。ワードシングルのサイズ。`1` から `25` までの任意の数値。デフォルト値は `3`。[`UInt8`](/sql-reference/data-types/int-uint) -* `hashnum` — 省略可能。結果の計算に使用される最小ハッシュ値および最大ハッシュ値の個数。`1` から `25` までの任意の数値。デフォルト値は `6`。[`UInt8`](/sql-reference/data-types/int-uint) - -**戻り値** - -`hashnum` 個のワードシングルをそれぞれ含む 2 つのタプルからなるタプルを返します。[`Tuple(Tuple(String))`](/sql-reference/data-types/tuple) - -**例** - -**使用例** - -```sql title=Query -SELECT wordShingleMinHashArgCaseInsensitive('ClickHouse®は、オンライン分析処理(OLAP)のためのカラム指向データベース管理システム(DBMS)です。', 1, 3) AS Tuple; -``` - -```response title=Response -┌─Tuple──────────────────────────────────────────────────────────────────┐ -│ (('queries','database','analytical'),('oriented','processing','DBMS')) │ -└────────────────────────────────────────────────────────────────────────┘ -``` - - -## wordShingleMinHashArgCaseInsensitiveUTF8 - -導入バージョン: v21.1 - -UTF-8 文字列を `shinglesize` 語ずつの部分(シングル)に分割し、同じ入力に対して [`wordShingleMinHashCaseInsensitiveUTF8`](#wordShingleMinHashCaseInsensitiveUTF8) 関数で計算される単語ハッシュの最小値および最大値に対応するシングルを返します。 -大文字小文字は区別されません。 - -**構文** - -```sql -wordShingleMinHashArgCaseInsensitiveUTF8(string[, shinglesize, hashnum]) -``` - -**引数** - -* `string` — ハッシュを計算する対象の文字列。[`String`](/sql-reference/data-types/string) -* `shinglesize` — 省略可。ワードシングル(shingle)のサイズ。`1` から `25` までの任意の数値。デフォルト値は `3`。[`UInt8`](/sql-reference/data-types/int-uint) -* `hashnum` — 省略可。結果の計算に使用される最小および最大ハッシュの個数。`1` から `25` までの任意の数値。デフォルト値は `6`。[`UInt8`](/sql-reference/data-types/int-uint) - -**戻り値** - -それぞれが `hashnum` 個のワードシングルを持つ 2 つのタプルから構成されるタプルを返します。[`Tuple(Tuple(String))`](/sql-reference/data-types/tuple) - -**例** - -**使用例** - -```sql title=Query -SELECT wordShingleMinHashArgCaseInsensitiveUTF8('ClickHouse®は、オンライン分析処理(OLAP)のためのカラム指向データベース管理システム(DBMS)です。', 1, 3) AS Tuple; -``` - -```response title=Response -┌─Tuple──────────────────────────────────────────────────────────────────┐ -│ (('queries','database','analytical'),('oriented','processing','DBMS')) │ -└────────────────────────────────────────────────────────────────────────┘ -``` - - -## wordShingleMinHashArgUTF8 - -導入バージョン: v21.1 - -UTF-8 文字列を `shinglesize` 語ごとの部分(shingle)に分割し、同じ入力に対して [`wordShingleMinHashUTF8`](#wordShingleMinHashUTF8) 関数で計算される、単語ハッシュ値が最小および最大の shingle を返します。 -大文字と小文字は区別されます。 - -**構文** - -```sql -wordShingleMinHashArgUTF8(string[, shinglesize, hashnum]) -``` - -**引数** - -* `string` — ハッシュを計算する対象の文字列。[`String`](/sql-reference/data-types/string) -* `shinglesize` — 省略可。ワードシングル(shingle)のサイズ。`1` から `25` までの任意の値。デフォルト値は `3`。[`UInt8`](/sql-reference/data-types/int-uint) -* `hashnum` — 省略可。結果の計算に使用される最小ハッシュおよび最大ハッシュの個数。`1` から `25` までの任意の値。デフォルト値は `6`。[`UInt8`](/sql-reference/data-types/int-uint) - -**戻り値** - -`hashnum` 個のワードシングルをそれぞれ含む 2 つのタプルから成るタプルを返します。[`Tuple(Tuple(String))`](/sql-reference/data-types/tuple) - -**例** - -**使用例** - -```sql title=Query -SELECT wordShingleMinHashArgUTF8('ClickHouse®は、オンライン分析処理(OLAP)のための列指向データベース管理システム(DBMS)です。', 1, 3) AS Tuple; -``` - -```response title=Response -┌─Tuple─────────────────────────────────────────────────────────────────┐ -│ (('OLAP','database','analytical'),('online','oriented','processing')) │ -└───────────────────────────────────────────────────────────────────────┘ -``` - - -## wordShingleMinHashCaseInsensitive - -導入バージョン: v21.1 - -ASCII 文字列を `shinglesize` 語からなる部分(シングル)に分割し、各ワードシングルのハッシュ値を計算して、そのハッシュを要素とするタプルを返します。 -`hashnum` 個の最小ハッシュを使用して最小ハッシュを計算し、`hashnum` 個の最大ハッシュを使用して最大ハッシュを計算します。 -大文字小文字は区別されません。 - -[`tupleHammingDistance`](../functions/tuple-functions.md#tupleHammingDistance) と組み合わせて、準重複文字列を検出するために利用できます。 -2つの文字列について、返されるハッシュ値が両方の文字列で同じであれば、それらの文字列は同一であると見なせます。 - -**構文** - -```sql -wordShingleMinHashCaseInsensitive(string[, shinglesize, hashnum]) -``` - -**引数** - -* `string` — ハッシュを計算する対象の文字列。[`String`](/sql-reference/data-types/string) -* `shinglesize` — オプション。ワードシングル(shingle)のサイズ。`1` から `25` までの任意の値。デフォルト値は `3`。[`UInt8`](/sql-reference/data-types/int-uint) -* `hashnum` — オプション。結果を計算するために使用される最小ハッシュと最大ハッシュの数。`1` から `25` までの任意の値。デフォルト値は `6`。[`UInt8`](/sql-reference/data-types/int-uint) - -**返される値** - -2 つのハッシュ(最小値と最大値)を要素に持つタプルを返します。[`Tuple(UInt64, UInt64)`](/sql-reference/data-types/tuple) - -**例** - -**使用例** - -```sql title=Query -SELECT wordShingleMinHashCaseInsensitive('ClickHouse® is a column-oriented database management system (DBMS) for online analytical processing of queries (OLAP).') AS Tuple; -``` - -```response title=Response -┌─Tuple─────────────────────────────────────┐ -│ (3065874883688416519,1634050779997673240) │ -└───────────────────────────────────────────┘ -``` - - -## wordShingleMinHashCaseInsensitiveUTF8 - -導入バージョン: v21.1 - -UTF-8 文字列を `shinglesize` 語からなるシングル(shingle)に分割し、各シングルのハッシュ値を計算して、そのハッシュを要素とするタプルを返します。 -最小ハッシュ値を計算するために `hashnum` 個のハッシュを、最大ハッシュ値を計算するために `hashnum` 個のハッシュを使用します。 -大文字小文字は区別しません。 - -[`tupleHammingDistance`](../functions/tuple-functions.md#tupleHammingDistance) を使って、類似した文字列を検出するために使用できます。 -2 つの文字列に対して、返されるハッシュが両方で同じであれば、その文字列は同一であるとみなせます。 - -**構文** - -```sql -wordShingleMinHashCaseInsensitiveUTF8(string[, shinglesize, hashnum]) -``` - -**引数** - -* `string` — ハッシュを計算する対象の文字列。[`String`](/sql-reference/data-types/string) -* `shinglesize` — 省略可。ワードシングル(shingle)のサイズ。`1` から `25` までの任意の整数値。デフォルト値は `3`。[`UInt8`](/sql-reference/data-types/int-uint) -* `hashnum` — 省略可。結果を計算するために使用される最小ハッシュおよび最大ハッシュの個数。`1` から `25` までの任意の整数値。デフォルト値は `6`。[`UInt8`](/sql-reference/data-types/int-uint) - -**戻り値** - -最小値と最大値の 2 つのハッシュを要素とするタプルを返します。[`Tuple(UInt64, UInt64)`](/sql-reference/data-types/tuple) - -**例** - -**使用例** - -```sql title=Query -SELECT wordShingleMinHashCaseInsensitiveUTF8('ClickHouse®は、オンライン分析処理(OLAP)のためのカラム指向データベース管理システム(DBMS)です。') AS Tuple; -``` - -```response title=Response -┌─Tuple─────────────────────────────────────┐ -│ (3065874883688416519,1634050779997673240) │ -└───────────────────────────────────────────┘ -``` - - -## wordShingleMinHashUTF8 - -導入バージョン: v21.1 - -UTF-8 文字列を、`shinglesize` 個の単語から成る部分列(シングル, shingle)に分割し、各単語シングルのハッシュ値を計算して、これらのハッシュを要素とするタプルを返します。 -`hashnum` 個の最小ハッシュを使って最小ハッシュを計算し、`hashnum` 個の最大ハッシュを使って最大ハッシュを計算します。 -大文字と小文字は区別されます。 - -[`tupleHammingDistance`](../functions/tuple-functions.md#tupleHammingDistance) を用いて準重複文字列を検出するために利用できます。 -2 つの文字列に対して、返されるハッシュが両方の文字列で同じであれば、それらの文字列は同一とみなされます。 - -**構文** - -```sql -wordShingleMinHashUTF8(string[, shinglesize, hashnum]) -``` - -**引数** - -* `string` — ハッシュを計算する対象の文字列。[`String`](/sql-reference/data-types/string) -* `shinglesize` — 省略可。単語シングル(shingle)のサイズ。`1` から `25` までの任意の数値。デフォルト値は `3`。[`UInt8`](/sql-reference/data-types/int-uint) -* `hashnum` — 省略可。結果の計算に使用する最小ハッシュと最大ハッシュの数。`1` から `25` までの任意の数値。デフォルト値は `6`。[`UInt8`](/sql-reference/data-types/int-uint) - -**戻り値** - -2 つのハッシュ(最小値と最大値)を含むタプルを返します。[`Tuple(UInt64, UInt64)`](/sql-reference/data-types/tuple) - -**例** - -**使用例** - -```sql title=Query -SELECT wordShingleMinHashUTF8('ClickHouse®は、オンライン分析処理(OLAP)のためのカラム指向データベース管理システム(DBMS)です。') AS Tuple; -``` - -```response title=Response -┌─Tuple──────────────────────────────────────┐ -│ (16452112859864147620,5844417301642981317) │ -└────────────────────────────────────────────┘ -``` - - -## wordShingleSimHash - -導入バージョン: v21.1 - -ASCII 文字列を `shinglesize` 語から成る部分(ワードシングル)に分割し、そのワードシングルの `simhash` を返します。 -大文字と小文字は区別されます。 - -[`bitHammingDistance`](../functions/bit-functions.md/#bitHammingDistance) と組み合わせて、部分的に重複した文字列の検出に使用できます。 -2 つの文字列について計算された `simhashes` の[ハミング距離](https://en.wikipedia.org/wiki/Hamming_distance)が小さいほど、これらの文字列が同一または非常に類似している可能性が高くなります。 - -**構文** - -```sql -wordShingleSimHash(string[, shinglesize]) -``` - -**引数** - -* `string` — ハッシュを計算する対象の文字列。[`String`](/sql-reference/data-types/string) -* `shinglesize` — 省略可。ワードシングル(連続する単語列)のサイズ。`1` から `25` の任意の数値。既定値は `3`。[`UInt8`](/sql-reference/data-types/int-uint) - -**戻り値** - -計算されたハッシュ値を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT wordShingleSimHash('ClickHouse®は、オンライン分析処理(OLAP)のための列指向データベース管理システム(DBMS)です。') AS Hash; -``` - -```response title=Response -┌───────Hash─┐ -│ 2328277067 │ -└────────────┘ -``` - - -## wordShingleSimHashCaseInsensitive - -導入バージョン: v21.1 - -ASCII 文字列を `shinglesize` 語からなる部分文字列(シングル)に分割し、その単語シングルの `simhash` を返します。 -大文字小文字は区別されません。 - -[`bitHammingDistance`](../functions/bit-functions.md/#bitHammingDistance) を用いた、ほぼ重複した文字列の検出に使用できます。 -2 つの文字列について計算された `simhash` 同士の[ハミング距離](https://en.wikipedia.org/wiki/Hamming_distance)が小さいほど、それらの文字列が同一である可能性が高くなります。 - -**構文** - -```sql -wordShingleSimHashCaseInsensitive(string[, shinglesize]) -``` - -**引数** - -* `string` — ハッシュを計算する対象の文字列。[`String`](/sql-reference/data-types/string) -* `shinglesize` — 省略可能。ワードシングル(shingle)のサイズ。`1` から `25` までの任意の数値。デフォルト値は `3`。[`UInt8`](/sql-reference/data-types/int-uint) - -**戻り値** - -計算されたハッシュ値を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT wordShingleSimHashCaseInsensitive('ClickHouse®は、オンライン分析処理(OLAP)クエリのためのカラム指向データベース管理システム(DBMS)です。') AS Hash; -``` - -```response title=Response -┌───────Hash─┐ -│ 2194812424 │ -└────────────┘ -``` - - -## wordShingleSimHashCaseInsensitiveUTF8 - -導入バージョン: v1.1 - -UTF-8 エンコードされた文字列を、`shinglesize` 語から成るシングル(shingle)に分割し、その単語シングルの `simhash` を返します。 -大文字・小文字は区別されません。 - -[`bitHammingDistance`](../functions/bit-functions.md/#bitHammingDistance) を使用して、類似した重複文字列の検出に利用できます。 -2 つの文字列から計算された `simhashes` の [ハミング距離](https://en.wikipedia.org/wiki/Hamming_distance) が小さいほど、それらの文字列が同じである可能性が高くなります。 - -**構文** - -```sql -wordShingleSimHashCaseInsensitiveUTF8(string[, shinglesize]) -``` - -**引数** - -* `string` — ハッシュを計算する対象の文字列。[`String`](/sql-reference/data-types/string) -* `shinglesize` — 省略可能。ワードシングル(shingle)のサイズ。`1` から `25` までの任意の整数。デフォルト値は `3`。[`UInt8`](/sql-reference/data-types/int-uint) - -**返り値** - -計算されたハッシュ値を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT wordShingleSimHashCaseInsensitiveUTF8('ClickHouse®は、オンライン分析処理(OLAP)のためのカラム指向データベース管理システム(DBMS)です。') AS Hash; -``` - -```response title=Response -┌───────Hash─┐ -│ 2194812424 │ -└────────────┘ -``` - - -## wordShingleSimHashUTF8 - -導入バージョン: v21.1 - -UTF-8 文字列を、`shinglesize` 語から成る連続した部分列(シングル、shingle)に分割し、語シングル(word shingle)の `simhash` 値を返します。 -大文字と小文字を区別します。 - -[`bitHammingDistance`](../functions/bit-functions.md/#bitHammingDistance) と組み合わせて、近似重複文字列を検出するために使用できます。 -2 つの文字列について計算された `simhash` 値の[ハミング距離](https://en.wikipedia.org/wiki/Hamming_distance)が小さいほど、それらの文字列が同一である可能性が高くなります。 - -**構文** - -```sql -wordShingleSimHashUTF8(string[, shinglesize]) -``` - -**引数** - -* `string` — ハッシュを計算する対象の文字列。[`String`](/sql-reference/data-types/string) -* `shinglesize` — 省略可能。単語シングル(shingle)のサイズ。`1` から `25` までの任意の数値。デフォルト値は `3`。[`UInt8`](/sql-reference/data-types/int-uint) - -**戻り値** - -計算されたハッシュ値を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT wordShingleSimHashUTF8('ClickHouse®は、オンライン分析処理(OLAP)のための列指向データベース管理システム(DBMS)です。') AS Hash; -``` - -```response title=Response -┌───────Hash─┐ -│ 2328277067 │ -└────────────┘ -``` - - -## wyHash64 - -導入バージョン: v22.7 - -64ビットの [wyHash64](https://github.com/wangyi-fudan/wyhash) ハッシュ値を計算します。 - -**構文** - -```sql -wyHash64(arg) -``` - -**引数** - -* `arg` — ハッシュを計算する対象となる文字列引数。[`String`](/sql-reference/data-types/string) - -**戻り値** - -計算された 64 ビットのハッシュ値を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT wyHash64('ClickHouse') AS Hash; -``` - -```response title=Response -12336419557878201794 -``` - - -## xxHash32 - -導入バージョン: v20.1 - -文字列に対する [xxHash](http://cyan4973.github.io/xxHash/) を計算します。 - -64ビット版については [`xxHash64`](#xxHash64) を参照してください。 - -**構文** - -```sql -xxHash32(arg) -``` - -**引数** - -* `arg` — ハッシュ化する対象の入力文字列。[`String`](/sql-reference/data-types/string) - -**返り値** - -入力文字列の 32 ビットハッシュ値を返します。[`UInt32`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT xxHash32('Hello, world!'); -``` - -```response title=Response -┌─xxHash32('Hello, world!')─┐ -│ 834093149 │ -└───────────────────────────┘ -``` - - -## xxHash64 - -導入: v20.1 - -文字列に対する [xxHash](http://cyan4973.github.io/xxHash/) を計算します。 - -32 ビット版については [`xxHash32`](#xxHash32) を参照してください。 - -**構文** - -```sql -xxHash64(arg) -``` - -**引数** - -* `arg` — ハッシュ化する入力文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -入力文字列に対して計算された 64 ビットのハッシュ値を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT xxHash64('Hello, world!'); -``` - -```response title=Response -┌─xxHash64('Hello, world!')─┐ -│ 17691043854468224118 │ -└───────────────────────────┘ -``` - - -## xxh3 - -導入バージョン: v22.12 - -[XXH3](https://github.com/Cyan4973/xxHash) の 64 ビットハッシュ値を計算します。 - -**構文** - -```sql -xxh3(expr) -``` - -**引数** - -* `expr` — 任意のデータ型の式からなるリスト。[`Any`](/sql-reference/data-types) - -**戻り値** - -計算された64ビットの `xxh3` ハッシュ値を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT xxh3('ClickHouse') -``` - -```response title=Response -18009318874338624809 -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/introspection.md b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/introspection.md index 7897060cdf3..d7f9489ad6f 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/introspection.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/introspection.md @@ -6,271 +6,30 @@ title: 'イントロスペクション関数' doc_type: 'reference' --- - - # イントロスペクション関数 -この章で説明する関数を使用して、クエリプロファイリングのために [ELF](https://en.wikipedia.org/wiki/Executable_and_Linkable_Format) および [DWARF](https://en.wikipedia.org/wiki/DWARF) を調査できます。 +この章で説明する関数を使用すると、クエリプロファイリングのために [ELF](https://en.wikipedia.org/wiki/Executable_and_Linkable_Format) および [DWARF](https://en.wikipedia.org/wiki/DWARF) を解析できます。 :::note -これらの関数は低速であり、セキュリティ上の考慮が必要になる場合があります。 +これらの関数は低速であり、セキュリティ上の考慮事項が生じる可能性があります。 ::: -イントロスペクション関数を正しく動作させるには、次の設定を行います。 +イントロスペクション関数を正しく動作させるには、以下が必要です。 * `clickhouse-common-static-dbg` パッケージをインストールします。 -* [allow_introspection_functions](../../operations/settings/settings.md#allow_introspection_functions) 設定値を 1 にします。 +* [allow_introspection_functions](../../operations/settings/settings.md#allow_introspection_functions) 設定を 1 にします。 セキュリティ上の理由から、イントロスペクション関数はデフォルトで無効になっています。 -ClickHouse はプロファイラーのレポートを [trace_log](/operations/system-tables/trace_log) システムテーブルに保存します。テーブルとプロファイラーが正しく設定されていることを確認してください。 +ClickHouse はプロファイラーレポートを [trace_log](/operations/system-tables/trace_log) システムテーブルに保存します。テーブルとプロファイラーが正しく設定されていることを確認してください。 {/* 以下のタグ内の内容は、ドキュメントフレームワークのビルド時に - system.functions から生成されたドキュメントに置き換えられます。タグを変更または削除しないでください。 - 詳しくは https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md を参照してください。 + system.functions から自動生成されたドキュメントで置き換えられます。これらのタグを変更したり削除したりしないでください。 + 詳細は https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md を参照してください。 */ } - {/*AUTOGENERATED_START*/ } -## demangle - -導入バージョン: v20.1 - -シンボル名を C++ の関数名に変換します。 -このシンボル名は通常、関数 `addressToSymbol` によって返されます。 - -**構文** - -```sql -demangle(symbol) -``` - -**引数** - -* `symbol` — オブジェクトファイル内のシンボル。[`String`](/sql-reference/data-types/string) - -**戻り値** - -C++ 関数名を返します。`symbol` が無効な場合は空文字列を返します。[`String`](/sql-reference/data-types/string) - -**使用例** - -**`trace_log` システムテーブルから最初の文字列を選択する** - -```sql title=Query -SELECT * FROM system.trace_log LIMIT 1 \G; -``` - -```response title=Response --- `trace` フィールドには、サンプリング時点でのスタックトレースが含まれます。 -1 行目: -────── -event_date: 2019-11-20 -event_time: 2019-11-20 16:57:59 -revision: 54429 -timer_type: Real -thread_number: 48 -query_id: 724028bf-f550-45aa-910d-2af6212b94ac -trace: [94138803686098,94138815010911,94138815096522,94138815101224,94138815102091,94138814222988,94138806823642,94138814457211,94138806823642,94138814457211,94138806823642,94138806795179,94138806796144,94138753770094,94138753771646,94138753760572,94138852407232,140399185266395,140399178045583] -``` - -**単一のアドレスに対応する関数名を取得する** - -```sql title=Query -SET allow_introspection_functions=1; -SELECT demangle(addressToSymbol(94138803686098)) \G; -``` - -```response title=Response -行 1: -────── -demangle(addressToSymbol(94138803686098)): DB::IAggregateFunctionHelper > >::addBatchSinglePlace(unsigned long, char*, DB::IColumn const**, DB::Arena*) const -``` - -**関数をスタックトレース全体に適用する** - -```sql title=Query -SET allow_introspection_functions=1; - --- arrayMap関数を使用すると、demangle関数によってtrace配列の各要素を個別に処理できます。 --- この処理結果は、出力のtrace_functions列に表示されます。 - -SELECT - arrayStringConcat(arrayMap(x -> demangle(addressToSymbol(x)), trace), '\n') AS trace_functions -FROM system.trace_log -LIMIT 1 -\G -``` - - -```response title=Response -Row 1: -────── -trace_functions: DB::IAggregateFunctionHelper > >::addBatchSinglePlace(unsigned long, char*, DB::IColumn const**, DB::Arena*) const -DB::Aggregator::executeWithoutKeyImpl(char*&, unsigned long, DB::Aggregator::AggregateFunctionInstruction*, DB::Arena*) const -DB::Aggregator::executeOnBlock(std::vector::immutable_ptr, std::allocator::immutable_ptr > >, unsigned long, DB::AggregatedDataVariants&, std::vector >&, std::vector >, std::allocator > > >&, bool&) -DB::Aggregator::executeOnBlock(DB::Block const&, DB::AggregatedDataVariants&, std::vector >&, std::vector >, std::allocator > > >&, bool&) -DB::Aggregator::execute(std::shared_ptr const&, DB::AggregatedDataVariants&) -DB::AggregatingBlockInputStream::readImpl() -DB::IBlockInputStream::read() -DB::ExpressionBlockInputStream::readImpl() -DB::IBlockInputStream::read() -DB::ExpressionBlockInputStream::readImpl() -DB::IBlockInputStream::read() -DB::AsynchronousBlockInputStream::calculate() -std::_Function_handler::_M_invoke(std::_Any_data const&) -ThreadPoolImpl::worker(std::_List_iterator) -ThreadFromGlobalPool::ThreadFromGlobalPool::scheduleImpl(std::function, int, std::optional)::{lambda()#3}>(ThreadPoolImpl::scheduleImpl(std::function, int, std::optional)::{lambda()#3}&&)::{lambda()#1}::operator()() const -ThreadPoolImpl::worker(std::_List_iterator) -execute_native_thread_routine -start_thread -clone -``` - - -## isMergeTreePartCoveredBy - -導入バージョン: v25.6 - -第1引数で指定したパーツが、第2引数で指定したパーツによってカバーされているかどうかをチェックする関数です。 - -**構文** - -```sql -isMergeTreePartCoveredBy(nested_part, covering_part) -``` - -**引数** - -* `nested_part` — 想定されるネスト側パートの名前。[`String`](/sql-reference/data-types/string) -* `covering_part` — 想定されるカバー側パートの名前。[`String`](/sql-reference/data-types/string) - -**戻り値** - -カバーしている場合は `1`、それ以外の場合は `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**基本例** - -```sql title=Query -WITH 'all_12_25_7_4' AS lhs, 'all_7_100_10_20' AS rhs -SELECT isMergeTreePartCoveredBy(rhs, lhs), isMergeTreePartCoveredBy(lhs, rhs); -``` - -```response title=Response -┌─isMergeTreePartCoveredBy(rhs, lhs)─┬─isMergeTreePartCoveredBy(lhs, rhs)─┐ -│ 0 │ 1 │ -└────────────────────────────────────┴────────────────────────────────────┘ -``` - - -## logTrace - -導入: v20.12 - -各 [Block](/development/architecture/#block) ごとに、サーバーログにトレースログメッセージを出力します。 - -**構文** - -```sql -logTrace(message) -``` - -**引数** - -* `message` — サーバーログに出力されるメッセージ。[`const String`](/sql-reference/data-types/string) - -**戻り値** - -常に `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**基本例** - -```sql title=Query -SELECT logTrace('logTrace message'); -``` - -```response title=Response -┌─logTrace('logTrace message')─┐ -│ 0 │ -└──────────────────────────────┘ -``` - - -## mergeTreePartInfo - -導入バージョン: v25.6 - -`MergeTree` パーツ名から有用な情報を取り出すための関数です。 - -**構文** - -```sql -mergeTreePartInfo(part_name) -``` - -**引数** - -* `part_name` — アンパックするパートの名前。[`String`](/sql-reference/data-types/string) - -**戻り値** - -`partition_id`、`min_block`、`max_block`、`level`、`mutation` というサブカラムを含む `Tuple` を返します。[`Tuple`](/sql-reference/data-types/tuple) - -**例** - -**基本的な例** - -```sql title=Query -WITH mergeTreePartInfo('all_12_25_7_4') AS info -SELECT info.partition_id, info.min_block, info.max_block, info.level, info.mutation; -``` - -```response title=Response -┌─info.partition_id─┬─info.min_block─┬─info.max_block─┬─info.level─┬─info.mutation─┐ -│ all │ 12 │ 25 │ 7 │ 4 │ -└───────────────────┴────────────────┴────────────────┴────────────┴───────────────┘ -``` - - -## tid - -導入バージョン: v20.12 - -現在の [Block](/development/architecture/#block) が処理されているスレッドの ID を返します。 - -**構文** - -```sql -tid() -``` - -**引数** - -* なし。 - -**戻り値** - -現在のスレッド ID を返します。戻り値の型は [`UInt64`](/sql-reference/data-types/int-uint) です。 - -**例** - -**使用例** - -```sql title=Query -SELECT tid(); -``` - -```response title=Response -┌─tid()─┐ -│ 3878 │ -└───────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/ip-address-functions.md b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/ip-address-functions.md index 723ea11508e..1502540eee8 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/ip-address-functions.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/ip-address-functions.md @@ -1,1131 +1,19 @@ --- -description: 'IPv4 および IPv6 アドレスを操作する関数に関するドキュメント' +description: 'IPv4 および IPv6 アドレスを扱う関数のドキュメント。' sidebar_label: 'IP アドレス' slug: /sql-reference/functions/ip-address-functions -title: 'IPv4 および IPv6 アドレスを操作する関数' +title: 'IPv4 および IPv6 アドレスを扱う関数' doc_type: 'reference' --- - - -# IPv4 および IPv6 アドレスを扱うための関数 +# IPv4 および IPv6 アドレスを扱う関数 {/* - 以下のタグの内部の内容は、ドキュメントフレームワークのビルド時に - system.functions から自動生成されたドキュメントで置き換えられます。タグを変更したり削除したりしないでください。 + 以下のタグ内の内容は、ドキュメントフレームワークのビルド時に + system.functions から自動生成されるドキュメントで置き換えられます。タグを変更または削除しないでください。 詳細は https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md を参照してください。 */ } - {/*AUTOGENERATED_START*/ } -## IPv4CIDRToRange - -導入バージョン: v20.1 - -クラスレス ドメイン間ルーティング (CIDR) のプレフィックス長付き IPv4 アドレスを受け取り、そのサブネットのアドレス範囲を、サブネット内の最初と最後のアドレスを表す 2 つの IPv4 値から成るタプルとして返します。 -IPv6 版については [`IPv6CIDRToRange`](#IPv4CIDRToRange) を参照してください。 - -**構文** - -```sql -IPv4CIDRToRange(ipv4, cidr) -``` - -**引数** - -* `ipv4` — IPv4 アドレス。[`IPv4`](/sql-reference/data-types/ipv4) または [`String`](/sql-reference/data-types/string) -* `cidr` — CIDR 値。[`UInt8`](/sql-reference/data-types/int-uint) - -**戻り値** - -サブネット範囲を表す 2 つの IPv4 アドレスからなるタプルを返します。[`Tuple(IPv4, IPv4)`](/sql-reference/data-types/tuple) - -**例** - -**使用例** - -```sql title=Query -SELECT IPv4CIDRToRange(toIPv4('192.168.5.2'), 16); -``` - -```response title=Response -┌─IPv4CIDRToRange(toIPv4('192.168.5.2'), 16)─┐ -│ ('192.168.0.0','192.168.255.255') │ -└────────────────────────────────────────────┘ -``` - - -## IPv4NumToString - -導入バージョン: v1.1 - -32ビット整数を、ドット区切りの10進数表記(A.B.C.D 形式)の IPv4 アドレス文字列表現に変換します。 -入力はビッグエンディアンのバイトオーダーとして解釈されます。 - -**構文** - -```sql -IPv4NumToString(num) -``` - -**別名**: `INET_NTOA` - -**引数** - -* `num` — UInt32 型の数値として表される IPv4 アドレス。[`UInt32`](/sql-reference/data-types/int-uint) - -**戻り値** - -MAC アドレスを表す数値、または形式が無効な場合は `0` を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -IPv4NumToString(3232235521) -``` - -```response title=Response -192.168.0.1 -``` - - -## IPv4NumToStringClassC - -導入バージョン: v1.1 - -32ビット整数を、ドット区切り10進表記(A.B.C.D形式)のIPv4アドレス文字列表現に変換します。 -[`IPv4NumToString`](#IPv4NumToString) と同様ですが、最後のオクテットの代わりに `xxx` を使用します。 - -**構文** - -```sql -IPv4NumToStringClassC(num) -``` - -**引数** - -* `num` — UInt32 値として表される IPv4 アドレス。[`UInt32`](/sql-reference/data-types/int-uint) - -**返される値** - -最後のオクテットを xxx に置き換えた IPv4 アドレスを表す文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**集計を伴う基本的な例** - -```sql title=Query -SELECT - IPv4NumToStringClassC(ClientIP) AS k, - count() AS c -FROM test.hits -GROUP BY k -ORDER BY c DESC -LIMIT 10 -``` - -```response title=Response -┌─k──────────────┬─────c─┐ -│ 83.149.9.xxx │ 26238 │ -│ 217.118.81.xxx │ 26074 │ -│ 213.87.129.xxx │ 25481 │ -│ 83.149.8.xxx │ 24984 │ -│ 217.118.83.xxx │ 22797 │ -│ 78.25.120.xxx │ 22354 │ -│ 213.87.131.xxx │ 21285 │ -│ 78.25.121.xxx │ 20887 │ -│ 188.162.65.xxx │ 19694 │ -│ 83.149.48.xxx │ 17406 │ -└────────────────┴───────┘ -``` - - -## IPv4StringToNum - -導入バージョン: v1.1 - -ドット区切りの 10 進表記(A.B.C.D 形式)の IPv4 アドレス文字列を、対応する 32ビット整数表現に変換します([`IPv4NumToString`](#IPv4NumToString) の逆の処理です)。\ -IPv4 アドレス文字列の形式が無効な場合は、例外がスローされます。 - -**構文** - -```sql -IPv4StringToNum(string) -``` - -**別名**: `INET_ATON` - -**引数** - -* `string` — IPv4 アドレス文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -IPv4 アドレスを返します。[`UInt32`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -IPv4StringToNum('192.168.0.1') -``` - -```response title=Response -3232235521 -``` - - -## IPv4StringToNumOrDefault - -導入: v22.3 - -ドット区切り10進表記(A.B.C.D 形式)の IPv4 アドレス文字列を対応する 32 ビット整数表現に変換します。IPv4 アドレスの形式が不正な場合は `0` を返します。 - -**構文** - -```sql -IPv4StringToNumOrDefault(string) -``` - -**引数** - -* `string` — IPv4 アドレス文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -IPv4 アドレスを返します。無効な場合は `0` を返します。[`UInt32`](/sql-reference/data-types/int-uint) - -**例** - -**無効なアドレスの例** - -```sql title=Query -SELECT - IPv4StringToNumOrDefault('127.0.0.1') AS valid, - IPv4StringToNumOrDefault('invalid') AS invalid; -``` - -```response title=Response -┌──────valid─┬─invalid─┐ -│ 2130706433 │ 0 │ -└────────────┴─────────┘ -``` - - -## IPv4StringToNumOrNull - -導入バージョン: v22.3 - -32ビット整数を IPv4 アドレスの文字列表現(A.B.C.D 形式のドット区切りの 10 進表記)に変換します。ただし、IPv4 アドレスの形式が不正な場合は `NULL` を返します。 - -**構文** - -```sql -IPv4StringToNumOrNull(string) -``` - -**引数** - -* `string` — IPv4 アドレス文字列。[`String`](/sql-reference/data-types/string) - -**返される値** - -IPv4 アドレスを返し、無効な場合は `NULL` を返します。[`Nullable(UInt32)`](/sql-reference/data-types/nullable) - -**例** - -**無効なアドレスの例** - -```sql title=Query -SELECT -IPv4StringToNumOrNull('127.0.0.1') AS valid, -IPv4StringToNumOrNull('invalid') AS invalid; -``` - -```response title=Response -┌──────valid─┬─invalid─┐ -│ 2130706433 │ ᴺᵁᴸᴸ │ -└────────────┴─────────┘ -``` - - -## IPv4ToIPv6 - -導入バージョン: v1.1 - -(ビッグエンディアンの) 32 ビット整数値を IPv4 アドレスとして解釈し、それを対応する IPv6 アドレスの `FixedString(16)` 表現に変換します。 - -**構文** - -```sql -IPv4ToIPv6(x) -``` - -**引数** - -* `x` — IPv4アドレス。[`UInt32` 型](/sql-reference/data-types/int-uint) - -**戻り値** - -バイナリ形式の IPv6アドレスを返します。[`FixedString(16)` 型](/sql-reference/data-types/fixedstring) - -**例** - -**使用例** - -```sql title=Query -SELECT IPv6NumToString(IPv4ToIPv6(IPv4StringToNum('192.168.0.1'))) AS addr; -``` - -```response title=Response -┌─addr───────────────┐ -│ ::ffff:192.168.0.1 │ -└────────────────────┘ -``` - - -## IPv6CIDRToRange - -導入バージョン: v20.1 - -クラスレスドメイン間ルーティング (CIDR) のプレフィックス長付き IPv6 アドレスを受け取り、そのサブネットのアドレス範囲を、最小アドレスと最大アドレスの 2 つの IPv6 値からなるタプルとして返します。 -IPv4 版については [`IPv4CIDRToRange`](#IPv4CIDRToRange) を参照してください。 - -**構文** - -```sql -IPv6CIDRToRange(ipv6, cidr) -``` - -**引数** - -* `ipv6` — IPv6 アドレス。[`IPv6`](/sql-reference/data-types/ipv6) または [`String`](/sql-reference/data-types/string) -* `cidr` — CIDR 値。[`UInt8`](/sql-reference/data-types/int-uint) - -**返される値** - -サブネット範囲を表す 2 つの IPv6 アドレスからなるタプルを返します。[`Tuple(IPv6, IPv6)`](/sql-reference/data-types/tuple) - -**例** - -**使用例** - -```sql title=Query -SELECT IPv6CIDRToRange(toIPv6('2001:0db8:0000:85a3:0000:0000:ac1f:8001'), 32); -``` - -```response title=Response -┌─IPv6CIDRToRange(toIPv6('2001:0db8:0000:85a3:0000:0000:ac1f:8001'), 32)─┐ -│ ('2001:db8::','2001:db8:ffff:ffff:ffff:ffff:ffff:ffff') │ -└────────────────────────────────────────────────────────────────────────┘ -``` - - -## IPv6NumToString - -導入: v1.1 - -IPv6 アドレスをバイナリ形式 (FixedString(16)) から標準的なテキスト表現に変換します。 -IPv4 にマップされた IPv6 アドレスは、`::ffff:111.222.33.44` の形式で表示されます。 - -**構文** - -```sql -IPv6NumToString(x) -``` - -**別名**: `INET6_NTOA` - -**引数** - -* `x` — バイナリ形式の IPv6 アドレス。[`FixedString(16)`](/sql-reference/data-types/fixedstring) または [`IPv6`](/sql-reference/data-types/ipv6) - -**戻り値** - -テキスト形式の IPv6 アドレス文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT IPv6NumToString(toFixedString(unhex('2A0206B8000000000000000000000011'), 16)) AS addr; -``` - -```response title=Response -┌─addr─────────┐ -│ 2a02:6b8::11 │ -└──────────────┘ -``` - -**IPv6 を用いたヒット分析** - -```sql title=Query -SELECT - IPv6NumToString(ClientIP6 AS k), - count() AS c -FROM hits_all -WHERE EventDate = today() AND substring(ClientIP6, 1, 12) != unhex('00000000000000000000FFFF') -GROUP BY k -ORDER BY c DESC -LIMIT 10 -``` - -```response title=Response -┌─IPv6NumToString(ClientIP6)──────────────┬─────c─┐ -│ 2a02:2168:aaa:bbbb::2 │ 24695 │ -│ 2a02:2698:abcd:abcd:abcd:abcd:8888:5555 │ 22408 │ -│ 2a02:6b8:0:fff::ff │ 16389 │ -│ 2a01:4f8:111:6666::2 │ 16016 │ -│ 2a02:2168:888:222::1 │ 15896 │ -│ 2a01:7e00::ffff:ffff:ffff:222 │ 14774 │ -│ 2a02:8109:eee:ee:eeee:eeee:eeee:eeee │ 14443 │ -│ 2a02:810b:8888:888:8888:8888:8888:8888 │ 14345 │ -│ 2a02:6b8:0:444:4444:4444:4444:4444 │ 14279 │ -│ 2a01:7e00::ffff:ffff:ffff:ffff │ 13880 │ -└─────────────────────────────────────────┴───────┘ -``` - -**IPv6 マップド IPv4 アドレス** - -```sql title=Query -SELECT - IPv6NumToString(ClientIP6 AS k), - count() AS c -FROM hits_all -WHERE EventDate = today() -GROUP BY k -ORDER BY c DESC -LIMIT 10 -``` - -```response title=Response -┌─IPv6NumToString(ClientIP6)─┬──────c─┐ -│ ::ffff:94.26.111.111 │ 747440 │ -│ ::ffff:37.143.222.4 │ 529483 │ -│ ::ffff:5.166.111.99 │ 317707 │ -│ ::ffff:46.38.11.77 │ 263086 │ -│ ::ffff:79.105.111.111 │ 186611 │ -│ ::ffff:93.92.111.88 │ 176773 │ -│ ::ffff:84.53.111.33 │ 158709 │ -│ ::ffff:217.118.11.22 │ 154004 │ -│ ::ffff:217.118.11.33 │ 148449 │ -│ ::ffff:217.118.11.44 │ 148243 │ -└────────────────────────────┴────────┘ -``` - - -## IPv6StringToNum - -導入バージョン: v1.1 - -IPv6 アドレスを、その標準テキスト表現からバイナリ形式(`FixedString(16)`)に変換します。 -`::ffff:111.222.33.44.` 形式の IPv4 マップド IPv6 アドレスを受け付けます。 -IPv6 アドレスの形式が不正な場合は、例外がスローされます。 - -入力文字列に有効な IPv4 アドレスが含まれている場合は、対応する IPv6 アドレスを返します。 -16 進数表記は大文字・小文字のいずれでもかまいません。 - -**構文** - -```sql -IPv6StringToNum(string) -``` - -**エイリアス**: `INET6_ATON` - -**引数** - -* `string` — IPv6 アドレス文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -IPv6 アドレスをバイナリ形式で返します。[`FixedString(16)`](/sql-reference/data-types/fixedstring) - -**例** - -**基本例** - -```sql title=Query -SELECT addr, cutIPv6(IPv6StringToNum(addr), 0, 0) FROM (SELECT ['notaddress', '127.0.0.1', '1111::ffff'] AS addr) ARRAY JOIN addr; -``` - -```response title=Response -┌─addr───────┬─cutIPv6(IPv6StringToNum(addr), 0, 0)─┐ -│ notaddress │ :: │ -│ 127.0.0.1 │ ::ffff:127.0.0.1 │ -│ 1111::ffff │ 1111::ffff │ -└────────────┴──────────────────────────────────────┘ -``` - - -## IPv6StringToNumOrDefault - -導入バージョン: v22.3 - -IPv6 アドレスを標準的な文字列表現からバイナリ形式(`FixedString(16)`)に変換します。 -`::ffff:111.222.33.44.` 形式の IPv4 マップド IPv6 アドレスを受け付けます。 -IPv6 アドレスの形式が無効な場合は、デフォルト値の `::` を返します。 - -**構文** - -```sql -IPv6StringToNumOrDefault(string) -``` - -**引数** - -* `string` — IPv6 アドレス文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -バイナリ形式の IPv6 アドレス、または無効な場合はゼロ埋めされた FixedString(16)。[`FixedString(16)`](/sql-reference/data-types/fixedstring) - -**例** - -**無効なアドレスを使用した基本的な例** - -```sql title=Query -SELECT - IPv6NumToString(IPv6StringToNumOrDefault('2001:db8::1')) AS valid, - IPv6NumToString(IPv6StringToNumOrDefault('invalid')) AS invalid; -``` - -```response title=Response -┌─valid───────┬─invalid─┐ -│ 2001:db8::1 │ :: │ -└─────────────┴─────────┘ -``` - - -## IPv6StringToNumOrNull - -導入バージョン: v22.3 - -IPv6 アドレスを標準的なテキスト表現からバイナリ形式(`FixedString(16)`)に変換します。 -`::ffff:111.222.33.44.` 形式の IPv4 マップド IPv6 アドレスを受け付けます。 -IPv6 アドレスの形式が不正な場合は、`NULL` を返します。 - -**構文** - -```sql -IPv6StringToNumOrNull(string) -``` - -**引数** - -* `string` — IPv6 アドレス文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -IPv6 アドレスをバイナリ形式で返し、無効な場合は `NULL` を返します。[`Nullable(FixedString(16))`](/sql-reference/data-types/nullable) - -**例** - -**無効なアドレスを使用した基本的な例** - -```sql title=Query -SELECT - IPv6NumToString(IPv6StringToNumOrNull('2001:db8::1')) AS valid, - IPv6StringToNumOrNull('invalid') AS invalid; -``` - -```response title=Response -┌─valid───────┬─invalid─┐ -│ 2001:db8::1 │ ᴺᵁᴸᴸ │ -└─────────────┴─────────┘ -``` - - -## cutIPv6 - -導入バージョン: v1.1 - -バイナリ形式の IPv6 アドレスを格納した `FixedString(16)` 型の値を受け取ります。 -指定したバイト数を削除したアドレスをテキスト形式で返します。 - -**構文** - -```sql -cutIPv6(x, bytesToCutForIPv6, bytesToCutForIPv4) -``` - -**引数** - -* `x` — バイナリ形式の IPv6 アドレス。[`FixedString(16)`](/sql-reference/data-types/fixedstring) または [`IPv6`](/sql-reference/data-types/ipv6) -* `bytesToCutForIPv6` — IPv6 から削除するバイト数。[`UInt8`](/sql-reference/data-types/int-uint) -* `bytesToCutForIPv4` — IPv4 から削除するバイト数。[`UInt8`](/sql-reference/data-types/int-uint) - -**戻り値** - -指定したバイト数を削除した IPv6 アドレスをテキスト形式で含む文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -WITH - IPv6StringToNum('2001:0DB8:AC10:FE01:FEED:BABE:CAFE:F00D') AS ipv6, - IPv4ToIPv6(IPv4StringToNum('192.168.0.1')) AS ipv4 -SELECT - cutIPv6(ipv6, 2, 0), - cutIPv6(ipv4, 0, 2) -``` - -```response title=Response -┌─cutIPv6(ipv6, 2, 0)─────────────────┬─cutIPv6(ipv4, 0, 2)─┐ -│ 2001:db8:ac10:fe01:feed:babe:cafe:0 │ ::ffff:192.168.0.0 │ -└─────────────────────────────────────┴─────────────────────┘ -``` - - -## isIPAddressInRange - -導入: v21.4 - -IPアドレスが [Classless Inter-Domain Routing (CIDR)](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing) 表記で表されるネットワーク内に含まれているかどうかを判定します。 - -この関数は、文字列として表現された IPv4 および IPv6 のアドレス(およびネットワーク)の両方を受け付けます。アドレスと CIDR の IP バージョンが一致しない場合は `0` を返します。 - -**構文** - -```sql -isIPAddressInRange(address, prefix) -``` - -**引数** - -* `address` — IPv4 または IPv6 アドレス。[`String`](/sql-reference/data-types/string) -* `prefix` — CIDR 表記の IPv4 または IPv6 ネットワークプレフィックス。[`String`](/sql-reference/data-types/string) - -**戻り値** - -アドレスと CIDR の IP バージョンが一致する場合は `1`、それ以外の場合は `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**範囲内の IPv4 アドレス** - -```sql title=Query -SELECT isIPAddressInRange('127.0.0.1', '127.0.0.0/8') -``` - -```response title=Response -1 -``` - -**IPv4 アドレスが有効な範囲内にありません** - -```sql title=Query -SELECT isIPAddressInRange('127.0.0.1', 'ffff::/16') -``` - -```response title=Response -0 -``` - -**IPv6 アドレスが範囲外です** - -```sql title=Query -SELECT isIPAddressInRange('::ffff:192.168.0.1', '::ffff:192.168.0.4/128') -``` - -```response title=Response -0 -``` - - -## isIPv4String - -導入バージョン: v21.1 - -入力文字列が IPv4 アドレスかどうかを判定します。 -IPv6 版については [`isIPv6String`](#isIPv6String) を参照してください。 - -**構文** - -```sql -isIPv4String(string) -``` - -**引数** - -* `string` — 判定対象の IP アドレス文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -`string` が IPv4 アドレスであれば `1`、それ以外の場合は `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT addr, isIPv4String(addr) -FROM( -SELECT ['0.0.0.0', '127.0.0.1', '::ffff:127.0.0.1'] AS addr -) -ARRAY JOIN addr; -``` - -```response title=Response -┌─addr─────────────┬─isIPv4String(addr)─┐ -│ 0.0.0.0 │ 1 │ -│ 127.0.0.1 │ 1 │ -│ ::ffff:127.0.0.1 │ 0 │ -└──────────────────┴────────────────────┘ -``` - - -## isIPv6String - -導入バージョン: v21.1 - -入力文字列が IPv6 アドレスかどうかを判定します。 -IPv4 版については [`isIPv4String`](#isIPv4String) を参照してください。 - -**構文** - -```sql -isIPv6String(string) -``` - -**引数** - -* `string` — チェック対象の IP アドレス文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -`string` が IPv6 アドレスの場合は `1` を、そうでない場合は `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT addr, isIPv6String(addr) -FROM(SELECT ['::', '1111::ffff', '::ffff:127.0.0.1', '127.0.0.1'] AS addr) -ARRAY JOIN addr; -``` - -```response title=Response -┌─addr─────────────┬─isIPv6String(addr)─┐ -│ :: │ 1 │ -│ 1111::ffff │ 1 │ -│ ::ffff:127.0.0.1 │ 1 │ -│ 127.0.0.1 │ 0 │ -└──────────────────┴────────────────────┘ -``` - - -## toIPv4 - -導入バージョン: v20.1 - -IPv4 アドレスの文字列または UInt32 形式を IPv4 型に変換します。 -[`IPv4StringToNum`](/sql-reference/functions/ip-address-functions#IPv4StringToNum) 関数および [`IPv4NumToString`](/sql-reference/functions/ip-address-functions#IPv4NumToString) 関数に類似していますが、入力引数として文字列型と符号なし整数型の両方を受け付けます。 - -**構文** - -```sql -toIPv4(x) -``` - -**引数** - -* `x` — IPv4 アドレスを表す [`String`](/sql-reference/data-types/string) または [`UInt8/16/32`](/sql-reference/data-types/int-uint) - -**戻り値** - -IPv4 アドレス([`IPv4`](/sql-reference/data-types/ipv4))を返します。 - -**例** - -**使用例** - -```sql title=Query -SELECT toIPv4('171.225.130.45'); -``` - -```response title=Response -┌─toIPv4('171.225.130.45')─┐ -│ 171.225.130.45 │ -└──────────────────────────┘ -``` - -**IPv4StringToNum 関数および IPv4NumToString 関数との比較** - -```sql title=Query -WITH - '171.225.130.45' AS IPv4_string -SELECT - hex(IPv4StringToNum(IPv4_string)), - hex(toIPv4(IPv4_string)) -``` - -```response title=Response -┌─hex(IPv4StringToNum(IPv4_string))─┬─hex(toIPv4(IPv4_string))─┐ -│ ABE1822D │ ABE1822D │ -└───────────────────────────────────┴──────────────────────────┘ -``` - -**整数値からの変換** - -```sql title=Query -SELECT toIPv4(2130706433); -``` - -```response title=Response -┌─toIPv4(2130706433)─┐ -│ 127.0.0.1 │ -└────────────────────┘ -``` - - -## toIPv4OrDefault - -導入バージョン: v22.3 - -文字列または UInt32 形式の IPv4 アドレスを [`IPv4`](../data-types/ipv4.md) 型に変換します。 -IPv4 アドレスの形式が無効な場合は、`0.0.0.0`(IPv4 の 0 アドレス)、または指定されたデフォルトの IPv4 を返します。 - -**構文** - -```sql -toIPv4OrDefault(文字列[, デフォルト]) -``` - -**引数** - -* `string` — 変換対象の IP アドレス文字列。[`String`](/sql-reference/data-types/string) -* `default` — 省略可能。`string` が無効な IPv4 アドレスの場合に返す値。[`IPv4`](/sql-reference/data-types/ipv4) - -**戻り値** - -文字列を IPv4 アドレスに変換した値、または変換に失敗した場合はデフォルト値を返します。[`IPv4`](/sql-reference/data-types/ipv4) - -**例** - -**有効および無効な IPv4 文字列** - -```sql title=Query -WITH - '192.168.1.1' AS valid_IPv4_string, - '999.999.999.999' AS invalid_IPv4_string, - 'not_an_ip' AS malformed_string -SELECT - toIPv4OrDefault(valid_IPv4_string) AS valid, - toIPv4OrDefault(invalid_IPv4_string) AS default_value, - toIPv4OrDefault(malformed_string, toIPv4('8.8.8.8')) AS provided_default; -``` - -```response title=Response -┌─有効─────────┬─デフォルト値─┬─指定デフォルト値─┐ -│ 192.168.1.1 │ 0.0.0.0 │ 8.8.8.8 │ -└───────────────┴───────────────┴──────────────────┘ -``` - - -## toIPv4OrNull - -導入バージョン: v22.3 - -入力値を型 `IPv4` の値に変換しますが、エラーが発生した場合は `NULL` を返します。 -[`toIPv4`](#toIPv4) と同様ですが、変換エラー時に例外をスローする代わりに `NULL` を返します。 - -サポートされる引数: - -* ドット区切りの 10 進表記による IPv4 アドレスの文字列表現。 -* IPv4 アドレスの整数表現。 - -サポートされない引数(`NULL` を返します): - -* 無効な IP アドレス形式。 -* IPv6 アドレス。 -* 範囲外の値。 -* 不正な形式のアドレス。 - -**構文** - -```sql -toIPv4OrNull(x) -``` - -**引数** - -* `x` — IPv4 アドレスの文字列または整数による表現。[`String`](/sql-reference/data-types/string) または [`Integer`](/sql-reference/data-types/int-uint) - -**返される値** - -成功時は IPv4 アドレスを返し、それ以外は `NULL` を返します。[`IPv4`](/sql-reference/data-types/ipv4) または [`NULL`](/sql-reference/syntax#null) - -**例** - -**使用例** - -```sql title=Query -SELECT - toIPv4OrNull('192.168.1.1') AS valid_ip, - toIPv4OrNull('invalid.ip') AS invalid_ip -``` - -```response title=Response -┌─valid_ip────┬─invalid_ip─┐ -│ 192.168.1.1 │ ᴺᵁᴸᴸ │ -└─────────────┴────────────┘ -``` - - -## toIPv4OrZero - -導入バージョン: v23.1 - -入力値を [IPv4](../data-types/ipv4.md) 型の値に変換しますが、エラーが発生した場合はゼロ値の IPv4 アドレスを返します。 -[`toIPv4`](#toIPv4) と同様ですが、変換エラー時に例外を送出する代わりに、ゼロ値の IPv4 アドレス (`0.0.0.0`) を返します。 - -サポートされる引数: - -* ドット区切り 10 進数表記の IPv4 アドレス文字列表現。 -* IPv4 アドレスの整数表現。 - -サポートされない引数(ゼロ値の IPv4 アドレスを返す): - -* 無効な IP アドレス形式。 -* IPv6 アドレス。 -* 範囲外の値。 - -**構文** - -```sql -toIPv4OrZero(x) -``` - -**引数** - -* `x` — IPv4 アドレスの文字列または整数による表現。[`String`](/sql-reference/data-types/string) または [`Integer`](/sql-reference/data-types/int-uint) - -**返される値** - -成功した場合は IPv4 アドレスを返し、失敗した場合はゼロの IPv4 アドレス (`0.0.0.0`) を返します。[`IPv4`](/sql-reference/data-types/ipv4) - -**例** - -**使用例** - -```sql title=Query -SELECT - toIPv4OrZero('192.168.1.1') AS valid_ip, - toIPv4OrZero('invalid.ip') AS invalid_ip -``` - -```response title=Response -┌─valid_ip────┬─invalid_ip─┐ -│ 192.168.1.1 │ 0.0.0.0 │ -└─────────────┴────────────┘ -``` - - -## toIPv6 - -導入バージョン: v20.1 - -IPv6 アドレスの文字列または `UInt128` 表現を [`IPv6`](../data-types/ipv6.md) 型に変換します。 -文字列の場合、IPv6 アドレスの形式が無効なときは空の値を返します。 -IPv6 アドレスをバイナリ形式(`FixedString(16)`)に変換したり、その逆を行う [`IPv6StringToNum`](/sql-reference/functions/ip-address-functions#IPv6StringToNum) 関数および [`IPv6NumToString`](/sql-reference/functions/ip-address-functions#IPv6NumToString) 関数と類似しています。 - -入力文字列に有効な IPv4 アドレスが含まれている場合、その IPv4 アドレスに対応する IPv6 アドレスが返されます。 - -**構文** - -```sql -toIPv6(x) -``` - -**引数** - -* `x` — IP アドレス。[`String`](/sql-reference/data-types/string) または [`UInt128`](/sql-reference/data-types/int-uint) - -**戻り値** - -IPv6 アドレスを返します。[`IPv6`](/sql-reference/data-types/ipv6) - -**例** - -**使用例** - -```sql title=Query -WITH '2001:438:ffff::407d:1bc1' AS IPv6_string -SELECT - hex(IPv6StringToNum(IPv6_string)), - hex(toIPv6(IPv6_string)); -``` - -```response title=Response -┌─hex(IPv6StringToNum(IPv6_string))─┬─hex(toIPv6(IPv6_string))─────────┐ -│ 20010438FFFF000000000000407D1BC1 │ 20010438FFFF000000000000407D1BC1 │ -└───────────────────────────────────┴──────────────────────────────────┘ -``` - -**IPv4 から IPv6 へのマッピング** - -```sql title=Query -SELECT toIPv6('127.0.0.1'); -``` - -```response title=Response -┌─toIPv6('127.0.0.1')─┐ -│ ::ffff:127.0.0.1 │ -└─────────────────────┘ -``` - - -## toIPv6OrDefault - -導入: v22.3 - -文字列または IPv6 アドレスの UInt128 形式を [`IPv6`](../data-types/ipv6.md) 型に変換します。 -IPv6 アドレスの形式が不正な場合は、`::` (0 IPv6) または指定されたデフォルトの IPv6 アドレスを返します。 - -**構文** - -```sql -toIPv6OrDefault(string[, default]) -``` - -**引数** - -* `string` — 変換する IP アドレス文字列。 -* `default` — 省略可能。`string` の形式が無効な場合に返す値。 - -**返り値** - -IPv6 アドレスを返します。`string` 引数の形式が無効な場合は `::` を返すか、指定されている場合は `default` の値を返します。[`IPv6`](/sql-reference/data-types/ipv6) - -**例** - -**有効および無効な IPv6 文字列** - -```sql title=Query -WITH - '2001:0db8:85a3:0000:0000:8a2e:0370:7334' AS 有効なIPv6文字列, - '2001:0db8:85a3::8a2e:370g:7334' AS 無効なIPv6文字列, - 'not_an_ipv6' AS 不正な形式の文字列 -SELECT - toIPv6OrDefault(有効なIPv6文字列) AS 有効, - toIPv6OrDefault(無効なIPv6文字列) AS デフォルト値, - toIPv6OrDefault(不正な形式の文字列, toIPv6('::1')) AS 指定デフォルト; -``` - -```response title=Response -┌─有効──────────────────────────────────┬─デフォルト値─┬─指定されたデフォルト値─┐ -│ 2001:db8:85a3::8a2e:370:7334 │ :: │ ::1 │ -└────────────────────────────────────────┴───────────────┴──────────────────┘ -``` - - -## toIPv6OrNull - -導入バージョン: v22.3 - -入力値を `IPv6` 型の値に変換しますが、エラーが発生した場合は `NULL` を返します。 -[`toIPv6`](#toIPv6) と同様ですが、変換エラー時に例外をスローする代わりに `NULL` を返します。 - -サポートされる引数: - -* 標準表記による IPv6 アドレスの文字列表現。 -* IPv4 マップド IPv6 アドレスに変換される、IPv4 アドレスの文字列表現。 -* IPv6 アドレスのバイナリ表現。 - -サポートされていない引数(`NULL` を返す): - -* 無効な IP アドレス形式。 -* 不正な形式の IPv6 アドレス。 -* 範囲外の値。 -* 無効な表記。 - -**構文** - -```sql -toIPv6OrNull(x) -``` - -**引数** - -* `x` — IPv6 または IPv4 アドレスの文字列表現。[`String`](/sql-reference/data-types/string) - -**戻り値** - -成功した場合は IPv6 アドレスを、失敗した場合は `NULL` を返します。[`IPv6`](/sql-reference/data-types/ipv6) または [`NULL`](/sql-reference/syntax#null) - -**例** - -**使用例** - -```sql title=Query -SELECT - toIPv6OrNull('2001:0db8:85a3:0000:0000:8a2e:0370:7334') AS valid_ipv6, - toIPv6OrNull('invalid::ip') AS invalid_ipv6 -``` - -```response title=Response -┌─valid_ipv6──────────────────────────┬─invalid_ipv6─┐ -│ 2001:db8:85a3::8a2e:370:7334 │ ᴺᵁᴸᴸ │ -└─────────────────────────────────────┴──────────────┘ -``` - - -## toIPv6OrZero - -導入バージョン: v23.1 - -入力値を[IPv6](../data-types/ipv6.md)型の値に変換しますが、エラー時にはゼロの IPv6 アドレスを返します。 -[`toIPv6`](#toIPv6) と同様に動作しますが、変換エラー時に例外をスローする代わりにゼロの IPv6 アドレス(`::`)を返します。 - -サポートされる引数: - -* 標準表記による IPv6 アドレスの文字列表現。 -* IPv4 マップド IPv6 アドレスに変換される IPv4 アドレスの文字列表現。 -* IPv6 アドレスのバイナリ表現。 - -サポートされない引数(ゼロの IPv6 アドレスを返す): - -* 無効な IP アドレス形式。 -* 不正形式の IPv6 アドレス。 -* 範囲外の値。 - -**構文** - -```sql -toIPv6OrZero(x) -``` - -**引数** - -* `x` — IPv6 または IPv4 アドレスの文字列表現。[`String`](/sql-reference/data-types/string) - -**戻り値** - -成功した場合は IPv6 アドレスを返し、失敗した場合はゼロの IPv6 アドレス (`::`) を返します。[`IPv6`](/sql-reference/data-types/ipv6) - -**例** - -**使用例** - -```sql title=Query -SELECT - toIPv6OrZero('2001:0db8:85a3:0000:0000:8a2e:0370:7334') AS valid_ipv6, - toIPv6OrZero('invalid::ip') AS invalid_ipv6 -``` - -```response title=Response -┌─valid_ipv6──────────────────────────┬─invalid_ipv6─┐ -│ 2001:db8:85a3::8a2e:370:7334 │ :: │ -└─────────────────────────────────────┴──────────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/json-functions.md b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/json-functions.md index bf765314ba0..87e12d79954 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/json-functions.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/json-functions.md @@ -6,2028 +6,44 @@ title: 'JSON 関数' doc_type: 'reference' --- +## JSON 関数の種類 {#types-of-functions} +JSONをパースする関数には、次の2種類があります。 -## JSON関数の種類 {#types-of-functions} - -JSONを解析するための関数セットは2種類あります: - -- [`simpleJSON*` (`visitParam*`)](#simplejson-visitparam-functions) - 限定されたJSONのサブセットを極めて高速に解析するために作られています。 -- [`JSONExtract*`](#jsonextract-functions) - 通常のJSONを解析するために作られています。 +- [`simpleJSON*` (`visitParam*`)](#simplejson-visitparam-functions) は、制限されたサブセットのJSONを極めて高速にパースするための関数群です。 +- [`JSONExtract*`](#jsonextract-functions) は、一般的なJSONをパースするための関数群です。 ### simpleJSON (visitParam) 関数 {#simplejson-visitparam-functions} -ClickHouseには、簡略化されたJSONを扱うための特殊な関数があります。これらのJSON関数はすべて、JSONがどのような形式であるかについての強い前提に基づいています。可能な限り迅速に処理を完了するために、最小限の処理を行うように設計されています。 +ClickHouseには、簡略化されたJSONを扱うための特別な関数があります。これらのJSON関数はすべて、JSONの形式について強い前提に基づいています。できるだけ少ない処理で、できるだけ高速に処理を完了することを目的としています。 -以下の前提が設けられています: +次の前提があります。 -1. フィールド名(関数の引数)は定数でなければなりません。 -2. フィールド名はJSON内で正規的にエンコードされている必要があります。例: `simpleJSONHas('{"abc":"def"}', 'abc') = 1` ですが、`simpleJSONHas('{"\\u0061\\u0062\\u0063":"def"}', 'abc') = 0` となります。 -3. フィールドは任意のネストレベルで無差別に検索されます。一致するフィールドが複数ある場合は、最初に出現したものが使用されます。 -4. JSONは文字列リテラルの外側に空白文字を含みません。 +1. フィールド名(関数の引数)は定数である必要があります。 +2. フィールド名はJSON内で何らかの正規的な方法でエンコードされている必要があります。例:`simpleJSONHas('{"abc":"def"}', 'abc') = 1` だが、`simpleJSONHas('{"\\u0061\\u0062\\u0063":"def"}', 'abc') = 0` +3. フィールドはネストの深さに関係なく検索されます。複数の一致するフィールドがある場合は、最初に見つかったものが使用されます。 +4. JSONには、文字列リテラルの外側に空白文字が含まれていません。 ### JSONExtract 関数 {#jsonextract-functions} -これらの関数は [simdjson](https://github.com/lemire/simdjson) に基づいており、より複雑なJSON解析要件に対応するように設計されています。 +これらの関数は [simdjson](https://github.com/lemire/simdjson) に基づいており、より複雑なJSONの解析要件に対応するよう設計されています。 -### 大文字小文字を区別しないJSONExtract関数 {#case-insensitive-jsonextract-functions} +### JSONExtract 関数 -これらの関数は、JSONオブジェクトから値を抽出する際にASCII大文字小文字を区別しないキーマッチングを実行します。 -大文字小文字を区別する対応関数と同様に動作しますが、オブジェクトキーは大文字小文字を区別せずにマッチングされます。 -異なる大文字小文字で複数のキーが一致する場合は、最初に一致したものが返されます。 +これらの関数は、JSON オブジェクトから値を抽出する際に、ASCII に基づく大文字小文字を区別しないキー照合を行います。 +大文字小文字を区別する対応関数と同様に動作しますが、オブジェクトのキーの照合時に大文字小文字を考慮しません。 +大文字小文字の違いだけで複数のキーが一致した場合は、最初に一致したものが戻り値になります。 :::note -これらの関数は大文字小文字を区別する対応関数よりもパフォーマンスが低下する可能性があるため、可能であれば通常のJSONExtract関数を使用してください。 +これらの関数は、大文字小文字を区別する対応関数よりもパフォーマンスが低下する可能性があるため、可能であれば通常の JSONExtract 関数を使用してください。 ::: - - - - - -## JSONAllPaths {#JSONAllPaths} - -導入バージョン: v24.8 - -JSON列の各行に格納されているすべてのパスのリストを返します。 - -**構文** - -```sql -JSONAllPaths(json) -``` - -**引数** - -- `json` — JSON列。[`JSON`](/sql-reference/data-types/newjson) - -**戻り値** - -JSON列内のすべてのパスの配列を返します。[`Array(String)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=クエリ -CREATE TABLE test (json JSON(max_dynamic_paths=1)) ENGINE = Memory; -INSERT INTO test FORMAT JSONEachRow {"json" : {"a" : 42}}, {"json" : {"b" : "Hello"}}, {"json" : {"a" : [1, 2, 3], "c" : "2020-01-01"}} -SELECT json, JSONAllPaths(json) FROM test; -``` - -```response title=レスポンス -┌─json─────────────────────────────────┬─JSONAllPaths(json)─┐ -│ {"a":"42"} │ ['a'] │ -│ {"b":"Hello"} │ ['b'] │ -│ {"a":["1","2","3"],"c":"2020-01-01"} │ ['a','c'] │ -└──────────────────────────────────────┴────────────────────┘ -``` - - -## JSONAllPathsWithTypes {#JSONAllPathsWithTypes} - -導入バージョン: v24.8 - -JSON列の各行に格納されているすべてのパスとそのデータ型のリストを返します。 - -**構文** - -```sql -JSONAllPathsWithTypes(json) -``` - -**引数** - -- `json` — JSON列。[`JSON`](/sql-reference/data-types/newjson) - -**戻り値** - -JSON列内のすべてのパスとそのデータ型のマップを返します。[`Map(String, String)`](/sql-reference/data-types/map) - -**例** - -**使用例** - -```sql title=クエリ -CREATE TABLE test (json JSON(max_dynamic_paths=1)) ENGINE = Memory; -INSERT INTO test FORMAT JSONEachRow {"json" : {"a" : 42}}, {"json" : {"b" : "Hello"}}, {"json" : {"a" : [1, 2, 3], "c" : "2020-01-01"}} -SELECT json, JSONAllPathsWithTypes(json) FROM test; -``` - -```response title=レスポンス -┌─json─────────────────────────────────┬─JSONAllPathsWithTypes(json)───────────────┐ -│ {"a":"42"} │ {'a':'Int64'} │ -│ {"b":"Hello"} │ {'b':'String'} │ -│ {"a":["1","2","3"],"c":"2020-01-01"} │ {'a':'Array(Nullable(Int64))','c':'Date'} │ -└──────────────────────────────────────┴───────────────────────────────────────────┘ -``` - - -## JSONArrayLength {#JSONArrayLength} - -導入バージョン: v23.2 - -最も外側のJSON配列の要素数を返します。 -入力されたJSON文字列が無効な場合、この関数は`NULL`を返します。 - -**構文** - -```sql -JSONArrayLength(json) -``` - -**エイリアス**: `JSON_ARRAY_LENGTH` - -**引数** - -- `json` — 有効なJSON文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -`json`が有効なJSON配列文字列の場合は配列要素数を返し、それ以外の場合は`NULL`を返します。[`Nullable(UInt64)`](/sql-reference/data-types/nullable) - -**例** - -**使用例** - -```sql title=クエリ -SELECT - JSONArrayLength(''), - JSONArrayLength('[1,2,3]'); -``` - -```response title=レスポンス -┌─JSONArrayLength('')─┬─JSONArrayLength('[1,2,3]')─┐ -│ ᴺᵁᴸᴸ │ 3 │ -└─────────────────────┴────────────────────────────┘ -``` - - -## JSONDynamicPaths {#JSONDynamicPaths} - -導入バージョン: v24.8 - -JSON列内で個別のサブカラムとして格納されている動的パスのリストを返します。 - -**構文** - -```sql -JSONDynamicPaths(json) -``` - -**引数** - -- `json` — JSON列。[`JSON`](/sql-reference/data-types/newjson) - -**戻り値** - -JSON列内の動的パスの配列を返します。[`Array(String)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=クエリ -CREATE TABLE test (json JSON(max_dynamic_paths=1)) ENGINE = Memory; -INSERT INTO test FORMAT JSONEachRow {"json" : {"a" : 42}}, {"json" : {"b" : "Hello"}}, {"json" : {"a" : [1, 2, 3], "c" : "2020-01-01"}} -SELECT json, JSONDynamicPaths(json) FROM test; -``` - -```response title=レスポンス -┌─json─────────────────────────────────┬─JSONDynamicPaths(json)─┐ -│ {"a":"42"} │ ['a'] │ -│ {"b":"Hello"} │ [] │ -│ {"a":["1","2","3"],"c":"2020-01-01"} │ ['a'] │ -└──────────────────────────────────────┴────────────────────────┘ -``` - - -## JSONDynamicPathsWithTypes {#JSONDynamicPathsWithTypes} - -導入バージョン: v24.8 - -JSON列の各行において、個別のサブカラムとして格納されている動的パスとその型のリストを返します。 - -**構文** - -```sql -JSONDynamicPathsWithTypes(json) -``` - -**引数** - -- `json` — JSON列。[`JSON`](/sql-reference/data-types/newjson) - -**戻り値** - -JSON列内の動的パスとそのデータ型のマップを返します。[`Map(String, String)`](/sql-reference/data-types/map) - -**例** - -**使用例** - -```sql title=Query -CREATE TABLE test (json JSON(max_dynamic_paths=1)) ENGINE = Memory; -INSERT INTO test FORMAT JSONEachRow {"json" : {"a" : 42}}, {"json" : {"b" : "Hello"}}, {"json" : {"a" : [1, 2, 3], "c" : "2020-01-01"}} -SELECT json, JSONDynamicPathsWithTypes(json) FROM test; -``` - -```response title=Response -┌─json─────────────────────────────────┬─JSONDynamicPathsWithTypes(json)─┐ -│ {"a":"42"} │ {'a':'Int64'} │ -│ {"b":"Hello"} │ {} │ -│ {"a":["1","2","3"],"c":"2020-01-01"} │ {'a':'Array(Nullable(Int64))'} │ -└──────────────────────────────────────┴─────────────────────────────────┘ -``` - - -## JSONExtract {#JSONExtract} - -導入バージョン: v19.14 - -JSONを解析し、指定されたClickHouseデータ型で値を抽出します。 - -**構文** - -```sql -JSONExtract(json, return_type[, indices_or_keys, ...]) -``` - -**引数** - -- `json` — 解析するJSON文字列。[`String`](/sql-reference/data-types/string) -- `return_type` — 返されるClickHouseデータ型。[`String`](/sql-reference/data-types/string) -- `indices_or_keys` — 文字列または整数を指定できる0個以上の引数のリスト。[`String`](/sql-reference/data-types/string)または[`(U)Int*`](/sql-reference/data-types/int-uint) - -**戻り値** - -可能であれば指定されたClickHouseデータ型の値を返し、それ以外の場合はその型のデフォルト値を返します。 - -**例** - -**使用例** - -```sql title=クエリ -SELECT JSONExtract('{"a": "hello", "b": [-100, 200.0, 300]}', 'Tuple(String, Array(Float64))') AS res; -``` - -```response title=レスポンス -┌─res──────────────────────────────┐ -│ ('hello',[-100,200,300]) │ -└──────────────────────────────────┘ -``` - - -## JSONExtractArrayRaw {#JSONExtractArrayRaw} - -導入バージョン: v20.1 - -JSON配列の要素を含む配列を返します。各要素は未解析の文字列として表現されます。 - -**構文** - -```sql -JSONExtractArrayRaw(json[, indices_or_keys, ...]) -``` - -**引数** - -- `json` — 解析するJSON文字列。[`String`](/sql-reference/data-types/string) -- `indices_or_keys` — 文字列または整数を指定できる0個以上の引数のリスト。[`String`](/sql-reference/data-types/string)または[`(U)Int*`](/sql-reference/data-types/int-uint) - -**戻り値** - -JSON配列要素を含む文字列の配列を返します。該当部分が配列でない場合、または存在しない場合は、空の配列が返されます。[`Array(String)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=クエリ -SELECT JSONExtractArrayRaw('{"a": "hello", "b": [-100, 200.0, "hello"]}', 'b') AS res; -``` - -```response title=レスポンス -┌─res──────────────────────────┐ -│ ['-100','200.0','"hello"'] │ -└──────────────────────────────┘ -``` - - -## JSONExtractArrayRawCaseInsensitive {#JSONExtractArrayRawCaseInsensitive} - -導入バージョン: v25.8 - -大文字小文字を区別しないキーマッチングを使用して、JSON配列の各要素を未解析の文字列として表現した配列を返します。この関数は[`JSONExtractArrayRaw`](#JSONExtractArrayRaw)と類似しています。 - -**構文** - -```sql -JSONExtractArrayRawCaseInsensitive(json [, indices_or_keys]...) -``` - -**引数** - -- `json` — 解析するJSON文字列 [`String`](/sql-reference/data-types/string) -- `indices_or_keys` — オプション。配列へナビゲートするためのインデックスまたはキー。キーは大文字小文字を区別しないマッチングを使用します [`String`](/sql-reference/data-types/string) または [`(U)Int*`](/sql-reference/data-types/int-uint) - -**返り値** - -未加工のJSON文字列の配列を返します。[`Array(String)`](/sql-reference/data-types/array) - -**例** - -**基本** - -```sql title=Query -SELECT JSONExtractArrayRawCaseInsensitive('{"Items": [1, 2, 3]}', 'ITEMS') -``` - -```response title=Response -['1','2','3'] -``` - - -## JSONExtractBool {#JSONExtractBool} - -導入バージョン: v20.1 - -JSONを解析し、Bool型の値を抽出します。 - -**構文** - -```sql -JSONExtractBool(json[, indices_or_keys, ...]) -``` - -**引数** - -- `json` — 解析対象のJSON文字列。[`String`](/sql-reference/data-types/string) -- `indices_or_keys` — 文字列または整数を指定できる0個以上の引数のリスト。[`String`](/sql-reference/data-types/string)または[`(U)Int*`](/sql-reference/data-types/int-uint) - -**戻り値** - -Bool値が存在する場合はその値を返し、存在しない場合は`0`を返します。[`Bool`](/sql-reference/data-types/boolean) - -**例** - -**使用例** - -```sql title=Query -SELECT JSONExtractBool('{"passed": true}', 'passed') AS res; -``` - -```response title=Response -┌─res─┐ -│ 1 │ -└─────┘ -``` - - -## JSONExtractBoolCaseInsensitive {#JSONExtractBoolCaseInsensitive} - -導入バージョン: v25.8 - -JSONを解析し、大文字小文字を区別しないキーマッチングを使用してブール値を抽出します。この関数は[`JSONExtractBool`](#JSONExtractBool)と同様の機能を持ちます。 - -**構文** - -```sql -JSONExtractBoolCaseInsensitive(json [, indices_or_keys]...) -``` - -**引数** - -- `json` — 解析対象のJSON文字列 [`String`](/sql-reference/data-types/string) -- `indices_or_keys` — オプション。対象フィールドへ移動するためのインデックスまたはキー。キーは大文字小文字を区別しないマッチングを使用します [`String`](/sql-reference/data-types/string) または [`(U)Int*`](/sql-reference/data-types/int-uint) - -**戻り値** - -抽出されたブール値を返します(trueの場合は1、falseの場合は0)。見つからない場合は0を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**基本** - -```sql title=クエリ -SELECT JSONExtractBoolCaseInsensitive('{"IsActive": true}', 'isactive') -``` - -```response title=レスポンス -1 -``` - - -## JSONExtractCaseInsensitive {#JSONExtractCaseInsensitive} - -導入バージョン: v25.8 - -JSONを解析し、大文字小文字を区別しないキーマッチングを使用して、指定されたClickHouseデータ型の値を抽出します。この関数は[`JSONExtract`](#JSONExtract)と類似しています。 - -**構文** - -```sql -JSONExtractCaseInsensitive(json [, indices_or_keys...], return_type) -``` - -**引数** - -- `json` — 解析対象のJSON文字列 [`String`](/sql-reference/data-types/string) -- `indices_or_keys` — オプション。フィールドへナビゲートするためのインデックスまたはキー。キーは大文字小文字を区別しないマッチングを使用します [`String`](/sql-reference/data-types/string) または [`(U)Int*`](/sql-reference/data-types/int-uint) -- `return_type` — 抽出するClickHouseデータ型 [`String`](/sql-reference/data-types/string) - -**戻り値** - -指定されたデータ型で抽出された値を返します。[`Any`](/sql-reference/data-types) - -**例** - -**int_type** - -```sql title=Query -SELECT JSONExtractCaseInsensitive('{"Number": 123}', 'number', 'Int32') -``` - -```response title=Response -123 -``` - -**array_type** - -```sql title=Query -SELECT JSONExtractCaseInsensitive('{"List": [1, 2, 3]}', 'list', 'Array(Int32)') -``` - -```response title=Response -[1,2,3] -``` - - -## JSONExtractFloat {#JSONExtractFloat} - -導入バージョン: v20.1 - -JSONを解析し、Float型の値を抽出します。 - -**構文** - -```sql -JSONExtractFloat(json[, indices_or_keys, ...]) -``` - -**引数** - -- `json` — 解析するJSON文字列。[`String`](/sql-reference/data-types/string) -- `indices_or_keys` — 文字列または整数を指定できる0個以上の引数のリスト。[`String`](/sql-reference/data-types/string)または[`(U)Int*`](/sql-reference/data-types/int-uint) - -**戻り値** - -値が存在する場合はFloat値を返し、存在しない場合は`0`を返します。[`Float64`](/sql-reference/data-types/float) - -**例** - -**使用例** - -```sql title=Query -SELECT JSONExtractFloat('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', 2) AS res; -``` - -```response title=Response -┌─res─┐ -│ 200 │ -└─────┘ -``` - - -## JSONExtractFloatCaseInsensitive {#JSONExtractFloatCaseInsensitive} - -導入バージョン: v25.8 - -JSONを解析し、大文字小文字を区別しないキーマッチングを使用してFloat型の値を抽出します。この関数は[`JSONExtractFloat`](#JSONExtractFloat)と同様の機能を持ちます。 - -**構文** - -```sql -JSONExtractFloatCaseInsensitive(json [, indices_or_keys]...) -``` - -**引数** - -- `json` — 解析対象のJSON文字列 [`String`](/sql-reference/data-types/string) -- `indices_or_keys` — オプション。対象フィールドへナビゲートするためのインデックスまたはキー。キーは大文字小文字を区別しないマッチングを使用します [`String`](/sql-reference/data-types/string) または [`(U)Int*`](/sql-reference/data-types/int-uint) - -**戻り値** - -抽出されたFloat値を返します。値が見つからない場合または変換できない場合は0を返します。[`Float64`](/sql-reference/data-types/float) - -**例** - -**基本的な使用例** - -```sql title=クエリ -SELECT JSONExtractFloatCaseInsensitive('{"Price": 12.34}', 'PRICE') -``` - -```response title=レスポンス -12.34 -``` - - -## JSONExtractInt {#JSONExtractInt} - -導入バージョン: v20.1 - -JSONを解析し、Int型の値を抽出します。 - -**構文** - -```sql -JSONExtractInt(json[, indices_or_keys, ...]) -``` - -**引数** - -- `json` — 解析するJSON文字列。[`String`](/sql-reference/data-types/string) -- `indices_or_keys` — 文字列または整数を指定できる0個以上の引数のリスト。[`String`](/sql-reference/data-types/string)または[`(U)Int*`](/sql-reference/data-types/int-uint) - -**戻り値** - -値が存在する場合はInt値を返し、存在しない場合は`0`を返します。[`Int64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=クエリ -SELECT JSONExtractInt('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', 1) AS res; -``` - -```response title=レスポンス -┌─res─┐ -│ 200 │ -└─────┘ -``` - - -## JSONExtractIntCaseInsensitive {#JSONExtractIntCaseInsensitive} - -導入バージョン: v25.8 - -JSONを解析し、大文字小文字を区別しないキーマッチングを使用してInt型の値を抽出します。この関数は[`JSONExtractInt`](#JSONExtractInt)と同様です。 - -**構文** - -```sql -JSONExtractIntCaseInsensitive(json [, indices_or_keys]...) -``` - -**引数** - -- `json` — 解析するJSON文字列 [`String`](/sql-reference/data-types/string) -- `indices_or_keys` — オプション。フィールドへナビゲートするためのインデックスまたはキー。キーは大文字小文字を区別しないマッチングを使用します [`String`](/sql-reference/data-types/string) または [`(U)Int*`](/sql-reference/data-types/int-uint) - -**返り値** - -抽出されたInt値を返します。見つからない場合または変換できない場合は0を返します。[`Int64`](/sql-reference/data-types/int-uint) - -**例** - -**基本** - -```sql title=クエリ -SELECT JSONExtractIntCaseInsensitive('{"Value": 123}', 'value') -``` - -```response title=レスポンス -123 -``` - -**ネスト** - -```sql title=クエリ -SELECT JSONExtractIntCaseInsensitive('{"DATA": {"COUNT": 42}}', 'data', 'Count') -``` - -```response title=レスポンス -42 -``` - - -## JSONExtractKeys {#JSONExtractKeys} - -導入バージョン: v21.11 - -JSON文字列を解析してキーを抽出します。 - -**構文** - -```sql -JSONExtractKeys(json[, indices_or_keys, ...]) -``` - -**引数** - -- `json` — 解析するJSON文字列。[`String`](/sql-reference/data-types/string) -- `indices_or_keys` — 文字列または整数を指定できる0個以上の引数のリスト。[`String`](/sql-reference/data-types/string)または[`(U)Int*`](/sql-reference/data-types/int-uint) - -**戻り値** - -JSONオブジェクトのキーを含む配列を返します。[`Array(String)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=クエリ -SELECT JSONExtractKeys('{"a": "hello", "b": [-100, 200.0, 300]}') AS res; -``` - -```response title=レスポンス -┌─res─────────┐ -│ ['a','b'] │ -└─────────────┘ -``` - - -## JSONExtractKeysAndValues {#JSONExtractKeysAndValues} - -導入バージョン: v20.1 - -指定されたClickHouseデータ型の値を持つJSONからキーと値のペアを解析します。 - -**構文** - -```sql -JSONExtractKeysAndValues(json, value_type[, indices_or_keys, ...]) -``` - -**引数** - -- `json` — 解析するJSON文字列。[`String`](/sql-reference/data-types/string) -- `value_type` — 値のClickHouseデータ型。[`String`](/sql-reference/data-types/string) -- `indices_or_keys` — 文字列または整数のいずれかを指定できる0個以上の引数のリスト。[`String`](/sql-reference/data-types/string)または[`(U)Int*`](/sql-reference/data-types/int-uint) - -**戻り値** - -解析されたキーと値のペアを含むタプルの配列を返します。[`Array(Tuple(String, value_type))`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=クエリ -SELECT JSONExtractKeysAndValues('{"x": {"a": 5, "b": 7, "c": 11}}', 'Int8', 'x') AS res; -``` - -```response title=レスポンス -┌─res────────────────────┐ -│ [('a',5),('b',7),('c',11)] │ -└────────────────────────┘ -``` - - -## JSONExtractKeysAndValuesCaseInsensitive {#JSONExtractKeysAndValuesCaseInsensitive} - -導入バージョン: v25.8 - -大文字小文字を区別せずにキーをマッチングし、JSONからキーと値のペアを解析します。この関数は[`JSONExtractKeysAndValues`](#JSONExtractKeysAndValues)と類似しています。 - -**構文** - -```sql -JSONExtractKeysAndValuesCaseInsensitive(json [, indices_or_keys...], value_type) -``` - -**引数** - -- `json` — 解析対象のJSON文字列 [`String`](/sql-reference/data-types/string) -- `indices_or_keys` — オプション。オブジェクトへ移動するためのインデックスまたはキー。キーは大文字小文字を区別せずにマッチングされます [`String`](/sql-reference/data-types/string) または [`(U)Int*`](/sql-reference/data-types/int-uint) -- `value_type` — 値のClickHouseデータ型 [`String`](/sql-reference/data-types/string) - -**戻り値** - -キーと値のペアを含むタプルの配列を返します。[`Array(Tuple(String, T))`](/sql-reference/data-types/array) - -**例** - -**基本** - -```sql title=Query -SELECT JSONExtractKeysAndValuesCaseInsensitive('{"Name": "Alice", "AGE": 30}', 'String') -``` - -```response title=Response -[('Name','Alice'),('AGE','30')] -``` - - -## JSONExtractKeysAndValuesRaw {#JSONExtractKeysAndValuesRaw} - -導入バージョン: v20.4 - -JSONオブジェクトからキーと値のタプルの配列を返します。すべての値は未解析の文字列として表現されます。 - -**構文** - -```sql -JSONExtractKeysAndValuesRaw(json[, indices_or_keys, ...]) -``` - -**引数** - -- `json` — 解析するJSON文字列。[`String`](/sql-reference/data-types/string) -- `indices_or_keys` — 文字列または整数のいずれかを指定できる0個以上の引数のリスト。[`String`](/sql-reference/data-types/string) または [`(U)Int*`](/sql-reference/data-types/int-uint) - -**戻り値** - -キーと値のペアを含むタプルの配列を返します。値は未解析の文字列です。[`Array(Tuple(String, String))`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=クエリ -SELECT JSONExtractKeysAndValuesRaw('{"a": [-100, 200.0], "b": "hello"}') AS res; -``` - -```response title=レスポンス -┌─res──────────────────────────────────┐ -│ [('a','[-100,200.0]'),('b','"hello"')] │ -└──────────────────────────────────────┘ -``` - - -## JSONExtractKeysAndValuesRawCaseInsensitive {#JSONExtractKeysAndValuesRawCaseInsensitive} - -導入バージョン: v25.8 - -大文字小文字を区別しないキーマッチングを使用して、JSONから生のキーと値のペアを抽出します。この関数は[`JSONExtractKeysAndValuesRaw`](#JSONExtractKeysAndValuesRaw)と類似しています。 - -**構文** - -```sql -JSONExtractKeysAndValuesRawCaseInsensitive(json [, indices_or_keys]...) -``` - -**引数** - -- `json` — パースするJSON文字列 [`String`](/sql-reference/data-types/string) -- `indices_or_keys` — オプション。オブジェクトへ移動するためのインデックスまたはキー。キーは大文字小文字を区別しないマッチングを使用します [`String`](/sql-reference/data-types/string) または [`(U)Int*`](/sql-reference/data-types/int-uint) - -**返り値** - -生の文字列としてキーと値のペアを含むタプルの配列を返します。[`Array(Tuple(String, String))`](/sql-reference/data-types/array) - -**例** - -**基本** - -```sql title=クエリ -SELECT JSONExtractKeysAndValuesRawCaseInsensitive('{"Name": "Alice", "AGE": 30}') -``` - -```response title=レスポンス -[('Name','"Alice"'),('AGE','30')] -``` - - -## JSONExtractKeysCaseInsensitive {#JSONExtractKeysCaseInsensitive} - -導入バージョン: v25.8 - -JSON文字列を解析し、大文字小文字を区別しないキーマッチングを使用してネストされたオブジェクトに移動し、キーを抽出します。この関数は[`JSONExtractKeys`](#JSONExtractKeys)と類似しています。 - -**構文** - -```sql -JSONExtractKeysCaseInsensitive(json [, indices_or_keys]...) -``` - -**引数** - -- `json` — 解析するJSON文字列 [`String`](/sql-reference/data-types/string) -- `indices_or_keys` — オプション。オブジェクトに移動するためのインデックスまたはキー。キーは大文字小文字を区別しないマッチングを使用します [`String`](/sql-reference/data-types/string) または [`(U)Int*`](/sql-reference/data-types/int-uint) - -**戻り値** - -JSONオブジェクトからキーの配列を返します。[`Array(String)`](/sql-reference/data-types/array) - -**例** - -**基本** - -```sql title=Query -SELECT JSONExtractKeysCaseInsensitive('{"Name": "Alice", "AGE": 30}') -``` - -```response title=Response -['Name','AGE'] -``` - -**ネスト** - -```sql title=Query -SELECT JSONExtractKeysCaseInsensitive('{"User": {"name": "John", "AGE": 25}}', 'user') -``` - -```response title=Response -['name','AGE'] -``` - - -## JSONExtractRaw {#JSONExtractRaw} - -導入バージョン: v20.1 - -JSONの一部を未解析の文字列として返します。 - -**構文** - -```sql -JSONExtractRaw(json[, indices_or_keys, ...]) -``` - -**引数** - -- `json` — 解析対象のJSON文字列。[`String`](/sql-reference/data-types/string) -- `indices_or_keys` — 文字列または整数を指定できる0個以上の引数のリスト。[`String`](/sql-reference/data-types/string)または[`(U)Int*`](/sql-reference/data-types/int-uint) - -**戻り値** - -JSONの一部を未解析の文字列として返します。該当する部分が存在しない場合、または型が正しくない場合は、空の文字列が返されます。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=クエリ -SELECT JSONExtractRaw('{"a": "hello", "b": [-100, 200.0, 300]}', 'b') AS res; -``` - -```response title=レスポンス -┌─res──────────────┐ -│ [-100,200.0,300] │ -└──────────────────┘ -``` - - -## JSONExtractRawCaseInsensitive {#JSONExtractRawCaseInsensitive} - -導入バージョン: v25.8 - -大文字小文字を区別しないキーマッチングを使用して、JSONの一部を未解析の文字列として返します。この関数は[`JSONExtractRaw`](#JSONExtractRaw)と同様です。 - -**構文** - -```sql -JSONExtractRawCaseInsensitive(json [, indices_or_keys]...) -``` - -**引数** - -- `json` — 解析するJSON文字列 [`String`](/sql-reference/data-types/string) -- `indices_or_keys` — オプション。フィールドへナビゲートするためのインデックスまたはキー。キーは大文字小文字を区別しないマッチングを使用します [`String`](/sql-reference/data-types/string) または [`(U)Int*`](/sql-reference/data-types/int-uint) - -**戻り値** - -抽出された要素の生のJSON文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**オブジェクト** - -```sql title=Query -SELECT JSONExtractRawCaseInsensitive('{"Object": {"key": "value"}}', 'OBJECT') -``` - -```response title=Response -{"key":"value"} -``` - - -## JSONExtractString {#JSONExtractString} - -導入バージョン: v20.1 - -JSONを解析し、String型の値を抽出します。 - -**構文** - -```sql -JSONExtractString(json[, indices_or_keys, ...]) -``` - -**引数** - -- `json` — 解析対象のJSON文字列。[`String`](/sql-reference/data-types/string) -- `indices_or_keys` — 文字列または整数を指定できる0個以上の引数のリスト。[`String`](/sql-reference/data-types/string) または [`(U)Int*`](/sql-reference/data-types/int-uint) - -**戻り値** - -値が存在する場合はString値を返し、存在しない場合は空文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=クエリ -SELECT JSONExtractString('{"a": "hello", "b": [-100, 200.0, 300]}', 'a') AS res; -``` - -```response title=レスポンス -┌─res───┐ -│ hello │ -└───────┘ -``` - - -## JSONExtractStringCaseInsensitive {#JSONExtractStringCaseInsensitive} - -導入バージョン: v25.8 - -JSONを解析し、大文字小文字を区別しないキーマッチングを使用して文字列を抽出します。この関数は[`JSONExtractString`](#JSONExtractString)と同様です。 - -**構文** - -```sql -JSONExtractStringCaseInsensitive(json [, indices_or_keys]...) -``` - -**引数** - -- `json` — 解析するJSON文字列 [`String`](/sql-reference/data-types/string) -- `indices_or_keys` — オプション。フィールドへナビゲートするためのインデックスまたはキー。キーは大文字小文字を区別しないマッチングを使用します [`String`](/sql-reference/data-types/string) または [`(U)Int*`](/sql-reference/data-types/int-uint) - -**戻り値** - -抽出された文字列値を返します。見つからない場合は空文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**基本** - -```sql title=クエリ -SELECT JSONExtractStringCaseInsensitive('{"ABC": "def"}', 'abc') -``` - -```response title=レスポンス -def -``` - -**ネスト構造** - -```sql title=クエリ -SELECT JSONExtractStringCaseInsensitive('{"User": {"Name": "John"}}', 'user', 'name') -``` - -```response title=レスポンス -John -``` - - -## JSONExtractUInt {#JSONExtractUInt} - -導入バージョン: v20.1 - -JSONを解析し、UInt型の値を抽出します。 - -**構文** - -```sql -JSONExtractUInt(json [, indices_or_keys, ...]) -``` - -**引数** - -- `json` — 解析するJSON文字列。[`String`](/sql-reference/data-types/string) -- `indices_or_keys` — 文字列または整数を指定できる0個以上の引数のリスト。[`String`](/sql-reference/data-types/string)または[`(U)Int*`](/sql-reference/data-types/int-uint) - -**戻り値** - -値が存在する場合はUInt値を返し、存在しない場合は`0`を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=クエリ -SELECT JSONExtractUInt('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', -1) AS res; -``` - -```response title=レスポンス -┌─res─┐ -│ 300 │ -└─────┘ -``` - - -## JSONExtractUIntCaseInsensitive {#JSONExtractUIntCaseInsensitive} - -導入バージョン: v25.8 - -JSONを解析し、大文字小文字を区別しないキーマッチングを使用してUInt型の値を抽出します。この関数は[`JSONExtractUInt`](#JSONExtractUInt)と同様です。 - -**構文** - -```sql -JSONExtractUIntCaseInsensitive(json [, indices_or_keys]...) -``` - -**引数** - -- `json` — 解析するJSON文字列 [`String`](/sql-reference/data-types/string) -- `indices_or_keys` — オプション。フィールドへナビゲートするためのインデックスまたはキー。キーは大文字小文字を区別しないマッチングを使用します [`String`](/sql-reference/data-types/string) または [`(U)Int*`](/sql-reference/data-types/int-uint) - -**戻り値** - -抽出されたUInt値を返します。見つからない場合または変換できない場合は0を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**基本** - -```sql title=クエリ -SELECT JSONExtractUIntCaseInsensitive('{"COUNT": 789}', 'count') -``` - -```response title=レスポンス -789 -``` - - -## JSONHas {#JSONHas} - -導入バージョン: v20.1 - -JSONドキュメント内に指定された値が存在するかどうかを確認します。 - -**構文** - -```sql -JSONHas(json[ ,indices_or_keys, ...]) -``` - -**引数** - -- `json` — パースするJSON文字列 [`String`](/sql-reference/data-types/string) -- `[ ,indices_or_keys, ...]` — 0個以上の引数のリスト [`String`](/sql-reference/data-types/string) または [`(U)Int*`](/sql-reference/data-types/int-uint) - -**戻り値** - -`json`内に値が存在する場合は`1`を、存在しない場合は`0`を返します [`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=クエリ -SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', 'b') = 1; -SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', 4) = 0; -``` - -```response title=レスポンス -1 -0 -``` - - -## JSONLength {#JSONLength} - -導入バージョン: v20.1 - -JSON配列またはJSONオブジェクトの長さを返します。 -値が存在しない場合、または型が正しくない場合は、`0`が返されます。 - -**構文** - -```sql -JSONLength(json [, indices_or_keys, ...]) -``` - -**引数** - -- `json` — パースするJSON文字列 [`String`](/sql-reference/data-types/string) -- `[, indices_or_keys, ...]` — オプション。0個以上の引数のリスト。[`String`](/sql-reference/data-types/string) または [`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) - -**戻り値** - -JSON配列またはJSONオブジェクトの長さを返します。値が存在しない場合、または型が正しくない場合は`0`を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=クエリ -SELECT JSONLength('{"a": "hello", "b": [-100, 200.0, 300]}', 'b') = 3; -SELECT JSONLength('{"a": "hello", "b": [-100, 200.0, 300]}') = 2; -``` - -```response title=レスポンス -1 -1 -``` - - -## JSONMergePatch {#JSONMergePatch} - -導入バージョン: v23.10 - -複数のJSONオブジェクトをマージして生成されたマージ済みJSONオブジェクト文字列を返します。 - -**構文** - -```sql -jsonMergePatch(json1[, json2, ...]) -``` - -**エイリアス**: `jsonMergePatch` - -**引数** - -- `json1[, json2, ...]` — 有効なJSONを含む1つ以上の文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -JSONオブジェクト文字列が有効な場合、マージ済みJSONオブジェクト文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT jsonMergePatch('{"a":1}', '{"name": "joey"}', '{"name": "tom"}', '{"name": "zoey"}') AS res; -``` - -```response title=Response -┌─res───────────────────┐ -│ {"a":1,"name":"zoey"} │ -└───────────────────────┘ -``` - - -## JSONSharedDataPaths {#JSONSharedDataPaths} - -導入バージョン: v24.8 - -JSON列の共有データ構造に格納されているパスのリストを返します。 - -**構文** - -```sql -JSONSharedDataPaths(json) -``` - -**引数** - -- `json` — JSON列。[`JSON`](/sql-reference/data-types/newjson) - -**戻り値** - -JSON列の共有データ構造に格納されているパスの配列を返します。[`Array(String)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=クエリ -CREATE TABLE test (json JSON(max_dynamic_paths=1)) ENGINE = Memory; -INSERT INTO test FORMAT JSONEachRow {"json" : {"a" : 42}}, {"json" : {"b" : "Hello"}}, {"json" : {"a" : [1, 2, 3], "c" : "2020-01-01"}} -SELECT json, JSONSharedDataPaths(json) FROM test; -``` - -```response title=レスポンス -┌─json─────────────────────────────────┬─JSONSharedDataPaths(json)─┐ -│ {"a":"42"} │ [] │ -│ {"b":"Hello"} │ ['b'] │ -│ {"a":["1","2","3"],"c":"2020-01-01"} │ ['c'] │ -└──────────────────────────────────────┴───────────────────────────┘ -``` - - -## JSONSharedDataPathsWithTypes {#JSONSharedDataPathsWithTypes} - -導入バージョン: v24.8 - -JSON列の各行において、共有データ構造に格納されているパスとその型のリストを返します。 - -**構文** - -```sql -JSONSharedDataPathsWithTypes(json) -``` - -**引数** - -- `json` — JSON列。[`JSON`](/sql-reference/data-types/newjson) - -**戻り値** - -JSON列の共有データ構造に格納されているパスとそのデータ型のマップを返します。[`Map(String, String)`](/sql-reference/data-types/map) - -**例** - -**使用例** - -```sql title=Query -CREATE TABLE test (json JSON(max_dynamic_paths=1)) ENGINE = Memory; -INSERT INTO test FORMAT JSONEachRow {"json" : {"a" : 42}}, {"json" : {"b" : "Hello"}}, {"json" : {"a" : [1, 2, 3], "c" : "2020-01-01"}} -SELECT json, JSONSharedDataPathsWithTypes(json) FROM test; -``` - -```response title=Response -┌─json─────────────────────────────────┬─JSONSharedDataPathsWithTypes(json)─┐ -│ {"a":"42"} │ {} │ -│ {"b":"Hello"} │ {'b':'String'} │ -│ {"a":["1","2","3"],"c":"2020-01-01"} │ {'c':'Date'} │ -└──────────────────────────────────────┴─────────────────────────────────────┘ -``` - - -## JSONType {#JSONType} - -導入バージョン: v20.1 - -JSON値の型を返します。値が存在しない場合は`Null=0`が返されます。 - -**構文** - -```sql -JSONType(json[, indices_or_keys, ...]) -``` - -**引数** - -- `json` — パース対象のJSON文字列 [`String`](/sql-reference/data-types/string) -- `json[, indices_or_keys, ...]` — 0個以上の引数のリスト。各引数は文字列または整数を指定できます。[`String`](/sql-reference/data-types/string) または [`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) - -**戻り値** - -JSON値の型を文字列として返します。値が存在しない場合は`Null=0`を返します。[`Enum`](/sql-reference/data-types/enum) - -**例** - -**使用例** - -```sql title=クエリ -SELECT JSONType('{"a": "hello", "b": [-100, 200.0, 300]}') = 'Object'; -SELECT JSONType('{"a": "hello", "b": [-100, 200.0, 300]}', 'a') = 'String'; -SELECT JSONType('{"a": "hello", "b": [-100, 200.0, 300]}', 'b') = 'Array'; -``` - -```response title=レスポンス -1 -1 -1 -``` - - -## JSON_EXISTS {#JSON_EXISTS} - -導入バージョン: v21.8 - -JSON ドキュメント内に値が存在する場合、`1` が返されます。 -値が存在しない場合、`0` が返されます。 - -**構文** - -```sql -JSON_EXISTS(json, path) -``` - -**引数** - -- `json` — 有効な JSON を含む文字列。[`String`](/sql-reference/data-types/string) -- `path` — パスを表す文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -JSON ドキュメント内に値が存在する場合は `1` を、存在しない場合は `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=クエリ -SELECT JSON_EXISTS('{"hello":1}', '$.hello'); -SELECT JSON_EXISTS('{"hello":{"world":1}}', '$.hello.world'); -SELECT JSON_EXISTS('{"hello":["world"]}', '$.hello[*]'); -SELECT JSON_EXISTS('{"hello":["world"]}', '$.hello[0]'); -``` - -```response title=レスポンス -┌─JSON_EXISTS(⋯ '$.hello')─┐ -│ 1 │ -└──────────────────────────┘ -┌─JSON_EXISTS(⋯llo.world')─┐ -│ 1 │ -└──────────────────────────┘ -┌─JSON_EXISTS(⋯.hello[*]')─┐ -│ 1 │ -└──────────────────────────┘ -┌─JSON_EXISTS(⋯.hello[0]')─┐ -│ 1 │ -└──────────────────────────┘ -``` - - -## JSON_QUERY {#JSON_QUERY} - -導入バージョン: v21.8 - -JSONを解析し、値をJSON配列またはJSONオブジェクトとして抽出します。 -値が存在しない場合は、空文字列が返されます。 - -**構文** - -```sql -JSON_QUERY(json, path) -``` - -**引数** - -- `json` — 有効なJSON文字列。[`String`](/sql-reference/data-types/string) -- `path` — パスを表す文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -抽出されたJSON配列またはJSONオブジェクトを文字列として返します。値が存在しない場合は空文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=クエリ -SELECT JSON_QUERY('{"hello":"world"}', '$.hello'); -SELECT JSON_QUERY('{"array":[[0, 1, 2, 3, 4, 5], [0, -1, -2, -3, -4, -5]]}', '$.array[*][0 to 2, 4]'); -SELECT JSON_QUERY('{"hello":2}', '$.hello'); -SELECT toTypeName(JSON_QUERY('{"hello":2}', '$.hello')); -``` - -```response title=レスポンス -["world"] -[0, 1, 4, 0, -1, -4] -[2] -String -``` - - -## JSON_VALUE {#JSON_VALUE} - -導入バージョン: v21.11 - -JSONを解析し、値をJSONスカラーとして抽出します。値が存在しない場合、デフォルトでは空文字列が返されます。 - -この関数は以下の設定によって制御されます: - -- `function_json_value_return_type_allow_nullable` = `true` を設定すると、`NULL` が返されます。値が複合型(struct、array、mapなど)の場合、デフォルトでは空文字列が返されます。 -- `function_json_value_return_type_allow_complex` = `true` を設定すると、複合値が返されます。 - -**構文** - -```sql -JSON_VALUE(json, path) -``` - -**引数** - -- `json` — 有効なJSONを含む文字列。[`String`](/sql-reference/data-types/string) -- `path` — パスを表す文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -抽出されたJSONスカラーを文字列として返します。値が存在しない場合は空文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT JSON_VALUE('{"hello":"world"}', '$.hello'); -SELECT JSON_VALUE('{"array":[[0, 1, 2, 3, 4, 5], [0, -1, -2, -3, -4, -5]]}', '$.array[*][0 to 2, 4]'); -SELECT JSON_VALUE('{"hello":2}', '$.hello'); -SELECT JSON_VALUE('{"hello":"world"}', '$.b') settings function_json_value_return_type_allow_nullable=true; -``` - -```response title=Response -world -0 -2 -ᴺᵁᴸᴸ -``` - - -## dynamicElement {#dynamicElement} - -導入バージョン: v24.1 - -`Dynamic`カラムから指定された型のカラムを抽出します。 - -この関数を使用すると、Dynamicカラムから特定の型の値を抽出できます。行が要求された型の値を含む場合、その値を返します。行が異なる型またはNULLを含む場合、スカラー型に対してはNULLを、配列型に対しては空の配列を返します。 - -**構文** - -```sql -dynamicElement(dynamic, type_name) -``` - -**引数** - -- `dynamic` — 抽出元のDynamicカラム。[`Dynamic`](/sql-reference/data-types/dynamic) -- `type_name` — 抽出するバリアント型の名前(例: 'String'、'Int64'、'Array(Int64)')。 - -**戻り値** - -Dynamicカラムから指定された型の値を返します。一致しない型に対してはNULLを返します(配列型の場合は空の配列)。[`Any`](/sql-reference/data-types) - -**例** - -**Dynamicカラムから異なる型を抽出する** - -```sql title=Query -CREATE TABLE test (d Dynamic) ENGINE = Memory; -INSERT INTO test VALUES (NULL), (42), ('Hello, World!'), ([1, 2, 3]); -SELECT d, dynamicType(d), dynamicElement(d, 'String'), dynamicElement(d, 'Int64'), dynamicElement(d, 'Array(Int64)'), dynamicElement(d, 'Date'), dynamicElement(d, 'Array(String)') FROM test -``` - -```response title=Response -┌─d─────────────┬─dynamicType(d)─┬─dynamicElement(d, 'String')─┬─dynamicElement(d, 'Int64')─┬─dynamicElement(d, 'Array(Int64)')─┬─dynamicElement(d, 'Date')─┬─dynamicElement(d, 'Array(String)')─┐ -│ ᴺᵁᴸᴸ │ None │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ [] │ ᴺᵁᴸᴸ │ [] │ -│ 42 │ Int64 │ ᴺᵁᴸᴸ │ 42 │ [] │ ᴺᵁᴸᴸ │ [] │ -│ Hello, World! │ String │ Hello, World! │ ᴺᵁᴸᴸ │ [] │ ᴺᵁᴸᴸ │ [] │ -│ [1,2,3] │ Array(Int64) │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ [1,2,3] │ ᴺᵁᴸᴸ │ [] │ -└───────────────┴────────────────┴─────────────────────────────┴────────────────────────────┴───────────────────────────────────┴───────────────────────────┴────────────────────────────────────┘ -``` - - -## dynamicType {#dynamicType} - -導入バージョン: v24.1 - -`Dynamic`カラムの各行のバリアント型名を返します。 - -NULLを含む行の場合、この関数は'None'を返します。その他すべての行については、Dynamicカラムのその行に格納されている実際のデータ型を返します(例: 'Int64'、'String'、'Array(Int64)')。 - -**構文** - -```sql -dynamicType(dynamic) -``` - -**引数** - -- `dynamic` — 検査対象のDynamicカラム。[`Dynamic`](/sql-reference/data-types/dynamic) - -**戻り値** - -各行に格納されている値の型名を返します。NULL値の場合は'None'を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**Dynamicカラムの型の検査** - -```sql title=クエリ -CREATE TABLE test (d Dynamic) ENGINE = Memory; -INSERT INTO test VALUES (NULL), (42), ('Hello, World!'), ([1, 2, 3]); -SELECT d, dynamicType(d) FROM test; -``` - -```response title=レスポンス -┌─d─────────────┬─dynamicType(d)─┐ -│ ᴺᵁᴸᴸ │ None │ -│ 42 │ Int64 │ -│ Hello, World! │ String │ -│ [1,2,3] │ Array(Int64) │ -└───────────────┴────────────────┘ -``` - - -## isDynamicElementInSharedData {#isDynamicElementInSharedData} - -導入バージョン: v24.1 - -Dynamic列において、個別のサブカラムではなく共有バリアント形式で格納されている行に対してtrueを返します。 - -Dynamic列に`max_types`制限がある場合、この制限を超える値は個別の型付きサブカラムに分離されず、共有バイナリ形式で格納されます。この関数は、どの行がこの共有形式で格納されているかを識別します。 - -**構文** - -```sql -isDynamicElementInSharedData(dynamic) -``` - -**引数** - -- `dynamic` — 検査対象のDynamic列。[`Dynamic`](/sql-reference/data-types/dynamic) - -**戻り値** - -値が共有バリアント形式で格納されている場合はtrueを返し、個別のサブカラムとして格納されている場合またはNULLの場合はfalseを返します。[`Bool`](/sql-reference/data-types/boolean) - -**例** - -**max_types制限を持つDynamic列における格納形式の確認** - -```sql title=Query -CREATE TABLE test (d Dynamic(max_types=2)) ENGINE = Memory; -INSERT INTO test VALUES (NULL), (42), ('Hello, World!'), ([1, 2, 3]); -SELECT d, isDynamicElementInSharedData(d) FROM test; -``` - -```response title=Response -┌─d─────────────┬─isDynamicElementInSharedData(d)─┐ -│ ᴺᵁᴸᴸ │ false │ -│ 42 │ false │ -│ Hello, World! │ true │ -│ [1,2,3] │ true │ -└───────────────┴─────────────────────────────────┘ -``` - - -## isValidJSON {#isValidJSON} - -導入バージョン: v20.1 - -渡された文字列が有効なJSONであるかを検証します。 - -**構文** - -```sql -isValidJSON(json) -``` - -**引数** - -- `json` — 検証するJSON文字列 [`String`](/sql-reference/data-types/string) - -**戻り値** - -文字列が有効なJSONの場合は`1`を、それ以外の場合は`0`を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=クエリ -SELECT isValidJSON('{"a": "hello", "b": [-100, 200.0, 300]}') = 1; -SELECT isValidJSON('not JSON') = 0; -``` - -```response title=レスポンス -1 -0 -``` - -**整数を使用したJSON配列とJSONオブジェクトへのアクセス** - -```sql title=クエリ -SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', 0); -SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', 1); -SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', 2); -SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', -1); -SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', -2); -SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', 3); -``` - -```response title=レスポンス -0 -1 -1 -1 -1 -1 -0 -``` - - -## simpleJSONExtractBool {#simpleJSONExtractBool} - -導入バージョン: v21.4 - -`field_name`という名前のフィールドの値から真偽値を解析します。 -結果は`UInt8`型です。 - -**構文** - -```sql -simpleJSONExtractBool(json, field_name) -``` - -**エイリアス**: `visitParamExtractBool` - -**引数** - -- `json` — フィールドを検索するJSON。[`String`](/sql-reference/data-types/string) -- `field_name` — 検索するフィールドの名前。[`const String`](/sql-reference/data-types/string) - -**戻り値** - -フィールドの値が`true`の場合は`1`を返し、それ以外の場合は`0`を返します。つまり、この関数は以下の場合を含む(ただしこれらに限定されない)ときに`0`を返します: - -- フィールドが存在しない場合 -- フィールドが文字列として`true`を含む場合(例: `{"field":"true"}`) -- フィールドが数値として`1`を含む場合 [`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=クエリ -CREATE TABLE jsons -( - `json` String -) -ENGINE = MergeTree -ORDER BY tuple(); - -INSERT INTO jsons VALUES ('{"foo":false,"bar":true}'); -INSERT INTO jsons VALUES ('{"foo":"true","qux":1}'); - -SELECT simpleJSONExtractBool(json, 'bar') FROM jsons ORDER BY json; -SELECT simpleJSONExtractBool(json, 'foo') FROM jsons ORDER BY json; -``` - -```response title=レスポンス -0 -1 -0 -0 -``` - - -## simpleJSONExtractFloat {#simpleJSONExtractFloat} - -導入バージョン: v21.4 - -`field_name` という名前のフィールドの値から `Float64` を解析します。 -`field_name` が文字列フィールドの場合、文字列の先頭から数値の解析を試みます。 -フィールドが存在しない場合、または存在しても数値が含まれていない場合は `0` を返します。 - -**構文** - -```sql -simpleJSONExtractFloat(json, field_name) -``` - -**エイリアス**: `visitParamExtractFloat` - -**引数** - -- `json` — フィールドを検索する対象のJSON。[`String`](/sql-reference/data-types/string) -- `field_name` — 検索するフィールドの名前。[`const String`](/sql-reference/data-types/string) - -**戻り値** - -フィールドが存在し数値が含まれている場合は、フィールドから解析された数値を返します。それ以外の場合は `0` を返します。[`Float64`](/sql-reference/data-types/float) - -**例** - -**使用例** - -```sql title=クエリ -CREATE TABLE jsons -( - `json` String -) -ENGINE = MergeTree -ORDER BY tuple(); - -INSERT INTO jsons VALUES ('{"foo":"-4e3"}'); -INSERT INTO jsons VALUES ('{"foo":-3.4}'); -INSERT INTO jsons VALUES ('{"foo":5}'); -INSERT INTO jsons VALUES ('{"foo":"not1number"}'); -INSERT INTO jsons VALUES ('{"baz":2}'); - -SELECT simpleJSONExtractFloat(json, 'foo') FROM jsons ORDER BY json; -``` - -```response title=レスポンス -0 --4000 -0 --3.4 -5 -``` - - -## simpleJSONExtractInt {#simpleJSONExtractInt} - -導入バージョン: v21.4 - -`field_name`という名前のフィールドの値から`Int64`を解析します。 -`field_name`が文字列フィールドの場合、文字列の先頭から数値の解析を試みます。 -フィールドが存在しない場合、または存在しても数値が含まれていない場合は、`0`を返します。 - -**構文** - -```sql -simpleJSONExtractInt(json, field_name) -``` - -**エイリアス**: `visitParamExtractInt` - -**引数** - -- `json` — フィールドを検索するJSON。[`String`](/sql-reference/data-types/string) -- `field_name` — 検索するフィールドの名前。[`const String`](/sql-reference/data-types/string) - -**戻り値** - -フィールドが存在し数値が含まれている場合はフィールドから解析された数値を返し、それ以外の場合は`0`を返します。[`Int64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=クエリ -CREATE TABLE jsons -( - `json` String -) -ENGINE = MergeTree -ORDER BY tuple(); - -INSERT INTO jsons VALUES ('{"foo":"-4e3"}'); -INSERT INTO jsons VALUES ('{"foo":-3.4}'); -INSERT INTO jsons VALUES ('{"foo":5}'); -INSERT INTO jsons VALUES ('{"foo":"not1number"}'); -INSERT INTO jsons VALUES ('{"baz":2}'); - -SELECT simpleJSONExtractInt(json, 'foo') FROM jsons ORDER BY json; -``` - -```response title=レスポンス -0 --4 -0 --3 -5 -``` - - -## simpleJSONExtractRaw {#simpleJSONExtractRaw} - -導入バージョン: v21.4 - -`field_name`という名前のフィールドの値を、区切り文字を含めて`String`として返します。 - -**構文** - -```sql -simpleJSONExtractRaw(json, field_name) -``` - -**エイリアス**: `visitParamExtractRaw` - -**引数** - -- `json` — フィールドを検索するJSON。[`String`](/sql-reference/data-types/string) -- `field_name` — 検索するフィールドの名前。[`const String`](/sql-reference/data-types/string) - -**戻り値** - -フィールドが存在する場合は区切り文字を含めてフィールドの値を文字列として返し、存在しない場合は空文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -CREATE TABLE jsons -( - `json` String -) -ENGINE = MergeTree -ORDER BY tuple(); - -INSERT INTO jsons VALUES ('{"foo":"-4e3"}'); -INSERT INTO jsons VALUES ('{"foo":-3.4}'); -INSERT INTO jsons VALUES ('{"foo":5}'); -INSERT INTO jsons VALUES ('{"foo":{"def":[1,2,3]}}'); -INSERT INTO jsons VALUES ('{"baz":2}'); - -SELECT simpleJSONExtractRaw(json, 'foo') FROM jsons ORDER BY json; -``` - -```response title=Response -"-4e3" --3.4 -5 -{"def":[1,2,3]} -``` - - -## simpleJSONExtractString {#simpleJSONExtractString} - -導入バージョン: v21.4 - -`field_name`という名前のフィールドの値から、ダブルクォートで囲まれた`String`を解析します。 - -**実装の詳細** - -現在、基本多言語面に含まれない`\uXXXX\uYYYY`形式のコードポイントはサポートされていません(UTF-8ではなくCESU-8に変換されます)。 - -**構文** - -```sql -simpleJSONExtractString(json, field_name) -``` - -**エイリアス**: `visitParamExtractString` - -**引数** - -- `json` — フィールドを検索するJSON。[`String`](/sql-reference/data-types/string) -- `field_name` — 検索するフィールドの名前。[`const String`](/sql-reference/data-types/string) - -**戻り値** - -区切り文字を含む、フィールドのエスケープ解除された値を文字列として返します。フィールドにダブルクォートで囲まれた文字列が含まれていない場合、エスケープ解除に失敗した場合、またはフィールドが存在しない場合は、空の文字列が返されます。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=クエリ -CREATE TABLE jsons -( - `json` String -) -ENGINE = MergeTree -ORDER BY tuple(); - -INSERT INTO jsons VALUES ('{"foo":"\\n\\u0000"}'); -INSERT INTO jsons VALUES ('{"foo":"\\u263"}'); -INSERT INTO jsons VALUES ('{"foo":"\\u263a"}'); -INSERT INTO jsons VALUES ('{"foo":"hello}'); - -SELECT simpleJSONExtractString(json, 'foo') FROM jsons ORDER BY json; -``` - -```response title=レスポンス -\n\0 - -☺ -``` - - -## simpleJSONExtractUInt {#simpleJSONExtractUInt} - -導入バージョン: v21.4 - -`field_name`という名前のフィールドの値から`UInt64`を解析します。 -`field_name`が文字列フィールドの場合、文字列の先頭から数値の解析を試みます。 -フィールドが存在しない場合、または存在しても数値が含まれていない場合は、`0`を返します。 - -**構文** - -```sql -simpleJSONExtractUInt(json, field_name) -``` - -**エイリアス**: `visitParamExtractUInt` - -**引数** - -- `json` — フィールドを検索するJSON。[`String`](/sql-reference/data-types/string) -- `field_name` — 検索するフィールドの名前。[`const String`](/sql-reference/data-types/string) - -**戻り値** - -フィールドが存在し数値が含まれている場合はフィールドから解析された数値を返し、それ以外の場合は`0`を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -CREATE TABLE jsons -( - `json` String -) -ENGINE = MergeTree -ORDER BY tuple(); - -INSERT INTO jsons VALUES ('{"foo":"4e3"}'); -INSERT INTO jsons VALUES ('{"foo":3.4}'); -INSERT INTO jsons VALUES ('{"foo":5}'); -INSERT INTO jsons VALUES ('{"foo":"not1number"}'); -INSERT INTO jsons VALUES ('{"baz":2}'); - -SELECT simpleJSONExtractUInt(json, 'foo') FROM jsons ORDER BY json; -``` - -```response title=Response -0 -4 -0 -3 -5 -``` - - -## simpleJSONHas {#simpleJSONHas} - -導入バージョン: v21.4 - -`field_name`という名前のフィールドが存在するかどうかをチェックします。 - -**構文** - -```sql -simpleJSONHas(json, field_name) -``` - -**エイリアス**: `visitParamHas` - -**引数** - -- `json` — フィールドを検索するJSON。[`String`](/sql-reference/data-types/string) -- `field_name` — 検索するフィールドの名前。[`const String`](/sql-reference/data-types/string) - -**返り値** - -フィールドが存在する場合は`1`を、存在しない場合は`0`を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -CREATE TABLE jsons -( - `json` String -) -ENGINE = MergeTree -ORDER BY tuple(); - -INSERT INTO jsons VALUES ('{"foo":"true","qux":1}'); - -SELECT simpleJSONHas(json, 'foo') FROM jsons; -SELECT simpleJSONHas(json, 'bar') FROM jsons; -``` - -```response title=Response -1 -0 -``` - - -## toJSONString {#toJSONString} - -導入バージョン: v21.7 - -値をJSON表現にシリアライズします。さまざまなデータ型とネストされた構造に対応しています。 -64ビット[整数](../data-types/int-uint.md)以上(例: `UInt64`や`Int128`)は、デフォルトで引用符で囲まれます。この動作は[output_format_json_quote_64bit_integers](/operations/settings/formats#output_format_json_quote_64bit_integers)で制御できます。 -特殊値`NaN`と`inf`は`null`に置き換えられます。これらを表示するには、[output_format_json_quote_denormals](/operations/settings/formats#output_format_json_quote_denormals)設定を有効にしてください。 -[Enum](../data-types/enum.md)値をシリアライズする際、この関数はその名前を出力します。 - -関連項目: - -- [output_format_json_quote_64bit_integers](/operations/settings/formats#output_format_json_quote_64bit_integers) -- [output_format_json_quote_denormals](/operations/settings/formats#output_format_json_quote_denormals) - -**構文** - -```sql -toJSONString(value) -``` - -**引数** - -- `value` — シリアライズする値。任意のデータ型を指定できます。[`Any`](/sql-reference/data-types) - -**戻り値** - -値のJSON表現を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**Mapのシリアライズ** - -```sql title=クエリ -SELECT toJSONString(map('key1', 1, 'key2', 2)); -``` - -```response title=レスポンス -┌─toJSONString(map('key1', 1, 'key2', 2))─┐ -│ {"key1":1,"key2":2} │ -└─────────────────────────────────────────┘ -``` - -**特殊値** - -```sql title=クエリ -SELECT toJSONString(tuple(1.25, NULL, NaN, +inf, -inf, [])) SETTINGS output_format_json_quote_denormals = 1; -``` +{/* + 以下のタグ内の内容は、ドキュメントフレームワークのビルド時に + system.functions から自動生成されたドキュメントで置き換えられます。タグの変更や削除は行わないでください。 + 参照: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md + */ } -```response title=レスポンス -┌─toJSONString(tuple(1.25, NULL, NaN, plus(inf), minus(inf), []))─┐ -│ [1.25,null,"nan","inf","-inf",[]] │ -└─────────────────────────────────────────────────────────────────┘ -``` +{/*AUTOGENERATED_START*/ } - +{/*AUTOGENERATED_END*/ } diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/logical-functions.md b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/logical-functions.md index 6fafa8fe9bd..771eba35185 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/logical-functions.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/logical-functions.md @@ -6,208 +6,19 @@ title: '論理関数' doc_type: 'reference' --- - - # 論理関数 -以下の関数は、任意の数値型の引数に対して論理演算を行います。 -戻り値は [`UInt8`](../data-types/int-uint.md) 型の `0` または `1`、あるいは場合によっては `NULL` です。 +以下の関数は、任意の数値型の引数に対して論理演算を実行します。 +戻り値は [`UInt8`](../data-types/int-uint.md) 型の `0` または `1`、もしくは場合によっては `NULL` になります。 -引数が 0 の場合は `false`、0 以外の値は `true` と評価されます。 +引数の値がゼロの場合は `false`、ゼロ以外の値は `true` と見なされます。 {/* 以下のタグ内の内容は、ドキュメントフレームワークのビルド時に system.functions から自動生成されたドキュメントで置き換えられます。タグを変更または削除しないでください。 - 詳しくは https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md を参照してください。 + 詳細は https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md を参照してください。 */ } - -{/*AUTOGENERATED_START*/ } - -## and - -導入バージョン: v1.1 - -2 つ以上の値の論理積(論理 AND)を計算します。 - -ショートサーキット評価を使用するかどうかは、設定 [`short_circuit_function_evaluation`](/operations/settings/settings#short_circuit_function_evaluation) によって制御されます。 -有効な場合は、`val_i` は `(val_1 AND val_2 AND ... AND val_{i-1})` が `true` のときにのみ評価されます。 - -たとえばショートサーキット評価が有効な場合、クエリ `SELECT and(number = 2, intDiv(1, number)) FROM numbers(5)` を実行しても、ゼロ除算の例外は発生しません。 -引数が 0 の場合は `false` と見なされ、0 以外の値は `true` と見なされます。 - -**構文** - -```sql -and(val1, val2[, ...]) -``` - -**引数** - -* `val1, val2[, ...]` — 2 つ以上の値からなるリスト。[`Nullable((U)Int*)`](/sql-reference/data-types/nullable) または [`Nullable(Float*)`](/sql-reference/data-types/nullable) - -**戻り値** - -返される値: - -* 少なくとも 1 つの引数が `false` と評価される場合は `0` -* どの引数も `false` と評価されず、少なくとも 1 つの引数が `NULL` の場合は `NULL` -* それ以外の場合は `1`\ - [`Nullable(UInt8)`](/sql-reference/data-types/nullable) - -**例** - -**基本的な使い方** - -```sql title=Query -SELECT and(0, 1, -2); -``` - -```response title=Response -0 -``` - -**NULL を含む場合** - -```sql title=Query -SELECT and(NULL, 1, 10, -2); -``` - -```response title=Response -ᴺᵁᴸᴸ -``` - - -## not - -導入バージョン: v1.1 - -値の論理否定を行います。 -引数が 0 の場合は `false` と見なされ、0 以外の値は `true` と見なされます。 - -**構文** - -```sql -not(val) -``` - -**引数** - -* `val` — 値。型は [`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) - -**返り値** - -返される値は次のとおりです: - -* `val` が `false` と評価される場合は `1` -* `val` が `true` と評価される場合は `0` -* `val` が `NULL` の場合は `NULL` - [`Nullable(UInt8)`](/sql-reference/data-types/nullable) - -**例** - -**基本的な使用例** - -```sql title=Query -SELECT NOT(1); -``` - -```response title=Response -0 -``` - - -## or - -導入: v1.1 - -2つ以上の値の論理和を計算します。 - -ショートサーキット評価を使用するかどうかは、[`short_circuit_function_evaluation`](https://clickhouse.com/docs/operations/settings/settings#short_circuit_function_evaluation) 設定で制御されます。 -有効にすると、`val_i` は `((NOT val_1) AND (NOT val_2) AND ... AND (NOT val_{i-1}))` が `true` のときにのみ評価されます。 - -例えば、ショートサーキット評価を使用すると、クエリ `SELECT or(number = 0, intDiv(1, number) != 0) FROM numbers(5)` を実行しても、ゼロ除算の例外は発生しません。 -引数としてのゼロは `false`、ゼロ以外の値は `true` と見なされます。 - -**構文** - -```sql -or(val1, val2[, ...]) -``` - -**引数** - -* `val1, val2[, ...]` — 2 つ以上の値のリスト。[`Nullable((U)Int*)`](/sql-reference/data-types/nullable) または [`Nullable(Float*)`](/sql-reference/data-types/nullable) - -**戻り値** - -戻り値は次のとおりです: - -* 少なくとも 1 つの引数が `true` と評価された場合は `1` -* すべての引数が `false` と評価された場合は `0` -* すべての引数が `false` と評価され、かつ少なくとも 1 つの引数が `NULL` の場合は `NULL`\ - [`Nullable(UInt8)`](/sql-reference/data-types/nullable) - -**例** - -**基本的な使い方** - -```sql title=Query -SELECT or(1, 0, 0, 2, NULL); -``` - -```response title=Response -1 -``` - -**NULL を含む場合** - -```sql title=Query -SELECT or(0, NULL); -``` - -```response title=Response -ᴺᵁᴸᴸ -``` - - -## xor - -導入バージョン: v1.1 - -2 つ以上の値に対して排他的論理和 (XOR) を計算します。 -入力値が 3 つ以上の場合、この関数は最初に先頭 2 つの値に対して XOR を行い、その結果に 3 つ目の値との XOR を行う、という処理を順に繰り返します。 -引数が 0 の場合は `false`、0 以外の値は `true` と見なされます。 - -**構文** - -```sql -xor(val1, val2[, ...]) -``` - -**引数** - -* `val1, val2[, ...]` — 少なくとも 2 つの値からなるリスト。[`Nullable((U)Int*)`](/sql-reference/data-types/nullable) または [`Nullable(Float*)`](/sql-reference/data-types/nullable) - -**返される値** - -戻り値: - -* `1` — 2 つの値に対して、一方の値が `false` と評価され、もう一方が `false` ではない場合 -* `0` — 2 つの値に対して、両方の値が `false`、または両方の値が `true` と評価される場合 -* `NULL` — 少なくとも 1 つの入力が `NULL` の場合。 - [`Nullable(UInt8)`](/sql-reference/data-types/nullable) - -**例** - -**基本的な使い方** - -```sql title=Query -SELECT xor(0, 1, 1); -``` - -```response title=Response -0 -``` +{/*自動生成開始*/ } {/*AUTOGENERATED_END*/ } diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/math-functions.md b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/math-functions.md index a53a9e7bfdc..ec4b106ff3b 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/math-functions.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/math-functions.md @@ -6,1299 +6,14 @@ title: '数学関数' doc_type: 'reference' --- - - # 数学関数 {/* - 以下のタグ内の内容は、ドキュメントフレームワークのビルド時に - system.functions から生成されたドキュメントで置き換えられます。タグを変更したり削除したりしないでください。 - 詳細は次を参照してください: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md + 以下のタグの内部の内容は、ドキュメントフレームワークのビルド時に + system.functions から自動生成されたドキュメントで置き換えられます。タグを変更または削除しないでください。 + 詳細は https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md を参照してください。 */ } - {/*AUTOGENERATED_START*/ } -## acos - -導入バージョン: v1.1 - -与えられた引数の逆余弦を返します。 - -**構文** - -```sql -acos(x) -``` - -**引数** - -* `x` — 逆余弦を計算する値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal*`](/sql-reference/data-types/decimal) - -**返り値** - -x の逆余弦の値を返します。型は [`Float*`](/sql-reference/data-types/float) - -**例** - -**使用例** - -```sql title=Query -SELECT acos(0.5); -``` - -```response title=Response -1.0471975511965979 -``` - - -## acosh - -導入バージョン: v20.12 - -逆双曲線余弦関数を返します。 - -**構文** - -```sql -acosh(x) -``` - -**引数** - -* `x` — 角度の双曲線余弦値。値の範囲: `1 ≤ x < +∞`。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal*`](/sql-reference/data-types/decimal) - -**戻り値** - -角度をラジアンで返します。値の範囲: `0 ≤ acosh(x) < +∞`。[`Float64`](/sql-reference/data-types/float) - -**例** - -**使用例** - -```sql title=Query -SELECT acosh(1) -``` - -```response title=Response -0 -``` - - -## asin - -導入バージョン: v1.1 - -指定された引数の逆正弦(アークサイン)値を計算します。 -引数が `[-1, 1]` の範囲にある場合、戻り値は `[-pi() / 2, pi() / 2]` の範囲になります。 - -**構文** - -```sql -asin(x) -``` - -**引数** - -* `x` — 逆正弦(アークサイン)を計算する対象の引数。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) - -**返り値** - -指定した引数 `x` の逆正弦値を返します。型は [`Float64`](/sql-reference/data-types/float) です。 - -**使用例** - -**逆関数** - -```sql title=Query -SELECT asin(1.0) = pi() / 2, sin(asin(1)), asin(sin(1)) -``` - -```response title=Response -1 1 1 -``` - -**float32** - -```sql title=Query -SELECT toTypeName(asin(1.0::Float32)) -``` - -```response title=Response -Float64 -``` - -**nan** - -```sql title=Query -SELECT asin(1.1), asin(-2), asin(inf), asin(nan) -``` - -```response title=Response -nan nan nan nan -``` - - -## asinh - -導入バージョン: v20.12 - -逆双曲線正弦関数の値を返します。 - -**構文** - -```sql -asinh(x) -``` - -**引数** - -* `x` — 角度の双曲線正弦値。範囲: `-∞ < x < +∞` の値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal*`](/sql-reference/data-types/decimal) - -**返される値** - -角度をラジアン単位で返します。範囲: `-∞ < asinh(x) < +∞` の値。[`Float64`](/sql-reference/data-types/float) - -**例** - -**基本的な使用方法** - -```sql title=Query -SELECT asinh(0) -``` - -```response title=Response -0 -``` - - -## atan - -導入バージョン: v1.1 - -引数のアークタンジェント(逆正接)を返します。 - -**構文** - -```sql -atan(x) -``` - -**引数** - -* `x` — 逆正接(アークタンジェント)を求める値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal*`](/sql-reference/data-types/decimal) - -**戻り値** - -`x` の逆正接を返します。[`Float*`](/sql-reference/data-types/float) - -**例** - -**使用例** - -```sql title=Query -SELECT atan(1); -``` - -```response title=Response -0.7853981633974483 -``` - - -## atan2 - -導入バージョン: v20.12 - -ユークリッド平面において、正の x 軸から原点から点 `(x, y) ≠ (0, 0)` に向かう半直線までの角度(ラジアン)としての atan2 を返します。 - -**構文** - -```sql -atan2(y, x) -``` - -**引数** - -* `y` — 半直線が通過する点の y 座標。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal*`](/sql-reference/data-types/decimal) -* `x` — 半直線が通過する点の x 座標。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal*`](/sql-reference/data-types/decimal) - -**戻り値** - -`-π < θ ≤ π` を満たす角度 `θ` をラジアン単位で返します。[`Float64`](/sql-reference/data-types/float) - -**例** - -**使用例** - -```sql title=Query -SELECT atan2(1, 1) -``` - -```response title=Response -0.7853981633974483 -``` - - -## atanh - -導入バージョン: v20.12 - -逆双曲線正接を返します。 - -**構文** - -```sql -atanh(x) -``` - -**引数** - -* `x` — 双曲線正接の値。区間: -1 < x < 1。`(U)Int*`、`Float*` または `Decimal*`。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal*`](/sql-reference/data-types/decimal) - -**返り値** - -ラジアンで表される角度を返します。区間: -∞ < atanh(x) < +∞ [`Float64`](/sql-reference/data-types/float) - -**例** - -**使用例** - -```sql title=Query -SELECT atanh(0) -``` - -```response title=Response -0 -``` - - -## cbrt - -導入バージョン: v1.1 - -引数の立方根を返します。 - -**構文** - -```sql -cbrt(x) -``` - -**引数** - -* `x` — 立方根を求める値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal*`](/sql-reference/data-types/decimal) - -**返り値** - -`x` の立方根を返します。[`Float*`](/sql-reference/data-types/float) - -**例** - -**使用例** - -```sql title=Query -SELECT cbrt(8); -``` - -```response title=Response -2 -``` - - -## cos - -導入: v1.1 - -引数の余弦を返します。 - -**構文** - -```sql -cos(x) -``` - -**引数** - -* `x` — ラジアンで指定された角度。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal*`](/sql-reference/data-types/decimal) - -**戻り値** - -`x` の余弦を返します。[`Float*`](/sql-reference/data-types/float) - -**例** - -**使用例** - -```sql title=Query -SELECT cos(0); -``` - -```response title=Response -1 -``` - - -## cosh - -導入バージョン: v20.12 - -引数の双曲線余弦を返します。 - -**構文** - -```sql -cosh(x) -``` - -**引数** - -* `x` — ラジアンで表した角度。値は区間 `-∞ < x < +∞` を取ります。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal*`](/sql-reference/data-types/decimal) - -**返り値** - -区間 `1 ≤ cosh(x) < +∞` の値を返します。[`Float64`](/sql-reference/data-types/float) - -**例** - -**基本的な使い方** - -```sql title=Query -SELECT cosh(0) -``` - -```response title=Response -1 -``` - - -## degrees - -導入バージョン: v22.2 - -ラジアンを度に変換します。 - -**構文** - -```sql -degrees(x) -``` - -**引数** - -* `x` — ラジアン単位の入力値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal*`](/sql-reference/data-types/decimal) - -**戻り値** - -`x` を度に変換した値を返します。[`Float64`](/sql-reference/data-types/float) - -**例** - -**基本的な使用例** - -```sql title=Query -SELECT degrees(3.141592653589793) -``` - -```response title=Response -180 -``` - - -## e - -導入バージョン:v1.1 - -オイラー定数 e を返します。 - -**構文** - -```sql -e() -``` - -**引数** - -* なし。 - -**戻り値** - -オイラーの定数を返します [`Float64`](/sql-reference/data-types/float) - -**例** - -**使用例** - -```sql title=Query -SELECT e(); -``` - -```response title=Response -2.718281828459045 -``` - - -## erf - -導入バージョン: v1.1 - -`x` が非負の場合、`erf(x/(σ√2))` は、標準偏差 `σ` を持つ正規分布に従う確率変数が、期待値から `x` を超えて離れた値をとる確率です。 - -**構文** - -```sql -erf(x) -``` - -**引数** - -* `x` — 誤差関数の値を計算する対象の値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal*`](/sql-reference/data-types/decimal) - -**返される値** - -誤差関数の値を返します。型は [`Float*`](/sql-reference/data-types/float) です。 - -**例** - -**3シグマの法則** - -```sql title=Query -SELECT erf(3 / sqrt(2)) -``` - -```response title=Response -┌─erf(divide(3, sqrt(2)))─┐ -│ 0.9973002039367398 │ -└─────────────────────────┘ -``` - - -## erfc - -導入バージョン: v1.1 - -`x` の値が大きい場合でも精度を失うことなく、`1-erf(x)` に近い数値を返します。 - -**構文** - -```sql -erfc(x) -``` - -**引数** - -* `x` — 誤差関数値を計算する対象の値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal*`](/sql-reference/data-types/decimal) - -**戻り値** - -相補誤差関数の値 [`Float*`](/sql-reference/data-types/float) を返します - -**例** - -**使用例** - -```sql title=Query -SELECT erfc(0); -``` - -```response title=Response -1 -``` - - -## exp - -導入バージョン: v1.1 - -与えられた引数 `x` に対して、e の `x` 乗を返します。 - -**構文** - -```sql -exp(x) -``` - -**引数** - -* `x` — 指数。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal*`](/sql-reference/data-types/decimal) - -**戻り値** - -`e^x` を返します。型は [`Float*`](/sql-reference/data-types/float) です。 - -**例** - -**基本的な使用例** - -```sql title=Query -SELECT round(exp(-1), 4) -``` - -```response title=Response -┌─round(exp(-1), 4)─┐ -│ 0.3679 │ -└───────────────────┘ -``` - - -## exp10 - -導入バージョン: v1.1 - -指定した引数を指数とする 10 のべき乗を返します。 - -**構文** - -```sql -exp10(x) -``` - -**引数** - -* `x` — 指数。[`(U)Int*`](/sql-reference/data-types/int-uint)、[`Float*`](/sql-reference/data-types/float)、または [`Decimal*`](/sql-reference/data-types/decimal) - -**戻り値** - -10^x を返します。戻り値の型は [`Float*`](/sql-reference/data-types/float) です。 - -**例** - -**使用例** - -```sql title=Query -SELECT exp10(2); -``` - -```response title=Response -100 -``` - - -## exp2 - -導入バージョン: v1.1 - -与えられた引数を指数とする 2 のべき乗を返します。 - -**構文** - -```sql -exp2(x) -``` - -**引数** - -* `x` — 指数。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal*`](/sql-reference/data-types/decimal) - -**返り値** - -2^x を返します。戻り値の型は [`Float*`](/sql-reference/data-types/float) です。 - -**例** - -**使用例** - -```sql title=Query -SELECT exp2(3); -``` - -```response title=Response -8 -``` - - -## factorial - -導入バージョン: v22.11 - -整数値の階乗を計算します。 -0 の階乗は 1 です。同様に、`factorial()` 関数は任意の負の値に対して `1` を返します。 -入力引数として指定できる最大の正の値は `20` であり、`21` 以上を指定すると例外が発生します。 - -**構文** - -```sql -factorial(n) -``` - -**引数** - -* `n` — 階乗を計算する対象の整数値。最大値は 20。[`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) - -**戻り値** - -入力値の階乗を `UInt64` 型で返します。入力が 0 または負の値の場合は 1 を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -factorial(10) -``` - -```response title=Response -3628800 -``` - - -## hypot - -導入バージョン: v20.12 - -直角三角形の斜辺の長さを返します。 -hypot は、非常に大きな数値または非常に小さな数値を二乗するときに発生する問題を回避します。 - -**構文** - -```sql -hypot(x, y) -``` - -**引数** - -* `x` — 直角三角形の1つ目の直角辺。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal*`](/sql-reference/data-types/decimal) -* `y` — 直角三角形の2つ目の直角辺。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal*`](/sql-reference/data-types/decimal) - -**戻り値** - -直角三角形の斜辺の長さを返します。[`Float64`](/sql-reference/data-types/float) - -**例** - -**基本的な使い方** - -```sql title=Query -SELECT hypot(1, 1) -``` - -```response title=Response -1.4142135623730951 -``` - - -## intExp10 - -導入バージョン: v1.1 - -[exp10](#exp10) と同様ですが、`UInt64` 型の数値を返します。 - -**構文** - -```sql -intExp10(x) -``` - -**引数** - -* `x` — 指数。[`Int*`](/sql-reference/data-types/int-uint) または [`UInt*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) - -**戻り値** - -10^x を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT intExp10(2); -``` - -```response title=Response -100 -``` - - -## intExp2 - -導入バージョン: v1.1 - -[exp2](#exp2) と同様ですが、`UInt64` 型の数値を返します。 - -**構文** - -```sql -intExp2(x) -``` - -**引数** - -* `x` — 指数。[`Int*`](/sql-reference/data-types/int-uint) または [`UInt*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) のいずれか。 - -**戻り値** - -2^x を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT intExp2(3); -``` - -```response title=Response -8 -``` - - -## lgamma - -導入されたバージョン: v1.1 - -ガンマ関数の対数を返します。 - -**構文** - -```sql -lgamma(x) -``` - -**引数** - -* `x` — ガンマ関数の対数を計算する数値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal*`](/sql-reference/data-types/decimal) - -**戻り値** - -`x` のガンマ関数の対数を返します。[`Float*`](/sql-reference/data-types/float) - -**例** - -**使用例** - -```sql title=Query -SELECT lgamma(5); -``` - -```response title=Response -3.1780538303479458 -``` - - -## log - -導入されたバージョン: v1.1 - -引数の自然対数を返します。 - -**構文** - -```sql -log(x) -``` - -**別名**: `ln` - -**引数** - -* `x` — 自然対数を計算する対象となる値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal*`](/sql-reference/data-types/decimal) - -**返り値** - -`x` の自然対数を返します。[`Float*`](/sql-reference/data-types/float) - -**例** - -**使用例** - -```sql title=Query -SELECT log(10); -``` - -```response title=Response -2.302585092994046 -``` - - -## log10 - -導入: v1.1 - -引数の常用対数を返します。 - -**構文** - -```sql -log10(x) -``` - -**引数** - -* `x` — 常用対数を計算する対象の数値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal*`](/sql-reference/data-types/decimal) - -**返り値** - -`x` の常用対数を返します。[`Float*`](/sql-reference/data-types/float) - -**例** - -**使用例** - -```sql title=Query -SELECT log10(100); -``` - -```response title=Response -2 -``` - - -## log1p - -導入バージョン: v20.12 - -log(1+x) の値を計算します。 -小さい値の `x` に対しては、log1p(x) の方が log(1+x) よりも高い精度で計算できます。 - -**構文** - -```sql -log1p(x) -``` - -**引数** - -* `x` — 区間 `-1 < x < +∞` の値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal*`](/sql-reference/data-types/decimal) - -**戻り値** - -区間 -∞ < log1p(x) < +∞ に属する値を返します。[`Float64`](/sql-reference/data-types/float) - -**例** - -**使用例** - -```sql title=Query -SELECT log1p(0) -``` - -```response title=Response -0 -``` - - -## log2 - -導入されたバージョン: v1.1 - -引数の二進対数を返します。 - -**構文** - -```sql -log2(x) -``` - -**引数** - -* `x` — 2 を底とする対数を計算する数値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal*`](/sql-reference/data-types/decimal) - -**戻り値** - -`x` の 2 を底とする対数(バイナリ対数)を返します。[`Float*`](/sql-reference/data-types/float) - -**例** - -**使用例** - -```sql title=Query -SELECT log2(8); -``` - -```response title=Response -3 -``` - - -## pi - -導入バージョン:v1.1 - -円周率 (π) を返します。 - -**構文** - -```sql -pi() -``` - -**引数** - -* なし - -**戻り値** - -[`Float64`](/sql-reference/data-types/float) 型の pi を返します。 - -**例** - -**使用例** - -```sql title=Query -SELECT pi(); -``` - -```response title=Response -3.141592653589793 -``` - - -## pow - -導入バージョン: v1.1 - -x を y 乗した結果を返します。 - -**構文** - -```sql -pow(x, y) -``` - -**別名**: `power` - -**引数** - -* `x` — 底。[`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal*`](/sql-reference/data-types/decimal) -* `y` — 指数。[`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal*`](/sql-reference/data-types/decimal) - -**戻り値** - -x^y を計算し、その結果を [`Float64`](/sql-reference/data-types/float) 型で返します。 - -**例** - -**使用例** - -```sql title=Query -SELECT pow(2, 3); -``` - -```response title=Response -8 -``` - - -## radians - -導入バージョン: v22.2 - -角度(度)をラジアンに変換します。 - -**構文** - -```sql -radians(x) -``` - -**引数** - -* `x` — 度数法で指定された入力値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal*`](/sql-reference/data-types/decimal) - -**返り値** - -値をラジアンで返します。[`Float64`](/sql-reference/data-types/float) - -**例** - -**使用例** - -```sql title=Query -SELECT radians(180) -``` - -```response title=Response -3.141592653589793 -``` - - -## sign - -導入バージョン: v21.2 - -実数の符号を返します。 - -**構文** - -```sql -符号(x) -``` - -**引数** - -* `x` — -∞ から +∞ までの値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Decimal*`](/sql-reference/data-types/decimal) または [`Float*`](/sql-reference/data-types/float) - -**戻り値** - -`x < 0` の場合は `-1`、`x = 0` の場合は `0`、`x > 0` の場合は `1` を返します。[`Int8`](/sql-reference/data-types/int-uint) - -**例** - -**ゼロの符号** - -```sql title=Query -SELECT sign(0) -``` - -```response title=Response -0 -``` - -**正の符号** - -```sql title=Query -SELECT sign(1) -``` - -```response title=Response -1 -``` - -**負の符号** - -```sql title=Query -SELECT sign(-1) -``` - -```response title=Response --1 -``` - - -## sin - -導入バージョン: v - -引数の正弦(サイン)を返します。 - -**構文** - -```sql -sin(x) -``` - -**引数** - -* `x` — 正弦を計算する対象の数値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal*`](/sql-reference/data-types/decimal) - -**戻り値** - -`x` の正弦値を返します。 - -**例** - -**シンプルな例** - -```sql title=Query -SELECT sin(1.23) -``` - -```response title=Response -0.9424888019316975 -``` - - -## sinh - -導入: v20.12 - -双曲線正弦を返します。 - -**構文** - -```sql -sinh(x) -``` - -**引数** - -* `x` — ラジアンで表した角度。値の範囲は -∞ < x < +∞。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal*`](/sql-reference/data-types/decimal) - -**返り値** - -値の範囲が -∞ < sinh(x) < +∞ の値を返します。[`Float64`](/sql-reference/data-types/float) - -**例** - -**使用例** - -```sql title=Query -SELECT sinh(0) -``` - -```response title=Response -0 -``` - - -## sqrt - -導入バージョン: v1.1 - -引数の平方根を返します。 - -**構文** - -```sql -sqrt(x) -``` - -**引数** - -* `x` — 平方根を計算する値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal*`](/sql-reference/data-types/decimal) - -**返り値** - -x の平方根を返します。[`Float*`](/sql-reference/data-types/float) - -**例** - -**使用例** - -```sql title=Query -SELECT sqrt(16); -``` - -```response title=Response -4 -``` - - -## tan - -導入: v1.1 - -引数の正接(タンジェント)を返します。 - -**構文** - -```sql -tan(x) -``` - -**引数** - -* `x` — ラジアン単位の角度。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal*`](/sql-reference/data-types/decimal) - -**戻り値** - -`x` の正接を返します。[`Float*`](/sql-reference/data-types/float) - -**例** - -**使用例** - -```sql title=Query -SELECT tan(0); -``` - -```response title=Response -0 -``` - - -## tanh - -導入バージョン: v20.1 - -双曲線正接関数の値を返します。 - -**構文** - -```sql -tanh(x) -``` - -**引数** - -* `x` — ラジアンで表した角度。取り得る値の範囲: -∞ < x < +∞。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal*`](/sql-reference/data-types/decimal) - -**戻り値** - -取り得る値の範囲: -1 < tanh(x) < 1 の値を返します。型は [`Float*`](/sql-reference/data-types/float) - -**例** - -**使用例** - -```sql title=Query -SELECT tanh(0) -``` - -```response title=Response -0 -``` - - -## tgamma - -導入されたバージョン: v1.1 - -ガンマ関数を返します。 - -**構文** - -```sql -tgamma(x) -``` - -**引数** - -* `x` — ガンマ関数を計算する対象の数。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal*`](/sql-reference/data-types/decimal) - -**戻り値** - -ガンマ関数の値を返します。[`Float*`](/sql-reference/data-types/float) - -**例** - -**使用例** - -```sql title=Query -SELECT tgamma(5); -``` - -```response title=Response -24 -``` - - -## widthBucket - -導入バージョン: v23.3 - -`operand` パラメーターが、`low` から `high` の範囲を等幅に分割した `count` 個のビン(ヒストグラムの区間)のうちどれに属するか、そのビン番号を返します。`operand` が `low` より小さい場合は 0 を返し、`operand` が `high` 以上の場合は `count`+1 を返します。 -他のデータベースとの互換性のために、大文字小文字を区別しないエイリアス `WIDTH_BUCKET` も用意されています。 - -**構文** - -```sql -widthBucket(operand, low, high, count) -``` - -**別名**: `width_bucket` - -**引数** - -* `operand` — 属するバケットを判定する対象の値。[`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) -* `low` — ヒストグラム範囲の下限値。[`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) -* `high` — ヒストグラム範囲の上限値。[`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) -* `count` — 等幅バケットの数。0 にすることはできません。[`UInt8/16/32/64`](/sql-reference/data-types/int-uint) - -**戻り値** - -バケット番号を整数で返します。`operand < low` の場合は 0 を返し、`operand >= high` の場合は `count+1` を返します。[`UInt8/16/32/64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -widthBucket(10.15, -8.6, 23, 18) -``` - -```response title=Response -11 -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/nlp-functions.md b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/nlp-functions.md index a1a64a40eca..132fe1eb7a2 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/nlp-functions.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/nlp-functions.md @@ -1,8 +1,8 @@ --- -description: '自然言語処理(NLP)関数に関するドキュメント' -sidebar_label: 'NLP(自然言語処理)' +description: '自然言語処理 (NLP) 関数のドキュメント' +sidebar_label: 'NLP' slug: /sql-reference/functions/nlp-functions -title: '自然言語処理(NLP)関数' +title: '自然言語処理 (NLP) 関数' doc_type: 'reference' keywords: ['NLP', '自然言語処理'] --- @@ -18,339 +18,15 @@ import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; :::warning -これは現在開発中の実験的機能であり、本番利用にはまだ適していません。今後のリリースで後方互換性のないかたちで予期しない変更が行われる可能性があります。この機能を有効化するには、`allow_experimental_nlp_functions = 1` を設定してください。 +これは現在開発中の実験的な機能であり、一般利用にはまだ適していません。今後のリリースで予測不能なかたちで後方互換性のない変更が行われる可能性があります。有効化するには `allow_experimental_nlp_functions = 1` を設定してください。 ::: {/* - 以下のタグ内の内容は、ドキュメントフレームワークのビルド時に - system.functions から生成されたドキュメントに置き換えられます。タグを変更または削除しないでください。 + 以下のタグ内のコンテンツは、ドキュメントフレームワークのビルド時に + system.functions から生成されたドキュメントに置き換えられます。タグは変更または削除しないでください。 詳細は https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md を参照してください。 */ } - {/*AUTOGENERATED_START*/ } -## detectCharset - -導入バージョン: v22.2 - -UTF-8 以外でエンコードされた入力文字列の文字セットを検出します。 - -**構文** - -```sql -detectCharset(s) -``` - -**引数** - -* `s` — 解析対象のテキスト。[`String`](/sql-reference/data-types/string) - -**戻り値** - -検出された文字セットのコードを表す文字列を返します。[`String`](/sql-reference/data-types/string) - -**使用例** - -**基本的な使用方法** - -```sql title=Query -SELECT detectCharset('Ich bleibe für ein paar Tage.') -``` - -```response title=Response -WINDOWS-1252 -``` - - -## detectLanguage - -導入バージョン: v22.2 - -UTF-8 でエンコードされた入力文字列の言語を検出します。 -この関数は検出に [CLD2 ライブラリ](https://github.com/CLD2Owners/cld2) を使用し、2文字の ISO 言語コードを返します。 - -入力が長いほど、言語検出の精度は高くなります。 - -**構文** - -```sql -言語を検出する(s) -``` - -**引数** - -* `text_to_be_analyzed` — 解析するテキスト。[`String`](/sql-reference/data-types/string) - -**戻り値** - -検出された言語の2文字のISOコードを返します。その他の結果: `un` = 不明(いずれの言語も検出できない場合)、`other` = 検出された言語に対応する2文字コードが存在しない場合。[`String`](/sql-reference/data-types/string) - -**例** - -**複数言語が混在したテキスト** - -```sql title=Query -SELECT detectLanguage('自分は決してネイティブのようにフランス語を話せるようにはならないと思う。意志あるところに道は開ける。') -``` - -```response title=Response -fr -``` - - -## detectLanguageMixed - -導入バージョン: v22.2 - -[`detectLanguage`](#detectLanguage) 関数と類似していますが、`detectLanguageMixed` はテキスト内に含まれる各言語の占める割合を値とし、2 文字の言語コードをキーとする `Map` を返します。 - -**構文** - -```sql -detectLanguageMixed(s) -``` - -**引数** - -* `s` — 解析するテキスト [`String`](/sql-reference/data-types/string) - -**返される値** - -2文字のISOコードをキー、その言語で検出されたテキストの割合(パーセンテージ)を値とするマップを返します [`Map(String, Float32)`](/sql-reference/data-types/map) - -**例** - -**複数言語の混在** - -```sql title=Query -SELECT detectLanguageMixed('二兎を追う者は一兎をも得ず二兎を追う者は一兎をも得ず 危険なくして勝つ者に栄光なし。') -``` - -```response title=Response -{'ja':0.62,'fr':0.36} -``` - - -## detectLanguageUnknown - -導入バージョン: v22.2 - -[`detectLanguage`](#detectLanguage) 関数と似ていますが、detectLanguageUnknown 関数は UTF-8 以外でエンコードされた文字列も扱うことができます。 -文字セットが UTF-16 または UTF-32 の場合は、このバージョンを優先して使用してください。 - -**構文** - -```sql -detectLanguageUnknown('s') -``` - -**引数** - -* `s` — 解析するテキスト。[`String`](/sql-reference/data-types/string) - -**戻り値** - -検出された言語の2文字のISOコードを返します。返されるその他の値: `un` = 不明(いずれの言語も検出できない場合)、`other` = 検出された言語に2文字コードが存在しない場合。[`String`](/sql-reference/data-types/string) - -**例** - -**基本的な使用例** - -```sql title=Query -SELECT detectLanguageUnknown('Ich bleibe für ein paar Tage.') -``` - -```response title=Response -de -``` - - -## detectProgrammingLanguage - -導入されたバージョン: v22.2 - -与えられたソースコードスニペットからプログラミング言語を判定します。 - -**構文** - -```sql -detectProgrammingLanguage('source_code') -``` - -**引数** - -* `source_code` — 解析対象のソースコードを表す文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -プログラミング言語名を表す [`String`](/sql-reference/data-types/string) を返します。 - -**例** - -**C++ コードの検出** - -```sql title=Query -SELECT detectProgrammingLanguage('#include ') -``` - -```response title=Response -C++ -``` - - -## detectTonality - -導入バージョン: v22.2 - -指定されたテキストデータの感情を判定します。 - -:::note 制限事項 -この関数は組み込みの感情辞書を利用するため、現状はロシア語にのみ対応しています。 -::: - -**構文** - -```sql -detectTonality(s) -``` - -**引数** - -* `s` — 解析するテキスト。[`String`](/sql-reference/data-types/string) - -**戻り値** - -テキスト内の単語の平均センチメント値を返します。[`Float32`](/sql-reference/data-types/float) - -**例** - -**ロシア語のセンチメント分析** - -```sql title=Query -SELECT - detectTonality('Шарик - хороший пёс'), - detectTonality('Шарик - пёс'), - detectTonality('Шарик - плохой пёс') -``` - -```response title=Response -0.44445, 0, -0.3 -``` - - -## lemmatize - -導入バージョン: v21.9 - -指定された単語に対してレンマ化(基本形への変換)を行います。 -この関数を利用するには辞書が必要で、[GitHub](https://github.com/vpodpecan/lemmagen3/tree/master/src/lemmagen3/models) から取得できます。ローカルファイルから辞書を読み込む方法の詳細については ["Defining Dictionaries"](/sql-reference/dictionaries#local-file) のページを参照してください。 - -**構文** - -```sql -lemmatize(lang, word) -``` - -**引数** - -* `lang` — 規則を適用する言語。[`String`](/sql-reference/data-types/string) -* `word` — レンマ化対象の小文字の単語。[`String`](/sql-reference/data-types/string) - -**戻り値** - -単語のレンマ化された形を返します。[`String`](/sql-reference/data-types/string) - -**使用例** - -**英語でのレンマ化** - -```sql title=Query -SELECT lemmatize('en', 'wolves') -``` - -```response title=Response -狼 -``` - - -## stem - -導入: v21.9 - -与えられた単語に対してステミングを行います。 - -**構文** - -```sql -stem(lang, word) -``` - -**引数** - -* `lang` — 適用するルールの言語。2文字の ISO 639-1 コードを使用します。[`String`](/sql-reference/data-types/string) -* `word` — ステミングの対象となる小文字の単語。[`String`](/sql-reference/data-types/string) - -**戻り値** - -指定した単語のステミング後の形を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**英語のステミング** - -```sql title=Query -SELECT arrayMap(x -> stem('en', x), -['I', 'think', 'it', 'is', 'a', 'blessing', 'in', 'disguise']) AS res -``` - -```response title=Response -['私は','それは','(災い転じて)','祝福だと','思います'] -``` - - -## synonyms - -Introduced in: v21.9 - -指定した語の類義語を検索します。 - -類義語拡張には 2 種類あります: - -* `plain` -* `wordnet` - -`plain` 拡張タイプでは、各行が 1 つの類義語セットに対応するシンプルなテキストファイルへのパスを指定する必要があります。 -この行内の単語は、スペースまたはタブ文字で区切られていなければなりません。 - -`wordnet` 拡張タイプでは、WordNet シソーラスを含むディレクトリへのパスを指定する必要があります。 -このシソーラスには、WordNet の sense index が含まれていなければなりません。 - -**Syntax** - -```sql -synonyms(ext_name, word) -``` - -**引数** - -* `ext_name` — 検索を実行する拡張機能の名前。[`String`](/sql-reference/data-types/string) -* `word` — 拡張機能内で検索する単語。[`String`](/sql-reference/data-types/string) - -**返される値** - -指定した単語の類義語を格納した配列を返します。[`Array(String)`](/sql-reference/data-types/array) - -**例** - -**類義語を検索する** - -```sql title=Query -SELECT synonyms('list', 'important') -``` - -```response title=Response -['important','big','critical','crucial'] -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/numeric-indexed-vector-functions.md b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/numeric-indexed-vector-functions.md index 9b50f6b7c6b..553c7653500 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/numeric-indexed-vector-functions.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/numeric-indexed-vector-functions.md @@ -1,47 +1,39 @@ --- -description: 'NumericIndexedVector およびその関数のドキュメント' +description: 'NumericIndexedVector に関するドキュメント' sidebar_label: 'NumericIndexedVector' slug: /sql-reference/functions/numeric-indexed-vector-functions -title: 'NumericIndexedVector の関数' +title: 'NumericIndexedVector 関数' doc_type: 'reference' --- - - # NumericIndexedVector -NumericIndexedVector は、ベクトルをカプセル化し、ベクトルの集約および要素単位の演算を実装する抽象データ構造です。Bit-Sliced Index をそのストレージ方式として利用します。理論的な背景と利用シナリオについては、論文 [Large-Scale Metric Computation in Online Controlled Experiment Platform](https://arxiv.org/pdf/2405.08411) を参照してください。 - - +NumericIndexedVector は、ベクトルをカプセル化し、ベクトルの集約演算および要素ごとの演算を実装する抽象データ構造です。ストレージ方式として Bit-Sliced Index を利用します。理論的背景およびユースケースについては、論文 [Large-Scale Metric Computation in Online Controlled Experiment Platform](https://arxiv.org/pdf/2405.08411) を参照してください。 ## BSI {#bit-sliced-index} -BSI(Bit-Sliced Index)ストレージ方式では、データは[Bit-Sliced Index](https://dl.acm.org/doi/abs/10.1145/253260.253268)として保存され、その後[Roaring Bitmap](https://github.com/RoaringBitmap/RoaringBitmap)を用いて圧縮されます。集約演算および要素ごとの演算は圧縮データに対して直接実行され、ストレージおよびクエリの効率を大幅に向上させることができます。 - -ベクトルはインデックスとそれに対応する値を保持します。以下は、BSI ストレージモードにおけるこのデータ構造の特徴と制約です。 - -- インデックスタイプは `UInt8`、`UInt16`、`UInt32` のいずれかです。**注:** Roaring Bitmap の 64 ビット実装の性能を考慮し、BSI フォーマットは `UInt64`/`Int64` をサポートしません。 -- 値の型は `Int8`、`Int16`、`Int32`、`Int64`、`UInt8`、`UInt16`、`UInt32`、`UInt64`、`Float32`、`Float64` のいずれかです。**注:** 値の型は自動的に拡張されません。たとえば、値の型として `UInt8` を使用した場合、`UInt8` の容量を超える合計値は、より高い型に昇格されるのではなくオーバーフローを引き起こします。同様に、整数に対する演算は整数の結果を返します(例: 除算は自動的に浮動小数点の結果に変換されません)。したがって、値の型は事前に計画・設計しておくことが重要です。実運用のシナリオでは、浮動小数点型(`Float32`/`Float64`)が一般的に使用されます。 -- 同じインデックスタイプおよび値の型を持つ 2 つのベクトルのみが演算を行うことができます。 -- 下位ストレージ層では Bit-Sliced Index を使用し、ビットマップはインデックスを保持します。ビットマップの具体的な実装として Roaring Bitmap が使用されます。ベストプラクティスとしては、圧縮率とクエリ性能を最大化するために、インデックスをできるだけ少数の Roaring Bitmap コンテナに集中させることが推奨されます。 -- Bit-Sliced Index の仕組みでは、値は 2 進数に変換されます。浮動小数点型については固定小数点表現による変換が行われるため、精度が損なわれる可能性があります。精度は、小数部に使用するビット数をカスタマイズすることで調整でき、デフォルトは 24 ビットであり、ほとんどのシナリオで十分です。集約関数 groupNumericIndexedVector の `-State` 版を用いて NumericIndexedVector を構築する際に、整数部と小数部に使用するビット数をカスタマイズできます。 -- インデックスには、非ゼロ値を持つもの、ゼロ値を持つもの、存在しないものの 3 通りがあります。NumericIndexedVector では、非ゼロ値とゼロ値のみが保存されます。さらに、2 つの NumericIndexedVector 間の要素ごとの演算において、存在しないインデックスの値は 0 として扱われます。除算のシナリオでは、除数が 0 の場合、結果は 0 になります。 +BSI(Bit-Sliced Index)ストレージ方式では、データはまず [Bit-Sliced Index](https://dl.acm.org/doi/abs/10.1145/253260.253268) として保存され、その後 [Roaring Bitmap](https://github.com/RoaringBitmap/RoaringBitmap) を用いて圧縮されます。集約演算や要素単位(pointwise)の演算は圧縮データ上で直接実行されるため、ストレージ効率とクエリ効率を大幅に向上できます。 +ベクタにはインデックスとそれに対応する値が含まれます。BSI ストレージモードにおけるこのデータ構造の特徴と制約は次のとおりです。 +- インデックスタイプは `UInt8`、`UInt16`、`UInt32` のいずれかです。**注意:** Roaring Bitmap の 64 ビット実装の性能を考慮し、BSI フォーマットは `UInt64`/`Int64` をサポートしません。 +- 値の型は `Int8`、`Int16`、`Int32`、`Int64`、`UInt8`、`UInt16`、`UInt32`、`UInt64`、`Float32`、`Float64` のいずれかです。**注意:** 値の型は自動的には拡張されません。たとえば、値の型として `UInt8` を使用した場合、`UInt8` の容量を超える合計値は、より高い型に昇格されるのではなくオーバーフローします。同様に、整数に対する演算は整数結果を返します(たとえば、除算は自動的に浮動小数点結果に変換されません)。したがって、値の型は事前に計画・設計しておくことが重要です。実運用シナリオでは、浮動小数点型(`Float32`/`Float64`)が一般的に使用されます。 +- 同じインデックスタイプおよび値の型を持つ 2 つのベクタ同士でのみ演算を行えます。 +- 下層のストレージは Bit-Sliced Index を使用し、インデックスをビットマップとして保持します。ビットマップの具体的な実装として Roaring Bitmap が使用されます。ベストプラクティスとしては、圧縮率とクエリ性能を最大化するために、可能な限りインデックスを少数の Roaring Bitmap コンテナに集中させることが推奨されます。 +- Bit-Sliced Index のメカニズムでは、値は二進数に変換されます。浮動小数点型に対しては固定小数点表現による変換を行うため、精度が失われる可能性があります。精度は、小数部に使用するビット数をカスタマイズすることで調整可能であり、デフォルトは 24 ビットです。これはほとんどのシナリオに十分です。集約関数 groupNumericIndexedVector によって `-State` を伴う NumericIndexedVector を構築する際に、整数部ビット数と小数部ビット数をカスタマイズできます。 +- インデックスには、非ゼロ値、ゼロ値、存在しないものの 3 パターンがあります。NumericIndexedVector では、非ゼロ値とゼロ値のみが保存されます。さらに、2 つの NumericIndexedVector 間での要素単位演算では、存在しないインデックスの値は 0 とみなされます。除算のシナリオでは、除数がゼロの場合、結果はゼロになります。 ## numericIndexedVector オブジェクトを作成する {#create-numeric-indexed-vector-object} -この構造を作成する方法は 2 つあります。1 つは、集約関数 `groupNumericIndexedVector` に `-State` を付けて使用する方法です。 -追加の条件を指定できるように、接尾辞 `-if` を付けることができます。 -集約関数は、その条件を満たす行のみを処理します。 -もう 1 つは、`numericIndexedVectorBuild` を使用して Map から構築する方法です。 -`groupNumericIndexedVectorState` 関数では、パラメータによって整数ビット数と小数ビット数をカスタマイズできますが、`numericIndexedVectorBuild` にはその機能はありません。 - - +この構造を作成する方法は 2 通りあります。1 つは、集約関数 `groupNumericIndexedVector` に `-State` を付けて使用する方法です。 +追加の条件を指定するには、サフィックスとして `-if` を付けることができます。 +この集約関数は、その条件を満たした行のみを処理します。 +もう 1 つは、`numericIndexedVectorBuild` を使って map から構築する方法です。 +`groupNumericIndexedVectorState` 関数では、パラメータを通じて整数部および小数部のビット数をカスタマイズできますが、`numericIndexedVectorBuild` ではできません。 ## groupNumericIndexedVector -2 つのデータ列から NumericIndexedVector を構築し、すべての値の合計を `Float64` 型で返します。末尾に `State` を付けた場合は、NumericIndexedVector オブジェクトを返します。 +2 つのデータ列から NumericIndexedVector を構築し、すべての値の合計を `Float64` 型で返します。末尾にサフィックス `State` を付けた場合は、NumericIndexedVector オブジェクトを返します。 **構文** @@ -52,26 +44,26 @@ groupNumericIndexedVectorState(type, integer_bit_num, fraction_bit_num)(col1, co **パラメータ** -* `type`: 文字列型、省略可能。ストレージ形式を指定します。現在サポートされているのは `'BSI'` のみです。 -* `integer_bit_num`: `UInt32`、省略可能。`'BSI'` ストレージ形式で有効で、このパラメータは整数部に使用するビット数を示します。インデックス型が整数型の場合、デフォルト値はインデックスの格納に使用されるビット数に一致します。たとえば、インデックス型が `UInt16` の場合、デフォルトの `integer_bit_num` は 16 です。インデックス型が `Float32` および `Float64` の場合、`integer_bit_num` のデフォルト値は 40 であるため、表現可能なデータの整数部の範囲は `[-2^39, 2^39 - 1]` となります。有効な範囲は `[0, 64]` です。 -* `fraction_bit_num`: `UInt32`、省略可能。`'BSI'` ストレージ形式で有効で、このパラメータは小数部に使用するビット数を示します。値の型が整数の場合、デフォルト値は 0 です。値の型が `Float32` または `Float64` の場合、デフォルト値は 24 です。有効な範囲は `[0, 24]` です。 -* さらに、`integer_bit_num` + `fraction_bit_num` の有効な範囲は `[0, 64]` であるという制約があります。 +* `type`: String、省略可能。ストレージ形式を指定します。現在サポートされているのは `'BSI'` のみです。 +* `integer_bit_num`: `UInt32`、省略可能。`'BSI'` ストレージ形式で有効であり、このパラメータは整数部に使用されるビット数を示します。インデックスの型が整数型の場合、デフォルト値はインデックスの格納に使用されるビット数に対応します。例えば、インデックスの型が UInt16 の場合、デフォルトの `integer_bit_num` は 16 です。インデックスの型が Float32 および Float64 の場合、`integer_bit_num` のデフォルト値は 40 であり、そのため表現可能なデータの整数部は `[-2^39, 2^39 - 1]` の範囲になります。許可される範囲は `[0, 64]` です。 +* `fraction_bit_num`: `UInt32`、省略可能。`'BSI'` ストレージ形式で有効であり、このパラメータは小数部に使用されるビット数を示します。値の型が整数の場合、デフォルト値は 0 です。値の型が Float32 または Float64 の場合、デフォルト値は 24 です。有効な範囲は `[0, 24]` です。 +* さらに、`integer_bit_num + fraction_bit_num` の有効な範囲も `[0, 64]` であるという制約があります。 * `col1`: インデックス列。サポートされる型: `UInt8`/`UInt16`/`UInt32`/`Int8`/`Int16`/`Int32`。 * `col2`: 値列。サポートされる型: `Int8`/`Int16`/`Int32`/`Int64`/`UInt8`/`UInt16`/`UInt32`/`UInt64`/`Float32`/`Float64`。 **戻り値** -すべての値の合計を表す `Float64` 型の値。 +すべての値の合計を表す `Float64` 値。 **例** テストデータ: ```text -ユーザーID プレイ時間 -1 10 -2 20 -3 30 +UserID PlayTime +1 10 +2 20 +3 30 ``` クエリと結果: @@ -99,642 +91,14 @@ SELECT groupNumericIndexedVectorStateIf('BSI', 32, 0)(UserID, PlayTime, day = '2 ``` :::note -このドキュメントは、`system.functions` システムテーブルから自動生成されたものです。 +このドキュメントは `system.functions` システムテーブルから生成されています。 ::: {/* - これらのタグは system テーブルからドキュメントを生成するために使用されており、削除しないでください。 + 以下のタグは system テーブルからドキュメントを自動生成するために使用されるものであり、削除しないでください。 詳細については https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md を参照してください。 */ } - {/*AUTOGENERATED_START*/ } -## numericIndexedVectorAllValueSum - -導入バージョン: v25.7 - -`numericIndexedVector` のすべての値の合計を返します。 - -**構文** - -```sql -numericIndexedVectorAllValueSum(v) -``` - -**引数** - -* `v` — [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**戻り値** - -合計を返します。[`Float64`](/sql-reference/data-types/float) - -**例** - -**使用例** - -```sql title=Query -SELECT numericIndexedVectorAllValueSum(numericIndexedVectorBuild(mapFromArrays([1, 2, 3], [10, 20, 30]))) AS res; -``` - -```response title=Response -┌─res─┐ -│ 60 │ -└─────┘ -``` - - -## numericIndexedVectorBuild - -導入バージョン: v25.7 - -`map` から `NumericIndexedVector` を作成します。`map` のキーはベクターのインデックスを表し、`map` の値はベクターの要素を表します。 - -**構文** - -```sql -numericIndexedVectorBuild(map) -``` - -**引数** - -* `map` — インデックスから値へのマッピング。[`Map`](/sql-reference/data-types/map) - -**戻り値** - -NumericIndexedVector 型のオブジェクトを返します。[`AggregateFunction`](/sql-reference/data-types/aggregatefunction) - -**例** - -**使用例** - -```sql title=Query -SELECT numericIndexedVectorBuild(mapFromArrays([1, 2, 3], [10, 20, 30])) AS res, toTypeName(res); -``` - -```response title=Response -┌─res─┬─toTypeName(res)────────────────────────────────────────────┐ -│ │ AggregateFunction(groupNumericIndexedVector, UInt8, UInt8) │ -└─────┴────────────────────────────────────────────────────────────┘ -``` - - -## numericIndexedVectorCardinality - -導入: v25.7 - -numericIndexedVector のカーディナリティ(一意なインデックス数)を返します。 - -**構文** - -```sql -numericIndexedVectorCardinality(v) -``` - -**引数** - -* `v` — [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**戻り値** - -ユニークなインデックスの数を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT numericIndexedVectorCardinality(numericIndexedVectorBuild(mapFromArrays([1, 2, 3], [10, 20, 30]))) AS res; -``` - -```response title=Response -┌─res─┐ -│ 3 │ -└─────┘ -``` - - -## numericIndexedVectorGetValue - -導入バージョン: v25.7 - -`numericIndexedVector` から、指定したインデックスの値を取得します。 - -**構文** - -```sql -numericIndexedVectorGetValue(v, i) -``` - -**引数** - -* `v` — [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) -* `i` — 取得する値のインデックス。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返される値** - -NumericIndexedVector の要素と同じ型の数値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) - -**例** - -**使用例** - -```sql title=Query -SELECT numericIndexedVectorGetValue(numericIndexedVectorBuild(mapFromArrays([1, 2, 3], [10, 20, 30])), 3) AS res; -``` - -```response title=Response -┌─res─┐ -│ 30 │ -└─────┘ -``` - - -## numericIndexedVectorPointwiseAdd - -導入バージョン: v25.7 - -numericIndexedVector と別の numericIndexedVector、または数値定数との要素ごとの加算を実行します。 - -**構文** - -```sql -numericIndexedVectorPointwiseAdd(v1, v2) -``` - -**引数** - -* `v1` — [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) -* `v2` — 数値定数または [`numericIndexedVector`] オブジェクト。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**戻り値** - -新しい [`numericIndexedVector`] オブジェクトを返します。[`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**例** - -**使用例** - -```sql title=Query -WITH - numericIndexedVectorBuild(mapFromArrays([1, 2, 3], arrayMap(x -> toInt32(x), [10, 20, 30]))) AS vec1, - numericIndexedVectorBuild(mapFromArrays([2, 3, 4], arrayMap(x -> toInt32(x), [10, 20, 30]))) AS vec2 -SELECT - numericIndexedVectorToMap(numericIndexedVectorPointwiseAdd(vec1, vec2)) AS res1, - numericIndexedVectorToMap(numericIndexedVectorPointwiseAdd(vec1, 2)) AS res2; -``` - -```response title=Response -┌─res1──────────────────┬─res2─────────────┐ -│ {1:10,2:30,3:50,4:30} │ {1:12,2:22,3:32} │ -└───────────────────────┴──────────────────┘ -``` - - -## numericIndexedVectorPointwiseDivide - -導入バージョン: v25.7 - -`numericIndexedVector` と、別の `numericIndexedVector` もしくは数値定数との要素ごとの除算を行います。 - -**構文** - -```sql -numericIndexedVectorPointwiseDivide(v1, v2) -``` - -**引数** - -* `v1` — [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) -* `v2` — 数値定数または `numericIndexedVector` オブジェクト。[`(U)Int*`](/sql-reference/data-types/int-uint)、[`Float*`](/sql-reference/data-types/float)、または [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) のいずれか。 - -**戻り値** - -新しい `numericIndexedVector` オブジェクトを返します。[`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**例** - -**使用例** - -```sql title=Query -with - numericIndexedVectorBuild(mapFromArrays([1, 2, 3], arrayMap(x -> toFloat64(x), [10, 20, 30]))) as vec1, - numericIndexedVectorBuild(mapFromArrays([2, 3, 4], arrayMap(x -> toFloat64(x), [10, 20, 30]))) as vec2 -SELECT - numericIndexedVectorToMap(numericIndexedVectorPointwiseDivide(vec1, vec2)) AS res1, - numericIndexedVectorToMap(numericIndexedVectorPointwiseDivide(vec1, 2)) AS res2; -``` - -```response title=Response -┌─res1────────┬─res2────────────┐ -│ {2:2,3:1.5} │ {1:5,2:10,3:15} │ -└─────────────┴─────────────────┘ -``` - - -## numericIndexedVectorPointwiseEqual - -導入バージョン: v25.7 - -`numericIndexedVector` と、別の `numericIndexedVector` もしくは数値定数との要素ごとの比較を行います。 -結果として、値が等しい要素のインデックスを格納し、対応する値がすべて 1 に設定された `numericIndexedVector` を返します。 - -**構文** - -```sql -numericIndexedVectorPointwiseEqual(v1, v2) -``` - -**引数** - -* `v1` — [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) -* `v2` — 数値定数または `numericIndexedVector` オブジェクト。[`(U)Int*`](/sql-reference/data-types/int-uint) 型、[`Float*`](/sql-reference/data-types/float) 型、または [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**戻り値** - -新しい `numericIndexedVector` オブジェクトを返します。[`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**例** - -*** - -```sql title=Query -with - numericIndexedVectorBuild(mapFromArrays([1, 2, 3], arrayMap(x -> toFloat64(x), [10, 20, 30]))) as vec1, - numericIndexedVectorBuild(mapFromArrays([2, 3, 4], arrayMap(x -> toFloat64(x), [20, 20, 30]))) as vec2 -SELECT - numericIndexedVectorToMap(numericIndexedVectorPointwiseEqual(vec1, vec2)) AS res1, - numericIndexedVectorToMap(numericIndexedVectorPointwiseEqual(vec1, 20)) AS res2; -``` - -```response title=Response -┌─res1──┬─res2──┐ -│ {2:1} │ {2:1} │ -└───────┴───────┘ -``` - - -## numericIndexedVectorPointwiseGreater - -導入バージョン: v25.7 - -numericIndexedVector と、別の numericIndexedVector もしくは数値定数との間で要素ごとの比較を行います。 -結果は、先頭のベクターの値が 2 番目のベクターの値より大きい要素のインデックスを含む numericIndexedVector となり、対応する値はすべて 1 に設定されます。 - -**構文** - -```sql -numericIndexedVectorPointwiseGreater(v1, v2) -``` - -**引数** - -* `v1` — [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) -* `v2` — 数値リテラルまたは `numericIndexedVector` オブジェクト。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**戻り値** - -新しい [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) オブジェクトを返します。 - -**例** - -**使用例** - -```sql title=Query -with - numericIndexedVectorBuild(mapFromArrays([1, 2, 3], arrayMap(x -> toFloat64(x), [10, 20, 50]))) as vec1, - numericIndexedVectorBuild(mapFromArrays([2, 3, 4], arrayMap(x -> toFloat64(x), [20, 40, 30]))) as vec2 -SELECT - numericIndexedVectorToMap(numericIndexedVectorPointwiseGreater(vec1, vec2)) AS res1, - numericIndexedVectorToMap(numericIndexedVectorPointwiseGreater(vec1, 20)) AS res2; -``` - -```response title=Response -┌─res1──────┬─res2──┐ -│ {1:1,3:1} │ {3:1} │ -└───────────┴───────┘ -``` - - -## numericIndexedVectorPointwiseGreaterEqual - -導入バージョン: v25.7 - -`numericIndexedVector` と、別の `numericIndexedVector` または数値定数との間で要素ごとの比較を実行します。 -結果は、1つ目のベクターの値が2つ目のベクターの値以上となるインデックスのみを含む `numericIndexedVector` であり、これらのインデックスに対応する値はすべて 1 に設定されます。 - -**構文** - -```sql -numericIndexedVectorPointwiseGreaterEqual(v1, v2) -``` - -**引数** - -* `v1` — [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) -* `v2` — 数値定数または `numericIndexedVector` オブジェクト。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**戻り値** - -新しい `numericIndexedVector` オブジェクトを返します。[`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**例** - -**使用例** - -```sql title=Query -with - numericIndexedVectorBuild(mapFromArrays([1, 2, 3], arrayMap(x -> toFloat64(x), [10, 20, 50]))) as vec1, - numericIndexedVectorBuild(mapFromArrays([2, 3, 4], arrayMap(x -> toFloat64(x), [20, 40, 30]))) as vec2 -SELECT - numericIndexedVectorToMap(numericIndexedVectorPointwiseGreaterEqual(vec1, vec2)) AS res1, - numericIndexedVectorToMap(numericIndexedVectorPointwiseGreaterEqual(vec1, 20)) AS res2; -``` - -```response title=Response -┌─res1──────────┬─res2──────┐ -│ {1:1,2:1,3:1} │ {2:1,3:1} │ -└───────────────┴───────────┘ -``` - - -## numericIndexedVectorPointwiseLess - -導入バージョン: v25.7 - -`numericIndexedVector` と、別の `numericIndexedVector` もしくは数値定数との要素ごとの比較を実行します。 -結果は、最初のベクターの値が 2 番目のベクターの値より小さいインデックスを含む `numericIndexedVector` であり、そのインデックスに対応する値はすべて 1 に設定されます。 - -**構文** - -```sql -numericIndexedVectorPointwiseLess(v1, v2) -``` - -**引数** - -* `v1` — [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) -* `v2` — 数値定数または `numericIndexedVector` オブジェクト。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**返される値** - -新しい [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) オブジェクトを返します。 - -**例** - -**使用例** - -```sql title=Query -with - numericIndexedVectorBuild(mapFromArrays([1, 2, 3], arrayMap(x -> toFloat64(x), [10, 20, 30]))) as vec1, - numericIndexedVectorBuild(mapFromArrays([2, 3, 4], arrayMap(x -> toFloat64(x), [20, 40, 30]))) as vec2 -SELECT - numericIndexedVectorToMap(numericIndexedVectorPointwiseLess(vec1, vec2)) AS res1, - numericIndexedVectorToMap(numericIndexedVectorPointwiseLess(vec1, 20)) AS res2; -``` - -```response title=Response -┌─res1──────┬─res2──┐ -│ {3:1,4:1} │ {1:1} │ -└───────────┴───────┘ -``` - - -## numericIndexedVectorPointwiseLessEqual - -導入バージョン: v25.7 - -`numericIndexedVector` と、別の `numericIndexedVector` もしくは数値定数との要素ごとの比較を実行します。 -結果は、1 番目のベクターの値が 2 番目のベクターの値以下であるインデックスのみを含み、対応する値がすべて 1 に設定された `numericIndexedVector` です。 - -**構文** - -```sql -numericIndexedVectorPointwiseLessEqual(v1, v2) -``` - -**引数** - -* `v1` — [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) -* `v2` — 数値定数、または [`(U)Int*`](/sql-reference/data-types/int-uint)、[`Float*`](/sql-reference/data-types/float)、[`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) のいずれかの型を持つ numericIndexedVector オブジェクト - -**戻り値** - -新しい [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) オブジェクトを返します。 - -**例** - -**使用例** - -```sql title=Query -with - numericIndexedVectorBuild(mapFromArrays([1, 2, 3], arrayMap(x -> toFloat64(x), [10, 20, 30]))) as vec1, - numericIndexedVectorBuild(mapFromArrays([2, 3, 4], arrayMap(x -> toFloat64(x), [20, 40, 30]))) as vec2 -SELECT - numericIndexedVectorToMap(numericIndexedVectorPointwiseLessEqual(vec1, vec2)) AS res1, - numericIndexedVectorToMap(numericIndexedVectorPointwiseLessEqual(vec1, 20)) AS res2; -``` - -```response title=Response -┌─res1──────────┬─res2──────┐ -│ {2:1,3:1,4:1} │ {1:1,2:1} │ -└───────────────┴───────────┘ -``` - - -## numericIndexedVectorPointwiseMultiply - -導入バージョン: v25.7 - -numericIndexedVector と、別の numericIndexedVector もしくは数値定数との要素ごとの乗算を実行します。 - -**構文** - -```sql -numericIndexedVectorPointwiseMultiply(v1, v2) -``` - -**引数** - -* `v1` — [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) -* `v2` — 数値定数または `numericIndexedVector` オブジェクト。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**返される値** - -新しい `numericIndexedVector` オブジェクトを返します。[`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**例** - -*** - -```sql title=Query -with - numericIndexedVectorBuild(mapFromArrays([1, 2, 3], arrayMap(x -> toInt32(x), [10, 20, 30]))) as vec1, - numericIndexedVectorBuild(mapFromArrays([2, 3, 4], arrayMap(x -> toInt32(x), [10, 20, 30]))) as vec2 -SELECT - numericIndexedVectorToMap(numericIndexedVectorPointwiseMultiply(vec1, vec2)) AS res1, - numericIndexedVectorToMap(numericIndexedVectorPointwiseMultiply(vec1, 2)) AS res2; -``` - -```response title=Response -┌─res1──────────┬─res2─────────────┐ -│ {2:200,3:600} │ {1:20,2:40,3:60} │ -└───────────────┴──────────────────┘ -``` - - -## numericIndexedVectorPointwiseNotEqual - -導入バージョン: v25.7 - -`numericIndexedVector` と、別の `numericIndexedVector` もしくは数値定数との間で要素単位の比較を実行します。 -結果は、値が等しくないインデックスのみを含み、その位置の値がすべて 1 に設定された `numericIndexedVector` になります。 - -**構文** - -```sql -numericIndexedVectorPointwiseNotEqual(v1, v2) -``` - -**引数** - -* `v1` — [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) -* `v2` — 数値定数または `numericIndexedVector` オブジェクト。[`(U)Int*`](/sql-reference/data-types/int-uint) 型、[`Float*`](/sql-reference/data-types/float) 型、または [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**返される値** - -新しい [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) オブジェクトを返します。 - -**例** - -**使用例** - -```sql title=Query -with - numericIndexedVectorBuild(mapFromArrays([1, 2, 3], arrayMap(x -> toFloat64(x), [10, 20, 30]))) as vec1, - numericIndexedVectorBuild(mapFromArrays([2, 3, 4], arrayMap(x -> toFloat64(x), [20, 20, 30]))) as vec2 -SELECT - numericIndexedVectorToMap(numericIndexedVectorPointwiseNotEqual(vec1, vec2)) AS res1, - numericIndexedVectorToMap(numericIndexedVectorPointwiseNotEqual(vec1, 20)) AS res2; -``` - -```response title=Response -┌─res1──────────┬─res2──────┐ -│ {1:1,3:1,4:1} │ {1:1,3:1} │ -└───────────────┴───────────┘ -``` - - -## numericIndexedVectorPointwiseSubtract - -導入バージョン: v25.7 - -`numericIndexedVector` と、別の `numericIndexedVector` または数値定数との間で要素ごとの減算を行います。 - -**構文** - -```sql -numericIndexedVectorPointwiseSubtract(v1, v2) -``` - -**引数** - -* `v1` — [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) -* `v2` — 数値の定数または `numericIndexedVector` オブジェクト。[`(U)Int*`](/sql-reference/data-types/int-uint)、[`Float*`](/sql-reference/data-types/float)、または [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**戻り値** - -新しい `numericIndexedVector` オブジェクトを返します。[`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**例** - -**使用例** - -```sql title=Query -WITH - numericIndexedVectorBuild(mapFromArrays([1, 2, 3], arrayMap(x -> toInt32(x), [10, 20, 30]))) AS vec1, - numericIndexedVectorBuild(mapFromArrays([2, 3, 4], arrayMap(x -> toInt32(x), [10, 20, 30]))) AS vec2 -SELECT - numericIndexedVectorToMap(numericIndexedVectorPointwiseSubtract(vec1, vec2)) AS res1, - numericIndexedVectorToMap(numericIndexedVectorPointwiseSubtract(vec1, 2)) AS res2; -``` - -```response title=Response -┌─res1───────────────────┬─res2────────────┐ -│ {1:10,2:10,3:10,4:-30} │ {1:8,2:18,3:28} │ -└────────────────────────┴─────────────────┘ -``` - - -## numericIndexedVectorShortDebugString - -導入バージョン:v25.7 - -numericIndexedVector の内部情報を JSON 形式で返します。 -この関数は主にデバッグ用途で使用されます。 - -**構文** - -```sql -numericIndexedVectorShortDebugString(v) -``` - -**引数** - -* `v` — [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**戻り値** - -デバッグ情報を含む JSON 文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT numericIndexedVectorShortDebugString(numericIndexedVectorBuild(mapFromArrays([1, 2, 3], [10, 20, 30]))) AS res\G; -``` - -```response title=Response -1 行目: -────── -res: {"vector_type":"BSI","index_type":"char8_t","value_type":"char8_t","integer_bit_num":8,"fraction_bit_num":0,"zero_indexes_info":{"cardinality":"0"},"non_zero_indexes_info":{"total_cardinality":"3","all_value_sum":60,"number_of_bitmaps":"8","bitmap_info":{"cardinality":{"0":"0","1":"2","2":"2","3":"2","4":"2","5":"0","6":"0","7":"0"}}}} -``` - - -## numericIndexedVectorToMap - -導入バージョン: v25.7 - -numericIndexedVector を map 型に変換します。 - -**構文** - -```sql -numericIndexedVectorToMap(v) -``` - -**引数** - -* `v` — [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**戻り値** - -インデックスと値のペアからなるマップを返します。[`Map`](/sql-reference/data-types/map) - -**例** - -**使用例** - -```sql title=Query -SELECT numericIndexedVectorToMap(numericIndexedVectorBuild(mapFromArrays([1, 2, 3], [10, 20, 30]))) AS res; -``` - -```response title=Response -┌─res──────────────┐ -│ {1:10,2:20,3:30} │ -└──────────────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/other-functions.md b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/other-functions.md index b935912038c..7f2a61b0974 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/other-functions.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/other-functions.md @@ -14,5458 +14,15 @@ import DeprecatedBadge from '@theme/badges/DeprecatedBadge'; # その他の関数 :::note -以下の関数のドキュメントは、`system.functions` システムテーブルから自動生成されています。 +以下の関数に関するドキュメントは、`system.functions` システムテーブルから生成されています。 ::: {/* - 以下のタグ内のコンテンツは、ドキュメントフレームワークのビルド時に - system.functions から自動生成されたドキュメントで置き換えられます。タグを変更または削除しないでください。 - 詳細は次を参照してください: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md + 以下のタグの内部の内容は、ドキュメントフレームワークのビルド時に + system.functions から自動生成されたドキュメントに置き換えられます。タグを変更または削除しないでください。 + 詳細は https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md を参照してください。 */ } - {/*AUTOGENERATED_START*/ } -## FQDN - -導入バージョン: v20.1 - -ClickHouse サーバーの完全修飾ドメイン名を返します。 - -**構文** - -```sql -fqdn() -``` - -**別名**: `fullHostName` - -**引数** - -* なし。 - -**戻り値** - -ClickHouse サーバーの完全修飾ドメイン名を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT fqdn() -``` - -```response title=Response -┌─FQDN()──────────────────────────┐ -│ clickhouse.us-east-2.internal │ -└─────────────────────────────────┘ -``` - - -## MACNumToString - -導入バージョン: v1.1 - -[`UInt64`](/sql-reference/data-types/int-uint) 数値をビッグエンディアン形式の MAC アドレスとして解釈します。 -対応する MAC アドレスを、`AA:BB:CC:DD:EE:FF`(コロン区切りの 16 進数表記)の文字列として返します。 - -**構文** - -```sql -MACNumToString(num) -``` - -**引数** - -* `num` — UInt64 の整数値。[`UInt64`](/sql-reference/data-types/int-uint) - -**戻り値** - -AA:BB:CC:DD:EE:FF 形式の MAC アドレスを返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT MACNumToString(149809441867716) AS mac_address; -``` - -```response title=Response -┌─mac_address───────┐ -│ 88:00:11:22:33:44 │ -└───────────────────┘ -``` - - -## MACStringToNum - -導入バージョン: v1.1 - -MACNumToString の逆関数です。MAC アドレスの形式が無効な場合は 0 を返します。 - -**構文** - -```sql -MACStringToNum(s) -``` - -**引数** - -* `s` — MAC アドレスの文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -`UInt64` 型の数値を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT MACStringToNum('01:02:03:04:05:06') AS mac_numeric; -``` - -```response title=Response -1108152157446 -``` - - -## MACStringToOUI - -導入バージョン: v1.1 - -AA:BB:CC:DD:EE:FF 形式(コロン区切りの16進数)で表された MAC アドレスを受け取り、先頭3オクテットを UInt64 型の整数値として返します。MAC アドレスの形式が不正な場合は 0 を返します。 - -**構文** - -```sql -MACStringToOUI(s) -``` - -**引数** - -* `s` — MAC アドレス文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -先頭 3 オクテットを `UInt64` 型の数値として返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT MACStringToOUI('00:50:56:12:34:56') AS oui; -``` - -```response title=Response -20566 -``` - - -## __filterContains - -導入バージョン: v25.10 - -JOIN のランタイムフィルタリング用の専用関数です。 - -**構文** - -```sql -__filterContains(filter_name, key) -``` - -**引数** - -* `filter_name` — ランタイムフィルタの内部名。BuildRuntimeFilterStep によって構築されます。[`String`](/sql-reference/data-types/string) -* `key` — フィルタに含まれているかどうかを検査する任意の型の値 - -**戻り値** - -フィルタ内にキーが存在する場合は True を返します。[`Bool`](/sql-reference/data-types/boolean) - -**使用例** - -**例** - -```sql title=Query -この関数はユーザークエリでの使用を想定していません。最適化処理中にクエリプランへ追加される可能性があります。 -``` - -```response title=Response -``` - - -## __patchPartitionID - -導入バージョン: v25.5 - -内部関数です。パーツ名と、パッチパーツの列名のハッシュ値を受け取り、パッチパーツが属するパーティション名を返します。引数には正しいパーツ名を指定する必要があり、そうでない場合の動作は未定義です。 - -**構文** - -```sql -``` - -**引数** - -* なし - -**戻り値** - -**例** - - -## authenticatedUser - -導入バージョン: v25.11 - -EXECUTE AS コマンドを使用してセッションユーザーが切り替えられている場合、この関数は認証およびセッションの作成に使用された元のユーザー名を返します。 -エイリアス: authUser() - -**構文** - -```sql -authenticatedUser() -``` - -**別名**: `authUser` - -**引数** - -* なし。 - -**戻り値** - -認証されたユーザーの名前。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -EXECUTE as u1; - SELECT currentUser(), authenticatedUser(); -``` - -```response title=Response -┌─currentUser()─┬─authenticatedUser()─┐ -│ u1 │ default │ -└───────────────┴─────────────────────┘ -``` - - -## bar - -導入バージョン: v1.1 - -棒グラフを作成します。 -幅が (x - min) に比例し、x = max のとき幅が width 文字となる帯を描画します。 -帯は、1 文字幅を 1/8 に分割した精度で描画されます。 - -**構文** - -```sql -bar(x, min, max[, width]) -``` - -**引数** - -* `x` — 表示するサイズ。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) -* `min` — 最小値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) -* `max` — 最大値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) -* `width` — 省略可能。バーの幅(文字数)。デフォルトは `80`。[`const (U)Int*`](/sql-reference/data-types/int-uint) または [`const Float*`](/sql-reference/data-types/float) または [`const Decimal`](/sql-reference/data-types/decimal) - -**返される値** - -Unicode 文字を用いたバーを表す文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT -toHour(EventTime) AS h, -count() AS c, -bar(c, 0, 600000, 20) AS bar -FROM test.hits -GROUP BY h -ORDER BY h ASC -``` - -```response title=Response -┌──h─┬──────c─┬─bar────────────────┐ -│ 0 │ 292907 │ █████████▋ │ -│ 1 │ 180563 │ ██████ │ -│ 2 │ 114861 │ ███▋ │ -│ 3 │ 85069 │ ██▋ │ -│ 4 │ 68543 │ ██▎ │ -│ 5 │ 78116 │ ██▌ │ -│ 6 │ 113474 │ ███▋ │ -│ 7 │ 170678 │ █████▋ │ -│ 8 │ 278380 │ █████████▎ │ -│ 9 │ 391053 │ █████████████ │ -│ 10 │ 457681 │ ███████████████▎ │ -│ 11 │ 493667 │ ████████████████▍ │ -│ 12 │ 509641 │ ████████████████▊ │ -│ 13 │ 522947 │ █████████████████▍ │ -│ 14 │ 539954 │ █████████████████▊ │ -│ 15 │ 528460 │ █████████████████▌ │ -│ 16 │ 539201 │ █████████████████▊ │ -│ 17 │ 523539 │ █████████████████▍ │ -│ 18 │ 506467 │ ████████████████▊ │ -│ 19 │ 520915 │ █████████████████▎ │ -│ 20 │ 521665 │ █████████████████▍ │ -│ 21 │ 542078 │ ██████████████████ │ -│ 22 │ 493642 │ ████████████████▍ │ -│ 23 │ 400397 │ █████████████▎ │ -└────┴────────┴────────────────────┘ -``` - - -## blockNumber - -導入バージョン: v1.1 - -行を含んでいる[ブロック](../../development/architecture.md#block)の単調に増加するシーケンス番号を返します。 -返されるブロック番号の更新はベストエフォートで行われるため、完全に正確でない場合があります。 - -**構文** - -```sql -blockNumber() -``` - -**引数** - -* なし。 - -**戻り値** - -行が格納されているデータブロックのシーケンス番号。[`UInt64`](/sql-reference/data-types/int-uint) - -**使用例** - -**基本的な使い方** - -```sql title=Query -SELECT blockNumber() -FROM -( - SELECT * - FROM system.numbers - LIMIT 10 -) SETTINGS max_block_size = 2 -``` - -```response title=Response -┌─blockNumber()─┐ -│ 7 │ -│ 7 │ -└───────────────┘ -┌─blockNumber()─┐ -│ 8 │ -│ 8 │ -└───────────────┘ -┌─blockNumber()─┐ -│ 9 │ -│ 9 │ -└───────────────┘ -┌─blockNumber()─┐ -│ 10 │ -│ 10 │ -└───────────────┘ -┌─blockNumber()─┐ -│ 11 │ -│ 11 │ -└───────────────┘ -``` - - -## blockSerializedSize - -導入バージョン: v20.3 - -ディスク上にある値ブロックの非圧縮サイズ(バイト単位)を返します。 - -**構文** - -```sql -blockSerializedSize(x1[, x2[, ...]]) -``` - -**引数** - -* `x1[, x2, ...]` — 非圧縮時のブロックサイズを取得する対象となる任意個数の値。[`Any`](/sql-reference/data-types) - -**返される値** - -圧縮なしで値のブロックがディスクに書き込まれる際のバイト数を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT blockSerializedSize(maxState(1)) AS x; -``` - -```response title=Response -┌─x─┐ -│ 2 │ -└───┘ -``` - - -## blockSize - -導入バージョン: v1.1 - -ClickHouse では、クエリは [blocks](/development/architecture#block)(チャンク)単位で処理されます。 -この関数は、呼び出されたブロックのサイズ(行数)を返します。 - -**構文** - -```sql -blockSize() -``` - -**引数** - -* なし。 - -**戻り値** - -現在のブロック内の行数を返します([`UInt64`](/sql-reference/data-types/int-uint))。 - -**例** - -**使用例** - -```sql title=Query -SELECT blockSize() -FROM system.numbers LIMIT 5 -``` - -```response title=Response -┌─blockSize()─┐ -│ 5 │ -│ 5 │ -│ 5 │ -│ 5 │ -│ 5 │ -└─────────────┘ -``` - - -## byteSize - -導入: v21.1 - -引数の非圧縮時におけるメモリ上のバイトサイズを推定して返します。 -`String` 型の引数に対しては、文字列の長さ + 8(長さ)を返します。 -関数が複数の引数を持つ場合は、それぞれのバイトサイズを合計します。 - -**構文** - -```sql -byteSize(arg1[, arg2, ...]) -``` - -**引数** - -* `arg1[, arg2, ...]` — 非圧縮時のバイトサイズを推定する対象となる、任意のデータ型の値。[`Any`](/sql-reference/data-types) - -**返り値** - -引数のメモリ上におけるバイトサイズの推定値を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT byteSize('string') -``` - -```response title=Response -┌─byteSize('string')─┐ -│ 15 │ -└────────────────────┘ -``` - -**複数引数** - -```sql title=Query -SELECT byteSize(NULL, 1, 0.3, '') -``` - -```response title=Response -┌─byteSize(NULL, 1, 0.3, '')─┐ -│ 19 │ -└────────────────────────────┘ -``` - - -## catboostEvaluate - -導入バージョン: v22.9 - -外部の CatBoost モデルを評価します。[CatBoost](https://catboost.ai) は、Yandex によって機械学習向けに開発されたオープンソースの勾配ブースティングライブラリです。 -CatBoost モデルのパスと、そのモデルに渡す引数(特徴量)を受け取ります。 - -**前提条件** - -1. CatBoost 評価ライブラリをビルドする - -CatBoost モデルを評価する前に、`libcatboostmodel.` ライブラリを利用可能にしておく必要があります。コンパイル手順については [CatBoost のドキュメント](https://catboost.ai/docs/concepts/c-plus-plus-api_dynamic-c-pluplus-wrapper.html) を参照してください。 - -次に、`libcatboostmodel.` へのパスを ClickHouse の設定で指定します。 - -```xml - -... - /path/to/libcatboostmodel.so -... - -``` - -セキュリティおよびアイソレーションの観点から、モデル評価はサーバープロセス内ではなく、clickhouse-library-bridge プロセス内で実行されます。 -`catboostEvaluate()` が最初に実行されるとき、サーバーはライブラリブリッジプロセスがまだ起動していない場合には新たに起動します。両プロセス間の通信は -HTTP インターフェイスを通じて行われます。デフォルトではポート `9012` が使用されます。ポート `9012` がすでに別のサービスに割り当てられている場合などには、 -以下のようにして別のポートを指定することができます。 - -```xml - - 9019 - -``` - -2. libcatboost を使用して catboost モデルを学習する - -catboost モデルの学習方法については、学習用データセットを使用した手順を含めて、[Training and applying models](https://catboost.ai/docs/features/training.html#training) を参照してください。 - -**構文** - -```sql -catboostEvaluate(path_to_model, feature_1[, feature_2, ..., feature_n]) -``` - -**引数** - -* `path_to_model` — CatBoost モデルファイルへのパス。[`const String`](/sql-reference/data-types/string) -* `feature` — 1 つ以上のモデル特徴量/引数。[`Float*`](/sql-reference/data-types/float) - -**返り値** - -モデル評価の結果を返します。[`Float64`](/sql-reference/data-types/float) - -**例** - -**catboostEvaluate** - -```sql title=Query -SELECT catboostEvaluate('/root/occupy.bin', Temperature, Humidity, Light, CO2, HumidityRatio) AS prediction FROM occupancy LIMIT 1 -``` - -```response title=Response -4.695691092573497 -``` - - -## colorOKLCHToSRGB - -導入バージョン: v25.7 - -**OKLCH** 知覚的色空間の色を、一般的な **sRGB** 色空間の色に変換します。 - -`L` が `[0...1]` の範囲外、`C` が負、または `H` が `[0...360]` の範囲外の場合、結果は実装依存です。 - -:::note -**OKLCH** は OKLab 色空間の円柱座標版です。 -その 3 つの座標は、`L`(明度。範囲 `[0...1]`)、`C`(クロマ(彩度)。`>= 0`)、`H`(色相。度で `[0...360]` の範囲)です。 -OKLab/OKLCH は、計算コストを低く抑えつつ、知覚的に一様になるように設計されています。 -::: - -この変換は [`colorSRGBToOKLCH`](#colorSRGBToOKLCH) の逆変換です: - -1. OKLCH から OKLab へ -2. OKLab から線形 sRGB へ -3. 線形 sRGB から sRGB へ - -2 番目の引数 `gamma` は最後の段階で使用されます。 - -OKLCH 空間における色と、それらが sRGB の色とどのように対応するかについては、[https://oklch.com/](https://oklch.com/) を参照してください。 - -**構文** - -```sql -colorOKLCHToSRGB(tuple [, gamma]) -``` - -**引数** - -* `tuple` — 数値 `L`、`C`、`H` からなる 3 つ組のタプル。`L` は範囲 `[0...1]`、`C >= 0`、`H` は範囲 `[0...360]`。[`Tuple(Float64, Float64, Float64)`](/sql-reference/data-types/tuple) -* `gamma` — 省略可。線形 sRGB を、各チャネル `x` に対して `(x ^ (1 / gamma)) * 255` を適用することで sRGB に戻す際に使用される指数。既定値は `2.2`。[`Float64`](/sql-reference/data-types/float) - -**戻り値** - -sRGB カラー値を表すタプル (R, G, B) を返します。[`Tuple(Float64, Float64, Float64)`](/sql-reference/data-types/tuple) - -**使用例** - -**OKLCH を sRGB に変換** - -```sql title=Query -SELECT colorOKLCHToSRGB((0.4466, 0.0991, 45.44), 2.2) AS rgb -WITH colorOKLCHToSRGB((0.7, 0.1, 54)) as t SELECT tuple(toUInt8(t.1), toUInt8(t.2), toUInt8(t.3)) AS RGB -``` - -```response title=Response -┌─rgb──────────────────────────────────────────────────────┐ -│ (127.03349738778945,66.06672044472008,37.11802592155851) │ -└──────────────────────────────────────────────────────────┘ -┌─RGB──────────┐ -│ (205,139,97) │ -└──────────────┘ -``` - - -## colorSRGBToOKLCH - -導入バージョン: v25.7 - -**sRGB** 色空間で符号化された色を、知覚的に均一な **OKLCH** 色空間に変換します。 - -いずれかの入力チャネルが `[0...255]` の範囲外、またはガンマ値が正でない場合、その動作は実装依存です。 - -:::note -**OKLCH** は OKLab 色空間の円柱座標版です。 -その 3 つの座標は `L`(明度、範囲 `[0...1]`)、`C`(クロマ(彩度)、`>= 0`)、`H`(色相、度数で `[0...360]`)です。 -OKLab/OKLCH は、計算コストを低く抑えつつ知覚的な均一性を実現するように設計されています。 -::: - -変換は次の 3 段階で構成されます: - -1. sRGB から線形 sRGB への変換 -2. 線形 sRGB から OKLab への変換 -3. OKLab から OKLCH への変換 - -OKLCH 空間における色の例と、それらが sRGB の色にどのように対応するかについては、[https://OKLCH.com/](https://OKLCH.com/) を参照してください。 - -**構文** - -```sql -colorSRGBToOKLCH(tuple[, gamma]) -``` - -**引数** - -* `tuple` — `[0...255]` の範囲の R, G, B の 3 要素からなるタプル。[`Tuple(UInt8, UInt8, UInt8)`](/sql-reference/data-types/tuple) -* `gamma` — 省略可。各チャネルの値 `x` に対して `(x / 255)^gamma` を適用して sRGB を線形化する際に使用される指数。デフォルトは `2.2`。[`Float64`](/sql-reference/data-types/float) - -**戻り値** - -OKLCH 色空間の値を表すタプル (L, C, H) を返します。[`Tuple(Float64, Float64, Float64)`](/sql-reference/data-types/tuple) - -**使用例** - -**sRGB を OKLCH に変換** - -```sql title=Query -SELECT colorSRGBToOKLCH((128, 64, 32), 2.2) AS lch -``` - -```response title=Response -┌─lch─────────────────────────────────────────────────────────┐ -│ (0.4436238384931984,0.10442699545678624,45.907345481930236) │ -└─────────────────────────────────────────────────────────────┘ -``` - - -## connectionId - -導入バージョン: v21.3 - -現在のクエリを送信したクライアントの接続 ID を返します。 -この関数は、デバッグ時に最も有用です。 -MySQL の `CONNECTION_ID` 関数との互換性のために作成されました。 -本番環境のクエリで使用されることは一般的ではありません。 - -**構文** - -```sql -connectionId() -``` - -**引数** - -* なし。 - -**戻り値** - -現在のクライアントの接続 ID([`UInt64`](/sql-reference/data-types/int-uint))を返します。 - -**例** - -**使用例** - -```sql title=Query -SELECT connectionId(); -``` - -```response title=Response -┌─connectionId()─┐ -│ 0 │ -└────────────────┘ -``` - - -## countDigits - -導入バージョン: v20.8 - -値を表現するのに必要な 10 進数の桁数を返します。 - -:::note -この関数は Decimal 型のスケールを考慮します。つまり、基になる整数型(`(value * scale)`)に対して結果を計算します。 - -例えば: - -* `countDigits(42) = 2` -* `countDigits(42.000) = 5` -* `countDigits(0.04200) = 4` - ::: - -:::tip -`Decimal64` のオーバーフローは `countDigits(x) > 18` で検出できますが、 -[`isDecimalOverflow`](#isDecimalOverflow) よりも低速です。 -::: - -**構文** - -```sql -countDigits(x) -``` - -**引数** - -* `x` — 整数または 10 進小数値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Decimal`](/sql-reference/data-types/decimal) - -**返り値** - -`x` を表現するのに必要な桁数を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT countDigits(toDecimal32(1, 9)), countDigits(toDecimal32(-1, 9)), - countDigits(toDecimal64(1, 18)), countDigits(toDecimal64(-1, 18)), - countDigits(toDecimal128(1, 38)), countDigits(toDecimal128(-1, 38)); -``` - -```response title=Response -┌─countDigits(toDecimal32(1, 9))─┬─countDigits(toDecimal32(-1, 9))─┬─countDigits(toDecimal64(1, 18))─┬─countDigits(toDecimal64(-1, 18))─┬─countDigits(toDecimal128(1, 38))─┬─countDigits(toDecimal128(-1, 38))─┐ -│ 10 │ 10 │ 19 │ 19 │ 39 │ 39 │ -└────────────────────────────────┴─────────────────────────────────┴─────────────────────────────────┴──────────────────────────────────┴──────────────────────────────────┴───────────────────────────────────┘ -``` - - -## currentDatabase - -導入バージョン: v1.1 - -現在のデータベース名を返します。 -データベースを指定する必要がある `CREATE TABLE` クエリのテーブルエンジンのパラメータで便利です。 - -[`SET` 文](/sql-reference/statements/use)も参照してください。 - -**構文** - -```sql -currentDatabase() -``` - -**別名**: `current_database`, `SCHEMA`, `DATABASE` - -**引数** - -* なし。 - -**戻り値** - -現在のデータベース名を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT currentDatabase() -``` - -```response title=Response -┌─currentDatabase()─┐ -│ default │ -└───────────────────┘ -``` - - -## currentProfiles - -導入されたバージョン: v21.9 - -現在のユーザーに有効な設定プロファイルの配列を返します。 - -**構文** - -```sql -currentProfiles() -``` - -**引数** - -* なし。 - -**返り値** - -現在のユーザー向けの設定プロファイルを要素とする配列を返します。 [`Array(String)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT currentProfiles(); -``` - -```response title=Response -┌─currentProfiles()─────────────────────────────┐ -│ ['default', 'readonly_user', 'web_analytics'] │ -└───────────────────────────────────────────────┘ -``` - - -## currentQueryID - -導入バージョン: v - -現在のクエリ ID を返します。 - -**構文** - -```sql -currentQueryID() -``` - -**エイリアス**: `current_query_id` - -**引数** - -* なし - -**戻り値** - -**例** - -**例** - -```sql title=Query -SELECT currentQueryID(); -``` - -```response title=Response -┌─currentQueryID()─────────────────────┐ -│ 1280d0e8-1a08-4524-be6e-77975bb68e7d │ -└──────────────────────────────────────┘ -``` - - -## currentRoles - -導入バージョン: v21.9 - -現在のユーザーに割り当てられているロールを配列で返します。 - -**構文** - -```sql -currentRoles() -``` - -**引数** - -* なし。 - -**戻り値** - -現在のユーザーに割り当てられているロールの配列を返します。[`Array(String)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT currentRoles(); -``` - -```response title=Response -┌─currentRoles()─────────────────────────────────┐ -│ ['sql-console-role:jane.smith@clickhouse.com'] │ -└────────────────────────────────────────────────┘ -``` - - -## currentSchemas - -導入バージョン: v23.7 - -関数 [`currentDatabase`](#currentDatabase) と同じですが、次の点が異なります。 - -* 無視される boolean(ブール値)引数を受け取る -* データベース名を単一要素の配列として返す - -関数 `currentSchemas` は PostgreSQL との互換性のためだけに存在します。 -代わりに `currentDatabase` を使用してください。 - -[`SET` ステートメント](/sql-reference/statements/use) も参照してください。 - -**構文** - -```sql -currentSchemas(bool) -``` - -**別名**: `current_schemas` - -**引数** - -* `bool` — 無視されるブール値。[`Bool`](/sql-reference/data-types/boolean) - -**返り値** - -現在のデータベース名を唯一の要素とする 1 要素の配列を返します。[`Array(String)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT currentSchemas(true) -``` - -```response title=Response -┌─currentSchemas(true)─┐ -│ ['default'] │ -└──────────────────────┘ -``` - - -## currentUser - -導入: v20.1 - -現在のユーザー名を返します。 -分散クエリの場合は、そのクエリを実行したユーザーの名前を返します。 - -**構文** - -```sql -currentUser() -``` - -**別名**: `current_user`, `user` - -**引数** - -* なし。 - -**返される値** - -現在のユーザー名を返します。そうでない場合は、クエリを開始したユーザーのログイン名を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT currentUser() -``` - -```response title=Response -┌─currentUser()─┐ -│ default │ -└───────────────┘ -``` - - -## defaultProfiles - -導入: v21.9 - -現在のユーザーのデフォルトの設定プロファイル名の配列を返します。 - -**構文** - -```sql -defaultProfiles() -``` - -**引数** - -* なし。 - -**戻り値** - -現在のユーザーのデフォルトの設定プロファイル名の配列を返します。[`Array(String)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT defaultProfiles(); -``` - -```response title=Response -┌─defaultProfiles()─┐ -│ ['default'] │ -└───────────────────┘ -``` - - -## defaultRoles - -導入バージョン: v21.9 - -現在のユーザーに設定されているデフォルトのロールを配列で返します。 - -**構文** - -```sql -defaultRoles() -``` - -**引数** - -* なし。 - -**戻り値** - -現在のユーザーに設定されているデフォルトロールの配列を返します。[`Array(String)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT defaultRoles(); -``` - -```response title=Response -┌─defaultRoles()─────────────────────────────────┐ -│ ['sql-console-role:jane.smith@clickhouse.com'] │ -└────────────────────────────────────────────────┘ -``` - - -## defaultValueOfArgumentType - -導入バージョン: v1.1 - -指定されたデータ型に対するデフォルト値を返します。 -ユーザーが設定したカスタム列のデフォルト値は含まれません。 - -**構文** - -```sql -defaultValueOfArgumentType(expression) -``` - -**引数** - -* `expression` — 任意の型の値、または任意の型の値を返す式。[`Any`](/sql-reference/data-types) - -**戻り値** - -数値に対しては `0`、文字列に対しては空文字列、Nullable 型に対しては `NULL` を返します。戻り値の型は [`UInt8`](/sql-reference/data-types/int-uint)、[`String`](/sql-reference/data-types/string)、または [`NULL`](/sql-reference/syntax#null) です。 - -**例** - -**使用例** - -```sql title=Query -SELECT defaultValueOfArgumentType(CAST(1 AS Int8)); -``` - -```response title=Response -┌─defaultValueOfArgumentType(CAST(1, 'Int8'))─┐ -│ 0 │ -└─────────────────────────────────────────────┘ -``` - -**Nullable 型の例** - -```sql title=Query -SELECT defaultValueOfArgumentType(CAST(1 AS Nullable(Int8))); -``` - -```response title=Response -┌─defaultValueOfArgumentType(CAST(1, 'Nullable(Int8)'))─┐ -│ ᴺᵁᴸᴸ │ -└───────────────────────────────────────────────────────┘ -``` - - -## defaultValueOfTypeName - -導入バージョン: v1.1 - -指定された型名のデフォルト値を返します。 - -**構文** - -```sql -defaultValueOfTypeName(type) -``` - -**引数** - -* `type` — 型名を表す文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -指定された型名に対するデフォルト値を返します。数値型なら `0`、文字列型なら空文字列、Nullable 型の [`UInt8`](/sql-reference/data-types/int-uint) または [`String`](/sql-reference/data-types/string)、あるいは [`NULL`](/sql-reference/syntax#null) の場合は `NULL` を返します。 - -**例** - -**使用例** - -```sql title=Query -SELECT defaultValueOfTypeName('Int8'); -``` - -```response title=Response -┌─defaultValueOfTypeName('Int8')─┐ -│ 0 │ -└────────────────────────────────┘ -``` - -**Nullable の使用例** - -```sql title=Query -SELECT defaultValueOfTypeName('Nullable(Int8)'); -``` - -```response title=Response -┌─defaultValueOfTypeName('Nullable(Int8)')─┐ -│ ᴺᵁᴸᴸ │ -└──────────────────────────────────────────┘ -``` - - -## displayName - -導入: v22.11 - -[config](/operations/configuration-files) の `display_name` の値、または設定されていない場合はサーバーの完全修飾ドメイン名 (FQDN) を返します。 - -**構文** - -```sql -displayName() -``` - -**引数** - -* なし。 - -**戻り値** - -設定で指定された `display_name` の値、または未設定の場合はサーバーの FQDN を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT displayName(); -``` - -```response title=Response -┌─displayName()─┐ -│ production │ -└───────────────┘ -``` - - -## dumpColumnStructure - -導入: v1.1 - -列とそのデータ型の内部構造を詳細に出力します。 - -**構文** - -```sql -dumpColumnStructure(x) -``` - -**引数** - -* `x` — 構造の説明を取得する値。[`Any`](/sql-reference/data-types) - -**戻り値** - -値を表現するために使用されるカラム構造の説明を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT dumpColumnStructure(CAST('2018-01-01 01:02:03', 'DateTime')); -``` - -```response title=Response -┌─dumpColumnStructure(CAST('2018-01-01 01:02:03', 'DateTime'))─┐ -│ DateTime, Const(size = 1, UInt32(size = 1)) │ -└──────────────────────────────────────────────────────────────┘ -``` - - -## enabledProfiles - -導入バージョン: v21.9 - -現在のユーザーに対して有効な設定プロファイル名の配列を返します。 - -**構文** - -```sql -enabledProfiles() -``` - -**引数** - -* なし。 - -**戻り値** - -現在のユーザーに対して有効な設定プロファイル名の配列を返します。[`Array(String)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT enabledProfiles(); -``` - -```response title=Response -┌─enabledProfiles()─────────────────────────────────────────────────┐ -│ ['default', 'readonly_user', 'web_analytics', 'batch_processing'] │ -└───────────────────────────────────────────────────────────────────┘ -``` - - -## enabledRoles - -導入バージョン: v21.9 - -現在のユーザーに対して有効なロールの配列を返します。 - -**構文** - -```sql -enabledRoles() -``` - -**引数** - -* なし。 - -**戻り値** - -現在のユーザーに対して有効なロール名の配列を返します。[`Array(String)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT enabledRoles(); -``` - -```response title=Response -┌─enabledRoles()─────────────────────────────────────────────────┐ -│ ['general_data', 'sql-console-role:jane.smith@clickhouse.com'] │ -└────────────────────────────────────────────────────────────────┘ -``` - - -## errorCodeToName - -導入バージョン: v20.12 - -数値の ClickHouse エラーコードに対応するエラー名(文字列表現)を返します。 -数値エラーコードとエラー名の対応は[こちら](https://github.com/ClickHouse/ClickHouse/blob/master/src/Common/ErrorCodes.cpp)で確認できます。 - -**構文** - -```sql -errorCodeToName(error_code) -``` - -**引数** - -* `error_code` — ClickHouse のエラーコード。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) - -**戻り値** - -`error_code` の名称を文字列として返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT errorCodeToName(252); -``` - -```response title=Response -┌─errorCodeToName(252)─┐ -│ TOO_MANY_PARTS │ -└──────────────────────┘ -``` - - -## file - -導入バージョン: v21.3 - -ファイルを文字列として読み込み、指定されたカラムにデータを読み込みます。 -ファイルの内容は解釈されません。 - -[`file`](../table-functions/file.md) テーブル関数も参照してください。 - -**構文** - -```sql -file(path[, default]) -``` - -**引数** - -* `path` — `user_files_path` からの相対パスで指定するファイルのパス。ワイルドカード `*`、`**`、`?`、`{abc,def}`、`{N..M}` をサポートします。ここで `N`、`M` は数値、`'abc'`、`'def'` は文字列です。[`String`](/sql-reference/data-types/string) -* `default` — ファイルが存在しないか、アクセスできない場合に返される値。[`String`](/sql-reference/data-types/string) または [`NULL`](/sql-reference/syntax#null) - -**戻り値** - -ファイルの内容を文字列として返します。[`String`](/sql-reference/data-types/string) - -**使用例** - -**ファイルをテーブルに挿入する** - -```sql title=Query -INSERT INTO table SELECT file('a.txt'), file('b.txt'); -``` - -```response title=Response -``` - - -## filesystemAvailable - -導入バージョン: v20.1 - -データベースの永続ストレージが置かれているファイルシステム上の空き容量を返します。 -一部の領域がオペレーティングシステム用に予約されているため、返される値は常にファイルシステム全体の空き容量([`filesystemUnreserved`](../../sql-reference/functions/other-functions.md#filesystemUnreserved))よりも小さくなります。 - -**構文** - -```sql -filesystemAvailable([disk_name]) -``` - -**引数** - -* `disk_name` — 省略可能。空き容量を取得するディスク名。指定しない場合、デフォルトディスクが使用されます。[`String`](/sql-reference/data-types/string) または [`FixedString`](/sql-reference/data-types/fixedstring) - -**戻り値** - -利用可能な空き容量をバイト数で返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT formatReadableSize(filesystemAvailable()) AS "利用可能な容量"; -``` - -```response title=Response -┌─利用可能な容量─┐ -│ 30.75 GiB │ -└────────────────┘ -``` - - -## filesystemCapacity - -導入バージョン: v20.1 - -ファイルシステムの容量をバイト単位で返します。 -データディレクトリへの [path](../../operations/server-configuration-parameters/settings.md#path) が設定されている必要があります。 - -**構文** - -```sql -filesystemCapacity([disk_name]) -``` - -**引数** - -* `disk_name` — 省略可。容量を取得するディスク名。指定しない場合はデフォルトのディスクが使用されます。[`String`](/sql-reference/data-types/string) または [`FixedString`](/sql-reference/data-types/fixedstring) - -**戻り値** - -ファイルシステムの容量をバイト単位で返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT formatReadableSize(filesystemCapacity()) AS "容量"; -``` - -```response title=Response -┌─容量──┐ -│ 39.32 GiB │ -└───────────┘ -``` - - -## filesystemUnreserved - -導入バージョン: v22.12 - -データベースの永続データが格納されているファイルシステム上の、予約されていない空き容量の合計を返します(以前の名称は `filesystemFree`)。 -[`filesystemAvailable`](#filesystemAvailable) も参照してください。 - -**構文** - -```sql -filesystemUnreserved([disk_name]) -``` - -**引数** - -* `disk_name` — 省略可。空き容量の合計を取得する対象ディスクの名前。省略した場合はデフォルトディスクを使用します。[`String`](/sql-reference/data-types/string) または [`FixedString`](/sql-reference/data-types/fixedstring) - -**戻り値** - -空き容量をバイト単位で返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT formatReadableSize(filesystemUnreserved()) AS "空き容量"; -``` - -```response title=Response -┌─空き容量─┐ -│ 32.39 GiB │ -└──────────┘ -``` - - -## finalizeAggregation - -導入: v1.1 - -この関数は集約状態を受け取り、集約結果(または [-State](../../sql-reference/aggregate-functions/combinators.md#-state) コンビネータを使用している場合は、最終化された状態)を返します。 - -**構文** - -```sql -finalizeAggregation(state) -``` - -**引数** - -* `state` — 集約の状態。[`AggregateFunction`](/sql-reference/data-types/aggregatefunction) - -**戻り値** - -集約の最終結果を返します。[`Any`](/sql-reference/data-types) - -**例** - -**使用例** - -```sql title=Query -SELECT finalizeAggregation(arrayReduce('maxState', [1, 2, 3])); -``` - -```response title=Response -┌─finalizeAggregation(arrayReduce('maxState', [1, 2, 3]))─┐ -│ 3 │ -└─────────────────────────────────────────────────────────┘ -``` - -**initializeAggregation と併用** - -```sql title=Query -WITH initializeAggregation('sumState', number) AS one_row_sum_state -SELECT - number, - finalizeAggregation(one_row_sum_state) AS one_row_sum, - runningAccumulate(one_row_sum_state) AS cumulative_sum -FROM numbers(5); -``` - -```response title=Response -┌─number─┬─one_row_sum─┬─cumulative_sum─┐ -│ 0 │ 0 │ 0 │ -│ 1 │ 1 │ 1 │ -│ 2 │ 2 │ 3 │ -│ 3 │ 3 │ 6 │ -│ 4 │ 4 │ 10 │ -└────────┴─────────────┴────────────────┘ -``` - - -## flipCoordinates - -導入バージョン: v25.10 - -`Point`、`Ring`、`Polygon`、`MultiPolygon` の座標を反転します。`Point` の場合は座標を入れ替えます。配列の場合は、各座標ペアに対して同じ変換を再帰的に適用します。 - -**構文** - -```sql -flipCoordinates(geometry) -``` - -**引数** - -* `geometry` — 座標を入れ替える対象のジオメトリ。サポートされている型: Point (Tuple(Float64, Float64)), Ring (Array(Point)), Polygon (Array(Ring)), MultiPolygon (Array(Polygon))。 - -**戻り値** - -座標を入れ替えたジオメトリ。型は入力と同じです。[`Point`](/sql-reference/data-types/geo#point) または [`Ring`](/sql-reference/data-types/geo#ring) または [`Polygon`](/sql-reference/data-types/geo#polygon) または [`MultiPolygon`](/sql-reference/data-types/geo#multipolygon) - -**例** - -**basic_point** - -```sql title=Query -SELECT flipCoordinates((1.0, 2.0)); -``` - -```response title=Response -(2.0, 1.0) -``` - -**リング** - -```sql title=Query -SELECT flipCoordinates([(1.0, 2.0), (3.0, 4.0)]); -``` - -```response title=Response -[(2.0, 1.0), (4.0, 3.0)] -``` - -**ポリゴン** - -```sql title=Query -SELECT flipCoordinates([[(1.0, 2.0), (3.0, 4.0)], [(5.0, 6.0), (7.0, 8.0)]]); -``` - -```response title=Response -[[(2.0, 1.0), (4.0, 3.0)], [(6.0, 5.0), (8.0, 7.0)]] -``` - - -## formatQuery - -導入バージョン: v - -指定された SQL クエリを、必要に応じて複数行を含むフォーマット済みの形式で返します。パースエラーが発生した場合は例外を送出します。 -[example:multiline] - -**構文** - -```sql -formatQuery(query) -``` - -**引数** - -* `query` — 整形対象の SQL クエリ。[String](../../sql-reference/data-types/string.md) - -**戻り値** - -整形されたクエリ [`String`](/sql-reference/data-types/string) - -**例** - -**multiline** - -```sql title=Query -SELECT formatQuery('select a, b FRom tab WHERE a > 3 and b < 3'); -``` - -```response title=Response -SELECT - a, - b -FROM tab -WHERE (a > 3) AND (b < 3) -``` - - -## formatQueryOrNull - -導入バージョン: v - -指定された SQL クエリを整形し、必要に応じて複数行となる形式で返します。パースエラーが発生した場合は NULL を返します。 -[example:multiline] - -**構文** - -```sql -formatQueryOrNull(query) -``` - -**引数** - -* `query` — 整形する SQL クエリ。[String](../../sql-reference/data-types/string.md) - -**戻り値** - -整形済みクエリ [`String`](/sql-reference/data-types/string) - -**例** - -**multiline** - -```sql title=Query -SELECT formatQuery('select a, b FRom tab WHERE a > 3 and b < 3'); -``` - -```response title=Response -SELECT - a, - b -FROM tab -WHERE (a > 3) AND (b < 3) -``` - - -## formatQuerySingleLine - -導入バージョン: v - -formatQuery() と同様ですが、返される整形済み文字列には改行が含まれません。パースエラーが発生した場合には例外をスローします。 -[example:multiline] - -**構文** - -```sql -formatQuerySingleLine(query) -``` - -**引数** - -* `query` — フォーマットする SQL クエリ。[String](../../sql-reference/data-types/string.md) - -**戻り値** - -フォーマットされたクエリ [`String`](/sql-reference/data-types/string) - -**例** - -**multiline** - -```sql title=Query -SELECT formatQuerySingleLine('select a, b FRom tab WHERE a > 3 and b < 3'); -``` - -```response title=Response -SELECT a, b FROM tab WHERE (a > 3) AND (b < 3) -``` - - -## formatQuerySingleLineOrNull - -導入バージョン: v - -formatQuery() と同様ですが、返される整形済みの文字列には改行が含まれません。構文解析エラーが発生した場合は NULL を返します。 -[例:複数行] - -**構文** - -```sql -formatQuerySingleLineOrNull(query) -``` - -**引数** - -* `query` — 整形対象の SQL クエリ。[`String`](/sql-reference/data-types/string) - -**返り値** - -整形されたクエリを表す [`String`](/sql-reference/data-types/string) - -**例** - -**複数行** - -```sql title=Query -SELECT formatQuerySingleLine('select a, b FRom tab WHERE a > 3 and b < 3'); -``` - -```response title=Response -SELECT a, b FROM tab WHERE (a > 3) AND (b < 3) -``` - - -## formatReadableDecimalSize - -導入バージョン: v22.11 - -サイズ(バイト数)を指定すると、この関数は接尾辞(KB、MB など)付きの、人間が読みやすいように丸めたサイズを文字列として返します。 - -この関数と逆の処理を行う関数は [`parseReadableSize`](#parseReadableSize) です。 - -**構文** - -```sql -formatReadableDecimalSize(x) -``` - -**引数** - -* `x` — バイト単位のサイズ。[`UInt64`](/sql-reference/data-types/int-uint) - -**戻り値** - -人間が読みやすい形式の、単位接尾辞付きで丸められたサイズを文字列として返します。[`String`](/sql-reference/data-types/string) - -**例** - -**ファイルサイズを整形する** - -```sql title=Query -SELECT - arrayJoin([1, 1024, 1024*1024, 192851925]) AS filesize_bytes, - formatReadableDecimalSize(filesize_bytes) AS filesize -``` - -```response title=Response -┌─filesize_bytes─┬─filesize───┐ -│ 1 │ 1.00 B │ -│ 1024 │ 1.02 KB │ -│ 1048576 │ 1.05 MB │ -│ 192851925 │ 192.85 MB │ -└────────────────┴────────────┘ -``` - - -## formatReadableQuantity - -導入バージョン: v20.10 - -数値を指定すると、この関数はその数値を四捨五入し、接尾辞(千、百万、十億 など)を付けた文字列として返します。 - -この関数は任意の数値型を入力として受け取りますが、内部的には `Float64` にキャストして処理します。 -非常に大きな値に対しては、結果が必ずしも最適にならない場合があります。 - -**構文** - -```sql -formatReadableQuantity(x) -``` - -**引数** - -* `x` — 書式設定する数値。[`UInt64`](/sql-reference/data-types/int-uint) - -**戻り値** - -接尾辞付きの丸められた数値を文字列として返します。[`String`](/sql-reference/data-types/string) - -**使用例** - -**接尾辞付きで数値を書式設定する** - -```sql title=Query -SELECT - arrayJoin([1024, 1234 * 1000, (4567 * 1000) * 1000, 98765432101234]) AS number, - formatReadableQuantity(number) AS number_for_humans -``` - -```response title=Response -┌─────────number─┬─number_for_humans─┐ -│ 1024 │ 1.02 千 │ -│ 1234000 │ 1.23 百万 │ -│ 4567000000 │ 4.57 十億 │ -│ 98765432101234 │ 98.77 兆 │ -└────────────────┴───────────────────┘ -``` - - -## formatReadableSize - -導入: v1.1 - -サイズ(バイト数)を指定すると、この関数は接尾辞(KiB、MiB など)付きの、読みやすく丸められたサイズを文字列として返します。 - -この関数と逆の変換を行う関数は、[`parseReadableSize`](#parseReadableSize)、[`parseReadableSizeOrZero`](#parseReadableSizeOrZero)、[`parseReadableSizeOrNull`](#parseReadableSizeOrNull) です。 -この関数は任意の数値型を入力として受け付けますが、内部的にはそれらを `Float64` にキャストします。非常に大きな値では結果が望ましくない場合があります。 - -**構文** - -```sql -formatReadableSize(x) -``` - -**エイリアス**: `FORMAT_BYTES` - -**引数** - -* `x` — バイト単位のサイズ。[`UInt64`](/sql-reference/data-types/int-uint) - -**返り値** - -単位の接尾辞付きで、読みやすいように丸めたサイズを文字列として返します。[`String`](/sql-reference/data-types/string) - -**使用例** - -**ファイルサイズをフォーマットする** - -```sql title=Query -SELECT - arrayJoin([1, 1024, 1024*1024, 192851925]) AS filesize_bytes, - formatReadableSize(filesize_bytes) AS filesize -``` - -```response title=Response -┌─filesize_bytes─┬─filesize───┐ -│ 1 │ 1.00 B │ -│ 1024 │ 1.00 KiB │ -│ 1048576 │ 1.00 MiB │ -│ 192851925 │ 183.92 MiB │ -└────────────────┴────────────┘ -``` - - -## formatReadableTimeDelta - -導入バージョン: v20.12 - -秒単位の時間間隔(デルタ)を指定すると、この関数は年/月/日/時/分/秒/ミリ秒/マイクロ秒/ナノ秒を含む時間差を文字列で返します。 - -この関数は任意の数値型を入力として受け取りますが、内部的にはそれらを `Float64` にキャストします。大きな値の場合、結果が望ましくない可能性があります。 - -**構文** - -```sql -formatReadableTimeDelta(column[, maximum_unit, minimum_unit]) -``` - -**引数** - -* `column` — 数値型の時間差を格納するカラム。[`Float64`](/sql-reference/data-types/float) -* `maximum_unit` — 省略可。表示する最大単位。指定可能な値: `nanoseconds`, `microseconds`, `milliseconds`, `seconds`, `minutes`, `hours`, `days`, `months`, `years`。デフォルト値: `years`。[`const String`](/sql-reference/data-types/string) -* `minimum_unit` — 省略可。表示する最小単位。これより小さい単位は切り捨てられます。指定可能な値: `nanoseconds`, `microseconds`, `milliseconds`, `seconds`, `minutes`, `hours`, `days`, `months`, `years`。明示的に指定した値が `maximum_unit` より大きい場合は、例外がスローされます。デフォルト値: `maximum_unit` が `seconds` 以上の場合は `seconds`、それ以外の場合は `nanoseconds`。[`const String`](/sql-reference/data-types/string) - -**戻り値** - -時間差を文字列として返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT - arrayJoin([100, 12345, 432546534]) AS elapsed, - formatReadableTimeDelta(elapsed) AS time_delta -``` - -```response title=Response -┌────elapsed─┬─time_delta─────────────────────────────────────────────────────┐ -│ 100 │ 1分40秒 │ -│ 12345 │ 3時間25分45秒 │ -│ 432546534 │ 13年8ヶ月17日7時間48分54秒 │ -└────────────┴────────────────────────────────────────────────────────────────┘ -``` - -**最大の単位を使用** - -```sql title=Query -SELECT - arrayJoin([100, 12345, 432546534]) AS elapsed, - formatReadableTimeDelta(elapsed, 'minutes') AS time_delta -``` - -```response title=Response -┌────elapsed─┬─time_delta─────────────────────────────────────────────────────┐ -│ 100 │ 1分40秒 │ -│ 12345 │ 205分45秒 │ -│ 432546534 │ 7209108分54秒 │ -└────────────┴─────────────────────────────────────────────────────────────────┘ -``` - - -## generateRandomStructure - -導入バージョン: v23.5 - -`column1_name column1_type, column2_name column2_type, ...` という形式のランダムなテーブル構造を生成します。 - -**構文** - -```sql -generateRandomStructure([number_of_columns, seed]) -``` - -**引数** - -* `number_of_columns` — 結果のテーブル構造における列数。0 または `Null` に設定した場合、列数は 1 から 128 の間でランダムに決定されます。デフォルト値: `Null`。[`UInt64`](/sql-reference/data-types/int-uint) -* `seed` — 安定した結果を得るための乱数シード。`seed` が指定されていないか `Null` に設定されている場合、乱数シードがランダムに生成されます。[`UInt64`](/sql-reference/data-types/int-uint) - -**戻り値** - -ランダムに生成されたテーブル構造。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT generateRandomStructure() -``` - -```response title=Response -c1 Decimal32(5), c2 Date, c3 Tuple(LowCardinality(String), Int128, UInt64, UInt16, UInt8, IPv6), c4 Array(UInt128), c5 UInt32, c6 IPv4, c7 Decimal256(64), c8 Decimal128(3), c9 UInt256, c10 UInt64, c11 DateTime -``` - -**列数を指定して** - -```sql title=Query -SELECT generateRandomStructure(1) -``` - -```response title=Response -c1 Map(UInt256, UInt16) -``` - -**シード値を指定** - -```sql title=Query -SELECT generateRandomStructure(NULL, 33) -``` - -```response title=Response -c1 DateTime, c2 Enum8('c2V0' = 0, 'c2V1' = 1, 'c2V2' = 2, 'c2V3' = 3), c3 LowCardinality(Nullable(FixedString(30))), c4 Int16, c5 Enum8('c5V0' = 0, 'c5V1' = 1, 'c5V2' = 2, 'c5V3' = 3), c6 Nullable(UInt8), c7 String, c8 Nested(e1 IPv4, e2 UInt8, e3 UInt16, e4 UInt16, e5 Int32, e6 Map(Date, Decimal256(70))) -``` - - -## generateSerialID - -導入バージョン: v25.1 - -前回のカウンター値から連番を生成して返します。 -この関数は文字列引数(シリーズ識別子)と、任意の開始値を受け取ります。 -サーバーは Keeper を使用するように設定されている必要があります。 -シリーズは、サーバー設定の [`series_keeper_path`](/operations/server-configuration-parameters/settings#series_keeper_path) で指定されたパス配下の Keeper ノードに保存されます。 - -**構文** - -```sql -generateSerialID(series_identifier[, start_value]) -``` - -**引数** - -* `series_identifier` — シリーズ識別子 [`const String`](/sql-reference/data-types/string) -* `start_value` — 省略可能。カウンタの開始値。デフォルトは 0。注意: この値は新しいシリーズを作成する場合にのみ使用され、シリーズが既に存在する場合は無視されます [`UInt*`](/sql-reference/data-types/int-uint) - -**返り値** - -前回のカウンタ値に続く連番を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**最初の呼び出し** - -```sql title=Query -SELECT generateSerialID('id1') -``` - -```response title=Response -┌─generateSerialID('id1')──┐ -│ 1 │ -└──────────────────────────┘ -``` - -**2回目の呼び出し** - -```sql title=Query -SELECT generateSerialID('id1') -``` - -```response title=Response -┌─generateSerialID('id1')──┐ -│ 2 │ -└──────────────────────────┘ -``` - -**カラム参照** - -```sql title=Query -SELECT *, generateSerialID('id1') FROM test_table -``` - -```response title=Response -┌─CounterID─┬─UserID─┬─ver─┬─generateSerialID('id1')──┐ -│ 1 │ 3 │ 3 │ 3 │ -│ 1 │ 1 │ 1 │ 4 │ -│ 1 │ 2 │ 2 │ 5 │ -│ 1 │ 5 │ 5 │ 6 │ -│ 1 │ 4 │ 4 │ 7 │ -└───────────┴────────┴─────┴──────────────────────────┘ -``` - -**開始値あり** - -```sql title=Query -SELECT generateSerialID('id2', 100) -``` - -```response title=Response -┌─generateSerialID('id2', 100)──┐ -│ 100 │ -└───────────────────────────────┘ -``` - -**開始値指定時の2回目の呼び出し** - -```sql title=Query -SELECT generateSerialID('id2', 100) -``` - -```response title=Response -┌─generateSerialID('id2', 100)──┐ -│ 101 │ -└───────────────────────────────┘ -``` - - -## getClientHTTPHeader - -導入バージョン: v24.5 - -HTTP ヘッダーの値を取得します。 -そのようなヘッダーが存在しない場合、または現在のリクエストが HTTP インターフェイス経由で実行されていない場合、この関数は空文字列を返します。 -一部の HTTP ヘッダー(例: `Authentication` および `X-ClickHouse-*`)は制限されています。 - -:::note `allow_get_client_http_header` の設定が必須 -この関数を使用するには、設定 `allow_get_client_http_header` を有効にする必要があります。 -`Cookie` など一部のヘッダーには機密情報が含まれる可能性があるため、この設定はセキュリティ上の理由からデフォルトでは無効になっています。 -::: - -この関数において、HTTP ヘッダーは大文字と小文字が区別されます。 -分散クエリのコンテキストで関数が使用される場合、クエリを開始したノード上でのみ空ではない結果を返します。 - -**構文** - -```sql -getClientHTTPHeader(name) -``` - -**引数** - -* `name` — HTTP ヘッダー名。[`String`](/sql-reference/data-types/string) - -**戻り値** - -ヘッダーの値を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT getClientHTTPHeader('Content-Type'); -``` - -```response title=Response -┌─getClientHTTPHeader('Content-Type')─┐ -│ application/x-www-form-urlencoded │ -└─────────────────────────────────────┘ -``` - - -## getMacro - -導入バージョン: v20.1 - -サーバー設定ファイルに定義されたマクロの値を返します。 -マクロは設定ファイルの [``](/operations/server-configuration-parameters/settings#macros) セクションで定義され、ホスト名が複雑な場合でも、サーバーを分かりやすい名前で識別するために使用できます。 -関数が分散テーブルのコンテキストで実行される場合、各シャードに対応する値を持つ通常の列を生成します。 - -**構文** - -```sql -getMacro(name) -``` - -**引数** - -* `name` — 取得するマクロの名前。[`const String`](/sql-reference/data-types/string) - -**戻り値** - -指定したマクロの値を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**基本的な使い方** - -```sql title=Query -SELECT getMacro('test'); -``` - -```response title=Response -┌─getMacro('test')─┐ -│ Value │ -└──────────────────┘ -``` - - -## getMaxTableNameLengthForDatabase - -導入バージョン: v - -指定したデータベースで使用可能なテーブル名の最大長を返します。 - -**構文** - -```sql -getMaxTableNameLengthForDatabase(database_name) -``` - -**引数** - -* `database_name` — 指定したデータベースの名前。[`String`](/sql-reference/data-types/string) - -**戻り値** - -テーブル名の最大長を表す整数値を返します。 - -**例** - -**一般的な使用例** - -```sql title=Query -SELECT getMaxTableNameLengthForDatabase('default'); -``` - -```response title=Response -┌─getMaxTableNameLengthForDatabase('default')─┐ - │ 206 │ - └─────────────────────────────────────────────┘ -``` - - -## getMergeTreeSetting - -導入バージョン: v25.6 - -MergeTree 設定の現在の値を返します。 - -**構文** - -```sql -getMergeTreeSetting(setting_name) -``` - -**引数** - -* `setting_name` — 設定名。[`String`](/sql-reference/data-types/string) - -**返される値** - -MergeTree 設定の現在の値を返します。 - -**例** - -**使用例** - -```sql title=Query -SELECT getMergeTreeSetting('index_granularity'); -``` - -```response title=Response -┌─getMergeTreeSetting('index_granularity')─┐ -│ 8192 │ -└──────────────────────────────────────────┘ -``` - - -## getOSKernelVersion - -導入バージョン: v21.11 - -OS カーネルのバージョンを示す文字列を返します。 - -**構文** - -```sql -getOSKernelVersion() -``` - -**引数** - -* なし。 - -**戻り値** - -現在の OS カーネルのバージョンを返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT getOSKernelVersion(); -``` - -```response title=Response -┌─getOSKernelVersion()────┐ -│ Linux 4.15.0-55-generic │ -└─────────────────────────┘ -``` - - -## getServerPort - -導入バージョン: v21.10 - -特定のプロトコル用のサーバーポート番号を返します。 - -**構文** - -```sql -getServerPort(port_name) -``` - -**引数** - -* `port_name` — ポートの名前。[`String`](/sql-reference/data-types/string) - -**返り値** - -サーバーのポート番号を返します。[`UInt16`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT getServerPort('tcp_port'); -``` - -```response title=Response -┌─getServerPort('tcp_port')─┐ -│ 9000 │ -└───────────────────────────┘ -``` - - -## getServerSetting - -導入されたバージョン: v25.6 - -サーバー設定名を指定すると、その設定の現在の値を返します。 - -**構文** - -```sql -getServerSetting(setting_name') -``` - -**引数** - -* `setting_name` — サーバー設定の名前。[`String`](/sql-reference/data-types/string) - -**戻り値** - -サーバー設定の現在の値を返します。[`Any`](/sql-reference/data-types) - -**例** - -**使用例** - -```sql title=Query -SELECT getServerSetting('allow_use_jemalloc_memory'); -``` - -```response title=Response -┌─getServerSetting('allow_use_jemalloc_memory')─┐ -│ true │ -└───────────────────────────────────────────────┘ -``` - - -## getSetting - -導入: v20.7 - -設定の現在の値を返します。 - -**構文** - -```sql -getSetting(setting_name) -``` - -**引数** - -* `setting_Name` — 設定の名前。[`const String`](/sql-reference/data-types/string) - -**返される値** - -設定の現在の値を返します。[`Any`](/sql-reference/data-types) - -**例** - -**使用例** - -```sql title=Query -SELECT getSetting('enable_analyzer'); -SET enable_analyzer = false; -SELECT getSetting('enable_analyzer'); -``` - -```response title=Response -┌─getSetting('⋯_analyzer')─┐ -│ true │ -└──────────────────────────┘ -┌─getSetting('⋯_analyzer')─┐ -│ false │ -└──────────────────────────┘ -``` - - -## getSettingOrDefault - -導入バージョン: v24.10 - -設定の現在の値を返します。現在のプロファイルでその設定が指定されていない場合は、第 2 引数で指定したデフォルト値を返します。 - -**構文** - -```sql -getSettingOrDefault(setting_name, default_value) -``` - -**引数** - -* `setting_name` — 設定名。[`String`](/sql-reference/data-types/string) -* `default_value` — `custom_setting` が設定されていない場合に返す値。任意のデータ型または Null の値を指定可能。 - -**戻り値** - -指定した設定の現在の値、または設定されていない場合は `default_value` を返します。 - -**例** - -**使用例** - -```sql title=Query -SELECT getSettingOrDefault('custom_undef1', 'my_value'); -SELECT getSettingOrDefault('custom_undef2', 100); -SELECT getSettingOrDefault('custom_undef3', NULL); -``` - -```response title=Response -my_value -100 -NULL -``` - - -## getSizeOfEnumType - -導入: v1.1 - -指定された [`Enum`](../../sql-reference/data-types/enum.md) 型に含まれるフィールド数を返します。 - -**構文** - -```sql -getSizeOfEnumType(x) -``` - -**引数** - -* `x` — `Enum` 型の値。[`Enum`](/sql-reference/data-types/enum) - -**戻り値** - -`Enum` 型の入力値を持つフィールドの数を返します。[`UInt8/16`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT getSizeOfEnumType(CAST('a' AS Enum8('a' = 1, 'b' = 2))) AS x; -``` - -```response title=Response -┌─x─┐ -│ 2 │ -└───┘ -``` - - -## getSubcolumn - -導入バージョン: v - -式または識別子と、サブカラム名を表す定数文字列を受け取ります。 - -式から指定されたサブカラムを抽出して返します。 - -**構文** - -```sql -``` - -**引数** - -* なし。 - -**戻り値** - -**例** - -**getSubcolumn** - -```sql title=Query -SELECT getSubcolumn(array_col, 'size0'), getSubcolumn(tuple_col, 'elem_name') -``` - -```response title=Response -``` - - -## getTypeSerializationStreams - -導入されたバージョン: v22.6 - -データ型のシリアライズストリームのパスを列挙します。 -この関数は開発用途での使用を想定しています。 - -**構文** - -```sql -getTypeSerializationStreams(col) -``` - -**引数** - -* `col` — データ型を検出する対象となるデータ型を表す列、またはその文字列表現。 [`Any`](/sql-reference/data-types) - -**戻り値** - -すべてのシリアル化サブストリームのパスを含む配列を返します。 [`Array(String)`](/sql-reference/data-types/array) - -**使用例** - -**tuple** - -```sql title=Query -SELECT getTypeSerializationStreams(tuple('a', 1, 'b', 2)) -``` - -```response title=Response -['{TupleElement(1), Regular}','{TupleElement(2), Regular}','{TupleElement(3), Regular}','{TupleElement(4), Regular}'] -``` - -**map** - -```sql title=Query -SELECT getTypeSerializationStreams('Map(String, Int64)') -``` - -```response title=Response -['{ArraySizes}','{ArrayElements, TupleElement(keys), Regular}','{ArrayElements, TupleElement(values), Regular}'] -``` - - -## globalVariable - -導入バージョン: v20.5 - -定数の文字列引数を取り、その名前を持つグローバル変数の値を返します。この関数は MySQL との互換性のために用意されており、通常の ClickHouse の運用上は必要なく、有用でもありません。ごく少数のダミーのグローバル変数のみが定義されています。 - -**構文** - -```sql -globalVariable(name) -``` - -**引数** - -* `name` — グローバル変数の名前。[`String`](/sql-reference/data-types/string) - -**戻り値** - -変数 `name` の値を返します。[`Any`](/sql-reference/data-types) - -**使用例** - -**globalVariable** - -```sql title=Query -SELECT globalVariable('max_allowed_packet') -``` - -```response title=Response -67108864 -``` - - -## hasColumnInTable - -導入: v1.1 - -この関数は、特定の列がデータベーステーブル内に存在するかどうかを確認します。 -ネストされたデータ構造内の要素に対しては、その列が存在するかどうかをチェックします。 -ネストされたデータ構造そのものに対しては、`0` を返します。 - -**構文** - -```sql -hasColumnInTable([hostname[, username[, password]],]database, table, column) -``` - -**引数** - -* `database` — データベース名。[`const String`](/sql-reference/data-types/string) -* `table` — テーブル名。[`const String`](/sql-reference/data-types/string) -* `column` — カラム名。[`const String`](/sql-reference/data-types/string) -* `hostname` — 省略可。チェックを実行するリモートサーバー名。[`const String`](/sql-reference/data-types/string) -* `username` — 省略可。リモートサーバー用のユーザー名。[`const String`](/sql-reference/data-types/string) -* `password` — 省略可。リモートサーバー用のパスワード。[`const String`](/sql-reference/data-types/string) - -**戻り値** - -指定したカラムが存在する場合は `1`、それ以外は `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**既存カラムの確認** - -```sql title=Query -SELECT hasColumnInTable('system','metrics','metric') -``` - -```response title=Response -1 -``` - -**存在しない列を確認する** - -```sql title=Query -SELECT hasColumnInTable('system','metrics','non-existing_column') -``` - -```response title=Response -0 -``` - - -## hasThreadFuzzer - -導入バージョン: v20.6 - -スレッドファザー(thread fuzzer)が有効になっているかどうかを返します。 -この関数はテストおよびデバッグ目的にのみ有用です。 - -**構文** - -```sql -hasThreadFuzzer() -``` - -**引数** - -* なし。 - -**返り値** - -Thread Fuzzer が有効かどうかを返します。型は [`UInt8`](/sql-reference/data-types/int-uint) です。 - -**例** - -**Thread Fuzzer の状態を確認** - -```sql title=Query -SELECT hasThreadFuzzer() -``` - -```response title=Response -┌─hasThreadFuzzer()─┐ -│ 0 │ -└───────────────────┘ -``` - - -## hostName - -導入バージョン: v20.5 - -この関数が実行されたホストの名前を返します。 -関数がリモートサーバー(分散処理)で実行される場合は、そのリモートサーバーの名前を返します。 -関数が分散テーブルのコンテキストで実行される場合は、各シャードに対応する値を持つ通常の列を生成します。 -それ以外の場合は、定数値を返します。 - -**構文** - -```sql -hostName() -``` - -**別名**: `hostname` - -**引数** - -* なし - -**戻り値** - -ホスト名を返します。型は[`String`](/sql-reference/data-types/string)です。 - -**例** - -**使用例** - -```sql title=Query -SELECT hostName() -``` - -```response title=Response -┌─hostName()─┐ -│ clickhouse │ -└────────────┘ -``` - - -## icebergBucket - -導入バージョン: v25.5 - -[iceberg bucket transform](https://iceberg.apache.org/spec/#bucket-transform-details.) のロジックを実装します。 - -**構文** - -```sql -icebergBucket(N, value) -``` - -**引数** - -* `N` — バケット数(剰余演算の法)。[`const (U)Int*`](/sql-reference/data-types/int-uint) -* `value` — 変換対象の元の値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Bool`](/sql-reference/data-types/boolean) または [`Decimal`](/sql-reference/data-types/decimal) または [`Float*`](/sql-reference/data-types/float) または [`String`](/sql-reference/data-types/string) または [`FixedString`](/sql-reference/data-types/fixedstring) または [`UUID`](/sql-reference/data-types/uuid) または [`Date`](/sql-reference/data-types/date) または [`Time`](/sql-reference/data-types/time) または [`DateTime`](/sql-reference/data-types/datetime) - -**返される値** - -元の値の 32 ビットのハッシュ値を返します。[`Int32`](/sql-reference/data-types/int-uint) - -**例** - -**例** - -```sql title=Query -SELECT icebergBucket(5, 1.0 :: Float32) -``` - -```response title=Response -4 -``` - - -## icebergTruncate - -導入バージョン: v25.3 - -Iceberg の truncate 変換ロジックを実装します。詳細は [https://iceberg.apache.org/spec/#truncate-transform-details](https://iceberg.apache.org/spec/#truncate-transform-details) を参照してください。 - -**構文** - -```sql -icebergTruncate(N, value) -``` - -**引数** - -* `value` — 変換対象の値。[`String`](/sql-reference/data-types/string) または [`(U)Int*`](/sql-reference/data-types/int-uint) または [`Decimal`](/sql-reference/data-types/decimal) - -**戻り値** - -引数と同じ型です - -**使用例** - -**例** - -```sql title=Query -SELECT icebergTruncate(3, 'iceberg') -``` - -```response title=Response -ice -``` - - -## identity - -導入バージョン: v1.1 - -この関数は渡された引数をそのまま返すため、デバッグやテストに役立ちます。また、インデックスを使用せずにフルスキャン時のパフォーマンスを確認したい場合にも利用できます。クエリアナライザーは、インデックスの利用を検討する際に `identity` 関数内の内容を無視し、定数畳み込みも無効化します。 - -**構文** - -```sql -identity(x) -``` - -**引数** - -* `x` — 入力値。[`Any`](/sql-reference/data-types) - -**戻り値** - -入力値を変更せずに返します。[`Any`](/sql-reference/data-types) - -**例** - -**使用例** - -```sql title=Query -SELECT identity(42) -``` - -```response title=Response -42 -``` - - -## ignore - -導入バージョン: v1.1 - -任意の引数を受け取り、無条件に `0` を返します。 - -**構文** - -```sql -ignore(x) -``` - -**引数** - -* `x` — 構文エラーを避けるためだけに渡される、実際には使用されない入力値。[`Any`](/sql-reference/data-types) - -**返り値** - -常に `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT ignore(0, 'ClickHouse', NULL) -``` - -```response title=Response -┌─ignore(0, 'ClickHouse', NULL)─┐ -│ 0 │ -└───────────────────────────────┘ -``` - - -## indexHint - -導入バージョン: v1.1 - -この関数はデバッグおよび内部状態の確認のために使用されます。 -この関数は引数を無視して、常に 1 を返します。 -引数は評価されません。 - -ただし、インデックス解析時には、この関数の引数は `indexHint` でラップされていないものとして扱われます。 -これにより、対応する条件によってインデックス範囲内のデータを選択しつつも、その条件によるさらなるフィルタリングを行わないことができます。 -ClickHouse におけるインデックスは疎であり、`indexHint` を使用すると、同じ条件を直接指定した場合よりも多くのデータが返されます。 - -**構文** - -```sql -indexHint(式) -``` - -**引数** - -* `expression` — インデックス範囲の選択に用いる任意の式。[`Expression`](/sql-reference/data-types/special-data-types/expression) - -**返される値** - -常に `1` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**日付フィルタリングを用いた利用例** - -```sql title=Query -SELECT FlightDate AS k, count() FROM ontime WHERE indexHint(k = '2025-09-15') GROUP BY k ORDER BY k ASC; -``` - -```response title=Response -┌──────────k─┬─count()─┐ -│ 2025-09-14 │ 7071 │ -│ 2025-09-15 │ 16428 │ -│ 2025-09-16 │ 1077 │ -│ 2025-09-30 │ 8167 │ -└────────────┴─────────┘ -``` - - -## initialQueryID - -導入バージョン: v1.1 - -現在のクエリの初期クエリの ID を返します。 -クエリのその他のパラメータは、[`system.query_log`](../../operations/system-tables/query_log.md) のフィールド `initial_query_id` から取得できます。 - -[`queryID`](/sql-reference/functions/other-functions#queryID) 関数とは対照的に、`initialQueryID` は異なるシャード間でも同じ結果を返します。 - -**構文** - -```sql -initialQueryID() -``` - -**別名**: `initial_query_id` - -**引数** - -* なし。 - -**返される値** - -現在のクエリの初期クエリ ID を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -CREATE TABLE tmp (str String) ENGINE = Log; -INSERT INTO tmp (*) VALUES ('a'); -SELECT count(DISTINCT t) FROM (SELECT initialQueryID() AS t FROM remote('127.0.0.{1..3}', currentDatabase(), 'tmp') GROUP BY queryID()); -``` - -```response title=Response -┌─count(DISTINCT t)─┐ -│ 1 │ -└───────────────────┘ -``` - - -## initialQueryStartTime - -導入バージョン: v25.4 - -現在実行中の元クエリの開始時刻を返します。 -`initialQueryStartTime` は、異なるシャード間でも同じ結果を返します。 - -**構文** - -```sql -initialQueryStartTime() -``` - -**別名**: `initial_query_start_time` - -**引数** - -* なし。 - -**返り値** - -現在のクエリの初回実行の開始時刻を返します。[`DateTime`](/sql-reference/data-types/datetime) - -**例** - -**使用例** - -```sql title=Query -CREATE TABLE tmp (str String) ENGINE = Log; -INSERT INTO tmp (*) VALUES ('a'); -SELECT count(DISTINCT t) FROM (SELECT initialQueryStartTime() AS t FROM remote('127.0.0.{1..3}', currentDatabase(), 'tmp') GROUP BY queryID()); -``` - -```response title=Response -┌─count(DISTINCT t)─┐ -│ 1 │ -└───────────────────┘ -``` - - -## initializeAggregation - -導入バージョン: v20.6 - -単一の値に基づいて集約関数の結果を計算します。 -この関数は、[-State](../../sql-reference/aggregate-functions/combinators.md#-state) コンビネータを持つ集約関数を初期化するために使用できます。 -集約関数の状態を作成して、[`AggregateFunction`](../../sql-reference/data-types/aggregatefunction.md) 型のカラムに挿入したり、初期化済みの集約結果をデフォルト値として使用したりできます。 - -**構文** - -```sql -initializeAggregation(aggregate_function, arg1[, arg2, ...]) -``` - -**引数** - -* `aggregate_function` — 初期化する集約関数の名前。[`String`](/sql-reference/data-types/string) -* `arg1[, arg2, ...]` — 集約関数の引数。[`Any`](/sql-reference/data-types) - -**戻り値** - -関数に渡された各行ごとの集約結果を返します。戻り値の型は、`initializeAggregation` が最初の引数として受け取る関数の戻り値の型と同じです。[`Any`](/sql-reference/data-types) - -**例** - -**uniqState を使った基本的な使用例** - -```sql title=Query -SELECT uniqMerge(state) FROM (SELECT initializeAggregation('uniqState', number % 3) AS state FROM numbers(10000)); -``` - -```response title=Response -┌─uniqMerge(state)─┐ -│ 3 │ -└──────────────────┘ -``` - -**sumState と finalizeAggregation の使用** - -```sql title=Query -SELECT finalizeAggregation(state), toTypeName(state) FROM (SELECT initializeAggregation('sumState', number % 3) AS state FROM numbers(5)); -``` - -```response title=Response -┌─finalizeAggregation(state)─┬─toTypeName(state)─────────────┐ -│ 0 │ AggregateFunction(sum, UInt8) │ -│ 1 │ AggregateFunction(sum, UInt8) │ -│ 2 │ AggregateFunction(sum, UInt8) │ -│ 0 │ AggregateFunction(sum, UInt8) │ -│ 1 │ AggregateFunction(sum, UInt8) │ -└────────────────────────────┴───────────────────────────────┘ -``` - - -## isConstant - -導入バージョン: v20.3 - -引数が定数式かどうかを返します。 -定数式とは、実行前、すなわちクエリ解析時点で結果が分かっている式です。 -たとえば、[リテラル](/sql-reference/syntax#literals) を用いた式は定数式です。 -この関数は主に開発、デバッグ、およびデモ用途を想定しています。 - -**構文** - -```sql -isConstant(x) -``` - -**引数** - -* `x` — 判定する式。[`Any`](/sql-reference/data-types) - -**戻り値** - -`x` が定数の場合は `1`、定数でない場合は `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**定数式** - -```sql title=Query -SELECT isConstant(x + 1) -FROM (SELECT 43 AS x) -``` - -```response title=Response -┌─isConstant(plus(x, 1))─┐ -│ 1 │ -└────────────────────────┘ -``` - -**関数を用いた定数** - -```sql title=Query -WITH 3.14 AS pi -SELECT isConstant(cos(pi)) -``` - -```response title=Response -┌─isConstant(cos(pi))─┐ -│ 1 │ -└─────────────────────┘ -``` - -**非定数式** - -```sql title=Query -SELECT isConstant(number) -FROM numbers(1) -``` - -```response title=Response -┌─isConstant(number)─┐ -│ 0 │ -└────────────────────┘ -``` - -**`now()` 関数の挙動** - -```sql title=Query -SELECT isConstant(now()) -``` - -```response title=Response -┌─isConstant(now())─┐ -│ 1 │ -└───────────────────┘ -``` - - -## isDecimalOverflow - -導入バージョン: v20.8 - -10 進数が、指定された精度を持つ `Decimal` データ型に正しく格納できないほどの桁数になっているかどうかを判定します。 - -**構文** - -```sql -isDecimalOverflow(value[, precision]) -``` - -**引数** - -* `value` — チェック対象の Decimal 型の値。[`Decimal`](/sql-reference/data-types/decimal) -* `precision` — 省略可能。Decimal 型の精度。省略された場合は、第1引数の初期の精度が使用されます。[`UInt8`](/sql-reference/data-types/int-uint) - -**返り値** - -Decimal 値がその精度で許容される桁数を超えている場合は `1`、指定した精度を満たしている場合は `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT isDecimalOverflow(toDecimal32(1000000000, 0), 9), - isDecimalOverflow(toDecimal32(1000000000, 0)), - isDecimalOverflow(toDecimal32(-1000000000, 0), 9), - isDecimalOverflow(toDecimal32(-1000000000, 0)); -``` - -```response title=Response -┌─isDecimalOverflow(toDecimal32(1000000000, 0), 9)─┬─isDecimalOverflow(toDecimal32(1000000000, 0))─┬─isDecimalOverflow(toDecimal32(-1000000000, 0), 9)─┬─isDecimalOverflow(toDecimal32(-1000000000, 0))─┐ -│ 1 │ 1 │ 1 │ 1 │ -└──────────────────────────────────────────────────┴───────────────────────────────────────────────┴───────────────────────────────────────────────────┴────────────────────────────────────────────────┘ -``` - - -## joinGet - -導入バージョン: v18.16 - -テーブルから、ディクショナリと同じ方法でデータを抽出できる関数です。 -指定した結合キーを使って、Join テーブルからデータを取得します。 - -:::note -`ENGINE = Join(ANY, LEFT, )` [ステートメント](/engines/table-engines/special/join) で作成されたテーブルにのみ対応しています。 -::: - -**構文** - -```sql -joinGet(join_storage_table_name, value_column, join_keys) -``` - -**引数** - -* `join_storage_table_name` — 検索を実行するテーブルを示す識別子。識別子はデフォルトデータベース内で検索されます(設定ファイルのパラメータ `default_database` を参照)。デフォルトデータベースを変更するには、`USE database_name` クエリを使用するか、`database_name.table_name` のようにドットで区切ってデータベース名とテーブル名を指定します。[`String`](/sql-reference/data-types/string) -* `value_column` — 必要なデータを含むテーブルのカラム名。[`const String`](/sql-reference/data-types/string) -* `join_keys` — 結合キーのリスト。[`Any`](/sql-reference/data-types) - -**戻り値** - -キーのリストに対応する値のリストを返します。[`Any`](/sql-reference/data-types) - -**例** - -**使用例** - -```sql title=Query -CREATE TABLE db_test.id_val(`id` UInt32, `val` UInt32) ENGINE = Join(ANY, LEFT, id); -INSERT INTO db_test.id_val VALUES (1,11)(2,12)(4,13); - -SELECT joinGet(db_test.id_val, 'val', toUInt32(1)); -``` - -```response title=Response -┌─joinGet(db_test.id_val, 'val', toUInt32(1))─┐ -│ 11 │ -└─────────────────────────────────────────────┘ -``` - -**現在のデータベース内のテーブルを使用する場合** - -```sql title=Query -USE db_test; -SELECT joinGet(id_val, 'val', toUInt32(2)); -``` - -```response title=Response -┌─joinGet(id_val, 'val', toUInt32(2))─┐ -│ 12 │ -└─────────────────────────────────────┘ -``` - -**配列を JOIN キーとして使用する** - -```sql title=Query -CREATE TABLE some_table (id1 UInt32, id2 UInt32, name String) ENGINE = Join(ANY, LEFT, id1, id2); -INSERT INTO some_table VALUES (1, 11, 'a') (2, 12, 'b') (3, 13, 'c'); - -SELECT joinGet(some_table, 'name', 1, 11); -``` - -```response title=Response -┌─joinGet(some_table, 'name', 1, 11)─┐ -│ a │ -└────────────────────────────────────┘ -``` - - -## joinGetOrNull - -導入バージョン: v20.4 - -テーブルから辞書と同様の方法でデータを抽出できます。 -指定された結合キーを使用して、Join エンジンのテーブルからデータを取得します。 -[`joinGet`](#joinGet) とは異なり、キーが存在しない場合は `NULL` を返します。 - -:::note -`ENGINE = Join(ANY, LEFT, )` [ステートメント](/engines/table-engines/special/join)で作成されたテーブルにのみ対応します。 -::: - -**構文** - -```sql -joinGetOrNull(join_storage_table_name, value_column, join_keys) -``` - -**引数** - -* `join_storage_table_name` — 検索を実行する場所を示す識別子。識別子はデフォルトデータベース内で検索されます(設定ファイルのパラメータ `default_database` を参照)。デフォルトデータベースを変更するには、`USE database_name` クエリを使用するか、`database_name.table_name` のようにドット区切りでデータベースとテーブルを指定します。[`String`](/sql-reference/data-types/string) -* `value_column` — 必要なデータを含むテーブルの列名。[`const String`](/sql-reference/data-types/string) -* `join_keys` — 結合キーのリスト。[`Any`](/sql-reference/data-types) - -**戻り値** - -キーのリストに対応する値のリストを返し、キーが見つからない場合は `NULL` を返します。[`Any`](/sql-reference/data-types) - -**例** - -**使用例** - -```sql title=Query -CREATE TABLE db_test.id_val(`id` UInt32, `val` UInt32) ENGINE = Join(ANY, LEFT, id); -INSERT INTO db_test.id_val VALUES (1,11)(2,12)(4,13); - -SELECT joinGetOrNull(db_test.id_val, 'val', toUInt32(1)), joinGetOrNull(db_test.id_val, 'val', toUInt32(999)); -``` - -```response title=Response -┌─joinGetOrNull(db_test.id_val, 'val', toUInt32(1))─┬─joinGetOrNull(db_test.id_val, 'val', toUInt32(999))─┐ -│ 11 │ ᴺᵁᴸᴸ │ -└───────────────────────────────────────────────────┴─────────────────────────────────────────────────────┘ -``` - - -## lowCardinalityIndices - -導入バージョン: v18.12 - -[LowCardinality](../data-types/lowcardinality.md) 列の辞書内における値の位置を返します。位置は 1 から始まります。LowCardinality にはデータパーツごとに個別の辞書があるため、この関数は同じ値であっても、パーツが異なれば異なる位置を返す可能性があります。 - -**構文** - -```sql -lowCardinalityIndices(col) -``` - -**引数** - -* `col` — 低カーディナリティの列。[`LowCardinality`](/sql-reference/data-types/lowcardinality) - -**戻り値** - -現在のパートにおける辞書内での値の位置。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -DROP TABLE IF EXISTS test; -CREATE TABLE test (s LowCardinality(String)) ENGINE = Memory; - --- 2つのパートを作成: - -INSERT INTO test VALUES ('ab'), ('cd'), ('ab'), ('ab'), ('df'); -INSERT INTO test VALUES ('ef'), ('cd'), ('ab'), ('cd'), ('ef'); - -SELECT s, lowCardinalityIndices(s) FROM test; -``` - -```response title=Response -┌─s──┬─lowCardinalityIndices(s)─┐ -│ ab │ 1 │ -│ cd │ 2 │ -│ ab │ 1 │ -│ ab │ 1 │ -│ df │ 3 │ -└────┴──────────────────────────┘ -┌─s──┬─lowCardinalityIndices(s)─┐ -│ ef │ 1 │ -│ cd │ 2 │ -│ ab │ 3 │ -│ cd │ 2 │ -│ ef │ 1 │ -└────┴──────────────────────────┘ -``` - - -## lowCardinalityKeys - -導入バージョン: v18.12 - -[LowCardinality](../data-types/lowcardinality.md) 列の辞書値を返します。 -ブロックのサイズが辞書サイズより小さいか大きい場合、結果は切り詰められるか、デフォルト値で拡張されます。 -LowCardinality はパートごとに辞書を持つため、この関数はパートごとに異なる辞書値を返すことがあります。 - -**構文** - -```sql -lowCardinalityKeys(col) -``` - -**引数** - -* `col` — 低カーディナリティの列。[`LowCardinality`](/sql-reference/data-types/lowcardinality) - -**戻り値** - -辞書のキーを返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**lowCardinalityKeys** - -```sql title=Query -DROP TABLE IF EXISTS test; -CREATE TABLE test (s LowCardinality(String)) ENGINE = Memory; - --- 2つのパートを作成: - -INSERT INTO test VALUES ('ab'), ('cd'), ('ab'), ('ab'), ('df'); -INSERT INTO test VALUES ('ef'), ('cd'), ('ab'), ('cd'), ('ef'); - -SELECT s, lowCardinalityKeys(s) FROM test; -``` - -```response title=Response -┌─s──┬─lowCardinalityKeys(s)─┐ -│ ef │ │ -│ cd │ ef │ -│ ab │ cd │ -│ cd │ ab │ -│ ef │ │ -└────┴───────────────────────┘ -┌─s──┬─lowCardinalityKeys(s)─┐ -│ ab │ │ -│ cd │ ab │ -│ ab │ cd │ -│ ab │ df │ -│ df │ │ -└────┴───────────────────────┘ -``` - - -## materialize - -導入: v1.1 - -定数を、単一の値のみを含む通常のカラム(フルカラム)に変換します。 -フルカラムと定数はメモリ上では異なる形式で表現されます。 -関数は通常、通常の引数と定数引数に対して異なるコードを実行しますが、結果自体は通常同じになるはずです。 -この関数は、そのような挙動をデバッグするために使用できます。 - -**構文** - -```sql -materialize(x) -``` - -**引数** - -* `x` — 定数。[`Any`](/sql-reference/data-types) - -**戻り値** - -定数値のみを含むカラム全体を返します。[`Any`](/sql-reference/data-types) - -**例** - -**使用例** - -```sql title=Query --- 以下の例では、`countMatches`関数は第2引数に定数を必要とします。 --- この動作は、`materialize`関数を使用して定数を完全なカラムに変換することでデバッグでき、 --- 非定数引数に対して関数がエラーをスローすることを確認できます。 - -SELECT countMatches('foobarfoo', 'foo'); -SELECT countMatches('foobarfoo', materialize('foo')); -``` - -```response title=Response -2 -コード: 44. DB::Exception: localhost:9000から受信。DB::Exception: 関数countMatchesの引数#2 'pattern'の型が不正です。定数String型が期待されていますが、String型を受け取りました -``` - - -## minSampleSizeContinuous - -導入バージョン: v23.10 - -2つのサンプルにおける連続値の指標の平均を比較する A/B テストに必要な最小サンプルサイズを計算します。 - -[この記事](https://towardsdatascience.com/required-sample-size-for-a-b-testing-6f6608dd330a)で説明されている式を使用します。 -処置群と対照群のサンプル数が等しいと仮定します。 -1つのグループに必要なサンプルサイズを返します(つまり、実験全体に必要なサンプルサイズは返り値の2倍です)。 -また、処置群と対照群でテスト対象の指標の分散が等しいことも仮定します。 - -**構文** - -```sql -minSampleSizeContinuous(baseline, sigma, mde, power, alpha) -``` - -**別名**: `minSampleSizeContinous` - -**引数** - -* `baseline` — 指標のベースライン値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) -* `sigma` — 指標のベースライン標準偏差。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) -* `mde` — ベースライン値に対する最小検出可能効果 (MDE) を、ベースライン値に対する比率(パーセンテージ)で指定した値(例: ベースライン値が 112.25 のとき、MDE 0.03 は 112.25 ± 112.25*0.03 への変化を想定)。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) -* `power` — テストに要求される統計的検出力(1 - 第 II 種の誤りの確率)。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) -* `alpha` — テストに要求される有意水準(第 I 種の誤りの確率)。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) - -**戻り値** - -3 要素からなる名前付き Tuple を返します: `minimum_sample_size`, `detect_range_lower`, `detect_range_upper`。これらはそれぞれ、必要なサンプルサイズ、返された必要サンプルサイズでは検出できない値の範囲の下限(`baseline * (1 - mde)` で計算)、および返された必要サンプルサイズでは検出できない値の範囲の上限(`baseline * (1 + mde)` で計算)です(いずれも Float64)。[`Tuple(Float64, Float64, Float64)`](/sql-reference/data-types/tuple) - -**例** - -**minSampleSizeContinuous** - -```sql title=Query -SELECT minSampleSizeContinuous(112.25, 21.1, 0.03, 0.80, 0.05) AS sample_size -``` - -```response title=Response -(616.2931945826209,108.8825,115.6175) -``` - - -## minSampleSizeConversion - -導入バージョン: v22.6 - -2つのサンプル間でコンバージョン(比率)を比較する A/B テストに必要な最小サンプルサイズを計算します。 - -[この記事](https://towardsdatascience.com/required-sample-size-for-a-b-testing-6f6608dd330a)で説明されている式を使用します。介入群と対照群のサイズが等しいと仮定します。1つのグループに必要なサンプルサイズを返します(つまり、実験全体に必要なサンプルサイズは返り値の2倍になります)。 - -**構文** - -```sql -minSampleSizeConversion(baseline, mde, power, alpha) -``` - -**引数** - -* `baseline` — ベースラインのコンバージョン率。[`Float*`](/sql-reference/data-types/float) -* `mde` — 最小検出可能効果 (MDE) をパーセンテージポイントで指定(例: ベースラインコンバージョンが 0.25 のとき、MDE 0.03 は期待される変化が 0.25 ± 0.03 であることを意味します)。[`Float*`](/sql-reference/data-types/float) -* `power` — テストに必要な検出力(統計的パワー、1 - 第 II 種の誤りの確率)。[`Float*`](/sql-reference/data-types/float) -* `alpha` — テストに必要な有意水準(第 I 種の誤りの確率)。[`Float*`](/sql-reference/data-types/float) - -**戻り値** - -3 つの要素 `minimum_sample_size`、`detect_range_lower`、`detect_range_upper` を持つ名前付き Tuple を返します。これらはそれぞれ、必要なサンプルサイズ、返された必要サンプルサイズでは検出できない値の範囲の下限(`baseline - mde` で計算)、返された必要サンプルサイズでは検出できない値の範囲の上限(`baseline + mde` で計算)です。[`Tuple(Float64, Float64, Float64)`](/sql-reference/data-types/tuple) - -**使用例** - -**minSampleSizeConversion** - -```sql title=Query -SELECT minSampleSizeConversion(0.25, 0.03, 0.80, 0.05) AS sample_size -``` - -```response title=Response -(3396.077603219163,0.22,0.28) -``` - - -## neighbor - -導入バージョン: v20.1 - -現在の行から指定されたオフセット位置にある列の値を返します。 -この関数はデータブロックの物理的な順序に対して動作するため、ユーザーが想定する論理的な順序と一致しない場合があり、非推奨でありエラーを引き起こしやすいものです。 -代わりに、適切なウィンドウ関数の使用を検討してください。 - -この関数は `allow_deprecated_error_prone_window_functions = 1` を設定することで有効化できます。 - -**構文** - -```sql -neighbor(column, offset[, default_value]) -``` - -**引数** - -* `column` — 対象となるカラム。[`Any`](/sql-reference/data-types) -* `offset` — 現在の行からのオフセット。正の値は先の行、負の値は前の行を参照します。[`Integer`](/sql-reference/data-types/int-uint) -* `default_value` — 省略可。オフセットがデータ範囲外になった場合に返す値。指定しない場合は、そのカラム型のデフォルト値が使用されます。[`Any`](/sql-reference/data-types) - -**戻り値** - -指定したオフセット位置の値、または範囲外の場合はデフォルト値を返します。[`Any`](/sql-reference/data-types) - -**例** - -**使用例** - -```sql title=Query -SELECT number, neighbor(number, 2) FROM system.numbers LIMIT 10; -``` - -```response title=Response -┌─number─┬─neighbor(number, 2)─┐ -│ 0 │ 2 │ -│ 1 │ 3 │ -│ 2 │ 4 │ -│ 3 │ 5 │ -│ 4 │ 6 │ -│ 5 │ 7 │ -│ 6 │ 8 │ -│ 7 │ 9 │ -│ 8 │ 0 │ -│ 9 │ 0 │ -└────────┴─────────────────────┘ -``` - -**デフォルト値あり** - -```sql title=Query -SELECT number, neighbor(number, 2, 999) FROM system.numbers LIMIT 10; -``` - -```response title=Response -┌─number─┬─neighbor(number, 2, 999)─┐ -│ 0 │ 2 │ -│ 1 │ 3 │ -│ 2 │ 4 │ -│ 3 │ 5 │ -│ 4 │ 6 │ -│ 5 │ 7 │ -│ 6 │ 8 │ -│ 7 │ 9 │ -│ 8 │ 999 │ -│ 9 │ 999 │ -└────────┴──────────────────────────┘ -``` - - -## nested - -導入バージョン: v - -これは ClickHouse エンジン内部で使用される関数であり、直接の利用は想定されていません。 - -複数の配列からタプルの配列を返します。 - -最初の引数は、結果として得られる `Tuple` のフィールド名を決定する、`String` 型の定数配列でなければなりません。 -その他の引数は、同じ長さの配列でなければなりません。 - -**構文** - -```sql -``` - -**引数** - -* なし。 - -**戻り値** - -**例** - -**ネスト** - -```sql title=Query -SELECT nested(['keys', 'values'], ['key_1', 'key_2'], ['value_1','value_2']) -``` - -```response title=Response -``` - - -## normalizeQuery - -導入バージョン: v20.8 - -リテラル、連続するリテラル、および複雑なエイリアス(空白を含むもの、3 桁以上の数字を含むもの、または UUID のように少なくとも 36 バイトの長さがあるもの)をプレースホルダー `?` に置き換えます。 - -**構文** - -```sql -normalizeQuery(x) -``` - -**引数** - -* `x` — 文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -指定された文字列を、プレースホルダーを含んだ形で返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT normalizeQuery('[1, 2, 3, x]') AS query -``` - -```response title=Response -┌─query────┐ -│ [?.., x] │ -└──────────┘ -``` - - -## normalizeQueryKeepNames - -導入バージョン: v21.2 - -リテラルおよびリテラルの並びをプレースホルダー `?` に置き換えますが、複雑なエイリアス(空白文字を含むもの、3 桁以上の数字を含むもの、または UUID のように 36 バイト以上の長さのもの)は置き換えません。 -これにより、複雑なクエリログをより適切に分析できます。 - -**構文** - -```sql -normalizeQueryKeepNames(x) -``` - -**引数** - -* `x` — 文字のシーケンス。[`String`](/sql-reference/data-types/string) - -**戻り値** - -プレースホルダを含む、指定された文字のシーケンスを返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT normalizeQuery('SELECT 1 AS aComplexName123'), normalizeQueryKeepNames('SELECT 1 AS aComplexName123') -``` - -```response title=Response -┌─normalizeQuery('SELECT 1 AS aComplexName123')─┬─normalizeQueryKeepNames('SELECT 1 AS aComplexName123')─┐ -│ SELECT ? AS `?` │ SELECT ? AS aComplexName123 │ -└───────────────────────────────────────────────┴────────────────────────────────────────────────────────┘ -``` - - -## normalizedQueryHash - -導入バージョン: v20.8 - -類似したクエリに対して、リテラルの値を無視して同一の 64 ビットハッシュ値を返します。 -クエリログの分析に役立ちます。 - -**構文** - -```sql -normalizedQueryHash(x) -``` - -**引数** - -* `x` — 文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -64ビットのハッシュ値を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT normalizedQueryHash('SELECT 1 AS `xyz`') != normalizedQueryHash('SELECT 1 AS `abc`') AS res -``` - -```response title=Response -┌─res─┐ -│ 1 │ -└─────┘ -``` - - -## normalizedQueryHashKeepNames - -導入バージョン: v21.2 - -[`normalizedQueryHash`](#normalizedQueryHash) と同様に、類似したクエリに対してリテラル値を除いた同一の 64 ビットハッシュ値を返しますが、ハッシュ化の前に複雑なエイリアス(空白を含むもの、2 桁を超える数字を含むもの、または UUID のように少なくとも 36 バイトの長さがあるもの)をプレースホルダーに置き換えません。 -クエリログの分析に役立ちます。 - -**構文** - -```sql -normalizedQueryHashKeepNames(x) -``` - -**引数** - -* `x` — 文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -64 ビットのハッシュ値を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT normalizedQueryHash('SELECT 1 AS `xyz123`') != normalizedQueryHash('SELECT 1 AS `abc123`') AS normalizedQueryHash; -SELECT normalizedQueryHashKeepNames('SELECT 1 AS `xyz123`') != normalizedQueryHashKeepNames('SELECT 1 AS `abc123`') AS normalizedQueryHashKeepNames; -``` - -```response title=Response -┌─normalizedQueryHash─┐ -│ 0 │ -└─────────────────────┘ -┌─normalizedQueryHashKeepNames─┐ -│ 1 │ -└──────────────────────────────┘ -``` - - -## parseReadableSize - -導入バージョン: v24.6 - -バイトサイズと、単位として `B`、`KiB`、`KB`、`MiB`、`MB` など(すなわち [ISO/IEC 80000-13](https://en.wikipedia.org/wiki/ISO/IEC_80000) もしくは 10 進バイト単位)から成る文字列を引数として渡すと、この関数は対応するバイト数を返します。 -入力値を解析できない場合、この関数は例外をスローします。 - -この関数の逆操作は [`formatReadableSize`](#formatReadableSize) および [`formatReadableDecimalSize`](#formatReadableDecimalSize) です。 - -**構文** - -```sql -parseReadableSize(x) -``` - -**引数** - -* `x` — ISO/IEC 80000-13 または 10 進バイト単位で表現された、人間にとって読みやすいサイズ。[`String`](/sql-reference/data-types/string) - -**返される値** - -端数を切り上げた整数のバイト数を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT arrayJoin(['1 B', '1 KiB', '3 MB', '5.314 KiB']) AS readable_sizes, parseReadableSize(readable_sizes) AS sizes; -``` - -```response title=Response -┌─readable_sizes─┬───sizes─┐ -│ 1 B │ 1 │ -│ 1 KiB │ 1024 │ -│ 3 MB │ 3000000 │ -│ 5.314 KiB │ 5442 │ -└────────────────┴─────────┘ -``` - - -## parseReadableSizeOrNull - -導入バージョン: v24.6 - -`B`、`KiB`、`KB`、`MiB`、`MB` などの単位([ISO/IEC 80000-13](https://en.wikipedia.org/wiki/ISO/IEC_80000) に準拠した単位または 10進バイト単位)付きのバイトサイズを表す文字列を渡すと、この関数は対応するバイト数を返します。 -入力値を解析できない場合、この関数は `NULL` を返します。 - -この関数の逆演算は [`formatReadableSize`](#formatReadableSize) と [`formatReadableDecimalSize`](#formatReadableDecimalSize) です。 - -**構文** - -```sql -parseReadableSizeOrNull(x) -``` - -**引数** - -* `x` — ISO/IEC 80000-13 形式または 10 進数バイト単位で表記された人間が読みやすいサイズ。[`String`](/sql-reference/data-types/string) - -**戻り値** - -バイト数を切り上げた整数値、または入力を解析できない場合は `NULL` を返します。[`Nullable(UInt64)`](/sql-reference/data-types/nullable) - -**例** - -**使用例** - -```sql title=Query -SELECT arrayJoin(['1 B', '1 KiB', '3 MB', '5.314 KiB', 'invalid']) AS readable_sizes, parseReadableSizeOrNull(readable_sizes) AS sizes; -``` - -```response title=Response -┌─readable_sizes─┬───sizes─┐ -│ 1 B │ 1 │ -│ 1 KiB │ 1024 │ -│ 3 MB │ 3000000 │ -│ 5.314 KiB │ 5442 │ -│ invalid │ ᴺᵁᴸᴸ │ -└────────────────┴─────────┘ -``` - - -## parseReadableSizeOrZero - -導入バージョン: v24.6 - -`B`、`KiB`、`KB`、`MiB`、`MB` などの単位(すなわち [ISO/IEC 80000-13](https://en.wikipedia.org/wiki/ISO/IEC_80000) で定義される単位または 10 進表記のバイト単位)を含むバイトサイズ表現の文字列が与えられた場合、この関数は対応するバイト数を返します。 -入力値をパースできない場合、この関数は `0` を返します。 - -この関数の逆変換となる操作は、[`formatReadableSize`](#formatReadableSize) および [`formatReadableDecimalSize`](#formatReadableDecimalSize) です。 - -**構文** - -```sql -parseReadableSizeOrZero(x) -``` - -**引数** - -* `x` — ISO/IEC 80000-13 または 10 進バイト単位で表現された、人間にとって読みやすい形式のサイズ。[`String`](/sql-reference/data-types/string) - -**返される値** - -バイト数を端数切り上げした整数値、または入力を解析できない場合は `0` を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT arrayJoin(['1 B', '1 KiB', '3 MB', '5.314 KiB', 'invalid']) AS readable_sizes, parseReadableSizeOrZero(readable_sizes) AS sizes; -``` - -```response title=Response -┌─readable_sizes─┬───sizes─┐ -│ 1 B │ 1 │ -│ 1 KiB │ 1024 │ -│ 3 MB │ 3000000 │ -│ 5.314 KiB │ 5442 │ -│ invalid │ 0 │ -└────────────────┴─────────┘ -``` - - -## parseTimeDelta - -導入バージョン: v22.7 - -時間単位を表す文字列が後続する数値列をパースします。 - -時間差(time delta)を表す文字列では、次の時間単位指定を使用できます: - -* `years`, `year`, `yr`, `y` -* `months`, `month`, `mo` -* `weeks`, `week`, `w` -* `days`, `day`, `d` -* `hours`, `hour`, `hr`, `h` -* `minutes`, `minute`, `min`, `m` -* `seconds`, `second`, `sec`, `s` -* `milliseconds`, `millisecond`, `millisec`, `ms` -* `microseconds`, `microsecond`, `microsec`, `μs`, `µs`, `us` -* `nanoseconds`, `nanosecond`, `nanosec`, `ns` - -複数の時間単位は、区切り文字(スペース、`;`、`-`、`+`、`,`、`:`)で組み合わせることができます。 - -年および月の長さは近似値です: 年は 365 日、月は 30.5 日です。 - -**構文** - -```sql -parseTimeDelta(timestr) -``` - -**引数** - -* `timestr` — 数値列の後に、時間単位のようなものが続く文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -秒数。[`Float64`](/sql-reference/data-types/float) - -**例** - -**使用例** - -```sql title=Query -SELECT parseTimeDelta('11s+22min') -``` - -```response title=Response -┌─parseTimeDelta('11s+22min')─┐ -│ 1331 │ -└─────────────────────────────┘ -``` - -**複雑な時間単位** - -```sql title=Query -SELECT parseTimeDelta('1yr2mo') -``` - -```response title=Response -┌─parseTimeDelta('1yr2mo')─┐ -│ 36806400 │ -└──────────────────────────┘ -``` - - -## partitionId - -導入バージョン: v21.4 - -[パーティション ID](../../engines/table-engines/mergetree-family/custom-partitioning-key.md)を計算します。 - -:::note -この関数は低速であるため、大量の行に対して呼び出すべきではありません。 -::: - -**構文** - -```sql -partitionId(column1[, column2, ...]) -``` - -**別名**: `partitionID` - -**引数** - -* `column1, column2, ...` — パーティション ID を取得するカラム。 - -**戻り値** - -行が属するパーティション ID を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -DROP TABLE IF EXISTS tab; - -CREATE TABLE tab -( - i int, - j int -) -ENGINE = MergeTree -PARTITION BY i -ORDER BY tuple(); - -INSERT INTO tab VALUES (1, 1), (1, 2), (1, 3), (2, 4), (2, 5), (2, 6); - -SELECT i, j, partitionId(i), _partition_id FROM tab ORDER BY i, j; -``` - -```response title=Response -┌─i─┬─j─┬─partitionId(i)─┬─_partition_id─┐ -│ 1 │ 1 │ 1 │ 1 │ -│ 1 │ 2 │ 1 │ 1 │ -│ 1 │ 3 │ 1 │ 1 │ -│ 2 │ 4 │ 2 │ 2 │ -│ 2 │ 5 │ 2 │ 2 │ -│ 2 │ 6 │ 2 │ 2 │ -└───┴───┴────────────────┴───────────────┘ -``` - - -## queryID - -導入バージョン: v21.9 - -現在のクエリの ID を返します。 -クエリのその他のパラメータは、[`system.query_log`](../../operations/system-tables/query_log.md) テーブルの `query_id` フィールドから取得できます。 - -[`initialQueryID`](#initialQueryID) 関数とは対照的に、`queryID` は異なるシャードでは異なる結果を返す場合があります。 - -**構文** - -```sql -queryID() -``` - -**別名**: `query_id` - -**引数** - -* なし。 - -**戻り値** - -現在のクエリのIDを返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -CREATE TABLE tmp (str String) ENGINE = Log; -INSERT INTO tmp (*) VALUES ('a'); -SELECT count(DISTINCT t) FROM (SELECT queryID() AS t FROM remote('127.0.0.{1..3}', currentDatabase(), 'tmp') GROUP BY queryID()); -``` - -```response title=Response -┌─count(DISTINCT t)─┐ -│ 3 │ -└───────────────────┘ -``` - - -## revision - -導入バージョン: v22.7 - -現在の ClickHouse サーバーのリビジョンを返します。 - -**構文** - -```sql -revision() -``` - -**引数** - -* なし。 - -**戻り値** - -現在の ClickHouse サーバーのリビジョン番号を返します。[`UInt32`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT revision() -``` - -```response title=Response -┌─revision()─┐ -│ 54485 │ -└────────────┘ -``` - - -## rowNumberInAllBlocks - -導入バージョン: v1.1 - -処理される各行に対して、一意の行番号を返します。 - -**構文** - -```sql -rowNumberInAllBlocks() -``` - -**引数** - -* なし。 - -**戻り値** - -データブロック内の行の行番号を `0` から始めて返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT rowNumberInAllBlocks() -FROM -( - SELECT * - FROM system.numbers_mt - LIMIT 10 -) -SETTINGS max_block_size = 2 -``` - -```response title=Response -┌─rowNumberInAllBlocks()─┐ -│ 0 │ -│ 1 │ -└────────────────────────┘ -┌─rowNumberInAllBlocks()─┐ -│ 4 │ -│ 5 │ -└────────────────────────┘ -┌─rowNumberInAllBlocks()─┐ -│ 2 │ -│ 3 │ -└────────────────────────┘ -┌─rowNumberInAllBlocks()─┐ -│ 6 │ -│ 7 │ -└────────────────────────┘ -┌─rowNumberInAllBlocks()─┐ -│ 8 │ -│ 9 │ -└────────────────────────┘ -``` - - -## rowNumberInBlock - -導入: v1.1 - -`rowNumberInBlock` によって処理される各[ブロック](../../development/architecture.md#block)に対して、現在の行番号を返します。 - -返される番号は、各ブロックごとに 0 から始まります。 - -**構文** - -```sql -rowNumberInBlock() -``` - -**引数** - -* なし。 - -**戻り値** - -データブロック内の行の番号を、`0` から始めて返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT rowNumberInBlock() -FROM -( - SELECT * - FROM system.numbers_mt - LIMIT 10 -) SETTINGS max_block_size = 2 -``` - -```response title=Response -┌─rowNumberInBlock()─┐ -│ 0 │ -│ 1 │ -└────────────────────┘ -┌─rowNumberInBlock()─┐ -│ 0 │ -│ 1 │ -└────────────────────┘ -┌─rowNumberInBlock()─┐ -│ 0 │ -│ 1 │ -└────────────────────┘ -┌─rowNumberInBlock()─┐ -│ 0 │ -│ 1 │ -└────────────────────┘ -┌─rowNumberInBlock()─┐ -│ 0 │ -│ 1 │ -└────────────────────┘ -``` - - -## runningAccumulate - -導入バージョン: v1.1 - -データブロック内の各行に対して、集約関数の状態を累積します。 - -:::warning 非推奨 -状態は、新しいデータブロックごとにリセットされます。 -このようにエラーを招きやすい挙動であるため、この関数は非推奨となっており、代わりに [window functions](/sql-reference/window-functions) の使用が推奨されます。 -この関数の使用を許可するには、設定 [`allow_deprecated_error_prone_window_functions`](/operations/settings/settings#allow_deprecated_error_prone_window_functions) を有効にしてください。 -::: - -**構文** - -```sql -runningAccumulate(agg_state[, grouping]) -``` - -**引数** - -* `agg_state` — 集約関数の状態。[`AggregateFunction`](/sql-reference/data-types/aggregatefunction) -* `grouping` — 省略可。グルーピングキー。`grouping` の値が変わると、関数の状態はリセットされます。等価演算子が定義されている、サポートされている任意のデータ型を使用できます。[`Any`](/sql-reference/data-types) - -**戻り値** - -各行について、累積された結果を返します。[`Any`](/sql-reference/data-types) - -**例** - -**initializeAggregation を使用した例** - -```sql title=Query -WITH initializeAggregation('sumState', number) AS one_row_sum_state -SELECT - number, - finalizeAggregation(one_row_sum_state) AS one_row_sum, - runningAccumulate(one_row_sum_state) AS cumulative_sum -FROM numbers(5); -``` - -```response title=Response -┌─number─┬─one_row_sum─┬─cumulative_sum─┐ -│ 0 │ 0 │ 0 │ -│ 1 │ 1 │ 1 │ -│ 2 │ 2 │ 3 │ -│ 3 │ 3 │ 6 │ -│ 4 │ 4 │ 10 │ -└────────┴─────────────┴────────────────┘ -``` - - -## runningConcurrency - -導入バージョン: v21.3 - -同時に発生しているイベントの数を計算します。 -各イベントには開始時刻と終了時刻があります。 -開始時刻はイベントに含まれますが、終了時刻は含まれません。 -開始時刻と終了時刻を表す列は、同じデータ型でなければなりません。 -この関数は、各イベントの開始時刻ごとに、アクティブ(同時実行)なイベントの合計数を計算します。 - -:::tip Requirements -イベントは開始時刻で昇順に並んでいる必要があります。 -この要件に違反した場合、関数は例外をスローします。 -各データブロックは個別に処理されます。 -異なるデータブロックに属するイベントが重なっている場合、それらは正しく処理されません。 -::: - -:::warning Deprecated -代わりに [window functions](/sql-reference/window-functions) を使用することが推奨されます。 -::: - -**構文** - -```sql -runningConcurrency(start, end) -``` - -**引数** - -* `start` — イベントの開始時刻を含む列。[`Date`](/sql-reference/data-types/date) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) -* `end` — イベントの終了時刻を含む列。[`Date`](/sql-reference/data-types/date) または [`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) - -**戻り値** - -各イベントの開始時刻における同時発生中のイベント数を返します。[`UInt32`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT start, runningConcurrency(start, end) FROM example_table; -``` - -```response title=Response -┌──────start─┬─runningConcurrency(start, end)─┐ -│ 2025-03-03 │ 1 │ -│ 2025-03-06 │ 2 │ -│ 2025-03-07 │ 3 │ -│ 2025-03-11 │ 2 │ -└────────────┴────────────────────────────────┘ -``` - - -## runningDifference - -導入バージョン: v1.1 - -データブロック内の連続する 2 つの行の値の差を計算します。 -最初の行については `0` を返し、それ以降の行については直前の行との差を返します。 - -:::warning Deprecated -現在処理中のデータブロック内でのみ差分を返します。 -このようにエラーを招きやすい挙動のため、この関数は非推奨です。 -代わりに [window functions](/sql-reference/window-functions) の使用が推奨されます。 - -この関数の使用を許可するには、設定 [`allow_deprecated_error_prone_window_functions`](/operations/settings/settings#allow_deprecated_error_prone_window_functions) を有効にしてください。 -::: - -関数の結果は、対象となるデータブロックと、そのブロック内のデータの順序に依存します。 -`runningDifference()` の計算時における行の順序は、ユーザーに返される行の順序と異なる場合があります。 -これを防ぐには、[`ORDER BY`](../../sql-reference/statements/select/order-by.md) を使用したサブクエリを作成し、そのサブクエリの外側からこの関数を呼び出します。 -ブロックサイズが結果に影響することに注意してください。 -`runningDifference` の内部状態は、新しいブロックごとにリセットされます。 - -**構文** - -```sql -runningDifference(x) -``` - -**引数** - -* `x` — ランニング差分(連続する行同士の差分)を計算する対象のカラム。[`Any`](/sql-reference/data-types) - -**戻り値** - -連続する値同士の差分を返します。最初の行については 0 を返します。 - -**例** - -**使用例** - -```sql title=Query -SELECT - EventID, - EventTime, - runningDifference(EventTime) AS delta -FROM -( - SELECT - EventID, - EventTime - FROM events - WHERE EventDate = '2025-11-24' - ORDER BY EventTime ASC - LIMIT 5 -); -``` - -```response title=Response -┌─EventID─┬───────────EventTime─┬─delta─┐ -│ 1106 │ 2025-11-24 00:00:04 │ 0 │ -│ 1107 │ 2025-11-24 00:00:05 │ 1 │ -│ 1108 │ 2025-11-24 00:00:05 │ 0 │ -│ 1109 │ 2025-11-24 00:00:09 │ 4 │ -│ 1110 │ 2025-11-24 00:00:10 │ 1 │ -└─────────┴─────────────────────┴───────┘ -``` - -**ブロックサイズが与える影響の例** - -```sql title=Query -SELECT - number, - runningDifference(number + 1) AS diff -FROM numbers(100000) -WHERE diff != 1; -``` - -```response title=Response -┌─number─┬─diff─┐ -│ 0 │ 0 │ -└────────┴──────┘ -┌─number─┬─diff─┐ -│ 65536 │ 0 │ -└────────┴──────┘ -``` - - -## runningDifferenceStartingWithFirstValue - -導入バージョン: v1.1 - -データブロック内の連続する行の値の差分を計算します。ただし [`runningDifference`](#runningDifference) と異なり、最初の行については `0` ではなく実際の値を返します。 - -:::warning Deprecated -現在処理中のデータブロック内でのみ差分を返します。 -このような誤用を招きやすい挙動のため、この関数は非推奨です。 -代わりに [ウィンドウ関数](/sql-reference/window-functions) を使用することを推奨します。 - -設定 `allow_deprecated_error_prone_window_functions` を有効にすると、この関数を使用できます。 -::: - -**構文** - -```sql -runningDifferenceStartingWithFirstValue(x) -``` - -**引数** - -* `x` — 連続する行の差分(running difference)を計算する列。[`Any`](/sql-reference/data-types) - -**戻り値** - -連続する値同士の差分を返し、最初の行についてはその行自身の値を返します。[`Any`](/sql-reference/data-types) - -**例** - -**使用例** - -```sql title=Query -SELECT - number, - runningDifferenceStartingWithFirstValue(number) AS diff -FROM numbers(5); -``` - -```response title=Response -┌─number─┬─diff─┐ -│ 0 │ 0 │ -│ 1 │ 1 │ -│ 2 │ 1 │ -│ 3 │ 1 │ -│ 4 │ 1 │ -└────────┴──────┘ -``` - - -## serverUUID - -導入バージョン: v20.1 - -サーバーが最初に起動したときに生成される、ランダムかつ一意な UUID (v4) を返します。 -この UUID は永続化されており、2 回目、3 回目以降のサーバー起動でも同じ UUID が返されます。 - -**構文** - -```sql -serverUUID() -``` - -**引数** - -* なし。 - -**戻り値** - -サーバーのランダムな UUID を返します。[`UUID`](/sql-reference/data-types/uuid) - -**例** - -**使用例** - -```sql title=Query -SELECT serverUUID(); -``` - -```response title=Response -┌─serverUUID()─────────────────────────────┐ -│ 7ccc9260-000d-4d5c-a843-5459abaabb5f │ -└──────────────────────────────────────────┘ -``` - - -## shardCount - -導入されたバージョン: v21.9 - -分散クエリのシャード数の合計を返します。 -クエリが分散クエリでない場合は、定数値 `0` が返されます。 - -**構文** - -```sql -shardCount() -``` - -**引数** - -* なし - -**戻り値** - -シャードの総数、または `0` を返します。[`UInt32`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query --- shardCount()も示す上記のshardNum()の例を参照してください -CREATE TABLE shard_count_example (dummy UInt8) -ENGINE=Distributed(test_cluster_two_shards_localhost, system, one, dummy); -SELECT shardCount() FROM shard_count_example; -``` - -```response title=Response -┌─shardCount()─┐ -│ 2 │ -│ 2 │ -└──────────────┘ -``` - - -## shardNum - -導入バージョン: v21.9 - -分散クエリでデータの一部を処理するシャードのインデックスを返します。 -インデックスは `1` から始まります。 -クエリが分散クエリでない場合は、定数値 `0` が返されます。 - -**構文** - -```sql -shardNum() -``` - -**引数** - -* なし。 - -**戻り値** - -シャードインデックスの値、または定数 `0` を返します。[`UInt32`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -CREATE TABLE shard_num_example (dummy UInt8) -ENGINE=Distributed(test_cluster_two_shards_localhost, system, one, dummy); -SELECT dummy, shardNum(), shardCount() FROM shard_num_example; -``` - -```response title=Response -┌─dummy─┬─shardNum()─┬─shardCount()─┐ -│ 0 │ 1 │ 2 │ -│ 0 │ 2 │ 2 │ -└───────┴────────────┴──────────────┘ -``` - - -## showCertificate - -導入バージョン: v22.6 - -現在のサーバーに Secure Sockets Layer (SSL) 証明書が構成されている場合、その証明書に関する情報を表示します。 -ClickHouse で OpenSSL 証明書を使用して接続を検証する方法の詳細については、[Configuring SSL-TLS](/guides/sre/configuring-ssl) を参照してください。 - -**構文** - -```sql -showCertificate() -``` - -**引数** - -* なし。 - -**戻り値** - -設定された SSL 証明書に関連するキーと値のペアからなるマップを返します。[`Map(String, String)`](/sql-reference/data-types/map) - -**例** - -**使用例** - -```sql title=Query -SELECT showCertificate() FORMAT LineAsString; -``` - -```response title=Response -{'version':'1','serial_number':'2D9071D64530052D48308473922C7ADAFA85D6C5','signature_algo':'sha256WithRSAEncryption','issuer':'/CN=marsnet.local CA','not_before':'May 7 17:01:21 2024 GMT','not_after':'May 7 17:01:21 2025 GMT','subject':'/CN=chnode1','pkey_algo':'rsaEncryption'} -``` - - -## sleep - -導入バージョン: v1.1 - -クエリの実行を、指定した秒数だけ一時停止します。 -この関数は主にテストやデバッグの目的で使用されます。 - -`sleep()` 関数は、クエリのパフォーマンスやシステムの応答性に悪影響を与える可能性があるため、一般的には本番環境での使用は推奨されません。 -ただし、次のようなシナリオでは有用な場合があります。 - -1. **テスト**: ClickHouse のテストやベンチマークを行う際、遅延をシミュレートしたり、一時停止を挿入して、特定の条件下でシステムがどのように動作するかを観察したい場合があります。 -2. **デバッグ**: 特定時点でのシステムの状態やクエリ実行状況を確認する必要がある場合、`sleep()` を使用して一時停止を挿入し、その間に関連情報を確認または収集できます。 -3. **シミュレーション**: ネットワーク遅延や外部システム依存など、現実のシナリオで発生する遅延や一時停止をシミュレートしたいケースがあります。 - -:::warning -`sleep()` 関数は、ClickHouse システム全体のパフォーマンスや応答性に影響を与える可能性があるため、必要な場合に限り慎重に使用することが重要です。 -::: - -セキュリティ上の理由から、この関数はデフォルトのユーザープロファイル(`allow_sleep` が有効になっているもの)でのみ実行できます。 - -**構文** - -```sql -sleep(秒) -``` - -**引数** - -* `seconds` — クエリの実行を一時停止する秒数。最大 3 秒まで指定できます。小数秒を指定する場合は浮動小数点値を使用します。[`const UInt*`](/sql-reference/data-types/int-uint) または [`const Float*`](/sql-reference/data-types/float) - -**戻り値** - -`0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query --- このクエリは完了前に2秒間一時停止します。 --- この間、結果は返されず、クエリがハングまたは応答していないように見えます。 -SELECT sleep(2); -``` - -```response title=Response -┌─sleep(2)─┐ -│ 0 │ -└──────────┘ -1 row in set. Elapsed: 2.012 sec. -``` - - -## sleepEachRow - -導入バージョン:v1.1 - -結果セット内の各行について、指定した秒数だけクエリの実行を一時停止します。 - -`sleepEachRow()` 関数は主にテストおよびデバッグ目的で使用され、[`sleep()`](#sleep) 関数と同様の役割を持ちます。 -各行の処理に遅延や一時停止を挿入してシミュレートでき、次のようなシナリオで有用です。 - -1. **テスト**: 特定の条件下での ClickHouse のパフォーマンスをテストまたはベンチマークする際に、`sleepEachRow()` を使用して、処理される各行ごとに遅延や一時停止をシミュレートできます。 -2. **デバッグ**: 処理される各行について、システムの状態やクエリの実行状況を確認する必要がある場合に、`sleepEachRow()` を使用して一時停止を挿入し、その間に関連情報を検査または収集できます。 -3. **シミュレーション**: 外部システムとの連携やネットワーク遅延など、各行の処理ごとに遅延や一時停止が発生する実運用に近いシナリオを再現したい場合に使用できます。 - -:::warning -`sleep()` 関数と同様に、`sleepEachRow()` は ClickHouse システム全体のパフォーマンスおよび応答性に大きな影響を与える可能性があるため、特に大きな結果セットを扱う場合には、必要な場合にのみ慎重に使用することが重要です。 -::: - -**構文** - -```sql -sleepEachRow(秒) -``` - -**引数** - -* `seconds` — 結果セット内の各行ごとに、クエリ実行を一時停止する秒数(最大 3 秒まで)。浮動小数点数を使用して秒未満の値も指定できます。[`const UInt*`](/sql-reference/data-types/int-uint) または [`const Float*`](/sql-reference/data-types/float) - -**戻り値** - -各行に対して `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query --- 出力は遅延され、各行の間に0.5秒の間隔が設けられます。 -SELECT number, sleepEachRow(0.5) FROM system.numbers LIMIT 5; -``` - -```response title=Response -┌─number─┬─sleepEachRow(0.5)─┐ -│ 0 │ 0 │ -│ 1 │ 0 │ -│ 2 │ 0 │ -│ 3 │ 0 │ -│ 4 │ 0 │ -└────────┴───────────────────┘ -``` - - -## structureToCapnProtoSchema - -導入バージョン: v - -ClickHouse テーブルの構造を CapnProto 形式のスキーマに変換する関数。 - -**構文** - -```sql -``` - -**引数** - -* なし。 - -**戻り値** - -**使用例** - -**random** - -```sql title=Query -SELECT structureToCapnProtoSchema('s String, x UInt32', 'MessageName') format TSVRaw -``` - -```response title=Response -struct MessageName -{ - s @0 : Data; - x @1 : UInt32; -} -``` - - -## structureToProtobufSchema - -導入バージョン: v23.8 - -ClickHouse のテーブル構造を Protobuf 形式のスキーマに変換します。 - -この関数は、ClickHouse のテーブル構造定義を受け取り、それを Protocol Buffers (Protobuf) -の proto3 構文によるスキーマ定義に変換します。これは、データ交換のために ClickHouse -のテーブル構造と一致する Protobuf スキーマを生成する際に有用です。 - -**構文** - -```sql -structureToProtobufSchema(structure, message_name) -``` - -**引数** - -* `structure` — ClickHouse テーブルの構造定義を表す文字列(例: 'column1 Type1, column2 Type2')。[`String`](/sql-reference/data-types/string) -* `message_name` — 生成されるスキーマで使用する Protobuf メッセージ型の名前。[`String`](/sql-reference/data-types/string) - -**戻り値** - -入力された ClickHouse の構造定義に対応する、proto3 構文の Protobuf スキーマ定義を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**ClickHouse 構造を Protobuf スキーマに変換する** - -```sql title=Query -SELECT structureToProtobufSchema('s String, x UInt32', 'MessageName') FORMAT TSVRaw; -``` - -```response title=Response -syntax = "proto3"; - -message MessageName -{ - bytes s = 1; - uint32 x = 2; -} -``` - - -## tcpPort - -導入バージョン: v20.12 - -サーバーが待ち受けている [ネイティブインターフェイス](../../interfaces/tcp.md) の TCP ポート番号を返します。 -分散テーブルのコンテキストで実行した場合、この関数は各シャードに対応する値を持つ通常の列を生成します。 -それ以外の場合は定数値を返します。 - -**構文** - -```sql -tcpPort() -``` - -**引数** - -* なし。 - -**戻り値** - -TCP ポート番号([`UInt16`](/sql-reference/data-types/int-uint))を返します。 - -**例** - -**使用例** - -```sql title=Query -SELECT tcpPort() -``` - -```response title=Response -┌─tcpPort()─┐ -│ 9000 │ -└───────────┘ -``` - - -## throwIf - -導入されたバージョン: v1.1 - -引数 x が true の場合に例外をスローします。 -`error_code` 引数を使用するには、設定パラメータ `allow_custom_error_code_in_throw` を有効にする必要があります。 - -**構文** - -```sql -throwIf(x[, message[, error_code]]) -``` - -**引数** - -* `x` — チェックする条件。[`Any`](/sql-reference/data-types) -* `message` — 省略可。カスタムエラーメッセージ。[`const String`](/sql-reference/data-types/string) -* `error_code` — 省略可。カスタムエラーコード。[`const Int8/16/32`](/sql-reference/data-types/int-uint) - -**返り値** - -条件が偽の場合は `0` を返し、条件が真の場合は例外をスローします。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT throwIf(number = 3, 'Too many') FROM numbers(10); -``` - -```response title=Response -↙ Progress: 0.00 rows, 0.00 B (0.00 rows/s., 0.00 B/s.) サーバーから例外を受信しました (version 19.14.1): -Code: 395. DB::Exception: Received from localhost:9000. DB::Exception: Too many. -``` - - -## toColumnTypeName - -導入: v1.1 - -指定された値のデータ型の内部名を返します。 -関数 [`toTypeName`](#toTypeName) と異なり、返されるデータ型には `Const` や `LowCardinality` のような内部的なラッパー列が含まれる場合があります。 - -**構文** - -```sql -toColumnTypeName(value) -``` - -**引数** - -* `value` — 内部データ型を取得する対象の値。[`Any`](/sql-reference/data-types) - -**戻り値** - -値を表現するために使用される内部データ型を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT toColumnTypeName(CAST('2025-01-01 01:02:03' AS DateTime)); -``` - -```response title=Response -┌─toColumnTypeName(CAST('2025-01-01 01:02:03', 'DateTime'))─┐ -│ Const(UInt32) │ -└───────────────────────────────────────────────────────────┘ -``` - - -## toTypeName - -導入バージョン: v1.1 - -渡された引数の型名を返します。 -`NULL` が渡された場合、この関数は型 `Nullable(Nothing)` を返します。これは ClickHouse の内部の `NULL` 表現に対応します。 - -**構文** - -```sql -toTypeName(x) -``` - -**引数** - -* `x` — 任意の型の値。[`Any`](/sql-reference/data-types) - -**戻り値** - -入力値のデータ型名を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT toTypeName(123) -``` - -```response title=Response -┌─toTypeName(123)─┐ -│ UInt8 │ -└─────────────────┘ -``` - - -## transactionID - -導入バージョン: v22.6 - - - - - -トランザクションの ID を返します。 - -:::note -この関数は実験的な機能セットの一部です。 -[設定ファイル](/operations/configuration-files) に次の設定を追加して、実験的なトランザクション機能を有効にします。 - -```xml - - 1 - -``` - -詳細については、[Transactional (ACID) support](/guides/developer/transactional#transactions-commit-and-rollback) ページを参照してください。 -::: - -**構文** - -```sql -transactionID() -``` - -**引数** - -* なし。 - -**返り値** - -`start_csn`、`local_tid`、`host_id` から成るタプルを返します。 - -* `start_csn`: グローバルな連番で、このトランザクションの開始時点で観測された最新のコミットタイムスタンプ。 -* `local_tid`: 特定の `start_csn` の下で、このホストが開始した各トランザクションごとに一意となるローカルな連番。 -* `host_id`: このトランザクションを開始したホストの UUID。 - [`Tuple(UInt64, UInt64, UUID)`](/sql-reference/data-types/tuple) - -**例** - -**使用例** - -```sql title=Query -BEGIN TRANSACTION; -SELECT transactionID(); -ROLLBACK; -``` - -```response title=Response -┌─transactionID()────────────────────────────────┐ -│ (32,34,'0ee8b069-f2bb-4748-9eae-069c85b5252b') │ -└────────────────────────────────────────────────┘ -``` - - -## transactionLatestSnapshot - -導入バージョン: v22.6 - - - - - -読み取り可能な [transaction](/guides/developer/transactional#transactions-commit-and-rollback) の最新のスナップショット(コミットシーケンス番号)を返します。 - -:::note -この関数は実験的な機能セットの一部です。トランザクションの実験的サポート機能を有効にするには、次の設定を構成に追加してください。 - -```xml - - 1 - -``` - -詳細については、[Transactional (ACID) support](/guides/developer/transactional#transactions-commit-and-rollback)ページを参照してください。 -::: - -**構文** - -```sql -transactionLatestSnapshot() -``` - -**引数** - -* なし。 - -**戻り値** - -トランザクションの最新スナップショット(CSN)を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -BEGIN TRANSACTION; -SELECT transactionLatestSnapshot(); -ROLLBACK; -``` - -```response title=Response -┌─transactionLatestSnapshot()─┐ -│ 32 │ -└─────────────────────────────┘ -``` - - -## transactionOldestSnapshot - -導入バージョン: v22.6 - - - - - -実行中のいずれかの[トランザクション](/guides/developer/transactional#transactions-commit-and-rollback)から可視な、最も古いスナップショット(コミットシーケンス番号, Commit Sequence Number)を返します。 - -:::note -この関数は実験的機能セットの一部です。実験的なトランザクションサポートを有効にするには、次の設定を設定に追加してください。 - -```xml - - 1 - -``` - -詳細については、[トランザクション(ACID)サポート](/guides/developer/transactional#transactions-commit-and-rollback)のページを参照してください。 -::: - -**構文** - -```sql -transactionOldestSnapshot() -``` - -**引数** - -* なし - -**戻り値** - -トランザクションの最も古いスナップショット(CSN)を返します。型は [`UInt64`](/sql-reference/data-types/int-uint) です。 - -**例** - -**使用例** - -```sql title=Query -BEGIN TRANSACTION; -SELECT transactionOldestSnapshot(); -ROLLBACK; -``` - -```response title=Response -┌─transactionOldestSnapshot()─┐ -│ 32 │ -└─────────────────────────────┘ -``` - - -## transform - -導入バージョン: v1.1 - -明示的に定義された、ある要素から別の要素へのマッピングに従って値を変換します。 - -この関数には 2 つのバリエーションがあります: - -* `transform(x, array_from, array_to, default)` - マッピング用配列を用いて `x` を変換し、一致しない要素にはデフォルト値を使用します -* `transform(x, array_from, array_to)` - 同じ変換を行いますが、一致が見つからない場合は元の `x` を返します - -この関数は `array_from` 内で `x` を検索し、同じインデックス位置の `array_to` の要素を返します。 -`array_from` 内で `x` が見つからない場合は、`default` 値(4 パラメータ版)または元の `x`(3 パラメータ版)を返します。 -`array_from` に複数の一致する要素が存在する場合は、最初に一致した要素に対応する要素を返します。 - -要件: - -* `array_from` と `array_to` は同じ要素数でなければなりません -* 4 パラメータ版: `transform(T, Array(T), Array(U), U) -> U` であり、`T` と `U` は互換性のある異なる型でもかまいません -* 3 パラメータ版: `transform(T, Array(T), Array(T)) -> T` であり、すべての型が同一でなければなりません - -**構文** - -```sql -transform(x, array_from, array_to[, default]) -``` - -**引数** - -* `x` — 変換する値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Decimal`](/sql-reference/data-types/decimal) または [`Float*`](/sql-reference/data-types/float) または [`String`](/sql-reference/data-types/string) または [`Date`](/sql-reference/data-types/date) または [`DateTime`](/sql-reference/data-types/datetime) -* `array_from` — 一致する値を検索するための定数配列。[`Array((U)Int*)`](/sql-reference/data-types/array) または [`Array(Decimal)`](/sql-reference/data-types/array) または [`Array(Float*)`](/sql-reference/data-types/array) または [`Array(String)`](/sql-reference/data-types/array) または [`Array(Date)`](/sql-reference/data-types/array) または [`Array(DateTime)`](/sql-reference/data-types/array) -* `array_to` — `array_from` 内の一致に対応して返す値の定数配列。[`Array((U)Int*)`](/sql-reference/data-types/array) または [`Array(Decimal)`](/sql-reference/data-types/array) または [`Array(Float*)`](/sql-reference/data-types/array) または [`Array(String)`](/sql-reference/data-types/array) または [`Array(Date)`](/sql-reference/data-types/array) または [`Array(DateTime)`](/sql-reference/data-types/array) -* `default` — 省略可能。`x` が `array_from` に見つからない場合に返す値。省略された場合は、変更されていない `x` を返す。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Decimal`](/sql-reference/data-types/decimal) または [`Float*`](/sql-reference/data-types/float) または [`String`](/sql-reference/data-types/string) または [`Date`](/sql-reference/data-types/date) または [`DateTime`](/sql-reference/data-types/datetime) - -**返される値** - -`x` が `array_from` の要素と一致する場合は `array_to` から対応する値を返し、それ以外の場合は `default` が指定されていれば `default` を、指定されていなければ `x` を返す。[`Any`](/sql-reference/data-types) - -**例** - -**transform(T, Array(T), Array(U), U) -> U** - -```sql title=Query -SELECT -transform(SearchEngineID, [2, 3], ['Yandex', 'Google'], 'その他') AS title, -count() AS c -FROM test.hits -WHERE SearchEngineID != 0 -GROUP BY title -ORDER BY c DESC -``` - -```response title=Response -┌─title─────┬──────c─┐ -│ Yandex │ 498635 │ -│ Google │ 229872 │ -│ Other │ 104472 │ -└───────────┴────────┘ -``` - -**transform(T, Array(T), Array(T)) -> T** - -```sql title=Query -SELECT -transform(domain(Referer), ['yandex.ru', 'google.ru', 'vkontakte.ru'], ['www.yandex', 'example.com', 'vk.com']) AS s, count() AS c -FROM test.hits -GROUP BY domain(Referer) -ORDER BY count() DESC -LIMIT 10 -``` - - -```response title=Response -┌─s──────────────┬───────c─┐ -│ │ 2906259 │ -│ www.yandex │ 867767 │ -│ ███████.ru │ 313599 │ -│ mail.yandex.ru │ 107147 │ -│ ██████.ru │ 100355 │ -│ █████████.ru │ 65040 │ -│ news.yandex.ru │ 64515 │ -│ ██████.net │ 59141 │ -│ example.com │ 57316 │ -└────────────────┴─────────┘ -``` - - -## uniqThetaIntersect - -導入バージョン: v22.9 - -2つの uniqThetaSketch オブジェクトに対して共通部分(集合演算 ∩)の計算を行い、その結果として新しい uniqThetaSketch を返します。 - -**構文** - -```sql -uniqThetaIntersect(uniqThetaSketch,uniqThetaSketch) -``` - -**引数** - -* `uniqThetaSketch` — uniqThetaSketch オブジェクト。[`Tuple`](/sql-reference/data-types/tuple) または [`Array`](/sql-reference/data-types/array) または [`Date`](/sql-reference/data-types/date) または [`DateTime`](/sql-reference/data-types/datetime) または [`String`](/sql-reference/data-types/string) または [`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) - -**戻り値** - -積集合の結果を含む新しい uniqThetaSketch オブジェクト。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT finalizeAggregation(uniqThetaIntersect(a, b)) AS a_intersect_b, finalizeAggregation(a) AS a_cardinality, finalizeAggregation(b) AS b_cardinality -FROM -(SELECT arrayReduce('uniqThetaState', [1, 2]) AS a, arrayReduce('uniqThetaState', [2, 3, 4]) AS b); -``` - -```response title=Response -┌─a_intersect_b─┬─a_cardinality─┬─b_cardinality─┐ -│ 1 │ 2 │ 3 │ -└───────────────┴───────────────┴───────────────┘ -``` - - -## uniqThetaNot - -導入バージョン: v22.9 - -2 つの uniqThetaSketch オブジェクトに対して a_not_b 計算(集合演算 ×)を行い、その結果として新しい uniqThetaSketch を生成します。 - -**構文** - -```sql -uniqThetaNot(uniqThetaSketch,uniqThetaSketch) -``` - -**引数** - -* `uniqThetaSketch` — uniqThetaSketch オブジェクト。[`Tuple`](/sql-reference/data-types/tuple) または [`Array`](/sql-reference/data-types/array) または [`Date`](/sql-reference/data-types/date) または [`DateTime`](/sql-reference/data-types/datetime) または [`String`](/sql-reference/data-types/string) または [`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) - -**戻り値** - -a_not_b の結果を含む新しい uniqThetaSketch オブジェクトを返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT finalizeAggregation(uniqThetaNot(a, b)) AS a_not_b, finalizeAggregation(a) AS a_cardinality, finalizeAggregation(b) AS b_cardinality -FROM -(SELECT arrayReduce('uniqThetaState', [2, 3, 4]) AS a, arrayReduce('uniqThetaState', [1, 2]) AS b); -``` - -```response title=Response -┌─a_not_b─┬─a_cardinality─┬─b_cardinality─┐ -│ 2 │ 3 │ 2 │ -└─────────┴───────────────┴───────────────┘ -``` - - -## uniqThetaUnion - -導入バージョン: v22.9 - -2 つの uniqThetaSketch オブジェクトの和集合(集合演算 ∪)を計算し、その結果として新しい uniqThetaSketch を返します。 - -**構文** - -```sql -uniqThetaUnion(uniqThetaSketch,uniqThetaSketch) -``` - -**引数** - -* `uniqThetaSketch` — uniqThetaSketch オブジェクト。[`Tuple`](/sql-reference/data-types/tuple) または [`Array`](/sql-reference/data-types/array) または [`Date`](/sql-reference/data-types/date) または [`DateTime`](/sql-reference/data-types/datetime) または [`String`](/sql-reference/data-types/string) または [`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) - -**戻り値** - -和集合の結果を含む新しい uniqThetaSketch を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT finalizeAggregation(uniqThetaUnion(a, b)) AS a_union_b, finalizeAggregation(a) AS a_cardinality, finalizeAggregation(b) AS b_cardinality -FROM -(SELECT arrayReduce('uniqThetaState', [1, 2]) AS a, arrayReduce('uniqThetaState', [2, 3, 4]) AS b); -``` - -```response title=Response -┌─a_union_b─┬─a_cardinality─┬─b_cardinality─┐ -│ 4 │ 2 │ 3 │ -└───────────┴───────────────┴───────────────┘ -``` - - -## uptime - -導入バージョン: v1.1 - -サーバーの稼働時間(アップタイム)を秒単位で返します。 -分散テーブルのコンテキストで実行された場合、この関数は各シャードに応じた値を持つ通常の列を生成します。 -それ以外の場合は、定数値を返します。 - -**構文** - -```sql -uptime() -``` - -**引数** - -* なし。 - -**返り値** - -サーバーの稼働時間を秒単位の [`UInt32`](/sql-reference/data-types/int-uint) で返します。 - -**例** - -**使用例** - -```sql title=Query -SELECT uptime() AS Uptime -``` - -```response title=Response -┌─稼働時間─┐ -│ 55867 │ -└────────┘ -``` - - -## variantElement - -導入バージョン: v25.2 - -`Variant` 列から、指定した型のカラムを抽出します。 - -**構文** - -```sql -variantElement(variant, type_name[, default_value]) -``` - -**引数** - -* `variant` — Variant 列。[`Variant`](/sql-reference/data-types/variant) -* `type_name` — 抽出する Variant 型の名前。[`String`](/sql-reference/data-types/string) -* `default_value` — `variant` に指定された型の Variant 値が存在しない場合に使用されるデフォルト値。任意の型を指定可能。省略可。[`Any`](/sql-reference/data-types) - -**戻り値** - -Variant 列から指定された Variant 型の値を抽出した列を返します。[`Any`](/sql-reference/data-types) - -**例** - -**使用例** - -```sql title=Query -CREATE TABLE test (v Variant(UInt64, String, Array(UInt64))) ENGINE = Memory; -INSERT INTO test VALUES (NULL), (42), ('Hello, World!'), ([1, 2, 3]); -SELECT v, variantElement(v, 'String'), variantElement(v, 'UInt64'), variantElement(v, 'Array(UInt64)') FROM test; -``` - -```response title=Response -┌─v─────────────┬─variantElement(v, 'String')─┬─variantElement(v, 'UInt64')─┬─variantElement(v, 'Array(UInt64)')─┐ -│ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ [] │ -│ 42 │ ᴺᵁᴸᴸ │ 42 │ [] │ -│ Hello, World! │ Hello, World! │ ᴺᵁᴸᴸ │ [] │ -│ [1,2,3] │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ [1,2,3] │ -└───────────────┴─────────────────────────────┴─────────────────────────────┴────────────────────────────────────┘ -``` - - -## variantType - -導入バージョン: v24.2 - -`Variant` 列の各行に対して、そのバリアント型の名前を返します。行に NULL が含まれている場合、その行については 'None' を返します。 - -**構文** - -```sql -variantType(variant) -``` - -**引数** - -* `variant` — Variant 列。[`Variant`](/sql-reference/data-types/variant) - -**戻り値** - -各行の Variant 型名を含む Enum 列を返します。[`Enum`](/sql-reference/data-types/enum) - -**例** - -**使用例** - -```sql title=Query -CREATE TABLE test (v Variant(UInt64, String, Array(UInt64))) ENGINE = Memory; -INSERT INTO test VALUES (NULL), (42), ('Hello, World!'), ([1, 2, 3]); -SELECT variantType(v) FROM test; -``` - -```response title=Response -┌─variantType(v)─┐ -│ None │ -│ UInt64 │ -│ String │ -│ Array(UInt64) │ -└────────────────┘ -``` - - -## version - -導入バージョン: v1.1 - -ClickHouse の現在のバージョンを、`major_version.minor_version.patch_version.number_of_commits_since_the_previous_stable_release` という形式の文字列として返します。 -分散テーブルのコンテキストで実行された場合、この関数は各シャードに対応する値を持つ通常のカラムを生成します。 -それ以外の場合は、定数値を返します。 - -**構文** - -```sql -version() -``` - -**引数** - -* なし。 - -**戻り値** - -ClickHouse の現在のバージョンを返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT version() -``` - -```response title=Response -┌─version()─┐ -│ 24.2.1.1 │ -└───────────┘ -``` - - -## visibleWidth - -導入: v1.1 - -値をテキスト形式(タブ区切り)でコンソールに出力する際のおおよその表示幅を計算します。 -この関数は、システム内部で Pretty フォーマットを実装するために使用されます。 -Pretty フォーマットでは、`NULL` は `NULL` に対応する文字列として表現されます。 - -**構文** - -```sql -visibleWidth(x) -``` - -**引数** - -* `x` — 任意のデータ型の値。[`Any`](/sql-reference/data-types) - -**戻り値** - -値をテキスト形式で表示したときのおおよその表示幅を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**NULL の表示幅を計算する** - -```sql title=Query -SELECT visibleWidth(NULL) -``` - -```response title=Response -┌─visibleWidth(NULL)─┐ -│ 4 │ -└────────────────────┘ -``` - - -## zookeeperSessionUptime - -導入: v21.11 - -現在の ZooKeeper セッションの稼働時間を秒単位で返します。 - -**構文** - -```sql -zookeeperSessionUptime() -``` - -**引数** - -* なし。 - -**戻り値** - -現在の ZooKeeper セッションの稼働時間(秒)を返します。[`UInt32`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT zookeeperSessionUptime(); -``` - -```response title=Response -┌─zookeeperSessionUptime()─┐ -│ 286 │ -└──────────────────────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/random-functions.md b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/random-functions.md index 8938da12d43..a9d83fbb83c 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/random-functions.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/random-functions.md @@ -1,831 +1,34 @@ --- -description: '乱数を生成する関数のドキュメント' +description: '乱数を生成する関数に関するドキュメント' sidebar_label: '乱数' slug: /sql-reference/functions/random-functions -title: '乱数生成関数' +title: '乱数を生成する関数' doc_type: 'reference' --- - - # 乱数を生成する関数 -このセクションのすべての関数は、引数を 0 個または 1 個受け取ります。引数(渡された場合)の唯一の用途は、[共通部分式除去](/sql-reference/functions/overview#common-subexpression-elimination) を防止することです。これにより、同じ乱数関数が同一行内で複数回実行された場合でも、それぞれ異なる乱数値が返されます。 +このセクションのすべての関数は、引数を 0 個または 1 個だけ取ります。引数(指定された場合)の唯一の用途は、[common subexpression elimination](/sql-reference/functions/overview#common-subexpression-elimination) を防ぎ、同じ行内で同じ乱数関数を 2 回評価した場合でも、異なる乱数値が返されるようにすることです。 関連コンテンツ -* ガイド: [ClickHouse でランダムデータを生成する](/guides/generating-test-data) -* ブログ: [ClickHouse でランダムデータを生成する](https://clickhouse.com/blog/generating-random-test-distribution-data-for-clickhouse) +* ガイド: [ClickHouse でランダムなデータを生成する](/guides/generating-test-data) +* ブログ: [ClickHouse でランダムなデータを生成する](https://clickhouse.com/blog/generating-random-test-distribution-data-for-clickhouse) :::note -乱数は、暗号学的アルゴリズムではないアルゴリズムによって生成されます。 +乱数は暗号用途を想定していないアルゴリズムによって生成されます。 ::: :::note -以下のドキュメントは、`system.functions` システムテーブルから自動生成されています。 +以下のドキュメントは、`system.functions` システムテーブルから生成されています。 ::: {/* 以下のタグ内の内容は、ドキュメントフレームワークのビルド時に - system.functions から自動生成されたドキュメントで置き換えられます。タグを変更または削除しないでください。 + system.functions から生成されるドキュメントに置き換えられます。タグを変更または削除しないでください。 詳細は https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md を参照してください。 */ } - {/*AUTOGENERATED_START*/ } -## fuzzBits - -導入バージョン: v20.5 - -入力文字列 `s` の各ビットを、確率 `p` で反転します。 - -**構文** - -```sql -fuzzBits(s, p) -``` - -**引数** - -* `s` — ビットファジングを行う対象の `String` または `FixedString` 型 [`String`](/sql-reference/data-types/string) または [`FixedString`](/sql-reference/data-types/fixedstring) -* `p` — 各ビットを反転させる確率を `0.0` から `1.0` の間の数値として指定します [`Float*`](/sql-reference/data-types/float) - -**返り値** - -`s` と同じ型の、ファジングが行われた文字列を返します。[`String`](/sql-reference/data-types/string) または [`FixedString`](/sql-reference/data-types/fixedstring) - -**例** - -**使用例** - -```sql title=Query -SELECT fuzzBits(materialize('abacaba'), 0.1) -FROM numbers(3) -``` - -```response title=Response -┌─fuzzBits(materialize('abacaba'), 0.1)─┐ -│ abaaaja │ -│ a*cjab+ │ -│ aeca2A │ -└───────────────────────────────────────┘ -``` - - -## rand - -導入バージョン: v1.1 - -一様分布に従う乱数の `UInt32` 値を返します。 - -初期状態(シード値)をシステムから取得する線形合同法による擬似乱数生成器を使用します。そのため見かけ上はランダムですが、真のランダムではなく、初期状態が知られている場合には予測可能になる可能性があります。 -真のランダム性が重要となるシナリオでは、システムレベルの呼び出しや外部ライブラリとの連携など、代替手段の利用を検討してください。 - -**構文** - -```sql -rand([x]) -``` - -**別名**: `rand32` - -**引数** - -* `x` — 省略可能であり、無視されます。この引数の唯一の目的は、同じ関数呼び出しがクエリ内で複数回使用される場合に、[共通部分式除去](/sql-reference/functions/overview#common-subexpression-elimination) を防ぐことです。[`Any`](/sql-reference/data-types) - -**返される値** - -`UInt32` 型の乱数を返します。[`UInt32`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT rand(); -``` - -```response title=Response -1569354847 -``` - - -## rand64 - -導入バージョン: v1.1 - -一様分布に従う `UInt64` 型の乱数値を返します。 - -内部的には、初期状態をシステムから取得する線形合同法に基づく擬似乱数生成器を使用します。そのため見かけ上はランダムですが、真の乱数ではなく、初期状態が既知であれば予測可能です。 -真のランダム性が重要となるシナリオでは、システムコールの利用や外部ライブラリとの連携など、代替手段の利用を検討してください。 - -**構文** - -```sql -rand64([x]) -``` - -**引数** - -* `x` — 省略可能であり、無視されます。この引数の唯一の目的は、クエリ内で同じ関数呼び出しが複数回使用される場合に、[共通部分式除去](/sql-reference/functions/overview#common-subexpression-elimination) が行われるのを防ぐことです。[`Any`](/sql-reference/data-types) - -**返される値** - -一様分布に従うランダムな `UInt64` 値を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT rand64(); -``` - -```response title=Response -15030268859237645412 -``` - - -## randBernoulli - -導入バージョン: v22.10 - -[ベルヌーイ分布](https://en.wikipedia.org/wiki/Bernoulli_distribution)に従う Float64 型の乱数を返します。 - -**構文** - -```sql -randBernoulli(probability[, x]) -``` - -**引数** - -* `probability` — 成功確率を表す `0` から `1` の値。[`Float64`](/sql-reference/data-types/float) -* `x` — 省略可能で、無視されます。この引数の唯一の目的は、同じ関数呼び出しがクエリ内で複数回使用される場合に [common subexpression elimination](/sql-reference/functions/overview#common-subexpression-elimination) が行われるのを防ぐことです。[`Any`](/sql-reference/data-types) - -**戻り値** - -指定されたベルヌーイ分布に従うランダムな Float64 値を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT randBernoulli(.75) FROM numbers(5) -``` - -```response title=Response -┌─randBernoulli(0.75)─┐ -│ 1 │ -│ 1 │ -│ 0 │ -│ 1 │ -│ 1 │ -└─────────────────────┘ -``` - - -## randBinomial - -導入バージョン: v22.10 - -[二項分布](https://en.wikipedia.org/wiki/Binomial_distribution)に従う Float64 型の乱数値を返します。 - -**構文** - -```sql -randBinomial(試行回数, 確率[, x]) -``` - -**引数** - -* `experiments` — 実験の回数 [`UInt64`](/sql-reference/data-types/int-uint) -* `probability` — 各実験における成功確率。`0` から `1` の間の値 [`Float64`](/sql-reference/data-types/float) -* `x` — オプションの引数で、無視されます。この引数の唯一の目的は、同じ関数呼び出しがクエリ内で複数回使用される場合に、[共通部分式除去](/sql-reference/functions/overview#common-subexpression-elimination) が行われるのを防ぐことです。[`Any`](/sql-reference/data-types) - -**戻り値** - -指定された二項分布に従うランダムな Float64 型の数値を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT randBinomial(100, .75) FROM numbers(5) -``` - -```response title=Response -┌─randBinomial(100, 0.75)─┐ -│ 74 │ -│ 78 │ -│ 76 │ -│ 77 │ -│ 80 │ -└─────────────────────────┘ -``` - - -## randCanonical - -導入バージョン: v22.11 - -`0`(以上)から `1`(未満)の一様分布に従う `Float64` 型の乱数を返します。 - -**構文** - -```sql -randCanonical([x]) -``` - -**引数** - -* `x` — 省略可能ですが、指定しても無視されます。クエリ内で同じ関数呼び出しが複数回使用される場合に [共通部分式除去](/sql-reference/functions/overview#common-subexpression-elimination) が行われるのを防ぐことだけを目的としています。[`Any`](/sql-reference/data-types) - -**戻り値** - -ランダムな Float64 値を返します。[`Float64`](/sql-reference/data-types/float) - -**例** - -**使用例** - -```sql title=Query -SELECT randCanonical(); -``` - -```response title=Response -0.345217890123456 -``` - - -## randChiSquared - -導入バージョン: v22.10 - -[カイ二乗分布](https://en.wikipedia.org/wiki/Chi-squared_distribution)に従う Float64 型の乱数値を返します。 - -**構文** - -```sql -randChiSquared(degree_of_freedom[, x]) -``` - -**引数** - -* `degree_of_freedom` — 自由度。[`Float64`](/sql-reference/data-types/float) -* `x` — 省略可能であり、無視されます。この引数の唯一の目的は、同じ関数呼び出しがクエリ内で複数回使用される場合に、[common subexpression elimination](/sql-reference/functions/overview#common-subexpression-elimination) が行われるのを防ぐことです。[`Any`](/sql-reference/data-types) - -**戻り値** - -指定したカイ二乗分布からサンプリングされた、ランダムな Float64 値を返します。[`Float64`](/sql-reference/data-types/float) - -**例** - -**使用例** - -```sql title=Query -SELECT randChiSquared(10) FROM numbers(5) -``` - -```response title=Response -┌─randChiSquared(10)─┐ -│ 10.015463656521543 │ -│ 9.621799919882768 │ -│ 2.71785015634699 │ -│ 11.128188665931908 │ -│ 4.902063104425469 │ -└────────────────────┘ -``` - - -## randConstant - -導入バージョン: v1.1 - -現在のクエリ実行内のすべての行で一定となる、単一の乱数値を生成します。 - -この関数は次のように動作します: - -* 単一のクエリ内では、すべての行に対して同じ乱数値を返します -* 異なるクエリ実行ごとに異なる値を生成します - -データセット内のすべての行に対して、一貫した乱数シードや識別子を適用する場合に有用です。 - -**構文** - -```sql -randConstant([x]) -``` - -**引数** - -* `x` — 省略可能であり、無視されます。クエリ内で同じ関数呼び出しが複数回使用されたときに [共通部分式の除去](/sql-reference/functions/overview#common-subexpression-elimination) が行われるのを防ぐことだけを目的とする引数です。[`Any`](/sql-reference/data-types) - -**返される値** - -各行で同じ乱数値を含む `UInt32` 型の列を返します。[`UInt32`](/sql-reference/data-types/int-uint) - -**例** - -**基本的な使用方法** - -```sql title=Query -SELECT randConstant() AS random_value; -``` - -```response title=Response -| random_value | -|--------------| -| 1234567890 | -``` - -**パラメータ付きでの利用方法** - -```sql title=Query -SELECT randConstant(10) AS random_value; -``` - -```response title=Response -| random_value | -|--------------| -| 9876543210 | -``` - - -## randExponential - -導入バージョン: v22.10 - -[指数分布](https://en.wikipedia.org/wiki/Exponential_distribution)に従う Float64 型の乱数値を返します。 - -**構文** - -```sql -randExponential(lambda[, x]) -``` - -**引数** - -* `lambda` — 分布のレートパラメータ(λ 値)。[`Float64`](/sql-reference/data-types/float) -* `x` — 省略可能で、無視されます。この引数の唯一の目的は、同じ関数呼び出しがクエリ内で複数回使用される場合に [共通部分式除去](/sql-reference/functions/overview#common-subexpression-elimination) が行われるのを防ぐことです。[`Any`](/sql-reference/data-types) - -**戻り値** - -指定された指数分布から生成される乱数の Float64 値を返します。[`Float64`](/sql-reference/data-types/float) - -**例** - -**使用例** - -```sql title=Query -SELECT randExponential(1/10) FROM numbers(5) -``` - -```response title=Response -┌─randExponential(divide(1, 10))─┐ -│ 44.71628934340778 │ -│ 4.211013337903262 │ -│ 10.809402553207766 │ -│ 15.63959406553284 │ -│ 1.8148392319860158 │ -└────────────────────────────────┘ -``` - - -## randFisherF - -導入バージョン: v22.10 - -[F分布](https://en.wikipedia.org/wiki/F-distribution)に従う `Float64` 型の乱数を返します。 - -**構文** - -```sql -randFisherF(d1, d2[, x]) -``` - -**引数** - -* `d1` — `X = (S1 / d1) / (S2 / d2)` における d1 の自由度。[`Float64`](/sql-reference/data-types/float) -* `d2` — `X = (S1 / d1) / (S2 / d2)` における d2 の自由度。[`Float64`](/sql-reference/data-types/float) -* `x` — 省略可能で、評価時には無視されます。この引数の唯一の目的は、同じ関数呼び出しがクエリ内で複数回使用される場合に、[common subexpression elimination](/sql-reference/functions/overview#common-subexpression-elimination) が行われるのを防ぐことです。[`Any`](/sql-reference/data-types) - -**戻り値** - -指定された F 分布から生成された乱数(Float64 型)を返します。[`Float64`](/sql-reference/data-types/float) - -**例** - -**使用例** - -```sql title=Query -SELECT randFisherF(10, 3) FROM numbers(5) -``` - -```response title=Response -┌─randFisherF(10, 20)─┐ -│ 0.7204609609506184 │ -│ 0.9926258472572916 │ -│ 1.4010752726735863 │ -│ 0.34928401507025556 │ -│ 1.8216216009473598 │ -└─────────────────────┘ -``` - - -## randLogNormal - -導入バージョン: v22.10 - -[対数正規分布](https://en.wikipedia.org/wiki/Log-normal_distribution)に従う Float64 型の乱数値を返します。 - -**構文** - -```sql -randLogNormal(mean, stddev[, x]) -``` - -**引数** - -* `mean` — 分布の平均値。[`Float64`](/sql-reference/data-types/float) -* `stddev` — 分布の標準偏差。[`Float64`](/sql-reference/data-types/float) -* `x` — 省略可能で、指定しても無視されます。この引数の唯一の目的は、同じ関数呼び出しがクエリ内で複数回使用される場合に、[共通部分式の除去](/sql-reference/functions/overview#common-subexpression-elimination)が行われるのを防ぐことです。[`Any`](/sql-reference/data-types) - -**返り値** - -指定された対数正規分布から生成される Float64 型の乱数を返します。[`Float64`](/sql-reference/data-types/float) - -**例** - -**使用例** - -```sql title=Query -SELECT randLogNormal(100, 5) FROM numbers(5) -``` - -```response title=Response -┌─randLogNormal(100, 5)─┐ -│ 1.295699673937363e48 │ -│ 9.719869109186684e39 │ -│ 6.110868203189557e42 │ -│ 9.912675872925529e39 │ -│ 2.3564708490552458e42 │ -└───────────────────────┘ -``` - - -## randNegativeBinomial - -導入: v22.10 - -[負の二項分布](https://en.wikipedia.org/wiki/Negative_binomial_distribution)に従う Float64 型の乱数値を返します。 - -**構文** - -```sql -randNegativeBinomial(experiments, probability[, x]) -``` - -**引数** - -* `experiments` — 実験の回数。[`UInt64`](/sql-reference/data-types/int-uint) -* `probability` — 各実験における失敗確率(`0` から `1` の間の値)。[`Float64`](/sql-reference/data-types/float) -* `x` — 省略可能で、値は使用されません。この引数の唯一の目的は、同じ関数呼び出しがクエリ内で複数回使用された場合に [common subexpression elimination](/sql-reference/functions/overview#common-subexpression-elimination) が行われるのを防ぐことです。[`Any`](/sql-reference/data-types) - -**戻り値** - -指定された負の二項分布から生成された乱数の Float64 値を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT randNegativeBinomial(100, .75) FROM numbers(5) -``` - -```response title=Response -┌─randNegativeBinomial(100, 0.75)─┐ -│ 33 │ -│ 32 │ -│ 39 │ -│ 40 │ -│ 50 │ -└─────────────────────────────────┘ -``` - - -## randNormal - -導入: v22.10 - -[正規分布](https://en.wikipedia.org/wiki/Normal_distribution)に従う Float64 型の乱数値を返します。 - -**構文** - -```sql -randNormal(mean, stddev[, x]) -``` - -**引数** - -* `mean` — 分布の平均値 [`Float64`](/sql-reference/data-types/float) -* `stddev` — 分布の標準偏差 [`Float64`](/sql-reference/data-types/float) -* `x` — 任意の引数であり、値は使用されません。この引数は、同じ関数呼び出しがクエリ内で複数回使用される場合に、[共通部分式除去](/sql-reference/functions/overview#common-subexpression-elimination) が行われるのを防ぐためだけに存在します。[`Any`](/sql-reference/data-types) - -**戻り値** - -指定された正規分布から生成されたランダムな Float64 値を返します。[`Float64`](/sql-reference/data-types/float) - -**例** - -**使用例** - -```sql title=Query -SELECT randNormal(10, 2) FROM numbers(5) -``` - -```response title=Response -┌──randNormal(10, 2)─┐ -│ 13.389228911709653 │ -│ 8.622949707401295 │ -│ 10.801887062682981 │ -│ 4.5220192605895315 │ -│ 10.901239123982567 │ -└────────────────────┘ -``` - - -## randPoisson - -導入: v22.10 - -[ポアソン分布](https://en.wikipedia.org/wiki/Poisson_distribution) に従う乱数を Float64 型の数値として返します。 - -**構文** - -```sql -randPoisson(n[, x]) -``` - -**引数** - -* `n` — 発生回数の平均。[`UInt64`](/sql-reference/data-types/int-uint) -* `x` — 省略可能で、評価時には使用されません。この引数の唯一の目的は、同じ関数呼び出しがクエリ内で複数回使用されている場合に[共通部分式の除去](/sql-reference/functions/overview#common-subexpression-elimination)が行われるのを防ぐことです。[`Any`](/sql-reference/data-types) - -**戻り値** - -指定されたポアソン分布に従う Float64 型の乱数を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT randPoisson(10) FROM numbers(5) -``` - -```response title=Response -┌─randPoisson(10)─┐ -│ 8 │ -│ 8 │ -│ 7 │ -│ 10 │ -│ 6 │ -└─────────────────┘ -``` - - -## randStudentT - -導入: v22.10 - -[スチューデントの t 分布](https://en.wikipedia.org/wiki/Student%27s_t-distribution)に従う Float64 型の乱数値を返します。 - -**構文** - -```sql -randStudentT(degree_of_freedom[, x]) -``` - -**引数** - -* `degree_of_freedom` — 自由度。[`Float64`](/sql-reference/data-types/float) -* `x` — 省略可能で、評価時には無視されます。この引数の唯一の目的は、同じ関数呼び出しがクエリ内で複数回使用される場合に [common subexpression elimination](/sql-reference/functions/overview#common-subexpression-elimination) が行われるのを防ぐことです。[`Any`](/sql-reference/data-types) - -**戻り値** - -指定されたスチューデントの t 分布に従うランダムな Float64 数値を返します。[`Float64`](/sql-reference/data-types/float) - -**例** - -**使用例** - -```sql title=Query -SELECT randStudentT(10) FROM numbers(5) -``` - -```response title=Response -┌─────randStudentT(10)─┐ -│ 1.2217309938538725 │ -│ 1.7941971681200541 │ -│ -0.28192176076784664 │ -│ 0.2508897721303792 │ -│ -2.7858432909761186 │ -└──────────────────────┘ -``` - - -## randUniform - -導入バージョン: v22.10 - -区間 $[\min, \max]$ から一様分布に従うランダムな Float64 値を返します。 - -**構文** - -```sql -randUniform(min, max[, x]) -``` - -**引数** - -* `min` — 範囲の左端(含む)。[`Float64`](/sql-reference/data-types/float) -* `max` — 範囲の右端(含む)。[`Float64`](/sql-reference/data-types/float) -* `x` — 省略可能で、常に無視されます。この引数の唯一の目的は、同じ関数呼び出しがクエリ内で複数回使用される場合に、[共通部分式の削除](/sql-reference/functions/overview#common-subexpression-elimination)を防ぐことです。[`Any`](/sql-reference/data-types) - -**戻り値** - -`min` と `max` で定まる区間から、一様に抽出された乱数を返します。[`Float64`](/sql-reference/data-types/float) - -**例** - -**利用例** - -```sql title=Query -SELECT randUniform(5.5, 10) FROM numbers(5) -``` - -```response title=Response -┌─randUniform(5.5, 10)─┐ -│ 8.094978491443102 │ -│ 7.3181248914450885 │ -│ 7.177741903868262 │ -│ 6.483347380953762 │ -│ 6.122286382885112 │ -└──────────────────────┘ -``` - - -## randomFixedString - -導入バージョン: v20.5 - -指定した文字数の固定長のランダムな文字列を生成します。 -返される文字は必ずしも ASCII 文字とは限らず、表示可能でない場合があります。 - -**構文** - -```sql -randomFixedString(length) -``` - -**引数** - -* `length` — 文字列の長さ(バイト数)。[`UInt*`](/sql-reference/data-types/int-uint) - -**戻り値** - -ランダムなバイト列で埋められた文字列を返します。[`FixedString`](/sql-reference/data-types/fixedstring) - -**例** - -**使用例** - -```sql title=Query -SELECT randomFixedString(13) AS rnd, toTypeName(rnd) -``` - -```response title=Response -┌─rnd──────┬─toTypeName(randomFixedString(13))─┐ -│ j▒h㋖HɨZ'▒ │ FixedString(13) │ -└──────────┴───────────────────────────────────┘ -``` - - -## randomPrintableASCII - -導入バージョン: v20.1 - -指定した文字数のランダムな [ASCII](https://en.wikipedia.org/wiki/ASCII#Printable_characters) 文字列を生成します。 - -`length < 0` を渡した場合、この関数の動作は未定義です。 - -**構文** - -```sql -randomPrintableASCII(length[, x]) -``` - -**引数** - -* `length` — 文字列の長さ(バイト数)。[`(U)Int*`](/sql-reference/data-types/int-uint) -* `x` — 省略可能な引数で、無視されます。この引数の唯一の目的は、同じ関数呼び出しがクエリ内で複数回使用される場合に、[共通部分式除去](/sql-reference/functions/overview#common-subexpression-elimination)が行われるのを防ぐことです。[`Any`](/sql-reference/data-types) - -**返される値** - -ASCII の印字可能文字からなるランダムな文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT number, randomPrintableASCII(30) AS str, length(str) FROM system.numbers LIMIT 3 -``` - -```response title=Response -┌─number─┬─str────────────────────────────┬─length(randomPrintableASCII(30))─┐ -│ 0 │ SuiCOSTvC0csfABSw=UcSzp2.`rv8x │ 30 │ -│ 1 │ 1Ag NlJ &RCN:*>HVPG;PE-nO"SUFD │ 30 │ -│ 2 │ /"+<"with:=LjJ Vm!c&hI*m#XTfzz │ 30 │ -└────────┴────────────────────────────────┴──────────────────────────────────┘ -``` - - -## randomString - -導入バージョン: v20.5 - -指定した文字数のランダムな文字列を生成します。 -返される文字は必ずしも ASCII 文字とは限らないため、表示可能な文字でない場合があります。 - -**構文** - -```sql -randomString(length[, x]) -``` - -**引数** - -* `length` — 文字列の長さ(バイト数)。[`(U)Int*`](/sql-reference/data-types/int-uint) -* `x` — 省略可能で、評価時には無視されます。この引数の唯一の目的は、同じ関数呼び出しがクエリ内で複数回使用される場合に、[共通部分式の除去](/sql-reference/functions/overview#common-subexpression-elimination)が行われるのを防ぐことです。[`Any`](/sql-reference/data-types) - -**戻り値** - -ランダムなバイトから成る文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT randomString(5) AS str FROM numbers(2) -``` - -```response title=Response -��� -�v6B� -``` - - -## randomStringUTF8 - -導入バージョン: v20.5 - -指定したコードポイント数のランダムな [UTF-8](https://en.wikipedia.org/wiki/UTF-8) 文字列を生成します。 -未割り当ての [面](https://en.wikipedia.org/wiki/Plane_\(Unicode\))(第 4 面から第 13 面)のコードポイントは返されません。 -ただし、ClickHouse サーバーとやり取りしているクライアント側で、生成された UTF-8 文字列を正しく表示できない可能性があります。 - -**構文** - -```sql -randomStringUTF8(length) -``` - -**引数** - -* `length` — 文字列の長さ(コードポイント数)。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**戻り値** - -ランダムな UTF-8 コードポイントからなる文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT randomStringUTF8(13) -``` - -```response title=Response -┌─randomStringUTF8(13)─┐ -│ 𘤗𙉝д兠庇󡅴󱱎󦐪􂕌𔊹𓰛 │ -└──────────────────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/rounding-functions.md b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/rounding-functions.md index 9cd76100f72..9c716c8aa30 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/rounding-functions.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/rounding-functions.md @@ -1,17 +1,15 @@ --- -description: '丸め関数に関するドキュメント' +description: '丸め関数のドキュメント' sidebar_label: '丸め' slug: /sql-reference/functions/rounding-functions title: '丸め関数' doc_type: 'reference' --- - - # 丸め関数 :::note -以下のドキュメントは、`system.functions` システムテーブルから自動生成されたものです。 +このドキュメントは `system.functions` システムテーブルから自動生成されています。 ::: {/* @@ -20,461 +18,6 @@ doc_type: 'reference' 詳細は https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md を参照してください。 */ } - {/*AUTOGENERATED_START*/ } -## ceil - -導入バージョン: v1.1 - -[`floor`](#floor) と同様ですが、`x` 以上となるように丸められた最小の数値を返します。 -丸めによってオーバーフローが発生した場合(例: `ceiling(255, -1)`)、結果は未定義です。 - -**構文** - -```sql -ceiling(x[, N]) -``` - -**エイリアス**: `ceiling` - -**引数** - -* `x` — 丸める値。[`Float*`](/sql-reference/data-types/float) または [`Decimal*`](/sql-reference/data-types/decimal) または [`(U)Int*`](/sql-reference/data-types/int-uint) -* `N` — 省略可。丸める小数点以下の桁数。デフォルトは 0 で、これは整数への丸めを意味します。負の値も指定可能です。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返される値** - -`x` と同じ型の丸められた数値を返します。[`Float*`](/sql-reference/data-types/float) または [`Decimal*`](/sql-reference/data-types/decimal) または [`(U)Int*`](/sql-reference/data-types/int-uint) - -**例** - -**基本的な使用例** - -```sql title=Query -SELECT ceiling(123.45, 1) AS rounded -``` - -```response title=Response -┌─rounded─┐ -│ 123.5 │ -└─────────┘ -``` - -**負の精度** - -```sql title=Query -SELECT ceiling(123.45, -1) -``` - -```response title=Response -┌─ceiling(123.45, -1)─┐ -│ 130 │ -└─────────────────────┘ -``` - - -## floor - -導入: v1.1 - -`x` 以下で最大となる丸め後の数値を返します。この丸め後の数値は `1 / 10 * N` の倍数であるか、`1 / 10 * N` が正確に表現できない場合は、対応するデータ型で表現可能な最も近い数値です。 - -整数の引数は、`N` を負の値にすることで丸めることができます。 -`N` が負でない場合、この関数は `x` をそのまま返します。 - -丸めによってオーバーフローが発生した場合(例: `floor(-128, -1)`)、結果は未定義です。 - -**構文** - -```sql -floor(x[, N]) -``` - -**引数** - -* `x` — 丸め対象の値。[`Float*`](/sql-reference/data-types/float) または [`Decimal*`](/sql-reference/data-types/decimal) または [`(U)Int*`](/sql-reference/data-types/int-uint) -* `N` — 省略可。丸め先の小数桁数。既定値は 0 で、この場合は整数に丸めます。負の値も指定可能です。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返される値** - -`x` と同じ型の丸め後の数値を返します。[`Float*`](/sql-reference/data-types/float) または [`Decimal*`](/sql-reference/data-types/decimal) または [`(U)Int*`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT floor(123.45, 1) AS rounded -``` - -```response title=Response -┌─rounded─┐ -│ 123.4 │ -└─────────┘ -``` - -**負の精度** - -```sql title=Query -SELECT floor(123.45, -1) -``` - -```response title=Response -┌─floor(123.45, -1)─┐ -│ 120 │ -└───────────────────┘ -``` - - -## round - -導入バージョン: v1.1 - -値を `N` で指定された小数桁数に丸めます。 - -* `N > 0` の場合、小数点の右側の桁に丸めます。 -* `N < 0` の場合、小数点の左側の桁に丸めます。 -* `N = 0` の場合、最も近い整数に丸めます。 - -この関数は、指定された桁における最も近い数値を返します。 -入力値が両隣の数値から等距離の場合、`Float*` 型の入力に対してはバンカーズラウンディング(銀行丸め)を使用し、それ以外の数値型(`Decimal*`)に対してはゼロから遠ざかる方向に丸めます。 - -丸めによってオーバーフローが発生する場合(例: `round(255, -1)`)、結果は未定義です。 - -**構文** - -```sql -round(x[, N]) -``` - -**引数** - -* `x` — 丸める対象の数値。[`Float*`](/sql-reference/data-types/float) または [`Decimal*`](/sql-reference/data-types/decimal) または [`(U)Int*`](/sql-reference/data-types/int-uint) -* `N` — 省略可能。丸める小数点以下の桁数を指定します。省略時は `0` です。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**戻り値** - -`x` と同じ型の丸められた数値を返します。[`Float*`](/sql-reference/data-types/float) または [`Decimal*`](/sql-reference/data-types/decimal) または [`(U)Int*`](/sql-reference/data-types/int-uint) - -**例** - -**Float 型の入力** - -```sql title=Query -SELECT number / 2 AS x, round(x) FROM system.numbers LIMIT 3; -``` - -```response title=Response -┌───x─┬─round(x)─┐ -│ 0 │ 0 │ -│ 0.5 │ 0 │ -│ 1 │ 1 │ -└─────┴──────────┘ -``` - -**10進数の入力** - -```sql title=Query -SELECT cast(number / 2 AS Decimal(10,4)) AS x, round(x) FROM system.numbers LIMIT 3; -``` - -```response title=Response -┌───x─┬─round(x)─┐ -│ 0 │ 0 │ -│ 0.5 │ 1 │ -│ 1 │ 1 │ -└─────┴──────────┘ -``` - - -## roundAge - -導入バージョン: v1.1 - -人の年齢を表す数値を受け取り、標準的な年齢帯と比較し、その数値が属する年齢帯の上限または下限の値を返します。 - -* `age < 1` の場合、`0` を返します。 -* `1 ≤ age ≤ 17` の場合、`17` を返します。 -* `18 ≤ age ≤ 24` の場合、`18` を返します。 -* `25 ≤ age ≤ 34` の場合、`25` を返します。 -* `35 ≤ age ≤ 44` の場合、`35` を返します。 -* `45 ≤ age ≤ 54` の場合、`45` を返します。 -* `age ≥ 55` の場合、`55` を返します。 - -**構文** - -```sql -roundAge(num) -``` - -**引数** - -* `age` — 年齢(年単位)を表す数値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) - -**返り値** - -`age` が属する範囲の、上限または下限のいずれかの年齢を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT *, roundAge(*) FROM system.numbers WHERE number IN (0, 5, 20, 31, 37, 54, 72); -``` - -```response title=Response -┌─number─┬─roundAge(number)─┐ -│ 0 │ 0 │ -│ 5 │ 17 │ -│ 20 │ 18 │ -│ 31 │ 25 │ -│ 37 │ 35 │ -│ 54 │ 45 │ -│ 72 │ 55 │ -└────────┴──────────────────┘ -``` - - -## roundBankers - -導入バージョン: v20.1 - -数値を指定した小数桁 `N` に丸めます。 -丸め対象の値が 2 つの数値のちょうど中間の場合、この関数は、IEEE 754 で浮動小数点数のデフォルトの丸め方法として規定されている、バンカーズラウンディング(銀行丸め)と呼ばれる方式で丸めを行います。 - -* `N > 0` の場合、小数点より右側を丸めます -* `N < 0` の場合、小数点より左側を丸めます -* `N = 0` の場合、最も近い整数に丸めます - -:::info Notes - -* 丸め対象の値が 2 つの数値のちょうど中間の場合、指定した小数桁において、最も近い偶数の桁に丸められます。 - 例: `3.5` は `4` に切り上げられ、`2.5` は `2` に切り下げられます。 -* `round` 関数は、浮動小数点数に対して同じ丸めを行います。 -* `roundBankers` 関数は整数に対しても同じ方法で丸めを行います。例えば、`roundBankers(45, -1) = 40` となります。 -* その他の場合、この関数は最も近い整数へ丸めます。 - ::: - -:::tip 合計や減算にはバンカーズラウンディングを使用する -バンカーズラウンディングを使用することで、丸めがそれらの合計値や差分の結果に与える影響を軽減できます。 - -例として、`1.5, 2.5, 3.5, 4.5` を異なる丸め方法で合計します: - -* 丸めなし: `1.5 + 2.5 + 3.5 + 4.5 = 12`。 -* バンカーズラウンディング: `2 + 2 + 4 + 4 = 12`。 -* 最も近い整数への丸め: `2 + 3 + 4 + 5 = 14`。 - ::: - -**構文** - -```sql -roundBankers(x[, N]) -``` - -**引数** - -* `x` — 丸め対象の数値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Decimal*`](/sql-reference/data-types/decimal) または [`Float*`](/sql-reference/data-types/float) -* `[, N]` — 省略可能。丸める小数点以下の桁数。指定しない場合は `0`。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返される値** - -銀行丸め(banker's rounding)方式で丸められた値を返します。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Decimal*`](/sql-reference/data-types/decimal) または [`Float*`](/sql-reference/data-types/float) - -**例** - -**基本的な使い方** - -```sql title=Query -SELECT number / 2 AS x, roundBankers(x, 0) AS b FROM system.numbers LIMIT 10 -``` - -```response title=Response -┌───x─┬─b─┐ -│ 0 │ 0 │ -│ 0.5 │ 0 │ -│ 1 │ 1 │ -│ 1.5 │ 2 │ -│ 2 │ 2 │ -│ 2.5 │ 2 │ -│ 3 │ 3 │ -│ 3.5 │ 4 │ -│ 4 │ 4 │ -│ 4.5 │ 4 │ -└─────┴───┘ -``` - - -## roundDown - -導入バージョン: v20.1 - -数値を指定された配列内のいずれかの要素に切り捨てます。 -値が下限値より小さい場合は、下限値が返されます。 - -**構文** - -```sql -roundDown(num, arr) -``` - -**引数** - -* `num` — 切り捨てる対象の数値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Decimal*`](/sql-reference/data-types/decimal) または [`Float*`](/sql-reference/data-types/float) -* `arr` — `num` を切り捨てる先となる値の配列。[`Array((U)Int*)`](/sql-reference/data-types/array) または [`Array(Float*)`](/sql-reference/data-types/array) - -**戻り値** - -`arr` 内の要素のうち、`num` を切り捨てた結果の値を返します。値が配列内の最小値より小さい場合は、その最小値を返します。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) - -**例** - -**使用例** - -```sql title=Query -SELECT *, roundDown(*, [3, 4, 5]) FROM system.numbers WHERE number IN (0, 1, 2, 3, 4, 5) -``` - -```response title=Response -┌─number─┬─roundDown(number, [3, 4, 5])─┐ -│ 0 │ 3 │ -│ 1 │ 3 │ -│ 2 │ 3 │ -│ 3 │ 3 │ -│ 4 │ 4 │ -│ 5 │ 5 │ -└────────┴──────────────────────────────┘ -``` - - -## roundDuration - -導入バージョン: v1.1 - -一般的に使用される時間間隔 `1, 10, 30, 60, 120, 180, 240, 300, 600, 1200, 1800, 3600, 7200, 18000, 36000` の集合の中から、与えられた数値をそれ以下で最も近い値に切り捨てます。\ -数値が 1 未満の場合は `0` を返します。 - -**構文** - -```sql -roundDuration(num) -``` - -**引数** - -* `num` — 一般的によく使われる継続時間の集合のいずれかの値に丸める数値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) - -**戻り値** - -`num` < 1 の場合は `0` を返します。それ以外の場合は、次のいずれかの値を返します: `1, 10, 30, 60, 120, 180, 240, 300, 600, 1200, 1800, 3600, 7200, 18000, 36000`。[`UInt16`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT *, roundDuration(*) FROM system.numbers WHERE number IN (0, 9, 19, 47, 101, 149, 205, 271, 421, 789, 1423, 2345, 4567, 9876, 24680, 42573) -``` - -```response title=Response -┌─number─┬─roundDuration(number)─┐ -│ 0 │ 0 │ -│ 9 │ 1 │ -│ 19 │ 10 │ -│ 47 │ 30 │ -│ 101 │ 60 │ -│ 149 │ 120 │ -│ 205 │ 180 │ -│ 271 │ 240 │ -│ 421 │ 300 │ -│ 789 │ 600 │ -│ 1423 │ 1200 │ -│ 2345 │ 1800 │ -│ 4567 │ 3600 │ -│ 9876 │ 7200 │ -│ 24680 │ 18000 │ -│ 42573 │ 36000 │ -└────────┴───────────────────────┘ -``` - - -## roundToExp2 - -導入バージョン: v1.1 - -数値を、それ以下で最も近い(非負の整数)2 の冪に切り下げます。 -数値が 1 未満の場合は `0` を返します。 - -**構文** - -```sql -roundToExp2(num) -``` - -**引数** - -* `num` — 丸める数値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) - -**戻り値** - -`num` 以下で最大の(0 以上の整数の)2 のべき乗に切り下げた値を返します。`num < 1` の場合は `0` を返します。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) - -**例** - -**使用例** - -```sql title=Query -SELECT *, roundToExp2(*) FROM system.numbers WHERE number IN (0, 2, 5, 10, 19, 50) -``` - -```response title=Response -┌─number─┬─roundToExp2(number)─┐ -│ 0 │ 0 │ -│ 2 │ 2 │ -│ 5 │ 4 │ -│ 10 │ 8 │ -│ 19 │ 16 │ -│ 50 │ 32 │ -└────────┴─────────────────────┘ -``` - - -## trunc - -導入バージョン: v1.1 - -[`floor`](#floor) に似ていますが、`x` の絶対値以下で可能な限り大きな絶対値となるように丸めた値を返します。 - -**構文** - -```sql -truncate(x[, N]) -``` - -**別名**: `truncate` - -**引数** - -* `x` — 丸める値。[`Float*`](/sql-reference/data-types/float) または [`Decimal*`](/sql-reference/data-types/decimal) または [`(U)Int*`](/sql-reference/data-types/int-uint) -* `N` — 省略可能。丸める小数桁数。既定値は 0 で、この場合は整数に丸めます。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**戻り値** - -`x` と同じ型の丸められた値を返します。[`Float*`](/sql-reference/data-types/float) または [`Decimal*`](/sql-reference/data-types/decimal) または [`(U)Int*`](/sql-reference/data-types/int-uint) - -**例** - -**基本的な使用例** - -```sql title=Query -SELECT truncate(123.499, 1) AS res; -``` - -```response title=Response -┌───res─┐ -│ 123.4 │ -└───────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/splitting-merging-functions.md b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/splitting-merging-functions.md index 1ef8545be7c..cc58d57964b 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/splitting-merging-functions.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/splitting-merging-functions.md @@ -8,464 +8,18 @@ doc_type: 'reference' import DeprecatedBadge from '@theme/badges/DeprecatedBadge'; - # 文字列分割関数 :::note 以下のドキュメントは `system.functions` システムテーブルから生成されています。 ::: - - - - - -## alphaTokens {#alphaTokens} - -導入バージョン: v1.1 - -`a-z`および`A-Z`の範囲から連続するバイトの部分文字列を選択し、選択された部分文字列の配列を返します。 - -**構文** - -```sql -alphaTokens(s[, max_substrings]) -``` - -**エイリアス**: `splitByAlpha` - -**引数** - -- `s` — 分割する文字列。[`String`](/sql-reference/data-types/string) -- `max_substrings` — オプション。`max_substrings > 0`の場合、返される部分文字列の数は`max_substrings`以下になります。それ以外の場合、関数は可能な限り多くの部分文字列を返します。[`Int64`](/sql-reference/data-types/int-uint) - -**戻り値** - -`s`から選択された部分文字列の配列を返します。[`Array(String)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=クエリ -SELECT alphaTokens('abca1abc'); -``` - -```response title=レスポンス -┌─alphaTokens('abca1abc')─┐ -│ ['abca','abc'] │ -└─────────────────────────┘ -``` - - -## arrayStringConcat {#arrayStringConcat} - -導入バージョン: v1.1 - -配列内の値の文字列表現を、指定された区切り文字で連結します。区切り文字はオプションパラメータで、デフォルトでは空文字列に設定されます。 - -**構文** - -```sql -arrayStringConcat(arr[, separator]) -``` - -**引数** - -- `arr` — 連結する配列。[`Array(T)`](/sql-reference/data-types/array) -- `separator` — オプション。区切り文字列。デフォルトは空文字列。[`const String`](/sql-reference/data-types/string) - -**戻り値** - -連結された文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=クエリ -SELECT arrayStringConcat(['12/05/2021', '12:50:00'], ' ') AS DateString; -``` - -```response title=レスポンス -┌─DateString──────────┐ -│ 12/05/2021 12:50:00 │ -└─────────────────────┘ -``` - - -## extractAllGroupsVertical {#extractAllGroupsVertical} - -導入バージョン: v20.5 - -正規表現を使用して文字列のすべてのグループにマッチし、配列の配列を返します。各配列には、入力文字列内の出現順にグループ化された各グループからのマッチング断片が含まれます。 - -**構文** - -```sql -extractAllGroupsVertical(s, regexp) -``` - -**エイリアス**: `extractAllGroups` - -**引数** - -- `s` — 抽出元の入力文字列。[`String`](/sql-reference/data-types/string)または[`FixedString`](/sql-reference/data-types/fixedstring) -- `regexp` — マッチングに使用する正規表現。[`const String`](/sql-reference/data-types/string)または[`const FixedString`](/sql-reference/data-types/fixedstring) - -**戻り値** - -配列の配列を返します。各内部配列には、1つのマッチからキャプチャされたグループが含まれます。各マッチは、正規表現内のキャプチャグループ(グループ1、グループ2など)に対応する要素を持つ配列を生成します。マッチが見つからない場合は、空の配列を返します。[`Array(Array(String))`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=クエリ -WITH '< Server: nginx -< Date: Tue, 22 Jan 2019 00:26:14 GMT -< Content-Type: text/html; charset=UTF-8 -< Connection: keep-alive -' AS s -SELECT extractAllGroupsVertical(s, '< ([\\w\\-]+): ([^\\r\\n]+)'); -``` - -```response title=レスポンス -[['Server','nginx'],['Date','Tue, 22 Jan 2019 00:26:14 GMT'],['Content-Type','text/html; charset=UTF-8'],['Connection','keep-alive']] -``` - - -## ngrams {#ngrams} - -導入バージョン: v21.11 - -UTF-8文字列を`ngramsize`個の文字からなるn-gramに分割します。 - -**構文** - -```sql -ngrams(s, ngram_size) -``` - -**引数** - -- `s` — 入力文字列。[`String`](/sql-reference/data-types/string)または[`FixedString`](/sql-reference/data-types/fixedstring) -- `ngram_size` — n-gramのサイズ。[`const UInt8/16/32/64`](/sql-reference/data-types/int-uint) - -**戻り値** - -n-gramの配列を返します。[`Array(String)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=クエリ -SELECT ngrams('ClickHouse', 3); -``` - -```response title=レスポンス -['Cli','lic','ick','ckH','kHo','Hou','ous','use'] -``` - - -## splitByChar {#splitByChar} - -導入バージョン: v1.1 - -指定された1文字の定数文字列`separator`で区切られた文字列を、部分文字列の配列に分割します。 -セパレータが文字列の先頭または末尾に出現する場合、または連続する複数のセパレータが存在する場合、空の部分文字列が選択される可能性があります。 - -:::note -設定[`splitby_max_substrings_includes_remaining_string`](../../operations/settings/settings.md#splitby_max_substrings_includes_remaining_string)(デフォルト: `0`)は、引数`max_substrings > 0`の場合に、残りの文字列を結果配列の最後の要素に含めるかどうかを制御します。 -::: - -次の場合に空の部分文字列が選択される可能性があります: - -- セパレータが文字列の先頭または末尾に出現する場合 -- 連続する複数のセパレータが存在する場合 -- 元の文字列`s`が空の場合 - -**構文** - -```sql -splitByChar(separator, s[, max_substrings]) -``` - -**引数** - -- `separator` — セパレータは1バイト文字である必要があります。[`String`](/sql-reference/data-types/string) -- `s` — 分割する文字列。[`String`](/sql-reference/data-types/string) -- `max_substrings` — オプション。`max_substrings > 0`の場合、返される配列には最大`max_substrings`個の部分文字列が含まれます。それ以外の場合、関数は可能な限り多くの部分文字列を返します。デフォルト値は`0`です。[`Int64`](/sql-reference/data-types/int-uint) - -**戻り値** - -選択された部分文字列の配列を返します。[`Array(String)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT splitByChar(',', '1,2,3,abcde'); -``` - -```response title=Response -┌─splitByChar(⋯2,3,abcde')─┐ -│ ['1','2','3','abcde'] │ -└──────────────────────────┘ -``` - - -## splitByNonAlpha {#splitByNonAlpha} - -導入バージョン: v21.9 - -空白文字と句読点文字で区切られた文字列を部分文字列の配列に分割します。 - -:::note -設定 [`splitby_max_substrings_includes_remaining_string`](../../operations/settings/settings.md#splitby_max_substrings_includes_remaining_string) (デフォルト: `0`) は、引数 `max_substrings > 0` の場合に、残りの文字列を結果配列の最後の要素に含めるかどうかを制御します。 -::: - -**構文** - -```sql -splitByNonAlpha(s[, max_substrings]) -``` - -**引数** - -- `s` — 分割する文字列。[`String`](/sql-reference/data-types/string) -- `max_substrings` — オプション。`max_substrings > 0` の場合、返される部分文字列の数は `max_substrings` 以下になります。それ以外の場合、関数は可能な限り多くの部分文字列を返します。デフォルト値: `0`。[`Int64`](/sql-reference/data-types/int-uint) - -**戻り値** - -`s` から抽出された部分文字列の配列を返します。[`Array(String)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT splitByNonAlpha('user@domain.com'); -``` - -```response title=Response -['user','domain','com'] -``` - - -## splitByRegexp {#splitByRegexp} - -導入バージョン: v21.6 - -指定された正規表現で区切られた文字列を部分文字列の配列に分割します。 -指定された正規表現が空の場合、文字列は単一文字の配列に分割されます。 -正規表現に一致するものが見つからない場合、文字列は分割されません。 - -次の場合に空の部分文字列が選択される可能性があります: - -- 空でない正規表現の一致が文字列の先頭または末尾で発生した場合 -- 空でない正規表現の一致が連続して複数存在する場合 -- 元の文字列が空で、正規表現が空でない場合 - -:::note -設定 [`splitby_max_substrings_includes_remaining_string`](../../operations/settings/settings.md#splitby_max_substrings_includes_remaining_string) (デフォルト: `0`) は、引数 `max_substrings > 0` の場合に、残りの文字列が結果配列の最後の要素に含まれるかどうかを制御します。 -::: - -**構文** - -```sql -splitByRegexp(regexp, s[, max_substrings]) -``` - -**引数** - -- `regexp` — 正規表現。定数。[`String`](/sql-reference/data-types/string) または [`FixedString`](/sql-reference/data-types/fixedstring) -- `s` — 分割する文字列。[`String`](/sql-reference/data-types/string) -- `max_substrings` — オプション。`max_substrings > 0` の場合、返される部分文字列は `max_substrings` 以下になります。それ以外の場合、関数は可能な限り多くの部分文字列を返します。デフォルト値: `0`。[`Int64`](/sql-reference/data-types/int-uint) - -**返される値** - -`s` の選択された部分文字列の配列を返します。[`Array(String)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT splitByRegexp('\\d+', 'a12bc23de345f'); -``` - -```response title=Response -┌─splitByRegex⋯c23de345f')─┐ -│ ['a12bc23de345f'] │ -└──────────────────────────┘ -``` - -**空の正規表現** - -```sql title=Query -SELECT splitByRegexp('', 'abcde'); -``` - -```response title=Response -┌─splitByRegexp('', 'abcde')─┐ -│ ['a','b','c','d','e'] │ -└────────────────────────────┘ -``` - - -## splitByString {#splitByString} - -導入バージョン: v1.1 - -複数の文字で構成される定数`separator`を使用して、文字列を部分文字列の配列に分割します。 -文字列`separator`が空の場合、文字列`s`を単一文字の配列に分割します。 - -以下の場合、空の部分文字列が選択されることがあります: - -- 空でないセパレータが文字列の先頭または末尾に出現する場合 -- 空でないセパレータが連続して複数存在する場合 -- 元の文字列`s`が空で、セパレータが空でない場合 - -:::note -設定[`splitby_max_substrings_includes_remaining_string`](../../operations/settings/settings.md#splitby_max_substrings_includes_remaining_string)(デフォルト: `0`)は、引数`max_substrings > 0`の場合に、残りの文字列を結果配列の最後の要素に含めるかどうかを制御します。 -::: - -**構文** - -```sql -splitByString(separator, s[, max_substrings]) -``` - -**引数** - -- `separator` — セパレータ。[`String`](/sql-reference/data-types/string) -- `s` — 分割する文字列。[`String`](/sql-reference/data-types/string) -- `max_substrings` — オプション。`max_substrings > 0`の場合、返される部分文字列の数は`max_substrings`以下になります。それ以外の場合、関数は可能な限り多くの部分文字列を返します。デフォルト値: `0`。[`Int64`](/sql-reference/data-types/int-uint) - -**戻り値** - -`s`から選択された部分文字列の配列を返します[`Array(String)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT splitByString(', ', '1, 2 3, 4,5, abcde'); -``` - -```response title=Response -┌─splitByStrin⋯4,5, abcde')─┐ -│ ['1','2 3','4,5','abcde'] │ -└───────────────────────────┘ -``` - -**空のセパレータ** - -```sql title=Query -SELECT splitByString('', 'abcde'); -``` - -```response title=Response -┌─splitByString('', 'abcde')─┐ -│ ['a','b','c','d','e'] │ -└────────────────────────────┘ -``` - - -## splitByWhitespace {#splitByWhitespace} - -導入バージョン: v21.9 - -空白文字で区切られた文字列を部分文字列の配列に分割します。 - -:::note -設定 [`splitby_max_substrings_includes_remaining_string`](../../operations/settings/settings.md#splitby_max_substrings_includes_remaining_string) (デフォルト: `0`) は、引数 `max_substrings > 0` の場合に、残りの文字列を結果配列の最後の要素に含めるかどうかを制御します。 -::: - -**構文** - -```sql -splitByWhitespace(s[, max_substrings]) -``` - -**引数** - -- `s` — 分割する文字列。[`String`](/sql-reference/data-types/string) -- `max_substrings` — オプション。`max_substrings > 0` の場合、返される部分文字列の数は `max_substrings` 以下になります。それ以外の場合、関数は可能な限り多くの部分文字列を返します。デフォルト値: `0`。[`Int64`](/sql-reference/data-types/int-uint) - -**返り値** - -`s` から抽出された部分文字列の配列を返します。[`Array(String)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=クエリ -SELECT splitByWhitespace(' 1! a, b. '); -``` - -```response title=レスポンス -['1!','a,','b.'] -``` - - -## tokens {#tokens} - -導入バージョン: v21.11 - -指定されたトークナイザーを使用して文字列をトークンに分割します。 -デフォルトのトークナイザーは、非英数字のASCII文字を区切り文字として使用します。 - -`split`トークナイザーの場合、トークンが[接頭符号](https://en.wikipedia.org/wiki/Prefix_code)を形成しない場合、マッチング時により長い区切り文字を優先させることが望ましいでしょう。 -そのためには、区切り文字を長さの降順で渡してください。 -例えば、separators = `['%21', '%']`の場合、文字列`%21abc`は`['abc']`としてトークン化されますが、separators = `['%', '%21']`の場合は`['21abc']`としてトークン化されます(これはおそらく意図したものではないでしょう)。 - -**構文** - -```sql -tokens(value[, tokenizer[, ngrams[, separators]]]) -``` - -**引数** - -- `value` — 入力文字列。[`String`](/sql-reference/data-types/string)または[`FixedString`](/sql-reference/data-types/fixedstring) -- `tokenizer` — 使用するトークナイザー。有効な引数は`splitByNonAlpha`、`ngrams`、`splitByString`、`array`、`sparseGrams`です。省略可能で、明示的に設定されていない場合のデフォルトは`splitByNonAlpha`です。[`const String`](/sql-reference/data-types/string) -- `ngrams` — 引数`tokenizer`が`ngrams`の場合のみ関連: ngramの長さを定義する省略可能なパラメータ。明示的に設定されていない場合のデフォルトは`3`です。[`const UInt8`](/sql-reference/data-types/int-uint) -- `separators` — 引数`tokenizer`が`split`の場合のみ関連: 区切り文字列を定義する省略可能なパラメータ。明示的に設定されていない場合のデフォルトは`[' ']`です。[`const Array(String)`](/sql-reference/data-types/array) - -**返り値** - -入力文字列から得られたトークンの配列を返します。[`Array`](/sql-reference/data-types/array) - -**例** - -**デフォルトのトークナイザー** - -```sql title=Query -SELECT tokens('test1,;\\\\ test2,;\\\\ test3,;\\\\ test4') AS tokens; -``` - -```response title=Response -['test1','test2','test3','test4'] -``` - -**Ngramトークナイザー** - -```sql title=Query -SELECT tokens('abc def', 'ngrams', 3) AS tokens; -``` +{/* + 以下のタグ内の内容は、ドキュメントフレームワークのビルド時に + system.functions から自動生成されたドキュメントで置き換えられます。タグを変更または削除しないでください。 + 詳細は https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md を参照してください。 + */ } -```response title=Response -['abc','bc ','c d',' de','def'] -``` +{/*AUTOGENERATED_START*/ } - +{/*AUTOGENERATED_END*/ } diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/string-functions.md b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/string-functions.md index cd0ea006dc6..ac60f8b18e9 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/string-functions.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/string-functions.md @@ -1,3620 +1,28 @@ --- -description: '文字列関数に関するドキュメント' +description: '文字列関数のドキュメント' sidebar_label: '文字列' slug: /sql-reference/functions/string-functions -title: '文字列を操作する関数' +title: '文字列を扱う関数' doc_type: 'reference' --- import VersionBadge from '@theme/badges/VersionBadge'; -# 文字列を扱う関数 +# 文字列操作用関数 -文字列の[検索](string-search-functions.md)および[置換](string-replace-functions.md)に関する関数は、別セクションで説明しています。 +文字列内の[検索](string-search-functions.md)および[置換](string-replace-functions.md)に関する関数は、別途説明されています。 :::note -以下の内容は、`system.functions` システムテーブルから自動生成されています。 +本ドキュメントは `system.functions` システムテーブルから生成されています。 ::: {/* - 以下のタグ内の内容は、ドキュメントフレームワークのビルド時に - system.functions から自動生成されたドキュメントに置き換えられます。タグを変更したり削除したりしないでください。 - 詳細は次を参照してください: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md + 以下のタグの内部の内容は、ドキュメントフレームワークのビルド時に + system.functions から自動生成されたドキュメントに置き換えられます。タグは変更や削除を行わないでください。 + 詳細は https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md を参照してください。 */ } - {/*AUTOGENERATED_START*/ } -## CRC32 - -導入バージョン: v20.1 - -CRC-32-IEEE 802.3 の多項式と初期値 `0xffffffff`(zlib による実装)を使用して、文字列の CRC32 チェックサムを計算します。 - -**構文** - -```sql -CRC32(s) -``` - -**引数** - -* `s` — CRC32 を計算する文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -文字列の CRC32 チェックサムを返します。[`UInt32`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT CRC32('ClickHouse') -``` - -```response title=Response -┌─CRC32('ClickHouse')─┐ -│ 1538217360 │ -└─────────────────────┘ -``` - - -## CRC32IEEE - -導入バージョン: v20.1 - -CRC-32-IEEE 802.3 多項式を使用して、文字列の CRC32 チェックサムを計算します。 - -**構文** - -```sql -CRC32IEEE(s) -``` - -**引数** - -* `s` — CRC32 を計算する文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -文字列の CRC32 チェックサムを返します。[`UInt32`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT CRC32IEEE('ClickHouse'); -``` - -```response title=Response -┌─CRC32IEEE('ClickHouse')─┐ -│ 3089448422 │ -└─────────────────────────┘ -``` - - -## CRC64 - -導入バージョン: v20.1 - -CRC-64-ECMA多項式を使用して文字列のCRC64チェックサムを計算します。 - -**構文** - -```sql -CRC64(s) -``` - -**引数** - -* `s` — CRC64 を計算する対象の文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -文字列の CRC64 チェックサムを返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT CRC64('ClickHouse'); -``` - -```response title=Response -┌──CRC64('ClickHouse')─┐ -│ 12126588151325169346 │ -└──────────────────────┘ -``` - - -## appendTrailingCharIfAbsent - -導入: v1.1 - -文字列 `s` が空でなく、末尾が文字 `c` で終わっていない場合に、`s` の末尾に文字 `c` を付加します。 - -**構文** - -```sql -appendTrailingCharIfAbsent(s, c) -``` - -**引数** - -* `s` — 入力文字列。[`String`](/sql-reference/data-types/string) -* `c` — 存在しない場合に末尾へ追加する文字。[`String`](/sql-reference/data-types/string) - -**戻り値** - -`s` が `c` で終わっていない場合、末尾に文字 `c` を追加した文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT appendTrailingCharIfAbsent('https://example.com', '/'); -``` - -```response title=Response -┌─appendTraili⋯.com', '/')─┐ -│ https://example.com/ │ -└──────────────────────────┘ -``` - - -## ascii - -導入バージョン: v22.11 - -文字列 `s` の先頭の1文字の ASCII コードポイント値を `Int32` として返します。 - -**構文** - -```sql -ascii(s) -``` - -**引数** - -* `s` — 文字列型の入力値。[`String`](/sql-reference/data-types/string) - -**返される値** - -先頭文字の ASCII コードポイントを返します。`s` が空の場合、結果は `0` です。先頭文字が ASCII 文字ではない、または UTF-16 の Latin-1 補助範囲に含まれない場合、結果は未定義です。[`Int32`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT ascii('234') -``` - -```response title=Response -┌─ascii('234')─┐ -│ 50 │ -└──────────────┘ -``` - - -## base32Decode - -導入バージョン: v25.6 - -[Base32](https://datatracker.ietf.org/doc/html/rfc4648#section-6)(RFC 4648)でエンコードされた文字列をデコードします。 -文字列が有効な Base32 で正しくエンコードされていない場合は、例外がスローされます。 - -**構文** - -```sql -base32Decode(encoded) -``` - -**引数** - -* `encoded` — 文字列型の列または定数。[`String`](/sql-reference/data-types/string) - -**戻り値** - -引数をデコードした値を含む文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT base32Decode('IVXGG33EMVSA===='); -``` - -```response title=Response -┌─base32Decode('IVXGG33EMVSA====')─┐ -│ エンコード済み │ -└──────────────────────────────────┘ -``` - - -## base32Encode - -導入バージョン: v25.6 - -文字列を [Base32](https://datatracker.ietf.org/doc/html/rfc4648#section-6) でエンコードします。 - -**構文** - -```sql -base32Encode(plaintext) -``` - -**引数** - -* `plaintext` — 符号化するプレーンテキスト。[`String`](/sql-reference/data-types/string) - -**返り値** - -引数を符号化した値を含む文字列を返します。[`String`](/sql-reference/data-types/string) または [`FixedString`](/sql-reference/data-types/fixedstring) - -**例** - -**使用例** - -```sql title=Query -SELECT base32Encode('Encoded') -``` - -```response title=Response -┌─base32Encode('Encoded')─┐ -│ IVXGG33EMVSA==== │ -└─────────────────────────┘ -``` - - -## base58Decode - -導入バージョン: v22.7 - -[Base58](https://datatracker.ietf.org/doc/html/draft-msporny-base58-03#section-3) でエンコードされた文字列をデコードします。 -文字列が有効な Base58 エンコード文字列でない場合は、例外がスローされます。 - -**構文** - -```sql -base58Decode(encoded) -``` - -**引数** - -* `encoded` — デコードする文字列型の列または定数。[`String`](/sql-reference/data-types/string) - -**戻り値** - -引数のデコードされた値を含む文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT base58Decode('JxF12TrwUP45BMd'); -``` - -```response title=Response -┌─base58Decode⋯rwUP45BMd')─┐ -│ Hello World │ -└──────────────────────────┘ -``` - - -## base58Encode - -導入バージョン: v22.7 - -文字列を [Base58](https://tools.ietf.org/id/draft-msporny-base58-01.html) エンコーディングでエンコードします。 - -**構文** - -```sql -base58Encode(plaintext) -``` - -**引数** - -* `plaintext` — エンコードするプレーンテキスト。[`String`](/sql-reference/data-types/string) - -**戻り値** - -引数のエンコードされた値を含む文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT base58Encode('ClickHouse'); -``` - -```response title=Response -┌─base58Encode('ClickHouse')─┐ -│ 4nhk8K7GHXf6zx │ -└────────────────────────────┘ -``` - - -## base64Decode - -導入バージョン: v18.16 - -[Base64](https://en.wikipedia.org/wiki/Base64) 表現の文字列を、RFC 4648 に従ってデコードします。 -エラーが発生した場合は例外をスローします。 - -**構文** - -```sql -base64Decode(encoded) -``` - -**エイリアス**: `FROM_BASE64` - -**引数** - -* `encoded` — デコード対象の文字列型カラムまたは定数。文字列が有効な Base64 文字列でない場合、例外がスローされます。 [`String`](/sql-reference/data-types/string) - -**返される値** - -デコードされた文字列を返します。 [`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT base64Decode('Y2xpY2tob3VzZQ==') -``` - -```response title=Response -┌─base64Decode('Y2xpY2tob3VzZQ==')─┐ -│ clickhouse │ -└──────────────────────────────────┘ -``` - - -## base64Encode - -導入バージョン: v18.16 - -RFC 4648 に準拠した [Base64](https://en.wikipedia.org/wiki/Base64) 形式で文字列をエンコードします。 - -**構文** - -```sql -base64Encode(plaintext) -``` - -**別名**: `TO_BASE64` - -**引数** - -* `plaintext` — デコードするプレーンテキストのカラムまたは定数。[`String`](/sql-reference/data-types/string) - -**戻り値** - -引数の値をエンコードした文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT base64Encode('clickhouse') -``` - -```response title=Response -┌─base64Encode('clickhouse')─┐ -│ Y2xpY2tob3VzZQ== │ -└────────────────────────────┘ -``` - - -## base64URLDecode - -導入バージョン: v24.6 - -RFC 4648 に従い、URL セーフなアルファベットを使用する [Base64](https://en.wikipedia.org/wiki/Base64) 表現でエンコードされた文字列をデコードします。 -エラーが発生した場合には例外をスローします。 - -**構文** - -```sql -base64URLDecode(encoded) -``` - -**引数** - -* `encoded` — エンコード対象の文字列カラムまたは定数。文字列が有効な Base64 でエンコードされたものでない場合は、例外がスローされます。 [`String`](/sql-reference/data-types/string) - -**返される値** - -引数をデコードした値を含む文字列を返します。 [`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT base64URLDecode('aHR0cHM6Ly9jbGlja2hvdXNlLmNvbQ') -``` - -```response title=Response -┌─base64URLDecode('aHR0cHM6Ly9jbGlja2hvdXNlLmNvbQ')─┐ -│ https://clickhouse.com │ -└───────────────────────────────────────────────────┘ -``` - - -## base64URLEncode - -導入: v18.16 - -URL セーフなアルファベットを使用して、文字列を [Base64](https://datatracker.ietf.org/doc/html/rfc4648#section-4)(RFC 4648)表現でエンコードします。 - -**構文** - -```sql -base64URLEncode(plaintext) -``` - -**引数** - -* `plaintext` — エンコードするプレーンテキスト列または定数。[`String`](/sql-reference/data-types/string) - -**返される値** - -引数をエンコードした値を含む文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT base64URLEncode('https://clickhouse.com') -``` - -```response title=Response -┌─base64URLEncode('https://clickhouse.com')─┐ -│ aHR0cHM6Ly9jbGlja2hvdXNlLmNvbQ │ -└───────────────────────────────────────────┘ -``` - - -## basename - -導入バージョン: v20.1 - -文字列内で最後に現れるスラッシュまたはバックスラッシュ以降の部分を抽出します。 -この関数は、パスからファイル名を抽出する際によく使用されます。 - -**構文** - -```sql -basename(expr) -``` - -**引数** - -* `expr` — 文字列表現。バックスラッシュはエスケープする必要があります。[`String`](/sql-reference/data-types/string) - -**戻り値** - -入力文字列内で最後に現れるスラッシュまたはバックスラッシュ以降の部分文字列を返します。入力文字列がスラッシュまたはバックスラッシュで終わる場合は、空文字列を返します。スラッシュやバックスラッシュが含まれていない場合は、元の文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**Unix パスからファイル名を抽出する** - -```sql title=Query -SELECT 'some/long/path/to/file' AS a, basename(a) -``` - -```response title=Response -┌─a──────────────────────┬─basename('some/long/path/to/file')─┐ -│ some/long/path/to/file │ file │ -└────────────────────────┴────────────────────────────────────┘ -``` - -**Windows のパスからファイル名を抽出** - -```sql title=Query -SELECT 'some\\long\\path\\to\\file' AS a, basename(a) -``` - -```response title=Response -┌─a──────────────────────┬─basename('some\\long\\path\\to\\file')─┐ -│ some\long\path\to\file │ file │ -└────────────────────────┴────────────────────────────────────────┘ -``` - -**パス区切りを含まない文字列** - -```sql title=Query -SELECT 'some-file-name' AS a, basename(a) -``` - -```response title=Response -┌─a──────────────┬─basename('some-file-name')─┐ -│ some-file-name │ some-file-name │ -└────────────────┴────────────────────────────┘ -``` - - -## byteHammingDistance - -導入バージョン: v23.9 - -2つのバイト文字列間の[ハミング距離](https://en.wikipedia.org/wiki/Hamming_distance)を計算します。 - -**構文** - -```sql -byteHammingDistance(s1, s2) -``` - -**別名**: `mismatches` - -**引数** - -* `s1` — 1つ目の入力文字列。[`String`](/sql-reference/data-types/string) -* `s2` — 2つ目の入力文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -2つの文字列間のハミング距離を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT byteHammingDistance('karolin', 'kathrin') -``` - -```response title=Response -┌─byteHammingDistance('karolin', 'kathrin')─┐ -│ 3 │ -└───────────────────────────────────────────┘ -``` - - -## compareSubstrings - -導入バージョン: v25.2 - -2つの文字列を辞書順で比較します。 - -**構文** - -```sql -compareSubstrings(s1, s2, s1_offset, s2_offset, num_bytes) -``` - -**引数** - -* `s1` — 比較する1番目の文字列。[`String`](/sql-reference/data-types/string) -* `s2` — 比較する2番目の文字列。[`String`](/sql-reference/data-types/string) -* `s1_offset` — 比較を開始する `s1` 内の位置(0始まりのインデックス)。[`UInt*`](/sql-reference/data-types/int-uint) -* `s2_offset` — 比較を開始する `s2` 内の位置(0始まりのインデックス)。[`UInt*`](/sql-reference/data-types/int-uint) -* `num_bytes` — 両方の文字列で比較する最大バイト数。`s1_offset`(または `s2_offset`)+ `num_bytes` が入力文字列の末尾を超える場合、`num_bytes` はそれに応じて小さくなります。[`UInt*`](/sql-reference/data-types/int-uint) - -**戻り値** - -次の値を返します: - -* `s1`[`s1_offset` : `s1_offset` + `num_bytes`] < `s2`[`s2_offset` : `s2_offset` + `num_bytes`] の場合は `-1`。 -* `s1`[`s1_offset` : `s1_offset` + `num_bytes`] = `s2`[`s2_offset` : `s2_offset` + `num_bytes`] の場合は `0`。 -* `s1`[`s1_offset` : `s1_offset` + `num_bytes`] > `s2`[`s2_offset` : `s2_offset` + `num_bytes`] の場合は `1`。 - [`Int8`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT compareSubstrings('Saxony', 'Anglo-Saxon', 0, 6, 5) AS result -``` - -```response title=Response -┌─result─┐ -│ 0 │ -└────────┘ -``` - - -## concat - -導入バージョン: v1.1 - -指定された引数を連結します。 - -[`String`](../data-types/string.md) または [`FixedString`](../data-types/fixedstring.md) 型以外の引数は、既定のシリアライズ方式を用いて文字列に変換されます。 -これによりパフォーマンスが低下するため、`String` / `FixedString` 以外の引数を使用することは推奨されません。 - -**構文** - -```sql -concat([s1, s2, ...]) -``` - -**引数** - -* `s1, s2, ...` — 任意の型の値を任意の数だけ指定できます。[`Any`](/sql-reference/data-types) - -**戻り値** - -引数を連結して生成された String を返します。いずれかの引数が `NULL` の場合、関数は `NULL` を返します。引数が 1 つもない場合は、空文字列を返します。[`Nullable(String)`](/sql-reference/data-types/nullable) - -**例** - -**文字列の連結** - -```sql title=Query -SELECT concat('こんにちは、', '世界!') -``` - -```response title=Response -┌─concat('Hello, ', 'World!')─┐ -│ Hello, World! │ -└─────────────────────────────┘ -``` - -**数値の連結** - -```sql title=Query -SELECT concat(42, 144) -``` - -```response title=Response -┌─concat(42, 144)─┐ -│ 42144 │ -└─────────────────┘ -``` - - -## concatAssumeInjective - -導入: v1.1 - -[`concat`](#concat) と同様ですが、`concat(s1, s2, ...) → sn` が単射であると仮定します。 -すなわち、異なる引数に対して常に異なる結果を返すとみなします。 - -`GROUP BY` の最適化に利用できます。 - -**構文** - -```sql -concatAssumeInjective([s1, s2, ...]) -``` - -**引数** - -* `s1, s2, ...` — 任意の型の値を任意の数だけ指定できます。[`String`](/sql-reference/data-types/string) または [`FixedString`](/sql-reference/data-types/fixedstring) - -**戻り値** - -引数を連結して作成された文字列を返します。いずれかの引数の値が `NULL` の場合、関数は `NULL` を返します。引数が渡されない場合は空文字列を返します。戻り値の型は [`String`](/sql-reference/data-types/string) です。 - -**例** - -**GROUP BY の最適化** - -```sql title=Query -SELECT concat(key1, key2), sum(value) FROM key_val GROUP BY concatAssumeInjective(key1, key2) -``` - -```response title=Response -┌─concat(key1, key2)─┬─sum(value)─┐ -│ Hello, World! │ 3 │ -│ Hello, World! │ 2 │ -│ Hello, World │ 3 │ -└────────────────────┴────────────┘ -``` - - -## concatWithSeparator - -導入バージョン: v22.12 - -指定されたセパレータで区切って文字列を連結します。 - -**構文** - -```sql -concatWithSeparator(sep[, exp1, exp2, ...]) -``` - -**別名**: `concat_ws` - -**引数** - -* `sep` — 使用する区切り文字列。[`const String`](/sql-reference/data-types/string) または [`const FixedString`](/sql-reference/data-types/fixedstring) -* `exp1, exp2, ...` — 連結する式。`String` または `FixedString` 型でない引数は、デフォルトのシリアライゼーションを用いて文字列に変換されます。これはパフォーマンスが低下するため、`String`/`FixedString` 以外の引数の使用は推奨されません。[`Any`](/sql-reference/data-types) - -**戻り値** - -引数を連結して作成された `String` を返します。引数のいずれかの値が `NULL` の場合、関数は `NULL` を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT concatWithSeparator('a', '1', '2', '3', '4') -``` - -```response title=Response -┌─concatWithSeparator('a', '1', '2', '3', '4')─┐ -│ 1a2a3a4 │ -└──────────────────────────────────────────────┘ -``` - - -## concatWithSeparatorAssumeInjective - -導入バージョン: v22.12 - -[`concatWithSeparator`](#concatWithSeparator) と似ていますが、`concatWithSeparator(sep[,exp1, exp2, ... ]) → result` が単射であると仮定します。 -関数は、異なる引数に対して常に異なる結果を返す場合に単射と呼ばれます。 - -`GROUP BY` の最適化に使用できます。 - -**構文** - -```sql -concatWithSeparatorAssumeInjective(sep[, exp1, exp2, ... ]) -``` - -**引数** - -* `sep` — 使用する区切り文字。[`const String`](/sql-reference/data-types/string) または [`const FixedString`](/sql-reference/data-types/fixedstring) -* `exp1, exp2, ...` — 連結する式。型が `String` または `FixedString` でない引数は、デフォルトのシリアル化によって文字列に変換されます。これによりパフォーマンスが低下するため、String / FixedString 以外の引数の使用は推奨されません。[`String`](/sql-reference/data-types/string) または [`FixedString`](/sql-reference/data-types/fixedstring) - -**返される値** - -引数を連結して作成された String を返します。いずれかの引数の値が `NULL` の場合、関数は `NULL` を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -CREATE TABLE user_data ( -user_id UInt32, -first_name String, -last_name String, -score UInt32 -) -ENGINE = MergeTree -ORDER BY tuple(); - -INSERT INTO user_data VALUES -(1, 'John', 'Doe', 100), -(2, 'Jane', 'Smith', 150), -(3, 'John', 'Wilson', 120), -(4, 'Jane', 'Smith', 90); - -SELECT - concatWithSeparatorAssumeInjective('-', first_name, last_name) as full_name, - sum(score) as total_score -FROM user_data -GROUP BY concatWithSeparatorAssumeInjective('-', first_name, last_name); -``` - -```response title=Response -┌─full_name───┬─total_score─┐ -│ Jane-Smith │ 240 │ -│ John-Doe │ 100 │ -│ John-Wilson │ 120 │ -└─────────────┴─────────────┘ -``` - - -## conv - -導入バージョン: v1.1 - -異なる基数間で数値を変換します。 - -数値をある基数から別の基数へ変換します。2 から 36 までの基数をサポートします。 -10 より大きい基数では、桁 10~35 を表すために文字 A~Z(大文字・小文字は区別しない)が使用されます。 - -この関数は MySQL の `CONV()` 関数と互換性があります。 - -**構文** - -```sql -conv(数値, 変換元基数, 変換先基数) -``` - -**引数** - -* `number` — 変換する数値。文字列型または数値型を指定できます。 -* `from_base` — 元の基数 (2〜36)。整数でなければなりません。 -* `to_base` — 変換先の基数 (2〜36)。整数でなければなりません。 - -**戻り値** - -変換先の基数で表現された数値の文字列表現。 - -**例** - -**10進数を2進数に変換** - -```sql title=Query -SELECT conv('10', 10, 2) -``` - -```response title=Response -1010 -``` - -**16進数を10進数に変換** - -```sql title=Query -SELECT conv('FF', 16, 10) -``` - -```response title=Response -255 -``` - -**負数での変換** - -```sql title=Query -SELECT conv('-1', 10, 16) -``` - -```response title=Response -FFFFFFFFFFFFFFFF -``` - -**2 進数を 8 進数に変換する** - -```sql title=Query -SELECT conv('1010', 2, 8) -``` - -```response title=Response -12 -``` - - -## convertCharset - -導入バージョン: v1.1 - -文字列 `s` をエンコーディング `from` から `to` へ変換した結果を返します。 - -**構文** - -```sql -convertCharset(s, from, to) -``` - -**引数** - -* `s` — 入力文字列。[`String`](/sql-reference/data-types/string) -* `from` — 変換元の文字エンコーディング。[`String`](/sql-reference/data-types/string) -* `to` — 変換先の文字エンコーディング。[`String`](/sql-reference/data-types/string) - -**戻り値** - -文字エンコーディング `from` から `to` へ変換した文字列 `s` を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT convertCharset('Café', 'UTF-8', 'ISO-8859-1'); -``` - -```response title=Response -┌─convertChars⋯SO-8859-1')─┐ -│ Caf� │ -└──────────────────────────┘ -``` - - -## damerauLevenshteinDistance - -導入バージョン: v24.1 - -2 つのバイト列間の [Damerau-Levenshtein 距離](https://en.wikipedia.org/wiki/Damerau%E2%80%93Levenshtein_distance) を計算します。 - -**構文** - -```sql -damerauLevenshteinDistance(s1, s2) -``` - -**引数** - -* `s1` — 1 番目の入力文字列。[`String`](/sql-reference/data-types/string) -* `s2` — 2 番目の入力文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -2 つの文字列間の Damerau-Levenshtein 距離を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT damerauLevenshteinDistance('clickhouse', 'mouse') -``` - -```response title=Response -┌─damerauLevenshteinDistance('clickhouse', 'mouse')─┐ -│ 6 │ -└───────────────────────────────────────────────────┘ -``` - - -## decodeHTMLComponent - -導入バージョン: v23.9 - -文字列内の HTML エンティティを対応する文字にデコードします。 - -**構文** - -```sql -decodeHTMLComponent(s) -``` - -**引数** - -* `s` — デコード対象の HTML エンティティを含む文字列。[`String`](/sql-reference/data-types/string) - -**返される値** - -HTML エンティティをデコードした文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT decodeHTMLComponent('<div>Hello & "World"</div>') -``` - -```response title=Response -┌─decodeHTMLComponent('<div>Hello & "World"</div>')─┐ -│
Hello & "World"
│ -└─────────────────────────────────────────────────────────────────────────────┘ -``` - - -## decodeXMLComponent - -導入バージョン: v21.2 - -文字列内の XML エンティティを対応する文字にデコードします。 - -**構文** - -```sql -decodeXMLComponent(s) -``` - -**引数** - -* `s` — デコードする XML エンティティを含む文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -指定された文字列内の XML エンティティをデコードした文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT decodeXMLComponent('<tag>Hello & World</tag>') -``` - -```response title=Response -┌─decodeXMLCom⋯;/tag>')─┐ -│ Hello & World │ -└──────────────────────────┘ -``` - - -## editDistance - -導入バージョン: v23.9 - -2つのバイト文字列間の[編集距離](https://en.wikipedia.org/wiki/Edit_distance)を計算します。 - -**構文** - -```sql -editDistance(s1, s2) -``` - -**エイリアス**: `levenshteinDistance` - -**引数** - -* `s1` — 1つ目の入力文字列。[`String`](/sql-reference/data-types/string) -* `s2` — 2つ目の入力文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -2つの文字列間の編集距離を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT editDistance('clickhouse', 'mouse') -``` - -```response title=Response -┌─editDistance('clickhouse', 'mouse')─┐ -│ 6 │ -└─────────────────────────────────────┘ -``` - - -## editDistanceUTF8 - -導入バージョン: v24.6 - -2つの UTF8 文字列間の[編集距離](https://en.wikipedia.org/wiki/Edit_distance)を計算します。 - -**構文** - -```sql -editDistanceUTF8(s1, s2) -``` - -**別名**: `levenshteinDistanceUTF8` - -**引数** - -* `s1` — 1 番目の入力文字列。[`String`](/sql-reference/data-types/string) -* `s2` — 2 番目の入力文字列。[`String`](/sql-reference/data-types/string) - -**返り値** - -2 つの UTF-8 文字列間の編集距離を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT editDistanceUTF8('我是谁', '我是我') -``` - -```response title=Response -┌─editDistanceUTF8('我是谁', '我是我')──┐ -│ 1 │ -└─────────────────────────────────────┘ -``` - - -## encodeXMLComponent - -導入バージョン: v21.1 - -文字列を XML のテキストノードや属性値として埋め込むために、特殊文字をエスケープします。 - -**構文** - -```sql -encodeXMLComponent(s) -``` - -**引数** - -* `s` — エスケープする文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -エスケープされた文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT - 'Hello & "World"' AS original, - encodeXMLComponent('Hello & "World"') AS xml_encoded; -``` - -```response title=Response -┌─original───────────────────┬─xml_encoded──────────────────────────────────────────┐ -│ こんにちは & "世界" │ <tag>こんにちは & "世界"</tag> │ -└────────────────────────────┴──────────────────────────────────────────────────────┘ -``` - - -## endsWith - -導入: v1.1 - -文字列が指定された接尾辞で終わっているかどうかをチェックします。 - -**構文** - -```sql -endsWith(s, suffix) -``` - -**引数** - -* `s` — チェック対象の文字列。[`String`](/sql-reference/data-types/string) -* `suffix` — 末尾にあるかを確認する文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -`s` が `suffix` で終わる場合は `1`、それ以外の場合は `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT endsWith('ClickHouse', 'House'); -``` - -```response title=Response -┌─endsWith('Cl⋯', 'House')─┐ -│ 1 │ -└──────────────────────────┘ -``` - - -## endsWithCaseInsensitive - -導入バージョン: v25.9 - -文字列が、指定された大文字・小文字を区別しない接尾辞で終わっているかどうかを判定します。 - -**構文** - -```sql -endsWithCaseInsensitive(s, suffix) -``` - -**引数** - -* `s` — チェック対象の文字列。[`String`](/sql-reference/data-types/string) -* `suffix` — 大文字・小文字を区別せずに末尾にあるかをチェックする接尾辞。[`String`](/sql-reference/data-types/string) - -**戻り値** - -`s` が大文字・小文字を区別せずに見て `suffix` で終わっていれば `1` を返し、そうでなければ `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT endsWithCaseInsensitive('ClickHouse', 'HOUSE'); -``` - -```response title=Response -┌─endsWithCaseInsensitive('Cl⋯', 'HOUSE')─┐ -│ 1 │ -└─────────────────────────────────────────┘ -``` - - -## endsWithCaseInsensitiveUTF8 - -導入バージョン: v25.9 - -文字列 `s` が、大文字・小文字を区別せずに `suffix` で終わるかどうかを返します。 -文字列は有効な UTF-8 でエンコードされたテキストであると仮定します。 -この前提が満たされない場合でも、例外はスローされず、結果は未定義になります。 - -**構文** - -```sql -endsWithCaseInsensitiveUTF8(s, suffix) -``` - -**引数** - -* `s` — チェック対象の文字列。[`String`](/sql-reference/data-types/string) -* `suffix` — 末尾に付くかどうかを大文字小文字を区別せずにチェックするサフィックス。[`String`](/sql-reference/data-types/string) - -**返り値** - -` s` が大文字小文字を区別せずに `suffix` で終わる場合は `1` を返し、そうでない場合は `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT endsWithCaseInsensitiveUTF8('данных', 'ых'); -``` - -```response title=Response -┌─endsWithCaseInsensitiveUTF8('данных', 'ых')─┐ -│ 1 │ -└─────────────────────────────────────────────┘ -``` - - -## endsWithUTF8 - -導入されたバージョン: v23.8 - -文字列 `s` が `suffix` で終わるかどうかを返します。 -文字列が有効な UTF-8 でエンコードされたテキストであることを前提とします。 -この前提が満たされない場合でも、例外はスローされず、結果は未定義です。 - -**構文** - -```sql -endsWithUTF8(s, suffix) -``` - -**引数** - -* `s` — 確認する文字列。[`String`](/sql-reference/data-types/string) -* `suffix` — 末尾として確認する文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -`s` が `suffix` で終わる場合は `1` を、それ以外の場合は `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT endsWithUTF8('данных', 'ых'); -``` - -```response title=Response -┌─endsWithUTF8('данных', 'ых')─┐ -│ 1 │ -└──────────────────────────────┘ -``` - - -## extractTextFromHTML - -導入バージョン: v21.3 - -HTML または XHTML からテキストコンテンツを抽出します。 - -この関数は HTML タグ、コメント、script/style 要素を削除し、テキストコンテンツのみを残します。次の処理を行います: - -* すべての HTML/XML タグの削除 -* コメント(``)の削除 -* script および style 要素とその内容の削除 -* CDATA セクションの処理(内容をそのままコピー) -* 空白文字の適切な処理と正規化 - -注意: HTML エンティティはデコードされないため、必要に応じて別の関数で処理する必要があります。 - -**構文** - -```sql -extractTextFromHTML(html) -``` - -**引数** - -* `html` — テキストを抽出する対象の HTML コンテンツを含む文字列。[`String`](/sql-reference/data-types/string) - -**返り値** - -空白が正規化された抽出済みテキストコンテンツを返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT extractTextFromHTML(' - - ページタイトル - -

こんにちは 世界

- - - - -'); -``` - -```response title=Response -┌─extractTextFromHTML('...')─┐ -│ ページタイトル Hello World! │ -└────────────────────────────────────────┘ -``` - - -## firstLine - -導入バージョン: v23.7 - -複数行文字列の最初の行を返します。 - -**構文** - -```sql -firstLine(s) -``` - -**引数** - -* `s` — 入力文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -入力文字列の先頭行、または行区切りがない場合は文字列全体を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT firstLine('foo\\nbar\\nbaz') -``` - -```response title=Response -┌─firstLine('foo\nbar\nbaz')─┐ -│ foo │ -└────────────────────────────┘ -``` - - -## idnaDecode - -導入: v24.1 - -[Internationalized Domain Names in Applications](https://en.wikipedia.org/wiki/Internationalized_domain_name#Internationalizing_Domain_Names_in_Applications)(IDNA)メカニズムに従い、ドメイン名の Unicode(UTF-8)表現(ToUnicode アルゴリズム)を返します。 -エラーが発生した場合(例: 入力が不正な場合)は、入力文字列をそのまま返します。 -大文字・小文字の正規化が行われるため、[`idnaEncode()`](#idnaEncode) と [`idnaDecode()`](#idnaDecode) を繰り返し適用しても、必ずしも元の文字列が得られるとは限らない点に注意してください。 - -**構文** - -```sql -idnaDecode(s) -``` - -**引数** - -* `s` — 入力文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -IDNA メカニズムに従い、入力文字列を Unicode (UTF-8) 表現に変換した文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT idnaDecode('xn--strae-oqa.xn--mnchen-3ya.de') -``` - -```response title=Response -┌─idnaDecode('xn--strae-oqa.xn--mnchen-3ya.de')─┐ -│ straße.münchen.de │ -└───────────────────────────────────────────────┘ -``` - - -## idnaEncode - -導入バージョン: v24.1 - -[Internationalized Domain Names in Applications](https://en.wikipedia.org/wiki/Internationalized_domain_name#Internationalizing_Domain_Names_in_Applications)(IDNA)メカニズムに従い、ドメイン名の ASCII 表現(ToASCII アルゴリズム)を返します。 -入力文字列は UTF でエンコードされており、ASCII 文字列に変換可能である必要があります。変換できない場合は例外がスローされます。 - -:::note -パーセントデコードや、タブ・スペース・制御文字のトリミングは行われません。 -::: - -**構文** - -```sql -idnaEncode(s) -``` - -**引数** - -* `s` — 入力文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -IDNA メカニズムに従い、入力文字列の ASCII 表現を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT idnaEncode('straße.münchen.de') -``` - -```response title=Response -┌─idnaEncode('straße.münchen.de')─────┐ -│ xn--strae-oqa.xn--mnchen-3ya.de │ -└─────────────────────────────────────┘ -``` - - -## initcap - -導入バージョン: v23.7 - -各単語の最初の文字を大文字にし、残りを小文字に変換します。 -ここでいう単語とは、英数字が連続した部分列であり、非英数字によって区切られたシーケンスを指します。 - -:::note -`initcap` は各単語の最初の文字だけを大文字に変換するため、アポストロフィや大文字を含む単語では、予期しない動作が発生する場合があります。 -これは既知の動作であり、現時点では修正の予定はありません。 -::: - -**構文** - -```sql -initcap(s) -``` - -**引数** - -* `s` — 入力文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -各単語の先頭文字を大文字に変換した `s` を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT initcap('building for fast') -``` - -```response title=Response -┌─initcap('building for fast')─┐ -│ Building For Fast │ -└──────────────────────────────┘ -``` - -**アポストロフィや大文字を含む単語に関する既知の挙動の例** - -```sql title=Query -SELECT initcap('John''s cat won''t eat.'); -``` - -```response title=Response -┌─initcap('Joh⋯n\'t eat.')─┐ -│ John'S Cat Won'T Eat. │ -└──────────────────────────┘ -``` - - -## initcapUTF8 - -導入バージョン: v23.7 - -[`initcap`](#initcap) と同様に、`initcapUTF8` は各単語の最初の文字を大文字にし、それ以外を小文字に変換します。 -文字列には有効な UTF-8 エンコードのテキストが含まれていることを前提とします。 -この前提が満たされない場合でも、例外はスローされず、結果は未定義です。 - -:::note -この関数は言語を判別しません。たとえばトルコ語では、結果が厳密には正しくない場合があります(i/İ と i/I)。 -あるコードポイントにおいて、大文字と小文字で UTF-8 のバイト列の長さが異なる場合、そのコードポイントに対する結果は正しくない可能性があります。 -::: - -**構文** - -```sql -initcapUTF8(s) -``` - -**引数** - -* `s` — 入力文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -各単語の先頭の文字を大文字に変換した `s` を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT initcapUTF8('не тормозит') -``` - -```response title=Response -┌─initcapUTF8('не тормозит')─┐ -│ Не Тормозит │ -└────────────────────────────┘ -``` - - -## isValidASCII - -導入バージョン: v25.9 - -入力の String または FixedString が ASCII バイト (0x00–0x7F) のみを含む場合は 1 を返し、それ以外の場合は 0 を返します。 - -**構文** - -```sql -``` - -**別名**: `isASCII` - -**引数** - -* なし。 - -**戻り値** - -**例** - -**isValidASCII** - -```sql title=Query -SELECT isValidASCII('hello') AS is_ascii, isValidASCII('你好') AS is_not_ascii -``` - -```response title=Response -``` - - -## isValidUTF8 - -導入: v20.1 - -バイト列が有効な UTF-8 でエンコードされたテキストかどうかを検証します。 - -**構文** - -```sql -isValidUTF8(s) -``` - -**引数** - -* `s` — UTF-8 エンコードが有効かどうかを検査する文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -バイト列が有効な UTF-8 でエンコードされたテキストを構成していれば `1` を返し、そうでなければ `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT isValidUTF8('\\xc3\\xb1') AS valid, isValidUTF8('\\xc3\\x28') AS invalid -``` - -```response title=Response -┌─valid─┬─invalid─┐ -│ 1 │ 0 │ -└───────┴─────────┘ -``` - - -## jaroSimilarity - -導入バージョン: v24.1 - -2 つのバイト文字列間の [Jaro 類似度](https://en.wikipedia.org/wiki/Jaro%E2%80%93Winkler_distance#Jaro_similarity) を計算します。 - -**構文** - -```sql -jaroSimilarity(s1, s2) -``` - -**引数** - -* `s1` — 1 番目の入力文字列。[`String`](/sql-reference/data-types/string) -* `s2` — 2 番目の入力文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -2 つの文字列の Jaro 類似度を返します。[`Float64`](/sql-reference/data-types/float) - -**例** - -**使用例** - -```sql title=Query -SELECT jaroSimilarity('clickhouse', 'click') -``` - -```response title=Response -┌─jaroSimilarity('clickhouse', 'click')─┐ -│ 0.8333333333333333 │ -└───────────────────────────────────────┘ -``` - - -## jaroWinklerSimilarity - -導入バージョン: v24.1 - -2つのバイト列間の [Jaro-Winkler 類似度](https://en.wikipedia.org/wiki/Jaro%E2%80%93Winkler_distance) を計算します。 - -**構文** - -```sql -jaroWinklerSimilarity(s1, s2) -``` - -**引数** - -* `s1` — 1 番目の入力文字列。[`String`](/sql-reference/data-types/string) -* `s2` — 2 番目の入力文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -2 つの文字列間の Jaro-Winkler 類似度を返します。[`Float64`](/sql-reference/data-types/float) - -**例** - -**使用例** - -```sql title=Query -SELECT jaroWinklerSimilarity('clickhouse', 'click') -``` - -```response title=Response -┌─jaroWinklerSimilarity('clickhouse', 'click')─┐ -│ 0.8999999999999999 │ -└──────────────────────────────────────────────┘ -``` - - -## left - -導入バージョン: v22.1 - -文字列 `s` の左端から、指定した `offset` 文字を取り出した部分文字列を返します。 - -**構文** - -```sql -left(s, offset) -``` - -**引数** - -* `s` — 部分文字列を抽出する元の文字列。[`String`](/sql-reference/data-types/string) または [`FixedString`](/sql-reference/data-types/fixedstring) -* `offset` — オフセットのバイト数。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**戻り値** - -次を返します: - -* 正の `offset` の場合、文字列の先頭から開始し、`offset` バイト分の `s` の部分文字列。 -* 負の `offset` の場合、文字列の先頭から開始し、`length(s) - |offset|` バイト分の `s` の部分文字列。 -* `length` が `0` の場合は空文字列。 - [`String`](/sql-reference/data-types/string) - -**例** - -**正のオフセット** - -```sql title=Query -SELECT left('Hello World', 5) -``` - -```response title=Response -Helllo -``` - -**負のオフセット** - -```sql title=Query -SELECT left('Hello World', -6) -``` - -```response title=Response -Hello -``` - - -## leftPad - -導入バージョン: v21.8 - -指定された `length` に達するまで、文字列の左側をスペースまたは指定した文字列で(必要に応じて複数回)埋めます。 - -**構文** - -```sql -leftPad(string, length[, pad_string]) -``` - -**別名**: `lpad` - -**引数** - -* `string` — パディングを行う対象の入力文字列。[`String`](/sql-reference/data-types/string) -* `length` — 結果となる文字列の長さ。この値が入力文字列の長さより小さい場合、入力文字列は `length` 文字に切り詰められます。[`(U)Int*`](/sql-reference/data-types/int-uint) -* `pad_string` — 省略可。入力文字列を埋めるために使用する文字列。指定されていない場合、入力文字列はスペースでパディングされます。[`String`](/sql-reference/data-types/string) - -**戻り値** - -指定した長さになるよう左側がパディングされた文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT leftPad('abc', 7, '*'), leftPad('def', 7) -``` - -```response title=Response -┌─leftPad('abc', 7, '*')─┬─leftPad('def', 7)─┐ -│ ****abc │ def │ -└────────────────────────┴───────────────────┘ -``` - - -## leftPadUTF8 - -導入バージョン: v21.8 - -UTF8 文字列の左側を、スペースまたは指定した文字列(必要に応じて複数回)で埋めて、結果の文字列が指定された長さに達するまでパディングします。 -文字列長をバイト数で測定する [`leftPad`](#leftPad) とは異なり、文字列長はコードポイント数で測定されます。 - -**構文** - -```sql -leftPadUTF8(string, length[, pad_string]) -``` - -**引数** - -* `string` — パディングされる入力文字列。[`String`](/sql-reference/data-types/string) -* `length` — 結果の文字列の長さ。値が入力文字列の長さより小さい場合、入力文字列は `length` 文字に切り詰められます。[`(U)Int*`](/sql-reference/data-types/int-uint) -* `pad_string` — 省略可能。入力文字列をパディングする際に使用する文字列。指定されていない場合、入力文字列はスペースでパディングされます。[`String`](/sql-reference/data-types/string) - -**返り値** - -指定された長さの、左側がパディングされた文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT leftPadUTF8('абвг', 7, '*'), leftPadUTF8('дежз', 7) -``` - -```response title=Response -┌─leftPadUTF8('абвг', 7, '*')─┬─leftPadUTF8('дежз', 7)─┐ -│ ***абвг │ дежз │ -└─────────────────────────────┴────────────────────────┘ -``` - - -## leftUTF8 - -導入: v22.1 - -UTF-8 でエンコードされた文字列 `s` について、左側からの `offset` 文字目を開始位置とする部分文字列を返します。 - -**構文** - -```sql -leftUTF8(s, offset) -``` - -**引数** - -* `s` — 部分文字列を計算する対象の UTF-8 エンコードされた文字列。[`String`](/sql-reference/data-types/string) または [`FixedString`](/sql-reference/data-types/fixedstring) -* `offset` — オフセットのバイト数。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**戻り値** - -返される値: - -* 正の `offset` の場合、文字列の左端から開始し、`offset` バイト分を含む `s` の部分文字列。 -* 負の `offset` の場合、文字列の左端から開始し、`length(s) - |offset|` バイト分を含む `s` の部分文字列。 -* `length` が 0 の場合は空文字列。\ - [`String`](/sql-reference/data-types/string) - -**例** - -**正の offset** - -```sql title=Query -SELECT leftUTF8('Привет', 4) -``` - -```response title=Response -Прив -``` - -**負のオフセット** - -```sql title=Query -SELECT leftUTF8('Привет', -4) -``` - -```response title=Response -Пр -``` - - -## lengthUTF8 - -導入バージョン: v1.1 - -文字列の長さを、バイト数や文字数ではなく Unicode のコードポイント数で返します。 -文字列は有効な UTF-8 でエンコードされたテキストであることを前提とします。 -この前提が満たされない場合でも例外はスローされず、結果は未定義となります。 - -**構文** - -```sql -lengthUTF8(s) -``` - -**別名**: `CHAR_LENGTH`, `CHARACTER_LENGTH` - -**引数** - -* `s` — 有効な UTF-8 でエンコードされたテキストを含む文字列。[`String`](/sql-reference/data-types/string) - -**返される値** - -文字列 `s` の Unicode コードポイント数。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT lengthUTF8('こんにちは、世界!') -``` - -```response title=Response -┌─lengthUTF8('Здравствуй, мир!')─┐ -│ 16 │ -└────────────────────────────────┘ -``` - - -## lower - -導入バージョン: v1.1 - -ASCII 文字列を小文字に変換します。 - -**構文** - -```sql -lower(s) -``` - -**別名**: `lcase` - -**引数** - -* `s` — 小文字に変換する対象の文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -`s` を小文字に変換した文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT lower('CLICKHOUSE') -``` - -```response title=Response -┌─lower('CLICKHOUSE')─┐ -│ clickhouse │ -└─────────────────────┘ -``` - - -## lowerUTF8 - -導入バージョン: v1.1 - -文字列が有効な UTF-8 でエンコードされたテキストであると想定して、その文字列を小文字に変換します。この前提が満たされていない場合でも、例外はスローされず、結果は未定義になります。 - -**構文** - -```sql -lowerUTF8(input) -``` - -**引数** - -* `input` — 小文字に変換する入力文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -小文字に変換された文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**最初の例** - -```sql title=Query -SELECT lowerUTF8('München') as Lowerutf8; -``` - -```response title=Response -münchen -``` - - -## normalizeUTF8NFC - -導入バージョン: v21.11 - -UTF-8 文字列を [正規化形式 NFC](https://en.wikipedia.org/wiki/Unicode_equivalence#Normal_forms) に従って正規化します。 - -**構文** - -```sql -normalizeUTF8NFC(str) -``` - -**引数** - -* `str` — UTF-8 でエンコードされた入力文字列。[`String`](/sql-reference/data-types/string) - -**返される値** - -UTF-8 文字列の NFC 正規化形式を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT -'é' AS original, -- e + 結合鋭アクセント記号 (U+0065 + U+0301) -length(original), -normalizeUTF8NFC('é') AS nfc_normalized, -- é (U+00E9) -length(nfc_normalized); -``` - -```response title=Response -┌─original─┬─length(original)─┬─nfc_normalized─┬─length(nfc_normalized)─┐ -│ é │ 2 │ é │ 2 │ -└──────────┴──────────────────┴────────────────┴────────────────────────┘ -``` - - -## normalizeUTF8NFD - -導入バージョン: v21.11 - -UTF-8 文字列を[NFD 正規化形式](https://en.wikipedia.org/wiki/Unicode_equivalence#Normal_forms)に従って正規化します。 - -**構文** - -```sql -normalizeUTF8NFD(str) -``` - -**引数** - -* `str` — UTF-8 でエンコードされた入力文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -UTF-8 文字列を NFD 正規化形式にしたものを返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT - 'é' AS original, -- é (U+00E9) - length(original), - normalizeUTF8NFD('é') AS nfd_normalized, -- e + 結合アキュート符号 (U+0065 + U+0301) - length(nfd_normalized); -``` - -```response title=Response -┌─original─┬─length(original)─┬─nfd_normalized─┬─length(nfd_normalized)─┐ -│ é │ 2 │ é │ 3 │ -└──────────┴──────────────────┴────────────────┴────────────────────────┘ -``` - - -## normalizeUTF8NFKC - -導入バージョン: v21.11 - -[正規化形式 NFKC](https://en.wikipedia.org/wiki/Unicode_equivalence#Normal_forms) に従って UTF-8 文字列を正規化します。 - -**構文** - -```sql -normalizeUTF8NFKC(str) -``` - -**引数** - -* `str` — UTF-8 でエンコードされた入力文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -UTF-8 文字列を NFKC 正規化形式にしたものを返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT - '① ② ③' AS original, -- 丸囲み数字 - normalizeUTF8NFKC('① ② ③') AS nfkc_normalized; -- 1 2 3 に変換する -``` - -```response title=Response -┌─original─┬─nfkc_normalized─┐ -│ ① ② ③ │ 1 2 3 │ -└──────────┴─────────────────┘ -``` - - -## normalizeUTF8NFKD - -導入バージョン: v21.11 - -[正規化形式 NFKD](https://en.wikipedia.org/wiki/Unicode_equivalence#Normal_forms) に従って UTF-8 文字列を正規化します。 - -**構文** - -```sql -normalizeUTF8NFKD(str) -``` - -**引数** - -* `str` — UTF-8 エンコードされた入力文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -UTF-8 文字列を NFKD 形式に正規化したものを返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT - 'H₂O²' AS original, -- H + 下付き文字 2 + O + 上付き文字 2 - normalizeUTF8NFKD('H₂O²') AS nfkd_normalized; -- H 2 O 2 に変換される -``` - -```response title=Response -┌─original─┬─nfkd_normalized─┐ -│ H₂O² │ H2O2 │ -└──────────┴─────────────────┘ -``` - - -## punycodeDecode - -導入バージョン: v24.1 - -[Punycode](https://en.wikipedia.org/wiki/Punycode) でエンコードされた文字列を UTF-8 にデコードしたプレーンテキストを返します。 -有効な Punycode エンコード文字列が指定されない場合は、例外をスローします。 - -**構文** - -```sql -punycodeDecode(s) -``` - -**引数** - -* `s` — Punycode でエンコードされた文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -入力値のプレーンテキスト表現を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT punycodeDecode('Mnchen-3ya') -``` - -```response title=Response -┌─punycodeDecode('Mnchen-3ya')─┐ -│ München │ -└──────────────────────────────┘ -``` - - -## punycodeEncode - -導入バージョン: v24.1 - -文字列の [Punycode](https://en.wikipedia.org/wiki/Punycode) 表現を返します。 -文字列は UTF-8 でエンコードされたものである必要があり、そうでない場合の動作は未定義です。 - -**構文** - -```sql -punycodeEncode(s) -``` - -**引数** - -* `s` — 入力値。[`String`](/sql-reference/data-types/string) - -**戻り値** - -入力値を Punycode 表現で返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT punycodeEncode('München') -``` - -```response title=Response -┌─punycodeEncode('München')─┐ -│ Mnchen-3ya │ -└───────────────────────────┘ -``` - - -## regexpExtract - -導入バージョン: v23.2 - -`haystack` 内で、正規表現パターンにマッチし、指定されたグループ番号に対応する、最初に一致した文字列を抽出します。 - -**構文** - -```sql -regexpExtract(haystack, pattern[, index]) -``` - -**別名**: `REGEXP_EXTRACT` - -**引数** - -* `haystack` — 正規表現パターンとマッチさせる文字列。[`String`](/sql-reference/data-types/string) -* `pattern` — 正規表現文字列。`pattern` は複数の正規表現グループを含むことができ、`index` はどの正規表現グループを抽出するかを示します。インデックス 0 は正規表現全体へのマッチを意味します。[`const String`](/sql-reference/data-types/string) -* `index` — 省略可能。デフォルト値 1 の 0 以上の整数。どの正規表現グループを抽出するかを表します。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返される値** - -マッチした文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT - regexpExtract('100-200', '(\\d+)-(\\d+)', 1), - regexpExtract('100-200', '(\\d+)-(\\d+)', 2), - regexpExtract('100-200', '(\\d+)-(\\d+)', 0), - regexpExtract('100-200', '(\\d+)-(\\d+)'); -``` - -```response title=Response -┌─regexpExtract('100-200', '(\\d+)-(\\d+)', 1)─┬─regexpExtract('100-200', '(\\d+)-(\\d+)', 2)─┬─regexpExtract('100-200', '(\\d+)-(\\d+)', 0)─┬─regexpExtract('100-200', '(\\d+)-(\\d+)')─┐ -│ 100 │ 200 │ 100-200 │ 100 │ -└──────────────────────────────────────────────┴──────────────────────────────────────────────┴──────────────────────────────────────────────┴───────────────────────────────────────────┘ -``` - - -## repeat - -導入: v20.1 - -指定された回数だけ文字列を繰り返して連結します。 - -**構文** - -```sql -repeat(s, n) -``` - -**引数** - -* `s` — 繰り返す対象の文字列。[`String`](/sql-reference/data-types/string) -* `n` — 文字列を繰り返す回数。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返される値** - -文字列 `s` を `n` 回繰り返した文字列。`n` が負の値の場合、この関数は空文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT repeat('abc', 10) -``` - -```response title=Response -┌─repeat('abc', 10)──────────────┐ -│ abcabcabcabcabcabcabcabcabcabc │ -└────────────────────────────────┘ -``` - - -## reverseUTF8 - -導入バージョン: v1.1 - -文字列内の Unicode コードポイント列を逆順に並べ替えます。 -文字列が有効な UTF-8 でエンコードされたテキストであることを前提とします。 -この前提が成り立たない場合でも例外はスローされず、結果は未定義です。 - -**構文** - -```sql -reverseUTF8(s) -``` - -**引数** - -* `s` — 有効な UTF-8 でエンコードされたテキストを含む文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -Unicode コードポイント列の順序を反転した文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT reverseUTF8('ClickHouse') -``` - -```response title=Response -esuoHkcilC -``` - - -## right - -導入バージョン: v22.1 - -文字列 `s` の末尾から指定した `offset` 文字の部分文字列を返します。 - -**構文** - -```sql -right(s, offset) -``` - -**引数** - -* `s` — 部分文字列を取得する対象の文字列。[`String`](/sql-reference/data-types/string) または [`FixedString`](/sql-reference/data-types/fixedstring) -* `offset` — オフセットとなるバイト数。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返り値** - -返り値: - -* 正の `offset` の場合、文字列の右端から `offset` バイト分を切り出した `s` の部分文字列。 -* 負の `offset` の場合、文字列の右端から `length(s) - |offset|` バイト分を切り出した `s` の部分文字列。 -* `length` が `0` の場合は空文字列。 - [`String`](/sql-reference/data-types/string) - -**例** - -**正の offset** - -```sql title=Query -SELECT right('Hello', 3) -``` - -```response title=Response -llo -``` - -**負のオフセット** - -```sql title=Query -SELECT right('Hello', -3) -``` - -```response title=Response -lo -``` - - -## rightPad - -導入バージョン: v21.8 - -文字列の右側をスペースまたは指定した文字列(必要に応じて繰り返し)で埋め、結果の文字列が指定された `length` に達するまでパディングします。 - -**構文** - -```sql -rightPad(string, length[, pad_string]) -``` - -**エイリアス**: `rpad` - -**引数** - -* `string` — パディング対象の入力文字列。 [`String`](/sql-reference/data-types/string) -* `length` — 結果となる文字列の長さ。この値が入力文字列の長さより小さい場合、入力文字列は `length` 文字に切り詰められます。 [`(U)Int*`](/sql-reference/data-types/int-uint) -* `pad_string` — オプション。入力文字列をパディングする際に使用する文字列。指定しない場合、入力文字列は空白文字で埋められます。 [`String`](/sql-reference/data-types/string) - -**戻り値** - -指定した長さになるように右側を埋めた文字列を返します。 [`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT rightPad('abc', 7, '*'), rightPad('abc', 7) -``` - -```response title=Response -┌─rightPad('abc', 7, '*')─┬─rightPad('abc', 7)─┐ -│ abc**** │ abc │ -└─────────────────────────┴────────────────────┘ -``` - - -## rightPadUTF8 - -導入: v21.8 - -文字列の右側を、結果の文字列が指定された長さに達するまで、スペースまたは指定した文字列(必要に応じて複数回)で埋めます。 -文字列の長さをバイト数で測定する [`rightPad`](#rightPad) とは異なり、この関数では文字列の長さはコードポイント数で測定されます。 - -**構文** - -```sql -rightPadUTF8(string, length[, pad_string]) -``` - -**引数** - -* `string` — パディング対象の入力文字列。[`String`](/sql-reference/data-types/string) -* `length` — 結果となる文字列の長さ。この値が入力文字列の長さより小さい場合、入力文字列は `length` 文字に切り詰められます。[`(U)Int*`](/sql-reference/data-types/int-uint) -* `pad_string` — オプション。入力文字列をパディングする際に用いる文字列。指定されていない場合、入力文字列はスペースでパディングされます。[`String`](/sql-reference/data-types/string) - -**返される値** - -指定された長さになるように右側をパディングした文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT rightPadUTF8('абвг', 7, '*'), rightPadUTF8('абвг', 7) -``` - -```response title=Response -┌─rightPadUTF8('абвг', 7, '*')─┬─rightPadUTF8('абвг', 7)─┐ -│ абвг*** │ абвг │ -└──────────────────────────────┴─────────────────────────┘ -``` - - -## rightUTF8 - -導入バージョン: v22.1 - -UTF-8 エンコードされた文字列 `s` に対して、右端から `offset` 文字の部分文字列を返します。 - -**構文** - -```sql -rightUTF8(s, offset) -``` - -**引数** - -* `s` — 部分文字列を計算する対象の UTF-8 エンコードされた文字列。[`String`](/sql-reference/data-types/string) または [`FixedString`](/sql-reference/data-types/fixedstring) -* `offset` — オフセットを表すバイト数。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**戻り値** - -返される値: - -* 正の `offset` の場合、文字列の右端から始まる、長さ `offset` バイトの `s` の部分文字列。 -* 負の `offset` の場合、文字列の右端から始まる、長さ `length(s) - |offset|` バイトの `s` の部分文字列。 -* `length` が `0` の場合は空文字列。\ - 戻り値の型: [`String`](/sql-reference/data-types/string) - -**例** - -**正のオフセット** - -```sql title=Query -SELECT rightUTF8('Привет', 4) -``` - -```response title=Response -ивет -``` - -**負のオフセット** - -```sql title=Query -SELECT rightUTF8('Привет', -4) -``` - -```response title=Response -ет -``` - - -## soundex - -導入バージョン: v23.4 - -文字列の [Soundex コード](https://en.wikipedia.org/wiki/Soundex) を返します。 - -**構文** - -```sql -soundex(s) -``` - -**引数** - -* `s` — 入力文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -入力文字列の Soundex コードを返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT soundex('aksel') -``` - -```response title=Response -┌─soundex('aksel')─┐ -│ A240 │ -└──────────────────┘ -``` - - -## space - -導入バージョン: v23.5 - -指定された回数だけ空白文字(` `)を連結した文字列を返します。 - -**構文** - -```sql -space(n) -``` - -**引数** - -* `n` — スペースを繰り返す回数。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**戻り値** - -スペースを `n` 回繰り返した文字列を返します。`n <= 0` の場合、関数は空文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT space(3) AS res, length(res); -``` - -```response title=Response -┌─res─┬─length(res)─┐ -│ │ 3 │ -└─────┴─────────────┘ -``` - - -## sparseGrams - -導入バージョン: v25.5 - -長さが少なくとも `n` であり、かつ次の条件を満たす、指定された文字列中のすべての部分文字列を検出します。 -その部分文字列の両端に位置する (n-1)-グラムのハッシュ値が、 -その部分文字列の内部に含まれるどの (n-1)-グラムのハッシュ値よりも大きい場合にのみ対象とします。 -ハッシュ関数として `CRC32` を使用します。 - -**構文** - -```sql -sparseGrams(s[, min_ngram_length, max_ngram_length]) -``` - -**引数** - -* `s` — 入力文字列。[`String`](/sql-reference/data-types/string) -* `min_ngram_length` — 省略可能。抽出される ngram の最小長。既定値かつ最小値は 3。[`UInt*`](/sql-reference/data-types/int-uint) -* `max_ngram_length` — 省略可能。抽出される ngram の最大長。既定値は 100。`min_ngram_length` 以上である必要がある。[`UInt*`](/sql-reference/data-types/int-uint) - -**戻り値** - -選択された部分文字列の配列を返します。[`Array(String)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT sparseGrams('alice', 3) -``` - -```response title=Response -┌─sparseGrams('alice', 3)────────────┐ -│ ['ali','lic','lice','ice'] │ -└────────────────────────────────────┘ -``` - - -## sparseGramsHashes - -導入バージョン: v25.5 - -与えられた文字列について、長さが少なくとも `n` のすべての部分文字列のハッシュ値を求めます。 -このとき、その部分文字列の両端にある (n-1)-gram のハッシュ値が、 -その部分文字列内に含まれるいずれの (n-1)-gram のハッシュ値よりも厳密に大きいもののみを対象とします。 -ハッシュ関数として `CRC32` を使用します。 - -**構文** - -```sql -sparseGramsHashes(s[, min_ngram_length, max_ngram_length]) -``` - -**引数** - -* `s` — 入力文字列。[`String`](/sql-reference/data-types/string) -* `min_ngram_length` — 省略可能。抽出される n-gram の最小長。既定値かつ最小値は 3。[`UInt*`](/sql-reference/data-types/int-uint) -* `max_ngram_length` — 省略可能。抽出される n-gram の最大長。既定値は 100。`min_ngram_length` 以上である必要がある。[`UInt*`](/sql-reference/data-types/int-uint) - -**戻り値** - -選択された部分文字列の CRC32 ハッシュ値を要素とする配列を返す。[`Array(UInt32)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT sparseGramsHashes('alice', 3) -``` - -```response title=Response -┌─sparseGramsHashes('alice', 3)──────────────────────┐ -│ [1481062250,2450405249,4012725991,1918774096] │ -└────────────────────────────────────────────────────┘ -``` - - -## sparseGramsHashesUTF8 - -導入バージョン: v25.5 - -指定された UTF-8 文字列について、長さが少なくとも `n` のすべての部分文字列のハッシュを求めます。このとき、その部分文字列の両端にある (n-1)-gram のハッシュ値が、その部分文字列内部に含まれるどの (n-1)-gram のハッシュ値よりも厳密に大きいものだけを対象とします。 -入力は UTF-8 文字列であることを前提としており、不正な UTF-8 シーケンスが含まれている場合は例外をスローします。 -ハッシュ関数として `CRC32` を使用します。 - -**構文** - -```sql -sparseGramsHashesUTF8(s[, min_ngram_length, max_ngram_length]) -``` - -**引数** - -* `s` — 入力文字列。[`String`](/sql-reference/data-types/string) -* `min_ngram_length` — 省略可能。抽出される ngram の最小長。デフォルト値かつ最小値は 3。[`UInt*`](/sql-reference/data-types/int-uint) -* `max_ngram_length` — 省略可能。抽出される ngram の最大長。デフォルト値は 100。`min_ngram_length` 以上でなければならない。[`UInt*`](/sql-reference/data-types/int-uint) - -**戻り値** - -抽出された UTF-8 部分文字列の CRC32 ハッシュの配列を返します。[`Array(UInt32)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT sparseGramsHashesUTF8('алиса', 3) -``` - -```response title=Response -┌─sparseGramsHashesUTF8('алиса', 3)─┐ -│ [4178533925,3855635300,561830861] │ -└───────────────────────────────────┘ -``` - - -## sparseGramsUTF8 - -導入バージョン: v25.5 - -与えられた UTF-8 文字列について、長さが少なくとも `n` であり、かつその部分文字列の両端にある (n-1)-gram のハッシュ値が、その部分文字列内のどの (n-1)-gram のハッシュ値よりも厳密に大きいような、すべての部分文字列を求めます。 -UTF-8 文字列を引数に取り、無効な UTF-8 シーケンスが含まれている場合は例外をスローします。 -ハッシュ関数として `CRC32` を使用します。 - -**構文** - -```sql -sparseGramsUTF8(s[, min_ngram_length, max_ngram_length]) -``` - -**引数** - -* `s` — 入力文字列。[`String`](/sql-reference/data-types/string) -* `min_ngram_length` — 省略可能。抽出される n-gram の長さの最小値。デフォルトかつ最小値は 3。[`UInt*`](/sql-reference/data-types/int-uint) -* `max_ngram_length` — 省略可能。抽出される n-gram の長さの最大値。デフォルト値は 100。`min_ngram_length` 以上である必要がある。[`UInt*`](/sql-reference/data-types/int-uint) - -**返り値** - -選択された UTF-8 部分文字列の配列を返す。[`Array(String)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT sparseGramsUTF8('алиса', 3) -``` - -```response title=Response -┌─sparseGramsUTF8('алиса', 3)─┐ -│ ['али','лис','иса'] │ -└─────────────────────────────┘ -``` - - -## startsWith - -導入バージョン: v1.1 - -文字列が指定した文字列で始まるかどうかを判定します。 - -**構文** - -```sql -startsWith(s, prefix) -``` - -**引数** - -* `s` — チェック対象の文字列。[`String`](/sql-reference/data-types/string) -* `prefix` — `s` の先頭にあるかを確認するプレフィックス文字列。[`String`](/sql-reference/data-types/string) - -**返される値** - -`s` が `prefix` で始まる場合は `1`、それ以外の場合は `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT startsWith('ClickHouse', 'Click'); -``` - -```response title=Response -┌─startsWith('⋯', 'Click')─┐ -│ 1 │ -└──────────────────────────┘ -``` - - -## startsWithCaseInsensitive - -導入バージョン: v25.9 - -文字列が、指定された文字列で大文字小文字を区別せずに始まるかどうかを判定します。 - -**構文** - -```sql -startsWithCaseInsensitive(s, prefix) -``` - -**引数** - -* `s` — チェック対象の文字列。[`String`](/sql-reference/data-types/string) -* `prefix` — 大文字小文字を区別せずにチェックするプレフィックス文字列。[`String`](/sql-reference/data-types/string) - -**返される値** - -`s` が大文字小文字を区別せずに `prefix` で始まる場合は `1`、それ以外の場合は `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT startsWithCaseInsensitive('ClickHouse', 'CLICK'); -``` - -```response title=Response -┌─startsWithCaseInsensitive('⋯', 'CLICK')─┐ -│ 1 │ -└─────────────────────────────────────────┘ -``` - - -## startsWithCaseInsensitiveUTF8 - -導入バージョン: v25.9 - -文字列が、指定された大文字小文字を区別しない接頭辞で始まるかどうかを判定します。 -文字列には、有効な UTF-8 でエンコードされたテキストが含まれていることを前提とします。 -この前提が満たされない場合でも、例外はスローされず、結果は未定義です。 - -**構文** - -```sql -startsWithCaseInsensitiveUTF8(s, prefix) -``` - -**引数** - -* `s` — チェック対象の文字列。[`String`](/sql-reference/data-types/string) -* `prefix` — 大文字・小文字を区別せずに先頭一致を判定するプレフィックス文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -`s` が大文字・小文字を区別せずに `prefix` で始まる場合は `1` を返し、それ以外の場合は `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT startsWithCaseInsensitiveUTF8('приставка', 'при') -``` - -```response title=Response -┌─startsWithUT⋯ка', 'при')─┐ -│ 1 │ -└──────────────────────────┘ -``` - - -## startsWithUTF8 - -導入バージョン: v23.8 - -文字列が指定されたプレフィックスで始まるかどうかをチェックします。 -文字列が有効な UTF-8 でエンコードされたテキストであることを前提とします。 -この前提が満たされない場合でも、例外はスローされず、結果は未定義です。 - -**構文** - -```sql -startsWithUTF8(s, prefix) -``` - -**引数** - -* `s` — チェック対象の文字列。[`String`](/sql-reference/data-types/string) -* `prefix` — `s` の先頭に存在するかを確認するプレフィックス。[`String`](/sql-reference/data-types/string) - -**戻り値** - -`s` が `prefix` で始まる場合は `1`、それ以外は `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT startsWithUTF8('приставка', 'при') -``` - -```response title=Response -┌─startsWithUT⋯ка', 'при')─┐ -│ 1 │ -└──────────────────────────┘ -``` - - -## stringBytesEntropy - -導入バージョン: v25.6 - -文字列内のバイト分布に対するシャノンのエントロピーを計算します。 - -**構文** - -```sql -stringBytesEntropy(s) -``` - -**引数** - -* `s` — 解析する文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -文字列中のバイト分布に対するシャノンエントロピーを返します。[`Float64`](/sql-reference/data-types/float) - -**例** - -**使用例** - -```sql title=Query -SELECT stringBytesEntropy('Hello, world!') -``` - -```response title=Response -┌─stringBytesEntropy('Hello, world!')─┐ -│ 3.07049960 │ -└─────────────────────────────────────┘ -``` - - -## stringBytesUniq - -導入されたバージョン: v25.6 - -文字列内の異なるバイト数をカウントします。 - -**構文** - -```sql -stringBytesUniq(s) -``` - -**引数** - -* `s` — 解析する文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -文字列内の相異なるバイト数を返します。[`UInt16`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT stringBytesUniq('Hello') -``` - -```response title=Response -┌─stringBytesUniq('Hello')─┐ -│ 4 │ -└──────────────────────────┘ -``` - - -## stringJaccardIndex - -導入バージョン: v23.11 - -2 つのバイト列間の [Jaccard 係数](https://en.wikipedia.org/wiki/Jaccard_index) を計算します。 - -**構文** - -```sql -stringJaccardIndex(s1, s2) -``` - -**引数** - -* `s1` — 1番目の入力文字列。[`String`](/sql-reference/data-types/string) -* `s2` — 2番目の入力文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -2つの文字列間の Jaccard 類似度インデックスを返します。[`Float64`](/sql-reference/data-types/float) - -**例** - -**使用例** - -```sql title=Query -SELECT stringJaccardIndex('clickhouse', 'mouse') -``` - -```response title=Response -┌─stringJaccardIndex('clickhouse', 'mouse')─┐ -│ 0.4 │ -└───────────────────────────────────────────┘ -``` - - -## stringJaccardIndexUTF8 - -導入バージョン: v23.11 - -[`stringJaccardIndex`](#stringJaccardIndex) と同様ですが、UTF-8 でエンコードされた文字列を対象とします。 - -**構文** - -```sql -stringJaccardIndexUTF8(s1, s2) -``` - -**引数** - -* `s1` — 1 つ目の入力 UTF8 文字列。[`String`](/sql-reference/data-types/string) -* `s2` — 2 つ目の入力 UTF8 文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -2 つの UTF8 文字列間の Jaccard 類似度インデックスを返します。[`Float64`](/sql-reference/data-types/float) - -**例** - -**使用例** - -```sql title=Query -SELECT stringJaccardIndexUTF8('我爱你', '我也爱你') -``` - -```response title=Response -┌─stringJaccardIndexUTF8('我爱你', '我也爱你')─┐ -│ 0.75 │ -└─────────────────────────────────────────────┘ -``` - - -## substring - -導入バージョン: v1.1 - -文字列 `s` のうち、指定されたバイトインデックス `offset` から始まる部分文字列を返します。 -バイトのカウントは 1 から始まり、次の仕様に従います: - -* `offset` が `0` の場合、空文字列が返されます。 -* `offset` が負の場合、部分文字列は先頭からではなく、文字列の末尾から `pos` 文字分手前の位置から始まります。 - -オプション引数 `length` は、返される部分文字列が持つことのできる最大バイト数を指定します。 - -**構文** - -```sql -substring(s, offset[, length]) -``` - -**別名**: `byteSlice`, `mid`, `substr` - -**引数** - -* `s` — 部分文字列を取得する元の文字列。[`String`](/sql-reference/data-types/string) または [`FixedString`](/sql-reference/data-types/fixedstring) または [`Enum`](/sql-reference/data-types/enum) -* `offset` — `s` の中で部分文字列を開始する位置。[`(U)Int*`](/sql-reference/data-types/int-uint) -* `length` — 省略可能。部分文字列の最大バイト長。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**戻り値** - -`offset` で指定した位置から `length` バイト分の `s` の部分文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**基本的な使い方** - -```sql title=Query -SELECT 'database' AS db, substr(db, 5), substr(db, 5, 1) -``` - -```response title=Response -┌─db───────┬─substring('database', 5)─┬─substring('database', 5, 1)─┐ -│ database │ base │ b │ -└──────────┴──────────────────────────┴─────────────────────────────┘ -``` - - -## substringIndex - -導入バージョン: v23.7 - -Spark や MySQL と同様に、区切り文字 `delim` が `count` 回現れるより前の部分文字列を、文字列 `s` から返します。 - -**構文** - -```sql -substringIndex(s, delim, count) -``` - -**別名**: `SUBSTRING_INDEX` - -**引数** - -* `s` — 部分文字列を抽出する対象の文字列。[`String`](/sql-reference/data-types/string) -* `delim` — 分割に使用する区切り文字。[`String`](/sql-reference/data-types/string) -* `count` — 部分文字列を抽出する前にカウントする区切り文字の出現回数。`count` が正の場合は、左から数えて `count` 個目の区切り文字より左側のすべてが返されます。`count` が負の場合は、右から数えて `|count|` 個目の区切り文字より右側のすべてが返されます。[`UInt`](/sql-reference/data-types/int-uint) または [`Int`](/sql-reference/data-types/int-uint) - -**返される値** - -`delim` が `count` 回出現する位置より前の `s` の部分文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT substringIndex('www.clickhouse.com', '.', 2) -``` - -```response title=Response -┌─substringIndex('www.clickhouse.com', '.', 2)─┐ -│ www.clickhouse │ -└──────────────────────────────────────────────┘ -``` - - -## substringIndexUTF8 - -導入バージョン: v23.7 - -Unicode コードポイント単位で、区切り文字 `delim` が `count` 回出現するまでの `s` の部分文字列を返します。 -文字列が有効な UTF-8 エンコードのテキストであることを前提とします。 -この前提が満たされない場合でも、例外はスローされず、結果は未定義です。 - -**構文** - -```sql -substringIndexUTF8(s, delim, count) -``` - -**引数** - -* `s` — 部分文字列を抽出する元の文字列。[`String`](/sql-reference/data-types/string) -* `delim` — 分割に使用する区切り文字。[`String`](/sql-reference/data-types/string) -* `count` — 部分文字列を抽出する前にカウントする区切り文字の出現回数。`count` が正の値の場合は、(左から数えて)最後の区切り文字より左側のすべてが返されます。`count` が負の値の場合は、(右から数えて)最後の区切り文字より右側のすべてが返されます。[`UInt`](/sql-reference/data-types/int-uint) または [`Int`](/sql-reference/data-types/int-uint) - -**戻り値** - -`delim` が `count` 回出現する位置より前にある `s` の部分文字列を返します。[`String`](/sql-reference/data-types/string) - -**使用例** - -**UTF8 の例** - -```sql title=Query -SELECT substringIndexUTF8('www.straßen-in-europa.de', '.', 2) -``` - -```response title=Response -www.straßen-in-europa -``` - - -## substringUTF8 - -導入バージョン: v1.1 - -Unicode コードポイントを基準として、文字列 `s` のうち、指定したバイトインデックス `offset` から始まる部分文字列を返します。 -バイトのカウントは次のルールで `1` から始まります。 - -* `offset` が `0` の場合は、空文字列を返します。 -* `offset` が負の場合、部分文字列は先頭からではなく、文字列の末尾から `pos` 文字目を開始位置として始まります。 - -省略可能な引数 `length` は、返される部分文字列が持つことのできる最大バイト数を指定します。 - -:::note -この関数は、文字列が有効な UTF-8 でエンコードされたテキストであることを前提とします。 -この前提が満たされていない場合でも、例外はスローされず、結果は未定義となります。 -::: - -**構文** - -```sql -substringUTF8(s, offset[, length]) -``` - -**引数** - -* `s` — 部分文字列を取得する対象の文字列。[`String`](/sql-reference/data-types/string) または [`FixedString`](/sql-reference/data-types/fixedstring) または [`Enum`](/sql-reference/data-types/enum) -* `offset` — `s` 内での部分文字列の開始位置。[`Int`](/sql-reference/data-types/int-uint) または [`UInt`](/sql-reference/data-types/int-uint) -* `length` — 部分文字列の最大長。省略可能。[`Int`](/sql-reference/data-types/int-uint) または [`UInt`](/sql-reference/data-types/int-uint) - -**返される値** - -インデックス `offset` から開始し、最大 `length` バイトの `s` の部分文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT 'Täglich grüßt das Murmeltier.' AS str, substringUTF8(str, 9), substringUTF8(str, 9, 5) -``` - -```response title=Response -Täglich grüßt das Murmeltier. grüßt das Murmeltier. grüßt -``` - - -## toValidUTF8 - -導入バージョン: v20.1 - -文字列内の無効な UTF-8 文字を、置換文字 `�` (U+FFFD) に置き換えることで、有効な UTF-8 エンコーディングに変換します。 -連続する複数の無効な文字が見つかった場合は、1 つの置換文字にまとめられます。 - -**構文** - -```sql -toValidUTF8(s) -``` - -**引数** - -* `s` — String データ型オブジェクトとして表される任意のバイト列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -有効な UTF-8 文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT toValidUTF8('\\x61\\xF0\\x80\\x80\\x80b') -``` - -```response title=Response -c -┌─toValidUTF8('a����b')─┐ -│ a�b │ -└───────────────────────┘ -``` - - -## trimBoth - -v20.1 で導入 - -文字列の先頭および末尾から、指定した文字を削除します。 -デフォルトでは、一般的な空白(ASCII)文字を削除します。 - -**構文** - -```sql -trimBoth(s[, trim_characters]) -``` - -**エイリアス**: `trim` - -**引数** - -* `s` — トリミングする文字列。[`String`](/sql-reference/data-types/string) -* `trim_characters` — 省略可。トリミング対象の文字集合。指定しない場合は、一般的な空白文字が削除されます。[`String`](/sql-reference/data-types/string) - -**戻り値** - -両端から指定された文字を取り除いた文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT trimBoth('$$ClickHouse$$', '$') -``` - -```response title=Response -┌─trimBoth('$$⋯se$$', '$')─┐ -│ ClickHouse │ -└──────────────────────────┘ -``` - - -## trimLeft - -導入バージョン: v20.1 - -文字列の先頭から指定した文字を削除します。 -既定では、一般的な空白(ASCII)文字を削除します。 - -**構文** - -```sql -trimLeft(input[, trim_characters]) -``` - -**別名**: `ltrim` - -**引数** - -* `input` — トリミング対象の文字列。[`String`](/sql-reference/data-types/string) -* `trim_characters` — 省略可能。トリミングする文字。指定されていない場合は、一般的な空白文字が削除されます。[`String`](/sql-reference/data-types/string) - -**戻り値** - -先頭(左側)から指定した文字をトリミングした文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT trimLeft('ClickHouse', 'Click'); -``` - -```response title=Response -┌─trimLeft('Cl⋯', 'Click')─┐ -│ House │ -└──────────────────────────┘ -``` - - -## trimRight - -導入バージョン: v20.1 - -文字列の末尾から指定した文字を削除します。 -デフォルトでは、一般的な ASCII の空白文字を削除します。 - -**構文** - -```sql -trimRight(s[, trim_characters]) -``` - -**別名**: `rtrim` - -**引数** - -* `s` — トリム対象の文字列。[`String`](/sql-reference/data-types/string) -* `trim_characters` — 省略可能なトリム対象の文字列。指定しない場合、一般的な空白文字が削除されます。[`String`](/sql-reference/data-types/string) - -**戻り値** - -指定された文字を右端からトリムした文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT trimRight('ClickHouse','House'); -``` - -```response title=Response -┌─trimRight('C⋯', 'House')─┐ -│ Click │ -└──────────────────────────┘ -``` - - -## tryBase32Decode - -導入バージョン: v25.6 - -文字列を受け取り、[Base32](https://datatracker.ietf.org/doc/html/rfc4648#section-6) エンコード方式でデコードします。 - -**構文** - -```sql -tryBase32Decode(encoded) -``` - -**引数** - -* `encoded` — デコードする文字列型の列または定数。有効な Base32 でエンコードされた文字列でない場合、エラー時には空文字列を返します。[`String`](/sql-reference/data-types/string) - -**戻り値** - -引数をデコードした値を含む文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT tryBase32Decode('IVXGG33EMVSA===='); -``` - -```response title=Response -┌─tryBase32Decode('IVXGG33EMVSA====')─┐ -│ エンコード済み │ -└─────────────────────────────────────┘ -``` - - -## tryBase58Decode - -導入バージョン: v22.10 - -[`base58Decode`](#base58Decode) と同様ですが、エラーが発生した場合は空文字列を返します。 - -**構文** - -```sql -tryBase58Decode(encoded) -``` - -**引数** - -* `encoded` — 文字列型カラムまたは定数。文字列が有効な Base58 エンコードでない場合、エラーが発生したときは空文字列を返します。[`String`](/sql-reference/data-types/string) - -**戻り値** - -引数の値をデコードした結果を含む文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT tryBase58Decode('3dc8KtHrwM') AS res, tryBase58Decode('invalid') AS res_invalid; -``` - -```response title=Response -┌─res─────┬─res_invalid─┐ -│ エンコード済み │ │ -└─────────┴─────────────┘ -``` - - -## tryBase64Decode - -導入バージョン: v18.16 - -[`base64Decode`](#base64Decode) と同様ですが、エラー時には空文字列を返します。 - -**構文** - -```sql -tryBase64Decode(encoded) -``` - -**引数** - -* `encoded` — デコード対象の文字列カラムまたは定数。文字列が有効な Base64 エンコードでない場合、エラー時は空文字列を返します。[`String`](/sql-reference/data-types/string) - -**戻り値** - -引数をデコードした値を含む文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT tryBase64Decode('Y2xpY2tob3VzZQ==') -``` - -```response title=Response -┌─tryBase64Decode('Y2xpY2tob3VzZQ==')─┐ -│ clickhouse │ -└─────────────────────────────────────┘ -``` - - -## tryBase64URLDecode - -導入バージョン: v18.16 - -[`base64URLDecode`](#base64URLDecode) と同様ですが、エラーの場合は空文字列を返します。 - -**構文** - -```sql -tryBase64URLDecode(encoded) -``` - -**引数** - -* `encoded` — デコードする文字列カラムまたは定数。文字列が有効な Base64 エンコード文字列でない場合、エラー時には空文字列を返します。[`String`](/sql-reference/data-types/string) - -**戻り値** - -引数をデコードした結果を含む文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT tryBase64URLDecode('aHR0cHM6Ly9jbGlja2hvdXNlLmNvbQ') -``` - -```response title=Response -┌─tryBase64URLDecode('aHR0cHM6Ly9jbGlja2hvdXNlLmNvbQ')─┐ -│ https://clickhouse.com │ -└──────────────────────────────────────────────────────┘ -``` - - -## tryIdnaEncode - -導入バージョン: v24.1 - -[Internationalized Domain Names in Applications](https://en.wikipedia.org/wiki/Internationalized_domain_name#Internationalizing_Domain_Names_in_Applications)(IDNA)メカニズムに従い、ドメイン名の Unicode(UTF-8)表現(ToUnicode アルゴリズム)を返します。 -エラー発生時は、例外をスローする代わりに空文字列を返します。 - -**構文** - -```sql -tryIdnaEncode(s) -``` - -**引数** - -* `s` — 入力文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -入力値に対する IDNA メカニズムに従い、入力文字列の ASCII 表現を返します。入力が無効な場合は空文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT tryIdnaEncode('straße.münchen.de') -``` - -```response title=Response -┌─tryIdnaEncode('straße.münchen.de')──┐ -│ xn--strae-oqa.xn--mnchen-3ya.de │ -└─────────────────────────────────────┘ -``` - - -## tryPunycodeDecode - -導入バージョン: v24.1 - -`punycodeDecode` と同様ですが、有効な Punycode でエンコードされた文字列が指定されなかった場合は空文字列を返します。 - -**構文** - -```sql -tryPunycodeDecode(s) -``` - -**引数** - -* `s` — Punycode でエンコードされた文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -入力値のプレーンテキストを返します。入力が無効な場合は空文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT tryPunycodeDecode('Mnchen-3ya') -``` - -```response title=Response -┌─tryPunycodeDecode('Mnchen-3ya')─┐ -│ München │ -└─────────────────────────────────┘ -``` - - -## upper - -導入バージョン: v1.1 - -文字列内の ASCII ラテン文字を大文字に変換します。 - -**構文** - -```sql -upper(s) -``` - -**エイリアス**: `ucase` - -**引数** - -* `s` — 大文字に変換する文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -`s` を大文字に変換した文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT upper('clickhouse') -``` - -```response title=Response -┌─upper('clickhouse')─┐ -│ CLICKHOUSE │ -└─────────────────────┘ -``` - - -## upperUTF8 - -導入されたバージョン: v1.1 - -文字列が有効な UTF-8 でエンコードされたテキストであると仮定して、その文字列を大文字に変換します。 -この仮定に反する場合でも、例外はスローされず、結果は未定義です。 - -:::note -この関数は言語を判別しません。たとえばトルコ語では結果が厳密に正しくない場合があります(i/İ と i/I など)。 -あるコードポイントについて、大文字と小文字で UTF-8 のバイト列の長さが異なる場合(`ẞ` と `ß` など)、そのコードポイントに対する結果は正しくない可能性があります。 -::: - -**構文** - -```sql -upperUTF8(s) -``` - -**引数** - -* `s` — 文字列型。[`String`](/sql-reference/data-types/string) - -**戻り値** - -`String` データ型の値。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT upperUTF8('München') AS Upperutf8 -``` - -```response title=Response -┌─Upperutf8─┐ -│ MÜNCHEN │ -└───────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/string-replace-functions.md b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/string-replace-functions.md index 335e8e82d56..d78efd9cb62 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/string-replace-functions.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/string-replace-functions.md @@ -1,5 +1,5 @@ --- -description: '文字列置換関数のドキュメント' +description: '文字列置換関数のリファレンス' sidebar_label: '文字列置換' slug: /sql-reference/functions/string-replace-functions title: '文字列置換関数' @@ -7,520 +7,20 @@ doc_type: 'reference' keywords: ['文字列置換'] --- +# 文字列置換用の関数 - -# 文字列置換用関数 - -[一般的な文字列関数](string-functions.md)と[文字列検索用関数](string-search-functions.md)は別途説明されています。 +[一般的な文字列関数](string-functions.md)および[文字列検索用の関数](string-search-functions.md)については別途説明されています。 :::note -以下のドキュメントは `system.functions` システムテーブルから生成されています。 +以下のドキュメントは、`system.functions` システムテーブルから生成されたものです。 ::: {/* 以下のタグ内のコンテンツは、ドキュメントフレームワークのビルド時に - system.functions から自動生成されたドキュメントで置き換えられます。タグを変更したり削除したりしないでください。 - 詳細は https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md を参照してください。 + system.functions から生成されたドキュメントに置き換えられます。タグを変更または削除しないでください。 + 詳しくは https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md を参照してください。 */ } - {/*AUTOGENERATED_START*/ } -## format - -導入バージョン: v20.1 - -`pattern` 文字列を、引数として指定した値(文字列、整数など)でフォーマットします。Python のフォーマット機能と同様に動作します。 -パターン文字列には、中かっこ `{}` で囲まれた置換フィールドを含めることができます。 -中かっこ内に含まれない部分はリテラル文字列と見なされ、そのまま出力にコピーされます。 -リテラルの中かっこ文字は、二重の中かっこ `{{` および `}}` でエスケープできます。 -フィールド名には 0 から始まる数値、または空文字列を指定できます。空文字列の場合は、暗黙的に単調増加する番号が割り当てられます。 - -**構文** - -```sql -format(pattern, s0[, s1, ...]) -``` - -**引数** - -* `pattern` — プレースホルダーを含むフォーマット文字列。[`String`](/sql-reference/data-types/string) -* `s0[, s1, ...]` — pattern に埋め込む 1 つ以上の値。[`Any`](/sql-reference/data-types) - -**戻り値** - -フォーマット済みの文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**番号付きプレースホルダー** - -```sql title=Query -SELECT format('{1} {0} {1}', '世界', 'こんにちは') -``` - -```response title=Response -┌─format('{1} {0} {1}', 'World', 'Hello')─┐ -│ Hello World Hello │ -└─────────────────────────────────────────┘ -``` - -**暗黙の番号付け** - -```sql title=Query -SELECT format('{} {}', 'こんにちは', '世界') -``` - -```response title=Response -┌─format('{} {}', 'Hello', 'World')─┐ -│ Hello World │ -└───────────────────────────────────┘ -``` - - -## overlay - -導入バージョン: v24.9 - -文字列 `input` の一部を、インデックス `offset`(1 始まり)で指定される位置から、別の文字列 `replace` で置き換えます。 - -**構文** - -```sql -overlay(s, replace, offset[, length]) -``` - -**引数** - -* `s` — 入力文字列。[`String`](/sql-reference/data-types/string) -* `replace` — 置換に使用する文字列。[`const String`](/sql-reference/data-types/string) -* `offset` — 整数型 `Int`(1 始まり)。`offset` が負の場合は、文字列 `s` の末尾から数えます。[`Int`](/sql-reference/data-types/int-uint) -* `length` — 省略可能。整数型 `Int`。`length` は、入力文字列 `s` のうち置換対象となる部分文字列の長さを指定します。`length` が指定されていない場合、`s` から削除されるバイト数は `replace` の長さと同じになります。指定されている場合は `length` バイトが削除されます。[`Int`](/sql-reference/data-types/int-uint) - -**戻り値** - -置換後の文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**基本的な置換** - -```sql title=Query -SELECT overlay('私の父はメキシコ出身です。', '母', 4) AS res; -``` - -```response title=Response -┌─res──────────────────────┐ -│ 私の母はメキシコ出身です。│ -└──────────────────────────┘ -``` - -**長さ指定付き置換** - -```sql title=Query -SELECT overlay('私の父はメキシコ出身です。', '父', 4, 6) AS res; -``` - -```response title=Response -┌─res───────────────────┐ -│ 父はメキシコ出身です。│ -└───────────────────────┘ -``` - - -## overlayUTF8 - -導入バージョン: v24.9 - -文字列 `s` の一部を、1 始まりのインデックス `offset` の位置から、別の文字列 `replace` で置き換えます。 -文字列が有効な UTF-8 でエンコードされたテキストであることを前提とします。 -この前提が満たされない場合でも、例外はスローされず、結果は未定義です。 - -**構文** - -```sql -overlayUTF8(s, replace, offset[, length]) -``` - -**引数** - -* `s` — 入力文字列。[`String`](/sql-reference/data-types/string) -* `replace` — 置換後の文字列。[`const String`](/sql-reference/data-types/string) -* `offset` — 整数型 `Int`(1 始まりのインデックス)。`offset` が負の値の場合、入力文字列 `s` の末尾からのオフセットとして解釈されます。[`(U)Int*`](/sql-reference/data-types/int-uint) -* `length` — 省略可能。入力文字列 `s` の中で置換対象となる部分文字列の長さを指定します。`length` が指定されていない場合、`s` から削除される文字数は `replace` の長さと等しくなり、指定されている場合は `length` 文字が削除されます。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**戻り値** - -置換後の文字列を返します。[`String`](/sql-reference/data-types/string) - -**使用例** - -**UTF-8 の置換** - -```sql title=Query -SELECT overlayUTF8('私の父はオーストリア出身です。', 'トルコ', 20) AS res; -``` - -```response title=Response -┌─res───────────────────────────┐ -│ Mein Vater ist aus der Türkei.│ -└───────────────────────────────┘ -``` - - -## printf - -導入バージョン: v24.8 - -`printf` 関数は、C++ の printf 関数と同様に、引数として指定された値(文字列、整数、浮動小数点数など)を使って、与えられた文字列をフォーマットします。 -フォーマット文字列には、`%` 文字で始まる書式指定子を含めることができます。 -`%` とそれに続く書式指定子に含まれない部分はリテラルテキストとして扱われ、そのまま出力にコピーされます。 -リテラルの `%` 文字は `%%` でエスケープできます。 - -**構文** - -```sql -printf(format[, sub1, sub2, ...]) -``` - -**引数** - -* `format` — `%` 指定子を含むフォーマット文字列。[`String`](/sql-reference/data-types/string) -* `sub1, sub2, ...` — 省略可。フォーマット文字列内に埋め込む 0 個以上の値。[`Any`](/sql-reference/data-types) - -**戻り値** - -フォーマット済みの文字列を返します。[`String`](/sql-reference/data-types/string) - -**使用例** - -**C++ スタイルのフォーマット** - -```sql title=Query -SELECT printf('%%%s %s %d', 'Hello', 'World', 2024); -``` - -```response title=Response -┌─printf('%%%s %s %d', 'Hello', 'World', 2024)─┐ -│ %Hello World 2024 │ -└──────────────────────────────────────────────┘ -``` - - -## regexpQuoteMeta - -導入バージョン: v20.1 - -正規表現において特別な意味を持つ次の文字の前にバックスラッシュを追加します: `\0`, `\\`, `|`, `(`, `)`, `^`, `$`, `.`, `[`, `]`, `?`, `*`, `+`, `{`, `:`, `-`。 -この実装は `re2::RE2::QuoteMeta` とは細部で挙動が異なります。 -ゼロバイト文字を `\x00` ではなく `\0` としてエスケープし、必要な文字だけをエスケープします。 - -**構文** - -```sql -regexpQuoteMeta(s) -``` - -**引数** - -* `s` — 正規表現でエスケープする必要がある文字を含む入力文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -正規表現の特殊文字をエスケープした文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**正規表現の特殊文字をエスケープする** - -```sql title=Query -SELECT regexpQuoteMeta('Hello. [World]? (Yes)*') AS res -``` - -```response title=Response -┌─res───────────────────────────┐ -│ Hello\. \[World\]\? \(Yes\)\* │ -└───────────────────────────────┘ -``` - - -## replaceAll - -導入バージョン: v1.1 - -`haystack` 内にある部分文字列 `pattern` のすべての出現を、文字列 `replacement` で置換します。 - -**構文** - -```sql -replaceAll(haystack, pattern, replacement) -``` - -**別名**: `replace` - -**引数** - -* `haystack` — 検索対象の入力文字列。[`String`](/sql-reference/data-types/string) -* `pattern` — 検索して置換する部分文字列。[`const String`](/sql-reference/data-types/string) -* `replacement` — `pattern` を置き換える文字列。[`const String`](/sql-reference/data-types/string) - -**返される値** - -`pattern` のすべての出現箇所を置換した文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**すべての出現箇所を置換** - -```sql title=Query -SELECT replaceAll('Hello, Hello world', 'Hello', 'Hi') AS res; -``` - -```response title=Response -┌─res──────────┐ -│ Hi, Hi world │ -└──────────────┘ -``` - - -## replaceOne - -導入バージョン: v1.1 - -`haystack` 内で `pattern` が最初に出現する箇所を、文字列 `replacement` に置き換えます。 - -**構文** - -```sql -replaceOne(haystack, pattern, replacement) -``` - -**引数** - -* `haystack` — 検索対象となる入力文字列。[`String`](/sql-reference/data-types/string) -* `pattern` — 検索および置換の対象となる部分文字列。[`const String`](/sql-reference/data-types/string) -* `replacement` — `pattern` を置き換える文字列。[`const String`](/sql-reference/data-types/string) - -**返却値** - -`pattern` の最初の出現箇所を置換した文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**最初の出現箇所を置換** - -```sql title=Query -SELECT replaceOne('Hello, Hello world', 'Hello', 'Hi') AS res; -``` - -```response title=Response -┌─res─────────────┐ -│ やあ、Hello world │ -└─────────────────┘ -``` - - -## replaceRegexpAll - -導入: v1.1 - -`replaceRegexpOne` と同様ですが、パターンに一致するすべての出現箇所を置換します。 -例外として、正規表現が空の部分文字列にマッチした場合、その置換は 1 回しか行われません。 - -**構文** - -```sql -replaceRegexpAll(haystack, pattern, replacement) -``` - -**別名**: `REGEXP_REPLACE` - -**引数** - -* `haystack` — 検索対象の入力文字列。[`String`](/sql-reference/data-types/string) -* `pattern` — 検索する正規表現パターン。[`const String`](/sql-reference/data-types/string) -* `replacement` — パターンを置き換える文字列。後方参照などの置換パターンを含めることができる。[`const String`](/sql-reference/data-types/string) - -**戻り値** - -正規表現にマッチした部分がすべて置き換えられた文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**すべての文字を2回繰り返した文字で置き換える** - -```sql title=Query -SELECT replaceRegexpAll('Hello123', '.', '\\\\0\\\\0') AS res -``` - -```response title=Response -┌─res──────────────────┐ -│ HHeelllloo112233 │ -└──────────────────────┘ -``` - -**空文字列の置換例** - -```sql title=Query -SELECT replaceRegexpAll('Hello, World!', '^', 'here: ') AS res -``` - -```response title=Response -┌─res─────────────────┐ -│ here: こんにちは、世界! │ -└─────────────────────┘ -``` - - -## replaceRegexpOne - -導入バージョン: v1.1 - -`haystack` 内で、正規表現パターン `pattern`(re2 構文)にマッチする部分文字列の最初の出現箇所を、文字列 `replacement` で置換します。 -`replacement` には、`\0-\9` の置換指定を含めることができます。 -置換指定 `\1-\9` は第1〜第9のキャプチャグループ(サブマッチ)に対応し、置換指定 `\0` はマッチ全体に対応します。 -`pattern` または `replacement` の文字列内でリテラルな `\` 文字を使用するには、`\` を使ってエスケープしてください。 -また、文字列リテラルでは追加のエスケープが必要になる点にも注意してください。 - -**構文** - -```sql -replaceRegexpOne(haystack, pattern, replacement) -``` - -**引数** - -* `haystack` — 検索対象となる入力文字列。[`String`](/sql-reference/data-types/string) -* `pattern` — 検索する正規表現パターン。[`const String`](/sql-reference/data-types/string) -* `replacement` — パターンを置き換える文字列。後方参照などの置換式を含めることができる。[`const String`](/sql-reference/data-types/string) - -**返される値** - -最初にマッチした部分が置換された文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**ISO 日付をアメリカ式の日付形式に変換する** - -```sql title=Query -SELECT DISTINCT - EventDate, - replaceRegexpOne(toString(EventDate), '(\\d{4})-(\\d{2})-(\\d{2})', '\\2/\\3/\\1') AS res -FROM test.hits -LIMIT 7 -FORMAT TabSeparated -``` - -```response title=Response -2014-03-17 03/17/2014 -2014-03-18 03/18/2014 -2014-03-19 03/19/2014 -2014-03-20 03/20/2014 -2014-03-21 03/21/2014 -2014-03-22 03/22/2014 -2014-03-23 03/23/2014 -``` - -**文字列を10回コピーする** - -```sql title=Query -SELECT replaceRegexpOne('Hello, World!', '.*', '\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0') AS res -``` - -```response title=Response -┌─res────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ -│ こんにちは、世界!こんにちは、世界!こんにちは、世界!こんにちは、世界!こんにちは、世界!こんにちは、世界!こんにちは、世界!こんにちは、世界!こんにちは、世界!こんにちは、世界! │ -└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## translate - -導入バージョン: v22.7 - -文字列 `s` 内の文字を、`from` と `to` 文字列で定義された 1 対 1 の文字マッピングを使って置換します。 -`from` と `to` は定数の ASCII 文字列である必要があります。 -`from` と `to` の長さが同じ場合、`s` 内に現れる `from` の 1 文字目はすべて `to` の 1 文字目に、`from` の 2 文字目はすべて `to` の 2 文字目に、というように順に置換されます。 -`from` に含まれる文字数が `to` より多い場合、`from` の末尾側で `to` に対応する文字を持たないすべての文字は、`s` から削除されます。 -`s` 内の非 ASCII 文字は、この関数によって変更されません。 - -**構文** - -```sql -translate(s, from, to) -``` - -**引数** - -* `s` — 変換対象の入力文字列。[`String`](/sql-reference/data-types/string) -* `from` — 置換対象の文字を含む定数 ASCII 文字列。[`const String`](/sql-reference/data-types/string) -* `to` — 置換後の文字を含む定数 ASCII 文字列。[`const String`](/sql-reference/data-types/string) - -**戻り値** - -文字の変換が適用された文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**文字の対応付け** - -```sql title=Query -SELECT translate('Hello, World!', 'delor', 'DELOR') AS res -``` - -```response title=Response -┌─res───────────┐ -│ HELLO, WORLD! │ -└───────────────┘ -``` - -**長さの違い** - -```sql title=Query -SELECT translate('clickhouse', 'clickhouse', 'CLICK') AS res -``` - -```response title=Response -┌─res───┐ -│ クリック │ -└───────┘ -``` - - -## translateUTF8 - -導入バージョン: v22.7 - -[`translate`](#translate) と同様ですが、`s`、`from`、`to` の各引数が UTF-8 エンコードされた文字列であると仮定します。 - -**構文** - -```sql -translateUTF8(s, from, to) -``` - -**引数** - -* `s` — 変換対象の UTF-8 入力文字列。[`String`](/sql-reference/data-types/string) -* `from` — 置換対象の文字を含む定数 UTF-8 文字列。[`const String`](/sql-reference/data-types/string) -* `to` — 置換後の文字を含む定数 UTF-8 文字列。[`const String`](/sql-reference/data-types/string) - -**返される値** - -`String` 型の値を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**UTF-8 文字の変換** - -```sql title=Query -SELECT translateUTF8('Münchener Straße', 'üß', 'us') AS res; -``` - -```response title=Response -┌─res──────────────┐ -│ Munchener Strase │ -└──────────────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/string-search-functions.md b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/string-search-functions.md index e6956de4dd0..157025d128a 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/string-search-functions.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/string-search-functions.md @@ -1,2707 +1,34 @@ --- -description: '文字列検索用関数のドキュメント' -sidebar_label: '文字列の検索' +description: '文字列検索関数に関するドキュメント' +sidebar_label: '文字列検索' slug: /sql-reference/functions/string-search-functions -title: '文字列の検索関数' +title: '文字列検索関数' doc_type: 'reference' --- - - # 文字列検索用の関数 -このセクションのすべての関数は、デフォルトでは大文字・小文字を区別して検索します。大文字・小文字を区別しない検索は、通常は別の関数バリアントとして提供されています。 +このセクションのすべての関数は、デフォルトでは大文字・小文字を区別して検索します。大文字・小文字を区別しない検索は、通常は別の関数バリアントとして提供されます。 :::note -大文字・小文字を区別しない検索は、英語の小文字・大文字の規則に従います。例えば、英語における小文字 `i` の大文字は `I` ですが、トルコ語では `İ` になります。そのため、英語以外の言語では予期しない結果になる可能性があります。 +大文字・小文字を区別しない検索では、英語の小文字・大文字の規則に従います。たとえば、英語では小文字の `i` の大文字は `I` ですが、トルコ語では `İ` になります。そのため、英語以外の言語では期待と異なる結果になる場合があります。 ::: -このセクションの関数は、検索対象の文字列(このセクションでは `haystack` と呼びます)と検索文字列(このセクションでは `needle` と呼びます)が、単一バイト文字エンコーディングされたテキストであることを前提としています。この前提が満たされない場合でも、例外はスローされず、結果は未定義です。UTF-8 エンコードされた文字列に対する検索は、通常は別の関数バリアントとして提供されています。同様に、UTF-8 対応の関数バリアントを使用していても、入力文字列が UTF-8 エンコードされたテキストでない場合、例外はスローされず、結果は未定義です。自動的な Unicode 正規化は行われない点に注意してください。ただし、そのためには +このセクションの関数は、検索対象の文字列(このセクションでは `haystack` と呼ぶ)と検索文字列(`needle` と呼ぶ)が、1 バイトでエンコードされたテキストであることも前提としています。この前提が満たされない場合でも、例外はスローされず、結果は未定義です。UTF-8 エンコードされた文字列での検索は、通常は別の関数バリアントとして提供されます。同様に、UTF-8 用の関数バリアントを使用している場合に、入力文字列が UTF-8 エンコードされたテキストでなくても、例外はスローされず、結果は未定義です。自動的な Unicode 正規化は行われませんが、必要に応じて [normalizeUTF8*()](https://clickhouse.com../functions/string-functions/) 関数を使用できます。 -[一般的な文字列関数](string-functions.md)および[文字列置換用の関数](string-replace-functions.md)については別途説明しています。 +[一般的な文字列関数](string-functions.md)と[文字列置換用の関数](string-replace-functions.md)については別途説明します。 :::note 以下のドキュメントは、`system.functions` システムテーブルから生成されています。 ::: {/* - 以下のタグの内側の内容は、ドキュメントフレームワークのビルド時に - system.functions から自動生成されたドキュメントで置き換えられます。タグは変更や削除を行わないでください。 - 参照: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md + 以下のタグ内の内容は、ドキュメントフレームワークのビルド時に + system.functions から自動生成されたドキュメントに置き換えられます。タグを変更または削除しないでください。 + 詳細は https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md を参照してください。 */ } - {/*AUTOGENERATED_START*/ } -## countMatches - -導入バージョン: v21.1 - -文字列内で正規表現にマッチした回数を返します。 - -:::note バージョン依存の挙動 -この関数の挙動は ClickHouse のバージョンに依存します。 - -* v25.6 未満のバージョンでは、パターンが空文字列にもマッチしうる場合でも、最初の空マッチでカウントを停止します。 -* v25.6 以上のバージョンでは、空マッチが発生しても処理を継続します。従来の挙動は、設定 `count_matches_stop_at_empty_match = true` を使用して復元できます。 - ::: - -**構文** - -```sql -countMatches(haystack, pattern) -``` - -**引数** - -* `haystack` — 検索対象の文字列。[`String`](/sql-reference/data-types/string) -* `pattern` — 正規表現パターン。[`String`](/sql-reference/data-types/string) - -**返り値** - -見つかった一致の数を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**数字列のカウント** - -```sql title=Query -SELECT countMatches('hello 123 world 456 test', '[0-9]+') -``` - -```response title=Response -┌─countMatches('hello 123 world 456 test', '[0-9]+')─┐ -│ 2 │ -└─────────────────────────────────────────────────────┘ -``` - - -## countMatchesCaseInsensitive - -導入バージョン: v21.1 - -[`countMatches`](#countMatches) と同様ですが、大文字と小文字を区別せずにマッチングを行います。 - -**構文** - -```sql -countMatchesCaseInsensitive(haystack, pattern) -``` - -**引数** - -* `haystack` — 検索対象の文字列。[`String`](/sql-reference/data-types/string) -* `pattern` — 正規表現パターン。[`const String`](/sql-reference/data-types/string) - -**戻り値** - -マッチした件数を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**大文字・小文字を区別しないカウント** - -```sql title=Query -SELECT countMatchesCaseInsensitive('Hello HELLO world', 'hello') -``` - -```response title=Response -┌─countMatchesCaseInsensitive('Hello HELLO world', 'hello')─┐ -│ 2 │ -└───────────────────────────────────────────────────────────┘ -``` - - -## countSubstrings - -導入バージョン: v21.1 - -部分文字列 `needle` が文字列 `haystack` 内に出現する回数を返します。 - -**構文** - -```sql -countSubstrings(haystack, needle[, start_pos]) -``` - -**引数** - -* `haystack` — 検索を行う対象の文字列。[String](../../sql-reference/data-types/string.md) または [Enum](../../sql-reference/data-types/enum.md)。 - `needle` — 検索する部分文字列。[String](../../sql-reference/data-types/string.md)。 - `start_pos` — 検索を開始する `haystack` 内の位置 (1 始まり)。[UInt](../../sql-reference/data-types/int-uint.md)。省略可能。 - -**返される値** - -出現回数。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT countSubstrings('aaaa', 'aa'); -``` - -```response title=Response -┌─countSubstrings('aaaa', 'aa')─┐ -│ 2 │ -└───────────────────────────────┘ -``` - -**start_pos 引数あり** - -```sql title=Query -SELECT countSubstrings('abc___abc', 'abc', 4); -``` - -```response title=Response -┌─countSubstrings('abc___abc', 'abc', 4)─┐ -│ 1 │ -└────────────────────────────────────────┘ -``` - - -## countSubstringsCaseInsensitive - -導入バージョン: v21.1 - -[`countSubstrings`](#countSubstrings) と同様ですが、大文字と小文字を区別せずにカウントします。 - -**構文** - -```sql -countSubstringsCaseInsensitive(haystack, needle[, start_pos]) -``` - -**引数** - -* `haystack` — 検索を実行する文字列。[`String`](/sql-reference/data-types/string) または [`Enum`](/sql-reference/data-types/enum) -* `needle` — 検索する部分文字列。[`String`](/sql-reference/data-types/string) -* `start_pos` — 省略可能。検索を開始する `haystack` 内の位置(1始まり)。[`UInt*`](/sql-reference/data-types/int-uint) - -**戻り値** - -`haystack` 内に出現する `needle` の回数を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT countSubstringsCaseInsensitive('AAAA', 'aa'); -``` - -```response title=Response -┌─countSubstri⋯AAA', 'aa')─┐ -│ 2 │ -└──────────────────────────┘ -``` - -**start_pos 引数を指定した場合** - -```sql title=Query -SELECT countSubstringsCaseInsensitive('abc___ABC___abc', 'abc', 4); -``` - -```response title=Response -┌─countSubstri⋯, 'abc', 4)─┐ -│ 2 │ -└──────────────────────────┘ -``` - - -## countSubstringsCaseInsensitiveUTF8 - -導入バージョン: v21.1 - -[`countSubstrings`](#countSubstrings) と同様ですが、大文字小文字を区別せずにカウントし、haystack が UTF-8 文字列であることを前提とします。 - -**構文** - -```sql -countSubstringsCaseInsensitiveUTF8(haystack, needle[, start_pos]) -``` - -**引数** - -* `haystack` — 検索対象の UTF-8 文字列。[`String`](/sql-reference/data-types/string) または [`Enum`](/sql-reference/data-types/enum) -* `needle` — 検索する部分文字列。[`String`](/sql-reference/data-types/string) -* `start_pos` — 省略可能。検索を開始する `haystack` 内の位置(1 始まり)。[`UInt*`](/sql-reference/data-types/int-uint) - -**戻り値** - -`haystack` 内に出現する `needle` の回数を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT countSubstringsCaseInsensitiveUTF8('ложка, кошка, картошка', 'КА'); -``` - -```response title=Response -┌─countSubstri⋯шка', 'КА')─┐ -│ 4 │ -└──────────────────────────┘ -``` - -**start_pos 引数を指定した場合** - -```sql title=Query -SELECT countSubstringsCaseInsensitiveUTF8('ложка, кошка, картошка', 'КА', 13); -``` - -```response title=Response -┌─countSubstri⋯, 'КА', 13)─┐ -│ 2 │ -└──────────────────────────┘ -``` - - -## extract - -導入バージョン: v1.1 - -文字列内で、正規表現に最初にマッチした部分を抽出します。 -`haystack` が `pattern` にマッチしない場合、空文字列が返されます。 - -この関数は RE2 正規表現ライブラリを使用します。サポートされている構文については [re2](https://github.com/google/re2/wiki/Syntax) を参照してください。 - -正規表現にキャプチャグループ(サブパターン)が含まれている場合、この関数は入力文字列から、最初のキャプチャグループに対応する部分文字列を抽出します。 - -**構文** - -```sql -extract(haystack, pattern) -``` - -**引数** - -* `haystack` — 抽出対象の文字列。[`String`](/sql-reference/data-types/string) -* `pattern` — 正規表現。通常はキャプチャグループを含みます。[`const String`](/sql-reference/data-types/string) - -**戻り値** - -抽出された部分を文字列として返します。型は [`String`](/sql-reference/data-types/string) です。 - -**使用例** - -**メールアドレスからドメインを抽出する** - -```sql title=Query -SELECT extract('test@clickhouse.com', '.*@(.*)$') -``` - -```response title=Response -┌─extract('test@clickhouse.com', '.*@(.*)$')─┐ -│ clickhouse.com │ -└───────────────────────────────────────────┘ -``` - -**一致しない場合は空文字列を返します** - -```sql title=Query -SELECT extract('test@clickhouse.com', 'no_match') -``` - -```response title=Response -┌─extract('test@clickhouse.com', 'no_match')─┐ -│ │ -└────────────────────────────────────────────┘ -``` - - -## extractAll - -導入: v1.1 - -[`extract`](#extract) と同様ですが、文字列内で正規表現に一致したすべての結果を配列として返します。 -'haystack' が 'pattern' の正規表現に一致しない場合、空の配列が返されます。 - -正規表現にキャプチャグループ(サブパターン)が含まれている場合、この関数は最初のキャプチャグループに対して入力文字列を照合します。 - -**構文** - -```sql -extractAll(haystack, pattern) -``` - -**引数** - -* `haystack` — フラグメント(部分文字列)を抽出する対象の文字列。[`String`](/sql-reference/data-types/string) -* `pattern` — 任意でキャプチャグループを含む正規表現。[`const String`](/sql-reference/data-types/string) - -**戻り値** - -抽出されたフラグメントの配列を返します。[`Array(String)`](/sql-reference/data-types/array) - -**例** - -**すべての数値を抽出** - -```sql title=Query -SELECT extractAll('hello 123 world 456', '[0-9]+') -``` - -```response title=Response -┌─extractAll('hello 123 world 456', '[0-9]+')─┐ -│ ['123','456'] │ -└─────────────────────────────────────────────┘ -``` - -**キャプチャグループを使って抽出する** - -```sql title=Query -SELECT extractAll('test@example.com, user@domain.org', '([a-zA-Z0-9]+)@') -``` - -```response title=Response -┌─extractAll('test@example.com, user@domain.org', '([a-zA-Z0-9]+)@')─┐ -│ ['test','user'] │ -└────────────────────────────────────────────────────────────────────┘ -``` - - -## extractAllGroupsHorizontal - -導入バージョン: v20.5 - -指定された正規表現を使用して文字列中のすべてのグループに対してマッチングを行い、配列の配列を返します。各配列には、同じキャプチャグループからのすべてのキャプチャがグループ番号ごとにまとめて格納されます。 - -**構文** - -```sql -extractAllGroupsHorizontal(s, regexp) -``` - -**引数** - -* `s` — 抽出対象の入力文字列。[`String`](/sql-reference/data-types/string) または [`FixedString`](/sql-reference/data-types/fixedstring) -* `regexp` — 照合に使用する正規表現。[`const String`](/sql-reference/data-types/string) または [`const FixedString`](/sql-reference/data-types/fixedstring) - -**返り値** - -配列の配列を返します。各内側の配列には、すべての一致にわたって 1 つのキャプチャグループから得られたすべてのキャプチャが含まれます。最初の内側の配列にはグループ 1 からのすべてのキャプチャ、2 番目にはグループ 2 からのすべてのキャプチャ、というように続きます。一致が見つからない場合は空配列を返します。[`Array(Array(String))`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -WITH '< Server: nginx -< Date: Tue, 22 Jan 2019 00:26:14 GMT -< Content-Type: text/html; charset=UTF-8 -< Connection: keep-alive -' AS s -SELECT extractAllGroupsHorizontal(s, '< ([\\w\\-]+): ([^\\r\\n]+)'); -``` - -```response title=Response -[['Server','Date','Content-Type','Connection'],['nginx','Tue, 22 Jan 2019 00:26:14 GMT','text/html; charset=UTF-8','keep-alive']] -``` - - -## extractGroups - -導入: v20.5 - -正規表現にマッチする、非重複の部分文字列からすべてのグループを抽出します。 - -**構文** - -```sql -extractAllGroups(s, regexp) -``` - -**引数** - -* `s` — 抽出対象の入力文字列。[`String`](/sql-reference/data-types/string) または [`FixedString`](/sql-reference/data-types/fixedstring) -* `regexp` — 正規表現。定数。[`const String`](/sql-reference/data-types/string) または [`const FixedString`](/sql-reference/data-types/fixedstring) - -**返される値** - -関数が 1 つ以上の一致するグループを見つけた場合、グループ ID(`1` から `N`、ここで `N` は regexp 内のキャプチャグループ数)ごとにまとめられた Array(Array(String)) 列を返します。一致するグループがない場合は空配列を返します。[`Array(Array(String))`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -WITH '< Server: nginx -< Date: Tue, 22 Jan 2019 00:26:14 GMT -< Content-Type: text/html; charset=UTF-8 -< Connection: keep-alive -' AS s -SELECT extractAllGroups(s, '< ([\\w\\-]+): ([^\\r\\n]+)'); -``` - -```response title=Response -[['Server','nginx'],['Date','Tue, 22 Jan 2019 00:26:14 GMT'],['Content-Type','text/html; charset=UTF-8'],['Connection','keep-alive']] -``` - - -## hasAllTokens - -導入バージョン: v25.10 - -[`hasAnyTokens`](#hasAnyTokens) と同様ですが、`needle` 文字列または配列内のすべてのトークンが `input` 文字列にマッチする場合は 1 を返し、それ以外の場合は 0 を返します。`input` がカラムの場合、この条件を満たすすべての行を返します。 - -:::note -最適なパフォーマンスのため、カラム `input` には [text index](../../engines/table-engines/mergetree-family/invertedindexes) が定義されている必要があります。 -text index が定義されていない場合、この関数はカラム全体の総当たりスキャンを実行し、インデックス検索と比較して桁違いに遅くなります。 -::: - -検索を行う前に、この関数は次をトークン化します。 - -* `input` 引数(常に) -* `needle` 引数([String](../../sql-reference/data-types/string.md) として指定された場合)。この場合、text index に対して指定された tokenizer を使用します。 - カラムに text index が定義されていない場合は、代わりに `splitByNonAlpha` tokenizer が使用されます。 - `needle` 引数が [Array(String)](../../sql-reference/data-types/array.md) 型の場合、配列の各要素はトークンとして扱われ、追加のトークン化は行われません。 - -重複するトークンは無視されます。 -たとえば、needles = ['ClickHouse', 'ClickHouse'] は ['ClickHouse'] と同じように扱われます。 - -**構文** - -```sql -hasAllTokens(input, needles) -``` - -**エイリアス**: `hasAllToken` - -**引数** - -* `input` — 入力カラム。[`String`](/sql-reference/data-types/string) または [`FixedString`](/sql-reference/data-types/fixedstring) または [`Array(String)`](/sql-reference/data-types/array) または [`Array(FixedString)`](/sql-reference/data-types/array) -* `needles` — 検索するトークン。トークンは最大 64 個まで指定できます。[`String`](/sql-reference/data-types/string) または [`Array(String)`](/sql-reference/data-types/array) - -**返される値** - -すべてのトークンが一致した場合は 1 を返し、それ以外の場合は 0 を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**文字列カラムに対する使用例** - -```sql title=Query -CREATE TABLE table ( - id UInt32, - msg String, - INDEX idx(msg) TYPE text(tokenizer = splitByString(['()', '\\'])) -) -ENGINE = MergeTree -ORDER BY id; - -INSERT INTO table VALUES (1, '()a,\\bc()d'), (2, '()\\a()bc\\d'), (3, ',()a\\,bc,(),d,'); - -SELECT count() FROM table WHERE hasAllTokens(msg, 'a\\d()'); -``` - -```response title=Response -┌─count()─┐ -│ 1 │ -└─────────┘ -``` - -**配列内で、トークナイズせずにそのまま (AS-IS) 検索するニードルを指定します** - -```sql title=Query -SELECT count() FROM table WHERE hasAllTokens(msg, ['a', 'd']); -``` - -```response title=Response -┌─count()─┐ -│ 1 │ -└─────────┘ -``` - -**`tokens` 関数を使用してニードルを生成する** - -```sql title=Query -SELECT count() FROM table WHERE hasAllTokens(msg, tokens('a()d', 'splitByString', ['()', '\\'])); -``` - -```response title=Response -┌─count()─┐ -│ 1 │ -└─────────┘ -``` - -**Array 列および Map 列の使用例** - -```sql title=Query -CREATE TABLE log ( - id UInt32, - tags Array(String), - attributes Map(String, String), - INDEX idx_tags (tags) TYPE text(tokenizer = splitByNonAlpha), - INDEX idx_attributes_keys mapKeys(attributes) TYPE text(tokenizer = array), - INDEX idx_attributes_vals mapValues(attributes) TYPE text(tokenizer = array) -) -ENGINE = MergeTree -ORDER BY id; - -INSERT INTO log VALUES - (1, ['clickhouse', 'clickhouse cloud'], {'address': '192.0.0.1', 'log_level': 'INFO'}), - (2, ['chdb'], {'embedded': 'true', 'log_level': 'DEBUG'}); -``` - -```response title=Response -``` - -**配列列の例** - -```sql title=Query -SELECT count() FROM log WHERE hasAllTokens(tags, 'clickhouse'); -``` - -```response title=Response -┌─count()─┐ -│ 1 │ -└─────────┘ -``` - -**mapKeys の使用例** - -```sql title=Query -SELECT count() FROM log WHERE hasAllTokens(mapKeys(attributes), ['address', 'log_level']); -``` - - -```response title=Response -┌─count()─┐ -│ 1 │ -└─────────┘ -``` - -**mapValues の例** - -```sql title=Query -SELECT count() FROM log WHERE hasAllTokens(mapValues(attributes), ['192.0.0.1', 'DEBUG']); -``` - -```response title=Response -┌─count()─┐ -│ 0 │ -└─────────┘ -``` - - -## hasAnyTokens - -導入バージョン: v25.10 - -`needle` 文字列または配列内のトークンのうち少なくとも 1 つが `input` 文字列に一致する場合は 1 を返し、それ以外の場合は 0 を返します。`input` がカラムの場合、この条件を満たすすべての行を返します。 - -:::note -最適なパフォーマンスを得るためには、カラム `input` に [text index](../../engines/table-engines/mergetree-family/invertedindexes) が定義されている必要があります。 -text index が定義されていない場合、この関数はインデックス検索よりも桁違いに遅い総当たりのカラムスキャンを実行します。 -::: - -検索を行う前に、この関数は次の対象をトークン化します。 - -* `input` 引数(常に) -* `needle` 引数([String](../../sql-reference/data-types/string.md) として与えられた場合) - -これらは text index に指定された tokenizer を使用してトークン化されます。 -カラムに text index が定義されていない場合は、代わりに `splitByNonAlpha` tokenizer が使用されます。 -`needle` 引数が [Array(String)](../../sql-reference/data-types/array.md) 型である場合、配列要素それぞれがトークンとして扱われ、追加のトークン化は行われません。 - -重複するトークンは無視されます。 -例えば、['ClickHouse', 'ClickHouse'] は ['ClickHouse'] と同じものとして扱われます。 - -**構文** - -```sql -hasAnyTokens(input, needles) -``` - -**エイリアス**: `hasAnyToken` - -**引数** - -* `input` — 入力列。[`String`](/sql-reference/data-types/string) または [`FixedString`](/sql-reference/data-types/fixedstring) または [`Array(String)`](/sql-reference/data-types/array) または [`Array(FixedString)`](/sql-reference/data-types/array) -* `needles` — 検索するトークン。最大 64 個のトークンをサポートします。[`String`](/sql-reference/data-types/string) または [`Array(String)`](/sql-reference/data-types/array) - -**戻り値** - -少なくとも 1 件一致があれば `1` を返し、それ以外の場合は `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**文字列列での使用例** - -```sql title=Query -CREATE TABLE table ( - id UInt32, - msg String, - INDEX idx(msg) TYPE text(tokenizer = splitByString(['()', '\\'])) -) -ENGINE = MergeTree -ORDER BY id; - -INSERT INTO table VALUES (1, '()a,\\bc()d'), (2, '()\\a()bc\\d'), (3, ',()a\\,bc,(),d,'); - -SELECT count() FROM table WHERE hasAnyTokens(msg, 'a\\d()'); -``` - -```response title=Response -┌─count()─┐ -│ 3 │ -└─────────┘ -``` - -**トークン化せず AS-IS で検索する文字列を配列として指定します** - -```sql title=Query -SELECT count() FROM table WHERE hasAnyTokens(msg, ['a', 'd']); -``` - -```response title=Response -┌─count()─┐ -│ 3 │ -└─────────┘ -``` - -**`tokens` 関数を使って needle を生成する** - -```sql title=Query -SELECT count() FROM table WHERE hasAnyTokens(msg, tokens('a()d', 'splitByString', ['()', '\\'])); -``` - -```response title=Response -┌─count()─┐ -│ 3 │ -└─────────┘ -``` - -**Array 型および Map 型列の使用例** - -```sql title=Query -CREATE TABLE log ( - id UInt32, - tags Array(String), - attributes Map(String, String), - INDEX idx_tags (tags) TYPE text(tokenizer = splitByNonAlpha), - INDEX idx_attributes_keys mapKeys(attributes) TYPE text(tokenizer = array), - INDEX idx_attributes_vals mapValues(attributes) TYPE text(tokenizer = array) -) -ENGINE = MergeTree -ORDER BY id; - -INSERT INTO log VALUES - (1, ['clickhouse', 'clickhouse cloud'], {'address': '192.0.0.1', 'log_level': 'INFO'}), - (2, ['chdb'], {'embedded': 'true', 'log_level': 'DEBUG'}); -``` - -```response title=Response -``` - -**配列カラムの例** - -```sql title=Query -SELECT count() FROM log WHERE hasAnyTokens(tags, 'clickhouse'); -``` - -```response title=Response -┌─count()─┐ -│ 1 │ -└─────────┘ -``` - -**mapKeys の例** - -```sql title=Query -SELECT count() FROM log WHERE hasAnyTokens(mapKeys(attributes), ['address', 'log_level']); -``` - - -```response title=Response -┌─count()─┐ -│ 2 │ -└─────────┘ -``` - -**mapValues の例** - -```sql title=Query -SELECT count() FROM log WHERE hasAnyTokens(mapValues(attributes), ['192.0.0.1', 'DEBUG']); -``` - -```response title=Response -┌─count()─┐ -│ 2 │ -└─────────┘ -``` - - -## hasSubsequence - -導入バージョン: v23.7 - -文字列 `haystack` の中に、文字列 `needle` が部分列として含まれているかどうかを判定します。 -文字列の部分列とは、残りの文字の順序を変えずに、ある文字列からいくつか、または 1 つも文字を削除せずに得られる文字列のことです。 - -**構文** - -```sql -hasSubsequence(haystack, needle) -``` - -**引数** - -* `haystack` — 部分列を検索する対象となる文字列。[`String`](/sql-reference/data-types/string) -* `needle` — 検索する部分列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -`needle` が `haystack` の部分列であれば `1`、それ以外の場合は `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**使用例** - -**基本的な部分列チェック** - -```sql title=Query -SELECT hasSubsequence('Hello World', 'HlWrd') -``` - -```response title=Response -┌─hasSubsequence('Hello World', 'HlWrd')─┐ -│ 1 │ -└────────────────────────────────────────┘ -``` - -**該当する部分列は見つかりません** - -```sql title=Query -SELECT hasSubsequence('Hello World', 'xyz') -``` - -```response title=Response -┌─hasSubsequence('Hello World', 'xyz')─┐ -│ 0 │ -└──────────────────────────────────────┘ -``` - - -## hasSubsequenceCaseInsensitive - -導入バージョン: v23.7 - -[`hasSubsequence`](#hasSubsequence) と同様ですが、大文字と小文字を区別せずに検索します。 - -**構文** - -```sql -hasSubsequenceCaseInsensitive(haystack, needle) -``` - -**引数** - -* `haystack` — 検索が実行される文字列。[`String`](/sql-reference/data-types/string) -* `needle` — 検索対象となる部分列。[`String`](/sql-reference/data-types/string) - -**返される値** - -`needle` が `haystack` の部分列であれば 1、そうでなければ 0 を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT hasSubsequenceCaseInsensitive('garbage', 'ARG'); -``` - -```response title=Response -┌─hasSubsequenceCaseInsensitive('garbage', 'ARG')─┐ -│ 1 │ -└─────────────────────────────────────────────────┘ -``` - - -## hasSubsequenceCaseInsensitiveUTF8 - -導入バージョン: v23.7 - -[`hasSubsequenceUTF8`](#hasSubsequenceUTF8) と同様ですが、大文字と小文字を区別せずに検索します。 - -**構文** - -```sql -hasSubsequenceCaseInsensitiveUTF8(haystack, needle) -``` - -**引数** - -* `haystack` — 検索を行う UTF-8 エンコードされた文字列。[`String`](/sql-reference/data-types/string) -* `needle` — 検索対象となる UTF-8 エンコードされた部分文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -`needle` が `haystack` の部分文字列であれば 1、そうでなければ 0 を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT hasSubsequenceCaseInsensitiveUTF8('ClickHouse - столбцовая система управления базами данных', 'СИСТЕМА'); -``` - -```response title=Response -┌─hasSubsequen⋯ 'СИСТЕМА')─┐ -│ 1 │ -└──────────────────────────┘ -``` - - -## hasSubsequenceUTF8 - -導入バージョン: v23.7 - -[`hasSubsequence`](/sql-reference/functions/string-search-functions#hasSubsequence) と同様ですが、`haystack` と `needle` が UTF-8 でエンコードされた文字列であると仮定します。 - -**構文** - -```sql -hasSubsequenceUTF8(haystack, needle) -``` - -**引数** - -* `haystack` — 検索対象の文字列。[`String`](/sql-reference/data-types/string) -* `needle` — 検索する部分列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -`needle` が `haystack` の部分列であれば `1` を返し、それ以外は `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT hasSubsequenceUTF8('картошка', 'кошка'); -``` - -```response title=Response -┌─hasSubsequen⋯', 'кошка')─┐ -│ 1 │ -└──────────────────────────┘ -``` - -**一致しない部分列** - -```sql title=Query -SELECT hasSubsequenceUTF8('картошка', 'апельсин'); -``` - -```response title=Response -┌─hasSubsequen⋯'апельсин')─┐ -│ 0 │ -└──────────────────────────┘ -``` - - -## hasToken - -導入バージョン: v20.1 - -指定されたトークンが対象文字列内に存在するかを判定します。 - -トークンは、連続する文字 `[0-9A-Za-z_]`(数字、ASCII 英字、およびアンダースコア)からなる、可能な限り最長の部分列として定義されます。 - -**構文** - -```sql -hasToken(haystack, token) -``` - -**引数** - -* `haystack` — 検索対象の文字列。[`String`](/sql-reference/data-types/string) -* `token` — 検索するトークン。[`const String`](/sql-reference/data-types/string) - -**戻り値** - -トークンが見つかった場合は `1`、見つからない場合は `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**トークン検索** - -```sql title=Query -SELECT hasToken('clickhouse test', 'test') -``` - -```response title=Response -┌─hasToken('clickhouse test', 'test')─┐ -│ 1 │ -└─────────────────────────────────────┘ -``` - - -## hasTokenCaseInsensitive - -導入バージョン: v - -`tokenbf_v1` インデックスを使用して、`haystack` 内で `needle` を大文字・小文字を区別せずに検索します。 - -**構文** - -```sql -``` - -**引数** - -* なし。 - -**戻り値** - -**例** - - -## hasTokenCaseInsensitiveOrNull - -導入バージョン: v - -`tokenbf_v1` インデックスを使用して、`haystack` 内の `needle` を大文字小文字を区別せずに検索します。`needle` が不正な形式の場合は `null` を返します。 - -**構文** - -```sql -``` - -**引数** - -* なし。 - -**戻り値** - -**例** - - -## hasTokenOrNull - -導入バージョン: v20.1 - -[`hasToken`](#hasToken) と同様ですが、トークンが不正な形式の場合は null を返します。 - -**構文** - -```sql -hasTokenOrNull(haystack, token) -``` - -**引数** - -* `haystack` — 検索対象となる文字列。定数である必要があります。[`String`](/sql-reference/data-types/string) -* `token` — 検索するトークン。定数文字列です。[`const String`](/sql-reference/data-types/string) - -**戻り値** - -トークンが見つかった場合は `1`、見つからない場合は `0` を返し、トークンが不正な形式の場合は `null` を返します。[`Nullable(UInt8)`](/sql-reference/data-types/nullable) - -**例** - -**使用例** - -```sql title=Query -SELECT hasTokenOrNull('apple banana cherry', 'ban ana'); -``` - -```response title=Response -┌─hasTokenOrNu⋯ 'ban ana')─┐ -│ ᴺᵁᴸᴸ │ -└──────────────────────────┘ -``` - - -## ilike - -導入バージョン: v20.6 - -[`like`](#like) と同様ですが、大文字と小文字を区別せずに検索します。 - -**構文** - -```sql -ilike(haystack, pattern) --- haystack ILIKE pattern -``` - -**引数** - -* `haystack` — 検索対象の文字列。[`String`](/sql-reference/data-types/string) または [`FixedString`](/sql-reference/data-types/fixedstring) -* `pattern` — 照合に使用する LIKE パターン。[`String`](/sql-reference/data-types/string) - -**返される値** - -文字列が LIKE パターンにマッチした場合は `1`(大文字小文字は区別しない)、それ以外の場合は `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT ilike('ClickHouse', '%house%'); -``` - -```response title=Response -┌─ilike('ClickHouse', '%house%')─┐ -│ 1 │ -└────────────────────────────────┘ -``` - - -## like - -導入バージョン: v1.1 - -文字列 `haystack` が `LIKE` 式 `pattern` にマッチするかどうかを返します。 - -`LIKE` 式には通常の文字と、次のメタ文字を含めることができます。 - -* `%` は任意の長さの任意の文字列(長さ 0 も含む)を表します。 -* `_` は任意の 1 文字を表します。 -* `\` はリテラルの `%`、`_`、`\` をエスケープするために使用します。 - -マッチングは UTF-8 に基づいて行われます。たとえば `_` は、UTF-8 では 2 バイトで表現される Unicode コードポイント `¥` にマッチします。 - -`haystack` または `LIKE` 式が不正な UTF-8 の場合、その動作は未定義です。 - -Unicode の正規化は自動では行われません。必要に応じて `normalizeUTF8*` 関数を使用してください。 - -リテラルの `%`、`_`、`\`(`LIKE` のメタ文字)にマッチさせるには、先頭にバックスラッシュを付けて `\%`、`\_`、`\\` のように記述します。 -バックスラッシュが `%`、`_`、`\` 以外の文字の前に付いている場合、その特別な意味は失われ(すなわちリテラルとして解釈され)ます。 - -:::note -ClickHouse では、文字列内のバックスラッシュも[クォートする必要がある](../syntax.md#string)ため、実際には `\\%`、`\\_`、`\\\\` と書く必要があります。 -::: - -`%needle%` という形式の `LIKE` 式に対しては、この関数は `position` 関数と同等の速度です。 -それ以外の `LIKE` 式は内部的に正規表現に変換され、関数 `match` と同程度の性能で実行されます。 - -**構文** - -```sql -like(haystack, pattern) --- haystack LIKE pattern -``` - -**引数** - -* `haystack` — 検索対象の文字列。[`String`](/sql-reference/data-types/string) または [`FixedString`](/sql-reference/data-types/fixedstring) -* `pattern` — 照合に使用する `LIKE` パターン。`%`(任意の長さの文字列に一致)、`_`(任意の1文字に一致)、およびエスケープ用の `\` を含めることができます。[`String`](/sql-reference/data-types/string) - -**戻り値** - -文字列が `LIKE` パターンに一致する場合は `1` を返し、それ以外の場合は `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT like('ClickHouse', '%House'); -``` - -```response title=Response -┌─like('ClickHouse', '%House')─┐ -│ 1 │ -└──────────────────────────────┘ -``` - -**1文字ワイルドカード** - -```sql title=Query -SELECT like('ClickHouse', 'Click_ouse'); -``` - -```response title=Response -┌─like('ClickH⋯lick_ouse')─┐ -│ 1 │ -└──────────────────────────┘ -``` - -**マッチしないパターン** - -```sql title=Query -SELECT like('ClickHouse', '%SQL%'); -``` - -```response title=Response -┌─like('ClickHouse', '%SQL%')─┐ -│ 0 │ -└─────────────────────────────┘ -``` - - -## locate - -導入バージョン: v18.16 - -[`position`](#position) と同様ですが、引数 `haystack` と `needle` の順序が逆になっています。 - -:::note バージョンによる動作の違い -この関数の動作は ClickHouse のバージョンに依存します: - -* v24.3 未満のバージョンでは、`locate` は関数 `position` のエイリアスであり、引数 `(haystack, needle[, start_pos])` を受け取っていました。 -* v24.3 以上のバージョンでは、`locate` は個別の関数(MySQL との互換性向上のため)となり、引数 `(needle, haystack[, start_pos])` を受け取ります。\ - 以前の動作は、設定 `function_locate_has_mysql_compatible_argument_order = false` を使用することで復元できます。 - ::: - -**構文** - -```sql -locate(needle, haystack[, start_pos]) -``` - -**引数** - -* `needle` — 検索する部分文字列。[`String`](/sql-reference/data-types/string) -* `haystack` — 検索を実行する文字列。[`String`](/sql-reference/data-types/string) または [`Enum`](/sql-reference/data-types/enum) -* `start_pos` — 省略可能。検索を開始する `haystack` 内の位置(1 始まり)。[`UInt`](/sql-reference/data-types/int-uint) - -**戻り値** - -部分文字列が見つかった場合は、先頭位置(バイト単位、1 起算)を返し、見つからなかった場合は `0` を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**基本的な使用方法** - -```sql title=Query -SELECT locate('ca', 'abcabc') -``` - -```response title=Response -┌─locate('ca', 'abcabc')─┐ -│ 3 │ -└────────────────────────┘ -``` - - -## match - -導入バージョン: v1.1 - -指定された文字列が、指定された正規表現パターンにマッチするかを確認します。 - -この関数は RE2 正規表現ライブラリを使用します。サポートされている構文については [re2](https://github.com/google/re2/wiki/Syntax) を参照してください。 - -マッチングは UTF-8 を前提として動作します。例えば、`¥` は内部的には 2 バイトで表現されますが、マッチング時には 1 つのコードポイントとして扱われます。 -正規表現には NULL バイトを含めてはいけません。 -`haystack` またはパターンが無効な UTF-8 の場合、その動作は未定義です。 - -re2 のデフォルト動作と異なり、`.` は改行にもマッチします。これを無効にするには、パターンの先頭に `(?-s)` を付けてください。 - -パターンは両端で自動的にアンカーされます(パターンが '^' で始まり '$' で終わるかのように扱われます)。 - -部分文字列のみを検索したい場合は、代わりに関数 [`like`](#like) または [`position`](#position) を使用できます。これらはこの関数よりもはるかに高速に動作します。 - -演算子の別構文: `haystack REGEXP pattern`。 - -**構文** - -```sql -match(haystack, pattern) -``` - -**別名**: `REGEXP_MATCHES` - -**引数** - -* `haystack` — パターンを検索する文字列。[`String`](/sql-reference/data-types/string) -* `pattern` — 正規表現パターン。[`const String`](/sql-reference/data-types/string) - -**戻り値** - -パターンが一致した場合は `1`、それ以外の場合は `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**使用例** - -**基本的なパターンマッチング** - -```sql title=Query -SELECT match('Hello World', 'Hello.*') -``` - -```response title=Response -┌─match('Hello World', 'Hello.*')─┐ -│ 1 │ -└─────────────────────────────────┘ -``` - -**パターンが一致しません** - -```sql title=Query -SELECT match('Hello World', 'goodbye.*') -``` - -```response title=Response -┌─match('Hello World', 'goodbye.*')─┐ -│ 0 │ -└───────────────────────────────────┘ -``` - - -## multiFuzzyMatchAllIndices - -導入バージョン: v20.1 - -[`multiFuzzyMatchAny`](#multiFuzzyMatchAny) と似ていますが、一定の[編集距離](https://en.wikipedia.org/wiki/Edit_distance)以内で haystack に一致する、すべてのインデックスを任意の順序で要素とする配列を返します。 - -**構文** - -```sql -multiFuzzyMatchAllIndices(haystack, distance, [pattern1, pattern2, ..., patternN]) -``` - -**引数** - -* `haystack` — 検索を実行する対象の文字列。[`String`](/sql-reference/data-types/string) -* `distance` — ファジーマッチにおける最大編集距離。[`UInt8`](/sql-reference/data-types/int-uint) -* `pattern` — 照合対象となるパターンの配列。[`Array(String)`](/sql-reference/data-types/array) - -**戻り値** - -指定した編集距離以内で `haystack` にマッチする、`pattern` 配列内のすべてのインデックス(1 から開始)を任意の順序で含む配列を返します。一致が見つからない場合は空配列を返します。[`Array(UInt64)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT multiFuzzyMatchAllIndices('ClickHouse', 2, ['ClickHouse', 'ClckHouse', 'ClickHose', 'House']); -``` - -```response title=Response -┌─multiFuzzyMa⋯, 'House'])─┐ -│ [3,1,4,2] │ -└──────────────────────────┘ -``` - - -## multiFuzzyMatchAny - -導入バージョン: v20.1 - -[`multiMatchAny`](#multiMatchAny) と同様ですが、検索対象文字列に対して、いずれかのパターンが一定の[編集距離](https://en.wikipedia.org/wiki/Edit_distance)以内でマッチした場合に 1 を返します。 -この関数は [hyperscan](https://intel.github.io/hyperscan/dev-reference/compilation.html#approximate-matching) ライブラリの実験的機能に依存しており、一部の特殊なケースでは低速になる可能性があります。 -パフォーマンスは編集距離の値と使用されるパターンに依存しますが、常に非ファジーなバリアントよりもコストが高くなります。 - -:::note -`multiFuzzyMatch*()` 関数ファミリーは、hyperscan の制約により UTF-8 の正規表現をサポートしません(バイト列として扱います)。 -::: - -**構文** - -```sql -multiFuzzyMatchAny(haystack, distance, [pattern1, pattern2, ..., patternN]) -``` - -**引数** - -* `haystack` — 検索対象の文字列。[`String`](/sql-reference/data-types/string) -* `distance` — あいまい一致における最大編集距離。[`UInt8`](/sql-reference/data-types/int-uint) -* `pattern` — オプション。照合対象となるパターンの配列。[`Array(String)`](/sql-reference/data-types/array) - -**返される値** - -指定された編集距離以内で、いずれかのパターンが `haystack` にマッチした場合は `1` を、それ以外の場合は `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT multiFuzzyMatchAny('ClickHouse', 2, ['ClickHouse', 'ClckHouse', 'ClickHose']); -``` - -```response title=Response -┌─multiFuzzyMa⋯lickHose'])─┐ -│ 1 │ -└──────────────────────────┘ -``` - - -## multiFuzzyMatchAnyIndex - -導入バージョン: v20.1 - -[`multiFuzzyMatchAny`](#multiFuzzyMatchAny) と同様ですが、一定の[編集距離](https://en.wikipedia.org/wiki/Edit_distance)以内で検索対象にマッチするインデックスのいずれかを返します。 - -**構文** - -```sql -multiFuzzyMatchAnyIndex(haystack, distance, [pattern1, pattern2, ..., patternn]) -``` - -**引数** - -* `haystack` — 検索対象の文字列。[`String`](/sql-reference/data-types/string) -* `distance` — あいまい一致における最大編集距離。[`UInt8`](/sql-reference/data-types/int-uint) -* `pattern` — 照合対象となるパターンの配列。[`Array(String)`](/sql-reference/data-types/array) - -**返り値** - -指定した編集距離以内で `haystack` に一致するパターンのいずれかについて、そのインデックス(1 から始まる)を返し、一致しない場合は `0` を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT multiFuzzyMatchAnyIndex('ClickHouse', 2, ['ClckHouse', 'ClickHose', 'ClickHouse']); -``` - -```response title=Response -┌─multiFuzzyMa⋯ickHouse'])─┐ -│ 2 │ -└──────────────────────────┘ -``` - - -## multiMatchAllIndices - -導入バージョン: v20.1 - -[`multiMatchAny`](#multiMatchAny) と同様ですが、順不同で haystack にマッチするすべてのインデックスを配列で返します。 - -**構文** - -```sql -multiMatchAllIndices(haystack, [pattern1, pattern2, ..., patternn]) -``` - -**引数** - -* `haystack` — 検索対象の文字列。[`String`](/sql-reference/data-types/string) -* `pattern` — マッチに使用する正規表現。[`String`](/sql-reference/data-types/string) - -**返される値** - -`haystack` にマッチしたすべてのインデックス(1 から始まる)の配列。順不同。一致が見つからない場合は空配列を返す。[`Array(UInt64)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT multiMatchAllIndices('ClickHouse', ['[0-9]', 'House', 'Click', 'ouse']); -``` - -```response title=Response -┌─multiMatchAl⋯', 'ouse'])─┐ -│ [3, 2, 4] │ -└──────────────────────────┘ -``` - - -## multiMatchAny - -導入バージョン: v20.1 - -複数の正規表現パターンのうち少なくとも1つが対象文字列にマッチするかを判定します。 - -文字列内で複数の部分文字列を検索したいだけであれば、代わりに関数 [`multiSearchAny`](#multiSearchAny) を使用できます。本関数よりもはるかに高速に動作します。 - -**構文** - -```sql -multiMatchAny(haystack, pattern1[, pattern2, ...]) -``` - -**引数** - -* `haystack` — パターンを検索する対象の文字列。[`String`](/sql-reference/data-types/string) -* `pattern1[, pattern2, ...]` — 1 つ以上の正規表現パターンからなる配列。[`Array(String)`](/sql-reference/data-types/array) - -**戻り値** - -いずれかのパターンにマッチした場合は `1`、それ以外の場合は `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**複数パターンでのマッチング** - -```sql title=Query -SELECT multiMatchAny('Hello World', ['Hello.*', 'foo.*']) -``` - -```response title=Response -┌─multiMatchAny('Hello World', ['Hello.*', 'foo.*'])─┐ -│ 1 │ -└────────────────────────────────────────────────────┘ -``` - -**一致するパターンがありません** - -```sql title=Query -SELECT multiMatchAny('Hello World', ['goodbye.*', 'foo.*']) -``` - -```response title=Response -┌─multiMatchAny('Hello World', ['goodbye.*', 'foo.*'])─┐ -│ 0 │ -└──────────────────────────────────────────────────────┘ -``` - - -## multiMatchAnyIndex - -導入バージョン: v20.1 - -[`multiMatchAny`](#multiMatchAny) と同様ですが、検索対象(haystack)内でマッチした位置のいずれかのインデックスを返します。 - -**構文** - -```sql -multiMatchAnyIndex(haystack, [pattern1, pattern2, ..., patternn]) -``` - -**引数** - -* `haystack` — 検索を行う対象の文字列。[`String`](/sql-reference/data-types/string) -* `pattern` — マッチさせる正規表現パターン。[`Array(String)`](/sql-reference/data-types/array) - -**戻り値** - -最初にマッチしたパターンのインデックス(1 から始まる)を返し、マッチが見つからない場合は 0 を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT multiMatchAnyIndex('ClickHouse', ['[0-9]', 'House', 'Click']); -``` - -```response title=Response -┌─multiMatchAn⋯, 'Click'])─┐ -│ 3 │ -└──────────────────────────┘ -``` - - -## multiSearchAllPositions - -導入バージョン: v20.1 - -[`position`](#position) と似ていますが、`haystack` 文字列内の複数の `needle` 部分文字列に対する位置(バイト単位、1 起算)の配列を返します。 - -すべての `multiSearch*()` 関数は、最大 2^8 個の `needle` までしかサポートしません。 - -**構文** - -```sql -multiSearchAllPositions(haystack, needle1[, needle2, ...]) -``` - -**引数** - -* `haystack` — 検索を実行する文字列。[`String`](/sql-reference/data-types/string) -* `needle1[, needle2, ...]` — 検索対象となる 1 個以上の部分文字列からなる配列。[`Array(String)`](/sql-reference/data-types/array) - -**返される値** - -各部分文字列について、見つかった場合は 1 から数えたバイト単位での開始位置、見つからなかった場合は `0` を要素とする配列を返します。[`Array(UInt64)`](/sql-reference/data-types/array) - -**例** - -**複数 needle の検索** - -```sql title=Query -SELECT multiSearchAllPositions('Hello, World!', ['hello', '!', 'world']) -``` - -```response title=Response -┌─multiSearchAllPositions('Hello, World!', ['hello', '!', 'world'])─┐ -│ [0,13,0] │ -└───────────────────────────────────────────────────────────────────┘ -``` - - -## multiSearchAllPositionsCaseInsensitive - -導入バージョン: v20.1 - -[`multiSearchAllPositions`](#multiSearchAllPositions) と同様ですが、大文字小文字を区別しません。 - -**構文** - -```sql -multiSearchAllPositionsCaseInsensitive(haystack, needle1[, needle2, ...]) -``` - -**引数** - -* `haystack` — 検索対象の文字列。[`String`](/sql-reference/data-types/string) -* `needle1[, needle2, ...]` — 検索する 1 つ以上の部分文字列からなる配列。[`Array(String)`](/sql-reference/data-types/array) - -**返り値** - -見つかった各部分文字列について、1 から数えたバイト単位の開始位置を要素とする配列を返します。部分文字列が見つからなかった場合、その要素として `0` を返します。[`Array(UInt64)`](/sql-reference/data-types/array) - -**例** - -**大文字小文字を区別しない複数文字列検索** - -```sql title=Query -SELECT multiSearchAllPositionsCaseInsensitive('ClickHouse',['c','h']) -``` - -```response title=Response -┌─multiSearchA⋯['c', 'h'])─┐ -│ [1,6] │ -└──────────────────────────┘ -``` - - -## multiSearchAllPositionsCaseInsensitiveUTF8 - -導入バージョン: v20.1 - -[`multiSearchAllPositionsUTF8`](#multiSearchAllPositionsUTF8) と同様ですが、大文字と小文字を区別しません。 - -**構文** - -```sql -multiSearchAllPositionsCaseInsensitiveUTF8(haystack, [needle1, needle2, ..., needleN]) -``` - -**引数** - -* `haystack` — 検索を実行する UTF-8 でエンコードされた文字列。[`String`](/sql-reference/data-types/string) -* `needle` — 検索対象となる UTF-8 でエンコードされた部分文字列の配列。[`Array(String)`](/sql-reference/data-types/array) - -**返される値** - -見つかった部分文字列それぞれについて、バイト単位(1 からカウント)での開始位置を要素とする配列。部分文字列が見つからなかった場合は 0 を返します。[`Array`](/sql-reference/data-types/array) - -**例** - -**大文字小文字を区別しない UTF-8 検索** - -```sql title=Query -SELECT multiSearchAllPositionsCaseInsensitiveUTF8('Здравствуй, мир!', ['здравствуй', 'МИР']); -``` - -```response title=Response -┌─multiSearchA⋯й', 'МИР'])─┐ -│ [1, 13] │ -└──────────────────────────┘ -``` - - -## multiSearchAllPositionsUTF8 - -導入バージョン: v20.1 - -[`multiSearchAllPositions`](#multiSearchAllPositions) と同様ですが、`haystack` および `needle` の部分文字列が UTF-8 でエンコードされた文字列であることを前提とします。 - -**構文** - -```sql -multiSearchAllPositionsUTF8(haystack, needle1[, needle2, ...]) -``` - -**引数** - -* `haystack` — 検索を行う UTF-8 でエンコードされた文字列。[`String`](/sql-reference/data-types/string) -* `needle1[, needle2, ...]` — 検索対象となる UTF-8 でエンコードされた部分文字列の配列。[`Array(String)`](/sql-reference/data-types/array) - -**返される値** - -部分文字列が見つかった場合は 1 から数えたバイト単位での開始位置を、見つからなかった場合は `0` を要素とする配列を返します。[`Array`](/sql-reference/data-types/array) - -**例** - -**UTF-8 マルチ検索** - -```sql title=Query -SELECT multiSearchAllPositionsUTF8('ClickHouse',['C','H']) -``` - -```response title=Response -┌─multiSearchAllPositionsUTF8('ClickHouse', ['C', 'H'])─┐ -│ [1,6] │ -└───────────────────────────────────────────────────────┘ -``` - - -## multiSearchAny - -導入バージョン: v20.1 - -複数のニードル文字列のうち少なくとも 1 つが、ヘイスタック文字列にマッチするかどうかをチェックします。 - -関数 [`multiSearchAnyCaseInsensitive`](#multiSearchAnyCaseInsensitive)、[`multiSearchAnyUTF8`](#multiSearchAnyUTF8)、[`multiSearchAnyCaseInsensitiveUTF8`](#multiSearchAnyCaseInsensitiveUTF8) は、この関数の大文字小文字を区別しない、または UTF-8 対応のバリエーションを提供します。 - -**構文** - -```sql -multiSearchAny(haystack, needle1[, needle2, ...]) -``` - -**引数** - -* `haystack` — 検索を行う文字列。[`String`](/sql-reference/data-types/string) -* `needle1[, needle2, ...]` — 検索対象とする部分文字列の配列。[`Array(String)`](/sql-reference/data-types/array) - -**返り値** - -1 つ以上の一致があれば `1` を返し、一致が 1 つもなければ `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**いずれかへのマッチ検索** - -```sql title=Query -SELECT multiSearchAny('ClickHouse',['C','H']) -``` - -```response title=Response -┌─multiSearchAny('ClickHouse', ['C', 'H'])─┐ -│ 1 │ -└──────────────────────────────────────────┘ -``` - - -## multiSearchAnyCaseInsensitive - -導入バージョン: v20.1 - -[multiSearchAny](#multiSearchAny) と同様ですが、大文字と小文字は区別しません。 - -**構文** - -```sql -multiSearchAnyCaseInsensitive(haystack, [needle1, needle2, ..., needleN]) -``` - -**引数** - -* `haystack` — 検索を実行する文字列。[`String`](/sql-reference/data-types/string) -* `needle` — 検索対象の部分文字列の配列。[`Array(String)`](/sql-reference/data-types/array) - -**戻り値** - -少なくとも 1 件の大文字小文字を区別しない一致があれば `1` を返し、なければ `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**使用例** - -**大文字小文字を区別しない検索** - -```sql title=Query -SELECT multiSearchAnyCaseInsensitive('ClickHouse',['c','h']) -``` - -```response title=Response -┌─multiSearchAnyCaseInsensitive('ClickHouse', ['c', 'h'])─┐ -│ 1 │ -└─────────────────────────────────────────────────────────┘ -``` - - -## multiSearchAnyCaseInsensitiveUTF8 - -導入バージョン: v20.1 - -[multiSearchAnyUTF8](#multiSearchAnyUTF8) と同様ですが、大文字と小文字を区別しません。 - -**構文** - -```sql -multiSearchAnyCaseInsensitiveUTF8(haystack, [needle1, needle2, ..., needleN]) -``` - -**引数** - -* `haystack` — 検索を実行する UTF-8 文字列。[`String`](/sql-reference/data-types/string) -* `needle` — 検索対象の UTF-8 部分文字列。[`Array(String)`](/sql-reference/data-types/array) - -**戻り値** - -少なくとも 1 件の大文字小文字を区別しない一致があれば `1` を返し、1 件も一致がなければ `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**UTF-8 文字列 'Здравствуйте' に小文字の文字 'з' が含まれているかを確認します** - -```sql title=Query -SELECT multiSearchAnyCaseInsensitiveUTF8('Здравствуйте',['з']) -``` - -```response title=Response -┌─multiSearchA⋯те', ['з'])─┐ -│ 1 │ -└──────────────────────────┘ -``` - - -## multiSearchAnyUTF8 - -導入バージョン: v20.1 - -[multiSearchAny](#multiSearchAny) と同様ですが、`haystack` および `needle` の部分文字列が UTF-8 でエンコードされた文字列であると見なします。 - -**構文** - -```sql -multiSearchAnyUTF8(haystack, [needle1, needle2, ..., needleN]) -``` - -**引数** - -* `haystack` — 検索を実行する UTF-8 文字列。[`String`](/sql-reference/data-types/string) -* `needle` — 検索対象となる UTF-8 部分文字列。[`Array(String)`](/sql-reference/data-types/array) - -**返される値** - -少なくとも 1 件の一致があれば `1` を返し、一致が 1 件もなければ `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**UTF-8 文字列 '你好,世界'('Hello, world')が与えられたとき、その文字列内に 你 または 界 の文字が存在するかどうかを確認します** - -```sql title=Query -SELECT multiSearchAnyUTF8('你好,世界', ['你', '界']) -``` - -```response title=Response -┌─multiSearchA⋯你', '界'])─┐ -│ 1 │ -└──────────────────────────┘ -``` - - -## multiSearchFirstIndex - -導入バージョン: v20.1 - -大文字小文字を区別して、複数の needle 文字列を haystack 文字列内で検索し、最初に見つかった needle の 1 から始まるインデックスを返します。 - -**構文** - -```sql -multiSearchFirstIndex(haystack, [needle1, needle2, ..., needleN]) -``` - -**引数** - -* `haystack` — 検索対象となる文字列。[`String`](/sql-reference/data-types/string) -* `needles` — 検索する文字列の配列。[`Array(String)`](/sql-reference/data-types/array) - -**戻り値** - -`haystack` 内で最初に見つかった `needle` の、`needles` 配列における 1 起算のインデックス(位置)を返します。どの `needle` も見つからない場合は 0 を返します。検索は大文字・小文字を区別します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT multiSearchFirstIndex('ClickHouse Database', ['Click', 'Database', 'Server']); -``` - -```response title=Response -┌─multiSearchF⋯ 'Server'])─┐ -│ 1 │ -└──────────────────────────┘ -``` - -**大文字と小文字を区別する挙動** - -```sql title=Query -SELECT multiSearchFirstIndex('ClickHouse Database', ['CLICK', 'Database', 'Server']); -``` - -```response title=Response -┌─multiSearchF⋯ 'Server'])─┐ -│ 2 │ -└──────────────────────────┘ -``` - -**一致するものが見つかりません** - -```sql title=Query -SELECT multiSearchFirstIndex('Hello World', ['goodbye', 'test']); -``` - -```response title=Response -┌─multiSearchF⋯', 'test'])─┐ -│ 0 │ -└──────────────────────────┘ -``` - - -## multiSearchFirstIndexCaseInsensitive - -導入バージョン: v20.1 - -文字列 `haystack` 内で最も左(先頭)側で見つかった needle_i のインデックス `i`(1 起算)を返し、それ以外の場合は 0 を返します。 -大文字と小文字を区別しません。 - -**構文** - -```sql -multiSearchFirstIndexCaseInsensitive(haystack, [needle1, needle2, ..., needleN] -``` - -**引数** - -* `haystack` — 検索対象の文字列。[`String`](/sql-reference/data-types/string) -* `needle` — 検索する部分文字列。[`Array(String)`](/sql-reference/data-types/array) - -**戻り値** - -最も左側で見つかった `needle` のインデックス(1 起算)を返します。一致がない場合は `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT multiSearchFirstIndexCaseInsensitive('hElLo WoRlD', ['World', 'Hello']); -``` - -```response title=Response -┌─multiSearchF⋯, 'Hello'])─┐ -│ 1 │ -└──────────────────────────┘ -``` - - -## multiSearchFirstIndexCaseInsensitiveUTF8 - -導入バージョン: v20.1 - -UTF-8 エンコーディングをサポートし、大文字・小文字を区別せずに、ある文字列(検索対象)の中から複数の検索文字列を検索し、最初に見つかった検索文字列の 1 始まりのインデックスを返します。 - -**構文** - -```sql -multiSearchFirstIndexCaseInsensitiveUTF8(haystack, [needle1, needle2, ..., needleN]) -``` - -**引数** - -* `haystack` — 検索対象の文字列。[`String`](/sql-reference/data-types/string) -* `needles` — 検索する文字列の配列。[`Array(String)`](/sql-reference/data-types/array) - -**返される値** - -`haystack` 内で最初に見つかった `needle` の 1 始まりのインデックス値(`needles` 配列内での位置)を返します。`needle` が 1 つも見つからない場合は 0 を返します。検索は大文字小文字を区別せず、UTF-8 の文字エンコーディングに対応します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT multiSearchFirstIndexCaseInsensitiveUTF8('ClickHouse Database', ['CLICK', 'data', 'server']); -``` - -```response title=Response -┌─multiSearchF⋯ 'server'])─┐ -│ 1 │ -└──────────────────────────┘ -``` - -**UTF-8 における大文字・小文字の扱い** - -```sql title=Query -SELECT multiSearchFirstIndexCaseInsensitiveUTF8('Привет Мир', ['мир', 'ПРИВЕТ']); -``` - -```response title=Response -┌─multiSearchF⋯ 'ПРИВЕТ'])─┐ -│ 1 │ -└──────────────────────────┘ -``` - -**一致するものが見つかりません** - -```sql title=Query -SELECT multiSearchFirstIndexCaseInsensitiveUTF8('Hello World', ['goodbye', 'test']); -``` - -```response title=Response -┌─multiSearchF⋯', 'test'])─┐ -│ 0 │ -└──────────────────────────┘ -``` - - -## multiSearchFirstIndexUTF8 - -導入バージョン: v20.1 - -文字列 `haystack` 内で最も左側に見つかった needle_i のインデックス `i`(1 から開始)を返し、該当するものがない場合は 0 を返します。 -`haystack` と `needle` は UTF-8 でエンコードされた文字列であると仮定します。 - -**構文** - -```sql -multiSearchFirstIndexUTF8(haystack, [needle1, needle2, ..., needleN]) -``` - -**引数** - -* `haystack` — 検索を実行する UTF-8 文字列。[`String`](/sql-reference/data-types/string) -* `needle` — 検索対象となる UTF-8 部分文字列の配列。[`Array(String)`](/sql-reference/data-types/array) - -**返り値** - -最も左側で見つかった needle のインデックス(1 起算)を返します。一致がない場合は 0 を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT multiSearchFirstIndexUTF8('Здравствуйте мир', ['мир', 'здравствуйте']); -``` - -```response title=Response -┌─multiSearchF⋯вствуйте'])─┐ -│ 1 │ -└──────────────────────────┘ -``` - - -## multiSearchFirstPosition - -導入バージョン: v20.1 - -[`position`](#position) と同様ですが、複数の `needle` 文字列のいずれかに一致する、`haystack` 文字列内の最も左側の位置(オフセット)を返します。 - -[`multiSearchFirstPositionCaseInsensitive`](#multiSearchFirstPositionCaseInsensitive)、[`multiSearchFirstPositionUTF8`](#multiSearchFirstPositionUTF8)、[`multiSearchFirstPositionCaseInsensitiveUTF8`](#multiSearchFirstPositionCaseInsensitiveUTF8) 関数は、この関数の大文字小文字を区別しない/UTF-8 対応のバリアントを提供します。 - -**構文** - -```sql -multiSearchFirstPosition(haystack, needle1[, needle2, ...]) -``` - -**引数** - -* `haystack` — 検索を行う対象の文字列。[`String`](/sql-reference/data-types/string) -* `needle1[, needle2, ...]` — 検索対象とする 1 つ以上の部分文字列を要素とする配列。[`Array(String)`](/sql-reference/data-types/array) - -**返される値** - -`haystack` 文字列の中で、複数の `needle` 文字列のいずれかに一致する最も左側のオフセット(位置)を返します。一致がない場合は `0` を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**先頭位置の検索** - -```sql title=Query -SELECT multiSearchFirstPosition('Hello World',['llo', 'Wor', 'ld']) -``` - -```response title=Response -┌─multiSearchFirstPosition('Hello World', ['llo', 'Wor', 'ld'])─┐ -│ 3 │ -└───────────────────────────────────────────────────────────────┘ -``` - - -## multiSearchFirstPositionCaseInsensitive - -導入バージョン: v20.1 - -[multiSearchFirstPosition](#multiSearchFirstPosition) と同様ですが、大文字と小文字を区別しません。 - -**構文** - -```sql -multiSearchFirstPositionCaseInsensitive(haystack, [needle1, needle2, ..., needleN]) -``` - -**引数** - -* `haystack` — 検索を行う文字列。[`String`](/sql-reference/data-types/string) -* `needle` — 検索対象となる部分文字列の配列。[`Array(String)`](/sql-reference/data-types/array) - -**戻り値** - -複数の `needle` 文字列のいずれかに一致する `haystack` 文字列内の最も左側の位置(オフセット)を返します。一致がない場合は `0` を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**大文字小文字を区別しない場合の最初の位置** - -```sql title=Query -SELECT multiSearchFirstPositionCaseInsensitive('HELLO WORLD',['wor', 'ld', 'ello']) -``` - -```response title=Response -┌─multiSearchFirstPositionCaseInsensitive('HELLO WORLD', ['wor', 'ld', 'ello'])─┐ -│ 2 │ -└───────────────────────────────────────────────────────────────────────────────┘ -``` - - -## multiSearchFirstPositionCaseInsensitiveUTF8 - -導入バージョン: v20.1 - -[multiSearchFirstPosition](#multiSearchFirstPosition) と同様ですが、`haystack` と `needle` を UTF-8 文字列として扱い、大文字小文字を区別しません。 - -**構文** - -```sql -multiSearchFirstPositionCaseInsensitiveUTF8(haystack, [needle1, needle2, ..., needleN]) -``` - -**引数** - -* `haystack` — 検索を行う UTF-8 文字列。[`String`](/sql-reference/data-types/string) -* `needle` — 検索対象となる UTF-8 部分文字列からなる配列。[`Array(String)`](/sql-reference/data-types/array) - -**戻り値** - -`haystack` 文字列の中で、複数の `needle` 文字列のいずれかに一致する最も左側のオフセットを、大文字小文字を区別せずに返します。一致がない場合は `0` を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**与えられた needle のいずれかに一致する、UTF-8 文字列 'Здравствуй, мир'('Hello, world')内の最も左側のオフセットを検索** - -```sql title=Query -SELECT multiSearchFirstPositionCaseInsensitiveUTF8('Здравствуй, мир', ['МИР', 'вст', 'Здра']) -``` - -```response title=Response -┌─multiSearchFirstPositionCaseInsensitiveUTF8('Здравствуй, мир', ['мир', 'вст', 'Здра'])─┐ -│ 3 │ -└────────────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## multiSearchFirstPositionUTF8 - -導入バージョン: v20.1 - -[multiSearchFirstPosition](#multiSearchFirstPosition) と同様ですが、`haystack` と `needle` を UTF-8 エンコードされた文字列であると仮定します。 - -**構文** - -```sql -multiSearchFirstPositionUTF8(haystack, [needle1, needle2, ..., needleN]) -``` - -**引数** - -* `haystack` — 検索を行う UTF-8 文字列。[`String`](/sql-reference/data-types/string) -* `needle` — 検索対象となる UTF-8 部分文字列の配列。[`Array(String)`](/sql-reference/data-types/array) - -**戻り値** - -複数の `needle` のうちいずれかに一致する、`haystack` 文字列内の最も左にあるオフセット。一致するものがない場合は `0` を返す。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**UTF-8 文字列 'Здравствуй, мир'('Hello, world')内で、与えられた needle のいずれかに一致する最も左にあるオフセットを求める** - -```sql title=Query -SELECT multiSearchFirstPositionUTF8('Здравствуй, мир',['мир', 'вст', 'авст']) -``` - -```response title=Response -┌─multiSearchFirstPositionUTF8('Здравствуй, мир', ['мир', 'вст', 'авст'])─┐ -│ 3 │ -└─────────────────────────────────────────────────────────────────────────┘ -``` - - -## ngramDistance - -導入バージョン: v20.1 - -2つの文字列間の 4-gram 距離を計算します。 -このために、2つの 4-gram マルチセット間の対称差を数え、その値をそれぞれの要素数の総和で正規化します。 -返される値が小さいほど、文字列同士はより類似しています。 - -大文字小文字を区別しない検索や UTF-8 形式での検索には、[`ngramDistanceCaseInsensitive`](#ngramDistanceCaseInsensitive)、[`ngramDistanceUTF8`](#ngramDistanceUTF8)、[`ngramDistanceCaseInsensitiveUTF8`](#ngramDistanceCaseInsensitiveUTF8) 関数を使用します。 - -**構文** - -```sql -ngramDistance(haystack, needle) -``` - -**引数** - -* `haystack` — 比較対象となる文字列。[`String`](/sql-reference/data-types/string) -* `needle` — 比較対象となる文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -`0` から `1` の間の Float32 型の数値を返します。返される値が小さいほど、文字列同士の類似度は高くなります。[`Float32`](/sql-reference/data-types/float) - -**例** - -**4-グラム距離を計算** - -```sql title=Query -SELECT ngramDistance('ClickHouse', 'ClickHouses') -``` - -```response title=Response -┌─ngramDistance('ClickHouse', 'ClickHouses')─┐ -│ 0.1 │ -└────────────────────────────────────────────┘ -``` - - -## ngramDistanceCaseInsensitive - -導入バージョン: v20.1 - -[`ngramDistance`](#ngramDistance) の大文字小文字を区別しないバージョンを提供します。 -2 つの文字列の 4-グラム距離を、大文字小文字を無視して計算します。 -返される値が小さいほど、文字列同士の類似度が高くなります。 - -**構文** - -```sql -ngramDistanceCaseInsensitive(haystack, needle) -``` - -**引数** - -* `haystack` — 1 番目の比較文字列。[`String`](/sql-reference/data-types/string) -* `needle` — 2 番目の比較文字列。[`String`](/sql-reference/data-types/string) - -**返される値** - -`0` 以上 `1` 以下の `Float32` 型の数値を返します。[`Float32`](/sql-reference/data-types/float) - -**例** - -**大文字小文字を区別しない 4-gram 距離** - -```sql title=Query -SELECT ngramDistanceCaseInsensitive('ClickHouse','clickhouse') -``` - -```response title=Response -┌─ngramDistanceCaseInsensitive('ClickHouse','clickhouse')─┐ -│ 0 │ -└─────────────────────────────────────────────────────────┘ -``` - - -## ngramDistanceCaseInsensitiveUTF8 - -導入バージョン: v20.1 - -[`ngramDistance`](#ngramDistance) の、大文字小文字を区別しない UTF-8 版を提供します。 -`needle` と `haystack` の文字列が UTF-8 でエンコードされていることを前提とし、大文字小文字を無視します。 -2 つの UTF-8 文字列間の 3-gram 距離を、大文字小文字を無視して計算します。 -返される値が小さいほど、文字列同士がより類似していることを意味します。 - -**構文** - -```sql -ngramDistanceCaseInsensitiveUTF8(haystack, needle) -``` - -**引数** - -* `haystack` — 1 番目の UTF-8 エンコードされた比較文字列。[`String`](/sql-reference/data-types/string) -* `needle` — 2 番目の UTF-8 エンコードされた比較文字列。[`String`](/sql-reference/data-types/string) - -**返される値** - -`0` から `1` の間の Float32 型の数値を返します。[`Float32`](/sql-reference/data-types/float) - -**例** - -**大文字小文字を区別しない UTF-8 3-グラム距離** - -```sql title=Query -SELECT ngramDistanceCaseInsensitiveUTF8('abcde','CDE') -``` - -```response title=Response -┌─ngramDistanceCaseInsensitiveUTF8('abcde','CDE')─┐ -│ 0.5 │ -└─────────────────────────────────────────────────┘ -``` - - -## ngramDistanceUTF8 - -導入バージョン: v20.1 - -[`ngramDistance`](#ngramDistance) の UTF-8 版を提供します。 -`needle` と `haystack` の文字列が UTF-8 エンコードされた文字列であると仮定します。 -2 つの UTF-8 文字列間の 3-gram 距離を計算します。 -返される値が小さいほど、文字列同士はより類似しています。 - -**構文** - -```sql -ngramDistanceUTF8(haystack, needle) -``` - -**引数** - -* `haystack` — 比較対象となる最初の UTF-8 エンコード済み文字列。[`String`](/sql-reference/data-types/string) -* `needle` — 比較対象となる2番目の UTF-8 エンコード済み文字列。[`String`](/sql-reference/data-types/string) - -**返される値** - -`0` から `1` の間の `Float32` 型の数値を返します。[`Float32`](/sql-reference/data-types/float) - -**例** - -**UTF-8 3-gram 距離** - -```sql title=Query -SELECT ngramDistanceUTF8('abcde','cde') -``` - -```response title=Response -┌─ngramDistanceUTF8('abcde','cde')─┐ -│ 0.5 │ -└───────────────────────────────────┘ -``` - - -## ngramSearch - -導入バージョン: v20.1 - -2 つの文字列間の 4-gram 距離が、指定されたしきい値以下かどうかを判定します。 - -大文字小文字を区別しない検索や UTF-8 形式の検索には、`ngramSearchCaseInsensitive`、`ngramSearchUTF8`、`ngramSearchCaseInsensitiveUTF8` 関数を使用します。 - -**構文** - -```sql -ngramSearch(haystack, needle) -``` - -**引数** - -* `haystack` — 比較に用いる文字列。[`String`](/sql-reference/data-types/string) -* `needle` — 比較に用いる文字列。[`String`](/sql-reference/data-types/string) - -**返される値** - -文字列間の 4-gram 距離がしきい値(デフォルトは `1.0`)以下の場合は `1`、それ以外の場合は `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**4-gram を使用した検索** - -```sql title=Query -SELECT ngramSearch('ClickHouse', 'Click') -``` - -```response title=Response -┌─ngramSearch('ClickHouse', 'Click')─┐ -│ 1 │ -└────────────────────────────────────┘ -``` - - -## ngramSearchCaseInsensitive - -導入バージョン: v20.1 - -[`ngramSearch`](#ngramSearch) の大文字・小文字を区別しないバージョンを提供します。 -ニードル文字列とヘイスタック文字列の非対称な差分を計算します。つまり、ニードルから得られる n-gram の数から共通する n-gram の数を引き、その値をニードルの n-gram 数で正規化したものです。 -大文字・小文字を無視して、2 つの文字列の 4-gram 距離が指定されたしきい値以下かどうかをチェックします。 - -**構文** - -```sql -ngramSearchCaseInsensitive(haystack, needle) -``` - -**引数** - -* `haystack` — 比較対象となる文字列。[`String`](/sql-reference/data-types/string) -* `needle` — 比較対象となる文字列。[`String`](/sql-reference/data-types/string) - -**返り値** - -2つの文字列間の4-グラム距離がしきい値(デフォルトは `1.0`)以下の場合は `1` を返し、それ以外の場合は `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**4-グラムを使用した大文字・小文字を区別しない検索** - -```sql title=Query -SELECT ngramSearchCaseInsensitive('Hello World','hello') -``` - -```response title=Response -┌─ngramSearchCaseInsensitive('Hello World','hello')─┐ -│ 1 │ -└────────────────────────────────────────────────────┘ -``` - - -## ngramSearchCaseInsensitiveUTF8 - -導入バージョン: v20.1 - -[`ngramSearch`](#ngramSearch) の大文字小文字を区別しない UTF-8 版を提供します。 -`haystack` と `needle` は UTF-8 文字列であると仮定し、大文字小文字を無視します。 -2 つの UTF-8 文字列間の 3-グラム距離が、指定されたしきい値以下かどうかを、大文字小文字を無視して判定します。 - -**構文** - -```sql -ngramSearchCaseInsensitiveUTF8(haystack, needle) -``` - -**引数** - -* `haystack` — 比較に用いる UTF-8 文字列。[`String`](/sql-reference/data-types/string) -* `needle` — 比較に用いる UTF-8 文字列。[`String`](/sql-reference/data-types/string) - -**返される値** - -文字列間の 3-gram 距離がしきい値(デフォルトでは `1.0`)以下の場合は `1` を、そうでない場合は `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**3-gram を使用した大文字小文字を区別しない UTF-8 検索** - -```sql title=Query -SELECT ngramSearchCaseInsensitiveUTF8('абвГДЕёжз', 'АбвгдЕЁжз') -``` - -```response title=Response -┌─ngramSearchCaseInsensitiveUTF8('абвГДЕёжз', 'АбвгдЕЁжз')─┐ -│ 1 │ -└──────────────────────────────────────────────────────────┘ -``` - - -## ngramSearchUTF8 - -導入バージョン: v20.1 - -`ngramSearch` の UTF-8 版を提供します。 -`haystack` と `needle` が UTF-8 文字列であることを前提とします。 -2 つの UTF-8 文字列間の 3-グラム距離が、指定されたしきい値以下かどうかを確認します。 - -**構文** - -```sql -ngramSearchUTF8(haystack, needle) -``` - -**引数** - -* `haystack` — 比較対象となる UTF-8 文字列。[`String`](/sql-reference/data-types/string) -* `needle` — 比較対象となる UTF-8 文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -文字列間の 3-gram 距離がしきい値(デフォルトは `1.0`)以下であれば `1`、それ以外の場合は `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**3-gram を使用した UTF-8 検索** - -```sql title=Query -SELECT ngramSearchUTF8('абвгдеёжз', 'гдеёзд') -``` - -```response title=Response -┌─ngramSearchUTF8('абвгдеёжз', 'гдеёзд')─┐ -│ 1 │ -└────────────────────────────────────────┘ -``` - - -## notILike - -導入バージョン: v20.6 - -文字列がパターンに一致しないかどうかを、大文字小文字を区別せずに判定します。パターンには、SQL の LIKE マッチング用の特殊文字 `%` および `_` を含めることができます。 - -**構文** - -```sql -notILike(haystack, pattern) -``` - -**引数** - -* `haystack` — 検索対象となる入力文字列。[`String`](/sql-reference/data-types/string) または [`FixedString`](/sql-reference/data-types/fixedstring) -* `pattern` — 照合に使用する SQL LIKE パターン。`%` は任意の長さ(0 文字を含む)の文字列に一致し、`_` はちょうど 1 文字に一致する。[`String`](/sql-reference/data-types/string) - -**戻り値** - -文字列がパターンに一致しない場合は `1` を返し(比較は大文字小文字を区別しない)、それ以外の場合は `0` を返す。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT notILike('ClickHouse', '%house%'); -``` - -```response title=Response -┌─notILike('Cl⋯ '%house%')─┐ -│ 0 │ -└──────────────────────────┘ -``` - - -## notLike - -導入: v1.1 - -[`like`](#like) と似ていますが、結果を否定します。 - -**構文** - -```sql -notLike(haystack, pattern) --- haystack NOT LIKE pattern -``` - -**引数** - -* `haystack` — 検索対象の文字列。[`String`](/sql-reference/data-types/string) または [`FixedString`](/sql-reference/data-types/fixedstring) -* `pattern` — 照合する LIKE パターン。[`String`](/sql-reference/data-types/string) - -**返り値** - -文字列が `LIKE` パターンに一致しない場合は `1`、それ以外の場合は `0` を返します。[`UInt8`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT notLike('ClickHouse', '%House%'); -``` - -```response title=Response -┌─notLike('Cli⋯ '%House%')─┐ -│ 0 │ -└──────────────────────────┘ -``` - -**非マッチパターン** - -```sql title=Query -SELECT notLike('ClickHouse', '%SQL%'); -``` - -```response title=Response -┌─notLike('Cli⋯', '%SQL%')─┐ -│ 1 │ -└──────────────────────────┘ -``` - - -## position - -導入: v1.1 - -部分文字列 `needle` が文字列 `haystack` 内に現れる位置(バイト単位、1 始まり)を返します。 - -部分文字列 `needle` が空文字列の場合、以下の規則が適用されます: - -* `start_pos` が指定されていない場合: `1` を返す -* `start_pos = 0` の場合: `1` を返す -* `start_pos >= 1` かつ `start_pos <= length(haystack) + 1` の場合: `start_pos` を返す -* それ以外の場合: `0` を返す - -同じ規則は、関数 [`locate`](#locate)、[`positionCaseInsensitive`](#positionCaseInsensitive)、[`positionUTF8`](#positionUTF8)、[`positionCaseInsensitiveUTF8`](#positionCaseInsensitiveUTF8) にも適用されます。 - -**構文** - -```sql -position(haystack, needle[, start_pos]) -``` - -**引数** - -* `haystack` — 検索を行う文字列。[`String`](/sql-reference/data-types/string) または [`Enum`](/sql-reference/data-types/enum) -* `needle` — 検索対象の部分文字列。[`String`](/sql-reference/data-types/string) -* `start_pos` — 検索を開始する `haystack` 内の位置 (1 始まり)。省略可能。[`UInt`](/sql-reference/data-types/int-uint) - -**戻り値** - -部分文字列が見つかった場合は、バイト単位で 1 から数えた開始位置を返し、見つからなかった場合は `0` を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**基本的な使用例** - -```sql title=Query -SELECT position('Hello, world!', '!') -``` - -```response title=Response -┌─position('Hello, world!', '!')─┐ -│ 13 │ -└────────────────────────────────┘ -``` - -**start_pos 引数を指定する場合** - -```sql title=Query -SELECT position('Hello, world!', 'o', 1), position('Hello, world!', 'o', 7) -``` - -```response title=Response -┌─position('Hello, world!', 'o', 1)─┬─position('Hello, world!', 'o', 7)─┐ -│ 5 │ 9 │ -└───────────────────────────────────┴───────────────────────────────────┘ -``` - -**Needle IN haystack 構文** - -```sql title=Query -SELECT 6 = position('/' IN s) FROM (SELECT 'Hello/World' AS s) -``` - -```response title=Response -┌─equals(6, position(s, '/'))─┐ -│ 1 │ -└─────────────────────────────┘ -``` - -**空の検索文字列** - -```sql title=Query -SELECT position('abc', ''), position('abc', '', 0), position('abc', '', 1), position('abc', '', 2), position('abc', '', 3), position('abc', '', 4), position('abc', '', 5) -``` - -```response title=Response -┌─position('abc', '')─┬─position('abc', '', 0)─┬─position('abc', '', 1)─┬─position('abc', '', 2)─┬─position('abc', '', 3)─┬─position('abc', '', 4)─┬─position('abc', '', 5)─┐ -│ 1 │ 1 │ 1 │ 2 │ 3 │ 4 │ 0 │ -└─────────────────────┴────────────────────────┴────────────────────────┴────────────────────────┴────────────────────────┴────────────────────────┴────────────────────────┘ -``` - - -## positionCaseInsensitive - -導入バージョン: v1.1 - -[`position`](#position) と同様ですが、大文字と小文字を区別しません。 - -**構文** - -```sql -positionCaseInsensitive(haystack, needle[, start_pos]) -``` - -**別名**: `instr` - -**引数** - -* `haystack` — 検索対象の文字列。[`String`](/sql-reference/data-types/string) または [`Enum`](/sql-reference/data-types/enum) -* `needle` — 検索する部分文字列。[`String`](/sql-reference/data-types/string) -* `start_pos` — 省略可。検索を開始する `haystack` 内の位置(1始まり)。[`UInt*`](/sql-reference/data-types/int-uint) - -**戻り値** - -部分文字列が見つかった場合は、先頭から 1 始まりでバイト単位の開始位置を返し、見つからなかった場合は `0` を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**大文字小文字を区別しない検索** - -```sql title=Query -SELECT positionCaseInsensitive('Hello, world!', 'hello') -``` - -```response title=Response -┌─positionCaseInsensitive('Hello, world!', 'hello')─┐ -│ 1 │ -└───────────────────────────────────────────────────┘ -``` - - -## positionCaseInsensitiveUTF8 - -導入バージョン: v1.1 - -[`positionUTF8`](#positionUTF8) と同様ですが、大文字小文字を区別せずに検索します。 - -**構文** - -```sql -positionCaseInsensitiveUTF8(haystack, needle[, start_pos]) -``` - -**引数** - -* `haystack` — 検索を実行する対象の文字列。[`String`](/sql-reference/data-types/string) または [`Enum`](/sql-reference/data-types/enum) -* `needle` — 検索対象の部分文字列。[`String`](/sql-reference/data-types/string) -* `start_pos` — 省略可。検索を開始する `haystack` 内の位置(1 始まり)。[`UInt*`](/sql-reference/data-types/int-uint) - -**戻り値** - -部分文字列が見つかった場合は、その開始位置をバイト単位で 1 始まりとして返し、見つからなかった場合は `0` を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**大文字小文字を区別しない UTF-8 検索** - -```sql title=Query -SELECT positionCaseInsensitiveUTF8('Привет мир', 'МИР') -``` - -```response title=Response -┌─positionCaseInsensitiveUTF8('Привет мир', 'МИР')─┐ -│ 8 │ -└──────────────────────────────────────────────────┘ -``` - - -## positionUTF8 - -導入バージョン: v1.1 - -[`position`](#position) と同様ですが、`haystack` と `needle` が UTF-8 でエンコードされた文字列であると仮定します。 - -**構文** - -```sql -positionUTF8(haystack, needle[, start_pos]) -``` - -**引数** - -* `haystack` — 検索を行う文字列。[`String`](/sql-reference/data-types/string) または [`Enum`](/sql-reference/data-types/enum) -* `needle` — 検索対象の部分文字列。[`String`](/sql-reference/data-types/string) -* `start_pos` — オプション。検索を開始する `haystack` 内の位置(1 始まり)。[`UInt*`](/sql-reference/data-types/int-uint) - -**戻り値** - -部分文字列が見つかった場合は、その開始位置(バイト単位、1 始まり)を返し、見つからなかった場合は `0` を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**UTF-8 文字数のカウント** - -```sql title=Query -SELECT positionUTF8('Motörhead', 'r') -``` - -```response title=Response -┌─position('Motörhead', 'r')─┐ -│ 5 │ -└────────────────────────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/time-series-functions.md b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/time-series-functions.md index ab84af08b5f..c9a0c6db81c 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/time-series-functions.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/time-series-functions.md @@ -3,23 +3,19 @@ description: '時系列データを扱う関数のドキュメント' sidebar_label: 'TimeSeries' slug: /sql-reference/functions/time-series-functions title: '時系列データを扱う関数' -doc_type: 'リファレンス' +doc_type: 'reference' --- - - # 時系列関数 以下の関数は、`timeSeries*()` 集約関数(例えば -[timeSeriesInstantRateToGrid](../aggregate-functions/reference/timeSeriesInstantRateToGrid.md) や +[timeSeriesInstantRateToGrid](../aggregate-functions/reference/timeSeriesInstantRateToGrid.md)、 [timeSeriesLastToGrid](../aggregate-functions/reference/timeSeriesResampleToGridWithStaleness.md) -など)と組み合わせて使用するよう設計されています。 - - +など)と併用することを想定して設計されています。 ## timeSeriesRange -タイムスタンプの連続値を生成します。 +タイムスタンプの範囲を生成します。 **構文** @@ -31,34 +27,34 @@ timeSeriesRange(start_timestamp, end_timestamp, step) * `start_timestamp` - 範囲の開始時刻。 * `end_timestamp` - 範囲の終了時刻。 -* `step` - 範囲の刻み幅(秒単位)。 +* `step` - 範囲のステップ幅(秒単位)。 -**返り値** +**戻り値** * タイムスタンプの範囲 `[start_timestamp, start_timestamp + step, start_timestamp + 2 * step, ..., end_timestamp]` を返します。 **例** -クエリ: +クエリ: ```sql SELECT timeSeriesRange('2025-06-01 00:00:00'::DateTime64(3), '2025-06-01 00:01:00'::DateTime64(3), 30) AS rng; ``` -結果: +結果: ```text -┌────────────────────────────────────結果─────────────────────────────────────────┐ +┌────────────────────────────────────result─────────────────────────────────────────┐ │ ['2025-06-01 00:00:00.000', '2025-06-01 00:00:30.000', '2025-06-01 00:01:00.000'] │ └───────────────────────────────────────────────────────────────────────────────────┘ ``` **注記** -* 関数 `timeSeriesRange()` が `start_timestamp` と `end_timestamp` が等しい値で呼び出された場合、 - そのタイムスタンプのみを含む 1 要素の配列 `[start_timestamp]` を返します。 -* 関数 `timeSeriesRange()` は、関数 [range](../functions/array-functions.md#range) と似ています。 - たとえば、タイムスタンプの型が `DateTime64(3)` で `start_timestamp < end_timestamp` の場合、 +* 関数 `timeSeriesRange()` が `start_timestamp` と `end_timestamp` が等しい状態で呼び出された場合、 + そのタイムスタンプのみを要素とする 1 要素の配列 `[start_timestamp]` を返します。 +* 関数 `timeSeriesRange()` は関数 [range](../functions/array-functions.md#range) と類似しています。 + 例えば、タイムスタンプの型が `DateTime64(3)` で、かつ `start_timestamp < end_timestamp` の場合、 `timeSeriesRange(start_timestamp, end_timestamp, step)` は次の式と同じ結果を返します。 ```sql @@ -68,14 +64,14 @@ range(start_timestamp::Int64, end_timestamp::Int64 + 1, step::Int64)::Array(Date ## timeSeriesFromGrid -値の配列 `[value1, value2, value3, ..., valueN]` を、タプルの配列 +配列 `[value1, value2, value3, ..., valueN]` を、タプルの配列 `[(start_timestamp, value1), (start_timestamp + step, value2), (start_timestamp + 2 * step, value3), ..., (end_timestamp, valueN)]` に変換します。 -もし `[value1, value2, value3, ...]` の一部の値が `NULL` の場合、関数はそれらの NULL 値を結果配列にはコピーしませんが、 -現在のタイムスタンプは進めます。たとえば `[value1, NULL, value2]` に対しては、 +値 `[value1, value2, value3, ...]` の一部が `NULL` の場合、関数はその NULL 値を結果配列にはコピーしませんが、 +現在のタイムスタンプは進めます。例えば `[value1, NULL, value2]` に対しては、 `[(start_timestamp, value1), (start_timestamp + 2 * step, value2)]` を返します。 -現在のタイムスタンプは、end_timestamp を超えるまで step ずつ増加し、それぞれのタイムスタンプは指定された値配列の要素と組み合わされます。 +現在のタイムスタンプは end_timestamp を超えるまで step ずつ増加し、各タイムスタンプは指定された値配列の要素と組み合わされます。 値の個数がタイムスタンプの個数と一致しない場合、関数は例外をスローします。 **構文** @@ -88,12 +84,12 @@ timeSeriesFromGrid(start_timestamp, end_timestamp, step, values); * `start_timestamp` - グリッドの開始時刻。 * `end_timestamp` - グリッドの終了時刻。 -* `step` - グリッドの間隔(秒単位)。 +* `step` - グリッドのステップ(秒単位)。 * `values` - 値の配列 `[value1, value2, ..., valueN]`。 -**返り値** +**戻り値** -* `start_timestamp` と `step` で定義される等間隔の時間グリッド上の各タイムスタンプに、ソース配列の値を対応付けた結果を返します。 +* `start_timestamp` と `step` で定義される等間隔の時間グリッド上で、タイムスタンプと組み合わせた元の値配列の値を返します。 **例** @@ -103,7 +99,7 @@ timeSeriesFromGrid(start_timestamp, end_timestamp, step, values); SELECT timeSeriesFromGrid('2025-06-01 00:00:00'::DateTime64(3), '2025-06-01 00:01:30.000'::DateTime64(3), 30, [10, 20, NULL, 30]) AS result; ``` -結果: +結果: ```text ┌─────────────────────────────────────────────result─────────────────────────────────────────────┐ @@ -112,389 +108,19 @@ SELECT timeSeriesFromGrid('2025-06-01 00:00:00'::DateTime64(3), '2025-06-01 00:0 ``` **注記** -関数 `timeSeriesFromGrid(start_timestamp, end_timestamp, step, values)` は、以下の式と同じ結果を返します。 +関数 `timeSeriesFromGrid(start_timestamp, end_timestamp, step, values)` は、次の式と同じ結果を返します。 ```sql arrayFilter(x -> x.2 IS NOT NULL, arrayZip(timeSeriesRange(start_timestamp, end_timestamp, step), values)) ``` {/* - 以下のタグ内の内容は、ドキュメントフレームワークのビルド時に - system.functions から自動生成されたドキュメントで置き換えられます。タグを変更または削除しないでください。 + 以下のタグ内の内容は、ドキュメントフレームワークのビルド時に、 + system.functions から生成されたドキュメントに置き換えられます。 + タグを変更したり削除したりしないでください。 詳細は https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md を参照してください。 */ } - {/*AUTOGENERATED_START*/ } -## seriesDecomposeSTL - -導入バージョン: v24.1 - -系列データを、STL [(Seasonal-Trend Decomposition Procedure Based on Loess)](https://www.wessa.net/download/stl.pdf) により、季節成分、トレンド成分、および残差成分に分解します。 - -**構文** - -```sql -seriesDecomposeSTL(series, period) -``` - -**引数** - -* `series` — 数値の配列 [`Array((U)Int8/16/32/64)`](/sql-reference/data-types/array) または [`Array(Float*)`](/sql-reference/data-types/array) -* `period` — 正の整数 [`UInt8/16/32/64`](/sql-reference/data-types/int-uint) - -**返り値** - -4 つの配列からなる配列を返します。1 番目の配列には季節性成分、2 番目の配列にはトレンド、3 番目の配列には残差成分、4 番目の配列にはベースライン(季節性 + トレンド)成分が含まれます。[`Array(Array(Float32), Array(Float32), Array(Float32), Array(Float32))`](/sql-reference/data-types/array) - -**例** - -**STL を使用して系列データを分解する** - -```sql title=Query -SELECT seriesDecomposeSTL([10.1, 20.45, 40.34, 10.1, 20.45, 40.34, 10.1, 20.45, 40.34, 10.1, 20.45, 40.34, 10.1, 20.45, 40.34, 10.1, 20.45, 40.34, 10.1, 20.45, 40.34, 10.1, 20.45, 40.34], 3) AS print_0 -``` - -```response title=Response -┌───────────print_0──────────────────────────────────────────────────────────────────────────────────────────────────────┐ -│ [[ - -13.529999, -3.1799996, 16.71, -13.53, -3.1799996, 16.71, -13.53, -3.1799996, - 16.71, -13.530001, -3.18, 16.710001, -13.530001, -3.1800003, 16.710001, -13.530001, - -3.1800003, 16.710001, -13.530001, -3.1799994, 16.71, -13.529999, -3.1799994, 16.709997 - ], - [ - 23.63, 23.63, 23.630003, 23.630001, 23.630001, 23.630001, 23.630001, 23.630001, - 23.630001, 23.630001, 23.630001, 23.63, 23.630001, 23.630001, 23.63, 23.630001, - 23.630001, 23.63, 23.630001, 23.630001, 23.630001, 23.630001, 23.630001, 23.630003 - ], - [ - 0, 0.0000019073486, -0.0000019073486, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.0000019073486, 0, - 0 - ], - [ - 10.1, 20.449999, 40.340004, 10.100001, 20.45, 40.34, 10.100001, 20.45, 40.34, 10.1, 20.45, 40.34, - 10.1, 20.45, 40.34, 10.1, 20.45, 40.34, 10.1, 20.45, 40.34, 10.100002, 20.45, 40.34 - ]] │ -└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## seriesOutliersDetectTukey - -導入バージョン: v24.2 - -[Tukey Fences](https://en.wikipedia.org/wiki/Outlier#Tukey%27s_fences) を使用して系列データ中の外れ値を検出します。 - -**構文** - -```sql -seriesOutliersDetectTukey(series[, min_percentile, max_percentile, K]) -``` - -**引数** - -* `series` — 数値の配列。[`Array((UInt8/16/32/64))`](/sql-reference/data-types/array) または [`Array(Float*)`](/sql-reference/data-types/array) -* `min_percentile` — 省略可。四分位範囲 [(IQR)](https://en.wikipedia.org/wiki/Interquartile_range) を計算する際に使用する最小パーセンタイル値。値は [0.02,0.98] の範囲でなければなりません。デフォルト値は 0.25 です。[`Float*`](/sql-reference/data-types/float) -* `max_percentile` — 省略可。四分位範囲 (IQR) を計算する際に使用する最大パーセンタイル値。値は [0.02,0.98] の範囲でなければなりません。デフォルト値は 0.75 です。[`Float*`](/sql-reference/data-types/float) -* `K` — 省略可。弱い外れ値またはより強い外れ値を検出するための非負の定数値。デフォルト値は 1.5 です。[`Float*`](/sql-reference/data-types/float) - -**戻り値** - -入力配列と同じ長さの配列を返し、各値は系列内の対応する要素に対する異常度スコアを表します。0 でないスコアは、異常の可能性を示します。[`Array(Float32)`](/sql-reference/data-types/array) - -**例** - -**基本的な外れ値検出** - -```sql title=Query -SELECT seriesOutliersDetectTukey([-3, 2, 15, 3, 5, 6, 4, 5, 12, 45, 12, 3, 3, 4, 5, 6]) AS print_0 -``` - -```response title=Response -┌───────────print_0─────────────────┐ -│[0,0,0,0,0,0,0,0,0,27,0,0,0,0,0,0] │ -└───────────────────────────────────┘ -``` - -**カスタムパラメータを用いた外れ値検出** - -```sql title=Query -SELECT seriesOutliersDetectTukey([-3, 2, 15, 3, 5, 6, 4.50, 5, 12, 45, 12, 3.40, 3, 4, 5, 6], 0.2, 0.8, 1.5) AS print_0 -``` - -```response title=Response -┌─print_0──────────────────────────────┐ -│ [0,0,0,0,0,0,0,0,0,19.5,0,0,0,0,0,0] │ -└──────────────────────────────────────┘ -``` - - -## seriesPeriodDetectFFT - -導入バージョン: v23.12 - -FFT([高速フーリエ変換](https://en.wikipedia.org/wiki/Fast_Fourier_transform))を使用して、与えられた時系列データの周期を検出します。 - -**構文** - -```sql -seriesPeriodDetectFFT(series) -``` - -**引数** - -* `series` — 数値の配列。[`Array((U)Int8/16/32/64)`](/sql-reference/data-types/array) または [`Array(Float*)`](/sql-reference/data-types/array) - -**返り値** - -系列データの周期に等しい実数値を返します。データポイントの数が 4 未満の場合は NaN を返します。戻り値の型は [`Float64`](/sql-reference/data-types/float) です。 - -**例** - -**単純なパターンによる周期の検出** - -```sql title=Query -SELECT seriesPeriodDetectFFT([1, 4, 6, 1, 4, 6, 1, 4, 6, 1, 4, 6, 1, 4, 6, 1, 4, 6, 1, 4, 6]) AS print_0 -``` - -```response title=Response -┌───────────print_0──────┐ -│ 3 │ -└────────────────────────┘ -``` - -**複雑なパターンを用いた周期検出** - -```sql title=Query -SELECT seriesPeriodDetectFFT(arrayMap(x -> abs((x % 6) - 3), range(1000))) AS print_0 -``` - -```response title=Response -┌─print_0─┐ -│ 6 │ -└─────────┘ -``` - - -## timeSeriesFromGrid - -導入: v25.8 - -値の配列 `[x1, x2, x3, ...]` を、タプルの配列 -`[(start_timestamp, x1), (start_timestamp + step, x2), (start_timestamp + 2 * step, x3), ...]` に変換します。 - -現在のタイムスタンプは `step` ずつ増加し、`end_timestamp` を超えるまで続きます。 -値の個数がタイムスタンプの個数と一致しない場合、この関数は例外をスローします。 - -`[x1, x2, x3, ...]` 内の NULL 値はスキップされますが、その場合でも現在のタイムスタンプは増加し続けます。 -たとえば、`[value1, NULL, x2]` に対して、この関数は `[(start_timestamp, x1), (start_timestamp + 2 * step, x2)]` を返します。 - -**構文** - -```sql -timeSeriesFromGrid(start_timestamp, end_timestamp, step, values) -``` - -**引数** - -* `start_timestamp` — グリッドの開始時刻。[`DateTime64`](/sql-reference/data-types/datetime64) または [`DateTime`](/sql-reference/data-types/datetime) または [`UInt32`](/sql-reference/data-types/int-uint) -* `end_timestamp` — グリッドの終了時刻。[`DateTime64`](/sql-reference/data-types/datetime64) または [`DateTime`](/sql-reference/data-types/datetime) または [`UInt32`](/sql-reference/data-types/int-uint) -* `step` — グリッドの刻み幅(秒)。[`Decimal64`](/sql-reference/data-types/decimal) または [`Decimal32`](/sql-reference/data-types/decimal) または [`UInt32/64`](/sql-reference/data-types/int-uint) -* `values` — 値の配列。[`Array(Float*)`](/sql-reference/data-types/array) または [`Array(Nullable(Float*))`](/sql-reference/data-types/array) - -**戻り値** - -`start_timestamp` と `step` で定義される等間隔の時間グリッド上で、元の値配列をタイムスタンプと組み合わせた値を返します。[`Array(Tuple(DateTime64, Float64))`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT timeSeriesFromGrid('2025-06-01 00:00:00'::DateTime64(3), '2025-06-01 00:01:30.000'::DateTime64(3), 30, [10, 20, NULL, 30]) AS result; -``` - -```response title=Response -┌─────────────────────────────────────────────result─────────────────────────────────────────────┐ -│ [('2025-06-01 00:00:00.000',10),('2025-06-01 00:00:30.000',20),('2025-06-01 00:01:30.000',30)] │ -└────────────────────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## timeSeriesIdToTags - -導入バージョン: v25.8 - -指定した時系列識別子に関連付けられているタグを取得します。 - -**構文** - -```sql -timeSeriesIdToTags(id) -``` - -**引数** - -* `id` — 時系列を識別する ID。[`UInt64`](/sql-reference/data-types/int-uint) または [`UInt128`](/sql-reference/data-types/int-uint) または [`UUID`](/sql-reference/data-types/uuid) または [`FixedString(16)`](/sql-reference/data-types/fixedstring) - -**戻り値** - -(tag_name, tag_value) のペアからなる配列を返します。[`Array(Tuple(String, String))`](/sql-reference/data-types/array) - -**例** - -**例** - -```sql title=Query -SELECT timeSeriesStoreTags(8374283493092, [('region', 'eu'), ('env', 'dev')], '__name__', 'http_requests_count') AS id, timeSeriesIdToTags(id) -``` - -```response title=Response -8374283493092 [('__name__', ''http_requests_count''), ('env', 'dev'), ('region', 'eu')] -``` - - -## timeSeriesIdToTagsGroup - -導入バージョン: v25.8 - -指定した時系列の識別子を、そのグループインデックスに変換します。グループインデックスは、現在実行中のクエリのコンテキストにおいて、それぞれの一意なタグの組み合わせに関連付けられた 0, 1, 2, 3 といった数値です。 - -**構文** - -```sql -timeSeriesIdToTagsGroup(id) -``` - -**引数** - -* `id` — 時系列の識別子。[`UInt64`](/sql-reference/data-types/int-uint) または [`UInt128`](/sql-reference/data-types/int-uint) または [`UUID`](/sql-reference/data-types/uuid) または [`FixedString(16)`](/sql-reference/data-types/fixedstring) - -**戻り値** - -このタグセットに対応するグループインデックスを返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**例** - -```sql title=Query -SELECT timeSeriesStoreTags(8374283493092, [('region', 'eu'), ('env', 'dev')], '__name__', 'http_requests_count') AS id, timeSeriesIdToTagsGroup(id) -``` - -```response title=Response -8374283493092 0 -``` - - -## timeSeriesRange - -導入バージョン: v25.8 - -タイムスタンプの範囲 `[start_timestamp, start_timestamp + step, start_timestamp + 2 * step, ..., end_timestamp]` を生成します。 - -`start_timestamp` が `end_timestamp` と等しい場合、この関数は `[start_timestamp]` を含む要素数 1 の配列を返します。 - -関数 `timeSeriesRange()` は、関数 [range](../functions/array-functions.md#range) と類似しています。 - -**構文** - -```sql -timeSeriesRange(start_timestamp, end_timestamp, step) -``` - -**引数** - -* `start_timestamp` — 範囲の開始。[`DateTime64`](/sql-reference/data-types/datetime64) または [`DateTime`](/sql-reference/data-types/datetime) または [`UInt32`](/sql-reference/data-types/int-uint) -* `end_timestamp` — 範囲の終了。[`DateTime64`](/sql-reference/data-types/datetime64) または [`DateTime`](/sql-reference/data-types/datetime) または [`UInt32`](/sql-reference/data-types/int-uint) -* `step` — 範囲のステップ(秒単位)。[`UInt32/64`](/sql-reference/data-types/int-uint) または [`Decimal32/64`](/sql-reference/data-types/decimal) - -**戻り値** - -タイムスタンプの範囲(配列)を返します。[`Array(DateTime64)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT timeSeriesRange('2025-06-01 00:00:00'::DateTime64(3), '2025-06-01 00:01:00'::DateTime64(3), 30) -``` - -```response title=Response -┌────────────────────────────────────result─────────────────────────────────────────┐ -│ ['2025-06-01 00:00:00.000', '2025-06-01 00:00:30.000', '2025-06-01 00:01:00.000'] │ -└───────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## timeSeriesStoreTags - -導入バージョン: v25.8 - -クエリコンテキスト内に、時系列の識別子とそのタグとの対応関係を保存し、後から関数 `timeSeriesIdToTags()` がこれらのタグを取得できるようにします。 - -**構文** - -```sql -timeSeriesStoreTags(id, tags_array, separate_tag_name_1, separate_tag_value_1, ...) -``` - -**引数** - -* `id` — 時系列の識別子。[`UInt64`](/sql-reference/data-types/int-uint) または [`UInt128`](/sql-reference/data-types/int-uint) または [`UUID`](/sql-reference/data-types/uuid) または [`FixedString(16)`](/sql-reference/data-types/fixedstring) -* `tags_array` — (tag_name, tag_value) からなるペアの配列。[`Array(Tuple(String, String))`](/sql-reference/data-types/array) または [`NULL`](/sql-reference/syntax#null) -* `separate_tag_name_i` — タグ名。[`String`](/sql-reference/data-types/string) または [`FixedString`](/sql-reference/data-types/fixedstring) -* `separate_tag_value_i` — タグ値。[`String`](/sql-reference/data-types/string) または [`FixedString`](/sql-reference/data-types/fixedstring) または [`Nullable(String)`](/sql-reference/data-types/nullable) - -**戻り値** - -最初の引数(時系列の識別子)を返します。 - -**例** - -**例** - -```sql title=Query -SELECT timeSeriesStoreTags(8374283493092, [('region', 'eu'), ('env', 'dev')], '__name__', 'http_requests_count') -``` - -```response title=Response -8374283493092 -``` - - -## timeSeriesTagsGroupToTags - -導入バージョン: v25.8 - -グループインデックスに対応するタグを取得します。グループインデックスは、現在実行中のクエリのコンテキスト内で、タグの一意な組み合わせごとに割り当てられる 0, 1, 2, 3 などの数値です。 - -**構文** - -```sql -timeSeriesTagsGroupToTags(group) -``` - -**引数** - -* `group` — 時系列に関連付けられたグループインデックス。 [`UInt64`](/sql-reference/data-types/int-uint) - -**戻り値** - -(tag_name, tag_value) のペアの配列。 [`Array(Tuple(String, String))`](/sql-reference/data-types/array) - -**使用例** - -**例** - -```sql title=Query -SELECT timeSeriesStoreTags(8374283493092, [('region', 'eu'), ('env', 'dev')], '__name__', 'http_requests_count') AS id, timeSeriesIdToTagsGroup(id) AS group, timeSeriesTagsGroupToTags(group) -``` - -```response title=Response -8374283493092 0 [('__name__', ''http_requests_count''), ('env', 'dev'), ('region', 'eu')] -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/time-window-functions.md b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/time-window-functions.md index 24fb1964c6a..1bab9ce9f1f 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/time-window-functions.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/time-window-functions.md @@ -1,5 +1,5 @@ --- -description: '時間ウィンドウ関数のドキュメント' +description: '時間ウィンドウ関数に関するドキュメント' sidebar_label: '時間ウィンドウ' slug: /sql-reference/functions/time-window-functions title: '時間ウィンドウ関数' @@ -17,239 +17,20 @@ import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -時間ウィンドウ関数は、対応するウィンドウの下側の境界(含む)と上側の境界(含まない)を返します。 -[WindowView](/sql-reference/statements/create/view#window-view) を扱うための関数は以下に示します。 +時間ウィンドウ関数は、対応するウィンドウの下限(含む)と上限(含まない)を返します。 +[WindowView](/sql-reference/statements/create/view#window-view) を扱うための関数は次のとおりです。 {/* - 以下のタグ内の内容は、ドキュメントフレームワークのビルド時に - system.functions から自動生成されたドキュメントで置き換えられます。タグを変更または削除しないでください。 + 以下のタグの内側の内容は、ドキュメントフレームワークのビルド時に + system.functions から自動生成されたドキュメントで置き換えられます。タグを変更したり削除したりしないでください。 詳細は https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md を参照してください。 */ } - {/*AUTOGENERATED_START*/ } -## hop - -導入バージョン: v21.12 - -ホッピング時間ウィンドウは固定の長さ(`window_interval`)を持ち、指定されたホップ間隔(`hop_interval`)ごとにシフトします。`hop_interval` が `window_interval` より小さい場合、ホッピングウィンドウは互いに重なり合います。そのため、レコードは複数のウィンドウに割り当てられる可能性があります。 - -1 つのレコードが複数の hop ウィンドウに割り当てられる可能性があるため、WINDOW VIEW を使用せずに hop 関数を使用した場合、この関数は最初のウィンドウの境界のみを返します。 - -**構文** - -```sql -hop(time_attr, hop_interval, window_interval[, timezone]) -``` - -**引数** - -* `time_attr` — 日付と時刻。[`DateTime`](/sql-reference/data-types/datetime) -* `hop_interval` — 正のホップ間隔。[`Interval`](/sql-reference/data-types/int-uint) -* `window_interval` — 正のウィンドウ間隔。[`Interval`](/sql-reference/data-types/int-uint) -* `timezone` — 省略可。タイムゾーン名。[`String`](/sql-reference/data-types/string) - -**戻り値** - -対応するホッピングウィンドウの下限(包含的)と上限(排他的)を返します。[`Tuple(DateTime, DateTime)`](/sql-reference/data-types/tuple) - -**例** - -**ホッピングウィンドウ** - -```sql title=Query -SELECT hop(now(), INTERVAL '1' DAY, INTERVAL '2' DAY) -``` - -```response title=Response -('2024-07-03 00:00:00','2024-07-05 00:00:00') -``` - - -## hopEnd - -導入バージョン: v22.1 - -対応するホップウィンドウの排他的上限を返します。 - -1 つのレコードが複数のホップウィンドウに割り当てられる可能性があるため、`WINDOW VIEW` なしで hop 関数を使用する場合、この関数は最初のウィンドウの境界のみを返します。 - -**構文** - -```sql -hopEnd(time_attr, hop_interval, window_interval[, timezone]) -``` - -**引数** - -* `time_attr` — 日付と時刻。[`DateTime`](/sql-reference/data-types/datetime) -* `hop_interval` — 正のホップ間隔。[`Interval`](/sql-reference/data-types/int-uint) -* `window_interval` — 正のウィンドウ間隔。[`Interval`](/sql-reference/data-types/int-uint) -* `timezone` — 省略可能。タイムゾーン名。[`String`](/sql-reference/data-types/string) - -**戻り値** - -対応するホッピングウィンドウの排他的上限値を返します。[`DateTime`](/sql-reference/data-types/datetime) - -**例** - -**ホッピングウィンドウの終端** - -```sql title=Query -SELECT hopEnd(now(), INTERVAL '1' DAY, INTERVAL '2' DAY) -``` - -```response title=Response -2024-07-05 00:00:00 -``` - - -## hopStart - -導入バージョン: v22.1 - -対応するホップウィンドウの包含的な下限値を返します。 - -1 つのレコードが複数のホップウィンドウに割り当てられる可能性があるため、`WINDOW VIEW` を使用せずに `hop` 関数を使用した場合、この関数は最初のホップウィンドウの下限値のみを返します。 - -**構文** - -```sql -hopStart(time_attr, hop_interval, window_interval[, timezone]) -``` - -**引数** - -* `time_attr` — 日付と時刻。[`DateTime`](/sql-reference/data-types/datetime) -* `hop_interval` — 正のホップ間隔。[`Interval`](/sql-reference/data-types/int-uint) -* `window_interval` — 正のウィンドウ間隔。[`Interval`](/sql-reference/data-types/int-uint) -* `timezone` — 省略可。タイムゾーン名。[`String`](/sql-reference/data-types/string) - -**戻り値** - -対応するホッピングウィンドウの下側の(含まれる)境界を返します。[`DateTime`](/sql-reference/data-types/datetime) - -**例** - -**ホッピングウィンドウの開始** - -```sql title=Query -SELECT hopStart(now(), INTERVAL '1' DAY, INTERVAL '2' DAY) -``` - -```response title=Response -2024-07-03 00:00:00 -``` - - -## tumble - -導入バージョン: v21.12 - -タンブリングウィンドウは、レコードを固定長(`interval`)の、互いに重ならない連続したウィンドウに割り当てます。 - -**構文** - -```sql -tumble(time_attr, interval[, timezone]) -``` - -**引数** - -* `time_attr` — 日時。[`DateTime`](/sql-reference/data-types/datetime) -* `interval` — Interval 型で指定するウィンドウ間隔。[`Interval`](/sql-reference/data-types/int-uint) -* `timezone` — 省略可。タイムゾーン名。[`String`](/sql-reference/data-types/string) - -**戻り値** - -対応するタンブリングウィンドウの下限(含む)と上限(含まない)を返します。[`Tuple(DateTime, DateTime)`](/sql-reference/data-types/tuple) - -**例** - -**タンブリングウィンドウ** - -```sql title=Query -SELECT tumble(now(), toIntervalDay('1')) -``` - -```response title=Response -('2024-07-04 00:00:00','2024-07-05 00:00:00') -``` - - -## tumbleEnd - -導入バージョン: v22.1 - -対応するタンブリングウィンドウの非包含の上限値を返します。 - -**構文** - -```sql -tumbleEnd(time_attr, interval[, timezone]) -``` - -**引数** - -* `time_attr` — 日付と時刻。[`DateTime`](/sql-reference/data-types/datetime) -* `interval` — `Interval` 型で指定されたウィンドウ間隔。[`Interval`](/sql-reference/data-types/int-uint) -* `timezone` — 省略可能。タイムゾーン名。[`String`](/sql-reference/data-types/string) - -**戻り値** - -対応するタンブリングウィンドウの排他的な上限値を返します。[`DateTime`](/sql-reference/data-types/datetime) - -**例** - -**タンブリングウィンドウの終了時刻** - -```sql title=Query -SELECT tumbleEnd(now(), toIntervalDay('1')) -``` - -```response title=Response -2024-07-05 00:00:00 -``` - - -## tumbleStart - -導入: v22.1 - -対応するタンブリングウィンドウの包含的な下限を返します。 - -**構文** - -```sql -tumbleStart(time_attr, interval[, timezone]) -``` - -**引数** - -* `time_attr` — 日付と時刻。[`DateTime`](/sql-reference/data-types/datetime) -* `interval` — Interval 型で指定するウィンドウ間隔。[`Interval`](/sql-reference/data-types/int-uint) -* `timezone` — オプション。タイムゾーン名。[`String`](/sql-reference/data-types/string) - -**返り値** - -対応するタンブリングウィンドウの包括的な下限(開始時刻)を返します。[`DateTime`](/sql-reference/data-types/datetime) - -**例** - -**タンブリングウィンドウの開始** - -```sql title=Query -SELECT tumbleStart(now(), toIntervalDay('1')) -``` - -```response title=Response -2024-07-04 00:00:00 -``` - {/*AUTOGENERATED_END*/ } ## 関連コンテンツ {#related-content} -- [時系列データのユースケースガイド](/use-cases/time-series) +- [時系列ユースケースガイド](/use-cases/time-series) \ No newline at end of file diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/tuple-functions.md b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/tuple-functions.md index 2c6b2dedad6..942a7ccdd57 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/tuple-functions.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/tuple-functions.md @@ -11,834 +11,21 @@ doc_type: 'reference' ::: {/* - 以下のタグの内部の内容は、ドキュメントフレームワークのビルド時に - system.functions から生成されたドキュメントで置き換えられます。タグを変更または削除しないでください。 - 詳細は https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md を参照してください。 + 以下のタグ内の内容は、ドキュメントフレームワークのビルド時に + system.functions から自動生成されたドキュメントで置き換えられます。タグを変更したり削除したりしないでください。 + 詳細: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## flattenTuple - -導入バージョン: v22.6 - -名前付きでネストされたタプルをフラット化します。 -返されるタプルの各要素は、入力タプル内の要素へのパスになります。 - -**構文** - -```sql -flattenTuple(input) -``` - -**引数** - -* `input` — フラット化する名前付きおよびネストされたタプル。[`Tuple(n1 T1[, n2 T2, ... ])`](/sql-reference/data-types/tuple) - -**戻り値** - -元の入力内のパスを要素とする出力タプルを返します。[`Tuple(T)`](/sql-reference/data-types/tuple) - -**例** - -**使用例** - -```sql title=Query -CREATE TABLE tab(t Tuple(a UInt32, b Tuple(c String, d UInt32))) ENGINE = MergeTree ORDER BY tuple(); -INSERT INTO tab VALUES ((3, ('c', 4))); - -SELECT flattenTuple(t) FROM tab; -``` - -```response title=Response -┌─flattenTuple(t)┐ -│ (3, 'c', 4) │ -└────────────────┘ -``` - - -## tuple - -導入バージョン: v - -入力引数をグループ化してタプルを返します。 - -型が T1, T2, ... である列 C1, C2, ... に対して、これらの列名が一意であり、かつクォートなしの識別子として扱える場合は、それらの列を含む名前付きタプル型 Tuple(C1 T1, C2 T2, ...) を返し、そうでない場合は Tuple(T1, T2, ...) を返します。この関数の実行コストは発生しません。 -タプルは通常、`IN` 演算子の引数用の中間値として、またはラムダ関数の形式引数リストを作成するために使用されます。タプルをテーブルに書き込むことはできません。 - -この関数は演算子 `(x, y, ...)` を実装しています。 - -**構文** - -```sql -``` - -**引数** - -* なし - -**戻り値** - -**例** - -**典型例** - -```sql title=Query -SELECT tuple(1, 2) -``` - -```response title=Response -(1,2) -``` - - -## tupleConcat - -導入: v23.8 - -引数として渡されたタプルを結合します。 - -**構文** - -```sql -tupleConcat(tuple1[, tuple2, [...]]) -``` - -**引数** - -* `tupleN` — 任意個数の `Tuple` 型引数。[`Tuple(T)`](/sql-reference/data-types/tuple) - -**返される値** - -すべての入力タプルの要素を含むタプルを返します。[`Tuple(T)`](/sql-reference/data-types/tuple) - -**例** - -**使用例** - -```sql title=Query -SELECT tupleConcat((1, 2), ('a',), (true, false)) -``` - -```response title=Response -(1, 2, 'a', true, false) -``` - - -## tupleDivide - -導入バージョン: v21.11 - -同じ長さの 2 つのタプルについて、対応する要素同士の除算を計算します。 - -:::note -ゼロ除算の場合は `inf` を返します。 -::: - -**構文** - -```sql -tupleDivide(t1, t2) -``` - -**引数** - -* `t1` — 1 番目のタプル。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) または [`Tuple(Float*)`](/sql-reference/data-types/tuple) または [`Tuple(Decimal)`](/sql-reference/data-types/tuple) -* `t2` — 2 番目のタプル。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) または [`Tuple(Float*)`](/sql-reference/data-types/tuple) または [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**戻り値** - -除算結果のタプルを返します。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) または [`Tuple(Float*)`](/sql-reference/data-types/tuple) または [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**例** - -**基本的な使用方法** - -```sql title=Query -SELECT tupleDivide((1, 2), (2, 3)) -``` - -```response title=Response -(0.5, 0.6666666666666666) -``` - - -## tupleDivideByNumber - -導入バージョン: v21.11 - -すべての要素を指定した数値で割った結果のタプルを返します。 - -:::note -0 で割った場合は `inf` を返します。 -::: - -**構文** - -```sql -tupleDivideByNumber(tuple, number) -``` - -**引数** - -* `tuple` — 除算対象のタプル。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) または [`Tuple(Float*)`](/sql-reference/data-types/tuple) または [`Tuple(Decimal)`](/sql-reference/data-types/tuple) -* `number` — 除数。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) - -**戻り値** - -各要素を除算した結果のタプルを返します。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) または [`Tuple(Float*)`](/sql-reference/data-types/tuple) または [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**使用例** - -**基本的な使い方** - -```sql title=Query -SELECT tupleDivideByNumber((1, 2), 0.5) -``` - -```response title=Response -(2, 4) -``` - - -## tupleElement - -導入バージョン: v1.1 - -タプルから要素をインデックスまたは名前で抽出します。 - -インデックスでアクセスする場合は、1 始まりの数値インデックスを指定します。 -名前でアクセスする場合は、要素名を文字列として指定します(名前付きタプルでのみ有効です)。 - -省略可能な 3 番目の引数でデフォルト値を指定できます。アクセス対象の要素が存在しない場合、例外をスローする代わりにこの値が返されます。 -すべての引数は定数でなければなりません。 - -この関数は実行時コストがゼロであり、演算子 `x.index` および `x.name` を実装します。 - -**構文** - -```sql -tupleElement(tuple, index|name[, default_value]) -``` - -**引数** - -* `tuple` — タプル、またはタプルの配列。[`Tuple(T)`](/sql-reference/data-types/tuple) または [`Array(Tuple(T))`](/sql-reference/data-types/array) -* `index` — 1 から始まるカラムインデックス。[`const UInt8/16/32/64`](/sql-reference/data-types/int-uint) -* `name` — 要素の名前。[`const String`](/sql-reference/data-types/string) -* `default_value` — インデックスが有効範囲外、または要素が存在しない場合に返されるデフォルト値。[`Any`](/sql-reference/data-types) - -**戻り値** - -指定されたインデックスまたは名前の要素を返します。[`Any`](/sql-reference/data-types) - -**例** - -**インデックスによるアクセス** - -```sql title=Query -SELECT tupleElement((1, 'hello'), 2) -``` - -```response title=Response -hello -``` - -**テーブル付きの名前付きタプル** - -```sql title=Query -CREATE TABLE example (values Tuple(name String, age UInt32)) ENGINE = Memory; -INSERT INTO example VALUES (('Alice', 30)); -SELECT tupleElement(values, 'name') FROM example; -``` - -```response title=Response -Alice -``` - -**デフォルト値の場合** - -```sql title=Query -SELECT tupleElement((1, 2), 5, 'not_found') -``` - -```response title=Response -not_found -``` - -**演算子の構文** - -```sql title=Query -SELECT (1, 'hello').2 -``` - -```response title=Response -hello -``` - - -## tupleHammingDistance - -導入: v21.1 - -同じサイズの 2 つのタプル間の[ハミング距離](https://en.wikipedia.org/wiki/Hamming_distance)を返します。 - -:::note -結果の型は、入力タプル内の要素数に基づき、[算術関数](../../sql-reference/functions/arithmetic-functions.md)の場合と同じ方法で決定されます。 - -```sql -SELECT - toTypeName(tupleHammingDistance(tuple(0), tuple(0))) AS t1, - toTypeName(tupleHammingDistance((0, 0), (0, 0))) AS t2, - toTypeName(tupleHammingDistance((0, 0, 0), (0, 0, 0))) AS t3, - toTypeName(tupleHammingDistance((0, 0, 0, 0), (0, 0, 0, 0))) AS t4, - toTypeName(tupleHammingDistance((0, 0, 0, 0, 0), (0, 0, 0, 0, 0))) AS t5 -``` - -```text -┌─t1────┬─t2─────┬─t3─────┬─t4─────┬─t5─────┐ -│ UInt8 │ UInt16 │ UInt32 │ UInt64 │ UInt64 │ -└───────┴────────┴────────┴────────┴────────┘ -``` - -::: - -**構文** - -```sql -tupleHammingDistance(t1, t2) -``` - -**引数** - -* `t1` — 1 番目のタプル。[`Tuple(*)`](/sql-reference/data-types/tuple) -* `t2` — 2 番目のタプル。[`Tuple(*)`](/sql-reference/data-types/tuple) - -**戻り値** - -ハミング距離を返します。[`UInt8/16/32/64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT tupleHammingDistance((1, 2, 3), (3, 2, 1)) -``` - -```response title=Response -2 -``` - -**MinHash による準重複文字列の検出** - -```sql title=Query -SELECT tupleHammingDistance(wordShingleMinHash(string), wordShingleMinHashCaseInsensitive(string)) FROM (SELECT 'ClickHouseはクエリのオンライン分析処理のための列指向データベース管理システムです。' AS string) -``` - -```response title=Response -2 -``` - - -## tupleIntDiv - -導入バージョン: v23.8 - -分子のタプルと分母のタプルを用いて整数除算を実行します。商のタプルを返します。 -どちらかのタプルに整数以外の要素が含まれている場合、整数以外の分子または除数については、最も近い整数に丸めてから結果を計算します。 -0 による除算を行うとエラーがスローされます。 - -**構文** - -```sql -tupleIntDiv(tuple_num, tuple_div) -``` - -**引数** - -* `tuple_num` — 分子の値のタプル。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) または [`Tuple(Float*)`](/sql-reference/data-types/tuple) または [`Tuple(Decimal)`](/sql-reference/data-types/tuple) -* `tuple_div` — 分母の値のタプル。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) または [`Tuple(Float*)`](/sql-reference/data-types/tuple) または [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**戻り値** - -商を要素とするタプルを返します。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) または [`Tuple(Float*)`](/sql-reference/data-types/tuple) または [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**例** - -**基本的な使い方** - -```sql title=Query -SELECT tupleIntDiv((15, 10, 5), (5, 5, 5)) -``` - -```response title=Response -(3, 2, 1) -``` - -**小数を使用する場合** - -```sql title=Query -SELECT tupleIntDiv((15, 10, 5), (5.5, 5.5, 5.5)) -``` - -```response title=Response -(2, 1, 0) -``` - - -## tupleIntDivByNumber - -導入バージョン: v23.8 - -分子のタプルを指定された分母で整数除算し、その商のタプルを返します。 -いずれかの入力パラメータに非整数の要素が含まれる場合、各非整数の分子または除数を最も近い整数に丸めてから結果を計算します。 -0 での除算が行われた場合はエラーがスローされます。 - -**構文** - -```sql -tupleIntDivByNumber(tuple_num, div) -``` - -**引数** - -* `tuple_num` — 分子値のタプル。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) または [`Tuple(Float*)`](/sql-reference/data-types/tuple) または [`Tuple(Decimal)`](/sql-reference/data-types/tuple) -* `div` — 除数の値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) - -**戻り値** - -商のタプルを返します。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) または [`Tuple(Float*)`](/sql-reference/data-types/tuple) または [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**例** - -**基本的な使い方** - -```sql title=Query -SELECT tupleIntDivByNumber((15, 10, 5), 5) -``` - -```response title=Response -(3, 2, 1) -``` - -**小数を含む場合** - -```sql title=Query -SELECT tupleIntDivByNumber((15.2, 10.7, 5.5), 5.8) -``` - -```response title=Response -(2, 1, 0) -``` - - -## tupleIntDivOrZero - -導入バージョン: v23.8 - -[`tupleIntDiv`](#tupleIntDiv) と同様に、分子のタプルと分母のタプルに対して整数除算を実行し、商のタプルを返します。 -0 による除算が発生した場合は、例外をスローする代わりに、その商を 0 として返します。 -いずれかのタプルに整数以外の要素が含まれている場合は、各整数以外の分子または除数を最も近い整数に丸めてから結果を計算します。 - -**構文** - -```sql -tupleIntDivOrZero(tuple_num, tuple_div) -``` - -**引数** - -* `tuple_num` — 分子の値を含むタプル。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) または [`Tuple(Float*)`](/sql-reference/data-types/tuple) または [`Tuple(Decimal)`](/sql-reference/data-types/tuple) -* `tuple_div` — 除数の値を含むタプル。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) または [`Tuple(Float*)`](/sql-reference/data-types/tuple) または [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**戻り値** - -商のタプルを返します。除数が 0 の場合、その商として 0 を返します。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) または [`Tuple(Float*)`](/sql-reference/data-types/tuple) または [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**例** - -**除数が 0 の場合** - -```sql title=Query -SELECT tupleIntDivOrZero((5, 10, 15), (0, 0, 0)) -``` - -```response title=Response -(0, 0, 0) -``` - - -## tupleIntDivOrZeroByNumber - -導入バージョン: v23.8 - -[`tupleIntDivByNumber`](#tupleIntDivByNumber) と同様に、指定された分母で分子のタプルに対して整数除算を行い、商のタプルを返します。 -除数がゼロの場合でもエラーはスローされず、商としてゼロを返します。 -タプルまたは除数に整数以外の要素が含まれている場合、それぞれの整数以外の分子または除数を最も近い整数に丸めてから結果を計算します。 - -**構文** - -```sql -tupleIntDivOrZeroByNumber(tuple_num, div) -``` - -**引数** - -* `tuple_num` — 分子の値を格納したタプル。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) または [`Tuple(Float*)`](/sql-reference/data-types/tuple) または [`Tuple(Decimal)`](/sql-reference/data-types/tuple) -* `div` — 除数の値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) - -**返される値** - -除数が `0` の要素については商を `0` とした商のタプルを返します。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) または [`Tuple(Float*)`](/sql-reference/data-types/tuple) または [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**使用例** - -**基本的な使用方法** - -```sql title=Query -SELECT tupleIntDivOrZeroByNumber((15, 10, 5), 5) -``` - -```response title=Response -(3, 2, 1) -``` - -**除数が 0 の場合** - -```sql title=Query -SELECT tupleIntDivOrZeroByNumber((15, 10, 5), 0) -``` - -```response title=Response -(0, 0, 0) -``` - - -## tupleMinus - -導入バージョン: v21.11 - -同じ要素数を持つ 2 つのタプルの対応する要素同士の差を計算します。 - -**構文** - -```sql -tupleMinus(t1, t2) -``` - -**エイリアス**: `vectorDifference` - -**引数** - -* `t1` — 1 番目のタプル。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) または [`Tuple(Float*)`](/sql-reference/data-types/tuple) または [`Tuple(Decimal)`](/sql-reference/data-types/tuple) -* `t2` — 2 番目のタプル。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) または [`Tuple(Float*)`](/sql-reference/data-types/tuple) または [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**戻り値** - -減算した結果を含むタプルを返します。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) または [`Tuple(Float*)`](/sql-reference/data-types/tuple) または [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**例** - -**基本的な使用例** - -```sql title=Query -SELECT tupleMinus((1, 2), (2, 3)) -``` - -```response title=Response -(-1, -1) -``` - - -## tupleModulo - -導入バージョン: v23.8 - -2 つのタプルの要素同士を除算した際の余り(剰余)を要素とするタプルを返します。 - -**構文** - -```sql -tupleModulo(tuple_num, tuple_mod) -``` - -**引数** - -* `tuple_num` — 分子の値のタプル。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) または [`Tuple(Float*)`](/sql-reference/data-types/tuple) または [`Tuple(Decimal)`](/sql-reference/data-types/tuple) -* `tuple_mod` — 法 (modulus) の値のタプル。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) または [`Tuple(Float*)`](/sql-reference/data-types/tuple) または [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**戻り値** - -除算の余りを要素とするタプルを返します。ゼロでの除算はエラーになります。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) または [`Tuple(Float*)`](/sql-reference/data-types/tuple) または [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**例** - -**基本的な使用方法** - -```sql title=Query -SELECT tupleModulo((15, 10, 5), (5, 3, 2)) -``` - -```response title=Response -(0, 1, 1) -``` - - -## tupleModuloByNumber - -導入バージョン: v23.8 - -タプルの各要素を指定された除数で割ったときの剰余(余り)からなるタプルを返します。 - -**構文** - -```sql -tupleModuloByNumber(tuple_num, div) -``` - -**引数** - -* `tuple_num` — 分子となる要素のタプル。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) または [`Tuple(Float*)`](/sql-reference/data-types/tuple) または [`Tuple(Decimal)`](/sql-reference/data-types/tuple) -* `div` — 除数となる値。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) - -**戻り値** - -除算の余りを要素とするタプルを返します。0 で除算を行うとエラーになります。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) または [`Tuple(Float*)`](/sql-reference/data-types/tuple) または [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**例** - -**基本的な使用例** - -```sql title=Query -SELECT tupleModuloByNumber((15, 10, 5), 2) -``` - -```response title=Response -(1, 0, 1) -``` - - -## tupleMultiply - -導入バージョン: v21.11 - -同じ長さの 2 つのタプルに対して、対応する要素同士の積を計算します。 - -**構文** - -```sql -tupleMultiply(t1, t2) -``` - -**引数** - -* `t1` — 1 番目のタプル。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) または [`Tuple(Float*)`](/sql-reference/data-types/tuple) または [`Tuple(Decimal)`](/sql-reference/data-types/tuple) -* `t2` — 2 番目のタプル。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) または [`Tuple(Float*)`](/sql-reference/data-types/tuple) または [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**戻り値** - -乗算結果を含むタプルを返します。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) または [`Tuple(Float*)`](/sql-reference/data-types/tuple) または [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**例** - -**基本的な使用例** - -```sql title=Query -SELECT tupleMultiply((1, 2), (2, 3)) -``` - -```response title=Response -(2, 6) -``` - - -## tupleMultiplyByNumber - -導入バージョン: v21.11 - -すべての要素を指定した数値で乗算したタプルを返します。 - -**構文** - -```sql -tupleMultiplyByNumber(tuple, number) -``` - -**引数** - -* `tuple` — 乗算するタプル。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) または [`Tuple(Float*)`](/sql-reference/data-types/tuple) または [`Tuple(Decimal)`](/sql-reference/data-types/tuple) -* `number` — 乗数。[`(U)Int*`](/sql-reference/data-types/int-uint) または [`Float*`](/sql-reference/data-types/float) または [`Decimal`](/sql-reference/data-types/decimal) - -**戻り値** - -各要素を乗算したタプルを返します。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) または [`Tuple(Float*)`](/sql-reference/data-types/tuple) または [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**例** - -**基本的な使い方** - -```sql title=Query -SELECT tupleMultiplyByNumber((1, 2), -2.1) -``` - -```response title=Response -(-2.1, -4.2) -``` - - -## tupleNames - -導入バージョン: v - -タプルを、その列名からなる配列に変換します。`Tuple(a T, b T, ...)` という形式のタプルに対して、そのタプル内の名前付き列を表す文字列の配列を返します。タプル要素に明示的な名前が付いていない場合は、その要素のインデックスが列名として使用されます。 - -**構文** - -```sql -``` - -**引数** - -* なし。 - -**戻り値** - -**例** - -**典型的な例** - -```sql title=Query -SELECT tupleNames(tuple(1 as a, 2 as b)) -``` - -```response title=Response -['a','b'] -``` - - -## tupleNegate - -導入バージョン: v21.11 - -タプルの各要素の符号を反転します。 - -**構文** - -```sql -tupleNegate(t) -``` - -**引数** - -* `t` — 符号を反転するタプル。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) または [`Tuple(Float*)`](/sql-reference/data-types/tuple) または [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**戻り値** - -符号反転した結果のタプルを返します。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) または [`Tuple(Float*)`](/sql-reference/data-types/tuple) または [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**例** - -**基本的な使い方** - -```sql title=Query -SELECT tupleNegate((1, 2)) -``` - -```response title=Response -(-1, -2) -``` - - -## tuplePlus - -導入バージョン: v21.11 - -同じ長さの2つのタプルについて、対応する要素同士を加算します。 - -**構文** - -```sql -tuplePlus(t1, t2) -``` - -**別名**: `vectorSum` - -**引数** - -* `t1` — 1 番目のタプル。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) または [`Tuple(Float*)`](/sql-reference/data-types/tuple) または [`Tuple(Decimal)`](/sql-reference/data-types/tuple) -* `t2` — 2 番目のタプル。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) または [`Tuple(Float*)`](/sql-reference/data-types/tuple) または [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**戻り値** - -対応する各入力タプル要素の和を含むタプルを返します。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) または [`Tuple(Float*)`](/sql-reference/data-types/tuple) または [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**例** - -**基本的な使い方** - -```sql title=Query -SELECT tuplePlus((1, 2), (2, 3)) -``` - -```response title=Response -(3, 5) -``` - - -## tupleToNameValuePairs - -導入: v21.9 - -タプルを `(name, value)` のペアの配列に変換します。 -例えば、タプル `Tuple(n1 T1, n2 T2, ...)` は `Array(Tuple('n1', T1), Tuple('n2', T2), ...)` に変換されます。 -タプル内のすべての値は同じ型である必要があります。 - -**構文** - -```sql -tupleToNameValuePairs(tuple) -``` - -**引数** - -* `tuple` — 任意の型の値を持つ名前付きタプル。[`Tuple(n1 T1[, n2 T2, ...])`](/sql-reference/data-types/tuple) - -**戻り値** - -`(name, value)` のペアを要素とする配列を返します。[`Array(Tuple(String, T))`](/sql-reference/data-types/array) - -**例** - -**名前付きタプル** - -```sql title=Query -SELECT tupleToNameValuePairs(tuple(1593 AS user_ID, 2502 AS session_ID)) -``` - -```response title=Response -[('1', 1593), ('2', 2502)] -``` - -**無名タプル** - -```sql title=Query -SELECT tupleToNameValuePairs(tuple(3, 2, 1)) -``` - -```response title=Response -[('1', 3), ('2', 2), ('3', 1)] -``` - {/*AUTOGENERATED_END*/ } ## untuple -呼び出し箇所で [tuple](/sql-reference/data-types/tuple) 要素の構文的な置換を行います。 +呼び出し位置で [tuple](/sql-reference/data-types/tuple) 要素の構文上の置換を行います。 -結果列の名前は実装依存であり、将来変更される可能性があります。`untuple` 実行後の特定の列名に依存しないでください。 +結果列の名前は実装依存であり、今後変更される可能性があります。`untuple` 実行後の特定の列名を前提としないでください。 **構文** @@ -846,19 +33,19 @@ SELECT tupleToNameValuePairs(tuple(3, 2, 1)) untuple(x) ``` -クエリ結果から特定の列を除外するために `EXCEPT` 式を使用できます。 +クエリの結果から特定の列を除外するには、`EXCEPT` 式を使用できます。 **引数** -* `x` — `tuple` 関数、列、または要素のタプル。[Tuple](../data-types/tuple.md)。 +* `x` — `tuple` 関数、列、または要素のタプル。 [Tuple](../data-types/tuple.md)。 -**返される値** +**戻り値** * なし。 **例** -入力テーブル: +入力テーブル: ```text ┌─key─┬─v1─┬─v2─┬─v3─┬─v4─┬─v5─┬─v6────────┐ @@ -870,15 +57,15 @@ untuple(x) └─────┴────┴────┴────┴────┴────┴───────────┘ ``` -`untuple` 関数のパラメータとして `Tuple` 型の列を使用する例: +`untuple` 関数の引数として `Tuple` 型の列を使用する例: -クエリ: +クエリ: ```sql SELECT untuple(v6) FROM kv; ``` -結果: +結果: ```text ┌─_ut_1─┬─_ut_2─┐ @@ -913,4 +100,4 @@ SELECT untuple((* EXCEPT (v2, v3),)) FROM kv; ## 距離関数 {#distance-functions} -サポートされているすべての関数については、[距離関数のドキュメント](../../sql-reference/functions/distance-functions.md)を参照してください。 +サポートされている関数はすべて、[距離関数のドキュメント](../../sql-reference/functions/distance-functions.md)で説明されています。 \ No newline at end of file diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/ulid-functions.md b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/ulid-functions.md index 1d877f545d6..2964958d131 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/ulid-functions.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/ulid-functions.md @@ -1,13 +1,11 @@ --- description: 'ULID を扱う関数のドキュメント' -sidebar_label: 'ULID 関数' +sidebar_label: 'ULID' slug: /sql-reference/functions/ulid-functions title: 'ULID を扱う関数' doc_type: 'reference' --- - - # ULID を扱うための関数 :::note @@ -15,100 +13,16 @@ doc_type: 'reference' ::: {/* - 以下のタグ内部の内容は、ドキュメントフレームワークのビルド時に - system.functions から自動生成されたドキュメントで置き換えられます。タグを変更または削除しないでください。 + 以下のタグの内部のコンテンツは、ドキュメントフレームワークのビルド時に + system.functions から自動生成されたドキュメントで置き換えられます。タグは変更や削除をしないでください。 詳細は https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md を参照してください。 */ } - {/*AUTOGENERATED_START*/ } -## ULIDStringToDateTime - -導入バージョン: v23.3 - -この関数は、[ULID](([https://github.com/ulid/spec](https://github.com/ulid/spec)) に含まれるタイムスタンプを抽出します。 - -**構文** - -```sql -ULIDStringToDateTime(ulid[, timezone]) -``` - -**引数** - -* `ulid` — 入力ULID。[`String`](/sql-reference/data-types/string) または [`FixedString(26)`](/sql-reference/data-types/fixedstring) -* `timezone` — オプション。返される値に対して使用するタイムゾーン名。[`String`](/sql-reference/data-types/string) - -**返り値** - -ミリ秒精度のタイムスタンプ値。[`DateTime64(3)`](/sql-reference/data-types/datetime64) - -**例** - -**使用例** - -```sql title=Query -SELECT ULIDStringToDateTime('01GNB2S2FGN2P93QPXDNB4EN2R') -``` - -```response title=Response -┌─ULIDStringToDateTime('01GNB2S2FGN2P93QPXDNB4EN2R')─┐ -│ 2022-12-28 00:40:37.616 │ -└────────────────────────────────────────────────────┘ -``` - - -## generateULID - -導入バージョン: v23.2 - -[Universally Unique Lexicographically Sortable Identifier (ULID)](https://github.com/ulid/spec) を生成します。 - -**構文** - -```sql -generateULID([x]) -``` - -**引数** - -* `x` — 省略可。サポートされている任意のデータ型の値を返す式。結果の値自体は破棄されますが、クエリ内でこの関数が複数回呼び出される場合に、[共通部分式除去](/sql-reference/functions/overview#common-subexpression-elimination) を回避するために式そのものが利用されます。型は [`Any`](/sql-reference/data-types) です。 - -**戻り値** - -ULID を返します。型は [`FixedString(26)`](/sql-reference/data-types/fixedstring) です。 - -**例** - -**使用例** - -```sql title=Query -SELECT generateULID() -``` - -```response title=Response -┌─generateULID()─────────────┐ -│ 01GNB2S2FGN2P93QPXDNB4EN2R │ -└────────────────────────────┘ -``` - -**1 行に複数の値を生成する必要がある場合の使用例** - -```sql title=Query -SELECT generateULID(1), generateULID(2) -``` - -```response title=Response -┌─generateULID(1)────────────┬─generateULID(2)────────────┐ -│ 01GNB2SGG4RHKVNT9ZGA4FFMNP │ 01GNB2SGG4V0HMQVH4VBVPSSRB │ -└────────────────────────────┴────────────────────────────┘ -``` - {/*AUTOGENERATED_END*/ } ## 関連項目 {#see-also} -- [UUID](../../sql-reference/functions/uuid-functions.md) - +- [UUID](../../sql-reference/functions/uuid-functions.md) \ No newline at end of file diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/url-functions.md b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/url-functions.md index d1a292eddfc..f80256bac2c 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/url-functions.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/url-functions.md @@ -1,26 +1,22 @@ --- -description: 'URL を処理する関数のドキュメント' +description: 'URL を扱う関数のドキュメント' sidebar_label: 'URL' slug: /sql-reference/functions/url-functions -title: 'URL を処理する関数' +title: 'URL を扱う関数' doc_type: 'reference' --- - - # URL を操作する関数 - - ## 概要 :::note -このセクションで言及されている関数は、最大のパフォーマンスを発揮するように最適化されており、ほとんどの場合 RFC-3986 標準には準拠していません。 -RFC-3986 を実装している関数は、関数名に `RFC` が付加されており、一般に処理が遅くなります。 +このセクションで説明する関数はパフォーマンスを最大化するよう最適化されており、多くの場合 RFC 3986 標準には準拠していません。 +RFC 3986 を実装している関数には、関数名に `RFC` が付与されており、一般的に非 `RFC` 版よりも低速です。 ::: -ユーザー情報文字列や `@` 記号を含まない公開登録ドメインを扱う場合は、通常は `RFC` なしの関数バリアントを使用できます。 -以下の表は、URL 内のどの記号が `RFC` 版および非 `RFC` 版によってパース可能(`✔`)または不可能(`✗`)かを示しています。 +ユーザー情報や `@` 記号を含まない、公開登録されたドメインを扱う場合は、通常は非 `RFC` 版の関数を使用できます。 +以下の表では、URL 内の記号のうち、対応する `RFC` 版および非 `RFC` 版の関数でパースできるもの(`✔`)とできないもの(`✗`)を示しています。 | Symbol | non-`RFC` | `RFC` | | | ----------- | --------- | ----- | - | @@ -41,1400 +37,24 @@ RFC-3986 を実装している関数は、関数名に `RFC` が付加されて | = | ✗ | ✔* | | | & | ✗ | ✔* | | -`*` が付いている記号は RFC 3986 におけるサブデリミタであり、`@` 記号に続くユーザー情報で使用することが許可されています。 +`*` が付いている記号は RFC 3986 におけるサブデリミタであり、`@` 記号の後に続くユーザー情報として使用可能です。 URL 関数には次の 2 種類があります。 -* URL の一部を抽出する関数。該当部分が URL に存在しない場合は、空文字列が返されます。 -* URL の一部を削除する関数。削除対象となる部分が URL に存在しない場合、URL は変更されません。 +* URL の一部を抽出する関数。対象部分が URL に存在しない場合は空文字列を返します。 +* URL の一部を削除する関数。URL に該当する部分が存在しない場合、その URL は変更されません。 :::note -以下の関数は、`system.functions` システムテーブルから生成されています。 +以下の関数は `system.functions` システムテーブルから生成されています。 ::: {/* 以下のタグ内のコンテンツは、ドキュメントフレームワークのビルド時に - system.functions から生成されたドキュメントに置き換えられます。タグを変更したり削除したりしないでください。 + system.functions から自動生成されたドキュメントで置き換えられます。 + これらのタグを変更または削除しないでください。 詳細は https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md を参照してください。 */ } - {/*AUTOGENERATED_START*/ } -## cutFragment - -導入バージョン: v1.1 - -URL から、番号記号 (#) を含むフラグメント識別子を削除します。 - -**構文** - -```sql -cutFragment(url) -``` - -**引数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) - -**戻り値** - -フラグメント識別子を取り除いた URL を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT cutFragment('http://example.com/path?query=value#fragment123'); -``` - -```response title=Response -┌─cutFragment('http://example.com/path?query=value#fragment123')─┐ -│ http://example.com/path?query=value │ -└────────────────────────────────────────────────────────────────┘ -``` - - -## cutQueryString - -導入バージョン: v1.1 - -URL からクエリ文字列(先頭の「?」を含む)を削除します。 - -**構文** - -```sql -cutQueryString(url) -``` - -**引数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) - -**戻り値** - -クエリ文字列を削除したURLを返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT cutQueryString('http://example.com/path?query=value¶m=123#fragment'); -``` - -```response title=Response -┌─cutQueryString('http://example.com/path?query=value¶m=123#fragment')─┐ -│ http://example.com/path#fragment │ -└──────────────────────────────────────────────────────────────────────────┘ -``` - - -## cutQueryStringAndFragment - -導入バージョン: v1.1 - -URL からクエリ文字列とフラグメント識別子(「?」と「#」を含む)を削除します。 - -**構文** - -```sql -cutQueryStringAndFragment(url) -``` - -**引数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) - -**戻り値** - -クエリ文字列およびフラグメント識別子を取り除いた URL を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT cutQueryStringAndFragment('http://example.com/path?query=value¶m=123#fragment'); -``` - -```response title=Response -┌─cutQueryStringAndFragment('http://example.com/path?query=value¶m=123#fragment')─┐ -│ http://example.com/path │ -└─────────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## cutToFirstSignificantSubdomain - -導入: v1.1 - -トップレベルドメイン側から見て、[最初の重要なサブドメイン](/sql-reference/functions/url-functions#firstSignificantSubdomain) までのサブドメインを含むドメイン部分を返します。 - -**構文** - -```sql -cutToFirstSignificantSubdomain(url) -``` - -**引数** - -* `url` — 処理する URL またはドメイン文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -可能な場合は、最初の主要なサブドメインまでを含むドメインの上位サブドメイン部分を返し、そうでない場合は空文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT - cutToFirstSignificantSubdomain('https://news.clickhouse.com.tr/'), - cutToFirstSignificantSubdomain('www.tr'), - cutToFirstSignificantSubdomain('tr'); -``` - -```response title=Response -┌─cutToFirstSignificantSubdomain('https://news.clickhouse.com.tr/')─┬─cutToFirstSignificantSubdomain('www.tr')─┬─cutToFirstSignificantSubdomain('tr')─┐ -│ clickhouse.com.tr │ tr │ │ -└───────────────────────────────────────────────────────────────────┴──────────────────────────────────────────┴──────────────────────────────────────┘ -``` - - -## cutToFirstSignificantSubdomainCustom - -導入バージョン: v21.1 - -トップレベルドメイン配下のサブドメインを含め、最初の重要なサブドメインまでのドメイン部分を返します。カスタムの [TLD リスト](https://en.wikipedia.org/wiki/List_of_Internet_top-level_domains) 名を受け取ります。最新の TLD リストが必要な場合や、独自のリストを使用する場合に便利です。 - -**設定例** - -```yaml - - - - public_suffix_list.dat - - -``` - -**構文** - -```sql -cutToFirstSignificantSubdomainCustom(url, tld_list_name) -``` - -**引数** - -* `url` — 処理対象の URL またはドメイン文字列。[`String`](/sql-reference/data-types/string) -* `tld_list_name` — ClickHouse で設定されたカスタム TLD リストの名前。[`const String`](/sql-reference/data-types/string) - -**戻り値** - -最初の意味のあるサブドメインまでを含む、トップレベルドメイン配下のドメイン部分を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**非標準的なドメイン向けにカスタム TLD リストを使用する** - -```sql title=Query -SELECT cutToFirstSignificantSubdomainCustom('bar.foo.there-is-no-such-domain', 'public_suffix_list') -``` - -```response title=Response -foo.there-is-no-such-domain -``` - - -## cutToFirstSignificantSubdomainCustomRFC - -導入バージョン: v22.10 - -トップレベルドメインを含めて、最初の有意なサブドメインまでのドメイン部分を返します。 -カスタムの [TLD リスト](https://en.wikipedia.org/wiki/List_of_Internet_top-level_domains)名を受け取ります。 -この関数は、新しい TLD リストが必要な場合や、カスタムリストを使用している場合に有用です。 -[cutToFirstSignificantSubdomainCustom](#cutToFirstSignificantSubdomainCustom) と似ていますが、RFC 3986 に準拠しています。 - -**設定例** - -```xml - - - - public_suffix_list.dat - - -``` - -**構文** - -```sql -cutToFirstSignificantSubdomainCustomRFC(url, tld_list_name) -``` - -**引数** - -* `url` — RFC 3986 に従って処理する URL またはドメイン文字列。 -* `tld_list_name` — ClickHouse で設定されたカスタム TLD リストの名前。 - -**戻り値** - -トップレベルドメインから最初の有意なサブドメインまでを含むドメイン部分を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT cutToFirstSignificantSubdomainCustomRFC('www.foo', 'public_suffix_list'); -``` - -```response title=Response -┌─cutToFirstSignificantSubdomainCustomRFC('www.foo', 'public_suffix_list')─────┐ -│ www.foo │ -└──────────────────────────────────────────────────────────────────────────────┘ -``` - - -## cutToFirstSignificantSubdomainCustomWithWWW - -導入バージョン: v21.1 - -トップレベルのサブドメインを含めて、最初の重要なサブドメインまでのドメイン部分を、`www` を削除せずに返します。カスタム TLD リストの名前を受け取ります。最新の TLD リストを使いたい場合や、独自のリストを使用している場合に便利です。 - -**構成例** - -````yaml - - - - public_suffix_list.dat - - - - -**構文** - -```sql -cutToFirstSignificantSubdomainCustomWithWWW(url, tld_list_name) -```` - -**引数** - -* `url` — 処理対象の URL またはドメイン文字列。 -* `tld_list_name` — ClickHouse で設定されたカスタム TLD リストの名前。 - -**戻り値** - -`www` を取り除かずに、最初の重要なサブドメインまでのトップレベルサブドメインを含むドメインの一部。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT cutToFirstSignificantSubdomainCustomWithWWW('www.foo', 'public_suffix_list'); -``` - -```response title=Response -┌─cutToFirstSignificantSubdomainCustomWithWWW('www.foo', 'public_suffix_list')─┐ -│ www.foo │ -└──────────────────────────────────────────────────────────────────────────────┘ -``` - - -## cutToFirstSignificantSubdomainCustomWithWWWRFC - -導入バージョン: v22.10 - -`www` を削除せずに、ドメインのうち最初の有意なサブドメインまでの上位サブドメインを含む部分を返します。 -カスタム TLD リスト名を指定できます。 -最新の TLD リストが必要な場合や、独自のリストを使用している場合に有用です。 -[cutToFirstSignificantSubdomainCustomWithWWW](#cutToFirstSignificantSubdomainCustomWithWWW) と似ていますが、[RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986) に準拠しています。 - -**設定例** - -````xml - - - - public_suffix_list.dat - - - - -**構文** - -```sql -cutToFirstSignificantSubdomainCustomWithWWWRFC(url, tld_list_name) -```` - -**引数** - -* `url` — RFC 3986 に従って処理する URL またはドメイン文字列。 -* `tld_list_name` — ClickHouse で設定されたカスタム TLD リストの名前。 - -**戻り値** - -`www` を取り除かずに、最初の意味のあるサブドメインまでの最上位レベルのサブドメインを含むドメイン部分を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**カスタム TLD リストを使用し、`www` を保持した RFC 3986 に基づくパース** - -```sql title=Query -SELECT cutToFirstSignificantSubdomainCustomWithWWWRFC('https://www.subdomain.example.custom', 'public_suffix_list') -``` - -```response title=Response -www.example.custom -``` - - -## cutToFirstSignificantSubdomainRFC - -導入バージョン: v22.10 - -ドメインのうち、トップレベルドメイン側から [「最初の重要なサブドメイン」](/sql-reference/functions/url-functions#firstSignificantSubdomain) までを含む部分を返します。[`cutToFirstSignificantSubdomain`](#cutToFirstSignificantSubdomain) と同様ですが、[RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986) に準拠します。 - -**構文** - -```sql -cutToFirstSignificantSubdomainRFC(url) -``` - -**引数** - -* `url` — RFC 3986 に従って処理する URL またはドメイン文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -可能であれば、最初の意味のあるサブドメインまでを含むトップレベルドメイン配下のドメイン部分を返し、それ以外の場合は空文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT - cutToFirstSignificantSubdomain('http://user:password@example.com:8080'), - cutToFirstSignificantSubdomainRFC('http://user:password@example.com:8080'); -``` - -```response title=Response -┌─cutToFirstSignificantSubdomain('http://user:password@example.com:8080')─┬─cutToFirstSignificantSubdomainRFC('http://user:password@example.com:8080')─┐ -│ │ example.com │ -└─────────────────────────────────────────────────────────────────────────┴────────────────────────────────────────────────────────────────────────────┘ -``` - - -## cutToFirstSignificantSubdomainWithWWW - -導入バージョン: v20.12 - -トップレベルのサブドメインを、「最初の重要なサブドメイン」まで含めたドメイン部分を返しますが、'[www](http://www).' は取り除きません。 - -[`cutToFirstSignificantSubdomain`](#cutToFirstSignificantSubdomain) と似ていますが、存在する場合は '[www](http://www).' のプレフィックスを保持します。 - -**構文** - -```sql -cutToFirstSignificantSubdomainWithWWW(url) -``` - -**引数** - -* `url` — 処理対象の URL またはドメイン文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -可能であれば、www を含め、最初の重要なサブドメインまでの上位サブドメインを含むドメイン部分を返します。そうでない場合は空文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT - cutToFirstSignificantSubdomainWithWWW('https://news.clickhouse.com.tr/'), - cutToFirstSignificantSubdomainWithWWW('www.tr'), - cutToFirstSignificantSubdomainWithWWW('tr'); -``` - -```response title=Response -┌─cutToFirstSignificantSubdomainWithWWW('https://news.clickhouse.com.tr/')─┬─cutToFirstSignificantSubdomainWithWWW('www.tr')─┬─cutToFirstSignificantSubdomainWithWWW('tr')─┐ -│ clickhouse.com.tr │ www.tr │ │ -└──────────────────────────────────────────────────────────────────────────┴─────────────────────────────────────────────────┴─────────────────────────────────────────────┘ -``` - - -## cutToFirstSignificantSubdomainWithWWWRFC - -導入バージョン: v22.10 - -トップレベルサブドメインを「最初の重要なサブドメイン」まで含むドメイン部分を、'www' を削除せずに返します。[`cutToFirstSignificantSubdomainWithWWW`](#cutToFirstSignificantSubdomainWithWWW) に似ていますが、[RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986) に準拠しています。 - -**構文** - -```sql -cutToFirstSignificantSubdomainWithWWWRFC(url) -``` - -**引数** - -* `url` — RFC 3986 に従って処理される URL またはドメイン文字列。 - -**戻り値** - -ドメインのうち、可能であれば最初の有意なサブドメインまで(「www」を含む)を含む部分を返し、それが不可能な場合は空文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT - cutToFirstSignificantSubdomainWithWWW('http:%2F%2Fwwwww.nova@mail.ru/economicheskiy'), - cutToFirstSignificantSubdomainWithWWWRFC('http:%2F%2Fwwwww.nova@mail.ru/economicheskiy'); -``` - -```response title=Response -┌─cutToFirstSignificantSubdomainWithWWW('http:%2F%2Fwwwww.nova@mail.ru/economicheskiy')─┬─cutToFirstSignificantSubdomainWithWWWRFC('http:%2F%2Fwwwww.nova@mail.ru/economicheskiy')─┐ -│ │ mail.ru │ -└───────────────────────────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## cutURLParameter - -導入バージョン: v1.1 - -URL に `name` パラメーターが存在する場合、それを削除します。 -この関数はパラメーター名内の文字のエンコードやデコードを行いません。そのため、`Client ID` と `Client%20ID` は別個のパラメーター名として扱われます。 - -**構文** - -```sql -cutURLParameter(url, name) -``` - -**引数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) -* `name` — URL パラメータ名。[`String`](/sql-reference/data-types/string) または [`Array(String)`](/sql-reference/data-types/array) - -**戻り値** - -`name` という URL パラメータが削除された URL。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT - cutURLParameter('http://bigmir.net/?a=b&c=d&e=f#g', 'a') AS url_without_a, - cutURLParameter('http://bigmir.net/?a=b&c=d&e=f#g', ['c', 'e']) AS url_without_c_and_e; -``` - -```response title=Response -┌─url_without_a────────────────┬─url_without_c_and_e──────┐ -│ http://bigmir.net/?c=d&e=f#g │ http://bigmir.net/?a=b#g │ -└──────────────────────────────┴──────────────────────────┘ -``` - - -## cutWWW - -導入バージョン: v1.1 - -URL のドメインの先頭に `www.` がある場合、それを削除します。 - -**構文** - -```sql -cutWWW(url) -``` - -**引数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) - -**戻り値** - -ドメイン名から先頭の `www.` を取り除いた URL を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT cutWWW('http://www.example.com/path?query=value#fragment'); -``` - -```response title=Response -┌─cutWWW('http://www.example.com/path?query=value#fragment')─┐ -│ http://example.com/path?query=value#fragment │ -└────────────────────────────────────────────────────────────┘ -``` - - -## decodeURLComponent - -導入バージョン: v1.1 - -URL エンコードされた文字列を入力として受け取り、元の読みやすい形式にデコードします。 - -**構文** - -```sql -decodeURLComponent(url) -``` - -**引数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) - -**戻り値** - -デコードされたURLを返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT decodeURLComponent('http://127.0.0.1:8123/?query=SELECT%201%3B') AS DecodedURL; -``` - -```response title=Response -┌─デコード後のURL─────────────────────────┐ -│ http://127.0.0.1:8123/?query=SELECT 1; │ -└────────────────────────────────────────┘ -``` - - -## decodeURLFormComponent - -v1.1 で導入 - -フォームエンコードの規則([RFC-1866](https://www.rfc-editor.org/rfc/rfc1866.html))に従って URL エンコードされた文字列をデコードします。`+` 記号は空白に変換され、パーセントエンコードされた文字がデコードされます。 - -**構文** - -```sql -decodeURLFormComponent(url) -``` - -**引数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) - -**戻り値** - -URL をデコードした結果を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT decodeURLFormComponent('http://127.0.0.1:8123/?query=SELECT%201+2%2B3') AS DecodedURL; -``` - -```response title=Response -┌─DecodedURL────────────────────────────────┐ -│ http://127.0.0.1:8123/?query=SELECT 1 2+3 │ -└───────────────────────────────────────────┘ -``` - - -## domain - -導入バージョン: v1.1 - -URL からホスト名を抽出します。 - -URL はプロトコルの有無にかかわらず指定できます。 - -**構文** - -```sql -domain(url) -``` - -**引数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) - -**戻り値** - -入力文字列が URL として解釈できる場合はホスト名を返し、それ以外の場合は空文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT domain('svn+ssh://some.svn-hosting.com:80/repo/trunk'); -``` - -```response title=Response -┌─domain('svn+ssh://some.svn-hosting.com:80/repo/trunk')─┐ -│ some.svn-hosting.com │ -└────────────────────────────────────────────────────────┘ -``` - - -## domainRFC - -導入: v22.10 - -URL からホスト名を抽出します。 -[`domain`](#domain) と同様ですが、[RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986) に準拠しています。 - -**構文** - -```sql -domainRFC(url) -``` - -**引数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) - -**戻り値** - -入力文字列を URL として解釈できる場合はホスト名を返し、それ以外の場合は空文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT - domain('http://user:password@example.com:8080/path?query=value#fragment'), - domainRFC('http://user:password@example.com:8080/path?query=value#fragment'); -``` - -```response title=Response -┌─domain('http://user:password@example.com:8080/path?query=value#fragment')─┬─domainRFC('http://user:password@example.com:8080/path?query=value#fragment')─┐ -│ │ example.com │ -└───────────────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────────────────────────┘ -``` - - -## domainWithoutWWW - -導入バージョン: v1.1 - -URL のドメイン名を返します。先頭に `www.` が付いている場合は、それを取り除きます。 - -**構文** - -```sql -domainWithoutWWW(url) -``` - -**引数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) - -**戻り値** - -入力文字列が URL として解析可能な場合はドメイン名(先頭の `www.` を除く)を返し、それ以外の場合は空文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT domainWithoutWWW('http://paul@www.example.com:80/'); -``` - -```response title=Response -┌─domainWithoutWWW('http://paul@www.example.com:80/')─┐ -│ example.com │ -└─────────────────────────────────────────────────────┘ -``` - - -## domainWithoutWWWRFC - -導入: v1.1 - -先頭に `www.` が付いている場合、それを取り除いたドメインを返します。[`domainWithoutWWW`](#domainWithoutWWW) と似ていますが、[RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986) に準拠しています。 - -**構文** - -```sql -domainWithoutWWWRFC(url) -``` - -**引数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) - -**戻り値** - -入力文字列が URL としてパースできる場合はドメイン名(先頭の `www.` を除く)を返し、それ以外の場合は空の文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT - domainWithoutWWW('http://user:password@www.example.com:8080/path?query=value#fragment'), - domainWithoutWWWRFC('http://user:password@www.example.com:8080/path?query=value#fragment'); -``` - -```response title=Response -┌─domainWithoutWWW('http://user:password@www.example.com:8080/path?query=value#fragment')─┬─domainWithoutWWWRFC('http://user:password@www.example.com:8080/path?query=value#fragment')─┐ -│ │ example.com │ -└─────────────────────────────────────────────────────────────────────────────────────────┴────────────────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## encodeURLComponent - -導入: v22.3 - -通常の文字列を受け取り、特殊文字を対応するパーセントエンコード表現に置き換えた URL エンコード(パーセントエンコード)形式に変換します。 - -**構文** - -```sql -encodeURLComponent(url) -``` - -**引数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) - -**戻り値** - -エンコードされた URL を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT encodeURLComponent('http://127.0.0.1:8123/?query=SELECT 1;') AS EncodedURL; -``` - -```response title=Response -┌─EncodedURL───────────────────────────────────────────────┐ -│ http%3A%2F%2F127.0.0.1%3A8123%2F%3Fquery%3DSELECT%201%3B │ -└──────────────────────────────────────────────────────────┘ -``` - - -## encodeURLFormComponent - -導入バージョン: v22.3 - -フォームエンコードの規則([RFC-1866](https://www.rfc-editor.org/rfc/rfc1866.html))に従って文字列をエンコードします。スペースは+記号に変換され、特殊文字はパーセントエンコードされます。 - -**構文** - -```sql -encodeURLFormComponent(url) -``` - -**引数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) - -**戻り値** - -エンコードされた URL を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT encodeURLFormComponent('http://127.0.0.1:8123/?query=SELECT 1 2+3') AS EncodedURL; -``` - -```response title=Response -┌─EncodedURL────────────────────────────────────────────────┐ -│ http%3A%2F%2F127.0.0.1%3A8123%2F%3Fquery%3DSELECT+1+2%2B3 │ -└───────────────────────────────────────────────────────────┘ -``` - - -## extractURLParameter - -導入バージョン: v1.1 - -URL に `name` パラメータが存在する場合はその値を返し、存在しない場合は空文字列を返します。 -この名前のパラメータが複数ある場合、最初に出現したものを返します。 -関数は、`url` 引数で指定された URL 内のパラメータが、`name` 引数と同じ方法でエンコードされていることを前提とします。 - -**構文** - -```sql -extractURLParameter(url, name) -``` - -**引数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) -* `name` — パラメータ名。[`String`](/sql-reference/data-types/string) - -**戻り値** - -指定した名前の URL パラメータの値を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT extractURLParameter('http://example.com/?param1=value1¶m2=value2', 'param1'); -``` - -```response title=Response -┌─extractURLPa⋯, 'param1')─┐ -│ value1 │ -└──────────────────────────┘ -``` - - -## extractURLParameterNames - -導入バージョン: v1.1 - -URL パラメータ名に対応する文字列の配列を返します。 -値はデコードされません。 - -**構文** - -```sql -extractURLParameterNames(url) -``` - -**引数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) - -**戻り値** - -URL パラメータの名前に対応する文字列の配列を返します。[`Array(String)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT extractURLParameterNames('http://example.com/?param1=value1¶m2=value2'); -``` - -```response title=Response -┌─extractURLPa⋯m2=value2')─┐ -│ ['param1','param2'] │ -└──────────────────────────┘ -``` - - -## extractURLParameters - -導入: v1.1 - -URL パラメータに対応する `name=value` 形式の文字列の配列を返します。 -値はデコードされません。 - -**構文** - -```sql -extractURLParameters(url) -``` - -**引数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) - -**戻り値** - -URL パラメーターに対応する `name=value` 形式の文字列の配列を返します。[`Array(String)`](/sql-reference/data-types/array) - -**例** - -**使用例** - -```sql title=Query -SELECT extractURLParameters('http://example.com/?param1=value1¶m2=value2'); -``` - -```response title=Response -┌─extractURLParame⋯¶m2=value2')─┐ -│ ['param1=value1','param2=value2'] │ -└───────────────────────────────────┘ -``` - - -## firstSignificantSubdomain - -導入バージョン: v - -「最初の重要なサブドメイン」を返します。 - -最初の重要なサブドメインは、'com'、'net'、'org'、または 'co' のいずれかである場合は第二レベルドメインです。 -それ以外の場合は、第三レベルドメインになります。 - -たとえば、firstSignificantSubdomain('[https://news.clickhouse.com/](https://news.clickhouse.com/)') = 'clickhouse'、firstSignificantSubdomain ('[https://news.clickhouse.com.tr/](https://news.clickhouse.com.tr/)') = 'clickhouse' となります。 - -「重要ではない」第二レベルドメインの一覧やその他の実装の詳細は、将来変更される可能性があります。 - -**構文** - -```sql -``` - -**引数** - -* なし - -**返り値** - -**例** - -**firstSignificantSubdomain** - -```sql title=Query -SELECT firstSignificantSubdomain('https://news.clickhouse.com/') -``` - -```response title=Response -``` - - -## firstSignificantSubdomainRFC - -導入バージョン: v - -RFC 1034 に従って「先頭の有意なサブドメイン」を返します。 - -**構文** - -```sql -``` - -**引数** - -* なし。 - -**戻り値** - -**例** - - -## fragment - -導入バージョン:v1.1 - -先頭のハッシュ記号を除いたフラグメント識別子を返します。 - -**構文** - -```sql -フラグメント(url) -``` - -**引数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) - -**戻り値** - -先頭のハッシュ記号を除いたフラグメント識別子を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT fragment('https://clickhouse.com/docs/getting-started/quick-start/cloud#1-create-a-clickhouse-service'); -``` - -```response title=Response -┌─fragment('http⋯ouse-service')─┐ -│ 1-create-a-clickhouse-service │ -└───────────────────────────────┘ -``` - - -## netloc - -導入バージョン: v20.5 - -URL からネットワークロケーション(`username:password@host:port` の部分)を抽出します。 - -**構文** - -```sql -netloc(url) -``` - -**引数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) - -**戻り値** - -指定された URL から `username:password@host:port` を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT netloc('http://paul@www.example.com:80/'); -``` - -```response title=Response -┌─netloc('http⋯e.com:80/')─┐ -│ paul@www.example.com:80 │ -└──────────────────────────┘ -``` - - -## path - -導入バージョン: v1.1 - -URL からクエリ文字列を除いたパス部分を返します。 - -**構文** - -```sql -パス(url) -``` - -**引数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) - -**戻り値** - -クエリ文字列を除いた URL のパス部分を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT path('https://clickhouse.com/docs/sql-reference/functions/url-functions/?query=value'); -``` - -```response title=Response -┌─path('https://clickhouse.com/en/sql-reference/functions/url-functions/?query=value')─┐ -│ /docs/sql-reference/functions/url-functions/ │ -└──────────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## pathFull - -導入: v1.1 - -[`path`](#path) と同様ですが、URL のクエリ文字列とフラグメント部分も含めます。 - -**構文** - -```sql -pathFull(url) -``` - -**引数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) - -**戻り値** - -クエリ文字列およびフラグメントを含む URL のパスを返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT pathFull('https://clickhouse.com/docs/sql-reference/functions/url-functions/?query=value#section'); -``` - -```response title=Response -┌─pathFull('https://clickhouse.com⋯unctions/?query=value#section')─┐ -│ /docs/sql-reference/functions/url-functions/?query=value#section │ -└──────────────────────────────────────────────────────────────────┘ -``` - - -## port - -導入: v20.5 - -URL のポート番号を返します。URL にポート番号が含まれていない場合、または URL を解析できない場合は `default_port` を返します。 - -**構文** - -```sql -port(url[, default_port]) -``` - -**引数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) -* `default_port` — 省略可能。返されるデフォルトのポート番号。既定値は `0`。[`UInt16`](/sql-reference/data-types/int-uint) - -**返り値** - -URL のポート番号を返します。URL にポートが含まれていない場合、または検証エラーが発生した場合は、デフォルトのポート番号を返します。[`UInt16`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT port('https://clickhouse.com:8443/docs'), port('https://clickhouse.com/docs', 443); -``` - -```response title=Response -┌─port('https://clickhouse.com:8443/docs')─┬─port('https://clickhouse.com/docs', 443)─┐ -│ 8443 │ 443 │ -└──────────────────────────────────────────┴──────────────────────────────────────────┘ -``` - - -## portRFC - -導入バージョン: v22.10 - -URL からポート番号を返し、URL にポートが含まれていない場合や解析できない場合は `default_port` を返します。 -[`port`](#port) と同様ですが、[RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986) に準拠しています。 - -**構文** - -```sql -portRFC(url[, default_port]) -``` - -**引数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) -* `default_port` — 省略可能。返されるデフォルトのポート番号。既定値は `0`。[`UInt16`](/sql-reference/data-types/int-uint) - -**返される値** - -URL にポートが含まれていない場合、または検証エラーが発生した場合にはデフォルトのポートを、それ以外の場合には URL のポートを返します。[`UInt16`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT port('http://user:password@example.com:8080/'), portRFC('http://user:password@example.com:8080/'); -``` - -```response title=Response -┌─port('http:/⋯com:8080/')─┬─portRFC('htt⋯com:8080/')─┐ -│ 0 │ 8080 │ -└──────────────────────────┴──────────────────────────┘ -``` - - -## protocol - -導入バージョン: v1.1 - -URL からプロトコルを抽出します。 - -返される値の典型例: http、https、ftp、mailto、tel、magnet。 - -**構文** - -```sql -protocol(url) -``` - -**引数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) - -**戻り値** - -URLのプロトコルを返します。判別できない場合は空文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT protocol('https://clickhouse.com/'); -``` - -```response title=Response -┌─protocol('https://clickhouse.com/')─┐ -│ https │ -└─────────────────────────────────────┘ -``` - - -## queryString - -導入バージョン: v1.1 - -URL のクエリ文字列から、先頭の疑問符 (`?`) と `#`、および `#` 以降のすべてを取り除いた文字列を返します。 - -**構文** - -```sql -queryString(url) -``` - -**引数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) - -**戻り値** - -先頭の疑問符とフラグメントを除いたURLのクエリ文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT queryString('https://clickhouse.com/docs?query=value¶m=123#section'); -``` - -```response title=Response -┌─queryString(⋯3#section')─┐ -│ query=value¶m=123 │ -└──────────────────────────┘ -``` - - -## queryStringAndFragment - -導入バージョン: v1.1 - -URL のクエリ文字列とフラグメント識別子を返します。 - -**構文** - -```sql -queryStringAndFragment(url) -``` - -**引数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) - -**戻り値** - -URL のクエリ文字列およびフラグメント識別子を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT queryStringAndFragment('https://clickhouse.com/docs?query=value¶m=123#section'); -``` - -```response title=Response -┌─queryStringAnd⋯=123#section')─┐ -│ query=value¶m=123#section │ -└───────────────────────────────┘ -``` - - -## topLevelDomain - -導入バージョン:v1.1 - -URL からトップレベルドメインを抽出します。 - -:::note -URL はプロトコルの有無にかかわらず指定できます。 -例えば: - -```text -svn+ssh://some.svn-hosting.com:80/repo/trunk -some.svn-hosting.com:80/repo/trunk -https://clickhouse.com/time/ -``` - -::: - -**構文** - -```sql -topLevelDomain(url) -``` - -**引数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) - -**戻り値** - -入力文字列が URL としてパース可能な場合はドメイン名を返します。そうでない場合は空文字列を返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT topLevelDomain('svn+ssh://www.some.svn-hosting.com:80/repo/trunk'); -``` - -```response title=Response -┌─topLevelDomain('svn+ssh://www.some.svn-hosting.com:80/repo/trunk')─┐ -│ com │ -└────────────────────────────────────────────────────────────────────┘ -``` - - -## topLevelDomainRFC - -導入バージョン: v22.10 - -URLからトップレベルドメインを抽出します。 -[`topLevelDomain`](#topLevelDomain) と類似していますが、[RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986) に準拠しています。 - -**構文** - -```sql -topLevelDomainRFC(url) -``` - -**引数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) - -**戻り値** - -入力文字列が URL として解析できる場合はそのドメイン名、それ以外の場合は空文字列。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT topLevelDomain('http://foo:foo%41bar@foo.com'), topLevelDomainRFC('http://foo:foo%41bar@foo.com'); -``` - -```response title=Response -┌─topLevelDomain('http://foo:foo%41bar@foo.com')─┬─topLevelDomainRFC('http://foo:foo%41bar@foo.com')─┐ -│ │ com │ -└────────────────────────────────────────────────┴───────────────────────────────────────────────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/uuid-functions.md b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/uuid-functions.md index 951858c37e5..cc5f75c3644 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/uuid-functions.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/functions/uuid-functions.md @@ -1,6 +1,6 @@ --- -description: 'UUID を扱う関数に関するドキュメント' -sidebar_label: 'UUID' +description: 'UUID を扱う関数のドキュメント' +sidebar_label: 'UUID 関数' slug: /sql-reference/functions/uuid-functions title: 'UUID を扱う関数' doc_type: 'reference' @@ -9,15 +9,13 @@ doc_type: 'reference' import DeprecatedBadge from '@theme/badges/DeprecatedBadge'; -# UUID を扱う関数 - - +# UUID を操作する関数 ## UUIDv7 の生成 -生成される UUID には、Unix ミリ秒単位の 48 ビットのタイムスタンプに続いて、バージョン「7」(4 ビット)、同一ミリ秒内で UUID を区別するためのカウンタ(バリアントフィールドの値「2」(2 ビット)を含む 42 ビット)、およびランダムフィールド(32 ビット)が含まれます。 -任意のタイムスタンプ(`unix_ts_ms`)に対して、カウンタはランダムな値から開始され、タイムスタンプが変化するまで新しい UUID が生成されるたびに 1 ずつ増分されます。カウンタがオーバーフローした場合、タイムスタンプフィールドが 1 増分され、カウンタは新しいランダムな開始値にリセットされます。 -UUID 生成関数は、同時に実行されているスレッドおよびクエリにおけるすべての関数呼び出しにわたり、同一タイムスタンプ内のカウンタフィールドが単調に増加することを保証します。 +生成される UUID は、Unix エポックミリ秒の 48 ビットのタイムスタンプに続いて、バージョン「7」(4 ビット)、1 ミリ秒内で UUID を区別するためのカウンタ(バリアントフィールド「2」(2 ビット)を含む 42 ビット)、およびランダムフィールド(32 ビット)で構成されます。 +任意のタイムスタンプ(`unix_ts_ms`)に対して、カウンタはランダムな値から開始し、タイムスタンプが変化するまで、新しい UUID が生成されるたびに 1 ずつ増加します。カウンタがオーバーフローした場合は、タイムスタンプフィールドが 1 増加し、カウンタは新しいランダムな開始値にリセットされます。 +UUID 生成関数は、同時に実行されているスレッドおよびクエリにおけるすべての関数呼び出しにわたって、同一タイムスタンプ内のカウンタフィールドが単調に増加することを保証します。 ```text 0 1 2 3 @@ -36,26 +34,26 @@ UUID 生成関数は、同時に実行されているスレッドおよびクエ ## Snowflake ID の生成 -生成される Snowflake ID には、現在の Unix タイムスタンプのミリ秒値(41 ビット + 最上位 1 ビットのゼロ)、続いてマシン ID(10 ビット)、さらに同一ミリ秒内の ID を区別するためのカウンタ(12 ビット)が含まれます。任意のタイムスタンプ(`unix_ts_ms`)に対して、カウンタは 0 から開始し、新しい Snowflake ID が生成されるたびに 1 ずつインクリメントされ、タイムスタンプが変わるまで続きます。カウンタがオーバーフローした場合、タイムスタンプフィールドが 1 増加し、カウンタは 0 にリセットされます。 +生成される Snowflake ID には、現在の Unix タイムスタンプ(ミリ秒単位、41 ビット + 先頭のゼロ 1 ビット)、それに続くマシン ID(10 ビット)、および同一ミリ秒内で ID を区別するためのカウンタ(12 ビット)が含まれます。任意のタイムスタンプ(`unix_ts_ms`)に対して、カウンタは 0 から開始し、新しい Snowflake ID が生成されるたびに 1 ずつインクリメントされ、タイムスタンプが変わるまで続きます。カウンタがオーバーフローした場合、タイムスタンプフィールドが 1 増加し、カウンタは 0 にリセットされます。 :::note -生成される Snowflake ID は UNIX エポック 1970-01-01 を基準としています。Snowflake ID のエポックに関する標準や推奨値は存在しないため、他のシステムの実装では、たとえば Twitter/X(2010-11-04)や Mastodon(2015-01-01)のように、異なるエポックが用いられている場合があります。 +生成される Snowflake ID は UNIX エポック 1970-01-01 を基準としています。Snowflake ID のエポックについて標準化された規格や推奨値は存在せず、他のシステムでの実装では異なるエポックを使用している場合があります(例: Twitter/X は 2010-11-04、Mastodon は 2015-01-01)。 ::: ```text 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤ -|0| タイムスタンプ | +|0| timestamp | ├─┼ ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤ -| | マシンID | マシンシーケンス番号 | +| | machine_id | machine_seq_num | └─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘ ``` ## generateUUIDv4 -[バージョン 4](https://tools.ietf.org/html/rfc4122#section-4.4) の [UUID](../data-types/uuid.md) を生成します。 +[バージョン4](https://tools.ietf.org/html/rfc4122#section-4.4) の [UUID](../data-types/uuid.md) を生成します。 **構文** @@ -65,7 +63,7 @@ generateUUIDv4([expr]) **引数** -* `expr` — クエリ内で関数が複数回呼び出される場合に、[共通部分式の除去](/sql-reference/functions/overview#common-subexpression-elimination)を回避するために使用される任意の[式](/sql-reference/syntax#expressions)。式の値は、返される UUID に影響を与えません。省略可能。 +* `expr` — クエリ内で関数が複数回呼び出される場合に、[共通部分式の除去](/sql-reference/functions/overview#common-subexpression-elimination)を回避するために使用される任意の[式](/sql-reference/syntax#expressions)。この式の値は返される UUID には影響しません。省略可能。 **戻り値** @@ -73,7 +71,7 @@ UUIDv4 型の値。 **例** -まず、UUID 型の列を持つテーブルを作成し、次に生成した UUIDv4 をテーブルに挿入します。 +まず、UUID 型の列を持つテーブルを作成し、その後、生成された UUIDv4 をそのテーブルに挿入します。 ```sql CREATE TABLE tab (uuid UUID) ENGINE = Memory; @@ -106,10 +104,10 @@ SELECT generateUUIDv4(1), generateUUIDv4(2); [バージョン 7](https://datatracker.ietf.org/doc/html/draft-peabody-dispatch-new-uuid-format-04) の [UUID](../data-types/uuid.md) を生成します。 -UUID の構造、カウンターの管理、および同時実行性に関する保証の詳細については、「[UUIDv7 generation](#uuidv7-generation)」セクションを参照してください。 +UUID の構造、カウンタの管理、および並行性に関する保証の詳細については、[「UUIDv7 の生成」](#uuidv7-generation) セクションを参照してください。 :::note -2024 年 4 月時点では、バージョン 7 UUID はドラフト段階であり、そのレイアウトは将来変更される可能性があります。 +2024 年 4 月時点では、バージョン 7 UUID はドラフト段階の仕様であり、そのレイアウトは将来的に変更される可能性があります。 ::: **構文** @@ -120,7 +118,7 @@ generateUUIDv7([expr]) **引数** -* `expr` — クエリ内でこの関数が複数回呼び出される場合に、[共通部分式除去](/sql-reference/functions/overview#common-subexpression-elimination)を回避するために使用される任意の[式](/sql-reference/syntax#expressions)。式の値は返される UUID に影響しません。省略可能。 +* `expr` — クエリ内でこの関数が複数回呼び出される場合に、[共通部分式除去](/sql-reference/functions/overview#common-subexpression-elimination)を回避するために使用される任意の[式](/sql-reference/syntax#expressions)。この式の値は、返される UUID には一切影響しません。省略可能。 **戻り値** @@ -128,7 +126,7 @@ UUIDv7 型の値。 **例** -まず UUID 型の列を持つテーブルを作成し、次に生成された UUIDv7 をテーブルに挿入します。 +まず、UUID 型の列を持つテーブルを作成し、その後、生成された UUIDv7 をテーブルに挿入します。 ```sql CREATE TABLE tab (uuid UUID) ENGINE = Memory; @@ -138,7 +136,7 @@ INSERT INTO tab SELECT generateUUIDv7(); SELECT * FROM tab; ``` -結果: +結果: ```response ┌─────────────────────────────────uuid─┐ @@ -146,7 +144,7 @@ SELECT * FROM tab; └──────────────────────────────────────┘ ``` -**行ごとに複数のUUIDを生成する例** +**行ごとに複数の UUID を生成する例** ```sql SELECT generateUUIDv7(1), generateUUIDv7(2); @@ -159,12 +157,12 @@ SELECT generateUUIDv7(1), generateUUIDv7(2); ## dateTimeToUUIDv7 -指定した時刻を表す [DateTime](../data-types/datetime.md) の値を、その時刻に対応する [UUIDv7](https://en.wikipedia.org/wiki/UUID#Version_7) に変換します。 +指定した時刻を表す [DateTime](../data-types/datetime.md) 値を [UUIDv7](https://en.wikipedia.org/wiki/UUID#Version_7) に変換します。 -UUID の構造、カウンタの管理、および並行性に関する保証の詳細については、「[UUIDv7 generation](#uuidv7-generation)」セクションを参照してください。 +UUID の構造、カウンター管理、および並行性の保証については、「[UUIDv7 generation](#uuidv7-generation)」セクションを参照してください。 :::note -2024年4月時点では、バージョン 7 UUID はドラフト仕様であり、そのレイアウトは将来変更される可能性があります。 +2024年4月時点では、バージョン7 UUIDはドラフト仕様であり、そのレイアウトは将来変更される可能性があります。 ::: **構文** @@ -175,9 +173,9 @@ dateTimeToUUIDv7(value) **引数** -* `value` — 日時。 [DateTime](../data-types/datetime.md)。 +* `value` — 日付と時刻。[DateTime](../data-types/datetime.md)。 -**戻り値** +**返される値** UUIDv7 型の値。 @@ -214,12 +212,12 @@ SELECT dateTimeToUUIDv7(toDateTime('2021-08-15 18:57:56')); └──────────────────────────────────────┘ ``` -この関数は、同じタイムスタンプで複数回呼び出された場合でも、一意で単調に増加する UUID が生成されることを保証します。 +この関数は、同じタイムスタンプで複数回呼び出されても、一意で単調増加する UUID を生成することを保証します。 ## empty -入力された UUID が空かどうかを判定します。 +入力された UUID が空かどうかをチェックします。 **構文** @@ -227,21 +225,21 @@ SELECT dateTimeToUUIDv7(toDateTime('2021-08-15 18:57:56')); empty(UUID) ``` -UUID がすべてゼロ(ゼロ UUID)である場合、その UUID は空とみなされます。 +UUID がすべてゼロ(ゼロ UUID)で構成されている場合、それは空と見なされます。 この関数は Array および String に対しても動作します。 **引数** -* `x` — UUID。 [UUID](../data-types/uuid.md)。 +* `x` — UUID。[UUID](../data-types/uuid.md)。 **戻り値** -* 空の UUID の場合は `1`、空でない UUID の場合は `0` を返します。 [UInt8](../data-types/int-uint.md)。 +* 空の UUID に対しては `1` を返し、空でない UUID に対しては `0` を返します。[UInt8](../data-types/int-uint.md)。 **例** -UUID 値を生成するために、ClickHouse は [generateUUIDv4](#generateuuidv4) 関数を提供しています。 +UUID 値を生成するには、ClickHouse は [generateUUIDv4](#generateuuidv4) 関数を提供しています。 クエリ: @@ -249,7 +247,7 @@ UUID 値を生成するために、ClickHouse は [generateUUIDv4](#generateuuid SELECT empty(generateUUIDv4()); ``` -結果: +結果: ```response ┌─empty(generateUUIDv4())─┐ @@ -260,7 +258,7 @@ SELECT empty(generateUUIDv4()); ## notEmpty -入力された UUID が空でないかどうかを判定します。 +入力された UUID が空でないことを確認します。 **構文** @@ -268,9 +266,9 @@ SELECT empty(generateUUIDv4()); notEmpty(UUID) ``` -UUID がすべてゼロで構成されている場合(ゼロ UUID)、空と見なされます。 +UUID がすべてゼロ(ゼロ UUID)で構成されている場合、その UUID は空と見なされます。 -この関数は Array や String に対しても動作します。 +この関数は Array 型および String 型に対しても動作します。 **引数** @@ -282,7 +280,7 @@ UUID がすべてゼロで構成されている場合(ゼロ UUID)、空と **例** -UUID の値を生成するには、ClickHouse は [generateUUIDv4](#generateuuidv4) 関数を提供します。 +UUID 値を生成するには、ClickHouse は [generateUUIDv4](#generateuuidv4) 関数を提供しています。 クエリ: @@ -309,7 +307,7 @@ toUUID(string) **戻り値** -UUID 型の値。 +UUID 型の値です。 **使用例** @@ -317,7 +315,7 @@ UUID 型の値。 SELECT toUUID('61f0c404-5cb3-11e7-907b-a6006ad3dba0') AS uuid ``` -結果: +結果: ```response ┌─────────────────────────────────uuid─┐ @@ -330,24 +328,24 @@ SELECT toUUID('61f0c404-5cb3-11e7-907b-a6006ad3dba0') AS uuid **引数** -* `string` — 36 文字の文字列、または FixedString(36)。[String](../syntax.md#string)。 -* `default` — 最初の引数を UUID 型に変換できない場合にデフォルト値として使用される UUID。[UUID](../data-types/uuid.md)。 +* `string` — 36 文字の String 型または FixedString(36) 型。[String](../syntax.md#string)。 +* `default` — 最初の引数を UUID 型に変換できない場合にデフォルトとして使用される UUID。[UUID](../data-types/uuid.md)。 -**返される値** +**戻り値** UUID ```sql -toUUIDOrDefault(文字列, デフォルト) +toUUIDOrDefault(string, default) ``` **戻り値** -`UUID` 型の値。 +UUID 型の値。 **使用例** -この最初の例では、変換可能な場合、最初の引数を `UUID` 型に変換して返します。 +この最初の例では、変換可能であるため、最初の引数を UUID 型に変換して返します。 ```sql SELECT toUUIDOrDefault('61f0c404-5cb3-11e7-907b-a6006ad3dba0', cast('59f0c404-5cb3-11e7-907b-a6006ad3dba0' AS UUID)); @@ -361,7 +359,7 @@ SELECT toUUIDOrDefault('61f0c404-5cb3-11e7-907b-a6006ad3dba0', cast('59f0c404-5c └───────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ ``` -この2番目の例では、最初の引数をUUID型に変換できないため、2番目の引数(指定されたデフォルトのUUID)が返されます。 +この 2 番目の例では、最初の引数を UUID 型に変換できないため、2 番目の引数(指定されたデフォルトの UUID)が返されます。 ```sql SELECT toUUIDOrDefault('-----61f0c404-5cb3-11e7-907b-a6006ad3dba0', cast('59f0c404-5cb3-11e7-907b-a6006ad3dba0' AS UUID)); @@ -378,15 +376,15 @@ SELECT toUUIDOrDefault('-----61f0c404-5cb3-11e7-907b-a6006ad3dba0', cast('59f0c4 ## toUUIDOrNull -String 型の引数を受け取り、UUID 型としてパースを試みます。失敗した場合は NULL を返します。 +String 型の引数を受け取り、UUID 型としてパースしようとします。失敗した場合は NULL を返します。 ```sql -toUUIDOrNull(文字列) +toUUIDOrNull(string) ``` -**戻り値** +**返り値** -`Nullable(UUID)` 型の値。 +Nullable(UUID) 型の値。 **使用例** @@ -405,15 +403,15 @@ SELECT toUUIDOrNull('61f0c404-5cb3-11e7-907b-a6006ad3dba0T') AS uuid ## toUUIDOrZero -`String` 型の引数を受け取り、UUID へのパースを試みます。パースに失敗した場合は、オールゼロの UUID を返します。 +String 型の引数を受け取り、UUID としての解析を試みます。失敗した場合は、ゼロ UUID を返します。 ```sql -toUUIDOrZero(文字列) +toUUIDOrZero(string) ``` **戻り値** -UUID 型の値。 +UUID 型の値です。 **使用例** @@ -421,7 +419,7 @@ UUID 型の値。 SELECT toUUIDOrZero('61f0c404-5cb3-11e7-907b-a6006ad3dba0T') AS uuid ``` -結果: +結果: ```response ┌─────────────────────────────────uuid─┐ @@ -432,7 +430,7 @@ SELECT toUUIDOrZero('61f0c404-5cb3-11e7-907b-a6006ad3dba0T') AS uuid ## UUIDStringToNum -`xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx` という形式の 36 文字の `string` を受け取り、そのバイナリ表現として [FixedString(16)](../data-types/fixedstring.md) を返します。バイナリ表現の形式はオプションの `variant` で指定でき、デフォルトは `Big-endian` です。 +`xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx` という形式の 36 文字の `string` を受け取り、そのバイナリ表現として [FixedString(16)](../data-types/fixedstring.md) を返します。戻り値の形式はオプションの `variant` で指定でき、指定しない場合は `Big-endian` になります。 **構文** @@ -442,8 +440,8 @@ UUIDStringToNum(string[, variant = 1]) **引数** -* `string` — 長さ 36 文字の [String](/sql-reference/data-types/string) または [FixedString](/sql-reference/data-types/string) -* `variant` — [RFC4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.1) で規定されているバリアントを表す整数。1 = `Big-endian` (デフォルト)、2 = `Microsoft`。 +* `string` — 36 文字の [String](/sql-reference/data-types/string) または [FixedString](/sql-reference/data-types/string) +* `variant` — [RFC4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.1) で規定されているバリアントを表す整数値。1 = `Big-endian`(デフォルト)、2 = `Microsoft`。 **戻り値** @@ -471,7 +469,7 @@ SELECT UUIDStringToNum(uuid, 2) AS bytes ``` -結果: +結果: ```response ┌─uuid─────────────────────────────────┬─bytes────────────┐ @@ -482,7 +480,7 @@ SELECT ## UUIDNumToString -UUID のバイナリ表現を格納した `binary` を受け取り、その形式を `variant` で任意指定できます(省略時は `Big-endian`)。テキスト形式の 36 文字からなる文字列を返します。 +UUID のバイナリ表現を含む `binary` を受け取り、その形式は任意の `variant` 引数(デフォルトは `Big-endian`)で指定できます。テキスト形式の 36 文字からなる文字列を返します。 **構文** @@ -492,10 +490,10 @@ UUIDNumToString(binary[, variant = 1]) **引数** -* `binary` — UUID をバイナリで表現した [FixedString(16)](../data-types/fixedstring.md) 型。 +* `binary` — UUID をバイナリで表現した [FixedString(16)](../data-types/fixedstring.md)。 * `variant` — [RFC4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.1) で規定されているバリアントを表す整数。1 = `Big-endian`(デフォルト)、2 = `Microsoft`。 -**返り値** +**戻り値** 文字列。 @@ -521,7 +519,7 @@ SELECT UUIDNumToString(toFixedString(bytes, 16), 2) AS uuid ``` -結果: +結果: ```response ┌─bytes────────────┬─uuid─────────────────────────────────┐ @@ -532,7 +530,7 @@ SELECT ## UUIDToNum -[UUID](../data-types/uuid.md) を受け取り、そのバイナリ表現を [FixedString(16)](../data-types/fixedstring.md) として返します。`variant`(デフォルトは `Big-endian`)でフォーマットを指定することもできます。この関数は、`UUIDStringToNum(toString(uuid))` という 2 つの個別の関数呼び出しを置き換えるものであり、UUID からバイト列を抽出する際に、UUID を文字列に変換する中間ステップが不要になります。 +[UUID](../data-types/uuid.md) を受け取り、そのバイナリ表現を [FixedString(16)](../data-types/fixedstring.md) 型として返します。フォーマットはオプションの `variant`(デフォルトは `Big-endian`)で指定できます。この関数は、`UUIDStringToNum(toString(uuid))` という 2 段階の呼び出しを置き換えるため、UUID からバイト列を抽出する際に UUID を文字列へ中間変換する必要がなくなります。 **構文** @@ -543,11 +541,11 @@ UUIDToNum(uuid[, variant = 1]) **引数** * `uuid` — [UUID](../data-types/uuid.md)。 -* `variant` — 整数で、[RFC4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.1) で規定されているバリアントを表す。1 = `Big-endian`(デフォルト)、2 = `Microsoft`。 +* `variant` — 整数で、[RFC4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.1) で規定されているバリアントを表します。1 = `Big-endian`(デフォルト)、2 = `Microsoft`。 -**戻り値** +**返される値** -UUID のバイナリ表現。 +UUID のバイナリ表現です。 **使用例** @@ -557,7 +555,7 @@ SELECT UUIDToNum(uuid) AS bytes ``` -結果: +結果: ```response ┌─uuid─────────────────────────────────┬─bytes────────────┐ @@ -571,7 +569,7 @@ SELECT UUIDToNum(uuid, 2) AS bytes ``` -結果: +結果: ```response ┌─uuid─────────────────────────────────┬─bytes────────────┐ @@ -593,11 +591,11 @@ UUIDv7ToDateTime(uuid[, timezone]) **引数** * `uuid` — バージョン 7 の [UUID](../data-types/uuid.md)。 -* `timezone` — 返される値の[タイムゾーン名](../../operations/server-configuration-parameters/settings.md#timezone)(オプション)。[String](../data-types/string.md)。 +* `timezone` — 返される値の[タイムゾーン名](../../operations/server-configuration-parameters/settings.md#timezone)(省略可能)。[String](../data-types/string.md)。 **戻り値** -* ミリ秒単位の精度を持つタイムスタンプ。UUID が有効なバージョン 7 UUID でない場合は、1970-01-01 00:00:00.000 を返します。[DateTime64(3)](../data-types/datetime64.md)。 +* ミリ秒精度のタイムスタンプ。UUID がバージョン 7 の有効な UUID でない場合は `1970-01-01 00:00:00.000` を返します。[DateTime64(3)](../data-types/datetime64.md)。 **使用例** @@ -605,7 +603,7 @@ UUIDv7ToDateTime(uuid[, timezone]) SELECT UUIDv7ToDateTime(toUUID('018f05c9-4ab8-7b86-b64e-c9f03fbd45d1')) ``` -結果: +結果: ```response ┌─UUIDv7ToDateTime(toUUID('018f05c9-4ab8-7b86-b64e-c9f03fbd45d1'))─┐ @@ -617,7 +615,7 @@ SELECT UUIDv7ToDateTime(toUUID('018f05c9-4ab8-7b86-b64e-c9f03fbd45d1')) SELECT UUIDv7ToDateTime(toUUID('018f05c9-4ab8-7b86-b64e-c9f03fbd45d1'), 'America/New_York') ``` -結果: +結果: ```response ┌─UUIDv7ToDateTime(toUUID('018f05c9-4ab8-7b86-b64e-c9f03fbd45d1'), 'America/New_York')─┐ @@ -628,7 +626,7 @@ SELECT UUIDv7ToDateTime(toUUID('018f05c9-4ab8-7b86-b64e-c9f03fbd45d1'), 'America ## serverUUID -ClickHouse サーバーの初回起動時に生成されたランダムな UUID を返します。UUID は ClickHouse サーバーディレクトリ内の `uuid` ファイル(例: `/var/lib/clickhouse/`)に保存され、サーバーを再起動しても保持されます。 +ClickHouse サーバーの初回起動時に生成されるランダムな UUID を返します。UUID は ClickHouse サーバーのディレクトリ(例: `/var/lib/clickhouse/`)内の `uuid` ファイルに保存され、サーバーを再起動しても保持されます。 **構文** @@ -636,7 +634,7 @@ ClickHouse サーバーの初回起動時に生成されたランダムな UUID serverUUID() ``` -**返り値** +**戻り値** * サーバーの UUID。[UUID](../data-types/uuid.md)。 @@ -644,7 +642,7 @@ serverUUID() ## generateSnowflakeID [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) を生成します。 -この関数は、同時に実行されているスレッドやクエリ間でのすべての関数呼び出しにおいて、タイムスタンプ内のカウンタフィールドが単調に増加し続けることを保証します。 +この関数は、同時に実行中のスレッドおよびクエリにおけるすべての関数呼び出しにわたって、タイムスタンプに含まれるカウンターフィールドが単調増加することを保証します。 実装の詳細については、[「Snowflake ID generation」](#snowflake-id-generation) セクションを参照してください。 @@ -656,16 +654,16 @@ generateSnowflakeID([expr, [machine_id]]) **引数** -* `expr` — クエリ内でこの関数が複数回呼び出される場合に [共通部分式除去](/sql-reference/functions/overview#common-subexpression-elimination) を回避するために使用される任意の [式](/sql-reference/syntax#expressions)。式の値は返される Snowflake ID には影響しません。省略可。 -* `machine_id` — マシン ID。下位 10 ビットが使用されます。[Int64](../data-types/int-uint.md)。省略可。 +* `expr` — クエリ内でこの関数が複数回呼び出される場合に、[共通部分式の除去](/sql-reference/functions/overview#common-subexpression-elimination)を回避するために使用される任意の[式](/sql-reference/syntax#expressions)。この式の値は、返される Snowflake ID には影響しません。省略可能です。 +* `machine_id` — マシン ID。下位 10 ビットが使用されます。[Int64](../data-types/int-uint.md)。省略可能です。 **戻り値** -UInt64 型の値。 +型 UInt64 の値。 **例** -まず UInt64 型の列を持つテーブルを作成し、その後生成した Snowflake ID をテーブルに挿入します。 +まず、型 UInt64 の列を持つテーブルを作成し、その後、生成された Snowflake ID をテーブルに挿入します。 ```sql CREATE TABLE tab (id UInt64) ENGINE = Memory; @@ -683,7 +681,7 @@ SELECT * FROM tab; └─────────────────────┘ ``` -**1 行ごとに複数の Snowflake ID を生成する例** +**1 行ごとに複数の Snowflake ID が生成される例** ```sql SELECT generateSnowflakeID(1), generateSnowflakeID(2); @@ -693,7 +691,7 @@ SELECT generateSnowflakeID(1), generateSnowflakeID(2); └────────────────────────┴────────────────────────┘ ``` -**式とマシンIDを用いた例** +**式とマシン ID を使用した例** ```sql SELECT generateSnowflakeID('expr', 1); @@ -709,28 +707,28 @@ SELECT generateSnowflakeID('expr', 1); :::warning -この関数は非推奨であり、[allow_deprecated_snowflake_conversion_functions](../../operations/settings/settings.md#allow_deprecated_snowflake_conversion_functions) 設定が有効化されている場合にのみ使用できます。 -この関数は将来的に削除される予定です。 +この関数は非推奨で、[allow_deprecated_snowflake_conversion_functions](../../operations/settings/settings.md#allow_deprecated_snowflake_conversion_functions) 設定が有効になっている場合にのみ使用できます。 +この関数は将来のある時点で削除されます。 代わりに [snowflakeIDToDateTime](#snowflakeidtodatetime) 関数を使用してください。 ::: -[Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) から [DateTime](../data-types/datetime.md) 型のタイムスタンプ部分を抽出します。 +[Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) から [DateTime](../data-types/datetime.md) 形式のタイムスタンプ部分を抽出します。 **構文** ```sql -snowflakeToDateTime(値[, タイムゾーン]) +snowflakeToDateTime(value[, time_zone]) ``` **引数** * `value` — Snowflake ID。[Int64](../data-types/int-uint.md)。 -* `time_zone` — [Timezone](/operations/server-configuration-parameters/settings.md#timezone)。この関数は `time_string` を指定されたタイムゾーンに基づいて解析します。省略可能。[String](../data-types/string.md)。 +* `time_zone` — [Timezone](/operations/server-configuration-parameters/settings.md#timezone)。関数は指定されたタイムゾーンに従って `time_string` を解析します。省略可能。[String](../data-types/string.md)。 -**返される値** +**戻り値** -* `value` に含まれるタイムスタンプ成分を [DateTime](../data-types/datetime.md) 値として返します。 +* `value` のタイムスタンプ成分を [DateTime](../data-types/datetime.md) の値として返します。 **例** @@ -755,13 +753,13 @@ SELECT snowflakeToDateTime(CAST('1426860702823350272', 'Int64'), 'UTC'); :::warning -この関数は非推奨で、[allow_deprecated_snowflake_conversion_functions](../../operations/settings/settings.md#allow_deprecated_snowflake_conversion_functions) 設定が有効になっている場合にのみ使用できます。 -この関数は将来的に削除される予定です。 +この関数は非推奨となっており、設定 [allow_deprecated_snowflake_conversion_functions](../../operations/settings/settings.md#allow_deprecated_snowflake_conversion_functions) が有効な場合にのみ使用できます。 +この関数は将来のある時点で削除されます。 代わりに関数 [snowflakeIDToDateTime64](#snowflakeidtodatetime64) を使用してください。 ::: -[Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) から [DateTime64](../data-types/datetime64.md) 形式のタイムスタンプ部分を抽出します。 +[Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) のタイムスタンプ部分を [DateTime64](../data-types/datetime64.md) 形式で抽出します。 **構文** @@ -772,11 +770,11 @@ snowflakeToDateTime64(value[, time_zone]) **引数** * `value` — Snowflake ID。[Int64](../data-types/int-uint.md)。 -* `time_zone` — [Timezone](/operations/server-configuration-parameters/settings.md#timezone)。この関数は、タイムゾーンに従って `time_string` を解析します。省略可能です。[String](../data-types/string.md)。 +* `time_zone` — [Timezone](/operations/server-configuration-parameters/settings.md#timezone)。この関数は `time_string` をこのタイムゾーンに基づいて解釈します。省略可能。[String](../data-types/string.md)。 **戻り値** -* `value` のタイムスタンプ部分を、スケール = 3(ミリ秒精度)の [DateTime64](../data-types/datetime64.md) として返します。 +* `value` のタイムスタンプ成分を、スケール = 3(ミリ秒精度)の [DateTime64](../data-types/datetime64.md) として返します。 **例** @@ -801,13 +799,13 @@ SELECT snowflakeToDateTime64(CAST('1426860802823350272', 'Int64'), 'UTC'); :::warning -この関数は非推奨であり、[allow_deprecated_snowflake_conversion_functions](../../operations/settings/settings.md#allow_deprecated_snowflake_conversion_functions) を有効にした場合にのみ使用できます。 -この関数は将来のある時点で削除されます。 +この関数は非推奨であり、[allow_deprecated_snowflake_conversion_functions](../../operations/settings/settings.md#allow_deprecated_snowflake_conversion_functions) 設定が有効な場合にのみ使用できます。 +この関数は将来的に削除される予定です。 -代わりに関数 [dateTimeToSnowflakeID](#datetimetosnowflakeid) を使用してください。 +代わりに [dateTimeToSnowflakeID](#datetimetosnowflakeid) 関数を使用してください。 ::: -[DateTime](../data-types/datetime.md) 値を、指定した時刻における最初の [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) に変換します。 +[DateTime](../data-types/datetime.md) の値を、その時刻に対応する最初の [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) に変換します。 **構文** @@ -819,9 +817,9 @@ dateTimeToSnowflake(value) * `value` — 日時。[DateTime](../data-types/datetime.md)。 -**返される値** +**戻り値** -* 入力値を、その時刻に対応する最初の Snowflake ID を表す値として [Int64](../data-types/int-uint.md) データ型に変換したもの。 +* 入力値を、その時刻における最初の Snowflake ID を表す [Int64](../data-types/int-uint.md) データ型の値に変換したもの。 **例** @@ -831,7 +829,7 @@ dateTimeToSnowflake(value) WITH toDateTime('2021-08-15 18:57:56', 'Asia/Shanghai') AS dt SELECT dateTimeToSnowflake(dt); ``` -結果: +結果: ```response ┌─dateTimeToSnowflake(dt)─┐ @@ -845,10 +843,10 @@ WITH toDateTime('2021-08-15 18:57:56', 'Asia/Shanghai') AS dt SELECT dateTimeToS :::warning -この関数は非推奨であり、[allow_deprecated_snowflake_conversion_functions](../../operations/settings/settings.md#allow_deprecated_snowflake_conversion_functions) 設定が有効な場合にのみ使用できます。 -この関数は将来削除される予定です。 +この関数は非推奨であり、設定 [allow_deprecated_snowflake_conversion_functions](../../operations/settings/settings.md#allow_deprecated_snowflake_conversion_functions) が有効になっている場合にのみ利用できます。 +この関数は将来のある時点で削除されます。 -代わりに [dateTime64ToSnowflakeID](#datetime64tosnowflakeid) 関数を使用してください。 +代わりに関数 [dateTime64ToSnowflakeID](#datetime64tosnowflakeid) を使用してください。 ::: [DateTime64](../data-types/datetime64.md) を、指定された時刻における最初の [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) に変換します。 @@ -865,7 +863,7 @@ dateTime64ToSnowflake(value) **返される値** -* 入力値を、その時刻における最初の Snowflake ID として [Int64](../data-types/int-uint.md) データ型に変換した値。 +* 入力値に対応する、その時刻における最初の Snowflake ID を表す [Int64](../data-types/int-uint.md) 型の値。 **例** @@ -875,7 +873,7 @@ dateTime64ToSnowflake(value) WITH toDateTime64('2021-08-15 18:57:56.492', 3, 'Asia/Shanghai') AS dt64 SELECT dateTime64ToSnowflake(dt64); ``` -結果: +結果: ```response ┌─dateTime64ToSnowflake(dt64)─┐ @@ -886,7 +884,7 @@ WITH toDateTime64('2021-08-15 18:57:56.492', 3, 'Asia/Shanghai') AS dt64 SELECT ## snowflakeIDToDateTime -[Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) のタイムスタンプ部分を [DateTime](../data-types/datetime.md) 型の値として返します。 +[Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) のタイムスタンプ部分を、[DateTime](../data-types/datetime.md) 型の値として返します。 **構文** @@ -897,22 +895,22 @@ snowflakeIDToDateTime(value[, epoch[, time_zone]]) **引数** * `value` — Snowflake ID。[UInt64](../data-types/int-uint.md)。 -* `epoch` - Snowflake ID のエポック(基準時刻)。1970-01-01 からの経過ミリ秒。デフォルトは 0(1970-01-01)。Twitter/X のエポック(2015-01-01)の場合は 1288834974657 を指定します。省略可能。[UInt*](../data-types/int-uint.md)。 -* `time_zone` — [Timezone](/operations/server-configuration-parameters/settings.md#timezone)。関数は `time_string` をこのタイムゾーンに従って解析します。省略可能。[String](../data-types/string.md)。 +* `epoch` - Snowflake ID のエポックを、1970-01-01 からの経過ミリ秒で指定します。デフォルトは 0(1970-01-01)です。Twitter/X のエポック(2015-01-01)の場合は 1288834974657 を指定します。省略可能。[UInt*](../data-types/int-uint.md)。 +* `time_zone` — [Timezone](/operations/server-configuration-parameters/settings.md#timezone)。関数は `time_string` をこのタイムゾーンに従って解釈します。省略可能。[String](../data-types/string.md)。 **返される値** -* `value` のタイムスタンプ成分を [DateTime](../data-types/datetime.md) 値として返します。 +* `value` のタイムスタンプコンポーネントを [DateTime](../data-types/datetime.md) 値として返します。 **例** -クエリ: +クエリ: ```sql SELECT snowflakeIDToDateTime(7204436857747984384) AS res ``` -結果: +結果: ```response ┌─────────────────res─┐ @@ -923,7 +921,7 @@ SELECT snowflakeIDToDateTime(7204436857747984384) AS res ## snowflakeIDToDateTime64 -[Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) のタイムスタンプ部分を、[DateTime64](../data-types/datetime64.md) 型の値として返します。 +[Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) のタイムスタンプコンポーネントを、[DateTime64](../data-types/datetime64.md) 型の値として返します。 **構文** @@ -937,13 +935,13 @@ snowflakeIDToDateTime64(value[, epoch[, time_zone]]) * `epoch` - Snowflake ID のエポック(1970-01-01 からの経過ミリ秒)。デフォルトは 0(1970-01-01)。Twitter/X のエポック(2015-01-01)の場合は 1288834974657 を指定します。省略可能。 [UInt*](../data-types/int-uint.md)。 * `time_zone` — [Timezone](/operations/server-configuration-parameters/settings.md#timezone)。関数は `time_string` をこのタイムゾーンに従って解釈します。省略可能。 [String](../data-types/string.md)。 -**戻り値** +**返り値** * `value` のタイムスタンプ部分を、スケール = 3(ミリ秒精度)の [DateTime64](../data-types/datetime64.md) として返します。 **例** -クエリ: +クエリ: ```sql SELECT snowflakeIDToDateTime64(7204436857747984384) AS res @@ -960,7 +958,7 @@ SELECT snowflakeIDToDateTime64(7204436857747984384) AS res ## dateTimeToSnowflakeID -[DateTime](../data-types/datetime.md) 値を、与えられた時刻に対応する最初の [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) に変換します。 +[DateTime](../data-types/datetime.md) 型の値を、指定された時刻における最初の [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) に変換します。 **構文** @@ -970,12 +968,12 @@ dateTimeToSnowflakeID(value[, epoch]) **引数** -* `value` — 時刻付きの日付。[DateTime](../data-types/datetime.md)。 -* `epoch` - Snowflake ID のエポック時刻(1970-01-01 からのミリ秒)。デフォルトは 0(1970-01-01)。Twitter/X のエポック(2015-01-01)の場合は 1288834974657 を指定します。省略可能。[UInt*](../data-types/int-uint.md)。 +* `value` — 日時。[DateTime](../data-types/datetime.md)。 +* `epoch` - Snowflake ID のエポックを、1970-01-01 からの経過ミリ秒で指定します。デフォルトは 0 (1970-01-01)。Twitter/X のエポック (2015-01-01) を使用する場合は 1288834974657 を指定します。省略可能。[UInt*](../data-types/int-uint.md)。 **戻り値** -* 入力値を、その時刻における最初の Snowflake ID として [UInt64](../data-types/int-uint.md) に変換した値。 +* 入力値を、その時刻における最初の Snowflake ID に対応する [UInt64](../data-types/int-uint.md) 値に変換したもの。 **例** @@ -996,7 +994,7 @@ SELECT toDateTime('2021-08-15 18:57:56', 'Asia/Shanghai') AS dt, dateTimeToSnowf ## dateTime64ToSnowflakeID -[DateTime64](../data-types/datetime64.md) を、与えられた時刻における最初の [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) に変換します。 +[DateTime64](../data-types/datetime64.md) を、指定された時刻に対応する最初の [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) に変換します。 **構文** @@ -1007,11 +1005,11 @@ dateTime64ToSnowflakeID(value[, epoch]) **引数** * `value` — 時刻付きの日付。[DateTime64](../data-types/datetime64.md)。 -* `epoch` - Snowflake ID のエポックを、1970-01-01 からの経過ミリ秒で指定します。デフォルトは 0(1970-01-01)です。Twitter/X のエポック(2015-01-01)の場合は 1288834974657 を指定します。省略可能。[UInt*](../data-types/int-uint.md)。 +* `epoch` - Snowflake ID のエポックを、1970-01-01 からの経過ミリ秒で指定します。デフォルトは 0 (1970-01-01) です。Twitter/X のエポック (2015-01-01) を指定する場合は 1288834974657 を指定します。省略可能です。[UInt*](../data-types/int-uint.md)。 **戻り値** -* 入力値を、その時刻における最初の Snowflake ID として [UInt64](../data-types/int-uint.md) に変換した値。 +* 入力値を、その時刻における最初の Snowflake ID を表す [UInt64](../data-types/int-uint.md) 値に変換したもの。 **例** @@ -1030,924 +1028,16 @@ SELECT toDateTime('2021-08-15 18:57:56.493', 3, 'Asia/Shanghai') AS dt, dateTime ``` -## 参照 +## 関連項目 * [dictGetUUID](/sql-reference/functions/ext-dict-functions#other-functions) {/* - 以下のタグ内のコンテンツは、ドキュメントフレームワークのビルド時に + 以下のタグの内部の内容は、ドキュメントフレームワークのビルド時に system.functions から自動生成されたドキュメントで置き換えられます。タグを変更または削除しないでください。 - 参照: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md + 詳細は https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md を参照してください。 */ } - {/*AUTOGENERATED_START*/ } -## UUIDNumToString - -導入: v1.1 - -UUID のバイナリ表現を受け取り、形式は省略可能な引数 `variant`(デフォルトは `Big-endian`)で指定でき、テキスト形式の 36 文字からなる文字列を返します。 - -**構文** - -```sql -UUIDNumToString(binary[, variant]) -``` - -**引数** - -* `binary` — UUID のバイナリ表現。[`FixedString(16)`](/sql-reference/data-types/fixedstring) -* `variant` — [RFC4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.1) で規定されているバリアント種別。1 = `Big-endian`(デフォルト)、2 = `Microsoft`。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**戻り値** - -UUID を文字列で返します。[`String`](/sql-reference/data-types/string) - -**例** - -**使用例** - -```sql title=Query -SELECT - 'a/<@];!~p{jTj={)' AS bytes, - UUIDNumToString(toFixedString(bytes, 16)) AS uuid -``` - -```response title=Response -┌─bytes────────────┬─uuid─────────────────────────────────┐ -│ a/<@];!~p{jTj={) │ 612f3c40-5d3b-217e-707b-6a546a3d7b29 │ -└──────────────────┴──────────────────────────────────────┘ -``` - -**Microsoft 版** - -```sql title=Query -SELECT - '@ - -:::warning -この関数は非推奨であり、[`allow_deprecated_snowflake_conversion_functions`](../../operations/settings/settings.md#allow_deprecated_snowflake_conversion_functions) 設定が有効になっている場合にのみ使用できます。 -この関数は将来のある時点で削除されます。 - -代わりに [dateTime64ToSnowflakeID](#dateTime64ToSnowflakeID) 関数を使用してください。 -::: - -[DateTime64](../data-types/datetime64.md) を、指定された時刻における最初の [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) に変換します。 - -**構文** - -```sql -dateTime64ToSnowflake(value) -``` - -**引数** - -* `value` — 時刻情報を含む日付。[`DateTime64`](/sql-reference/data-types/datetime64) - -**戻り値** - -入力値を、その時刻に対応する最初の Snowflake ID に変換して返します。[`Int64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -WITH toDateTime64('2021-08-15 18:57:56.492', 3, 'Asia/Shanghai') AS dt64 SELECT dateTime64ToSnowflake(dt64); -``` - -```response title=Response -┌─dateTime64ToSnowflake(dt64)─┐ -│ 1426860704886947840 │ -└─────────────────────────────┘ -``` - - -## dateTime64ToSnowflakeID - -導入: v24.6 - -[`DateTime64`](../data-types/datetime64.md) を、指定した時刻における最初の [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) に変換します。 - -実装の詳細は、「[Snowflake ID generation](#snowflake-id-generation)」の節を参照してください。 - -**構文** - -```sql -dateTime64ToSnowflakeID(value[, epoch]) -``` - -**引数** - -* `value` — 時刻付きの日付。[`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) -* `epoch` — Snowflake ID のエポック。1970-01-01 からの経過ミリ秒。既定値は 0(1970-01-01)。Twitter/X のエポック(2015-01-01)の場合は 1288834974657 を指定します。[`UInt*`](/sql-reference/data-types/int-uint) - -**返り値** - -指定した時刻に対応する最初の Snowflake ID を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT toDateTime64('2025-08-15 18:57:56.493', 3, 'Asia/Shanghai') AS dt, dateTime64ToSnowflakeID(dt) AS res; -``` - -```response title=Response -┌──────────────────────dt─┬─────────────────res─┐ -│ 2025-08-15 18:57:56.493 │ 7362075066076495872 │ -└─────────────────────────┴─────────────────────┘ -``` - - -## dateTimeToSnowflake - -導入バージョン: v21.10 - - - -:::warning -この関数は非推奨で、[`allow_deprecated_snowflake_conversion_functions`](../../operations/settings/settings.md#allow_deprecated_snowflake_conversion_functions) 設定が有効な場合にのみ使用できます。 -この関数は将来のある時点で削除されます。 - -代わりに関数 [dateTimeToSnowflakeID](#dateTimeToSnowflakeID) を使用してください。 -::: - -[DateTime](../data-types/datetime.md) の値を、指定した時刻における最初の [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) に変換します。 - -**構文** - -```sql -dateTimeToSnowflake(value) -``` - -**引数** - -* `value` — 日時。[`DateTime`](/sql-reference/data-types/datetime) - -**返される値** - -指定した時刻における最初の Snowflake ID を返します。[`Int64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -WITH toDateTime('2021-08-15 18:57:56', 'Asia/Shanghai') AS dt SELECT dateTimeToSnowflake(dt); -``` - -```response title=Response -┌─dateTimeToSnowflake(dt)─┐ -│ 1426860702823350272 │ -└─────────────────────────┘ -``` - - -## dateTimeToSnowflakeID - -導入バージョン: v24.6 - -[DateTime](../data-types/datetime.md) 値を、与えられた時刻における最初の [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) に変換します。 - -**構文** - -```sql -dateTimeToSnowflakeID(value[, epoch]) -``` - -**引数** - -* `value` — 時刻情報を含む日付。[`DateTime`](/sql-reference/data-types/datetime) または [`DateTime64`](/sql-reference/data-types/datetime64) -* `epoch` — オプション。Snowflake ID のエポックを、1970-01-01 からの経過ミリ秒で指定します。デフォルトは 0(1970-01-01)です。Twitter/X のエポック(2015-01-01)の場合は 1288834974657 を指定します。[`UInt*`](/sql-reference/data-types/int-uint) - -**戻り値** - -指定した時刻における最初の Snowflake ID を表す値として、入力値を返します。[`UInt64`](/sql-reference/data-types/int-uint) - -**例** - -**使用例** - -```sql title=Query -SELECT toDateTime('2021-08-15 18:57:56', 'Asia/Shanghai') AS dt, dateTimeToSnowflakeID(dt) AS res; -``` - -```response title=Response -┌──────────────────dt─┬─────────────────res─┐ -│ 2021-08-15 18:57:56 │ 6832626392367104000 │ -└─────────────────────┴─────────────────────┘ -``` - - -## dateTimeToUUIDv7 - -導入バージョン: v25.9 - -指定された時刻を基に、[DateTime](../data-types/datetime.md) の値を [UUIDv7](https://en.wikipedia.org/wiki/UUID#Version_7) に変換します。 - -UUIDv7 の構造、カウンター管理、および並行性に関する保証の詳細については、[「UUIDv7 generation」](#uuidv7-generation) セクションを参照してください。 - -:::note -2025 年 9 月時点では、バージョン 7 の UUID はドラフト段階であり、そのレイアウトは将来的に変更される可能性があります。 -::: - -**構文** - -```sql -dateTimeToUUIDv7(value) -``` - -**引数** - -* `value` — 日時。[`DateTime`](/sql-reference/data-types/datetime) - -**戻り値** - -UUIDv7 を返します。[`UUID`](/sql-reference/data-types/uuid) - -**例** - -**使用例** - -```sql title=Query -SELECT dateTimeToUUIDv7(toDateTime('2021-08-15 18:57:56', 'Asia/Shanghai')); -``` - -```response title=Response -┌─dateTimeToUUIDv7(toDateTime('2021-08-15 18:57:56', 'Asia/Shanghai'))─┐ -│ 018f05af-f4a8-778f-beee-1bedbc95c93b │ -└─────────────────────────────────────────────────────────────────────────┘ -``` - -**同一タイムスタンプに対する複数の UUID** - -```sql title=Query -SELECT dateTimeToUUIDv7(toDateTime('2021-08-15 18:57:56')); -SELECT dateTimeToUUIDv7(toDateTime('2021-08-15 18:57:56')); -``` - -```response title=Response -┌─dateTimeToUUIDv7(t⋯08-15 18:57:56'))─┐ -│ 017b4b2d-7720-76ed-ae44-bbcc23a8c550 │ -└──────────────────────────────────────┘ -┌─dateTimeToUUIDv7(t⋯08-15 18:57:56'))─┐ -│ 017b4b2d-7720-76ed-ae44-bbcf71ed0fd3 │ -└──────────────────────────────────────┘ -``` - - -## generateSnowflakeID - -導入バージョン: v24.6 - -[Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) を生成します。 - -関数 `generateSnowflakeID` は、同時に実行されているスレッドおよびクエリにおけるすべての関数呼び出しに対して、タイムスタンプ内のカウンターフィールドが単調増加することを保証します。 - -実装の詳細については、「[Snowflake ID の生成](#snowflake-id-generation)」セクションを参照してください。 - -**構文** - -```sql -generateSnowflakeID([expr, [machine_id]]) -``` - -**引数** - -* `expr` — クエリ内でこの関数が複数回呼び出される場合に、[共通部分式除去](/sql-reference/functions/overview#common-subexpression-elimination)を回避するために使用される任意の[式](/sql-reference/syntax#expressions)。この式の値は、返される Snowflake ID には影響しません。省略可。 -* `machine_id` — マシン ID。下位 10 ビットが使用されます。[Int64](../data-types/int-uint.md)。省略可。 - -**戻り値** - -Snowflake ID を返します。型は [`UInt64`](/sql-reference/data-types/int-uint) です。 - -**例** - -**使用例** - -```sql title=Query -CREATE TABLE tab (id UInt64) -ENGINE = MergeTree() -ORDER BY tuple(); - -INSERT INTO tab SELECT generateSnowflakeID(); - -SELECT * FROM tab; -``` - -```response title=Response -┌──────────────────id─┐ -│ 7199081390080409600 │ -└─────────────────────┘ -``` - -**1 行あたり複数の Snowflake ID が生成される** - -```sql title=Query -SELECT generateSnowflakeID(1), generateSnowflakeID(2); -``` - -```response title=Response -┌─generateSnowflakeID(1)─┬─generateSnowflakeID(2)─┐ -│ 7199081609652224000 │ 7199081609652224001 │ -└────────────────────────┴────────────────────────┘ -``` - -**式とマシン ID を使用する場合** - -```sql title=Query -SELECT generateSnowflakeID('expr', 1); -``` - -```response title=Response -┌─generateSnowflakeID('expr', 1)─┐ -│ 7201148511606784002 │ -└────────────────────────────────┘ -``` - - -## generateUUIDv4 - -導入バージョン: v1.1 - -[バージョン 4](https://tools.ietf.org/html/rfc4122#section-4.4) の [UUID](../data-types/uuid.md) を生成します。 - -**構文** - -```sql -generateUUIDv4([expr]) -``` - -**引数** - -* `expr` — 省略可。クエリ内で関数が複数回呼び出される場合に、[共通部分式除去](/sql-reference/functions/overview#common-subexpression-elimination)を回避するために使用される任意の式です。この式の値は返される UUID には影響しません。 - -**戻り値** - -UUIDv4 を返します。[`UUID`](/sql-reference/data-types/uuid) - -**例** - -**使用例** - -```sql title=Query -SELECT generateUUIDv4(number) FROM numbers(3); -``` - -```response title=Response -┌─generateUUIDv4(number)───────────────┐ -│ fcf19b77-a610-42c5-b3f5-a13c122f65b6 │ -│ 07700d36-cb6b-4189-af1d-0972f23dc3bc │ -│ 68838947-1583-48b0-b9b7-cf8268dd343d │ -└──────────────────────────────────────┘ -``` - -**共通部分式除去** - -```sql title=Query -SELECT generateUUIDv4(1), generateUUIDv4(1); -``` - -```response title=Response -┌─generateUUIDv4(1)────────────────────┬─generateUUIDv4(2)────────────────────┐ -│ 2d49dc6e-ddce-4cd0-afb8-790956df54c1 │ 2d49dc6e-ddce-4cd0-afb8-790956df54c1 │ -└──────────────────────────────────────┴──────────────────────────────────────┘ -``` - - -## generateUUIDv7 - -導入バージョン: v24.5 - -[バージョン7](https://datatracker.ietf.org/doc/html/draft-peabody-dispatch-new-uuid-format-04)の[UUID](../data-types/uuid.md)を生成します。 - -UUID の構造、カウンター管理、および同時実行性に関する保証の詳細については、「[UUIDv7 の生成](#uuidv7-generation)」セクションを参照してください。 - -:::note -2025年9月時点では、バージョン7 UUID はドラフト段階であり、そのレイアウトが将来変更される可能性があります。 -::: - -**構文** - -```sql -generateUUIDv7([expr]) -``` - -**引数** - -* `expr` — 省略可。クエリ内でこの関数が複数回呼び出される場合に、[共通部分式の除去](/sql-reference/functions/overview#common-subexpression-elimination) を回避するために使用される任意の式。この式の値は、返される UUID には影響しません。[`Any`](/sql-reference/data-types) - -**返り値** - -UUIDv7 を返します。[`UUID`](/sql-reference/data-types/uuid) - -**例** - -**使用例** - -```sql title=Query -SELECT generateUUIDv7(number) FROM numbers(3); -``` - -```response title=Response -┌─generateUUIDv7(number)───────────────┐ -│ 019947fb-5766-7ed0-b021-d906f8f7cebb │ -│ 019947fb-5766-7ed0-b021-d9072d0d1e07 │ -│ 019947fb-5766-7ed0-b021-d908dca2cf63 │ -└──────────────────────────────────────┘ -``` - -**共通部分式の除去** - -```sql title=Query -SELECT generateUUIDv7(1), generateUUIDv7(1); -``` - -```response title=Response -┌─generateUUIDv7(1)────────────────────┬─generateUUIDv7(1)────────────────────┐ -│ 019947ff-0f87-7d88-ace0-8b5b3a66e0c1 │ 019947ff-0f87-7d88-ace0-8b5b3a66e0c1 │ -└──────────────────────────────────────┴──────────────────────────────────────┘ -``` - - -## readWKTLineString - -導入バージョン: v - -LineString 型ジオメトリの Well-Known Text (WKT) 表現を解析し、ClickHouse の内部形式で返します。 - -**構文** - -```sql -readWKTLineString(wkt_string) -``` - -**引数** - -* `wkt_string` — LineString ジオメトリを表す WKT 形式の入力文字列。[`String`](/sql-reference/data-types/string) - -**戻り値** - -この関数は、LineString ジオメトリの ClickHouse 内部表現を返します。 - -**例** - -**最初の呼び出し** - -```sql title=Query -SELECT readWKTLineString('LINESTRING (1 1, 2 2, 3 3, 1 1)'); -``` - -```response title=Response -┌─readWKTLineString('LINESTRING (1 1, 2 2, 3 3, 1 1)')─┐ -│ [(1,1),(2,2),(3,3),(1,1)] │ -└──────────────────────────────────────────────────────┘ -``` - -**2回目の呼び出し** - -```sql title=Query -SELECT toTypeName(readWKTLineString('LINESTRING (1 1, 2 2, 3 3, 1 1)')); -``` - -```response title=Response -┌─toTypeName(readWKTLineString('LINESTRING (1 1, 2 2, 3 3, 1 1)'))─┐ -│ LineString │ -└──────────────────────────────────────────────────────────────────┘ -``` - - -## snowflakeIDToDateTime - -導入バージョン: v24.6 - -[Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) のタイムスタンプ部分を、[DateTime](../data-types/datetime.md) 型の値として返します。 - -**構文** - -```sql -snowflakeIDToDateTime(value[, epoch[, time_zone]]) -``` - -**引数** - -* `value` — Snowflake ID。[`UInt64`](/sql-reference/data-types/int-uint) -* `epoch` — 省略可。Snowflake ID のエポックを、1970-01-01 からの経過ミリ秒で指定します。既定値は 0 (1970-01-01) です。Twitter/X エポック (2015-01-01) を使用する場合は 1288834974657 を指定します。[`UInt*`](/sql-reference/data-types/int-uint) -* `time_zone` — 省略可。[Timezone](/operations/server-configuration-parameters/settings.md#timezone)。この関数は、タイムゾーンに従って `time_string` を解釈します。[`String`](/sql-reference/data-types/string) - -**戻り値** - -`value` のタイムスタンプ部分を返します。[`DateTime`](/sql-reference/data-types/datetime) - -**例** - -**使用例** - -```sql title=Query -SELECT snowflakeIDToDateTime(7204436857747984384) AS res -``` - -```response title=Response -┌─────────────────res─┐ -│ 2024-06-06 10:59:58 │ -└─────────────────────┘ -``` - - -## snowflakeIDToDateTime64 - -導入バージョン: v24.6 - -[Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) のタイムスタンプ部分を、[DateTime64](../data-types/datetime64.md) 型の値として返します。 - -**構文** - -```sql -snowflakeIDToDateTime64(value[, epoch[, time_zone]]) -``` - -**引数** - -* `value` — Snowflake ID。[`UInt64`](/sql-reference/data-types/int-uint) -* `epoch` — オプション。1970-01-01 からの経過時間(ミリ秒)で表される Snowflake ID のエポック。デフォルトは 0(1970-01-01)。Twitter/X のエポック(2015-01-01)の場合は 1288834974657 を指定します。[`UInt*`](/sql-reference/data-types/int-uint) -* `time_zone` — オプション。[Timezone](/operations/server-configuration-parameters/settings.md#timezone)。この関数は `time_string` をそのタイムゾーンに基づいて解析します。[`String`](/sql-reference/data-types/string) - -**返される値** - -`value` のタイムスタンプ成分を、スケール = 3(ミリ秒精度)の `DateTime64` として返します。[`DateTime64`](/sql-reference/data-types/datetime64) - -**例** - -**使用例** - -```sql title=Query -SELECT snowflakeIDToDateTime64(7204436857747984384) AS res -``` - -```response title=Response -┌─────────────────res─┐ -│ 2024-06-06 10:59:58 │ -└─────────────────────┘ -``` - - -## snowflakeToDateTime - -導入バージョン: v21.10 - - - -:::warning -この関数は非推奨であり、[`allow_deprecated_snowflake_conversion_functions`](../../operations/settings/settings.md#allow_deprecated_snowflake_conversion_functions) 設定が有効な場合にのみ使用できます。 -この関数は将来のある時点で削除されます。 - -代わりに [`snowflakeIDToDateTime`](#snowflakeIDToDateTime) 関数を使用してください。 -::: - -[Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) から、[DateTime](../data-types/datetime.md) 形式のタイムスタンプ部分を抽出します。 - -**構文** - -```sql -snowflakeToDateTime(value[, time_zone]) -``` - -**引数** - -* `value` — Snowflake ID。[`Int64`](/sql-reference/data-types/int-uint) -* `time_zone` — 省略可能。[Timezone](/operations/server-configuration-parameters/settings.md#timezone)。関数は `time_string` をそのタイムゾーンに従って解析します。[`String`](/sql-reference/data-types/string) - -**戻り値** - -`value` のタイムスタンプ部分を返します。[`DateTime`](/sql-reference/data-types/datetime) - -**例** - -**使用例** - -```sql title=Query -SELECT snowflakeToDateTime(CAST('1426860702823350272', 'Int64'), 'UTC'); -``` - -```response title=Response -┌─snowflakeToDateTime(CAST('1426860702823350272', 'Int64'), 'UTC')─┐ -│ 2021-08-15 10:57:56 │ -└──────────────────────────────────────────────────────────────────┘ -``` - - -## snowflakeToDateTime64 - -導入バージョン: v21.10 - - - -:::warning -この関数は非推奨であり、[`allow_deprecated_snowflake_conversion_functions`](../../operations/settings/settings.md#allow_deprecated_snowflake_conversion_functions) 設定が有効な場合にのみ使用できます。 -この関数は将来のある時点で削除されます。 - -代わりに [`snowflakeIDToDateTime64`](#snowflakeIDToDateTime64) 関数を使用してください。 -::: - -[Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) のタイムスタンプ部分を [DateTime64](../data-types/datetime64.md) 形式で抽出します。 - -**構文** - -```sql -snowflakeToDateTime64(value[, time_zone]) -``` - -**引数** - -* `value` — Snowflake ID。[`Int64`](/sql-reference/data-types/int-uint) -* `time_zone` — 省略可能。[Timezone](/operations/server-configuration-parameters/settings.md#timezone)。この関数は、指定されたタイムゾーンに従って `time_string` を解析します。[`String`](/sql-reference/data-types/string) - -**返り値** - -`value` のタイムスタンプ部分を返します。[`DateTime64(3)`](/sql-reference/data-types/datetime64) - -**例** - -**使用例** - -```sql title=Query -SELECT snowflakeToDateTime64(CAST('1426860802823350272', 'Int64'), 'UTC'); -``` - -```response title=Response -┌─snowflakeToDateTime64(CAST('1426860802823350272', 'Int64'), 'UTC')─┐ -│ 2021-08-15 10:58:19.841 │ -└────────────────────────────────────────────────────────────────────┘ -``` - - -## toUUIDOrDefault - -導入バージョン: v21.1 - -`String` 型の値を UUID 型に変換します。変換に失敗した場合は、エラーをスローする代わりにデフォルトの UUID 値を返します。 - -この関数は、標準的な UUID 形式(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)の 36 文字からなる文字列の解析を試みます。 -文字列を有効な UUID に変換できない場合、関数は指定されたデフォルトの UUID 値を返します。 - -**構文** - -```sql -toUUIDOrDefault(文字列, デフォルト) -``` - -**引数** - -* `string` — UUID に変換される 36 文字の String、または FixedString(36)。- `default` — 最初の引数が UUID 型に変換できない場合に返される UUID 値。 - -**戻り値** - -変換に成功した場合は変換結果の UUID を返し、変換に失敗した場合は `default` の UUID を返します。[`UUID`](/sql-reference/data-types/uuid) - -**例** - -**変換が成功すると、パースされた UUID が返されます** - -```sql title=Query -SELECT toUUIDOrDefault('61f0c404-5cb3-11e7-907b-a6006ad3dba0', toUUID('59f0c404-5cb3-11e7-907b-a6006ad3dba0')); -``` - -```response title=Response -┌─toUUIDOrDefault('61f0c404-5cb3-11e7-907b-a6006ad3dba0', toUUID('59f0c404-5cb3-11e7-907b-a6006ad3dba0'))─┐ -│ 61f0c404-5cb3-11e7-907b-a6006ad3dba0 │ -└──────────────────────────────────────────────────────────────────────────────────────────────────────────┘ -``` - -**変換失敗時はデフォルトの UUID を返す** - -```sql title=Query -SELECT toUUIDOrDefault('-----61f0c404-5cb3-11e7-907b-a6006ad3dba0', toUUID('59f0c404-5cb3-11e7-907b-a6006ad3dba0')); -``` - -```response title=Response -┌─toUUIDOrDefault('-----61f0c404-5cb3-11e7-907b-a6006ad3dba0', toUUID('59f0c404-5cb3-11e7-907b-a6006ad3dba0'))─┐ -│ 59f0c404-5cb3-11e7-907b-a6006ad3dba0 │ -└───────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## toUUIDOrNull - -導入バージョン: v20.12 - -入力値を `UUID` 型の値に変換しますが、エラーが発生した場合は `NULL` を返します。 -[`toUUID`](#touuid) と同様ですが、変換エラー時に例外をスローする代わりに `NULL` を返します。 - -サポートされる引数: - -* 標準形式の UUID の文字列表現(8-4-4-4-12 個の 16 進数)。 -* ハイフンなしの UUID の文字列表現(32 個の 16 進数)。 - -サポートされない引数(`NULL` を返す): - -* 無効な文字列形式。 -* 文字列以外の型。 -* 不正な形式の UUID。 - -**構文** - -```sql -toUUIDOrNull(x) -``` - -**引数** - -* `x` — UUID の文字列表現。[`String`](/sql-reference/data-types/string) - -**返される値** - -成功した場合は UUID 値を、それ以外の場合は `NULL` を返します。[`UUID`](/sql-reference/data-types/uuid) または [`NULL`](/sql-reference/syntax#null) - -**例** - -**使用例** - -```sql title=Query -SELECT - toUUIDOrNull('550e8400-e29b-41d4-a716-446655440000') AS valid_uuid, - toUUIDOrNull('invalid-uuid') AS invalid_uuid -``` - -```response title=Response -┌─valid_uuid───────────────────────────┬─invalid_uuid─┐ -│ 550e8400-e29b-41d4-a716-446655440000 │ ᴺᵁᴸᴸ │ -└──────────────────────────────────────┴──────────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/operators/distributed-ddl.md b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/operators/distributed-ddl.md index f361049611c..11ef4448637 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/operators/distributed-ddl.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/operators/distributed-ddl.md @@ -6,6 +6,6 @@ title: 'Distributed DDL のページ' doc_type: 'reference' --- -import Content from '@site/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/distributed-ddl.md'; +import Content from '@site/docs/sql-reference/distributed-ddl.md'; diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/operators/index.md b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/operators/index.md index fb6915b3f74..c6611a087bc 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/operators/index.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/operators/index.md @@ -1,6 +1,5 @@ --- -description: '演算子に関するドキュメント' -displayed_sidebar: 'sqlreference' +description: '演算子のドキュメント' sidebar_label: '演算子' sidebar_position: 38 slug: /sql-reference/operators/ @@ -8,140 +7,131 @@ title: '演算子' doc_type: 'reference' --- - - # 演算子 -ClickHouse は、演算子の優先順位および結合性に従って、クエリのパース段階で演算子を対応する関数に変換します。 - - - -## アクセス演算子 {#access-operators} - -`a[N]` – 配列の要素へアクセスします。`arrayElement(a, N)` 関数と同等です。 +ClickHouse はクエリの構文解析段階で、演算子をその優先度、優先順位、および結合性に従って対応する関数へと変換します。 -`a.N` – タプルの要素へアクセスします。`tupleElement(a, N)` 関数と同等です。 +## アクセス演算子 \{#access-operators\} +`a[N]` – 配列の要素へのアクセス。`arrayElement(a, N)` 関数。 -## 数値否定演算子 {#numeric-negation-operator} +`a.N` – タプルの要素へのアクセス。`tupleElement(a, N)` 関数。 -`-a` – `negate (a)` 関数。 +## 数値の否定演算子 \{#numeric-negation-operator\} -タプルの否定については、[tupleNegate](../../sql-reference/functions/tuple-functions.md#tupleNegate) を参照してください。 +`-a` – `negate(a)` 関数。 +タプルを否定する場合は、[tupleNegate](../../sql-reference/functions/tuple-functions.md#tupleNegate) を参照してください。 -## 乗算および除算演算子 {#multiplication-and-division-operators} +## 乗算および除算演算子 \{#multiplication-and-division-operators\} `a * b` – `multiply(a, b)` 関数。 -タプルを数値で乗算する場合: [tupleMultiplyByNumber](../../sql-reference/functions/tuple-functions.md#tupleMultiplyByNumber)、スカラー積の場合: [dotProduct](/sql-reference/functions/array-functions#arrayDotProduct)。 +タプルと数値の乗算については [tupleMultiplyByNumber](../../sql-reference/functions/tuple-functions.md#tupleMultiplyByNumber)、内積については [dotProduct](/sql-reference/functions/array-functions#arrayDotProduct) を参照してください。 `a / b` – `divide(a, b)` 関数。 -タプルを数値で除算する場合: [tupleDivideByNumber](../../sql-reference/functions/tuple-functions.md#tupleDivideByNumber)。 +タプルを数値で除算する場合は [tupleDivideByNumber](../../sql-reference/functions/tuple-functions.md#tupleDivideByNumber) を参照してください。 `a % b` – `modulo(a, b)` 関数。 +## 加算および減算演算子 \{#addition-and-subtraction-operators\} -## 加算および減算演算子 {#addition-and-subtraction-operators} +`a + b` – `plus(a, b)` 関数。 -`a + b` – `plus(a, b)` 関数 +タプルに対する加算は [tuplePlus](../../sql-reference/functions/tuple-functions.md#tuplePlus) を参照。 -タプルの加算: [tuplePlus](../../sql-reference/functions/tuple-functions.md#tuplePlus) +`a - b` – `minus(a, b)` 関数。 -`a - b` – `minus(a, b)` 関数 +タプルに対する減算は [tupleMinus](../../sql-reference/functions/tuple-functions.md#tupleMinus) を参照。 -タプルの減算: [tupleMinus](../../sql-reference/functions/tuple-functions.md#tupleMinus) +## 比較演算子 \{#comparison-operators\} +### equals 関数 \{#equals-function\} -## 比較演算子 {#comparison-operators} +`a = b` – `equals(a, b)` 関数と同等。 -### equals関数 {#equals-function} +`a == b` – `equals(a, b)` 関数と同等。 -`a = b` – `equals(a, b)`関数 +### notEquals 関数 \{#notequals-function\} -`a == b` – `equals(a, b)`関数 +`a != b` – `notEquals(a, b)` 関数を表します。 -### notEquals関数 {#notequals-function} +`a <> b` – `notEquals(a, b)` 関数を表します。 -`a != b` – `notEquals(a, b)`関数 +### lessOrEquals 関数 \{#lessorequals-function\} -`a <> b` – `notEquals(a, b)`関数 +`a <= b` – `lessOrEquals(a, b)` 関数。 -### lessOrEquals関数 {#lessorequals-function} +### greaterOrEquals 関数 \{#greaterorequals-function\} -`a <= b` – `lessOrEquals(a, b)`関数 +`a >= b` – `greaterOrEquals(a, b)` 関数です。 -### greaterOrEquals関数 {#greaterorequals-function} +### less 関数 \{#less-function\} -`a >= b` – `greaterOrEquals(a, b)`関数 +`a < b` – `less(a, b)` 関数です。 -### less関数 {#less-function} +### greater 関数 \{#greater-function\} -`a < b` – `less(a, b)`関数 +`a > b` – `greater(a, b)` 関数。 -### greater関数 {#greater-function} +### like 関数 \{#like-function\} -`a > b` – `greater(a, b)`関数 +`a LIKE b` – `like(a, b)` 関数です。 -### like関数 {#like-function} +### notLike 関数 \{#notlike-function\} -`a LIKE b` – `like(a, b)`関数 +`a NOT LIKE b` – `notLike(a, b)` 関数。 -### notLike関数 {#notlike-function} +### ilike 関数 \{#ilike-function\} -`a NOT LIKE b` – `notLike(a, b)`関数 +`a ILIKE b` – `ilike(a, b)` 関数。 -### ilike関数 {#ilike-function} +### BETWEEN 関数 \{#between-function\} -`a ILIKE b` – `ilike(a, b)`関数 +`a BETWEEN b AND c` – `a >= b AND a <= c` と同じです。 -### BETWEEN関数 {#between-function} +`a NOT BETWEEN b AND c` – `a < b OR a > c` と同じです。 -`a BETWEEN b AND c` – `a >= b AND a <= c`と同じ +## データセットを操作するための演算子 \{#operators-for-working-with-data-sets\} -`a NOT BETWEEN b AND c` – `a < b OR a > c`と同じ +[IN 演算子](../../sql-reference/operators/in.md)および[EXISTS 演算子](../../sql-reference/operators/exists.md)を参照してください。 +### in function \{#in-function\} -## データセットを操作するための演算子 {#operators-for-working-with-data-sets} +`a IN ...` – `in(a, b)` 関数です。 -[IN演算子](../../sql-reference/operators/in.md)と[EXISTS演算子](../../sql-reference/operators/exists.md)を参照してください。 +### notIn 関数 \{#notin-function\} -### in関数 {#in-function} +`a NOT IN ...` – `notIn(a, b)` 関数。 -`a IN ...` – `in(a, b)`関数。 +### globalIn 関数 \{#globalin-function\} -### notIn関数 {#notin-function} +`a GLOBAL IN ...` – `globalIn(a, b)` 関数に対応します。 -`a NOT IN ...` – `notIn(a, b)`関数。 +### globalNotIn 関数 \{#globalnotin-function\} -### globalIn関数 {#globalin-function} +`a GLOBAL NOT IN ...` – これに対応する `globalNotIn(a, b)` 関数です。 -`a GLOBAL IN ...` – `globalIn(a, b)`関数。 +### in サブクエリ関数 \{#in-subquery-function\} -### globalNotIn関数 {#globalnotin-function} +`a = ANY (subquery)` – `in(a, subquery)` 関数に対応します。 -`a GLOBAL NOT IN ...` – `globalNotIn(a, b)`関数。 +### notIn サブクエリ関数 \{#notin-subquery-function\} -### inサブクエリ関数 {#in-subquery-function} +`a != ANY (subquery)` – `a NOT IN (SELECT singleValueOrNull(*) FROM subquery)` と同等です。 -`a = ANY (subquery)` – `in(a, subquery)`関数。 +### in サブクエリ関数 \{#in-subquery-function-1\} -### notInサブクエリ関数 {#notin-subquery-function} +`a = ALL (subquery)` は、`a IN (SELECT singleValueOrNull(*) FROM subquery)` と同じです。 -`a != ANY (subquery)` – `a NOT IN (SELECT singleValueOrNull(*) FROM subquery)`と同等。 +### notIn サブクエリ関数 -### inサブクエリ関数 {#in-subquery-function-1} - -`a = ALL (subquery)` – `a IN (SELECT singleValueOrNull(*) FROM subquery)`と同等。 - -### notInサブクエリ関数 {#notin-subquery-function-1} - -`a != ALL (subquery)` – `notIn(a, subquery)`関数。 +`a != ALL (subquery)` – `notIn(a, subquery)` 関数。 **例** -ALLを使用したクエリ: +ALL を使用するクエリ: ```sql SELECT number AS a FROM numbers(10) WHERE a > ALL (SELECT number FROM numbers(3, 3)); @@ -158,7 +148,7 @@ SELECT number AS a FROM numbers(10) WHERE a > ALL (SELECT number FROM numbers(3, └───┘ ``` -ANYを使用したクエリ: +ANY を使ったクエリ: ```sql SELECT number AS a FROM numbers(10) WHERE a > ANY (SELECT number FROM numbers(3, 3)); @@ -178,28 +168,28 @@ SELECT number AS a FROM numbers(10) WHERE a > ANY (SELECT number FROM numbers(3, ``` -## 日付と時刻を扱う演算子 {#operators-for-working-with-dates-and-times} +## 日付・時刻を扱う演算子 \{#operators-for-working-with-dates-and-times\} -### EXTRACT {#extract} +### 抽出 ```sql EXTRACT(part FROM date); ``` -指定された日付から部分を抽出します。例えば、指定された日付から月を取得したり、時刻から秒を取得したりできます。 +指定された日付から特定の要素を抽出します。たとえば、指定された日付から月を取得したり、時刻から秒を取得したりできます。 -`part`パラメータは、日付のどの部分を取得するかを指定します。以下の値が使用可能です: +`part` パラメータは、日付のどの部分を取得するかを指定します。次の値を使用できます。 -- `DAY` — 月の日。指定可能な値: 1–31。 -- `MONTH` — 月の番号。指定可能な値: 1–12。 -- `YEAR` — 年。 -- `SECOND` — 秒。指定可能な値: 0–59。 -- `MINUTE` — 分。指定可能な値: 0–59。 -- `HOUR` — 時。指定可能な値: 0–23。 +* `DAY` — 月の日。取りうる値: 1–31。 +* `MONTH` — 月を表す番号。取りうる値: 1–12。 +* `YEAR` — 年。 +* `SECOND` — 秒。取りうる値: 0–59。 +* `MINUTE` — 分。取りうる値: 0–59。 +* `HOUR` — 時。取りうる値: 0–23。 -`part`パラメータは大文字小文字を区別しません。 +`part` パラメータは大文字・小文字を区別しません。 -`date`パラメータは、処理する日付または時刻を指定します。[Date](../../sql-reference/data-types/date.md)型または[DateTime](../../sql-reference/data-types/datetime.md)型がサポートされています。 +`date` パラメータは処理対象の日付または時刻を指定します。[Date](../../sql-reference/data-types/date.md) 型または [DateTime](../../sql-reference/data-types/datetime.md) 型を使用できます。 例: @@ -209,7 +199,7 @@ SELECT EXTRACT(MONTH FROM toDate('2017-06-15')); SELECT EXTRACT(YEAR FROM toDate('2017-06-15')); ``` -以下の例では、テーブルを作成し、`DateTime`型の値を挿入します。 +次の例では、テーブルを作成し、`DateTime` 型の値を 1 つ挿入します。 ```sql CREATE TABLE test.Orders @@ -242,27 +232,28 @@ FROM test.Orders; └───────────┴────────────┴──────────┴───────────┴─────────────┴─────────────┘ ``` -より多くの例は[tests](https://github.com/ClickHouse/ClickHouse/blob/master/tests/queries/0_stateless/00619_extract.sql)で確認できます。 +[tests](https://github.com/ClickHouse/ClickHouse/blob/master/tests/queries/0_stateless/00619_extract.sql) で、さらに多くの例を確認できます。 -### INTERVAL {#interval} -[Date](../../sql-reference/data-types/date.md)型および[DateTime](../../sql-reference/data-types/datetime.md)型の値との算術演算で使用される[Interval](../../sql-reference/data-types/special-data-types/interval.md)型の値を作成します。 +### INTERVAL -間隔の型: +[Date](../../sql-reference/data-types/date.md) 型および [DateTime](../../sql-reference/data-types/datetime.md) 型の値との算術演算で使用される、[Interval](../../sql-reference/data-types/special-data-types/interval.md) 型の値を作成します。 -- `SECOND` -- `MINUTE` -- `HOUR` -- `DAY` -- `WEEK` -- `MONTH` -- `QUARTER` -- `YEAR` +使用可能な INTERVAL の種類: -`INTERVAL`値を設定する際に文字列リテラルを使用することもできます。例えば、`INTERVAL 1 HOUR`は`INTERVAL '1 hour'`または`INTERVAL '1' hour`と同一です。 +* `SECOND` +* `MINUTE` +* `HOUR` +* `DAY` +* `WEEK` +* `MONTH` +* `QUARTER` +* `YEAR` -:::tip -異なる型の間隔を組み合わせることはできません。`INTERVAL 4 DAY 1 HOUR`のような式は使用できません。間隔は、その間隔の最小単位以下の単位で指定してください。例えば、`INTERVAL 25 HOUR`のようにします。以下の例のように、連続した演算を使用できます。 +`INTERVAL` の値を設定するときには、文字列リテラルも使用できます。たとえば、`INTERVAL 1 HOUR` は `INTERVAL '1 hour'` や `INTERVAL '1' hour` と同じ意味になります。 + +:::tip\ +異なる種類の INTERVAL を組み合わせることはできません。`INTERVAL 4 DAY 1 HOUR` のような式は使用できません。INTERVAL は、その INTERVAL 内で最も小さい単位以下の単位で指定してください。たとえば `INTERVAL 25 HOUR` のようにします。以下の例のように、演算を連続して使用できます。 ::: 例: @@ -281,7 +272,6 @@ SELECT now() AS current_date_time, current_date_time + INTERVAL 4 DAY + INTERVAL SELECT now() AS current_date_time, current_date_time + INTERVAL '4 day' + INTERVAL '3 hour'; ``` - ```text ┌───current_date_time─┬─plus(plus(now(), toIntervalDay(4)), toIntervalHour(3))─┐ │ 2020-11-03 22:12:10 │ 2020-11-08 01:12:10 │ @@ -299,10 +289,10 @@ SELECT now() AS current_date_time, current_date_time + INTERVAL '4' day + INTERV ``` :::note\ -`INTERVAL` 構文または `addDays` 関数の使用を常に推奨します。単純な加算や減算(`now() + ...` のような構文)は、サマータイムなどの時間関連の設定を考慮しません。 +`INTERVAL` 構文または `addDays` 関数の使用が常に優先されます。単純な加算や減算(`now() + ...` のような構文)は、タイムゾーン設定を考慮しません。たとえば、夏時間(サマータイム)などです。 ::: -例: +例: ```sql SELECT toDateTime('2014-10-26 00:00:00', 'Asia/Istanbul') AS time, time + 60 * 60 * 24 AS time_plus_24_hours, time + toIntervalDay(1) AS time_plus_1_day; @@ -320,31 +310,27 @@ SELECT toDateTime('2014-10-26 00:00:00', 'Asia/Istanbul') AS time, time + 60 * 6 * [toInterval](/sql-reference/functions/type-conversion-functions#tointervalyear) 型変換関数 -## 論理AND演算子 {#logical-and-operator} - -構文 `SELECT a AND b` — [and](/sql-reference/functions/logical-functions#and)関数を使用して`a`と`b`の論理積を計算します。 - +## 論理 AND 演算子 \{#logical-and-operator\} -## 論理OR演算子 {#logical-or-operator} +構文 `SELECT a AND b` — 関数 [and](/sql-reference/functions/logical-functions#and) を使用して、`a` と `b` の論理積(AND)を計算します。 -構文 `SELECT a OR b` — [or](/sql-reference/functions/logical-functions#or)関数を使用して`a`と`b`の論理和を計算します。 +## 論理 OR 演算子 \{#logical-or-operator\} +構文 `SELECT a OR b` — 関数 [or](/sql-reference/functions/logical-functions#or) により、`a` と `b` の論理和を計算します。 -## 論理否定演算子 {#logical-negation-operator} +## 論理否定演算子 \{#logical-negation-operator\} -構文 `SELECT NOT a` — [not](/sql-reference/functions/logical-functions#not) 関数を使用して `a` の論理否定を計算します。 +構文 `SELECT NOT a` は、関数 [not](/sql-reference/functions/logical-functions#not) を使用して `a` の論理否定を計算します。 +## 条件演算子 \{#conditional-operator\} -## 条件演算子 {#conditional-operator} - -`a ? b : c` – `if(a, b, c)` 関数。 +`a ? b : c` – `if(a, b, c)` 関数です。 注意: -条件演算子は b と c の値を計算した後、条件 a が満たされているかを確認し、対応する値を返します。`b` または `c` が [arrayJoin()](/sql-reference/functions/array-join) 関数である場合、"a" 条件に関係なく各行が複製されます。 - +条件演算子は、まず b と c を評価し、その後で条件 a が満たされているかを確認し、対応する値を返します。`b` または `c` が [arrayJoin()](/sql-reference/functions/array-join) 関数である場合、条件 "a" に関係なく各行が複製されます。 -## 条件式 {#conditional-expression} +## 条件式 ```sql CASE [x] @@ -354,57 +340,52 @@ CASE [x] END ``` -`x`が指定されている場合、`transform(x, [a, ...], [b, ...], c)`関数が使用されます。指定されていない場合は`multiIf(a, b, ..., c)`が使用されます。 - -式に`ELSE c`句がない場合、デフォルト値は`NULL`になります。 +`x` が指定されている場合は `transform(x, [a, ...], [b, ...], c)` 関数が使用されます。指定されていない場合は `multiIf(a, b, ..., c)` 関数が使用されます。 -`transform`関数は`NULL`に対応していません。 +式に `ELSE c` 句が存在しない場合、デフォルト値は `NULL` です。 +`transform` 関数は `NULL` をサポートしません。 -## 連結演算子 {#concatenation-operator} -`s1 || s2` – `concat(s1, s2)` 関数。 +## 連結演算子 \{#concatenation-operator\} +`s1 || s2` – `concat(s1, s2)` 関数と同等です。 -## ラムダ生成演算子 {#lambda-creation-operator} +## ラムダ生成演算子 \{#lambda-creation-operator\} -`x -> expr` – `lambda(x, expr)` 関数です。 +`x -> expr` – `lambda(x, expr)` 関数。 -以下の演算子は括弧であるため、優先順位がありません: +次の演算子は括弧であるため、優先順位を持ちません。 +## 配列作成演算子 \{#array-creation-operator\} -## 配列作成演算子 {#array-creation-operator} +`[x1, ...]` – `array(x1, ...)` 関数と同等。 -`[x1, ...]` – `array(x1, ...)` 関数。 +## タプル生成演算子 \{#tuple-creation-operator\} +`(x1, x2, ...)` – `tuple(x1, x2, ...)` 関数と同等です。 -## タプル生成演算子 {#tuple-creation-operator} +## 結合性 \{#associativity\} -`(x1, x2, ...)` – `tuple(x2, x2, ...)` 関数と同等です。 +すべての二項演算子は左結合です。たとえば、`1 + 2 + 3` は `plus(plus(1, 2), 3)` に変換されます。 +これは期待どおりに動作しない場合があります。たとえば、`SELECT 4 > 2 > 3` の結果は 0 になります。 +効率化のために、`and` と `or` 関数は任意個数の引数を受け取ることができます。対応する `AND` および `OR` 演算子の連鎖は、これらの関数への単一の呼び出しに変換されます。 -## 結合性 {#associativity} +## `NULL` の確認 \{#checking-for-null\} -すべての二項演算子は左結合性を持ちます。例えば、`1 + 2 + 3` は `plus(plus(1, 2), 3)` に変換されます。 -これは期待通りに動作しない場合があります。例えば、`SELECT 4 > 2 > 3` の結果は 0 になります。 +ClickHouse は `IS NULL` および `IS NOT NULL` 演算子をサポートしています。 -効率化のため、`and` および `or` 関数は任意の数の引数を受け入れます。`AND` および `OR` 演算子の連鎖は、これらの関数の単一呼び出しに変換されます。 +### IS NULL \ +* [Nullable](../../sql-reference/data-types/nullable.md) 型の値に対しては、`IS NULL` 演算子は次を返します: + * 値が `NULL` の場合は `1` + * それ以外の場合は `0` +* それ以外のデータ型の値に対しては、`IS NULL` 演算子は常に `0` を返します。 -## `NULL`のチェック {#checking-for-null} +[optimize_functions_to_subcolumns](/operations/settings/settings#optimize_functions_to_subcolumns) 設定を有効にすることで最適化できます。`optimize_functions_to_subcolumns = 1` の場合、関数は列全体のデータを読み取って処理する代わりに、[null](../../sql-reference/data-types/nullable.md#finding-null) サブカラムのみを読み取ります。クエリ `SELECT n IS NULL FROM table` は `SELECT n.null FROM table` に書き換えられます。 -ClickHouseは`IS NULL`および`IS NOT NULL`演算子をサポートしています。 - -### IS NULL {#is_null} - -- [Nullable](../../sql-reference/data-types/nullable.md)型の値に対して、`IS NULL`演算子は以下を返します: - - 値が`NULL`の場合は`1` - - それ以外の場合は`0` -- その他の値に対して、`IS NULL`演算子は常に`0`を返します。 - -[optimize_functions_to_subcolumns](/operations/settings/settings#optimize_functions_to_subcolumns)設定を有効にすることで最適化できます。`optimize_functions_to_subcolumns = 1`の場合、この関数は列全体のデータを読み取って処理する代わりに、[null](../../sql-reference/data-types/nullable.md#finding-null)サブカラムのみを読み取ります。 クエリ`SELECT n IS NULL FROM table`は`SELECT n.null FROM TABLE`に変換されます。 - - +{/* */ } ```sql SELECT x+100 FROM t_null WHERE y IS NULL @@ -416,14 +397,15 @@ SELECT x+100 FROM t_null WHERE y IS NULL └──────────────┘ ``` -### IS NOT NULL {#is_not_null} -- [Nullable](../../sql-reference/data-types/nullable.md)型の値に対して、`IS NOT NULL`演算子は以下を返します: - - 値が`NULL`の場合は`0` - - それ以外の場合は`1` -- その他の値に対して、`IS NOT NULL`演算子は常に`1`を返します。 +### IS NOT NULL \ + +* [Nullable](../../sql-reference/data-types/nullable.md) 型の値に対しては、`IS NOT NULL` 演算子は次の値を返します: + * 値が `NULL` の場合は `0`。 + * それ以外の場合は `1`。 +* その他の値に対しては、`IS NOT NULL` 演算子は常に `1` を返します。 - +{/* */ } ```sql SELECT * FROM t_null WHERE y IS NOT NULL @@ -435,4 +417,4 @@ SELECT * FROM t_null WHERE y IS NOT NULL └───┴───┘ ``` -[optimize_functions_to_subcolumns](/operations/settings/settings#optimize_functions_to_subcolumns)設定を有効にすることで最適化できます。`optimize_functions_to_subcolumns = 1`の場合、この関数は列全体のデータを読み取って処理する代わりに、[null](../../sql-reference/data-types/nullable.md#finding-null)サブカラムのみを読み取ります。 クエリ`SELECT n IS NOT NULL FROM table`は`SELECT NOT n.null FROM TABLE`に変換されます。 +[optimize_functions_to_subcolumns](/operations/settings/settings#optimize_functions_to_subcolumns) 設定を有効にすることで最適化できます。`optimize_functions_to_subcolumns = 1` の場合、この関数は列全体のデータを読み取り・処理する代わりに、[null](../../sql-reference/data-types/nullable.md#finding-null) サブカラムのみを読み取ります。クエリ `SELECT n IS NOT NULL FROM table` は `SELECT NOT n.null FROM TABLE` に書き換えられます。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/sql-reference-links.json b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/sql-reference-links.json index 172c4fb1d5c..dc63471f434 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/sql-reference-links.json +++ b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/sql-reference-links.json @@ -1,12 +1,12 @@ [ { - "title": "演算子", - "description": "ClickHouse で使用可能な SQL 演算子の一覧", + "title": "ステートメント", + "description": "ClickHouse で利用可能な SQL 文の一覧", "url": "/docs/sql-reference/statements/" }, { - "title": "データベースエンジンとテーブルエンジン", - "description": "エンジンは、データの保存場所と保存方法を決定します", + "title": "データベースおよびテーブルエンジン", + "description": "エンジンは、データをどこにどのように保存するかを決定します", "url": "/docs/engines/table-engines" } ] \ No newline at end of file diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/statements/select/index.md b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/statements/select/index.md index ffffd495233..78208965bee 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/statements/select/index.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/statements/select/index.md @@ -7,14 +7,10 @@ title: 'SELECT クエリ' doc_type: 'reference' --- - - # SELECT クエリ `SELECT` クエリはデータの取得を行います。デフォルトでは、要求されたデータはクライアントに返されますが、[INSERT INTO](../../../sql-reference/statements/insert-into.md) と組み合わせることで、別のテーブルに渡すこともできます。 - - ## 構文 {#syntax} ```sql @@ -64,7 +60,6 @@ SELECT [DISTINCT [ON (column1, column2, ...)]] expr_list - [INTO OUTFILE句](../../../sql-reference/statements/select/into-outfile.md) - [FORMAT句](../../../sql-reference/statements/select/format.md) - ## SELECT句 {#select-clause} `SELECT`句で指定された[式](/sql-reference/syntax#expressions)は、上記で説明したすべての句の操作が完了した後に計算されます。これらの式は、結果の各行に対して個別に適用されるかのように動作します。`SELECT`句の式に集約関数が含まれている場合、ClickHouseは[GROUP BY](/sql-reference/statements/select/group-by)集約の際に、集約関数とその引数として使用される式を処理します。 @@ -159,7 +154,6 @@ Code: 42. DB::Exception: Received from localhost:9000. DB::Exception: Number of `GROUP BY`、`ORDER BY`、および`LIMIT BY`句は位置引数をサポートできます。これを有効にするには、[enable_positional_arguments](/operations/settings/settings#enable_positional_arguments)設定をオンにします。例えば、`ORDER BY 1,2`とすると、テーブルの行が第1列、次に第2列でソートされます。 - ## 実装の詳細 {#implementation-details} クエリが `DISTINCT`、`GROUP BY`、`ORDER BY` 句、および `IN` と `JOIN` サブクエリを省略している場合、クエリは完全にストリーム処理され、O(1) の RAM 量を使用します。それ以外の場合、適切な制限が指定されていないと、クエリは大量の RAM を消費する可能性があります: @@ -180,7 +174,6 @@ Code: 42. DB::Exception: Received from localhost:9000. DB::Exception: Number of 詳細については、「設定」のセクションを参照してください。外部ソート(一時テーブルをディスクに保存)および外部集約を使用することができます。 - ## SELECT修飾子 {#select-modifiers} `SELECT`クエリでは以下の修飾子を使用できます。 @@ -221,7 +214,6 @@ SELECT * REPLACE(i + 1 AS i) EXCEPT (j) APPLY(sum) from columns_transformers; └─────────────────┴────────┘ ``` - ## SELECTクエリでのSETTINGS {#settings-in-select-query} `SELECT`クエリ内で必要な設定を直接指定できます。設定値はこのクエリにのみ適用され、クエリ実行後はデフォルト値または以前の値にリセットされます。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/statements/system.md b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/statements/system.md index dac267c7fe3..7285b846cbd 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/statements/system.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/statements/system.md @@ -1,5 +1,5 @@ --- -description: '「SYSTEM」ステートメントに関するドキュメント' +description: 'SYSTEM ステートメントに関するドキュメント' sidebar_label: 'SYSTEM' sidebar_position: 36 slug: /sql-reference/statements/system @@ -10,22 +10,18 @@ doc_type: 'reference' import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -# SYSTEM ステートメント +# SYSTEM 文 - - -## SYSTEM RELOAD EMBEDDED DICTIONARIES {#reload-embedded-dictionaries} +## SYSTEM RELOAD EMBEDDED DICTIONARIES \{#reload-embedded-dictionaries\} すべての[内部辞書](../../sql-reference/dictionaries/index.md)を再読み込みします。 -デフォルトでは、内部辞書は無効化されています。 -内部辞書の更新結果に関わらず、常に`Ok.`を返します。 - +デフォルトでは、内部辞書は無効になっています。 +内部辞書の更新結果に関係なく、常に `Ok.` を返します。 -## SYSTEM RELOAD DICTIONARIES {#reload-dictionaries} +## SYSTEM RELOAD DICTIONARIES -以前に正常にロードされたすべてのディクショナリを再ロードします。 -デフォルトでは、ディクショナリは遅延ロードされます([dictionaries_lazy_load](../../operations/server-configuration-parameters/settings.md#dictionaries_lazy_load)を参照)。そのため、起動時に自動的にロードされるのではなく、dictGet関数またはENGINE = DictionaryのテーブルからのSELECTを通じて最初にアクセスされた際に初期化されます。`SYSTEM RELOAD DICTIONARIES`クエリは、このようなディクショナリ(LOADED)を再ロードします。 -ディクショナリの更新結果に関わらず、常に`Ok.`を返します。 +`SYSTEM RELOAD DICTIONARIES` クエリは、ステータスが `LOADED` の辞書([`system.dictionaries`](/operations/system-tables/dictionaries) の `status` 列を参照)をリロードします。つまり、これまでに正常にロードされた辞書が対象となります。 +デフォルトでは、辞書は遅延ロードされます([dictionaries_lazy_load](../../operations/server-configuration-parameters/settings.md#dictionaries_lazy_load) を参照)。そのため、起動時に自動的にロードされるのではなく、[`dictGet`](/sql-reference/functions/ext-dict-functions#dictGet) 関数の初回呼び出し時、または `ENGINE = Dictionary` を持つテーブルに対する `SELECT` の初回実行時に初期化されます。 **構文** @@ -34,29 +30,29 @@ SYSTEM RELOAD DICTIONARIES [ON CLUSTER cluster_name] ``` -## SYSTEM RELOAD DICTIONARY {#reload-dictionary} +## SYSTEM RELOAD DICTIONARY -辞書の状態(LOADED / NOT_LOADED / FAILED)に関わらず、辞書`dictionary_name`を完全に再読み込みします。 -辞書の更新結果に関わらず、常に`Ok.`を返します。 +辞書 `dictionary_name` を、その状態(LOADED / NOT_LOADED / FAILED)に関係なく完全に再読み込みします。 +辞書の更新結果にかかわらず、常に `Ok.` を返します。 ```sql SYSTEM RELOAD DICTIONARY [ON CLUSTER cluster_name] dictionary_name ``` -辞書のステータスは、`system.dictionaries`テーブルをクエリすることで確認できます。 +辞書のステータスは、`system.dictionaries` テーブルをクエリして確認できます。 ```sql SELECT name, status FROM system.dictionaries; ``` -## SYSTEM RELOAD MODELS {#reload-models} +## SYSTEM RELOAD MODELS :::note -このステートメントと`SYSTEM RELOAD MODEL`は、clickhouse-library-bridgeからCatBoostモデルをアンロードするのみです。`catboostEvaluate()`関数は、モデルがまだロードされていない場合、初回アクセス時にロードします。 +このステートメントおよび `SYSTEM RELOAD MODEL` は、catboost モデルを単に clickhouse-library-bridge からアンロードするだけです。関数 `catboostEvaluate()` は、まだロードされていない場合、初回アクセス時にモデルをロードします。 ::: -すべてのCatBoostモデルをアンロードします。 +すべての CatBoost モデルをアンロードします。 **構文** @@ -65,9 +61,9 @@ SYSTEM RELOAD MODELS [ON CLUSTER cluster_name] ``` -## SYSTEM RELOAD MODEL {#reload-model} +## SYSTEM RELOAD MODEL -`model_path`で指定されたCatBoostモデルを再読み込みします。 +`model_path` で指定された CatBoost モデルをアンロードします。 **構文** @@ -76,9 +72,9 @@ SYSTEM RELOAD MODEL [ON CLUSTER cluster_name] ``` -## SYSTEM RELOAD FUNCTIONS {#reload-functions} +## SYSTEM RELOAD FUNCTIONS -設定ファイルから、登録されているすべての[実行可能ユーザー定義関数](/sql-reference/functions/udf#executable-user-defined-functions)、またはそのいずれかを再読み込みします。 +登録されている[実行可能ユーザー定義関数](/sql-reference/functions/udf#executable-user-defined-functions)を、設定ファイルからすべて、または特定の1つを再読み込みします。 **構文** @@ -88,55 +84,48 @@ SYSTEM RELOAD FUNCTION [ON CLUSTER cluster_name] function_name ``` -## SYSTEM RELOAD ASYNCHRONOUS METRICS {#reload-asynchronous-metrics} +## SYSTEM RELOAD ASYNCHRONOUS METRICS -すべての[非同期メトリクス](../../operations/system-tables/asynchronous_metrics.md)を再計算します。非同期メトリクスは[asynchronous_metrics_update_period_s](../../operations/server-configuration-parameters/settings.md)設定に基づいて定期的に更新されるため、通常このステートメントを使用して手動で更新する必要はありません。 +すべての[非同期メトリクス](../../operations/system-tables/asynchronous_metrics.md)を再計算します。非同期メトリクスは設定項目 [asynchronous_metrics_update_period_s](../../operations/server-configuration-parameters/settings.md) に基づいて定期的に更新されるため、このステートメントを使用して手動で更新する必要が生じることは通常ありません。 ```sql SYSTEM RELOAD ASYNCHRONOUS METRICS [ON CLUSTER cluster_name] ``` -## SYSTEM DROP DNS CACHE {#drop-dns-cache} - -ClickHouseの内部DNSキャッシュをクリアします。インフラストラクチャを変更する際(別のClickHouseサーバーや辞書で使用されるサーバーのIPアドレスを変更する場合など)、このコマンドの使用が必要になることがあります(古いClickHouseバージョンの場合)。 - -より便利な(自動的な)キャッシュ管理については、`disable_internal_dns_cache`、`dns_cache_max_entries`、`dns_cache_update_period`の各パラメータを参照してください。 - +## SYSTEM DROP DNS CACHE \{#drop-dns-cache\} -## SYSTEM DROP MARK CACHE {#drop-mark-cache} +ClickHouse の内部 DNS キャッシュをクリアします。インフラストラクチャの変更時(別の ClickHouse サーバーやディクショナリで使用されるサーバーの IP アドレスを変更する場合など)には、このコマンドを使用する必要が生じることがあります(特に古い ClickHouse バージョンで発生することがあります)。 -マークキャッシュをクリアします。 +より便利な(自動的な)キャッシュ管理については、`disable_internal_dns_cache`、`dns_cache_max_entries`、`dns_cache_update_period` パラメータを参照してください。 +## SYSTEM DROP MARK CACHE \{#drop-mark-cache\} -## SYSTEM DROP ICEBERG METADATA CACHE {#drop-iceberg-metadata-cache} +マークキャッシュを削除します。 -Icebergメタデータキャッシュをクリアします。 +## SYSTEM DROP ICEBERG METADATA CACHE \{#drop-iceberg-metadata-cache\} +Iceberg メタデータキャッシュを消去します。 -## SYSTEM DROP TEXT INDEX DICTIONARY CACHE {#drop-text-index-dictionary-cache} +## SYSTEM DROP TEXT INDEX DICTIONARY CACHE \{#drop-text-index-dictionary-cache\} -テキストインデックスディクショナリキャッシュをクリアします。 +テキストインデックス辞書キャッシュをクリアします。 +## SYSTEM DROP TEXT INDEX HEADER CACHE \{#drop-text-index-header-cache\} -## SYSTEM DROP TEXT INDEX HEADER CACHE {#drop-text-index-header-cache} +テキストインデックスのヘッダーキャッシュをクリアします。 -テキストインデックスヘッダーキャッシュをクリアします。 +## SYSTEM DROP TEXT INDEX POSTINGS CACHE \{#drop-text-index-postings-cache\} +テキストインデックスのポスティングキャッシュを消去します。 -## SYSTEM DROP TEXT INDEX POSTINGS CACHE {#drop-text-index-postings-cache} +## SYSTEM DROP TEXT INDEX CACHES \{#drop-text-index-caches\} -テキストインデックスのポスティングキャッシュをクリアします。 +テキストインデックスのヘッダーキャッシュ、辞書キャッシュ、およびポスティングキャッシュを消去します。 +## SYSTEM DROP REPLICA -## SYSTEM DROP TEXT INDEX CACHES {#drop-text-index-caches} - -テキストインデックスのヘッダーキャッシュ、ディクショナリキャッシュ、およびポスティングキャッシュをクリアします。 - - -## SYSTEM DROP REPLICA {#drop-replica} - -`ReplicatedMergeTree`テーブルの無効なレプリカは、以下の構文を使用して削除できます: +`ReplicatedMergeTree` テーブルのデッドレプリカは、次の構文を使って削除できます。 ```sql SYSTEM DROP REPLICA 'replica_name' FROM TABLE database.table; @@ -145,17 +134,17 @@ SYSTEM DROP REPLICA 'replica_name'; SYSTEM DROP REPLICA 'replica_name' FROM ZKPATH '/path/to/table/in/zk'; ``` -これらのクエリは、ZooKeeper内の`ReplicatedMergeTree`レプリカパスを削除します。レプリカが無効になっており、テーブルが既に存在しないために`DROP TABLE`でZooKeeperからメタデータを削除できない場合に有用です。非アクティブまたは古いレプリカのみを削除し、ローカルレプリカは削除できません。ローカルレプリカの削除には`DROP TABLE`を使用してください。`DROP REPLICA`はテーブルを削除せず、ディスクからデータやメタデータを削除しません。 +クエリは、ZooKeeper 内の `ReplicatedMergeTree` のレプリカパスを削除します。これは、レプリカがダウンしていて、もはやそのテーブルが存在しないために `DROP TABLE` では ZooKeeper からメタデータを削除できない場合に有用です。このクエリで削除されるのは非アクティブ/古いレプリカのみであり、ローカルレプリカは削除できません。その場合は `DROP TABLE` を使用してください。`DROP REPLICA` はテーブル自体をいっさい削除せず、ディスク上のデータやメタデータも削除しません。 -1つ目は、`database.table`テーブルの`'replica_name'`レプリカのメタデータを削除します。 -2つ目は、データベース内のすべてのレプリケートされたテーブルに対して同じ操作を実行します。 -3つ目は、ローカルサーバー上のすべてのレプリケートされたテーブルに対して同じ操作を実行します。 -4つ目は、テーブルの他のすべてのレプリカが削除された場合に、無効なレプリカのメタデータを削除するのに有用です。テーブルパスを明示的に指定する必要があります。これは、テーブル作成時に`ReplicatedMergeTree`エンジンの第1引数として渡されたパスと同じである必要があります。 +1つ目のクエリは、`database.table` テーブルの `'replica_name'` レプリカのメタデータを削除します。 +2つ目は、データベース内のすべてのレプリケートされたテーブルに対して同じ操作を行います。 +3つ目は、ローカルサーバー上のすべてのレプリケートされたテーブルに対して同じ操作を行います。 +4つ目は、テーブルの他のすべてのレプリカが削除された後に、ダウンしたレプリカのメタデータを削除するのに有用です。この場合、テーブルパスを明示的に指定する必要があります。これは、テーブル作成時に `ReplicatedMergeTree` エンジンの第1引数として渡されたパスと同一でなければなりません。 -## SYSTEM DROP DATABASE REPLICA {#drop-database-replica} +## SYSTEM DROP DATABASE REPLICA -`Replicated`データベースの無効なレプリカは、以下の構文を使用して削除できます: +`Replicated` データベースの無効になったレプリカは、次の構文を使用して削除できます。 ```sql SYSTEM DROP DATABASE REPLICA 'replica_name' [FROM SHARD 'shard_name'] FROM DATABASE database; @@ -163,28 +152,25 @@ SYSTEM DROP DATABASE REPLICA 'replica_name' [FROM SHARD 'shard_name']; SYSTEM DROP DATABASE REPLICA 'replica_name' [FROM SHARD 'shard_name'] FROM ZKPATH '/path/to/table/in/zk'; ``` -`SYSTEM DROP REPLICA`と同様ですが、`DROP DATABASE`を実行するデータベースが存在しない場合に、ZooKeeperから`Replicated`データベースのレプリカパスを削除します。なお、`ReplicatedMergeTree`レプリカは削除されないため、`SYSTEM DROP REPLICA`も併せて実行する必要がある場合があります。シャード名とレプリカ名は、データベース作成時に`Replicated`エンジンの引数として指定された名前です。また、これらの名前は`system.clusters`の`database_shard_name`列および`database_replica_name`列から取得できます。`FROM SHARD`句が省略されている場合、`replica_name`は`shard_name|replica_name`形式の完全なレプリカ名を指定する必要があります。 +`SYSTEM DROP REPLICA` に似ていますが、`DROP DATABASE` を実行対象とするデータベースが存在しない場合に ZooKeeper から `Replicated` データベースレプリカのパスを削除します。なお、これは `ReplicatedMergeTree` のレプリカは削除しない点に注意してください(そのため、`SYSTEM DROP REPLICA` も併せて必要になる場合があります)。シャード名およびレプリカ名は、データベース作成時に `Replicated` エンジンの引数で指定された名前です。また、これらの名前は `system.clusters` の `database_shard_name` 列および `database_replica_name` 列から取得することもできます。`FROM SHARD` 句が省略されている場合、`replica_name` は `shard_name|replica_name` 形式の完全なレプリカ名でなければなりません。 -## SYSTEM DROP UNCOMPRESSED CACHE {#drop-uncompressed-cache} +## SYSTEM DROP UNCOMPRESSED CACHE \{#drop-uncompressed-cache\} 非圧縮データキャッシュをクリアします。 -非圧縮データキャッシュの有効化/無効化は、クエリ/ユーザー/プロファイルレベルの設定[`use_uncompressed_cache`](../../operations/settings/settings.md#use_uncompressed_cache)で行います。 -キャッシュサイズは、サーバーレベルの設定[`uncompressed_cache_size`](../../operations/server-configuration-parameters/settings.md#uncompressed_cache_size)で設定できます。 - +非圧縮データキャッシュは、クエリ / ユーザー / プロファイルレベルの設定 [`use_uncompressed_cache`](../../operations/settings/settings.md#use_uncompressed_cache) で有効 / 無効を切り替えられます。 +そのサイズは、サーバーレベルの設定 [`uncompressed_cache_size`](../../operations/server-configuration-parameters/settings.md#uncompressed_cache_size) で設定できます。 -## SYSTEM DROP COMPILED EXPRESSION CACHE {#drop-compiled-expression-cache} +## SYSTEM DROP COMPILED EXPRESSION CACHE \{#drop-compiled-expression-cache\} コンパイル済み式キャッシュをクリアします。 -コンパイル済み式キャッシュは、クエリ/ユーザー/プロファイルレベルの設定 [`compile_expressions`](../../operations/settings/settings.md#compile_expressions) によって有効化/無効化されます。 +コンパイル済み式キャッシュは、クエリ/ユーザー/プロファイルレベルの設定 [`compile_expressions`](../../operations/settings/settings.md#compile_expressions) によって有効または無効にできます。 +## SYSTEM DROP QUERY CONDITION CACHE \{#drop-query-condition-cache\} -## SYSTEM DROP QUERY CONDITION CACHE {#drop-query-condition-cache} +クエリ条件キャッシュを消去します。 -クエリ条件キャッシュをクリアします。 - - -## SYSTEM DROP QUERY CACHE {#drop-query-cache} +## SYSTEM DROP QUERY CACHE ```sql SYSTEM DROP QUERY CACHE; @@ -192,309 +178,326 @@ SYSTEM DROP QUERY CACHE TAG '' ``` [クエリキャッシュ](../../operations/query-cache.md)をクリアします。 -タグを指定した場合、指定されたタグを持つクエリキャッシュエントリのみが削除されます。 +タグが指定された場合、指定したタグを持つクエリキャッシュエントリのみが削除されます。 -## SYSTEM DROP FORMAT SCHEMA CACHE {#system-drop-schema-format} +## SYSTEM DROP FORMAT SCHEMA CACHE -[`format_schema_path`](../../operations/server-configuration-parameters/settings.md#format_schema_path)から読み込まれたスキーマのキャッシュをクリアします。 +[`format_schema_path`](../../operations/server-configuration-parameters/settings.md#format_schema_path) から読み込まれたスキーマのキャッシュをクリアします。 サポートされる対象: -- Protobuf: インポートされたProtobufメッセージ定義をメモリから削除します。 -- Files: `format_schema_source`が`query`に設定されている場合に生成される、[`format_schema_path`](../../operations/server-configuration-parameters/settings.md#format_schema_path)にローカル保存されたキャッシュスキーマファイルを削除します。 - 注: 対象が指定されていない場合、両方のキャッシュがクリアされます。 +* Protobuf: インポートされた Protobuf メッセージ定義をメモリから削除します。 +* Files: `format_schema_source` が `query` に設定されている場合に生成され、ローカルの [`format_schema_path`](../../operations/server-configuration-parameters/settings.md#format_schema_path) に保存されているスキーマファイルのキャッシュを削除します。\ + 注記: 対象を指定しない場合、両方のキャッシュがクリアされます。 ```sql SYSTEM DROP FORMAT SCHEMA CACHE [FOR Protobuf/Files] ``` -## SYSTEM FLUSH LOGS {#flush-logs} +## SYSTEM FLUSH LOGS -バッファされたログメッセージをシステムテーブル(例: system.query_log)にフラッシュします。ほとんどのシステムテーブルはデフォルトで7.5秒のフラッシュ間隔が設定されているため、主にデバッグ用途で有用です。 -メッセージキューが空の場合でも、システムテーブルが作成されます。 +バッファリングされたログメッセージを `system.query_log` などのシステムテーブルにフラッシュします。ほとんどのシステムテーブルにはデフォルトで 7.5 秒のフラッシュ間隔が設定されているため、主にデバッグ目的で有用です。 +メッセージキューが空であっても、この操作を実行するとシステムテーブルが作成されます。 ```sql SYSTEM FLUSH LOGS [ON CLUSTER cluster_name] [log_name|[database.table]] [, ...] ``` -すべてをフラッシュする必要がない場合は、ログ名またはターゲットテーブルを指定することで、1つ以上の個別のログをフラッシュできます: +すべてのログをフラッシュしたくない場合は、名前または対象テーブルを指定して、1 つまたは複数の個別のログだけをフラッシュできます。 ```sql SYSTEM FLUSH LOGS query_log, system.query_views_log; ``` -## SYSTEM RELOAD CONFIG {#reload-config} +## SYSTEM RELOAD CONFIG -ClickHouseの設定を再読み込みします。設定がZooKeeperに保存されている場合に使用します。なお、`SYSTEM RELOAD CONFIG`はZooKeeperに保存されている`USER`設定は再読み込みせず、`users.xml`に保存されている`USER`設定のみを再読み込みします。すべての`USER`設定を再読み込みするには、`SYSTEM RELOAD USERS`を使用してください。 +ClickHouse の設定を再読み込みします。設定が ZooKeeper に保存されている場合に使用します。`SYSTEM RELOAD CONFIG` は ZooKeeper に保存されている `USER` 設定は再読み込みせず、`users.xml` に保存されている `USER` 設定のみを再読み込みします。すべての `USER` 設定を再読み込むには `SYSTEM RELOAD USERS` を使用します。 ```sql SYSTEM RELOAD CONFIG [ON CLUSTER cluster_name] ``` -## SYSTEM RELOAD USERS {#reload-users} +## SYSTEM RELOAD USERS -users.xml、ローカルディスクアクセスストレージ、レプリケートされた(ZooKeeper内の)アクセスストレージを含む、すべてのアクセスストレージを再読み込みします。 +すべてのアクセスストレージを再読み込みします。対象には `users.xml`、ローカルディスクのアクセスストレージ、ZooKeeper 上でレプリケートされるアクセスストレージが含まれます。 ```sql SYSTEM RELOAD USERS [ON CLUSTER cluster_name] ``` -## SYSTEM SHUTDOWN {#shutdown} - - - -ClickHouseを正常にシャットダウンします(`service clickhouse-server stop` / `kill {$pid_clickhouse-server}` と同様の動作) +## SYSTEM SHUTDOWN \{#shutdown\} + -## SYSTEM KILL {#kill} +通常どおり ClickHouse をシャットダウンします(`service clickhouse-server stop` や `kill {$pid_clickhouse-server}` コマンドの実行と同様です)。 -ClickHouseプロセスを強制終了します(`kill -9 {$ pid_clickhouse-server}`と同様) +## SYSTEM KILL \{#kill\} +ClickHouse プロセスを強制終了します(`kill -9 {$ pid_clickhouse-server}` と同様です) -## 分散テーブルの管理 {#managing-distributed-tables} +## 分散テーブルの管理 \{#managing-distributed-tables\} -ClickHouseは[分散](../../engines/table-engines/special/distributed.md)テーブルを管理できます。ユーザーがこれらのテーブルにデータを挿入すると、ClickHouseはまずクラスタノードに送信すべきデータのキューを作成し、その後非同期で送信します。キュー処理は[`STOP DISTRIBUTED SENDS`](#stop-distributed-sends)、[FLUSH DISTRIBUTED](#flush-distributed)、および[`START DISTRIBUTED SENDS`](#start-distributed-sends)クエリで管理できます。また、[`distributed_foreground_insert`](../../operations/settings/settings.md#distributed_foreground_insert)設定を使用して、分散データを同期的に挿入することもできます。 +ClickHouse は [distributed](../../engines/table-engines/special/distributed.md) テーブルを管理できます。ユーザーがこれらのテーブルにデータを挿入すると、ClickHouse はまずクラスタノードに送信するデータのキューを作成し、その後非同期的に送信します。キュー処理は、[`STOP DISTRIBUTED SENDS`](#stop-distributed-sends)、[FLUSH DISTRIBUTED](#flush-distributed)、[`START DISTRIBUTED SENDS`](#start-distributed-sends) クエリで制御できます。[`distributed_foreground_insert`](../../operations/settings/settings.md#distributed_foreground_insert) 設定を使用すると、分散データを同期的に挿入することもできます。 -### SYSTEM STOP DISTRIBUTED SENDS {#stop-distributed-sends} +### SYSTEM STOP DISTRIBUTED SENDS -分散テーブルへのデータ挿入時にバックグラウンドでのデータ配信を無効にします。 +分散テーブルへのデータ挿入時に行われるバックグラウンドでのデータ分散送信を無効化します。 ```sql SYSTEM STOP DISTRIBUTED SENDS [db.] [ON CLUSTER cluster_name] ``` :::note -[`prefer_localhost_replica`](../../operations/settings/settings.md#prefer_localhost_replica)が有効な場合(デフォルト)、ローカルシャードへのデータは挿入されます。 +[`prefer_localhost_replica`](../../operations/settings/settings.md#prefer_localhost_replica) が有効になっている場合(デフォルトの設定)、データは必ずローカルシャードに挿入されます。 ::: -### SYSTEM FLUSH DISTRIBUTED {#flush-distributed} -ClickHouseにクラスタノードへのデータ送信を同期的に実行させます。いずれかのノードが利用できない場合、ClickHouseは例外をスローしてクエリの実行を停止します。すべてのノードがオンラインに戻ると成功するため、成功するまでクエリを再試行できます。 +### SYSTEM FLUSH DISTRIBUTED + +ClickHouse にクラスタ内のノードへ同期的にデータを送信させます。いずれかのノードが利用できない場合、ClickHouse は例外をスローしてクエリの実行を停止します。すべてのノードがオンラインに戻ればクエリは成功するため、それまでクエリを再試行できます。 -`SETTINGS`句を使用して一部の設定を上書きすることもできます。これは`max_concurrent_queries_for_all_users`や`max_memory_usage`などの一時的な制限を回避するのに役立ちます。 +`SETTINGS` 句を使用して一部の設定を上書きすることもできます。これは、一時的な制限(`max_concurrent_queries_for_all_users` や `max_memory_usage` など)を回避するのに役立ちます。 ```sql -SYSTEM FLUSH DISTRIBUTED [db.] [ON CLUSTER cluster_name] [SETTINGS ...] +SYSTEM FLUSH DISTRIBUTED [db.]<分散テーブル名> [ON CLUSTER クラスター名] [SETTINGS ...] ``` :::note -各保留中のブロックは、最初のINSERTクエリの設定でディスクに保存されるため、設定を上書きしたい場合があります。 +各保留中のブロックは、最初の INSERT クエリの設定でディスク上に保存されます。そのため、状況によっては設定を上書きしたいケースが生じることがあります。 ::: -### SYSTEM START DISTRIBUTED SENDS {#start-distributed-sends} -分散テーブルへのデータ挿入時にバックグラウンドでのデータ配信を有効にします。 +### SYSTEM START DISTRIBUTED SENDS + +分散テーブルにデータを挿入する際に、バックグラウンドでのデータ送信を有効にします。 ```sql SYSTEM START DISTRIBUTED SENDS [db.] [ON CLUSTER cluster_name] ``` -### SYSTEM STOP LISTEN {#stop-listen} -ソケットを閉じ、指定されたポートと指定されたプロトコルでサーバーへの既存の接続を正常に終了します。 +### SYSTEM STOP LISTEN + +ソケットをクローズし、指定されたプロトコルおよびポートでサーバーへの既存の接続をグレースフルに終了します。 -ただし、対応するプロトコル設定がclickhouse-server設定で指定されていない場合、このコマンドは効果がありません。 +ただし、対応するプロトコル設定が `clickhouse-server` の設定内で指定されていない場合、このコマンドは何の効果もありません。 ```sql SYSTEM STOP LISTEN [ON CLUSTER cluster_name] [QUERIES ALL | QUERIES DEFAULT | QUERIES CUSTOM | TCP | TCP WITH PROXY | TCP SECURE | HTTP | HTTPS | MYSQL | GRPC | POSTGRESQL | PROMETHEUS | CUSTOM 'protocol'] ``` -- `CUSTOM 'protocol'`修飾子が指定された場合、サーバー設定のプロトコルセクションで定義された指定名のカスタムプロトコルが停止されます。 -- `QUERIES ALL [EXCEPT .. [,..]]`修飾子が指定された場合、`EXCEPT`句で指定されない限り、すべてのプロトコルが停止されます。 -- `QUERIES DEFAULT [EXCEPT .. [,..]]`修飾子が指定された場合、`EXCEPT`句で指定されない限り、すべてのデフォルトプロトコルが停止されます。 -- `QUERIES CUSTOM [EXCEPT .. [,..]]`修飾子が指定された場合、`EXCEPT`句で指定されない限り、すべてのカスタムプロトコルが停止されます。 +* `CUSTOM 'protocol'` 修飾子が指定された場合、サーバー設定の `protocols` セクションで定義された、指定された名前のカスタムプロトコルが停止されます。 +* `QUERIES ALL [EXCEPT .. [,..]]` 修飾子が指定された場合、`EXCEPT` 句で指定されたものを除き、すべてのプロトコルが停止されます。 +* `QUERIES DEFAULT [EXCEPT .. [,..]]` 修飾子が指定された場合、`EXCEPT` 句で指定されたものを除き、すべてのデフォルトプロトコルが停止されます。 +* `QUERIES CUSTOM [EXCEPT .. [,..]]` 修飾子が指定された場合、`EXCEPT` 句で指定されたものを除き、すべてのカスタムプロトコルが停止されます。 + -### SYSTEM START LISTEN {#start-listen} +### SYSTEM START LISTEN 指定されたプロトコルで新しい接続の確立を許可します。 -ただし、指定されたポートとプロトコルのサーバーがSYSTEM STOP LISTENコマンドを使用して停止されていない場合、このコマンドは効果がありません。 +ただし、指定されたポートおよびプロトコルで動作しているサーバーが SYSTEM STOP LISTEN コマンドで停止されていない場合、このコマンドは何の効果もありません。 ```sql SYSTEM START LISTEN [ON CLUSTER cluster_name] [QUERIES ALL | QUERIES DEFAULT | QUERIES CUSTOM | TCP | TCP WITH PROXY | TCP SECURE | HTTP | HTTPS | MYSQL | GRPC | POSTGRESQL | PROMETHEUS | CUSTOM 'protocol'] ``` -## MergeTreeテーブルの管理 {#managing-mergetree-tables} +## MergeTree テーブルの管理 \{#managing-mergetree-tables\} -ClickHouseは[MergeTree](../../engines/table-engines/mergetree-family/mergetree.md)テーブルのバックグラウンドプロセスを管理できます。 +ClickHouse は、[MergeTree](../../engines/table-engines/mergetree-family/mergetree.md) テーブルのバックグラウンドプロセスを管理できます。 -### SYSTEM STOP MERGES {#stop-merges} +### SYSTEM STOP MERGES -MergeTreeファミリーのテーブルに対してバックグラウンドマージを停止する機能を提供します: +MergeTree ファミリーのテーブルに対して、バックグラウンドでのマージ処理を停止することができます。 ```sql SYSTEM STOP MERGES [ON CLUSTER cluster_name] [ON VOLUME | [db.]merge_tree_family_table_name] ``` :::note -`DETACH / ATTACH`テーブルは、すべてのMergeTreeテーブルに対してマージが停止されていた場合でも、そのテーブルのバックグラウンドマージを開始します。 +テーブルに対して `DETACH / ATTACH` 操作を行うと、すべての MergeTree テーブルでマージが停止されている場合でも、そのテーブルのバックグラウンドマージが開始されます。 ::: -### SYSTEM START MERGES {#start-merges} + +### SYSTEM START MERGES -MergeTreeファミリーのテーブルに対してバックグラウンドマージを開始する機能を提供します: +MergeTree ファミリーのテーブルでバックグラウンドマージを開始できます。 ```sql SYSTEM START MERGES [ON CLUSTER cluster_name] [ON VOLUME | [db.]merge_tree_family_table_name] ``` -### SYSTEM STOP TTL MERGES {#stop-ttl-merges} -MergeTreeファミリーのテーブルに対して、[TTL式](../../engines/table-engines/mergetree-family/mergetree.md#table_engine-mergetree-ttl)に従った古いデータのバックグラウンド削除を停止する機能を提供します: -テーブルが存在しない場合やテーブルがMergeTreeエンジンでない場合でも`Ok.`を返します。データベースが存在しない場合はエラーを返します: +### SYSTEM STOP TTL MERGES + +MergeTree ファミリーのテーブルに対して、[TTL 式](../../engines/table-engines/mergetree-family/mergetree.md#table_engine-mergetree-ttl) に従って古いデータをバックグラウンドで削除する処理を停止します。 +テーブルが存在しない場合、またはテーブルが MergeTree エンジンを使用していない場合でも `Ok.` を返します。データベースが存在しない場合はエラーを返します。 ```sql SYSTEM STOP TTL MERGES [ON CLUSTER cluster_name] [[db.]merge_tree_family_table_name] ``` -### SYSTEM START TTL MERGES {#start-ttl-merges} -MergeTreeファミリーのテーブルに対して、[TTL式](../../engines/table-engines/mergetree-family/mergetree.md#table_engine-mergetree-ttl)に従った古いデータのバックグラウンド削除を開始する機能を提供します: -テーブルが存在しない場合でも`Ok.`を返します。データベースが存在しない場合はエラーを返します: +### SYSTEM START TTL MERGES + +MergeTree ファミリーのテーブルに対して、[TTL 式](../../engines/table-engines/mergetree-family/mergetree.md#table_engine-mergetree-ttl) に従って古いデータをバックグラウンドで削除する処理を開始します。 +テーブルが存在しない場合でも `Ok.` を返します。データベースが存在しない場合はエラーを返します。 ```sql SYSTEM START TTL MERGES [ON CLUSTER cluster_name] [[db.]merge_tree_family_table_name] ``` -### SYSTEM STOP MOVES {#stop-moves} -MergeTreeファミリーのテーブルに対して、[TO VOLUMEまたはTO DISK句を含むTTLテーブル式](../../engines/table-engines/mergetree-family/mergetree.md#mergetree-table-ttl)に従ったデータのバックグラウンド移動を停止する機能を提供します: -テーブルが存在しない場合でも`Ok.`を返します。データベースが存在しない場合はエラーを返します: +### SYSTEM STOP MOVES + +MergeTree ファミリーに属するテーブルに対して、[TO VOLUME または TO DISK 句を持つ TTL テーブル式](../../engines/table-engines/mergetree-family/mergetree.md#mergetree-table-ttl) に基づくバックグラウンドでのデータ移動を停止できます。 +テーブルが存在しない場合でも `Ok.` を返します。データベースが存在しない場合はエラーを返します。 ```sql SYSTEM STOP MOVES [ON CLUSTER cluster_name] [[db.]merge_tree_family_table_name] ``` -### SYSTEM START MOVES {#start-moves} -MergeTreeファミリーのテーブルに対して、[TO VOLUMEおよびTO DISK句を含むTTLテーブル式](../../engines/table-engines/mergetree-family/mergetree.md#mergetree-table-ttl)に従ったデータのバックグラウンド移動を開始する機能を提供します: -テーブルが存在しない場合でも`Ok.`を返します。データベースが存在しない場合はエラーを返します: +### SYSTEM START MOVES + +MergeTree ファミリーのテーブルに対して、[TO VOLUME および TO DISK 句を含む TTL テーブル式](../../engines/table-engines/mergetree-family/mergetree.md#mergetree-table-ttl) に従ったバックグラウンドでのデータ移動を開始します。 +テーブルが存在しない場合でも `Ok.` を返します。データベースが存在しない場合はエラーを返します。 ```sql SYSTEM START MOVES [ON CLUSTER cluster_name] [[db.]merge_tree_family_table_name] ``` -### SYSTEM SYSTEM UNFREEZE {#query_language-system-unfreeze} -すべてのディスクから指定された名前の凍結されたバックアップをクリアします。個別のパーツの凍結解除の詳細については、[ALTER TABLE table_name UNFREEZE WITH NAME ](/sql-reference/statements/alter/partition#unfreeze-partition)を参照してください +### SYSTEM SYSTEM UNFREEZE + +指定した名前の凍結バックアップを、すべてのディスクから削除します。個々のパーツの凍結解除については、[ALTER TABLE table_name UNFREEZE WITH NAME](/sql-reference/statements/alter/partition#unfreeze-partition) を参照してください。 ```sql -SYSTEM UNFREEZE WITH NAME +SYSTEM UNFREEZE WITH NAME <バックアップ名> ``` -### SYSTEM WAIT LOADING PARTS {#wait-loading-parts} -テーブルの非同期でロード中のすべてのデータパーツ(古いデータパーツ)がロードされるまで待機します。 +### SYSTEM WAIT LOADING PARTS + +テーブル内の非同期で読み込み中のすべてのデータパーツ(古いデータパーツ)の読み込みが完了するまで待機します。 ```sql SYSTEM WAIT LOADING PARTS [ON CLUSTER cluster_name] [db.]merge_tree_family_table_name ``` -## ReplicatedMergeTreeテーブルの管理 {#managing-replicatedmergetree-tables} +## ReplicatedMergeTree テーブルの管理 \{#managing-replicatedmergetree-tables\} -ClickHouseは[ReplicatedMergeTree](/engines/table-engines/mergetree-family/replication)テーブルにおけるバックグラウンドレプリケーション関連プロセスを管理できます。 +ClickHouse は、[ReplicatedMergeTree](/engines/table-engines/mergetree-family/replication) テーブルにおけるバックグラウンドでのレプリケーション関連プロセスを管理できます。 -### SYSTEM STOP FETCHES {#stop-fetches} +### SYSTEM STOP FETCHES -`ReplicatedMergeTree`ファミリーのテーブルにおいて、挿入されたパーツのバックグラウンドフェッチを停止します。 -テーブルエンジンに関係なく、またテーブルやデータベースが存在しない場合でも、常に`Ok.`を返します。 +`ReplicatedMergeTree` ファミリーのテーブルに対して、挿入されたパーツのバックグラウンドでのフェッチ処理を停止するためのコマンドです。 +テーブルエンジンに関係なく、またテーブルやデータベースが存在しない場合でも、常に `Ok.` を返します。 ```sql SYSTEM STOP FETCHES [ON CLUSTER cluster_name] [[db.]replicated_merge_tree_family_table_name] ``` -### SYSTEM START FETCHES {#start-fetches} + +### SYSTEM START FETCHES -`ReplicatedMergeTree`ファミリーのテーブルにおいて、挿入されたパーツのバックグラウンドフェッチを開始します。 -テーブルエンジンに関係なく、またテーブルやデータベースが存在しない場合でも、常に`Ok.`を返します。 +`ReplicatedMergeTree` ファミリーに属するテーブルに対して、挿入済みパーツのバックグラウンドでのフェッチを開始できます。 +テーブルエンジンの種類に関係なく、テーブルやデータベースが存在しない場合でも、常に `Ok.` を返します。 ```sql SYSTEM START FETCHES [ON CLUSTER cluster_name] [[db.]replicated_merge_tree_family_table_name] ``` -### SYSTEM STOP REPLICATED SENDS {#stop-replicated-sends} -`ReplicatedMergeTree`ファミリーのテーブルにおいて、新しく挿入されたパーツをクラスタ内の他のレプリカへバックグラウンド送信することを停止します。 +### SYSTEM STOP REPLICATED SENDS + +`ReplicatedMergeTree` ファミリーのテーブルに対して、新規に挿入されたパーツをクラスタ内の他のレプリカへバックグラウンドで送信する処理を停止できるようにします。 ```sql SYSTEM STOP REPLICATED SENDS [ON CLUSTER cluster_name] [[db.]replicated_merge_tree_family_table_name] ``` -### SYSTEM START REPLICATED SENDS {#start-replicated-sends} -`ReplicatedMergeTree`ファミリーのテーブルにおいて、新しく挿入されたパーツをクラスタ内の他のレプリカへバックグラウンド送信することを開始します。 +### SYSTEM START REPLICATED SENDS + +`ReplicatedMergeTree` ファミリーのテーブルに対して、新しく挿入されたパーツをクラスタ内の他のレプリカへバックグラウンドで送信し始めることを可能にします。 ```sql SYSTEM START REPLICATED SENDS [ON CLUSTER cluster_name] [[db.]replicated_merge_tree_family_table_name] ``` -### SYSTEM STOP REPLICATION QUEUES {#stop-replication-queues} -`ReplicatedMergeTree`ファミリーのテーブルにおいて、Zookeeperに保存されているレプリケーションキューからのバックグラウンドフェッチタスクを停止します。可能なバックグラウンドタスクの種類は、マージ、フェッチ、ミューテーション、ON CLUSTER句を含むDDL文です。 +### SYSTEM STOP REPLICATION QUEUES + +`ReplicatedMergeTree` ファミリーのテーブルについて、ZooKeeper に保存されているレプリケーションキューにあるバックグラウンドのフェッチタスクを停止することができます。バックグラウンドタスクの種類には、マージ、フェッチ、ミューテーション、ON CLUSTER 句を伴う DDL ステートメントがあります。 ```sql SYSTEM STOP REPLICATION QUEUES [ON CLUSTER cluster_name] [[db.]replicated_merge_tree_family_table_name] ``` -### SYSTEM START REPLICATION QUEUES {#start-replication-queues} -`ReplicatedMergeTree`ファミリーのテーブルにおいて、Zookeeperに保存されているレプリケーションキューからのバックグラウンドフェッチタスクを開始します。可能なバックグラウンドタスクの種類は、マージ、フェッチ、ミューテーション、ON CLUSTER句を含むDDL文です。 +### SYSTEM START REPLICATION QUEUES + +`ReplicatedMergeTree` ファミリーに属するテーブルについて、ZooKeeper に保存されているレプリケーションキューからバックグラウンドのフェッチタスクを開始できるようにします。バックグラウンドで実行されるタスクの種類には、マージ、フェッチ、ミューテーション、ON CLUSTER 句付きの DDL ステートメントがあります。 ```sql SYSTEM START REPLICATION QUEUES [ON CLUSTER cluster_name] [[db.]replicated_merge_tree_family_table_name] ``` -### SYSTEM STOP PULLING REPLICATION LOG {#stop-pulling-replication-log} -`ReplicatedMergeTree`テーブルにおいて、レプリケーションログからレプリケーションキューへの新しいエントリの読み込みを停止します。 +### SYSTEM STOP PULLING REPLICATION LOG + +`ReplicatedMergeTree` テーブルにおいて、レプリケーションログからレプリケーションキューへの新しいエントリの読み込み処理を停止します。 ```sql SYSTEM STOP PULLING REPLICATION LOG [ON CLUSTER cluster_name] [[db.]replicated_merge_tree_family_table_name] ``` -### SYSTEM START PULLING REPLICATION LOG {#start-pulling-replication-log} -`SYSTEM STOP PULLING REPLICATION LOG`をキャンセルします。 +### SYSTEM START PULLING REPLICATION LOG + +`SYSTEM STOP PULLING REPLICATION LOG` コマンドを取り消します。 ```sql SYSTEM START PULLING REPLICATION LOG [ON CLUSTER cluster_name] [[db.]replicated_merge_tree_family_table_name] ``` -### SYSTEM SYNC REPLICA {#sync-replica} -`ReplicatedMergeTree`テーブルがクラスタ内の他のレプリカと同期されるまで待機しますが、最大で`receive_timeout`秒までです。 +### SYSTEM SYNC REPLICA + +`ReplicatedMergeTree` テーブルがクラスター内の他のレプリカと同期し終えるまで待機しますが、`receive_timeout` 秒以上は待機しません。 ```sql SYSTEM SYNC REPLICA [ON CLUSTER cluster_name] [db.]replicated_merge_tree_family_table_name [IF EXISTS] [STRICT | LIGHTWEIGHT [FROM 'srcReplica1'[, 'srcReplica2'[, ...]]] | PULL] ``` -このステートメントを実行すると、`[db.]replicated_merge_tree_family_table_name`は共通のレプリケーションログからコマンドを自身のレプリケーションキューにフェッチし、その後クエリはレプリカがフェッチされたすべてのコマンドを処理するまで待機します。以下の修飾子がサポートされています。 +このステートメントを実行すると、`[db.]replicated_merge_tree_family_table_name` は共通のレプリケーションログからコマンドを取得して自身のレプリケーションキューに取り込み、その後、取得したすべてのコマンドをレプリカが処理し終えるまでクエリは待機します。次の修飾子がサポートされています: +* `IF EXISTS`(25.6 以降で利用可能)を指定すると、テーブルが存在しない場合でもクエリはエラーを返しません。これは、新しいレプリカをクラスタに追加する際、すでにクラスタ設定には含まれているものの、テーブルの作成と同期処理がまだ進行中である場合に有用です。 +* `STRICT` 修飾子が指定されている場合、クエリはレプリケーションキューが空になるまで待機します。レプリケーションキューに新しいエントリが継続的に追加される状況では、`STRICT` 指定時のクエリは完了しない可能性があります。 +* `LIGHTWEIGHT` 修飾子が指定されている場合、クエリは `GET_PART`、`ATTACH_PART`、`DROP_RANGE`、`REPLACE_RANGE`、`DROP_PART` エントリが処理されるのを待つだけです。 + さらに、`LIGHTWEIGHT` 修飾子はオプションの `FROM 'srcReplicas'` 句をサポートしており、`'srcReplicas'` はソースレプリカ名のカンマ区切りリストです。この拡張により、指定されたソースレプリカから発生したレプリケーションタスクのみに対象を絞って同期を行うことができます。 +* `PULL` 修飾子が指定されている場合、クエリは ZooKeeper から新しいレプリケーションキューエントリを取得しますが、それらが処理されるのを待機しません。 -- `IF EXISTS`を使用すると(25.6以降で利用可能)、テーブルが存在しない場合でもクエリはエラーをスローしません。これは、クラスタ設定の一部として既に含まれているが、まだテーブルの作成と同期の処理中である新しいレプリカをクラスタに追加する際に便利です。 -- `STRICT`修飾子が指定された場合、クエリはレプリケーションキューが空になるまで待機します。レプリケーションキューに新しいエントリが絶えず追加される場合、`STRICT`バージョンは成功しない可能性があります。 -- `LIGHTWEIGHT`修飾子が指定された場合、クエリは`GET_PART`、`ATTACH_PART`、`DROP_RANGE`、`REPLACE_RANGE`、`DROP_PART`エントリの処理のみを待機します。 - さらに、LIGHTWEIGHT修飾子はオプションのFROM 'srcReplicas'句をサポートしており、'srcReplicas'はソースレプリカ名のカンマ区切りリストです。この拡張機能により、指定されたソースレプリカから発生するレプリケーションタスクのみに焦点を当てることで、より対象を絞った同期が可能になります。 -- `PULL`修飾子が指定された場合、クエリはZooKeeperから新しいレプリケーションキューエントリを取得しますが、処理の完了を待機しません。 -### SYNC DATABASE REPLICA {#sync-database-replica} +### SYNC DATABASE REPLICA -指定された[レプリケートデータベース](/engines/database-engines/replicated)が、そのデータベースのDDLキューからすべてのスキーマ変更を適用するまで待機します。 +指定された[レプリケーテッドデータベース](/engines/database-engines/replicated)が、そのデータベースの DDL キューからのすべてのスキーマ変更の適用を完了するまで待機します。 **構文** @@ -502,37 +505,39 @@ SYSTEM SYNC REPLICA [ON CLUSTER cluster_name] [db.]replicated_merge_tree_family_ SYSTEM SYNC DATABASE REPLICA replicated_database_name; ``` -### SYSTEM RESTART REPLICA {#restart-replica} -`ReplicatedMergeTree`テーブルのZooKeeperセッション状態を再初期化する機能を提供します。現在の状態を信頼できる情報源としてZooKeeperと比較し、必要に応じてZooKeeperキューにタスクを追加します。 -ZooKeeperデータに基づくレプリケーションキューの初期化は、`ATTACH TABLE`ステートメントと同じ方法で行われます。短時間、テーブルはすべての操作に対して利用できなくなります。 +### SYSTEM RESTART REPLICA + +`ReplicatedMergeTree` テーブルに対して ZooKeeper セッションの状態を再初期化できるようにします。現在の状態を「ソース・オブ・トゥルース」である ZooKeeper と比較し、必要に応じてタスクを ZooKeeper のキューに追加します。 +ZooKeeper 上のデータに基づくレプリケーションキューの初期化は、`ATTACH TABLE` ステートメントの場合と同じ方法で行われます。短時間の間、そのテーブルはすべての操作に対して利用できなくなります。 ```sql SYSTEM RESTART REPLICA [ON CLUSTER cluster_name] [db.]replicated_merge_tree_family_table_name ``` -### SYSTEM RESTORE REPLICA {#restore-replica} -データが[おそらく]存在するがZooKeeperメタデータが失われた場合に、レプリカを復元します。 +### SYSTEM RESTORE REPLICA \{#restore-replica\} -読み取り専用の`ReplicatedMergeTree`テーブルでのみ動作します。 +データは[存在している可能性があるが]、ZooKeeper のメタデータが失われた場合にレプリカを復元します。 -次の場合にクエリを実行できます: +読み取り専用の `ReplicatedMergeTree` テーブルに対してのみ動作します。 -- ZooKeeperルート`/`の喪失。 -- レプリカパス`/replicas`の喪失。 -- 個別のレプリカパス`/replicas/replica_name/`の喪失。 +次のような状況の後にクエリを実行できます: -レプリカはローカルで見つかったパートをアタッチし、それらに関する情報をZooKeeperに送信します。 -メタデータ喪失前にレプリカに存在していたパートは、古くなっていない限り他のレプリカから再取得されません(したがって、レプリカの復元はネットワーク経由ですべてのデータを再ダウンロードすることを意味しません)。 +- ZooKeeper ルート `/` の消失。 +- レプリカパス `/replicas` の消失。 +- 個々のレプリカパス `/replicas/replica_name/` の消失。 + +レプリカはローカルで見つかったパーツをアタッチし、それらに関する情報を ZooKeeper に送信します。 +メタデータ消失前にレプリカ上に存在していたパーツは、古くなっていない限り他のレプリカから再取得されません(つまり、レプリカの復元はネットワーク越しにすべてのデータを再ダウンロードすることを意味しません)。 :::note -すべての状態のパートは`detached/`フォルダに移動されます。データ喪失前にアクティブだった(コミット済みの)パートはアタッチされます。 +状態にかかわらずすべてのパーツは `detached/` ディレクトリに移動されます。データ消失前にアクティブだった(コミット済みの)パーツがアタッチされます。 ::: -### SYSTEM RESTORE DATABASE REPLICA {#restore-database-replica} +### SYSTEM RESTORE DATABASE REPLICA -データが[おそらく]存在するがZooKeeperメタデータが失われた場合に、レプリカを復元します。 +データは存在している可能性があるが ZooKeeper メタデータが失われているレプリカを復元します。 **構文** @@ -550,7 +555,7 @@ CREATE TABLE repl_db.test_table (n UInt32) ENGINE = ReplicatedMergeTree ORDER BY n PARTITION BY n % 10; --- zookeeper_delete_path("/clickhouse/repl_db", recursive=True) <- ルートの喪失。 +-- zookeeper_delete_path("/clickhouse/repl_db", recursive=True) <- ルート喪失 SYSTEM RESTORE DATABASE REPLICA repl_db; ``` @@ -561,7 +566,7 @@ SYSTEM RESTORE DATABASE REPLICA repl_db; SYSTEM RESTORE REPLICA [db.]replicated_merge_tree_family_table_name [ON CLUSTER cluster_name] ``` -代替構文: +別の書き方: ```sql SYSTEM RESTORE REPLICA [ON CLUSTER cluster_name] [db.]replicated_merge_tree_family_table_name @@ -569,7 +574,7 @@ SYSTEM RESTORE REPLICA [ON CLUSTER cluster_name] [db.]replicated_merge_tree_fami **例** -複数のサーバーでテーブルを作成します。ZooKeeperのレプリカメタデータが失われた後、メタデータが欠落しているためテーブルは読み取り専用としてアタッチされます。最後のクエリはすべてのレプリカで実行する必要があります。 +複数のサーバー上にテーブルを作成します。ZooKeeper 上のレプリカのメタデータが失われた場合、メタデータが欠落しているため、そのテーブルは読み取り専用としてアタッチされます。最後のクエリはすべてのレプリカで実行する必要があります。 ```sql CREATE TABLE test(n UInt32) @@ -578,7 +583,7 @@ ORDER BY n PARTITION BY n % 10; INSERT INTO test SELECT * FROM numbers(1000); --- zookeeper_delete_path("/clickhouse/tables/test", recursive=True) <- ルートの喪失。 +-- zookeeper_delete_path("/clickhouse/tables/test", recursive=True) <- ルートの損失 SYSTEM RESTART REPLICA test; SYSTEM RESTORE REPLICA test; @@ -590,34 +595,36 @@ SYSTEM RESTORE REPLICA test; SYSTEM RESTORE REPLICA test ON CLUSTER cluster; ``` -### SYSTEM RESTART REPLICAS {#restart-replicas} -すべての`ReplicatedMergeTree`テーブルのZooKeeperセッション状態を再初期化する機能を提供します。現在の状態を信頼できる情報源としてZooKeeperと比較し、必要に応じてZooKeeperキューにタスクを追加します +### SYSTEM RESTART REPLICAS \{#restart-replicas\} +すべての `ReplicatedMergeTree` テーブルに対して Zookeeper セッションの状態を再初期化できるようにします。現在の状態を信頼できる唯一の情報源である Zookeeper 上の状態と比較し、必要に応じて Zookeeper キューにタスクを追加します。 -### SYSTEM DROP FILESYSTEM CACHE {#drop-filesystem-cache} +### SYSTEM DROP FILESYSTEM CACHE -ファイルシステムキャッシュを削除できます。 +ファイルシステムキャッシュを破棄します。 ```sql SYSTEM DROP FILESYSTEM CACHE [ON CLUSTER cluster_name] ``` -### SYSTEM SYNC FILE CACHE {#sync-file-cache} + +### SYSTEM SYNC FILE CACHE :::note -この操作は負荷が高く、誤用される可能性があります。 +負荷が高く、悪用されるおそれがあります。 ::: -syncシステムコールを実行します。 +`sync` システムコールを呼び出します。 ```sql SYSTEM SYNC FILE CACHE [ON CLUSTER cluster_name] ``` -### SYSTEM LOAD PRIMARY KEY {#load-primary-key} -指定されたテーブルまたはすべてのテーブルのプライマリキーをロードします。 +### SYSTEM LOAD PRIMARY KEY + +指定したテーブル、またはすべてのテーブルの主キーを読み込みます。 ```sql SYSTEM LOAD PRIMARY KEY [db.]name @@ -627,9 +634,10 @@ SYSTEM LOAD PRIMARY KEY [db.]name SYSTEM LOAD PRIMARY KEY ``` -### SYSTEM UNLOAD PRIMARY KEY {#unload-primary-key} -指定されたテーブルまたはすべてのテーブルのプライマリキーをアンロードします。 +### SYSTEM UNLOAD PRIMARY KEY + +指定したテーブルまたはすべてのテーブルのプライマリキーをアンロードします。 ```sql SYSTEM UNLOAD PRIMARY KEY [db.]name @@ -640,67 +648,71 @@ SYSTEM UNLOAD PRIMARY KEY ``` -## リフレッシュ可能なマテリアライズドビューの管理 {#refreshable-materialized-views} +## リフレッシュ可能なマテリアライズドビューの管理 \{#refreshable-materialized-views\} -[リフレッシュ可能なマテリアライズドビュー](../../sql-reference/statements/create/view.md#refreshable-materialized-view)によって実行されるバックグラウンドタスクを制御するコマンド +[リフレッシュ可能なマテリアライズドビュー](../../sql-reference/statements/create/view.md#refreshable-materialized-view) によってバックグラウンドで実行されるタスクを制御するコマンド。 -これらを使用する際は、[`system.view_refreshes`](../../operations/system-tables/view_refreshes.md)を監視してください。 +利用時は [`system.view_refreshes`](../../operations/system-tables/view_refreshes.md) を監視してください。 -### SYSTEM REFRESH VIEW {#refresh-view} +### SYSTEM REFRESH VIEW -指定されたビューのスケジュール外の即時リフレッシュをトリガーします。 +指定したビューのスケジュール外即時リフレッシュをトリガーします。 ```sql SYSTEM REFRESH VIEW [db.]name ``` -### SYSTEM WAIT VIEW {#wait-view} -現在実行中のリフレッシュが完了するまで待機します。リフレッシュが失敗した場合は例外をスローします。リフレッシュが実行されていない場合は即座に完了し、前回のリフレッシュが失敗していた場合は例外をスローします。 +### SYSTEM WAIT VIEW \{#wait-view\} + +現在実行中のリフレッシュが完了するまで待機します。リフレッシュが失敗した場合は例外をスローします。リフレッシュが実行されていない場合は直ちに完了し、直前のリフレッシュが失敗している場合は例外をスローします。 -### SYSTEM STOP [REPLICATED] VIEW, STOP VIEWS {#stop-view-stop-views} +### SYSTEM STOP [REPLICATED] VIEW, STOP VIEWS -指定されたビューまたはすべてのリフレッシュ可能なビューの定期的なリフレッシュを無効にします。リフレッシュが進行中の場合は、それもキャンセルします。 +指定したビュー、またはすべてのリフレッシュ可能なビューの定期的なリフレッシュを停止します。リフレッシュが実行中の場合は、その処理も停止します。 -ビューがReplicatedまたはSharedデータベースにある場合、`STOP VIEW`は現在のレプリカのみに影響し、`STOP REPLICATED VIEW`はすべてのレプリカに影響します。 +ビューが Replicated または Shared データベース内にある場合、`STOP VIEW` は現在のレプリカにのみ影響し、`STOP REPLICATED VIEW` はすべてのレプリカに影響します。 ```sql SYSTEM STOP VIEW [db.]name ``` ```sql -SYSTEM STOP VIEWS +システム停止ビュー ``` -### SYSTEM START [REPLICATED] VIEW, START VIEWS {#start-view-start-views} -指定されたビューまたはすべてのリフレッシュ可能なビューの定期的なリフレッシュを有効にします。即時リフレッシュはトリガーされません。 +### SYSTEM START [REPLICATED] VIEW, START VIEWS + +指定したビュー、またはすべてのリフレッシュ可能なビューに対して、定期的なリフレッシュを有効化します。即時のリフレッシュは実行されません。 -ビューがReplicatedまたはSharedデータベースにある場合、`START VIEW`は`STOP VIEW`の効果を取り消し、`START REPLICATED VIEW`は`STOP REPLICATED VIEW`の効果を取り消します。 +ビューが Replicated または Shared データベース内にある場合、`START VIEW` は `STOP VIEW` の効果を取り消し、`START REPLICATED VIEW` は `STOP REPLICATED VIEW` の効果を取り消します。 ```sql SYSTEM START VIEW [db.]name ``` ```sql -SYSTEM START VIEWS +システム起動ビュー ``` -### SYSTEM CANCEL VIEW {#cancel-view} -現在のレプリカで指定されたビューのリフレッシュが進行中の場合、それを中断してキャンセルします。それ以外の場合は何もしません。 +### SYSTEM CANCEL VIEW + +指定されたビューについて、現在のレプリカ上でリフレッシュが実行中の場合は、それを中断してキャンセルします。実行中でない場合は何もしません。 ```sql SYSTEM CANCEL VIEW [db.]name ``` -### SYSTEM WAIT VIEW {#system-wait-view} -実行中のリフレッシュが完了するまで待機します。リフレッシュが実行されていない場合は即座に戻ります。最新のリフレッシュ試行が失敗した場合は、エラーを報告します。 +### SYSTEM WAIT VIEW + +実行中のリフレッシュが完了するまで待機します。リフレッシュが実行されていない場合は、直ちに戻ります。直近のリフレッシュ試行が失敗している場合は、エラーを返します。 -新しいリフレッシュ可能なマテリアライズドビューを作成した直後(EMPTYキーワードなし)に使用して、初期リフレッシュが完了するまで待機できます。 +新しいリフレッシュ可能なマテリアライズドビュー(`EMPTY` キーワードなし)を作成した直後に、初回リフレッシュの完了を待つ目的で使用できます。 -ビューがReplicatedまたはSharedデータベースにあり、別のレプリカでリフレッシュが実行されている場合、そのリフレッシュが完了するまで待機します。 +ビューが Replicated または Shared データベース内にあり、別のレプリカ上でリフレッシュが実行されている場合は、そのリフレッシュが完了するまで待機します。 ```sql SYSTEM WAIT VIEW [db.]name diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/syntax.md b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/syntax.md index e4c286afc5a..095d205e08a 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/syntax.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/syntax.md @@ -1,6 +1,5 @@ --- description: '構文に関するドキュメント' -displayed_sidebar: 'sqlreference' sidebar_label: '構文' sidebar_position: 2 slug: /sql-reference/syntax @@ -9,193 +8,188 @@ doc_type: 'reference' --- このセクションでは、ClickHouse の SQL 構文について説明します。 -ClickHouse は SQL をベースにした構文を採用しており、さまざまな拡張機能と最適化を提供します。 +ClickHouse は SQL をベースにした構文を採用していますが、多くの拡張と最適化を備えています。 +## クエリのパース +ClickHouse には 2 種類のパーサーがあります。 -## クエリの解析 {#query-parsing} +* *フル SQL パーサー*(再帰下降パーサー) +* *データフォーマットパーサー*(高速ストリームパーサー) -ClickHouseには2種類のパーサーがあります: +`INSERT` クエリ以外のすべてのクエリではフル SQL パーサーが使用され、`INSERT` クエリでは両方のパーサーが使用されます。 -- _完全なSQLパーサー_(再帰下降パーサー) -- _データフォーマットパーサー_(高速ストリームパーサー) - -完全なSQLパーサーは、両方のパーサーを使用する`INSERT`クエリを除き、すべての場合に使用されます。 - -以下のクエリを見てみましょう: +次のクエリを見てみましょう。 ```sql INSERT INTO t VALUES (1, 'Hello, world'), (2, 'abc'), (3, 'def') ``` -既に述べたように、`INSERT`クエリは両方のパーサーを使用します。 -`INSERT INTO t VALUES`の部分は完全なパーサーによって解析され、 -データ`(1, 'Hello, world'), (2, 'abc'), (3, 'def')`はデータフォーマットパーサー(高速ストリームパーサー)によって解析されます。 +前述のとおり、`INSERT` クエリは 2 種類のパーサーの両方を使用します。 +`INSERT INTO t VALUES` の部分はフルパーサーで解析され、 +データ `(1, 'Hello, world'), (2, 'abc'), (3, 'def')` はデータフォーマットパーサー、または高速ストリームパーサーで解析されます。
-完全なパーサーを有効にする - -[`input_format_values_interpret_expressions`](../operations/settings/settings-formats.md#input_format_values_interpret_expressions)設定を使用することで、データに対して完全なパーサーを有効にすることもできます。 + フルパーサーを有効にする -この設定を`1`に設定すると、 -ClickHouseはまず高速ストリームパーサーで値の解析を試みます。 -それが失敗した場合、ClickHouseはデータに対して完全なパーサーを使用し、SQL[式](#expressions)として扱います。 + データに対してフルパーサーを有効にするには、 + [`input_format_values_interpret_expressions`](../operations/settings/settings-formats.md#input_format_values_interpret_expressions) 設定を使用します。 + 上記の設定を `1` にすると、 + ClickHouse はまず高速ストリームパーサーで値の解析を試みます。 + 失敗した場合、ClickHouse はデータを SQL の[式](#expressions)として扱い、フルパーサーでの解析を試みます。
-データは任意のフォーマットを持つことができます。 -クエリを受信すると、サーバーはリクエストの最大[max_query_size](../operations/settings/settings.md#max_query_size)バイト(デフォルトでは1MB)までをRAMで処理し、 -残りはストリーム解析されます。 -これは、大規模な`INSERT`クエリに関する問題を回避するためであり、ClickHouseでデータを挿入する際の推奨方法です。 +データのフォーマットは任意です。 +クエリを受信すると、サーバーは RAM 上でリクエストの [max_query_size](../operations/settings/settings.md#max_query_size) バイト分までしか +処理せず(デフォルトでは 1 MB)、残りはストリームとして解析されます。 +これは、大きな `INSERT` クエリで問題が発生するのを回避するためであり、ClickHouse へのデータ挿入方法として推奨されています。 -`INSERT`クエリで[`Values`](/interfaces/formats/Values)フォーマットを使用する場合、 -データが`SELECT`クエリの式と同じように解析されるように見えるかもしれませんが、実際にはそうではありません。 -`Values`フォーマットははるかに制限されています。 +`INSERT` クエリで [`Values`](/interfaces/formats/Values) フォーマットを使用する場合、 +`SELECT` クエリの式と同じようにデータが解析されているように見えるかもしれませんが、実際にはそうではありません。 +`Values` フォーマットははるかに制限されたものです。 -このセクションの残りの部分では、完全なパーサーについて説明します。 +このセクションの残りではフルパーサーについて説明します。 :::note -フォーマットパーサーの詳細については、[フォーマット](../interfaces/formats.md)セクションを参照してください。 +フォーマットパーサーの詳細については、[Formats](../interfaces/formats.md) セクションを参照してください。 ::: -## 空白文字 {#spaces} - -- 構文要素間(クエリの先頭と末尾を含む)には、任意の数の空白文字を使用できます。 -- 空白文字には、スペース、タブ、改行(LF)、キャリッジリターン(CR)、フォームフィードが含まれます。 - +## 空白 \{#spaces\} -## コメント {#comments} +- 構文要素の間(クエリの先頭および末尾も含めて)には、任意の数の空白文字を入れることができます。 +- 空白文字には、スペース、タブ、ラインフィード、CR、フォームフィードが含まれます。 -ClickHouseはSQLスタイルとCスタイルの両方のコメントをサポートしています: +## コメント \{#comments\} -- SQLスタイルのコメントは`--`、`#!`、または`# `で始まり、行末まで続きます。`--`と`#!`の後のスペースは省略できます。 -- Cスタイルのコメントは`/*`から`*/`までの範囲で、複数行にわたることができます。スペースは必須ではありません。 +ClickHouse は、SQL スタイルおよび C スタイルの両方のコメントをサポートしています。 +- SQL スタイルのコメントは `--`、`#!` または `# ` で始まり、その行末までがコメントになります。`--` および `#!` の後のスペースは省略可能です。 +- C スタイルのコメントは `/*` から `*/` までの範囲がコメントとなり、複数行にわたることもあります。スペースも不要です。 -## キーワード {#keywords} +## キーワード -ClickHouseのキーワードは、文脈に応じて_大文字小文字を区別する_場合と_区別しない_場合があります。 +ClickHouse のキーワードは、コンテキストに応じて *大文字小文字を区別する* 場合と *区別しない* 場合があります。 -キーワードが**大文字小文字を区別しない**のは、以下に該当する場合です: +次の場合、キーワードは **大文字小文字を区別しません**: -- SQL標準。例えば、`SELECT`、`select`、`SeLeCt`はすべて有効です。 -- 一部の主要なDBMS(MySQLやPostgres)の実装。例えば、`DateTime`は`datetime`と同じです。 +* SQL 標準に従う場合。たとえば `SELECT`、`select`、`SeLeCt` はすべて有効です。 +* 一般的な一部の DBMS(MySQL や Postgres)での実装に従う場合。たとえば `DateTime` は `datetime` と同じです。 :::note -データ型名が大文字小文字を区別するかどうかは、[system.data_type_families](/operations/system-tables/data_type_families)テーブルで確認できます。 +データ型名が大文字小文字を区別するかどうかは、[system.data_type_families](/operations/system-tables/data_type_families) テーブルで確認できます。 ::: -標準SQLとは対照的に、その他のすべてのキーワード(関数名を含む)は**大文字小文字を区別します**。 +標準 SQL とは対照的に、その他すべてのキーワード(関数名を含む)は **大文字小文字を区別します**。 さらに、キーワードは予約語ではありません。 -対応する文脈においてのみ、キーワードとして扱われます。 -キーワードと同じ名前の[識別子](#identifiers)を使用する場合は、二重引用符またはバッククォートで囲んでください。 +対応するコンテキスト内でのみ、そのように扱われます。 +キーワードと同じ名前の[識別子](#identifiers)を使用する場合は、ダブルクォートまたはバッククォートで囲んでください。 -例えば、テーブル`table_name`に`"FROM"`という名前のカラムがある場合、以下のクエリは有効です: +たとえば、テーブル `table_name` に `"FROM"` という名前のカラムがある場合、次のクエリは有効です: ```sql SELECT "FROM" FROM table_name ``` -## 識別子 {#identifiers} +## 識別子 \{#identifiers\} -識別子には以下が含まれます: +識別子とは次のものを指します。 -- クラスタ、データベース、テーブル、パーティション、およびカラムの名前 +- クラスター名、データベース名、テーブル名、パーティション名、カラム名 - [関数](#functions) - [データ型](../sql-reference/data-types/index.md) -- [式のエイリアス](#expression-aliases) +- [式エイリアス](#expression-aliases) -識別子は引用符で囲むことも囲まないこともできますが、囲まない方が推奨されます。 +識別子は、クォート付きでもクォートなしでもかまいませんが、後者が推奨されます。 -引用符で囲まれていない識別子は正規表現 `^[a-zA-Z_][0-9a-zA-Z_]*$` に一致する必要があり、[キーワード](#keywords)と同一であってはなりません。 -有効な識別子と無効な識別子の例については、以下の表を参照してください: +クォートなしの識別子は、正規表現 `^[a-zA-Z_][0-9a-zA-Z_]*$` に一致し、かつ[キーワード](#keywords)と同一であってはなりません。 +有効および無効な識別子の例については、以下の表を参照してください。 -| 有効な識別子 | 無効な識別子 | -| ---------------------------------------------- | -------------------------------------- | +| 有効な識別子 | 無効な識別子 | +|-----------------------------------------------|-----------------------------------------| | `xyz`, `_internal`, `Id_with_underscores_123_` | `1x`, `tom@gmail.com`, `äußerst_schön` | -キーワードと同じ識別子を使用したい場合、または識別子に他の記号を使用したい場合は、二重引用符またはバッククォートで囲んでください。例: `"id"`, `` `id` `` +識別子としてキーワードと同じ名前を使用する場合や、識別子内でそれ以外の記号を使用する場合は、ダブルクォートまたはバッククォートで囲んでください。例: `"id"`、`` `id` ``。 :::note -引用符で囲まれた識別子のエスケープに適用される規則は、文字列リテラルにも同様に適用されます。詳細については[文字列](#string)を参照してください。 +クォート付き識別子におけるエスケープのルールは、文字列リテラルにも同様に適用されます。詳細は [文字列](#string) を参照してください。 ::: +## リテラル \{#literals\} -## リテラル {#literals} +ClickHouse において、リテラルとはクエリ内に直接記述される値のことです。 +言い換えると、クエリの実行中に変化しない固定の値です。 -ClickHouseにおいて、リテラルとはクエリ内で直接表現される値です。 -言い換えれば、クエリ実行中に変化しない固定値を指します。 - -リテラルには以下の種類があります: +リテラルには次の種類があります: - [文字列](#string) - [数値](#numeric) -- [複合](#compound) +- [複合リテラル](#compound) - [`NULL`](#null) -- [ヒアドキュメント](#heredoc)(カスタム文字列リテラル) +- [ヒアドキュメント](#heredoc)(カスタム文字列リテラル) -以下のセクションでは、これらについて詳しく説明します。 +以下のセクションで、それぞれについてより詳しく見ていきます。 -### 文字列 {#string} +### 文字列 \{#string\} -文字列リテラルはシングルクォートで囲む必要があります。ダブルクォートはサポートされていません。 +文字列リテラルは必ずシングルクォートで囲む必要があります。ダブルクォートはサポートされていません。 -エスケープは以下のいずれかの方法で行います: +エスケープは次のいずれかの方法で行います。 -- 前にシングルクォートを置く方法。シングルクォート文字`'`(この文字のみ)を`''`としてエスケープできます。 -- 前にバックスラッシュを置く方法。以下の表に示すサポートされているエスケープシーケンスを使用します。 +- 直前にシングルクォートを付ける方法。この場合、シングルクォート文字 `'`(この文字のみ)は `''` としてエスケープできます。 +- 直前にバックスラッシュを付ける方法。以下の表に示すサポートされているエスケープシーケンスを使用します。 :::note -バックスラッシュは、以下に示す文字以外の文字の前に置かれた場合、特殊な意味を失い、文字通りに解釈されます。 +バックスラッシュは、下記に列挙されていない文字の前に置かれた場合、その特別な意味を失い、リテラル文字として解釈されます。 ::: -| サポートされているエスケープ | 説明 | -| -------------------------------------- | ----------------------------------------------------------------------- | -| `\xHH` | 8ビット文字指定。任意の数の16進数字(H)が続きます。 | -| `\N` | 予約済み、何もしません(例: `SELECT 'a\Nb'`は`ab`を返します) | -| `\a` | 警告 | -| `\b` | バックスペース | -| `\e` | エスケープ文字 | -| `\f` | フォームフィード | -| `\n` | ラインフィード | -| `\r` | キャリッジリターン | -| `\t` | 水平タブ | -| `\v` | 垂直タブ | -| `\0` | ヌル文字 | -| `\\` | バックスラッシュ | -| `\'`(または`''`) | シングルクォート | -| `\"` | ダブルクォート | -| `` ` `` | バッククォート | -| `\/` | スラッシュ | -| `\=` | 等号 | -| ASCII制御文字(c <= 31) | | +| サポートされるエスケープ | 説明 | +|-------------------------------------|---------------------------------------------------------------------------| +| `\xHH` | 8 ビット文字の指定で、その後に任意個数の 16 進数字 (H) が続きます。 | +| `\N` | 予約されていますが、何もしません(例: `SELECT 'a\Nb'` は `ab` を返します) | +| `\a` | ベル | +| `\b` | バックスペース | +| `\e` | エスケープ文字 | +| `\f` | フォームフィード | +| `\n` | ラインフィード | +| `\r` | キャリッジリターン | +| `\t` | 水平タブ | +| `\v` | 垂直タブ | +| `\0` | ヌル文字 | +| `\\` | バックスラッシュ | +| `\'` (または ` '' `) | シングルクォート | +| `\"` | ダブルクォート | +| `` ` `` | バッククォート | +| `\/` | スラッシュ | +| `\=` | 等号 | +| ASCII 制御文字 (c <= 31). | | :::note -文字列リテラルでは、少なくとも`'`と`\`をエスケープコード`\'`(または`''`)と`\\`を使用してエスケープする必要があります。 +文字列リテラルでは、少なくとも `'` と `\` を、エスケープコード `\'`(または `''`)および `\\` を用いてエスケープする必要があります。 ::: -### 数値 {#numeric} +### Numeric -数値リテラルは以下のように解析されます: +数値リテラルは次のようにパースされます。 -- リテラルにマイナス記号`-`が前置されている場合、トークンはスキップされ、解析後に結果が否定されます。 -- 数値リテラルは最初に[strtoull](https://en.cppreference.com/w/cpp/string/byte/strtoul)関数を使用して64ビット符号なし整数として解析されます。 - - 値に`0b`または`0x`/`0X`が前置されている場合、数値はそれぞれ2進数または16進数として解析されます。 - - 値が負で絶対値が263より大きい場合、エラーが返されます。 -- 解析に失敗した場合、値は次に[strtod](https://en.cppreference.com/w/cpp/string/byte/strtof)関数を使用して浮動小数点数として解析されます。 -- それ以外の場合、エラーが返されます。 +* リテラルがマイナス記号 `-` で前置されている場合、そのトークンはスキップされ、パース後に結果が負になります。 +* 数値リテラルはまず [strtoull](https://en.cppreference.com/w/cpp/string/byte/strtoul) 関数を用いて 64 ビット符号なし整数としてパースされます。 + * 値が `0b` または `0x`/`0X` で前置されている場合、それぞれ 2 進数または 16 進数としてパースされます。 + * 値が負であり、その絶対値が 263 を超える場合はエラーが返されます。 +* それに失敗した場合、次に [strtod](https://en.cppreference.com/w/cpp/string/byte/strtof) 関数を用いて浮動小数点数としてパースされます。 +* それ以外の場合はエラーが返されます。 -リテラル値は、その値が収まる最小の型にキャストされます。 -例えば: +リテラル値は、その値が収まる最も小さい型にキャストされます。 +例: -- `1`は`UInt8`として解析されます -- `256`は`UInt16`として解析されます。 +* `1` は `UInt8` としてパースされます +* `256` は `UInt16` としてパースされます。 -:::note 重要 -64ビットより広い整数値(`UInt128`、`Int128`、`UInt256`、`Int256`)を正しく解析するには、より大きな型にキャストする必要があります: +:::note Important +64 ビットより幅の広い整数値 (`UInt128`, `Int128`, `UInt256`, `Int256`) を正しくパースするには、より大きな型にキャストする必要があります。 ```sql -170141183460469231731687303715884105728::Int128 @@ -204,61 +198,61 @@ ClickHouseにおいて、リテラルとはクエリ内で直接表現される 115792089237316195423570985008687907853269984665640564039457584007913129639935::UInt256 ``` -これにより上記のアルゴリズムがバイパスされ、任意精度をサポートするルーチンで整数が解析されます。 +これは上記のアルゴリズムを回避し、任意精度をサポートするルーチンで整数として解析します。 -そうしない場合、リテラルは浮動小数点数として解析され、切り捨てによる精度の損失が発生します。 +それ以外の場合、リテラルは浮動小数点数として解析されるため、切り捨てによる精度損失の影響を受けます。 ::: -詳細については、[データ型](../sql-reference/data-types/index.md)を参照してください。 +詳細については、[Data types](../sql-reference/data-types/index.md) を参照してください。 -数値リテラル内のアンダースコア`_`は無視され、可読性を向上させるために使用できます。 +数値リテラル内のアンダースコア `_` は無視され、可読性向上のために使用できます。 -以下の数値リテラルがサポートされています: +次の数値リテラルがサポートされています。 - -| 数値リテラル | 例 | -| ----------------------------------------- | ----------------------------------------------- | -| **整数** | `1`, `10_000_000`, `18446744073709551615`, `01` | -| **小数** | `0.1` | -| **指数表記** | `1e100`, `-1e-100` | -| **浮動小数点数** | `123.456`, `inf`, `nan` | -| **16進数** | `0xc0fe` | -| **SQL標準互換16進数文字列** | `x'c0fe'` | -| **2進数** | `0b1101` | -| **SQL標準互換2進数文字列** | `b'1101'` | +| 数値リテラル | 例 | +| -------------------- | ----------------------------------------------- | +| **整数** | `1`, `10_000_000`, `18446744073709551615`, `01` | +| **小数** | `0.1` | +| **指数表記** | `1e100`, `-1e-100` | +| **浮動小数点数** | `123.456`, `inf`, `nan` | +| **16 進数** | `0xc0fe` | +| **SQL 標準互換 16 進文字列** | `x'c0fe'` | +| **2 進数** | `0b1101` | +| **SQL 標準互換 2 進文字列** | `b'1101'` | :::note -8進数リテラルは、解釈時の誤りを避けるためサポートされていません。 +解釈時の偶発的なエラーを避けるため、8 進数リテラルはサポートされていません。 ::: -### 複合型 {#compound} -配列は角括弧 `[1, 2, 3]` で構築されます。タプルは丸括弧 `(1, 'Hello, world!', 2)` で構築されます。 -厳密には、これらはリテラルではなく、それぞれ配列作成演算子とタプル作成演算子を用いた式です。 -配列は少なくとも1つの要素を含む必要があり、タプルは少なくとも2つの要素を含む必要があります。 +### 複合リテラル \{#compound\} + +配列は `[1, 2, 3]` のように角かっこで表記します。タプルは `(1, 'Hello, world!', 2)` のように丸かっこで表記します。 +厳密には、これらはリテラルではなく、それぞれ配列生成演算子およびタプル生成演算子を用いた式です。 +配列は少なくとも 1 つの要素を含む必要があり、タプルは少なくとも 2 つの要素を持つ必要があります。 :::note -`SELECT`クエリの`IN`句にタプルが現れる場合は特殊なケースとなります。 -クエリ結果にはタプルを含めることができますが、タプルはデータベースに保存できません([Memory](../engines/table-engines/special/memory.md)エンジンを使用するテーブルを除く)。 +`SELECT` クエリの `IN` 句にタプルが現れる場合は、別のケースとして扱われます。 +クエリ結果にはタプルを含めることができますが、タプルは([Memory](../engines/table-engines/special/memory.md) エンジンを使用するテーブルを除き)データベースに保存できません。 ::: -### NULL {#null} +### NULL \{#null\} -`NULL`は値が欠落していることを示すために使用されます。 -テーブルフィールドに`NULL`を格納するには、そのフィールドが[Nullable](../sql-reference/data-types/nullable.md)型である必要があります。 +`NULL` は、値が存在しないことを示すために使用されます。 +テーブルのカラムに `NULL` を保存するには、そのカラムが [Nullable](../sql-reference/data-types/nullable.md) 型である必要があります。 :::note -`NULL`については以下の点に注意してください: +`NULL` については、次の点に注意してください: -- データ形式(入力または出力)によって、`NULL`は異なる表現を持つ場合があります。詳細については、[データ形式](/interfaces/formats)を参照してください。 -- `NULL`の処理には微妙な点があります。たとえば、比較演算の引数の少なくとも1つが`NULL`である場合、その演算の結果も`NULL`になります。乗算、加算、その他の演算についても同様です。各演算のドキュメントを読むことを推奨します。 -- クエリでは、[`IS NULL`](/sql-reference/functions/functions-for-nulls#isNull)および[`IS NOT NULL`](/sql-reference/functions/functions-for-nulls#isNotNull)演算子、ならびに関連する関数`isNull`と`isNotNull`を使用して`NULL`をチェックできます。 +- データ形式(入力または出力)によっては、`NULL` の表現が異なる場合があります。詳細については、[data formats](/interfaces/formats) を参照してください。 +- `NULL` の処理には注意が必要です。たとえば、比較演算の引数の少なくとも一方が `NULL` の場合、その演算の結果も `NULL` になります。乗算、加算、その他の演算についても同様です。各演算のドキュメントを参照することを推奨します。 +- クエリ内では、[`IS NULL`](/sql-reference/functions/functions-for-nulls#isNull) および [`IS NOT NULL`](/sql-reference/functions/functions-for-nulls#isNotNull) 演算子と、関連する関数 `isNull` および `isNotNull` を使用して `NULL` かどうかを判定できます。 ::: -### ヒアドキュメント {#heredoc} +### ヒアドキュメント -[ヒアドキュメント](https://en.wikipedia.org/wiki/Here_document)は、元の書式を維持しながら文字列(多くの場合複数行)を定義する方法です。 -ヒアドキュメントは、2つの`$`記号の間に配置されるカスタム文字列リテラルとして定義されます。 +[heredoc](https://en.wikipedia.org/wiki/Here_document) は、元の書式を保ったまま文字列(多くの場合は複数行)を定義するための方法です。 +heredoc は、2つの `$` 記号の間に置かれたカスタム文字列リテラルとして定義されます。 例: @@ -272,37 +266,36 @@ SELECT $heredoc$SHOW CREATE VIEW my_view$heredoc$; :::note -- 2つのヒアドキュメント記号間の値は「そのまま」処理されます。 -::: +* 2 つのヒアドキュメントの間にある値は、そのままの文字列として処理されます。 + ::: :::tip -- ヒアドキュメントを使用して、SQLやHTML、XMLコードなどの断片を埋め込むことができます。 -::: +* ヒアドキュメントを使って、SQL、HTML、XML などのコードスニペットを埋め込むことができます。 + ::: -## クエリパラメータの定義と使用 {#defining-and-using-query-parameters} +## クエリパラメータの定義と使用 \{#defining-and-using-query-parameters\} -クエリパラメータを使用すると、具体的な識別子の代わりに抽象的なプレースホルダーを含む汎用クエリを記述できます。 -クエリパラメータを含むクエリが実行されると、 -すべてのプレースホルダーが解決され、実際のクエリパラメータ値に置き換えられます。 +クエリパラメータを使用すると、具体的な識別子の代わりに抽象的なプレースホルダーを含む汎用的なクエリを記述できます。 +クエリパラメータを含むクエリが実行されると、すべてのプレースホルダーが解釈され、実際のクエリパラメータ値に置き換えられます。 -クエリパラメータを定義する方法は2つあります: +クエリパラメータを定義する方法は 2 通りあります: - `SET param_=` - `--param_=''` -2番目の方法を使用する場合、コマンドラインで `clickhouse-client` の引数として渡されます。ここで: +2 つ目の形式を使用する場合は、コマンドラインで `clickhouse-client` に渡す引数として指定します。このとき: - `` はクエリパラメータの名前です。 - `` はその値です。 -クエリパラメータは `{: }` を使用してクエリ内で参照できます。ここで `` はクエリパラメータ名、`` は変換先のデータ型です。 +クエリパラメータは、クエリ内で `{: }` という形式で参照できます。ここで `` はクエリパラメータ名、`` はその値が変換されるデータ型です。
-SETコマンドを使用した例 +SET コマンドの例 -例えば、以下のSQLは `a`、`b`、`c`、`d` という名前のパラメータを定義しており、それぞれ異なるデータ型を持ちます: +たとえば、次の SQL は `a`、`b`、`c`、`d` という名前のパラメータを定義しており、それぞれ異なるデータ型を持ちます: ```sql SET param_a = 13; @@ -318,13 +311,12 @@ SELECT 13 str 2022-08-04 18:30:53 {'10':[11,12],'13':[14,15]} ``` -
-clickhouse-clientを使用した例 +clickhouse-client を用いた例 -`clickhouse-client` を使用している場合、パラメータは `--param_name=value` として指定します。例えば、以下のパラメータは `message` という名前を持ち、`String` として取得されます: +`clickhouse-client` を使用する場合、パラメータは `--param_name=value` という形式で指定します。たとえば、次のパラメータは名前が `message` であり、`String` として取得されます: ```bash clickhouse-client --param_message='hello' --query="SELECT {message: String}" @@ -332,101 +324,97 @@ clickhouse-client --param_message='hello' --query="SELECT {message: String}" hello ``` -クエリパラメータがデータベース、テーブル、関数、またはその他の識別子の名前を表す場合は、その型として `Identifier` を使用します。例えば、以下のクエリは `uk_price_paid` という名前のテーブルから行を返します: +クエリパラメータがデータベース、テーブル、関数などの識別子名を表す場合は、その型として `Identifier` を使用します。たとえば、次のクエリは `uk_price_paid` という名前のテーブルから行を返します: ```sql SET param_mytablename = "uk_price_paid"; SELECT * FROM {mytablename:Identifier}; ``` -
:::note -クエリパラメータは、任意のSQLクエリの任意の場所で使用できる一般的なテキスト置換ではありません。 -主に `SELECT` 文において、識別子やリテラルの代わりに使用されるように設計されています。 +クエリパラメータは、任意の SQL クエリの任意の場所で使用できる汎用的なテキスト置換ではありません。 +主に、識別子やリテラルの代わりとして `SELECT` 文内で使用されることを想定して設計されています。 ::: +## 関数 -## 関数 {#functions} - -関数呼び出しは、識別子の後に丸括弧で囲まれた引数リスト(空の場合もあります)を記述します。 -標準SQLとは異なり、引数リストが空の場合でも括弧は必須です。 -例: +関数呼び出しは、識別子に続けて、丸括弧で囲まれた引数リスト(空でも可)を記述します。 +標準 SQL とは異なり、引数リストが空の場合でも括弧は必須です。 +たとえば、次のように記述します。 ```sql now() ``` -以下の種類があります: +また、次のものもあります。 -- [通常の関数](/sql-reference/functions/overview) -- [集約関数](/sql-reference/aggregate-functions) +* [通常関数](/sql-reference/functions/overview) +* [集計関数](/sql-reference/aggregate-functions) -一部の集約関数は、括弧内に2つの引数リストを含むことができます。例: +一部の集計関数は、括弧内に 2 つの引数リストを指定できます。例: ```sql -quantile (0.9)(x) +quantile (0.9)(x) ``` -これらの集約関数は「パラメトリック」関数と呼ばれ、 -最初のリストの引数は「パラメータ」と呼ばれます。 +これらの集約関数は「パラメトリック関数」と呼ばれ、 +最初のリスト内の引数は「パラメータ」と呼ばれます。 :::note パラメータを持たない集約関数の構文は、通常の関数と同じです。 ::: -## 演算子 {#operators} +## 演算子 -演算子は、クエリ解析時に優先順位と結合性を考慮して、対応する関数に変換されます。 +演算子は、優先順位と結合性を考慮して、クエリの構文解析時に対応する関数に変換されます。 -例えば、以下の式は +たとえば、次の式は ```text 1 + 2 * 3 + 4 ``` -次のように変換されます +に変換されます ```text plus(plus(1, multiply(2, 3)), 4)` ``` -## データ型とデータベーステーブルエンジン {#data-types-and-database-table-engines} +## データ型とデータベーステーブルエンジン \{#data-types-and-database-table-engines\} -`CREATE`クエリ内のデータ型とテーブルエンジンは、識別子や関数と同様に記述されます。 -つまり、括弧内に引数リストを含む場合と含まない場合があります。 +`CREATE` クエリにおけるデータ型とテーブルエンジンは、識別子や関数と同じように記述します。 +言い換えると、丸括弧による引数リストを伴う場合もあれば、伴わない場合もあります。 -詳細については、以下のセクションを参照してください: +詳細については、次のセクションを参照してください。 - [データ型](/sql-reference/data-types/index.md) - [テーブルエンジン](/engines/table-engines/index.md) - [CREATE](/sql-reference/statements/create/index.md) +## Expressions \{#expressions\} -## 式 {#expressions} - -式は以下のいずれかになります: +式 (expression) は次のいずれかです。 - 関数 - 識別子 - リテラル - 演算子の適用 -- 括弧内の式 +- 括弧で囲まれた式 - サブクエリ - アスタリスク -また、[エイリアス](#expression-aliases)を含むこともできます。 +また、[エイリアス](#expression-aliases) を含むこともできます。 -式のリストは、カンマで区切られた1つ以上の式です。 -関数と演算子は、引数として式を取ることができます。 +式のリストは、カンマで区切られた 1 つ以上の式からなります。 +関数および演算子も、その引数として式を受け取ることができます。 -定数式は、クエリ解析時(実行前)に結果が確定する式です。 -例えば、リテラルを使用した式は定数式です。 +定数式は、その結果がクエリ解析中、すなわち実行前に既知である式です。 +たとえば、リテラルのみからなる式は定数式です。 - -## 式のエイリアス {#expression-aliases} +## 式のエイリアス エイリアスは、クエリ内の[式](#expressions)に対してユーザーが定義する名前です。 @@ -434,35 +422,36 @@ plus(plus(1, multiply(2, 3)), 4)` expr AS alias ``` -上記の構文の各部分について、以下で説明します。 +上記の構文要素について、以下で説明します。 + +| 構文要素 | 説明 | 例 | 補足 | +| ------- | ------------------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | +| `AS` | エイリアスを定義するためのキーワードです。`SELECT` 句では、テーブル名やカラム名のエイリアスを、`AS` キーワードを使わずに定義することもできます。 | `SELECT table_name_alias.column_name FROM table_name table_name_alias` | [CAST](/sql-reference/functions/type-conversion-functions#cast) 関数では、`AS` キーワードには別の意味があります。関数の説明を参照してください。 | +| `expr` | ClickHouse がサポートする任意の式です。 | `SELECT column_name * 2 AS double FROM some_table` | | +| `alias` | `expr` に付ける名前です。エイリアスは [identifiers](#identifiers) の構文に従う必要があります。 | `SELECT "table t".column_name FROM table_name AS "table t"` | | -| 構文の部分 | 説明 | 例 | 注記 | -| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `AS` | エイリアスを定義するためのキーワード。`SELECT`句では、`AS`キーワードを使用せずにテーブル名またはカラム名のエイリアスを定義できます。 | `SELECT table_name_alias.column_name FROM table_name table_name_alias`. | [CAST](/sql-reference/functions/type-conversion-functions#cast)関数では、`AS`キーワードは別の意味を持ちます。関数の説明を参照してください。 | -| `expr` | ClickHouseがサポートする任意の式。 | `SELECT column_name * 2 AS double FROM some_table` | | -| `alias` | `expr`の名前。エイリアスは[識別子](#identifiers)の構文に準拠する必要があります。 | `SELECT "table t".column_name FROM table_name AS "table t"`. | | -### 使用上の注意 {#notes-on-usage} +### 使用上の注意 -- エイリアスはクエリまたはサブクエリに対してグローバルであり、クエリの任意の箇所で任意の式に対してエイリアスを定義できます。例: +* エイリアスはクエリまたはサブクエリ内でグローバルに有効であり、任意の式に対してクエリ中のどの位置でも定義できます。例えば: ```sql -SELECT (1 AS n) + 2, n +SELECT (1 AS n) + 2, n`. ``` -- エイリアスはサブクエリ内およびサブクエリ間では参照できません。例えば、次のクエリを実行すると、ClickHouseは`Unknown identifier: num`という例外を生成します: +* エイリアスはサブクエリ内およびサブクエリ間では使用できません。たとえば、次のクエリを実行すると、ClickHouse は `Unknown identifier: num` という例外をスローします。 ```sql -SELECT (SELECT sum(b.a) + num FROM b) - a.a AS num FROM a +`SELECT (SELECT sum(b.a) + num FROM b) - a.a AS num FROM a` ``` -- サブクエリの`SELECT`句で結果カラムに対してエイリアスが定義されている場合、これらのカラムは外側のクエリから参照できます。例: +* サブクエリの `SELECT` 句で結果列にエイリアスが定義されている場合、これらの列は外側のクエリで参照できます。例えば次の例のようになります。 ```sql -SELECT n + m FROM (SELECT 1 AS n, 2 AS m) +SELECT n + m FROM (SELECT 1 AS n, 2 AS m)`. ``` -- カラム名やテーブル名と同じエイリアスには注意が必要です。次の例を考えてみましょう: +* 列名やテーブル名と同じエイリアスを定義する場合には注意してください。次の例を見てみましょう。 ```sql CREATE TABLE t @@ -477,22 +466,22 @@ SELECT sum(b) AS b FROM t; -Received exception from server (version 18.14.17): -Code: 184. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception: Aggregate function sum(b) is found inside another aggregate function in query. +サーバーから例外を受信しました (バージョン 18.14.17): +Code: 184. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception: クエリ内で集約関数 sum(b) が別の集約関数の内部に見つかりました。 ``` -上記の例では、カラム`b`を持つテーブル`t`を宣言しました。 -次に、データを選択する際に`sum(b) AS b`というエイリアスを定義しました。 -エイリアスはグローバルであるため、 -ClickHouseは式`argMax(a, b)`内のリテラル`b`を式`sum(b)`に置き換えました。 -この置き換えにより例外が発生しました。 +前の例では、列 `b` を持つテーブル `t` を宣言しました。 +その後、データを選択する際に、`sum(b) AS b` というエイリアスを定義しました。 +エイリアスはグローバルに扱われるため、 +ClickHouse は式 `argMax(a, b)` 内のリテラル `b` を式 `sum(b)` に置き換えました。 +この置き換えにより、例外が発生しました。 :::note -[prefer_column_name_to_alias](/operations/settings/settings#prefer_column_name_to_alias)を`1`に設定することで、このデフォルトの動作を変更できます。 +[prefer_column_name_to_alias](/operations/settings/settings#prefer_column_name_to_alias) を `1` に設定することで、このデフォルトの動作を変更できます。 ::: -## Asterisk {#asterisk} +## Asterisk \{#asterisk\} -`SELECT`クエリでは、アスタリスクで式を置き換えることができます。 -詳細については、[SELECT](/sql-reference/statements/select/index.md#asterisk)セクションを参照してください。 +`SELECT` クエリでは、アスタリスク(`*`)を式の代わりに使用できます。 +詳細は、[SELECT](/sql-reference/statements/select/index.md#asterisk) セクションを参照してください。 \ No newline at end of file diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/table-functions/index.md b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/table-functions/index.md index 9bfcc44bf6d..d766945fa83 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/table-functions/index.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/sql-reference/table-functions/index.md @@ -4,86 +4,22 @@ sidebar_label: 'テーブル関数' sidebar_position: 1 slug: /sql-reference/table-functions/ title: 'テーブル関数' -doc_type: 'リファレンス' +doc_type: 'reference' --- # テーブル関数 -テーブル関数は、テーブルを生成するための関数です。 - - - -{/*AUTOGENERATED_START*/ } - -| ページ | 説明 | -| -------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [azureBlobStorage](/sql-reference/table-functions/azureBlobStorage) | Azure Blob Storage 内のファイルを選択や挿入するためのテーブルのようなインターフェースを提供します。`s3` 関数と同様です。 | -| [azureBlobStorageCluster](/sql-reference/table-functions/azureBlobStorageCluster) | Azure Blob Storage 上のファイルを、指定したクラスタ内の多数のノードで並列処理できるようにします。 | -| [clusterAllReplicas](/sql-reference/table-functions/cluster) | `remote_servers` セクションで設定されたクラスタのすべてのシャードに対して、Distributed テーブルを作成することなくアクセスできるようにします。 | -| [deltaLake](/sql-reference/table-functions/deltalake) | Amazon S3 上の Delta Lake テーブルに対して、読み取り専用のテーブル形式インターフェイスを提供します。 | -| [deltaLakeCluster](/sql-reference/table-functions/deltalakeCluster) | これは deltaLake テーブル関数を拡張したものです。 | -| [dictionary](/sql-reference/table-functions/dictionary) | 辞書データを ClickHouse のテーブルとして表示します。Dictionary エンジンと同様に動作します。 | -| [executable](/engines/table-functions/executable) | `executable` テーブル関数は、行を **stdout**(標準出力)に出力するスクリプト内で定義したユーザー定義関数 (UDF) の出力に基づいてテーブルを作成します。 | -| [file](/sql-reference/table-functions/file) | ファイルに対して `SELECT` や `INSERT` を実行するための、テーブル同様のインターフェースを提供するテーブルエンジンです。`s3()` テーブル関数と同様に動作します。ローカルファイルを扱う場合は `file()` を使用し、S3、GCS、MinIO などのオブジェクトストレージ内のバケットを扱う場合は `s3()` を使用します。 | -| [fileCluster](/sql-reference/table-functions/fileCluster) | 指定されたパスに一致するファイルを、クラスター内の複数ノードで同時に処理できるようにします。イニシエーターはワーカーノードへの接続を確立し、ファイルパス内のグロブを展開して、ファイル読み取りタスクをワーカーノードに委譲します。各ワーカーノードは、処理すべき次のファイルを取得するためにイニシエーターへ問い合わせ、すべてのタスクが完了するまで(すべてのファイルが読み込まれるまで)この処理を繰り返します。 | -| [format](/sql-reference/table-functions/format) | 指定された入力フォーマットに従って、引数からデータをパースします。structure 引数が指定されていない場合は、データから抽出されます。 | -| [gcs](/sql-reference/table-functions/gcs) | Google Cloud Storage からデータを `SELECT` および `INSERT` できるテーブル形式のインターフェースを提供します。`Storage Object User` IAM ロールが必要です。 | -| [fuzzQuery](/sql-reference/table-functions/fuzzQuery) | 指定されたクエリ文字列にランダムな変動を加えます。 | -| [fuzzJSON](/sql-reference/table-functions/fuzzJSON) | JSON 文字列にランダムな変動を加えます。 | -| [generateRandom](/sql-reference/table-functions/generate) | 指定されたスキーマに基づいてランダムなデータを生成します。そのデータでテストテーブルを埋めることができます。すべてのデータ型がサポートされているわけではありません。 | -| [mergeTreeProjection](/sql-reference/table-functions/mergeTreeProjection) | MergeTree テーブル内の特定のプロジェクションの内容を表します。内部状態の確認に使用できます。 | -| [mergeTreeIndex](/sql-reference/table-functions/mergeTreeIndex) | MergeTree テーブルのインデックスファイルおよび marks ファイルの内容を表します。テーブル内部の構造を調査する目的で利用できます。 | -| [hdfs](/sql-reference/table-functions/hdfs) | HDFS 上のファイルからテーブルを作成するテーブル関数です。このテーブル関数は `url` および `file` テーブル関数に似ています。 | -| [hdfsCluster](/sql-reference/table-functions/hdfsCluster) | 指定したクラスター内の多数のノードから、HDFS 上のファイルを並列処理できるようにします。 | -| [hudi](/sql-reference/table-functions/hudi) | Amazon S3 上の Apache Hudi テーブルに対する読み取り専用のテーブルライクなインターフェイスを提供します。 | -| [ytsaurus](/sql-reference/table-functions/ytsaurus) | テーブル関数を使用すると、YTsaurus クラスターからデータを読み込むことができます。 | -| [hudiCluster テーブル関数](/sql-reference/table-functions/hudiCluster) | `hudi` テーブル関数の拡張機能。指定したクラスタ内の多数のノードで並列に、Amazon S3 上の Apache Hudi テーブルのファイルを処理できます。 | -| [iceberg](/sql-reference/table-functions/iceberg) | Amazon S3、Azure、HDFS、またはローカルストレージに保存された Apache Iceberg テーブルに対して、読み取り専用のテーブル形式インターフェイスを提供します。 | -| [paimon](/sql-reference/table-functions/paimon) | Amazon S3、Azure、HDFS、またはローカルに保存された Apache Paimon テーブルに対する読み取り専用のテーブル形式インターフェイスを提供します。 | -| [icebergCluster](/sql-reference/table-functions/icebergCluster) | 指定したクラスター内の複数ノードから Apache Iceberg のファイルを並列処理できる、iceberg テーブル関数の拡張です。 | -| [paimonCluster](/sql-reference/table-functions/paimonCluster) | 指定したクラスター内の複数ノード上で Apache Paimon のファイルを並列処理できるようにする、`paimon` テーブル関数の拡張です。 | -| [input](/sql-reference/table-functions/input) | サーバーに送信された所定の構造のデータを、別の構造を持つテーブルに効率的に変換して挿入するためのテーブル関数。 | -| [jdbc](/sql-reference/table-functions/jdbc) | JDBC ドライバーを介して接続されたテーブルを返します。 | -| [merge](/sql-reference/table-functions/merge) | 一時的な Merge テーブルを作成します。テーブル構造は、基になるテーブルの列の和集合を取り、その列型から共通の型を導出することで決定されます。 | -| [mongodb](/sql-reference/table-functions/mongodb) | リモート MongoDB サーバーに保存されているデータに対して `SELECT` クエリを実行できるようにします。 | -| [mysql](/sql-reference/table-functions/mysql) | リモートの MySQL サーバーに保存されているデータに対して `SELECT` および `INSERT` クエリを実行できるようにします。 | -| [null](/sql-reference/table-functions/null) | 指定した構造を持つ一時テーブルを、Null テーブルエンジンで作成します。この関数は、テストの記述やデモ用に便利です。 | -| [timeSeriesMetrics](/sql-reference/table-functions/timeSeriesMetrics) | timeSeriesMetrics は、テーブルエンジンに TimeSeries エンジンを使用するテーブル `db_name.time_series_table` が使用するメトリクステーブルを返します。 | -| [timeSeriesSelector](/sql-reference/table-functions/timeSeriesSelector) | セレクターでフィルタリングされた TimeSeries テーブルから、指定した時間範囲内のタイムスタンプを持つ時系列データを読み取ります。 | -| [timeSeriesTags](/sql-reference/table-functions/timeSeriesTags) | timeSeriesTags テーブル関数は、テーブルエンジンが TimeSeries エンジンである `db_name.time_series_table` テーブルで使用される tags テーブルを返します。 | -| [prometheusQueryRange](/sql-reference/table-functions/prometheusQueryRange) | TimeSeries テーブルのデータを使用して Prometheus のクエリを評価します。 | -| [zeros](/sql-reference/table-functions/zeros) | テスト目的で多数の行を最速で生成するために使用されます。`system.zeros` および `system.zeros_mt` システムテーブルに類似しています。 | -| [timeSeriesData](/sql-reference/table-functions/timeSeriesData) | timeSeriesData は、テーブルエンジンに TimeSeries を使用するテーブル `db_name.time_series_table` で利用されるデータテーブルを返します。 | -| [numbers](/sql-reference/table-functions/numbers) | 指定した整数を含む単一の `number` 列を持つテーブルを返します。 | -| [prometheusQuery](/sql-reference/table-functions/prometheusQuery) | TimeSeries テーブル内のデータを使用して、Prometheus のクエリを評価します。 | -| [generate_series (generateSeries)](/sql-reference/table-functions/generate_series) | `generate_series` という単一の列 (UInt64) を持つテーブルを返します。この列には、`start` から `stop` までの両端を含む整数が格納されます。 | -| [odbc](/sql-reference/table-functions/odbc) | ODBC 経由で接続されているテーブルを返します。 | -| [postgresql](/sql-reference/table-functions/postgresql) | リモート PostgreSQL サーバー上に保存されたデータに対して、`SELECT` および `INSERT` クエリを実行できるようにします。 | -| [redis](/sql-reference/table-functions/redis) | このテーブル関数を使用すると、ClickHouse と Redis を統合できます。 | -| [remote, remoteSecure](/sql-reference/table-functions/remote) | テーブル関数 `remote` は、分散テーブルを作成することなく、その場でリモートサーバーへアクセスできます。テーブル関数 `remoteSecure` は `remote` と同様ですが、セキュアな接続を利用します。 | -| [S3 テーブル関数](/sql-reference/table-functions/s3) | Amazon S3 と Google Cloud Storage 上のファイルを選択/挿入するためのテーブル形式のインターフェイスを提供します。このテーブル関数は `hdfs` 関数に似ていますが、S3 固有の機能を備えています。 | -| [s3Cluster](/sql-reference/table-functions/s3Cluster) | `S3` テーブル関数を拡張したもので、指定したクラスター内の複数ノードで Amazon S3 と Google Cloud Storage 上のファイルを並列処理できます。 | -| [sqlite](/sql-reference/table-functions/sqlite) | SQLite データベースに保存されたデータに対してクエリを実行できるようにします。 | -| [arrowFlight](/sql-reference/table-functions/arrowflight) | Apache Arrow Flight サーバーで公開されているデータに対してクエリを実行できるようにします。 | -| [url](/sql-reference/table-functions/url) | 指定された `format` と `structure` に従って、`URL` からテーブルを作成します | -| [urlCluster](/sql-reference/table-functions/urlCluster) | 指定したクラスター内の複数ノードで、URL から取得したファイルを並列処理できるようにします。 | -| [view](/sql-reference/table-functions/view) | サブクエリをテーブルとして扱えるようにします。この関数はビューを実現します。 | -| [values](/sql-reference/table-functions/values) | 列を値で埋める一時ストレージを作成します。 | -| [loop](/sql-reference/table-functions/loop) | ClickHouse の `loop` テーブル関数は、クエリ結果を無限ループで繰り返し返すために使用されます。 | - -{/*AUTOGENERATED_END*/ } - - - - - -## 使用方法 - -テーブル関数は、`SELECT` クエリの [`FROM`](../../sql-reference/statements/select/from.md) -句で使用できます。たとえば、ローカルマシン上のファイルに対して `file` テーブル関数を使用して -データを `SELECT` できます。 +テーブル関数は、テーブルを構築するためのメソッドです。 + + + + + +## 使用方法 {#usage} + +テーブル関数は`SELECT`クエリの[`FROM`](../../sql-reference/statements/select/from.md)句で使用できます。例えば、`file`テーブル関数を使用してローカルマシン上のファイルからデータを`SELECT`できます。 ```bash echo "1, 2, 3" > example.csv @@ -97,13 +33,13 @@ echo "1, 2, 3" > example.csv └────┴────┴────┘ ``` -現在のクエリ内でのみ利用可能な一時テーブルを作成するために、テーブル関数を使用することもできます。例えば次のようになります。 +また、テーブル関数を使用して、現在のクエリ内でのみ利用可能な一時テーブルを作成することもできます。例: -```sql title="Query" +```sql title="クエリ" SELECT * FROM generateSeries(1,5); ``` -```response title="Response" +```response title="レスポンス" ┌─generate_series─┐ │ 1 │ │ 2 │ @@ -113,17 +49,17 @@ SELECT * FROM generateSeries(1,5); └─────────────────┘ ``` -クエリの実行が完了すると、そのテーブルは削除されます。 +テーブルはクエリが終了すると削除されます。 -テーブル関数は、次の構文でテーブルを作成する手段として使用できます。 +テーブル関数は、以下の構文を使用してテーブルを作成する方法としても使用できます: ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name AS table_function() ``` -例えば: +例: -```sql title="Query" +```sql title="クエリ" CREATE TABLE series AS generateSeries(1, 5); SELECT * FROM series; ``` @@ -138,8 +74,7 @@ SELECT * FROM series; └─────────────────┘ ``` -最後に、テーブル関数はテーブルにデータを `INSERT` するためにも使用できます。たとえば、 -前の例で作成したテーブルの内容を、再び `file` テーブル関数を使用してディスク上のファイルに書き出すことができます。 +最後に、テーブル関数を使用してテーブルにデータを`INSERT`することもできます。例えば、前の例で作成したテーブルの内容を、再び`file`テーブル関数を使用してディスク上のファイルに書き出すことができます: ```sql INSERT INTO FUNCTION file('numbers.csv', 'CSV') SELECT * FROM series; @@ -155,5 +90,5 @@ cat numbers.csv ``` :::note -[allow_ddl](/operations/settings/settings#allow_ddl) 設定が無効になっている場合、テーブル関数は使用できません。 +[allow_ddl](/operations/settings/settings#allow_ddl)設定が無効になっている場合、テーブル関数は使用できません。 ::: diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/use-cases/AI_ML/data-exploration/jupyter-notebook.md b/i18n/jp/docusaurus-plugin-content-docs/current/use-cases/AI_ML/data-exploration/jupyter-notebook.md index 470ef5b9a21..174daf514d6 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/use-cases/AI_ML/data-exploration/jupyter-notebook.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/use-cases/AI_ML/data-exploration/jupyter-notebook.md @@ -16,7 +16,7 @@ import image_5 from '@site/static/images/use-cases/AI_ML/jupyter/5.png'; import image_6 from '@site/static/images/use-cases/AI_ML/jupyter/6.png'; import image_7 from '@site/static/images/use-cases/AI_ML/jupyter/7.png'; import image_8 from '@site/static/images/use-cases/AI_ML/jupyter/8.png'; -import image_9 from '@site/static/images/use-cases/AI_ML/jupyter/9.png'; +import image_9 from '@site/static/images/use-cases/use-cases/AI_ML/jupyter/9.png'; # Jupyter Notebook と chDB を使ったデータ探索 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/use-cases/AI_ML/data-exploration/marimo-notebook.md b/i18n/jp/docusaurus-plugin-content-docs/current/use-cases/AI_ML/data-exploration/marimo-notebook.md index e05067995f5..a54a7ddd376 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/use-cases/AI_ML/data-exploration/marimo-notebook.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/use-cases/AI_ML/data-exploration/marimo-notebook.md @@ -40,9 +40,10 @@ import image_8 from '@site/static/images/use-cases/AI_ML/Marimo/8.gif'; ここでは、スターターデータセットの 1 つとして ClickHouse Cloud 上で利用可能な UK Property Price データセットを使用します。 このデータセットには、1995 年から 2024 年までのイギリスにおける住宅の売却価格に関するデータが含まれています。 -## セットアップ {#setup} -### データセットの読み込み {#loading-the-dataset} +## セットアップ + +### データセットの読み込み 既存の ClickHouse Cloud サービスにこのデータセットを追加するには、アカウントで [console.clickhouse.cloud](https://console.clickhouse.cloud/) にログインします。 @@ -62,7 +63,7 @@ ClickHouse は自動的に `pp_complete` テーブルを `default` データベ 認証情報が漏洩する可能性を減らすため、ClickHouse Cloud のユーザー名とパスワードをローカルマシンの環境変数として登録することをお勧めします。ターミナルから次のコマンドを実行して、ユーザー名とパスワードを環境変数として追加します: -### 認証情報の設定 {#setting-up-credentials} +### 認証情報の設定 ```bash export CLICKHOUSE_CLOUD_HOSTNAME= @@ -75,7 +76,7 @@ export CLICKHOUSE_CLOUD_PASSWORD=実際のパスワード 永続的に設定するには、シェルの設定ファイルに追加してください。 ::: -### Marimo のインストール {#installing-marimo} +### Marimo のインストール まず仮想環境を有効にします。 仮想環境を有効にした状態で、このガイドで使用する次のパッケージをインストールします。 @@ -97,7 +98,7 @@ marimo edit clickhouse_exploration.py Marimo ノートブックは純粋な Python ファイルとして保存されるため、バージョン管理や他者との共有が容易です。 -## 依存関係のインストール {#installing-dependencies} +## 依存関係のインストール 新しいセルで必要なパッケージをインポートします。 @@ -125,14 +126,14 @@ result Marimo hello world -## データの探索 {#exploring-the-data} +## データの探索 UK price paid データセットをセットアップし、Marimo ノートブック上で chDB が稼働していれば、データの探索を始めることができます。 首都ロンドンのような、UK の特定エリアにおける価格が時間とともにどのように変化したかを確認したいとします。 ClickHouse の [`remoteSecure`](/docs/sql-reference/table-functions/remote) 関数を使うと、ClickHouse Cloud からデータを簡単に取得できます。 chDB に対して、このデータを同一プロセス内で Pandas のデータフレームとして返すよう指示できます。これはデータを扱ううえで便利でなじみのある形式です。 -### ClickHouse Cloud データのクエリ実行 {#querying-clickhouse-cloud-data} +### ClickHouse Cloud データのクエリ実行 新しいセルを作成し、次のクエリを使用して ClickHouse Cloud サービスから UK price paid データを取得し、それを `pandas.DataFrame` に変換します。 @@ -301,38 +302,42 @@ WHERE town = 'LONDON' """ df_distribution = chdb.query(query_distribution, "DataFrame") +``` + # インタラクティブな箱ひげ図を作成する -fig_box = go.Figure() - -fig_box.add_trace( - go.Box( - y=df_distribution['price'], - name=f'London {year_slider.value}', - boxmean='sd', # 平均値と標準偏差を表示 - marker_color='lightblue', - boxpoints='outliers' # 外れ値のポイントを表示 - ) + +fig_box = go.Figure() + +fig_box.add_trace( +go.Box( +y=df_distribution['price'], +name=f'London {year_slider.value}', +boxmean='sd', # 平均値と標準偏差を表示 +marker_color='lightblue', +boxpoints='outliers' # 外れ値のポイントを表示 +) ) -fig_box.update_layout( - title=f'Distribution of Property Prices in London ({year_slider.value})', - yaxis=dict( - title='Price (£)', - tickformat=',.0f' - ), - showlegend=False, - height=600 +fig_box.update_layout( +title=f'Distribution of Property Prices in London ({year_slider.value})', +yaxis=dict( +title='Price (£)', +tickformat=',.0f' +), +showlegend=False, +height=600 ) -fig_box -``` +fig_box +``` セルの右上にあるオプションボタンをクリックすると、 コードを非表示にできます。 スライダーを動かすと、Marimo のリアクティブ実行機能によりプロットが自動的に更新されます。 Marimo の動的なチャート +``` ## まとめ {#summary} diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/use-cases/observability/clickstack/api-reference.md b/i18n/jp/docusaurus-plugin-content-docs/current/use-cases/observability/clickstack/api-reference.md new file mode 100644 index 00000000000..15d370fba36 --- /dev/null +++ b/i18n/jp/docusaurus-plugin-content-docs/current/use-cases/observability/clickstack/api-reference.md @@ -0,0 +1,15 @@ +--- +slug: /use-cases/observability/clickstack/api-reference +title: 'API リファレンス' +pagination_prev: null +pagination_next: null +description: 'ClickStack API リファレンスドキュメントのランディングページ' +doc_type: 'landing-page' +--- + +import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; +import {Button} from "@clickhouse/click-ui/bundled"; + + + +API リファレンスについては、[このページ](https://www.clickhouse.com/docs/clickstack/api-reference)をご覧ください。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/whats-new/changelog/index.md b/i18n/jp/docusaurus-plugin-content-docs/current/whats-new/changelog/index.md index c07b866bc90..ca4bb84b3ff 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/whats-new/changelog/index.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/whats-new/changelog/index.md @@ -1,14 +1,16 @@ --- -description: '2025 年の変更履歴' -note: 'このファイルは yarn build によって生成されました' +description: '2025年の変更履歴' +note: "このファイルは yarn build によって生成されたものです" slug: /whats-new/changelog/ sidebar_position: 2 sidebar_label: '2025' -title: '変更履歴 2025' +title: '2025年の変更履歴' doc_type: 'changelog' --- ### 目次 + +**[ClickHouse リリース v25.11, 2025-11-25](#2511)**
**[ClickHouse リリース v25.10, 2025-10-30](#2510)**
**[ClickHouse リリース v25.9, 2025-09-25](#259)**
**[ClickHouse リリース v25.8 LTS, 2025-08-28](#258)**
@@ -28,699 +30,903 @@ doc_type: 'changelog' **[2018 年の変更履歴](https://clickhouse.com/docs/whats-new/changelog/2018/)**
**[2017 年の変更履歴](https://clickhouse.com/docs/whats-new/changelog/2017/)**
+### ClickHouse リリース 25.11、2025-11-25 {#2511} -### ClickHouse リリース 25.10, 2025-10-31 {#2510} - - - -#### 後方互換性のない変更 - -* デフォルトの `schema_inference_make_columns_nullable` 設定を変更し、すべてを Nullable にするのではなく、Parquet/ORC/Arrow メタデータに含まれるカラムが `Nullable` かどうかに関する情報を反映するようにしました。テキスト形式については変更ありません。 [#71499](https://github.com/ClickHouse/ClickHouse/pull/71499) ([Michael Kolupaev](https://github.com/al13n321)). -* クエリ結果キャッシュは `log_comment` 設定を無視するようになったため、クエリの `log_comment` だけを変更しても、もはやキャッシュミスを強制しなくなりました。ユーザーが意図的に `log_comment` を変化させることでキャッシュをセグメントしていた可能性はわずかにあります。この変更はその挙動を変えるものであり、そのため後方互換性がありません。この目的には設定 `query_cache_tag` を使用してください。[#79878](https://github.com/ClickHouse/ClickHouse/pull/79878)([filimonov](https://github.com/filimonov))。 -* 以前のバージョンでは、演算子の実装関数と同じ名前を持つテーブル関数を含むクエリのフォーマットに一貫性がありませんでした。[#81601](https://github.com/ClickHouse/ClickHouse/issues/81601) をクローズしました。[#81977](https://github.com/ClickHouse/ClickHouse/issues/81977) をクローズしました。[#82834](https://github.com/ClickHouse/ClickHouse/issues/82834) をクローズしました。[#82835](https://github.com/ClickHouse/ClickHouse/issues/82835) をクローズしました。EXPLAIN SYNTAX クエリは、常に演算子をフォーマットすることはなくなりました。この新しい挙動は、構文を説明するという目的をより正確に反映しています。`clickhouse-format`、`formatQuery` などは、クエリ内で関数形式として使用されている場合、それらの関数を演算子としてはフォーマットしません。[#82825](https://github.com/ClickHouse/ClickHouse/pull/82825)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* `JOIN` キーでの `Dynamic` 型の使用を禁止しました。`Dynamic` 型の値が `Dynamic` 以外の型と比較されると、予期しない結果を招く可能性があります。`Dynamic` 列は、必要な型にキャストすることを推奨します。 [#86358](https://github.com/ClickHouse/ClickHouse/pull/86358) ([Pavel Kruglov](https://github.com/Avogar)). -* `storage_metadata_write_full_object_key` サーバーオプションはデフォルトでオンになっており、現時点ではオフに設定することはできません。これは後方互換性のある変更です。注意喚起のためのお知らせです。この変更は 25.x リリースとのみ前方互換性があります。つまり、新しいリリースをロールバックする必要がある場合にダウングレード可能なのは、25.x 系の任意のリリースに限られます。 [#87335](https://github.com/ClickHouse/ClickHouse/pull/87335) ([Sema Checherinda](https://github.com/CheSema))。 -* 挿入レートが低い場合に ZooKeeper 上に保存される znode の数を減らすため、`replicated_deduplication_window_seconds` を 1 週間から 1 時間に減らします。 [#87414](https://github.com/ClickHouse/ClickHouse/pull/87414) ([Sema Checherinda](https://github.com/CheSema)). -* 設定 `query_plan_use_new_logical_join_step` を `query_plan_use_logical_join_step` に名称変更しました。 [#87679](https://github.com/ClickHouse/ClickHouse/pull/87679) ([Vladimir Cherkasov](https://github.com/vdimir)). -* 新しい構文により、テキストインデックスの tokenizer パラメータをより柔軟に設定できるようになりました。 [#87997](https://github.com/ClickHouse/ClickHouse/pull/87997) ([Elmi Ahmadov](https://github.com/ahmadov)). -* 既存の関数 `hasToken` との一貫性を高めるため、`searchAny` および `searchAll` 関数をそれぞれ `hasAnyTokens` と `hasAllTokens` に名称変更しました。[#88109](https://github.com/ClickHouse/ClickHouse/pull/88109)([Robert Schulze](https://github.com/rschu1ze))。 -* ファイルシステムキャッシュから `cache_hits_threshold` を削除しました。この機能は SLRU キャッシュポリシーを導入する前に外部コントリビューターによって追加されたものですが、現在は SLRU キャッシュポリシーがあるため、両方をサポートし続ける意味がありません。 [#88344](https://github.com/ClickHouse/ClickHouse/pull/88344) ([Kseniia Sumarokova](https://github.com/kssenii))。 -* `min_free_disk_ratio_to_perform_insert` と `min_free_disk_bytes_to_perform_insert` 設定の動作に対する、2つの小さな変更: - 挿入を拒否すべきかどうかを判定する際に、利用可能バイト数ではなく未予約バイト数を使用するようにしました。バックグラウンドマージやミューテーション用の予約量が設定されたしきい値と比べて小さい場合は、この変更はそれほど重要ではないかもしれませんが、その方がより正確と考えられます。 - これらの設定を system テーブルには適用しないようにしました。これは、`query_log` のようなテーブルを引き続き更新したいためです。これはデバッグに大いに役立ちます。system テーブルに書き込まれるデータは通常、実際のデータと比べて小さいため、妥当な `min_free_disk_ratio_to_perform_insert` のしきい値であれば、かなり長い間書き込みを継続できるはずです。[#88468](https://github.com/ClickHouse/ClickHouse/pull/88468) ([c-end](https://github.com/c-end))。 -* Keeper の内部レプリケーションで非同期モードを有効にします。Keeper は、以前と同じ動作を維持しながら、パフォーマンスの向上が見込まれます。23.9 より前のバージョンからアップデートする場合は、まず 23.9 以上にアップデートしてから 25.10+ にアップデートする必要があります。アップデート前に `keeper_server.coordination_settings.async_replication` を 0 に設定しておき、アップデート完了後に有効にすることもできます。[#88515](https://github.com/ClickHouse/ClickHouse/pull/88515)([Antonio Andelic](https://github.com/antonio2368))。 - - - +#### 互換性を損なう変更 +* 非推奨の `Object` 型を削除しました。 [#85718](https://github.com/ClickHouse/ClickHouse/pull/85718) ([Pavel Kruglov](https://github.com/Avogar)). +* 非推奨となっていた `LIVE VIEW` 機能を削除しました。`LIVE VIEW` を使用している場合、この新しいバージョンにはアップグレードできません。[#88706](https://github.com/ClickHouse/ClickHouse/pull/88706) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 以前のバージョンでは、`Geometry` 型は `String` 型のエイリアスでしたが、現在はフル機能を備えた独立した型になりました。 [#83344](https://github.com/ClickHouse/ClickHouse/pull/83344) ([scanhex12](https://github.com/scanhex12))。 +* MergeTree テーブルの Wide 形式データパートにおける `Variant` 型サブカラム用に作成されるファイル名をエスケープします。この変更により、Variant/Dynamic/JSON データ型を含む既存テーブルとの互換性が失われます。この変更は、Variant 内に特殊文字を含む型(`\` を含む特定のタイムゾーン付き DateTime など)を保存できない問題を修正します。エスケープは、MergeTree 設定 `escape_variant_subcolumn_filenames` を変更することで無効化できます(互換性を維持するには、MergeTree の設定でこの設定を無効にするか、アップグレード前のバージョンに合わせて `compatibility` 設定を指定してください)。[#69590](https://github.com/ClickHouse/ClickHouse/issues/69590) を解決します。[#87300](https://github.com/ClickHouse/ClickHouse/pull/87300)([Pavel Kruglov](https://github.com/Avogar))。 +* `String` データ型に対して、デフォルトで `with_size_stream` シリアル化フォーマットを有効にします。この変更自体は後方互換性がありますが、新しいシリアル化フォーマットはバージョン 25.10 以降でのみサポートされるため、25.10 より前のバージョンへはダウングレードできなくなります。25.9 以前へのダウングレードを可能な状態に保ちたい場合は、サーバー構成の `merge_tree` セクションで、`serialization_info_version` を `basic` に、`string_serialization_version` を `single_stream` に設定してください。 [#89329](https://github.com/ClickHouse/ClickHouse/pull/89329) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* HTTP レスポンスの結果に対する例外のタグ付けをサポートし、クライアントが例外をより確実にパースできるようにしました。[#75175](https://github.com/ClickHouse/ClickHouse/issues/75175) を解決します。設定 `http_write_exception_in_output_format` は、フォーマット間の一貫性を保つためデフォルトでは無効になっています。[#88818](https://github.com/ClickHouse/ClickHouse/pull/88818)([Kaviraj Kanagaraj](https://github.com/kavirajk))。既存の挙動を壊すことは想定していません(最悪の場合でも、例外メッセージに妙な文字列が追加されるだけです)が、それでも注意喚起のためにチェンジログのカテゴリとして「Backward Incompatible Change」を使用しておくのが妥当です(どのようなやっつけスクリプトが例外メッセージをパースしているか分からないためです)。 +* TODO, @Michicosun - 内容を明確にするか削除すること。`PlainRewritable` ディスクはファイルシステムツリーをメモリ内に保存します。別のディスクがオブジェクトストレージの構造を変更しても、メモリ内の構造は更新されないため、不正なファイルシステム操作や `no such key` エラーが発生する可能性があります。[#89038](https://github.com/ClickHouse/ClickHouse/pull/89038) ([Mikhail Artemenko](https://github.com/Michicosun))。 +* Kafka storage の SASL 設定の適用順序を修正しました。CREATE TABLE 文で指定されたテーブルレベルの SASL 設定が、構成ファイルのコンシューマ/プロデューサ固有の設定を正しく上書きするようになりました。 [#89401](https://github.com/ClickHouse/ClickHouse/pull/89401) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). +* タイムゾーンなしの Parquet タイムスタンプ (isAdjustedToUTC=false) は、これまでの DateTime64(...) ではなく、DateTime64(..., 'UTC') として読み込まれるようになりました。この変更により、そのような UTC タイムスタンプを文字列に変換した際に、正しいローカル時刻の表現が得られるため、以前の挙動よりも誤りが少なくなります。従来の動作に戻すには `input_format_parquet_local_time_as_utc = 0` を使用してください。 [#87469](https://github.com/ClickHouse/ClickHouse/issues/87469) を解決。 [#87872](https://github.com/ClickHouse/ClickHouse/pull/87872)([Michael Kolupaev](https://github.com/al13n321))。 +* `T64` コーデックに対する小さな改善として、これまでバグを引き起こしていた、圧縮要素サイズに揃っていないデータ型を受け付けないようになりました。 [#89282](https://github.com/ClickHouse/ClickHouse/issues/89282) を解決しました。 [#89432](https://github.com/ClickHouse/ClickHouse/pull/89432) ([yanglongwei](https://github.com/ylw510))。 #### 新機能 -* 負の `LIMIT` と負の `OFFSET` のサポートを追加。[#28913](https://github.com/ClickHouse/ClickHouse/issues/28913) をクローズ。[#88411](https://github.com/ClickHouse/ClickHouse/pull/88411)([Nihal Z. Miaji](https://github.com/nihalzp))。 -* `Alias` エンジンは、別のテーブルへのプロキシを作成します。すべての読み取りおよび書き込み操作は対象テーブルに転送され、エイリアス自体はデータを保持せず、対象テーブルへの参照のみを保持します。 [#87965](https://github.com/ClickHouse/ClickHouse/pull/87965) ([Kai Zhu](https://github.com/nauu))。 -* 演算子 `IS NOT DISTINCT FROM` (`<=>`) を完全にサポート。 [#88155](https://github.com/ClickHouse/ClickHouse/pull/88155) ([simonmichal](https://github.com/simonmichal))。 -* `MergeTree` テーブル内の、適用可能なすべてのカラムに対して統計情報を自動的に作成する機能を追加しました。作成する統計情報の種類をカンマ区切りで指定するテーブルレベルの設定項目 `auto_statistics_types` を追加しました(例: `auto_statistics_types = 'minmax, uniq, countmin'`)。 [#87241](https://github.com/ClickHouse/ClickHouse/pull/87241) ([Anton Popov](https://github.com/CurtizJ))。 -* テキスト向けの新しいブルームフィルターインデックス `sparse_gram`。 [#79985](https://github.com/ClickHouse/ClickHouse/pull/79985)([scanhex12](https://github.com/scanhex12))。 -* 基数変換を行う新しい `conv` 関数が追加され、現在は `2〜36` 進数をサポートしています。 [#83058](https://github.com/ClickHouse/ClickHouse/pull/83058) ([hp](https://github.com/hp77-creator)). -* `LIMIT BY ALL` 構文のサポートを追加しました。`GROUP BY ALL` や `ORDER BY ALL` と同様に、`LIMIT BY ALL` は SELECT 句内のすべての非集約式に自動的に展開され、それらを LIMIT BY 句のキーとして使用します。例えば、`SELECT id, name, count(*) FROM table GROUP BY id LIMIT 1 BY ALL` は `SELECT id, name, count(*) FROM table GROUP BY id LIMIT 1 BY id, name` と同等です。この機能により、SELECT 句内のすべての非集約列で制限をかけたい場合に、それらを明示的に列挙することなくクエリを簡潔に記述できます。[#59152](https://github.com/ClickHouse/ClickHouse/issues/59152) をクローズしました。[#84079](https://github.com/ClickHouse/ClickHouse/pull/84079)([Surya Kant Ranjan](https://github.com/iit2009046))。 -* ClickHouse で Apache Paimon をクエリするためのサポートを追加しました。この統合により、ClickHouse ユーザーは Paimon のデータレイクストレージに直接アクセスできるようになります。 [#84423](https://github.com/ClickHouse/ClickHouse/pull/84423) ([JIaQi](https://github.com/JiaQiTang98)). -* `studentTTestOneSample` 集約関数を追加しました。[#85436](https://github.com/ClickHouse/ClickHouse/pull/85436)([Dylan](https://github.com/DylanBlakemore))。 -* 集約関数 `quantilePrometheusHistogram`。この関数は各ヒストグラムバケットの上限値と累積値を引数として受け取り、分位点の位置が見つかったバケットの下限値と上限値の間で線形補間を行います。従来型ヒストグラムに対する PromQL の `histogram_quantile` 関数と同様の動作をします。 [#86294](https://github.com/ClickHouse/ClickHouse/pull/86294) ([Stephen Chi](https://github.com/stephchi0)). -* Delta Lake メタデータファイル用の新しいシステムテーブル。 [#87263](https://github.com/ClickHouse/ClickHouse/pull/87263) ([scanhex12](https://github.com/scanhex12)). -* `ALTER TABLE REWRITE PARTS` を追加しました。これは、新しい設定をすべて反映してテーブルパーツを一から再作成します(`use_const_adaptive_granularity` のように、新しく作成されるパーツにのみ適用される設定があるためです)。 [#87774](https://github.com/ClickHouse/ClickHouse/pull/87774) ([Azat Khuzhin](https://github.com/azat)). -* `SYSTEM RECONNECT ZOOKEEPER` コマンドを追加し、ZooKeeper を強制的に切断して再接続できるようにしました([https://github.com/ClickHouse/ClickHouse/issues/87317](https://github.com/ClickHouse/ClickHouse/issues/87317))。[#87318](https://github.com/ClickHouse/ClickHouse/pull/87318)([Pradeep Chhetri](https://github.com/chhetripradeep))。 -* `max_named_collection_num_to_warn` と `max_named_collection_num_to_throw` を設定することで、名前付きコレクションの数を制限します。新しいメトリック `NamedCollection` とエラー `TOO_MANY_NAMED_COLLECTIONS` を追加しました。 [#87343](https://github.com/ClickHouse/ClickHouse/pull/87343) ([Pablo Marcos](https://github.com/pamarcos))。 -* `startsWith` および `endsWith` 関数に、大文字小文字を区別しない最適化バリアントを追加しました: `startsWithCaseInsensitive`、`endsWithCaseInsensitive`、`startsWithCaseInsensitiveUTF8`、`endsWithCaseInsensitiveUTF8`。 [#87374](https://github.com/ClickHouse/ClickHouse/pull/87374)([Guang Zhao](https://github.com/zheguang))。 -* サーバー設定の "resources_and_workloads" セクションを使用して、SQL で `WORKLOAD` および `RESOURCE` 定義を指定できるようにする手段を追加しました。 [#87430](https://github.com/ClickHouse/ClickHouse/pull/87430) ([Sergei Trifonov](https://github.com/serxa))。 -* 新しいテーブル設定 `min_level_for_wide_part` を追加し、パーツをワイドパーツとして作成する際の最小レベルを指定できるようにしました。 [#88179](https://github.com/ClickHouse/ClickHouse/pull/88179) ([Christoph Wurm](https://github.com/cwurm)). -* Keeper クライアントに `cp`-`cpr` および `mv`-`mvr` コマンドの再帰版を追加。 [#88570](https://github.com/ClickHouse/ClickHouse/pull/88570) ([Mikhail Artemenko](https://github.com/Michicosun)). -* 挿入時のマテリアライズからスキップインデックスのリストを除外するためのセッション設定(`exclude_materialize_skip_indexes_on_insert`)を追加しました。マージ時のマテリアライズからスキップインデックスのリストを除外するための MergeTree テーブル設定(`exclude_materialize_skip_indexes_on_merge`)を追加しました。 [#87252](https://github.com/ClickHouse/ClickHouse/pull/87252)([George Larionov](https://github.com/george-larionov))。 +* `Geometry` 型を導入しました。この型に対して `WKB` および `WKT` フォーマットの読み取りをサポートしました。以前のバージョンでは、`Geometry` 型は `String` へのエイリアスでしたが、現在は完全な機能を備えた型になりました。 [#83344](https://github.com/ClickHouse/ClickHouse/pull/83344) ([scanhex12](https://github.com/scanhex12)). +* ユーザーのインパーソネーションをサポートするために、新しい SQL 文 `EXECUTE AS` を追加しました。[#39048](https://github.com/ClickHouse/ClickHouse/issues/39048) を解決します。[#70775](https://github.com/ClickHouse/ClickHouse/pull/70775)([Shankar](https://github.com/shiyer7474))。 +* n-gram ベースの Naive Bayes を用いてテキストを分類する `naiveBayesClassifier` 関数を追加。 [#88677](https://github.com/ClickHouse/ClickHouse/pull/88677) ([Nihal Z. Miaji](https://github.com/nihalzp)). +* テーブルの一部を選択できるよう、`LIMIT` および `OFFSET` での小数値指定をサポートしました。 [#81892](https://github.com/ClickHouse/ClickHouse/issues/81892) をクローズしました。 [#88755](https://github.com/ClickHouse/ClickHouse/pull/88755)([Ahmed Gouda](https://github.com/0xgouda))。 +* Microsoft OneLake カタログ用 ClickHouse サブシステム。 [#89366](https://github.com/ClickHouse/ClickHouse/pull/89366) ([scanhex12](https://github.com/scanhex12)). +* 配列内の指定した次元数を展開し、Tuple カラム内のポインタを入れ替える `flipCoordinates` 関数を追加しました。[#79469](https://github.com/ClickHouse/ClickHouse/issues/79469) を解決します。[#79634](https://github.com/ClickHouse/ClickHouse/pull/79634)([Sachin Kumar Singh](https://github.com/sachinkumarsingh092))。 +* Unicode 文字とそのプロパティの一覧を含む `system.unicode` テーブルを追加。[#80055](https://github.com/ClickHouse/ClickHouse/issues/80055) をクローズ。[#80857](https://github.com/ClickHouse/ClickHouse/pull/80857)([wxybear](https://github.com/wxybear))。 +* 新しい MergeTree の設定 `merge_max_dynamic_subcolumns_in_wide_part` を追加し、データ型で指定されたパラメータに関係なく、マージ後の Wide パートにおける動的サブカラム数を制限できるようにしました。 [#87646](https://github.com/ClickHouse/ClickHouse/pull/87646) ([Pavel Kruglov](https://github.com/Avogar)). +* `cume_dist` ウィンドウ関数のサポートを追加しました。[#86920](https://github.com/ClickHouse/ClickHouse/issues/86920) を修正しました。[#88102](https://github.com/ClickHouse/ClickHouse/pull/88102)([Manuel](https://github.com/raimannma))。 +* テキストインデックスの構築時に、新たな引数 `preprocessor` を指定できるようになりました。この引数には、トークン化の前に各ドキュメントを変換する任意の式を指定できます。 [#88272](https://github.com/ClickHouse/ClickHouse/pull/88272) ([Jimmy Aguilar Mena](https://github.com/Ergus))。 +* `X-ClickHouse-Progress` と `X-ClickHouse-Summary` に `memory_usage` フィールドを追加しました。これにより、クエリのメモリ使用量をクライアント側でリアルタイムに取得できます。 [#88393](https://github.com/ClickHouse/ClickHouse/pull/88393) ([Christoph Wurm](https://github.com/cwurm))。 +* `INTO OUTFILE` で出力先パスのディレクトリが存在しない場合でもエラーにならないよう、親ディレクトリを自動作成する設定 `into_outfile_create_parent_directories` を追加しました。これにより、クエリがネストしたディレクトリに結果を書き出すワークフローを簡素化できます。 [#88610](https://github.com/ClickHouse/ClickHouse/issues/88610) を解決しました。 [#88795](https://github.com/ClickHouse/ClickHouse/pull/88795) ([Saksham](https://github.com/Saksham10-11)). +* 一時テーブルに対する `CREATE OR REPLACE` 構文をサポートしました。[#35888](https://github.com/ClickHouse/ClickHouse/issues/35888) をクローズしました。[#89450](https://github.com/ClickHouse/ClickHouse/pull/89450)([Aleksandr Musorin](https://github.com/AVMusorin))。 +* 配列 `arr` から `elem` と等しいすべての要素を削除するための `arrayRemove` のサポートを追加しました。これは Postgres との互換性を保つためにのみ必要なものであり、ClickHouse にはすでに、はるかに強力な `arrayFilter` 関数があります。[#52099](https://github.com/ClickHouse/ClickHouse/issues/52099) を解決しました。[#89585](https://github.com/ClickHouse/ClickHouse/pull/89585)([tiwarysaurav](https://github.com/tiwarysaurav))。 +* 平均値を計算する `midpoint` スカラー関数を導入しました。[#89029](https://github.com/ClickHouse/ClickHouse/issues/89029) を解決しました。[#89679](https://github.com/ClickHouse/ClickHouse/pull/89679)([simonmichal](https://github.com/simonmichal))。 +* Web UI にダウンロードボタンが追加されました。UI 上には結果の一部しか表示されていない場合でも、結果全体をダウンロードできます。 [#89768](https://github.com/ClickHouse/ClickHouse/pull/89768) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* コマンド形式のディスクリプタを必要とする Dremio およびその他の Arrow Flight サーバーをサポートするために、`arrow_flight_request_descriptor_type` 設定を追加しました。[#89523](https://github.com/ClickHouse/ClickHouse/issues/89523) を実装。[#89826](https://github.com/ClickHouse/ClickHouse/pull/89826)([Shreyas Ganesh](https://github.com/shreyasganesh0))。 +* 引数とそれに対応する極値を返す新しい集約関数 `argAndMin` および `argAndMax` を追加しました。以前のバージョンでも、引数としてタプルを使用することで同様のことが可能でした。 [#89884](https://github.com/ClickHouse/ClickHouse/pull/89884) ([AbdAlRahman Gad](https://github.com/AbdAlRahmanGad))。 +* Parquet チェックサムの書き込みおよび検証のための設定。[#79012](https://github.com/ClickHouse/ClickHouse/pull/79012) ([Michael Kolupaev](https://github.com/al13n321)). +* Kafka テーブルエンジンに `kafka_schema_registry_skip_bytes` 設定を追加し、メッセージペイロードをパースする前にエンベロープヘッダーのバイト(例: AWS Glue Schema Registry の 19 バイトプレフィックス)をスキップできるようにしました。これにより、メタデータヘッダーを付加するスキーマレジストリからのメッセージを ClickHouse が取り込めるようになります。 [#89621](https://github.com/ClickHouse/ClickHouse/pull/89621) ([Taras Polishchuk](https://github.com/wake-up-neo)). +* ジオメトリを h3 の六角形で埋めることができる `h3PolygonToCells` 関数を追加しました。[#33991](https://github.com/ClickHouse/ClickHouse/issues/33991) を解決します。[#66262](https://github.com/ClickHouse/ClickHouse/pull/66262)([Zacharias Knudsen](https://github.com/zachasme))。 +* S3 内の BLOB に関連付けられているすべてのタグを含む新しい仮想カラム `_tags`(`Map(String, String)`)を追加しました(注: BLOB にタグがない場合は追加のリクエストは発生しません)。[#72945](https://github.com/ClickHouse/ClickHouse/issues/72945) を解決しました。[#77773](https://github.com/ClickHouse/ClickHouse/pull/77773)([Zicong Qu](https://github.com/zicongleoqu))。 +* TODO(@vdimir)- 違いを説明して別のカテゴリに移動する。NULL セーフな比較演算子 `<=>`(`IS NOT DISTINCT FROM` の別名)および `IS DISTINCT FROM` を追加し、`NULL` 値を正しく扱う等値比較を可能にする。[#86763](https://github.com/ClickHouse/ClickHouse/issues/86763) を解決。[#87581](https://github.com/ClickHouse/ClickHouse/pull/87581)([yanglongwei](https://github.com/ylw510))。 +#### 実験的機能 +* Let's Encrypt などの ACME プロバイダからの TLS 証明書取得をサポートしました([RFC 8555](https://datatracker.ietf.org/doc/html/rfc8555))。これにより、分散クラスタでの TLS の自動構成が可能になります。[#66315](https://github.com/ClickHouse/ClickHouse/pull/66315)([Konstantin Bogdanov](https://github.com/thevar1able))。 +* Prometheus HTTP Query API の一部をサポートしました。有効化するには、設定ファイルの `` セクションに `query_api` 型のルールを追加します。サポートされるハンドラは `/api/v1/query_range` と `/api/v1/query` です。[#86132](https://github.com/ClickHouse/ClickHouse/pull/86132)([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 +* フルテキスト検索は、これまでの実験的段階からベータ段階へ移行しました。[#88928](https://github.com/ClickHouse/ClickHouse/pull/88928)([Robert Schulze](https://github.com/rschu1ze))。 +* `Alias` を実験的機能として扱うよう変更しました。`allow_experimental_alias_table_engine = 1` を設定することで有効化できます。[#89712](https://github.com/ClickHouse/ClickHouse/pull/89712)([Kai Zhu](https://github.com/nauu))。 -#### 実験的機能 -* ビットスライス形式でベクトルを保存する `QBit` データ型と、パラメータによって精度と速度のトレードオフを制御できる近似ベクトル検索を可能にする `L2DistanceTransposed` 関数を実装しました。 [#87922](https://github.com/ClickHouse/ClickHouse/pull/87922) ([Raufs Dunamalijevs](https://github.com/rienath)). -* 関数 `searchAll` と `searchAny` は、テキスト列を含まない列上でも動作するようになりました。その場合、デフォルトのトークナイザを使用します。 [#87722](https://github.com/ClickHouse/ClickHouse/pull/87722) ([Jimmy Aguilar Mena](https://github.com/Ergus)). +#### パフォーマンスの改善 +* Parquet リーダー v3 はデフォルトで有効です。 [#88827](https://github.com/ClickHouse/ClickHouse/pull/88827) ([Michael Kolupaev](https://github.com/al13n321))。 +* 分散実行: タスクをファイル単位ではなく行グループIDごとに分割するように改善。 [#87508](https://github.com/ClickHouse/ClickHouse/pull/87508) ([scanhex12](https://github.com/scanhex12)). +* `RIGHT` および `FULL` JOIN は、現在 ConcurrentHashJoin を使用するようになりました。これにより、これらの種類の JOIN はより高い並列度で実行されます。さまざまなケースで RIGHT および FULL JOIN のパフォーマンスが最大 2 倍まで向上します。[#78027](https://github.com/ClickHouse/ClickHouse/issues/78027) を解決しました。[#78462](https://github.com/ClickHouse/ClickHouse/pull/78462)([Yarik Briukhovetskyi](https://github.com/yariks5s))。 +* クエリ内の定数式における大きな値の処理を最適化。[#72880](https://github.com/ClickHouse/ClickHouse/issues/72880) をクローズ。[#81104](https://github.com/ClickHouse/ClickHouse/pull/81104)([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy))。 +* 1万以上のパーツを持つテーブルで大規模なパーティションプルーニングを行う場合、`SELECT` クエリが最大8倍高速に。 [#85535](https://github.com/ClickHouse/ClickHouse/pull/85535) ([James Morrison](https://github.com/jawm))。 +* クエリが固定ハッシュマップを使って集約状態を保持する場合(小さな整数での GROUP BY)、ClickHouse はクエリを高速化するために、その集約状態を並列にマージするようになりました。 [#87366](https://github.com/ClickHouse/ClickHouse/pull/87366) ([Jianfei Hu](https://github.com/incfly)). +* `_part_offset` を SELECT し、異なる ORDER BY を使用するプロジェクションをセカンダリインデックスとして利用できるようにします。有効にすると、特定のクエリ述語を用いてプロジェクションパーツから読み取り、PREWHERE ステージ中に行を効率的にフィルタリングするためのビットマップを生成できます。これは、[#80343](https://github.com/ClickHouse/ClickHouse/issues/80343) に続く、プロジェクションインデックスを実装するための 3 番目のステップです。[#81021](https://github.com/ClickHouse/ClickHouse/pull/81021)([Amos Bird](https://github.com/amosbird))。 +* まれな Aarch64 システムおよびその他のアーキテクチャ/カーネルの組み合わせで発生しうる問題に対して VDSO を修正しました。 [#86096](https://github.com/ClickHouse/ClickHouse/pull/86096) ([Tomas Hulata](https://github.com/tombokombo)). +* コードを簡素化し、[選択アルゴリズム](https://clickhouse.com/blog/lz4-compression-in-clickhouse#how-to-choose-the-best-algorithm)を調整することで、LZ4 の伸長処理の速度を向上させました。 [#88360](https://github.com/ClickHouse/ClickHouse/pull/88360) ([Raúl Marín](https://github.com/Algunenano)). +* S3 は内部的にオブジェクトをキー名プレフィックスに基づいてパーティション分割し、パーティションごとの高いリクエストレートに自動的に対応できるようスケールします。この変更により、2 つの新しい BACKUP 設定 `data_file_name_generator` と `data_file_name_prefix_length` が導入されました。`data_file_name_generator=checksum` の場合、バックアップデータファイルは内容のハッシュ値に基づいて命名されます。例: `checksum = abcd1234ef567890abcd1234ef567890` かつ `data_file_name_prefix_length = 3` のとき、生成されるパスは `abc/d1234ef567890abcd1234ef567890` になります。このようなキーの分布により、S3 パーティション間での負荷分散が強化され、スロットリングのリスクが低減されます。 [#88418](https://github.com/ClickHouse/ClickHouse/pull/88418) ([Julia Kartseva](https://github.com/jkartseva))。 +* 辞書ブロックをキャッシュし、トークン検索においてバイナリ検索の代わりにハッシュテーブルを使用することで、テキストインデックスのパフォーマンスを改善しました。 [#88786](https://github.com/ClickHouse/ClickHouse/pull/88786) ([Elmi Ahmadov](https://github.com/ahmadov)). +* クエリで `optimize_read_in_order` と `query_plan_optimize_lazy_materialization` を同時に利用できるようになりました。これにより [#88767](https://github.com/ClickHouse/ClickHouse/issues/88767) が解消されました。[#88866](https://github.com/ClickHouse/ClickHouse/pull/88866)([Manuel](https://github.com/raimannma))。 +* `DISTINCT` を含むクエリに対して集約プロジェクションを使用するようにしました。 [#86925](https://github.com/ClickHouse/ClickHouse/issues/86925) をクローズしました。 [#88894](https://github.com/ClickHouse/ClickHouse/pull/88894) ([Nihal Z. Miaji](https://github.com/nihalzp))。 +* 連続実行時のパフォーマンスを向上させるため、posting lists をキャッシュするようにしました。 [#88912](https://github.com/ClickHouse/ClickHouse/pull/88912) ([Elmi Ahmadov](https://github.com/ahmadov)). +* 入力データのソート順が LIMIT BY キーと一致する場合に、ストリーミング LIMIT BY トランスフォームを実行するようになりました。 [#88969](https://github.com/ClickHouse/ClickHouse/pull/88969) ([Eduard Karacharov](https://github.com/korowa)). +* 一部のケースにおいて `ANY LEFT JOIN` または `ANY RIGHT JOIN` を `ALL INNER JOIN` に書き換えできるようになりました。 [#89403](https://github.com/ClickHouse/ClickHouse/pull/89403) ([Dmitry Novik](https://github.com/novikd)). +* ログのオーバーヘッドを削減:エントリあたりのアトミック操作の回数を減らしました。 [#89651](https://github.com/ClickHouse/ClickHouse/pull/89651) ([Sergei Trifonov](https://github.com/serxa)). +* 複数の `JOIN` を含むクエリでランタイムフィルターが有効な場合に、複数のランタイムフィルターが追加されたときは、新しく追加されたフィルターステップを他のステップより優先してプッシュダウンするように実装しました。 [#89725](https://github.com/ClickHouse/ClickHouse/pull/89725) ([Alexander Gololobov](https://github.com/davenger)). +* ハッシュテーブルのマージ処理に伴うオーバーヘッドを削減することで、一部の `uniqExact` の処理をわずかに高速化しました。 [#89727](https://github.com/ClickHouse/ClickHouse/pull/89727) ([Raúl Marín](https://github.com/Algunenano)). +* レイジーマテリアライゼーションで処理される行数の上限を 10 から 100 に引き上げました。 [#89772](https://github.com/ClickHouse/ClickHouse/pull/89772) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* `allow_special_serialization_kinds_in_output_formats` をデフォルトで有効にしました。これによりメモリ使用量が減少し、一部の行形式の出力フォーマットにおける Sparse/Replicated カラムの出力クエリ速度が向上します。 [#89402](https://github.com/ClickHouse/ClickHouse/pull/89402) ([Pavel Kruglov](https://github.com/Avogar)). +* `ALTER TABLE ... FREEZE` クエリに並列処理を追加しました。 [#71743](https://github.com/ClickHouse/ClickHouse/pull/71743) ([Kirill](https://github.com/kirillgarbar)). +* bcrypt 認証にキャッシュを追加。 [#87115](https://github.com/ClickHouse/ClickHouse/pull/87115) ([Nikolay Degterinsky](https://github.com/evillique)). +* `FINAL` クエリで使用されるスキップインデックスがプライマリキーを構成するカラム上にある場合、他のパーツでプライマリキーとの交差を確認する追加ステップは不要となり、実行されなくなりました。これにより [#85897](https://github.com/ClickHouse/ClickHouse/issues/85897) が解決されました。[#88368](https://github.com/ClickHouse/ClickHouse/pull/88368)([Shankar Iyer](https://github.com/shankar-iyer))。 +* 最適化設定 `enable_lazy_columns_replication` がデフォルトになり、JOIN におけるメモリ使用量が削減されます。 [#89316](https://github.com/ClickHouse/ClickHouse/pull/89316) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* パーツ向けに `ColumnsDescription` のテーブル単位キャッシュを導入し、多数のパーツや多数のカラムを含むテーブルでのメモリ使用量を削減しました。 [#89352](https://github.com/ClickHouse/ClickHouse/pull/89352) ([Azat Khuzhin](https://github.com/azat)). +* テキストインデックスのデシリアライズ済みヘッダー用キャッシュを導入し、I/O を削減してクエリのパフォーマンスを向上しました。キャッシュは次の新しいサーバー設定で構成できます: - `text_index_header_cache_policy` - `text_index_header_cache_size` - `text_index_header_cache_max_entries` - `text_index_header_cache_size_ratio`。 [#89513](https://github.com/ClickHouse/ClickHouse/pull/89513) ([Elmi Ahmadov](https://github.com/ahmadov))。 +#### 改善 -#### パフォーマンスの向上 +* `use_variant_as_common_type` が設定されている場合、UNION は必要に応じて型を `Variant` で統一する必要があります。[#82772](https://github.com/ClickHouse/ClickHouse/issues/82772) を解決します。[#83246](https://github.com/ClickHouse/ClickHouse/pull/83246)([Mithun p](https://github.com/mithunputhusseri))。 +* SQL で定義したロールを、`users.xml` で定義されたユーザーに付与できるようになりました。 [#88139](https://github.com/ClickHouse/ClickHouse/pull/88139) ([c-end](https://github.com/c-end)). +* 内部クエリ(辞書、リフレッシュ可能なマテリアライズドビューなどによって内部的に実行されるもの)をログに記録するようにし、新しい `is_internal` 列を `system.query_log` に追加しました。 [#83277](https://github.com/ClickHouse/ClickHouse/pull/83277) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). +* インタラクティブモードの `clickhouse-client` と `clickhouse-local` では、カーソル位置にある識別子と同じ名前の識別子がコマンドライン上でハイライト表示されるようになりました。 [#89689](https://github.com/ClickHouse/ClickHouse/pull/89689) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* 出力フォーマット関連の設定は、クエリキャッシュには影響しなくなりました。また、クエリキャッシュは `http_response_headers` 設定を無視するようになりました。これは、Web UI でキャッシュから結果をダウンロードするといった機能を実装できるようにするためです。 [#89756](https://github.com/ClickHouse/ClickHouse/pull/89756) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* クエリ結果キャッシュが使用されている場合、HTTP インターフェイスは `Age` および `Expires` ヘッダーを返します。`Age` ヘッダーの有無によって結果がキャッシュからのものかどうかが分かり、`Expires` は最初の書き込み時にも設定されます。新しいプロファイルイベントを追加しました: `QueryCacheAgeSeconds`, `QueryCacheReadRows`, `QueryCacheReadBytes`, `QueryCacheWrittenRows`, `QueryCacheWrittenBytes`。 [#89759](https://github.com/ClickHouse/ClickHouse/pull/89759) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* `disable_insertion_and_mutation` を有効にしている場合(つまり ClickHouse Cloud の読み取り専用ウェアハウス)でも、リモートテーブルおよびデータレイクテーブルへの挿入を許可しました。 [#88549](https://github.com/ClickHouse/ClickHouse/pull/88549) ([Alexander Tokmakov](https://github.com/tavplubix)). +* クエリ `SYSTEM DROP TEXT INDEX CACHES` を追加しました。 [#90287](https://github.com/ClickHouse/ClickHouse/pull/90287) ([Anton Popov](https://github.com/CurtizJ)). +* より良い一貫性を保証するため、`enable_shared_storage_snapshot_in_query` をデフォルトで有効化しました。欠点はない想定です。 [#82634](https://github.com/ClickHouse/ClickHouse/pull/82634) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* `send_profile_events` 設定を追加しました。これにより、クライアントはプロファイルイベントを使用しない場合にネットワークトラフィックを削減できます。 [#89588](https://github.com/ClickHouse/ClickHouse/pull/89588) ([Kaviraj Kanagaraj](https://github.com/kavirajk))。 +* クエリ単位で近接セグメントのバックグラウンドでのダウンロードを無効化できるようになりました。 [#89524](https://github.com/ClickHouse/ClickHouse/issues/89524) を修正しました。 [#89668](https://github.com/ClickHouse/ClickHouse/pull/89668)([tanner-bruce](https://github.com/tanner-bruce))。 +* レプリケーテッド MergeTree テーブルで壊れたディスクがある場合でも `FETCH PARTITION` を実行できるようになりました。 [#58663](https://github.com/ClickHouse/ClickHouse/pull/58663) ([Duc Canh Le](https://github.com/canhld94)). +* MySQL データベースエンジンにおいて MySQL テーブルスキーマを取得する際に発生していたキャッチされない例外を修正。 [#69358](https://github.com/ClickHouse/ClickHouse/pull/69358) ([Duc Canh Le](https://github.com/canhld94)). +* すべての DDL `ON CLUSTER` クエリは、アクセス検証の精度を高めるために、元のクエリのユーザーコンテキストで実行されるようになりました。 [#71334](https://github.com/ClickHouse/ClickHouse/pull/71334) ([pufit](https://github.com/pufit)) +* `Parquet` における `UUID` のサポートを、論理型 `UUID` を持つ `FixedString(16)` として表現されている場合に追加しました。 [#74484](https://github.com/ClickHouse/ClickHouse/pull/74484) ([alekseev-maksim](https://github.com/alekseev-maksim)). +* サーバー以外のバイナリでは、ThreadFuzzer をデフォルトで無効化しました。 [#89115](https://github.com/ClickHouse/ClickHouse/pull/89115) ([Raúl Marín](https://github.com/Algunenano)). +* 相関サブクエリの入力サブプランのマテリアライズを遅延させることで、そのサブプランにもクエリプラン最適化が反映されるようにしました。 [#79890](https://github.com/ClickHouse/ClickHouse/issues/79890) の一部。 [#85455](https://github.com/ClickHouse/ClickHouse/pull/85455)([Dmitry Novik](https://github.com/novikd))。 +* `clickhouse-client` では、`SELECT` を伴う `CREATE OR REPLACE TABLE` クエリに対して、プログレスバー、ログ、およびパフォーマンス統計情報を確認できるようになりました。このクエリは、`SELECT` に時間がかかる場合でもタイムアウトすることはなくなりました。これにより [#38416](https://github.com/ClickHouse/ClickHouse/issues/38416) が解決されました。 [#87247](https://github.com/ClickHouse/ClickHouse/pull/87247) ([Diskein](https://github.com/Diskein))。 +* ハッシュ関数が `JSON` 型および `Dynamic` 型をサポートするようになりました。[#87734](https://github.com/ClickHouse/ClickHouse/issues/87734) が解決されました。[#87791](https://github.com/ClickHouse/ClickHouse/pull/87791)([Pavel Kruglov](https://github.com/Avogar))。 +* ArrowFlight サーバーの未実装部分を実装。 [#88013](https://github.com/ClickHouse/ClickHouse/pull/88013) ([Vitaly Baranov](https://github.com/vitlibar)). +* サーバーおよび keeper 向けに複数のヒストグラム型メトリクスを追加し、keeper リクエストの実行各段階の所要時間を計測できるようにします。サーバーには次のメトリクスが追加されます: `keeper_client_queue_duration_milliseconds`, `keeper_client_send_duration_milliseconds`, `keeper_client_roundtrip_duration_milliseconds`。keeper には次のメトリクスが追加されます: `keeper_server_preprocess_request_duration_milliseconds`, `keeper_server_process_request_duration_milliseconds`, `keeper_server_queue_duration_milliseconds`, `keeper_server_send_duration_milliseconds`。[#88158](https://github.com/ClickHouse/ClickHouse/pull/88158)([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 +* `EXPLAIN` クエリに `input_headers` オプションを追加し、ステップに入力ヘッダーを含められるようにしました。 [#88311](https://github.com/ClickHouse/ClickHouse/pull/88311) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). +* スロットリングにより遅延された S3 および AzureBlobStorage リクエストの数をカウントするためのプロファイルイベントを追加しました。ディスク関連と非ディスク関連の ThrottlerCount プロファイルイベントの不整合を修正しました。これにより、AzureBlobStorage への HTTP DELETE リクエストはスロットリングされなくなりました。 [#88535](https://github.com/ClickHouse/ClickHouse/pull/88535) ([Sergei Trifonov](https://github.com/serxa))。 +* テーブルレベルの統計情報をキャッシュできるようにし、2 つの設定を追加しました。MergeTree 設定 `refresh_statistics_interval` は統計情報キャッシュを更新する間隔を指定し、0 の場合はキャッシュは作成されません。セッション設定 `use_statistics_cache` は、クエリでテーブルレベルの統計情報キャッシュを使用するかどうかを指定します。より良い統計情報が必要な場合には、これを無視して(キャッシュを使わずに)実行することを選択できます。 [#88670](https://github.com/ClickHouse/ClickHouse/pull/88670) ([Han Fei](https://github.com/hanfei1991)). +* `Array` および `Map` のバイナリデシリアライズ処理を修正し、サイズ制限の検証時に `max_binary_string_size` ではなく `max_binary_array_size` 設定を使用するようにしました。これにより、`RowBinary` 形式を読み込む際に適切な制限が適用されるようになりました。 [#88744](https://github.com/ClickHouse/ClickHouse/pull/88744) ([Raufs Dunamalijevs](https://github.com/rienath))。 +* マージ実行のためのバックグラウンドプールで使用する `LockGuardWithStopWatch` クラスを導入しました。ミューテックスが1秒以上保持されている場合、またはスレッドが1秒以内にミューテックスを取得できずに待たされている場合には、警告メッセージが出力されます。`MergeMutateSelectedEntry` のデストラクタにあった重い処理を `finalize` メソッドに移動し、`MergeTreeBackground` エグゼキュータでロックを長時間保持しないようにしました。 [#88898](https://github.com/ClickHouse/ClickHouse/pull/88898) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). +* エンドポイントにリージョンが指定されていない場合に、S3 用としてオプトイン AWS リージョンを自動的に使用できるようにしました。参考: [オプトインが必要な AWS リージョン](https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html)。 [#88930](https://github.com/ClickHouse/ClickHouse/pull/88930) ([Andrey Zvonov](https://github.com/zvonand))。 +* ユーザーは、pager 実行中でも clickhouse-client で Ctrl-C を押すことでクエリをキャンセルできるようになりました。[#80778](https://github.com/ClickHouse/ClickHouse/issues/80778) を解決しました。[#88935](https://github.com/ClickHouse/ClickHouse/pull/88935) ([Grigorii](https://github.com/GSokol))。 +* Web UI は、値が負の場合でもテーブル内にバーを表示します。そのため、負の側と正の側でバーの色を変えた、正負両側の棒グラフを表示できます。 [#89016](https://github.com/ClickHouse/ClickHouse/pull/89016) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* Keeper における `SharedMergeTree` のメタデータ保存量を減らすため、`shared_merge_tree_create_per_replica_metadata_nodes` を無効化しました。 [#89036](https://github.com/ClickHouse/ClickHouse/pull/89036) ([Alexander Tokmakov](https://github.com/tavplubix)). +* `S3Queue` がサーバー設定 `disable_insertion_and_mutation` に従うようにしました。 [#89048](https://github.com/ClickHouse/ClickHouse/pull/89048) ([Raúl Marín](https://github.com/Algunenano)). +* S3 の再パーティショニングが発生し、S3 が 10 分を超えてスローダウンエラーを返し続ける場合でもバックアップが成功するように、25.6 では `s3_retry_attempts` のデフォルト値を 500 に設定しました。 [#89051](https://github.com/ClickHouse/ClickHouse/pull/89051) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 +* `kafka_compression_codec` と `kafka_compression_level` の設定を使用して、両方の Kafka エンジンにおける Kafka producer の圧縮方式を指定できるようになりました。 [#89073](https://github.com/ClickHouse/ClickHouse/pull/89073) ([János Benjamin Antal](https://github.com/antaljanosbenjamin))。 +* `system.columns` に新しい列 `statistics` を追加し、このテーブルに対して構築されている統計情報の種類を示します。統計情報の種類が自動的に作成された場合は、末尾に (auto) と表示されます。 [#89086](https://github.com/ClickHouse/ClickHouse/pull/89086) ([Han Fei](https://github.com/hanfei1991)). +* `*Cluster` テーブル関数にクラスタ名ではなくジェネリック展開 (generic expansion) が渡された場合のエラーメッセージを改善しました。 [#89093](https://github.com/ClickHouse/ClickHouse/pull/89093) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* YTsaurus: データソースとして `replicated_table` を使用できるようにしました。 [#89107](https://github.com/ClickHouse/ClickHouse/pull/89107) ([MikhailBurdukov](https://github.com/MikhailBurdukov))。 +* 空白から始まるクエリは、CLI の履歴に保存されなくなりました。 [#89116](https://github.com/ClickHouse/ClickHouse/pull/89116) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* String の配列を `hasAnyTokens` または `hasAllTokens` 関数の入力としてサポートしました。 [#89124](https://github.com/ClickHouse/ClickHouse/pull/89124) ([Elmi Ahmadov](https://github.com/ahmadov)). +* plain-rewritable ディスクにおけるメタデータのメモリ内保存方式を変更し、ディレクトリのネストおよびその周辺に起因する多数のバグを解消しました。 [#89125](https://github.com/ClickHouse/ClickHouse/pull/89125) ([Mikhail Artemenko](https://github.com/Michicosun)). +* Iceberg テーブルに対するクエリで `IN` 式内に含まれるサブクエリは、パーティションプルーニング解析の前に正しく事前計算されるようになりました。 [#89177](https://github.com/ClickHouse/ClickHouse/pull/89177) ([Daniil Ivanik](https://github.com/divanik)). +* `create_table_empty_primary_key_by_default` をデフォルトで有効化しました。これは使い勝手の面でより適しています。 [#89333](https://github.com/ClickHouse/ClickHouse/pull/89333) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* `SHOW CREATE DATABASE` で無効なクエリが生成される場合や、`system.databases` から `engine_full` をクエリした際に発生する `Backup` データベースエンジン内の誤ったコードを修正しました。[#89477](https://github.com/ClickHouse/ClickHouse/issues/89477) をクローズ。[#89341](https://github.com/ClickHouse/ClickHouse/pull/89341)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 以前のバージョンでは、CREATE TABLE クエリでテーブルエンジンを指定しなかった場合、設定 `create_table_empty_primary_key_by_default` は有効になりませんでした。 [#89342](https://github.com/ClickHouse/ClickHouse/pull/89342) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* `chdig` を v25.11.1 にアップデートしました。ログ機能の大幅な改善およびその他さまざまな強化が含まれます([25.11 のリリースノート](https://github.com/azat/chdig/releases/tag/v25.11.1))。[#89957](https://github.com/ClickHouse/ClickHouse/pull/89957)([Azat Khuzhin](https://github.com/azat))。([25.10 のリリースノート](https://github.com/azat/chdig/releases/tag/v25.10.1))。[#89452](https://github.com/ClickHouse/ClickHouse/pull/89452)([Azat Khuzhin](https://github.com/azat))。 +* Web UI のクエリ用 textarea のリサイズハンドルをフル幅にし、少しだけ使いやすくしました。また、ブラウザー標準のリサイズ機能は iPad 上の Safari では利用できませんでしたが、この変更により、少なくとも(知っていれば)textarea の下端をドラッグできるようになりました。 [#89457](https://github.com/ClickHouse/ClickHouse/pull/89457) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* ハッシュ結合の結果生成におけるメモリトラッキングを改善しました。これまで、結合結果を生成する際の一時的なメモリ割り当てが適切にトラッキングされておらず、メモリ制限の超過を引き起こす可能性がありました。 [#89560](https://github.com/ClickHouse/ClickHouse/pull/89560) ([Azat Khuzhin](https://github.com/azat)). +* Async server log: フラッシュをより早く行い、デフォルトのキューサイズを増やしました。 [#89597](https://github.com/ClickHouse/ClickHouse/pull/89597) ([Raúl Marín](https://github.com/Algunenano)). +* `system.asynchronous_metrics` 内の誤った `FilesystemCacheBytes`(およびその他の値)を修正。ファイルシステムキャッシュに対する `SYSTEM` クエリを 1 回だけ実行するように変更。同じパスを指すキャッシュに対して `system.filesystem_caches` 内に Atomic なビューを導入。[#89640](https://github.com/ClickHouse/ClickHouse/pull/89640) ([Azat Khuzhin](https://github.com/azat))。 +* `system.view_refreshes` のいくつかのカラムの説明をより明確にしました。 [#89701](https://github.com/ClickHouse/ClickHouse/pull/89701) ([Tuan Pham Anh](https://github.com/tuanpach)). +* STS エンドポイントとやり取りする際に S3 認証情報をキャッシュし、異なる関数呼び出し間で再利用できるようにしました。キャッシュされる認証情報の数は `s3_credentials_provider_max_cache_size` で制御できます。 [#89734](https://github.com/ClickHouse/ClickHouse/pull/89734) ([Antonio Andelic](https://github.com/antonio2368)). +* 複数の式ステップがその下にある場合の runtime filter のプッシュダウンを修正しました。 [#89741](https://github.com/ClickHouse/ClickHouse/pull/89741) ([Alexander Gololobov](https://github.com/davenger)). +* システムメモリが 5GB 未満の場合、デフォルトでは実行可能ファイルを mlock しないようにしました。 [#89751](https://github.com/ClickHouse/ClickHouse/pull/89751) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Web UI における型ヒントがテーブルヘッダーからはみ出さないようになりました。また、ツールチップの表示も修正され、テーブルヘッダーの背後に隠れて表示されることがなくなりました。 [#89753](https://github.com/ClickHouse/ClickHouse/pull/89753) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Web UI 上にテーブルのプロパティを表示できるようにしました。行数またはバイト数をクリックすると、`system.tables` からのクエリが表示されます。テーブルエンジンをクリックすると、`SHOW TABLES` が表示されます。 [#89771](https://github.com/ClickHouse/ClickHouse/pull/89771) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* 追記書き込み機能を実装していないディスクを使用するテーブルに対しても `non_replicated_deduplication_window` をサポートしました。[#87281](https://github.com/ClickHouse/ClickHouse/issues/87281) を解決しました。[#89796](https://github.com/ClickHouse/ClickHouse/pull/89796)([Tuan Pham Anh](https://github.com/tuanpach))。 +* コマンド `SYSTEM FLUSH ASYNC INSERT QUEUE` でフラッシュするテーブルのリストを指定できるようにしました。[#89915](https://github.com/ClickHouse/ClickHouse/pull/89915) ([Sema Checherinda](https://github.com/CheSema)) +* 重複排除ブロックの ID を `system.part_log` に保存するようにしました。 [#89928](https://github.com/ClickHouse/ClickHouse/pull/89928) ([Sema Checherinda](https://github.com/CheSema)). +* ファイルシステムキャッシュ設定 `keep_free_space_remove_batch` のデフォルト値を 10 から 100 に変更しました。より最適な値であるためです。 [#90030](https://github.com/ClickHouse/ClickHouse/pull/90030) ([Kseniia Sumarokova](https://github.com/kssenii)). +* TTL DROP マージタイプを導入し、この種のマージ後には delete TTL マージの次回スケジュールを更新しないようにしました。 [#90077](https://github.com/ClickHouse/ClickHouse/pull/90077) ([Mikhail Artemenko](https://github.com/Michicosun)). +* S3Queue のクリーンアップ中の RemoveRecursive Keeper リクエストに対して、より低いノード上限値を使用するようにしました。 [#90201](https://github.com/ClickHouse/ClickHouse/pull/90201) ([Antonio Andelic](https://github.com/antonio2368)). +* `SYSTEM FLUSH LOGS` クエリが、ログが空の場合でもテーブルの作成完了を待機するようになりました。 [#89408](https://github.com/ClickHouse/ClickHouse/pull/89408) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). +* 分散マージ集約で複数のリモートシャードが関与している場合、または `IN` サブクエリがある場合に誤った `rows_before_limit_at_least` が設定される問題を修正しました。これにより [#63280](https://github.com/ClickHouse/ClickHouse/issues/63280) が修正されました。[#63511](https://github.com/ClickHouse/ClickHouse/pull/63511)([Amos Bird](https://github.com/amosbird))。 +* `INSERT INTO ... SELECT` クエリ実行後に `0 rows in set` と表示される問題を修正しました。 [#47800](https://github.com/ClickHouse/ClickHouse/issues/47800) をクローズしました。 [#79462](https://github.com/ClickHouse/ClickHouse/pull/79462)([Engel Danila](https://github.com/aaaengel))。 + +#### バグ修正(公式安定版リリースにおけるユーザーから見て明らかな不具合) + +* 定数引数および短絡評価を用いる `multiIf` を修正。 [#72714](https://github.com/ClickHouse/ClickHouse/issues/72714) をクローズ。 [#84546](https://github.com/ClickHouse/ClickHouse/pull/84546)([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy))。 +* サブクエリによる制約付きテーブルに対して `SELECT` を実行した際に発生する論理エラーを修正しました。[#84190](https://github.com/ClickHouse/ClickHouse/issues/84190) を解決します。[#85575](https://github.com/ClickHouse/ClickHouse/pull/85575)([Pervakov Grigorii](https://github.com/GrigoryPervakov))。 +* 疑問符(?)を含む URI を使用する特殊なクエリで発生していたバグを修正しました。 [#85663](https://github.com/ClickHouse/ClickHouse/pull/85663) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* `EXPLAIN indexes = 1` の出力で、まれに列が欠落することがあった問題を修正しました。[#86696](https://github.com/ClickHouse/ClickHouse/issues/86696) を解決しました。 [#87083](https://github.com/ClickHouse/ClickHouse/pull/87083)([Michael Kolupaev](https://github.com/al13n321))。 +* 並列レプリカでサブカラムを追加できなくなる可能性のあった不具合を修正しました。 [#84888](https://github.com/ClickHouse/ClickHouse/issues/84888) をクローズ。 [#87514](https://github.com/ClickHouse/ClickHouse/pull/87514)([Pavel Kruglov](https://github.com/Avogar))。 +* parquet writer において、`created_by` 文字列を正しい形式で出力するようにしました(例:`ClickHouse version 25.10.1 (build 5b1dfb14925db8901a4e9202cd5d63c11ecfbb9f)`、従来の `ClickHouse v25.9.1.1-testing` ではなく)。古い parquet-mr が書き出した不正なファイルとの互換性を確保するため、parquet reader を修正しました。 [#87735](https://github.com/ClickHouse/ClickHouse/pull/87735) ([Michael Kolupaev](https://github.com/al13n321)). +* `cramersV`、`cramersVBiasCorrected`、`theilsU`、`contingency` において、誤った結果の原因となっていた φ二乗値の計算を修正しました。 [#87831](https://github.com/ClickHouse/ClickHouse/pull/87831) ([Nihal Z. Miaji](https://github.com/nihalzp))。 +* JSON 内の Float 型と Bool 型が混在する配列の読み取りを修正しました。以前はこのようなデータを挿入すると例外がスローされていました。 [#88008](https://github.com/ClickHouse/ClickHouse/pull/88008) ([Pavel Kruglov](https://github.com/Avogar)). +* TCPHandler において QueryState に shared_ptr を使用し、setProgressCallback、setFileProgressCallback、および setBlockMarshallingCallback で状態が無効になっているかどうかを検出できるようにしました。 [#88201](https://github.com/ClickHouse/ClickHouse/pull/88201) ([Tuan Pham Anh](https://github.com/tuanpach)). +* query_plan_optimize_join_order_limit > 1 のときのクロス JOIN の順序変更における論理エラーを修正し、[#89409](https://github.com/ClickHouse/ClickHouse/issues/89409) をクローズ。[#88286](https://github.com/ClickHouse/ClickHouse/pull/88286)([Vladimir Cherkasov](https://github.com/vdimir))。 +* [#88426](https://github.com/ClickHouse/ClickHouse/issues/88426) を修正。1. Alias テーブルでの明示的なカラム定義を禁止し、カラムはターゲットテーブルから自動的に読み込まれるようにしました。これにより、Alias テーブルが常にターゲットテーブルのスキーマと一致することを保証します。2. IStorage からより多くのメソッドをプロキシするようにしました。[#88552](https://github.com/ClickHouse/ClickHouse/pull/88552)([Kai Zhu](https://github.com/nauu))。 +* 復旧後、Replicated データベースのレプリカが長時間にわたって `Failed to marked query-0004647339 as finished (finished=No node, synced=No node)` のようなメッセージを出力し続けてスタックすることがありましたが、修正されました。 [#88671](https://github.com/ClickHouse/ClickHouse/pull/88671) ([Alexander Tokmakov](https://github.com/tavplubix))。 +* サブクエリを含む新しいアナライザで発生し得る "Context has expired" エラーを修正。 [#88694](https://github.com/ClickHouse/ClickHouse/pull/88694) ([Azat Khuzhin](https://github.com/azat)). +* input_format_parquet_local_file_min_bytes_for_seek を 0 に設定した場合に Parquet リーダーで発生していたセグメンテーションフォルトを修正しました。 [#78456](https://github.com/ClickHouse/ClickHouse/issues/78456) を解決しました。 [#88784](https://github.com/ClickHouse/ClickHouse/pull/88784) ([Animesh](https://github.com/anibilthare))。 +* PK が逆順に並んでいる場合に、min(PK)/max(PK) が誤った結果になる問題を修正しました。これにより [#83619](https://github.com/ClickHouse/ClickHouse/issues/83619) が解決されました。 [#88796](https://github.com/ClickHouse/ClickHouse/pull/88796) ([Amos Bird](https://github.com/amosbird)). +* 内部テーブルを DROP する際に、`max_table_size_to_drop` および `max_partition_size_to_drop` 設定によるサイズ制限が正しく適用されるように修正。 [#88812](https://github.com/ClickHouse/ClickHouse/pull/88812) ([Nikolay Degterinsky](https://github.com/evillique)). +* 単一の引数で呼び出された場合に、`top_k` が `threshold` パラメータを正しく考慮するように修正しました。[#88757](https://github.com/ClickHouse/ClickHouse/issues/88757) をクローズ。[#88867](https://github.com/ClickHouse/ClickHouse/pull/88867)([Manuel](https://github.com/raimannma))。 +* SSL 接続が必要な ArrowFlight エンドポイントソース(AWS ALB 配下など)から、特定のデータセットを正しく要求できるようになりました。 [#88868](https://github.com/ClickHouse/ClickHouse/pull/88868) ([alex-shchetkov](https://github.com/alex-shchetkov))。 +* ALTER によって追加されたマテリアライズされていない Nested(Tuple(...)) の処理を修正。[#83133](https://github.com/ClickHouse/ClickHouse/issues/83133) を修正。[#88879](https://github.com/ClickHouse/ClickHouse/pull/88879)([Azat Khuzhin](https://github.com/azat))。 +* 関数 `reverseUTF8` のバグを修正しました。以前のバージョンでは、長さ 4 バイトの UTF-8 コードポイントのバイト列を誤って逆順にしていました。この変更により [#88913](https://github.com/ClickHouse/ClickHouse/issues/88913) がクローズされます。 [#88914](https://github.com/ClickHouse/ClickHouse/pull/88914) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* icebergS3Cluster プロトコルを修正しました。`iceberg` クラスタ関数でスキーマ進化および位置削除と等価削除をサポートしました。 [#88287](https://github.com/ClickHouse/ClickHouse/issues/88287) を解決しました。 [#88919](https://github.com/ClickHouse/ClickHouse/pull/88919) ([Yang Jiang](https://github.com/Ted-Jiang)). +* 分散テーブル上で parallel replicas を使用するクエリに対して `parallel_replicas_support_projection` を無効化しました。[#88899](https://github.com/ClickHouse/ClickHouse/issues/88899) をクローズ。[#88922](https://github.com/ClickHouse/ClickHouse/pull/88922)([zoomxi](https://github.com/zoomxi))。 +* 内部キャスト時にコンテキストを伝播する。伝播されていなかった cast 設定に関する複数の問題を修正。Closes [#88873](https://github.com/ClickHouse/ClickHouse/issues/88873). Closes [#78025](https://github.com/ClickHouse/ClickHouse/issues/78025). [#88929](https://github.com/ClickHouse/ClickHouse/pull/88929) ([Manuel](https://github.com/raimannma)). +* file() 関数におけるグロブパターンからのファイル形式の取得処理を修正。 [#88920](https://github.com/ClickHouse/ClickHouse/issues/88920) を解決。 [#88947](https://github.com/ClickHouse/ClickHouse/pull/88947)([Vitaly Baranov](https://github.com/vitlibar))。 +* SQL SECURITY DEFINER でビューを作成する際に `SET DEFINER :definer` へのアクセス権チェックを行わないようにしました。[#88968](https://github.com/ClickHouse/ClickHouse/pull/88968) ([pufit](https://github.com/pufit)). +* 部分的な `QBit` 読み取り向けの最適化により、`p` が `Nullable` の場合に戻り値の型から誤って `Nullable` が削除されていた `L2DistanceTransposed(vec1, vec2, p)` における `LOGICAL_ERROR` を修正しました。 [#88974](https://github.com/ClickHouse/ClickHouse/pull/88974) ([Raufs Dunamalijevs](https://github.com/rienath))。 +* 不明なカタログ型によるクラッシュを修正しました。[#88819](https://github.com/ClickHouse/ClickHouse/issues/88819) を解決しました。[#88987](https://github.com/ClickHouse/ClickHouse/pull/88987) ([scanhex12](https://github.com/scanhex12)). +* これにより [#88081](https://github.com/ClickHouse/ClickHouse/issues/88081) をクローズします。 [#88988](https://github.com/ClickHouse/ClickHouse/pull/88988)([scanhex12](https://github.com/scanhex12))。 +* スキップインデックスの解析時のパフォーマンス低下を修正。 [#89004](https://github.com/ClickHouse/ClickHouse/pull/89004) ([Anton Popov](https://github.com/CurtizJ)). +* 存在しないロールが割り当てられているユーザーによる `clusterAllReplicas` の実行時に発生する `ACCESS_ENTITY_NOT_FOUND` エラーを修正。[#87670](https://github.com/ClickHouse/ClickHouse/issues/87670) を解決。[#89068](https://github.com/ClickHouse/ClickHouse/pull/89068)([pufit](https://github.com/pufit))。 +* CHECK 制約によるスパース列の処理を修正。[#88637](https://github.com/ClickHouse/ClickHouse/issues/88637) をクローズ。[#89076](https://github.com/ClickHouse/ClickHouse/pull/89076)([Eduard Karacharov](https://github.com/korowa))。 +* MergeTreeReaderTextIndex で仮想カラムを埋める際の誤った行数の扱いを修正し、LOGICAL_ERROR によるクラッシュが発生していた問題を解消しました。 [#89095](https://github.com/ClickHouse/ClickHouse/pull/89095) ([Peng Jian](https://github.com/fastio)). +* マージ準備中に例外が発生した際に TTL マージカウンタがリークするのを防止します。[#89019](https://github.com/ClickHouse/ClickHouse/issues/89019) を解決します。 [#89127](https://github.com/ClickHouse/ClickHouse/pull/89127)([save-my-heart](https://github.com/save-my-heart))。 +* base32/base58 エンコードおよびデコード処理に必要なバッファサイズの計算を修正しました。 [#89133](https://github.com/ClickHouse/ClickHouse/pull/89133) ([Antonio Andelic](https://github.com/antonio2368)). +* シャットダウンとバックグラウンドの `INSERT` の競合により Distributed テーブルエンジンで発生する use-after-free を修正。[#88640](https://github.com/ClickHouse/ClickHouse/issues/88640) を解決。[#89136](https://github.com/ClickHouse/ClickHouse/pull/89136)([Azat Khuzhin](https://github.com/azat))。 +* Parquet のパース時にミュータブルな例外が原因で発生しうるデータレースを回避しました。 [#88385](https://github.com/ClickHouse/ClickHouse/issues/88385) を修正。 [#89174](https://github.com/ClickHouse/ClickHouse/pull/89174)([Azat Khuzhin](https://github.com/azat))。 +* リフレッシュ可能なマテリアライズドビュー: リフレッシュ中にソーステーブルが完全に削除された場合に発生するまれなサーバークラッシュを修正しました。 [#89203](https://github.com/ClickHouse/ClickHouse/pull/89203) ([Michael Kolupaev](https://github.com/al13n321)). +* HTTP インターフェイスで圧縮ストリーム送信中にエラーを返す際にバッファをフラッシュするようにしました。 [#89256](https://github.com/ClickHouse/ClickHouse/pull/89256) ([Alexander Tokmakov](https://github.com/tavplubix)). +* クエリマスキングルールが DDL ステートメントに誤って適用されないようにしました。 [#89272](https://github.com/ClickHouse/ClickHouse/pull/89272) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). +* MergeTreeReaderTextIndex で仮想カラムを埋める際の行数カウントの誤りにより LOGICAL_ERROR でクラッシュする問題を修正しました。[#89095](https://github.com/ClickHouse/ClickHouse/issues/89095) を再オープンします。 [#89303](https://github.com/ClickHouse/ClickHouse/pull/89303) ([Jimmy Aguilar Mena](https://github.com/Ergus))。 +* Statistics countmin が LowCardinality(Nullable(String)) の estimate データ型をサポートしておらず、LOGICAL_ERROR が発生していた問題を修正しました。 [#89343](https://github.com/ClickHouse/ClickHouse/pull/89343) ([Han Fei](https://github.com/hanfei1991)). +* `IN` 関数で、主キー列の型が `IN` 関数の右側の列の型と異なる場合に、クラッシュまたは未定義動作が発生する可能性がある問題。例: `SELECT string_column, int_column FROM test_table WHERE (string_column, int_column) IN (SELECT '5', 'not a number')`。多数の行が選択され、その中に互換性のない型を含む行が存在する場合に発生することがあります。 [#89367](https://github.com/ClickHouse/ClickHouse/pull/89367) ([Ilya Golshtein](https://github.com/ilejn)). +* `countIf(*)` の引数が途中で切り捨てられる問題を修正。 [#89372](https://github.com/ClickHouse/ClickHouse/issues/89372) をクローズ。 [#89373](https://github.com/ClickHouse/ClickHouse/pull/89373)([Manuel](https://github.com/raimannma))。 +* ミューテーション統計用の非圧縮チェックサムが失われないようにしました。 [#89381](https://github.com/ClickHouse/ClickHouse/pull/89381) ([Azat Khuzhin](https://github.com/azat)). +* `p` が `LowCardinality(Nullable(T))` の場合に、QBit の部分読み出しの最適化によって戻り値の型から誤って `Nullable` が削除されていた `L2DistanceTransposed(vec1, vec2, p)` で発生していた `LOGICAL_ERROR` を修正しました。 [#88362](https://github.com/ClickHouse/ClickHouse/issues/88362) を解決します。 [#89397](https://github.com/ClickHouse/ClickHouse/pull/89397)([Raufs Dunamalijevs](https://github.com/rienath))。 +* 古いバージョンの ClickHouse が書き込んだタプル本体に対して、不正な sparse シリアライゼーションでエンコードされたテーブルの読み込みを修正しました。 [#89405](https://github.com/ClickHouse/ClickHouse/pull/89405) ([Azat Khuzhin](https://github.com/azat)). +* `deduplicate_merge_projection_mode='ignore'` を使用している場合に、TTL によって空になったパーツと、空でないプロジェクションを含むパーツとのマージ処理が誤って行われていた問題を修正しました。 [#89430](https://github.com/ClickHouse/ClickHouse/issues/89430) を解決します。 [#89458](https://github.com/ClickHouse/ClickHouse/pull/89458)([Amos Bird](https://github.com/amosbird))。 +* 重複したカラムを含む `full_sorting_merge` 結合における論理エラーを修正しました。[#86957](https://github.com/ClickHouse/ClickHouse/issues/86957) を解決しました。 [#89495](https://github.com/ClickHouse/ClickHouse/pull/89495)([Vladimir Cherkasov](https://github.com/vdimir))。 +* ローテーション時にチェンジログが正しくリネームされなかった場合の、Keeper 起動時におけるチェンジログの読み取り処理を修正しました。 [#89496](https://github.com/ClickHouse/ClickHouse/pull/89496) ([Antonio Andelic](https://github.com/antonio2368)). +* 右側テーブルの一意キーに対して OR 条件を使用した場合に発生する誤った JOIN 結果を修正します。[#89391](https://github.com/ClickHouse/ClickHouse/issues/89391) を解決します。[#89512](https://github.com/ClickHouse/ClickHouse/pull/89512) ([Vladimir Cherkasov](https://github.com/vdimir))。 +* analyzer と PK IN (subquery) の組み合わせで発生しうる「Context has expired」の問題を修正 (v2)。[#89433](https://github.com/ClickHouse/ClickHouse/issues/89433) を修正。[#89527](https://github.com/ClickHouse/ClickHouse/pull/89527)([Azat Khuzhin](https://github.com/azat))。 +* 大文字のカラム名を持つテーブルの MaterializedPostgreSQL レプリケーションを修正しました。[#72363](https://github.com/ClickHouse/ClickHouse/issues/72363) を解決します。[#89530](https://github.com/ClickHouse/ClickHouse/pull/89530)([Danylo Osipchuk](https://github.com/Lenivaya))。 +* 集約関数の状態に `LowCardinality(String)` 列のシリアライズ済みの値が含まれている場合にクラッシュが発生する問題を修正しました。 [#89550](https://github.com/ClickHouse/ClickHouse/pull/89550) ([Pavel Kruglov](https://github.com/Avogar)). +* `enable_lazy_columns_replication` 設定を有効にした状態で、JOIN の右側で `ARRAY JOIN` を使用した際にクラッシュが発生する問題を修正。 [#89551](https://github.com/ClickHouse/ClickHouse/pull/89551) ([Pavel Kruglov](https://github.com/Avogar)). +* query_plan_convert_join_to_in の論理的な誤りを修正。[#89066](https://github.com/ClickHouse/ClickHouse/issues/89066) を解決。[#89554](https://github.com/ClickHouse/ClickHouse/pull/89554)([Vladimir Cherkasov](https://github.com/vdimir))。 +* 変換できない型不一致のカラムと定数を含む条件を推定しようとした際に、統計推定器で発生していた例外を修正しました。 [#89596](https://github.com/ClickHouse/ClickHouse/pull/89596) ([Han Fei](https://github.com/hanfei1991)). +* 実行時フィルターは、ハッシュ結合などサポートされている結合アルゴリズムに対してのみ追加するようにしました。フィルターは、結合アルゴリズムがまず右側をすべて読み終えてから左側を読み始める場合にのみ構築できますが、例えば FullSortingMergeJoin は両側を同時に読みます。 [#89220](https://github.com/ClickHouse/ClickHouse/issues/89220) を修正しました。 [#89652](https://github.com/ClickHouse/ClickHouse/pull/89652)([Alexander Gololobov](https://github.com/davenger))。 +* `sparseGrams` トークナイザー使用時における `hasAnyTokens`、`hasAllTokens`、`tokens` 関数の同時実行に関する問題を修正しました。[#89605](https://github.com/ClickHouse/ClickHouse/issues/89605) を解決します。 [#89665](https://github.com/ClickHouse/ClickHouse/pull/89665)([Elmi Ahmadov](https://github.com/ahmadov))。 +* 一部のケースで発生していた、`JOIN` ランタイムフィルタに起因する論理エラー/クラッシュを修正しました。[#89062](https://github.com/ClickHouse/ClickHouse/issues/89062) を修正。[#89666](https://github.com/ClickHouse/ClickHouse/pull/89666)([Alexander Gololobov](https://github.com/davenger))。 +* `enable_lazy_columns_replication` が有効な状態で Map 列に対して ARRAY JOIN を行う際に発生する可能性のある論理エラーを修正しました。[#89705](https://github.com/ClickHouse/ClickHouse/issues/89705) をクローズ。[#89717](https://github.com/ClickHouse/ClickHouse/pull/89717)([Pavel Kruglov](https://github.com/Avogar))。 +* キャンセル処理中のリモートクエリにおいて、切断後にリモートサーバーから読み込もうとしてクラッシュする問題を回避しました。[#89468](https://github.com/ClickHouse/ClickHouse/issues/89468) を解決。[#89740](https://github.com/ClickHouse/ClickHouse/pull/89740)([Azat Khuzhin](https://github.com/azat))。 +* プロジェクションインデックスの読み取りパスにおけるレースコンディションを解消しました。 [#89497](https://github.com/ClickHouse/ClickHouse/issues/89497) を解決しました。 [#89762](https://github.com/ClickHouse/ClickHouse/pull/89762)([Peng Jian](https://github.com/fastio))。 +* プロジェクションインデックスの読み取りにおいてレースコンディションを引き起こす可能性があったバグを修正し、[#89497](https://github.com/ClickHouse/ClickHouse/issues/89497) を解決しました。 [#89775](https://github.com/ClickHouse/ClickHouse/pull/89775) ([Amos Bird](https://github.com/amosbird))。 +* パーティションを持たないテーブルに対する Paimon テーブル関数の処理を修正しました。[#89690](https://github.com/ClickHouse/ClickHouse/issues/89690) を解決しました。[#89793](https://github.com/ClickHouse/ClickHouse/pull/89793)([JIaQi](https://github.com/JiaQiTang98))。 +* 高度な JSON 共有データシリアライゼーションにおいて、パスおよびそのサブカラムの読み取り時に発生しうる論理エラーを修正しました。 [#89805](https://github.com/ClickHouse/ClickHouse/issues/89805) をクローズ。 [#89819](https://github.com/ClickHouse/ClickHouse/pull/89819) ([Pavel Kruglov](https://github.com/Avogar))。 +* データ型のバイナリデシリアライズで発生する可能性のあったスタックオーバーフローを修正し、[#88710](https://github.com/ClickHouse/ClickHouse/issues/88710) をクローズ。[#89822](https://github.com/ClickHouse/ClickHouse/pull/89822)([Pavel Kruglov](https://github.com/Avogar))。 +* `IN` 関数内で空のタプルが使われた場合に発生する論理エラーを修正。[#88343](https://github.com/ClickHouse/ClickHouse/issues/88343) をクローズ。[#89850](https://github.com/ClickHouse/ClickHouse/pull/89850)([Nihal Z. Miaji](https://github.com/nihalzp))。 +* 互換性維持のため、旧アナライザーでは `optimize_injective_functions_in_group_by` の設定にかかわらず `GROUP BY` から単射関数を除去します。 [#89854](https://github.com/ClickHouse/ClickHouse/issues/89854) を解決します。 [#89870](https://github.com/ClickHouse/ClickHouse/pull/89870) ([Raufs Dunamalijevs](https://github.com/rienath))。 +* たとえばメモリ制限などによってマージが中断された場合、merge mutate background executor はロックなしでマージタスクに対して `cancel` を呼び出しますが、この場合、部分的に作成された結果パーツは削除されません(完了しておらず、この段階では可視状態にもなっていなかったため)。その後、マージタスクが破棄され、それに伴い結果パーツの破棄がトリガーされます。これによりディスクトランザクションがロールバックされ、S3 からデータが削除されます。最終的に、このガベージクリーンアップは merge mutate background executor のロック取得下で実行されるようになりました。 [#89875](https://github.com/ClickHouse/ClickHouse/pull/89875) ([Mikhail Artemenko](https://github.com/Michicosun)). +* `reverse` 関数および `CAST` 関数内で空のタプルを扱う際の論理エラーを修正しました。 [#89137](https://github.com/ClickHouse/ClickHouse/issues/89137) をクローズしました。 [#89908](https://github.com/ClickHouse/ClickHouse/pull/89908) ([Nihal Z. Miaji](https://github.com/nihalzp))。 +* ClickHouse は、デフォルトで `SHOW DATABASES` クエリにデータレイクカタログのデータベースを表示するようになりました。 [#89914](https://github.com/ClickHouse/ClickHouse/pull/89914) ([alesapin](https://github.com/alesapin)). +* バックアップにおける GCS のネイティブコピーの利用を修正しました。不適切なクライアントのクローン処理が原因で、GCS のネイティブコピーが常に失敗し、データを自前で読み書きするという最適でない方法が使用されていました。 [#89923](https://github.com/ClickHouse/ClickHouse/pull/89923) ([Antonio Andelic](https://github.com/antonio2368)). +* base32Encode のバッファサイズ計算を修正しました。サイズが 5 未満の文字列を含むカラムに対して base32Encode を計算するとクラッシュにつながる可能性がありました。 [#89911](https://github.com/ClickHouse/ClickHouse/issues/89911) を解決します。 [#89929](https://github.com/ClickHouse/ClickHouse/pull/89929)([Antonio Andelic](https://github.com/antonio2368))。 +* `SHOW COLUMNS` と `SHOW FUNCTIONS` クエリにおける誤ったエスケープ処理を修正。[#89942](https://github.com/ClickHouse/ClickHouse/pull/89942) ([alesapin](https://github.com/alesapin))。 +* ユーザー名に '@' 文字を含む場合の MongoDB エンジンにおける URL 検証を修正しました。これまでは、'@' を含むユーザー名が不適切なエンコードによりエラーを引き起こしていました。 [#89970](https://github.com/ClickHouse/ClickHouse/pull/89970) ([Kai Zhu](https://github.com/nauu)). +* [#90592](https://github.com/ClickHouse/ClickHouse/issues/90592) でバックポート: `IN` 句内で `ARRAY JOIN` を使用し、かつ `enable_lazy_columns_replication` 設定が有効な場合に発生しうるリモートクエリのクラッシュを修正。[#90361](https://github.com/ClickHouse/ClickHouse/issues/90361) を解決します。[#89997](https://github.com/ClickHouse/ClickHouse/pull/89997)([Pavel Kruglov](https://github.com/Avogar))。 +* [#90448](https://github.com/ClickHouse/ClickHouse/issues/90448) でバックポート済み: 一部のケースで発生していた、テキスト形式における `String` からの不正な `DateTime64` 値の推論を修正。 [#89368](https://github.com/ClickHouse/ClickHouse/issues/89368) を解決。 [#90013](https://github.com/ClickHouse/ClickHouse/pull/90013) ([Pavel Kruglov](https://github.com/Avogar))。 +* `BSONEachRow` と `MsgPack` における空のタプルカラムに起因する論理エラーを修正。[#89814](https://github.com/ClickHouse/ClickHouse/issues/89814) および [#71536](https://github.com/ClickHouse/ClickHouse/issues/71536) をクローズ。[#90018](https://github.com/ClickHouse/ClickHouse/pull/90018)([Nihal Z. Miaji](https://github.com/nihalzp))。 +* [#90457](https://github.com/ClickHouse/ClickHouse/issues/90457) でバックポートされました: 集約状態およびその他のソースからのデータをデシリアライズする際にサイズチェックを行うようにしました。 [#90031](https://github.com/ClickHouse/ClickHouse/pull/90031)([Raúl Marín](https://github.com/Algunenano))。 +* 重複カラムを含む JOIN で発生する可能性のある `Invalid number of rows in Chunk` エラーを修正しました。[#89411](https://github.com/ClickHouse/ClickHouse/issues/89411) を解消しました。[#90053](https://github.com/ClickHouse/ClickHouse/pull/90053)([Vladimir Cherkasov](https://github.com/vdimir))。 +* [#90588](https://github.com/ClickHouse/ClickHouse/issues/90588) でバックポート: `enable_lazy_columns_replication` 設定を有効にした状態で `ARRAY JOIN` を使用して挿入を行う際に発生する可能性のあるエラー `Column with Array type is not represented by ColumnArray column: Replicated` を修正しました。 [#90066](https://github.com/ClickHouse/ClickHouse/pull/90066) ([Pavel Kruglov](https://github.com/Avogar)). +* `user_files` で先頭がドットのファイルを許可しました。Closes [#89662](https://github.com/ClickHouse/ClickHouse/issues/89662). [#90079](https://github.com/ClickHouse/ClickHouse/pull/90079) ([Raúl Marín](https://github.com/Algunenano)). +* [#90647](https://github.com/ClickHouse/ClickHouse/issues/90647) でバックポート: 大きなステップサイズを使用した場合に `numbers` システムテーブルで発生する論理エラーと剰余演算のバグを修正。[#83398](https://github.com/ClickHouse/ClickHouse/issues/83398) をクローズ。[#90123](https://github.com/ClickHouse/ClickHouse/pull/90123)([Nihal Z. Miaji](https://github.com/nihalzp))。 +* 辞書引数の解析時に発生する整数オーバーフローを修正。Closes [#78506](https://github.com/ClickHouse/ClickHouse/issues/78506). [#90171](https://github.com/ClickHouse/ClickHouse/pull/90171) ([Raúl Marín](https://github.com/Algunenano)). +* [#90468](https://github.com/ClickHouse/ClickHouse/issues/90468) にバックポート済み: 25.8 へのスムーズなアップグレードを妨げていた Hive パーティショニングの非互換性を修正(アップグレード中に発生するエラー `All hive partitioning columns must be present in the schema` を解消)。[#90202](https://github.com/ClickHouse/ClickHouse/pull/90202)([Kseniia Sumarokova](https://github.com/kssenii))。 +* クエリ条件キャッシュが有効な状態での `SELECT` クエリにおいて、軽量更新後に誤ったクエリ結果が返される可能性があった問題を修正しました。[#90176](https://github.com/ClickHouse/ClickHouse/issues/90176) を修正。[#90054](https://github.com/ClickHouse/ClickHouse/issues/90054) を修正。[#90204](https://github.com/ClickHouse/ClickHouse/pull/90204)([Anton Popov](https://github.com/CurtizJ))。 +* 不正な形式のシャードディレクトリ名を解析する際に `StorageDistributed` がクラッシュする問題を修正。 [#90243](https://github.com/ClickHouse/ClickHouse/pull/90243) ([Aleksandr Musorin](https://github.com/AVMusorin)). +* `LogicalExpressionOptimizerPass` において、文字列から整数またはブール値への暗黙的な変換を正しく処理するようにしました。[#89803](https://github.com/ClickHouse/ClickHouse/issues/89803) を解決します。[#90245](https://github.com/ClickHouse/ClickHouse/pull/90245)([Elmi Ahmadov](https://github.com/ahmadov))。 +* テーブル定義内の特定の skip index の誤った形式を修正しました。これが原因で `METADATA_MISMATCH` が発生し、Replicated Database における新しいレプリカの作成が失敗していました。 [#90251](https://github.com/ClickHouse/ClickHouse/pull/90251) ([Nikolay Degterinsky](https://github.com/evillique)). +* [#90381](https://github.com/ClickHouse/ClickHouse/issues/90381) でバックポート済み: パーツの行数が `index_granularity` より少ない場合に、MergeTreeReaderIndex で行数の不一致が発生する問題を修正しました。 [#89691](https://github.com/ClickHouse/ClickHouse/issues/89691) を解決します。 [#90254](https://github.com/ClickHouse/ClickHouse/pull/90254)([Peng Jian](https://github.com/fastio))。 +* [#90608](https://github.com/ClickHouse/ClickHouse/issues/90608) にバックポート: コンパクトパーツ内で JSON からサブカラムを読み取る際に `CANNOT_READ_ALL_DATA` エラーを引き起こす可能性があったバグを修正。[#90264](https://github.com/ClickHouse/ClickHouse/issues/90264) を解決。[#90302](https://github.com/ClickHouse/ClickHouse/pull/90302)([Pavel Kruglov](https://github.com/Avogar))。 +* 2 つの引数を指定した場合に `trim`、`ltrim`、`rtrim` 関数が動作しない問題を修正しました。 [#90170](https://github.com/ClickHouse/ClickHouse/issues/90170) をクローズしました。 [#90305](https://github.com/ClickHouse/ClickHouse/pull/90305)([Nihal Z. Miaji](https://github.com/nihalzp))。 +* [#90625](https://github.com/ClickHouse/ClickHouse/issues/90625) にバックポート済み: `index_granularity_bytes=0` の場合に、存在しない JSON パスに対する `prewhere` で発生し得る論理エラーを修正。[#86924](https://github.com/ClickHouse/ClickHouse/issues/86924) を解決。[#90375](https://github.com/ClickHouse/ClickHouse/pull/90375)([Pavel Kruglov](https://github.com/Avogar))。 +* [#90484](https://github.com/ClickHouse/ClickHouse/issues/90484) にバックポート済み: 精度引数が有効な範囲を超えた場合にクラッシュを引き起こしていた `L2DistanceTransposed` のバグを修正しました。[#90401](https://github.com/ClickHouse/ClickHouse/issues/90401) をクローズします。[#90405](https://github.com/ClickHouse/ClickHouse/pull/90405)([Raufs Dunamalijevs](https://github.com/rienath))。 +* [#90577](https://github.com/ClickHouse/ClickHouse/issues/90577) にバックポート: 配列参照ベクトル(デフォルトで `Array(Float64)`)を、要素型が `Float64` 以外(`Float32`、`BFloat16`)の `QBit` カラムとともに使用した場合に、`L2DistanceTransposed` で距離計算が誤って行われていた問題を修正しました。この関数は、参照ベクトルを自動的に `QBit` の要素型にキャストするようになりました。[#89976](https://github.com/ClickHouse/ClickHouse/issues/89976) を解決します。[#90485](https://github.com/ClickHouse/ClickHouse/pull/90485)([Raufs Dunamalijevs](https://github.com/rienath))。 +* [#90601](https://github.com/ClickHouse/ClickHouse/issues/90601) にバックポート済み:`equals` 関数におけるまれなケースによって発生する論理エラーを修正しました。[#88142](https://github.com/ClickHouse/ClickHouse/issues/88142) をクローズ。[#90557](https://github.com/ClickHouse/ClickHouse/pull/90557)([Nihal Z. Miaji](https://github.com/nihalzp))。 +* `Tuple` 型に対する `CoalescingMergeTree` の処理を修正。 [#88828](https://github.com/ClickHouse/ClickHouse/pull/88828) ([scanhex12](https://github.com/scanhex12)). -* JOIN および ARRAY JOIN においてカラムの遅延複製を実装しました。一部の出力フォーマットで、Sparse や Replicated などの特殊なカラム表現を完全なカラム表現に変換しないようにしました。これにより、メモリ上での不要なデータコピーを回避できます。 [#88752](https://github.com/ClickHouse/ClickHouse/pull/88752) ([Pavel Kruglov](https://github.com/Avogar)). -* MergeTree テーブルのトップレベル String カラムに、圧縮率の向上と効率的なサブカラムアクセスを可能にするオプションの `.size` サブカラムシリアライゼーションを追加しました。シリアライゼーションのバージョンを制御するための新しい MergeTree 設定と、空文字列に対する式を最適化するための設定を導入しました。 [#82850](https://github.com/ClickHouse/ClickHouse/pull/82850) ([Amos Bird](https://github.com/amosbird))。 -* Iceberg に対する順序付き読み取りのサポート。 [#88454](https://github.com/ClickHouse/ClickHouse/pull/88454) ([scanhex12](https://github.com/scanhex12)). -* 右部分木から実行時にブルームフィルターを構築し、このフィルターを左部分木側のスキャンに渡すことで、一部の JOIN クエリを高速化します。これは、`SELECT avg(o_totalprice) FROM orders, customer, nation WHERE c_custkey = o_custkey AND c_nationkey=n_nationkey AND n_name = 'FRANCE'` のようなクエリで有効です。[#84772](https://github.com/ClickHouse/ClickHouse/pull/84772)([Alexander Gololobov](https://github.com/davenger))。 -* クエリ条件キャッシュ (QCC) とインデックス解析の順序および統合方法をリファクタリングすることで、クエリパフォーマンスを改善しました。QCC フィルタリングは、プライマリキーおよびスキップインデックス解析より前に適用されるようになり、不必要なインデックス計算が削減されます。インデックス解析は複数のレンジフィルターをサポートするように拡張され、そのフィルタリング結果は QCC に再度格納されるようになりました。これにより、特にスキップインデックス(例: ベクターインデックスや転置インデックス)に依存し、インデックス解析が実行時間の大部分を占めるクエリの速度が大幅に向上します。 [#82380](https://github.com/ClickHouse/ClickHouse/pull/82380) ([Amos Bird](https://github.com/amosbird)). -* 小規模なクエリを高速化するためのマイクロ最適化を多数追加。 [#83096](https://github.com/ClickHouse/ClickHouse/pull/83096) ([Raúl Marín](https://github.com/Algunenano)). -* ネイティブプロトコルでログとプロファイルイベントを圧縮します。100 レプリカ以上のクラスタでは、非圧縮のプロファイルイベントは 1〜10 MB/秒 を消費し、低速なインターネット接続ではプログレスバーの更新が遅くなります。これにより [#82533](https://github.com/ClickHouse/ClickHouse/issues/82533) が解決されました。[#83586](https://github.com/ClickHouse/ClickHouse/pull/83586)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 大文字小文字を区別する文字列検索(`WHERE URL LIKE '%google%'` のようなフィルタリング処理)のパフォーマンスを、[StringZilla](https://github.com/ashvardanian/StringZilla) ライブラリを使用し、利用可能な場合には SIMD CPU 命令を活用することで向上させます。 [#84161](https://github.com/ClickHouse/ClickHouse/pull/84161) ([Raúl Marín](https://github.com/Algunenano))。 -* `SimpleAggregateFunction(anyLast)` 型のカラムを持つテーブルに対して、`FINAL` 付きで AggregatingMergeTree テーブルから `SELECT` を実行する際のメモリ割り当ておよびメモリコピーを削減しました。 [#84428](https://github.com/ClickHouse/ClickHouse/pull/84428) ([Duc Canh Le](https://github.com/canhld94)). -* 論理和(OR)を含む JOIN 述語のプッシュダウンに関するロジックを提供します。例として、TPC-H Q7 において 2 つのテーブル n1 と n2 に対する条件 `(n1.n_name = 'FRANCE' AND n2.n_name = 'GERMANY') OR (n1.n_name = 'GERMANY' AND n2.n_name = 'FRANCE')` がある場合、それぞれのテーブルに対して部分フィルターを分離して抽出します。n1 に対しては `n1.n_name = 'FRANCE' OR n1.n_name = 'GERMANY'`、n2 に対しては `n2.n_name = 'GERMANY' OR n2.n_name = 'FRANCE'` となります。 [#84735](https://github.com/ClickHouse/ClickHouse/pull/84735)([Yarik Briukhovetskyi](https://github.com/yariks5s))。 -* 新しいデフォルト設定 `optimize_rewrite_like_perfect_affix` により、前方一致または後方一致の `LIKE` クエリのパフォーマンスが向上しました。 [#85920](https://github.com/ClickHouse/ClickHouse/pull/85920) ([Guang Zhao](https://github.com/zheguang)). -* 複数の文字列/数値カラムでの GROUP BY 実行時に、大きなシリアライズされたキーが原因で発生するパフォーマンス低下を修正しました。これは [#83884](https://github.com/ClickHouse/ClickHouse/pull/83884) の後続対応です。[#85924](https://github.com/ClickHouse/ClickHouse/pull/85924)([李扬](https://github.com/taiyang-li))。 -* キーごとのマッチが多数発生するハッシュ結合でのメモリ使用量を削減するため、新しい `joined_block_split_single_row` 設定を追加しました。これにより、左側テーブルの1行に対するマッチの範囲内であっても、ハッシュ結合結果をチャンクに分割できるようになります。これは、左側テーブルの1行が右側テーブルの数千行または数百万行とマッチする場合に特に有用です。以前は、すべてのマッチを一度にメモリ上にマテリアライズする必要がありました。この変更によりピークメモリ使用量は削減されますが、CPU 使用量が増加する可能性があります。 [#87913](https://github.com/ClickHouse/ClickHouse/pull/87913) ([Vladimir Cherkasov](https://github.com/vdimir))。 -* SharedMutex の改良(多数の同時クエリ実行時のパフォーマンスを向上)。 [#87491](https://github.com/ClickHouse/ClickHouse/pull/87491) ([Raúl Marín](https://github.com/Algunenano)). -* 出現頻度の低いトークンが大半を占めるドキュメントに対するテキストインデックス構築の性能を改善しました。 [#87546](https://github.com/ClickHouse/ClickHouse/pull/87546) ([Anton Popov](https://github.com/CurtizJ)). -* Field デストラクタの一般的なケースを高速化し、多数の小さなクエリの処理性能を改善しました。 [#87631](https://github.com/ClickHouse/ClickHouse/pull/87631) ([Raúl Marín](https://github.com/Algunenano)). -* JOIN 最適化中の実行時ハッシュテーブル統計の再計算をスキップするようにしました(JOIN を含むすべてのクエリのパフォーマンスが向上します)。新しいプロファイルイベント `JoinOptimizeMicroseconds` および `QueryPlanOptimizeMicroseconds` を追加しました。 [#87683](https://github.com/ClickHouse/ClickHouse/pull/87683) ([Vladimir Cherkasov](https://github.com/vdimir))。 -* MergeTreeLazy リーダーでマークをキャッシュに保存できるようにし、直接 I/O を回避します。これにより、ORDER BY と小さな LIMIT を含むクエリのパフォーマンスが向上します。 [#87989](https://github.com/ClickHouse/ClickHouse/pull/87989) ([Nikita Taranov](https://github.com/nickitat))。 -* `is_deleted` 列を持つ `ReplacingMergeTree` テーブル上で `FINAL` 句を使用する SELECT クエリが、既存の 2 つの最適化における並列化の改善により、より高速に実行されるようになりました。1. 単一の `part` のみを持つテーブルパーティションに対する `do_not_merge_across_partitions_select_final` 最適化。2. その他の選択されたテーブル範囲を「交差する / 交差しない」に分割し、`FINAL` のマージ変換を通過させる必要があるのは交差する範囲のみとすること。[#88090](https://github.com/ClickHouse/ClickHouse/pull/88090)([Shankar Iyer](https://github.com/shankar-iyer))。 -* フェイルポイント未使用時のオーバーヘッドを削減しました(デバッグが有効でない場合に通るデフォルトのコードパス)。 [#88196](https://github.com/ClickHouse/ClickHouse/pull/88196) ([Raúl Marín](https://github.com/Algunenano)). -* `uuid` でフィルタする際に `system.tables` のフルスキャンを回避します(ログや ZooKeeper のパスから UUID しか取得できない場合に役立ちます)。 [#88379](https://github.com/ClickHouse/ClickHouse/pull/88379) ([Azat Khuzhin](https://github.com/azat)). -* 関数 `tokens`、`hasAllTokens`、`hasAnyTokens` のパフォーマンスを改善。[#88416](https://github.com/ClickHouse/ClickHouse/pull/88416) ([Anton Popov](https://github.com/CurtizJ)). -* 一部のケースにおける JOIN のパフォーマンスをわずかに向上させるため、`AddedColumns::appendFromBlock` をインライン化しました。 [#88455](https://github.com/ClickHouse/ClickHouse/pull/88455) ([Nikita Taranov](https://github.com/nickitat)). -* 複数の system テーブルに対してクエリを発行するのではなく `system.completions` を使用することで、クライアント側の補完がより高速かつ一貫性の高いものになります。 [#84694](https://github.com/ClickHouse/ClickHouse/pull/84694) ([|2ustam](https://github.com/RuS2m)). -* `dictionary_block_frontcoding_compression` という新しいテキストインデックスパラメータを追加し、辞書圧縮を制御できるようにしました。デフォルトでは有効になっており、`front-coding` 圧縮が使用されます。 [#87175](https://github.com/ClickHouse/ClickHouse/pull/87175) ([Elmi Ahmadov](https://github.com/ahmadov))。 -* `min_insert_block_size_rows_for_materialized_views` と `min_insert_block_size_bytes_for_materialized_views` の設定に応じて、マテリアライズドビューへ挿入する前にすべてのスレッドからのデータをまとめます。以前は、`parallel_view_processing` が有効な場合、特定のマテリアライズドビューに挿入する各スレッドが、それぞれ独立して挿入データをまとめていたため、生成されるパーツ数が多くなる可能性がありました。[#87280](https://github.com/ClickHouse/ClickHouse/pull/87280)([Antonio Andelic](https://github.com/antonio2368))。 -* 一時ファイル書き込み用のバッファサイズを制御するための設定 `temporary_files_buffer_size` を追加。* `LowCardinality` 列に対する(たとえば Grace ハッシュ結合で使用される)`scatter` 演算のメモリ使用量を最適化。 [#88237](https://github.com/ClickHouse/ClickHouse/pull/88237) ([Vladimir Cherkasov](https://github.com/vdimir)). -* 並列レプリカを用いたテキストインデックスからの直接読み取りをサポートしました。オブジェクトストレージ上のテキストインデックスの読み取り性能を改善しました。 [#88262](https://github.com/ClickHouse/ClickHouse/pull/88262) ([Anton Popov](https://github.com/CurtizJ)). -* Data Lakes カタログに登録されたテーブルを対象とするクエリでは、分散処理のために並列レプリカを使用します。 [#88273](https://github.com/ClickHouse/ClickHouse/pull/88273)([scanhex12](https://github.com/scanhex12))。 -* バックグラウンドマージアルゴリズムのチューニング用内部ヒューリスティック「to_remove_small_parts_at_right」は、マージ範囲スコアの計算前に実行されるようになりました。これ以前は、マージセレクタはまず広範囲のマージを選択し、その末尾部分をフィルタリングしていました。この変更により修正された問題: [#85374](https://github.com/ClickHouse/ClickHouse/issues/85374)。[#88736](https://github.com/ClickHouse/ClickHouse/pull/88736)([Mikhail Artemenko](https://github.com/Michicosun))。 +#### ビルド/テスト/パッケージングの改善 +* initdb 用 SQL スクリプトと TCP ポートの上書きを伴う Docker 上での ClickHouse 実行時に発生する Connection refused エラーを修正。[#88042](https://github.com/ClickHouse/ClickHouse/pull/88042) ([Grigorii](https://github.com/GSokol))。 +* ClickHouse の新しいプラットフォームとして e2k を実験的にサポート。[#90159](https://github.com/ClickHouse/ClickHouse/pull/90159) ([Ramil Sattarov](https://github.com/r-a-sattarov))。 +* CMake から残っていた `FindPackage` の使用箇所を削除。ビルドがシステムパッケージに依存しないようにする。[#89380](https://github.com/ClickHouse/ClickHouse/pull/89380) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* CMake 構成時のビルドでコンパイラキャッシュを使用(例: `protoc`)。[#89613](https://github.com/ClickHouse/ClickHouse/pull/89613) ([Konstantin Bogdanov](https://github.com/thevar1able))。 +* FreeBSD 13.4 の sysroot を使用。[#89617](https://github.com/ClickHouse/ClickHouse/pull/89617) ([Konstantin Bogdanov](https://github.com/thevar1able))。 + +### ClickHouse リリース 25.10、2025-10-31 {#2510} + +#### 後方互換性を損なう変更 + +* デフォルトの `schema_inference_make_columns_nullable` 設定を変更し、すべてを Nullable にするのではなく、Parquet/ORC/Arrow のメタデータに含まれるカラムが Nullable かどうかの情報を尊重するようにしました。テキストフォーマットについては変更ありません。 [#71499](https://github.com/ClickHouse/ClickHouse/pull/71499) ([Michael Kolupaev](https://github.com/al13n321))。 +* クエリ結果キャッシュは `log_comment` 設定を無視するようになったため、クエリで `log_comment` のみを変更しても、キャッシュミスを強制的に発生させることはなくなりました。`log_comment` を変化させることで、意図的にキャッシュをセグメント化していたユーザーが、少数ながら存在していた可能性があります。この変更によりその挙動が変わるため、後方互換性がありません。その目的には `query_cache_tag` 設定を使用してください。[#79878](https://github.com/ClickHouse/ClickHouse/pull/79878) ([filimonov](https://github.com/filimonov))。 +* 以前のバージョンでは、テーブル関数の名前が演算子の実装用関数と同じであるクエリで、フォーマットに一貫性がありませんでした。[#81601](https://github.com/ClickHouse/ClickHouse/issues/81601) をクローズします。[#81977](https://github.com/ClickHouse/ClickHouse/issues/81977) をクローズします。[#82834](https://github.com/ClickHouse/ClickHouse/issues/82834) をクローズします。[#82835](https://github.com/ClickHouse/ClickHouse/issues/82835) をクローズします。EXPLAIN SYNTAX クエリでは、常に演算子がフォーマットされるとは限らなくなりました。この新しい挙動は、構文を説明するという本来の目的をより正確に反映しています。`clickhouse-format`、`formatQuery` などは、クエリ内で関数形式で記述されている場合、その関数を演算子としてフォーマットしません。[#82825](https://github.com/ClickHouse/ClickHouse/pull/82825)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* `JOIN` キーで `Dynamic` 型を使用することを禁止しました。`Dynamic` 型の値が非 `Dynamic` 型と比較されると、予期しない結果になる可能性があります。`Dynamic` 列は、必要な型に明示的にキャストすることを推奨します。 [#86358](https://github.com/ClickHouse/ClickHouse/pull/86358) ([Pavel Kruglov](https://github.com/Avogar)). +* `storage_metadata_write_full_object_key` サーバーオプションはデフォルトでオンになっており、現時点ではオフに設定できません。これは後方互換性を維持する変更です。注意喚起のための情報です。この変更は 25.x リリースとのみ前方互換性があります。つまり、新しいリリースをロールバックする必要がある場合は、25.x 系の任意のリリースにのみダウングレードできます。 [#87335](https://github.com/ClickHouse/ClickHouse/pull/87335) ([Sema Checherinda](https://github.com/CheSema)). +* 挿入レートが低い場合に ZooKeeper 上に保存される znode を減らすため、`replicated_deduplication_window_seconds` を 1 週間から 1 時間に短縮しました。 [#87414](https://github.com/ClickHouse/ClickHouse/pull/87414) ([Sema Checherinda](https://github.com/CheSema)). +* 設定 `query_plan_use_new_logical_join_step` の名前を `query_plan_use_logical_join_step` に変更しました。 [#87679](https://github.com/ClickHouse/ClickHouse/pull/87679) ([Vladimir Cherkasov](https://github.com/vdimir)). +* 新しい構文により、テキストインデックスの `tokenizer` パラメータをより柔軟に指定できるようになりました。 [#87997](https://github.com/ClickHouse/ClickHouse/pull/87997) ([Elmi Ahmadov](https://github.com/ahmadov)). +* 既存の関数 `hasToken` との一貫性を高めるため、関数 `searchAny` と `searchAll` の名称をそれぞれ `hasAnyTokens` と `hasAllTokens` に変更しました。 [#88109](https://github.com/ClickHouse/ClickHouse/pull/88109) ([Robert Schulze](https://github.com/rschu1ze)). +* ファイルシステムキャッシュから `cache_hits_threshold` を削除しました。この機能は SLRU キャッシュポリシーを導入する前に外部コントリビューターによって追加されたものですが、現在は SLRU キャッシュポリシーがあるため、両方をサポートし続ける意味はありません。 [#88344](https://github.com/ClickHouse/ClickHouse/pull/88344) ([Kseniia Sumarokova](https://github.com/kssenii)). +* `min_free_disk_ratio_to_perform_insert` と `min_free_disk_bytes_to_perform_insert` 設定の動作に対して、2 つの細かな変更を行いました。- INSERT を拒否すべきかどうかを判断する際に、利用可能(available)バイト数ではなく未予約(unreserved)バイト数を使用するようにしました。バックグラウンドマージやミューテーションのための予約領域が、設定されたしきい値と比べて小さい場合にはあまり重要ではないかもしれませんが、こちらのほうがより正しいと考えられます。- これらの設定を system テーブルには適用しないようにしました。その理由は、`query_log` のようなテーブルを引き続き更新したいからです。これはデバッグに非常に役立ちます。system テーブルに書き込まれるデータは通常、実データと比べて小さいため、妥当な `min_free_disk_ratio_to_perform_insert` のしきい値であれば、かなり長い間処理を継続できるはずです。 [#88468](https://github.com/ClickHouse/ClickHouse/pull/88468) ([c-end](https://github.com/c-end))。 +* Keeper の内部レプリケーションの非同期モードを有効にします。Keeper は、これまでと同じ動作を維持しつつ、パフォーマンスが向上する可能性があります。23.9 より前のバージョンから更新する場合は、まず 23.9 以降に更新してから 25.10 以降に更新する必要があります。更新前に `keeper_server.coordination_settings.async_replication` を 0 に設定し、更新完了後に再度有効化することもできます。 [#88515](https://github.com/ClickHouse/ClickHouse/pull/88515) ([Antonio Andelic](https://github.com/antonio2368))。 +#### 新機能 + +* 負の `LIMIT` と `OFFSET` のサポートを追加。 [#28913](https://github.com/ClickHouse/ClickHouse/issues/28913) をクローズ。 [#88411](https://github.com/ClickHouse/ClickHouse/pull/88411) ([Nihal Z. Miaji](https://github.com/nihalzp))。 +* `Alias` エンジンは、別のテーブルへのプロキシを作成します。すべての読み取り・書き込み操作はターゲットテーブルに転送され、エイリアス自体はデータを保持せず、ターゲットテーブルへの参照のみを保持します。 [#87965](https://github.com/ClickHouse/ClickHouse/pull/87965) ([Kai Zhu](https://github.com/nauu)). +* 演算子 `IS NOT DISTINCT FROM` (`<=>`) のサポートを完全に実装しました。 [#88155](https://github.com/ClickHouse/ClickHouse/pull/88155) ([simonmichal](https://github.com/simonmichal)). +* `MergeTree` テーブル内の要件を満たすすべてのカラムに対して、統計情報を自動的に作成する機能を追加しました。作成する統計情報の種類をカンマ区切りで指定するテーブルレベルの設定 `auto_statistics_types` を追加しました(例: `auto_statistics_types = 'minmax, uniq, countmin'`)。[#87241](https://github.com/ClickHouse/ClickHouse/pull/87241)([Anton Popov](https://github.com/CurtizJ))。 +* テキスト用の新しいブルームフィルターインデックス `sparse_gram` を追加。[#79985](https://github.com/ClickHouse/ClickHouse/pull/79985)([scanhex12](https://github.com/scanhex12))。 +* 数値の基数変換を行う新しい関数 `conv` が追加され、現在は基数 `2-36` をサポートしています。 [#83058](https://github.com/ClickHouse/ClickHouse/pull/83058) ([hp](https://github.com/hp77-creator))。 +* `LIMIT BY ALL` 構文のサポートを追加しました。`GROUP BY ALL` や `ORDER BY ALL` と同様に、`LIMIT BY ALL` は SELECT 句内のすべての非集約式を自動的に展開し、それらを LIMIT BY のキーとして使用します。たとえば、`SELECT id, name, count(*) FROM table GROUP BY id LIMIT 1 BY ALL` は `SELECT id, name, count(*) FROM table GROUP BY id LIMIT 1 BY id, name` と同等です。この機能により、選択された非集約列すべてで LIMIT BY を行いたいが、それらを明示的に列挙したくない場合に、クエリを簡潔に記述できます。[#59152](https://github.com/ClickHouse/ClickHouse/issues/59152) をクローズしました。[#84079](https://github.com/ClickHouse/ClickHouse/pull/84079)([Surya Kant Ranjan](https://github.com/iit2009046))。 +* ClickHouse から Apache Paimon をクエリ可能にするサポートを追加しました。この統合により、ClickHouse ユーザーは Paimon のデータレイク ストレージに直接アクセスできるようになります。 [#84423](https://github.com/ClickHouse/ClickHouse/pull/84423) ([JIaQi](https://github.com/JiaQiTang98))。 +* `studentTTestOneSample` 集約関数を追加しました。 [#85436](https://github.com/ClickHouse/ClickHouse/pull/85436) ([Dylan](https://github.com/DylanBlakemore))。 +* 集約関数 `quantilePrometheusHistogram` は、ヒストグラムバケットの上限値と累積値を引数として受け取り、分位点が位置するバケットの下限値と上限値の間で線形補間を行います。従来型ヒストグラムに対する PromQL の `histogram_quantile` 関数と同様に動作します。 [#86294](https://github.com/ClickHouse/ClickHouse/pull/86294) ([Stephen Chi](https://github.com/stephchi0)). +* Delta Lake のメタデータファイル用の新しいシステムテーブル。 [#87263](https://github.com/ClickHouse/ClickHouse/pull/87263) ([scanhex12](https://github.com/scanhex12)). +* `ALTER TABLE REWRITE PARTS` を追加しました。これはテーブルのパーツをゼロから書き換え、新しい設定をすべて使用して再生成します(`use_const_adaptive_granularity` のように、新しいパーツに対してのみ適用されるものがあるため)。 [#87774](https://github.com/ClickHouse/ClickHouse/pull/87774) ([Azat Khuzhin](https://github.com/azat))。 +* `SYSTEM RECONNECT ZOOKEEPER` コマンドを追加し、ZooKeeper の切断と再接続を強制的に行えるようにしました([https://github.com/ClickHouse/ClickHouse/issues/87317](https://github.com/ClickHouse/ClickHouse/issues/87317))。[#87318](https://github.com/ClickHouse/ClickHouse/pull/87318)([Pradeep Chhetri](https://github.com/chhetripradeep))。 +* `max_named_collection_num_to_warn` と `max_named_collection_num_to_throw` を設定することで、名前付きコレクションの数を制限します。新しいメトリクス `NamedCollection` およびエラー `TOO_MANY_NAMED_COLLECTIONS` を追加しました。 [#87343](https://github.com/ClickHouse/ClickHouse/pull/87343) ([Pablo Marcos](https://github.com/pamarcos)). +* `startsWith` および `endsWith` 関数に、大文字小文字を区別しない最適化されたバリアントである `startsWithCaseInsensitive`、`endsWithCaseInsensitive`、`startsWithCaseInsensitiveUTF8`、`endsWithCaseInsensitiveUTF8` を追加しました。 [#87374](https://github.com/ClickHouse/ClickHouse/pull/87374) ([Guang Zhao](https://github.com/zheguang)). +* サーバー設定の "resources_and_workloads" セクションを通じて、SQL で `WORKLOAD` および `RESOURCE` 定義を指定できるようにしました。 [#87430](https://github.com/ClickHouse/ClickHouse/pull/87430) ([Sergei Trifonov](https://github.com/serxa)). +* パートをワイドパートとして作成するための最小レベルを指定できる新しいテーブル設定 `min_level_for_wide_part` を追加。 [#88179](https://github.com/ClickHouse/ClickHouse/pull/88179) ([Christoph Wurm](https://github.com/cwurm))。 +* Keeper クライアントに `cp`-`cpr` および `mv`-`mvr` コマンドの再帰版を追加しました。 [#88570](https://github.com/ClickHouse/ClickHouse/pull/88570) ([Mikhail Artemenko](https://github.com/Michicosun)). +* 挿入時にマテリアライズ対象から除外するスキップインデックスのリストを指定するセッション設定(`exclude_materialize_skip_indexes_on_insert`)を追加しました。マージ処理時にマテリアライズ対象から除外するスキップインデックスのリストを指定する MergeTree テーブル設定(`exclude_materialize_skip_indexes_on_merge`)を追加しました。 [#87252](https://github.com/ClickHouse/ClickHouse/pull/87252) ([George Larionov](https://github.com/george-larionov))。 +#### 実験的機能 +* ベクトルをビットスライス形式で格納する `QBit` データ型と、パラメータによって精度と速度のトレードオフを制御しながら近似ベクトル検索を可能にする `L2DistanceTransposed` 関数を実装しました。 [#87922](https://github.com/ClickHouse/ClickHouse/pull/87922) ([Raufs Dunamalijevs](https://github.com/rienath)). +* 関数 `searchAll` と `searchAny` は、テキスト列を含まないカラム上でも動作するようになりました。その場合、デフォルトのトークナイザが使用されます。 [#87722](https://github.com/ClickHouse/ClickHouse/pull/87722) ([Jimmy Aguilar Mena](https://github.com/Ergus)). + +#### パフォーマンス改善 + +* JOIN および ARRAY JOIN において、lazy columns replication を実装しました。一部の出力フォーマットでは、Sparse や Replicated のような特殊なカラム表現を完全なカラムに変換しないようにしました。これにより、メモリ内での不要なデータコピーを避けられます。 [#88752](https://github.com/ClickHouse/ClickHouse/pull/88752) ([Pavel Kruglov](https://github.com/Avogar)). +* MergeTree テーブルのトップレベルの String カラムに対して、圧縮効率を向上させ、サブカラムへの効率的なアクセスを可能にするオプションの `.size` サブカラムのシリアライゼーションを追加しました。シリアライゼーションのバージョン制御および空文字列に対する式の最適化のための新しい MergeTree 設定を導入しました。 [#82850](https://github.com/ClickHouse/ClickHouse/pull/82850) ([Amos Bird](https://github.com/amosbird))。 +* Iceberg に対する順序どおりの読み取りのサポート。 [#88454](https://github.com/ClickHouse/ClickHouse/pull/88454) ([scanhex12](https://github.com/scanhex12)). +* 実行時に右側サブツリーから Bloom フィルターを構築し、このフィルターを左側サブツリーのスキャンに渡すことで、一部の JOIN クエリの処理を高速化します。これは、`SELECT avg(o_totalprice) FROM orders, customer, nation WHERE c_custkey = o_custkey AND c_nationkey=n_nationkey AND n_name = 'FRANCE'` のようなクエリで有効な場合があります。 [#84772](https://github.com/ClickHouse/ClickHouse/pull/84772) ([Alexander Gololobov](https://github.com/davenger)). +* Query Condition Cache (QCC) の適用順序およびインデックス解析との連携をリファクタリングすることで、クエリのパフォーマンスを改善しました。QCC によるフィルタリングは、プライマリキーおよびスキップインデックスの解析より前に適用されるようになり、不要なインデックス計算が削減されます。インデックス解析は複数の範囲フィルタをサポートするよう拡張され、そのフィルタリング結果は QCC に書き戻されるようになりました。これにより、インデックス解析が実行時間の大部分を占めるクエリ、特にスキップインデックス(例: ベクターインデックスやインバーテッドインデックス)に依存するクエリが大幅に高速化されます。[#82380](https://github.com/ClickHouse/ClickHouse/pull/82380) ([Amos Bird](https://github.com/amosbird))。 +* 小規模クエリを高速化するための細かな最適化を多数実施。[#83096](https://github.com/ClickHouse/ClickHouse/pull/83096) ([Raúl Marín](https://github.com/Algunenano))。 +* ネイティブプロトコルでログとプロファイルイベントを圧縮します。100 レプリカ以上のクラスターでは、未圧縮のプロファイルイベントは 1~10 MB/秒に達し、インターネット接続が遅い場合はプログレスバーの動きが鈍くなります。これにより [#82533](https://github.com/ClickHouse/ClickHouse/issues/82533) が解決されました。[#83586](https://github.com/ClickHouse/ClickHouse/pull/83586)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 大文字小文字を区別する文字列検索(`WHERE URL LIKE '%google%'` のようなフィルタリング操作)のパフォーマンスを、[StringZilla](https://github.com/ashvardanian/StringZilla) ライブラリを使用し、利用可能な場合には SIMD CPU 命令も活用することで向上させました。[#84161](https://github.com/ClickHouse/ClickHouse/pull/84161)([Raúl Marín](https://github.com/Algunenano))。 +* テーブルに `SimpleAggregateFunction(anyLast)` 型のカラムがある場合に、`FINAL` を付けて AggregatingMergeTree テーブルから `SELECT` する際のメモリ割り当ておよびメモリコピーを削減しました。 [#84428](https://github.com/ClickHouse/ClickHouse/pull/84428) ([Duc Canh Le](https://github.com/canhld94)). +* `JOIN` 述語における論理和条件(OR)のプッシュダウンロジックを実装します。例として、TPC-H Q7 で 2 つのテーブル n1 と n2 に対する条件 `(n1.n_name = 'FRANCE' AND n2.n_name = 'GERMANY') OR (n1.n_name = 'GERMANY' AND n2.n_name = 'FRANCE')` がある場合、それぞれのテーブルに対して個別の部分フィルタを抽出します。具体的には、n1 には `n1.n_name = 'FRANCE' OR n1.n_name = 'GERMANY'` を、n2 には `n2.n_name = 'GERMANY' OR n2.n_name = 'FRANCE'` を適用します。[#84735](https://github.com/ClickHouse/ClickHouse/pull/84735)([Yarik Briukhovetskyi](https://github.com/yariks5s))。 +* 新しいデフォルト設定 `optimize_rewrite_like_perfect_affix` により、接頭辞または接尾辞を持つ `LIKE` のパフォーマンスを向上させます。 [#85920](https://github.com/ClickHouse/ClickHouse/pull/85920) ([Guang Zhao](https://github.com/zheguang)). +* 複数の文字列/数値カラムで `GROUP BY` を行う際に、巨大なシリアライズキーによって発生していたパフォーマンス低下を修正。これは [#83884](https://github.com/ClickHouse/ClickHouse/pull/83884) のフォローアップです。[#85924](https://github.com/ClickHouse/ClickHouse/pull/85924)([李扬](https://github.com/taiyang-li))。 +* `joined_block_split_single_row` という新しい設定を追加し、多数の一致が発生するハッシュ結合におけるメモリ使用量を削減します。これにより、左テーブルの1行に対する一致結果についてもチャンクに分割できるようになり、左テーブルの1行が右テーブルの数千〜数百万行と一致するようなケースで特に有用です。以前は、すべての一致行を一度にメモリ上にマテリアライズする必要がありました。この変更によりピーク時のメモリ使用量は削減されますが、CPU使用量が増加する可能性があります。 [#87913](https://github.com/ClickHouse/ClickHouse/pull/87913) ([Vladimir Cherkasov](https://github.com/vdimir))。 +* SharedMutex を改善し、多数の同時実行クエリ時のパフォーマンスを向上。 [#87491](https://github.com/ClickHouse/ClickHouse/pull/87491) ([Raúl Marín](https://github.com/Algunenano)). +* 主に出現頻度の低いトークンで構成されるドキュメントにおけるテキストインデックス構築の性能を改善しました。 [#87546](https://github.com/ClickHouse/ClickHouse/pull/87546) ([Anton Popov](https://github.com/CurtizJ)). +* Field デストラクタの一般的なケースを高速化し、大量の小さなクエリに対するパフォーマンスを改善しました。 [#87631](https://github.com/ClickHouse/ClickHouse/pull/87631) ([Raúl Marín](https://github.com/Algunenano)). +* JOIN の最適化中にランタイムのハッシュテーブル統計情報の再計算をスキップするようにしました(JOIN を含むすべてのクエリのパフォーマンスが向上します)。新しいプロファイルイベント `JoinOptimizeMicroseconds` と `QueryPlanOptimizeMicroseconds` を追加しました。[#87683](https://github.com/ClickHouse/ClickHouse/pull/87683) ([Vladimir Cherkasov](https://github.com/vdimir))。 +* MergeTreeLazy リーダーでマークをキャッシュに保存し、ダイレクト I/O を回避できるようにしました。これにより、ORDER BY と小さな LIMIT を指定したクエリのパフォーマンスが向上します。 [#87989](https://github.com/ClickHouse/ClickHouse/pull/87989) ([Nikita Taranov](https://github.com/nickitat)). +* `is_deleted` 列を持つ `ReplacingMergeTree` テーブルに対する `FINAL` 句付きの SELECT クエリが、既存の 2 つの最適化による並列化の改善により、これまでより高速に実行されるようになりました。1. 単一の `part` しか持たないパーティションに対して適用される `do_not_merge_across_partitions_select_final` 最適化。2. テーブル内のその他の選択レンジを `intersecting / non-intersecting` に分割し、`intersecting` なレンジだけが FINAL のマージ変換処理を通過するようにしたこと。[#88090](https://github.com/ClickHouse/ClickHouse/pull/88090) ([Shankar Iyer](https://github.com/shankar-iyer)). +* デバッグが無効な場合のデフォルトコードパスにおいて、fail points を使用しないことによる影響を軽減しました。 [#88196](https://github.com/ClickHouse/ClickHouse/pull/88196) ([Raúl Marín](https://github.com/Algunenano)). +* `uuid` でフィルタした `system.tables` に対するフルスキャンを回避(ログや ZooKeeper のパスから UUID だけが分かっている場合に有用)。 [#88379](https://github.com/ClickHouse/ClickHouse/pull/88379) ([Azat Khuzhin](https://github.com/azat)). +* 関数 `tokens`、`hasAllTokens`、`hasAnyTokens` の性能を改善しました。 [#88416](https://github.com/ClickHouse/ClickHouse/pull/88416) ([Anton Popov](https://github.com/CurtizJ)). +* 一部のケースにおいて JOIN のパフォーマンスをわずかに向上させるために、`AddedColumns::appendFromBlock` をインライン展開しました。 [#88455](https://github.com/ClickHouse/ClickHouse/pull/88455) ([Nikita Taranov](https://github.com/nickitat)). +* クライアントのオートコンプリート機能は、複数のシステムテーブルへのクエリを発行するのではなく `system.completions` を使用することで、より高速かつ一貫性の高い動作になります。 [#84694](https://github.com/ClickHouse/ClickHouse/pull/84694) ([|2ustam](https://github.com/RuS2m))。 +* 辞書圧縮を制御するための新しいテキストインデックスパラメータ `dictionary_block_frontcoding_compression` を追加しました。デフォルトでは有効で、`front-coding` 圧縮が使用されます。 [#87175](https://github.com/ClickHouse/ClickHouse/pull/87175) ([Elmi Ahmadov](https://github.com/ahmadov))。 +* 設定 `min_insert_block_size_rows_for_materialized_views` および `min_insert_block_size_bytes_for_materialized_views` に応じて、すべてのスレッドからのデータをマテリアライズドビューに挿入する前にまとめてから挿入するように変更しました。以前は、`parallel_view_processing` が有効な場合、特定のマテリアライズドビューに挿入する各スレッドがそれぞれ独立してデータをまとめており、その結果、生成されるパーツの数が多くなる可能性がありました。 [#87280](https://github.com/ClickHouse/ClickHouse/pull/87280) ([Antonio Andelic](https://github.com/antonio2368)). +* 一時ファイルの書き込みで使用されるバッファサイズを制御するための設定 `temporary_files_buffer_size` を追加。* `LowCardinality` 列に対する `scatter` 操作(例えば grace hash join で使用される)のメモリ消費を最適化。 [#88237](https://github.com/ClickHouse/ClickHouse/pull/88237) ([Vladimir Cherkasov](https://github.com/vdimir)). +* 並列レプリカ対応のテキストインデックスからの直接読み取りをサポートしました。オブジェクトストレージ上のテキストインデックスの読み取り性能を改善しました。 [#88262](https://github.com/ClickHouse/ClickHouse/pull/88262) ([Anton Popov](https://github.com/CurtizJ)). +* Data Lake カタログ内のテーブルを対象とするクエリでは、分散処理のために並列レプリカが利用されます。 [#88273](https://github.com/ClickHouse/ClickHouse/pull/88273) ([scanhex12](https://github.com/scanhex12)). +* "to_remove_small_parts_at_right" という名前のバックグラウンドマージのアルゴリズムをチューニングするための内部ヒューリスティックが、マージ範囲スコアの計算より前に実行されるようになりました。それ以前は、マージセレクタは幅の広いマージを選択してから、その末尾部分をフィルタリングしていました。修正: [#85374](https://github.com/ClickHouse/ClickHouse/issues/85374)。[#88736](https://github.com/ClickHouse/ClickHouse/pull/88736) ([Mikhail Artemenko](https://github.com/Michicosun))。 #### 改善 -* これにより、関数 `generateSerialID` では系列名に非定数引数を指定できるようになりました。 [#83750](https://github.com/ClickHouse/ClickHouse/issues/83750) をクローズ。 [#88270](https://github.com/ClickHouse/ClickHouse/pull/88270)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 新しい系列の開始値をカスタマイズできるようにするオプションの `start_value` パラメータを `generateSerialID` 関数に追加しました。 [#88085](https://github.com/ClickHouse/ClickHouse/pull/88085) ([Manuel](https://github.com/raimannma)). -* `clickhouse-format` に `--semicolons_inline` オプションを追加し、クエリをフォーマットする際にセミコロンが新しい行ではなく最後の行の末尾に配置されるようにしました。 [#88018](https://github.com/ClickHouse/ClickHouse/pull/88018) ([Jan Rada](https://github.com/ZelvaMan)). -* Keeper で構成が上書きされている場合でも、サーバーレベルのスロットリングを設定できるようにしました。 [#73964](https://github.com/ClickHouse/ClickHouse/issues/73964) をクローズ。 [#74066](https://github.com/ClickHouse/ClickHouse/pull/74066) ([JIaQi](https://github.com/JiaQiTang98))。 -* `mannWhitneyUTest` は、両方のサンプルが同一の値のみを含む場合に例外をスローしなくなりました。SciPy と整合する有効な結果を返すようになりました。これにより次の Issue が解決されました: [#79814](https://github.com/ClickHouse/ClickHouse/issues/79814)。[#80009](https://github.com/ClickHouse/ClickHouse/pull/80009) ([DeanNeaht](https://github.com/DeanNeaht))。 -* メタデータトランザクションがコミットされると、ディスクオブジェクトストレージの書き換えトランザクションは、既存のリモート BLOB を削除します。 [#81787](https://github.com/ClickHouse/ClickHouse/pull/81787) ([Sema Checherinda](https://github.com/CheSema)). -* 最適化の前後で結果型の `LowCardinality` が異なる場合の冗長な等価比較式に対する最適化パスを修正しました。 [#82651](https://github.com/ClickHouse/ClickHouse/pull/82651) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* HTTP クライアントが `Expect: 100-continue` に加えてヘッダー `X-ClickHouse-100-Continue: defer` を設定すると、ClickHouse はクォータ検証が完了して通過するまでクライアントに `100 Continue` レスポンスを送信しません。これにより、最終的に破棄されるリクエストボディを送信することで発生するネットワーク帯域幅の無駄を防ぎます。これは、クエリ自体は URL のクエリ文字列で送信し、データはリクエストボディで送信するような INSERT クエリにおいて有効です。リクエストボディ全体を送信せずにリクエストを中止すると、HTTP/1.1 でのコネクション再利用はできなくなりますが、新しいコネクションを確立する際に発生する追加のレイテンシは、大量データを扱う INSERT 全体の所要時間と比較すると、通常は無視できる程度です。 [#84304](https://github.com/ClickHouse/ClickHouse/pull/84304) ([c-end](https://github.com/c-end))。 -* S3 ストレージを使用する DATABASE ENGINE = Backup 使用時には、ログ内の S3 認証情報をマスクします。[#85336](https://github.com/ClickHouse/ClickHouse/pull/85336) ([Kenny Sun](https://github.com/hwabis))。 -* 相関サブクエリの入力サブプランのマテリアライズを遅延させることで、クエリプランの最適化をその入力サブプランからも利用できるようにする。[#79890](https://github.com/ClickHouse/ClickHouse/issues/79890) の一部。 [#85455](https://github.com/ClickHouse/ClickHouse/pull/85455)([Dmitry Novik](https://github.com/novikd))。 -* SYSTEM DROP DATABASE REPLICA に対する変更: - データベースと一緒にレプリカを削除する場合、またはレプリカ全体を削除する場合: データベース内の各テーブルに対するレプリカも同様に削除されます - `WITH TABLES` が指定されている場合、各ストレージのレプリカを削除します - それ以外の場合、ロジックは変更されず、データベース上のレプリカのみを削除します - Keeper パス付きでデータベースのレプリカを削除する場合: - `WITH TABLES` が指定されている場合: - データベースを Atomic として復元します - Keeper 内のステートメントから RMT テーブルを復元します - データベースを削除します(復元されたテーブルも同時に削除されます) - それ以外の場合、指定された Keeper パス上のレプリカのみを削除します。 [#85637](https://github.com/ClickHouse/ClickHouse/pull/85637) ([Tuan Pham Anh](https://github.com/tuanpach)). -* `materialize` 関数を含む場合の TTL のフォーマットの不整合を修正しました。[#82828](https://github.com/ClickHouse/ClickHouse/issues/82828) をクローズしました。[#85749](https://github.com/ClickHouse/ClickHouse/pull/85749)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* Iceberg テーブルの状態はストレージ オブジェクト内には保持されなくなりました。これにより、ClickHouse における Iceberg を同時実行クエリでも利用できるようになります。 [#86062](https://github.com/ClickHouse/ClickHouse/pull/86062) ([Daniil Ivanik](https://github.com/divanik)). -* `use_persistent_processing_nodes = 1` の場合の processing node と同様に、S3Queue の ordered mode における bucket lock を永続モードにしました。テストに Keeper のフォールトインジェクションを追加しました。[#86628](https://github.com/ClickHouse/ClickHouse/pull/86628) ([Kseniia Sumarokova](https://github.com/kssenii))。 -* フォーマット名にタイプミスがある場合、ユーザーにヒントを表示します。[#86761](https://github.com/ClickHouse/ClickHouse/issues/86761) をクローズします。[#87092](https://github.com/ClickHouse/ClickHouse/pull/87092)([flynn](https://github.com/ucasfl))。 -* リモートレプリカは、プロジェクションが存在しない場合、インデックス解析をスキップします。 [#87096](https://github.com/ClickHouse/ClickHouse/pull/87096) ([zoomxi](https://github.com/zoomxi)). +* 関数 `generateSerialID` で、シリーズ名として非定数の引数を指定できるようになりました。Issue [#83750](https://github.com/ClickHouse/ClickHouse/issues/83750) をクローズしました。[#88270](https://github.com/ClickHouse/ClickHouse/pull/88270)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 新しい系列の開始値を指定できるよう、`generateSerialID` 関数にオプションの `start_value` パラメータを追加しました。 [#88085](https://github.com/ClickHouse/ClickHouse/pull/88085) ([Manuel](https://github.com/raimannma)). +* `clickhouse-format` に `--semicolons_inline` オプションを追加し、セミコロンが改行されず最終行に配置されるようにクエリを整形できるようにしました。 [#88018](https://github.com/ClickHouse/ClickHouse/pull/88018) ([Jan Rada](https://github.com/ZelvaMan)). +* Keeper で設定が上書きされている場合でも、サーバーレベルのスロットリングを設定できるようにしました。[#73964](https://github.com/ClickHouse/ClickHouse/issues/73964) を解決。[#74066](https://github.com/ClickHouse/ClickHouse/pull/74066)([JIaQi](https://github.com/JiaQiTang98))。 +* `mannWhitneyUTest` は、両方のサンプルが同一の値のみを含む場合でも例外をスローしなくなりました。SciPy と一貫した有効な結果を返すようになりました。これにより Issue: [#79814](https://github.com/ClickHouse/ClickHouse/issues/79814) がクローズされました。[#80009](https://github.com/ClickHouse/ClickHouse/pull/80009) ([DeanNeaht](https://github.com/DeanNeaht))。 +* ディスクオブジェクトストレージの Rewrite トランザクションは、メタデータトランザクションがコミットされた場合、以前のリモート BLOB を削除するようになりました。 [#81787](https://github.com/ClickHouse/ClickHouse/pull/81787) ([Sema Checherinda](https://github.com/CheSema)). +* 最適化の前後で結果型の `LowCardinality` が異なる場合でも、冗長な等値式に対する最適化処理が正しく動作するよう修正しました。 [#82651](https://github.com/ClickHouse/ClickHouse/pull/82651) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* HTTP クライアントが `Expect: 100-continue` に加えて `X-ClickHouse-100-Continue: defer` ヘッダーを設定すると、ClickHouse はクォータ検証に合格するまでクライアントに `100 Continue` レスポンスを送信しないため、最終的に破棄されるリクエストボディを送信することによるネットワーク帯域の無駄を防げます。これは、クエリを URL のクエリ文字列で送信し、データをリクエストボディで送信する INSERT クエリの場合に関係します。ボディ全体を送信せずにリクエストを中止すると、HTTP/1.1 でのコネクション再利用はできなくなりますが、新しいコネクションを開くことで生じる追加レイテンシは、大量データの INSERT における全体の処理時間と比べると通常は無視できる程度です。[#84304](https://github.com/ClickHouse/ClickHouse/pull/84304)([c-end](https://github.com/c-end))。 +* S3 ストレージを使用する `DATABASE ENGINE = Backup` の利用時に、ログに出力される S3 の認証情報をマスクするようにしました。 [#85336](https://github.com/ClickHouse/ClickHouse/pull/85336) ([Kenny Sun](https://github.com/hwabis)). +* クエリプランの最適化が相関サブクエリの入力サブプランからも見えるように、そのマテリアライズを遅延させました。[#79890](https://github.com/ClickHouse/ClickHouse/issues/79890) の一部。[#85455](https://github.com/ClickHouse/ClickHouse/pull/85455)([Dmitry Novik](https://github.com/novikd))。 +* SYSTEM DROP DATABASE REPLICA の変更: - データベースを指定してドロップする場合、またはレプリカ全体をドロップする場合: データベース内の各テーブルのレプリカも併せてドロップされます - `WITH TABLES` が指定されている場合、各ストレージのレプリカをドロップします - それ以外の場合、ロジックは変更されず、データベースレプリカのみをドロップします - Keeper パスを指定してデータベースレプリカをドロップする場合: - `WITH TABLES` が指定されている場合: - データベースを Atomic として復元します - Keeper 内のステートメントから RMT テーブルを復元します - データベースをドロップします (復元されたテーブルも同時にドロップされます) - それ以外の場合は、指定された Keeper パス上のレプリカのみをドロップします。 [#85637](https://github.com/ClickHouse/ClickHouse/pull/85637) ([Tuan Pham Anh](https://github.com/tuanpach)). +* TTL に `materialize` 関数が含まれている場合のフォーマットの不整合を修正しました。[#82828](https://github.com/ClickHouse/ClickHouse/issues/82828) をクローズしました。[#85749](https://github.com/ClickHouse/ClickHouse/pull/85749)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* Iceberg テーブルの状態は、今後はストレージオブジェクト内には保存されません。これにより、ClickHouse における Iceberg は同時実行クエリ環境でも利用可能になる想定です。 [#86062](https://github.com/ClickHouse/ClickHouse/pull/86062) ([Daniil Ivanik](https://github.com/divanik)). +* `use_persistent_processing_nodes = 1` の場合の処理ノードと同様に、S3Queue の ordered モードにおける bucket lock を永続モードとします。テストに Keeper のフォルトインジェクションを追加します。 [#86628](https://github.com/ClickHouse/ClickHouse/pull/86628) ([Kseniia Sumarokova](https://github.com/kssenii)). +* ユーザーがフォーマット名をタイプミスした場合にヒントを表示するようにしました。 [#86761](https://github.com/ClickHouse/ClickHouse/issues/86761) をクローズ。 [#87092](https://github.com/ClickHouse/ClickHouse/pull/87092)([flynn](https://github.com/ucasfl))。 +* プロジェクションが存在しない場合、リモートレプリカはインデックスの解析をスキップします。 [#87096](https://github.com/ClickHouse/ClickHouse/pull/87096) ([zoomxi](https://github.com/zoomxi)). * ytsaurus テーブルに対して UTF-8 エンコーディングを無効化できるようにしました。 [#87150](https://github.com/ClickHouse/ClickHouse/pull/87150) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). -* デフォルトで `s3_slow_all_threads_after_retryable_error` を無効にしました。 [#87198](https://github.com/ClickHouse/ClickHouse/pull/87198) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). -* テーブル関数 `arrowflight` を `arrowFlight` にリネームしました。 [#87249](https://github.com/ClickHouse/ClickHouse/pull/87249) ([Vitaly Baranov](https://github.com/vitlibar)). -* `clickhouse-benchmark` を更新し、CLI フラグで `_` の代わりに `-` も使用できるようにしました。 [#87251](https://github.com/ClickHouse/ClickHouse/pull/87251) ([Ahmed Gouda](https://github.com/0xgouda)). -* シグナル処理における `system.crash_log` へのフラッシュを同期的に行うようにしました。 [#87253](https://github.com/ClickHouse/ClickHouse/pull/87253) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). -* `ORDER BY` 句を持たないトップレベルの `SELECT` クエリに `ORDER BY rand()` を挿入する設定 `inject_random_order_for_select_without_order_by` を追加しました。 [#87261](https://github.com/ClickHouse/ClickHouse/pull/87261) ([Rui Zhang](https://github.com/zhangruiddn)). -* `joinGet` のエラーメッセージを改善し、`join_keys` の数が `right_table_keys` の数と同じではないことを正しく示すようにしました。 [#87279](https://github.com/ClickHouse/ClickHouse/pull/87279) ([Isak Ellmer](https://github.com/spinojara)). -* 書き込みトランザクション中に任意の Keeper ノードの stat を確認できる機能を追加しました。これにより、ABA 問題の検出に役立ちます。 [#87282](https://github.com/ClickHouse/ClickHouse/pull/87282) ([Mikhail Artemenko](https://github.com/Michicosun)). -* 高負荷な ytsaurus リクエストを heavy プロキシにリダイレクトするようにしました。 [#87342](https://github.com/ClickHouse/ClickHouse/pull/87342) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). -* ディスクトランザクション由来のメタデータについて、あらゆるワークロードで発生し得る unlink/rename/removeRecursive/removeDirectory などの操作のロールバックとハードリンク数を正しく扱えるように修正し、インターフェイスをより汎用的にして他のメタストアでも再利用しやすいよう簡素化しました。 [#87358](https://github.com/ClickHouse/ClickHouse/pull/87358) ([Mikhail Artemenko](https://github.com/Michicosun)). -* Keeper に対する `TCP_NODELAY` を無効化できる `keeper_server.tcp_nodelay` 設定パラメータを追加しました。 [#87363](https://github.com/ClickHouse/ClickHouse/pull/87363) (Copilot)。 -* `clickhouse-benchmarks` で `--connection` をサポートしました。これは `clickhouse-client` がサポートしているものと同様で、クライアントの `config.xml`/`config.yaml` 内の `connections_credentials` パス配下に事前定義された接続を指定することで、コマンドライン引数で明示的にユーザー名/パスワードを指定する必要がなくなります。`clickhouse-benchmark` に `--accept-invalid-certificate` のサポートを追加しました。 [#87370](https://github.com/ClickHouse/ClickHouse/pull/87370) ([Azat Khuzhin](https://github.com/azat)). -* `max_insert_threads` の設定が Iceberg テーブルにも適用されるようになりました。 [#87407](https://github.com/ClickHouse/ClickHouse/pull/87407) ([alesapin](https://github.com/alesapin))。 -* `PrometheusMetricsWriter` にヒストグラムおよびディメンションメトリクスを追加しました。これにより、`PrometheusRequestHandler` ハンドラーで必要なメトリクスをすべてカバーでき、クラウド環境で信頼性が高く低オーバーヘッドなメトリクス収集に利用できるようになります。 [#87521](https://github.com/ClickHouse/ClickHouse/pull/87521) ([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 -* 関数 `hasToken` は、空のトークンに対しては以前は例外をスローしていましたが、現在は一致ゼロ件を返すようになりました。 [#87564](https://github.com/ClickHouse/ClickHouse/pull/87564) ([Jimmy Aguilar Mena](https://github.com/Ergus))。 -* `Array` および `Map`(`mapKeys` と `mapValues`)の値に対するテキストインデックスのサポートを追加しました。サポートされる関数は `mapContainsKey` と `has` です。 [#87602](https://github.com/ClickHouse/ClickHouse/pull/87602) ([Elmi Ahmadov](https://github.com/ahmadov)). -* 期限切れとなったグローバル ZooKeeper セッションの数を示す、新しい `ZooKeeperSessionExpired` メトリクスを追加しました。 [#87613](https://github.com/ClickHouse/ClickHouse/pull/87613) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). -* バックアップ専用の設定(例:backup_slow_all_threads_after_retryable_s3_error)を持つ S3 storage client を使用して、バックアップ先へのサーバーサイド(ネイティブ)コピーを行います。s3_slow_all_threads_after_retryable_error を廃止します。 [#87660](https://github.com/ClickHouse/ClickHouse/pull/87660) ([Julia Kartseva](https://github.com/jkartseva)). -* 実験的機能 `make_distributed_plan` を用いたクエリプランのシリアル化中に、設定 `max_joined_block_size_rows` および `max_joined_block_size_bytes` が誤って処理されていた問題を修正しました。[#87675](https://github.com/ClickHouse/ClickHouse/pull/87675) ([Vladimir Cherkasov](https://github.com/vdimir)). -* 設定 `enable_http_compression` は、現在デフォルトになっています。これは、クライアントが HTTP 圧縮を受け入れる場合、サーバーがそれを使用することを意味します。ただし、この変更にはいくつかのデメリットがあります。クライアントは `bzip2` のような重い圧縮方式を要求でき、これは妥当ではなく、サーバーのリソース消費量を増加させます(ただし、これは大きな結果セットが転送される場合にのみ顕在化します)。クライアントは `gzip` を要求することもできますが、これはそれほど悪くはないものの、`zstd` と比較すると最適ではありません。[#71591](https://github.com/ClickHouse/ClickHouse/issues/71591) をクローズしました。 [#87703](https://github.com/ClickHouse/ClickHouse/pull/87703)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* `system.server_settings` に新しいエントリ `keeper_hosts` を追加し、ClickHouse が接続可能な [Zoo]Keeper ホストの一覧を公開しました。 [#87718](https://github.com/ClickHouse/ClickHouse/pull/87718) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 -* 履歴調査を容易にするために、システム ダッシュボードに `from` と `to` の値を追加しました。 [#87823](https://github.com/ClickHouse/ClickHouse/pull/87823) ([Mikhail f. Shiryaev](https://github.com/Felixoid)). -* Iceberg の SELECT におけるパフォーマンス追跡用の情報をさらに追加しました。 [#87903](https://github.com/ClickHouse/ClickHouse/pull/87903) ([Daniil Ivanik](https://github.com/divanik)). -* ファイルシステムキャッシュの改善:キャッシュ領域を同時に予約するスレッド間で、キャッシュの優先度イテレータを再利用するようにしました。 [#87914](https://github.com/ClickHouse/ClickHouse/pull/87914) ([Kseniia Sumarokova](https://github.com/kssenii)). -* `Keeper` 向けのリクエストサイズを制限する機能を追加しました(`max_request_size` 設定。`ZooKeeper` の `jute.maxbuffer` と同等で、後方互換性のためデフォルトは OFF。今後のリリースで設定される予定です)。 [#87952](https://github.com/ClickHouse/ClickHouse/pull/87952) ([Azat Khuzhin](https://github.com/azat)). -* `clickhouse-benchmark` で、デフォルトではエラーメッセージにスタックトレースを含めないようにしました。 [#87954](https://github.com/ClickHouse/ClickHouse/pull/87954) ([Ahmed Gouda](https://github.com/0xgouda)). -* マークがキャッシュにある場合は、スレッドプールによる非同期マーク読み込み(`load_marks_asynchronously=1`)は利用しないでください(スレッドプールが逼迫していると、マークがすでにキャッシュに存在していてもクエリに余分なペナルティが発生してしまうため)。[#87967](https://github.com/ClickHouse/ClickHouse/pull/87967)([Azat Khuzhin](https://github.com/azat))。 -* Ytsaurus: 一部の列のみを指定してテーブル/テーブル関数/ディクショナリを作成できるようにしました。 [#87982](https://github.com/ClickHouse/ClickHouse/pull/87982) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). -* 今後は `system.zookeeper_connection_log` がデフォルトで有効になり、Keeper セッションに関する情報を取得するために使用できます。[#88011](https://github.com/ClickHouse/ClickHouse/pull/88011)([János Benjamin Antal](https://github.com/antaljanosbenjamin))。 -* 重複した外部テーブルが渡される場合の TCP と HTTP の動作を一貫させました。HTTP では、一時テーブルを同じものを複数回渡すことが可能です。[#88032](https://github.com/ClickHouse/ClickHouse/pull/88032) ([Sema Checherinda](https://github.com/CheSema))。 -* Arrow/ORC/Parquet の読み込み用に使用していたカスタム MemoryPool を削除しました。[#84082](https://github.com/ClickHouse/ClickHouse/pull/84082) 以降はすべてのアロケーションを追跡するようになったため、このコンポーネントは不要になりました。[#88035](https://github.com/ClickHouse/ClickHouse/pull/88035)([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 +* `s3_slow_all_threads_after_retryable_error` をデフォルトで無効にしました。 [#87198](https://github.com/ClickHouse/ClickHouse/pull/87198) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). +* テーブル関数 `arrowflight` の名前を `arrowFlight` に変更しました。 [#87249](https://github.com/ClickHouse/ClickHouse/pull/87249) ([Vitaly Baranov](https://github.com/vitlibar)). +* `clickhouse-benchmark` を更新し、CLI フラグで `_` の代わりに `-` を使用できるようにしました。 [#87251](https://github.com/ClickHouse/ClickHouse/pull/87251) ([Ahmed Gouda](https://github.com/0xgouda)). +* シグナルハンドリング時の `system.crash_log` へのフラッシュを同期処理にしました。[#87253](https://github.com/ClickHouse/ClickHouse/pull/87253) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). +* `inject_random_order_for_select_without_order_by` 設定を追加しました。この設定は、`ORDER BY` 句が指定されていないトップレベルの `SELECT` クエリに `ORDER BY rand()` を自動的に挿入します。 [#87261](https://github.com/ClickHouse/ClickHouse/pull/87261) ([Rui Zhang](https://github.com/zhangruiddn))。 +* `joinGet` のエラーメッセージを改善し、`join_keys` の数が `right_table_keys` の数と一致していないことを正しく示すようにしました。 [#87279](https://github.com/ClickHouse/ClickHouse/pull/87279) ([Isak Ellmer](https://github.com/spinojara)). +* 書き込みトランザクション中に任意の Keeper ノードの stat を確認できるようにしました。これにより、ABA 問題の検出に役立ちます。 [#87282](https://github.com/ClickHouse/ClickHouse/pull/87282) ([Mikhail Artemenko](https://github.com/Michicosun)). +* 重い ytsaurus リクエストを heavy プロキシにリダイレクトするようにしました。 [#87342](https://github.com/ClickHouse/ClickHouse/pull/87342) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). +* ディスクトランザクション由来のメタデータに対して、あらゆるワークロードにおける `unlink`/`rename`/`removeRecursive`/`removeDirectory`/その他の操作のロールバックおよびハードリンク数を修正し、インターフェイスを簡素化してより汎用的なものとすることで、他のメタストアでも再利用できるようにしました。 [#87358](https://github.com/ClickHouse/ClickHouse/pull/87358) ([Mikhail Artemenko](https://github.com/Michicosun)). +* Keeper で `TCP_NODELAY` を無効化できる `keeper_server.tcp_nodelay` 設定パラメータを追加しました。 [#87363](https://github.com/ClickHouse/ClickHouse/pull/87363) (Copilot)。 +* `clickhouse-benchmarks` で `--connection` をサポートしました。これは `clickhouse-client` でサポートされているものと同じで、クライアントの `config.xml`/`config.yaml` の `connections_credentials` パス配下に事前定義した接続を指定することで、コマンドライン引数で明示的にユーザー名およびパスワードを指定する必要がなくなります。`clickhouse-benchmark` に `--accept-invalid-certificate` のサポートを追加しました。 [#87370](https://github.com/ClickHouse/ClickHouse/pull/87370) ([Azat Khuzhin](https://github.com/azat)). +* `max_insert_threads` の設定が Iceberg テーブルでも有効になりました。 [#87407](https://github.com/ClickHouse/ClickHouse/pull/87407) ([alesapin](https://github.com/alesapin)). +* `PrometheusMetricsWriter` にヒストグラムおよび次元メトリクスを追加しました。これにより、`PrometheusRequestHandler` で必要なメトリクスが一通り揃い、クラウド環境における信頼性が高く低オーバーヘッドなメトリクス収集に利用できるようになります。[#87521](https://github.com/ClickHouse/ClickHouse/pull/87521)([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 +* 関数 `hasToken` は、空のトークンを指定した場合、以前は例外をスローしていましたが、現在はマッチ件数 0 を返すようになりました。 [#87564](https://github.com/ClickHouse/ClickHouse/pull/87564) ([Jimmy Aguilar Mena](https://github.com/Ergus))。 +* `Array` および `Map`(`mapKeys` と `mapValues`)の値に対するテキストインデックス対応を追加しました。サポートされる関数は `mapContainsKey` と `has` です。 [#87602](https://github.com/ClickHouse/ClickHouse/pull/87602) ([Elmi Ahmadov](https://github.com/ahmadov)). +* 有効期限が切れたグローバル ZooKeeper セッションの数を示す新しい `ZooKeeperSessionExpired` メトリクスを追加しました。 [#87613](https://github.com/ClickHouse/ClickHouse/pull/87613) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). +* バックアップ先へのサーバーサイド(ネイティブ)コピーには、バックアップ専用の設定(たとえば backup_slow_all_threads_after_retryable_s3_error)を持つ S3 ストレージクライアントを使用します。s3_slow_all_threads_after_retryable_error を非推奨にします。 [#87660](https://github.com/ClickHouse/ClickHouse/pull/87660) ([Julia Kartseva](https://github.com/jkartseva)). +* 実験的機能である `make_distributed_plan` を用いたクエリプランのシリアライズ時に、設定 `max_joined_block_size_rows` および `max_joined_block_size_bytes` が誤って処理されていた問題を修正しました。 [#87675](https://github.com/ClickHouse/ClickHouse/pull/87675) ([Vladimir Cherkasov](https://github.com/vdimir)). +* 設定 `enable_http_compression` はデフォルトで有効になりました。これは、クライアントが HTTP 圧縮を受け入れる場合、サーバーがそれを使用することを意味します。ただし、この変更にはいくつかのデメリットがあります。クライアントは `bzip2` のような重い圧縮方式をリクエストすることができ、これは現実的ではなく、サーバーのリソース消費を増大させます(ただし、これは大きな結果が転送される場合にのみ顕在化します)。クライアントは `gzip` をリクエストすることもできます。これはそれほど悪くはありませんが、`zstd` と比較すると最適ではありません。[#71591](https://github.com/ClickHouse/ClickHouse/issues/71591) をクローズします。[#87703](https://github.com/ClickHouse/ClickHouse/pull/87703)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* `system.server_settings` に新しいエントリ `keeper_hosts` を追加し、ClickHouse が接続可能な [Zoo]Keeper ホストの一覧を参照できるようにしました。[#87718](https://github.com/ClickHouse/ClickHouse/pull/87718)([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 +* 過去データの調査を容易にするため、システムダッシュボードに `from` と `to` の値を追加しました。 [#87823](https://github.com/ClickHouse/ClickHouse/pull/87823) ([Mikhail f. Shiryaev](https://github.com/Felixoid)). +* Iceberg の SELECT クエリでのパフォーマンス追跡用の情報を追加。[#87903](https://github.com/ClickHouse/ClickHouse/pull/87903) ([Daniil Ivanik](https://github.com/divanik)). +* ファイルシステムキャッシュの改善: キャッシュ内の領域を並行して確保するスレッド間で、キャッシュ優先度イテレータを再利用するようにしました。 [#87914](https://github.com/ClickHouse/ClickHouse/pull/87914) ([Kseniia Sumarokova](https://github.com/kssenii)). +* `Keeper` 向けのリクエストサイズを制限できるようにしました(`max_request_size` 設定。`ZooKeeper` の `jute.maxbuffer` と同等で、後方互換性のためデフォルトは OFF のままですが、今後のリリースで設定される予定です)。 [#87952](https://github.com/ClickHouse/ClickHouse/pull/87952) ([Azat Khuzhin](https://github.com/azat)). +* `clickhouse-benchmark` がデフォルトでエラーメッセージにスタックトレースを含めないように変更しました。 [#87954](https://github.com/ClickHouse/ClickHouse/pull/87954) ([Ahmed Gouda](https://github.com/0xgouda)). +* マークがキャッシュ内にある場合には、スレッドプールによる非同期マーク読み込み(`load_marks_asynchronously=1`)を利用しないでください(プールに負荷がかかっていると、マークがすでにキャッシュに存在していても、クエリがそのためのペナルティを支払うことになるため)。 [#87967](https://github.com/ClickHouse/ClickHouse/pull/87967) ([Azat Khuzhin](https://github.com/azat))。 +* Ytsaurus: カラムのサブセットのみを含むテーブル/テーブル関数/ディクショナリを作成できるようにしました。 [#87982](https://github.com/ClickHouse/ClickHouse/pull/87982) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). +* 今後は、`system.zookeeper_connection_log` がデフォルトで有効になり、Keeper セッションに関する情報の取得に利用できます。 [#88011](https://github.com/ClickHouse/ClickHouse/pull/88011) ([János Benjamin Antal](https://github.com/antaljanosbenjamin))。 +* 重複した外部テーブルが渡された場合の TCP と HTTP の動作を一貫させました。HTTP では、一時テーブルを複数回渡すことができます。 [#88032](https://github.com/ClickHouse/ClickHouse/pull/88032) ([Sema Checherinda](https://github.com/CheSema))。 +* Arrow/ORC/Parquet 読み取り用のカスタム MemoryPool を削除しました。[#84082](https://github.com/ClickHouse/ClickHouse/pull/84082) 以降は、いずれにせよすべての割り当てを追跡するようになったため、このコンポーネントは不要になったようです。[#88035](https://github.com/ClickHouse/ClickHouse/pull/88035)([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 * 引数を指定せずに `Replicated` データベースを作成できるようにしました。 [#88044](https://github.com/ClickHouse/ClickHouse/pull/88044) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). -* `clickhouse-keeper-client`: clickhouse-keeper の TLS ポートへの接続をサポートする機能を追加しました。フラグ名は clickhouse-client と同じもののままにしました。 [#88065](https://github.com/ClickHouse/ClickHouse/pull/88065) ([Pradeep Chhetri](https://github.com/chhetripradeep)). -* バックグラウンドマージがメモリ制限を超過したために拒否された回数を追跡する新しいプロファイルイベントを追加しました。 [#88084](https://github.com/ClickHouse/ClickHouse/pull/88084) ([Grant Holly](https://github.com/grantholly-clickhouse)). -* CREATE/ALTER TABLE ステートメントのカラムのデフォルト式検証用アナライザーを有効にします。 [#88087](https://github.com/ClickHouse/ClickHouse/pull/88087) ([Max Justus Spransy](https://github.com/maxjustus))。 -* 内部のクエリプランニングを改善:`CROSS JOIN` に `JoinStepLogical` を使用。[#88151](https://github.com/ClickHouse/ClickHouse/pull/88151)([Vladimir Cherkasov](https://github.com/vdimir))。 -* `hasAnyTokens` および `hasAllTokens` 関数に、それぞれ `hasAnyToken` と `hasAllToken` のエイリアスを追加しました。 [#88162](https://github.com/ClickHouse/ClickHouse/pull/88162) ([George Larionov](https://github.com/george-larionov)). -* グローバルなサンプリングプロファイラをデフォルトで有効化しました(つまり、クエリに関連しないサーバースレッドも対象となります)。すべてのスレッドについて、CPU 時間および実時間のそれぞれ 10 秒ごとにスタックトレースを収集します。 [#88209](https://github.com/ClickHouse/ClickHouse/pull/88209) ([Alexander Tokmakov](https://github.com/tavplubix))。 -* コピーおよびコンテナー作成機能で発生していた「Content-Length」問題の修正を取り込むように Azure SDK を更新。 [#88278](https://github.com/ClickHouse/ClickHouse/pull/88278) ([Smita Kulkarni](https://github.com/SmitaRKulkarni)). -* MySQL との互換性を確保するため、`lag` 関数を大文字小文字を区別しないようにしました。 [#88322](https://github.com/ClickHouse/ClickHouse/pull/88322) ([Lonny Kapelushnik](https://github.com/lonnylot)). -* `clickhouse-local` を `clickhouse-server` ディレクトリから起動できるようにしました。以前のバージョンでは、`Cannot parse UUID: .` というエラーが発生していました。現在では、サーバーを起動することなく `clickhouse-local` を起動し、サーバーのデータベースを操作できます。 [#88383](https://github.com/ClickHouse/ClickHouse/pull/88383) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* `keeper_server.coordination_settings.check_node_acl_on_remove` の設定を追加しました。この設定を有効にすると、各ノードを削除する前に、そのノード自身と親ノードの両方の ACL が検証されます。無効にした場合は、親ノードの ACL のみが検証されます。 [#88513](https://github.com/ClickHouse/ClickHouse/pull/88513) ([Antonio Andelic](https://github.com/antonio2368)). -* `Vertical` フォーマットを使用する場合、`JSON` カラムが整形表示されるようになりました。[#81794](https://github.com/ClickHouse/ClickHouse/issues/81794) をクローズしました。[#88524](https://github.com/ClickHouse/ClickHouse/pull/88524)([Frank Rosner](https://github.com/FRosner))。 -* `clickhouse-client` のファイル(例:クエリ履歴)は、ホームディレクトリ直下ではなく、[XDG Base Directories](https://specifications.freedesktop.org/basedir-spec/latest/index.html) 仕様で定義されている場所に保存されるようになりました。`~/.clickhouse-client-history` がすでに存在する場合は、引き続きそれが使用されます。[#88538](https://github.com/ClickHouse/ClickHouse/pull/88538)([Konstantin Bogdanov](https://github.com/thevar1able))。 +* `clickhouse-keeper-client`: clickhouse-keeper の TLS ポートへの接続をサポートし、フラグ名は `clickhouse-client` と同一に保ちました。 [#88065](https://github.com/ClickHouse/ClickHouse/pull/88065) ([Pradeep Chhetri](https://github.com/chhetripradeep)). +* メモリ制限を超過したためにバックグラウンドマージが拒否された回数を追跡する新しいプロファイルイベントを追加しました。 [#88084](https://github.com/ClickHouse/ClickHouse/pull/88084) ([Grant Holly](https://github.com/grantholly-clickhouse))。 +* CREATE/ALTER TABLE の列デフォルト式を検証するアナライザーを有効化。 [#88087](https://github.com/ClickHouse/ClickHouse/pull/88087) ([Max Justus Spransy](https://github.com/maxjustus)). +* 内部クエリプランの改善: `CROSS JOIN` に JoinStepLogical を使用。 [#88151](https://github.com/ClickHouse/ClickHouse/pull/88151) ([Vladimir Cherkasov](https://github.com/vdimir)). +* `hasAnyTokens` 関数のエイリアスとして `hasAnyToken` を、`hasAllTokens` 関数のエイリアスとして `hasAllToken` を追加しました。 [#88162](https://github.com/ClickHouse/ClickHouse/pull/88162) ([George Larionov](https://github.com/george-larionov))。 +* グローバルなサンプリングプロファイラをデフォルトで有効化しました(つまり、クエリに関連しないサーバースレッドも対象とする)。すべてのスレッドについて、CPU 時間および実時間の両方で 10 秒ごとにスタックトレースを収集します。 [#88209](https://github.com/ClickHouse/ClickHouse/pull/88209) ([Alexander Tokmakov](https://github.com/tavplubix))。 +* コピーおよびコンテナー作成機能で発生していた 'Content-Length' の問題への修正を取り込むよう、Azure SDK を更新。 [#88278](https://github.com/ClickHouse/ClickHouse/pull/88278) ([Smita Kulkarni](https://github.com/SmitaRKulkarni)). +* 関数 `lag` を MySQL との互換性向上のために大文字小文字を区別しないようにしました。 [#88322](https://github.com/ClickHouse/ClickHouse/pull/88322) ([Lonny Kapelushnik](https://github.com/lonnylot)). +* `clickhouse-server` ディレクトリから `clickhouse-local` を起動できるようにしました。以前のバージョンでは、`Cannot parse UUID: .` というエラーが発生していました。これにより、サーバーを起動せずに `clickhouse-local` を起動し、サーバーのデータベースを操作できるようになりました。 [#88383](https://github.com/ClickHouse/ClickHouse/pull/88383) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* `keeper_server.coordination_settings.check_node_acl_on_remove` 設定を追加しました。有効になっている場合、各ノード削除の前に、そのノード自身と親ノードの両方の ACL が検証されます。無効になっている場合は、親ノードの ACL のみが検証されます。 [#88513](https://github.com/ClickHouse/ClickHouse/pull/88513) ([Antonio Andelic](https://github.com/antonio2368)). +* `Vertical` フォーマット使用時に `JSON` カラムが整形表示されるようになりました。[#81794](https://github.com/ClickHouse/ClickHouse/issues/81794) をクローズ。[#88524](https://github.com/ClickHouse/ClickHouse/pull/88524)([Frank Rosner](https://github.com/FRosner))。 +* `clickhouse-client` のファイル(例: クエリ履歴)をホームディレクトリのルートではなく、[XDG Base Directories](https://specifications.freedesktop.org/basedir-spec/latest/index.html) 仕様で規定された場所に保存するようにしました。`~/.clickhouse-client-history` がすでに存在する場合は、引き続きそちらが使用されます。[#88538](https://github.com/ClickHouse/ClickHouse/pull/88538) ([Konstantin Bogdanov](https://github.com/thevar1able))。 * `GLOBAL IN` によるメモリリークを修正しました([https://github.com/ClickHouse/ClickHouse/issues/88615](https://github.com/ClickHouse/ClickHouse/issues/88615))。[#88617](https://github.com/ClickHouse/ClickHouse/pull/88617)([pranavmehta94](https://github.com/pranavmehta94))。 -* `hasAny` / `hasAllTokens` が文字列入力も受け付けられるようにオーバーロードを追加しました。 [#88679](https://github.com/ClickHouse/ClickHouse/pull/88679) ([George Larionov](https://github.com/george-larionov)). -* ブート時に自動起動できるよう、`clickhouse-keeper` の postinstall スクリプトに有効化手順を追加しました。[#88746](https://github.com/ClickHouse/ClickHouse/pull/88746) ([YenchangChan](https://github.com/YenchangChan))。 -* Web UI では、キー入力のたびではなく、貼り付け時にのみ認証情報をチェックするようにしました。これにより、誤って設定された LDAP サーバーで発生する問題を回避できます。これにより [#85777](https://github.com/ClickHouse/ClickHouse/issues/85777) がクローズされました。[#88769](https://github.com/ClickHouse/ClickHouse/pull/88769)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 制約違反が発生した場合の例外メッセージの長さを制限するようにしました。以前のバージョンでは、非常に長い文字列を挿入すると、同様に非常に長い例外メッセージが生成され、そのまま `query_log` に書き込まれてしまうことがありました。[#87032](https://github.com/ClickHouse/ClickHouse/issues/87032) をクローズします。[#88801](https://github.com/ClickHouse/ClickHouse/pull/88801)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* テーブル作成時に ArrowFlight サーバーからデータセットの構造を取得する処理を修正。 [#87542](https://github.com/ClickHouse/ClickHouse/pull/87542) ([Vitaly Baranov](https://github.com/vitlibar)). - - - - - -#### バグ修正(公式安定版リリースにおけるユーザー可視の不具合) - -* クライアントプロトコルのエラーを引き起こしていた GeoParquet を修正。 [#84020](https://github.com/ClickHouse/ClickHouse/pull/84020) ([Michael Kolupaev](https://github.com/al13n321)). -* イニシエーターノード上のサブクエリ内で、shardNum() のようなホスト依存の関数が正しく解決されない問題を修正しました。 [#84409](https://github.com/ClickHouse/ClickHouse/pull/84409) ([Eduard Karacharov](https://github.com/korowa)). -* `parseDateTime64BestEffort`、`change{Year,Month,Day}`、`makeDateTime64` など、さまざまな日付・時刻関連関数における、エポック前の日付時刻値の小数秒部分の不正な扱いを修正しました。これまでは、秒に対して小数秒部分を加算すべきところを減算していました。たとえば、`parseDateTime64BestEffort('1969-01-01 00:00:00.468')` は、本来の `1969-01-01 00:00:00.468` ではなく `1968-12-31 23:59:59.532` を返していました。 [#85396](https://github.com/ClickHouse/ClickHouse/pull/85396) ([xiaohuanlin](https://github.com/xiaohuanlin)). -* 同じ ALTER 文の中でカラムの状態が変更された場合に ALTER COLUMN IF EXISTS コマンドが失敗していた問題を修正しました。DROP COLUMN IF EXISTS、MODIFY COLUMN IF EXISTS、COMMENT COLUMN IF EXISTS、RENAME COLUMN IF EXISTS といったコマンドは、同じ文中の前のコマンドでカラムが削除された場合でも、正しく処理できるようになりました。 [#86046](https://github.com/ClickHouse/ClickHouse/pull/86046) ([xiaohuanlin](https://github.com/xiaohuanlin)). -* サポート対象外の日付に対する Date/DateTime/DateTime64 型の推論処理を修正しました。 [#86184](https://github.com/ClickHouse/ClickHouse/pull/86184) ([Pavel Kruglov](https://github.com/Avogar)). -* `AggregateFunction(quantileDD)` カラムにユーザーが送信した一部の有効なデータが書き込まれた場合に、マージ処理が無限再帰に陥ってクラッシュする問題を修正しました。 [#86560](https://github.com/ClickHouse/ClickHouse/pull/86560) ([Raphaël Thériault](https://github.com/raphael-theriault-swi)). +* hasAny/hasAllTokens に文字列入力を受け付けるオーバーロードを追加しました。 [#88679](https://github.com/ClickHouse/ClickHouse/pull/88679) ([George Larionov](https://github.com/george-larionov)). +* `clickhouse-keeper` がブート時に自動起動するように、postinstall スクリプトにステップを追加。 [#88746](https://github.com/ClickHouse/ClickHouse/pull/88746) ([YenchangChan](https://github.com/YenchangChan)). +* Web UI では、すべてのキー入力のたびにではなく、貼り付け時にのみ認証情報を検証するようにしました。これにより、誤構成された LDAP サーバーによる問題を回避できます。これにより [#85777](https://github.com/ClickHouse/ClickHouse/issues/85777) がクローズされました。[#88769](https://github.com/ClickHouse/ClickHouse/pull/88769)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 制約違反が発生した場合の例外メッセージの長さを制限するようにしました。以前のバージョンでは、非常に長い文字列が挿入されたときに、同様に非常に長い例外メッセージが生成され、それが `query_log` に書き込まれてしまうことがありました。この変更により [#87032](https://github.com/ClickHouse/ClickHouse/issues/87032) がクローズされました。[#88801](https://github.com/ClickHouse/ClickHouse/pull/88801)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* テーブル作成時に ArrowFlight サーバーからデータセット構造を取得する処理を修正。 [#87542](https://github.com/ClickHouse/ClickHouse/pull/87542) ([Vitaly Baranov](https://github.com/vitlibar)). + +#### バグ修正(公式の安定版リリースでユーザーに影響する不具合) + +* クライアントプロトコルエラーの原因となっていた GeoParquet を修正。 [#84020](https://github.com/ClickHouse/ClickHouse/pull/84020) ([Michael Kolupaev](https://github.com/al13n321)). +* イニシエーターノード上のサブクエリ内で、`shardNum()` などのホスト依存関数の解決を修正しました。 [#84409](https://github.com/ClickHouse/ClickHouse/pull/84409) ([Eduard Karacharov](https://github.com/korowa)). +* `parseDateTime64BestEffort`、`change{Year,Month,Day}`、`makeDateTime64` などの各種日時関連関数において、エポック以前の日付で小数秒を含む値を誤って処理してしまう不具合を修正しました。以前は、秒に小数部分を加算すべきところで減算していました。たとえば、`parseDateTime64BestEffort('1969-01-01 00:00:00.468')` は、本来 `1969-01-01 00:00:00.468` を返すべきところ、`1968-12-31 23:59:59.532` を返していました。 [#85396](https://github.com/ClickHouse/ClickHouse/pull/85396) ([xiaohuanlin](https://github.com/xiaohuanlin))。 +* 同一の ALTER ステートメント内でカラムの状態が変更される場合に、ALTER COLUMN IF EXISTS コマンドが失敗する問題を修正しました。DROP COLUMN IF EXISTS、MODIFY COLUMN IF EXISTS、COMMENT COLUMN IF EXISTS、RENAME COLUMN IF EXISTS などのコマンドは、同一ステートメント内の前のコマンドでカラムが削除されているケースを正しく処理するようになりました。 [#86046](https://github.com/ClickHouse/ClickHouse/pull/86046) ([xiaohuanlin](https://github.com/xiaohuanlin)). +* サポート対象範囲外の日付に対する Date/DateTime/DateTime64 型の推論を修正しました。 [#86184](https://github.com/ClickHouse/ClickHouse/pull/86184) ([Pavel Kruglov](https://github.com/Avogar)). +* 一部の有効なユーザー送信データが `AggregateFunction(quantileDD)` カラムに含まれていると、マージ処理中に無限再帰が発生してクラッシュする問題を修正します。 [#86560](https://github.com/ClickHouse/ClickHouse/pull/86560) ([Raphaël Thériault](https://github.com/raphael-theriault-swi))。 * `cluster` テーブル関数で作成されたテーブルで JSON/Dynamic 型をサポートしました。 [#86821](https://github.com/ClickHouse/ClickHouse/pull/86821) ([Pavel Kruglov](https://github.com/Avogar)). -* CTE 内で計算される関数の結果がクエリ内で非決定的になる問題を修正。 [#86967](https://github.com/ClickHouse/ClickHouse/pull/86967) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* 主キー列に対する pointInPolygon を用いた EXPLAIN で発生する LOGICAL_ERROR を修正。[#86971](https://github.com/ClickHouse/ClickHouse/pull/86971) ([Michael Kolupaev](https://github.com/al13n321)). -* 名前にパーセントエンコードされたシーケンスを含むデータレイクテーブルを修正しました。 [#86626](https://github.com/ClickHouse/ClickHouse/issues/86626) をクローズしました。 [#87020](https://github.com/ClickHouse/ClickHouse/pull/87020) ([Anton Ivashkin](https://github.com/ianton-ru)). -* `optimize_functions_to_subcolumns` を使用した `OUTER JOIN` において、NULL を許容するカラムに対する `IS NULL` の誤った動作を修正し、[#78625](https://github.com/ClickHouse/ClickHouse/issues/78625) をクローズ。 [#87058](https://github.com/ClickHouse/ClickHouse/pull/87058) ([Vladimir Cherkasov](https://github.com/vdimir))。 -* `max_temporary_data_on_disk_size` 制限の追跡における一時データ解放時の誤った計上を修正し、[#87118](https://github.com/ClickHouse/ClickHouse/issues/87118) をクローズしました。 [#87140](https://github.com/ClickHouse/ClickHouse/pull/87140) ([JIaQi](https://github.com/JiaQiTang98)). -* 関数 checkHeaders は、渡されたヘッダーを正しく検証し、禁止されているヘッダーを拒否するようになりました。原著者: Michael Anastasakis (@michael-anastasakis)。 [#87172](https://github.com/ClickHouse/ClickHouse/pull/87172)([Raúl Marín](https://github.com/Algunenano))。 -* すべての数値型に対して `toDate` と `toDate32` が同一の動作をするようにしました。int16 型からのキャスト時に発生していた Date32 のアンダーフロー検査を修正しました。[#87176](https://github.com/ClickHouse/ClickHouse/pull/87176) ([Pervakov Grigorii](https://github.com/GrigoryPervakov))。 -* 特に LEFT または INNER JOIN の後に RIGHT JOIN が続く、複数の JOIN を含むクエリに対する parallel replicas における論理エラーを修正。 [#87178](https://github.com/ClickHouse/ClickHouse/pull/87178) ([Igor Nikonov](https://github.com/devcrafter)). -* スキーマ推論キャッシュで設定 `input_format_try_infer_variants` を考慮するようにしました。 [#87180](https://github.com/ClickHouse/ClickHouse/pull/87180) ([Pavel Kruglov](https://github.com/Avogar)). -* pathStartsWith がプレフィックス配下のパスにのみマッチするようにしました。 [#87181](https://github.com/ClickHouse/ClickHouse/pull/87181) ([Raúl Marín](https://github.com/Algunenano)). -* `_row_number` 仮想カラムおよび Iceberg の positioned delete に関する論理エラーを修正しました。 [#87220](https://github.com/ClickHouse/ClickHouse/pull/87220) ([Michael Kolupaev](https://github.com/al13n321)). -* const ブロックと非 const ブロックが混在していることが原因で、`JOIN` において発生する「Too large size passed to allocator」`LOGICAL_ERROR` を修正しました。 [#87231](https://github.com/ClickHouse/ClickHouse/pull/87231) ([Azat Khuzhin](https://github.com/azat))。 -* 別の `MergeTree` テーブルを読み取るサブクエリを使用する軽量更新を修正。 [#87285](https://github.com/ClickHouse/ClickHouse/pull/87285) ([Anton Popov](https://github.com/CurtizJ)). -* 行ポリシーが存在する場合に動作していなかった move-to-prewhere 最適化を修正しました。[#85118](https://github.com/ClickHouse/ClickHouse/issues/85118) の継続対応です。[#69777](https://github.com/ClickHouse/ClickHouse/issues/69777) をクローズしました。[#83748](https://github.com/ClickHouse/ClickHouse/issues/83748) をクローズしました。[#87303](https://github.com/ClickHouse/ClickHouse/pull/87303)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 -* デフォルト式を持つもののデータパーツに存在しないカラムへのパッチ適用を修正しました。 [#87347](https://github.com/ClickHouse/ClickHouse/pull/87347) ([Anton Popov](https://github.com/CurtizJ)). -* MergeTree テーブルで重複したパーティションフィールド名を使用すると発生していたセグメンテーションフォルトを修正しました。 [#87365](https://github.com/ClickHouse/ClickHouse/pull/87365) ([xiaohuanlin](https://github.com/xiaohuanlin)). -* EmbeddedRocksDB のアップグレード処理を修正しました。 [#87392](https://github.com/ClickHouse/ClickHouse/pull/87392) ([Raúl Marín](https://github.com/Algunenano))。 -* テキストインデックスをオブジェクトストレージから直接読み取る処理を修正しました。 [#87399](https://github.com/ClickHouse/ClickHouse/pull/87399) ([Anton Popov](https://github.com/CurtizJ)). -* 存在しないエンジンに対する権限が作成されないようにしました。 [#87419](https://github.com/ClickHouse/ClickHouse/pull/87419) ([Jitendra](https://github.com/jitendra1411)). -* `s3_plain_rewritable` については、`not found` エラーだけを無視するようにしました(それ以外のエラーを無視すると、さまざまな問題につながる可能性があります)。 [#87426](https://github.com/ClickHouse/ClickHouse/pull/87426) ([Azat Khuzhin](https://github.com/azat)). -* YTSaurus ソースと *range_hashed レイアウトを使用するディクショナリの不具合を修正しました。 [#87490](https://github.com/ClickHouse/ClickHouse/pull/87490) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). -* 空のタプル配列の作成を修正。 [#87520](https://github.com/ClickHouse/ClickHouse/pull/87520) ([Pavel Kruglov](https://github.com/Avogar)). -* 一時テーブル作成時に不正なカラムを検出するようにしました。 [#87524](https://github.com/ClickHouse/ClickHouse/pull/87524) ([Pavel Kruglov](https://github.com/Avogar)). -* format ヘッダーに hive パーティション列を含めないようにしました。 [#87515](https://github.com/ClickHouse/ClickHouse/issues/87515) を修正。 [#87528](https://github.com/ClickHouse/ClickHouse/pull/87528)([Arthur Passos](https://github.com/arthurpassos))。 -* テキストフォーマット使用時の DeltaLake における format からの読み取り準備処理を修正。 [#87529](https://github.com/ClickHouse/ClickHouse/pull/87529) ([Pavel Kruglov](https://github.com/Avogar)). -* SELECT および INSERT に対する Buffer テーブルのアクセス検証を修正。[#87545](https://github.com/ClickHouse/ClickHouse/pull/87545)([pufit](https://github.com/pufit))。 -* S3 テーブルに対する data skipping インデックスの作成を禁止しました。 [#87554](https://github.com/ClickHouse/ClickHouse/pull/87554) ([Bharat Nallan](https://github.com/bharatnc)). -* async logging(10時間で約100GiB規模の大きなドリフトが生じ得る)および text_log(ほぼ同程度のドリフトが生じ得る)における tracked memory のリークを防止。 [#87584](https://github.com/ClickHouse/ClickHouse/pull/87584) ([Azat Khuzhin](https://github.com/azat)). -* 非同期で削除されたビューまたはマテリアライズドビューについて、バックグラウンドクリーンアップが完了する前にサーバーが再起動されると、そのビューの SELECT 設定によってグローバルなサーバー設定が上書きされてしまう可能性があるバグを修正しました。 [#87603](https://github.com/ClickHouse/ClickHouse/pull/87603) ([Alexander Tokmakov](https://github.com/tavplubix)). -* メモリ過負荷に関する警告を算出する際、可能であればユーザースペースのページキャッシュのバイト数を除外します。 [#87610](https://github.com/ClickHouse/ClickHouse/pull/87610) ([Bharat Nallan](https://github.com/bharatnc)). -* CSV デシリアライズ時に型の順序が誤っていると `LOGICAL_ERROR` が発生していたバグを修正しました。 [#87622](https://github.com/ClickHouse/ClickHouse/pull/87622) ([Yarik Briukhovetskyi](https://github.com/yariks5s))。 -* 実行型辞書に対する `command_read_timeout` の誤った処理を修正しました。 [#87627](https://github.com/ClickHouse/ClickHouse/pull/87627) ([Azat Khuzhin](https://github.com/azat)). -* 新しいアナライザー使用時に、WHERE 句で置換された列をフィルタリングする際の SELECT * REPLACE の誤った動作を修正しました。 [#87630](https://github.com/ClickHouse/ClickHouse/pull/87630) ([xiaohuanlin](https://github.com/xiaohuanlin)). -* `Distributed` 上で `Merge` を使用した場合の二段階の集約を修正しました。 [#87687](https://github.com/ClickHouse/ClickHouse/pull/87687) ([c-end](https://github.com/c-end))。 -* `right row list` が使用されていない場合の HashJoin アルゴリズムにおける出力ブロックの生成を修正します。[#87401](https://github.com/ClickHouse/ClickHouse/issues/87401) を解決します。 [#87699](https://github.com/ClickHouse/ClickHouse/pull/87699) ([Dmitry Novik](https://github.com/novikd))。 -* インデックス解析の適用後に読み取るデータが存在しない場合、並列レプリカの読み取りモードが誤って選択されてしまう可能性がありました。これにより [#87653](https://github.com/ClickHouse/ClickHouse/issues/87653) をクローズ。 [#87700](https://github.com/ClickHouse/ClickHouse/pull/87700) ([zoomxi](https://github.com/zoomxi)). -* Glue における `timestamp` / `timestamptz` 列の処理を修正。[#87733](https://github.com/ClickHouse/ClickHouse/pull/87733) ([Andrey Zvonov](https://github.com/zvonand)). +* クエリ内で CTE で計算される関数の結果が非決定的になる不具合を修正。 [#86967](https://github.com/ClickHouse/ClickHouse/pull/86967) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* 主キー列に対する pointInPolygon を用いた EXPLAIN で発生する LOGICAL_ERROR を修正。 [#86971](https://github.com/ClickHouse/ClickHouse/pull/86971) ([Michael Kolupaev](https://github.com/al13n321)). +* 名前にパーセントエンコードされたシーケンスを含むデータレイクテーブルを修正。[#86626](https://github.com/ClickHouse/ClickHouse/issues/86626) をクローズ。[#87020](https://github.com/ClickHouse/ClickHouse/pull/87020)([Anton Ivashkin](https://github.com/ianton-ru))。 +* `optimize_functions_to_subcolumns` を使用した `OUTER JOIN` における Nullable カラムでの `IS NULL` の誤った動作を修正し、[#78625](https://github.com/ClickHouse/ClickHouse/issues/78625) をクローズしました。 [#87058](https://github.com/ClickHouse/ClickHouse/pull/87058)([Vladimir Cherkasov](https://github.com/vdimir))。 +* `max_temporary_data_on_disk_size` 制限の追跡において、一時データの解放を誤って計上していた問題を修正しました。[#87118](https://github.com/ClickHouse/ClickHouse/issues/87118) をクローズしました。[#87140](https://github.com/ClickHouse/ClickHouse/pull/87140)([JIaQi](https://github.com/JiaQiTang98))。 +* 関数 `checkHeaders` は、提供されたヘッダーを適切に検証し、禁止されているヘッダーを拒否するようになりました。元の著者: Michael Anastasakis (@michael-anastasakis)。[#87172](https://github.com/ClickHouse/ClickHouse/pull/87172)([Raúl Marín](https://github.com/Algunenano))。 +* すべての数値型に対して `toDate` と `toDate32` が同じ動作をするようにしました。int16 からのキャスト時における Date32 のアンダーフローの検査を修正しました。 [#87176](https://github.com/ClickHouse/ClickHouse/pull/87176) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +* 複数の JOIN を含むクエリで、特に LEFT/INNER JOIN の後に RIGHT JOIN が続く場合に、parallel replicas で発生していた論理エラーを修正しました。 [#87178](https://github.com/ClickHouse/ClickHouse/pull/87178) ([Igor Nikonov](https://github.com/devcrafter)). +* スキーマ推論キャッシュで `input_format_try_infer_variants` 設定を考慮するようにしました。 [#87180](https://github.com/ClickHouse/ClickHouse/pull/87180) ([Pavel Kruglov](https://github.com/Avogar)). +* `pathStartsWith` がプレフィックス直下のパスにのみマッチするように変更しました。 [#87181](https://github.com/ClickHouse/ClickHouse/pull/87181) ([Raúl Marín](https://github.com/Algunenano)). +* `_row_number` 仮想カラムと Iceberg の位置指定削除における論理エラーを修正しました。 [#87220](https://github.com/ClickHouse/ClickHouse/pull/87220) ([Michael Kolupaev](https://github.com/al13n321))。 +* const ブロックと非 const ブロックが混在していたことが原因で `JOIN` で発生していた「Too large size passed to allocator」`LOGICAL_ERROR` を修正。 [#87231](https://github.com/ClickHouse/ClickHouse/pull/87231) ([Azat Khuzhin](https://github.com/azat)). +* 他の `MergeTree` テーブルを読み取るサブクエリを伴う軽量更新を修正しました。 [#87285](https://github.com/ClickHouse/ClickHouse/pull/87285) ([Anton Popov](https://github.com/CurtizJ)). +* 行ポリシーが存在する場合に機能していなかった move-to-prewhere 最適化を修正しました。[#85118](https://github.com/ClickHouse/ClickHouse/issues/85118) の後続対応です。[#69777](https://github.com/ClickHouse/ClickHouse/issues/69777) をクローズします。[#83748](https://github.com/ClickHouse/ClickHouse/issues/83748) をクローズします。[#87303](https://github.com/ClickHouse/ClickHouse/pull/87303)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 +* データパーツ内に存在しない、デフォルト式を持つ列へのパッチ適用の問題を修正しました。 [#87347](https://github.com/ClickHouse/ClickHouse/pull/87347) ([Anton Popov](https://github.com/CurtizJ)). +* MergeTree テーブルでパーティションの列名が重複している場合に発生していたセグメンテーションフォルトを修正しました。 [#87365](https://github.com/ClickHouse/ClickHouse/pull/87365) ([xiaohuanlin](https://github.com/xiaohuanlin)). +* EmbeddedRocksDB のアップグレード処理を修正。[#87392](https://github.com/ClickHouse/ClickHouse/pull/87392) ([Raúl Marín](https://github.com/Algunenano)). +* オブジェクトストレージ上にあるテキストインデックスからの直接読み取りを修正しました。 [#87399](https://github.com/ClickHouse/ClickHouse/pull/87399) ([Anton Popov](https://github.com/CurtizJ)). +* 存在しないエンジンに対する権限が作成されてしまうのを防止しました。 [#87419](https://github.com/ClickHouse/ClickHouse/pull/87419) ([Jitendra](https://github.com/jitendra1411)). +* `s3_plain_rewritable` に対しては「not found」エラーのみを無視するようにしました(それ以外のエラーを無視すると、あらゆる問題を引き起こす可能性があります)。 [#87426](https://github.com/ClickHouse/ClickHouse/pull/87426) ([Azat Khuzhin](https://github.com/azat)). +* YTSaurus ソースおよび *range_hashed レイアウトを使用するディクショナリを修正しました。 [#87490](https://github.com/ClickHouse/ClickHouse/pull/87490) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). +* 空タプルの配列を作成する際の処理を修正。 [#87520](https://github.com/ClickHouse/ClickHouse/pull/87520) ([Pavel Kruglov](https://github.com/Avogar)). +* 一時テーブル作成時に不正なカラムをチェックするようにしました。 [#87524](https://github.com/ClickHouse/ClickHouse/pull/87524) ([Pavel Kruglov](https://github.com/Avogar)). +* Hive パーティション列をフォーマットヘッダーに含めないようにしました。次の問題を修正: [#87515](https://github.com/ClickHouse/ClickHouse/issues/87515). [#87528](https://github.com/ClickHouse/ClickHouse/pull/87528) ([Arthur Passos](https://github.com/arthurpassos)). +* テキストフォーマット使用時の DeltaLake におけるフォーマットからの読み込み準備を修正。 [#87529](https://github.com/ClickHouse/ClickHouse/pull/87529) ([Pavel Kruglov](https://github.com/Avogar)). +* Buffer テーブルに対する SELECT および INSERT 時のアクセス検証を修正。 [#87545](https://github.com/ClickHouse/ClickHouse/pull/87545) ([pufit](https://github.com/pufit)). +* S3 テーブルに対する data skipping index の作成を禁止しました。 [#87554](https://github.com/ClickHouse/ClickHouse/pull/87554) ([Bharat Nallan](https://github.com/bharatnc)). +* 非同期ロギングにおけるトラッキング対象メモリのリークを回避しました(10時間で約100GiBもの大きなドリフトが発生し得る問題)、および `text_log` におけるリークも回避しました(ほぼ同様のドリフトが発生する可能性がありました)。 [#87584](https://github.com/ClickHouse/ClickHouse/pull/87584) ([Azat Khuzhin](https://github.com/azat)). +* ビューまたはマテリアライズドビューの SELECT クエリ設定が、グローバルなサーバー設定を上書きしてしまう可能性のある不具合を修正しました。この問題は、該当ビューが非同期に削除され、バックグラウンドでのクリーンアップが完了する前にサーバーが再起動された場合に発生する可能性がありました。 [#87603](https://github.com/ClickHouse/ClickHouse/pull/87603) ([Alexander Tokmakov](https://github.com/tavplubix))。 +* メモリ過負荷の警告を計算する際に、可能であればユーザー空間ページキャッシュのバイト数を除外します。 [#87610](https://github.com/ClickHouse/ClickHouse/pull/87610) ([Bharat Nallan](https://github.com/bharatnc)). +* CSV デシリアライズ時の型の順序が誤っている場合に `LOGICAL_ERROR` が発生していたバグを修正しました。 [#87622](https://github.com/ClickHouse/ClickHouse/pull/87622) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* 実行可能ディクショナリにおける `command_read_timeout` の不正な扱いを修正しました。 [#87627](https://github.com/ClickHouse/ClickHouse/pull/87627) ([Azat Khuzhin](https://github.com/azat)). +* 新しい analyzer で、置換されたカラムでフィルタリングする際の `WHERE` 句における `SELECT * REPLACE` の誤った動作を修正しました。 [#87630](https://github.com/ClickHouse/ClickHouse/pull/87630) ([xiaohuanlin](https://github.com/xiaohuanlin)). +* `Distributed` 上で `Merge` を使用した場合の二段階集約処理を修正しました。 [#87687](https://github.com/ClickHouse/ClickHouse/pull/87687) ([c-end](https://github.com/c-end)). +* `right row list` が使用されていない場合の HashJoin アルゴリズムにおける出力ブロック生成を修正しました。[#87401](https://github.com/ClickHouse/ClickHouse/issues/87401) を解決します。 [#87699](https://github.com/ClickHouse/ClickHouse/pull/87699)([Dmitry Novik](https://github.com/novikd))。 +* インデックス解析の結果、読み取るデータが存在しない場合に、Parallel replicas の読み取りモードが誤って選択される可能性がありました。 [#87653](https://github.com/ClickHouse/ClickHouse/issues/87653) をクローズしました。 [#87700](https://github.com/ClickHouse/ClickHouse/pull/87700) ([zoomxi](https://github.com/zoomxi))。 +* Glue での `timestamp` / `timestamptz` 列の処理を修正。[#87733](https://github.com/ClickHouse/ClickHouse/pull/87733) ([Andrey Zvonov](https://github.com/zvonand))。 * これにより [#86587](https://github.com/ClickHouse/ClickHouse/issues/86587) がクローズされます。 [#87761](https://github.com/ClickHouse/ClickHouse/pull/87761)([scanhex12](https://github.com/scanhex12))。 -* PostgreSQL インターフェースにおける boolean 値の書き込み処理を修正。 [#87762](https://github.com/ClickHouse/ClickHouse/pull/87762) ([Artem Yurov](https://github.com/ArtemYurov))。 -* CTE を使用する INSERT SELECT クエリで発生する unknown table エラーを修正、[#85368](https://github.com/ClickHouse/ClickHouse/issues/85368)。[#87789](https://github.com/ClickHouse/ClickHouse/pull/87789)([Guang Zhao](https://github.com/zheguang))。 -* Nullable に含めることができない Variants からの null map サブカラム読み取り処理を修正。 [#87798](https://github.com/ClickHouse/ClickHouse/pull/87798) ([Pavel Kruglov](https://github.com/Avogar)). -* クラスタ上のセカンダリノードでデータベースを完全に削除できなかった場合のエラー処理を修正。 [#87802](https://github.com/ClickHouse/ClickHouse/pull/87802) ([Tuan Pham Anh](https://github.com/tuanpach)). -* いくつかのスキップインデックスに関するバグを修正しました。 [#87817](https://github.com/ClickHouse/ClickHouse/pull/87817) ([Raúl Marín](https://github.com/Algunenano)). -* AzureBlobStorage において、まずネイティブコピーを試行し、'Unauthroized' エラーが発生した場合に read & write にフォールバックするように更新しました(AzureBlobStorage では、ソースとデスティネーションのストレージアカウントが異なる場合に 'Unauthorized' エラーが発生します)。また、エンドポイントが設定で定義されている場合に "use_native_copy" を適用する処理を修正しました。 [#87826](https://github.com/ClickHouse/ClickHouse/pull/87826) ([Smita Kulkarni](https://github.com/SmitaRKulkarni)). -* ArrowStream ファイルに非一意な辞書が含まれていると、ClickHouse がクラッシュしていました。 [#87863](https://github.com/ClickHouse/ClickHouse/pull/87863) ([Ilya Golshtein](https://github.com/ilejn)). -* approx_top_k および finalizeAggregation の使用時に発生していた致命的な不具合を修正。 [#87892](https://github.com/ClickHouse/ClickHouse/pull/87892) ([Jitendra](https://github.com/jitendra1411))。 -* 最後のブロックが空の場合でも projection を使用したマージが正しく動作するよう修正。 [#87928](https://github.com/ClickHouse/ClickHouse/pull/87928) ([Raúl Marín](https://github.com/Algunenano)). -* 引数の型が GROUP BY で許可されていない場合でも、GROUP BY から全単射関数を削除しないようになりました。 [#87958](https://github.com/ClickHouse/ClickHouse/pull/87958) ([Pavel Kruglov](https://github.com/Avogar)). -* クエリで `session_timezone` 設定を使用した場合に、DateTime ベースのキーに対する granule/パーティションの除外が誤って行われる問題を修正しました。 [#87987](https://github.com/ClickHouse/ClickHouse/pull/87987) ([Eduard Karacharov](https://github.com/korowa)). -* PostgreSQL インターフェイスで、クエリ実行後に影響を受けた行数を返すようになりました。 [#87990](https://github.com/ClickHouse/ClickHouse/pull/87990) ([Artem Yurov](https://github.com/ArtemYurov)). -* 誤った結果を招く可能性があるため、PASTE JOIN に対するフィルタープッシュダウンの使用を制限しました。 [#88078](https://github.com/ClickHouse/ClickHouse/pull/88078) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* [https://github.com/ClickHouse/ClickHouse/pull/84503](https://github.com/ClickHouse/ClickHouse/pull/84503) で導入された権限チェックを行う前に、URI の正規化を適用します。 [#88089](https://github.com/ClickHouse/ClickHouse/pull/88089) ([pufit](https://github.com/pufit))。 -* 新しいアナライザで、`ARRAY JOIN COLUMNS()` がどの列とも一致しない場合に発生していた論理エラーを修正。 [#88091](https://github.com/ClickHouse/ClickHouse/pull/88091) ([xiaohuanlin](https://github.com/xiaohuanlin))。 -* "High ClickHouse memory usage" 警告を修正(ページキャッシュを除外して計算)。 [#88092](https://github.com/ClickHouse/ClickHouse/pull/88092) ([Azat Khuzhin](https://github.com/azat)). -* set 型の列に `TTL` が設定された `MergeTree` テーブルで発生しうるデータ破損の問題を修正しました。 [#88095](https://github.com/ClickHouse/ClickHouse/pull/88095) ([Anton Popov](https://github.com/CurtizJ)). -* 外部データベース(`PostgreSQL` / `SQLite` / ...)がアタッチされており、その中に不正なテーブルが存在する場合に、`system.tables` を読み取る際に発生し得る捕捉されない例外を修正しました。 [#88105](https://github.com/ClickHouse/ClickHouse/pull/88105) ([Azat Khuzhin](https://github.com/azat)). -* 空のタプル引数で呼び出されたときにクラッシュする `mortonEncode` および `hilbertEncode` 関数の問題を修正しました。 [#88110](https://github.com/ClickHouse/ClickHouse/pull/88110) ([xiaohuanlin](https://github.com/xiaohuanlin)). -* これにより、クラスタ内に非アクティブなレプリカが存在する場合でも、`ON CLUSTER` クエリの実行時間が短くなります。 [#88153](https://github.com/ClickHouse/ClickHouse/pull/88153) ([alesapin](https://github.com/alesapin)). -* DDL worker は、レプリカセットから古くなったホストをクリーンアップするようになりました。これにより、ZooKeeper に保存されるメタデータの量が削減されます。 [#88154](https://github.com/ClickHouse/ClickHouse/pull/88154) ([alesapin](https://github.com/alesapin)). -* cgroups を使用せずに ClickHouse を実行できない問題を修正(誤って cgroups が非同期メトリクスの必須要件となっていた)。 [#88164](https://github.com/ClickHouse/ClickHouse/pull/88164) ([Azat Khuzhin](https://github.com/azat)). -* エラー発生時にディレクトリ移動操作を正しくロールバックできるようにしました。実行中に変更された `prefix.path` オブジェクトは、ルートのものだけでなく、すべてを書き戻す必要があります。 [#88198](https://github.com/ClickHouse/ClickHouse/pull/88198) ([Mikhail Artemenko](https://github.com/Michicosun)). -* `ColumnLowCardinality` における `is_shared` フラグの伝播を修正しました。これは、`ReverseIndex` 内でハッシュ値がすでに事前計算されてキャッシュされた後に、新しい値がカラムへ挿入された場合、誤った GROUP BY の結果を引き起こす可能性がありました。[#88213](https://github.com/ClickHouse/ClickHouse/pull/88213)([Nikita Taranov](https://github.com/nickitat))。 -* ワークロード設定項目 `max_cpu_share` の不具合を修正しました。これにより、ワークロード設定 `max_cpus` を指定していなくても使用できるようになりました。 [#88217](https://github.com/ClickHouse/ClickHouse/pull/88217) ([Neerav](https://github.com/neeravsalaria)). -* サブクエリを含む非常に重い mutation が prepare 段階で進行しなくなってしまうバグを修正しました。これらの mutation は、`SYSTEM STOP MERGES` で停止できるようになりました。 [#88241](https://github.com/ClickHouse/ClickHouse/pull/88241) ([alesapin](https://github.com/alesapin)). -* これにより、相関サブクエリがオブジェクトストレージでも利用できるようになりました。 [#88290](https://github.com/ClickHouse/ClickHouse/pull/88290) ([alesapin](https://github.com/alesapin)). -* `system.projections` と `system.data_skipping_indices` へアクセスしている間は、DataLake データベースの初期化を試みないでください。 [#88330](https://github.com/ClickHouse/ClickHouse/pull/88330) ([Azat Khuzhin](https://github.com/azat)). -* `show_data_lake_catalogs_in_system_tables` を明示的に有効化した場合にのみ、データレイクカタログが system のイントロスペクションテーブルに表示されるようになりました。 [#88341](https://github.com/ClickHouse/ClickHouse/pull/88341) ([alesapin](https://github.com/alesapin)). -* DatabaseReplicated が `interserver_http_host` 設定を正しく使用するように修正しました。 [#88378](https://github.com/ClickHouse/ClickHouse/pull/88378) ([xiaohuanlin](https://github.com/xiaohuanlin)). -* Projection を定義する際の文脈では位置引数の使用が明示的に無効化されました。これは、この内部クエリ段階においては位置引数が妥当でないためです。これにより [#48604](https://github.com/ClickHouse/ClickHouse/issues/48604) が修正されました。[#88380](https://github.com/ClickHouse/ClickHouse/pull/88380)([Amos Bird](https://github.com/amosbird))。 -* `countMatches` 関数の二乗時間計算量を解消。[#88400](https://github.com/ClickHouse/ClickHouse/issues/88400) をクローズ。[#88401](https://github.com/ClickHouse/ClickHouse/pull/88401)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* KeeperMap テーブルに対する `ALTER COLUMN ... COMMENT` コマンドがレプリケートされ、Replicated データベースのメタデータにコミットされてすべてのレプリカに伝搬されるようにしました。 [#88077](https://github.com/ClickHouse/ClickHouse/issues/88077) をクローズ。 [#88408](https://github.com/ClickHouse/ClickHouse/pull/88408) ([Eduard Karacharov](https://github.com/korowa)). -* Database Replicated データベースにおけるマテリアライズドビューで発生していた、誤った循環依存関係のケースを修正しました。これにより、新しいレプリカをデータベースに追加できなくなる問題が発生していました。 [#88423](https://github.com/ClickHouse/ClickHouse/pull/88423) ([Nikolay Degterinsky](https://github.com/evillique))。 -* `group_by_overflow_mode` が `any` に設定されている場合のスパース列の集計を修正。 [#88440](https://github.com/ClickHouse/ClickHouse/pull/88440) ([Eduard Karacharov](https://github.com/korowa)). -* `query_plan_use_logical_join_step=0` を複数の FULL JOIN USING 句と併用した際に発生していた「column not found」エラーを修正。[#88103](https://github.com/ClickHouse/ClickHouse/issues/88103) をクローズ。[#88473](https://github.com/ClickHouse/ClickHouse/pull/88473)([Vladimir Cherkasov](https://github.com/vdimir))。 -* ノード数が 10 を超える大規模クラスタでは、`[941] 67c45db4-4df4-4879-87c5-25b8d1e0d414 <Trace>: RestoreCoordinationOnCluster The version of node /clickhouse/backups/restore-7c551a77-bd76-404c-bad0-3213618ac58e/stage/num_hosts changed (attempt #9), will try again` というエラーによりリストアが失敗する可能性が高くなります。`num_hosts` ノードが多くのホストによって同時に上書きされてしまうためです。この修正では、試行回数を制御する設定を動的に行えるようにしました。[#87721](https://github.com/ClickHouse/ClickHouse/issues/87721) をクローズします。[#88484](https://github.com/ClickHouse/ClickHouse/pull/88484)([Mikhail f. Shiryaev](https://github.com/Felixoid))。 -* このPRは、バージョン23.8およびそれ以前との互換性を確保するためだけのものです。互換性の問題は次のPRによって導入されました: [https://github.com/ClickHouse/ClickHouse/pull/54240](https://github.com/ClickHouse/ClickHouse/pull/54240) このSQLは `enable_analyzer=0` の場合に失敗します(23.8以前では問題ありませんでした)。[#88491](https://github.com/ClickHouse/ClickHouse/pull/88491) ([JIaQi](https://github.com/JiaQiTang98))。 -* 大きな値を DateTime に変換する際の `accurateCast` エラーメッセージで UBSAN が検出する整数オーバーフローを修正。 [#88520](https://github.com/ClickHouse/ClickHouse/pull/88520) ([xiaohuanlin](https://github.com/xiaohuanlin)) -* タプル型向けの CoalescingMergeTree を修正。これにより [#88469](https://github.com/ClickHouse/ClickHouse/issues/88469) がクローズされます。[#88526](https://github.com/ClickHouse/ClickHouse/pull/88526)([scanhex12](https://github.com/scanhex12))。 -* `iceberg_format_version=1` に対する削除操作を禁止しました。これにより [#88444](https://github.com/ClickHouse/ClickHouse/issues/88444) がクローズされました。[#88532](https://github.com/ClickHouse/ClickHouse/pull/88532)([scanhex12](https://github.com/scanhex12))。 -* このパッチでは、任意の深さのフォルダに対する `plain-rewritable` ディスクの移動処理を修正します。 [#88586](https://github.com/ClickHouse/ClickHouse/pull/88586) ([Mikhail Artemenko](https://github.com/Michicosun)). -* *cluster 関数における SQL SECURITY DEFINER を修正。 [#88588](https://github.com/ClickHouse/ClickHouse/pull/88588) ([Julian Maicher](https://github.com/jmaicher)). -* 基盤となる const PREWHERE 列の同時更新によって発生し得るクラッシュを修正。 [#88605](https://github.com/ClickHouse/ClickHouse/pull/88605) ([Azat Khuzhin](https://github.com/azat)). -* テキストインデックスからの読み取りを修正し、クエリ条件キャッシュを有効にしました(設定 `use_skip_indexes_on_data_read` と `use_query_condition_cache` を有効にした状態)。 [#88660](https://github.com/ClickHouse/ClickHouse/pull/88660) ([Anton Popov](https://github.com/CurtizJ)). -* `Poco::Net::HTTPChunkedStreamBuf::readFromDevice` から `Poco::TimeoutException` がスローされると、SIGABRT によりクラッシュします。 [#88668](https://github.com/ClickHouse/ClickHouse/pull/88668) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). -* [#88910](https://github.com/ClickHouse/ClickHouse/issues/88910) にバックポート: 復旧後、Replicated データベースのレプリカが長時間にわたって `Failed to marked query-0004647339 as finished (finished=No node, synced=No node)` のようなメッセージを出力し続けてスタックしてしまうことがありましたが、修正されました。 [#88671](https://github.com/ClickHouse/ClickHouse/pull/88671) ([Alexander Tokmakov](https://github.com/tavplubix))。 -* 設定を再読み込みした後に ClickHouse が初めて接続する場合に、`system.zookeeper_connection_log` への追記が正しく行われるように修正。 [#88728](https://github.com/ClickHouse/ClickHouse/pull/88728) ([Antonio Andelic](https://github.com/antonio2368)). -* `date_time_overflow_behavior = 'saturate'` を設定している場合に、DateTime64 を Date に変換すると、タイムゾーンを考慮する際に範囲外の値に対して誤った結果を返す可能性があったバグを修正しました。 [#88737](https://github.com/ClickHouse/ClickHouse/pull/88737) ([Manuel](https://github.com/raimannma))。 -* キャッシュを有効にした S3 テーブルエンジンで発生する "having zero bytes error" の N 回目の修正。 [#88740](https://github.com/ClickHouse/ClickHouse/pull/88740) ([Kseniia Sumarokova](https://github.com/kssenii)). -* `loop` テーブル関数に対する SELECT 時のアクセス検証を修正しました。 [#88802](https://github.com/ClickHouse/ClickHouse/pull/88802) ([pufit](https://github.com/pufit)). -* 非同期ロギングの失敗時に例外を捕捉し、プログラムが異常終了しないようにしました。 [#88814](https://github.com/ClickHouse/ClickHouse/pull/88814) ([Raúl Marín](https://github.com/Algunenano)). -* [#89060](https://github.com/ClickHouse/ClickHouse/issues/89060) にバックポート済み: `top_k` が単一の引数で呼び出された場合に threshold パラメータを正しく考慮するように修正。[#88757](https://github.com/ClickHouse/ClickHouse/issues/88757) をクローズ。[#88867](https://github.com/ClickHouse/ClickHouse/pull/88867)([Manuel](https://github.com/raimannma))。 -* [#88944](https://github.com/ClickHouse/ClickHouse/issues/88944) にバックポート済み: 関数 `reverseUTF8` のバグを修正しました。以前のバージョンでは、4 バイト長の UTF-8 コードポイントのバイト列を誤って反転していました。これにより [#88913](https://github.com/ClickHouse/ClickHouse/issues/88913) がクローズされます。[#88914](https://github.com/ClickHouse/ClickHouse/pull/88914)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* [#88980](https://github.com/ClickHouse/ClickHouse/issues/88980) でバックポート済み: SQL SECURITY DEFINER 付きでビューを作成する際に、`SET DEFINER :definer` のアクセス権限をチェックしないようにしました。[#88968](https://github.com/ClickHouse/ClickHouse/pull/88968)([pufit](https://github.com/pufit))。 -* [#89058](https://github.com/ClickHouse/ClickHouse/issues/89058) にバックポート済み: 部分的な `QBit` 読み取りの最適化により、`p` が `Nullable` の場合に戻り値型から誤って `Nullable` が削除されていた `L2DistanceTransposed(vec1, vec2, p)` における `LOGICAL_ERROR` を修正しました。 [#88974](https://github.com/ClickHouse/ClickHouse/pull/88974)([Raufs Dunamalijevs](https://github.com/rienath))。 -* [#89167](https://github.com/ClickHouse/ClickHouse/issues/89167) にバックポート済み: 不明なカタログタイプで発生するクラッシュを修正。[#88819](https://github.com/ClickHouse/ClickHouse/issues/88819) を解決。[#88987](https://github.com/ClickHouse/ClickHouse/pull/88987)([scanhex12](https://github.com/scanhex12))。 -* [#89028](https://github.com/ClickHouse/ClickHouse/issues/89028) でバックポートされました。スキップインデックス解析時のパフォーマンス低下を修正しました。[#89004](https://github.com/ClickHouse/ClickHouse/pull/89004)([Anton Popov](https://github.com/CurtizJ))。 - - +* PostgreSQL インターフェースにおける Boolean 値の書き込み処理を修正。 [#87762](https://github.com/ClickHouse/ClickHouse/pull/87762) ([Artem Yurov](https://github.com/ArtemYurov))。 +* CTE を使用した INSERT SELECT クエリで発生する「unknown table」エラーを修正。 [#85368](https://github.com/ClickHouse/ClickHouse/issues/85368)。 [#87789](https://github.com/ClickHouse/ClickHouse/pull/87789) ([Guang Zhao](https://github.com/zheguang))。 +* Nullable の内部に含められない Variant から null の map サブカラムを読み取る処理を修正。 [#87798](https://github.com/ClickHouse/ClickHouse/pull/87798) ([Pavel Kruglov](https://github.com/Avogar)). +* セカンダリノードでクラスタ上のデータベースを完全に削除できなかった場合のエラー処理を修正しました。 [#87802](https://github.com/ClickHouse/ClickHouse/pull/87802) ([Tuan Pham Anh](https://github.com/tuanpach)). +* 複数の skip インデックスに関するバグを修正しました。[#87817](https://github.com/ClickHouse/ClickHouse/pull/87817) ([Raúl Marín](https://github.com/Algunenano))。 +* AzureBlobStorage において、まずネイティブコピーを試行し、「Unauthroized」エラーが発生した場合に読み取り&書き込みに切り替えるよう更新しました(AzureBlobStorage では、ソースとデスティネーションでストレージアカウントが異なる場合、「Unauthorized」エラーが発生します)。また、設定で endpoint が定義されている場合に "use_native_copy" が適用されるよう修正しました。 [#87826](https://github.com/ClickHouse/ClickHouse/pull/87826) ([Smita Kulkarni](https://github.com/SmitaRKulkarni)). +* ArrowStream ファイルに一意ではない辞書が含まれている場合に ClickHouse がクラッシュする不具合がありました。 [#87863](https://github.com/ClickHouse/ClickHouse/pull/87863) ([Ilya Golshtein](https://github.com/ilejn)). +* approx_top_k および finalizeAggregation 使用時に発生する致命的な問題を修正。 [#87892](https://github.com/ClickHouse/ClickHouse/pull/87892) ([Jitendra](https://github.com/jitendra1411)). +* 最後のブロックが空の場合のプロジェクションを使用したマージを修正しました。 [#87928](https://github.com/ClickHouse/ClickHouse/pull/87928) ([Raúl Marín](https://github.com/Algunenano))。 +* 引数型が GROUP BY で許可されていない場合には、`injective` 関数を GROUP BY から削除しないようにしました。 [#87958](https://github.com/ClickHouse/ClickHouse/pull/87958) ([Pavel Kruglov](https://github.com/Avogar)). +* クエリで `session_timezone` 設定を使用した場合に、datetime ベースのキーに対する granule / パーティションの除外が誤って行われていた問題を修正。[#87987](https://github.com/ClickHouse/ClickHouse/pull/87987) ([Eduard Karacharov](https://github.com/korowa)). +* PostgreSQL インターフェースで、クエリ実行後に影響を受けた行数を返すようになりました。 [#87990](https://github.com/ClickHouse/ClickHouse/pull/87990) ([Artem Yurov](https://github.com/ArtemYurov)). +* 誤った結果を招く可能性があるため、PASTE JOIN に対するフィルタープッシュダウンの適用を制限しました。 [#88078](https://github.com/ClickHouse/ClickHouse/pull/88078) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* [https://github.com/ClickHouse/ClickHouse/pull/84503](https://github.com/ClickHouse/ClickHouse/pull/84503) で導入された権限チェックの評価前に、URI の正規化を適用します。[#88089](https://github.com/ClickHouse/ClickHouse/pull/88089)([pufit](https://github.com/pufit))。 +* 新しいアナライザーで `ARRAY JOIN COLUMNS()` がどの列にもマッチしない場合に発生する論理エラーを修正。 [#88091](https://github.com/ClickHouse/ClickHouse/pull/88091) ([xiaohuanlin](https://github.com/xiaohuanlin)). +* 「High ClickHouse memory usage」警告でページキャッシュを除外するように修正。 [#88092](https://github.com/ClickHouse/ClickHouse/pull/88092) ([Azat Khuzhin](https://github.com/azat)). +* `TTL` が設定された `MergeTree` テーブルでデータ破損を引き起こす可能性のあった問題を修正しました。 [#88095](https://github.com/ClickHouse/ClickHouse/pull/88095) ([Anton Popov](https://github.com/CurtizJ)). +* 外部データベース(`PostgreSQL` / `SQLite` / ...)がアタッチされており、その中に不正なテーブルが存在する場合に、`system.tables` を読み取る際に発生しうる未捕捉例外を修正しました。 [#88105](https://github.com/ClickHouse/ClickHouse/pull/88105) ([Azat Khuzhin](https://github.com/azat)). +* 空のタプル引数で呼び出された場合にクラッシュする `mortonEncode` および `hilbertEncode` 関数の不具合を修正しました。 [#88110](https://github.com/ClickHouse/ClickHouse/pull/88110) ([xiaohuanlin](https://github.com/xiaohuanlin)). +* これにより、クラスタ内に非アクティブなレプリカが存在する場合でも、`ON CLUSTER` クエリの実行時間が短くなります。 [#88153](https://github.com/ClickHouse/ClickHouse/pull/88153) ([alesapin](https://github.com/alesapin))。 +* DDL worker がレプリカセットから古いホストをクリーンアップするようになりました。これにより ZooKeeper に保存されるメタデータ量が削減されます。 [#88154](https://github.com/ClickHouse/ClickHouse/pull/88154) ([alesapin](https://github.com/alesapin)). +* cgroups なしで ClickHouse を実行できない問題を修正(非同期メトリクス用に誤って cgroups が必須要件となっていた)。 [#88164](https://github.com/ClickHouse/ClickHouse/pull/88164) ([Azat Khuzhin](https://github.com/azat)). +* エラーが発生した場合にディレクトリ移動操作を正しく取り消せるようにしました。実行中に変更されたルートのものだけでなく、変更されたすべての `prefix.path` オブジェクトを書き戻す必要があります。 [#88198](https://github.com/ClickHouse/ClickHouse/pull/88198) ([Mikhail Artemenko](https://github.com/Michicosun)). +* `ColumnLowCardinality` における `is_shared` フラグの伝搬を修正しました。`ReverseIndex` でハッシュ値がすでに事前に計算およびキャッシュされた後にそのカラムに新しい値が挿入されると、誤った GROUP BY の結果を引き起こす可能性がありました。 [#88213](https://github.com/ClickHouse/ClickHouse/pull/88213) ([Nikita Taranov](https://github.com/nickitat))。 +* ワークロード設定 `max_cpu_share` の挙動を修正しました。これにより、`max_cpus` ワークロード設定を指定しなくても使用できるようになりました。 [#88217](https://github.com/ClickHouse/ClickHouse/pull/88217) ([Neerav](https://github.com/neeravsalaria)). +* サブクエリを含む非常に重い mutation が prepare ステージで行き詰まってしまうバグを修正しました。現在は `SYSTEM STOP MERGES` を使用してこれらの mutation を停止できるようになりました。 [#88241](https://github.com/ClickHouse/ClickHouse/pull/88241) ([alesapin](https://github.com/alesapin)). +* 相関サブクエリがオブジェクトストレージでも動作するようになりました。 [#88290](https://github.com/ClickHouse/ClickHouse/pull/88290) ([alesapin](https://github.com/alesapin)). +* `system.projections` および `system.data_skipping_indices` にアクセスしている間は DataLake データベースを初期化しないようにしました。 [#88330](https://github.com/ClickHouse/ClickHouse/pull/88330) ([Azat Khuzhin](https://github.com/azat)). +* 今後は、`show_data_lake_catalogs_in_system_tables` が明示的に有効化されている場合にのみ、データレイクカタログがイントロスペクション用の system テーブルに表示されます。 [#88341](https://github.com/ClickHouse/ClickHouse/pull/88341) ([alesapin](https://github.com/alesapin)). +* DatabaseReplicated が `interserver_http_host` 設定を参照するように修正しました。 [#88378](https://github.com/ClickHouse/ClickHouse/pull/88378) ([xiaohuanlin](https://github.com/xiaohuanlin)). +* 位置引数は、Projections を定義するコンテキストでは明示的に無効化されました。これは、この内部クエリ処理段階では位置引数が適切でないためです。この変更により [#48604](https://github.com/ClickHouse/ClickHouse/issues/48604) が修正されました。 [#88380](https://github.com/ClickHouse/ClickHouse/pull/88380) ([Amos Bird](https://github.com/amosbird))。 +* `countMatches` 関数の二乗オーダーの計算量を改善しました。[#88400](https://github.com/ClickHouse/ClickHouse/issues/88400) をクローズ。[#88401](https://github.com/ClickHouse/ClickHouse/pull/88401)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* KeeperMap テーブルに対する `ALTER COLUMN ... COMMENT` コマンドをレプリケート対象とし、Replicated データベースのメタデータにコミットして、すべてのレプリカへ伝播されるようにしました。[#88077](https://github.com/ClickHouse/ClickHouse/issues/88077) をクローズ。[#88408](https://github.com/ClickHouse/ClickHouse/pull/88408)([Eduard Karacharov](https://github.com/korowa))。 +* DatabaseReplicated におけるマテリアライズドビューの誤った循環依存関係の検出を修正し、新しいレプリカをデータベースに追加することを妨げていた問題を解消しました。 [#88423](https://github.com/ClickHouse/ClickHouse/pull/88423) ([Nikolay Degterinsky](https://github.com/evillique)). +* `group_by_overflow_mode` が `any` に設定されている場合のスパース列に対する集約を修正しました。 [#88440](https://github.com/ClickHouse/ClickHouse/pull/88440) ([Eduard Karacharov](https://github.com/korowa)). +* `query_plan_use_logical_join_step=0` を複数の FULL JOIN USING 句と併用した際に発生する「column not found」エラーを修正しました。[#88103](https://github.com/ClickHouse/ClickHouse/issues/88103) をクローズしました。 [#88473](https://github.com/ClickHouse/ClickHouse/pull/88473) ([Vladimir Cherkasov](https://github.com/vdimir))。 +* ノード数が 10 を超える大規模クラスタでは、`[941] 67c45db4-4df4-4879-87c5-25b8d1e0d414 : RestoreCoordinationOnCluster The version of node /clickhouse/backups/restore-7c551a77-bd76-404c-bad0-3213618ac58e/stage/num_hosts changed (attempt #9), will try again` というエラーにより復元処理が失敗する可能性が高くなります。`num_hosts` ノードが多数のホストによって同時に上書きされてしまいます。この修正により、試行回数を制御する設定が動的に調整されるようになりました。[#87721](https://github.com/ClickHouse/ClickHouse/issues/87721) をクローズしました。[#88484](https://github.com/ClickHouse/ClickHouse/pull/88484)([Mikhail f. Shiryaev](https://github.com/Felixoid))。 +* この PR は 23.8 およびそれ以前との互換性を確保するためだけのものです。互換性の問題は次の PR によって導入されました: [https://github.com/ClickHouse/ClickHouse/pull/54240](https://github.com/ClickHouse/ClickHouse/pull/54240) この SQL は `enable_analyzer=0` の場合に失敗します(23.8 より前のバージョンでは問題ありません)。[#88491](https://github.com/ClickHouse/ClickHouse/pull/88491)([JIaQi](https://github.com/JiaQiTang98))。 +* 大きな値を DateTime 型に変換する際の `accurateCast` のエラーメッセージで発生していた UBSAN による整数オーバーフローを修正しました。[#88520](https://github.com/ClickHouse/ClickHouse/pull/88520)([xiaohuanlin](https://github.com/xiaohuanlin))。 +* タプル型用の CoalescingMergeTree の不具合を修正しました。これにより [#88469](https://github.com/ClickHouse/ClickHouse/issues/88469) がクローズされました。[#88526](https://github.com/ClickHouse/ClickHouse/pull/88526)([scanhex12](https://github.com/scanhex12))。 +* `iceberg_format_version=1` に対する削除を禁止しました。これにより [#88444](https://github.com/ClickHouse/ClickHouse/issues/88444) が解決されました。[#88532](https://github.com/ClickHouse/ClickHouse/pull/88532)([scanhex12](https://github.com/scanhex12))。 +* このパッチは、任意の深さのディレクトリに対する `plain-rewritable` ディスクの移動処理を修正します。 [#88586](https://github.com/ClickHouse/ClickHouse/pull/88586) ([Mikhail Artemenko](https://github.com/Michicosun))。 +* *cluster 関数における SQL SECURITY DEFINER の動作を修正。 [#88588](https://github.com/ClickHouse/ClickHouse/pull/88588) ([Julian Maicher](https://github.com/jmaicher)). +* 基盤となる const PREWHERE 列の同時実行されるミューテーションにより発生しうるクラッシュを修正。 [#88605](https://github.com/ClickHouse/ClickHouse/pull/88605) ([Azat Khuzhin](https://github.com/azat)). +* テキストインデックスからの読み取りを修正し、`use_skip_indexes_on_data_read` および `use_query_condition_cache` 設定を有効にしてクエリ条件キャッシュを有効化しました。 [#88660](https://github.com/ClickHouse/ClickHouse/pull/88660) ([Anton Popov](https://github.com/CurtizJ)). +* `Poco::Net::HTTPChunkedStreamBuf::readFromDevice` からスローされた `Poco::TimeoutException` により、SIGABRT でクラッシュします。[#88668](https://github.com/ClickHouse/ClickHouse/pull/88668)([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 +* [#88910](https://github.com/ClickHouse/ClickHouse/issues/88910) にバックポート済み: リカバリ後、Replicated データベースのレプリカが `Failed to marked query-0004647339 as finished (finished=No node, synced=No node)` のようなメッセージを長時間にわたって出力し続けてハングしてしまうことがありましたが、この問題は修正されました。[#88671](https://github.com/ClickHouse/ClickHouse/pull/88671) ([Alexander Tokmakov](https://github.com/tavplubix))。 +* 設定のリロード後に ClickHouse が初めて接続する場合の `system.zookeeper_connection_log` への追記処理を修正。 [#88728](https://github.com/ClickHouse/ClickHouse/pull/88728) ([Antonio Andelic](https://github.com/antonio2368)). +* `date_time_overflow_behavior = 'saturate'` を使用している場合に、タイムゾーンを扱う際、範囲外の値を DateTime64 から Date に変換すると誤った結果が返される可能性があったバグを修正しました。 [#88737](https://github.com/ClickHouse/ClickHouse/pull/88737) ([Manuel](https://github.com/raimannma)). +* キャッシュを有効にした S3 テーブルエンジンで発生する「having zero bytes error」を修正する N 回目の試み。 [#88740](https://github.com/ClickHouse/ClickHouse/pull/88740) ([Kseniia Sumarokova](https://github.com/kssenii)). +* `loop` テーブル関数に対する SELECT 時のアクセス検証を修正。 [#88802](https://github.com/ClickHouse/ClickHouse/pull/88802) ([pufit](https://github.com/pufit)). +* 非同期ロギングが失敗した際に例外を捕捉し、プログラムが異常終了するのを防ぎます。 [#88814](https://github.com/ClickHouse/ClickHouse/pull/88814) ([Raúl Marín](https://github.com/Algunenano)). +* [#89060](https://github.com/ClickHouse/ClickHouse/issues/89060) にバックポート済み: `top_k` が単一の引数で呼び出された場合に、threshold パラメータを正しく考慮するように修正。 [#88757](https://github.com/ClickHouse/ClickHouse/issues/88757) をクローズ。 [#88867](https://github.com/ClickHouse/ClickHouse/pull/88867)([Manuel](https://github.com/raimannma))。 +* [#88944](https://github.com/ClickHouse/ClickHouse/issues/88944) にバックポート済み: 関数 `reverseUTF8` のバグを修正しました。以前のバージョンでは、4 バイト長の UTF-8 コードポイントのバイト列を誤って反転していました。この修正により [#88913](https://github.com/ClickHouse/ClickHouse/issues/88913) がクローズされます。[#88914](https://github.com/ClickHouse/ClickHouse/pull/88914)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* [#88980](https://github.com/ClickHouse/ClickHouse/issues/88980) にバックポート済み:SQL SECURITY DEFINER を指定してビューを作成する際に、`SET DEFINER :definer` へのアクセスをチェックしないようになりました。[#88968](https://github.com/ClickHouse/ClickHouse/pull/88968) ([pufit](https://github.com/pufit))。 +* [#89058](https://github.com/ClickHouse/ClickHouse/issues/89058) でバックポート済み: `p` が `Nullable` の場合に、部分的な `QBit` 読み取りの最適化によって戻り値の型から誤って `Nullable` が削除されていたため、`L2DistanceTransposed(vec1, vec2, p)` における `LOGICAL_ERROR` を修正しました。[#88974](https://github.com/ClickHouse/ClickHouse/pull/88974)([Raufs Dunamalijevs](https://github.com/rienath))。 +* [#89167](https://github.com/ClickHouse/ClickHouse/issues/89167) でバックポート: 不明なカタログ種別の場合にクラッシュする問題を修正。[#88819](https://github.com/ClickHouse/ClickHouse/issues/88819) を解決。[#88987](https://github.com/ClickHouse/ClickHouse/pull/88987)([scanhex12](https://github.com/scanhex12))。 +* [#89028](https://github.com/ClickHouse/ClickHouse/issues/89028) でバックポート済み: skipping index の解析におけるパフォーマンス低下を修正しました。[#89004](https://github.com/ClickHouse/ClickHouse/pull/89004)([Anton Popov](https://github.com/CurtizJ))。 #### ビルド/テスト/パッケージングの改善 -* `postgres` ライブラリのバージョン 18.0 を使用。[#87647](https://github.com/ClickHouse/ClickHouse/pull/87647)([Konstantin Bogdanov](https://github.com/thevar1able))。 -* FreeBSD で ICU を有効化。[#87891](https://github.com/ClickHouse/ClickHouse/pull/87891)([Raúl Marín](https://github.com/Algunenano))。 -* 動的ディスパッチを SSE 4.2 に対して行う場合には、SSE 4 ではなく SSE 4.2 を使用。[#88029](https://github.com/ClickHouse/ClickHouse/pull/88029)([Raúl Marín](https://github.com/Algunenano))。 -* `Speculative Store Bypass Safe` が利用できない場合でも、`NO_ARMV81_OR_HIGHER` フラグを必須にしない。[#88051](https://github.com/ClickHouse/ClickHouse/pull/88051)([Konstantin Bogdanov](https://github.com/thevar1able))。 -* ClickHouse が `ENABLE_LIBFIU=OFF` でビルドされている場合、フェイルポイント関連の関数は no-op(何もしない)となり、パフォーマンスに影響を与えなくなる。この場合、`SYSTEM ENABLE/DISABLE FAILPOINT` クエリは `SUPPORT_IS_DISABLED` エラーを返す。[#88184](https://github.com/ClickHouse/ClickHouse/pull/88184)([c-end](https://github.com/c-end))。 +* `postgres` ライブラリのバージョン 18.0 を使用するように変更。 [#87647](https://github.com/ClickHouse/ClickHouse/pull/87647) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* FreeBSD 向けに ICU を有効化。 [#87891](https://github.com/ClickHouse/ClickHouse/pull/87891) ([Raúl Marín](https://github.com/Algunenano)). +* 動的ディスパッチの対象が SSE 4.2 の場合は、SSE 4 ではなく SSE 4.2 を使用。 [#88029](https://github.com/ClickHouse/ClickHouse/pull/88029) ([Raúl Marín](https://github.com/Algunenano)). +* `Speculative Store Bypass Safe` が利用できない場合に、`NO_ARMV81_OR_HIGHER` フラグを必須としないよう変更。 [#88051](https://github.com/ClickHouse/ClickHouse/pull/88051) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* ClickHouse が `ENABLE_LIBFIU=OFF` でビルドされている場合、フェイルポイント関連の関数は no-op(何もしない処理)となり、パフォーマンスに影響を与えなくなります。この場合、`SYSTEM ENABLE/DISABLE FAILPOINT` クエリは `SUPPORT_IS_DISABLED` エラーを返します。 [#88184](https://github.com/ClickHouse/ClickHouse/pull/88184) ([c-end](https://github.com/c-end)). -### ClickHouse リリース 25.9, 2025-09-25 {#259} +### ClickHouse リリース 25.9、2025-09-25 {#259} #### 後方互換性のない変更 -* IPv4/IPv6 に対する意味のないバイナリ演算を無効化。IPv4/IPv6 と非整数型との加算/減算は行えなくなった。以前は浮動小数点型との演算を許可し、他の一部の型(DateTime など)では論理エラーを投げていた。[#86336](https://github.com/ClickHouse/ClickHouse/pull/86336)([Raúl Marín](https://github.com/Algunenano))。 -* 設定 `allow_dynamic_metadata_for_data_lakes` を非推奨化。現在は、すべての iceberg テーブルが各クエリの実行前にストレージから最新のテーブルスキーマを取得しようとする。[#86366](https://github.com/ClickHouse/ClickHouse/pull/86366)([Daniil Ivanik](https://github.com/divanik))。 -* `OUTER JOIN ... USING` 句からの coalesce されたカラムの解決方法を、より一貫性のあるものに変更。以前は、OUTER JOIN で USING カラムと修飾されたカラム(`a, t1.a, t2.a`)の両方を選択する場合、USING カラムが誤って `t1.a` に解決され、左側に対応する行がない右テーブルの行に対して 0/NULL を表示していた。現在は、USING 句内の識別子は常に coalesce 済みカラムに解決され、一方で修飾された識別子は、クエリ内に他にどの識別子が存在するかに関わらず、非 coalesce カラムに解決される。例: ```sql SELECT a, t1.a, t2.a FROM (SELECT 1 as a WHERE 0) t1 FULL JOIN (SELECT 2 as a) t2 USING (a) -- Before: a=0, t1.a=0, t2.a=2 (incorrect - 'a' resolved to t1.a) -- After: a=2, t1.a=0, t2.a=2 (correct - 'a' is coalesced).``` [#80848](https://github.com/ClickHouse/ClickHouse/pull/80848)([Vladimir Cherkasov](https://github.com/vdimir))。 -* レプリケートテーブルの重複排除ウィンドウを最大 10000 まで拡大。この変更は完全に互換性があるが、多数のテーブルが存在する場合に高いリソース消費につながるシナリオが想定される。[#86820](https://github.com/ClickHouse/ClickHouse/pull/86820)([Sema Checherinda](https://github.com/CheSema))。 - +* IPv4/IPv6 に対する意味のない二項演算を無効化: IPv4/IPv6 と整数型以外の型との加算 / 減算を無効化しました。以前は浮動小数点型との演算を許可しており、他のいくつかの型(`DateTime` など)に対しては論理エラーをスローしていました。[#86336](https://github.com/ClickHouse/ClickHouse/pull/86336) ([Raúl Marín](https://github.com/Algunenano)). +* 設定 `allow_dynamic_metadata_for_data_lakes` を非推奨化しました。現在では、すべての Iceberg テーブルが、各クエリを実行する前にストレージから最新のテーブルスキーマを取得しようとします。[#86366](https://github.com/ClickHouse/ClickHouse/pull/86366) ([Daniil Ivanik](https://github.com/divanik)). +* `OUTER JOIN ... USING` 句からの coalesce された列の解決方法を、より一貫したものに変更しました。以前は、OUTER JOIN で USING 列と修飾された列(`a, t1.a, t2.a`)の両方を選択した場合、USING 列が誤って `t1.a` に解決され、左側にマッチしない右側テーブルの行に対して 0/NULL を表示していました。現在は、USING 句の識別子は常に coalesce された列に解決され、修飾された識別子は、クエリ内にどの識別子が存在するかにかかわらず、非 coalesce 列に解決されます。例えば: ```sql SELECT a, t1.a, t2.a FROM (SELECT 1 as a WHERE 0) t1 FULL JOIN (SELECT 2 as a) t2 USING (a) -- 以前: a=0, t1.a=0, t2.a=2(誤り - 'a' が t1.a に解決されている) -- 現在: a=2, t1.a=0, t2.a=2(正しい - 'a' は coalesce されている)。[#80848](https://github.com/ClickHouse/ClickHouse/pull/80848) ([Vladimir Cherkasov](https://github.com/vdimir)). +* レプリケートテーブルの重複排除ウィンドウを 10000 まで増加させました。これは完全に互換性がありますが、多数のテーブルが存在する場合、この変更によって高いリソース消費が発生しうるシナリオが考えられます。[#86820](https://github.com/ClickHouse/ClickHouse/pull/86820) ([Sema Checherinda](https://github.com/CheSema)). #### 新機能 -* ユーザーは、NATS エンジンで新しい設定項目 `nats_stream` と `nats_consumer` を指定することで、NATS JetStream を使用してメッセージを購読できるようになりました。[#84799](https://github.com/ClickHouse/ClickHouse/pull/84799)([Dmitry Novikov](https://github.com/dmitry-sles-novikov))。 -* `arrowFlight` テーブル関数に認証と SSL のサポートを追加しました。 [#87120](https://github.com/ClickHouse/ClickHouse/pull/87120) ([Vitaly Baranov](https://github.com/vitlibar)). -* `storage_class_name` という名前の新しいパラメータを `S3` テーブルエンジンおよび `s3` テーブル関数に追加しました。このパラメータにより、AWS がサポートする Intelligent-Tiering を指定できます。キー・バリュー形式と位置引数形式(非推奨)の両方をサポートします。 [#87122](https://github.com/ClickHouse/ClickHouse/pull/87122) ([alesapin](https://github.com/alesapin))。 -* Iceberg テーブルエンジンでの `ALTER UPDATE` をサポート。[#86059](https://github.com/ClickHouse/ClickHouse/pull/86059)([scanhex12](https://github.com/scanhex12))。 -* SELECT 文の実行時に Iceberg メタデータファイルを取得するためのシステムテーブル `iceberg_metadata_log` を追加。[#86152](https://github.com/ClickHouse/ClickHouse/pull/86152)([scanhex12](https://github.com/scanhex12))。 -* `Iceberg` および `DeltaLake` テーブルで、ストレージレベルの `disk` 設定を通じたカスタムディスク構成がサポートされました。 [#86778](https://github.com/ClickHouse/ClickHouse/pull/86778) ([scanhex12](https://github.com/scanhex12))。 -* データレイクディスクで Azure をサポート。 [#87173](https://github.com/ClickHouse/ClickHouse/pull/87173) ([scanhex12](https://github.com/scanhex12)). -* Azure Blob Storage 上での `Unity` カタログをサポート。 [#80013](https://github.com/ClickHouse/ClickHouse/pull/80013)([Smita Kulkarni](https://github.com/SmitaRKulkarni))。 -* `Iceberg` への書き込みで、より多くのフォーマット(`ORC`、`Avro`)をサポートしました。これにより [#86179](https://github.com/ClickHouse/ClickHouse/issues/86179) がクローズされました。[#87277](https://github.com/ClickHouse/ClickHouse/pull/87277)([scanhex12](https://github.com/scanhex12))。 -* データベースレプリカに関する情報を含む新しいシステムテーブル `database_replicas` を追加しました。 [#83408](https://github.com/ClickHouse/ClickHouse/pull/83408) ([Konstantin Morozov](https://github.com/k-morozov))。 -* 配列から別の配列を集合として差し引く `arrayExcept` 関数が追加されました。 [#82368](https://github.com/ClickHouse/ClickHouse/pull/82368) ([Joanna Hulboj](https://github.com/jh0x))。 -* 新しい `system.aggregated_zookeeper_log` テーブルを追加します。このテーブルには、セッション ID、親パス、操作種別ごとにグループ化された ZooKeeper 操作の統計情報(例: 操作回数、平均レイテンシー、エラー数)が含まれ、定期的にディスクに書き出されます。 [#85102](https://github.com/ClickHouse/ClickHouse/pull/85102) [#87208](https://github.com/ClickHouse/ClickHouse/pull/87208) ([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 -* 新しい関数 `isValidASCII`。入力文字列または FixedString が ASCII バイト (0x00–0x7F) のみで構成されている場合は 1 を、それ以外の場合は 0 を返します。[#85377](https://github.com/ClickHouse/ClickHouse/issues/85377) をクローズしました。... [#85786](https://github.com/ClickHouse/ClickHouse/pull/85786)([rajat mohan](https://github.com/rajatmohan22))。 -* ブール値の設定は引数なしで指定できます。例えば `SET use_query_cache;` のように書くと、自動的に true に設定したことと同じ意味になります。 [#85800](https://github.com/ClickHouse/ClickHouse/pull/85800) ([thraeka](https://github.com/thraeka))。 -* 新しい設定オプション `logger.startupLevel` と `logger.shutdownLevel` により、それぞれ ClickHouse の起動時およびシャットダウン時のログレベルを上書き設定できるようになりました。 [#85967](https://github.com/ClickHouse/ClickHouse/pull/85967) ([Lennard Eijsackers](https://github.com/Blokje5)). -* 集約関数 `timeSeriesChangesToGrid` と `timeSeriesResetsToGrid`。`timeSeriesRateToGrid` と同様に動作し、開始タイムスタンプ、終了タイムスタンプ、ステップ、ルックバックウィンドウのパラメータに加え、タイムスタンプと値の 2 つの引数を受け取りますが、各ウィンドウにつき少なくとも 1 サンプル(2 サンプルではなく)を必要とします。パラメータで定義されたタイムグリッド内の各タイムスタンプについて、指定されたウィンドウ内でサンプル値が変化または減少した回数をカウントする PromQL の `changes` / `resets` 関数を計算します。戻り値の型は `Array(Nullable(Float64))` です。[#86010](https://github.com/ClickHouse/ClickHouse/pull/86010)([Stephen Chi](https://github.com/stephchi0))。 -* ユーザーが一時テーブルの作成と同様の構文(`CREATE TEMPORARY VIEW`)で一時ビューを作成できるようにします。[#86432](https://github.com/ClickHouse/ClickHouse/pull/86432)([Aly Kafoury](https://github.com/AlyHKafoury))。 -* `system.warnings` テーブルに CPU およびメモリ使用量に関する警告を追加しました。 [#86838](https://github.com/ClickHouse/ClickHouse/pull/86838) ([Bharat Nallan](https://github.com/bharatnc)). -* `Protobuf` 入力で `oneof` インジケーターをサポートしました。`oneof` の一部の存在を示すために専用のカラムを使用できます。メッセージに [oneof](https://protobuf.dev/programming-guides/proto3/#oneof) が含まれていて、かつ `input_format_protobuf_oneof_presence` が設定されている場合、ClickHouse はその oneof のどのフィールドが存在するかを示すカラムを設定します。[#82885](https://github.com/ClickHouse/ClickHouse/pull/82885)([Ilya Golshtein](https://github.com/ilejn))。 -* jemalloc の内部ツールに基づいてメモリアロケーションのプロファイリングを改善しました。グローバル jemalloc プロファイラは、設定 `jemalloc_enable_global_profiler` で有効化できるようになりました。サンプリングされたグローバルなアロケーションおよびデアロケーションは、設定 `jemalloc_collect_global_profile_samples_in_trace_log` を有効にすることで、`system.trace_log` の `JemallocSample` 型として保存できるようになりました。jemalloc プロファイリングは、設定 `jemalloc_enable_profiler` を使用してクエリごとに個別に有効化できるようになりました。`system.trace_log` へのサンプル保存は、設定 `jemalloc_collect_profile_samples_in_trace_log` を使用してクエリ単位で制御できます。jemalloc をより新しいバージョンに更新しました。 [#85438](https://github.com/ClickHouse/ClickHouse/pull/85438) ([Antonio Andelic](https://github.com/antonio2368))。 -* Iceberg テーブルの DROP 時にファイルを削除するための新しい設定。これにより [#86211](https://github.com/ClickHouse/ClickHouse/issues/86211) がクローズされました。[#86501](https://github.com/ClickHouse/ClickHouse/pull/86501)([scanhex12](https://github.com/scanhex12))。 - - +* ユーザーは、NATS エンジン用の新しい設定項目 `nats_stream` と `nats_consumer` を指定することで、NATS JetStream を使用してメッセージを取得できるようになりました。 [#84799](https://github.com/ClickHouse/ClickHouse/pull/84799) ([Dmitry Novikov](https://github.com/dmitry-sles-novikov))。 +* `arrowFlight` テーブル関数に認証と SSL のサポートを追加しました。 [#87120](https://github.com/ClickHouse/ClickHouse/pull/87120) ([Vitaly Baranov](https://github.com/vitlibar))。 +* `storage_class_name` という名前の新しいパラメータを `S3` テーブルエンジンおよび `s3` テーブル関数に追加し、AWS が提供する Intelligent-Tiering を指定できるようにしました。キーと値の形式および位置指定形式(非推奨)の両方をサポートします。 [#87122](https://github.com/ClickHouse/ClickHouse/pull/87122) ([alesapin](https://github.com/alesapin))。 +* Iceberg テーブルエンジン用の `ALTER UPDATE`。 [#86059](https://github.com/ClickHouse/ClickHouse/pull/86059) ([scanhex12](https://github.com/scanhex12)). +* SELECT ステートメントの実行時に Iceberg メタデータファイルを取得できるシステムテーブル `iceberg_metadata_log` を追加。[#86152](https://github.com/ClickHouse/ClickHouse/pull/86152) ([scanhex12](https://github.com/scanhex12))。 +* `Iceberg` および `DeltaLake` テーブルで、ストレージレベルの設定 `disk` を使用したカスタムディスク構成をサポートしました。 [#86778](https://github.com/ClickHouse/ClickHouse/pull/86778) ([scanhex12](https://github.com/scanhex12)). +* データレイク用ディスクで Azure をサポートしました。 [#87173](https://github.com/ClickHouse/ClickHouse/pull/87173) ([scanhex12](https://github.com/scanhex12)). +* Azure Blob Storage 上で `Unity` カタログをサポート。 [#80013](https://github.com/ClickHouse/ClickHouse/pull/80013) ([Smita Kulkarni](https://github.com/SmitaRKulkarni))。 +* `Iceberg` への書き込みで、より多くのフォーマット(`ORC`、`Avro`)をサポートしました。これにより [#86179](https://github.com/ClickHouse/ClickHouse/issues/86179) が解決されました。[#87277](https://github.com/ClickHouse/ClickHouse/pull/87277)([scanhex12](https://github.com/scanhex12))。 +* データベースレプリカに関する情報を保持する新しいシステムテーブル `database_replicas` を追加しました。 [#83408](https://github.com/ClickHouse/ClickHouse/pull/83408) ([Konstantin Morozov](https://github.com/k-morozov)). +* 片方の配列から別の配列を集合として差し引く関数 `arrayExcept` を追加しました。 [#82368](https://github.com/ClickHouse/ClickHouse/pull/82368) ([Joanna Hulboj](https://github.com/jh0x)). +* 新しい `system.aggregated_zookeeper_log` テーブルを追加しました。このテーブルには、ZooKeeper の操作に関する統計情報(例: 操作回数、平均レイテンシ、エラー数)が、セッション ID、親パス、および操作種別ごとにグループ化されて格納されており、一定間隔でディスクに書き出されます。 [#85102](https://github.com/ClickHouse/ClickHouse/pull/85102) [#87208](https://github.com/ClickHouse/ClickHouse/pull/87208) ([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 +* 新しい関数 `isValidASCII` を追加。入力の String または FixedString が ASCII バイト(0x00〜0x7F)のみを含む場合は 1 を返し、それ以外の場合は 0 を返します。[#85377](https://github.com/ClickHouse/ClickHouse/issues/85377) をクローズします。... [#85786](https://github.com/ClickHouse/ClickHouse/pull/85786)([rajat mohan](https://github.com/rajatmohan22))。 +* ブール値の設定は、引数なしで指定できます。例えば `SET use_query_cache;` のように記述すると、true を設定したことと同等になります。 [#85800](https://github.com/ClickHouse/ClickHouse/pull/85800) ([thraeka](https://github.com/thraeka))。 +* 新しい構成オプション `logger.startupLevel` と `logger.shutdownLevel` により、ClickHouse の起動時およびシャットダウン時のログレベルをそれぞれ上書きできるようになりました。 [#85967](https://github.com/ClickHouse/ClickHouse/pull/85967) ([Lennard Eijsackers](https://github.com/Blokje5)). +* 集約関数 `timeSeriesChangesToGrid` および `timeSeriesResetsToGrid`。`timeSeriesRateToGrid` と同様に動作し、開始タイムスタンプ、終了タイムスタンプ、ステップ、ルックバックウィンドウといったパラメータに加えて、タイムスタンプと値の 2 つの引数を受け取りますが、各ウィンドウで少なくとも 2 サンプルを必要とするのではなく、1 サンプル以上あればよい点が異なります。PromQL の `changes`/`resets` を計算し、パラメータで定義されるタイムグリッドの各タイムスタンプについて、指定されたウィンドウ内でサンプル値が変化または減少した回数をカウントします。戻り値の型は `Array(Nullable(Float64))` です。 [#86010](https://github.com/ClickHouse/ClickHouse/pull/86010) ([Stephen Chi](https://github.com/stephchi0))。 +* 一時テーブルと同様に、`CREATE TEMPORARY VIEW` 構文で一時ビューを作成できるようにしました。 [#86432](https://github.com/ClickHouse/ClickHouse/pull/86432) ([Aly Kafoury](https://github.com/AlyHKafoury))。 +* CPU およびメモリ使用量に関する警告を `system.warnings` テーブルに追加。 [#86838](https://github.com/ClickHouse/ClickHouse/pull/86838) ([Bharat Nallan](https://github.com/bharatnc))。 +* `Protobuf` 入力で `oneof` インジケーターをサポートしました。oneof のどの部分が存在するかを示すために、専用のカラムを使用できます。メッセージに [oneof](https://protobuf.dev/programming-guides/proto3/#oneof) が含まれていて、かつ `input_format_protobuf_oneof_presence` が設定されている場合、ClickHouse はどの oneof フィールドが見つかったかを示すカラムを自動的に設定します。 [#82885](https://github.com/ClickHouse/ClickHouse/pull/82885) ([Ilya Golshtein](https://github.com/ilejn)). +* jemalloc の内部ツールに基づいてアロケーションプロファイリングを改善しました。グローバル jemalloc プロファイラは、設定 `jemalloc_enable_global_profiler` を有効化することで利用可能になりました。サンプリングされたグローバルなアロケーションおよび解放は、設定 `jemalloc_collect_global_profile_samples_in_trace_log` を有効化することで、`JemallocSample` 型として `system.trace_log` に保存できるようになりました。jemalloc プロファイリングは、設定 `jemalloc_enable_profiler` を用いて、クエリごとに個別に有効化できるようになりました。`system.trace_log` へのサンプルの保存は、設定 `jemalloc_collect_profile_samples_in_trace_log` を使用してクエリ単位で制御できます。jemalloc を新しいバージョンに更新しました。 [#85438](https://github.com/ClickHouse/ClickHouse/pull/85438) ([Antonio Andelic](https://github.com/antonio2368))。 +* Iceberg テーブルを `DROP` した際にファイルを削除するための新しい設定を追加しました。これにより [#86211](https://github.com/ClickHouse/ClickHouse/issues/86211) が解決しました。 [#86501](https://github.com/ClickHouse/ClickHouse/pull/86501) ([scanhex12](https://github.com/scanhex12))。 #### 実験的機能 -* 転置テキストインデックスが、RAM に収まらないデータセットに対してもスケーラブルになるように、ゼロから作り直されました。 [#86485](https://github.com/ClickHouse/ClickHouse/pull/86485) ([Anton Popov](https://github.com/CurtizJ)). -* JOIN の順序付けに統計情報が使用されるようになりました。この機能は `allow_statistics_optimize = 1` と `query_plan_optimize_join_order_limit = 10` を設定することで有効化できます。 [#86822](https://github.com/ClickHouse/ClickHouse/pull/86822) ([Han Fei](https://github.com/hanfei1991)). -* `alter table ... materialize statistics all` をサポートし、テーブルに対してすべての統計情報をマテリアライズできるようになりました。 [#87197](https://github.com/ClickHouse/ClickHouse/pull/87197) ([Han Fei](https://github.com/hanfei1991)). +* 反転テキストインデックスをゼロから再実装し、RAM に収まりきらないデータセットに対してもスケーラブルにしました。 [#86485](https://github.com/ClickHouse/ClickHouse/pull/86485) ([Anton Popov](https://github.com/CurtizJ)). +* JOIN の順序付けが統計情報を利用するようになりました。この機能は `allow_statistics_optimize = 1` および `query_plan_optimize_join_order_limit = 10` を設定することで有効化できます。 [#86822](https://github.com/ClickHouse/ClickHouse/pull/86822) ([Han Fei](https://github.com/hanfei1991)). +* `alter table ... materialize statistics all` をサポートしました。これによりテーブルのすべての統計情報がマテリアライズされます。 [#87197](https://github.com/ClickHouse/ClickHouse/pull/87197) ([Han Fei](https://github.com/hanfei1991)). +#### パフォーマンス向上 -#### パフォーマンスの向上 - -* 読み取り時にスキップインデックスを使用してデータパーツをフィルタリングし、不要なインデックス読み取りを削減できるようにしました。新しい設定 `use_skip_indexes_on_data_read`(デフォルトは無効)で制御されます。これは [#75774](https://github.com/ClickHouse/ClickHouse/issues/75774) に対応するものです。また、[#81021](https://github.com/ClickHouse/ClickHouse/issues/81021) と共通する基盤処理の一部も含まれています。[#81526](https://github.com/ClickHouse/ClickHouse/pull/81526)([Amos Bird](https://github.com/amosbird))。 -* `query_plan_optimize_join_order_limit` 設定によって制御される、パフォーマンス向上のために JOIN を自動的に並べ替える JOIN 順序最適化を追加しました。なお、この JOIN 順序最適化は現時点では統計情報のサポートが限定的であり、主にストレージエンジンからの行数推定に依存しています。より高度な統計収集およびカーディナリティ推定は今後のリリースで追加される予定です。**アップグレード後に JOIN クエリで問題が発生した場合**、一時的な回避策として `SET query_plan_use_new_logical_join_step = 0` を設定して新しい実装を無効化し、その上で問題を報告して調査を依頼してください。**USING 句からの識別子の解決に関する注意**: `OUTER JOIN ... USING` 句における coalesce された列(USING によりマージされた列)の解決方法を、より一貫性のあるものに変更しました。以前は、OUTER JOIN で USING 列と修飾された列 (`a, t1.a, t2.a`) の両方を選択した場合、USING 列が誤って `t1.a` に解決され、左側にマッチしない右テーブルからの行について 0/NULL が表示されていました。現在では、USING 句からの識別子は常に coalesce された列に解決され、修飾された識別子は、クエリ内に他にどの識別子が存在するかにかかわらず、coalesce されていない元の列に解決されます。例えば、次のようになります: ```sql SELECT a, t1.a, t2.a FROM (SELECT 1 as a WHERE 0) t1 FULL JOIN (SELECT 2 as a) t2 USING (a) -- 変更前: a=0, t1.a=0, t2.a=2 (誤り - 'a' が t1.a に解決されている) -- 変更後: a=2, t1.a=0, t2.a=2 (正しい - 'a' は coalesce されている)。 [#80848](https://github.com/ClickHouse/ClickHouse/pull/80848) ([Vladimir Cherkasov](https://github.com/vdimir)). -* データレイク向けの分散 `INSERT SELECT`。 [#86783](https://github.com/ClickHouse/ClickHouse/pull/86783) ([scanhex12](https://github.com/scanhex12)). +* 読み取り時にスキップインデックスを使用してデータパーツをフィルタリングし、不要なインデックスの読み取りを削減できるようにしました。新しい設定 `use_skip_indexes_on_data_read`(デフォルトでは無効)で制御されます。[#75774](https://github.com/ClickHouse/ClickHouse/issues/75774) に対応しています。また、[#81021](https://github.com/ClickHouse/ClickHouse/issues/81021) と共通の基盤となる変更も一部含まれています。[#81526](https://github.com/ClickHouse/ClickHouse/pull/81526)([Amos Bird](https://github.com/amosbird))。 +* `query_plan_optimize_join_order_limit` 設定で制御される、パフォーマンス向上のために JOIN を自動的に並べ替える JOIN 順序最適化を追加しました。なお、この JOIN 順序最適化は現時点では統計情報の利用が限定的であり、主にストレージエンジンからの行数推定に依存しています。より高度な統計情報の収集とカーディナリティ推定は、今後のリリースで追加される予定です。**アップグレード後に JOIN クエリで問題が発生した場合**、一時的な回避策として `SET query_plan_use_new_logical_join_step = 0` を設定して新しい実装を無効化し、調査のために問題を報告してください。**USING 句からの識別子解決に関する注意**: `OUTER JOIN ... USING` 句から得られる coalesce された列の解決方法を、より一貫性のある動作に変更しました。以前は、OUTER JOIN で USING 句の列と修飾付き列 (`a, t1.a, t2.a`) の両方を選択した場合、USING 句の列が誤って `t1.a` に解決され、左側に対応する行がない右テーブルの行で 0/NULL が表示されていました。現在は、USING 句からの識別子は常に coalesce された列に解決され、修飾付き識別子は、クエリ内にどのような他の識別子が存在するかに関わらず、非 coalesce な列に解決されます。例えば: ```sql SELECT a, t1.a, t2.a FROM (SELECT 1 as a WHERE 0) t1 FULL JOIN (SELECT 2 as a) t2 USING (a) -- 変更前: a=0, t1.a=0, t2.a=2 (誤り - 'a' が t1.a に解決されている) -- 変更後: a=2, t1.a=0, t2.a=2 (正しい - 'a' が coalesce されている)。 [#80848](https://github.com/ClickHouse/ClickHouse/pull/80848) ([Vladimir Cherkasov](https://github.com/vdimir)). +* データレイク向けの分散 `INSERT SELECT`。 [#86783](https://github.com/ClickHouse/ClickHouse/pull/86783) ([scanhex12](https://github.com/scanhex12))。 * `func(primary_column) = 'xx'` や `column in (xxx)` のような条件に対する PREWHERE の最適化を改善しました。 [#85529](https://github.com/ClickHouse/ClickHouse/pull/85529) ([李扬](https://github.com/taiyang-li))。 -* JOIN の書き換えを実装しました。1. フィルタ条件が、マッチした行またはマッチしなかった行に対して常に偽となる場合、`LEFT ANY JOIN` と `RIGHT ANY JOIN` を `SEMI`/`ANTI` JOIN に変換します。この最適化は、新しい設定 `query_plan_convert_any_join_to_semi_or_anti_join` によって制御されます。2. 片側の非マッチ行に対してフィルタ条件が常に偽となる場合、`FULL ALL JOIN` を `LEFT ALL` または `RIGHT ALL` JOIN に変換します。 [#86028](https://github.com/ClickHouse/ClickHouse/pull/86028) ([Dmitry Novik](https://github.com/novikd))。 -* 軽量削除実行後の垂直マージのパフォーマンスを改善しました。 [#86169](https://github.com/ClickHouse/ClickHouse/pull/86169) ([Anton Popov](https://github.com/CurtizJ)). -* `LEFT/RIGHT` Join でマッチしない行が多数存在する場合の `HashJoin` の性能をわずかに向上しました。 [#86312](https://github.com/ClickHouse/ClickHouse/pull/86312) ([Nikita Taranov](https://github.com/nickitat)). -* 基数ソート: コンパイラが SIMD を利用し、より効率的にプリフェッチできるようにします。Intel CPU 上でのみソフトウェア・プリフェッチを使うために動的ディスパッチを使用します。[@taiyang-li](https://github.com/ClickHouse/ClickHouse/pull/77029) による作業を継続したものです。[#86378](https://github.com/ClickHouse/ClickHouse/pull/86378)([Raúl Marín](https://github.com/Algunenano))。 -* 多数のパーツを持つテーブルに対する短いクエリのパフォーマンスを改善(`deque` の代わりに `devector` を使用することで `MarkRanges` を最適化)。 [#86933](https://github.com/ClickHouse/ClickHouse/pull/86933) ([Azat Khuzhin](https://github.com/azat)). -* 結合モードにおけるパッチパーツの適用パフォーマンスを改善しました。 [#87094](https://github.com/ClickHouse/ClickHouse/pull/87094) ([Anton Popov](https://github.com/CurtizJ)). -* 設定 `query_condition_cache_selectivity_threshold`(デフォルト値: 1.0)を追加しました。これにより、選択性の低い述語のスキャン結果はクエリ条件キャッシュへの挿入対象から除外されます。その代償としてキャッシュヒット率は低下しますが、クエリ条件キャッシュのメモリ使用量を削減できます。 [#86076](https://github.com/ClickHouse/ClickHouse/pull/86076) ([zhongyuankai](https://github.com/zhongyuankai)). -* Iceberg への書き込み時に使用するメモリ量を削減しました。 [#86544](https://github.com/ClickHouse/ClickHouse/pull/86544) ([scanhex12](https://github.com/scanhex12)). - - - - - -#### 改善 - -* 1 回の INSERT で Iceberg に複数のデータファイルを書き込むことをサポートしました。上限を制御するために、新しい設定 `iceberg_insert_max_rows_in_data_file` と `iceberg_insert_max_bytes_in_data_file` を追加しました。 [#86275](https://github.com/ClickHouse/ClickHouse/pull/86275) ([scanhex12](https://github.com/scanhex12)). -* Delta Lake に挿入されるデータファイルごとの行数およびバイト数の上限を追加しました。設定 `delta_lake_insert_max_rows_in_data_file` と `delta_lake_insert_max_bytes_in_data_file` によって制御されます。 [#86357](https://github.com/ClickHouse/ClickHouse/pull/86357) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Iceberg への書き込みにおいて、パーティションに使用できる型の種類を拡張しました。これにより [#86206](https://github.com/ClickHouse/ClickHouse/issues/86206) がクローズされました。 [#86298](https://github.com/ClickHouse/ClickHouse/pull/86298) ([scanhex12](https://github.com/scanhex12))。 -* S3 のリトライ戦略を設定可能にし、設定用 XML ファイルを変更した場合に S3 ディスクの設定をホットリロードできるようにしました。 [#82642](https://github.com/ClickHouse/ClickHouse/pull/82642) ([RinChanNOW](https://github.com/RinChanNOWWW)). -* S3(Azure)Queue テーブルエンジンを改善し、ZooKeeper への接続が失われても重複が発生することなく処理を継続できるようにしました。これには、S3Queue の設定 `use_persistent_processing_nodes` を有効にする必要があります(`ALTER TABLE MODIFY SETTING` で変更可能)。[#85995](https://github.com/ClickHouse/ClickHouse/pull/85995)([Kseniia Sumarokova](https://github.com/kssenii))。 -* `TO` の後にクエリパラメータを使用してマテリアライズドビューを作成できます。例えば、`CREATE MATERIALIZED VIEW mv TO {to_table:Identifier} AS SELECT * FROM src_table` のように記述します。 [#84899](https://github.com/ClickHouse/ClickHouse/pull/84899) ([Diskein](https://github.com/Diskein))。 -* `Kafka2` テーブルエンジンに対して不正な設定が指定された場合に、ユーザー向けの案内をより明確にしました。 [#83701](https://github.com/ClickHouse/ClickHouse/pull/83701) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). -* `Time` 型にタイムゾーンを指定することはできなくなりました(そもそも意味のない指定だったためです)。 [#84689](https://github.com/ClickHouse/ClickHouse/pull/84689) ([Yarik Briukhovetskyi](https://github.com/yariks5s))。 -* `best_effort` モードでの Time/Time64 型のパースに関連するロジックを簡素化し、発生し得るいくつかのバグを回避できるようにしました。 [#84730](https://github.com/ClickHouse/ClickHouse/pull/84730) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* クラスターモード向けの `deltaLakeAzure` と同様の `deltaLakeAzureCluster` 関数と、`deltaLakeCluster` のエイリアスである `deltaLakeS3Cluster` 関数を追加し、[#85358](https://github.com/ClickHouse/ClickHouse/issues/85358) を解決しました。[#85547](https://github.com/ClickHouse/ClickHouse/pull/85547)([Smita Kulkarni](https://github.com/SmitaRKulkarni))。 -* バックアップ時と同様に、通常のコピー操作にも `azure_max_single_part_copy_size` 設定を適用します。 [#85767](https://github.com/ClickHouse/ClickHouse/pull/85767) ([Ilya Golshtein](https://github.com/ilejn)). -* S3 Object Storage でリトライ可能なエラーが発生した場合に、S3 クライアントスレッドをスローダウンするようにしました。これにより、従来の設定 `backup_slow_all_threads_after_retryable_s3_error` を S3 ディスクにも拡張し、より汎用的な名前である `s3_slow_all_threads_after_retryable_error` に名称変更しました。 [#85918](https://github.com/ClickHouse/ClickHouse/pull/85918) ([Julia Kartseva](https://github.com/jkartseva)). -* 設定 allow_experimental_variant/dynamic/json および enable_variant/dynamic/json は非推奨としてマークされました。現在は 3 種類すべてが無条件に有効化されています。 [#85934](https://github.com/ClickHouse/ClickHouse/pull/85934) ([Pavel Kruglov](https://github.com/Avogar)). -* `http_handlers` で完全な URL 文字列(スキーマおよび host:port を含む)によるフィルタリング(`full_url` ディレクティブ)のサポートを追加。 [#86155](https://github.com/ClickHouse/ClickHouse/pull/86155) ([Azat Khuzhin](https://github.com/azat)). -* 新しい設定 `allow_experimental_delta_lake_writes` を追加しました。 [#86180](https://github.com/ClickHouse/ClickHouse/pull/86180) ([Kseniia Sumarokova](https://github.com/kssenii))。 -* init.d スクリプトにおける systemd の検出ロジックを修正し、「Install packages」チェックの問題を解消。 [#86187](https://github.com/ClickHouse/ClickHouse/pull/86187) ([Azat Khuzhin](https://github.com/azat)). -* 新しい `startup_scripts_failure_reason` 次元メトリクスを追加します。このメトリクスは、起動スクリプトの失敗を引き起こすさまざまなエラータイプを区別するために必要です。特にアラート目的で、一過性のエラー(例: `MEMORY_LIMIT_EXCEEDED` や `KEEPER_EXCEPTION`)と非一過性のエラーを区別する必要があります。[#86202](https://github.com/ClickHouse/ClickHouse/pull/86202)([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 +* JOIN の書き換えを実装しました。1. フィルタ条件が一致行または不一致行に対して常に偽となる場合、`LEFT ANY JOIN` と `RIGHT ANY JOIN` を `SEMI`/`ANTI` JOIN に変換します。この最適化は、新しい設定 `query_plan_convert_any_join_to_semi_or_anti_join` によって制御されます。2. いずれか一方の側の不一致行に対してフィルタ条件が常に偽となる場合、`FULL ALL JOIN` を `LEFT ALL` または `RIGHT ALL` JOIN に変換します。 [#86028](https://github.com/ClickHouse/ClickHouse/pull/86028) ([Dmitry Novik](https://github.com/novikd))。 +* 軽量削除を実行した後の垂直マージのパフォーマンスを改善しました。 [#86169](https://github.com/ClickHouse/ClickHouse/pull/86169) ([Anton Popov](https://github.com/CurtizJ)). +* `LEFT/RIGHT` 結合で不一致行が多数存在する場合の `HashJoin` のパフォーマンスをわずかに改善しました。 [#86312](https://github.com/ClickHouse/ClickHouse/pull/86312) ([Nikita Taranov](https://github.com/nickitat)). +* 基数ソート:コンパイラによるSIMDの活用と、より効率的なプリフェッチを支援します。Intel CPUでのみソフトウェアプリフェッチを行うために、動的ディスパッチを使用します。[@taiyang-li](https://github.com/taiyang-li) による [https://github.com/ClickHouse/ClickHouse/pull/77029](https://github.com/ClickHouse/ClickHouse/pull/77029) の作業を継続したものです。[#86378](https://github.com/ClickHouse/ClickHouse/pull/86378)([Raúl Marín](https://github.com/Algunenano))。 +* 多数のパーツを持つテーブルに対する短いクエリのパフォーマンスを向上させました(`MarkRanges` を `deque` ではなく `devector` を使って最適化)。 [#86933](https://github.com/ClickHouse/ClickHouse/pull/86933) ([Azat Khuzhin](https://github.com/azat)). +* JOIN モードにおけるパッチパーツ適用処理のパフォーマンスを改善しました。 [#87094](https://github.com/ClickHouse/ClickHouse/pull/87094) ([Anton Popov](https://github.com/CurtizJ)). +* 設定 `query_condition_cache_selectivity_threshold`(デフォルト値: 1.0)を追加しました。選択度が低い述語のスキャン結果を query condition cache への挿入対象から除外します。これにより、キャッシュヒット率が低下する代わりに、query condition cache のメモリ消費量を削減できます。 [#86076](https://github.com/ClickHouse/ClickHouse/pull/86076) ([zhongyuankai](https://github.com/zhongyuankai)). +* Iceberg への書き込み時のメモリ使用量を削減。 [#86544](https://github.com/ClickHouse/ClickHouse/pull/86544) ([scanhex12](https://github.com/scanhex12)). + +#### 改善点 + +* 1 回の INSERT で Iceberg に複数のデータファイルを書き込めるようにしました。上限を制御するために、新しい設定 `iceberg_insert_max_rows_in_data_file` および `iceberg_insert_max_bytes_in_data_file` を追加しました。 [#86275](https://github.com/ClickHouse/ClickHouse/pull/86275) ([scanhex12](https://github.com/scanhex12)). +* Delta Lake に挿入されるデータファイルごとの行数/バイト数の上限を追加しました。`delta_lake_insert_max_rows_in_data_file` および `delta_lake_insert_max_bytes_in_data_file` の設定で制御されます。[#86357](https://github.com/ClickHouse/ClickHouse/pull/86357) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Iceberg 書き込みで、より多くのパーティション種別をサポートしました。これにより [#86206](https://github.com/ClickHouse/ClickHouse/issues/86206) がクローズされました。[#86298](https://github.com/ClickHouse/ClickHouse/pull/86298)([scanhex12](https://github.com/scanhex12))。 +* S3 のリトライ戦略を設定可能にし、設定 XML ファイルの変更に応じて S3 ディスクの設定をホットリロードできるようにしました。 [#82642](https://github.com/ClickHouse/ClickHouse/pull/82642) ([RinChanNOW](https://github.com/RinChanNOWWW)). +* S3(Azure)Queue テーブルエンジンを改良し、ZooKeeper の接続喪失が発生しても重複が生じることなく処理を継続できるようにしました。S3Queue の設定 `use_persistent_processing_nodes` を有効にする必要があります(`ALTER TABLE MODIFY SETTING` で変更できます)。 [#85995](https://github.com/ClickHouse/ClickHouse/pull/85995) ([Kseniia Sumarokova](https://github.com/kssenii))。 +* `TO` の後にクエリパラメータを指定してマテリアライズドビューを作成できます。例:`CREATE MATERIALIZED VIEW mv TO {to_table:Identifier} AS SELECT * FROM src_table`。 [#84899](https://github.com/ClickHouse/ClickHouse/pull/84899) ([Diskein](https://github.com/Diskein))。 +* `Kafka2` テーブルエンジンで誤った設定が指定された場合に、ユーザー向けの案内がより明確になるよう改善しました。 [#83701](https://github.com/ClickHouse/ClickHouse/pull/83701) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). +* `Time` 型にタイムゾーンを指定することはできなくなりました(もともとその指定には意味がありませんでした)。 [#84689](https://github.com/ClickHouse/ClickHouse/pull/84689) ([Yarik Briukhovetskyi](https://github.com/yariks5s))。 +* `best_effort` モードでの Time/Time64 のパース処理に関するロジックを簡素化し、いくつかのバグを回避しました。 [#84730](https://github.com/ClickHouse/ClickHouse/pull/84730) ([Yarik Briukhovetskyi](https://github.com/yariks5s))。 +* `deltaLakeAzureCluster` 関数(クラスターモード用の `deltaLakeAzure` と同様)および `deltaLakeS3Cluster` 関数(`deltaLakeCluster` のエイリアス)を追加しました。[#85358](https://github.com/ClickHouse/ClickHouse/issues/85358) を解決しました。[#85547](https://github.com/ClickHouse/ClickHouse/pull/85547)([Smita Kulkarni](https://github.com/SmitaRKulkarni))。 +* `azure_max_single_part_copy_size` 設定をバックアップ時と同様に通常のコピー操作にも適用するようにしました。 [#85767](https://github.com/ClickHouse/ClickHouse/pull/85767) ([Ilya Golshtein](https://github.com/ilejn)). +* S3 Object Storage において、リトライ可能なエラー発生時に S3 クライアントスレッドをスローダウンするようにしました。この変更により、従来の設定 `backup_slow_all_threads_after_retryable_s3_error` を S3 ディスクにも適用し、より汎用的な名前である `s3_slow_all_threads_after_retryable_error` に変更しました。 [#85918](https://github.com/ClickHouse/ClickHouse/pull/85918) ([Julia Kartseva](https://github.com/jkartseva)). +* Mark 設定において、allow_experimental_variant/dynamic/json と enable_variant/dynamic/json は非推奨となりました。現在は、これら 3 種類はすべて無条件に有効になっています。 [#85934](https://github.com/ClickHouse/ClickHouse/pull/85934) ([Pavel Kruglov](https://github.com/Avogar)). +* `http_handlers` で、スキーマおよびホスト:ポートを含む完全な URL 文字列によるフィルタリング(`full_url` ディレクティブ)をサポートしました。 [#86155](https://github.com/ClickHouse/ClickHouse/pull/86155) ([Azat Khuzhin](https://github.com/azat)). +* 新しい設定 `allow_experimental_delta_lake_writes` を追加。[#86180](https://github.com/ClickHouse/ClickHouse/pull/86180)([Kseniia Sumarokova](https://github.com/kssenii))。 +* init.d スクリプトでの systemd 検出を修正し、「Install packages」チェックの不具合を解消しました。 [#86187](https://github.com/ClickHouse/ClickHouse/pull/86187) ([Azat Khuzhin](https://github.com/azat))。 +* 新しい `startup_scripts_failure_reason` 次元メトリクスを追加します。このメトリクスは、起動スクリプトの失敗を引き起こすさまざまなエラー種別を区別するために必要です。特にアラート用途では、一時的なエラー(例: `MEMORY_LIMIT_EXCEEDED` や `KEEPER_EXCEPTION`)と非一時的なエラーを区別する必要があります。[#86202](https://github.com/ClickHouse/ClickHouse/pull/86202)([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 * Iceberg テーブルのパーティション指定で `identity` 関数を省略できるようにしました。 [#86314](https://github.com/ClickHouse/ClickHouse/pull/86314) ([scanhex12](https://github.com/scanhex12)). -* 特定のチャネルに対してのみ JSON 形式のログ出力を有効化できるようになりました。これを行うには、`logger.formatting.channel` を `syslog`/`console`/`errorlog`/`log` のいずれかに設定してください。 [#86331](https://github.com/ClickHouse/ClickHouse/pull/86331) ([Azat Khuzhin](https://github.com/azat)). -* `WHERE` 句でネイティブな数値を使用できるようにしました。これらはすでに論理関数の引数としては使用可能でした。これにより、filter-push-down および move-to-prewhere の各最適化が簡素化されます。 [#86390](https://github.com/ClickHouse/ClickHouse/pull/86390) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). -* メタデータが破損したカタログに対して `SYSTEM DROP REPLICA` を実行した際に発生していたエラーを修正しました。 [#86391](https://github.com/ClickHouse/ClickHouse/pull/86391) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). -* Azure では、アクセスのプロビジョニングに時間がかかる場合があるため、ディスクアクセスチェック(`skip_access_check = 0`)に対するリトライ回数を増やしました。 [#86419](https://github.com/ClickHouse/ClickHouse/pull/86419) ([Alexander Tokmakov](https://github.com/tavplubix))。 -* `timeSeries*()` 関数の staleness ウィンドウを左開区間・右閉区間にしました。 [#86588](https://github.com/ClickHouse/ClickHouse/pull/86588) ([Vitaly Baranov](https://github.com/vitlibar)). -* `FailedInternal*Query` プロファイルイベントを追加しました。 [#86627](https://github.com/ClickHouse/ClickHouse/pull/86627) ([Shane Andrade](https://github.com/mauidude)). -* 設定ファイル経由で追加された、名前にドットを含むユーザーの処理を修正します。 [#86633](https://github.com/ClickHouse/ClickHouse/pull/86633) ([Mikhail Koviazin](https://github.com/mkmkme))。 -* クエリにおけるメモリ使用量の非同期メトリクス(`QueriesMemoryUsage` および `QueriesPeakMemoryUsage`)を追加しました。 [#86669](https://github.com/ClickHouse/ClickHouse/pull/86669) ([Azat Khuzhin](https://github.com/azat)). -* `clickhouse-benchmark --precise` フラグを使用すると、QPS およびその他のインターバルごとのメトリクスをより正確に報告できます。クエリの実行時間がレポート間隔 `--delay D` と同程度の場合に、QPS を安定して得るのに役立ちます。 [#86684](https://github.com/ClickHouse/ClickHouse/pull/86684) ([Sergei Trifonov](https://github.com/serxa))。 -* Linux スレッドの nice 値を構成可能にし、一部のスレッド(merge/mutate、query、マテリアライズドビュー、ZooKeeper クライアント)により高いまたは低い優先度を割り当てられるようにしました。 [#86703](https://github.com/ClickHouse/ClickHouse/pull/86703) ([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 -* 競合状態が原因でマルチパートアップロード中に元の例外が失われた場合に発生する、誤解を招く「specified upload does not exist」エラーを修正。[#86725](https://github.com/ClickHouse/ClickHouse/pull/86725) ([Julia Kartseva](https://github.com/jkartseva))。 -* `EXPLAIN` クエリにおけるクエリプランの説明を制限しました。`EXPLAIN` 以外のクエリについては説明を生成しないようにしました。設定 `query_plan_max_step_description_length` を追加しました。 [#86741](https://github.com/ClickHouse/ClickHouse/pull/86741) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). -* 保留中のシグナルを調整できるようにして、`CANNOT_CREATE_TIMER`(クエリプロファイラ用の `query_profiler_real_time_period_ns` / `query_profiler_cpu_time_period_ns`)を回避できる可能性を高めました。また、イントロスペクションのために `/proc/self/status` から `SigQ` を収集するようにしました(`ProcessSignalQueueSize` が `ProcessSignalQueueLimit` に近い場合、`CANNOT_CREATE_TIMER` エラーが発生しやすくなります)。 [#86760](https://github.com/ClickHouse/ClickHouse/pull/86760) ([Azat Khuzhin](https://github.com/azat))。 -* Keeper における `RemoveRecursive` リクエストのパフォーマンスを改善。 [#86789](https://github.com/ClickHouse/ClickHouse/pull/86789) ([Antonio Andelic](https://github.com/antonio2368)). -* JSON 型の出力時に `PrettyJSONEachRow` に含まれる余分な空白を削除しました。 [#86819](https://github.com/ClickHouse/ClickHouse/pull/86819) ([Pavel Kruglov](https://github.com/Avogar)). -* プレーンな書き込み可能ディスクでディレクトリを削除する際に、`prefix.path` の BLOB サイズを記録するようにしました。 [#86908](https://github.com/ClickHouse/ClickHouse/pull/86908) ([alesapin](https://github.com/alesapin)). -* リモートの ClickHouse インスタンス(ClickHouse Cloud を含む)に対してパフォーマンス テストを実行できるようになりました。使用例: `tests/performance/scripts/perf.py tests/performance/math.xml --runs 10 --user --password --host --port --secure`。 [#86995](https://github.com/ClickHouse/ClickHouse/pull/86995) ([Raufs Dunamalijevs](https://github.com/rienath))。 -* 16MiB超のメモリを割り当てることが知られている箇所(ソート、非同期インサート、ファイルログ)でメモリ制限を遵守するようにしました。 [#87035](https://github.com/ClickHouse/ClickHouse/pull/87035) ([Azat Khuzhin](https://github.com/azat)). -* `network_compression_method` がサポートされている汎用コーデック以外に設定されている場合は、例外をスローします。 [#87097](https://github.com/ClickHouse/ClickHouse/pull/87097) ([Robert Schulze](https://github.com/rschu1ze)). -* システムテーブル `system.query_cache` は、これまでは共有エントリ、または同一ユーザーかつ同一ロールの非共有エントリのみを返していましたが、今では *すべての* クエリ結果キャッシュエントリを返すようになりました。非共有エントリは *クエリ結果* を公開しないことが前提となっており、一方で `system.query_cache` は *クエリ文字列* を返す仕様になっているため、これは問題ありません。この変更により、システムテーブルの挙動は `system.query_log` により近いものになりました。 [#87104](https://github.com/ClickHouse/ClickHouse/pull/87104) ([Robert Schulze](https://github.com/rschu1ze))。 -* `parseDateTime` 関数で短絡評価を有効にしました。 [#87184](https://github.com/ClickHouse/ClickHouse/pull/87184) ([Pavel Kruglov](https://github.com/Avogar))。 -* `system.parts_columns` に新しいカラム `statistics` を追加しました。 [#87259](https://github.com/ClickHouse/ClickHouse/pull/87259) ([Han Fei](https://github.com/hanfei1991)). - - - - - -#### バグ修正(公式安定版リリースにおけるユーザー可視の不具合) - -* レプリケートされたデータベースおよび内部レプリケーションされるテーブルに対しては、`ALTER` クエリの結果は発行元ノード上でのみ検証されます。これにより、すでにコミット済みの `ALTER` クエリが他のノード上で停止してしまう状況が解消されます。 [#83849](https://github.com/ClickHouse/ClickHouse/pull/83849) ([János Benjamin Antal](https://github.com/antaljanosbenjamin))。 -* `BackgroundSchedulePool` における各種タスクの数を制限します。1 つの種類のタスクだけですべてのスロットが占有され、他のタスクがスタベーション(飢餓状態)に陥る状況を防ぎます。また、タスク同士が互いを待機することによるデッドロックも回避します。これは `background_schedule_pool_max_parallel_tasks_per_type_ratio` サーバー設定によって制御されます。[#84008](https://github.com/ClickHouse/ClickHouse/pull/84008)([Alexander Tokmakov](https://github.com/tavplubix))。 -* データベースレプリカを復旧する際は、テーブルを正しくシャットダウンする必要があります。適切にシャットダウンしないと、データベースレプリカの復旧中に一部のテーブルエンジンで LOGICAL_ERROR が発生することがあります。 [#84744](https://github.com/ClickHouse/ClickHouse/pull/84744) ([Antonio Andelic](https://github.com/antonio2368)). -* データベース名のタイプミス修正候補を生成する際に、アクセス権をチェックするように変更しました。 [#85371](https://github.com/ClickHouse/ClickHouse/pull/85371) ([Dmitry Novik](https://github.com/novikd)). -* 1. Hive カラムに対する LowCardinality 2. 仮想カラムの前に Hive カラムを埋める([https://github.com/ClickHouse/ClickHouse/pull/81040](https://github.com/ClickHouse/ClickHouse/pull/81040) に必須) 3. Hive 向けの空フォーマットに対する LOGICAL_ERROR [#85528](https://github.com/ClickHouse/ClickHouse/issues/85528) 4. Hive のパーティションカラムのみが存在する場合のチェックを修正 5. すべての Hive カラムがスキーマで指定されていることをアサート 6. Hive を用いた parallel_replicas_cluster の一部修正 7. Hive utils の extractkeyValuePairs で順序付きコンテナを使用する([https://github.com/ClickHouse/ClickHouse/pull/81040](https://github.com/ClickHouse/ClickHouse/pull/81040) に必須)。[#85538](https://github.com/ClickHouse/ClickHouse/pull/85538)([Arthur Passos](https://github.com/arthurpassos))。 -* 配列マッピング使用時にエラーの原因となることがあった `IN` 関数の第1引数に対する不要な最適化を防止しました。 [#85546](https://github.com/ClickHouse/ClickHouse/pull/85546) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* Parquet ファイルが書き込まれた際に、Iceberg の source id と Parquet 名の対応関係がスキーマに合わせて調整されていませんでした。この PR では、現在のスキーマではなく、各 Iceberg データファイルに対して関連するスキーマを処理します。 [#85829](https://github.com/ClickHouse/ClickHouse/pull/85829) ([Daniil Ivanik](https://github.com/divanik)). -* ファイルのオープンとは別にファイルサイズを読み取っていた処理を修正します。これは、`5.10` リリース以前の Linux カーネルに存在したバグへの対応として導入された [https://github.com/ClickHouse/ClickHouse/pull/33372](https://github.com/ClickHouse/ClickHouse/pull/33372) に関連しています。[#85837](https://github.com/ClickHouse/ClickHouse/pull/85837)([Konstantin Bogdanov](https://github.com/thevar1able))。 -* カーネルレベルで IPv6 が無効化されているシステム(例: ipv6.disable=1 が設定された RHEL)でも、ClickHouse Keeper が起動に失敗することはなくなりました。最初の IPv6 リスナーの作成に失敗した場合、IPv4 リスナーへのフォールバックを試みるようになりました。 [#85901](https://github.com/ClickHouse/ClickHouse/pull/85901) ([jskong1124](https://github.com/jskong1124))。 -* このPRは [#77990](https://github.com/ClickHouse/ClickHouse/issues/77990) をクローズします。globalJoin における parallel replicas を対象とした TableFunctionRemote のサポートを追加しました。[#85929](https://github.com/ClickHouse/ClickHouse/pull/85929)([zoomxi](https://github.com/zoomxi))。 -* orcschemareader::initializeifneeded() のヌルポインタ不具合を修正。 このPRは次の issue を解決します: [#85292](https://github.com/ClickHouse/ClickHouse/issues/85292) ### ユーザー向け変更に関するドキュメントエントリ。 [#85951](https://github.com/ClickHouse/ClickHouse/pull/85951) ([yanglongwei](https://github.com/ylw510)). -* FROM 句内の相関サブクエリに対し、外側クエリの列を参照している場合にのみ許可するチェックを追加。[#85469](https://github.com/ClickHouse/ClickHouse/issues/85469) を修正。[#85402](https://github.com/ClickHouse/ClickHouse/issues/85402) を修正。[#85966](https://github.com/ClickHouse/ClickHouse/pull/85966)([Dmitry Novik](https://github.com/novikd))。 -* 他のカラムのマテリアライズド式でサブカラムが使用されているカラムに対する `ALTER UPDATE` 文の動作を修正しました。以前は、式内にサブカラムを含むマテリアライズドカラムが正しく更新されていませんでした。 [#85985](https://github.com/ClickHouse/ClickHouse/pull/85985) ([Pavel Kruglov](https://github.com/Avogar)). -* PK またはパーティション式でサブカラムが使用されているカラムを変更することを禁止しました。 [#86005](https://github.com/ClickHouse/ClickHouse/pull/86005) ([Pavel Kruglov](https://github.com/Avogar)). -* DeltaLake ストレージにおいて、非デフォルトのカラムマッピングモードを使用している場合のサブカラムの読み取りを修正しました。 [#86064](https://github.com/ClickHouse/ClickHouse/pull/86064) ([Kseniia Sumarokova](https://github.com/kssenii)). -* JSON 内の Enum ヒント付きパスで誤ったデフォルト値が使用されていた問題を修正。 [#86065](https://github.com/ClickHouse/ClickHouse/pull/86065) ([Pavel Kruglov](https://github.com/Avogar)). -* DataLake の Hive カタログ URL をパースする際に、入力をサニタイズするようにしました。[#86018](https://github.com/ClickHouse/ClickHouse/issues/86018) をクローズします。[#86092](https://github.com/ClickHouse/ClickHouse/pull/86092)([rajat mohan](https://github.com/rajatmohan22))。 -* ファイルシステムキャッシュの動的リサイズ時に発生する論理エラーを修正。 [#86122](https://github.com/ClickHouse/ClickHouse/issues/86122) をクローズ。 [https://github.com/ClickHouse/clickhouse-core-incidents/issues/473](https://github.com/ClickHouse/clickhouse-core-incidents/issues/473) をクローズ。 [#86130](https://github.com/ClickHouse/ClickHouse/pull/86130)([Kseniia Sumarokova](https://github.com/kssenii))。 -* DatabaseReplicatedSettings において `logs_to_keep` には `NonZeroUInt64` 型を使用するようにしました。 [#86142](https://github.com/ClickHouse/ClickHouse/pull/86142) ([Tuan Pham Anh](https://github.com/tuanpach)). -* テーブル(例:`ReplacingMergeTree`)が設定 `index_granularity_bytes = 0` で作成されていた場合、スキップインデックスを使用する `FINAL` クエリで例外がスローされていました。この例外は修正されました。 [#86147](https://github.com/ClickHouse/ClickHouse/pull/86147) ([Shankar Iyer](https://github.com/shankar-iyer)). -* 未定義動作(UB)を排除し、Iceberg のパーティション式のパースに関する問題を修正します。 [#86166](https://github.com/ClickHouse/ClickHouse/pull/86166) ([Daniil Ivanik](https://github.com/divanik)). -* 1 つの INSERT 文内で const ブロックと非 const ブロックが混在している場合に発生するクラッシュを修正。 [#86230](https://github.com/ClickHouse/ClickHouse/pull/86230) ([Azat Khuzhin](https://github.com/azat)). -* SQL からディスクを作成する際、デフォルトで `/etc/metrika.xml` の include を処理するようになりました。 [#86232](https://github.com/ClickHouse/ClickHouse/pull/86232) ([alekar](https://github.com/alekar))。 -* String から JSON への変換における accurateCastOrNull/accurateCastOrDefault 関数を修正。 [#86240](https://github.com/ClickHouse/ClickHouse/pull/86240) ([Pavel Kruglov](https://github.com/Avogar)). -* iceberg エンジンで '/' を含まないディレクトリをサポート。[#86249](https://github.com/ClickHouse/ClickHouse/pull/86249) ([scanhex12](https://github.com/scanhex12))。 -* replaceRegex で FixedString 型の haystack と空の needle を使用した場合にクラッシュする問題を修正しました。 [#86270](https://github.com/ClickHouse/ClickHouse/pull/86270) ([Raúl Marín](https://github.com/Algunenano)). -* Nullable(JSON) に対する ALTER UPDATE 実行時のクラッシュを修正。 [#86281](https://github.com/ClickHouse/ClickHouse/pull/86281) ([Pavel Kruglov](https://github.com/Avogar)). -* system.tables で欠落していた列の definer を修正。 [#86295](https://github.com/ClickHouse/ClickHouse/pull/86295) ([Raúl Marín](https://github.com/Algunenano)). -* LowCardinality(Nullable(T)) から Dynamic への型変換を修正。 [#86365](https://github.com/ClickHouse/ClickHouse/pull/86365) ([Pavel Kruglov](https://github.com/Avogar)). +* 特定のチャネルに対してのみ JSON 形式のログ出力を有効にできるようにしました。この機能を利用するには、`logger.formatting.channel` を `syslog` / `console` / `errorlog` / `log` のいずれかに設定します。 [#86331](https://github.com/ClickHouse/ClickHouse/pull/86331) ([Azat Khuzhin](https://github.com/azat))。 +* `WHERE` 句でネイティブの数値を使用できるようにしました。これらはすでに論理関数の引数としては利用可能でした。これにより、filter-push-down および move-to-prewhere の最適化が容易になります。 [#86390](https://github.com/ClickHouse/ClickHouse/pull/86390) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). +* 破損したメタデータを持つ Catalog に対して `SYSTEM DROP REPLICA` を実行した場合に発生していたエラーを修正しました。 [#86391](https://github.com/ClickHouse/ClickHouse/pull/86391) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). +* Azure ではアクセスのプロビジョニングにかなり時間がかかる場合があるため、ディスクアクセスチェック(`skip_access_check = 0`)に追加のリトライを行うようにしました。 [#86419](https://github.com/ClickHouse/ClickHouse/pull/86419) ([Alexander Tokmakov](https://github.com/tavplubix)). +* `timeSeries*()` 関数における staleness window を左開き・右閉じの区間となるよう変更しました。 [#86588](https://github.com/ClickHouse/ClickHouse/pull/86588) ([Vitaly Baranov](https://github.com/vitlibar)). +* `FailedInternal*Query` プロファイルイベントを追加しました。 [#86627](https://github.com/ClickHouse/ClickHouse/pull/86627) ([Shane Andrade](https://github.com/mauidude))。 +* 設定ファイル経由で追加された、名前にドットを含むユーザーの扱いを修正。 [#86633](https://github.com/ClickHouse/ClickHouse/pull/86633) ([Mikhail Koviazin](https://github.com/mkmkme)). +* クエリのメモリ使用量に関する非同期メトリクス(`QueriesMemoryUsage` および `QueriesPeakMemoryUsage`)を追加しました。 [#86669](https://github.com/ClickHouse/ClickHouse/pull/86669) ([Azat Khuzhin](https://github.com/azat)). +* `clickhouse-benchmark --precise` フラグを使用すると、QPS およびその他のインターバルごとのメトリクスをより正確にレポートできます。これにより、クエリの実行時間がレポート間隔 `--delay D` と同程度の場合でも、一貫した QPS を取得しやすくなります。 [#86684](https://github.com/ClickHouse/ClickHouse/pull/86684) ([Sergei Trifonov](https://github.com/serxa)). +* Linux スレッドの nice 値を構成可能にし、特定のスレッド(merge/mutate、query、マテリアライズドビュー、ZooKeeper クライアント)により高いまたは低い優先度を割り当てられるようにしました。 [#86703](https://github.com/ClickHouse/ClickHouse/pull/86703) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). +* 競合状態によりマルチパートアップロードで元の例外が失われた場合に発生していた、誤解を招く「specified upload does not exist」エラーを修正しました。 [#86725](https://github.com/ClickHouse/ClickHouse/pull/86725) ([Julia Kartseva](https://github.com/jkartseva)). +* `EXPLAIN` クエリにおけるクエリプランの説明の長さを制限しました。`EXPLAIN` 以外のクエリではこの説明を生成しないようにしました。設定項目 `query_plan_max_step_description_length` を追加しました。 [#86741](https://github.com/ClickHouse/ClickHouse/pull/86741) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). +* クエリプロファイラ(`query_profiler_real_time_period_ns` / `query_profiler_cpu_time_period_ns`)で `CANNOT_CREATE_TIMER` を回避できるよう、ペンディングシグナルを調整可能にしました。また、自己診断のために `/proc/self/status` から `SigQ` を収集するようにしました(`ProcessSignalQueueSize` が `ProcessSignalQueueLimit` に近づいている場合、`CANNOT_CREATE_TIMER` エラーが発生する可能性が高くなります)。 [#86760](https://github.com/ClickHouse/ClickHouse/pull/86760) ([Azat Khuzhin](https://github.com/azat)). +* Keeper における `RemoveRecursive` リクエストのパフォーマンスを改善しました。 [#86789](https://github.com/ClickHouse/ClickHouse/pull/86789) ([Antonio Andelic](https://github.com/antonio2368)). +* JSON 型の出力時に `PrettyJSONEachRow` で余分な空白を削除するようにしました。 [#86819](https://github.com/ClickHouse/ClickHouse/pull/86819) ([Pavel Kruglov](https://github.com/Avogar)). +* プレーンなリライト可能ディスクにおいてディレクトリ削除時に、`prefix.path` の blob サイズを書き込むようにしました。 [#86908](https://github.com/ClickHouse/ClickHouse/pull/86908) ([alesapin](https://github.com/alesapin)). +* リモートの ClickHouse インスタンス(ClickHouse Cloud を含む)に対するパフォーマンス テストをサポートします。使用例: `tests/performance/scripts/perf.py tests/performance/math.xml --runs 10 --user --password --host --port --secure`。 [#86995](https://github.com/ClickHouse/ClickHouse/pull/86995) ([Raufs Dunamalijevs](https://github.com/rienath))。 +* 大量(16MiB 超)のメモリを割り当てることが分かっている一部の処理(ソート、非同期インサート、file log)で、メモリ制限に従うようにしました。 [#87035](https://github.com/ClickHouse/ClickHouse/pull/87035) ([Azat Khuzhin](https://github.com/azat)). +* `network_compression_method` にサポートされていない汎用コーデックが設定された場合に、例外をスローするようにしました。 [#87097](https://github.com/ClickHouse/ClickHouse/pull/87097) ([Robert Schulze](https://github.com/rschu1ze)). +* システムテーブル `system.query_cache` は、以前は共有エントリ、または同一ユーザーかつ同一ロールに属する非共有エントリのみを返していましたが、現在は *すべての* クエリ結果キャッシュのエントリを返すようになりました。非共有エントリは *クエリ結果* を開示しないことが前提とされており、`system.query_cache` が返すのは *クエリ文字列* だけであるため、これは問題ありません。これにより、このシステムテーブルの挙動は `system.query_log` により近いものになりました。[#87104](https://github.com/ClickHouse/ClickHouse/pull/87104)([Robert Schulze](https://github.com/rschu1ze))。 +* `parseDateTime` 関数で短絡評価を有効にしました。 [#87184](https://github.com/ClickHouse/ClickHouse/pull/87184) ([Pavel Kruglov](https://github.com/Avogar)). +* `system.parts_columns` に新しい列 `statistics` を追加しました。 [#87259](https://github.com/ClickHouse/ClickHouse/pull/87259) ([Han Fei](https://github.com/hanfei1991))。 + +#### バグ修正(公式安定版リリースでユーザーに影響する不具合) + +* レプリケートされたデータベースおよび内部的にレプリケートされたテーブルに対する `ALTER` クエリの結果は、クエリを開始したノード上でのみ検証されます。これにより、すでにコミット済みの `ALTER` クエリが他のノード上でハングしたままになる状況が解消されます。 [#83849](https://github.com/ClickHouse/ClickHouse/pull/83849) ([János Benjamin Antal](https://github.com/antaljanosbenjamin))。 +* `BackgroundSchedulePool` 内で、各種タスク数に上限を設けました。これにより、ある種のタスクがすべてのスロットを占有し、他のタスクが飢餓状態になる状況を防止します。また、タスク同士が互いの完了待ちになることで発生するデッドロックも回避します。この挙動はサーバー設定 `background_schedule_pool_max_parallel_tasks_per_type_ratio` によって制御されます。 [#84008](https://github.com/ClickHouse/ClickHouse/pull/84008) ([Alexander Tokmakov](https://github.com/tavplubix))。 +* データベースレプリカの復旧時にテーブルが正しくシャットダウンされるようにしました。不適切なシャットダウンにより、データベースレプリカ復旧中に一部のテーブルエンジンで `LOGICAL_ERROR` が発生する可能性がありました。 [#84744](https://github.com/ClickHouse/ClickHouse/pull/84744) ([Antonio Andelic](https://github.com/antonio2368)). +* データベース名のタイプミス修正候補を生成する際に、アクセス権限を確認するようにしました。 [#85371](https://github.com/ClickHouse/ClickHouse/pull/85371) ([Dmitry Novik](https://github.com/novikd)). +* 1. Hive カラムに対する LowCardinality 2. 仮想カラムより前に Hive カラムを設定([https://github.com/ClickHouse/ClickHouse/pull/81040](https://github.com/ClickHouse/ClickHouse/pull/81040) に必要)3. Hive 用フォーマットが空の場合の LOGICAL_ERROR [#85528](https://github.com/ClickHouse/ClickHouse/issues/85528) 4. Hive のパーティションカラムだけが存在する場合のチェックを修正 5. すべての Hive カラムがスキーマで指定されていることをアサート 6. Hive を用いた parallel_replicas_cluster の部分的な修正 7. Hive ユーティリティの extractkeyValuePairs で順序付きコンテナを使用([https://github.com/ClickHouse/ClickHouse/pull/81040](https://github.com/ClickHouse/ClickHouse/pull/81040) に必要)。[#85538](https://github.com/ClickHouse/ClickHouse/pull/85538)([Arthur Passos](https://github.com/arthurpassos))。 +* 配列マッピング使用時にエラーを引き起こすことがあった `IN` 関数の第1引数への不要な最適化を防止しました。 [#85546](https://github.com/ClickHouse/ClickHouse/pull/85546) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* Parquet ファイルを書き込んだ際に、Iceberg の source id と Parquet ファイル名のマッピングがスキーマに合わせて調整されていませんでした。この PR では、現在のスキーマではなく、各 Iceberg データファイルに対応するスキーマを処理するようにしました。 [#85829](https://github.com/ClickHouse/ClickHouse/pull/85829) ([Daniil Ivanik](https://github.com/divanik))。 +* ファイルを開く処理とは別にファイルサイズを読み取っていた処理を修正しました。これは、`5.10` リリース以前の Linux カーネルのバグに対応して導入された変更 [https://github.com/ClickHouse/ClickHouse/pull/33372](https://github.com/ClickHouse/ClickHouse/pull/33372) に関連しています。[#85837](https://github.com/ClickHouse/ClickHouse/pull/85837)([Konstantin Bogdanov](https://github.com/thevar1able))。 +* カーネルレベルで IPv6 が無効化されているシステム(例: `ipv6.disable=1` が設定された RHEL)でも、ClickHouse Keeper が起動に失敗しなくなりました。最初の IPv6 リスナーの起動に失敗した場合は、IPv4 リスナーへのフォールバックを試みるようになりました。 [#85901](https://github.com/ClickHouse/ClickHouse/pull/85901) ([jskong1124](https://github.com/jskong1124)). +* この PR で [#77990](https://github.com/ClickHouse/ClickHouse/issues/77990) をクローズします。globalJoin において parallel replicas 用の TableFunctionRemote のサポートを追加しました。[#85929](https://github.com/ClickHouse/ClickHouse/pull/85929) ([zoomxi](https://github.com/zoomxi))。 +* orcschemareader::initializeifneeded() 内のヌルポインタ参照を修正しました。この PR では次の issue を解決しています: [#85292](https://github.com/ClickHouse/ClickHouse/issues/85292) ### ユーザー向け変更に関するドキュメントエントリ。 [#85951](https://github.com/ClickHouse/ClickHouse/pull/85951) ([yanglongwei](https://github.com/ylw510)). +* FROM 句内の相関サブクエリに対し、外側クエリの列を使用している場合にのみ許可するチェックを追加しました。[#85469](https://github.com/ClickHouse/ClickHouse/issues/85469) を修正しました。[#85402](https://github.com/ClickHouse/ClickHouse/issues/85402) を修正しました。[#85966](https://github.com/ClickHouse/ClickHouse/pull/85966)([Dmitry Novik](https://github.com/novikd))。 +* 他のカラムの `MATERIALIZED` 式でサブカラムが使用されているカラムに対する `ALTER UPDATE` の挙動を修正しました。以前は、式内でサブカラムを参照している `MATERIALIZED` カラムが正しく更新されていませんでした。 [#85985](https://github.com/ClickHouse/ClickHouse/pull/85985) ([Pavel Kruglov](https://github.com/Avogar)). +* PK またはパーティション式でサブカラムが使用されているカラムの変更を禁止しました。 [#86005](https://github.com/ClickHouse/ClickHouse/pull/86005) ([Pavel Kruglov](https://github.com/Avogar)). +* ストレージ DeltaLake において、非デフォルトのカラムマッピングモード使用時のサブカラム読み取りを修正。 [#86064](https://github.com/ClickHouse/ClickHouse/pull/86064) ([Kseniia Sumarokova](https://github.com/kssenii)). +* JSON 内で Enum ヒント付きのパスに対して誤ったデフォルト値が使用されていた問題を修正。[#86065](https://github.com/ClickHouse/ClickHouse/pull/86065)([Pavel Kruglov](https://github.com/Avogar))。 +* DataLake Hive カタログ URL の解析時に入力のサニタイズを行うようにしました。Closes [#86018](https://github.com/ClickHouse/ClickHouse/issues/86018). [#86092](https://github.com/ClickHouse/ClickHouse/pull/86092) ([rajat mohan](https://github.com/rajatmohan22)). +* ファイルシステムキャッシュの動的リサイズ中に発生する論理エラーを修正。[#86122](https://github.com/ClickHouse/ClickHouse/issues/86122) をクローズ。 [https://github.com/ClickHouse/clickhouse-core-incidents/issues/473](https://github.com/ClickHouse/clickhouse-core-incidents/issues/473) をクローズ。 [#86130](https://github.com/ClickHouse/ClickHouse/pull/86130)([Kseniia Sumarokova](https://github.com/kssenii))。 +* DatabaseReplicatedSettings で `logs_to_keep` に `NonZeroUInt64` を使用するようにしました。 [#86142](https://github.com/ClickHouse/ClickHouse/pull/86142) ([Tuan Pham Anh](https://github.com/tuanpach)). +* テーブル(例:`ReplacingMergeTree`)が設定 `index_granularity_bytes = 0` で作成されていた場合、スキップインデックスを使用した `FINAL` クエリの実行時に例外がスローされていました。この例外は現在修正されています。 [#86147](https://github.com/ClickHouse/ClickHouse/pull/86147) ([Shankar Iyer](https://github.com/shankar-iyer)). +* UB を除去し、Iceberg のパーティション式のパース処理における問題を修正します。 [#86166](https://github.com/ClickHouse/ClickHouse/pull/86166) ([Daniil Ivanik](https://github.com/divanik))。 +* 1 つの INSERT 内に const ブロックと non-const ブロックが混在している場合にクラッシュする問題を修正。 [#86230](https://github.com/ClickHouse/ClickHouse/pull/86230) ([Azat Khuzhin](https://github.com/azat)). +* SQL でディスクを作成する際には、デフォルトで `/etc/metrika.xml` 内の `include` を処理するようになりました。 [#86232](https://github.com/ClickHouse/ClickHouse/pull/86232) ([alekar](https://github.com/alekar)). +* String から JSON への accurateCastOrNull/accurateCastOrDefault の動作を修正。 [#86240](https://github.com/ClickHouse/ClickHouse/pull/86240) ([Pavel Kruglov](https://github.com/Avogar)). +* iceberg エンジンで「/」を含まないディレクトリをサポートするようにしました。 [#86249](https://github.com/ClickHouse/ClickHouse/pull/86249) ([scanhex12](https://github.com/scanhex12)). +* `replaceRegex` が `FixedString` 型の haystack と空の needle を処理する際にクラッシュする問題を修正しました。 [#86270](https://github.com/ClickHouse/ClickHouse/pull/86270) ([Raúl Marín](https://github.com/Algunenano)). +* ALTER UPDATE Nullable(JSON) 実行時に発生するクラッシュを修正。 [#86281](https://github.com/ClickHouse/ClickHouse/pull/86281) ([Pavel Kruglov](https://github.com/Avogar)). +* system.tables で不足していたカラム定義子を修正。 [#86295](https://github.com/ClickHouse/ClickHouse/pull/86295) ([Raúl Marín](https://github.com/Algunenano)). +* LowCardinality(Nullable(T)) から Dynamic へのキャストを修正しました。 [#86365](https://github.com/ClickHouse/ClickHouse/pull/86365) ([Pavel Kruglov](https://github.com/Avogar))。 * DeltaLake への書き込み時に発生する論理エラーを修正。[#86175](https://github.com/ClickHouse/ClickHouse/issues/86175) をクローズ。[#86367](https://github.com/ClickHouse/ClickHouse/pull/86367)([Kseniia Sumarokova](https://github.com/kssenii))。 -* plain_rewritable disk で Azure Blob Storage から空の blob を読み取る際に発生していた `416 The range specified is invalid for the current size of the resource. The range specified is invalid for the current size of the resource` エラーを修正。 [#86400](https://github.com/ClickHouse/ClickHouse/pull/86400) ([Julia Kartseva](https://github.com/jkartseva)). +* plain_rewritable disk を使用して Azure Blob Storage から空の blob を読み取る際に発生する `416 The range specified is invalid for the current size of the resource. The range specified is invalid for the current size of the resource` エラーを修正。 [#86400](https://github.com/ClickHouse/ClickHouse/pull/86400) ([Julia Kartseva](https://github.com/jkartseva)). * GROUP BY Nullable(JSON) の不具合を修正。 [#86410](https://github.com/ClickHouse/ClickHouse/pull/86410) ([Pavel Kruglov](https://github.com/Avogar)). -* マテリアライズドビューのバグを修正しました。同じ名前の MV を作成してから削除し、その後に再作成した場合に、正しく動作しないことがありました。 [#86413](https://github.com/ClickHouse/ClickHouse/pull/86413) ([Alexander Tokmakov](https://github.com/tavplubix)). -* *cluster 関数から読み取る際に、すべてのレプリカが利用不能な場合は失敗します。 [#86414](https://github.com/ClickHouse/ClickHouse/pull/86414) ([Julian Maicher](https://github.com/jmaicher)). -* `Buffer` テーブルで発生していた `MergesMutationsMemoryTracking` のリークを修正し、`Kafka` などからのストリーミング向けの `query_views_log` を修正。[#86422](https://github.com/ClickHouse/ClickHouse/pull/86422) ([Azat Khuzhin](https://github.com/azat)). -* エイリアスストレージの参照テーブルを削除した後の `SHOW TABLES` の動作を修正。 [#86433](https://github.com/ClickHouse/ClickHouse/pull/86433) ([RinChanNOW](https://github.com/RinChanNOWWW)). -* send_chunk_header が有効で、HTTP プロトコル経由で UDF が呼び出された場合にチャンクヘッダーが欠落していた問題を修正しました。 [#86469](https://github.com/ClickHouse/ClickHouse/pull/86469) ([Vladimir Cherkasov](https://github.com/vdimir)). -* jemalloc のプロファイルフラッシュを有効にした場合に発生する可能性のあるデッドロックを修正。 [#86473](https://github.com/ClickHouse/ClickHouse/pull/86473) ([Azat Khuzhin](https://github.com/azat)). -* DeltaLake テーブルエンジンでのサブカラムの読み取りを修正しました。 [#86204](https://github.com/ClickHouse/ClickHouse/issues/86204) をクローズ。 [#86477](https://github.com/ClickHouse/ClickHouse/pull/86477)([Kseniia Sumarokova](https://github.com/kssenii))。 -* DDL タスク処理時の競合を回避するために、ループバックホストIDの扱いを適切に修正。[#86479](https://github.com/ClickHouse/ClickHouse/pull/86479) ([Tuan Pham Anh](https://github.com/tuanpach))。 -* numeric/decimal カラムを含む Postgres データベースエンジンテーブルに対する detach/attach を修正。 [#86480](https://github.com/ClickHouse/ClickHouse/pull/86480) ([Julian Maicher](https://github.com/jmaicher)). -* getSubcolumnType での未初期化メモリの使用を修正。 [#86498](https://github.com/ClickHouse/ClickHouse/pull/86498) ([Raúl Marín](https://github.com/Algunenano)). -* 空の needle で呼び出された場合、関数 `searchAny` および `searchAll` は、今後は `true`(いわゆる「すべてにマッチ」)を返すようになりました。以前は `false` を返していました。(issue [#86300](https://github.com/ClickHouse/ClickHouse/issues/86300))。[#86500](https://github.com/ClickHouse/ClickHouse/pull/86500)([Elmi Ahmadov](https://github.com/ahmadov))。 -* 最初のバケットに値が存在しない場合の `timeSeriesResampleToGridWithStaleness()` 関数の挙動を修正しました。 [#86507](https://github.com/ClickHouse/ClickHouse/pull/86507) ([Vitaly Baranov](https://github.com/vitlibar))。 -* `merge_tree_min_read_task_size` が 0 に設定されていたことが原因で発生していたクラッシュを修正。 [#86527](https://github.com/ClickHouse/ClickHouse/pull/86527) ([yanglongwei](https://github.com/ylw510)). -* 読み込み時には、各データファイルのフォーマットを Iceberg メタデータから取得するようになりました(以前はテーブル引数から取得していました)。[#86529](https://github.com/ClickHouse/ClickHouse/pull/86529) ([Daniil Ivanik](https://github.com/divanik))。 -* シャットダウン時のログフラッシュ中に発生する例外を無視し、SIGSEGV を回避してシャットダウン処理をより安全にしました。 [#86546](https://github.com/ClickHouse/ClickHouse/pull/86546) ([Azat Khuzhin](https://github.com/azat)). -* サイズ 0 のパートファイルを含むクエリで例外をスローしていた Backup データベースエンジンの問題を修正しました。 [#86563](https://github.com/ClickHouse/ClickHouse/pull/86563) ([Max Justus Spransy](https://github.com/maxjustus)). -* send_chunk_header が有効で、HTTP プロトコル経由で UDF が呼び出された場合にチャンクヘッダーが欠落していた問題を修正。 [#86606](https://github.com/ClickHouse/ClickHouse/pull/86606) ([Vladimir Cherkasov](https://github.com/vdimir)). -* keeper セッションの有効期限切れが原因で発生していた S3Queue の論理エラー "Expected current processor {} to be equal to {}" を修正しました。 [#86615](https://github.com/ClickHouse/ClickHouse/pull/86615) ([Kseniia Sumarokova](https://github.com/kssenii)). -* INSERT およびプルーニングにおける Nullability のバグを修正。これにより [#86407](https://github.com/ClickHouse/ClickHouse/issues/86407) がクローズされます。[#86630](https://github.com/ClickHouse/ClickHouse/pull/86630) ([scanhex12](https://github.com/scanhex12))。 -* Iceberg のメタデータキャッシュが無効化されている場合は、ファイルシステムキャッシュを無効化しないでください。 [#86635](https://github.com/ClickHouse/ClickHouse/pull/86635) ([Daniil Ivanik](https://github.com/divanik))。 -* Parquet リーダー v3 で発生していた 'Deadlock in Parquet::ReadManager (single-threaded)' エラーを修正しました。 [#86644](https://github.com/ClickHouse/ClickHouse/pull/86644) ([Michael Kolupaev](https://github.com/al13n321)). -* ArrowFlight の `listen_host` での IPv6 サポートを修正しました。 [#86664](https://github.com/ClickHouse/ClickHouse/pull/86664) ([Vitaly Baranov](https://github.com/vitlibar))。 -* `ArrowFlight` ハンドラーのシャットダウン処理を修正。この PR は [#86596](https://github.com/ClickHouse/ClickHouse/issues/86596) を解決します。[#86665](https://github.com/ClickHouse/ClickHouse/pull/86665)([Vitaly Baranov](https://github.com/vitlibar))。 -* `describe_compact_output=1` によって分散クエリの問題を修正しました。[#86676](https://github.com/ClickHouse/ClickHouse/pull/86676)([Azat Khuzhin](https://github.com/azat))。 -* ウィンドウ定義の構文解析およびクエリパラメータの適用処理を修正。 [#86720](https://github.com/ClickHouse/ClickHouse/pull/86720) ([Azat Khuzhin](https://github.com/azat)). -* `PARTITION BY` を指定しているもののパーティションのワイルドカードを使用していないテーブルを作成する際に、25.8 より前のバージョンでは動作していたケースで発生していた例外 `Partition strategy wildcard can not be used without a '_partition_id' wildcard.` を修正しました。 [https://github.com/ClickHouse/clickhouse-private/issues/37567](https://github.com/ClickHouse/clickhouse-private/issues/37567) をクローズしました。 [#86748](https://github.com/ClickHouse/ClickHouse/pull/86748) ([Kseniia Sumarokova](https://github.com/kssenii))。 -* 並列クエリが単一ロックの取得を試みた場合に発生していた LogicalError を修正。 [#86751](https://github.com/ClickHouse/ClickHouse/pull/86751) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). -* RowBinary 入力フォーマットにおける JSON 共有データに NULL が書き込まれる問題を修正し、ColumnObject にいくつかの追加検証を導入しました。 [#86812](https://github.com/ClickHouse/ClickHouse/pull/86812) ([Pavel Kruglov](https://github.com/Avogar)). -* limit 指定時の空の Tuple permutation に関する問題を修正しました。 [#86828](https://github.com/ClickHouse/ClickHouse/pull/86828) ([Pavel Kruglov](https://github.com/Avogar))。 -* 永続処理ノード用に個別の keeper ノードを使用しないようにしました。次の修正に対応: [https://github.com/ClickHouse/ClickHouse/pull/85995](https://github.com/ClickHouse/ClickHouse/pull/85995)。Closes [#86406](https://github.com/ClickHouse/ClickHouse/issues/86406)。[#86841](https://github.com/ClickHouse/ClickHouse/pull/86841)([Kseniia Sumarokova](https://github.com/kssenii))。 -* Replicated データベースで新しいレプリカを作成できなくなっていた TimeSeries エンジンテーブルの問題を修正。 [#86845](https://github.com/ClickHouse/ClickHouse/pull/86845) ([Nikolay Degterinsky](https://github.com/evillique)). -* 特定の Keeper ノードが存在しないタスクがある場合に、`system.distributed_ddl_queue` をクエリできない問題を修正しました。 [#86848](https://github.com/ClickHouse/ClickHouse/pull/86848) ([Antonio Andelic](https://github.com/antonio2368)). +* マテリアライズドビューのバグを修正しました。同じ名前で作成されたマテリアライズドビューを削除してから再作成すると、正しく動作しない場合がありました。 [#86413](https://github.com/ClickHouse/ClickHouse/pull/86413) ([Alexander Tokmakov](https://github.com/tavplubix)). +* *cluster 関数から読み込む際に、すべてのレプリカが使用不能な場合は失敗するようにしました。 [#86414](https://github.com/ClickHouse/ClickHouse/pull/86414) ([Julian Maicher](https://github.com/jmaicher)). +* `Buffer` テーブルに起因する `MergesMutationsMemoryTracking` のリークを修正し、`Kafka` などからのストリーミング向けの `query_views_log` を修正。 [#86422](https://github.com/ClickHouse/ClickHouse/pull/86422) ([Azat Khuzhin](https://github.com/azat)). +* エイリアスストレージの参照テーブルを削除した後の `SHOW TABLES` の動作を修正しました。 [#86433](https://github.com/ClickHouse/ClickHouse/pull/86433) ([RinChanNOW](https://github.com/RinChanNOWWW))。 +* `send_chunk_header` が有効になっていて、UDF が HTTP プロトコル経由で呼び出された場合にチャンクヘッダーが欠落する問題を修正しました。 [#86469](https://github.com/ClickHouse/ClickHouse/pull/86469) ([Vladimir Cherkasov](https://github.com/vdimir)). +* jemalloc のプロファイルフラッシュが有効になっている場合に発生しうるデッドロックを修正しました。 [#86473](https://github.com/ClickHouse/ClickHouse/pull/86473) ([Azat Khuzhin](https://github.com/azat)). +* DeltaLake テーブルエンジンでのサブカラム読み取りを修正。[#86204](https://github.com/ClickHouse/ClickHouse/issues/86204) をクローズ。[#86477](https://github.com/ClickHouse/ClickHouse/pull/86477)([Kseniia Sumarokova](https://github.com/kssenii))。 +* DDL タスク処理時の衝突を回避するため、ループバックホスト ID を適切に扱うようにしました。 [#86479](https://github.com/ClickHouse/ClickHouse/pull/86479) ([Tuan Pham Anh](https://github.com/tuanpach)). +* numeric/decimal 型の列を持つ PostgreSQL database engine テーブルに対する DETACH/ATTACH 操作を修正。 [#86480](https://github.com/ClickHouse/ClickHouse/pull/86480) ([Julian Maicher](https://github.com/jmaicher)). +* getSubcolumnType における未初期化メモリの使用を修正しました。 [#86498](https://github.com/ClickHouse/ClickHouse/pull/86498) ([Raúl Marín](https://github.com/Algunenano)). +* 空の needle で呼び出されたとき、関数 `searchAny` および `searchAll` は、現在では `true`(いわゆる「すべてにマッチする」)を返すようになりました。以前は `false` を返していました。(issue [#86300](https://github.com/ClickHouse/ClickHouse/issues/86300))。[#86500](https://github.com/ClickHouse/ClickHouse/pull/86500)([Elmi Ahmadov](https://github.com/ahmadov))。 +* 最初のバケットに値が存在しない場合の `timeSeriesResampleToGridWithStaleness()` 関数の動作を修正しました。 [#86507](https://github.com/ClickHouse/ClickHouse/pull/86507) ([Vitaly Baranov](https://github.com/vitlibar)). +* `merge_tree_min_read_task_size` が 0 に設定されていたことが原因で発生するクラッシュを修正。[#86527](https://github.com/ClickHouse/ClickHouse/pull/86527) ([yanglongwei](https://github.com/ylw510)). +* 読み取り時に各データファイルのフォーマットを Iceberg のメタデータから取得するようにしました(以前はテーブル引数から取得していました)。 [#86529](https://github.com/ClickHouse/ClickHouse/pull/86529) ([Daniil Ivanik](https://github.com/divanik))。 +* シャットダウン時のログフラッシュ中に発生する例外を無視し、シャットダウンをより安全にしました(SIGSEGV を回避するため)。 [#86546](https://github.com/ClickHouse/ClickHouse/pull/86546) ([Azat Khuzhin](https://github.com/azat)). +* ゼロサイズのパートファイルを含むクエリで Backup データベースエンジンが例外を投げてしまう問題を修正。 [#86563](https://github.com/ClickHouse/ClickHouse/pull/86563) ([Max Justus Spransy](https://github.com/maxjustus)). +* send_chunk_header が有効な状態で、UDF が HTTP プロトコル経由で呼び出された場合にチャンクヘッダーが欠落する問題を修正しました。 [#86606](https://github.com/ClickHouse/ClickHouse/pull/86606) ([Vladimir Cherkasov](https://github.com/vdimir)). +* keeper のセッション有効期限切れが原因で発生していた、S3Queue の論理エラー「Expected current processor {} to be equal to {}」を修正しました。 [#86615](https://github.com/ClickHouse/ClickHouse/pull/86615) ([Kseniia Sumarokova](https://github.com/kssenii))。 +* INSERT および pruning における Nullability のバグを修正しました。これにより [#86407](https://github.com/ClickHouse/ClickHouse/issues/86407) がクローズされました。 [#86630](https://github.com/ClickHouse/ClickHouse/pull/86630) ([scanhex12](https://github.com/scanhex12)). +* Iceberg メタデータキャッシュが無効化されている場合でも、ファイルシステムキャッシュは無効化されないようにしました。 [#86635](https://github.com/ClickHouse/ClickHouse/pull/86635) ([Daniil Ivanik](https://github.com/divanik)). +* parquet reader v3 における「Deadlock in Parquet::ReadManager (single-threaded)」エラーを修正しました。[#86644](https://github.com/ClickHouse/ClickHouse/pull/86644) ([Michael Kolupaev](https://github.com/al13n321))。 +* ArrowFlight の `listen_host` における IPv6 対応を修正。 [#86664](https://github.com/ClickHouse/ClickHouse/pull/86664) ([Vitaly Baranov](https://github.com/vitlibar)). +* `ArrowFlight` ハンドラーのシャットダウン時の処理を修正しました。この PR は [#86596](https://github.com/ClickHouse/ClickHouse/issues/86596) を修正します。[#86665](https://github.com/ClickHouse/ClickHouse/pull/86665)([Vitaly Baranov](https://github.com/vitlibar))。 +* `describe_compact_output=1` 使用時の分散クエリを修正。 [#86676](https://github.com/ClickHouse/ClickHouse/pull/86676) ([Azat Khuzhin](https://github.com/azat)). +* ウィンドウ定義の解析とクエリパラメータの適用を修正。 [#86720](https://github.com/ClickHouse/ClickHouse/pull/86720) ([Azat Khuzhin](https://github.com/azat)). +* `PARTITION BY` を指定してパーティションのワイルドカードなしでテーブルを作成する際に、例外 `Partition strategy wildcard can not be used without a '_partition_id' wildcard.` が発生する問題を修正しました。この操作は 25.8 より前のバージョンでは正常に動作していました。この修正により、[https://github.com/ClickHouse/clickhouse-private/issues/37567](https://github.com/ClickHouse/clickhouse-private/issues/37567) をクローズしました。 [#86748](https://github.com/ClickHouse/ClickHouse/pull/86748) ([Kseniia Sumarokova](https://github.com/kssenii))。 +* 並列クエリが単一ロックを取得しようとした場合に発生する LogicalError を修正。 [#86751](https://github.com/ClickHouse/ClickHouse/pull/86751) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +* RowBinary 入力フォーマットにおいて JSON 共有データに NULL が書き込まれる問題を修正し、ColumnObject に追加のバリデーションをいくつか導入。 [#86812](https://github.com/ClickHouse/ClickHouse/pull/86812) ([Pavel Kruglov](https://github.com/Avogar)). +* LIMIT 使用時の空の Tuple の順列処理を修正。 [#86828](https://github.com/ClickHouse/ClickHouse/pull/86828) ([Pavel Kruglov](https://github.com/Avogar))。 +* 永続処理ノードに対しては、個別の Keeper ノードを使用しないようにしました。[https://github.com/ClickHouse/ClickHouse/pull/85995](https://github.com/ClickHouse/ClickHouse/pull/85995) に対する修正です。[#86406](https://github.com/ClickHouse/ClickHouse/issues/86406) をクローズします。 [#86841](https://github.com/ClickHouse/ClickHouse/pull/86841) ([Kseniia Sumarokova](https://github.com/kssenii))。 +* TimeSeries エンジンのテーブルが Replicated Database で新しいレプリカを作成できなくなる問題を修正しました。 [#86845](https://github.com/ClickHouse/ClickHouse/pull/86845) ([Nikolay Degterinsky](https://github.com/evillique)). +* タスクに特定の Keeper ノードが含まれていない場合に `system.distributed_ddl_queue` をクエリできない問題を修正しました。 [#86848](https://github.com/ClickHouse/ClickHouse/pull/86848) ([Antonio Andelic](https://github.com/antonio2368)). * 解凍済みブロック末尾でのシーク処理を修正。 [#86906](https://github.com/ClickHouse/ClickHouse/pull/86906) ([Pavel Kruglov](https://github.com/Avogar)). -* Iceberg Iterator の非同期実行中にスローされる例外を処理するようにしました。 [#86932](https://github.com/ClickHouse/ClickHouse/pull/86932) ([Daniil Ivanik](https://github.com/divanik)). -* サイズの大きい前処理済み XML 設定ファイルの保存処理を修正しました。 [#86934](https://github.com/ClickHouse/ClickHouse/pull/86934) ([c-end](https://github.com/c-end)). -* system.iceberg_metadata_log テーブルにおける date フィールドへの値の設定を修正。 [#86961](https://github.com/ClickHouse/ClickHouse/pull/86961) ([Daniil Ivanik](https://github.com/divanik)). -* `WHERE` を使用した場合に `TTL` が無限に再計算されてしまう問題を修正しました。 [#86965](https://github.com/ClickHouse/ClickHouse/pull/86965) ([Anton Popov](https://github.com/CurtizJ)). -* `ROLLUP` および `CUBE` 修飾子を使用した際に `uniqExact` 関数が誤った結果を返す可能性があった問題を修正しました。 [#87014](https://github.com/ClickHouse/ClickHouse/pull/87014) ([Nikita Taranov](https://github.com/nickitat)). -* `parallel_replicas_for_cluster_functions` 設定値が 1 の場合に、`url()` テーブル関数でテーブルスキーマを解決する処理の問題を修正。 [#87029](https://github.com/ClickHouse/ClickHouse/pull/87029) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* `PREWHERE` の出力を複数のステップに分割した後も正しくキャストされるように修正しました。 [#87040](https://github.com/ClickHouse/ClickHouse/pull/87040) ([Antonio Andelic](https://github.com/antonio2368)). -* 軽量更新での `ON CLUSTER` 句の扱いを修正しました。 [#87043](https://github.com/ClickHouse/ClickHouse/pull/87043) ([Anton Popov](https://github.com/CurtizJ)). -* 一部の集約関数状態の `String` 引数との互換性を修正しました。 [#87049](https://github.com/ClickHouse/ClickHouse/pull/87049) ([Pavel Kruglov](https://github.com/Avogar)). -* OpenAI からのモデル名が渡されていなかった不具合を修正します。 [#87100](https://github.com/ClickHouse/ClickHouse/pull/87100) ([Kaushik Iska](https://github.com/iskakaushik)). -* EmbeddedRocksDB: パスは user_files ディレクトリ配下でなければなりません。 [#87109](https://github.com/ClickHouse/ClickHouse/pull/87109) ([Raúl Marín](https://github.com/Algunenano)). -* 25.1 より前に作成された KeeperMap テーブルで、DROP クエリの実行後も ZooKeeper にデータが残り続ける問題を修正。 [#87112](https://github.com/ClickHouse/ClickHouse/pull/87112) ([Nikolay Degterinsky](https://github.com/evillique)). -* Parquet 読み取り時の map および array フィールド ID の扱いを修正。 [#87136](https://github.com/ClickHouse/ClickHouse/pull/87136) ([scanhex12](https://github.com/scanhex12)). -* 遅延マテリアライゼーションにおいて、配列サイズを表すサブカラムを持つ配列の読み取りを修正。 [#87139](https://github.com/ClickHouse/ClickHouse/pull/87139) ([Pavel Kruglov](https://github.com/Avogar)). -* Dynamic 型引数を取る CASE 関数を修正。 [#87177](https://github.com/ClickHouse/ClickHouse/pull/87177) ([Pavel Kruglov](https://github.com/Avogar)). -* CSV で空文字列から空配列を読み取る際の処理を修正。 [#87182](https://github.com/ClickHouse/ClickHouse/pull/87182) ([Pavel Kruglov](https://github.com/Avogar)). -* 非相関な `EXISTS` で誤った結果が返る可能性があった問題を修正しました。これは [https://github.com/ClickHouse/ClickHouse/pull/85481](https://github.com/ClickHouse/ClickHouse/pull/85481) で導入された `execute_exists_as_scalar_subquery=1` により、バージョン `25.8` で不具合が生じていました。 [#86415](https://github.com/ClickHouse/ClickHouse/issues/86415) を修正します。 [#87207](https://github.com/ClickHouse/ClickHouse/pull/87207) ([Nikolai Kochetov](https://github.com/KochetovNicolai))。 -* `iceberg_metadata_log` が設定されていないにもかかわらず、ユーザーが Iceberg メタデータのデバッグ情報を取得しようとした場合にエラーを送出するようにしました。`nullptr` 参照の問題を修正しました。 [#87250](https://github.com/ClickHouse/ClickHouse/pull/87250) ([Daniil Ivanik](https://github.com/divanik))。 - - +* Iceberg Iterator の非同期実行中に発生する例外の処理。 [#86932](https://github.com/ClickHouse/ClickHouse/pull/86932) ([Daniil Ivanik](https://github.com/divanik)). +* 大きな事前処理済み XML 設定ファイルの保存処理を修正。 [#86934](https://github.com/ClickHouse/ClickHouse/pull/86934) ([c-end](https://github.com/c-end)). +* system.iceberg_metadata_log テーブルにおける date フィールドの値設定を修正。 [#86961](https://github.com/ClickHouse/ClickHouse/pull/86961) ([Daniil Ivanik](https://github.com/divanik)). +* `WHERE` を伴う `TTL` が無限に再計算される問題を修正しました。 [#86965](https://github.com/ClickHouse/ClickHouse/pull/86965) ([Anton Popov](https://github.com/CurtizJ)). +* `ROLLUP` および `CUBE` 修飾子を使用した場合に `uniqExact` 関数が誤った結果となる可能性があった問題を修正しました。 [#87014](https://github.com/ClickHouse/ClickHouse/pull/87014) ([Nikita Taranov](https://github.com/nickitat))。 +* `parallel_replicas_for_cluster_functions` 設定が 1 に設定されている場合に、`url()` テーブル関数でテーブルスキーマを解決できない問題を修正。 [#87029](https://github.com/ClickHouse/ClickHouse/pull/87029) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* PREWHERE を複数のステップに分割した際に、その出力が正しくキャストされるようにしました。 [#87040](https://github.com/ClickHouse/ClickHouse/pull/87040) ([Antonio Andelic](https://github.com/antonio2368)). +* `ON CLUSTER` 句を使用する軽量更新の不具合を修正しました。 [#87043](https://github.com/ClickHouse/ClickHouse/pull/87043) ([Anton Popov](https://github.com/CurtizJ)). +* 一部の集約関数の状態における String 引数との互換性を修正しました。 [#87049](https://github.com/ClickHouse/ClickHouse/pull/87049) ([Pavel Kruglov](https://github.com/Avogar)). +* OpenAI からのモデル名が渡されていなかった問題を修正しました。 [#87100](https://github.com/ClickHouse/ClickHouse/pull/87100) ([Kaushik Iska](https://github.com/iskakaushik)). +* EmbeddedRocksDB: パスは user_files ディレクトリ配下である必要があります。 [#87109](https://github.com/ClickHouse/ClickHouse/pull/87109) ([Raúl Marín](https://github.com/Algunenano)). +* 25.1 より前に作成された KeeperMap テーブルで、DROP クエリ実行後も ZooKeeper にデータが残る問題を修正しました。 [#87112](https://github.com/ClickHouse/ClickHouse/pull/87112) ([Nikolay Degterinsky](https://github.com/evillique)). +* Parquet 読み込み時の map および array フィールド ID の処理を修正しました。[#87136](https://github.com/ClickHouse/ClickHouse/pull/87136) ([scanhex12](https://github.com/scanhex12)). +* 遅延マテリアライゼーションにおける配列サイズ用サブカラムを持つ配列の読み取りを修正。 [#87139](https://github.com/ClickHouse/ClickHouse/pull/87139) ([Pavel Kruglov](https://github.com/Avogar)). +* Dynamic 型の引数を取る CASE 関数を修正。 [#87177](https://github.com/ClickHouse/ClickHouse/pull/87177) ([Pavel Kruglov](https://github.com/Avogar))。 +* CSV における空文字列からの空配列の読み取りを修正。[#87182](https://github.com/ClickHouse/ClickHouse/pull/87182)([Pavel Kruglov](https://github.com/Avogar))。 +* 相関付けられていない `EXISTS` で誤った結果が返される可能性のある問題を修正しました。これは、[https://github.com/ClickHouse/ClickHouse/pull/85481](https://github.com/ClickHouse/ClickHouse/pull/85481) で導入された `execute_exists_as_scalar_subquery=1` によって発生したもので、`25.8` に影響します。[#86415](https://github.com/ClickHouse/ClickHouse/issues/86415) を修正します。[#87207](https://github.com/ClickHouse/ClickHouse/pull/87207)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 +* `iceberg_metadata_log` が未設定の状態でユーザーが Iceberg メタデータのデバッグ情報を取得しようとした場合にエラーを送出し、ヌルポインタアクセスを修正します。 [#87250](https://github.com/ClickHouse/ClickHouse/pull/87250) ([Daniil Ivanik](https://github.com/divanik)). #### ビルド/テスト/パッケージングの改善 -* abseil-cpp 20250814.0 との互換性の問題を修正しました。https://github.com/abseil/abseil-cpp/issues/1923。 [#85970](https://github.com/ClickHouse/ClickHouse/pull/85970) ([Yuriy Chernyshov](https://github.com/georgthegreat)). + +* abseil-cpp 20250814.0 との互換性問題を修正しました。https://github.com/abseil/abseil-cpp/issues/1923。 [#85970](https://github.com/ClickHouse/ClickHouse/pull/85970) ([Yuriy Chernyshov](https://github.com/georgthegreat)). * スタンドアロン WASM lexer のビルドをフラグで制御するようにしました。 [#86505](https://github.com/ClickHouse/ClickHouse/pull/86505) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* `vmull_p64` 命令をサポートしていない古い ARM CPU 上での crc32c ビルドを修正しました。 [#86521](https://github.com/ClickHouse/ClickHouse/pull/86521) ([Pablo Marcos](https://github.com/pamarcos)). +* `vmull_p64` 命令をサポートしない古い ARM CPU 上での crc32c のビルドを修正しました。 [#86521](https://github.com/ClickHouse/ClickHouse/pull/86521) ([Pablo Marcos](https://github.com/pamarcos)). * `openldap` 2.6.10 を使用するようにしました。 [#86623](https://github.com/ClickHouse/ClickHouse/pull/86623) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* darwin 上で `memalign` をフックしようとしないようにしました。 [#86769](https://github.com/ClickHouse/ClickHouse/pull/86769) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* darwin で `memalign` をフックしようとしないようにしました。 [#86769](https://github.com/ClickHouse/ClickHouse/pull/86769) ([Konstantin Bogdanov](https://github.com/thevar1able)). * `krb5` 1.22.1-final を使用するようにしました。 [#86836](https://github.com/ClickHouse/ClickHouse/pull/86836) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* `list-licenses.sh` における Rust crate 名の展開処理を修正しました。 [#87305](https://github.com/ClickHouse/ClickHouse/pull/87305) ([Konstantin Bogdanov](https://github.com/thevar1able)). - - -### ClickHouse リリース 25.8 LTS, 2025-08-28 {#258} - +* `list-licenses.sh` における Rust クレート名の展開処理を修正しました。 [#87305](https://github.com/ClickHouse/ClickHouse/pull/87305) ([Konstantin Bogdanov](https://github.com/thevar1able)). +### ClickHouse 25.8 LTS リリース(2025-08-28) {#258} #### 後方互換性のない変更 -* JSON 内で異なる型の値を含む配列に対して、名前のない `Tuple` の代わりに `Array(Dynamic)` を推論するようにしました。以前の動作を使用するには、設定 `input_format_json_infer_array_of_dynamic_from_array_of_different_types` を無効にしてください。 [#80859](https://github.com/ClickHouse/ClickHouse/pull/80859) ([Pavel Kruglov](https://github.com/Avogar)). -* 一貫性とシンプルさのため、S3 レイテンシメトリクスをヒストグラムに移行しました。 [#82305](https://github.com/ClickHouse/ClickHouse/pull/82305) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). -* デフォルト式内の識別子にドットが含まれている場合、それらが複合識別子としてパースされるのを防ぐため、バッククォートで囲むことを必須にしました。 [#83162](https://github.com/ClickHouse/ClickHouse/pull/83162) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). -* 遅延マテリアライゼーションは、アナライザ有効時(デフォルト)のみ有効になります。これは、アナライザなしでの保守を避けるためであり、我々の経験ではアナライザなしではいくつかの問題(例えば、条件内で `indexHint()` を使用する場合)があるためです。 [#83791](https://github.com/ClickHouse/ClickHouse/pull/83791) ([Igor Nikonov](https://github.com/devcrafter)). -* Parquet 出力フォーマットにおいて、デフォルトで `Enum` 型の値を `ENUM` 論理型を持つ `BYTE_ARRAY` として書き出すようにしました。 [#84169](https://github.com/ClickHouse/ClickHouse/pull/84169) ([Pavel Kruglov](https://github.com/Avogar)). -* MergeTree 設定 `write_marks_for_substreams_in_compact_parts` をデフォルトで有効化しました。これにより、新しく作成された Compact パーツからのサブカラム読み取りのパフォーマンスが大幅に向上します。バージョン 25.5 未満のサーバーでは、新しい Compact パーツを読み取ることはできません。 [#84171](https://github.com/ClickHouse/ClickHouse/pull/84171) ([Pavel Kruglov](https://github.com/Avogar)). -* 以前の `concurrent_threads_scheduler` のデフォルト値は `round_robin` でしたが、多数の単一スレッドクエリ(例: INSERT)の存在時に不公平であることが判明しました。この変更により、より安全な代替である `fair_round_robin` スケジューラがデフォルトになります。 [#84747](https://github.com/ClickHouse/ClickHouse/pull/84747) ([Sergei Trifonov](https://github.com/serxa)). -* ClickHouse は PostgreSQL スタイルの heredoc 構文 `$tag$ string contents... $tag$`(ドル引用文字列リテラル)をサポートしています。これまでのバージョンではタグに対する制約が少なく、句読点や空白を含む任意の文字を使用できました。これは、ドル文字で開始できる識別子との間でパースの曖昧性を生む可能性があります。一方で、PostgreSQL ではタグには単語構成文字のみが許可されています。この問題を解決するため、heredoc タグには単語構成文字のみが含まれるように制限しました。これにより [#84731](https://github.com/ClickHouse/ClickHouse/issues/84731) がクローズされました。 [#84846](https://github.com/ClickHouse/ClickHouse/pull/84846) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* 関数 `azureBlobStorage`、`deltaLakeAzure`、`icebergAzure` は、`AZURE` 権限を正しく検証するように更新されました。すべてのクラスタ変種の関数(`-Cluster` 関数)は、対応する非クラスタ版に対して権限を検証するようになりました。さらに、`icebergLocal` および `deltaLakeLocal` 関数は `FILE` 権限チェックを必須とするようになりました。 [#84938](https://github.com/ClickHouse/ClickHouse/pull/84938) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). -* `allow_dynamic_metadata_for_data_lakes` 設定(テーブルエンジンレベルの設定)をデフォルトで有効化しました。 [#85044](https://github.com/ClickHouse/ClickHouse/pull/85044) ([Daniil Ivanik](https://github.com/divanik)). -* JSON フォーマットにおいて、64 ビット整数をデフォルトで引用符付きで出力しないようにしました。 [#74079](https://github.com/ClickHouse/ClickHouse/pull/74079) ([Pavel Kruglov](https://github.com/Avogar)) - +* JSON 内で異なる型を持つ値の配列に対して、名前なし `Tuple` の代わりに `Array(Dynamic)` を推論するようにしました。以前の動作を利用するには、設定 `input_format_json_infer_array_of_dynamic_from_array_of_different_types` を無効にしてください。 [#80859](https://github.com/ClickHouse/ClickHouse/pull/80859) ([Pavel Kruglov](https://github.com/Avogar)). +* 一貫性とシンプルさのために、S3 レイテンシメトリクスをヒストグラムメトリクスへ移行しました。 [#82305](https://github.com/ClickHouse/ClickHouse/pull/82305) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). +* デフォルト式中のドットを含む識別子について、それらが複合識別子としてパースされるのを防ぐために、バッククォートで囲むことを必須にしました。 [#83162](https://github.com/ClickHouse/ClickHouse/pull/83162) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +* Lazy materialization はアナライザ有効時(デフォルト)にのみ有効になります。これは、アナライザなしの構成を保守対象としないようにするためです。弊社の経験上、アナライザなしの運用にはいくつか問題があるためです(たとえば条件内で `indexHint()` を使用する場合など)。 [#83791](https://github.com/ClickHouse/ClickHouse/pull/83791) ([Igor Nikonov](https://github.com/devcrafter)). +* Parquet 出力フォーマットにおいて、デフォルトで `Enum` 型の値を、`ENUM` 論理型を持つ `BYTE_ARRAY` として書き出すようにしました。 [#84169](https://github.com/ClickHouse/ClickHouse/pull/84169) ([Pavel Kruglov](https://github.com/Avogar)). +* MergeTree 設定 `write_marks_for_substreams_in_compact_parts` をデフォルトで有効化しました。これにより、新しく作成された Compact パートからサブカラムを読み取る際の性能が大きく向上します。バージョン 25.5 未満のサーバーは新しい Compact パートを読み取ることができません。 [#84171](https://github.com/ClickHouse/ClickHouse/pull/84171) ([Pavel Kruglov](https://github.com/Avogar)). +* 以前の `concurrent_threads_scheduler` のデフォルト値は `round_robin` でしたが、多数の単一スレッドのクエリ(例: INSERT)が存在する場合には不公平であることが分かりました。この変更により、より安全な代替である `fair_round_robin` スケジューラがデフォルトになります。 [#84747](https://github.com/ClickHouse/ClickHouse/pull/84747) ([Sergei Trifonov](https://github.com/serxa)). +* ClickHouse は PostgreSQL スタイルのヒアドキュメント構文 `$tag$ string contents... $tag$`(ドル引用符付き文字列リテラルとしても知られる)をサポートしています。以前のバージョンではタグに対する制約が少なく、句読点や空白を含む任意の文字を使用できました。これは、先頭をドル記号から始めることができる識別子との間に構文解析上の曖昧さを生じさせます。一方で、PostgreSQL ではタグには単語文字のみが許可されています。この問題を解決するために、ヒアドキュメントのタグに含められる文字を単語文字のみに制限しました。これにより [#84731](https://github.com/ClickHouse/ClickHouse/issues/84731) がクローズされます。 [#84846](https://github.com/ClickHouse/ClickHouse/pull/84846) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* 関数 `azureBlobStorage`、`deltaLakeAzure`、`icebergAzure` は、`AZURE` 権限を正しく検証するように更新されました。すべてのクラスタ版の関数(`-Cluster` 関数)は、対応する非クラスタ版の関数に対して権限を検証するようになりました。加えて、`icebergLocal` および `deltaLakeLocal` 関数は `FILE` 権限チェックを必須とするようになりました。 [#84938](https://github.com/ClickHouse/ClickHouse/pull/84938) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). +* `allow_dynamic_metadata_for_data_lakes` 設定(Table Engine レベルの設定)をデフォルトで有効化しました。 [#85044](https://github.com/ClickHouse/ClickHouse/pull/85044) ([Daniil Ivanik](https://github.com/divanik)). +* JSON フォーマットにおいて、64 ビット整数をデフォルトでクオートしないようにしました。 [#74079](https://github.com/ClickHouse/ClickHouse/pull/74079) ([Pavel Kruglov](https://github.com/Avogar)) #### 新機能 -* PromQL 方言の基本的なサポートが追加されました。これを利用するには、clickhouse-client で `dialect='promql'` を設定し、設定項目 `promql_table_name='X'` で TimeSeries テーブルを指定し、`rate(ClickHouseProfileEvents_ReadCompressedBytes[1m])[5m:1m]` のようなクエリを実行します。さらに、PromQL クエリを SQL から呼び出すこともできます: `SELECT * FROM prometheusQuery('up', ...);`。現時点では `rate`、`delta`、`increase` 関数のみがサポートされています。単項演算子および二項演算子はサポートされていません。HTTP API もありません。[#75036](https://github.com/ClickHouse/ClickHouse/pull/75036)([Vitaly Baranov](https://github.com/vitlibar))。 -* AI を用いた SQL 生成機能は、環境変数 ANTHROPIC_API_KEY および OPENAI_API_KEY が設定されている場合には、それらから推論できるようになりました。これにより、この機能を設定不要で利用できるオプションが追加されました。 [#83787](https://github.com/ClickHouse/ClickHouse/pull/83787) ([Kaushik Iska](https://github.com/iskakaushik)). -* [ArrowFlight RPC](https://arrow.apache.org/docs/format/Flight.html) プロトコルのサポートを実装しました。内容: - 新しいテーブル関数 `arrowflight` を追加。 [#74184](https://github.com/ClickHouse/ClickHouse/pull/74184) ([zakr600](https://github.com/zakr600)). -* これにより、すべてのテーブルが(`Merge` エンジンのテーブルだけでなく)`_table` 仮想カラムをサポートするようになりました。これは特に UNION ALL を使用するクエリで有用です。 [#63665](https://github.com/ClickHouse/ClickHouse/pull/63665) ([Xiaozhe Yu](https://github.com/wudidapaopao))。 -* 外部集約/ソート処理で、任意のストレージポリシー(S3 などのオブジェクトストレージを含む)を使用可能にしました。 [#84734](https://github.com/ClickHouse/ClickHouse/pull/84734) ([Azat Khuzhin](https://github.com/azat)). -* 明示的に指定した IAM ロールを用いた AWS S3 認証を実装しました。GCS 向けに OAuth を実装しました。これらの機能は最近まで ClickHouse Cloud でのみ利用可能でしたが、今回オープンソース化されました。オブジェクトストレージ向けの接続パラメータのシリアル化など、いくつかのインターフェースを統一しました。 [#84011](https://github.com/ClickHouse/ClickHouse/pull/84011) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Iceberg TableEngine で position delete をサポート。 [#83094](https://github.com/ClickHouse/ClickHouse/pull/83094) ([Daniil Ivanik](https://github.com/divanik)). -* Iceberg の equality delete に対応しました。 [#85843](https://github.com/ClickHouse/ClickHouse/pull/85843) ([Han Fei](https://github.com/hanfei1991)). -* CREATE 用の Iceberg 書き込みを実装。[#83927](https://github.com/ClickHouse/ClickHouse/issues/83927) をクローズ。[#83983](https://github.com/ClickHouse/ClickHouse/pull/83983)([Konstantin Vedernikov](https://github.com/scanhex12))。 -* 書き込み向け Glue カタログ対応。 [#84136](https://github.com/ClickHouse/ClickHouse/pull/84136) ([Konstantin Vedernikov](https://github.com/scanhex12))。 -* 書き込み用の Iceberg REST カタログ。 [#84684](https://github.com/ClickHouse/ClickHouse/pull/84684) ([Konstantin Vedernikov](https://github.com/scanhex12)). -* すべての Iceberg の position delete ファイルをデータファイルにマージします。これにより、Iceberg ストレージ内の Parquet ファイルの数とサイズを削減できます。構文は `OPTIMIZE TABLE table_name` です。[#85250](https://github.com/ClickHouse/ClickHouse/pull/85250)([Konstantin Vedernikov](https://github.com/scanhex12))。 -* Iceberg に対する `DROP TABLE` をサポート(REST/Glue カタログからの削除 + テーブルメタデータの削除)。[#85395](https://github.com/ClickHouse/ClickHouse/pull/85395)([Konstantin Vedernikov](https://github.com/scanhex12))。 -* merge-on-read フォーマットの Iceberg での ALTER DELETE ミューテーションをサポートしました。 [#85549](https://github.com/ClickHouse/ClickHouse/pull/85549) ([Konstantin Vedernikov](https://github.com/scanhex12)). -* DeltaLake への書き込みをサポートしました。[#79603](https://github.com/ClickHouse/ClickHouse/issues/79603) をクローズ。[#85564](https://github.com/ClickHouse/ClickHouse/pull/85564)([Kseniia Sumarokova](https://github.com/kssenii))。 -* テーブルエンジン `DeltaLake` で特定のスナップショットバージョンを読み取るための設定 `delta_lake_snapshot_version` を追加しました。 [#85295](https://github.com/ClickHouse/ClickHouse/pull/85295) ([Kseniia Sumarokova](https://github.com/kssenii)). -* min-max プルーニングのために、より多くの Iceberg 統計情報(カラムサイズ、下限値および上限値)をメタデータ(マニフェストエントリ)に書き込むようにしました。 [#85746](https://github.com/ClickHouse/ClickHouse/pull/85746) ([Konstantin Vedernikov](https://github.com/scanhex12)). -* 単純な型に対する Iceberg のカラム追加・削除・変更をサポートしました。 [#85769](https://github.com/ClickHouse/ClickHouse/pull/85769) ([Konstantin Vedernikov](https://github.com/scanhex12)). -* Iceberg: version-hint ファイルへの書き込みをサポートしました。これにより [#85097](https://github.com/ClickHouse/ClickHouse/issues/85097) がクローズされました。 [#85130](https://github.com/ClickHouse/ClickHouse/pull/85130) ([Konstantin Vedernikov](https://github.com/scanhex12)). -* 一時ユーザーによって作成された View は、対応する実ユーザーのコピーを保存するようになり、一時ユーザーが削除された後も無効化されなくなりました。 [#84763](https://github.com/ClickHouse/ClickHouse/pull/84763) ([pufit](https://github.com/pufit)). -* ベクトル類似度インデックスはバイナリ量子化をサポートするようになりました。バイナリ量子化によりメモリ消費量が大幅に削減され、(距離計算が高速になるため)ベクトルインデックスの構築処理も高速化されます。また、既存の設定 `vector_search_postfilter_multiplier` は廃止され、より汎用的な設定 `vector_search_index_fetch_multiplier` に置き換えられました。[#85024](https://github.com/ClickHouse/ClickHouse/pull/85024)([Shankar Iyer](https://github.com/shankar-iyer))。 -* `s3` または `s3Cluster` テーブルエンジン/関数でキーと値の形式による引数指定を許可しました。たとえば `s3('url', CSV, structure = 'a Int32', compression_method = 'gzip')` のように指定できます。 [#85134](https://github.com/ClickHouse/ClickHouse/pull/85134) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Kafka のようなエンジンからのエラーとなった受信メッセージを保持するための新しいシステムテーブル(「デッドレターキュー」)。 [#68873](https://github.com/ClickHouse/ClickHouse/pull/68873) ([Ilya Golshtein](https://github.com/ilejn)). -* Replicated データベース向けの新しい SYSTEM RESTORE DATABASE REPLICA を追加しました。これは ReplicatedMergeTree における既存のリストア機能と同様のものです。 [#73100](https://github.com/ClickHouse/ClickHouse/pull/73100) ([Konstantin Morozov](https://github.com/k-morozov)). -* PostgreSQL プロトコルで `COPY` コマンドがサポートされるようになりました。 [#74344](https://github.com/ClickHouse/ClickHouse/pull/74344) ([Konstantin Vedernikov](https://github.com/scanhex12)). -* MySQL プロトコル用の C# クライアントをサポートしました。これにより [#83992](https://github.com/ClickHouse/ClickHouse/issues/83992) がクローズされました。[#84397](https://github.com/ClickHouse/ClickHouse/pull/84397)([Konstantin Vedernikov](https://github.com/scanhex12))。 -* Hive パーティション形式での読み取りおよび書き込みのサポートを追加。 [#76802](https://github.com/ClickHouse/ClickHouse/pull/76802) ([Arthur Passos](https://github.com/arthurpassos)). -* ZooKeeper 接続に関する履歴情報を保存するための `zookeeper_connection_log` システムテーブルを追加しました。 [#79494](https://github.com/ClickHouse/ClickHouse/pull/79494) ([János Benjamin Antal](https://github.com/antaljanosbenjamin))。 -* サーバー設定 `cpu_slot_preemption` により、ワークロード向けのプリエンプティブな CPU スケジューリングが有効になり、ワークロード間での CPU 時間の max-min 公平な割り当てが保証されます。CPU スロットリング用の新しいワークロード設定が追加されました: `max_cpus`、`max_cpu_share`、`max_burst_cpu_seconds`。詳細: [https://clickhouse.com/docs/operations/workload-scheduling#cpu_scheduling](https://clickhouse.com/docs/operations/workload-scheduling#cpu_scheduling)。[#80879](https://github.com/ClickHouse/ClickHouse/pull/80879)([Sergei Trifonov](https://github.com/serxa))。 -* 設定されたクエリ数または時間しきい値に達した時点で TCP 接続を切断します。これにより、ロードバランサー配下のクラスタノード間で接続の分散をより均一にできます。[#68000](https://github.com/ClickHouse/ClickHouse/issues/68000) を解決します。[#81472](https://github.com/ClickHouse/ClickHouse/pull/81472)([Kenny Sun](https://github.com/hwabis))。 -* 並列レプリカでクエリにプロジェクションを使用できるようになりました。 [#82659](https://github.com/ClickHouse/ClickHouse/issues/82659)。 [#82807](https://github.com/ClickHouse/ClickHouse/pull/82807) ([zoomxi](https://github.com/zoomxi))。 -* DESCRIBE (SELECT ...) に加えて DESCRIBE SELECT をサポートしました。 [#82947](https://github.com/ClickHouse/ClickHouse/pull/82947) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* mysql_port と postgresql_port に対してセキュアな接続を強制します。 [#82962](https://github.com/ClickHouse/ClickHouse/pull/82962) ([tiandiwonder](https://github.com/tiandiwonder)). -* ユーザーは、`JSONExtractCaseInsensitive`(および `JSONExtract` の他のバリアント)を使用して、大文字小文字を区別しない JSON キーの参照を行えるようになりました。 [#83770](https://github.com/ClickHouse/ClickHouse/pull/83770) ([Alistair Evans](https://github.com/alistairjevans))。 -* `system.completions` テーブルを導入。[#81889](https://github.com/ClickHouse/ClickHouse/issues/81889) をクローズ。[#83833](https://github.com/ClickHouse/ClickHouse/pull/83833)([|2ustam](https://github.com/RuS2m))。 -* 新しい関数 `nowInBlock64` を追加しました。使用例:`SELECT nowInBlock64(6)` を実行すると、`2025-07-29 17:09:37.775725` が返されます。 [#84178](https://github.com/ClickHouse/ClickHouse/pull/84178) ([Halersson Paris](https://github.com/halersson)). -* client_id と tenant_id で認証できるようにするため、AzureBlobStorage に extra_credentials を追加しました。 [#84235](https://github.com/ClickHouse/ClickHouse/pull/84235) ([Pablo Marcos](https://github.com/pamarcos)). -* DateTime 型の値を UUIDv7 に変換する関数 `dateTimeToUUIDv7` を追加しました。使用例:`SELECT dateTimeToUUIDv7(toDateTime('2025-08-15 18:57:56'))` は `0198af18-8320-7a7d-abd3-358db23b9d5c` を返します。 [#84319](https://github.com/ClickHouse/ClickHouse/pull/84319) ([samradovich](https://github.com/samradovich))。 -* `timeSeriesDerivToGrid` および `timeSeriesPredictLinearToGrid` 集約関数により、指定された開始タイムスタンプ・終了タイムスタンプ・ステップで定義される時間グリッドにデータを再サンプリングし、それぞれ PromQL の `deriv` および `predict_linear` に類似した計算を行います。 [#84328](https://github.com/ClickHouse/ClickHouse/pull/84328) ([Stephen Chi](https://github.com/stephchi0)). -* 2 つの新しい TimeSeries 関数を追加しました: - `timeSeriesRange(start_timestamp, end_timestamp, step)`, - `timeSeriesFromGrid(start_timestamp, end_timestamp, step, values)`. [#85435](https://github.com/ClickHouse/ClickHouse/pull/85435) ([Vitaly Baranov](https://github.com/vitlibar)). -* 新しい構文 `GRANT READ ON S3('s3://foo/.*') TO user` が追加されました。 [#84503](https://github.com/ClickHouse/ClickHouse/pull/84503)([pufit](https://github.com/pufit))。 -* 新しい出力形式として `Hash` を追加しました。この形式は、結果のすべての列および行に対して単一のハッシュ値を計算します。たとえばデータ転送がボトルネックとなるユースケースで、結果の「フィンガープリント」を計算するのに有用です。例: `SELECT arrayJoin(['abc', 'def']), 42 FORMAT Hash` は `e5f9e676db098fdb9530d2059d8c23ef` を返します。 [#84607](https://github.com/ClickHouse/ClickHouse/pull/84607) ([Robert Schulze](https://github.com/rschu1ze)). +* PromQL 方言の基本的なサポートが追加されました。これを使用するには、clickhouse-client で `dialect='promql'` を設定し、設定 `promql_table_name='X'` を用いて TimeSeries テーブルを参照するようにし、`rate(ClickHouseProfileEvents_ReadCompressedBytes[1m])[5m:1m]` のようなクエリを実行します。さらに、PromQL クエリを SQL でラップすることもできます: `SELECT * FROM prometheusQuery('up', ...);`。現時点では `rate`、`delta`、`increase` 関数のみがサポートされています。単項/二項演算子は未対応です。HTTP API もサポートされていません。[#75036](https://github.com/ClickHouse/ClickHouse/pull/75036)([Vitaly Baranov](https://github.com/vitlibar))。 +* AI による SQL 自動生成機能は、利用可能な場合には環境変数 `ANTHROPIC_API_KEY` と `OPENAI_API_KEY` を自動検出できるようになりました。これにより、この機能を設定不要(ゼロコンフィグ)で利用できるようになります。 [#83787](https://github.com/ClickHouse/ClickHouse/pull/83787) ([Kaushik Iska](https://github.com/iskakaushik)). +* [ArrowFlight RPC](https://arrow.apache.org/docs/format/Flight.html) プロトコルのサポートを、次を追加することで実装しました: - 新しいテーブル関数 `arrowflight`。 [#74184](https://github.com/ClickHouse/ClickHouse/pull/74184) ([zakr600](https://github.com/zakr600)). +* これにより、すべてのテーブルが `_table` 仮想カラムをサポートするようになりました(`Merge` エンジンを使用するテーブルだけでなく)、特に UNION ALL を使用するクエリで有用です。 [#63665](https://github.com/ClickHouse/ClickHouse/pull/63665) ([Xiaozhe Yu](https://github.com/wudidapaopao))。 +* 外部集約/ソートで任意のストレージポリシー(S3 などのオブジェクトストレージを含む)を利用できるようにしました。 [#84734](https://github.com/ClickHouse/ClickHouse/pull/84734) ([Azat Khuzhin](https://github.com/azat)). +* 明示的に指定した IAM ロールを用いた AWS S3 認証を実装しました。GCS 向けに OAuth を実装しました。これらの機能はこれまで ClickHouse Cloud でのみ利用可能でしたが、今回オープンソース化されました。オブジェクトストレージ向けの接続パラメータのシリアル化など、一部のインターフェイスを統一しました。[#84011](https://github.com/ClickHouse/ClickHouse/pull/84011) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Iceberg TableEngine で position delete のサポートを追加しました。 [#83094](https://github.com/ClickHouse/ClickHouse/pull/83094) ([Daniil Ivanik](https://github.com/divanik)). +* Iceberg の Equality Delete をサポート。 [#85843](https://github.com/ClickHouse/ClickHouse/pull/85843) ([Han Fei](https://github.com/hanfei1991)). +* CREATE に対する Iceberg 書き込みを実装。[#83927](https://github.com/ClickHouse/ClickHouse/issues/83927) をクローズ。[#83983](https://github.com/ClickHouse/ClickHouse/pull/83983) ([Konstantin Vedernikov](https://github.com/scanhex12)). +* 書き込み用 Glue カタログ。[#84136](https://github.com/ClickHouse/ClickHouse/pull/84136) ([Konstantin Vedernikov](https://github.com/scanhex12)). +* 書き込みに対応した Iceberg REST カタログ。 [#84684](https://github.com/ClickHouse/ClickHouse/pull/84684) ([Konstantin Vedernikov](https://github.com/scanhex12)). +* すべての Iceberg の position delete ファイルをデータファイルにマージします。これにより、Iceberg ストレージ内の Parquet ファイルの数とサイズを削減できます。構文:`OPTIMIZE TABLE table_name`。 [#85250](https://github.com/ClickHouse/ClickHouse/pull/85250) ([Konstantin Vedernikov](https://github.com/scanhex12)). +* Iceberg 向けの `DROP TABLE` をサポート(REST/Glue カタログからの削除とテーブルに関するメタデータの削除)。 [#85395](https://github.com/ClickHouse/ClickHouse/pull/85395) ([Konstantin Vedernikov](https://github.com/scanhex12)). +* merge-on-read 形式の Iceberg テーブルで ALTER DELETE ミューテーションをサポートしました。 [#85549](https://github.com/ClickHouse/ClickHouse/pull/85549) ([Konstantin Vedernikov](https://github.com/scanhex12)). +* DeltaLake への書き込みのサポートを追加。 [#79603](https://github.com/ClickHouse/ClickHouse/issues/79603) をクローズ。 [#85564](https://github.com/ClickHouse/ClickHouse/pull/85564) ([Kseniia Sumarokova](https://github.com/kssenii))。 +* テーブルエンジン `DeltaLake` で特定のスナップショットバージョンを読み込めるようにする設定 `delta_lake_snapshot_version` を追加しました。 [#85295](https://github.com/ClickHouse/ClickHouse/pull/85295) ([Kseniia Sumarokova](https://github.com/kssenii)). +* min-max プルーニングのために、メタデータ(マニフェストエントリ)に Iceberg の統計情報(列サイズ、下限値および上限値)をより多く書き込むようにしました。 [#85746](https://github.com/ClickHouse/ClickHouse/pull/85746) ([Konstantin Vedernikov](https://github.com/scanhex12)). +* 単純型カラムに対する Iceberg テーブルでの追加/削除/変更をサポートしました。 [#85769](https://github.com/ClickHouse/ClickHouse/pull/85769) ([Konstantin Vedernikov](https://github.com/scanhex12)). +* Iceberg:version-hint ファイルへの書き込みをサポートしました。これにより [#85097](https://github.com/ClickHouse/ClickHouse/issues/85097) が解決しました。[#85130](https://github.com/ClickHouse/ClickHouse/pull/85130)([Konstantin Vedernikov](https://github.com/scanhex12))。 +* 一時ユーザーによって作成されたビューは、通常のユーザーのコピーを保存するようになり、一時ユーザーが削除された後でも無効化されなくなりました。 [#84763](https://github.com/ClickHouse/ClickHouse/pull/84763) ([pufit](https://github.com/pufit)). +* ベクトル類似性インデックスがバイナリ量子化をサポートするようになりました。バイナリ量子化によりメモリ使用量が大幅に削減され、(距離計算が高速になることで)ベクトルインデックスの構築も高速化されます。また、既存の設定 `vector_search_postfilter_multiplier` は廃止され、より汎用的な設定である `vector_search_index_fetch_multiplier` に置き換えられました。[#85024](https://github.com/ClickHouse/ClickHouse/pull/85024)([Shankar Iyer](https://github.com/shankar-iyer))。 +* `s3` および `s3Cluster` テーブルエンジン/テーブル関数でキー・バリュー形式の引数指定が可能になりました。例えば、`s3('url', CSV, structure = 'a Int32', compression_method = 'gzip')` のように指定できます。[#85134](https://github.com/ClickHouse/ClickHouse/pull/85134)([Kseniia Sumarokova](https://github.com/kssenii))。 +* Kafka のようなエンジンからのエラーとなった受信メッセージを保持するための新しいシステムテーブル(「dead letter queue」)。 [#68873](https://github.com/ClickHouse/ClickHouse/pull/68873) ([Ilya Golshtein](https://github.com/ilejn))。 +* Replicated データベース向けに、ReplicatedMergeTree の既存のリストア機能と同様の新しい `SYSTEM RESTORE DATABASE REPLICA` が追加されました。 [#73100](https://github.com/ClickHouse/ClickHouse/pull/73100) ([Konstantin Morozov](https://github.com/k-morozov)). +* PostgreSQL プロトコルに `COPY` コマンドのサポートを追加しました。 [#74344](https://github.com/ClickHouse/ClickHouse/pull/74344) ([Konstantin Vedernikov](https://github.com/scanhex12)). +* MySQL プロトコル向けの C# クライアントをサポートしました。これにより [#83992](https://github.com/ClickHouse/ClickHouse/issues/83992) が解決されました。[#84397](https://github.com/ClickHouse/ClickHouse/pull/84397)([Konstantin Vedernikov](https://github.com/scanhex12))。 +* Hive パーティション形式での読み取りと書き込みのサポートを追加。 [#76802](https://github.com/ClickHouse/ClickHouse/pull/76802) ([Arthur Passos](https://github.com/arthurpassos)). +* `zookeeper_connection_log` システムテーブルを追加し、ZooKeeper への接続に関する履歴情報を保存できるようにしました。 [#79494](https://github.com/ClickHouse/ClickHouse/pull/79494) ([János Benjamin Antal](https://github.com/antaljanosbenjamin))。 +* サーバー設定 `cpu_slot_preemption` は、ワークロードに対するプリエンプティブな CPU スケジューリングを有効にし、ワークロード間での CPU 時間の max-min 公平な割り当てを保証します。CPU スロットリング用の新しいワークロード設定が追加されました:`max_cpus`、`max_cpu_share`、`max_burst_cpu_seconds`。詳細: [https://clickhouse.com/docs/operations/workload-scheduling#cpu_scheduling](https://clickhouse.com/docs/operations/workload-scheduling#cpu_scheduling)。 [#80879](https://github.com/ClickHouse/ClickHouse/pull/80879) ([Sergei Trifonov](https://github.com/serxa))。 +* 設定されたクエリ数または時間のしきい値に達した後に TCP 接続を切断します。これにより、ロードバランサー配下のクラスタノード間で接続の分布をより均一にできます。[#68000](https://github.com/ClickHouse/ClickHouse/issues/68000) を解決します。 [#81472](https://github.com/ClickHouse/ClickHouse/pull/81472)([Kenny Sun](https://github.com/hwabis))。 +* パラレルレプリカでクエリにプロジェクションを使用できるようになりました。 [#82659](https://github.com/ClickHouse/ClickHouse/issues/82659)。 [#82807](https://github.com/ClickHouse/ClickHouse/pull/82807) ([zoomxi](https://github.com/zoomxi))。 +* DESCRIBE (SELECT ...) に加えて DESCRIBE SELECT もサポートしました。 [#82947](https://github.com/ClickHouse/ClickHouse/pull/82947) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* mysql_port および postgresql_port に対して安全な接続の利用を必須化。 [#82962](https://github.com/ClickHouse/ClickHouse/pull/82962) ([tiandiwonder](https://github.com/tiandiwonder)). +* ユーザーは `JSONExtractCaseInsensitive`(および `JSONExtract` のその他のバリアント)を使用して、大文字小文字を区別しない JSON キー検索を行えるようになりました。 [#83770](https://github.com/ClickHouse/ClickHouse/pull/83770) ([Alistair Evans](https://github.com/alistairjevans))。 +* `system.completions` テーブルを導入し、[#81889](https://github.com/ClickHouse/ClickHouse/issues/81889) をクローズ。[#83833](https://github.com/ClickHouse/ClickHouse/pull/83833)([|2ustam](https://github.com/RuS2m))。 +* 新しい関数 `nowInBlock64` を追加しました。使用例:`SELECT nowInBlock64(6)` は `2025-07-29 17:09:37.775725` を返します。 [#84178](https://github.com/ClickHouse/ClickHouse/pull/84178) ([Halersson Paris](https://github.com/halersson))。 +* AzureBlobStorage で client_id と tenant_id を用いて認証できるようにするため、extra_credentials を追加しました。 [#84235](https://github.com/ClickHouse/ClickHouse/pull/84235) ([Pablo Marcos](https://github.com/pamarcos)). +* `DateTime` の値を UUIDv7 に変換する関数 `dateTimeToUUIDv7` を追加しました。使用例:`SELECT dateTimeToUUIDv7(toDateTime('2025-08-15 18:57:56'))` は `0198af18-8320-7a7d-abd3-358db23b9d5c` を返します。 [#84319](https://github.com/ClickHouse/ClickHouse/pull/84319) ([samradovich](https://github.com/samradovich))。 +* `timeSeriesDerivToGrid` および `timeSeriesPredictLinearToGrid` 集約関数は、指定された開始タイムスタンプ、終了タイムスタンプ、およびステップで定義される時間グリッドにデータを再サンプリングし、それぞれ PromQL 風の `deriv` と `predict_linear` を計算します。 [#84328](https://github.com/ClickHouse/ClickHouse/pull/84328) ([Stephen Chi](https://github.com/stephchi0)). +* 2 つの新しい TimeSeries 関数を追加しました: - `timeSeriesRange(start_timestamp, end_timestamp, step)`、- `timeSeriesFromGrid(start_timestamp, end_timestamp, step, values)`。[#85435](https://github.com/ClickHouse/ClickHouse/pull/85435)([Vitaly Baranov](https://github.com/vitlibar))。 +* 新しい構文 `GRANT READ ON S3('s3://foo/.*') TO user` が追加されました。 [#84503](https://github.com/ClickHouse/ClickHouse/pull/84503) ([pufit](https://github.com/pufit))。 +* 新しい出力フォーマットとして `Hash` を追加しました。結果のすべての列および行に対して単一のハッシュ値を計算します。これは、たとえばデータ転送がボトルネックとなるユースケースで、結果の「フィンガープリント」を計算するのに有用です。例: `SELECT arrayJoin(['abc', 'def']), 42 FORMAT Hash` は `e5f9e676db098fdb9530d2059d8c23ef` を返します。 [#84607](https://github.com/ClickHouse/ClickHouse/pull/84607) ([Robert Schulze](https://github.com/rschu1ze)). * Keeper Multi クエリで任意のウォッチを設定できる機能を追加しました。 [#84964](https://github.com/ClickHouse/ClickHouse/pull/84964) ([Mikhail Artemenko](https://github.com/Michicosun)). -* `clickhouse-benchmark` ツールにオプション `--max-concurrency` を追加し、このオプションにより並列クエリ数を段階的に増やすモードを有効にします。 [#85623](https://github.com/ClickHouse/ClickHouse/pull/85623) ([Sergei Trifonov](https://github.com/serxa))。 -* 部分的に集約されたメトリクスをサポートします。 [#85328](https://github.com/ClickHouse/ClickHouse/pull/85328) ([Mikhail Artemenko](https://github.com/Michicosun)). - - +* `clickhouse-benchmark` ツールにオプション `--max-concurrency` を追加し、並列クエリ数を段階的に増加させるモードを有効にします。 [#85623](https://github.com/ClickHouse/ClickHouse/pull/85623) ([Sergei Trifonov](https://github.com/serxa))。 +* 部分集約されたメトリクスのサポートを追加しました。 [#85328](https://github.com/ClickHouse/ClickHouse/pull/85328) ([Mikhail Artemenko](https://github.com/Michicosun)). #### 実験的機能 -* 相関サブクエリのサポートをデフォルトで有効化しました。もはや実験的機能ではありません。 [#85107](https://github.com/ClickHouse/ClickHouse/pull/85107) ([Dmitry Novik](https://github.com/novikd)). -* Unity、Glue、REST、および Hive Metastore のデータレイクカタログを実験的段階からベータ版に昇格しました。 [#85848](https://github.com/ClickHouse/ClickHouse/pull/85848) ([Melvyn Peignon](https://github.com/melvynator)). -* 軽量な更新および削除を実験的段階からベータ版に昇格しました。 -* ベクター類似性インデックスを用いた近似ベクター検索が一般提供(GA)になりました。 [#85888](https://github.com/ClickHouse/ClickHouse/pull/85888) ([Robert Schulze](https://github.com/rschu1ze)). -* Ytsaurus テーブルエンジンおよびテーブル関数。 [#77606](https://github.com/ClickHouse/ClickHouse/pull/77606) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). -* 以前は、テキストインデックスのデータは複数のセグメントに分割されていました(各セグメントサイズはデフォルトで 256 MiB)。これはテキストインデックス構築時のメモリ消費を削減する可能性がありますが、その一方でディスク上の必要容量を増加させ、クエリの応答時間を長くしていました。 [#84590](https://github.com/ClickHouse/ClickHouse/pull/84590) ([Elmi Ahmadov](https://github.com/ahmadov)). - +* 相関付きサブクエリのサポートをデフォルトで有効化しました。もはや実験的機能ではありません。 [#85107](https://github.com/ClickHouse/ClickHouse/pull/85107) ([Dmitry Novik](https://github.com/novikd)). +* Unity、Glue、REST、Hive Metastore のデータレイクカタログを実験的段階からベータ版へ昇格しました。 [#85848](https://github.com/ClickHouse/ClickHouse/pull/85848) ([Melvyn Peignon](https://github.com/melvynator)). +* 軽量な更新および削除機能を実験的段階からベータ版へ昇格しました。 +* ベクトル類似度インデックスを用いた近似ベクトル検索が GA になりました。 [#85888](https://github.com/ClickHouse/ClickHouse/pull/85888) ([Robert Schulze](https://github.com/rschu1ze)). +* Ytsaurus テーブルエンジンおよびテーブル関数を追加しました。 [#77606](https://github.com/ClickHouse/ClickHouse/pull/77606) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). +* 以前は、テキストインデックスのデータは複数のセグメントに分割されていました(各セグメントサイズはデフォルトで 256 MiB でした)。これはテキストインデックス構築時のメモリ使用量を削減できる場合がありますが、その一方でディスク上の必要容量を増加させ、クエリ応答時間も長くします。 [#84590](https://github.com/ClickHouse/ClickHouse/pull/84590) ([Elmi Ahmadov](https://github.com/ahmadov)). #### パフォーマンスの向上 -* 新しい Parquet リーダーの実装。従来より高速で、ページレベルのフィルタープッシュダウンと PREWHERE をサポートします。現時点では実験的機能です。有効にするには設定 `input_format_parquet_use_native_reader_v3` を有効にしてください。 [#82789](https://github.com/ClickHouse/ClickHouse/pull/82789) ([Michael Kolupaev](https://github.com/al13n321)). -* Azure Blob Storage 向けの公式 Azure ライブラリの HTTP トランスポートを、独自実装の HTTP クライアントに置き換えました。このクライアントには、S3 向けクライアントの設定を反映した複数の設定項目を用意しました。Azure と S3 の両方に対して、積極的な(短めの)接続タイムアウトを導入しました。Azure プロファイルのイベントおよびメトリクスの観測性を改善しました。新しいクライアントはデフォルトで有効になっており、Azure Blob Storage 上でのコールドクエリのレイテンシを大幅に改善します。旧 `Curl` クライアントは、`azure_sdk_use_native_client=false` を設定することで戻すことができます。 [#83294](https://github.com/ClickHouse/ClickHouse/pull/83294) ([alesapin](https://github.com/alesapin))。これまでの公式の Azure クライアント実装は、本番環境での利用には適しておらず、5 秒から数分に及ぶ深刻なレイテンシスパイクが発生していました。このひどい実装は廃止しており、その点を大いに誇りに思っています。 -* ファイルサイズが小さいインデックスから順に処理します。最終的なインデックスの処理順では、(それぞれ単純さと選択性により)minmax インデックスとベクターインデックスを優先し、その後にその他の小さいインデックスを処理します。minmax/ベクターインデックス内でも、よりファイルサイズの小さいインデックスが優先されます。 [#84094](https://github.com/ClickHouse/ClickHouse/pull/84094) ([Maruth Goyal](https://github.com/maruthgoyal)). -* MergeTree の設定 `write_marks_for_substreams_in_compact_parts` をデフォルトで有効化しました。これにより、新しく作成された Compact パーツに対するサブカラム読み取りのパフォーマンスが大幅に向上します。バージョン 25.5 未満のサーバーでは、新しい Compact パーツを読み取れません。 [#84171](https://github.com/ClickHouse/ClickHouse/pull/84171) ([Pavel Kruglov](https://github.com/Avogar)). -* `azureBlobStorage` テーブルエンジン: スロットリングを回避するため、可能な場合は管理対象 ID の認証トークンをキャッシュして再利用するようにしました。 [#79860](https://github.com/ClickHouse/ClickHouse/pull/79860) ([Nick Blakely](https://github.com/niblak))。 -* 右側が結合キー列に関数従属している場合(すべての行が一意の結合キー値を持つ場合)、`ALL` `LEFT/INNER` JOIN は自動的に `RightAny` に変換されます。 [#84010](https://github.com/ClickHouse/ClickHouse/pull/84010) ([Nikita Taranov](https://github.com/nickitat))。 -* `max_joined_block_size_rows` に加えて `max_joined_block_size_bytes` を追加し、サイズの大きなカラムを含む JOIN のメモリ使用量を制限できるようにしました。 [#83869](https://github.com/ClickHouse/ClickHouse/pull/83869) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). -* `enable_producing_buckets_out_of_order_in_aggregation` という設定(デフォルトで有効)で制御される新しいロジックを追加しました。これにより、メモリ効率の高い集約処理中に、一部のバケットを順不同で送信できるようになります。特定の集約バケットのマージに他よりも大幅に時間がかかる場合に、イニシエータがその間により大きなバケット ID を持つバケットをマージできるようになるため、パフォーマンスが向上します。欠点としては、メモリ使用量が増加する可能性があります(ただし顕著な増加にはならないはずです)。 [#80179](https://github.com/ClickHouse/ClickHouse/pull/80179) ([Nikita Taranov](https://github.com/nickitat)). -* `optimize_rewrite_regexp_functions` 設定(デフォルトで有効)を導入しました。この設定により、特定の正規表現パターンが検出された場合、オプティマイザは一部の `replaceRegexpAll`、`replaceRegexpOne`、`extract` 呼び出しを、より単純で効率的な形式に書き換えられるようになります。(issue [#81981](https://github.com/ClickHouse/ClickHouse/issues/81981))。[#81992](https://github.com/ClickHouse/ClickHouse/pull/81992)([Amos Bird](https://github.com/amosbird))。 -* ハッシュ JOIN のメインループの外側で `max_joined_block_rows` を処理するように変更。ALL JOIN のパフォーマンスがわずかに向上。 [#83216](https://github.com/ClickHouse/ClickHouse/pull/83216) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). -* より細かい粒度の min-max インデックスを先に処理するようにしました。[#75381](https://github.com/ClickHouse/ClickHouse/issues/75381) をクローズ。[#83798](https://github.com/ClickHouse/ClickHouse/pull/83798)([Maruth Goyal](https://github.com/maruthgoyal))。 -* `DISTINCT` ウィンドウ集約が線形時間で動作するようにし、`sumDistinct` のバグを修正しました。[#79792](https://github.com/ClickHouse/ClickHouse/issues/79792) をクローズしました。[#52253](https://github.com/ClickHouse/ClickHouse/issues/52253) をクローズしました。[#79859](https://github.com/ClickHouse/ClickHouse/pull/79859)([Nihal Z. Miaji](https://github.com/nihalzp))。 -* ベクトル類似性インデックスを使用したベクトル検索クエリは、ストレージ読み取りの削減と CPU 使用率の低減により、より低いレイテンシで完了します。 [#83803](https://github.com/ClickHouse/ClickHouse/pull/83803) ([Shankar Iyer](https://github.com/shankar-iyer)). -* 並列レプリカ間のワークロード分散におけるキャッシュ局所性を向上させるためのランデブーハッシュ方式。 [#82511](https://github.com/ClickHouse/ClickHouse/pull/82511) ([Anton Ivashkin](https://github.com/ianton-ru)). -* If コンビネーターに対して addManyDefaults を実装し、If コンビネーターを用いる集約関数がより高速に動作するようになりました。 [#83870](https://github.com/ClickHouse/ClickHouse/pull/83870) ([Raúl Marín](https://github.com/Algunenano)). -* 複数の文字列または数値カラムで `GROUP BY` する際に、シリアライズされたキーを列指向で計算するようにしました。 [#83884](https://github.com/ClickHouse/ClickHouse/pull/83884) ([李扬](https://github.com/taiyang-li)) -* インデックス解析の結果、並列レプリカ読み取りの対象範囲が空になる場合に、フルスキャンを行わないようにしました。 [#84971](https://github.com/ClickHouse/ClickHouse/pull/84971) ([Eduard Karacharov](https://github.com/korowa)). -* パフォーマンステストをより安定させるために、`-falign-functions=64` を使用してみる。 [#83920](https://github.com/ClickHouse/ClickHouse/pull/83920) ([Azat Khuzhin](https://github.com/azat)). -* ブルームフィルターインデックスは、`column` が `Array` 型ではない場合の `has([c1, c2, ...], column)` のような条件にも使用されるようになりました。これにより、そのようなクエリのパフォーマンスが向上し、`IN` 演算子と同程度の効率で実行できるようになりました。 [#83945](https://github.com/ClickHouse/ClickHouse/pull/83945) ([Doron David](https://github.com/dorki)). -* CompressedReadBufferBase::readCompressedData における不要な memcpy 呼び出しを削減しました。 [#83986](https://github.com/ClickHouse/ClickHouse/pull/83986) ([Raúl Marín](https://github.com/Algunenano)). -* 一時データを削除して `largestTriangleThreeBuckets` を最適化。 [#84479](https://github.com/ClickHouse/ClickHouse/pull/84479) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* コードの単純化により文字列デシリアライズを最適化。[#38564](https://github.com/ClickHouse/ClickHouse/issues/38564) をクローズ。 [#84561](https://github.com/ClickHouse/ClickHouse/pull/84561)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 並列レプリカにおける最小タスクサイズの計算を修正しました。 [#84752](https://github.com/ClickHouse/ClickHouse/pull/84752) ([Nikita Taranov](https://github.com/nickitat)). -* `Join` モードにおけるパッチパーツ適用処理のパフォーマンスを改善しました。 [#85040](https://github.com/ClickHouse/ClickHouse/pull/85040) ([Anton Popov](https://github.com/CurtizJ)). -* ゼロバイトに関する問題を修正しました。[#85062](https://github.com/ClickHouse/ClickHouse/issues/85062) をクローズします。いくつかの軽微なバグを修正しました。関数 `structureToProtobufSchema` と `structureToCapnProtoSchema` は、ゼロ終端バイトを正しく付与せず、その代わりに改行を使用していました。これにより、出力中の改行が欠落し、ゼロバイトに依存する他の関数(`logTrace`、`demangle`、`extractURLParameter`、`toStringCutToZero`、`encrypt`/`decrypt` など)を使用した場合にバッファオーバーフローを引き起こす可能性がありました。`regexp_tree` 辞書レイアウトは、ゼロバイトを含む文字列の処理をサポートしていませんでした。`formatRowNoNewline` 関数は、`Values` フォーマット、または行末に改行を含まないその他のフォーマットで呼び出された場合に、出力の最後の 1 文字を誤って切り捨てていました。関数 `stem` には例外安全性の不具合があり、非常にまれな状況でメモリリークにつながる可能性がありました。`initcap` 関数は `FixedString` 引数に対して誤った動作をしており、同じブロック内で直前の文字列が単語文字で終わっている場合、文字列先頭を単語の開始位置として認識しませんでした。Apache `ORC` フォーマットのセキュリティ脆弱性を修正しました。これは未初期化メモリの露出につながる可能性がありました。関数 `replaceRegexpAll` と、それに対応するエイリアス `REGEXP_REPLACE` の動作を変更しました。これにより、`^a*|a*$` や `^|.*` のように、前のマッチが文字列全体を処理した場合でも、文字列末尾で空マッチを行えるようになりました。これは JavaScript、Perl、Python、PHP、Ruby のセマンティクスに対応しますが、PostgreSQL のセマンティクスとは異なります。多くの関数の実装を単純化および最適化しました。複数の関数について、誤っていたドキュメントを修正しました。String 列および String 列を含む複合型に対する `byteSize` の出力は(空文字列 1 つあたり 9 バイトから 8 バイトへと)変更されており、これは正常な挙動であることに注意してください。[#85063](https://github.com/ClickHouse/ClickHouse/pull/85063)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 単一行のみを返す目的で定数をマテリアライズしているケースにおいて、その処理を最適化しました。 [#85071](https://github.com/ClickHouse/ClickHouse/pull/85071) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* delta-kernel-rs バックエンドでファイル処理の並列性を向上。 [#85642](https://github.com/ClickHouse/ClickHouse/pull/85642) ([Azat Khuzhin](https://github.com/azat)). -* 新しい設定 `enable_add_distinct_to_in_subqueries` が導入されました。有効化すると、ClickHouse は分散クエリの `IN` 句内にあるサブクエリに対して自動的に `DISTINCT` を付加します。これにより、シャード間で転送される一時テーブルのサイズを大幅に削減し、ネットワーク効率を向上させることができます。注意:これはトレードオフであり、ネットワーク転送量は削減されますが、各ノードで追加のマージ(重複排除)処理が必要になります。ネットワーク転送量がボトルネックとなっており、マージ処理コストが許容できる場合にこの設定を有効にしてください。 [#81908](https://github.com/ClickHouse/ClickHouse/pull/81908) ([fhw12345](https://github.com/fhw12345)). -* 実行可能なユーザー定義関数に対するクエリのメモリトラッキングに伴うオーバーヘッドを削減しました。 [#83929](https://github.com/ClickHouse/ClickHouse/pull/83929) ([Eduard Karacharov](https://github.com/korowa)). -* ストレージ `DeltaLake` に `delta-kernel-rs` による内部フィルタリング機能(統計およびパーティションプルーニング)を実装。 [#84006](https://github.com/ClickHouse/ClickHouse/pull/84006) ([Kseniia Sumarokova](https://github.com/kssenii)). -* オンザフライで更新されるカラムや、パッチパーツによって更新されるカラムに依存するスキップインデックスの無効化を、より細かい粒度で制御するようにしました。これにより、スキップインデックスはオンザフライのミューテーションやパッチパーツの影響を受けたパーツでのみ無効化され、それ以外のパーツでは引き続き使用されます。以前は、そのようなインデックスはすべてのパーツで無効化されていました。 [#84241](https://github.com/ClickHouse/ClickHouse/pull/84241) ([Anton Popov](https://github.com/CurtizJ)). -* 暗号化された名前付きコレクション用の `encrypted_buffer` に必要最小限のメモリのみを割り当てるようにしました。 [#84432](https://github.com/ClickHouse/ClickHouse/pull/84432) ([Pablo Marcos](https://github.com/pamarcos)). -* ブルームフィルターインデックス(regular、ngram、token)が、第一引数が定数配列(集合)、第二引数がインデックス化された列(部分集合)である場合にも利用できるようサポートを改善し、より効率的なクエリ実行を可能にしました。 [#84700](https://github.com/ClickHouse/ClickHouse/pull/84700) ([Doron David](https://github.com/dorki))。 -* Keeper のストレージロックでの競合を削減。 [#84732](https://github.com/ClickHouse/ClickHouse/pull/84732) ([Antonio Andelic](https://github.com/antonio2368)). -* `WHERE` に対する `read_in_order_use_virtual_row` の未対応だったサポートを追加しました。これにより、フィルターが完全には `PREWHERE` にプッシュダウンされていないクエリで、追加のパーツの読み取りをスキップできるようになります。 [#84835](https://github.com/ClickHouse/ClickHouse/pull/84835) ([Nikolai Kochetov](https://github.com/KochetovNicolai))。 -* Iceberg テーブル内のオブジェクトを非同期に反復処理できるようにし、各データファイルごとにオブジェクトを明示的に保存する必要がなくなります。 [#85369](https://github.com/ClickHouse/ClickHouse/pull/85369) ([Daniil Ivanik](https://github.com/divanik)). -* 非相関な `EXISTS` をスカラサブクエリとして実行します。これにより、スカラサブクエリキャッシュを利用でき、結果を定数畳み込みできるようになり、インデックスの利用に役立ちます。後方互換性のために、新しい設定 `execute_exists_as_scalar_subquery=1` が追加されました。 [#85481](https://github.com/ClickHouse/ClickHouse/pull/85481) ([Nikolai Kochetov](https://github.com/KochetovNicolai))。 - - - - - -#### 改善 - -* `database_replicated` 設定を追加して、DatabaseReplicatedSettings のデフォルト値を定義します。Replicated データベースの作成クエリにこの設定が含まれていない場合は、この設定の値が使用されます。[#85127](https://github.com/ClickHouse/ClickHouse/pull/85127)([Tuan Pham Anh](https://github.com/tuanpach))。 -* Web UI(play)のテーブル列をサイズ変更可能にしました。 [#84012](https://github.com/ClickHouse/ClickHouse/pull/84012) ([Doron David](https://github.com/dorki)). -* `iceberg_metadata_compression_method` 設定で圧縮された `.metadata.json` ファイルのサポートを追加しました。ClickHouse のすべての圧縮方式をサポートします。これにより [#84895](https://github.com/ClickHouse/ClickHouse/issues/84895) が解決しました。[#85196](https://github.com/ClickHouse/ClickHouse/pull/85196)([Konstantin Vedernikov](https://github.com/scanhex12))。 -* `EXPLAIN indexes = 1` の出力に、読み取るレンジ数を表示するようになりました。 [#79938](https://github.com/ClickHouse/ClickHouse/pull/79938) ([Christoph Wurm](https://github.com/cwurm)). -* ORC 圧縮ブロックサイズを設定するための設定を追加し、Spark や Hive と整合性を保つために、そのデフォルト値を 64KB から 256KB に更新しました。 [#80602](https://github.com/ClickHouse/ClickHouse/pull/80602) ([李扬](https://github.com/taiyang-li))。 -* Wide パーツに `columns_substreams.txt` ファイルを追加し、そのパーツ内に保存されているすべてのサブストリームを追跡できるようにしました。これにより、JSON 型および Dynamic 型の動的ストリームを追跡できるようになり、これらのカラムの一部を読み取って動的ストリームの一覧を取得する必要がなくなります(たとえばカラムサイズの計算などの用途)。また、すべての動的ストリームが `system.parts_columns` に反映されるようになりました。 [#81091](https://github.com/ClickHouse/ClickHouse/pull/81091) ([Pavel Kruglov](https://github.com/Avogar))。 -* デフォルトで機密データを非表示にするため、`clickhouse format` に CLI フラグ `--show_secrets` を追加しました。 [#81524](https://github.com/ClickHouse/ClickHouse/pull/81524) ([Nikolai Ryzhov](https://github.com/Dolaxom))。 -* S3 の読み取りおよび書き込みリクエストは、`max_remote_read_network_bandwidth_for_server` および `max_remote_write_network_bandwidth_for_server` によるスロットリングが原因の問題を回避するため、S3 リクエスト全体ではなく HTTP ソケットレベルでスロットリングされるようになりました。 [#81837](https://github.com/ClickHouse/ClickHouse/pull/81837) ([Sergei Trifonov](https://github.com/serxa))。 -* 同じカラムに対しても、ウィンドウ関数の各ウィンドウで異なる照合順序を併用できるようにしました。 [#82877](https://github.com/ClickHouse/ClickHouse/pull/82877) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* マージセレクタをシミュレーション・可視化・比較できるツールを追加しました。 [#71496](https://github.com/ClickHouse/ClickHouse/pull/71496) ([Sergei Trifonov](https://github.com/serxa)). -* `address_expression` 引数でクラスタが指定されている場合に、`remote*` テーブル関数で並列レプリカをサポートするようにしました。また、[#73295](https://github.com/ClickHouse/ClickHouse/issues/73295) も修正しました。[#82904](https://github.com/ClickHouse/ClickHouse/pull/82904) ([Igor Nikonov](https://github.com/devcrafter))。 -* バックアップファイルの書き込みに関するすべてのログメッセージのレベルを TRACE に設定しました。 [#82907](https://github.com/ClickHouse/ClickHouse/pull/82907) ([Hans Krutzer](https://github.com/hkrutzer)). -* 特殊な名前やコーデックを持つユーザー定義関数が、SQL フォーマッタによって一貫性のない形で整形される場合があります。この変更で [#83092](https://github.com/ClickHouse/ClickHouse/issues/83092) が解決されました。[#83644](https://github.com/ClickHouse/ClickHouse/pull/83644)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* ユーザーは JSON 型内で Time 型および Time64 型を使用できるようになりました。 [#83784](https://github.com/ClickHouse/ClickHouse/pull/83784) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* 並列レプリカを使用した JOIN では、`join logical step` が使われるようになりました。並列レプリカを使用する JOIN クエリで問題が発生した場合は、`SET query_plan_use_new_logical_join_step=0` を実行してから、Issue を報告してください。 [#83801](https://github.com/ClickHouse/ClickHouse/pull/83801) ([Vladimir Cherkasov](https://github.com/vdimir)). -* cluster_function_process_archive_on_multiple_nodes のマルチノード環境での互換性を修正。 [#83968](https://github.com/ClickHouse/ClickHouse/pull/83968) ([Kseniia Sumarokova](https://github.com/kssenii)). -* `S3Queue` テーブル単位でのマテリアライズドビューへの挿入設定の変更をサポートしました。新たに `S3Queue` レベルの設定項目 `min_insert_block_size_rows_for_materialized_views` および `min_insert_block_size_bytes_for_materialized_views` を追加しました。デフォルトではプロファイルレベルの設定が使用され、`S3Queue` レベルの設定がそれらを上書きします。 [#83971](https://github.com/ClickHouse/ClickHouse/pull/83971) ([Kseniia Sumarokova](https://github.com/kssenii)). -* プロファイルイベント `MutationAffectedRowsUpperBound` を追加しました。ミューテーションで影響を受けた行数(例:`ALTER UPDATE` や `ALTER DELETE` クエリで条件を満たす行の合計数)を示します。[#83978](https://github.com/ClickHouse/ClickHouse/pull/83978) ([Anton Popov](https://github.com/CurtizJ))。 -* cgroup の情報(該当する場合、つまり `memory_worker_use_cgroup` が有効で、かつ cgroup が利用可能な場合)を利用して、メモリトラッカー(`memory_worker_correct_memory_tracker`)を調整します。 [#83981](https://github.com/ClickHouse/ClickHouse/pull/83981) ([Azat Khuzhin](https://github.com/azat)). -* MongoDB: 文字列から数値型への暗黙的な変換。以前は、ClickHouse テーブルの数値カラムに対して MongoDB ソースから文字列値を受け取った場合、例外がスローされていました。現在は、エンジンが文字列から数値への変換を自動的に試みるようになりました。[#81167](https://github.com/ClickHouse/ClickHouse/issues/81167) を解決。[#84069](https://github.com/ClickHouse/ClickHouse/pull/84069)([Kirill Nikiforov](https://github.com/allmazz))。 -* `Nullable` 数値の `Pretty` フォーマットで桁グループをハイライト表示できるようにしました。 [#84070](https://github.com/ClickHouse/ClickHouse/pull/84070) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Dashboard: ツールチップがコンテナの上端からはみ出さないようになりました。 [#84072](https://github.com/ClickHouse/ClickHouse/pull/84072) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* ダッシュボード上のドットの見た目を少し良くしました。 [#84074](https://github.com/ClickHouse/ClickHouse/pull/84074) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Dashboard の favicon が少し良くなりました。 [#84076](https://github.com/ClickHouse/ClickHouse/pull/84076) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Web UI: ブラウザがパスワードの保存を提案できるようにしました。また、URL フィールドの値も記憶するようになりました。 [#84087](https://github.com/ClickHouse/ClickHouse/pull/84087) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* 特定の Keeper ノードに追加の ACL を適用するための `apply_to_children` 設定のサポートを追加しました。 [#84137](https://github.com/ClickHouse/ClickHouse/pull/84137) ([Antonio Andelic](https://github.com/antonio2368)). -* MergeTree における "compact" Variant 判別子のシリアル化の挙動を修正しました。これまでは、利用可能である一部のケースで使用されていませんでした。 [#84141](https://github.com/ClickHouse/ClickHouse/pull/84141) ([Pavel Kruglov](https://github.com/Avogar)). -* レプリケーテッドデータベースの設定にサーバー設定項目 `logs_to_keep` を追加し、レプリケーテッドデータベースにおけるデフォルトの `logs_to_keep` パラメータを変更できるようにしました。値を小さくすると ZNode の数(特にデータベースが多数ある場合)が減少し、値を大きくすると欠けているレプリカが、より長い期間が経過した後でも追いつけるようになります。 [#84183](https://github.com/ClickHouse/ClickHouse/pull/84183) ([Alexey Khatskevich](https://github.com/Khatskevich))。 -* JSON 型パース時に JSON キー内のドットをエスケープするための設定 `json_type_escape_dots_in_keys` を追加しました。この設定はデフォルトでは無効です。 [#84207](https://github.com/ClickHouse/ClickHouse/pull/84207) ([Pavel Kruglov](https://github.com/Avogar)). -* クローズされた接続からの読み取りを防ぐため、EOF を確認する前に接続がキャンセルされていないかをチェックするようにしました。[#83893](https://github.com/ClickHouse/ClickHouse/issues/83893) を修正。[#84227](https://github.com/ClickHouse/ClickHouse/pull/84227)([Raufs Dunamalijevs](https://github.com/rienath))。 -* Web UI におけるテキスト選択時の色をわずかに改善しました。最も差が分かるのは、ダークモードで選択されたテーブルセルの場合です。以前のバージョンでは、テキストと選択範囲の背景色とのコントラストが不十分でした。[#84258](https://github.com/ClickHouse/ClickHouse/pull/84258)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 内部チェックを簡素化することで、サーバーシャットダウン時のクライアント接続の処理を改善しました。 [#84312](https://github.com/ClickHouse/ClickHouse/pull/84312) ([Raufs Dunamalijevs](https://github.com/rienath)). -* デバッグ時にテストログレベルでも冗長になりすぎる可能性があるため、式ビジターのログを無効化できる設定 `delta_lake_enable_expression_visitor_logging` を追加しました。 [#84315](https://github.com/ClickHouse/ClickHouse/pull/84315) ([Kseniia Sumarokova](https://github.com/kssenii)). -* cgroup レベルおよびシステム全体のメトリクスが、現在はまとめてレポートされるようになりました。cgroup レベルのメトリクスの名前は `CGroup<Metric>` であり、OS レベルのメトリクス(procfs から収集されるもの)の名前は `OS<Metric>` です。 [#84317](https://github.com/ClickHouse/ClickHouse/pull/84317) ([Nikita Taranov](https://github.com/nickitat))。 -* Web UI のチャートが少し改善されました。大きな変更ではありませんが、より良くなっています。 [#84326](https://github.com/ClickHouse/ClickHouse/pull/84326) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Replicated データベース設定 `max_retries_before_automatic_recovery` のデフォルト値を 10 に変更し、一部のケースではより早く復旧できるようにしました。 [#84369](https://github.com/ClickHouse/ClickHouse/pull/84369) ([Alexander Tokmakov](https://github.com/tavplubix)). -* クエリパラメータ付きの `CREATE USER` 文のフォーマットを修正しました(例: `CREATE USER {username:Identifier} IDENTIFIED WITH no_password`)。 [#84376](https://github.com/ClickHouse/ClickHouse/pull/84376) ([Azat Khuzhin](https://github.com/azat)). -* バックアップおよびリストア処理中に使用される S3 リトライ時のバックオフ戦略を構成するための `backup_restore_s3_retry_initial_backoff_ms`、`backup_restore_s3_retry_max_backoff_ms`、`backup_restore_s3_retry_jitter_factor` を導入しました。 [#84421](https://github.com/ClickHouse/ClickHouse/pull/84421) ([Julia Kartseva](https://github.com/jkartseva)). -* S3Queue の ordered モードの修正: `shutdown` が呼び出された場合は、より早く終了するようにしました。 [#84463](https://github.com/ClickHouse/ClickHouse/pull/84463) ([Kseniia Sumarokova](https://github.com/kssenii)). -* pyiceberg で読み取れるように Iceberg への書き込みをサポートしました。 [#84466](https://github.com/ClickHouse/ClickHouse/pull/84466) ([Konstantin Vedernikov](https://github.com/scanhex12)). -* KeyValue ストレージのプライマリキー(例: EmbeddedRocksDB、KeeperMap)に対して `IN` / `GLOBAL IN` フィルタをプッシュダウンする際に、セット値の型キャストを許可。 [#84515](https://github.com/ClickHouse/ClickHouse/pull/84515) ([Eduard Karacharov](https://github.com/korowa)). -* chdig をバージョン [25.7.1](https://github.com/azat/chdig/releases/tag/v25.7.1) に更新。[#84521](https://github.com/ClickHouse/ClickHouse/pull/84521)([Azat Khuzhin](https://github.com/azat))。 -* UDF 実行中の低レベルエラーは、これまではさまざまなエラーコードが返されることがありましたが、今後はエラーコード `UDF_EXECUTION_FAILED` で失敗するようになりました。 [#84547](https://github.com/ClickHouse/ClickHouse/pull/84547) ([Xu Jia](https://github.com/XuJia0210)). -* KeeperClient に `get_acl` コマンドを追加しました。 [#84641](https://github.com/ClickHouse/ClickHouse/pull/84641) ([Antonio Andelic](https://github.com/antonio2368)). -* データレイクテーブルエンジンにスナップショットバージョンを追加しました。 [#84659](https://github.com/ClickHouse/ClickHouse/pull/84659) ([Pete Hampton](https://github.com/pjhampton)). -* `ConcurrentBoundedQueue` のサイズを表すディメンション付きメトリクスを追加しました。キューの種類(つまり、そのキューが何のためのものか)およびキュー ID(つまり、そのキューの現在のインスタンスに対してランダムに生成される ID)でラベル付けされます。 [#84675](https://github.com/ClickHouse/ClickHouse/pull/84675) ([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 -* `system.columns` テーブルで、既存の `name` 列に対するエイリアスとして `column` 列が提供されるようになりました。 [#84695](https://github.com/ClickHouse/ClickHouse/pull/84695) ([Yunchi Pang](https://github.com/yunchipang)). -* 新しい MergeTree 設定 `search_orphaned_parts_drives` により、例えばローカルメタデータを持つディスクなど、パーツの検索範囲を限定できるようになりました。 [#84710](https://github.com/ClickHouse/ClickHouse/pull/84710) ([Ilya Golshtein](https://github.com/ilejn)). -* Keeper に、受信リクエストのログ出力を切り替えるための 4LW コマンド `lgrq` を追加。 [#84719](https://github.com/ClickHouse/ClickHouse/pull/84719) ([Antonio Andelic](https://github.com/antonio2368)). -* external auth の `forward_headers` を大文字小文字を区別せずに照合するようにしました。 [#84737](https://github.com/ClickHouse/ClickHouse/pull/84737) ([ingodwerust](https://github.com/ingodwerust)). -* `encrypt_decrypt` ツールが暗号化された ZooKeeper への接続をサポートするようになりました。 [#84764](https://github.com/ClickHouse/ClickHouse/pull/84764) ([Roman Vasin](https://github.com/rvasin))。 -* `system.errors` にフォーマット文字列カラムを追加しました。このカラムは、アラートルールで同一のエラー種別ごとにグループ化するために必要です。 [#84776](https://github.com/ClickHouse/ClickHouse/pull/84776) ([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 -* `clickhouse-format` を更新し、`--hilite` のエイリアスとして `--highlight` を受け付けるようにしました。- `clickhouse-client` を更新し、`--highlight` のエイリアスとして `--hilite` を受け付けるようにしました。- 変更内容を反映するように `clickhouse-format` のドキュメントを更新しました。 [#84806](https://github.com/ClickHouse/ClickHouse/pull/84806) ([Rishabh Bhardwaj](https://github.com/rishabh1815769))。 -* 複合型に対するフィールド ID による Iceberg 読み取りを修正。 [#84821](https://github.com/ClickHouse/ClickHouse/pull/84821) ([Konstantin Vedernikov](https://github.com/scanhex12)). -* `SlowDown` のようなエラーによって発生するリトライストーム時に、1つのリトライ可能なエラーが観測された時点で全スレッドを減速させることで S3 への負荷を軽減する新しい設定 `backup_slow_all_threads_after_retryable_s3_error` を導入しました。 [#84854](https://github.com/ClickHouse/ClickHouse/pull/84854) ([Julia Kartseva](https://github.com/jkartseva)). -* Replicated データベースにおける append 以外の RMV DDL では、古い一時テーブルの作成とリネームをスキップするようにしました。 [#84858](https://github.com/ClickHouse/ClickHouse/pull/84858) ([Tuan Pham Anh](https://github.com/tuanpach)). -* `keeper_server.coordination_settings.latest_logs_cache_entry_count_threshold` および `keeper_server.coordination_settings.commit_logs_cache_entry_count_threshold` を使用して、Keeper ログエントリのキャッシュサイズをエントリ数で制限できるようにしました。 [#84877](https://github.com/ClickHouse/ClickHouse/pull/84877) ([Antonio Andelic](https://github.com/antonio2368)). -* サポート対象外のアーキテクチャ上でも `simdjson` を使用できるようにしました(これまでは `CANNOT_ALLOCATE_MEMORY` エラーが発生していました)。 [#84966](https://github.com/ClickHouse/ClickHouse/pull/84966) ([Azat Khuzhin](https://github.com/azat))。 -* 非同期ロギング: 制限を調整可能にし、内部状態の確認機能を追加。 [#85105](https://github.com/ClickHouse/ClickHouse/pull/85105) ([Raúl Marín](https://github.com/Algunenano)). -* すべての削除対象オブジェクトをまとめて収集し、オブジェクトストレージに対する単一の削除操作として実行するようにしました。 [#85316](https://github.com/ClickHouse/ClickHouse/pull/85316) ([Mikhail Artemenko](https://github.com/Michicosun)). -* Iceberg の現行の positional delete ファイルの実装では、すべてのデータをメモリ上に保持します。positional delete ファイルが大きい場合(実際そのようなケースが多く)、これはかなりコストがかかります。私の実装では、Parquet delete ファイルの最後の row group だけをメモリ上に保持するようにしており、これによりコストを大幅に削減できます。[#85329](https://github.com/ClickHouse/ClickHouse/pull/85329) ([Konstantin Vedernikov](https://github.com/scanhex12))。 -* chdig:画面上に残る描画の不具合を修正し、エディタでクエリ編集後に発生するクラッシュを修正し、`path` 内で `editor` を検索できるようにし、[25.8.1](https://github.com/azat/chdig/releases/tag/v25.8.1) にアップデート。[#85341](https://github.com/ClickHouse/ClickHouse/pull/85341)([Azat Khuzhin](https://github.com/azat))。 -* 不足していた `partition_columns_in_data_file` を Azure 構成に追加。 [#85373](https://github.com/ClickHouse/ClickHouse/pull/85373) ([Arthur Passos](https://github.com/arthurpassos)). -* 関数 `timeSeries*ToGrid` でステップ値 0 を許可しました。これは [#75036](https://github.com/ClickHouse/ClickHouse/pull/75036) の一部です。[#85390](https://github.com/ClickHouse/ClickHouse/pull/85390)([Vitaly Baranov](https://github.com/vitlibar))。 -* system.tables にデータレイクのテーブルを追加するかどうかを管理するための `show_data_lake_catalogs_in_system_tables` フラグを追加し、[#85384](https://github.com/ClickHouse/ClickHouse/issues/85384) を解決しました。 [#85411](https://github.com/ClickHouse/ClickHouse/pull/85411)([Smita Kulkarni](https://github.com/SmitaRKulkarni))。 -* `remote_fs_zero_copy_zookeeper_path` でのマクロ展開をサポートしました。 [#85437](https://github.com/ClickHouse/ClickHouse/pull/85437) ([Mikhail Koviazin](https://github.com/mkmkme))。 -* clickhouse-client の AI 機能の見た目が少し改善されました。 [#85447](https://github.com/ClickHouse/ClickHouse/pull/85447) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* 既存のデプロイメントで `trace_log.symbolize` をデフォルトで有効化しました。 [#85456](https://github.com/ClickHouse/ClickHouse/pull/85456) ([Azat Khuzhin](https://github.com/azat)). -* 複合識別子を扱えるケースをさらに拡張しました。特に、旧アナライザーとの `ARRAY JOIN` の互換性が向上しています。従来の動作を維持するために、新しい設定 `analyzer_compatibility_allow_compound_identifiers_in_unflatten_nested` を導入しました。 [#85492](https://github.com/ClickHouse/ClickHouse/pull/85492) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). -* system.columns からテーブル列サイズを取得する際に UNKNOWN_DATABASE を無視するようにしました。 [#85632](https://github.com/ClickHouse/ClickHouse/pull/85632) ([Azat Khuzhin](https://github.com/azat)). -* パッチパーツ内の非圧縮バイト数の合計に対する制限(テーブル設定 `max_uncompressed_bytes_in_patches`)を追加しました。これにより、軽量アップデート後の SELECT クエリが大幅に低速化することを防ぎ、軽量アップデートの悪用の可能性も抑止します。[#85641](https://github.com/ClickHouse/ClickHouse/pull/85641)([Anton Popov](https://github.com/CurtizJ))。 -* `GRANT READ/WRITE` のソースの種類および `GRANT TABLE ENGINE` のテーブルエンジンを判別できるようにするため、`system.grants` に `parameter` カラムを追加しました。 [#85643](https://github.com/ClickHouse/ClickHouse/pull/85643) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). -* `Decimal(8)` のようなパラメーター付きカラムの後に続くカラムで末尾にカンマが付いている場合の `CREATE DICTIONARY` クエリのパース処理を修正しました。[#85586](https://github.com/ClickHouse/ClickHouse/issues/85586) をクローズ。[#85653](https://github.com/ClickHouse/ClickHouse/pull/85653)([Nikolay Degterinsky](https://github.com/evillique))。 -* 関数 `nested` に内部配列のサポートを追加しました。 [#85719](https://github.com/ClickHouse/ClickHouse/pull/85719) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). -* 外部ライブラリによって行われるすべてのメモリ割り当てが、ClickHouse のメモリトラッカーで可視化され、正しく計上されるようになりました。これにより、一部のクエリでは報告されるメモリ使用量が「増加」したように見えたり、`MEMORY_LIMIT_EXCEEDED` によるエラーが発生したりする可能性があります。[#84082](https://github.com/ClickHouse/ClickHouse/pull/84082)([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 - - - -#### バグ修正(公式な安定版リリースでユーザーにとって目に見える誤動作) - - +* 新しい Parquet リーダーの実装です。従来より高速で、ページレベルのフィルタープッシュダウンおよび PREWHERE をサポートします。現在は実験的機能です。有効化するには設定 `input_format_parquet_use_native_reader_v3` を使用します。[#82789](https://github.com/ClickHouse/ClickHouse/pull/82789)([Michael Kolupaev](https://github.com/al13n321))。 +* Azure Blob Storage 向けの公式 Azure ライブラリにおける HTTP トランスポートを、独自実装の HTTP クライアントに置き換えました。S3 の設定を反映した複数の設定項目を、このクライアントに導入しました。Azure と S3 の両方に対して、かなり短めの接続タイムアウトを導入しました。Azure プロファイルのイベントおよびメトリクスに対する可観測性も改善しました。新しいクライアントはデフォルトで有効化されており、Azure Blob Storage 上のコールドクエリに対してレイテンシを大幅に改善します。従来の `Curl` クライアントは、`azure_sdk_use_native_client=false` を設定することで戻すことができます。 [#83294](https://github.com/ClickHouse/ClickHouse/pull/83294) ([alesapin](https://github.com/alesapin))。従来の公式 Azure クライアント実装は、本番環境での利用には適さず、レイテンシが 5 秒から数分にまで及ぶ深刻なスパイクが発生していました。その問題の大きかった実装を廃止できたことを、私たちは非常に誇りに思っています。 +* インデックスをファイルサイズの小さい順に処理します。全体としてのインデックスの処理順序では、まず(それぞれ単純さと選択性に優れるため)minmax インデックスとベクターインデックスを優先し、その後はその他のインデックスを小さいものから処理します。minmax/ベクターインデックスの間でも、より小さいインデックスが優先されます。[#84094](https://github.com/ClickHouse/ClickHouse/pull/84094) ([Maruth Goyal](https://github.com/maruthgoyal))。 +* MergeTree の設定 `write_marks_for_substreams_in_compact_parts` をデフォルトで有効化しました。これにより、新しく作成された Compact パーツからサブカラムを読み取る際のパフォーマンスが大幅に向上します。バージョン 25.5 未満のサーバーは、新しい Compact パーツを読み取ることができません。[#84171](https://github.com/ClickHouse/ClickHouse/pull/84171)([Pavel Kruglov](https://github.com/Avogar))。 +* `azureBlobStorage` テーブルエンジン:可能な場合はマネージド ID 認証トークンをキャッシュして再利用し、レート制限の発生を避けるようにしました。 [#79860](https://github.com/ClickHouse/ClickHouse/pull/79860) ([Nick Blakely](https://github.com/niblak)). +* 右側が結合キー列によって一意に決まる場合(すべての行で結合キー値が一意である場合)、`ALL` `LEFT` / `INNER` JOIN は自動的に `RightAny` に変換されます。 [#84010](https://github.com/ClickHouse/ClickHouse/pull/84010) ([Nikita Taranov](https://github.com/nickitat))。 +* `max_joined_block_size_rows` に加えて `max_joined_block_size_bytes` を追加し、サイズの大きいカラムを含む JOIN におけるメモリ使用量を制限できるようにしました。 [#83869](https://github.com/ClickHouse/ClickHouse/pull/83869) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). +* 新しいロジック(設定 `enable_producing_buckets_out_of_order_in_aggregation` によって制御され、デフォルトで有効になっています)が追加され、メモリ効率の高い集約中に一部のバケットを順不同で送信できるようになりました。特定の集約バケットのマージに他よりもかなり長い時間がかかる場合に、イニシエーターがその間にバケット ID のより大きいバケットをマージできるようにすることで、パフォーマンスが向上します。デメリットはメモリ使用量が増加する可能性があることですが(有意な増加にはならないはずです)。[#80179](https://github.com/ClickHouse/ClickHouse/pull/80179)([Nikita Taranov](https://github.com/nickitat))。 +* `optimize_rewrite_regexp_functions` 設定(デフォルトで有効)を導入しました。この設定により、特定の正規表現パターンが検出された場合、オプティマイザが一部の `replaceRegexpAll`、`replaceRegexpOne`、`extract` 関数呼び出しを、より単純で効率的な形に書き換えることができます。(issue [#81981](https://github.com/ClickHouse/ClickHouse/issues/81981))。[#81992](https://github.com/ClickHouse/ClickHouse/pull/81992)([Amos Bird](https://github.com/amosbird))。 +* ハッシュ JOIN のメインループ外で `max_joined_block_rows` を処理するようにしました。ALL JOIN でのパフォーマンスがわずかに向上します。 [#83216](https://github.com/ClickHouse/ClickHouse/pull/83216) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). +* より高い粒度の min-max インデックスを先に処理するようにしました。[#75381](https://github.com/ClickHouse/ClickHouse/issues/75381) を解決します。[#83798](https://github.com/ClickHouse/ClickHouse/pull/83798)([Maruth Goyal](https://github.com/maruthgoyal))。 +* `DISTINCT` ウィンドウ集約を線形時間で実行できるようにし、`sumDistinct` のバグを修正。Closes [#79792](https://github.com/ClickHouse/ClickHouse/issues/79792)。Closes [#52253](https://github.com/ClickHouse/ClickHouse/issues/52253)。[#79859](https://github.com/ClickHouse/ClickHouse/pull/79859)([Nihal Z. Miaji](https://github.com/nihalzp))。 +* ベクトル類似インデックスを利用するベクトル検索クエリは、ストレージの読み取り回数と CPU 使用量が削減されたことで、より低いレイテンシで完了するようになりました。 [#83803](https://github.com/ClickHouse/ClickHouse/pull/83803) ([Shankar Iyer](https://github.com/shankar-iyer)). +* 並列レプリカ間のワークロード分散におけるキャッシュ局所性を向上させる Rendezvous ハッシュ。[#82511](https://github.com/ClickHouse/ClickHouse/pull/82511) ([Anton Ivashkin](https://github.com/ianton-ru)). +* If コンビネータ用に addManyDefaults を実装し、If コンビネータを含む集約関数の動作がより高速になりました。 [#83870](https://github.com/ClickHouse/ClickHouse/pull/83870) ([Raúl Marín](https://github.com/Algunenano)). +* 複数の文字列または数値列で `GROUP BY` する際に、シリアライズされたキーを列指向で計算するようにしました。 [#83884](https://github.com/ClickHouse/ClickHouse/pull/83884) ([李扬](https://github.com/taiyang-li)). +* インデックス解析の結果、並列レプリカの読み取りに対して空の範囲となる場合に、フルスキャンを行わないようにしました。 [#84971](https://github.com/ClickHouse/ClickHouse/pull/84971) ([Eduard Karacharov](https://github.com/korowa)). +* より安定したパフォーマンステストのために -falign-functions=64 を試す。 [#83920](https://github.com/ClickHouse/ClickHouse/pull/83920) ([Azat Khuzhin](https://github.com/azat)). +* ブルームフィルターインデックスは、`column` が `Array` 型ではない場合の `has([c1, c2, ...], column)` のような条件にも使用されるようになりました。これにより、そのようなクエリのパフォーマンスが向上し、`IN` 演算子と同等の効率で実行できるようになります。[#83945](https://github.com/ClickHouse/ClickHouse/pull/83945)([Doron David](https://github.com/dorki))。 +* CompressedReadBufferBase::readCompressedData における不要な memcpy 呼び出しを減らしました。[#83986](https://github.com/ClickHouse/ClickHouse/pull/83986) ([Raúl Marín](https://github.com/Algunenano)). +* 一時データの削除により `largestTriangleThreeBuckets` を最適化。 [#84479](https://github.com/ClickHouse/ClickHouse/pull/84479) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* コードの簡素化によって文字列のデシリアライズ処理を最適化。Closes [#38564](https://github.com/ClickHouse/ClickHouse/issues/38564)。[#84561](https://github.com/ClickHouse/ClickHouse/pull/84561) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* 並列レプリカにおける最小タスクサイズの計算を修正しました。[#84752](https://github.com/ClickHouse/ClickHouse/pull/84752) ([Nikita Taranov](https://github.com/nickitat))。 +* `Join` モードにおけるパッチパーツ適用処理のパフォーマンスを改善。[#85040](https://github.com/ClickHouse/ClickHouse/pull/85040) ([Anton Popov](https://github.com/CurtizJ)). +* ゼロバイトを削除しました。[#85062](https://github.com/ClickHouse/ClickHouse/issues/85062) をクローズします。いくつかの小さなバグを修正しました。関数 `structureToProtobufSchema` と `structureToCapnProtoSchema` は、終端のゼロバイトを正しく付加できておらず、その代わりに改行文字を使用していました。これにより、出力から改行が欠落し、ゼロバイトに依存する他の関数(`logTrace`、`demangle`、`extractURLParameter`、`toStringCutToZero`、`encrypt` / `decrypt` など)を使用した際にバッファオーバーフローが発生する可能性がありました。`regexp_tree` 辞書レイアウトは、ゼロバイトを含む文字列の処理をサポートしていませんでした。`Values` フォーマット、あるいは行末に改行を含まないその他のフォーマットで呼び出された `formatRowNoNewline` 関数は、出力の最後の文字を誤って切り落としていました。関数 `stem` には例外安全性の不具合があり、非常にまれなシナリオでメモリリークを引き起こす可能性がありました。`initcap` 関数は `FixedString` 引数に対して誤った動作をしていました。ブロック内の前の文字列が単語構成文字で終わっている場合、文字列の先頭にある単語の開始を認識できませんでした。Apache `ORC` フォーマットのセキュリティ脆弱性を修正しました。これは初期化されていないメモリの露出につながる可能性がありました。関数 `replaceRegexpAll` とそれに対応するエイリアス `REGEXP_REPLACE` の動作を変更しました。これらは、`^a*|a*$` や `^|.*` のように、直前のマッチが文字列全体を処理した場合でも、文字列末尾で空マッチを行えるようになりました。この挙動は JavaScript、Perl、Python、PHP、Ruby のセマンティクスに対応しますが、PostgreSQL のセマンティクスとは異なります。多くの関数の実装が単純化および最適化されました。いくつかの関数のドキュメントが誤っていたため修正しました。`byteSize` の出力について、String 列および String 列で構成される複合型では(空文字列 1 つあたり 9 バイトから 8 バイトへと)変更されている点に注意してください。これは想定された挙動です。[#85063](https://github.com/ClickHouse/ClickHouse/pull/85063)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 単一行を返すためだけに定数をマテリアライズしている場合の定数マテリアライズ処理を最適化しました。 [#85071](https://github.com/ClickHouse/ClickHouse/pull/85071) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* delta-kernel-rs バックエンドを用いた並列ファイル処理を改善しました。 [#85642](https://github.com/ClickHouse/ClickHouse/pull/85642) ([Azat Khuzhin](https://github.com/azat)). +* 新しい設定項目 `enable_add_distinct_to_in_subqueries` が導入されました。有効にすると、ClickHouse は分散クエリにおける `IN` 句内のサブクエリに自動的に `DISTINCT` を追加します。これにより、シャード間で転送される一時テーブルのサイズを大幅に削減し、ネットワーク効率を向上させることができます。注意:これはトレードオフです。ネットワーク転送量は削減されますが、各ノードで追加のマージ(重複排除)処理が必要になります。ネットワーク転送がボトルネックとなっており、マージ処理のコストが許容できる場合に、この設定を有効にしてください。[#81908](https://github.com/ClickHouse/ClickHouse/pull/81908)([fhw12345](https://github.com/fhw12345))。 +* 実行可能なユーザー定義関数におけるクエリメモリトラッキングのオーバーヘッドを削減。 [#83929](https://github.com/ClickHouse/ClickHouse/pull/83929) ([Eduard Karacharov](https://github.com/korowa)). +* ストレージ `DeltaLake` に、内部用の `delta-kernel-rs` フィルタリング機能(統計情報およびパーティションのプルーニング)を実装しました。 [#84006](https://github.com/ClickHouse/ClickHouse/pull/84006) ([Kseniia Sumarokova](https://github.com/kssenii)). +* オンザフライで更新される列やパッチパーツによって更新される列に依存するスキップインデックスの無効化を、よりきめ細かく制御するようにしました。これにより、スキップインデックスはオンザフライのミューテーションやパッチパーツの影響を受けたパーツでのみ使用されず、以前のようにすべてのパーツでインデックスが無効化されることはなくなりました。 [#84241](https://github.com/ClickHouse/ClickHouse/pull/84241) ([Anton Popov](https://github.com/CurtizJ)). +* 暗号化された名前付きコレクション用の encrypted_buffer に必要最小限のメモリのみを割り当てるようにしました。 [#84432](https://github.com/ClickHouse/ClickHouse/pull/84432) ([Pablo Marcos](https://github.com/pamarcos)). +* Bloom filter インデックス(regular、ngram、token)について、第 1 引数が定数配列(集合)、第 2 引数がインデックス付きカラム(部分集合)の場合にも利用されるようサポートを改善し、より効率的なクエリ実行を可能にしました。 [#84700](https://github.com/ClickHouse/ClickHouse/pull/84700) ([Doron David](https://github.com/dorki))。 +* Keeper におけるストレージロックの競合を軽減。 [#84732](https://github.com/ClickHouse/ClickHouse/pull/84732) ([Antonio Andelic](https://github.com/antonio2368))。 +* `WHERE` に対して不足していた `read_in_order_use_virtual_row` のサポートを追加しました。これにより、フィルタが完全には `PREWHERE` にプッシュダウンされていないクエリにおいて、追加のパーツの読み取りをスキップできるようになります。 [#84835](https://github.com/ClickHouse/ClickHouse/pull/84835) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). +* 各データファイルごとにオブジェクトを明示的に保持することなく、Iceberg テーブルからオブジェクトを非同期にイテレートできるようにしました。 [#85369](https://github.com/ClickHouse/ClickHouse/pull/85369) ([Daniil Ivanik](https://github.com/divanik)). +* 非相関な `EXISTS` をスカラサブクエリとして実行します。これにより、スカラサブクエリキャッシュを使用し、結果を定数畳み込みできるようになり、インデックスの利用に有利になります。後方互換性のために、新しい設定 `execute_exists_as_scalar_subquery=1` が追加されました。 [#85481](https://github.com/ClickHouse/ClickHouse/pull/85481) ([Nikolai Kochetov](https://github.com/KochetovNicolai))。 + +#### 改善点 + +* `database_replicated` 設定を追加し、DatabaseReplicatedSettings のデフォルト値を定義します。Replicated DB の CREATE クエリでこの設定が指定されていない場合は、この設定の値が使用されます。 [#85127](https://github.com/ClickHouse/ClickHouse/pull/85127) ([Tuan Pham Anh](https://github.com/tuanpach))。 +* Web UI(play)でテーブルの列をリサイズ可能にしました。 [#84012](https://github.com/ClickHouse/ClickHouse/pull/84012) ([Doron David](https://github.com/dorki))。 +* `iceberg_metadata_compression_method` 設定によって圧縮された `.metadata.json` ファイルのサポートを追加しました。ClickHouse のすべての圧縮方式に対応しています。これにより [#84895](https://github.com/ClickHouse/ClickHouse/issues/84895) がクローズされました。[#85196](https://github.com/ClickHouse/ClickHouse/pull/85196)([Konstantin Vedernikov](https://github.com/scanhex12))。 +* `EXPLAIN indexes = 1` の出力に、読み取られる範囲の数を表示するようにしました。 [#79938](https://github.com/ClickHouse/ClickHouse/pull/79938) ([Christoph Wurm](https://github.com/cwurm)). +* ORC 圧縮ブロックサイズを設定するための設定項目を導入し、Spark や Hive と整合性を保つために、そのデフォルト値を 64KB から 256KB に更新しました。[#80602](https://github.com/ClickHouse/ClickHouse/pull/80602) ([李扬](https://github.com/taiyang-li))。 +* Wide part に `columns_substreams.txt` ファイルを追加し、その part に保存されているすべてのサブストリームを追跡するようにしました。これにより、JSON および Dynamic 型における動的ストリームを追跡する際に、動的ストリームの一覧を取得するためだけに(たとえばカラムサイズ計算のために)これらのカラムのサンプルを読み取る必要がなくなります。また、すべての動的ストリームが `system.parts_columns` に反映されるようになりました。 [#81091](https://github.com/ClickHouse/ClickHouse/pull/81091) ([Pavel Kruglov](https://github.com/Avogar)). +* 機密データをデフォルトで非表示にするための CLI フラグ --show_secrets を clickhouse format に追加しました。 [#81524](https://github.com/ClickHouse/ClickHouse/pull/81524) ([Nikolai Ryzhov](https://github.com/Dolaxom)). +* S3 の読み取りおよび書き込みリクエストは、`max_remote_read_network_bandwidth_for_server` と `max_remote_write_network_bandwidth_for_server` による帯域制限の問題を回避するため、S3 リクエスト全体ではなく HTTP ソケットレベルで制限されるようになりました。 [#81837](https://github.com/ClickHouse/ClickHouse/pull/81837) ([Sergei Trifonov](https://github.com/serxa))。 +* 同じ列に対して、ウィンドウ(ウィンドウ関数用)ごとに異なる照合順序を使用できるようにしました。 [#82877](https://github.com/ClickHouse/ClickHouse/pull/82877) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* マージセレクタをシミュレート・可視化・比較するためのツールを追加。 [#71496](https://github.com/ClickHouse/ClickHouse/pull/71496) ([Sergei Trifonov](https://github.com/serxa)). +* `address_expression` 引数でクラスタが指定されている場合に、並列レプリカ付きの `remote*` テーブル関数のサポートを追加しました。また、[#73295](https://github.com/ClickHouse/ClickHouse/issues/73295) を修正しました。[#82904](https://github.com/ClickHouse/ClickHouse/pull/82904)([Igor Nikonov](https://github.com/devcrafter))。 +* バックアップファイルの書き込みに関するすべてのログメッセージのログレベルを TRACE に設定しました。 [#82907](https://github.com/ClickHouse/ClickHouse/pull/82907) ([Hans Krutzer](https://github.com/hkrutzer)). +* 通常とは異なる名前やコーデックを持つユーザー定義関数は、SQL フォーマッタによって一貫性のない形式でフォーマットされる場合があります。これにより [#83092](https://github.com/ClickHouse/ClickHouse/issues/83092) がクローズされました。 [#83644](https://github.com/ClickHouse/ClickHouse/pull/83644) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* ユーザーは JSON 型内で Time 型および Time64 型を使用できるようになりました。 [#83784](https://github.com/ClickHouse/ClickHouse/pull/83784) ([Yarik Briukhovetskyi](https://github.com/yariks5s))。 +* 並列レプリカを用いた JOIN は、現在 JOIN の論理ステップ(`join logical step`)を使用するようになりました。並列レプリカを用いる JOIN クエリで問題が発生した場合は、`SET query_plan_use_new_logical_join_step=0` を試し、問題を報告してください。 [#83801](https://github.com/ClickHouse/ClickHouse/pull/83801) ([Vladimir Cherkasov](https://github.com/vdimir))。 +* cluster_function_process_archive_on_multiple_nodes の複数ノード環境での互換性を修正。 [#83968](https://github.com/ClickHouse/ClickHouse/pull/83968) ([Kseniia Sumarokova](https://github.com/kssenii)). +* `S3Queue` テーブルレベルでのマテリアライズドビュー向け挿入設定の変更をサポートしました。新たに `S3Queue` レベルの設定として `min_insert_block_size_rows_for_materialized_views` と `min_insert_block_size_bytes_for_materialized_views` を追加しました。デフォルトではプロファイルレベルの設定が使用され、`S3Queue` レベルの設定がそれらを上書きします。 [#83971](https://github.com/ClickHouse/ClickHouse/pull/83971) ([Kseniia Sumarokova](https://github.com/kssenii))。 +* プロファイルイベント `MutationAffectedRowsUpperBound` を追加しました。このイベントは、ミューテーションで影響を受けた行数(例:`ALTER UPDATE` や `ALTER DELETE` クエリで条件を満たす行の合計数)を示します。[#83978](https://github.com/ClickHouse/ClickHouse/pull/83978) ([Anton Popov](https://github.com/CurtizJ))。 +* cgroup の情報(該当する場合、`memory_worker_use_cgroup` が有効で cgroups が利用可能な場合)を使用して、メモリトラッカー(`memory_worker_correct_memory_tracker`)を調整します。 [#83981](https://github.com/ClickHouse/ClickHouse/pull/83981) ([Azat Khuzhin](https://github.com/azat)). +* MongoDB: 文字列から数値型への暗黙的なパース。以前は、MongoDB ソースから ClickHouse テーブル内の数値カラムに対して文字列値が受信された場合、例外が発生していました。現在では、エンジンが文字列から数値として自動的にパースしようとします。[#81167](https://github.com/ClickHouse/ClickHouse/issues/81167) を解決。[#84069](https://github.com/ClickHouse/ClickHouse/pull/84069)([Kirill Nikiforov](https://github.com/allmazz))。 +* `Nullable` な数値に対しても、`Pretty` フォーマットで桁グループをハイライト表示できるようにしました。 [#84070](https://github.com/ClickHouse/ClickHouse/pull/84070) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Dashboard: ツールチップが上端でコンテナからはみ出さないようになりました。 [#84072](https://github.com/ClickHouse/ClickHouse/pull/84072) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* ダッシュボード上のドットの見た目をわずかに改善しました。 [#84074](https://github.com/ClickHouse/ClickHouse/pull/84074) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Dashboard の favicon が少し改善されました。 [#84076](https://github.com/ClickHouse/ClickHouse/pull/84076) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Web UI: ブラウザがパスワードを保存できるようにしました。また、URL フィールドの値も記憶されるようにしました。 [#84087](https://github.com/ClickHouse/ClickHouse/pull/84087) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* 特定の Keeper ノードに対して `apply_to_children` 設定を使用して追加の ACL を適用できるようにしました。 [#84137](https://github.com/ClickHouse/ClickHouse/pull/84137) ([Antonio Andelic](https://github.com/antonio2368)). +* MergeTree における Variant の判別子の「compact」シリアライゼーションの利用方法を修正しました。以前は、利用可能な場合でも一部のケースで使用されていませんでした。 [#84141](https://github.com/ClickHouse/ClickHouse/pull/84141) ([Pavel Kruglov](https://github.com/Avogar)). +* レプリケーテッドデータベース設定にサーバー設定 `logs_to_keep` を追加し、レプリケーテッドデータベースの `logs_to_keep` のデフォルト値を変更できるようにしました。値を小さくすると ZNode の数(特にデータベースが多数ある場合)が減少し、値を大きくすると欠落しているレプリカがより長い時間が経過した後でも追いつけるようになります。 [#84183](https://github.com/ClickHouse/ClickHouse/pull/84183) ([Alexey Khatskevich](https://github.com/Khatskevich))。 +* JSON 型解析時に JSON キー内のドットをエスケープするための設定 `json_type_escape_dots_in_keys` を追加しました。この設定はデフォルトで無効です。 [#84207](https://github.com/ClickHouse/ClickHouse/pull/84207) ([Pavel Kruglov](https://github.com/Avogar)). +* 閉じられたコネクションから読み込むことを防ぐため、EOF を確認する前にコネクションがキャンセルされているかどうかをチェックするようにしました。[#83893](https://github.com/ClickHouse/ClickHouse/issues/83893) を修正。[#84227](https://github.com/ClickHouse/ClickHouse/pull/84227)([Raufs Dunamalijevs](https://github.com/rienath))。 +* Web UI におけるテキスト選択の色をわずかに改善しました。違いが顕著なのは、ダークモード時に選択されたテーブルセルのみです。以前のバージョンでは、テキストと選択背景とのコントラストが不十分でした。 [#84258](https://github.com/ClickHouse/ClickHouse/pull/84258) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* 内部チェックを簡素化することで、クライアント接続に対するサーバーのシャットダウン処理を改善しました。 [#84312](https://github.com/ClickHouse/ClickHouse/pull/84312) ([Raufs Dunamalijevs](https://github.com/rienath)). +* `delta_lake_enable_expression_visitor_logging` 設定を追加し、式ビジターのログを無効化できるようにしました。これは、何かをデバッグする際に test ログレベルであってもログが冗長になりすぎる場合があるためです。 [#84315](https://github.com/ClickHouse/ClickHouse/pull/84315) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Cgroup レベルおよびシステム全体のメトリクスが、今後はまとめて報告されます。Cgroup レベルのメトリクス名は `CGroup<Metric>`、OS レベルのメトリクス(procfs から収集されるもの)の名前は `OS<Metric>` です。 [#84317](https://github.com/ClickHouse/ClickHouse/pull/84317) ([Nikita Taranov](https://github.com/nickitat))。 +* Web UI のチャートがわずかに改善されました。大きな変更ではありませんが、多少良くなっています。 [#84326](https://github.com/ClickHouse/ClickHouse/pull/84326) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Replicated データベース設定 `max_retries_before_automatic_recovery` のデフォルト値を 10 に変更し、一部のケースでの復旧を高速化しました。 [#84369](https://github.com/ClickHouse/ClickHouse/pull/84369) ([Alexander Tokmakov](https://github.com/tavplubix)). +* クエリパラメータ付きの `CREATE USER` 文のフォーマットを修正しました(例:`CREATE USER {username:Identifier} IDENTIFIED WITH no_password`)。 [#84376](https://github.com/ClickHouse/ClickHouse/pull/84376)([Azat Khuzhin](https://github.com/azat))。 +* バックアップおよびリストア処理中に使用される S3 のリトライバックオフ戦略を構成するために、`backup_restore_s3_retry_initial_backoff_ms`、`backup_restore_s3_retry_max_backoff_ms`、`backup_restore_s3_retry_jitter_factor` を導入しました。 [#84421](https://github.com/ClickHouse/ClickHouse/pull/84421) ([Julia Kartseva](https://github.com/jkartseva)). +* S3Queue の ordered モードの修正: `shutdown` が呼び出された場合に早期に終了するようにしました。 [#84463](https://github.com/ClickHouse/ClickHouse/pull/84463) ([Kseniia Sumarokova](https://github.com/kssenii)). +* pyiceberg で読み取り可能な Iceberg への書き込みをサポートしました。 [#84466](https://github.com/ClickHouse/ClickHouse/pull/84466) ([Konstantin Vedernikov](https://github.com/scanhex12)). +* KeyValue ストレージのプライマリキー(例: EmbeddedRocksDB、KeeperMap)に対して `IN` / `GLOBAL IN` フィルターをプッシュダウンする際に、集合内の値の型キャストを許可します。 [#84515](https://github.com/ClickHouse/ClickHouse/pull/84515) ([Eduard Karacharov](https://github.com/korowa)). +* chdig を [25.7.1](https://github.com/azat/chdig/releases/tag/v25.7.1) に更新。[#84521](https://github.com/ClickHouse/ClickHouse/pull/84521) ([Azat Khuzhin](https://github.com/azat)). +* UDF 実行中の低レベルエラーは、以前はさまざまなエラーコードが返される可能性がありましたが、現在はエラーコード `UDF_EXECUTION_FAILED` で失敗するようになりました。 [#84547](https://github.com/ClickHouse/ClickHouse/pull/84547) ([Xu Jia](https://github.com/XuJia0210)). +* KeeperClient に `get_acl` コマンドを追加しました。[#84641](https://github.com/ClickHouse/ClickHouse/pull/84641)([Antonio Andelic](https://github.com/antonio2368))。 +* データレイクテーブルエンジンにスナップショットバージョンを追加します。 [#84659](https://github.com/ClickHouse/ClickHouse/pull/84659) ([Pete Hampton](https://github.com/pjhampton)). +* `ConcurrentBoundedQueue` のサイズを表すディメンション付きメトリクスを追加しました。キューの種類(そのキューの用途)およびキュー ID(キューの現在のインスタンスごとにランダムに生成される ID)をラベルとして持ちます。 [#84675](https://github.com/ClickHouse/ClickHouse/pull/84675) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). +* `system.columns` テーブルで、既存の `name` カラムに対するエイリアスとして `column` が利用できるようになりました。 [#84695](https://github.com/ClickHouse/ClickHouse/pull/84695) ([Yunchi Pang](https://github.com/yunchipang)). +* 新しい MergeTree 設定 `search_orphaned_parts_drives` により、たとえばローカルメタデータを持つディスクなど、パーツを探索する対象ディスクの範囲を制限できるようになりました。 [#84710](https://github.com/ClickHouse/ClickHouse/pull/84710) ([Ilya Golshtein](https://github.com/ilejn)). +* Keeper に 4LW コマンド `lgrq` を追加し、受信リクエストのログ記録を切り替えられるようにしました。 [#84719](https://github.com/ClickHouse/ClickHouse/pull/84719) ([Antonio Andelic](https://github.com/antonio2368)). +* external auth の forward_headers を大文字小文字を区別せずに照合するようにしました。 [#84737](https://github.com/ClickHouse/ClickHouse/pull/84737) ([ingodwerust](https://github.com/ingodwerust)). +* `encrypt_decrypt` ツールが暗号化された ZooKeeper 接続をサポートするようになりました。[#84764](https://github.com/ClickHouse/ClickHouse/pull/84764) ([Roman Vasin](https://github.com/rvasin))。 +* `system.errors` にフォーマット文字列を格納するカラムを追加しました。このカラムは、アラートルールで同じエラータイプごとにグループ化するために必要です。 [#84776](https://github.com/ClickHouse/ClickHouse/pull/84776) ([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 +* `clickhouse-format` が `--hilite` のエイリアスとして `--highlight` を受け付けるように更新しました。- `clickhouse-client` が `--highlight` のエイリアスとして `--hilite` を受け付けるように更新しました。- 変更内容を反映するように `clickhouse-format` のドキュメントを更新しました。 [#84806](https://github.com/ClickHouse/ClickHouse/pull/84806) ([Rishabh Bhardwaj](https://github.com/rishabh1815769)). +* Iceberg の複合型に対するフィールド ID ベースの読み取りを修正。 [#84821](https://github.com/ClickHouse/ClickHouse/pull/84821) ([Konstantin Vedernikov](https://github.com/scanhex12))。 +* `SlowDown` などのエラーによって発生するリトライストーム時に、1 つのリトライ可能なエラーを検知した時点で全スレッドの処理を減速させることで S3 への負荷を軽減するための新しい設定 `backup_slow_all_threads_after_retryable_s3_error` を導入しました。 [#84854](https://github.com/ClickHouse/ClickHouse/pull/84854) ([Julia Kartseva](https://github.com/jkartseva)). +* Replicated DB における append 以外の RMV DDL 向けの旧一時テーブルの作成およびリネーム処理をスキップします。 [#84858](https://github.com/ClickHouse/ClickHouse/pull/84858) ([Tuan Pham Anh](https://github.com/tuanpach)). +* Keeper のログエントリキャッシュサイズを、`keeper_server.coordination_settings.latest_logs_cache_entry_count_threshold` と `keeper_server.coordination_settings.commit_logs_cache_entry_count_threshold` を使用して、エントリ数ベースで制限します。 [#84877](https://github.com/ClickHouse/ClickHouse/pull/84877) ([Antonio Andelic](https://github.com/antonio2368)). +* サポートされていないアーキテクチャでも `simdjson` を使用できるようにしました(以前は `CANNOT_ALLOCATE_MEMORY` エラーが発生していました)。[#84966](https://github.com/ClickHouse/ClickHouse/pull/84966) ([Azat Khuzhin](https://github.com/azat))。 +* Async logging: 制限を調整可能にし、イントロスペクション機能を追加。 [#85105](https://github.com/ClickHouse/ClickHouse/pull/85105) ([Raúl Marín](https://github.com/Algunenano)). +* オブジェクトストレージの削除を単一の操作で実行できるよう、削除対象のオブジェクトをすべてまとめて収集するようにしました。 [#85316](https://github.com/ClickHouse/ClickHouse/pull/85316) ([Mikhail Artemenko](https://github.com/Michicosun)). +* Iceberg における現在の positional delete ファイルの実装では、すべてのデータを RAM に保持します。positional delete ファイルが大きくなることはよくあるため、これはかなりコストが高くなり得ます。私の実装では、Parquet delete ファイルの最後の row group だけを RAM に保持するため、コストを大幅に削減できます。 [#85329](https://github.com/ClickHouse/ClickHouse/pull/85329) ([Konstantin Vedernikov](https://github.com/scanhex12)) +* chdig: 画面に残る描画の不具合を修正し、エディターでクエリを編集した後にクラッシュする問題を修正し、`path` から `editor` を検索するようにし、[25.8.1](https://github.com/azat/chdig/releases/tag/v25.8.1) にアップデートしました。 [#85341](https://github.com/ClickHouse/ClickHouse/pull/85341) ([Azat Khuzhin](https://github.com/azat)). +* 不足していた `partition_columns_in_data_file` を Azure 構成に追加。 [#85373](https://github.com/ClickHouse/ClickHouse/pull/85373) ([Arthur Passos](https://github.com/arthurpassos))。 +* 関数 `timeSeries*ToGrid` でステップ値 0 を許可します。これは [#75036](https://github.com/ClickHouse/ClickHouse/pull/75036) の一部です。[#85390](https://github.com/ClickHouse/ClickHouse/pull/85390)([Vitaly Baranov](https://github.com/vitlibar))。 +* system.tables にデータレイクテーブルを追加するかどうかを制御するフラグ show_data_lake_catalogs_in_system_tables を追加しました。[#85384](https://github.com/ClickHouse/ClickHouse/issues/85384) を解決。[#85411](https://github.com/ClickHouse/ClickHouse/pull/85411)([Smita Kulkarni](https://github.com/SmitaRKulkarni))。 +* `remote_fs_zero_copy_zookeeper_path` におけるマクロ展開のサポートを追加しました。 [#85437](https://github.com/ClickHouse/ClickHouse/pull/85437) ([Mikhail Koviazin](https://github.com/mkmkme)). +* clickhouse-client における AI の見た目が少し良くなりました。 [#85447](https://github.com/ClickHouse/ClickHouse/pull/85447) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 既存のデプロイメントで trace_log.symbolize がデフォルトで有効になるようにしました。 [#85456](https://github.com/ClickHouse/ClickHouse/pull/85456) ([Azat Khuzhin](https://github.com/azat)). +* 複合識別子を含むより多くのケースに対応しました。特に、`ARRAY JOIN` と旧アナライザとの互換性が向上しています。従来の動作を維持するための新しい設定 `analyzer_compatibility_allow_compound_identifiers_in_unflatten_nested` を導入しました。 [#85492](https://github.com/ClickHouse/ClickHouse/pull/85492) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). +* system.columns のテーブルの列サイズを取得する際に UNKNOWN_DATABASE を無視するようにしました。 [#85632](https://github.com/ClickHouse/ClickHouse/pull/85632) ([Azat Khuzhin](https://github.com/azat)). +* パッチパーツ全体の非圧縮バイト数の合計に対する上限(テーブル設定 `max_uncompressed_bytes_in_patches`)を追加しました。これにより、軽量更新後の SELECT クエリが大幅に遅くなることを防ぎ、軽量更新の悪用も防ぎます。 [#85641](https://github.com/ClickHouse/ClickHouse/pull/85641) ([Anton Popov](https://github.com/CurtizJ)). +* `GRANT READ/WRITE` のソースタイプおよび `GRANT TABLE ENGINE` のテーブルエンジンを判別できるように、`system.grants` に `parameter` カラムを追加しました。 [#85643](https://github.com/ClickHouse/ClickHouse/pull/85643) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). +* `CREATE DICTIONARY` クエリ内で、パラメータ付きカラム(例: `Decimal(8)`)に続くカラムの末尾にあるカンマのパース処理を修正しました。[#85586](https://github.com/ClickHouse/ClickHouse/issues/85586) をクローズしました。[#85653](https://github.com/ClickHouse/ClickHouse/pull/85653)([Nikolay Degterinsky](https://github.com/evillique))。 +* `nested` 関数で内部配列をサポートするようにしました。 [#85719](https://github.com/ClickHouse/ClickHouse/pull/85719) ([Nikolai Kochetov](https://github.com/KochetovNicolai))。 +* 外部ライブラリによって行われるすべてのメモリ割り当てが、ClickHouse のメモリトラッカーによっても追跡され、正しく計上されるようになりました。これにより、一部のクエリでは報告されるメモリ使用量が「増加」したように見えたり、`MEMORY_LIMIT_EXCEEDED` で失敗する可能性があります。 [#84082](https://github.com/ClickHouse/ClickHouse/pull/84082) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). + +#### バグ修正(公式安定版リリースにおけるユーザーから見える不具合) * この PR では、REST カタログ経由で Iceberg テーブルをクエリする際のメタデータ解決処理を修正しました。... [#80562](https://github.com/ClickHouse/ClickHouse/pull/80562) ([Saurabh Kumar Ojha](https://github.com/saurabhojha)). * DDLWorker と DatabaseReplicatedDDLWorker における `markReplicasActive` の不具合を修正。 [#81395](https://github.com/ClickHouse/ClickHouse/pull/81395) ([Tuan Pham Anh](https://github.com/tuanpach)). @@ -842,1510 +1048,1413 @@ doc_type: 'changelog' * 空の Iceberg 削除ファイルを作成しないようにしました。 [#86061](https://github.com/ClickHouse/ClickHouse/pull/86061) ([Konstantin Vedernikov](https://github.com/scanhex12)). * 大きな設定値が原因で S3Queue テーブルやレプリカの再起動が失敗する問題を修正。 [#86074](https://github.com/ClickHouse/ClickHouse/pull/86074) ([Nikolay Degterinsky](https://github.com/evillique)). +#### ビルド/テスト/パッケージングの改善 +* デフォルトで、S3 を使用するテストに暗号化ディスクを使用するようにしました。 [#59898](https://github.com/ClickHouse/ClickHouse/pull/59898) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). +* 統合テストで、ストリップされていないデバッグシンボルを取得するために `clickhouse` バイナリを使用するようにしました。 [#83779](https://github.com/ClickHouse/ClickHouse/pull/83779) ([Mikhail f. Shiryaev](https://github.com/Felixoid)). +* 内部で利用している libxml2 を 2.14.4 から 2.14.5 に更新しました。 [#84230](https://github.com/ClickHouse/ClickHouse/pull/84230) ([Robert Schulze](https://github.com/rschu1ze)). +* 内部で利用している curl を 8.14.0 から 8.15.0 に更新しました。 [#84231](https://github.com/ClickHouse/ClickHouse/pull/84231) ([Robert Schulze](https://github.com/rschu1ze)). +* CI でキャッシュに使用するメモリを削減し、キャッシュエビクションに関するテストを改善しました。 [#84676](https://github.com/ClickHouse/ClickHouse/pull/84676) ([alesapin](https://github.com/alesapin)). -#### ビルド/テスト/パッケージングの改善 -* S3 を用いたテストでは、デフォルトで暗号化ディスクを使用するようにしました。[#59898](https://github.com/ClickHouse/ClickHouse/pull/59898) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). -* インテグレーションテストでストリップされていないデバッグシンボルを取得するために、`clickhouse` バイナリを使用するようにしました。[#83779](https://github.com/ClickHouse/ClickHouse/pull/83779) ([Mikhail f. Shiryaev](https://github.com/Felixoid)). -* 内部の libxml2 を 2.14.4 から 2.14.5 に更新しました。[#84230](https://github.com/ClickHouse/ClickHouse/pull/84230) ([Robert Schulze](https://github.com/rschu1ze)). -* 内部の curl を 8.14.0 から 8.15.0 に更新しました。[#84231](https://github.com/ClickHouse/ClickHouse/pull/84231) ([Robert Schulze](https://github.com/rschu1ze)). -* CI におけるキャッシュ用メモリ使用量を削減し、エビクションのテストを改善しました。[#84676](https://github.com/ClickHouse/ClickHouse/pull/84676) ([alesapin](https://github.com/alesapin)). - - -### ClickHouse リリース 25.7, 2025-07-24 {#257} +### ClickHouse リリース 25.7、2025-07-24 {#257} #### 後方互換性のない変更 -* `extractKeyValuePairs` 関数の変更: 新しい引数 `unexpected_quoting_character_strategy` を導入しました。この引数は、クォートされていないキーまたは値の読み取り中に `quoting_character` が想定外に見つかった場合の動作を制御します。値としては `invalid`、`accept`、`promote` のいずれかを指定できます。`invalid` はキーを破棄し、キー待ち状態に戻ります。`accept` はそれをキーの一部として扱います。`promote` は直前の文字を破棄し、クォートされたキーとしてパースを開始します。加えて、クォートされた値をパースした後は、ペア区切り文字が見つかった場合にのみ次のキーをパースします。[#80657](https://github.com/ClickHouse/ClickHouse/pull/80657) ([Arthur Passos](https://github.com/arthurpassos)). -* `countMatches` 関数でゼロバイト一致をサポートしました。以前の動作を保持したいユーザーは、設定 `count_matches_stop_at_empty_match` を有効にできます。[#81676](https://github.com/ClickHouse/ClickHouse/pull/81676) ([Elmi Ahmadov](https://github.com/ahmadov)). -* BACKUP を生成する際に、専用のサーバー設定(`max_backup_bandwidth_for_server`、`max_mutations_bandwidth_for_server`、`max_merges_bandwidth_for_server`)に加えて、ローカル用(`max_local_read_bandwidth_for_server` および `max_local_write_bandwidth_for_server`)とリモート用(`max_remote_read_network_bandwidth_for_server` および `max_remote_write_network_bandwidth_for_server`)のサーバー全体のスロットラーを使用するようにしました。[#81753](https://github.com/ClickHouse/ClickHouse/pull/81753) ([Sergei Trifonov](https://github.com/serxa)). -* 挿入可能な列を持たないテーブルの作成を禁止しました。[#81835](https://github.com/ClickHouse/ClickHouse/pull/81835) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). -* アーカイブ内のファイル単位でクラスタ関数を並列化しました。以前のバージョンでは、アーカイブ全体(zip、tar、7z など)が 1 単位の処理対象でした。新しい設定 `cluster_function_process_archive_on_multiple_nodes` を追加し、デフォルト値は `true` です。`true` に設定すると、クラスタ関数でアーカイブを処理する際の性能が向上します。以前のバージョンでアーカイブ付きのクラスタ関数を使用している場合に、25.7+ へのアップグレード時のエラーを回避し、互換性を維持するには `false` に設定する必要があります。[#82355](https://github.com/ClickHouse/ClickHouse/pull/82355) ([Kseniia Sumarokova](https://github.com/kssenii)). -* `SYSTEM RESTART REPLICAS` クエリが、Lazy データベースへのアクセス権がない場合でも、テーブルが同時に DROP されている最中にそれらのテーブルをウェイクアップさせていました。注記: 現在、`SYSTEM RESTART REPLICAS` は、`SHOW TABLES` の権限を持つデータベース内のレプリカのみを再起動します。これは自然な挙動です。[#83321](https://github.com/ClickHouse/ClickHouse/pull/83321) ([Alexey Milovidov](https://github.com/alexey-milovidov)). - +* `extractKeyValuePairs` 関数の変更: 引数 `unexpected_quoting_character_strategy` を新たに導入しました。これは、クオートされていないキーや値を読み取っているときに、想定外の `quoting_character` が見つかった場合の挙動を制御します。値として指定できるのは `invalid`、`accept`、`promote` のいずれかです。`invalid` はそのキーを破棄し、キー待ち状態に戻ります。`accept` はそれをキーの一部として扱います。`promote` は直前の文字を破棄し、クオートされたキーとしてパースを開始します。加えて、クオートされた値をパースした後は、ペア区切り文字が見つかった場合にのみ次のキーをパースします。 [#80657](https://github.com/ClickHouse/ClickHouse/pull/80657) ([Arthur Passos](https://github.com/arthurpassos)). +* `countMatches` 関数でゼロバイトのマッチをサポートしました。従来の動作を維持したいユーザーは、設定 `count_matches_stop_at_empty_match` を有効にできます。 [#81676](https://github.com/ClickHouse/ClickHouse/pull/81676) ([Elmi Ahmadov](https://github.com/ahmadov)). +* BACKUP の生成時に、専用のサーバー設定(`max_backup_bandwidth_for_server`、`max_mutations_bandwidth_for_server`、`max_merges_bandwidth_for_server`)に加えて、ローカル用(`max_local_read_bandwidth_for_server` と `max_local_write_bandwidth_for_server`)およびリモート用(`max_remote_read_network_bandwidth_for_server` と `max_remote_write_network_bandwidth_for_server`)のサーバー全体のスロットラを使用するようにしました。 [#81753](https://github.com/ClickHouse/ClickHouse/pull/81753) ([Sergei Trifonov](https://github.com/serxa)). +* 挿入可能なカラムを持たないテーブルの作成を禁止しました。 [#81835](https://github.com/ClickHouse/ClickHouse/pull/81835) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +* アーカイブ内のファイル単位で cluster 関数を並列実行するようにしました。以前のバージョンでは、zip、tar、7z などのアーカイブ全体が 1 単位の処理対象でした。新しい設定 `cluster_function_process_archive_on_multiple_nodes` を追加し、デフォルト値は `true` です。`true` に設定すると、cluster 関数でアーカイブを処理する際のパフォーマンスが向上します。互換性維持および、以前のバージョンでアーカイブ付きの cluster 関数を使用している場合に 25.7+ へのアップグレード中のエラーを回避するためには、`false` に設定する必要があります。 [#82355](https://github.com/ClickHouse/ClickHouse/pull/82355) ([Kseniia Sumarokova](https://github.com/kssenii)). +* `SYSTEM RESTART REPLICAS` クエリが、当該データベースへのアクセス権がない場合でも Lazy データベース内のテーブルをウェイクアップしており、そのテーブルが同時に DROP されている最中に発生していました。注: 現在は `SYSTEM RESTART REPLICAS` は、`SHOW TABLES` の権限を持つデータベース内のレプリカのみを再起動します。これは自然な挙動です。 [#83321](https://github.com/ClickHouse/ClickHouse/pull/83321) ([Alexey Milovidov](https://github.com/alexey-milovidov)). #### 新機能 -* `MergeTree` ファミリのテーブルに対する軽量アップデートのサポートを追加しました。軽量アップデートは、新しい構文 `UPDATE SET col1 = val1, col2 = val2, ... WHERE ` で使用できます。軽量アップデートを利用した軽量削除の実装を追加しました。`lightweight_delete_mode = 'lightweight_update'` を設定することで有効化できます。 [#82004](https://github.com/ClickHouse/ClickHouse/pull/82004) ([Anton Popov](https://github.com/CurtizJ))。 -* Iceberg のスキーマ進化で複合型をサポート。[#73714](https://github.com/ClickHouse/ClickHouse/pull/73714)([Konstantin Vedernikov](https://github.com/scanhex12))。 +* `MergeTree` ファミリーのテーブルで lightweight update がサポートされました。lightweight update は新しい構文 `UPDATE <table> SET col1 = val1, col2 = val2, ... WHERE <condition>` で使用できます。さらに、lightweight update を利用した lightweight delete の実装が追加されました。`lightweight_delete_mode = 'lightweight_update'` を設定すると有効になります。 [#82004](https://github.com/ClickHouse/ClickHouse/pull/82004) ([Anton Popov](https://github.com/CurtizJ))。 +* Iceberg スキーマの進化で複合型をサポートしました。 [#73714](https://github.com/ClickHouse/ClickHouse/pull/73714) ([Konstantin Vedernikov](https://github.com/scanhex12)). * Iceberg テーブルへの INSERT をサポートしました。 [#82692](https://github.com/ClickHouse/ClickHouse/pull/82692) ([Konstantin Vedernikov](https://github.com/scanhex12)). -* Iceberg データファイルをフィールド ID に基づいて読み取ります。これにより Iceberg との互換性が向上し、メタデータ内のフィールドをリネームしつつ、基盤となる Parquet ファイル内では別の名前にマッピングできます。これにより [#83065](https://github.com/ClickHouse/ClickHouse/issues/83065) が解決されています。[#83653](https://github.com/ClickHouse/ClickHouse/pull/83653)([Konstantin Vedernikov](https://github.com/scanhex12))。 -* ClickHouse は Iceberg 向けの圧縮 `metadata.json` ファイルをサポートするようになりました。[#70874](https://github.com/ClickHouse/ClickHouse/issues/70874) を修正しました。[#81451](https://github.com/ClickHouse/ClickHouse/pull/81451)([alesapin](https://github.com/alesapin))。 -* Glue カタログで `TimestampTZ` をサポートしました。これにより [#81654](https://github.com/ClickHouse/ClickHouse/issues/81654) がクローズされました。 [#83132](https://github.com/ClickHouse/ClickHouse/pull/83132) ([Konstantin Vedernikov](https://github.com/scanhex12)). -* ClickHouse クライアントに AI を活用した SQL 生成機能を追加しました。ユーザーは、クエリの先頭に `??` を付けることで、自然言語での説明文から SQL クエリを生成できるようになりました。OpenAI および Anthropic プロバイダーをサポートし、スキーマの自動検出に対応しています。[#83314](https://github.com/ClickHouse/ClickHouse/pull/83314) ([Kaushik Iska](https://github.com/iskakaushik))。 -* Geo 型を WKB 形式で書き出す関数を追加。[#82935](https://github.com/ClickHouse/ClickHouse/pull/82935) ([Konstantin Vedernikov](https://github.com/scanhex12))。 -* ソース用に新たに 2 種類のアクセス種別 `READ` と `WRITE` が導入され、ソースに関連する既存のすべてのアクセス種別は非推奨となりました。これまでの `GRANT S3 ON *.* TO user` は、今後は `GRANT READ, WRITE ON S3 TO user` を使用します。これにより、ソースに対する `READ` と `WRITE` 権限を分離して付与できるようになり、例えば `GRANT READ ON * TO user`、`GRANT WRITE ON S3 TO user` のように指定できます。この機能は設定 `access_control_improvements.enable_read_write_grants` によって制御され、デフォルトでは無効になっています。 [#73659](https://github.com/ClickHouse/ClickHouse/pull/73659) ([pufit](https://github.com/pufit)). -* NumericIndexedVector: ビットスライス方式の Roaring ビットマップ圧縮を基盤とする新しいベクターデータ構造であり、構築・解析・要素ごとの算術演算のための 20 個以上の関数を備えています。スパースデータに対するストレージ使用量の削減や、結合・フィルタ・集約の高速化に役立ちます。[#70582](https://github.com/ClickHouse/ClickHouse/issues/70582) および T. Xiong と Y. Wang による VLDB 2024 掲載論文 [“Large-Scale Metric Computation in Online Controlled Experiment Platform”](https://arxiv.org/abs/2405.08411) を実装しています。 [#74193](https://github.com/ClickHouse/ClickHouse/pull/74193) ([FriendLey](https://github.com/FriendLey))。 -* ワークロード設定 `max_waiting_queries` がサポートされるようになりました。これを使用してクエリキューの長さを制限できます。制限に達した場合、それ以降のすべてのクエリは `SERVER_OVERLOADED` エラーで打ち切られます。 [#81250](https://github.com/ClickHouse/ClickHouse/pull/81250) ([Oleg Doronin](https://github.com/dorooleg)). -* 次の財務関数を追加: `financialInternalRateOfReturnExtended` (`XIRR`)、`financialInternalRateOfReturn` (`IRR`)、`financialNetPresentValueExtended` (`XNPV`)、`financialNetPresentValue` (`NPV`)。 [#81599](https://github.com/ClickHouse/ClickHouse/pull/81599) ([Joanna Hulboj](https://github.com/jh0x))。 -* 2つのポリゴンが交差しているかどうかを確認するための地理空間関数 `polygonsIntersectCartesian` と `polygonsIntersectSpherical` を追加しました。 [#81882](https://github.com/ClickHouse/ClickHouse/pull/81882) ([Paul Lamb](https://github.com/plamb))。 -* MergeTree ファミリーのテーブルで `_part_granule_offset` 仮想カラムをサポートしました。このカラムは、各行が所属するデータパーツ内でのグラニュール/マークの 0 から始まるインデックス値を示します。これは [#79572](https://github.com/ClickHouse/ClickHouse/issues/79572) に対応するものです。[#82341](https://github.com/ClickHouse/ClickHouse/pull/82341)([Amos Bird](https://github.com/amosbird))。[#82341](https://github.com/ClickHouse/ClickHouse/pull/82341)([Amos Bird](https://github.com/amosbird)) -* sRGB と OkLCH の色空間間での相互変換用 SQL 関数 `colorSRGBToOkLCH` および `colorOkLCHToSRGB` を追加しました。 [#83679](https://github.com/ClickHouse/ClickHouse/pull/83679) ([Fgrtue](https://github.com/Fgrtue)) -* `CREATE USER` クエリでユーザー名にパラメータを指定できるようにしました。 [#81387](https://github.com/ClickHouse/ClickHouse/pull/81387) ([Diskein](https://github.com/Diskein)). -* `system.formats` テーブルには、HTTP コンテンツ タイプやスキーマ推論への対応状況など、フォーマットに関する追加情報が含まれるようになりました。 [#81505](https://github.com/ClickHouse/ClickHouse/pull/81505) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 - - +* Iceberg データファイルをフィールド ID ベースで読み取るようにしました。これにより Iceberg との互換性が向上します。メタデータ内のフィールドは名前を変更しても、基盤となる Parquet ファイル内の別の名前にマッピングできます。この変更により [#83065](https://github.com/ClickHouse/ClickHouse/issues/83065) が解決されました。[#83653](https://github.com/ClickHouse/ClickHouse/pull/83653)([Konstantin Vedernikov](https://github.com/scanhex12))。 +* ClickHouse は Iceberg 向けの圧縮された `metadata.json` ファイルをサポートするようになりました。 [#70874](https://github.com/ClickHouse/ClickHouse/issues/70874) を修正しました。 [#81451](https://github.com/ClickHouse/ClickHouse/pull/81451)([alesapin](https://github.com/alesapin))。 +* Glue カタログで `TimestampTZ` をサポートするようにしました。これにより [#81654](https://github.com/ClickHouse/ClickHouse/issues/81654) がクローズされました。[#83132](https://github.com/ClickHouse/ClickHouse/pull/83132) ([Konstantin Vedernikov](https://github.com/scanhex12)). +* ClickHouse クライアントに AI 搭載の SQL 生成機能を追加しました。ユーザーはクエリ文字列の先頭に `??` を付けることで、自然言語による説明から SQL クエリを生成できるようになりました。OpenAI および Anthropic をプロバイダーとしてサポートし、自動スキーマ検出に対応しています。[#83314](https://github.com/ClickHouse/ClickHouse/pull/83314)([Kaushik Iska](https://github.com/iskakaushik))。 +* Geo 型を WKB 形式で書き出すための関数を追加しました。 [#82935](https://github.com/ClickHouse/ClickHouse/pull/82935) ([Konstantin Vedernikov](https://github.com/scanhex12)). +* ソース向けに `READ` と `WRITE` の 2 種類の新しいアクセス種別が導入され、ソースに関連するそれまでのすべてのアクセス種別は非推奨となりました。以前は `GRANT S3 ON *.* TO user` でしたが、現在は `GRANT READ, WRITE ON S3 TO user` となります。これにより、ソースに対する `READ` と `WRITE` の権限を分離して付与することも可能になります。例えば、`GRANT READ ON * TO user`、`GRANT WRITE ON S3 TO user` のように指定できます。この機能は設定 `access_control_improvements.enable_read_write_grants` によって制御され、デフォルトでは無効になっています。[#73659](https://github.com/ClickHouse/ClickHouse/pull/73659) ([pufit](https://github.com/pufit))。 +* NumericIndexedVector: ビットスライス方式の Roaring Bitmap 圧縮を基盤とする新しいベクターデータ構造で、構築・解析・要素ごとの算術演算のための 20 以上の関数を備えています。疎なデータに対するストレージ使用量を削減し、結合・フィルタリング・集約処理を高速化できます。[#70582](https://github.com/ClickHouse/ClickHouse/issues/70582) および T. Xiong と Y. Wang による VLDB 2024 掲載論文 [“Large-Scale Metric Computation in Online Controlled Experiment Platform”](https://arxiv.org/abs/2405.08411) を実装したものです。[#74193](https://github.com/ClickHouse/ClickHouse/pull/74193)([FriendLey](https://github.com/FriendLey))。 +* ワークロード設定 `max_waiting_queries` がサポートされるようになりました。クエリキューのサイズを制限するために使用できます。上限に達すると、それ以降のすべてのクエリは `SERVER_OVERLOADED` エラーで終了します。 [#81250](https://github.com/ClickHouse/ClickHouse/pull/81250) ([Oleg Doronin](https://github.com/dorooleg))。 +* 財務関数を追加: `financialInternalRateOfReturnExtended` (`XIRR`), `financialInternalRateOfReturn` (`IRR`), `financialNetPresentValueExtended` (`XNPV`), `financialNetPresentValue` (`NPV`)。[#81599](https://github.com/ClickHouse/ClickHouse/pull/81599)([Joanna Hulboj](https://github.com/jh0x))。 +* 2 つのポリゴンが交差しているかどうかを判定するための地理空間関数 `polygonsIntersectCartesian` および `polygonsIntersectSpherical` を追加。[#81882](https://github.com/ClickHouse/ClickHouse/pull/81882)([Paul Lamb](https://github.com/plamb))。 +* MergeTree ファミリーのテーブルで `_part_granule_offset` 仮想カラムをサポートしました。このカラムは、各行が所属するデータパーツ内でのグラニュール/マークの 0 ベースのインデックスを示します。これは [#79572](https://github.com/ClickHouse/ClickHouse/issues/79572) に対処するものです。[#82341](https://github.com/ClickHouse/ClickHouse/pull/82341)([Amos Bird](https://github.com/amosbird))。[#82341](https://github.com/ClickHouse/ClickHouse/pull/82341)([Amos Bird](https://github.com/amosbird)) +* sRGB および OkLCH カラー空間間で色を変換するための SQL 関数 `colorSRGBToOkLCH` および `colorOkLCHToSRGB` を追加しました。 [#83679](https://github.com/ClickHouse/ClickHouse/pull/83679) ([Fgrtue](https://github.com/Fgrtue)). +* `CREATE USER` クエリでユーザー名にパラメータを使用できるようにしました。 [#81387](https://github.com/ClickHouse/ClickHouse/pull/81387) ([Diskein](https://github.com/Diskein)). +* `system.formats` テーブルに、HTTP コンテンツタイプやスキーマ推論機能など、フォーマットに関する拡張情報が含まれるようになりました。 [#81505](https://github.com/ClickHouse/ClickHouse/pull/81505) ([Alexey Milovidov](https://github.com/alexey-milovidov)). #### 実験的機能 -* テキストインデックスを検索するための汎用ツールとして、`searchAny` と `searchAll` 関数を追加しました。[#80641](https://github.com/ClickHouse/ClickHouse/pull/80641) ([Elmi Ahmadov](https://github.com/ahmadov)). -* テキストインデックスで新しい `split` トークナイザーをサポートしました。[#81752](https://github.com/ClickHouse/ClickHouse/pull/81752) ([Elmi Ahmadov](https://github.com/ahmadov)). -* `text` インデックスのデフォルトのインデックス粒度の値を 64 に変更しました。これにより、社内ベンチマークにおける平均的なテストクエリの期待されるパフォーマンスが向上します。[#82162](https://github.com/ClickHouse/ClickHouse/pull/82162) ([Jimmy Aguilar Mena](https://github.com/Ergus)). -* 256 ビットのビットマップは、状態の出辺ラベルを順序付きで保存しますが、出辺の状態自体はハッシュテーブル内に現れる順序でディスクに保存されます。そのため、ディスクから読み込む際に、あるラベルが誤った次状態を指してしまう可能性がありました。[#82783](https://github.com/ClickHouse/ClickHouse/pull/82783) ([Elmi Ahmadov](https://github.com/ahmadov)). -* テキストインデックスにおける FST ツリーの BLOB に対して zstd 圧縮を有効化しました。[#83093](https://github.com/ClickHouse/ClickHouse/pull/83093) ([Elmi Ahmadov](https://github.com/ahmadov)). -* ベクタ類似度インデックスをベータ版に昇格しました。ベクタ類似度インデックスを利用するには、有効化が必要なエイリアス設定 `enable_vector_similarity_index` を導入しました。[#83459](https://github.com/ClickHouse/ClickHouse/pull/83459) ([Robert Schulze](https://github.com/rschu1ze)). -* 実験的なゼロコピー・レプリケーションに関連する実験的な `send_metadata` ロジックを削除しました。これは一度も使用されておらず、このコードをサポートしている人もいませんでした。さらに、それに関連するテストすら存在しなかったため、かなり前から壊れていた可能性が高いです。[#82508](https://github.com/ClickHouse/ClickHouse/pull/82508) ([alesapin](https://github.com/alesapin)). -* `StorageKafka2` を `system.kafka_consumers` に統合しました。[#82652](https://github.com/ClickHouse/ClickHouse/pull/82652) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). -* 統計情報に基づいて、`(a < 1 and a > 0) or b = 3` のような複雑な CNF/DNF を推定するようにしました。[#82663](https://github.com/ClickHouse/ClickHouse/pull/82663) ([Han Fei](https://github.com/hanfei1991)). - +* テキストインデックスを検索するための汎用ツールとして、関数 `searchAny` と `searchAll` を追加しました。[#80641](https://github.com/ClickHouse/ClickHouse/pull/80641) ([Elmi Ahmadov](https://github.com/ahmadov)). +* テキストインデックスで新しい `split` tokenizer をサポートしました。[#81752](https://github.com/ClickHouse/ClickHouse/pull/81752) ([Elmi Ahmadov](https://github.com/ahmadov)). +* `text` インデックスのデフォルトのインデックス粒度値を 64 に変更しました。これにより、社内ベンチマークにおける平均的なテストクエリの期待される性能が向上します。[#82162](https://github.com/ClickHouse/ClickHouse/pull/82162) ([Jimmy Aguilar Mena](https://github.com/Ergus)). +* 256 ビットのビットマップは状態の出辺ラベルを順序付きで保存しますが、出辺の状態自体はハッシュテーブル内に現れる順序でディスクに保存されます。そのため、ディスクから読み出す際に、あるラベルが誤った次の状態を指してしまう可能性がありました。[#82783](https://github.com/ClickHouse/ClickHouse/pull/82783) ([Elmi Ahmadov](https://github.com/ahmadov)). +* テキストインデックス内の FST ツリー BLOB に対して zstd 圧縮を有効化しました。[#83093](https://github.com/ClickHouse/ClickHouse/pull/83093) ([Elmi Ahmadov](https://github.com/ahmadov)). +* ベクトル類似性インデックスをベータ版に昇格しました。ベクトル類似性インデックスを利用するには、エイリアス設定 `enable_vector_similarity_index` を有効にする必要があります。[#83459](https://github.com/ClickHouse/ClickHouse/pull/83459) ([Robert Schulze](https://github.com/rschu1ze)). +* 実験的なゼロコピー複製に関連する実験的な `send_metadata` ロジックを削除しました。これは一度も使用されておらず、このコードをサポートしている人もいませんでした。さらに、これに関連するテストもまったく存在しなかったため、かなり前から壊れていた可能性が高いです。[#82508](https://github.com/ClickHouse/ClickHouse/pull/82508) ([alesapin](https://github.com/alesapin)). +* `StorageKafka2` を `system.kafka_consumers` に統合しました。[#82652](https://github.com/ClickHouse/ClickHouse/pull/82652) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). +* 統計情報に基づいて、複雑な CNF/DNF(例: `(a < 1 and a > 0) or b = 3`)を推定できるようにしました。[#82663](https://github.com/ClickHouse/ClickHouse/pull/82663) ([Han Fei](https://github.com/hanfei1991)). #### パフォーマンスの向上 -* 非同期ロギングを導入しました。ログを低速なデバイスに出力しても、クエリが遅延しなくなりました。 [#82516](https://github.com/ClickHouse/ClickHouse/pull/82516) ([Raúl Marín](https://github.com/Algunenano))。キュー内に保持できるエントリ数の上限を設けました。 [#83214](https://github.com/ClickHouse/ClickHouse/pull/83214) ([Raúl Marín](https://github.com/Algunenano))。 -* 各シャードで独立して INSERT SELECT が実行されるモードにおいて、並列分散 INSERT SELECT がデフォルトで有効になりました。`parallel_distributed_insert_select` 設定を参照してください。 [#83040](https://github.com/ClickHouse/ClickHouse/pull/83040) ([Igor Nikonov](https://github.com/devcrafter))。 -* 集約クエリに `Nullable` ではない列に対する単一の `count()` 関数のみが含まれている場合、ハッシュテーブル探索中に集約ロジックが完全にインライン展開されます。これにより、集約状態の割り当ておよび維持が不要になり、メモリ使用量と CPU オーバーヘッドが大幅に削減されます。これは [#81982](https://github.com/ClickHouse/ClickHouse/issues/81982) に部分的に対処します。[#82104](https://github.com/ClickHouse/ClickHouse/pull/82104)([Amos Bird](https://github.com/amosbird))。 -* `HashJoin` のパフォーマンスを最適化しました。典型的なケースであるキー列が 1 つだけの場合にハッシュマップに対する追加ループを削除し、さらに `null_map` および `join_mask` が常に `true` / `false` となるケースではそれらのチェックも省略しました。 [#82308](https://github.com/ClickHouse/ClickHouse/pull/82308) ([Nikita Taranov](https://github.com/nickitat))。 -* `-If` combinator に対する軽微な最適化。 [#78454](https://github.com/ClickHouse/ClickHouse/pull/78454) ([李扬](https://github.com/taiyang-li))。 -* ベクトル類似性インデックスを使用したベクトル検索クエリは、ストレージ読み取り回数とCPU使用量の削減により、より低いレイテンシで完了するようになりました。 [#79103](https://github.com/ClickHouse/ClickHouse/pull/79103) ([Shankar Iyer](https://github.com/shankar-iyer)). -* `filterPartsByQueryConditionCache` で `merge_tree_min_{rows,bytes}_for_seek` を考慮するようにし、インデックスでフィルタリングする他のメソッドと動作を揃えました。 [#80312](https://github.com/ClickHouse/ClickHouse/pull/80312) ([李扬](https://github.com/taiyang-li)). -* `TOTALS` ステップ以降のパイプラインをマルチスレッド化しました。 [#80331](https://github.com/ClickHouse/ClickHouse/pull/80331) ([UnamedRus](https://github.com/UnamedRus))。 -* `Redis` および `KeeperMap` ストレージに対するキーによるフィルタリングを修正。 [#81833](https://github.com/ClickHouse/ClickHouse/pull/81833) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). -* 新しい設定 `min_joined_block_size_rows`(`min_joined_block_size_bytes` に類似、デフォルト値は 65409)を追加し、JOIN の入力および出力ブロックに対する最小ブロックサイズ(行数)を制御できるようにしました(JOIN アルゴリズムがサポートしている場合)。小さいブロックはまとめて 1 つに圧縮されます。 [#81886](https://github.com/ClickHouse/ClickHouse/pull/81886) ([Nikita Taranov](https://github.com/nickitat)). -* `ATTACH PARTITION` を実行しても、すべてのキャッシュがクリアされなくなりました。 [#82377](https://github.com/ClickHouse/ClickHouse/pull/82377) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 同値類を使用して冗長な JOIN 演算を削除することで、相関サブクエリ用に生成された実行プランを最適化します。すべての相関列に対して同値な式が存在する場合、`query_plan_correlated_subqueries_use_substitution` 設定が有効であれば、`CROSS JOIN` は生成されません。[#82435](https://github.com/ClickHouse/ClickHouse/pull/82435)([Dmitry Novik](https://github.com/novikd))。 -* 関数 `EXISTS` の引数となっている相関サブクエリでは、必要な列だけを読み取るようにしました。 [#82443](https://github.com/ClickHouse/ClickHouse/pull/82443) ([Dmitry Novik](https://github.com/novikd)). -* クエリ解析中のクエリツリーの比較を若干高速化しました。 [#82617](https://github.com/ClickHouse/ClickHouse/pull/82617) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). -* false sharing を軽減するため、ProfileEvents のカウンタにアライメントを追加しました。 [#82697](https://github.com/ClickHouse/ClickHouse/pull/82697) ([Jiebin Sun](https://github.com/jiebinn)). -* [#82308](https://github.com/ClickHouse/ClickHouse/issues/82308) における `null_map` と `JoinMask` の最適化が、複数の OR 句を含む JOIN のケースにも適用されました。また、`KnownRowsHolder` データ構造も最適化されました。[#83041](https://github.com/ClickHouse/ClickHouse/pull/83041)([Nikita Taranov](https://github.com/nickitat))。 -* 各フラグへのアクセスのたびにハッシュを計算することを避けるため、結合フラグにはプレーンな `std::vector` が使用されます。 [#83043](https://github.com/ClickHouse/ClickHouse/pull/83043) ([Nikita Taranov](https://github.com/nickitat))。 -* `HashJoin` が `lazy` 出力モードを使用している場合、結果カラム用のメモリを事前に確保しないでください。特にマッチ数が少ない場合には最適ではありません。さらに、結合が完了した後には正確なマッチ数が分かるため、その値に基づいてより正確なサイズで事前確保できます。 [#83304](https://github.com/ClickHouse/ClickHouse/pull/83304) ([Nikita Taranov](https://github.com/nickitat)). -* パイプライン構築時のポートヘッダーにおけるメモリコピーを最小限に抑えました。元の[PR](https://github.com/ClickHouse/ClickHouse/pull/70105)は[heymind](https://github.com/heymind)によるものです。[#83381](https://github.com/ClickHouse/ClickHouse/pull/83381)([Raúl Marín](https://github.com/Algunenano))。 -* RocksDB ストレージを使用する際の clickhouse-keeper の起動を改善しました。 [#83390](https://github.com/ClickHouse/ClickHouse/pull/83390) ([Antonio Andelic](https://github.com/antonio2368)). -* 高い同時実行負荷がかかっている場合のロック競合を減らすため、ストレージスナップショットデータの作成中はロックを保持しないようにしました。 [#83510](https://github.com/ClickHouse/ClickHouse/pull/83510) ([Duc Canh Le](https://github.com/canhld94)). -* パースエラーが発生しない場合にシリアライザーを再利用することで、`ProtobufSingle` 入力フォーマットのパフォーマンスを改善しました。 [#83613](https://github.com/ClickHouse/ClickHouse/pull/83613) ([Eduard Karacharov](https://github.com/korowa))。 +* 非同期ロギングを導入しました。ログが低速なデバイスに出力される場合でも、クエリ処理がブロックされなくなりました。[#82516](https://github.com/ClickHouse/ClickHouse/pull/82516) ([Raúl Marín](https://github.com/Algunenano))。キューに保持されるエントリ数の上限を設けました。[#83214](https://github.com/ClickHouse/ClickHouse/pull/83214) ([Raúl Marín](https://github.com/Algunenano))。 +* Parallel distributed INSERT SELECT は、INSERT SELECT が各シャードで独立して実行されるモードではデフォルトで有効になっています。`parallel_distributed_insert_select` 設定を参照してください。 [#83040](https://github.com/ClickHouse/ClickHouse/pull/83040) ([Igor Nikonov](https://github.com/devcrafter)). +* 集約クエリに、`Nullable` ではないカラムに対する単一の `count()` 関数のみが含まれている場合、ハッシュテーブルの走査時に集約ロジックが完全にインライン化されます。これにより、集約状態の割り当てや維持が不要となり、メモリ使用量と CPU オーバーヘッドが大幅に削減されます。これは [#81982](https://github.com/ClickHouse/ClickHouse/issues/81982) を部分的に解決するものです。[#82104](https://github.com/ClickHouse/ClickHouse/pull/82104)([Amos Bird](https://github.com/amosbird))。 +* `HashJoin` のパフォーマンスを最適化しました。典型的な、キー列が 1 つだけの場合にはハッシュマップに対する追加ループを削除し、さらに `null_map` および `join_mask` が常に `true` / `false` となるケースでは、それらのチェックも除去しました。 [#82308](https://github.com/ClickHouse/ClickHouse/pull/82308) ([Nikita Taranov](https://github.com/nickitat)). +* `-If` コンビネータに対する軽微な最適化。 [#78454](https://github.com/ClickHouse/ClickHouse/pull/78454) ([李扬](https://github.com/taiyang-li))。 +* ベクター類似性インデックスを使用したベクター検索クエリが、ストレージ読み取り回数と CPU 使用量の削減により、より低レイテンシで完了するようになりました。 [#79103](https://github.com/ClickHouse/ClickHouse/pull/79103) ([Shankar Iyer](https://github.com/shankar-iyer)). +* `filterPartsByQueryConditionCache` において `merge_tree_min_{rows,bytes}_for_seek` を考慮するようにし、インデックスを使ってフィルタリングする他のメソッドと動作を揃えました。 [#80312](https://github.com/ClickHouse/ClickHouse/pull/80312) ([李扬](https://github.com/taiyang-li))。 +* `TOTALS` ステップ以降のパイプラインをマルチスレッド化しました。 [#80331](https://github.com/ClickHouse/ClickHouse/pull/80331) ([UnamedRus](https://github.com/UnamedRus)). +* `Redis` および `KeeperMap` ストレージに対するキーによるフィルタリングを修正しました。 [#81833](https://github.com/ClickHouse/ClickHouse/pull/81833) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +* 新しい設定 `min_joined_block_size_rows`(`min_joined_block_size_bytes` に類似、デフォルトは 65409)を追加し、JOIN の入力および出力ブロック(結合アルゴリズムが対応している場合)の最小ブロックサイズ(行数)を制御できるようにしました。小さいブロックはまとめられます。 [#81886](https://github.com/ClickHouse/ClickHouse/pull/81886) ([Nikita Taranov](https://github.com/nickitat))。 +* `ATTACH PARTITION` によって、もはやすべてのキャッシュがクリアされることはなくなりました。 [#82377](https://github.com/ClickHouse/ClickHouse/pull/82377) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* 相関サブクエリに対して、同値類を利用して冗長な JOIN 操作を削除することで、生成される実行プランを最適化します。すべての相関列に対して等価な式が存在する場合、`query_plan_correlated_subqueries_use_substitution` 設定が有効になっていれば、`CROSS JOIN` は生成されません。[#82435](https://github.com/ClickHouse/ClickHouse/pull/82435)([Dmitry Novik](https://github.com/novikd))。 +* 関数 `EXISTS` の引数であると判断される相関サブクエリでは、必要な列のみを読み取るようにしました。 [#82443](https://github.com/ClickHouse/ClickHouse/pull/82443) ([Dmitry Novik](https://github.com/novikd)). +* クエリ解析中のクエリツリーの比較処理をわずかに高速化しました。 [#82617](https://github.com/ClickHouse/ClickHouse/pull/82617) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). +* ProfileEvents の Counter にアラインメントを追加し、false sharing を低減しました。 [#82697](https://github.com/ClickHouse/ClickHouse/pull/82697) ([Jiebin Sun](https://github.com/jiebinn)). +* [#82308](https://github.com/ClickHouse/ClickHouse/issues/82308) で行われた `null_map` と `JoinMask` の最適化が、複数の OR 条件を含む JOIN の場合にも適用されました。また、`KnownRowsHolder` データ構造も最適化されました。[#83041](https://github.com/ClickHouse/ClickHouse/pull/83041)([Nikita Taranov](https://github.com/nickitat))。 +* JOIN フラグには、フラグにアクセスするたびにハッシュを計算することを避けるため、プレーンな `std::vector` が使用されます。 [#83043](https://github.com/ClickHouse/ClickHouse/pull/83043) ([Nikita Taranov](https://github.com/nickitat)). +* `HashJoin` が `lazy` 出力モードを使用する場合、結果カラム用のメモリを事前に確保しないでください。これは、特に一致数が少ない場合には非効率的です。さらに、結合の完了後には正確な一致件数が分かるため、より正確に事前割り当てを行えます。 [#83304](https://github.com/ClickHouse/ClickHouse/pull/83304) ([Nikita Taranov](https://github.com/nickitat)). +* パイプライン構築時のポートヘッダーでのメモリコピーを最小化。元の[PR](https://github.com/ClickHouse/ClickHouse/pull/70105)は[heymind](https://github.com/heymind)によるもの。[#83381](https://github.com/ClickHouse/ClickHouse/pull/83381)([Raúl Marín](https://github.com/Algunenano))。 +* rocksdb ストレージ使用時の clickhouse-keeper の起動を改善しました。 [#83390](https://github.com/ClickHouse/ClickHouse/pull/83390) ([Antonio Andelic](https://github.com/antonio2368)). +* 高い同時実行負荷時のロック競合を減らすため、ロックを保持したままストレージスナップショットデータを作成しないようにしました。 [#83510](https://github.com/ClickHouse/ClickHouse/pull/83510) ([Duc Canh Le](https://github.com/canhld94)). +* パースエラーが発生しない場合にシリアライザを再利用することで、`ProtobufSingle` 入力フォーマットのパフォーマンスを向上しました。 [#83613](https://github.com/ClickHouse/ClickHouse/pull/83613) ([Eduard Karacharov](https://github.com/korowa)). * 短いクエリを高速化するためのパイプライン構築処理のパフォーマンスを改善。 [#83631](https://github.com/ClickHouse/ClickHouse/pull/83631) ([Raúl Marín](https://github.com/Algunenano)). -* 短いクエリを高速化するための `MergeTreeReadersChain::getSampleBlock` を最適化しました。 [#83875](https://github.com/ClickHouse/ClickHouse/pull/83875) ([Raúl Marín](https://github.com/Algunenano))。 -* 非同期リクエストを用いることで、データカタログでのテーブル一覧表示を高速化しました。 [#81084](https://github.com/ClickHouse/ClickHouse/pull/81084) ([alesapin](https://github.com/alesapin)). -* `s3_slow_all_threads_after_network_error` 設定が有効な場合に、S3 リトライメカニズムにジッターを導入しました。 [#81849](https://github.com/ClickHouse/ClickHouse/pull/81849) ([zoomxi](https://github.com/zoomxi)). - - - - +* 短いクエリを高速化するため、`MergeTreeReadersChain::getSampleBlock` を最適化しました。 [#83875](https://github.com/ClickHouse/ClickHouse/pull/83875) ([Raúl Marín](https://github.com/Algunenano)). +* データカタログにおけるテーブル一覧の表示を、非同期リクエストにより高速化しました。 [#81084](https://github.com/ClickHouse/ClickHouse/pull/81084) ([alesapin](https://github.com/alesapin)). +* `s3_slow_all_threads_after_network_error` 設定が有効な場合、S3 の再試行メカニズムにジッターを導入しました。 [#81849](https://github.com/ClickHouse/ClickHouse/pull/81849) ([zoomxi](https://github.com/zoomxi)). #### 改善 -* 複数の色を使って括弧を色分けし、可読性を向上しました。 [#82538](https://github.com/ClickHouse/ClickHouse/pull/82538) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* LIKE/REGEXP パターン内のメタ文字を、入力と同時にハイライト表示するようになりました。これはすでに `clickhouse-format` と `clickhouse-client` の echo 出力では行われていましたが、今回新たにコマンドプロンプト上でも行われるようになりました。 [#82871](https://github.com/ClickHouse/ClickHouse/pull/82871) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* `clickhouse-format` とクライアントの echo 出力におけるハイライトは、コマンドラインプロンプトでのハイライトと同じように動作するようになりました。 [#82874](https://github.com/ClickHouse/ClickHouse/pull/82874) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* `plain_rewritable` ディスクがデータベースメタデータ用のディスクとして使用できるようになりました。これをデータベースディスクとしてサポートするために、`plain_rewritable` に `moveFile` と `replaceFile` メソッドを実装しました。 [#79424](https://github.com/ClickHouse/ClickHouse/pull/79424) ([Tuan Pham Anh](https://github.com/tuanpach)). -* `PostgreSQL`、`MySQL`、`DataLake` データベースのバックアップを許可しました。この種のデータベースのバックアップでは、内部のデータではなく定義のみが保存されます。[#79982](https://github.com/ClickHouse/ClickHouse/pull/79982)([Nikolay Degterinsky](https://github.com/evillique))。 -* `allow_experimental_join_condition` の設定は、現在は常に許可されるようになったため、obsolete(廃止予定)としてマークされました。 [#80566](https://github.com/ClickHouse/ClickHouse/pull/80566) ([Vladimir Cherkasov](https://github.com/vdimir)). -* ClickHouse の async metrics に pressure メトリクスを追加。 [#80779](https://github.com/ClickHouse/ClickHouse/pull/80779) ([Xander Garbett](https://github.com/Garbett1)). -* マークキャッシュからの追い出しを追跡するために、`MarkCacheEvictedBytes`、`MarkCacheEvictedMarks`、`MarkCacheEvictedFiles` のメトリクスを追加しました(issue [#60989](https://github.com/ClickHouse/ClickHouse/issues/60989))。[#80799](https://github.com/ClickHouse/ClickHouse/pull/80799)([Shivji Kumar Jha](https://github.com/shiv4289))。 -* Parquet の enum を、[仕様](https://github.com/apache/parquet-format/blob/master/LogicalTypes.md#enum)で規定されているとおりバイト配列として書き込めるようにしました。[#81090](https://github.com/ClickHouse/ClickHouse/pull/81090) ([Arthur Passos](https://github.com/arthurpassos))。 -* `DeltaLake` テーブルエンジンの改善: delta-kernel-rs には `ExpressionVisitor` API があり、この PR で実装され、パーティション列の式変換に適用されています(これは、これまで我々のコードで使用していた、delta-kernel-rs 側で非推奨となった古い方法を置き換えるものです)。将来的には、この `ExpressionVisitor` により、統計情報に基づくプルーニングや、一部の DeltaLake 独自機能も実装できるようになります。さらに、この変更の目的は `DeltaLakeCluster` テーブルエンジンでのパーティションプルーニングをサポートすることです(パースされた式の結果である ActionsDAG はシリアライズされ、データパスとともにイニシエータから送信されます。プルーニングに必要なこの種の情報は、データファイルの一覧取得時のメタ情報としてのみ利用可能であり、それはイニシエータだけが実行しますが、その情報は各読み取りサーバ上のデータに対して適用される必要があるためです)。 [#81136](https://github.com/ClickHouse/ClickHouse/pull/81136) ([Kseniia Sumarokova](https://github.com/kssenii))。 -* 名前付きタプルのスーパータイプを導出する際に要素名を保持するようになりました。 [#81345](https://github.com/ClickHouse/ClickHouse/pull/81345) ([lgbo](https://github.com/lgbo-ustc)). -* 以前にコミットされたオフセットに依存しないように、StorageKafka2 で消費済みメッセージを手動でカウントするようにしました。 [#81662](https://github.com/ClickHouse/ClickHouse/pull/81662) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). -* `clickhouse-keeper-utils` を追加しました。ClickHouse Keeper データの管理と分析を行うための新しいコマンドラインツールです。このツールは、スナップショットおよびチェンジログからの状態のダンプ、チェンジログファイルの分析、特定のログ範囲の抽出をサポートします。 [#81677](https://github.com/ClickHouse/ClickHouse/pull/81677) ([Antonio Andelic](https://github.com/antonio2368)). -* 合計およびユーザーごとのネットワークスロットル機構はリセットされないようになっているため、`max_network_bandwidth_for_all_users` および `max_network_bandwidth_for_all_users` の制限が超過されることはありません。[#81729](https://github.com/ClickHouse/ClickHouse/pull/81729)([Sergei Trifonov](https://github.com/serxa))。 -* 出力フォーマットとして GeoParquet への書き込みをサポート。 [#81784](https://github.com/ClickHouse/ClickHouse/pull/81784) ([Konstantin Vedernikov](https://github.com/scanhex12)). -* 未完了のデータミューテーションの影響を現在受けているカラムを `RENAME COLUMN` の ALTER ミューテーションでリネームしようとする場合、その実行を禁止します。 [#81823](https://github.com/ClickHouse/ClickHouse/pull/81823) ([Mikhail Artemenko](https://github.com/Michicosun)). -* 接続を維持すべきかが判明した時点で、`Connection` ヘッダーが他のヘッダーの末尾に送信されるようになりました。 [#81951](https://github.com/ClickHouse/ClickHouse/pull/81951) ([Sema Checherinda](https://github.com/CheSema))。 -* TCP サーバーのキュー長(デフォルトでは 64)を、`listen_backlog`(デフォルトでは 4096)に基づいて調整しました。 [#82045](https://github.com/ClickHouse/ClickHouse/pull/82045) ([Azat Khuzhin](https://github.com/azat)). -* サーバーを再起動せずに、`max_local_read_bandwidth_for_server` と `max_local_write_bandwidth_for_server` を動的に再読み込みできるようにしました。 [#82083](https://github.com/ClickHouse/ClickHouse/pull/82083) ([Kai Zhu](https://github.com/nauu)). -* `TRUNCATE TABLE system.warnings` を使用して `system.warnings` テーブルからすべての警告を削除できるようにサポートを追加しました。 [#82087](https://github.com/ClickHouse/ClickHouse/pull/82087) ([Vladimir Cherkasov](https://github.com/vdimir)). -* データレイククラスタ関数におけるパーティションプルーニングを修正。 [#82131](https://github.com/ClickHouse/ClickHouse/pull/82131) ([Kseniia Sumarokova](https://github.com/kssenii)). -* DeltaLakeCluster テーブル関数でパーティション化されたデータの読み取り処理を修正しました。この PR ではクラスタ関数のプロトコルバージョンを引き上げ、イニシエーターからレプリカへ追加情報を送信できるようにしました。この追加情報には、パーティション列(および将来的には生成列などその他の要素)の解析に必要となる delta-kernel の変換式が含まれます。 [#82132](https://github.com/ClickHouse/ClickHouse/pull/82132) ([Kseniia Sumarokova](https://github.com/kssenii)). -* `reinterpret` 関数は、`T` が固定長データ型である場合に `Array(T)` への変換をサポートするようになりました(issue [#82621](https://github.com/ClickHouse/ClickHouse/issues/82621))。[#83399](https://github.com/ClickHouse/ClickHouse/pull/83399)([Shankar Iyer](https://github.com/shankar-iyer))。 -* database Datalake では、より分かりやすい例外がスローされるようになりました。 [#81211](https://github.com/ClickHouse/ClickHouse/issues/81211) を修正しました。 [#82304](https://github.com/ClickHouse/ClickHouse/pull/82304)([alesapin](https://github.com/alesapin))。 -* `HashJoin::needUsedFlagsForPerRightTableRow` から false を返すことで CROSS JOIN の動作を改善しました。[#82379](https://github.com/ClickHouse/ClickHouse/pull/82379) ([lgbo](https://github.com/lgbo-ustc)) -* Map 列を Array of Tuples として読み書きできるようにしました。 [#82408](https://github.com/ClickHouse/ClickHouse/pull/82408) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). -* `system.licenses` テーブルに [Rust](https://clickhouse.com/blog/rust) クレートのライセンスを一覧表示します。 [#82440](https://github.com/ClickHouse/ClickHouse/pull/82440) ([Raúl Marín](https://github.com/Algunenano))。 -* `{uuid}` のようなマクロを、S3Queue テーブルエンジンの `keeper_path` 設定で使用できるようになりました。[#82463](https://github.com/ClickHouse/ClickHouse/pull/82463) ([Nikolay Degterinsky](https://github.com/evillique))。 -* Keeper の改善: ディスク間での changelog ファイルの移動をバックグラウンドスレッドで行うようにしました。以前は、changelog を別のディスクに移動すると、移動が完了するまで Keeper 全体がブロックされていました。これにより、特に移動処理に長時間を要する場合(例: S3 ディスクへの移動)にパフォーマンスの低下を招いていました。 [#82485](https://github.com/ClickHouse/ClickHouse/pull/82485) ([Antonio Andelic](https://github.com/antonio2368)). -* Keeper の改善:新しい設定 `keeper_server.cleanup_old_and_ignore_new_acl` を追加しました。有効化すると、すべてのノードで既存の ACL が消去され、新しいリクエストに対する ACL は無視されます。ノードから ACL を完全に削除することが目的の場合は、新しいスナップショットが作成されるまでこの設定を有効にしたままにしておくことが重要です。 [#82496](https://github.com/ClickHouse/ClickHouse/pull/82496) ([Antonio Andelic](https://github.com/antonio2368)). -* S3Queue テーブルエンジンを使用するテーブルでのストリーミングを無効化する新しいサーバー設定 `s3queue_disable_streaming` を追加しました。この設定はサーバーを再起動せずに変更できます。[#82515](https://github.com/ClickHouse/ClickHouse/pull/82515) ([Kseniia Sumarokova](https://github.com/kssenii)). -* ファイルシステムキャッシュの動的リサイズ機能をリファクタリングしました。内部状態の解析のためのログをさらに追加しました。 [#82556](https://github.com/ClickHouse/ClickHouse/pull/82556) ([Kseniia Sumarokova](https://github.com/kssenii)). -* 設定ファイルなしで起動した `clickhouse-server` も、デフォルトの設定と同様に PostgreSQL ポート 9005 をリッスンします。[#82633](https://github.com/ClickHouse/ClickHouse/pull/82633)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* `ReplicatedMergeTree::executeMetadataAlter` では、StorageID を取得し、DDLGuard を取得せずに `IDatabase::alterTable` を呼び出そうとします。この処理の間に、技術的には対象のテーブルを別のテーブルと入れ替えることができてしまうため、その後に定義を取得すると誤ったテーブルの定義を取得してしまう可能性があります。これを避けるために、`IDatabase::alterTable` を呼び出そうとする際に UUID が一致するかどうかを別途チェックするようにしました。 [#82666](https://github.com/ClickHouse/ClickHouse/pull/82666) ([Nikolay Degterinsky](https://github.com/evillique))。 -* 読み取り専用のリモートディスクでデータベースをアタッチする場合、テーブルの UUID を手動で DatabaseCatalog に追加する必要があります。 [#82670](https://github.com/ClickHouse/ClickHouse/pull/82670) ([Tuan Pham Anh](https://github.com/tuanpach))。 -* ユーザーが `NumericIndexedVector` で `nan` および `inf` を使用できないようにしました。これにより [#82239](https://github.com/ClickHouse/ClickHouse/issues/82239) が修正され、細かな改善も含まれています。[#82681](https://github.com/ClickHouse/ClickHouse/pull/82681)([Raufs Dunamalijevs](https://github.com/rienath))。 -* `X-ClickHouse-Progress` と `X-ClickHouse-Summary` ヘッダーの形式では、ゼロ値を省略しないでください。 [#82727](https://github.com/ClickHouse/ClickHouse/pull/82727) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). -* Keeper の改善: world:anyone ACL に対する個別の権限をサポート。 [#82755](https://github.com/ClickHouse/ClickHouse/pull/82755) ([Antonio Andelic](https://github.com/antonio2368)). -* SummingMergeTree で集計対象として明示的に指定されている列に対する `RENAME COLUMN` や `DROP COLUMN` を許可しないようにしました。Closes [#81836](https://github.com/ClickHouse/ClickHouse/issues/81836)。[#82821](https://github.com/ClickHouse/ClickHouse/pull/82821)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* `Decimal` から `Float32` への変換精度を向上。`Decimal` から `BFloat16` への変換を実装。[#82660](https://github.com/ClickHouse/ClickHouse/issues/82660) をクローズ。 [#82823](https://github.com/ClickHouse/ClickHouse/pull/82823)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* Web UI のスクロールバーの表示がわずかに改善されました。 [#82869](https://github.com/ClickHouse/ClickHouse/pull/82869) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* 埋め込み設定を備えた `clickhouse-server` により、HTTP OPTIONS レスポンスを返すことで Web UI を利用できるようになります。 [#82870](https://github.com/ClickHouse/ClickHouse/pull/82870) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* config 内のパスに対して追加の Keeper ACL を指定できるようになりました。特定のパスに追加の ACL を付与したい場合は、config の `zookeeper.path_acls` セクションで定義します。[#82898](https://github.com/ClickHouse/ClickHouse/pull/82898) ([Antonio Andelic](https://github.com/antonio2368))。 -* 今後、mutation のスナップショットは可視部分のスナップショットから構築されます。また、スナップショットで使用される mutation カウンタは、含まれている mutation から再計算されます。 [#82945](https://github.com/ClickHouse/ClickHouse/pull/82945) ([Mikhail Artemenko](https://github.com/Michicosun)). -* Keeper がソフトメモリ制限のために書き込みを拒否した際に ProfileEvent を追加します。 [#82963](https://github.com/ClickHouse/ClickHouse/pull/82963) ([Xander Garbett](https://github.com/Garbett1)). -* `system.s3queue_log` テーブルに `commit_time` と `commit_id` カラムを追加しました。 [#83016](https://github.com/ClickHouse/ClickHouse/pull/83016) ([Kseniia Sumarokova](https://github.com/kssenii)). -* 場合によっては、メトリクスに複数の次元を持たせる必要があります。例えば、単一のカウンタを使うのではなく、エラーコードごとに失敗したマージやミューテーションの回数をカウントしたい場合などです。この用途のために `system.dimensional_metrics` を導入しました。これはまさにそのためのものであり、最初の次元付きメトリクスとして `failed_merges` を追加します。 [#83030](https://github.com/ClickHouse/ClickHouse/pull/83030) ([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 -* clickhouse クライアントにおける未知の設定に関する警告を集約し、要約としてログに記録するようにしました。 [#83042](https://github.com/ClickHouse/ClickHouse/pull/83042) ([Bharat Nallan](https://github.com/bharatnc)). -* ClickHouse クライアントは、接続エラーが発生した際にローカルポート番号を報告するようになりました。 [#83050](https://github.com/ClickHouse/ClickHouse/pull/83050) ([Jianfei Hu](https://github.com/incfly)). -* `AsynchronousMetrics` におけるエラー処理をわずかに改善しました。`/sys/block` ディレクトリが存在するがアクセスできない場合でも、サーバーはブロックデバイスを監視せずに起動します。[#79229](https://github.com/ClickHouse/ClickHouse/issues/79229) をクローズしました。[#83115](https://github.com/ClickHouse/ClickHouse/pull/83115)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* SystemLogs のシャットダウン順序を変更し、通常テーブルの後、system テーブルの前で行うようにしました(従来は通常テーブルの前で実行していました)。 [#83134](https://github.com/ClickHouse/ClickHouse/pull/83134) ([Kseniia Sumarokova](https://github.com/kssenii)). -* `S3Queue` のシャットダウン処理のためのログを追加。[#83163](https://github.com/ClickHouse/ClickHouse/pull/83163) ([Kseniia Sumarokova](https://github.com/kssenii))。 -* `Time` と `Time64` を `MM:SS`、`M:SS`、`SS`、または `S` として解釈できるようになりました。 [#83299](https://github.com/ClickHouse/ClickHouse/pull/83299) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* `distributed_ddl_output_mode='*_only_active'` の場合、`max_replication_lag_to_enqueue` を超えるレプリケーションラグを持つ新規または復旧したレプリカを待機しないようにしました。これにより、新しいレプリカが初期化またはリカバリを完了してアクティブになったものの、初期化中に大量のレプリケーションログを蓄積していたために発生する `DDL task is not finished on some hosts` エラーを回避しやすくなります。また、レプリケーションログが `max_replication_lag_to_enqueue` 未満になるまで待機する `SYSTEM SYNC DATABASE REPLICA STRICT` クエリも実装しました。 [#83302](https://github.com/ClickHouse/ClickHouse/pull/83302) ([Alexander Tokmakov](https://github.com/tavplubix))。 -* 例外メッセージ内で式アクションの説明を過度に長く出力しないようにしました。[#83164](https://github.com/ClickHouse/ClickHouse/issues/83164) をクローズ。[#83350](https://github.com/ClickHouse/ClickHouse/pull/83350)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* パーツのプレフィックスおよびサフィックスを解析する機能を追加し、非定数カラムのカバレッジも確認できるようにしました。 [#83377](https://github.com/ClickHouse/ClickHouse/pull/83377) ([Mikhail Artemenko](https://github.com/Michicosun)). -* 名前付きコレクションを使用する場合、ODBC と JDBC のパラメータ名を統一しました。 [#83410](https://github.com/ClickHouse/ClickHouse/pull/83410) ([Andrey Zvonov](https://github.com/zvonand)). -* ストレージがシャットダウンしているときには、`getStatus` は `ErrorCodes::ABORTED` 例外をスローします。以前は、このために SELECT クエリが失敗していましたが、現在は `ErrorCodes::ABORTED` 例外を捕捉して意図的に無視するようにしました。 [#83435](https://github.com/ClickHouse/ClickHouse/pull/83435) ([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 -* `MergeParts` エントリの part_log プロファイルイベントに、`UserTimeMicroseconds`、`SystemTimeMicroseconds`、`RealTimeMicroseconds` などのプロセスリソースメトリクスを追加しました。 [#83460](https://github.com/ClickHouse/ClickHouse/pull/83460) ([Vladimir Cherkasov](https://github.com/vdimir))。 -* Keeper で `create_if_not_exists`、`check_not_exists`、`remove_recursive` の各機能フラグをデフォルトで有効化し、新しい種類のリクエストを利用可能にしました。 [#83488](https://github.com/ClickHouse/ClickHouse/pull/83488) ([Antonio Andelic](https://github.com/antonio2368)). -* サーバー停止時には、テーブルを停止する前に S3(Azure など)Queue ストリーミングを停止するようにしました。 [#83530](https://github.com/ClickHouse/ClickHouse/pull/83530) ([Kseniia Sumarokova](https://github.com/kssenii)). -* `JSON` 入力フォーマットで `Date`/`Date32` 型を整数として扱えるようにしました。 [#83597](https://github.com/ClickHouse/ClickHouse/pull/83597) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). -* 特定の状況におけるプロジェクションのロードおよび追加に関する例外メッセージを、より読みやすくしました。 [#83728](https://github.com/ClickHouse/ClickHouse/pull/83728) ([Robert Schulze](https://github.com/rschu1ze)). -* `clickhouse-server` のバイナリのチェックサムによる整合性チェックをスキップするための設定オプションを導入しました。[#83637](https://github.com/ClickHouse/ClickHouse/issues/83637) を解決しました。[#83749](https://github.com/ClickHouse/ClickHouse/pull/83749)([Rafael Roquetto](https://github.com/rafaelroquetto))。 - - - - - -#### バグ修正(公式安定版リリースにおけるユーザー可視の不具合) - -* `clickhouse-benchmark` の `--reconnect` オプションの誤ったデフォルト値を修正しました。これは [#79465](https://github.com/ClickHouse/ClickHouse/issues/79465) で誤って変更されていました。[#82677](https://github.com/ClickHouse/ClickHouse/pull/82677)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* `CREATE DICTIONARY` のフォーマットの不整合を修正しました。 [#82105](https://github.com/ClickHouse/ClickHouse/issues/82105) をクローズしました。 [#82829](https://github.com/ClickHouse/ClickHouse/pull/82829)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* `materialize` 関数を含む TTL の一貫性のない書式を修正します。[#82828](https://github.com/ClickHouse/ClickHouse/issues/82828) をクローズ。 [#82831](https://github.com/ClickHouse/ClickHouse/pull/82831)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* `INTO OUTFILE` などの出力オプションを含むサブクエリ内で、`EXPLAIN AST` のフォーマットに一貫性がない問題を修正しました。 [#82826](https://github.com/ClickHouse/ClickHouse/issues/82826) をクローズしました。 [#82840](https://github.com/ClickHouse/ClickHouse/pull/82840)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* エイリアスが許可されていないコンテキストにおいて、エイリアス付きの括弧で囲まれた式の書式の不整合を修正。[#82836](https://github.com/ClickHouse/ClickHouse/issues/82836) をクローズ。[#82837](https://github.com/ClickHouse/ClickHouse/issues/82837) をクローズ。[#82867](https://github.com/ClickHouse/ClickHouse/pull/82867)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* IPv4 と集約関数の状態を乗算する際に、適切なエラーコードを返すようにしました。[#82817](https://github.com/ClickHouse/ClickHouse/issues/82817) をクローズしました。[#82818](https://github.com/ClickHouse/ClickHouse/pull/82818)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* ファイルシステムキャッシュにおける論理エラー「Having zero bytes but range is not finished」を修正しました。 [#81868](https://github.com/ClickHouse/ClickHouse/pull/81868) ([Kseniia Sumarokova](https://github.com/kssenii)). -* TTL によって行が削除された際に、それに依存している `minmax_count_projection` などのアルゴリズムの正しさを保証するため、min-max インデックスを再計算するようにしました。これにより [#77091](https://github.com/ClickHouse/ClickHouse/issues/77091) が解決されます。[#77166](https://github.com/ClickHouse/ClickHouse/pull/77166)([Amos Bird](https://github.com/amosbird))。 -* `ORDER BY ... LIMIT BY ... LIMIT N` を組み合わせたクエリで、ORDER BY が PartialSorting として実行される場合、カウンタ `rows_before_limit_at_least` は、これまでのソート変換で消費された行数ではなく、LIMIT 句によって消費された行数を反映するようになりました。 [#78999](https://github.com/ClickHouse/ClickHouse/pull/78999) ([Eduard Karacharov](https://github.com/korowa))。 -* 正規表現にオルタネーション(alternation)が含まれ、先頭の候補がリテラルでない場合に、token/ngram インデックスを用いたフィルタリングで granule を過剰にスキップしてしまう問題を修正。 [#79373](https://github.com/ClickHouse/ClickHouse/pull/79373) ([Eduard Karacharov](https://github.com/korowa)). -* `<=>` 演算子と Join ストレージにおける論理エラーを修正し、クエリが適切なエラーコードを返すようになりました。 [#80165](https://github.com/ClickHouse/ClickHouse/pull/80165) ([Vladimir Cherkasov](https://github.com/vdimir)). -* `remote` 関数ファミリーと併用した際に `loop` 関数で発生するクラッシュを修正します。`loop(remote(...))` において LIMIT 句が正しく適用されるようにします。 [#80299](https://github.com/ClickHouse/ClickHouse/pull/80299) ([Julia Kartseva](https://github.com/jkartseva)). -* Unix epoch(1970-01-01)より前および最大日付(2106-02-07 06:28:15)より後の日付を扱う際の `to_utc_timestamp` と `from_utc_timestamp` 関数の誤った動作を修正しました。これらの関数は、値をそれぞれ Unix epoch の開始時刻および最大日付に正しくクランプするようになりました。 [#80498](https://github.com/ClickHouse/ClickHouse/pull/80498) ([Surya Kant Ranjan](https://github.com/iit2009046))。 -* 並列レプリカで実行される一部のクエリでは、読み取り順序の最適化をイニシエータ側では適用できる一方で、リモートノードでは適用できない場合があります。これにより、並列レプリカのコーディネータ(イニシエータ上)とリモートノードで異なる読み取りモードが使用され、論理的なエラーにつながる可能性がありました。 [#80652](https://github.com/ClickHouse/ClickHouse/pull/80652) ([Igor Nikonov](https://github.com/devcrafter)). -* カラムの型が Nullable に変更された場合に、materialize プロジェクションで発生していた論理エラーを修正しました。 [#80741](https://github.com/ClickHouse/ClickHouse/pull/80741) ([Pavel Kruglov](https://github.com/Avogar)). -* TTL を更新する際に TTL GROUP BY で TTL の再計算が誤っていた問題を修正。 [#81222](https://github.com/ClickHouse/ClickHouse/pull/81222) ([Evgeniy Ulasik](https://github.com/H0uston)). -* Parquet のブルームフィルターが、`WHERE function(key) IN (...)` のような条件を、`WHERE key IN (...)` であるかのように誤って適用していた問題を修正しました。 [#81255](https://github.com/ClickHouse/ClickHouse/pull/81255) ([Michael Kolupaev](https://github.com/al13n321)). -* マージ中の例外発生時に `Aggregator` がクラッシュする可能性があった問題を修正しました。 [#81450](https://github.com/ClickHouse/ClickHouse/pull/81450) ([Nikita Taranov](https://github.com/nickitat)). -* 必要に応じてデータベース名およびテーブル名をバッククオートで囲むように、`InterpreterInsertQuery::extendQueryLogElemImpl` を修正しました(たとえば、名前に `-` のような特殊文字が含まれる場合など)。[#81528](https://github.com/ClickHouse/ClickHouse/pull/81528)([Ilia Shvyrialkin](https://github.com/Harzu))。 -* 左辺引数が null で、サブクエリの結果が非 Nullable 型の場合に、`transform_null_in=1` 設定時の `IN` 実行を修正。 [#81584](https://github.com/ClickHouse/ClickHouse/pull/81584) ([Pavel Kruglov](https://github.com/Avogar)). -* 既存テーブルからの読み取り時における default/materialize 式の実行で、実験的または疑わしい型を検証しないようにしました。 [#81618](https://github.com/ClickHouse/ClickHouse/pull/81618) ([Pavel Kruglov](https://github.com/Avogar))。 -* TTL 式で dict を使用している場合にマージ時に発生する「Context has expired」エラーを修正。[#81690](https://github.com/ClickHouse/ClickHouse/pull/81690)([Azat Khuzhin](https://github.com/azat))。 -* cast 関数の単調性を修正しました。 [#81722](https://github.com/ClickHouse/ClickHouse/pull/81722) ([zoomxi](https://github.com/zoomxi))。 -* スカラー相関サブクエリの処理中に必要な列が読み込まれない不具合を修正しました。[#81716](https://github.com/ClickHouse/ClickHouse/issues/81716) を解決。[#81805](https://github.com/ClickHouse/ClickHouse/pull/81805)([Dmitry Novik](https://github.com/novikd))。 -* 以前のバージョンでは、サーバーが `/js` へのリクエストに対して不要に多くのコンテンツを返していました。これにより、[#61890](https://github.com/ClickHouse/ClickHouse/issues/61890) がクローズされました。[#81895](https://github.com/ClickHouse/ClickHouse/pull/81895)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* これまで、`MongoDB` テーブルエンジンの定義では、`host:port` 引数にパスコンポーネントを含めることができましたが、このパスコンポーネントは黙って無視されていました。MongoDB 連携機能では、そのようなテーブルの読み込みを拒否していました。この修正により、*`MongoDB` エンジンが 5 つの引数を取る場合には、そのようなテーブルの読み込みを許可し、引数で指定されたデータベース名を使用しつつ、パスコンポーネントを無視します*。*注:* この修正は、新規に作成されたテーブルや `mongo` テーブル関数を用いたクエリ、辞書ソースおよび名前付きコレクションには適用されません。 [#81942](https://github.com/ClickHouse/ClickHouse/pull/81942) ([Vladimir Cherkasov](https://github.com/vdimir)). -* マージ処理中に例外が発生した場合に `Aggregator` がクラッシュする可能性があった問題を修正しました。 [#82022](https://github.com/ClickHouse/ClickHouse/pull/82022) ([Nikita Taranov](https://github.com/nickitat))。 -* クエリで定数エイリアス列のみが使用されている場合のフィルタ解析を修正。[#79448](https://github.com/ClickHouse/ClickHouse/issues/79448) を修正。[#82037](https://github.com/ClickHouse/ClickHouse/pull/82037)([Dmitry Novik](https://github.com/novikd))。 -* GROUP BY と SET の TTL で同じカラムを使用した場合に発生する LOGICAL_ERROR とそれに続くクラッシュの問題を修正。 [#82054](https://github.com/ClickHouse/ClickHouse/pull/82054) ([Pablo Marcos](https://github.com/pamarcos)). -* シークレットマスキング時の S3 テーブル関数の引数検証を修正し、発生しうる `LOGICAL_ERROR` を防止しました。[#80620](https://github.com/ClickHouse/ClickHouse/issues/80620) をクローズしました。[#82056](https://github.com/ClickHouse/ClickHouse/pull/82056) ([Vladimir Cherkasov](https://github.com/vdimir))。 -* Iceberg におけるデータレースを修正。 [#82088](https://github.com/ClickHouse/ClickHouse/pull/82088) ([Azat Khuzhin](https://github.com/azat)). -* `DatabaseReplicated::getClusterImpl` を修正。`hosts` の先頭要素(または先頭の複数要素)の `id == DROPPED_MARK` となっており、同じシャードに対する他の要素が存在しない場合、`shards` の先頭要素が空のベクタになって `std::out_of_range` が発生していた。[#82093](https://github.com/ClickHouse/ClickHouse/pull/82093)([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 -* `arraySimilarity` におけるコピーペーストの誤りを修正し、重みとしての `UInt32` および `Int32` 型の使用を禁止。テストとドキュメントを更新。[#82103](https://github.com/ClickHouse/ClickHouse/pull/82103)([Mikhail f. Shiryaev](https://github.com/Felixoid))。 -* `WHERE` 条件および `IndexSet` を含むクエリで `arrayJoin` を使用した際に発生する `Not found column` エラーを修正しました。 [#82113](https://github.com/ClickHouse/ClickHouse/pull/82113) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). -* Glue Catalog 連携のバグを修正しました。これにより、一部のサブカラムに decimal 型を含むネストしたデータ型のテーブル(例: `map`)を ClickHouse が読み取れるようになりました。[#81301](https://github.com/ClickHouse/ClickHouse/issues/81301) を修正。[#82114](https://github.com/ClickHouse/ClickHouse/pull/82114)([alesapin](https://github.com/alesapin))。 -* 25.5 で [https://github.com/ClickHouse/ClickHouse/pull/79051](https://github.com/ClickHouse/ClickHouse/pull/79051) によって導入された SummingMergeTree のパフォーマンス低下を修正しました。 [#82130](https://github.com/ClickHouse/ClickHouse/pull/82130)([Pavel Kruglov](https://github.com/Avogar))。 -* URI 経由で設定を渡す場合、最後の値が採用されます。 [#82137](https://github.com/ClickHouse/ClickHouse/pull/82137) ([Sema Checherinda](https://github.com/CheSema)). -* Iceberg における "Context has expired" エラーを修正。 [#82146](https://github.com/ClickHouse/ClickHouse/pull/82146) ([Azat Khuzhin](https://github.com/azat)). -* サーバーがメモリプレッシャー下にあるときにリモートクエリで起こり得るデッドロックを修正しました。 [#82160](https://github.com/ClickHouse/ClickHouse/pull/82160) ([Kirill](https://github.com/kirillgarbar))。 -* `numericIndexedVectorPointwiseAdd`、`numericIndexedVectorPointwiseSubtract`、`numericIndexedVectorPointwiseMultiply`、`numericIndexedVectorPointwiseDivide` 関数を大きな数値に対して適用した際に発生していたオーバーフローを修正しました。 [#82165](https://github.com/ClickHouse/ClickHouse/pull/82165) ([Raufs Dunamalijevs](https://github.com/rienath)). -* テーブル依存関係に起因する不具合を修正し、マテリアライズドビューが INSERT クエリを取りこぼさないようにしました。 [#82222](https://github.com/ClickHouse/ClickHouse/pull/82222) ([Nikolay Degterinsky](https://github.com/evillique)). -* サジェストスレッドとメインクライアントスレッド間で発生する可能性のあるデータレースを修正。 [#82233](https://github.com/ClickHouse/ClickHouse/pull/82233) ([Azat Khuzhin](https://github.com/azat))。 -* これにより、ClickHouse はスキーマ変更後でも Glue カタログから Iceberg テーブルを読み取れるようになりました。[#81272](https://github.com/ClickHouse/ClickHouse/issues/81272) を修正。[#82301](https://github.com/ClickHouse/ClickHouse/pull/82301)([alesapin](https://github.com/alesapin))。 -* 非同期メトリクス設定 `asynchronous_metrics_update_period_s` および `asynchronous_heavy_metrics_update_period_s` の検証ロジックを修正しました。 [#82310](https://github.com/ClickHouse/ClickHouse/pull/82310) ([Bharat Nallan](https://github.com/bharatnc)). -* クエリ内に複数の JOIN がある場合の matcher 解決時の論理エラーを修正し、[#81969](https://github.com/ClickHouse/ClickHouse/issues/81969) をクローズ。[#82421](https://github.com/ClickHouse/ClickHouse/pull/82421)([Vladimir Cherkasov](https://github.com/vdimir))。 -* 再読み込みできるよう、AWS ECS トークンに有効期限を追加。 [#82422](https://github.com/ClickHouse/ClickHouse/pull/82422) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* `CASE` 関数の `NULL` 引数に関するバグを修正しました。[#82436](https://github.com/ClickHouse/ClickHouse/pull/82436) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* クライアント側のデータレースを(グローバルコンテキストを使用しないことで)解消し、`session_timezone` の上書き動作を修正しました(以前は、`session_timezone` が `users.xml` やクライアントオプションで空でない値に設定され、クエリコンテキストでは空に設定されていた場合に、本来は誤りであるにもかかわらず `users.xml` の値が使用されていましたが、現在は常にクエリコンテキストがグローバルコンテキストより優先されます)。 [#82444](https://github.com/ClickHouse/ClickHouse/pull/82444) ([Azat Khuzhin](https://github.com/azat)). -* 外部テーブルエンジンにおいて、キャッシュされたバッファーの境界アライメントを無効化する設定が機能していなかった問題を修正しました。これは [https://github.com/ClickHouse/ClickHouse/pull/81868](https://github.com/ClickHouse/ClickHouse/pull/81868) で壊れていました。 [#82493](https://github.com/ClickHouse/ClickHouse/pull/82493)([Kseniia Sumarokova](https://github.com/kssenii))。 -* 型キャストされたキーを使ってキーバリューストレージを結合した場合に発生するクラッシュを修正。 [#82497](https://github.com/ClickHouse/ClickHouse/pull/82497) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). -* logs/query_log 内で名前付きコレクションの値が表示されなくなる問題を修正。[#82405](https://github.com/ClickHouse/ClickHouse/issues/82405) をクローズ。[#82510](https://github.com/ClickHouse/ClickHouse/pull/82510)([Kseniia Sumarokova](https://github.com/kssenii))。 -* `user_id` が空になる場合があるため、セッション終了時のロギングで発生する可能性があるクラッシュを修正しました。 [#82513](https://github.com/ClickHouse/ClickHouse/pull/82513) ([Bharat Nallan](https://github.com/bharatnc))。 -* Time の解析処理で msan の問題が発生する可能性があったケースを修正しました。これにより次の Issue が解決されます: [#82477](https://github.com/ClickHouse/ClickHouse/issues/82477)。[#82514](https://github.com/ClickHouse/ClickHouse/pull/82514)([Yarik Briukhovetskyi](https://github.com/yariks5s))。 -* サーバーの処理がハングしないよう、`threadpool_writer_pool_size` を 0 に設定できないようにしました。 [#82532](https://github.com/ClickHouse/ClickHouse/pull/82532) ([Bharat Nallan](https://github.com/bharatnc))。 -* 相関付けられた列を含む行ポリシー式の解析中に発生する `LOGICAL_ERROR` を修正。 [#82618](https://github.com/ClickHouse/ClickHouse/pull/82618) ([Dmitry Novik](https://github.com/novikd))。 -* `enable_shared_storage_snapshot_in_query = 1` のときに `mergeTreeProjection` テーブル関数での親メタデータの誤った使用を修正しました。これは [#82634](https://github.com/ClickHouse/ClickHouse/issues/82634) に対応するものです。[#82638](https://github.com/ClickHouse/ClickHouse/pull/82638)([Amos Bird](https://github.com/amosbird))。 -* 関数 `trim{Left,Right,Both}` が、型「FixedString(N)」の入力文字列をサポートするようになりました。たとえば、`SELECT trimBoth(toFixedString('abc', 3), 'ac')` が動作するようになりました。 [#82691](https://github.com/ClickHouse/ClickHouse/pull/82691) ([Robert Schulze](https://github.com/rschu1ze)). -* AzureBlobStorage において、ネイティブコピーのために認証方式を比較する処理で例外が発生した場合には、読み取りとコピー(非ネイティブコピー)にフォールバックするようコードを更新しました。 [#82693](https://github.com/ClickHouse/ClickHouse/pull/82693) ([Smita Kulkarni](https://github.com/SmitaRKulkarni)). -* 要素が空の場合の `groupArraySample` / `groupArrayLast` のデシリアライズ処理を修正しました(入力が空のときに、デシリアライズでバイナリデータの一部が読み飛ばされてしまう可能性があり、これによりデータ読み取り時の破損や、TCP プロトコルにおける UNKNOWN_PACKET_FROM_SERVER を引き起こす可能性がありました)。これは数値型および日時型には影響しません。 [#82763](https://github.com/ClickHouse/ClickHouse/pull/82763) ([Pedro Ferreira](https://github.com/PedroTadim)). -* 空の `Memory` テーブルのバックアップによりバックアップ復元が `BACKUP_ENTRY_NOT_FOUND` エラーで失敗していた問題を修正しました。 [#82791](https://github.com/ClickHouse/ClickHouse/pull/82791) ([Julia Kartseva](https://github.com/jkartseva)). +* 可読性を高めるため、括弧を複数の色で表示するようにしました。 [#82538](https://github.com/ClickHouse/ClickHouse/pull/82538) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* LIKE/REGEXP パターンを入力している際にメタ文字をハイライトするようにしました。これはすでに `clickhouse-format` および `clickhouse-client` の echo 出力では実装されていましたが、今回からコマンドプロンプトでも行われるようになりました。 [#82871](https://github.com/ClickHouse/ClickHouse/pull/82871) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* `clickhouse-format` におけるハイライトとクライアントの echo 出力におけるハイライトは、コマンドラインプロンプトでのハイライトと同様に動作します。 [#82874](https://github.com/ClickHouse/ClickHouse/pull/82874) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 現在、`plain_rewritable` ディスクをデータベースメタデータ用のディスクとして利用できるようになりました。データベースディスクとしてサポートするために、`plain_rewritable` に `moveFile` および `replaceFile` メソッドを実装しました。 [#79424](https://github.com/ClickHouse/ClickHouse/pull/79424) ([Tuan Pham Anh](https://github.com/tuanpach))。 +* `PostgreSQL`、`MySQL`、`DataLake` データベースのバックアップを許可しました。これらのデータベースのバックアップでは、データベース内のデータではなく定義のみが保存されます。 [#79982](https://github.com/ClickHouse/ClickHouse/pull/79982) ([Nikolay Degterinsky](https://github.com/evillique)). +* `allow_experimental_join_condition` の設定は、現在は常に許可されているため、非推奨としてマークされました。 [#80566](https://github.com/ClickHouse/ClickHouse/pull/80566) ([Vladimir Cherkasov](https://github.com/vdimir))。 +* ClickHouse の非同期メトリクスにプレッシャーメトリクスを追加。 [#80779](https://github.com/ClickHouse/ClickHouse/pull/80779) ([Xander Garbett](https://github.com/Garbett1)). +* マークキャッシュからのエビクションを追跡するためのメトリクス `MarkCacheEvictedBytes`、`MarkCacheEvictedMarks`、`MarkCacheEvictedFiles` を追加しました(issue [#60989](https://github.com/ClickHouse/ClickHouse/issues/60989))。[#80799](https://github.com/ClickHouse/ClickHouse/pull/80799)([Shivji Kumar Jha](https://github.com/shiv4289))。 +* Parquet の enum を、[仕様](https://github.com/apache/parquet-format/blob/master/LogicalTypes.md#enum) で規定されているとおりバイト配列として書き込めるようにしました。 [#81090](https://github.com/ClickHouse/ClickHouse/pull/81090) ([Arthur Passos](https://github.com/arthurpassos)). +* `DeltaLake` テーブルエンジンの改善: delta-kernel-rs には `ExpressionVisitor` API があり、この PR で実装されてパーティション列の式変換に適用されています(これは、従来コードで使用していた、delta-kernel-rs 側で非推奨となっていた古い方式を置き換えるものです)。将来的には、この `ExpressionVisitor` により、統計情報に基づくプルーニングや、いくつかの Delta Lake 独自機能も実装できるようになります。さらに、この変更の目的は、`DeltaLakeCluster` テーブルエンジンでのパーティションプルーニングをサポートすることです(パースされた式の結果である ActionsDAG はシリアライズされ、データパスとともにイニシエータから送信されます。というのも、この種のプルーニングに必要な情報はデータファイル一覧のメタ情報としてのみ利用可能であり、この処理はイニシエータだけが実行しますが、その情報は各リーディングサーバ上のデータに適用される必要があるためです)。[#81136](https://github.com/ClickHouse/ClickHouse/pull/81136)([Kseniia Sumarokova](https://github.com/kssenii))。 +* 名前付きタプルのスーパータイプ導出時に、要素名を保持するようにしました。 [#81345](https://github.com/ClickHouse/ClickHouse/pull/81345) ([lgbo](https://github.com/lgbo-ustc)). +* StorageKafka2 で以前にコミットされたオフセットに依存しないように、消費済みメッセージを手動でカウントするようにしました。 [#81662](https://github.com/ClickHouse/ClickHouse/pull/81662) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). +* `clickhouse-keeper-utils` を追加しました。ClickHouse Keeper のデータを管理および分析するための新しいコマンドラインツールです。このツールでは、スナップショットやチェンジログからの状態のダンプ、チェンジログファイルの分析、特定のログ範囲の抽出が可能です。 [#81677](https://github.com/ClickHouse/ClickHouse/pull/81677) ([Antonio Andelic](https://github.com/antonio2368))。 +* 合計およびユーザーごとのネットワークスロットルは決してリセットされないようになり、`max_network_bandwidth_for_all_users` と `max_network_bandwidth_for_all_users` の制限値を超過しないことが保証されます。 [#81729](https://github.com/ClickHouse/ClickHouse/pull/81729) ([Sergei Trifonov](https://github.com/serxa))。 +* GeoParquet 形式での出力をサポートしました。 [#81784](https://github.com/ClickHouse/ClickHouse/pull/81784) ([Konstantin Vedernikov](https://github.com/scanhex12)). +* 未完了のデータミューテーションの影響を現在受けているカラムを `RENAME COLUMN` でリネームしようとする `ALTER` ミューテーションは開始されないようになりました。 [#81823](https://github.com/ClickHouse/ClickHouse/pull/81823) ([Mikhail Artemenko](https://github.com/Michicosun)). +* `Connection` ヘッダーは、接続を維持すべきかが判明した時点で、ほかのヘッダー送信の最後に送信されるようになりました。 [#81951](https://github.com/ClickHouse/ClickHouse/pull/81951) ([Sema Checherinda](https://github.com/CheSema)). +* `listen_backlog`(デフォルト値 4096)に基づいて、TCP サーバーのキュー(デフォルト値 64)を調整しました。 [#82045](https://github.com/ClickHouse/ClickHouse/pull/82045) ([Azat Khuzhin](https://github.com/azat)). +* サーバーを再起動することなく `max_local_read_bandwidth_for_server` と `max_local_write_bandwidth_for_server` を動的にリロードできるようにしました。 [#82083](https://github.com/ClickHouse/ClickHouse/pull/82083) ([Kai Zhu](https://github.com/nauu)). +* `TRUNCATE TABLE system.warnings` を使用して `system.warnings` テーブルからすべての警告を削除できるようにするサポートを追加しました。 [#82087](https://github.com/ClickHouse/ClickHouse/pull/82087) ([Vladimir Cherkasov](https://github.com/vdimir))。 +* データレイククラスタ関数のパーティションプルーニングを修正。 [#82131](https://github.com/ClickHouse/ClickHouse/pull/82131) ([Kseniia Sumarokova](https://github.com/kssenii)). +* DeltaLakeCluster テーブル関数でパーティション分割されたデータを読み取る処理を修正しました。この PR ではクラスター関数のプロトコルバージョンを引き上げ、イニシエーターからレプリカへ追加情報を送信できるようにしています。この追加情報には、パーティション列を解析するために必要な delta-kernel の変換式(および将来的には生成列などの他の情報)が含まれます。 [#82132](https://github.com/ClickHouse/ClickHouse/pull/82132) ([Kseniia Sumarokova](https://github.com/kssenii))。 +* `reinterpret` 関数は、固定サイズのデータ型 `T` を要素とする `Array(T)` への変換をサポートするようになりました(issue [#82621](https://github.com/ClickHouse/ClickHouse/issues/82621))。[#83399](https://github.com/ClickHouse/ClickHouse/pull/83399)([Shankar Iyer](https://github.com/shankar-iyer))。 +* Database Datalake が、よりわかりやすい例外をスローするようになりました。 [#81211](https://github.com/ClickHouse/ClickHouse/issues/81211) を修正しました。 [#82304](https://github.com/ClickHouse/ClickHouse/pull/82304) ([alesapin](https://github.com/alesapin))。 +* `HashJoin::needUsedFlagsForPerRightTableRow` が false を返すようにして、CROSS JOIN を改善しました。 [#82379](https://github.com/ClickHouse/ClickHouse/pull/82379) ([lgbo](https://github.com/lgbo-ustc)). +* Map型カラムを Array of Tuples として読み書きできるようにしました。 [#82408](https://github.com/ClickHouse/ClickHouse/pull/82408) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). +* `system.licenses` で [Rust](https://clickhouse.com/blog/rust) クレートのライセンスを一覧表示できるようにしました。 [#82440](https://github.com/ClickHouse/ClickHouse/pull/82440) ([Raúl Marín](https://github.com/Algunenano))。 +* `{uuid}` のようなマクロが、S3Queue テーブルエンジンの `keeper_path` 設定で使用できるようになりました。 [#82463](https://github.com/ClickHouse/ClickHouse/pull/82463) ([Nikolay Degterinsky](https://github.com/evillique)). +* Keeper の改良: changelog ファイルのディスク間での移動をバックグラウンドスレッドで行うようにしました。以前は、changelog を別のディスクに移動する際、移動が完了するまで Keeper 全体がブロックされていました。その結果、移動処理に長時間を要する場合(例: S3 ディスクへの移動)にはパフォーマンスが低下していました。[#82485](https://github.com/ClickHouse/ClickHouse/pull/82485) ([Antonio Andelic](https://github.com/antonio2368))。 +* Keeper の改良: 新しい設定 `keeper_server.cleanup_old_and_ignore_new_acl` を追加しました。有効化すると、すべてのノードで既存の ACL が消去され、新規リクエストに対する ACL は無視されます。ノードから ACL を完全に削除することが目的の場合は、新しいスナップショットが作成されるまでこの設定を有効のままにしておくことが重要です。 [#82496](https://github.com/ClickHouse/ClickHouse/pull/82496) ([Antonio Andelic](https://github.com/antonio2368)). +* S3Queue テーブルエンジンを使用するテーブルでのストリーミングを無効化する新しいサーバー設定 `s3queue_disable_streaming` を追加しました。この設定はサーバーの再起動なしに変更できます。 [#82515](https://github.com/ClickHouse/ClickHouse/pull/82515) ([Kseniia Sumarokova](https://github.com/kssenii))。 +* ファイルシステムキャッシュの動的リサイズ機能をリファクタリングし、デバッグや調査に役立つログをさらに追加しました。 [#82556](https://github.com/ClickHouse/ClickHouse/pull/82556) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 設定ファイルがない `clickhouse-server` も、デフォルト設定と同様に PostgreSQL ポート 9005 をリッスンします。 [#82633](https://github.com/ClickHouse/ClickHouse/pull/82633) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* `ReplicatedMergeTree::executeMetadataAlter` では、StorageID を取得し、DDLGuard を取得せずに `IDatabase::alterTable` を呼び出そうとします。その間に対象のテーブルを別のテーブルと入れ替えられてしまう可能性があるため、定義を取得する際に誤ったものを取得してしまうおそれがあります。これを防ぐために、`IDatabase::alterTable` を呼び出そうとするときに UUID が一致するかどうかを別途チェックするようにしました。 [#82666](https://github.com/ClickHouse/ClickHouse/pull/82666) ([Nikolay Degterinsky](https://github.com/evillique))。 +* 読み取り専用のリモートディスクでデータベースをアタッチする際には、テーブルの UUID を手動で DatabaseCatalog に追加する必要があります。 [#82670](https://github.com/ClickHouse/ClickHouse/pull/82670) ([Tuan Pham Anh](https://github.com/tuanpach)). +* `NumericIndexedVector` で `nan` および `inf` をユーザーが使用できないようにしました。[#82239](https://github.com/ClickHouse/ClickHouse/issues/82239) と、その他いくつかの問題を修正しました。[#82681](https://github.com/ClickHouse/ClickHouse/pull/82681)([Raufs Dunamalijevs](https://github.com/rienath))。 +* `X-ClickHouse-Progress` ヘッダーおよび `X-ClickHouse-Summary` ヘッダーのフォーマットで、ゼロ値を省略しないようにしました。 [#82727](https://github.com/ClickHouse/ClickHouse/pull/82727) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 +* Keeper の改良: world:anyone ACL に対する特定権限のサポートを追加。 [#82755](https://github.com/ClickHouse/ClickHouse/pull/82755) ([Antonio Andelic](https://github.com/antonio2368)). +* SummingMergeTree で合計対象として明示的に指定された列を含む `RENAME COLUMN` や `DROP COLUMN` を許可しないようにしました。[#81836](https://github.com/ClickHouse/ClickHouse/issues/81836) をクローズします。 [#82821](https://github.com/ClickHouse/ClickHouse/pull/82821) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* `Decimal` から `Float32` への変換の精度を向上。`Decimal` から `BFloat16` への変換を実装。[#82660](https://github.com/ClickHouse/ClickHouse/issues/82660) をクローズ。[#82823](https://github.com/ClickHouse/ClickHouse/pull/82823)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* Web UI のスクロールバーの見た目がわずかに改善されました。 [#82869](https://github.com/ClickHouse/ClickHouse/pull/82869) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* 埋め込み設定付きの `clickhouse-server` は、HTTP OPTIONS 応答を返すことで Web UI を利用可能にします。 [#82870](https://github.com/ClickHouse/ClickHouse/pull/82870) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* 設定ファイル内のパスに対して追加の Keeper ACL を指定できるようにしました。特定のパスに追加の ACL を付与したい場合は、設定ファイルの `zookeeper.path_acls` 配下で定義してください。 [#82898](https://github.com/ClickHouse/ClickHouse/pull/82898) ([Antonio Andelic](https://github.com/antonio2368)). +* 今後は、mutation スナップショットが可視部分のスナップショットから構築されるようになります。また、スナップショットで使用される mutation カウンタも、含まれている mutation に基づいて再計算されます。 [#82945](https://github.com/ClickHouse/ClickHouse/pull/82945) ([Mikhail Artemenko](https://github.com/Michicosun)). +* ソフトメモリ制限により Keeper が書き込みを拒否した際に ProfileEvent を追加。 [#82963](https://github.com/ClickHouse/ClickHouse/pull/82963) ([Xander Garbett](https://github.com/Garbett1)). +* `system.s3queue_log` に `commit_time`、`commit_id` の列を追加しました。 [#83016](https://github.com/ClickHouse/ClickHouse/pull/83016) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 場合によっては、メトリクスに複数のディメンションが必要になることがあります。たとえば、単一のカウンタを持つのではなく、エラーコードごとに失敗したマージやミューテーションの回数をカウントしたい場合です。この目的のために、まさにそれを実現する `system.dimensional_metrics` を導入し、最初の次元付きメトリクスとして `failed_merges` を追加しました。 [#83030](https://github.com/ClickHouse/ClickHouse/pull/83030) ([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 +* clickhouse client における不明な設定項目に関する警告を集約し、要約としてログに記録するようにしました。 [#83042](https://github.com/ClickHouse/ClickHouse/pull/83042) ([Bharat Nallan](https://github.com/bharatnc)). +* ClickHouse クライアントが接続エラー発生時にローカルポートを報告するようになりました。 [#83050](https://github.com/ClickHouse/ClickHouse/pull/83050) ([Jianfei Hu](https://github.com/incfly)). +* `AsynchronousMetrics` におけるエラー処理を若干改善しました。`/sys/block` ディレクトリが存在するもののアクセスできない場合、サーバーはブロックデバイスの監視を行わずに起動します。[#79229](https://github.com/ClickHouse/ClickHouse/issues/79229) をクローズ。[#83115](https://github.com/ClickHouse/ClickHouse/pull/83115)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* SystemLogs を通常テーブルの後(従来の「通常テーブルの前」ではなく、system テーブルの前)にシャットダウンするように変更。 [#83134](https://github.com/ClickHouse/ClickHouse/pull/83134) ([Kseniia Sumarokova](https://github.com/kssenii)). +* `S3Queue` のシャットダウン処理に関するログを追加しました。 [#83163](https://github.com/ClickHouse/ClickHouse/pull/83163) ([Kseniia Sumarokova](https://github.com/kssenii))。 +* `Time` と `Time64` を `MM:SS`、`M:SS`、`SS`、`S` の形式でパースできるようになりました。 [#83299](https://github.com/ClickHouse/ClickHouse/pull/83299) ([Yarik Briukhovetskyi](https://github.com/yariks5s))。 +* `distributed_ddl_output_mode='*_only_active'` の場合、`max_replication_lag_to_enqueue` を超えるレプリケーションラグを持つ新規または復旧済みレプリカを待機しないようにしました。これにより、新しいレプリカが初期化やリカバリを完了してアクティブになったものの、初期化中に大量のレプリケーションログを蓄積していた場合に発生しうる `DDL task is not finished on some hosts` エラーを回避しやすくなります。あわせて、レプリケーションログが `max_replication_lag_to_enqueue` 未満になるまで待機する `SYSTEM SYNC DATABASE REPLICA STRICT` クエリを実装しました。 [#83302](https://github.com/ClickHouse/ClickHouse/pull/83302) ([Alexander Tokmakov](https://github.com/tavplubix))。 +* 例外メッセージに含める式アクションの説明を、過度に長く出力しないようにしました。Closes [#83164](https://github.com/ClickHouse/ClickHouse/issues/83164). [#83350](https://github.com/ClickHouse/ClickHouse/pull/83350) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* パーツのプレフィックスおよびサフィックスを解析し、非定数カラムのカバレッジもチェックできるようにしました。 [#83377](https://github.com/ClickHouse/ClickHouse/pull/83377) ([Mikhail Artemenko](https://github.com/Michicosun)). +* 名前付きコレクション使用時の ODBC および JDBC のパラメータ名を統一しました。 [#83410](https://github.com/ClickHouse/ClickHouse/pull/83410) ([Andrey Zvonov](https://github.com/zvonand)). +* ストレージのシャットダウン中は、`getStatus` は `ErrorCodes::ABORTED` 例外をスローします。以前は、これにより SELECT クエリが失敗していました。現在では、`ErrorCodes::ABORTED` 例外を捕捉し、意図的に無視するようにしています。 [#83435](https://github.com/ClickHouse/ClickHouse/pull/83435) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). +* `MergeParts` エントリ向けの part_log プロファイルイベントに、`UserTimeMicroseconds`、`SystemTimeMicroseconds`、`RealTimeMicroseconds` などのプロセスリソースのメトリクスを追加しました。[#83460](https://github.com/ClickHouse/ClickHouse/pull/83460)([Vladimir Cherkasov](https://github.com/vdimir))。 +* `create_if_not_exists`、`check_not_exists`、`remove_recursive` のフィーチャーフラグを Keeper でデフォルトで有効化し、新しい種類のリクエストを可能にします。 [#83488](https://github.com/ClickHouse/ClickHouse/pull/83488) ([Antonio Andelic](https://github.com/antonio2368))。 +* サーバー停止時には、テーブルをシャットダウンする前に S3(Azure など)Queue のストリーミングを停止するようにしました。 [#83530](https://github.com/ClickHouse/ClickHouse/pull/83530) ([Kseniia Sumarokova](https://github.com/kssenii)). +* `JSON` 入力フォーマットで `Date` / `Date32` を整数として使用可能にしました。 [#83597](https://github.com/ClickHouse/ClickHouse/pull/83597) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). +* 特定の状況において、プロジェクションの読み込みおよび追加時の例外メッセージを、より読みやすくしました。 [#83728](https://github.com/ClickHouse/ClickHouse/pull/83728) ([Robert Schulze](https://github.com/rschu1ze)). +* `clickhouse-server` のバイナリに対するチェックサムによる整合性検査をスキップできる設定オプションを導入しました。 [#83637](https://github.com/ClickHouse/ClickHouse/issues/83637) を解決しました。 [#83749](https://github.com/ClickHouse/ClickHouse/pull/83749)([Rafael Roquetto](https://github.com/rafaelroquetto))。 + +#### バグ修正(公式の安定版リリースにおける、ユーザーから見て明らかな誤動作) + +* `clickhouse-benchmark` の `--reconnect` オプションに対して誤って設定されていたデフォルト値を修正しました。このデフォルト値は [#79465](https://github.com/ClickHouse/ClickHouse/issues/79465) で誤って変更されていました。[#82677](https://github.com/ClickHouse/ClickHouse/pull/82677)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* `CREATE DICTIONARY` のフォーマットの不整合を修正しました。[#82105](https://github.com/ClickHouse/ClickHouse/issues/82105) をクローズしました。 [#82829](https://github.com/ClickHouse/ClickHouse/pull/82829)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* `materialize` 関数を含む TTL のフォーマットの不整合を修正。[#82828](https://github.com/ClickHouse/ClickHouse/issues/82828) をクローズ。[#82831](https://github.com/ClickHouse/ClickHouse/pull/82831)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* INTO OUTFILE などの出力オプションを含むサブクエリに対する `EXPLAIN AST` のフォーマットが一貫していなかった問題を修正しました。[#82826](https://github.com/ClickHouse/ClickHouse/issues/82826) をクローズします。[#82840](https://github.com/ClickHouse/ClickHouse/pull/82840)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* エイリアスが許可されていないコンテキストにおける、エイリアス付き括弧表現のフォーマットの不整合を修正しました。Closes [#82836](https://github.com/ClickHouse/ClickHouse/issues/82836)。Closes [#82837](https://github.com/ClickHouse/ClickHouse/issues/82837)。[#82867](https://github.com/ClickHouse/ClickHouse/pull/82867) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* IPv4 と集約関数の状態を乗算しようとした際に、適切なエラーコードを返すようにしました。 [#82817](https://github.com/ClickHouse/ClickHouse/issues/82817) をクローズ。 [#82818](https://github.com/ClickHouse/ClickHouse/pull/82818)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* ファイルシステムキャッシュ内の論理エラー「Having zero bytes but range is not finished」を修正しました。 [#81868](https://github.com/ClickHouse/ClickHouse/pull/81868) ([Kseniia Sumarokova](https://github.com/kssenii)). +* TTL によって行が削除された際に、それに依存する `minmax_count_projection` などのアルゴリズムの正しさを保証するため、min-max インデックスを再計算します。これにより [#77091](https://github.com/ClickHouse/ClickHouse/issues/77091) が解決されます。[#77166](https://github.com/ClickHouse/ClickHouse/pull/77166)([Amos Bird](https://github.com/amosbird))。 +* `ORDER BY ... LIMIT BY ... LIMIT N` を組み合わせたクエリにおいて、ORDER BY が PartialSorting として実行される場合、カウンタ `rows_before_limit_at_least` は、これまでのソート変換で消費された行数ではなく、LIMIT 句で消費された行数を表すようになりました。 [#78999](https://github.com/ClickHouse/ClickHouse/pull/78999) ([Eduard Karacharov](https://github.com/korowa))。 +* 先頭の代替パターンがリテラルでないオルタネーションを含む `regexp` を用いて token/ngram インデックスに対してフィルタリングを行う場合に、グラニュールを過剰にスキップしてしまう問題を修正しました。 [#79373](https://github.com/ClickHouse/ClickHouse/pull/79373) ([Eduard Karacharov](https://github.com/korowa)). +* `<=>` 演算子と Join ストレージの論理エラーを修正し、クエリが適切なエラーコードを返すようにしました。 [#80165](https://github.com/ClickHouse/ClickHouse/pull/80165) ([Vladimir Cherkasov](https://github.com/vdimir)). +* `remote` 関数ファミリーと併用した場合に `loop` 関数でクラッシュが発生する問題を修正しました。`loop(remote(...))` で LIMIT 句が順守されるようにしました。 [#80299](https://github.com/ClickHouse/ClickHouse/pull/80299) ([Julia Kartseva](https://github.com/jkartseva)). +* Unix epoch(1970-01-01)以前および最大日時(2106-02-07 06:28:15)以降の日付を扱う際の `to_utc_timestamp` および `from_utc_timestamp` 関数の誤った動作を修正しました。これらの関数は、値をそれぞれ Unix エポックの開始時刻および最大日時に正しくクランプするようになりました。 [#80498](https://github.com/ClickHouse/ClickHouse/pull/80498) ([Surya Kant Ranjan](https://github.com/iit2009046)). +* 一部のクエリでは、並列レプリカで実行した際に、読み取り順序の最適化がイニシエーター側では適用される一方で、リモートノード側では適用できない場合がありました。その結果、並列レプリカのコーディネーター(イニシエーター上)とリモートノードで異なる読み取りモードが使用され、論理的なエラーが発生していました。 [#80652](https://github.com/ClickHouse/ClickHouse/pull/80652) ([Igor Nikonov](https://github.com/devcrafter)). +* カラム型が Nullable 型に変更された場合に、materialize projection の実行中に発生する論理エラーを修正。 [#80741](https://github.com/ClickHouse/ClickHouse/pull/80741) ([Pavel Kruglov](https://github.com/Avogar)). +* TTL を更新する際に TTL GROUP BY で TTL が誤って再計算される不具合を修正。 [#81222](https://github.com/ClickHouse/ClickHouse/pull/81222) ([Evgeniy Ulasik](https://github.com/H0uston)). +* Parquet のブルームフィルターが、`WHERE function(key) IN (...)` のような条件を `WHERE key IN (...)` であるかのように誤って適用していた問題を修正しました。 [#81255](https://github.com/ClickHouse/ClickHouse/pull/81255) ([Michael Kolupaev](https://github.com/al13n321)). +* マージ処理中の例外発生時に `Aggregator` がクラッシュする可能性のあった不具合を修正しました。 [#81450](https://github.com/ClickHouse/ClickHouse/pull/81450) ([Nikita Taranov](https://github.com/nickitat)). +* `InterpreterInsertQuery::extendQueryLogElemImpl` を修正し、必要に応じて(たとえば名前に `-` のような特殊文字が含まれている場合)データベース名およびテーブル名をバッククォートで囲むようにしました。 [#81528](https://github.com/ClickHouse/ClickHouse/pull/81528) ([Ilia Shvyrialkin](https://github.com/Harzu)). +* 左側の引数が null で、サブクエリ結果が non-nullable の場合における、`transform_null_in=1` 設定時の `IN` 実行を修正。 [#81584](https://github.com/ClickHouse/ClickHouse/pull/81584) ([Pavel Kruglov](https://github.com/Avogar))。 +* 既存テーブルから読み取る際の default/materialize 式の実行時に、実験的な型や疑わしい型を検証しないようにしました。 [#81618](https://github.com/ClickHouse/ClickHouse/pull/81618) ([Pavel Kruglov](https://github.com/Avogar)). +* TTL 式で dict が使用されている場合に、マージ中に発生する "Context has expired" エラーを修正。 [#81690](https://github.com/ClickHouse/ClickHouse/pull/81690) ([Azat Khuzhin](https://github.com/azat)). +* cast 関数の単調性を修正。 [#81722](https://github.com/ClickHouse/ClickHouse/pull/81722) ([zoomxi](https://github.com/zoomxi))。 +* スカラー相関サブクエリの処理中に必要な列が読み込まれない問題を修正しました。 [#81716](https://github.com/ClickHouse/ClickHouse/issues/81716) を解決します。 [#81805](https://github.com/ClickHouse/ClickHouse/pull/81805)([Dmitry Novik](https://github.com/novikd))。 +* 以前のバージョンでは、`/js` へのリクエストに対してサーバーが不要に多くのコンテンツを返していました。この変更により [#61890](https://github.com/ClickHouse/ClickHouse/issues/61890) が解決されました。[#81895](https://github.com/ClickHouse/ClickHouse/pull/81895)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 以前は、`MongoDB` テーブルエンジンの定義で `host:port` 引数にパスコンポーネントを含めることができましたが、これは暗黙的に無視されていました。`MongoDB` 連携機能は、そのようなテーブルのロードを拒否していました。この修正により、*`MongoDB` エンジンが 5 つの引数を取る場合には、そのようなテーブルもロード可能とし、引数で指定されたデータベース名を用いつつパスコンポーネントを無視します*。*注:* この修正は、新しく作成されたテーブルや `mongo` テーブル関数を使ったクエリ、ならびにディクショナリのソースおよび named collection には適用されません。[#81942](https://github.com/ClickHouse/ClickHouse/pull/81942)([Vladimir Cherkasov](https://github.com/vdimir))。 +* マージ中に例外が発生した場合に `Aggregator` がクラッシュする可能性のあった問題を修正しました。 [#82022](https://github.com/ClickHouse/ClickHouse/pull/82022) ([Nikita Taranov](https://github.com/nickitat)). +* クエリで定数のエイリアス列のみが使用されている場合のフィルタ解析を修正します。[#79448](https://github.com/ClickHouse/ClickHouse/issues/79448) を解決。[#82037](https://github.com/ClickHouse/ClickHouse/pull/82037) ([Dmitry Novik](https://github.com/novikd))。 +* GROUP BY および SET の TTL で同じカラムを使用した場合に発生する LOGICAL_ERROR とそれに続くクラッシュを修正しました。 [#82054](https://github.com/ClickHouse/ClickHouse/pull/82054) ([Pablo Marcos](https://github.com/pamarcos)). +* シークレットマスキング処理における S3 テーブル関数の引数検証を修正し、発生しうる `LOGICAL_ERROR` を防止しました。[#80620](https://github.com/ClickHouse/ClickHouse/issues/80620) をクローズしました。[#82056](https://github.com/ClickHouse/ClickHouse/pull/82056)([Vladimir Cherkasov](https://github.com/vdimir))。 +* Iceberg におけるデータレースを修正しました。 [#82088](https://github.com/ClickHouse/ClickHouse/pull/82088) ([Azat Khuzhin](https://github.com/azat)). +* `DatabaseReplicated::getClusterImpl` を修正しました。`hosts` の先頭の要素(または先頭の複数要素)が `id == DROPPED_MARK` であり、かつ同じシャードに属する他の要素が存在しない場合、`shards` の先頭要素が空のベクタとなり、`std::out_of_range` が発生していました。 [#82093](https://github.com/ClickHouse/ClickHouse/pull/82093)([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 +* `arraySimilarity` におけるコピーペーストの誤りを修正し、`UInt32` および `Int32` を重みとして使用できないようにしました。あわせてテストとドキュメントを更新しました。 [#82103](https://github.com/ClickHouse/ClickHouse/pull/82103) ([Mikhail f. Shiryaev](https://github.com/Felixoid))。 +* `WHERE` 句と `IndexSet` の条件下で `arrayJoin` を含むクエリで発生する `Not found column` エラーを修正。 [#82113](https://github.com/ClickHouse/ClickHouse/pull/82113) ([Nikolai Kochetov](https://github.com/KochetovNicolai))。 +* Glue Catalog 連携のバグを修正しました。これにより、一部のサブカラムに decimal 型を含むネストしたデータ型を持つテーブルを ClickHouse で読み取れるようになりました。例: `map`。[#81301](https://github.com/ClickHouse/ClickHouse/issues/81301) を修正。[#82114](https://github.com/ClickHouse/ClickHouse/pull/82114)([alesapin](https://github.com/alesapin))。 +* [https://github.com/ClickHouse/ClickHouse/pull/79051](https://github.com/ClickHouse/ClickHouse/pull/79051) で 25.5 に導入された SummingMergeTree におけるパフォーマンス低下を修正しました。 [#82130](https://github.com/ClickHouse/ClickHouse/pull/82130) ([Pavel Kruglov](https://github.com/Avogar)). +* URI 経由で設定を渡す場合、最後の値が優先されます。 [#82137](https://github.com/ClickHouse/ClickHouse/pull/82137) ([Sema Checherinda](https://github.com/CheSema)). +* Iceberg における「Context has expired」エラーを修正しました。[#82146](https://github.com/ClickHouse/ClickHouse/pull/82146) ([Azat Khuzhin](https://github.com/azat)). +* サーバーがメモリ逼迫時のリモートクエリで発生しうるデッドロックを修正しました。 [#82160](https://github.com/ClickHouse/ClickHouse/pull/82160) ([Kirill](https://github.com/kirillgarbar)). +* 大きな数値に対して適用した際に発生していた `numericIndexedVectorPointwiseAdd`、`numericIndexedVectorPointwiseSubtract`、`numericIndexedVectorPointwiseMultiply`、`numericIndexedVectorPointwiseDivide` 関数のオーバーフローを修正しました。 [#82165](https://github.com/ClickHouse/ClickHouse/pull/82165) ([Raufs Dunamalijevs](https://github.com/rienath))。 +* テーブルの依存関係が原因でマテリアライズドビューが INSERT クエリを取り漏らす不具合を修正。 [#82222](https://github.com/ClickHouse/ClickHouse/pull/82222) ([Nikolay Degterinsky](https://github.com/evillique)). +* サジェスションスレッドとメインのクライアントスレッド間で発生する可能性のあるデータ競合を修正。 [#82233](https://github.com/ClickHouse/ClickHouse/pull/82233) ([Azat Khuzhin](https://github.com/azat)). +* これにより、ClickHouse はスキーマ進化後でも Glue カタログから Iceberg テーブルを読み取れるようになりました。[#81272](https://github.com/ClickHouse/ClickHouse/issues/81272) を修正しました。[#82301](https://github.com/ClickHouse/ClickHouse/pull/82301)([alesapin](https://github.com/alesapin))。 +* 非同期メトリクス設定 `asynchronous_metrics_update_period_s` および `asynchronous_heavy_metrics_update_period_s` の検証を修正しました。 [#82310](https://github.com/ClickHouse/ClickHouse/pull/82310) ([Bharat Nallan](https://github.com/bharatnc))。 +* 複数の JOIN を含むクエリにおけるマッチャー解決時の論理エラーを修正し、[#81969](https://github.com/ClickHouse/ClickHouse/issues/81969) をクローズしました。 [#82421](https://github.com/ClickHouse/ClickHouse/pull/82421) ([Vladimir Cherkasov](https://github.com/vdimir))。 +* AWS ECS トークンに有効期限を追加し、再読み込み可能にしました。 [#82422](https://github.com/ClickHouse/ClickHouse/pull/82422) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* `CASE` 関数での `NULL` 引数に関するバグを修正しました。[#82436](https://github.com/ClickHouse/ClickHouse/pull/82436)([Yarik Briukhovetskyi](https://github.com/yariks5s))。 +* クライアントのデータレースを(グローバルコンテキストを使用しないようにすることで)修正し、`session_timezone` のオーバーライド動作を修正しました(以前は、`session_timezone` がたとえば `users.xml` やクライアントオプションで空でない値に設定され、クエリコンテキストでは空に設定されていた場合、本来は誤りであるにもかかわらず `users.xml` の値が使用されていました。現在は、クエリコンテキストが常にグローバルコンテキストより優先されます)。 [#82444](https://github.com/ClickHouse/ClickHouse/pull/82444) ([Azat Khuzhin](https://github.com/azat)). +* 外部テーブルエンジンにおけるキャッシュ済みバッファの境界アライメントを無効化する処理を修正しました。この処理は [https://github.com/ClickHouse/ClickHouse/pull/81868](https://github.com/ClickHouse/ClickHouse/pull/81868) で壊れていました。 [#82493](https://github.com/ClickHouse/ClickHouse/pull/82493) ([Kseniia Sumarokova](https://github.com/kssenii)). +* キーバリューストレージが型キャストされたキーで `JOIN` された場合に発生するクラッシュを修正。 [#82497](https://github.com/ClickHouse/ClickHouse/pull/82497) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +* ログおよび `query_log` 内で named collection の値を非表示にする処理を修正しました。[#82405](https://github.com/ClickHouse/ClickHouse/issues/82405) をクローズしました。[#82510](https://github.com/ClickHouse/ClickHouse/pull/82510)([Kseniia Sumarokova](https://github.com/kssenii))。 +* セッション終了時に `user_id` が空になる場合があり、その際にログ出力時にクラッシュが発生する可能性がある問題を修正しました。 [#82513](https://github.com/ClickHouse/ClickHouse/pull/82513) ([Bharat Nallan](https://github.com/bharatnc)). +* Time のパース処理で msan の問題が発生し得るケースを修正します。この修正は次の問題を解決します: [#82477](https://github.com/ClickHouse/ClickHouse/issues/82477)。[#82514](https://github.com/ClickHouse/ClickHouse/pull/82514)([Yarik Briukhovetskyi](https://github.com/yariks5s))。 +* `threadpool_writer_pool_size` を 0 に設定できないようにし、サーバーの処理が行き詰まらないようにしました。 [#82532](https://github.com/ClickHouse/ClickHouse/pull/82532) ([Bharat Nallan](https://github.com/bharatnc))。 +* 相関付けられた列に対する行ポリシー式の解析中に発生する `LOGICAL_ERROR` を修正。 [#82618](https://github.com/ClickHouse/ClickHouse/pull/82618) ([Dmitry Novik](https://github.com/novikd)). +* `enable_shared_storage_snapshot_in_query = 1` のときに `mergeTreeProjection` テーブル関数で親メタデータが誤って使用される問題を修正しました。これは [#82634](https://github.com/ClickHouse/ClickHouse/issues/82634) に対応するものです。[#82638](https://github.com/ClickHouse/ClickHouse/pull/82638)([Amos Bird](https://github.com/amosbird))。 +* 関数 `trim{Left,Right,Both}` が、型「FixedString(N)」の入力文字列をサポートするようになりました。たとえば、`SELECT trimBoth(toFixedString('abc', 3), 'ac')` を実行できるようになりました。 [#82691](https://github.com/ClickHouse/ClickHouse/pull/82691) ([Robert Schulze](https://github.com/rschu1ze)). +* AzureBlobStorage において、ネイティブコピーを行う際に認証方法を比較し、その際に例外が発生した場合は、読み取りとコピー(つまり非ネイティブコピー)にフォールバックするようにコードを更新しました。 [#82693](https://github.com/ClickHouse/ClickHouse/pull/82693) ([Smita Kulkarni](https://github.com/SmitaRKulkarni)). +* 空要素が存在する場合の `groupArraySample` / `groupArrayLast` のデシリアライズを修正しました(入力が空の場合にデシリアライズ処理がバイナリの一部をスキップしてしまう可能性があり、これによりデータ読み取り時の破損や TCP プロトコルにおける UNKNOWN_PACKET_FROM_SERVER を引き起こす可能性がありました)。数値型および日付時刻型には影響しません。[#82763](https://github.com/ClickHouse/ClickHouse/pull/82763)([Pedro Ferreira](https://github.com/PedroTadim))。 +* 空の `Memory` テーブルのバックアップ処理を修正し、バックアップの復元時に `BACKUP_ENTRY_NOT_FOUND` エラーで失敗する問題を解消しました。 [#82791](https://github.com/ClickHouse/ClickHouse/pull/82791) ([Julia Kartseva](https://github.com/jkartseva)). * union/intersect/except_default_mode の書き換え処理における例外安全性を修正。[#82664](https://github.com/ClickHouse/ClickHouse/issues/82664) をクローズ。[#82820](https://github.com/ClickHouse/ClickHouse/pull/82820)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 非同期テーブルのロードジョブの数を管理します。実行中のジョブがある場合は、`TransactionLog::removeOldEntries` 内の `tail_ptr` を更新しないようにします。 [#82824](https://github.com/ClickHouse/ClickHouse/pull/82824) ([Tuan Pham Anh](https://github.com/tuanpach)). -* Iceberg におけるデータ競合を修正。 [#82841](https://github.com/ClickHouse/ClickHouse/pull/82841) ([Azat Khuzhin](https://github.com/azat)). -* 25.6 で導入された `use_skip_indexes_if_final_exact_mode` 最適化は、`MergeTree` エンジンの設定やデータ分布によっては、適切な候補範囲を選択できない場合がありました。この問題は解決されました。 [#82879](https://github.com/ClickHouse/ClickHouse/pull/82879) ([Shankar Iyer](https://github.com/shankar-iyer)). -* SCRAM_SHA256_PASSWORD 型で AST をパースする際に認証データの salt を設定しました。 [#82888](https://github.com/ClickHouse/ClickHouse/pull/82888) ([Tuan Pham Anh](https://github.com/tuanpach)). -* キャッシュを行わない Database 実装を使用している場合、対応するテーブルのメタデータは、列が返されて参照が無効になった後に削除されます。 [#82939](https://github.com/ClickHouse/ClickHouse/pull/82939) ([buyval01](https://github.com/buyval01)). -* `Merge` ストレージを使用するテーブルとの JOIN 式を含むクエリに対するフィルターの変更処理を修正しました。[#82092](https://github.com/ClickHouse/ClickHouse/issues/82092) を修正します。[#82950](https://github.com/ClickHouse/ClickHouse/pull/82950)([Dmitry Novik](https://github.com/novikd))。 -* QueryMetricLog における LOGICAL_ERROR(`Mutex cannot be NULL`)を修正。 [#82979](https://github.com/ClickHouse/ClickHouse/pull/82979) ([Pablo Marcos](https://github.com/pamarcos))。 -* フォーマット指定子 `%f` が可変長のフォーマット指定子(例: `%M`)と併用された場合に、関数 `formatDateTime` が誤った出力を行っていた問題を修正しました。 [#83020](https://github.com/ClickHouse/ClickHouse/pull/83020) ([Robert Schulze](https://github.com/rschu1ze)). -* セカンダリクエリが VIEW から常にすべてのカラムを読み取る場合に、analyzer が有効な状態で発生していたパフォーマンス低下を修正しました。Issue [#81718](https://github.com/ClickHouse/ClickHouse/issues/81718) を修正。 [#83036](https://github.com/ClickHouse/ClickHouse/pull/83036)([Dmitry Novik](https://github.com/novikd))。 -* 読み取り専用ディスク上でのバックアップ復元時に表示される誤解を招くエラーメッセージを修正しました。 [#83051](https://github.com/ClickHouse/ClickHouse/pull/83051) ([Julia Kartseva](https://github.com/jkartseva)). -* 依存関係を持たない `CREATE TABLE` 実行時には、循環依存関係のチェックを行わないようにしました。これにより、[https://github.com/ClickHouse/ClickHouse/pull/65405](https://github.com/ClickHouse/ClickHouse/pull/65405) で導入された、数千のテーブルを作成するユースケースにおけるパフォーマンス低下が解消されます。 [#83077](https://github.com/ClickHouse/ClickHouse/pull/83077) ([Pavel Kruglov](https://github.com/Avogar))。 -* 負の Time 値がテーブルに暗黙的に読み込まれてしまう問題を修正し、ドキュメントの記述も分かりやすくしました。 [#83091](https://github.com/ClickHouse/ClickHouse/pull/83091) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* `lowCardinalityKeys` 関数で共有辞書の無関係な部分を使用しないようにしました。 [#83118](https://github.com/ClickHouse/ClickHouse/pull/83118) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* マテリアライズドビューにおけるサブカラムの使用に関するリグレッションを修正しました。これにより次の問題が修正されます: [#82784](https://github.com/ClickHouse/ClickHouse/issues/82784)。[#83221](https://github.com/ClickHouse/ClickHouse/pull/83221)([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 -* 不正な INSERT 後に接続が切断された状態のまま残り、クライアントがクラッシュしてしまう問題を修正しました。 [#83253](https://github.com/ClickHouse/ClickHouse/pull/83253) ([Azat Khuzhin](https://github.com/azat)). -* 空のカラムを含むブロックのサイズ計算時に発生していたクラッシュを修正。 [#83271](https://github.com/ClickHouse/ClickHouse/pull/83271) ([Raúl Marín](https://github.com/Algunenano)). -* UNION における Variant 型でクラッシュが発生する可能性のある問題を修正。 [#83295](https://github.com/ClickHouse/ClickHouse/pull/83295) ([Pavel Kruglov](https://github.com/Avogar))。 -* サポートされていない SYSTEM クエリに対して clickhouse-local で発生していた LOGICAL_ERROR を修正。 [#83333](https://github.com/ClickHouse/ClickHouse/pull/83333) ([Surya Kant Ranjan](https://github.com/iit2009046)) -* S3 クライアント用の `no_sign_request` を修正しました。これは、S3 リクエストに署名を付けないよう明示的に指定するために使用できます。エンドポイント単位の設定を使用して、特定のエンドポイントに対して定義することもできます。[#83379](https://github.com/ClickHouse/ClickHouse/pull/83379)([Antonio Andelic](https://github.com/antonio2368))。 -* CPU スケジューリングが有効な状態で負荷がかかったときに、設定 'max_threads=1' を指定したクエリで発生する可能性があるクラッシュを修正しました。 [#83387](https://github.com/ClickHouse/ClickHouse/pull/83387) ([Fan Ziqi](https://github.com/f2quantum)). -* CTE 定義が同名の別のテーブル式を参照している場合に発生していた `TOO_DEEP_SUBQUERIES` 例外を修正。 [#83413](https://github.com/ClickHouse/ClickHouse/pull/83413) ([Dmitry Novik](https://github.com/novikd)). -* `REVOKE S3 ON system.*` を実行した際に `*.*` に対する S3 権限まで取り消されてしまう誤った動作を修正しました。これにより [#83417](https://github.com/ClickHouse/ClickHouse/issues/83417) が解決されます。 [#83420](https://github.com/ClickHouse/ClickHouse/pull/83420) ([pufit](https://github.com/pufit)). +* 非同期テーブルの読み込みジョブの数を追跡するようにしました。実行中のジョブがある場合は、`TransactionLog::removeOldEntries` 内で `tail_ptr` を更新しないようにしました。 [#82824](https://github.com/ClickHouse/ClickHouse/pull/82824) ([Tuan Pham Anh](https://github.com/tuanpach)). +* Iceberg で発生していたデータレースを修正。[#82841](https://github.com/ClickHouse/ClickHouse/pull/82841) ([Azat Khuzhin](https://github.com/azat)). +* 25.6 で導入された `use_skip_indexes_if_final_exact_mode` 最適化を有効化した場合、`MergeTree` エンジンの設定やデータ分布によっては、適切な候補範囲を選択できないことがありました。この問題は解消されました。 [#82879](https://github.com/ClickHouse/ClickHouse/pull/82879) ([Shankar Iyer](https://github.com/shankar-iyer)). +* SCRAM_SHA256_PASSWORD 型の AST から認証データをパースする際に salt を設定するようにしました。 [#82888](https://github.com/ClickHouse/ClickHouse/pull/82888) ([Tuan Pham Anh](https://github.com/tuanpach)). +* キャッシュしない Database 実装を使用している場合、カラムが返されて参照が無効になった後に、対応するテーブルのメタデータが削除されます。 [#82939](https://github.com/ClickHouse/ClickHouse/pull/82939) ([buyval01](https://github.com/buyval01)). +* `Merge` ストレージのテーブルとの JOIN 式を含むクエリに対するフィルタの変更処理を修正。[#82092](https://github.com/ClickHouse/ClickHouse/issues/82092) を修正。[#82950](https://github.com/ClickHouse/ClickHouse/pull/82950)([Dmitry Novik](https://github.com/novikd))。 +* QueryMetricLog における LOGICAL_ERROR 「Mutex cannot be NULL」を修正。 [#82979](https://github.com/ClickHouse/ClickHouse/pull/82979) ([Pablo Marcos](https://github.com/pamarcos)). +* フォーマッタ `%f` を可変長フォーマッタ(例:`%M`)と併用した場合に、関数 `formatDateTime` で誤った出力が行われる不具合を修正しました。 [#83020](https://github.com/ClickHouse/ClickHouse/pull/83020) ([Robert Schulze](https://github.com/rschu1ze)). +* analyzer を有効にした状態で、セカンダリクエリが VIEW から常にすべてのカラムを読み取ってしまう場合に発生するパフォーマンス低下を修正しました。[#81718](https://github.com/ClickHouse/ClickHouse/issues/81718) を修正。[#83036](https://github.com/ClickHouse/ClickHouse/pull/83036)([Dmitry Novik](https://github.com/novikd))。 +* 読み取り専用ディスク上でバックアップを復元する際に表示される誤解を招くエラーメッセージを修正。 [#83051](https://github.com/ClickHouse/ClickHouse/pull/83051) ([Julia Kartseva](https://github.com/jkartseva)). +* 依存関係を持たない `CREATE TABLE` では循環依存関係のチェックを行わないようにしました。これにより、[https://github.com/ClickHouse/ClickHouse/pull/65405](https://github.com/ClickHouse/ClickHouse/pull/65405) で導入された、数千個のテーブルを作成するようなユースケースでのパフォーマンス低下が解消されます。[#83077](https://github.com/ClickHouse/ClickHouse/pull/83077)([Pavel Kruglov](https://github.com/Avogar))。 +* 負の Time 値がテーブルに暗黙的に読み込まれていた問題を修正し、ドキュメントの記述も分かりやすくしました。 [#83091](https://github.com/ClickHouse/ClickHouse/pull/83091) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* `lowCardinalityKeys` 関数が共有ディクショナリの無関係な部分を使用しないようにしました。 [#83118](https://github.com/ClickHouse/ClickHouse/pull/83118) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* マテリアライズドビューのサブカラム利用時に発生していたリグレッションを修正しました。これにより、次の問題が解消されました: [#82784](https://github.com/ClickHouse/ClickHouse/issues/82784)。[#83221](https://github.com/ClickHouse/ClickHouse/pull/83221) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 +* 不正な INSERT 実行後に接続が切断された状態のまま残ることでクライアントがクラッシュする問題を修正しました。 [#83253](https://github.com/ClickHouse/ClickHouse/pull/83253) ([Azat Khuzhin](https://github.com/azat)). +* 空のカラムを持つブロックのサイズを計算する際に発生していたクラッシュを修正しました。 [#83271](https://github.com/ClickHouse/ClickHouse/pull/83271) ([Raúl Marín](https://github.com/Algunenano)). +* UNION 内の Variant 型で発生し得るクラッシュを修正。[#83295](https://github.com/ClickHouse/ClickHouse/pull/83295) ([Pavel Kruglov](https://github.com/Avogar)). +* サポートされていない SYSTEM クエリに対して clickhouse-local で発生していた LOGICAL_ERROR を修正。 [#83333](https://github.com/ClickHouse/ClickHouse/pull/83333) ([Surya Kant Ranjan](https://github.com/iit2009046)). +* S3 クライアント向けの `no_sign_request` 設定を修正しました。これは、S3 リクエストに署名しないことを明示的に指定するために使用できます。エンドポイント単位の設定を使用して、特定のエンドポイントに対して定義することもできます。 [#83379](https://github.com/ClickHouse/ClickHouse/pull/83379) ([Antonio Andelic](https://github.com/antonio2368)). +* CPU スケジューリングが有効な状態で負荷がかかっているときに、設定 'max_threads=1' を指定したクエリを実行すると発生する可能性があるクラッシュを修正します。 [#83387](https://github.com/ClickHouse/ClickHouse/pull/83387) ([Fan Ziqi](https://github.com/f2quantum)). +* CTE 定義が同名の別のテーブル式を参照している場合に発生する `TOO_DEEP_SUBQUERIES` 例外の問題を修正。 [#83413](https://github.com/ClickHouse/ClickHouse/pull/83413) ([Dmitry Novik](https://github.com/novikd)). +* `REVOKE S3 ON system.*` を実行した際に、`*.*` に対する S3 権限まで取り消されてしまう誤動作を修正しました。これにより [#83417](https://github.com/ClickHouse/ClickHouse/issues/83417) が修正されました。[#83420](https://github.com/ClickHouse/ClickHouse/pull/83420)([pufit](https://github.com/pufit))。 * クエリ間で async_read_counters を共有しないようにしました。 [#83423](https://github.com/ClickHouse/ClickHouse/pull/83423) ([Azat Khuzhin](https://github.com/azat)). -* サブクエリに FINAL が含まれている場合は、parallel replicas を無効化するようにしました。 [#83455](https://github.com/ClickHouse/ClickHouse/pull/83455) ([zoomxi](https://github.com/zoomxi)). -* 設定 `role_cache_expiration_time_seconds` における軽微な整数オーバーフローを修正しました(issue [#83374](https://github.com/ClickHouse/ClickHouse/issues/83374))。[#83461](https://github.com/ClickHouse/ClickHouse/pull/83461)([wushap](https://github.com/wushap))。 -* [https://github.com/ClickHouse/ClickHouse/pull/79963](https://github.com/ClickHouse/ClickHouse/pull/79963) で発生したバグを修正します。定義者付きの MV に対して INSERT を行う際、権限チェックは定義者に付与された権限を使用する必要があります。この修正により [#79951](https://github.com/ClickHouse/ClickHouse/issues/79951) が解決されます。[#83502](https://github.com/ClickHouse/ClickHouse/pull/83502)([pufit](https://github.com/pufit))。 -* Iceberg の配列要素および map 値に対する境界ベースのファイルプルーニングを、そのすべてのネストされたサブフィールドも含めて無効化。[#83520](https://github.com/ClickHouse/ClickHouse/pull/83520)([Daniil Ivanik](https://github.com/divanik))。 -* 一時データストレージとして使用している場合に発生する可能性のあるファイルキャッシュ未初期化エラーを修正。 [#83539](https://github.com/ClickHouse/ClickHouse/pull/83539) ([Bharat Nallan](https://github.com/bharatnc)). -* Keeper の修正: セッションのクローズ時にエフェメラルノードが削除された場合に、合計ウォッチ数が正しく更新されるようにしました。 [#83583](https://github.com/ClickHouse/ClickHouse/pull/83583) ([Antonio Andelic](https://github.com/antonio2368)). +* サブクエリに FINAL が含まれている場合は Parallel Replicas を無効化するようにしました。 [#83455](https://github.com/ClickHouse/ClickHouse/pull/83455) ([zoomxi](https://github.com/zoomxi)). +* 設定 `role_cache_expiration_time_seconds` の構成で発生していた軽微な整数オーバーフローを修正しました(issue [#83374](https://github.com/ClickHouse/ClickHouse/issues/83374))。[#83461](https://github.com/ClickHouse/ClickHouse/pull/83461)([wushap](https://github.com/wushap))。 +* [https://github.com/ClickHouse/ClickHouse/pull/79963](https://github.com/ClickHouse/ClickHouse/pull/79963) によって導入されたバグを修正します。definer 付きの MV に対して `INSERT` を行う場合、権限チェックでは definer に付与された権限を使用する必要があります。これにより [#79951](https://github.com/ClickHouse/ClickHouse/issues/79951) が解決されます。[#83502](https://github.com/ClickHouse/ClickHouse/pull/83502)([pufit](https://github.com/pufit))。 +* iceberg の配列要素および iceberg の map の値と、そのすべてのネストしたサブフィールドに対する境界値ベースのファイルプルーニングを無効化しました。 [#83520](https://github.com/ClickHouse/ClickHouse/pull/83520) ([Daniil Ivanik](https://github.com/divanik)). +* 一時データストレージとして使用する際に発生する可能性のある file cache の未初期化エラーを修正。 [#83539](https://github.com/ClickHouse/ClickHouse/pull/83539) ([Bharat Nallan](https://github.com/bharatnc)). +* Keeper の修正: セッション終了時にエフェメラルノードが削除された際に、ウォッチの総数が正しく更新されるようにしました。 [#83583](https://github.com/ClickHouse/ClickHouse/pull/83583) ([Antonio Andelic](https://github.com/antonio2368)). * max_untracked_memory 周辺の誤ったメモリ管理を修正。 [#83607](https://github.com/ClickHouse/ClickHouse/pull/83607) ([Azat Khuzhin](https://github.com/azat)). -* ある稀なケースにおいて、`INSERT SELECT` と `UNION ALL` の組み合わせによりヌルポインタ参照が発生する可能性がありました。これにより [#83618](https://github.com/ClickHouse/ClickHouse/issues/83618) が解決されました。[#83643](https://github.com/ClickHouse/ClickHouse/pull/83643)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 論理エラーを引き起こす可能性があるため、`max_insert_block_size` にゼロ値を設定できないようにしました。 [#83688](https://github.com/ClickHouse/ClickHouse/pull/83688) ([Bharat Nallan](https://github.com/bharatnc)). -* block_size_bytes=0 の場合に estimateCompressionRatio() で発生する無限ループを修正。 [#83704](https://github.com/ClickHouse/ClickHouse/pull/83704) ([Azat Khuzhin](https://github.com/azat))。 -* `IndexUncompressedCacheBytes`/`IndexUncompressedCacheCells`/`IndexMarkCacheBytes`/`IndexMarkCacheFiles` の各メトリクスを修正しました(以前は `Cache` プレフィックスのないメトリクスに含まれていました)。[#83730](https://github.com/ClickHouse/ClickHouse/pull/83730)([Azat Khuzhin](https://github.com/azat))。 -* `BackgroundSchedulePool` のシャットダウン時にタスクからのスレッド join によってアボートが発生しうる問題を修正し、ユニットテストでのハングも解消できるはずです。 [#83769](https://github.com/ClickHouse/ClickHouse/pull/83769) ([Azat Khuzhin](https://github.com/azat))。 -* 名前の衝突が発生した場合でも、新しい analyzer が WITH 句内で外側のエイリアスを参照できるようにする後方互換性の設定を導入しました。[#82700](https://github.com/ClickHouse/ClickHouse/issues/82700) を修正しました。[#83797](https://github.com/ClickHouse/ClickHouse/pull/83797)([Dmitry Novik](https://github.com/novikd))。 -* ライブラリブリッジのクリーンアップ中の再帰的なコンテキストロックが原因で、シャットダウン時にデッドロックが発生する問題を修正。 [#83824](https://github.com/ClickHouse/ClickHouse/pull/83824) ([Azat Khuzhin](https://github.com/azat)). - - +* ある一部のケースにおいて、`INSERT SELECT` と `UNION ALL` の組み合わせによりヌルポインタ逆参照が発生する可能性がありました。この変更により [#83618](https://github.com/ClickHouse/ClickHouse/issues/83618) が解決されました。[#83643](https://github.com/ClickHouse/ClickHouse/pull/83643)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* `max_insert_block_size` にゼロ値を指定できないようにしました。ゼロ値を指定すると論理エラーを引き起こす可能性があるためです。 [#83688](https://github.com/ClickHouse/ClickHouse/pull/83688) ([Bharat Nallan](https://github.com/bharatnc)). +* estimateCompressionRatio() において block_size_bytes=0 の場合に発生する無限ループを修正。 [#83704](https://github.com/ClickHouse/ClickHouse/pull/83704) ([Azat Khuzhin](https://github.com/azat)). +* `IndexUncompressedCacheBytes`/`IndexUncompressedCacheCells`/`IndexMarkCacheBytes`/`IndexMarkCacheFiles` メトリクスを修正しました(以前は `Cache` プレフィックスの付かないメトリクスに含められていました)。[#83730](https://github.com/ClickHouse/ClickHouse/pull/83730)([Azat Khuzhin](https://github.com/azat))。 +* `BackgroundSchedulePool` のシャットダウン中に、タスク側からスレッドを join することが原因となり得たアボートと、(ユニットテストで発生していた)ハングの可能性を修正しました。 [#83769](https://github.com/ClickHouse/ClickHouse/pull/83769) ([Azat Khuzhin](https://github.com/azat)). +* 名前の競合が発生する場合に、新しい analyzer が WITH 句内で外側のエイリアスを参照できるようにする後方互換性設定を導入しました。 [#82700](https://github.com/ClickHouse/ClickHouse/issues/82700) を修正しました。 [#83797](https://github.com/ClickHouse/ClickHouse/pull/83797)([Dmitry Novik](https://github.com/novikd))。 +* シャットダウン時にライブラリブリッジのクリーンアップ中の再帰的なコンテキストロックにより発生するデッドロックを修正。 [#83824](https://github.com/ClickHouse/ClickHouse/pull/83824) ([Azat Khuzhin](https://github.com/azat)). #### ビルド/テスト/パッケージングの改善 -* ClickHouse lexer 用の最小限の C ライブラリ(10 KB)をビルドしました。これは [#80977](https://github.com/ClickHouse/ClickHouse/issues/80977) に必要です。[#81347](https://github.com/ClickHouse/ClickHouse/pull/81347)([Alexey Milovidov](https://github.com/alexey-milovidov))。スタンドアロン lexer 用のテストを追加し、テストタグ `fasttest-only` を追加しました。[#82472](https://github.com/ClickHouse/ClickHouse/pull/82472)([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy))。 -* Nix サブモジュール入力のチェックを追加しました。[#81691](https://github.com/ClickHouse/ClickHouse/pull/81691)([Konstantin Bogdanov](https://github.com/thevar1able))。 -* localhost 上でインテグレーションテストを実行しようとした際に発生しうる問題のいくつかを修正しました。[#82135](https://github.com/ClickHouse/ClickHouse/pull/82135)([Oleg Doronin](https://github.com/dorooleg))。 -* Mac および FreeBSD 上で SymbolIndex をコンパイルするようにしました。(ただし、実際に動作するのは ELF システムである Linux と FreeBSD のみです。)[#82347](https://github.com/ClickHouse/ClickHouse/pull/82347)([Alexey Milovidov](https://github.com/alexey-milovidov))。 + +* ClickHouse の lexer 用に最小限の C ライブラリ(10 KB)をビルドしました。これは [#80977](https://github.com/ClickHouse/ClickHouse/issues/80977) に必要です。[#81347](https://github.com/ClickHouse/ClickHouse/pull/81347)([Alexey Milovidov](https://github.com/alexey-milovidov))。スタンドアロン lexer 用のテストを追加し、テストタグ `fasttest-only` を追加しました。[#82472](https://github.com/ClickHouse/ClickHouse/pull/82472)([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy))。 +* Nix サブモジュールの input に対するチェックを追加しました。[#81691](https://github.com/ClickHouse/ClickHouse/pull/81691)([Konstantin Bogdanov](https://github.com/thevar1able))。 +* localhost 上で統合テストを実行しようとした際に発生しうる問題を修正しました。[#82135](https://github.com/ClickHouse/ClickHouse/pull/82135)([Oleg Doronin](https://github.com/dorooleg))。 +* Mac と FreeBSD で SymbolIndex をコンパイル可能にしました。(ただし、実際に動作するのは ELF システムである Linux および FreeBSD のみです。)[#82347](https://github.com/ClickHouse/ClickHouse/pull/82347)([Alexey Milovidov](https://github.com/alexey-milovidov))。 * Azure SDK を v1.15.0 に更新しました。[#82747](https://github.com/ClickHouse/ClickHouse/pull/82747)([Smita Kulkarni](https://github.com/SmitaRKulkarni))。 * google-cloud-cpp の storage モジュールをビルドシステムに追加しました。[#82881](https://github.com/ClickHouse/ClickHouse/pull/82881)([Pablo Marcos](https://github.com/pamarcos))。 -* Docker Official Library の要件を満たすために、clickhouse-server 用の `Dockerfile.ubuntu` を変更しました。[#83039](https://github.com/ClickHouse/ClickHouse/pull/83039)([Mikhail f. Shiryaev](https://github.com/Felixoid))。 -* `curl clickhouse.com` へのビルドのアップロードを修正するための、[#83158](https://github.com/ClickHouse/ClickHouse/issues/83158) に対するフォローアップ対応です。[#83463](https://github.com/ClickHouse/ClickHouse/pull/83463)([Mikhail f. Shiryaev](https://github.com/Felixoid))。 -* `clickhouse/clickhouse-server` および公式 `clickhouse` イメージに `busybox` バイナリとインストールツールを追加しました。[#83735](https://github.com/ClickHouse/ClickHouse/pull/83735)([Mikhail f. Shiryaev](https://github.com/Felixoid))。 -* ClickHouse サーバーのホストを指定するための `CLICKHOUSE_HOST` 環境変数のサポートを追加し、既存の `CLICKHOUSE_USER` および `CLICKHOUSE_PASSWORD` 環境変数と整合させました。これにより、クライアントや設定ファイルを直接変更することなく、より容易に構成できるようになります。[#83659](https://github.com/ClickHouse/ClickHouse/pull/83659)([Doron David](https://github.com/dorki))。 +* Docker Official Library の要件を満たすように、clickhouse-server 用の `Dockerfile.ubuntu` を変更しました。[#83039](https://github.com/ClickHouse/ClickHouse/pull/83039)([Mikhail f. Shiryaev](https://github.com/Felixoid))。 +* `curl clickhouse.com` へのビルドのアップロードを修正するため、[#83158](https://github.com/ClickHouse/ClickHouse/issues/83158) のフォローアップを行いました。[#83463](https://github.com/ClickHouse/ClickHouse/pull/83463)([Mikhail f. Shiryaev](https://github.com/Felixoid))。 +* `clickhouse/clickhouse-server` および公式 `clickhouse` イメージに `busybox` バイナリとインストール用ツールを追加しました。[#83735](https://github.com/ClickHouse/ClickHouse/pull/83735)([Mikhail f. Shiryaev](https://github.com/Felixoid))。 +* ClickHouse サーバーのホストを指定するための `CLICKHOUSE_HOST` 環境変数のサポートを追加し、既存の `CLICKHOUSE_USER` および `CLICKHOUSE_PASSWORD` 環境変数と整合させました。これにより、クライアントや設定ファイルを直接変更することなく、より簡単に設定できるようになります。[#83659](https://github.com/ClickHouse/ClickHouse/pull/83659)([Doron David](https://github.com/dorki))。 +### ClickHouse リリース 25.6、2025-06-26 {#256} -### ClickHouse リリース 25.6, 2025-06-26 {#256} - -#### 後方互換性のない変更 -* これまで、関数 `countMatches` は、パターンが空のマッチを受理する場合でも、最初の空マッチでカウントを停止していました。この問題を解決するために、`countMatches` は空マッチが発生したときに 1 文字進めて処理を継続するようになりました。従来の動作を維持したいユーザーは、設定 `count_matches_stop_at_empty_match` を有効にできます。[#81676](https://github.com/ClickHouse/ClickHouse/pull/81676)([Elmi Ahmadov](https://github.com/ahmadov))。 -* 軽微: サーバー設定 `backup_threads` および `restore_threads` がゼロ以外の値でなければならないように強制しました。[#80224](https://github.com/ClickHouse/ClickHouse/pull/80224)([Raúl Marín](https://github.com/Algunenano))。 -* 軽微: `String` に対する `bitNot` が、内部メモリ表現として終端のヌル文字付き文字列を返すように修正しました。これはユーザーから見える動作には影響しないはずですが、著者はこの変更を明示しておきたいと考えています。[#80791](https://github.com/ClickHouse/ClickHouse/pull/80791)([Azat Khuzhin](https://github.com/azat))。 - +#### 下位互換性のない変更 +* これまでは、関数 `countMatches` はパターンが空文字列を許容していても、最初の空のマッチが発生した時点でカウントを停止していました。この問題を解消するため、`countMatches` は空のマッチが発生した場合に 1 文字分だけ進めて処理を継続するようになりました。従来の動作を維持したいユーザーは、設定 `count_matches_stop_at_empty_match` を有効にできます。 [#81676](https://github.com/ClickHouse/ClickHouse/pull/81676) ([Elmi Ahmadov](https://github.com/ahmadov)). +* 軽微: サーバー設定 `backup_threads` および `restore_threads` がゼロ以外の値になるように強制しました。 [#80224](https://github.com/ClickHouse/ClickHouse/pull/80224) ([Raúl Marín](https://github.com/Algunenano)). +* 軽微: `String` に対する `bitNot` が、内部メモリ表現としてゼロ終端された文字列を返すように修正しました。これはユーザーから見える動作には影響しないはずですが、著者はこの変更を明示しておきたいと考えています。 [#80791](https://github.com/ClickHouse/ClickHouse/pull/80791) ([Azat Khuzhin](https://github.com/azat)). #### 新機能 -* 新しいデータ型 `Time` ([H]HH:MM:SS) と `Time64` ([H]HH:MM:SS[.fractional]) を導入し、それらに対する基本的なキャスト関数および他のデータ型と連携するための関数をいくつか追加しました。既存の関数 `toTime` との互換性を保つための設定を追加し、設定 `use_legacy_to_time` は当面、従来の動作を維持するように設定されています。 [#81217](https://github.com/ClickHouse/ClickHouse/pull/81217) ([Yarik Briukhovetskyi](https://github.com/yariks5s))。Time/Time64 型同士の比較をサポートしました。 [#80327](https://github.com/ClickHouse/ClickHouse/pull/80327) ([Yarik Briukhovetskyi](https://github.com/yariks5s))。 -* 新しい CLI ツール [`chdig`](https://github.com/azat/chdig/) - ClickHouse 用の、`top` に似た TUI インターフェイスが ClickHouse の一部として追加されました。 [#79666](https://github.com/ClickHouse/ClickHouse/pull/79666)([Azat Khuzhin](https://github.com/azat))。 -* `Atomic` および `Ordinary` データベースエンジン向けに `disk` 設定をサポートし、テーブルのメタデータファイルを保存するディスクを指定できるようにしました。 [#80546](https://github.com/ClickHouse/ClickHouse/pull/80546) ([Tuan Pham Anh](https://github.com/tuanpach))。これにより、外部ソースからデータベースをアタッチできるようになります。 -* 新しい種類の MergeTree エンジンである `CoalescingMergeTree` — このエンジンはバックグラウンドマージ時に最初の非Null値を採用します。これにより [#78869](https://github.com/ClickHouse/ClickHouse/issues/78869) が解決されました。[#79344](https://github.com/ClickHouse/ClickHouse/pull/79344)([scanhex12](https://github.com/scanhex12))。 -* WKB(「Well-Known Binary」は、さまざまなジオメトリ型をバイナリ形式で表現するためのフォーマットで、GISアプリケーションで使用されます)を読み込む関数をサポートしました。[#43941](https://github.com/ClickHouse/ClickHouse/issues/43941) を参照してください。[#80139](https://github.com/ClickHouse/ClickHouse/pull/80139)([scanhex12](https://github.com/scanhex12))。 -* ワークロード用のクエリスロットのスケジューリング機能を追加しました。詳細は [workload scheduling](https://clickhouse.com/docs/operations/workload-scheduling#query_scheduling) を参照してください。[#78415](https://github.com/ClickHouse/ClickHouse/pull/78415)([Sergei Trifonov](https://github.com/serxa))。 -* `timeSeries*` ヘルパー関数により、時系列データを扱う際のいくつかのユースケースを高速化します: - 指定した開始タイムスタンプ、終了タイムスタンプ、およびステップで、データを時間グリッドに再サンプリングします - PromQL 風の `delta`、`rate`、`idelta`、`irate` を計算します。 [#80590](https://github.com/ClickHouse/ClickHouse/pull/80590) ([Alexander Gololobov](https://github.com/davenger)). -* `mapContainsValuesLike`/`mapContainsValues`/`mapExtractValuesLike` 関数を追加し、map の値によるフィルタリングと Bloom filter ベースのインデックスでのサポートを可能にしました。 [#78171](https://github.com/ClickHouse/ClickHouse/pull/78171) ([UnamedRus](https://github.com/UnamedRus))。 -* 設定制約で、使用を禁止する値のセットを指定できるようになりました。 [#78499](https://github.com/ClickHouse/ClickHouse/pull/78499) ([Bharat Nallan](https://github.com/bharatnc)). -* 単一のクエリ内のすべてのサブクエリで同じストレージスナップショットを共有できるようにする設定 `enable_shared_storage_snapshot_in_query` を追加しました。これにより、クエリ内で同じテーブルが複数回参照される場合でも、そのテーブルからの読み取りの一貫性が保たれます。 [#79471](https://github.com/ClickHouse/ClickHouse/pull/79471) ([Amos Bird](https://github.com/amosbird))。 -* `JSON` カラムを `Parquet` に書き込むこと、および `Parquet` から `JSON` カラムを直接読み取ることをサポートします。 [#79649](https://github.com/ClickHouse/ClickHouse/pull/79649) ([Nihal Z. Miaji](https://github.com/nihalzp)). -* `pointInPolygon` に `MultiPolygon` のサポートを追加しました。 [#79773](https://github.com/ClickHouse/ClickHouse/pull/79773) ([Nihal Z. Miaji](https://github.com/nihalzp)). -* ローカルファイルシステムにマウントされた Delta テーブルを `deltaLakeLocal` テーブル関数経由でクエリできるようにするサポートを追加。 [#79781](https://github.com/ClickHouse/ClickHouse/pull/79781) ([roykim98](https://github.com/roykim98)). -* 新しい設定 `cast_string_to_date_time_mode` を追加しました。これにより、String 型からのキャスト時に DateTime のパースモードを選択できるようになります。 [#80210](https://github.com/ClickHouse/ClickHouse/pull/80210) ([Pavel Kruglov](https://github.com/Avogar))。例えば、ベストエフォートモードに設定できます。 -* Bitcoin の Bech アルゴリズムを扱うために `bech32Encode` および `bech32Decode` 関数を追加しました(issue [#40381](https://github.com/ClickHouse/ClickHouse/issues/40381))。[#80239](https://github.com/ClickHouse/ClickHouse/pull/80239)([George Larionov](https://github.com/glarik))。 -* MergeTree のパーツ名を解析するための SQL 関数を追加。 [#80573](https://github.com/ClickHouse/ClickHouse/pull/80573) ([Mikhail Artemenko](https://github.com/Michicosun)). -* 新しい仮想カラム `_disk_name` を導入することで、クエリで選択されたパーツを、それらが配置されているディスクに基づいてフィルタリングできるようにしました。 [#80650](https://github.com/ClickHouse/ClickHouse/pull/80650) ([tanner-bruce](https://github.com/tanner-bruce)). -* 埋め込み Web ツールの一覧を含むランディングページを追加しました。ブラウザに類するユーザーエージェントから要求されたときに表示されます。 [#81129](https://github.com/ClickHouse/ClickHouse/pull/81129) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* 関数 `arrayFirst`、`arrayFirstIndex`、`arrayLast` および `arrayLastIndex` は、フィルター式によって返された NULL 値を除外します。以前のバージョンでは、Nullable 型のフィルター結果はサポートされていませんでした。[#81113](https://github.com/ClickHouse/ClickHouse/issues/81113) を修正しました。[#81197](https://github.com/ClickHouse/ClickHouse/pull/81197)([Lennard Eijsackers](https://github.com/Blokje5))。 -* 今後は、`USE name` の代わりに `USE DATABASE name` と記述できるようになりました。 [#81307](https://github.com/ClickHouse/ClickHouse/pull/81307) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* 利用可能なコーデックを確認できる新しいシステムテーブル `system.codecs` を追加しました。(issue [#81525](https://github.com/ClickHouse/ClickHouse/issues/81525)). [#81600](https://github.com/ClickHouse/ClickHouse/pull/81600) ([Jimmy Aguilar Mena](https://github.com/Ergus)). -* `lag` および `lead` ウィンドウ関数をサポートします。[#9887](https://github.com/ClickHouse/ClickHouse/issues/9887) をクローズしました。[#82108](https://github.com/ClickHouse/ClickHouse/pull/82108)([Dmitry Novik](https://github.com/novikd))。 -* 関数 `tokens` に、ログ処理に適した新しいトークナイザー `split` のサポートが追加されました。 [#80195](https://github.com/ClickHouse/ClickHouse/pull/80195) ([Robert Schulze](https://github.com/rschu1ze))。 -* `clickhouse-local` に `--database` 引数のサポートを追加しました。これにより、以前に作成したデータベースに切り替えられるようになりました。この変更により [#44115](https://github.com/ClickHouse/ClickHouse/issues/44115) が解決されました。 [#81465](https://github.com/ClickHouse/ClickHouse/pull/81465) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 - - +* 新しいデータ型: `Time` ([H]HH:MM:SS) および `Time64` ([H]HH:MM:SS[.fractional])、ならびに他のデータ型と連携するためのいくつかの基本的なキャスト関数および各種関数を追加しました。既存の関数 `toTime` との互換性を保つための設定を追加しました。設定 `use_legacy_to_time` は、当面は従来の動作を維持する値に設定されています。 [#81217](https://github.com/ClickHouse/ClickHouse/pull/81217) ([Yarik Briukhovetskyi](https://github.com/yariks5s))。Time/Time64 型同士の比較をサポートしました。 [#80327](https://github.com/ClickHouse/ClickHouse/pull/80327) ([Yarik Briukhovetskyi](https://github.com/yariks5s))。 +* 新しい CLI ツール [`chdig`](https://github.com/azat/chdig/) は、ClickHouse 用の TUI インターフェイス(top 風)で、ClickHouse の一部として提供されます。[#79666](https://github.com/ClickHouse/ClickHouse/pull/79666)([Azat Khuzhin](https://github.com/azat))。 +* `Atomic` および `Ordinary` データベースエンジンで `disk` 設定に対応し、テーブルのメタデータファイルを保存するディスクを指定できるようにしました。 [#80546](https://github.com/ClickHouse/ClickHouse/pull/80546) ([Tuan Pham Anh](https://github.com/tuanpach))。これにより、外部ソース上のデータベースをアタッチできるようになります。 +* 新しい種類の MergeTree、`CoalescingMergeTree` - このエンジンはバックグラウンドマージ時に最初の非 Null の値を採用します。これにより [#78869](https://github.com/ClickHouse/ClickHouse/issues/78869) が解決されました。[#79344](https://github.com/ClickHouse/ClickHouse/pull/79344)([scanhex12](https://github.com/scanhex12))。 +* WKB(「Well-Known Binary」は、GIS アプリケーションで使用される、さまざまなジオメトリ型のバイナリ形式によるエンコード方式)を読み取る関数をサポートします。詳細は [#43941](https://github.com/ClickHouse/ClickHouse/issues/43941) を参照してください。 [#80139](https://github.com/ClickHouse/ClickHouse/pull/80139)([scanhex12](https://github.com/scanhex12))。 +* ワークロード向けにクエリスロットのスケジューリングを追加しました。詳細は [workload scheduling](https://clickhouse.com/docs/operations/workload-scheduling#query_scheduling) を参照してください。 [#78415](https://github.com/ClickHouse/ClickHouse/pull/78415) ([Sergei Trifonov](https://github.com/serxa))。 +* 時系列データを扱う際の一部のユースケースを高速化するための `timeSeries*` ヘルパー関数:- 開始タイムスタンプ、終了タイムスタンプ、ステップ幅を指定して、データを時間グリッドに再サンプリングする - PromQL 風の `delta`、`rate`、`idelta`、`irate` を計算する。[#80590](https://github.com/ClickHouse/ClickHouse/pull/80590)([Alexander Gololobov](https://github.com/davenger))。 +* `mapContainsValuesLike`/`mapContainsValues`/`mapExtractValuesLike` 関数を追加し、map の値に対するフィルタリングと Bloom filter ベースのインデックスでの利用を可能にしました。 [#78171](https://github.com/ClickHouse/ClickHouse/pull/78171) ([UnamedRus](https://github.com/UnamedRus)). +* 設定制約で許可されない値の集合を指定できるようになりました。 [#78499](https://github.com/ClickHouse/ClickHouse/pull/78499) ([Bharat Nallan](https://github.com/bharatnc)). +* 単一のクエリ内のすべてのサブクエリで同一のストレージスナップショットを共有できるようにする設定 `enable_shared_storage_snapshot_in_query` を追加しました。これにより、クエリ内で同じテーブルが複数回参照される場合でも、そのテーブルからの読み取りに一貫性が保たれます。 [#79471](https://github.com/ClickHouse/ClickHouse/pull/79471) ([Amos Bird](https://github.com/amosbird)). +* `JSON` カラムを `Parquet` に書き込み、`Parquet` から `JSON` カラムを直接読み取れるようにしました。 [#79649](https://github.com/ClickHouse/ClickHouse/pull/79649) ([Nihal Z. Miaji](https://github.com/nihalzp)). +* `pointInPolygon` が `MultiPolygon` をサポートするようになりました。 [#79773](https://github.com/ClickHouse/ClickHouse/pull/79773) ([Nihal Z. Miaji](https://github.com/nihalzp)). +* ローカルファイルシステムにマウントされた Delta テーブルを `deltaLakeLocal` テーブル関数を使用してクエリできるようにサポートを追加しました。 [#79781](https://github.com/ClickHouse/ClickHouse/pull/79781) ([roykim98](https://github.com/roykim98))。 +* 新しい設定 `cast_string_to_date_time_mode` を追加しました。これにより、String からの CAST 時に DateTime のパースモードを選択できるようになります。 [#80210](https://github.com/ClickHouse/ClickHouse/pull/80210) ([Pavel Kruglov](https://github.com/Avogar))。たとえば、ベストエフォートモードに設定できます。 +* Bitcoin の Bech アルゴリズムを扱うための `bech32Encode` および `bech32Decode` 関数を追加しました(issue [#40381](https://github.com/ClickHouse/ClickHouse/issues/40381))。[#80239](https://github.com/ClickHouse/ClickHouse/pull/80239)([George Larionov](https://github.com/glarik))。 +* MergeTree パーツ名を解析するための SQL 関数を追加しました。 [#80573](https://github.com/ClickHouse/ClickHouse/pull/80573) ([Mikhail Artemenko](https://github.com/Michicosun)). +* クエリで選択されたパーツを、それらが存在するディスクによってフィルタリングできるようにするため、新しい仮想カラム `_disk_name` を導入しました。 [#80650](https://github.com/ClickHouse/ClickHouse/pull/80650) ([tanner-bruce](https://github.com/tanner-bruce)). +* 埋め込み Web ツールの一覧を表示するランディングページを追加。ブラウザのようなユーザーエージェントからリクエストされた場合に表示されます。 [#81129](https://github.com/ClickHouse/ClickHouse/pull/81129) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* `arrayFirst`、`arrayFirstIndex`、`arrayLast`、`arrayLastIndex` 関数は、フィルター式によって返される NULL 値を除外します。以前のバージョンでは、Nullable なフィルター結果はサポートされていませんでした。[#81113](https://github.com/ClickHouse/ClickHouse/issues/81113) を修正します。[#81197](https://github.com/ClickHouse/ClickHouse/pull/81197)([Lennard Eijsackers](https://github.com/Blokje5))。 +* `USE name` の代わりに `USE DATABASE name` と書けるようになりました。 [#81307](https://github.com/ClickHouse/ClickHouse/pull/81307) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* 利用可能なコーデックを確認するための新しいシステムテーブル `system.codecs` を追加しました(issue [#81525](https://github.com/ClickHouse/ClickHouse/issues/81525))。[#81600](https://github.com/ClickHouse/ClickHouse/pull/81600)([Jimmy Aguilar Mena](https://github.com/Ergus))。 +* `lag` および `lead` ウィンドウ関数をサポートします。 [#9887](https://github.com/ClickHouse/ClickHouse/issues/9887) をクローズしました。 [#82108](https://github.com/ClickHouse/ClickHouse/pull/82108)([Dmitry Novik](https://github.com/novikd))。 +* 関数 `tokens` は、ログに適した新しいトークナイザー `split` をサポートするようになりました。 [#80195](https://github.com/ClickHouse/ClickHouse/pull/80195) ([Robert Schulze](https://github.com/rschu1ze)). +* `clickhouse-local` に `--database` 引数のサポートを追加しました。これにより、既に作成済みのデータベースに切り替えることができます。この変更により [#44115](https://github.com/ClickHouse/ClickHouse/issues/44115) が解決されました。 [#81465](https://github.com/ClickHouse/ClickHouse/pull/81465) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 #### 実験的機能 -* ClickHouse Keeper を使用して `Kafka2` に対して Kafka のリバランス相当のロジックを実装しました。各レプリカについて、永続ロックと一時ロックの 2 種類のパーティションロックをサポートします。レプリカは可能な限り長く永続ロックを保持しようとし、任意の時点でレプリカ上の永続ロックは `all_topic_partitions / active_replicas_count`(ここで `all_topic_partitions` はすべてのパーティション数、`active_replicas_count` はアクティブなレプリカ数)を超えないようになっています。もしそれより多くなった場合、そのレプリカはいくつかのパーティションを解放します。一部のパーティションはレプリカによって一時的に保持されます。レプリカ上の一時ロックの最大数は動的に変化し、他のレプリカがいくつかのパーティションを永続ロックとして取得できるようにします。一時ロックを更新する際、レプリカはいったんそれらをすべて解放し、別のものを再取得しようとします。[#78726](https://github.com/ClickHouse/ClickHouse/pull/78726)([Daria Fomina](https://github.com/sinfillo))。 -* 実験的テキストインデックスの改善として、明示的なパラメータがキーと値のペアでサポートされるようになりました。現在サポートされているパラメータは、必須の `tokenizer` と、オプションの `max_rows_per_postings_list` および `ngram_size` の 2 つです。[#80262](https://github.com/ClickHouse/ClickHouse/pull/80262)([Elmi Ahmadov](https://github.com/ahmadov))。 -* これまでは、セグメント ID をディスク上の (`.gin_sid`) ファイルを読み書きすることでオンザフライで更新していたため、フルテキストインデックスでは `packed` ストレージはサポートされていませんでした。`packed` ストレージの場合、コミットされていないファイルから値を読み出すことはサポートされておらず、その結果問題が発生していました。現在はこの問題は解消されています。[#80852](https://github.com/ClickHouse/ClickHouse/pull/80852)([Elmi Ahmadov](https://github.com/ahmadov))。 -* 型 `gin` の実験的インデックス(PostgreSQL ハッカーたちの内輪ネタなのであまり好みません)は `text` に改名されました。既存の型 `gin` のインデックスは引き続きロード可能ですが、検索で使用しようとすると例外がスローされ(代わりに `text` インデックスを提案します)、利用できません。[#80855](https://github.com/ClickHouse/ClickHouse/pull/80855)([Robert Schulze](https://github.com/rschu1ze))。 +* ClickHouse Keeper を用いて、`Kafka2` に対して Kafka のリバランスに類似したロジックを実装しました。各レプリカについて 2 種類のパーティションロック(永続ロックと一時ロック)をサポートします。レプリカは可能な限り長く永続ロックを保持しようとしますが、任意の時点でレプリカ上の永続ロックの数は `all_topic_partitions / active_replicas_count`(ここで `all_topic_partitions` はすべてのパーティション数、`active_replicas_count` はアクティブなレプリカ数)を超えません。もしそれより多くなった場合、レプリカはいくつかのパーティションを解放します。また、一部のパーティションはレプリカによって一時的に保持されます。レプリカ上の一時ロックの最大数は動的に変化し、他のレプリカがいくつかのパーティションを永続ロックとして取得できるようにします。一時ロックを更新する際、レプリカはいったんそれらをすべて解放し、別のパーティションを再度取得しようとします。[#78726](https://github.com/ClickHouse/ClickHouse/pull/78726)([Daria Fomina](https://github.com/sinfillo))。 +* 実験的なテキストインデックスの改良として、キーと値のペアによる明示的なパラメータ指定をサポートしました。現在サポートされているパラメータは、必須の `tokenizer` と、オプションの `max_rows_per_postings_list` および `ngram_size` の 2 つです。[#80262](https://github.com/ClickHouse/ClickHouse/pull/80262)([Elmi Ahmadov](https://github.com/ahmadov))。 +* 以前は、セグメント ID をディスク上の (`.gin_sid`) ファイルを読み書きすることでオンザフライに更新していたため、全文インデックスでは `packed` ストレージはサポートされていませんでした。`packed` ストレージの場合、未コミットのファイルから値を読み出すことはサポートされておらず、これが問題につながっていました。現在はこの問題は解消されています。[#80852](https://github.com/ClickHouse/ClickHouse/pull/80852)([Elmi Ahmadov](https://github.com/ahmadov))。 +* 実験的な `gin` 型インデックス(PostgreSQL ハッカーたちの内輪ネタなので私は好みではありません)は `text` に改名されました。既存の `gin` 型インデックスは引き続きロード可能ですが、検索でそれらを使用しようとすると例外をスローし(代わりに `text` インデックスを提案します)、利用できません。[#80855](https://github.com/ClickHouse/ClickHouse/pull/80855)([Robert Schulze](https://github.com/rschu1ze))。 +#### パフォーマンス向上 -#### パフォーマンスの向上 - -* 複数プロジェクションでのフィルタリングをサポートし、パートレベルのフィルタリングに複数のプロジェクションを使用できるようにしました。これは [#55525](https://github.com/ClickHouse/ClickHouse/issues/55525) への対応です。これはプロジェクションインデックス実装に向けた第 2 段階であり、[#78429](https://github.com/ClickHouse/ClickHouse/issues/78429) に続くものです。 [#80343](https://github.com/ClickHouse/ClickHouse/pull/80343)([Amos Bird](https://github.com/amosbird))。 +* 複数のプロジェクションを用いたフィルタリングをサポートし、パートレベルのフィルタリングで複数のプロジェクションを使用できるようにしました。これは [#55525](https://github.com/ClickHouse/ClickHouse/issues/55525) への対応です。これは、[#78429](https://github.com/ClickHouse/ClickHouse/issues/78429) に続く、プロジェクションインデックスを実装するための第 2 段階となる変更です。[#80343](https://github.com/ClickHouse/ClickHouse/pull/80343)([Amos Bird](https://github.com/amosbird))。 * デフォルトでファイルシステムキャッシュに `SLRU` キャッシュポリシーを使用します。 [#75072](https://github.com/ClickHouse/ClickHouse/pull/75072) ([Kseniia Sumarokova](https://github.com/kssenii)). -* クエリパイプラインの Resize ステップにおける競合を解消しました。 [#77562](https://github.com/ClickHouse/ClickHouse/pull/77562) ([Zhiguo Zhou](https://github.com/ZhiguoZh)). -* ネットワーク接続に紐づく単一スレッドではなく、パイプラインスレッドにブロックの(非)圧縮および(非)シリアル化処理をオフロードするオプションを追加しました。これは設定 `enable_parallel_blocks_marshalling` によって制御されます。クエリ発行元ノードとリモートノード間で大量のデータを転送する分散クエリの高速化が期待できます。 [#78694](https://github.com/ClickHouse/ClickHouse/pull/78694) ([Nikita Taranov](https://github.com/nickitat))。 -* すべてのブルームフィルタータイプのパフォーマンスを改善。 [OpenHouse カンファレンスの動画](https://www.youtube.com/watch?v=yIVz0NKwQvA\&pp=ygUQb3BlbmhvdXNlIG9wZW5haQ%3D%3D) [#79800](https://github.com/ClickHouse/ClickHouse/pull/79800) ([Delyan Kratunov](https://github.com/dkratunov)). -* `UniqExactSet::merge` において、一方のセットが空の場合の正常系パスを追加しました。また、LHS セットが 2 レベル構造で RHS が単一レベル構造の場合でも、RHS を 2 レベル構造に変換しないようにしました。 [#79971](https://github.com/ClickHouse/ClickHouse/pull/79971) ([Nikita Taranov](https://github.com/nickitat))。 -* 2 レベルのハッシュテーブル使用時のメモリ再利用効率を改善し、ページフォールトを削減しました。これにより、`GROUP BY` の高速化を図ります。 [#80245](https://github.com/ClickHouse/ClickHouse/pull/80245) ([Jiebin Sun](https://github.com/jiebinn))。 -* クエリ条件キャッシュにおける不要な更新を回避し、ロック競合を削減しました。 [#80247](https://github.com/ClickHouse/ClickHouse/pull/80247) ([Jiebin Sun](https://github.com/jiebinn)). -* `concatenateBlocks` の軽微な最適化。parallel hash join にも有効である可能性があります。 [#80328](https://github.com/ClickHouse/ClickHouse/pull/80328) ([李扬](https://github.com/taiyang-li))。 -* 主キー範囲からマーク範囲を選択する際、主キーが関数で包まれている場合には二分探索を使用できません。このPRでは、この制限を緩和します。主キーが常に単調な関数からなるチェーンで包まれている場合、またはRPNに常に真となる要素が含まれている場合でも、二分探索を適用できるようにします。[#45536](https://github.com/ClickHouse/ClickHouse/issues/45536) をクローズします。[#80597](https://github.com/ClickHouse/ClickHouse/pull/80597)([zoomxi](https://github.com/zoomxi))。 -* `Kafka` エンジンのシャットダウン速度を改善しました(複数の `Kafka` テーブルがある場合の余分な 3 秒の遅延を解消)。[#80796](https://github.com/ClickHouse/ClickHouse/pull/80796)([Azat Khuzhin](https://github.com/azat))。 -* 非同期インサート:メモリ使用量を削減し、INSERT クエリのパフォーマンスを向上します。[#80972](https://github.com/ClickHouse/ClickHouse/pull/80972) ([Raúl Marín](https://github.com/Algunenano))。 -* ログテーブルが無効になっている場合はプロセッサのプロファイルを行わないようにしました。 [#81256](https://github.com/ClickHouse/ClickHouse/pull/81256) ([Raúl Marín](https://github.com/Algunenano))。これにより、非常に短いクエリの実行が高速になります。 -* ソースが要求どおりの内容である場合に `toFixedString` を高速化。 [#81257](https://github.com/ClickHouse/ClickHouse/pull/81257) ([Raúl Marín](https://github.com/Algunenano)). -* 制限が設定されていないユーザーの場合は、クォータ値を処理しないようにしました。 [#81549](https://github.com/ClickHouse/ClickHouse/pull/81549) ([Raúl Marín](https://github.com/Algunenano))。これにより、ごく短いクエリの実行が高速になります。 -* メモリトラッキングで発生していた性能退行を修正しました。 [#81694](https://github.com/ClickHouse/ClickHouse/pull/81694) ([Michael Kolupaev](https://github.com/al13n321)). -* 分散クエリにおけるシャーディングキーの最適化を向上しました。 [#78452](https://github.com/ClickHouse/ClickHouse/pull/78452) ([fhw12345](https://github.com/fhw12345)). -* 並列レプリカ: すべての読み取りタスクが他のレプリカに割り当て済みの場合、使用されていない遅いレプリカを待たないようにしました。 [#80199](https://github.com/ClickHouse/ClickHouse/pull/80199) ([Igor Nikonov](https://github.com/devcrafter)). -* Parallel replicas では個別の接続タイムアウトを使用するようになりました。`parallel_replicas_connect_timeout_ms` 設定を参照してください。以前は、`connect_timeout_with_failover_ms` / `connect_timeout_with_failover_secure_ms` 設定が、Parallel replicas クエリ用の接続タイムアウト値として使用されていました(デフォルトでは 1 秒)。[#80421](https://github.com/ClickHouse/ClickHouse/pull/80421)([Igor Nikonov](https://github.com/devcrafter))。 -* ジャーナル機能を持つファイルシステムでは、`mkdir` はディスクに永続化されるファイルシステムのジャーナルに書き込まれます。ディスクが遅い場合、これには長い時間がかかることがあります。この処理を予約ロックのスコープ外に移動しました。 [#81371](https://github.com/ClickHouse/ClickHouse/pull/81371) ([Kseniia Sumarokova](https://github.com/kssenii))。 -* Iceberg のマニフェストファイルの読み取りを、最初の読み取りクエリが実行されるまで延期するように変更しました。 [#81619](https://github.com/ClickHouse/ClickHouse/pull/81619) ([Daniil Ivanik](https://github.com/divanik)). -* 適用可能な場合は、`GLOBAL [NOT] IN` 述語を `PREWHERE` 句に移動できるようにしました。 [#79996](https://github.com/ClickHouse/ClickHouse/pull/79996) ([Eduard Karacharov](https://github.com/korowa)). - - - - +* クエリパイプラインにおける Resize ステップでの競合状態を解消しました。 [#77562](https://github.com/ClickHouse/ClickHouse/pull/77562) ([Zhiguo Zhou](https://github.com/ZhiguoZh)). +* ネットワーク接続に紐づく単一スレッドではなく、パイプラインスレッドにブロックの圧縮/解凍およびシリアル化/逆シリアル化処理をオフロードするオプションを導入しました。設定 `enable_parallel_blocks_marshalling` で制御できます。これにより、イニシエータとリモートノード間で大量のデータを転送する分散クエリの高速化が見込まれます。 [#78694](https://github.com/ClickHouse/ClickHouse/pull/78694) ([Nikita Taranov](https://github.com/nickitat))。 +* すべての Bloom フィルター型のパフォーマンスを改善。[OpenHouse カンファレンスの動画](https://www.youtube.com/watch?v=yIVz0NKwQvA\&pp=ygUQb3BlbmhvdXNlIG9wZW5haQ%3D%3D) [#79800](https://github.com/ClickHouse/ClickHouse/pull/79800)([Delyan Kratunov](https://github.com/dkratunov))。 +* 片方の集合が空の場合に `UniqExactSet::merge` に高速パスを導入しました。また、LHS の集合が 2 レベルで RHS が 1 レベルの場合、RHS を 2 レベルに変換しないようにしました。 [#79971](https://github.com/ClickHouse/ClickHouse/pull/79971) ([Nikita Taranov](https://github.com/nickitat))。 +* 2レベルハッシュテーブルの使用時におけるメモリ再利用効率を改善し、ページフォールトを削減しました。これにより GROUP BY を高速化します。 [#80245](https://github.com/ClickHouse/ClickHouse/pull/80245) ([Jiebin Sun](https://github.com/jiebinn)). +* クエリ条件キャッシュで不要な更新を避け、ロック競合を削減しました。 [#80247](https://github.com/ClickHouse/ClickHouse/pull/80247) ([Jiebin Sun](https://github.com/jiebinn)). +* `concatenateBlocks` に対する軽微な最適化。並列ハッシュ結合にも効果がある可能性が高い。[#80328](https://github.com/ClickHouse/ClickHouse/pull/80328) ([李扬](https://github.com/taiyang-li))。 +* 主キー範囲からマーク範囲を選択する際、主キーが関数でラップされている場合には二分探索を使用できませんでした。このPRによりこの制限が緩和され、主キーが常に単調な関数のチェーンでラップされている場合、またはRPNに常に真となる要素が含まれている場合には、引き続き二分探索を適用できるようになりました。[#45536](https://github.com/ClickHouse/ClickHouse/issues/45536) をクローズします。 [#80597](https://github.com/ClickHouse/ClickHouse/pull/80597)([zoomxi](https://github.com/zoomxi))。 +* `Kafka` エンジンのシャットダウン速度を改善しました(複数の `Kafka` テーブルがある場合に発生していた余分な 3 秒の遅延を解消)。 [#80796](https://github.com/ClickHouse/ClickHouse/pull/80796) ([Azat Khuzhin](https://github.com/azat)). +* 非同期インサート: INSERT クエリのメモリ使用量を削減し、パフォーマンスを向上させます。 [#80972](https://github.com/ClickHouse/ClickHouse/pull/80972) ([Raúl Marín](https://github.com/Algunenano)). +* ログテーブルが無効になっている場合はプロセッサのプロファイリングを行わないようにしました。 [#81256](https://github.com/ClickHouse/ClickHouse/pull/81256) ([Raúl Marín](https://github.com/Algunenano))。これにより、ごく短いクエリの実行が高速化されます。 +* ソースが要求どおりの値である場合に `toFixedString` を高速化。 [#81257](https://github.com/ClickHouse/ClickHouse/pull/81257) ([Raúl Marín](https://github.com/Algunenano)). +* ユーザーにクォータ制限がない場合はクォータ値を処理しないようにしました。[#81549](https://github.com/ClickHouse/ClickHouse/pull/81549)([Raúl Marín](https://github.com/Algunenano))。これにより、ごく短いクエリの実行が高速になります。 +* メモリトラッキングにおける性能低下の問題を修正しました。 [#81694](https://github.com/ClickHouse/ClickHouse/pull/81694) ([Michael Kolupaev](https://github.com/al13n321)). +* 分散クエリにおけるシャーディングキーの最適化を改善しました。 [#78452](https://github.com/ClickHouse/ClickHouse/pull/78452) ([fhw12345](https://github.com/fhw12345)). +* 並列レプリカ: すべての読み取りタスクが他のレプリカに割り当てられている場合、未使用かつ遅いレプリカを待機しないようにしました。 [#80199](https://github.com/ClickHouse/ClickHouse/pull/80199) ([Igor Nikonov](https://github.com/devcrafter)). +* 並列レプリカでは、接続タイムアウトが個別の設定で管理されるようになりました。`parallel_replicas_connect_timeout_ms` 設定を参照してください。それ以前は、並列レプリカクエリの接続タイムアウト値として `connect_timeout_with_failover_ms`/`connect_timeout_with_failover_secure_ms` 設定が使用されていました(デフォルト値は 1 秒)。[#80421](https://github.com/ClickHouse/ClickHouse/pull/80421)([Igor Nikonov](https://github.com/devcrafter))。 +* ジャーナリング対応ファイルシステムでは、`mkdir` はディスクに永続化されるファイルシステムのジャーナルに書き込まれます。ディスクが遅い場合、これに長い時間がかかることがあります。これを `reserve lock` のスコープ外に移動しました。 [#81371](https://github.com/ClickHouse/ClickHouse/pull/81371) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Iceberg のマニフェストファイルの読み込みを、最初の読み取りクエリが実行されるまで遅延させました。 [#81619](https://github.com/ClickHouse/ClickHouse/pull/81619) ([Daniil Ivanik](https://github.com/divanik)). +* 該当する場合、`GLOBAL [NOT] IN` 述語を `PREWHERE` 句に移動できるようにしました。 [#79996](https://github.com/ClickHouse/ClickHouse/pull/79996) ([Eduard Karacharov](https://github.com/korowa)). #### 改善 -* `EXPLAIN SYNTAX` は新しいアナライザーを使用するようになりました。クエリツリーから構築された AST を返します。クエリツリーを AST に変換する前に適用するパスの回数を制御するためのオプション `query_tree_passes` が追加されました。[#74536](https://github.com/ClickHouse/ClickHouse/pull/74536)([Vladimir Cherkasov](https://github.com/vdimir))。 -* Native フォーマットにおいて Dynamic と JSON 向けのフラット化シリアル化方式を実装しました。これにより、Dynamic 向けの shared variant や JSON 向けの shared data といった特別な構造を用いずに、Dynamic および JSON データをシリアル化/デシリアル化できるようになります。このシリアル化方式は、`output_format_native_use_flattened_dynamic_and_json_serialization` を設定することで有効にできます。これにより、さまざまな言語で実装されたクライアントにおいて、TCP プロトコル上での Dynamic および JSON のサポートを容易にできます。 [#80499](https://github.com/ClickHouse/ClickHouse/pull/80499) ([Pavel Kruglov](https://github.com/Avogar)). -* エラー `AuthenticationRequired` の発生後に `S3` のクレデンシャルを更新するようにしました。 [#77353](https://github.com/ClickHouse/ClickHouse/pull/77353) ([Vitaly Baranov](https://github.com/vitlibar)). -* `system.asynchronous_metrics` に辞書メトリクスを追加: `DictionaryMaxUpdateDelay` - 辞書更新の最大遅延時間(秒)。`DictionaryTotalFailedUpdates` - 直近の正常な読み込み以降に、すべての辞書で発生したエラーの総数。[#78175](https://github.com/ClickHouse/ClickHouse/pull/78175) ([Vlad](https://github.com/codeworse))。 -* 破損したテーブルを退避させるために作成された可能性のあるデータベースに関する警告を追加。 [#78841](https://github.com/ClickHouse/ClickHouse/pull/78841) ([János Benjamin Antal](https://github.com/antaljanosbenjamin))。 -* `S3Queue`、`AzureQueue` エンジンに `_time` 仮想カラムを追加。 [#78926](https://github.com/ClickHouse/ClickHouse/pull/78926) ([Anton Ivashkin](https://github.com/ianton-ru))。 -* CPU 過負荷時に接続をドロップする挙動を制御する設定をホットリロード可能にしました。 [#79052](https://github.com/ClickHouse/ClickHouse/pull/79052) ([Alexey Katsman](https://github.com/alexkats)). -* Azure Blob Storage 上のプレーンディスク向けに `system.tables` で報告されるデータパスにコンテナのプレフィックスを追加し、S3 および GCP と報告形式を統一しました。 [#79241](https://github.com/ClickHouse/ClickHouse/pull/79241) ([Julia Kartseva](https://github.com/jkartseva)). -* 現在、clickhouse-client と local は、`param_`(アンダースコア)に加えて、`param-`(ダッシュ)形式のクエリパラメータも受け付けるようになりました。これにより、[#63093](https://github.com/ClickHouse/ClickHouse/issues/63093) がクローズされました。[#79429](https://github.com/ClickHouse/ClickHouse/pull/79429)([Engel Danila](https://github.com/aaaengel))。 -* checksum を有効にしてローカルからリモート S3 へデータをコピーする際に適用される帯域幅ディスカウントに関する警告メッセージを、より詳細なものにしました。 [#79464](https://github.com/ClickHouse/ClickHouse/pull/79464) ([VicoWu](https://github.com/VicoWu)). -* 以前は、`input_format_parquet_max_block_size = 0`(無効な値)の場合、ClickHouse がハングすることがありましたが、この動作は修正されました。これにより [#79394](https://github.com/ClickHouse/ClickHouse/issues/79394) がクローズされました。 [#79601](https://github.com/ClickHouse/ClickHouse/pull/79601)([abashkeev](https://github.com/abashkeev))。 -* `startup_scripts` に `throw_on_error` 設定を追加しました。`throw_on_error` が true の場合、すべてのクエリが正常に完了しない限りサーバーは起動しません。デフォルトでは `throw_on_error` は false であり、従来の動作が維持されます。 [#79732](https://github.com/ClickHouse/ClickHouse/pull/79732) ([Aleksandr Musorin](https://github.com/AVMusorin))。 -* 任意の種類の `http_handlers` で `http_response_headers` を追加できるようにしました。 [#79975](https://github.com/ClickHouse/ClickHouse/pull/79975) ([Andrey Zvonov](https://github.com/zvonand)). -* 関数 `reverse` が `Tuple` データ型をサポートするようになりました。これにより [#80053](https://github.com/ClickHouse/ClickHouse/issues/80053) がクローズされました。[#80083](https://github.com/ClickHouse/ClickHouse/pull/80083)([flynn](https://github.com/ucasfl))。 -* [#75817](https://github.com/ClickHouse/ClickHouse/issues/75817) を解決: `system.zookeeper` テーブルから `auxiliary_zookeepers` データを取得できるようにする。[#80146](https://github.com/ClickHouse/ClickHouse/pull/80146)([Nikolay Govorov](https://github.com/mrdimidium))。 -* サーバーの TCP ソケットに関する非同期メトリクスを追加。これにより可観測性が向上します。[#80187](https://github.com/ClickHouse/ClickHouse/issues/80187) をクローズします。[#80188](https://github.com/ClickHouse/ClickHouse/pull/80188)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* `SimpleAggregateFunction` として `anyLast_respect_nulls` および `any_respect_nulls` をサポートします。 [#80219](https://github.com/ClickHouse/ClickHouse/pull/80219) ([Diskein](https://github.com/Diskein))。 -* レプリケートされたデータベースに対する不要な `adjustCreateQueryForBackup` の呼び出しを削除。[#80282](https://github.com/ClickHouse/ClickHouse/pull/80282)([Vitaly Baranov](https://github.com/vitlibar))。 -* `clickhouse-local` で、`-- --config.value='abc'` のように `--` の後ろに続く追加オプションを、等号(`=`)なしで指定できるようにしました。[#80292](https://github.com/ClickHouse/ClickHouse/issues/80292) をクローズ。[#80293](https://github.com/ClickHouse/ClickHouse/pull/80293)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* `SHOW ... LIKE` クエリ内のメタ文字を強調表示するようにしました。これにより [#80275](https://github.com/ClickHouse/ClickHouse/issues/80275) がクローズされました。[#80297](https://github.com/ClickHouse/ClickHouse/pull/80297)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* `clickhouse-local` で SQL UDF を永続化し、以前に作成した関数が起動時に読み込まれるようにしました。これにより [#80085](https://github.com/ClickHouse/ClickHouse/issues/80085) が解決されます。[#80300](https://github.com/ClickHouse/ClickHouse/pull/80300)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 予備 DISTINCT ステップに対する EXPLAIN プランでの説明を修正。 [#80330](https://github.com/ClickHouse/ClickHouse/pull/80330) ([UnamedRus](https://github.com/UnamedRus)). -* ODBC/JDBC で名前付きコレクションを使用できるようにしました。 [#80334](https://github.com/ClickHouse/ClickHouse/pull/80334) ([Andrey Zvonov](https://github.com/zvonand)). -* 読み取り専用および破損状態のディスク数を示すメトリクス。DiskLocalCheckThread が開始されたときにインジケーターをログ出力します。 [#80391](https://github.com/ClickHouse/ClickHouse/pull/80391) ([VicoWu](https://github.com/VicoWu)). -* `projection` を使用する `s3_plain_rewritable` ストレージのサポートを実装しました。以前のバージョンでは、`projection` を参照している S3 内のメタデータオブジェクトは、移動されても更新されませんでした。[#70258](https://github.com/ClickHouse/ClickHouse/issues/70258) をクローズします。[#80393](https://github.com/ClickHouse/ClickHouse/pull/80393)([Sav](https://github.com/sberss))。 -* `SYSTEM UNFREEZE` コマンドは、読み取り専用ディスクおよび書き込み一度きりディスク内のパーツを検索しようとしなくなりました。これにより [#80430](https://github.com/ClickHouse/ClickHouse/issues/80430) がクローズされました。 [#80432](https://github.com/ClickHouse/ClickHouse/pull/80432) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* マージされたパーツに関するログメッセージのログレベルを下げました。 [#80476](https://github.com/ClickHouse/ClickHouse/pull/80476) ([Hans Krutzer](https://github.com/hkrutzer)). -* Iceberg テーブルのパーティションプルーニングのデフォルト動作を変更。 [#80583](https://github.com/ClickHouse/ClickHouse/pull/80583) ([Melvyn Peignon](https://github.com/melvynator)). -* インデックス検索アルゴリズムのオブザーバビリティ向上のために、2 つの新しい ProfileEvents を追加: `IndexBinarySearchAlgorithm` と `IndexGenericExclusionSearchAlgorithm`。[#80679](https://github.com/ClickHouse/ClickHouse/pull/80679)([Pablo Marcos](https://github.com/pamarcos))。 -* 古いカーネルで `MADV_POPULATE_WRITE` がサポートされていないことをログに出力しないようにした(ログがノイズであふれないようにするため)。 [#80704](https://github.com/ClickHouse/ClickHouse/pull/80704) ([Robert Schulze](https://github.com/rschu1ze)). -* `TTL` 式において `Date32` と `DateTime64` のサポートを追加しました。 [#80710](https://github.com/ClickHouse/ClickHouse/pull/80710) ([Andrey Zvonov](https://github.com/zvonand)). -* `max_merge_delayed_streams_for_parallel_write` の互換性に関する値を調整しました。 [#80760](https://github.com/ClickHouse/ClickHouse/pull/80760) ([Azat Khuzhin](https://github.com/azat)). -* クラッシュの修正: デストラクタ内で一時ファイル(ディスク上に一時データをスピルするために使用される)を削除しようとした際に例外がスローされると、プログラムが終了してしまう可能性がある問題を修正しました。 [#80776](https://github.com/ClickHouse/ClickHouse/pull/80776) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* `SYSTEM SYNC REPLICA` に `IF EXISTS` 修飾子を追加しました。 [#80810](https://github.com/ClickHouse/ClickHouse/pull/80810) ([Raúl Marín](https://github.com/Algunenano)). -* "Having zero bytes, but read range is not finished..." に関する例外メッセージを詳しくし、`system.filesystem_cache` に finished_download_time 列を追加しました。 [#80849](https://github.com/ClickHouse/ClickHouse/pull/80849) ([Kseniia Sumarokova](https://github.com/kssenii)). -* indexes = 1 で使用している場合、`EXPLAIN` の出力に検索アルゴリズムのセクションを追加します。"binary search" または "generic exclusion search" のいずれかが表示されます。[#80881](https://github.com/ClickHouse/ClickHouse/pull/80881) ([Pablo Marcos](https://github.com/pamarcos))。 -* 2024年初め、新しいアナライザがデフォルトで有効化されていなかったため、MySQL ハンドラーでは `prefer_column_name_to_alias` が true にハードコードされていました。現在では、このハードコードを解除できるようになりました。 [#80916](https://github.com/ClickHouse/ClickHouse/pull/80916) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* `system.iceberg_history` は、glue や iceberg rest などのカタログデータベースの履歴も表示するようになりました。また、一貫性を保つために、`system.iceberg_history` 内の `table_name` および `database_name` カラムを、それぞれ `table` と `database` にリネームしました。 [#80975](https://github.com/ClickHouse/ClickHouse/pull/80975) ([alesapin](https://github.com/alesapin)). -* `merge` テーブル関数で読み取り専用モードをサポートし、使用時に `CREATE TEMPORARY TABLE` 権限を付与する必要がないようにしました。 [#80981](https://github.com/ClickHouse/ClickHouse/pull/80981) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). -* インメモリキャッシュの可観測性を改善しました(不完全な `system.asynchronouse_metrics` ではなく、`system.metrics` を通じてキャッシュに関する情報を公開)。インメモリキャッシュのサイズ(バイト数)を `dashboard.html` に追加しました。`VectorSimilarityIndexCacheSize` / `IcebergMetadataFilesCacheSize` は `VectorSimilarityIndexCacheBytes` / `IcebergMetadataFilesCacheBytes` に名称変更されました。 [#81023](https://github.com/ClickHouse/ClickHouse/pull/81023) ([Azat Khuzhin](https://github.com/azat)). -* `system.rocksdb` から読み取る際に、`RocksDB` テーブルを含むことができないエンジンのデータベースを無視するようにしました。 [#81083](https://github.com/ClickHouse/ClickHouse/pull/81083) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). -* `clickhouse-local` の設定ファイルで `filesystem_caches` と `named_collections` を使用できるようにしました。 [#81105](https://github.com/ClickHouse/ClickHouse/pull/81105) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* `INSERT` クエリにおける `PARTITION BY` のハイライトを修正しました。以前のバージョンでは、`PARTITION BY` はキーワードとしてハイライトされていませんでした。[#81106](https://github.com/ClickHouse/ClickHouse/pull/81106)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* Web UI において、次の 2 つの小さな改善を行いました: - 出力を伴わない `CREATE` や `INSERT` などのクエリを正しく処理するようにしました(ごく最近まで、これらのクエリではスピナーが無限に回り続けていました)、- テーブルをダブルクリックした際に、先頭までスクロールするようにしました。 [#81131](https://github.com/ClickHouse/ClickHouse/pull/81131) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* `MemoryResidentWithoutPageCache` メトリックは、ユーザー空間ページキャッシュを除いたサーバープロセスの物理メモリ使用量を、バイト単位で示します。これは、ユーザー空間ページキャッシュが利用されている場合の実際のメモリ使用量を、より正確に把握するのに役立ちます。ユーザー空間ページキャッシュが無効になっている場合、この値は `MemoryResident` と等しくなります。 [#81233](https://github.com/ClickHouse/ClickHouse/pull/81233) ([Jayme Bird](https://github.com/jaymebrd))。 -* クライアント、ローカルサーバー、keeper クライアント、および disks アプリで手動でログに記録された例外を記録済みとしてマークし、二重にログ出力されないようにしました。 [#81271](https://github.com/ClickHouse/ClickHouse/pull/81271) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). -* `use_skip_indexes_if_final` と `use_skip_indexes_if_final_exact_mode` の設定は、デフォルト値が `True` になりました。`FINAL` 句を含むクエリは、(該当する場合)スキップインデックスを使用してグラニュールの候補を絞り込み、一致する primary key 範囲に対応する追加のグラニュールも読み取るようになりました。従来の、近似的/不正確な結果を返す挙動が必要なユーザーは、慎重に評価したうえで `use_skip_indexes_if_final_exact_mode` を FALSE に設定できます。[#81331](https://github.com/ClickHouse/ClickHouse/pull/81331)([Shankar Iyer](https://github.com/shankar-iyer))。 -* Web UI で複数のクエリを開いている場合、カーソル位置にあるクエリが実行されます。 [#80977](https://github.com/ClickHouse/ClickHouse/issues/80977) の継続です。 [#81354](https://github.com/ClickHouse/ClickHouse/pull/81354)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* このPRでは、変換関数に対する単調性チェックにおける `is_strict` の実装上の問題に対処しています。現在、`toFloat64(UInt32)` や `toDate(UInt8)` などの一部の変換関数は、本来は true を返すべきところで、`is_strict` を誤って false として返しています。[#81359](https://github.com/ClickHouse/ClickHouse/pull/81359) ([zoomxi](https://github.com/zoomxi))。 -* `KeyCondition` が連続範囲にマッチするかどうかをチェックする際、キーが非厳密な関数チェーンでラップされている場合には、`Constraint::POINT` を `Constraint::RANGE` に変換する必要が生じることがあります。例えば、`toDate(event_time) = '2025-06-03'` は `event_time` に対して次の範囲を意味します: ['2025-06-03 00:00:00', '2025-06-04 00:00:00')。この PR はこの挙動を修正します。 [#81400](https://github.com/ClickHouse/ClickHouse/pull/81400) ([zoomxi](https://github.com/zoomxi)). -* `--host` または `--port` が指定されている場合、`clickhouse` / `ch` エイリアスは `clickhouse-local` ではなく `clickhouse-client` を実行します。[#79422](https://github.com/ClickHouse/ClickHouse/issues/79422) に関する継続対応。[#65252](https://github.com/ClickHouse/ClickHouse/issues/65252) をクローズ。[#81509](https://github.com/ClickHouse/ClickHouse/pull/81509)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* Keeper の応答時間分布データが得られたので、メトリクス用のヒストグラムのバケットを調整できるようになりました。 [#81516](https://github.com/ClickHouse/ClickHouse/pull/81516) ([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 -* プロファイルイベント `PageCacheReadBytes` を追加。 [#81742](https://github.com/ClickHouse/ClickHouse/pull/81742) ([Kseniia Sumarokova](https://github.com/kssenii)). -* ファイルシステムキャッシュで発生していた「バイト数が 0 だが範囲が終了していない」という論理エラーを修正。 [#81868](https://github.com/ClickHouse/ClickHouse/pull/81868) ([Kseniia Sumarokova](https://github.com/kssenii)). - - - - - -#### バグ修正(公式安定版リリースにおけるユーザー可視の不具合) - -* `SELECT EXCEPT` クエリを使用するパラメータ化ビューを修正。[#49447](https://github.com/ClickHouse/ClickHouse/issues/49447) をクローズ。[#57380](https://github.com/ClickHouse/ClickHouse/pull/57380)([Nikolay Degterinsky](https://github.com/evillique))。 -* Analyzer: JOIN におけるカラム型の昇格後のカラム射影名を修正。 [#63345](https://github.com/ClickHouse/ClickHouse/issues/63345) をクローズ。 [#63519](https://github.com/ClickHouse/ClickHouse/pull/63519) ([Dmitry Novik](https://github.com/novikd))。 -* analyzer_compatibility_join_using_top_level_identifier が有効な場合に、列名の衝突が発生する際の論理エラーを修正しました。 [#75676](https://github.com/ClickHouse/ClickHouse/pull/75676) ([Vladimir Cherkasov](https://github.com/vdimir)). -* `allow_push_predicate_ast_for_distributed_subqueries` が有効な場合の、プッシュダウンされた述語内における CTE の扱いを修正しました。[#75647](https://github.com/ClickHouse/ClickHouse/issues/75647) と [#79672](https://github.com/ClickHouse/ClickHouse/issues/79672) を修正しました。[#77316](https://github.com/ClickHouse/ClickHouse/pull/77316)([Dmitry Novik](https://github.com/novikd))。 -* `SYSTEM SYNC REPLICA LIGHTWEIGHT 'foo'` が、指定したレプリカが存在しない場合でも誤って成功を報告してしまう問題を修正しました。コマンドは、同期を試行する前に Keeper 内に対象のレプリカが存在するかを正しく検証するようになりました。 [#78405](https://github.com/ClickHouse/ClickHouse/pull/78405) ([Jayme Bird](https://github.com/jaymebrd)). -* `ON CLUSTER` クエリの `CONSTRAINT` セクションで `currentDatabase` 関数が使用されたごく限定的な状況で発生するクラッシュを修正しました。 [#78100](https://github.com/ClickHouse/ClickHouse/issues/78100) をクローズしました。 [#79070](https://github.com/ClickHouse/ClickHouse/pull/79070) ([pufit](https://github.com/pufit))。 -* サーバー間クエリでの外部ロールの受け渡しを修正。 [#79099](https://github.com/ClickHouse/ClickHouse/pull/79099) ([Andrey Zvonov](https://github.com/zvonand)). -* SingleValueDataGeneric では Field の代わりに IColumn を使用するようにしてください。これにより、`Dynamic/Variant/JSON` 型に対する `argMax` など一部の集計関数で誤った戻り値が返されていた問題が解消されます。 [#79166](https://github.com/ClickHouse/ClickHouse/pull/79166) ([Pavel Kruglov](https://github.com/Avogar))。 -* Azure Blob Storage 向けの `use_native_copy` および `allow_azure_native_copy` 設定の適用を修正し、資格情報が一致する場合にのみネイティブコピーを使用するように更新しました。これにより [#78964](https://github.com/ClickHouse/ClickHouse/issues/78964) が解決されます。[#79561](https://github.com/ClickHouse/ClickHouse/pull/79561)([Smita Kulkarni](https://github.com/SmitaRKulkarni))。 -* このカラムが相関付けられているかどうかを確認する処理において、カラムの起源スコープが不明な場合に発生していた論理エラーを修正しました。 [#78183](https://github.com/ClickHouse/ClickHouse/issues/78183) を修正。 [#79451](https://github.com/ClickHouse/ClickHouse/issues/79451) を修正。 [#79727](https://github.com/ClickHouse/ClickHouse/pull/79727)([Dmitry Novik](https://github.com/novikd))。 -* ColumnConst と Analyzer を使用した GROUPING SETS で誤った結果が返される問題を修正。 [#79743](https://github.com/ClickHouse/ClickHouse/pull/79743) ([Andrey Zvonov](https://github.com/zvonand)). -* ローカルレプリカが古くなった distributed テーブルを読み取る際に、ローカルシャードの結果が重複する問題を修正。[#79761](https://github.com/ClickHouse/ClickHouse/pull/79761) ([Eduard Karacharov](https://github.com/korowa)). -* 負の符号ビットを持つ NaN のソート順を修正。 [#79847](https://github.com/ClickHouse/ClickHouse/pull/79847) ([Pervakov Grigorii](https://github.com/GrigoryPervakov))。 -* GROUP BY ALL は GROUPING 句を考慮しなくなりました。[#79915](https://github.com/ClickHouse/ClickHouse/pull/79915) ([Yarik Briukhovetskyi](https://github.com/yariks5s))。 -* `TopK` / `TopKWeighted` 関数における誤った状態のマージ処理を修正しました。これにより、容量が使い切られていない場合でも誤差が過大になることがありました。 [#79939](https://github.com/ClickHouse/ClickHouse/pull/79939) ([Joel Höner](https://github.com/athre0z)). -* `azure_blob_storage` オブジェクトストレージで `readonly` 設定が反映されるようにしました。 [#79954](https://github.com/ClickHouse/ClickHouse/pull/79954) ([Julia Kartseva](https://github.com/jkartseva)). -* バックスラッシュでエスケープされた文字を含む `match(column, '^…')` を使用した場合に発生していた、クエリ結果の誤りおよびメモリ不足によるクラッシュを修正しました。 [#79969](https://github.com/ClickHouse/ClickHouse/pull/79969) ([filimonov](https://github.com/filimonov)). -* データレイクに対する Hive パーティショニングを無効化。部分的に [https://github.com/issues/assigned?issue=ClickHouse%7CClickHouse%7C79937](https://github.com/issues/assigned?issue=ClickHouse%7CClickHouse%7C79937) に対処。[#80005](https://github.com/ClickHouse/ClickHouse/pull/80005)([Daniil Ivanik](https://github.com/divanik))。 -* ラムダ式を含むスキップインデックスが適用されない問題を修正しました。インデックス定義内の高レベル関数がクエリ内のものと完全に一致する場合に、正しく適用されるようにしました。 [#80025](https://github.com/ClickHouse/ClickHouse/pull/80025) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). -* レプリケーションログからの `ATTACH_PART` コマンドを実行しているレプリカで、パーツをアタッチする際のメタデータバージョンを修正しました。 [#80038](https://github.com/ClickHouse/ClickHouse/pull/80038) ([Aleksei Filatov](https://github.com/aalexfvk)). -* 他の関数とは異なり、Executable User Defined Functions (eUDF) の名前は `system.query_log` テーブルの `used_functions` 列に追加されていませんでした。このPRでは、リクエストで eUDF が使用された場合にその eUDF 名を追加するようにしました。 [#80073](https://github.com/ClickHouse/ClickHouse/pull/80073) ([Kyamran](https://github.com/nibblerenush))。 -* Arrow フォーマットにおける LowCardinality(FixedString) の論理エラーを修正。 [#80156](https://github.com/ClickHouse/ClickHouse/pull/80156) ([Pavel Kruglov](https://github.com/Avogar)). +* `EXPLAIN SYNTAX` は新しいアナライザーを使用するようになりました。クエリツリーから構築された AST を返します。クエリツリーを AST に変換する前に適用されるパス数を制御するためのオプション `query_tree_passes` が追加されました。 [#74536](https://github.com/ClickHouse/ClickHouse/pull/74536) ([Vladimir Cherkasov](https://github.com/vdimir))。 +* Dynamic と JSON 向けに、フラット化されたシリアル化を行う Native フォーマットでの実装を追加しました。これにより、Dynamic 用の shared variant や JSON 用の shared data のような特別な構造を用いることなく、Dynamic および JSON データをシリアル化/デシリアル化できます。このシリアル化は、`output_format_native_use_flattened_dynamic_and_json_serialization` を設定することで有効化できます。また、このシリアル化は、さまざまな言語で実装されたクライアントにおいて、TCP プロトコル経由で Dynamic および JSON をより簡単にサポートするために利用できます。[#80499](https://github.com/ClickHouse/ClickHouse/pull/80499) ([Pavel Kruglov](https://github.com/Avogar)). +* エラー `AuthenticationRequired` 発生後に `S3` の認証情報を再取得するようにしました。 [#77353](https://github.com/ClickHouse/ClickHouse/pull/77353) ([Vitaly Baranov](https://github.com/vitlibar)). +* `system.asynchronous_metrics` にディクショナリ関連のメトリクスを追加しました。- `DictionaryMaxUpdateDelay` - ディクショナリ更新の最大遅延時間(秒)。- `DictionaryTotalFailedUpdates` - すべてのディクショナリで、最後に正常に読み込まれてから以降に発生したエラーの回数。[#78175](https://github.com/ClickHouse/ClickHouse/pull/78175) ([Vlad](https://github.com/codeworse))。 +* 破損したテーブルを退避する目的で作成された可能性があるデータベースについての警告を追加。 [#78841](https://github.com/ClickHouse/ClickHouse/pull/78841) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). +* `S3Queue`、`AzureQueue` エンジンに `_time` 仮想カラムを追加。[#78926](https://github.com/ClickHouse/ClickHouse/pull/78926)([Anton Ivashkin](https://github.com/ianton-ru))。 +* CPU 過負荷時の接続ドロップを制御する設定をホットリロード対応にしました。 [#79052](https://github.com/ClickHouse/ClickHouse/pull/79052) ([Alexey Katsman](https://github.com/alexkats)). +* Azure Blob Storage 上のプレーンディスクで、`system.tables` に報告されるデータパスにコンテナプレフィックスを追加し、S3 および GCP と一貫した形式で報告されるようにしました。 [#79241](https://github.com/ClickHouse/ClickHouse/pull/79241) ([Julia Kartseva](https://github.com/jkartseva)). +* 現在 clickhouse-client と local は、`param_`(アンダースコア)に加えて `param-`(ダッシュ)としてもクエリパラメータを受け付けます。これにより [#63093](https://github.com/ClickHouse/ClickHouse/issues/63093) が解決されました。[#79429](https://github.com/ClickHouse/ClickHouse/pull/79429)([Engel Danila](https://github.com/aaaengel))。 +* ローカルからリモート S3 へデータをコピーする際にチェックサムを有効にした場合の帯域幅割引に関する詳細な警告メッセージ。 [#79464](https://github.com/ClickHouse/ClickHouse/pull/79464) ([VicoWu](https://github.com/VicoWu))。 +* 以前は、`input_format_parquet_max_block_size = 0`(無効な値)の場合、ClickHouse がハングする問題がありましたが、この問題は修正されました。これにより [#79394](https://github.com/ClickHouse/ClickHouse/issues/79394) がクローズされました。[#79601](https://github.com/ClickHouse/ClickHouse/pull/79601)([abashkeev](https://github.com/abashkeev))。 +* `startup_scripts` に `throw_on_error` 設定を追加しました。`throw_on_error` が true の場合、すべてのクエリが正常に完了しない限りサーバーは起動しません。デフォルトでは `throw_on_error` は false であり、以前の動作が維持されます。 [#79732](https://github.com/ClickHouse/ClickHouse/pull/79732) ([Aleksandr Musorin](https://github.com/AVMusorin))。 +* 任意の種類の `http_handlers` で `http_response_headers` を追加できるようになりました。 [#79975](https://github.com/ClickHouse/ClickHouse/pull/79975) ([Andrey Zvonov](https://github.com/zvonand)). +* 関数 `reverse` が `Tuple` データ型をサポートするようになりました。[#80053](https://github.com/ClickHouse/ClickHouse/issues/80053) をクローズします。[#80083](https://github.com/ClickHouse/ClickHouse/pull/80083)([flynn](https://github.com/ucasfl))。 +* [#75817](https://github.com/ClickHouse/ClickHouse/issues/75817) を解決しました。`system.zookeeper` テーブルから `auxiliary_zookeepers` のデータを取得できるようにしました。[#80146](https://github.com/ClickHouse/ClickHouse/pull/80146) ([Nikolay Govorov](https://github.com/mrdimidium))。 +* サーバーの TCP ソケットに関する非同期メトリクスを追加しました。これによりオブザーバビリティが向上します。[#80187](https://github.com/ClickHouse/ClickHouse/issues/80187) をクローズしました。[#80188](https://github.com/ClickHouse/ClickHouse/pull/80188)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* `anyLast_respect_nulls` と `any_respect_nulls` を `SimpleAggregateFunction` としてサポートするようにしました。 [#80219](https://github.com/ClickHouse/ClickHouse/pull/80219) ([Diskein](https://github.com/Diskein)). +* レプリケーテッドデータベース向けの不要な `adjustCreateQueryForBackup` の呼び出しを削除しました。 [#80282](https://github.com/ClickHouse/ClickHouse/pull/80282) ([Vitaly Baranov](https://github.com/vitlibar)). +* `-- --config.value='abc'` のような `--` の後に続く追加オプションを、`clickhouse-local` で `=` 記号なしでも受け付けるようにしました。[#80292](https://github.com/ClickHouse/ClickHouse/issues/80292) をクローズ。[#80293](https://github.com/ClickHouse/ClickHouse/pull/80293)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* `SHOW ... LIKE` クエリ内のメタ文字をハイライト表示します。これにより [#80275](https://github.com/ClickHouse/ClickHouse/issues/80275) がクローズされます。[#80297](https://github.com/ClickHouse/ClickHouse/pull/80297)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* `clickhouse-local` で SQL UDF を永続化できるようにしました。以前に作成された関数は起動時に読み込まれるようになります。これにより [#80085](https://github.com/ClickHouse/ClickHouse/issues/80085) が解決されました。[#80300](https://github.com/ClickHouse/ClickHouse/pull/80300) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 予備的な DISTINCT ステップの explain plan における説明を修正。 [#80330](https://github.com/ClickHouse/ClickHouse/pull/80330) ([UnamedRus](https://github.com/UnamedRus))。 +* ODBC/JDBC で名前付きコレクションを使用可能にしました。 [#80334](https://github.com/ClickHouse/ClickHouse/pull/80334) ([Andrey Zvonov](https://github.com/zvonand)). +* 読み取り専用ディスクおよび故障ディスクの数に関するメトリクスを追加。DiskLocalCheckThread の開始をログに記録するインジケーターを追加。[#80391](https://github.com/ClickHouse/ClickHouse/pull/80391) ([VicoWu](https://github.com/VicoWu))。 +* `s3_plain_rewritable` ストレージでプロジェクションをサポートするようにしました。以前のバージョンでは、移動されたときにプロジェクションを参照している S3 内のメタデータオブジェクトが更新されませんでした。 [#70258](https://github.com/ClickHouse/ClickHouse/issues/70258) をクローズ。 [#80393](https://github.com/ClickHouse/ClickHouse/pull/80393) ([Sav](https://github.com/sberss))。 +* `SYSTEM UNFREEZE` コマンドは、readonly および write-once ディスク上のパーツを参照しなくなりました。これにより [#80430](https://github.com/ClickHouse/ClickHouse/issues/80430) が解決されました。 [#80432](https://github.com/ClickHouse/ClickHouse/pull/80432) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* マージされたパーツ関連のメッセージのログレベルを引き下げました。 [#80476](https://github.com/ClickHouse/ClickHouse/pull/80476) ([Hans Krutzer](https://github.com/hkrutzer)). +* Iceberg テーブルに対するパーティションプルーニングのデフォルト動作を変更しました。 [#80583](https://github.com/ClickHouse/ClickHouse/pull/80583) ([Melvyn Peignon](https://github.com/melvynator))。 +* インデックス検索アルゴリズムの可観測性向上のために、2 つの新しい ProfileEvents `IndexBinarySearchAlgorithm` と `IndexGenericExclusionSearchAlgorithm` を追加しました。[#80679](https://github.com/ClickHouse/ClickHouse/pull/80679)([Pablo Marcos](https://github.com/pamarcos))。 +* 古いカーネルで `MADV_POPULATE_WRITE` がサポートされていないことについて、ログに警告を出さないようにしました(ログがノイズで埋まるのを防ぐため)。 [#80704](https://github.com/ClickHouse/ClickHouse/pull/80704) ([Robert Schulze](https://github.com/rschu1ze)). +* `TTL` 式で `Date32` および `DateTime64` 型をサポートしました。 [#80710](https://github.com/ClickHouse/ClickHouse/pull/80710) ([Andrey Zvonov](https://github.com/zvonand)). +* `max_merge_delayed_streams_for_parallel_write` の互換性用の値を調整しました。 [#80760](https://github.com/ClickHouse/ClickHouse/pull/80760) ([Azat Khuzhin](https://github.com/azat)). +* クラッシュの修正:デストラクタ内で一時ファイル(ディスク上に一時データを退避するために使用されます)を削除しようとした際に例外がスローされると、プログラムが異常終了する可能性がありました。 [#80776](https://github.com/ClickHouse/ClickHouse/pull/80776) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* `SYSTEM SYNC REPLICA` に `IF EXISTS` 修飾子を追加しました。[#80810](https://github.com/ClickHouse/ClickHouse/pull/80810) ([Raúl Marín](https://github.com/Algunenano))。 +* "Having zero bytes, but read range is not finished..." に関する例外メッセージを詳細化し、`system.filesystem_cache` に finished_download_time 列を追加しました。 [#80849](https://github.com/ClickHouse/ClickHouse/pull/80849) ([Kseniia Sumarokova](https://github.com/kssenii)). +* `EXPLAIN` を indexes = 1 と併用した場合、出力に検索アルゴリズムのセクションを追加しました。そこには「binary search」または「generic exclusion search」のいずれかが表示されます。 [#80881](https://github.com/ClickHouse/ClickHouse/pull/80881) ([Pablo Marcos](https://github.com/pamarcos)). +* 2024年初めには、新しい analyzer がデフォルトで有効化されていなかったため、MySQL ハンドラーでは `prefer_column_name_to_alias` が true にハードコードされていました。現在は、このハードコードを解除できるようになりました。 [#80916](https://github.com/ClickHouse/ClickHouse/pull/80916) ([Yarik Briukhovetskyi](https://github.com/yariks5s))。 +* `system.iceberg_history` で glue や iceberg rest のようなカタログデータベースの履歴も表示されるようになりました。また、一貫性のため、`system.iceberg_history` 内の `table_name` および `database_name` 列名をそれぞれ `table` および `database` に変更しました。 [#80975](https://github.com/ClickHouse/ClickHouse/pull/80975) ([alesapin](https://github.com/alesapin))。 +* `merge` テーブル関数で読み取り専用モードをサポートし、使用時に `CREATE TEMPORARY TABLE` 権限を必要としないようにしました。 [#80981](https://github.com/ClickHouse/ClickHouse/pull/80981) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). +* インメモリキャッシュの観測性を改善(不完全な `system.asynchronouse_metrics` ではなく、`system.metrics` でキャッシュに関する情報を公開)。インメモリキャッシュのサイズ(バイト単位)を `dashboard.html` に追加しました。`VectorSimilarityIndexCacheSize` / `IcebergMetadataFilesCacheSize` は `VectorSimilarityIndexCacheBytes` / `IcebergMetadataFilesCacheBytes` にリネームされました。[#81023](https://github.com/ClickHouse/ClickHouse/pull/81023) ([Azat Khuzhin](https://github.com/azat))。 +* `system.rocksdb` から読み取る際に、`RocksDB` テーブルを保持できないエンジンを使用するデータベースを無視するようにしました。 [#81083](https://github.com/ClickHouse/ClickHouse/pull/81083) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +* `clickhouse-local` の設定ファイルで `filesystem_caches` と `named_collections` を許可できるようにしました。 [#81105](https://github.com/ClickHouse/ClickHouse/pull/81105) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* `INSERT` クエリ内での `PARTITION BY` のシンタックスハイライトを修正しました。以前のバージョンでは、`PARTITION BY` がキーワードとしてハイライトされていませんでした。[#81106](https://github.com/ClickHouse/ClickHouse/pull/81106)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* Web UI における 2 つの小さな改善: - `CREATE` や `INSERT` のような出力を持たないクエリを正しく処理するようにしました(つい最近まで、これらのクエリはスピナーが無限に回転し続けていました); - テーブルをダブルクリックした際に、先頭までスクロールするようにしました。 [#81131](https://github.com/ClickHouse/ClickHouse/pull/81131) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* `MemoryResidentWithoutPageCache` メトリクスは、ユーザー空間のページキャッシュを除いた、サーバープロセスが使用している物理メモリ量をバイト単位で示します。これは、ユーザー空間のページキャッシュが利用されている場合に、実際のメモリ使用量をより正確に把握するのに役立ちます。ユーザー空間のページキャッシュが無効化されている場合、この値は `MemoryResident` と等しくなります。 [#81233](https://github.com/ClickHouse/ClickHouse/pull/81233) ([Jayme Bird](https://github.com/jaymebrd))。 +* クライアント、ローカルサーバー、Keeper クライアントおよび Disks アプリで手動で記録された例外に「ログ済み」マークを付け、二重にログが記録されないようにしました。 [#81271](https://github.com/ClickHouse/ClickHouse/pull/81271) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). +* `use_skip_indexes_if_final` と `use_skip_indexes_if_final_exact_mode` の設定は、デフォルトで `True` に設定されるようになりました。`FINAL` 句を含むクエリは、(該当する場合)スキップインデックスを使用してグラニュールを絞り込み、一致する主キー範囲に対応する追加のグラニュールも読み取るようになります。近似的/不正確な結果という従来の挙動が必要なユーザーは、慎重に評価したうえで `use_skip_indexes_if_final_exact_mode` を FALSE に設定できます。 [#81331](https://github.com/ClickHouse/ClickHouse/pull/81331) ([Shankar Iyer](https://github.com/shankar-iyer)). +* Web UI で複数のクエリがある場合、カーソル位置にあるクエリが実行されます。 [#80977](https://github.com/ClickHouse/ClickHouse/issues/80977) の継続です。 [#81354](https://github.com/ClickHouse/ClickHouse/pull/81354)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* このPRは、変換関数の単調性チェックにおける `is_strict` の実装上の問題を修正します。現在、`toFloat64(UInt32)` や `toDate(UInt8)` などの一部の変換関数は、本来は true を返すべきところで、`is_strict` を誤って false として返しています。[#81359](https://github.com/ClickHouse/ClickHouse/pull/81359) ([zoomxi](https://github.com/zoomxi))。 +* `KeyCondition` が連続した範囲にマッチするかをチェックする際、キーが非厳密な関数チェーンでラップされている場合には、`Constraint::POINT` を `Constraint::RANGE` に変換する必要が生じることがあります。たとえば、`toDate(event_time) = '2025-06-03'` は、`event_time` に対して [`2025-06-03 00:00:00`, `2025-06-04 00:00:00`) の範囲を意味します。この PR はこの動作を修正します。 [#81400](https://github.com/ClickHouse/ClickHouse/pull/81400) ([zoomxi](https://github.com/zoomxi)). +* `clickhouse`/`ch` エイリアスは、`--host` または `--port` が指定されている場合、`clickhouse-local` ではなく `clickhouse-client` を呼び出します。[#79422](https://github.com/ClickHouse/ClickHouse/issues/79422) の継続。[#65252](https://github.com/ClickHouse/ClickHouse/issues/65252) をクローズ。[#81509](https://github.com/ClickHouse/ClickHouse/pull/81509)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* keeper のレスポンス時間分布データが取得できたので、メトリクス用のヒストグラムバケットをチューニングできるようになりました。 [#81516](https://github.com/ClickHouse/ClickHouse/pull/81516) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). +* プロファイルイベント `PageCacheReadBytes` を追加。 [#81742](https://github.com/ClickHouse/ClickHouse/pull/81742) ([Kseniia Sumarokova](https://github.com/kssenii))。 +* ファイルシステムキャッシュで発生する論理エラー「Having zero bytes but range is not finished」を修正しました。 [#81868](https://github.com/ClickHouse/ClickHouse/pull/81868) ([Kseniia Sumarokova](https://github.com/kssenii)). + +#### バグ修正(公式安定版リリースにおけるユーザーから見て明らかな不具合) + +* パラメータ化されたビューでの SELECT EXCEPT クエリの問題を修正し、[#49447](https://github.com/ClickHouse/ClickHouse/issues/49447) をクローズ。[#57380](https://github.com/ClickHouse/ClickHouse/pull/57380)([Nikolay Degterinsky](https://github.com/evillique))。 +* Analyzer: JOIN におけるカラム型の昇格後に、カラムプロジェクション名を修正。[#63345](https://github.com/ClickHouse/ClickHouse/issues/63345) をクローズ。[#63519](https://github.com/ClickHouse/ClickHouse/pull/63519)([Dmitry Novik](https://github.com/novikd))。 +* analyzer_compatibility_join_using_top_level_identifier が有効な場合に、列名の衝突が発生する場合の論理エラーを修正しました。 [#75676](https://github.com/ClickHouse/ClickHouse/pull/75676) ([Vladimir Cherkasov](https://github.com/vdimir))。 +* `allow_push_predicate_ast_for_distributed_subqueries` が有効な場合に、プッシュダウンされた述語における CTE の扱いを修正しました。[#75647](https://github.com/ClickHouse/ClickHouse/issues/75647) を修正しました。[#79672](https://github.com/ClickHouse/ClickHouse/issues/79672) を修正しました。[#77316](https://github.com/ClickHouse/ClickHouse/pull/77316)([Dmitry Novik](https://github.com/novikd))。 +* `SYSTEM SYNC REPLICA LIGHTWEIGHT 'foo'` が、指定したレプリカが存在しない場合でも成功として扱ってしまう問題を修正しました。このコマンドは、同期を試行する前に Keeper 上にレプリカが存在することを正しく検証するようになりました。 [#78405](https://github.com/ClickHouse/ClickHouse/pull/78405) ([Jayme Bird](https://github.com/jaymebrd)). +* `ON CLUSTER` クエリの `CONSTRAINT` セクション内で `currentDatabase` 関数を使用したごく限定的なケースで発生するクラッシュを修正しました。[#78100](https://github.com/ClickHouse/ClickHouse/issues/78100) をクローズします。 [#79070](https://github.com/ClickHouse/ClickHouse/pull/79070) ([pufit](https://github.com/pufit)). +* サーバー間クエリにおける外部ロールの伝達を修正。 [#79099](https://github.com/ClickHouse/ClickHouse/pull/79099) ([Andrey Zvonov](https://github.com/zvonand)). +* SingleValueDataGeneric では、Field の代わりに IColumn を使用するようにしてください。`Dynamic/Variant/JSON` 型に対する `argMax` など、一部の集約関数で誤った戻り値が返される問題が修正されます。[#79166](https://github.com/ClickHouse/ClickHouse/pull/79166) ([Pavel Kruglov](https://github.com/Avogar)). +* Azure Blob Storage 用の use_native_copy および allow_azure_native_copy 設定の適用を修正し、認証情報が一致する場合にのみネイティブコピーを使用するように更新しました。これにより [#78964](https://github.com/ClickHouse/ClickHouse/issues/78964) が解決されました。 [#79561](https://github.com/ClickHouse/ClickHouse/pull/79561) ([Smita Kulkarni](https://github.com/SmitaRKulkarni))。 +* 列が相関付けられているかどうかをチェックする際に、その列の起源スコープが不明であることに起因して発生していた論理エラーを修正。[#78183](https://github.com/ClickHouse/ClickHouse/issues/78183) を修正。[#79451](https://github.com/ClickHouse/ClickHouse/issues/79451) を修正。[#79727](https://github.com/ClickHouse/ClickHouse/pull/79727)([Dmitry Novik](https://github.com/novikd))。 +* ColumnConst と Analyzer を使用した grouping sets で誤った結果が出る問題を修正。 [#79743](https://github.com/ClickHouse/ClickHouse/pull/79743) ([Andrey Zvonov](https://github.com/zvonand)). +* ローカルレプリカが古い状態のときに Distributed テーブルから読み取る際に発生する、ローカルシャードにおける結果の重複を修正しました。 [#79761](https://github.com/ClickHouse/ClickHouse/pull/79761) ([Eduard Karacharov](https://github.com/korowa)). +* 負の符号ビットを持つ NaN の並び順を修正しました。 [#79847](https://github.com/ClickHouse/ClickHouse/pull/79847) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +* `GROUP BY ALL` は `GROUPING` 句を考慮しないようになりました。 [#79915](https://github.com/ClickHouse/ClickHouse/pull/79915) ([Yarik Briukhovetskyi](https://github.com/yariks5s))。 +* `TopK` / `TopKWeighted` 関数において、容量が尽きていない場合でも過大な誤差が発生していた誤った状態マージ処理を修正しました。 [#79939](https://github.com/ClickHouse/ClickHouse/pull/79939) ([Joel Höner](https://github.com/athre0z)). +* `azure_blob_storage` オブジェクトストレージで `readonly` 設定が尊重されるようにしました。 [#79954](https://github.com/ClickHouse/ClickHouse/pull/79954) ([Julia Kartseva](https://github.com/jkartseva)). +* `match(column, '^…')` をバックスラッシュでエスケープされた文字と併用した際に発生していた、クエリ結果が誤る問題およびメモリ不足によるクラッシュを修正しました。 [#79969](https://github.com/ClickHouse/ClickHouse/pull/79969) ([filimonov](https://github.com/filimonov)). +* データレイクに対する Hive パーティショニングを無効化します。 [https://github.com/issues/assigned?issue=ClickHouse%7CClickHouse%7C79937](https://github.com/issues/assigned?issue=ClickHouse%7CClickHouse%7C79937) を部分的に解決します。 [#80005](https://github.com/ClickHouse/ClickHouse/pull/80005)([Daniil Ivanik](https://github.com/divanik))。 +* ラムダ式を含む skip index が適用されない問題を修正しました。インデックス定義内の高水準関数がクエリ内のものと完全に一致する場合にも、正しく適用されるようにしました。 [#80025](https://github.com/ClickHouse/ClickHouse/pull/80025) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). +* レプリケーションログから ATTACH_PART コマンドを実行するレプリカでパーツをアタッチする際のメタデータバージョンを修正しました。 [#80038](https://github.com/ClickHouse/ClickHouse/pull/80038) ([Aleksei Filatov](https://github.com/aalexfvk)). +* Executable User Defined Functions (eUDF) の名前は、他の関数とは異なり、`system.query_log` テーブルの `used_functions` カラムに追加されませんでした。この PR では、リクエストで eUDF が使用された場合に、その eUDF 名が追加されるようにしました。 [#80073](https://github.com/ClickHouse/ClickHouse/pull/80073) ([Kyamran](https://github.com/nibblerenush))。 +* LowCardinality(FixedString) を用いた Arrow フォーマットにおける論理エラーを修正しました。 [#80156](https://github.com/ClickHouse/ClickHouse/pull/80156) ([Pavel Kruglov](https://github.com/Avogar)). * Merge エンジンからのサブカラム読み取りを修正。 [#80158](https://github.com/ClickHouse/ClickHouse/pull/80158) ([Pavel Kruglov](https://github.com/Avogar)). -* `KeyCondition` における数値型の比較に関するバグを修正しました。 [#80207](https://github.com/ClickHouse/ClickHouse/pull/80207) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* プロジェクションを持つテーブルに lazy materialization を適用した際に発生する AMBIGUOUS_COLUMN_NAME エラーを修正。 [#80251](https://github.com/ClickHouse/ClickHouse/pull/80251) ([Igor Nikonov](https://github.com/devcrafter)). -* 暗黙のプロジェクションを使用している場合に、`LIKE 'ab_c%'` のような文字列プレフィックスフィルタに対して行われていた誤った `count` の最適化処理を修正。これにより [#80250](https://github.com/ClickHouse/ClickHouse/issues/80250) が解決された。[#80261](https://github.com/ClickHouse/ClickHouse/pull/80261)([Amos Bird](https://github.com/amosbird))。 -* MongoDB ドキュメント内で入れ子になった数値フィールドが文字列として誤ってシリアル化される問題を修正。MongoDB のドキュメントに対する最大ネスト深度の制限を削除。[#80289](https://github.com/ClickHouse/ClickHouse/pull/80289) ([Kirill Nikiforov](https://github.com/allmazz))。 -* Replicated データベースにおける RMT に対するメタデータチェックを、より緩やかにしました。 [#80296](https://github.com/ClickHouse/ClickHouse/issues/80296) をクローズ。 [#80298](https://github.com/ClickHouse/ClickHouse/pull/80298) ([Nikolay Degterinsky](https://github.com/evillique))。 -* PostgreSQL ストレージ用の DateTime および DateTime64 の文字列表現を修正。 [#80301](https://github.com/ClickHouse/ClickHouse/pull/80301) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* `StripeLog` テーブルでタイムゾーン付きの `DateTime` を許可します。これにより [#44120](https://github.com/ClickHouse/ClickHouse/issues/44120) が解決されます。 [#80304](https://github.com/ClickHouse/ClickHouse/pull/80304) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* クエリプランステップが行数を変更する場合には、非決定的関数を含む述語に対するフィルタープッシュダウンを無効化します。これにより [#40273](https://github.com/ClickHouse/ClickHouse/issues/40273) を修正します。[#80329](https://github.com/ClickHouse/ClickHouse/pull/80329)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 +* `KeyCondition` における数値型の比較処理に関するバグを修正しました。 [#80207](https://github.com/ClickHouse/ClickHouse/pull/80207) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* projection を持つテーブルに対して lazy materialization を適用した場合に発生する `AMBIGUOUS_COLUMN_NAME` を修正しました。 [#80251](https://github.com/ClickHouse/ClickHouse/pull/80251) ([Igor Nikonov](https://github.com/devcrafter)). +* 暗黙的プロジェクション使用時に、`LIKE 'ab_c%'` のような文字列プレフィックスフィルタに対して誤った `count` の最適化が行われていた問題を修正しました。これにより [#80250](https://github.com/ClickHouse/ClickHouse/issues/80250) が修正されます。[#80261](https://github.com/ClickHouse/ClickHouse/pull/80261)([Amos Bird](https://github.com/amosbird))。 +* MongoDB ドキュメント内のネストされた数値フィールドが文字列として誤ってシリアル化される問題を修正しました。MongoDB から取得するドキュメントの最大深度制限を撤廃しました。 [#80289](https://github.com/ClickHouse/ClickHouse/pull/80289) ([Kirill Nikiforov](https://github.com/allmazz)). +* Replicated データベースにおける RMT のメタデータチェックをより緩く行うようにしました。 [#80296](https://github.com/ClickHouse/ClickHouse/issues/80296) をクローズ。 [#80298](https://github.com/ClickHouse/ClickHouse/pull/80298)([Nikolay Degterinsky](https://github.com/evillique))。 +* PostgreSQL ストレージ用の DateTime および DateTime64 のテキスト表現を修正しました。 [#80301](https://github.com/ClickHouse/ClickHouse/pull/80301) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* `StripeLog` テーブルでタイムゾーン付きの `DateTime` を許可するようにしました。これにより [#44120](https://github.com/ClickHouse/ClickHouse/issues/44120) が解決されます。[#80304](https://github.com/ClickHouse/ClickHouse/pull/80304)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* クエリプランのステップで行数が変わる場合は、非決定的関数を含む述語に対するフィルタープッシュダウンを行わないようにしました。 [#40273](https://github.com/ClickHouse/ClickHouse/issues/40273) を修正。 [#80329](https://github.com/ClickHouse/ClickHouse/pull/80329)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 * サブカラムを含むプロジェクションで発生し得る論理エラーやクラッシュを修正。 [#80333](https://github.com/ClickHouse/ClickHouse/pull/80333) ([Pavel Kruglov](https://github.com/Avogar)). -* `ON` 式が自明な等値条件ではない場合に、論理 JOIN 段階でのフィルタープッシュダウン最適化によって発生する `NOT_FOUND_COLUMN_IN_BLOCK` エラーを修正しました。[#79647](https://github.com/ClickHouse/ClickHouse/issues/79647) および [#77848](https://github.com/ClickHouse/ClickHouse/issues/77848) を修正しました。[#80360](https://github.com/ClickHouse/ClickHouse/pull/80360)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 -* パーティション分割されたテーブルでキーを逆順に読み取る際に誤った結果が返される不具合を修正しました。これにより [#79987](https://github.com/ClickHouse/ClickHouse/issues/79987) が解決されます。[#80448](https://github.com/ClickHouse/ClickHouse/pull/80448)([Amos Bird](https://github.com/amosbird))。 -* Nullable キーを持ち、`optimize_read_in_order` が有効になっているテーブルにおける誤ったソートを修正しました。 [#80515](https://github.com/ClickHouse/ClickHouse/pull/80515) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). -* SYSTEM STOP REPLICATED VIEW を使用してビューを一時停止していた場合に、リフレッシュ可能なマテリアライズドビューの DROP がハングしてしまう問題を修正しました。 [#80543](https://github.com/ClickHouse/ClickHouse/pull/80543) ([Michael Kolupaev](https://github.com/al13n321)). -* 分散クエリで定数タプルを使用した際に発生する「Cannot find column」エラーを修正。 [#80596](https://github.com/ClickHouse/ClickHouse/pull/80596) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* `join_use_nulls` を有効にした Distributed テーブルでの `shardNum` 関数を修正。 [#80612](https://github.com/ClickHouse/ClickHouse/pull/80612) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). -* Merge エンジンで、一部のテーブルにのみ存在するカラムを読み取る際に誤った結果が返される問題を修正。 [#80643](https://github.com/ClickHouse/ClickHouse/pull/80643) ([Pavel Kruglov](https://github.com/Avogar)). -* replxx のハングアップにより発生し得る SSH プロトコルの問題を修正。 [#80688](https://github.com/ClickHouse/ClickHouse/pull/80688) ([Azat Khuzhin](https://github.com/azat)). -* `iceberg_history` テーブル内のタイムスタンプは、現在は正しくなっています。 [#80711](https://github.com/ClickHouse/ClickHouse/pull/80711) ([Melvyn Peignon](https://github.com/melvynator)). -* 辞書の登録に失敗した場合に発生する可能性のあるクラッシュを修正しました(`CREATE DICTIONARY` が `CANNOT_SCHEDULE_TASK` で失敗した際に、辞書レジストリ内にダングリングポインタが残り、その後クラッシュを引き起こす可能性がありました)。[#80714](https://github.com/ClickHouse/ClickHouse/pull/80714)([Azat Khuzhin](https://github.com/azat))。 -* オブジェクトストレージ用テーブル関数における、要素が 1 つだけの enum グロブパターンの処理を修正。 [#80716](https://github.com/ClickHouse/ClickHouse/pull/80716) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* Tuple(Dynamic) と String の比較関数で、誤った戻り値型により論理エラーが発生していた問題を修正しました。 [#80728](https://github.com/ClickHouse/ClickHouse/pull/80728) ([Pavel Kruglov](https://github.com/Avogar)). -* Unity Catalog 向けに不足していたデータ型 `timestamp_ntz` のサポートを追加。[#79535](https://github.com/ClickHouse/ClickHouse/issues/79535) および [#79875](https://github.com/ClickHouse/ClickHouse/issues/79875) を修正。[#80740](https://github.com/ClickHouse/ClickHouse/pull/80740)([alesapin](https://github.com/alesapin))。 -* `IN cte` を使用した分散クエリで発生する `THERE_IS_NO_COLUMN` エラーを修正。[#75032](https://github.com/ClickHouse/ClickHouse/issues/75032) を解決。[#80757](https://github.com/ClickHouse/ClickHouse/pull/80757)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 -* 外部 ORDER BY 用のファイル数が過剰になり、メモリ使用量が増加する問題を修正。 [#80777](https://github.com/ClickHouse/ClickHouse/pull/80777) ([Azat Khuzhin](https://github.com/azat)). -* このPRにより [#80742](https://github.com/ClickHouse/ClickHouse/issues/80742) がクローズされる可能性があります。 [#80783](https://github.com/ClickHouse/ClickHouse/pull/80783)([zoomxi](https://github.com/zoomxi))。 -* get_member_id() が NULL から std::string を生成していたことが原因で発生していた Kafka のクラッシュを修正しました(これはおそらくブローカーへの接続が失敗した場合にのみ発生する問題でした)。[#80793](https://github.com/ClickHouse/ClickHouse/pull/80793) ([Azat Khuzhin](https://github.com/azat))。 -* Kafka エンジンをシャットダウンする前にコンシューマの終了を正しく待つようにしました(シャットダウン後にアクティブなコンシューマが残っていると、さまざまなデバッグ用アサーションが発生したり、テーブルが削除/デタッチされた後もバックグラウンドでブローカーからデータを読み続けてしまう可能性があります)。 [#80795](https://github.com/ClickHouse/ClickHouse/pull/80795) ([Azat Khuzhin](https://github.com/azat)). -* `predicate-push-down` 最適化によって発生する `NOT_FOUND_COLUMN_IN_BLOCK` を修正し、[#80443](https://github.com/ClickHouse/ClickHouse/issues/80443) を解決します。[#80834](https://github.com/ClickHouse/ClickHouse/pull/80834)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 -* USING 句を伴う JOIN におけるテーブル関数で、`*`(スター)マッチャーを解決する際の論理エラーを修正しました。 [#80894](https://github.com/ClickHouse/ClickHouse/pull/80894) ([Vladimir Cherkasov](https://github.com/vdimir)). -* Iceberg メタデータファイルキャッシュのメモリ使用量の計上を修正。 [#80904](https://github.com/ClickHouse/ClickHouse/pull/80904) ([Azat Khuzhin](https://github.com/azat)). -* NULL 許容パーティションキーにおける誤ったパーティショニングを修正。 [#80913](https://github.com/ClickHouse/ClickHouse/pull/80913) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). -* ソーステーブルがイニシエーター上に存在しない場合に、述語プッシュダウン(`allow_push_predicate_ast_for_distributed_subqueries=1`)を有効にした分散クエリで発生する `Table does not exist` エラーを修正しました。[#77281](https://github.com/ClickHouse/ClickHouse/issues/77281) を解消。[#80915](https://github.com/ClickHouse/ClickHouse/pull/80915)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 -* 名前付きウィンドウを使用したネストされた関数内の論理エラーを修正しました。 [#80926](https://github.com/ClickHouse/ClickHouse/pull/80926) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). -* Nullable 列および浮動小数点列における極値の処理を修正。 [#80970](https://github.com/ClickHouse/ClickHouse/pull/80970) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). -* system.tables からのクエリ実行時に、メモリ逼迫時に発生しやすかったクラッシュを修正しました。 [#80976](https://github.com/ClickHouse/ClickHouse/pull/80976) ([Azat Khuzhin](https://github.com/azat))。 -* ファイル拡張子から圧縮方式が推測されるファイルに対して、truncate を伴うアトミックなリネーム処理を修正。 [#80979](https://github.com/ClickHouse/ClickHouse/pull/80979) ([Pablo Marcos](https://github.com/pamarcos)). -* `ErrorCodes::getName` を修正。 [#81032](https://github.com/ClickHouse/ClickHouse/pull/81032) ([RinChanNOW](https://github.com/RinChanNOWWW)). -* Unity Catalog で、ユーザーがすべてのテーブルに対する権限を持っていない場合にテーブルを一覧表示できない不具合を修正しました。これにより、すべてのテーブルが正しく一覧表示され、アクセス制限のあるテーブルを読み取ろうとすると例外がスローされます。 [#81044](https://github.com/ClickHouse/ClickHouse/pull/81044) ([alesapin](https://github.com/alesapin))。 -* これにより、ClickHouse は `SHOW TABLES` クエリ実行時にデータレイクのカタログからのエラーや予期しないレスポンスを無視するようになりました。 [#79725](https://github.com/ClickHouse/ClickHouse/issues/79725) を修正。 [#81046](https://github.com/ClickHouse/ClickHouse/pull/81046)([alesapin](https://github.com/alesapin))。 -* JSONExtract および JSON 型の解析で、整数値から DateTime64 への変換処理を修正しました。 [#81050](https://github.com/ClickHouse/ClickHouse/pull/81050) ([Pavel Kruglov](https://github.com/Avogar)). -* `date_time_input_format` 設定をスキーマ推論キャッシュに反映するようにしました。 [#81052](https://github.com/ClickHouse/ClickHouse/pull/81052) ([Pavel Kruglov](https://github.com/Avogar)). -* クエリ開始後からカラム送信前の間にテーブルが DROP されると `INSERT` がクラッシュする問題を修正しました。 [#81053](https://github.com/ClickHouse/ClickHouse/pull/81053) ([Azat Khuzhin](https://github.com/azat)). -* quantileDeterministic における use-of-uninitialized-value の問題を修正。 [#81062](https://github.com/ClickHouse/ClickHouse/pull/81062) ([Azat Khuzhin](https://github.com/azat)). -* MetadataStorageFromDisk ディスクのトランザクションにおけるハードリンク数の管理を修正し、テストを追加。 [#81066](https://github.com/ClickHouse/ClickHouse/pull/81066) ([Sema Checherinda](https://github.com/CheSema)). -* ユーザー定義関数 (UDF) の名前は、他の関数とは異なり `system.query_log` テーブルに記録されません。このPRでは、クエリでUDFが使用された場合、そのUDF名を `used_executable_user_defined_functions` または `used_sql_user_defined_functions` の2つのカラムのいずれかに追加するようにしました。[#81101](https://github.com/ClickHouse/ClickHouse/pull/81101) ([Kyamran](https://github.com/nibblerenush)). -* HTTP プロトコル経由でテキストフォーマット(`JSON`、`Values` など)を用いた挿入時に、`Enum` フィールドが省略された場合に発生し得た `Too large size ... passed to allocator` エラーやクラッシュが発生する可能性のある問題を修正しました。 [#81145](https://github.com/ClickHouse/ClickHouse/pull/81145) ([Anton Popov](https://github.com/CurtizJ)). -* 非MTの MV にプッシュされる INSERT ブロックに Sparse カラムが含まれている場合の LOGICAL_ERROR を修正。 [#81161](https://github.com/ClickHouse/ClickHouse/pull/81161) ([Azat Khuzhin](https://github.com/azat)). +* `ON` 句が単純な等価条件でない場合に、論理 JOIN ステップに対するフィルタープッシュダウンの最適化が原因で発生する `NOT_FOUND_COLUMN_IN_BLOCK` エラーを修正。[#79647](https://github.com/ClickHouse/ClickHouse/issues/79647) と [#77848](https://github.com/ClickHouse/ClickHouse/issues/77848) を修正。[#80360](https://github.com/ClickHouse/ClickHouse/pull/80360)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 +* パーティション化テーブルで逆順のキーを読み取る際に誤った結果が返る不具合を修正しました。この修正は [#79987](https://github.com/ClickHouse/ClickHouse/issues/79987) に対応するものです。[#80448](https://github.com/ClickHouse/ClickHouse/pull/80448)([Amos Bird](https://github.com/amosbird))。 +* Nullable キーを持つテーブルで、optimize_read_in_order が有効な場合に誤った並び順になる問題を修正しました。 [#80515](https://github.com/ClickHouse/ClickHouse/pull/80515) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +* `SYSTEM STOP REPLICATED VIEW` を使用してリフレッシュ可能なマテリアライズドビューを一時停止している場合に、その DROP がハングする問題を修正しました。 [#80543](https://github.com/ClickHouse/ClickHouse/pull/80543) ([Michael Kolupaev](https://github.com/al13n321)). +* 分散クエリで定数タプルを使用した場合に発生する 'Cannot find column' エラーの問題を修正。 [#80596](https://github.com/ClickHouse/ClickHouse/pull/80596) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* `join_use_nulls` 使用時の Distributed テーブルにおける `shardNum` 関数を修正。 [#80612](https://github.com/ClickHouse/ClickHouse/pull/80612) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). +* Merge エンジン配下のテーブルの一部にしか存在しないカラムを読み取る際に、誤った結果が返る問題を修正しました。 [#80643](https://github.com/ClickHouse/ClickHouse/pull/80643) ([Pavel Kruglov](https://github.com/Avogar)). +* replxx のハングが原因となり得る SSH プロトコルの問題を修正。 [#80688](https://github.com/ClickHouse/ClickHouse/pull/80688) ([Azat Khuzhin](https://github.com/azat)). +* `iceberg_history` テーブル内のタイムスタンプが正しくなるよう修正しました。 [#80711](https://github.com/ClickHouse/ClickHouse/pull/80711) ([Melvyn Peignon](https://github.com/melvynator))。 +* 辞書の登録に失敗した場合に発生しうるクラッシュを修正しました(`CREATE DICTIONARY` が `CANNOT_SCHEDULE_TASK` で失敗した際に、辞書レジストリ内にダングリングポインタが残る可能性があり、その後クラッシュにつながっていました)。 [#80714](https://github.com/ClickHouse/ClickHouse/pull/80714) ([Azat Khuzhin](https://github.com/azat)). +* オブジェクトストレージ用テーブル関数における単一要素の enum グロブの処理を修正しました。 [#80716](https://github.com/ClickHouse/ClickHouse/pull/80716) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* Tuple(Dynamic) と String の比較関数における誤った結果型を修正し、論理エラーを引き起こしていた問題を解消しました。 [#80728](https://github.com/ClickHouse/ClickHouse/pull/80728) ([Pavel Kruglov](https://github.com/Avogar)). +* Unity Catalog 向けに不足していたサポート対象データ型 `timestamp_ntz` を追加しました。[#79535](https://github.com/ClickHouse/ClickHouse/issues/79535)、[#79875](https://github.com/ClickHouse/ClickHouse/issues/79875) を修正しました。[#80740](https://github.com/ClickHouse/ClickHouse/pull/80740)([alesapin](https://github.com/alesapin))。 +* `IN cte` を含む分散クエリで発生していた `THERE_IS_NO_COLUMN` エラーを修正。[#75032](https://github.com/ClickHouse/ClickHouse/issues/75032) を解決。[#80757](https://github.com/ClickHouse/ClickHouse/pull/80757)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 +* 外部 ORDER BY でファイル数が過剰になる問題(メモリ使用量が過大になる原因)を修正。 [#80777](https://github.com/ClickHouse/ClickHouse/pull/80777) ([Azat Khuzhin](https://github.com/azat)). +* このPRは、[#80742](https://github.com/ClickHouse/ClickHouse/issues/80742) をクローズする可能性があります。[#80783](https://github.com/ClickHouse/ClickHouse/pull/80783)([zoomxi](https://github.com/zoomxi))。 +* Kafka において get_member_id() が NULL から std::string を生成していたことにより発生していたクラッシュを修正しました (ブローカーへの接続に失敗した場合にのみ発生していた問題と思われます)。 [#80793](https://github.com/ClickHouse/ClickHouse/pull/80793) ([Azat Khuzhin](https://github.com/azat)). +* Kafka エンジンをシャットダウンする前にコンシューマーの終了を適切に待機するようにしました(シャットダウン後もコンシューマーがアクティブなままだと、さまざまなデバッグアサーションがトリガーされる可能性があり、またテーブルが drop / detach された後もバックグラウンドでブローカーからデータを読み続けてしまう場合があります)。 [#80795](https://github.com/ClickHouse/ClickHouse/pull/80795) ([Azat Khuzhin](https://github.com/azat))。 +* `predicate-push-down` 最適化により発生する `NOT_FOUND_COLUMN_IN_BLOCK` を修正しました。これにより [#80443](https://github.com/ClickHouse/ClickHouse/issues/80443) を解決します。 [#80834](https://github.com/ClickHouse/ClickHouse/pull/80834)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 +* USING を伴う JOIN におけるテーブル関数内のアスタリスク(`*`)マッチャーの解決時に発生する論理エラーを修正。 [#80894](https://github.com/ClickHouse/ClickHouse/pull/80894) ([Vladimir Cherkasov](https://github.com/vdimir)). +* Iceberg メタデータファイルキャッシュのメモリ計上を修正。 [#80904](https://github.com/ClickHouse/ClickHouse/pull/80904) ([Azat Khuzhin](https://github.com/azat)). +* NULL 許容パーティションキーで誤ったパーティション分割が行われる問題を修正。 [#80913](https://github.com/ClickHouse/ClickHouse/pull/80913) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +* 述語プッシュダウン(`allow_push_predicate_ast_for_distributed_subqueries=1`)を有効にした分散クエリで、イニシエータ上にソーステーブルが存在しない場合に発生する `Table does not exist` エラーを修正しました。この変更は [#77281](https://github.com/ClickHouse/ClickHouse/issues/77281) の問題を解決します。 [#80915](https://github.com/ClickHouse/ClickHouse/pull/80915)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 +* 名前付きウィンドウを使用するネストされた関数における論理エラーを修正。 [#80926](https://github.com/ClickHouse/ClickHouse/pull/80926) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +* Nullable および浮動小数点列に対する extremes の処理を修正。 [#80970](https://github.com/ClickHouse/ClickHouse/pull/80970) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +* system.tables からのクエリ中に発生し得るクラッシュを修正しました(メモリプレッシャーがかかっている状況で発生しやすい問題)。 [#80976](https://github.com/ClickHouse/ClickHouse/pull/80976) ([Azat Khuzhin](https://github.com/azat)). +* ファイル拡張子から圧縮形式を推論するファイルに対して、truncate を伴うアトミックなリネーム処理を修正。 [#80979](https://github.com/ClickHouse/ClickHouse/pull/80979) ([Pablo Marcos](https://github.com/pamarcos))。 +* ErrorCodes::getName を修正。 [#81032](https://github.com/ClickHouse/ClickHouse/pull/81032) ([RinChanNOW](https://github.com/RinChanNOWWW))。 +* Unity Catalog で、ユーザーにすべてのテーブルへの権限がない場合にテーブル一覧を取得できないバグを修正しました。この修正により、すべてのテーブルが正しく一覧表示されるようになり、アクセス制限されたテーブルを読み取ろうとした場合には例外がスローされます。 [#81044](https://github.com/ClickHouse/ClickHouse/pull/81044) ([alesapin](https://github.com/alesapin)). +* これにより、`SHOW TABLES` クエリにおいて、ClickHouse はデータレイクカタログからのエラーや予期しない応答を無視するようになりました。[#79725](https://github.com/ClickHouse/ClickHouse/issues/79725) を修正。[#81046](https://github.com/ClickHouse/ClickHouse/pull/81046)([alesapin](https://github.com/alesapin))。 +* JSONExtract および JSON 型のパースにおける、整数値からの DateTime64 の読み取りを修正。 [#81050](https://github.com/ClickHouse/ClickHouse/pull/81050) ([Pavel Kruglov](https://github.com/Avogar)). +* スキーマ推論キャッシュに date_time_input_format 設定を反映するようにしました。 [#81052](https://github.com/ClickHouse/ClickHouse/pull/81052) ([Pavel Kruglov](https://github.com/Avogar)). +* クエリ開始後からカラム送信前の間にテーブルが DROP された場合に INSERT がクラッシュする問題を修正。 [#81053](https://github.com/ClickHouse/ClickHouse/pull/81053) ([Azat Khuzhin](https://github.com/azat)). +* quantileDeterministic における未初期化値の使用を修正しました。 [#81062](https://github.com/ClickHouse/ClickHouse/pull/81062) ([Azat Khuzhin](https://github.com/azat)). +* `metadatastoragefromdisk` ディスクのトランザクションにおけるハードリンク数の管理を修正し、テストを追加。 [#81066](https://github.com/ClickHouse/ClickHouse/pull/81066) ([Sema Checherinda](https://github.com/CheSema)). +* 他の関数と異なり、ユーザー定義関数 (UDF) の名前は `system.query_log` テーブルに追加されていませんでした。このPRでは、リクエスト内でUDFが使用された場合、そのUDF名を `used_executable_user_defined_functions` または `used_sql_user_defined_functions` のいずれか一方の列に追加するよう実装しています。 [#81101](https://github.com/ClickHouse/ClickHouse/pull/81101) ([Kyamran](https://github.com/nibblerenush)). +* HTTP プロトコル経由でテキスト形式(`JSON`、`Values` など)を用いてデータを挿入する際に、`Enum` フィールドを省略した場合に発生していた `Too large size ... passed to allocator` エラーや、クラッシュが起こりうる問題を修正しました。 [#81145](https://github.com/ClickHouse/ClickHouse/pull/81145) ([Anton Popov](https://github.com/CurtizJ)). +* non-MT の MV にプッシュされる INSERT ブロックに Sparse 列が含まれている場合の LOGICAL_ERROR を修正。 [#81161](https://github.com/ClickHouse/ClickHouse/pull/81161) ([Azat Khuzhin](https://github.com/azat)). * クロスレプリケーション環境で `distributed_product_mode_local=local` を使用した際に発生する `Unknown table expression identifier` エラーを修正。 [#81162](https://github.com/ClickHouse/ClickHouse/pull/81162) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). -* フィルタリング後の Parquet ファイルで行数を誤ってキャッシュしていた問題を修正しました。 [#81184](https://github.com/ClickHouse/ClickHouse/pull/81184) ([Michael Kolupaev](https://github.com/al13n321)). -* 相対キャッシュパス使用時の fs cache の max_size_to_total_space 設定を修正。 [#81237](https://github.com/ClickHouse/ClickHouse/pull/81237) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Parquet 形式で const のタプルまたはマップを出力する際に clickhouse-local がクラッシュする問題を修正しました。 [#81249](https://github.com/ClickHouse/ClickHouse/pull/81249) ([Michael Kolupaev](https://github.com/al13n321)). -* ネットワーク経由で受信した配列オフセットを検証。 [#81269](https://github.com/ClickHouse/ClickHouse/pull/81269) ([Azat Khuzhin](https://github.com/azat)). -* 空のテーブルを結合しウィンドウ関数を使用するクエリにおける一部のコーナーケースを修正しました。このバグにより、並列ストリーム数が爆発的に増加し、その結果 OOM が発生していました。 [#81299](https://github.com/ClickHouse/ClickHouse/pull/81299) ([Alexander Gololobov](https://github.com/davenger)). -* datalake の Cluster 関数(`deltaLakeCluster`、`icebergCluster` など)に対する修正: (1) 古い analyzer で `Cluster` 関数を使用した際に `DataLakeConfiguration` で発生しうるセグメンテーションフォールトを修正; (2) データレイクのメタデータ更新が重複して行われていた問題を解消(不要なオブジェクトストレージリクエストを削減); (3) フォーマットが明示的に指定されていない場合に、オブジェクトストレージ上で発生していた冗長な listing を修正(非 Cluster のデータレイクエンジンではすでに行われていたもの)。[#81300](https://github.com/ClickHouse/ClickHouse/pull/81300)([Kseniia Sumarokova](https://github.com/kssenii))。 -* force_restore_data フラグで失われた keeper のメタデータを復旧できるようにしました。 [#81324](https://github.com/ClickHouse/ClickHouse/pull/81324) ([Raúl Marín](https://github.com/Algunenano)). -* delta-kernel におけるリージョンエラーを修正し、[#79914](https://github.com/ClickHouse/ClickHouse/issues/79914) を解決。[#81353](https://github.com/ClickHouse/ClickHouse/pull/81353)([Kseniia Sumarokova](https://github.com/kssenii))。 -* divideOrNull に対する不正な JIT を無効化しました。 [#81370](https://github.com/ClickHouse/ClickHouse/pull/81370) ([Raúl Marín](https://github.com/Algunenano)). -* MergeTree テーブルのパーティション列名が長い場合に発生する挿入エラーを修正しました。 [#81390](https://github.com/ClickHouse/ClickHouse/pull/81390) ([hy123q](https://github.com/haoyangqian)) -* [#81957](https://github.com/ClickHouse/ClickHouse/issues/81957) でバックポート済み: マージ中の例外発生時に `Aggregator` がクラッシュする可能性があった問題を修正。[#81450](https://github.com/ClickHouse/ClickHouse/pull/81450)([Nikita Taranov](https://github.com/nickitat))。 -* 複数のマニフェストファイルの内容を同時にメモリに保持しないようにしました。 [#81470](https://github.com/ClickHouse/ClickHouse/pull/81470) ([Daniil Ivanik](https://github.com/divanik)). -* バックグラウンドプール(`background_.*pool_size`)のシャットダウン時に起こりうるクラッシュを修正しました。 [#81473](https://github.com/ClickHouse/ClickHouse/pull/81473) ([Azat Khuzhin](https://github.com/azat)). -* `URL` エンジンを使用してテーブルに書き込む際に `Npy` フォーマットで発生していた範囲外読み取りを修正しました。これにより [#81356](https://github.com/ClickHouse/ClickHouse/issues/81356) が解決されます。 [#81502](https://github.com/ClickHouse/ClickHouse/pull/81502) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* Web UI が `NaN%` を表示する可能性があります(典型的な JavaScript の問題によるものです)。[#81507](https://github.com/ClickHouse/ClickHouse/pull/81507)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* `database_replicated_enforce_synchronous_settings=1` 設定時の `DatabaseReplicated` の動作を修正。 [#81564](https://github.com/ClickHouse/ClickHouse/pull/81564) ([Azat Khuzhin](https://github.com/azat)). -* LowCardinality(Nullable(...)) 型のソート順を修正。[#81583](https://github.com/ClickHouse/ClickHouse/pull/81583) ([Pervakov Grigorii](https://github.com/GrigoryPervakov))。 -* サーバーは、ソケットからリクエストを完全に読み取っていない場合、HTTP 接続を維持すべきではありません。 [#81595](https://github.com/ClickHouse/ClickHouse/pull/81595) ([Sema Checherinda](https://github.com/CheSema)). -* スカラー相関サブクエリが射影式の結果を Nullable な値として返すようにしました。相関サブクエリが空の結果セットを生成する場合の不具合を修正しました。 [#81632](https://github.com/ClickHouse/ClickHouse/pull/81632) ([Dmitry Novik](https://github.com/novikd)). -* `ReplicatedMergeTree` への `ATTACH` 中に発生していた `Unexpected relative path for a deduplicated part` の問題を修正。 [#81647](https://github.com/ClickHouse/ClickHouse/pull/81647) ([Azat Khuzhin](https://github.com/azat)). -* クエリ設定 `use_iceberg_partition_pruning` は、クエリコンテキストではなくグローバルコンテキストを使用しているため、Iceberg ストレージでは有効になりません。デフォルト値が true であるため致命的な問題ではありませんが、この PR で修正されます。[#81673](https://github.com/ClickHouse/ClickHouse/pull/81673)([Han Fei](https://github.com/hanfei1991))。 -* [#82128](https://github.com/ClickHouse/ClickHouse/issues/82128) にバックポート: TTL 式で dict を使用している場合のマージ処理中に発生する「Context has expired」を修正。[#81690](https://github.com/ClickHouse/ClickHouse/pull/81690)([Azat Khuzhin](https://github.com/azat))。 -* MergeTree の設定 `merge_max_block_size` がゼロ以外であることを保証するバリデーションを追加。 [#81693](https://github.com/ClickHouse/ClickHouse/pull/81693) ([Bharat Nallan](https://github.com/bharatnc)). -* `clickhouse-local` で発生する、ハングした `DROP VIEW ` クエリに関する問題を修正しました。 [#81705](https://github.com/ClickHouse/ClickHouse/pull/81705) ([Bharat Nallan](https://github.com/bharatnc))。 -* 一部のケースで StorageRedis の JOIN を修正。 [#81736](https://github.com/ClickHouse/ClickHouse/pull/81736) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). -* 空の `USING ()` を使用し、旧アナライザが有効な場合に `ConcurrentHashJoin` で発生するクラッシュの問題を修正しました。 [#81754](https://github.com/ClickHouse/ClickHouse/pull/81754) ([Nikita Taranov](https://github.com/nickitat)). -* Keeper の修正: ログに無効なエントリがある場合には、新しいログのコミットをブロックするようにしました。以前は、リーダーが一部のログを誤って適用しても、フォロワーがダイジェストの不一致を検出してアボートしているにもかかわらず、新しいログのコミットを続けていました。 [#81780](https://github.com/ClickHouse/ClickHouse/pull/81780) ([Antonio Andelic](https://github.com/antonio2368)). -* スカラー相関サブクエリの処理中に必要な列が読み取られない問題を修正しました。[#81716](https://github.com/ClickHouse/ClickHouse/issues/81716) を修正。[#81805](https://github.com/ClickHouse/ClickHouse/pull/81805)([Dmitry Novik](https://github.com/novikd))。 -* 誰かが私たちのコードのあちこちにKustoを紛れ込ませていたので、きれいにしました。これで [#81643](https://github.com/ClickHouse/ClickHouse/issues/81643) がクローズされます。 [#81885](https://github.com/ClickHouse/ClickHouse/pull/81885) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* 以前のバージョンでは、サーバーが `/js` へのリクエストに対して不要に多くのコンテンツを返していました。これにより [#61890](https://github.com/ClickHouse/ClickHouse/issues/61890) が解決されました。[#81895](https://github.com/ClickHouse/ClickHouse/pull/81895)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* これまで、`MongoDB` テーブルエンジン定義では、`host:port` 引数にパスコンポーネントを含めることができましたが、これは黙って無視されていました。MongoDB 連携機能では、そのようなテーブルの読み込みを拒否します。この修正により、*`MongoDB` エンジンの引数が 5 つある場合には、そのようなテーブルの読み込みを許可し、パスコンポーネントを無視して*、引数からデータベース名を使用します。*注:* この修正は、新しく作成されたテーブルや `mongo` テーブル関数を用いたクエリ、さらにディクショナリソースおよび名前付きコレクションには適用されません。[#81942](https://github.com/ClickHouse/ClickHouse/pull/81942) ([Vladimir Cherkasov](https://github.com/vdimir))。 -* マージ中の例外発生時に `Aggregator` がクラッシュし得る不具合を修正しました。 [#82022](https://github.com/ClickHouse/ClickHouse/pull/82022) ([Nikita Taranov](https://github.com/nickitat)). -* `arraySimilarity` のコピーペーストミスを修正し、`UInt32` および `Int32` の重みの使用を禁止。テストとドキュメントを更新。[#82103](https://github.com/ClickHouse/ClickHouse/pull/82103)([Mikhail f. Shiryaev](https://github.com/Felixoid))。 -* サジェストスレッドとメインクライアントスレッド間で発生し得るデータ競合を修正。 [#82233](https://github.com/ClickHouse/ClickHouse/pull/82233) ([Azat Khuzhin](https://github.com/azat)). - - - - - -#### ビルド/テスト/パッケージングの改善 - -* `postgres` 16.9 を使用します。 [#81437](https://github.com/ClickHouse/ClickHouse/pull/81437) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* `openssl` 3.2.4 を使用するように変更。 [#81438](https://github.com/ClickHouse/ClickHouse/pull/81438) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* `abseil-cpp` のバージョン 2025-01-27 を使用するようにしました。 [#81440](https://github.com/ClickHouse/ClickHouse/pull/81440) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* `mongo-c-driver` 1.30.4 を使用。 [#81449](https://github.com/ClickHouse/ClickHouse/pull/81449) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* `krb5` 1.21.3-final を使用します。 [#81453](https://github.com/ClickHouse/ClickHouse/pull/81453) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* `orc` 2.1.2 を使用します。 [#81455](https://github.com/ClickHouse/ClickHouse/pull/81455) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* `grpc` を 1.73.0 に更新。[#81629](https://github.com/ClickHouse/ClickHouse/pull/81629) ([Konstantin Bogdanov](https://github.com/thevar1able))。 +* フィルタリング後の Parquet ファイルにおける行数のキャッシュが誤っていた問題を修正しました。 [#81184](https://github.com/ClickHouse/ClickHouse/pull/81184) ([Michael Kolupaev](https://github.com/al13n321)). +* 相対キャッシュパス使用時の `fs cache max_size_to_total_space` 設定を修正しました。 [#81237](https://github.com/ClickHouse/ClickHouse/pull/81237) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Parquet 形式で const タプルやマップを出力する際に clickhouse-local がクラッシュする問題を修正しました。 [#81249](https://github.com/ClickHouse/ClickHouse/pull/81249) ([Michael Kolupaev](https://github.com/al13n321)). +* ネットワーク経由で受信した配列オフセットを検証するようにしました。 [#81269](https://github.com/ClickHouse/ClickHouse/pull/81269) ([Azat Khuzhin](https://github.com/azat)). +* 空のテーブルを `JOIN` し、ウィンドウ関数を使用するクエリにおける一部のコーナーケースを修正しました。このバグにより並列ストリーム数が爆発的に増加し、その結果 OOM が発生していました。 [#81299](https://github.com/ClickHouse/ClickHouse/pull/81299) ([Alexander Gololobov](https://github.com/davenger)). +* datalake クラスター関数(`deltaLakeCluster`、`icebergCluster` など)に対する修正: (1) 旧アナライザで `Cluster` 関数を使用した場合に `DataLakeConfiguration` で発生する可能性のあったセグメンテーションフォルトを修正; (2) 重複していた data lake メタデータ更新(不要なオブジェクトストレージへのリクエスト)を削除; (3) フォーマットが明示的に指定されていない場合のオブジェクトストレージでの不要なリスト処理を修正(非クラスター data lake エンジンではすでに行われていたもの)。 [#81300](https://github.com/ClickHouse/ClickHouse/pull/81300) ([Kseniia Sumarokova](https://github.com/kssenii))。 +* force_restore_data フラグで失われた Keeper メタデータを復旧できるようにしました。 [#81324](https://github.com/ClickHouse/ClickHouse/pull/81324) ([Raúl Marín](https://github.com/Algunenano)). +* delta-kernel におけるリージョンエラーを修正し、[#79914](https://github.com/ClickHouse/ClickHouse/issues/79914) を解消。 [#81353](https://github.com/ClickHouse/ClickHouse/pull/81353)([Kseniia Sumarokova](https://github.com/kssenii))。 +* divideOrNull に対する誤った JIT を無効化しました。 [#81370](https://github.com/ClickHouse/ClickHouse/pull/81370) ([Raúl Marín](https://github.com/Algunenano))。 +* パーティション列名が長い MergeTree テーブルで発生する INSERT エラーを修正。 [#81390](https://github.com/ClickHouse/ClickHouse/pull/81390) ([hy123q](https://github.com/haoyangqian)). +* [#81957](https://github.com/ClickHouse/ClickHouse/issues/81957) にバックポート済み: マージ処理中に例外が発生した場合に `Aggregator` がクラッシュする可能性のあった問題を修正しました。 [#81450](https://github.com/ClickHouse/ClickHouse/pull/81450) ([Nikita Taranov](https://github.com/nickitat))。 +* 複数の manifest ファイルの内容をメモリに保持しないようにしました。[#81470](https://github.com/ClickHouse/ClickHouse/pull/81470) ([Daniil Ivanik](https://github.com/divanik))。 +* シャットダウン時にバックグラウンドプール(`background_.*pool_size`)で発生する可能性があるクラッシュを修正。[#81473](https://github.com/ClickHouse/ClickHouse/pull/81473) ([Azat Khuzhin](https://github.com/azat)). +* `URL` エンジンを使用してテーブルに書き込みを行う際に発生していた `Npy` フォーマットでの境界外読み取りを修正。これにより [#81356](https://github.com/ClickHouse/ClickHouse/issues/81356) をクローズします。[#81502](https://github.com/ClickHouse/ClickHouse/pull/81502)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* Web UI に `NaN%` が表示される可能性があります(よくある JavaScript の問題によるものです)。[#81507](https://github.com/ClickHouse/ClickHouse/pull/81507)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* `database_replicated_enforce_synchronous_settings=1` が設定されている場合の `DatabaseReplicated` を修正。 [#81564](https://github.com/ClickHouse/ClickHouse/pull/81564) ([Azat Khuzhin](https://github.com/azat)). +* LowCardinality(Nullable(...)) 型のソート順を修正しました。 [#81583](https://github.com/ClickHouse/ClickHouse/pull/81583) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +* ソケットからリクエストを最後まで読み取っていない場合、サーバーが HTTP 接続を維持しないようにしました。 [#81595](https://github.com/ClickHouse/ClickHouse/pull/81595) ([Sema Checherinda](https://github.com/CheSema)). +* スカラー相関サブクエリが射影式の Nullable な結果を返すようにしました。相関サブクエリが空の結果セットを生成する場合の不具合を修正しました。 [#81632](https://github.com/ClickHouse/ClickHouse/pull/81632) ([Dmitry Novik](https://github.com/novikd)). +* `ReplicatedMergeTree` への `ATTACH` 中に発生する `Unexpected relative path for a deduplicated part` エラーを修正。 [#81647](https://github.com/ClickHouse/ClickHouse/pull/81647) ([Azat Khuzhin](https://github.com/azat)). +* クエリ設定 `use_iceberg_partition_pruning` は、クエリコンテキストではなくグローバルコンテキストを使用しているため、Iceberg ストレージでは有効になりません。デフォルト値が true であるため致命的ではありませんが、この PR によって修正されます。 [#81673](https://github.com/ClickHouse/ClickHouse/pull/81673) ([Han Fei](https://github.com/hanfei1991)). +* [#82128](https://github.com/ClickHouse/ClickHouse/issues/82128) にバックポート: TTL 式で dict を使用している場合にマージ処理中に発生する「Context has expired」エラーを修正。 [#81690](https://github.com/ClickHouse/ClickHouse/pull/81690) ([Azat Khuzhin](https://github.com/azat)). +* `merge_max_block_size` がゼロ以外であることを保証するために、MergeTree 設定へのバリデーションを追加しました。 [#81693](https://github.com/ClickHouse/ClickHouse/pull/81693) ([Bharat Nallan](https://github.com/bharatnc)). +* `DROP VIEW` クエリがハングする問題が発生していた `clickhouse-local` を修正しました。 [#81705](https://github.com/ClickHouse/ClickHouse/pull/81705) ([Bharat Nallan](https://github.com/bharatnc)). +* 一部のケースにおける StorageRedis の JOIN を修正しました。[#81736](https://github.com/ClickHouse/ClickHouse/pull/81736) ([Pervakov Grigorii](https://github.com/GrigoryPervakov))。 +* 空の `USING ()` を使用し旧アナライザが有効な場合に発生する `ConcurrentHashJoin` のクラッシュを修正。 [#81754](https://github.com/ClickHouse/ClickHouse/pull/81754) ([Nikita Taranov](https://github.com/nickitat)). +* Keeper の修正: ログに無効なエントリが存在する場合は、新しいログの commit をブロックするようにしました。これまでは、leader が一部のログを誤って適用しても、follower がダイジェストの不一致を検知して中断しているにもかかわらず、新しいログの commit を継続していました。 [#81780](https://github.com/ClickHouse/ClickHouse/pull/81780) ([Antonio Andelic](https://github.com/antonio2368)). +* スカラー相関サブクエリの処理中に必須列が読み込まれない問題を修正しました。[#81716](https://github.com/ClickHouse/ClickHouse/issues/81716) を修正しました。[#81805](https://github.com/ClickHouse/ClickHouse/pull/81805)([Dmitry Novik](https://github.com/novikd))。 +* 誰かがコードのあちこちに Kusto を紛れ込ませていましたが、きれいに掃除しました。これで [#81643](https://github.com/ClickHouse/ClickHouse/issues/81643) がクローズされます。[#81885](https://github.com/ClickHouse/ClickHouse/pull/81885)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 以前のバージョンでは、`/js` へのリクエストに対してサーバーが不要に多くのコンテンツを返していました。これにより [#61890](https://github.com/ClickHouse/ClickHouse/issues/61890) がクローズされました。 [#81895](https://github.com/ClickHouse/ClickHouse/pull/81895)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* これまで、`MongoDB` テーブルエンジンの定義では、`host:port` 引数にパスコンポーネントを含めることができましたが、これは暗黙的に無視されていました。`mongodb` 統合では、そのようなテーブルの読み込みを拒否していました。この修正により、*`MongoDB` エンジンが 5 つの引数を持つ場合には、そのようなテーブルの読み込みを許可し、引数から取得したデータベース名を使用しつつパスコンポーネントを無視します。* *注:* この修正は、新しく作成されたテーブルや `mongo` テーブル関数を用いたクエリ、ディクショナリソースおよび名前付きコレクションには適用されません。 [#81942](https://github.com/ClickHouse/ClickHouse/pull/81942) ([Vladimir Cherkasov](https://github.com/vdimir)). +* マージ処理中に例外が発生した場合に `Aggregator` がクラッシュし得る不具合を修正しました。 [#82022](https://github.com/ClickHouse/ClickHouse/pull/82022) ([Nikita Taranov](https://github.com/nickitat))。 +* `arraySimilarity` におけるコピーペーストの誤りを修正し、重みとしての `UInt32` と `Int32` の使用を禁止しました。テストとドキュメントを更新しました。 [#82103](https://github.com/ClickHouse/ClickHouse/pull/82103) ([Mikhail f. Shiryaev](https://github.com/Felixoid))。 +* suggestion スレッドとメインクライアントスレッド間のデータレースが発生する可能性を修正。 [#82233](https://github.com/ClickHouse/ClickHouse/pull/82233) ([Azat Khuzhin](https://github.com/azat)). + +#### ビルド/テスト/パッケージングの改善 + +* `postgres` 16.9 を使用。 [#81437](https://github.com/ClickHouse/ClickHouse/pull/81437) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* `openssl` 3.2.4 を使用。 [#81438](https://github.com/ClickHouse/ClickHouse/pull/81438) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* `abseil-cpp` 2025-01-27 を使用します。 [#81440](https://github.com/ClickHouse/ClickHouse/pull/81440) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* `mongo-c-driver` 1.30.4 を使用します。[#81449](https://github.com/ClickHouse/ClickHouse/pull/81449) ([Konstantin Bogdanov](https://github.com/thevar1able))。 +* `krb5` 1.21.3-final を使用します。[#81453](https://github.com/ClickHouse/ClickHouse/pull/81453)([Konstantin Bogdanov](https://github.com/thevar1able))。 +* `orc` 2.1.2 を使用するよう変更。 [#81455](https://github.com/ClickHouse/ClickHouse/pull/81455) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* `grpc` 1.73.0 を使用します。 [#81629](https://github.com/ClickHouse/ClickHouse/pull/81629) ([Konstantin Bogdanov](https://github.com/thevar1able)). * `delta-kernel-rs` v0.12.1 を使用するようにしました。 [#81707](https://github.com/ClickHouse/ClickHouse/pull/81707) ([Konstantin Bogdanov](https://github.com/thevar1able)). * `c-ares` を `v1.34.5` に更新しました。 [#81159](https://github.com/ClickHouse/ClickHouse/pull/81159) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* CVE-2025-5025 および CVE-2025-4947 に対処するため、`curl` を 8.14 に更新しました。 [#81171](https://github.com/ClickHouse/ClickHouse/pull/81171) ([larryluogit](https://github.com/larryluogit)). -* `libarchive` を 3.7.9 にアップグレードし、次の脆弱性に対処: CVE-2024-20696 CVE-2025-25724 CVE-2024-48958 CVE-2024-57970 CVE-2025-1632 CVE-2024-48957 CVE-2024-48615。 [#81174](https://github.com/ClickHouse/ClickHouse/pull/81174) ([larryluogit](https://github.com/larryluogit))。 -* `libxml2` を 2.14.3 にアップグレード。 [#81187](https://github.com/ClickHouse/ClickHouse/pull/81187) ([larryluogit](https://github.com/larryluogit)). -* ベンダリングされた Rust のソースコードを `CARGO_HOME` にコピーしないように変更しました。 [#79560](https://github.com/ClickHouse/ClickHouse/pull/79560) ([Konstantin Bogdanov](https://github.com/thevar1able))。 -* Sentry ライブラリへの依存を、独自のエンドポイントに置き換えることで解消しました。 [#80236](https://github.com/ClickHouse/ClickHouse/pull/80236) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* Dependabot のアラートに対処するために CI イメージ内の Python 依存関係を更新。 [#80658](https://github.com/ClickHouse/ClickHouse/pull/80658) ([Raúl Marín](https://github.com/Algunenano)). -* 起動時に Keeper からレプリケートされた DDL の停止フラグの読み取りを再試行するようにして、Keeper に対するフォルトインジェクションが有効な場合でもテストの堅牢性を高めました。 [#80964](https://github.com/ClickHouse/ClickHouse/pull/80964) ([Alexander Gololobov](https://github.com/davenger))。 -* Ubuntu アーカイブの URL に https を使用する。 [#81016](https://github.com/ClickHouse/ClickHouse/pull/81016) ([Raúl Marín](https://github.com/Algunenano)). +* CVE-2025-5025 と CVE-2025-4947 に対応するため、`curl` を 8.14 にアップグレード。 [#81171](https://github.com/ClickHouse/ClickHouse/pull/81171) ([larryluogit](https://github.com/larryluogit)). +* `libarchive` を 3.7.9 にアップグレードして、次の脆弱性に対処します: CVE-2024-20696 CVE-2025-25724 CVE-2024-48958 CVE-2024-57970 CVE-2025-1632 CVE-2024-48957 CVE-2024-48615。 [#81174](https://github.com/ClickHouse/ClickHouse/pull/81174) ([larryluogit](https://github.com/larryluogit))。 +* `libxml2` を 2.14.3 にアップグレード。 [#81187](https://github.com/ClickHouse/ClickHouse/pull/81187) ([larryluogit](https://github.com/larryluogit))。 +* ベンダリングされた Rust ソースコードを `CARGO_HOME` にコピーしないようにしました。 [#79560](https://github.com/ClickHouse/ClickHouse/pull/79560) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* 独自のエンドポイントに置き換えて、Sentryライブラリへの依存をなくしました。 [#80236](https://github.com/ClickHouse/ClickHouse/pull/80236) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* Dependabot のアラートに対応するため、CI イメージ内の Python の依存関係を更新しました。 [#80658](https://github.com/ClickHouse/ClickHouse/pull/80658) ([Raúl Marín](https://github.com/Algunenano)). +* Keeper に対してフォールトインジェクションが有効な場合にテストをより堅牢にするため、起動時に Keeper から複製 DDL の停止フラグを再読み取りするようにしました。 [#80964](https://github.com/ClickHouse/ClickHouse/pull/80964) ([Alexander Gololobov](https://github.com/davenger)). +* Ubuntu アーカイブの URL には HTTPS を使用するようにしました。[#81016](https://github.com/ClickHouse/ClickHouse/pull/81016) ([Raúl Marín](https://github.com/Algunenano)). * テストイメージの Python 依存関係を更新。 [#81042](https://github.com/ClickHouse/ClickHouse/pull/81042) ([dependabot[bot]](https://github.com/apps/dependabot)). * Nix ビルド用に `flake.nix` を導入。 [#81463](https://github.com/ClickHouse/ClickHouse/pull/81463) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* ビルド時にネットワークアクセスを必要としていた `delta-kernel-rs` を修正しました。[#80609](https://github.com/ClickHouse/ClickHouse/issues/80609) をクローズ。[#81602](https://github.com/ClickHouse/ClickHouse/pull/81602)([Konstantin Bogdanov](https://github.com/thevar1able))。記事「[ClickHouse における Rust の 1 年間](https://clickhouse.com/blog/rust)」を参照してください。 - - - +* ビルド時にネットワークアクセスが必要だった `delta-kernel-rs` を修正。[#80609](https://github.com/ClickHouse/ClickHouse/issues/80609) をクローズ。[#81602](https://github.com/ClickHouse/ClickHouse/pull/81602)([Konstantin Bogdanov](https://github.com/thevar1able))。[A Year of Rust in ClickHouse](https://clickhouse.com/blog/rust) の記事も参照してください。 -### ClickHouse リリース 25.5, 2025-05-22 {#255} +### ClickHouse リリース 25.5、2025-05-22 {#255} #### 後方互換性のない変更 -* 関数 `geoToH3` は、他の幾何関数と同様に (lat, lon, res) の順序で入力を受け取るようになりました。以前の引数の順序 (lon, lat, res) を維持したい場合は、設定 `geotoh3_argument_order = 'lon_lat'` を使用してください。 [#78852](https://github.com/ClickHouse/ClickHouse/pull/78852) ([Pratima Patel](https://github.com/pratimapatel2008)). -* ファイルシステムキャッシュ用の設定 `allow_dynamic_cache_resize` を追加しました。デフォルトは `false` で、これを有効にするとファイルシステムキャッシュの動的リサイズを許可します。理由: 特定の環境 (ClickHouse Cloud) では、すべてのスケーリングイベントがプロセスの再起動を通じて行われるため、この機能を明示的に無効化して動作をより厳密に制御したいこと、加えて安全対策のためです。この PR は後方互換性のない変更としてマークされています。以前のバージョンでは、特別な設定なしに動的キャッシュリサイズがデフォルトで有効だったためです。 [#79148](https://github.com/ClickHouse/ClickHouse/pull/79148) ([Kseniia Sumarokova](https://github.com/kssenii)). -* レガシーインデックス型 `annoy` および `usearch` のサポートを削除しました。両方とも長い間スタブの状態であり、レガシーインデックスを使用しようとするたびにエラーが返されていました。まだ `annoy` や `usearch` インデックスを保持している場合は、削除してください。 [#79802](https://github.com/ClickHouse/ClickHouse/pull/79802) ([Robert Schulze](https://github.com/rschu1ze)). -* `format_alter_commands_with_parentheses` サーバー設定を削除しました。この設定は 24.2 で導入され、デフォルトでは無効でした。25.2 でデフォルト有効になりました。新しいフォーマットをサポートしない LTS バージョンは存在しないため、この設定を削除できます。 [#79970](https://github.com/ClickHouse/ClickHouse/pull/79970) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). -* `DeltaLake` ストレージの `delta-kernel-rs` 実装をデフォルトで有効にしました。 [#79541](https://github.com/ClickHouse/ClickHouse/pull/79541) ([Kseniia Sumarokova](https://github.com/kssenii)). -* `URL` からの読み取りで複数回のリダイレクトが発生する場合、設定 `enable_url_encoding` がチェーン内のすべてのリダイレクトに対して正しく適用されるようになりました。 [#79563](https://github.com/ClickHouse/ClickHouse/pull/79563) ([Shankar Iyer](https://github.com/shankar-iyer)). また、設定 `enble_url_encoding` のデフォルト値は `false` に設定されました。 [#80088](https://github.com/ClickHouse/ClickHouse/pull/80088) ([Shankar Iyer](https://github.com/shankar-iyer)). - +* 関数 `geoToH3` は、他の幾何関数と同様に、入力を (lat, lon, res) の順序で受け取るようになりました。以前の引数の順序 (lon, lat, res) を維持したい場合は、設定 `geotoh3_argument_order = 'lon_lat'` を使用してください。[#78852](https://github.com/ClickHouse/ClickHouse/pull/78852)([Pratima Patel](https://github.com/pratimapatel2008))。 +* ファイルシステムキャッシュの設定 `allow_dynamic_cache_resize` を追加しました。デフォルトは `false` で、この設定を `true` にするとファイルシステムキャッシュの動的リサイズを許可します。理由: 一部の環境(ClickHouse Cloud)では、すべてのスケーリングイベントがプロセスの再起動を通じて行われ、この機能を明示的に無効化して挙動をより細かく制御したいこと、また安全性の観点からです。この PR は後方互換性のない変更としてマークされています。以前のバージョンでは、特別な設定なしに動的キャッシュリサイズがデフォルトで有効だったためです。[#79148](https://github.com/ClickHouse/ClickHouse/pull/79148)([Kseniia Sumarokova](https://github.com/kssenii))。 +* レガシーインデックス型 `annoy` と `usearch` のサポートを削除しました。これらは長い間スタブであり、レガシーインデックスを使用しようとするあらゆる試みは常にエラーを返していました。まだ `annoy` や `usearch` インデックスを保持している場合は、削除してください。[#79802](https://github.com/ClickHouse/ClickHouse/pull/79802)([Robert Schulze](https://github.com/rschu1ze))。 +* サーバー設定 `format_alter_commands_with_parentheses` を削除しました。この設定は 24.2 で導入され、デフォルトでは無効化されていました。25.2 でデフォルト有効になりました。新しいフォーマットをサポートしない LTS バージョンは存在しないため、この設定を削除できます。[#79970](https://github.com/ClickHouse/ClickHouse/pull/79970)([János Benjamin Antal](https://github.com/antaljanosbenjamin))。 +* `DeltaLake` ストレージの `delta-kernel-rs` 実装をデフォルトで有効化しました。[#79541](https://github.com/ClickHouse/ClickHouse/pull/79541)([Kseniia Sumarokova](https://github.com/kssenii))。 +* `URL` からの読み取りで複数回のリダイレクトが発生する場合、設定 `enable_url_encoding` がチェーン内のすべてのリダイレクトに対して正しく適用されるようになりました。[#79563](https://github.com/ClickHouse/ClickHouse/pull/79563)([Shankar Iyer](https://github.com/shankar-iyer))。設定 `enble_url_encoding` のデフォルト値は、現在 `false` に設定されています。[#80088](https://github.com/ClickHouse/ClickHouse/pull/80088)([Shankar Iyer](https://github.com/shankar-iyer))。 #### 新機能 -* WHERE 句でスカラー相関サブクエリをサポートしました。これにより [#6697](https://github.com/ClickHouse/ClickHouse/issues/6697) がクローズされました。[#79600](https://github.com/ClickHouse/ClickHouse/pull/79600)([Dmitry Novik](https://github.com/novikd))。単純なケースでは、射影リスト内の相関サブクエリをサポートしました。[#79925](https://github.com/ClickHouse/ClickHouse/pull/79925)([Dmitry Novik](https://github.com/novikd))。[#76078](https://github.com/ClickHouse/ClickHouse/pull/76078)([Dmitry Novik](https://github.com/novikd))。これにより、TPC-H テストスイートを 100% カバーするようになりました。 -* ベクトル類似性インデックスを使用したベクトル検索は、これまで実験的機能でしたが、ベータ版になりました。 [#80164](https://github.com/ClickHouse/ClickHouse/pull/80164) ([Robert Schulze](https://github.com/rschu1ze))。 -* `Parquet` フォーマットで geo 型のサポートを追加しました。これにより [#75317](https://github.com/ClickHouse/ClickHouse/issues/75317) が解決しました。[#79777](https://github.com/ClickHouse/ClickHouse/pull/79777)([scanhex12](https://github.com/scanhex12))。 -* インデックス作成や検索のために部分文字列を抽出する堅牢なアルゴリズムである「sparse-ngrams」を計算するための新しい関数 `sparseGrams`、`sparseGramsHashes`、`sparseGramsHashesUTF8`、`sparseGramsUTF8` を追加しました。 [#79517](https://github.com/ClickHouse/ClickHouse/pull/79517) ([scanhex12](https://github.com/scanhex12))。 -* `clickhouse-local`(およびその短縮エイリアスである `ch`)は、処理対象の入力データがある場合、暗黙的に `FROM table` を使用するようになりました。これにより [#65023](https://github.com/ClickHouse/ClickHouse/issues/65023) がクローズされました。また、通常のファイルを処理する際に `--input-format` が指定されていない場合は、`clickhouse-local` でフォーマット推論が有効になりました。[#79085](https://github.com/ClickHouse/ClickHouse/pull/79085)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* `stringBytesUniq` および `stringBytesEntropy` 関数を追加し、ランダムもしくは暗号化されている可能性のあるデータを検索できるようにしました。 [#79350](https://github.com/ClickHouse/ClickHouse/pull/79350) ([Sachin Kumar Singh](https://github.com/sachinkumarsingh092)). -* Base32 のエンコードおよびデコード用の関数を追加しました。 [#79809](https://github.com/ClickHouse/ClickHouse/pull/79809) ([Joanna Hulboj](https://github.com/jh0x))。 -* `getServerSetting` 関数と `getMergeTreeSetting` 関数を追加し、#78318 をクローズ。[#78439](https://github.com/ClickHouse/ClickHouse/pull/78439)([NamNguyenHoai](https://github.com/NamHoaiNguyen))。 -* `version-hint.text` ファイルを活用できるようにする新しい `iceberg_enable_version_hint` 設定を追加しました。 [#78594](https://github.com/ClickHouse/ClickHouse/pull/78594) ([Arnaud Briche](https://github.com/arnaudbriche))。 -* `LIKE` 句でフィルタリングして、データベース内の特定のテーブルを TRUNCATE できるようになりました。 [#78597](https://github.com/ClickHouse/ClickHouse/pull/78597) ([Yarik Briukhovetskyi](https://github.com/yariks5s))。 -* `MergeTree` ファミリーのテーブルで `_part_starting_offset` 仮想カラムをサポートしました。このカラムは、現在のパート一覧に基づきクエリ時に計算される、すべての先行パートの累積行数を表します。この累積値はクエリの実行全体を通じて保持され、パートのプルーニング後も有効です。この動作をサポートするため、関連する内部ロジックをリファクタリングしました。 [#79417](https://github.com/ClickHouse/ClickHouse/pull/79417) ([Amos Bird](https://github.com/amosbird))。 -* 右側の引数がゼロの場合に NULL を返す関数 `divideOrNull`、`moduloOrNull`、`intDivOrNull`、`positiveModuloOrNull` を追加。 [#78276](https://github.com/ClickHouse/ClickHouse/pull/78276) ([kevinyhzou](https://github.com/KevinyhZou)). -* ClickHouse のベクター検索は事前フィルタリングと事後フィルタリングの両方をサポートし、よりきめ細かな制御のための関連する設定を提供するようになりました。(issue [#78161](https://github.com/ClickHouse/ClickHouse/issues/78161))。[#79854](https://github.com/ClickHouse/ClickHouse/pull/79854)([Shankar Iyer](https://github.com/shankar-iyer))。 -* [`icebergHash`](https://iceberg.apache.org/spec/#appendix-b-32-bit-hash-requirements) 関数と [`icebergBucket`](https://iceberg.apache.org/spec/#bucket-transform-details) 関数を追加しました。[`bucket transfom`](https://iceberg.apache.org/spec/#partitioning) でパーティション化された `Iceberg` テーブルにおけるデータファイルのプルーニングをサポートしました。[#79262](https://github.com/ClickHouse/ClickHouse/pull/79262) ([Daniil Ivanik](https://github.com/divanik))。 - - +* `WHERE` 句でのスカラー相関サブクエリをサポートしました。[#6697](https://github.com/ClickHouse/ClickHouse/issues/6697) がクローズされました。[#79600](https://github.com/ClickHouse/ClickHouse/pull/79600)([Dmitry Novik](https://github.com/novikd))。単純なケースでは、射影リスト内の相関サブクエリもサポートしました。[#79925](https://github.com/ClickHouse/ClickHouse/pull/79925)([Dmitry Novik](https://github.com/novikd))。[#76078](https://github.com/ClickHouse/ClickHouse/pull/76078)([Dmitry Novik](https://github.com/novikd))。これにより、TPC-H テストスイートを 100% カバーできるようになりました。 +* ベクトル類似性インデックスを用いたベクトル検索が、これまでのexperimentalからbetaになりました。 [#80164](https://github.com/ClickHouse/ClickHouse/pull/80164) ([Robert Schulze](https://github.com/rschu1ze))。 +* `Parquet` フォーマットで geo 型をサポートしました。これにより [#75317](https://github.com/ClickHouse/ClickHouse/issues/75317) がクローズされました。[#79777](https://github.com/ClickHouse/ClickHouse/pull/79777)([scanhex12](https://github.com/scanhex12))。 +* インデックス作成および検索のための部分文字列抽出に用いる堅牢なアルゴリズムである「sparse-ngrams」を計算する新しい関数 `sparseGrams`、`sparseGramsHashes`、`sparseGramsHashesUTF8`、`sparseGramsUTF8` を追加。 [#79517](https://github.com/ClickHouse/ClickHouse/pull/79517) ([scanhex12](https://github.com/scanhex12)). +* `clickhouse-local`(およびその短縮エイリアスである `ch`)は、処理対象の入力データが存在する場合に、暗黙的な `FROM table` を使用するようになりました。これにより、[#65023](https://github.com/ClickHouse/ClickHouse/issues/65023) がクローズされました。また、通常のファイルを処理する際に `--input-format` が指定されていない場合、`clickhouse-local` でフォーマットの自動推論が有効になりました。[#79085](https://github.com/ClickHouse/ClickHouse/pull/79085)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* ランダムまたは暗号化されている可能性のあるデータを検索するための `stringBytesUniq` 関数と `stringBytesEntropy` 関数を追加しました。 [#79350](https://github.com/ClickHouse/ClickHouse/pull/79350) ([Sachin Kumar Singh](https://github.com/sachinkumarsingh092))。 +* Base32 のエンコードおよびデコードを行う関数を追加しました。 [#79809](https://github.com/ClickHouse/ClickHouse/pull/79809) ([Joanna Hulboj](https://github.com/jh0x)). +* `getServerSetting` と `getMergeTreeSetting` 関数を追加し、#78318 をクローズ。[#78439](https://github.com/ClickHouse/ClickHouse/pull/78439) ([NamNguyenHoai](https://github.com/NamHoaiNguyen))。 +* 新しい `iceberg_enable_version_hint` 設定を追加し、`version-hint.text` ファイルを利用できるようにしました。 [#78594](https://github.com/ClickHouse/ClickHouse/pull/78594) ([Arnaud Briche](https://github.com/arnaudbriche)). +* `LIKE` キーワードでフィルタして、データベース内の特定のテーブルだけを TRUNCATE できるようになりました。 [#78597](https://github.com/ClickHouse/ClickHouse/pull/78597) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* `MergeTree` ファミリーのテーブルで `_part_starting_offset` 仮想カラムをサポートしました。このカラムは、現在のパート一覧に基づきクエリ実行時に計算される、先行するすべてのパートの累積行数を表します。累積値はクエリ実行全体を通して保持され、パートのプルーニング後でも有効なままです。この挙動をサポートするため、関連する内部ロジックをリファクタリングしました。 [#79417](https://github.com/ClickHouse/ClickHouse/pull/79417) ([Amos Bird](https://github.com/amosbird)). +* 右側の引数がゼロの場合に NULL を返すようにするため、`divideOrNull`、`moduloOrNull`、`intDivOrNull`、`positiveModuloOrNull` 関数を追加しました。 [#78276](https://github.com/ClickHouse/ClickHouse/pull/78276) ([kevinyhzou](https://github.com/KevinyhZou)). +* ClickHouse のベクター検索は、プレフィルタリングとポストフィルタリングの両方をサポートし、よりきめ細かな制御のための関連設定も提供します (issue [#78161](https://github.com/ClickHouse/ClickHouse/issues/78161)). [#79854](https://github.com/ClickHouse/ClickHouse/pull/79854) ([Shankar Iyer](https://github.com/shankar-iyer)). +* [`icebergHash`](https://iceberg.apache.org/spec/#appendix-b-32-bit-hash-requirements) 関数と [`icebergBucket`](https://iceberg.apache.org/spec/#bucket-transform-details) 関数を追加しました。[`bucket transfom`](https://iceberg.apache.org/spec/#partitioning) でパーティション分割された `Iceberg` テーブルにおけるデータファイルのプルーニングに対応しました。[#79262](https://github.com/ClickHouse/ClickHouse/pull/79262) ([Daniil Ivanik](https://github.com/divanik))。 #### 実験的機能 -* 新しい `Time` / `Time64` データ型: `Time` (HHH:MM:SS) と `Time64` (HHH:MM:SS.`<fractional>`)、および他のデータ型との変換に使用するいくつかの基本的なキャスト関数と関連関数を追加しました。また、既存の関数名 toTime は、キャスト関数に toTime 関数が必要なため、toTimeWithFixedDate に変更しました。 [#75735](https://github.com/ClickHouse/ClickHouse/pull/75735) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -72459). -* Iceberg データレイク向けの Hive metastore カタログ。 [#77677](https://github.com/ClickHouse/ClickHouse/pull/77677) ([scanhex12](https://github.com/scanhex12)). -* `full_text` 型のインデックスの名称は `gin` に変更されました。これは PostgreSQL およびその他のデータベースでより一般的な用語に従ったものです。既存の `full_text` 型インデックスは引き続き読み込み可能ですが、検索で使用しようとすると例外がスローされ(代わりに `gin` インデックスを提案します)、利用できなくなります。 [#79024](https://github.com/ClickHouse/ClickHouse/pull/79024) ([Robert Schulze](https://github.com/rschu1ze)). - +* 新しい `Time` / `Time64` データ型:`Time` (HHH:MM:SS) および `Time64` (HHH:MM:SS.``) と、基本的なキャスト関数および他のデータ型と相互作用するための関数を追加しました。また、既存の関数名 `toTime` を `toTimeWithFixedDate` に変更しました。これは、キャスト関数で `toTime` 関数が必要となるためです。 [#75735](https://github.com/ClickHouse/ClickHouse/pull/75735) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* Iceberg データレイク向けの Hive metastore カタログを追加しました。 [#77677](https://github.com/ClickHouse/ClickHouse/pull/77677) ([scanhex12](https://github.com/scanhex12)). +* `full_text` 型のインデックスは `gin` に改名されました。これは PostgreSQL および他のデータベースでより一般的な用語に合わせたものです。既存の `full_text` 型インデックスは引き続き読み込み可能ですが、検索で使用しようとすると例外がスローされ(その際に代わりに `gin` インデックスを提案します)、使用できなくなります。 [#79024](https://github.com/ClickHouse/ClickHouse/pull/79024) ([Robert Schulze](https://github.com/rschu1ze)). #### パフォーマンスの向上 -* Compact パート形式を変更し、各サブストリームごとにマークを保存して個々のサブカラムを読み取れるようにしました。従来の Compact 形式は読み取りでは引き続きサポートされており、MergeTree 設定 `write_marks_for_substreams_in_compact_parts` を使用することで書き込みにも有効化できます。Compact パートのストレージ形式が変更されるため、より安全にアップグレードできるよう、デフォルトでは無効になっています。今後のいずれかのリリースでデフォルトで有効になる予定です。 [#77940](https://github.com/ClickHouse/ClickHouse/pull/77940) ([Pavel Kruglov](https://github.com/Avogar))。 -* サブカラムを含む条件を PREWHERE 句に移動できるようにしました。 [#79489](https://github.com/ClickHouse/ClickHouse/pull/79489) ([Pavel Kruglov](https://github.com/Avogar)). -* 複数のグラニュールに対して一度に式を評価することで、二次インデックスの評価を高速化しました。 [#64109](https://github.com/ClickHouse/ClickHouse/pull/64109) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* `compile_expressions`(通常の式の一部を対象とするJITコンパイラ)をデフォルトで有効にしました。これにより、[#51264](https://github.com/ClickHouse/ClickHouse/issues/51264)、[#56386](https://github.com/ClickHouse/ClickHouse/issues/56386)、[#66486](https://github.com/ClickHouse/ClickHouse/issues/66486) がクローズされました。[#79907](https://github.com/ClickHouse/ClickHouse/pull/79907)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 新しい設定 `use_skip_indexes_in_final_exact_mode` が導入されました。`ReplacingMergeTree` テーブルに対するクエリで FINAL 句を使用している場合、スキップインデックスに基づいてテーブルの範囲だけを読み取ると、誤った結果が返される可能性があります。この設定により、スキップインデックスによって返されたプライマリキー範囲と重なりのある新しいパーツをスキャンすることで、正しい結果が返されるようにできます。無効にするには 0、有効にするには 1 を設定します。 [#78350](https://github.com/ClickHouse/ClickHouse/pull/78350) ([Shankar Iyer](https://github.com/shankar-iyer)). -* オブジェクトストレージクラスターのテーブル関数(例: `s3Cluster`)は、キャッシュの局所性を改善するため、読み取り時にコンシステントハッシュに基づいてファイルをレプリカへ割り当てるようになりました。[#77326](https://github.com/ClickHouse/ClickHouse/pull/77326)([Andrej Hoos](https://github.com/adikus))。 -* `S3Queue`/`AzureQueue` において、INSERT を並列に実行できるようにすることでパフォーマンスを向上しました(キュー設定で `parallel_inserts=true` を有効化すると利用可能)。これまでは S3Queue/AzureQueue ではパイプラインの前半部分(ダウンロードとパース)のみ並列実行が可能で、INSERT はシングルスレッドでした。そして `INSERT` がボトルネックになることがほとんどです。今回の変更により、`processing_threads_num` に対してほぼ線形にスケールするようになりました。 [#77671](https://github.com/ClickHouse/ClickHouse/pull/77671) ([Azat Khuzhin](https://github.com/azat))。S3Queue/AzureQueue において、より公平な max_processed_files_before_commit の動作を実現しました。 [#79363](https://github.com/ClickHouse/ClickHouse/pull/79363) ([Azat Khuzhin](https://github.com/azat))。 -* 右側のテーブルのサイズがこのしきい値未満の場合に `hash` アルゴリズムにフォールバックするための、設定 `parallel_hash_join_threshold` によって制御されるしきい値を導入しました。 [#76185](https://github.com/ClickHouse/ClickHouse/pull/76185) ([Nikita Taranov](https://github.com/nickitat))。 -* 現在は、parallel replicas が有効な読み取り処理において、タスクサイズを決定する際にレプリカ数を使用します。これにより、読み取るデータ量がそれほど多くない場合でも、レプリカ間での作業負荷の分散がより良好になります。 [#78695](https://github.com/ClickHouse/ClickHouse/pull/78695) ([Nikita Taranov](https://github.com/nickitat))。 +* Compact パーツ形式を変更し、各サブストリームごとにマークを保存して個々のサブカラムを読み取れるようにしました。従来の Compact 形式は読み取りでは引き続きサポートされており、MergeTree 設定 `write_marks_for_substreams_in_compact_parts` を使用することで書き込みにも有効化できます。Compact パーツのストレージ仕様が変更されるため、より安全にアップグレードできるよう、デフォルトでは無効になっています。今後のいずれかのリリースでデフォルトで有効になる予定です。 [#77940](https://github.com/ClickHouse/ClickHouse/pull/77940) ([Pavel Kruglov](https://github.com/Avogar)). +* サブカラムを含む条件を `prewhere` に移動できるようにしました。 [#79489](https://github.com/ClickHouse/ClickHouse/pull/79489) ([Pavel Kruglov](https://github.com/Avogar)). +* 複数のグラニュールをまとめて対象に式を評価することで、セカンダリインデックスの処理を高速化しました。 [#64109](https://github.com/ClickHouse/ClickHouse/pull/64109) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* `compile_expressions`(通常の式の一部に対する JIT コンパイラ)をデフォルトで有効化しました。これにより [#51264](https://github.com/ClickHouse/ClickHouse/issues/51264) と [#56386](https://github.com/ClickHouse/ClickHouse/issues/56386) および [#66486](https://github.com/ClickHouse/ClickHouse/issues/66486) がクローズされました。[#79907](https://github.com/ClickHouse/ClickHouse/pull/79907)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 新しい設定 `use_skip_indexes_in_final_exact_mode` が導入されました。`ReplacingMergeTree` テーブルに対するクエリで FINAL 句が指定されている場合、スキップインデックスに基づいてテーブル範囲のみを読み取ると、誤った結果が返される可能性があります。この設定を有効にすると、スキップインデックスで返された主キー範囲と重複する新しいパーツを走査することで、正しい結果が返されるようにできます。無効にするには 0、有効にするには 1 を設定します。 [#78350](https://github.com/ClickHouse/ClickHouse/pull/78350)([Shankar Iyer](https://github.com/shankar-iyer))。 +* オブジェクトストレージクラスターのテーブル関数(例: `s3Cluster`)は、キャッシュローカリティを改善するため、コンシステントハッシュに基づいて読み取り用のファイルをレプリカに割り当てるようになりました。 [#77326](https://github.com/ClickHouse/ClickHouse/pull/77326) ([Andrej Hoos](https://github.com/adikus)) +* `S3Queue`/`AzureQueue` のパフォーマンスを、`INSERT` を並列に実行できるようにすることで改善しました(キュー設定で `parallel_inserts=true` を有効化すると利用可能)。これまでは S3Queue/AzureQueue はパイプラインの前半(ダウンロード、パース)のみ並列実行でき、`INSERT` は単一スレッドでした。また、`INSERT` がボトルネックとなることがほとんどです。今回の変更により、`processing_threads_num` に対してほぼ線形にスケールするようになりました。 [#77671](https://github.com/ClickHouse/ClickHouse/pull/77671)([Azat Khuzhin](https://github.com/azat))。S3Queue/AzureQueue における `max_processed_files_before_commit` の扱いが、より公平になるよう改善しました。 [#79363](https://github.com/ClickHouse/ClickHouse/pull/79363)([Azat Khuzhin](https://github.com/azat))。 +* 右側テーブルのサイズが閾値未満の場合に `hash` アルゴリズムへフォールバックするための閾値(`parallel_hash_join_threshold` 設定で調整可能)を導入しました。 [#76185](https://github.com/ClickHouse/ClickHouse/pull/76185) ([Nikita Taranov](https://github.com/nickitat)). +* 並列レプリカを有効にした読み取りでは、タスクの大きさを決定する際にレプリカ数を使用するようになりました。これにより、読み取るデータ量がそれほど大きくない場合でも、レプリカ間の処理負荷の分散が改善されます。 [#78695](https://github.com/ClickHouse/ClickHouse/pull/78695) ([Nikita Taranov](https://github.com/nickitat)). * 分散集約の最終段階で `uniqExact` 状態を並列にマージできるようにしました。 [#78703](https://github.com/ClickHouse/ClickHouse/pull/78703) ([Nikita Taranov](https://github.com/nickitat)). -* キーを伴う集約における `uniqExact` 状態の並列マージで発生しうるパフォーマンス低下を修正。 [#78724](https://github.com/ClickHouse/ClickHouse/pull/78724) ([Nikita Taranov](https://github.com/nickitat)). -* Azure Storage への List Blobs API 呼び出し回数を削減しました。 [#78860](https://github.com/ClickHouse/ClickHouse/pull/78860) ([Julia Kartseva](https://github.com/jkartseva))。 -* 並列レプリカを用いた分散 INSERT SELECT のパフォーマンスを改善しました。 [#79441](https://github.com/ClickHouse/ClickHouse/pull/79441) ([Azat Khuzhin](https://github.com/azat)). -* `LogSeriesLimiter` がインスタンス生成のたびにクリーンアップを行わないようにすることで、高並行な環境におけるロック競合とパフォーマンス低下を回避します。 [#79864](https://github.com/ClickHouse/ClickHouse/pull/79864) ([filimonov](https://github.com/filimonov)). -* trivial count 最適化によりクエリを高速化しました。 [#79945](https://github.com/ClickHouse/ClickHouse/pull/79945) ([Raúl Marín](https://github.com/Algunenano)). -* 一部の `Decimal` 演算でインライン化を改善しました。 [#79999](https://github.com/ClickHouse/ClickHouse/pull/79999) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* `input_format_parquet_bloom_filter_push_down` をデフォルトで true に設定しました。また、設定変更履歴の誤りを修正しました。 [#80058](https://github.com/ClickHouse/ClickHouse/pull/80058) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* すべての行が削除されるパーツに対する `ALTER ... DELETE` ミューテーションを最適化しました。これにより、そのようなケースではミューテーションを実行して元のパーツを書き換える代わりに、空のパーツが作成されるようになりました。 [#79307](https://github.com/ClickHouse/ClickHouse/pull/79307) ([Anton Popov](https://github.com/CurtizJ)). -* Compact パーツへの挿入時に、可能な限りブロックの不要なコピーを避けるようにしました。 [#79536](https://github.com/ClickHouse/ClickHouse/pull/79536) ([Pavel Kruglov](https://github.com/Avogar)). -* `input_format_max_block_size_bytes` 設定を追加して、入力フォーマットで作成されるブロックのサイズをバイト単位で制限できるようにしました。これにより、行に大きな値が含まれている場合のデータインポート時のメモリ使用量の増大を回避するのに役立ちます。 [#79495](https://github.com/ClickHouse/ClickHouse/pull/79495) ([Pavel Kruglov](https://github.com/Avogar))。 -* スレッドおよび async_socket_for_remote/use_hedge_requests のガードページを削除しました。`FiberStack` のメモリアロケーション方式を `mmap` から `aligned_alloc` に変更しました。`mmap` は VMA を分割し、高負荷時には vm.max_map_count の上限に達する可能性があるためです。[#79147](https://github.com/ClickHouse/ClickHouse/pull/79147)([Sema Checherinda](https://github.com/CheSema))。 -* 並列レプリカでの遅延マテリアライズ。 [#79401](https://github.com/ClickHouse/ClickHouse/pull/79401) ([Igor Nikonov](https://github.com/devcrafter)). - - - - +* キー付き集約における `uniqExact` 状態の並列マージ時に発生しうるパフォーマンス低下を修正。 [#78724](https://github.com/ClickHouse/ClickHouse/pull/78724) ([Nikita Taranov](https://github.com/nickitat)). +* Azure Storage への List Blobs API 呼び出し回数を削減しました。 [#78860](https://github.com/ClickHouse/ClickHouse/pull/78860) ([Julia Kartseva](https://github.com/jkartseva)). +* 分散 INSERT SELECT の並列レプリカ使用時のパフォーマンスを改善。 [#79441](https://github.com/ClickHouse/ClickHouse/pull/79441) ([Azat Khuzhin](https://github.com/azat)). +* 高い並行性の環境においてロック競合と性能劣化を避けるため、`LogSeriesLimiter` がコンストラクタ呼び出しのたびにクリーンアップを実行しないようにしました。 [#79864](https://github.com/ClickHouse/ClickHouse/pull/79864) ([filimonov](https://github.com/filimonov)). +* 単純な count 最適化によりクエリの実行を高速化しました。 [#79945](https://github.com/ClickHouse/ClickHouse/pull/79945) ([Raúl Marín](https://github.com/Algunenano)). +* `Decimal` を使用する一部の演算のインライン化を改善しました。 [#79999](https://github.com/ClickHouse/ClickHouse/pull/79999) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* `input_format_parquet_bloom_filter_push_down` をデフォルトで true に設定しました。また、設定変更履歴の誤りを修正しました。[#80058](https://github.com/ClickHouse/ClickHouse/pull/80058) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* すべての行を削除すべきパーツに対する `ALTER ... DELETE` ミューテーションを最適化しました。これにより、そのような場合にはミューテーションを実行せず、元のパーツを作り直す代わりに空のパーツが作成されるようになりました。 [#79307](https://github.com/ClickHouse/ClickHouse/pull/79307) ([Anton Popov](https://github.com/CurtizJ)). +* 可能な場合には、Compact パートへの挿入時にブロックの余分なコピーを行わないようにしました。 [#79536](https://github.com/ClickHouse/ClickHouse/pull/79536) ([Pavel Kruglov](https://github.com/Avogar)). +* `input_format_max_block_size_bytes` 設定を追加し、入力フォーマットで作成されるブロックをバイト単位で制限できるようにしました。これにより、行に大きな値が含まれるデータをインポートする際の過剰なメモリ使用量を回避するのに役立ちます。 [#79495](https://github.com/ClickHouse/ClickHouse/pull/79495) ([Pavel Kruglov](https://github.com/Avogar))。 +* スレッドおよび async_socket_for_remote/use_hedge_requests のガードページを削除しました。`FiberStack` におけるアロケーション方式を `mmap` から `aligned_alloc` に変更しました。これは VMA を分割し、高負荷時には vm.max_map_count の上限に達する可能性があるためです。[#79147](https://github.com/ClickHouse/ClickHouse/pull/79147)([Sema Checherinda](https://github.com/CheSema))。 +* 並列レプリカにおける遅延マテリアライゼーション。 [#79401](https://github.com/ClickHouse/ClickHouse/pull/79401) ([Igor Nikonov](https://github.com/devcrafter)). #### 改善 -* オンザフライで軽量削除を適用できる機能を追加しました(設定 `lightweight_deletes_sync = 0`、`apply_mutations_on_fly = 1` を使用)。[#79281](https://github.com/ClickHouse/ClickHouse/pull/79281)([Anton Popov](https://github.com/CurtizJ))。 -* ターミナルに pretty フォーマットでデータが表示されていて、その後続のブロックが同じカラム幅を持つ場合、カーソルを上に移動して前のブロックに結合し、前のブロックから続けて表示できるようになりました。これにより [#79333](https://github.com/ClickHouse/ClickHouse/issues/79333) が解決されました。この機能は新しい設定 `output_format_pretty_glue_chunks` によって制御されます。[#79339](https://github.com/ClickHouse/ClickHouse/pull/79339)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* `isIPAddressInRange` 関数を `String`、`IPv4`、`IPv6`、`Nullable(String)`、`Nullable(IPv4)`、および `Nullable(IPv6)` データ型に対応しました。 [#78364](https://github.com/ClickHouse/ClickHouse/pull/78364) ([YjyJeff](https://github.com/YjyJeff)). -* `PostgreSQL` エンジンのコネクションプーラー設定を動的に変更できるようにしました。 [#78414](https://github.com/ClickHouse/ClickHouse/pull/78414) ([Samay Sharma](https://github.com/samay-sharma)). -* 通常のプロジェクションで `_part_offset` を指定可能にしました。これはプロジェクションインデックスを構築するための第一歩です。[#58224](https://github.com/ClickHouse/ClickHouse/issues/58224) と併用でき、#63207 の改善にも役立ちます。[#78429](https://github.com/ClickHouse/ClickHouse/pull/78429) ([Amos Bird](https://github.com/amosbird))。 -* `system.named_collections` に新しいカラム(`create_query` と `source`)を追加しました。[#78179](https://github.com/ClickHouse/ClickHouse/issues/78179) をクローズしました。[#78582](https://github.com/ClickHouse/ClickHouse/pull/78582)([MikhailBurdukov](https://github.com/MikhailBurdukov))。 -* システムテーブル `system.query_condition_cache` に新しいフィールド `condition` を追加しました。クエリ条件キャッシュでキーとして使用されるハッシュの元となるプレーンテキストの条件式を保持します。 [#78671](https://github.com/ClickHouse/ClickHouse/pull/78671) ([Robert Schulze](https://github.com/rschu1ze)). -* `BFloat16` 列に対してベクトル類似インデックスを作成できるようになりました。 [#78850](https://github.com/ClickHouse/ClickHouse/pull/78850) ([Robert Schulze](https://github.com/rschu1ze)). -* ベストエフォートでの `DateTime64` 解析で、小数部付きの Unix タイムスタンプをサポート。 [#78908](https://github.com/ClickHouse/ClickHouse/pull/78908) ([Pavel Kruglov](https://github.com/Avogar))。 -* ストレージ `DeltaLake` の delta-kernel 実装でカラムマッピングモードを修正し、スキーマ進化用のテストを追加。[#78921](https://github.com/ClickHouse/ClickHouse/pull/78921) ([Kseniia Sumarokova](https://github.com/kssenii))。 -* Values 形式で `Variant` カラムに挿入する際の値の変換を改善しました。 [#78923](https://github.com/ClickHouse/ClickHouse/pull/78923) ([Pavel Kruglov](https://github.com/Avogar)). -* `tokens` 関数が拡張され、追加の「tokenizer」引数に加えて tokenizer 固有の引数も受け取れるようになりました。 [#79001](https://github.com/ClickHouse/ClickHouse/pull/79001) ([Elmi Ahmadov](https://github.com/ahmadov))。 -* `SHOW CLUSTER` ステートメントは、引数内のマクロ(もしあれば)を展開するようになりました。 [#79006](https://github.com/ClickHouse/ClickHouse/pull/79006) ([arf42](https://github.com/arf42)). -* ハッシュ関数は、配列、タプル、およびマップ内の `NULL` 値をサポートするようになりました(issues [#48365](https://github.com/ClickHouse/ClickHouse/issues/48365) および [#48623](https://github.com/ClickHouse/ClickHouse/issues/48623))。 [#79008](https://github.com/ClickHouse/ClickHouse/pull/79008)([Michael Kolupaev](https://github.com/al13n321))。 -* cctz を 2025a に更新。 [#79043](https://github.com/ClickHouse/ClickHouse/pull/79043) ([Raúl Marín](https://github.com/Algunenano)). -* UDF のデフォルトの stderr 処理を "log_last" に変更しました。使い勝手が向上します。 [#79066](https://github.com/ClickHouse/ClickHouse/pull/79066) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Web UI でタブ操作を取り消せるようにしました。これにより [#71284](https://github.com/ClickHouse/ClickHouse/issues/71284) がクローズされます。[#79084](https://github.com/ClickHouse/ClickHouse/pull/79084) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* `recoverLostReplica` 実行時の設定を、[https://github.com/ClickHouse/ClickHouse/pull/78637](https://github.com/ClickHouse/ClickHouse/pull/78637) と同様に削除しました。[#79113](https://github.com/ClickHouse/ClickHouse/pull/79113)([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 -* Parquet インデックスのプルーニングをプロファイルするため、プロファイルイベント `ParquetReadRowGroups` と `ParquetPrunedRowGroups` を追加しました。 [#79180](https://github.com/ClickHouse/ClickHouse/pull/79180) ([flynn](https://github.com/ucasfl)). -* クラスター上のデータベースに対する `ALTER` をサポートしました。 [#79242](https://github.com/ClickHouse/ClickHouse/pull/79242) ([Tuan Pham Anh](https://github.com/tuanpach)). -* QueryMetricLog の統計収集で発生した実行漏れを明示的にスキップするようにしないと、ログが現在時刻に追いつくまでに非常に長い時間がかかります。 [#79257](https://github.com/ClickHouse/ClickHouse/pull/79257) ([Mikhail Artemenko](https://github.com/Michicosun)). -* `Arrow` ベースのフォーマットの読み込みに対して、いくつかの軽微な最適化を行いました。 [#79308](https://github.com/ClickHouse/ClickHouse/pull/79308) ([Bharat Nallan](https://github.com/bharatnc)). -* 設定 `allow_archive_path_syntax` は、誤って実験的機能としてマークされていました。実験的な設定がデフォルトで有効にならないことを確認するテストを追加しました。 [#79320](https://github.com/ClickHouse/ClickHouse/pull/79320) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* ページキャッシュ設定をクエリごとに調整可能にしました。これは、より高速な実験や、高スループットかつ低レイテンシーなクエリ向けに細かくチューニングできるようにするために必要です。 [#79337](https://github.com/ClickHouse/ClickHouse/pull/79337) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* 典型的な 64-bit ハッシュのように見える数値については、数値ヒントを見やすい書式で表示しないようにしました。これにより [#79334](https://github.com/ClickHouse/ClickHouse/issues/79334) が解決されました。[#79338](https://github.com/ClickHouse/ClickHouse/pull/79338)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 高度なダッシュボード上のグラフの色は、対応するクエリのハッシュから計算されます。これにより、ダッシュボードをスクロールする際にグラフを覚えておきやすくなり、目的のグラフを見つけやすくなります。 [#79341](https://github.com/ClickHouse/ClickHouse/pull/79341) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 非同期メトリック `FilesystemCacheCapacity` を追加しました。これは `cache` 仮想ファイルシステムの総容量を表します。インフラストラクチャ全体の監視に有用です。 [#79348](https://github.com/ClickHouse/ClickHouse/pull/79348) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* system.parts へのアクセスを最適化し、要求された場合にのみ列/インデックスサイズを読み取るようにしました。 [#79352](https://github.com/ClickHouse/ClickHouse/pull/79352) ([Azat Khuzhin](https://github.com/azat)). -* クエリ `'SHOW CLUSTER '` で、すべてのフィールドではなく関連するフィールドのみを計算するようにしました。 [#79368](https://github.com/ClickHouse/ClickHouse/pull/79368) ([Tuan Pham Anh](https://github.com/tuanpach)). +* `lightweight_deletes_sync = 0` および `apply_mutations_on_fly = 1` の設定により、軽量削除をオンザフライで適用できるようにしました。 [#79281](https://github.com/ClickHouse/ClickHouse/pull/79281) ([Anton Popov](https://github.com/CurtizJ)). +* ターミナルにpretty形式でデータが表示されており、その後続のブロックが同じ列幅を持つ場合、カーソルを上方向に移動して前のブロックに連結し、前のブロックから連続して表示できます。これにより [#79333](https://github.com/ClickHouse/ClickHouse/issues/79333) が解決されました。この機能は新しい設定 `output_format_pretty_glue_chunks` によって制御されます。 [#79339](https://github.com/ClickHouse/ClickHouse/pull/79339) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* `isIPAddressInRange` 関数を拡張し、`String`、`IPv4`、`IPv6`、`Nullable(String)`、`Nullable(IPv4)`、`Nullable(IPv6)` データ型をサポート。 [#78364](https://github.com/ClickHouse/ClickHouse/pull/78364) ([YjyJeff](https://github.com/YjyJeff)). +* `PostgreSQL` エンジンの接続プール設定を動的に変更できるようになりました。 [#78414](https://github.com/ClickHouse/ClickHouse/pull/78414) ([Samay Sharma](https://github.com/samay-sharma)). +* 通常のプロジェクションにおいて `_part_offset` を指定できるようにしました。これはプロジェクションインデックスを構築するための第一歩です。[#58224](https://github.com/ClickHouse/ClickHouse/issues/58224) と組み合わせて利用でき、#63207 の改善にも役立ちます。 [#78429](https://github.com/ClickHouse/ClickHouse/pull/78429) ([Amos Bird](https://github.com/amosbird))。 +* `system.named_collections` に新しいカラム(`create_query` と `source`)を追加しました。 [#78179](https://github.com/ClickHouse/ClickHouse/issues/78179) をクローズしました。 [#78582](https://github.com/ClickHouse/ClickHouse/pull/78582)([MikhailBurdukov](https://github.com/MikhailBurdukov))。 +* システムテーブル `system.query_condition_cache` に新しいフィールド `condition` を追加しました。クエリ条件キャッシュでキーとして使用されるハッシュの元となるプレーンテキストの条件を保存します。 [#78671](https://github.com/ClickHouse/ClickHouse/pull/78671) ([Robert Schulze](https://github.com/rschu1ze)). +* `BFloat16` 型の列に対してベクトル類似インデックスを作成できるようになりました。 [#78850](https://github.com/ClickHouse/ClickHouse/pull/78850) ([Robert Schulze](https://github.com/rschu1ze)). +* 小数部を含む Unixタイムスタンプを、`DateTime64` のベストエフォート解析でサポートするようにしました。 [#78908](https://github.com/ClickHouse/ClickHouse/pull/78908) ([Pavel Kruglov](https://github.com/Avogar))。 +* ストレージ `DeltaLake` の delta-kernel 実装において、カラムマッピングモードを修正し、スキーマエボリューション用のテストを追加しました。 [#78921](https://github.com/ClickHouse/ClickHouse/pull/78921) ([Kseniia Sumarokova](https://github.com/kssenii))。 +* `Values` フォーマットでの `Variant` 列への挿入時の値変換を改善しました。 [#78923](https://github.com/ClickHouse/ClickHouse/pull/78923) ([Pavel Kruglov](https://github.com/Avogar)). +* `tokens` 関数が拡張され、追加の `tokenizer` 引数およびさらに tokenizer 固有の引数を受け取れるようになりました。 [#79001](https://github.com/ClickHouse/ClickHouse/pull/79001) ([Elmi Ahmadov](https://github.com/ahmadov))。 +* `SHOW CLUSTER` ステートメントは、引数内に含まれるマクロがあればそれらを展開するようになりました。 [#79006](https://github.com/ClickHouse/ClickHouse/pull/79006) ([arf42](https://github.com/arf42))。 +* ハッシュ関数が、配列、タプル、およびマップ内の `NULL` をサポートするようになりました(issues [#48365](https://github.com/ClickHouse/ClickHouse/issues/48365) および [#48623](https://github.com/ClickHouse/ClickHouse/issues/48623))。[#79008](https://github.com/ClickHouse/ClickHouse/pull/79008)([Michael Kolupaev](https://github.com/al13n321))。 +* cctz を 2025a に更新しました。 [#79043](https://github.com/ClickHouse/ClickHouse/pull/79043) ([Raúl Marín](https://github.com/Algunenano)). +* UDF のデフォルト stderr 処理を "log_last" に変更しました。ユーザビリティが向上します。 [#79066](https://github.com/ClickHouse/ClickHouse/pull/79066) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Web UI でタブ操作を元に戻せるようにしました。これにより [#71284](https://github.com/ClickHouse/ClickHouse/issues/71284) がクローズされました。[#79084](https://github.com/ClickHouse/ClickHouse/pull/79084)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* `recoverLostReplica` 中で設定を削除するようにしました。実装は次の対応と同様です: [https://github.com/ClickHouse/ClickHouse/pull/78637](https://github.com/ClickHouse/ClickHouse/pull/78637)。 [#79113](https://github.com/ClickHouse/ClickHouse/pull/79113) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 +* プロファイルイベント `ParquetReadRowGroups` および `ParquetPrunedRowGroups` を追加し、Parquet インデックスのプルーニング処理をプロファイリングできるようにしました。 [#79180](https://github.com/ClickHouse/ClickHouse/pull/79180) ([flynn](https://github.com/ucasfl)). +* クラスター上のデータベースに対する `ALTER` をサポート。 [#79242](https://github.com/ClickHouse/ClickHouse/pull/79242) ([Tuan Pham Anh](https://github.com/tuanpach)). +* `QueryMetricLog` の統計収集で、実行されずに取り逃した回を明示的にスキップするようにし、そうしない場合にログが現在時刻に追いつくまで長時間かかってしまう問題を防ぎます。 [#79257](https://github.com/ClickHouse/ClickHouse/pull/79257) ([Mikhail Artemenko](https://github.com/Michicosun)). +* `Arrow` ベースのフォーマットの読み取りに関する軽微な最適化を行いました。[#79308](https://github.com/ClickHouse/ClickHouse/pull/79308) ([Bharat Nallan](https://github.com/bharatnc))。 +* 設定 `allow_archive_path_syntax` は誤って experimental とマークされていました。experimental な設定がデフォルトで有効にならないことを保証するテストを追加しました。 [#79320](https://github.com/ClickHouse/ClickHouse/pull/79320) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* ページキャッシュ設定をクエリ単位で調整可能にしました。これにより、高スループットかつ低レイテンシーなクエリ向けに微調整したり、より高速に実験できるようになります。 [#79337](https://github.com/ClickHouse/ClickHouse/pull/79337) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* 典型的な 64 ビットハッシュのように見える数値については、見栄えの良い形式で数値ツールチップを表示しないようにしました。これにより [#79334](https://github.com/ClickHouse/ClickHouse/issues/79334) がクローズされました。[#79338](https://github.com/ClickHouse/ClickHouse/pull/79338)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 高度なダッシュボードのグラフの色は、対応するクエリのハッシュから計算されます。これにより、ダッシュボードをスクロールしているときでも、グラフを記憶し、見つけやすくなります。 [#79341](https://github.com/ClickHouse/ClickHouse/pull/79341) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 非同期メトリクスである `FilesystemCacheCapacity` を追加しました。これは `cache` 仮想ファイルシステムの総容量を表し、グローバルなインフラストラクチャ監視に役立ちます。 [#79348](https://github.com/ClickHouse/ClickHouse/pull/79348) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* system.parts へのアクセスを最適化し、要求された場合にのみ列/インデックスのサイズを読み取るようにした。 [#79352](https://github.com/ClickHouse/ClickHouse/pull/79352) ([Azat Khuzhin](https://github.com/azat)). +* クエリ `SHOW CLUSTER ` に対して、すべてのフィールドではなく必要なフィールドのみを計算するようにしました。 [#79368](https://github.com/ClickHouse/ClickHouse/pull/79368) ([Tuan Pham Anh](https://github.com/tuanpach)). * `DatabaseCatalog` のストレージ設定を指定できるようにしました。 [#79407](https://github.com/ClickHouse/ClickHouse/pull/79407) ([Kseniia Sumarokova](https://github.com/kssenii)). -* `DeltaLake` でローカルストレージのサポートを追加しました。 [#79416](https://github.com/ClickHouse/ClickHouse/pull/79416) ([Kseniia Sumarokova](https://github.com/kssenii)). -* delta-kernel-rs を有効にするためのクエリレベル設定 `allow_experimental_delta_kernel_rs` を追加。[#79418](https://github.com/ClickHouse/ClickHouse/pull/79418) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Azure/S3 の BLOB ストレージから BLOB を一覧取得する際に発生する可能性のあった無限ループを修正。 [#79425](https://github.com/ClickHouse/ClickHouse/pull/79425) ([Alexander Gololobov](https://github.com/davenger)). -* ファイルシステムキャッシュ設定 `max_size_ratio_to_total_space` を追加しました。 [#79460](https://github.com/ClickHouse/ClickHouse/pull/79460)([Kseniia Sumarokova](https://github.com/kssenii))。 -* `clickhouse-benchmark` について、`reconnect` オプションの設定を変更し、再接続の挙動を制御する値として 0、1、または N を指定できるようにしました。[#79465](https://github.com/ClickHouse/ClickHouse/pull/79465)([Sachin Kumar Singh](https://github.com/sachinkumarsingh092))。 -* 異なる `plain_rewritable` ディスク上にあるテーブルに対して `ALTER TABLE ... MOVE|REPLACE PARTITION` を許可できるようにしました。 [#79566](https://github.com/ClickHouse/ClickHouse/pull/79566) ([Julia Kartseva](https://github.com/jkartseva)). -* ベクトル類似度インデックスは、参照ベクターが `Array(BFloat16)` 型の場合にも使用されるようになりました。 [#79745](https://github.com/ClickHouse/ClickHouse/pull/79745) ([Shankar Iyer](https://github.com/shankar-iyer)). +* `DeltaLake` でローカルストレージをサポートしました。 [#79416](https://github.com/ClickHouse/ClickHouse/pull/79416) ([Kseniia Sumarokova](https://github.com/kssenii)). +* delta-kernel-rs を有効化するためのクエリレベル設定 `allow_experimental_delta_kernel_rs` を追加しました。 [#79418](https://github.com/ClickHouse/ClickHouse/pull/79418) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Azure/S3 BLOB ストレージからの BLOB 一覧取得時に発生しうる無限ループを修正。 [#79425](https://github.com/ClickHouse/ClickHouse/pull/79425) ([Alexander Gololobov](https://github.com/davenger))。 +* ファイルシステムキャッシュの設定 `max_size_ratio_to_total_space` を追加しました。 [#79460](https://github.com/ClickHouse/ClickHouse/pull/79460) ([Kseniia Sumarokova](https://github.com/kssenii)). +* `clickhouse-benchmark` について、再接続の挙動に応じて `reconnect` オプションに 0、1、または N を指定できるように変更しました。 [#79465](https://github.com/ClickHouse/ClickHouse/pull/79465) ([Sachin Kumar Singh](https://github.com/sachinkumarsingh092)). +* 異なる `plain_rewritable` ディスク上にあるテーブルに対して `ALTER TABLE ... MOVE|REPLACE PARTITION` を実行できるようにしました。 [#79566](https://github.com/ClickHouse/ClickHouse/pull/79566) ([Julia Kartseva](https://github.com/jkartseva)). +* 参照ベクトルが `Array(BFloat16)` 型の場合にも、ベクトル類似度インデックスが使用されるようになりました。 [#79745](https://github.com/ClickHouse/ClickHouse/pull/79745) ([Shankar Iyer](https://github.com/shankar-iyer)). * last_error_message、last_error_trace、および query_id を system.error_log テーブルに追加しました。関連チケット [#75816](https://github.com/ClickHouse/ClickHouse/issues/75816)。[#79836](https://github.com/ClickHouse/ClickHouse/pull/79836)([Andrei Tinikov](https://github.com/Dolso))。 -* クラッシュレポートの送信をデフォルトで有効にしました。これはサーバーの設定ファイルで無効化できます。 [#79838](https://github.com/ClickHouse/ClickHouse/pull/79838) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* システムテーブル `system.functions` に、各関数が最初に導入された ClickHouse バージョンが表示されるようになりました。 [#79839](https://github.com/ClickHouse/ClickHouse/pull/79839) ([Robert Schulze](https://github.com/rschu1ze)). -* `access_control_improvements.enable_user_name_access_type` 設定を追加しました。この設定により、[https://github.com/ClickHouse/ClickHouse/pull/72246](https://github.com/ClickHouse/ClickHouse/pull/72246) で導入されたユーザー/ロールに対する厳密な権限付与を有効/無効にできます。レプリカの一部が 25.1 より前のバージョンであるクラスタを使用している場合は、この設定をオフにすることを検討してください。[#79842](https://github.com/ClickHouse/ClickHouse/pull/79842)([pufit](https://github.com/pufit))。 -* `ASTSelectWithUnionQuery::clone()` メソッドの正しい実装で、`is_normalized` フィールドも考慮されるようになりました。これにより、[#77569](https://github.com/ClickHouse/ClickHouse/issues/77569) の解決に役立つ可能性があります。[#79909](https://github.com/ClickHouse/ClickHouse/pull/79909)([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 -* `EXCEPT` 演算子を含む一部のクエリにおける一貫性のないフォーマットを修正します。`EXCEPT` 演算子の左辺が `*` で終わる場合、フォーマット後のクエリでは括弧が失われ、その結果 `EXCEPT` 修飾子付きの `*` としてパースされてしまいます。これらのクエリは fuzzer によって検出されたものであり、実際に遭遇する可能性は低いと考えられます。この変更により [#79950](https://github.com/ClickHouse/ClickHouse/issues/79950) がクローズされます。 [#79952](https://github.com/ClickHouse/ClickHouse/pull/79952) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* `JSON` 型のパースにおいて、variant のデシリアライズ順序をキャッシュすることで、わずかな改善が行われました。 [#79984](https://github.com/ClickHouse/ClickHouse/pull/79984) ([Pavel Kruglov](https://github.com/Avogar)). -* `s3_slow_all_threads_after_network_error` 設定を追加しました。 [#80035](https://github.com/ClickHouse/ClickHouse/pull/80035) ([Vitaly Baranov](https://github.com/vitlibar)). -* マージ対象に選択されたパーツに関するログレベルが誤っており、Information になっていました。[#80061](https://github.com/ClickHouse/ClickHouse/issues/80061) をクローズ。 [#80062](https://github.com/ClickHouse/ClickHouse/pull/80062)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* クラッシュレポートの送信をデフォルトで有効にしました。サーバーの設定ファイルで無効化できます。 [#79838](https://github.com/ClickHouse/ClickHouse/pull/79838) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* システムテーブル `system.functions` に、各関数が最初に導入された ClickHouse バージョンが表示されるようになりました。[#79839](https://github.com/ClickHouse/ClickHouse/pull/79839) ([Robert Schulze](https://github.com/rschu1ze)). +* `access_control_improvements.enable_user_name_access_type` 設定を追加しました。この設定により、[https://github.com/ClickHouse/ClickHouse/pull/72246](https://github.com/ClickHouse/ClickHouse/pull/72246) で導入されたユーザー/ロールに対する厳密な権限付与を有効/無効にできます。25.1 より古いバージョンのレプリカを含むクラスタを使用している場合は、この設定をオフにすることを検討してください。[#79842](https://github.com/ClickHouse/ClickHouse/pull/79842)([pufit](https://github.com/pufit))。 +* `ASTSelectWithUnionQuery::clone()` メソッドの適切な実装では、`is_normalized` フィールドも考慮するようになりました。これにより、[#77569](https://github.com/ClickHouse/ClickHouse/issues/77569) の解決に役立つ可能性があります。[#79909](https://github.com/ClickHouse/ClickHouse/pull/79909)([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 +* `EXCEPT` 演算子を含む一部クエリの書式の不整合を修正しました。`EXCEPT` 演算子の左辺が `*` で終わる場合、整形後のクエリから括弧が失われ、その結果、`EXCEPT` 修飾子付きの `*` としてパースされていました。これらのクエリは fuzzer によって検出されたもので、実際の利用環境で見つかる可能性は低いと考えられます。この変更により [#79950](https://github.com/ClickHouse/ClickHouse/issues/79950) がクローズされました。[#79952](https://github.com/ClickHouse/ClickHouse/pull/79952)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* バリアントのデシリアライズ順序をキャッシュすることで、`JSON` 型のパースをわずかに改善しました。 [#79984](https://github.com/ClickHouse/ClickHouse/pull/79984) ([Pavel Kruglov](https://github.com/Avogar)) +* 設定 `s3_slow_all_threads_after_network_error` を追加しました。 [#80035](https://github.com/ClickHouse/ClickHouse/pull/80035) ([Vitaly Baranov](https://github.com/vitlibar)). +* 選択されたマージ対象パーツに関するログレベルが誤っていました(Information)。[#80061](https://github.com/ClickHouse/ClickHouse/issues/80061) をクローズ。[#80062](https://github.com/ClickHouse/ClickHouse/pull/80062)([Alexey Milovidov](https://github.com/alexey-milovidov))。 * trace-visualizer: ツールチップおよびステータスメッセージに runtime/share を追加。 [#79040](https://github.com/ClickHouse/ClickHouse/pull/79040) ([Sergei Trifonov](https://github.com/serxa)). -* trace-visualizer: ClickHouse サーバーからデータを読み込み。 [#79042](https://github.com/ClickHouse/ClickHouse/pull/79042) ([Sergei Trifonov](https://github.com/serxa)). -* 失敗したマージ用のメトリクスを追加。 [#79228](https://github.com/ClickHouse/ClickHouse/pull/79228) ([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 -* `clickhouse-benchmark` は、最大反復回数が指定されている場合、その値に基づいてパーセンテージを表示するようになりました。 [#79346](https://github.com/ClickHouse/ClickHouse/pull/79346) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* system.parts テーブル用ビジュアライザーを追加。 [#79437](https://github.com/ClickHouse/ClickHouse/pull/79437) ([Sergei Trifonov](https://github.com/serxa)). -* クエリのレイテンシーを解析するためのツールを追加。 [#79978](https://github.com/ClickHouse/ClickHouse/pull/79978) ([Sergei Trifonov](https://github.com/serxa)). - - - - - -#### バグ修正(公式安定版リリースにおけるユーザー可視の不具合) - -* パーツ内で欠落している列のリネーム処理を修正。 [#76346](https://github.com/ClickHouse/ClickHouse/pull/76346) ([Anton Popov](https://github.com/CurtizJ)). -* マテリアライズドビューの開始タイミングが遅くなり、例えばそれにストリーミングする Kafka テーブルよりも後に作成されてしまう場合があります。 [#72123](https://github.com/ClickHouse/ClickHouse/pull/72123) ([Ilya Golshtein](https://github.com/ilejn))。 -* analyzer を有効化した状態で `VIEW` を作成する際の `SELECT` クエリの書き換えを修正しました。 [#75956](https://github.com/ClickHouse/ClickHouse/issues/75956) をクローズ。 [#76356](https://github.com/ClickHouse/ClickHouse/pull/76356) ([Dmitry Novik](https://github.com/novikd))。 -* サーバーからの `async_insert` の適用方法(`apply_settings_from_server` 経由)を修正(これにより、従来クライアント側で発生していた `Unknown packet 11 from server` エラーを解消)。 [#77578](https://github.com/ClickHouse/ClickHouse/pull/77578) ([Azat Khuzhin](https://github.com/azat)). -* レプリケーテッドデータベースで、新しく追加されたレプリカ上でリフレッシュ可能なマテリアライズドビューが動作しない問題を修正しました。 [#77774](https://github.com/ClickHouse/ClickHouse/pull/77774) ([Michael Kolupaev](https://github.com/al13n321)). -* リフレッシュ可能なマテリアライズドビューが原因でバックアップが失敗する問題を修正しました。 [#77893](https://github.com/ClickHouse/ClickHouse/pull/77893) ([Michael Kolupaev](https://github.com/al13n321)). -* `transform` の旧ファイアリングロジックに関する論理エラーを修正。 [#78247](https://github.com/ClickHouse/ClickHouse/pull/78247) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* `analyzer` 使用時にセカンダリインデックスが適用されていなかったいくつかのケースを修正。[#65607](https://github.com/ClickHouse/ClickHouse/issues/65607) および [#69373](https://github.com/ClickHouse/ClickHouse/issues/69373) を修正。[#78485](https://github.com/ClickHouse/ClickHouse/pull/78485)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 -* 圧縮が有効な HTTP プロトコルでのプロファイルイベント(`NetworkSendElapsedMicroseconds` / `NetworkSendBytes`)のダンプ処理を修正(誤差がバッファサイズ、通常は約 1MiB を超えないようにする)。 [#78516](https://github.com/ClickHouse/ClickHouse/pull/78516) ([Azat Khuzhin](https://github.com/azat)). -* JOIN ... USING に ALIAS 列が含まれる場合に LOGICAL_ERROR を生成していた analyzer の問題を修正し、代わりに適切なエラーを返すようにしました。 [#78618](https://github.com/ClickHouse/ClickHouse/pull/78618) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* アナライザー: `SELECT` に位置引数が含まれている場合に `CREATE VIEW ... ON CLUSTER` が失敗する問題を修正。 [#78663](https://github.com/ClickHouse/ClickHouse/pull/78663) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* `SELECT` がスカラーサブクエリを含む場合に、スキーマ推論を行うテーブル関数に対して `INSERT SELECT` を実行すると発生する `Block structure mismatch` エラーを修正。 [#78677](https://github.com/ClickHouse/ClickHouse/pull/78677) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). -* アナライザを修正: Distributed テーブルに対して prefer_global_in_and_join=1 が有効な場合、SELECT クエリ内の `in` 関数が `globalIn` に置き換えられるようにしました。 [#78749](https://github.com/ClickHouse/ClickHouse/pull/78749) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* `MongoDB` エンジンを使用するテーブル、または `mongodb` テーブル関数から読み取る、いくつかの種類の `SELECT` クエリを修正しました。修正対象には、`WHERE` 句内での定数値の暗黙的な型変換を伴うクエリ(例: `WHERE datetime = '2025-03-10 00:00:00'`)、`LIMIT` と `GROUP BY` を含むクエリが含まれます。これらのクエリでは以前、誤った結果が返される可能性がありました。[#78777](https://github.com/ClickHouse/ClickHouse/pull/78777)([Anton Popov](https://github.com/CurtizJ))。 -* 異なる JSON 型間の変換を修正しました。現在は、String への/からの変換を経由する単純なキャストによって実行されます。効率はやや劣りますが、変換精度は 100% です。 [#78807](https://github.com/ClickHouse/ClickHouse/pull/78807) ([Pavel Kruglov](https://github.com/Avogar)). -* Dynamic 型から Interval への変換時に発生する論理エラーを修正。 [#78813](https://github.com/ClickHouse/ClickHouse/pull/78813) ([Pavel Kruglov](https://github.com/Avogar)). -* JSON 解析エラー発生時のカラムのロールバック処理を修正。 [#78836](https://github.com/ClickHouse/ClickHouse/pull/78836) ([Pavel Kruglov](https://github.com/Avogar)). -* 定数エイリアス列を使用した JOIN で発生する 'bad cast' エラーを修正しました。 [#78848](https://github.com/ClickHouse/ClickHouse/pull/78848) ([Vladimir Cherkasov](https://github.com/vdimir)). -* ビューとターゲットテーブルで型が異なる列を持つマテリアライズドビューでは PREWHERE を使用できないようにしました。 [#78889](https://github.com/ClickHouse/ClickHouse/pull/78889) ([Pavel Kruglov](https://github.com/Avogar)). -* Variant カラムの不正なバイナリデータのパース時に発生する論理エラーを修正。 [#78982](https://github.com/ClickHouse/ClickHouse/pull/78982) ([Pavel Kruglov](https://github.com/Avogar)). -* parquet バッチサイズが 0 に設定されている場合に例外をスローするようにしました。以前は output_format_parquet_batch_size = 0 のとき ClickHouse がハングしていましたが、この問題は修正されました。 [#78991](https://github.com/ClickHouse/ClickHouse/pull/78991) ([daryawessely](https://github.com/daryawessely)). -* コンパクトパーツにおける basic フォーマットの variant discriminator のデシリアライズを修正しました。この問題は [https://github.com/ClickHouse/ClickHouse/pull/55518](https://github.com/ClickHouse/ClickHouse/pull/55518) で導入されました。 [#79000](https://github.com/ClickHouse/ClickHouse/pull/79000)([Pavel Kruglov](https://github.com/Avogar))。 -* `complex_key_ssd_cache` 型の辞書は、0 または負の値の `block_size` および `write_buffer_size` パラメータを拒否するようになりました(issue [#78314](https://github.com/ClickHouse/ClickHouse/issues/78314))。 [#79028](https://github.com/ClickHouse/ClickHouse/pull/79028)([Elmi Ahmadov](https://github.com/ahmadov))。 -* SummingMergeTree で非集約列に Field を使用しないでください。SummingMergeTree で使用される Dynamic/Variant 型と組み合わせると、予期しないエラーが発生する可能性があります。 [#79051](https://github.com/ClickHouse/ClickHouse/pull/79051) ([Pavel Kruglov](https://github.com/Avogar))。 -* アナライザにおける、ヘッダーが異なる Distributed 宛先テーブルを持つマテリアライズドビューからの読み取りを修正。[#79059](https://github.com/ClickHouse/ClickHouse/pull/79059)([Pavel Kruglov](https://github.com/Avogar))。 -* バッチ挿入されたテーブルで `arrayUnion()` が余分な(誤った)値を返すバグを修正しました。[#75057](https://github.com/ClickHouse/ClickHouse/issues/75057) を修正。[#79079](https://github.com/ClickHouse/ClickHouse/pull/79079)([Peter Nguyen](https://github.com/petern48))。 -* `OpenSSLInitializer` のセグメンテーションフォルトを修正。[#79092](https://github.com/ClickHouse/ClickHouse/issues/79092) をクローズ。[#79097](https://github.com/ClickHouse/ClickHouse/pull/79097)([Konstantin Bogdanov](https://github.com/thevar1able))。 -* S3 の ListObject で常に prefix を設定するようにしました。 [#79114](https://github.com/ClickHouse/ClickHouse/pull/79114) ([Azat Khuzhin](https://github.com/azat)). -* バッチ挿入を行うテーブルで arrayUnion() が余分な(誤った)値を返すバグを修正しました。[#79157](https://github.com/ClickHouse/ClickHouse/issues/79157) を修正。[#79158](https://github.com/ClickHouse/ClickHouse/pull/79158)([Peter Nguyen](https://github.com/petern48))。 -* フィルターのプッシュダウン後に発生する論理エラーを修正。 [#79164](https://github.com/ClickHouse/ClickHouse/pull/79164) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). -* HTTP ベースのエンドポイント経由で delta-kernel 実装を使用する DeltaLake テーブルエンジンの不具合を修正し、NOSIGN を修正しました。Closes [#78124](https://github.com/ClickHouse/ClickHouse/issues/78124)。[#79203](https://github.com/ClickHouse/ClickHouse/pull/79203) ([Kseniia Sumarokova](https://github.com/kssenii))。 -* Keeper の修正: 失敗したマルチリクエストで watch が発火しないようにしました。 [#79247](https://github.com/ClickHouse/ClickHouse/pull/79247) ([Antonio Andelic](https://github.com/antonio2368)). -* `IN` で Dynamic 型と JSON 型の使用を禁止。現在の `IN` の実装では、誤った結果につながる可能性があります。これらの型に対する `IN` の適切なサポートは複雑であり、将来的に対応される可能性があります。 [#79282](https://github.com/ClickHouse/ClickHouse/pull/79282) ([Pavel Kruglov](https://github.com/Avogar)). -* JSON 型パース時の重複パスチェックを修正。 [#79317](https://github.com/ClickHouse/ClickHouse/pull/79317) ([Pavel Kruglov](https://github.com/Avogar)). +* trace-visualizer: ClickHouse サーバーからデータを読み込めるようにしました。 [#79042](https://github.com/ClickHouse/ClickHouse/pull/79042) ([Sergei Trifonov](https://github.com/serxa)). +* 失敗したマージに関するメトリクスを追加しました。 [#79228](https://github.com/ClickHouse/ClickHouse/pull/79228) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). +* `clickhouse-benchmark` は、最大イテレーション数が指定されている場合、その値に基づいて割合を表示します。 [#79346](https://github.com/ClickHouse/ClickHouse/pull/79346) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* system.parts テーブル用のビジュアライザーを追加。 [#79437](https://github.com/ClickHouse/ClickHouse/pull/79437) ([Sergei Trifonov](https://github.com/serxa)). +* クエリレイテンシーを分析するためのツールを追加。 [#79978](https://github.com/ClickHouse/ClickHouse/pull/79978) ([Sergei Trifonov](https://github.com/serxa)). + +#### バグ修正(公式安定版リリースにおけるユーザーにとって目に見える不具合) + +* データパーツ内で欠落しているカラムのリネーム処理を修正しました。 [#76346](https://github.com/ClickHouse/ClickHouse/pull/76346) ([Anton Popov](https://github.com/CurtizJ)). +* マテリアライズドビューの開始タイミングが遅くなり、例えばそれにストリームを送っている Kafka テーブルより後に開始されてしまうことがありました。 [#72123](https://github.com/ClickHouse/ClickHouse/pull/72123) ([Ilya Golshtein](https://github.com/ilejn)). +* analyzer 有効化時の `VIEW` 作成における `SELECT` クエリの書き換えを修正。[#75956](https://github.com/ClickHouse/ClickHouse/issues/75956) をクローズ。[#76356](https://github.com/ClickHouse/ClickHouse/pull/76356)([Dmitry Novik](https://github.com/novikd))。 +* サーバー側から(`apply_settings_from_server` 経由で)`async_insert` を適用する処理を修正しました(以前はクライアント側で `Unknown packet 11 from server` エラーを引き起こしていました)。 [#77578](https://github.com/ClickHouse/ClickHouse/pull/77578) ([Azat Khuzhin](https://github.com/azat)). +* Replicated データベースにおいて、新しく追加されたレプリカで refresh 可能なマテリアライズドビューが動作しない問題を修正しました。 [#77774](https://github.com/ClickHouse/ClickHouse/pull/77774) ([Michael Kolupaev](https://github.com/al13n321)). +* バックアップが壊れる原因となっていたリフレッシュ可能なマテリアライズドビューを修正。 [#77893](https://github.com/ClickHouse/ClickHouse/pull/77893) ([Michael Kolupaev](https://github.com/al13n321)). +* `transform` の旧発火ロジックにおける論理エラーを修正。 [#78247](https://github.com/ClickHouse/ClickHouse/pull/78247) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* アナライザー使用時にセカンダリインデックスが適用されない場合があった問題を修正しました。[#65607](https://github.com/ClickHouse/ClickHouse/issues/65607) および [#69373](https://github.com/ClickHouse/ClickHouse/issues/69373) を修正しました。[#78485](https://github.com/ClickHouse/ClickHouse/pull/78485)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 +* HTTP プロトコルで圧縮が有効な場合のプロファイルイベント(`NetworkSendElapsedMicroseconds`/`NetworkSendBytes`)のダンプ処理を修正しました(誤差はバッファサイズ、通常は約 1MiB を超えないはずです)。 [#78516](https://github.com/ClickHouse/ClickHouse/pull/78516) ([Azat Khuzhin](https://github.com/azat)). +* JOIN ... USING が ALIAS 列を含む場合に LOGICAL_ERROR を発生させていたアナライザーを修正し、適切なエラーを返すようにしました。 [#78618](https://github.com/ClickHouse/ClickHouse/pull/78618) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* アナライザーを修正: SELECT 文に位置指定引数が含まれていると CREATE VIEW ... ON CLUSTER が失敗する問題を修正。 [#78663](https://github.com/ClickHouse/ClickHouse/pull/78663) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* `SELECT` にスカラーサブクエリが含まれている場合に、スキーマ推論を行うテーブル関数に対する `INSERT SELECT` で発生する `Block structure mismatch` エラーを修正。 [#78677](https://github.com/ClickHouse/ClickHouse/pull/78677) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +* アナライザを修正: Distributed テーブルに対する SELECT クエリで設定 prefer_global_in_and_join=1 が有効な場合、SELECT クエリ内の `in` 関数が `globalIn` に置き換えられるようにしました。 [#78749](https://github.com/ClickHouse/ClickHouse/pull/78749) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* `MongoDB` エンジンまたは `mongodb` テーブル関数を使用するテーブルからデータを読み取る、複数の種類の `SELECT` クエリを修正しました。具体的には、`WHERE` 句内での定数値の暗黙的な型変換を伴うクエリ(例: `WHERE datetime = '2025-03-10 00:00:00'`)、および `LIMIT` と `GROUP BY` を含むクエリです。以前は、これらのクエリで誤った結果が返されることがありました。 [#78777](https://github.com/ClickHouse/ClickHouse/pull/78777) ([Anton Popov](https://github.com/CurtizJ)). +* 異なる JSON 型間の変換を修正しました。現在は、String への/からの変換を経由して単純にキャストすることで実行されます。効率は低下しますが、結果は常に正確です。 [#78807](https://github.com/ClickHouse/ClickHouse/pull/78807) ([Pavel Kruglov](https://github.com/Avogar)). +* Dynamic 型を Interval へ変換する際に発生していた論理エラーを修正しました。 [#78813](https://github.com/ClickHouse/ClickHouse/pull/78813) ([Pavel Kruglov](https://github.com/Avogar)). +* JSON パースエラー時のカラムのロールバック処理を修正。 [#78836](https://github.com/ClickHouse/ClickHouse/pull/78836) ([Pavel Kruglov](https://github.com/Avogar)). +* 定数エイリアス列を使用した JOIN 時に発生する「bad cast」エラーを修正。 [#78848](https://github.com/ClickHouse/ClickHouse/pull/78848) ([Vladimir Cherkasov](https://github.com/vdimir)). +* ビューとターゲットテーブルで列の型が異なる場合、その列に対するマテリアライズドビューでの prewhere 句を許可しないようにしました。 [#78889](https://github.com/ClickHouse/ClickHouse/pull/78889) ([Pavel Kruglov](https://github.com/Avogar)). +* Variant 列の不正なバイナリデータをパースする際に発生する論理エラーを修正。 [#78982](https://github.com/ClickHouse/ClickHouse/pull/78982) ([Pavel Kruglov](https://github.com/Avogar)). +* Parquet バッチサイズが 0 に設定されている場合に例外をスローするようにしました。以前は `output_format_parquet_batch_size = 0` のときに ClickHouse がハングしていましたが、この問題は修正されました。 [#78991](https://github.com/ClickHouse/ClickHouse/pull/78991) ([daryawessely](https://github.com/daryawessely)). +* コンパクトパーツの基本フォーマットにおける variant discriminator のデシリアライズ処理を修正しました。この問題は [https://github.com/ClickHouse/ClickHouse/pull/55518](https://github.com/ClickHouse/ClickHouse/pull/55518) で導入されました。[#79000](https://github.com/ClickHouse/ClickHouse/pull/79000)([Pavel Kruglov](https://github.com/Avogar))。 +* `complex_key_ssd_cache` タイプの辞書は、`block_size` および `write_buffer_size` パラメータが 0 または負の値である場合、それらのパラメータを拒否するようになりました(issue [#78314](https://github.com/ClickHouse/ClickHouse/issues/78314))。[#79028](https://github.com/ClickHouse/ClickHouse/pull/79028)([Elmi Ahmadov](https://github.com/ahmadov))。 +* SummingMergeTree で非集約カラムに Field を使用するのは避けてください。SummingMergeTree で使用される Dynamic/Variant 型で予期しないエラーが発生する可能性があります。 [#79051](https://github.com/ClickHouse/ClickHouse/pull/79051) ([Pavel Kruglov](https://github.com/Avogar)). +* analyzer においてヘッダーが異なる場合に、Distributed 宛先テーブルを持つマテリアライズドビューからの読み取りが正しく行われない問題を修正しました。 [#79059](https://github.com/ClickHouse/ClickHouse/pull/79059) ([Pavel Kruglov](https://github.com/Avogar)). +* バッチ挿入が行われるテーブルにおいて、`arrayUnion()` が余分な(誤った)値を返していたバグを修正しました。[#75057](https://github.com/ClickHouse/ClickHouse/issues/75057) の問題を修正しました。[#79079](https://github.com/ClickHouse/ClickHouse/pull/79079)([Peter Nguyen](https://github.com/petern48))。 +* `OpenSSLInitializer` で発生していたセグメンテーションフォルトを修正。[#79092](https://github.com/ClickHouse/ClickHouse/issues/79092) をクローズ。[#79097](https://github.com/ClickHouse/ClickHouse/pull/79097)([Konstantin Bogdanov](https://github.com/thevar1able))。 +* S3 の ListObject に対しては常に prefix を設定するようにしました。 [#79114](https://github.com/ClickHouse/ClickHouse/pull/79114) ([Azat Khuzhin](https://github.com/azat)). +* バッチ挿入を行うテーブルで、arrayUnion() が余分な(誤った)値を返すバグを修正しました。[#79157](https://github.com/ClickHouse/ClickHouse/issues/79157) を修正します。[#79158](https://github.com/ClickHouse/ClickHouse/pull/79158)([Peter Nguyen](https://github.com/petern48))。 +* フィルタープッシュダウン後に発生する論理エラーを修正。 [#79164](https://github.com/ClickHouse/ClickHouse/pull/79164) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +* HTTP ベースのエンドポイントで使用される delta-kernel 実装向けの DeltaLake テーブルエンジンを修正し、NOSIGN を修正しました。Closes [#78124](https://github.com/ClickHouse/ClickHouse/issues/78124). [#79203](https://github.com/ClickHouse/ClickHouse/pull/79203) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Keeper の修正: 失敗した multi リクエストで watch が発火しないようにしました。 [#79247](https://github.com/ClickHouse/ClickHouse/pull/79247) ([Antonio Andelic](https://github.com/antonio2368)). +* `IN` での Dynamic 型および JSON 型の使用を禁止しました。`IN` の現在の実装では、これらを使用すると誤った結果につながる可能性があります。`IN` でこれらの型を正しくサポートすることは複雑であり、将来的に対応される可能性があります。 [#79282](https://github.com/ClickHouse/ClickHouse/pull/79282) ([Pavel Kruglov](https://github.com/Avogar)). +* JSON 型のパース時における重複パスのチェックを修正。 [#79317](https://github.com/ClickHouse/ClickHouse/pull/79317) ([Pavel Kruglov](https://github.com/Avogar)). * SecureStreamSocket の接続に関する問題を修正。 [#79383](https://github.com/ClickHouse/ClickHouse/pull/79383) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* データを含む plain_rewritable ディスクの読み込みを修正。 [#79439](https://github.com/ClickHouse/ClickHouse/pull/79439) ([Julia Kartseva](https://github.com/jkartseva)). -* MergeTree の Wide パーツにおける動的サブカラム検出処理で発生するクラッシュを修正。 [#79466](https://github.com/ClickHouse/ClickHouse/pull/79466) ([Pavel Kruglov](https://github.com/Avogar)). -* テーブル名の長さは初回の CREATE クエリでのみ検証します。後方互換性の問題を避けるため、2 回目以降の CREATE では検証しないでください。[#79488](https://github.com/ClickHouse/ClickHouse/pull/79488) ([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 -* スパースカラムを使用するテーブルで、複数のケースにおいて発生していた `Block structure mismatch` エラーを修正しました。 [#79491](https://github.com/ClickHouse/ClickHouse/pull/79491) ([Anton Popov](https://github.com/CurtizJ)). -* "Logical Error: Can't set alias of * of Asterisk on alias" というエラーが発生する2つのケースを修正。 [#79505](https://github.com/ClickHouse/ClickHouse/pull/79505) ([Raúl Marín](https://github.com/Algunenano)). -* Atomic データベースの名前を変更する際に誤ったパスが使用される問題を修正しました。 [#79569](https://github.com/ClickHouse/ClickHouse/pull/79569) ([Tuan Pham Anh](https://github.com/tuanpach))。 -* JSON 列と他の列を併用した ORDER BY の問題を修正。 [#79591](https://github.com/ClickHouse/ClickHouse/pull/79591) ([Pavel Kruglov](https://github.com/Avogar))。 -* `use_hedged_requests` と `allow_experimental_parallel_reading_from_replicas` の両方が無効になっている場合に、remote テーブルから読み取る際に発生する結果の重複を修正しました。 [#79599](https://github.com/ClickHouse/ClickHouse/pull/79599) ([Eduard Karacharov](https://github.com/korowa)). -* Unity Catalog 使用時の delta-kernel 実装で発生していたクラッシュを修正しました。 [#79677](https://github.com/ClickHouse/ClickHouse/pull/79677) ([Kseniia Sumarokova](https://github.com/kssenii)). -* 自動検出クラスタ向けマクロの解決に対応。 [#79696](https://github.com/ClickHouse/ClickHouse/pull/79696) ([Anton Ivashkin](https://github.com/ianton-ru)). -* 誤設定された page_cache_limits を適切に処理できるようにしました。 [#79805](https://github.com/ClickHouse/ClickHouse/pull/79805) ([Bharat Nallan](https://github.com/bharatnc)). -* 可変長フォーマッタ(例: `%W`、曜日 `Monday` `Tuesday` など)の後に、複合フォーマッタ(複数の構成要素をまとめて出力するフォーマッタ。例: `%D`、米国形式の日付 `05/04/25` など)が続く場合の SQL 関数 `formatDateTime` の結果が正しくなるよう修正しました。 [#79835](https://github.com/ClickHouse/ClickHouse/pull/79835) ([Robert Schulze](https://github.com/rschu1ze)). -* IcebergS3 は count 関数の最適化をサポートしていますが、IcebergS3Cluster はサポートしていません。その結果、クラスターモードで返される count() の結果は、レプリカ数の倍数になる場合があります。[#79844](https://github.com/ClickHouse/ClickHouse/pull/79844) ([wxybear](https://github.com/wxybear))。 -* 遅延マテリアライゼーション時に、プロジェクションまでクエリ実行でどの列も使用されない場合に発生する AMBIGUOUS_COLUMN_NAME エラーを修正します。例: SELECT * FROM t ORDER BY rand() LIMIT 5。 [#79926](https://github.com/ClickHouse/ClickHouse/pull/79926)([Igor Nikonov](https://github.com/devcrafter))。 -* クエリ `CREATE DATABASE datalake ENGINE = DataLakeCatalog(\'http://catalog:8181\', \'admin\', \'password\')` でパスワードを非表示にしました。 [#79941](https://github.com/ClickHouse/ClickHouse/pull/79941) ([Han Fei](https://github.com/hanfei1991)). -* JOIN USING でエイリアスを指定できるようにしました。列がリネームされた場合(たとえば ARRAY JOIN によって)に、このエイリアスを指定してください。[#73707](https://github.com/ClickHouse/ClickHouse/issues/73707) を修正します。[#79942](https://github.com/ClickHouse/ClickHouse/pull/79942)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 -* 新しいレプリカで UNION を含むマテリアライズドビューが正しく動作するようにしました。 [#80037](https://github.com/ClickHouse/ClickHouse/pull/80037) ([Samay Sharma](https://github.com/samay-sharma)). -* SQL 関数 `parseDateTime` におけるフォーマット指定子 `%e` は、これまでは空白によるパディング(例: ` 3`)が必須でしたが、現在は 1 桁の日(例: `3`)も認識するようになりました。これにより、MySQL と互換性のある動作になります。以前の挙動を維持したい場合は、設定 `parsedatetime_e_requires_space_padding = 1` を指定してください。(issue [#78243](https://github.com/ClickHouse/ClickHouse/issues/78243))。[#80057](https://github.com/ClickHouse/ClickHouse/pull/80057)([Robert Schulze](https://github.com/rschu1ze))。 -* ClickHouse のログに出力される `Cannot find 'kernel' in '[...]/memory.stat'` という警告を修正しました(issue [#77410](https://github.com/ClickHouse/ClickHouse/issues/77410))。[#80129](https://github.com/ClickHouse/ClickHouse/pull/80129)([Robert Schulze](https://github.com/rschu1ze))。 -* FunctionComparison 内でスタックサイズをチェックし、スタックオーバーフローによるクラッシュを回避するようにしました。 [#78208](https://github.com/ClickHouse/ClickHouse/pull/78208) ([Julia Kartseva](https://github.com/jkartseva)). -* `system.workloads` からの SELECT 実行時に発生する競合状態を修正。 [#78743](https://github.com/ClickHouse/ClickHouse/pull/78743) ([Sergei Trifonov](https://github.com/serxa)). -* 修正: 分散クエリにおける遅延マテリアライズの修正。 [#78815](https://github.com/ClickHouse/ClickHouse/pull/78815) ([Igor Nikonov](https://github.com/devcrafter)). -* `Array(Bool)` から `Array(FixedString)` への変換処理を修正。 [#78863](https://github.com/ClickHouse/ClickHouse/pull/78863) ([Nikita Taranov](https://github.com/nickitat))。 -* Parquet バージョンの選択がより分かりやすくなりました。 [#78818](https://github.com/ClickHouse/ClickHouse/pull/78818) ([Michael Kolupaev](https://github.com/al13n321)). -* `ReservoirSampler` の自己マージ処理を修正。 [#79031](https://github.com/ClickHouse/ClickHouse/pull/79031) ([Nikita Taranov](https://github.com/nickitat)). -* クライアントコンテキスト内の挿入テーブルのストレージを修正。 [#79046](https://github.com/ClickHouse/ClickHouse/pull/79046) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). -* `AggregatingSortedAlgorithm` および `SummingSortedAlgorithm` のデータメンバーの破棄順序を修正。 [#79056](https://github.com/ClickHouse/ClickHouse/pull/79056) ([Nikita Taranov](https://github.com/nickitat))。 -* `enable_user_name_access_type` が `DEFINER` アクセスタイプに影響しないようにしました。 [#80026](https://github.com/ClickHouse/ClickHouse/pull/80026) ([pufit](https://github.com/pufit)). -* system データベースのメタデータが Keeper に配置されている場合、system データベースへのクエリがハングすることがありました。 [#79304](https://github.com/ClickHouse/ClickHouse/pull/79304) ([Mikhail Artemenko](https://github.com/Michicosun)). - - +* plain_rewritable ディスク上のデータの読み込みを修正。 [#79439](https://github.com/ClickHouse/ClickHouse/pull/79439) ([Julia Kartseva](https://github.com/jkartseva)). +* MergeTree の Wide パーツにおける動的サブカラム検出時に発生していたクラッシュを修正しました。 [#79466](https://github.com/ClickHouse/ClickHouse/pull/79466) ([Pavel Kruglov](https://github.com/Avogar)). +* テーブル名の長さは、テーブルを初めて作成するクエリに対してのみ検証します。後方互換性の問題を避けるため、2回目以降の作成では検証しません。 [#79488](https://github.com/ClickHouse/ClickHouse/pull/79488) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). +* スパースカラムを含むテーブルにおいて、いくつかのケースで発生していたエラー `Block structure mismatch` を修正しました。 [#79491](https://github.com/ClickHouse/ClickHouse/pull/79491) ([Anton Popov](https://github.com/CurtizJ)). +* 「Logical Error: Can't set alias of * of Asterisk on alias」が発生する2つのケースを修正します。[#79505](https://github.com/ClickHouse/ClickHouse/pull/79505) ([Raúl Marín](https://github.com/Algunenano)). +* Atomic データベースの名前変更時に誤ったパスが使用される問題を修正。 [#79569](https://github.com/ClickHouse/ClickHouse/pull/79569) ([Tuan Pham Anh](https://github.com/tuanpach)). +* JSON列と他の列を組み合わせた ORDER BY の問題を修正しました。[#79591](https://github.com/ClickHouse/ClickHouse/pull/79591) ([Pavel Kruglov](https://github.com/Avogar))。 +* `use_hedged_requests` と `allow_experimental_parallel_reading_from_replicas` の両方が無効な場合に、リモート読み取り時に結果が重複する問題を修正しました。 [#79599](https://github.com/ClickHouse/ClickHouse/pull/79599) ([Eduard Karacharov](https://github.com/korowa)). +* Unity Catalog 使用時に delta-kernel 実装がクラッシュする問題を修正。 [#79677](https://github.com/ClickHouse/ClickHouse/pull/79677) ([Kseniia Sumarokova](https://github.com/kssenii)). +* autodiscovery クラスター用のマクロを解決するようにしました。 [#79696](https://github.com/ClickHouse/ClickHouse/pull/79696) ([Anton Ivashkin](https://github.com/ianton-ru)). +* 不正に設定された `page_cache_limits` を適切に扱うようにしました。 [#79805](https://github.com/ClickHouse/ClickHouse/pull/79805) ([Bharat Nallan](https://github.com/bharatnc)). +* SQL 関数 `formatDateTime` で、長さが可変のフォーマッタ(例: `%W`、曜日 `Monday` `Tuesday` など)の直後に、複合フォーマッタ(複数の要素を一度に出力するフォーマッタ。例: `%D`、米国形式の日付 `05/04/25` など)が指定された場合の結果を修正しました。 [#79835](https://github.com/ClickHouse/ClickHouse/pull/79835) ([Robert Schulze](https://github.com/rschu1ze)). +* IcebergS3 は count の最適化をサポートしていますが、IcebergS3Cluster はサポートしていません。そのため、クラスターモードで返される count() の結果が、レプリカ数を掛けた値になる場合があります。 [#79844](https://github.com/ClickHouse/ClickHouse/pull/79844) ([wxybear](https://github.com/wxybear)). +* クエリの実行で投影段階まで列が一切使用されない場合の遅延マテリアライゼーションにおいて発生する AMBIGUOUS_COLUMN_NAME エラーを修正しました。例: SELECT * FROM t ORDER BY rand() LIMIT 5。 [#79926](https://github.com/ClickHouse/ClickHouse/pull/79926) ([Igor Nikonov](https://github.com/devcrafter))。 +* クエリ `CREATE DATABASE datalake ENGINE = DataLakeCatalog(\'http://catalog:8181\', \'admin\', \'password\')` 内のパスワードを非表示にしました。 [#79941](https://github.com/ClickHouse/ClickHouse/pull/79941) ([Han Fei](https://github.com/hanfei1991)). +* JOIN USING でエイリアスを指定できるようにしました。列名が変更された場合(たとえば ARRAY JOIN の結果として)に、このエイリアスを指定します。[#73707](https://github.com/ClickHouse/ClickHouse/issues/73707) を修正しました。[#79942](https://github.com/ClickHouse/ClickHouse/pull/79942)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 +* UNION を含むマテリアライズドビューが新しいレプリカでも正しく動作するようにしました。 [#80037](https://github.com/ClickHouse/ClickHouse/pull/80037) ([Samay Sharma](https://github.com/samay-sharma)). +* SQL 関数 `parseDateTime` の書式指定子 `%e` は、これまでは空白でのパディング(例: ` 3`)が必要でしたが、現在は 1 桁の日(例: `3`)も認識するようになりました。これにより、MySQL と互換性のある動作になります。以前の動作を維持するには、設定 `parsedatetime_e_requires_space_padding = 1` を 1 に設定してください(issue [#78243](https://github.com/ClickHouse/ClickHouse/issues/78243))。[#80057](https://github.com/ClickHouse/ClickHouse/pull/80057)([Robert Schulze](https://github.com/rschu1ze))。 +* ClickHouse のログに出力される `Cannot find 'kernel' in '[...]/memory.stat'` という警告メッセージを修正しました(issue [#77410](https://github.com/ClickHouse/ClickHouse/issues/77410))。[#80129](https://github.com/ClickHouse/ClickHouse/pull/80129)([Robert Schulze](https://github.com/rschu1ze))。 +* スタックオーバーフローによるクラッシュを防ぐため、FunctionComparison でスタックサイズをチェックするようにしました。 [#78208](https://github.com/ClickHouse/ClickHouse/pull/78208) ([Julia Kartseva](https://github.com/jkartseva)). +* `system.workloads` からの SELECT 中に発生するレースコンディションを修正しました。 [#78743](https://github.com/ClickHouse/ClickHouse/pull/78743) ([Sergei Trifonov](https://github.com/serxa)). +* 修正: 分散クエリにおける遅延マテリアライゼーション。 [#78815](https://github.com/ClickHouse/ClickHouse/pull/78815) ([Igor Nikonov](https://github.com/devcrafter)). +* `Array(Bool)` から `Array(FixedString)` への変換の不具合を修正。 [#78863](https://github.com/ClickHouse/ClickHouse/pull/78863) ([Nikita Taranov](https://github.com/nickitat)). +* Parquet バージョンの選択をより分かりやすくしました。 [#78818](https://github.com/ClickHouse/ClickHouse/pull/78818) ([Michael Kolupaev](https://github.com/al13n321)). +* `ReservoirSampler` の自己マージ処理を修正しました。 [#79031](https://github.com/ClickHouse/ClickHouse/pull/79031) ([Nikita Taranov](https://github.com/nickitat)). +* クライアントコンテキストにおける挿入テーブルのストレージを修正。 [#79046](https://github.com/ClickHouse/ClickHouse/pull/79046) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +* `AggregatingSortedAlgorithm` と `SummingSortedAlgorithm` のデータメンバーの破棄順序を修正しました。 [#79056](https://github.com/ClickHouse/ClickHouse/pull/79056) ([Nikita Taranov](https://github.com/nickitat)). +* `enable_user_name_access_type` が `DEFINER` アクセスタイプに影響を与えないようにしました。 [#80026](https://github.com/ClickHouse/ClickHouse/pull/80026) ([pufit](https://github.com/pufit)). +* Keeper にシステムデータベースのメタデータが配置されている場合、システムデータベースに対するクエリがハングすることがある問題を修正。 [#79304](https://github.com/ClickHouse/ClickHouse/pull/79304) ([Mikhail Artemenko](https://github.com/Michicosun)). #### ビルド/テスト/パッケージングの改善 -* 常に再ビルドするのではなく、ビルド済みの `chcache` バイナリを再利用できるようにしました。 [#78851](https://github.com/ClickHouse/ClickHouse/pull/78851) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). -* NATS の一時停止待機を追加しました。 [#78987](https://github.com/ClickHouse/ClickHouse/pull/78987) ([Dmitry Novikov](https://github.com/dmitry-sles-novikov)). -* ARM ビルドが amd64compat として誤って公開されていた問題を修正しました。 [#79122](https://github.com/ClickHouse/ClickHouse/pull/79122) ([Alexander Gololobov](https://github.com/davenger)). -* OpenSSL 向けに事前生成されたアセンブリを使用するようにしました。 [#79386](https://github.com/ClickHouse/ClickHouse/pull/79386) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* `clang20` でビルドできるように修正しました。 [#79588](https://github.com/ClickHouse/ClickHouse/pull/79588) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* `chcache`: Rust キャッシュ機能のサポートを追加しました。 [#78691](https://github.com/ClickHouse/ClickHouse/pull/78691) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* `zstd` のアセンブリファイルにアンワインド情報を追加しました。 [#79288](https://github.com/ClickHouse/ClickHouse/pull/79288) ([Michael Kolupaev](https://github.com/al13n321)). +* `chcache` バイナリを毎回再ビルドするのではなく、ビルド済みのものを再利用できるようにしました。 [#78851](https://github.com/ClickHouse/ClickHouse/pull/78851) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). +* NATS のポーズ待ち処理を追加しました。 [#78987](https://github.com/ClickHouse/ClickHouse/pull/78987) ([Dmitry Novikov](https://github.com/dmitry-sles-novikov)). +* ARM ビルドが誤って amd64compat として公開されていた問題を修正しました。 [#79122](https://github.com/ClickHouse/ClickHouse/pull/79122) ([Alexander Gololobov](https://github.com/davenger)). +* OpenSSL 向けに、あらかじめ生成されたアセンブリコードを使用するようにしました。 [#79386](https://github.com/ClickHouse/ClickHouse/pull/79386) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* `clang20` でビルド可能になるよう修正しました。 [#79588](https://github.com/ClickHouse/ClickHouse/pull/79588) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* `chcache`: Rust キャッシュ機構のサポートを追加しました。 [#78691](https://github.com/ClickHouse/ClickHouse/pull/78691) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* `zstd` のアセンブリファイルにアンワインド情報を追加しました。 [#79288](https://github.com/ClickHouse/ClickHouse/pull/79288) ([Michael Kolupaev](https://github.com/al13n321)). -### ClickHouse release 25.4, 2025-04-22 {#254} +### ClickHouse リリース 25.4, 2025-04-22 {#254} #### 後方互換性のない変更 -* `allow_materialized_view_with_bad_select` が `false` の場合、マテリアライズドビュー内のすべてのカラムが対象テーブルと一致しているかをチェックするようにしました。 [#74481](https://github.com/ClickHouse/ClickHouse/pull/74481) ([Christoph Wurm](https://github.com/cwurm)). -* `dateTrunc` が負の Date/DateTime 引数とともに使用されるケースを修正しました。 [#77622](https://github.com/ClickHouse/ClickHouse/pull/77622) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* レガシーな `MongoDB` 連携機能を削除しました。サーバー設定 `use_legacy_mongodb_integration` は廃止され、現在は何も行いません。 [#77895](https://github.com/ClickHouse/ClickHouse/pull/77895) ([Robert Schulze](https://github.com/rschu1ze)). -* `SummingMergeTree` の検証を強化し、パーティションキーまたはソートキーとして使用されるカラムについては集約をスキップするようにしました。 [#78022](https://github.com/ClickHouse/ClickHouse/pull/78022) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). - +* `allow_materialized_view_with_bad_select` が `false` の場合、マテリアライズドビュー内のすべてのカラムが対象テーブルと一致しているかを検査するようになりました。 [#74481](https://github.com/ClickHouse/ClickHouse/pull/74481) ([Christoph Wurm](https://github.com/cwurm)). +* `dateTrunc` が負の Date/DateTime 引数と共に使用されるケースを修正しました。 [#77622](https://github.com/ClickHouse/ClickHouse/pull/77622) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* レガシーな `MongoDB` 連携機能を削除しました。サーバー設定 `use_legacy_mongodb_integration` は廃止され、現在は効果を持ちません。 [#77895](https://github.com/ClickHouse/ClickHouse/pull/77895) ([Robert Schulze](https://github.com/rschu1ze)). +* パーティションキーまたはソートキーで使用されているカラムについては集約をスキップするように、`SummingMergeTree` の検証ロジックを強化しました。 [#78022](https://github.com/ClickHouse/ClickHouse/pull/78022) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). #### 新機能 -* ワークロード用に CPU スロットのスケジューリング機能を追加しました。詳細については[ドキュメント](https://clickhouse.com/docs/operations/workload-scheduling#cpu_scheduling)を参照してください。[#77595](https://github.com/ClickHouse/ClickHouse/pull/77595)([Sergei Trifonov](https://github.com/serxa))。 -* `clickhouse-local` は、`--path` コマンドライン引数を指定すると、再起動後もデータベースを保持します。これにより [#50647](https://github.com/ClickHouse/ClickHouse/issues/50647) および [#49947](https://github.com/ClickHouse/ClickHouse/issues/49947) がクローズされます。[#71722](https://github.com/ClickHouse/ClickHouse/pull/71722)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* サーバーが過負荷になっている場合にクエリを拒否します。判断は、待ち時間(`OSCPUWaitMicroseconds`)とビジー時間(`OSCPUVirtualTimeMicroseconds`)の比率に基づいて行われます。この比率が `min_os_cpu_wait_time_ratio_to_throw` と `max_os_cpu_wait_time_ratio_to_throw` の間にある場合(いずれもクエリレベルの設定値)、一定の確率でクエリがドロップされます。[#63206](https://github.com/ClickHouse/ClickHouse/pull/63206)([Alexey Katsman](https://github.com/alexkats))。 -* `Iceberg` におけるタイムトラベル: 特定のタイムスタンプの時点で `Iceberg` テーブルをクエリできる設定を追加。 [#71072](https://github.com/ClickHouse/ClickHouse/pull/71072) ([Brett Hoerner](https://github.com/bretthoerner)). [#77439](https://github.com/ClickHouse/ClickHouse/pull/77439) ([Daniil Ivanik](https://github.com/divanik)). -* `Iceberg` メタデータ用のメモリ内キャッシュで、マニフェストファイルおよびそのリストと `metadata.json` を保存し、クエリを高速化します。 [#77156](https://github.com/ClickHouse/ClickHouse/pull/77156) ([Han Fei](https://github.com/hanfei1991)). -* Azure Blob Storage 用の `DeltaLake` テーブルエンジンをサポートしました。 [#68043](https://github.com/ClickHouse/ClickHouse/issues/68043) を修正しました。 [#74541](https://github.com/ClickHouse/ClickHouse/pull/74541)([Smita Kulkarni](https://github.com/SmitaRKulkarni))。 -* デシリアライズされたベクトル類似性インデックス用のインメモリキャッシュを追加しました。これにより、近似最近傍(ANN)検索クエリの繰り返し実行を高速化できます。新しいキャッシュのサイズは、サーバー設定 `vector_similarity_index_cache_size` および `vector_similarity_index_cache_max_entries` によって制御されます。この機能は、以前のリリースにおけるスキップインデックスキャッシュ機能を置き換えるものです。[#77905](https://github.com/ClickHouse/ClickHouse/pull/77905)([Shankar Iyer](https://github.com/shankar-iyer))。 -* DeltaLake でパーティションのプルーニングをサポートするようにしました。 [#78486](https://github.com/ClickHouse/ClickHouse/pull/78486) ([Kseniia Sumarokova](https://github.com/kssenii)). -* 読み取り専用の `MergeTree` テーブルでバックグラウンドリフレッシュをサポートし、更新可能なテーブルを無制限の分散リーダーからクエリできるようにする機能(ClickHouse ネイティブなデータレイク)。 [#76467](https://github.com/ClickHouse/ClickHouse/pull/76467)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* カスタムディスクを利用してデータベースのメタデータファイルを保存できるようになりました。現在はグローバルなサーバーレベルでのみ設定できます。 [#77365](https://github.com/ClickHouse/ClickHouse/pull/77365) ([Tuan Pham Anh](https://github.com/tuanpach))。 -* plain_rewritable ディスクに対して ALTER TABLE ... ATTACH|DETACH|MOVE|REPLACE PARTITION をサポートしました。[#77406](https://github.com/ClickHouse/ClickHouse/pull/77406) ([Julia Kartseva](https://github.com/jkartseva)). -* `Kafka` テーブルエンジン向けに、`SASL` 設定および認証情報を指定するためのテーブル設定を追加しました。これにより、構成ファイルや名前付きコレクションを使用することなく、CREATE TABLE 文内で直接、Kafka および Kafka 互換システム向けの SASL ベースの認証を設定できるようになります。 [#78810](https://github.com/ClickHouse/ClickHouse/pull/78810) ([Christoph Wurm](https://github.com/cwurm))。 -* MergeTree テーブルに対して `default_compression_codec` を設定できるようにしました。これは、CREATE クエリで対象のカラムに対して圧縮コーデックが明示的に定義されていない場合に使用されます。これにより [#42005](https://github.com/ClickHouse/ClickHouse/issues/42005) が解決されました。[#66394](https://github.com/ClickHouse/ClickHouse/pull/66394)([gvoelfin](https://github.com/gvoelfin))。 -* 分散接続で特定のネットワークを使用できるようにするため、クラスタ構成に `bind_host` 設定を追加しました。 [#74741](https://github.com/ClickHouse/ClickHouse/pull/74741) ([Todd Yocum](https://github.com/toddyocum)). -* `system.tables` に新しいカラム `parametrized_view_parameters` を導入しました。 [https://github.com/clickhouse/clickhouse/issues/66756](https://github.com/clickhouse/clickhouse/issues/66756) をクローズしました。 [#75112](https://github.com/ClickHouse/ClickHouse/pull/75112)([NamNguyenHoai](https://github.com/NamHoaiNguyen))。 -* データベースコメントの変更を可能にしました。Closes [#73351](https://github.com/ClickHouse/ClickHouse/issues/73351) ### ユーザー向け変更に関するドキュメントエントリ。[#75622](https://github.com/ClickHouse/ClickHouse/pull/75622) ([NamNguyenHoai](https://github.com/NamHoaiNguyen)). -* PostgreSQL互換プロトコルで `SCRAM-SHA-256` 認証をサポートしました。[#76839](https://github.com/ClickHouse/ClickHouse/pull/76839)([scanhex12](https://github.com/scanhex12))。 -* 関数 `arrayLevenshteinDistance`、`arrayLevenshteinDistanceWeighted`、`arraySimilarity` を追加しました。 [#77187](https://github.com/ClickHouse/ClickHouse/pull/77187) ([Mikhail f. Shiryaev](https://github.com/Felixoid)). -* 設定項目 `parallel_distributed_insert_select` は、`ReplicatedMergeTree` テーブルへの `INSERT SELECT` に対しても適用されるようになりました(以前は Distributed テーブルが必要でした)。[#78041](https://github.com/ClickHouse/ClickHouse/pull/78041)([Igor Nikonov](https://github.com/devcrafter))。 -* `toInterval` 関数を導入しました。この関数は 2 つの引数(値と単位)を受け取り、その値を指定された `Interval` 型に変換します。[#78723](https://github.com/ClickHouse/ClickHouse/pull/78723)([Andrew Davis](https://github.com/pulpdrew))。 -* iceberg テーブル関数およびエンジンで、ルート `metadata.json` ファイルを解決するための便利な方法をいくつか追加しました。[#78455](https://github.com/ClickHouse/ClickHouse/issues/78455) をクローズしました。[#78475](https://github.com/ClickHouse/ClickHouse/pull/78475)([Daniil Ivanik](https://github.com/divanik))。 -* ClickHouse の SSH プロトコルでパスワードベースの認証をサポートしました。 [#78586](https://github.com/ClickHouse/ClickHouse/pull/78586) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). - - +* ワークロード用に CPU スロットスケジューリングを追加しました。詳細は[ドキュメント](https://clickhouse.com/docs/operations/workload-scheduling#cpu_scheduling)を参照してください。[#77595](https://github.com/ClickHouse/ClickHouse/pull/77595)([Sergei Trifonov](https://github.com/serxa))。 +* `clickhouse-local` は、`--path` コマンドライン引数を指定した場合、再起動後もデータベースを保持します。これにより [#50647](https://github.com/ClickHouse/ClickHouse/issues/50647) がクローズされました。これにより [#49947](https://github.com/ClickHouse/ClickHouse/issues/49947) がクローズされました。[#71722](https://github.com/ClickHouse/ClickHouse/pull/71722)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* サーバーが過負荷状態のときにクエリを拒否します。判断は、待ち時間(`OSCPUWaitMicroseconds`)とビジー時間(`OSCPUVirtualTimeMicroseconds`)の比率に基づいて行われます。この比率が `min_os_cpu_wait_time_ratio_to_throw` と `max_os_cpu_wait_time_ratio_to_throw` の間にある場合(これらはクエリレベルの設定)、一定の確率でクエリが破棄されます。 [#63206](https://github.com/ClickHouse/ClickHouse/pull/63206)([Alexey Katsman](https://github.com/alexkats))。 +* `Iceberg` のタイムトラベル: 特定のタイムスタンプ時点の `Iceberg` テーブルをクエリできる設定を追加。 [#71072](https://github.com/ClickHouse/ClickHouse/pull/71072) ([Brett Hoerner](https://github.com/bretthoerner)). [#77439](https://github.com/ClickHouse/ClickHouse/pull/77439) ([Daniil Ivanik](https://github.com/divanik)). +* `Iceberg` メタデータのインメモリキャッシュ。マニフェストファイル/リストおよび `metadata.json` を保持することで、クエリの実行を高速化します。 [#77156](https://github.com/ClickHouse/ClickHouse/pull/77156) ([Han Fei](https://github.com/hanfei1991))。 +* `DeltaLake` テーブルエンジンの Azure Blob Storage 対応を追加しました。[#68043](https://github.com/ClickHouse/ClickHouse/issues/68043) を修正しました。[#74541](https://github.com/ClickHouse/ClickHouse/pull/74541)([Smita Kulkarni](https://github.com/SmitaRKulkarni))。 +* デシリアライズ済みのベクトル類似性インデックス用にインメモリキャッシュを追加しました。これにより、繰り返し実行される近似最近傍 (ANN) 検索クエリが高速化されます。この新しいキャッシュのサイズは、サーバー設定 `vector_similarity_index_cache_size` および `vector_similarity_index_cache_max_entries` で制御されます。この機能は、以前のリリースにおけるスキッピングインデックスキャッシュ機能を置き換えるものです。 [#77905](https://github.com/ClickHouse/ClickHouse/pull/77905) ([Shankar Iyer](https://github.com/shankar-iyer)). +* Delta Lake でパーティションプルーニングをサポートしました。 [#78486](https://github.com/ClickHouse/ClickHouse/pull/78486) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 読み取り専用の `MergeTree` テーブルでバックグラウンドリフレッシュをサポートし、更新可能なテーブルに対して無制限の分散リーダーからクエリできるようにします(ClickHouse ネイティブのデータレイク)。 [#76467](https://github.com/ClickHouse/ClickHouse/pull/76467) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* データベースのメタデータファイルを保存するためにカスタムディスクを使用できるようになりました。現在、これはサーバー全体の設定としてのみ構成できます。 [#77365](https://github.com/ClickHouse/ClickHouse/pull/77365) ([Tuan Pham Anh](https://github.com/tuanpach))。 +* plain_rewritable ディスクで `ALTER TABLE ... ATTACH|DETACH|MOVE|REPLACE PARTITION` がサポートされるようになりました。 [#77406](https://github.com/ClickHouse/ClickHouse/pull/77406) ([Julia Kartseva](https://github.com/jkartseva)). +* `Kafka` テーブルエンジンに、`SASL` 構成および認証情報用のテーブル設定を追加しました。これにより、構成ファイルや名前付きコレクションを使用することなく、`CREATE TABLE` 文で直接、Kafka および Kafka 互換システムに対する SASL ベースの認証を設定できるようになります。 [#78810](https://github.com/ClickHouse/ClickHouse/pull/78810) ([Christoph Wurm](https://github.com/cwurm))。 +* MergeTree テーブルに対して `default_compression_codec` を設定できるようにしました。この設定は、対象のカラムに対して CREATE 文で圧縮コーデックが明示的に定義されていない場合に使用されます。これにより [#42005](https://github.com/ClickHouse/ClickHouse/issues/42005) が解決されました。[#66394](https://github.com/ClickHouse/ClickHouse/pull/66394) ([gvoelfin](https://github.com/gvoelfin))。 +* 分散接続で特定のネットワークを使用できるようにするため、clusters の設定に `bind_host` を追加しました。 [#74741](https://github.com/ClickHouse/ClickHouse/pull/74741) ([Todd Yocum](https://github.com/toddyocum)). +* `system.tables` に `parametrized_view_parameters` という新しいカラムを追加しました。 [https://github.com/clickhouse/clickhouse/issues/66756](https://github.com/clickhouse/clickhouse/issues/66756) をクローズしました。 [#75112](https://github.com/ClickHouse/ClickHouse/pull/75112) ([NamNguyenHoai](https://github.com/NamHoaiNguyen)). +* データベースコメントを変更可能にしました。[#73351](https://github.com/ClickHouse/ClickHouse/issues/73351) をクローズ。### ユーザー向け変更のドキュメント用エントリ。[#75622](https://github.com/ClickHouse/ClickHouse/pull/75622)([NamNguyenHoai](https://github.com/NamHoaiNguyen))。 +* PostgreSQL 互換プロトコルでの `SCRAM-SHA-256` 認証をサポート。[#76839](https://github.com/ClickHouse/ClickHouse/pull/76839) ([scanhex12](https://github.com/scanhex12))。 +* 関数 `arrayLevenshteinDistance`、`arrayLevenshteinDistanceWeighted`、`arraySimilarity` を追加。[#77187](https://github.com/ClickHouse/ClickHouse/pull/77187)([Mikhail f. Shiryaev](https://github.com/Felixoid))。 +* 設定 `parallel_distributed_insert_select` は、`ReplicatedMergeTree` への `INSERT SELECT` に対しても有効になりました(以前は Distributed テーブルが必要でした)。 [#78041](https://github.com/ClickHouse/ClickHouse/pull/78041) ([Igor Nikonov](https://github.com/devcrafter))。 +* `toInterval` 関数を導入しました。この関数は 2 つの引数(値と単位)を受け取り、その値を対応する `Interval` 型に変換します。[#78723](https://github.com/ClickHouse/ClickHouse/pull/78723) ([Andrew Davis](https://github.com/pulpdrew))。 +* iceberg テーブル関数およびエンジンにおいて、ルートの `metadata.json` ファイルを解決するための複数の便利な方法を追加しました。[#78455](https://github.com/ClickHouse/ClickHouse/issues/78455) をクローズしました。[#78475](https://github.com/ClickHouse/ClickHouse/pull/78475)([Daniil Ivanik](https://github.com/divanik))。 +* ClickHouse の SSH プロトコルでパスワードベースの認証をサポートしました。 [#78586](https://github.com/ClickHouse/ClickHouse/pull/78586) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 #### 実験的機能 -* `WHERE` 句内の `EXISTS` 式の引数として相関サブクエリをサポート。 [#72459](https://github.com/ClickHouse/ClickHouse/issues/72459) をクローズ。 [#76078](https://github.com/ClickHouse/ClickHouse/pull/76078) ([Dmitry Novik](https://github.com/novikd))。 -* ASCII および UTF-8 バージョンを備えた `sparseGrams` 関数と `sparseGramsHashes` 関数を追加。作者: [scanhex12](https://github.com/scanhex12)。 [#78176](https://github.com/ClickHouse/ClickHouse/pull/78176) ([Pervakov Grigorii](https://github.com/GrigoryPervakov))。これらの関数は使用しないでください。実装は今後のバージョンで変更される予定です。 - +* `WHERE` 句の `EXISTS` 式の引数として相関サブクエリをサポートしました。[#72459](https://github.com/ClickHouse/ClickHouse/issues/72459) をクローズ。[#76078](https://github.com/ClickHouse/ClickHouse/pull/76078)([Dmitry Novik](https://github.com/novikd))。 +* 関数 `sparseGrams` および `sparseGramsHashes` に、ASCII 版と UTF8 版を追加しました。作者: [scanhex12](https://github.com/scanhex12)。[#78176](https://github.com/ClickHouse/ClickHouse/pull/78176)([Pervakov Grigorii](https://github.com/GrigoryPervakov))。これらの関数は使用しないでください。実装は今後のバージョンで変更されます。 #### パフォーマンスの向上 -* ORDER BY と LIMIT の適用後にデータを読み込む lazy カラムを使用して、パフォーマンスを最適化します。 [#55518](https://github.com/ClickHouse/ClickHouse/pull/55518) ([Xiaozhe Yu](https://github.com/wudidapaopao)). -* クエリ条件キャッシュを既定で有効にしました。 [#79080](https://github.com/ClickHouse/ClickHouse/pull/79080) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* `col->insertFrom()` への呼び出しを非仮想化することで JOIN 結果の構築を高速化しました。 [#77350](https://github.com/ClickHouse/ClickHouse/pull/77350) ([Alexander Gololobov](https://github.com/davenger))。 -* 可能であれば、フィルタークエリプランのステップにある等値条件を JOIN 条件にマージし、それらをハッシュテーブルのキーとして使用できるようにしました。 [#78877](https://github.com/ClickHouse/ClickHouse/pull/78877) ([Dmitry Novik](https://github.com/novikd)). -* JOIN の両側で JOIN キーが PK のプレフィックスになっている場合は、JOIN に対して動的シャーディングを使用します。この最適化は `query_plan_join_shard_by_pk_ranges` 設定で有効にできます(デフォルトでは無効)。[#74733](https://github.com/ClickHouse/ClickHouse/pull/74733)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 -* 列の下限値および上限値に基づく `Iceberg` データのプルーニングをサポートしました。 [#77638](https://github.com/ClickHouse/ClickHouse/issues/77638) を修正。 [#78242](https://github.com/ClickHouse/ClickHouse/pull/78242)([alesapin](https://github.com/alesapin))。 -* `Iceberg` に対して単純な count 最適化を実装しました。これにより、フィルタなしの `count()` を含むクエリがより高速になります。[#77639](https://github.com/ClickHouse/ClickHouse/issues/77639) をクローズします。[#78090](https://github.com/ClickHouse/ClickHouse/pull/78090)([alesapin](https://github.com/alesapin))。 -* `max_merge_delayed_streams_for_parallel_write` を使用して、マージ処理で並列にフラッシュできる列数を設定できるようにしました(これにより、S3 へのバーティカルマージ時のメモリ使用量を約 25 分の 1 に削減できます)。[#77922](https://github.com/ClickHouse/ClickHouse/pull/77922)([Azat Khuzhin](https://github.com/azat))。 -* キャッシュがマージなどで受動的に使用される場合は、`filesystem_cache_prefer_bigger_buffer_size` を無効にします。これにより、マージ時のメモリ使用量が削減されます。 [#77898](https://github.com/ClickHouse/ClickHouse/pull/77898) ([Kseniia Sumarokova](https://github.com/kssenii))。 -* 並列レプリカを有効にした読み取りでは、タスクサイズを決定する際にレプリカ数を使用するようにしました。これにより、読み取るデータ量がそれほど多くない場合でも、レプリカ間での負荷分散がよりバランスよく行われます。 [#78695](https://github.com/ClickHouse/ClickHouse/pull/78695) ([Nikita Taranov](https://github.com/nickitat)). -* `ORC` フォーマットに対して非同期 I/O のプリフェッチをサポートし、リモート I/O のレイテンシを隠すことで全体的なパフォーマンスを向上させます。 [#70534](https://github.com/ClickHouse/ClickHouse/pull/70534) ([李扬](https://github.com/taiyang-li)). -* 非同期挿入で使用されるメモリを事前に確保してパフォーマンスを向上しました。 [#74945](https://github.com/ClickHouse/ClickHouse/pull/74945) ([Ilya Golshtein](https://github.com/ilejn)). -* `multiRead` が利用可能な箇所では単一の `get` リクエストの使用をやめることで、レプリカ数の増加に伴い Keeper に大きな負荷を与える可能性があった Keeper へのリクエスト数を削減しました。 [#56862](https://github.com/ClickHouse/ClickHouse/pull/56862) ([Nikolay Degterinsky](https://github.com/evillique))。 -* Nullable 引数に対して関数を実行する際の軽微な最適化。 [#76489](https://github.com/ClickHouse/ClickHouse/pull/76489) ([李扬](https://github.com/taiyang-li)). -* `arraySort` を最適化。 [#76850](https://github.com/ClickHouse/ClickHouse/pull/76850) ([李扬](https://github.com/taiyang-li)). -* 同じパーツのマークをマージし、一度にクエリ条件キャッシュへ書き込むことで、ロックの使用量を削減します。 [#77377](https://github.com/ClickHouse/ClickHouse/pull/77377) ([zhongyuankai](https://github.com/zhongyuankai)). -* 1 つだけブラケット展開を含むクエリに対して `s3Cluster` のパフォーマンスを最適化しました。 [#77686](https://github.com/ClickHouse/ClickHouse/pull/77686) ([Tomáš Hromada](https://github.com/gyfis))。 -* 単一の Nullable 列または LowCardinality 列に対する ORDER BY を最適化。 [#77789](https://github.com/ClickHouse/ClickHouse/pull/77789) ([李扬](https://github.com/taiyang-li))。 -* `Native` フォーマットのメモリ使用量を最適化しました。 [#78442](https://github.com/ClickHouse/ClickHouse/pull/78442) ([Azat Khuzhin](https://github.com/azat))。 -* 軽微な最適化: 型キャストが必要な場合は `count(if(...))` を `countIf` に書き換えないようにしました。 [#78564](https://github.com/ClickHouse/ClickHouse/issues/78564) をクローズ。 [#78565](https://github.com/ClickHouse/ClickHouse/pull/78565)([李扬](https://github.com/taiyang-li))。 -* `hasAll` 関数で、`tokenbf_v1` および `ngrambf_v1` の全文テキスト用スキップインデックスを利用できるようになりました。 [#77662](https://github.com/ClickHouse/ClickHouse/pull/77662) ([UnamedRus](https://github.com/UnamedRus))。 -* ベクトル類似性インデックスが最大で 2 倍のメインメモリを過剰に割り当てる可能性がありました。この修正ではメモリ割り当て戦略を再設計し、メモリ消費を削減するとともに、ベクトル類似性インデックスキャッシュの有効性を向上させます。(issue [#78056](https://github.com/ClickHouse/ClickHouse/issues/78056))。 [#78394](https://github.com/ClickHouse/ClickHouse/pull/78394) ([Shankar Iyer](https://github.com/shankar-iyer))。 -* `schema_type` 設定を導入し、`system.metric_log` テーブルにスキーマ種別を指定できるようにします。利用可能なスキーマは 3 種類あります。`wide` — 現在のスキーマで、各メトリクス/イベントが個別のカラムに格納されます(個々のカラムの読み取りに最も効率的)、`transposed` — `system.asynchronous_metric_log` に類似しており、メトリクス/イベントが行として格納されます。さらに、`transposed_with_wide_view` では、`transposed` スキーマで基礎テーブルを作成しつつ、クエリを基礎テーブルへ変換する `wide` スキーマのビューも提供します。`transposed_with_wide_view` ではビューでのサブ秒解像度はサポートされず、`event_time_microseconds` は後方互換性のためのエイリアスに過ぎません。 [#78412](https://github.com/ClickHouse/ClickHouse/pull/78412) ([alesapin](https://github.com/alesapin))。 - - - - - -#### 改善 - -* `Distributed` クエリのクエリプランをシリアライズできるようになりました。新しい設定項目 `serialize_query_plan` が追加されています。有効にすると、`Distributed` テーブルからのクエリはリモートクエリ実行に対してシリアライズされたクエリプランを使用します。これにより TCP プロトコルに新しいパケットタイプが導入されます。このパケットを処理できるようにするには、サーバー設定に `true` を追加する必要があります。[#69652](https://github.com/ClickHouse/ClickHouse/pull/69652)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 -* ビューからの `JSON` 型およびサブカラムの読み取りをサポートしました。 [#76903](https://github.com/ClickHouse/ClickHouse/pull/76903) ([Pavel Kruglov](https://github.com/Avogar)). -* `ALTER DATABASE ... ON CLUSTER` をサポートするようになりました。 [#79242](https://github.com/ClickHouse/ClickHouse/pull/79242) ([Tuan Pham Anh](https://github.com/tuanpach)). -* リフレッシュ可能なマテリアライズドビューのリフレッシュが `system.query_log` に表示されるようになりました。 [#71333](https://github.com/ClickHouse/ClickHouse/pull/71333) ([Michael Kolupaev](https://github.com/al13n321)). -* ユーザー定義関数 (UDF) は、その構成の新しい設定によって決定的 (deterministic) とマークできるようになりました。また、クエリキャッシュは、クエリ内で呼び出される UDF が決定的かどうかを確認し、決定的であればクエリ結果をキャッシュします。(Issue [#59988](https://github.com/ClickHouse/ClickHouse/issues/59988))。[#77769](https://github.com/ClickHouse/ClickHouse/pull/77769) ([Jimmy Aguilar Mena](https://github.com/Ergus))。 -* すべての種類のレプリケーション関連タスクに対してバックオフロジックを有効化しました。これにより、CPU 使用率、メモリ使用量、ログファイルサイズを削減できるようになります。`max_postpone_time_for_failed_mutations_ms` に類似した新しい設定 `max_postpone_time_for_failed_replicated_fetches_ms`、`max_postpone_time_for_failed_replicated_merges_ms`、`max_postpone_time_for_failed_replicated_tasks_ms` を追加しました。 [#74576](https://github.com/ClickHouse/ClickHouse/pull/74576) ([MikhailBurdukov](https://github.com/MikhailBurdukov))。 -* `system.errors` に `query_id` を追加しました。 [#75815](https://github.com/ClickHouse/ClickHouse/issues/75815) をクローズしました。 [#76581](https://github.com/ClickHouse/ClickHouse/pull/76581)([Vladimir Baikov](https://github.com/bkvvldmr))。 -* `UInt128` から `IPv6` への変換をサポートしました。これにより、`IPv6` に対して `bitAnd` などの算術演算を行い、その結果を `IPv6` に戻すことが可能になります。[#76752](https://github.com/ClickHouse/ClickHouse/issues/76752) をクローズします。これにより、`IPv6` に対する `bitAnd` 演算の結果も再度 `IPv6` に変換することができます。[#57707](https://github.com/ClickHouse/ClickHouse/pull/57707) も参照してください。[#76928](https://github.com/ClickHouse/ClickHouse/pull/76928)([Muzammil Abdul Rehman](https://github.com/muzammilar))。 -* デフォルトでは、`Variant` 型内のテキスト形式に含まれる特殊な `Bool` 値はパースされません。これを有効にするには、設定 `allow_special_bool_values_inside_variant` を有効化します。 [#76974](https://github.com/ClickHouse/ClickHouse/pull/76974) ([Pavel Kruglov](https://github.com/Avogar)). -* セッションレベルおよびサーバーレベルで、低い `priority` のクエリに対するタスク単位の待機時間を設定できるようにしました。 [#77013](https://github.com/ClickHouse/ClickHouse/pull/77013) ([VicoWu](https://github.com/VicoWu)). -* JSON データ型の値の比較をサポートしました。これにより、JSON オブジェクトを Map と同様に比較できるようになりました。 [#77397](https://github.com/ClickHouse/ClickHouse/pull/77397) ([Pavel Kruglov](https://github.com/Avogar)). -* `system.kafka_consumers` による権限サポートの改善。内部の `librdkafka` エラーを転送(なお、このライブラリはあまり出来が良くないことは付記しておきます)。 [#77700](https://github.com/ClickHouse/ClickHouse/pull/77700) ([Ilya Golshtein](https://github.com/ilejn)). -* Buffer テーブルエンジンの設定に対するバリデーションを追加しました。 [#77840](https://github.com/ClickHouse/ClickHouse/pull/77840) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). -* `HDFS` での `pread` を有効/無効にできる設定項目 `enable_hdfs_pread` を追加しました。 [#77885](https://github.com/ClickHouse/ClickHouse/pull/77885) ([kevinyhzou](https://github.com/KevinyhZou))。 -* ZooKeeper の `multi` 読み取りおよび書き込みリクエスト数向けのプロファイルイベントを追加。 [#77888](https://github.com/ClickHouse/ClickHouse/pull/77888) ([JackyWoo](https://github.com/JackyWoo)). -* `disable_insertion_and_mutation` が有効な場合でも、一時テーブルの作成および挿入を許可します。 [#77901](https://github.com/ClickHouse/ClickHouse/pull/77901) ([Xu Jia](https://github.com/XuJia0210))。 -* `max_insert_delayed_streams_for_parallel_write` を 100 に引き下げます。 [#77919](https://github.com/ClickHouse/ClickHouse/pull/77919) ([Azat Khuzhin](https://github.com/azat)). -* Joda の構文(念のため補足すると、これは Java の世界のものです)で、`yyy` のような年の解析を修正しました。[#77973](https://github.com/ClickHouse/ClickHouse/pull/77973)([李扬](https://github.com/taiyang-li))。 -* `MergeTree` テーブルのパーツのアタッチは、そのブロック順で実行されます。これは、`ReplacingMergeTree` のような特殊なマージアルゴリズムにとって重要です。これにより [#71009](https://github.com/ClickHouse/ClickHouse/issues/71009) が解決されました。[#77976](https://github.com/ClickHouse/ClickHouse/pull/77976)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* クエリマスキングルールで、マッチが発生した場合に `LOGICAL_ERROR` をスローできるようになりました。これにより、あらかじめ定義したパスワードがログ内のどこかに漏洩していないかを確認するのに役立ちます。 [#78094](https://github.com/ClickHouse/ClickHouse/pull/78094) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). -* MySQL との互換性を向上させるために、`information_schema.tables` に `index_length_column` 列を追加しました。 [#78119](https://github.com/ClickHouse/ClickHouse/pull/78119) ([Paweł Zakrzewski](https://github.com/KrzaQ)). -* 2 つの新しいメトリック `TotalMergeFailures` と `NonAbortedMergeFailures` を導入します。これらのメトリックは、短時間に多数のマージ失敗が発生するケースを検出するために必要です。[#78150](https://github.com/ClickHouse/ClickHouse/pull/78150)([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 -* パススタイルでキーが指定されていない場合に S3 URL を誤って解析してしまう問題を修正しました。 [#78185](https://github.com/ClickHouse/ClickHouse/pull/78185) ([Arthur Passos](https://github.com/arthurpassos))。 -* `BlockActiveTime`、`BlockDiscardTime`、`BlockWriteTime`、`BlockQueueTime`、`BlockReadTime` の非同期メトリクスで値が誤って報告されていた問題を修正しました(この変更以前は、1 秒が誤って 0.001 として報告されていました)。 [#78211](https://github.com/ClickHouse/ClickHouse/pull/78211) ([filimonov](https://github.com/filimonov))。 -* StorageS3(Azure)Queue からマテリアライズドビューへプッシュする際に発生するエラーについて、`loading_retries` の上限を守るようにしました。以前は、そのようなエラーは無制限にリトライされていました。 [#78313](https://github.com/ClickHouse/ClickHouse/pull/78313) ([Kseniia Sumarokova](https://github.com/kssenii)). -* DeltaLake の `delta-kernel-rs` 実装において、パフォーマンスと進捗バーを改善しました。 [#78368](https://github.com/ClickHouse/ClickHouse/pull/78368) ([Kseniia Sumarokova](https://github.com/kssenii)). -* ランタイムディスクで `include`、`from_env`、`from_zk` をサポートしました。 [#78177](https://github.com/ClickHouse/ClickHouse/issues/78177) をクローズしました。 [#78470](https://github.com/ClickHouse/ClickHouse/pull/78470)([Kseniia Sumarokova](https://github.com/kssenii))。 -* `system.warnings` テーブルに、長時間実行しているミューテーション向けの動的な警告を追加しました。 [#78658](https://github.com/ClickHouse/ClickHouse/pull/78658) ([Bharat Nallan](https://github.com/bharatnc))。 -* システムテーブル `system.query_condition_cache` にカラム `condition` を追加しました。クエリ条件キャッシュでキーとして使用されるハッシュの元となるプレーンテキストの条件を保存します。 [#78671](https://github.com/ClickHouse/ClickHouse/pull/78671) ([Robert Schulze](https://github.com/rschu1ze)). -* Hive パーティショニングで空値を許可。 [#78816](https://github.com/ClickHouse/ClickHouse/pull/78816) ([Arthur Passos](https://github.com/arthurpassos)). -* `BFloat16` の `IN` 句における型変換を修正しました(つまり、`SELECT toBFloat16(1) IN [1, 2, 3];` は現在 `1` を返します)。[#78754](https://github.com/ClickHouse/ClickHouse/issues/78754) をクローズ。[#78839](https://github.com/ClickHouse/ClickHouse/pull/78839)([Raufs Dunamalijevs](https://github.com/rienath))。 -* `disk = ...` が設定されている場合は、他のディスク上の `MergeTree` パーツをチェックしないようにしました。 [#78855](https://github.com/ClickHouse/ClickHouse/pull/78855) ([Azat Khuzhin](https://github.com/azat)). -* `system.query_log` の `used_data_type_families` におけるデータ型が、正規名で記録されるようにしました。 [#78972](https://github.com/ClickHouse/ClickHouse/pull/78972) ([Kseniia Sumarokova](https://github.com/kssenii)). -* `recoverLostReplica` でのクリーンアップ設定を、[#78637](https://github.com/ClickHouse/ClickHouse/pull/78637) と同様にしました。[#79113](https://github.com/ClickHouse/ClickHouse/pull/79113)([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 -* INFILE のスキーマ推論に挿入先カラムを使用するようにしました。 [#78490](https://github.com/ClickHouse/ClickHouse/pull/78490) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). - - - - - -#### バグ修正(公式安定版リリースにおけるユーザー可視の不具合) - -* `count(Nullable)` が集約プロジェクションで使用されている場合に誤ったプロジェクション解析が行われる問題を修正しました。これにより [#74495](https://github.com/ClickHouse/ClickHouse/issues/74495) が解決されます。またこの PR では、プロジェクションがなぜ使用されるのか、あるいはなぜ使用されないのかを明確にするために、プロジェクション解析に関するログも追加しました。 [#74498](https://github.com/ClickHouse/ClickHouse/pull/74498) ([Amos Bird](https://github.com/amosbird))。 -* `DETACH PART` 実行中に発生する `Part <...> does not contain in snapshot of previous virtual parts. (PART_IS_TEMPORARILY_LOCKED)` というエラーを修正。 [#76039](https://github.com/ClickHouse/ClickHouse/pull/76039) ([Aleksei Filatov](https://github.com/aalexfvk)). -* リテラルを含む式を持つ skip インデックスが analyzer で正しく動作しない問題を修正し、インデックス解析時に冗長なキャストを削除しました。 [#77229](https://github.com/ClickHouse/ClickHouse/pull/77229) ([Pavel Kruglov](https://github.com/Avogar)). -* `close_session` クエリパラメータが有効にならず、名前付きセッションが `session_timeout` 経過後にしか閉じられない不具合を修正。 [#77336](https://github.com/ClickHouse/ClickHouse/pull/77336) ([Alexey Katsman](https://github.com/alexkats)). -* マテリアライズドビューがアタッチされていない状態でも NATS サーバーからメッセージを受信できるように修正。 [#77392](https://github.com/ClickHouse/ClickHouse/pull/77392) ([Dmitry Novikov](https://github.com/dmitry-sles-novikov)). -* 空の `FileLog` から `merge` テーブル関数経由で読み込む際の論理エラーを修正し、[#75575](https://github.com/ClickHouse/ClickHouse/issues/75575) をクローズしました。 [#77441](https://github.com/ClickHouse/ClickHouse/pull/77441)([Vladimir Cherkasov](https://github.com/vdimir))。 -* 共有バリアントの `Dynamic` シリアライゼーションでデフォルトのフォーマット設定を使用するよう変更しました。 [#77572](https://github.com/ClickHouse/ClickHouse/pull/77572) ([Pavel Kruglov](https://github.com/Avogar)). -* ローカルディスク上のテーブルデータパスの存在確認を修正。[#77608](https://github.com/ClickHouse/ClickHouse/pull/77608) ([Tuan Pham Anh](https://github.com/tuanpach)). -* 一部の型で定数値をリモートに送信する処理を修正。 [#77634](https://github.com/ClickHouse/ClickHouse/pull/77634) ([Pavel Kruglov](https://github.com/Avogar)). -* S3/AzureQueue における期限切れコンテキストが原因のクラッシュを修正しました。 [#77720](https://github.com/ClickHouse/ClickHouse/pull/77720) ([Kseniia Sumarokova](https://github.com/kssenii)). -* RabbitMQ、Nats、Redis、AzureQueue テーブルエンジンで資格情報を秘匿するようにしました。 [#77755](https://github.com/ClickHouse/ClickHouse/pull/77755) ([Kseniia Sumarokova](https://github.com/kssenii)). -* `argMin`/`argMax` における `NaN` 比較の未定義の動作を修正しました。 [#77756](https://github.com/ClickHouse/ClickHouse/pull/77756) ([Raúl Marín](https://github.com/Algunenano)). -* マージおよびミューテーションが、書き込むブロックを生成しない場合であっても、キャンセルされたかどうかを定期的に確認するようにしました。 [#77766](https://github.com/ClickHouse/ClickHouse/pull/77766) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). -* Replicated データベースにおいて、新しく追加されたレプリカ上でリフレッシュ可能なマテリアライズドビューが動作しない問題を修正しました。 [#77774](https://github.com/ClickHouse/ClickHouse/pull/77774) ([Michael Kolupaev](https://github.com/al13n321)). -* `NOT_FOUND_COLUMN_IN_BLOCK` エラー発生時にクラッシュする可能性があった問題を修正。[#77854](https://github.com/ClickHouse/ClickHouse/pull/77854) ([Vladimir Cherkasov](https://github.com/vdimir)). -* S3/AzureQueue でデータ取り込み中に発生するクラッシュを修正。 [#77878](https://github.com/ClickHouse/ClickHouse/pull/77878) ([Bharat Nallan](https://github.com/bharatnc)). -* SSH サーバーでの履歴ファジー検索を無効化しました(skim ライブラリが必要なため)。 [#78002](https://github.com/ClickHouse/ClickHouse/pull/78002) ([Azat Khuzhin](https://github.com/azat)). -* インデックスが定義されていないカラムに対するベクトル検索クエリが、テーブル内にベクトル類似性インデックスが定義された別のベクトルカラムが存在する場合に誤った結果を返していた不具合を修正しました。(Issue [#77978](https://github.com/ClickHouse/ClickHouse/issues/77978))。 [#78069](https://github.com/ClickHouse/ClickHouse/pull/78069)([Shankar Iyer](https://github.com/shankar-iyer))。 -* "The requested output format {} is binary... Do you want to output it anyway? [y/N]" プロンプトにあったごく小さな誤りを修正。 [#78095](https://github.com/ClickHouse/ClickHouse/pull/78095) ([Azat Khuzhin](https://github.com/azat)). -* `toStartOfInterval` の origin 引数が 0 のときに発生するバグを修正しました。 [#78096](https://github.com/ClickHouse/ClickHouse/pull/78096)([Yarik Briukhovetskyi](https://github.com/yariks5s))。 -* HTTP インターフェースで空の `session_id` クエリパラメータを指定できないようにしました。 [#78098](https://github.com/ClickHouse/ClickHouse/pull/78098) ([Alexey Katsman](https://github.com/alexkats)). -* `ALTER` クエリの直後に実行された `RENAME` クエリが原因で `Replicated` データベースのメタデータが上書きされてしまう可能性があった問題を修正。 [#78107](https://github.com/ClickHouse/ClickHouse/pull/78107) ([Nikolay Degterinsky](https://github.com/evillique))。 -* `NATS` エンジンで発生していたクラッシュを修正。 [#78108](https://github.com/ClickHouse/ClickHouse/pull/78108) ([Dmitry Novikov](https://github.com/dmitry-sles-novikov)). -* 組み込みクライアントでの SSH 用 history_file の作成を試みないようにしました(以前のバージョンでは作成は常に失敗していましたが、試行は行われていました)。 [#78112](https://github.com/ClickHouse/ClickHouse/pull/78112) ([Azat Khuzhin](https://github.com/azat)). -* `RENAME DATABASE` または `DROP TABLE` クエリの実行後に `system.detached_tables` が誤った情報を表示する問題を修正。[#78126](https://github.com/ClickHouse/ClickHouse/pull/78126) ([Nikolay Degterinsky](https://github.com/evillique))。 -* `Replicated` データベースでテーブル数が多すぎる場合のチェックについて、[#77274](https://github.com/ClickHouse/ClickHouse/pull/77274) で導入された不具合を修正しました。また、`ReplicatedMergeTree` や `KeeperMap` の場合に Keeper に管理対象外のノードが作成されてしまうのを避けるため、ストレージを作成する前にチェックを実行するようにしました。[#78127](https://github.com/ClickHouse/ClickHouse/pull/78127)([Nikolay Degterinsky](https://github.com/evillique))。 -* 同時実行される `S3Queue` メタデータ初期化に起因する可能性のあるクラッシュを修正しました。 [#78131](https://github.com/ClickHouse/ClickHouse/pull/78131) ([Azat Khuzhin](https://github.com/azat)). -* `groupArray*` 関数は、これまで実行を試みていたのとは異なり、`max_size` 引数が Int 型で値 0 の場合にも、すでに UInt 型で行っているのと同様に `BAD_ARGUMENTS` エラーを発生させるようになりました。[#78140](https://github.com/ClickHouse/ClickHouse/pull/78140)([Eduard Karacharov](https://github.com/korowa))。 -* ローカルテーブルがデタッチされる前に削除されていた場合でも、失われたレプリカのリカバリ時にクラッシュしないようにしました。 [#78173](https://github.com/ClickHouse/ClickHouse/pull/78173) ([Raúl Marín](https://github.com/Algunenano)). -* `system.s3_queue_settings` の "alterable" 列が常に `false` を返してしまう問題を修正。 [#78187](https://github.com/ClickHouse/ClickHouse/pull/78187) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Azure のアクセス署名をマスクし、ユーザーやログに表示されないようにしました。 [#78189](https://github.com/ClickHouse/ClickHouse/pull/78189) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Wide parts におけるプレフィックス付きサブストリームのプリフェッチ処理を修正しました。 [#78205](https://github.com/ClickHouse/ClickHouse/pull/78205) ([Pavel Kruglov](https://github.com/Avogar)). -* キー配列が `LowCardinality(Nullable)` 型の場合に発生していた `mapFromArrays` のクラッシュや誤った結果の問題を修正。 [#78240](https://github.com/ClickHouse/ClickHouse/pull/78240) ([Eduard Karacharov](https://github.com/korowa)). -* delta-kernel-rs の認証オプションを修正しました。 [#78255](https://github.com/ClickHouse/ClickHouse/pull/78255) ([Kseniia Sumarokova](https://github.com/kssenii)). -* レプリカの `disable_insertion_and_mutation` が true の場合は、Refreshable マテリアライズドビューのタスクをスケジュールしないようにしました。タスクは挿入処理を行うものであり、`disable_insertion_and_mutation` が true の場合は失敗します。 [#78277](https://github.com/ClickHouse/ClickHouse/pull/78277) ([Xu Jia](https://github.com/XuJia0210)). -* `Merge` エンジンで基盤となるテーブルへのアクセスを検証できるようにしました。 [#78339](https://github.com/ClickHouse/ClickHouse/pull/78339) ([Pervakov Grigorii](https://github.com/GrigoryPervakov))。 -* `Distributed` テーブルに対するクエリでは `FINAL` 修飾子が無視されます。 [#78428](https://github.com/ClickHouse/ClickHouse/pull/78428) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* `bitmapMin` は、ビットマップが空の場合に uint32_max(入力型がそれより大きい場合は uint64_max)を返します。これは、空の roaring_bitmap における最小値の動作と一致します。[#78444](https://github.com/ClickHouse/ClickHouse/pull/78444) ([wxybear](https://github.com/wxybear))。 -* `distributed_aggregation_memory_efficient` が有効な場合、FROM 句の読み取り直後におけるクエリ処理の並列化を無効化しました。これは論理エラーを引き起こす可能性があったためです。 [#76934](https://github.com/ClickHouse/ClickHouse/issues/76934) をクローズ。 [#78500](https://github.com/ClickHouse/ClickHouse/pull/78500)([flynn](https://github.com/ucasfl))。 -* `max_streams_to_max_threads_ratio` 設定を適用した結果、計画されているストリーム数が 0 件になる場合に備えて、読み取り用のストリームを少なくとも 1 つは確保するようにしました。 [#78505](https://github.com/ClickHouse/ClickHouse/pull/78505) ([Eduard Karacharov](https://github.com/korowa)). -* ストレージ `S3Queue` において、論理エラー「Cannot unregister: table uuid is not registered」を修正しました。[#78285](https://github.com/ClickHouse/ClickHouse/issues/78285) をクローズしました。[#78541](https://github.com/ClickHouse/ClickHouse/pull/78541)([Kseniia Sumarokova](https://github.com/kssenii))。 -* ClickHouse は、cgroup v1 と v2 の両方が有効になっているシステムで、自身が属する cgroup v2 を判別できるようになりました。 [#78566](https://github.com/ClickHouse/ClickHouse/pull/78566) ([Grigory Korolev](https://github.com/gkorolev)). -* `-Cluster` テーブル関数はテーブルレベルの設定と併用すると失敗していました。 [#78587](https://github.com/ClickHouse/ClickHouse/pull/78587) ([Daniil Ivanik](https://github.com/divanik)). -* INSERT 時に ReplicatedMergeTree がトランザクションをサポートしていない場合のチェックを強化。 [#78633](https://github.com/ClickHouse/ClickHouse/pull/78633) ([Azat Khuzhin](https://github.com/azat)). -* ATTACH 中のクエリ設定をクリーンアップするようにしました。 [#78637](https://github.com/ClickHouse/ClickHouse/pull/78637) ([Raúl Marín](https://github.com/Algunenano)). -* `iceberg_metadata_file_path` に無効なパスが指定されていた場合にクラッシュする問題を修正しました。 [#78688](https://github.com/ClickHouse/ClickHouse/pull/78688) ([alesapin](https://github.com/alesapin)). -* `DeltaLake` テーブルエンジンの delta-kernel-s 実装において、読み取りスキーマがテーブルスキーマと異なり、かつパーティション列が存在する場合に「not found column」エラーが発生していた問題を修正しました。 [#78690](https://github.com/ClickHouse/ClickHouse/pull/78690) ([Kseniia Sumarokova](https://github.com/kssenii))。 -* 名前付きセッションをクローズするようスケジュールした後(ただしタイムアウトが発生する前)に、同じ名前の新しい名前付きセッションを作成すると、その新しいセッションが最初のセッションのクローズ予定時刻にクローズされてしまう問題を修正しました。 [#78698](https://github.com/ClickHouse/ClickHouse/pull/78698) ([Alexey Katsman](https://github.com/alexkats)). -* `MongoDB` エンジンまたは `mongodb` テーブル関数を使用するテーブルから読み取る複数種類の `SELECT` クエリを修正しました:`WHERE` 句内で定数値の暗黙的な型変換が行われるクエリ(例: `WHERE datetime = '2025-03-10 00:00:00'`)や、`LIMIT` と `GROUP BY` を含むクエリです。以前は、これらのクエリが誤った結果を返す可能性がありました。 [#78777](https://github.com/ClickHouse/ClickHouse/pull/78777) ([Anton Popov](https://github.com/CurtizJ)). -* `CHECK TABLE` の実行中にテーブルの停止処理をブロックしないようにしました。 [#78782](https://github.com/ClickHouse/ClickHouse/pull/78782) ([Raúl Marín](https://github.com/Algunenano)). -* Keeper の修正: すべてのケースにおいて ephemeral カウントを修正。 [#78799](https://github.com/ClickHouse/ClickHouse/pull/78799) ([Antonio Andelic](https://github.com/antonio2368)). -* テーブル関数 `view` 以外を使用する際の `StorageDistributed` における誤ったキャストを修正。[#78464](https://github.com/ClickHouse/ClickHouse/issues/78464) をクローズ。[#78828](https://github.com/ClickHouse/ClickHouse/pull/78828)([Konstantin Bogdanov](https://github.com/thevar1able))。 -* `tupleElement(*, 1)` の書式設定の一貫性を修正しました。[#78639](https://github.com/ClickHouse/ClickHouse/issues/78639) をクローズ。[#78832](https://github.com/ClickHouse/ClickHouse/pull/78832)([Konstantin Bogdanov](https://github.com/thevar1able))。 -* `ssd_cache` 型の辞書は、ゼロまたは負の値の `block_size` および `write_buffer_size` パラメータを拒否するようになりました(issue [#78314](https://github.com/ClickHouse/ClickHouse/issues/78314))。 [#78854](https://github.com/ClickHouse/ClickHouse/pull/78854)([Elmi Ahmadov](https://github.com/ahmadov))。 -* 異常終了後に `ALTER` を実行すると Refreshable マテリアライズドビューがクラッシュする問題を修正しました。 [#78858](https://github.com/ClickHouse/ClickHouse/pull/78858) ([Azat Khuzhin](https://github.com/azat)). -* `CSV` フォーマットにおける不正な `DateTime` 値の解析処理を修正。[#78919](https://github.com/ClickHouse/ClickHouse/pull/78919)([Pavel Kruglov](https://github.com/Avogar))。 -* Keeper の修正: 失敗したマルチリクエストでウォッチが発火しないようにしました。 [#79247](https://github.com/ClickHouse/ClickHouse/pull/79247) ([Antonio Andelic](https://github.com/antonio2368)). -* `min-max` 値が明示的に指定されているものの `NULL` である場合に、Iceberg テーブルの読み取りが失敗する問題を修正しました。Go の Iceberg ライブラリが、そのような問題のあるファイルを生成することが確認されました。[#78740](https://github.com/ClickHouse/ClickHouse/issues/78740) をクローズしました。 [#78764](https://github.com/ClickHouse/ClickHouse/pull/78764)([flynn](https://github.com/ucasfl))。 - - +* ORDER BY と LIMIT の適用後にデータを読み取る lazy column を用いてパフォーマンスを最適化します。 [#55518](https://github.com/ClickHouse/ClickHouse/pull/55518) ([Xiaozhe Yu](https://github.com/wudidapaopao)). +* クエリ条件キャッシュをデフォルトで有効にしました。 [#79080](https://github.com/ClickHouse/ClickHouse/pull/79080) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* `col->insertFrom()` への呼び出しをデバーチャライゼーションすることで JOIN 結果の構築を高速化しました。 [#77350](https://github.com/ClickHouse/ClickHouse/pull/77350) ([Alexander Gololobov](https://github.com/davenger)). +* フィルタのクエリプランステップにある等価条件を、可能な場合は JOIN 条件にマージして、ハッシュテーブルのキーとして利用できるようにしました。 [#78877](https://github.com/ClickHouse/ClickHouse/pull/78877) ([Dmitry Novik](https://github.com/novikd))。 +* 両方のテーブルで JOIN キーが PK の先頭部分になっている場合、JOIN に動的シャーディングを使用します。この最適化は `query_plan_join_shard_by_pk_ranges` 設定で有効にできます(デフォルトでは無効)。[#74733](https://github.com/ClickHouse/ClickHouse/pull/74733) ([Nikolai Kochetov](https://github.com/KochetovNicolai))。 +* 列の下限値および上限値に基づく `Iceberg` データのプルーニングをサポートしました。[#77638](https://github.com/ClickHouse/ClickHouse/issues/77638) を修正しました。[#78242](https://github.com/ClickHouse/ClickHouse/pull/78242)([alesapin](https://github.com/alesapin))。 +* `Iceberg` 向けの単純な `count` 最適化を実装しました。これにより、フィルタなしの `count()` を含むクエリが高速になります。[#77639](https://github.com/ClickHouse/ClickHouse/issues/77639) をクローズ。[#78090](https://github.com/ClickHouse/ClickHouse/pull/78090)([alesapin](https://github.com/alesapin))。 +* `max_merge_delayed_streams_for_parallel_write` を使用して、マージ処理が並列にフラッシュできる列数を構成できるようにしました(これにより、S3 への縦型マージのメモリ使用量がおよそ 1/25 に削減されます)。 [#77922](https://github.com/ClickHouse/ClickHouse/pull/77922) ([Azat Khuzhin](https://github.com/azat)). +* キャッシュがマージなどで受動的に使用される場合は、`filesystem_cache_prefer_bigger_buffer_size` を無効にします。これにより、マージ処理時のメモリ消費量を抑えることができます。 [#77898](https://github.com/ClickHouse/ClickHouse/pull/77898) ([Kseniia Sumarokova](https://github.com/kssenii)). +* parallel replicas を有効にした読み取り時のタスクサイズの決定に、レプリカ数を利用するようになりました。これにより、読み取るデータ量がそれほど多くない場合でも、レプリカ間での負荷分散がより良好になります。[#78695](https://github.com/ClickHouse/ClickHouse/pull/78695)([Nikita Taranov](https://github.com/nickitat))。 +* `ORC` フォーマットにおいて非同期 I/O プリフェッチをサポートし、リモート I/O レイテンシを隠蔽することで全体の性能を向上しました。 [#70534](https://github.com/ClickHouse/ClickHouse/pull/70534) ([李扬](https://github.com/taiyang-li)). +* 非同期インサートに使用されるメモリを事前割り当てしてパフォーマンスを向上させます。[#74945](https://github.com/ClickHouse/ClickHouse/pull/74945) ([Ilya Golshtein](https://github.com/ilejn))。 +* `multiRead` が利用可能な箇所では単一の `get` リクエストの使用を廃止することで、Keeper へのリクエスト数を削減しました。これにより、レプリカ数の増加時に単一の `get` リクエストが Keeper に対して発生させうる大きな負荷を回避できます。 [#56862](https://github.com/ClickHouse/ClickHouse/pull/56862) ([Nikolay Degterinsky](https://github.com/evillique)). +* Nullable 引数に対する関数実行の軽微な最適化。[#76489](https://github.com/ClickHouse/ClickHouse/pull/76489)([李扬](https://github.com/taiyang-li))。 +* `arraySort` を最適化しました。 [#76850](https://github.com/ClickHouse/ClickHouse/pull/76850) ([李扬](https://github.com/taiyang-li)). +* 同一パートのマークをマージして一括でクエリ条件キャッシュに書き込むことで、ロックのオーバーヘッドを削減しました。 [#77377](https://github.com/ClickHouse/ClickHouse/pull/77377) ([zhongyuankai](https://github.com/zhongyuankai)). +* 1 つだけブラケット展開を行うクエリに対して `s3Cluster` のパフォーマンスを最適化しました。[#77686](https://github.com/ClickHouse/ClickHouse/pull/77686) ([Tomáš Hromada](https://github.com/gyfis))。 +* 単一の Nullable 列または LowCardinality 列に対する ORDER BY を最適化しました。[#77789](https://github.com/ClickHouse/ClickHouse/pull/77789) ([李扬](https://github.com/taiyang-li))。 +* `Native` 形式のメモリ使用量を最適化しました。 [#78442](https://github.com/ClickHouse/ClickHouse/pull/78442) ([Azat Khuzhin](https://github.com/azat)). +* 些細な最適化: 型キャストが必要な場合は `count(if(...))` を `countIf` に書き換えないようにする。[#78564](https://github.com/ClickHouse/ClickHouse/issues/78564) をクローズ。[#78565](https://github.com/ClickHouse/ClickHouse/pull/78565)([李扬](https://github.com/taiyang-li))。 +* `hasAll` 関数で `tokenbf_v1`、`ngrambf_v1` の全文スキップインデックスを利用できるようになりました。 [#77662](https://github.com/ClickHouse/ClickHouse/pull/77662) ([UnamedRus](https://github.com/UnamedRus))。 +* ベクトル類似性インデックスがメインメモリを最大 2 倍まで過剰に割り当ててしまう可能性がありました。この修正では、メモリ割り当て戦略を見直すことでメモリ消費量を削減し、ベクトル類似性インデックスキャッシュの有効性を向上させます(issue [#78056](https://github.com/ClickHouse/ClickHouse/issues/78056))。[#78394](https://github.com/ClickHouse/ClickHouse/pull/78394)([Shankar Iyer](https://github.com/shankar-iyer))。 +* `system.metric_log` テーブルに対してスキーマタイプを指定するための設定 `schema_type` を導入しました。利用可能なスキーマは 3 種類あります。`wide` — 現行のスキーマで、各メトリクス/イベントが個別のカラムに配置されます(個々のカラムを読む処理に最も効率的)、`transposed` — `system.asynchronous_metric_log` に類似しており、メトリクス/イベントが行として格納されます。そして、最も興味深い `transposed_with_wide_view` — 内部テーブルは `transposed` スキーマで作成しつつ、そのテーブルに対するクエリを変換して実行する `wide` スキーマのビューも提供する方式です。`transposed_with_wide_view` ではビューのサブ秒解像度はサポートされず、`event_time_microseconds` は後方互換性のためのエイリアスにすぎません。 [#78412](https://github.com/ClickHouse/ClickHouse/pull/78412) ([alesapin](https://github.com/alesapin))。 + +#### 改善点 + +* `Distributed` クエリのクエリプランをシリアライズできるようになりました。新しい設定 `serialize_query_plan` が追加されました。有効化すると、`Distributed` テーブルからのクエリは、リモートクエリ実行時にシリアライズされたクエリプランを使用します。これにより TCP プロトコルに新しいパケットタイプが導入されるため、このパケットを処理できるようにするには、サーバー設定に `true` を追加する必要があります。 [#69652](https://github.com/ClickHouse/ClickHouse/pull/69652) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). +* ビューからの `JSON` 型およびサブカラムの読み取りが可能になりました。 [#76903](https://github.com/ClickHouse/ClickHouse/pull/76903) ([Pavel Kruglov](https://github.com/Avogar)). +* ALTER DATABASE ... ON CLUSTER がサポートされました。 [#79242](https://github.com/ClickHouse/ClickHouse/pull/79242) ([Tuan Pham Anh](https://github.com/tuanpach)). +* リフレッシュ可能なマテリアライズドビューのリフレッシュが `system.query_log` に記録されるようになりました。 [#71333](https://github.com/ClickHouse/ClickHouse/pull/71333) ([Michael Kolupaev](https://github.com/al13n321)). +* ユーザー定義関数 (UDF) を、その設定内の新しい設定項目によって決定的としてマークできるようになりました。また、クエリキャッシュは、クエリ内で呼び出される UDF が決定的かどうかを確認するようになりました。決定的である場合、そのクエリ結果がキャッシュされます。(Issue [#59988](https://github.com/ClickHouse/ClickHouse/issues/59988)). [#77769](https://github.com/ClickHouse/ClickHouse/pull/77769) ([Jimmy Aguilar Mena](https://github.com/Ergus)). +* あらゆる種類のレプリケーションタスクに対してバックオフロジックを有効化しました。これにより、CPU 使用率、メモリ使用量、およびログファイルのサイズを削減できるようになります。`max_postpone_time_for_failed_mutations_ms` に類似した新しい設定項目として、`max_postpone_time_for_failed_replicated_fetches_ms`、`max_postpone_time_for_failed_replicated_merges_ms`、`max_postpone_time_for_failed_replicated_tasks_ms` を追加しました。 [#74576](https://github.com/ClickHouse/ClickHouse/pull/74576) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). +* `system.errors` に `query_id` を追加しました。[#75815](https://github.com/ClickHouse/ClickHouse/issues/75815) をクローズしました。[#76581](https://github.com/ClickHouse/ClickHouse/pull/76581)([Vladimir Baikov](https://github.com/bkvvldmr))。 +* `UInt128` から `IPv6` への変換をサポートしました。これにより、`IPv6` に対する `bitAnd` 演算や算術演算、および結果の `IPv6` への再変換が可能になります。[#76752](https://github.com/ClickHouse/ClickHouse/issues/76752) をクローズします。これにより、`IPv6` に対する `bitAnd` 演算の結果も再度 `IPv6` に変換できるようになります。[#57707](https://github.com/ClickHouse/ClickHouse/pull/57707) も参照してください。[#76928](https://github.com/ClickHouse/ClickHouse/pull/76928)([Muzammil Abdul Rehman](https://github.com/muzammilar))。 +* デフォルトでは、`Variant` 型内のテキスト形式で特殊な `Bool` 値をパースしないようになりました。これを有効にするには、設定 `allow_special_bool_values_inside_variant` を使用します。 [#76974](https://github.com/ClickHouse/ClickHouse/pull/76974) ([Pavel Kruglov](https://github.com/Avogar)). +* セッションレベルおよびサーバーレベルの両方で、低い `priority` のクエリに対するタスクごとの待機時間を設定できるようにしました。 [#77013](https://github.com/ClickHouse/ClickHouse/pull/77013) ([VicoWu](https://github.com/VicoWu)). +* JSON データ型の値の比較を実装しました。これにより、JSON オブジェクトを Map と同様に比較できるようになりました。 [#77397](https://github.com/ClickHouse/ClickHouse/pull/77397) ([Pavel Kruglov](https://github.com/Avogar))。 +* `system.kafka_consumers` による権限管理のサポートを改善。内部の `librdkafka` エラーを転送するようにした(なお、このライブラリには大きな問題があることを付記しておく)。 [#77700](https://github.com/ClickHouse/ClickHouse/pull/77700) ([Ilya Golshtein](https://github.com/ilejn)). +* Buffer テーブルエンジンの設定の検証を追加しました。 [#77840](https://github.com/ClickHouse/ClickHouse/pull/77840) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +* `HDFS` での `pread` を有効化または無効化するための設定 `enable_hdfs_pread` を追加。 [#77885](https://github.com/ClickHouse/ClickHouse/pull/77885) ([kevinyhzou](https://github.com/KevinyhZou)). +* ZooKeeper の `multi` 読み取りおよび書き込みリクエスト数用のプロファイルイベントを追加しました。 [#77888](https://github.com/ClickHouse/ClickHouse/pull/77888) ([JackyWoo](https://github.com/JackyWoo)). +* `disable_insertion_and_mutation` が有効な場合でも一時テーブルの作成および挿入を許可できるようにしました。 [#77901](https://github.com/ClickHouse/ClickHouse/pull/77901) ([Xu Jia](https://github.com/XuJia0210)). +* `max_insert_delayed_streams_for_parallel_write` を 100 に減らしました。 [#77919](https://github.com/ClickHouse/ClickHouse/pull/77919) ([Azat Khuzhin](https://github.com/azat)). +* `yyy` のような Joda 構文(ちなみに、これは Java の世界のものです)における年の解析を修正。 [#77973](https://github.com/ClickHouse/ClickHouse/pull/77973) ([李扬](https://github.com/taiyang-li)) +* `MergeTree` テーブルのパーツのアタッチ処理は、そのブロック順に従って実行されます。これは、`ReplacingMergeTree` などの特殊なマージアルゴリズムにとって重要です。これにより [#71009](https://github.com/ClickHouse/ClickHouse/issues/71009) がクローズされます。[#77976](https://github.com/ClickHouse/ClickHouse/pull/77976)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* クエリマスキングルールは、一致が発生した場合に `LOGICAL_ERROR` をスローできるようになりました。これにより、あらかじめ定義したパスワードがログ内のどこかで漏えいしていないかを検証しやすくなります。 [#78094](https://github.com/ClickHouse/ClickHouse/pull/78094) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). +* MySQL との互換性を向上させるため、`information_schema.tables` に `index_length_column` 列を追加しました。 [#78119](https://github.com/ClickHouse/ClickHouse/pull/78119) ([Paweł Zakrzewski](https://github.com/KrzaQ)). +* 2 つの新しいメトリクス `TotalMergeFailures` と `NonAbortedMergeFailures` を導入しました。これらのメトリクスは、短期間に過度に多くのマージが失敗するケースを検出するためのものです。 [#78150](https://github.com/ClickHouse/ClickHouse/pull/78150) ([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 +* パススタイル使用時にキーが指定されていない場合の誤った S3 URL の解析を修正。 [#78185](https://github.com/ClickHouse/ClickHouse/pull/78185) ([Arthur Passos](https://github.com/arthurpassos)). +* `BlockActiveTime`、`BlockDiscardTime`、`BlockWriteTime`、`BlockQueueTime`、`BlockReadTime` の非同期メトリクスで誤った値が報告されていた問題を修正しました(変更前は 1 秒が誤って 0.001 と報告されていました)。 [#78211](https://github.com/ClickHouse/ClickHouse/pull/78211) ([filimonov](https://github.com/filimonov)). +* StorageS3(Azure)Queue のマテリアライズドビューへのプッシュ処理中に発生するエラーに対して、`loading_retries` の上限が適用されるようにしました。これ以前は、そのようなエラーは無制限に再試行されていました。 [#78313](https://github.com/ClickHouse/ClickHouse/pull/78313) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Delta Lake の `delta-kernel-rs` 実装で、パフォーマンスとプログレスバーを修正しました。 [#78368](https://github.com/ClickHouse/ClickHouse/pull/78368) ([Kseniia Sumarokova](https://github.com/kssenii)). +* ランタイムディスクで `include`、`from_env`、`from_zk` をサポートするようにしました。[#78177](https://github.com/ClickHouse/ClickHouse/issues/78177) をクローズ。[#78470](https://github.com/ClickHouse/ClickHouse/pull/78470)([Kseniia Sumarokova](https://github.com/kssenii))。 +* 長時間実行中の mutation に対する動的な警告を `system.warnings` テーブルに追加しました。 [#78658](https://github.com/ClickHouse/ClickHouse/pull/78658) ([Bharat Nallan](https://github.com/bharatnc))。 +* システムテーブル `system.query_condition_cache` にフィールド `condition` を追加しました。これは、クエリ条件キャッシュでキーとして使用されるハッシュの元となるプレーンテキストの条件式を保存します。 [#78671](https://github.com/ClickHouse/ClickHouse/pull/78671) ([Robert Schulze](https://github.com/rschu1ze))。 +* Hive のパーティションで空の値を許可できるようにしました。 [#78816](https://github.com/ClickHouse/ClickHouse/pull/78816) ([Arthur Passos](https://github.com/arthurpassos)). +* `BFloat16` における `IN` 句の型変換を修正しました(つまり、`SELECT toBFloat16(1) IN [1, 2, 3];` は今後 `1` を返します)。[#78754](https://github.com/ClickHouse/ClickHouse/issues/78754) をクローズしました。[#78839](https://github.com/ClickHouse/ClickHouse/pull/78839)([Raufs Dunamalijevs](https://github.com/rienath))。 +* `MergeTree` で `disk = ...` が設定されている場合は、他のディスク上のパーツをチェックしないようにしました。 [#78855](https://github.com/ClickHouse/ClickHouse/pull/78855) ([Azat Khuzhin](https://github.com/azat)). +* `system.query_log` の `used_data_type_families` 内のデータ型が正規名で記録されるようにしました。 [#78972](https://github.com/ClickHouse/ClickHouse/pull/78972) ([Kseniia Sumarokova](https://github.com/kssenii)). +* `recoverLostReplica` のクリーンアップ設定を、[#78637](https://github.com/ClickHouse/ClickHouse/pull/78637) と同様にしました。[#79113](https://github.com/ClickHouse/ClickHouse/pull/79113)([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 +* INFILE のスキーマ推論で挿入列を使用するようにしました。 [#78490](https://github.com/ClickHouse/ClickHouse/pull/78490) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). + +#### バグ修正(公式安定版リリースにおけるユーザーにとって目に見える不具合) + +* 集約プロジェクションで `count(Nullable)` が使用された場合の誤ったプロジェクション解析を修正しました。これにより[#74495](https://github.com/ClickHouse/ClickHouse/issues/74495) が解決されます。このPRではまた、プロジェクションがなぜ使用されるのか、あるいはなぜ使用されないのかを明確にするため、プロジェクション解析まわりのログも追加しました。[#74498](https://github.com/ClickHouse/ClickHouse/pull/74498) ([Amos Bird](https://github.com/amosbird))。 +* `DETACH PART` の実行中に発生する `Part <...> does not contain in snapshot of previous virtual parts. (PART_IS_TEMPORARILY_LOCKED)` エラーを修正。 [#76039](https://github.com/ClickHouse/ClickHouse/pull/76039) ([Aleksei Filatov](https://github.com/aalexfvk)). +* アナライザーでリテラルを含む式を使用するスキップインデックスが動作しない問題を修正し、インデックスの解析時に自明なキャストを削除しました。 [#77229](https://github.com/ClickHouse/ClickHouse/pull/77229) ([Pavel Kruglov](https://github.com/Avogar)). +* `close_session` クエリパラメータが機能せず、その結果、名前付きセッションが `session_timeout` 経過後にしかクローズされなかったバグを修正。 [#77336](https://github.com/ClickHouse/ClickHouse/pull/77336) ([Alexey Katsman](https://github.com/alexkats))。 +* マテリアライズドビューなしで NATS サーバーからメッセージを受信できない問題を修正しました。[#77392](https://github.com/ClickHouse/ClickHouse/pull/77392) ([Dmitry Novikov](https://github.com/dmitry-sles-novikov))。 +* 空の `FileLog` から `merge` テーブル関数経由で読み込み時に発生する論理エラーを修正。 [#75575](https://github.com/ClickHouse/ClickHouse/issues/75575) をクローズ。 [#77441](https://github.com/ClickHouse/ClickHouse/pull/77441)([Vladimir Cherkasov](https://github.com/vdimir))。 +* 共有バリアント由来の `Dynamic` シリアライゼーションでデフォルトのフォーマット設定を使用するようにしました。 [#77572](https://github.com/ClickHouse/ClickHouse/pull/77572) ([Pavel Kruglov](https://github.com/Avogar)). +* ローカルディスク上のテーブルデータパスの存在チェックを修正。[#77608](https://github.com/ClickHouse/ClickHouse/pull/77608)([Tuan Pham Anh](https://github.com/tuanpach))。 +* 一部の型における定数値のリモート送信を修正しました。 [#77634](https://github.com/ClickHouse/ClickHouse/pull/77634) ([Pavel Kruglov](https://github.com/Avogar)). +* S3/AzureQueue において、有効期限切れのコンテキストによりクラッシュが発生する問題を修正しました。 [#77720](https://github.com/ClickHouse/ClickHouse/pull/77720) ([Kseniia Sumarokova](https://github.com/kssenii)). +* RabbitMQ、Nats、Redis、AzureQueue テーブルエンジンで資格情報を非表示にするようにしました。 [#77755](https://github.com/ClickHouse/ClickHouse/pull/77755) ([Kseniia Sumarokova](https://github.com/kssenii))。 +* `argMin` および `argMax` における `NaN` 比較の未定義動作を修正。 [#77756](https://github.com/ClickHouse/ClickHouse/pull/77756) ([Raúl Marín](https://github.com/Algunenano)). +* 操作が書き込み用のブロックを一切生成しない場合でも、マージおよびミューテーションがキャンセルされているかどうかを定期的に確認するようにしました。 [#77766](https://github.com/ClickHouse/ClickHouse/pull/77766) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). +* Replicated データベースにおいて、新たに追加されたレプリカで refreshable マテリアライズドビューが動作しない問題を修正しました。 [#77774](https://github.com/ClickHouse/ClickHouse/pull/77774) ([Michael Kolupaev](https://github.com/al13n321)). +* `NOT_FOUND_COLUMN_IN_BLOCK` エラー発生時にクラッシュする可能性があった問題を修正。 [#77854](https://github.com/ClickHouse/ClickHouse/pull/77854) ([Vladimir Cherkasov](https://github.com/vdimir))。 +* データの投入中に S3/AzureQueue で発生していたクラッシュを修正。 [#77878](https://github.com/ClickHouse/ClickHouse/pull/77878) ([Bharat Nallan](https://github.com/bharatnc)). +* SSH サーバーでの履歴のあいまい検索機能を無効化しました(`skim` ライブラリが必要なため)。 [#78002](https://github.com/ClickHouse/ClickHouse/pull/78002) ([Azat Khuzhin](https://github.com/azat))。 +* インデックス未作成のカラムに対するベクトル検索クエリが、同じテーブル内にベクトル類似度インデックスが定義された別のベクトルカラムが存在する場合に誤った結果を返していた不具合を修正しました。(Issue [#77978](https://github.com/ClickHouse/ClickHouse/issues/77978))。[#78069](https://github.com/ClickHouse/ClickHouse/pull/78069) ([Shankar Iyer](https://github.com/shankar-iyer))。 +* ごく小さな誤りがあったプロンプト "The requested output format {} is binary... Do you want to output it anyway? [y/N]" を修正しました。 [#78095](https://github.com/ClickHouse/ClickHouse/pull/78095) ([Azat Khuzhin](https://github.com/azat)). +* `toStartOfInterval` の origin 引数がゼロのときに発生していたバグを修正しました。 [#78096](https://github.com/ClickHouse/ClickHouse/pull/78096) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* HTTP インターフェイスで、`session_id` クエリパラメータに空値を指定できないようにしました。 [#78098](https://github.com/ClickHouse/ClickHouse/pull/78098) ([Alexey Katsman](https://github.com/alexkats)). +* `ALTER` クエリの直後に実行された `RENAME` クエリが原因で `Replicated` データベースのメタデータが上書きされてしまう可能性があった問題を修正しました。 [#78107](https://github.com/ClickHouse/ClickHouse/pull/78107) ([Nikolay Degterinsky](https://github.com/evillique)). +* `NATS` エンジンのクラッシュを修正。 [#78108](https://github.com/ClickHouse/ClickHouse/pull/78108) ([Dmitry Novikov](https://github.com/dmitry-sles-novikov)). +* SSH 向け埋め込みクライアントで `history_file` を作成しようとしないようにしました(以前のバージョンでは、作成は常に失敗していましたが、試行自体は行われていました)。 [#78112](https://github.com/ClickHouse/ClickHouse/pull/78112) ([Azat Khuzhin](https://github.com/azat)). +* `RENAME DATABASE` または `DROP TABLE` クエリの実行後に `system.detached_tables` が誤った情報を表示する問題を修正。 [#78126](https://github.com/ClickHouse/ClickHouse/pull/78126) ([Nikolay Degterinsky](https://github.com/evillique)). +* [#77274](https://github.com/ClickHouse/ClickHouse/pull/77274) の後に `Replicated` データベースでテーブル数が多すぎる場合のチェックを修正しました。また、`ReplicatedMergeTree` や `KeeperMap` の場合に Keeper に管理されないノードが作成されるのを避けるため、ストレージを作成する前にチェックを実行するようにしました。 [#78127](https://github.com/ClickHouse/ClickHouse/pull/78127)([Nikolay Degterinsky](https://github.com/evillique))。 +* 並行して実行される `S3Queue` メタデータ初期化が原因となり得るクラッシュを修正しました。 [#78131](https://github.com/ClickHouse/ClickHouse/pull/78131) ([Azat Khuzhin](https://github.com/azat)). +* `groupArray*` 関数は、これまでは実行を試みていた `max_size` 引数の Int 型で値が 0 の場合について、UInt 型の場合と同様に `BAD_ARGUMENTS` エラーを返すようになりました。 [#78140](https://github.com/ClickHouse/ClickHouse/pull/78140) ([Eduard Karacharov](https://github.com/korowa)). +* ローカルテーブルがデタッチされる前に削除されていた場合でも、失われたレプリカの復旧時にクラッシュしないようにしました。 [#78173](https://github.com/ClickHouse/ClickHouse/pull/78173) ([Raúl Marín](https://github.com/Algunenano)). +* `system.s3_queue_settings` の "alterable" 列が常に `false` を返していた問題を修正しました。 [#78187](https://github.com/ClickHouse/ClickHouse/pull/78187) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Azure アクセス署名をマスクし、ユーザーからもログ上でも見えないようにしました。 [#78189](https://github.com/ClickHouse/ClickHouse/pull/78189) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Wide パーツ内で、プレフィックスを持つサブストリームのプリフェッチ処理を修正。[#78205](https://github.com/ClickHouse/ClickHouse/pull/78205) ([Pavel Kruglov](https://github.com/Avogar)). +* `LowCardinality(Nullable)` 型のキー配列で `mapFromArrays` がクラッシュしたり誤った結果を返したりする問題を修正しました。 [#78240](https://github.com/ClickHouse/ClickHouse/pull/78240) ([Eduard Karacharov](https://github.com/korowa)). +* delta-kernel-rs の auth オプションを修正しました。 [#78255](https://github.com/ClickHouse/ClickHouse/pull/78255) ([Kseniia Sumarokova](https://github.com/kssenii))。 +* レプリカの `disable_insertion_and_mutation` が true の場合、Refreshable マテリアライズドビューのタスクをスケジュールしないようにしました。このタスクは挿入処理を行うため、`disable_insertion_and_mutation` が true の場合には失敗します。 [#78277](https://github.com/ClickHouse/ClickHouse/pull/78277) ([Xu Jia](https://github.com/XuJia0210)). +* `Merge` エンジンで、基盤となるテーブルへのアクセスを検証するようにしました。 [#78339](https://github.com/ClickHouse/ClickHouse/pull/78339) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +* `Distributed` テーブルをクエリする際には、`FINAL` 修飾子は無視されます。 [#78428](https://github.com/ClickHouse/ClickHouse/pull/78428) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* `bitmapMin` は、ビットマップが空の場合に uint32_max(入力型がそれより大きい場合は uint64_max)を返します。これは、空の roaring_bitmap における最小値の動作と一致します。 [#78444](https://github.com/ClickHouse/ClickHouse/pull/78444) ([wxybear](https://github.com/wxybear))。 +* `distributed_aggregation_memory_efficient` が有効な場合に、`FROM` から読み込んだ直後に行っていたクエリ処理の並列化を無効化しました。以前はこれにより論理エラーが発生する可能性がありました。[#76934](https://github.com/ClickHouse/ClickHouse/issues/76934) をクローズ。[#78500](https://github.com/ClickHouse/ClickHouse/pull/78500)([flynn](https://github.com/ucasfl))。 +* `max_streams_to_max_threads_ratio` 設定を適用した結果、計画されたストリーム数が 0 になる場合に備えて、少なくとも 1 本の読み取り用ストリームが設定されるようにしました。 [#78505](https://github.com/ClickHouse/ClickHouse/pull/78505) ([Eduard Karacharov](https://github.com/korowa)). +* ストレージ `S3Queue` において、論理エラー「Cannot unregister: table uuid is not registered」を修正しました。[#78285](https://github.com/ClickHouse/ClickHouse/issues/78285) をクローズ。[#78541](https://github.com/ClickHouse/ClickHouse/pull/78541)([Kseniia Sumarokova](https://github.com/kssenii))。 +* ClickHouse は、cgroup v1 と v2 の両方が有効なシステムで、自身の cgroup v2 を特定できるようになりました。 [#78566](https://github.com/ClickHouse/ClickHouse/pull/78566) ([Grigory Korolev](https://github.com/gkorolev)). +* `-Cluster` テーブル関数が、テーブルレベルの設定と併用した場合に失敗していました。 [#78587](https://github.com/ClickHouse/ClickHouse/pull/78587) ([Daniil Ivanik](https://github.com/divanik))。 +* INSERT 時に ReplicatedMergeTree がトランザクションをサポートしていない場合のチェックを改善。 [#78633](https://github.com/ClickHouse/ClickHouse/pull/78633) ([Azat Khuzhin](https://github.com/azat))。 +* アタッチ処理時にクエリ設定をクリーンアップするようにしました。 [#78637](https://github.com/ClickHouse/ClickHouse/pull/78637) ([Raúl Marín](https://github.com/Algunenano)). +* `iceberg_metadata_file_path` に無効なパスが指定された場合にクラッシュする不具合を修正しました。 [#78688](https://github.com/ClickHouse/ClickHouse/pull/78688) ([alesapin](https://github.com/alesapin)). +* `delta-kernel-s` 実装を用いた `DeltaLake` テーブルエンジンにおいて、読み取りスキーマがテーブルスキーマと異なり、かつパーティションカラムが存在する場合に `not found column` エラーが発生する不具合を修正しました。 [#78690](https://github.com/ClickHouse/ClickHouse/pull/78690) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 名前付きセッションのクローズをスケジュールした後(ただしタイムアウトがまだ発生していないうちに)に、同じ名前の新しい名前付きセッションを作成すると、その新しいセッションが最初のセッションのクローズ予定時刻にクローズされてしまう問題を修正しました。 [#78698](https://github.com/ClickHouse/ClickHouse/pull/78698) ([Alexey Katsman](https://github.com/alexkats)). +* `MongoDB` エンジンのテーブルまたは `mongodb` テーブル関数から読み取る、いくつかの種類の `SELECT` クエリを修正しました。`WHERE` 句内で定数値が暗黙的に型変換されるクエリ(例:`WHERE datetime = '2025-03-10 00:00:00'`)や、`LIMIT` および `GROUP BY` を含むクエリなどが対象です。以前は、これらのクエリが誤った結果を返すことがありました。 [#78777](https://github.com/ClickHouse/ClickHouse/pull/78777) ([Anton Popov](https://github.com/CurtizJ)). +* `CHECK TABLE` 実行中にテーブルのシャットダウン処理をブロックしないようにしました。 [#78782](https://github.com/ClickHouse/ClickHouse/pull/78782) ([Raúl Marín](https://github.com/Algunenano)). +* Keeper の修正: すべてのケースで ephemeral カウントを正しく計算するように修正。 [#78799](https://github.com/ClickHouse/ClickHouse/pull/78799) ([Antonio Andelic](https://github.com/antonio2368)). +* `view` 以外のテーブル関数を使用した場合に `StorageDistributed` で発生していた不正なキャストを修正。[#78464](https://github.com/ClickHouse/ClickHouse/issues/78464) をクローズ。[#78828](https://github.com/ClickHouse/ClickHouse/pull/78828)([Konstantin Bogdanov](https://github.com/thevar1able))。 +* `tupleElement(*, 1)` のフォーマットの一貫性を修正します。[#78639](https://github.com/ClickHouse/ClickHouse/issues/78639) をクローズします。[#78832](https://github.com/ClickHouse/ClickHouse/pull/78832)([Konstantin Bogdanov](https://github.com/thevar1able))。 +* `ssd_cache` 型の辞書では、`block_size` と `write_buffer_size` パラメータにゼロまたは負の値が指定された場合、それらを拒否するようになりました(issue [#78314](https://github.com/ClickHouse/ClickHouse/issues/78314))。[#78854](https://github.com/ClickHouse/ClickHouse/pull/78854)([Elmi Ahmadov](https://github.com/ahmadov))。 +* 異常終了後に `ALTER` を実行した場合に Refreshable MATERIALIZED VIEW がクラッシュする問題を修正。[#78858](https://github.com/ClickHouse/ClickHouse/pull/78858) ([Azat Khuzhin](https://github.com/azat)). +* `CSV` フォーマットにおける不正な `DateTime` 値のパース処理を修正。[#78919](https://github.com/ClickHouse/ClickHouse/pull/78919)([Pavel Kruglov](https://github.com/Avogar))。 +* Keeper の修正: 失敗した multi リクエストでは watch が発火しないようにしました。 [#79247](https://github.com/ClickHouse/ClickHouse/pull/79247) ([Antonio Andelic](https://github.com/antonio2368)). +* min-max 値が明示的に指定されているものの `NULL` になっている場合に、Iceberg テーブルの読み取りが失敗していた問題を修正しました。そのようなひどいファイルを生成していたのは Go 向け Iceberg ライブラリであることが確認されています。[#78740](https://github.com/ClickHouse/ClickHouse/issues/78740) をクローズします。[#78764](https://github.com/ClickHouse/ClickHouse/pull/78764)([flynn](https://github.com/ucasfl))。 #### ビルド/テスト/パッケージングの改善 -* Rust において CPU ターゲットの機能を考慮し、すべてのクレートで LTO を有効化。[#78590](https://github.com/ClickHouse/ClickHouse/pull/78590) ([Raúl Marín](https://github.com/Algunenano))。 +* Rust においてターゲットとする CPU 機能を考慮し、すべてのクレートで LTO を有効化しました。 [#78590](https://github.com/ClickHouse/ClickHouse/pull/78590) ([Raúl Marín](https://github.com/Algunenano)). -### ClickHouse リリース 25.3 LTS, 2025-03-20 {#253} +### ClickHouse 25.3 LTS リリース、2025-03-20 {#253} #### 後方互換性のない変更 -* レプリケーテッドデータベースでの `TRUNCATE` を禁止。[#76651](https://github.com/ClickHouse/ClickHouse/pull/76651) ([Bharat Nallan](https://github.com/bharatnc)). -* インデックスキャッシュをスキップする変更を元に戻した。[#77447](https://github.com/ClickHouse/ClickHouse/pull/77447) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). - +* レプリケーテッドデータベースの切り捨てを禁止しました。 [#76651](https://github.com/ClickHouse/ClickHouse/pull/76651) ([Bharat Nallan](https://github.com/bharatnc)). +* スキップインデックスキャッシュに関する変更を元に戻しました。 [#77447](https://github.com/ClickHouse/ClickHouse/pull/77447) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). #### 新機能 -* `JSON` データ型は本番利用に対応しています。詳しくは [https://jsonbench.com/](https://jsonbench.com/) を参照してください。`Dynamic` と `Variant` データ型も本番利用に対応しています。[#77785](https://github.com/ClickHouse/ClickHouse/pull/77785)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* clickhouse-server で SSH プロトコルをサポートしました。これにより、任意の SSH クライアントを使用して ClickHouse に接続できるようになりました。これにより次の issue がクローズされます: [#74340](https://github.com/ClickHouse/ClickHouse/issues/74340)。[#74989](https://github.com/ClickHouse/ClickHouse/pull/74989)([George Gamezardashvili](https://github.com/Infjoker))。 -* parallel replicas が有効な場合、テーブル関数を対応する -Cluster 版に置き換えるようにしました。 [#65024](https://github.com/ClickHouse/ClickHouse/issues/65024) を修正しました。 [#70659](https://github.com/ClickHouse/ClickHouse/pull/70659)([Konstantin Bogdanov](https://github.com/thevar1able))。 -* Userspace Page Cache の新しい実装。これにより、OS のページキャッシュに依存せず、インプロセスのメモリ内にデータをキャッシュできるようになります。これは、データがローカルファイルシステムキャッシュを伴わないリモート仮想ファイルシステム上に保存されている場合に有用です。 [#70509](https://github.com/ClickHouse/ClickHouse/pull/70509) ([Michael Kolupaev](https://github.com/al13n321)). -* 並行実行されるクエリ間で CPU スロットの分配方法を制御するサーバー設定 `concurrent_threads_scheduler` を追加しました。`round_robin`(従来の動作)または `fair_round_robin` を設定でき、INSERT と SELECT 間の不公平な CPU 資源配分の問題に対処します。[#75949](https://github.com/ClickHouse/ClickHouse/pull/75949) ([Sergei Trifonov](https://github.com/serxa))。 -* `estimateCompressionRatio` 集約関数を追加しました [#70801](https://github.com/ClickHouse/ClickHouse/issues/70801)。 [#76661](https://github.com/ClickHouse/ClickHouse/pull/76661)([Tariq Almawash](https://github.com/talmawash))。 -* 関数 `arraySymmetricDifference` を追加しました。これは、複数の配列引数のうち、すべての引数に共通して含まれない要素をすべて返します。例: `SELECT arraySymmetricDifference([1, 2], [2, 3])` は `[1, 3]` を返します。(issue [#61673](https://github.com/ClickHouse/ClickHouse/issues/61673))。[#76231](https://github.com/ClickHouse/ClickHouse/pull/76231)([Filipp Abapolov](https://github.com/pheepa))。 -* ストレージ/テーブル関数の設定 `iceberg_metadata_file_path` を使用して、Iceberg が読み込むメタデータファイルを明示的に指定できるようにしました。[#47412](https://github.com/ClickHouse/ClickHouse/issues/47412) を修正しました。[#77318](https://github.com/ClickHouse/ClickHouse/pull/77318)([alesapin](https://github.com/alesapin))。 -* ブロックチェーン実装、とくに EVM ベースのシステムで一般的に使用されている `keccak256` ハッシュ関数を追加しました。 [#76669](https://github.com/ClickHouse/ClickHouse/pull/76669) ([Arnaud Briche](https://github.com/arnaudbriche))。 -* 3つの新しい関数を追加しました。仕様に従った `icebergTruncate`([https://iceberg.apache.org/spec/#truncate-transform-details](https://iceberg.apache.org/spec/#truncate-transform-details) を参照)、`toYearNumSinceEpoch` および `toMonthNumSinceEpoch` です。`Iceberg` エンジンでのパーティションプルーニングにおいて `truncate` トランスフォームをサポートしました。[#77403](https://github.com/ClickHouse/ClickHouse/pull/77403)([alesapin](https://github.com/alesapin))。 +* `JSON` データ型は本番利用可能です。 [https://jsonbench.com/](https://jsonbench.com/) を参照してください。`Dynamic` および `Variant` データ型も本番利用可能です。 [#77785](https://github.com/ClickHouse/ClickHouse/pull/77785)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* clickhouse-server 向けに SSH プロトコルのサポートを導入しました。これにより、任意の SSH クライアントを使用して ClickHouse に接続できるようになりました。これにより次の課題がクローズされます: [#74340](https://github.com/ClickHouse/ClickHouse/issues/74340)。[#74989](https://github.com/ClickHouse/ClickHouse/pull/74989)([George Gamezardashvili](https://github.com/Infjoker))。 +* 並列レプリカが有効な場合、テーブル関数を対応する -Cluster 版に置き換えました。これにより [#65024](https://github.com/ClickHouse/ClickHouse/issues/65024) が修正されます。[#70659](https://github.com/ClickHouse/ClickHouse/pull/70659)([Konstantin Bogdanov](https://github.com/thevar1able))。 +* Userspace Page Cache の新しい実装。OS のページキャッシュに依存する代わりにプロセス内メモリにデータをキャッシュできるようにするもので、データがローカルファイルシステムキャッシュを利用できないリモートの仮想ファイルシステム上に保存されている場合に有用です。 [#70509](https://github.com/ClickHouse/ClickHouse/pull/70509) ([Michael Kolupaev](https://github.com/al13n321)). +* 同時実行クエリ間での CPU スロットの割り当て方法を制御するサーバー設定 `concurrent_threads_scheduler` を追加しました。`round_robin`(これまでの動作)または `fair_round_robin` を指定でき、INSERT と SELECT 間の CPU 割り当ての不公平さの問題に対処します。 [#75949](https://github.com/ClickHouse/ClickHouse/pull/75949) ([Sergei Trifonov](https://github.com/serxa))。 +* `estimateCompressionRatio` 集約関数を追加しました [#70801](https://github.com/ClickHouse/ClickHouse/issues/70801)。 [#76661](https://github.com/ClickHouse/ClickHouse/pull/76661) ([Tariq Almawash](https://github.com/talmawash))。 +* 関数 `arraySymmetricDifference` を追加しました。複数の配列引数のうち、すべての引数に共通して含まれていない要素をすべて返します。例: `SELECT arraySymmetricDifference([1, 2], [2, 3])` は `[1, 3]` を返します。(issue [#61673](https://github.com/ClickHouse/ClickHouse/issues/61673))。[#76231](https://github.com/ClickHouse/ClickHouse/pull/76231)([Filipp Abapolov](https://github.com/pheepa))。 +* Iceberg ストレージ/テーブル関数の設定 `iceberg_metadata_file_path` を使用して、読み取るメタデータファイルを明示的に指定できるようにしました。 [#47412](https://github.com/ClickHouse/ClickHouse/issues/47412) を修正しました。 [#77318](https://github.com/ClickHouse/ClickHouse/pull/77318) ([alesapin](https://github.com/alesapin))。 +* ブロックチェーン実装、特に EVM ベースのシステムで一般的に使用される `keccak256` ハッシュ関数を追加しました。 [#76669](https://github.com/ClickHouse/ClickHouse/pull/76669) ([Arnaud Briche](https://github.com/arnaudbriche))。 +* 3 つの新しい関数を追加しました。仕様に準拠した `icebergTruncate`([https://iceberg.apache.org/spec/#truncate-transform-details](https://iceberg.apache.org/spec/#truncate-transform-details) を参照)、`toYearNumSinceEpoch` および `toMonthNumSinceEpoch` です。`Iceberg` エンジンにおけるパーティションプルーニングで `truncate` 変換をサポートしました。[#77403](https://github.com/ClickHouse/ClickHouse/pull/77403)([alesapin](https://github.com/alesapin))。 * `LowCardinality(Decimal)` データ型をサポートしました [#72256](https://github.com/ClickHouse/ClickHouse/issues/72256)。 [#72833](https://github.com/ClickHouse/ClickHouse/pull/72833)([zhanglistar](https://github.com/zhanglistar))。 -* `FilterTransformPassedRows` と `FilterTransformPassedBytes` のプロファイルイベントでは、クエリ実行中にフィルタリングされた行数およびバイト数が表示されます。 [#76662](https://github.com/ClickHouse/ClickHouse/pull/76662) ([Onkar Deshpande](https://github.com/onkar))。 -* ヒストグラム型メトリクスのサポート。インターフェースは Prometheus クライアントとほぼ同じで、値に対応するバケットのカウンターを増やすには、単に `observe(value)` を呼び出すだけです。ヒストグラムメトリクスは `system.histogram_metrics` を通じて公開されます。[#75736](https://github.com/ClickHouse/ClickHouse/pull/75736)([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 -* 明示的な値で切り替える非定数 CASE をサポート。 [#77399](https://github.com/ClickHouse/ClickHouse/pull/77399) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). - - +* `FilterTransformPassedRows` と `FilterTransformPassedBytes` のプロファイルイベントは、クエリ実行中にフィルタリングされた行数とバイト数を示します。 [#76662](https://github.com/ClickHouse/ClickHouse/pull/76662) ([Onkar Deshpande](https://github.com/onkar))。 +* ヒストグラム型メトリクスのサポート。インターフェイスは Prometheus クライアントのものをほぼ踏襲しており、値に対応するバケットのカウンターをインクリメントするには、単に `observe(value)` を呼び出すだけです。ヒストグラムメトリクスは `system.histogram_metrics` を通じて公開されます。 [#75736](https://github.com/ClickHouse/ClickHouse/pull/75736) ([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 +* 明示的な値に基づいて分岐できる非定数 `CASE` のサポート。 [#77399](https://github.com/ClickHouse/ClickHouse/pull/77399) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). #### 実験的機能 -* AWS S3 およびローカルファイルシステム上の Delta Lake テーブルに対する [Unity Catalog のサポートを追加](https://www.databricks.com/product/unity-catalog) しました。[#76988](https://github.com/ClickHouse/ClickHouse/pull/76988) ([alesapin](https://github.com/alesapin))。 -* Iceberg テーブル向けに、AWS Glue サービスカタログとの実験的な統合を導入しました。[#77257](https://github.com/ClickHouse/ClickHouse/pull/77257) ([alesapin](https://github.com/alesapin))。 -* 動的なクラスタの自動検出をサポートしました。これは既存の _node_ の自動検出機能を拡張するものです。ClickHouse は、`` を使用して共通の ZooKeeper パス配下に新しい _clusters_ を自動的に検出および登録できるようになりました。[#76001](https://github.com/ClickHouse/ClickHouse/pull/76001) ([Anton Ivashkin](https://github.com/ianton-ru))。 -* 新しい設定 `enable_replacing_merge_with_cleanup_for_min_age_to_force_merge` により、設定可能なタイムアウト後にパーティション全体の自動クリーンアップマージが可能になりました。[#76440](https://github.com/ClickHouse/ClickHouse/pull/76440) ([Christoph Wurm](https://github.com/cwurm))。 - +* AWS S3 およびローカルファイルシステム上の Delta Lake テーブルに対して [Unity Catalog のサポートを追加](https://www.databricks.com/product/unity-catalog) しました。[#76988](https://github.com/ClickHouse/ClickHouse/pull/76988)([alesapin](https://github.com/alesapin))。 +* Iceberg テーブル向けに AWS Glue サービスカタログとの実験的な連携を導入しました。[#77257](https://github.com/ClickHouse/ClickHouse/pull/77257)([alesapin](https://github.com/alesapin))。 +* 動的クラスタ自動検出のサポートを追加しました。これは既存の _node_ 自動検出機能を拡張するものです。ClickHouse は、`` を利用して共通の ZooKeeper パス配下に新しい _clusters_ を自動的に検出および登録できるようになりました。[#76001](https://github.com/ClickHouse/ClickHouse/pull/76001)([Anton Ivashkin](https://github.com/ianton-ru))。 +* 新しい設定 `enable_replacing_merge_with_cleanup_for_min_age_to_force_merge` により、設定可能なタイムアウト後にパーティション全体を自動的にクリーンアップマージできるようになりました。[#76440](https://github.com/ClickHouse/ClickHouse/pull/76440)([Christoph Wurm](https://github.com/cwurm))。 #### パフォーマンスの改善 -* 繰り返し利用される条件に対してクエリ条件キャッシュを実装し、クエリパフォーマンスを改善しました。条件を満たさないデータ部分の範囲をメモリ上の一時インデックスとして保持し、後続のクエリではこのインデックスを利用します。[#67768](https://github.com/ClickHouse/ClickHouse/issues/67768) [#69236](https://github.com/ClickHouse/ClickHouse/pull/69236) をクローズしました([zhongyuankai](https://github.com/zhongyuankai))。 -* パーツ削除時にキャッシュからデータを積極的に削除するようにしました。データ量がそれより少ない場合に、キャッシュが最大サイズまで肥大化しないようにします。[#76641](https://github.com/ClickHouse/ClickHouse/pull/76641)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 算術計算において Int256 と UInt256 を clang 組み込みの i256 に置き換え、パフォーマンスを向上させました [#70502](https://github.com/ClickHouse/ClickHouse/issues/70502)。[#73658](https://github.com/ClickHouse/ClickHouse/pull/73658)([李扬](https://github.com/taiyang-li))。 -* 一部のケース(例: 空の配列カラム)では、データパーツに空ファイルが含まれることがあります。メタデータとオブジェクトストレージが分離されたディスク上にテーブルがある場合、そのようなファイルについては空の BLOB の書き込みをスキップし、メタデータのみを保存できるようにしました。[#75860](https://github.com/ClickHouse/ClickHouse/pull/75860)([Alexander Gololobov](https://github.com/davenger))。 + +* 繰り返し利用される条件に対してクエリ条件キャッシュを実装し、クエリのパフォーマンスを向上しました。条件を満たさないデータ部分の範囲をメモリ内の一時インデックスとして記憶し、後続のクエリでこのインデックスを利用します。[#67768](https://github.com/ClickHouse/ClickHouse/issues/67768) [#69236](https://github.com/ClickHouse/ClickHouse/pull/69236)([zhongyuankai](https://github.com/zhongyuankai))。 +* パーツ削除時にキャッシュからデータを積極的に追い出すようにしました。データ量がそれより少ない場合に、キャッシュが最大サイズまで成長しないようにします。[#76641](https://github.com/ClickHouse/ClickHouse/pull/76641)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 算術計算において Int256 および UInt256 を clang 組み込みの i256 に置き換え、パフォーマンスを改善しました [#70502](https://github.com/ClickHouse/ClickHouse/issues/70502)。[#73658](https://github.com/ClickHouse/ClickHouse/pull/73658)([李扬](https://github.com/taiyang-li))。 +* 一部のケース(例: 空の配列カラム)では、データパーツに空ファイルが含まれることがあります。テーブルがメタデータとオブジェクトストレージが分離されたディスク上に存在する場合、そのようなファイルについては空の BLOB の書き込みをスキップし、メタデータのみを保存できるようにしました。[#75860](https://github.com/ClickHouse/ClickHouse/pull/75860)([Alexander Gololobov](https://github.com/davenger))。 * Decimal32/Decimal64/DateTime64 に対する min/max のパフォーマンスを改善しました。[#76570](https://github.com/ClickHouse/ClickHouse/pull/76570)([李扬](https://github.com/taiyang-li))。 -* クエリコンパイル(`compile_expressions` 設定)がマシンタイプを考慮するようになりました。これにより該当クエリが大幅に高速化されます。[#76753](https://github.com/ClickHouse/ClickHouse/pull/76753)([ZhangLiStar](https://github.com/zhanglistar))。 +* クエリコンパイル(`compile_expressions` 設定)がマシンタイプを考慮するようになりました。これにより、そのようなクエリが大幅に高速化されます。[#76753](https://github.com/ClickHouse/ClickHouse/pull/76753)([ZhangLiStar](https://github.com/zhanglistar))。 * `arraySort` を最適化しました。[#76850](https://github.com/ClickHouse/ClickHouse/pull/76850)([李扬](https://github.com/taiyang-li))。 -* マージなど、キャッシュが受動的に利用される場合には `filesystem_cache_prefer_bigger_buffer_size` を無効にしました。[#77898](https://github.com/ClickHouse/ClickHouse/pull/77898)([Kseniia Sumarokova](https://github.com/kssenii))。 -* 一部のコード箇所で `preserve_most` 属性を適用し、わずかに良いコード生成を可能にしました。[#67778](https://github.com/ClickHouse/ClickHouse/pull/67778)([Nikita Taranov](https://github.com/nickitat))。 -* ClickHouse サーバーのシャットダウンを高速化しました(2.5 秒の遅延を解消)。[#76550](https://github.com/ClickHouse/ClickHouse/pull/76550)([Azat Khuzhin](https://github.com/azat))。 -* ReadBufferFromS3 およびその他のリモート読み取りバッファで不要なメモリアロケーションを回避し、メモリ消費を半減させました。[#76692](https://github.com/ClickHouse/ClickHouse/pull/76692)([Sema Checherinda](https://github.com/CheSema))。 -* zstd を 1.5.5 から 1.5.7 に更新しました。これにより、いくつかの[パフォーマンス改善](https://github.com/facebook/zstd/releases/tag/v1.5.7)が見込まれます。[#77137](https://github.com/ClickHouse/ClickHouse/pull/77137)([Pradeep Chhetri](https://github.com/chhetripradeep))。 -* Wide パーツの JSON カラムのプリフェッチ中のメモリ使用量を削減しました。これは、ClickHouse Cloud のような共有ストレージ上で ClickHouse を利用する場合に特に有効です。[#77640](https://github.com/ClickHouse/ClickHouse/pull/77640)([Pavel Kruglov](https://github.com/Avogar))。 - - +* マージなどでキャッシュが受動的に使用される場合は、`filesystem_cache_prefer_bigger_buffer_size` を無効化しました。[#77898](https://github.com/ClickHouse/ClickHouse/pull/77898)([Kseniia Sumarokova](https://github.com/kssenii))。 +* コードの一部に `preserve_most` 属性を適用し、わずかにより良いコード生成を可能にしました。[#67778](https://github.com/ClickHouse/ClickHouse/pull/67778)([Nikita Taranov](https://github.com/nickitat))。 +* ClickHouse サーバーのシャットダウンを高速化しました(2.5 秒の遅延を排除)。[#76550](https://github.com/ClickHouse/ClickHouse/pull/76550)([Azat Khuzhin](https://github.com/azat))。 +* ReadBufferFromS3 およびその他のリモート読み取りバッファで過剰なメモリアロケーションを回避し、メモリ消費を半分に削減しました。[#76692](https://github.com/ClickHouse/ClickHouse/pull/76692)([Sema Checherinda](https://github.com/CheSema))。 +* zstd を 1.5.5 から 1.5.7 に更新しました。これにより、いくつかの[パフォーマンス向上](https://github.com/facebook/zstd/releases/tag/v1.5.7)が見込めます。[#77137](https://github.com/ClickHouse/ClickHouse/pull/77137)([Pradeep Chhetri](https://github.com/chhetripradeep))。 +* Wide パーツにおける JSON カラムのプリフェッチ時のメモリ使用量を削減しました。これは、ClickHouse Cloud のように共有ストレージ上で ClickHouse を使用する場合に有効です。[#77640](https://github.com/ClickHouse/ClickHouse/pull/77640)([Pavel Kruglov](https://github.com/Avogar))。 #### 改善 -* `TRUNCATE` と `INTO OUTFILE` の併用時にアトミックなリネームをサポートします。[#70323](https://github.com/ClickHouse/ClickHouse/issues/70323) を解決します。[#77181](https://github.com/ClickHouse/ClickHouse/pull/77181)([Onkar Deshpande](https://github.com/onkar))。 -* 設定値としての浮動小数点数に `NaN` や `inf` を使用することは、もはやできません。もっとも、そもそも以前からそれには何の意味もありませんでしたが。 [#77546](https://github.com/ClickHouse/ClickHouse/pull/77546) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* `compatibility` 設定に関係なく、analyzer が無効化されている場合はデフォルトで parallel replicas を無効化するようにしました。この挙動は、`parallel_replicas_only_with_analyzer` を `false` に明示的に設定することで引き続き変更可能です。 [#77115](https://github.com/ClickHouse/ClickHouse/pull/77115) ([Igor Nikonov](https://github.com/devcrafter))。 -* クライアントリクエストのヘッダーから外部 HTTP 認証サービスへ転送するヘッダーのリストを指定できるようになりました。 [#77054](https://github.com/ClickHouse/ClickHouse/pull/77054) ([inv2004](https://github.com/inv2004)). -* タプルカラム内のフィールドに対して、大文字小文字を区別しないカラム名のマッチングが正しく適用されるようにしました。 [https://github.com/apache/incubator-gluten/issues/8324](https://github.com/apache/incubator-gluten/issues/8324) をクローズしました。 [#73780](https://github.com/ClickHouse/ClickHouse/pull/73780) ([李扬](https://github.com/taiyang-li)). -* Gorilla コーデックのパラメータは、今後常に .sql ファイル内のテーブルメタデータとして保存されるようになりました。これにより次の issue が解決されました: [#70072](https://github.com/ClickHouse/ClickHouse/issues/70072)。[#74814](https://github.com/ClickHouse/ClickHouse/pull/74814)([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 -* 一部のデータレイク向けにパース機能を強化しました(シーケンス ID のパース:マニフェストファイル内のシーケンス識別子をパースする機能を追加、Avro メタデータのパース:将来の拡張が容易になるよう Avro メタデータパーサーを再設計)。 [#75010](https://github.com/ClickHouse/ClickHouse/pull/75010) ([Daniil Ivanik](https://github.com/divanik)). -* `system.opentelemetry_span_log` のデフォルト ORDER BY 句から trace_id を削除。 [#75907](https://github.com/ClickHouse/ClickHouse/pull/75907) ([Azat Khuzhin](https://github.com/azat)). -* 暗号化(`encrypted_by` 属性)は、任意の設定ファイル(config.xml、users.xml、ネストされた設定ファイル)に適用できるようになりました。以前は、トップレベルの config.xml ファイルにしか適用できませんでした。 [#75911](https://github.com/ClickHouse/ClickHouse/pull/75911) ([Mikhail Gorshkov](https://github.com/mgorshkov))。 -* `system.warnings` テーブルを改善し、動的に追加・更新・削除できる警告メッセージを導入しました。 [#76029](https://github.com/ClickHouse/ClickHouse/pull/76029) ([Bharat Nallan](https://github.com/bharatnc)). -* このPRにより、すべての `DROP` 操作を先に記述する必要があるため、クエリ `ALTER USER user1 ADD PROFILES a, DROP ALL PROFILES` は実行できなくなりました。 [#76242](https://github.com/ClickHouse/ClickHouse/pull/76242) ([pufit](https://github.com/pufit))。 -* SYNC REPLICA 向けの各種強化(エラーメッセージの改善、テストの強化、サニティチェックの追加)。 [#76307](https://github.com/ClickHouse/ClickHouse/pull/76307) ([Azat Khuzhin](https://github.com/azat)). -* バックアップ時に `Access Denied` が発生して S3 へのマルチパートコピーが失敗した場合に、正しいフォールバック処理が行われるようにしました。バケット間でバックアップを行う際、異なる認証情報を使用していると、マルチパートコピーで `Access Denied` エラーが発生することがあります。 [#76515](https://github.com/ClickHouse/ClickHouse/pull/76515) ([Antonio Andelic](https://github.com/antonio2368)). -* librdkafka(出来の悪い代物)をバージョン 2.8.0(とはいえ代物であることに変わりはない)にアップグレードし、Kafka テーブルのシャットダウンシーケンスを改善して、テーブル削除やサーバー再起動時の遅延を削減しました。`engine=Kafka` は、テーブルが削除されてももはや明示的にコンシューマグループを離脱しなくなりました。代わりに、コンシューマは非アクティブ状態が `session_timeout_ms`(デフォルト: 45 秒)を超えるまでグループに残り、その後自動的に削除されます。[#76621](https://github.com/ClickHouse/ClickHouse/pull/76621)([filimonov](https://github.com/filimonov))。 -* S3 リクエスト設定の検証処理を修正。 [#76658](https://github.com/ClickHouse/ClickHouse/pull/76658) ([Vitaly Baranov](https://github.com/vitlibar))。 -* `server_settings` や `settings` のようなシステムテーブルには、便利な `default` 値カラムがあります。同様のカラムを `merge_tree_settings` および `replicated_merge_tree_settings` に追加しました。 [#76942](https://github.com/ClickHouse/ClickHouse/pull/76942) ([Diego Nieto](https://github.com/lesandie)). -* `CurrentMetrics::QueryPreempted` と同様のロジックを持つ `ProfileEvents::QueryPreempted` を追加しました。 [#77015](https://github.com/ClickHouse/ClickHouse/pull/77015) ([VicoWu](https://github.com/VicoWu)). -* 以前は、Replicated データベースでクエリ内に指定された認証情報がログに出力されてしまうことがありました。この問題を修正しました。これにより、次の課題がクローズされました: [#77123](https://github.com/ClickHouse/ClickHouse/issues/77123)。[#77133](https://github.com/ClickHouse/ClickHouse/pull/77133)([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 -* `plain_rewritable` ディスクに対して ALTER TABLE DROP PARTITION を許可しました。 [#77138](https://github.com/ClickHouse/ClickHouse/pull/77138) ([Julia Kartseva](https://github.com/jkartseva)). -* バックアップ/リストア設定 `allow_s3_native_copy` は、現在次の3つの値をサポートします: - `False` - S3 ネイティブコピーは使用されません。 - `True`(旧デフォルト)- ClickHouse はまず S3 ネイティブコピーを試し、失敗した場合は読み取り+書き込み方式にフォールバックします。 - `'auto'`(新デフォルト)- ClickHouse はまずソースと宛先のクレデンシャルを比較します。同一であれば、ClickHouse は S3 ネイティブコピーを試し、その後必要に応じて読み取り+書き込み方式にフォールバックすることがあります。異なる場合、ClickHouse は最初から読み取り+書き込み方式を使用します。 [#77401](https://github.com/ClickHouse/ClickHouse/pull/77401) ([Vitaly Baranov](https://github.com/vitlibar))。 -* DeltaLake テーブルエンジン向けの Delta Kernel で、AWS セッショントークンおよび環境変数による認証情報の利用をサポートしました。 [#77661](https://github.com/ClickHouse/ClickHouse/pull/77661) ([Kseniia Sumarokova](https://github.com/kssenii)). - - - - - -#### バグ修正(公式安定版リリースにおけるユーザー可視の不具合) - -* 非同期分散 INSERT の保留バッチ処理中に(例:`No such file or directory` に起因して)処理が行き詰まる問題を修正。 [#72939](https://github.com/ClickHouse/ClickHouse/pull/72939) ([Azat Khuzhin](https://github.com/azat)). -* インデックス解析時の日時変換を、暗黙的な `Date` から `DateTime` への変換に対して飽和動作を強制することで改善しました。これにより、日時の範囲制限に起因して発生し得たインデックス解析結果の不正確さが解消されます。この変更により [#73307](https://github.com/ClickHouse/ClickHouse/issues/73307) が修正されています。また、デフォルト値である `date_time_overflow_behavior = 'ignore'` が設定されている場合の明示的な `toDateTime` 変換も修正しました。[#73326](https://github.com/ClickHouse/ClickHouse/pull/73326)([Amos Bird](https://github.com/amosbird))。 -* UUID とテーブル名の間のレースコンディションに起因するあらゆる種類のバグを修正しました(たとえば、`RENAME` と `RESTART REPLICA` の間のレースコンディションが修正されます。`SYSTEM RESTART REPLICA` と同時に `RENAME` が実行された場合、誤ったレプリカを再起動してしまったり、テーブルの一つが `Table X is being restarted` 状態のまま残ってしまうことがあります)。[#76308](https://github.com/ClickHouse/ClickHouse/pull/76308)([Azat Khuzhin](https://github.com/azat))。 -* async insert を有効にし、かつファイルからの `insert into ... from file ...` でブロックサイズが不揃いな場合に発生していたデータ損失を修正しました。最初のブロックサイズが async_max_size より小さく、2 番目のブロックサイズが async_max_size より大きい場合、2 番目のブロックが挿入されず、これらのデータが `squashing` に残ったままになっていました。 [#76343](https://github.com/ClickHouse/ClickHouse/pull/76343) ([Han Fei](https://github.com/hanfei1991)). -* `system.data_skipping_indices` 内のフィールド 'marks' を 'marks_bytes' に名前変更しました。 [#76374](https://github.com/ClickHouse/ClickHouse/pull/76374) ([Robert Schulze](https://github.com/rschu1ze)). -* 削除処理中に予期しないエラーが発生した場合にも正しく処理できるよう、動的ファイルシステムキャッシュのリサイズ処理を修正。 [#76466](https://github.com/ClickHouse/ClickHouse/pull/76466) ([Kseniia Sumarokova](https://github.com/kssenii)). -* 並列ハッシュにおける `used_flag` の初期化を修正しました。サーバークラッシュを引き起こす可能性がありました。[#76580](https://github.com/ClickHouse/ClickHouse/pull/76580)([Nikita Taranov](https://github.com/nickitat))。 -* プロジェクション内で `defaultProfiles` 関数を呼び出した際に発生する論理エラーを修正しました。 [#76627](https://github.com/ClickHouse/ClickHouse/pull/76627) ([pufit](https://github.com/pufit)). -* Web UI においてブラウザのインタラクティブな Basic 認証ダイアログを表示しないようにしました。[#76319](https://github.com/ClickHouse/ClickHouse/issues/76319) をクローズします。[#76637](https://github.com/ClickHouse/ClickHouse/pull/76637)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 分散テーブルに対して boolean リテラルを SELECT した際に発生する THERE_IS_NO_COLUMN 例外を修正。 [#76656](https://github.com/ClickHouse/ClickHouse/pull/76656) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* テーブルディレクトリ内のサブパスの選択方法が、より高度なものになりました。 [#76681](https://github.com/ClickHouse/ClickHouse/pull/76681) ([Daniil Ivanik](https://github.com/divanik))。 -* サブカラムを含む主キー (PK) を持つテーブルを `ALTER` した後に発生していた `Not found column in block` エラーを修正しました。[https://github.com/ClickHouse/ClickHouse/pull/72644](https://github.com/ClickHouse/ClickHouse/pull/72644) の後、この修正には [https://github.com/ClickHouse/ClickHouse/pull/74403](https://github.com/ClickHouse/ClickHouse/pull/74403) が必要です。[#76686](https://github.com/ClickHouse/ClickHouse/pull/76686)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 -* null shortcircuit のパフォーマンステストを追加し、バグを修正しました。[#76708](https://github.com/ClickHouse/ClickHouse/pull/76708) ([李扬](https://github.com/taiyang-li))。 -* 最終化する前に出力書き込みバッファをフラッシュするようにしました。一部の出力フォーマット(例:`JSONEachRowWithProgressRowOutputFormat`)を最終化する際に発生していた `LOGICAL_ERROR` を修正しました。 [#76726](https://github.com/ClickHouse/ClickHouse/pull/76726) ([Antonio Andelic](https://github.com/antonio2368))。 -* MongoDB のバイナリ UUID のサポートを追加 ([#74452](https://github.com/ClickHouse/ClickHouse/issues/74452)) - テーブル関数を使用する際の MongoDB への WHERE 句プッシュダウンを修正 ([#72210](https://github.com/ClickHouse/ClickHouse/issues/72210)) - MongoDB のバイナリ UUID が ClickHouse の UUID にのみパースされるように、MongoDB - ClickHouse 間の型マッピングを変更しました。これにより、将来のあいまいさや予期しない挙動を回避できます。- 後方互換性を維持したまま OID マッピングを修正しました。[#76762](https://github.com/ClickHouse/ClickHouse/pull/76762) ([Kirill Nikiforov](https://github.com/allmazz))。 -* JSON サブカラムの parallel prefix デシリアライズにおける例外処理を修正。 [#76809](https://github.com/ClickHouse/ClickHouse/pull/76809) ([Pavel Kruglov](https://github.com/Avogar)). -* 負の整数に対する lgamma 関数の動作を修正。 [#76840](https://github.com/ClickHouse/ClickHouse/pull/76840) ([Ilya Kataev](https://github.com/IlyaKataev))。 -* 明示的に定義された主キーに対する reverse key 解析を修正。 [#76654](https://github.com/ClickHouse/ClickHouse/issues/76654) と同様。 [#76846](https://github.com/ClickHouse/ClickHouse/pull/76846)([Amos Bird](https://github.com/amosbird))。 -* JSON フォーマットでの Bool 値の整形表示を修正。[#76905](https://github.com/ClickHouse/ClickHouse/pull/76905)([Pavel Kruglov](https://github.com/Avogar))。 -* 非同期挿入中にエラーが発生した際の誤った JSON カラムのロールバック処理によりクラッシュが起こり得る問題を修正。 [#76908](https://github.com/ClickHouse/ClickHouse/pull/76908) ([Pavel Kruglov](https://github.com/Avogar)). -* 以前は、`multiIf` がプランニング段階とメイン実行時で異なる型のカラムを返す場合がありました。これにより、C++ の観点では未定義動作を引き起こすコードが生成されていました。[#76914](https://github.com/ClickHouse/ClickHouse/pull/76914)([Nikita Taranov](https://github.com/nickitat))。 -* MergeTree における Nullable な定数キーの誤ったシリアル化を修正しました。これにより [#76939](https://github.com/ClickHouse/ClickHouse/issues/76939) が解決されます。[#76985](https://github.com/ClickHouse/ClickHouse/pull/76985)([Amos Bird](https://github.com/amosbird))。 -* `BFloat16` 値のソート処理を修正しました。これにより [#75487](https://github.com/ClickHouse/ClickHouse/issues/75487) および [#75669](https://github.com/ClickHouse/ClickHouse/issues/75669) がクローズされました。[#77000](https://github.com/ClickHouse/ClickHouse/pull/77000)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* パーツ整合性チェックで一時的なサブカラムをスキップするチェックを追加することで、Variant サブカラムを含む JSON のバグを修正しました。 [#72187](https://github.com/ClickHouse/ClickHouse/issues/72187)。 [#77034](https://github.com/ClickHouse/ClickHouse/pull/77034) ([Smita Kulkarni](https://github.com/SmitaRKulkarni))。 -* 型の不一致が発生した場合に Values フォーマットのテンプレート解析がクラッシュする不具合を修正しました。 [#77071](https://github.com/ClickHouse/ClickHouse/pull/77071) ([Pavel Kruglov](https://github.com/Avogar)). -* 主キーにサブカラムを含む EmbeddedRocksDB テーブルを作成できないようにしました。以前はそのようなテーブルを作成できましたが、SELECT クエリが失敗していました。 [#77074](https://github.com/ClickHouse/ClickHouse/pull/77074) ([Pavel Kruglov](https://github.com/Avogar))。 -* 述語をリモートにプッシュダウンする際にリテラル型が考慮されないため、分散クエリで不正な比較が発生する問題を修正します。 [#77093](https://github.com/ClickHouse/ClickHouse/pull/77093) ([Duc Canh Le](https://github.com/canhld94)). -* Kafka テーブル作成時に発生する例外によるクラッシュを修正。 [#77121](https://github.com/ClickHouse/ClickHouse/pull/77121) ([Pavel Kruglov](https://github.com/Avogar)). -* Kafka および RabbitMQ エンジンで JSON とサブカラムをサポートしました。 [#77122](https://github.com/ClickHouse/ClickHouse/pull/77122) ([Pavel Kruglov](https://github.com/Avogar)). -* MacOS における例外スタックのアンワインド処理を修正。 [#77126](https://github.com/ClickHouse/ClickHouse/pull/77126) ([Eduard Karacharov](https://github.com/korowa)). -* getSubcolumn 関数における `null` サブカラムの読み取りを修正。 [#77163](https://github.com/ClickHouse/ClickHouse/pull/77163) ([Pavel Kruglov](https://github.com/Avogar))。 -* Array 列および未対応関数での Bloom filter インデックスを修正。 [#77271](https://github.com/ClickHouse/ClickHouse/pull/77271) ([Pavel Kruglov](https://github.com/Avogar)). -* テーブル数に対する制限のチェックは、最初の CREATE クエリ実行時にのみ行うべきです。 [#77274](https://github.com/ClickHouse/ClickHouse/pull/77274) ([Nikolay Degterinsky](https://github.com/evillique)). -* バグではありません: `SELECT toBFloat16(-0.0) == toBFloat16(0.0)` は、以前は `false` を返していましたが、現在は正しく `true` を返します。これにより、`Float32` および `Float64` の動作と一貫したものになりました。 [#77290](https://github.com/ClickHouse/ClickHouse/pull/77290) ([Shankar Iyer](https://github.com/shankar-iyer)). -* デバッグビルドでクラッシュを引き起こす可能性のある、未初期化の key_index 変数への誤った参照を修正します(この未初期化参照自体は、後続のコードがおそらく例外をスローするため、リリースビルドでは問題になりません)。 ### ユーザー向け変更に関するドキュメント項目。 [#77305](https://github.com/ClickHouse/ClickHouse/pull/77305) ([wxybear](https://github.com/wxybear)). -* Bool 値を持つパーティション名の不具合を修正しました。この問題は [https://github.com/ClickHouse/ClickHouse/pull/74533](https://github.com/ClickHouse/ClickHouse/pull/74533) によって発生していました。 [#77319](https://github.com/ClickHouse/ClickHouse/pull/77319)([Pavel Kruglov](https://github.com/Avogar))。 -* Nullable 要素を含むタプルと文字列との比較を修正しました。たとえば、この変更以前は、タプル `(1, null)` と文字列 `'(1,null)'` の比較はエラーになっていました。別の例としては、タプル `(1, a)`(ここで `a` は Nullable カラム)と文字列 `'(1, 2)'` の比較があります。この変更により、これらの問題が修正されています。 [#77323](https://github.com/ClickHouse/ClickHouse/pull/77323) ([Alexey Katsman](https://github.com/alexkats)). -* ObjectStorageQueueSource のクラッシュを修正。[https://github.com/ClickHouse/ClickHouse/pull/76358](https://github.com/ClickHouse/ClickHouse/pull/76358) で導入された不具合によるもの。 [#77325](https://github.com/ClickHouse/ClickHouse/pull/77325)([Pavel Kruglov](https://github.com/Avogar))。 -* `input` 使用時の `async_insert` の問題を修正。 [#77340](https://github.com/ClickHouse/ClickHouse/pull/77340) ([Azat Khuzhin](https://github.com/azat)). -* 修正: ソート列がプランナによって削除された場合に、`WITH FILL` が NOT_FOUND_COLUMN_IN_BLOCK で失敗する可能性がある問題を修正しました。INTERPOLATE 式に対して計算される DAG の不整合に関連する同様の問題も修正しました。 [#77343](https://github.com/ClickHouse/ClickHouse/pull/77343) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* 無効な AST ノードに対するエイリアス設定に関する複数の LOGICAL_ERROR を修正しました。 [#77445](https://github.com/ClickHouse/ClickHouse/pull/77445) ([Raúl Marín](https://github.com/Algunenano)). -* ファイルシステムキャッシュの実装において、ファイルセグメント書き込み中のエラー処理を修正しました。 [#77471](https://github.com/ClickHouse/ClickHouse/pull/77471) ([Kseniia Sumarokova](https://github.com/kssenii)). -* DatabaseIceberg がカタログによって提供される適切なメタデータファイルを使用するように修正しました。[#75187](https://github.com/ClickHouse/ClickHouse/issues/75187) をクローズ。[#77486](https://github.com/ClickHouse/ClickHouse/pull/77486)([Kseniia Sumarokova](https://github.com/kssenii))。 -* クエリキャッシュは、UDF を非決定的なものとみなすようになりました。これに伴い、UDF を含むクエリの結果はもはやキャッシュされません。以前は、結果が誤ってキャッシュされてしまう非決定的な UDF をユーザーが定義できていました(issue [#77553](https://github.com/ClickHouse/ClickHouse/issues/77553))。[#77633](https://github.com/ClickHouse/ClickHouse/pull/77633)([Jimmy Aguilar Mena](https://github.com/Ergus))。 -* system.filesystem_cache_log が `enable_filesystem_cache_log` 設定が有効な場合にのみ動作していた問題を修正しました。[#77650](https://github.com/ClickHouse/ClickHouse/pull/77650) ([Kseniia Sumarokova](https://github.com/kssenii)). -* プロジェクション内で `defaultRoles` 関数を呼び出した際に発生する論理エラーを修正。[#76627](https://github.com/ClickHouse/ClickHouse/issues/76627) のフォローアップ。[#77667](https://github.com/ClickHouse/ClickHouse/pull/77667)([pufit](https://github.com/pufit))。 -* 関数 `arrayResize` の第 2 引数として `Nullable` 型を使用することは、現在は許可されていません。以前は、第 2 引数が `Nullable` の場合、エラーの発生から誤った結果の返却まで、さまざまな問題が起こり得ました(issue [#48398](https://github.com/ClickHouse/ClickHouse/issues/48398))。[#77724](https://github.com/ClickHouse/ClickHouse/pull/77724)([Manish Gill](https://github.com/mgill25))。 -* 書き込み対象のブロックが生成されない場合でも、マージおよびミューテーションがキャンセルされたかどうかを定期的に確認するようにしました。 [#77766](https://github.com/ClickHouse/ClickHouse/pull/77766) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). - - +* `INTO OUTFILE` と併用される `TRUNCATE` でアトミックなリネームをサポートし、[#70323](https://github.com/ClickHouse/ClickHouse/issues/70323) を解決しました。[#77181](https://github.com/ClickHouse/ClickHouse/pull/77181)([Onkar Deshpande](https://github.com/onkar))。 +* 設定の float 値として `NaN` や `inf` を使用することは、もはやできません。もっとも、そもそも以前からそれには何の意味もありませんでしたが。 [#77546](https://github.com/ClickHouse/ClickHouse/pull/77546) ([Yarik Briukhovetskyi](https://github.com/yariks5s))。 +* analyzer が無効化されている場合、`compatibility` 設定に関係なく、デフォルトで parallel replicas を無効にします。この動作は、`parallel_replicas_only_with_analyzer` を明示的に `false` に設定することで変更できます。 [#77115](https://github.com/ClickHouse/ClickHouse/pull/77115) ([Igor Nikonov](https://github.com/devcrafter)). +* クライアントリクエストのヘッダーから外部 HTTP 認証サービスへ転送するヘッダーのリストを定義できる機能を追加しました。 [#77054](https://github.com/ClickHouse/ClickHouse/pull/77054) ([inv2004](https://github.com/inv2004)). +* タプル型カラム内のフィールドに対するカラム名の大文字小文字を区別しないマッチングを正しく扱うようにしました。 [https://github.com/apache/incubator-gluten/issues/8324](https://github.com/apache/incubator-gluten/issues/8324) をクローズしました。 [#73780](https://github.com/ClickHouse/ClickHouse/pull/73780)([李扬](https://github.com/taiyang-li))。 +* Gorilla コーデックのパラメータは、今後常に .sql ファイル内のテーブルメタデータに保存されるようになりました。これにより次の問題が解決されます: [#70072](https://github.com/ClickHouse/ClickHouse/issues/70072)。[#74814](https://github.com/ClickHouse/ClickHouse/pull/74814)([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 +* 特定のデータレイク向けにパース処理を強化しました(Sequence ID のパース:マニフェストファイル内のシーケンス識別子をパースする機能を追加し、Avro メタデータのパース:将来の拡張が容易になるよう Avro メタデータパーサーを再設計しました)。 [#75010](https://github.com/ClickHouse/ClickHouse/pull/75010) ([Daniil Ivanik](https://github.com/divanik)). +* `system.opentelemetry_span_log` のデフォルト ORDER BY から trace_id を削除しました。 [#75907](https://github.com/ClickHouse/ClickHouse/pull/75907) ([Azat Khuzhin](https://github.com/azat)). +* 暗号化属性 `encrypted_by` は、任意の設定ファイル(config.xml、users.xml、ネストされた設定ファイル)に適用できるようになりました。以前は、トップレベルの config.xml ファイルに対してのみ有効でした。 [#75911](https://github.com/ClickHouse/ClickHouse/pull/75911) ([Mikhail Gorshkov](https://github.com/mgorshkov))。 +* `system.warnings` テーブルを改善し、追加・更新・削除が可能な動的な警告メッセージをいくつか追加しました。 [#76029](https://github.com/ClickHouse/ClickHouse/pull/76029) ([Bharat Nallan](https://github.com/bharatnc)). +* このPRにより、すべての `DROP` 操作を先に記述する必要があるため、クエリ `ALTER USER user1 ADD PROFILES a, DROP ALL PROFILES` を実行できなくなりました。 [#76242](https://github.com/ClickHouse/ClickHouse/pull/76242) ([pufit](https://github.com/pufit)). +* SYNC REPLICA に対するさまざまな改善(エラーメッセージの改善、テストの改善、サニティチェックの追加)。 [#76307](https://github.com/ClickHouse/ClickHouse/pull/76307) ([Azat Khuzhin](https://github.com/azat)). +* バックアップ中に「Access Denied」により S3 へのマルチパートコピーが失敗した場合に、正しいフォールバック処理を行うようにしました。異なる認証情報を持つバケット間でバックアップを行うと、マルチパートコピーで「Access Denied」エラーが発生することがあります。 [#76515](https://github.com/ClickHouse/ClickHouse/pull/76515) ([Antonio Andelic](https://github.com/antonio2368)). +* librdkafka(出来の悪い代物)をバージョン 2.8.0 にアップグレードし(出来の悪さは相変わらずですが)、Kafka テーブルのシャットダウン手順を改善して、テーブル削除およびサーバー再起動時の遅延を削減しました。`engine=Kafka` は、テーブルが削除されたときにコンシューマグループを明示的に離脱しなくなりました。代わりに、コンシューマは非アクティブ状態が `session_timeout_ms`(デフォルト: 45 秒)を超えるまでグループに残り、その後自動的に削除されます。[#76621](https://github.com/ClickHouse/ClickHouse/pull/76621)([filimonov](https://github.com/filimonov))。 +* S3 リクエスト設定のバリデーションを修正。[#76658](https://github.com/ClickHouse/ClickHouse/pull/76658) ([Vitaly Baranov](https://github.com/vitlibar)). +* `server_settings` や `settings` のようなシステムテーブルには、便利な `default` 値の列があります。同様の列を `merge_tree_settings` と `replicated_merge_tree_settings` に追加しました。 [#76942](https://github.com/ClickHouse/ClickHouse/pull/76942) ([Diego Nieto](https://github.com/lesandie)). +* `ProfileEvents::QueryPreempted` を追加しました。`CurrentMetrics::QueryPreempted` と同様のロジックです。 [#77015](https://github.com/ClickHouse/ClickHouse/pull/77015) ([VicoWu](https://github.com/VicoWu))。 +* 過去のバージョンでは、`Replicated` データベースがクエリ内で指定された認証情報をログに出力してしまう場合がありました。この動作は修正されました。これにより、関連 Issue: [#77123](https://github.com/ClickHouse/ClickHouse/issues/77123) がクローズされました。[#77133](https://github.com/ClickHouse/ClickHouse/pull/77133)([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 +* `plain_rewritable` ディスクに対して ALTER TABLE DROP PARTITION を許可。 [#77138](https://github.com/ClickHouse/ClickHouse/pull/77138) ([Julia Kartseva](https://github.com/jkartseva)). +* バックアップ/リストア設定 `allow_s3_native_copy` は、現在次の 3 つの値をサポートします: - `False` - S3 ネイティブコピーは使用されません。 - `True` (従来のデフォルト) - ClickHouse はまず S3 ネイティブコピーを試み、失敗した場合は読み取り + 書き込み方式にフォールバックします。 - `'auto'` (新しいデフォルト) - ClickHouse はまずソースとデスティネーションのクレデンシャルを比較します。同一であれば ClickHouse は S3 ネイティブコピーを試み、その後、読み取り + 書き込み方式にフォールバックする場合があります。異なる場合、ClickHouse は最初から読み取り + 書き込み方式を使用します。 [#77401](https://github.com/ClickHouse/ClickHouse/pull/77401) ([Vitaly Baranov](https://github.com/vitlibar)). +* DeltaLake テーブルエンジン向けの delta kernel で、AWS セッショントークンおよび環境変数から取得する認証情報の利用をサポートしました。 [#77661](https://github.com/ClickHouse/ClickHouse/pull/77661) ([Kseniia Sumarokova](https://github.com/kssenii)). + +#### バグ修正(公式安定版リリースで発生するユーザーに見える不具合) + +* 非同期分散 INSERT の保留中バッチの処理中に(`No such file or directory` などが原因で)処理が停止してしまう問題を修正しました。 [#72939](https://github.com/ClickHouse/ClickHouse/pull/72939) ([Azat Khuzhin](https://github.com/azat)). +* インデックス解析時に行われる暗黙的な `Date` から `DateTime` への変換に対して飽和動作を強制することで、日時変換を改善しました。これにより、日時の範囲制限が原因で発生しうるインデックス解析の不正確さの問題が解消されます。この変更により [#73307](https://github.com/ClickHouse/ClickHouse/issues/73307) が修正されました。また、デフォルト値である `date_time_overflow_behavior = 'ignore'` 設定時の明示的な `toDateTime` 変換も修正しました。[#73326](https://github.com/ClickHouse/ClickHouse/pull/73326)([Amos Bird](https://github.com/amosbird))。 +* UUID とテーブル名の競合に起因するさまざまなバグを修正しました(たとえば、`RENAME` と `RESTART REPLICA` 間の競合を解消します。`SYSTEM RESTART REPLICA` と同時に `RENAME` が実行される場合、誤ったレプリカを再起動してしまったり、いずれかのテーブルが `Table X is being restarted` 状態のまま残ってしまう可能性がありました)。 [#76308](https://github.com/ClickHouse/ClickHouse/pull/76308) ([Azat Khuzhin](https://github.com/azat)). +* async insert を有効にし、`INSERT INTO ... FROM FILE ...` を異なるブロックサイズで実行したときのデータ損失を修正しました。最初のブロックサイズが `async_max_size` 未満で、2 番目のブロックサイズが `async_max_size` を超える場合、2 番目のブロックが挿入されず、これらのデータが `squashing` に残ったままになる問題がありました。 [#76343](https://github.com/ClickHouse/ClickHouse/pull/76343) ([Han Fei](https://github.com/hanfei1991)). +* `system.data_skipping_indices` のフィールド名 'marks' を 'marks_bytes' に変更しました。 [#76374](https://github.com/ClickHouse/ClickHouse/pull/76374) ([Robert Schulze](https://github.com/rschu1ze)). +* 動的なファイルシステムキャッシュのリサイズ時に、エビクション処理中に発生する予期しないエラーの扱いを修正しました。 [#76466](https://github.com/ClickHouse/ClickHouse/pull/76466) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 並列ハッシュにおける `used_flag` の初期化を修正しました。これによりサーバーがクラッシュする可能性がありました。 [#76580](https://github.com/ClickHouse/ClickHouse/pull/76580) ([Nikita Taranov](https://github.com/nickitat)). +* Projection 内で `defaultProfiles` 関数を呼び出す際に発生していた論理エラーを修正。 [#76627](https://github.com/ClickHouse/ClickHouse/pull/76627) ([pufit](https://github.com/pufit)). +* Web UI においてブラウザによる対話的な Basic 認証を要求しないようにしました。Closes [#76319](https://github.com/ClickHouse/ClickHouse/issues/76319)。[#76637](https://github.com/ClickHouse/ClickHouse/pull/76637) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 分散テーブルからブールリテラルを選択した際にスローされる `THERE_IS_NO_COLUMN` 例外を修正。 [#76656](https://github.com/ClickHouse/ClickHouse/pull/76656) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* テーブルディレクトリ内のサブパスは、より高度な方法で選択されるようになりました。 [#76681](https://github.com/ClickHouse/ClickHouse/pull/76681) ([Daniil Ivanik](https://github.com/divanik)). +* サブカラムを含む主キー (PK) を持つテーブルを変更した後に発生する `Not found column in block` エラーを修正しました。[https://github.com/ClickHouse/ClickHouse/pull/72644](https://github.com/ClickHouse/ClickHouse/pull/72644) 以降では、[https://github.com/ClickHouse/ClickHouse/pull/74403](https://github.com/ClickHouse/ClickHouse/pull/74403) が必要です。[#76686](https://github.com/ClickHouse/ClickHouse/pull/76686)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 +* NULL ショートサーキット用のパフォーマンステストを追加し、バグを修正。 [#76708](https://github.com/ClickHouse/ClickHouse/pull/76708) ([李扬](https://github.com/taiyang-li))。 +* 出力書き込みバッファをファイナライズする前にフラッシュするようにしました。`JSONEachRowWithProgressRowOutputFormat` など一部の出力フォーマットのファイナライズ中に発生していた `LOGICAL_ERROR` を修正しました。 [#76726](https://github.com/ClickHouse/ClickHouse/pull/76726) ([Antonio Andelic](https://github.com/antonio2368))。 +* MongoDB のバイナリ UUID への対応を追加しました([#74452](https://github.com/ClickHouse/ClickHouse/issues/74452))。- テーブル関数使用時の MongoDB への WHERE 句プッシュダウンを修正しました([#72210](https://github.com/ClickHouse/ClickHouse/issues/72210))。- MongoDB のバイナリ UUID は ClickHouse の UUID にのみ解釈されるように、MongoDB - ClickHouse の型マッピングを変更しました。これにより、将来的なあいまいさや予期しない挙動を防ぐことができます。- 後方互換性を保ちつつ OID のマッピングを修正しました。[#76762](https://github.com/ClickHouse/ClickHouse/pull/76762)([Kirill Nikiforov](https://github.com/allmazz))。 +* JSON サブカラムの並列プレフィックス デシリアライズ時の例外処理を修正。 [#76809](https://github.com/ClickHouse/ClickHouse/pull/76809) ([Pavel Kruglov](https://github.com/Avogar)). +* 負の整数に対する `lgamma` 関数の挙動を修正しました。 [#76840](https://github.com/ClickHouse/ClickHouse/pull/76840) ([Ilya Kataev](https://github.com/IlyaKataev)). +* 明示的に定義されたプライマリキーに対する逆キー解析を修正。[#76654](https://github.com/ClickHouse/ClickHouse/issues/76654) と同様。[#76846](https://github.com/ClickHouse/ClickHouse/pull/76846) ([Amos Bird](https://github.com/amosbird))。 +* JSON フォーマットにおける Bool 値の整形出力を修正。 [#76905](https://github.com/ClickHouse/ClickHouse/pull/76905) ([Pavel Kruglov](https://github.com/Avogar)). +* 非同期挿入中のエラー時に、不正な JSON 列に対するロールバック処理が原因でクラッシュが発生する可能性があった問題を修正しました。 [#76908](https://github.com/ClickHouse/ClickHouse/pull/76908) ([Pavel Kruglov](https://github.com/Avogar)). +* 以前は、`multiIf` が計画段階と本実行時で異なる型のカラムを返す場合がありました。これにより、C++ の観点では未定義動作となるコードが生成されていました。 [#76914](https://github.com/ClickHouse/ClickHouse/pull/76914) ([Nikita Taranov](https://github.com/nickitat))。 +* MergeTree における定数 Nullable キーのシリアライゼーションが誤っていた問題を修正しました。これにより [#76939](https://github.com/ClickHouse/ClickHouse/issues/76939) が解決されます。[#76985](https://github.com/ClickHouse/ClickHouse/pull/76985)([Amos Bird](https://github.com/amosbird))。 +* `BFloat16` 値のソートを修正しました。これにより [#75487](https://github.com/ClickHouse/ClickHouse/issues/75487) および [#75669](https://github.com/ClickHouse/ClickHouse/issues/75669) が解決されます。[#77000](https://github.com/ClickHouse/ClickHouse/pull/77000)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* パート整合性チェックにおいてエフェメラルなサブカラムをスキップするためのチェックを追加し、Variant サブカラムを含む JSON に関するバグを修正しました。 [#72187](https://github.com/ClickHouse/ClickHouse/issues/72187)。 [#77034](https://github.com/ClickHouse/ClickHouse/pull/77034) ([Smita Kulkarni](https://github.com/SmitaRKulkarni))。 +* 型不一致がある場合に Values フォーマットのテンプレート解析でクラッシュする問題を修正。 [#77071](https://github.com/ClickHouse/ClickHouse/pull/77071) ([Pavel Kruglov](https://github.com/Avogar))。 +* 主キーにサブカラムを含む EmbeddedRocksDB テーブルを作成できないようにしました。以前はそのようなテーブルを作成できていましたが、`SELECT` クエリの実行が失敗していました。 [#77074](https://github.com/ClickHouse/ClickHouse/pull/77074) ([Pavel Kruglov](https://github.com/Avogar)). +* 分散クエリにおいて、述語をリモート側にプッシュダウンする際にリテラル型が正しく扱われないことが原因で発生していた不正な比較を修正しました。 [#77093](https://github.com/ClickHouse/ClickHouse/pull/77093) ([Duc Canh Le](https://github.com/canhld94)). +* Kafka テーブル作成時の例外により発生するクラッシュを修正。 [#77121](https://github.com/ClickHouse/ClickHouse/pull/77121) ([Pavel Kruglov](https://github.com/Avogar)). +* Kafka および RabbitMQ エンジンで JSON およびサブカラムのサポートを追加。 [#77122](https://github.com/ClickHouse/ClickHouse/pull/77122) ([Pavel Kruglov](https://github.com/Avogar)). +* macOS における例外スタックアンワインドを修正。 [#77126](https://github.com/ClickHouse/ClickHouse/pull/77126) ([Eduard Karacharov](https://github.com/korowa)). +* getSubcolumn 関数における 'null' サブカラムの読み取りを修正。 [#77163](https://github.com/ClickHouse/ClickHouse/pull/77163) ([Pavel Kruglov](https://github.com/Avogar))。 +* Array や未サポート関数を使用する Bloom filter インデックスを修正。 [#77271](https://github.com/ClickHouse/ClickHouse/pull/77271) ([Pavel Kruglov](https://github.com/Avogar)). +* テーブル数に対する制限のチェックは、初回の CREATE クエリ実行時にのみ行うようにしました。 [#77274](https://github.com/ClickHouse/ClickHouse/pull/77274) ([Nikolay Degterinsky](https://github.com/evillique)). +* バグではありません: `SELECT toBFloat16(-0.0) == toBFloat16(0.0)` は、以前は `false` を返していましたが、現在は正しく `true` を返します。これにより、`Float32` および `Float64` の挙動と一貫性が取れるようになりました。 [#77290](https://github.com/ClickHouse/ClickHouse/pull/77290) ([Shankar Iyer](https://github.com/shankar-iyer)). +* 初期化されていない `key_index` 変数を誤って参照してしまう可能性がある問題を修正しました。これはデバッグビルドではクラッシュの原因になり得ますが、リリースビルドでは、その後のコードが例外を送出する可能性が高いため、この未初期化参照自体が問題を引き起こすことはありません。### ユーザー向け変更に関するドキュメント項目です。[#77305](https://github.com/ClickHouse/ClickHouse/pull/77305) ([wxybear](https://github.com/wxybear)). +* ブール値を持つパーティションの名前を修正しました。この不具合は [https://github.com/ClickHouse/ClickHouse/pull/74533](https://github.com/ClickHouse/ClickHouse/pull/74533) で発生していました。[#77319](https://github.com/ClickHouse/ClickHouse/pull/77319)([Pavel Kruglov](https://github.com/Avogar))。 +* Nullable 要素を含む Tuple と String 間の比較処理を修正しました。例えば、この変更以前は、Tuple `(1, null)` と String `'(1,null)'` の比較はエラーになっていました。別の例として、Nullable 列である `a` を含む Tuple `(1, a)` と String `'(1, 2)'` の比較があります。この変更により、これらの問題が解消されました。 [#77323](https://github.com/ClickHouse/ClickHouse/pull/77323) ([Alexey Katsman](https://github.com/alexkats)). +* ObjectStorageQueueSource のクラッシュを修正しました。このクラッシュは [https://github.com/ClickHouse/ClickHouse/pull/76358](https://github.com/ClickHouse/ClickHouse/pull/76358) で導入されたものです。[#77325](https://github.com/ClickHouse/ClickHouse/pull/77325)([Pavel Kruglov](https://github.com/Avogar))。 +* `input` 使用時の `async_insert` を修正。 [#77340](https://github.com/ClickHouse/ClickHouse/pull/77340) ([Azat Khuzhin](https://github.com/azat)). +* 修正: ソート列がプランナーによって削除された場合に、`WITH FILL` が NOT_FOUND_COLUMN_IN_BLOCK で失敗することがある問題を修正しました。INTERPOLATE 式に対して計算される DAG が不整合になることが原因の、類似の問題も修正しました。 [#77343](https://github.com/ClickHouse/ClickHouse/pull/77343) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* 無効な AST ノードに対するエイリアス設定まわりの複数の LOGICAL_ERROR を修正しました。 [#77445](https://github.com/ClickHouse/ClickHouse/pull/77445) ([Raúl Marín](https://github.com/Algunenano)). +* ファイルシステムキャッシュの実装で、ファイルセグメント書き込み中のエラー処理を修正しました。 [#77471](https://github.com/ClickHouse/ClickHouse/pull/77471) ([Kseniia Sumarokova](https://github.com/kssenii)). +* DatabaseIceberg がカタログから提供される正しいメタデータファイルを使用するようにしました。[#75187](https://github.com/ClickHouse/ClickHouse/issues/75187) を修正。[#77486](https://github.com/ClickHouse/ClickHouse/pull/77486)([Kseniia Sumarokova](https://github.com/kssenii))。 +* クエリキャッシュは、UDF を非決定的であるものと仮定するようになりました。これに伴い、UDF を含むクエリの結果はキャッシュされなくなりました。以前は、結果が誤ってキャッシュされてしまう非決定的な UDF をユーザーが定義できていました(issue [#77553](https://github.com/ClickHouse/ClickHouse/issues/77553))。[#77633](https://github.com/ClickHouse/ClickHouse/pull/77633)([Jimmy Aguilar Mena](https://github.com/Ergus))。 +* `enable_filesystem_cache_log` 設定が有効な場合にしか機能していなかった system.filesystem_cache_log を修正。 [#77650](https://github.com/ClickHouse/ClickHouse/pull/77650) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Projection 内で `defaultRoles` 関数を呼び出した際の論理エラーを修正。[#76627](https://github.com/ClickHouse/ClickHouse/issues/76627) のフォローアップ。[#77667](https://github.com/ClickHouse/ClickHouse/pull/77667)([pufit](https://github.com/pufit))。 +* 関数 `arrayResize` の第 2 引数として型 `Nullable` を指定することは現在禁止されています。以前は、第 2 引数が `Nullable` の場合、エラーの発生から誤った結果の返却まで、さまざまな問題が起こり得ました(issue [#48398](https://github.com/ClickHouse/ClickHouse/issues/48398))。[#77724](https://github.com/ClickHouse/ClickHouse/pull/77724)([Manish Gill](https://github.com/mgill25))。 +* 操作が書き込み用のブロックを一切生成しない場合でも、マージおよびミューテーションがキャンセルされたかどうかを定期的に確認するようになりました。 [#77766](https://github.com/ClickHouse/ClickHouse/pull/77766) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). #### ビルド/テスト/パッケージングの改善 -* `clickhouse-odbc-bridge` と `clickhouse-library-bridge` を別のリポジトリ https://github.com/ClickHouse/odbc-bridge/ に移動しました。[#76225](https://github.com/ClickHouse/ClickHouse/pull/76225) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Rust のクロスコンパイルを修正し、Rust を完全に無効化できるようにしました。[#76921](https://github.com/ClickHouse/ClickHouse/pull/76921) ([Raúl Marín](https://github.com/Algunenano)). +* `clickhouse-odbc-bridge` と `clickhouse-library-bridge` は、別のリポジトリである https://github.com/ClickHouse/odbc-bridge/ に移動されました。[#76225](https://github.com/ClickHouse/ClickHouse/pull/76225) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* Rust のクロスコンパイルを修正し、Rust を完全に無効化できるようにしました。[#76921](https://github.com/ClickHouse/ClickHouse/pull/76921) ([Raúl Marín](https://github.com/Algunenano))。 ### ClickHouse リリース 25.2, 2025-02-27 {#252} #### 後方互換性のない変更 -* `async_load_databases` をデフォルトで完全に有効化しました(`config.xml` をアップグレードしていないインストールでも有効になります)。[#74772](https://github.com/ClickHouse/ClickHouse/pull/74772) ([Azat Khuzhin](https://github.com/azat)). -* `JSONCompactEachRowWithProgress` と `JSONCompactStringsEachRowWithProgress` 形式を追加しました。[#69989](https://github.com/ClickHouse/ClickHouse/issues/69989) の継続です。`JSONCompactWithNames` と `JSONCompactWithNamesAndTypes` は、もはや「totals」を出力しません――実装上の誤りであったと思われます。[#75037](https://github.com/ClickHouse/ClickHouse/pull/75037) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* ALTER コマンドのリストの曖昧さを解消するため、`format_alter_operations_with_parentheses` のデフォルト値を true に変更しました(https://github.com/ClickHouse/ClickHouse/pull/59532 を参照)。これにより、24.3 より前のクラスタとのレプリケーションが壊れます。古いリリースを使用しているクラスタをアップグレードする場合は、サーバー設定でこの設定をオフにするか、先に 24.3 へアップグレードしてください。[#75302](https://github.com/ClickHouse/ClickHouse/pull/75302) ([Raúl Marín](https://github.com/Algunenano)). -* 正規表現を使用したログメッセージのフィルタリング機能を削除しました。この実装にデータレースが存在したため、削除する必要がありました。[#75577](https://github.com/ClickHouse/ClickHouse/pull/75577) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). -* `min_chunk_bytes_for_parallel_parsing` 設定はもはや 0 に設定できません。この変更により次の問題が修正されます: [#71110](https://github.com/ClickHouse/ClickHouse/issues/71110)。[#75239](https://github.com/ClickHouse/ClickHouse/pull/75239) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). -* キャッシュ構成内の設定項目を検証するようにしました。存在しない設定は以前は無視されていましたが、今後はエラーとなるため削除する必要があります。[#75452](https://github.com/ClickHouse/ClickHouse/pull/75452) ([Kseniia Sumarokova](https://github.com/kssenii)). - +* `async_load_databases` を完全に有効化し、デフォルト設定としました(`config.xml` をアップグレードしていないインストール環境でも有効になります)。[#74772](https://github.com/ClickHouse/ClickHouse/pull/74772)([Azat Khuzhin](https://github.com/azat))。 +* `JSONCompactEachRowWithProgress` および `JSONCompactStringsEachRowWithProgress` フォーマットを追加しました。[#69989](https://github.com/ClickHouse/ClickHouse/issues/69989) の継続対応です。`JSONCompactWithNames` と `JSONCompactWithNamesAndTypes` はもはや "totals" を出力しません — 実装上の誤りだったと考えられます。[#75037](https://github.com/ClickHouse/ClickHouse/pull/75037)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* ALTER コマンドリストの曖昧さを解消するため、`format_alter_operations_with_parentheses` のデフォルト値を true に変更しました(https://github.com/ClickHouse/ClickHouse/pull/59532 を参照)。これにより、バージョン 24.3 以前のクラスタとのレプリケーションが動作しなくなります。古いリリースを使用しているクラスタをアップグレードする場合は、サーバー設定でこの設定を無効にするか、先に 24.3 にアップグレードしてください。[#75302](https://github.com/ClickHouse/ClickHouse/pull/75302)([Raúl Marín](https://github.com/Algunenano))。 +* 正規表現を使用してログメッセージをフィルタリングする機能を削除しました。この実装にデータレースが存在したため、削除しました。[#75577](https://github.com/ClickHouse/ClickHouse/pull/75577)([János Benjamin Antal](https://github.com/antaljanosbenjamin))。 +* 設定 `min_chunk_bytes_for_parallel_parsing` には、もはやゼロを指定できなくなりました。これにより次の問題が修正されます: [#71110](https://github.com/ClickHouse/ClickHouse/issues/71110)。[#75239](https://github.com/ClickHouse/ClickHouse/pull/75239)([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 +* キャッシュ設定内の設定項目を検証するようにしました。存在しない設定はこれまで無視されていましたが、今後はエラーを返すようになり、それらは削除する必要があります。[#75452](https://github.com/ClickHouse/ClickHouse/pull/75452)([Kseniia Sumarokova](https://github.com/kssenii))。 #### 新機能 -* 型 `Nullable(JSON)` をサポートしました。 [#73556](https://github.com/ClickHouse/ClickHouse/pull/73556) ([Pavel Kruglov](https://github.com/Avogar)). -* DEFAULT および MATERIALIZED 式でサブカラムをサポートしました。 [#74403](https://github.com/ClickHouse/ClickHouse/pull/74403) ([Pavel Kruglov](https://github.com/Avogar)). -* `output_format_parquet_write_bloom_filter` 設定(デフォルトで有効)による Parquet ブルームフィルタの書き込みをサポートしました。 [#71681](https://github.com/ClickHouse/ClickHouse/pull/71681) ([Michael Kolupaev](https://github.com/al13n321)). -* Web UI にインタラクティブなデータベースナビゲーションが追加されました。 [#75777](https://github.com/ClickHouse/ClickHouse/pull/75777) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* ストレージポリシーで、読み取り専用ディスクと読み書き可能ディスクの組み合わせ(複数ボリュームまたは複数ディスク)を許可しました。これにより、ボリューム全体からデータを読み取ることができる一方で、挿入は書き込み可能ディスクを優先するようになります(Copy-on-Write ストレージポリシー)。 [#75862](https://github.com/ClickHouse/ClickHouse/pull/75862) ([Azat Khuzhin](https://github.com/azat)). -* 新しい Database エンジン `DatabaseBackup` を追加しました。これにより、バックアップからテーブル/データベースを即座にアタッチできます。 [#75725](https://github.com/ClickHouse/ClickHouse/pull/75725) ([Maksim Kita](https://github.com/kitaisreal)). -* Postgres ワイヤプロトコルでのプリペアドステートメントをサポートしました。 [#75035](https://github.com/ClickHouse/ClickHouse/pull/75035) ([scanhex12](https://github.com/scanhex12)). -* データベースレイヤーなしで ATTACH テーブルを実行できるようにしました。これは、Web や S3 などの外部仮想ファイルシステム上に配置された MergeTree テーブルに対して有用です。 [#75788](https://github.com/ClickHouse/ClickHouse/pull/75788) ([Azat Khuzhin](https://github.com/azat)). -* 2 つの文字列の一部を比較する新しい文字列比較関数 `compareSubstrings` を追加しました。例: `SELECT compareSubstrings('Saxony', 'Anglo-Saxon', 0, 6, 5) AS result` は、「最初の文字列のオフセット 0、2 番目の文字列のオフセット 5 から、それぞれ 6 バイト分の文字列 'Saxon' と 'Anglo-Saxon' を辞書順で比較する」という意味です。 [#74070](https://github.com/ClickHouse/ClickHouse/pull/74070) ([lgbo](https://github.com/lgbo-ustc)). -* 新しい関数 `initialQueryStartTime` を追加しました。現在のクエリの開始時刻を返します。分散クエリの場合、この値はすべてのシャードで同一です。 [#75087](https://github.com/ClickHouse/ClickHouse/pull/75087) ([Roman Lomonosov](https://github.com/lomik)). -* MySQL の named collection を使用した SSL 認証をサポートしました。[#59111](https://github.com/ClickHouse/ClickHouse/issues/59111) をクローズします。 [#59452](https://github.com/ClickHouse/ClickHouse/pull/59452) ([Nikolay Degterinsky](https://github.com/evillique)). -#### 実験的機能 -* 新しい設定 `enable_adaptive_memory_spill_scheduler` を追加しました。同一クエリ内の複数の Grace JOIN が、合計メモリフットプリントを監視し、MEMORY_LIMIT_EXCEEDED を防ぐために外部ストレージへのスピルを自動的に発生させられるようにします。 [#72728](https://github.com/ClickHouse/ClickHouse/pull/72728) ([lgbo](https://github.com/lgbo-ustc)). -* 新しい実験的な `Kafka` テーブルエンジンが Keeper のフィーチャーフラグに完全に従うようにしました。 [#76004](https://github.com/ClickHouse/ClickHouse/pull/76004) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). -* ライセンス上の問題により v24.10 で削除されていた (Intel) QPL コーデックを復元しました。 [#76021](https://github.com/ClickHouse/ClickHouse/pull/76021) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* HDFS との連携において、`dfs.client.use.datanode.hostname` 設定オプションをサポートしました。 [#74635](https://github.com/ClickHouse/ClickHouse/pull/74635) ([Mikhail Tiukavkin](https://github.com/freshertm)). +* 型 `Nullable(JSON)` をサポートしました。[#73556](https://github.com/ClickHouse/ClickHouse/pull/73556) ([Pavel Kruglov](https://github.com/Avogar))。 +* DEFAULT および MATERIALIZED 式でサブカラムをサポートしました。[#74403](https://github.com/ClickHouse/ClickHouse/pull/74403) ([Pavel Kruglov](https://github.com/Avogar))。 +* 設定 `output_format_parquet_write_bloom_filter`(デフォルトで有効)を使用した Parquet ブルームフィルタの書き込みをサポートしました。[#71681](https://github.com/ClickHouse/ClickHouse/pull/71681) ([Michael Kolupaev](https://github.com/al13n321))。 +* Web UI にインタラクティブなデータベースナビゲーションが追加されました。[#75777](https://github.com/ClickHouse/ClickHouse/pull/75777) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* ストレージポリシー内で、読み取り専用ディスクと読み書き可能ディスクの組み合わせ(複数ボリュームまたは複数ディスク)を許可しました。これにより、ボリューム全体からデータを読み取ることが可能になり、一方で挿入は書き込み可能ディスクが優先されます(いわゆる Copy-on-Write ストレージポリシー)。[#75862](https://github.com/ClickHouse/ClickHouse/pull/75862) ([Azat Khuzhin](https://github.com/azat))。 +* 新しいデータベースエンジン `DatabaseBackup` を追加しました。これにより、バックアップからテーブル/データベースを即座に ATTACH できます。[#75725](https://github.com/ClickHouse/ClickHouse/pull/75725) ([Maksim Kita](https://github.com/kitaisreal))。 +* Postgres ワイヤープロトコルでのプリペアドステートメントをサポートしました。[#75035](https://github.com/ClickHouse/ClickHouse/pull/75035) ([scanhex12](https://github.com/scanhex12))。 +* データベースレイヤーなしでテーブルを ATTACH できるようにしました。これは、Web、S3 などの外部仮想ファイルシステム上にある MergeTree テーブルに対して有用です。[#75788](https://github.com/ClickHouse/ClickHouse/pull/75788) ([Azat Khuzhin](https://github.com/azat))。 +* 新しい文字列比較関数 `compareSubstrings` を追加しました。2 つの文字列の一部を比較します。例: `SELECT compareSubstrings('Saxony', 'Anglo-Saxon', 0, 6, 5) AS result` は「1 つ目の文字列のオフセット 0、2 つ目の文字列のオフセット 5 から、それぞれ 6 バイト分の 'Saxon' と 'Anglo-Saxon' を辞書順で比較する」ことを意味します。[#74070](https://github.com/ClickHouse/ClickHouse/pull/74070) ([lgbo](https://github.com/lgbo-ustc))。 +* 新しい関数 `initialQueryStartTime` を追加しました。現在のクエリの開始時刻を返します。この値は分散クエリにおいて、すべてのシャードで同一です。[#75087](https://github.com/ClickHouse/ClickHouse/pull/75087) ([Roman Lomonosov](https://github.com/lomik))。 +* MySQL における Named Collection を用いた SSL 認証をサポートしました。[#59111](https://github.com/ClickHouse/ClickHouse/issues/59111) を解決します。[#59452](https://github.com/ClickHouse/ClickHouse/pull/59452) ([Nikolay Degterinsky](https://github.com/evillique))。 +#### 実験的機能 +* 新しい設定 `enable_adaptive_memory_spill_scheduler` を追加しました。この設定により、同一クエリ内の複数の Grace JOIN が合計のメモリフットプリントを監視し、MEMORY_LIMIT_EXCEEDED を防ぐために外部ストレージへのスピルを適応的にトリガーできるようになります。 [#72728](https://github.com/ClickHouse/ClickHouse/pull/72728) ([lgbo](https://github.com/lgbo-ustc)). +* 新しい実験的な `Kafka` テーブルエンジンが Keeper の機能フラグを完全に順守するようにしました。 [#76004](https://github.com/ClickHouse/ClickHouse/pull/76004) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). +* ライセンス上の問題により v24.10 で削除されていた (Intel) QPL コーデックを復元しました。 [#76021](https://github.com/ClickHouse/ClickHouse/pull/76021) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* HDFS との連携向けとして、`dfs.client.use.datanode.hostname` 設定オプションのサポートを追加しました。 [#74635](https://github.com/ClickHouse/ClickHouse/pull/74635) ([Mikhail Tiukavkin](https://github.com/freshertm)). #### パフォーマンスの改善 -* Wide パーツにおける S3 からの JSON カラム全体の読み取りパフォーマンスを改善しました。これは、サブカラム接頭辞のデシリアライズに対するプリフェッチ、デシリアライズ済み接頭辞のキャッシュ、およびサブカラム接頭辞の並列デシリアライズを追加することで実現しています。これにより、`SELECT data FROM table` のようなクエリでは S3 からの JSON カラムの読み取りが 4 倍、`SELECT data FROM table LIMIT 10` のようなクエリではおよそ 10 倍高速になります。 [#74827](https://github.com/ClickHouse/ClickHouse/pull/74827) ([Pavel Kruglov](https://github.com/Avogar)). -* `max_rows_in_join = max_bytes_in_join = 0` の場合に `parallel_hash` で発生していた不要な競合を修正しました。 [#75155](https://github.com/ClickHouse/ClickHouse/pull/75155) ([Nikita Taranov](https://github.com/nickitat)). -* オプティマイザによって結合の両側が入れ替えられるケースで、`ConcurrentHashJoin` において二重に事前確保が行われていた問題を修正しました。 [#75149](https://github.com/ClickHouse/ClickHouse/pull/75149) ([Nikita Taranov](https://github.com/nickitat)). -* 一部の JOIN シナリオでのわずかな改善として、出力行数を事前計算し、その分のメモリを予約するようにしました。 [#75376](https://github.com/ClickHouse/ClickHouse/pull/75376) ([Alexander Gololobov](https://github.com/davenger)). -* `WHERE a < b AND b < c AND c < 5` のようなクエリに対して、より良いフィルタリング性能のために新しい比較条件(`a < 5 AND b < 5`)を推論できるようにしました。 [#73164](https://github.com/ClickHouse/ClickHouse/pull/73164) ([Shichao Jin](https://github.com/jsc0218)). -* Keeper の改善: パフォーマンス向上のため、インメモリ ストレージへのコミット時にはダイジェスト計算を無効化しました。これは `keeper_server.digest_enabled_on_commit` 設定で有効化できます。リクエストの前処理時には引き続きダイジェストが計算されます。 [#75490](https://github.com/ClickHouse/ClickHouse/pull/75490) ([Antonio Andelic](https://github.com/antonio2368)). -* 可能な場合、JOIN の ON 句からフィルタ式をプッシュダウンするようにしました。 [#75536](https://github.com/ClickHouse/ClickHouse/pull/75536) ([Vladimir Cherkasov](https://github.com/vdimir)). -* MergeTree において、カラムおよびインデックスサイズを遅延評価するようにしました。 [#75938](https://github.com/ClickHouse/ClickHouse/pull/75938) ([Pavel Kruglov](https://github.com/Avogar)). -* `MATERIALIZE TTL` において `ttl_only_drop_parts` を再び考慮するようにし、TTL を再計算してパーツを削除する際には、必要なカラムのみを読み込んで空のパーツに置き換える形で削除するようにしました。 [#72751](https://github.com/ClickHouse/ClickHouse/pull/72751) ([Andrey Zvonov](https://github.com/zvonand)). -* plain_rewritable メタデータファイルに対する書き込みバッファサイズを削減しました。 [#75758](https://github.com/ClickHouse/ClickHouse/pull/75758) ([Julia Kartseva](https://github.com/jkartseva)). -* 一部のウィンドウ関数におけるメモリ使用量を削減しました。 [#65647](https://github.com/ClickHouse/ClickHouse/pull/65647) ([lgbo](https://github.com/lgbo-ustc)). -* Parquet の Bloom フィルタと min/max インデックスを併用して評価するようにしました。これは、data = [1, 2, 4, 5] のときに `x = 3 or x > 5` を正しくサポートするために必要です。 [#71383](https://github.com/ClickHouse/ClickHouse/pull/71383) ([Arthur Passos](https://github.com/arthurpassos)). -* `Executable` ストレージに渡されるクエリは、もはやシングルスレッド実行に制限されません。 [#70084](https://github.com/ClickHouse/ClickHouse/pull/70084) ([yawnt](https://github.com/yawnt)). -* ALTER TABLE FETCH PARTITION でパーツを並列にフェッチするようにしました(スレッドプールサイズは `max_fetch_partition_thread_pool_size` で制御されます)。 [#74978](https://github.com/ClickHouse/ClickHouse/pull/74978) ([Azat Khuzhin](https://github.com/azat)). -* `indexHint` 関数を用いた述語を `PREWHERE` に移動できるようにしました。 [#74987](https://github.com/ClickHouse/ClickHouse/pull/74987) ([Anton Popov](https://github.com/CurtizJ)). - +* Wide パーツにおける JSON カラム全体の S3 からの読み取りパフォーマンスを改善しました。これは、サブカラムプレフィックスのデシリアライズに対するプリフェッチの追加、デシリアライズ済みプレフィックスのキャッシュ、およびサブカラムプレフィックスの並列デシリアライズにより実現しています。この変更により、`SELECT data FROM table` のようなクエリで S3 からの JSON カラムの読み取りが 4 倍、`SELECT data FROM table LIMIT 10` のようなクエリでは約 10 倍高速になります。[#74827](https://github.com/ClickHouse/ClickHouse/pull/74827)([Pavel Kruglov](https://github.com/Avogar))。 +* `max_rows_in_join = max_bytes_in_join = 0` の場合に `parallel_hash` 内で発生していた不要な競合を修正しました。[#75155](https://github.com/ClickHouse/ClickHouse/pull/75155)([Nikita Taranov](https://github.com/nickitat))。 +* オプティマイザにより結合の左右が入れ替えられた場合に、`ConcurrentHashJoin` で二重に事前アロケーションされていた問題を修正しました。[#75149](https://github.com/ClickHouse/ClickHouse/pull/75149)([Nikita Taranov](https://github.com/nickitat))。 +* いくつかの JOIN シナリオでの軽微な改善として、出力行数を事前計算し、その分のメモリを事前確保するようにしました。[#75376](https://github.com/ClickHouse/ClickHouse/pull/75376)([Alexander Gololobov](https://github.com/davenger))。 +* `WHERE a < b AND b < c AND c < 5` のようなクエリに対して、新たな比較条件(`a < 5 AND b < 5`)を推論してフィルタリング性能を向上できるようにしました。[#73164](https://github.com/ClickHouse/ClickHouse/pull/73164)([Shichao Jin](https://github.com/jsc0218))。 +* Keeper の改善: インメモリストレージにコミットする際のダイジェスト計算を無効化してパフォーマンスを向上しました。この動作は `keeper_server.digest_enabled_on_commit` コンフィグで有効化できます。リクエストの前処理時には引き続きダイジェストが計算されます。[#75490](https://github.com/ClickHouse/ClickHouse/pull/75490)([Antonio Andelic](https://github.com/antonio2368))。 +* 可能な場合に JOIN の ON 句からフィルタ式をプッシュダウンするようにしました。[#75536](https://github.com/ClickHouse/ClickHouse/pull/75536)([Vladimir Cherkasov](https://github.com/vdimir))。 +* MergeTree において、カラムおよびインデックスのサイズを遅延評価するようにしました。[#75938](https://github.com/ClickHouse/ClickHouse/pull/75938)([Pavel Kruglov](https://github.com/Avogar))。 +* `MATERIALIZE TTL` において `ttl_only_drop_parts` 設定を再び尊重するようにしました。TTL を再計算してパーツを空のパーツに置き換えて削除するために、必要なカラムだけを読み取ります。[#72751](https://github.com/ClickHouse/ClickHouse/pull/72751)([Andrey Zvonov](https://github.com/zvonand))。 +* plain_rewritable メタデータファイルの書き込みバッファサイズを削減しました。[#75758](https://github.com/ClickHouse/ClickHouse/pull/75758)([Julia Kartseva](https://github.com/jkartseva))。 +* 一部のウィンドウ関数でのメモリ使用量を削減しました。[#65647](https://github.com/ClickHouse/ClickHouse/pull/65647)([lgbo](https://github.com/lgbo-ustc))。 +* Parquet の Bloom filter と min/max インデックスを同時に評価するようにしました。これは、data = [1, 2, 4, 5] のときの `x = 3 or x > 5` のようなケースを正しくサポートするために必要です。[#71383](https://github.com/ClickHouse/ClickHouse/pull/71383)([Arthur Passos](https://github.com/arthurpassos))。 +* `Executable` ストレージに渡されるクエリは、もはや単一スレッド実行に制限されません。[#70084](https://github.com/ClickHouse/ClickHouse/pull/70084)([yawnt](https://github.com/yawnt))。 +* ALTER TABLE FETCH PARTITION でパーツを並列にフェッチするようにしました(スレッドプールサイズは `max_fetch_partition_thread_pool_size` で制御されます)。[#74978](https://github.com/ClickHouse/ClickHouse/pull/74978)([Azat Khuzhin](https://github.com/azat))。 +* `indexHint` 関数を用いた述語を `PREWHERE` へ移動できるようにしました。[#74987](https://github.com/ClickHouse/ClickHouse/pull/74987)([Anton Popov](https://github.com/CurtizJ))。 #### 改善 -* `LowCardinality` カラムのメモリ内サイズの計算を修正しました。 [#74688](https://github.com/ClickHouse/ClickHouse/pull/74688) ([Nikita Taranov](https://github.com/nickitat)). -* `processors_profile_log` テーブルには、TTL を 30 日とするデフォルト構成が設定されました。 [#66139](https://github.com/ClickHouse/ClickHouse/pull/66139) ([Ilya Yatsishin](https://github.com/qoega)). -* クラスター設定でシャードに名前を付けられるようになりました。 [#72276](https://github.com/ClickHouse/ClickHouse/pull/72276) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). -* Prometheus の remote write レスポンスの成功ステータスコードを 200/OK から 204/NoContent に変更しました。 [#74170](https://github.com/ClickHouse/ClickHouse/pull/74170) ([Michael Dempsey](https://github.com/bluestealth)). -* サーバーを再起動することなく、`max_remote_read_network_bandwidth_for_serve` および `max_remote_write_network_bandwidth_for_server` をオンザフライで再読み込みできるようにしました。 [#74206](https://github.com/ClickHouse/ClickHouse/pull/74206) ([Kai Zhu](https://github.com/nauu)). -* バックアップ作成時にチェックサムを計算する際、blob パスを使用できるようにしました。 [#74729](https://github.com/ClickHouse/ClickHouse/pull/74729) ([Vitaly Baranov](https://github.com/vitlibar)). -* `system.query_cache` にクエリ ID 列を追加しました([#68205](https://github.com/ClickHouse/ClickHouse/issues/68205) をクローズ)。[#74982](https://github.com/ClickHouse/ClickHouse/pull/74982)([NamHoaiNguyen](https://github.com/NamHoaiNguyen))。 -* `ALTER TABLE ... FREEZE ...` クエリを、`KILL QUERY` で明示的に、またはタイムアウト(`max_execution_time`)によって自動的にキャンセルできるようになりました。 [#75016](https://github.com/ClickHouse/ClickHouse/pull/75016) ([Kirill](https://github.com/kirillgarbar))。 -* `groupUniqArrayArrayMap` を `SimpleAggregateFunction` としてサポートするようにしました。 [#75034](https://github.com/ClickHouse/ClickHouse/pull/75034) ([Miel Donkers](https://github.com/mdonkers)). -* データベースエンジン `Iceberg` において、カタログの認証情報設定を非表示にしました。Closes [#74559](https://github.com/ClickHouse/ClickHouse/issues/74559). [#75080](https://github.com/ClickHouse/ClickHouse/pull/75080) ([Kseniia Sumarokova](https://github.com/kssenii)). -* `intExp2` / `intExp10`: 未定義だった動作を明確化: 引数が小さすぎる場合は 0 を返し、大きすぎる場合は `18446744073709551615` を返し、`NaN` の場合は例外をスローする。 [#75312](https://github.com/ClickHouse/ClickHouse/pull/75312) ([Vitaly Baranov](https://github.com/vitlibar)). -* `DatabaseIceberg` のカタログ設定で `s3.endpoint` をネイティブにサポートするようにしました。[#74558](https://github.com/ClickHouse/ClickHouse/issues/74558) をクローズ。[#75375](https://github.com/ClickHouse/ClickHouse/pull/75375)([Kseniia Sumarokova](https://github.com/kssenii))。 -* `SYSTEM DROP REPLICA` を実行するユーザーに十分な権限がない場合に、処理が黙って失敗しないようにしました。 [#75377](https://github.com/ClickHouse/ClickHouse/pull/75377) ([Bharat Nallan](https://github.com/bharatnc))。 -* いずれかの system ログがフラッシュに失敗した回数を記録する ProfileEvent を追加しました。 [#75466](https://github.com/ClickHouse/ClickHouse/pull/75466) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 復号および伸長処理に対するチェックと追加のログ出力を追加しました。 [#75471](https://github.com/ClickHouse/ClickHouse/pull/75471) ([Vitaly Baranov](https://github.com/vitlibar)). -* `parseTimeDelta` 関数でマイクロ記号 (U+00B5) をサポートしました。これにより、マイクロ記号 (U+00B5) とギリシャ文字ミュー (U+03BC) の両方がマイクロ秒を表す有効な表現として認識されるようになり、ClickHouse の動作が Go の実装に合わせられました([time.go を参照](https://github.com/golang/go/blob/ad7b46ee4ac1cee5095d64b01e8cf7fcda8bee5e/src/time/time.go#L983C19-L983C20) および [time/format.go](https://github.com/golang/go/blob/ad7b46ee4ac1cee5095d64b01e8cf7fcda8bee5e/src/time/format.go#L1608-L1609))。[#75472](https://github.com/ClickHouse/ClickHouse/pull/75472)([Vitaly Orlov](https://github.com/orloffv))。 -* サーバー設定(`send_settings_to_client`)を、クライアント側コード(例: INSERT データの解析やクエリ結果のフォーマット)がサーバーの `users.xml` とユーザープロファイルの設定を使用するかどうかを制御するクライアント設定(`apply_settings_from_server`)に置き換えました。これを無効にした場合、クライアントのコマンドライン、セッション、およびクエリからの設定のみが使用されます。これはネイティブクライアントにのみ適用され(HTTP などには適用されません)、またクエリ処理の大部分(処理自体はサーバー側で行われます)には適用されない点に注意してください。 [#75478](https://github.com/ClickHouse/ClickHouse/pull/75478) ([Michael Kolupaev](https://github.com/al13n321))。 -* 構文エラーに対するエラーメッセージを改善しました。以前は、クエリが大きすぎるうえに、長さが制限を超えるトークンが非常に大きな文字列リテラルだった場合、その理由を説明するメッセージが、この非常に長いトークンの 2 つの例のあいだに埋もれてしまっていました。UTF-8 を含むクエリがエラーメッセージ内で誤って切り詰められる問題を修正しました。クエリ断片が過剰に引用符で囲まれてしまう問題を修正しました。これにより [#75473](https://github.com/ClickHouse/ClickHouse/issues/75473) がクローズされました。 [#75561](https://github.com/ClickHouse/ClickHouse/pull/75561)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* ストレージ `S3(Azure)Queue` にプロファイルイベントを追加しました。[#75618](https://github.com/ClickHouse/ClickHouse/pull/75618)([Kseniia Sumarokova](https://github.com/kssenii))。 -* 互換性のため、サーバーからクライアントへの設定送信(`send_settings_to_client=false`)を無効化しました(この機能は利便性向上のため、後にクライアント設定として再実装される予定です)。[#75648](https://github.com/ClickHouse/ClickHouse/pull/75648) ([Michael Kolupaev](https://github.com/al13n321))。 -* バックグラウンドスレッドで定期的に読み取った複数のソースからの情報に基づいて内部メモリトラッカーを補正できるようにする設定 `memory_worker_correct_memory_tracker` を追加しました。 [#75714](https://github.com/ClickHouse/ClickHouse/pull/75714) ([Antonio Andelic](https://github.com/antonio2368))。 -* `system.processes` に `normalized_query_hash` 列を追加しました。注記: `normalizedQueryHash` 関数を使えばその場で容易に計算できますが、後続の変更に備えるために必要です。 [#75756](https://github.com/ClickHouse/ClickHouse/pull/75756) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* `system.tables` をクエリしても、存在しないデータベース上に作成された `Merge` テーブルがあっても例外は発生しません。`Hive` テーブルには複雑な処理をさせない方針のため、`getTotalRows` メソッドを削除しました。 [#75772](https://github.com/ClickHouse/ClickHouse/pull/75772) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* バックアップの start_time/end_time をマイクロ秒精度で保存するようにしました。 [#75929](https://github.com/ClickHouse/ClickHouse/pull/75929) ([Aleksandr Musorin](https://github.com/AVMusorin)). -* RSS による補正が行われていない内部グローバルメモリトラッカーの値を示す `MemoryTrackingUncorrected` メトリクスを追加しました。[#75935](https://github.com/ClickHouse/ClickHouse/pull/75935) ([Antonio Andelic](https://github.com/antonio2368)). -* `PostgreSQL` や `MySQL` のテーブル関数で、`localhost:1234/handle` のようなエンドポイントをパースできるようにしました。これは、[https://github.com/ClickHouse/ClickHouse/pull/52503](https://github.com/ClickHouse/ClickHouse/pull/52503) で導入されていたリグレッションを修正するものです。 [#75944](https://github.com/ClickHouse/ClickHouse/pull/75944) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 -* サーバー設定 `throw_on_unknown_workload` を追加しました。この設定により、未知の値に設定された `workload` で実行されたクエリに対する挙動を選択できます。無制限のアクセスを許可する(デフォルト)か、`RESOURCE_ACCESS_DENIED` エラーをスローするかを選択できます。すべてのクエリで workload スケジューリングの使用を強制したい場合に有用です。 [#75999](https://github.com/ClickHouse/ClickHouse/pull/75999) ([Sergei Trifonov](https://github.com/serxa))。 -* 不要な場合は、`ARRAY JOIN` でサブカラムを `getSubcolumn` に書き換えないようにしました。 [#76018](https://github.com/ClickHouse/ClickHouse/pull/76018) ([Pavel Kruglov](https://github.com/Avogar)). -* テーブル読み込み時のコーディネーションエラーをリトライするようにしました。 [#76020](https://github.com/ClickHouse/ClickHouse/pull/76020) ([Alexander Tokmakov](https://github.com/tavplubix)). -* `SYSTEM FLUSH LOGS` で個々のログを個別にフラッシュできるようにしました。 [#76132](https://github.com/ClickHouse/ClickHouse/pull/76132) ([Raúl Marín](https://github.com/Algunenano)). -* `/binary` サーバーのページを改良しました。Morton 曲線の代わりに Hilbert 曲線を使用します。正方形内に 512 MB 分のアドレスを表示し、正方形全体をよりよく埋められるようにしました(以前のバージョンでは、アドレスは正方形の半分しか埋めていませんでした)。アドレスの色分けは関数名ではなくライブラリ名に基づいて行うようにしました。領域の外側にも少し多めにスクロールできるようにしました。[#76192](https://github.com/ClickHouse/ClickHouse/pull/76192)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* TOO_MANY_SIMULTANEOUS_QUERIES エラーが発生した場合に ON CLUSTER クエリを再試行するようにしました。 [#76352](https://github.com/ClickHouse/ClickHouse/pull/76352) ([Patrick Galbraith](https://github.com/CaptTofu)). -* サーバーの相対的な CPU 不足を計算する非同期メトリック `CPUOverload` を追加しました。 [#76404](https://github.com/ClickHouse/ClickHouse/pull/76404) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* `output_format_pretty_max_rows` のデフォルト値を 10000 から 1000 に変更しました。使い勝手の観点からこの方がよいと考えています。 [#76407](https://github.com/ClickHouse/ClickHouse/pull/76407) ([Alexey Milovidov](https://github.com/alexey-milovidov)). - - - - - -#### バグ修正(公式安定版リリースにおけるユーザー可視の不具合) - -* クエリ解釈中に例外が発生した場合、それらがクエリで指定されたカスタムフォーマットで出力されるように修正しました。以前のバージョンでは、クエリで指定されたフォーマットではなく、デフォルトフォーマットで例外が整形されていました。これにより [#55422](https://github.com/ClickHouse/ClickHouse/issues/55422) が解決されました。 [#74994](https://github.com/ClickHouse/ClickHouse/pull/74994) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* SQLite の型マッピングを修正(整数型を `int64` に、浮動小数点型を `float64` にマッピングするように変更)。 [#73853](https://github.com/ClickHouse/ClickHouse/pull/73853) ([Joanna Hulboj](https://github.com/jh0x))。 -* 親スコープにおける識別子の解決を修正しました。`WITH` 句内で式のエイリアスを使用できるようにしました。[#58994](https://github.com/ClickHouse/ClickHouse/issues/58994) を修正。[#62946](https://github.com/ClickHouse/ClickHouse/issues/62946) を修正。[#63239](https://github.com/ClickHouse/ClickHouse/issues/63239) を修正。[#65233](https://github.com/ClickHouse/ClickHouse/issues/65233) を修正。[#71659](https://github.com/ClickHouse/ClickHouse/issues/71659) を修正。[#71828](https://github.com/ClickHouse/ClickHouse/issues/71828) を修正。[#68749](https://github.com/ClickHouse/ClickHouse/issues/68749) を修正。[#66143](https://github.com/ClickHouse/ClickHouse/pull/66143)([Dmitry Novik](https://github.com/novikd))。 -* negate 関数の単調性を修正しました。以前のバージョンでは、`x` がプライマリキーである場合、`select * from a where -x = -42;` というクエリが誤った結果を返すことがありました。 [#71440](https://github.com/ClickHouse/ClickHouse/pull/71440) ([Michael Kolupaev](https://github.com/al13n321))。 -* arrayIntersect における空タプルの扱いを修正。これにより [#72578](https://github.com/ClickHouse/ClickHouse/issues/72578) が解消されます。[#72581](https://github.com/ClickHouse/ClickHouse/pull/72581)([Amos Bird](https://github.com/amosbird))。 -* 不正なプレフィックスが付いた JSON サブオブジェクトのサブカラムの読み取りを修正。 [#73182](https://github.com/ClickHouse/ClickHouse/pull/73182) ([Pavel Kruglov](https://github.com/Avogar)). +* `LowCardinality` 列のメモリ上でのサイズ計算を修正しました。 [#74688](https://github.com/ClickHouse/ClickHouse/pull/74688) ([Nikita Taranov](https://github.com/nickitat)). +* `processors_profile_log` テーブルに、TTL を 30 日とするデフォルト設定が追加されました。[#66139](https://github.com/ClickHouse/ClickHouse/pull/66139) ([Ilya Yatsishin](https://github.com/qoega))。 +* クラスタ構成でシャードに名前を付けられるようにしました。 [#72276](https://github.com/ClickHouse/ClickHouse/pull/72276) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). +* Prometheus の remote write 応答の成功ステータスコードを 200/OK から 204/NoContent に変更。 [#74170](https://github.com/ClickHouse/ClickHouse/pull/74170) ([Michael Dempsey](https://github.com/bluestealth)). +* サーバーを再起動することなく、その場で `max_remote_read_network_bandwidth_for_serve` と `max_remote_write_network_bandwidth_for_server` を再読み込みできるようにしました。 [#74206](https://github.com/ClickHouse/ClickHouse/pull/74206) ([Kai Zhu](https://github.com/nauu)). +* バックアップの作成時にチェックサムを計算する際、blob パスを使用できるようにしました。 [#74729](https://github.com/ClickHouse/ClickHouse/pull/74729) ([Vitaly Baranov](https://github.com/vitlibar)). +* `system.query_cache` にクエリ ID 列を追加しました([#68205](https://github.com/ClickHouse/ClickHouse/issues/68205) を解決)。[#74982](https://github.com/ClickHouse/ClickHouse/pull/74982)([NamHoaiNguyen](https://github.com/NamHoaiNguyen))。 +* `ALTER TABLE ... FREEZE ...` クエリを `KILL QUERY` でキャンセルしたり、タイムアウト(`max_execution_time`)に達した際に自動的にキャンセルしたりできるようになりました。[#75016](https://github.com/ClickHouse/ClickHouse/pull/75016) ([Kirill](https://github.com/kirillgarbar)). +* `groupUniqArrayArrayMap` の `SimpleAggregateFunction` としてのサポートを追加しました。[#75034](https://github.com/ClickHouse/ClickHouse/pull/75034) ([Miel Donkers](https://github.com/mdonkers))。 +* データベースエンジン `Iceberg` でカタログ認証情報の設定を非表示にしました。Closes [#74559](https://github.com/ClickHouse/ClickHouse/issues/74559). [#75080](https://github.com/ClickHouse/ClickHouse/pull/75080) ([Kseniia Sumarokova](https://github.com/kssenii)). +* `intExp2` / `intExp10`: 未定義動作を次のように定めました:引数が小さすぎる場合は 0 を返し、大きすぎる場合は `18446744073709551615` を返し、`NaN` の場合は例外をスローします。 [#75312](https://github.com/ClickHouse/ClickHouse/pull/75312) ([Vitaly Baranov](https://github.com/vitlibar)). +* `DatabaseIceberg` のカタログ設定から `s3.endpoint` をネイティブにサポートしました。[#74558](https://github.com/ClickHouse/ClickHouse/issues/74558) をクローズしました。[#75375](https://github.com/ClickHouse/ClickHouse/pull/75375)([Kseniia Sumarokova](https://github.com/kssenii))。 +* ユーザーが `SYSTEM DROP REPLICA` を実行する際に十分な権限を持っていない場合に、エラーを出さずに失敗することがないようにしました。 [#75377](https://github.com/ClickHouse/ClickHouse/pull/75377) ([Bharat Nallan](https://github.com/bharatnc)). +* いずれかの system ログがフラッシュに失敗した回数を記録する ProfileEvent を追加しました。 [#75466](https://github.com/ClickHouse/ClickHouse/pull/75466) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* 復号および解凍のためのチェックと追加ログ出力を追加。 [#75471](https://github.com/ClickHouse/ClickHouse/pull/75471) ([Vitaly Baranov](https://github.com/vitlibar)). +* `parseTimeDelta` 関数にマイクロ記号 (U+00B5) のサポートを追加しました。これにより、マイクロ記号 (U+00B5) とギリシャ文字のミュー (U+03BC) の両方がマイクロ秒を表す有効な表記として認識されるようになり、ClickHouse の挙動が Go の実装([time.go を参照](https://github.com/golang/go/blob/ad7b46ee4ac1cee5095d64b01e8cf7fcda8bee5e/src/time/time.go#L983C19-L983C20) および [time/format.go](https://github.com/golang/go/blob/ad7b46ee4ac1cee5095d64b01e8cf7fcda8bee5e/src/time/format.go#L1608-L1609))と一致するようになりました。 [#75472](https://github.com/ClickHouse/ClickHouse/pull/75472) ([Vitaly Orlov](https://github.com/orloffv))。 +* サーバー設定(`send_settings_to_client`)を、クライアント側コード(例えば、INSERT データのパースやクエリ出力のフォーマット)がサーバーの `users.xml` およびユーザープロファイルに定義された設定を使用するかどうかを制御するクライアント設定(`apply_settings_from_server`)に置き換えました。これが無効な場合は、クライアントのコマンドライン、セッション、およびクエリからの設定のみが使用されます。これはネイティブクライアントにのみ適用される点(HTTP などには適用されない)と、クエリ処理の大部分(サーバー側で行われる)には適用されない点に注意してください。 [#75478](https://github.com/ClickHouse/ClickHouse/pull/75478) ([Michael Kolupaev](https://github.com/al13n321)). +* 構文エラー時のエラーメッセージを改善しました。以前は、クエリが長すぎて、長さが制限を超えるトークンが非常に大きな文字列リテラルだった場合、その原因を説明するメッセージが、この非常に長いトークンの2つの例のあいだに埋もれてしまっていました。エラーメッセージ内で UTF-8 文字を含むクエリが不正に切り詰められていた問題を修正しました。クエリの断片に対する過剰なクオートを修正しました。これにより [#75473](https://github.com/ClickHouse/ClickHouse/issues/75473) がクローズされました。[#75561](https://github.com/ClickHouse/ClickHouse/pull/75561)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* ストレージ `S3(Azure)Queue` にプロファイルイベントを追加しました。 [#75618](https://github.com/ClickHouse/ClickHouse/pull/75618) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 互換性維持のためにサーバーからクライアントへの設定送信(`send_settings_to_client=false`)を無効化しました(この機能は、使い勝手を向上させるため、後にクライアント設定として再実装される予定です)。 [#75648](https://github.com/ClickHouse/ClickHouse/pull/75648) ([Michael Kolupaev](https://github.com/al13n321))。 +* バックグラウンドスレッドで定期的に読み取られる複数の情報ソースの情報を用いて内部メモリトラッカーを補正できるようにする設定 `memory_worker_correct_memory_tracker` を追加しました。 [#75714](https://github.com/ClickHouse/ClickHouse/pull/75714) ([Antonio Andelic](https://github.com/antonio2368)). +* `system.processes` に `normalized_query_hash` カラムを追加しました。補足: `normalizedQueryHash` 関数を使えばオンザフライで簡単に計算できますが、後続の変更に備えるための準備として必要になります。 [#75756](https://github.com/ClickHouse/ClickHouse/pull/75756) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* `system.tables` をクエリしても、既に存在しないデータベース上に作成された `Merge` テーブルがあっても例外は発生しません。複雑な処理を行うことを許可していないため、`Hive` テーブルからは `getTotalRows` メソッドを削除しました。 [#75772](https://github.com/ClickHouse/ClickHouse/pull/75772) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* バックアップの start_time および end_time をマイクロ秒精度で保存するようにしました。 [#75929](https://github.com/ClickHouse/ClickHouse/pull/75929) ([Aleksandr Musorin](https://github.com/AVMusorin)). +* RSS による補正が行われていない内部のグローバルメモリトラッカーの値を示す `MemoryTrackingUncorrected` メトリクスを追加しました。 [#75935](https://github.com/ClickHouse/ClickHouse/pull/75935) ([Antonio Andelic](https://github.com/antonio2368)). +* `PostgreSQL` や `MySQL` のテーブル関数で、`localhost:1234/handle` のようなエンドポイントを解釈できるようにしました。これにより、[https://github.com/ClickHouse/ClickHouse/pull/52503](https://github.com/ClickHouse/ClickHouse/pull/52503) で発生したリグレッションが修正されます。[#75944](https://github.com/ClickHouse/ClickHouse/pull/75944)([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 +* サーバー設定 `throw_on_unknown_workload` を追加しました。この設定により、`workload` 設定に未知の値が指定されたクエリに対する動作を選択できます。無制限のアクセスを許可する(デフォルト)か、`RESOURCE_ACCESS_DENIED` エラーをスローするかを選べます。すべてのクエリでワークロードスケジューリングの使用を強制したい場合に有用です。 [#75999](https://github.com/ClickHouse/ClickHouse/pull/75999) ([Sergei Trifonov](https://github.com/serxa))。 +* 不要な場合は `ARRAY JOIN` でサブカラムを `getSubcolumn` に書き換えないようにしました。 [#76018](https://github.com/ClickHouse/ClickHouse/pull/76018) ([Pavel Kruglov](https://github.com/Avogar)). +* テーブル読み込み時に発生したコーディネーションエラーをリトライするようにしました。 [#76020](https://github.com/ClickHouse/ClickHouse/pull/76020) ([Alexander Tokmakov](https://github.com/tavplubix)). +* `SYSTEM FLUSH LOGS` で個別のログをフラッシュできるようにしました。 [#76132](https://github.com/ClickHouse/ClickHouse/pull/76132) ([Raúl Marín](https://github.com/Algunenano)). +* `/binary` サーバーのページを改善しました。Morton 曲線の代わりに Hilbert 曲線を使用します。正方形内に 512 MB 分のアドレスを表示し、正方形をより効率よく埋めるようにしました(以前のバージョンでは、アドレスは正方形の半分しか埋めていませんでした)。関数名ではなくライブラリ名を基準に、アドレスに色付けするようにしました。表示領域の外側まで、少し多めにスクロールできるようにしました。[#76192](https://github.com/ClickHouse/ClickHouse/pull/76192)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* TOO_MANY_SIMULTANEOUS_QUERIES エラーが発生した場合に ON CLUSTER クエリをリトライするようにしました。 [#76352](https://github.com/ClickHouse/ClickHouse/pull/76352) ([Patrick Galbraith](https://github.com/CaptTofu)). +* サーバーのCPU不足度合いを算出する非同期メトリクス `CPUOverload` を追加しました。 [#76404](https://github.com/ClickHouse/ClickHouse/pull/76404) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* `output_format_pretty_max_rows` のデフォルト値を 10000 から 1000 に変更しました。使い勝手の観点から、この方がより良いと考えています。 [#76407](https://github.com/ClickHouse/ClickHouse/pull/76407) ([Alexey Milovidov](https://github.com/alexey-milovidov)). + +#### バグ修正(公式安定版リリースでのユーザーにとって目に見える不具合) + +* クエリの解釈中に例外が発生した場合、それらがクエリで指定されたカスタムフォーマットで出力されるようにしました。以前のバージョンでは、クエリで指定されたフォーマットではなくデフォルトフォーマットで例外が出力されていました。これにより [#55422](https://github.com/ClickHouse/ClickHouse/issues/55422) が解決されました。 [#74994](https://github.com/ClickHouse/ClickHouse/pull/74994) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* SQLite の型マッピングを修正し、整数型を `int64` に、浮動小数点型を `float64` にマッピング。 [#73853](https://github.com/ClickHouse/ClickHouse/pull/73853) ([Joanna Hulboj](https://github.com/jh0x))。 +* 親スコープからの識別子解決を修正。`WITH` 句で式へのエイリアスの使用を許可。[#58994](https://github.com/ClickHouse/ClickHouse/issues/58994) を修正。[#62946](https://github.com/ClickHouse/ClickHouse/issues/62946) を修正。[#63239](https://github.com/ClickHouse/ClickHouse/issues/63239) を修正。[#65233](https://github.com/ClickHouse/ClickHouse/issues/65233) を修正。[#71659](https://github.com/ClickHouse/ClickHouse/issues/71659) を修正。[#71828](https://github.com/ClickHouse/ClickHouse/issues/71828) を修正。[#68749](https://github.com/ClickHouse/ClickHouse/issues/68749) を修正。[#66143](https://github.com/ClickHouse/ClickHouse/pull/66143)([Dmitry Novik](https://github.com/novikd))。 +* `negate` 関数の単調性を修正しました。以前のバージョンでは、`x` がプライマリキーである場合、クエリ `select * from a where -x = -42;` が誤った結果を返してしまう場合がありました。 [#71440](https://github.com/ClickHouse/ClickHouse/pull/71440) ([Michael Kolupaev](https://github.com/al13n321)). +* arrayIntersect における空タプルの扱いを修正しました。これにより [#72578](https://github.com/ClickHouse/ClickHouse/issues/72578) が解決されました。[#72581](https://github.com/ClickHouse/ClickHouse/pull/72581)([Amos Bird](https://github.com/amosbird))。 +* 誤ったプレフィックスが付いた JSON サブオブジェクトのサブカラムの読み取りを修正。 [#73182](https://github.com/ClickHouse/ClickHouse/pull/73182) ([Pavel Kruglov](https://github.com/Avogar)). * クライアントとサーバー間の通信で Native フォーマットの設定が正しく伝播されるようにしました。 [#73924](https://github.com/ClickHouse/ClickHouse/pull/73924) ([Pavel Kruglov](https://github.com/Avogar)). -* 一部のストレージでサポートされていない型を検出するチェックを追加。 [#74218](https://github.com/ClickHouse/ClickHouse/pull/74218) ([Pavel Kruglov](https://github.com/Avogar)). -* macOS の PostgreSQL インターフェース経由で実行した `INSERT INTO SELECT` クエリで発生するクラッシュを修正しました(issue [#72938](https://github.com/ClickHouse/ClickHouse/issues/72938))。[#74231](https://github.com/ClickHouse/ClickHouse/pull/74231)([Artem Yurov](https://github.com/ArtemYurov))。 +* 一部のストレージでサポートされていない型をチェックするようにしました。 [#74218](https://github.com/ClickHouse/ClickHouse/pull/74218) ([Pavel Kruglov](https://github.com/Avogar)). +* macOS 上で PostgreSQL インターフェイス経由の `INSERT INTO SELECT` クエリ実行時に発生していたクラッシュを修正しました(issue [#72938](https://github.com/ClickHouse/ClickHouse/issues/72938))。 [#74231](https://github.com/ClickHouse/ClickHouse/pull/74231)([Artem Yurov](https://github.com/ArtemYurov))。 * レプリケーテッドデータベースにおける未初期化の `max_log_ptr` を修正しました。 [#74336](https://github.com/ClickHouse/ClickHouse/pull/74336) ([Konstantin Morozov](https://github.com/k-morozov)). -* Interval 型の挿入時に発生するクラッシュを修正(issue [#74299](https://github.com/ClickHouse/ClickHouse/issues/74299))。 [#74478](https://github.com/ClickHouse/ClickHouse/pull/74478)([NamHoaiNguyen](https://github.com/NamHoaiNguyen))。 -* 定数 JSON リテラルの整形を修正しました。以前は、クエリを別のサーバーに送信する際に構文エラーを引き起こす可能性がありました。 [#74533](https://github.com/ClickHouse/ClickHouse/pull/74533) ([Pavel Kruglov](https://github.com/Avogar)). -* 暗黙的なプロジェクションが有効な場合に、定数パーティション式を使用すると `CREATE` クエリが失敗する不具合を修正しました。これにより [#74596](https://github.com/ClickHouse/ClickHouse/issues/74596) が解決されます。 [#74634](https://github.com/ClickHouse/ClickHouse/pull/74634) ([Amos Bird](https://github.com/amosbird))。 -* INSERT が例外で終了した後に接続が壊れた状態のまま残らないようにしました。 [#74740](https://github.com/ClickHouse/ClickHouse/pull/74740) ([Azat Khuzhin](https://github.com/azat)). -* 中間状態のまま残っていた接続を再利用しないようにしました。 [#74749](https://github.com/ClickHouse/ClickHouse/pull/74749) ([Azat Khuzhin](https://github.com/azat)). -* 型名が大文字でない場合に JSON 型宣言の解析時にクラッシュする問題を修正。 [#74784](https://github.com/ClickHouse/ClickHouse/pull/74784) ([Pavel Kruglov](https://github.com/Avogar)) -* Keeper: 接続が確立される前に切断された場合に発生する logical_error を修正。 [#74844](https://github.com/ClickHouse/ClickHouse/pull/74844) ([Michael Kolupaev](https://github.com/al13n321)). -* `AzureBlobStorage` を使用するテーブルが存在する場合にサーバーが起動できなかった問題を修正しました。テーブルは Azure へのリクエストを行わずに読み込まれます。 [#74880](https://github.com/ClickHouse/ClickHouse/pull/74880) ([Alexey Katsman](https://github.com/alexkats)). -* BACKUP および RESTORE 操作に対し、`query_log` において欠落していた `used_privileges` フィールドと `missing_privileges` フィールドを修正しました。 [#74887](https://github.com/ClickHouse/ClickHouse/pull/74887) ([Alexey Katsman](https://github.com/alexkats)). +* interval の挿入時に発生していたクラッシュを修正しました(issue [#74299](https://github.com/ClickHouse/ClickHouse/issues/74299))。[#74478](https://github.com/ClickHouse/ClickHouse/pull/74478)([NamHoaiNguyen](https://github.com/NamHoaiNguyen))。 +* 定数 JSON リテラルのフォーマットを修正。以前は、クエリを別のサーバーに送信する際に構文エラーを引き起こす可能性がありました。 [#74533](https://github.com/ClickHouse/ClickHouse/pull/74533) ([Pavel Kruglov](https://github.com/Avogar))。 +* 暗黙的プロジェクションが有効な状態で定数のパーティション式を使用した場合に、`CREATE` クエリが正しく生成されない問題を修正しました。これにより [#74596](https://github.com/ClickHouse/ClickHouse/issues/74596) が解決されます。 [#74634](https://github.com/ClickHouse/ClickHouse/pull/74634) ([Amos Bird](https://github.com/amosbird)). +* INSERT が例外で終了した後に接続が不正な状態のまま残らないようにしました。 [#74740](https://github.com/ClickHouse/ClickHouse/pull/74740) ([Azat Khuzhin](https://github.com/azat)). +* 中間状態のまま残っていた接続は再利用しないようにしました。 [#74749](https://github.com/ClickHouse/ClickHouse/pull/74749) ([Azat Khuzhin](https://github.com/azat)). +* JSON 型宣言をパースする際、型名が大文字でないとクラッシュする問題を修正。 [#74784](https://github.com/ClickHouse/ClickHouse/pull/74784) ([Pavel Kruglov](https://github.com/Avogar)). +* Keeper: 接続が確立される前に接続が切断されていた場合に発生する logical_error を修正。 [#74844](https://github.com/ClickHouse/ClickHouse/pull/74844) ([Michael Kolupaev](https://github.com/al13n321))。 +* `AzureBlobStorage` を使用しているテーブルが存在する場合にサーバーが起動できなかった問題を修正しました。テーブルは Azure へのリクエストを送信することなく読み込まれるようになりました。 [#74880](https://github.com/ClickHouse/ClickHouse/pull/74880) ([Alexey Katsman](https://github.com/alexkats)). +* BACKUP および RESTORE 操作において、`query_log` 内の `used_privileges` フィールドと `missing_privileges` フィールドが欠落していた問題を修正。 [#74887](https://github.com/ClickHouse/ClickHouse/pull/74887) ([Alexey Katsman](https://github.com/alexkats)). * HDFS の SELECT リクエスト中に SASL エラーが発生した場合に Kerberos チケットを更新するようにしました。 [#74930](https://github.com/ClickHouse/ClickHouse/pull/74930) ([inv2004](https://github.com/inv2004)). -* startup_scripts 内で Replicated データベースに対して実行されるクエリを修正。 [#74942](https://github.com/ClickHouse/ClickHouse/pull/74942) ([Azat Khuzhin](https://github.com/azat)). -* null-safe な比較が使用されている場合に、JOIN ON 句内で型エイリアスが付与された式に関する問題を修正しました。 [#74970](https://github.com/ClickHouse/ClickHouse/pull/74970) ([Vladimir Cherkasov](https://github.com/vdimir)). -* 削除操作が失敗した場合、part の状態を deleting から outdated に戻します。 [#74985](https://github.com/ClickHouse/ClickHouse/pull/74985) ([Sema Checherinda](https://github.com/CheSema)). -* 以前のバージョンでは、スカラーサブクエリがある場合、データフォーマットの初期化中(HTTP ヘッダーが書き出される前)に、サブクエリの処理から蓄積された進捗情報の書き込みを開始していました。これにより、X-ClickHouse-QueryId や X-ClickHouse-Format、Content-Type といった HTTP ヘッダーが失われていました。 [#74991](https://github.com/ClickHouse/ClickHouse/pull/74991)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* `database_replicated_allow_replicated_engine_arguments=0` に設定されている場合の `CREATE TABLE AS...` クエリを修正。 [#75000](https://github.com/ClickHouse/ClickHouse/pull/75000) ([Bharat Nallan](https://github.com/bharatnc)). -* INSERT 例外発生後にクライアントで接続が不正な状態のまま残ってしまう不具合を修正しました。 [#75030](https://github.com/ClickHouse/ClickHouse/pull/75030) ([Azat Khuzhin](https://github.com/azat)). -* PSQL レプリケーションにおける未捕捉の例外により発生するクラッシュを修正しました。 [#75062](https://github.com/ClickHouse/ClickHouse/pull/75062) ([Azat Khuzhin](https://github.com/azat)). -* SASL により任意の RPC 呼び出しが失敗する可能性があり、この修正により、krb5 チケットの有効期限が切れている場合に呼び出しを再試行できるようになりました。 [#75063](https://github.com/ClickHouse/ClickHouse/pull/75063) ([inv2004](https://github.com/inv2004)). -* `optimize_function_to_subcolumns` 設定が有効な場合の `Array`、`Map`、`Nullable(..)` カラムに対するインデックス(プライマリおよびセカンダリ)の扱いを修正しました。以前は、これらのカラムのインデックスが無視されることがありました。 [#75081](https://github.com/ClickHouse/ClickHouse/pull/75081) ([Anton Popov](https://github.com/CurtizJ)). -* `inner table` を使用してマテリアライズドビューを作成する場合は、`flatten_nested` を無効にしてください。そうしないと、そのようにフラット化されたカラムは使用できません。 [#75085](https://github.com/ClickHouse/ClickHouse/pull/75085) ([Christoph Wurm](https://github.com/cwurm)). -* 一部の IPv6 アドレス(::ffff:1.1.1.1 など)が `forwarded_for` フィールド内で誤って解釈され、例外が発生してクライアントが切断される問題を修正。 [#75133](https://github.com/ClickHouse/ClickHouse/pull/75133) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* LowCardinality の Nullable データ型に対する null セーフ JOIN の処理を修正しました。以前は、`IS NOT DISTINCT FROM`、`<=>`、`a IS NULL AND b IS NULL OR a == b` のような null セーフな比較を伴う JOIN ON が、LowCardinality 列で正しく動作していませんでした。[#75143](https://github.com/ClickHouse/ClickHouse/pull/75143)([Vladimir Cherkasov](https://github.com/vdimir))。 -* NumRowsCache の `total_number_of_rows` をカウントする際に `key_condition` を指定しないことを検証します。 [#75164](https://github.com/ClickHouse/ClickHouse/pull/75164) ([Daniil Ivanik](https://github.com/divanik)). -* 新しいアナライザーにより、未使用の補間を含むクエリを修正しました。 [#75173](https://github.com/ClickHouse/ClickHouse/pull/75173) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). -* CTE と INSERT を併用した際に発生していたクラッシュバグを修正。 [#75188](https://github.com/ClickHouse/ClickHouse/pull/75188) ([Shichao Jin](https://github.com/jsc0218)). -* Keeper の修正: ログをロールバックする際に、破損したチェンジログに書き込まないようにしました。 [#75197](https://github.com/ClickHouse/ClickHouse/pull/75197) ([Antonio Andelic](https://github.com/antonio2368)). -* 適切な箇所では `BFloat16` をスーパータイプとして使用するようにしました。この変更により、次の issue がクローズされます: [#74404](https://github.com/ClickHouse/ClickHouse/issues/74404)。[#75236](https://github.com/ClickHouse/ClickHouse/pull/75236)([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 -* any_join_distinct_right_table_keys を使用し、JOIN ON に OR が含まれる場合の JOIN 結果で発生する予期しないデフォルト値を修正。 [#75262](https://github.com/ClickHouse/ClickHouse/pull/75262) ([Vladimir Cherkasov](https://github.com/vdimir)). +* startup_scripts 内の Replicated データベースへのクエリを修正。 [#74942](https://github.com/ClickHouse/ClickHouse/pull/74942) ([Azat Khuzhin](https://github.com/azat)). +* null-safe な比較が使用されている場合に、JOIN ON 句で型エイリアスが付けられた式に関する問題を修正しました。 [#74970](https://github.com/ClickHouse/ClickHouse/pull/74970) ([Vladimir Cherkasov](https://github.com/vdimir)). +* 削除処理が失敗した場合、part の状態を「削除中」から「古い」に戻すようにしました。 [#74985](https://github.com/ClickHouse/ClickHouse/pull/74985) ([Sema Checherinda](https://github.com/CheSema)). +* 以前のバージョンでは、スカラーサブクエリが存在する場合、データフォーマットの初期化中に(サブクエリの処理から蓄積された)進捗情報の書き込みを開始しており、これは HTTP ヘッダーが書き出される前に行われていました。この結果、X-ClickHouse-QueryId や X-ClickHouse-Format などの HTTP ヘッダーおよび Content-Type が失われていました。 [#74991](https://github.com/ClickHouse/ClickHouse/pull/74991) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* `database_replicated_allow_replicated_engine_arguments=0` 設定時の `CREATE TABLE AS...` クエリを修正。 [#75000](https://github.com/ClickHouse/ClickHouse/pull/75000) ([Bharat Nallan](https://github.com/bharatnc)). +* INSERT 実行時に例外が発生した後、クライアントの接続が不正な状態のまま残ってしまう問題を修正。 [#75030](https://github.com/ClickHouse/ClickHouse/pull/75030) ([Azat Khuzhin](https://github.com/azat)). +* PSQL レプリケーションで捕捉されない例外が原因で発生していたクラッシュを修正。 [#75062](https://github.com/ClickHouse/ClickHouse/pull/75062) ([Azat Khuzhin](https://github.com/azat)). +* SASL が任意の RPC 呼び出しを失敗させる可能性があり、この修正により、`krb5` チケットの有効期限が切れている場合にその呼び出しを再試行できるようになりました。 [#75063](https://github.com/ClickHouse/ClickHouse/pull/75063) ([inv2004](https://github.com/inv2004)). +* `optimize_function_to_subcolumns` 設定が有効な場合の `Array`、`Map`、および `Nullable(..)` カラムに対するインデックス(プライマリおよびセカンダリ)の利用方法を修正しました。以前は、これらのカラムに対するインデックスが無視されてしまうことがありました。 [#75081](https://github.com/ClickHouse/ClickHouse/pull/75081) ([Anton Popov](https://github.com/CurtizJ)). +* 内部テーブルを持つマテリアライズドビューを作成する際には、そのようにフラット化されたカラムを使用できなくなるため、`flatten_nested` を無効にしてください。 [#75085](https://github.com/ClickHouse/ClickHouse/pull/75085) ([Christoph Wurm](https://github.com/cwurm)). +* forwarded_for フィールドで一部の IPv6 アドレス(::ffff:1.1.1.1 など)が誤って解釈されてしまい、その結果、例外とともにクライアントが切断されていた問題を修正。 [#75133](https://github.com/ClickHouse/ClickHouse/pull/75133) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* LowCardinality の Nullable データ型に対する null セーフな JOIN の処理を修正しました。以前は、`IS NOT DISTINCT FROM`、`<=>`、`a IS NULL AND b IS NULL OR a == b` のような null セーフな比較を伴う JOIN の ON 句が、LowCardinality 列に対して正しく動作していませんでした。 [#75143](https://github.com/ClickHouse/ClickHouse/pull/75143) ([Vladimir Cherkasov](https://github.com/vdimir))。 +* NumRowsCache の total_number_of_rows をカウントするときに key_condition を指定していないことを検証するようにしました。 [#75164](https://github.com/ClickHouse/ClickHouse/pull/75164) ([Daniil Ivanik](https://github.com/divanik)). +* 未使用の補間を含むクエリを新しいアナライザーで修正できるようにしました。 [#75173](https://github.com/ClickHouse/ClickHouse/pull/75173) ([János Benjamin Antal](https://github.com/antaljanosbenjamin))。 +* CTE と INSERT を併用した際に発生するクラッシュバグを修正。 [#75188](https://github.com/ClickHouse/ClickHouse/pull/75188) ([Shichao Jin](https://github.com/jsc0218)). +* Keeper の修正: ログをロールバックする際に、破損している changelog に書き込まないようにしました。 [#75197](https://github.com/ClickHouse/ClickHouse/pull/75197) ([Antonio Andelic](https://github.com/antonio2368)). +* 適切な箇所で `BFloat16` を上位型として使用するようにしました。これにより次の Issue がクローズされます: [#74404](https://github.com/ClickHouse/ClickHouse/issues/74404)。[#75236](https://github.com/ClickHouse/ClickHouse/pull/75236)([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 +* `any_join_distinct_right_table_keys` と JOIN の ON 句で OR を使用した場合に結合結果に予期しないデフォルト値が入る問題を修正しました。 [#75262](https://github.com/ClickHouse/ClickHouse/pull/75262) ([Vladimir Cherkasov](https://github.com/vdimir)). * azureblobstorage テーブルエンジンの認証情報をマスクするようにしました。 [#75319](https://github.com/ClickHouse/ClickHouse/pull/75319) ([Garrett Thomas](https://github.com/garrettthomaskth)). -* PostgreSQL、MySQL、SQLite のような外部データベースに対して、ClickHouse が誤ってフィルタープッシュダウンを行ってしまう場合がある問題を修正しました。これにより、次の Issue がクローズされます: [#71423](https://github.com/ClickHouse/ClickHouse/issues/71423)。[#75320](https://github.com/ClickHouse/ClickHouse/pull/75320)([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 -* Protobuf フォーマットでの出力中に、並列クエリ `SYSTEM DROP FORMAT SCHEMA CACHE` の実行によって発生する可能性があった Protobuf スキーマキャッシュのクラッシュを修正しました。 [#75357](https://github.com/ClickHouse/ClickHouse/pull/75357) ([Pavel Kruglov](https://github.com/Avogar)). -* `HAVING` からのフィルタが parallel replicas 使用時にプッシュダウンされる際に発生し得る、論理エラーまたは未初期化メモリの問題を修正しました。[#75363](https://github.com/ClickHouse/ClickHouse/pull/75363)([Vladimir Cherkasov](https://github.com/vdimir))。 -* `icebergS3`、`icebergAzure` の table function およびテーブルエンジンにおける機密情報を非表示にしました。 [#75378](https://github.com/ClickHouse/ClickHouse/pull/75378) ([Kseniia Sumarokova](https://github.com/kssenii)). -* トリム対象文字が計算結果として空文字列になる場合の `TRIM` 関数が、正しく処理されるようになりました。例: `SELECT TRIM(LEADING concat('') FROM 'foo')`(Issue [#69922](https://github.com/ClickHouse/ClickHouse/issues/69922))。 [#75399](https://github.com/ClickHouse/ClickHouse/pull/75399)([Manish Gill](https://github.com/mgill25))。 -* IOutputFormat のデータ競合を修正。 [#75448](https://github.com/ClickHouse/ClickHouse/pull/75448) ([Pavel Kruglov](https://github.com/Avogar)). -* 分散テーブル上での JOIN で Array 型の JSON サブカラムを使用した際に発生する可能性がある `Elements ... and ... of Nested data structure ... (Array columns) have different array sizes` エラーを修正しました。 [#75512](https://github.com/ClickHouse/ClickHouse/pull/75512) ([Pavel Kruglov](https://github.com/Avogar)). -* `CODEC(ZSTD, DoubleDelta)` によるデータ破損の問題を修正しました。 [#70031](https://github.com/ClickHouse/ClickHouse/issues/70031) をクローズ。[#75548](https://github.com/ClickHouse/ClickHouse/pull/75548)([Konstantin Bogdanov](https://github.com/thevar1able))。 -* allow_feature_tier と compatibility MergeTree 設定の相互作用を修正。 [#75635](https://github.com/ClickHouse/ClickHouse/pull/75635) ([Raúl Marín](https://github.com/Algunenano)). -* ファイルの再試行時に `system.s3queue_log` の `processed_rows` の値が誤っていた問題を修正しました。 [#75666](https://github.com/ClickHouse/ClickHouse/pull/75666) ([Kseniia Sumarokova](https://github.com/kssenii)). -* マテリアライズドビューが URL エンジンに書き込みを行い、接続障害が発生した場合に `materialized_views_ignore_errors` 設定が尊重されるようになりました。 [#75679](https://github.com/ClickHouse/ClickHouse/pull/75679) ([Christoph Wurm](https://github.com/cwurm)). -* 異なる型のカラム間で複数の非同期 `RENAME` クエリ(`alter_sync = 0`)を実行した後に、`MergeTree` テーブルから読み取る際にまれに発生していたクラッシュを修正しました。 [#75693](https://github.com/ClickHouse/ClickHouse/pull/75693) ([Anton Popov](https://github.com/CurtizJ)). -* 一部の `UNION ALL` を含むクエリで発生していた `Block structure mismatch in QueryPipeline stream` エラーを修正。 [#75715](https://github.com/ClickHouse/ClickHouse/pull/75715) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). -* PK カラムを `ALTER MODIFY` した際、そのカラムを PK に使用している Projection を再構築するようにしました。以前は、Projection の PK に使用されているカラムを `ALTER MODIFY` した後に実行した `SELECT` で、`CANNOT_READ_ALL_DATA` エラーが発生することがありました。 [#75720](https://github.com/ClickHouse/ClickHouse/pull/75720) ([Pavel Kruglov](https://github.com/Avogar)). -* スカラーサブクエリに対する `ARRAY JOIN` の誤った結果を修正(`analyzer` 使用時)。[#75732](https://github.com/ClickHouse/ClickHouse/pull/75732)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 -* `DistinctSortedStreamTransform` におけるヌルポインタのデリファレンスを修正しました。 [#75734](https://github.com/ClickHouse/ClickHouse/pull/75734) ([Nikita Taranov](https://github.com/nickitat)). -* `allow_suspicious_ttl_expressions` の動作を修正。[#75771](https://github.com/ClickHouse/ClickHouse/pull/75771) ([Aleksei Filatov](https://github.com/aalexfvk)). -* 関数 `translate` における未初期化メモリの読み取りを修正しました。これにより [#75592](https://github.com/ClickHouse/ClickHouse/issues/75592) をクローズしました。 [#75794](https://github.com/ClickHouse/ClickHouse/pull/75794)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* Native フォーマットにおいて、フォーマット設定が JSON に文字列フォーマットとして伝播されるようにしました。 [#75832](https://github.com/ClickHouse/ClickHouse/pull/75832) ([Pavel Kruglov](https://github.com/Avogar)). -* 設定変更履歴に、v24.12 でハッシュ結合アルゴリズムの並列実行がデフォルトで有効化されたことを記録しました。これは、互換性レベルとして v24.12 より前のバージョンが設定されている場合、ClickHouse は引き続き非並列のハッシュ結合を使用することを意味します。 [#75870](https://github.com/ClickHouse/ClickHouse/pull/75870) ([Robert Schulze](https://github.com/rschu1ze)). -* 暗黙的に追加された min-max インデックスを持つテーブルを新しいテーブルにコピーできない不具合を修正しました(issue [#75677](https://github.com/ClickHouse/ClickHouse/issues/75677))。[#75877](https://github.com/ClickHouse/ClickHouse/pull/75877)([Smita Kulkarni](https://github.com/SmitaRKulkarni))。 -* `clickhouse-library-bridge` はファイルシステムから任意のライブラリを開くことができるため、分離された環境内でのみ安全に実行できます。`clickhouse-server` と同一環境で実行された場合の脆弱性を防ぐため、設定で指定された場所以下にライブラリのパスを制限します。この脆弱性は、**Arseniy Dugin** によって [ClickHouse Bug Bounty Program](https://github.com/ClickHouse/ClickHouse/issues/38986) を通じて発見されました。[#75954](https://github.com/ClickHouse/ClickHouse/pull/75954)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 一部のメタデータに JSON シリアライゼーションを使用していましたが、これは誤りでした。JSON は、ゼロバイトを含むバイナリデータを文字列リテラル内でサポートしていないためです。SQL クエリにはバイナリデータや不正な UTF-8 が含まれ得るため、メタデータファイルでもこれをサポートする必要があります。同時に、ClickHouse の `JSONEachRow` などのフォーマットは、バイナリデータの完全なラウンドトリップを優先するために JSON 標準から逸脱することで、この制約を回避しています。動機についてはこちらを参照してください: [https://github.com/ClickHouse/ClickHouse/pull/73668#issuecomment-2560501790](https://github.com/ClickHouse/ClickHouse/pull/73668#issuecomment-2560501790)。解決策は、`Poco::JSON` ライブラリを ClickHouse における JSON フォーマットシリアライゼーションと整合させることです。これにより [#73668](https://github.com/ClickHouse/ClickHouse/issues/73668) がクローズされます。[#75963](https://github.com/ClickHouse/ClickHouse/pull/75963)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* ストレージ `S3Queue` のコミット上限チェックを修正。[#76104](https://github.com/ClickHouse/ClickHouse/pull/76104) ([Kseniia Sumarokova](https://github.com/kssenii))。 -* `add_minmax_index_for_numeric_columns` / `add_minmax_index_for_string_columns` によって数値/文字列カラムに minmax インデックスを自動追加する MergeTree テーブルの ATTACH を修正。 [#76139](https://github.com/ClickHouse/ClickHouse/pull/76139) ([Azat Khuzhin](https://github.com/azat)). -* ジョブの親スレッド側のスタックトレース(`enable_job_stack_trace` 設定)が出力されない問題を修正しました。`enable_job_stack_trace` 設定がスレッドに正しく伝播されず、その結果スタックトレースの内容がこの設定を常に反映しない問題を修正しました。 [#76191](https://github.com/ClickHouse/ClickHouse/pull/76191) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* `ALTER RENAME` に `CREATE USER` 権限が必要となっていた誤った権限チェックを修正しました。[#74372](https://github.com/ClickHouse/ClickHouse/issues/74372) をクローズしました。[#76241](https://github.com/ClickHouse/ClickHouse/pull/76241)([pufit](https://github.com/pufit))。 -* ビッグエンディアンのアーキテクチャにおける FixedString への reinterpretAs を修正しました。 [#76253](https://github.com/ClickHouse/ClickHouse/pull/76253) ([Azat Khuzhin](https://github.com/azat)). -* S3Queue で発生していた論理エラー "Expected current processor {} to be equal to {} for bucket {}" を修正しました。 [#76358](https://github.com/ClickHouse/ClickHouse/pull/76358) ([Kseniia Sumarokova](https://github.com/kssenii))。 -* Memory データベースでの ALTER 実行時に発生するデッドロックを修正。 [#76359](https://github.com/ClickHouse/ClickHouse/pull/76359) ([Azat Khuzhin](https://github.com/azat)). -* `WHERE` 句の条件に `pointInPolygon` 関数が含まれる場合のインデックス解析における論理エラーを修正。 [#76360](https://github.com/ClickHouse/ClickHouse/pull/76360) ([Anton Popov](https://github.com/CurtizJ)). -* シグナルハンドラ内の安全ではない可能性のある呼び出しを修正。 [#76549](https://github.com/ClickHouse/ClickHouse/pull/76549) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* PartsSplitter の reverse key サポートを修正しました。これにより [#73400](https://github.com/ClickHouse/ClickHouse/issues/73400) が解決されます。[#73418](https://github.com/ClickHouse/ClickHouse/pull/73418)([Amos Bird](https://github.com/amosbird))。 - - +* ClickHouse が PostgreSQL、MySQL、SQLite などの外部データベースに対して誤ってフィルタープッシュダウンを行ってしまう可能性があった不具合を修正しました。これにより次の issue が解決されました: [#71423](https://github.com/ClickHouse/ClickHouse/issues/71423)。[#75320](https://github.com/ClickHouse/ClickHouse/pull/75320)([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 +* Protobuf フォーマットでの出力中や、並列クエリ `SYSTEM DROP FORMAT SCHEMA CACHE` の実行時に発生する可能性がある Protobuf スキーマキャッシュのクラッシュを修正しました。 [#75357](https://github.com/ClickHouse/ClickHouse/pull/75357) ([Pavel Kruglov](https://github.com/Avogar)). +* 並列レプリカで `HAVING` からのフィルタがプッシュダウンされる場合に発生する可能性があった論理エラーまたは未初期化メモリの問題を修正しました。 [#75363](https://github.com/ClickHouse/ClickHouse/pull/75363) ([Vladimir Cherkasov](https://github.com/vdimir)). +* `icebergS3`、`icebergAzure` テーブル関数およびテーブルエンジンで機密情報をマスクするようにしました。 [#75378](https://github.com/ClickHouse/ClickHouse/pull/75378) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 計算結果として空文字列になるトリム対象文字を指定した `TRIM` 関数が正しく処理されるようになりました。例: `SELECT TRIM(LEADING concat('') FROM 'foo')`(Issue [#69922](https://github.com/ClickHouse/ClickHouse/issues/69922))。[#75399](https://github.com/ClickHouse/ClickHouse/pull/75399)([Manish Gill](https://github.com/mgill25))。 +* IOutputFormat のデータレースを修正。 [#75448](https://github.com/ClickHouse/ClickHouse/pull/75448) ([Pavel Kruglov](https://github.com/Avogar)). +* 分散テーブルに対する JOIN で Array 型の JSON サブカラムが使用されている場合に発生する可能性のある `Elements ... and ... of Nested data structure ... (Array columns) have different array sizes` エラーを修正しました。 [#75512](https://github.com/ClickHouse/ClickHouse/pull/75512) ([Pavel Kruglov](https://github.com/Avogar)). +* `CODEC(ZSTD, DoubleDelta)` を使用してデータ破損を修正。[#70031](https://github.com/ClickHouse/ClickHouse/issues/70031) をクローズ。[#75548](https://github.com/ClickHouse/ClickHouse/pull/75548)([Konstantin Bogdanov](https://github.com/thevar1able))。 +* allow_feature_tier と compatibility MergeTree 設定間の相互作用を修正しました。 [#75635](https://github.com/ClickHouse/ClickHouse/pull/75635) ([Raúl Marín](https://github.com/Algunenano)). +* ファイルの処理が再試行された場合に `system.s3queue_log` 内の `processed_rows` の値が正しくならない問題を修正しました。 [#75666](https://github.com/ClickHouse/ClickHouse/pull/75666) ([Kseniia Sumarokova](https://github.com/kssenii))。 +* マテリアライズドビューが URL エンジンに対して書き込みを行っていて接続の問題が発生している場合にも、`materialized_views_ignore_errors` が尊重されるようにしました。 [#75679](https://github.com/ClickHouse/ClickHouse/pull/75679) ([Christoph Wurm](https://github.com/cwurm)). +* 異なる型のカラム間で複数の非同期 `RENAME` クエリ(`alter_sync = 0`)を実行した後に、`MergeTree` テーブルからの読み取り時にまれに発生していたクラッシュを修正しました。 [#75693](https://github.com/ClickHouse/ClickHouse/pull/75693) ([Anton Popov](https://github.com/CurtizJ)). +* 一部の `UNION ALL` を含むクエリで発生していた `Block structure mismatch in QueryPipeline stream` エラーを修正しました。 [#75715](https://github.com/ClickHouse/ClickHouse/pull/75715) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). +* projection の PK に使用されているカラムを `ALTER MODIFY` した場合、その projection を再構築するようにしました。以前は、projection の PK に使用されているカラムを `ALTER MODIFY` した後の `SELECT` クエリ実行時に `CANNOT_READ_ALL_DATA` エラーが発生する可能性がありました。 [#75720](https://github.com/ClickHouse/ClickHouse/pull/75720) ([Pavel Kruglov](https://github.com/Avogar)). +* スカラーサブクエリに対する `ARRAY JOIN` の結果が誤る問題を修正(アナライザー使用時)。 [#75732](https://github.com/ClickHouse/ClickHouse/pull/75732) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). +* `DistinctSortedStreamTransform` における null ポインタ逆参照を修正しました。 [#75734](https://github.com/ClickHouse/ClickHouse/pull/75734) ([Nikita Taranov](https://github.com/nickitat)). +* `allow_suspicious_ttl_expressions` の挙動を修正。 [#75771](https://github.com/ClickHouse/ClickHouse/pull/75771) ([Aleksei Filatov](https://github.com/aalexfvk)). +* 関数 `translate` における未初期化メモリの読み取りを修正しました。これにより [#75592](https://github.com/ClickHouse/ClickHouse/issues/75592) が解決されます。 [#75794](https://github.com/ClickHouse/ClickHouse/pull/75794) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Native フォーマットで JSON を文字列フォーマットとして扱う際に、フォーマット設定が伝播されるようにしました。 [#75832](https://github.com/ClickHouse/ClickHouse/pull/75832) ([Pavel Kruglov](https://github.com/Avogar)). +* `settings` の変更履歴に、v24.12 で並列ハッシュ `JOIN` アルゴリズムがデフォルトで有効化されたことを記録しました。これにより、互換性レベルが v24.12 より古い値に設定されている場合、ClickHouse は引き続き非並列のハッシュを用いて `JOIN` を実行します。 [#75870](https://github.com/ClickHouse/ClickHouse/pull/75870) ([Robert Schulze](https://github.com/rschu1ze)). +* 暗黙的に追加された min-max インデックスを持つテーブルを新しいテーブルにコピーできなかった不具合を修正しました(issue [#75677](https://github.com/ClickHouse/ClickHouse/issues/75677))。[#75877](https://github.com/ClickHouse/ClickHouse/pull/75877)([Smita Kulkarni](https://github.com/SmitaRKulkarni))。 +* `clickhouse-library-bridge` はファイルシステムから任意のライブラリを開くことができるため、本来は隔離された環境内でのみ実行するのが安全です。`clickhouse-server` の近くで実行された場合に生じる脆弱性を防ぐため、設定で指定した場所のみにライブラリのパスを制限します。この脆弱性は **Arseniy Dugin** によって [ClickHouse Bug Bounty Program](https://github.com/ClickHouse/ClickHouse/issues/38986) を通じて発見されました。[#75954](https://github.com/ClickHouse/ClickHouse/pull/75954)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 一部のメタデータのシリアル化に JSON を使用していましたが、これは誤りでした。JSON は文字列リテラル内部でのバイナリデータ(ゼロバイトを含む)をサポートしていないためです。一方で、SQL クエリにはバイナリデータや無効な UTF-8 が含まれうるため、メタデータファイル側でもこれをサポートする必要があります。同時に、ClickHouse の `JSONEachRow` などのフォーマットは、バイナリデータの完全なラウンドトリップを優先し、JSON 標準から意図的に逸脱することでこの問題を回避しています。その背景については次を参照してください: [https://github.com/ClickHouse/ClickHouse/pull/73668#issuecomment-2560501790](https://github.com/ClickHouse/ClickHouse/pull/73668#issuecomment-2560501790)。解決策は、`Poco::JSON` ライブラリを ClickHouse における JSON フォーマットのシリアル化と整合させることです。これにより [#73668](https://github.com/ClickHouse/ClickHouse/issues/73668) がクローズされました。[#75963](https://github.com/ClickHouse/ClickHouse/pull/75963)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* ストレージ `S3Queue` におけるコミット制限のチェックを修正しました。[#76104](https://github.com/ClickHouse/ClickHouse/pull/76104)([Kseniia Sumarokova](https://github.com/kssenii))。 +* `add_minmax_index_for_numeric_columns`/`add_minmax_index_for_string_columns` による自動インデックスを持つ MergeTree テーブルの ATTACH を修正しました。 [#76139](https://github.com/ClickHouse/ClickHouse/pull/76139) ([Azat Khuzhin](https://github.com/azat)). +* ジョブの親スレッドのスタックトレースが、`enable_job_stack_trace` 設定を有効にしても出力されない問題を修正しました。また、`enable_job_stack_trace` 設定がスレッドに正しく伝播せず、その結果スタックトレースの内容が常にこの設定を反映しない問題も修正しました。 [#76191](https://github.com/ClickHouse/ClickHouse/pull/76191) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* `ALTER RENAME` に対して誤って `CREATE USER` 権限を要求していたパーミッションチェックを修正しました。 [#74372](https://github.com/ClickHouse/ClickHouse/issues/74372) をクローズしました。 [#76241](https://github.com/ClickHouse/ClickHouse/pull/76241) ([pufit](https://github.com/pufit))。 +* ビッグエンディアンアーキテクチャにおける FixedString を用いた reinterpretAs の動作を修正。 [#76253](https://github.com/ClickHouse/ClickHouse/pull/76253) ([Azat Khuzhin](https://github.com/azat)). +* S3Queue に存在した論理エラー「Expected current processor {} to be equal to {} for bucket {}」を修正しました。 [#76358](https://github.com/ClickHouse/ClickHouse/pull/76358) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Memory データベースにおける ALTER のデッドロックを修正しました。 [#76359](https://github.com/ClickHouse/ClickHouse/pull/76359) ([Azat Khuzhin](https://github.com/azat)). +* `WHERE` 句に `pointInPolygon` 関数が含まれている場合のインデックス解析時の論理エラーを修正。 [#76360](https://github.com/ClickHouse/ClickHouse/pull/76360) ([Anton Popov](https://github.com/CurtizJ)). +* シグナルハンドラ内の潜在的に安全でない呼び出しを修正。 [#76549](https://github.com/ClickHouse/ClickHouse/pull/76549) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* PartsSplitter における reverse key のサポートを修正。これにより [#73400](https://github.com/ClickHouse/ClickHouse/issues/73400) を解決。 [#73418](https://github.com/ClickHouse/ClickHouse/pull/73418) ([Amos Bird](https://github.com/amosbird))。 #### ビルド/テスト/パッケージングの改善 -* ARM と Intel Mac の両方での HDFS のビルドをサポート。[#74244](https://github.com/ClickHouse/ClickHouse/pull/74244) ([Yan Xin](https://github.com/yxheartipp))。 -* Darwin 向けにクロスコンパイルする際に ICU と GRPC を有効化。[#75922](https://github.com/ClickHouse/ClickHouse/pull/75922) ([Raúl Marín](https://github.com/Algunenano))。 -* 組み込み LLVM 19 へ更新。[#75148](https://github.com/ClickHouse/ClickHouse/pull/75148) ([Konstantin Bogdanov](https://github.com/thevar1able))。 -* docker イメージで `default` ユーザーのネットワークアクセスを無効化。[#75259](https://github.com/ClickHouse/ClickHouse/pull/75259) ([Mikhail f. Shiryaev](https://github.com/Felixoid))。`entrypoint.sh` でデフォルトのバイナリを起動する場合にのみ実行されるよう、すべての clickhouse-server 関連のアクションを関数として切り出し。長らく先送りされていた改善は [#50724](https://github.com/ClickHouse/ClickHouse/issues/50724) で提案されていたもの。`users.xml` から値を取得するために `clickhouse-extract-from-config` にスイッチ `--users` を追加。[#75643](https://github.com/ClickHouse/ClickHouse/pull/75643) ([Mikhail f. Shiryaev](https://github.com/Felixoid))。 -* バイナリから約 20MB のデッドコードを削除。[#76226](https://github.com/ClickHouse/ClickHouse/pull/76226) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 - -### ClickHouse リリース 25.1, 2025-01-28 {#251} +* ARM および Intel Mac の両方での HDFS のビルドをサポート。[#74244](https://github.com/ClickHouse/ClickHouse/pull/74244) ([Yan Xin](https://github.com/yxheartipp)). +* Darwin 向けにクロスコンパイルする際に ICU と GRPC を有効化。[#75922](https://github.com/ClickHouse/ClickHouse/pull/75922) ([Raúl Marín](https://github.com/Algunenano)). +* 同梱の LLVM を 19 に更新。[#75148](https://github.com/ClickHouse/ClickHouse/pull/75148) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* Docker イメージでユーザー `default` のネットワークアクセスを無効化。[#75259](https://github.com/ClickHouse/ClickHouse/pull/75259) ([Mikhail f. Shiryaev](https://github.com/Felixoid)). すべての clickhouse-server 関連処理を関数化し、`entrypoint.sh` でデフォルトのバイナリを起動するときにのみ実行されるように変更。長らく先送りされていた改善であり、[#50724](https://github.com/ClickHouse/ClickHouse/issues/50724) で提案されていたもの。`users.xml` から値を取得するためのスイッチ `--users` を `clickhouse-extract-from-config` に追加。[#75643](https://github.com/ClickHouse/ClickHouse/pull/75643) ([Mikhail f. Shiryaev](https://github.com/Felixoid)). +* バイナリから約 20MB の不要コードを削除。[#76226](https://github.com/ClickHouse/ClickHouse/pull/76226) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +### ClickHouse リリース 25.1, 2025-01-28 {#251} #### 後方互換性のない変更 -* `JSONEachRowWithProgress` は、進捗が発生するたびに進捗情報を書き出すようになりました。これまでのバージョンでは、結果の各ブロックごとにのみ進捗が表示されていたため、実質的に有用ではありませんでした。進捗の表示方法を変更し、ゼロの値は表示しないようにしました。これにより [#70800](https://github.com/ClickHouse/ClickHouse/issues/70800) が解決されました。 [#73834](https://github.com/ClickHouse/ClickHouse/pull/73834) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* `Merge` テーブルは、基になるテーブル群のカラムのユニオンを使用し、共通の型を導出することで構造を統一するようになりました。これにより [#64864](https://github.com/ClickHouse/ClickHouse/issues/64864) が解決されました。特定のケースでは、この変更は後方互換性がない可能性があります。例としては、テーブル間に共通の型が存在しないものの、最初のテーブルの型への変換は依然として可能な場合 (たとえば UInt64 と Int64、あるいは任意の数値型と String の組み合わせ) などが挙げられます。従来の動作に戻したい場合は、`merge_table_max_tables_to_look_for_schema_inference` を `1` に設定するか、`compatibility` を `24.12` 以前に設定してください。 [#73956](https://github.com/ClickHouse/ClickHouse/pull/73956) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Parquet 出力フォーマットは、Date および DateTime カラムを、生の数値として書き出すのではなく、Parquet がサポートする日付/時刻型に変換するようになりました。`DateTime` は `DateTime64(3)` (以前は `UInt32`) になりました。`output_format_parquet_datetime_as_uint32` を設定すると、従来の動作に戻せます。`Date` は `Date32` (以前は `UInt16`) になりました。 [#70950](https://github.com/ClickHouse/ClickHouse/pull/70950) ([Michael Kolupaev](https://github.com/al13n321)). -* 既定では、`ORDER BY` および `less/greater/equal/etc` といった比較関数内で、`JSON` / `Object` / `AggregateFunction` のような比較不可能な型を使用できないようになりました。 [#73276](https://github.com/ClickHouse/ClickHouse/pull/73276) ([Pavel Kruglov](https://github.com/Avogar)). -* 廃止済みの `MaterializedMySQL` データベースエンジンは削除され、今後は利用できません。 [#73879](https://github.com/ClickHouse/ClickHouse/pull/73879) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* `mysql` ディクショナリソースは、`SHOW TABLE STATUS` クエリを実行しなくなりました。これは、最近の MySQL バージョンや InnoDB テーブルに対しては、このクエリが有用な情報を提供しないためです。これにより [#72636](https://github.com/ClickHouse/ClickHouse/issues/72636) が解決されました。この変更は後方互換性を保っていますが、気付いてもらえるよう、このカテゴリに含めています。 [#73914](https://github.com/ClickHouse/ClickHouse/pull/73914) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* `CHECK TABLE` クエリには、専用の `CHECK` 権限が必要になりました。以前のバージョンでは、これらのクエリを実行するには `SHOW TABLES` 権限だけで十分でした。しかし、`CHECK TABLE` クエリは重い処理となり得る一方で、`SELECT` クエリ向けの通常のクエリ複雑性制限が適用されませんでした。その結果、DoS の可能性がありました。 [#74471](https://github.com/ClickHouse/ClickHouse/pull/74471) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* 関数 `h3ToGeo()` は、結果を (ジオメトリ関数における標準的な順序である) `(lat, lon)` の順で返すようになりました。従来の `(lon, lat)` の結果順序を維持したいユーザーは、設定 `h3togeo_lon_lat_result_order = true` を有効にできます。 [#74719](https://github.com/ClickHouse/ClickHouse/pull/74719) ([Manish Gill](https://github.com/mgill25)). -* 新しい MongoDB ドライバーがデフォルトになりました。従来のドライバーの使用を続けたいユーザーは、サーバー設定 `use_legacy_mongodb_integration` を true に設定してください。 [#73359](https://github.com/ClickHouse/ClickHouse/pull/73359) ([Robert Schulze](https://github.com/rschu1ze)). - +* `JSONEachRowWithProgress` は、進捗が発生するたびに進捗情報を書き出すようになりました。以前のバージョンでは、結果の各ブロックの後にしか進捗が表示されず、実用的ではありませんでした。進捗の表示方法を変更し、進捗が 0 の場合は表示しません。この変更により [#70800](https://github.com/ClickHouse/ClickHouse/issues/70800) が解決されました。[#73834](https://github.com/ClickHouse/ClickHouse/pull/73834)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* `Merge` テーブルは、列の和集合を取り共通の型を導出することで、配下のテーブルの構造を統一します。この変更により [#64864](https://github.com/ClickHouse/ClickHouse/issues/64864) が解決されました。特定のケースでは、この変更は後方互換性がない可能性があります。1 つの例として、テーブル間に共通の型が存在しないが、最初のテーブルの型への変換は可能な場合があります(UInt64 と Int64、または任意の数値型と String の組み合わせなど)。旧来の動作に戻したい場合は、`merge_table_max_tables_to_look_for_schema_inference` を `1` に設定するか、`compatibility` を `24.12` 以前に設定してください。[#73956](https://github.com/ClickHouse/ClickHouse/pull/73956)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* Parquet 出力フォーマットは、`Date` および `DateTime` 列を生の数値として書き出すのではなく、Parquet がサポートする日付/時刻型に変換します。`DateTime` は `DateTime64(3)`(以前は `UInt32`)になります。`output_format_parquet_datetime_as_uint32` を設定することで、従来の動作に戻せます。`Date` は `Date32`(以前は `UInt16`)になります。[#70950](https://github.com/ClickHouse/ClickHouse/pull/70950)([Michael Kolupaev](https://github.com/al13n321))。 +* デフォルトでは、`ORDER BY` および `less/greater/equal/etc` といった比較関数に、`JSON` / `Object` / `AggregateFunction` のような比較不可能な型を使用できないようになりました。[#73276](https://github.com/ClickHouse/ClickHouse/pull/73276)([Pavel Kruglov](https://github.com/Avogar))。 +* 廃止された `MaterializedMySQL` データベースエンジンは削除され、利用できなくなりました。[#73879](https://github.com/ClickHouse/ClickHouse/pull/73879)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* `mysql` ディクショナリソースは、もはや `SHOW TABLE STATUS` クエリを実行しません。これは、InnoDB テーブルおよび最近の MySQL バージョン全般において、この情報が有用ではないためです。この変更により [#72636](https://github.com/ClickHouse/ClickHouse/issues/72636) が解決されました。この変更は後方互換性がありますが、気付けるようにこのカテゴリに含めています。[#73914](https://github.com/ClickHouse/ClickHouse/pull/73914)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* `CHECK TABLE` クエリには、新たに `CHECK` 権限が必要になりました。以前のバージョンでは、これらのクエリを実行するには `SHOW TABLES` 権限だけで十分でした。しかし、`CHECK TABLE` クエリは重くなる可能性があり、`SELECT` クエリに適用される通常のクエリ複雑性の制限は適用されませんでした。その結果、DoS 攻撃の可能性がありました。[#74471](https://github.com/ClickHouse/ClickHouse/pull/74471)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* `h3ToGeo()` 関数は、結果を標準的な幾何関数の順序である `(lat, lon)` で返すようになりました。従来の結果順序 `(lon, lat)` を保持したいユーザーは、設定 `h3togeo_lon_lat_result_order = true` を有効にしてください。[#74719](https://github.com/ClickHouse/ClickHouse/pull/74719)([Manish Gill](https://github.com/mgill25))。 +* 新しい MongoDB ドライバーがデフォルトになりました。レガシードライバーの利用を継続したいユーザーは、サーバー設定 `use_legacy_mongodb_integration` を true に設定してください。[#73359](https://github.com/ClickHouse/ClickHouse/pull/73359)([Robert Schulze](https://github.com/rschu1ze))。 #### 新機能 -* `SELECT` クエリを送信した直後、その実行中に未完了(バックグラウンドプロセスによってマテリアライズされていない)な mutation を適用できる機能を追加しました。これは `apply_mutations_on_fly` を設定することで有効化できます。 [#74877](https://github.com/ClickHouse/ClickHouse/pull/74877) ([Anton Popov](https://github.com/CurtizJ)). -* Iceberg テーブルの時間関連の変換パーティション操作に対するパーティションプルーニングを実装しました。 [#72044](https://github.com/ClickHouse/ClickHouse/pull/72044) ([Daniil Ivanik](https://github.com/divanik))。 -* MergeTree のソートキーおよびスキップインデックスでサブカラムをサポートしました。[#72644](https://github.com/ClickHouse/ClickHouse/pull/72644) ([Pavel Kruglov](https://github.com/Avogar)). -* `Apache Arrow`/`Parquet`/`ORC` からの `HALF_FLOAT` 値の読み取りをサポートしました(`Float32` 型として読み込まれます)。これにより [#72960](https://github.com/ClickHouse/ClickHouse/issues/72960) がクローズされました。IEEE-754 の half float は `BFloat16` と同じではないことに注意してください。[#73835](https://github.com/ClickHouse/ClickHouse/issues/73835) がクローズされました。[#73836](https://github.com/ClickHouse/ClickHouse/pull/73836)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* `system.trace_log` テーブルには、新たに `symbols` と `lines` という 2 つのカラムが追加され、シンボル化されたスタックトレースが格納されます。これにより、プロファイリング情報の収集とエクスポートが容易になります。これは `trace_log` 内のサーバー設定値 `symbolize` によって制御されており、デフォルトで有効になっています。 [#73896](https://github.com/ClickHouse/ClickHouse/pull/73896) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* テーブルで自動インクリメントの連番を生成するために使用できる新しい関数 `generateSerialID` を追加しました。[kazalika](https://github.com/kazalika) による [#64310](https://github.com/ClickHouse/ClickHouse/issues/64310) の継続です。これにより [#62485](https://github.com/ClickHouse/ClickHouse/issues/62485) がクローズされます。[#73950](https://github.com/ClickHouse/ClickHouse/pull/73950)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* DDL クエリ用に、`query1 PARALLEL WITH query2 PARALLEL WITH query3 ... PARALLEL WITH queryN` という構文を追加しました。これは、サブクエリ `{query1, query2, ... queryN}` を互いに並列に実行できるようになる(かつ、その方が望ましい)ことを意味します。 [#73983](https://github.com/ClickHouse/ClickHouse/pull/73983) ([Vitaly Baranov](https://github.com/vitlibar))。 -* デシリアライズ済みの skipping index granule 用インメモリキャッシュを追加しました。これにより、skipping index を使用する繰り返し実行されるクエリが高速になるはずです。新しいキャッシュのサイズは、サーバー設定 `skipping_index_cache_size` と `skipping_index_cache_max_entries` で制御されます。キャッシュ導入の主な動機となったのはベクトル類似性インデックスで、これらのクエリは今回の変更により大幅に高速化されました。 [#70102](https://github.com/ClickHouse/ClickHouse/pull/70102) ([Robert Schulze](https://github.com/rschu1ze)). -* これにより、埋め込み Web UI はクエリ実行中にプログレスバーを表示するようになりました。クエリをキャンセルできるようになりました。合計レコード数と、速度に関する詳細情報を表示します。データが到着し次第、テーブルをインクリメンタルにレンダリングできます。HTTP 圧縮が有効になりました。テーブルのレンダリングが高速になりました。テーブルヘッダーは固定表示(sticky)になりました。セルを選択し、矢印キーで移動できるようになりました。選択されたセルのアウトラインによってセルが小さくなってしまう問題を修正しました。セルはマウスホバー時ではなく、選択時のみ拡大されるようになりました。受信データのレンダリングを停止するタイミングは、サーバー側ではなくクライアント側で決定されます。数値の桁区切りをハイライト表示します。全体的なデザインを刷新し、より力強い印象になりました。サーバーに接続可能かどうかと認証情報の正当性をチェックし、サーバーバージョンと稼働時間を表示します。クラウドアイコンは、Safari を含むすべてのフォントで輪郭表示されます。ネストされたデータ型内の大きな整数が、より適切にレンダリングされるようになりました。`inf` / `nan` を正しく表示します。列ヘッダー上にマウスを置いたときにデータ型を表示します。[#74204](https://github.com/ClickHouse/ClickHouse/pull/74204)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* MergeTree によって管理されるカラムに対して、デフォルトで min-max(スキップ)インデックスを作成できるようにする機能を追加しました。数値カラム向けには設定項目 `add_minmax_index_for_numeric_columns` を、文字列カラム向けには設定項目 `add_minmax_index_for_string_columns` を使用します。現時点ではどちらの設定も無効になっているため、まだ動作の変更はありません。 [#74266](https://github.com/ClickHouse/ClickHouse/pull/74266) ([Smita Kulkarni](https://github.com/SmitaRKulkarni))。 -* `system.query_log`、ネイティブプロトコルの ClientInfo、およびサーバーログに `script_query_number` と `script_line_number` フィールドを追加しました。これにより [#67542](https://github.com/ClickHouse/ClickHouse/issues/67542) がクローズされました。この機能の立ち上げに貢献した [#68133](https://github.com/ClickHouse/ClickHouse/issues/68133) の [pinsvin00](https://github.com/pinsvin00) に謝意を表します。[#74477](https://github.com/ClickHouse/ClickHouse/pull/74477)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 集約関数 `sequenceMatchEvents` を追加しました。この関数は、パターン内で最も長いイベントシーケンスに対して、一致したイベントのタイムスタンプを返します。 [#72349](https://github.com/ClickHouse/ClickHouse/pull/72349) ([UnamedRus](https://github.com/UnamedRus)). -* 関数 `arrayNormalizedGini` を追加しました。 [#72823](https://github.com/ClickHouse/ClickHouse/pull/72823) ([flynn](https://github.com/ucasfl))。 -* `DateTime64` に対する minus 演算子のサポートを追加し、`DateTime64` 同士および `DateTime` との減算を可能にしました。 [#74482](https://github.com/ClickHouse/ClickHouse/pull/74482) ([Li Yin](https://github.com/liyinsg))。 - - +* `SELECT` クエリの実行時に、バックグラウンドプロセスによるマテリアライズがまだ完了していない mutation を、送信直後に適用できるようになりました。`apply_mutations_on_fly` を設定することで有効化できます。 [#74877](https://github.com/ClickHouse/ClickHouse/pull/74877) ([Anton Popov](https://github.com/CurtizJ)). +* `Iceberg` テーブルにおいて、時間変換を用いるパーティション操作向けのパーティションプルーニングを実装しました。 [#72044](https://github.com/ClickHouse/ClickHouse/pull/72044) ([Daniil Ivanik](https://github.com/divanik)). +* MergeTree のソートキーおよびスキップインデックスでサブカラムのサポートを追加。 [#72644](https://github.com/ClickHouse/ClickHouse/pull/72644) ([Pavel Kruglov](https://github.com/Avogar)). +* `Apache Arrow`/`Parquet`/`ORC` からの `HALF_FLOAT` 値の読み取りをサポートしました(`Float32` として読み込まれます)。これにより [#72960](https://github.com/ClickHouse/ClickHouse/issues/72960) が解決されます。IEEE-754 の half float(半精度浮動小数点数)は `BFloat16` とは異なることに注意してください。[#73835](https://github.com/ClickHouse/ClickHouse/issues/73835) がクローズされます。[#73836](https://github.com/ClickHouse/ClickHouse/pull/73836)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* `system.trace_log` テーブルに、シンボル化されたスタックトレースを格納する 2 つの新しいカラム `symbols` と `lines` が追加されます。これにより、プロファイル情報の収集とエクスポートが容易になります。これは、`trace_log` セクション内のサーバー設定値 `symbolize` によって制御されており、デフォルトで有効になっています。 [#73896](https://github.com/ClickHouse/ClickHouse/pull/73896) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* テーブル内で自動インクリメントされた番号を生成するために使用できる新しい関数 `generateSerialID` を追加しました。[kazalika](https://github.com/kazalika) による [#64310](https://github.com/ClickHouse/ClickHouse/issues/64310) の継続対応です。この変更により [#62485](https://github.com/ClickHouse/ClickHouse/issues/62485) がクローズされます。[#73950](https://github.com/ClickHouse/ClickHouse/pull/73950)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* DDL クエリ向けに、構文 `query1 PARALLEL WITH query2 PARALLEL WITH query3 ... PARALLEL WITH queryN` を追加しました。これは、クエリ `{query1, query2, ... queryN}` を互いに並列実行できるようにする(かつ、その方が望ましい)ことを意味します。[#73983](https://github.com/ClickHouse/ClickHouse/pull/73983) ([Vitaly Baranov](https://github.com/vitlibar))。 +* デシリアライズ済みの skipping index のグラニュール用インメモリキャッシュを追加しました。これにより、skipping index を利用する同一クエリの繰り返し実行が高速になります。新しいキャッシュのサイズは、サーバー設定 `skipping_index_cache_size` と `skipping_index_cache_max_entries` によって制御されます。このキャッシュを追加した主な動機はベクトル類似度インデックスであり、これにより処理が大幅に高速化されました。[#70102](https://github.com/ClickHouse/ClickHouse/pull/70102)([Robert Schulze](https://github.com/rschu1ze))。 +* 現在、組み込み Web UI にはクエリ実行中に進行状況バーが表示されるようになりました。これにより、クエリをキャンセルできます。総レコード数と、速度に関する詳細な情報を表示します。テーブルは、データが届き次第、段階的にレンダリングできるようになりました。HTTP 圧縮を有効にしました。テーブルのレンダリングがより高速になりました。テーブルヘッダーが固定表示(スティッキー)になりました。セルを選択でき、矢印キーで移動できます。選択されたセルのアウトラインによってセルが小さくなってしまう問題を修正しました。セルはマウスホバーでは拡大せず、選択時のみ拡大されます。受信データのレンダリングをいつ停止するかは、サーバー側ではなくクライアント側で決定されます。数値の桁区切りを強調表示します。全体的なデザインが刷新され、より力強い印象になりました。サーバーに到達可能かどうかと認証情報の正しさをチェックし、サーバーのバージョンと稼働時間を表示します。クラウドアイコンは、Safari を含むあらゆるフォントで輪郭線付きで表示されます。ネストされたデータ型内の大きな整数がより適切にレンダリングされます。`inf` / `nan` を正しく表示します。カラムヘッダーにマウスオーバーした際にデータ型を表示します。[#74204](https://github.com/ClickHouse/ClickHouse/pull/74204)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* MergeTree によって管理されるカラムに対して、デフォルトで min-max (skipping) インデックスを作成できるようにする設定 `add_minmax_index_for_numeric_columns`(数値カラム用)および `add_minmax_index_for_string_columns`(文字列カラム用)を追加しました。現時点では両方の設定は無効になっているため、まだ動作の変更はありません。 [#74266](https://github.com/ClickHouse/ClickHouse/pull/74266) ([Smita Kulkarni](https://github.com/SmitaRKulkarni))。 +* `system.query_log`、ネイティブプロトコルの ClientInfo、およびサーバーログに `script_query_number` と `script_line_number` フィールドを追加。これにより [#67542](https://github.com/ClickHouse/ClickHouse/issues/67542) がクローズされます。以前に [#68133](https://github.com/ClickHouse/ClickHouse/issues/68133) でこの機能の実装に着手した [pinsvin00](https://github.com/pinsvin00) に感謝します。[#74477](https://github.com/ClickHouse/ClickHouse/pull/74477)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* パターン内で最長のイベント列に対して、一致したイベントのタイムスタンプを返す集約関数 `sequenceMatchEvents` を追加しました。 [#72349](https://github.com/ClickHouse/ClickHouse/pull/72349) ([UnamedRus](https://github.com/UnamedRus)). +* 関数 `arrayNormalizedGini` を追加しました。[#72823](https://github.com/ClickHouse/ClickHouse/pull/72823) ([flynn](https://github.com/ucasfl)). +* `DateTime64` に対するマイナス演算子をサポートし、`DateTime64` 同士および `DateTime` との減算を可能にしました。 [#74482](https://github.com/ClickHouse/ClickHouse/pull/74482) ([Li Yin](https://github.com/liyinsg)). #### 実験的機能 -* `BFloat16` データ型は本番環境で利用可能になりました。 [#73840](https://github.com/ClickHouse/ClickHouse/pull/73840) ([Alexey Milovidov](https://github.com/alexey-milovidov)). - +* `BFloat16` データ型は本番環境で利用可能になりました。 [#73840](https://github.com/ClickHouse/ClickHouse/pull/73840) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 #### パフォーマンスの向上 -* 関数 `indexHint` を最適化しました。これにより、関数 `indexHint` の引数としてのみ使用されている列はテーブルから読み出されなくなりました。 [#74314](https://github.com/ClickHouse/ClickHouse/pull/74314) ([Anton Popov](https://github.com/CurtizJ))。もし `indexHint` 関数があなたのエンタープライズデータアーキテクチャの中核を成しているのであれば、この最適化はまさに命を救ってくれるでしょう。 -* `parallel_hash` JOIN アルゴリズムにおける `max_joined_block_size_rows` 設定を、より正確に考慮するようにしました。これにより、`hash` アルゴリズムと比較してメモリ使用量が増加してしまうことを防ぎます。 [#74630](https://github.com/ClickHouse/ClickHouse/pull/74630) ([Nikita Taranov](https://github.com/nickitat)). -* `MergingAggregated` ステップに対して、クエリプランレベルでの述語プッシュダウン最適化をサポートしました。これにより、Analyzer を使用する一部のクエリのパフォーマンスが向上します。 [#74073](https://github.com/ClickHouse/ClickHouse/pull/74073) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). -* `parallel_hash` JOIN アルゴリズムのプローブフェーズから、左テーブルブロックをハッシュで分割する処理が削除されました。[#73089](https://github.com/ClickHouse/ClickHouse/pull/73089) ([Nikita Taranov](https://github.com/nickitat))。 -* RowBinary 入力フォーマットを最適化し、[#63805](https://github.com/ClickHouse/ClickHouse/issues/63805) をクローズ。 [#65059](https://github.com/ClickHouse/ClickHouse/pull/65059)([Pavel Kruglov](https://github.com/Avogar))。 -* `optimize_on_insert` が有効な場合、レベル 1 のパーツとして書き込みます。これにより、新規に書き込まれたパーツに対して、`FINAL` を伴うクエリの最適化をいくつか利用できるようになります。 [#73132](https://github.com/ClickHouse/ClickHouse/pull/73132) ([Anton Popov](https://github.com/CurtizJ)). -* 低レベルな最適化により、文字列デシリアライズを高速化しました。 [#65948](https://github.com/ClickHouse/ClickHouse/pull/65948) ([Nikita Taranov](https://github.com/nickitat)). -* レコード間の等価比較(マージ時など)を行う際には、一致しない可能性が最も高い列から行の比較を開始するようになりました。 [#63780](https://github.com/ClickHouse/ClickHouse/pull/63780) ([UnamedRus](https://github.com/UnamedRus)). -* 右側の結合テーブルをキーで再ランキングすることで、Grace ハッシュ結合のパフォーマンスを改善しました。 [#72237](https://github.com/ClickHouse/ClickHouse/pull/72237) ([kevinyhzou](https://github.com/KevinyhZou)). -* `arrayROCAUC` と `arrayAUCPR` が曲線全体に対する部分面積を計算できるようにし、巨大なデータセットに対してその計算を並列化できるようにしました。 [#72904](https://github.com/ClickHouse/ClickHouse/pull/72904) ([Emmanuel](https://github.com/emmanuelsdias)). +* 関数 `indexHint` を最適化しました。これにより、関数 `indexHint` の引数としてのみ使用されている列はテーブルから読み込まれなくなりました。[#74314](https://github.com/ClickHouse/ClickHouse/pull/74314) ([Anton Popov](https://github.com/CurtizJ))。もし `indexHint` 関数がエンタープライズデータアーキテクチャの中核を成しているのであれば、この最適化はあなたの命を救ってくれるはずです。 +* `parallel_hash` JOIN アルゴリズムに対する `max_joined_block_size_rows` 設定の扱いをより正確にしました。これにより、`hash` アルゴリズムと比較してメモリ消費量が増加することを回避できます。 [#74630](https://github.com/ClickHouse/ClickHouse/pull/74630) ([Nikita Taranov](https://github.com/nickitat)). +* `MergingAggregated` ステップに対して、クエリプランレベルでの述語プッシュダウン最適化に対応しました。これにより、アナライザーを使用する一部のクエリのパフォーマンスが向上します。 [#74073](https://github.com/ClickHouse/ClickHouse/pull/74073) ([Nikolai Kochetov](https://github.com/KochetovNicolai))。 +* `parallel_hash` JOIN アルゴリズムのプローブフェーズから、左側テーブルのブロックをハッシュで分割する処理を削除しました。 [#73089](https://github.com/ClickHouse/ClickHouse/pull/73089) ([Nikita Taranov](https://github.com/nickitat))。 +* RowBinary 入力フォーマットを最適化しました。[#63805](https://github.com/ClickHouse/ClickHouse/issues/63805) をクローズしました。[#65059](https://github.com/ClickHouse/ClickHouse/pull/65059)([Pavel Kruglov](https://github.com/Avogar))。 +* `optimize_on_insert` が有効な場合、レベル 1 のパーツとして書き込みます。これにより、新しく書き込まれたパーツに対する `FINAL` 付きクエリで複数の最適化を利用できるようになります。 [#73132](https://github.com/ClickHouse/ClickHouse/pull/73132) ([Anton Popov](https://github.com/CurtizJ)). +* 低レベルな最適化により文字列のデシリアライズを高速化しました。[#65948](https://github.com/ClickHouse/ClickHouse/pull/65948) ([Nikita Taranov](https://github.com/nickitat)). +* マージなどでレコード間の等価比較を行う際、最も値が異なりやすい列から行の比較を開始するようになりました。 [#63780](https://github.com/ClickHouse/ClickHouse/pull/63780) ([UnamedRus](https://github.com/UnamedRus)). +* キーに基づいて右側の結合テーブルを再ランキングすることで、grace hash join のパフォーマンスを改善しました。 [#72237](https://github.com/ClickHouse/ClickHouse/pull/72237) ([kevinyhzou](https://github.com/KevinyhZou)). +* `arrayROCAUC` と `arrayAUCPR` が曲線全体に対する部分面積を計算できるようになり、巨大なデータセットに対して計算を並列化できるようになりました。 [#72904](https://github.com/ClickHouse/ClickHouse/pull/72904) ([Emmanuel](https://github.com/emmanuelsdias)). * アイドル状態のスレッドが過剰に生成されないようにしました。 [#72920](https://github.com/ClickHouse/ClickHouse/pull/72920) ([Guo Wangyang](https://github.com/guowangy)). -* `table function` で波かっこによる展開のみを行う場合は、blob ストレージのキーを列挙しないようにしました。[#73333](https://github.com/ClickHouse/ClickHouse/issues/73333) をクローズ。[#73518](https://github.com/ClickHouse/ClickHouse/pull/73518) ([Konstantin Bogdanov](https://github.com/thevar1able))。 -* Nullable 引数に対して実行される関数のショートサーキット評価の最適化。 [#73820](https://github.com/ClickHouse/ClickHouse/pull/73820) ([李扬](https://github.com/taiyang-li)). -* 非関数列には `maskedExecute` を適用しないようにし、ショートサーキット実行のパフォーマンスを改善しました。 [#73965](https://github.com/ClickHouse/ClickHouse/pull/73965) ([lgbo](https://github.com/lgbo-ustc)). -* パフォーマンスを向上させるため、`Kafka`/`NATS`/`RabbitMQ`/`FileLog` 向けの入力フォーマットでのヘッダー自動検出機能を無効化しました。 [#74006](https://github.com/ClickHouse/ClickHouse/pull/74006) ([Azat Khuzhin](https://github.com/azat)). -* グルーピングセットによる集約後のパイプラインを、より高い並列度で実行するようにしました。 [#74082](https://github.com/ClickHouse/ClickHouse/pull/74082) ([Nikita Taranov](https://github.com/nickitat)). -* `MergeTreeReadPool` におけるクリティカルセクションの範囲を縮小。 [#74202](https://github.com/ClickHouse/ClickHouse/pull/74202) ([Guo Wangyang](https://github.com/guowangy)). -* 並列レプリカにおけるパフォーマンスを改善しました。クエリイニシエーターでは、並列レプリカプロトコルに関係しないパケットのデシリアライズは、常にパイプラインスレッド内で行われるようになりました。以前は、パイプラインのスケジューリングを担当するスレッドで行われることがあり、その結果イニシエーターの応答性が低下し、パイプライン実行が遅延する可能性がありました。 [#74398](https://github.com/ClickHouse/ClickHouse/pull/74398) ([Igor Nikonov](https://github.com/devcrafter))。 -* Keeper における大規模なマルチリクエストのパフォーマンスを改善しました。 [#74849](https://github.com/ClickHouse/ClickHouse/pull/74849) ([Antonio Andelic](https://github.com/antonio2368)). -* ログラッパーは値渡しで使用し、ヒープに割り当てないようにします。 [#74034](https://github.com/ClickHouse/ClickHouse/pull/74034) ([Mikhail Artemenko](https://github.com/Michicosun)). -* MySQL および Postgres の辞書レプリカへの接続をバックグラウンドで再接続し、対応する辞書へのリクエストが遅延しないようにしました。 [#71101](https://github.com/ClickHouse/ClickHouse/pull/71101) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* Parallel replicas はレプリカの可用性に関する履歴情報を用いてレプリカ選択を改善していましたが、接続が確立できなかった場合にそのレプリカのエラー数を更新していませんでした。この PR では、レプリカが利用不能な場合にそのレプリカのエラー数を更新するようにしました。 [#72666](https://github.com/ClickHouse/ClickHouse/pull/72666) ([zoomxi](https://github.com/zoomxi))。 -* MergeTree の設定 `materialize_skip_indexes_on_merge` が追加され、マージ時にスキップインデックスの作成を抑制できるようになりました。これにより、ユーザーはスキップインデックスがいつ作成されるかを(`ALTER TABLE [..] MATERIALIZE INDEX [...]` を通じて)明示的に制御できます。これは、スキップインデックスの作成コストが高い場合(例: ベクトル類似度インデックス)に有用です。 [#74401](https://github.com/ClickHouse/ClickHouse/pull/74401) ([Robert Schulze](https://github.com/rschu1ze)). -* Storage(S3/Azure)Queue での Keeper へのリクエストを最適化。 [#74410](https://github.com/ClickHouse/ClickHouse/pull/74410) ([Kseniia Sumarokova](https://github.com/kssenii)). [#74538](https://github.com/ClickHouse/ClickHouse/pull/74538) ([Kseniia Sumarokova](https://github.com/kssenii)). -* デフォルトで最大 `1000` 個までの並列レプリカを使用するようになりました。 [#74504](https://github.com/ClickHouse/ClickHouse/pull/74504) ([Konstantin Bogdanov](https://github.com/thevar1able))。 -* S3 ディスクからの読み取り時の HTTP セッション再利用を改善 ([#72401](https://github.com/ClickHouse/ClickHouse/issues/72401)). [#74548](https://github.com/ClickHouse/ClickHouse/pull/74548) ([Julian Maicher](https://github.com/jmaicher)). - - - - - -#### 改善 - -* 暗黙的な ENGINE を使用する CREATE TABLE クエリで SETTINGS をサポートし、ENGINE 設定とクエリ設定を併用できるようにしました。 [#73120](https://github.com/ClickHouse/ClickHouse/pull/73120) ([Raúl Marín](https://github.com/Algunenano)). -* `use_hive_partitioning` をデフォルトで有効化。[#71636](https://github.com/ClickHouse/ClickHouse/pull/71636)([Yarik Briukhovetskyi](https://github.com/yariks5s))。 -* 異なるパラメータを持つ JSON 型間での CAST および ALTER をサポート。[#72303](https://github.com/ClickHouse/ClickHouse/pull/72303)([Pavel Kruglov](https://github.com/Avogar))。 -* JSON カラム値の等値比較をサポートしました。 [#72991](https://github.com/ClickHouse/ClickHouse/pull/72991) ([Pavel Kruglov](https://github.com/Avogar))。 -* 不要なバッククォートを避けるために、JSON サブカラムを含む識別子の書式設定を改善しました。 [#73085](https://github.com/ClickHouse/ClickHouse/pull/73085) ([Pavel Kruglov](https://github.com/Avogar)). -* インタラクティブメトリクスの改善。並列レプリカからのメトリクスが完全に表示されない問題を修正しました。メトリクスは最新の更新時刻が新しいものから順に、その後は名前の辞書順で表示します。古くなったメトリクスは表示しません。[#71631](https://github.com/ClickHouse/ClickHouse/pull/71631) ([Julia Kartseva](https://github.com/jkartseva))。 -* JSON 出力フォーマットをデフォルトで整形表示するようにしました。これを制御するための新しい設定 `output_format_json_pretty_print` を追加し、デフォルトで有効にしました。 [#72148](https://github.com/ClickHouse/ClickHouse/pull/72148) ([Pavel Kruglov](https://github.com/Avogar)). +* テーブル関数で中括弧展開のみを使用している場合は、BLOB ストレージのキーを列挙しないようにしました。 [#73333](https://github.com/ClickHouse/ClickHouse/issues/73333) をクローズしました。 [#73518](https://github.com/ClickHouse/ClickHouse/pull/73518)([Konstantin Bogdanov](https://github.com/thevar1able))。 +* Nullable 引数を取る関数に対するショートサーキット最適化。 [#73820](https://github.com/ClickHouse/ClickHouse/pull/73820) ([李扬](https://github.com/taiyang-li))。 +* `maskedExecute` を関数以外のカラムには適用しないようにし、ショートサーキット実行のパフォーマンスを改善しました。 [#73965](https://github.com/ClickHouse/ClickHouse/pull/73965) ([lgbo](https://github.com/lgbo-ustc))。 +* `Kafka`/`NATS`/`RabbitMQ`/`FileLog` の入力フォーマットでのヘッダーの自動検出を無効化し、パフォーマンスを向上させました。 [#74006](https://github.com/ClickHouse/ClickHouse/pull/74006) ([Azat Khuzhin](https://github.com/azat)). +* `GROUPING SETS` を使用した集約の後に、より高い並列度でパイプラインを実行するようにしました。 [#74082](https://github.com/ClickHouse/ClickHouse/pull/74082) ([Nikita Taranov](https://github.com/nickitat)). +* `MergeTreeReadPool` におけるクリティカルセクションの範囲を縮小しました。 [#74202](https://github.com/ClickHouse/ClickHouse/pull/74202) ([Guo Wangyang](https://github.com/guowangy)). +* 並列レプリカのパフォーマンスが改善されました。並列レプリカプロトコルに関連しないパケットのデシリアライズは、クエリのイニシエータ側で常にパイプラインスレッド内で行われるようになりました。以前は、パイプラインスケジューリングを担当するスレッド内で行われる場合があり、その結果、イニシエータ側の応答性が低下し、パイプラインの実行が遅延する可能性がありました。 [#74398](https://github.com/ClickHouse/ClickHouse/pull/74398) ([Igor Nikonov](https://github.com/devcrafter)). +* Keeper における大規模なマルチリクエスト処理のパフォーマンスを改善しました。 [#74849](https://github.com/ClickHouse/ClickHouse/pull/74849) ([Antonio Andelic](https://github.com/antonio2368)). +* ログラッパーを値として使用し、ヒープに割り当てないようにしました。 [#74034](https://github.com/ClickHouse/ClickHouse/pull/74034) ([Mikhail Artemenko](https://github.com/Michicosun)). +* MySQL および Postgres の辞書レプリカへの接続をバックグラウンドで再確立し、対応する辞書へのリクエストが遅延しないようにしました。 [#71101](https://github.com/ClickHouse/ClickHouse/pull/71101) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* Parallel replicas では、レプリカ選択を改善するためにレプリカの可用性に関する過去の情報を使用していましたが、接続できない場合にそのレプリカのエラー数を更新していませんでした。この PR では、レプリカに接続できない場合にそのエラー数を更新するようにしました。 [#72666](https://github.com/ClickHouse/ClickHouse/pull/72666) ([zoomxi](https://github.com/zoomxi)). +* マージツリーの設定 `materialize_skip_indexes_on_merge` を追加しました。これにより、マージ時にスキップインデックスが作成されるのを抑制できます。これによって、ユーザーはスキップインデックスをいつ作成するかを(`ALTER TABLE [..] MATERIALIZE INDEX [...]` を通じて)明示的に制御できるようになります。スキップインデックスの構築コストが高い場合(例:ベクトル類似度インデックスなど)に有用です。 [#74401](https://github.com/ClickHouse/ClickHouse/pull/74401) ([Robert Schulze](https://github.com/rschu1ze)). +* Storage(S3/Azure)Queue における keeper リクエストを最適化しました。 [#74410](https://github.com/ClickHouse/ClickHouse/pull/74410) ([Kseniia Sumarokova](https://github.com/kssenii)). [#74538](https://github.com/ClickHouse/ClickHouse/pull/74538) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 既定では最大 `1000` 個の並列レプリカを使用します。 [#74504](https://github.com/ClickHouse/ClickHouse/pull/74504) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* S3 ディスクからの読み取り時の HTTP セッションの再利用を改善 ([#72401](https://github.com/ClickHouse/ClickHouse/issues/72401))。[#74548](https://github.com/ClickHouse/ClickHouse/pull/74548) ([Julian Maicher](https://github.com/jmaicher))。 + +#### 改善点 + +* ENGINE を暗黙指定した CREATE TABLE クエリで SETTINGS をサポートし、ENGINE 設定とクエリ設定を併用できるようにしました。 [#73120](https://github.com/ClickHouse/ClickHouse/pull/73120) ([Raúl Marín](https://github.com/Algunenano)). +* `use_hive_partitioning` をデフォルトで有効にしました。 [#71636](https://github.com/ClickHouse/ClickHouse/pull/71636) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* 異なるパラメータを持つ JSON 型間での CAST および ALTER をサポートしました。[#72303](https://github.com/ClickHouse/ClickHouse/pull/72303) ([Pavel Kruglov](https://github.com/Avogar))。 +* JSON 列の値に対する等値比較をサポートしました。 [#72991](https://github.com/ClickHouse/ClickHouse/pull/72991) ([Pavel Kruglov](https://github.com/Avogar)). +* JSON サブカラムを含む識別子のフォーマットを改善し、不要なバッククォートを回避するようにしました。 [#73085](https://github.com/ClickHouse/ClickHouse/pull/73085) ([Pavel Kruglov](https://github.com/Avogar)). +* インタラクティブメトリクスを改善。並列レプリカのメトリクスがすべて表示されない問題を修正。メトリクスは最新の更新時刻順、その後に名前の辞書順で表示する。古くなったメトリクスは表示しない。[#71631](https://github.com/ClickHouse/ClickHouse/pull/71631) ([Julia Kartseva](https://github.com/jkartseva)). +* JSON 出力フォーマットをデフォルトで整形表示するようにしました。これを制御するための新しい設定 `output_format_json_pretty_print` を追加し、デフォルトで有効化しました。 [#72148](https://github.com/ClickHouse/ClickHouse/pull/72148) ([Pavel Kruglov](https://github.com/Avogar)). * デフォルトで `LowCardinality(UUID)` を許可するようにしました。これは ClickHouse Cloud の顧客の間で実用的であることが実証されています。 [#73826](https://github.com/ClickHouse/ClickHouse/pull/73826) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* インストール時のメッセージを改善しました。 [#73827](https://github.com/ClickHouse/ClickHouse/pull/73827) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* ClickHouse Cloud のパスワードリセット時のメッセージを改善。 [#73831](https://github.com/ClickHouse/ClickHouse/pull/73831) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* ファイルに追記できない File テーブルに対するエラーメッセージを改善しました。 [#73832](https://github.com/ClickHouse/ClickHouse/pull/73832) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* ユーザーが誤ってターミナルでバイナリ形式(Native、Parquet、Avro など)での出力を要求した場合に確認を促すようにしました。これにより [#59524](https://github.com/ClickHouse/ClickHouse/issues/59524) がクローズされます。[#73833](https://github.com/ClickHouse/ClickHouse/pull/73833)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* ターミナルの Pretty および Vertical 形式で末尾の空白をハイライト表示し、視認性を向上させました。これは `output_format_pretty_highlight_trailing_spaces` 設定で制御できます。初期実装は [#72996](https://github.com/ClickHouse/ClickHouse/issues/72996) の [Braden Burns](https://github.com/bradenburns) によるものです。[#71590](https://github.com/ClickHouse/ClickHouse/issues/71590) をクローズしました。[#73847](https://github.com/ClickHouse/ClickHouse/pull/73847)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* `clickhouse-client` と `clickhouse-local` は、標準入力がファイルからリダイレクトされている場合、その圧縮を自動検出するようになりました。これにより [#70865](https://github.com/ClickHouse/ClickHouse/issues/70865) が解決しました。[#73848](https://github.com/ClickHouse/ClickHouse/pull/73848)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* デフォルトで、pretty 形式において長すぎるカラム名を切り詰めるようにしました。これは `output_format_pretty_max_column_name_width_cut_to` および `output_format_pretty_max_column_name_width_min_chars_to_cut` の設定で制御されます。これは [#66502](https://github.com/ClickHouse/ClickHouse/issues/66502) における [tanmaydatta](https://github.com/tanmaydatta) の作業を継続するものです。この変更により [#65968](https://github.com/ClickHouse/ClickHouse/issues/65968) がクローズされます。[#73851](https://github.com/ClickHouse/ClickHouse/pull/73851)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* `Pretty` フォーマットをより見やすくするため、前のブロックの出力からあまり時間が経過していない場合はブロックをまとめて出力するようにしました。これは新しい設定 `output_format_pretty_squash_consecutive_ms`(デフォルト値 50 ms)と `output_format_pretty_squash_max_wait_ms`(デフォルト値 1000 ms)によって制御されます。[#49537](https://github.com/ClickHouse/ClickHouse/issues/49537) の継続です。この変更により [#49153](https://github.com/ClickHouse/ClickHouse/issues/49153) がクローズされます。[#73852](https://github.com/ClickHouse/ClickHouse/pull/73852)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 現在マージ中のソースパーツ数を示すメトリクスを追加しました。これにより [#70809](https://github.com/ClickHouse/ClickHouse/issues/70809) がクローズされました。[#73868](https://github.com/ClickHouse/ClickHouse/pull/73868)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 出力先がターミナルの場合、`Vertical` 形式で列をハイライト表示します。この動作は `output_format_pretty_color` 設定で無効化できます。[#73898](https://github.com/ClickHouse/ClickHouse/pull/73898)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* MySQL 互換性が向上し、現在では `mysqlsh`(Oracle 製の高機能な MySQL CLI)が ClickHouse に接続できるようになりました。これはテストを容易に行えるようにするために必要です。 [#73912](https://github.com/ClickHouse/ClickHouse/pull/73912) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* Pretty フォーマットでは、テーブルセル内に複数行のフィールドを表示でき、可読性が向上します。これはデフォルトで有効で、設定 `output_format_pretty_multiline_fields` で制御できます。[#64094](https://github.com/ClickHouse/ClickHouse/issues/64094) における [Volodyachan](https://github.com/Volodyachan) による作業の継続です。これにより [#56912](https://github.com/ClickHouse/ClickHouse/issues/56912) がクローズされました。[#74032](https://github.com/ClickHouse/ClickHouse/pull/74032)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* ブラウザ内の JavaScript から X-ClickHouse HTTP ヘッダーを利用できるようにしました。これにより、アプリケーションの開発がより容易になります。 [#74180](https://github.com/ClickHouse/ClickHouse/pull/74180) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* `JSONEachRowWithProgress` フォーマットには、メタデータ付きのイベントに加えて、合計値および極値も含まれます。また、`rows_before_limit_at_least` と `rows_before_aggregation` も含まれます。部分結果の後に例外が発生した場合でも、このフォーマットは例外を正しく出力します。進捗情報には経過ナノ秒も含まれるようになりました。クエリ終了時に最終進捗イベントが 1 回だけ出力されます。クエリ実行中の進捗は、`interactive_delay` 設定値で指定された間隔より高い頻度では出力されません。 [#74181](https://github.com/ClickHouse/ClickHouse/pull/74181) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* Hourglass は Play UI 上でスムーズに回転するようになりました。 [#74182](https://github.com/ClickHouse/ClickHouse/pull/74182) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* HTTP レスポンスが圧縮されている場合でも、到着し次第パケットを送信します。これにより、ブラウザは進行状況を示すパケットと圧縮データを受信できるようになります。 [#74201](https://github.com/ClickHouse/ClickHouse/pull/74201) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* 出力レコード数が N = `output_format_pretty_max_rows` を超える場合、先頭の N 行だけを表示するのではなく、出力テーブルを途中で分割し、先頭 N/2 行と末尾 N/2 行を表示します。 [#64200](https://github.com/ClickHouse/ClickHouse/issues/64200) の継続です。これは [#59502](https://github.com/ClickHouse/ClickHouse/issues/59502) をクローズします。 [#73929](https://github.com/ClickHouse/ClickHouse/pull/73929)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* インストール時のメッセージを改善しました。[#73827](https://github.com/ClickHouse/ClickHouse/pull/73827) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* ClickHouse Cloud のパスワードリセットに関するメッセージを改善しました。 [#73831](https://github.com/ClickHouse/ClickHouse/pull/73831) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* ファイルへの追記をサポートしない File テーブルのエラーメッセージを改善。 [#73832](https://github.com/ClickHouse/ClickHouse/pull/73832) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* ユーザーが誤ってターミナル上でバイナリ形式(Native、Parquet、Avro など)での出力を要求した場合に確認を行うようにしました。これにより [#59524](https://github.com/ClickHouse/ClickHouse/issues/59524) がクローズされました。 [#73833](https://github.com/ClickHouse/ClickHouse/pull/73833)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* Pretty および Vertical 形式の出力では、ターミナル上で末尾の空白をハイライト表示して視認性を向上しました。この挙動は `output_format_pretty_highlight_trailing_spaces` 設定で制御できます。初期実装は [Braden Burns](https://github.com/bradenburns) によるもので、[#72996](https://github.com/ClickHouse/ClickHouse/issues/72996) に基づきます。[#71590](https://github.com/ClickHouse/ClickHouse/issues/71590) をクローズしました。[#73847](https://github.com/ClickHouse/ClickHouse/pull/73847)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* `clickhouse-client` と `clickhouse-local` は、ファイルからリダイレクトされた場合に stdin の圧縮形式を自動検出するようになりました。これにより [#70865](https://github.com/ClickHouse/ClickHouse/issues/70865) がクローズされました。 [#73848](https://github.com/ClickHouse/ClickHouse/pull/73848) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* デフォルトで、pretty フォーマットにおいて長すぎるカラム名を切り詰めるようにしました。これは `output_format_pretty_max_column_name_width_cut_to` および `output_format_pretty_max_column_name_width_min_chars_to_cut` の設定によって制御されます。これは [#66502](https://github.com/ClickHouse/ClickHouse/issues/66502) における [tanmaydatta](https://github.com/tanmaydatta) による作業の継続です。この変更により [#65968](https://github.com/ClickHouse/ClickHouse/issues/65968) がクローズされます。 [#73851](https://github.com/ClickHouse/ClickHouse/pull/73851)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* `Pretty` フォーマットの表示をより見やすくするため、前のブロックの出力からあまり時間が経過していない場合はブロックをまとめて表示するようにしました。これは新しい設定項目 `output_format_pretty_squash_consecutive_ms`(デフォルト 50 ms)および `output_format_pretty_squash_max_wait_ms`(デフォルト 1000 ms)で制御されます。[#49537](https://github.com/ClickHouse/ClickHouse/issues/49537) の継続です。この変更により [#49153](https://github.com/ClickHouse/ClickHouse/issues/49153) がクローズされました。[#73852](https://github.com/ClickHouse/ClickHouse/pull/73852)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 現在マージ中のソースパーツ数を示すメトリクスを追加しました。これにより [#70809](https://github.com/ClickHouse/ClickHouse/issues/70809) がクローズされます。[#73868](https://github.com/ClickHouse/ClickHouse/pull/73868)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 出力先がターミナルの場合、`Vertical` 形式で列をハイライト表示するようにしました。これは `output_format_pretty_color` 設定で無効化できます。 [#73898](https://github.com/ClickHouse/ClickHouse/pull/73898) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* MySQL 互換機能を強化し、現在は `mysqlsh`(Oracle 製の高機能な MySQL CLI)が ClickHouse に接続できるようになりました。これはテストを容易にするために必要です。 [#73912](https://github.com/ClickHouse/ClickHouse/pull/73912) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* Pretty フォーマットでは、テーブルセル内に複数行フィールドを描画できるようになり、可読性が向上しました。これはデフォルトで有効で、設定 `output_format_pretty_multiline_fields` で制御できます。[#64094](https://github.com/ClickHouse/ClickHouse/issues/64094) における [Volodyachan](https://github.com/Volodyachan) による作業の継続です。これにより [#56912](https://github.com/ClickHouse/ClickHouse/issues/56912) がクローズされます。[#74032](https://github.com/ClickHouse/ClickHouse/pull/74032)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* ブラウザ内の JavaScript から X-ClickHouse HTTP ヘッダーへアクセスできるようにしました。これによりアプリケーションの開発がより容易になります。 [#74180](https://github.com/ClickHouse/ClickHouse/pull/74180) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* `JSONEachRowWithProgress` フォーマットには、メタデータ付きのイベントに加えて、合計値および極値が含まれます。また、`rows_before_limit_at_least` と `rows_before_aggregation` も含まれます。このフォーマットでは、部分的な結果の後に例外が発生した場合でも、その例外が正しく出力されます。進捗には経過ナノ秒が含まれるようになりました。最後に 1 回、最終的な進捗イベントが出力されます。クエリ実行中の進捗は、`interactive_delay` 設定値より短い間隔では出力されません。 [#74181](https://github.com/ClickHouse/ClickHouse/pull/74181) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Hourglass が Play UI でスムーズに回転するようになりました。 [#74182](https://github.com/ClickHouse/ClickHouse/pull/74182) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* HTTP レスポンスが圧縮されている場合でも、受信したパケットは到着し次第すぐに送信します。これにより、ブラウザは進捗を示すパケットと圧縮データの両方を受信できます。 [#74201](https://github.com/ClickHouse/ClickHouse/pull/74201) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 出力レコード数が N = `output_format_pretty_max_rows` を超える場合、先頭の N 行だけを表示するのではなく、出力テーブルを途中で切り、先頭 N/2 行と末尾 N/2 行を表示するようにしました。[#64200](https://github.com/ClickHouse/ClickHouse/issues/64200) の継続です。[#59502](https://github.com/ClickHouse/ClickHouse/issues/59502) を解決します。[#73929](https://github.com/ClickHouse/ClickHouse/pull/73929)([Alexey Milovidov](https://github.com/alexey-milovidov))。 * ハッシュ結合アルゴリズムが有効な場合に、より汎用的な結合計画アルゴリズムを使用できるようにしました。 [#71926](https://github.com/ClickHouse/ClickHouse/pull/71926) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). -* `DateTime64` 型のカラムに bloom_filter インデックスを作成できるようにしました。 [#66416](https://github.com/ClickHouse/ClickHouse/pull/66416) ([Yutong Xiao](https://github.com/YutSean)). -* `min_age_to_force_merge_seconds` と `min_age_to_force_merge_on_partition_only` が両方とも有効な場合、パーツマージ処理は最大バイト数制限を無視します。[#73656](https://github.com/ClickHouse/ClickHouse/pull/73656) ([Kai Zhu](https://github.com/nauu))。 -* トレーサビリティを強化するため、OpenTelemetry のスパンログテーブルに HTTP ヘッダー情報を追加しました。 [#70516](https://github.com/ClickHouse/ClickHouse/pull/70516) ([jonymohajanGmail](https://github.com/jonymohajanGmail))。 -* `orc` ファイルを、常に `GMT` タイムゾーンではなく任意のタイムゾーンで書き込めるようにサポートしました。 [#70615](https://github.com/ClickHouse/ClickHouse/pull/70615) ([kevinyhzou](https://github.com/KevinyhZou)). -* クラウド間でバックアップを書き込む際に、I/O スケジューリング設定が考慮されるようにしました。 [#71093](https://github.com/ClickHouse/ClickHouse/pull/71093) ([János Benjamin Antal](https://github.com/antaljanosbenjamin))。 -* `system.asynchronous_metrics` に、`metric` カラムのエイリアスである `name` を追加しました。 [#71164](https://github.com/ClickHouse/ClickHouse/pull/71164) ([megao](https://github.com/jetgm))。 -* 歴史的な理由により、クエリ `ALTER TABLE MOVE PARTITION TO TABLE` は専用のアクセス権である `ALTER_MOVE_PARTITION` ではなく、`SELECT` と `ALTER DELETE` の権限をチェックしていました。このPRでは、この専用のアクセス種別を使用するように変更しました。互換性のため、`SELECT` と `ALTER DELETE` が付与されている場合には、この権限も引き続き暗黙的に付与されますが、この挙動は将来のリリースで削除される予定です。[#16403](https://github.com/ClickHouse/ClickHouse/issues/16403) をクローズします。 [#71632](https://github.com/ClickHouse/ClickHouse/pull/71632)([pufit](https://github.com/pufit))。 -* ソートキー内のカラムをマテリアライズしようとした際にソート順が乱れることを許可するのではなく、例外をスローするようにしました。 [#71891](https://github.com/ClickHouse/ClickHouse/pull/71891) ([Peter Nguyen](https://github.com/petern48)). -* `EXPLAIN QUERY TREE` で機密情報を非表示にする。 [#72025](https://github.com/ClickHouse/ClickHouse/pull/72025) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* "native" リーダーで Parquet の整数論理型をサポートしました。[#72105](https://github.com/ClickHouse/ClickHouse/pull/72105)([Arthur Passos](https://github.com/arthurpassos))。 -* デフォルトユーザにパスワードが必要な場合、ブラウザ上で対話的に認証情報を要求するようになりました。以前のバージョンではサーバーは HTTP 403 を返していましたが、現在は HTTP 401 を返します。 [#72198](https://github.com/ClickHouse/ClickHouse/pull/72198) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* アクセス種別 `CREATE_USER`、`ALTER_USER`、`DROP_USER`、`CREATE_ROLE`、`ALTER_ROLE`、`DROP_ROLE` をグローバルからパラメータ化されたものに変更しました。これにより、ユーザーはアクセス管理権限をこれまでよりも細かく付与できるようになりました。[#72246](https://github.com/ClickHouse/ClickHouse/pull/72246) ([pufit](https://github.com/pufit))。 -* `system.mutations` に `latest_fail_error_code_name` カラムを追加しました。このカラムは、スタックしている mutation に関する新しいメトリクスを導入し、それを用いてクラウド環境で発生したエラーのグラフを作成するため、また必要に応じて、よりノイズの少ない新しいアラートを追加するために必要です。 [#72398](https://github.com/ClickHouse/ClickHouse/pull/72398) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). -* `ATTACH PARTITION` クエリでのメモリアロケーション量を削減。 [#72583](https://github.com/ClickHouse/ClickHouse/pull/72583) ([Konstantin Morozov](https://github.com/k-morozov)). -* `max_bytes_before_external_sort` の制限をクエリ全体のメモリ消費量に基づくものとしました(以前は 1 つのソートスレッドあたりのソートブロック中のバイト数を基準としていましたが、現在は `max_bytes_before_external_group_by` と同じ意味を持ち、全スレッドを合わせたクエリ全体のメモリに対する総制限となります)。また、ディスク上のブロックサイズを制御するための設定 `min_external_sort_block_bytes` を追加しました。[#72598](https://github.com/ClickHouse/ClickHouse/pull/72598)([Azat Khuzhin](https://github.com/azat))。 -* トレースコレクタが課すメモリ制限を無視するようにしました。 [#72606](https://github.com/ClickHouse/ClickHouse/pull/72606) ([Azat Khuzhin](https://github.com/azat)). +* `DateTime64` 型のカラムに対して bloom_filter インデックスを作成できるようにしました。 [#66416](https://github.com/ClickHouse/ClickHouse/pull/66416) ([Yutong Xiao](https://github.com/YutSean))。 +* `min_age_to_force_merge_seconds` と `min_age_to_force_merge_on_partition_only` の両方が有効化されている場合、パーツのマージ処理は最大バイト数制限を無視します。 [#73656](https://github.com/ClickHouse/ClickHouse/pull/73656) ([Kai Zhu](https://github.com/nauu))。 +* トレーサビリティ向上のため、OpenTelemetry のスパンログテーブルに HTTP ヘッダー情報を追加しました。 [#70516](https://github.com/ClickHouse/ClickHouse/pull/70516) ([jonymohajanGmail](https://github.com/jonymohajanGmail)). +* `GMT` タイムゾーン固定ではなく、カスタムタイムゾーンで `orc` ファイルを書き出せるようにしました。 [#70615](https://github.com/ClickHouse/ClickHouse/pull/70615) ([kevinyhzou](https://github.com/KevinyhZou)). +* クラウド間バックアップの書き込み時に I/O スケジューリング設定を考慮するようにしました。 [#71093](https://github.com/ClickHouse/ClickHouse/pull/71093) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). +* `system.asynchronous_metrics` に `metric` 列のエイリアス `name` を追加しました。 [#71164](https://github.com/ClickHouse/ClickHouse/pull/71164) ([megao](https://github.com/jetgm)). +* 何らかの歴史的経緯により、クエリ `ALTER TABLE MOVE PARTITION TO TABLE` は専用の `ALTER_MOVE_PARTITION` 権限ではなく、`SELECT` と `ALTER DELETE` 権限をチェックしていました。このPRで、このアクセス種別が使用されるようにしました。互換性維持のため、`SELECT` と `ALTER DELETE` が付与されている場合には、この権限も暗黙的に付与されますが、この挙動は将来のリリースで削除される予定です。[#16403](https://github.com/ClickHouse/ClickHouse/issues/16403) をクローズします。[#71632](https://github.com/ClickHouse/ClickHouse/pull/71632)([pufit](https://github.com/pufit))。 +* ソートキー内のカラムをマテリアライズしようとした際に、ソート順が崩れる場合は許可せず、例外をスローするようにしました。 [#71891](https://github.com/ClickHouse/ClickHouse/pull/71891) ([Peter Nguyen](https://github.com/petern48)). +* `EXPLAIN QUERY TREE` で秘密情報をマスクするようにしました。 [#72025](https://github.com/ClickHouse/ClickHouse/pull/72025) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* 「ネイティブ」リーダーで Parquet の整数論理型をサポートします。 [#72105](https://github.com/ClickHouse/ClickHouse/pull/72105) ([Arthur Passos](https://github.com/arthurpassos)). +* デフォルトユーザーにパスワードが必要な場合、ブラウザーで対話的に認証情報の入力を求めるようにしました。以前のバージョンではサーバーは HTTP 403 を返していましたが、現在は HTTP 401 を返します。 [#72198](https://github.com/ClickHouse/ClickHouse/pull/72198) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* アクセス種別 `CREATE_USER`、`ALTER_USER`、`DROP_USER`、`CREATE_ROLE`、`ALTER_ROLE`、`DROP_ROLE` をグローバルからパラメータ化されたものに変更しました。これにより、ユーザーはアクセス管理権限をよりきめ細かく付与できるようになりました。 [#72246](https://github.com/ClickHouse/ClickHouse/pull/72246) ([pufit](https://github.com/pufit)). +* `system.mutations` に `latest_fail_error_code_name` カラムを追加します。このカラムは、停止した mutation に関する新しいメトリクスを導入し、クラウドで発生したエラーのグラフを作成するために必要です。また、必要に応じてノイズの少ない新しいアラートを追加するためにも使用します。 [#72398](https://github.com/ClickHouse/ClickHouse/pull/72398) ([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 +* `ATTACH PARTITION` クエリにおけるメモリアロケーション量を削減しました。 [#72583](https://github.com/ClickHouse/ClickHouse/pull/72583) ([Konstantin Morozov](https://github.com/k-morozov)). +* `max_bytes_before_external_sort` の制限をクエリ全体のメモリ消費量に基づくものとしました(以前は 1 つのソートスレッドにおけるソートブロック内のバイト数を表していましたが、現在は `max_bytes_before_external_group_by` と同じ意味を持ち、すべてのスレッドを含めたクエリ全体のメモリ使用量に対する総上限となります)。また、ディスク上のブロックサイズを制御するための設定 `min_external_sort_block_bytes` を追加しました。 [#72598](https://github.com/ClickHouse/ClickHouse/pull/72598) ([Azat Khuzhin](https://github.com/azat)). +* トレースコレクタによるメモリ制限を無視するようにしました。 [#72606](https://github.com/ClickHouse/ClickHouse/pull/72606) ([Azat Khuzhin](https://github.com/azat)). * サーバー設定 `dictionaries_lazy_load` と `wait_dictionaries_load_at_startup` を `system.server_settings` に追加しました。 [#72664](https://github.com/ClickHouse/ClickHouse/pull/72664) ([Christoph Wurm](https://github.com/cwurm))。 -* `BACKUP`/`RESTORE` クエリで指定可能な設定に `max_backup_bandwidth` を追加しました。 [#72665](https://github.com/ClickHouse/ClickHouse/pull/72665) ([Christoph Wurm](https://github.com/cwurm)). -* レプリケートクラスターで生成されるログ量を最小限に抑えるため、ReplicatedMergeTree エンジンにおけるレプリカパーツ出現時のログレベルを引き下げました。 [#72876](https://github.com/ClickHouse/ClickHouse/pull/72876) ([mor-akamai](https://github.com/morkalfon)). -* 論理和条件における共通式の抽出を改善し、すべての選言項に共通部分式が存在しない場合でも、結果のフィルター式を簡略化できるようにしました。[#71537](https://github.com/ClickHouse/ClickHouse/issues/71537) の継続作業です。[#73271](https://github.com/ClickHouse/ClickHouse/pull/73271)([Dmitry Novik](https://github.com/novikd))。 -* ストレージエンジン `S3Queue`/`AzureQueue` で、テーブル作成時に設定が指定されていなかった既存テーブルにも設定を追加できるようにしました。 [#73283](https://github.com/ClickHouse/ClickHouse/pull/73283) ([Kseniia Sumarokova](https://github.com/kssenii)). -* `least` および `greatest` 関数が `NULL` 引数を受け取った際に、無条件に `NULL` を返す(`true` の場合)か、`NULL` を無視する(`false` の場合)かを制御する設定 `least_greatest_legacy_null_behavior`(デフォルト: `false`)を導入しました。 [#73344](https://github.com/ClickHouse/ClickHouse/pull/73344) ([Robert Schulze](https://github.com/rschu1ze))。 -* ObjectStorageQueueMetadata のクリーンアップスレッドで Keeper の multi リクエストを使用するようにしました。 [#73357](https://github.com/ClickHouse/ClickHouse/pull/73357) ([Antonio Andelic](https://github.com/antonio2368)). -* ClickHouse が cgroup 配下で実行されている場合でも、システム負荷、プロセススケジューリング、メモリなどに関連するシステム全体の非同期メトリクスは引き続き収集されます。ClickHouse がホスト上で高いリソース消費を伴う唯一のプロセスである場合、これらは有用なシグナルとなることがあります。 [#73369](https://github.com/ClickHouse/ClickHouse/pull/73369) ([Nikita Taranov](https://github.com/nickitat))。 -* ストレージ `S3Queue` で、24.6 以前に作成された古い順序付きテーブルを、バケットを用いる新しい構造に移行できるようにしました。 [#73467](https://github.com/ClickHouse/ClickHouse/pull/73467) ([Kseniia Sumarokova](https://github.com/kssenii)). -* 既存の `system.s3queue` と同様に `system.azure_queue` を追加。[#73477](https://github.com/ClickHouse/ClickHouse/pull/73477)([Kseniia Sumarokova](https://github.com/kssenii))。 -* `parseDateTime64` 関数(およびそのバリエーション)は、1970年以前 / 2106年以降の入力日時に対しても正しい結果を返すようになりました。例: `SELECT parseDateTime64InJodaSyntax('2200-01-01 00:00:00.000', 'yyyy-MM-dd HH:mm:ss.SSS')`。 [#73594](https://github.com/ClickHouse/ClickHouse/pull/73594) ([zhanglistar](https://github.com/zhanglistar))。 -* ユーザーから指摘されていた `clickhouse-disks` の使い勝手に関するいくつかの問題を解消します。[#67136](https://github.com/ClickHouse/ClickHouse/issues/67136) をクローズ。[#73616](https://github.com/ClickHouse/ClickHouse/pull/73616)([Daniil Ivanik](https://github.com/divanik))。 -* ストレージエンジン S3(Azure)Queue のコミット設定を変更できるようにしました(コミット設定は `max_processed_files_before_commit`、`max_processed_rows_before_commit`、`max_processed_bytes_before_commit`、`max_processing_time_sec_before_commit` です)。[#73635](https://github.com/ClickHouse/ClickHouse/pull/73635) ([Kseniia Sumarokova](https://github.com/kssenii))。 -* storage S3(Azure)Queue において、ソース間の進捗を集約し、コミット制限設定と比較できるようにしました。 [#73641](https://github.com/ClickHouse/ClickHouse/pull/73641) ([Kseniia Sumarokova](https://github.com/kssenii)). -* `BACKUP`/`RESTORE` クエリでコア設定をサポート。 [#73650](https://github.com/ClickHouse/ClickHouse/pull/73650) ([Vitaly Baranov](https://github.com/vitlibar)). -* Parquet 出力において `output_format_compression_level` を考慮するようにしました。 [#73651](https://github.com/ClickHouse/ClickHouse/pull/73651) ([Arthur Passos](https://github.com/arthurpassos)). -* Apache Arrow の `fixed_size_list` 型をサポートされていない型として扱うのではなく、`Array` として読み込む機能を追加しました。 [#73654](https://github.com/ClickHouse/ClickHouse/pull/73654) ([Julian Meyers](https://github.com/J-Meyers))。 -* バックアップエンジンを 2 つ追加しました。`Memory`(現在のユーザーセッション内にバックアップを保持)と、テスト用の `Null`(どこにもバックアップを保持しない)です。 [#73690](https://github.com/ClickHouse/ClickHouse/pull/73690) ([Vitaly Baranov](https://github.com/vitlibar))。 -* `concurrent_threads_soft_limit_num` と `concurrent_threads_soft_limit_num_ratio_to_cores` はサーバーの再起動なしに変更できるようになりました。 [#73713](https://github.com/ClickHouse/ClickHouse/pull/73713) ([Sergei Trifonov](https://github.com/serxa)). -* `formatReadable` 関数で拡張数値型(`Decimal` および大きな整数型)をサポート。 [#73765](https://github.com/ClickHouse/ClickHouse/pull/73765) ([Raúl Marín](https://github.com/Algunenano))。 -* Postgres ワイヤプロトコル互換のために TLS をサポート。 [#73812](https://github.com/ClickHouse/ClickHouse/pull/73812) ([scanhex12](https://github.com/scanhex12)). -* 関数 `isIPv4String` は、正しい IPv4 アドレスの後にゼロバイトが付いている場合に true を返していましたが、本来この場合は false を返すべきでした。 [#65387](https://github.com/ClickHouse/ClickHouse/issues/65387) の継続対応です。 [#73946](https://github.com/ClickHouse/ClickHouse/pull/73946)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* MySQL ワイヤープロトコルで返すエラーコードを MySQL と互換になるようにしました。[#56831](https://github.com/ClickHouse/ClickHouse/issues/56831) の続きです。[#50957](https://github.com/ClickHouse/ClickHouse/issues/50957) をクローズしました。[#73948](https://github.com/ClickHouse/ClickHouse/pull/73948)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 演算子 `IN` や `NOT IN` における列挙型リテラルを検証するための設定 `validate_enum_literals_in_opearators` を追加しました。この設定により、リテラルが対象の列挙型に対して有効な列挙値でない場合は例外をスローします。 [#73985](https://github.com/ClickHouse/ClickHouse/pull/73985) ([Vladimir Cherkasov](https://github.com/vdimir))。 -* Storage `S3(Azure)Queue` で、コミット設定で定義された1つのバッチ内のすべてのファイルを、1つの Keeper トランザクションでコミットするようにしました。 [#73991](https://github.com/ClickHouse/ClickHouse/pull/73991) ([Kseniia Sumarokova](https://github.com/kssenii)). -* 実行可能な UDF およびディクショナリに対するヘッダー検出を無効化しました(Function 'X': wrong result, expected Y row(s), actual Y-1 という問題を引き起こす可能性があったため)。 [#73992](https://github.com/ClickHouse/ClickHouse/pull/73992) ([Azat Khuzhin](https://github.com/azat)). -* `EXPLAIN PLAN` に `distributed` オプションを追加しました。これにより、`EXPLAIN distributed=1 ... ` は `ReadFromParallelRemote*` ステップにリモート側のプランを付加するようになりました。 [#73994](https://github.com/ClickHouse/ClickHouse/pull/73994) ([Nikolai Kochetov](https://github.com/KochetovNicolai))。 -* Dynamic 引数を取る not/xor で正しい戻り値型を使用するようにしました。 [#74013](https://github.com/ClickHouse/ClickHouse/pull/74013) ([Pavel Kruglov](https://github.com/Avogar)). -* テーブル作成後に `add_implicit_sign_column_constraint_for_collapsing_engine` を変更できるようにしました。 [#74014](https://github.com/ClickHouse/ClickHouse/pull/74014) ([Christoph Wurm](https://github.com/cwurm)). -* マテリアライズドビューの SELECT クエリでサブカラムのサポートを追加。 [#74030](https://github.com/ClickHouse/ClickHouse/pull/74030) ([Pavel Kruglov](https://github.com/Avogar)). -* `clickhouse-client` でカスタムプロンプトを設定するには、次の 3 つの簡単な方法があります。1. コマンドラインパラメータ `--prompt` を使用する、2. 設定ファイルで設定項目 `[...]` を使用する、3. 同じく設定ファイルで接続ごとの設定 `[...]` を使用する方法です。 [#74168](https://github.com/ClickHouse/ClickHouse/pull/74168)([Christoph Wurm](https://github.com/cwurm))。 -* ClickHouse Client で、ポート 9440 への接続時に安全な接続を自動判別するようにしました。 [#74212](https://github.com/ClickHouse/ClickHouse/pull/74212) ([Christoph Wurm](https://github.com/cwurm)). -* http_handlers でユーザー認証をユーザー名だけで行えるようにしました(以前はパスワードの入力も必要でした)。 [#74221](https://github.com/ClickHouse/ClickHouse/pull/74221) ([Azat Khuzhin](https://github.com/azat)). -* 代替のクエリ言語である PRQL と KQL のサポートは、実験的機能としてマークされました。これらを使用するには、設定 `allow_experimental_prql_dialect = 1` および `allow_experimental_kusto_dialect = 1` を指定してください。[#74224](https://github.com/ClickHouse/ClickHouse/pull/74224) ([Robert Schulze](https://github.com/rschu1ze)). -* さらに多くの集約関数でデフォルトの Enum 型を返せるようになりました。 [#74272](https://github.com/ClickHouse/ClickHouse/pull/74272) ([Raúl Marín](https://github.com/Algunenano)). -* `OPTIMIZE TABLE` で、既存のキーワード `FINAL` の代替としてキーワード `FORCE` を指定できるようになりました。 [#74342](https://github.com/ClickHouse/ClickHouse/pull/74342) ([Robert Schulze](https://github.com/rschu1ze)). -* サーバーのシャットダウンに時間がかかりすぎる場合にアラートを発火させるために必要な `IsServerShuttingDown` メトリクスを追加しました。 [#74429](https://github.com/ClickHouse/ClickHouse/pull/74429) ([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 -* EXPLAIN の出力に Iceberg テーブル名を追加しました。[#74485](https://github.com/ClickHouse/ClickHouse/pull/74485)([alekseev-maksim](https://github.com/alekseev-maksim))。 -* 旧アナライザーで RECURSIVE CTE を使用した場合に、よりわかりやすいエラーメッセージを表示するよう改善しました。 [#74523](https://github.com/ClickHouse/ClickHouse/pull/74523) ([Raúl Marín](https://github.com/Algunenano)). -* `system.errors` に拡張エラーメッセージを表示します。 [#74574](https://github.com/ClickHouse/ClickHouse/pull/74574) ([Vitaly Baranov](https://github.com/vitlibar)). -* clickhouse-keeper とクライアント間の通信でパスワードを使用できるようになりました。サーバーおよびクライアントに適切な SSL 設定を指定している場合、この機能はあまり有用ではありませんが、一部のケースでは依然として有用な場合があります。パスワードは 16 文字を超えることはできません。Keeper の認証モデルとは無関係です。 [#74673](https://github.com/ClickHouse/ClickHouse/pull/74673) ([alesapin](https://github.com/alesapin)). -* config リローダーにエラーコードを追加。 [#74746](https://github.com/ClickHouse/ClickHouse/pull/74746) ([Garrett Thomas](https://github.com/garrettthomaskth)). -* MySQL および PostgreSQL のテーブル関数およびエンジンで IPv6 アドレスのサポートを追加しました。 [#74796](https://github.com/ClickHouse/ClickHouse/pull/74796) ([Mikhail Koviazin](https://github.com/mkmkme)). -* `divideDecimal` にショートサーキット最適化を実装し、[#74280](https://github.com/ClickHouse/ClickHouse/issues/74280) を修正。[#74843](https://github.com/ClickHouse/ClickHouse/pull/74843)([Kevin Mingtarja](https://github.com/kevinmingtarja))。 -* 起動スクリプト内でユーザーを指定できるようになりました。 [#74894](https://github.com/ClickHouse/ClickHouse/pull/74894) ([pufit](https://github.com/pufit)). -* Azure SAS トークンのサポートを追加。 [#72959](https://github.com/ClickHouse/ClickHouse/pull/72959) ([Azat Khuzhin](https://github.com/azat)). - - - - - -#### バグ修正(公式安定版リリースにおけるユーザー可視の不具合) - -* Parquet の圧縮レベルは、使用する圧縮コーデックが対応している場合にのみ設定します。 [#74659](https://github.com/ClickHouse/ClickHouse/pull/74659) ([Arthur Passos](https://github.com/arthurpassos)). -* 修飾子付きの照合ロケールを使用するとエラーが発生していたリグレッションを修正しました。例として、`SELECT arrayJoin(['kk 50', 'KK 01', ' KK 2', ' KK 3', 'kk 1', 'x9y99', 'x9y100']) item ORDER BY item ASC COLLATE 'tr-u-kn-true-ka-shifted` は、現在は正常に動作するようになりました。[#73544](https://github.com/ClickHouse/ClickHouse/pull/73544)([Robert Schulze](https://github.com/rschu1ze))。 -* keeper-client で SEQUENTIAL ノードを作成できなかった問題を修正。[#64177](https://github.com/ClickHouse/ClickHouse/pull/64177)([Duc Canh Le](https://github.com/canhld94))。 -* `position` 系関数で発生していた文字数の誤カウントを修正。 [#71003](https://github.com/ClickHouse/ClickHouse/pull/71003) ([思维](https://github.com/heymind)). -* アクセスエンティティに対する `RESTORE` 操作では、未処理の部分的な権限の取り消しにより、本来必要以上の権限が要求されていました。この PR で問題を修正しました。[#71853](https://github.com/ClickHouse/ClickHouse/issues/71853) をクローズします。[#71958](https://github.com/ClickHouse/ClickHouse/pull/71958) ([pufit](https://github.com/pufit)). -* `ALTER TABLE REPLACE/MOVE PARTITION FROM/TO TABLE` 実行後に一時停止が発生しないようにしました。バックグラウンドタスクのスケジューリング用の正しい設定を取得するようにしました。 [#72024](https://github.com/ClickHouse/ClickHouse/pull/72024) ([Aleksei Filatov](https://github.com/aalexfvk)). -* 一部の入力および出力フォーマット(例: Parquet、Arrow)における空タプルの扱いを修正しました。 [#72616](https://github.com/ClickHouse/ClickHouse/pull/72616) ([Michael Kolupaev](https://github.com/al13n321))。 -* ワイルドカードを含むデータベース/テーブルに対するカラムレベルの GRANT SELECT/INSERT 文は、エラーを返すようになりました。 [#72646](https://github.com/ClickHouse/ClickHouse/pull/72646) ([Johann Gan](https://github.com/johanngan)). -* 対象のアクセスエンティティに暗黙的な権限付与が存在している場合に、ユーザーが `REVOKE ALL ON *.*` を実行できない状況を修正しました。 [#72872](https://github.com/ClickHouse/ClickHouse/pull/72872) ([pufit](https://github.com/pufit)). -* formatDateTime スカラー関数の正のタイムゾーンのフォーマットを修正。[#73091](https://github.com/ClickHouse/ClickHouse/pull/73091)([ollidraese](https://github.com/ollidraese))。 -* PROXYv1 経由で接続が行われ、`auth_use_forwarded_address` が設定されている場合に、送信元ポートを正しく反映するよう修正しました。以前はプロキシポートが誤って使用されていました。`currentQueryID()` 関数を追加しました。 [#73095](https://github.com/ClickHouse/ClickHouse/pull/73095) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* TCPHandler 内の NativeWriter にもフォーマット設定を伝播し、`output_format_native_write_json_as_string` のような設定が正しく適用されるようにしました。 [#73179](https://github.com/ClickHouse/ClickHouse/pull/73179) ([Pavel Kruglov](https://github.com/Avogar)). +* `BACKUP`/`RESTORE` クエリで指定可能な設定の一覧に `max_backup_bandwidth` を追加しました。 [#72665](https://github.com/ClickHouse/ClickHouse/pull/72665) ([Christoph Wurm](https://github.com/cwurm)). +* 複製クラスタで生成されるログ量を最小限に抑えるために、ReplicatedMergeTree エンジンで出現する複製パーツに関するログレベルを引き下げました。 [#72876](https://github.com/ClickHouse/ClickHouse/pull/72876) ([mor-akamai](https://github.com/morkalfon)). +* 論理和における共通式の抽出を改善しました。すべての項に共通部分式が存在しない場合でも、結果のフィルター式を簡略化できるようにしました。[#71537](https://github.com/ClickHouse/ClickHouse/issues/71537) の続きです。[#73271](https://github.com/ClickHouse/ClickHouse/pull/73271)([Dmitry Novik](https://github.com/novikd))。 +* `S3Queue`/`AzureQueue` ストレージで、テーブル作成時に設定が指定されていなかったテーブルにも、後から設定を追加できるようにしました。 [#73283](https://github.com/ClickHouse/ClickHouse/pull/73283) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 設定項目 `least_greatest_legacy_null_behavior`(デフォルト: `false`)を導入しました。この設定は、`least` および `greatest` 関数が `NULL` 引数を無条件に `NULL` を返すことで処理するか(`true` の場合)、あるいはそれらを無視するか(`false` の場合)を制御します。 [#73344](https://github.com/ClickHouse/ClickHouse/pull/73344) ([Robert Schulze](https://github.com/rschu1ze)). +* ObjectStorageQueueMetadata のクリーンアップスレッドで Keeper の multi リクエストを使用するようになりました。 [#73357](https://github.com/ClickHouse/ClickHouse/pull/73357) ([Antonio Andelic](https://github.com/antonio2368)). +* ClickHouse が cgroup の下で実行されている場合でも、システム負荷、プロセススケジューリング、メモリなどに関連するシステム全体の非同期メトリクスは引き続き収集されます。ClickHouse がホスト上で多くのリソースを消費している唯一のプロセスである場合、これらは有用なシグナルを提供する可能性があります。[#73369](https://github.com/ClickHouse/ClickHouse/pull/73369)([Nikita Taranov](https://github.com/nickitat))。 +* ストレージ `S3Queue` で、24.6 以前に作成された古い順序付きテーブルを、バケット構造を用いる新しい形式へ移行できるようにしました。 [#73467](https://github.com/ClickHouse/ClickHouse/pull/73467) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 既存の `system.s3queue` と同様に `system.azure_queue` を追加。 [#73477](https://github.com/ClickHouse/ClickHouse/pull/73477) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 関数 `parseDateTime64`(およびその派生関数)が、1970年以前/2106年以降の日付の入力値に対して正しい結果を返すようになりました。例: `SELECT parseDateTime64InJodaSyntax('2200-01-01 00:00:00.000', 'yyyy-MM-dd HH:mm:ss.SSS')`。 [#73594](https://github.com/ClickHouse/ClickHouse/pull/73594) ([zhanglistar](https://github.com/zhanglistar))。 +* ユーザーから指摘されていた `clickhouse-disks` の使い勝手に関するいくつかの問題に対応しました。 [#67136](https://github.com/ClickHouse/ClickHouse/issues/67136) をクローズします。 [#73616](https://github.com/ClickHouse/ClickHouse/pull/73616) ([Daniil Ivanik](https://github.com/divanik)). +* storage S3(Azure)Queue のコミット設定を変更できるようにしました(コミット設定は `max_processed_files_before_commit`、`max_processed_rows_before_commit`、`max_processed_bytes_before_commit`、`max_processing_time_sec_before_commit` です)。[#73635](https://github.com/ClickHouse/ClickHouse/pull/73635) ([Kseniia Sumarokova](https://github.com/kssenii))。 +* ストレージ S3(Azure)Queue で、ソース間の進行状況を集約し、コミット制限設定と比較できるようにしました。 [#73641](https://github.com/ClickHouse/ClickHouse/pull/73641) ([Kseniia Sumarokova](https://github.com/kssenii)). +* コア設定のサポートを `BACKUP`/`RESTORE` クエリに追加しました。 [#73650](https://github.com/ClickHouse/ClickHouse/pull/73650) ([Vitaly Baranov](https://github.com/vitlibar)). +* Parquet 出力で `output_format_compression_level` が考慮されるようになりました。 [#73651](https://github.com/ClickHouse/ClickHouse/pull/73651) ([Arthur Passos](https://github.com/arthurpassos)). +* Apache Arrow の `fixed_size_list` を未サポート型として扱うのではなく、`Array` 型として読み取れるようにしました。 [#73654](https://github.com/ClickHouse/ClickHouse/pull/73654) ([Julian Meyers](https://github.com/J-Meyers)). +* 2 つのバックアップエンジン `Memory`(現在のユーザーセッション内にバックアップを保持)と、テスト用途の `Null`(どこにもバックアップを保持しない)を追加しました。 [#73690](https://github.com/ClickHouse/ClickHouse/pull/73690) ([Vitaly Baranov](https://github.com/vitlibar))。 +* `concurrent_threads_soft_limit_num` と `concurrent_threads_soft_limit_num_ratio_to_cores` は、サーバーの再起動なしに変更できるようになりました。[#73713](https://github.com/ClickHouse/ClickHouse/pull/73713) ([Sergei Trifonov](https://github.com/serxa)). +* `formatReadable` 関数に拡張数値型(`Decimal` およびビッグ整数)への対応を追加しました。[#73765](https://github.com/ClickHouse/ClickHouse/pull/73765)([Raúl Marín](https://github.com/Algunenano))。 +* Postgres ワイヤプロトコルとの互換性のために TLS をサポートしました。 [#73812](https://github.com/ClickHouse/ClickHouse/pull/73812) ([scanhex12](https://github.com/scanhex12)). +* 関数 `isIPv4String` は、正しい IPv4 アドレスの後にゼロバイトが続いている場合に true を返していましたが、このケースでは false を返すべきでした。[#65387](https://github.com/ClickHouse/ClickHouse/issues/65387) の継続対応。[#73946](https://github.com/ClickHouse/ClickHouse/pull/73946)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* MySQL ワイヤプロトコルにおけるエラーコードを MySQL と互換性を持つようにしました。[#56831](https://github.com/ClickHouse/ClickHouse/issues/56831) の継続対応です。[#50957](https://github.com/ClickHouse/ClickHouse/issues/50957) をクローズします。[#73948](https://github.com/ClickHouse/ClickHouse/pull/73948)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* `IN` や `NOT IN` などの演算子で使用される列挙型リテラルを、その列挙型に対して検証し、リテラルが有効な列挙値でない場合に例外をスローする設定 `validate_enum_literals_in_opearators` を追加しました。 [#73985](https://github.com/ClickHouse/ClickHouse/pull/73985) ([Vladimir Cherkasov](https://github.com/vdimir))。 +* Storage `S3(Azure)Queue` で、(コミット設定で定義される)単一バッチ内のすべてのファイルを、単一の keeper トランザクション内でコミットするようにしました。 [#73991](https://github.com/ClickHouse/ClickHouse/pull/73991) ([Kseniia Sumarokova](https://github.com/kssenii))。 +* 実行可能な UDF と辞書に対するヘッダー検出を無効にしました(Function 'X': wrong result, expected Y row(s), actual Y-1 という問題が発生する可能性があったため)。 [#73992](https://github.com/ClickHouse/ClickHouse/pull/73992) ([Azat Khuzhin](https://github.com/azat)). +* `EXPLAIN PLAN` に `distributed` オプションを追加しました。これにより、`EXPLAIN distributed=1 ...` によって、`ReadFromParallelRemote*` ステップにリモート側のプランが追加されるようになりました。 [#73994](https://github.com/ClickHouse/ClickHouse/pull/73994) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). +* Dynamic 引数を取る not/xor に対して正しい戻り値の型を使用するようにしました。 [#74013](https://github.com/ClickHouse/ClickHouse/pull/74013) ([Pavel Kruglov](https://github.com/Avogar)). +* テーブル作成後でも `add_implicit_sign_column_constraint_for_collapsing_engine` を変更できるようにしました。 [#74014](https://github.com/ClickHouse/ClickHouse/pull/74014) ([Christoph Wurm](https://github.com/cwurm)). +* マテリアライズドビューの SELECT クエリでサブカラムをサポートできるようになりました。 [#74030](https://github.com/ClickHouse/ClickHouse/pull/74030) ([Pavel Kruglov](https://github.com/Avogar)). +* `clickhouse-client` でカスタムプロンプトを設定する簡単な方法が 3 つあります。1. コマンドラインパラメータ `--prompt` を使う方法、2. 設定ファイル内で設定項目 `[...]` を使う方法、そして 3. 同じく設定ファイル内で、接続ごとの設定 `[...]` を使う方法です。[#74168](https://github.com/ClickHouse/ClickHouse/pull/74168)([Christoph Wurm](https://github.com/cwurm))。 +* ClickHouse Client がポート 9440 への接続時に安全な接続を自動判別するようになりました。 [#74212](https://github.com/ClickHouse/ClickHouse/pull/74212) ([Christoph Wurm](https://github.com/cwurm)). +* http_handlers でのユーザー認証を、ユーザー名のみで行えるようにしました(以前はユーザー名に加えてパスワードの入力も必要でした)。 [#74221](https://github.com/ClickHouse/ClickHouse/pull/74221) ([Azat Khuzhin](https://github.com/azat)). +* 代替クエリ言語である PRQL と KQL のサポートは、実験的機能として位置付けられました。これらを使用するには、設定 `allow_experimental_prql_dialect = 1` および `allow_experimental_kusto_dialect = 1` を指定します。[#74224](https://github.com/ClickHouse/ClickHouse/pull/74224) ([Robert Schulze](https://github.com/rschu1ze))。 +* より多くの集約関数でデフォルトの Enum 型を返せるようにしました。 [#74272](https://github.com/ClickHouse/ClickHouse/pull/74272) ([Raúl Marín](https://github.com/Algunenano)). +* `OPTIMIZE TABLE` では、既存のキーワード `FINAL` に代わるものとして、キーワード `FORCE` を指定できるようになりました。 [#74342](https://github.com/ClickHouse/ClickHouse/pull/74342) ([Robert Schulze](https://github.com/rschu1ze))。 +* サーバーのシャットダウンに時間がかかりすぎる場合にアラートを発生させるために必要な `IsServerShuttingDown` メトリクスを追加。[#74429](https://github.com/ClickHouse/ClickHouse/pull/74429) ([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 +* EXPLAIN の出力に Iceberg テーブル名を追加しました。 [#74485](https://github.com/ClickHouse/ClickHouse/pull/74485) ([alekseev-maksim](https://github.com/alekseev-maksim)). +* 旧アナライザーで RECURSIVE CTE を使用した際のエラーメッセージを改善しました。 [#74523](https://github.com/ClickHouse/ClickHouse/pull/74523) ([Raúl Marín](https://github.com/Algunenano)). +* 拡張されたエラーメッセージを `system.errors` に表示できるようにしました。 [#74574](https://github.com/ClickHouse/ClickHouse/pull/74574) ([Vitaly Baranov](https://github.com/vitlibar)). +* clickhouse-keeper とのクライアント通信でパスワード認証を使用できるようにしました。この機能は、サーバーおよびクライアントに対して適切な SSL 設定を行っている場合にはそれほど有用ではありませんが、一部のケースでは依然として有用です。パスワードは 16 文字を超えることはできません。Keeper Auth モデルとは関連していません。 [#74673](https://github.com/ClickHouse/ClickHouse/pull/74673) ([alesapin](https://github.com/alesapin)). +* Config Reloader 用のエラーコードを追加。 [#74746](https://github.com/ClickHouse/ClickHouse/pull/74746) ([Garrett Thomas](https://github.com/garrettthomaskth)). +* MySQL および PostgreSQL のテーブル関数とエンジンにおいて IPv6 アドレスのサポートを追加しました。 [#74796](https://github.com/ClickHouse/ClickHouse/pull/74796) ([Mikhail Koviazin](https://github.com/mkmkme)). +* `divideDecimal` に対するショートサーキット最適化を実装。[#74280](https://github.com/ClickHouse/ClickHouse/issues/74280) を修正。[#74843](https://github.com/ClickHouse/ClickHouse/pull/74843)([Kevin Mingtarja](https://github.com/kevinmingtarja))。 +* スタートアップスクリプト内でユーザーを指定できるようになりました。 [#74894](https://github.com/ClickHouse/ClickHouse/pull/74894) ([pufit](https://github.com/pufit)). +* Azure SAS トークンのサポートを追加しました。 [#72959](https://github.com/ClickHouse/ClickHouse/pull/72959) ([Azat Khuzhin](https://github.com/azat)). + +#### バグ修正(公式安定版リリースでユーザーに影響する誤動作) + +* Parquet の圧縮レベルは、圧縮コーデックがそれをサポートしている場合にのみ設定されるようにしました。 [#74659](https://github.com/ClickHouse/ClickHouse/pull/74659) ([Arthur Passos](https://github.com/arthurpassos)). +* モディファイア付きの照合ロケールを使用するとエラーが発生するリグレッションを修正しました。例えば、`SELECT arrayJoin(['kk 50', 'KK 01', ' KK 2', ' KK 3', 'kk 1', 'x9y99', 'x9y100']) item ORDER BY item ASC COLLATE 'tr-u-kn-true-ka-shifted` は現在では正常に動作します。[#73544](https://github.com/ClickHouse/ClickHouse/pull/73544)([Robert Schulze](https://github.com/rschu1ze))。 +* SEQUENTIAL ノードを keeper-client で作成できなかった問題を修正。 [#64177](https://github.com/ClickHouse/ClickHouse/pull/64177) ([Duc Canh Le](https://github.com/canhld94)). +* position 関数での文字数カウントの不具合を修正しました。 [#71003](https://github.com/ClickHouse/ClickHouse/pull/71003) ([思维](https://github.com/heymind)). +* 部分的な権限の取り消しが正しく処理されていなかったため、アクセスエンティティに対する `RESTORE` 操作に本来より多くの権限が必要とされていました。この PR でこの問題を修正しました。Closes [#71853](https://github.com/ClickHouse/ClickHouse/issues/71853). [#71958](https://github.com/ClickHouse/ClickHouse/pull/71958) ([pufit](https://github.com/pufit)). +* `ALTER TABLE REPLACE/MOVE PARTITION FROM/TO TABLE` 実行後に発生していた一時停止を回避し、バックグラウンドタスクのスケジューリング用に正しい設定を取得するようにしました。 [#72024](https://github.com/ClickHouse/ClickHouse/pull/72024) ([Aleksei Filatov](https://github.com/aalexfvk)). +* 一部の入力および出力フォーマット(Parquet や Arrow など)における空のタプルの扱いを修正しました。 [#72616](https://github.com/ClickHouse/ClickHouse/pull/72616) ([Michael Kolupaev](https://github.com/al13n321))。 +* ワイルドカードを使用したデータベースやテーブルに対するカラムレベルの SELECT/INSERT 権限を付与する GRANT ステートメントは、エラーを返すようになりました。 [#72646](https://github.com/ClickHouse/ClickHouse/pull/72646) ([Johann Gan](https://github.com/johanngan)). +* 対象のアクセスエンティティに暗黙的な権限付与が存在するためにユーザーが `REVOKE ALL ON *.*` を実行できない状況を修正しました。 [#72872](https://github.com/ClickHouse/ClickHouse/pull/72872) ([pufit](https://github.com/pufit)). +* formatDateTime スカラ関数で正のタイムゾーンの書式設定を修正。 [#73091](https://github.com/ClickHouse/ClickHouse/pull/73091) ([ollidraese](https://github.com/ollidraese))。 +* PROXYv1 経由で接続が行われ、`auth_use_forwarded_address` が設定されている場合に、送信元ポートが正しく反映されるよう修正しました。以前はプロキシ側のポートが誤って使用されていました。`currentQueryID()` 関数を追加しました。 [#73095](https://github.com/ClickHouse/ClickHouse/pull/73095) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy))。 +* TCPHandler でフォーマット設定が NativeWriter に伝播され、`output_format_native_write_json_as_string` のような設定が正しく適用されるようにしました。 [#73179](https://github.com/ClickHouse/ClickHouse/pull/73179) ([Pavel Kruglov](https://github.com/Avogar)). * StorageObjectStorageQueue で発生するクラッシュを修正。 [#73274](https://github.com/ClickHouse/ClickHouse/pull/73274) ([Kseniia Sumarokova](https://github.com/kssenii)). -* サーバーのシャットダウン中にリフレッシュ可能なマテリアライズドビューでまれに発生するクラッシュを修正。 [#73323](https://github.com/ClickHouse/ClickHouse/pull/73323) ([Michael Kolupaev](https://github.com/al13n321)). -* 関数 `formatDateTime` の `%f` プレースホルダは、サブ秒部の 6 桁を常に出力するようになりました。これにより、MySQL の `DATE_FORMAT` 関数と動作の互換性が保たれます。以前の動作は、設定 `formatdatetime_f_prints_scale_number_of_digits = 1` を使用することで復元できます。 [#73324](https://github.com/ClickHouse/ClickHouse/pull/73324) ([ollidraese](https://github.com/ollidraese))。 -* `s3` ストレージおよびテーブル関数からの読み取り時における `_etag` 列でのフィルタリングを修正しました。 [#73353](https://github.com/ClickHouse/ClickHouse/pull/73353) ([Anton Popov](https://github.com/CurtizJ)). -* 古いアナライザーを使用している場合に、`JOIN ON` 式内で `IN (subquery)` が使われたときに発生する `Not-ready Set is passed as the second argument for function 'in'` エラーを修正しました。 [#73382](https://github.com/ClickHouse/ClickHouse/pull/73382) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). -* Dynamic カラムおよび JSON カラムに対する squashing の準備処理を修正。以前は、型/パスの上限に達していなくても、一部のケースで shared variant/shared data に新しい型が挿入されてしまうことがあった。 [#73388](https://github.com/ClickHouse/ClickHouse/pull/73388) ([Pavel Kruglov](https://github.com/Avogar))。 -* 型のバイナリデコード時に不正なサイズを検査し、過大なメモリ確保を避けるようにしました。 [#73390](https://github.com/ClickHouse/ClickHouse/pull/73390) ([Pavel Kruglov](https://github.com/Avogar)). -* 並列レプリカが有効な状態で単一レプリカのクラスタから読み取る際の論理エラーを修正しました。 [#73403](https://github.com/ClickHouse/ClickHouse/pull/73403) ([Michael Kolupaev](https://github.com/al13n321))。 -* ZooKeeper および旧 Keeper 使用時の ObjectStorageQueue の問題を修正。 [#73420](https://github.com/ClickHouse/ClickHouse/pull/73420) ([Antonio Andelic](https://github.com/antonio2368)). -* Hive パーティションをデフォルトで有効にするための修正を実装しました。 [#73479](https://github.com/ClickHouse/ClickHouse/pull/73479) ([Yarik Briukhovetskyi](https://github.com/yariks5s))。 -* ベクトル類似インデックス作成時のデータレースを修正。[#73517](https://github.com/ClickHouse/ClickHouse/pull/73517) ([Antonio Andelic](https://github.com/antonio2368))。 -* 辞書のソースに誤ったデータを含む関数がある場合に発生するセグメンテーションフォールトを修正します。 [#73535](https://github.com/ClickHouse/ClickHouse/pull/73535) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* storage S3(Azure)Queue における挿入失敗時のリトライ処理を修正。 [#70951](https://github.com/ClickHouse/ClickHouse/issues/70951) をクローズ。 [#73546](https://github.com/ClickHouse/ClickHouse/pull/73546)([Kseniia Sumarokova](https://github.com/kssenii))。 -* タプル内に `LowCardinality` 要素を含み、かつ設定 `optimize_functions_to_subcolumns` が有効な場合に、特定の状況で発生する可能性があった関数 `tupleElement` のエラーを修正しました。 [#73548](https://github.com/ClickHouse/ClickHouse/pull/73548) ([Anton Popov](https://github.com/CurtizJ)). -* 列挙型グロブの後にレンジが続く場合の構文解析を修正。[#73473](https://github.com/ClickHouse/ClickHouse/issues/73473) の問題を解決。[#73569](https://github.com/ClickHouse/ClickHouse/pull/73569)([Konstantin Bogdanov](https://github.com/thevar1able))。 -* 非レプリケートテーブルに対するサブクエリ内で、非レプリケート MergeTree 用の固定値 `parallel_replicas_for_non_replicated_merge_tree` が無視されていた問題を修正しました。 [#73584](https://github.com/ClickHouse/ClickHouse/pull/73584) ([Igor Nikonov](https://github.com/devcrafter)). -* タスクをスケジュールできない場合に std::logical_error がスローされる問題を修正。ストレステストで発見。[#73629](https://github.com/ClickHouse/ClickHouse/pull/73629) ([Alexander Gololobov](https://github.com/davenger)). -* 分散クエリに対して誤った処理段階が選択されることによる論理エラーを避けるため、`EXPLAIN SYNTAX` でクエリを解釈しないようにしました。 [#65205](https://github.com/ClickHouse/ClickHouse/issues/65205) を修正。 [#73634](https://github.com/ClickHouse/ClickHouse/pull/73634) ([Dmitry Novik](https://github.com/novikd))。 -* Dynamic カラムで発生しうるデータ不整合を修正しました。`Nested columns sizes are inconsistent with local_discriminators column size` という論理エラーが発生する可能性のあった問題を修正しました。 [#73644](https://github.com/ClickHouse/ClickHouse/pull/73644) ([Pavel Kruglov](https://github.com/Avogar)). -* `FINAL` と `SAMPLE` を含むクエリで発生する `NOT_FOUND_COLUMN_IN_BLOCK` を修正しました。`CollapsingMergeTree` からの `FINAL` を伴う SELECT クエリで誤った結果が返される問題を修正し、`FINAL` の最適化を有効にしました。 [#73682](https://github.com/ClickHouse/ClickHouse/pull/73682) ([Anton Popov](https://github.com/CurtizJ)). -* LIMIT BY COLUMNS で発生していたクラッシュを修正。 [#73686](https://github.com/ClickHouse/ClickHouse/pull/73686) ([Raúl Marín](https://github.com/Algunenano)). -* 通常のプロジェクションの使用が強制され、クエリが定義されたプロジェクションと完全に同一であるにもかかわらず、そのプロジェクションが選択されずにエラーが発生してしまうバグを修正しました。 [#73700](https://github.com/ClickHouse/ClickHouse/pull/73700) ([Shichao Jin](https://github.com/jsc0218)). +* サーバーシャットダウン時にまれに発生するリフレッシュ可能なマテリアライズドビューのクラッシュを修正。 [#73323](https://github.com/ClickHouse/ClickHouse/pull/73323) ([Michael Kolupaev](https://github.com/al13n321)). +* 関数 `formatDateTime` のプレースホルダ `%f` は、常に 6 桁のサブ秒精度の数字を生成するようになりました。これにより、MySQL の `DATE_FORMAT` 関数との動作互換性が確保されます。以前の動作は、設定 `formatdatetime_f_prints_scale_number_of_digits = 1` を使用することで復元できます。 [#73324](https://github.com/ClickHouse/ClickHouse/pull/73324) ([ollidraese](https://github.com/ollidraese)). +* `s3` ストレージおよびテーブル関数からの読み取り時の `_etag` 列によるフィルタリングを修正しました。 [#73353](https://github.com/ClickHouse/ClickHouse/pull/73353) ([Anton Popov](https://github.com/CurtizJ)). +* 旧アナライザーを使用している場合に、`JOIN ON` 式で `IN (subquery)` を使用すると発生する `Not-ready Set is passed as the second argument for function 'in'` エラーを修正。 [#73382](https://github.com/ClickHouse/ClickHouse/pull/73382) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). +* Dynamic および JSON カラムに対するスカッシュ処理の準備を修正しました。以前は、一部のケースで、型/パス数の制限に達していない場合でも、shared variant/shared data に新しい型が挿入されてしまうことがありました。 [#73388](https://github.com/ClickHouse/ClickHouse/pull/73388) ([Pavel Kruglov](https://github.com/Avogar)). +* 型のバイナリデコード時にサイズ値の破損を検査し、過大なメモリ割り当てを避けるようにしました。 [#73390](https://github.com/ClickHouse/ClickHouse/pull/73390) ([Pavel Kruglov](https://github.com/Avogar)). +* 並列レプリカを有効にした単一レプリカクラスタからの読み取り時に発生する論理エラーを修正しました。 [#73403](https://github.com/ClickHouse/ClickHouse/pull/73403) ([Michael Kolupaev](https://github.com/al13n321)). +* ZooKeeper および旧バージョンの Keeper 使用時の ObjectStorageQueue を修正。 [#73420](https://github.com/ClickHouse/ClickHouse/pull/73420) ([Antonio Andelic](https://github.com/antonio2368)). +* デフォルトで Hive パーティション化を有効にするために必要な修正を実装しました。 [#73479](https://github.com/ClickHouse/ClickHouse/pull/73479) ([Yarik Briukhovetskyi](https://github.com/yariks5s))。 +* ベクトル類似インデックスの作成時に発生するデータレースを修正。 [#73517](https://github.com/ClickHouse/ClickHouse/pull/73517) ([Antonio Andelic](https://github.com/antonio2368)). +* 辞書のデータソースに誤ったデータを含む関数がある場合に発生するセグメンテーションフォルトを修正しました。 [#73535](https://github.com/ClickHouse/ClickHouse/pull/73535) ([Yarik Briukhovetskyi](https://github.com/yariks5s))。 +* ストレージ S3(Azure)Queue における挿入失敗時の再試行処理を修正。[#70951](https://github.com/ClickHouse/ClickHouse/issues/70951) をクローズ。[#73546](https://github.com/ClickHouse/ClickHouse/pull/73546) ([Kseniia Sumarokova](https://github.com/kssenii)). +* `LowCardinality` 要素を含むタプルに対して設定 `optimize_functions_to_subcolumns` を有効化している場合に、特定の状況で発生していた関数 `tupleElement` のエラーを修正しました。 [#73548](https://github.com/ClickHouse/ClickHouse/pull/73548) ([Anton Popov](https://github.com/CurtizJ)). +* enum の glob の後に range one が続く場合の構文解析を修正しました。[#73473](https://github.com/ClickHouse/ClickHouse/issues/73473) を修正。[#73569](https://github.com/ClickHouse/ClickHouse/pull/73569)([Konstantin Bogdanov](https://github.com/thevar1able))。 +* 非レプリケート MergeTree テーブルに対する固定設定 `parallel_replicas_for_non_replicated_merge_tree` が、非レプリケートテーブルに対するサブクエリ内で無視されていた問題を修正しました。 [#73584](https://github.com/ClickHouse/ClickHouse/pull/73584) ([Igor Nikonov](https://github.com/devcrafter)). +* タスクをスケジュールできない場合にスローされる `std::logical_error` の修正。ストレステスト中に発見。[#73629](https://github.com/ClickHouse/ClickHouse/pull/73629)([Alexander Gololobov](https://github.com/davenger))。 +* 分散クエリで誤った処理ステージが選択されて論理エラーが発生するのを防ぐため、`EXPLAIN SYNTAX` ではクエリを解釈しないようにしました。[#65205](https://github.com/ClickHouse/ClickHouse/issues/65205) を修正。[#73634](https://github.com/ClickHouse/ClickHouse/pull/73634) ([Dmitry Novik](https://github.com/novikd))。 +* Dynamic カラムにおいて発生しうるデータ不整合を修正しました。`Nested columns sizes are inconsistent with local_discriminators column size` という論理エラーが発生する可能性のある問題を修正しました。 [#73644](https://github.com/ClickHouse/ClickHouse/pull/73644) ([Pavel Kruglov](https://github.com/Avogar)). +* `FINAL` および `SAMPLE` を使用するクエリで発生していた `NOT_FOUND_COLUMN_IN_BLOCK` エラーを修正しました。`CollapsingMergeTree` に対する `FINAL` 付きの SELECT クエリで誤った結果が返される問題を修正し、`FINAL` に対する最適化を有効化しました。 [#73682](https://github.com/ClickHouse/ClickHouse/pull/73682) ([Anton Popov](https://github.com/CurtizJ)). +* LIMIT BY COLUMNS で発生するクラッシュを修正。 [#73686](https://github.com/ClickHouse/ClickHouse/pull/73686) ([Raúl Marín](https://github.com/Algunenano))。 +* 通常のプロジェクションの使用が強制され、かつクエリが定義済みのプロジェクションと完全に同一であるにもかかわらず、そのプロジェクションが選択されずエラーが報告されてしまうバグを修正しました。 [#73700](https://github.com/ClickHouse/ClickHouse/pull/73700) ([Shichao Jin](https://github.com/jsc0218)). * Dynamic/Object 構造体のデシリアライズ処理を修正しました。以前は CANNOT_READ_ALL_DATA 例外が発生する可能性がありました。 [#73767](https://github.com/ClickHouse/ClickHouse/pull/73767) ([Pavel Kruglov](https://github.com/Avogar)). -* バックアップからパーツを復元する際に `metadata_version.txt` をスキップするようにしました。[#73768](https://github.com/ClickHouse/ClickHouse/pull/73768) ([Vitaly Baranov](https://github.com/vitlibar)). -* LIKE 句を使用して Enum 型にキャストした際に発生するセグメンテーションフォールトを修正。 [#73775](https://github.com/ClickHouse/ClickHouse/pull/73775) ([zhanglistar](https://github.com/zhanglistar))。 -* S3 Express バケットがディスクとして動作しない問題を修正。 [#73777](https://github.com/ClickHouse/ClickHouse/pull/73777) ([Sameer Tamsekar](https://github.com/stamsekar))。 -* CollapsingMergeTree テーブルで sign 列の値が不正な行もマージできるようにしました。 [#73864](https://github.com/ClickHouse/ClickHouse/pull/73864) ([Christoph Wurm](https://github.com/cwurm)). -* オフラインレプリカに対して DDL を実行した際に発生するエラーを修正しました。 [#73876](https://github.com/ClickHouse/ClickHouse/pull/73876) ([Tuan Pham Anh](https://github.com/tuanpach)). -* ネストされたタプルに対して明示的な名前('keys','values')を持たない `Map` を作成できることが原因で、`map()` 型の比較がときどき失敗する問題を修正しました。 [#73878](https://github.com/ClickHouse/ClickHouse/pull/73878) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* `GROUP BY ALL` 句の解決時にウィンドウ関数を無視するようにしました。[#73501](https://github.com/ClickHouse/ClickHouse/issues/73501) を修正。[#73916](https://github.com/ClickHouse/ClickHouse/pull/73916)([Dmitry Novik](https://github.com/novikd))。 -* 暗黙的な権限の扱いを修正(以前はワイルドカードとして動作していた)。 [#73932](https://github.com/ClickHouse/ClickHouse/pull/73932) ([Azat Khuzhin](https://github.com/azat)). -* ネストされた Maps の作成時に発生する高いメモリ使用量を修正。 [#73982](https://github.com/ClickHouse/ClickHouse/pull/73982) ([Pavel Kruglov](https://github.com/Avogar)). -* 空のキーを含むネストされた JSON のパースを修正。 [#73993](https://github.com/ClickHouse/ClickHouse/pull/73993) ([Pavel Kruglov](https://github.com/Avogar))。 -* 修正: あるエイリアスが別のエイリアスから参照され、逆順で選択されている場合に、そのエイリアスが projection に追加されない場合がある問題を修正。 [#74033](https://github.com/ClickHouse/ClickHouse/pull/74033) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* Azure 環境での plain_rewritable ディスク初期化時に発生する "object not found" エラーを無視するようにしました。 [#74059](https://github.com/ClickHouse/ClickHouse/pull/74059) ([Julia Kartseva](https://github.com/jkartseva)). +* バックアップからパーツを復元する際、`metadata_version.txt` をスキップするようにしました。 [#73768](https://github.com/ClickHouse/ClickHouse/pull/73768) ([Vitaly Baranov](https://github.com/vitlibar)). +* LIKE を使用した Enum への CAST 時に発生するセグメンテーションフォルトを修正。 [#73775](https://github.com/ClickHouse/ClickHouse/pull/73775) ([zhanglistar](https://github.com/zhanglistar)). +* ディスクとして機能しない S3 Express バケットの問題を修正。 [#73777](https://github.com/ClickHouse/ClickHouse/pull/73777) ([Sameer Tamsekar](https://github.com/stamsekar)). +* CollapsingMergeTree テーブルで、`sign` 列に無効な値を持つ行をマージできるようにしました。 [#73864](https://github.com/ClickHouse/ClickHouse/pull/73864) ([Christoph Wurm](https://github.com/cwurm)). +* オフラインのレプリカに対して DDL をクエリするとエラーが発生していた問題を修正。 [#73876](https://github.com/ClickHouse/ClickHouse/pull/73876) ([Tuan Pham Anh](https://github.com/tuanpach)). +* ネストされたタプルに明示的な名前('keys','values')が付いていない `Map` を作成できていたために、`map()` 型の比較がまれに失敗していた問題を修正しました。 [#73878](https://github.com/ClickHouse/ClickHouse/pull/73878) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* `GROUP BY ALL` 句の解決時にウィンドウ関数を無視するようにしました。 [#73501](https://github.com/ClickHouse/ClickHouse/issues/73501) の問題を修正。 [#73916](https://github.com/ClickHouse/ClickHouse/pull/73916)([Dmitry Novik](https://github.com/novikd))。 +* 暗黙的な権限を修正(以前はワイルドカードとして扱われていた)。 [#73932](https://github.com/ClickHouse/ClickHouse/pull/73932) ([Azat Khuzhin](https://github.com/azat)). +* ネストされた Map を作成する際の高いメモリ使用量を修正しました。 [#73982](https://github.com/ClickHouse/ClickHouse/pull/73982) ([Pavel Kruglov](https://github.com/Avogar)). +* 空キーを含むネストされた JSON の解析を修正。 [#73993](https://github.com/ClickHouse/ClickHouse/pull/73993) ([Pavel Kruglov](https://github.com/Avogar)). +* 修正: 別のエイリアスから参照され、かつ逆順で選択された場合に、そのエイリアスがプロジェクションに含まれないことがある問題を修正。 [#74033](https://github.com/ClickHouse/ClickHouse/pull/74033) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* plain_rewritable ディスク初期化中の Azure での object not found エラーを無視するようになりました。 [#74059](https://github.com/ClickHouse/ClickHouse/pull/74059) ([Julia Kartseva](https://github.com/jkartseva)). * enum 型および空テーブルに対する `any` と `anyLast` の挙動を修正。 [#74061](https://github.com/ClickHouse/ClickHouse/pull/74061) ([Joanna Hulboj](https://github.com/jh0x)). * ユーザーが Kafka テーブルエンジンでキーワード引数を指定した場合の不具合を修正します。 [#74064](https://github.com/ClickHouse/ClickHouse/pull/74064) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* Storage `S3Queue` の設定を、プレフィックス "s3queue_" の有無を切り替える際の不具合を修正。 [#74075](https://github.com/ClickHouse/ClickHouse/pull/74075) ([Kseniia Sumarokova](https://github.com/kssenii)). -* 設定 `allow_push_predicate_ast_for_distributed_subqueries` を追加しました。これにより、アナライザーを用いた分散クエリで AST ベースの述語プッシュダウンが有効になります。これは、クエリプランのシリアライズに対応した分散クエリがサポートされるまでの一時的なソリューションです。 [#66878](https://github.com/ClickHouse/ClickHouse/issues/66878) [#69472](https://github.com/ClickHouse/ClickHouse/issues/69472) [#65638](https://github.com/ClickHouse/ClickHouse/issues/65638) [#68030](https://github.com/ClickHouse/ClickHouse/issues/68030) [#73718](https://github.com/ClickHouse/ClickHouse/issues/73718) をクローズします。 [#74085](https://github.com/ClickHouse/ClickHouse/pull/74085) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). -* [#73095](https://github.com/ClickHouse/ClickHouse/issues/73095) の後、`forwarded_for` フィールドにポート番号が含まれる場合があり、その結果、ポート付きのホスト名を解決できなくなる不具合を修正しました。[#74116](https://github.com/ClickHouse/ClickHouse/pull/74116)([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy))。 -* `ALTER TABLE (DROP STATISTICS ...) (DROP STATISTICS ...)` の不正な書式を修正しました。 [#74126](https://github.com/ClickHouse/ClickHouse/pull/74126) ([Han Fei](https://github.com/hanfei1991)). -* 問題 [#66112](https://github.com/ClickHouse/ClickHouse/issues/66112) に対する修正。[#74128](https://github.com/ClickHouse/ClickHouse/pull/74128)([Anton Ivashkin](https://github.com/ianton-ru))。 -* `CREATE TABLE` で `Loop` をテーブルエンジンとして使用することは、できなくなりました。この組み合わせは以前、セグメンテーションフォールトの原因となっていました。 [#74137](https://github.com/ClickHouse/ClickHouse/pull/74137) ([Yarik Briukhovetskyi](https://github.com/yariks5s))。 -* PostgreSQL および SQLite の table 関数における SQL インジェクションの脆弱性を修正しました。 [#74144](https://github.com/ClickHouse/ClickHouse/pull/74144) ([Pablo Marcos](https://github.com/pamarcos)). -* 圧縮された Memory エンジンテーブルからサブカラムを読み取る際にクラッシュする問題を修正。[#74009](https://github.com/ClickHouse/ClickHouse/issues/74009) に対応。[#74161](https://github.com/ClickHouse/ClickHouse/pull/74161)([Nikita Taranov](https://github.com/nickitat))。 -* system.detached_tables へのクエリで発生していた無限ループを修正しました。 [#74190](https://github.com/ClickHouse/ClickHouse/pull/74190) ([Konstantin Morozov](https://github.com/k-morozov))。 -* s3queue でファイルを失敗としてマークする際の論理エラーを修正。 [#74216](https://github.com/ClickHouse/ClickHouse/pull/74216) ([Kseniia Sumarokova](https://github.com/kssenii)). -* ベースバックアップからの `RESTORE` 時のネイティブコピー設定(`allow_s3_native_copy`/`allow_azure_native_copy`)を修正しました。 [#74286](https://github.com/ClickHouse/ClickHouse/pull/74286) ([Azat Khuzhin](https://github.com/azat)). -* データベース内の切り離されたテーブルの数が max_block_size の倍数になっている場合に発生していた問題を修正しました。 [#74289](https://github.com/ClickHouse/ClickHouse/pull/74289) ([Konstantin Morozov](https://github.com/k-morozov)). -* ソースと宛先でクレデンシャルが異なる場合の ObjectStorage(S3 など)経由のコピー処理を修正。 [#74331](https://github.com/ClickHouse/ClickHouse/pull/74331) ([Azat Khuzhin](https://github.com/azat)). -* GCS 上のネイティブコピーにおける「JSON API で Rewrite メソッドを使用する」動作の検出を修正。 [#74338](https://github.com/ClickHouse/ClickHouse/pull/74338) ([Azat Khuzhin](https://github.com/azat)). -* `BackgroundMergesAndMutationsPoolSize` の誤った計算を修正(実際の値の 2 倍になってしまっていた)。 [#74509](https://github.com/ClickHouse/ClickHouse/pull/74509) ([alesapin](https://github.com/alesapin))。 -* Cluster Discovery 有効時に Keeper の watch がリークする不具合を修正。 [#74521](https://github.com/ClickHouse/ClickHouse/pull/74521) ([RinChanNOW](https://github.com/RinChanNOWWW)). -* UBSan により報告されたメモリアラインメント問題を修正 [#74512](https://github.com/ClickHouse/ClickHouse/issues/74512)。 [#74534](https://github.com/ClickHouse/ClickHouse/pull/74534) ([Arthur Passos](https://github.com/arthurpassos))。 -* テーブル作成中の KeeperMap の同時実行クリーンアップ処理を修正しました。 [#74568](https://github.com/ClickHouse/ClickHouse/pull/74568) ([Antonio Andelic](https://github.com/antonio2368)). -* 正しいクエリ結果を維持するため、`EXCEPT` または `INTERSECT` が存在する場合は、サブクエリ内の未使用の投影列を削除しないようにしました。[#73930](https://github.com/ClickHouse/ClickHouse/issues/73930) を修正。[#66465](https://github.com/ClickHouse/ClickHouse/issues/66465) を修正。[#74577](https://github.com/ClickHouse/ClickHouse/pull/74577)([Dmitry Novik](https://github.com/novikd))。 -* `Tuple` 列を含み、スパースシリアライゼーションが有効なテーブル間での `INSERT SELECT` クエリを修正しました。 [#74698](https://github.com/ClickHouse/ClickHouse/pull/74698) ([Anton Popov](https://github.com/CurtizJ)). -* 関数 `right` が const 値の負のオフセットを指定した場合に正しく動作しませんでした。 [#74701](https://github.com/ClickHouse/ClickHouse/pull/74701) ([Daniil Ivanik](https://github.com/divanik)). -* クライアント側での誤った伸長処理が原因で gzip 圧縮されたデータの挿入が失敗することがある問題を修正。 [#74707](https://github.com/ClickHouse/ClickHouse/pull/74707) ([siyuan](https://github.com/linkwk7)). -* ワイルドカードを含む権限付与に対する部分的な取り消しにより、想定以上の権限が削除されてしまう可能性がありました。 [#74263](https://github.com/ClickHouse/ClickHouse/issues/74263) をクローズしました。 [#74751](https://github.com/ClickHouse/ClickHouse/pull/74751) ([pufit](https://github.com/pufit)). -* Keeper の修正: ディスクからログエントリを読み取る処理の不具合を修正。 [#74785](https://github.com/ClickHouse/ClickHouse/pull/74785) ([Antonio Andelic](https://github.com/antonio2368)). -* SYSTEM REFRESH/START/STOP VIEW に対する権限チェックを修正しました。特定のビューに対するクエリを実行する際に、`*.*` への権限を持つ必要はなくなり、そのビューに対する権限だけがあればよくなりました。 [#74789](https://github.com/ClickHouse/ClickHouse/pull/74789) ([Alexander Tokmakov](https://github.com/tavplubix)). -* `hasColumnInTable` 関数はエイリアスカラムを考慮していません。エイリアスカラムでも動作するように修正しました。 [#74841](https://github.com/ClickHouse/ClickHouse/pull/74841) ([Bharat Nallan](https://github.com/bharatnc))。 -* Azure Blob Storage 上で、空のカラムを含むテーブルのデータパーツをマージする際に発生していた FILE_DOESNT_EXIST エラーを修正。 [#74892](https://github.com/ClickHouse/ClickHouse/pull/74892) ([Julia Kartseva](https://github.com/jkartseva)). -* 一時テーブルとの結合時のプロジェクション列名を修正し、[#68872](https://github.com/ClickHouse/ClickHouse/issues/68872) をクローズ。[#74897](https://github.com/ClickHouse/ClickHouse/pull/74897)([Vladimir Cherkasov](https://github.com/vdimir))。 - - +* Storage `S3Queue` の設定で、接頭辞 "s3queue_" の有無を切り替える処理を修正しました。 [#74075](https://github.com/ClickHouse/ClickHouse/pull/74075) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 設定 `allow_push_predicate_ast_for_distributed_subqueries` を追加しました。これにより、analyzer を使用する分散クエリに対して AST ベースの述語プッシュダウンが有効になります。これは、クエリプランのシリアライズを伴う分散クエリがサポートされるまでの一時的なソリューションとして使用します。[#66878](https://github.com/ClickHouse/ClickHouse/issues/66878) [#69472](https://github.com/ClickHouse/ClickHouse/issues/69472) [#65638](https://github.com/ClickHouse/ClickHouse/issues/65638) [#68030](https://github.com/ClickHouse/ClickHouse/issues/68030) [#73718](https://github.com/ClickHouse/ClickHouse/issues/73718) をクローズします。[#74085](https://github.com/ClickHouse/ClickHouse/pull/74085) ([Nikolai Kochetov](https://github.com/KochetovNicolai))。 +* [#73095](https://github.com/ClickHouse/ClickHouse/issues/73095) 対応以降、`forwarded_for` フィールドにポートが含まれる場合があり、その結果、ポート付きホスト名を解決できなくなっていた問題を修正しました。 [#74116](https://github.com/ClickHouse/ClickHouse/pull/74116) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy))。 +* `ALTER TABLE (DROP STATISTICS ...) (DROP STATISTICS ...)` の誤った書式を修正しました。 [#74126](https://github.com/ClickHouse/ClickHouse/pull/74126) ([Han Fei](https://github.com/hanfei1991)). +* Issue [#66112](https://github.com/ClickHouse/ClickHouse/issues/66112) の修正。[#74128](https://github.com/ClickHouse/ClickHouse/pull/74128)([Anton Ivashkin](https://github.com/ianton-ru))。 +* `CREATE TABLE` でテーブルエンジンとして `Loop` を使用することは、もはやできなくなりました。この組み合わせは以前、セグメンテーションフォルトを引き起こしていました。 [#74137](https://github.com/ClickHouse/ClickHouse/pull/74137) ([Yarik Briukhovetskyi](https://github.com/yariks5s))。 +* PostgreSQL および SQLite のテーブル関数における SQL インジェクションを防止するセキュリティ上の問題を修正。 [#74144](https://github.com/ClickHouse/ClickHouse/pull/74144) ([Pablo Marcos](https://github.com/pamarcos)). +* 圧縮された Memory エンジンのテーブルからサブカラムを読み取る際に発生していたクラッシュを修正しました。[#74009](https://github.com/ClickHouse/ClickHouse/issues/74009) を解決します。[#74161](https://github.com/ClickHouse/ClickHouse/pull/74161)([Nikita Taranov](https://github.com/nickitat))。 +* system.detached_tables に対するクエリで発生していた無限ループを修正しました。 [#74190](https://github.com/ClickHouse/ClickHouse/pull/74190) ([Konstantin Morozov](https://github.com/k-morozov)). +* ファイルを失敗としてマークする際の s3queue の論理エラーを修正しました。 [#74216](https://github.com/ClickHouse/ClickHouse/pull/74216) ([Kseniia Sumarokova](https://github.com/kssenii)). +* ベースバックアップからの `RESTORE` 時のネイティブコピー設定(`allow_s3_native_copy`/`allow_azure_native_copy`)を修正。 [#74286](https://github.com/ClickHouse/ClickHouse/pull/74286) ([Azat Khuzhin](https://github.com/azat)). +* データベース内のデタッチされたテーブル数が `max_block_size` の倍数である場合に発生していた問題を修正しました。 [#74289](https://github.com/ClickHouse/ClickHouse/pull/74289) ([Konstantin Morozov](https://github.com/k-morozov)). +* ソースと宛先の認証情報が異なる場合の ObjectStorage(S3)経由のコピー処理を修正。 [#74331](https://github.com/ClickHouse/ClickHouse/pull/74331) ([Azat Khuzhin](https://github.com/azat)). +* GCS 上のネイティブコピーで JSON API の Rewrite メソッド使用検出を修正しました。 [#74338](https://github.com/ClickHouse/ClickHouse/pull/74338) ([Azat Khuzhin](https://github.com/azat))。 +* `BackgroundMergesAndMutationsPoolSize` の誤った計算を修正しました(実際の値の 2 倍になっていました)。 [#74509](https://github.com/ClickHouse/ClickHouse/pull/74509) ([alesapin](https://github.com/alesapin)). +* Cluster Discovery を有効化した際に Keeper ウォッチがリークする不具合を修正。 [#74521](https://github.com/ClickHouse/ClickHouse/pull/74521) ([RinChanNOW](https://github.com/RinChanNOWWW)). +* UBSan により報告されたメモリアライメントの問題を修正 [#74512](https://github.com/ClickHouse/ClickHouse/issues/74512)。 [#74534](https://github.com/ClickHouse/ClickHouse/pull/74534)([Arthur Passos](https://github.com/arthurpassos))。 +* テーブル作成中に発生する KeeperMap の並列クリーンアップ処理を修正しました。 [#74568](https://github.com/ClickHouse/ClickHouse/pull/74568) ([Antonio Andelic](https://github.com/antonio2368))。 +* `EXCEPT` や `INTERSECT` が存在する場合でも、サブクエリ内の未使用の射影列を削除しないようにして、クエリ結果の正しさを保証します。[#73930](https://github.com/ClickHouse/ClickHouse/issues/73930) を修正。[#66465](https://github.com/ClickHouse/ClickHouse/issues/66465) を修正。[#74577](https://github.com/ClickHouse/ClickHouse/pull/74577)([Dmitry Novik](https://github.com/novikd))。 +* `Tuple` 列を含み、スパースシリアライゼーションが有効になっているテーブル間での `INSERT SELECT` クエリを修正しました。 [#74698](https://github.com/ClickHouse/ClickHouse/pull/74698) ([Anton Popov](https://github.com/CurtizJ)). +* 関数 `right` が、定数の負のオフセットを使用した場合に正しく動作しませんでした。 [#74701](https://github.com/ClickHouse/ClickHouse/pull/74701) ([Daniil Ivanik](https://github.com/divanik))。 +* クライアント側での不完全な伸長処理が原因で、gzip 圧縮データの挿入が失敗することがある問題を修正しました。 [#74707](https://github.com/ClickHouse/ClickHouse/pull/74707) ([siyuan](https://github.com/linkwk7)). +* ワイルドカードを含む権限付与に対して部分的な権限剥奪を行うと、想定以上の権限が削除されてしまう可能性がありました。この問題を修正しました [#74263](https://github.com/ClickHouse/ClickHouse/issues/74263)。 [#74751](https://github.com/ClickHouse/ClickHouse/pull/74751) ([pufit](https://github.com/pufit))。 +* Keeper の修正: ディスクからのログエントリ読み取り処理を修正。 [#74785](https://github.com/ClickHouse/ClickHouse/pull/74785) ([Antonio Andelic](https://github.com/antonio2368)). +* SYSTEM REFRESH/START/STOP VIEW に対する権限チェック処理を修正しました。これにより、特定のビューに対するクエリを実行する際に `*.*` への権限を持つ必要がなくなり、そのビューに対する権限だけがあればよくなりました。 [#74789](https://github.com/ClickHouse/ClickHouse/pull/74789) ([Alexander Tokmakov](https://github.com/tavplubix)). +* `hasColumnInTable` 関数はエイリアス列を考慮していません。エイリアス列にも対応するように修正しました。 [#74841](https://github.com/ClickHouse/ClickHouse/pull/74841) ([Bharat Nallan](https://github.com/bharatnc))。 +* Azure Blob Storage 上で空のカラムを含むテーブルのデータパーツのマージ中に発生する FILE_DOESNT_EXIST エラーを修正。 [#74892](https://github.com/ClickHouse/ClickHouse/pull/74892) ([Julia Kartseva](https://github.com/jkartseva)). +* 一時テーブル結合時のプロジェクション列名を修正し、[#68872](https://github.com/ClickHouse/ClickHouse/issues/68872) をクローズ。[#74897](https://github.com/ClickHouse/ClickHouse/pull/74897)([Vladimir Cherkasov](https://github.com/vdimir))。 #### ビルド/テスト/パッケージングの改善 -* ユニバーサルインストールスクリプトが、macOS 上でもインストールを提案するようになりました。 [#74339](https://github.com/ClickHouse/ClickHouse/pull/74339) ([Alexey Milovidov](https://github.com/alexey-milovidov)). + +* 汎用インストールスクリプトが、macOS 上でもインストールを案内するようになりました。 [#74339](https://github.com/ClickHouse/ClickHouse/pull/74339) ([Alexey Milovidov](https://github.com/alexey-milovidov)). \ No newline at end of file diff --git a/i18n/ru/code.json b/i18n/ru/code.json index 3f7443049fb..63853e6d9fe 100644 --- a/i18n/ru/code.json +++ b/i18n/ru/code.json @@ -69,7 +69,7 @@ }, "theme.SearchPage.algoliaLabel": { "message": "Поиск с помощью Algolia", - "description": "ARIA-метка для упоминаний Algolia" + "description": "ARIA-метка для упоминания «Algolia»" }, "theme.SearchPage.noResultsText": { "message": "Ничего не найдено", @@ -84,60 +84,60 @@ "description": "ARIA-метка для последних записей в боковой панели блога" }, "theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel": { - "message": "Свернуть или развернуть «{label}»", - "description": "Метка ARIA для переключения состояния сворачиваемой категории боковой панели" + "message": "Свернуть/развернуть категорию боковой панели «{label}»", + "description": "ARIA-метка для переключения категории в сворачиваемой боковой панели" }, "theme.NavBar.navAriaLabel": { - "message": "Навигация", + "message": "Главная", "description": "ARIA-метка для основного меню навигации" }, "theme.navbar.mobileLanguageDropdown.label": { - "message": "Другие языки", + "message": "Языки", "description": "Метка мобильного выпадающего списка выбора языка" }, "theme.blog.post.readMore": { "message": "Подробнее", - "description": "Метка, отображаемая в выдержках записей блога и ведущая к полным версиям записей" + "description": "Метка, используемая в анонсах записей блога для ссылки на полные статьи блога" }, "theme.blog.post.readMoreLabel": { - "message": "Узнайте больше о {title}", - "description": "ARIA-метка для ссылок из анонсов к полным записям блога" + "message": "Подробнее о {title}", + "description": "Метка ARIA для ссылки из отрывков к полным записям блога" }, "theme.blog.post.readingTime.plurals": { - "message": "Примерное время чтения: {readingTime} мин", - "description": "Метка с учетом форм множественного числа для строки «{readingTime} мин чтения». Используйте столько форм множественного числа, сколько поддерживает ваш язык (разделяйте символом «|»); см. https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html" + "message": "1 минута на чтение|{readingTime} мин на чтение", + "description": "Множественная форма для «{readingTime} мин чтения». Используйте столько форм множественного числа (разделённых символом \"|\"), сколько поддерживает ваш язык (см. https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" }, "theme.docs.breadcrumbs.home": { - "message": "Главная", - "description": "ARIA-метка для главной страницы в цепочке навигации (хлебных крошках)" + "message": "Главная страница", + "description": "ARIA-метка для ссылки на главную страницу в цепочке навигации (breadcrumbs)" }, "theme.docs.sidebar.navAriaLabel": { "message": "Боковое меню документации", - "description": "ARIA-метка для боковой навигации" + "description": "ARIA-метка для боковой панели навигации" }, "theme.docs.sidebar.collapseButtonTitle": { - "message": "Закрыть боковую панель", - "description": "Текст атрибута title для кнопки сворачивания боковой панели документации" + "message": "Свернуть боковую панель", + "description": "Атрибут title для кнопки сворачивания боковой панели документации" }, "theme.docs.sidebar.collapseButtonAriaLabel": { - "message": "Закрыть боковую панель", - "description": "Атрибут title для кнопки сворачивания боковой панели документации" + "message": "Свернуть боковую панель", + "description": "Атрибут title для кнопки свертывания боковой панели документации" }, "theme.docs.sidebar.closeSidebarButtonAriaLabel": { - "message": "Закрыть меню", - "description": "ARIA-метка кнопки закрытия мобильной боковой панели" + "message": "Закрыть панель навигации", + "description": "ARIA-метка кнопки закрытия мобильного бокового меню" }, "theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel": { - "message": "← Вернуться в главное меню", - "description": "Подпись для кнопки «Назад», которая возвращает в главное меню внутри вторичного меню боковой панели мобильной панели навигации (обычно используется для отображения боковой панели документации)" + "message": "← Назад в главное меню", + "description": "Подпись кнопки «Назад» для возврата в главное меню внутри бокового меню мобильной панели навигации (во вторичном меню, которое, в частности, используется для отображения боковой панели документации)" }, "theme.ErrorPageContent.title": { - "message": "Произошла ошибка", + "message": "Произошёл сбой на этой странице.", "description": "Заголовок страницы-заглушки, отображаемой при сбое страницы" }, "theme.BackToTopButton.buttonAriaLabel": { "message": "Наверх", - "description": "Метка ARIA для кнопки «Вернуться к началу страницы»" + "description": "ARIA-метка для кнопки «Наверх»" }, "theme.blog.title": { "message": "База знаний", @@ -145,735 +145,322 @@ }, "theme.blog.archive.title": { "message": "Архив", - "description": "Заголовок страницы и основной заголовок страницы архива блога" + "description": "Заголовок страницы и hero-блока страницы архива блога" }, "theme.blog.archive.description": { "message": "Архив", - "description": "Описание страницы и hero-блока для страницы архива блога" + "description": "Описание страницы и hero-блока на странице архива блога" }, "theme.blog.paginator.navAriaLabel": { - "message": "Навигация по списку записей блога", + "message": "Навигация по странице списка записей блога", "description": "ARIA-метка для навигации по страницам блога" }, "theme.blog.paginator.newerEntries": { - "message": "Новая статья", - "description": "Подпись ссылки для перехода на страницу более новых записей блога (предыдущая страница)" + "message": "Более новые записи", + "description": "Надпись, используемая для перехода на страницу более новых записей блога (предыдущая страница)" }, "theme.blog.paginator.olderEntries": { - "message": "Предыдущие статьи", - "description": "Подпись для перехода к более ранним записям блога (следующая страница)" + "message": "Предыдущие записи", + "description": "Подпись ссылки для перехода к более старым записям блога (следующая страница)" }, "theme.blog.post.paginator.navAriaLabel": { - "message": "Навигация по статье", - "description": "ARIA-метка для постраничной навигации по записям блога" + "message": "Навигация по странице записи в блоге", + "description": "Метка ARIA для постраничной навигации по записям блога" }, "theme.blog.post.paginator.newerPost": { - "message": "Новая статья", - "description": "Надпись на кнопке, переходящей к следующей/предыдущей записи блога" + "message": "Следующая запись", + "description": "Текст кнопки в блоге для перехода к следующей/предыдущей записи" }, "theme.blog.post.paginator.olderPost": { - "message": "Предыдущие статьи", - "description": "Подпись кнопки навигации по блогу для перехода к предыдущей/следующей записи" + "message": "Предыдущая статья", + "description": "Текст кнопки в блоге для перехода к предыдущей/следующей записи" }, "theme.tags.tagsPageLink": { "message": "Просмотреть все теги", - "description": "Подпись ссылки на страницу списка тегов" + "description": "Текст ссылки, ведущей на страницу списка тегов" }, "theme.colorToggle.ariaLabel": { - "message": "Переключить тёмный режим (текущий: {mode})", + "message": "Переключить тему оформления (тёмная/светлая, сейчас: {mode})", "description": "ARIA-метка для переключателя цветовой схемы панели навигации" }, "theme.colorToggle.ariaLabel.mode.dark": { - "message": "Тёмная тема", - "description": "Название тёмной темы оформления" + "message": "тёмная тема", + "description": "Название тёмного цветового режима" }, "theme.colorToggle.ariaLabel.mode.light": { - "message": "Светлая тема", - "description": "Название для светлой темы оформления" + "message": "светлая тема", + "description": "Название светлой цветовой темы" }, "theme.docs.DocCard.categoryDescription.plurals": { - "message": "{count} элементов", - "description": "Описание по умолчанию, отображаемое на карточке категории в сгенерированном индексе и показывающее, сколько элементов в ней содержится" + "message": "1 элемент|{count} элементов", + "description": "Описание по умолчанию для карточки категории в сгенерированном индексе, отображающее количество элементов в этой категории" }, "theme.docs.paginator.navAriaLabel": { - "message": "Постраничная навигация документации", - "description": "ARIA-метка для постраничной навигации в документации" + "message": "Страницы документации", + "description": "ARIA-метка для элемента постраничной навигации в документации" }, "theme.docs.paginator.previous": { "message": "Предыдущая", - "description": "Подпись для перехода к предыдущему документу" + "description": "Текст кнопки для перехода к предыдущему документу" }, "theme.docs.paginator.next": { "message": "Далее", - "description": "Подпись для перехода к следующему документу" + "description": "Надпись, используемая для перехода к следующему документу" }, "theme.docs.tagDocListPageTitle.nDocsTagged": { - "message": "{count} документов с тегами", - "description": "Метка во множественном числе для «{count} docs tagged». Используйте столько форм множественного числа (разделённых символом «|»), сколько поддерживает ваш язык (см. https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" + "message": "Один документ помечен тегом|{count} документов помечено тегом", + "description": "Множественные формы метки для «{count} docs tagged». Укажите столько форм множественного числа (разделённых символом «|»), сколько поддерживает ваш язык (см. https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" }, "theme.docs.tagDocListPageTitle": { "message": "{nDocsTagged} документов с тегом «{tagName}»", - "description": "Заголовок страницы для тега документации" + "description": "Заголовок страницы для тега в документации" }, "theme.docs.versions.unreleasedVersionLabel": { - "message": "Эта документация относится к предварительной версии {siteTitle} {versionLabel}.", - "description": "Метка, показывающая, что пользователь просматривает еще не опубликованную версию документации" + "message": "Это неопубликованная документация для версии {siteTitle} {versionLabel}.", + "description": "Метка, сообщающая пользователю, что он просматривает ещё не выпущенную версию документации" }, "theme.docs.versions.unmaintainedVersionLabel": { - "message": "Эта документация относится к {siteTitle} версии {versionLabel} и больше не обновляется.", - "description": "Метка, отображаемая пользователям при просмотре неподдерживаемой версии документации" + "message": "Это документация для {siteTitle} {versionLabel}, которая больше не находится в стадии активной поддержки.", + "description": "Метка, информирующая пользователя о том, что он просматривает неподдерживаемую версию документации" }, "theme.docs.versions.latestVersionSuggestionLabel": { - "message": "Обратитесь к последней версии документации по ссылке {latestVersionLink} ({versionLabel}).", - "description": "Метка, предлагающая пользователю проверить, доступна ли последняя версия" + "message": "Актуальную документацию см. в {latestVersionLink} ({versionLabel}).", + "description": "Метка, подсказывающая пользователю, что нужно проверить последнюю версию" }, "theme.docs.versions.latestVersionLinkLabel": { - "message": "Актуальная версия", - "description": "Текст, используемый для ссылки «Предложить последнюю версию»" + "message": "последняя версия", + "description": "Метка, используемая как текст ссылки для предложения обновиться до последней версии" }, "theme.docs.versionBadge.label": { - "message": "Версия: {versionLabel}", - "description": "Метка версии" + "message": "Версия: {versionLabel}" }, "theme.common.editThisPage": { "message": "Редактировать страницу", "description": "Текст ссылки для редактирования текущей страницы" }, "theme.common.headingLinkTitle": { - "message": "Постоянная ссылка на раздел {heading}", - "description": "Ссылка на этот заголовок" + "message": "Прямая ссылка на заголовок {heading}", + "description": "Текст ссылки на заголовок" }, "theme.lastUpdated.atDate": { - "message": "от {date}", - "description": "Текст для отображения даты последнего обновления страницы" + "message": " в {date}", + "description": "Слова, используемые для указания даты последнего обновления страницы" }, "theme.lastUpdated.byUser": { - "message": "{user}", - "description": "Метка, указывающая, кто последним обновил страницу" + "message": " автор: {user}", + "description": "Слова, используемые для указания того, кем страница была обновлена в последний раз" }, "theme.lastUpdated.lastUpdatedAtBy": { - "message": "Последнее обновление: {atDate}{byUser}", - "description": "Текст, отображающий, когда и кем страница была обновлена в последний раз" + "message": "Последнее обновление {atDate}{byUser}", + "description": "Предложение, отображающее дату и автора последнего обновления страницы" }, "theme.tags.tagsListLabel": { "message": "Теги:", - "description": "Метка, отображаемая рядом со списком тегов" + "description": "Метка рядом со списком тегов" }, "theme.AnnouncementBar.closeButtonAriaLabel": { "message": "Закрыть", - "description": "ARIA-метка для кнопки закрытия панели уведомлений" + "description": "ARIA-метка для кнопки закрытия панели объявлений" }, "theme.admonition.warning": { - "message": "Предупреждение", - "description": "Метка по умолчанию предупреждающего блока (:::warning)" + "message": "предупреждение", + "description": "Метка по умолчанию для предупреждающего блока (:::warning)" }, "theme.CodeBlock.copied": { - "message": "Скопировано!", - "description": "Текст кнопки «Copy» в блоках кода" + "message": "Скопировано", + "description": "Текст кнопки «Скопировано» в блоках кода" }, "theme.CodeBlock.copyButtonAriaLabel": { - "message": "Копировать код", + "message": "Скопировать код", "description": "ARIA-метка для кнопки «Копировать код»" }, "theme.CodeBlock.copy": { "message": "Копировать", - "description": "Подпись для кнопки «Копировать» в блоках кода" + "description": "Текст кнопки «Копировать» в блоках кода" }, "theme.CodeBlock.wordWrapToggle": { "message": "Переключить перенос по словам", "description": "Атрибут title кнопки переключения переноса строк в блоке кода" }, "theme.DocSidebarItem.expandCategoryAriaLabel": { - "message": "Откройте оглавление «{label}»", - "description": "ARIA-метка для раскрытия категории боковой панели" + "message": "Развернуть раздел боковой панели «{label}»", + "description": "ARIA-метка для раскрытия категории в боковой панели" }, "theme.DocSidebarItem.collapseCategoryAriaLabel": { - "message": "Закрыть оглавление «{label}»", + "message": "Свернуть раздел боковой панели «{label}»", "description": "ARIA-метка для сворачивания категории боковой панели" }, "theme.NotFound.p1": { - "message": "Запрашиваемая страница не найдена", - "description": "Первый абзац на странице с ошибкой 404" + "message": "Ничего не найдено по вашему запросу.", + "description": "Первый абзац страницы ошибки 404" }, "theme.NotFound.p2": { - "message": "Пожалуйста, сообщите владельцу сайта, который ссылается на эту страницу, что ссылка не работает.", + "message": "Пожалуйста, свяжитесь с владельцем сайта, по ссылке с которого вы перешли на исходный URL, и сообщите ему, что эта ссылка не работает.", "description": "Второй абзац страницы с ошибкой 404" }, "theme.TOCCollapsible.toggleButtonLabel": { - "message": "Заголовки страницы", - "description": "Текст кнопки в сворачиваемом компоненте оглавления (TOC)" + "message": "На этой странице", + "description": "Надпись на кнопке компонента сворачиваемого оглавления (TOC)" }, "theme.docs.sidebar.toggleSidebarButtonAriaLabel": { - "message": "Открыть навигационную панель", - "description": "ARIA-метка для кнопки меню‑гамбургера в мобильном навигационном меню" + "message": "Переключить панель навигации", + "description": "ARIA-метка для кнопки меню-гамбургера мобильной навигации" }, "theme.docs.sidebar.expandButtonTitle": { - "message": "Откройте боковую панель", - "description": "ARIA-метка и атрибут title для кнопки раскрытия боковой панели документации" + "message": "Развернуть боковую панель", + "description": "Метка ARIA и атрибут title для кнопки раскрытия боковой панели документации" }, "theme.docs.sidebar.expandButtonAriaLabel": { - "message": "Откройте боковую панель", - "description": "ARIA-метка и атрибут title, используемые для кнопки раскрытия в боковой панели документации" + "message": "Развернуть боковую панель", + "description": "ARIA-метка и атрибут title для кнопки раскрытия боковой панели документации" }, "theme.SearchBar.label": { "message": "Поиск", - "description": "Метка ARIA и плейсхолдер для кнопки поиска" + "description": "ARIA-метка и атрибут placeholder для кнопки поиска" }, "theme.SearchModal.searchBox.resetButtonTitle": { - "message": "Очистить", - "description": "Текст и ARIA-метка кнопки сброса поля поиска" + "message": "Очистить запрос", + "description": "Подпись и ARIA-ярлык для кнопки сброса поля поиска" }, "theme.SearchModal.searchBox.cancelButtonText": { "message": "Отмена", - "description": "Текстовая метка и ARIA-метка кнопки отмены поиска" + "description": "Текст метки и aria-label кнопки отмены в поле поиска" }, "theme.SearchModal.startScreen.recentSearchesTitle": { - "message": "Последние запросы", - "description": "Название недавних поисковых запросов" + "message": "Недавние", + "description": "Заголовок для раздела «Недавние запросы»" }, "theme.SearchModal.startScreen.noRecentSearchesText": { "message": "Нет недавних запросов", - "description": "Текст, отображаемый при отсутствии недавних поисковых запросов" + "description": "Текст при отсутствии недавних поисков" }, "theme.SearchModal.startScreen.saveRecentSearchButtonTitle": { "message": "Сохранить поиск", - "description": "Подпись кнопки «Сохранить последний поиск»" + "description": "Подпись для кнопки сохранения недавнего поиска" }, "theme.SearchModal.startScreen.removeRecentSearchButtonTitle": { - "message": "Удалить этот поиск из истории", - "description": "Метка кнопки «Очистить недавние запросы»" + "message": "Удалить этот запрос из истории", + "description": "Метка для кнопки «Удалить недавний поиск»" }, "theme.SearchModal.startScreen.favoriteSearchesTitle": { - "message": "Сохранённые запросы", - "description": "Название избранного поиска" + "message": "Избранное", + "description": "Название для избранных запросов" }, "theme.SearchModal.startScreen.removeFavoriteSearchButtonTitle": { - "message": "Удалить этот запрос из избранного", - "description": "Подпись кнопки «Удалить избранный поиск»" + "message": "Удалить этот поиск из избранного", + "description": "Метка для кнопки «Удалить избранный поиск»" }, "theme.SearchModal.errorScreen.titleText": { - "message": "Не удалось загрузить результаты поиска", - "description": "Заголовок экрана ошибки в модальном окне поиска" + "message": "Не удалось получить результаты", + "description": "Заголовок экрана с ошибкой в модальном окне поиска" }, "theme.SearchModal.errorScreen.helpText": { - "message": "Проверьте сетевое подключение.", - "description": "Справочный текст для экрана ошибки модального окна поиска" + "message": "Возможно, вам следует проверить сетевое подключение.", + "description": "Текст подсказки для экрана ошибки в модальном окне поиска" }, "theme.SearchModal.footer.selectText": { - "message": "Выбрать", - "description": "Описание действия клавиши Enter" + "message": "выбрать", + "description": "Пояснение действия клавиши Enter" }, "theme.SearchModal.footer.selectKeyAriaLabel": { "message": "клавиша Enter", - "description": "ARIA-метка кнопки клавиши Enter для подтверждения выбора" + "description": "ARIA-метка для кнопки Enter, подтверждающей выбор" }, "theme.SearchModal.footer.navigateText": { - "message": "Перейти", - "description": "Текст описания действий клавиш «Стрелка вверх» и «Стрелка вниз»" + "message": "для перехода", + "description": "Описание действия для клавиш «стрелка вверх» и «стрелка вниз»" }, "theme.SearchModal.footer.navigateUpKeyAriaLabel": { - "message": "Клавиша стрелки вверх", - "description": "ARIA-метка кнопки со стрелкой вверх, используемой для навигации" + "message": "Стрелка вверх", + "description": "ARIA-метка для кнопки клавиши «Стрелка вверх», используемой для навигации" }, "theme.SearchModal.footer.navigateDownKeyAriaLabel": { - "message": "Клавиша стрелки вниз", - "description": "ARIA-метка кнопки со стрелкой вниз, которая управляет навигацией" + "message": "Стрелка вниз", + "description": "ARIA-метка кнопки со стрелкой вниз, выполняющей навигацию" }, "theme.SearchModal.footer.closeText": { - "message": "Закрыть", - "description": "Описание действия клавиши Esc" + "message": "закрыть", + "description": "Описание действия клавиши Escape" }, "theme.SearchModal.footer.closeKeyAriaLabel": { "message": "Клавиша Esc", - "description": "ARIA-метка кнопки Escape, используемой для закрытия модального окна" + "description": "ARIA-метка кнопки Escape, закрывающей модальное окно" }, "theme.SearchModal.footer.searchByText": { - "message": "Поиск", - "description": "В тексте поясняется, что поиск работает на базе Algolia." + "message": "Поиск по", + "description": "В тексте говорится, что поиск выполняется с помощью Algolia." }, "theme.SearchModal.noResultsScreen.noResultsText": { - "message": "Ничего не найдено", - "description": "Этот текст указывает, что по следующему запросу нет результатов" + "message": "Нет результатов по запросу", + "description": "В тексте поясняется, что по следующему поисковому запросу нет результатов." }, "theme.SearchModal.noResultsScreen.suggestedQueryText": { - "message": "Попробуйте такие запросы:", - "description": "Текст предлагаемого запроса, отображаемый при отсутствии результатов для указанного поиска" + "message": "Попробуйте поискать", + "description": "Текст предлагаемого запроса, если по следующему поисковому запросу не найдено результатов" }, "theme.SearchModal.noResultsScreen.reportMissingResultsText": { - "message": "Есть более подходящие результаты поиска?", - "description": "Текст подсказки, отображаемой, когда пользователь считает, что какие‑то результаты отсутствуют" - }, - "theme.SearchModal.noResultsScreen.reportMissingResultsLinkText": { - "message": "Отчёт", - "description": "Текст ссылки для сообщения об отсутствии результатов" - }, - "theme.SearchModal.placeholder": { - "message": "Поиск по документации", - "description": "Текст подсказки для поля ввода во всплывающем модальном окне DocSearch" - }, - "theme.blog.post.plurals": { - "message": "{count} элементов", - "description": "Метка во множественном числе для «{count} posts». Укажите столько форм множественного числа (разделяя их с помощью «|»), сколько поддерживает ваш язык (см. https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.blog.tagTitle": { - "message": "{nPosts} публикаций с тегом «{tagName}»", - "description": "Заголовок страницы тега блога" - }, - "theme.blog.author.pageTitle": { - "message": "{authorName} - {nPosts} постов", - "description": "Название страницы автора блога" - }, - "theme.blog.authorsList.pageTitle": { - "message": "Авторы", - "description": "Заголовок страницы об авторах" - }, - "theme.blog.authorsList.viewAll": { - "message": "Посмотреть всех авторов", - "description": "Подпись ссылки на страницу авторов блога" - }, - "theme.blog.author.noPosts": { - "message": "Автор ещё ничего не опубликовал.", - "description": "Текст для авторов, у которых нет записей в блоге" - }, - "theme.contentVisibility.unlistedBanner.title": { - "message": "Приватная страница", - "description": "Заголовок баннера для непубличного контента" - }, - "theme.contentVisibility.unlistedBanner.message": { - "message": "Эта страница приватная. Она не отображается в результатах поиска, и открыть её могут только пользователи с прямой ссылкой.", - "description": "Текст сообщения баннера для скрытого контента" - }, - "theme.contentVisibility.draftBanner.title": { - "message": "Черновая страница", - "description": "Заголовок баннера «Черновой контент»" - }, - "theme.contentVisibility.draftBanner.message": { - "message": "Эта страница является черновиком и не входит в основной контент, доступный в публичных средах.", - "description": "Сообщение баннера о черновом контенте" - }, - "theme.ErrorPageContent.tryAgain": { - "message": "Попробуйте ещё раз.", - "description": "Текст кнопки для повторной отрисовки, когда граница ошибок React перехватывает ошибку" - }, - "theme.common.skipToMainContent": { - "message": "Перейти к основному содержанию", - "description": "Метка «skip to content», используемая в целях доступности и позволяющая пользователям быстро перейти к основному содержимому с помощью навигации с клавиатуры (Tab/Enter)" - }, - "theme.tags.tagsPageTitle": { - "message": "Теги", - "description": "Заголовок страницы со списком тегов" - }, - "sidebar.dropdownCategories.category.Get started": { - "message": "Начало работы" - }, - "sidebar.dropdownCategories.category.description.Get started": { - "message": "Узнайте, как использовать ClickHouse" - }, - "sidebar.dropdownCategories.category.Get started.Introduction": { - "message": "Введение" - }, - "sidebar.dropdownCategories.category.Get started.Introduction.description": { - "message": "Введение в ClickHouse" - }, - "sidebar.dropdownCategories.category.Get started.Concepts": { - "message": "Концепции" - }, - "sidebar.dropdownCategories.category.Get started.Concepts.description": { - "message": "Основные концепции" - }, - "sidebar.dropdownCategories.category.Get started.Starter guides": { - "message": "Руководства для начинающих" - }, - "sidebar.dropdownCategories.category.Get started.Starter guides.description": { - "message": "Начните отсюда при изучении ClickHouse" - }, - "sidebar.dropdownCategories.category.Get started.Best practices": { - "message": "Лучшие практики" - }, - "sidebar.dropdownCategories.category.Get started.Best practices.description": { - "message": "Следуйте лучшим практикам с ClickHouse" - }, - "sidebar.dropdownCategories.category.Get started.Migration guides": { - "message": "Руководства по миграции" - }, - "sidebar.dropdownCategories.category.Get started.Migration guides.description": { - "message": "Перенесите вашу базу данных в ClickHouse" - }, - "sidebar.dropdownCategories.category.Get started.Use case guides": { - "message": "Руководства по сценариям использования" - }, - "sidebar.dropdownCategories.category.Get started.Use case guides.description": { - "message": "Распространенные сценарии использования ClickHouse" - }, - "sidebar.dropdownCategories.category.Get started.Example datasets": { - "message": "Примеры наборов данных" - }, - "sidebar.dropdownCategories.category.Get started.Example datasets.description": { - "message": "Полезные наборы данных и руководства" - }, - "sidebar.dropdownCategories.category.Get started.Tips and community wisdom": { - "message": "Советы и мудрость сообщества" - }, - "sidebar.dropdownCategories.category.Get started.Tips and community wisdom.description": { - "message": "Советы и хитрости от сообщества" - }, - "sidebar.dropdownCategories.category.Cloud": { - "message": "Облако" - }, - "sidebar.dropdownCategories.category.description.Cloud": { - "message": "Самый быстрый способ развернуть ClickHouse" - }, - "sidebar.dropdownCategories.category.Cloud.Get Started": { - "message": "Начать" - }, - "sidebar.dropdownCategories.category.Cloud.Get Started.description": { - "message": "Быстрый старт с ClickHouse Cloud" - }, - "sidebar.dropdownCategories.category.Cloud.Features": { - "message": "Функции" - }, - "sidebar.dropdownCategories.category.Cloud.Features.description": { - "message": "Функции, предлагаемые ClickHouse Cloud" - }, - "sidebar.dropdownCategories.category.Cloud.Guides": { - "message": "Руководства" - }, - "sidebar.dropdownCategories.category.Cloud.Guides.description": { - "message": "Руководства по ClickHouse Cloud" - }, - "sidebar.dropdownCategories.category.Cloud.Reference": { - "message": "Справочник" - }, - "sidebar.dropdownCategories.category.Cloud.Reference.description": { - "message": "Справочная документация по ClickHouse Cloud" - }, - "sidebar.dropdownCategories.category.Manage data": { - "message": "Управление данными" - }, - "sidebar.dropdownCategories.category.description.Manage data": { - "message": "Как управлять данными в ClickHouse" - }, - "sidebar.dropdownCategories.category.Manage data.Core data concepts": { - "message": "Основные концепции данных" - }, - "sidebar.dropdownCategories.category.Manage data.Core data concepts.description": { - "message": "Понимание внутренних концепций в ClickHouse" - }, - "sidebar.dropdownCategories.category.Manage data.Updating data": { - "message": "Обновление данных" - }, - "sidebar.dropdownCategories.category.Manage data.Updating data.description": { - "message": "Обновление и замена данных в ClickHouse" - }, - "sidebar.dropdownCategories.category.Manage data.Deleting data": { - "message": "Удаление данных" - }, - "sidebar.dropdownCategories.category.Manage data.Deleting data.description": { - "message": "Удаление данных в ClickHouse" - }, - "sidebar.dropdownCategories.category.Manage data.Data modeling": { - "message": "Моделирование данных" - }, - "sidebar.dropdownCategories.category.Manage data.Data modeling.description": { - "message": "Оптимизируйте вашу схему и модель данных" - }, - "sidebar.dropdownCategories.category.Manage data.Performance and optimizations": { - "message": "Производительность и оптимизация" - }, - "sidebar.dropdownCategories.category.Manage data.Performance and optimizations.description": { - "message": "Руководства по оптимизации ClickHouse" - }, - "sidebar.dropdownCategories.category.Server admin": { - "message": "Сервер" - }, - "sidebar.dropdownCategories.category.description.Server admin": { - "message": "Управление и развертывание ClickHouse" - }, - "sidebar.dropdownCategories.category.Server admin.Deployments and scaling": { - "message": "Развертывание и масштабирование" - }, - "sidebar.dropdownCategories.category.Server admin.Deployments and scaling.description": { - "message": "Как развернуть ClickHouse" - }, - "sidebar.dropdownCategories.category.Server admin.Security and authentication": { - "message": "Безопасность и аутентификация" - }, - "sidebar.dropdownCategories.category.Server admin.Security and authentication.description": { - "message": "Защитите ваше развертывание ClickHouse" - }, - "sidebar.dropdownCategories.category.Server admin.Settings": { - "message": "Настройки" - }, - "sidebar.dropdownCategories.category.Server admin.Settings.description": { - "message": "Настройка ClickHouse" - }, - "sidebar.dropdownCategories.category.Server admin.Tools and utilities": { - "message": "Инструменты и утилиты" - }, - "sidebar.dropdownCategories.category.Server admin.Tools and utilities.description": { - "message": "Инструменты для управления ClickHouse" - }, - "sidebar.dropdownCategories.category.Server admin.System tables": { - "message": "Системные таблицы" - }, - "sidebar.dropdownCategories.category.Server admin.System tables.description": { - "message": "Таблицы метаданных для управления ClickHouse" - }, - "sidebar.dropdownCategories.category.Reference": { - "message": "Справочник" - }, - "sidebar.dropdownCategories.category.description.Reference": { - "message": "Справочная документация по функциям ClickHouse" - }, - "sidebar.dropdownCategories.category.Reference.Introduction": { - "message": "Введение" - }, - "sidebar.dropdownCategories.category.Reference.Introduction.description": { - "message": "Изучите синтаксис ClickHouse" - }, - "sidebar.dropdownCategories.category.Reference.Functions": { - "message": "Функции" - }, - "sidebar.dropdownCategories.category.Reference.Functions.description": { - "message": "Сотни встроенных функций для анализа данных" - }, - "sidebar.dropdownCategories.category.Reference.Engines": { - "message": "Движки" - }, - "sidebar.dropdownCategories.category.Reference.Engines.description": { - "message": "Используйте правильные движки таблиц и баз данных" - }, - "sidebar.dropdownCategories.category.Integrations": { - "message": "Интеграции" - }, - "sidebar.dropdownCategories.category.description.Integrations": { - "message": "Интеграции, клиенты и драйверы для ClickHouse" - }, - "sidebar.dropdownCategories.category.Integrations.All integrations": { - "message": "Все интеграции" - }, - "sidebar.dropdownCategories.category.Integrations.All integrations.description": { - "message": "Интеграция ClickHouse с другими базами данных и приложениями" - }, - "sidebar.dropdownCategories.category.Integrations.Language clients": { - "message": "Языковые клиенты" - }, - "sidebar.dropdownCategories.category.Integrations.Language clients.description": { - "message": "Используйте ваш любимый язык для работы с ClickHouse" - }, - "sidebar.dropdownCategories.category.Integrations.ClickPipes": { - "message": "ClickPipes" - }, - "sidebar.dropdownCategories.category.Integrations.ClickPipes.description": { - "message": "Самый простой способ загрузки данных в ClickHouse" - }, - "sidebar.dropdownCategories.category.Integrations.Native clients & interfaces": { - "message": "Нативные клиенты и интерфейсы" - }, - "sidebar.dropdownCategories.category.Integrations.Native clients & interfaces.description": { - "message": "Выберите клиент и интерфейс для подключения к ClickHouse" - }, - "sidebar.dropdownCategories.category.Integrations.Data sources": { - "message": "Источники данных" - }, - "sidebar.dropdownCategories.category.Integrations.Data sources.description": { - "message": "Загрузите данные в ClickHouse из предпочитаемого источника" - }, - "sidebar.dropdownCategories.category.Integrations.Data visualization": { - "message": "Визуализация данных" - }, - "sidebar.dropdownCategories.category.Integrations.Data visualization.description": { - "message": "Подключите ClickHouse к вашему любимому инструменту визуализации" - }, - "sidebar.dropdownCategories.category.Integrations.Data formats": { - "message": "Форматы данных" - }, - "sidebar.dropdownCategories.category.Integrations.Data formats.description": { - "message": "Изучите форматы данных, поддерживаемые ClickHouse" - }, - "sidebar.dropdownCategories.category.Integrations.Data ingestion": { - "message": "Загрузка данных" - }, - "sidebar.dropdownCategories.category.Integrations.Data ingestion.description": { - "message": "Загрузите данные в ClickHouse с помощью инструментов ELT" - }, - "sidebar.dropdownCategories.category.ClickStack": { - "message": "ClickStack" - }, - "sidebar.dropdownCategories.category.description.ClickStack": { - "message": "ClickStack - стек наблюдаемости ClickHouse" - }, - "sidebar.dropdownCategories.category.ClickStack.Getting started": { - "message": "Начало работы" - }, - "sidebar.dropdownCategories.category.ClickStack.Getting started.description": { - "message": "Начните работу с ClickStack" - }, - "sidebar.dropdownCategories.category.ClickStack.Sample datasets": { - "message": "Примеры наборов данных" - }, - "sidebar.dropdownCategories.category.ClickStack.Sample datasets.description": { - "message": "Изучите ClickStack с примерами наборов данных" - }, - "sidebar.dropdownCategories.category.ClickStack.Architecture": { - "message": "Архитектура" - }, - "sidebar.dropdownCategories.category.ClickStack.Architecture.description": { - "message": "Ознакомьтесь с архитектурой ClickStack" - }, - "sidebar.dropdownCategories.category.ClickStack.Deployment": { - "message": "Развертывание" - }, - "sidebar.dropdownCategories.category.ClickStack.Deployment.description": { - "message": "Выберите режим развертывания ClickStack" - }, - "sidebar.dropdownCategories.category.ClickStack.Ingesting data": { - "message": "Загрузка данных" - }, - "sidebar.dropdownCategories.category.ClickStack.Ingesting data.description": { - "message": "Загрузите данные в ClickStack" - }, - "sidebar.dropdownCategories.category.ClickStack.Configuration options": { - "message": "Параметры конфигурации" - }, - "sidebar.dropdownCategories.category.ClickStack.Configuration options.description": { - "message": "Разверните ClickStack в production" - }, - "sidebar.dropdownCategories.category.ClickStack.Production": { - "message": "Production" - }, - "sidebar.dropdownCategories.category.ClickStack.Production.description": { - "message": "Разверните ClickStack в production" - }, - "sidebar.dropdownCategories.category.ClickStack.Integration examples": { - "message": "Примеры интеграции" - }, - "sidebar.dropdownCategories.category.ClickStack.Integration examples.description": { - "message": "Краткие руководства по интеграции" - }, - "sidebar.dropdownCategories.category.chDB": { - "message": "chDB" - }, - "sidebar.dropdownCategories.category.description.chDB": { - "message": "chDB - встроенная версия ClickHouse" - }, - "sidebar.dropdownCategories.category.chDB.Learn chDB": { - "message": "Изучите chDB" - }, - "sidebar.dropdownCategories.category.chDB.Learn chDB.description": { - "message": "Узнайте, как использовать chDB" - }, - "sidebar.dropdownCategories.category.chDB.Language integrations": { - "message": "Языковые интеграции" - }, - "sidebar.dropdownCategories.category.chDB.Language integrations.description": { - "message": "Подключитесь к chDB с помощью языкового клиента" - }, - "sidebar.dropdownCategories.category.chDB.Guides": { - "message": "Руководства" - }, - "sidebar.dropdownCategories.category.chDB.Guides.description": { - "message": "Руководства по использованию chDB" - }, - "sidebar.dropdownCategories.category.About": { - "message": "О проекте" - }, - "sidebar.dropdownCategories.category.description.About": { - "message": "Узнайте больше о ClickHouse" - }, - "sidebar.dropdownCategories.category.About.Adopters": { - "message": "Пользователи" - }, - "sidebar.dropdownCategories.category.About.Adopters.description": { - "message": "Пользователи ClickHouse" - }, - "sidebar.dropdownCategories.category.About.Changelogs": { - "message": "Журналы изменений" - }, - "sidebar.dropdownCategories.category.About.Changelogs.description": { - "message": "Просмотрите последние изменения в ClickHouse" - }, - "sidebar.dropdownCategories.category.About.Support": { - "message": "Поддержка" - }, - "sidebar.dropdownCategories.category.About.Support.description": { - "message": "Получите поддержку от инженеров ClickHouse" - }, - "sidebar.dropdownCategories.category.About.Development and contributing": { - "message": "Разработка и участие" - }, - "sidebar.dropdownCategories.category.About.Development and contributing.description": { - "message": "Узнайте, как внести вклад в ClickHouse" - }, - "homepage.hero.description": { - "message": "Изучите ClickHouse с помощью руководств, справочной документации и видео" - }, - "homepage.hero.quickStart": { - "message": "Быстрый старт" - }, - "homepage.hero.getStartedCloud": { - "message": "Начните работу с Cloud" - }, - "homepage.hero.installLocally": { - "message": "Установить локально" - }, - "homepage.hero.getStartedOSS": { - "message": "Начните работу с OSS" - }, - "homepage.search.title": { - "message": "Поиск по документации" - }, - "homepage.connect.title": { - "message": "Подключение к ClickHouse" - }, - "homepage.connect.description": { - "message": "Подключите свое приложение к ClickHouse за несколько минут" + "message": "Считаете, что по этому запросу должны быть результаты?", + "description": "Текст вопроса, отображаемого, когда пользователь считает, что каких‑то результатов не хватает" }, - "homepage.connect.viewAll": { - "message": "Посмотреть все клиенты и драйверы" + "theme.SearchModal.noResultsScreen.reportMissingResultsLinkText": { + "message": "Сообщите нам.", + "description": "Текст ссылки для отправки сообщения об отсутствующих результатах" }, - "homepage.connect.clickhouseCli": { - "message": "ClickHouse CLI" + "theme.SearchModal.placeholder": { + "message": "Поиск в документации", + "description": "Текст подсказки в поле ввода всплывающего модального окна DocSearch" }, - "homepage.connect.cloudSqlConsole": { - "message": "Cloud SQL консоль" + "theme.blog.post.plurals": { + "message": "Одна запись|{count} записей", + "description": "Множественная форма подписи для «{count} публикаций». Используйте столько форм множественного числа (разделённых символом \"|\"), сколько поддерживает ваш язык (см. https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" }, - "homepage.migrate.title": { - "message": "Миграция в ClickHouse" + "theme.blog.tagTitle": { + "message": "{nPosts} записей с тегом \"{tagName}\"", + "description": "Заголовок страницы тега блога" }, - "homepage.migrate.description": { - "message": "Загрузите данные из других баз данных, хранилищ данных и объектных хранилищ" + "theme.blog.author.pageTitle": { + "message": "{authorName} - {nPosts} постов", + "description": "Заголовок страницы автора блога" }, - "homepage.migrate.viewAll": { - "message": "Посмотреть все интеграции" + "theme.blog.authorsList.pageTitle": { + "message": "Авторы", + "description": "Заголовок страницы об авторах" }, - "homepage.deploy.title": { - "message": "Развертывание ClickHouse" + "theme.blog.authorsList.viewAll": { + "message": "Посмотреть всех авторов", + "description": "Текст ссылки, ведущей на страницу авторов блога" }, - "homepage.deploy.description": { - "message": "Разверните ClickHouse в нашем облаке или на вашей инфраструктуре" + "theme.blog.author.noPosts": { + "message": "Автор ещё не написал ни одной публикации.", + "description": "Текст для авторов без записей в блоге" }, - "homepage.deploy.cloud": { - "message": "Cloud" + "theme.contentVisibility.unlistedBanner.title": { + "message": "Неопубликованная страница", + "description": "Заголовок баннера для скрытого контента" }, - "homepage.deploy.nodeDeployment": { - "message": "Развертывание узла" + "theme.contentVisibility.unlistedBanner.message": { + "message": "Эта страница скрыта из списка. Поисковые системы не будут её индексировать, и перейти на неё смогут только пользователи с прямой ссылкой.", + "description": "Сообщение баннера для непубличного контента" }, - "homepage.deploy.clusterDeployment": { - "message": "Развертывание кластера" + "theme.contentVisibility.draftBanner.title": { + "message": "Черновая страница", + "description": "Заголовок баннера черновика" }, - "homepage.resources.title": { - "message": "Дополнительные ресурсы" + "theme.contentVisibility.draftBanner.message": { + "message": "Эта страница является черновиком. Она будет видна только в среде разработки и не попадёт в production-сборку.", + "description": "Текст баннера о черновой версии содержимого" }, - "homepage.resources.contactSupport": { - "message": "Связаться с поддержкой" + "theme.ErrorPageContent.tryAgain": { + "message": "Повторить попытку", + "description": "Надпись на кнопке для повторного рендеринга, когда граница ошибок React перехватывает ошибку" }, - "homepage.resources.changelog": { - "message": "История изменений" + "theme.common.skipToMainContent": { + "message": "Перейти к основному содержанию", + "description": "Метка «Пропустить к содержимому», используемая для обеспечения доступности, позволяет быстро перейти к основному содержимому с помощью навигации по клавиатуре (Tab/Enter)" }, - "homepage.resources.sampleDatasets": { - "message": "Примеры наборов данных", - "description": "Заголовок страницы списка тегов" + "theme.tags.tagsPageTitle": { + "message": "Теги", + "description": "Заголовок страницы со списком тегов" }, "topNav.navItems.Products": { "message": "Продукты" @@ -998,20 +585,16 @@ "description": "Полезные наборы данных и руководства" }, "sidebar.dropdownCategories.category.Cloud": { - "message": "Облако", - "description": "Облако" + "message": "Облако" }, "sidebar.dropdownCategories.category.description.Cloud": { - "message": "Самый быстрый способ развернуть ClickHouse", - "description": "Самый быстрый способ развернуть ClickHouse" + "message": "Самый быстрый способ развернуть ClickHouse" }, "sidebar.dropdownCategories.category.Cloud.Get Started": { - "message": "Введение", - "description": "Начало работы" + "message": "Начало работы" }, "sidebar.dropdownCategories.category.Cloud.Get Started.description": { - "message": "Приступайте к работе с ClickHouse Cloud уже сейчас", - "description": "Быстрый старт с ClickHouse Cloud" + "message": "Быстрый старт с ClickHouse Cloud" }, "sidebar.dropdownCategories.category.Cloud.Managing Cloud": { "message": "Управление облаком", @@ -1158,36 +741,28 @@ "description": "Таблицы метаданных для управления ClickHouse" }, "sidebar.dropdownCategories.category.Reference": { - "message": "Справочник", - "description": "Справочник" + "message": "Справочник" }, "sidebar.dropdownCategories.category.description.Reference": { - "message": "Справочная документация по функциям ClickHouse", - "description": "Справочная документация по функциям ClickHouse" + "message": "Справочная документация по функциям ClickHouse" }, "sidebar.dropdownCategories.category.Reference.Introduction": { - "message": "Введение", - "description": "Введение" + "message": "Введение" }, "sidebar.dropdownCategories.category.Reference.Introduction.description": { - "message": "Изучите синтаксис ClickHouse", - "description": "Изучите синтаксис ClickHouse" + "message": "Изучите синтаксис ClickHouse" }, "sidebar.dropdownCategories.category.Reference.Functions": { - "message": "Функции", - "description": "Функции" + "message": "Функции" }, "sidebar.dropdownCategories.category.Reference.Functions.description": { - "message": "Сотни встроенных функций для анализа данных", - "description": "Сотни встроенных функций для анализа данных" + "message": "Сотни встроенных функций для анализа данных" }, "sidebar.dropdownCategories.category.Reference.Engines": { - "message": "Движок", - "description": "Движки" + "message": "Движки" }, "sidebar.dropdownCategories.category.Reference.Engines.description": { - "message": "Используйте движки таблиц и баз данных, соответствующие вашим данным", - "description": "Выберите подходящие для ваших данных движки таблиц и баз данных" + "message": "Используйте оптимальные движки таблиц и баз данных для ваших данных" }, "sidebar.dropdownCategories.category.Reference.Other Features": { "message": "Дополнительные возможности", @@ -1198,12 +773,10 @@ "description": "Ознакомьтесь с дополнительными возможностями ClickHouse" }, "sidebar.dropdownCategories.category.Integrations": { - "message": "Интеграции", - "description": "Интеграции" + "message": "Интеграции" }, "sidebar.dropdownCategories.category.description.Integrations": { - "message": "Интеграции, клиенты и драйверы для ClickHouse", - "description": "Интеграции, клиентские библиотеки и драйверы для ClickHouse" + "message": "Интеграции, клиентские библиотеки и драйверы для использования с ClickHouse" }, "sidebar.dropdownCategories.category.Integrations.All Integrations": { "message": "Все интеграции", @@ -1222,12 +795,10 @@ "description": "Работайте с ClickHouse на своём любимом языке программирования" }, "sidebar.dropdownCategories.category.Integrations.ClickPipes": { - "message": "ClickPipes", - "description": "ClickPipes" + "message": "ClickPipes" }, "sidebar.dropdownCategories.category.Integrations.ClickPipes.description": { - "message": "Самый простой способ для приёма данных в ClickHouse", - "description": "Самый простой способ для приёма данных в ClickHouse" + "message": "Самый простой способ для приёма данных в ClickHouse" }, "sidebar.dropdownCategories.category.Integrations.Native Clients & Interfaces": { "message": "Нативные клиенты и интерфейсы", @@ -1270,20 +841,16 @@ "description": "Осуществляйте приём данных в ClickHouse с помощью различных ELT-инструментов" }, "sidebar.dropdownCategories.category.chDB": { - "message": "chDB", - "description": "chDB" + "message": "chDB" }, "sidebar.dropdownCategories.category.description.chDB": { - "message": "chDB — это встраиваемая версия ClickHouse.", - "description": "chDB — это встраиваемая база данных ClickHouse" + "message": "chDB — это встраиваемая версия ClickHouse" }, "sidebar.dropdownCategories.category.chDB.Learn chDB": { - "message": "Узнайте больше о chDB", - "description": "Изучайте chDB" + "message": "Изучайте chDB" }, "sidebar.dropdownCategories.category.chDB.Learn chDB.description": { - "message": "Освойте работу с chDB", - "description": "Работа с chDB" + "message": "Узнайте, как пользоваться chDB" }, "sidebar.dropdownCategories.category.chDB.Language Integrations": { "message": "Интеграции для языков программирования", @@ -1294,44 +861,34 @@ "description": "Подключение к chDB с использованием клиентской библиотеки языка программирования" }, "sidebar.dropdownCategories.category.chDB.Guides": { - "message": "Руководства", - "description": "Руководства" + "message": "Руководства" }, "sidebar.dropdownCategories.category.chDB.Guides.description": { - "message": "Руководство по работе с chDB", - "description": "Руководства по работе с chDB" + "message": "Руководства по использованию chDB" }, "sidebar.dropdownCategories.category.About": { - "message": "Обзор", - "description": "О проекте" + "message": "О проекте" }, "sidebar.dropdownCategories.category.description.About": { - "message": "Подробнее о ClickHouse", - "description": "Подробнее о ClickHouse" + "message": "Подробнее о ClickHouse" }, "sidebar.dropdownCategories.category.About.Adopters": { - "message": "Примеры реализации", - "description": "Организации-пользователи" + "message": "Компании" }, "sidebar.dropdownCategories.category.About.Adopters.description": { - "message": "Компании, использующие ClickHouse", - "description": "пользователи ClickHouse" + "message": "организации, использующие ClickHouse" }, "sidebar.dropdownCategories.category.About.Changelogs": { - "message": "Журнал изменений", - "description": "История изменений" + "message": "История изменений" }, "sidebar.dropdownCategories.category.About.Changelogs.description": { - "message": "Ознакомьтесь с последними изменениями в ClickHouse", - "description": "Просмотреть последние изменения в ClickHouse" + "message": "Просмотреть последние изменения в ClickHouse" }, "sidebar.dropdownCategories.category.About.Support": { - "message": "Поддержка", - "description": "Поддержка" + "message": "Поддержка" }, "sidebar.dropdownCategories.category.About.Support.description": { - "message": "Получите поддержку от инженеров ClickHouse", - "description": "Обратитесь за помощью к инженерам ClickHouse" + "message": "Получите поддержку от инженеров ClickHouse" }, "sidebar.dropdownCategories.category.About.Development and Contributing": { "message": "Разработка и участие", @@ -1349,5 +906,257 @@ }, "Report an issue": { "message": "Сообщить о проблеме" + }, + "sidebar.dropdownCategories.category.Get started": { + "message": "Начало работы" + }, + "sidebar.dropdownCategories.category.description.Get started": { + "message": "Узнайте, как работать с ClickHouse" + }, + "sidebar.dropdownCategories.category.Get started.Introduction": { + "message": "Введение" + }, + "sidebar.dropdownCategories.category.Get started.Introduction.description": { + "message": "Введение в ClickHouse" + }, + "sidebar.dropdownCategories.category.Get started.Concepts": { + "message": "Концепции" + }, + "sidebar.dropdownCategories.category.Get started.Concepts.description": { + "message": "Основные понятия" + }, + "sidebar.dropdownCategories.category.Get started.Starter guides": { + "message": "Вводные руководства" + }, + "sidebar.dropdownCategories.category.Get started.Starter guides.description": { + "message": "Начните знакомство с ClickHouse отсюда" + }, + "sidebar.dropdownCategories.category.Get started.Best practices": { + "message": "Рекомендации по лучшим практикам" + }, + "sidebar.dropdownCategories.category.Get started.Best practices.description": { + "message": "Следуйте лучшим практикам использования ClickHouse" + }, + "sidebar.dropdownCategories.category.Get started.Migration guides": { + "message": "Руководства по миграции" + }, + "sidebar.dropdownCategories.category.Get started.Migration guides.description": { + "message": "Перенесите базу данных в ClickHouse" + }, + "sidebar.dropdownCategories.category.Get started.Use case guides": { + "message": "Руководства по вариантам использования" + }, + "sidebar.dropdownCategories.category.Get started.Use case guides.description": { + "message": "Руководства по распространённым сценариям использования ClickHouse" + }, + "sidebar.dropdownCategories.category.Get started.Example datasets": { + "message": "Примеры данных" + }, + "sidebar.dropdownCategories.category.Get started.Example datasets.description": { + "message": "Полезные наборы данных и руководства" + }, + "sidebar.dropdownCategories.category.Get started.Tips and community wisdom": { + "message": "Советы и рекомендации сообщества" + }, + "sidebar.dropdownCategories.category.Get started.Tips and community wisdom.description": { + "message": "Советы и рекомендации от сообщества" + }, + "sidebar.dropdownCategories.category.Cloud.Features": { + "message": "Возможности" + }, + "sidebar.dropdownCategories.category.Cloud.Features.description": { + "message": "Возможности ClickHouse Cloud" + }, + "sidebar.dropdownCategories.category.Cloud.Guides": { + "message": "Руководства" + }, + "sidebar.dropdownCategories.category.Cloud.Guides.description": { + "message": "Руководства по работе с ClickHouse Cloud" + }, + "sidebar.dropdownCategories.category.Cloud.Reference": { + "message": "Справочник" + }, + "sidebar.dropdownCategories.category.Cloud.Reference.description": { + "message": "Справочная документация по ClickHouse Cloud" + }, + "sidebar.dropdownCategories.category.Manage data": { + "message": "Управление данными" + }, + "sidebar.dropdownCategories.category.description.Manage data": { + "message": "Управление данными в ClickHouse" + }, + "sidebar.dropdownCategories.category.Manage data.Core data concepts": { + "message": "Основные понятия о данных" + }, + "sidebar.dropdownCategories.category.Manage data.Core data concepts.description": { + "message": "Внутренние принципы работы ClickHouse" + }, + "sidebar.dropdownCategories.category.Manage data.Updating data": { + "message": "Обновление данных" + }, + "sidebar.dropdownCategories.category.Manage data.Updating data.description": { + "message": "Обновление и перезапись данных в ClickHouse" + }, + "sidebar.dropdownCategories.category.Manage data.Deleting data": { + "message": "Удаление данных" + }, + "sidebar.dropdownCategories.category.Manage data.Deleting data.description": { + "message": "Удаление данных в ClickHouse" + }, + "sidebar.dropdownCategories.category.Manage data.Data modeling": { + "message": "Моделирование данных" + }, + "sidebar.dropdownCategories.category.Manage data.Data modeling.description": { + "message": "Оптимизируйте схему и модель данных" + }, + "sidebar.dropdownCategories.category.Manage data.Performance and optimizations": { + "message": "Производительность и оптимизации" + }, + "sidebar.dropdownCategories.category.Manage data.Performance and optimizations.description": { + "message": "Руководства по оптимизации ClickHouse" + }, + "sidebar.dropdownCategories.category.Server admin": { + "message": "Администратор сервера" + }, + "sidebar.dropdownCategories.category.description.Server admin": { + "message": "Управление и развертывание ClickHouse" + }, + "sidebar.dropdownCategories.category.Server admin.Deployments and scaling": { + "message": "Развертывания и масштабирование" + }, + "sidebar.dropdownCategories.category.Server admin.Deployments and scaling.description": { + "message": "Как развернуть ClickHouse" + }, + "sidebar.dropdownCategories.category.Server admin.Security and authentication": { + "message": "Безопасность и аутентификация" + }, + "sidebar.dropdownCategories.category.Server admin.Security and authentication.description": { + "message": "Обеспечьте безопасность развертывания ClickHouse" + }, + "sidebar.dropdownCategories.category.Server admin.Settings": { + "message": "Настройки" + }, + "sidebar.dropdownCategories.category.Server admin.Settings.description": { + "message": "Настройка ClickHouse" + }, + "sidebar.dropdownCategories.category.Server admin.Tools and utilities": { + "message": "Инструменты и служебные программы" + }, + "sidebar.dropdownCategories.category.Server admin.Tools and utilities.description": { + "message": "Инструменты, помогающие управлять ClickHouse" + }, + "sidebar.dropdownCategories.category.Server admin.System tables": { + "message": "Системные таблицы" + }, + "sidebar.dropdownCategories.category.Server admin.System tables.description": { + "message": "Таблицы метаданных для управления ClickHouse" + }, + "sidebar.dropdownCategories.category.Integrations.All integrations": { + "message": "Все интеграции" + }, + "sidebar.dropdownCategories.category.Integrations.All integrations.description": { + "message": "Интеграция ClickHouse с другими базами данных и приложениями" + }, + "sidebar.dropdownCategories.category.Integrations.Language clients": { + "message": "Клиентские библиотеки" + }, + "sidebar.dropdownCategories.category.Integrations.Language clients.description": { + "message": "Используйте любой удобный вам язык программирования для работы с ClickHouse" + }, + "sidebar.dropdownCategories.category.Integrations.Native clients & interfaces": { + "message": "Нативные клиенты и интерфейсы" + }, + "sidebar.dropdownCategories.category.Integrations.Native clients & interfaces.description": { + "message": "Выберите клиент и интерфейс для подключения к ClickHouse" + }, + "sidebar.dropdownCategories.category.Integrations.Data sources": { + "message": "Источники данных" + }, + "sidebar.dropdownCategories.category.Integrations.Data sources.description": { + "message": "Загрузите данные в ClickHouse из выбранного источника" + }, + "sidebar.dropdownCategories.category.Integrations.Data visualization": { + "message": "Визуализация данных" + }, + "sidebar.dropdownCategories.category.Integrations.Data visualization.description": { + "message": "Подключите ClickHouse к вашему любимому инструменту визуализации" + }, + "sidebar.dropdownCategories.category.Integrations.Data formats": { + "message": "Форматы данных" + }, + "sidebar.dropdownCategories.category.Integrations.Data formats.description": { + "message": "Изучите поддерживаемые ClickHouse форматы данных" + }, + "sidebar.dropdownCategories.category.Integrations.Data ingestion": { + "message": "Ингестия данных" + }, + "sidebar.dropdownCategories.category.Integrations.Data ingestion.description": { + "message": "Приём данных в ClickHouse с помощью различных ELT-инструментов" + }, + "sidebar.dropdownCategories.category.ClickStack": { + "message": "ClickStack" + }, + "sidebar.dropdownCategories.category.description.ClickStack": { + "message": "ClickStack — стек обсервабилити на базе ClickHouse" + }, + "sidebar.dropdownCategories.category.ClickStack.Getting started": { + "message": "Начало работы" + }, + "sidebar.dropdownCategories.category.ClickStack.Getting started.description": { + "message": "Начало работы с ClickStack" + }, + "sidebar.dropdownCategories.category.ClickStack.Sample datasets": { + "message": "Примеры наборов данных" + }, + "sidebar.dropdownCategories.category.ClickStack.Sample datasets.description": { + "message": "Осваивайте ClickStack на демонстрационных наборах данных" + }, + "sidebar.dropdownCategories.category.ClickStack.Architecture": { + "message": "Архитектура" + }, + "sidebar.dropdownCategories.category.ClickStack.Architecture.description": { + "message": "Ознакомьтесь с архитектурой ClickStack" + }, + "sidebar.dropdownCategories.category.ClickStack.Deployment": { + "message": "Развертывание" + }, + "sidebar.dropdownCategories.category.ClickStack.Deployment.description": { + "message": "Выберите режим развертывания ClickStack" + }, + "sidebar.dropdownCategories.category.ClickStack.Ingesting data": { + "message": "Приём данных" + }, + "sidebar.dropdownCategories.category.ClickStack.Ingesting data.description": { + "message": "Приём данных в ClickStack" + }, + "sidebar.dropdownCategories.category.ClickStack.Configuration options": { + "message": "Параметры конфигурации" + }, + "sidebar.dropdownCategories.category.ClickStack.Configuration options.description": { + "message": "Развертывание ClickStack в продуктивной среде" + }, + "sidebar.dropdownCategories.category.ClickStack.Production": { + "message": "Продакшн" + }, + "sidebar.dropdownCategories.category.ClickStack.Production.description": { + "message": "Развертывание ClickStack в продакшене" + }, + "sidebar.dropdownCategories.category.ClickStack.Integration examples": { + "message": "Примеры интеграций" + }, + "sidebar.dropdownCategories.category.ClickStack.Integration examples.description": { + "message": "Руководства по быстрому старту интеграции" + }, + "sidebar.dropdownCategories.category.chDB.Language integrations": { + "message": "Интеграции для языков программирования" + }, + "sidebar.dropdownCategories.category.chDB.Language integrations.description": { + "message": "Подключение к chDB с помощью клиентской библиотеки" + }, + "sidebar.dropdownCategories.category.About.Development and contributing": { + "message": "Разработка и вклад в проект" + }, + "sidebar.dropdownCategories.category.About.Development and contributing.description": { + "message": "Узнайте, как участвовать в развитии ClickHouse" } } \ No newline at end of file diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/best-practices/avoid_mutations.md b/i18n/ru/docusaurus-plugin-content-docs/current/best-practices/avoid_mutations.md index c70c7f18ea9..34cea07fd9d 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/best-practices/avoid_mutations.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/best-practices/avoid_mutations.md @@ -8,6 +8,6 @@ keywords: ['мутации'] doc_type: 'guide' --- -import Content from '@site/i18n/ru/docusaurus-plugin-content-docs/current/best-practices/_snippets/_avoid_mutations.md'; +import Content from '@site/docs/best-practices/_snippets/_avoid_mutations.md'; diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/best-practices/avoid_optimize_final.md b/i18n/ru/docusaurus-plugin-content-docs/current/best-practices/avoid_optimize_final.md index edae066eac7..d68922d9b95 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/best-practices/avoid_optimize_final.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/best-practices/avoid_optimize_final.md @@ -11,6 +11,6 @@ doc_type: 'guide' # Не используйте `OPTIMIZE FINAL` -import Content from '@site/i18n/ru/docusaurus-plugin-content-docs/current/best-practices/_snippets/_avoid_optimize_final.md'; +import Content from '@site/docs/best-practices/_snippets/_avoid_optimize_final.md'; diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/features/03_sql_console_features/01_sql-console.md b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/features/03_sql_console_features/01_sql-console.md index 474820e4622..b76e1a6f928 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/features/03_sql_console_features/01_sql-console.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/features/03_sql_console_features/01_sql-console.md @@ -1,9 +1,9 @@ --- -sidebar_title: 'SQL консоль' +sidebar_title: 'SQL-консоль' slug: /cloud/get-started/sql-console -description: 'Выполняйте запросы и создавайте визуализации с помощью SQL консоли.' -keywords: ['sql консоль', 'sql клиент', 'облачная консоль', 'консоль'] -title: 'SQL консоль' +description: 'Выполняйте запросы и создавайте визуализации в SQL-консоли.' +keywords: ['sql-консоль', 'sql-клиент', 'облачная консоль', 'консоль'] +title: 'SQL-консоль' doc_type: 'guide' --- @@ -43,213 +43,224 @@ import update_query_name from '@site/static/images/cloud/sqlconsole/update-query import update_subtitle_etc from '@site/static/images/cloud/sqlconsole/update-subtitle-etc.png'; import adjust_axis_scale from '@site/static/images/cloud/sqlconsole/adjust-axis-scale.png'; -# SQL консоль -SQL консоль — это самый быстрый и простой способ изучения и запроса ваших баз данных в ClickHouse Cloud. Вы можете использовать SQL консоль для: +# SQL Console -- Подключения к вашим сервисам ClickHouse Cloud -- Просмотра, фильтрации и сортировки табличных данных -- Выполнения запросов и визуализации результатов всего в несколько кликов -- Совместного использования запросов с членами команды и более эффективной совместной работы. +SQL-консоль — это самый быстрый и простой способ исследовать и выполнять запросы к вашим базам данных в ClickHouse Cloud. Вы можете использовать SQL-консоль, чтобы: -### Изучение таблиц {#exploring-tables} +- Подключаться к вашим ClickHouse Cloud Services +- Просматривать, фильтровать и сортировать данные таблиц +- Выполнять запросы и визуализировать результаты всего в несколько кликов +- Делиться запросами с членами команды и эффективнее сотрудничать. + +### Исследование таблиц {#exploring-tables} ### Просмотр списка таблиц и информации о схеме {#viewing-table-list-and-schema-info} -Обзор таблиц, содержащихся в вашем экземпляре ClickHouse, можно найти в левой боковой панели. Используйте селектор базы данных в верхней части левой панели для просмотра таблиц в конкретной базе данных. +Обзор таблиц, содержащихся в вашем экземпляре ClickHouse, можно найти в левой боковой панели. Используйте селектор базы данных в верхней части левой панели, чтобы просмотреть таблицы в определённой базе данных. -Таблицы в списке также можно развернуть для просмотра столбцов и типов данных. +Таблицы в списке можно развернуть, чтобы просмотреть столбцы и их типы. -### Изучение табличных данных {#exploring-table-data} +### Исследование данных таблицы {#exploring-table-data} -Нажмите на таблицу в списке, чтобы открыть её в новой вкладке. В представлении таблицы данные можно легко просматривать, выбирать и копировать. Обратите внимание, что структура и форматирование сохраняются при копировании и вставке в приложения для работы с электронными таблицами, такие как Microsoft Excel и Google Sheets. Вы можете переключаться между страницами табличных данных (разбитых на страницы по 30 строк) с помощью навигации в нижнем колонтитуле. +Щёлкните по таблице в списке, чтобы открыть её в новой вкладке. В Table View данные можно легко просматривать, выделять и копировать. Обратите внимание, что структура и форматирование сохраняются при копировании и вставке в табличные приложения, такие как Microsoft Excel и Google Sheets. Вы можете переключаться между страницами данных таблицы (страницы по 30 строк) с помощью навигации в нижней панели. -### Проверка данных ячейки {#inspecting-cell-data} +### Просмотр данных ячейки {#inspecting-cell-data} + +Инструмент Cell Inspector можно использовать для просмотра больших объёмов данных, содержащихся в одной ячейке. Чтобы открыть его, щёлкните правой кнопкой мыши по ячейке и выберите «Inspect Cell». Содержимое инспектора ячейки можно скопировать, нажав на значок копирования в правом верхнем углу области содержимого инспектора. + + -Инструмент проверки ячейки можно использовать для просмотра больших объёмов данных, содержащихся в одной ячейке. Чтобы открыть его, щёлкните правой кнопкой мыши на ячейке и выберите 'Inspect Cell' (Проверить ячейку). Содержимое инспектора ячеек можно скопировать, нажав значок копирования в правом верхнем углу содержимого инспектора. - ## Фильтрация и сортировка таблиц {#filtering-and-sorting-tables} ### Сортировка таблицы {#sorting-a-table} -Чтобы отсортировать таблицу в SQL консоли, откройте таблицу и нажмите кнопку 'Sort' (Сортировка) на панели инструментов. Эта кнопка откроет меню, которое позволит вам настроить сортировку. Вы можете выбрать столбец, по которому хотите отсортировать данные, и настроить порядок сортировки (по возрастанию или по убыванию). Выберите 'Apply' (Применить) или нажмите Enter для сортировки таблицы. +Чтобы отсортировать таблицу в SQL‑консоли, откройте таблицу и нажмите кнопку 'Sort' на панели инструментов. Откроется меню, в котором вы сможете настроить параметры сортировки. Вы можете выбрать столбец, по которому хотите сортировать, и указать порядок сортировки (по возрастанию или по убыванию). Нажмите 'Apply' или клавишу Enter, чтобы отсортировать таблицу. -SQL консоль также позволяет добавлять несколько сортировок к таблице. Нажмите кнопку 'Sort' (Сортировка) снова, чтобы добавить ещё одну сортировку. +SQL‑консоль также позволяет добавлять несколько сортировок для одной таблицы. Нажмите кнопку 'Sort' еще раз, чтобы добавить дополнительную сортировку. :::note -Сортировки применяются в порядке их появления на панели сортировки (сверху вниз). Чтобы удалить сортировку, просто нажмите кнопку 'x' рядом с сортировкой. +Сортировки применяются в том порядке, в котором они отображаются в панели сортировки (сверху вниз). Чтобы удалить сортировку, нажмите кнопку 'x' рядом с соответствующей сортировкой. ::: ### Фильтрация таблицы {#filtering-a-table} -Чтобы отфильтровать таблицу в SQL консоли, откройте таблицу и нажмите кнопку 'Filter' (Фильтр). Так же, как и при сортировке, эта кнопка откроет меню, которое позволит вам настроить фильтр. Вы можете выбрать столбец для фильтрации и выбрать необходимые критерии. SQL консоль интеллектуально отображает параметры фильтра, которые соответствуют типу данных, содержащихся в столбце. +Чтобы отфильтровать таблицу в SQL‑консоли, откройте таблицу и нажмите кнопку 'Filter'. Аналогично сортировке, откроется меню, в котором вы сможете настроить параметры фильтрации. Вы можете выбрать столбец для фильтрации и задать необходимые критерии. SQL‑консоль автоматически отображает доступные варианты фильтрации, соответствующие типу данных в выбранном столбце. - + -Когда вы довольны своим фильтром, вы можете выбрать 'Apply' (Применить), чтобы отфильтровать данные. Вы также можете добавить дополнительные фильтры, как показано ниже. +Когда вы будете довольны настройками фильтра, нажмите 'Apply', чтобы отфильтровать данные. Вы также можете добавить дополнительные фильтры, как показано ниже. - + -Подобно функции сортировки, нажмите кнопку 'x' рядом с фильтром, чтобы удалить его. +Как и в случае с сортировкой, нажмите кнопку 'x' рядом с фильтром, чтобы удалить его. -### Фильтрация и сортировка вместе {#filtering-and-sorting-together} +### Совместное использование фильтрации и сортировки {#filtering-and-sorting-together} -SQL консоль позволяет фильтровать и сортировать таблицу одновременно. Для этого добавьте все необходимые фильтры и сортировки, используя шаги, описанные выше, и нажмите кнопку 'Apply' (Применить). +SQL‑консоль позволяет одновременно фильтровать и сортировать таблицу. Для этого добавьте все необходимые фильтры и сортировки, используя шаги, описанные выше, и нажмите кнопку 'Apply'. - + ### Создание запроса из фильтров и сортировок {#creating-a-query-from-filters-and-sorts} -SQL консоль может преобразовать ваши сортировки и фильтры непосредственно в запросы одним кликом. Просто выберите кнопку 'Create Query' (Создать запрос) на панели инструментов с выбранными параметрами сортировки и фильтра. После нажатия 'Create query' (Создать запрос) откроется новая вкладка запроса, предварительно заполненная SQL-командой, соответствующей данным, содержащимся в вашем представлении таблицы. +SQL‑консоль может преобразовать ваши сортировки и фильтры непосредственно в запрос одним кликом. Просто нажмите кнопку 'Create Query' на панели инструментов с выбранными параметрами сортировки и фильтрации. После нажатия 'Create query' откроется новая вкладка с запросом, заранее заполненная SQL‑командой, соответствующей данным, отображаемым в текущем представлении таблицы. - + :::note -Фильтры и сортировки не являются обязательными при использовании функции 'Create Query' (Создать запрос). +При использовании функции 'Create Query' фильтры и сортировки не являются обязательными. ::: -Вы можете узнать больше о запросах в SQL консоли, прочитав документацию по запросам (ссылка). +Дополнительную информацию о работе с запросами в SQL‑консоли вы можете найти в (link) документации по запросам. + + ## Создание и выполнение запроса {#creating-and-running-a-query} ### Создание запроса {#creating-a-query} -Существует два способа создать новый запрос в SQL консоли. +Создать новый запрос в SQL-консоли можно двумя способами. -- Нажмите кнопку '+' на панели вкладок -- Выберите кнопку 'New Query' (Новый запрос) в списке запросов левой боковой панели +- Нажмите кнопку '+' на панели вкладок. +- Нажмите кнопку 'New Query' в списке запросов на левой боковой панели. ### Выполнение запроса {#running-a-query} -Чтобы выполнить запрос, введите SQL-команду(ы) в SQL-редактор и нажмите кнопку 'Run' (Выполнить) или используйте сочетание клавиш `cmd / ctrl + enter`. Чтобы написать и последовательно выполнить несколько команд, убедитесь, что после каждой команды добавлена точка с запятой. +Чтобы выполнить запрос, введите SQL-команду или несколько команд в SQL-редактор и нажмите кнопку 'Run' или используйте сочетание клавиш `cmd / ctrl + enter`. Чтобы записать и выполнить несколько команд последовательно, обязательно добавляйте точку с запятой после каждой команды. -Параметры выполнения запроса -По умолчанию нажатие кнопки выполнения запустит все команды, содержащиеся в SQL-редакторе. SQL консоль поддерживает два других варианта выполнения запроса: +Параметры выполнения запроса +По умолчанию нажатие кнопки выполнения запускает все команды, содержащиеся в SQL-редакторе. SQL-консоль также поддерживает два других варианта выполнения запросов: -- Выполнение выбранной(ых) команды(команд) -- Выполнение команды в позиции курсора +- Выполнить выделенные команды +- Выполнить команду в позиции курсора -Чтобы выполнить выбранную(ые) команду(ы), выделите нужную команду или последовательность команд и нажмите кнопку 'Run' (Выполнить) (или используйте сочетание клавиш `cmd / ctrl + enter`). Вы также можете выбрать 'Run selected' (Выполнить выбранное) из контекстного меню SQL-редактора (открывается щелчком правой кнопкой мыши в любом месте редактора), когда присутствует выделение. +Чтобы выполнить выделенные команды, выделите нужную команду или последовательность команд и нажмите кнопку 'Run' (или используйте сочетание клавиш `cmd / ctrl + enter`). Вы также можете выбрать 'Run selected' в контекстном меню SQL-редактора (открывается по щелчку правой кнопкой мыши в любом месте редактора), когда есть выделение. - + -Выполнение команды в текущей позиции курсора можно осуществить двумя способами: +Выполнить команду в текущей позиции курсора можно двумя способами: -- Выберите 'At Cursor' (В позиции курсора) из расширенного меню параметров выполнения (или используйте соответствующее сочетание клавиш `cmd / ctrl + shift + enter`) +- Выберите 'At Cursor' в расширенном меню параметров выполнения (или используйте соответствующее сочетание клавиш `cmd / ctrl + shift + enter`). -- Выбор 'Run at cursor' (Выполнить в позиции курсора) из контекстного меню SQL-редактора +- Выберите 'Run at cursor' в контекстном меню SQL-редактора. :::note -Команда, присутствующая в позиции курсора, будет мигать жёлтым цветом при выполнении. +Команда в позиции курсора при выполнении кратковременно подсветится жёлтым цветом. ::: -### Отмена запроса {#canceling-a-query} +### Отмена выполнения запроса {#canceling-a-query} -Во время выполнения запроса кнопка 'Run' (Выполнить) на панели инструментов редактора запросов будет заменена на кнопку 'Cancel' (Отменить). Просто нажмите эту кнопку или нажмите `Esc`, чтобы отменить запрос. Примечание: Любые результаты, которые уже были возвращены, сохранятся после отмены. +Во время выполнения запроса кнопка 'Run' на панели инструментов редактора запросов будет заменена кнопкой 'Cancel'. Нажмите эту кнопку или клавишу `Esc`, чтобы отменить запрос. Примечание: любые результаты, которые уже были возвращены, сохранятся после отмены. - + ### Сохранение запроса {#saving-a-query} -Сохранение запросов позволяет легко найти их позже и поделиться ими с вашими товарищами по команде. SQL консоль также позволяет организовывать запросы в папки. +Сохранение запросов позволяет легко находить их позже и делиться ими с вашей командой. SQL-консоль также позволяет организовывать запросы по папкам. -Чтобы сохранить запрос, просто нажмите кнопку "Save" (Сохранить) сразу рядом с кнопкой "Run" (Выполнить) на панели инструментов. Введите желаемое имя и нажмите "Save Query" (Сохранить запрос). +Чтобы сохранить запрос, нажмите кнопку "Save", расположенную сразу рядом с кнопкой "Run" на панели инструментов. Введите нужное имя и нажмите "Save Query". :::note -Использование сочетания клавиш `cmd / ctrl` + s также сохранит любую работу на текущей вкладке запроса. +Сочетание клавиш `cmd / ctrl` + s также сохраняет все изменения в текущей вкладке запроса. ::: -В качестве альтернативы вы можете одновременно назвать и сохранить запрос, нажав на "Untitled Query" (Безымянный запрос) на панели инструментов, изменив имя и нажав Enter: +Также вы можете одновременно задать имя и сохранить запрос, щёлкнув по "Untitled Query" на панели инструментов, изменив имя и нажав Enter: ### Совместное использование запросов {#query-sharing} -SQL консоль позволяет легко делиться запросами с членами вашей команды. SQL консоль поддерживает четыре уровня доступа, которые можно настроить как глобально, так и для каждого пользователя отдельно: +SQL-консоль позволяет легко делиться запросами с участниками вашей команды. SQL-консоль поддерживает четыре уровня доступа, которые можно настраивать как глобально, так и для отдельных пользователей: -- Владелец (может настраивать параметры совместного использования) +- Владелец (может изменять параметры общего доступа) - Доступ на запись - Доступ только для чтения - Нет доступа -После сохранения запроса нажмите кнопку "Share" (Поделиться) на панели инструментов. Появится модальное окно с параметрами совместного использования: +После сохранения запроса нажмите кнопку "Share" на панели инструментов. Появится модальное окно с параметрами общего доступа: -Чтобы настроить доступ к запросу для всех членов организации с доступом к сервису, просто настройте селектор уровня доступа в верхней строке: +Чтобы настроить доступ к запросу для всех участников организации, имеющих доступ к сервису, измените переключатель уровня доступа в верхней строке: - + -После применения вышеуказанного запрос теперь может быть просмотрен (и выполнен) всеми членами команды с доступом к SQL консоли для сервиса. +После применения указанных настроек запрос становится доступен для просмотра (и выполнения) всем участникам команды, имеющим доступ к SQL-консоли для этого сервиса. -Чтобы настроить доступ к запросу для конкретных членов, выберите нужного члена команды из селектора "Add a team member" (Добавить члена команды): +Чтобы настроить доступ к запросу для отдельных участников, выберите нужного участника команды в поле "Add a team member": - + -После выбора члена команды должна появиться новая строка с селектором уровня доступа: +После выбора участника появится новая строка с переключателем уровня доступа: - + ### Доступ к общим запросам {#accessing-shared-queries} -Если запрос был предоставлен вам для совместного использования, он будет отображаться на вкладке "Queries" (Запросы) левой боковой панели SQL консоли: +Если запрос был предоставлен вам в общий доступ, он будет отображаться на вкладке "Queries" в левой боковой панели SQL-консоли: ### Ссылка на запрос (постоянные ссылки) {#linking-to-a-query-permalinks} -Сохранённые запросы также имеют постоянные ссылки, что означает, что вы можете отправлять и получать ссылки на общие запросы и открывать их напрямую. -Значения для любых параметров, которые могут существовать в запросе, автоматически добавляются к URL-адресу сохранённого запроса в качестве параметров запроса. Например, если запрос содержит параметры `{start_date: Date}` и `{end_date: Date}`, постоянная ссылка может выглядеть так: `https://console.clickhouse.cloud/services/:serviceId/console/query/:queryId?param_start_date=2015-01-01¶m_end_date=2016-01-01`. -## Расширенные функции запросов {#advanced-querying-features} +Сохранённые запросы также получают постоянные ссылки (permalink), что позволяет вам отправлять и получать ссылки на общие запросы и открывать их напрямую. + +Значения любых параметров, которые могут присутствовать в запросе, автоматически добавляются к URL сохранённого запроса в виде параметров строки запроса. Например, если запрос содержит параметры `{start_date: Date}` и `{end_date: Date}`, постоянная ссылка может выглядеть так: `https://console.clickhouse.cloud/services/:serviceId/console/query/:queryId?param_start_date=2015-01-01¶m_end_date=2016-01-01`. -### Поиск результатов запроса {#searching-query-results} -После выполнения запроса вы можете быстро выполнить поиск по возвращённому набору результатов, используя поле поиска на панели результатов. Эта функция помогает предварительно просмотреть результаты дополнительного предложения `WHERE` или просто убедиться, что конкретные данные включены в набор результатов. После ввода значения в поле поиска панель результатов обновится и вернёт записи, содержащие запись, которая соответствует введённому значению. В этом примере мы будем искать все вхождения `breakfast` в таблице `hackernews` для комментариев, содержащих `ClickHouse` (без учёта регистра): - +## Расширенные возможности запросов {#advanced-querying-features} -Примечание: Будет возвращено любое поле, соответствующее введённому значению. Например, третья запись на скриншоте выше не соответствует 'breakfast' в поле `by`, но поле `text` соответствует: +### Поиск по результатам запроса {#searching-query-results} - +После выполнения запроса вы можете быстро найти нужные данные в возвращённом наборе результатов, используя поле поиска в панели результатов. Эта функция помогает предварительно просматривать результаты дополнительного оператора `WHERE` или просто проверять, что определённые данные включены в набор результатов. После ввода значения в поле поиска панель результатов обновится и вернёт записи, содержащие вхождение, соответствующее введённому значению. В этом примере мы найдём все вхождения `breakfast` в таблице `hackernews` для комментариев, которые содержат `ClickHouse` (без учёта регистра): -### Настройка параметров пагинации {#adjusting-pagination-settings} + -По умолчанию панель результатов запроса будет отображать каждую запись результата на одной странице. Для больших наборов результатов может быть предпочтительнее разбить результаты на страницы для более лёгкого просмотра. Это можно сделать с помощью селектора пагинации в правом нижнем углу панели результатов: +Примечание: Будет возвращена любая запись, в которой какое-либо поле соответствует введённому значению. Например, третья запись на скриншоте выше не содержит `breakfast` в поле `by`, но поле `text` содержит его: - + -Выбор размера страницы немедленно применит пагинацию к набору результатов, и опции навигации появятся в середине нижнего колонтитула панели результатов. +### Настройка параметров разбиения на страницы {#adjusting-pagination-settings} - +По умолчанию панель результатов запроса отображает все записи на одной странице. Для больших наборов результатов может быть удобнее разбивать результаты на страницы. Это можно сделать с помощью переключателя разбиения на страницы в правом нижнем углу панели результатов: + + + +При выборе размера страницы разбиение на страницы сразу применяется к набору результатов, и в середине нижнего колонтитула панели результатов появляются элементы навигации. + + ### Экспорт данных результатов запроса {#exporting-query-result-data} -Наборы результатов запросов можно легко экспортировать в формат CSV непосредственно из SQL консоли. Для этого откройте меню `•••` в правой части панели инструментов панели результатов и выберите 'Download as CSV' (Скачать как CSV). +Наборы результатов запроса можно легко экспортировать в формат CSV прямо из SQL-консоли. Для этого откройте меню `•••` в правой части панели инструментов области результатов и выберите пункт `Download as CSV`. + + + - -## Визуализация данных запроса {#visualizing-query-data} +## Визуализация данных запросов -Некоторые данные легче интерпретировать в виде диаграммы. Вы можете быстро создать визуализации из данных результатов запроса непосредственно из SQL консоли всего в несколько кликов. В качестве примера мы будем использовать запрос, который рассчитывает еженедельную статистику для поездок такси в Нью-Йорке: +Некоторые данные проще воспринимать в виде диаграмм. Вы можете быстро создавать визуализации из результатов запросов непосредственно в SQL-консоли всего за несколько кликов. В качестве примера мы используем запрос, который вычисляет еженедельную статистику поездок на такси в Нью‑Йорке: ```sql SELECT @@ -265,44 +276,44 @@ ORDER BY 1 ASC ``` - + -Без визуализации эти результаты сложно интерпретировать. Давайте превратим их в диаграмму. +Без визуализации эти результаты трудно интерпретировать. Превратим их в диаграмму. -### Создание диаграмм {#creating-charts} +### Создание диаграмм -Чтобы начать создание визуализации, выберите опцию 'Chart' (Диаграмма) на панели инструментов панели результатов запроса. Появится панель настройки диаграммы: +Чтобы начать построение визуализации, выберите опцию «Chart» на панели инструментов области результатов запроса. Появится панель настройки диаграммы: - + -Мы начнём с создания простой столбчатой диаграммы, отслеживающей `trip_total` по `week` (неделям). Для этого мы перетащим поле `week` на ось x, а поле `trip_total` на ось y: +Начнем с создания простой столбчатой диаграммы, отображающей `trip_total` по `week`. Для этого перетащим поле `week` на ось x, а поле `trip_total` — на ось y: - + -Большинство типов диаграмм поддерживают несколько полей на числовых осях. Для демонстрации мы перетащим поле fare_total на ось y: +Большинство типов диаграмм поддерживают несколько полей на числовых осях. Для демонстрации перетащим поле `fare_total` на ось y: - + -### Настройка диаграмм {#customizing-charts} +### Настройка диаграмм -SQL консоль поддерживает десять типов диаграмм, которые можно выбрать из селектора типа диаграммы на панели настройки диаграммы. Например, мы можем легко изменить предыдущий тип диаграммы с Bar (Столбчатая) на Area (Область): +SQL-консоль поддерживает десять типов диаграмм, которые можно выбрать в селекторе типа диаграммы на панели настройки диаграммы. Например, мы можем легко изменить предыдущий тип диаграммы с Bar на Area: - + -Заголовки диаграмм соответствуют имени запроса, предоставляющего данные. Обновление имени запроса приведёт к обновлению заголовка диаграммы: +Заголовки диаграмм совпадают с именем запроса, который предоставляет данные. Обновление имени запроса приведет к обновлению заголовка диаграммы: - + -Ряд более продвинутых характеристик диаграммы также можно настроить в разделе 'Advanced' (Расширенные) панели настройки диаграммы. Для начала мы настроим следующие параметры: +Несколько более продвинутых параметров диаграммы также можно настроить в разделе «Advanced» панели настройки диаграммы. Для начала изменим следующие параметры: -- Подзаголовок -- Заголовки осей -- Ориентация меток для оси x +* Подзаголовок +* Заголовки осей +* Ориентация подписей для оси x Наша диаграмма будет обновлена соответствующим образом: - + -В некоторых сценариях может потребоваться независимая настройка масштабов осей для каждого поля. Это также можно сделать в разделе 'Advanced' (Расширенные) панели настройки диаграммы, указав минимальные и максимальные значения для диапазона осей. В качестве примера, приведённая выше диаграмма выглядит хорошо, но для демонстрации корреляции между нашими полями `trip_total` и `fare_total` диапазоны осей нуждаются в некоторой корректировке: +В некоторых случаях может потребоваться настроить масштабы осей для каждого поля независимо. Это также можно сделать в разделе «Advanced» панели настройки диаграммы, указав минимальные и максимальные значения диапазона оси. В качестве примера, приведенная выше диаграмма выглядит хорошо, но чтобы продемонстрировать корреляцию между полями `trip_total` и `fare_total`, диапазоны осей нуждаются в некоторой корректировке: - \ No newline at end of file + diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/features/09_support.md b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/features/09_support.md index 7099bacd61c..014098af654 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/features/09_support.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/features/09_support.md @@ -8,6 +8,6 @@ hide_title: true doc_type: 'guide' --- -import Content from '@site/i18n/ru/docusaurus-plugin-content-docs/current/about-us/support.md'; +import Content from '@site/docs/about-us/support.md'; diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/data-modeling/projections/1_projections.md b/i18n/ru/docusaurus-plugin-content-docs/current/data-modeling/projections/1_projections.md index 356a4fb3916..bc5e8bad60c 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/data-modeling/projections/1_projections.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/data-modeling/projections/1_projections.md @@ -1,8 +1,8 @@ --- slug: /data-modeling/projections title: 'Проекции' -description: 'Страница, посвящённая тому, что такое проекции, как их можно использовать для повышения производительности запросов и чем они отличаются от материализованных представлений.' -keywords: ['проекция', 'проекции', 'оптимизация запросов'] +description: 'Страница, на которой объясняется, что такое проекции, как их использовать для повышения производительности запросов и чем они отличаются от материализованных представлений.' +keywords: ['projection', 'projections', 'query optimization'] sidebar_order: 1 doc_type: 'guide' --- @@ -14,122 +14,112 @@ import Image from '@theme/IdealImage'; # Проекции - - ## Введение {#introduction} -ClickHouse предлагает различные механизмы ускорения выполнения аналитических запросов по большим -объёмам данных в сценариях реального времени. Один из таких механизмов — -использование _Projections_. Projections помогают оптимизировать -запросы за счёт переупорядочивания данных по интересующим атрибутам. Это может быть: +ClickHouse предлагает различные механизмы для ускорения аналитических запросов по большим +объёмам данных в режимах реального времени. Один из таких механизмов +— использование _проекций (Projections)_. Проекции помогают оптимизировать +запросы за счёт переупорядочивания данных по нужным атрибутам. Это может быть: -1. Полное переупорядочивание данных -2. Подмножество исходной таблицы с иным порядком строк -3. Предварительно вычислённая агрегация (аналогично материализованному представлению), но с порядком, - согласованным с этой агрегацией. +1. Полное переупорядочивание +2. Подмножество исходной таблицы с другим порядком +3. Предварительно вычисленная агрегация (аналогично материализованному представлению), но с порядком, + согласованным с агрегацией.
- - + ## Как работают Projections? {#how-do-projections-work} -Практически Projection можно рассматривать как дополнительную, скрытую таблицу -к исходной таблице. Проекция может иметь иной порядок строк и, следовательно, -другой первичный индекс по сравнению с исходной таблицей, а также может -автоматически и по мере вставки данных предварительно вычислять агрегированные значения. -В результате использование Projections дает два «рычага настройки» для -ускорения выполнения запросов: +На практике Projection можно рассматривать как дополнительную скрытую таблицу для +исходной таблицы. Projection может иметь иной порядок строк и, следовательно, +другой первичный индекс по сравнению с исходной таблицей, а также может автоматически +и инкрементально предварительно вычислять агрегированные значения. В результате использование Projections +предоставляет два механизма оптимизации для ускорения выполнения запросов: - **Корректное использование первичных индексов** - **Предварительное вычисление агрегатов** Projections в некотором смысле похожи на [Materialized Views](/materialized-views), -которые также позволяют иметь несколько порядков строк и предварительно -вычислять агрегации во время вставки. +которые также позволяют иметь несколько порядков строк и предварительно вычислять агрегации +в момент вставки. Projections автоматически обновляются и -поддерживаются в актуальном состоянии и синхронизированными с исходной таблицей, -в отличие от Materialized Views, которые обновляются явно. Когда запрос направлен -к исходной таблице, ClickHouse автоматически сэмплирует первичные ключи и -выбирает таблицу, которая может сгенерировать тот же корректный результат, но -требует чтения наименьшего объема данных, как показано на рисунке ниже: +остаются синхронизированными с исходной таблицей, в отличие от Materialized Views, которые +обновляются явно. Когда запрос направлен к исходной таблице, +ClickHouse автоматически выбирает первичные ключи и таблицу, которая может +сгенерировать тот же корректный результат, но требует чтения наименьшего объема данных, как показано на рисунке ниже: -### Более умное хранение с `_part_offset` {#smarter_storage_with_part_offset} +### Более эффективное хранение с `_part_offset` {#smarter_storage_with_part_offset} -Начиная с версии 25.5, ClickHouse поддерживает виртуальный столбец `_part_offset` -в проекциях, который предлагает новый способ определения проекции. +Начиная с версии 25.5, ClickHouse поддерживает виртуальный столбец `_part_offset` в +проекциях, что предоставляет новый способ определения проекций. -Теперь есть два способа определить проекцию: +Теперь есть два способа определения проекции: - **Хранить полные столбцы (исходное поведение)**: проекция содержит полные - данные и может читаться напрямую, обеспечивая более высокую производительность, - когда фильтры соответствуют порядку сортировки проекции. + данные и может читаться напрямую, обеспечивая более высокую производительность, когда фильтры соответствуют порядку сортировки проекции. - **Хранить только ключ сортировки + `_part_offset`**: проекция работает как индекс. - ClickHouse использует первичный индекс проекции для поиска соответствующих строк, - но читает фактические данные из базовой таблицы. Это снижает накладные расходы - на хранение ценой немного большего объема операций ввода-вывода во время выполнения запроса. + ClickHouse использует первичный индекс проекции, чтобы найти подходящие строки, но читает + фактические данные из базовой таблицы. Это снижает накладные расходы на хранение ценой + немного большего объёма операций ввода-вывода во время выполнения запроса. -Указанные подходы также можно комбинировать, храня часть столбцов в проекции, а +Эти подходы также можно комбинировать, храня часть столбцов в проекции, а остальные — косвенно через `_part_offset`. - - ## Когда использовать проекции? {#when-to-use-projections} -Проекции являются привлекательной возможностью для новых пользователей, поскольку они автоматически -поддерживаются по мере вставки данных. Кроме того, запросы могут отправляться просто к -одной таблице, где проекции при возможности используются для ускорения +Проекции — привлекательная возможность для новых пользователей, так как они автоматически +поддерживаются по мере вставки данных. Более того, запросы могут отправляться +к одной таблице, где проекции по возможности используются для ускорения времени отклика. -В отличие от этого, при использовании материализованных представлений пользователю необходимо выбирать -подходящую оптимизированную целевую таблицу или переписывать запрос в зависимости от -фильтров. Это создает большую нагрузку на пользовательские приложения и увеличивает +В отличие от материализованных представлений, где пользователю необходимо выбирать +соответствующую оптимизированную целевую таблицу или переписывать запрос в зависимости +от фильтров. Это накладывает больше требований на пользовательские приложения и увеличивает сложность на стороне клиента. -Несмотря на эти преимущества, у проекций есть ряд встроенных ограничений, о которых -пользователям следует знать, поэтому их следует использовать избирательно. +Несмотря на эти преимущества, у проекций есть некоторые присущие им ограничения, +о которых пользователям следует знать, поэтому применять их стоит выборочно. - Проекции не позволяют использовать разные TTL для исходной таблицы и - (скрытой) целевой таблицы, тогда как материализованные представления допускают разные TTL. + (скрытой) целевой таблицы, тогда как материализованные представления позволяют задавать разные TTL. - Легковесные операции обновления и удаления не поддерживаются для таблиц с проекциями. -- Материализованные представления можно выстраивать в цепочки: целевая таблица одного материализованного представления - может быть исходной таблицей для другого материализованного представления и так далее. Это +- Материализованные представления можно выстраивать в цепочку: целевая таблица одного материализованного представления + может быть исходной таблицей другого материализованного представления и так далее. Это невозможно для проекций. -- Проекции не поддерживают `JOIN`, тогда как материализованные представления поддерживают. -- Проекции не поддерживают фильтры (клауза `WHERE`), тогда как материализованные представления поддерживают. +- Определения проекций не поддерживают соединения (JOIN), тогда как материализованные представления их поддерживают. Однако запросы к таблицам с проекциями могут свободно использовать соединения. +- Определения проекций не поддерживают фильтры (оператор `WHERE`), тогда как материализованные представления их поддерживают. Однако запросы к таблицам с проекциями могут свободно использовать фильтрацию. Мы рекомендуем использовать проекции, когда: -- Требуется полная переупорядоченная организация данных. Хотя выражение в +- Требуется полное переупорядочивание данных. Хотя выражение в проекции теоретически может использовать `GROUP BY`, материализованные представления более эффективны для поддержки агрегатов. Оптимизатор запросов также с большей вероятностью будет использовать проекции, выполняющие простое переупорядочивание, то есть `SELECT * ORDER BY x`. Пользователи могут выбрать подмножество столбцов в этом выражении, чтобы уменьшить - объем хранимых данных. -- Пользователи готовы к возможному увеличению объема хранимых данных и - накладным расходам на двойную запись данных. Протестируйте влияние на скорость вставки и + занимаемый объём хранения. +- Пользователи готовы к потенциальному увеличению занимаемого объёма хранения и + накладным расходам на двукратную запись данных. Протестируйте влияние на скорость вставки и [оцените накладные расходы на хранение](/data-compression/compression-in-clickhouse). - - -## Примеры +## Примеры {#examples} ### Фильтрация по столбцам, которые не входят в первичный ключ В этом примере мы покажем, как добавить проекцию к таблице. -Мы также рассмотрим, как можно использовать проекцию для ускорения запросов, которые фильтруют +Мы также рассмотрим, как проекция может использоваться для ускорения запросов, которые фильтруют по столбцам, не входящим в первичный ключ таблицы. В этом примере мы будем использовать набор данных New York Taxi Data, доступный на [sql.clickhouse.com](https://sql.clickhouse.com/), который упорядочен по `pickup_datetime`. -Напишем простой запрос, чтобы найти все идентификаторы поездок, в которых пассажиры -дали водителю чаевые свыше 200 $: +Напишем простой запрос, чтобы найти все идентификаторы поездок, для которых пассажиры +дали водителю чаевые свыше $200: ```sql runnable SELECT @@ -140,8 +130,8 @@ FROM nyc_taxi.trips WHERE tip_amount > 200 AND trip_duration_min > 0 ORDER BY tip_amount, trip_id ASC ``` -Обратите внимание, что поскольку мы фильтруем по `tip_amount`, который не участвует в `ORDER BY`, ClickHouse -вынужден выполнить полное сканирование таблицы. Ускорим этот запрос. +Обратите внимание, что из‑за того, что мы фильтруем по `tip_amount`, который не входит в `ORDER BY`, ClickHouse +приходится выполнять полное сканирование таблицы. Давайте ускорим этот запрос. Чтобы сохранить исходную таблицу и результаты, мы создадим новую таблицу и скопируем данные с помощью `INSERT INTO SELECT`: @@ -150,7 +140,7 @@ CREATE TABLE nyc_taxi.trips_with_projection AS nyc_taxi.trips; INSERT INTO nyc_taxi.trips_with_projection SELECT * FROM nyc_taxi.trips; ``` -Чтобы добавить проекцию, мы используем оператор `ALTER TABLE` вместе с оператором `ADD PROJECTION`: +Чтобы добавить проекцию, используем оператор `ALTER TABLE` вместе с оператором `ADD PROJECTION`: ```sql ALTER TABLE nyc_taxi.trips_with_projection @@ -161,9 +151,9 @@ ADD PROJECTION prj_tip_amount ) ``` -После добавления проекции необходимо выполнить оператор `MATERIALIZE PROJECTION`, -чтобы данные в ней были физически упорядочены и перезаписаны -в соответствии с указанным выше запросом: +После добавления проекции необходимо использовать оператор `MATERIALIZE PROJECTION`, +чтобы данные в ней были физически отсортированы и перезаписаны в соответствии +с приведённым выше запросом: ```sql ALTER TABLE nyc.trips_with_projection MATERIALIZE PROJECTION prj_tip_amount @@ -180,9 +170,9 @@ FROM nyc_taxi.trips_with_projection WHERE tip_amount > 200 AND trip_duration_min ORDER BY tip_amount, trip_id ASC ``` -Обратите внимание, что нам удалось существенно сократить время выполнения запроса и при этом сканировать меньше строк. +Обратите внимание, что нам удалось существенно сократить время выполнения запроса и при этом просканировать меньше строк. -Мы можем подтвердить, что приведённый выше запрос действительно использовал созданную нами проекцию, обратившись к таблице `system.query_log`: +Мы можем подтвердить, что наш запрос выше действительно использовал созданную нами проекцию, обратившись к таблице `system.query_log`: ```sql SELECT query, projections @@ -200,18 +190,18 @@ WHERE query_id='' └───────────────────────────────────────────────────────────────────────────────┴──────────────────────────────────┘ ``` -### Использование проекций для ускорения запросов к данным UK Price Paid -Чтобы продемонстрировать, как проекции могут использоваться для ускорения выполнения запросов, рассмотрим пример с использованием реального набора данных. В этом примере мы будем -использовать таблицу из нашего руководства [UK Property Price Paid](https://clickhouse.com/docs/getting-started/example-datasets/uk-price-paid) -с 30,03 миллионами строк. Этот набор данных также доступен в нашей среде -[sql.clickhouse.com](https://sql.clickhouse.com/?query_id=6IDMHK3OMR1C97J6M9EUQS). +### Использование проекций для ускорения запросов к данным UK price paid -Если вы хотите посмотреть, как была создана таблица и как в неё были вставлены данные, вы можете -обратиться к разделу [«The UK property prices dataset»](/getting-started/example-datasets/uk-price-paid). +Чтобы продемонстрировать, как проекции могут использоваться для ускорения выполнения запросов, +рассмотрим пример на реальном наборе данных. В этом примере мы будем +использовать таблицу из руководства [UK Property Price Paid](https://clickhouse.com/docs/getting-started/example-datasets/uk-price-paid), +содержащую 30,03 миллиона строк. Этот набор данных также доступен в +среде [sql.clickhouse.com](https://sql.clickhouse.com/?query_id=6IDMHK3OMR1C97J6M9EUQS). -Мы можем выполнить два простых запроса к этому набору данных. Первый выводит список графств Лондона, -в которых были заплачены самые высокие цены, а второй вычисляет среднюю цену по этим графствам: +Если вы хотите узнать, как была создана таблица и загружены данные, обратитесь к странице ["Набор данных о ценах на недвижимость в Великобритании"](/getting-started/example-datasets/uk-price-paid). + +Мы можем выполнить два простых запроса к этому набору данных. Первый выводит список районов Лондона с наибольшими суммами оплаты, а второй вычисляет среднюю цену по районам: ```sql runnable SELECT @@ -223,7 +213,6 @@ ORDER BY price DESC LIMIT 3 ``` - ```sql runnable SELECT county, @@ -234,7 +223,7 @@ ORDER BY avg(price) DESC LIMIT 3 ``` -Обратите внимание, что, несмотря на очень высокую скорость выполнения, для обоих запросов был выполнен полный скан всей таблицы с 30,03 миллионами строк из‑за того, что ни `town`, ни `price` не были указаны в нашем операторе `ORDER BY` при создании таблицы: +Обратите внимание, что несмотря на высокую скорость выполнения, для обоих запросов было выполнено полное сканирование всех 30,03 миллионов строк, так как ни `town`, ни `price` не были включены в ORDER BY при создании таблицы: ```sql CREATE TABLE uk.uk_price_paid @@ -246,18 +235,19 @@ ENGINE = MergeTree ORDER BY (postcode1, postcode2, addr1, addr2); ``` -Давайте посмотрим, удастся ли нам ускорить выполнение этого запроса с помощью проекций. +Проверим, можно ли ускорить этот запрос с помощью проекций. -Чтобы сохранить исходную таблицу и результаты, мы создадим новую таблицу и скопируем данные с помощью оператора `INSERT INTO SELECT`: +Чтобы сохранить исходную таблицу и результаты, создадим новую таблицу и скопируем данные с помощью `INSERT INTO SELECT`: ```sql CREATE TABLE uk.uk_price_paid_with_projections AS uk_price_paid; INSERT INTO uk.uk_price_paid_with_projections SELECT * FROM uk.uk_price_paid; ``` -Мы создаём и заполняем проекцию `prj_oby_town_price`, которая создаёт -дополнительную (скрытую) таблицу с первичным индексом и сортировкой по городу и цене, -чтобы оптимизировать запрос, возвращающий графства в конкретном городе по наивысшим ценам: +Создаём и заполняем проекцию `prj_oby_town_price`, которая создаёт +дополнительную (скрытую) таблицу с первичным индексом, упорядоченную по городу и цене, для +оптимизации запроса, который выводит список округов в указанном городе с максимальными +ценами: ```sql ALTER TABLE uk.uk_price_paid_with_projections @@ -276,12 +266,11 @@ ALTER TABLE uk.uk_price_paid_with_projections SETTINGS mutations_sync = 1 ``` -Параметр [`mutations_sync`](/operations/settings/settings#mutations_sync) -используется для принудительного синхронного выполнения. +Настройка [`mutations_sync`](/operations/settings/settings#mutations_sync) используется для принудительного синхронного выполнения. -Мы создаём и заполняем проекцию `prj_gby_county` — дополнительную (скрытую) таблицу, -которая инкрементально предварительно вычисляет агрегатные значения avg(price) для всех 130 существующих -графств Великобритании: +Создаём и заполняем проекцию `prj_gby_county` — дополнительную (скрытую) таблицу, +которая инкрементно предвычисляет агрегированные значения avg(price) для всех существующих +130 округов Великобритании: ```sql ALTER TABLE uk.uk_price_paid_with_projections @@ -301,19 +290,18 @@ SETTINGS mutations_sync = 1 ``` :::note -Если в проекции, как в `prj_gby_county` выше, используется предложение `GROUP BY`, -то базовым движком хранения для (скрытой) таблицы становится `AggregatingMergeTree`, -а все агрегатные функции преобразуются в `AggregateFunction`. Это обеспечивает -корректную инкрементальную агрегацию данных. +Если в проекции используется предложение `GROUP BY`, как в проекции `prj_gby_county` +выше, то базовым движком хранения для (скрытой) таблицы +становится `AggregatingMergeTree`, и все агрегатные функции преобразуются в +`AggregateFunction`. Это обеспечивает правильную инкрементную агрегацию данных. ::: -Рисунок ниже представляет собой визуализацию основной таблицы `uk_price_paid_with_projections` -и её двух проекций: +На рисунке ниже показана визуализация основной таблицы `uk_price_paid_with_projections` +и двух её проекций: - + -Если теперь снова выполнить запрос, который выводит округа Лондона с тремя -наибольшими ценами покупки, мы увидим улучшение производительности запроса: +Если теперь снова выполнить запрос, который выводит районы Лондона с тремя самыми высокими ценами продажи, мы увидим улучшение производительности запроса: ```sql runnable SELECT @@ -325,7 +313,8 @@ ORDER BY price DESC LIMIT 3 ``` -Аналогично для запроса, выводящего графства Великобритании с тремя наибольшими средними ценами покупки: +Аналогично для запроса, который выводит три округа Великобритании с наибольшими +средними ценами: ```sql runnable SELECT @@ -337,21 +326,18 @@ ORDER BY avg(price) DESC LIMIT 3 ``` -Обратите внимание, что оба запроса обращаются к исходной таблице и что оба -запроса привели к полному сканированию таблицы (все 30,03 миллиона строк были -прочитаны с диска) до того, как мы создали две проекции. +Обратите внимание, что оба запроса обращаются к исходной таблице, и оба запроса привели к полному сканированию таблицы (все 30,03 миллиона строк были считаны с диска) до создания двух проекций. -Также обратите внимание, что запрос, который перечисляет графства в Лондоне по -трём самым высоким ценам продажи, считывает (стримит) 2,17 миллиона строк. Когда мы -напрямую использовали вторую таблицу, специально оптимизированную под этот запрос, с диска -было прочитано всего 81,92 тысячи строк. +Также обратите внимание, что запрос, который выводит графства Лондона с тремя +наиболее высокими ценами, считывает в потоковом режиме 2,17 миллиона строк. Когда мы использовали вторую таблицу, +оптимизированную под этот запрос, с диска было прочитано только 81,92 тысячи строк. -Причина этой разницы в том, что в данный момент оптимизация -`optimize_read_in_order`, упомянутая выше, не поддерживается для проекций. +Причина этой разницы в том, что в настоящее время оптимизация `optimize_read_in_order`, +упомянутая выше, не поддерживается для проекций. -Мы проверяем таблицу `system.query_log`, чтобы увидеть, что ClickHouse -автоматически использовал две проекции для двух приведённых выше запросов -(см. столбец projections ниже): +Мы анализируем таблицу `system.query_log` и видим, что ClickHouse +автоматически использовал две проекции для двух приведённых выше запросов (см. столбец +projections ниже): ```sql SELECT @@ -367,10 +353,9 @@ ORDER BY initial_query_start_time DESC FORMAT Vertical ``` - ```response Строка 1: -───────── +────── tables: ['uk.uk_price_paid_with_projections'] query: SELECT county, @@ -384,7 +369,7 @@ read_rows: 132.00 projections: ['uk.uk_price_paid_with_projections.prj_gby_county'] Строка 2: -───────── +────── tables: ['uk.uk_price_paid_with_projections'] query: SELECT county, @@ -398,23 +383,25 @@ query_duration: 11 мс read_rows: 2.29 млн projections: ['uk.uk_price_paid_with_projections.prj_obj_town_price'] -Получено 2 строки. Прошло: 0.006 сек. +2 строки. Затрачено: 0.006 сек. ``` + ### Дополнительные примеры -В следующих примерах используется тот же набор данных по ценам в Великобритании, чтобы сравнить запросы с проекциями и без них. +В следующих примерах используется тот же набор данных с ценами в Великобритании, и сравниваются запросы с использованием проекций и без них. -Чтобы сохранить нашу исходную таблицу (и производительность), мы снова создаём копию таблицы с помощью `CREATE AS` и `INSERT INTO SELECT`. +Чтобы сохранить нашу исходную таблицу (и производительность), мы снова создадим копию таблицы с помощью `CREATE AS` и `INSERT INTO SELECT`. ```sql CREATE TABLE uk.uk_price_paid_with_projections_v2 AS uk.uk_price_paid; INSERT INTO uk.uk_price_paid_with_projections_v2 SELECT * FROM uk.uk_price_paid; ``` -#### Создание проекции -Создадим агрегирующую проекцию по измерениям `toYear(date)`, `district` и `town`: +#### Построим проекцию + +Давайте создадим агрегатную проекцию по измерениям `toYear(date)`, `district` и `town`: ```sql ALTER TABLE uk.uk_price_paid_with_projections_v2 @@ -434,7 +421,7 @@ ALTER TABLE uk.uk_price_paid_with_projections_v2 ) ``` -Заполните проекцию для существующих данных. (Если не выполнять материализацию, проекция будет создаваться только для вновь вставляемых данных): +Заполните проекцию для существующих данных. (Без материализации проекция будет создаваться только для данных, вставляемых после этого): ```sql ALTER TABLE uk.uk_price_paid_with_projections_v2 @@ -442,9 +429,10 @@ ALTER TABLE uk.uk_price_paid_with_projections_v2 SETTINGS mutations_sync = 1 ``` -Следующие запросы сравнивают производительность с проекциями и без них. Для отключения использования проекций используется настройка [`optimize_use_projections`](/operations/settings/settings#optimize_use_projections), которая включена по умолчанию. +Следующие запросы сравнивают производительность при использовании проекций и без них. Чтобы отключить использование проекций, мы используем настройку [`optimize_use_projections`](/operations/settings/settings#optimize_use_projections), которая включена по умолчанию. + -#### Запрос 1. Средняя цена по годам +#### Запрос 1. Средняя годовая цена ```sql runnable SELECT @@ -468,9 +456,10 @@ ORDER BY year ASC ``` -Результаты должны совпадать, но во втором примере производительность будет лучше! +Результат должен быть таким же, но производительность во втором примере будет лучше! -#### Запрос 2. Средняя цена по годам для Лондона + +#### Запрос 2. Средняя цена по годам в Лондоне ```sql runnable SELECT @@ -495,9 +484,10 @@ GROUP BY year ORDER BY year ASC ``` + #### Запрос 3. Самые дорогие районы -Условие (date >= '2020-01-01') необходимо изменить так, чтобы оно соответствовало измерению проекции (`toYear(date) >= 2020)`: +Условие (date >= '2020-01-01') нужно изменить так, чтобы оно соответствовало измерению проекции (`toYear(date) >= 2020)`: ```sql runnable SELECT @@ -517,7 +507,6 @@ LIMIT 100 SETTINGS optimize_use_projections=0 ``` - ```sql runnable SELECT town, @@ -535,24 +524,25 @@ ORDER BY price DESC LIMIT 100 ``` -Снова результат тот же, но обратите внимание на улучшение производительности второго запроса. +Результат по-прежнему тот же, но обратите внимание на улучшение производительности второго запроса. + ### Комбинирование проекций в одном запросе -Начиная с версии 25.6, на основе поддержки `_part_offset`, -появившейся в предыдущей версии, ClickHouse теперь может использовать несколько -проекций для ускорения одного запроса с несколькими фильтрами. +Начиная с версии 25.6, на основе поддержки `_part_offset`, добавленной в +предыдущей версии, ClickHouse теперь может использовать несколько проекций для ускорения +одного запроса с несколькими фильтрами. -Важно, что ClickHouse по-прежнему читает данные только из одной проекции (или базовой таблицы), -но может использовать первичные индексы других проекций, чтобы отбросить ненужные парты до чтения. -Это особенно полезно для запросов, фильтрующих по нескольким столбцам, каждый из которых +Важно, что ClickHouse по‑прежнему считывает данные только из одной проекции (или базовой таблицы), +но может использовать первичные индексы других проекций для отсечения ненужных кусков данных (parts) перед чтением. +Это особенно полезно для запросов, которые фильтруют по нескольким столбцам, при этом каждый из них может соответствовать своей проекции. -> В настоящее время этот механизм позволяет отбрасывать только целые парты. Фильтрация -> на уровне гранул пока не поддерживается. +> В настоящее время этот механизм отсекает только целые части (parts). Отсечение на уровне гранул +> пока не поддерживается. Чтобы продемонстрировать это, мы определим таблицу (с проекциями, использующими столбцы `_part_offset`) -и вставим пять примерных строк, соответствующих диаграммам выше. +и вставим пять примерных строк, соответствующих приведённым выше диаграммам. ```sql CREATE TABLE page_views @@ -594,24 +584,24 @@ INSERT INTO page_views VALUES ( ``` :::note -Примечание: в таблице используются специальные настройки для иллюстрации, -например гранулы размером в одну строку и отключённые слияния частей данных, что не рекомендуется для использования в продакшене. +Примечание: в таблице для наглядности используются нестандартные настройки, такие как гранулы по одной строке +и отключённое слияние частей (parts), что не рекомендуется для использования в продакшене. ::: -Эта конфигурация приводит к следующему: +Эта конфигурация даёт следующий результат: -* Пяти отдельным частям (по одной на каждую вставленную строку) -* По одной записи в первичном индексе на строку (в базовой таблице и в каждой проекции) +* Пять отдельных частей (по одной на каждую вставленную строку) +* По одной записи первичного индекса на строку (в базовой таблице и в каждой проекции) * Каждая часть содержит ровно одну строку -С такой конфигурацией мы выполняем запрос с фильтрацией сразу по `region` и `user_id`. +С такой конфигурацией мы выполняем запрос с фильтрацией и по `region`, и по `user_id`. Поскольку первичный индекс базовой таблицы построен по `event_date` и `id`, он здесь бесполезен, поэтому ClickHouse использует: * `region_proj` для отсечения частей по региону * `user_id_proj` для дополнительного отсечения по `user_id` -Это поведение видно с помощью `EXPLAIN projections = 1`, который показывает, +Это поведение видно при использовании `EXPLAIN projections = 1`, который показывает, как ClickHouse выбирает и применяет проекции. ```sql @@ -619,48 +609,48 @@ EXPLAIN projections=1 SELECT * FROM page_views WHERE region = 'us_west' AND user_id = 107; ``` - ```response ┌─explain────────────────────────────────────────────────────────────────────────────────┐ - 1. │ Expression ((Имена проектов + Проекция)) │ - 2. │ Expression │ + 1. │ Выражение ((Project names + Projection)) │ + 2. │ Выражение │ 3. │ ReadFromMergeTree (default.page_views) │ 4. │ Проекции: │ - 5. │ Имя: region_proj │ - 6. │ Описание: Проекция проанализирована и используется для фильтрации на уровне частей │ - 7. │ Условие: (region in ['us_west', 'us_west']) │ - 8. │ Алгоритм поиска: бинарный поиск │ + 5. │ Название: region_proj │ + 6. │ Описание: проекция проанализирована и используется для фильтрации на уровне частей │ + 7. │ Условие: (region in ['us_west', 'us_west']) │ + 8. │ Алгоритм поиска: двоичный поиск │ 9. │ Части: 3 │ 10. │ Метки: 3 │ -11. │ Диапазоны: 3 │ -12. │ Строки: 3 │ -13. │ Отфильтрованные части: 2 │ -14. │ Имя: user_id_proj │ -15. │ Описание: Проекция проанализирована и используется для фильтрации на уровне частей │ -16. │ Условие: (user_id in [107, 107]) │ -17. │ Алгоритм поиска: бинарный поиск │ +11. │ Диапазоны: 3 │ +12. │ Строки: 3 │ +13. │ Filtered Части: 2 │ +14. │ Название: user_id_proj │ +15. │ Описание: проекция проанализирована и используется для фильтрации на уровне частей │ +16. │ Условие: (user_id in [107, 107]) │ +17. │ Алгоритм поиска: двоичный поиск │ 18. │ Части: 1 │ 19. │ Метки: 1 │ -20. │ Диапазоны: 1 │ -21. │ Строки: 1 │ -22. │ Отфильтрованные части: 2 │ +20. │ Диапазоны: 1 │ +21. │ Строки: 1 │ +22. │ Filtered Части: 2 │ └────────────────────────────────────────────────────────────────────────────────────────┘ ``` -Вывод `EXPLAIN` (показан выше) показывает логический план запроса сверху вниз: +Вывод `EXPLAIN` (показан выше) отображает логический план запроса, сверху вниз: -| Row number | Description | -| ---------- | ------------------------------------------------------------------------------------------------------------------------ | -| 3 | План чтения из базовой таблицы `page_views` | -| 5-13 | Использует `region_proj`, чтобы определить 3 части, где `region = 'us_west'`, отсекая 2 из 5 частей | -| 14-22 | Использует `user_id_proj`, чтобы определить 1 часть, где `user_id = 107`, дополнительно отсекая 2 из 3 оставшихся частей | -В итоге из базовой таблицы читается только **1 часть из 5**. -Комбинируя анализ индексов нескольких проекций, ClickHouse значительно сокращает объём сканируемых данных, -повышая производительность при низких накладных расходах на хранение. +| Номер строки | Описание | +|--------------|--------------------------------------------------------------------------------------------------------| +| 3 | Планирует чтение из базовой таблицы `page_views` | +| 5-13 | Использует `region_proj` для определения 3 частей, где `region = 'us_west'`, отбрасывая 2 из 5 частей | +| 14-22 | Использует `user_id_proj` для определения 1 части, где `user_id = 107`, дополнительно отбрасывая 2 из 3 оставшихся частей | +В итоге из базовой таблицы читается только **1 из 5 частей**. +За счет комбинированного анализа индексов нескольких проекций ClickHouse существенно снижает объем сканируемых данных, +повышая производительность при низких накладных расходах на хранение. ## Связанные материалы {#related-content} + - [Практическое введение в первичные индексы ClickHouse](/guides/best-practices/sparse-primary-indexes#option-3-projections) - [Материализованные представления](/docs/materialized-views) -- [ALTER PROJECTION](/sql-reference/statements/alter/projection) +- [ALTER PROJECTION](/sql-reference/statements/alter/projection) \ No newline at end of file diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/data-modeling/projections/2_materialized-views-versus-projections.md b/i18n/ru/docusaurus-plugin-content-docs/current/data-modeling/projections/2_materialized-views-versus-projections.md index 452575b7335..11853a2f3c5 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/data-modeling/projections/2_materialized-views-versus-projections.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/data-modeling/projections/2_materialized-views-versus-projections.md @@ -1,97 +1,93 @@ --- slug: /managing-data/materialized-views-versus-projections -sidebar_label: 'Материализованные представления и проекции' +sidebar_label: 'Материализованные представления vs проекции' title: 'Материализованные представления и проекции' hide_title: false -description: 'Статья, сравнивающая материализованные представления и проекции в ClickHouse, включая сценарии использования, производительность и ограничения.' +description: 'Статья, сравнивающая материализованные представления и проекции в ClickHouse, включая их варианты использования, производительность и ограничения.' doc_type: 'reference' keywords: ['materialized views', 'projections', 'differences'] --- -> Один из частых вопросов пользователей — когда следует использовать материализованные представления, а когда проекции. В этой статье мы рассмотрим ключевые различия между ними и объясним, почему в определённых сценариях вы можете предпочесть один вариант другому. +> Один из частых вопросов пользователей — когда следует использовать материализованные представления, а когда +проекции. В этой статье мы рассмотрим ключевые различия между ними и разберёмся, почему в определённых сценариях +стоит предпочесть один подход другому. +## Сводка ключевых различий {#key-differences} - -## Краткое описание ключевых различий {#key-differences} - -В таблице ниже обобщены ключевые различия между материализованными представлениями и проекциями по ряду аспектов. +В таблице ниже приведены ключевые различия между материализованными представлениями и проекциями по различным аспектам. | Аспект | Материализованные представления | Проекции | |----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Хранение данных и их расположение | Сохраняют свои результаты в **отдельной явной целевой таблице**, действуя как триггеры вставки при `INSERT` в исходную таблицу. | Проекции создают оптимизированные схемы хранения данных, которые физически **хранятся рядом с основными данными таблицы** и невидимы для пользователя. | -| Механизм обновления | Работают **синхронно** при `INSERT` в исходную таблицу (для инкрементальных материализованных представлений). Примечание: их также можно **запускать по расписанию** с помощью обновляемых материализованных представлений. | **Асинхронные** обновления в фоновом режиме при `INSERT` в основную таблицу. | -| Взаимодействие с запросами | Работа с материализованными представлениями требует **прямого запроса к целевой таблице**, то есть пользователи должны знать о существовании материализованных представлений при написании запросов. | Проекции **автоматически выбираются** оптимизатором запросов ClickHouse и являются прозрачными в том смысле, что пользователю не нужно изменять свои запросы к таблице с проекцией, чтобы её использовать. Начиная с версии 25.6 также возможно фильтровать более чем по одной проекции. | -| Обработка `UPDATE` / `DELETE` | **Не реагируют автоматически** на операции `UPDATE` или `DELETE` в исходной таблице, поскольку материализованные представления не имеют информации об исходной таблице и действуют только как триггеры вставки _в_ исходную таблицу. Это может привести к потенциальной несогласованности данных между исходной и целевой таблицами и требует обходных решений или периодического полного обновления (через обновляемое материализованное представление). | По умолчанию **несовместимы со строками `DELETED`** (особенно с lightweight‑удалениями). `lightweight_mutation_projection_mode` (v24.7+) может включить совместимость. | -| Поддержка `JOIN` | Да. Обновляемые материализованные представления могут использоваться для сложной денормализации. Инкрементальные материализованные представления срабатывают только при вставках в крайнюю левую таблицу. | Нет. Операции `JOIN` не поддерживаются в определениях проекций для фильтрации материализованных данных. | -| Условие `WHERE` в определении | Да. Условия `WHERE` могут быть включены для фильтрации данных перед материализацией. | Нет. Условия `WHERE` не поддерживаются в определениях проекций для фильтрации материализованных данных. | -| Возможность построения цепочек | Да, целевая таблица одного материализованного представления может быть источником для другого материализованного представления, что позволяет строить многостадийные конвейеры обработки. | Нет. Проекции не могут быть связаны в цепочку. | -| Поддерживаемые движки таблиц | Могут использоваться с различными движками исходных таблиц, но целевые таблицы обычно относятся к семейству `MergeTree`. | **Доступны только** для движков таблиц семейства `MergeTree`. | -| Обработка сбоев | Сбой во время вставки данных означает потерю данных в целевой таблице, что может привести к потенциальной несогласованности. | Сбои **тихо** обрабатываются в фоновом режиме. Запросы могут прозрачно сочетать материализованные и нематериализованные части данных. | -| Операционные накладные расходы | Требуют явного создания целевой таблицы и зачастую ручного начального заполнения. Управление согласованностью при `UPDATE`/`DELETE` повышает сложность. | Проекции автоматически поддерживаются и синхронизируются и, как правило, создают меньшую операционную нагрузку. | -| Совместимость с запросами `FINAL` | В целом совместимы, но часто требуют `GROUP BY` по целевой таблице. | **Не работают** с запросами `FINAL`. | -| Ленивая материализация | Да. | Следите за проблемами совместимости проекций при использовании возможностей ленивой материализации. Возможно, потребуется установить `query_plan_optimize_lazy_materialization = false`. | -| Параллельные реплики | Да. | Нет. | -| [`optimize_read_in_order`](/operations/settings/settings#optimize_read_in_order) | Да. | Да. | -| Лёгкие (lightweight) операции обновления и удаления | Да. | Нет. | - - +| Data storage and location | Сохраняют свои результаты в **отдельной, явно заданной целевой таблице**, выступая в роли триггеров вставки при `INSERT` в исходную таблицу. | Проекции создают оптимизированные структуры данных, которые физически **хранятся рядом с основными данными таблицы** и невидимы для пользователя. | +| Update mechanism | Работают **синхронно** при `INSERT` в исходную таблицу (для инкрементальных материализованных представлений). Примечание: их также можно **планировать по расписанию** с помощью обновляемых материализованных представлений. | **Асинхронные** обновления в фоновом режиме при `INSERT` в основную таблицу. | +| Query interaction | Работа с материализованными представлениями требует прямого выполнения запросов к **целевой таблице**, то есть пользователи должны знать о существовании материализованных представлений при написании запросов. | Проекции **автоматически выбираются** оптимизатором запросов ClickHouse и являются прозрачными в том смысле, что пользователю не нужно изменять свои запросы к таблице с проекцией, чтобы её использовать. Начиная с версии 25.6 также можно фильтровать более чем по одной проекции. | +| Handling `UPDATE` / `DELETE` | **Не реагируют автоматически** на операции `UPDATE` или `DELETE` над исходной таблицей, так как материализованные представления не обладают информацией об исходной таблице и работают только как триггеры вставки _в_ исходную таблицу. Это может приводить к потенциальной несвежести данных между исходной и целевой таблицами и требует обходных решений или периодического полного обновления (через обновляемое материализованное представление). | По умолчанию **несовместимы с удалёнными (`DELETED`) строками** (особенно с облегчёнными удалениями — lightweight deletes). Параметр `lightweight_mutation_projection_mode` (v24.7+) может включить совместимость. | +| `JOIN` support | Да. Обновляемые материализованные представления могут использоваться для сложной денормализации. Инкрементальные материализованные представления срабатывают только при вставках в самую левую таблицу. | Нет. Операции `JOIN` не поддерживаются в определениях проекций для фильтрации материализованных данных. Однако запросы, которые делают `JOIN` таблиц с проекциями, работают нормально — проекции оптимизируют доступ к отдельным таблицам. | +| `WHERE` clause in definition | Да. Условия `WHERE` могут быть включены для фильтрации данных до материализации. | Нет. Условия `WHERE` не поддерживаются в определениях проекций для фильтрации материализованных данных. | +| Chaining capabilities | Да, целевая таблица одного материализованного представления может быть источником для другого материализованного представления, что позволяет строить многоступенчатые конвейеры. | Нет. Проекции нельзя связывать в цепочку. | +| Applicable table engines | Могут использоваться с различными движками исходных таблиц, но целевые таблицы обычно принадлежат семейству `MergeTree`. | **Доступны только** для движков таблиц семейства `MergeTree`. | +| Failure handling | Сбой во время вставки данных означает потерю данных в целевой таблице, что может привести к несогласованности данных. | Сбои **тихо** обрабатываются в фоновом режиме. Запросы могут бесшовно комбинировать материализованные и нематериализованные части данных. | +| Operational overhead | Требуют явного создания целевой таблицы и часто ручного дозаполнения (backfill). Управление согласованностью данных при `UPDATE`/`DELETE` повышает сложность. | Проекции автоматически поддерживаются и синхронизируются и, как правило, создают меньшую операционную нагрузку. | +| `FINAL` query compatibility | В целом совместимы, но часто требуют `GROUP BY` по целевой таблице. | **Не работают** с запросами `FINAL`. | +| Lazy materialization | Да. | Следите за проблемами совместимости проекций при использовании механизмов ленивой материализации. Возможно, потребуется установить `query_plan_optimize_lazy_materialization = false`. | +| Parallel replicas | Да. | Нет. | +| [`optimize_read_in_order`](/operations/settings/settings#optimize_read_in_order) | Да. | Да. | +| Lightweight updates and deletes | Да. | Нет. | ## Сравнение материализованных представлений и проекций {#choose-between} -### Когда выбирать материализованные представления {#choosing-materialized-views} +### Когда стоит выбирать материализованные представления {#choosing-materialized-views} -Рассмотрите возможность использования материализованных представлений, когда: +Использование материализованных представлений стоит рассмотреть, когда: -- Вы работаете с **ETL в реальном времени и многостадийными конвейерами обработки данных:** необходимо выполнять сложные преобразования, агрегации или маршрутизацию данных по мере их поступления, потенциально через несколько стадий путём связывания представлений в цепочку. -- Вам требуется **сложная денормализация**: необходимо предварительно объединять данные из нескольких источников (таблиц, подзапросов или словарей) в одну таблицу, оптимизированную для запросов, особенно если допустимы периодические полные обновления с использованием обновляемых материализованных представлений. -- Вам нужен **явный контроль схемы**: требуется отдельная целевая таблица с собственной схемой и движком для предвычисленных результатов, что обеспечивает большую гибкость при моделировании данных. -- Вы хотите **фильтровать на этапе приёма данных**: необходимо отфильтровать данные _до того_, как они материализуются, уменьшая объём данных, записываемых в целевую таблицу. +- Вы работаете с **ETL в режиме реального времени и многостадийными конвейерами обработки данных:** Нужно выполнять сложные преобразования, агрегации или маршрутизацию данных по мере их поступления, возможно, через несколько стадий, связывая представления в цепочки. +- Вам требуется **сложная денормализация**: Нужно заранее объединить данные из нескольких источников (таблиц, подзапросов или словарей) в одну таблицу, оптимизированную для запросов, особенно если допустимы периодические полные обновления с использованием обновляемых материализованных представлений. +- Вам нужен **явный контроль над схемой**: Требуется отдельная целевая таблица с собственной схемой и движком для предварительно вычисленных результатов, что обеспечивает большую гибкость при моделировании данных. +- Вы хотите **фильтровать на этапе ингестии**: Нужно отфильтровать данные _до того_, как они будут материализованы, уменьшая объём данных, записываемых в целевую таблицу. ### Когда следует избегать материализованных представлений {#avoid-materialized-views} -Рассмотрите возможность отказа от использования материализованных представлений, когда: +Следует рассмотреть отказ от использования материализованных представлений, когда: -- **Исходные данные часто обновляются или удаляются**: без дополнительных стратегий обеспечения согласованности между исходной и целевой таблицами инкрементные материализованные представления могут устаревать и становиться несогласованными. -- **Предпочтительны простота и автоматическая оптимизация**: если вы хотите избежать управления отдельными целевыми таблицами. +- **Исходные данные часто обновляются или удаляются**: Без дополнительных стратегий поддержания согласованности между исходными и целевыми таблицами инкрементальные материализованные представления могут устаревать и становиться несогласованными. +- **Предпочитаются простота и автоматическая оптимизация**: Если вы не хотите управлять отдельными целевыми таблицами. -### Когда выбирать проекции {#choosing-projections} +### Когда следует использовать проекции {#choosing-projections} -Рассмотрите возможность использования проекций, когда: +Рекомендуется рассматривать использование проекций, когда: -- **Оптимизируются запросы к одной таблице**: ваша основная цель — ускорить запросы к одной базовой таблице за счёт предоставления альтернативных порядков сортировки, оптимизации фильтрации по столбцам, не входящим в первичный ключ, или предвычисления агрегатов для одной таблицы. -- Вам нужна **прозрачность запросов**: вы хотите, чтобы запросы по-прежнему были нацелены на исходную таблицу без модификаций, полагаясь на ClickHouse при выборе наилучшего формата данных для конкретного запроса. +- **Оптимизируете запросы для одной таблицы**: ваша основная цель — ускорить запросы к одной базовой таблице за счёт задания альтернативных порядков сортировки, оптимизации фильтров по столбцам, которые не входят в первичный ключ, или предварительного вычисления агрегаций для одной таблицы. +- Вам нужна **прозрачность запросов**: вы хотите, чтобы запросы по-прежнему выполнялись к исходной таблице без изменений, полагаясь на ClickHouse при выборе наилучшего расположения данных для конкретного запроса. ### Когда следует избегать проекций {#avoid-projections} -Рассмотрите возможность отказа от использования проекций, когда: - -- **Требуются сложные преобразования данных или многостадийный ETL**: проекции не поддерживают операции `JOIN` в своих определениях, не могут изменяться для построения многошаговых конвейеров и не поддерживают некоторые возможности SQL, такие как оконные функции или сложные выражения `CASE`. Поэтому они не подходят для сложных преобразований данных. -- **Нужно явное фильтрование материализованных данных**: проекции не поддерживают `WHERE` в определении для фильтрации данных, которые материализуются в самой проекции. -- **Используются таблицы на движках, отличных от MergeTree**: проекции доступны исключительно для таблиц, использующих семейство движков `MergeTree`. -- `FINAL`-запросы имеют ключевое значение: проекции не работают с `FINAL`-запросами, которые иногда используются для дедупликации. -- Вам нужны [параллельные реплики](/deployment-guides/parallel-replicas), так как они не поддерживаются проекциями. - +Рекомендуется избегать использования проекций в следующих случаях: +- **Требуется сложная трансформация данных или многоэтапный ETL**: Определения проекций не поддерживают операции `JOIN`, не могут быть объединены в цепочки для построения многошаговых конвейеров и не работают с некоторыми возможностями SQL, такими как оконные функции или сложные выражения `CASE`. Хотя запросы к таблицам с проекциями могут свободно использовать `JOIN`, сами проекции не подходят для сложной трансформации данных. +- **Нужна явная фильтрация материализованных данных**: Проекции не поддерживают использование предложения `WHERE` в определении для фильтрации данных, которые материализуются в саму проекцию. +- **Используются табличные движки, отличные от MergeTree**: Проекции доступны исключительно для таблиц, использующих семейство движков `MergeTree`. +- Запросы с `FINAL` являются критически важными: проекции не работают с запросами `FINAL`, которые иногда используются для дедупликации. +- Вам нужны [параллельные реплики](/deployment-guides/parallel-replicas), так как они не поддерживаются при использовании проекций. ## Резюме {#summary} -Материализованные представления и проекции — оба мощных инструмента в вашем арсенале -для оптимизации запросов и преобразования данных, и в целом мы не рекомендуем рассматривать -их использование как взаимоисключающий выбор. Вместо этого их можно применять -взаимодополняющим образом, чтобы получить максимум от ваших запросов. Таким образом, выбор -между материализованными представлениями и проекциями в ClickHouse действительно зависит -от вашего конкретного сценария использования и паттернов доступа. - -В качестве общего практического правила вам следует рассматривать использование -материализованных представлений, когда нужно агрегировать данные из одной или -нескольких исходных таблиц в целевую таблицу или выполнять сложные преобразования -в больших масштабах. Материализованные представления отлично подходят для переноса выполнения -дорогостоящих агрегаций с времени выполнения запроса на время вставки. Они являются -отличным выбором для ежедневных или ежемесячных сводок, дашбордов в реальном времени или -сводной информации по данным. - -С другой стороны, вам следует использовать проекции, когда нужно оптимизировать -запросы, которые фильтруют по другим столбцам, чем те, которые используются в первичном -ключе таблицы и определяют физический порядок данных на диске. Они особенно полезны, -когда больше нет возможности изменить первичный ключ таблицы или когда ваши паттерны -доступа более разнообразны, чем то, что может обеспечить первичный ключ. +Материализованные представления и проекции — это мощные инструменты в вашем арсенале +для оптимизации запросов и преобразования данных, и в целом мы не рекомендуем +рассматривать их использование как взаимоисключающий выбор. Вместо этого их можно +применять взаимодополняющим образом, чтобы получить максимальную отдачу от запросов. +Таким образом, выбор между материализованными представлениями и проекциями в ClickHouse +на самом деле зависит от конкретного сценария использования и паттернов доступа. + +В качестве общего практического правила стоит рассматривать использование +материализованных представлений, когда вам нужно агрегировать данные из одной или нескольких +исходных таблиц в целевую таблицу или выполнять сложные преобразования в больших масштабах. +Материализованные представления отлично подходят для переноса работы по выполнению +ресурсоёмких агрегирующих вычислений с момента выполнения запроса на момент вставки данных. +Это отличный выбор для ежедневных или ежемесячных сводок, дашбордов в реальном времени +или агрегированных обзоров данных. + +С другой стороны, имеет смысл использовать проекции, когда необходимо оптимизировать запросы, +которые фильтруют по другим столбцам, чем те, что используются в первичном ключе таблицы, +определяющем физический порядок данных на диске. Они особенно полезны, когда изменить +первичный ключ таблицы больше невозможно или когда ваши паттерны доступа более разнообразны, +чем то, что может обеспечить первичный ключ. \ No newline at end of file diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/data-modeling/schema-design.md b/i18n/ru/docusaurus-plugin-content-docs/current/data-modeling/schema-design.md index 562635d3645..fb461e41557 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/data-modeling/schema-design.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/data-modeling/schema-design.md @@ -1,7 +1,7 @@ --- slug: /data-modeling/schema-design title: 'Проектирование схемы' -description: 'Оптимизация схемы ClickHouse для производительности запросов' +description: 'Оптимизация схемы ClickHouse для повышения производительности запросов' keywords: ['схема', 'проектирование схемы', 'оптимизация запросов'] doc_type: 'guide' --- @@ -10,29 +10,33 @@ import stackOverflowSchema from '@site/static/images/data-modeling/stackoverflow import schemaDesignIndices from '@site/static/images/data-modeling/schema-design-indices.png'; import Image from '@theme/IdealImage'; -Понимание эффективного проектирования схемы является ключом к оптимизации производительности ClickHouse и включает в себя выбор, который часто связан с компромиссами, при этом оптимальный подход зависит от обслуживаемых запросов, а также от таких факторов, как частота обновления данных, требования к задержке и объем данных. Это руководство предоставляет обзор лучших практик проектирования схем и техник моделирования данных для оптимизации производительности ClickHouse. +Понимание принципов эффективного проектирования схем данных является ключевым фактором оптимизации производительности ClickHouse и предполагает выбор решений, часто связанных с компромиссами; при этом оптимальный подход зависит от выполняемых запросов, а также от таких факторов, как частота обновления данных, требования к задержкам и объём данных. В этом руководстве представлен обзор лучших практик проектирования схем и методов моделирования данных для оптимизации производительности ClickHouse. + ## Набор данных Stack Overflow {#stack-overflow-dataset} -Для примеров в этом руководстве мы используем подмножество набора данных Stack Overflow. Он содержит все посты, голоса, пользователей, комментарии и значки, которые появились на Stack Overflow с 2008 года по апрель 2024 года. Эти данные доступны в формате Parquet по схемам, представленным ниже, в корзине S3 `s3://datasets-documentation/stackoverflow/parquet/`: +В примерах в этом руководстве мы используем подмножество набора данных Stack Overflow. Оно содержит каждое сообщение, голосование, пользователя, комментарий и бейдж, появившиеся на Stack Overflow с 2008 по апрель 2024 года. Эти данные доступны в формате Parquet с использованием приведённых ниже схем в S3-бакете `s3://datasets-documentation/stackoverflow/parquet/`: -> Первичные ключи и связи, указанные здесь, не применяются через ограничения (Parquet — это формат файла, а не таблицы) и только указывают, как данные связаны и какие уникальные ключи они имеют. +> Указанные первичные ключи и связи не обеспечиваются ограничениями (Parquet — это файловый, а не табличный формат) и служат исключительно для указания взаимосвязей данных и уникальных ключей, которыми они обладают.
-Набор данных Stack Overflow содержит ряд связанных таблиц. В любой задаче моделирования данных мы рекомендуем пользователям сначала сосредоточиться на загрузке основной таблицы. Это необязательно самая большая таблица, а скорее та, для которой вы ожидаете получать больше всего аналитических запросов. Это позволит вам ознакомиться с основными концепциями и типами ClickHouse, что особенно важно, если вы пришли из преимущественно OLTP-среды. Эта таблица может потребовать перемоделирования по мере добавления дополнительных таблиц для полного использования функций ClickHouse и достижения оптимальной производительности. +Набор данных Stack Overflow содержит несколько связанных таблиц. В любой задаче моделирования данных мы рекомендуем в первую очередь загружать основную таблицу. Это не обязательно самая большая таблица, а та, по которой вы ожидаете наибольшее число аналитических запросов. Это позволит вам познакомиться с основными концепциями и типами ClickHouse, что особенно важно, если вы в основном работали с OLTP-системами. По мере добавления дополнительных таблиц эту таблицу может потребоваться переработать, чтобы в полной мере использовать возможности ClickHouse и добиться оптимальной производительности. + +Приведённая выше схема намеренно не является оптимальной для целей этого руководства. + -Приведенная выше схема намеренно не является оптимальной для целей этого руководства. -## Создание начальной схемы {#establish-initial-schema} +## Создание начальной схемы -Поскольку таблица `posts` будет целью большинства аналитических запросов, мы сосредоточимся на создании схемы для этой таблицы. Эти данные доступны в публичной корзине S3 `s3://datasets-documentation/stackoverflow/parquet/posts/*.parquet` с файлом для каждого года. +Поскольку таблица `posts` будет основной для большинства аналитических запросов, мы сосредоточимся на определении схемы именно для неё. Эти данные доступны в общедоступном S3‑бакете `s3://datasets-documentation/stackoverflow/parquet/posts/*.parquet`, по одному файлу на каждый год. -> Загрузка данных из S3 в формате Parquet представляет собой наиболее распространенный и предпочтительный способ загрузки данных в ClickHouse. ClickHouse оптимизирован для обработки Parquet и потенциально может читать и вставлять десятки миллионов строк из S3 в секунду. +> Загрузка данных из S3 в формате Parquet является наиболее распространённым и предпочтительным способом загрузки данных в ClickHouse. ClickHouse оптимизирован для обработки Parquet и потенциально может считывать и вставлять десятки миллионов строк из S3 в секунду. + +ClickHouse предоставляет возможность автоматического вывода схемы для определения типов в наборе данных. Это поддерживается для всех форматов данных, включая Parquet. Мы можем использовать эту функцию для определения типов ClickHouse для данных с помощью table function `s3` и команды [`DESCRIBE`](/sql-reference/statements/describe-table). Обратите внимание, что ниже мы используем glob‑шаблон `*.parquet` для чтения всех файлов в каталоге `stackoverflow/parquet/posts`. -ClickHouse предоставляет возможность автоматического определения схемы для автоматической идентификации типов набора данных. Это поддерживается для всех форматов данных, включая Parquet. Мы можем использовать эту функцию для определения типов ClickHouse для данных через табличную функцию s3 и команду [`DESCRIBE`](/sql-reference/statements/describe-table). Обратите внимание, что ниже мы используем glob-шаблон `*.parquet` для чтения всех файлов в папке `stackoverflow/parquet/posts`. ```sql DESCRIBE TABLE s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/parquet/posts/*.parquet') SETTINGS describe_compact_output = 1 @@ -63,9 +67,10 @@ SETTINGS describe_compact_output = 1 └───────────────────────┴────────────────────────────────┘ ``` -> [Табличная функция s3](/sql-reference/table-functions/s3) позволяет запрашивать данные в S3 непосредственно из ClickHouse. Эта функция совместима со всеми форматами файлов, которые поддерживает ClickHouse. +> [Функция таблицы s3](/sql-reference/table-functions/s3) позволяет выполнять запросы к данным в S3 непосредственно из ClickHouse. Эта функция совместима со всеми форматами файлов, которые поддерживает ClickHouse. + +Это дает нам исходную, не оптимизированную схему. По умолчанию ClickHouse отображает их в соответствующие типы Nullable. Мы можем создать таблицу ClickHouse, используя эти типы, с помощью простой команды `CREATE EMPTY AS SELECT`. -Это дает нам начальную неоптимизированную схему. По умолчанию ClickHouse сопоставляет их с эквивалентными типами Nullable. Мы можем создать таблицу ClickHouse, используя эти типы, с помощью простой команды `CREATE EMPTY AS SELECT`. ```sql CREATE TABLE posts ENGINE = MergeTree @@ -75,104 +80,113 @@ SELECT * FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/stac Несколько важных моментов: -Наша таблица posts пуста после выполнения этой команды. Никакие данные не были загружены. -Мы указали MergeTree в качестве движка таблицы. MergeTree — это наиболее распространенный движок таблиц ClickHouse, который вы, вероятно, будете использовать. Это универсальный инструмент в вашем арсенале ClickHouse, способный обрабатывать петабайты данных и обслуживать большинство аналитических случаев использования. Другие движки таблиц существуют для таких случаев использования, как CDC, которым необходима поддержка эффективных обновлений. +Наша таблица `posts` пуста после выполнения этой команды. Данные не были загружены. +Мы указали `MergeTree` как движок таблицы. `MergeTree` — самый распространённый движок таблиц ClickHouse, который вы, скорее всего, будете использовать. Это многофункциональный инструмент в вашем арсенале ClickHouse, способный обрабатывать петабайты данных и подходящий для большинства аналитических сценариев. Существуют и другие движки таблиц для таких сценариев, как CDC (фиксация изменений данных), которым требуется эффективная поддержка обновлений. + +Конструкция `ORDER BY ()` означает, что у нас нет индекса и, более конкретно, нет порядка в наших данных. Об этом позже. Пока достаточно знать, что все запросы будут требовать линейного сканирования. -Предложение `ORDER BY ()` означает, что у нас нет индекса и, более конкретно, нет порядка в наших данных. Подробнее об этом позже. Пока просто знайте, что для всех запросов потребуется линейное сканирование. +Чтобы убедиться, что таблица была создана: -Чтобы подтвердить создание таблицы: ```sql SHOW CREATE TABLE posts +``` + CREATE TABLE posts ( - `Id` Nullable(Int64), - `PostTypeId` Nullable(Int64), - `AcceptedAnswerId` Nullable(Int64), - `CreationDate` Nullable(DateTime64(3, 'UTC')), - `Score` Nullable(Int64), - `ViewCount` Nullable(Int64), - `Body` Nullable(String), - `OwnerUserId` Nullable(Int64), - `OwnerDisplayName` Nullable(String), - `LastEditorUserId` Nullable(Int64), - `LastEditorDisplayName` Nullable(String), - `LastEditDate` Nullable(DateTime64(3, 'UTC')), - `LastActivityDate` Nullable(DateTime64(3, 'UTC')), - `Title` Nullable(String), - `Tags` Nullable(String), - `AnswerCount` Nullable(Int64), - `CommentCount` Nullable(Int64), - `FavoriteCount` Nullable(Int64), - `ContentLicense` Nullable(String), - `ParentId` Nullable(String), - `CommunityOwnedDate` Nullable(DateTime64(3, 'UTC')), - `ClosedDate` Nullable(DateTime64(3, 'UTC')) +`Id` Nullable(Int64), +`PostTypeId` Nullable(Int64), +`AcceptedAnswerId` Nullable(Int64), +`CreationDate` Nullable(DateTime64(3, 'UTC')), +`Score` Nullable(Int64), +`ViewCount` Nullable(Int64), +`Body` Nullable(String), +`OwnerUserId` Nullable(Int64), +`OwnerDisplayName` Nullable(String), +`LastEditorUserId` Nullable(Int64), +`LastEditorDisplayName` Nullable(String), +`LastEditDate` Nullable(DateTime64(3, 'UTC')), +`LastActivityDate` Nullable(DateTime64(3, 'UTC')), +`Title` Nullable(String), +`Tags` Nullable(String), +`AnswerCount` Nullable(Int64), +`CommentCount` Nullable(Int64), +`FavoriteCount` Nullable(Int64), +`ContentLicense` Nullable(String), +`ParentId` Nullable(String), +`CommunityOwnedDate` Nullable(DateTime64(3, 'UTC')), +`ClosedDate` Nullable(DateTime64(3, 'UTC')) ) -ENGINE = MergeTree('/clickhouse/tables/{uuid}/{shard}', '{replica}') +ENGINE = MergeTree('/clickhouse/tables/{uuid}/{shard}', '{replica}') ORDER BY tuple() -``` -После определения начальной схемы мы можем заполнить данные с помощью `INSERT INTO SELECT`, считывая данные с помощью табличной функции s3. Следующая загрузка данных `posts` занимает около 2 минут на 8-ядерном экземпляре ClickHouse Cloud. +```` + +После определения начальной схемы можно заполнить таблицу данными с помощью `INSERT INTO SELECT`, считывая данные через табличную функцию s3. Следующий запрос загружает данные `posts` примерно за 2 минуты на 8-ядерном экземпляре ClickHouse Cloud. + ```sql INSERT INTO posts SELECT * FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/parquet/posts/*.parquet') 0 rows in set. Elapsed: 148.140 sec. Processed 59.82 million rows, 38.07 GB (403.80 thousand rows/s., 257.00 MB/s.) -``` +```` + +> Приведённый выше запрос загружает 60 млн строк. Хотя это немного для ClickHouse, пользователи с более медленным интернет-соединением могут предпочесть загрузить лишь часть данных. Это можно сделать, просто указав годы, которые нужно загрузить, с помощью glob-шаблона, например `https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/parquet/posts/2008.parquet` или `https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/parquet/posts/{2008, 2009}.parquet`. Подробнее о том, как использовать glob-шаблоны для выбора подмножеств файлов, см. [здесь](/sql-reference/table-functions/file#globs-in-path). -> Приведенный выше запрос загружает 60 миллионов строк. Хотя это небольшой объем для ClickHouse, пользователи с более медленным интернет-соединением могут захотеть загрузить подмножество данных. Этого можно достичь, просто указав годы, которые они хотят загрузить, через glob-шаблон, например `https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/parquet/posts/2008.parquet` или `https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/parquet/posts/{2008, 2009}.parquet`. Смотрите [здесь](/sql-reference/table-functions/file#globs-in-path), как glob-шаблоны можно использовать для таргетирования подмножеств файлов. ## Оптимизация типов {#optimizing-types} -Один из секретов производительности запросов ClickHouse — это сжатие. +Один из секретов производительности запросов в ClickHouse — сжатие. -Меньше данных на диске означает меньше операций ввода-вывода и, следовательно, более быстрые запросы и вставки. Накладные расходы любого алгоритма сжатия в отношении CPU в большинстве случаев будут перевешены сокращением операций ввода-вывода. Поэтому улучшение сжатия данных должно быть первым фокусом при работе над обеспечением быстрых запросов ClickHouse. +Меньший объём данных на диске означает меньше операций ввода-вывода (I/O), а значит, более быстрые запросы и вставки. Затраты любого алгоритма сжатия по CPU в большинстве случаев с лихвой компенсируются снижением I/O. Поэтому улучшение степени сжатия данных должно быть первым приоритетом при работе над ускорением запросов в ClickHouse. -> Чтобы понять, почему ClickHouse так хорошо сжимает данные, мы рекомендуем [эту статью](https://clickhouse.com/blog/optimize-clickhouse-codecs-compression-schema). Вкратце, как столбцовая база данных, значения будут записываться в порядке столбцов. Если эти значения отсортированы, одинаковые значения будут находиться рядом друг с другом. Алгоритмы сжатия используют непрерывные шаблоны данных. Кроме того, ClickHouse имеет кодеки и детализированные типы данных, которые позволяют пользователям дополнительно настраивать методы сжатия. +> Почему ClickHouse так хорошо сжимает данные, рекомендуем прочитать в [этой статье](https://clickhouse.com/blog/optimize-clickhouse-codecs-compression-schema). Вкратце: как колоночная база данных, ClickHouse записывает значения по столбцам. Если эти значения отсортированы, одинаковые значения будут располагаться рядом. Алгоритмы сжатия используют непрерывные паттерны в данных. Помимо этого, в ClickHouse есть кодеки и более гранулярные типы данных, которые позволяют пользователям дополнительно настраивать технику сжатия. -На сжатие в ClickHouse будут влиять 3 основных фактора: ключ сортировки, типы данных и любые используемые кодеки. Все это настраивается через схему. +На сжатие в ClickHouse влияют три основных фактора: ключ сортировки, типы данных и используемые кодеки. Все они настраиваются через схему. -Наибольшее первоначальное улучшение сжатия и производительности запросов можно получить с помощью простого процесса оптимизации типов. Можно применить несколько простых правил для оптимизации схемы: +Наибольшего первоначального улучшения по сжатию и производительности запросов можно добиться с помощью простого процесса оптимизации типов. Для оптимизации схемы можно применить несколько простых правил: -- **Используйте строгие типы** - Наша начальная схема использовала строки для многих столбцов, которые явно являются числовыми. Использование правильных типов обеспечит ожидаемую семантику при фильтрации и агрегировании. То же самое относится к типам дат, которые были правильно предоставлены в файлах Parquet. -- **Избегайте Nullable столбцов** - По умолчанию приведенные выше столбцы предполагались Null. Тип Nullable позволяет запросам определять разницу между пустым значением и значением Null. Это создает отдельный столбец типа UInt8. Этот дополнительный столбец должен обрабатываться каждый раз, когда пользователь работает со столбцом nullable. Это приводит к дополнительному использованию пространства хранения и почти всегда негативно влияет на производительность запросов. Используйте Nullable только в том случае, если есть разница между пустым значением по умолчанию для типа и значением Null. Например, значение 0 для пустых значений в столбце `ViewCount`, вероятно, будет достаточным для большинства запросов и не повлияет на результаты. Если пустые значения должны обрабатываться по-другому, их также часто можно исключить из запросов с помощью фильтра. -- **Используйте минимальную точность для числовых типов** - ClickHouse имеет ряд числовых типов, предназначенных для различных числовых диапазонов и точности. Всегда стремитесь минимизировать количество битов, используемых для представления столбца. Помимо целых чисел разного размера, например Int16, ClickHouse предлагает беззнаковые варианты, минимальное значение которых равно 0. Они могут позволить использовать меньше битов для столбца, например, UInt16 имеет максимальное значение 65535, что в два раза больше, чем у Int16. Предпочитайте эти типы более крупным знаковым вариантам, если это возможно. -- **Минимальная точность для типов дат** - ClickHouse поддерживает ряд типов дат и дат-времени. Date и Date32 могут использоваться для хранения чистых дат, причем последний поддерживает больший диапазон дат за счет большего количества битов. DateTime и DateTime64 обеспечивают поддержку дат-времени. DateTime ограничен детализацией до секунды и использует 32 бита. DateTime64, как следует из названия, использует 64 бита, но обеспечивает поддержку с точностью до наносекунды. Как всегда, выбирайте более грубую версию, приемлемую для запросов, минимизируя количество необходимых битов. -- **Используйте LowCardinality** - Столбцы с числами, строками, Date или DateTime с небольшим количеством уникальных значений потенциально могут быть закодированы с использованием типа LowCardinality. Это кодирует значения в словарь, уменьшая размер на диске. Рассмотрите это для столбцов с менее чем 10 тысячами уникальных значений. -- **FixedString для особых случаев** - Строки с фиксированной длиной могут быть закодированы типом FixedString, например, коды языков и валют. Это эффективно, когда данные имеют длину ровно N байтов. Во всех остальных случаях это, вероятно, снизит эффективность, и предпочтительнее использовать LowCardinality. -- **Enum для проверки данных** - Тип Enum можно использовать для эффективного кодирования перечисляемых типов. Enum может быть 8 или 16 бит в зависимости от количества уникальных значений, которые они должны хранить. Рассмотрите возможность использования этого, если вам нужна либо связанная проверка во время вставки (необъявленные значения будут отклонены), либо вы хотите выполнять запросы, использующие естественный порядок значений Enum, например, представьте столбец обратной связи, содержащий ответы пользователей `Enum(':(' = 1, ':|' = 2, ':)' = 3)`. +- **Используйте строгие типы** — В нашей исходной схеме для многих столбцов, которые явно являются числовыми, использовались типы String. Использование корректных типов гарантирует ожидаемую семантику при фильтрации и агрегации. То же относится и к типам дат, которые корректно заданы в файлах Parquet. +- **Избегайте nullable-столбцов** — По умолчанию вышеуказанные столбцы рассматривались как допускающие Null. Тип Nullable позволяет запросам определять разницу между пустым значением и Null. Для этого создаётся отдельный столбец типа UInt8. Этот дополнительный столбец должен обрабатываться каждый раз, когда пользователь работает с nullable-столбцом. Это приводит к дополнительным затратам по месту хранения и почти всегда негативно влияет на производительность запросов. Используйте Nullable только в том случае, если существует разница между стандартным пустым значением для типа и Null. Например, значение 0 для пустых значений в столбце `ViewCount` скорее всего будет достаточно для большинства запросов и не повлияет на результаты. Если пустые значения должны обрабатываться по‑другому, их часто можно просто исключить из запросов с помощью фильтра. +- **Используйте минимально необходимую точность для числовых типов** — В ClickHouse есть несколько числовых типов, рассчитанных на разные диапазоны значений и точность. Всегда стремитесь минимизировать количество бит, используемых для представления столбца. Помимо целых чисел разного размера, например Int16, ClickHouse предлагает беззнаковые варианты, у которых минимальное значение равно 0. Это позволяет использовать меньше бит для столбца, например, максимальное значение для UInt16 — 65535, что вдвое больше, чем у Int16. По возможности отдавайте предпочтение таким типам вместо более крупных знаковых вариантов. +- **Минимальная требуемая точность для типов дат** — ClickHouse поддерживает несколько типов дат и дат-времени. Date и Date32 можно использовать для хранения чистых дат, при этом Date32 поддерживает больший диапазон значений дат за счёт большего количества бит. DateTime и DateTime64 обеспечивают поддержку дата-время. DateTime ограничен точностью до секунды и использует 32 бита. DateTime64, как следует из названия, использует 64 бита, но поддерживает точность до наносекунд. Как и всегда, выбирайте максимально грубую гранулярность, которая приемлема для ваших запросов, минимизируя количество бит, необходимых для хранения. +- **Используйте LowCardinality** — Числовые, строковые, Date- или DateTime-столбцы с небольшим количеством уникальных значений могут быть закодированы с помощью типа LowCardinality. Этот тип использует словарное кодирование значений, уменьшая размер данных на диске. Рассматривайте его применение для столбцов с менее чем 10k уникальных значений. +- **FixedString для особых случаев** — Строки фиксированной длины могут быть закодированы с помощью типа FixedString, например коды языка и валют. Это эффективно, когда длина данных составляет ровно N байт. Во всех остальных случаях это, скорее всего, снизит эффективность, и предпочтительнее использовать LowCardinality. +- **Enum для валидации данных** — Тип Enum можно использовать для эффективного кодирования перечислимых типов. Enum может занимать 8 или 16 бит, в зависимости от количества уникальных значений, которые требуется хранить. Рассмотрите его использование, если вам нужна либо встроенная валидация при вставке (недекларированные значения будут отвергнуты), либо вы хотите выполнять запросы, использующие естественный порядок значений Enum, например представьте столбец с обратной связью пользователей `Enum(':(' = 1, ':|' = 2, ':)' = 3)`. -> Совет: Чтобы найти диапазон всех столбцов и количество различных значений, пользователи могут использовать простой запрос `SELECT * APPLY min, * APPLY max, * APPLY uniq FROM table FORMAT Vertical`. Мы рекомендуем выполнять это на меньшем подмножестве данных, так как это может быть дорогостоящим. Этот запрос требует, чтобы числовые значения были хотя бы определены как таковые для получения точного результата, то есть не как String. +> Совет: чтобы найти диапазон значений всех столбцов и количество различных значений, пользователи могут выполнить простой запрос `SELECT * APPLY min, * APPLY max, * APPLY uniq FROM table FORMAT Vertical`. Рекомендуем выполнять его над небольшим подмножеством данных, так как он может быть дорогим. Для корректного результата в этом запросе числовые значения должны быть как минимум определены как числовые типы, а не как String. Применяя эти простые правила к нашей таблице posts, мы можем определить оптимальный тип для каждого столбца: -| Столбец | Числовой | Мин, Макс | Уникальные значения | Nulls | Комментарий | Оптимизированный тип | -|------------------------|------------|------------------------------------------------------------------------|----------------|--------|----------------------------------------------------------------------------------------------|------------------------------------------| -| `PostTypeId` | Да | 1, 8 | 8 | Нет | | `Enum('Question' = 1, 'Answer' = 2, 'Wiki' = 3, 'TagWikiExcerpt' = 4, 'TagWiki' = 5, 'ModeratorNomination' = 6, 'WikiPlaceholder' = 7, 'PrivilegeWiki' = 8)` | -| `AcceptedAnswerId` | Да | 0, 78285170 | 12282094 | Да | Различать Null со значением 0 | UInt32 | -| `CreationDate` | Нет | 2008-07-31 21:42:52.667000000, 2024-03-31 23:59:17.697000000 | - | Нет | Детализация миллисекунд не требуется, использовать DateTime | DateTime | -| `Score` | Да | -217, 34970 | 3236 | Нет | | Int32 | -| `ViewCount` | Да | 2, 13962748 | 170867 | Нет | | UInt32 | -| `Body` | Нет | - | - | Нет | | String | -| `OwnerUserId` | Да | -1, 4056915 | 6256237 | Да | | Int32 | -| `OwnerDisplayName` | Нет | - | 181251 | Да | Считать Null пустой строкой | String | -| `LastEditorUserId` | Да | -1, 9999993 | 1104694 | Да | 0 — неиспользуемое значение, может использоваться для Nulls | Int32 | -| `LastEditorDisplayName` | Нет | - | 70952 | Да | Считать Null пустой строкой. Тестировали LowCardinality без преимуществ | String | -| `LastEditDate` | Нет | 2008-08-01 13:24:35.051000000, 2024-04-06 21:01:22.697000000 | - | Нет | Детализация миллисекунд не требуется, использовать DateTime | DateTime | -| `LastActivityDate` | Нет | 2008-08-01 12:19:17.417000000, 2024-04-06 21:01:22.697000000 | - | Нет | Детализация миллисекунд не требуется, использовать DateTime | DateTime | -| `Title` | Нет | - | - | Нет | Считать Null пустой строкой | String | -| `Tags` | Нет | - | - | Нет | Считать Null пустой строкой | String | -| `AnswerCount` | Да | 0, 518 | 216 | Нет | Считать Null и 0 одинаковыми | UInt16 | -| `CommentCount` | Да | 0, 135 | 100 | Нет | Считать Null и 0 одинаковыми | UInt8 | -| `FavoriteCount` | Да | 0, 225 | 6 | Да | Считать Null и 0 одинаковыми | UInt8 | -| `ContentLicense` | Нет | - | 3 | Нет | LowCardinality превосходит FixedString | LowCardinality(String) | -| `ParentId` | Нет | - | 20696028 | Да | Считать Null пустой строкой | String | -| `CommunityOwnedDate` | Нет | 2008-08-12 04:59:35.017000000, 2024-04-01 05:36:41.380000000 | - | Да | Считать значением по умолчанию 1970-01-01 для Nulls. Детализация миллисекунд не требуется, использовать DateTime | DateTime | -| `ClosedDate` | Нет | 2008-09-04 20:56:44, 2024-04-06 18:49:25.393000000 | - | Да | Считать значением по умолчанию 1970-01-01 для Nulls. Детализация миллисекунд не требуется, использовать DateTime | DateTime | + + +| Столбец | Является числом | Минимум, Максимум | Уникальные значения | Значения NULL | Комментарий | Оптимизированный тип | +| ----------------------- | --------------- | ------------------------------------------------------------ | ------------------- | ------------- | --------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `PostTypeId` | Да | 1, 8 | 8 | Нет | | `Enum('Question' = 1, 'Answer' = 2, 'Wiki' = 3, 'TagWikiExcerpt' = 4, 'TagWiki' = 5, 'ModeratorNomination' = 6, 'WikiPlaceholder' = 7, 'PrivilegeWiki' = 8)` | +| `AcceptedAnswerId` | Да | 0, 78285170 | 12282094 | Да | Отличать NULL от значения 0 | UInt32 | +| `CreationDate` | Нет | 2008-07-31 21:42:52.667000000, 2024-03-31 23:59:17.697000000 | * | Нет | Точность до миллисекунд не требуется, используйте DateTime | DateTime | +| `Score` | Да | -217, 34970 | 3236 | Нет | | Int32 | +| `ViewCount` | Да | 2, 13962748 | 170867 | Нет | | UInt32 | +| `Тело` | Нет | - | * | Нет | | Строка | +| `OwnerUserId` | Да | -1, 4056915 | 6256237 | Да | | Int32 | +| `OwnerDisplayName` | Нет | - | 181251 | Да | Рассматривать NULL как пустую строку | String | +| `LastEditorUserId` | Да | -1, 9999993 | 1104694 | Да | 0 — неиспользуемое значение, которое можно использовать для обозначения Null | Int32 | +| `LastEditorDisplayName` | Нет | * | 70952 | Да | Следует считать значение Null пустой строкой. Мы протестировали LowCardinality — выгоды нет. | String | +| `LastEditDate` | Нет | 2008-08-01 13:24:35.051000000, 2024-04-06 21:01:22.697000000 | - | Нет | Если точность до миллисекунд не требуется, используйте DateTime | DateTime | +| `LastActivityDate` | Нет | 2008-08-01 12:19:17.417000000, 2024-04-06 21:01:22.697000000 | * | Нет | Если не требуется точность до миллисекунд, используйте DateTime | DateTime | +| `Title` | Нет | - | * | Нет | Рассматривать NULL как пустую строку | String | +| `Теги` | Нет | - | * | Нет | Рассматривать значение Null как пустую строку | Строка | +| `AnswerCount` | Да | 0, 518 | 216 | Нет | Считать Null и 0 одинаковыми | UInt16 | +| `CommentCount` | Да | 0, 135 | 100 | Нет | Считать NULL и 0 равнозначными | UInt8 | +| `FavoriteCount` | Да | 0, 225 | 6 | Да | Считать значения Null и 0 равнозначными | UInt8 | +| `ContentLicense` | Нет | - | 3 | Нет | LowCardinality превосходит FixedString по производительности | LowCardinality(String) | +| `ParentId` | Нет | * | 20696028 | Да | Считать Null пустой строкой | Строка | +| `CommunityOwnedDate` | Нет | 2008-08-12 04:59:35.017000000, 2024-04-01 05:36:41.380000000 | - | Да | Используйте значение по умолчанию 1970-01-01 для значений NULL. Точность до миллисекунд не требуется, используйте DateTime. | DateTime | +| `ClosedDate` | Нет | 2008-09-04 20:56:44, 2024-04-06 18:49:25.393000000 | * | Да | Используйте значение по умолчанию 1970-01-01 для значений NULL. Миллисекундная точность не требуется — используйте DateTime | DateTime |
-Приведенное выше дает нам следующую схему: +В итоге получаем следующую схему: + ```sql CREATE TABLE posts_v2 ( @@ -204,43 +218,46 @@ ORDER BY tuple() COMMENT 'Оптимизированные типы' ``` -Мы можем заполнить это простым `INSERT INTO SELECT`, считывая данные из нашей предыдущей таблицы и вставляя их в эту: +Мы можем заполнить эту таблицу с помощью простого запроса `INSERT INTO SELECT`, прочитав данные из нашей предыдущей таблицы и вставив их в эту: + ```sql INSERT INTO posts_v2 SELECT * FROM posts -0 rows in set. Elapsed: 146.471 sec. Processed 59.82 million rows, 83.82 GB (408.40 thousand rows/s., 572.25 MB/s.) +0 строк в наборе. Прошло: 146.471 сек. Обработано 59.82 млн строк, 83.82 ГБ (408.40 тыс. строк/с., 572.25 МБ/с.) ``` -Мы не сохраняем никаких значений null в нашей новой схеме. Приведенная выше вставка неявно преобразует их в значения по умолчанию для соответствующих типов — 0 для целых чисел и пустое значение для строк. ClickHouse также автоматически преобразует любые числовые значения в их целевую точность. -Первичные (сортировочные) ключи в ClickHouse -Пользователи, пришедшие из баз данных OLTP, часто ищут эквивалентную концепцию в ClickHouse. +Мы не сохраняем никаких значений `null` в нашей новой схеме. Приведённая выше операция вставки неявно преобразует их в значения по умолчанию для соответствующих типов — 0 для целых чисел и пустое значение для строк. ClickHouse также автоматически приводит любые числовые значения к их целевой точности. +Primary (Ordering) Keys в ClickHouse +Пользователи, приходящие из OLTP-баз данных, часто ищут эквивалентный механизм в ClickHouse. -## Выбор ключа сортировки {#choosing-an-ordering-key} -В масштабе, в котором часто используется ClickHouse, эффективность памяти и диска имеет первостепенное значение. Данные записываются в таблицы ClickHouse фрагментами, известными как части (parts), с правилами, применяемыми для слияния частей в фоновом режиме. В ClickHouse каждая часть имеет свой собственный первичный индекс. Когда части объединяются, первичные индексы объединенной части также объединяются. Первичный индекс для части имеет одну запись индекса на группу строк — этот метод называется разреженным индексированием. +## Выбор ключа сортировки - +В масштабах, в которых часто используется ClickHouse, эффективность использования памяти и диска имеет первостепенное значение. Данные записываются в таблицы ClickHouse блоками, называемыми частями (parts), к которым в фоновом режиме применяются правила слияния. В ClickHouse у каждой части есть свой собственный первичный индекс. Когда части сливаются, первичные индексы результирующей части также сливаются. Первичный индекс для части содержит одну запись индекса на группу строк — этот подход называется разреженным индексированием (sparse indexing). -Выбранный ключ в ClickHouse будет определять не только индекс, но и порядок, в котором данные записываются на диск. Из-за этого он может значительно влиять на уровни сжатия, что, в свою очередь, может влиять на производительность запросов. Ключ сортировки, который заставляет значения большинства столбцов записываться в смежном порядке, позволит выбранному алгоритму сжатия (и кодекам) сжимать данные более эффективно. + -> Все столбцы в таблице будут отсортированы на основе значения указанного ключа сортировки, независимо от того, включены ли они в сам ключ. Например, если `CreationDate` используется в качестве ключа, порядок значений во всех других столбцах будет соответствовать порядку значений в столбце `CreationDate`. Можно указать несколько ключей сортировки — это будет упорядочено с той же семантикой, что и предложение `ORDER BY` в запросе `SELECT`. +Выбранный ключ в ClickHouse будет определять не только индекс, но и порядок, в котором данные записываются на диск. Из‑за этого он может существенно влиять на уровень сжатия, что, в свою очередь, влияет на производительность запросов. Ключ сортировки, который приводит к тому, что значения большинства столбцов записываются в последовательном порядке, позволит выбранному алгоритму сжатия (и кодекам) более эффективно сжимать данные. -Можно применить некоторые простые правила, чтобы помочь выбрать ключ сортировки. Следующие правила иногда могут конфликтовать, поэтому рассматривайте их по порядку. Пользователи могут определить несколько ключей из этого процесса, при этом обычно достаточно 4-5: +> Все столбцы в таблице будут отсортированы на основе значения указанного ключа сортировки, независимо от того, включены ли они в сам ключ. Например, если в качестве ключа используется `CreationDate`, порядок значений во всех остальных столбцах будет соответствовать порядку значений в столбце `CreationDate`. Можно указать несколько ключей сортировки — сортировка будет выполняться с той же семантикой, что и в предложении `ORDER BY` запроса `SELECT`. -- Выберите столбцы, которые соответствуют вашим общим фильтрам. Если столбец часто используется в предложениях `WHERE`, отдайте приоритет включению их в ваш ключ над теми, которые используются реже. -- Предпочитайте столбцы, которые помогают исключить большой процент от общего количества строк при фильтрации, тем самым уменьшая объем данных, которые необходимо прочитать. -- Предпочитайте столбцы, которые, вероятно, сильно коррелируют с другими столбцами в таблице. Это поможет обеспечить смежное хранение этих значений, улучшая сжатие. -- Операции `GROUP BY` и `ORDER BY` для столбцов в ключе сортировки могут быть более эффективными с точки зрения памяти. +Можно применить несколько простых правил, чтобы помочь выбрать ключ сортировки. Следующие правила иногда могут конфликтовать, поэтому учитывайте их по порядку. Пользователи могут определить несколько ключей в результате этого процесса, при этом обычно достаточно 4–5: -При определении подмножества столбцов для ключа сортировки объявите столбцы в определенном порядке. Этот порядок может существенно повлиять как на эффективность фильтрации по столбцам вторичного ключа в запросах, так и на коэффициент сжатия файлов данных таблицы. В общем, лучше всего упорядочивать ключи в порядке возрастания кардинальности. Это следует сбалансировать с тем фактом, что фильтрация по столбцам, которые появляются позже в ключе сортировки, будет менее эффективной, чем фильтрация по тем, которые появляются раньше в кортеже. Сбалансируйте эти поведения и рассмотрите свои шаблоны доступа (и, что наиболее важно, тестируйте варианты). +* Выбирайте столбцы, которые соответствуют вашим типичным фильтрам. Если столбец часто используется в предложениях `WHERE`, включайте его в ключ с более высоким приоритетом по сравнению с теми, которые используются реже. + Предпочтительнее столбцы, которые при фильтрации позволяют исключить большой процент от общего числа строк, тем самым уменьшая объем данных, которые необходимо прочитать. +* Предпочитайте столбцы, которые, скорее всего, будут сильно коррелировать с другими столбцами в таблице. Это поможет обеспечить также последовательное хранение этих значений, улучшая сжатие. + Операции `GROUP BY` и `ORDER BY` для столбцов, входящих в ключ сортировки, могут выполняться более эффективно по памяти. -### Пример {#example} +При выборе подмножества столбцов для ключа сортировки указывайте столбцы в определенном порядке. Этот порядок может существенно повлиять как на эффективность фильтрации по столбцам вторичного ключа в запросах, так и на коэффициент сжатия файлов данных таблицы. В общем случае лучше располагать ключи в порядке возрастания их кардинальности. Это следует сбалансировать с тем фактом, что фильтрация по столбцам, которые находятся позже в ключе сортировки, будет менее эффективной, чем по тем, которые находятся раньше в кортеже. Сбалансируйте эти эффекты и учитывайте ваши паттерны доступа (и самое важное — тестируйте варианты). -Применяя приведенные выше рекомендации к нашей таблице `posts`, предположим, что наши пользователи хотят выполнять аналитику с фильтрацией по дате и типу поста, например: +### Пример -"Какие вопросы получили больше всего комментариев за последние 3 месяца". +Применяя приведенные выше рекомендации к нашей таблице `posts`, предположим, что пользователи хотят выполнять аналитику с фильтрацией по дате и типу поста, например: + +«Какие вопросы получили больше всего комментариев за последние 3 месяца». + +Запрос для этого вопроса, использующий нашу предыдущую таблицу `posts_v2` с оптимизированными типами, но без ключа сортировки: -Запрос для этого вопроса с использованием нашей предыдущей таблицы `posts_v2` с оптимизированными типами, но без ключа сортировки: ```sql SELECT Id, @@ -252,20 +269,22 @@ ORDER BY CommentCount DESC LIMIT 3 ┌───────Id─┬─Title─────────────────────────────────────────────────────────────┬─CommentCount─┐ -│ 78203063 │ How to avoid default initialization of objects in std::vector? │ 74 │ -│ 78183948 │ About memory barrier │ 52 │ -│ 77900279 │ Speed Test for Buffer Alignment: IBM's PowerPC results vs. my CPU │ 49 │ +│ 78203063 │ Как избежать инициализации объектов по умолчанию в std::vector? │ 74 │ +│ 78183948 │ О барьере памяти │ 52 │ +│ 77900279 │ Тест скорости выравнивания буфера: результаты IBM PowerPC по сравнению с моим CPU │ 49 │ └──────────┴───────────────────────────────────────────────────────────────────┴────────────── -10 rows in set. Elapsed: 0.070 sec. Processed 59.82 million rows, 569.21 MB (852.55 million rows/s., 8.11 GB/s.) -Peak memory usage: 429.38 MiB. +10 строк в наборе. Прошло: 0.070 с. Обработано 59.82 миллиона строк, 569.21 МБ (852.55 миллиона строк/с, 8.11 ГБ/с.) +Пиковое потребление памяти: 429.38 MiB. ``` -> Запрос здесь очень быстрый, даже несмотря на то, что все 60 миллионов строк были линейно просканированы — ClickHouse просто быстрый :) Вам придется довериться нам, что ключи сортировки стоят того в масштабе ТБ и ПБ! +> Этот запрос выполняется очень быстро, даже несмотря на то, что все 60 млн строк были просканированы линейно — ClickHouse просто быстрый :) Поверьте нам, задание ключей сортировки того стоит на масштабах терабайтов и петабайтов! Давайте выберем столбцы `PostTypeId` и `CreationDate` в качестве наших ключей сортировки. -Возможно, в нашем случае мы ожидаем, что пользователи всегда будут фильтровать по `PostTypeId`. У него кардинальность 8, и он представляет собой логический выбор для первой записи в нашем ключе сортировки. Признавая, что фильтрации с детализацией до даты, вероятно, будет достаточно (это все равно принесет пользу фильтрам datetime), мы используем `toDate(CreationDate)` в качестве 2-го компонента нашего ключа. Это также создаст меньший индекс, так как дата может быть представлена 16 битами, ускоряя фильтрацию. Наша последняя запись ключа — это `CommentCount` для помощи в поиске постов с наибольшим количеством комментариев (окончательная сортировка). + +Возможно, в нашем случае мы рассчитываем, что пользователи всегда будут фильтровать по `PostTypeId`. Его кардинальность равна 8, и это логичный выбор для первого элемента в нашем ключе сортировки. Учитывая, что фильтрации по дате с нужной гранулярностью, вероятно, будет достаточно (она по-прежнему будет полезна и для фильтров по datetime), мы используем `toDate(CreationDate)` как 2-й компонент нашего ключа. Это также приведёт к меньшему индексу, поскольку дату можно представить 16-битным числом, что ускорит фильтрацию. Последний элемент ключа — `CommentCount`, чтобы упростить поиск наиболее комментируемых постов (окончательная сортировка). + ```sql CREATE TABLE posts_v3 ( @@ -294,16 +313,16 @@ CREATE TABLE posts_v3 ) ENGINE = MergeTree ORDER BY (PostTypeId, toDate(CreationDate), CommentCount) -COMMENT 'Ключ сортировки' +COMMENT 'Ключ упорядочивания' --заполнение таблицы из существующей таблицы INSERT INTO posts_v3 SELECT * FROM posts_v2 -0 rows in set. Elapsed: 158.074 sec. Processed 59.82 million rows, 76.21 GB (378.42 thousand rows/s., 482.14 MB/s.) -Peak memory usage: 6.41 GiB. +Выбрано 0 строк. Затрачено: 158.074 сек. Обработано 59.82 млн строк, 76.21 ГБ (378.42 тыс. строк/с., 482.14 МБ/с.) +Пиковое использование памяти: 6.41 ГиБ. -Наш предыдущий запрос улучшает время отклика запроса более чем в 3 раза: +Данный запрос улучшает время отклика более чем в 3 раза: SELECT Id, @@ -314,28 +333,29 @@ WHERE (CreationDate >= '2024-01-01') AND (PostTypeId = 'Question') ORDER BY CommentCount DESC LIMIT 3 -10 rows in set. Elapsed: 0.020 sec. Processed 290.09 thousand rows, 21.03 MB (14.65 million rows/s., 1.06 GB/s.) +Выбрано 10 строк. Затрачено: 0.020 сек. Обработано 290.09 тыс. строк, 21.03 МБ (14.65 млн строк/с., 1.06 ГБ/с.) ``` -Для пользователей, заинтересованных в улучшениях сжатия, достигнутых за счет использования конкретных типов и соответствующих ключей сортировки, см. [Сжатие в ClickHouse](/data-compression/compression-in-clickhouse). Если пользователям необходимо дополнительно улучшить сжатие, мы также рекомендуем раздел [Выбор правильного кодека сжатия столбцов](/data-compression/compression-in-clickhouse#choosing-the-right-column-compression-codec). +Пользователи, которых интересуют улучшения сжатия, достигаемые за счёт использования определённых типов и правильных ключей упорядочивания, могут ознакомиться с разделом [Сжатие в ClickHouse](/data-compression/compression-in-clickhouse). Если необходимо ещё больше улучшить сжатие, мы также рекомендуем раздел [Выбор подходящего кодека сжатия для столбца](/data-compression/compression-in-clickhouse#choosing-the-right-column-compression-codec). + -## Далее: Техники моделирования данных {#next-data-modeling-techniques} +## Далее: техники моделирования данных {#next-data-modeling-techniques} -До сих пор мы перенесли только одну таблицу. Хотя это позволило нам познакомиться с некоторыми основными концепциями ClickHouse, большинство схем, к сожалению, не так просты. +До сих пор мы мигрировали только одну таблицу. Хотя это позволило нам ввести несколько основных концепций ClickHouse, большинство схем, к сожалению, не настолько просты. -В других руководствах, перечисленных ниже, мы рассмотрим ряд техник для реструктуризации нашей более широкой схемы для оптимального запроса ClickHouse. В ходе этого процесса мы стремимся к тому, чтобы `Posts` оставался нашей центральной таблицей, через которую выполняется большинство аналитических запросов. Хотя другие таблицы все еще могут запрашиваться изолированно, мы предполагаем, что большая часть аналитики должна выполняться в контексте `posts`. +В других руководствах, перечисленных ниже, мы рассмотрим ряд техник по реструктуризации более широкой схемы данных для оптимальных запросов в ClickHouse. На протяжении этого процесса мы стремимся к тому, чтобы `Posts` оставалась нашей центральной таблицей, через которую выполняется большинство аналитических запросов. Хотя к другим таблицам по‑прежнему можно обращаться изолированно, мы предполагаем, что основная часть аналитики будет выполняться в контексте `Posts`. -> В этом разделе мы используем оптимизированные варианты наших других таблиц. Хотя мы предоставляем схемы для них, для краткости мы опускаем принятые решения. Они основаны на правилах, описанных ранее, и мы оставляем вывод решений читателю. +> В этом разделе мы используем оптимизированные варианты остальных наших таблиц. Хотя мы приводим их схемы, ради краткости мы опускаем обоснование принятых решений. Они основаны на правилах, описанных ранее, а вывод этих решений мы оставляем на усмотрение читателя. -Следующие подходы направлены на минимизацию необходимости использования JOIN для оптимизации чтения и повышения производительности запросов. Хотя JOIN полностью поддерживаются в ClickHouse, мы рекомендуем использовать их умеренно (2-3 таблицы в запросе JOIN — это нормально) для достижения оптимальной производительности. +Все указанные ниже подходы нацелены на минимизацию необходимости использования JOIN для оптимизации чтения и повышения производительности запросов. Хотя операции JOIN полностью поддерживаются в ClickHouse, мы рекомендуем использовать их умеренно (JOIN‑запросов с 2–3 таблицами достаточно), чтобы обеспечить оптимальную производительность. -> ClickHouse не имеет понятия внешних ключей. Это не запрещает соединения, но означает, что ссылочная целостность остается на усмотрение пользователя для управления на уровне приложения. В системах OLAP, таких как ClickHouse, целостность данных часто управляется на уровне приложения или во время процесса приема данных, а не принудительно применяется базой данных, где это создает значительные накладные расходы. Этот подход обеспечивает большую гибкость и более быструю вставку данных. Это соответствует фокусу ClickHouse на скорость и масштабируемость запросов чтения и вставки с очень большими наборами данных. +> В ClickHouse нет понятия внешних ключей. Это не запрещает выполнение JOIN, но означает, что управление ссылочной целостностью возлагается на пользователя на уровне приложения. В OLAP‑системах, таких как ClickHouse, целостность данных часто обеспечивается на уровне приложения или в процессе ингестии данных, а не принудительно контролируется самой базой данных, где это влечёт значительные накладные расходы. Такой подход обеспечивает большую гибкость и более быструю вставку данных. Это соответствует фокусу ClickHouse на скорость и масштабируемость запросов на чтение и вставку для очень больших наборов данных. -Чтобы минимизировать использование Join во время выполнения запросов, у пользователей есть несколько инструментов/подходов: +Чтобы минимизировать использование JOIN во время выполнения запроса, у пользователей есть несколько инструментов и подходов: -- [**Денормализация данных**](/data-modeling/denormalization) - Денормализация данных путем объединения таблиц и использования сложных типов для отношений не 1:1. Это часто включает перенос любых соединений с времени запроса на время вставки. -- [**Словари**](/dictionary) - Специфическая функция ClickHouse для обработки прямых соединений и поиска по ключу-значению. -- [**Инкрементальные материализованные представления**](/materialized-view/incremental-materialized-view) - Функция ClickHouse для переноса стоимости вычисления с времени запроса на время вставки, включая возможность инкрементного вычисления агрегированных значений. -- [**Обновляемые материализованные представления**](/materialized-view/refreshable-materialized-view) - Подобно материализованным представлениям, используемым в других продуктах баз данных, это позволяет периодически вычислять результаты запроса и кэшировать результат. +- [**Денормализация данных**](/data-modeling/denormalization) — денормализуйте данные путём объединения таблиц и использования сложных типов для отношений, отличных от связи 1:1. Часто это включает перенос всех необходимых JOIN‑операций с момента выполнения запроса на момент вставки. +- [**Dictionaries**](/dictionary) — специфичная для ClickHouse функциональность для обработки прямых JOIN и поиска по ключу. +- [**Incremental Materialized Views**](/materialized-view/incremental-materialized-view) — функциональность ClickHouse для переноса стоимости вычислений с момента выполнения запроса на момент вставки, включая возможность инкрементального вычисления агрегированных значений. +- [**Refreshable Materialized Views**](/materialized-view/refreshable-materialized-view) — аналогично материализованным представлениям, используемым в других СУБД, позволяет периодически вычислять результаты запроса и кэшировать результат. -Мы рассматриваем каждый из этих подходов в каждом руководстве, подчеркивая, когда каждый из них уместен, с примером, показывающим, как его можно применить для решения вопросов для набора данных Stack Overflow. \ No newline at end of file +Мы рассматриваем каждый из этих подходов в отдельных руководствах, показывая, когда каждый из них уместен, с примером того, как его можно применить для решения задач по набору данных Stack Overflow. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/development/developer-instruction.md b/i18n/ru/docusaurus-plugin-content-docs/current/development/developer-instruction.md index b87e28ac2b4..17d646c794f 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/development/developer-instruction.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/development/developer-instruction.md @@ -1,5 +1,5 @@ --- -description: 'Предварительные требования и инструкции по настройке среды разработки ClickHouse' +description: 'Предварительные требования и инструкции по настройке для разработки с использованием ClickHouse' sidebar_label: 'Предварительные требования' sidebar_position: 5 slug: /development/developer-instruction @@ -7,46 +7,42 @@ title: 'Предварительные требования для разраб doc_type: 'guide' --- - - # Предварительные требования -ClickHouse можно собирать под Linux, FreeBSD и macOS. -Если вы используете Windows, вы всё равно можете собирать ClickHouse в виртуальной машине с Linux, например, в [VirtualBox](https://www.virtualbox.org/) с Ubuntu. - - +ClickHouse можно собрать под Linux, FreeBSD и macOS. +Если вы используете Windows, вы всё равно можете собрать ClickHouse в виртуальной машине с установленным Linux, например в [VirtualBox](https://www.virtualbox.org/) с Ubuntu. ## Создание репозитория на GitHub -Чтобы начать вносить вклад в разработку ClickHouse, вам понадобится учетная запись на [GitHub](https://www.github.com/). -Также сгенерируйте локально SSH-ключ (если у вас его ещё нет) и загрузите открытый ключ в GitHub, так как это является необходимым условием для отправки патчей. +Чтобы начать разрабатывать для ClickHouse, вам понадобится аккаунт на [GitHub](https://www.github.com/). +Также сгенерируйте локально SSH‑ключ (если у вас его ещё нет) и загрузите открытый ключ в GitHub, так как это является необходимым условием для отправки патчей. Затем форкните [репозиторий ClickHouse](https://github.com/ClickHouse/ClickHouse/) в свой личный аккаунт, нажав кнопку «fork» в правом верхнем углу. -Чтобы внести изменения, например, исправление ошибки или новую функциональность, сначала закоммитьте свои изменения в ветку в вашем форке, затем создайте «Pull Request» с этими изменениями в основной репозиторий. +Чтобы внести изменения — например, исправление ошибки или новую функциональность, — сначала закоммитьте изменения в ветку в своём форке, затем создайте Pull Request с этими изменениями в основной репозиторий. -Для работы с Git-репозиториями установите Git. Например, в Ubuntu выполните: +Для работы с Git‑репозиториями установите Git. Например, в Ubuntu выполните: ```sh sudo apt update sudo apt install git ``` -Шпаргалка по Git доступна [здесь](https://education.github.com/git-cheat-sheet-education.pdf). +Шпаргалку по Git можно найти [здесь](https://education.github.com/git-cheat-sheet-education.pdf). Подробное руководство по Git доступно [здесь](https://git-scm.com/book/en/v2). -## Клонируйте репозиторий на свою локальную машину +## Клонируйте репозиторий на рабочую машину -Сначала скачайте исходные файлы на локальную машину, то есть клонируйте репозиторий: +Сначала скачайте исходные файлы на рабочую машину, то есть клонируйте репозиторий: ```sh -git clone git@github.com:your_github_username/ClickHouse.git # замените заполнитель своим именем пользователя GitHub +git clone git@github.com:your_github_username/ClickHouse.git # замените your_github_username на ваше имя пользователя GitHub cd ClickHouse ``` Эта команда создаёт директорию `ClickHouse/`, содержащую исходный код, тесты и другие файлы. -Вы можете указать собственную директорию для клонирования после URL, но важно, чтобы этот путь не содержал пробелов, так как это может привести к сбою сборки на более позднем этапе. +Вы можете указать собственный каталог для клонирования после URL, но важно, чтобы этот путь не содержал пробелов, так как это может привести к сбою сборки в дальнейшем. Git-репозиторий ClickHouse использует подмодули для подключения сторонних библиотек. Подмодули по умолчанию не клонируются. @@ -54,9 +50,9 @@ Git-репозиторий ClickHouse использует подмодули д * запустить `git clone` с опцией `--recurse-submodules`, -* если `git clone` запущен без `--recurse-submodules`, выполнить `git submodule update --init --jobs `, чтобы явно клонировать все подмодули. (`` можно, например, установить в `12`, чтобы параллелизировать загрузку.) +* если `git clone` выполняется без `--recurse-submodules`, запустить `git submodule update --init --jobs `, чтобы явно клонировать все подмодули. (`` можно, например, установить в `12`, чтобы распараллелить загрузку.) -* если `git clone` запущен без `--recurse-submodules` и вы хотите использовать [sparse](https://github.blog/2020-01-17-bring-your-monorepo-down-to-size-with-sparse-checkout/) и [shallow](https://github.blog/2020-12-21-get-up-to-speed-with-partial-clone-and-shallow-clone/) клонирование подмодулей, чтобы исключить ненужные файлы и историю в подмодулях и сэкономить место (около 5 GB вместо примерно 15 GB), выполните `./contrib/update-submodules.sh`. Этот вариант используется в CI, но не рекомендуется для локальной разработки, так как делает работу с подмодулями менее удобной и более медленной. +* если `git clone` выполняется без `--recurse-submodules` и вы хотите использовать [shallow](https://github.blog/2020-12-21-get-up-to-speed-with-partial-clone-and-shallow-clone/) клонирование подмодулей, чтобы не загружать историю в подмодулях и сэкономить место, запустите `./contrib/update-submodules.sh`. Эта альтернатива используется в CI, но не рекомендуется для локальной разработки, так как делает работу с подмодулями менее удобной и более медленной. Чтобы проверить состояние Git-подмодулей, выполните `git submodule status`. @@ -70,36 +66,36 @@ fatal: Could not read from remote repository. и репозиторий существует. ``` -Отсутствуют SSH-ключи для подключения к GitHub. +SSH-ключи для подключения к GitHub не найдены. Обычно эти ключи находятся в `~/.ssh`. -Чтобы SSH-ключи были приняты, необходимо добавить их в настройках GitHub. +Чтобы SSH-ключи были приняты, нужно загрузить их в настройках GitHub. -Вы также можете клонировать репозиторий по протоколу HTTPS: +Вы также можете клонировать репозиторий через HTTPS: ```sh git clone https://github.com/ClickHouse/ClickHouse.git ``` -Однако это не позволит вам отправлять свои изменения на сервер. -Вы всё равно можете временно использовать его и позже добавить SSH-ключи, заменив удалённый URL репозитория с помощью команды `git remote`. +Однако это не позволит отправлять изменения на сервер. +Вы по-прежнему можете временно так работать и добавить SSH-ключи позже, заменив адрес удалённого репозитория с помощью команды `git remote`. -Вы также можете добавить оригинальный URL репозитория ClickHouse в свой локальный репозиторий, чтобы получать оттуда обновления: +Вы также можете добавить оригинальный адрес репозитория ClickHouse в локальный репозиторий, чтобы получать из него обновления: ```sh git remote add upstream git@github.com:ClickHouse/ClickHouse.git ``` -После успешного выполнения этой команды вы сможете получать обновления из основного репозитория ClickHouse, выполняя `git pull upstream master`. +После успешного выполнения этой команды вы сможете получать обновления из основного репозитория ClickHouse, выполнив `git pull upstream master`. :::tip -Пожалуйста, не запускайте просто `git push`, иначе вы можете отправить изменения в неправильный удалённый репозиторий и/или в неправильную ветку. +Пожалуйста, не используйте просто `git push`: так вы можете отправить изменения не в тот удалённый репозиторий и/или не в ту ветку. Лучше явно указывать имена удалённого репозитория и ветки, например: `git push origin my_branch_name`. ::: ## Написание кода {#writing-code} -Ниже вы найдёте несколько полезных ссылок, которые могут пригодиться при написании кода для ClickHouse: +Ниже приведены несколько ссылок, которые могут быть полезны при написании кода для ClickHouse: - [Архитектура ClickHouse](/development/architecture/). - [Руководство по стилю кода](/development/style/). @@ -109,53 +105,47 @@ git remote add upstream git@github.com:ClickHouse/ClickHouse.git ### IDE {#ide} -[Visual Studio Code](https://code.visualstudio.com/) и [Neovim](https://neovim.io/) — два варианта, которые хорошо зарекомендовали себя для разработки ClickHouse. Если вы используете VS Code, мы рекомендуем установить [расширение clangd](https://marketplace.visualstudio.com/items?itemName=llvm-vs-code-extensions.vscode-clangd) вместо IntelliSense, так как оно значительно быстрее и производительнее. +[Visual Studio Code](https://code.visualstudio.com/) и [Neovim](https://neovim.io/) — два проверенных варианта, которые хорошо подходят для разработки ClickHouse. Если вы используете VS Code, мы рекомендуем установить расширение [clangd](https://marketplace.visualstudio.com/items?itemName=llvm-vs-code-extensions.vscode-clangd) вместо IntelliSense, так как оно значительно быстрее и эффективнее. -[CLion](https://www.jetbrains.com/clion/) — ещё одна хорошая альтернатива. Однако на крупных проектах, таких как ClickHouse, он может работать медленнее. Несколько моментов, которые стоит учитывать при использовании CLion: +[CLion](https://www.jetbrains.com/clion/) — ещё одна отличная альтернатива. Однако он может работать медленнее на крупных проектах, таких как ClickHouse. Несколько моментов, которые стоит учитывать при использовании CLion: -- CLion создаёт собственный каталог `build` и автоматически выбирает `debug` в качестве типа сборки -- используется версия CMake, определённая в CLion, а не установленная вами -- CLion будет использовать `make` для выполнения задач сборки вместо `ninja` (это ожидаемое поведение) +- CLion самостоятельно создаёт каталог `build` и автоматически выбирает `debug` как тип сборки +- Он использует версию CMake, определённую в CLion, а не установленную вами +- CLion будет использовать `make` для выполнения задач сборки вместо `ninja` (это нормальное поведение) Другие IDE, которые вы можете использовать, — [Sublime Text](https://www.sublimetext.com/), [Qt Creator](https://www.qt.io/product/development-tools) или [Kate](https://kate-editor.org/). - - ## Создание pull request {#create-a-pull-request} -Перейдите к вашему форк-репозиторию в интерфейсе GitHub. -Если вы разрабатывали в отдельной ветке, вам нужно выбрать именно эту ветку. -На экране будет кнопка «Pull request». -По сути это означает «создать запрос на принятие моих изменений в основной репозиторий». +Перейдите к своему fork‑репозиторию в интерфейсе GitHub. +Если вы разрабатывали в отдельной ветке, выберите эту ветку. +На экране будет отображаться кнопка «Pull request». +По сути, это означает «создать запрос на принятие моих изменений в основной репозиторий». -Pull request можно создать, даже если работа еще не завершена. +Pull request можно создать даже в том случае, если работа ещё не завершена. В этом случае, пожалуйста, добавьте слово «WIP» (work in progress) в начало заголовка, его можно будет изменить позже. Это полезно для совместного ревью и обсуждения изменений, а также для запуска всех доступных тестов. -Важно, чтобы вы добавили краткое описание ваших изменений — позже оно будет использовано для формирования списка изменений (changelog) релиза. +Важно, чтобы вы добавили краткое описание своих изменений — позже оно будет использовано для формирования журнала изменений релиза. -Тестирование начнется, как только сотрудники ClickHouse пометят ваш PR меткой «can be tested». -Результаты некоторых первичных проверок (например, стиля кода) появятся в течение нескольких минут. -Результаты проверки сборки будут доступны в течение получаса. -Основной набор тестов сообщит о результатах примерно в течение часа. +Тестирование начнётся, как только сотрудники ClickHouse пометят ваш PR меткой «can be tested». +Результаты первых проверок (например, code style) появятся в течение нескольких минут. +Результаты проверки сборки поступят примерно через полчаса. +Основной набор тестов завершится примерно через час. Система подготовит отдельные бинарные сборки ClickHouse для вашего pull request. Чтобы получить эти сборки, нажмите ссылку «Details» рядом с пунктом «Builds» в списке проверок. -Там вы найдете прямые ссылки на собранные .deb-пакеты ClickHouse, которые вы можете развернуть даже на своих production-серверах (если не боитесь). - - +Там вы найдёте прямые ссылки на собранные .deb‑пакеты ClickHouse, которые вы можете развернуть даже на своих production‑серверах (если не боитесь). -## Написание документации {#write-documentation} +## Создавайте документацию -Каждый pull request, добавляющий новую функцию, должен сопровождаться соответствующей документацией. +Каждый pull request, который добавляет новую функциональность, должен сопровождаться соответствующей документацией. Если вы хотите предварительно просмотреть изменения в документации, инструкции по локальной сборке страницы документации доступны в файле README.md [здесь](https://github.com/ClickHouse/clickhouse-docs). При добавлении новой функции в ClickHouse вы можете использовать приведённый ниже шаблон в качестве ориентира: - - ````markdown # newFunctionName -Краткое описание функции. Здесь следует кратко описать её назначение и типичный сценарий использования. +Краткое описание функции. Должно кратко описывать её назначение и типичный сценарий использования. **Синтаксис** @@ -167,29 +157,29 @@ newFunctionName(arg1, arg2[, arg3]) - `arg1` — Описание аргумента. [DataType](../data-types/float.md) - `arg2` — Описание аргумента. [DataType](../data-types/float.md) -- `arg3` — Описание необязательного аргумента. [DataType](../data-types/float.md) +- `arg3` — Описание необязательного аргумента (необязательный). [DataType](../data-types/float.md) -**Особенности реализации** +**Детали реализации** -Описание деталей реализации, если это применимо. +Описание деталей реализации, если применимо. **Возвращаемое значение** -- Возвращает {укажите, что именно возвращает функция}. [DataType](../data-types/float.md) +- Возвращает {укажите, что возвращает функция}. [DataType](../data-types/float.md) **Пример** Запрос: \```sql -SELECT 'укажите здесь пример запроса'; +SELECT 'write your example query here'; \``` -Ответ: +Результат: \```response ┌───────────────────────────────────┐ -│ результат запроса │ +│ the result of the query │ └───────────────────────────────────┘ \``` ```` @@ -197,10 +187,10 @@ SELECT 'укажите здесь пример запроса'; ## Использование тестовых данных -Разработка ClickHouse часто требует загрузки реалистичных наборов данных. +При разработке под ClickHouse часто требуется загрузка реалистичных наборов данных. Это особенно важно для тестирования производительности. -Мы подготовили специальный набор обезличенных данных по веб‑аналитике. -Для него требуется дополнительно около 3 ГБ свободного дискового пространства. +У нас есть специально подготовленный набор анонимизированных данных веб‑аналитики. +Для него требуется около 3 ГБ свободного дискового пространства. ```sh sudo apt install wget xz-utils @@ -214,24 +204,20 @@ SELECT 'укажите здесь пример запроса'; clickhouse-client ``` -В клиенте clickhouse-client: +В clickhouse-client: + ```sql CREATE DATABASE IF NOT EXISTS test; -``` - CREATE TABLE test.hits ( 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.Key1` Array(String), `ParsedParams.Key2` Array(String), `ParsedParams.Key3` Array(String), `ParsedParams.Key4` Array(String), `ParsedParams.Key5` Array(String), `ParsedParams.ValueDouble` Array(Float64), IslandID FixedString(16), RequestNum UInt32, RequestTry UInt8) ENGINE = MergeTree PARTITION BY toYYYYMM(EventDate) SAMPLE BY intHash32(UserID) ORDER BY (CounterID, EventDate, intHash32(UserID), EventTime); - - -CREATE TABLE test.visits ( CounterID UInt32, StartDate Date, Sign Int8, IsNew UInt8, VisitID UInt64, UserID UInt64, StartTime DateTime, Duration UInt32, UTCStartTime DateTime, PageViews Int32, Hits Int32, IsBounce UInt8, Referer String, StartURL String, RefererDomain String, StartURLDomain String, EndURL String, LinkURL String, IsDownload UInt8, TraficSourceID Int8, SearchEngineID UInt16, SearchPhrase String, AdvEngineID UInt8, PlaceID Int32, RefererCategories Array(UInt16), URLCategories Array(UInt16), URLRegions Array(UInt32), RefererRegions Array(UInt32), IsYandex UInt8, GoalReachesDepth Int32, GoalReachesURL Int32, GoalReachesAny Int32, SocialSourceNetworkID UInt8, SocialSourcePage String, MobilePhoneModel String, ClientEventTime DateTime, RegionID UInt32, ClientIP UInt32, ClientIP6 FixedString(16), RemoteIP UInt32, RemoteIP6 FixedString(16), IPNetworkID UInt32, SilverlightVersion3 UInt32, CodeVersion UInt32, ResolutionWidth UInt16, ResolutionHeight UInt16, UserAgentMajor UInt16, UserAgentMinor UInt16, WindowClientWidth UInt16, WindowClientHeight UInt16, SilverlightVersion2 UInt8, SilverlightVersion4 UInt16, FlashVersion3 UInt16, FlashVersion4 UInt16, ClientTimeZone Int16, OS UInt8, UserAgent UInt8, ResolutionDepth UInt8, FlashMajor UInt8, FlashMinor UInt8, NetMajor UInt8, NetMinor UInt8, MobilePhone UInt8, SilverlightVersion1 UInt8, Age UInt8, Sex UInt8, Income UInt8, JavaEnable UInt8, CookieEnable UInt8, JavascriptEnable UInt8, IsMobile UInt8, BrowserLanguage UInt16, BrowserCountry UInt16, Interests UInt16, Robotness UInt8, GeneralInterests Array(UInt16), Params Array(String), `Goals.ID` Array(UInt32), `Goals.Serial` Array(UInt32), `Goals.EventTime` Array(DateTime), `Goals.Price` Array(Int64), `Goals.OrderID` Array(String), `Goals.CurrencyID` Array(UInt32), WatchIDs Array(UInt64), ParamSumPrice Int64, ParamCurrency FixedString(3), ParamCurrencyID UInt16, ClickLogID UInt64, ClickEventID Int32, ClickGoodEvent Int32, ClickEventTime DateTime, ClickPriorityID Int32, ClickPhraseID Int32, ClickPageID Int32, ClickPlaceID Int32, ClickTypeID Int32, ClickResourceID Int32, ClickCost UInt32, ClickClientIP UInt32, ClickDomainID UInt32, ClickURL String, ClickAttempt UInt8, ClickOrderID UInt32, ClickBannerID UInt32, ClickMarketCategoryID UInt32, ClickMarketPP UInt32, ClickMarketCategoryName String, ClickMarketPPName String, ClickAWAPSCampaignName String, ClickPageName String, ClickTargetType UInt16, ClickTargetPhraseID UInt64, ClickContextType UInt8, ClickSelectType Int8, ClickOptions String, ClickGroupBannerID Int32, OpenstatServiceName String, OpenstatCampaignID String, OpenstatAdID String, OpenstatSourceID String, UTMSource String, UTMMedium String, UTMCampaign String, UTMContent String, UTMTerm String, FromTag String, HasGCLID UInt8, FirstVisit DateTime, PredLastVisit Date, LastVisit Date, TotalVisits UInt32, `TraficSource.ID` Array(Int8), `TraficSource.SearchEngineID` Array(UInt16), `TraficSource.AdvEngineID` Array(UInt8), `TraficSource.PlaceID` Array(UInt16), `TraficSource.SocialSourceNetworkID` Array(UInt8), `TraficSource.Domain` Array(String), `TraficSource.SearchPhrase` Array(String), `TraficSource.SocialSourcePage` Array(String), Attendance FixedString(16), CLID UInt32, YCLID UInt64, NormalizedRefererHash UInt64, SearchPhraseHash UInt64, RefererDomainHash UInt64, NormalizedStartURLHash UInt64, StartURLDomainHash UInt64, NormalizedEndURLHash UInt64, TopLevelDomain UInt64, URLScheme UInt64, OpenstatServiceNameHash UInt64, OpenstatCampaignIDHash UInt64, OpenstatAdIDHash UInt64, OpenstatSourceIDHash UInt64, UTMSourceHash UInt64, UTMMediumHash UInt64, UTMCampaignHash UInt64, UTMContentHash UInt64, UTMTermHash UInt64, FromHash UInt64, WebVisorEnabled UInt8, WebVisorActivity UInt32, `ParsedParams.Key1` Array(String), `ParsedParams.Key2` Array(String), `ParsedParams.Key3` Array(String), `ParsedParams.Key4` Array(String), `ParsedParams.Key5` Array(String), `ParsedParams.ValueDouble` Array(Float64), `Market.Type` Array(UInt8), `Market.GoalID` Array(UInt32), `Market.OrderID` Array(String), `Market.OrderPrice` Array(Int64), `Market.PP` Array(UInt32), `Market.DirectPlaceID` Array(UInt32), `Market.DirectOrderID` Array(UInt32), `Market.DirectBannerID` Array(UInt32), `Market.GoodID` Array(String), `Market.GoodName` Array(String), `Market.GoodQuantity` Array(Int32), `Market.GoodPrice` Array(Int64), IslandID FixedString(16)) ENGINE = CollapsingMergeTree(Sign) PARTITION BY toYYYYMM(StartDate) SAMPLE BY intHash32(UserID) ORDER BY (CounterID, StartDate, intHash32(UserID), VisitID); - -```` +CREATE TABLE test.visits ( CounterID UInt32, StartDate Date, Sign Int8, IsNew UInt8, VisitID UInt64, UserID UInt64, StartTime DateTime, Duration UInt32, UTCStartTime DateTime, PageViews Int32, Hits Int32, IsBounce UInt8, Referer String, StartURL String, RefererDomain String, StartURLDomain String, EndURL String, LinkURL String, IsDownload UInt8, TraficSourceID Int8, SearchEngineID UInt16, SearchPhrase String, AdvEngineID UInt8, PlaceID Int32, RefererCategories Array(UInt16), URLCategories Array(UInt16), URLRegions Array(UInt32), RefererRegions Array(UInt32), IsYandex UInt8, GoalReachesDepth Int32, GoalReachesURL Int32, GoalReachesAny Int32, SocialSourceNetworkID UInt8, SocialSourcePage String, MobilePhoneModel String, ClientEventTime DateTime, RegionID UInt32, ClientIP UInt32, ClientIP6 FixedString(16), RemoteIP UInt32, RemoteIP6 FixedString(16), IPNetworkID UInt32, SilverlightVersion3 UInt32, CodeVersion UInt32, ResolutionWidth UInt16, ResolutionHeight UInt16, UserAgentMajor UInt16, UserAgentMinor UInt16, WindowClientWidth UInt16, WindowClientHeight UInt16, SilverlightVersion2 UInt8, SilverlightVersion4 UInt16, FlashVersion3 UInt16, FlashVersion4 UInt16, ClientTimeZone Int16, OS UInt8, UserAgent UInt8, ResolutionDepth UInt8, FlashMajor UInt8, FlashMinor UInt8, NetMajor UInt8, NetMinor UInt8, MobilePhone UInt8, SilverlightVersion1 UInt8, Age UInt8, Sex UInt8, Income UInt8, JavaEnable UInt8, CookieEnable UInt8, JavascriptEnable UInt8, IsMobile UInt8, BrowserLanguage UInt16, BrowserCountry UInt16, Interests UInt16, Robotness UInt8, GeneralInterests Array(UInt16), Params Array(String), `Goals.ID` Array(UInt32), `Goals.Serial` Array(UInt32), `Goals.EventTime` Array(DateTime), `Goals.Price` Array(Int64), `Goals.OrderID` Array(String), `Goals.CurrencyID` Array(UInt32), WatchIDs Array(UInt64), ParamSumPrice Int64, ParamCurrency FixedString(3), ParamCurrencyID UInt16, ClickLogID UInt64, ClickEventID Int32, ClickGoodEvent Int32, ClickEventTime DateTime, ClickPriorityID Int32, ClickPhraseID Int32, ClickPageID Int32, ClickPlaceID Int32, ClickTypeID Int32, ClickResourceID Int32, ClickCost UInt32, ClickClientIP UInt32, ClickDomainID UInt32, ClickURL String, ClickAttempt UInt8, ClickOrderID UInt32, ClickBannerID UInt32, ClickMarketCategoryID UInt32, ClickMarketPP UInt32, ClickMarketCategoryName String, ClickMarketPPName String, ClickAWAPSCampaignName String, ClickPageName String, ClickTargetType UInt16, ClickTargetPhraseID UInt64, ClickContextType UInt8, ClickSelectType Int8, ClickOptions String, ClickGroupBannerID Int32, OpenstatServiceName String, OpenstatCampaignID String, OpenstatAdID String, OpenstatSourceID String, UTMSource String, UTMMedium String, UTMCampaign String, UTMContent String, UTMTerm String, FromTag String, HasGCLID UInt8, FirstVisit DateTime, PredLastVisit Date, LastVisit Date, TotalVisits UInt32, `TraficSource.ID` Array(Int8), `TraficSource.SearchEngineID` Array(UInt16), `TraficSource.AdvEngineID` Array(UInt8), `TraficSource.PlaceID` Array(UInt16), `TraficSource.SocialSourceNetworkID` Array(UInt8), `TraficSource.Domain` Array(String), `TraficSource.SearchPhrase` Array(String), `TraficSource.SocialSourcePage` Array(String), Attendance FixedString(16), CLID UInt32, YCLID UInt64, NormalizedRefererHash UInt64, SearchPhraseHash UInt64, RefererDomainHash UInt64, NormalizedStartURLHash UInt64, StartURLDomainHash UInt64, NormalizedEndURLHash UInt64, TopLevelDomain UInt64, URLScheme UInt64, OpenstatServiceNameHash UInt64, OpenstatCampaignIDHash UInt64, OpenstatAdIDHash UInt64, OpenstatSourceIDHash UInt64, UTMSourceHash UInt64, UTMMediumHash UInt64, UTMCampaignHash UInt64, UTMContentHash UInt64, UTMTermHash UInt64, FromHash UInt64, WebVisorEnabled UInt8, WebVisorActivity UInt32, `ParsedParams.Key1` Array(String), `ParsedParams.Key2` Array(String), `ParsedParams.Key3` Array(String), `ParsedParams.Key4` Array(String), `ParsedParams.Key5` Array(String), `ParsedParams.ValueDouble` Array(Float64), `Market.Type` Array(UInt8), `Market.GoalID` Array(UInt32), `Market.OrderID` Array(String), `Market.OrderPrice` Array(Int64), `Market.PP` Array(UInt32), `Market.DirectPlaceID` Array(UInt32), `Market.DirectOrderID` Array(UInt32), `Market.DirectBannerID` Array(UInt32), `Market.GoodID` Array(String), `Market.GoodName` Array(String), `Market.GoodQuantity` Array(Int32), `Market.GoodPrice` Array(Int64), IslandID FixedString(16)) ENGINE = CollapsingMergeTree(Sign) PARTITION BY toYYYYMM(StartDate) SAMPLE BY intHash32(UserID) ORDER BY (CounterID, StartDate, intHash32(UserID), VisitID); +``` Импортируйте данные: ```bash clickhouse-client --max_insert_block_size 100000 --query "INSERT INTO test.hits FORMAT TSV" < hits_v1.tsv clickhouse-client --max_insert_block_size 100000 --query "INSERT INTO test.visits FORMAT TSV" < visits_v1.tsv -```` +``` diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/development/index.md b/i18n/ru/docusaurus-plugin-content-docs/current/development/index.md index 8551d98399f..94de85fc6ed 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/development/index.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/development/index.md @@ -1,40 +1,20 @@ --- -description: 'Главная страница раздела «Разработка и участие»' +description: "Главная страница раздела «Разработка и участие в проекте»" slug: /development/ -title: 'Разработка и участие' -doc_type: 'landing-page' +title: "Разработка и участие в проекте" +doc_type: "landing-page" --- -В этом разделе документации представлены следующие страницы: +В этом разделе документации вы найдёте следующие страницы: -{/* Приведённое ниже оглавление автоматически генерируется из полей YAML + -{/*AUTOGENERATED_END*/ } + + diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/database-engines/index.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/database-engines/index.md index 4b07f0477e1..e0a84fb3209 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/database-engines/index.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/database-engines/index.md @@ -12,30 +12,16 @@ doc_type: 'landing-page' # Движки баз данных -Движки баз данных позволяют работать с таблицами. По умолчанию ClickHouse использует движок базы данных [Atomic](../../engines/database-engines/atomic.md), который предоставляет настраиваемые [движки таблиц](../../engines/table-engines/index.md) и [диалект SQL](../../sql-reference/syntax.md). +Движки баз данных позволяют работать с таблицами. По умолчанию ClickHouse использует движок баз данных [Atomic](../../engines/database-engines/atomic.md), который обеспечивает настраиваемые [движки таблиц](../../engines/table-engines/index.md) и [диалект SQL](../../sql-reference/syntax.md). -Ниже приведён полный список доступных движков баз данных. Перейдите по ссылкам, чтобы получить дополнительную информацию: +Ниже приведён полный список доступных движков баз данных. Для получения подробной информации перейдите по ссылкам: -{/* Оглавление для этой страницы автоматически генерируется скриптом - https://github.com/ClickHouse/clickhouse-docs/blob/main/scripts/autogenerate-table-of-contents.sh - на основе полей фронтматтера YAML: slug, description, title. + -{/*АВТОГЕНЕРИРОВАНО_НАЧАЛО*/ } - -| Страница | Описание | -| --------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [Shared](/engines/database-engines/shared) | Страница, описывающая движок базы данных `Shared`, доступный в ClickHouse Cloud. | -| [Atomic](/engines/database-engines/atomic) | Движок `Atomic` поддерживает неблокирующие запросы `DROP TABLE` и `RENAME TABLE`, а также атомарные запросы `EXCHANGE TABLES`. Движок базы данных `Atomic` используется по умолчанию. | -| [Lazy](/engines/database-engines/lazy) | Хранит таблицы в оперативной памяти только `expiration_time_in_seconds` секунд после последнего обращения. Может использоваться только с таблицами типа Log. | -| [Replicated](/engines/database-engines/replicated) | Движок основан на движке Atomic. Он поддерживает репликацию метаданных через DDL-лог, который записывается в ZooKeeper и выполняется на всех репликах заданной базы данных. | -| [PostgreSQL](/engines/database-engines/postgresql) | Позволяет подключаться к базам данных на удалённом сервере PostgreSQL. | -| [MySQL](/engines/database-engines/mysql) | Позволяет подключаться к базам данных на удалённом сервере MySQL и выполнять запросы `INSERT` и `SELECT` для обмена данными между ClickHouse и MySQL. | -| [SQLite](/engines/database-engines/sqlite) | Позволяет подключаться к базам данных SQLite и выполнять запросы `INSERT` и `SELECT` для обмена данными между ClickHouse и SQLite. | -| [MaterializedPostgreSQL](/engines/database-engines/materialized-postgresql) | Создаёт базу данных ClickHouse на основе таблиц из базы данных PostgreSQL. | -| [Backup](/engines/database-engines/backup) | Позволяет мгновенно подключать таблицы/базы данных из резервных копий в режиме только чтения. | -| [DataLakeCatalog](/engines/database-engines/datalakecatalog) | Движок базы данных DataLakeCatalog позволяет подключать ClickHouse к внешним каталогам данных и выполнять запросы к данным в формате открытых таблиц. | - -{/*AUTOGENERATED_END*/ } + + diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/database-engines/mysql.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/database-engines/mysql.md index 27bd9dbfb1a..5ed0cd86912 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/database-engines/mysql.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/database-engines/mysql.md @@ -17,9 +17,9 @@ import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; Позволяет подключаться к базам данных на удалённом сервере MySQL и выполнять запросы `INSERT` и `SELECT` для обмена данными между ClickHouse и MySQL. -Движок базы данных `MySQL` транслирует запросы на сервер MySQL, поэтому вы можете выполнять такие операции, как `SHOW TABLES` или `SHOW CREATE TABLE`. +Движок базы данных `MySQL` транслирует запросы к серверу MySQL, чтобы вы могли выполнять операции, такие как `SHOW TABLES` или `SHOW CREATE TABLE`. -Вы не можете выполнять следующие запросы: +Нельзя выполнять следующие запросы: - `RENAME` - `CREATE TABLE` @@ -34,9 +34,9 @@ CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster] ENGINE = MySQL('host:port', ['database' | database], 'user', 'password') ``` -**Параметры двигателя** +**Параметры движка** -* `host:port` — адрес MySQL-сервера. +* `host:port` — адрес сервера MySQL. * `database` — имя удалённой базы данных. * `user` — пользователь MySQL. * `password` — пароль пользователя. @@ -68,7 +68,7 @@ ENGINE = MySQL('host:port', ['database' | database], 'user', 'password') ## Поддержка глобальных переменных -Для лучшей совместимости вы можете обращаться к глобальным переменным в стиле MySQL — через `@@identifier`. +Для лучшей совместимости вы можете обращаться к глобальным переменным в стиле MySQL — как к `@@identifier`. Поддерживаются следующие переменные: @@ -76,7 +76,7 @@ ENGINE = MySQL('host:port', ['database' | database], 'user', 'password') * `max_allowed_packet` :::note -На данный момент эти переменные являются заглушками и ни к чему не привязаны. +В настоящее время эти переменные являются заглушками и ни с какими реальными настройками не связаны. ::: Пример: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/azure-queue.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/azure-queue.md index db9d948a95a..e9b0e61431f 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/azure-queue.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/azure-queue.md @@ -8,15 +8,11 @@ title: 'Табличный движок AzureQueue' doc_type: 'reference' --- +# Табличный движок AzureQueue +Этот движок обеспечивает интеграцию с экосистемой [Azure Blob Storage](https://azure.microsoft.com/en-us/products/storage/blobs) и поддерживает потоковый импорт данных. -# Движок таблицы AzureQueue - -Этот движок обеспечивает интеграцию с экосистемой [Azure Blob Storage](https://azure.microsoft.com/en-us/products/storage/blobs), позволяя выполнять потоковую загрузку данных. - - - -## Создание таблицы {#creating-a-table} +## Создание таблицы ```sql CREATE TABLE test (name String, value UInt32) @@ -30,9 +26,9 @@ CREATE TABLE test (name String, value UInt32) **Параметры движка** -Параметры `AzureQueue` совпадают с параметрами движка таблиц `AzureBlobStorage`. См. описание параметров [здесь](../../../engines/table-engines/integrations/azureBlobStorage.md). +Параметры `AzureQueue` такие же, как у табличного движка `AzureBlobStorage`. См. раздел с параметрами [здесь](../../../engines/table-engines/integrations/azureBlobStorage.md). -Аналогично движку таблиц [AzureBlobStorage](/engines/table-engines/integrations/azureBlobStorage), можно использовать эмулятор Azurite для локальной разработки с Azure Storage. Подробнее [здесь](https://learn.microsoft.com/en-us/azure/storage/common/storage-use-azurite?tabs=docker-hub%2Cblob-storage). +Аналогично табличному движку [AzureBlobStorage](/engines/table-engines/integrations/azureBlobStorage), пользователи могут использовать эмулятор Azurite для локальной разработки хранилища Azure. Дополнительные сведения см. [здесь](https://learn.microsoft.com/en-us/azure/storage/common/storage-use-azurite?tabs=docker-hub%2Cblob-storage). **Пример** @@ -47,21 +43,59 @@ SETTINGS mode = 'unordered' ``` -## Настройки {#settings} +## Settings \{#settings\} + +Набор поддерживаемых настроек в основном совпадает с настройками для движка таблиц `S3Queue`, но без префикса `s3queue_`. См. [полный список настроек](../../../engines/table-engines/integrations/s3queue.md#settings). +Чтобы получить список настроек, заданных для таблицы, используйте таблицу `system.azure_queue_settings`. Доступно начиная с версии 24.10. + +Ниже приведены настройки, совместимые только с AzureQueue и не применимые к S3Queue. + +### `after_processing_move_connection_string` \{#after_processing_move_connection_string\} -Набор поддерживаемых настроек совпадает с настройками движка таблиц `S3Queue`, но без префикса `s3queue_`. См. [полный список настроек](../../../engines/table-engines/integrations/s3queue.md#settings). -Чтобы получить список настроек, настроенных для таблицы, используйте таблицу `system.azure_queue_settings`. Доступно начиная с версии `24.10`. +Строка подключения к Azure Blob Storage, в которую будут перемещаться успешно обработанные файлы, если в качестве назначения используется другой контейнер Azure. +Возможные значения: -## Description {#description} +- String. -`SELECT` не особенно полезен для потоковой загрузки данных (за исключением отладки), поскольку каждый файл может быть импортирован только один раз. Более практичным является создание потоков обработки в реальном времени с использованием [материализованных представлений](../../../sql-reference/statements/create/view.md). Для этого: +Значение по умолчанию: пустая строка. -1. Используйте движок для создания таблицы, которая будет получать данные из указанного пути в S3, и рассматривайте её как поток данных. -2. Создайте таблицу с требуемой структурой. -3. Создайте материализованное представление, которое преобразует данные из движка и помещает их в ранее созданную таблицу. +### `after_processing_move_container` -Когда `MATERIALIZED VIEW` подключается к движку, оно начинает собирать данные в фоновом режиме. +Имя контейнера, в который необходимо переместить успешно обработанные файлы, если целевым контейнером является другой контейнер Azure. + +Возможные значения: + +* Строка. + +Значение по умолчанию: пустая строка. + +Пример: + +```sql +CREATE TABLE azure_queue_engine_table +( + `key` UInt64, + `data` String +) +ENGINE = AzureQueue('DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://azurite1:10000/devstoreaccount1/;', 'testcontainer', '*', 'CSV') +SETTINGS + mode = 'unordered', + after_processing = 'move', + after_processing_move_connection_string = 'DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://azurite1:10000/devstoreaccount1/;', + after_processing_move_container = 'dst-container'; +``` + + +## Описание + +`SELECT` не особенно полезен для потокового импорта (кроме отладки), потому что каждый файл можно импортировать только один раз. Гораздо практичнее создавать потоки в реальном времени с использованием [материализованных представлений](../../../sql-reference/statements/create/view.md). Для этого: + +1. Используйте табличный движок для создания таблицы, потребляющей данные из указанного пути в S3, и рассматривайте её как поток данных. +2. Создайте таблицу с требуемой структурой. +3. Создайте материализованное представление, которое преобразует данные из табличного движка и записывает их в ранее созданную таблицу. + +Когда `MATERIALIZED VIEW` связывается с табличным движком, оно начинает собирать данные в фоновом режиме. Пример: @@ -81,31 +115,30 @@ SELECT * FROM stats ORDER BY key; ``` -## Виртуальные столбцы {#virtual-columns} +## Виртуальные столбцы \{#virtual-columns\} - `_path` — Путь к файлу. - `_file` — Имя файла. -Подробнее о виртуальных столбцах см. [здесь](../../../engines/table-engines/index.md#table_engines-virtual_columns). - +Дополнительные сведения о виртуальных столбцах см. [здесь](../../../engines/table-engines/index.md#table_engines-virtual_columns). -## Интроспекция {#introspection} +## Интроспекция Включите логирование для таблицы с помощью настройки таблицы `enable_logging_to_queue_log=1`. -Возможности интроспекции аналогичны [движку таблиц S3Queue](/engines/table-engines/integrations/s3queue#introspection) с несколькими существенными отличиями: +Возможности интроспекции такие же, как у [движка таблиц S3Queue](/engines/table-engines/integrations/s3queue#introspection), с несколькими важными отличиями: -1. Используйте `system.azure_queue` для хранения состояния очереди в памяти для версий сервера >= 25.1. Для более старых версий используйте `system.s3queue` (она также будет содержать информацию для таблиц `azure`). -2. Включите `system.azure_queue_log` через основной конфигурационный файл ClickHouse, например: +1. Используйте `system.azure_queue` для представления состояния очереди в памяти для версий сервера >= 25.1. Для более старых версий используйте `system.s3queue` (он также будет содержать информацию для таблиц `azure`). +2. Включите `system.azure_queue_log` через основную конфигурацию ClickHouse, например: ```xml - - system -
azure_queue_log
- + + system + azure_queue_log
+
``` -Эта персистентная таблица содержит ту же информацию, что и `system.s3queue`, но для обработанных и неудачно обработанных файлов. +Эта постоянная таблица содержит ту же информацию, что и `system.s3queue`, но для обработанных и завершившихся ошибкой файлов. Таблица имеет следующую структуру: @@ -114,23 +147,23 @@ SELECT * FROM stats ORDER BY key; CREATE TABLE system.azure_queue_log ( `hostname` LowCardinality(String) COMMENT 'Имя хоста', - `event_date` Date COMMENT 'Дата события записи этой строки лога', - `event_time` DateTime COMMENT 'Время события записи этой строки лога', - `database` String COMMENT 'Имя базы данных, в которой находится текущая таблица S3Queue.', + `event_date` Date COMMENT 'Дата события записи данной строки журнала', + `event_time` DateTime COMMENT 'Время события записи данной строки журнала', + `database` String COMMENT 'Имя базы данных, в которой находится таблица S3Queue.', `table` String COMMENT 'Имя таблицы S3Queue.', `uuid` String COMMENT 'UUID таблицы S3Queue', `file_name` String COMMENT 'Имя обрабатываемого файла', `rows_processed` UInt64 COMMENT 'Количество обработанных строк', `status` Enum8('Processed' = 0, 'Failed' = 1) COMMENT 'Статус обработки файла', `processing_start_time` Nullable(DateTime) COMMENT 'Время начала обработки файла', - `processing_end_time` Nullable(DateTime) COMMENT 'Время окончания обработки файла', - `exception` String COMMENT 'Сообщение об исключении, если произошло' + `processing_end_time` Nullable(DateTime) COMMENT 'Время завершения обработки файла', + `exception` String COMMENT 'Сообщение об исключении при его возникновении' ) ENGINE = MergeTree PARTITION BY toYYYYMM(event_date) ORDER BY (event_date, event_time) SETTINGS index_granularity = 8192 -COMMENT 'Содержит записи логирования с информацией о файлах, обработанных движком S3Queue.' +COMMENT 'Содержит записи журнала с информацией о файлах, обработанных движком S3Queue.' ``` @@ -142,7 +175,7 @@ FROM system.azure_queue_log LIMIT 1 FORMAT Vertical -Row 1: +Строка 1: ────── hostname: clickhouse event_date: 2024-12-16 @@ -157,6 +190,6 @@ processing_start_time: 2024-12-16 13:42:47 processing_end_time: 2024-12-16 13:42:47 exception: -1 row in set. Elapsed: 0.002 sec. +Получена 1 строка. Затрачено: 0.002 сек. ``` diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/index.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/index.md index 36d0a797d64..c30b5768250 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/index.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/index.md @@ -1,9 +1,9 @@ --- -description: 'Документация по табличным движкам для интеграций' +description: 'Документация по движкам таблиц для интеграций' sidebar_label: 'Интеграции' sidebar_position: 40 slug: /engines/table-engines/integrations/ -title: 'Табличные движки для интеграций' +title: 'Движки таблиц для интеграций' doc_type: 'reference' --- @@ -11,44 +11,14 @@ doc_type: 'reference' # Движки таблиц для интеграций -ClickHouse предоставляет различные способы интеграции с внешними системами, включая движки таблиц. Как и для всех остальных движков таблиц, конфигурация выполняется с помощью запросов `CREATE TABLE` или `ALTER TABLE`. Затем, с точки зрения пользователя, настроенная интеграция выглядит как обычная таблица, но запросы к ней проксируются во внешнюю систему. Такое прозрачное выполнение запросов является одним из ключевых преимуществ этого подхода по сравнению с альтернативными методами интеграции, такими как словари или табличные функции, которые требуют использования специальных способов обращения при каждом запросе. +ClickHouse предоставляет различные средства для интеграции с внешними системами, включая движки таблиц. Как и для всех остальных движков таблиц, настройка выполняется с помощью запросов `CREATE TABLE` или `ALTER TABLE`. С точки зрения пользователя настроенная интеграция выглядит как обычная таблица, но запросы к ней передаются во внешнюю систему. Такая прозрачность запросов является одним из ключевых преимуществ этого подхода по сравнению с альтернативными методами интеграции, такими как словари или табличные функции, которые требуют использования специальных методов запросов при каждом обращении. -{/* Таблица оглавления для этой страницы автоматически генерируется скриптом - https://github.com/ClickHouse/clickhouse-docs/blob/main/scripts/autogenerate-table-of-contents.sh - на основе полей фронтматтера YAML: slug, description, title. + - -{/*AUTOGENERATED_START*/ } - -| Страница | Описание | -| --------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [Движок таблицы AzureBlobStorage](/engines/table-engines/integrations/azureBlobStorage) | Этот движок реализует интеграцию с экосистемой Azure Blob Storage. | -| [Табличный движок DeltaLake](/engines/table-engines/integrations/deltalake) | Этот движок предоставляет доступ только для чтения к существующим таблицам Delta Lake в Amazon S3. | -| [Движок таблицы EmbeddedRocksDB](/engines/table-engines/integrations/embedded-rocksdb) | Этот движок обеспечивает интеграцию ClickHouse с RocksDB | -| [Движок таблицы ExternalDistributed](/engines/table-engines/integrations/ExternalDistributed) | Движок `ExternalDistributed` позволяет выполнять запросы `SELECT` к данным, которые хранятся на удалённых серверах MySQL или PostgreSQL. Принимает движки MySQL или PostgreSQL в качестве аргумента, что позволяет использовать шардинг. | -| [Движок таблицы TimeSeries](/engines/table-engines/special/time_series) | Движок таблицы, хранящий временные ряды, то есть набор значений, связанных с временными метками и тегами (метками). | -| [Движок таблицы HDFS](/engines/table-engines/integrations/hdfs) | Этот движок обеспечивает интеграцию с экосистемой Apache Hadoop, позволяя управлять данными в HDFS из ClickHouse. Он похож на движки File и URL, но предоставляет специализированные для Hadoop возможности. | -| [Движок таблиц Hive](/engines/table-engines/integrations/hive) | Движок Hive позволяет выполнять запросы `SELECT` по таблице Hive в HDFS. | -| [Движок таблиц Hudi](/engines/table-engines/integrations/hudi) | Этот движок обеспечивает доступ только для чтения к существующим таблицам Apache Hudi в Amazon S3. | -| [Табличный движок Iceberg](/engines/table-engines/integrations/iceberg) | Этот движок обеспечивает доступную только для чтения интеграцию с существующими таблицами Apache Iceberg в Amazon S3, Azure, HDFS, а также с локально хранящимися таблицами. | -| [Табличный движок JDBC](/engines/table-engines/integrations/jdbc) | Позволяет ClickHouse подключаться к внешним базам данных посредством JDBC. | -| [Движок таблиц Kafka](/engines/table-engines/integrations/kafka) | Движок таблиц Kafka можно использовать для работы с Apache Kafka; он позволяет публиковать данные и подписываться на потоки данных, организовывать отказоустойчивое хранение данных и обрабатывать потоки по мере их поступления. | -| [Движок таблиц MaterializedPostgreSQL](/engines/table-engines/integrations/materialized-postgresql) | Создаёт таблицу ClickHouse, заполняя её начальными данными из дампа таблицы PostgreSQL, и запускает процесс репликации. | -| [Табличный движок MongoDB](/engines/table-engines/integrations/mongodb) | Движок MongoDB — это табличный движок только для чтения, который позволяет читать данные из удалённой коллекции. | -| [Движок таблиц MySQL](/engines/table-engines/integrations/mysql) | Документация по табличному движку MySQL | -| [Движок таблицы NATS](/engines/table-engines/integrations/nats) | Этот движок позволяет осуществлять интеграцию ClickHouse с NATS для публикации и подписки на сообщения по определённым темам, а также обработки новых сообщений по мере их появления. | -| [Движок таблицы ODBC](/engines/table-engines/integrations/odbc) | Позволяет ClickHouse подключаться к внешним базам данных по ODBC. | -| [Движок таблиц PostgreSQL](/engines/table-engines/integrations/postgresql) | Движок PostgreSQL позволяет выполнять запросы `SELECT` и `INSERT` к данным, хранящимся на удалённом сервере PostgreSQL. | -| [Движок таблиц RabbitMQ](/engines/table-engines/integrations/rabbitmq) | Этот движок позволяет интегрировать ClickHouse с RabbitMQ. | -| [Табличный движок Redis](/engines/table-engines/integrations/redis) | Этот движок позволяет интегрировать ClickHouse с Redis. | -| [Движок таблицы S3](/engines/table-engines/integrations/s3) | Этот движок обеспечивает интеграцию с экосистемой Amazon S3. Аналогичен движку HDFS, но поддерживает функции, специфичные для S3. | -| [Движок таблицы S3Queue](/engines/table-engines/integrations/s3queue) | Этот движок обеспечивает интеграцию с экосистемой Amazon S3 и позволяет выполнять потоковый импорт. Аналогичен движкам Kafka и RabbitMQ, но предоставляет возможности, специфичные для S3. | -| [Движок таблицы AzureQueue](/engines/table-engines/integrations/azure-queue) | Этот движок интегрируется с экосистемой Azure Blob Storage и поддерживает потоковый импорт данных. | -| [Движок таблиц YTsaurus](/engines/table-engines/integrations/ytsaurus) | Табличный движок для импорта данных из кластера YTsaurus. | -| [Движок таблиц SQLite](/engines/table-engines/integrations/sqlite) | Движок позволяет импортировать данные в SQLite и экспортировать их из него, а также поддерживает выполнение запросов к таблицам SQLite напрямую из ClickHouse. | -| [Движок таблицы ArrowFlight](/engines/table-engines/integrations/arrowflight) | Движок позволяет выполнять запросы к удалённым наборам данных по протоколу Apache Arrow Flight. | - -{/*AUTOGENERATED_END*/ } + + diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/s3queue.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/s3queue.md index 79fb3196b4f..41532f821b6 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/s3queue.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/s3queue.md @@ -1,7 +1,7 @@ --- -description: 'Этот движок обеспечивает интеграцию с экосистемой Amazon S3 и поддерживает - потоковый импорт данных. Аналогичен движкам Kafka и RabbitMQ, но предоставляет функции, - специфичные для S3.' +description: 'Этот движок обеспечивает интеграцию с экосистемой Amazon S3 и позволяет + выполнять потоковый импорт. Аналогичен движкам Kafka и RabbitMQ, но предоставляет + специфичные для S3 возможности.' sidebar_label: 'S3Queue' sidebar_position: 181 slug: /engines/table-engines/integrations/s3queue @@ -14,13 +14,11 @@ import ScalePlanFeatureBadge from '@theme/badges/ScalePlanFeatureBadge' # Движок таблицы S3Queue -Этот движок обеспечивает интеграцию с экосистемой [Amazon S3](https://aws.amazon.com/s3/) и поддерживает потоковый импорт. Движок аналогичен движкам [Kafka](../../../engines/table-engines/integrations/kafka.md) и [RabbitMQ](../../../engines/table-engines/integrations/rabbitmq.md), но предоставляет возможности, специфичные для S3. +Этот движок обеспечивает интеграцию с экосистемой [Amazon S3](https://aws.amazon.com/s3/) и позволяет выполнять потоковый импорт. Он аналогичен движкам [Kafka](../../../engines/table-engines/integrations/kafka.md) и [RabbitMQ](../../../engines/table-engines/integrations/rabbitmq.md), но предоставляет функции, специфичные для S3. -Важно учитывать следующее замечание из [оригинального PR с реализацией S3Queue](https://github.com/ClickHouse/ClickHouse/pull/49086/files#diff-e1106769c9c8fbe48dd84f18310ef1a250f2c248800fde97586b3104e9cd6af8R183): когда к этому движку подключается `MATERIALIZED VIEW`, движок таблицы S3Queue начинает собирать данные в фоновом режиме. +Важно учитывать следующее примечание из [исходного PR по реализации S3Queue](https://github.com/ClickHouse/ClickHouse/pull/49086/files#diff-e1106769c9c8fbe48dd84f18310ef1a250f2c248800fde97586b3104e9cd6af8R183): когда к таблице с этим движком присоединяется `MATERIALIZED VIEW`, движок таблицы S3Queue начинает собирать данные в фоновом режиме. - - -## Создание таблицы {#creating-a-table} +## Создать таблицу ```sql CREATE TABLE s3_queue_engine_table (name String, value UInt32) @@ -51,12 +49,12 @@ CREATE TABLE s3_queue_engine_table (name String, value UInt32) ``` :::warning -До версии `24.7` необходимо использовать префикс `s3queue_` для всех настроек, за исключением `mode`, `after_processing` и `keeper_path`. +До версии `24.7` требуется использовать префикс `s3queue_` для всех настроек, кроме `mode`, `after_processing` и `keeper_path`. ::: **Параметры движка** -Параметры `S3Queue` совпадают с параметрами табличного движка `S3`. См. раздел о параметрах [здесь](../../../engines/table-engines/integrations/s3.md#parameters). +Параметры `S3Queue` такие же, как у табличного движка `S3`. См. раздел «Параметры» [здесь](../../../engines/table-engines/integrations/s3.md#parameters). **Пример** @@ -67,7 +65,7 @@ SETTINGS mode = 'unordered'; ``` -Использование именованных коллекций: +Использование коллекций с именами: ```xml @@ -89,73 +87,170 @@ SETTINGS ``` -## Настройки {#settings} +## Настройки \{#settings\} -Чтобы получить список настроек, настроенных для таблицы, используйте таблицу `system.s3_queue_settings`. Доступно начиная с версии `24.10`. +Чтобы получить список настроек, заданных для таблицы, используйте таблицу `system.s3_queue_settings`. Доступно, начиная с версии `24.10`. -### Mode {#mode} +### Mode \{#mode\} Возможные значения: -- unordered — В неупорядоченном режиме набор всех уже обработанных файлов отслеживается с помощью постоянных узлов в ZooKeeper. -- ordered — В упорядоченном режиме файлы обрабатываются в лексикографическом порядке. Это означает, что если файл с именем 'BBB' был обработан в какой-то момент, а позже в бакет добавляется файл с именем 'AA', он будет проигнорирован. В ZooKeeper хранятся только максимальное имя (в лексикографическом смысле) успешно обработанного файла и имена файлов, для которых будет выполнена повторная попытка после неудачной загрузки. +- unordered — В режиме unordered множество всех уже обработанных файлов отслеживается с помощью постоянных узлов в ZooKeeper. +- ordered — В режиме ordered файлы обрабатываются в лексикографическом порядке. Это означает, что если файл с именем `BBB` был обработан в какой‑то момент, а позже в бакет был добавлен файл с именем `AA`, он будет проигнорирован. В ZooKeeper сохраняются только максимальное имя (в лексикографическом смысле) успешно обработанного файла и имена файлов, которые будут повторно загружены после неудачной попытки загрузки. + +Значение по умолчанию: `ordered` в версиях до 24.6. Начиная с 24.6 значение по умолчанию отсутствует, настройку требуется указывать вручную. Для таблиц, созданных в более ранних версиях, значение по умолчанию останется `ordered` для сохранения совместимости. -Значение по умолчанию: `ordered` в версиях до 24.6. Начиная с версии 24.6 значение по умолчанию отсутствует, настройку необходимо указывать вручную. Для таблиц, созданных в более ранних версиях, значение по умолчанию останется `Ordered` для обеспечения совместимости. +### `after_processing` -### `after_processing` {#after_processing} +Что делать с файлом после успешной обработки. -Удалить или сохранить файл после успешной обработки. Возможные значения: -- keep. -- delete. +* keep. +* delete. +* move. +* tag. Значение по умолчанию: `keep`. -### `keeper_path` {#keeper_path} +Для варианта `move` требуются дополнительные настройки. В случае перемещения в пределах того же бакета необходимо указать новый префикс пути в параметре `after_processing_move_prefix`. + +Перемещение в другой S3‑бакет требует указания URI целевого бакета в параметре `after_processing_move_uri`, а также учетных данных доступа к S3 в параметрах `after_processing_move_access_key_id` и `after_processing_move_secret_access_key`. + +Пример: + +```sql +CREATE TABLE s3queue_engine_table (name String, value UInt32) +ENGINE=S3Queue('https://clickhouse-public-datasets.s3.amazonaws.com/my-test-bucket-768/*', 'CSV', 'gzip') +SETTINGS + mode = 'unordered', + after_processing = 'move', + after_processing_retries = 20, + after_processing_move_prefix = 'dst_prefix', + after_processing_move_uri = 'https://clickhouse-public-datasets.s3.amazonaws.com/dst-bucket', + after_processing_move_access_key_id = 'test', + after_processing_move_secret_access_key = 'test'; +``` + +Для перемещения данных из одного контейнера Azure в другой необходимо указать строку подключения Blob Storage в параметре `after_processing_move_connection_string` и имя контейнера в параметре `after_processing_move_container`. См. [настройки AzureQueue](../../../engines/table-engines/integrations/azure-queue.md#settings). + +Для добавления тегов необходимо указать ключ и значение тега в параметрах `after_processing_tag_key` и `after_processing_tag_value`. + + +### `after_processing_retries` \{#after_processing_retries\} + +Количество повторных попыток выполнения запрошенного действия постобработки перед тем, как прекратить попытки. -Путь в ZooKeeper может быть указан как настройка движка таблицы, или путь по умолчанию может быть сформирован из пути, предоставленного глобальной конфигурацией, и UUID таблицы. Возможные значения: -- String. +- Неотрицательное целое число. + +Значение по умолчанию: `10`. + +### `after_processing_move_access_key_id` \{#after_processing_move_access_key_id\} + +ID ключа доступа (Access Key ID) для S3‑бакета, в который нужно переместить успешно обработанные файлы, если целевым местом назначения является другой S3‑бакет. + +Возможные значения: + +- Строка. + +Значение по умолчанию: пустая строка. + +### `after_processing_move_prefix` \{#after_processing_move_prefix\} + +Префикс пути, в который перемещаются успешно обработанные файлы. Применимо как при перемещении в пределах того же бакета, так и в другой бакет. + +Возможные значения: + +- Строка. + +Значение по умолчанию: пустая строка. + +### `after_processing_move_secret_access_key` \{#after_processing_move_secret_access_key\} + +Secret Access Key для S3‑бакета, в который нужно перемещать успешно обработанные файлы, если целевой ресурс — другой S3‑бакет. + +Возможные значения: + +- Строка. + +Значение по умолчанию: пустая строка. + +### `after_processing_move_uri` \{#after_processing_move_uri\} + +URI S3-бакета, в который следует перемещать успешно обработанные файлы, если местом назначения является другой S3-бакет. + +Возможные значения: + +- Строка. + +Значение по умолчанию: пустая строка. + +### `after_processing_tag_key` \{#after_processing_tag_key\} + +Ключ тега, который будет использоваться для пометки успешно обработанных файлов, если `after_processing='tag'`. + +Возможные значения: + +- Строка. + +Значение по умолчанию: пустая строка. + +### `after_processing_tag_value` \{#after_processing_tag_value\} + +Значение тега, которое будет присвоено успешно обработанным файлам, если `after_processing='tag'`. + +Возможные значения: + +- Строка. + +Значение по умолчанию: пустая строка. + +### `keeper_path` \{#keeper_path\} + +Путь в ZooKeeper может быть задан в параметрах движка таблицы, либо путь по умолчанию может быть сформирован из пути, указанного в глобальной конфигурации, и UUID таблицы. +Возможные значения: + +- строка. Значение по умолчанию: `/`. -### `s3queue_loading_retries` {#loading_retries} +### `s3queue_loading_retries` \{#loading_retries\} -Повторять попытки загрузки файла до указанного количества раз. По умолчанию повторные попытки не выполняются. +Повторять загрузку файла до указанного количества раз. По умолчанию повторы не выполняются. Возможные значения: - Положительное целое число. Значение по умолчанию: `0`. -### `s3queue_processing_threads_num` {#processing_threads_num} +### `s3queue_processing_threads_num` \{#processing_threads_num\} -Количество потоков для выполнения обработки. Применяется только для режима `Unordered`. +Количество потоков обработки. Применяется только в режиме `Unordered`. -Значение по умолчанию: количество процессоров или 16. +Значение по умолчанию: количество CPU или 16. -### `s3queue_parallel_inserts` {#parallel_inserts} +### `s3queue_parallel_inserts` \{#parallel_inserts\} -По умолчанию `processing_threads_num` создаёт один `INSERT`, поэтому загрузка файлов и парсинг выполняются только в нескольких потоках. -Но это ограничивает параллелизм, поэтому для лучшей пропускной способности используйте `parallel_inserts=true`, это позволит вставлять данные параллельно (но имейте в виду, что это приведёт к большему количеству сгенерированных кусков данных для семейства MergeTree). +По умолчанию `processing_threads_num` будет выполнять один `INSERT`, поэтому файлы будут только загружаться и парситься в несколько потоков. +Но это ограничивает степень параллелизма, поэтому для лучшей пропускной способности используйте `parallel_inserts=true` — это позволит вставлять данные параллельно (но имейте в виду, что это приведёт к большему количеству создаваемых частей данных для семейства движков MergeTree). :::note -`INSERT` будут создаваться с учётом настроек `max_process*_before_commit`. +`INSERT`-запросы будут создаваться с учётом настроек `max_process*_before_commit`. ::: Значение по умолчанию: `false`. -### `s3queue_enable_logging_to_s3queue_log` {#enable_logging_to_s3queue_log} +### `s3queue_enable_logging_to_s3queue_log` \{#enable_logging_to_s3queue_log\} -Включить логирование в `system.s3queue_log`. +Включает логирование в `system.s3queue_log`. Значение по умолчанию: `0`. -### `s3queue_polling_min_timeout_ms` {#polling_min_timeout_ms} +### `s3queue_polling_min_timeout_ms` \{#polling_min_timeout_ms\} -Указывает минимальное время в миллисекундах, которое ClickHouse ожидает перед выполнением следующей попытки опроса. +Указывает минимальное время в миллисекундах, которое ClickHouse ожидает перед следующей попыткой опроса. Возможные значения: @@ -163,9 +258,9 @@ SETTINGS Значение по умолчанию: `1000`. -### `s3queue_polling_max_timeout_ms` {#polling_max_timeout_ms} +### `s3queue_polling_max_timeout_ms` \{#polling_max_timeout_ms\} -Определяет максимальное время в миллисекундах, которое ClickHouse ожидает перед инициацией следующей попытки опроса. +Определяет максимальное время в миллисекундах, в течение которого ClickHouse ждёт перед запуском следующей попытки опроса. Возможные значения: @@ -173,9 +268,9 @@ SETTINGS Значение по умолчанию: `10000`. -### `s3queue_polling_backoff_ms` {#polling_backoff_ms} +### `s3queue_polling_backoff_ms` \{#polling_backoff_ms\} -Определяет дополнительное время ожидания, добавляемое к предыдущему интервалу опроса, когда новые файлы не найдены. Следующий опрос происходит после суммы предыдущего интервала и этого значения отсрочки, или максимального интервала, в зависимости от того, что меньше. +Определяет дополнительное время ожидания, добавляемое к предыдущему интервалу опроса при отсутствии новых файлов. Следующий опрос выполняется после истечения времени, равного сумме предыдущего интервала и этого значения backoff, либо по наступлении максимального интервала — в зависимости от того, что меньше. Возможные значения: @@ -183,10 +278,10 @@ SETTINGS Значение по умолчанию: `0`. -### `s3queue_tracked_files_limit` {#tracked_files_limit} +### `s3queue_tracked_files_limit` \{#tracked_files_limit\} -Позволяет ограничить количество узлов ZooKeeper при использовании режима 'unordered', не действует для режима 'ordered'. -При достижении лимита самые старые обработанные файлы будут удалены из узла ZooKeeper и обработаны снова. +Позволяет ограничить количество узлов ZooKeeper при использовании режима `unordered`; не влияет на режим `ordered`. +Если лимит достигнут, самые старые обработанные файлы будут удалены из узла ZooKeeper и обработаны повторно. Возможные значения: @@ -194,10 +289,10 @@ SETTINGS Значение по умолчанию: `1000`. -### `s3queue_tracked_file_ttl_sec` {#tracked_file_ttl_sec} +### `s3queue_tracked_file_ttl_sec` \{#tracked_file_ttl_sec\} -Максимальное количество секунд для хранения обработанных файлов в узле ZooKeeper (по умолчанию хранятся бессрочно) для режима 'unordered', не действует для режима 'ordered'. -По истечении указанного количества секунд файл будет импортирован повторно. +Максимальное время в секундах для хранения обработанных файлов в узле ZooKeeper (по умолчанию хранятся бессрочно) в режиме `unordered`; не влияет на режим `ordered`. +По истечении указанного времени файл будет загружен повторно. Возможные значения: @@ -205,47 +300,44 @@ SETTINGS Значение по умолчанию: `0`. -### `s3queue_cleanup_interval_min_ms` {#cleanup_interval_min_ms} +### `s3queue_cleanup_interval_min_ms` \{#cleanup_interval_min_ms\} -Для режима 'Ordered'. Определяет минимальную границу интервала перепланирования для фоновой задачи, которая отвечает за поддержание TTL отслеживаемых файлов и максимального набора отслеживаемых файлов. +Для режима `Ordered`. Определяет минимальное значение интервала перепланирования фоновой задачи, которая отвечает за поддержание TTL отслеживаемых файлов и ограничения на их максимальное количество. Значение по умолчанию: `10000`. -### `s3queue_cleanup_interval_max_ms` {#cleanup_interval_max_ms} - +### `s3queue_cleanup_interval_max_ms` \{#cleanup_interval_max_ms\} -Для режима 'Ordered'. Определяет максимальную границу интервала перепланирования для фоновой задачи, отвечающей за поддержание TTL отслеживаемых файлов и максимального количества отслеживаемых файлов. +Для режима `Ordered`. Определяет максимальный интервал между переназначениями фоновой задачи, которая отвечает за поддержание TTL отслеживаемых файлов и максимального набора отслеживаемых файлов. Значение по умолчанию: `30000`. -### `s3queue_buckets` {#buckets} +### `s3queue_buckets` \{#buckets\} -Для режима 'Ordered'. Доступно начиная с версии `24.6`. Если существует несколько реплик таблицы S3Queue, каждая из которых работает с одним и тем же каталогом метаданных в keeper, значение `s3queue_buckets` должно быть не меньше количества реплик. Если также используется параметр `s3queue_processing_threads`, имеет смысл дополнительно увеличить значение параметра `s3queue_buckets`, так как он определяет фактическую степень параллелизма обработки `S3Queue`. +Для режима `Ordered`. Доступно начиная с версии `24.6`. Если существует несколько реплик таблицы `S3Queue`, каждая из которых работает с одним и тем же каталогом метаданных в keeper, значение `s3queue_buckets` должно быть не меньше количества реплик. Если также используется настройка `s3queue_processing_threads`, имеет смысл дополнительно увеличить значение `s3queue_buckets`, так как она определяет фактический уровень параллелизма обработки `S3Queue`. -### `use_persistent_processing_nodes` {#use_persistent_processing_nodes} +### `use_persistent_processing_nodes` \{#use_persistent_processing_nodes\} -По умолчанию таблица S3Queue всегда использовала эфемерные узлы обработки, что могло приводить к дублированию данных в случае истечения сессии zookeeper до того, как S3Queue зафиксирует обработанные файлы в zookeeper, но после начала обработки. Этот параметр заставляет сервер исключить возможность появления дубликатов при истечении сессии keeper. +По умолчанию таблица S3Queue всегда использовала эфемерные узлы обработки, что могло приводить к дублированию данных в случае, если сессия ZooKeeper истекает до того, как S3Queue зафиксирует обработанные файлы в ZooKeeper, но после того, как обработка уже началась. Эта настройка заставляет сервер исключить возможность появления дубликатов при истечении сессии Keeper. -### `persistent_processing_nodes_ttl_seconds` {#persistent_processing_nodes_ttl_seconds} +### `persistent_processing_nodes_ttl_seconds` \{#persistent_processing_nodes_ttl_seconds\} -В случае аварийного завершения работы сервера возможна ситуация, когда при включённом параметре `use_persistent_processing_nodes` узлы обработки не будут удалены. Этот параметр определяет период времени, в течение которого эти узлы обработки могут быть безопасно удалены. +В случае некорректного завершения работы сервера, если включён `use_persistent_processing_nodes`, могут остаться неудалённые узлы обработки. Этот параметр определяет период времени, по истечении которого эти узлы обработки могут быть безопасно удалены. Значение по умолчанию: `3600` (1 час). +## Настройки S3 \{#s3-settings\} -## Настройки, связанные с S3 {#s3-settings} +Движок поддерживает все настройки S3. Дополнительную информацию о настройках S3 см. [здесь](../../../engines/table-engines/integrations/s3.md). -Движок поддерживает все настройки, связанные с S3. Подробнее о настройках S3 см. [здесь](../../../engines/table-engines/integrations/s3.md). +## Ролевой доступ к S3 + -## Доступ к S3 на основе ролей {#s3-role-based-access} +Движок таблицы s3Queue поддерживает ролевую модель доступа. +См. документацию [здесь](/cloud/data-sources/secure-s3) с описанием шагов по настройке роли для доступа к вашему бакету. - - -Движок таблиц s3Queue поддерживает доступ на основе ролей. -Инструкции по настройке роли для доступа к вашему бакету см. в документации [здесь](/cloud/data-sources/secure-s3). - -После настройки роли можно передать `roleARN` через параметр `extra_credentials`, как показано ниже: +После настройки роли значение `roleARN` можно передать через параметр `extra_credentials`, как показано ниже: ```sql CREATE TABLE s3_table @@ -262,25 +354,24 @@ SETTINGS ``` -## Режим ordered для S3Queue {#ordered-mode} +## Упорядоченный режим (ordered) для S3Queue \{#ordered-mode\} -Режим обработки `S3Queue` позволяет хранить меньше метаданных в ZooKeeper, но имеет ограничение: файлы, добавленные позже по времени, должны иметь алфавитно-цифровые имена, которые идут дальше в порядке сортировки. +Режим обработки `S3Queue` позволяет хранить меньше метаданных в ZooKeeper, но имеет ограничение: файлы, добавленные позже по времени, должны иметь имена, которые в алфавитно-цифровом порядке больше имён ранее добавленных файлов. -Режим `ordered` для `S3Queue`, как и режим `unordered`, поддерживает настройку `(s3queue_)processing_threads_num` (префикс `s3queue_` необязателен), которая позволяет управлять количеством потоков, обрабатывающих файлы `S3` локально на сервере. -Кроме того, режим `ordered` также вводит другую настройку `(s3queue_)buckets`, которая означает «логические потоки». В распределённом сценарии, когда имеется несколько серверов с репликами таблицы `S3Queue`, эта настройка определяет количество единиц обработки. Например, каждый поток обработки на каждой реплике `S3Queue` будет пытаться заблокировать определённый `bucket` для обработки; каждый `bucket` привязывается к определённым файлам по хешу имени файла. Поэтому в распределённом сценарии настоятельно рекомендуется, чтобы значение настройки `(s3queue_)buckets` было как минимум равно количеству реплик или больше. Допустимо иметь количество buckets больше, чем количество реплик. Наиболее оптимальным сценарием является случай, когда значение настройки `(s3queue_)buckets` равно произведению `number_of_replicas` и `(s3queue_)processing_threads_num`. -Настройка `(s3queue_)processing_threads_num` не рекомендуется к использованию в версиях до `24.6`. +Режим `ordered` в `S3Queue`, так же как и `unordered`, поддерживает настройку `(s3queue_)processing_threads_num` (префикс `s3queue_` является необязательным), которая позволяет управлять количеством потоков, обрабатывающих файлы `S3` локально на сервере. +Кроме того, режим `ordered` вводит дополнительную настройку `(s3queue_)buckets`, которая означает «логические потоки». В распределённой конфигурации, когда есть несколько серверов с репликами таблиц `S3Queue`, эта настройка определяет количество единиц обработки. Например, каждый поток обработки на каждой реплике `S3Queue` будет пытаться захватить определённый `bucket` для обработки; каждый `bucket` сопоставляется определённым файлам по хэшу имени файла. Поэтому в распределённом сценарии настоятельно рекомендуется, чтобы значение настройки `(s3queue_)buckets` было как минимум равно количеству реплик или больше. Допустимо, если число бакетов больше количества реплик. Оптимальным будет сценарий, когда настройка `(s3queue_)buckets` равна произведению `number_of_replicas` и `(s3queue_)processing_threads_num`. +Использование настройки `(s3queue_)processing_threads_num` не рекомендуется до версии `24.6`. Настройка `(s3queue_)buckets` доступна начиная с версии `24.6`. +## Описание -## Description {#description} +`SELECT` мало полезен для потокового импорта (кроме отладки), потому что каждый файл можно импортировать только один раз. Более практично создавать потоки в реальном времени с помощью [материализованных представлений](../../../sql-reference/statements/create/view.md). Для этого: -`SELECT` не особенно полезен для потоковой загрузки данных (за исключением отладки), поскольку каждый файл может быть импортирован только один раз. Более практичным является создание потоков обработки в реальном времени с использованием [материализованных представлений](../../../sql-reference/statements/create/view.md). Для этого: +1. Используйте этот движок для создания таблицы, которая будет читать данные из указанного пути в S3 и рассматриваться как поток данных. +2. Создайте таблицу с требуемой структурой. +3. Создайте материализованное представление, которое преобразует данные из этого движка и помещает их в ранее созданную таблицу. -1. Используйте движок для создания таблицы, которая будет получать данные из указанного пути в S3, и рассматривайте её как поток данных. -2. Создайте таблицу с требуемой структурой. -3. Создайте материализованное представление, которое преобразует данные из движка и помещает их в ранее созданную таблицу. - -Когда `MATERIALIZED VIEW` подключается к движку, он начинает собирать данные в фоновом режиме. +Когда `MATERIALIZED VIEW` подключено к этому движку, оно начинает собирать данные в фоновом режиме. Пример: @@ -300,47 +391,44 @@ SETTINGS ``` -## Виртуальные столбцы {#virtual-columns} +## Виртуальные столбцы \{#virtual-columns\} - `_path` — Путь к файлу. - `_file` — Имя файла. - `_size` — Размер файла. - `_time` — Время создания файла. -Подробнее о виртуальных столбцах см. [здесь](../../../engines/table-engines/index.md#table_engines-virtual_columns). - +Дополнительную информацию о виртуальных столбцах см. [здесь](../../../engines/table-engines/index.md#table_engines-virtual_columns). -## Подстановочные символы в пути {#wildcards-in-path} +## Подстановочные символы в `path` \{#wildcards-in-path\} -Аргумент `path` может указывать на несколько файлов с использованием подстановочных символов в стиле bash. Для обработки файл должен существовать и соответствовать всему шаблону пути. Список файлов определяется во время выполнения запроса `SELECT` (а не в момент выполнения `CREATE`). +Аргумент `path` может задавать несколько файлов, используя подстановочные шаблоны в стиле bash. Чтобы файл был обработан, он должен существовать и полностью соответствовать шаблону пути. Перечень файлов определяется во время выполнения `SELECT` (а не в момент `CREATE`). -- `*` — Соответствует любому количеству любых символов, кроме `/`, включая пустую строку. -- `**` — Соответствует любому количеству любых символов, включая `/`, включая пустую строку. -- `?` — Соответствует любому одиночному символу. -- `{some_string,another_string,yet_another_one}` — Соответствует любой из строк `'some_string', 'another_string', 'yet_another_one'`. -- `{N..M}` — Соответствует любому числу в диапазоне от N до M, включая обе границы. N и M могут содержать ведущие нули, например `000..078`. +- `*` — Заменяет любое количество любых символов, кроме `/`, включая пустую строку. +- `**` — Заменяет любое количество любых символов, включая `/`, включая пустую строку. +- `?` — Заменяет ровно один произвольный символ. +- `{some_string,another_string,yet_another_one}` — Заменяет любую из строк `'some_string', 'another_string', 'yet_another_one'`. +- `{N..M}` — Заменяет любое число в диапазоне от N до M включительно. N и M могут содержать ведущие нули, например `000..078`. Конструкции с `{}` аналогичны табличной функции [remote](../../../sql-reference/table-functions/remote.md). +## Ограничения \{#limitations\} -## Ограничения {#limitations} +1. Дубликаты строк могут возникать в результате: -1. Дублирование строк может происходить в следующих случаях: +- во время парсинга происходит исключение в середине обработки файла, и включены повторные попытки через `s3queue_loading_retries`; -- возникает исключение во время парсинга в процессе обработки файла, и включены повторные попытки через параметр `s3queue_loading_retries`; +- `S3Queue` настроен на нескольких серверах, указывающих на один и тот же путь в ZooKeeper, и сессия Keeper завершается до того, как один из серверов успел зафиксировать обработанный файл, что может привести к тому, что другой сервер возьмет в обработку файл, который уже мог быть частично или полностью обработан первым сервером; однако это не актуально, начиная с версии 25.8, если `use_persistent_processing_nodes = 1`. -- `S3Queue` настроен на нескольких серверах, указывающих на один и тот же путь в ZooKeeper, и сессия keeper истекает до того, как один из серверов успевает зафиксировать обработанный файл, что может привести к тому, что другой сервер начнёт обработку файла, который мог быть частично или полностью обработан первым сервером; однако это не относится к версии 25.8 и выше при `use_persistent_processing_nodes = 1`. +- аварийного завершения работы сервера. -- происходит аварийное завершение работы сервера. +2. Если `S3Queue` настроен на нескольких серверах, указывающих на один и тот же путь в ZooKeeper, и используется режим `Ordered`, то `s3queue_loading_retries` не будет работать. Это будет скоро исправлено. -2. Если `S3Queue` настроен на нескольких серверах, указывающих на один и тот же путь в ZooKeeper, и используется режим `Ordered`, то параметр `s3queue_loading_retries` не будет работать. Эта проблема будет исправлена в ближайшее время. +## Интроспекция +Для интроспекции используйте неперсистентную таблицу `system.s3queue` и персистентную таблицу `system.s3queue_log`. -## Интроспекция {#introspection} - -Для интроспекции используйте таблицу `system.s3queue` (без сохранения состояния) и постоянную таблицу `system.s3queue_log`. - -1. `system.s3queue`. Эта таблица не сохраняет данные и отображает состояние `S3Queue` в памяти: какие файлы обрабатываются в данный момент, какие файлы обработаны или завершились с ошибкой. +1. `system.s3queue`. Эта таблица неперсистентная и отображает состояние `S3Queue` в памяти: какие файлы в данный момент обрабатываются, какие файлы уже обработаны или завершились с ошибкой. ```sql ┌─statement──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ @@ -357,7 +445,7 @@ SETTINGS `exception` String ) ENGINE = SystemS3Queue -COMMENT 'Contains in-memory state of S3Queue metadata and currently processed rows per file.' │ +COMMENT 'Содержит состояние метаданных S3Queue в памяти и текущее количество обработанных строк по каждому файлу.' │ └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ ``` @@ -368,26 +456,26 @@ COMMENT 'Contains in-memory state of S3Queue metadata and currently processed ro SELECT * FROM system.s3queue -Row 1: +Строка 1: ────── zookeeper_path: /clickhouse/s3queue/25ea5621-ae8c-40c7-96d0-cec959c5ab88/3b3f66a1-9866-4c2e-ba78-b6bfa154207e file_name: wikistat/original/pageviews-20150501-030000.gz rows_processed: 5068534 -status: Processed +status: Обработано processing_start_time: 2023-10-13 13:09:48 processing_end_time: 2023-10-13 13:10:31 ProfileEvents: {'ZooKeeperTransactions':3,'ZooKeeperGet':2,'ZooKeeperMulti':1,'SelectedRows':5068534,'SelectedBytes':198132283,'ContextLock':1,'S3QueueSetFileProcessingMicroseconds':2480,'S3QueueSetFileProcessedMicroseconds':9985,'S3QueuePullMicroseconds':273776,'LogTest':17} exception: ``` -2. `system.s3queue_log`. Постоянная таблица. Содержит ту же информацию, что и `system.s3queue`, но для обработанных (`processed`) и завершившихся с ошибкой (`failed`) файлов. +2. `system.s3queue_log`. Персистентная таблица. Содержит ту же информацию, что и `system.s3queue`, но для файлов со статусами `processed` и `failed`. -Структура таблицы: +Таблица имеет следующую структуру: ```sql SHOW CREATE TABLE system.s3queue_log -Query id: 0ad619c3-0f2a-4ee4-8b40-c73d86e04314 +ID запроса: 0ad619c3-0f2a-4ee4-8b40-c73d86e04314 ┌─statement──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ │ CREATE TABLE system.s3queue_log @@ -410,7 +498,7 @@ SETTINGS index_granularity = 8192 │ └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ ``` -Чтобы использовать `system.s3queue_log`, определите её конфигурацию в конфигурационном файле сервера: +Чтобы использовать `system.s3queue_log`, задайте его конфигурацию в файле конфигурации сервера: ```xml diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/index.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/index.md index 357aa5f16db..2f29d18402f 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/index.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/index.md @@ -11,38 +11,22 @@ doc_type: 'reference' # Семейство движков MergeTree -Табличные движки из семейства MergeTree являются ядром возможностей ClickHouse по хранению данных. Они предоставляют большинство функций для обеспечения отказоустойчивости и высокопроизводительного чтения данных: колоночное хранение, настраиваемое разбиение на партиции, разрежённый первичный индекс, вторичные индексы пропуска данных и т. д. +Табличные движки семейства MergeTree являются основой возможностей хранения данных в ClickHouse. Они предоставляют большинство функций для обеспечения отказоустойчивости и высокопроизводительного извлечения данных: колоночное хранение, настраиваемое партиционирование, разреженный первичный индекс, вторичные индексы с пропуском данных и т. д. -Базовый табличный движок [MergeTree](../../../engines/table-engines/mergetree-family/mergetree.md) можно считать движком по умолчанию для одиночных экземпляров ClickHouse, поскольку он универсален и практически применим для широкого спектра сценариев. +Базовый табличный движок [MergeTree](../../../engines/table-engines/mergetree-family/mergetree.md) можно считать табличным движком по умолчанию для однонодовых экземпляров ClickHouse, поскольку он универсален и практичен для широкого спектра сценариев использования. -Для промышленной эксплуатации предпочтительно использовать [ReplicatedMergeTree](../../../engines/table-engines/mergetree-family/replication.md), поскольку он добавляет отказоустойчивость ко всем возможностям обычного движка MergeTree. Дополнительным преимуществом является автоматическое дедуплицирование данных при ингестии, поэтому ПО может безопасно повторять попытку, если при вставке возникла сетевая ошибка. +Для промышленного использования рекомендуется [ReplicatedMergeTree](../../../engines/table-engines/mergetree-family/replication.md), поскольку он добавляет высокую доступность ко всем возможностям обычного движка MergeTree. Дополнительным преимуществом является автоматическая дедупликация данных при их загрузке, что позволяет безопасно повторять операцию в случае возникновения сетевых проблем во время вставки. -Все остальные движки семейства MergeTree добавляют дополнительную функциональность для некоторых специфических сценариев использования. Обычно это реализуется как дополнительная обработка данных в фоновом режиме. +Все остальные движки семейства MergeTree добавляют дополнительную функциональность для специфических сценариев использования. Обычно это реализуется в виде дополнительной обработки данных в фоновом режиме. -Основной недостаток движков MergeTree состоит в том, что они достаточно «тяжёлые». Поэтому типичный подход — не создавать их слишком много. Если вам нужно множество небольших таблиц, например для временных данных, рассмотрите использование [семейства движков Log](../../../engines/table-engines/log-family/index.md). +Основным недостатком движков MergeTree является то, что они довольно ресурсоёмкие. Поэтому типичным подходом является использование не слишком большого их количества. Если вам требуется много небольших таблиц, например для временных данных, рассмотрите [семейство движков Log](../../../engines/table-engines/log-family/index.md). -{/* Таблица оглавления для этой страницы автоматически генерируется скриптом - https://github.com/ClickHouse/clickhouse-docs/blob/main/scripts/autogenerate-table-of-contents.sh - из полей YAML front matter: slug, description, title. + -{/*AUTOGENERATED_START*/ } - -| Page | Description | -| ----------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [MergeTree table engine](/engines/table-engines/mergetree-family/mergetree) | Движки таблиц семейства `MergeTree` спроектированы для высокой скорости приёма и обработки очень больших объёмов данных. | -| [Replicated* table engines](/engines/table-engines/mergetree-family/replication) | Обзор репликации данных с использованием семейства движков таблиц Replicated* в ClickHouse. | -| [Custom Partitioning Key](/engines/table-engines/mergetree-family/custom-partitioning-key) | Как добавить пользовательский ключ партиционирования в таблицы MergeTree. | -| [ReplacingMergeTree table engine](/engines/table-engines/mergetree-family/replacingmergetree) | Отличается от MergeTree тем, что удаляет дублирующиеся записи с одинаковым значением ключа сортировки (секция таблицы `ORDER BY`, а не `PRIMARY KEY`). | -| [CoalescingMergeTree table engine](/engines/table-engines/mergetree-family/coalescingmergetree) | CoalescingMergeTree наследует возможности движка MergeTree. Его ключевая особенность — автоматическое сохранение последнего ненулевого значения каждого столбца при слиянии частей данных. | -| [SummingMergeTree table engine](/engines/table-engines/mergetree-family/summingmergetree) | SummingMergeTree наследует возможности движка MergeTree. Его ключевая особенность — автоматическое суммирование числовых данных при слиянии частей данных. | -| [AggregatingMergeTree table engine](/engines/table-engines/mergetree-family/aggregatingmergetree) | Заменяет все строки с одинаковым первичным ключом (или, точнее, с одинаковым [ключом сортировки](../../../engines/table-engines/mergetree-family/mergetree.md)) одной строкой (в пределах одной части данных), которая хранит комбинацию состояний агрегатных функций. | -| [CollapsingMergeTree table engine](/engines/table-engines/mergetree-family/collapsingmergetree) | Наследует возможности MergeTree, но добавляет логику схлопывания строк в процессе слияния. | -| [VersionedCollapsingMergeTree table engine](/engines/table-engines/mergetree-family/versionedcollapsingmergetree) | Обеспечивает быструю запись постоянно изменяющихся состояний объектов и фоновое удаление устаревших состояний объектов. | -| [GraphiteMergeTree table engine](/engines/table-engines/mergetree-family/graphitemergetree) | Предназначен для прореживания и агрегирования/усреднения (rollup) данных Graphite. | -| [Exact and Approximate Vector Search](/engines/table-engines/mergetree-family/annindexes) | Документация по точному и приближенному векторному поиску. | -| [Full-text Search using Text Indexes](/engines/table-engines/mergetree-family/invertedindexes) | Позволяет быстро находить искомые слова и фразы в тексте. | - -{/*AUTOGENERATED_END*/ } + + diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/mergetree.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/mergetree.md index c7a12b9bbc4..42fbc7f2f01 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/mergetree.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/mergetree.md @@ -1,9 +1,9 @@ --- -description: 'Движки таблиц семейства `MergeTree` разработаны для высокой скорости загрузки и обработки огромных объемов данных.' +description: 'Семейство табличных движков `MergeTree` предназначено для высоких скоростей приёма данных и работы с очень большими объёмами данных.' sidebar_label: 'MergeTree' sidebar_position: 11 slug: /engines/table-engines/mergetree-family/mergetree -title: 'Движок таблицы MergeTree' +title: 'Табличный движок MergeTree' doc_type: 'reference' --- @@ -11,30 +11,28 @@ import ExperimentalBadge from '@theme/badges/ExperimentalBadge'; import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -# Движок таблиц MergeTree +# Движок таблицы MergeTree -Движок `MergeTree` и другие движки семейства `MergeTree` (например, `ReplacingMergeTree`, `AggregatingMergeTree`) являются наиболее часто используемыми и наиболее надежными движками таблиц в ClickHouse. +Движок `MergeTree` и другие движки семейства `MergeTree` (например, `ReplacingMergeTree`, `AggregatingMergeTree`) являются наиболее часто используемыми и наиболее надёжными движками таблиц в ClickHouse. -Движки таблиц семейства `MergeTree` разработаны для высокой скорости загрузки данных и работы с очень большими объемами данных. -Операции вставки создают части таблицы (table parts), которые фоновым процессом сливаются с другими частями таблицы. +Движки таблиц семейства `MergeTree` спроектированы для высокой скорости приёма данных и работы с очень большими объёмами. +Операции вставки создают части таблицы, которые затем объединяются фоновым процессом с другими частями таблицы. -Основные особенности движков таблиц семейства `MergeTree`: +Основные особенности движков таблиц семейства `MergeTree`. -- Первичный ключ таблицы определяет порядок сортировки внутри каждой части таблицы (кластерный индекс). При этом первичный ключ ссылается не на отдельные строки, а на блоки по 8192 строки, называемые гранулами. Это делает первичные ключи огромных наборов данных достаточно компактными, чтобы оставаться загруженными в оперативной памяти, при этом обеспечивая быстрый доступ к данным на диске. +- Первичный ключ таблицы определяет порядок сортировки внутри каждой части таблицы (кластерный индекс). При этом первичный ключ указывает не на отдельные строки, а на блоки по 8192 строки, которые называются гранулами. Это делает первичные ключи для очень больших наборов данных достаточно компактными, чтобы оставаться загруженными в основную память, при этом обеспечивая быстрый доступ к данным на диске. -- Таблицы могут быть секционированы (разделены на партиции) с использованием произвольного выражения партиционирования. Отсечение партиций (partition pruning) обеспечивает пропуск чтения партиций, если запрос позволяет это сделать. +- Таблицы могут быть разбиты на разделы (партиции) с использованием произвольного выражения секционирования. Исключение разделов (partition pruning) гарантирует, что такие разделы пропускаются при чтении, когда это допускает запрос. -- Данные могут реплицироваться между несколькими узлами кластера для обеспечения высокой доступности, отказоустойчивости и обновлений без простоя. См. раздел [Data replication](/engines/table-engines/mergetree-family/replication.md). +- Данные могут реплицироваться между несколькими узлами кластера для обеспечения высокой доступности, отказоустойчивости и обновлений без простоя. См. раздел [Репликация данных](/engines/table-engines/mergetree-family/replication.md). -- Движки таблиц `MergeTree` поддерживают различные типы статистики и методы семплирования, которые помогают в оптимизации запросов. +- Движки таблиц `MergeTree` поддерживают различные виды статистики и методы выборочного чтения (sampling), помогающие оптимизировать запросы. :::note -Несмотря на схожее название, движок [Merge](/engines/table-engines/special/merge) отличается от движков `*MergeTree`. +Несмотря на похожее название, движок [Merge](/engines/table-engines/special/merge) отличается от движков `*MergeTree`. ::: - - -## Создание таблиц {#table_engine-mergetree-creating-a-table} +## Создание таблиц ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -59,132 +57,129 @@ ORDER BY expr [SETTINGS name = value, ...] ``` -Подробное описание параметров см. в описании оператора [CREATE TABLE](/sql-reference/statements/create/table.md). +Подробное описание параметров см. в описании оператора [CREATE TABLE](/sql-reference/statements/create/table.md) -### Секции запроса {#mergetree-query-clauses} -#### ENGINE {#engine} +### Части запроса \{#mergetree-query-clauses\} -`ENGINE` — имя и параметры движка. `ENGINE = MergeTree()`. Движок `MergeTree` не имеет параметров. +#### ENGINE \{#engine\} -#### ORDER BY {#order_by} +`ENGINE` — имя и параметры движка таблицы. `ENGINE = MergeTree()`. Движок таблицы `MergeTree` не имеет параметров. + +#### ORDER BY \{#order_by\} `ORDER BY` — ключ сортировки. -Кортеж из имен столбцов или произвольных выражений. Пример: `ORDER BY (CounterID + 1, EventDate)`. +Кортеж имён столбцов или произвольных выражений. Пример: `ORDER BY (CounterID + 1, EventDate)`. -Если первичный ключ не определен (т.е. секция `PRIMARY KEY` не указана), ClickHouse использует ключ сортировки в качестве первичного ключа. +Если первичный ключ не определён (то есть `PRIMARY KEY` не был указан), ClickHouse использует ключ сортировки в качестве первичного ключа. Если сортировка не требуется, можно использовать синтаксис `ORDER BY tuple()`. -Альтернативно, если включена настройка `create_table_empty_primary_key_by_default`, секция `ORDER BY ()` неявно добавляется к операторам `CREATE TABLE`. См. [Выбор первичного ключа](#selecting-a-primary-key). +Либо, если включена настройка `create_table_empty_primary_key_by_default`, `ORDER BY ()` неявно добавляется к операторам `CREATE TABLE`. См. раздел [Выбор первичного ключа](#selecting-a-primary-key). -#### PARTITION BY {#partition-by} +#### PARTITION BY \{#partition-by\} -`PARTITION BY` — [ключ партиционирования](/engines/table-engines/mergetree-family/custom-partitioning-key.md). Необязательный параметр. В большинстве случаев ключ партиционирования не требуется, а если партиционирование необходимо, обычно не нужен ключ более детальный, чем по месяцам. Партиционирование не ускоряет запросы (в отличие от выражения ORDER BY). Не следует использовать слишком детальное партиционирование. Не партиционируйте данные по идентификаторам или именам клиентов (вместо этого сделайте идентификатор или имя клиента первым столбцом в выражении ORDER BY). +`PARTITION BY` — [ключ партиционирования](/engines/table-engines/mergetree-family/custom-partitioning-key.md). Необязателен. В большинстве случаев ключ партиционирования не нужен, а если и требуется партиционирование, как правило, нет необходимости использовать ключ с более высокой детализацией, чем по месяцам. Партиционирование не ускоряет выполнение запросов (в отличие от выражения ORDER BY). Никогда не используйте слишком мелкое партиционирование. Не разбивайте данные по идентификаторам или именам клиентов (вместо этого сделайте идентификатор или имя клиента первым столбцом в выражении ORDER BY). -Для партиционирования по месяцам используйте выражение `toYYYYMM(date_column)`, где `date_column` — столбец с датой типа [Date](/sql-reference/data-types/date.md). Имена партиций в этом случае имеют формат `"YYYYMM"`. +Для партиционирования по месяцам используйте выражение `toYYYYMM(date_column)`, где `date_column` — это столбец с датой типа [Date](/sql-reference/data-types/date.md). Имена партиций в этом случае имеют формат `"YYYYMM"`. -#### PRIMARY KEY {#primary-key} +#### PRIMARY KEY \{#primary-key\} -`PRIMARY KEY` — первичный ключ, если он [отличается от ключа сортировки](#choosing-a-primary-key-that-differs-from-the-sorting-key). Необязательный параметр. +`PRIMARY KEY` — первичный ключ, если он [отличается от сортировочного ключа](#choosing-a-primary-key-that-differs-from-the-sorting-key). Необязательный параметр. -Указание ключа сортировки (с помощью секции `ORDER BY`) неявно задает первичный ключ. -Обычно нет необходимости указывать первичный ключ дополнительно к ключу сортировки. +Указание сортировочного ключа (с помощью клаузы `ORDER BY`) неявно задаёт первичный ключ. +Обычно нет необходимости указывать первичный ключ дополнительно к сортировочному ключу. -#### SAMPLE BY {#sample-by} +#### SAMPLE BY \{#sample-by\} -`SAMPLE BY` — выражение для сэмплирования. Необязательный параметр. +`SAMPLE BY` — выражение для семплирования (sampling expression). Необязательное выражение. -Если указано, оно должно содержаться в первичном ключе. -Выражение для сэмплирования должно возвращать беззнаковое целое число. +Если указано, оно должно входить в первичный ключ. +Результат этого выражения должен быть беззнаковым целым числом. Пример: `SAMPLE BY intHash32(UserID) ORDER BY (CounterID, EventDate, intHash32(UserID))`. -#### TTL {#ttl} +#### TTL \{#ttl\} -`TTL` — список правил, определяющих длительность хранения строк и логику автоматического перемещения частей [между дисками и томами](#table_engine-mergetree-multiple-volumes). Необязательный параметр. +`TTL` — список правил, которые задают срок хранения строк и логику автоматического перемещения частей [между дисками и томами](#table_engine-mergetree-multiple-volumes). Необязательный параметр. Выражение должно возвращать `Date` или `DateTime`, например, `TTL date + INTERVAL 1 DAY`. - -Тип правила `DELETE|TO DISK 'xxx'|TO VOLUME 'xxx'|GROUP BY` определяет действие, которое будет выполнено с частью данных при выполнении условия выражения (достижении текущего времени): удаление устаревших строк, перемещение части (если выражение выполнено для всех строк в части) на указанный диск (`TO DISK 'xxx'`) или том (`TO VOLUME 'xxx'`), либо агрегирование значений в устаревших строках. Тип правила по умолчанию — удаление (`DELETE`). Можно указать список из нескольких правил, но должно быть не более одного правила `DELETE`. +Тип правила `DELETE|TO DISK 'xxx'|TO VOLUME 'xxx'|GROUP BY` определяет действие, которое выполняется с частью, если выражение удовлетворяется (достигает текущего времени): удаление истёкших строк, перемещение части (если выражение выполняется для всех строк в части) на указанный диск (`TO DISK 'xxx'`) или на том (`TO VOLUME 'xxx'`), либо агрегация значений в истёкших строках. Тип правила по умолчанию — удаление (`DELETE`). Можно задать список из нескольких правил, но не более одного правила `DELETE`. Подробнее см. [TTL для столбцов и таблиц](#table_engine-mergetree-ttl) -#### SETTINGS {#settings} +#### ПАРАМЕТРЫ -См. [Настройки MergeTree](../../../operations/settings/merge-tree-settings.md). +См. [настройки MergeTree](../../../operations/settings/merge-tree-settings.md). -**Пример настройки секций** +**Пример настройки параметра sections** ```sql ENGINE MergeTree() PARTITION BY toYYYYMM(EventDate) ORDER BY (CounterID, EventDate, intHash32(UserID)) SAMPLE BY intHash32(UserID) SETTINGS index_granularity=8192 ``` -В примере задано партиционирование по месяцам. +В этом примере мы задаём секционирование по месяцам. -Также задано выражение для сэмплирования в виде хеша по идентификатору пользователя. Это позволяет псевдослучайным образом перемешать данные в таблице для каждого `CounterID` и `EventDate`. Если при выборке данных указать секцию [SAMPLE](/sql-reference/statements/select/sample), ClickHouse вернёт равномерную псевдослучайную выборку данных для подмножества пользователей. +Мы также задаём выражение для выборочного чтения данных в виде хэша по ID пользователя. Это позволяет псевдослучайно распределить данные в таблице для каждого `CounterID` и `EventDate`. Если вы укажете предложение [SAMPLE](/sql-reference/statements/select/sample) при выборке данных, ClickHouse вернёт равномерную псевдослучайную выборку данных для подмножества пользователей. -Настройку `index_granularity` можно опустить, так как 8192 является значением по умолчанию. +Параметр `index_granularity` можно опустить, так как 8192 — это значение по умолчанию.
+ Устаревший метод создания таблицы -Устаревший метод создания таблицы - -:::note -Не используйте этот метод в новых проектах. По возможности переведите старые проекты на метод, описанный выше. -::: - -```sql -CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] -( - name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1], - name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2], - ... -) ENGINE [=] MergeTree(date-column [, sampling_expression], (primary, key), index_granularity) -``` + :::note + Не используйте этот метод в новых проектах. По возможности переведите старые проекты на метод, описанный выше. + ::: -**Параметры MergeTree()** + ```sql + CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] + ( + name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1], + name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2], + ... + ) ENGINE [=] MergeTree(date-column [, sampling_expression], (primary, key), index_granularity) + ``` -- `date-column` — Имя столбца типа [Date](/sql-reference/data-types/date.md). ClickHouse автоматически создаёт партиции по месяцам на основе этого столбца. Имена партиций имеют формат `"YYYYMM"`. -- `sampling_expression` — Выражение для сэмплирования. -- `(primary, key)` — Первичный ключ. Тип: [Tuple()](/sql-reference/data-types/tuple.md) -- `index_granularity` — Гранулярность индекса. Количество строк данных между «метками» индекса. Значение 8192 подходит для большинства задач. + **Параметры MergeTree()** -**Пример** + * `date-column` — Имя столбца типа [Date](/sql-reference/data-types/date.md). ClickHouse автоматически создаёт партиции по месяцам на основе этого столбца. Имена партиций имеют формат `"YYYYMM"`. + * `sampling_expression` — Выражение для выборочного чтения данных. + * `(primary, key)` — Первичный ключ. Тип: [Tuple()](/sql-reference/data-types/tuple.md) + * `index_granularity` — Гранулярность индекса. Количество строк данных между «метками» индекса. Значение 8192 подходит для большинства задач. -```sql -MergeTree(EventDate, intHash32(UserID), (CounterID, EventDate, intHash32(UserID)), 8192) -``` + **Пример** -Движок `MergeTree` настраивается так же, как в примере выше для основного метода конфигурации движка. + ```sql + MergeTree(EventDate, intHash32(UserID), (CounterID, EventDate, intHash32(UserID)), 8192) + ``` + Движок `MergeTree` настраивается так же, как в примере выше для основного метода конфигурации движка.
-## Хранение данных {#mergetree-data-storage} - -Таблица состоит из кусков данных, отсортированных по первичному ключу. +## Хранение данных \{#mergetree-data-storage\} -При вставке данных в таблицу создаются отдельные куски данных, каждый из которых лексикографически сортируется по первичному ключу. Например, если первичный ключ — `(CounterID, Date)`, данные в куске сортируются по `CounterID`, а внутри каждого `CounterID` упорядочиваются по `Date`. +Таблица состоит из частей данных, отсортированных по первичному ключу. -Данные, относящиеся к разным партициям, разделяются на разные куски. В фоновом режиме ClickHouse объединяет куски данных для более эффективного хранения. Куски, принадлежащие разным партициям, не объединяются. Механизм слияния не гарантирует, что все строки с одинаковым первичным ключом окажутся в одном куске данных. +При вставке данных в таблицу создаются отдельные части данных, и каждая из них лексикографически сортируется по первичному ключу. Например, если первичный ключ — `(CounterID, Date)`, данные в части сортируются по `CounterID`, а внутри каждого `CounterID` упорядочиваются по `Date`. -Куски данных могут храниться в формате `Wide` или `Compact`. В формате `Wide` каждый столбец хранится в отдельном файле файловой системы, в формате `Compact` все столбцы хранятся в одном файле. Формат `Compact` может использоваться для повышения производительности при небольших и частых вставках. +Данные, принадлежащие разным партициям, разделяются на отдельные части. В фоновом режиме ClickHouse сливает части данных для более эффективного хранения. Части, принадлежащие разным партициям, не сливаются. Механизм слияния не гарантирует, что все строки с одинаковым первичным ключом окажутся в одной и той же части. -Формат хранения данных управляется настройками движка таблицы `min_bytes_for_wide_part` и `min_rows_for_wide_part`. Если количество байтов или строк в куске данных меньше значения соответствующей настройки, кусок хранится в формате `Compact`. В противном случае он хранится в формате `Wide`. Если ни одна из этих настроек не задана, куски данных хранятся в формате `Wide`. +Части данных могут храниться в форматах `Wide` или `Compact`. В формате `Wide` каждый столбец хранится в отдельном файле в файловой системе, в формате `Compact` все столбцы хранятся в одном файле. Формат `Compact` может использоваться для повышения производительности при небольших и частых вставках. -Каждый кусок данных логически разделён на гранулы. Гранула — это наименьший неделимый набор данных, который ClickHouse читает при выборке данных. ClickHouse не разделяет строки или значения, поэтому каждая гранула всегда содержит целое число строк. Первая строка гранулы отмечается значением первичного ключа для этой строки. Для каждого куска данных ClickHouse создаёт индексный файл, в котором хранятся метки. Для каждого столбца, независимо от того, входит ли он в первичный ключ или нет, ClickHouse также сохраняет те же метки. Эти метки позволяют находить данные непосредственно в файлах столбцов. +Формат хранения данных контролируется параметрами движка таблицы `min_bytes_for_wide_part` и `min_rows_for_wide_part`. Если количество байт или строк в части данных меньше соответствующего значения параметра, часть хранится в формате `Compact`. В противном случае она хранится в формате `Wide`. Если ни один из этих параметров не задан, части данных хранятся в формате `Wide`. -Размер гранулы ограничивается настройками движка таблицы `index_granularity` и `index_granularity_bytes`. Количество строк в грануле находится в диапазоне `[1, index_granularity]` в зависимости от размера строк. Размер гранулы может превышать `index_granularity_bytes`, если размер одной строки больше значения настройки. В этом случае размер гранулы равен размеру строки. +Каждая часть данных логически разделена на гранулы. Гранула — это наименьший неделимый набор данных, который ClickHouse читает при выборке. ClickHouse не разбивает строки или значения, поэтому каждая гранула всегда содержит целое число строк. Первая строка гранулы помечается значением первичного ключа для этой строки. Для каждой части данных ClickHouse создает файл индекса, в котором хранятся эти метки. Для каждого столбца, независимо от того, входит он в первичный ключ или нет, ClickHouse также хранит те же метки. Эти метки позволяют находить данные непосредственно в файлах столбцов. +Размер гранулы ограничивается параметрами движка таблицы `index_granularity` и `index_granularity_bytes`. Число строк в грануле находится в диапазоне `[1, index_granularity]` и зависит от размера строк. Размер гранулы может превышать `index_granularity_bytes`, если размер одной строки больше значения этого параметра. В этом случае размер гранулы равен размеру строки. -## Первичные ключи и индексы в запросах {#primary-keys-and-indexes-in-queries} +## Первичные ключи и индексы в запросах -Рассмотрим первичный ключ `(CounterID, Date)` в качестве примера. В этом случае сортировка и индекс могут быть проиллюстрированы следующим образом: +Рассмотрим в качестве примера первичный ключ `(CounterID, Date)`. В этом случае сортировку и индекс можно представить следующим образом: ```text -Все данные: [---------------------------------------------] +Все данные: [---------------------------------------------] CounterID: [aaaaaaaaaaaaaaaaaabbbbcdeeeeeeeeeeeeefgggggggghhhhhhhhhiiiiiiiiikllllllll] Date: [1111111222222233331233211111222222333211111112122222223111112223311122333] Метки: | | | | | | | | | | | @@ -192,63 +187,64 @@ Date: [111111122222223333123321111122222233321111111212222222311111222 Номера меток: 0 1 2 3 4 5 6 7 8 9 10 ``` -Если в запросе данных указано: +Если в запросе к данным указано: -- `CounterID in ('a', 'h')`, сервер читает данные в диапазонах меток `[0, 3)` и `[6, 8)`. -- `CounterID IN ('a', 'h') AND Date = 3`, сервер читает данные в диапазонах меток `[1, 3)` и `[7, 8)`. -- `Date = 3`, сервер читает данные в диапазоне меток `[1, 10]`. +* `CounterID in ('a', 'h')`, сервер читает данные в диапазонах меток `[0, 3)` и `[6, 8)`. +* `CounterID IN ('a', 'h') AND Date = 3`, сервер читает данные в диапазонах меток `[1, 3)` и `[7, 8)`. +* `Date = 3`, сервер читает данные в диапазоне меток `[1, 10]`. -Приведенные выше примеры показывают, что использование индекса всегда эффективнее полного сканирования. +Приведённые выше примеры показывают, что использование индекса всегда эффективнее, чем полное сканирование. -Разреженный индекс допускает чтение дополнительных данных. При чтении одного диапазона первичного ключа может быть прочитано до `index_granularity * 2` дополнительных строк в каждом блоке данных. +Разреженный индекс допускает чтение лишних данных. При чтении одного диапазона первичного ключа в каждом блоке данных может быть прочитано до `index_granularity * 2` дополнительных строк. -Разреженные индексы позволяют работать с очень большим количеством строк таблицы, поскольку в большинстве случаев такие индексы помещаются в оперативной памяти компьютера. +Разреженные индексы позволяют работать с очень большим числом строк в таблице, потому что в большинстве случаев такие индексы помещаются в оперативную память. -ClickHouse не требует уникальности первичного ключа. Вы можете вставлять несколько строк с одинаковым первичным ключом. +ClickHouse не требует уникального первичного ключа. Вы можете вставлять несколько строк с одинаковым первичным ключом. -Вы можете использовать выражения типа `Nullable` в секциях `PRIMARY KEY` и `ORDER BY`, но это крайне не рекомендуется. Чтобы разрешить эту возможность, включите настройку [allow_nullable_key](/operations/settings/merge-tree-settings/#allow_nullable_key). Для значений `NULL` в секции `ORDER BY` применяется принцип [NULLS_LAST](/sql-reference/statements/select/order-by.md/#sorting-of-special-values). +Вы можете использовать выражения типа `Nullable` в выражениях `PRIMARY KEY` и `ORDER BY`, но это настоятельно не рекомендуется. Чтобы включить эту возможность, активируйте настройку [allow_nullable_key](/operations/settings/merge-tree-settings/#allow_nullable_key). Принцип [NULLS_LAST](/sql-reference/statements/select/order-by.md/#sorting-of-special-values) применяется к значениям `NULL` в выражении `ORDER BY`. -### Выбор первичного ключа {#selecting-a-primary-key} -Количество столбцов в первичном ключе явно не ограничено. В зависимости от структуры данных вы можете включить в первичный ключ больше или меньше столбцов. Это может: +### Выбор первичного ключа \{#selecting-a-primary-key\} -- Улучшить производительность индекса. +Количество столбцов в первичном ключе явно не ограничено. В зависимости от структуры данных вы можете включать больше или меньше столбцов в первичный ключ. Это может: - Если первичный ключ — это `(a, b)`, то добавление еще одного столбца `c` улучшит производительность, если выполняются следующие условия: - - Существуют запросы с условием на столбец `c`. - - Длинные диапазоны данных (в несколько раз длиннее, чем `index_granularity`) с идентичными значениями для `(a, b)` встречаются часто. Другими словами, когда добавление еще одного столбца позволяет пропускать довольно длинные диапазоны данных. +- Повысить производительность индекса. + + Если первичный ключ — `(a, b)`, то добавление дополнительного столбца `c` улучшит производительность, если выполняются следующие условия: + + - Есть запросы с условием по столбцу `c`. + - Длинные диапазоны данных (в несколько раз длиннее, чем `index_granularity`) с одинаковыми значениями для `(a, b)` встречаются часто. Другими словами, добавление еще одного столбца позволяет пропускать достаточно длинные диапазоны данных. - Улучшить сжатие данных. - ClickHouse сортирует данные по первичному ключу, поэтому чем выше согласованность данных, тем лучше сжатие. + ClickHouse сортирует данные по первичному ключу, поэтому чем выше упорядоченность, тем лучше сжатие. - Обеспечить дополнительную логику при слиянии частей данных в движках [CollapsingMergeTree](/engines/table-engines/mergetree-family/collapsingmergetree) и [SummingMergeTree](/engines/table-engines/mergetree-family/summingmergetree.md). - В этом случае имеет смысл указать _ключ сортировки_, отличающийся от первичного ключа. - -Длинный первичный ключ негативно повлияет на производительность вставки и потребление памяти, но дополнительные столбцы в первичном ключе не влияют на производительность ClickHouse при выполнении запросов `SELECT`. + В этом случае имеет смысл указать *ключ сортировки*, отличающийся от первичного ключа. -Вы можете создать таблицу без первичного ключа, используя синтаксис `ORDER BY tuple()`. В этом случае ClickHouse хранит данные в порядке вставки. Если вы хотите сохранить порядок данных при вставке данных запросами `INSERT ... SELECT`, установите [max_insert_threads = 1](/operations/settings/settings#max_insert_threads). +Длинный первичный ключ негативно влияет на производительность операций вставки и потребление памяти, но дополнительные столбцы в первичном ключе не влияют на производительность ClickHouse при выполнении `SELECT`‑запросов. -Для выборки данных в исходном порядке используйте [однопоточные](/operations/settings/settings.md/#max_threads) запросы `SELECT`. +Вы можете создать таблицу без первичного ключа, используя синтаксис `ORDER BY tuple()`. В этом случае ClickHouse хранит данные в порядке вставки. Если вы хотите сохранить порядок данных при вставке через запросы `INSERT ... SELECT`, установите [max_insert_threads = 1](/operations/settings/settings#max_insert_threads). -### Выбор первичного ключа, отличающегося от ключа сортировки {#choosing-a-primary-key-that-differs-from-the-sorting-key} +Чтобы выбирать данные в исходном порядке, используйте [однопоточные](/operations/settings/settings.md/#max_threads) `SELECT`‑запросы. +### Выбор первичного ключа, отличного от ключа сортировки \{#choosing-a-primary-key-that-differs-from-the-sorting-key\} -Возможно указать первичный ключ (выражение, значения которого записываются в индексный файл для каждой отметки), отличающийся от ключа сортировки (выражения для сортировки строк в частях данных). В этом случае кортеж выражения первичного ключа должен быть префиксом кортежа выражения ключа сортировки. +Можно задать первичный ключ (выражение со значениями, которые записываются в файл индекса для каждой метки), отличающийся от ключа сортировки (выражение для сортировки строк в частях данных). В этом случае кортеж выражений первичного ключа должен быть префиксом кортежа выражений ключа сортировки. Эта возможность полезна при использовании движков таблиц [SummingMergeTree](/engines/table-engines/mergetree-family/summingmergetree.md) и -[AggregatingMergeTree](/engines/table-engines/mergetree-family/aggregatingmergetree.md). В типичном случае при использовании этих движков таблица имеет два типа столбцов: _измерения_ и _метрики_. Типичные запросы агрегируют значения столбцов метрик с произвольным `GROUP BY` и фильтрацией по измерениям. Поскольку SummingMergeTree и AggregatingMergeTree агрегируют строки с одинаковым значением ключа сортировки, естественно добавить в него все измерения. В результате выражение ключа состоит из длинного списка столбцов, и этот список необходимо часто обновлять при добавлении новых измерений. +[AggregatingMergeTree](/engines/table-engines/mergetree-family/aggregatingmergetree.md). В типичном случае при использовании этих движков таблица содержит два типа столбцов: *измерения* и *показатели*. Типичные запросы агрегируют значения столбцов-показателей с произвольным `GROUP BY` и фильтрацией по измерениям. Поскольку SummingMergeTree и AggregatingMergeTree агрегируют строки с одинаковым значением ключа сортировки, естественно включить в него все измерения. В результате выражение ключа состоит из длинного списка столбцов, и этот список необходимо часто обновлять при добавлении новых измерений. -В этом случае имеет смысл оставить в первичном ключе только несколько столбцов, которые обеспечат эффективное сканирование диапазонов, и добавить остальные столбцы измерений в кортеж ключа сортировки. +В этом случае имеет смысл оставить в первичном ключе только несколько столбцов, которые обеспечат эффективное диапазонное сканирование, а оставшиеся столбцы-измерения добавить в кортеж ключа сортировки. -[ALTER](/sql-reference/statements/alter/index.md) ключа сортировки является лёгкой операцией, поскольку при одновременном добавлении нового столбца в таблицу и в ключ сортировки существующие части данных не требуют изменения. Так как старый ключ сортировки является префиксом нового ключа сортировки, а во вновь добавленном столбце нет данных, данные отсортированы как по старому, так и по новому ключу сортировки в момент модификации таблицы. +[ALTER](/sql-reference/statements/alter/index.md) ключа сортировки — это лёгкая операция, потому что когда новый столбец одновременно добавляется в таблицу и в ключ сортировки, существующие части данных не нужно изменять. Поскольку старый ключ сортировки является префиксом нового ключа сортировки и в только что добавленном столбце ещё нет данных, данные на момент изменения таблицы отсортированы как по старому, так и по новому ключам сортировки. -### Использование индексов и партиций в запросах {#use-of-indexes-and-partitions-in-queries} +### Использование индексов и партиций в запросах -Для запросов `SELECT` ClickHouse анализирует, может ли быть использован индекс. Индекс может быть использован, если в секции `WHERE/PREWHERE` присутствует выражение (как один из элементов конъюнкции или полностью), представляющее операцию сравнения на равенство или неравенство, или если оно содержит `IN` или `LIKE` с фиксированным префиксом для столбцов или выражений, которые входят в первичный ключ или ключ партиционирования, или для определённых частично повторяющихся функций этих столбцов, или логических отношений этих выражений. +Для запросов `SELECT` ClickHouse анализирует, может ли быть использован индекс. Индекс может быть использован, если предложение `WHERE/PREWHERE` содержит выражение (как один из элементов конъюнкции или целиком), представляющее собой операцию сравнения на равенство или неравенство, или если оно содержит `IN` или `LIKE` с фиксированным префиксом по столбцам или выражениям, входящим в первичный ключ или ключ партиционирования, или по определённым частично повторяющимся функциям этих столбцов, или логические комбинации этих выражений. -Таким образом, возможно быстро выполнять запросы по одному или нескольким диапазонам первичного ключа. В этом примере запросы будут выполняться быстро для конкретного тега отслеживания, для конкретного тега и диапазона дат, для конкретного тега и даты, для нескольких тегов с диапазоном дат и так далее. +Таким образом, можно быстро выполнять запросы по одному или нескольким диапазонам первичного ключа. В этом примере запросы будут выполняться быстро при выборке по конкретному тегу отслеживания, по конкретному тегу и диапазону дат, по конкретному тегу и дате, по нескольким тегам с диапазоном дат и так далее. Рассмотрим движок, настроенный следующим образом: @@ -259,7 +255,7 @@ ORDER BY (CounterID, EventDate) SETTINGS index_granularity=8192 ``` -В этом случае в запросах: +В таком случае в запросах: ```sql SELECT count() FROM table @@ -277,42 +273,42 @@ AND CounterID IN (101500, 731962, 160656) AND (CounterID = 101500 OR EventDate != toDate('2014-05-01')) ``` -ClickHouse будет использовать индекс первичного ключа для отсечения неподходящих данных и ключ месячного партиционирования для отсечения партиций, находящихся в неподходящих диапазонах дат. +ClickHouse будет использовать индекс по первичному ключу для отсечения нерелевантных данных и ежемесячный ключ партиционирования для отсечения партиций, попадающих в неподходящие диапазоны дат. -Приведённые выше запросы показывают, что индекс используется даже для сложных выражений. Чтение из таблицы организовано таким образом, что использование индекса не может быть медленнее полного сканирования. +Приведённые выше запросы показывают, что индекс используется даже для сложных выражений. Чтение из таблицы организовано так, что использование индекса не может быть медленнее полного сканирования. -В примере ниже индекс не может быть использован. +В приведённом ниже примере индекс использоваться не будет. ```sql SELECT count() FROM table WHERE CounterID = 34 OR URL LIKE '%upyachka%' ``` -Чтобы проверить, может ли ClickHouse использовать индекс при выполнении запроса, используйте настройки [force_index_by_date](/operations/settings/settings.md/#force_index_by_date) и [force_primary_key](/operations/settings/settings#force_primary_key). +Чтобы проверить, может ли ClickHouse использовать индекс при выполнении запроса, используйте настройки [force_index_by_date](/operations/settings/settings.md/#force_index_by_date) и [force_primary_key](/operations/settings/settings#force_primary_key). -Ключ партиционирования по месяцам позволяет читать только те блоки данных, которые содержат даты из соответствующего диапазона. В этом случае блок данных может содержать данные для многих дат (до целого месяца). Внутри блока данные отсортированы по первичному ключу, который может не содержать дату в качестве первого столбца. Из-за этого использование запроса только с условием по дате, не указывающим префикс первичного ключа, приведёт к чтению большего объёма данных, чем для одной даты. +Ключ партиционирования по месяцам позволяет читать только те блоки данных, которые содержат даты из нужного диапазона. В этом случае блок данных может содержать данные за множество дат (вплоть до целого месяца). Внутри блока данные отсортированы по первичному ключу, который может не содержать дату в качестве первого столбца. Из-за этого использование запроса только с условием по дате, без указания префикса первичного ключа, приведёт к чтению большего объёма данных, чем при выборке за одну дату. -### Использование индекса для частично монотонных первичных ключей {#use-of-index-for-partially-monotonic-primary-keys} +### Использование индекса для частично-монотонных первичных ключей \{#use-of-index-for-partially-monotonic-primary-keys\} -Рассмотрим, например, дни месяца. Они образуют [монотонную последовательность](https://en.wikipedia.org/wiki/Monotonic_function) в пределах одного месяца, но не являются монотонными для более длительных периодов. Это частично монотонная последовательность. Если пользователь создает таблицу с частично монотонным первичным ключом, ClickHouse создает разреженный индекс как обычно. Когда пользователь выбирает данные из такой таблицы, ClickHouse анализирует условия запроса. Если пользователь хочет получить данные между двумя отметками индекса и обе эти отметки попадают в пределы одного месяца, ClickHouse может использовать индекс в этом конкретном случае, поскольку он может вычислить расстояние между параметрами запроса и отметками индекса. +Рассмотрим, например, дни месяца. Они образуют [монотонную последовательность](https://en.wikipedia.org/wiki/Monotonic_function) в пределах одного месяца, но не являются монотонными на более длительных промежутках времени. Это частично-монотонная последовательность. Если пользователь создаёт таблицу с частично-монотонным первичным ключом, ClickHouse создаёт разреженный индекс как обычно. Когда пользователь выбирает данные из такой таблицы, ClickHouse анализирует условия запроса. Если пользователь хочет получить данные между двумя метками индекса и обе эти метки попадают в один месяц, ClickHouse может использовать индекс в этом конкретном случае, потому что он может вычислить расстояние между параметрами запроса и метками индекса. -ClickHouse не может использовать индекс, если значения первичного ключа в диапазоне параметров запроса не представляют собой монотонную последовательность. В этом случае ClickHouse использует метод полного сканирования. +ClickHouse не может использовать индекс, если значения первичного ключа в заданном в параметрах запроса диапазоне не образуют монотонную последовательность. В этом случае ClickHouse использует полное сканирование. -ClickHouse использует эту логику не только для последовательностей дней месяца, но и для любого первичного ключа, который представляет собой частично монотонную последовательность. +ClickHouse применяет эту логику не только к последовательностям дней месяца, но и к любому первичному ключу, который представляет частично-монотонную последовательность. -### Индексы пропуска данных {#table_engine-mergetree-data_skipping-indexes} +### Индексы пропуска данных -Объявление индекса находится в секции столбцов запроса `CREATE`. +Объявление индекса указывается в разделе `COLUMNS` оператора `CREATE`. ```sql INDEX index_name expr TYPE type(...) [GRANULARITY granularity_value] ``` -Для таблиц семейства `*MergeTree` можно указывать индексы пропуска данных. +Для таблиц из семейства `*MergeTree` можно задать индексы пропуска данных (data skipping indices). -Эти индексы агрегируют некоторую информацию о заданном выражении на блоках, которые состоят из `granularity_value` гранул (размер гранулы задается с помощью настройки `index_granularity` в движке таблицы). Затем эти агрегаты используются в запросах `SELECT` для уменьшения объема данных, считываемых с диска, путем пропуска больших блоков данных, где условие `where` не может быть выполнено. +Эти индексы агрегируют некоторую информацию об указанном выражении по блокам, которые состоят из гранул размера `granularity_value` (размер гранулы задаётся с помощью настройки `index_granularity` в движке таблицы). Затем эти агрегаты используются в запросах `SELECT` для уменьшения объёма данных, считываемых с диска, за счёт пропуска крупных блоков данных, в которых условие секции `WHERE` не может быть выполнено. -Предложение `GRANULARITY` может быть опущено, значение `granularity_value` по умолчанию равно 1. +Секцию `GRANULARITY` можно опустить, значение `granularity_value` по умолчанию равно 1. **Пример** @@ -330,7 +326,7 @@ CREATE TABLE table_name ... ``` -Индексы из примера могут использоваться ClickHouse для уменьшения объема данных, считываемых с диска, в следующих запросах: +ClickHouse может использовать индексы из примера, чтобы сократить объём данных, считываемых с диска, в следующих запросах: ```sql SELECT count() FROM table WHERE u64 == 10; @@ -338,106 +334,109 @@ SELECT count() FROM table WHERE u64 * i32 >= 1234 SELECT count() FROM table WHERE u64 * length(s) == 1234 ``` -Индексы пропуска данных также могут быть созданы на составных столбцах: +Индексы пропуска данных также могут создаваться для составных столбцов: ```sql --- на столбцах типа Map: +-- для столбцов типа Map: INDEX map_key_index mapKeys(map_column) TYPE bloom_filter INDEX map_value_index mapValues(map_column) TYPE bloom_filter --- на столбцах типа Tuple: +-- для столбцов типа Tuple: INDEX tuple_1_index tuple_column.1 TYPE bloom_filter INDEX tuple_2_index tuple_column.2 TYPE bloom_filter --- на столбцах типа Nested: +-- для столбцов типа Nested: INDEX nested_1_index col.nested_col1 TYPE bloom_filter INDEX nested_2_index col.nested_col2 TYPE bloom_filter ``` -### Типы индексов пропуска {#skip-index-types} -Движок таблиц `MergeTree` поддерживает следующие типы индексов пропуска. -Для получения дополнительной информации о том, как индексы пропуска могут использоваться для оптимизации производительности, -см. [«Понимание индексов пропуска данных ClickHouse»](/optimize/skipping-indexes). +### Типы пропускающих индексов \{#skip-index-types\} -- Индекс [`MinMax`](#minmax) -- Индекс [`Set`](#set) -- Индекс [`bloom_filter`](#bloom-filter) -- Индекс [`ngrambf_v1`](#n-gram-bloom-filter) -- Индекс [`tokenbf_v1`](#token-bloom-filter) +Движок таблицы `MergeTree` поддерживает следующие типы пропускающих индексов. +Подробнее об использовании пропускающих индексов для оптимизации производительности +см. в разделе ["Понимание пропускающих индексов данных в ClickHouse"](/optimize/skipping-indexes). -#### Индекс пропуска MinMax {#minmax} +- индекс [`MinMax`](#minmax) +- индекс [`Set`](#set) +- индекс [`bloom_filter`](#bloom-filter) +- индекс [`ngrambf_v1`](#n-gram-bloom-filter) +- индекс [`tokenbf_v1`](#token-bloom-filter) -Для каждой гранулы индекса сохраняются минимальное и максимальное значения выражения. -(Если выражение имеет тип `tuple`, сохраняются минимум и максимум для каждого элемента кортежа.) +#### Индекс MinMax -```text title="Синтаксис" +Для каждой гранулы индекса сохраняются минимальные и максимальные значения выражения. +(Если выражение имеет тип `tuple`, сохраняются минимальные и максимальные значения для каждого элемента кортежа.) + +```text title="Syntax" minmax ``` -#### Set {#set} + +#### Set Для каждой гранулы индекса сохраняется не более `max_rows` уникальных значений указанного выражения. -`max_rows = 0` означает «сохранять все уникальные значения». +`max_rows = 0` означает «хранить все уникальные значения». -```text title="Синтаксис" +```text title="Syntax" set(max_rows) ``` -#### Bloom filter {#bloom-filter} -Для каждой гранулы индекса сохраняется [фильтр Блума](https://en.wikipedia.org/wiki/Bloom_filter) для указанных столбцов. +#### Фильтр Блума + +Для каждой гранулы индекса хранится [фильтр Блума](https://en.wikipedia.org/wiki/Bloom_filter) по указанным столбцам. -```text title="Синтаксис" +```text title="Syntax" bloom_filter([false_positive_rate]) ``` -Параметр `false_positive_rate` может принимать значение от 0 до 1 (по умолчанию: `0.025`) и задает вероятность ложноположительного срабатывания (что увеличивает объем считываемых данных). - +Параметр `false_positive_rate` может принимать значение от 0 до 1 (по умолчанию: `0.025`) и задаёт вероятность положительного срабатывания (что увеличивает объём считываемых данных). Поддерживаются следующие типы данных: -- `(U)Int*` -- `Float*` -- `Enum` -- `Date` -- `DateTime` -- `String` -- `FixedString` -- `Array` -- `LowCardinality` -- `Nullable` -- `UUID` -- `Map` +* `(U)Int*` +* `Float*` +* `Enum` +* `Date` +* `DateTime` +* `String` +* `FixedString` +* `Array` +* `LowCardinality` +* `Nullable` +* `UUID` +* `Map` :::note Тип данных Map: указание создания индекса по ключам или значениям -Для типа данных `Map` можно указать, должен ли индекс создаваться по ключам или по значениям, используя функции [`mapKeys`](/sql-reference/functions/tuple-map-functions.md/#mapkeys) или [`mapValues`](/sql-reference/functions/tuple-map-functions.md/#mapvalues). +Для типа данных `Map` клиент может указать, должен ли индекс создаваться по ключам или по значениям, с помощью функций [`mapKeys`](/sql-reference/functions/tuple-map-functions.md/#mapkeys) или [`mapValues`](/sql-reference/functions/tuple-map-functions.md/#mapvalues). ::: -#### N-граммный фильтр Блума {#n-gram-bloom-filter} -Для каждой гранулы индекса сохраняется [фильтр Блума](https://en.wikipedia.org/wiki/Bloom_filter) для [n-грамм](https://en.wikipedia.org/wiki/N-gram) указанных столбцов. +#### N-граммовый Bloom-фильтр + +Для каждой гранулы индекса хранится [Bloom-фильтр](https://en.wikipedia.org/wiki/Bloom_filter) по [n-граммам](https://en.wikipedia.org/wiki/N-gram) указанных столбцов. -```text title="Синтаксис" +```text title="Syntax" ngrambf_v1(n, size_of_bloom_filter_in_bytes, number_of_hash_functions, random_seed) ``` -| Параметр | Описание | -| ------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | -| `n` | Размер n-граммы | -| `size_of_bloom_filter_in_bytes` | Размер фильтра Блума в байтах. Здесь можно использовать большое значение, например `256` или `512`, так как оно хорошо сжимается. | -| `number_of_hash_functions` | Количество хеш-функций, используемых в фильтре Блума. | -| `random_seed` | Начальное значение для хеш-функций фильтра Блума. | +| Parameter | Description | +| ------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | +| `n` | размер n-граммы | +| `size_of_bloom_filter_in_bytes` | Размер фильтра Блума в байтах. Здесь можно использовать большое значение, например `256` или `512`, поскольку оно хорошо сжимается. | +| `number_of_hash_functions` | Количество хеш-функций, используемых в фильтре Блума. | +| `random_seed` | Начальное значение (seed) для хеш-функций фильтра Блума. | Этот индекс работает только со следующими типами данных: -- [`String`](/sql-reference/data-types/string.md) -- [`FixedString`](/sql-reference/data-types/fixedstring.md) -- [`Map`](/sql-reference/data-types/map.md) +* [`String`](/sql-reference/data-types/string.md) +* [`FixedString`](/sql-reference/data-types/fixedstring.md) +* [`Map`](/sql-reference/data-types/map.md) -Для оценки параметров `ngrambf_v1` можно использовать следующие [пользовательские функции (UDF)](/sql-reference/statements/create/function.md). +Чтобы оценить параметры `ngrambf_v1`, вы можете использовать следующие [пользовательские функции (UDF)](/sql-reference/statements/create/function.md). -```sql title="UDF для ngrambf_v1" +```sql title="UDFs for ngrambf_v1" CREATE FUNCTION bfEstimateFunctions [ON CLUSTER cluster] AS (total_number_of_all_grams, size_of_bloom_filter_in_bits) -> round((size_of_bloom_filter_in_bits / total_number_of_all_grams) * log(2)); @@ -455,23 +454,23 @@ AS (number_of_hash_functions, probability_of_false_positives, size_of_bloom_filter_in_bytes) -> ceil(size_of_bloom_filter_in_bytes / (-number_of_hash_functions / log(1 - exp(log(probability_of_false_positives) / number_of_hash_functions)))) ``` -Для использования этих функций необходимо указать как минимум два параметра: +Чтобы использовать эти функции, необходимо указать не менее двух параметров: -- `total_number_of_all_grams` -- `probability_of_false_positives` +* `total_number_of_all_grams` +* `probability_of_false_positives` -Например, в грануле содержится `4300` n-грамм, и вы ожидаете, что вероятность ложных срабатываний будет меньше `0.0001`. -Остальные параметры можно оценить, выполнив следующие запросы: +Например, в грануле есть `4300` n-грамм, и вы ожидаете, что вероятность ложных срабатываний будет меньше `0.0001`. +Остальные параметры можно затем оценить, выполнив следующие запросы: ```sql ---- оценка количества битов в фильтре +--- оценить количество битов в фильтре SELECT bfEstimateBmSize(4300, 0.0001) / 8 AS size_of_bloom_filter_in_bytes; ┌─size_of_bloom_filter_in_bytes─┐ │ 10304 │ └───────────────────────────────┘ ---- оценка количества хеш-функций +--- оценить количество хеш-функций SELECT bfEstimateFunctions(4300, bfEstimateBmSize(4300, 0.0001)) as number_of_hash_functions ┌─number_of_hash_functions─┐ @@ -479,78 +478,77 @@ SELECT bfEstimateFunctions(4300, bfEstimateBmSize(4300, 0.0001)) as number_of_ha └──────────────────────────┘ ``` -Разумеется, эти функции также можно использовать для оценки параметров при других условиях. -Приведенные выше функции основаны на калькуляторе фильтра Блума, доступном [здесь](https://hur.st/bloomfilter). +Разумеется, вы также можете использовать эти функции для оценки параметров и в других условиях. +Приведённые выше функции соответствуют калькулятору фильтра Блума, доступному по адресу [здесь](https://hur.st/bloomfilter). + -#### Токенный фильтр Блума {#token-bloom-filter} +#### Фильтр Блума по токенам -Токенный фильтр Блума аналогичен `ngrambf_v1`, но сохраняет токены (последовательности, разделенные неалфавитно-цифровыми символами) вместо n-грамм. +Фильтр Блума по токенам аналогичен `ngrambf_v1`, но вместо n-грамм хранит токены (последовательности, разделённые небуквенно-цифровыми символами). -```text title="Синтаксис" +```text title="Syntax" tokenbf_v1(size_of_bloom_filter_in_bytes, number_of_hash_functions, random_seed) ``` -#### Фильтр Блума на основе разреженных грамм {#sparse-grams-bloom-filter} +#### Разрежённый n-граммный фильтр Блума -Фильтр Блума на основе разреженных грамм аналогичен `ngrambf_v1`, но использует [токены разреженных грамм](/sql-reference/functions/string-functions.md/#sparseGrams) вместо n-грамм. +Разрежённый n-граммный фильтр Блума аналогичен `ngrambf_v1`, но использует [токены разрежённых n-грамм](/sql-reference/functions/string-functions.md/#sparseGrams) вместо n-грамм. -```text title="Синтаксис" +```text title="Syntax" sparse_grams(min_ngram_length, max_ngram_length, min_cutoff_length, size_of_bloom_filter_in_bytes, number_of_hash_functions, random_seed) ``` -### Текстовый индекс {#text} -Поддерживает полнотекстовый поиск, подробности см. [здесь](invertedindexes.md). +### Текстовый индекс \{#text\} -#### Векторное сходство {#vector-similarity} +Поддерживает полнотекстовый поиск; подробности см. [здесь](invertedindexes.md). -Поддерживает приближённый поиск ближайших соседей, подробности см. [здесь](annindexes.md). +#### Сходство векторов \{#vector-similarity\} -### Поддержка функций {#functions-support} +Поддерживает приближённый поиск ближайших соседей, подробнее см. [здесь](annindexes.md). -Условия в секции `WHERE` содержат вызовы функций, работающих со столбцами. Если столбец является частью индекса, ClickHouse пытается использовать этот индекс при выполнении функций. ClickHouse поддерживает различные подмножества функций для использования индексов. +### Поддержка функций \{#functions-support\} -Индексы типа `set` могут использоваться всеми функциями. Другие типы индексов поддерживаются следующим образом: +Условия в предложении `WHERE` содержат вызовы функций, которые работают со столбцами. Если столбец является частью индекса, ClickHouse пытается использовать этот индекс при вычислении этих функций. ClickHouse поддерживает различные подмножества функций для работы с индексами. +Индексы типа `set` могут использоваться всеми функциями. Остальные типы индексов поддерживаются следующим образом: -| Функция (оператор) / индекс | первичный ключ | minmax | ngrambf_v1 | tokenbf_v1 | bloom_filter | text | sparse_grams | -| ------------------------------------------------------------------------------------------------------------------------- | -------------- | ------ | -------------- | -------------- | ---------------- | ---- | ---------------- | -| [equals (=, ==)](/sql-reference/functions/comparison-functions.md/#equals) | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | -| [notEquals(!=, <>)](/sql-reference/functions/comparison-functions.md/#notEquals) | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | -| [like](/sql-reference/functions/string-search-functions.md/#like) | ✔ | ✔ | ✔ | ✔ | ✗ | ✔ | ✔ | -| [notLike](/sql-reference/functions/string-search-functions.md/#notLike) | ✔ | ✔ | ✔ | ✔ | ✗ | ✔ | ✔ | -| [match](/sql-reference/functions/string-search-functions.md/#match) | ✗ | ✗ | ✔ | ✔ | ✗ | ✔ | ✔ | -| [startsWith](/sql-reference/functions/string-functions.md/#startsWith) | ✔ | ✔ | ✔ | ✔ | ✗ | ✔ | ✔ | -| [endsWith](/sql-reference/functions/string-functions.md/#endsWith) | ✗ | ✗ | ✔ | ✔ | ✗ | ✔ | ✔ | -| [multiSearchAny](/sql-reference/functions/string-search-functions.md/#multiSearchAny) | ✗ | ✗ | ✔ | ✗ | ✗ | ✗ | ✗ | -| [in](/sql-reference/functions/in-functions) | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | -| [notIn](/sql-reference/functions/in-functions) | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | -| [меньше (`<`)](/sql-reference/functions/comparison-functions.md/#less) | ✔ | ✔ | ✗ | ✗ | ✗ | ✗ | ✗ | -| [больше (`>`)](/sql-reference/functions/comparison-functions.md/#greater) | ✔ | ✔ | ✗ | ✗ | ✗ | ✗ | ✗ | -| [lessOrEquals (`<=`)](/sql-reference/functions/comparison-functions.md/#lessOrEquals) | ✔ | ✔ | ✗ | ✗ | ✗ | ✗ | ✗ | -| [greaterOrEquals (`>=`)](/sql-reference/functions/comparison-functions.md/#greaterOrEquals) | ✔ | ✔ | ✗ | ✗ | ✗ | ✗ | ✗ | -| [empty](/sql-reference/functions/array-functions/#empty) | ✔ | ✔ | ✗ | ✗ | ✗ | ✗ | ✗ | -| [notEmpty](/sql-reference/functions/array-functions/#notEmpty) | ✗ | ✔ | ✗ | ✗ | ✗ | ✗ | ✔ | -| [has](/sql-reference/functions/array-functions#has) | ✗ | ✗ | ✔ | ✔ | ✔ | ✔ | ✔ | -| [hasAny](/sql-reference/functions/array-functions#hasAny) | ✗ | ✗ | ✔ | ✔ | ✔ | ✗ | ✔ | -| [hasAll](/sql-reference/functions/array-functions#hasAll) | ✗ | ✗ | ✔ | ✔ | ✔ | ✗ | ✔ | -| [hasToken](/sql-reference/functions/string-search-functions.md/#hasToken) | ✗ | ✗ | ✗ | ✔ | ✗ | ✔ | ✗ | -| [hasTokenOrNull](/sql-reference/functions/string-search-functions.md/#hasTokenOrNull) | ✗ | ✗ | ✗ | ✔ | ✗ | ✔ | ✗ | -| [hasTokenCaseInsensitive (`*`)](/sql-reference/functions/string-search-functions.md/#hasTokenCaseInsensitive) | ✗ | ✗ | ✗ | ✔ | ✗ | ✗ | ✗ | -| [hasTokenCaseInsensitiveOrNull (`*`)](/sql-reference/functions/string-search-functions.md/#hasTokenCaseInsensitiveOrNull) | ✗ | ✗ | ✗ | ✔ | ✗ | ✗ | ✗ | -| [hasAnyTokens](/sql-reference/functions/string-search-functions.md/#hasAnyTokens) | ✗ | ✗ | ✗ | ✗ | ✗ | ✔ | ✗ | -| [hasAllTokens](/sql-reference/functions/string-search-functions.md/#hasAllTokens) | ✗ | ✗ | ✗ | ✗ | ✗ | ✔ | ✗ | -| [mapContains](/sql-reference/functions/tuple-map-functions#mapcontains) | ✗ | ✗ | ✗ | ✗ | ✗ | ✔ | ✗ | +| Функция (оператор) / Индекс | первичный ключ | minmax | ngrambf_v1 | tokenbf_v1 | bloom_filter | sparse_grams | текст | +| ------------------------------------------------------------------------------------------------------------------------- | -------------- | ------ | -------------- | -------------- | ---------------- | ---------------- | ----- | +| [равно (=, ==)](/sql-reference/functions/comparison-functions.md/#equals) | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| [notEquals(!=, <>)](/sql-reference/functions/comparison-functions.md/#notEquals) | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| [like](/sql-reference/functions/string-search-functions.md/#like) | ✔ | ✔ | ✔ | ✔ | ✗ | ✔ | ✔ | +| [notLike](/sql-reference/functions/string-search-functions.md/#notLike) | ✔ | ✔ | ✔ | ✔ | ✗ | ✔ | ✔ | +| [match](/sql-reference/functions/string-search-functions.md/#match) | ✗ | ✗ | ✔ | ✔ | ✗ | ✔ | ✔ | +| [startsWith](/sql-reference/functions/string-functions.md/#startsWith) | ✔ | ✔ | ✔ | ✔ | ✗ | ✔ | ✔ | +| [endsWith](/sql-reference/functions/string-functions.md/#endsWith) | ✗ | ✗ | ✔ | ✔ | ✗ | ✔ | ✔ | +| [multiSearchAny](/sql-reference/functions/string-search-functions.md/#multiSearchAny) | ✗ | ✗ | ✔ | ✗ | ✗ | ✗ | ✗ | +| [in](/sql-reference/functions/in-functions) | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| [notIn](/sql-reference/functions/in-functions) | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| [меньше (`<`)](/sql-reference/functions/comparison-functions.md/#less) | ✔ | ✔ | ✗ | ✗ | ✗ | ✗ | ✗ | +| [greater (`>`)](/sql-reference/functions/comparison-functions.md/#greater) | ✔ | ✔ | ✗ | ✗ | ✗ | ✗ | ✗ | +| [lessOrEquals (`<=`)](/sql-reference/functions/comparison-functions.md/#lessOrEquals) | ✔ | ✔ | ✗ | ✗ | ✗ | ✗ | ✗ | +| [greaterOrEquals (`>=`)](/sql-reference/functions/comparison-functions.md/#greaterOrEquals) | ✔ | ✔ | ✗ | ✗ | ✗ | ✗ | ✗ | +| [empty](/sql-reference/functions/array-functions/#empty) | ✔ | ✔ | ✗ | ✗ | ✗ | ✗ | ✗ | +| [notEmpty](/sql-reference/functions/array-functions/#notEmpty) | ✗ | ✔ | ✗ | ✗ | ✗ | ✔ | ✗ | +| [has](/sql-reference/functions/array-functions#has) | ✗ | ✗ | ✔ | ✔ | ✔ | ✔ | ✔ | +| [hasAny](/sql-reference/functions/array-functions#hasAny) | ✗ | ✗ | ✔ | ✔ | ✔ | ✔ | ✗ | +| [hasAll](/sql-reference/functions/array-functions#hasAll) | ✗ | ✗ | ✔ | ✔ | ✔ | ✔ | ✗ | +| [hasToken](/sql-reference/functions/string-search-functions.md/#hasToken) | ✗ | ✗ | ✗ | ✔ | ✗ | ✗ | ✔ | +| [hasTokenOrNull](/sql-reference/functions/string-search-functions.md/#hasTokenOrNull) | ✗ | ✗ | ✗ | ✔ | ✗ | ✗ | ✔ | +| [hasTokenCaseInsensitive (`*`)](/sql-reference/functions/string-search-functions.md/#hasTokenCaseInsensitive) | ✗ | ✗ | ✗ | ✔ | ✗ | ✗ | ✗ | +| [hasTokenCaseInsensitiveOrNull (`*`)](/sql-reference/functions/string-search-functions.md/#hasTokenCaseInsensitiveOrNull) | ✗ | ✗ | ✗ | ✔ | ✗ | ✗ | ✗ | +| [hasAnyTokens](/sql-reference/functions/string-search-functions.md/#hasAnyTokens) | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✔ | +| [hasAllTokens](/sql-reference/functions/string-search-functions.md/#hasAllTokens) | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✔ | +| [mapContains](/sql-reference/functions/tuple-map-functions#mapcontains) | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✔ | +Функции с константным аргументом, значение которого меньше размера n-граммы, не могут использоваться индексом `ngrambf_v1` для оптимизации запросов. - -Функции с константным аргументом, который меньше размера n-граммы, не могут использоваться индексом `ngrambf_v1` для оптимизации запросов. - -(*) Чтобы `hasTokenCaseInsensitive` и `hasTokenCaseInsensitiveOrNull` были эффективны, индекс `tokenbf_v1` должен быть создан по данным в нижнем регистре, например `INDEX idx (lower(str_col)) TYPE tokenbf_v1(512, 3, 0)`. +(*) Чтобы `hasTokenCaseInsensitive` и `hasTokenCaseInsensitiveOrNull` были эффективны, индекс `tokenbf_v1` должен быть создан по данным в нижнем регистре, например: `INDEX idx (lower(str_col)) TYPE tokenbf_v1(512, 3, 0)`. :::note -Фильтры Блума могут давать ложноположительные совпадения, поэтому индексы `ngrambf_v1`, `tokenbf_v1`, `sparse_grams` и `bloom_filter` не могут использоваться для оптимизации запросов, в которых ожидается, что результат функции будет ложным. +У фильтров Блума возможны ложноположительные срабатывания, поэтому индексы `ngrambf_v1`, `tokenbf_v1`, `sparse_grams` и `bloom_filter` не могут использоваться для оптимизации запросов, в которых ожидается, что результат функции будет ложным. Например: @@ -568,11 +566,9 @@ sparse_grams(min_ngram_length, max_ngram_length, min_cutoff_length, size_of_bloo - `NOT startsWith(s, 'test')` ::: +## Проекции \{#projections\} - -## Проекции {#projections} - -Проекции похожи на [материализованные представления](/sql-reference/statements/create/view), но определяются на уровне части таблицы. Они обеспечивают гарантии согласованности и автоматически используются в запросах. +Проекции похожи на [materialized views](/sql-reference/statements/create/view), но определяются на уровне частей таблицы (parts). Они обеспечивают гарантии согласованности, а также автоматическое использование в запросах. :::note При использовании проекций следует также учитывать настройку [force_optimize_projection](/operations/settings/settings#force_optimize_projection). @@ -580,42 +576,41 @@ sparse_grams(min_ngram_length, max_ngram_length, min_cutoff_length, size_of_bloo Проекции не поддерживаются в операторах `SELECT` с модификатором [FINAL](/sql-reference/statements/select/from#final-modifier). -### Запрос проекции {#projection-query} +### Запрос проекции Запрос проекции определяет проекцию. Он неявно выбирает данные из родительской таблицы. **Синтаксис** ```sql -SELECT [GROUP BY] [ORDER BY] +SELECT <выражение списка столбцов> [GROUP BY] <выражение ключей группировки> [ORDER BY] <выражение> ``` Проекции можно изменять или удалять с помощью оператора [ALTER](/sql-reference/statements/alter/projection.md). -### Хранение проекций {#projection-storage} -Проекции хранятся внутри директории части таблицы. Это похоже на индекс, но содержит поддиректорию, в которой хранится часть анонимной таблицы `MergeTree`. Таблица создается на основе определяющего запроса проекции. Если присутствует секция `GROUP BY`, базовым движком хранения становится [AggregatingMergeTree](aggregatingmergetree.md), и все агрегатные функции преобразуются в `AggregateFunction`. Если присутствует секция `ORDER BY`, таблица `MergeTree` использует её в качестве выражения первичного ключа. В процессе слияния часть проекции объединяется через процедуру слияния её хранилища. Контрольная сумма части родительской таблицы объединяется с контрольной суммой части проекции. Другие операции обслуживания аналогичны индексам с пропуском данных. +### Хранение проекций \{#projection-storage\} -### Анализ запросов {#projection-query-analysis} +Проекции хранятся внутри каталога части. По сути это похоже на индекс, но включает подкаталог, в котором хранится часть анонимной таблицы `MergeTree`. Таблица задаётся запросом, определяющим проекцию. Если в определении есть предложение `GROUP BY`, базовый движок хранения становится [AggregatingMergeTree](aggregatingmergetree.md), и все агрегатные функции приводятся к типу `AggregateFunction`. Если есть предложение `ORDER BY`, таблица `MergeTree` использует его как выражение первичного ключа. Во время процесса слияния часть проекции объединяется с использованием процедуры слияния её движка хранения. Контрольная сумма части родительской таблицы объединяется с частью проекции. Остальные операции обслуживания аналогичны операциям для skip-индексов. -1. Проверяется, может ли проекция использоваться для ответа на данный запрос, то есть генерирует ли она тот же результат, что и запрос к базовой таблице. -2. Выбирается наилучшее подходящее совпадение, которое содержит наименьшее количество гранул для чтения. -3. Конвейер запроса, использующий проекции, будет отличаться от того, который использует исходные части. Если проекция отсутствует в некоторых частях, можно добавить конвейер для её создания «на лету». +### Анализ запросов \{#projection-query-analysis\} +1. Проверьте, может ли проекция быть использована для ответа на данный запрос, то есть даёт ли она тот же результат, что и запрос к базовой таблице. +2. Выберите оптимальное соответствие, для которого нужно прочитать наименьшее количество гранул. +3. Конвейер обработки запроса, использующий проекции, будет отличаться от конвейера, работающего с исходными частями. Если в некоторых частях проекция отсутствует, можно добавить конвейер, чтобы «спроецировать» её на лету. -## Параллельный доступ к данным {#concurrent-data-access} +## Одновременный доступ к данным \{#concurrent-data-access\} -Для параллельного доступа к таблице используется многоверсионность. Иными словами, когда таблица одновременно читается и обновляется, данные читаются из набора кусков, актуального на момент выполнения запроса. Длительные блокировки отсутствуют. Операции вставки не мешают операциям чтения. +Для одновременного доступа к таблице используется многоверсионность. Иными словами, когда таблица одновременно читается и обновляется, данные читаются из набора частей, актуального на момент выполнения запроса. Длительные блокировки отсутствуют. Вставки не мешают операциям чтения. Чтение из таблицы автоматически распараллеливается. - -## TTL для столбцов и таблиц {#table_engine-mergetree-ttl} +## TTL для столбцов и таблиц Определяет время жизни значений. -Секция `TTL` может быть задана как для всей таблицы, так и для каждого отдельного столбца. `TTL` на уровне таблицы также может определять логику автоматического перемещения данных между дисками и томами или повторного сжатия кусков, в которых все данные устарели. +Выражение `TTL` может быть задано как для всей таблицы, так и для каждого отдельного столбца. `TTL` на уровне таблицы также может задавать логику автоматического перемещения данных между дисками и томами, а также перекомпрессии частей, в которых срок жизни всех данных истёк. -Выражения должны возвращать тип данных [Date](/sql-reference/data-types/date.md), [Date32](/sql-reference/data-types/date32.md), [DateTime](/sql-reference/data-types/datetime.md) или [DateTime64](/sql-reference/data-types/datetime64.md). +Выражения должны вычисляться в значение типа данных [Date](/sql-reference/data-types/date.md), [Date32](/sql-reference/data-types/date32.md), [DateTime](/sql-reference/data-types/datetime.md) или [DateTime64](/sql-reference/data-types/datetime64.md). **Синтаксис** @@ -626,22 +621,23 @@ TTL time_column TTL time_column + interval ``` -Для определения `interval` используйте операторы [временных интервалов](/sql-reference/operators#operators-for-working-with-dates-and-times), например: +Чтобы задать `interval`, используйте операторы [интервалов времени](/sql-reference/operators#operators-for-working-with-dates-and-times), например: ```sql TTL date_time + INTERVAL 1 MONTH TTL date_time + INTERVAL 15 HOUR ``` -### TTL столбца {#mergetree-column-ttl} -Когда значения в столбце устаревают, ClickHouse заменяет их значениями по умолчанию для типа данных столбца. Если все значения столбца в куске данных устаревают, ClickHouse удаляет этот столбец из куска данных в файловой системе. +### TTL столбца \{#mergetree-column-ttl\} + +Когда срок жизни значений в столбце истекает, ClickHouse заменяет их значениями по умолчанию для типа данных столбца. Если срок жизни всех значений столбца в части данных истекает, ClickHouse удаляет этот столбец из соответствующей части данных в файловой системе. -Секция `TTL` не может использоваться для ключевых столбцов. +Предложение `TTL` нельзя использовать для ключевых столбцов. **Примеры** -#### Создание таблицы с `TTL`: {#creating-a-table-with-ttl} +#### Создание таблицы с параметром `TTL`: ```sql CREATE TABLE tab @@ -656,7 +652,8 @@ PARTITION BY toYYYYMM(d) ORDER BY d; ``` -#### Добавление TTL к столбцу существующей таблицы {#adding-ttl-to-a-column-of-an-existing-table} + +#### Добавление TTL для столбца существующей таблицы ```sql ALTER TABLE tab @@ -664,7 +661,8 @@ ALTER TABLE tab c String TTL d + INTERVAL 1 DAY; ``` -#### Изменение TTL столбца {#altering-ttl-of-the-column} + +#### Изменение TTL для столбца ```sql ALTER TABLE tab @@ -672,38 +670,40 @@ ALTER TABLE tab c String TTL d + INTERVAL 1 MONTH; ``` -### TTL таблицы {#mergetree-table-ttl} -Таблица может иметь выражение для удаления устаревших строк и несколько выражений для автоматического перемещения кусков между [дисками или томами](#table_engine-mergetree-multiple-volumes). Когда строки в таблице устаревают, ClickHouse удаляет все соответствующие строки. Для перемещения или повторного сжатия кусков все строки куска должны удовлетворять критериям выражения `TTL`. +### TTL таблицы + +Для таблицы может быть задано выражение для удаления строк с истекшим сроком жизни и несколько выражений для автоматического перемещения частей между [дисками или томами](#table_engine-mergetree-multiple-volumes). Когда срок жизни строк в таблице истекает, ClickHouse удаляет все соответствующие строки. Для перемещения или перекомпрессии частей все строки части должны удовлетворять критериям выражения `TTL`. ```sql TTL expr - [DELETE|RECOMPRESS codec_name1|TO DISK 'xxx'|TO VOLUME 'xxx'][, DELETE|RECOMPRESS codec_name2|TO DISK 'aaa'|TO VOLUME 'bbb'] ... - [WHERE conditions] + [DELETE|RECOMPRESS codec_name1|НА ДИСК 'xxx'|НА ТОМ 'xxx'][, DELETE|RECOMPRESS codec_name2|НА ДИСК 'aaa'|НА ТОМ 'bbb'] ... + [WHERE условия] [GROUP BY key_expr [SET v1 = aggr_func(v1) [, v2 = aggr_func(v2) ...]] ] ``` -Тип правила TTL может следовать за каждым выражением TTL. Он определяет действие, которое должно быть выполнено после того, как выражение будет удовлетворено (достигнет текущего времени): +Тип правила TTL может следовать за каждым выражением TTL. Он определяет действие, которое будет выполнено, когда выражение будет выполнено (достигнет текущего времени): -- `DELETE` — удалить устаревшие строки (действие по умолчанию); -- `RECOMPRESS codec_name` — повторно сжать кусок данных с помощью `codec_name`; -- `TO DISK 'aaa'` — переместить кусок на диск `aaa`; -- `TO VOLUME 'bbb'` — переместить кусок на том `bbb`; -- `GROUP BY` — агрегировать устаревшие строки. +* `DELETE` — удалить истекшие строки (действие по умолчанию); +* `RECOMPRESS codec_name` — перекомпрессировать часть данных с использованием `codec_name`; +* `TO DISK 'aaa'` — перенести часть на диск `aaa`; +* `TO VOLUME 'bbb'` — перенести часть в том `bbb`; +* `GROUP BY` — агрегировать истекшие строки. -Действие `DELETE` может использоваться вместе с секцией `WHERE` для удаления только некоторых устаревших строк на основе условия фильтрации: +Действие `DELETE` может использоваться вместе с предложением `WHERE`, чтобы удалять только часть истекших строк на основе условия фильтрации: ```sql -TTL time_column + INTERVAL 1 MONTH DELETE WHERE column = 'value' +TTL time_column + INTERVAL 1 MONTH УДАЛИТЬ ГДЕ column = 'value' ``` Выражение `GROUP BY` должно быть префиксом первичного ключа таблицы. -Если столбец не является частью выражения `GROUP BY` и не задан явно в секции `SET`, в результирующей строке он содержит произвольное значение из сгруппированных строк (как если бы к нему была применена агрегатная функция `any`). +Если столбец не входит в выражение `GROUP BY` и явно не задан в предложении `SET`, в результирующей строке он будет содержать произвольное значение из сгруппированных строк (как если бы к нему была применена агрегатная функция `any`). **Примеры** -#### Создание таблицы с `TTL`: {#creating-a-table-with-ttl-1} + +#### Создание таблицы с `TTL`: ```sql CREATE TABLE tab @@ -719,15 +719,15 @@ TTL d + INTERVAL 1 MONTH DELETE, d + INTERVAL 2 WEEK TO DISK 'bbb'; ``` -#### Изменение `TTL` таблицы: {#altering-ttl-of-the-table} + +#### Изменение `TTL` для таблицы: ```sql ALTER TABLE tab MODIFY TTL d + INTERVAL 1 DAY; ``` - -Создание таблицы, в которой строки истекают через месяц. Истекшие строки, даты которых приходятся на понедельники, удаляются: +Создание таблицы, в которой строки автоматически удаляются через один месяц. Просроченные строки с датами, приходящимися на понедельник, удаляются: ```sql CREATE TABLE table_with_where @@ -741,7 +741,8 @@ ORDER BY d TTL d + INTERVAL 1 MONTH DELETE WHERE toDayOfWeek(d) = 1; ``` -#### Создание таблицы, в которой истекшие строки перекомпрессируются: {#creating-a-table-where-expired-rows-are-recompressed} + +#### Создание таблицы, в которой строки с истёкшим сроком хранения повторно сжимаются: ```sql CREATE TABLE table_for_recompression @@ -756,7 +757,7 @@ TTL d + INTERVAL 1 MONTH RECOMPRESS CODEC(ZSTD(17)), d + INTERVAL 1 YEAR RECOMPR SETTINGS min_rows_for_wide_part = 0, min_bytes_for_wide_part = 0; ``` -Создание таблицы, в которой истекшие строки агрегируются. В результирующих строках `x` содержит максимальное значение среди сгруппированных строк, `y` — минимальное значение, а `d` — любое случайное значение из сгруппированных строк. +Создание таблицы, в которой агрегируются просроченные строки. В результате в столбце `x` содержится максимальное значение по сгруппированным строкам, в `y` — минимальное значение, а в `d` — произвольное значение из сгруппированных строк. ```sql CREATE TABLE table_for_aggregation @@ -772,20 +773,20 @@ ORDER BY (k1, k2) TTL d + INTERVAL 1 MONTH GROUP BY k1, k2 SET x = max(x), y = min(y); ``` -### Удаление истекших данных {#mergetree-removing-expired-data} -Данные с истекшим `TTL` удаляются при слиянии частей данных в ClickHouse. +### Удаление просроченных данных \{#mergetree-removing-expired-data\} + +Данные с истёкшим `TTL` удаляются, когда ClickHouse объединяет части данных. -Когда ClickHouse обнаруживает истекшие данные, он выполняет внеплановое слияние. Для управления частотой таких слияний можно задать параметр `merge_with_ttl_timeout`. Если значение слишком низкое, будет выполняться много внеплановых слияний, что может потреблять значительные ресурсы. +Когда ClickHouse обнаруживает, что данные просрочены, он выполняет внеплановое слияние. Чтобы контролировать частоту таких слияний, вы можете задать `merge_with_ttl_timeout`. Если значение слишком мало, будет выполняться много внеплановых слияний, которые могут потреблять значительный объём ресурсов. -Если вы выполняете запрос `SELECT` между слияниями, вы можете получить истекшие данные. Чтобы этого избежать, используйте запрос [OPTIMIZE](/sql-reference/statements/optimize.md) перед `SELECT`. +Если вы выполняете запрос `SELECT` между слияниями, вы можете получить просроченные данные. Чтобы этого избежать, используйте запрос [OPTIMIZE](/sql-reference/statements/optimize.md) перед `SELECT`. **См. также** - настройка [ttl_only_drop_parts](/operations/settings/merge-tree-settings#ttl_only_drop_parts) - -## Типы дисков {#disk-types} +## Типы дисков \{#disk-types\} Помимо локальных блочных устройств, ClickHouse поддерживает следующие типы хранилищ: @@ -793,37 +794,36 @@ TTL d + INTERVAL 1 MONTH GROUP BY k1, k2 SET x = max(x), y = min(y); - [`gcs` для GCS](/integrations/data-ingestion/gcs/index.md/#creating-a-disk) - [`blob_storage_disk` для Azure Blob Storage](/operations/storing-data#azure-blob-storage) - [`hdfs` для HDFS](/engines/table-engines/integrations/hdfs) -- [`web` для чтения данных из веб-источников в режиме только для чтения](/operations/storing-data#web-storage) +- [`web` для режима только чтения с веба](/operations/storing-data#web-storage) - [`cache` для локального кэширования](/operations/storing-data#using-local-cache) -- [`s3_plain` для резервного копирования в S3](/operations/backup#backuprestore-using-an-s3-disk) -- [`s3_plain_rewritable` для неизменяемых нереплицируемых таблиц в S3](/operations/storing-data.md#s3-plain-rewritable-storage) +- [`s3_plain` для резервных копий в S3](/operations/backup#backuprestore-using-an-s3-disk) +- [`s3_plain_rewritable` для неизменяемых, нереплицируемых таблиц в S3](/operations/storing-data.md#s3-plain-rewritable-storage) +## Использование нескольких блочных устройств для хранения данных \{#table_engine-mergetree-multiple-volumes\} -## Использование нескольких блочных устройств для хранения данных {#table_engine-mergetree-multiple-volumes} +### Введение \{#introduction\} -### Введение {#introduction} +Семейство движков таблиц `MergeTree` может хранить данные на нескольких блочных устройствах. Например, это может быть полезно, когда данные определённой таблицы фактически разделены на «горячие» и «холодные». Самые свежие данные запрашиваются регулярно, но занимают небольшой объём. Напротив, большой «хвост» исторических данных запрашивается редко. Если доступно несколько дисков, «горячие» данные могут располагаться на быстрых дисках (например, NVMe SSD или в памяти), а «холодные» — на относительно медленных (например, HDD). -Семейство движков таблиц `MergeTree` может хранить данные на нескольких блочных устройствах. Например, это полезно, когда данные определённой таблицы неявно делятся на «горячие» и «холодные». К наиболее свежим данным регулярно обращаются, но они занимают небольшой объём. Напротив, исторические данные с «длинным хвостом» запрашиваются редко. Если доступно несколько дисков, «горячие» данные можно размещать на быстрых дисках (например, NVMe SSD или в памяти), а «холодные» данные — на относительно медленных (например, HDD). +Часть данных (data part) — минимальная единица, которую можно перемещать, для таблиц на движке `MergeTree`. Данные, принадлежащие одной части, хранятся на одном диске. Части данных могут перемещаться между дисками в фоновом режиме (в соответствии с пользовательскими настройками), а также с помощью запросов [ALTER](/sql-reference/statements/alter/partition). -Часть данных является минимальной перемещаемой единицей для таблиц на движке `MergeTree`. Данные, относящиеся к одной части, хранятся на одном диске. Части данных могут перемещаться между дисками в фоновом режиме (в соответствии с пользовательскими настройками), а также с помощью запросов [ALTER](/sql-reference/statements/alter/partition). +### Термины \{#terms\} -### Термины {#terms} +- Диск — блочное устройство, смонтированное к файловой системе. +- Диск по умолчанию — диск, на котором расположен путь, указанный в серверной настройке [path](/operations/server-configuration-parameters/settings.md/#path). +- Том — упорядоченный набор одинаковых дисков (аналогично [JBOD](https://en.wikipedia.org/wiki/Non-RAID_drive_architectures)). +- Политика хранения — набор томов и правил перемещения данных между ними. -- Диск — блочное устройство, подключённое к файловой системе. -- Диск по умолчанию — диск, на котором расположен путь, указанный в настройке сервера [path](/operations/server-configuration-parameters/settings.md/#path). -- Том — упорядоченный набор однотипных дисков (аналогично [JBOD](https://en.wikipedia.org/wiki/Non-RAID_drive_architectures)). -- Политика хранения — набор томов и правила перемещения данных между ними. +Названия описанных сущностей можно найти в системных таблицах [system.storage_policies](/operations/system-tables/storage_policies) и [system.disks](/operations/system-tables/disks). Чтобы применить одну из настроенных политик хранения к таблице, используйте настройку `storage_policy` для таблиц семейства движков `MergeTree`. -Названия указанных сущностей можно найти в системных таблицах [system.storage_policies](/operations/system-tables/storage_policies) и [system.disks](/operations/system-tables/disks). Чтобы применить одну из настроенных политик хранения к таблице, используйте настройку `storage_policy` для таблиц семейства движков `MergeTree`. +### Конфигурация -### Конфигурация {#table_engine-mergetree-multiple-volumes_configure} - -Диски, тома и политики хранения должны быть объявлены внутри тега `` в файле в каталоге `config.d`. +Диски, тома и политики хранения должны быть объявлены внутри тега `` или в файле в каталоге `config.d`. :::tip Диски также могут быть объявлены в секции `SETTINGS` запроса. Это полезно -для разового анализа, когда необходимо временно подключить диск, который, например, доступен по URL. -Подробнее см. в разделе [динамическое хранилище](/operations/storing-data#dynamic-configuration). +для разового анализа, когда нужно временно подключить диск, который, например, доступен по URL-адресу. +См. раздел [dynamic storage](/operations/storing-data#dynamic-configuration) для получения дополнительной информации. ::: Структура конфигурации: @@ -831,7 +831,7 @@ TTL d + INTERVAL 1 MONTH GROUP BY k1, k2 SET x = max(x), y = min(y); ```xml - + /mnt/fast_ssd/clickhouse/ @@ -852,9 +852,9 @@ TTL d + INTERVAL 1 MONTH GROUP BY k1, k2 SET x = max(x), y = min(y); Теги: -- `` — имя диска. Имена должны отличаться для всех дисков. -- `path` — путь, по которому сервер будет хранить данные (каталоги `data` и `shadow`); должен заканчиваться на «/». -- `keep_free_space_bytes` — объём свободного дискового пространства, который необходимо зарезервировать. +* `` — имя диска. Имена должны быть разными для всех дисков. +* `path` — путь, по которому сервер будет хранить данные (каталоги `data` и `shadow`); должен заканчиваться символом '/'. +* `keep_free_space_bytes` — объем свободного дискового пространства, который необходимо зарезервировать. Порядок определения дисков не имеет значения. @@ -874,7 +874,7 @@ TTL d + INTERVAL 1 MONTH GROUP BY k1, k2 SET x = max(x), y = min(y); - + 0.2 @@ -882,7 +882,7 @@ TTL d + INTERVAL 1 MONTH GROUP BY k1, k2 SET x = max(x), y = min(y); - + ... @@ -891,19 +891,19 @@ TTL d + INTERVAL 1 MONTH GROUP BY k1, k2 SET x = max(x), y = min(y); Теги: -* `policy_name_N` — имя политики. Имена политик должны быть уникальными. -* `volume_name_N` — имя тома. Имена томов должны быть уникальными. +* `policy_name_N` — Имя политики. Имена политик должны быть уникальными. +* `volume_name_N` — Имя тома. Имена томов должны быть уникальными. * `disk` — диск внутри тома. -* `max_data_part_size_bytes` — максимальный размер части данных, которая может быть сохранена на любом из дисков тома. Если оцениваемый размер слитой части данных больше, чем `max_data_part_size_bytes`, то эта часть будет записана на следующий том. По сути, эта возможность позволяет хранить новые/маленькие части данных на «горячем» томе (SSD) и перемещать их на «холодный» том (HDD), когда они становятся достаточно крупными. Не используйте этот параметр, если ваша политика содержит только один том. -* `move_factor` — когда количество доступного места становится меньше этого коэффициента, данные автоматически начинают перемещаться на следующий том, если он есть (по умолчанию 0.1). ClickHouse сортирует существующие части данных по размеру от наибольшей к наименьшей (в порядке убывания) и выбирает части с суммарным размером, достаточным для выполнения условия `move_factor`. Если суммарного размера всех частей недостаточно, будут перемещены все части. -* `perform_ttl_move_on_insert` — отключает перемещение по TTL при INSERT части данных. По умолчанию (если параметр включен), если вставляется часть данных, которая уже просрочена по правилу перемещения TTL, она сразу записывается на том/диск, указанный в правиле перемещения. Это может значительно замедлить вставку, если целевой том/диск медленный (например, S3). Если параметр отключен, уже просроченная часть данных сначала записывается на том по умолчанию, а затем сразу же переносится на том, указанный правилом TTL. -* `load_balancing` — политика балансировки по дискам: `round_robin` или `least_used`. -* `least_used_ttl_ms` — настройка тайм-аута (в миллисекундах) для обновления информации о доступном пространстве на всех дисках (`0` — обновлять всегда, `-1` — никогда не обновлять, значение по умолчанию — `60000`). Обратите внимание: если диск может использоваться только ClickHouse и не подвержен онлайн-изменению размера/сжатию файловой системы, можно использовать `-1`; во всех остальных случаях это не рекомендуется, так как в итоге это приведёт к некорректному распределению пространства. -* `prefer_not_to_merge` — не следует использовать этот параметр. Отключает слияние частей данных на этом томе (это вредно и приводит к деградации производительности). Когда этот параметр включён (не делайте этого), слияние данных на этом томе не допускается (что плохо). Это позволяет (но вам это не нужно) управлять (если вы хотите чем-то управлять, вы совершаете ошибку) тем, как ClickHouse работает с медленными дисками (но ClickHouse знает лучше, поэтому, пожалуйста, не используйте этот параметр). -* `volume_priority` — определяет приоритет (порядок), в котором заполняются тома. Чем меньше значение, тем выше приоритет. Значения параметра должны быть натуральными числами и совместно покрывать диапазон от 1 до N (где N — наименьший приоритет) без пропуска каких-либо чисел. - * Если *у всех* томов задан приоритет, они используются в указанном порядке. - * Если только *у некоторых* томов задан приоритет, тома без приоритета имеют наименьший приоритет и используются в том порядке, в котором они определены в конфигурации. - * Если *ни у одного* тома приоритет не задан, их приоритет устанавливается в соответствии с порядком их объявления в конфигурации. +* `max_data_part_size_bytes` — максимальный размер части данных, которая может быть сохранена на любом из дисков тома. Если оценочный размер сливаемой части будет больше, чем `max_data_part_size_bytes`, то эта часть будет записана на следующий том. По сути эта возможность позволяет держать новые/маленькие части на «горячем» томе (SSD) и перемещать их на «холодный» том (HDD), когда они достигают большого размера. Не используйте этот параметр, если в вашей политике только один том. +* `move_factor` — когда доступное пространство становится меньше этого коэффициента, данные автоматически начинают перемещаться на следующий том, если он есть (по умолчанию 0.1). ClickHouse сортирует существующие части данных по размеру от наибольшей к наименьшей (по убыванию) и выбирает части с суммарным размером, достаточным для выполнения условия `move_factor`. Если суммарный размер всех частей недостаточен, будут перемещены все части. +* `perform_ttl_move_on_insert` — Отключает перемещение по TTL при INSERT части данных. По умолчанию (если включено), если мы вставляем часть данных, которая уже просрочена по правилу перемещения TTL, она сразу попадает на том/диск, указанный в правиле перемещения. Это может существенно замедлить вставку, если целевой том/диск медленный (например, S3). Если выключено, то уже просроченная часть данных записывается на том по умолчанию, а затем сразу перемещается на том, указанный в правиле TTL. +* `load_balancing` — политика балансировки дисков: `round_robin` или `least_used`. +* `least_used_ttl_ms` — настройка таймаута (в миллисекундах) для обновления информации о доступном пространстве на всех дисках (`0` — всегда обновлять, `-1` — никогда не обновлять, по умолчанию `60000`). Обратите внимание: если диск может использоваться только ClickHouse и не подвержен онлайн-изменению размера файловой системы (расширению/сжатию), вы можете использовать `-1`; во всех остальных случаях это не рекомендуется, так как в итоге это приведёт к некорректному распределению пространства. +* `prefer_not_to_merge` — Не следует использовать этот параметр. Отключает слияние частей данных на этом томе (это вредно и приводит к деградации производительности). При включённом параметре (не делайте этого) слияние данных на этом томе не допускается (что плохо). Это позволяет (но вам это не нужно) управлять (если вы хотите что‑то контролировать, вы совершаете ошибку) тем, как ClickHouse работает с медленными дисками (но ClickHouse знает лучше, поэтому, пожалуйста, не используйте этот параметр). +* `volume_priority` — Определяет приоритет (порядок), в котором заполняются тома. Меньшее значение означает более высокий приоритет. Значения параметра должны быть натуральными числами и совместно покрывать диапазон от 1 до N (для самого низкого приоритета) без пропусков. + * Если *все* тома помечены, они получают приоритет в указанном порядке. + * Если помечены только *некоторые* тома, те, у которых нет метки, имеют самый низкий приоритет и получают приоритет в порядке, в котором они определены в конфигурации. + * Если *ни один* том не помечен, их приоритет задаётся в соответствии с порядком, в котором они объявлены в конфигурации. * Два тома не могут иметь одинаковое значение приоритета. Примеры конфигурации: @@ -912,9 +912,9 @@ TTL d + INTERVAL 1 MONTH GROUP BY k1, k2 SET x = max(x), y = min(y); ... - + - + disk1 disk2 @@ -950,13 +950,13 @@ TTL d + INTERVAL 1 MONTH GROUP BY k1, k2 SET x = max(x), y = min(y); ``` -В данном примере политика `hdd_in_order` реализует подход [циклического перебора](https://en.wikipedia.org/wiki/Round-robin_scheduling). Эта политика определяет только один том (`single`), куски данных хранятся на всех его дисках в циклическом порядке. Такая политика может быть весьма полезна, если к системе подключено несколько однотипных дисков, но RAID не настроен. Имейте в виду, что каждый отдельный дисковый накопитель не является надёжным, и вы можете компенсировать это коэффициентом репликации 3 или более. +В приведённом примере политика `hdd_in_order` реализует стратегию [round-robin](https://en.wikipedia.org/wiki/Round-robin_scheduling). Поэтому эта политика определяет только один том (`single`), а части данных хранятся на всех его дисках по кругу. Такая политика может быть весьма полезна, если в системе подключено несколько однотипных дисков, но RAID не настроен. Имейте в виду, что каждый отдельный диск ненадёжен, и может потребоваться компенсировать это фактором репликации 3 или более. -Если в системе доступны различные типы дисков, можно использовать политику `moving_from_ssd_to_hdd`. Том `hot` состоит из SSD-диска (`fast_ssd`), максимальный размер куска, который может храниться на этом томе, составляет 1 ГБ. Все куски размером более 1 ГБ будут храниться непосредственно на томе `cold`, который содержит HDD-диск `disk1`. -Кроме того, как только диск `fast_ssd` заполнится более чем на 80%, данные будут перенесены на `disk1` фоновым процессом. +Если в системе доступны разные типы дисков, вместо этого можно использовать политику `moving_from_ssd_to_hdd`. Том `hot` состоит из SSD-диска (`fast_ssd`), и максимальный размер части, которая может храниться на этом томе, составляет 1 ГБ. Все части размером более 1 ГБ будут храниться непосредственно на томе `cold`, который содержит HDD-диск `disk1`. +Кроме того, как только диск `fast_ssd` будет заполнен более чем на 80%, данные будут перенесены на `disk1` фоновым процессом. -Порядок перечисления томов в политике хранения важен в случае, если хотя бы один из перечисленных томов не имеет явного параметра `volume_priority`. -Как только том переполняется, данные перемещаются на следующий. Порядок перечисления дисков также важен, поскольку данные хранятся на них по очереди. +Порядок перечисления томов в политике хранения важен в случае, если хотя бы один из перечисленных томов не имеет явно заданного параметра `volume_priority`. +Когда том переполнен, данные переносятся на следующий. Порядок перечисления дисков также важен, поскольку данные записываются на них по очереди. При создании таблицы к ней можно применить одну из настроенных политик хранения: @@ -972,49 +972,47 @@ PARTITION BY toYYYYMM(EventDate) SETTINGS storage_policy = 'moving_from_ssd_to_hdd' ``` -Политика хранения `default` подразумевает использование только одного тома, который состоит из одного диска, указанного в ``. -Политику хранения можно изменить после создания таблицы с помощью запроса [ALTER TABLE ... MODIFY SETTING], новая политика должна включать все старые диски и тома с теми же именами. +Политика хранения `default` подразумевает использование только одного тома, который включает один диск, заданный в ``. +Вы можете изменить политику хранения после создания таблицы с помощью запроса [ALTER TABLE ... MODIFY SETTING]; при этом новая политика должна включать все старые диски и тома с теми же именами. + +Количество потоков, выполняющих фоновое перемещение частей данных, можно изменить с помощью настройки [background_move_pool_size](/operations/server-configuration-parameters/settings.md/#background_move_pool_size). -Количество потоков, выполняющих фоновое перемещение кусков данных, можно изменить с помощью настройки [background_move_pool_size](/operations/server-configuration-parameters/settings.md/#background_move_pool_size). -### Подробности {#details} +### Подробности \{#details\} -В случае таблиц `MergeTree` данные попадают на диск различными способами: +В случае таблиц `MergeTree` данные попадают на диск разными способами: - В результате вставки (запрос `INSERT`). - Во время фоновых слияний и [мутаций](/sql-reference/statements/alter#mutations). - При загрузке с другой реплики. - В результате заморозки партиции [ALTER TABLE ... FREEZE PARTITION](/sql-reference/statements/alter/partition#freeze-partition). -Во всех этих случаях, за исключением мутаций и заморозки партиций, кусок хранится на томе и диске в соответствии с заданной политикой хранения: - -1. Выбирается первый том (в порядке определения), который имеет достаточно дискового пространства для хранения куска (`unreserved_space > current_part_size`) и позволяет хранить куски заданного размера (`max_data_part_size_bytes > current_part_size`). -2. В пределах этого тома выбирается диск, который следует за тем, который использовался для хранения предыдущего фрагмента данных, и который имеет свободное пространство больше размера куска (`unreserved_space - keep_free_space_bytes > current_part_size`). +Во всех этих случаях, за исключением мутаций и заморозки партиций, часть данных сохраняется на томе и диске в соответствии с заданной политикой хранения: -Внутри мутации и заморозка партиций используют [жёсткие ссылки](https://en.wikipedia.org/wiki/Hard_link). Жёсткие ссылки между различными дисками не поддерживаются, поэтому в таких случаях результирующие куски хранятся на тех же дисках, что и исходные. +1. Выбирается первый том (в порядке объявления), у которого достаточно свободного дискового пространства для хранения части (`unreserved_space > current_part_size`) и который допускает хранение частей заданного размера (`max_data_part_size_bytes > current_part_size`). +2. Внутри этого тома выбирается тот диск, который следует за диском, использованным для хранения предыдущей части данных, и у которого свободное пространство больше размера части (`unreserved_space - keep_free_space_bytes > current_part_size`). -В фоновом режиме куски перемещаются между томами на основе объёма свободного пространства (параметр `move_factor`) в соответствии с порядком, в котором тома объявлены в конфигурационном файле. -Данные никогда не переносятся с последнего тома на первый. Для мониторинга фоновых перемещений можно использовать системные таблицы [system.part_log](/operations/system-tables/part_log) (поле `type = MOVE_PART`) и [system.parts](/operations/system-tables/parts.md) (поля `path` и `disk`). Также подробная информация доступна в логах сервера. +Внутренним образом мутации и заморозка партиций используют [жёсткие ссылки](https://en.wikipedia.org/wiki/Hard_link). Жёсткие ссылки между разными дисками не поддерживаются, поэтому в таких случаях результирующие части сохраняются на тех же дисках, что и исходные. -Пользователь может принудительно переместить кусок или партицию с одного тома на другой с помощью запроса [ALTER TABLE ... MOVE PART\|PARTITION ... TO VOLUME\|DISK ...](/sql-reference/statements/alter/partition), при этом учитываются все ограничения для фоновых операций. Запрос инициирует перемещение самостоятельно и не ожидает завершения фоновых операций. Пользователь получит сообщение об ошибке, если недостаточно свободного пространства или если какое-либо из требуемых условий не выполнено. +В фоновом режиме части перемещаются между томами на основе количества свободного места (параметр `move_factor`) в соответствии с порядком, в котором тома объявлены в конфигурационном файле. +Данные никогда не переносятся ни с последнего тома, ни на первый том. Для мониторинга фоновых перемещений можно использовать системные таблицы [system.part_log](/operations/system-tables/part_log) (поле `type = MOVE_PART`) и [system.parts](/operations/system-tables/parts.md) (поля `path` и `disk`). Также подробная информация может быть найдена в логах сервера. -Перемещение данных не влияет на репликацию данных. Поэтому для одной и той же таблицы на разных репликах могут быть указаны различные политики хранения. +Пользователь может принудительно переместить часть или партицию с одного тома на другой с помощью запроса [ALTER TABLE ... MOVE PART\|PARTITION ... TO VOLUME\|DISK ...](/sql-reference/statements/alter/partition); при этом учитываются все ограничения для фоновых операций. Запрос самостоятельно инициирует перемещение и не ждёт завершения фоновых операций. Пользователь получит сообщение об ошибке, если недостаточно свободного места или не выполнено какое-либо из требуемых условий. +Перемещение данных не мешает репликации данных. Поэтому для одной и той же таблицы на разных репликах могут быть заданы разные политики хранения. -После завершения фоновых слияний и мутаций старые части удаляются только по истечении заданного времени (`old_parts_lifetime`). -В течение этого времени они не перемещаются на другие тома или диски. Поэтому, пока части окончательно не удалены, они продолжают учитываться при расчёте занятого дискового пространства. +После завершения фоновых слияний и мутаций старые части удаляются только спустя определённый промежуток времени (`old_parts_lifetime`). +В течение этого времени они не перемещаются на другие тома или диски. Поэтому до окончательного удаления части по-прежнему учитываются при оценке занятого дискового пространства. -Пользователь может равномерно распределять новые крупные части по разным дискам тома [JBOD](https://en.wikipedia.org/wiki/Non-RAID_drive_architectures) с помощью настройки [min_bytes_to_rebalance_partition_over_jbod](/operations/settings/merge-tree-settings.md/#min_bytes_to_rebalance_partition_over_jbod). +Пользователь может более равномерно распределять новые большие части по разным дискам тома [JBOD](https://en.wikipedia.org/wiki/Non-RAID_drive_architectures) с помощью настройки [min_bytes_to_rebalance_partition_over_jbod](/operations/settings/merge-tree-settings.md/#min_bytes_to_rebalance_partition_over_jbod). +## Использование внешнего хранилища для хранения данных - -## Использование внешнего хранилища для хранения данных {#table_engine-mergetree-s3} - -Движки таблиц семейства [MergeTree](/engines/table-engines/mergetree-family/mergetree.md) могут хранить данные в `S3`, `AzureBlobStorage`, `HDFS`, используя диски с типами `s3`, `azure_blob_storage`, `hdfs` соответственно. Подробнее см. в разделе [настройка параметров внешнего хранилища](/operations/storing-data.md/#configuring-external-storage). +Движки таблиц семейства [MergeTree](/engines/table-engines/mergetree-family/mergetree.md) могут хранить данные в `S3`, `AzureBlobStorage`, `HDFS`, используя диск с типом `s3`, `azure_blob_storage`, `hdfs` соответственно. Для получения дополнительной информации см. раздел [настройка параметров внешнего хранилища](/operations/storing-data.md/#configuring-external-storage). Пример использования [S3](https://aws.amazon.com/s3/) в качестве внешнего хранилища с диском типа `s3`. -Разметка конфигурации: +Фрагмент конфигурации: ```xml @@ -1055,36 +1053,36 @@ SETTINGS storage_policy = 'moving_from_ssd_to_hdd' ``` -См. также [настройка параметров внешнего хранилища](/operations/storing-data.md/#configuring-external-storage). +См. также [настройку вариантов внешних хранилищ](/operations/storing-data.md/#configuring-external-storage). -:::note конфигурация кеша -В версиях ClickHouse с 22.3 по 22.7 используется другая конфигурация кеша. См. раздел [использование локального кеша](/operations/storing-data.md/#using-local-cache), если вы используете одну из этих версий. +:::note конфигурация кэша +Версии ClickHouse с 22.3 по 22.7 используют другую конфигурацию кэша, см. [использование локального кэша](/operations/storing-data.md/#using-local-cache), если вы используете одну из этих версий. ::: -## Виртуальные столбцы {#virtual-columns} +## Виртуальные столбцы \{#virtual-columns\} -- `_part` — Имя части. -- `_part_index` — Порядковый индекс части в результате запроса. -- `_part_starting_offset` — Накопительное смещение начальной строки части в результате запроса. -- `_part_offset` — Номер строки в части. -- `_part_granule_offset` — Номер гранулы в части. +- `_part` — Имя парта. +- `_part_index` — Последовательный индекс парта в результате запроса. +- `_part_starting_offset` — Кумулятивный номер первой строки парта в результате запроса. +- `_part_offset` — Номер строки в парте. +- `_part_granule_offset` — Номер гранулы в парте. - `_partition_id` — Имя партиции. -- `_part_uuid` — Уникальный идентификатор части (если включена настройка MergeTree `assign_part_uuids`). -- `_part_data_version` — Версия данных части (минимальный номер блока или версия мутации). -- `_partition_value` — Значения (кортеж) выражения `partition by`. +- `_part_uuid` — Уникальный идентификатор парта (если включена настройка MergeTree `assign_part_uuids`). +- `_part_data_version` — Версия данных парта (либо минимальный номер блока, либо версия мутации). +- `_partition_value` — Значения (кортеж) выражения `PARTITION BY`. - `_sample_factor` — Коэффициент выборки (из запроса). -- `_block_number` — Исходный номер блока для строки, назначенный при вставке; сохраняется при слияниях, если включена настройка `enable_block_number_column`. -- `_block_offset` — Исходный номер строки в блоке, назначенный при вставке; сохраняется при слияниях, если включена настройка `enable_block_offset_column`. -- `_disk_name` — Имя диска, используемого для хранения данных. - +- `_block_number` — Исходный номер блока для строки, который был присвоен при вставке; сохраняется при слияниях, когда включена настройка `enable_block_number_column`. +- `_block_offset` — Исходный номер строки в блоке, который был присвоен при вставке; сохраняется при слияниях, когда включена настройка `enable_block_offset_column`. +- `_disk_name` — Имя диска, используемого для хранения. -## Статистика столбцов {#column-statistics} +## Статистика по столбцам + -Объявление статистики находится в секции столбцов запроса `CREATE` для таблиц семейства `*MergeTree*` при включении `set allow_experimental_statistics = 1`. +Объявление статистики задаётся в секции `COLUMNS` запроса `CREATE` для таблиц из семейства `*MergeTree*` при включённой настройке `set allow_experimental_statistics = 1`. ```sql CREATE TABLE tab @@ -1096,67 +1094,67 @@ ENGINE = MergeTree ORDER BY a ``` -Статистикой также можно управлять с помощью операторов `ALTER`. +Мы также можем изменять статистику с помощью операторов `ALTER`. ```sql ALTER TABLE tab ADD STATISTICS b TYPE TDigest, Uniq; ALTER TABLE tab DROP STATISTICS a; ``` -Эта легковесная статистика агрегирует информацию о распределении значений в столбцах. Статистика хранится в каждом куске и обновляется при каждой вставке данных. -Она может использоваться для оптимизации prewhere только при включении `set allow_statistics_optimize = 1`. +Эта легковесная статистика агрегирует информацию о распределении значений в столбцах. Статистика хранится в каждой части и обновляется при каждой вставке. +Её можно использовать для оптимизации `PREWHERE` только при включённом параметре `set allow_statistics_optimize = 1`. + -### Доступные типы статистики столбцов {#available-types-of-column-statistics} +### Доступные типы статистики по столбцам \{#available-types-of-column-statistics\} - `MinMax` - Минимальное и максимальное значения столбца, что позволяет оценить селективность диапазонных фильтров для числовых столбцов. + Минимальное и максимальное значения столбца, что позволяет оценивать селективность диапазонных фильтров по числовым столбцам. - Синтаксис: `minmax` + Синтаксис: `minmax` - `TDigest` - Скетчи [TDigest](https://github.com/tdunning/t-digest), которые позволяют вычислять приблизительные процентили (например, 90-й процентиль) для числовых столбцов. + Скетчи [TDigest](https://github.com/tdunning/t-digest), которые позволяют вычислять приблизительные перцентили (например, 90-й перцентиль) для числовых столбцов. - Синтаксис: `tdigest` + Синтаксис: `tdigest` - `Uniq` - Скетчи [HyperLogLog](https://en.wikipedia.org/wiki/HyperLogLog), которые предоставляют оценку количества уникальных значений в столбце. + Скетчи [HyperLogLog](https://en.wikipedia.org/wiki/HyperLogLog), которые позволяют оценить, сколько различных значений содержит столбец. - Синтаксис: `uniq` + Синтаксис: `uniq` - `CountMin` - Скетчи [CountMin](https://en.wikipedia.org/wiki/Count%E2%80%93min_sketch), которые предоставляют приблизительный подсчет частоты каждого значения в столбце. - - Синтаксис: `countmin` + Скетчи [CountMin](https://en.wikipedia.org/wiki/Count%E2%80%93min_sketch), которые предоставляют приблизительный подсчёт частоты каждого значения в столбце. -### Поддерживаемые типы данных {#supported-data-types} + Синтаксис: `countmin` -| | (U)Int*, Float*, Decimal(_), Date_, Boolean, Enum\* | String или FixedString | -| -------- | --------------------------------------------------- | --------------------- | -| CountMin | ✔ | ✔ | -| MinMax | ✔ | ✗ | -| TDigest | ✔ | ✗ | -| Uniq | ✔ | ✔ | +### Поддерживаемые типы данных \{#supported-data-types\} -### Поддерживаемые операции {#supported-operations} +| | (U)Int*, Float*, Decimal(*), Date*, Boolean, Enum* | String или FixedString | +|-----------|----------------------------------------------------|------------------------| +| CountMin | ✔ | ✔ | +| MinMax | ✔ | ✗ | +| TDigest | ✔ | ✗ | +| Uniq | ✔ | ✔ | -| | Фильтры равенства (==) | Диапазонные фильтры (`>, >=, <, <=`) | -| -------- | --------------------- | ------------------------------ | -| CountMin | ✔ | ✗ | -| MinMax | ✗ | ✔ | -| TDigest | ✗ | ✔ | -| Uniq | ✔ | ✗ | +### Поддерживаемые операции \{#supported-operations\} +| | Фильтры равенства (==) | Фильтры по диапазону (`>, >=, <, <=`) | +|-----------|------------------------|---------------------------------------| +| CountMin | ✔ | ✗ | +| MinMax | ✗ | ✔ | +| TDigest | ✗ | ✔ | +| Uniq | ✔ | ✗ | -## Настройки на уровне столбцов {#column-level-settings} +## Параметры на уровне столбцов -Некоторые настройки MergeTree можно переопределить на уровне столбцов: +Некоторые настройки MergeTree можно переопределять на уровне столбцов: -- `max_compress_block_size` — Максимальный размер блоков несжатых данных перед сжатием при записи в таблицу. -- `min_compress_block_size` — Минимальный размер блоков несжатых данных, требуемый для сжатия при записи следующей метки. +* `max_compress_block_size` — максимальный размер блоков несжатых данных перед их сжатием при записи в таблицу. +* `min_compress_block_size` — минимальный размер блоков несжатых данных, необходимый для сжатия при записи следующей метки. Пример: @@ -1170,21 +1168,21 @@ ENGINE = MergeTree ORDER BY id ``` -Настройки на уровне столбцов можно изменить или удалить с помощью [ALTER MODIFY COLUMN](/sql-reference/statements/alter/column.md), например: +Настройки для отдельных столбцов можно изменять или удалять с помощью [ALTER MODIFY COLUMN](/sql-reference/statements/alter/column.md), например: -- Удаление `SETTINGS` из объявления столбца: +* Удалить `SETTINGS` из определения столбца: ```sql ALTER TABLE tab MODIFY COLUMN document REMOVE SETTINGS; ``` -- Изменение настройки: +* Измените параметр: ```sql ALTER TABLE tab MODIFY COLUMN document MODIFY SETTING min_compress_block_size = 8192; ``` -- Сброс одной или нескольких настроек также удаляет объявление настройки в выражении столбца запроса CREATE таблицы. +* Сбрасывает одну или несколько настроек, а также удаляет объявление настройки в определении столбца в запросе CREATE для таблицы. ```sql ALTER TABLE tab MODIFY COLUMN document RESET SETTING min_compress_block_size; diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/alias.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/alias.md index f90e756406a..57daf677b46 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/alias.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/alias.md @@ -1,19 +1,27 @@ --- -description: 'Движок таблицы Alias создает прозрачный прокси к другой таблице. Все операции перенаправляются в целевую таблицу, при этом сам алиас не хранит никаких данных.' +description: 'Табличный движок Alias создает прозрачный прокси к другой таблице. Все операции перенаправляются в целевую таблицу, при этом сам алиас не хранит данные.' sidebar_label: 'Alias' sidebar_position: 5 slug: /engines/table-engines/special/alias -title: 'Движок таблицы Alias' +title: 'Табличный движок Alias' doc_type: 'reference' --- +import ExperimentalBadge from '@theme/badges/ExperimentalBadge'; # Движок таблицы Alias -Движок `Alias` создает прокси к другой таблице. Все операции чтения и записи перенаправляются в целевую таблицу, при этом сама таблица-алиас не хранит данные и лишь содержит ссылку на целевую таблицу. + +Движок `Alias` создаёт прокси для другой таблицы. Все операции чтения и записи перенаправляются в целевую таблицу, при этом сама таблица-алиас не хранит данных и только поддерживает ссылку на целевую таблицу. +:::info +Это экспериментальная функция, которая может измениться в будущих релизах с нарушением обратной совместимости. +Включите использование движка таблицы Alias +с помощью настройки [allow_experimental_alias_table_engine](/operations/settings/settings#allow_experimental_alias_table_engine). +Введите команду `set allow_experimental_alias_table_engine = 1`. +::: ## Создание таблицы @@ -22,7 +30,7 @@ CREATE TABLE [db_name.]alias_name ENGINE = Alias(target_table) ``` -Либо с явным указанием имени базы данных: +Или с указанием имени базы данных: ```sql CREATE TABLE [db_name.]alias_name @@ -30,7 +38,7 @@ ENGINE = Alias(target_db, target_table) ``` :::note -Таблица `Alias` не поддерживает явное задание столбцов. Столбцы автоматически наследуются от целевой таблицы. Это гарантирует, что псевдоним всегда соответствует схеме целевой таблицы. +Таблица `Alias` не поддерживает явное определение столбцов. Столбцы автоматически наследуются от целевой таблицы. Это гарантирует, что таблица `Alias` всегда соответствует схеме целевой таблицы. ::: @@ -39,17 +47,16 @@ ENGINE = Alias(target_db, target_table) - **`target_db (optional)`** — Имя базы данных, содержащей целевую таблицу. - **`target_table`** — Имя целевой таблицы. - - ## Поддерживаемые операции {#supported-operations} Движок таблицы `Alias` поддерживает все основные операции. + ### Операции с целевой таблицей {#operations-on-target} -Эти операции пробрасываются в целевую таблицу: +Эти операции проксируются на целевую таблицу: -| Operation | Support | Description | -|-----------|---------|-------------| +| Операция | Поддержка | Описание | +|-----------|-----------|----------| | `SELECT` | ✅ | Чтение данных из целевой таблицы | | `INSERT` | ✅ | Запись данных в целевую таблицу | | `INSERT SELECT` | ✅ | Пакетная вставка в целевую таблицу | @@ -63,20 +70,18 @@ ENGINE = Alias(target_db, target_table) ### Операции с самим алиасом {#operations-on-alias} -Эти операции затрагивают только алиас, а **не** целевую таблицу: +Эти операции применяются только к алиасу, **а не** к целевой таблице: -| Operation | Support | Description | -|-----------|---------|-------------| +| Операция | Поддержка | Описание | +|----------|-----------|----------| | `DROP TABLE` | ✅ | Удаляет только алиас, целевая таблица остаётся без изменений | | `RENAME TABLE` | ✅ | Переименовывает только алиас, целевая таблица остаётся без изменений | +## Примеры использования {#usage-examples} +### Создание простого алиаса -## Примеры использования - -### Создание простого псевдонима - -Создайте простой псевдоним в той же базе данных: +Создайте простой алиас в этой же базе данных: ```sql -- Создать исходную таблицу @@ -104,16 +109,17 @@ SELECT * FROM data_alias; └────┴──────┴───────┘ ``` -### Псевдоним для другой базы данных -Создайте псевдоним, который ссылается на таблицу в другой базе данных: +### Межбазовый псевдоним + +Создайте псевдоним, ссылающийся на таблицу в другой базе данных: ```sql --- Создание баз данных +-- Создать базы данных CREATE DATABASE db1; CREATE DATABASE db2; --- Создание исходной таблицы в db1 +-- Создать исходную таблицу в db1 CREATE TABLE db1.events ( timestamp DateTime, event_type String, @@ -121,10 +127,10 @@ CREATE TABLE db1.events ( ) ENGINE = MergeTree ORDER BY timestamp; --- Создание псевдонима в db2, ссылающегося на db1.events +-- Создать псевдоним в db2, указывающий на db1.events CREATE TABLE db2.events_alias ENGINE = Alias('db1', 'events'); --- Или с использованием формата database.table +-- Или используя формат database.table CREATE TABLE db2.events_alias2 ENGINE = Alias('db1.events'); -- Оба псевдонима работают одинаково @@ -132,6 +138,7 @@ INSERT INTO db2.events_alias VALUES (now(), 'click', 100); SELECT * FROM db2.events_alias2; ``` + ### Операции записи через алиас Все операции записи перенаправляются в целевую таблицу: @@ -151,20 +158,21 @@ INSERT INTO metrics_alias VALUES (now(), 'cpu_usage', 45.2), (now(), 'memory_usage', 78.5); --- Вставка с помощью SELECT +-- Вставка с SELECT INSERT INTO metrics_alias SELECT now(), 'disk_usage', number * 10 FROM system.numbers LIMIT 5; --- Проверка наличия данных в целевой таблице +-- Проверка данных в целевой таблице SELECT count() FROM metrics; -- Возвращает 7 SELECT count() FROM metrics_alias; -- Возвращает 7 ``` + ### Изменение схемы -Операции `ALTER` изменяют схему целевой таблицы: +Операции ALTER изменяют схему целевой таблицы: ```sql CREATE TABLE users ( @@ -175,7 +183,7 @@ ORDER BY id; CREATE TABLE users_alias ENGINE = Alias('users'); --- Добавить столбец через псевдоним +-- Добавление столбца через псевдоним ALTER TABLE users_alias ADD COLUMN email String DEFAULT ''; -- Столбец добавляется в целевую таблицу @@ -190,7 +198,8 @@ DESCRIBE users; └───────┴────────┴──────────────┴────────────────────┘ ``` -### Модификации данных + +### Мутации данных Поддерживаются операции UPDATE и DELETE: @@ -227,10 +236,10 @@ SELECT * FROM products ORDER BY id; └────┴──────────┴───────┴────────┘ ``` -### Операции с партициями -Для партиционированных таблиц операции с партициями перенаправляются: +### Операции с партициями +Для секционированных таблиц операции с партициями передаются далее: ```sql CREATE TABLE logs ( @@ -248,20 +257,21 @@ INSERT INTO logs_alias VALUES ('2024-02-15', 'ERROR', 'message2'), ('2024-03-15', 'INFO', 'message3'); --- Отключение партиции через псевдоним +-- Отсоединить партицию через псевдоним ALTER TABLE logs_alias DETACH PARTITION '202402'; -SELECT count() FROM logs_alias; -- Возвращает 2 (партиция 202402 отключена) +SELECT count() FROM logs_alias; -- Возвращает 2 (партиция 202402 отсоединена) --- Подключение партиции обратно +-- Присоединить партицию обратно ALTER TABLE logs_alias ATTACH PARTITION '202402'; SELECT count() FROM logs_alias; -- Возвращает 3 ``` + ### Оптимизация таблицы -Выполните операцию `OPTIMIZE` для слияния частей в целевой таблице: +Оптимизируйте операции по слиянию частей в целевой таблице: ```sql CREATE TABLE events ( @@ -283,19 +293,20 @@ WHERE database = currentDatabase() AND table = 'events' AND active; --- Оптимизация через псевдоним +-- Оптимизация через алиас OPTIMIZE TABLE events_alias FINAL; --- Части объединены в целевой таблице +-- Части объединяются в целевой таблице SELECT count() FROM system.parts WHERE database = currentDatabase() AND table = 'events' AND active; -- Возвращает 1 ``` -### Управление псевдонимами -Псевдонимы можно переименовывать или удалять по отдельности: +### Управление алиасами + +Алиасы можно переименовывать или удалять независимо: ```sql CREATE TABLE important_data ( @@ -308,15 +319,15 @@ INSERT INTO important_data VALUES (1, 'critical'), (2, 'important'); CREATE TABLE old_alias ENGINE = Alias('important_data'); --- Переименование псевдонима (целевая таблица остаётся без изменений) +-- Переименование псевдонима (целевая таблица не изменяется) RENAME TABLE old_alias TO new_alias; -- Создание ещё одного псевдонима для той же таблицы CREATE TABLE another_alias ENGINE = Alias('important_data'); --- Удаление одного псевдонима (целевая таблица и остальные псевдонимы остаются без изменений) +-- Удаление одного псевдонима (целевая таблица и другие псевдонимы не изменяются) DROP TABLE new_alias; -SELECT * FROM another_alias; -- Всё ещё работает -SELECT count() FROM important_data; -- Данные целы, возвращает 2 +SELECT * FROM another_alias; -- По-прежнему работает +SELECT count() FROM important_data; -- Данные не повреждены, возвращается 2 ``` diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/index.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/index.md index f4058e0abc2..1918ee0471c 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/index.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/index.md @@ -13,40 +13,18 @@ doc_type: 'reference' Существует три основные категории движков таблиц: -* [Семейство движков MergeTree](../../../engines/table-engines/mergetree-family/index.md) для основного использования в продакшене. -* [Семейство движков Log](../../../engines/table-engines/log-family/index.md) для небольших временных данных. -* [Движки таблиц для интеграций](../../../engines/table-engines/integrations/index.md). - -Оставшиеся движки уникальны по своему назначению и пока не объединены в семейства, поэтому они отнесены к этой «специальной» категории. - -{/* Оглавление для этой страницы генерируется автоматически с помощью - https://github.com/ClickHouse/clickhouse-docs/blob/main/scripts/autogenerate-table-of-contents.sh - на основе полей YAML front matter: slug, description, title. - - Если вы заметили ошибку, отредактируйте YAML front matter соответствующих страниц. - */ } - - -{/*AUTOGENERATED_START*/ } - -| Page | Description | -| ---------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [Alias table engine](/engines/table-engines/special/alias) | Движок таблиц Alias создает прозрачный прокси для другой таблицы. Все операции перенаправляются в целевую таблицу, при этом алиас сам по себе не хранит данные. | -| [Distributed table engine](/engines/table-engines/special/distributed) | Таблицы с движком Distributed не хранят собственные данные, но позволяют выполнять распределенную обработку запросов на нескольких серверах. Чтение автоматически параллелизуется. При чтении используются индексы таблиц на удаленных серверах, если они есть. | -| [Dictionary table engine](/engines/table-engines/special/dictionary) | Движок `Dictionary` отображает данные словаря в виде таблицы ClickHouse. | -| [Merge table engine](/engines/table-engines/special/merge) | Движок `Merge` (не путать с `MergeTree`) сам по себе не хранит данные, но позволяет одновременно читать из любого количества других таблиц. | -| [Executable and ExecutablePool table engines](/engines/table-engines/special/executable) | Движки таблиц `Executable` и `ExecutablePool` позволяют определить таблицу, строки которой генерируются заданным вами скриптом (путем записи строк в **stdout**). | -| [File table engine](/engines/table-engines/special/file) | Движок таблиц File хранит данные в файле в одном из поддерживаемых форматов (`TabSeparated`, `Native` и т. д.). | -| [Null table engine](/engines/table-engines/special/null) | При записи в таблицу `Null` данные игнорируются. При чтении из таблицы `Null` результат пуст. | -| [Set table engine](/engines/table-engines/special/set) | Набор данных, который всегда находится в оперативной памяти (RAM). Предназначен для использования в правой части оператора `IN`. | -| [Join table engine](/engines/table-engines/special/join) | Опциональная предварительно подготовленная структура данных для использования в операциях JOIN. | -| [URL table engine](/engines/table-engines/special/url) | Выполняет запросы данных к удаленному HTTP/HTTPS-серверу и с него. Этот движок похож на движок File. | -| [View table engine](/engines/table-engines/special/view) | Используется для реализации представлений (подробнее см. запрос `CREATE VIEW`). Он не хранит данные, а только сохраняет указанный запрос `SELECT`. При чтении из таблицы выполняется этот запрос (и из него удаляются все ненужные столбцы). | -| [Memory table engine](/engines/table-engines/special/memory) | Движок Memory хранит данные в оперативной памяти (RAM) в несжатом виде. Данные хранятся в точности в том виде, в каком они получены при чтении. Другими словами, чтение из этой таблицы практически бесплатное. | -| [Buffer table engine](/engines/table-engines/special/buffer) | Буферизует данные для записи в оперативной памяти, периодически сбрасывая их в другую таблицу. При чтении данные считываются одновременно из буфера и из другой таблицы. | -| [External data for query processing](/engines/table-engines/special/external-data) | ClickHouse позволяет отправлять на сервер данные, необходимые для обработки запроса, вместе с запросом `SELECT`. Эти данные помещаются во временную таблицу и могут использоваться в запросе (например, в операторах `IN`). | -| [GenerateRandom table engine](/engines/table-engines/special/generate) | Движок таблиц GenerateRandom генерирует случайные данные для заданной схемы таблицы. | -| [KeeperMap table engine](/engines/table-engines/special/keeper-map) | Этот движок позволяет использовать кластер Keeper/ZooKeeper как согласованное key-value-хранилище с линеаризуемыми записями и последовательно согласованными чтениями. | -| [FileLog table engine](/engines/table-engines/special/filelog) | Этот движок позволяет обрабатывать файлы журналов приложений как поток записей. | - -{/*AUTOGENERATED_END*/ } +- [Семейство движков MergeTree](../../../engines/table-engines/mergetree-family/index.md) для основного использования в продакшене. +- [Семейство движков Log](../../../engines/table-engines/log-family/index.md) для небольших временных данных. +- [Движки таблиц для интеграций](../../../engines/table-engines/integrations/index.md). + +Остальные движки уникальны по своему назначению и пока не объединены в семейства, поэтому они размещены в этой «специальной» категории. + + + + + diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_deb_install.md b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_deb_install.md index 5fcbfa1a77b..d28b4692692 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_deb_install.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_deb_install.md @@ -1,99 +1,143 @@ import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; + + # Установка ClickHouse на Debian/Ubuntu {#install-from-deb-packages} -> Рекомендуется использовать официальные предварительно скомпилированные `deb` пакеты для **Debian** или **Ubuntu**. +> Рекомендуется использовать официальные предкомпилированные пакеты `deb` для **Debian** или **Ubuntu**. + ## Настройка репозитория Debian {#setup-the-debian-repository} -Для установки ClickHouse выполните следующие команды: +Чтобы установить ClickHouse, выполните следующие команды: + + + ```bash -# Установка необходимых пакетов +# Установите необходимые пакеты sudo apt-get install -y apt-transport-https ca-certificates curl gnupg +``` + -# Загрузка GPG ключа ClickHouse и сохранение его в связке ключей +# Загрузите GPG‑ключ ClickHouse и сохраните его в ключевом хранилище curl -fsSL 'https://packages.clickhouse.com/rpm/lts/repodata/repomd.xml.key' | sudo gpg --dearmor -o /usr/share/keyrings/clickhouse-keyring.gpg -# Получение архитектуры системы + + +# Определите архитектуру системы ARCH=$(dpkg --print-architecture) -# Добавление репозитория ClickHouse в источники apt + + +# Добавьте репозиторий ClickHouse в список источников пакетов apt echo "deb [signed-by=/usr/share/keyrings/clickhouse-keyring.gpg arch=${ARCH}] https://packages.clickhouse.com/deb stable main" | sudo tee /etc/apt/sources.list.d/clickhouse.list -# Обновление списков пакетов apt + + +# Обновить списки пакетов apt + sudo apt-get update + ``` -- Вы можете заменить `stable` на `lts` для использования различных [типов релизов](/knowledgebase/production) в зависимости от ваших потребностей. -- Вы можете загрузить и установить пакеты вручную с [packages.clickhouse.com](https://packages.clickhouse.com/deb/pool/main/c/). -
+- Вы можете заменить `stable` на `lts`, чтобы использовать различные [типы релизов](/knowledgebase/production) в зависимости от ваших потребностей. +- Вы можете скачать и установить пакеты вручную с [packages.clickhouse.com](https://packages.clickhouse.com/deb/pool/main/c/). +
-Старый метод для установки deb-пакетов для устаревших дистрибутивов +Устаревший метод установки deb-пакетов для дистрибутивов +``` + + ```bash -# Установка необходимых пакетов +# Установите необходимые пакеты sudo apt-get install apt-transport-https ca-certificates dirmngr +``` -# Добавление GPG ключа ClickHouse для аутентификации пакетов + +# Добавьте GPG-ключ ClickHouse для аутентификации пакетов sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 8919F6BD2B48D754 -# Добавление репозитория ClickHouse в источники apt + + +# Добавьте репозиторий ClickHouse в список источников APT echo "deb https://packages.clickhouse.com/deb stable main" | sudo tee \ -/etc/apt/sources.list.d/clickhouse.list + /etc/apt/sources.list.d/clickhouse.list + + -# Обновление списков пакетов apt +# Обновите списки пакетов apt sudo apt-get update -# Установка пакетов сервера и клиента ClickHouse + + +# Установите пакеты сервера и клиента ClickHouse sudo apt-get install -y clickhouse-server clickhouse-client -# Запуск службы сервера ClickHouse + + +# Запустите службу сервера ClickHouse sudo service clickhouse-server start -# Запуск клиента командной строки ClickHouse -clickhouse-client # или "clickhouse-client --password", если вы установили пароль. + + +# Запустите клиент командной строки ClickHouse + +clickhouse-client # или "clickhouse-client --password", если вы указали пароль. + ```
+``` + + +## Установка сервера и клиента ClickHouse -## Установка сервера и клиента ClickHouse {#install-clickhouse-server-and-client} ```bash sudo apt-get install -y clickhouse-server clickhouse-client ``` -## Запуск ClickHouse {#start-clickhouse-server} -Для запуска сервера ClickHouse выполните: +## Запуск ClickHouse + +Чтобы запустить сервер ClickHouse, выполните следующую команду: + ```bash sudo service clickhouse-server start ``` -Для запуска клиента ClickHouse выполните: +Чтобы запустить клиент ClickHouse, выполните: + ```bash clickhouse-client ``` -Если вы установили пароль для вашего сервера, то вам нужно будет выполнить: +Если вы задали пароль для своего сервера, вам потребуется выполнить: + ```bash clickhouse-client --password ``` -## Установка автономного ClickHouse Keeper {#install-standalone-clickhouse-keeper} + +## Установка автономного ClickHouse Keeper :::tip -В производственных средах мы настоятельно рекомендуем запускать ClickHouse Keeper на выделенных узлах. +В производственных средах настоятельно рекомендуется запускать ClickHouse Keeper на выделенных узлах. В тестовых средах, если вы решите запускать ClickHouse Server и ClickHouse Keeper на одном сервере, -то вам не нужно устанавливать ClickHouse Keeper, так как он включен в ClickHouse server. +то вам не нужно отдельно устанавливать ClickHouse Keeper, так как он включён в ClickHouse Server. ::: -Для установки `clickhouse-keeper` на автономных серверах ClickHouse Keeper выполните: +Чтобы установить `clickhouse-keeper` на автономные серверы ClickHouse Keeper, выполните: + ```bash sudo apt-get install -y clickhouse-keeper ``` + ## Включение и запуск ClickHouse Keeper {#enable-and-start-clickhouse-keeper} + ```bash sudo systemctl enable clickhouse-keeper sudo systemctl start clickhouse-keeper @@ -102,20 +146,21 @@ sudo systemctl status clickhouse-keeper
+ ## Пакеты {#packages} -Ниже подробно описаны различные доступные deb пакеты: +Доступные deb-пакеты описаны ниже: -| Пакет | Описание | -|--------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `clickhouse-common-static` | Устанавливает скомпилированные бинарные файлы ClickHouse. | -| `clickhouse-server` | Создает символическую ссылку для `clickhouse-server` и устанавливает конфигурацию сервера по умолчанию. | -| `clickhouse-client` | Создает символическую ссылку для `clickhouse-client` и других инструментов, связанных с клиентом, и устанавливает файлы конфигурации клиента. | -| `clickhouse-common-static-dbg` | Устанавливает скомпилированные бинарные файлы ClickHouse с отладочной информацией. | -| `clickhouse-keeper` | Используется для установки ClickHouse Keeper на выделенных узлах ClickHouse Keeper. Если вы запускаете ClickHouse Keeper на том же сервере, что и сервер ClickHouse, то вам не нужно устанавливать этот пакет. Устанавливает ClickHouse Keeper и файлы конфигурации ClickHouse Keeper по умолчанию. | +| Package | Description | +|--------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `clickhouse-common-static` | Устанавливает скомпилированные бинарные файлы ClickHouse. | +| `clickhouse-server` | Создает символическую ссылку для `clickhouse-server` и устанавливает конфигурацию сервера по умолчанию. | +| `clickhouse-client` | Создает символическую ссылку для `clickhouse-client` и другие клиентские утилиты, а также устанавливает файлы конфигурации клиента. | +| `clickhouse-common-static-dbg` | Устанавливает скомпилированные бинарные файлы ClickHouse с отладочной информацией. | +| `clickhouse-keeper` | Используется для установки ClickHouse Keeper на выделенные узлы ClickHouse Keeper. Если вы запускаете ClickHouse Keeper на том же сервере, что и сервер ClickHouse, устанавливать этот пакет не нужно. Устанавливает ClickHouse Keeper и конфигурационные файлы ClickHouse Keeper по умолчанию. |
:::info -Если вам нужно установить конкретную версию ClickHouse, вы должны установить все пакеты одной и той же версии: +Если вам нужно установить определенную версию ClickHouse, необходимо установить все пакеты одной и той же версии: `sudo apt-get install clickhouse-server=21.8.5.7 clickhouse-client=21.8.5.7 clickhouse-common-static=21.8.5.7` -::: \ No newline at end of file +::: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/asyncinserts.md b/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/asyncinserts.md index 3f258d1b296..e6cbc7520e8 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/asyncinserts.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/asyncinserts.md @@ -7,6 +7,6 @@ doc_type: 'guide' keywords: ['асинхронные вставки', 'async_insert', 'рекомендации по применению', 'пакетная вставка данных', 'оптимизация производительности'] --- -import Content from '@site/i18n/ru/docusaurus-plugin-content-docs/current/best-practices/_snippets/_async_inserts.md'; +import Content from '@site/docs/best-practices/_snippets/_async_inserts.md'; diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/avoidmutations.md b/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/avoidmutations.md index 693184910d2..54b8ba68bcc 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/avoidmutations.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/avoidmutations.md @@ -7,6 +7,6 @@ doc_type: 'guide' keywords: ['избегать мутаций', 'запросы ALTER', 'изменение данных в таблицах', 'лучшие практики', 'оптимизация производительности'] --- -import Content from '@site/i18n/ru/docusaurus-plugin-content-docs/current/best-practices/_snippets/_avoid_mutations.md'; +import Content from '@site/docs/best-practices/_snippets/_avoid_mutations.md'; diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/avoidnullablecolumns.md b/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/avoidnullablecolumns.md index 50b1a89dd89..8957aaa1a70 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/avoidnullablecolumns.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/avoidnullablecolumns.md @@ -7,6 +7,6 @@ doc_type: 'guide' keywords: ['избегать столбцов nullable', 'столбцы nullable', 'типы данных', 'лучшие практики', 'оптимизация производительности'] --- -import Content from '@site/i18n/ru/docusaurus-plugin-content-docs/current/best-practices/_snippets/_avoid_nullable_columns.md'; +import Content from '@site/docs/best-practices/_snippets/_avoid_nullable_columns.md'; diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/avoidoptimizefinal.md b/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/avoidoptimizefinal.md index 0c1edb5055f..e622e6c1e07 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/avoidoptimizefinal.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/avoidoptimizefinal.md @@ -7,6 +7,6 @@ doc_type: 'guide' keywords: ['избегайте OPTIMIZE FINAL', 'OPTIMIZE TABLE FINAL', 'лучшие практики', 'слияние частей данных', 'оптимизация производительности'] --- -import Content from '@site/i18n/ru/docusaurus-plugin-content-docs/current/best-practices/_snippets/_avoid_optimize_final.md'; +import Content from '@site/docs/best-practices/_snippets/_avoid_optimize_final.md'; diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/bulkinserts.md b/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/bulkinserts.md index 06f80f8507a..697c92679ab 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/bulkinserts.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/bulkinserts.md @@ -7,6 +7,6 @@ keywords: ['пакетная вставка', 'массовая вставка', doc_type: 'guide' --- -import Content from '@site/i18n/ru/docusaurus-plugin-content-docs/current/best-practices/_snippets/_bulk_inserts.md'; +import Content from '@site/docs/best-practices/_snippets/_bulk_inserts.md'; diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/partitioningkey.md b/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/partitioningkey.md index 135733b1f62..99b276c92e8 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/partitioningkey.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/partitioningkey.md @@ -7,6 +7,6 @@ doc_type: 'guide' keywords: ['partitioning', 'partition key', 'data organization', 'best practices', 'performance'] --- -import Content from '@site/i18n/ru/docusaurus-plugin-content-docs/current/best-practices/partitioning_keys.mdx'; +import Content from '@site/docs/best-practices/partitioning_keys.mdx'; diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/guides/developer/lightweight-delete.md b/i18n/ru/docusaurus-plugin-content-docs/current/guides/developer/lightweight-delete.md index bc359019ea4..7900bfde2f8 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/guides/developer/lightweight-delete.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/guides/developer/lightweight-delete.md @@ -6,6 +6,6 @@ description: 'Обзор механизма легковесного удале doc_type: 'reference' --- -import Content from '@site/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/statements/delete.md'; +import Content from '@site/docs/sql-reference/statements/delete.md'; diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/cli.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/cli.mdx index 3784a0ccde3..6024b6e4514 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/cli.mdx +++ b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/cli.mdx @@ -13,6 +13,6 @@ integration: keywords: ['clickhouse-client', 'CLI', 'интерфейс командной строки', 'SQL-клиент', 'терминал'] --- -import Content from '@site/i18n/ru/docusaurus-plugin-content-docs/current/interfaces/cli.md'; +import Content from '@site/docs/interfaces/cli.md'; diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/dbms/odbc-with-clickhouse.md b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/dbms/odbc-with-clickhouse.md index a4a3f8d3b3b..dbec07b670f 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/dbms/odbc-with-clickhouse.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/dbms/odbc-with-clickhouse.md @@ -9,6 +9,6 @@ hide_title: true keywords: ['odbc', 'подключение к базе данных', 'интеграция', 'внешние данные', 'драйвер'] --- -import Content from '@site/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/odbc.md'; +import Content from '@site/docs/engines/table-engines/integrations/odbc.md'; diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/s3/index.md b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/s3/index.md index 60b1034df4e..a4cbd0aa707 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/s3/index.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/s3/index.md @@ -1,10 +1,10 @@ --- slug: /integrations/s3 sidebar_position: 1 -sidebar_label: 'Integrating S3 with ClickHouse' -title: 'Integrating S3 with ClickHouse' -description: 'Page describing how to integrate S3 with ClickHouse' -keywords: ['Amazon S3', 'object storage', 'cloud storage', 'data lake', 'S3 integration'] +sidebar_label: 'Интеграция S3 с ClickHouse' +title: 'Интеграция S3 с ClickHouse' +description: 'Страница, посвящённая интеграции S3 с ClickHouse' +keywords: ['Amazon S3', 'объектное хранилище', 'облачное хранилище', 'озеро данных', 'интеграция с S3'] doc_type: 'guide' integration: - support_level: 'core' @@ -17,90 +17,98 @@ import Bucket1 from '@site/static/images/integrations/data-ingestion/s3/bucket1. import Bucket2 from '@site/static/images/integrations/data-ingestion/s3/bucket2.png'; import Image from '@theme/IdealImage'; -# Integrating S3 with ClickHouse -You can insert data from S3 into ClickHouse and also use S3 as an export destination, thus allowing interaction with "Data Lake" architectures. Furthermore, S3 can provide "cold" storage tiers and assist with separating storage and compute. In the sections below we use the New York City taxi dataset to demonstrate the process of moving data between S3 and ClickHouse, as well as identifying key configuration parameters and providing hints on optimizing performance. +# Интеграция S3 с ClickHouse -## S3 table functions {#s3-table-functions} +Вы можете загружать данные из S3 в ClickHouse, а также использовать S3 как пункт назначения для экспорта, что позволяет взаимодействовать с архитектурами «озера данных» (Data Lake). Кроме того, S3 может обеспечивать уровни «холодного» хранилища и помогать в разделении хранения и вычислительных ресурсов. В следующих разделах мы используем набор данных о такси Нью‑Йорка, чтобы продемонстрировать процесс переноса данных между S3 и ClickHouse, а также определить ключевые параметры конфигурации и дать рекомендации по оптимизации производительности. -The `s3` table function allows you to read and write files from and to S3 compatible storage. The outline for this syntax is: + + +## Табличные функции S3 + +Табличная функция `s3` позволяет читать и записывать файлы в хранилище, совместимое с S3, и из него. Общий вид синтаксиса следующий: ```sql s3(path, [aws_access_key_id, aws_secret_access_key,] [format, [structure, [compression]]]) ``` -where: +где: -* path — Bucket URL with a path to the file. This supports following wildcards in read-only mode: `*`, `?`, `{abc,def}` and `{N..M}` where `N`, `M` are numbers, `'abc'`, `'def'` are strings. For more information, see the docs on [using wildcards in path](/engines/table-engines/integrations/s3/#wildcards-in-path). -* format — The [format](/interfaces/formats#formats-overview) of the file. -* structure — Structure of the table. Format `'column1_name column1_type, column2_name column2_type, ...'`. -* compression — Parameter is optional. Supported values: `none`, `gzip/gz`, `brotli/br`, `xz/LZMA`, `zstd/zst`. By default, it will autodetect compression by file extension. +* path — URL бакета с путем к файлу. Поддерживаются следующие подстановочные символы в режиме только для чтения: `*`, `?`, `{abc,def}` и `{N..M}`, где `N`, `M` — числа, `'abc'`, `'def'` — строки. Для получения дополнительной информации см. документацию по [использованию подстановочных шаблонов в path](/engines/table-engines/integrations/s3/#wildcards-in-path). +* format — [Формат](/interfaces/formats#formats-overview) файла. +* structure — Структура таблицы. Формат `'column1_name column1_type, column2_name column2_type, ...'`. +* compression — Параметр необязателен. Поддерживаемые значения: `none`, `gzip/gz`, `brotli/br`, `xz/LZMA`, `zstd/zst`. По умолчанию тип сжатия определяется автоматически по расширению файла. -Using wildcards in the path expression allow multiple files to be referenced and opens the door for parallelism. +Использование подстановочных шаблонов в выражении пути позволяет ссылаться на несколько файлов и открывает возможности для параллельной обработки. -### Preparation {#preparation} +### Подготовка -Prior to creating the table in ClickHouse, you may want to first take a closer look at the data in the S3 bucket. You can do this directly from ClickHouse using the `DESCRIBE` statement: +Перед созданием таблицы в ClickHouse вы можете сначала более подробно изучить данные в бакете S3. Это можно сделать непосредственно из ClickHouse, используя оператор `DESCRIBE`: ```sql DESCRIBE TABLE s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi/trips_*.gz', 'TabSeparatedWithNames'); ``` -The output of the `DESCRIBE TABLE` statement should show you how ClickHouse would automatically infer this data, as viewed in the S3 bucket. Notice that it also automatically recognizes and decompresses the gzip compression format: +Результат выполнения оператора `DESCRIBE TABLE` должен показать, как ClickHouse автоматически определит эту структуру данных при просмотре их в бакете S3. Обратите внимание, что он также автоматически распознаёт и распаковывает данные в формате gzip: ```sql DESCRIBE TABLE s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi/trips_*.gz', 'TabSeparatedWithNames') SETTINGS describe_compact_output=1 +``` + ┌─name──────────────────┬─type───────────────┐ -│ trip_id │ Nullable(Int64) │ -│ vendor_id │ Nullable(Int64) │ -│ pickup_date │ Nullable(Date) │ -│ pickup_datetime │ Nullable(DateTime) │ -│ dropoff_date │ Nullable(Date) │ -│ dropoff_datetime │ Nullable(DateTime) │ -│ store_and_fwd_flag │ Nullable(Int64) │ -│ rate_code_id │ Nullable(Int64) │ -│ pickup_longitude │ Nullable(Float64) │ -│ pickup_latitude │ Nullable(Float64) │ -│ dropoff_longitude │ Nullable(Float64) │ -│ dropoff_latitude │ Nullable(Float64) │ -│ passenger_count │ Nullable(Int64) │ -│ trip_distance │ Nullable(String) │ -│ fare_amount │ Nullable(String) │ +│ trip_id │ Nullable(Int64) │ +│ vendor_id │ Nullable(Int64) │ +│ pickup_date │ Nullable(Date) │ +│ pickup_datetime │ Nullable(DateTime) │ +│ dropoff_date │ Nullable(Date) │ +│ dropoff_datetime │ Nullable(DateTime) │ +│ store_and_fwd_flag │ Nullable(Int64) │ +│ rate_code_id │ Nullable(Int64) │ +│ pickup_longitude │ Nullable(Float64) │ +│ pickup_latitude │ Nullable(Float64) │ +│ dropoff_longitude │ Nullable(Float64) │ +│ dropoff_latitude │ Nullable(Float64) │ +│ passenger_count │ Nullable(Int64) │ +│ trip_distance │ Nullable(String) │ +│ fare_amount │ Nullable(String) │ │ extra │ Nullable(String) │ -│ mta_tax │ Nullable(String) │ -│ tip_amount │ Nullable(String) │ -│ tolls_amount │ Nullable(Float64) │ -│ ehail_fee │ Nullable(Int64) │ -│ improvement_surcharge │ Nullable(String) │ -│ total_amount │ Nullable(String) │ -│ payment_type │ Nullable(String) │ -│ trip_type │ Nullable(Int64) │ +│ mta_tax │ Nullable(String) │ +│ tip_amount │ Nullable(String) │ +│ tolls_amount │ Nullable(Float64) │ +│ ehail_fee │ Nullable(Int64) │ +│ improvement_surcharge │ Nullable(String) │ +│ total_amount │ Nullable(String) │ +│ payment_type │ Nullable(String) │ +│ trip_type │ Nullable(Int64) │ │ pickup │ Nullable(String) │ │ dropoff │ Nullable(String) │ -│ cab_type │ Nullable(String) │ -│ pickup_nyct2010_gid │ Nullable(Int64) │ -│ pickup_ctlabel │ Nullable(Float64) │ -│ pickup_borocode │ Nullable(Int64) │ -│ pickup_ct2010 │ Nullable(String) │ -│ pickup_boroct2010 │ Nullable(String) │ -│ pickup_cdeligibil │ Nullable(String) │ -│ pickup_ntacode │ Nullable(String) │ -│ pickup_ntaname │ Nullable(String) │ -│ pickup_puma │ Nullable(Int64) │ -│ dropoff_nyct2010_gid │ Nullable(Int64) │ -│ dropoff_ctlabel │ Nullable(Float64) │ -│ dropoff_borocode │ Nullable(Int64) │ -│ dropoff_ct2010 │ Nullable(String) │ -│ dropoff_boroct2010 │ Nullable(String) │ -│ dropoff_cdeligibil │ Nullable(String) │ -│ dropoff_ntacode │ Nullable(String) │ -│ dropoff_ntaname │ Nullable(String) │ -│ dropoff_puma │ Nullable(Int64) │ +│ cab_type │ Nullable(String) │ +│ pickup_nyct2010_gid │ Nullable(Int64) │ +│ pickup_ctlabel │ Nullable(Float64) │ +│ pickup_borocode │ Nullable(Int64) │ +│ pickup_ct2010 │ Nullable(String) │ +│ pickup_boroct2010 │ Nullable(String) │ +│ pickup_cdeligibil │ Nullable(String) │ +│ pickup_ntacode │ Nullable(String) │ +│ pickup_ntaname │ Nullable(String) │ +│ pickup_puma │ Nullable(Int64) │ +│ dropoff_nyct2010_gid │ Nullable(Int64) │ +│ dropoff_ctlabel │ Nullable(Float64) │ +│ dropoff_borocode │ Nullable(Int64) │ +│ dropoff_ct2010 │ Nullable(String) │ +│ dropoff_boroct2010 │ Nullable(String) │ +│ dropoff_cdeligibil │ Nullable(String) │ +│ dropoff_ntacode │ Nullable(String) │ +│ dropoff_ntaname │ Nullable(String) │ +│ dropoff_puma │ Nullable(Int64) │ └───────────────────────┴────────────────────┘ + +``` + +Для работы с набором данных на основе S3 подготовим стандартную таблицу `MergeTree` в качестве целевой. Приведённая ниже инструкция создаёт таблицу с именем `trips` в базе данных по умолчанию. Обратите внимание, что мы изменили некоторые типы данных, определённые выше, в частности, отказались от использования модификатора типа данных [`Nullable()`](/sql-reference/data-types/nullable), который может привести к ненужному увеличению объёма хранимых данных и снижению производительности: ``` -To interact with our S3-based dataset, we prepare a standard `MergeTree` table as our destination. The statement below creates a table named `trips` in the default database. Note that we have chosen to modify some of those data types as inferred above, particularly to not use the [`Nullable()`](/sql-reference/data-types/nullable) data type modifier, which could cause some unnecessary additional stored data and some additional performance overhead: ```sql CREATE TABLE trips @@ -156,13 +164,13 @@ PARTITION BY toYYYYMM(pickup_date) ORDER BY pickup_datetime ``` -Note the use of [partitioning](/engines/table-engines/mergetree-family/custom-partitioning-key) on the `pickup_date` field. Usually a partition key is for data management, but later on we will use this key to parallelize writes to S3. +Обратите внимание на использование [секционирования](/engines/table-engines/mergetree-family/custom-partitioning-key) по полю `pickup_date`. Обычно ключ секционирования используется для управления данными, но позже мы воспользуемся этим ключом для параллельной записи в S3. -Each entry in our taxi dataset contains a taxi trip. This anonymized data consists of 20M records compressed in the S3 bucket https://datasets-documentation.s3.eu-west-3.amazonaws.com/ under the folder **nyc-taxi**. The data is in the TSV format with approximately 1M rows per file. +Каждая запись в нашем наборе данных о такси соответствует одной поездке. Эти анонимизированные данные включают 20 млн записей, хранящихся в сжатом виде в бакете S3 [https://datasets-documentation.s3.eu-west-3.amazonaws.com/](https://datasets-documentation.s3.eu-west-3.amazonaws.com/) в папке **nyc-taxi**. Данные представлены в формате TSV, примерно по 1 млн строк в каждом файле. -### Reading Data from S3 {#reading-data-from-s3} +### Чтение данных из S3 -We can query S3 data as a source without requiring persistence in ClickHouse. In the following query, we sample 10 rows. Note the absence of credentials here as the bucket is publicly accessible: +Мы можем выполнять запросы к данным в S3 как к источнику, без необходимости предварительно сохранять их в ClickHouse. В следующем запросе мы выбираем 10 строк. Обратите внимание на отсутствие учётных данных, поскольку бакет общедоступен: ```sql SELECT * @@ -170,9 +178,9 @@ FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi/trip LIMIT 10; ``` -Note that we are not required to list the columns since the `TabSeparatedWithNames` format encodes the column names in the first row. Other formats, such as `CSV` or `TSV`, will return auto-generated columns for this query, e.g., `c1`, `c2`, `c3` etc. +Обратите внимание, что нам не нужно перечислять столбцы, так как формат `TabSeparatedWithNames` содержит имена столбцов в первой строке. Другие форматы, такие как `CSV` или `TSV`, вернут автоматически сгенерированные столбцы для этого запроса, например `c1`, `c2`, `c3` и т. д. -Queries additionally support [virtual columns](../sql-reference/table-functions/s3#virtual-columns), like `_path` and `_file`, that provide information regarding the bucket path and filename respectively. For example: +Запросы также поддерживают [виртуальные столбцы](../sql-reference/table-functions/s3#virtual-columns), такие как `_path` и `_file`, которые соответственно предоставляют информацию о пути в бакете и имени файла. Например: ```sql SELECT _path, _file, trip_id @@ -180,6 +188,7 @@ FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi/trip LIMIT 5; ``` + ```response ┌─_path──────────────────────────────────────┬─_file──────┬────trip_id─┐ │ datasets-documentation/nyc-taxi/trips_0.gz │ trips_0.gz │ 1199999902 │ @@ -190,7 +199,7 @@ LIMIT 5; └────────────────────────────────────────────┴────────────┴────────────┘ ``` -Confirm the number of rows in this sample dataset. Note the use of wildcards for file expansion, so we consider all twenty files. This query will take around 10 seconds, depending on the number of cores on the ClickHouse instance: +Проверьте количество строк в этом примерном наборе данных. Обратите внимание, что для указания файлов используются подстановочные символы, поэтому будут учитываться все двадцать файлов. Выполнение этого запроса займет около 10 секунд, в зависимости от числа ядер экземпляра ClickHouse: ```sql SELECT count() AS count @@ -203,20 +212,20 @@ FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi/trip └──────────┘ ``` -While useful for sampling data and executing ae-hoc, exploratory queries, reading data directly from S3 is not something you want to do regularly. When it is time to get serious, import the data into a `MergeTree` table in ClickHouse. +Хотя чтение данных напрямую из S3 полезно для выборочного анализа данных и выполнения разовых исследовательских запросов, делать это на постоянной основе не рекомендуется. Когда приходит время перейти к полноценной работе, импортируйте данные в таблицу `MergeTree` в ClickHouse. -### Using clickhouse-local {#using-clickhouse-local} +### Использование clickhouse-local -The `clickhouse-local` program enables you to perform fast processing on local files without deploying and configuring the ClickHouse server. Any queries using the `s3` table function can be performed with this utility. For example: +Программа `clickhouse-local` позволяет выполнять быструю обработку локальных файлов без развертывания и настройки сервера ClickHouse. Любые запросы с использованием табличной функции `s3` можно выполнять с помощью этой утилиты. Например: ```sql clickhouse-local --query "SELECT * FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi/trips_*.gz', 'TabSeparatedWithNames') LIMIT 10" ``` -### Inserting Data from S3 {#inserting-data-from-s3} +### Вставка данных из S3 -To exploit the full capabilities of ClickHouse, we next read and insert the data into our instance. -We combine our `s3` function with a simple `INSERT` statement to achieve this. Note that we aren't required to list our columns because our target table provides the required structure. This requires the columns to appear in the order specified in the table DDL statement: columns are mapped according to their position in the `SELECT` clause. The insertion of all 10m rows can take a few minutes depending on the ClickHouse instance. Below we insert 1M rows to ensure a prompt response. Adjust the `LIMIT` clause or column selection to import subsets as required: +Чтобы использовать все возможности ClickHouse, далее мы читаем данные и вставляем их в наш экземпляр. +Мы используем функцию `s3` вместе с простым оператором `INSERT` для этого. Обратите внимание, что нам не требуется перечислять столбцы, поскольку целевая таблица задаёт необходимую структуру. Для этого необходимо, чтобы столбцы шли в порядке, указанном в DDL-операторе создания таблицы: столбцы сопоставляются в соответствии с их позицией в предложении `SELECT`. Вставка всех 10 млн строк может занять несколько минут в зависимости от экземпляра ClickHouse. Ниже мы вставляем 1 млн строк, чтобы получить результат быстрее. При необходимости отрегулируйте выражение `LIMIT` или выбор столбцов для импорта нужных подмножеств данных: ```sql INSERT INTO trips @@ -225,23 +234,23 @@ INSERT INTO trips LIMIT 1000000; ``` -### Remote Insert using ClickHouse Local {#remote-insert-using-clickhouse-local} +### Удалённая вставка с использованием ClickHouse Local -If network security policies prevent your ClickHouse cluster from making outbound connections, you can potentially insert S3 data using `clickhouse-local`. In the example below, we read from an S3 bucket and insert into ClickHouse using the `remote` function: +Если политики сетевой безопасности не позволяют вашему кластеру ClickHouse устанавливать исходящие соединения, вы можете выполнять вставку данных из S3 с помощью `clickhouse-local`. В примере ниже мы читаем из бакета S3 и вставляем данные в ClickHouse, используя функцию `remote`: ```sql -clickhouse-local --query "INSERT INTO TABLE FUNCTION remote('localhost:9000', 'default.trips', 'username', 'password') (*) SELECT * FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi/trips_*.gz', 'TabSeparatedWithNames') LIMIT 10" +clickhouse-local --query "INSERT INTO TABLE FUNCTION remote('localhost:9000', 'default.trips', 'имя_пользователя', 'пароль') (*) SELECT * FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi/trips_*.gz', 'TabSeparatedWithNames') LIMIT 10" ``` :::note -To execute this over a secure SSL connection, utilize the `remoteSecure` function. +Чтобы выполнить это по защищённому SSL‑соединению, используйте функцию `remoteSecure`. ::: -### Exporting data {#exporting-data} +### Экспорт данных -You can write to files in S3 using the `s3` table function. This will require appropriate permissions. We pass the credentials needed in the request, but view the [Managing Credentials](#managing-credentials) page for more options. +Вы можете записывать данные в файлы в S3‑хранилище, используя табличную функцию `s3`. Для этого потребуются соответствующие права доступа. Мы передаём необходимые учётные данные в запросе, но для других вариантов см. страницу [Managing Credentials](#managing-credentials). -In the simple example below, we use the table function as a destination instead of a source. Here we stream 10,000 rows from the `trips` table to a bucket, specifying `lz4` compression and output type of `CSV`: +В простом примере ниже мы используем табличную функцию в качестве пункта назначения, а не источника. Здесь мы передаём поток из 10 000 строк из таблицы `trips` в бакет, указывая сжатие `lz4` и формат вывода `CSV`: ```sql INSERT INTO FUNCTION @@ -256,13 +265,14 @@ FROM trips LIMIT 10000; ``` -Note here how the format of the file is inferred from the extension. We also don't need to specify the columns in the `s3` function - this can be inferred from the `SELECT`. -### Splitting large files {#splitting-large-files} +Обратите внимание, что формат файла определяется по его расширению. Нам также не нужно указывать столбцы в функции `s3` — они могут быть получены из запроса `SELECT`. -It is unlikely you will want to export your data as a single file. Most tools, including ClickHouse, will achieve higher throughput performance when reading and writing to multiple files due to the possibility of parallelism. We could execute our `INSERT` command multiple times, targeting a subset of the data. ClickHouse offers a means of automatic splitting files using a `PARTITION` key. +### Разбиение больших файлов -In the example below, we create ten files using a modulus of the `rand()` function. Notice how the resulting partition ID is referenced in the filename. This results in ten files with a numerical suffix, e.g. `trips_0.csv.lz4`, `trips_1.csv.lz4` etc...: +Мало вероятно, что вы захотите экспортировать данные в один файл. Большинство инструментов, включая ClickHouse, обеспечивают более высокую пропускную способность при чтении и записи в несколько файлов за счёт параллельной обработки. Мы могли бы выполнить команду `INSERT` несколько раз, выбирая подмножество данных. ClickHouse предлагает механизм автоматического разбиения файлов на основе ключа `PARTITION`. + +В примере ниже мы создаём десять файлов, используя значение функции `rand()` по модулю. Обратите внимание, что полученный идентификатор партиции используется в имени файла. В результате мы получаем десять файлов с числовым суффиксом, например `trips_0.csv.lz4`, `trips_1.csv.lz4` и т.д.: ```sql INSERT INTO FUNCTION @@ -278,7 +288,7 @@ FROM trips LIMIT 100000; ``` -Alternatively, we can reference a field in the data. For this dataset, the `payment_type` provides a natural partitioning key with a cardinality of 5. +В качестве альтернативы можно обратиться к полю в самих данных. Для этого набора данных поле `payment_type` представляет собой естественный ключ партиционирования с кардинальностью 5. ```sql INSERT INTO FUNCTION @@ -294,27 +304,28 @@ FROM trips LIMIT 100000; ``` -### Utilizing clusters {#utilizing-clusters} +### Использование кластеров -The above functions are all limited to execution on a single node. Read speeds will scale linearly with CPU cores until other resources (typically network) are saturated, allowing users to vertically scale. However, this approach has its limitations. While users can alleviate some resource pressure by inserting into a distributed table when performing an `INSERT INTO SELECT` query, this still leaves a single node reading, parsing, and processing the data. To address this challenge and allow us to scale reads horizontally, we have the [s3Cluster](/sql-reference/table-functions/s3Cluster.md) function. +Вышеописанные функции ограничены выполнением на одном узле. Скорость чтения масштабируется линейно с количеством ядер CPU до тех пор, пока не будут исчерпаны другие ресурсы (как правило, сеть), что позволяет пользователям вертикально масштабировать систему. Однако у этого подхода есть ограничения. Хотя пользователи могут частично снизить нагрузку на ресурсы, выполняя вставку в распределённую таблицу при выполнении запроса `INSERT INTO SELECT`, при этом по‑прежнему один узел отвечает за чтение, разбор и обработку данных. Чтобы решить эту проблему и обеспечить горизонтальное масштабирование чтения, используется функция [s3Cluster](/sql-reference/table-functions/s3Cluster.md). -The node which receives the query, known as the initiator, creates a connection to every node in the cluster. The glob pattern determining which files need to be read is resolved to a set of files. The initiator distributes files to the nodes in the cluster, which act as workers. These workers, in turn, request files to process as they complete reads. This process ensures that we can scale reads horizontally. +Узел, который получает запрос (инициатор), устанавливает соединение с каждым узлом в кластере. Шаблон с использованием glob‑маски, определяющий, какие файлы необходимо прочитать, разворачивается в набор файлов. Инициатор распределяет файлы между узлами кластера, которые выступают в роли рабочих. В свою очередь, эти рабочие запрашивают файлы для обработки по мере завершения чтения. Такой процесс обеспечивает возможность горизонтального масштабирования чтения. -The `s3Cluster` function takes the same format as the single node variants, except that a target cluster is required to denote the worker nodes: +Функция `s3Cluster` использует тот же формат, что и варианты для одного узла, за исключением того, что необходимо указать целевой кластер, обозначающий рабочие узлы: ```sql -s3Cluster(cluster_name, source, [access_key_id, secret_access_key,] format, structure) +s3Cluster(имя_кластера, источник, [ключ_доступа, секретный_ключ,] формат, структура) ``` -* `cluster_name` — Name of a cluster that is used to build a set of addresses and connection parameters to remote and local servers. -* `source` — URL to a file or a bunch of files. Supports following wildcards in read-only mode: `*`, `?`, `{'abc','def'}` and `{N..M}` where N, M — numbers, abc, def — strings. For more information see [Wildcards In Path](/engines/table-engines/integrations/s3.md/#wildcards-in-path). -* `access_key_id` and `secret_access_key` — Keys that specify credentials to use with the given endpoint. Optional. -* `format` — The [format](/interfaces/formats#formats-overview) of the file. -* `structure` — Structure of the table. Format 'column1_name column1_type, column2_name column2_type, ...'. +* `cluster_name` — Имя кластера, которое используется для построения набора адресов и параметров подключения к удалённым и локальным серверам. +* `source` — URL файла или набора файлов. Поддерживает следующие шаблоны (wildcards) в режиме только для чтения: `*`, `?`, `{'abc','def'}` и `{N..M}`, где N, M — числа, abc, def — строки. Для получения дополнительной информации см. [Wildcards In Path](/engines/table-engines/integrations/s3.md/#wildcards-in-path). +* `access_key_id` и `secret_access_key` — Ключи, задающие учётные данные для использования с указанной конечной точкой. Необязательны. +* `format` — [Формат](/interfaces/formats#formats-overview) файла. +* `structure` — Структура таблицы. Формат 'column1_name column1_type, column2_name column2_type, ...'. + +Как и для любых функций `s3`, учётные данные необязательны, если бакет не защищён или вы задаёте безопасность через окружение, например, через роли IAM. Однако в отличие от функции s3, структура должна быть указана в запросе начиная с версии 22.3.1, то есть схема не выводится автоматически. -Like any `s3` functions, the credentials are optional if the bucket is insecure or you define security through the environment, e.g., IAM roles. Unlike the s3 function, however, the structure must be specified in the request as of 22.3.1, i.e., the schema is not inferred. +Эта функция в большинстве случаев будет использоваться как часть `INSERT INTO SELECT`. В таком случае вы часто будете записывать в распределённую таблицу. Ниже приведён простой пример, где trips_all — это распределённая таблица. Хотя эта таблица использует кластер events, согласованность узлов, используемых для чтения и записи, не является обязательной: -This function will be used as part of an `INSERT INTO SELECT` in most cases. In this case, you will often be inserting a distributed table. We illustrate a simple example below where trips_all is a distributed table. While this table uses the events cluster, the consistency of the nodes used for reads and writes is not a requirement: ```sql INSERT INTO default.trips_all @@ -326,11 +337,12 @@ INSERT INTO default.trips_all ) ``` -Inserts will occur against the initiator node. This means that while reads will occur on each node, the resulting rows will be routed to the initiator for distribution. In high throughput scenarios, this may prove a bottleneck. To address this, set the parameter [parallel_distributed_insert_select](/operations/settings/settings/#parallel_distributed_insert_select) for the `s3cluster` function. +Операции вставки будут выполняться на узле-инициаторе. Это означает, что хотя чтения будут выполняться на каждом узле, полученные строки будут перенаправляться на узел-инициатор для распределения. В сценариях с высокой нагрузкой это может стать узким местом. Чтобы избежать этого, установите параметр [parallel_distributed_insert_select](/operations/settings/settings/#parallel_distributed_insert_select) для функции `s3cluster`. -## S3 table engines {#s3-table-engines} -While the `s3` functions allow ad-hoc queries to be performed on data stored in S3, they are syntactically verbose. The `S3` table engine allows you to not have to specify the bucket URL and credentials over and over again. To address this, ClickHouse provides the S3 table engine. +## Движки таблиц S3 + +Хотя функции `s3` позволяют выполнять одноразовые запросы к данным, хранящимся в S3, они синтаксически громоздки. Движок таблиц `S3` позволяет не указывать URL бакета и учетные данные каждый раз. Для решения этой задачи ClickHouse предоставляет движок таблиц S3. ```sql CREATE TABLE s3_engine_table (name String, value UInt32) @@ -338,14 +350,15 @@ CREATE TABLE s3_engine_table (name String, value UInt32) [SETTINGS ...] ``` -* `path` — Bucket URL with a path to the file. Supports following wildcards in read-only mode: `*`, `?`, `{abc,def}` and `{N..M}` where N, M — numbers, 'abc', 'def' — strings. For more information, see [here](/engines/table-engines/integrations/s3#wildcards-in-path). -* `format` — The[ format](/interfaces/formats#formats-overview) of the file. -* `aws_access_key_id`, `aws_secret_access_key` - Long-term credentials for the AWS account user. You can use these to authenticate your requests. The parameter is optional. If credentials are not specified, configuration file values are used. For more information, see [Managing credentials](#managing-credentials). -* `compression` — Compression type. Supported values: none, gzip/gz, brotli/br, xz/LZMA, zstd/zst. The parameter is optional. By default, it will autodetect compression by file extension. +* `path` — URL бакета с путём к файлу. Поддерживает следующие подстановочные шаблоны в режиме только для чтения: `*`, `?`, `{abc,def}` и `{N..M}`, где N, M — числа, «abc», «def» — строки. Для получения дополнительной информации см. [здесь](/engines/table-engines/integrations/s3#wildcards-in-path). +* `format` — [формат](/interfaces/formats#formats-overview) файла. +* `aws_access_key_id`, `aws_secret_access_key` — долгосрочные учетные данные пользователя учетной записи AWS. Вы можете использовать их для аутентификации запросов. Параметр является необязательным. Если учетные данные не указаны, используются значения из конфигурационного файла. Для получения дополнительной информации см. раздел [Managing credentials](#managing-credentials). +* `compression` — тип сжатия. Поддерживаемые значения: none, gzip/gz, brotli/br, xz/LZMA, zstd/zst. Параметр является необязательным. По умолчанию тип сжатия автоматически определяется по расширению файла. + +### Чтение данных -### Reading data {#reading-data} +В следующем примере мы создаём таблицу `trips_raw`, используя первые десять TSV‑файлов, расположенных в бакете `https://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi/`. Каждый файл содержит по 1 млн строк: -In the following example, we create a table named `trips_raw` using the first ten TSV files located in the `https://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi/` bucket. Each of these contains 1M rows each: ```sql CREATE TABLE trips_raw @@ -398,7 +411,7 @@ CREATE TABLE trips_raw ) ENGINE = S3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi/trips_{0..9}.gz', 'TabSeparatedWithNames', 'gzip'); ``` -Notice the use of the `{0..9}` pattern to limit to the first ten files. Once created, we can query this table like any other table: +Обратите внимание на использование шаблона `{0..9}`, чтобы ограничиться первыми десятью файлами. После создания мы можем выполнять запросы к этой таблице, как и к любой другой: ```sql SELECT DISTINCT(pickup_ntaname) @@ -419,11 +432,11 @@ LIMIT 10; └──────────────────────────────────────────────────┘ ``` -### Inserting data {#inserting-data} +### Вставка данных -The `S3` table engine supports parallel reads. Writes are only supported if the table definition does not contain glob patterns. The above table, therefore, would block writes. +Движок таблицы `S3` поддерживает параллельное чтение. Запись поддерживается только в том случае, если определение таблицы не содержит glob-шаблонов. Поэтому приведённая выше таблица будет блокировать операции записи. -To demonstrate writes, create a table that points to a writable S3 bucket: +Чтобы продемонстрировать запись, создайте таблицу, указывающую на S3‑бакет с возможностью записи: ```sql CREATE TABLE trips_dest @@ -434,9 +447,10 @@ CREATE TABLE trips_dest `dropoff_datetime` DateTime, `tip_amount` Float32, `total_amount` Float32 -) ENGINE = S3('/trips.bin', 'Native'); +) ENGINE = S3('<путь к бакету>/trips.bin', 'Native'); ``` + ```sql INSERT INTO trips_dest SELECT @@ -464,27 +478,28 @@ SELECT * FROM trips_dest LIMIT 5; └────────────┴─────────────┴─────────────────────┴─────────────────────┴────────────┴──────────────┘ ``` -Note that rows can only be inserted into new files. There are no merge cycles or file split operations. Once a file is written, subsequent inserts will fail. Users have two options here: +Обратите внимание, что строки можно вставлять только в новые файлы. Циклы слияния и операции разбиения файлов отсутствуют. Как только файл записан, последующие вставки будут завершаться ошибкой. У пользователей есть два варианта: -* Specify the setting `s3_create_new_file_on_insert=1`. This will cause the creation of new files on each insert. A numeric suffix will be appended to the end of each file that will monotonically increase for each insert operation. For the above example, a subsequent insert would cause the creation of a trips_1.bin file. -* Specify the setting `s3_truncate_on_insert=1`. This will cause a truncation of the file, i.e. it will only contain the newly inserted rows once complete. +* Указать настройку `s3_create_new_file_on_insert=1`. Это приведёт к созданию новых файлов при каждой вставке. К концу каждого файла будет добавляться числовой суффикс, который будет монотонно возрастать для каждой операции вставки. Для приведённого выше примера последующая вставка приведёт к созданию файла trips_1.bin. +* Указать настройку `s3_truncate_on_insert=1`. Это приведёт к усечению файла, то есть после завершения операции он будет содержать только вновь вставленные строки. -Both of these settings default to 0 - thus forcing the user to set one of them. `s3_truncate_on_insert` will take precedence if both are set. +Обе эти настройки по умолчанию имеют значение 0 — тем самым требуя от пользователя задать одну из них. `s3_truncate_on_insert` будет иметь приоритет, если заданы обе. -Some notes about the `S3` table engine: +Несколько замечаний о движке таблиц `S3`: -- Unlike a traditional `MergeTree` family table, dropping an `S3` table will not delete the underlying data. -- Full settings for this table type can be found [here](/engines/table-engines/integrations/s3.md/#settings). -- Be aware of the following caveats when using this engine: - * ALTER queries are not supported - * SAMPLE operations are not supported - * There is no notion of indexes, i.e. primary or skip. +* В отличие от таблицы семейства `MergeTree`, удаление таблицы `S3` не приведёт к удалению лежащих в её основе данных. +* Полный список настроек для этого типа таблиц можно найти [здесь](/engines/table-engines/integrations/s3.md/#settings). +* Учитывайте следующие ограничения при использовании этого движка: + * запросы ALTER не поддерживаются + * операции SAMPLE не поддерживаются + * отсутствует понятие индексов, т.е. первичных или пропускающих. -## Managing credentials {#managing-credentials} -In the previous examples, we have passed credentials in the `s3` function or `S3` table definition. While this may be acceptable for occasional usage, users require less explicit authentication mechanisms in production. To address this, ClickHouse has several options: +## Управление учетными данными {#managing-credentials} -* Specify the connection details in the **config.xml** or an equivalent configuration file under **conf.d**. The contents of an example file are shown below, assuming installation using the debian package. +В предыдущих примерах мы передавали учетные данные в функции `s3` или в определении таблицы `S3`. Хотя это может быть приемлемо для эпизодического использования, в продуктивной среде пользователям требуются менее явные механизмы аутентификации. Для этого в ClickHouse предусмотрено несколько вариантов: + +* Указать параметры подключения в файле **config.xml** или равнозначном конфигурационном файле в каталоге **conf.d**. Содержимое примера такого файла показано ниже, предполагается установка с помощью debian-пакета. ```xml ubuntu@single-node-clickhouse:/etc/clickhouse-server/config.d$ cat s3.xml @@ -501,9 +516,9 @@ In the previous examples, we have passed credentials in the `s3` function or `S3
``` - These credentials will be used for any requests where the endpoint above is an exact prefix match for the requested URL. Also, note the ability in this example to declare an authorization header as an alternative to access and secret keys. A complete list of supported settings can be found [here](/engines/table-engines/integrations/s3.md/#settings). + Эти учетные данные будут использоваться для любых запросов, где указанный выше endpoint является точным префиксным совпадением запрашиваемого URL. Также обратите внимание на возможность в этом примере задать заголовок авторизации как альтернативу access- и secret-ключам. Полный список поддерживаемых настроек можно найти [здесь](/engines/table-engines/integrations/s3.md/#settings). -* The example above highlights the availability of the configuration parameter `use_environment_credentials`. This configuration parameter can also be set globally at the `s3` level: +* Приведенный выше пример показывает наличие параметра конфигурации `use_environment_credentials`. Этот параметр конфигурации также может быть задан глобально на уровне `s3`: ```xml @@ -513,38 +528,42 @@ In the previous examples, we have passed credentials in the `s3` function or `S3 ``` - This setting turns on an attempt to retrieve S3 credentials from the environment, thus allowing access through IAM roles. Specifically, the following order of retrieval is performed: + Эта настройка включает попытку получить учетные данные S3 из окружения, тем самым позволяя доступ через IAM-роли. В частности, выполняется следующий порядок получения: + + * Поиск значений переменных окружения `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY` и `AWS_SESSION_TOKEN`. + * Проверка в каталоге **$HOME/.aws**. + * Получение временных учетных данных через AWS Security Token Service, то есть через API [`AssumeRole`](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html). + * Проверка учетных данных в переменных окружения ECS `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI` или `AWS_CONTAINER_CREDENTIALS_FULL_URI` и `AWS_ECS_CONTAINER_AUTHORIZATION_TOKEN`. + * Получение учетных данных через [метаданные экземпляра Amazon EC2](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-metadata.html) при условии, что переменная окружения [AWS_EC2_METADATA_DISABLED](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html#envvars-list-AWS_EC2_METADATA_DISABLED) не установлена в значение true. + * Эти же настройки также могут быть заданы для конкретного endpoint с использованием того же правила префиксного совпадения. - * A lookup for the environment variables `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY` and `AWS_SESSION_TOKEN` - * Check performed in **$HOME/.aws** - * Temporary credentials obtained via the AWS Security Token Service - i.e. via [`AssumeRole`](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) API - * Checks for credentials in the ECS environment variables `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI` or `AWS_CONTAINER_CREDENTIALS_FULL_URI` and `AWS_ECS_CONTAINER_AUTHORIZATION_TOKEN`. - * Obtains the credentials via [Amazon EC2 instance metadata](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-metadata.html) provided [AWS_EC2_METADATA_DISABLED](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html#envvars-list-AWS_EC2_METADATA_DISABLED) is not set to true. - * These same settings can also be set for a specific endpoint, using the same prefix matching rule. -## Optimizing for performance {#s3-optimizing-performance} -For how to optimize reading and inserting using the S3 function, see the [dedicated performance guide](./performance.md). +## Оптимизация производительности {#s3-optimizing-performance} -### S3 storage tuning {#s3-storage-tuning} +Информацию об оптимизации чтения и вставки данных с использованием функции S3 см. в [специальном руководстве по производительности](./performance.md). -Internally, the ClickHouse merge tree uses two primary storage formats: [`Wide` and `Compact`](/engines/table-engines/mergetree-family/mergetree.md/#mergetree-data-storage). While the current implementation uses the default behavior of ClickHouse (controlled through the settings `min_bytes_for_wide_part` and `min_rows_for_wide_part`), we expect behavior to diverge for S3 in the future releases, e.g., a larger default value of `min_bytes_for_wide_part` encouraging a more `Compact` format and thus fewer files. Users may now wish to tune these settings when using exclusively S3 storage. +### Настройка хранилища S3 {#s3-storage-tuning} -## S3 backed MergeTree {#s3-backed-mergetree} +Внутри ClickHouse семейство MergeTree использует два основных формата хранения: [`Wide` и `Compact`](/engines/table-engines/mergetree-family/mergetree.md/#mergetree-data-storage). Хотя текущая реализация использует поведение ClickHouse по умолчанию (задаваемое настройками `min_bytes_for_wide_part` и `min_rows_for_wide_part`), мы ожидаем, что в будущих релизах поведение для S3 будет отличаться, например за счёт большего значения по умолчанию для `min_bytes_for_wide_part`, стимулирующего использование более компактного формата `Compact` и, как следствие, меньшего количества файлов. Пользователям уже сейчас может потребоваться тонкая настройка этих параметров при использовании исключительно хранилища S3. -The `s3` functions and associated table engine allow us to query data in S3 using familiar ClickHouse syntax. However, concerning data management features and performance, they are limited. There is no support for primary indexes, no-cache support, and files inserts need to be managed by the user. -ClickHouse recognizes that S3 represents an attractive storage solution, especially where query performance on "colder" data is less critical, and users seek to separate storage and compute. To help achieve this, support is provided for using S3 as the storage for a MergeTree engine. This will enable users to exploit the scalability and cost benefits of S3, and the insert and query performance of the MergeTree engine. -### Storage Tiers {#storage-tiers} +## MergeTree на базе S3 -ClickHouse storage volumes allow physical disks to be abstracted from the MergeTree table engine. Any single volume can be composed of an ordered set of disks. Whilst principally allowing multiple block devices to be potentially used for data storage, this abstraction also allows other storage types, including S3. ClickHouse data parts can be moved between volumes and fill rates according to storage policies, thus creating the concept of storage tiers. +Функции `s3` и связанный с ними движок таблицы позволяют выполнять запросы к данным в S3, используя привычный синтаксис ClickHouse. Однако с точки зрения возможностей управления данными и производительности они ограничены. Не поддерживаются первичные индексы, отсутствует кеширование, а вставки файлов (file inserts) необходимо организовывать пользователю самостоятельно. -Storage tiers unlock hot-cold architectures where the most recent data, which is typically also the most queried, requires only a small amount of space on high-performing storage, e.g., NVMe SSDs. As the data ages, SLAs for query times increase, as does query frequency. This fat tail of data can be stored on slower, less performant storage such as HDD or object storage such as S3. +ClickHouse рассматривает S3 как привлекательное решение для хранения данных, особенно когда производительность запросов к «более холодным» данным менее критична, а пользователи стремятся разделить хранение и вычисления. Чтобы упростить это, предусмотрена поддержка использования S3 как хранилища для движка MergeTree. Это позволяет пользователям сочетать масштабируемость и экономичность S3 с производительностью вставки и выполнения запросов движка MergeTree. -### Creating a disk {#creating-a-disk} +### Уровни хранения -To utilize an S3 bucket as a disk, we must first declare it within the ClickHouse configuration file. Either extend config.xml or preferably provide a new file under conf.d. An example of an S3 disk declaration is shown below: +Тома хранения ClickHouse позволяют абстрагировать физические диски от движка таблицы MergeTree. Любой отдельный том может состоять из упорядоченного набора дисков. Хотя в первую очередь это даёт возможность использовать несколько блочных устройств для хранения данных, такая абстракция также позволяет применять и другие типы хранилищ, включая S3. Части данных ClickHouse могут перемещаться между томами и распределяться по ним в соответствии с политиками хранения, формируя тем самым концепцию уровней хранения. + +Уровни хранения позволяют реализовывать архитектуры «горячее–холодное» хранилище, когда наиболее свежие данные, которые обычно и запрашиваются чаще всего, занимают лишь небольшой объём на высокопроизводительном хранилище, например NVMe SSD. По мере устаревания данных SLA по времени выполнения запросов увеличиваются, как и их суммарная частота. Этот «длинный хвост» данных может храниться на более медленном, менее производительном хранилище, таком как HDD, или объектном хранилище, таком как S3. + +### Создание диска + +Чтобы использовать бакет S3 как диск, сначала необходимо объявить его в конфигурационном файле ClickHouse. Можно либо расширить config.xml, либо, что предпочтительнее, добавить новый файл в каталог conf.d. Пример объявления диска S3 показан ниже: ```xml @@ -572,11 +591,11 @@ To utilize an S3 bucket as a disk, we must first declare it within the ClickHous ``` -A complete list of settings relevant to this disk declaration can be found [here](/engines/table-engines/mergetree-family/mergetree.md/#table_engine-mergetree-s3). Note that credentials can be managed here using the same approaches described in [Managing credentials](#managing-credentials), i.e., the use_environment_credentials can be set to true in the above settings block to use IAM roles. +Полный список настроек, относящихся к этому описанию диска, можно найти [здесь](/engines/table-engines/mergetree-family/mergetree.md/#table_engine-mergetree-s3). Обратите внимание, что учетными данными можно управлять здесь же, используя те же подходы, которые описаны в разделе [Managing credentials](#managing-credentials), то есть параметр `use_environment_credentials` можно установить в `true` в приведённом выше блоке настроек, чтобы использовать роли IAM. -### Creating a storage policy {#creating-a-storage-policy} +### Создание политики хранения -Once configured, this "disk" can be used by a storage volume declared within a policy. For the example below, we assume s3 is our only storage. This ignores more complex hot-cold architectures where data can be relocated based on TTLs and fill rates. +После настройки этот «диск» может использоваться томом хранения, объявленным в политике. В примере ниже предполагается, что S3 — наш единственный тип хранилища. Здесь не рассматриваются более сложные архитектуры «горячего» и «холодного» хранения, где данные могут перемещаться на основе TTL и степени заполнения. ```xml @@ -602,9 +621,10 @@ Once configured, this "disk" can be used by a storage volume declared within a p ``` -### Creating a table {#creating-a-table} +### Создание таблицы + +Если диск настроен на использование бакета с правом записи, вы сможете создать таблицу, как показано в примере ниже. В целях краткости мы используем подмножество столбцов набора данных NYC taxi и передаём данные напрямую в таблицу, использующую S3 в качестве хранилища: -Assuming you have configured your disk to use a bucket with write access, you should be able to create a table such as in the example below. For purposes of brevity, we use a subset of the NYC taxi columns and stream data directly to the s3 backed table: ```sql CREATE TABLE trips_s3 @@ -633,15 +653,15 @@ SETTINGS storage_policy='s3_main' INSERT INTO trips_s3 SELECT trip_id, pickup_date, pickup_datetime, dropoff_datetime, pickup_longitude, pickup_latitude, dropoff_longitude, dropoff_latitude, passenger_count, trip_distance, tip_amount, total_amount, payment_type FROM s3('https://ch-nyc-taxi.s3.eu-west-3.amazonaws.com/tsv/trips_{0..9}.tsv.gz', 'TabSeparatedWithNames') LIMIT 1000000; ``` -Depending on the hardware, this latter insert of 1m rows may take a few minutes to execute. You can confirm the progress via the system.processes table. Feel free to adjust the row count up to the limit of 10m and explore some sample queries. +В зависимости от аппаратного обеспечения выполнение этой второй операции вставки 1 млн строк может занять несколько минут. Вы можете отслеживать прогресс по таблице system.processes. При необходимости увеличьте количество строк до предела в 10 млн и выполните несколько пробных запросов. ```sql SELECT passenger_count, avg(tip_amount) AS avg_tip, avg(total_amount) AS avg_amount FROM trips_s3 GROUP BY passenger_count; ``` -### Modifying a table {#modifying-a-table} +### Изменение таблицы -Occasionally users may need to modify the storage policy of a specific table. Whilst this is possible, it comes with limitations. The new target policy must contain all of the disks and volumes of the previous policy, i.e., data will not be migrated to satisfy a policy change. When validating these constraints, volumes and disks will be identified by their name, with attempts to violate resulting in an error. However, assuming you use the previous examples, the following changes are valid. +Иногда пользователям может потребоваться изменить политику хранения для конкретной таблицы. Однако это возможно лишь с определёнными ограничениями. Новая политика должна содержать все диски и тома предыдущей политики, то есть данные не будут переноситься (мигрировать) для приведения к новой политике. При проверке этих ограничений тома и диски определяются по их именам, и любые попытки нарушить эти ограничения приведут к ошибке. Однако, если исходить из предыдущих примеров, следующие изменения являются допустимыми. ```xml @@ -670,34 +690,41 @@ Occasionally users may need to modify the storage policy of a specific table. Wh ALTER TABLE trips_s3 MODIFY SETTING storage_policy='s3_tiered' ``` -Here we reuse the main volume in our new s3_tiered policy and introduce a new hot volume. This uses the default disk, which consists of only one disk configured via the parameter ``. Note that our volume names and disks do not change. New inserts to our table will reside on the default disk until this reaches move_factor * disk_size - at which data will be relocated to S3. +Здесь мы повторно используем основной том в нашей новой политике s3_tiered и добавляем новый горячий том. Для этого используется диск по умолчанию, который состоит только из одного диска, настроенного через параметр ``. Обратите внимание, что имена наших томов и дисков не меняются. Новые вставки в нашу таблицу будут находиться на диске по умолчанию до тех пор, пока его размер не достигнет значения move_factor * disk_size, после чего данные будут перенесены в S3. + +### Работа с репликацией -### Handling replication {#handling-replication} +Репликация с дисками S3 может быть реализована с использованием движка таблицы `ReplicatedMergeTree`. Подробности см. в руководстве [репликация одного шарда между двумя регионами AWS с использованием S3 Object Storage](#s3-multi-region). -Replication with S3 disks can be accomplished by using the `ReplicatedMergeTree` table engine. See the [replicating a single shard across two AWS regions using S3 Object Storage](#s3-multi-region) guide for details. +### Чтение и запись -### Read & writes {#read--writes} +Следующие примечания описывают реализацию взаимодействия с S3 в ClickHouse. Хотя они в основном носят справочный характер, они могут помочь читателям при [оптимизации производительности](#s3-optimizing-performance): -The following notes cover the implementation of S3 interactions with ClickHouse. Whilst generally only informative, it may help the readers when [Optimizing for Performance](#s3-optimizing-performance): -* By default, the maximum number of query processing threads used by any stage of the query processing pipeline is equal to the number of cores. Some stages are more parallelizable than others, so this value provides an upper bound. Multiple query stages may execute at once since data is streamed from the disk. The exact number of threads used for a query may thus exceed this. Modify through the setting [max_threads](/operations/settings/settings#max_threads). -* Reads on S3 are asynchronous by default. This behavior is determined by setting `remote_filesystem_read_method`, set to the value `threadpool` by default. When serving a request, ClickHouse reads granules in stripes. Each of these stripes potentially contain many columns. A thread will read the columns for their granules one by one. Rather than doing this synchronously, a prefetch is made for all columns before waiting for the data. This offers significant performance improvements over synchronous waits on each column. Users will not need to change this setting in most cases - see [Optimizing for Performance](#s3-optimizing-performance). -* Writes are performed in parallel, with a maximum of 100 concurrent file writing threads. `max_insert_delayed_streams_for_parallel_write`, which has a default value of 1000, controls the number of S3 blobs written in parallel. Since a buffer is required for each file being written (~1MB), this effectively limits the memory consumption of an INSERT. It may be appropriate to lower this value in low server memory scenarios. +* По умолчанию максимальное число потоков обработки запроса, используемых на любой стадии конвейера обработки запросов, равно количеству ядер. Некоторые стадии лучше распараллеливаются, чем другие, поэтому это значение задаёт верхнюю границу. Поскольку данные потоково читаются с диска, несколько стадий запроса могут выполняться одновременно. Фактическое количество потоков, используемых при обработке запроса, может превышать это значение. Изменяется через настройку [max_threads](/operations/settings/settings#max_threads). +* Чтение из S3 по умолчанию выполняется асинхронно. Это поведение определяется настройкой `remote_filesystem_read_method`, которая по умолчанию имеет значение `threadpool`. При обработке запроса ClickHouse читает гранулы полосами (stripes). Каждая такая полоса потенциально содержит множество столбцов. Поток будет поочерёдно читать столбцы для своих гранул. Вместо того чтобы выполнять это синхронно, предварительно инициируется чтение (prefetch) всех столбцов до ожидания данных. Это даёт значительный прирост производительности по сравнению с синхронным ожиданием для каждого столбца. В большинстве случаев пользователям не потребуется изменять эту настройку — см. раздел [Optimizing for Performance](#s3-optimizing-performance). +* Запись выполняется параллельно, с максимум 100 одновременных потоков записи файлов. Параметр `max_insert_delayed_streams_for_parallel_write`, который по умолчанию имеет значение 1000, управляет количеством S3 blob-объектов, записываемых параллельно. Поскольку для каждого записываемого файла требуется буфер (~1 МБ), это фактически ограничивает объём памяти, потребляемой операцией INSERT. В сценариях с ограниченным объёмом памяти сервера может иметь смысл уменьшить это значение. -## Use S3 object storage as a ClickHouse disk {#configuring-s3-for-clickhouse-use} -If you need step-by-step instructions to create buckets and an IAM role, then expand **Create S3 buckets and an IAM role** and follow along: + +## Использование объектного хранилища S3 как диска ClickHouse + +Если вам нужны пошаговые инструкции по созданию бакетов и роли IAM, разверните раздел **Create S3 buckets and an IAM role** и следуйте инструкциям: -### Configure ClickHouse to use the S3 bucket as a disk {#configure-clickhouse-to-use-the-s3-bucket-as-a-disk} -The following example is based on a Linux Deb package installed as a service with default ClickHouse directories. +### Настройка ClickHouse для использования бакета S3 в качестве диска + +Следующий пример основан на Deb-пакете для Linux, установленном как служба с каталогами ClickHouse по умолчанию. + +1. Создайте новый файл в каталоге `config.d` ClickHouse для хранения конфигурации хранилища. -1. Create a new file in the ClickHouse `config.d` directory to store the storage configuration. ```bash vim /etc/clickhouse-server/config.d/storage_config.xml ``` -2. Add the following for storage configuration; substituting the bucket path, access key and secret keys from earlier steps + +2. Для настройки хранилища добавьте следующее, подставив путь к бакету, ключ доступа и секретный ключ, полученные на предыдущих шагах + ```xml @@ -730,30 +757,37 @@ vim /etc/clickhouse-server/config.d/storage_config.xml ``` :::note -The tags `s3_disk` and `s3_cache` within the `` tag are arbitrary labels. These can be set to something else but the same label must be used in the `` tab under the `` tab to reference the disk. -The `` tag is also arbitrary and is the name of the policy which will be used as the identifier storage target when creating resources in ClickHouse. +Идентификаторы `s3_disk` и `s3_cache` внутри тега `` являются произвольными. Их можно задать по‑другому, но тот же идентификатор должен использоваться в теге `` в разделе ``, чтобы ссылаться на диск. +Тег `` также является произвольным и представляет собой имя политики, которая будет использоваться как идентификатор целевого хранилища при создании ресурсов в ClickHouse. -The configuration shown above is for ClickHouse version 22.8 or higher, if you are using an older version please see the [storing data](/operations/storing-data.md/#using-local-cache) docs. +Показанная выше конфигурация предназначена для ClickHouse версии 22.8 и выше. Если вы используете более старую версию, обратитесь к разделу документации [storing data](/operations/storing-data.md/#using-local-cache). -For more information about using S3: -Integrations Guide: [S3 Backed MergeTree](#s3-backed-mergetree) +Дополнительная информация об использовании S3: +Руководство по интеграциям: [S3 Backed MergeTree](#s3-backed-mergetree) ::: -3. Update the owner of the file to the `clickhouse` user and group +3. Измените владельца файла на пользователя и группу `clickhouse`. + ```bash chown clickhouse:clickhouse /etc/clickhouse-server/config.d/storage_config.xml ``` -4. Restart the ClickHouse instance to have the changes take effect. + +4. Перезапустите экземпляр ClickHouse, чтобы изменения вступили в силу. + ```bash service clickhouse-server restart ``` -### Testing {#testing} -1. Log in with the ClickHouse client, something like the following +### Тестирование + +1. Войдите в систему с помощью клиента ClickHouse, например: + ```bash clickhouse-client --user default --password ClickHouse123! ``` -2. Create a table specifying the new S3 storage policy + +2. Создайте таблицу, указав новую политику хранения в S3 + ```sql CREATE TABLE s3_table1 ( @@ -765,10 +799,12 @@ CREATE TABLE s3_table1 SETTINGS storage_policy = 's3_main'; ``` -3. Show that the table was created with the correct policy +3. Проверьте, что таблица создана с корректной политикой + ```sql SHOW CREATE TABLE s3_table1; ``` + ```response ┌─statement──────────────────────────────────────────────────── │ CREATE TABLE default.s3_table1 @@ -782,7 +818,8 @@ SETTINGS storage_policy = 's3_main', index_granularity = 8192 └────────────────────────────────────────────────────────────── ``` -4. Insert test rows into the table +4. Добавьте тестовые строки в таблицу + ```sql INSERT INTO s3_table1 (id, column1) @@ -790,6 +827,7 @@ INSERT INTO s3_table1 (1, 'abc'), (2, 'xyz'); ``` + ```response INSERT INTO s3_table1 (id, column1) FORMAT Values @@ -799,60 +837,70 @@ Ok. 2 rows in set. Elapsed: 0.337 sec. ``` -5. View the rows + +5. Просмотрите строки + ```sql SELECT * FROM s3_table1; ``` + ```response ┌─id─┬─column1─┐ │ 1 │ abc │ │ 2 │ xyz │ └────┴─────────┘ +``` -2 rows in set. Elapsed: 0.284 sec. + +2 строки в выборке. Время: 0.284 сек. + +``` +6. В консоли AWS перейдите к разделу бакетов, выберите созданный бакет и папку. +Вы должны увидеть примерно следующее: + +Представление бакета S3 в консоли AWS с файлами данных ClickHouse, хранящимися в S3 ``` -6. In the AWS console, navigate to the buckets, and select the new one and the folder. -You should see something like the following: -S3 bucket view in AWS console showing ClickHouse data files stored in S3 -## Replicating a single shard across two AWS regions using S3 Object Storage {#s3-multi-region} +## Репликация одного шарда между двумя регионами AWS с использованием объектного хранилища S3 :::tip -Object storage is used by default in ClickHouse Cloud, you do not need to follow this procedure if you are running in ClickHouse Cloud. +Объектное хранилище по умолчанию используется в ClickHouse Cloud, вам не нужно выполнять эту процедуру, если вы используете ClickHouse Cloud. ::: -### Plan the deployment {#plan-the-deployment} -This tutorial is based on deploying two ClickHouse Server nodes and three ClickHouse Keeper nodes in AWS EC2. The data store for the ClickHouse servers is S3. Two AWS regions, with a ClickHouse Server and an S3 Bucket in each region, are used in order to support disaster recovery. +### Планирование развертывания + +Это руководство основано на развертывании двух узлов ClickHouse Server и трех узлов ClickHouse Keeper в AWS EC2. Хранилищем данных для серверов ClickHouse является S3. Для обеспечения аварийного восстановления используются два региона AWS, в каждом регионе размещены ClickHouse Server и бакет S3. + +Таблицы ClickHouse реплицируются между двумя серверами, а следовательно, и между двумя регионами. -ClickHouse tables are replicated across the two servers, and therefore across the two regions. +### Установка программного обеспечения -### Install software {#install-software} +#### Узлы ClickHouse Server -#### ClickHouse server nodes {#clickhouse-server-nodes} -Refer to the [installation instructions](/getting-started/install/install.mdx) when performing the deployment steps on the ClickHouse server nodes. +Обратитесь к [инструкциям по установке](/getting-started/install/install.mdx) при выполнении шагов развертывания на узлах ClickHouse Server. -#### Deploy ClickHouse {#deploy-clickhouse} +#### Развертывание ClickHouse -Deploy ClickHouse on two hosts, in the sample configurations these are named `chnode1`, `chnode2`. +Разверните ClickHouse на двух хостах, в примерах конфигураций они называются `chnode1` и `chnode2`. -Place `chnode1` in one AWS region, and `chnode2` in a second. +Разместите `chnode1` в одном регионе AWS, а `chnode2` — во втором. -#### Deploy ClickHouse Keeper {#deploy-clickhouse-keeper} +#### Развертывание ClickHouse Keeper -Deploy ClickHouse Keeper on three hosts, in the sample configurations these are named `keepernode1`, `keepernode2`, and `keepernode3`. `keepernode1` can be deployed in the same region as `chnode1`, `keepernode2` with `chnode2`, and `keepernode3` in either region but a different availability zone from the ClickHouse node in that region. +Разверните ClickHouse Keeper на трех хостах, в примерах конфигураций они называются `keepernode1`, `keepernode2` и `keepernode3`. `keepernode1` может быть развернут в том же регионе, что и `chnode1`, `keepernode2` — вместе с `chnode2`, а `keepernode3` — в любом из регионов, но в другой зоне доступности по сравнению с узлом ClickHouse в этом регионе. -Refer to the [installation instructions](/getting-started/install/install.mdx) when performing the deployment steps on the ClickHouse Keeper nodes. +Обратитесь к [инструкциям по установке](/getting-started/install/install.mdx) при выполнении шагов развертывания на узлах ClickHouse Keeper. -### Create S3 buckets {#create-s3-buckets} +### Создание бакетов S3 -Create two S3 buckets, one in each of the regions that you have placed `chnode1` and `chnode2`. +Создайте два бакета S3, по одному в каждом из регионов, в которых вы разместили `chnode1` и `chnode2`. -If you need step-by-step instructions to create buckets and an IAM role, then expand **Create S3 buckets and an IAM role** and follow along: +Если вам нужны пошаговые инструкции по созданию бакетов и роли IAM, раскройте раздел **Create S3 buckets and an IAM role** и выполните указанные шаги: -The configuration files will then be placed in `/etc/clickhouse-server/config.d/`. Here is a sample configuration file for one bucket, the other is similar with the three highlighted lines differing: +Файлы конфигурации затем будут размещены в `/etc/clickhouse-server/config.d/`. Ниже приведен пример файла конфигурации для одного бакета, второй будет аналогичным, но с тремя отличающимися (выделенными) строками: ```xml title="/etc/clickhouse-server/config.d/storage_config.xml" @@ -887,15 +935,17 @@ The configuration files will then be placed in `/etc/clickhouse-server/config.d/ ``` + :::note -Many of the steps in this guide will ask you to place a configuration file in `/etc/clickhouse-server/config.d/`. This is the default location on Linux systems for configuration override files. When you put these files into that directory ClickHouse will use the content to override the default configuration. By placing these files in the override directory you will avoid losing your configuration during an upgrade. +Во многих шагах этого руководства вам будет предложено поместить конфигурационный файл в `/etc/clickhouse-server/config.d/`. Это стандартный каталог в системах Linux для файлов переопределения конфигурации. Когда вы помещаете эти файлы в этот каталог, ClickHouse использует их содержимое для переопределения конфигурации по умолчанию. Размещая эти файлы в каталоге переопределения, вы избегаете потери своей конфигурации при обновлении. ::: -### Configure ClickHouse Keeper {#configure-clickhouse-keeper} +### Настройка ClickHouse Keeper + +При запуске ClickHouse Keeper в автономном режиме (отдельно от сервера ClickHouse) конфигурация задаётся одним XML-файлом. В этом руководстве это файл `/etc/clickhouse-keeper/keeper_config.xml`. Все три сервера Keeper используют одну и ту же конфигурацию, отличаясь только одним параметром: ``. -When running ClickHouse Keeper standalone (separate from ClickHouse server) the configuration is a single XML file. In this tutorial, the file is `/etc/clickhouse-keeper/keeper_config.xml`. All three Keeper servers use the same configuration with one setting different; ``. -`server_id` indicates the ID to be assigned to the host where the configuration files is used. In the example below, the `server_id` is `3`, and if you look further down in the file in the `` section, you will see that server 3 has the hostname `keepernode3`. This is how the ClickHouse Keeper process knows which other servers to connect to when choosing a leader and all other activities. +`server_id` указывает идентификатор, который будет присвоен хосту, на котором используется конфигурационный файл. В приведённом ниже примере значение `server_id` равно `3`, и если вы посмотрите далее в файле, в секции ``, вы увидите, что сервер с идентификатором 3 имеет имя хоста `keepernode3`. Таким образом, процесс ClickHouse Keeper определяет, к каким другим серверам нужно подключаться при выборе лидера и выполнении всех остальных операций. ```xml title="/etc/clickhouse-keeper/keeper_config.xml" @@ -943,17 +993,18 @@ When running ClickHouse Keeper standalone (separate from ClickHouse server) the ``` -Copy the configuration file for ClickHouse Keeper in place (remembering to set the ``): +Скопируйте файл конфигурации ClickHouse Keeper в нужный каталог (не забудьте задать ``): + ```bash sudo -u clickhouse \ cp keeper.xml /etc/clickhouse-keeper/keeper.xml ``` -### Configure ClickHouse server {#configure-clickhouse-server} +### Настройка сервера ClickHouse -#### Define a cluster {#define-a-cluster} +#### Определение кластера -ClickHouse cluster(s) are defined in the `` section of the configuration. In this sample one cluster, `cluster_1S_2R`, is defined and it consists of a single shard with two replicas. The replicas are located on the hosts `chnode1` and `chnode2`. +Кластеры ClickHouse задаются в разделе конфигурации ``. В этом примере определён один кластер `cluster_1S_2R`, который состоит из одного шарда с двумя репликами. Реплики расположены на хостах `chnode1` и `chnode2`. ```xml title="/etc/clickhouse-server/config.d/remote-servers.xml" @@ -974,7 +1025,7 @@ ClickHouse cluster(s) are defined in the `` section of the confi ``` -When working with clusters it is handy to define macros that populate DDL queries with the cluster, shard, and replica settings. This sample allows you to specify the use of a replicated table engine without providing `shard` and `replica` details. When you create a table you can see how the `shard` and `replica` macros are used by querying `system.tables`. +При работе с кластерами удобно задавать макросы, которые подставляют в DDL‑запросы настройки кластера, шарда и реплики. Этот пример позволяет использовать движок реплицируемой таблицы без необходимости явно указывать параметры `shard` и `replica`. После создания таблицы вы можете увидеть, как используются макросы `shard` и `replica`, сделав запрос к `system.tables`. ```xml title="/etc/clickhouse-server/config.d/macros.xml" @@ -988,15 +1039,17 @@ When working with clusters it is handy to define macros that populate DDL querie
``` + :::note -The above macros are for `chnode1`, on `chnode2` set `replica` to `replica_2`. +Выше приведены макросы для `chnode1`, на `chnode2` установите для `replica` значение `replica_2`. ::: -#### Disable zero-copy replication {#disable-zero-copy-replication} +#### Отключение репликации без копирования + -In ClickHouse versions 22.7 and lower the setting `allow_remote_fs_zero_copy_replication` is set to `true` by default for S3 and HDFS disks. This setting should be set to `false` for this disaster recovery scenario, and in version 22.8 and higher it is set to `false` by default. +В версиях ClickHouse 22.7 и более ранних параметр `allow_remote_fs_zero_copy_replication` по умолчанию имеет значение `true` для дисков S3 и HDFS. Для данного сценария аварийного восстановления этот параметр должен иметь значение `false`, и в версиях 22.8 и выше он по умолчанию уже установлен в `false`. -This setting should be false for two reasons: 1) this feature is not production ready; 2) in a disaster recovery scenario both the data and metadata need to be stored in multiple regions. Set `allow_remote_fs_zero_copy_replication` to `false`. +Этот параметр должен быть равен `false` по двум причинам: 1) эта функция ещё не готова к использованию в продакшене; 2) в сценарии аварийного восстановления и данные, и метаданные должны храниться в нескольких регионах. Установите `allow_remote_fs_zero_copy_replication` в значение `false`. ```xml title="/etc/clickhouse-server/config.d/remote-servers.xml" @@ -1006,7 +1059,7 @@ This setting should be false for two reasons: 1) this feature is not production ``` -ClickHouse Keeper is responsible for coordinating the replication of data across the ClickHouse nodes. To inform ClickHouse about the ClickHouse Keeper nodes add a configuration file to each of the ClickHouse nodes. +ClickHouse Keeper отвечает за координацию репликации данных между узлами ClickHouse. Чтобы указать ClickHouse, какие узлы являются ClickHouse Keeper, добавьте конфигурационный файл на каждом узле ClickHouse. ```xml title="/etc/clickhouse-server/config.d/use_keeper.xml" @@ -1027,11 +1080,11 @@ ClickHouse Keeper is responsible for coordinating the replication of data across ``` -### Configure networking {#configure-networking} +### Настройте сеть -See the [network ports](../../../guides/sre/network-ports.md) list when you configure the security settings in AWS so that your servers can communicate with each other, and you can communicate with them. +См. список [сетевых портов](../../../guides/sre/network-ports.md) при настройке параметров безопасности в AWS, чтобы ваши серверы могли взаимодействовать друг с другом, а вы — подключаться к ним. -All three servers must listen for network connections so that they can communicate between the servers and with S3. By default, ClickHouse listens only on the loopback address, so this must be changed. This is configured in `/etc/clickhouse-server/config.d/`. Here is a sample that configures ClickHouse and ClickHouse Keeper to listen on all IP v4 interfaces. see the documentation or the default configuration file `/etc/clickhouse/config.xml` for more information. +Все три сервера должны принимать входящие сетевые подключения, чтобы они могли взаимодействовать между собой и с S3. По умолчанию ClickHouse прослушивает только локальный (loopback) адрес, поэтому это необходимо изменить. Это настраивается в `/etc/clickhouse-server/config.d/`. Ниже приведён пример, который настраивает ClickHouse и ClickHouse Keeper на прослушивание всех интерфейсов IPv4. См. документацию или файл конфигурации по умолчанию `/etc/clickhouse/config.xml` для получения дополнительной информации. ```xml title="/etc/clickhouse-server/config.d/networking.xml" @@ -1039,11 +1092,11 @@ All three servers must listen for network connections so that they can communica ``` -### Start the servers {#start-the-servers} +### Запустите серверы -#### Run ClickHouse Keeper {#run-clickhouse-keeper} +#### Запустите ClickHouse Keeper -On each Keeper server run the commands for your operating system, for example: +На каждом сервере Keeper выполните команды для вашей операционной системы, например: ```bash sudo systemctl enable clickhouse-keeper @@ -1051,13 +1104,15 @@ sudo systemctl start clickhouse-keeper sudo systemctl status clickhouse-keeper ``` -#### Check ClickHouse Keeper status {#check-clickhouse-keeper-status} +#### Проверка состояния ClickHouse Keeper + +Отправьте команды ClickHouse Keeper с помощью утилиты `netcat`. Например, `mntr` возвращает состояние кластера ClickHouse Keeper. Если вы выполните команду на каждом из узлов Keeper, вы увидите, что один — лидер, а два других — фолловеры: -Send commands to the ClickHouse Keeper with `netcat`. For example, `mntr` returns the state of the ClickHouse Keeper cluster. If you run the command on each of the Keeper nodes you will see that one is a leader, and the other two are followers: ```bash echo mntr | nc localhost 9181 ``` + ```response zk_version v22.7.2.15-stable-f843089624e8dd3ff7927b8a125cf3a7a769c069 zk_avg_latency 0 @@ -1084,18 +1139,19 @@ zk_synced_followers 2 # highlight-end ``` -#### Run ClickHouse server {#run-clickhouse-server} +#### Запустите сервер ClickHouse -On each ClickHouse server run +На каждом сервере ClickHouse выполните ```bash sudo service clickhouse-server start ``` -#### Verify ClickHouse server {#verify-clickhouse-server} +#### Проверка сервера ClickHouse + +Когда вы добавили [конфигурацию кластера](#define-a-cluster), был определён один шард, реплицированный на двух узлах ClickHouse. На этом этапе проверки вы убедитесь, что кластер был создан при запуске ClickHouse, и создадите реплицируемую таблицу, используя этот кластер. -When you added the [cluster configuration](#define-a-cluster) a single shard replicated across the two ClickHouse nodes was defined. In this verification step you will check that the cluster was built when ClickHouse was started, and you will create a replicated table using that cluster. -- Verify that the cluster exists: +* Убедитесь, что кластер существует: ```sql show clusters ``` @@ -1104,10 +1160,10 @@ When you added the [cluster configuration](#define-a-cluster) a single shard rep │ cluster_1S_2R │ └───────────────┘ - 1 row in set. Elapsed: 0.009 sec. ` + 1 row in set. Elapsed: 0.009 sec. ``` -- Create a table in the cluster using the `ReplicatedMergeTree` table engine: +* Создайте таблицу в кластере, используя движок таблицы `ReplicatedMergeTree`: ```sql create table trips on cluster 'cluster_1S_2R' ( `trip_id` UInt32, @@ -1134,56 +1190,66 @@ When you added the [cluster configuration](#define-a-cluster) a single shard rep │ chnode2 │ 9000 │ 0 │ │ 0 │ 0 │ └─────────┴──────┴────────┴───────┴─────────────────────┴──────────────────┘ ``` -- Understand the use of the macros defined earlier - The macros `shard`, and `replica` were [defined earlier](#define-a-cluster), and in the highlighted line below you can see where the values are substituted on each ClickHouse node. Additionally, the value `uuid` is used; `uuid` is not defined in the macros as it is generated by the system. +* Разберитесь с использованием ранее определённых макросов + + Макросы `shard` и `replica` были [определены ранее](#define-a-cluster), и на выделенной строке ниже вы можете увидеть, где значения подставляются на каждом узле ClickHouse. Дополнительно используется значение `uuid`; `uuid` не определён в макросах, так как он генерируется системой. + ```sql SELECT create_table_query FROM system.tables WHERE name = 'trips' FORMAT Vertical ``` + ```response Query id: 4d326b66-0402-4c14-9c2f-212bedd282c0 + ``` - Row 1: - ────── - create_table_query: CREATE TABLE default.trips (`trip_id` UInt32, `pickup_date` Date, `pickup_datetime` DateTime, `dropoff_datetime` DateTime, `pickup_longitude` Float64, `pickup_latitude` Float64, `dropoff_longitude` Float64, `dropoff_latitude` Float64, `passenger_count` UInt8, `trip_distance` Float64, `tip_amount` Float32, `total_amount` Float32, `payment_type` Enum8('UNK' = 0, 'CSH' = 1, 'CRE' = 2, 'NOC' = 3, 'DIS' = 4)) - # highlight-next-line - ENGINE = ReplicatedMergeTree('/clickhouse/tables/{uuid}/{shard}', '{replica}') - PARTITION BY toYYYYMM(pickup_date) ORDER BY pickup_datetime SETTINGS storage_policy = 's3_main' - 1 row in set. Elapsed: 0.012 sec. - ``` - :::note - You can customize the zookeeper path `'clickhouse/tables/{uuid}/{shard}` shown above by setting `default_replica_path` and `default_replica_name`. The docs are [here](/operations/server-configuration-parameters/settings.md/#default_replica_path). - ::: +Строка 1: +────── +create_table_query: CREATE TABLE default.trips (`trip_id` UInt32, `pickup_date` Date, `pickup_datetime` DateTime, `dropoff_datetime` DateTime, `pickup_longitude` Float64, `pickup_latitude` Float64, `dropoff_longitude` Float64, `dropoff_latitude` Float64, `passenger_count` UInt8, `trip_distance` Float64, `tip_amount` Float32, `total_amount` Float32, `payment_type` Enum8('UNK' = 0, 'CSH' = 1, 'CRE' = 2, 'NOC' = 3, 'DIS' = 4)) -### Testing {#testing-1} +# highlight-next-line -These tests will verify that data is being replicated across the two servers, and that it is stored in the S3 Buckets and not on local disk. +ENGINE = ReplicatedMergeTree('/clickhouse/tables/{uuid}/{shard}', '{replica}') +PARTITION BY toYYYYMM(pickup_date) ORDER BY pickup_datetime SETTINGS storage_policy = 's3_main' -- Add data from the New York City taxi dataset: - ```sql - INSERT INTO trips - SELECT trip_id, - pickup_date, - pickup_datetime, - dropoff_datetime, - pickup_longitude, - pickup_latitude, - dropoff_longitude, - dropoff_latitude, - passenger_count, - trip_distance, - tip_amount, - total_amount, - payment_type - FROM s3('https://ch-nyc-taxi.s3.eu-west-3.amazonaws.com/tsv/trips_{0..9}.tsv.gz', 'TabSeparatedWithNames') LIMIT 1000000; - ``` -- Verify that data is stored in S3. +1 строка в наборе. Прошло: 0.012 сек. + +```` +:::note +Вы можете настроить путь ZooKeeper `'clickhouse/tables/{uuid}/{shard}`, показанный выше, задав параметры `default_replica_path` и `default_replica_name`. Документация находится [здесь](/operations/server-configuration-parameters/settings.md/#default_replica_path). +::: + +### Тестирование {#testing-1} + +Эти тесты проверят, что данные реплицируются между двумя серверами и сохраняются в бакетах S3, а не на локальном диске. + +- Добавьте данные из набора данных о такси Нью-Йорка: +```sql +INSERT INTO trips +SELECT trip_id, + pickup_date, + pickup_datetime, + dropoff_datetime, + pickup_longitude, + pickup_latitude, + dropoff_longitude, + dropoff_latitude, + passenger_count, + trip_distance, + tip_amount, + total_amount, + payment_type + FROM s3('https://ch-nyc-taxi.s3.eu-west-3.amazonaws.com/tsv/trips_{0..9}.tsv.gz', 'TabSeparatedWithNames') LIMIT 1000000; +```` + +* Убедитесь, что данные хранятся в S3. + + Этот запрос показывает размер данных на диске и политику хранения, которая определяет, какой диск используется. - This query shows the size of the data on disk, and the policy used to determine which disk is used. ```sql SELECT engine, @@ -1195,6 +1261,7 @@ These tests will verify that data is being replicated across the two servers, an WHERE name = 'trips' FORMAT Vertical ``` + ```response Query id: af7a3d1b-7730-49e0-9314-cc51c4cf053c @@ -1209,39 +1276,41 @@ These tests will verify that data is being replicated across the two servers, an 1 row in set. Elapsed: 0.009 sec. ``` - Check the size of data on the local disk. From above, the size on disk for the millions of rows stored is 36.42 MiB. This should be on S3, and not the local disk. The query above also tells us where on local disk data and metadata is stored. Check the local data: + Проверьте размер данных на локальном диске. Из приведённых выше данных видно, что размер на диске для миллионов сохранённых строк составляет 36.42 MiB. Это должно храниться в S3, а не на локальном диске. Запрос выше также показывает, где на локальном диске хранятся данные и метаданные. Проверьте локальные данные: + ```response root@chnode1:~# du -sh /var/lib/clickhouse/disks/s3_disk/store/551 536K /var/lib/clickhouse/disks/s3_disk/store/551 ``` - Check the S3 data in each S3 Bucket (the totals are not shown, but both buckets have approximately 36 MiB stored after the inserts): + Проверьте данные S3 в каждом бакете S3 (сводные итоги не показаны, но в обоих бакетах после вставок хранится примерно 36 MiB): -Size of data in first S3 bucket showing storage usage metrics +Размер данных в первом бакете S3 с отображением метрик использования хранилища -Size of data in second S3 bucket showing storage usage metrics +Размер данных во втором бакете S3 с отображением метрик использования хранилища -## S3Express {#s3express} -[S3Express](https://aws.amazon.com/s3/storage-classes/express-one-zone/) is a new high-performance, single-Availability Zone storage class in Amazon S3. +## S3Express -You could refer to this [blog](https://aws.amazon.com/blogs/storage/clickhouse-cloud-amazon-s3-express-one-zone-making-a-blazing-fast-analytical-database-even-faster/) to read about our experience testing S3Express with ClickHouse. +[S3Express](https://aws.amazon.com/s3/storage-classes/express-one-zone/) — это новый высокопроизводительный класс хранения данных в Amazon S3 в пределах одной зоны доступности (single Availability Zone). + +Вы можете ознакомиться с нашим опытом тестирования S3Express с ClickHouse в этой [статье в блоге](https://aws.amazon.com/blogs/storage/clickhouse-cloud-amazon-s3-express-one-zone-making-a-blazing-fast-analytical-database-even-faster/). :::note - S3Express stores data within a single AZ. It means data will be unavailable in case of AZ outage. +S3Express хранит данные в пределах одной AZ. Это означает, что данные будут недоступны в случае отказа этой AZ. ::: -### S3 disk {#s3-disk} +### Диск S3 -Creating a table with storage backed by a S3Express bucket involves the following steps: +Создание таблицы с хранилищем на базе бакета S3Express включает следующие шаги: -1. Create a bucket of `Directory` type -2. Install appropriate bucket policy to grant all required permissions to your S3 user (e.g. `"Action": "s3express:*"` to simply allow unrestricted access) -3. When configuring the storage policy please provide the `region` parameter +1. Создайте бакет типа `Directory` +2. Установите соответствующую политику бакета, чтобы предоставить все необходимые права вашему S3‑пользователю (например, `"Action": "s3express:*"` для предоставления неограниченного доступа) +3. При настройке политики хранения укажите параметр `region` -Storage configuration is the same as for ordinary S3 and for example might look the following way: +Конфигурация хранилища такая же, как для обычного S3, и, например, может выглядеть следующим образом: -``` sql +```sql @@ -1264,9 +1333,9 @@ Storage configuration is the same as for ordinary S3 and for example might look ``` -And then create a table on the new storage: +Затем создайте таблицу в новом хранилище: -``` sql +```sql CREATE TABLE t ( a UInt64, @@ -1277,17 +1346,17 @@ ORDER BY a SETTINGS storage_policy = 's3_express'; ``` -### S3 storage {#s3-storage} +### Хранилище S3 -S3 storage is also supported but only for `Object URL` paths. Example: +Хранилище S3 также поддерживается, но только для путей вида `Object URL`. Пример: -``` sql +```sql SELECT * FROM s3('https://test-bucket--eun1-az1--x-s3.s3express-eun1-az1.eu-north-1.amazonaws.com/file.csv', ...) ``` -it also requires specifying bucket region in the config: +необходимо также указать регион бакета в конфигурации: -``` xml +```xml https://test-bucket--eun1-az1--x-s3.s3express-eun1-az1.eu-north-1.amazonaws.com @@ -1296,11 +1365,11 @@ it also requires specifying bucket region in the config: ``` -### Backups {#backups} +### Резервные копии -It is possible to store a backup on the disk we created above: +Можно сохранить резервную копию на диске, который мы создали ранее: -``` sql +```sql BACKUP TABLE t TO Disk('s3_express', 't.zip') ┌─id───────────────────────────────────┬─status─────────┐ @@ -1308,10 +1377,10 @@ BACKUP TABLE t TO Disk('s3_express', 't.zip') └──────────────────────────────────────┴────────────────┘ ``` -``` sql +```sql RESTORE TABLE t AS t_restored FROM Disk('s3_express', 't.zip') -┌─id───────────────────────────────────┬─status───┐ -│ 4870e829-8d76-4171-ae59-cffaf58dea04 │ RESTORED │ -└──────────────────────────────────────┴──────────┘ +┌─id───────────────────────────────────┬─status────────┐ +│ 4870e829-8d76-4171-ae59-cffaf58dea04 │ ВОССТАНОВЛЕНА │ +└──────────────────────────────────────┴───────────────┘ ``` diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/sql-clients/sql-console.md b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/sql-clients/sql-console.md index 10334ba675a..3c2094ce9e2 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/sql-clients/sql-console.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/sql-clients/sql-console.md @@ -47,6 +47,7 @@ import adjust_axis_scale from '@site/static/images/cloud/sqlconsole/adjust-axis- import give_a_query_a_name from '@site/static/images/cloud/sqlconsole/give-a-query-a-name.png' import save_the_query from '@site/static/images/cloud/sqlconsole/save-the-query.png' + # SQL-консоль SQL-консоль — самый быстрый и простой способ изучать ваши базы данных и выполнять по ним запросы в ClickHouse Cloud. Вы можете использовать SQL-консоль, чтобы: @@ -56,6 +57,8 @@ SQL-консоль — самый быстрый и простой способ - Выполнять запросы и визуализировать результаты всего за несколько кликов - Делиться запросами с коллегами по команде и более эффективно сотрудничать. + + ## Изучение таблиц {#exploring-tables} ### Просмотр списка таблиц и сведений о схеме {#viewing-table-list-and-schema-info} @@ -80,6 +83,8 @@ SQL-консоль — самый быстрый и простой способ Диалоговое окно инспектора ячеек, показывающее содержимое выбранной ячейки + + ## Фильтрация и сортировка таблиц {#filtering-and-sorting-tables} ### Сортировка таблицы {#sorting-a-table} @@ -177,6 +182,8 @@ SQL-консоль может преобразовать ваши сортиро Кнопка сохранения на панели инструментов редактора запросов + + ## Использование GenAI для управления запросами {#using-genai-to-manage-queries} Эта функция позволяет пользователям писать запросы в виде вопросов на естественном языке, а консоль запросов будет создавать SQL‑запросы на основе контекста доступных таблиц. GenAI также может помогать пользователям отлаживать их запросы. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/interfaces/cli.md b/i18n/ru/docusaurus-plugin-content-docs/current/interfaces/cli.md index 31a5e24bdb7..e00dac5d610 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/interfaces/cli.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/interfaces/cli.md @@ -857,19 +857,20 @@ ClickHouse Client использует первый найденный файл ### Параметры подключения {#command-line-options-connection} -| Параметр | Описание | Значение по умолчанию | -|---------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------| -| `--connection ` | Имя заранее настроенного подключения из конфигурационного файла. См. [Учетные данные подключения](#connection-credentials). | - | -| `-d [ --database ] ` | Выбрать базу данных, которая будет использоваться по умолчанию для этого подключения. | Текущая база данных из настроек сервера (`default` по умолчанию) | -| `-h [ --host ] ` | Имя хоста сервера ClickHouse, к которому нужно подключиться. Может быть именем хоста или IPv4- либо IPv6-адресом. Можно указать несколько хостов с помощью нескольких аргументов. | `localhost` | -| `--jwt ` | Использовать JSON Web Token (JWT) для аутентификации.

Авторизация с JWT на стороне сервера доступна только в ClickHouse Cloud. | - | -| `--no-warnings` | Отключить отображение предупреждений из `system.warnings` при подключении клиента к серверу. | - | -| `--password ` | Пароль пользователя базы данных. Вы также можете указать пароль для подключения в конфигурационном файле. Если вы не укажете пароль, клиент запросит его интерактивно. | - | -| `--port ` | Порт, на котором сервер принимает подключения. Порты по умолчанию: 9440 (TLS) и 9000 (без TLS).

Примечание: клиент использует нативный протокол ClickHouse, а не HTTP(S). | `9440`, если указан `--secure`, иначе `9000`. Всегда используется `9440` по умолчанию, если имя хоста оканчивается на `.clickhouse.cloud`. | -| `-s [ --secure ]` | Использовать ли TLS.

Включается автоматически при подключении к порту 9440 (защищенный порт по умолчанию) или к ClickHouse Cloud.

Возможно, вам понадобится настроить сертификаты вашего центра сертификации (CA) в [конфигурационном файле](#configuration_files). Доступные параметры конфигурации такие же, как для [настройки TLS на стороне сервера](../operations/server-configuration-parameters/settings.md#openssl). | Автоматически включается при подключении к порту 9440 или ClickHouse Cloud | -| `--ssh-key-file ` | Файл, содержащий закрытый SSH-ключ для аутентификации на сервере. | - | -| `--ssh-key-passphrase ` | Парольная фраза для закрытого SSH-ключа, указанного в `--ssh-key-file`. | - | -| `-u [ --user ] ` | Пользователь базы данных, под именем которого выполняется подключение. | `default` | +| Параметр | Описание | Значение по умолчанию | +|---------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------| +| `--connection ` | Имя предварительно настроенных параметров подключения из конфигурационного файла. См. [Учетные данные подключения](#connection-credentials). | - | +| `-d [ --database ] ` | База данных, используемая по умолчанию для этого подключения. | Текущая база данных из настроек сервера (по умолчанию `default`) | +| `-h [ --host ] ` | Имя хоста сервера ClickHouse, к которому выполняется подключение. Может быть именем хоста или IPv4/IPv6-адресом. Можно передать несколько хостов, указав параметр несколько раз. | `localhost` | +| `--jwt ` | Использовать JSON Web Token (JWT) для аутентификации.

Авторизация JWT на стороне сервера доступна только в ClickHouse Cloud. | - | +| `--no-warnings` | Отключить показ предупреждений из `system.warnings` при подключении клиента к серверу. | - | +| `--no-server-client-version-message` | Скрывать сообщение о несовпадении версий сервера и клиента при подключении клиента к серверу. | - | +| `--password ` | Пароль пользователя базы данных. Пароль для подключения также можно указать в конфигурационном файле. Если пароль не указан, клиент запросит его интерактивно. | - | +| `--port ` | Порт, на котором сервер принимает подключения. Порты по умолчанию: 9440 (TLS) и 9000 (без TLS).

Примечание: клиент использует нативный протокол, а не HTTP(S). | `9440`, если указан `--secure`, иначе `9000`. Всегда по умолчанию `9440`, если имя хоста оканчивается на `.clickhouse.cloud`. | +| `-s [ --secure ]` | Использовать ли TLS.

Включается автоматически при подключении к порту 9440 (безопасный порт по умолчанию) или к ClickHouse Cloud.

Вам может потребоваться настроить ваши CA-сертификаты в [конфигурационном файле](#configuration_files). Доступные параметры конфигурации такие же, как для [настройки TLS на стороне сервера](../operations/server-configuration-parameters/settings.md#openssl). | Автоматически включается при подключении к порту 9440 или ClickHouse Cloud | +| `--ssh-key-file ` | Файл, содержащий приватный SSH-ключ для аутентификации на сервере. | - | +| `--ssh-key-passphrase ` | Парольная фраза для приватного SSH-ключа, указанного в `--ssh-key-file`. | - | +| `-u [ --user ] ` | Пользователь базы данных, от имени которого выполняется подключение. | `default` | :::note Вместо параметров `--host`, `--port`, `--user` и `--password` клиент также поддерживает [строки подключения](#connection_string). diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/interfaces/formats/Prometheus.md b/i18n/ru/docusaurus-plugin-content-docs/current/interfaces/formats/Prometheus.md index d385a65d6a5..cff5dd3064a 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/interfaces/formats/Prometheus.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/interfaces/formats/Prometheus.md @@ -1,6 +1,6 @@ --- alias: [] -description: 'Документация для формата Prometheus' +description: 'Документация по формату Prometheus' input_format: false keywords: ['Prometheus'] output_format: true @@ -9,40 +9,44 @@ title: 'Prometheus' doc_type: 'reference' --- -| Ввод | Вывод | Псевдоним | -|-------|-------|-----------| -| ✗ | ✔ | | +| Ввод | Вывод | Псевдоним | +|-------|--------|-------| +| ✗ | ✔ | | + + ## Описание {#description} -Выводит метрики в [текстовом формате экспозиции Prometheus](https://prometheus.io/docs/instrumenting/exposition_formats/#text-based-format). +Экспортирует метрики в [текстовом формате экспонирования Prometheus](https://prometheus.io/docs/instrumenting/exposition_formats/#text-based-format). -Для этого формата требуется, чтобы выходная таблица была структурирована правильно в соответствии со следующими правилами: +Для этого формата требуется, чтобы выходная таблица была корректно структурирована в соответствии со следующими правилами: - Столбцы `name` ([String](/sql-reference/data-types/string.md)) и `value` (число) являются обязательными. -- Строки могут опционально содержать `help` ([String](/sql-reference/data-types/string.md)) и `timestamp` (число). -- Столбец `type` ([String](/sql-reference/data-types/string.md)) должен быть одним из `counter`, `gauge`, `histogram`, `summary`, `untyped` или пустым. -- Каждое значение метрики также может иметь некоторые `labels` ([Map(String, String)](/sql-reference/data-types/map.md)). -- Несколько последовательных строк могут относиться к одной метрике с различными метками. Таблица должна быть отсортирована по имени метрики (например, с помощью `ORDER BY name`). +- Строки могут дополнительно содержать `help` ([String](/sql-reference/data-types/string.md)) и `timestamp` (число). +- Столбец `type` ([String](/sql-reference/data-types/string.md)) должен иметь одно из значений: `counter`, `gauge`, `histogram`, `summary`, `untyped` или быть пустым. +- Каждое значение метрики может также иметь метки `labels` ([Map(String, String)](/sql-reference/data-types/map.md)). +- Несколько последовательных строк могут относиться к одной и той же метрике с разными метками. Таблица должна быть отсортирована по имени метрики (например, с помощью `ORDER BY name`). + +Существуют особые требования к меткам для `histogram` и `summary` — подробности см. в [документации Prometheus](https://prometheus.io/docs/instrumenting/exposition_formats/#histograms-and-summaries). +К строкам с метками `{'count':''}` и `{'sum':''}` применяются специальные правила: они преобразуются соответственно в `_count` и `_sum`. + -Существуют особые требования к меткам `histogram` и `summary` - см. [документацию Prometheus](https://prometheus.io/docs/instrumenting/exposition_formats/#histograms-and-summaries) для получения подробностей. -Специальные правила применяются к строкам с метками `{'count':''}` и `{'sum':''}`, которые преобразуются в `_count` и `_sum` соответственно. -## Пример использования {#example-usage} +## Пример использования ```yaml ┌─name────────────────────────────────┬─type──────┬─help──────────────────────────────────────┬─labels─────────────────────────┬────value─┬─────timestamp─┐ -│ http_request_duration_seconds │ histogram │ A histogram of the request duration. │ {'le':'0.05'} │ 24054 │ 0 │ +│ http_request_duration_seconds │ histogram │ Гистограмма продолжительности запроса. │ {'le':'0.05'} │ 24054 │ 0 │ │ http_request_duration_seconds │ histogram │ │ {'le':'0.1'} │ 33444 │ 0 │ │ http_request_duration_seconds │ histogram │ │ {'le':'0.2'} │ 100392 │ 0 │ │ http_request_duration_seconds │ histogram │ │ {'le':'0.5'} │ 129389 │ 0 │ │ http_request_duration_seconds │ histogram │ │ {'le':'1'} │ 133988 │ 0 │ │ http_request_duration_seconds │ histogram │ │ {'le':'+Inf'} │ 144320 │ 0 │ │ http_request_duration_seconds │ histogram │ │ {'sum':''} │ 53423 │ 0 │ -│ http_requests_total │ counter │ Total number of HTTP requests │ {'method':'post','code':'200'} │ 1027 │ 1395066363000 │ +│ http_requests_total │ counter │ Общее количество HTTP-запросов │ {'method':'post','code':'200'} │ 1027 │ 1395066363000 │ │ http_requests_total │ counter │ │ {'method':'post','code':'400'} │ 3 │ 1395066363000 │ │ metric_without_timestamp_and_labels │ │ │ {} │ 12.47 │ 0 │ -│ rpc_duration_seconds │ summary │ A summary of the RPC duration in seconds. │ {'quantile':'0.01'} │ 3102 │ 0 │ +│ rpc_duration_seconds │ summary │ Сводка продолжительности RPC в секундах. │ {'quantile':'0.01'} │ 3102 │ 0 │ │ rpc_duration_seconds │ summary │ │ {'quantile':'0.05'} │ 3272 │ 0 │ │ rpc_duration_seconds │ summary │ │ {'quantile':'0.5'} │ 4773 │ 0 │ │ rpc_duration_seconds │ summary │ │ {'quantile':'0.9'} │ 9001 │ 0 │ @@ -53,10 +57,11 @@ doc_type: 'reference' └─────────────────────────────────────┴───────────┴───────────────────────────────────────────┴────────────────────────────────┴──────────┴───────────────┘ ``` -Будет отформатировано как: +Будет иметь следующий формат: + ```text -# HELP http_request_duration_seconds A histogram of the request duration. +# HELP http_request_duration_seconds Гистограмма продолжительности запроса. # TYPE http_request_duration_seconds histogram http_request_duration_seconds_bucket{le="0.05"} 24054 http_request_duration_seconds_bucket{le="0.1"} 33444 @@ -65,25 +70,34 @@ http_request_duration_seconds_bucket{le="1"} 133988 http_request_duration_seconds_bucket{le="+Inf"} 144320 http_request_duration_seconds_sum 53423 http_request_duration_seconds_count 144320 +``` -# HELP http_requests_total Total number of HTTP requests + +# HELP http_requests_total Общее количество HTTP-запросов # TYPE http_requests_total counter http_requests_total{code="200",method="post"} 1027 1395066363000 http_requests_total{code="400",method="post"} 3 1395066363000 metric_without_timestamp_and_labels 12.47 -# HELP rpc_duration_seconds A summary of the RPC duration in seconds. -# TYPE rpc_duration_seconds summary -rpc_duration_seconds{quantile="0.01"} 3102 -rpc_duration_seconds{quantile="0.05"} 3272 -rpc_duration_seconds{quantile="0.5"} 4773 -rpc_duration_seconds{quantile="0.9"} 9001 -rpc_duration_seconds{quantile="0.99"} 76656 -rpc_duration_seconds_sum 17560473 -rpc_duration_seconds_count 2693 - -something_weird{problem="division by zero"} +Inf -3982045 + + +# HELP rpc_duration_seconds Сводная статистика длительности RPC в секундах. + +# TYPE rpc_duration_seconds summary + +rpc_duration_seconds{quantile="0.01"} 3102 +rpc_duration_seconds{quantile="0.05"} 3272 +rpc_duration_seconds{quantile="0.5"} 4773 +rpc_duration_seconds{quantile="0.9"} 9001 +rpc_duration_seconds{quantile="0.99"} 76656 +rpc_duration_seconds_sum 17560473 +rpc_duration_seconds_count 2693 + +something_weird{problem="деление на ноль"} +Inf -3982045 + +``` ``` -## Настройки формата {#format-settings} \ No newline at end of file + +## Параметры форматирования {#format-settings} diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/managing-data/core-concepts/primary-indexes.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/managing-data/core-concepts/primary-indexes.mdx index 5f91654b78b..88da6a07ecf 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/managing-data/core-concepts/primary-indexes.mdx +++ b/i18n/ru/docusaurus-plugin-content-docs/current/managing-data/core-concepts/primary-indexes.mdx @@ -19,17 +19,17 @@ import Image from '@theme/IdealImage'; ::: -## Как работает разрежённый первичный индекс в ClickHouse? \{#how-does-the-sparse-primary-index-work-in-clickHouse\} +## Как работает разреженный первичный индекс в ClickHouse? \{#how-does-the-sparse-primary-index-work-in-clickHouse\}
-Разрежённый первичный индекс в ClickHouse помогает эффективно находить [гранулы](https://clickhouse.com/docs/guides/best-practices/sparse-primary-indexes#data-is-organized-into-granules-for-parallel-data-processing) — блоки строк, которые могут содержать данные, удовлетворяющие условию запроса по столбцам ^^primary key^^ таблицы. В следующем разделе мы объясним, как этот индекс формируется из значений в этих столбцах. +Разреженный первичный индекс в ClickHouse позволяет эффективно определять [гранулы](/guides/best-practices/sparse-primary-indexes#data-is-organized-into-granules-for-parallel-data-processing) — блоки строк, которые могут содержать данные, удовлетворяющие условию запроса по столбцам ^^первичного ключа^^ таблицы. В следующем разделе мы объясним, как этот индекс строится на основе значений этих столбцов. ### Создание разреженного первичного индекса \{#sparse-primary-index-creation\} -Чтобы продемонстрировать, как создаётся разреженный первичный индекс, мы используем таблицу [uk_price_paid_simple](https://clickhouse.com/docs/parts) вместе с некоторыми анимациями. +Чтобы проиллюстрировать, как строится разреженный первичный индекс, мы используем таблицу [uk_price_paid_simple](/parts) вместе с несколькими анимациями. -Как [напоминание](https://clickhouse.com/docs/parts), в нашей ① примерной таблице с ^^primary key^^ (town, street) ② вставленные данные ③ сохраняются на диск в виде отсортированных по значениям столбцов ^^primary key^^ и сжатых данных, в отдельных файлах для каждого столбца: +Как [напоминание](/parts): в нашей ① примерной таблице с ^^первичным ключом^^ (town, street) ② вставленные данные ③ сохраняются на диске, отсортированными по значениям столбцов ^^первичного ключа^^ и сжатыми, в отдельных файлах для каждого столбца: @@ -37,9 +37,9 @@ import Image from '@theme/IdealImage';
-Для обработки данные каждого столбца ④ логически делятся на гранулы — каждая охватывает 8 192 строки, — которые являются наименьшими единицами, с которыми работают механизмы обработки данных ClickHouse. +Для обработки данные каждого столбца ④ логически делятся на гранулы — каждая по 8 192 строки — которые являются наименьшими единицами, с которыми работают механизмы обработки данных ClickHouse. -Именно эта структура ^^granule^^ и делает первичный индекс **разреженным**: вместо индексации каждой строки ClickHouse сохраняет ⑤ значения ^^primary key^^ только из одной строки на ^^granule^^ — а именно, из первой строки. В результате получается одна запись индекса на ^^granule^^: +Эта структура ^^гранулы^^ также делает первичный индекс **разреженным**: вместо индексирования каждой строки ClickHouse хранит ⑤ значения ^^первичного ключа^^ только из одной строки на ^^гранулу^^ — а именно, из первой строки. В результате получается одна запись индекса на ^^гранулу^^: @@ -47,7 +47,7 @@ import Image from '@theme/IdealImage';
-Благодаря своей разрежённости первичный индекс достаточно мал, чтобы полностью помещаться в памяти, что обеспечивает быструю фильтрацию для запросов с предикатами по столбцам ^^primary key^^. В следующем разделе мы покажем, как это помогает ускорять такие запросы. +Благодаря своей разреженности первичный индекс достаточно мал, чтобы полностью помещаться в памяти, что обеспечивает быструю фильтрацию запросов с условиями по столбцам ^^первичного ключа^^. В следующем разделе мы покажем, как это помогает ускорять такие запросы. ### Использование первичного индекса \{#primary-index-usage\} diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/query-cache.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/query-cache.md index e45fba5bd7b..ce0924b96a8 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/query-cache.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/query-cache.md @@ -7,48 +7,43 @@ title: 'Кэш запросов' doc_type: 'guide' --- - - # Кэш запросов -Кэш запросов позволяет выполнить запрос `SELECT` один раз и затем обслуживать последующие выполнения того же запроса напрямую из кэша. -В зависимости от типа запросов это может значительно сократить задержку и потребление ресурсов сервера ClickHouse. - +Кэш запросов позволяет выполнять запросы `SELECT` только один раз и обслуживать последующие выполнения того же запроса напрямую из кэша. +В зависимости от типа запросов это может существенно снизить время отклика и потребление ресурсов сервера ClickHouse. +## Предпосылки, дизайн и ограничения \{#background-design-and-limitations\} -## Предпосылки, архитектура и ограничения {#background-design-and-limitations} +Кэши запросов в общем случае можно рассматривать как транзакционно согласованные или транзакционно несогласованные. -Кеши запросов можно в целом классифицировать как транзакционно согласованные или несогласованные. - -- В транзакционно согласованных кешах база данных инвалидирует (удаляет) кешированные результаты запросов, если результат запроса `SELECT` изменяется - или потенциально может измениться. В ClickHouse к операциям, изменяющим данные, относятся вставки/обновления/удаления в таблицах/из таблиц, а также схлопывающие - слияния. Транзакционно согласованное кеширование особенно подходит для OLTP-баз данных, например - [MySQL](https://dev.mysql.com/doc/refman/5.6/en/query-cache.html) (в котором кеш запросов был удален после версии 8.0) и +- В транзакционно согласованных кэшах база данных аннулирует (отбрасывает) кэшированные результаты запроса, если результат запроса `SELECT` изменяется + или может измениться. В ClickHouse к операциям, изменяющим данные, относятся вставки/обновления/удаления в/из таблиц или схлопывающие + слияния (collapsing merges). Транзакционно согласованное кэширование особенно подходит для OLTP-СУБД, например + [MySQL](https://dev.mysql.com/doc/refman/5.6/en/query-cache.html) (в которой кэш запросов был удалён, начиная с версии v8.0) и [Oracle](https://docs.oracle.com/database/121/TGDBA/tune_result_cache.htm). -- В транзакционно несогласованных кешах допускаются небольшие неточности в результатах запросов при условии, что всем записям кеша - назначается срок действия, по истечении которого они устаревают (например, 1 минута), и что базовые данные изменяются незначительно в течение этого периода. - Этот подход в целом более подходит для OLAP-баз данных. В качестве примера, где транзакционно несогласованное кеширование является достаточным, - рассмотрим почасовой отчет о продажах в инструменте отчетности, к которому одновременно обращаются несколько пользователей. Данные о продажах обычно изменяются - достаточно медленно, поэтому базе данных необходимо вычислить отчет только один раз (что соответствует первому запросу `SELECT`). Последующие запросы могут быть - обработаны непосредственно из кеша запросов. В этом примере разумным сроком действия может быть 30 минут. - -Транзакционно несогласованное кеширование традиционно обеспечивается клиентскими инструментами или прокси-пакетами (например, -[chproxy](https://www.chproxy.org/configuration/caching/)), взаимодействующими с базой данных. В результате одна и та же логика кеширования и -конфигурация часто дублируются. При использовании кеша запросов ClickHouse логика кеширования перемещается на сторону сервера. Это снижает затраты на обслуживание -и устраняет избыточность. +- В транзакционно несогласованных кэшах допускаются небольшие неточности в результатах запросов при предположении, что всем записям в кэше + назначается срок действия, по истечении которого они становятся недействительными (например, 1 минута), и что исходные данные за этот период меняются незначительно. + В целом такой подход больше подходит для OLAP-СУБД. В качестве примера, когда транзакционно несогласованного кэширования достаточно, + рассмотрим почасовой отчёт по продажам в отчётном инструменте, к которому одновременно обращаются несколько пользователей. Данные о продажах + обычно меняются достаточно медленно, чтобы базе данных нужно было вычислить отчёт только один раз (что соответствует первому запросу `SELECT`). Последующие запросы могут + обслуживаться напрямую из кэша запросов. В этом примере разумным сроком действия кэша может быть 30 минут. +Транзакционно несогласованное кэширование традиционно реализуется клиентскими инструментами или прокси-пакетами (например, +[chproxy](https://www.chproxy.org/configuration/caching/)), взаимодействующими с базой данных. В результате одна и та же логика кэширования и +конфигурация часто дублируются. С появлением кэша запросов в ClickHouse логика кэширования переносится на сторону сервера. Это снижает затраты на сопровождение +и устраняет дублирование. -## Настройки конфигурации и использование {#configuration-settings-and-usage} +## Параметры конфигурации и их использование :::note -В ClickHouse Cloud для изменения настроек кеша запросов необходимо использовать [настройки уровня запроса](/operations/settings/query-level). Редактирование [настроек уровня конфигурации](/operations/configuration-files) в настоящее время не поддерживается. +В ClickHouse Cloud для редактирования настроек кэша запросов необходимо использовать [настройки на уровне запроса](/operations/settings/query-level). Редактирование [настроек на уровне конфигурации](/operations/configuration-files) в данный момент не поддерживается. ::: :::note -[clickhouse-local](utilities/clickhouse-local.md) выполняет по одному запросу за раз. Поскольку кеширование результатов запросов в этом случае не имеет смысла, кеш результатов запросов в clickhouse-local отключен. +[clickhouse-local](utilities/clickhouse-local.md) выполняет один запрос за раз. Поскольку кэширование результатов запроса в этом случае не имеет смысла, кэш результатов запросов в clickhouse-local отключен. ::: -Настройка [use_query_cache](/operations/settings/settings#use_query_cache) позволяет управлять тем, должен ли конкретный запрос или все запросы текущей сессии использовать кеш запросов. Например, при первом выполнении запроса +Параметр [use_query_cache](/operations/settings/settings#use_query_cache) можно использовать для управления тем, будет ли использовать кэш запросов конкретный запрос или все запросы текущего сеанса. Например, при первом выполнении запроса ```sql SELECT some_expensive_calculation(column_1, column_2) @@ -56,14 +51,20 @@ FROM table SETTINGS use_query_cache = true; ``` -результат запроса будет сохранен в кеше запросов. При последующих выполнениях того же запроса (также с параметром `use_query_cache = true`) вычисленный результат будет прочитан из кеша и немедленно возвращен. +будет сохранять результат запроса в кэше запросов. Последующие выполнения того же запроса (также с параметром `use_query_cache = true`) +будут считывать вычисленный результат из кэша и возвращать его немедленно. :::note -Настройка `use_query_cache` и все остальные настройки, связанные с кешем запросов, действуют только на отдельные операторы `SELECT`. В частности, результаты `SELECT` к представлениям, созданным с помощью `CREATE VIEW AS SELECT [...] SETTINGS use_query_cache = true`, не кешируются, если оператор `SELECT` не выполняется с `SETTINGS use_query_cache = true`. +Настройка `use_query_cache` и всех остальных параметров, связанных с кэшем запросов, влияет только на отдельные операторы `SELECT`. В частности, +результаты `SELECT` в представления, созданные через `CREATE VIEW AS SELECT [...] SETTINGS use_query_cache = true`, не кэшируются, если только оператор `SELECT` +не выполняется с `SETTINGS use_query_cache = true`. ::: -Способ использования кеша можно настроить более детально с помощью параметров [enable_writes_to_query_cache](/operations/settings/settings#enable_writes_to_query_cache) -и [enable_reads_from_query_cache](/operations/settings/settings#enable_reads_from_query_cache) (оба по умолчанию имеют значение `true`). Первый параметр управляет тем, сохраняются ли результаты запросов в кеше, тогда как второй параметр определяет, должна ли база данных пытаться извлечь результаты запросов из кеша. Например, следующий запрос будет использовать кеш только пассивно, т.е. попытается прочитать из него данные, но не сохранит в нем свой результат: +Способ использования кэша можно подробнее настроить с помощью параметров [enable_writes_to_query_cache](/operations/settings/settings#enable_writes_to_query_cache) +и [enable_reads_from_query_cache](/operations/settings/settings#enable_reads_from_query_cache) (по умолчанию обе имеют значение `true`). Первый параметр +определяет, сохраняются ли результаты запросов в кэше, а второй — должен ли сервер пытаться получать результаты запросов +из кэша. Например, следующий запрос будет использовать кэш только пассивно, то есть пытаться читать из него, но не сохранять в него свой +результат: ```sql SELECT some_expensive_calculation(column_1, column_2) @@ -71,26 +72,30 @@ FROM table SETTINGS use_query_cache = true, enable_writes_to_query_cache = false; ``` -Для максимального контроля обычно рекомендуется указывать настройки `use_query_cache`, `enable_writes_to_query_cache` и -`enable_reads_from_query_cache` только для конкретных запросов. Также можно включить кеширование на уровне пользователя или профиля (например, через `SET -use_query_cache = true`), но следует помнить, что в этом случае все запросы `SELECT` могут возвращать кешированные результаты. +Для максимального контроля обычно рекомендуется задавать настройки `use_query_cache`, `enable_writes_to_query_cache` и +`enable_reads_from_query_cache` только для конкретных запросов. Также можно включить кэширование на уровне пользователя или профиля (например, через `SET +use_query_cache = true`), но следует иметь в виду, что тогда все запросы `SELECT` могут возвращать результаты из кэша. -Кеш запросов можно очистить с помощью оператора `SYSTEM DROP QUERY CACHE`. Содержимое кеша запросов отображается в системной таблице -[system.query_cache](system-tables/query_cache.md). Количество попаданий и промахов кеша запросов с момента запуска базы данных показано в виде событий -"QueryCacheHits" и "QueryCacheMisses" в системной таблице [system.events](system-tables/events.md). Оба счетчика обновляются только для -запросов `SELECT`, которые выполняются с настройкой `use_query_cache = true`; другие запросы не влияют на "QueryCacheMisses". Поле `query_cache_usage` -в системной таблице [system.query_log](system-tables/query_log.md) показывает для каждого выполненного запроса, был ли результат запроса записан в -кеш запросов или прочитан из него. Метрики `QueryCacheEntries` и `QueryCacheBytes` в системной таблице -[system.metrics](system-tables/metrics.md) показывают, сколько записей и байт в настоящее время содержится в кеше запросов. +Кэш запросов можно очистить командой `SYSTEM DROP QUERY CACHE`. Содержимое кэша запросов отображается в системной таблице +[system.query_cache](system-tables/query_cache.md). Количество попаданий и промахов в кэш запросов с момента запуска базы данных показывается как события +«QueryCacheHits» и «QueryCacheMisses» в системной таблице [system.events](system-tables/events.md). Оба счётчика обновляются только для +запросов `SELECT`, которые выполняются с настройкой `use_query_cache = true`; другие запросы не влияют на «QueryCacheMisses». Поле `query_cache_usage` +в системной таблице [system.query_log](system-tables/query_log.md) показывает для каждого выполненного запроса, был ли результат запроса записан в кэш +или прочитан из кэша запросов. Метрики `QueryCacheEntries` и `QueryCacheBytes` в системной таблице +[system.metrics](system-tables/metrics.md) показывают, сколько записей и байт в данный момент содержит кэш запросов. -Кеш запросов существует в единственном экземпляре для каждого процесса сервера ClickHouse. Однако результаты кеша по умолчанию не являются общими для разных пользователей. Это можно -изменить (см. ниже), но делать это не рекомендуется по соображениям безопасности. +Кэш запросов существует в одном экземпляре для каждого серверного процесса ClickHouse. Однако результаты кэша по умолчанию не являются общими между пользователями. Это можно +изменить (см. ниже), но делать так не рекомендуется по соображениям безопасности. -Результаты запросов идентифицируются в кеше запросов по [абстрактному синтаксическому дереву (AST)](https://en.wikipedia.org/wiki/Abstract_syntax_tree) их запроса. Это означает, что кеширование не зависит от регистра символов, например `SELECT 1` и `select 1` рассматриваются как один и тот же запрос. Чтобы сделать сопоставление более естественным, все настройки уровня запроса, связанные с кешем запросов и [форматированием вывода](settings/settings-formats.md), удаляются из AST. +Результаты запросов в кэше запросов идентифицируются по [абстрактному синтаксическому дереву (AST)](https://en.wikipedia.org/wiki/Abstract_syntax_tree) +их запроса. Это означает, что кэширование не зависит от регистра, например `SELECT 1` и `select 1` рассматриваются как один и тот же запрос. Чтобы +сделать сопоставление более естественным, все настройки на уровне запроса, относящиеся к кэшу запросов и [форматированию вывода](settings/settings-formats.md), +удаляются из AST. -Если запрос был прерван из-за исключения или отмены пользователем, запись в кеш запросов не производится. +Если запрос был прерван из-за исключения или отмены пользователем, запись в кэш запросов не производится. -Размер кеша запросов в байтах, максимальное количество записей кеша и максимальный размер отдельных записей кеша (в байтах и в записях) можно настроить с помощью различных [параметров конфигурации сервера](/operations/server-configuration-parameters/settings#query_cache). +Размер кэша запросов в байтах, максимальное количество записей в кэше и максимальный размер отдельных записей кэша (в байтах и в +строках) можно настроить с помощью различных [параметров конфигурации сервера](/operations/server-configuration-parameters/settings#query_cache). ```xml @@ -102,7 +107,7 @@ use_query_cache = true`), но следует помнить, что в этом ``` -Также можно ограничить использование кэша отдельными пользователями с помощью [профилей настроек](settings/settings-profiles.md) и [ограничений для настроек](settings/constraints-on-settings.md). В частности, вы можете ограничить максимальный объём памяти (в байтах), который пользователь может выделить для кэша запросов, и максимальное количество сохраняемых результатов запросов. Для этого сначала задайте параметры +Также можно ограничить использование кэша отдельными пользователями с помощью [профилей настроек](settings/settings-profiles.md) и [ограничений настроек](settings/constraints-on-settings.md). В частности, вы можете ограничить максимальный объём памяти (в байтах), который пользователь может выделить в кэше запросов, и максимальное количество сохранённых результатов запросов. Для этого сначала задайте значения параметров [query_cache_max_size_in_bytes](/operations/settings/settings#query_cache_max_size_in_bytes) и [query_cache_max_entries](/operations/settings/settings#query_cache_max_entries) в профиле пользователя в `users.xml`, затем сделайте обе настройки доступными только для чтения: @@ -126,7 +131,7 @@ use_query_cache = true`), но следует помнить, что в этом ``` -Чтобы задать минимальное время выполнения запроса, после которого его результат может быть закэширован, вы можете использовать настройку +Чтобы задать минимальную длительность выполнения запроса, начиная с которой его результат может кэшироваться, вы можете использовать настройку [query_cache_min_query_duration](/operations/settings/settings#query_cache_min_query_duration). Например, результат запроса ```sql @@ -135,79 +140,78 @@ FROM table SETTINGS use_query_cache = true, query_cache_min_query_duration = 5000; ``` -кэшируется только в том случае, если запрос выполняется дольше 5 секунд. Также можно указать, сколько раз запрос должен быть выполнен, -прежде чем его результат будет закэширован — для этого используйте настройку [query_cache_min_query_runs](/operations/settings/settings#query_cache_min_query_runs). +кэшируется только если выполнение запроса длится дольше 5 секунд. Также можно задать, сколько раз запрос должен быть выполнен, прежде чем его результат будет +закэширован — для этого используйте настройку [query_cache_min_query_runs](/operations/settings/settings#query_cache_min_query_runs). -Записи в кэше запросов становятся устаревшими по истечении определённого периода времени (time-to-live). По умолчанию этот период -составляет 60 секунд, но другое значение может быть указано на уровне сессии, профиля или запроса с помощью настройки -[query_cache_ttl](/operations/settings/settings#query_cache_ttl). Кэш запросов очищает записи «лениво», т.е. когда запись становится -устаревшей, она не удаляется из кэша немедленно. Вместо этого, когда в кэш запросов требуется вставить новую запись, база данных -проверяет, достаточно ли в нём свободного места для новой записи. Если места недостаточно, база данных пытается удалить все устаревшие -записи. Если в кэше всё ещё недостаточно свободного места, новая запись не вставляется. +Записи в кэше запросов становятся устаревшими через определенный период времени (time-to-live). По умолчанию этот период составляет 60 секунд, но другое +значение можно задать на уровне сессии, профиля или отдельного запроса, используя настройку [query_cache_ttl](/operations/settings/settings#query_cache_ttl). Кэш запросов +удаляет записи «лениво», то есть когда запись становится устаревшей, она не удаляется из кэша немедленно. Вместо этого, когда в кэш запросов нужно вставить новую запись, +база данных проверяет, достаточно ли в кэше свободного места для новой записи. Если это не так, +база данных пытается удалить все устаревшие записи. Если в кэше по-прежнему недостаточно свободного места, новая запись не добавляется. -Записи в кэше запросов по умолчанию сжимаются. Это уменьшает общий объём потребляемой памяти ценой более медленных операций записи в -кэш запросов и чтения из него. Чтобы отключить сжатие, используйте настройку -[query_cache_compress_entries](/operations/settings/settings#query_cache_compress_entries). +Если запрос выполняется через HTTP, то ClickHouse устанавливает заголовки `Age` и `Expires` с временем жизни (в секундах) и временной меткой истечения срока действия +закэшированной записи. -Иногда бывает полезно хранить в кэше несколько результатов для одного и того же запроса. Это можно сделать с помощью настройки -[query_cache_tag](/operations/settings/settings#query_cache_tag), которая действует как метка (или пространство имён) для записей кэша запросов. -Кэш запросов рассматривает результаты одного и того же запроса с разными тегами как разные результаты. +Записи в кэше запросов по умолчанию сжимаются. Это уменьшает общее потребление памяти ценой более медленной записи в кэш и чтения +из кэша запросов. Чтобы отключить сжатие, используйте настройку [query_cache_compress_entries](/operations/settings/settings#query_cache_compress_entries). -Пример создания трёх различных записей в кэше запросов для одного и того же запроса: +Иногда полезно хранить в кэше несколько результатов для одного и того же запроса. Это можно сделать с помощью настройки +[query_cache_tag](/operations/settings/settings#query_cache_tag), которая выступает в роли метки (или пространства имен) для записей кэша запросов. Кэш запросов +считает результаты одного и того же запроса с разными тегами разными. + +Пример создания трех разных записей в кэше запросов для одного и того же запроса: ```sql -SELECT 1 SETTINGS use_query_cache = true; -- query_cache_tag неявно равен '' (пустая строка) -SELECT 1 SETTINGS use_query_cache = true, query_cache_tag = 'тег 1'; -SELECT 1 SETTINGS use_query_cache = true, query_cache_tag = 'тег 2'; +SELECT 1 SETTINGS use_query_cache = true; -- query_cache_tag неявно '' (пустая строка) +SELECT 1 SETTINGS use_query_cache = true, query_cache_tag = 'tag 1'; +SELECT 1 SETTINGS use_query_cache = true, query_cache_tag = 'tag 2'; ``` -Чтобы удалить из кэша запросов только записи с тегом `tag`, вы можете использовать команду `SYSTEM DROP QUERY CACHE TAG 'tag'`. +Чтобы удалить из кэша запросов только записи с тегом `tag`, можно использовать оператор `SYSTEM DROP QUERY CACHE TAG 'tag'`. -ClickHouse читает данные таблицы блоками по [max_block_size](/operations/settings/settings#max_block_size) строк. Из‑за фильтрации, агрегации -и т. д. результирующие блоки, как правило, намного меньше, чем `max_block_size`, но бывают и случаи, когда они гораздо больше. Настройка -[query_cache_squash_partial_results](/operations/settings/settings#query_cache_squash_partial_results) (включена по умолчанию) управляет тем, будут ли -результирующие блоки объединяться (если они очень маленькие) или разбиваться (если они большие) на блоки размера `max_block_size` перед вставкой -в кэш результатов запросов. Это снижает производительность записи в кэш запросов, но улучшает степень сжатия элементов кэша и обеспечивает -более естественную гранулярность блоков, когда результаты запросов затем отдаются из кэша запросов. +ClickHouse читает данные таблицы блоками по [max_block_size](/operations/settings/settings#max_block_size) строк. Из-за фильтрации, агрегации +и т.п. блоки результатов обычно значительно меньше, чем `max_block_size`, но бывают случаи, когда они существенно больше. Настройка +[query_cache_squash_partial_results](/operations/settings/settings#query_cache_squash_partial_results) (включена по умолчанию) управляет тем, +будут ли блоки результатов объединяться (если они маленькие) или разбиваться (если они большие) на блоки размера `max_block_size` перед +записью в кэш результатов запросов. Это снижает производительность записи в кэш запросов, но улучшает степень сжатия элементов кэша и +обеспечивает более естественную зернистость блоков при последующей выдаче результатов запросов из кэша. В результате кэш запросов хранит для каждого запроса несколько (частичных) -блоков результата. Хотя такое поведение является хорошим значением по умолчанию, его можно отключить с помощью настройки +блоков результатов. Хотя такое поведение является разумным значением по умолчанию, его можно отключить с помощью настройки [query_cache_squash_partial_results](/operations/settings/settings#query_cache_squash_partial_results). -Кроме того, результаты запросов с недетерминированными функциями по умолчанию не кэшируются. К таким функциям относятся: -- функции для доступа к словарям: [`dictGet()`](/sql-reference/functions/ext-dict-functions#dictget-dictgetordefault-dictgetornull) и т. д.; +Также результаты запросов с недетерминированными функциями по умолчанию не кэшируются. К таким функциям относятся: + +- функции для доступа к словарям: [`dictGet()`](/sql-reference/functions/ext-dict-functions#dictget-dictgetordefault-dictgetornull) и т.п.; - [пользовательские функции](../sql-reference/statements/create/function.md) без тега `true` в их XML- определении; - функции, возвращающие текущие дату или время: [`now()`](../sql-reference/functions/date-time-functions.md#now), [`today()`](../sql-reference/functions/date-time-functions.md#today), - [`yesterday()`](../sql-reference/functions/date-time-functions.md#yesterday) и т. д.; + [`yesterday()`](../sql-reference/functions/date-time-functions.md#yesterday) и т.п.; - функции, возвращающие случайные значения: [`randomString()`](../sql-reference/functions/random-functions.md#randomString), - [`fuzzBits()`](../sql-reference/functions/random-functions.md#fuzzBits) и т. д.; -- функции, результат которых зависит от размера и порядка внутренних чанков, используемых при обработке запроса: - [`nowInBlock()`](../sql-reference/functions/date-time-functions.md#nowInBlock) и т. д., + [`fuzzBits()`](../sql-reference/functions/random-functions.md#fuzzBits) и т.п.; +- функции, результат которых зависит от размера и порядка внутренних фрагментов (чанков), используемых при обработке запроса: + [`nowInBlock()`](../sql-reference/functions/date-time-functions.md#nowInBlock) и т.п., [`rowNumberInBlock()`](../sql-reference/functions/other-functions.md#rowNumberInBlock), [`runningDifference()`](../sql-reference/functions/other-functions.md#runningDifference), - [`blockSize()`](../sql-reference/functions/other-functions.md#blockSize) и т. д.; + [`blockSize()`](../sql-reference/functions/other-functions.md#blockSize) и т.п.; - функции, зависящие от окружения: [`currentUser()`](../sql-reference/functions/other-functions.md#currentUser), [`queryID()`](/sql-reference/functions/other-functions#queryID), - [`getMacro()`](../sql-reference/functions/other-functions.md#getMacro) и т. д. + [`getMacro()`](../sql-reference/functions/other-functions.md#getMacro) и т.п. -Чтобы принудительно кэшировать результаты запросов с недетерминированными функциями, используйте настройку +Чтобы принудительно кэшировать результаты запросов с недетерминированными функциями, независимо от этого поведения, используйте настройку [query_cache_nondeterministic_function_handling](/operations/settings/settings#query_cache_nondeterministic_function_handling). -Результаты запросов, которые затрагивают системные таблицы (например, [system.processes](system-tables/processes.md)` или +Результаты запросов, которые обращаются к системным таблицам (например, [system.processes](system-tables/processes.md) или [information_schema.tables](system-tables/information_schema.md)), по умолчанию не кэшируются. Чтобы принудительно кэшировать результаты -запросов, использующих системные таблицы, используйте настройку -[query_cache_system_table_handling](/operations/settings/settings#query_cache_system_table_handling). +запросов с системными таблицами, используйте настройку [query_cache_system_table_handling](/operations/settings/settings#query_cache_system_table_handling). Наконец, элементы в кэше запросов не разделяются между пользователями по соображениям безопасности. Например, пользователь A не должен -иметь возможность обойти политику по строкам в таблице, выполнив тот же запрос, что и другой пользователь B, для которого такая политика -отсутствует. Однако при необходимости элементы кэша могут быть помечены как доступные для других пользователей (т. е. общие) с помощью -настройки [query_cache_share_between_users](/operations/settings/settings#query_cache_share_between_users). - - +иметь возможность обойти политику по строкам таблицы, запустив тот же запрос, что и другой пользователь B, для которого такая политика не +задана. Однако при необходимости элементы кэша могут быть помечены как доступные другим пользователям (т.е. общими) с помощью настройки +[query_cache_share_between_users](/operations/settings/settings#query_cache_share_between_users). -## Связанный контент {#related-content} +## Связанные материалы \{#related-content\} -- Блог: [Introducing the ClickHouse Query Cache](https://clickhouse.com/blog/introduction-to-the-clickhouse-query-cache-and-design) +- Блог: [Introducing the ClickHouse Query Cache](https://clickhouse.com/blog/introduction-to-the-clickhouse-query-cache-and-design) \ No newline at end of file diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/server-configuration-parameters/settings.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/server-configuration-parameters/settings.md index 112a56d595c..64f11455481 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/server-configuration-parameters/settings.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/server-configuration-parameters/settings.md @@ -1,5145 +1,14 @@ --- -description: 'В этом разделе описаны серверные настройки, то есть настройки, -которые нельзя изменить на уровне сессии или запроса.' +description: 'Этот раздел содержит описания настроек сервера, то есть настроек, + которые не могут быть изменены на уровне сеанса или запроса.' keywords: ['глобальные настройки сервера'] -sidebar_label: 'Серверные настройки' +sidebar_label: 'Настройки сервера' sidebar_position: 57 slug: /operations/server-configuration-parameters/settings -title: 'Серверные настройки' +title: 'Настройки сервера' doc_type: 'reference' --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; -import SystemLogParameters from '@site/docs/operations/server-configuration-parameters/_snippets/_system-log-parameters.md'; -import SettingsInfoBlock from '@theme/SettingsInfoBlock/SettingsInfoBlock'; - - -# Настройки сервера - -В этом разделе приведены описания настроек сервера. Это настройки, которые -нельзя изменить на уровне сессии или отдельного запроса. - -Для получения дополнительной информации о конфигурационных файлах в ClickHouse см. раздел [«Файлы конфигурации»](/operations/configuration-files). - -Другие настройки описаны в разделе [«Настройки»](/operations/settings/overview). -Перед изучением настроек рекомендуется прочитать раздел [«Файлы конфигурации»](/operations/configuration-files) -и обратить внимание на использование подстановок (атрибуты `incl` и `optional`). - - - -## abort_on_logical_error {#abort_on_logical_error} - -Аварийно завершать работу сервера при возникновении исключений LOGICAL_ERROR. Только для экспертов. - - - -## access_control_improvements - -Настройки для дополнительных улучшений системы управления доступом. - -| Setting | Description | Default | -| ----------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -| `users_without_row_policies_can_read_rows` | Определяет, могут ли пользователи без разрешающих строковых политик по-прежнему читать строки с помощью запроса `SELECT`. Например, если есть два пользователя A и B и строковая политика определена только для A, то если этот параметр имеет значение `true`, пользователь B увидит все строки. Если параметр имеет значение `false`, пользователь B не увидит ни одной строки. | `true` | -| `on_cluster_queries_require_cluster_grant` | Определяет, требуют ли запросы с `ON CLUSTER` наличия привилегии `CLUSTER`. | `true` | -| `select_from_system_db_requires_grant` | Определяет, требует ли запрос `SELECT * FROM system.` каких-либо привилегий или может выполняться любым пользователем. Если установлено в `true`, такой запрос требует `GRANT SELECT ON system.
` так же, как и для несистемных таблиц. Исключения: некоторые системные таблицы (`tables`, `columns`, `databases` и некоторые константные таблицы, такие как `one`, `contributors`) остаются доступными для всех; кроме того, если выдана привилегия `SHOW` (например, `SHOW USERS`), то соответствующая системная таблица (то есть `system.users`) будет доступна. | `true` | -| `select_from_information_schema_requires_grant` | Определяет, требует ли запрос `SELECT * FROM information_schema.
` каких-либо привилегий или может выполняться любым пользователем. Если установлено в `true`, такой запрос требует `GRANT SELECT ON information_schema.
` так же, как и для обычных таблиц. | `true` | -| `settings_constraints_replace_previous` | Определяет, будет ли ограничение в профиле настроек для некоторого параметра отменять действия предыдущего ограничения (определённого в других профилях) для этого параметра, включая поля, которые не заданы новым ограничением. Также включает тип ограничения `changeable_in_readonly`. | `true` | -| `table_engines_require_grant` | Определяет, требуется ли привилегия для создания таблицы с конкретным движком таблицы. | `false` | -| `role_cache_expiration_time_seconds` | Определяет количество секунд с момента последнего обращения, в течение которых роль хранится в Role Cache. | `600` | - -Пример: - -```xml - - true - true - true - true - true - false - 600 - -``` - - -## access_control_path {#access_control_path} - -Путь к каталогу, в котором сервер ClickHouse хранит конфигурации пользователей и ролей, созданные с помощью SQL‑команд. - -**См. также** - -- [Управление доступом и учетными записями](/operations/access-rights#access-control-usage) - - - -## aggregate_function_group_array_action_when_limit_is_reached {#aggregate_function_group_array_action_when_limit_is_reached} - -Действие, выполняемое при превышении максимального размера массива элементов в groupArray: `throw` — сгенерировать исключение, или `discard` — отбросить лишние значения - - - -## aggregate_function_group_array_max_element_size {#aggregate_function_group_array_max_element_size} - -Максимальный размер элемента массива в байтах для функции groupArray. Это ограничение проверяется при сериализации и помогает избежать чрезмерного размера состояния. - - - -## allow_feature_tier {#allow_feature_tier} - - -Управляет возможностью пользователя изменять настройки, относящиеся к различным уровням функций. - -- `0` - Допускаются изменения любых настроек (experimental, beta, production). -- `1` - Допускаются только изменения настроек функций уровней beta и production. Изменения настроек experimental отклоняются. -- `2` - Допускаются только изменения настроек уровня production. Изменения настроек уровней experimental или beta отклоняются. - -Это эквивалентно установке ограничения readonly для всех функций `EXPERIMENTAL` / `BETA`. - -:::note -Значение `0` означает, что все настройки могут быть изменены. -::: - - - - -## allow_impersonate_user {#allow_impersonate_user} - -Включает или отключает функцию IMPERSONATE (EXECUTE AS target_user). - - - -## allow_implicit_no_password - -Запрещает создавать пользователя без пароля, за исключением случая, когда явно указано `IDENTIFIED WITH no_password`. - -```xml -1 -``` - - -## allow_no_password - -Задаёт, разрешён ли небезопасный тип пароля `no_password`. - -```xml -1 -``` - - -## allow_plaintext_password - -Определяет, разрешено ли использование небезопасных паролей в открытом виде (plaintext-password). - -```xml -1 -``` - - -## allow_use_jemalloc_memory {#allow_use_jemalloc_memory} - -Разрешает использовать выделитель памяти jemalloc. - - - -## allowed_disks_for_table_engines {#allowed_disks_for_table_engines} - -Список дисков, которые можно использовать с Iceberg - - - -## async_insert_queue_flush_on_shutdown {#async_insert_queue_flush_on_shutdown} - -Если установлено значение true, очередь асинхронных вставок сбрасывается при корректном завершении работы сервера - - - -## async_insert_threads {#async_insert_threads} - -Максимальное количество потоков, используемых для разбора и вставки данных в фоновом режиме. Значение 0 отключает асинхронный режим. - - - -## async_load_databases - - - -Асинхронная загрузка баз данных и таблиц. - -* Если `true`, все несистемные базы данных с движками `Ordinary`, `Atomic` и `Replicated` будут загружаться асинхронно после запуска сервера ClickHouse. См. таблицу `system.asynchronous_loader`, а также настройки сервера `tables_loader_background_pool_size` и `tables_loader_foreground_pool_size`. Любой запрос, который пытается получить доступ к таблице, которая ещё не загружена, будет ждать запуска именно этой таблицы. Если задача загрузки завершится с ошибкой, запрос повторно выбросит это исключение (вместо остановки всего сервера в случае `async_load_databases = false`). Таблица, которую ожидает хотя бы один запрос, будет загружена с более высоким приоритетом. DDL-запросы к базе данных будут ждать запуска именно этой базы данных. Также рассмотрите возможность установки ограничения `max_waiting_queries` на общее количество ожидающих запросов. -* Если `false`, все базы данных загружаются при старте сервера. - -**Пример** - -```xml -true -``` - - -## async_load_system_database - - - -Асинхронная загрузка системных таблиц. Полезно, если в базе данных `system` много таблиц логов и частей. Не зависит от настройки `async_load_databases`. - -* Если имеет значение `true`, все системные базы данных с движками `Ordinary`, `Atomic` и `Replicated` будут загружаться асинхронно после запуска сервера ClickHouse. См. таблицу `system.asynchronous_loader`, а также серверные настройки `tables_loader_background_pool_size` и `tables_loader_foreground_pool_size`. Любой запрос, который попытается получить доступ к системной таблице, которая ещё не загружена, будет ждать запуска именно этой таблицы. Таблица, которую ожидает хотя бы один запрос, будет загружена с повышенным приоритетом. Также рассмотрите возможность установки настройки `max_waiting_queries` для ограничения общего числа ожидающих запросов. -* Если имеет значение `false`, системная база данных загружается до запуска сервера. - -**Пример** - -```xml -true -``` - - -## asynchronous_heavy_metrics_update_period_s {#asynchronous_heavy_metrics_update_period_s} - -Период обновления тяжёлых асинхронных метрик в секундах. - - - -## asynchronous_insert_log - -Параметры системной таблицы [asynchronous_insert_log](/operations/system-tables/asynchronous_insert_log), используемой для журналирования асинхронных вставок. - - - -**Пример** - -```xml - - - system -
asynchronous_insert_log
- 7500 - toYYYYMM(event_date) - 1048576 - 8192 - 524288 - false - - - -``` - - -## asynchronous_metric_log - -Включен по умолчанию в развертываниях ClickHouse Cloud. - -Если этот параметр не включен по умолчанию в вашей среде, в зависимости от того, как был установлен ClickHouse, вы можете воспользоваться приведёнными ниже инструкциями, чтобы включить или отключить его. - -**Включение** - -Чтобы вручную включить сбор истории журнала асинхронных метрик [`system.asynchronous_metric_log`](../../operations/system-tables/asynchronous_metric_log.md), создайте `/etc/clickhouse-server/config.d/asynchronous_metric_log.xml` со следующим содержимым: - -```xml - - - system - asynchronous_metric_log
- 7500 - 1000 - 1048576 - 8192 - 524288 - false -
-
-``` - -**Отключение** - -Чтобы отключить параметр `asynchronous_metric_log`, необходимо создать файл `/etc/clickhouse-server/config.d/disable_asynchronous_metric_log.xml` со следующим содержимым: - -```xml - -``` - - - - -## asynchronous_metrics_enable_heavy_metrics {#asynchronous_metrics_enable_heavy_metrics} - -Включает вычисление ресурсоёмких асинхронных метрик. - - - -## asynchronous_metrics_update_period_s {#asynchronous_metrics_update_period_s} - -Интервал обновления асинхронных метрик в секундах. - - - -## auth_use_forwarded_address {#auth_use_forwarded_address} - -Использовать исходный адрес для аутентификации клиентов, подключающихся через прокси. - -:::note -Этот параметр следует использовать с особой осторожностью, поскольку пересылаемые адреса легко подделать — серверы, принимающие такую аутентификацию, не должны быть доступны напрямую, а только через доверенный прокси. -::: - - - -## background_buffer_flush_schedule_pool_size {#background_buffer_flush_schedule_pool_size} - -Максимальное количество потоков, которое будет использоваться для фонового выполнения операций сброса данных в [таблицах движка Buffer](/engines/table-engines/special/buffer). - - - -## background_common_pool_size {#background_common_pool_size} - -Максимальное количество потоков, используемых для выполнения различных операций (в основном по сборке мусора) для таблиц [*MergeTree-engine](/engines/table-engines/mergetree-family) в фоновом режиме. - - - -## background_distributed_schedule_pool_size {#background_distributed_schedule_pool_size} - -Максимальное количество потоков, которое будет использоваться для выполнения распределённых отправок. - - - -## background_fetches_pool_size {#background_fetches_pool_size} - -Максимальное число потоков, которые будут использоваться для загрузки частей данных с другой реплики для таблиц [*MergeTree-engine](/engines/table-engines/mergetree-family) в фоновом режиме. - - - -## background_merges_mutations_concurrency_ratio {#background_merges_mutations_concurrency_ratio} - - -Задает отношение между числом потоков и количеством фоновых слияний и мутаций, которые могут выполняться одновременно. - -Например, если это отношение равно 2 и [`background_pool_size`](/operations/server-configuration-parameters/settings#background_pool_size) равно 16, то ClickHouse может выполнять 32 фоновых слияния одновременно. Это возможно, потому что фоновые операции могут быть приостановлены и отложены. Это необходимо, чтобы обеспечить более высокий приоритет выполнения для небольших слияний. - -:::note -Вы можете увеличивать это отношение только во время работы сервера. Чтобы уменьшить его, необходимо перезапустить сервер. - -Как и настройка [`background_pool_size`](/operations/server-configuration-parameters/settings#background_pool_size), параметр [`background_merges_mutations_concurrency_ratio`](/operations/server-configuration-parameters/settings#background_merges_mutations_concurrency_ratio) может быть установлен в профиле `default` для обратной совместимости. -::: - - - - -## background_merges_mutations_scheduling_policy {#background_merges_mutations_scheduling_policy} - - -Политика планирования фоновых слияний и мутаций. Возможные значения: `round_robin` и `shortest_task_first`. - -Алгоритм, используемый для выбора следующего слияния или мутации для выполнения пулом фоновых потоков. Политику можно изменять во время работы без перезапуска сервера. -Может быть задана из профиля `default` для обеспечения обратной совместимости. - -Возможные значения: - -- `round_robin` — Каждое одновременное слияние и каждая мутация выполняются по принципу round-robin, чтобы избежать ресурсного голодания. Маленькие слияния завершаются быстрее, чем большие, просто потому, что им требуется объединить меньше блоков. -- `shortest_task_first` — Всегда выполнять слияние или мутацию меньшего размера. Слияниям и мутациям назначаются приоритеты на основе их результирующего размера. Слияния с меньшим размером строго предпочитаются большим. Эта политика обеспечивает максимально быстрое объединение маленьких частей, но может приводить к бесконечному голоданию больших слияний в разделах, сильно перегруженных `INSERT`ами. - - - - -## background_message_broker_schedule_pool_size {#background_message_broker_schedule_pool_size} - -Максимальное количество потоков, которое будет использоваться для выполнения фоновых операций при потоковой передаче сообщений. - - - -## background_move_pool_size {#background_move_pool_size} - -Максимальное количество потоков, которое будет использовано для перемещения частей данных на другой диск или том для таблиц движка MergeTree в фоновом режиме. - - - -## background_pool_size - - - -Задает количество потоков, выполняющих фоновые слияния и мутации для таблиц с движками MergeTree. - -:::note - -* Этот параметр также может быть задан при запуске сервера в конфигурации профиля `default` для обратной совместимости при старте сервера ClickHouse. -* Во время работы сервера вы можете только увеличить количество потоков. -* Чтобы уменьшить количество потоков, необходимо перезапустить сервер. -* Изменяя этот параметр, вы управляете нагрузкой на CPU и диск. - ::: - -:::danger -Меньший размер пула потребляет меньше ресурсов CPU и диска, но фоновые процессы выполняются медленнее, что со временем может негативно сказаться на производительности запросов. -::: - -Прежде чем изменять этот параметр, ознакомьтесь также со связанными настройками MergeTree, такими как: - -* [`number_of_free_entries_in_pool_to_lower_max_size_of_merge`](../../operations/settings/merge-tree-settings.md#number_of_free_entries_in_pool_to_lower_max_size_of_merge). -* [`number_of_free_entries_in_pool_to_execute_mutation`](../../operations/settings/merge-tree-settings.md#number_of_free_entries_in_pool_to_execute_mutation). -* [`number_of_free_entries_in_pool_to_execute_optimize_entire_partition`](/operations/settings/merge-tree-settings#number_of_free_entries_in_pool_to_execute_optimize_entire_partition) - -**Пример** - -```xml -16 -``` - - -## background_schedule_pool_max_parallel_tasks_per_type_ratio {#background_schedule_pool_max_parallel_tasks_per_type_ratio} - -Максимальная доля потоков пула, которые могут одновременно выполнять задачи одного типа. - - - -## background_schedule_pool_size {#background_schedule_pool_size} - -Максимальное количество потоков, которое будет использоваться для постоянного выполнения легковесных периодических операций с реплицируемыми таблицами, потоковой обработкой в Kafka и обновлением кэша DNS. - - - -## backup_log - -Настройки системной таблицы [backup_log](../../operations/system-tables/backup_log.md), предназначенной для регистрации операций `BACKUP` и `RESTORE`. - - - -**Пример** - -```xml - - - system - backup_log
- 1000 - toYYYYMM(event_date) - 1048576 - 8192 - 524288 - false - -
-
-``` - - -## backup_threads {#backup_threads} - -Максимальное число потоков, используемых для выполнения запросов `BACKUP`. - - - -## backups {#backups} - -Настройки резервного копирования, используемые при выполнении операторов [`BACKUP` и `RESTORE`](../backup.md). - -Следующие настройки можно задать с помощью под-тегов: - - - -{/* SQL - WITH settings AS ( - SELECT arrayJoin([ - ('allow_concurrent_backups', 'Bool','Определяет, могут ли несколько операций резервного копирования выполняться параллельно на одном и том же хосте.', 'true'), - ('allow_concurrent_restores', 'Bool', 'Определяет, могут ли несколько операций восстановления выполняться параллельно на одном и том же хосте.', 'true'), - ('allowed_disk', 'String', 'Диск для резервного копирования при использовании `File()`. Этот параметр должен быть задан для использования `File`.', ''), - ('allowed_path', 'String', 'Путь для резервного копирования при использовании `File()`. Этот параметр должен быть задан для использования `File`.', ''), - ('attempts_to_collect_metadata_before_sleep', 'UInt', 'Количество попыток собрать метаданные перед ожиданием в случае несоответствия после сравнения собранных метаданных.', '2'), - ('collect_metadata_timeout', 'UInt64', 'Таймаут в миллисекундах для сбора метаданных во время резервного копирования.', '600000'), - ('compare_collected_metadata', 'Bool', 'Если true, сравнивает собранные метаданные с существующими, чтобы убедиться, что они не изменяются во время резервного копирования.', 'true'), - ('create_table_timeout', 'UInt64', 'Таймаут в миллисекундах для создания таблиц во время восстановления.', '300000'), - ('max_attempts_after_bad_version', 'UInt64', 'Максимальное количество попыток повторить операцию после возникновения ошибки неверной версии при координированном резервном копировании/восстановлении.', '3'), - ('max_sleep_before_next_attempt_to_collect_metadata', 'UInt64', 'Максимальное время ожидания в миллисекундах перед следующей попыткой сбора метаданных.', '100'), - ('min_sleep_before_next_attempt_to_collect_metadata', 'UInt64', 'Минимальное время ожидания в миллисекундах перед следующей попыткой сбора метаданных.', '5000'), - ('remove_backup_files_after_failure', 'Bool', 'Если команда `BACKUP` завершается с ошибкой, ClickHouse попытается удалить файлы, уже скопированные в резервную копию до момента ошибки, иначе оставит скопированные файлы без изменений.', 'true'), - ('sync_period_ms', 'UInt64', 'Период синхронизации в миллисекундах для координированного резервного копирования/восстановления.', '5000'), - ('test_inject_sleep', 'Bool', 'Пауза (sleep), используемая при тестировании', 'false'), - ('test_randomize_order', 'Bool', 'Если true, случайным образом меняет порядок некоторых операций в целях тестирования.', 'false'), - ('zookeeper_path', 'String', 'Путь в ZooKeeper, где хранятся метаданные резервного копирования и восстановления при использовании предложения `ON CLUSTER`.', '/clickhouse/backups') - ]) AS t ) - SELECT concat('`', t.1, '`') AS Setting, t.2 AS Type, t.3 AS Description, concat('`', t.4, '`') AS Default FROM settings FORMAT Markdown +{/* ПРИМЕЧАНИЕ: настройки в этом файле сгенерированы автоматически. + Для получения дополнительной информации см. ["Generating documentation from source code"](https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md) */ } - -| Настройка | Тип | Описание | По умолчанию | -| :-------------------------------------------------- | :----- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------- | -| `allow_concurrent_backups` | Bool | Определяет, могут ли несколько операций резервного копирования выполняться одновременно на одном и том же хосте. | `true` | -| `allow_concurrent_restores` | Bool | Определяет, могут ли несколько операций восстановления выполняться одновременно на одном хосте. | `true` | -| `allowed_disk` | Строка | Диск, на который выполняется резервное копирование при использовании `File()`. Этот параметр должен быть задан, чтобы использовать `File`. | `` | -| `allowed_path` | Строка | Путь для резервного копирования при использовании `File()`. Этот параметр необходимо указать, чтобы использовать `File`. | `` | -| `attempts_to_collect_metadata_before_sleep` | UInt | Количество попыток сбора метаданных до перехода в режим ожидания при обнаружении несоответствия после сравнения собранных метаданных. | `2` | -| `collect_metadata_timeout` | UInt64 | Тайм-аут в миллисекундах для сбора метаданных при создании резервной копии. | `600000` | -| `compare_collected_metadata` | Bool | Если установлено значение `true`, сравнивает собранные метаданные с существующими, чтобы убедиться, что они не изменились во время резервного копирования. | `true` | -| `create_table_timeout` | UInt64 | Таймаут в миллисекундах на создание таблиц при восстановлении. | `300000` | -| `max_attempts_after_bad_version` | UInt64 | Максимальное число повторных попыток при возникновении ошибки неверной версии во время координированного резервного копирования или восстановления. | `3` | -| `max_sleep_before_next_attempt_to_collect_metadata` | UInt64 | Максимальное время ожидания в миллисекундах перед следующей попыткой сбора метаданных. | `100` | -| `min_sleep_before_next_attempt_to_collect_metadata` | UInt64 | Минимальное время ожидания в миллисекундах перед следующей попыткой собрать метаданные. | `5000` | -| `remove_backup_files_after_failure` | Bool | Если выполнение команды `BACKUP` завершится с ошибкой, ClickHouse попытается удалить файлы, которые были скопированы в резервную копию до возникновения ошибки, в противном случае оставит скопированные файлы как есть. | `true` | -| `sync_period_ms` | UInt64 | Период синхронизации в миллисекундах для согласованного резервного копирования и восстановления. | `5000` | -| `test_inject_sleep` | Bool | Задержка, используемая для тестирования | `false` | -| `test_randomize_order` | Bool | Если имеет значение `true`, случайным образом изменяет порядок выполнения некоторых операций для целей тестирования. | `false` | -| `zookeeper_path` | Строка | Путь в ZooKeeper, где хранятся метаданные операций резервного копирования и восстановления при использовании клаузы `ON CLUSTER`. | `/clickhouse/backups` | - -По умолчанию этот параметр имеет следующее значение: - -```xml - - .... - -``` - - -## backups_io_thread_pool_queue_size {#backups_io_thread_pool_queue_size} - - -Максимальное количество заданий, которые могут быть поставлены в очередь пула потоков ввода-вывода резервного копирования (Backups IO thread pool). Рекомендуется оставлять эту очередь неограниченной из-за текущей логики резервного копирования в S3. - -:::note -Значение `0` (по умолчанию) означает отсутствие ограничения. -::: - - - - -## bcrypt_workfactor - -Параметр work factor для типа аутентификации `bcrypt_password`, который использует [алгоритм Bcrypt](https://wildlyinaccurate.com/bcrypt-choosing-a-work-factor/). -Этот параметр определяет объём вычислений и время, необходимые для вычисления хеша и проверки пароля. - -```xml -12 -``` - -:::warning -Для приложений с частыми операциями аутентификации -рассмотрите альтернативные методы аутентификации из-за -вычислительных накладных расходов bcrypt при высоких значениях параметра work factor. -::: - - -## blob_storage_log - -Настройки системной таблицы [`blob_storage_log`](../system-tables/blob_storage_log.md). - - - -Пример: - -```xml - - systemblob_storage_logtoYYYYMM(event_date) - 7500event_date + INTERVAL 30 DAY - -``` - - -## builtin_dictionaries_reload_interval - -Интервал в секундах между автоматическими перезагрузками встроенных словарей. - -ClickHouse перезагружает встроенные словари каждые x секунд. Это позволяет изменять словари «на лету» без перезапуска сервера. - -**Пример** - -```xml -3600 -``` - - -## cache_size_to_ram_max_ratio {#cache_size_to_ram_max_ratio} - -Устанавливает максимальное отношение размера кэша к объёму оперативной памяти. Позволяет уменьшить размер кэша на системах с ограниченным объёмом памяти. - - - -## cannot_allocate_thread_fault_injection_probability {#cannot_allocate_thread_fault_injection_probability} - -Для тестирования. - - - -## cgroups_memory_usage_observer_wait_time {#cgroups_memory_usage_observer_wait_time} - - -Интервал в секундах между пересчётами максимального допустимого объёма памяти сервера на основе порогового значения в cgroups. - -Чтобы отключить наблюдатель cgroup, установите этот параметр в `0`. - - - - -## compiled_expression_cache_elements_size {#compiled_expression_cache_elements_size} - -Задает размер кэша (в элементах) для [скомпилированных выражений](../../operations/caches.md). - - - -## compiled_expression_cache_size {#compiled_expression_cache_size} - -Устанавливает размер кэша (в байтах) для [скомпилированных выражений](../../operations/caches.md). - - - -## compression - -Настройки сжатия данных для таблиц с движком [MergeTree](../../engines/table-engines/mergetree-family/mergetree.md). - -:::note -Рекомендуем не менять эти настройки, если вы только начали работать с ClickHouse. -::: - -**Шаблон конфигурации**: - -```xml - - - ... - ... - ... - ... - - ... - -``` - -**Поля ``**: - -* `min_part_size` – минимальный размер части данных. -* `min_part_size_ratio` – отношение размера части данных к размеру таблицы. -* `method` – метод сжатия. Допустимые значения: `lz4`, `lz4hc`, `zstd`, `deflate_qpl`. -* `level` – уровень сжатия. См. [Codecs](/sql-reference/statements/create/table#general-purpose-codecs). - -:::note -Вы можете настроить несколько секций ``. -::: - -**Действия при выполнении условий**: - -* Если часть данных удовлетворяет набору условий, ClickHouse использует указанный метод сжатия. -* Если часть данных удовлетворяет нескольким наборам условий, ClickHouse использует первый подходящий набор условий. - -:::note -Если для части данных не выполняется ни одно условие, ClickHouse использует сжатие `lz4`. -::: - -**Пример** - -```xml - - - 10000000000 - 0.01 - zstd - 1 - - -``` - - -## concurrent_threads_scheduler {#concurrent_threads_scheduler} - - -Политика того, как распределяются слоты CPU, задаваемые с помощью `concurrent_threads_soft_limit_num` и `concurrent_threads_soft_limit_ratio_to_cores`. Алгоритм, определяющий, как ограниченное число слотов CPU распределяется между параллельными запросами. Планировщик может быть изменен во время работы сервера без его перезапуска. - -Возможные значения: - -- `round_robin` — Каждый запрос с настройкой `use_concurrency_control` = 1 может выделить до `max_threads` слотов CPU, по одному слоту на поток. При конкуренции за ресурсы слоты CPU выделяются запросам по круговой схеме (round-robin). Обратите внимание, что первый слот выделяется безусловно, что может приводить к несправедливому распределению и увеличенной задержке для запросов с высоким значением `max_threads` при большом количестве запросов с `max_threads` = 1. -- `fair_round_robin` — Каждый запрос с настройкой `use_concurrency_control` = 1 может выделить до `max_threads - 1` слотов CPU. Вариант `round_robin`, который не требует слота CPU для первого потока каждого запроса. Таким образом, запросы с `max_threads` = 1 не требуют ни одного слота и не могут несправедливо занять все слоты. Ни один слот не выделяется безусловно. - - - - -## concurrent_threads_soft_limit_num {#concurrent_threads_soft_limit_num} - - -Максимальное количество потоков обработки запросов, за исключением потоков для получения данных с удалённых серверов, которые могут одновременно использоваться всеми запросами. Это не жёсткий лимит. Если лимит достигнут, запрос всё равно получит как минимум один поток для выполнения. Во время выполнения запрос может увеличивать число используемых потоков до требуемого, если становятся доступны дополнительные потоки. - -:::note -Значение `0` (по умолчанию) означает отсутствие ограничений. -::: - - - - -## concurrent_threads_soft_limit_ratio_to_cores {#concurrent_threads_soft_limit_ratio_to_cores} - -То же, что и [`concurrent_threads_soft_limit_num`](#concurrent_threads_soft_limit_num), но задаётся как отношение к числу ядер. - - - -## config_reload_interval_ms {#config_reload_interval_ms} - - -Как часто ClickHouse будет перезагружать конфигурацию и проверять её на наличие новых изменений - - - - -## core_dump - -Настраивает мягкое ограничение на размер файла дампа памяти (core dump). - -:::note -Жёсткое ограничение настраивается с помощью системных инструментов. -::: - -**Пример** - -```xml - - 1073741824 - -``` - - -## cpu_slot_preemption - - - -Определяет, как выполняется планирование использования CPU для рабочих нагрузок (MASTER THREAD и WORKER THREAD). - -* Если `true` (рекомендуется), учет ведется на основе фактически потребленного процессорного времени. Конкурирующим рабочим нагрузкам выделяется справедливый объем процессорного времени. Слоты выделяются на ограниченный промежуток времени и повторно запрашиваются после истечения срока действия. Запрос слота может блокировать выполнение потока в случае перегрузки по CPU, то есть может происходить вытеснение (preemption). Это обеспечивает справедливое распределение процессорного времени. -* Если `false` (по умолчанию), учет ведется на основе количества выделенных CPU-слотов. Конкурирующим рабочим нагрузкам выделяется справедливое количество CPU-слотов. Слот выделяется при запуске потока, удерживается непрерывно и освобождается при завершении выполнения потока. Количество потоков, выделенных для выполнения запроса, может увеличиваться только с 1 до `max_threads` и никогда не уменьшаться. Это более благоприятно для длительно выполняющихся запросов и может приводить к голоданию коротких запросов по CPU. - -**Пример** - -```xml -true -``` - -**См. также** - -* [Планирование рабочих нагрузок](/operations/workload-scheduling.md) - - -## cpu_slot_preemption_timeout_ms - - - -Определяет, сколько миллисекунд рабочий поток может ожидать во время вытеснения, то есть пока ожидает предоставления другого CPU-слота. По истечении этого таймаута, если потоку не удалось получить новый CPU-слот, он завершит работу, а запрос будет динамически уменьшен до меньшего числа одновременно выполняющихся потоков. Обратите внимание, что основной поток никогда не участвует в этом уменьшении числа потоков, но может вытесняться сколь угодно долго. Имеет смысл только при включённом `cpu_slot_preemption` и когда ресурс CPU определён для WORKER THREAD. - -**Пример** - -```xml -1000 -``` - -**См. также** - -* [Планирование рабочих нагрузок](/operations/workload-scheduling.md) - - -## cpu_slot_quantum_ns - - - -Определяет, сколько наносекунд процессорного времени поток может потреблять после получения слота CPU, прежде чем он должен запросить следующий слот CPU. Имеет смысл только если включён `cpu_slot_preemption` и ресурс CPU задан для MASTER THREAD или WORKER THREAD. - -**Пример** - -```xml -10000000 -``` - -**См. также** - -* [Планирование рабочих нагрузок](/operations/workload-scheduling.md) - - -## crash_log - -Настройки для работы системной таблицы [crash_log](../../operations/system-tables/crash_log.md). - -Следующие настройки могут быть настроены с помощью подтегов: - -| Setting | Description | Default | Note | -| ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------- | ---------------------------------------------------------------------------------------------------------------------------- | -| `database` | Имя базы данных. | | | -| `table` | Имя системной таблицы. | | | -| `engine` | [Определение движка MergeTree](/engines/table-engines/mergetree-family/mergetree#table_engine-mergetree-creating-a-table) для системной таблицы. | | Не может использоваться, если определены `partition_by` или `order_by`. Если не указано, по умолчанию выбирается `MergeTree` | -| `partition_by` | [Пользовательский ключ партиционирования](/engines/table-engines/mergetree-family/custom-partitioning-key.md) для системной таблицы. | | Если для системной таблицы указан `engine`, параметр `partition_by` должен быть задан напрямую внутри 'engine' | -| `ttl` | Задаёт [TTL](/engines/table-engines/mergetree-family/mergetree#table_engine-mergetree-ttl) таблицы. | | Если для системной таблицы указан `engine`, параметр `ttl` должен быть задан напрямую внутри 'engine' | -| `order_by` | [Пользовательский ключ сортировки](/engines/table-engines/mergetree-family/mergetree#order_by) для системной таблицы. Не может использоваться, если задан `engine`. | | Если для системной таблицы указан `engine`, параметр `order_by` должен быть задан напрямую внутри 'engine' | -| `storage_policy` | Имя политики хранения, используемой для таблицы (необязательно). | | Если для системной таблицы указан `engine`, параметр `storage_policy` должен быть задан напрямую внутри 'engine' | -| `settings` | [Дополнительные параметры](/engines/table-engines/mergetree-family/mergetree/#settings), управляющие поведением MergeTree (необязательно). | | Если для системной таблицы указан `engine`, параметр `settings` должен быть задан напрямую внутри 'engine' | -| `flush_interval_milliseconds` | Интервал сброса данных из буфера в памяти в таблицу. | `7500` | | -| `max_size_rows` | Максимальный размер журналов в строках. Когда количество несброшенных журналов достигает `max_size_rows`, они сбрасываются на диск. | `1024` | | -| `reserved_size_rows` | Предварительно выделенный размер памяти в строках для журналов. | `1024` | | -| `buffer_size_rows_flush_threshold` | Порог по количеству строк. При достижении порога в фоновом режиме запускается сброс журналов на диск. | `max_size_rows / 2` | | -| `flush_on_crash` | Определяет, должны ли журналы быть сброшены на диск в случае сбоя. | `false` | | - -Файл конфигурации сервера по умолчанию `config.xml` содержит следующий раздел настроек: - -```xml - - system - crash_log
- toYYYYMM(event_date) - 7500 - 1024 - 1024 - 512 - false -
-``` - - -## custom_cached_disks_base_directory - -Этот параметр задает путь к кэшу для пользовательских (созданных с помощью SQL) кэшируемых дисков. -У `custom_cached_disks_base_directory` более высокий приоритет для пользовательских дисков по сравнению с `filesystem_caches_path` (указанным в `filesystem_caches_path.xml`), -который используется, если первый параметр отсутствует. -Путь параметра файлового кэша должен находиться внутри этого каталога, -иначе будет сгенерировано исключение, препятствующее созданию диска. - -:::note -Это не повлияет на диски, созданные в более старой версии сервера, с которой выполнялось обновление. -В этом случае исключение сгенерировано не будет, чтобы сервер смог успешно запуститься. -::: - -Пример: - -```xml -/var/lib/clickhouse/caches/ -``` - - -## custom_settings_prefixes - -Список префиксов для [пользовательских настроек](/operations/settings/query-level#custom_settings). Префиксы должны быть разделены запятыми. - -**Пример** - -```xml -custom_ -``` - -**См. также** - -* [Пользовательские настройки](/operations/settings/query-level#custom_settings) - - -## database_atomic_delay_before_drop_table_sec {#database_atomic_delay_before_drop_table_sec} - - -Задержка, в течение которой удалённая таблица может быть восстановлена с помощью оператора [`UNDROP`](/sql-reference/statements/undrop.md). Если `DROP TABLE` был выполнен с модификатором `SYNC`, эта настройка игнорируется. -Значение по умолчанию для этого параметра — `480` (8 минут). - - - - -## database_catalog_drop_error_cooldown_sec {#database_catalog_drop_error_cooldown_sec} - -В случае неудачной попытки удаления таблицы ClickHouse будет ждать в течение этого тайм-аута, прежде чем повторить попытку. - - - -## database_catalog_drop_table_concurrency {#database_catalog_drop_table_concurrency} - -Размер пула потоков, используемого при удалении таблиц. - - - -## database_catalog_unused_dir_cleanup_period_sec {#database_catalog_unused_dir_cleanup_period_sec} - - -Параметр задачи, которая очищает каталог `store/` от неиспользуемых данных. -Задаёт периодичность выполнения этой задачи. - -:::note -Значение `0` означает «никогда». Значение по умолчанию соответствует 1 дню. -::: - - - - -## database_catalog_unused_dir_hide_timeout_sec {#database_catalog_unused_dir_hide_timeout_sec} - - -Параметр задачи, которая очищает от мусора каталог `store/`. -Если какой-либо подкаталог не используется clickhouse-server и этот каталог не изменялся в течение последних -[`database_catalog_unused_dir_hide_timeout_sec`](/operations/server-configuration-parameters/settings#database_catalog_unused_dir_hide_timeout_sec) секунд, задача «скроет» этот каталог, -удалив все права доступа. Это также работает для каталогов, которые clickhouse-server не -ожидает видеть внутри `store/`. - -:::note -Значение `0` означает «немедленно». -::: - - - - -## database_catalog_unused_dir_rm_timeout_sec {#database_catalog_unused_dir_rm_timeout_sec} - - -Параметр задачи, которая очищает неиспользуемые данные в каталоге `store/`. -Если некоторый подкаталог не используется clickhouse-server и ранее был «скрыт» -(см. [database_catalog_unused_dir_hide_timeout_sec](/operations/server-configuration-parameters/settings#database_catalog_unused_dir_hide_timeout_sec)), -и этот каталог не изменялся в течение последних -[`database_catalog_unused_dir_rm_timeout_sec`](/operations/server-configuration-parameters/settings#database_catalog_unused_dir_rm_timeout_sec) секунд, задача удалит этот каталог. -Параметр также применяется к каталогам, которые clickhouse-server -не ожидает увидеть внутри `store/`. - -:::note -Значение `0` означает «никогда». Значение по умолчанию соответствует 30 дням. -::: - - - - -## database_replicated_allow_detach_permanently {#database_replicated_allow_detach_permanently} - -Разрешает безвозвратное отсоединение таблиц в реплицируемых базах данных - - - -## database_replicated_drop_broken_tables {#database_replicated_drop_broken_tables} - -Удалять некорректные таблицы из реплицируемых баз данных вместо их переноса в отдельную локальную базу данных - - - -## dead_letter_queue - -Настройки системной таблицы «dead_letter_queue». - - - -Параметры по умолчанию следующие: - -```xml - - system - dead_letter
- toYYYYMM(event_date) - 7500 -
-``` - - -## default_database {#default_database} - -Имя базы данных по умолчанию. - - - -## default_password_type - -Устанавливает тип пароля, который будет автоматически использоваться в запросах вида `CREATE USER u IDENTIFIED BY 'p'`. - -Допустимые значения: - -* `plaintext_password` -* `sha256_password` -* `double_sha1_password` -* `bcrypt_password` - -```xml -sha256_password -``` - - -## default_profile - -Профиль настроек по умолчанию. Профили находятся в файле, указанном в настройке `user_config`. - -**Пример** - -```xml -default -``` - - -## default_replica_name - - - -Имя реплики в ZooKeeper. - -**Пример** - -```xml -{replica} -``` - - -## default_replica_path - - - -Путь к таблице в ZooKeeper. - -**Пример** - -```xml -/clickhouse/tables/{uuid}/{shard} -``` - - -## default_session_timeout - -Таймаут сеанса по умолчанию (в секундах). - -```xml -60 -``` - - -## dictionaries_config - -Путь к файлу конфигурации словарей. - -Путь: - -* Укажите абсолютный путь или путь, относительный к конфигурационному файлу сервера. -* Путь может содержать подстановочные символы * и ?. - -См. также: - -* "[Словари](../../sql-reference/dictionaries/index.md)". - -**Пример** - -```xml -*_dictionary.xml -``` - - -## dictionaries_lazy_load - - - -Отложенная загрузка словарей. - -* Если `true`, то каждый словарь загружается при первом использовании. Если загрузка завершилась с ошибкой, функция, использовавшая словарь, генерирует исключение. -* Если `false`, то сервер загружает все словари при запуске. - -:::note -При запуске сервер будет ждать, пока все словари завершат загрузку, прежде чем принимать какие‑либо подключения -(исключение: если [`wait_dictionaries_load_at_startup`](/operations/server-configuration-parameters/settings#wait_dictionaries_load_at_startup) установлено в `false`). -::: - -**Пример** - -```xml -true -``` - - -## dictionary_background_reconnect_interval {#dictionary_background_reconnect_interval} - -Интервал в миллисекундах для попыток повторного подключения завершившихся с ошибкой словарей MySQL и Postgres с включённым параметром `background_reconnect`. - - - -## disable_insertion_and_mutation {#disable_insertion_and_mutation} - - -Отключает запросы INSERT/ALTER/DELETE. Этот параметр следует включить, если требуются узлы только для чтения, чтобы исключить влияние вставок и мутаций на производительность чтения. Вставки во внешние движки (S3, DataLake, MySQL, PostrgeSQL, Kafka и т. д.) разрешены независимо от этого параметра. - - - - -## disable_internal_dns_cache {#disable_internal_dns_cache} - -Отключает внутренний DNS-кэш. Рекомендуется при работе ClickHouse в системах с часто меняющейся инфраструктурой, например Kubernetes. - - - -## disable_tunneling_for_https_requests_over_http_proxy - -По умолчанию для выполнения `HTTPS`‑запросов через `HTTP`‑прокси используется туннелирование (то есть `HTTP CONNECT`). Этот параметр можно использовать, чтобы его отключить. - -**no_proxy** - -По умолчанию все запросы проходят через прокси. Чтобы отключить его для конкретных хостов, необходимо задать переменную `no_proxy`. -Её можно задать внутри секции `` для list- и remote‑резолверов, а также в виде переменной окружения для резолвера environment. -Поддерживаются IP‑адреса, домены, поддомены и подстановочный символ `'*'` для полного обхода. Начальные точки удаляются так же, как это делает curl. - -**Example** - -Конфигурация ниже обходит прокси для запросов к `clickhouse.cloud` и всем его поддоменам (например, `auth.clickhouse.cloud`). -То же относится к GitLab, даже если указан домен с ведущей точкой. И `gitlab.com`, и `about.gitlab.com` будут обходить прокси. - -```xml - - clickhouse.cloud,.gitlab.com - - http://proxy1 - http://proxy2:3128 - - - http://proxy1:3128 - - -``` - - -## disk_connections_soft_limit {#disk_connections_soft_limit} - -Подключения, превышающие этот предел, имеют значительно более короткий срок жизни. Ограничение применяется к соединениям с дисками. - - - -## disk_connections_store_limit {#disk_connections_store_limit} - -Соединения сверх этого лимита сбрасываются после использования. Установите 0, чтобы отключить кэш соединений. Лимит применяется к соединениям с дисками. - - - -## disk_connections_warn_limit {#disk_connections_warn_limit} - -Предупреждающие сообщения записываются в журнал, если количество активных соединений превышает это значение. Ограничение применяется к соединениям с дисками. - - - -## display_secrets_in_show_and_select {#display_secrets_in_show_and_select} - - -Включает или отключает отображение секретов в запросах `SHOW` и `SELECT` для таблиц, баз данных, табличных функций и словарей. - -Пользователь, который хочет видеть секреты, также должен включить -параметр формата [`format_display_secrets_in_show_and_select`](../settings/formats#format_display_secrets_in_show_and_select) -и иметь привилегию -[`displaySecretsInShowAndSelect`](/sql-reference/statements/grant#displaysecretsinshowandselect). - -Возможные значения: - -- `0` — Отключено. -- `1` — Включено. - - - - -## distributed_cache_apply_throttling_settings_from_client {#distributed_cache_apply_throttling_settings_from_client} - -Определяет, должен ли сервер кэша применять переданные клиентом настройки троттлинга. - - - -## distributed_cache_keep_up_free_connections_ratio {#distributed_cache_keep_up_free_connections_ratio} - -Мягкое ограничение на количество активных соединений, которые распределённый кэш подключений будет стараться держать свободными. Когда число свободных подключений опускается ниже значения distributed_cache_keep_up_free_connections_ratio * max_connections, соединения с самой давней активностью будут закрываться до тех пор, пока число свободных подключений снова не превысит этот порог. - - - -## distributed_ddl - -Управление выполнением [распределённых DDL-запросов](../../sql-reference/distributed-ddl.md) (`CREATE`, `DROP`, `ALTER`, `RENAME`) в кластере. -Работает только в том случае, если включён [ZooKeeper](/operations/server-configuration-parameters/settings#zookeeper). - -Настраиваемые параметры в `` включают: - -| Setting | Description | Default Value | -| ---------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------- | -| `path` | путь в Keeper для `task_queue` DDL-запросов | | -| `profile` | профиль, используемый для выполнения DDL-запросов | | -| `pool_size` | сколько запросов `ON CLUSTER` может выполняться одновременно | | -| `max_tasks_in_queue` | максимальное количество задач, которые могут находиться в очереди | `1,000` | -| `task_max_lifetime` | удалять узел, если его возраст больше этого значения | `7 * 24 * 60 * 60` (неделя в секундах) | -| `cleanup_delay_period` | очистка начинается после получения события о новом узле, если последняя очистка выполнялась не ранее, чем `cleanup_delay_period` секунд назад | `60` секунд | - -**Пример** - -```xml - - - /clickhouse/task_queue/ddl - - - default - - - 1 - - - - - 604800 - - - 60 - - - 1000 - -``` - - -## distributed_ddl_use_initial_user_and_roles {#distributed_ddl_use_initial_user_and_roles} - -Если параметр включён, запросы ON CLUSTER будут сохранять и использовать пользователя — инициатора запроса — и его роли для выполнения на удалённых шардах. Это обеспечивает единый контроль доступа во всём кластере, но требует, чтобы этот пользователь и его роли существовали на всех узлах. - - - -## dns_allow_resolve_names_to_ipv4 {#dns_allow_resolve_names_to_ipv4} - -Разрешает преобразовывать доменные имена в IPv4-адреса. - - - -## dns_allow_resolve_names_to_ipv6 {#dns_allow_resolve_names_to_ipv6} - -Разрешает сопоставление имён с IPv6-адресами. - - - -## dns_cache_max_entries {#dns_cache_max_entries} - -Максимальное количество записей во внутреннем DNS-кэше. - - - -## dns_cache_update_period {#dns_cache_update_period} - -Период обновления внутреннего DNS-кэша в секундах. - - - -## dns_max_consecutive_failures {#dns_max_consecutive_failures} - -Максимальное число подряд неудачных попыток DNS-разрешения имени хоста, после которого это имя удаляется из DNS-кэша ClickHouse. - - - -## drop_distributed_cache_pool_size {#drop_distributed_cache_pool_size} - -Размер пула потоков, используемого для очистки распределённого кэша. - - - -## drop_distributed_cache_queue_size {#drop_distributed_cache_queue_size} - -Размер очереди пула потоков, используемого при удалении распределённого кэша. - - - -## enable_azure_sdk_logging {#enable_azure_sdk_logging} - -Включает логирование SDK Azure - - - -## encryption - -Настраивает команду для получения ключа, который будет использоваться [кодеками шифрования](/sql-reference/statements/create/table#encryption-codecs). Ключ (или ключи) должен быть указан в переменных окружения или в конфигурационном файле. - -Ключи могут задаваться в виде шестнадцатеричных значений или строк длиной 16 байт. - -**Пример** - -Загрузка из конфигурационного файла: - -```xml - - - 1234567812345678 - - -``` - -:::note -Хранение ключей в конфигурационном файле не рекомендуется. Это небезопасно. Вы можете перенести ключи в отдельный конфигурационный файл на защищённом диске и поместить символическую ссылку на этот конфигурационный файл в каталог `config.d/`. -::: - -Загрузка из конфигурации, когда ключ задан в шестнадцатеричном формате: - -```xml - - - 00112233445566778899aabbccddeeff - - -``` - -Загрузка ключа из переменной окружения: - -```xml - - - - - -``` - -Здесь `current_key_id` задаёт текущий ключ для шифрования, а все указанные ключи могут использоваться для расшифровки. - -Каждый из этих методов может быть использован с несколькими ключами: - -```xml - - - 00112233445566778899aabbccddeeff - - 1 - - -``` - -Здесь `current_key_id` указывает текущий ключ для шифрования. - -Кроме того, пользователи могут задать nonce длиной 12 байт (по умолчанию при шифровании и расшифровке используется nonce, состоящий из нулевых байт): - -```xml - - - 012345678910 - - -``` - -Или его можно указать в шестнадцатеричном виде: - -```xml - - - abcdefabcdef - - -``` - -:::note -Все, что было сказано выше, применимо и к `aes_256_gcm_siv` (но длина ключа должна составлять 32 байта). -::: - - -## error_log - -По умолчанию он отключен. - -**Включение** - -Чтобы вручную включить сбор истории ошибок [`system.error_log`](../../operations/system-tables/error_log.md), создайте файл `/etc/clickhouse-server/config.d/error_log.xml` со следующим содержимым: - -```xml - - - system - error_log
- 7500 - 1000 - 1048576 - 8192 - 524288 - false -
-
-``` - -**Отключение** - -Чтобы отключить параметр `error_log`, необходимо создать следующий файл `/etc/clickhouse-server/config.d/disable_error_log.xml` со следующим содержимым: - -```xml - - - -``` - - - - -## format_parsing_thread_pool_queue_size {#format_parsing_thread_pool_queue_size} - - -Максимальное количество заданий, которые могут быть поставлены в очередь пула потоков для разбора входных данных. - -:::note -Значение `0` означает отсутствие ограничения. -::: - - - - -## format_schema_path - -Путь к директории со схемами для входных данных, например для формата [CapnProto](/interfaces/formats/CapnProto). - -**Пример** - -```xml - -format_schemas/ -``` - - -## global_profiler_cpu_time_period_ns {#global_profiler_cpu_time_period_ns} - -Период таймера тактов CPU для глобального профилировщика (в наносекундах). Установите значение 0, чтобы отключить глобальный профилировщик тактов CPU. Рекомендуемое значение — не менее 10000000 (100 раз в секунду) для одиночных запросов или 1000000000 (один раз в секунду) для профилирования всего кластера. - - - -## global_profiler_real_time_period_ns {#global_profiler_real_time_period_ns} - -Период таймера реального времени глобального профайлера (в наносекундах). Установите значение 0, чтобы отключить глобальный профайлер реального времени. Рекомендуемое значение — не менее 10000000 (100 раз в секунду) для одиночных запросов или 1000000000 (один раз в секунду) для кластерного профилирования. - - - -## google_protos_path - -Задаёт каталог, содержащий proto‑файлы для типов Protobuf. - -Пример: - -```xml -/usr/share/clickhouse/protos/ -``` - - -## graphite - -Отправка данных в [Graphite](https://github.com/graphite-project). - -Настройки: - -* `host` – Сервер Graphite. -* `port` – Порт на сервере Graphite. -* `interval` – Интервал отправки, в секундах. -* `timeout` – Таймаут отправки данных, в секундах. -* `root_path` – Префикс для ключей. -* `metrics` – Отправка данных из таблицы [system.metrics](/operations/system-tables/metrics). -* `events` – Отправка дельта-данных, накопленных за период времени, из таблицы [system.events](/operations/system-tables/events). -* `events_cumulative` – Отправка кумулятивных данных из таблицы [system.events](/operations/system-tables/events). -* `asynchronous_metrics` – Отправка данных из таблицы [system.asynchronous_metrics](/operations/system-tables/asynchronous_metrics). - -Вы можете настроить несколько блоков ``. Например, это можно использовать для отправки разных данных с разными интервалами. - -**Пример** - -```xml - - localhost - 42000 - 0.1 - 60 - one_min - true - true - false - true - -``` - - -## graphite_rollup - -Настройки прореживания данных для Graphite. - -Для получения дополнительной информации см. [GraphiteMergeTree](../../engines/table-engines/mergetree-family/graphitemergetree.md). - -**Пример** - -```xml - - - max - - 0 - 60 - - - 3600 - 300 - - - 86400 - 3600 - - - -``` - - -## hsts_max_age - -Срок действия HSTS в секундах. - -:::note -Значение `0` означает, что ClickHouse отключает HSTS. Если задать положительное число, HSTS будет включён, а max-age будет равен этому числу. -::: - -**Пример** - -```xml -600000 -``` - - -## http_connections_soft_limit {#http_connections_soft_limit} - -Соединения, превышающие этот предел, имеют значительно более короткое время жизни. Ограничение применяется к HTTP‑соединениям, которые не привязаны ни к какому диску или хранилищу. - - - -## http_connections_store_limit {#http_connections_store_limit} - -Соединения сверх этого лимита сбрасываются после использования. Установите значение 0, чтобы отключить кеш соединений. Лимит применяется к HTTP‑соединениям, не привязанным ни к какому диску или хранилищу. - - - -## http_connections_warn_limit {#http_connections_warn_limit} - -Предупреждающие сообщения записываются в логи, если число активных соединений превышает этот порог. Порог применяется к HTTP-соединениям, которые не относятся ни к какому диску или хранилищу. - - - -## http_handlers - -Позволяет использовать пользовательские HTTP-обработчики. -Чтобы добавить новый http-обработчик, просто добавьте новый ``. -Правила проверяются сверху вниз в указанном порядке, -и при первом совпадении будет запущен соответствующий обработчик. - -Следующие настройки могут быть настроены с помощью подтегов: - -| Sub-tags | Definition | -| -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `url` | Для сопоставления URL запроса можно использовать префикс 'regex:' для сопоставления с помощью регулярного выражения (необязательно) | -| `methods` | Для сопоставления методов запроса можно использовать разделение запятыми для указания нескольких методов (необязательно) | -| `headers` | Для сопоставления заголовков запроса нужно сопоставить каждый дочерний элемент (имя дочернего элемента — это имя заголовка); можно использовать префикс 'regex:' для сопоставления по регулярному выражению (необязательно) | -| `handler` | Обработчик запроса | -| `empty_query_string` | Проверяет, что в URL отсутствует строка запроса (query string) | - -`handler` содержит следующие настройки, которые могут быть настроены с помощью подтегов: - -| Sub-tags | Definition | -| ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `url` | Адрес для перенаправления | -| `type` | Поддерживаемые типы: static, dynamic_query_handler, predefined_query_handler, redirect | -| `status` | Используется с типом static, код статуса ответа | -| `query_param_name` | Используется с типом dynamic_query_handler, извлекает и выполняет значение, соответствующее значению `` в параметрах HTTP-запроса | -| `query` | Используется с типом predefined_query_handler, выполняет запрос при вызове обработчика | -| `content_type` | Используется с типом static, тип содержимого ответа | -| `response_content` | Используется с типом static, содержимое ответа, отправляемое клиенту; при использовании префикса 'file://' или 'config://' содержимое берётся из файла или конфигурации и отправляется клиенту | - -Помимо списка правил, вы можете указать ``, чтобы включить все обработчики по умолчанию. - -Пример: - -```xml - - - / - POST,GET - no-cache - - dynamic_query_handler - query - - - - - /predefined_query - POST,GET - - predefined_query_handler - SELECT * FROM system.settings - - - - - - static - 200 - text/plain; charset=UTF-8 - config://http_server_default_response - - - -``` - - -## http_options_response - -Используется для добавления заголовков к ответу на HTTP-запрос `OPTIONS`. -Метод `OPTIONS` используется при выполнении предварительных (preflight) CORS-запросов. - -Дополнительные сведения см. в разделе [OPTIONS](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/OPTIONS). - -Пример: - -```xml - -
- Access-Control-Allow-Origin - * -
-
- Access-Control-Allow-Headers - origin, x-requested-with, x-clickhouse-format, x-clickhouse-user, x-clickhouse-key, Authorization -
-
- Access-Control-Allow-Methods - POST, GET, OPTIONS -
-
- Access-Control-Max-Age - 86400 -
-
-``` - - -## http_server_default_response - -Страница, которая по умолчанию отображается при обращении к HTTP(S)-серверу ClickHouse. -Значение по умолчанию — «Ok.» (с символом перевода строки в конце) - -**Пример** - -Открывает `https://tabix.io/` при обращении к `http://localhost:http_port`. - -```xml - -
]]> -
-``` - - -## iceberg_catalog_threadpool_pool_size {#iceberg_catalog_threadpool_pool_size} - -Размер фонового пула потоков для каталога Iceberg - - - -## iceberg_catalog_threadpool_queue_size {#iceberg_catalog_threadpool_queue_size} - -Количество задач, которые можно добавить в очередь пула каталога Iceberg - - - -## iceberg_metadata_files_cache_max_entries {#iceberg_metadata_files_cache_max_entries} - -Максимальный размер кэша файлов метаданных Iceberg в элементах. Значение 0 отключает кэш. - - - -## iceberg_metadata_files_cache_policy {#iceberg_metadata_files_cache_policy} - -Название политики кэширования метаданных Iceberg. - - - -## iceberg_metadata_files_cache_size {#iceberg_metadata_files_cache_size} - -Максимальный размер кэша метаданных Iceberg в байтах. Ноль отключает кэш. - - - -## iceberg_metadata_files_cache_size_ratio {#iceberg_metadata_files_cache_size_ratio} - -Размер защищённой очереди (в случае политики SLRU) в кэше метаданных Iceberg по отношению к общему размеру кэша. - - - -## ignore_empty_sql_security_in_create_view_query {#ignore_empty_sql_security_in_create_view_query} - - -Если значение равно `true`, ClickHouse не записывает значения по умолчанию для пустого оператора `SQL SECURITY` в запросах `CREATE VIEW`. - -:::note -Эта настройка требуется только на период миграции и станет устаревшей в версии 24.4. -::: - - - - -## include_from - -Путь к файлу с подстановками. Поддерживаются форматы XML и YAML. - -Для получения дополнительной информации см. раздел «[Файлы конфигурации](/operations/configuration-files)». - -**Пример** - -```xml -/etc/metrica.xml -``` - - -## index_mark_cache_policy {#index_mark_cache_policy} - -Имя политики кэша меток вторичных индексов. - - - -## index_mark_cache_size {#index_mark_cache_size} - - -Максимальный размер кэша для меток индексов. - -:::note - -Значение `0` означает, что кэш отключен. - -Этот параметр можно изменять во время работы и изменения вступят в силу немедленно. -::: - - - - -## index_mark_cache_size_ratio {#index_mark_cache_size_ratio} - -Размер защищённой очереди (в случае политики SLRU) во вторичном кэше меток индекса относительно общего размера кэша. - - - -## index_uncompressed_cache_policy {#index_uncompressed_cache_policy} - -Название политики кэширования несжатых вторичных индексов. - - - -## index_uncompressed_cache_size {#index_uncompressed_cache_size} - - -Максимальный размер кэша для несжатых блоков индексов `MergeTree`. - -:::note -Значение `0` означает, что кэш отключен. - -Эту настройку можно изменить во время работы сервера, и изменения вступят в силу немедленно. -::: - - - - -## index_uncompressed_cache_size_ratio {#index_uncompressed_cache_size_ratio} - -Размер защищённой очереди (в случае политики SLRU) в кэше несжатых данных вторичного индекса по отношению к общему размеру кэша. - - - -## interserver_http_credentials - -Имя пользователя и пароль, используемые для подключения к другим серверам во время [репликации](../../engines/table-engines/mergetree-family/replication.md). Кроме того, сервер аутентифицирует другие реплики, используя эти учетные данные. -Поэтому `interserver_http_credentials` должны быть одинаковыми для всех реплик в кластере. - -:::note - -* По умолчанию, если секция `interserver_http_credentials` опущена, аутентификация при репликации не используется. -* Настройки `interserver_http_credentials` не относятся к [конфигурации](../../interfaces/cli.md#configuration_files) учетных данных клиента ClickHouse. -* Эти учетные данные общие для репликации по `HTTP` и `HTTPS`. - ::: - -Следующие настройки могут быть заданы с помощью подтегов: - -* `user` — имя пользователя. -* `password` — пароль. -* `allow_empty` — если `true`, другим репликам разрешено подключаться без аутентификации, даже если заданы учетные данные. Если `false`, подключения без аутентификации отклоняются. Значение по умолчанию: `false`. -* `old` — содержит старые `user` и `password`, используемые при ротации учетных данных. Может быть указано несколько секций `old`. - -**Ротация учетных данных** - -ClickHouse поддерживает динамическую ротацию межсерверных учетных данных без одновременной остановки всех реплик для обновления их конфигурации. Учетные данные можно менять в несколько шагов. - -Чтобы включить аутентификацию, установите для `interserver_http_credentials.allow_empty` значение `true` и добавьте учетные данные. Это позволит устанавливать подключения как с аутентификацией, так и без нее. - -```xml - - admin - 111 - true - -``` - -После настройки всех реплик установите для параметра `allow_empty` значение `false` или удалите его. Это сделает аутентификацию с использованием новых учетных данных обязательной. - -Чтобы изменить существующие учетные данные, перенесите имя пользователя и пароль в раздел `interserver_http_credentials.old` и задайте для `user` и `password` новые значения. На этом этапе сервер использует новые учетные данные для подключения к другим репликам и принимает подключения как с новыми, так и со старыми учетными данными. - -```xml - - admin - 222 - - admin - 111 - - - temp - 000 - - -``` - -После применения новых учетных данных ко всем репликам старые учетные данные можно удалить. - - -## interserver_http_host - -Имя хоста, которое другие серверы могут использовать для доступа к этому серверу. - -Если параметр не задан, значение определяется так же, как в команде `hostname -f`. - -Полезно для отвязки от конкретного сетевого интерфейса. - -**Пример** - -```xml -example.clickhouse.com -``` - - -## interserver_http_port - -Порт для обмена данными между серверами ClickHouse. - -**Пример** - -```xml -9009 -``` - - -## interserver_https_host - -Аналогично [`interserver_http_host`](#interserver_http_host), за исключением того, что это имя хоста может использоваться другими серверами для доступа к этому серверу по `HTTPS`. - -**Пример** - -```xml -example.clickhouse.com -``` - - -## interserver_https_port - -Порт для обмена данными между серверами ClickHouse по `HTTPS`. - -**Пример** - -```xml -9010 -``` - - -## interserver_listen_host - -Ограничение на хосты, которые могут участвовать в обмене данными между серверами ClickHouse. -Если используется Keeper, то то же ограничение будет действовать для взаимодействия между разными экземплярами Keeper. - -:::note -По умолчанию значение совпадает с настройкой [`listen_host`](#listen_host). -::: - -**Пример** - -```xml -::ffff:a00:1 -10.0.0.1 -``` - -Тип: - -По умолчанию: - - -## io_thread_pool_queue_size {#io_thread_pool_queue_size} - - -Максимальное количество задач, которые могут быть поставлены в очередь на выполнение в пуле потоков ввода-вывода. - -:::note -Значение `0` означает отсутствие ограничения. -::: - - - - -## jemalloc_collect_global_profile_samples_in_trace_log {#jemalloc_collect_global_profile_samples_in_trace_log} - -Сохранять выборочно отобранные выделения памяти jemalloc в system.trace_log - - - -## jemalloc_enable_background_threads {#jemalloc_enable_background_threads} - -Включает фоновые потоки jemalloc. Jemalloc использует фоновые потоки для очистки неиспользуемых страниц памяти. Отключение этой настройки может привести к снижению производительности. - - - -## jemalloc_enable_global_profiler {#jemalloc_enable_global_profiler} - -Включает профилировщик выделений jemalloc для всех потоков. Jemalloc будет выборочно собирать образцы выделений и все операции освобождения для выделений, попавших в выборку. -Профили можно сбрасывать с помощью SYSTEM JEMALLOC FLUSH PROFILE, что можно использовать для анализа выделений. -Образцы также могут сохраняться в system.trace_log с помощью конфигурационной настройки jemalloc_collect_global_profile_samples_in_trace_log или параметра запроса jemalloc_collect_profile_samples_in_trace_log. -См. [Профилирование выделений](/operations/allocation-profiling) - - - -## jemalloc_flush_profile_interval_bytes {#jemalloc_flush_profile_interval_bytes} - -Сброс профиля jemalloc будет выполняться после того, как глобальное пиковое потребление памяти увеличится на значение jemalloc_flush_profile_interval_bytes. - - - -## jemalloc_flush_profile_on_memory_exceeded {#jemalloc_flush_profile_on_memory_exceeded} - -Сброс профиля jemalloc будет выполняться при ошибках из-за превышения общего объёма памяти - - - -## jemalloc_max_background_threads_num {#jemalloc_max_background_threads_num} - -Максимальное количество фоновых потоков jemalloc; установите 0, чтобы использовать значение jemalloc по умолчанию - - - -## keep_alive_timeout - - - -Количество секунд, в течение которых ClickHouse ожидает входящие запросы по протоколу HTTP перед закрытием соединения. - -**Пример** - -```xml -10 -``` - - -## keeper_hosts {#keeper_hosts} - -Динамическая настройка. Содержит список хостов [Zoo]Keeper, к которым ClickHouse потенциально может подключаться. Не отображает информацию из ``. - - - -## keeper_multiread_batch_size {#keeper_multiread_batch_size} - - -Максимальный размер пакета для запроса MultiRead к [Zoo]Keeper с поддержкой пакетной обработки. Если установлено значение 0, пакетная обработка отключена. Доступно только в ClickHouse Cloud. - - - - -## ldap_servers {#ldap_servers} - -Перечислите здесь LDAP‑серверы с их параметрами подключения, чтобы: -- использовать их как аутентификаторы для выделенных локальных пользователей, у которых в качестве механизма аутентификации указано `ldap` вместо `password` -- использовать их как удалённые каталоги пользователей. - -Следующие настройки могут быть заданы с помощью под‑тегов: - -| Setting | Description | -|--------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `host` | Имя хоста или IP‑адрес LDAP‑сервера; этот параметр является обязательным и не может быть пустым. | -| `port` | Порт LDAP‑сервера, по умолчанию `636`, если `enable_tls` установлен в `true`, иначе — `389`. | -| `bind_dn` | Шаблон, используемый для построения DN, к которому выполняется привязка (bind). Итоговый DN формируется путём замены всех подстрок `\{user_name\}` в шаблоне фактическим именем пользователя при каждой попытке аутентификации. | -| `user_dn_detection` | Раздел с параметрами LDAP‑поиска для определения фактического пользовательского DN привязанного пользователя. В основном используется в фильтрах поиска для последующего сопоставления ролей, когда сервер — Active Directory. Полученный пользовательский DN будет использоваться при замене подстрок `\{user_dn\}` везде, где это разрешено. По умолчанию пользовательский DN равен bind DN, но после выполнения поиска он будет обновлён до фактически обнаруженного значения DN пользователя. | -| `verification_cooldown` | Период времени в секундах после успешной попытки bind, в течение которого предполагается, что пользователь успешно аутентифицирован для всех последующих запросов без обращения к LDAP‑серверу. Укажите `0` (значение по умолчанию), чтобы отключить кэширование и принудительно обращаться к LDAP‑серверу для каждого запроса аутентификации. | -| `enable_tls` | Флаг для использования защищённого соединения с LDAP‑сервером. Укажите `no` для незашифрованного протокола (`ldap://`) (не рекомендуется). Укажите `yes` для LDAP поверх SSL/TLS (`ldaps://`) (рекомендуется, значение по умолчанию). Укажите `starttls` для устаревшего протокола StartTLS (незашифрованный протокол `ldap://`, обновляемый до TLS). | -| `tls_minimum_protocol_version` | Минимальная версия протокола SSL/TLS. Допустимые значения: `ssl2`, `ssl3`, `tls1.0`, `tls1.1`, `tls1.2` (значение по умолчанию). | -| `tls_require_cert` | Поведение проверки сертификата SSL/TLS удалённого узла (peer). Допустимые значения: `never`, `allow`, `try`, `demand` (значение по умолчанию). | -| `tls_cert_file` | Путь к файлу сертификата. | -| `tls_key_file` | Путь к файлу с ключом сертификата. | -| `tls_ca_cert_file` | Путь к файлу сертификата ЦС. | -| `tls_ca_cert_dir` | Путь к каталогу, содержащему сертификаты ЦС. | -| `tls_cipher_suite` | Разрешённый набор шифров (в нотации OpenSSL). | - -Настройка `user_dn_detection` может быть задана с помощью под‑тегов: - -| Setting | Description | -|-----------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `base_dn` | Шаблон, используемый для построения базового DN для поиска в LDAP. Итоговый DN формируется путём замены всех подстрок `\{user_name\}` и `\{bind_dn\}` в шаблоне на фактическое имя пользователя и bind DN во время поиска в LDAP. | -| `scope` | Область поиска LDAP. Допустимые значения: `base`, `one_level`, `children`, `subtree` (значение по умолчанию). | -| `search_filter` | Шаблон, используемый для построения фильтра поиска для LDAP. Итоговый фильтр формируется путём замены всех подстрок `\{user_name\}`, `\{bind_dn\}` и `\{base_dn\}` в шаблоне на фактическое имя пользователя, bind DN и base DN во время поиска в LDAP. Обратите внимание, что специальные символы в XML должны быть корректно экранированы. | - -Пример: - - - -```xml - - localhost - 636 - uid={user_name},ou=users,dc=example,dc=com - 300 - yes - tls1.2 - demand - /path/to/tls_cert_file - /path/to/tls_key_file - /path/to/tls_ca_cert_file - /path/to/tls_ca_cert_dir - ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:AES256-GCM-SHA384 - -``` - -Пример (типичный экземпляр Active Directory с настроенным определением DN пользователя для последующего сопоставления ролей): - -```xml - - localhost - 389 - EXAMPLE\{user_name} - - CN=Users,DC=example,DC=com - (&(objectClass=user)(sAMAccountName={user_name})) - - no - -``` - - -## license_key {#license_key} - -Лицензионный ключ для ClickHouse Enterprise Edition - - - -## listen_backlog - -Очередь ожидания (размер очереди ожидающих подключений) для listen-сокета. Значение по умолчанию `4096` совпадает со значением для Linux [5.4+](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=19f92a030ca6d772ab44b22ee6a01378a8cb32d4)). - -Обычно это значение не требуется изменять, поскольку: - -* значение по умолчанию достаточно велико; -* для принятия клиентских подключений у сервера есть отдельный поток. - -Поэтому даже если значение `TcpExtListenOverflows` (из `nstat`) отлично от нуля и этот счётчик растёт для сервера ClickHouse, это не означает, что это значение нужно увеличивать, поскольку: - -* обычно, если `4096` недостаточно, это указывает на внутреннюю проблему масштабирования ClickHouse, поэтому лучше сообщить о проблеме; -* это не означает, что сервер сможет обрабатывать больше подключений позже (и даже если бы смог, к тому моменту клиенты уже могли завершить работу или отключиться). - -**Пример** - -```xml -4096 -``` - - -## listen_host - -Ограничение на хосты, с которых принимаются запросы. Если вы хотите, чтобы сервер отвечал на запросы со всех хостов, укажите `::`. - -Примеры: - -```xml -::1 -127.0.0.1 -``` - - -## listen_reuse_port - -Позволяет нескольким серверам прослушивать одну и ту же пару адрес:порт. Запросы будут направляться операционной системой на случайный сервер. Включение этого параметра не рекомендуется. - -**Пример** - -```xml -0 -``` - -Тип: - -Значение по умолчанию: - - -## listen_try - -Сервер не завершит работу, если сети IPv6 или IPv4 окажутся недоступны при попытке начать прослушивание. - -**Пример** - -```xml -0 -``` - - -## load_marks_threadpool_pool_size {#load_marks_threadpool_pool_size} - -Размер фонового пула потоков, используемого для загрузки меток - - - -## load_marks_threadpool_queue_size {#load_marks_threadpool_queue_size} - -Количество задач, которые можно добавить в пул предварительной выборки - - - -## logger {#logger} - -Расположение и формат сообщений журнала. - -**Ключи**: - -| Key | Description | -|------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `level` | Уровень логирования. Допустимые значения: `none` (отключить логирование), `fatal`, `critical`, `error`, `warning`, `notice`, `information`,`debug`, `trace`, `test` | -| `log` | Путь к файлу журнала. | -| `errorlog` | Путь к файлу журнала ошибок. | -| `size` | Политика ротации: максимальный размер файлов журнала в байтах. После превышения этого порога файл журнала переименовывается и архивируется, и создаётся новый файл журнала. | -| `count` | Политика ротации: максимальное количество архивных файлов журнала ClickHouse, которое может храниться. | -| `stream_compress` | Сжимать сообщения журнала с помощью LZ4. Установите `1` или `true` для включения. | -| `console` | Включить логирование в консоль. Установите `1` или `true` для включения. Значение по умолчанию — `1`, если ClickHouse не запущен в режиме демона, иначе `0`. | -| `console_log_level` | Уровень логирования для вывода в консоль. По умолчанию используется значение `level`. | -| `formatting.type` | Формат журнала для вывода в консоль. В настоящее время поддерживается только `json`. | -| `use_syslog` | Дополнительно перенаправлять вывод журнала в syslog. | -| `syslog_level` | Уровень логирования для вывода в syslog. | -| `async` | При значении `true` (по умолчанию) логирование выполняется асинхронно (один фоновый поток на каждый канал вывода). В противном случае логирование выполняется в потоке, который вызывает LOG. | -| `async_queue_max_size` | При использовании асинхронного логирования — максимальное количество сообщений, которое будет храниться в очереди в ожидании сброса. Лишние сообщения будут отброшены. | -| `startup_level` | Уровень при запуске используется для установки уровня корневого логгера при старте сервера. После запуска уровень логирования возвращается к значению настройки `level`. | -| `shutdown_level` | Уровень при завершении работы используется для установки уровня корневого логгера при остановке сервера. | - -**Спецификаторы формата журнала** - -Имена файлов в путях `log` и `errorLog` поддерживают приведённые ниже спецификаторы формата для результирующего имени файла (к части пути, соответствующей каталогу, они не применяются). - -Столбец `Example` показывает вывод для `2023-07-06 18:32:07`. - - - -| Спецификатор | Описание | Пример | -| ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------- | -| `%%` | Литерал % | `%` | -| `%n` | Символ новой строки | | -| `%t` | Символ горизонтальной табуляции | | -| `%Y` | Год в десятичном формате, например 2017 | `2023` | -| `%y` | Две последние цифры года в виде десятичного числа (диапазон [00, 99]) | `23` | -| `%C` | Первые две цифры года как десятичное число (диапазон [00, 99]) | `20` | -| `%G` | Четырёхзначный [год по ISO 8601, основанный на номере недели](https://en.wikipedia.org/wiki/ISO_8601#Week_dates), то есть год, содержащий указанную неделю. Обычно используется только с `%V` | `2023` | -| `%g` | Последние 2 цифры [годa по ISO 8601 на основе недель](https://en.wikipedia.org/wiki/ISO_8601#Week_dates), то есть года, который содержит указанную неделю. | `23` | -| `%b` | Сокращённое название месяца, например, Oct (зависит от локали) | `Июл` | -| `%h` | Синоним для %b | `июл` | -| `%B` | Полное название месяца, например «Октябрь» (зависит от локали) | `Июль` | -| `%m` | Месяц в десятичном виде (диапазон [01, 12]) | `07` | -| `%U` | Номер недели в году в виде десятичного числа (воскресенье — первый день недели) (диапазон [00,53]) | `27` | -| `%W` | Номер недели года в формате десятичного числа (понедельник — первый день недели) (диапазон [00,53]) | `27` | -| `%V` | Номер недели по ISO 8601 (в диапазоне [01,53]) | `27` | -| `%j` | День года как десятичное число (диапазон [001, 366]) | `187` | -| `%d` | День месяца в виде десятичного числа с ведущим нулём (диапазон [01,31]). Для однозначных чисел добавляется ведущий ноль. | `06` | -| `%e` | День месяца в виде десятичного числа, дополненного ведущим пробелом (диапазон [1,31]). Одноразрядному числу предшествует пробел. | `  6` | -| `%a` | Сокращённое название дня недели, например «Пт» (в зависимости от локали) | `Чт` | -| `%A` | Полное название дня недели, например пятница (в зависимости от локали) | `Четверг` | -| `%w` | День недели в виде целого числа, где воскресенье — 0 (диапазон [0–6]) | `4` | -| `%u` | День недели в виде десятичного числа, где понедельник — 1 (формат ISO 8601) (диапазон [1-7]) | `4` | -| `%H` | Час в виде десятичного числа, 24-часовой формат времени (диапазон [00–23]) | `18` | -| `%I` | Час как десятичное число, в 12-часовом формате (диапазон [01, 12]) | `06` | -| `%M` | Минута как десятичное число (диапазон [00, 59]) | `32` | -| `%S` | Секунда как десятичное число (в диапазоне [00,60]) | `07` | -| `%c` | Стандартная строка даты и времени, например, Sun Oct 17 04:41:13 2010 (зависящая от локали) | `Thu Jul 6 18:32:07 2023` | -| `%x` | Локализованный формат даты (зависит от локали) | `06.07.23` | -| `%X` | Формат времени с учётом локали, например 18:40:20 или 6:40:20 PM (зависит от локали) | `18:32:07` | -| `%D` | Краткий формат даты MM/DD/YY, эквивалентный %m/%d/%y | `06.07.23` | -| `%F` | Краткий формат даты YYYY-MM-DD, эквивалентен %Y-%m-%d | `2023-07-06` | -| `%r` | Локализованное время в 12‑часовом формате (зависит от настроек локали) | `18:32:07` | -| `%R` | Эквивалентно "%H:%M" | `18:32` | -| `%T` | Эквивалентно «%H:%M:%S» (формат времени ISO 8601) | `18:32:07` | -| `%p` | Локализованное обозначение формата a.m./p.m. (зависит от локали) | `PM` | -| `%z` | Смещение от UTC в формате ISO 8601 (например, -0430) или пустая строка, если информация о часовом поясе недоступна | `+0800` | -| `%Z` | Локализованное имя или аббревиатура часового пояса, либо пустая строка, если информация о часовом поясе недоступна | `Z AWST ` | - -**Пример** - -```xml - - trace - /var/log/clickhouse-server/clickhouse-server-%F-%T.log - /var/log/clickhouse-server/clickhouse-server-%F-%T.err.log - 1000M - 10 - true - -``` - -Чтобы выводить сообщения логов только в консоль: - -```xml - - information - true - -``` - -**Переопределения уровней для отдельных логгеров** - -Уровень логирования для отдельных логгеров можно переопределить. Например, чтобы отключить все сообщения логгеров «Backup» и «RBAC». - -```xml - - - - Backup - none - - - RBAC - none - - - -``` - -**syslog** - -Чтобы дополнительно отправлять сообщения журнала в syslog: - -```xml - - 1 - -
syslog.remote:10514
- myhost.local - LOG_LOCAL6 - syslog -
-
-``` - -Ключи для ``: - -| Key | Description | -| ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `address` | Адрес syslog в формате `host\[:port\]`. Если не указан, используется локальный демон. | -| `hostname` | Имя хоста, с которого отправляются логи (необязательный параметр). | -| `facility` | [Ключевое слово facility](https://en.wikipedia.org/wiki/Syslog#Facility) для syslog. Должно быть указано прописными буквами с префиксом «LOG_», например `LOG_USER`, `LOG_DAEMON`, `LOG_LOCAL3` и т.д. По умолчанию: `LOG_USER`, если указан `address`, иначе `LOG_DAEMON`. | -| `format` | Формат сообщения журнала. Возможные значения: `bsd` и `syslog`. | - -**Форматы логов** - -Вы можете указать формат логов, который будет выводиться в консольный лог. В настоящее время поддерживается только JSON. - -**Пример** - -Ниже приведён пример выходного JSON-лога: - -```json -{ - "date_time_utc": "2024-11-06T09:06:09Z", - "date_time": "1650918987.180175", - "thread_name": "#1", - "thread_id": "254545", - "level": "Trace", - "query_id": "", - "logger_name": "BaseDaemon", - "message": "Получен сигнал 2", - "source_file": "../base/daemon/BaseDaemon.cpp; virtual void SignalListener::run()", - "source_line": "192" -} -``` - -Чтобы включить логирование в формате JSON, используйте следующий фрагмент: - -```xml - - - json - - - - date_time - thread_name - thread_id - level - query_id - logger_name - message - source_file - source_line - - - -``` - -**Переименование ключей для JSON‑логов** - -Имена ключей можно изменять, изменяя значения тегов внутри тега ``. Например, чтобы переименовать `DATE_TIME` в `MY_DATE_TIME`, можно использовать `MY_DATE_TIME`. - -**Исключение ключей из JSON‑логов** - -Свойства лога можно исключать, закомментировав соответствующий тег. Например, если вы не хотите, чтобы в логе выводился `query_id`, вы можете закомментировать тег ``. - - -## macros - -Подстановки параметров для реплицируемых таблиц. - -Могут быть опущены, если реплицируемые таблицы не используются. - -Подробнее см. раздел [Создание реплицируемых таблиц](../../engines/table-engines/mergetree-family/replication.md#creating-replicated-tables). - -**Пример** - -```xml - -``` - - -## mark_cache_policy {#mark_cache_policy} - -Название политики кэша меток. - - - -## mark_cache_prewarm_ratio {#mark_cache_prewarm_ratio} - -Доля общего объема кэша меток, которую следует заполнить при предварительном прогреве. - - - -## mark_cache_size {#mark_cache_size} - - -Максимальный размер кэша меток (индекса семейства таблиц [`MergeTree`](/engines/table-engines/mergetree-family)). - -:::note -Этот параметр можно изменять во время работы, и изменения вступают в силу немедленно. -::: - - - - -## mark_cache_size_ratio {#mark_cache_size_ratio} - -Размер защищённой очереди (при политике SLRU) в кэше меток по отношению к общему размеру кэша. - - - -## max_active_parts_loading_thread_pool_size {#max_active_parts_loading_thread_pool_size} - -Количество потоков для загрузки активных частей данных (Active) при запуске. - - - -## max_authentication_methods_per_user {#max_authentication_methods_per_user} - - -Максимальное количество методов аутентификации, которые можно задать пользователю при создании или изменении. -Изменение этого параметра не влияет на существующих пользователей. Запросы CREATE/ALTER, связанные с аутентификацией, завершатся с ошибкой, если они превысят предел, указанный в этом параметре. -Запросы CREATE/ALTER, не связанные с аутентификацией, будут выполняться успешно. - -:::note -Значение `0` означает отсутствие ограничения. -::: - - - - -## max_backup_bandwidth_for_server {#max_backup_bandwidth_for_server} - -Максимальная скорость чтения в байтах в секунду для всех резервных копий на сервере. Ноль означает отсутствие ограничения. - - - -## max_backups_io_thread_pool_free_size {#max_backups_io_thread_pool_free_size} - -Если количество **простаивающих** потоков в пуле потоков ввода-вывода резервных копий (Backups IO Thread pool) превышает `max_backup_io_thread_pool_free_size`, ClickHouse освободит ресурсы, занятые этими потоками, и уменьшит размер пула. При необходимости потоки могут быть созданы вновь. - - - -## max_backups_io_thread_pool_size {#max_backups_io_thread_pool_size} - -ClickHouse использует потоки из пула потоков Backups IO для выполнения операций ввода-вывода при резервном копировании в S3. `max_backups_io_thread_pool_size` ограничивает максимальное количество потоков в этом пуле. - - - -## max_build_vector_similarity_index_thread_pool_size {#max_build_vector_similarity_index_thread_pool_size} - - -Максимальное количество потоков, используемых для построения векторных индексов. - -:::note -Значение `0` означает, что используются все ядра. -::: - - - - -## max_concurrent_insert_queries {#max_concurrent_insert_queries} - - -Ограничение на общее количество одновременно выполняющихся запросов INSERT. - -:::note - -Значение `0` (по умолчанию) означает отсутствие ограничений. - -Этот параметр можно изменять во время работы сервера, и изменения вступают в силу немедленно. Запросы, которые уже выполняются, останутся без изменений. -::: - - - - -## max_concurrent_queries {#max_concurrent_queries} - - -Ограничение на общее количество одновременно выполняемых запросов. Следует также учитывать ограничения на запросы `INSERT` и `SELECT`, а также максимальное количество запросов для пользователей. - -См. также: -- [`max_concurrent_insert_queries`](/operations/server-configuration-parameters/settings#max_concurrent_insert_queries) -- [`max_concurrent_select_queries`](/operations/server-configuration-parameters/settings#max_concurrent_select_queries) -- [`max_concurrent_queries_for_all_users`](/operations/settings/settings#max_concurrent_queries_for_all_users) - -:::note - -Значение `0` (по умолчанию) означает отсутствие ограничений. - -Этот параметр можно изменять во время работы сервера, и изменения вступают в силу немедленно. Уже выполняющиеся запросы не затрагиваются. -::: - - - - -## max_concurrent_select_queries {#max_concurrent_select_queries} - - -Ограничение на общее количество одновременно выполняемых запросов `SELECT`. - -:::note - -Значение `0` (по умолчанию) означает отсутствие ограничения. - -Эту настройку можно изменять во время работы сервера, и изменения вступают в силу немедленно. Уже выполняющиеся запросы останутся без изменений. -::: - - - - -## max_connections {#max_connections} - -Максимальное число подключений к серверу. - - - -## max_database_num_to_throw {#max_database_num_to_throw} - -Если количество баз данных превышает это значение, сервер сгенерирует исключение. 0 означает отсутствие ограничения. - - - -## max_database_num_to_warn - - - -Если количество подключенных баз данных превышает указанное значение, сервер ClickHouse добавит предупреждающие сообщения в таблицу `system.warnings`. - -**Пример** - -```xml -50 -``` - - -## max_database_replicated_create_table_thread_pool_size {#max_database_replicated_create_table_thread_pool_size} - -Количество потоков, используемых для создания таблиц при восстановлении реплики в DatabaseReplicated. Значение 0 означает, что количество потоков равно числу ядер. - - - -## max_dictionary_num_to_throw - - - -Если количество словарей превышает это значение, сервер выбросит исключение. - -Учитываются только таблицы для следующих движков баз данных: - -* Atomic -* Ordinary -* Replicated -* Lazy - -:::note -Значение `0` означает отсутствие ограничения. -::: - -**Пример** - -```xml -400 -``` - - -## max_dictionary_num_to_warn - - - -Если количество подключённых словарей превышает указанное значение, сервер ClickHouse добавляет предупреждения в таблицу `system.warnings`. - -**Пример** - -```xml -400 -``` - - -## max_distributed_cache_read_bandwidth_for_server {#max_distributed_cache_read_bandwidth_for_server} - -Максимальная суммарная скорость чтения из распределённого кэша на сервере в байтах в секунду. Ноль означает отсутствие ограничений. - - - -## max_distributed_cache_write_bandwidth_for_server {#max_distributed_cache_write_bandwidth_for_server} - -Максимальная суммарная скорость записи в распределённый кэш на сервере, в байтах в секунду. Ноль означает отсутствие ограничения. - - - -## max_entries_for_hash_table_stats {#max_entries_for_hash_table_stats} - -Сколько записей может содержать статистика хэш-таблицы, собираемая во время агрегации - - - -## max_fetch_partition_thread_pool_size {#max_fetch_partition_thread_pool_size} - -Количество потоков при выполнении ALTER TABLE FETCH PARTITION. - - - -## max_format_parsing_thread_pool_free_size {#max_format_parsing_thread_pool_free_size} - - -Максимальное количество простаивающих резервных потоков, которые необходимо поддерживать в пуле потоков для разбора входных данных. - - - - -## max_format_parsing_thread_pool_size {#max_format_parsing_thread_pool_size} - - -Максимальное суммарное число потоков, используемых для парсинга входных данных. - - - - -## max_io_thread_pool_free_size {#max_io_thread_pool_free_size} - - -Если количество **простаивающих** потоков в пуле потоков ввода-вывода превышает `max_io_thread_pool_free_size`, ClickHouse освобождает ресурсы, занятые простаивающими потоками, и уменьшает размер пула. При необходимости потоки могут быть созданы заново. - - - - -## max_io_thread_pool_size {#max_io_thread_pool_size} - - -ClickHouse использует потоки из пула потоков ввода-вывода (IO thread pool) для выполнения некоторых операций ввода-вывода (например, для взаимодействия с S3). `max_io_thread_pool_size` ограничивает максимальное количество потоков в этом пуле. - - - - -## max_keep_alive_requests - - - -Максимальное количество запросов по одному keep-alive-соединению до его закрытия сервером ClickHouse. - -**Пример** - -```xml -10 -``` - - -## max_local_read_bandwidth_for_server {#max_local_read_bandwidth_for_server} - - -Максимальная скорость локального чтения в байтах в секунду. - -:::note -Значение `0` означает отсутствие ограничения. -::: - - - - -## max_local_write_bandwidth_for_server {#max_local_write_bandwidth_for_server} - - -Максимальная скорость локальной записи, в байтах в секунду. - -:::note -Значение `0` означает отсутствие ограничения. -::: - - - - -## max_materialized_views_count_for_table {#max_materialized_views_count_for_table} - - -Ограничение на количество материализованных представлений, связанных с таблицей. - -:::note -Здесь учитываются только непосредственно зависящие представления; создание представлений поверх других представлений не учитывается. -::: - - - - -## max_merges_bandwidth_for_server {#max_merges_bandwidth_for_server} - -Максимальная скорость чтения всех операций слияния на сервере в байтах в секунду. Нулевое значение означает отсутствие ограничения. - - - -## max_mutations_bandwidth_for_server {#max_mutations_bandwidth_for_server} - -Максимальная скорость чтения данных для всех мутаций на сервере, в байтах в секунду. Ноль — без ограничений. - - - -## max_named_collection_num_to_throw - - - -Если количество именованных коллекций превышает это значение, сервер выдаст исключение. - -:::note -Значение `0` означает отсутствие ограничения. -::: - -**Пример** - -```xml -400 -``` - - -## max_named_collection_num_to_warn - - - -Если количество именованных коллекций превышает указанное значение, сервер ClickHouse добавит предупреждающие сообщения в таблицу `system.warnings`. - -**Пример** - -```xml -400 -``` - - -## max_open_files - -Максимальное количество открытых файлов. - -:::note -Мы рекомендуем использовать эту опцию на macOS, поскольку функция `getrlimit()` возвращает некорректное значение. -::: - -**Пример** - -```xml -262144 -``` - - -## max_os_cpu_wait_time_ratio_to_drop_connection {#max_os_cpu_wait_time_ratio_to_drop_connection} - - -Максимальное отношение между временем ожидания CPU в ОС (метрика OSCPUWaitMicroseconds) и временем занятости (метрика OSCPUVirtualTimeMicroseconds), при котором следует рассматривать разрыв соединений. Для вычисления вероятности используется линейная интерполяция между минимальным и максимальным значением этого отношения; в этой точке вероятность равна 1. -Подробнее см. раздел [Управление поведением при перегрузке CPU сервера](/operations/settings/server-overload). - - - - -## max_outdated_parts_loading_thread_pool_size {#max_outdated_parts_loading_thread_pool_size} - -Количество потоков в пуле для загрузки неактивного набора частей данных (устаревших частей) при запуске. - - - -## max_part_num_to_warn - - - -Если количество активных частей превышает указанное значение, сервер ClickHouse добавит предупреждающие сообщения в таблицу `system.warnings`. - -**Пример** - -```xml -400 -``` - - -## max_partition_size_to_drop - - - -Ограничение на удаление партиций. - -Если размер таблицы [MergeTree](../../engines/table-engines/mergetree-family/mergetree.md) превышает значение [`max_partition_size_to_drop`](#max_partition_size_to_drop) (в байтах), вы не можете удалить партицию с помощью запроса [DROP PARTITION](../../sql-reference/statements/alter/partition.md#drop-partitionpart). -Для применения этой настройки не требуется перезапуск сервера ClickHouse. Другой способ отключить это ограничение — создать файл `/flags/force_drop_table`. - -:::note -Значение `0` означает, что вы можете удалять партиции без каких-либо ограничений. - -Это ограничение не распространяется на операции DROP TABLE и TRUNCATE TABLE, см. [max_table_size_to_drop](/operations/settings/settings#max_table_size_to_drop). -::: - -**Пример** - -```xml -0 -``` - - -## max_parts_cleaning_thread_pool_size {#max_parts_cleaning_thread_pool_size} - -Количество потоков для параллельного удаления неактивных частей данных. - - - -## max_pending_mutations_execution_time_to_warn - - - -Если какая-либо из ожидающих выполнения мутаций превышает указанное значение (в секундах), сервер ClickHouse добавляет предупреждающие сообщения в таблицу `system.warnings`. - -**Пример** - -```xml -10000 -``` - - -## max_pending_mutations_to_warn - - - -Если количество ожидающих выполнения мутаций превышает указанное значение, сервер ClickHouse добавит предупреждающие сообщения в таблицу `system.warnings`. - -**Пример** - -```xml -400 -``` - - -## max_prefixes_deserialization_thread_pool_free_size {#max_prefixes_deserialization_thread_pool_free_size} - - -Если количество **простаивающих** потоков в пуле потоков десериализации префиксов превышает `max_prefixes_deserialization_thread_pool_free_size`, ClickHouse освободит ресурсы, занимаемые такими потоками, и уменьшит размер пула. При необходимости потоки могут быть созданы снова. - - - - -## max_prefixes_deserialization_thread_pool_size {#max_prefixes_deserialization_thread_pool_size} - - -ClickHouse использует потоки из пула потоков десериализации префиксов для параллельного чтения метаданных столбцов и подстолбцов из файловых префиксов в широких частях (Wide parts) таблиц MergeTree. `max_prefixes_deserialization_thread_pool_size` ограничивает максимальное количество потоков в этом пуле. - - - - -## max_remote_read_network_bandwidth_for_server {#max_remote_read_network_bandwidth_for_server} - - -Максимальная скорость сетевого обмена данными при чтении, в байтах в секунду. - -:::note -Значение `0` (по умолчанию) означает отсутствие ограничений. -::: - - - - -## max_remote_write_network_bandwidth_for_server {#max_remote_write_network_bandwidth_for_server} - - -Максимальная скорость обмена данными по сети для операций записи, в байтах в секунду. - -:::note -Значение `0` (по умолчанию) означает отсутствие ограничения. -::: - - - - -## max_replicated_fetches_network_bandwidth_for_server {#max_replicated_fetches_network_bandwidth_for_server} - -Максимальная скорость обмена данными по сети в байтах в секунду для репликационных загрузок. Ноль означает отсутствие ограничения. - - - -## max_replicated_sends_network_bandwidth_for_server {#max_replicated_sends_network_bandwidth_for_server} - -Максимальная скорость обмена данными по сети в байтах в секунду при отправке реплицированных данных. Ноль означает отсутствие ограничения. - - - -## max_replicated_table_num_to_throw - - - -Если количество реплицируемых таблиц превышает это значение, сервер сгенерирует исключение. - -Считаются только таблицы для движков баз данных: - -* Atomic -* Ordinary -* Replicated -* Lazy - -:::note -Значение `0` означает отсутствие ограничения. -::: - -**Пример** - -```xml -400 -``` - - -## max_server_memory_usage {#max_server_memory_usage} - - -Максимальный объём памяти, который серверу разрешено использовать, в байтах. - -:::note -Максимальное потребление памяти сервером дополнительно ограничивается настройкой `max_server_memory_usage_to_ram_ratio`. -::: - -В качестве особого случая значение `0` (по умолчанию) означает, что сервер может использовать всю доступную память (за исключением дополнительных ограничений, накладываемых `max_server_memory_usage_to_ram_ratio`). - - - - -## max_server_memory_usage_to_ram_ratio {#max_server_memory_usage_to_ram_ratio} - - -Максимальный объём оперативной памяти, который серверу разрешено использовать, выраженный в виде отношения ко всей доступной памяти. - -Например, значение `0.9` (по умолчанию) означает, что сервер может потреблять 90% доступной памяти. - -Позволяет снизить использование памяти на системах с небольшим объёмом ОЗУ. -На хостах с малым объёмом ОЗУ и пространства подкачки может понадобиться установить [`max_server_memory_usage_to_ram_ratio`](#max_server_memory_usage_to_ram_ratio) больше 1. - -:::note -Максимальное потребление памяти сервером дополнительно ограничивается настройкой `max_server_memory_usage`. -::: - - - - -## max_session_timeout - -Максимальное время жизни сессии в секундах. - -Пример: - -```xml -3600 -``` - - -## max_table_num_to_throw - - - -Если число таблиц превышает это значение, сервер сгенерирует исключение. - -Следующие типы таблиц не учитываются: - -* view -* remote -* dictionary -* system - -Считаются только таблицы для движков баз данных: - -* Atomic -* Ordinary -* Replicated -* Lazy - -:::note -Значение `0` означает отсутствие ограничения. -::: - -**Пример** - -```xml -400 -``` - - -## max_table_num_to_warn - - - -Если количество подключённых таблиц превышает указанное значение, сервер ClickHouse добавит предупреждения в таблицу `system.warnings`. - -**Пример** - -```xml -400 -``` - - -## max_table_size_to_drop - - - -Ограничение на удаление таблиц. - -Если размер таблицы [MergeTree](../../engines/table-engines/mergetree-family/mergetree.md) превышает значение `max_table_size_to_drop` (в байтах), вы не можете удалить её с помощью запросов [`DROP`](../../sql-reference/statements/drop.md) или [`TRUNCATE`](../../sql-reference/statements/truncate.md). - -:::note -Значение `0` означает, что вы можете удалять все таблицы без каких-либо ограничений. - -Для применения этого параметра не требуется перезапуск сервера ClickHouse. Другой способ снять это ограничение — создать файл `/flags/force_drop_table`. -::: - -**Пример** - -```xml -0 -``` - - -## max_temporary_data_on_disk_size {#max_temporary_data_on_disk_size} - - -Максимальный объем дискового пространства, который может быть использован для внешней агрегации, соединений или сортировки. -Запросы, которые превысят этот лимит, завершатся с ошибкой (будет выброшено исключение). - -:::note -Значение `0` означает отсутствие ограничения. -::: - -См. также: -- [`max_temporary_data_on_disk_size_for_user`](/operations/settings/settings#max_temporary_data_on_disk_size_for_user) -- [`max_temporary_data_on_disk_size_for_query`](/operations/settings/settings#max_temporary_data_on_disk_size_for_query) - - - - -## max_thread_pool_free_size - - - -Если количество **простаивающих** потоков в глобальном пуле потоков больше [`max_thread_pool_free_size`](/operations/server-configuration-parameters/settings#max_thread_pool_free_size), ClickHouse освобождает ресурсы, занятые некоторыми потоками, и размер пула уменьшается. При необходимости потоки могут быть созданы заново. - -**Пример** - -```xml -1200 -``` - - -## max_thread_pool_size - - - -ClickHouse использует потоки из глобального пула потоков (Global Thread Pool) для обработки запросов. Если для обработки запроса нет свободного потока, в пул добавляется новый поток. `max_thread_pool_size` ограничивает максимальное число потоков в пуле. - -**Пример** - -```xml -12000 -``` - - -## max_unexpected_parts_loading_thread_pool_size {#max_unexpected_parts_loading_thread_pool_size} - -Количество потоков для загрузки неактивного набора частей данных («неожиданных») при запуске. - - - -## max_view_num_to_throw - - - -Если количество представлений превышает это значение, сервер генерирует исключение. - -Учитываются только таблицы для движков баз данных: - -* Atomic -* Ordinary -* Replicated -* Lazy - -:::note -Значение `0` означает отсутствие ограничения. -::: - -**Пример** - -```xml -400 -``` - - -## max_view_num_to_warn - - - -Если число подключённых представлений превышает указанное значение, сервер ClickHouse добавит предупреждения в таблицу `system.warnings`. - -**Пример** - -```xml -400 -``` - - -## max_waiting_queries {#max_waiting_queries} - - -Лимит на общее число одновременно ожидающих выполнения запросов. -Выполнение ожидающего запроса блокируется, пока требуемые таблицы загружаются асинхронно (см. [`async_load_databases`](/operations/server-configuration-parameters/settings#async_load_databases). - -:::note -Ожидающие запросы не берутся в расчет при проверке ограничений, задаваемых следующими настройками: - -- [`max_concurrent_queries`](/operations/server-configuration-parameters/settings#max_concurrent_queries) -- [`max_concurrent_insert_queries`](/operations/server-configuration-parameters/settings#max_concurrent_insert_queries) -- [`max_concurrent_select_queries`](/operations/server-configuration-parameters/settings#max_concurrent_select_queries) -- [`max_concurrent_queries_for_user`](/operations/settings/settings#max_concurrent_queries_for_user) -- [`max_concurrent_queries_for_all_users`](/operations/settings/settings#max_concurrent_queries_for_all_users) - -Это сделано для того, чтобы избежать превышения этих лимитов сразу после запуска сервера. -::: - -:::note - -Значение `0` (по умолчанию) означает отсутствие ограничения. - -Эту настройку можно изменять во время работы сервера, и изменения вступают в силу немедленно. Уже выполняющиеся запросы не затрагиваются. -::: - - - - -## memory_worker_correct_memory_tracker {#memory_worker_correct_memory_tracker} - - -Определяет, должен ли фоновый обработчик памяти корректировать внутренний трекер памяти на основе данных из внешних источников, таких как jemalloc и cgroups. - - - - -## memory_worker_period_ms {#memory_worker_period_ms} - - -Период срабатывания фонового процесса управления памятью, который корректирует значения использования памяти в трекере памяти и очищает неиспользуемые страницы при высокой нагрузке на память. Если установлено значение 0, будет использовано значение по умолчанию в зависимости от источника потребления памяти. - - - - -## memory_worker_use_cgroup {#memory_worker_use_cgroup} - -Использовать информацию о текущем использовании памяти cgroup для корректировки учёта памяти. - - - -## merge_tree - -Параметры тонкой настройки таблиц на движке [MergeTree](../../engines/table-engines/mergetree-family/mergetree.md). - -Дополнительные сведения см. в заголовочном файле MergeTreeSettings.h. - -**Пример** - -```xml - - 5 - -``` - - -## merge_workload {#merge_workload} - - -Используется для регулирования того, как ресурсы используются и распределяются между операциями слияния и другими типами нагрузки. Указанное значение применяется как значение настройки `workload` для всех фоновых слияний. Может быть переопределено настройкой движка MergeTree. - -**См. также** -- [Планирование нагрузок](/operations/workload-scheduling.md) - - - - -## merges_mutations_memory_usage_soft_limit - - - -Устанавливает ограничение на объем оперативной памяти, который допускается использовать для выполнения операций слияния и мутаций. -Если ClickHouse достигает заданного лимита, он не будет планировать запуск новых фоновых операций слияния и мутаций, но продолжит выполнять уже запланированные задачи. - -:::note -Значение `0` означает отсутствие ограничений. -::: - -**Пример** - -```xml -0 -``` - - -## merges_mutations_memory_usage_to_ram_ratio {#merges_mutations_memory_usage_to_ram_ratio} - - -Значение параметра `merges_mutations_memory_usage_soft_limit` по умолчанию вычисляется как `memory_amount * merges_mutations_memory_usage_to_ram_ratio`. - -**См. также:** - -- [max_memory_usage](/operations/settings/settings#max_memory_usage) -- [merges_mutations_memory_usage_soft_limit](/operations/server-configuration-parameters/settings#merges_mutations_memory_usage_soft_limit) - - - - -## metric_log - -По умолчанию отключён. - -**Включение** - -Чтобы вручную включить сбор истории метрик [`system.metric_log`](../../operations/system-tables/metric_log.md), создайте файл `/etc/clickhouse-server/config.d/metric_log.xml` со следующим содержимым: - -```xml - - - system - metric_log
- 7500 - 1000 - 1048576 - 8192 - 524288 - false -
-
-``` - -**Отключение** - -Чтобы отключить параметр `metric_log`, необходимо создать файл `/etc/clickhouse-server/config.d/disable_metric_log.xml` со следующим содержимым: - -```xml - - - -``` - - - - -## min_os_cpu_wait_time_ratio_to_drop_connection {#min_os_cpu_wait_time_ratio_to_drop_connection} - - -Минимальное значение отношения между временем ожидания CPU в ОС (метрика OSCPUWaitMicroseconds) и временем занятости (метрика OSCPUVirtualTimeMicroseconds), при котором следует рассматривать возможность сброса соединений. Для вычисления вероятности используется линейная интерполяция между минимальным и максимальным значением отношения, при этом вероятность в этой точке равна 0. -Дополнительные сведения см. в разделе [Управление поведением при перегрузке CPU сервера](/operations/settings/server-overload). - - - - -## mlock_executable - -Выполняет `mlockall` после запуска, чтобы снизить задержку первых запросов и предотвратить выгрузку исполняемого файла ClickHouse в своп при высокой нагрузке на ввод-вывод. - -:::note -Включение этой опции рекомендуется, но приведёт к увеличению времени запуска на несколько секунд. -Имейте в виду, что этот параметр не будет работать без права «CAP_IPC_LOCK». -::: - -**Пример** - -```xml -false -``` - - -## mmap_cache_size {#mmap_cache_size} - - -Этот параметр позволяет избежать частых системных вызовов open/close (которые очень затратны из‑за последующих промахов по страницам памяти) и повторно использовать отображения из нескольких потоков и запросов. Значение настройки — это количество отображённых областей (обычно равно количеству отображённых файлов). - -Объём данных в отображённых файлах можно отслеживать в следующих системных таблицах по следующим метрикам: - -- `MMappedFiles`/`MMappedFileBytes`/`MMapCacheCells` в [`system.metrics`](/operations/system-tables/metrics), [`system.metric_log`](/operations/system-tables/metric_log) -- `CreatedReadBufferMMap`/`CreatedReadBufferMMapFailed`/`MMappedFileCacheHits`/`MMappedFileCacheMisses` в [`system.events`](/operations/system-tables/events), [`system.processes`](/operations/system-tables/processes), [`system.query_log`](/operations/system-tables/query_log), [`system.query_thread_log`](/operations/system-tables/query_thread_log), [`system.query_views_log`](/operations/system-tables/query_views_log) - -:::note -Объём данных в отображённых файлах не потребляет память напрямую и не учитывается в потреблении памяти запросом или сервером, поскольку эта память может быть освобождена подобно кэшу страниц ОС. Кэш сбрасывается (файлы закрываются) автоматически при удалении старых кусков в таблицах семейства MergeTree, также его можно сбросить вручную запросом `SYSTEM DROP MMAP CACHE`. - -Этот параметр может быть изменён во время работы и вступает в силу немедленно. -::: - - - - -## mutation_workload {#mutation_workload} - - -Используется для регулирования того, как ресурсы распределяются и совместно используются между мутациями и другими рабочими нагрузками. Указанное значение используется как значение настройки `workload` для всех фоновых мутаций. Может быть переопределено настройкой MergeTree. - -**См. также** -- [Планирование рабочей нагрузки](/operations/workload-scheduling.md) - - - - -## mysql_port - -Порт для взаимодействия с клиентами по протоколу MySQL. - -:::note - -* Положительные целые числа задают номер порта, на котором необходимо принимать подключения -* Пустые значения используются для отключения взаимодействия с клиентами по протоколу MySQL. - ::: - -**Пример** - -```xml -9004 -``` - - -## mysql_require_secure_transport {#mysql_require_secure_transport} - -Если установлено значение true, для взаимодействия с клиентами по [mysql_port](#mysql_port) требуется защищённое соединение. Подключения с параметром `--ssl-mode=none` будут отклонены. Используйте этот параметр совместно с настройками [OpenSSL](#openssl). - - - -## openSSL {#openssl} - -Конфигурация клиента и сервера SSL. - -Поддержка SSL обеспечивается библиотекой `libpoco`. Доступные параметры конфигурации описаны в [SSLManager.h](https://github.com/ClickHouse-Extras/poco/blob/master/NetSSL_OpenSSL/include/Poco/Net/SSLManager.h). Значения по умолчанию можно найти в [SSLManager.cpp](https://github.com/ClickHouse-Extras/poco/blob/master/NetSSL_OpenSSL/src/SSLManager.cpp). - -Ключи параметров конфигурации сервера и клиента: - - - -| Параметр | Описание | Значение по умолчанию | -| ----------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ | -| `privateKeyFile` | Путь к файлу с закрытым ключом PEM-сертификата. Файл может одновременно содержать и ключ, и сертификат. | | -| `certificateFile` | Путь к файлу клиентского/серверного сертификата в формате PEM. Можно не указывать, если `privateKeyFile` содержит сертификат. | | -| `caConfig` | Путь к файлу или каталогу, содержащему доверенные сертификаты центров сертификации (CA). Если путь указывает на файл, он должен быть в формате PEM и может содержать несколько сертификатов CA. Если путь указывает на каталог, в нём должен быть один файл .pem на каждый сертификат CA. Имена файлов определяются по хеш‑значению имени субъекта CA. Подробности см. на man‑странице [SSL_CTX_load_verify_locations](https://www.openssl.org/docs/man3.0/man3/SSL_CTX_load_verify_locations.html). | | -| `verificationMode` | Метод проверки сертификатов узла. Подробности см. в описании класса [Context](https://github.com/ClickHouse-Extras/poco/blob/master/NetSSL_OpenSSL/include/Poco/Net/Context.h). Возможные значения: `none`, `relaxed`, `strict`, `once`. | `relaxed` | -| `verificationDepth` | Максимальная длина цепочки проверки. Проверка завершится с ошибкой, если длина цепочки сертификатов превысит заданное значение. | `9` | -| `loadDefaultCAFile` | Будут ли использоваться встроенные CA-сертификаты для OpenSSL. ClickHouse предполагает, что встроенные CA-сертификаты находятся в файле `/etc/ssl/cert.pem` (соответственно, в каталоге `/etc/ssl/certs`) или в файле (соответственно, каталоге), указанном в переменной окружения `SSL_CERT_FILE` (соответственно, `SSL_CERT_DIR`). | `true` | -| `cipherList` | Поддерживаемые шифры OpenSSL. | `ALL:!ADH:!LOW:!EXP:!MD5:!3DES:@STRENGTH` | -| `cacheSessions` | Включает или отключает кэширование сеансов. Необходимо использовать совместно с `sessionIdContext`. Допустимые значения: `true`, `false`. | `false` | -| `sessionIdContext` | Уникальная последовательность случайных символов, которую сервер добавляет к каждому сгенерированному идентификатору. Длина строки не должна превышать `SSL_MAX_SSL_SESSION_ID_LENGTH`. Указывать этот параметр настоятельно рекомендуется, поскольку он помогает избежать проблем как при кэшировании сеанса на стороне сервера, так и при запросе кэширования со стороны клиента. | `$\{application.name\}` | -| `sessionCacheSize` | Максимальное количество сеансов, которые сервер кэширует. Значение `0` означает неограниченное число сеансов. | [1024*20](https://github.com/ClickHouse/boringssl/blob/master/include/openssl/ssl.h#L1978) | -| `sessionTimeout` | Время хранения сеанса в кэше на сервере (в часах). | `2` | -| `extendedVerification` | Если параметр включён, убедитесь, что CN или SAN в сертификате совпадает с именем хоста удалённого узла. | `false` | -| `requireTLSv1` | Требовать соединение по TLSv1. Допустимые значения: `true`, `false`. | `false` | -| `requireTLSv1_1` | Требовать соединение по TLSv1.1. Допустимые значения: `true`, `false`. | `false` | -| `requireTLSv1_2` | Требовать подключение по TLSv1.2. Допустимые значения: `true`, `false`. | `false` | -| `fips` | Включает режим FIPS в OpenSSL. Поддерживается, если используемая версия библиотеки OpenSSL поддерживает FIPS. | `false` | -| `privateKeyPassphraseHandler` | Класс (подкласс PrivateKeyPassphraseHandler), который запрашивает парольную фразу для доступа к закрытому ключу. Например: ``, `KeyFileHandler`, `test`, ``. | `KeyConsoleHandler` | -| `invalidCertificateHandler` | Класс (подкласс CertificateHandler) для обработки недействительных сертификатов. Например: ` RejectCertificateHandler `. | `RejectCertificateHandler` | -| `disableProtocols` | Протоколы, использование которых запрещено. | | -| `preferServerCiphers` | Серверные наборы шифров, предпочитаемые клиентом. | `false` | - -**Пример конфигурации:** - -```xml - - - - /etc/clickhouse-server/server.crt - /etc/clickhouse-server/server.key - - /etc/clickhouse-server/dhparam.pem - none - true - true - sslv2,sslv3 - true - - - true - true - sslv2,sslv3 - true - - - - RejectCertificateHandler - - - -``` - - -## opentelemetry_span_log - -Настройки для системной таблицы [`opentelemetry_span_log`](../system-tables/opentelemetry_span_log.md). - - - -Пример: - -```xml - - - engine MergeTree - partition by toYYYYMM(finish_date) - order by (finish_date, finish_time_us, trace_id) - - system - opentelemetry_span_log
- 7500 - 1048576 - 8192 - 524288 - false -
-``` - - -## os_cpu_busy_time_threshold {#os_cpu_busy_time_threshold} - -Порог занятости CPU ОС в микросекундах (метрика OSCPUVirtualTimeMicroseconds), начиная с которого считается, что CPU выполняет полезную работу; перегрузка CPU не будет учитываться, если занятость была ниже этого значения. - - - -## os_threads_nice_value_distributed_cache_tcp_handler {#os_threads_nice_value_distributed_cache_tcp_handler} - - -Значение `nice` в Linux для потоков обработчика TCP распределённого кэша. Чем меньше значение, тем выше приоритет по использованию CPU. - -Требуется capability CAP_SYS_NICE, в противном случае параметр не оказывает эффекта. - -Возможные значения: от -20 до 19. - - - - -## os_threads_nice_value_merge_mutate {#os_threads_nice_value_merge_mutate} - - -Значение `nice` в Linux для потоков слияния и мутаций. Более низкие значения означают более высокий приоритет использования CPU. - -Требует способности CAP_SYS_NICE, в противном случае параметр не применяется. - -Возможные значения: от -20 до 19. - - - - -## os_threads_nice_value_zookeeper_client_send_receive {#os_threads_nice_value_zookeeper_client_send_receive} - - -Значение nice в Linux для потоков отправки и получения в клиенте ZooKeeper. Меньшие значения означают более высокий приоритет использования CPU. - -Требуется capability CAP_SYS_NICE, иначе параметр не действует. - -Возможные значения: от -20 до 19. - - - - -## page_cache_free_memory_ratio {#page_cache_free_memory_ratio} - -Доля предельного объёма памяти, которую следует держать свободной от пользовательского кэша страниц. Аналогично настройке Linux min_free_kbytes. - - - -## page_cache_history_window_ms {#page_cache_history_window_ms} - -Задержка перед тем, как освобождённая память может быть повторно использована кэшем страниц в пользовательском пространстве. - - - -## page_cache_max_size {#page_cache_max_size} - -Максимальный размер кэша страниц в пользовательском пространстве. Установите значение 0, чтобы отключить кэш. Если это значение больше page_cache_min_size, размер кэша будет динамически подстраиваться в этих пределах, чтобы использовать основную часть доступной памяти, при этом удерживая общее потребление памяти ниже лимита (max_server_memory_usage[_to_ram_ratio]). - - - -## page_cache_min_size {#page_cache_min_size} - -Минимальный размер кэша страниц в пространстве пользователя. - - - -## page_cache_policy {#page_cache_policy} - -Имя политики кэширования страниц в пространстве пользователя. - - - -## page_cache_shards {#page_cache_shards} - -Разбивает кэш страниц в пространстве пользователя на указанное количество шардов для снижения конкуренции за мьютексы. Экспериментальная настройка, маловероятно, что она улучшит производительность. - - - -## page_cache_size_ratio {#page_cache_size_ratio} - -Размер защищённой очереди в кэше страниц в пространстве пользователя относительно общего размера кэша. - - - -## part_log - -Логирование событий, связанных с движком [MergeTree](../../engines/table-engines/mergetree-family/mergetree.md), например добавление или слияние данных. Вы можете использовать этот лог для моделирования алгоритмов слияния и сравнения их характеристик, а также визуализации процесса слияния. - -Запросы логируются в таблицу [system.part_log](/operations/system-tables/part_log), а не в отдельный файл. Имя этой таблицы можно настроить с помощью параметра `table` (см. ниже). - - - -**Пример** - -```xml - - system - part_log
- toMonday(event_date) - 7500 - 1048576 - 8192 - 524288 - false -
-``` - - -## parts_kill_delay_period {#parts_kill_delay_period} - - -Период до полного удаления частей для SharedMergeTree. Доступно только в ClickHouse Cloud - - - - -## parts_kill_delay_period_random_add {#parts_kill_delay_period_random_add} - - -Добавляет равномерно распределённое случайное значение от 0 до x секунд к `kill_delay_period`, чтобы избежать проблемы «стадного эффекта» (thundering herd) и последующего DoS ZooKeeper при очень большом числе таблиц. Доступно только в ClickHouse Cloud. - - - - -## parts_killer_pool_size {#parts_killer_pool_size} - - -Потоки, используемые для очистки устаревших частей в общем MergeTree. Доступно только в ClickHouse Cloud. - - - - -## path - -Путь к каталогу, содержащему данные. - -:::note -Слэш в конце обязателен. -::: - -**Пример** - -```xml -/var/lib/clickhouse/ -``` - - -## postgresql_port - -Порт для взаимодействия с клиентами по протоколу PostgreSQL. - -:::note - -* Положительные целые числа указывают номер порта, который следует прослушивать -* Пустое значение используется для отключения взаимодействия с клиентами по протоколу PostgreSQL. - ::: - -**Пример** - -```xml -9005 -``` - - -## postgresql_require_secure_transport {#postgresql_require_secure_transport} - -Если параметр установлен в значение true, для клиентов требуется защищённое соединение по [postgresql_port](#postgresql_port). Подключения с параметром `sslmode=disable` будут отклоняться. Используйте вместе с настройками [OpenSSL](#openssl). - - - -## prefetch_threadpool_pool_size {#prefetch_threadpool_pool_size} - -Размер фонового пула для предварительной выборки данных из удалённых объектных хранилищ - - - -## prefetch_threadpool_queue_size {#prefetch_threadpool_queue_size} - -Количество задач, которые можно добавить в пул предварительной выборки - - - -## prefixes_deserialization_thread_pool_thread_pool_queue_size {#prefixes_deserialization_thread_pool_thread_pool_queue_size} - - -Максимальное количество задач, которые могут быть поставлены в очередь пула потоков десериализации префиксов. - -:::note -Значение `0` означает отсутствие ограничений. -::: - - - - -## prepare_system_log_tables_on_startup {#prepare_system_log_tables_on_startup} - - -Если параметр установлен в `true`, ClickHouse создаёт все настроенные таблицы `system.*_log` до запуска. Это может быть полезно, если некоторые стартовые скрипты зависят от этих таблиц. - - - - -## primary_index_cache_policy {#primary_index_cache_policy} - -Название политики кэширования первичного индекса. - - - -## primary_index_cache_prewarm_ratio {#primary_index_cache_prewarm_ratio} - -Доля общего объёма кэша меток, заполняемого во время предварительного прогрева. - - - -## primary_index_cache_size {#primary_index_cache_size} - -Максимальный размер кэша первичного индекса (индекса семейства таблиц MergeTree). - - - -## primary_index_cache_size_ratio {#primary_index_cache_size_ratio} - -Размер защищённой очереди (при политике SLRU) в кэше первичного индекса по отношению к общему размеру кэша. - - - -## process_query_plan_packet - - - -Этот параметр позволяет считывать пакет QueryPlan. Этот пакет отправляется при выполнении распределённых запросов, когда включён `serialize_query_plan`. -По умолчанию параметр отключён, чтобы избежать возможных проблем с безопасностью, которые могут быть вызваны ошибками при бинарной десериализации плана запроса. - -**Пример** - -```xml -true -``` - - -## processors_profile_log - -Параметры для системной таблицы [`processors_profile_log`](../system-tables/processors_profile_log.md). - - - -Значения по умолчанию: - -```xml - - system - processors_profile_log
- toYYYYMM(event_date) - 7500 - 1048576 - 8192 - 524288 - false -
-``` - - -## prometheus - -Публикация метрик для сбора системой [Prometheus](https://prometheus.io). - -Настройки: - -* `endpoint` – HTTP-эндпоинт для сбора метрик сервером Prometheus. Должен начинаться с '/'. -* `port` – Порт для `endpoint`. -* `metrics` – Экспортировать метрики из таблицы [system.metrics](/operations/system-tables/metrics). -* `events` – Экспортировать метрики из таблицы [system.events](/operations/system-tables/events). -* `asynchronous_metrics` – Экспортировать текущие значения метрик из таблицы [system.asynchronous_metrics](/operations/system-tables/asynchronous_metrics). -* `errors` - Экспортировать количество ошибок по их кодам, возникших с момента последнего перезапуска сервера. Эти данные также можно получить из таблицы [system.errors](/operations/system-tables/errors). - -**Пример** - -```xml - - 0.0.0.0 - 8123 - 9000 - - - /metrics - 9363 - true - true - true - true - - - -``` - -Проверьте (замените `127.0.0.1` на IP-адрес или имя хоста сервера ClickHouse): - -```bash -curl 127.0.0.1:9363/metrics -``` - - -## proxy - -Определяет прокси‑серверы для HTTP‑ и HTTPS‑запросов, в настоящее время поддерживаемые хранилищем S3, табличными функциями S3 и функциями URL. - -Существует три способа задать прокси‑серверы: - -* переменные окружения -* списки прокси -* удалённые резолверы прокси‑серверов. - -Обход (игнорирование) прокси‑серверов для отдельных хостов также поддерживается с использованием `no_proxy`. - -**Переменные окружения** - -Переменные окружения `http_proxy` и `https_proxy` позволяют указать -прокси‑сервер для конкретного протокола. Если они уже настроены в вашей системе, всё будет работать прозрачно. - -Это самый простой подход, если для данного протокола существует -только один прокси‑сервер и этот прокси‑сервер не меняется. - -**Списки прокси** - -Этот подход позволяет указать один или несколько -прокси‑серверов для протокола. Если определено более одного прокси‑сервера, -ClickHouse использует разные прокси по круговой схеме (round-robin), распределяя -нагрузку между серверами. Это самый простой подход, если для протокола существует -несколько прокси‑серверов и список прокси‑серверов не меняется. - -**Шаблон конфигурации** - -```xml - - - http://proxy1 - http://proxy2:3128 - - - http://proxy1:3128 - - -``` - -Выберите родительское поле во вкладках ниже, чтобы просмотреть его дочерние элементы: - - - - | Поле | Описание | - | --------- | -------------------------------------------- | - | `` | Список из одного или нескольких HTTP-прокси | - | `` | Список из одного или нескольких HTTPS-прокси | - - - - | Поле | Описание | - | ------- | ------------------ | - | `` | URI прокси-сервера | - - - -**Удалённые прокси-резолверы** - -Прокси-серверы могут динамически изменяться. В этом -случае вы можете указать конечную точку резолвера. ClickHouse отправляет -пустой GET-запрос на эту конечную точку, удалённый резолвер должен вернуть хост прокси-сервера. -ClickHouse будет использовать его для формирования URI прокси по следующему шаблону: `\{proxy_scheme\}://\{proxy_host\}:{proxy_port}` - -**Шаблон конфигурации** - -```xml - - - - http://resolver:8080/hostname - http - 80 - 10 - - - - - - http://resolver:8080/hostname - http - 3128 - 10 - - - - -``` - -Выберите родительское поле на вкладках ниже, чтобы просмотреть его дочерние элементы: - - - - | Поле | Описание | - | --------- | ------------------------------------------- | - | `` | Список из одного или нескольких резолверов* | - | `` | Список из одного или нескольких резолверов* | - - - - | Поле | Описание | - | ------------ | ------------------------------------------- | - | `` | Конечная точка и другие параметры резолвера | - - :::note - Можно указать несколько элементов ``, но используется только - первый `` для данного протокола. Все остальные элементы - `` для этого протокола игнорируются. Это означает, что - балансировка нагрузки (если она требуется) должна выполняться - удалённым резолвером. - ::: - - - - | Поле | Описание | - | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | - | `` | URI прокси-резолвера | - | `` | Протокол итогового URI прокси. Может быть либо `http`, либо `https`. | - | `` | Номер порта прокси-резолвера | - | `` | Время в секундах, в течение которого значения от резолвера должны кэшироваться в ClickHouse. Установка этого значения в `0` заставляет ClickHouse обращаться к резолверу для каждого HTTP- или HTTPS-запроса. | - - - -**Приоритет** - -Параметры прокси определяются в следующем порядке: - - -| Порядок | Настройка | -|---------|--------------------------------| -| 1. | Удалённые прокси-резолверы | -| 2. | Списки прокси | -| 3. | Переменные окружения | - -ClickHouse проверяет тип резолвера с наивысшим приоритетом для протокола запроса. Если он не задан, -проверяется следующий по приоритету тип резолвера, пока не будет достигнут резолвер, использующий переменные окружения. -Это также позволяет одновременно использовать несколько типов резолверов. - - - -## query_cache - -Настройки [кэша запросов](../query-cache.md). - -Доступны следующие параметры: - -| Параметр | Описание | Значение по умолчанию | -| ------------------------- | --------------------------------------------------------------------------------------------------- | --------------------- | -| `max_size_in_bytes` | Максимальный размер кэша в байтах. Значение `0` означает, что кэш запросов отключён. | `1073741824` | -| `max_entries` | Максимальное количество результатов запросов `SELECT`, хранимых в кэше. | `1024` | -| `max_entry_size_in_bytes` | Максимальный размер в байтах для результатов запроса `SELECT`, которые могут быть сохранены в кэше. | `1048576` | -| `max_entry_size_in_rows` | Максимальное количество строк в результатах запроса `SELECT`, которые могут быть сохранены в кэше. | `30000000` | - -:::note - -* Изменённые настройки вступают в силу немедленно. -* Данные для кэша запросов выделяются в DRAM. Если память ограничена, установите небольшое значение `max_size_in_bytes` или полностью отключите кэш запросов. - ::: - -**Пример** - -```xml - - 1073741824 - 1024 - 1048576 - 30000000 - -``` - - -## query_condition_cache_policy {#query_condition_cache_policy} - -Имя политики кэширования условий запроса. - - - -## query_condition_cache_size {#query_condition_cache_size} - - -Максимальный размер кэша условий запроса. -:::note -Эту настройку можно изменять во время работы, и изменения вступают в силу немедленно. -::: - - - - -## query_condition_cache_size_ratio {#query_condition_cache_size_ratio} - -Размер защищённой очереди (в случае политики SLRU) в кэше условий запроса относительно общего размера кэша. - - - -## query_log - -Настройка для журналирования запросов, полученных при включённом параметре [log_queries=1](../../operations/settings/settings.md). - -Запросы записываются в таблицу [system.query_log](/operations/system-tables/query_log), а не в отдельный файл. Имя таблицы можно изменить с помощью параметра `table` (см. ниже). - - - -Если таблица не существует, ClickHouse создаст её. Если структура журнала запросов изменилась при обновлении сервера ClickHouse, таблица со старой структурой переименовывается, а новая таблица создаётся автоматически. - -**Пример** - -```xml - - system - query_log
- Engine = MergeTree PARTITION BY event_date ORDER BY event_time TTL event_date + INTERVAL 30 day - 7500 - 1048576 - 8192 - 524288 - false -
-``` - - -## query_masking_rules - -Правила на основе регулярных выражений, которые будут применяться к запросам, а также ко всем сообщениям журнала перед их сохранением в журналы сервера, -таблицы [`system.query_log`](/operations/system-tables/query_log), [`system.text_log`](/operations/system-tables/text_log), [`system.processes`](/operations/system-tables/processes), а также в журналы, отправляемые клиенту. Это позволяет предотвратить -утечку конфиденциальных данных из SQL-запросов, таких как имена, адреса электронной почты, персональные идентификаторы или номера кредитных карт, в журналы. - -**Пример** - -```xml - - - скрыть номер SSN - (^|\D)\d{3}-\d{2}-\d{4}($|\D) - 000-00-0000 - - -``` - -**Поля конфигурации**: - -| Setting | Description | -| --------- | ---------------------------------------------------------------------------------------------- | -| `name` | имя правила (необязательно) | -| `regexp` | регулярное выражение, совместимое с RE2 (обязательное) | -| `replace` | строка подстановки для конфиденциальных данных (необязательно, по умолчанию — шесть звездочек) | - -Правила маскирования применяются ко всему запросу (для предотвращения утечек конфиденциальных данных из некорректных или неподдающихся разбору запросов). - -Таблица [`system.events`](/operations/system-tables/events) содержит счетчик `QueryMaskingRulesMatch`, в котором хранится общее количество срабатываний правил маскирования запросов. - -Для распределённых запросов каждый сервер должен быть настроен отдельно, иначе подзапросы, передаваемые на другие узлы, будут сохраняться без маскирования. - - -## query_metric_log - -По умолчанию он отключен. - -**Включение** - -Чтобы вручную включить сбор истории метрик запросов [`system.query_metric_log`](../../operations/system-tables/query_metric_log.md), создайте файл `/etc/clickhouse-server/config.d/query_metric_log.xml` со следующим содержимым: - -```xml - - - system - query_metric_log
- 7500 - 1000 - 1048576 - 8192 - 524288 - false -
-
-``` - -**Отключение** - -Чтобы отключить параметр `query_metric_log`, необходимо создать файл `/etc/clickhouse-server/config.d/disable_query_metric_log.xml` со следующим содержимым: - -```xml - - - -``` - - - - -## query_thread_log - -Настройка ведения журнала потоков запросов, включаемого параметром [log_query_threads=1](/operations/settings/settings#log_query_threads). - -Запросы записываются в таблицу [system.query_thread_log](/operations/system-tables/query_thread_log), а не в отдельный файл. Вы можете изменить имя таблицы с помощью параметра `table` (см. ниже). - - - -Если таблица не существует, ClickHouse создаст её. Если структура журнала потоков запросов изменилась при обновлении сервера ClickHouse, таблица со старой структурой переименовывается, и новая таблица создаётся автоматически. - -**Пример** - -```xml - - system - query_thread_log
- toMonday(event_date) - 7500 - 1048576 - 8192 - 524288 - false -
-``` - - -## query_views_log - -Настройка логирования представлений (live, materialized и т.д.), зависящая от запросов, полученных с настройкой [log_query_views=1](/operations/settings/settings#log_query_views). - -Запросы логируются в таблицу [system.query_views_log](/operations/system-tables/query_views_log), а не в отдельный файл. Имя таблицы можно изменить в параметре `table` (см. ниже). - - - -Если таблица не существует, ClickHouse создаст её. Если структура журнала представлений запросов изменилась при обновлении сервера ClickHouse, таблица со старой структурой будет переименована, а новая таблица будет автоматически создана. - -**Пример** - -```xml - - system - query_views_log
- toYYYYMM(event_date) - 7500 - 1048576 - 8192 - 524288 - false -
-``` - - -## remap_executable - -Настройка для перераспределения памяти под машинный код («text») с использованием больших страниц. - -:::note -Эта функция находится на стадии активного эксперимента. -::: - -Пример: - -```xml -false -``` - - -## remote_servers - -Конфигурация кластеров, используемых движком таблицы [Distributed](../../engines/table-engines/special/distributed.md) и табличной функцией `cluster`. - -**Пример** - -```xml - -``` - -Для значения атрибута `incl` см. раздел «[Файлы конфигурации](/operations/configuration-files)». - -**См. также** - -* [skip_unavailable_shards](../../operations/settings/settings.md#skip_unavailable_shards) -* [Обнаружение кластеров](../../operations/cluster-discovery.md) -* [Движок реплицируемой базы данных](../../engines/database-engines/replicated.md) - - -## remote_url_allow_hosts - -Список хостов, которые разрешено использовать в движках хранения и табличных функциях, работающих с URL. - -При добавлении хоста с xml-тегом `\`: - -* его нужно указывать в точности так же, как в URL, так как имя проверяется до разрешения DNS-имени. Например: `clickhouse.com` -* если порт явно указан в URL, то проверяется пара host:port целиком. Например: `clickhouse.com:80` -* если хост указан без порта, то разрешены любые порты этого хоста. Например: если указан `clickhouse.com`, то `clickhouse.com:20` (FTP), `clickhouse.com:80` (HTTP), `clickhouse.com:443` (HTTPS) и т. д. разрешены. -* если хост указан в виде IP-адреса, то он проверяется так же, как указан в URL. Например: `[2a02:6b8:a::a]`. -* если есть перенаправления и поддержка перенаправлений включена, то каждое перенаправление (поле Location) проверяется. - -Например: - -```sql - - clickhouse.com - -``` - - -## replica_group_name - -Имя группы реплик для базы данных типа Replicated. - -Кластер, созданный базой данных Replicated, будет состоять из реплик в пределах одной группы. -DDL-запросы будут ожидать только реплики в той же группе. - -По умолчанию — пусто. - -**Пример** - -```xml -backups -``` - - -## replicated_fetches_http_connection_timeout {#replicated_fetches_http_connection_timeout} - -Таймаут HTTP-соединения для запросов на получение частей. Значение наследуется из профиля по умолчанию `http_connection_timeout`, если не задано явно. - - - -## replicated_fetches_http_receive_timeout {#replicated_fetches_http_receive_timeout} - -Таймаут при получении HTTP-ответа для запросов на получение частей. Наследуется из профиля по умолчанию `http_receive_timeout`, если не задан явно. - - - -## replicated_fetches_http_send_timeout {#replicated_fetches_http_send_timeout} - -Таймаут отправки HTTP-запросов для запросов выборки частей. Наследуется из профиля по умолчанию `http_send_timeout`, если не задан явно. - - - -## replicated_merge_tree - -Параметр тонкой настройки для таблиц в [ReplicatedMergeTree](../../engines/table-engines/mergetree-family/mergetree.md). Этот параметр имеет более высокий приоритет. - -Для получения дополнительной информации см. заголовочный файл MergeTreeSettings.h. - -**Пример** - -```xml - - 5 - -``` - - -## restore_threads {#restore_threads} - -Максимальное число потоков для выполнения запросов RESTORE. - - - -## s3_credentials_provider_max_cache_size {#s3_credentials_provider_max_cache_size} - -Максимальное количество провайдеров учетных данных S3, которые может кэшировать система - - - -## s3_max_redirects {#s3_max_redirects} - -Максимальное допустимое количество переходов при перенаправлениях S3. - - - -## s3_retry_attempts {#s3_retry_attempts} - -Параметр для Aws::Client::RetryStrategy; сам Aws::Client выполняет повторные попытки, значение 0 означает отсутствие повторных попыток - - - -## s3queue_disable_streaming {#s3queue_disable_streaming} - -Отключает потоковую обработку в S3Queue, даже если таблица создана и к ней прикреплены материализованные представления - - - -## s3queue_log - -Настройки системной таблицы `s3queue_log`. - - - -Настройки по умолчанию: - -```xml - - system - s3queue_log
- toYYYYMM(event_date) - 7500 -
-``` - - -## send_crash_reports - -Настройки отправки отчётов о сбоях команде разработчиков ядра ClickHouse. - -Включение этой настройки, особенно в предпродакшн-средах, крайне приветствуется. - -Ключи: - -| Key | Description | -| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | -| `enabled` | Логический флаг для включения функции, по умолчанию `true`. Установите `false`, чтобы не отправлять отчёты о сбоях. | -| `send_logical_errors` | `LOGICAL_ERROR` похожа на `assert`: это ошибка (bug) в ClickHouse. Этот логический флаг включает отправку таких исключений (по умолчанию `true`). | -| `endpoint` | Вы можете переопределить URL конечной точки для отправки отчётов о сбоях. | - -**Рекомендуемое использование** - -```xml - - true - -``` - - -## series_keeper_path {#series_keeper_path} - - -Путь в Keeper с автоинкрементируемыми номерами, генерируемыми функцией `generateSerialID`. Каждая серия представлена отдельным узлом по этому пути. - - - - -## show_addresses_in_stack_traces {#show_addresses_in_stack_traces} - -Если установлено значение true, в трассировках стека будут отображаться адреса - - - -## shutdown_wait_backups_and_restores {#shutdown_wait_backups_and_restores} - -Если установлено значение true, ClickHouse будет дожидаться завершения выполняющихся операций резервного копирования и восстановления перед завершением работы сервера. - - - -## shutdown_wait_unfinished {#shutdown_wait_unfinished} - -Время ожидания незавершённых запросов в секундах - - - -## shutdown_wait_unfinished_queries {#shutdown_wait_unfinished_queries} - -Если установлено в true, ClickHouse будет дожидаться завершения выполняющихся запросов перед остановкой. - - - -## skip_binary_checksum_checks {#skip_binary_checksum_checks} - -Пропускает проверки контрольных сумм бинарного файла ClickHouse - - - -## ssh_server - -Публичная часть ключа хоста будет записана в файл known_hosts -на стороне SSH-клиента при первом подключении. - -Параметры ключа хоста по умолчанию неактивны. -Раскомментируйте параметры ключа хоста и укажите путь к соответствующему SSH-ключу, чтобы их активировать: - -Пример: - -```xml - - path_to_the_ssh_key - path_to_the_ssh_key - path_to_the_ssh_key - -``` - - -## startup_mv_delay_ms {#startup_mv_delay_ms} - -Отладочный параметр для эмуляции задержки при создании материализованного представления - - - -## storage_configuration - -Поддерживает многодисковую конфигурацию хранилища. - -Конфигурация хранилища имеет следующую структуру: - -```xml - - - - - - - - -``` - -### Конфигурация дисков - -Конфигурация `disks` имеет следующую структуру: - -```xml - - - - /mnt/fast_ssd/clickhouse/ - - - /mnt/hdd1/clickhouse/ - 10485760 - - - /mnt/hdd2/clickhouse/ - 10485760 - - ... - - -``` - -Вложенные теги выше определяют следующие настройки для `disks`: - -| Параметр | Описание | -| ----------------------- | ---------------------------------------------------------------------------------------------------------- | -| `` | Имя диска, которое должно быть уникальным. | -| `path` | Путь, по которому будут храниться данные сервера (каталоги `data` и `shadow`). Должен заканчиваться на `/` | -| `keep_free_space_bytes` | Размер зарезервированного свободного пространства на диске. | - -:::note -Порядок дисков не имеет значения. -::: - -### Настройка политик - -Вложенные теги выше определяют следующие настройки для `policies`: - - -| Setting | Description | -|------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `policy_name_N` | Имя политики. Имена политик должны быть уникальными. | -| `volume_name_N` | Имя тома. Имена томов должны быть уникальными. | -| `disk` | Диск, расположенный внутри тома. | -| `max_data_part_size_bytes` | Максимальный размер части данных, которая может находиться на любом из дисков в этом томе. Если в результате слияния ожидается, что размер части будет больше, чем `max_data_part_size_bytes`, часть будет записана в следующий том. По сути, эта функция позволяет хранить новые / маленькие части на «горячем» томе (SSD) и переносить их на «холодный» том (HDD), когда они достигают большого размера. Не используйте эту опцию, если в политике только один том. | -| `move_factor` | Доля доступного свободного места на томе. Если свободного места становится меньше, данные начинают переноситься на следующий том, если он существует. Для переноса части сортируются по размеру от большей к меньшей (по убыванию) и выбираются части, суммарный размер которых достаточен для выполнения условия `move_factor`; если суммарный размер всех частей недостаточен, будут перенесены все части. | -| `perform_ttl_move_on_insert` | Отключает перенос данных с истёкшим TTL при вставке. По умолчанию (при включённой настройке), если мы вставляем часть данных, которая уже истекла согласно правилу переноса по сроку жизни (TTL), она немедленно переносится на том / диск, указанный в правиле переноса. Это может значительно замедлить вставку, если целевой том / диск медленный (например, S3). Если опция отключена, истекшая часть данных записывается в том по умолчанию, а затем сразу переносится в том, указанный в правиле для истёкшего TTL. | -| `load_balancing` | Политика балансировки между дисками: `round_robin` или `least_used`. | -| `least_used_ttl_ms` | Задаёт таймаут (в миллисекундах) для обновления доступного пространства на всех дисках (`0` — всегда обновлять, `-1` — никогда не обновлять, значение по умолчанию — `60000`). Обратите внимание: если диск используется только ClickHouse и не будет подвергаться динамическому изменению размера файловой системы, можно использовать значение `-1`. Во всех остальных случаях это не рекомендуется, так как в конечном итоге приведёт к некорректному распределению места. | -| `prefer_not_to_merge` | Отключает слияние частей данных на этом томе. Примечание: это потенциально опасно и может вызвать замедление. Если этот параметр включён (не делайте так), слияние данных на этом томе запрещено (что плохо). Это позволяет управлять тем, как ClickHouse взаимодействует с медленными дисками. Мы рекомендуем вообще не использовать этот параметр. | -| `volume_priority` | Определяет приоритет (порядок), в котором заполняются тома. Чем меньше значение, тем выше приоритет. Значения параметра должны быть натуральными числами и непрерывно покрывать диапазон от 1 до N (где N — наибольшее указанное значение параметра) без пропусков. | - -Для `volume_priority`: -- Если у всех томов задан этот параметр, они имеют приоритет в указанном порядке. -- Если только у _некоторых_ томов он задан, тома без этого параметра имеют наименьший приоритет. Тома с этим параметром упорядочиваются по значению параметра, приоритет остальных определяется порядком описания в конфигурационном файле относительно друг друга. -- Если _ни одному_ тому этот параметр не задан, их порядок определяется порядком описания в конфигурационном файле. -- Приоритеты томов могут отличаться. - - - -## storage_connections_soft_limit {#storage_connections_soft_limit} - -Подключения сверх этого лимита имеют значительно меньший срок жизни. Ограничение применяется к подключениям хранилища. - - - -## storage_connections_store_limit {#storage_connections_store_limit} - -Соединения сверх этого предела сбрасываются после использования. Установите значение 0, чтобы отключить кэш соединений. Ограничение применяется к соединениям хранилищ. - - - -## storage_connections_warn_limit {#storage_connections_warn_limit} - -Предупреждающие сообщения записываются в журнал, если число активных подключений превышает этот порог. Порог применяется к подключениям хранилищ. - - - -## storage_metadata_write_full_object_key {#storage_metadata_write_full_object_key} - -Записывать файлы метаданных диска в формате VERSION_FULL_OBJECT_KEY. По умолчанию включена. Настройка устарела. - - - -## storage_shared_set_join_use_inner_uuid {#storage_shared_set_join_use_inner_uuid} - -Если параметр включен, при создании SharedSet и SharedJoin генерируется внутренний UUID. Только в ClickHouse Cloud. - - - -## table_engines_require_grant {#table_engines_require_grant} - -Если параметр установлен в `true`, пользователям требуется привилегия для создания таблицы с конкретным движком, например: `GRANT TABLE ENGINE ON TinyLog TO user`. - -:::note -По умолчанию, для обеспечения обратной совместимости, при создании таблицы с конкретным движком таблицы проверка привилегий на движок игнорируется, однако вы можете изменить это поведение, установив параметр в `true`. -::: - - - -## tables_loader_background_pool_size {#tables_loader_background_pool_size} - - -Задает количество потоков, выполняющих асинхронные задачи загрузки во фоновом пуле. Фоновый пул используется для асинхронной загрузки таблиц после запуска сервера, если нет запросов, ожидающих доступ к таблице. Может быть полезно поддерживать небольшое количество потоков в фоновом пуле, если таблиц много. Это позволит зарезервировать ресурсы CPU для одновременного выполнения запросов. - -:::note -Значение `0` означает, что будут использованы все доступные CPU. -::: - - - - -## tables_loader_foreground_pool_size {#tables_loader_foreground_pool_size} - - -Задает количество потоков, выполняющих задачи загрузки во foreground-пуле. Foreground-пул используется для синхронной загрузки таблиц до того, как сервер начнет слушать порт, а также для загрузки таблиц, загрузка которых ожидается. Foreground-пул имеет более высокий приоритет, чем background-пул. Это означает, что ни одна задача не запускается в background-пуле, пока в foreground-пуле выполняются задачи. - -:::note -Значение `0` означает, что будут использованы все доступные процессорные ядра. -::: - - - - -## tcp_close_connection_after_queries_num {#tcp_close_connection_after_queries_num} - -Максимальное допустимое количество запросов для одного TCP‑соединения перед его закрытием. Установите значение 0 для неограниченного числа запросов. - - - -## tcp_close_connection_after_queries_seconds {#tcp_close_connection_after_queries_seconds} - -Максимальное время жизни TCP‑соединения в секундах до его закрытия. Установите 0 для неограниченного времени жизни соединения. - - - -## tcp_port - -Порт для взаимодействия с клиентами по протоколу TCP. - -**Пример** - -```xml -9000 -``` - - -## tcp_port_secure - -TCP-порт для защищённого взаимодействия с клиентами. Используйте вместе с настройками [OpenSSL](#openssl). - -**Значение по умолчанию** - -```xml -9440 -``` - - -## tcp_ssh_port - -Порт SSH-сервера, через который пользователь может подключаться и выполнять запросы в интерактивном режиме с использованием встроенного клиента через PTY. - -Пример: - -```xml -9022 -``` - - -## temporary_data_in_cache - -При включении этой опции временные данные будут размещаться в кэше для конкретного диска. -В этом разделе нужно указать имя диска типа `cache`. -В этом случае кэш и временные данные будут использовать одно и то же пространство, и кэш диска может быть вытеснен для размещения временных данных. - -:::note -Для конфигурации хранилища временных данных можно использовать только одну из следующих опций: `tmp_path`, `tmp_policy`, `temporary_data_in_cache`. -::: - -**Пример** - -И кэш для `local_disk`, и временные данные будут храниться в каталоге `/tiny_local_cache` файловой системы, управляемом диском `tiny_local_cache`. - -```xml - - - - -local -/local_disk/ - - - - -cache -local_disk -/tiny_local_cache/ -10M -1M -1 - - - - - - -tiny_local_cache - - -``` - - -## temporary_data_in_distributed_cache {#temporary_data_in_distributed_cache} - -Хранить временные данные в распределённом кэше. - - - -## text_index_dictionary_block_cache_max_entries {#text_index_dictionary_block_cache_max_entries} - -Размер кэша блока словаря текстового индекса (в количестве записей). Нулевое значение отключает кэш. - - - -## text_index_dictionary_block_cache_policy {#text_index_dictionary_block_cache_policy} - -Название политики кэширования блоков словаря текстового индекса. - - - -## text_index_dictionary_block_cache_size {#text_index_dictionary_block_cache_size} - -Размер кэша для блоков словаря текстового индекса. Нулевое значение отключает кэш. - -:::note -Эту настройку можно изменить во время работы, и изменение вступит в силу немедленно. -::: - - - -## text_index_dictionary_block_cache_size_ratio {#text_index_dictionary_block_cache_size_ratio} - -Размер защищённой очереди (в случае политики SLRU) в кэше блоков словаря текстового индекса относительно общего размера кэша. - - - -## text_index_header_cache_max_entries {#text_index_header_cache_max_entries} - -Размер кэша заголовка текстового индекса в элементах. Значение 0 отключает кэш. - - - -## text_index_header_cache_policy {#text_index_header_cache_policy} - -Название политики кэширования заголовков текстового индекса. - - - -## text_index_header_cache_size {#text_index_header_cache_size} - -Размер кэша заголовков текстового индекса. При значении 0 кэш отключён. - -:::note -Этот параметр можно изменить во время работы, и изменения вступят в силу немедленно. -::: - - - -## text_index_header_cache_size_ratio {#text_index_header_cache_size_ratio} - -Размер защищённой очереди (в случае политики SLRU) в кэше заголовков текстового индекса относительно общего размера кэша. - - - -## text_index_postings_cache_max_entries {#text_index_postings_cache_max_entries} - -Размер кэша для списка постингов текстового индекса (в записях). Значение 0 отключает кэш. - - - -## text_index_postings_cache_policy {#text_index_postings_cache_policy} - -Имя политики кэширования списков вхождений текстового индекса. - - - -## text_index_postings_cache_size {#text_index_postings_cache_size} - -Размер кэша для списков вхождений текстового индекса. Нулевое значение отключает кэш. - -:::note -Этот параметр можно изменять во время работы сервера, и изменения вступают в силу немедленно. -::: - - - -## text_index_postings_cache_size_ratio {#text_index_postings_cache_size_ratio} - -Размер защищённой очереди (при политике SLRU) в кэше списков постинга текстового индекса относительно общего объёма кэша. - - - -## text_log - -Настройки для системной таблицы [text_log](/operations/system-tables/text_log), используемой для логирования текстовых сообщений. - - - -Дополнительно: - -| Параметр | Описание | Значение по умолчанию | -| -------- | ------------------------------------------------------------------------------------------- | --------------------- | -| `level` | Максимальный уровень сообщений (по умолчанию `Trace`), которые будут сохраняться в таблице. | `Trace` | - -**Пример** - -```xml - - - notice - system - text_log
- 7500 - 1048576 - 8192 - 524288 - false - - Engine = MergeTree PARTITION BY event_date ORDER BY event_time TTL event_date + INTERVAL 30 day -
-
-``` - - -## thread_pool_queue_size - - - -Максимальное количество задач, которые могут быть поставлены в очередь глобального пула потоков. Увеличение размера очереди приводит к большему использованию памяти. Рекомендуется поддерживать это значение равным [`max_thread_pool_size`](/operations/server-configuration-parameters/settings#max_thread_pool_size). - -:::note -Значение `0` означает отсутствие ограничения. -::: - -**Пример** - -```xml -12000 -``` - - -## threadpool_local_fs_reader_pool_size {#threadpool_local_fs_reader_pool_size} - -Количество потоков в пуле для чтения из локальной файловой системы, когда `local_filesystem_read_method = 'pread_threadpool'`. - - - -## threadpool_local_fs_reader_queue_size {#threadpool_local_fs_reader_queue_size} - -Максимальное количество задач, которые могут быть запланированы в пуле потоков для чтения из локальной файловой системы. - - - -## threadpool_remote_fs_reader_pool_size {#threadpool_remote_fs_reader_pool_size} - -Количество потоков в пуле потоков, используемом для чтения из удалённой файловой системы, когда параметр `remote_filesystem_read_method` имеет значение `'threadpool'`. - - - -## threadpool_remote_fs_reader_queue_size {#threadpool_remote_fs_reader_queue_size} - -Максимальное количество задач, которые могут быть поставлены в очередь пула потоков для чтения из удалённой файловой системы. - - - -## threadpool_writer_pool_size {#threadpool_writer_pool_size} - -Размер фонового пула потоков для запросов записи в объектные хранилища - - - -## threadpool_writer_queue_size {#threadpool_writer_queue_size} - -Количество задач, которые можно поставить в очередь фонового пула для обработки запросов на запись в объектные хранилища - - - -## throw_on_unknown_workload - - - -Определяет поведение при обращении к неизвестному WORKLOAD с настройкой запроса 'workload'. - -* Если `true`, из запроса, который пытается обратиться к неизвестному WORKLOAD, выбрасывается исключение RESOURCE_ACCESS_DENIED. Полезно для принудительного применения планировщика ресурсов ко всем запросам после того, как иерархия WORKLOAD сформирована и содержит WORKLOAD default. -* Если `false` (по умолчанию), запросу с настройкой 'workload', указывающей на неизвестный WORKLOAD, предоставляется неограниченный доступ без планирования ресурсов. Это важно на этапе настройки иерархии WORKLOAD, до добавления WORKLOAD default. - -**Пример** - -```xml -true -``` - -**См. также** - -* [Планирование рабочих нагрузок](/operations/workload-scheduling.md) - - -## timezone - -Часовой пояс сервера. - -Указывается как идентификатор IANA для часового пояса UTC или географического местоположения (например, Africa/Abidjan). - -Часовой пояс необходим для преобразований между форматами String и DateTime, когда поля DateTime выводятся в текстовый формат (печатаются на экран или в файл), а также при получении значения DateTime из строки. Кроме того, часовой пояс используется в функциях, работающих со временем и датой, если они не получили часовой пояс во входных параметрах. - -**Пример** - -```xml -Asia/Istanbul -``` - -**См. также** - -* [session_timezone](../settings/settings.md#session_timezone) - - -## tmp_path - -Путь в локальной файловой системе для хранения временных данных при обработке больших запросов. - -:::note - -* Для настройки хранения временных данных может быть использован только один из следующих параметров: `tmp_path`, `tmp_policy`, `temporary_data_in_cache`. -* Конечный слэш обязателен. - ::: - -**Пример** - -```xml -/var/lib/clickhouse/tmp/ -``` - - -## tmp_policy - -Политика для хранилища с временными данными. Все файлы с префиксом `tmp` будут удалены при запуске. - -:::note -Рекомендации по использованию объектного хранилища в качестве `tmp_policy`: - -* Используйте отдельный `bucket:path` на каждом сервере -* Используйте `metadata_type=plain` -* При необходимости вы можете настроить TTL для этого bucket - ::: - -:::note - -* Для настройки хранилища временных данных может быть использован только один из вариантов: `tmp_path`, `tmp_policy`, `temporary_data_in_cache`. -* Параметры `move_factor`, `keep_free_space_bytes`, `max_data_part_size_bytes` игнорируются. -* Политика должна содержать ровно *один том* - -Дополнительные сведения см. в документации по [MergeTree Table Engine](/engines/table-engines/mergetree-family/mergetree). -::: - -**Пример** - -Когда на `/disk1` заканчивается место, временные данные будут сохраняться на `/disk2`. - -```xml - - - - -/disk1/ - - -/disk2/ - - - - - - - -
-disk1 -disk2 -
-
-
- -
-
- - -tmp_two_disks - -
-``` - - -## top_level_domains_list - -Задаёт список пользовательских доменов верхнего уровня для добавления, где каждый элемент имеет формат `/path/to/file`. - -Например: - -```xml - - /path/to/public_suffix_list.dat - -``` - -См. также: - -* функцию [`cutToFirstSignificantSubdomainCustom`](../../sql-reference/functions/url-functions.md/#cutToFirstSignificantSubdomainCustom) и её варианты, - которая принимает имя пользовательского списка TLD и возвращает часть домена, включающую все вышестоящие поддомены до первого значимого поддомена. - - -## total_memory_profiler_sample_max_allocation_size {#total_memory_profiler_sample_max_allocation_size} - -Собирать случайные выделения памяти размером меньше или равным указанному значению с вероятностью, равной `total_memory_profiler_sample_probability`. 0 означает отключено. Имеет смысл установить `max_untracked_memory` в 0, чтобы этот порог работал как ожидается. - - - -## total_memory_profiler_sample_min_allocation_size {#total_memory_profiler_sample_min_allocation_size} - -Собирать случайные выделения памяти размером больше или равным указанному значению с вероятностью, равной `total_memory_profiler_sample_probability`. 0 означает, что сбор отключен. Имеет смысл установить `max_untracked_memory` в 0, чтобы этот порог работал как ожидается. - - - -## total_memory_profiler_step {#total_memory_profiler_step} - -Каждый раз, когда использование памяти сервером превышает очередной порог (в байтах), профилировщик памяти собирает стек трассировки выделения памяти. Ноль означает, что профилировщик памяти отключен. Значения меньше нескольких мегабайт будут замедлять сервер. - - - -## total_memory_tracker_sample_probability {#total_memory_tracker_sample_probability} - - -Позволяет собирать случайные операции выделения и освобождения памяти и записывать их в системную таблицу [system.trace_log](../../operations/system-tables/trace_log.md) с `trace_type`, равным `MemorySample`, с указанной вероятностью. Вероятность применяется к каждой отдельной операции выделения или освобождения памяти, независимо от её размера. Обратите внимание, что выборка выполняется только тогда, когда объём неотслеживаемой памяти превышает лимит неотслеживаемой памяти (значение по умолчанию — `4` MiB). Этот лимит можно уменьшить, если уменьшить значение [total_memory_profiler_step](/operations/server-configuration-parameters/settings#total_memory_profiler_step). Вы можете установить `total_memory_profiler_step` равным `1` для более детализированной выборки. - -Возможные значения: - -- Положительное число с плавающей запятой. -- `0` — запись случайных операций выделения и освобождения памяти в системную таблицу `system.trace_log` отключена. - - - - -## trace_log - -Настройки для системной таблицы [trace_log](/operations/system-tables/trace_log). - - - -Файл конфигурации сервера `config.xml` по умолчанию содержит следующий раздел настроек: - -```xml - - system - trace_log
- toYYYYMM(event_date) - 7500 - 1048576 - 8192 - 524288 - false - false -
-``` - - -## uncompressed_cache_policy {#uncompressed_cache_policy} - -Имя политики кэша несжатых данных. - - - -## uncompressed_cache_size {#uncompressed_cache_size} - - -Максимальный размер (в байтах) несжатых данных, используемых движками таблиц из семейства MergeTree. - -Для сервера используется один общий кэш. Память выделяется по требованию. Кэш используется, если включён параметр `use_uncompressed_cache`. - -Кэш несжатых данных может быть полезен для очень коротких запросов в отдельных случаях. - -:::note -Значение `0` означает, что кэш отключён. - -Этот параметр можно изменять во время работы сервера, и изменения вступают в силу немедленно. -::: - - - - -## uncompressed_cache_size_ratio {#uncompressed_cache_size_ratio} - -Размер защищённой очереди (в случае политики SLRU) в несжатом кэше по отношению к общему размеру кэша. - - - -## url_scheme_mappers - -Конфигурация сопоставления сокращённых или символических префиксов URL полным URL-адресам. - -Пример: - -```xml - - - https://{bucket}.s3.amazonaws.com - - - https://storage.googleapis.com/{bucket} - - - https://{bucket}.oss.aliyuncs.com - - -``` - - -## use_minimalistic_part_header_in_zookeeper {#use_minimalistic_part_header_in_zookeeper} - -Метод хранения заголовков частей данных в ZooKeeper. Эта настройка применяется только к семейству [`MergeTree`](/engines/table-engines/mergetree-family). Ее можно задать: - -**Глобально в секции [merge_tree](#merge_tree) файла `config.xml`** - -ClickHouse использует эту настройку для всех таблиц на сервере. Вы можете изменить ее в любой момент. Поведение уже существующих таблиц меняется при изменении настройки. - -**Для каждой таблицы** - -При создании таблицы укажите соответствующий [параметр движка](../../engines/table-engines/mergetree-family/mergetree.md#table_engine-mergetree-creating-a-table). Поведение существующей таблицы с этой настройкой не меняется, даже если глобальная настройка изменится. - -**Возможные значения** - -- `0` — функциональность отключена. -- `1` — функциональность включена. - -Если [`use_minimalistic_part_header_in_zookeeper = 1`](#use_minimalistic_part_header_in_zookeeper), то [реплицируемые](../../engines/table-engines/mergetree-family/replication.md) таблицы хранят заголовки частей данных компактно, используя один `znode`. Если таблица содержит много столбцов, этот метод хранения значительно сокращает объем данных, хранящихся в ZooKeeper. - -:::note -После применения `use_minimalistic_part_header_in_zookeeper = 1` вы не сможете откатить сервер ClickHouse на версию, которая не поддерживает эту настройку. Будьте осторожны при обновлении ClickHouse на серверах в кластере. Не обновляйте все серверы одновременно. Безопаснее тестировать новые версии ClickHouse в тестовой среде или только на нескольких серверах кластера. - -Заголовки частей данных, уже сохраненные с этой настройкой, не могут быть восстановлены к их прежнему (некомпактному) представлению. -::: - - - -## user_defined_executable_functions_config - -Путь к конфигурационному файлу для исполняемых пользовательских функций. - -Путь: - -* Укажите абсолютный путь или путь относительно файла конфигурации сервера. -* Путь может содержать подстановочные символы `*` и `?`. - -См. также: - -* [Executable User Defined Functions](/sql-reference/functions/udf#executable-user-defined-functions). - -**Пример** - -```xml -*_function.xml -``` - - -## user_defined_path - -Каталог с пользовательскими файлами. Используется для [пользовательских SQL‑функций](/sql-reference/functions/udf). - -**Пример** - -```xml -/var/lib/clickhouse/user_defined/ -``` - - -## user_directories - -Раздел файла конфигурации, содержащий настройки: - -* Путь к файлу конфигурации с предопределёнными пользователями. -* Путь к папке, где хранятся пользователи, созданные SQL-командами. -* Путь к узлу ZooKeeper, где пользователи, созданные SQL-командами, хранятся и реплицируются. - -Если этот раздел задан, путь из [users_config](/operations/server-configuration-parameters/settings#users_config) и [access_control_path](../../operations/server-configuration-parameters/settings.md#access_control_path) использоваться не будут. - -Раздел `user_directories` может содержать любое количество элементов; порядок элементов определяет их приоритет (чем выше элемент в списке, тем выше приоритет). - -**Примеры** - -```xml - - - /etc/clickhouse-server/users.xml - - - /var/lib/clickhouse/access/ - - -``` - -Пользователи, роли, политики для строк, квоты и профили также могут храниться в ZooKeeper: - -```xml - - - /etc/clickhouse-server/users.xml - - - /clickhouse/access/ - - -``` - -Вы также можете определить разделы `memory` — для хранения информации только в памяти, без записи на диск, и `ldap` — для хранения информации на сервере LDAP. - -Чтобы добавить сервер LDAP в качестве удалённого каталога пользователей, которые не определены локально, определите секцию `ldap` со следующими настройками: - -| Setting | Description | -| -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `server` | одно из имён LDAP-серверов, определённых в секции конфигурации `ldap_servers`. Этот параметр является обязательным и не может быть пустым. | -| `roles` | секция со списком локально определённых ролей, которые будут назначены каждому пользователю, полученному с сервера LDAP. Если роли не указаны, пользователь не сможет выполнять какие-либо действия после аутентификации. Если любая из указанных ролей не определена локально на момент аутентификации, попытка аутентификации завершится неудачей так же, как если бы был указан неверный пароль. | - -**Пример** - -```xml - - my_ldap_server - - - - - -``` - - -## user_files_path - -Каталог с пользовательскими файлами. Используется в табличных функциях [file()](../../sql-reference/table-functions/file.md), [fileCluster()](../../sql-reference/table-functions/fileCluster.md). - -**Пример** - -```xml -/var/lib/clickhouse/user_files/ -``` - - -## user_scripts_path - -Каталог с файлами пользовательских скриптов. Используется для исполняемых пользовательских функций [Executable User Defined Functions](/sql-reference/functions/udf#executable-user-defined-functions). - -**Пример** - -```xml -/var/lib/clickhouse/user_scripts/ -``` - -Тип: - -По умолчанию: - - -## users_config - -Путь к файлу, в котором определяются: - -* Конфигурации пользователей. -* Права доступа. -* Профили настроек. -* Параметры квот. - -**Пример** - -```xml -users.xml -``` - - -## validate_tcp_client_information - -Определяет, выполняется ли проверка информации о клиенте при получении пакета запроса. - -По умолчанию значение — `false`: - -```xml -false -``` - - -## vector_similarity_index_cache_max_entries {#vector_similarity_index_cache_max_entries} - -Размер кэша индекса векторного сходства (по числу записей). Ноль отключает кэш. - - - -## vector_similarity_index_cache_policy {#vector_similarity_index_cache_policy} - -Имя политики кэширования индекса векторного сходства. - - - -## vector_similarity_index_cache_size {#vector_similarity_index_cache_size} - -Размер кэша для индексов векторного сходства. Нулевое значение означает, что кэш отключен. - -:::note -Этот параметр можно изменять без перезапуска сервера, изменения вступают в силу немедленно. -::: - - - -## vector_similarity_index_cache_size_ratio {#vector_similarity_index_cache_size_ratio} - -Размер защищённой очереди (в случае политики SLRU) в кэше индекса векторного сходства относительно общего размера кэша. - - - -## wait_dictionaries_load_at_startup - - - -Этот параметр определяет поведение, если `dictionaries_lazy_load` равен `false`. -(Если `dictionaries_lazy_load` равен `true`, этот параметр ни на что не влияет.) - -Если `wait_dictionaries_load_at_startup` равен `false`, сервер -начнет загружать все словари при старте и будет параллельно принимать подключения. -Когда словарь впервые используется в запросе, запрос будет ждать, пока словарь не загрузится, если он еще не загружен. -Установка `wait_dictionaries_load_at_startup` в `false` может ускорить запуск ClickHouse, однако некоторые запросы могут выполняться медленнее -(поскольку им придется ждать загрузки некоторых словарей). - -Если `wait_dictionaries_load_at_startup` равен `true`, сервер при запуске будет ждать, -пока загрузка всех словарей не завершится (успешно или с ошибкой), прежде чем принимать какие-либо подключения. - -**Пример** - -```xml -true -``` - - -## workload_path - -Каталог, в котором хранятся все запросы `CREATE WORKLOAD` и `CREATE RESOURCE`. По умолчанию используется папка `/workload/` в рабочем каталоге сервера. - -**Пример** - -```xml -/var/lib/clickhouse/workload/ -``` - -**См. также** - -* [Иерархия рабочих нагрузок](/operations/workload-scheduling.md#workloads) -* [workload_zookeeper_path](#workload_zookeeper_path) - - -## workload_zookeeper_path - -Путь к узлу ZooKeeper, который используется как хранилище для всех запросов `CREATE WORKLOAD` и `CREATE RESOURCE`. Для обеспечения согласованности все SQL-определения сохраняются как значение одного znode. По умолчанию ZooKeeper не используется, и определения хранятся на [диске](#workload_path). - -**Пример** - -```xml -/clickhouse/workload/definitions.sql -``` - -**См. также** - -* [Иерархия рабочих нагрузок](/operations/workload-scheduling.md#workloads) -* [workload_path](#workload_path) - - -## zookeeper - -Содержит настройки, которые позволяют ClickHouse взаимодействовать с кластером [ZooKeeper](http://zookeeper.apache.org/). ClickHouse использует ZooKeeper для хранения метаданных реплик при использовании реплицируемых таблиц. Если реплицируемые таблицы не используются, этот раздел параметров можно опустить. - -Следующие настройки могут быть заданы с помощью вложенных тегов: - -| Параметр | Описание | -| ------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `node` | Endpoint ZooKeeper. Можно задать несколько endpoint'ов. Например, `example_host2181`. Атрибут `index` задает порядок узлов при попытке подключения к кластеру ZooKeeper. | -| `session_timeout_ms` | Максимальный таймаут клиентской сессии в миллисекундах. | -| `operation_timeout_ms` | Максимальный таймаут одной операции в миллисекундах. | -| `root` (optional) | Znode, который используется как корневой для znode-ов, используемых сервером ClickHouse. | -| `fallback_session_lifetime.min` (optional) | Минимальный предел времени жизни сессии ZooKeeper с резервным узлом, когда основной недоступен (балансировка нагрузки). Задается в секундах. По умолчанию: 3 часа. | -| `fallback_session_lifetime.max` (optional) | Максимальный предел времени жизни сессии ZooKeeper с резервным узлом, когда основной недоступен (балансировка нагрузки). Задается в секундах. По умолчанию: 6 часов. | -| `identity` (optional) | Пользователь и пароль, требуемые ZooKeeper для доступа к запрашиваемым znode-ам. | -| `use_compression` (optional) | Включает сжатие в протоколе Keeper, если установлено значение true. | - -Также существует параметр `zookeeper_load_balancing` (необязательный), который позволяет выбрать алгоритм выбора узла ZooKeeper: - -| Algorithm Name | Description | -| ------------------------------- | ------------------------------------------------------------------------------------------------------------------- | -| `random` | случайным образом выбирает один из узлов ZooKeeper. | -| `in_order` | выбирает первый узел ZooKeeper, если он недоступен — второй и так далее. | -| `nearest_hostname` | выбирает узел ZooKeeper с именем хоста, наиболее похожим на имя хоста сервера; имя хоста сравнивается по префиксу. | -| `hostname_levenshtein_distance` | аналогично `nearest_hostname`, но сравнивает имя хоста с использованием расстояния Левенштейна. | -| `first_or_random` | выбирает первый узел ZooKeeper, если он недоступен — случайным образом выбирает один из оставшихся узлов ZooKeeper. | -| `round_robin` | выбирает первый узел ZooKeeper, при переподключении выбирает следующий. | - -**Пример конфигурации** - -```xml - - - example1 - 2181 - - - example2 - 2181 - - 30000 - 10000 - - /path/to/zookeeper/node - - user:password - - random - -``` - -**См. также** - -* [Репликация](../../engines/table-engines/mergetree-family/replication.md) -* [Руководство программиста по ZooKeeper](http://zookeeper.apache.org/doc/current/zookeeperProgrammers.html) -* [Необязательное защищённое взаимодействие между ClickHouse и ZooKeeper](/operations/ssl-zookeeper) - - -## zookeeper_log - -Настройки для системной таблицы [`zookeeper_log`](/operations/system-tables/zookeeper_log). - -Следующие параметры можно настроить с помощью вложенных тегов: - - - -**Пример** - -```xml - - - system - zookeeper_log
- 7500 - event_date + INTERVAL 1 WEEK DELETE -
-
-``` diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/settings/index.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/settings/index.md index 458cc890b91..0f38583856f 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/settings/index.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/settings/index.md @@ -1,35 +1,17 @@ --- -description: 'Страница оглавления раздела «Настройки»' +description: "Страница оглавления раздела «Настройки»" sidebar_position: 1 slug: /operations/settings/ -title: 'Настройки' -doc_type: 'landing-page' +title: "Настройки" +doc_type: "landing-page" --- -{/* Оглавление для этой страницы создаётся автоматически с помощью - https://github.com/ClickHouse/clickhouse-docs/blob/main/scripts/autogenerate-table-of-contents.sh - из полей фронтматтера YAML: slug, description, title. + -{/*AUTOGENERATED_START*/ } - -| Страница | Описание | -| --------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [Обзор настроек](/operations/settings/overview) | Общая обзорная страница настроек. | -| [Права для запросов](/operations/settings/permissions-for-queries) | Настройки прав доступа для запросов. | -| [Ограничения сложности запросов](/operations/settings/query-complexity) | Настройки, ограничивающие сложность запросов. | -| [Профили настроек](/operations/settings/settings-profiles) | Набор настроек, сгруппированных под одним именем. | -| [Ограничения на настройки](/operations/settings/constraints-on-settings) | Ограничения на настройки можно задать в секции `profiles` конфигурационного файла `user.xml`, чтобы запретить пользователям изменять часть настроек с помощью запроса `SET`. | -| [Настройки пользователей и ролей](/operations/settings/settings-users) | Настройки пользователей и ролей. | -| [Composable protocols](/operations/settings/composable-protocols) | Composable protocols позволяют более гибко настраивать TCP-доступ к серверу ClickHouse. | -| [Настройки форматов](/operations/settings/formats) | Настройки, управляющие входными и выходными форматами. | -| [Memory overcommit](/operations/settings/memory-overcommit) | Экспериментальный механизм, позволяющий задавать более гибкие ограничения по памяти для запросов. | -| [Настройки таблиц MergeTree](/operations/settings/merge-tree-settings) | Настройки для MergeTree, которые находятся в `system.merge_tree_settings`. | -| [Настройки сессии на уровне запроса](/operations/settings/query-level) | Настройки на уровне отдельного запроса. | -| [Перегрузка сервера](/operations/settings/server-overload) | Управление поведением при перегрузке CPU сервера. | -| [Настройки сессии](/operations/settings/settings) | Настройки, которые находятся в таблице `system.settings`. | -| [Ограничения на TCP-соединения](/operations/settings/tcp-connection-limits) | Ограничения на TCP-соединения. | - -{/*AUTOGENERATED_END*/ } + + diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/settings/merge-tree-settings.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/settings/merge-tree-settings.md index fe60774f5a3..c235f55be90 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/settings/merge-tree-settings.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/settings/merge-tree-settings.md @@ -1,5 +1,5 @@ --- -description: 'Настройки движка MergeTree, представленные в таблице `system.merge_tree_settings`' +description: 'Настройки таблиц MergeTree, определённые в `system.merge_tree_settings`' slug: /operations/settings/merge-tree-settings title: 'Настройки таблиц MergeTree' doc_type: 'reference' @@ -12,7 +12,7 @@ import VersionHistory from '@theme/VersionHistory/VersionHistory'; Системная таблица `system.merge_tree_settings` показывает глобальные настройки MergeTree. -Настройки MergeTree можно задать в секции `merge_tree` конфигурационного файла сервера или указать отдельно для каждой таблицы `MergeTree` в секции `SETTINGS` оператора `CREATE TABLE`. +Настройки MergeTree могут быть заданы в секции `merge_tree` конфигурационного файла сервера или указаны отдельно для каждой таблицы `MergeTree` в разделе `SETTINGS` запроса `CREATE TABLE`. Пример настройки параметра `max_suspicious_broken_parts`: @@ -24,7 +24,7 @@ import VersionHistory from '@theme/VersionHistory/VersionHistory'; ``` -Устанавливается для конкретной таблицы: +Задаётся для отдельной таблицы: ```sql CREATE TABLE tab @@ -46,3287 +46,8 @@ ALTER TABLE tab RESET SETTING max_suspicious_broken_parts; ``` -## Параметры MergeTree +## Настройки MergeTree -{/* Приведённые ниже настройки автоматически генерируются скриптом по адресу +{/* Нижеуказанные настройки автоматически создаются скриптом по адресу https://github.com/ClickHouse/clickhouse-docs/blob/main/scripts/settings/autogenerate-settings.sh */ } - -## adaptive_write_buffer_initial_size - - - -Начальный размер адаптивного буфера записи - - -## add_implicit_sign_column_constraint_for_collapsing_engine {#add_implicit_sign_column_constraint_for_collapsing_engine} - - -Если имеет значение `true`, добавляет неявное ограничение для столбца `sign` таблицы -типа CollapsingMergeTree или VersionedCollapsingMergeTree, чтобы разрешать -только корректные значения (`1` и `-1`). - - - -## add_minmax_index_for_numeric_columns {#add_minmax_index_for_numeric_columns} - - - - -Если параметр включён, для всех числовых столбцов таблицы создаются min-max (пропускающие) индексы. - - - -## add_minmax_index_for_string_columns {#add_minmax_index_for_string_columns} - - - - -При включении для всех строковых столбцов таблицы создаются min-max-индексы (skipping). - - - -## allow_coalescing_columns_in_partition_or_order_key {#allow_coalescing_columns_in_partition_or_order_key} - - - - -Если включена, позволяет использовать объединяемые столбцы в таблице CoalescingMergeTree в качестве ключа партиционирования или сортировки. - - - -## allow_experimental_replacing_merge_with_cleanup {#allow_experimental_replacing_merge_with_cleanup} - - - - -Разрешает экспериментальные слияния CLEANUP для ReplacingMergeTree со столбцом -`is_deleted`. При включении позволяет использовать `OPTIMIZE ... FINAL CLEANUP` -для ручного слияния всех частей в разделе в одну часть и удаления любых -удалённых строк. - -Также позволяет включить автоматическое выполнение таких слияний в фоновом режиме с -использованием настроек `min_age_to_force_merge_seconds`, -`min_age_to_force_merge_on_partition_only` и -`enable_replacing_merge_with_cleanup_for_min_age_to_force_merge`. - - - -## allow_experimental_reverse_key - - - - - - - -Включает поддержку сортировки по убыванию в ключах сортировки MergeTree. Этот -параметр особенно полезен для анализа временных рядов и запросов Top-N, -позволяя хранить данные в обратном хронологическом порядке для оптимизации -производительности запросов. - -При включённом `allow_experimental_reverse_key` вы можете задавать порядок -сортировки по убыванию в выражении `ORDER BY` таблицы MergeTree. Это позволяет -использовать более эффективные оптимизации `ReadInOrder` вместо `ReadInReverseOrder` -для запросов с сортировкой по убыванию. - -**Пример** - -```sql -CREATE TABLE example -( -time DateTime, -key Int32, -value String -) ENGINE = MergeTree -ORDER BY (time DESC, key) -- Сортировка по убыванию по полю 'time' -SETTINGS allow_experimental_reverse_key = 1; - -SELECT * FROM example WHERE key = 'xxx' ORDER BY time DESC LIMIT 10; -``` - -При указании в запросе `ORDER BY time DESC` применяется `ReadInOrder`. - -**Значение по умолчанию:** false - - -## allow_floating_point_partition_key {#allow_floating_point_partition_key} - - -Разрешает использование чисел с плавающей запятой в качестве ключа партиционирования. - -Возможные значения: -- `0` — Ключ партиционирования с плавающей запятой не разрешён. -- `1` — Ключ партиционирования с плавающей запятой разрешён. - - - -## allow_nullable_key {#allow_nullable_key} - - -Разрешает использование типов данных Nullable в качестве первичных ключей. - - - -## allow_part_offset_column_in_projections {#allow_part_offset_column_in_projections} - - - - -Разрешает использование столбца `_part_offset` в запросах `SELECT` к проекциям. - - - -## allow_reduce_blocking_parts_task {#allow_reduce_blocking_parts_task} - - - - -Фоновая задача, которая сокращает число блокирующих частей для общих таблиц MergeTree. -Только в ClickHouse Cloud. - - - -## allow_remote_fs_zero_copy_replication {#allow_remote_fs_zero_copy_replication} - - - - -Не используйте эту настройку в продакшене, так как она ещё не готова к использованию. - - - -## allow_summing_columns_in_partition_or_order_key {#allow_summing_columns_in_partition_or_order_key} - - - - -При включении разрешает использовать суммируемые столбцы таблицы SummingMergeTree -в качестве ключа партиционирования или сортировки. - - - -## allow_suspicious_indices {#allow_suspicious_indices} - - -Отклоняет первичные и вторичные индексы, а также ключи сортировки с идентичными выражениями - - - -## allow_vertical_merges_from_compact_to_wide_parts {#allow_vertical_merges_from_compact_to_wide_parts} - - -Разрешает вертикальные слияния из компактных частей в широкие. Эта настройка должна иметь одинаковое значение на всех репликах. - - - -## alter_column_secondary_index_mode {#alter_column_secondary_index_mode} - - - - -Настраивает, разрешать ли команды `ALTER`, которые изменяют столбцы, покрытые вторичными индексами, и какие действия выполнять, если они разрешены. По умолчанию такие команды `ALTER` разрешены, и индексы перестраиваются. - -Возможные значения: -- `rebuild` (по умолчанию): Перестраивает все вторичные индексы, на которые влияет столбец в команде `ALTER`. -- `throw`: Запрещает любые `ALTER` столбцов, покрытых вторичными индексами, выбрасывая исключение. -- `drop`: Удаляет зависимые вторичные индексы. Новые части данных не будут содержать этих индексов, для их восстановления требуется выполнить `MATERIALIZE INDEX`. -- `compatibility`: Соответствует исходному поведению: `throw` для `ALTER ... MODIFY COLUMN` и `rebuild` для `ALTER ... UPDATE/DELETE`. -- `ignore`: Предназначено для опытных пользователей. Оставляет индексы в несогласованном состоянии, что может приводить к некорректным результатам запросов. - - - -## always_fetch_merged_part {#always_fetch_merged_part} - - -Если параметр установлен в true, эта реплика никогда не сливает парты и всегда загружает слитые парты -с других реплик. - -Возможные значения: -- true, false - - - -## always_use_copy_instead_of_hardlinks {#always_use_copy_instead_of_hardlinks} - - -Всегда копировать данные вместо создания жёстких ссылок во время мутаций, замен, отсоединений и т. д. - - - -## apply_patches_on_merge {#apply_patches_on_merge} - - - - -Если `true`, патчи частей применяются при слиянии - - - -## assign_part_uuids {#assign_part_uuids} - - -Когда параметр включён, для каждой новой части будет назначаться уникальный идентификатор. -Перед включением убедитесь, что все реплики поддерживают UUID версии 4. - - - -## async_block_ids_cache_update_wait_ms {#async_block_ids_cache_update_wait_ms} - - -Время ожидания обновления async_block_ids_cache в каждой итерации вставки - - - -## async_insert {#async_insert} - - -При значении `true` данные из запроса INSERT помещаются в очередь и затем асинхронно записываются в таблицу в фоновом режиме. - - - -## auto_statistics_types {#auto_statistics_types} - - - - -Список типов статистики, перечисленных через запятую, которые автоматически вычисляются для всех подходящих столбцов. -Поддерживаемые типы статистики: tdigest, countmin, minmax, uniq. - - - -## background_task_preferred_step_execution_time_ms {#background_task_preferred_step_execution_time_ms} - - -Целевое время выполнения одного шага операции слияния или мутации. Может быть превышено, если выполнение одного шага занимает больше времени. - - - -## cache_populated_by_fetch {#cache_populated_by_fetch} - - -:::note -Этот параметр применяется только к ClickHouse Cloud. -::: - -Когда `cache_populated_by_fetch` отключён (значение по умолчанию), новые части -данных загружаются в кэш только при выполнении запроса, которому требуются эти -части. - -Если параметр включён, `cache_populated_by_fetch` приводит к тому, что все узлы -загружают новые части данных из хранилища в свой кэш без необходимости запуска -запроса, чтобы инициировать это действие. - -**См. также** - -- [ignore_cold_parts_seconds](/operations/settings/settings#ignore_cold_parts_seconds) -- [prefer_warmed_unmerged_parts_seconds](/operations/settings/settings#prefer_warmed_unmerged_parts_seconds) -- [cache_warmer_threads](/operations/settings/settings#cache_warmer_threads) - - - -## cache_populated_by_fetch_filename_regexp {#cache_populated_by_fetch_filename_regexp} - - - - -:::note -Этот параметр применяется только к ClickHouse Cloud. -::: - -Если значение не пустое, только файлы, имена которых соответствуют этому регулярному выражению, будут предварительно загружены в кэш после выполнения `fetch` (если включен `cache_populated_by_fetch`). - - - -## check_delay_period {#check_delay_period} - -Устаревшая настройка, не используется. -## check_sample_column_is_correct {#check_sample_column_is_correct} - - -Включает проверку при создании таблицы того, что тип данных столбца для -семплирования или выражения семплирования корректен. Тип данных должен быть одним из беззнаковых -[целочисленных типов](/sql-reference/data-types/int-uint): `UInt8`, `UInt16`, -`UInt32`, `UInt64`. - -Возможные значения: -- `true` — Проверка включена. -- `false` — Проверка при создании таблицы отключена. - -Значение по умолчанию: `true`. - -По умолчанию сервер ClickHouse при создании таблицы проверяет тип данных -столбца для семплирования или выражения семплирования. Если у вас уже есть таблицы с -некорректным выражением семплирования и вы не хотите, чтобы сервер выбрасывал исключение -во время запуска, установите для `check_sample_column_is_correct` значение `false`. - - - -## clean_deleted_rows {#clean_deleted_rows} - -Устаревшая настройка, не используется. -## cleanup_delay_period {#cleanup_delay_period} - - -Минимальный интервал для очистки старых логов очереди, хэшей блоков и кусков. - - - -## cleanup_delay_period_random_add {#cleanup_delay_period_random_add} - - -Добавляет равномерно распределённое значение от 0 до x секунд к cleanup_delay_period, -чтобы избежать проблемы «thundering herd» и последующей DoS-нагрузки на ZooKeeper в случае -очень большого числа таблиц. - - - -## cleanup_thread_preferred_points_per_iteration {#cleanup_thread_preferred_points_per_iteration} - - -Предпочитаемый размер пакета для фоновой очистки («поинты» являются абстракцией, но 1 поинт примерно соответствует 1 вставленному блоку). - - - -## cleanup_threads {#cleanup_threads} - -Устаревший параметр, ничего не делает. -## columns_and_secondary_indices_sizes_lazy_calculation {#columns_and_secondary_indices_sizes_lazy_calculation} - - - - -Лениво вычислять размеры столбцов и вторичных индексов при первом запросе, -а не при инициализации таблицы. - - - -## columns_to_prewarm_mark_cache {#columns_to_prewarm_mark_cache} - - -Список столбцов, для которых нужно предварительно прогревать кэш меток (если он включён). Пустое значение означает, что выбираются все столбцы. - - - -## compact_parts_max_bytes_to_buffer {#compact_parts_max_bytes_to_buffer} - - -Параметр доступен только в ClickHouse Cloud. Максимальный объём данных (в байтах), записываемых в один страйп в компактных партах. - - - -## compact_parts_max_granules_to_buffer {#compact_parts_max_granules_to_buffer} - - -Доступна только в ClickHouse Cloud. Максимальное количество гранул, записываемых -в один страйп компактной части - - - -## compact_parts_merge_max_bytes_to_prefetch_part {#compact_parts_merge_max_bytes_to_prefetch_part} - - -Настройка доступна только в ClickHouse Cloud. Максимальный размер компактной части, которую можно целиком прочитать в память во время слияния. - - - -## compatibility_allow_sampling_expression_not_in_primary_key {#compatibility_allow_sampling_expression_not_in_primary_key} - - -Разрешает создавать таблицы с выражением выборки, которое не входит в первичный ключ. Это требуется только для временного запуска сервера с некорректными таблицами для обеспечения обратной совместимости. - - - -## compress_marks {#compress_marks} - - -Метки поддерживают сжатие, что уменьшает размер файлов меток и ускоряет их передачу по сети. - - - -## compress_primary_key {#compress_primary_key} - - -Первичный ключ поддерживает сжатие, что уменьшает размер соответствующего файла и ускоряет передачу по сети. - - - -## concurrent_part_removal_threshold {#concurrent_part_removal_threshold} - - -Включать параллельное удаление частей (см. «max_part_removal_threads») только если -число неактивных частей данных не меньше этого порогового значения. - - - -## deduplicate_merge_projection_mode {#deduplicate_merge_projection_mode} - - - - -Разрешать ли создание проекции для таблицы с неклассическим MergeTree, -то есть не с (Replicated, Shared) MergeTree. Опция `ignore` предназначена только для -совместимости и может приводить к некорректным результатам. В противном случае, если создание -разрешено, задаётся поведение при слиянии проекций — либо удалять, либо перестраивать. Классический -MergeTree будет игнорировать этот параметр. Он также управляет `OPTIMIZE DEDUPLICATE`, -но при этом влияет на все движки семейства MergeTree. Аналогично параметру -`lightweight_mutation_projection_mode`, он действует на уровне части данных. - -Возможные значения: -- `ignore` -- `throw` -- `drop` -- `rebuild` - - - -## default_compression_codec {#default_compression_codec} - - - - -Указывает кодек сжатия по умолчанию, который будет использоваться, если для отдельного столбца в объявлении таблицы он не задан. -Порядок выбора кодека сжатия для столбца: -1. Кодек сжатия, определённый для столбца в объявлении таблицы -2. Кодек сжатия, определённый в `default_compression_codec` (этой настройке) -3. Кодек сжатия по умолчанию, определённый в настройках `compression` -Значение по умолчанию: пустая строка (не задано). - - - -## detach_not_byte_identical_parts {#detach_not_byte_identical_parts} - - -Включает или отключает отсоединение части данных на реплике после слияния или -мутации, если она не является побайтно идентичной частям данных на других репликах. Если -настройка отключена, часть данных удаляется. Включите эту настройку, если вы хотите -проанализировать такие части позже. - -Эта настройка применима к таблицам `MergeTree` с включенной -[репликацией данных](/engines/table-engines/mergetree-family/replacingmergetree). - -Возможные значения: - -- `0` — части удаляются. -- `1` — части отсоединяются. - - - -## detach_old_local_parts_when_cloning_replica {#detach_old_local_parts_when_cloning_replica} - - -Не удаляет старые локальные части при восстановлении утерянной реплики. - -Возможные значения: -- `true` -- `false` - - - -## disable_detach_partition_for_zero_copy_replication {#disable_detach_partition_for_zero_copy_replication} - - -Отключает запрос DETACH PARTITION для репликации без копирования данных. - - - -## disable_fetch_partition_for_zero_copy_replication {#disable_fetch_partition_for_zero_copy_replication} - - -Отключает запрос FETCH PARTITION для репликации без копирования данных. - - - -## disable_freeze_partition_for_zero_copy_replication {#disable_freeze_partition_for_zero_copy_replication} - - -Отключает выполнение запроса FREEZE PARTITION при репликации с нулевым копированием. - - - -## disk {#disk} - - -Имя диска для хранения данных. Может быть указано вместо политики хранения. - - - -## dynamic_serialization_version {#dynamic_serialization_version} - - - - -Версия сериализации для типа данных Dynamic. Необходима для совместимости. - -Возможные значения: -- `v1` -- `v2` -- `v3` - - - -## enable_block_number_column {#enable_block_number_column} - - -Включает сохранение столбца _block_number для каждой строки. - - - -## enable_block_offset_column {#enable_block_offset_column} - - -Сохраняет виртуальный столбец `_block_number` во время слияний. - - - -## enable_index_granularity_compression {#enable_index_granularity_compression} - - -Сжимать в памяти значения гранулярности индекса, если возможно - - - -## enable_max_bytes_limit_for_min_age_to_force_merge {#enable_max_bytes_limit_for_min_age_to_force_merge} - - - - -Определяет, должны ли настройки `min_age_to_force_merge_seconds` и -`min_age_to_force_merge_on_partition_only` учитывать значение настройки -`max_bytes_to_merge_at_max_space_in_pool`. - -Возможные значения: -- `true` -- `false` - - - -## enable_mixed_granularity_parts {#enable_mixed_granularity_parts} - - -Включает или отключает переход к управлению размером гранул с помощью настройки -`index_granularity_bytes`. До версии 19.11 существовала только настройка -`index_granularity` для ограничения размера гранул. Настройка -`index_granularity_bytes` повышает производительность ClickHouse при -выборке данных из таблиц с большими строками (десятки и сотни мегабайт). -Если у вас есть таблицы с большими строками, вы можете включить эту настройку для них, -чтобы повысить эффективность запросов `SELECT`. - - - -## enable_replacing_merge_with_cleanup_for_min_age_to_force_merge {#enable_replacing_merge_with_cleanup_for_min_age_to_force_merge} - - - - - - -Определяет, использовать ли слияния типа CLEANUP для ReplacingMergeTree при слиянии разделов -до одной части. Требует включения настроек `allow_experimental_replacing_merge_with_cleanup`, -`min_age_to_force_merge_seconds` и `min_age_to_force_merge_on_partition_only`. - -Возможные значения: -- `true` -- `false` - - - -## enable_the_endpoint_id_with_zookeeper_name_prefix {#enable_the_endpoint_id_with_zookeeper_name_prefix} - - -Включает использование идентификатора конечной точки с префиксом имени ZooKeeper для реплицируемой таблицы MergeTree. - - - -## enable_vertical_merge_algorithm {#enable_vertical_merge_algorithm} - - -Включает использование алгоритма вертикального слияния. - - - -## enforce_index_structure_match_on_partition_manipulation {#enforce_index_structure_match_on_partition_manipulation} - - - - -Если этот параметр включён для целевой таблицы в запросе операции с разделами -(`ATTACH/MOVE/REPLACE PARTITION`), индексы и проекции должны быть -идентичны в исходной и целевой таблицах. В противном случае в целевой -таблице может быть надмножество индексов и проекций по сравнению с исходной таблицей. - - - -## escape_variant_subcolumn_filenames {#escape_variant_subcolumn_filenames} - - - - -Экранирует специальные символы в именах файлов, создаваемых для подколонок типа данных Variant в Wide-частях таблицы MergeTree. Необходимо для совместимости. - - - -## exclude_deleted_rows_for_part_size_in_merge {#exclude_deleted_rows_for_part_size_in_merge} - - -Если включено, при выборе частей данных для слияния будет использоваться оценочный фактический размер частей (то есть без учета строк, которые были удалены с помощью `DELETE FROM`). Обратите внимание, что это поведение применяется только к частям данных, затронутым операцией `DELETE FROM`, выполненной после включения этой настройки. - -Возможные значения: -- `true` -- `false` - -**См. также** -- [load_existing_rows_count_for_old_parts](#load_existing_rows_count_for_old_parts) — настройка - - - -## exclude_materialize_skip_indexes_on_merge - - - -Исключает указанный список skip-индексов, разделённый запятыми, из построения и хранения при операциях слияния (merge). Не оказывает никакого эффекта, если -[materialize_skip_indexes_on_merge](#materialize_skip_indexes_on_merge) имеет значение false. - -Исключённые skip-индексы всё равно будут построены и сохранены явным запросом -[MATERIALIZE INDEX](/sql-reference/statements/alter/skipping-index.md/#materialize-index) или во время операций INSERT в зависимости от -сеансовой настройки [materialize_skip_indexes_on_insert](/operations/settings/settings.md/#materialize_skip_indexes_on_insert). - -Пример: - -```sql -CREATE TABLE tab -( -a UInt64, -b UInt64, -INDEX idx_a a TYPE minmax, -INDEX idx_b b TYPE set(3) -) -ENGINE = MergeTree ORDER BY tuple() SETTINGS exclude_materialize_skip_indexes_on_merge = 'idx_a'; - -INSERT INTO tab SELECT number, number / 50 FROM numbers(100); -- настройка не действует на INSERT - --- idx_a будет исключён из обновления при фоновом или явном слиянии через OPTIMIZE TABLE FINAL - --- можно исключить несколько индексов, передав список -ALTER TABLE tab MODIFY SETTING exclude_materialize_skip_indexes_on_merge = 'idx_a, idx_b'; - --- настройка по умолчанию, индексы не исключаются из обновления при слиянии -ALTER TABLE tab MODIFY SETTING exclude_materialize_skip_indexes_on_merge = ''; -``` - - -## execute_merges_on_single_replica_time_threshold {#execute_merges_on_single_replica_time_threshold} - - -Когда этому параметру установлено значение больше нуля, слияние немедленно запускается -только на одной реплике, а остальные реплики в течение указанного времени ожидают, -чтобы загрузить результат вместо выполнения локальных слияний. Если выбранная -реплика не завершит слияние за это время, происходит возврат к стандартному -поведению. - -Возможные значения: -- Любое положительное целое число. - - - -## fault_probability_after_part_commit {#fault_probability_after_part_commit} - - -Для тестирования. Не изменяйте этот параметр. - - - -## fault_probability_before_part_commit {#fault_probability_before_part_commit} - - -Для тестирования. Не изменяйте это значение. - - - -## finished_mutations_to_keep {#finished_mutations_to_keep} - - -Сколько записей о завершённых мутациях сохранять. Если 0, сохраняются все записи. - - - -## force_read_through_cache_for_merges {#force_read_through_cache_for_merges} - - - - -Принудительное чтение через файловый кеш при слияниях - - - -## fsync_after_insert {#fsync_after_insert} - - -Выполнять `fsync` для каждой вставленной части данных. Существенно снижает производительность вставок, не рекомендуется использовать с широкими частями. - - - -## fsync_part_directory {#fsync_part_directory} - - -Выполнять fsync для каталога части после завершения всех операций над частью (запись, переименование и т. д.). - - - -## in_memory_parts_enable_wal {#in_memory_parts_enable_wal} - -Устаревшая настройка, ничего не делает. -## in_memory_parts_insert_sync {#in_memory_parts_insert_sync} - -Устаревшая настройка, ничего не делает. -## inactive_parts_to_delay_insert {#inactive_parts_to_delay_insert} - - -Если количество неактивных частей в одной партиции таблицы превышает -значение `inactive_parts_to_delay_insert`, выполнение `INSERT` искусственно -замедляется. - -:::tip -Полезно, если сервер не успевает достаточно быстро удалять части. -::: - -Возможные значения: -- Любое положительное целое число. - - - -## inactive_parts_to_throw_insert {#inactive_parts_to_throw_insert} - - -Если число неактивных частей в одной партиции превышает значение -`inactive_parts_to_throw_insert`, выполнение `INSERT` прерывается -с ошибкой: - -> "Too many inactive parts (N). Parts cleaning are processing significantly -slower than inserts" exception." - -Возможные значения: -- Любое положительное целое число. - - - -## index_granularity {#index_granularity} - - -Максимальное количество строк данных между метками индекса. То есть, сколько строк -соответствует одному значению первичного ключа. - - - -## index_granularity_bytes {#index_granularity_bytes} - - -Максимальный размер гранулы данных в байтах. - -Чтобы ограничить размер гранулы только числом строк, установите значение `0` (не рекомендуется). - - - -## initialization_retry_period {#initialization_retry_period} - - -Интервал между попытками инициализации таблицы, в секундах. - - - -## kill_delay_period {#kill_delay_period} - -Устаревшая настройка, ничего не делает. -## kill_delay_period_random_add {#kill_delay_period_random_add} - -Устаревшая настройка, ничего не делает. -## kill_threads {#kill_threads} - -Устаревшая настройка, ничего не делает. -## lightweight_mutation_projection_mode {#lightweight_mutation_projection_mode} - - -По умолчанию облегчённая операция `DELETE` не работает для таблиц с -проекциями. Это связано с тем, что строки в проекции могут затрагиваться -операцией `DELETE`. Поэтому значение по умолчанию — `throw`. Однако эта -настройка может изменить поведение. При значении `drop` или `rebuild` -операции удаления будут работать с проекциями. `drop` удалит проекцию, поэтому -текущий запрос может выполниться быстрее, так как проекция удаляется, но -будущие запросы могут выполняться медленнее, так как проекция отсутствует. -`rebuild` будет перестраивать проекцию, что может повлиять на производительность -текущего запроса, но может ускорить будущие запросы. Преимущество в том, что эти -режимы работают только на уровне парта, то есть проекции в парте, который не -затрагивается операцией, останутся нетронутыми, и для них не будет инициировано -никаких действий, таких как удаление или перестроение. - -Возможные значения: -- `throw` -- `drop` -- `rebuild` - - - -## load_existing_rows_count_for_old_parts {#load_existing_rows_count_for_old_parts} - - -Если включено вместе с [exclude_deleted_rows_for_part_size_in_merge](#exclude_deleted_rows_for_part_size_in_merge), -количество удалённых строк в существующих частях данных будет вычисляться при -запуске таблицы. Учтите, что это может замедлить загрузку таблицы при запуске. - -Возможные значения: -- `true` -- `false` - -**См. также** -- настройка [exclude_deleted_rows_for_part_size_in_merge](#exclude_deleted_rows_for_part_size_in_merge) - - - -## lock_acquire_timeout_for_background_operations {#lock_acquire_timeout_for_background_operations} - - -Для фоновых операций, таких как слияния, мутации и т. д. Количество секунд ожидания при получении блокировок таблиц до возникновения ошибки. - - - -## marks_compress_block_size {#marks_compress_block_size} - - -Размер блока сжатия меток — фактический размер блока, который сжимается. - - - -## marks_compression_codec {#marks_compression_codec} - - -Кодек сжатия, используемый для меток. Метки достаточно малы и кэшируются, поэтому по умолчанию используется сжатие ZSTD(3). - - - -## materialize_skip_indexes_on_merge {#materialize_skip_indexes_on_merge} - - - - -Когда настройка включена, при слияниях для новых партий создаются и сохраняются пропускающие индексы. -В противном случае они могут быть созданы/сохранены явной командой [MATERIALIZE INDEX](/sql-reference/statements/alter/skipping-index.md/#materialize-index) -или [во время операций INSERT](/operations/settings/settings.md/#materialize_skip_indexes_on_insert). - -См. также [exclude_materialize_skip_indexes_on_merge](#exclude_materialize_skip_indexes_on_merge) для более детального управления. - - - -## materialize_ttl_recalculate_only {#materialize_ttl_recalculate_only} - - -Пересчитывать сведения о TTL только при выполнении MATERIALIZE TTL - - - -## max_avg_part_size_for_too_many_parts {#max_avg_part_size_for_too_many_parts} - - -Проверка «too many parts» в соответствии с `parts_to_delay_insert` и -`parts_to_throw_insert` будет выполняться только в том случае, если средний размер куска (в -соответствующей партиции) не превышает указанного порога. Если он -превышает указанный порог, операции INSERT не будут ни задерживаться, ни -отклоняться. Это позволяет иметь сотни терабайт в одной таблице на -одном сервере, если куски успешно объединяются в более крупные. Это -не влияет на пороги для неактивных кусков или общего количества кусков. - - - -## max_bytes_to_merge_at_max_space_in_pool {#max_bytes_to_merge_at_max_space_in_pool} - - -Максимальный суммарный размер кусков (в байтах), которые могут быть объединены в один кусок при наличии достаточных ресурсов. Примерно соответствует максимально возможному размеру куска, создаваемого автоматическим фоновым слиянием. (0 означает отключение слияний) - -Возможные значения: - -- Любое неотрицательное целое число. - -Планировщик слияний периодически анализирует размеры и количество кусков в -разделах и, если в пуле достаточно свободных ресурсов, запускает фоновые слияния. Слияния выполняются до тех пор, пока общий размер исходных кусков -не превысит `max_bytes_to_merge_at_max_space_in_pool`. - -Слияния, инициированные командой [OPTIMIZE FINAL](/sql-reference/statements/optimize), -игнорируют `max_bytes_to_merge_at_max_space_in_pool` (учитывается только свободное место на диске). - - - -## max_bytes_to_merge_at_min_space_in_pool {#max_bytes_to_merge_at_min_space_in_pool} - - -Максимальный суммарный размер частей (в байтах), которые будут слиты в одну -часть при минимально доступных ресурсах фонового пула. - -Возможные значения: -- Любое положительное целое число. - -`max_bytes_to_merge_at_min_space_in_pool` задаёт максимальный суммарный размер -частей, которые могут быть слиты, несмотря на недостаток доступного дискового -пространства (в пуле). Это необходимо для уменьшения количества мелких частей -и вероятности возникновения ошибок `Too many parts`. -Слияния резервируют дисковое пространство, удваивая суммарные размеры -сливаемых частей. Таким образом, при небольшом количестве свободного места -на диске может возникнуть ситуация, при которой свободное место есть, но оно -уже зарезервировано выполняющимися крупными слияниями, поэтому другие слияния -не могут запуститься, и количество мелких частей растёт с каждой вставкой данных. - - - -## max_cleanup_delay_period {#max_cleanup_delay_period} - - -Максимальный период для очистки старых журналов очереди, хешей блоков и частей. - - - -## max_compress_block_size {#max_compress_block_size} - - -Максимальный размер блоков несжатых данных перед сжатием при записи -в таблицу. Эту настройку также можно задать в глобальных настройках -(см. настройку [max_compress_block_size](/operations/settings/merge-tree-settings#max_compress_block_size)). -Значение, указанное при создании таблицы, переопределяет глобальное -значение этой настройки. - - - -## max_concurrent_queries - - - -Максимальное число запросов, которые могут выполняться одновременно для таблицы MergeTree. -Запросы также будут ограничены другими настройками `max_concurrent_queries`. - -Возможные значения: - -* Положительное целое число. -* `0` — без ограничения. - -Значение по умолчанию: `0` (без ограничения). - -**Пример** - -```xml -50 -``` - - -## max_delay_to_insert - - - -Значение в секундах, которое используется для расчёта задержки `INSERT`, если -число активных частей в одной партиции превышает значение -[parts_to_delay_insert](#parts_to_delay_insert). - -Возможные значения: - -* Любое положительное целое число. - -Задержка операции `INSERT` (в миллисекундах) рассчитывается по формуле: - -```code -max_k = parts_to_throw_insert - parts_to_delay_insert -k = 1 + parts_count_in_partition - parts_to_delay_insert -delay_milliseconds = pow(max_delay_to_insert * 1000, k / max_k) -``` - -Например, если у партиции 299 активных частей и parts_to_throw_insert -= 300, parts_to_delay_insert = 150, max_delay_to_insert = 1, выполнение `INSERT` -задерживается на `pow( 1 * 1000, (1 + 299 - 150) / (300 - 150) ) = 1000` -миллисекунд. - -Начиная с версии 23.1 формула изменена на: - -```code -allowed_parts_over_threshold = parts_to_throw_insert - parts_to_delay_insert -parts_over_threshold = parts_count_in_partition - parts_to_delay_insert + 1 -delay_milliseconds = max(min_delay_to_insert_ms, (max_delay_to_insert * 1000) -* parts_over_threshold / allowed_parts_over_threshold) -``` - -Например, если в разделе 224 активные части и parts_to_throw_insert -= 300, parts_to_delay_insert = 150, max_delay_to_insert = 1, -min_delay_to_insert_ms = 10, выполнение `INSERT` задерживается на `max( 10, 1 * 1000 * -(224 - 150 + 1) / (300 - 150) ) = 500` миллисекунд. - - -## max_delay_to_mutate_ms {#max_delay_to_mutate_ms} - - -Максимальная задержка мутации таблицы MergeTree в миллисекундах при большом количестве -незавершённых мутаций - - - -## max_digestion_size_per_segment {#max_digestion_size_per_segment} - - - - - -Устаревшая настройка, ничего не делает. -## max_file_name_length {#max_file_name_length} - - -Максимальная длина имени файла, при которой оно остается без изменений, без хеширования. -Применяется только в том случае, если включена настройка `replace_long_file_name_to_hash`. -Значение этой настройки не включает длину расширения файла, поэтому -рекомендуется задавать его ниже максимальной длины имени файла (обычно 255 -байт) с некоторым запасом, чтобы избежать ошибок файловой системы. - - - -## max_files_to_modify_in_alter_columns {#max_files_to_modify_in_alter_columns} - - -Не применять `ALTER`, если количество файлов для изменения (удаления, добавления) -превышает значение этой настройки. - -Возможные значения: - -- Любое положительное целое число. - -Значение по умолчанию: 75 - - - -## max_files_to_remove_in_alter_columns {#max_files_to_remove_in_alter_columns} - - -Не применять ALTER, если количество файлов для удаления больше этого -значения. - -Возможные значения: -- Любое положительное целое число. - - - -## max_merge_delayed_streams_for_parallel_write {#max_merge_delayed_streams_for_parallel_write} - - - - -Максимальное количество потоков (столбцов), которые могут сбрасываться на диск параллельно -(аналог `max_insert_delayed_streams_for_parallel_write` для слияний). Работает -только для вертикальных слияний. - - - -## max_merge_selecting_sleep_ms {#max_merge_selecting_sleep_ms} - - -Максимальное время ожидания перед следующей попыткой выбрать части для слияния после того, как ни одна часть не была выбрана. Более низкое значение приведёт к более частому выбору задач в background_schedule_pool, что в крупных кластерах приведёт к большому количеству запросов к ZooKeeper. - - - -## max_number_of_merges_with_ttl_in_pool {#max_number_of_merges_with_ttl_in_pool} - -Если количество слияний с записями TTL в пуле превышает заданное значение, не назначать новые слияния с TTL. Это позволяет оставить свободные потоки для обычных слияний и избежать ошибки «Too many parts». - - - -## max_number_of_mutations_for_replica {#max_number_of_mutations_for_replica} - - -Ограничивает количество мутаций частей для одной реплики указанным значением. -Нулевое значение означает отсутствие ограничения на количество мутаций для реплики (выполнение по-прежнему может ограничиваться другими настройками). - - - -## max_part_loading_threads {#max_part_loading_threads} - -Устаревшая настройка, не используется. -## max_part_removal_threads {#max_part_removal_threads} - -Устаревшая настройка, не используется. -## max_partitions_to_read {#max_partitions_to_read} - - -Ограничивает максимальное число партиций, к которым можно обратиться в одном запросе. - -Значение настройки, указанное при создании таблицы, может быть переопределено -на уровне запроса. - -Возможные значения: -- Любое положительное целое число. - -Вы также можете задать настройку сложности запроса [max_partitions_to_read](/operations/settings/settings#max_partitions_to_read) -на уровне запроса, сессии или профиля. - - - -## max_parts_in_total {#max_parts_in_total} - - -Если общее количество активных частей во всех партициях таблицы превышает -значение `max_parts_in_total`, выполнение `INSERT` прерывается с исключением `Too many parts -(N)`. - -Возможные значения: -- Любое положительное целое число. - -Большое количество частей в таблице снижает производительность запросов ClickHouse -и увеличивает время запуска ClickHouse. Чаще всего это является следствием -некорректного проектирования (ошибки при выборе стратегии партиционирования — слишком мелкие партиции). - - - -## max_parts_to_merge_at_once {#max_parts_to_merge_at_once} - - -Максимальное количество частей, которые могут быть объединены за один раз (0 — отключено). Не влияет на запрос OPTIMIZE FINAL. - - - -## max_postpone_time_for_failed_mutations_ms {#max_postpone_time_for_failed_mutations_ms} - - -Максимальное время откладывания повторного выполнения неудачных мутаций. - - - -## max_postpone_time_for_failed_replicated_fetches_ms {#max_postpone_time_for_failed_replicated_fetches_ms} - - - - -Максимальное время, на которое откладываются неудачные операции fetch репликации. - - - -## max_postpone_time_for_failed_replicated_merges_ms {#max_postpone_time_for_failed_replicated_merges_ms} - - - - -Максимальное время отложения неудавшихся реплицируемых слияний. - - - -## max_postpone_time_for_failed_replicated_tasks_ms {#max_postpone_time_for_failed_replicated_tasks_ms} - - - - -Максимальное время, на которое откладывается неуспешная задача репликации. Значение используется, если задача не является операцией `fetch`, `merge` или `mutation`. - - - -## max_projections {#max_projections} - - -Максимальное количество проекций MergeTree. - - - -## max_replicated_fetches_network_bandwidth {#max_replicated_fetches_network_bandwidth} - - -Ограничивает максимальную скорость сетевого обмена данными в байтах в секунду для [реплицированных](../../engines/table-engines/mergetree-family/replication.md) операций fetch. Этот параметр применяется к конкретной таблице, в отличие от настройки [`max_replicated_fetches_network_bandwidth_for_server`](/operations/settings/merge-tree-settings#max_replicated_fetches_network_bandwidth), которая применяется к серверу. - -Вы можете ограничить как сетевой трафик сервера, так и трафик для конкретной таблицы, но для этого значение настройки на уровне таблицы должно быть меньше, чем на уровне сервера. В противном случае сервер учитывает только настройку -`max_replicated_fetches_network_bandwidth_for_server`. - -Настройка не всегда соблюдается с идеальной точностью. - -Возможные значения: - -- Положительное целое число. -- `0` — без ограничений. - -Значение по умолчанию: `0`. - -**Использование** - -Можно использовать для ограничения скорости при репликации данных при добавлении или замене узлов. - - - -## max_replicated_logs_to_keep {#max_replicated_logs_to_keep} - - -Сколько записей может быть в журнале ClickHouse Keeper при наличии неактивной -реплики. Неактивная реплика считается потерянной, когда количество записей превышает это значение. - -Возможные значения: -- Любое положительное целое число. - - - -## max_replicated_merges_in_queue {#max_replicated_merges_in_queue} - - -Сколько заданий по слиянию и мутации частей может одновременно находиться -в очереди ReplicatedMergeTree. - - - -## max_replicated_merges_with_ttl_in_queue {#max_replicated_merges_with_ttl_in_queue} - - -Сколько задач по слиянию частей с TTL может выполняться одновременно в очереди ReplicatedMergeTree. - - - -## max_replicated_mutations_in_queue {#max_replicated_mutations_in_queue} - - -Сколько задач по изменению частей данных может одновременно находиться в очереди ReplicatedMergeTree. - - - -## max_replicated_sends_network_bandwidth {#max_replicated_sends_network_bandwidth} - - -Ограничивает максимальную скорость обмена данными по сети в байтах в -секунду для [реплицированных](/engines/table-engines/mergetree-family/replacingmergetree) -отправок. Этот параметр применяется к конкретной таблице, в отличие от -параметра [`max_replicated_sends_network_bandwidth_for_server`](/operations/settings/merge-tree-settings#max_replicated_sends_network_bandwidth), -который применяется ко всему серверу. - -Вы можете ограничить как сетевой трафик сервера, так и трафик для -конкретной таблицы, но для этого значение параметра на уровне таблицы -должно быть меньше, чем на уровне сервера. В противном случае сервер -учитывает только параметр -`max_replicated_sends_network_bandwidth_for_server`. - -Параметр не обеспечивает идеальной точности. - -Возможные значения: - -- Положительное целое число. -- `0` — без ограничений. - -**Использование** - -Может использоваться для ограничения скорости при репликации данных при -добавлении или замене узлов. - - - -## max_suspicious_broken_parts {#max_suspicious_broken_parts} - - -Если количество повреждённых кусков данных в одной партиции превышает -значение `max_suspicious_broken_parts`, автоматическое удаление не выполняется. - -Возможные значения: -- Любое положительное целое число. - - - -## max_suspicious_broken_parts_bytes {#max_suspicious_broken_parts_bytes} - - -Максимальный суммарный размер всех повреждённых частей; при превышении — автоматическое удаление запрещается. - -Возможные значения: -- Любое положительное целое число. - - - -## max_uncompressed_bytes_in_patches {#max_uncompressed_bytes_in_patches} - - - - -Максимальный несжатый объём данных во всех patch-частях в байтах. -Если объём данных во всех patch-частях превышает это значение, облегчённые обновления будут отклонены. -0 - без ограничений. - - - -## merge_max_block_size {#merge_max_block_size} - - -Количество строк, считываемых в память из сливаемых частей. - -Возможные значения: -- Любое положительное целое число. - -Слияние считывает строки из частей блоками по `merge_max_block_size` строк, -затем сливает их и записывает результат в новую часть. Считываемый блок -размещается в оперативной памяти, поэтому `merge_max_block_size` влияет на -объём ОЗУ, необходимый для слияния. Таким образом, операции слияния могут -потреблять большой объём ОЗУ для таблиц с очень широкими строками (если -средний размер строки составляет 100 КБ, то при слиянии 10 частей -(100 КБ * 10 * 8192) = ~ 8 ГБ ОЗУ). Уменьшая `merge_max_block_size`, вы можете -сократить объём ОЗУ, необходимый для слияния, но замедлите выполнение слияния. - - - -## merge_max_block_size_bytes {#merge_max_block_size_bytes} - - -Сколько байт должно быть в блоках, формируемых при операциях слияния. По умолчанию -имеет то же значение, что и `index_granularity_bytes`. - - - -## merge_max_bytes_to_prewarm_cache {#merge_max_bytes_to_prewarm_cache} - - - - -Доступен только в ClickHouse Cloud. Максимальный размер части (compact или packed) для предварительного прогрева кэша во время слияния. - - - -## merge_max_dynamic_subcolumns_in_wide_part {#merge_max_dynamic_subcolumns_in_wide_part} - - - - -Максимальное количество динамических подстолбцов (subcolumns), которое может быть создано в каждом столбце части данных формата Wide после слияния. -Позволяет уменьшить количество файлов, создаваемых в части данных формата Wide, независимо от динамических параметров, указанных в типе данных. - -Например, если таблица имеет столбец типа JSON(max_dynamic_paths=1024) и настройка merge_max_dynamic_subcolumns_in_wide_part установлена в значение 128, -то после слияния в часть данных формата Wide количество динамических путей в этой части будет уменьшено до 128, и только 128 путей будут записаны как динамические подстолбцы. - - - -## merge_selecting_sleep_ms {#merge_selecting_sleep_ms} - - -Минимальное время ожидания перед повторной попыткой выбрать части для слияния, если при предыдущей попытке ни одна часть не была выбрана. Более низкое значение приводит к более частому выбору задач в background_schedule_pool, что в крупных кластерах вызывает большое количество запросов к ZooKeeper. - - - -## merge_selecting_sleep_slowdown_factor {#merge_selecting_sleep_slowdown_factor} - - -Время ожидания для задачи выбора слияний умножается на этот коэффициент, когда -нет доступных слияний, и делится на него, когда слияние назначено. - - - -## merge_selector_algorithm {#merge_selector_algorithm} - - - - -Алгоритм выбора частей данных при назначении слияний - - - -## merge_selector_base {#merge_selector_base} - -Влияет на амплификацию записи при выполнении назначенных слияний (настройка для экспертов, не изменяйте ее, если не понимаете, что она делает). Применяется к селекторам слияний Simple и StochasticSimple. - - - -## merge_selector_blurry_base_scale_factor {#merge_selector_blurry_base_scale_factor} - - -Определяет, когда срабатывает логика в зависимости от числа частей в партиции. -Чем больше этот коэффициент, тем более запоздалой будет реакция. - - - -## merge_selector_enable_heuristic_to_remove_small_parts_at_right {#merge_selector_enable_heuristic_to_remove_small_parts_at_right} - - -Включить эвристический алгоритм выбора частей для слияния, который удаляет части с правого края диапазона, если их размер меньше заданной доли (0.01) суммарного размера (sum_size). -Работает для селекторов слияния Simple и StochasticSimple. - - - -## merge_selector_window_size {#merge_selector_window_size} - - -Сколько частей рассматривать одновременно. - - - -## merge_total_max_bytes_to_prewarm_cache {#merge_total_max_bytes_to_prewarm_cache} - - - - -Доступна только в ClickHouse Cloud. Максимальный суммарный размер частей данных для предварительного прогрева -кэша во время слияния. - - - -## merge_tree_clear_old_broken_detached_parts_ttl_timeout_seconds {#merge_tree_clear_old_broken_detached_parts_ttl_timeout_seconds} - -Устаревшая настройка, не оказывает никакого эффекта. -## merge_tree_clear_old_parts_interval_seconds {#merge_tree_clear_old_parts_interval_seconds} - - -Задает интервал в секундах, через который ClickHouse выполняет очистку старых -частей, журналов WAL и мутаций. - -Возможные значения: -- Любое положительное целое число. - - - -## merge_tree_clear_old_temporary_directories_interval_seconds {#merge_tree_clear_old_temporary_directories_interval_seconds} - - -Задает интервал в секундах, через который ClickHouse выполняет очистку старых -временных директорий. - -Возможные значения: -- Любое положительное целое число. - - - -## merge_tree_enable_clear_old_broken_detached {#merge_tree_enable_clear_old_broken_detached} - -Устаревшая настройка, ничего не делает. -## merge_with_recompression_ttl_timeout {#merge_with_recompression_ttl_timeout} - - -Минимальная задержка в секундах перед повторным выполнением слияния с перекомпрессией по TTL. - - - -## merge_with_ttl_timeout {#merge_with_ttl_timeout} - - -Минимальная задержка в секундах перед повторным выполнением слияния с TTL удаления. - - - -## merge_workload {#merge_workload} - - -Используется для управления тем, как ресурсы расходуются и распределяются между слияниями и другими нагрузками. Указанное значение применяется как значение параметра `workload` для фоновых слияний этой таблицы. Если значение не указано (пустая строка), вместо него используется серверный параметр `merge_workload`. - -**См. также** -- [Планирование рабочих нагрузок](/operations/workload-scheduling.md) - - - -## min_absolute_delay_to_close {#min_absolute_delay_to_close} - - -Минимальная абсолютная задержка перед закрытием, остановкой обслуживания запросов и прекращением возврата статуса OK при проверке состояния. - - - -## min_age_to_force_merge_on_partition_only {#min_age_to_force_merge_on_partition_only} - - -Следует ли применять настройку `min_age_to_force_merge_seconds` только ко всей партиции, -а не к её части. - -По умолчанию эта настройка игнорирует параметр `max_bytes_to_merge_at_max_space_in_pool` (см. -`enable_max_bytes_limit_for_min_age_to_force_merge`). - -Возможные значения: -- true, false - - - -## min_age_to_force_merge_seconds {#min_age_to_force_merge_seconds} - - -Объединяет части, если каждая часть в диапазоне старше значения -`min_age_to_force_merge_seconds`. - -По умолчанию игнорирует настройку `max_bytes_to_merge_at_max_space_in_pool` -(см. `enable_max_bytes_limit_for_min_age_to_force_merge`). - -Возможные значения: -- Положительное целое число. - - - -## min_bytes_for_compact_part {#min_bytes_for_compact_part} - -Устаревшая настройка, не используется. -## min_bytes_for_full_part_storage {#min_bytes_for_full_part_storage} - - -Доступно только в ClickHouse Cloud. Минимальный несжатый размер в байтах для -использования полного типа хранилища для части данных вместо упакованного. - - - -## min_bytes_for_wide_part {#min_bytes_for_wide_part} - - -Минимальное количество байт/строк в части данных, которая может храниться в формате `Wide`. Можно задать один, оба или ни один из этих параметров. - - - -## min_bytes_to_prewarm_caches {#min_bytes_to_prewarm_caches} - - - - -Минимальный размер (в несжатых байтах) данных для предварительного прогрева кэша меток и кэша первичного индекса для новых частей - - - -## min_bytes_to_rebalance_partition_over_jbod {#min_bytes_to_rebalance_partition_over_jbod} - - -Устанавливает минимальный объём данных в байтах для включения балансировки при распределении новых крупных -частей по дискам тома [JBOD](https://en.wikipedia.org/wiki/Non-RAID_drive_architectures). - -Возможные значения: - -- Положительное целое число. -- `0` — балансировка отключена. - -**Использование** - -Значение настройки `min_bytes_to_rebalance_partition_over_jbod` не должно -быть меньше значения -[max_bytes_to_merge_at_max_space_in_pool](/operations/settings/merge-tree-settings#max_bytes_to_merge_at_max_space_in_pool) -/ 1024. В противном случае ClickHouse генерирует исключение. - - - -## min_compress_block_size {#min_compress_block_size} - - -Минимальный размер блоков несжатых данных, необходимый для сжатия при -записи следующей метки. Этот параметр можно также задать в глобальных настройках -(см. параметр [min_compress_block_size](/operations/settings/merge-tree-settings#min_compress_block_size)). -Значение, указанное при создании таблицы, переопределяет глобальное значение -этого параметра. - - - -## min_compressed_bytes_to_fsync_after_fetch {#min_compressed_bytes_to_fsync_after_fetch} - - -Минимальное количество сжатых байт, после загрузки которых для части выполняется fsync (0 — отключено) - - - -## min_compressed_bytes_to_fsync_after_merge {#min_compressed_bytes_to_fsync_after_merge} - - -Минимальный объём сжатых данных (в байтах), после которого выполняется fsync части после слияния (0 — отключено) - - - -## min_delay_to_insert_ms {#min_delay_to_insert_ms} - - -Минимальная задержка вставки данных в таблицу MergeTree в миллисекундах, если -в одной партиции имеется много неслитых частей. - - - -## min_delay_to_mutate_ms {#min_delay_to_mutate_ms} - - -Минимальная задержка выполнения мутаций таблицы MergeTree в миллисекундах при большом количестве незавершённых мутаций - - - -## min_free_disk_bytes_to_perform_insert {#min_free_disk_bytes_to_perform_insert} - - -Минимальное количество байт, которое должно быть свободно на диске для -вставки данных. Если количество доступных свободных байт меньше -`min_free_disk_bytes_to_perform_insert`, выбрасывается исключение, и -вставка не выполняется. Обратите внимание, что этот параметр: -- учитывает параметр `keep_free_space_bytes`; -- не учитывает объём данных, который будет записан операцией -`INSERT`; -- проверяется только в том случае, если указано положительное (ненулевое) количество байт. - -Возможные значения: -- Любое положительное целое число. - -:::note -Если заданы и `min_free_disk_bytes_to_perform_insert`, и `min_free_disk_ratio_to_perform_insert`, -ClickHouse будет использовать то значение, которое позволит выполнять -вставки при большем объёме свободного дискового пространства. -::: - - - -## min_free_disk_ratio_to_perform_insert {#min_free_disk_ratio_to_perform_insert} - - -Минимальное отношение свободного пространства на диске к общему объёму диска для выполнения `INSERT`. Должно быть числом с плавающей запятой в диапазоне от 0 до 1. Обратите внимание, что этот параметр: -- учитывает значение параметра `keep_free_space_bytes`; -- не учитывает объём данных, который будет записан операцией -`INSERT`; -- проверяется только в том случае, если указано положительное (ненулевое) значение отношения. - -Возможные значения: -- Float, 0.0–1.0 - -Обратите внимание, что если заданы оба параметра — `min_free_disk_ratio_to_perform_insert` и -`min_free_disk_bytes_to_perform_insert`, ClickHouse будет ориентироваться на то значение, -которое позволит выполнять вставки при большем объёме свободного дискового пространства. - - - -## min_index_granularity_bytes {#min_index_granularity_bytes} - - -Минимально допустимый размер гранул данных в байтах. - -Чтобы предотвратить случайное создание таблиц с очень низким значением -`index_granularity_bytes`. - - - -## min_level_for_full_part_storage {#min_level_for_full_part_storage} - - - - -Доступно только в ClickHouse Cloud. Минимальный уровень парта, -начиная с которого используется полный тип хранилища для части данных вместо упакованного - - - -## min_level_for_wide_part {#min_level_for_wide_part} - - - - -Минимальный уровень парта, начиная с которого часть данных создаётся в формате `Wide` вместо `Compact`. - - - -## min_marks_to_honor_max_concurrent_queries - - - -Минимальное количество меток, считываемых запросом, при котором применяется настройка [max_concurrent_queries](#max_concurrent_queries). - -:::note -Запросы по-прежнему будут ограничены другими настройками `max_concurrent_queries`. -::: - -Возможные значения: - -* Положительное целое число. -* `0` — Отключено (ограничение `max_concurrent_queries` не применяется к запросам). - -**Пример** - -```xml -10 -``` - - -## min_merge_bytes_to_use_direct_io {#min_merge_bytes_to_use_direct_io} - - -Минимальный объем данных для операции слияния, при котором используется прямой -I/O-доступ к диску хранения. При слиянии частей данных ClickHouse вычисляет -суммарный объем всех данных, подлежащих слиянию. Если объем превышает -`min_merge_bytes_to_use_direct_io` байт, ClickHouse читает и записывает -данные на диск хранения, используя интерфейс прямого ввода-вывода (опция `O_DIRECT`). -Если `min_merge_bytes_to_use_direct_io = 0`, прямой ввод-вывод отключен. - - - -## min_parts_to_merge_at_once {#min_parts_to_merge_at_once} - - -Минимальное количество частей данных, которые селектор слияния может выбрать для слияния за один раз -(настройка для экспертов, не изменяйте, если не понимаете, что она делает). -0 — отключено. Работает для селекторов слияния Simple и StochasticSimple. - - - -## min_relative_delay_to_close {#min_relative_delay_to_close} - - -Минимальное относительное отставание от других реплик, при достижении которого реплика закрывается, прекращает обслуживать -запросы и перестаёт возвращать Ok при проверке статуса. - - - -## min_relative_delay_to_measure {#min_relative_delay_to_measure} - - -Вычислять относительную задержку реплики только если абсолютная задержка не меньше заданного значения. - - - -## min_relative_delay_to_yield_leadership {#min_relative_delay_to_yield_leadership} - -Устаревшая настройка, ничего не делает. -## min_replicated_logs_to_keep {#min_replicated_logs_to_keep} - - -Хранить примерно указанное количество последних записей в журнале ZooKeeper, даже если они -устарели. Не влияет на работу таблиц: используется только для диагностики журнала -ZooKeeper перед очисткой. - -Возможные значения: -- Любое положительное целое число. - - - -## min_rows_for_compact_part {#min_rows_for_compact_part} - -Устаревшая настройка, не используется. -## min_rows_for_full_part_storage {#min_rows_for_full_part_storage} - - -Доступна только в ClickHouse Cloud. Минимальное количество строк для использования полного типа хранения части данных вместо упакованного. - - - -## min_rows_for_wide_part {#min_rows_for_wide_part} - - -Минимальное число строк, при котором часть данных создаётся в формате `Wide` вместо `Compact`. - - - -## min_rows_to_fsync_after_merge {#min_rows_to_fsync_after_merge} - - -Минимальное количество строк, при котором выполняется fsync для части после слияния (0 — отключено) - - - -## mutation_workload {#mutation_workload} - - -Используется для управления использованием и распределением ресурсов между мутациями и другими типами нагрузок. Указанное значение используется как значение настройки `workload` для фоновых мутаций этой таблицы. Если не указано (пустая строка), то вместо этого используется серверная настройка `mutation_workload`. - -**См. также** -- [Планирование рабочих нагрузок](/operations/workload-scheduling.md) - - - -## non_replicated_deduplication_window {#non_replicated_deduplication_window} - - -Количество последних вставленных блоков в нереплицируемой -таблице [MergeTree](../../engines/table-engines/mergetree-family/mergetree.md), -для которых хранятся хэш-суммы, используемые для проверки на дубликаты. - -Возможные значения: -- Любое положительное целое число. -- `0` (отключить дедупликацию). - -Используется механизм дедупликации, аналогичный реплицируемым таблицам (см. -настройку [replicated_deduplication_window](#replicated_deduplication_window)). -Хэш-суммы созданных частей записываются в локальный файл на диске. - - - -## notify_newest_block_number {#notify_newest_block_number} - - - - - - -Сообщать в SharedJoin или SharedSet о последнем номере блока. Доступно только в ClickHouse Cloud. - - - -## number_of_free_entries_in_pool_to_execute_mutation {#number_of_free_entries_in_pool_to_execute_mutation} - - -Если количество свободных слотов в пуле меньше указанного значения, мутации частей не -выполняются. Это позволяет оставить свободные потоки для обычных слияний и -избежать ошибок «Too many parts». - -Возможные значения: -- Любое положительное целое число. - -**Использование** - -Значение настройки `number_of_free_entries_in_pool_to_execute_mutation` -должно быть меньше значения [background_pool_size](/operations/server-configuration-parameters/settings.md/#background_pool_size) -* [background_merges_mutations_concurrency_ratio](/operations/server-configuration-parameters/settings.md/#background_merges_mutations_concurrency_ratio). -В противном случае ClickHouse сгенерирует исключение. - - - -## number_of_free_entries_in_pool_to_execute_optimize_entire_partition {#number_of_free_entries_in_pool_to_execute_optimize_entire_partition} - - -Когда количество свободных слотов в пуле меньше указанного значения, не -выполнять оптимизацию всей партиции в фоновом режиме (эта задача создаётся, -когда задан `min_age_to_force_merge_seconds` и включён -`min_age_to_force_merge_on_partition_only`). Это нужно для того, чтобы оставить свободные потоки -для обычных слияний и избежать ошибки «Too many parts». - -Возможные значения: -- Положительное целое число. - -Значение настройки `number_of_free_entries_in_pool_to_execute_optimize_entire_partition` -должно быть меньше произведения -[background_pool_size](/operations/server-configuration-parameters/settings.md/#background_pool_size) -* [background_merges_mutations_concurrency_ratio](/operations/server-configuration-parameters/settings.md/#background_merges_mutations_concurrency_ratio). -В противном случае ClickHouse генерирует исключение. - - - -## number_of_free_entries_in_pool_to_lower_max_size_of_merge {#number_of_free_entries_in_pool_to_lower_max_size_of_merge} - - -Когда количество свободных элементов в пуле -(или реплицированной очереди) становится меньше указанного значения, -начинается понижение максимального размера слияния для обработки -(или постановки в очередь). -Это позволяет обрабатывать небольшие слияния, не заполняя пул -долго выполняющимися слияниями. - -Возможные значения: -- Любое положительное целое число. - - - -## number_of_mutations_to_delay {#number_of_mutations_to_delay} - -Если в таблице имеется как минимум -такое количество незавершённых мутаций, выполнение мутаций для этой таблицы искусственно замедляется. -Параметр отключается при значении 0 - - - -## number_of_mutations_to_throw {#number_of_mutations_to_throw} - - -Если в таблице есть как минимум указанное количество незавершённых мутаций, генерируется исключение «Too many mutations». -Опция отключается при значении 0. - - - -## number_of_partitions_to_consider_for_merge {#number_of_partitions_to_consider_for_merge} - - - - -Доступно только в ClickHouse Cloud. Для слияния рассматриваются до N партиций с наибольшим приоритетом. Партиции выбираются случайным взвешенным образом, где вес равен количеству частей данных, которые можно объединить в этой партиции. - - - -## object_serialization_version {#object_serialization_version} - - - - -Версия сериализации для типа данных JSON. Необходима для обеспечения совместимости. - -Возможные значения: -- `v1` -- `v2` -- `v3` - -Только версия `v3` поддерживает изменение версии сериализации разделяемых данных. - - - -## object_shared_data_buckets_for_compact_part {#object_shared_data_buckets_for_compact_part} - - - - -Число бакетов для JSON-сериализации общих данных в компактных партах. Работает с сериализациями общих данных `map_with_buckets` и `advanced`. - - - -## object_shared_data_buckets_for_wide_part {#object_shared_data_buckets_for_wide_part} - - - - -Количество бакетов для JSON-сериализации общих данных в широких частях. Работает с сериализациями общих данных `map_with_buckets` и `advanced`. - - - -## object_shared_data_serialization_version {#object_shared_data_serialization_version} - - - - -Версия сериализации для общих данных внутри типа данных JSON. - -Возможные значения: -- `map` — хранить общие данные как `Map(String, String)` -- `map_with_buckets` — хранить общие данные в виде нескольких отдельных столбцов `Map(String, String)`. Использование бакетов (buckets) улучшает чтение отдельных путей из общих данных. -- `advanced` — специальная сериализация общих данных, предназначенная для значительного ускорения чтения отдельных путей из общих данных. -Обратите внимание, что эта сериализация увеличивает объем занимаемого общими данными места на диске, поскольку хранится много дополнительной информации. - -Количество бакетов для сериализаций `map_with_buckets` и `advanced` определяется настройками -[object_shared_data_buckets_for_compact_part](#object_shared_data_buckets_for_compact_part)/[object_shared_data_buckets_for_wide_part](#object_shared_data_buckets_for_wide_part). - - - -## object_shared_data_serialization_version_for_zero_level_parts {#object_shared_data_serialization_version_for_zero_level_parts} - - - - -Этот параметр позволяет задать версию сериализации разделяемых данных типа JSON для частей нулевого уровня, которые создаются при вставках. -Рекомендуется не использовать `advanced`-сериализацию разделяемых данных для частей нулевого уровня, поскольку это может значительно увеличить время вставки данных. - - - -## old_parts_lifetime {#old_parts_lifetime} - - -Время (в секундах) хранения неактивных частей для защиты от потери данных -во время неожиданных перезагрузок сервера. - -Возможные значения: -- Любое положительное целое число. - -После слияния нескольких частей в новую часть ClickHouse помечает исходные -части как неактивные и удаляет их только по истечении `old_parts_lifetime` секунд. -Неактивные части удаляются, если они не используются текущими запросами, то есть если -`refcount` части равен 1. - -Для новых частей не вызывается `fsync`, поэтому некоторое время новые части существуют -только в RAM сервера (кэше ОС). Если произойдёт неожиданная перезагрузка сервера, новые -части могут быть потеряны или повреждены. Для защиты данных неактивные части не удаляются -сразу. - -При запуске ClickHouse проверяет целостность частей. Если слитая -часть повреждена, ClickHouse возвращает неактивные части в список активных -и позже снова их сливает. Затем повреждённая часть переименовывается (добавляется префикс `broken_`) -и перемещается в каталог `detached`. Если слитая часть -не повреждена, исходные неактивные части переименовываются (добавляется префикс `ignored_`) -и перемещаются в каталог `detached`. - -Значение по умолчанию для `dirty_expire_centisecs` (настройка ядра Linux) — 30 -секунд (максимальное время, в течение которого записанные данные хранятся только в RAM), но при -большой нагрузке на дисковую подсистему данные могут быть записаны значительно позже. Экспериментально -для `old_parts_lifetime` было выбрано значение 480 секунд, в течение которых -новая часть гарантированно будет записана на диск. - - - -## optimize_row_order {#optimize_row_order} - - -Управляет оптимизацией порядка строк во время вставок, чтобы повысить -степень сжатия только что вставленной части таблицы. - -Оказывает влияние только на обычные таблицы движка MergeTree. Не влияет на -специализированные таблицы движка MergeTree (например, CollapsingMergeTree). - -Таблицы MergeTree могут (опционально) сжиматься с использованием [кодеков сжатия](/sql-reference/statements/create/table#column_compression_codec). -Универсальные кодеки сжатия, такие как LZ4 и ZSTD, достигают максимальных коэффициентов -сжатия, если данные демонстрируют выраженные шаблоны. Длинные последовательности -одинаковых значений обычно очень хорошо сжимаются. - -Если этот параметр включен, ClickHouse пытается сохранить данные во вновь -вставляемых частях в таком порядке строк, который минимизирует количество -последовательностей одинаковых значений по столбцам новой части таблицы. -Другими словами, небольшое количество последовательностей одинаковых значений -означает, что отдельные последовательности длинные и хорошо сжимаются. - -Нахождение оптимального порядка строк вычислительно неразрешимо (NP-трудно). -Поэтому ClickHouse использует эвристику, чтобы быстро найти порядок строк, -который всё же улучшает коэффициенты сжатия по сравнению с исходным порядком строк. - -
- -Эвристика поиска порядка строк - -В общем случае строки таблицы (или части таблицы) можно свободно -переставлять, так как SQL считает одну и ту же таблицу (часть таблицы) с разным -порядком строк эквивалентной. - -Эта свобода перестановки строк ограничивается, когда для таблицы определён -первичный ключ. В ClickHouse первичный ключ `C1, C2, ..., CN` требует, чтобы -строки таблицы были отсортированы по столбцам `C1`, `C2`, ... `Cn` ([кластеризованный индекс](https://en.wikipedia.org/wiki/Database_index#Clustered)). -В результате строки можно переставлять только внутри «классов эквивалентности» -строк, то есть строк, имеющих одинаковые значения в столбцах первичного ключа. -Интуитивно понятно, что первичные ключи с высокой кардинальностью, например -первичные ключи, включающие столбец временной метки типа `DateTime64`, -приводят к большому количеству маленьких классов эквивалентности. Аналогично, -таблицы с первичным ключом низкой кардинальности создают небольшое количество -больших классов эквивалентности. Таблица без первичного ключа представляет -собой крайний случай одного класса эквивалентности, охватывающего все строки. - -Чем меньше по количеству и чем крупнее по размеру классы эквивалентности, -тем выше степень свободы при повторной перестановке строк. - -Эвристика, применяемая для нахождения наилучшего порядка строк внутри каждого -класса эквивалентности, предложена D. Lemire, O. Kaser в -[Reordering columns for smaller indexes](https://doi.org/10.1016/j.ins.2011.02.002) -и основана на сортировке строк внутри каждого класса эквивалентности -по возрастанию кардинальности столбцов, не входящих в первичный ключ. - -Она выполняет три шага: -1. Найти все классы эквивалентности на основе значений строк в столбцах первичного ключа. -2. Для каждого класса эквивалентности вычислить (обычно оценить) кардинальности -столбцов, не входящих в первичный ключ. -3. Для каждого класса эквивалентности отсортировать строки в порядке возрастания -кардинальности столбцов, не входящих в первичный ключ. - -
- -При включении этого параметра операции вставки несут дополнительные затраты -CPU на анализ и оптимизацию порядка строк новых данных. Ожидается, что операции -INSERT будут выполняться на 30–50% дольше в зависимости от характеристик данных. -Коэффициенты сжатия LZ4 или ZSTD в среднем улучшаются на 20–40%. - -Этот параметр лучше всего работает для таблиц без первичного ключа или с -первичным ключом низкой кардинальности, то есть для таблиц с небольшим числом -различных значений первичного ключа. Первичные ключи высокой кардинальности, -например включающие столбцы временной метки типа `DateTime64`, маловероятно -получат выигрыш от этого параметра. - - - -## part_moves_between_shards_delay_seconds {#part_moves_between_shards_delay_seconds} - - - - -Время ожидания перед и после перемещения частей между шардами. - - - -## part_moves_between_shards_enable {#part_moves_between_shards_enable} - - - - -Экспериментальная/незавершённая возможность перемещения частей между шардами. Не учитывает -выражения для шардинга. - - - -## parts_to_delay_insert {#parts_to_delay_insert} - - -Если количество активных частей в одном разделе превышает значение -`parts_to_delay_insert`, выполнение `INSERT` искусственно замедляется. - -Возможные значения: -- Любое положительное целое число. - -ClickHouse искусственно увеличивает время выполнения `INSERT` (добавляет "sleep"), чтобы -фоновый процесс слияния мог объединять части быстрее, чем они добавляются. - - - -## parts_to_throw_insert {#parts_to_throw_insert} - - -Если количество активных частей в одном разделе превышает значение -`parts_to_throw_insert`, выполнение `INSERT` прерывается с исключением -`Too many parts (N). Merges are processing significantly slower than inserts`. - -Возможные значения: -- Любое положительное целое число. - -Для достижения максимальной производительности запросов `SELECT` необходимо -минимизировать количество обрабатываемых частей, см. [Merge Tree](/development/architecture#merge-tree). - -До версии 23.6 этот параметр имел значение 300. Вы можете задать -более высокое значение — это уменьшит вероятность ошибки `Too many parts`, -но при этом производительность `SELECT` может снизиться. Также в случае -проблем со слияниями (например, из‑за недостатка дискового пространства) вы -обнаружите их позже, чем при исходном значении 300. - - - - -## prefer_fetch_merged_part_size_threshold {#prefer_fetch_merged_part_size_threshold} - - -Если сумма размеров кусков превышает этот порог и время, прошедшее с момента создания -записи в журнале репликации, превышает -`prefer_fetch_merged_part_time_threshold`, то предпочтительнее получать -слитый кусок с реплики, чем выполнять слияние локально. Это позволяет -ускорить очень долгие слияния. - -Возможные значения: -- Любое положительное целое число. - - - -## prefer_fetch_merged_part_time_threshold {#prefer_fetch_merged_part_time_threshold} - - -Если время, прошедшее с момента создания записи в журнале репликации (ClickHouse Keeper или ZooKeeper), -превышает это пороговое значение и суммарный размер частей -больше, чем `prefer_fetch_merged_part_size_threshold`, то предпочтительнее получить -слитую часть с реплики вместо выполнения слияния локально. Это позволяет ускорить очень долгие слияния. - -Возможные значения: -- Любое положительное целое число. - - - -## prewarm_mark_cache {#prewarm_mark_cache} - -Если установлено значение true, кэш меток будет предварительно прогреваться путём сохранения меток в кэш при вставках, слияниях, выборках и при запуске сервера. - - - -## prewarm_primary_key_cache {#prewarm_primary_key_cache} - - - -Если имеет значение `true`, кэш первичного индекса -будет предварительно прогреваться путём сохранения меток в кэше меток при вставках, слияниях, -чтениях и при запуске сервера. - - - -## primary_key_compress_block_size {#primary_key_compress_block_size} - - -Размер первичного блока сжатия — фактический размер блока, подлежащего сжатию. - - - -## primary_key_compression_codec {#primary_key_compression_codec} - - -Кодек сжатия, используемый для первичного ключа. Поскольку первичный ключ достаточно мал и кэшируется, кодеком сжатия по умолчанию является ZSTD(3). - - - -## primary_key_lazy_load {#primary_key_lazy_load} - -Загружает первичный ключ в память при первом использовании, а не при инициализации таблицы. Это может сэкономить память при наличии большого числа таблиц. - - - -## primary_key_ratio_of_unique_prefix_values_to_skip_suffix_columns {#primary_key_ratio_of_unique_prefix_values_to_skip_suffix_columns} - - -Если значение столбца первичного ключа в части данных меняется как минимум в -такой доле случаев, последующие столбцы не загружаются в память. Это позволяет экономить -память за счёт того, что не загружаются неиспользуемые столбцы первичного ключа. - - - -## ratio_of_defaults_for_sparse_serialization - - - -Минимальное отношение количества *значений по умолчанию* к количеству *всех* значений -в столбце. При таком значении столбец хранится с использованием -разреженной сериализации. - -Если столбец разреженный (содержит преимущественно нули), ClickHouse может кодировать его -в разреженном формате и автоматически оптимизировать вычисления — данные не требуют -полной декомпрессии при выполнении запросов. Чтобы включить эту разреженную -сериализацию, задайте настройку `ratio_of_defaults_for_sparse_serialization` -меньше 1.0. Если значение больше или равно 1.0, -столбцы всегда будут записываться с использованием обычной полной сериализации. - -Возможные значения: - -* Число с плавающей запятой между `0` и `1` для включения разреженной сериализации -* `1.0` (или больше), если вы не хотите использовать разреженную сериализацию - -**Пример** - -Обратите внимание, что столбец `s` в следующей таблице содержит пустую строку в 95% -строк. В `my_regular_table` мы не используем разреженную сериализацию, а в -`my_sparse_table` задаём `ratio_of_defaults_for_sparse_serialization`, равный -0.95: - -```sql -CREATE TABLE my_regular_table -( -`id` UInt64, -`s` String -) -ENGINE = MergeTree -ORDER BY id; - -INSERT INTO my_regular_table -SELECT -number AS id, -number % 20 = 0 ? toString(number): '' AS s -FROM -numbers(10000000); - - -CREATE TABLE my_sparse_table -( -`id` UInt64, -`s` String -) -ENGINE = MergeTree -ORDER BY id -SETTINGS ratio_of_defaults_for_sparse_serialization = 0.95; - -INSERT INTO my_sparse_table -SELECT -number, -number % 20 = 0 ? toString(number): '' -FROM -numbers(10000000); -``` - -Обратите внимание, что столбец `s` в `my_sparse_table` использует меньше дискового пространства: - -```sql -SELECT table, name, data_compressed_bytes, data_uncompressed_bytes FROM system.columns -WHERE table LIKE 'my_%_table'; -``` - -```response -┌─table────────────┬─name─┬─data_compressed_bytes─┬─data_uncompressed_bytes─┐ -│ my_regular_table │ id │ 37790741 │ 75488328 │ -│ my_regular_table │ s │ 2451377 │ 12683106 │ -│ my_sparse_table │ id │ 37790741 │ 75488328 │ -│ my_sparse_table │ s │ 2283454 │ 9855751 │ -└──────────────────┴──────┴───────────────────────┴─────────────────────────┘ -``` - -Вы можете проверить, используется ли в столбце разрежённое кодирование, просмотрев -столбец `serialization_kind` в таблице `system.parts_columns`: - -```sql -SELECT column, serialization_kind FROM system.parts_columns -WHERE table LIKE 'my_sparse_table'; -``` - -Вы можете увидеть, какие части `s` были сохранены с помощью разреженной сериализации: - -```response -┌─column─┬─serialization_kind─┐ -│ id │ Default │ -│ s │ Default │ -│ id │ Default │ -│ s │ Default │ -│ id │ Default │ -│ s │ Sparse │ -│ id │ Default │ -│ s │ Sparse │ -│ id │ Default │ -│ s │ Sparse │ -│ id │ Default │ -│ s │ Sparse │ -│ id │ Default │ -│ s │ Sparse │ -│ id │ Default │ -│ s │ Sparse │ -│ id │ Default │ -│ s │ Sparse │ -│ id │ Default │ -│ s │ Sparse │ -│ id │ Default │ -│ s │ Sparse │ -└────────┴────────────────────┘ -``` - - -## reduce_blocking_parts_sleep_ms {#reduce_blocking_parts_sleep_ms} - - - - -Доступен только в ClickHouse Cloud. Минимальное время ожидания перед повторной попыткой -уменьшить количество блокирующих частей, если ни один диапазон не был -удалён или заменён. Более низкое значение приводит к более частому запуску задач в -`background_schedule_pool`, что в крупных кластерах приводит к большому числу запросов -к ZooKeeper. - - - -## refresh_parts_interval {#refresh_parts_interval} - - - - -Если значение больше нуля, периодически обновляет список частей данных из базовой файловой системы, чтобы проверить, были ли данные обновлены на уровне хранилища. -Может быть задано только в том случае, если таблица размещена на дисках только для чтения (что означает, что это реплика только для чтения, а данные записываются другой репликой). - - - -## refresh_statistics_interval {#refresh_statistics_interval} - - - - -Интервал обновления кэша статистики в секундах. Если значение равно нулю, обновление отключено. - - - -## remote_fs_execute_merges_on_single_replica_time_threshold {#remote_fs_execute_merges_on_single_replica_time_threshold} - - -Когда эта настройка имеет значение больше нуля, только одна реплика немедленно -запускает слияние, если объединённая часть находится в общем хранилище. - -:::note -Репликация zero-copy не готова для промышленной эксплуатации. -Репликация zero-copy по умолчанию отключена в ClickHouse версии 22.8 и -выше. - -Эту функцию не рекомендуется использовать в промышленной эксплуатации. -::: - -Возможные значения: -- Любое положительное целое число. - - - -## remote_fs_zero_copy_path_compatible_mode {#remote_fs_zero_copy_path_compatible_mode} - - - - -Выполнять операции zero-copy в совместимом режиме в процессе конвертации. - - - -## remote_fs_zero_copy_zookeeper_path {#remote_fs_zero_copy_zookeeper_path} - - - - -Путь в ZooKeeper для информации механизма zero-copy, не зависящей от таблиц. - - - -## remove_empty_parts {#remove_empty_parts} - - -Удалять пустые части, образовавшиеся после применения TTL, мутаций или алгоритма слияния Collapsing. - - - -## remove_rolled_back_parts_immediately {#remove_rolled_back_parts_immediately} - - - - -Настройка для экспериментальной, ещё не завершённой функции. - - - -## remove_unused_patch_parts {#remove_unused_patch_parts} - - - - -Удаляет в фоновом режиме части патча, уже применённые ко всем активным частям. - - - -## replace_long_file_name_to_hash {#replace_long_file_name_to_hash} - - -Если имя файла столбца слишком длинное (более 'max_file_name_length' байт), заменять его на SipHash128 - - - -## replicated_can_become_leader {#replicated_can_become_leader} - - -Если `true`, реплики реплицируемых таблиц на этом узле будут пытаться стать лидером. - -Возможные значения: -- `true` -- `false` - - - -## replicated_deduplication_window {#replicated_deduplication_window} - - - - -Количество последних вставленных блоков, для которых ClickHouse Keeper хранит -хэш-суммы для проверки наличия дубликатов. - -Возможные значения: -- Любое положительное целое число. -- 0 (отключить дедупликацию) - -Команда `INSERT` создает один или несколько блоков (частей). Для -[дедупликации вставок](../../engines/table-engines/mergetree-family/replication.md) -при записи в реплицируемые таблицы ClickHouse записывает хэш-суммы -созданных частей в ClickHouse Keeper. Хэш-суммы хранятся только для -последних `replicated_deduplication_window` блоков. Самые старые хэш-суммы -удаляются из ClickHouse Keeper. - -Слишком большое значение `replicated_deduplication_window` замедляет `INSERT`, -поскольку нужно сравнивать больше записей. Хэш-сумма вычисляется из -сочетания имен и типов полей и данных вставляемой -части (потока байт). - - - -## replicated_deduplication_window_for_async_inserts {#replicated_deduplication_window_for_async_inserts} - - -Количество последних блоков асинхронных вставок, для которых ClickHouse Keeper -хранит хэш-суммы для проверки на дубликаты. - -Возможные значения: -- Любое положительное целое число. -- 0 (отключить дедупликацию для async_inserts) - -Команда [Async Insert](/operations/settings/settings#async_insert) будет -записана в один или несколько блоков (частей). Для [дедупликации вставок](/engines/table-engines/mergetree-family/replication), -при записи в реплицируемые таблицы ClickHouse записывает хэш-суммы каждой -вставки в ClickHouse Keeper. Хэш-суммы хранятся только для последних -`replicated_deduplication_window_for_async_inserts` блоков. Самые старые хэш-суммы -удаляются из ClickHouse Keeper. -Большое значение `replicated_deduplication_window_for_async_inserts` замедляет -`Async Inserts`, потому что нужно сравнивать больше записей. -Хэш-сумма вычисляется на основе комбинации имён и типов полей, -а также данных вставки (потока байт). - - - -## replicated_deduplication_window_seconds {#replicated_deduplication_window_seconds} - - - - -Количество секунд, по истечении которых хэш-суммы вставленных блоков -удаляются из ClickHouse Keeper. - -Возможные значения: -- Любое положительное целое число. - -Аналогично [replicated_deduplication_window](#replicated_deduplication_window), -`replicated_deduplication_window_seconds` определяет, как долго хранить хэш-суммы -блоков для дедупликации вставок. Хэш-суммы старше -`replicated_deduplication_window_seconds` удаляются из ClickHouse Keeper, -даже если они моложе, чем `replicated_deduplication_window`. - -Время отсчитывается относительно момента самой последней записи, а не -реального времени (wall time). Если это единственная запись, она будет храниться неограниченное время. - - - -## replicated_deduplication_window_seconds_for_async_inserts {#replicated_deduplication_window_seconds_for_async_inserts} - - -Количество секунд, по истечении которых хэш-суммы асинхронных вставок -удаляются из ClickHouse Keeper. - -Возможные значения: -- Любое положительное целое число. - -Подобно [replicated_deduplication_window_for_async_inserts](#replicated_deduplication_window_for_async_inserts), -`replicated_deduplication_window_seconds_for_async_inserts` определяет, -как долго хранить хэш-суммы блоков для дедупликации асинхронных вставок. Хэш-суммы, -которые старше `replicated_deduplication_window_seconds_for_async_inserts`, -удаляются из ClickHouse Keeper, даже если их количество меньше -`replicated_deduplication_window_for_async_inserts`. - -Время отсчитывается относительно момента самой последней записи, а не -относительно реального времени (wall time). Если это единственная запись, она будет храниться бессрочно. - - - -## replicated_fetches_http_connection_timeout {#replicated_fetches_http_connection_timeout} - -Устаревший параметр, не используется. -## replicated_fetches_http_receive_timeout {#replicated_fetches_http_receive_timeout} - -Устаревший параметр, не используется. -## replicated_fetches_http_send_timeout {#replicated_fetches_http_send_timeout} - -Устаревший параметр, не используется. -## replicated_max_mutations_in_one_entry {#replicated_max_mutations_in_one_entry} - - -Максимальное количество команд мутаций, которые могут быть объединены и выполнены -в одной записи MUTATE_PART (0 означает без ограничения). - - - -## replicated_max_parallel_fetches {#replicated_max_parallel_fetches} - -Устаревшая настройка, не используется. -## replicated_max_parallel_fetches_for_host {#replicated_max_parallel_fetches_for_host} - -Устаревшая настройка, не используется. -## replicated_max_parallel_fetches_for_table {#replicated_max_parallel_fetches_for_table} - -Устаревшая настройка, не используется. -## replicated_max_parallel_sends {#replicated_max_parallel_sends} - -Устаревшая настройка, не используется. -## replicated_max_parallel_sends_for_table {#replicated_max_parallel_sends_for_table} - -Устаревшая настройка, не используется. -## replicated_max_ratio_of_wrong_parts {#replicated_max_ratio_of_wrong_parts} - - -Если доля некорректных частей от общего числа частей меньше этого значения, запуск разрешён. - -Возможные значения: -- Float, 0.0–1.0 - - - -## search_orphaned_parts_disks {#search_orphaned_parts_disks} - - - - -ClickHouse сканирует все диски на наличие осиротевших партов при любом выполнении операций ATTACH или CREATE TABLE, -чтобы не допустить потери партов данных на неопределённых дисках (не включённых в политику хранения). -Осиротевшие парты возникают в результате потенциально небезопасной переконфигурации хранилища, например, если диск был исключён из политики хранения. -Этот параметр ограничивает набор дисков для поиска в зависимости от их характеристик. - -Возможные значения: -- any — область поиска не ограничена. -- local — область поиска ограничена локальными дисками. -- none — пустая область поиска, поиск не выполняется. - - - -## serialization_info_version {#serialization_info_version} - - - - -Версия сведений о сериализации, используемая при записи `serialization.json`. -Этот параметр необходим для обеспечения совместимости во время обновлений кластера. - -Возможные значения: -- `basic` — базовый формат. -- `with_types` — формат с дополнительным полем `types_serialization_versions`, позволяющим задавать версии сериализации по типам. -Это делает параметры, такие как `string_serialization_version`, задействованными. - -Во время поэтапных (rolling) обновлений установите значение `basic`, чтобы новые серверы создавали -части данных, совместимые со старыми серверами. После завершения обновления -переключитесь на `WITH_TYPES`, чтобы включить версии сериализации по типам. - - - -## shared_merge_tree_activate_coordinated_merges_tasks {#shared_merge_tree_activate_coordinated_merges_tasks} - - - - - - -Активирует перепланирование задач координируемых слияний. Может быть полезно даже при -shared_merge_tree_enable_coordinated_merges=0, поскольку в этом случае заполняется статистика -координатора слияний и облегчается холодный старт. - - - -## shared_merge_tree_create_per_replica_metadata_nodes {#shared_merge_tree_create_per_replica_metadata_nodes} - - - - -Включает создание узлов /metadata и /columns для каждой реплики в ZooKeeper. -Доступно только в ClickHouse Cloud. - - - -## shared_merge_tree_disable_merges_and_mutations_assignment {#shared_merge_tree_disable_merges_and_mutations_assignment} - - -Отключает назначение слияний для shared merge tree. Доступно только в ClickHouse Cloud - - - -## shared_merge_tree_empty_partition_lifetime {#shared_merge_tree_empty_partition_lifetime} - - - - -Сколько секунд раздел будет храниться в Keeper, если он не содержит частей. - - - -## shared_merge_tree_enable_automatic_empty_partitions_cleanup {#shared_merge_tree_enable_automatic_empty_partitions_cleanup} - - - - -Включает очистку записей Keeper для пустых партиций. - - - -## shared_merge_tree_enable_coordinated_merges {#shared_merge_tree_enable_coordinated_merges} - - - - - - -Включает стратегию координированных слияний - - - -## shared_merge_tree_enable_keeper_parts_extra_data {#shared_merge_tree_enable_keeper_parts_extra_data} - - - - - - -Включает запись атрибутов в виртуальные части и фиксацию блоков в Keeper - - - -## shared_merge_tree_enable_outdated_parts_check {#shared_merge_tree_enable_outdated_parts_check} - - - - -Включает проверку устаревших частей. Доступно только в ClickHouse Cloud. - - - -## shared_merge_tree_idle_parts_update_seconds {#shared_merge_tree_idle_parts_update_seconds} - - - - -Интервал в секундах для обновления партиций без срабатывания -наблюдателя ZooKeeper (watch) в общем дереве слияний (shared merge tree). Доступен только в ClickHouse Cloud. - - - -## shared_merge_tree_initial_parts_update_backoff_ms {#shared_merge_tree_initial_parts_update_backoff_ms} - - - - -Начальная задержка (backoff) для обновления частей. Доступна только в ClickHouse Cloud. - - - -## shared_merge_tree_interserver_http_connection_timeout_ms {#shared_merge_tree_interserver_http_connection_timeout_ms} - - - - -Таймауты межсерверного HTTP-подключения. Параметр доступен только в ClickHouse Cloud. - - - -## shared_merge_tree_interserver_http_timeout_ms {#shared_merge_tree_interserver_http_timeout_ms} - - - - -Тайм-ауты для HTTP-взаимодействия между серверами. Доступно только в ClickHouse Cloud. - - - -## shared_merge_tree_leader_update_period_random_add_seconds {#shared_merge_tree_leader_update_period_random_add_seconds} - - - - -Добавляет к shared_merge_tree_leader_update_period равномерно распределённое случайное значение от 0 до x секунд, чтобы избежать эффекта лавинообразной одновременной нагрузки (thundering herd effect). Параметр доступен только в ClickHouse Cloud - - - -## shared_merge_tree_leader_update_period_seconds {#shared_merge_tree_leader_update_period_seconds} - - - - -Максимальный интервал между повторными проверками статуса лидера при обновлении частей. Доступен только в -ClickHouse Cloud - - - -## shared_merge_tree_max_outdated_parts_to_process_at_once {#shared_merge_tree_max_outdated_parts_to_process_at_once} - - - - -Максимальное количество устаревших частей, которое лидер попытается подтвердить к удалению за один HTTP‑запрос. Доступно только в ClickHouse Cloud. - - - -## shared_merge_tree_max_parts_update_backoff_ms {#shared_merge_tree_max_parts_update_backoff_ms} - - - - -Максимальное время backoff при обновлении частей. Доступен только в ClickHouse Cloud - - - -## shared_merge_tree_max_parts_update_leaders_in_total {#shared_merge_tree_max_parts_update_leaders_in_total} - - - - -Максимальное количество лидеров обновления частей. Параметр доступен только в ClickHouse Cloud. - - - -## shared_merge_tree_max_parts_update_leaders_per_az {#shared_merge_tree_max_parts_update_leaders_per_az} - - - - -Максимальное количество лидеров обновления частей. Параметр доступен только в ClickHouse Cloud. - - - -## shared_merge_tree_max_replicas_for_parts_deletion {#shared_merge_tree_max_replicas_for_parts_deletion} - - - - -Максимальное число реплик, которые будут участвовать в удалении частей (killer‑поток). Доступно только в ClickHouse Cloud. - - - -## shared_merge_tree_max_replicas_to_merge_parts_for_each_parts_range {#shared_merge_tree_max_replicas_to_merge_parts_for_each_parts_range} - - - - -Максимальное число реплик, которые будут пытаться назначать потенциально конфликтующие слияния (помогает избежать избыточных конфликтов при назначении слияний). Значение 0 отключает этот механизм. Доступно только в ClickHouse Cloud. - - - -## shared_merge_tree_max_suspicious_broken_parts {#shared_merge_tree_max_suspicious_broken_parts} - - - - -Максимальное число поврежденных частей SMT; при превышении — запретить автоматическое отсоединение. - - - -## shared_merge_tree_max_suspicious_broken_parts_bytes {#shared_merge_tree_max_suspicious_broken_parts_bytes} - - - - -Максимальный размер всех подозрительно повреждённых частей для SMT; при превышении — запретить автоматическое отсоединение. - - - -## shared_merge_tree_memo_ids_remove_timeout_seconds {#shared_merge_tree_memo_ids_remove_timeout_seconds} - - - - -Как долго хранятся идентификаторы мемоизации вставок, чтобы избежать некорректных действий при повторных попытках вставки. Параметр доступен только в ClickHouse Cloud. - - - -## shared_merge_tree_merge_coordinator_election_check_period_ms {#shared_merge_tree_merge_coordinator_election_check_period_ms} - - - - - - -Время между запусками потока выбора координатора слияний - - - -## shared_merge_tree_merge_coordinator_factor {#shared_merge_tree_merge_coordinator_factor} - - - - - - -Коэффициент изменения во времени задержки потока координатора - - - -## shared_merge_tree_merge_coordinator_fetch_fresh_metadata_period_ms {#shared_merge_tree_merge_coordinator_fetch_fresh_metadata_period_ms} - - - - - - -Как часто координатор слияний должен синхронизироваться с ZooKeeper, чтобы получать актуальные метаданные. - - - -## shared_merge_tree_merge_coordinator_max_merge_request_size {#shared_merge_tree_merge_coordinator_max_merge_request_size} - - - - - - -Количество операций слияния, которые координатор может запросить у MergerMutator одновременно - - - -## shared_merge_tree_merge_coordinator_max_period_ms {#shared_merge_tree_merge_coordinator_max_period_ms} - - - - - - -Максимальное время между запусками потока координатора слияний - - - -## shared_merge_tree_merge_coordinator_merges_prepare_count {#shared_merge_tree_merge_coordinator_merges_prepare_count} - - - - - - -Количество записей о слияниях, которые координатор должен подготовить и распределить между рабочими узлами - - - -## shared_merge_tree_merge_coordinator_min_period_ms {#shared_merge_tree_merge_coordinator_min_period_ms} - - - - - - -Минимальное время между запусками потока-координатора слияний - - - -## shared_merge_tree_merge_worker_fast_timeout_ms {#shared_merge_tree_merge_worker_fast_timeout_ms} - - - - - - -Таймаут, который поток merge worker будет использовать, если потребуется обновить своё состояние после немедленного действия. - - - -## shared_merge_tree_merge_worker_regular_timeout_ms {#shared_merge_tree_merge_worker_regular_timeout_ms} - - - - - - -Время между запусками рабочего потока слияния - - - -## shared_merge_tree_outdated_parts_group_size {#shared_merge_tree_outdated_parts_group_size} - - - - -Сколько реплик будет находиться в одной группе rendezvous-хеша для очистки устаревших частей. -Доступно только в ClickHouse Cloud. - - - -## shared_merge_tree_partitions_hint_ratio_to_reload_merge_pred_for_mutations {#shared_merge_tree_partitions_hint_ratio_to_reload_merge_pred_for_mutations} - - -Повторно загружает предикат слияния в задаче выбора merge/mutate, если отношение `/` превышает значение этой настройки. Доступно только -в ClickHouse Cloud - - - -## shared_merge_tree_parts_load_batch_size {#shared_merge_tree_parts_load_batch_size} - - -Количество одновременно назначаемых заданий на выборку метаданных частей. Доступно только в -ClickHouse Cloud - - - -## shared_merge_tree_postpone_next_merge_for_locally_merged_parts_ms {#shared_merge_tree_postpone_next_merge_for_locally_merged_parts_ms} - - - - -Время хранения локально слитой части без запуска нового слияния, включающего -эту часть. Даёт другим репликам возможность забрать эту часть и начать это слияние. -Доступно только в ClickHouse Cloud. - - - -## shared_merge_tree_postpone_next_merge_for_locally_merged_parts_rows_threshold {#shared_merge_tree_postpone_next_merge_for_locally_merged_parts_rows_threshold} - - - - -Минимальный размер части (в строках), при достижении которого назначение следующего слияния откладывается сразу после её локального слияния. Доступно только в ClickHouse Cloud. - - - -## shared_merge_tree_range_for_merge_window_size {#shared_merge_tree_range_for_merge_window_size} - - - - -Время, в течение которого локально слитая часть хранится без запуска нового слияния, включающего -эту часть. Даёт другим репликам возможность запросить эту часть и запустить это слияние. -Доступно только в ClickHouse Cloud. - - - -## shared_merge_tree_read_virtual_parts_from_leader {#shared_merge_tree_read_virtual_parts_from_leader} - - - - -Читать виртуальные части с лидера, если это возможно. Доступно только в ClickHouse Cloud - - - -## shared_merge_tree_try_fetch_part_in_memory_data_from_replicas {#shared_merge_tree_try_fetch_part_in_memory_data_from_replicas} - - - - -Если параметр включён, все реплики пытаются получать данные частей, находящиеся в памяти (например, первичный -ключ, информация о партициях и т. д.), из других реплик, где они уже существуют. - - - -## shared_merge_tree_update_replica_flags_delay_ms {#shared_merge_tree_update_replica_flags_delay_ms} - - - - -Как часто реплика будет пытаться повторно загружать свои флаги по фоновому расписанию. - - - -## shared_merge_tree_use_metadata_hints_cache {#shared_merge_tree_use_metadata_hints_cache} - - - - -Включает возможность запрашивать подсказки файлового кэша (FS cache) из кэша в памяти на других репликах. Доступно только в ClickHouse Cloud. - - - -## shared_merge_tree_use_outdated_parts_compact_format {#shared_merge_tree_use_outdated_parts_compact_format} - - - - -Использовать компактный формат для устаревших частей: снижает нагрузку на Keeper и улучшает обработку устаревших частей. Доступно только в ClickHouse Cloud - - - -## shared_merge_tree_use_too_many_parts_count_from_virtual_parts {#shared_merge_tree_use_too_many_parts_count_from_virtual_parts} - - - - -Если включено, счётчик избыточного количества частей будет опираться на общие данные в Keeper, а не на состояние локальной реплики. Доступно только в ClickHouse Cloud - - - -## shared_merge_tree_virtual_parts_discovery_batch {#shared_merge_tree_virtual_parts_discovery_batch} - - - - - - -Сколько операций обнаружения партиций следует объединять в один пакет - - - -## simultaneous_parts_removal_limit {#simultaneous_parts_removal_limit} - - -Если имеется много устаревших частей, поток очистки попытается удалить до -`simultaneous_parts_removal_limit` частей за одну итерацию. -Значение `simultaneous_parts_removal_limit`, установленное в `0`, означает отсутствие ограничения. - - - -## sleep_before_commit_local_part_in_replicated_table_ms {#sleep_before_commit_local_part_in_replicated_table_ms} - - -Для тестирования. Не изменяйте. - - - -## sleep_before_loading_outdated_parts_ms {#sleep_before_loading_outdated_parts_ms} - - -Для тестирования. Не изменяйте этот параметр. - - - -## storage_policy {#storage_policy} - - -Имя политики хранения данных на диске - - - -## string_serialization_version {#string_serialization_version} - - - - -Управляет форматом сериализации для столбцов типа `String` верхнего уровня. - -Эта настройка действует только, если `serialization_info_version` установлена в значение "with_types". -Если настройка включена, столбцы `String` верхнего уровня сериализуются с отдельным подстолбцом `.size`, -в котором хранятся длины строк, а не встроенные в поток значения. Это позволяет использовать реальные подстолбцы `.size` -и может повысить эффективность сжатия. - -Вложенные типы `String` (например, внутри `Nullable`, `LowCardinality`, `Array` или `Map`) -не затрагиваются, за исключением случаев, когда они встречаются в `Tuple`. - -Возможные значения: - -- `single_stream` — использовать стандартный формат сериализации со встроенными размерами. -- `with_size_stream` — использовать отдельный поток размеров для столбцов `String` верхнего уровня. - - - -## table_disk {#table_disk} - - - - -Это диск таблицы: путь/endpoint должен указывать на данные таблицы, а не на -данные базы данных. Можно задать только для s3_plain/s3_plain_rewritable/web. - - - -## temporary_directories_lifetime {#temporary_directories_lifetime} - - -Количество секунд, в течение которых хранятся каталоги tmp_. Не следует занижать это значение, -так как при слишком низком значении этого параметра слияния и мутации могут не работать. - - - -## try_fetch_recompressed_part_timeout {#try_fetch_recompressed_part_timeout} - - -Тайм-аут (в секундах) перед запуском слияния с перекомпрессией. В течение этого -времени ClickHouse пытается получить перекомпрессированную часть с реплики, -назначенной для этого слияния с перекомпрессией. - -Перекомпрессия в большинстве случаев выполняется медленно, поэтому слияние -с перекомпрессией не запускается до истечения этого тайм-аута — в это время -система пытается получить перекомпрессированную часть с реплики, назначенной -для данного слияния с перекомпрессией. - -Возможные значения: -- Любое положительное целое число. - - - -## ttl_only_drop_parts {#ttl_only_drop_parts} - - -Определяет, будут ли части данных в таблицах MergeTree полностью удаляться, когда срок действия `TTL` для всех строк в этой части истёк. - -Когда `ttl_only_drop_parts` отключён (по умолчанию), удаляются только те строки, срок действия `TTL` для которых истёк. - -Когда `ttl_only_drop_parts` включён, вся часть удаляется, если срок действия `TTL` для всех строк в этой части истёк. - - - -## use_adaptive_write_buffer_for_dynamic_subcolumns {#use_adaptive_write_buffer_for_dynamic_subcolumns} - - -Разрешает использование адаптивных буферов записи при записи динамических подстолбцов для снижения потребления памяти - - - -## use_async_block_ids_cache {#use_async_block_ids_cache} - - -Если установлено значение `true`, хэш-суммы асинхронных вставок кэшируются. - -Возможные значения: -- `true` -- `false` - -Блок, содержащий несколько асинхронных вставок, будет генерировать несколько хэш-сумм. -Когда часть вставок дублируется, Keeper вернёт только одну -дублированную хэш-сумму в одном RPC, что приведёт к лишним повторным вызовам RPC. -Этот кэш будет отслеживать путь к хэш-суммам в Keeper. Если в Keeper отслеживаются обновления, -кэш обновится как можно быстрее, чтобы мы могли отфильтровывать -дублирующиеся вставки в памяти. - - - -## use_compact_variant_discriminators_serialization {#use_compact_variant_discriminators_serialization} - - -Включает компактный режим бинарной сериализации дискриминаторов в типе данных Variant. -Этот режим позволяет существенно уменьшить объём памяти, необходимый для хранения дискриминаторов -в частях данных, когда в основном используется один вариант или присутствует много значений NULL. - - - -## use_const_adaptive_granularity {#use_const_adaptive_granularity} - - -Всегда использовать постоянную гранулярность для всей части. Это позволяет сжимать в памяти значения гранулярности индекса. Может быть полезно при экстремально высоких нагрузках и «узких» таблицах. - - - -## use_metadata_cache {#use_metadata_cache} - -Устаревшая настройка, не оказывает эффекта. -## use_minimalistic_checksums_in_zookeeper {#use_minimalistic_checksums_in_zookeeper} - - -Использовать компактный формат (десятки байт) для контрольных сумм частей в ZooKeeper вместо обычного (десятки КБ). Перед включением убедитесь, что все реплики поддерживают новый формат. - - - -## use_minimalistic_part_header_in_zookeeper {#use_minimalistic_part_header_in_zookeeper} - - -Способ хранения заголовков частей данных в ZooKeeper. Если параметр включён, ZooKeeper -хранит меньше данных. Подробности см. [здесь](/operations/server-configuration-parameters/settings#use_minimalistic_part_header_in_zookeeper). - - - -## use_primary_key_cache {#use_primary_key_cache} - - - -Использовать кеш первичного индекса -вместо хранения всех индексов в памяти. Может быть полезно для очень больших таблиц. - - - -## vertical_merge_algorithm_min_bytes_to_activate {#vertical_merge_algorithm_min_bytes_to_activate} - - -Минимальный (приблизительный) несжатый объём данных объединяемых партов в байтах для активации -вертикального алгоритма слияния. - - - -## vertical_merge_algorithm_min_columns_to_activate {#vertical_merge_algorithm_min_columns_to_activate} - - -Минимальное количество столбцов, не входящих в первичный ключ, для включения вертикального алгоритма слияния. - - - -## vertical_merge_algorithm_min_rows_to_activate {#vertical_merge_algorithm_min_rows_to_activate} - - -Минимальная (приблизительная) суммарная количество строк в -сливаемых партах для активации алгоритма вертикального слияния. - - - -## vertical_merge_optimize_lightweight_delete {#vertical_merge_optimize_lightweight_delete} - - - - -Если параметр имеет значение true, выполняется оптимизация легковесного удаления при вертикальных слияниях. - - - -## vertical_merge_remote_filesystem_prefetch {#vertical_merge_remote_filesystem_prefetch} - - -Если установлено значение `true`, используется предварительная выборка данных из удалённой файловой системы для следующего столбца при слиянии. - - - -## wait_for_unique_parts_send_before_shutdown_ms {#wait_for_unique_parts_send_before_shutdown_ms} - - -Перед завершением работы таблица будет ожидать заданное время, чтобы уникальные части -(существующие только на текущей реплике) были запрошены другими репликами (0 означает, что ожидание отключено). - - - -## write_ahead_log_bytes_to_fsync {#write_ahead_log_bytes_to_fsync} - -Устаревшая настройка, ничего не делает. -## write_ahead_log_interval_ms_to_fsync {#write_ahead_log_interval_ms_to_fsync} - -Устаревшая настройка, ничего не делает. -## write_ahead_log_max_bytes {#write_ahead_log_max_bytes} - -Устаревшая настройка, ничего не делает. -## write_final_mark {#write_final_mark} - -Устаревшая настройка, ничего не делает. -## write_marks_for_substreams_in_compact_parts {#write_marks_for_substreams_in_compact_parts} - - - - -Включает запись меток для каждого подпотока вместо каждой колонки в компактных частях. -Это позволяет эффективно читать отдельные подколонки из части данных. - -Например, колонка `t Tuple(a String, b UInt32, c Array(Nullable(UInt32)))` сериализуется в следующие подпотоки: -- `t.a` для данных типа String элемента кортежа `a` -- `t.b` для данных типа UInt32 элемента кортежа `b` -- `t.c.size0` для размеров массива элемента кортежа `c` -- `t.c.null` для null-карты вложенных элементов массива элемента кортежа `c` -- `t.c` для данных типа UInt32 вложенных элементов массива элемента кортежа `c` - -Когда эта настройка включена, для каждого из этих 5 подпотоков записывается метка, что означает, что при необходимости можно читать -данные каждого отдельного подпотока из гранулы раздельно. Например, если нужно прочитать подколонку `t.c`, будут прочитаны только данные -подпотоков `t.c.size0`, `t.c.null` и `t.c`, и не будут читаться данные из подпотоков `t.a` и `t.b`. Когда эта настройка выключена, -записывается метка только для колонки верхнего уровня `t`, что означает, что всегда будут читаться все данные колонки из гранулы, даже если нужны только данные некоторых подпотоков. - - - -## zero_copy_concurrent_part_removal_max_postpone_ratio {#zero_copy_concurrent_part_removal_max_postpone_ratio} - - -Максимальный процент частей верхнего уровня, удаление которых можно отложить, чтобы получить более мелкие независимые диапазоны. Рекомендуется не изменять это значение. - - - -## zero_copy_concurrent_part_removal_max_split_times {#zero_copy_concurrent_part_removal_max_split_times} - - -Максимальная глубина рекурсии для разбиения независимых диапазонов устаревших частей на более мелкие поддиапазоны. Не рекомендуется изменять это значение. - - - -## zero_copy_merge_mutation_min_parts_size_sleep_before_lock {#zero_copy_merge_mutation_min_parts_size_sleep_before_lock} - - -Если включена zero-copy репликация, перед попыткой захвата блокировки при слиянии или мутации выполняется случайная пауза, величина которой зависит от размера кусков. - - - -## zero_copy_merge_mutation_min_parts_size_sleep_no_scale_before_lock {#zero_copy_merge_mutation_min_parts_size_sleep_no_scale_before_lock} - - - - -Если включена репликация в режиме zero-copy, делает паузу на случайное время (до 500 мс) перед попыткой захватить блокировку для слияния или мутации. - - - -## zookeeper_session_expiration_check_period {#zookeeper_session_expiration_check_period} - - -Периодичность проверки истечения срока действия сессии ZooKeeper, в секундах. - -Возможные значения: -- Любое положительное целое число. - diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/settings/settings-formats.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/settings/settings-formats.md index 282089da90e..3f1870f0c9f 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/settings/settings-formats.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/settings/settings-formats.md @@ -1,2803 +1,10 @@ --- -title: 'Настройки форматов' +description: 'Настройки, связанные с форматами' sidebar_label: 'Настройки форматов' slug: /operations/settings/formats +title: 'Настройки форматов' toc_max_heading_level: 2 -description: 'Настройки, которые контролируют входные и выходные форматы.' doc_type: 'reference' --- -import ExperimentalBadge from '@theme/badges/ExperimentalBadge'; -import BetaBadge from '@theme/badges/BetaBadge'; -import SettingsInfoBlock from '@theme/SettingsInfoBlock/SettingsInfoBlock'; -import VersionHistory from '@theme/VersionHistory/VersionHistory'; - -{/* Автоматически сгенерировано */ } - -Эти настройки автоматически сгенерированы из [исходного кода](https://github.com/ClickHouse/ClickHouse/blob/master/src/Core/FormatFactorySettings.h). - - -## allow_special_bool_values_inside_variant {#allow_special_bool_values_inside_variant} - - - -Позволяет разбирать значения Bool внутри типа Variant из специальных текстовых булевых значений, таких как "on", "off", "enable", "disable" и т. д. - - - -## bool_false_representation {#bool_false_representation} - - - -Текст, используемый для представления значения `false` логического типа в форматах TSV/CSV/Vertical/Pretty. - - - -## bool_true_representation {#bool_true_representation} - - - -Текстовое представление логического значения `true` в форматах TSV/CSV/Vertical/Pretty. - - - -## column_names_for_schema_inference {#column_names_for_schema_inference} - - - -Список названий столбцов, используемых для вывода схемы для форматов без названий столбцов. Формат: 'column1,column2,column3,...' - - - -## cross_to_inner_join_rewrite {#cross_to_inner_join_rewrite} - - - -Использовать `INNER JOIN` вместо запятой/`CROSS JOIN`, если в секции `WHERE` есть выражения соединения. Значения: 0 — не переписывать, 1 — по возможности применять для запятой/`CROSS JOIN`, 2 — принудительно переписывать все соединения через запятую, cross — по возможности. - - - -## date_time_64_output_format_cut_trailing_zeros_align_to_groups_of_thousands {#date_time_64_output_format_cut_trailing_zeros_align_to_groups_of_thousands} - - - -Динамически удаляет конечные нули в значениях `datetime64`, чтобы корректировать масштаб вывода до [0, 3, 6], -соответствующих «секундам», «миллисекундам» и «микросекундам». - - - -## date_time_input_format {#date_time_input_format} - - - -Позволяет выбрать парсер текстового представления даты и времени. - -Настройка не применяется к [функциям для работы с датой и временем](../../sql-reference/functions/date-time-functions.md). - -Возможные значения: - -- `'best_effort'` — Включает расширенный режим разбора. - - ClickHouse может разбирать базовый формат `YYYY-MM-DD HH:MM:SS` и все форматы даты и времени [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601). Например, `'2018-06-08T01:02:03.000Z'`. - -- `'best_effort_us'` — Аналогично `best_effort` (см. отличие в [parseDateTimeBestEffortUS](../../sql-reference/functions/type-conversion-functions#parsedatetimebesteffortus)). - -- `'basic'` — Использовать базовый парсер. - - ClickHouse может разбирать только базовый формат `YYYY-MM-DD HH:MM:SS` или `YYYY-MM-DD`. Например, `2019-08-20 10:18:56` или `2019-08-20`. - -Значение по умолчанию в ClickHouse Cloud: `'best_effort'`. - -См. также: - -- [Тип данных DateTime.](../../sql-reference/data-types/datetime.md) -- [Функции для работы с датами и временем.](../../sql-reference/functions/date-time-functions.md) - - - -## date_time_output_format {#date_time_output_format} - - - -Позволяет выбрать формат текстового представления даты и времени при выводе. - -Возможные значения: - -- `simple` — простой формат вывода. - - ClickHouse выводит дату и время в формате `YYYY-MM-DD hh:mm:ss`. Например, `2019-08-20 10:18:56`. Расчёт выполняется в соответствии с часовым поясом типа данных (если он задан) или часовым поясом сервера. - -- `iso` — формат вывода ISO. - - ClickHouse выводит дату и время в формате [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) `YYYY-MM-DDThh:mm:ssZ`. Например, `2019-08-20T10:18:56Z`. Обратите внимание, что вывод производится в UTC (`Z` означает UTC). - -- `unix_timestamp` — формат вывода Unix timestamp. - - ClickHouse выводит дату и время в формате [Unix timestamp](https://en.wikipedia.org/wiki/Unix_time). Например, `1566285536`. - -См. также: - -- [Тип данных DateTime.](../../sql-reference/data-types/datetime.md) -- [Функции для работы с датами и временем.](../../sql-reference/functions/date-time-functions.md) - - - -## date_time_overflow_behavior {#date_time_overflow_behavior} - - - -Определяет поведение при преобразовании типов [Date](../../sql-reference/data-types/date.md), [Date32](../../sql-reference/data-types/date32.md), [DateTime](../../sql-reference/data-types/datetime.md), [DateTime64](../../sql-reference/data-types/datetime64.md) или целочисленных значений в типы Date, Date32, DateTime или DateTime64, когда значение не может быть представлено в результирующем типе. - -Возможные значения: - -- `ignore` — Без уведомления игнорировать переполнения. Результат не определён. -- `throw` — Выбрасывать исключение в случае переполнения. -- `saturate` — Насыщать результат. Если значение меньше минимального значения, которое может быть представлено целевым типом, в качестве результата выбирается минимальное представимое значение. Если значение больше максимального значения, которое может быть представлено целевым типом, в качестве результата выбирается максимальное представимое значение. - -Значение по умолчанию: `ignore`. - - - -## dictionary_use_async_executor {#dictionary_use_async_executor} - - - -Запускает конвейер чтения из источника словаря в нескольких потоках. Поддерживается только словарями с локальным источником CLICKHOUSE. - - - -## errors_output_format {#errors_output_format} - - - -Метод записи ошибок в текстовый вывод. - - - -## exact_rows_before_limit {#exact_rows_before_limit} - - - -Когда этот параметр включён, ClickHouse будет возвращать точное значение статистики rows_before_limit_at_least, но ценой того, что данные до применения LIMIT придётся полностью прочитать. - - - -## format_avro_schema_registry_url {#format_avro_schema_registry_url} - - - -Для формата AvroConfluent: URL-адрес реестра схем Confluent. - - - -## format_binary_max_array_size {#format_binary_max_array_size} - - - -Максимально допустимый размер `Array` в формате `RowBinary`. Это предотвращает выделение большого объёма памяти при повреждении данных. Значение `0` означает отсутствие ограничения. - - - -## format_binary_max_string_size {#format_binary_max_string_size} - - - -Максимально допустимый размер значения типа String в формате RowBinary. Предотвращает выделение большого объёма памяти в случае повреждённых данных. Значение 0 означает отсутствие ограничения. - - - -## format_capn_proto_enum_comparising_mode {#format_capn_proto_enum_comparising_mode} - - - -Как сопоставлять перечисления Enum ClickHouse и CapnProto - - - -## format_capn_proto_use_autogenerated_schema {#format_capn_proto_use_autogenerated_schema} - - - -Использовать автоматически сгенерированную схему CapnProto, если format_schema не задан - - - -## format_csv_allow_double_quotes {#format_csv_allow_double_quotes} - - - -Если установлено в значение true, разрешает строки, заключённые в двойные кавычки. - - - -## format_csv_allow_single_quotes {#format_csv_allow_single_quotes} - - - -Если установлено в true, разрешает использование строк в одинарных кавычках. - - - -## format_csv_delimiter {#format_csv_delimiter} - - - -Символ, который будет использоваться как разделитель в данных CSV. Если задаёте значение строкой, длина строки должна быть равна 1. - - - -## format_csv_null_representation {#format_csv_null_representation} - - - -Настраиваемое представление NULL в формате CSV - - - -## format_custom_escaping_rule {#format_custom_escaping_rule} - - - -Правило экранирования полей (для формата CustomSeparated) - - - -## format_custom_field_delimiter {#format_custom_field_delimiter} - - - -Разделитель между полями (для формата CustomSeparated) - - - -## format_custom_result_after_delimiter {#format_custom_result_after_delimiter} - - - -Суффикс, добавляемый после набора результатов (для формата CustomSeparated) - - - -## format_custom_result_before_delimiter {#format_custom_result_before_delimiter} - - - -Префикс перед результирующим набором (для формата CustomSeparated) - - - -## format_custom_row_after_delimiter {#format_custom_row_after_delimiter} - - - -Разделитель после поля в последнем столбце (для формата CustomSeparated) - - - -## format_custom_row_before_delimiter {#format_custom_row_before_delimiter} - - - -Разделитель перед полем в первом столбце (для формата CustomSeparated) - - - -## format_custom_row_between_delimiter {#format_custom_row_between_delimiter} - - - -Разделитель между строками (для формата CustomSeparated) - - - -## format_display_secrets_in_show_and_select {#format_display_secrets_in_show_and_select} - - - -Включает или отключает отображение секретов в запросах `SHOW` и `SELECT` для таблиц, баз данных, -табличных функций и словарей. - -Чтобы пользователь мог видеть секреты, у него также должна быть включена -настройка сервера [`display_secrets_in_show_and_select`](../server-configuration-parameters/settings#display_secrets_in_show_and_select) -и выдана привилегия -[`displaySecretsInShowAndSelect`](/sql-reference/statements/grant#displaysecretsinshowandselect). - -Возможные значения: - -- 0 — Отключено. -- 1 — Включено. - - - -## format_json_object_each_row_column_for_object_name {#format_json_object_each_row_column_for_object_name} - - - -Имя столбца, которое будет использоваться для хранения/записи имён объектов в формате [JSONObjectEachRow](/interfaces/formats/JSONObjectEachRow). -Тип столбца должен быть `String`. Если значение не задано, им объектам будут присвоены имена по умолчанию `row_{i}`. - - - -## format_protobuf_use_autogenerated_schema {#format_protobuf_use_autogenerated_schema} - - - -Использовать автоматически сгенерированный Protobuf, если format_schema не задан - - - -## format_regexp {#format_regexp} - - - -Регулярное выражение (для формата Regexp) - - - -## format_regexp_escaping_rule {#format_regexp_escaping_rule} - - - -Правило экранирования полей (для формата Regexp) - - - -## format_regexp_skip_unmatched {#format_regexp_skip_unmatched} - - - -Пропускать строки, не соответствующие регулярному выражению (для формата Regexp) - - - -## format_schema {#format_schema} - - - -Этот параметр используется при работе с форматами, которым требуется определение схемы, такими как [Cap'n Proto](https://capnproto.org/) или [Protobuf](https://developers.google.com/protocol-buffers/). Его значение зависит от формата. - - - -## format_schema_message_name {#format_schema_message_name} - - - -Определяет имя требуемого сообщения в схеме, заданной в `format_schema`. -Чтобы сохранить совместимость с устаревшим форматом `format_schema` (`file_name:message_name`): -- Если `format_schema_message_name` не указан, имя сообщения извлекается из части `message_name` устаревшего значения `format_schema`. -- Если `format_schema_message_name` указан при использовании устаревшего формата, будет сгенерирована ошибка. - - - -## format_schema_source {#format_schema_source} - - - -Определяет источник значения `format_schema`. -Возможные значения: -- 'file' (по умолчанию): `format_schema` — это имя файла схемы, расположенного в директории `format_schemas`. -- 'string': `format_schema` — это буквальное содержимое схемы. -- 'query': `format_schema` — это запрос для получения схемы. -Когда для `format_schema_source` установлено значение 'query', применяются следующие условия: -- Запрос должен возвращать ровно одно значение: одну строку с одним столбцом строкового типа. -- Результат запроса трактуется как содержимое схемы. -- Этот результат кэшируется локально в директории `format_schemas`. -- Вы можете очистить локальный кэш с помощью команды: `SYSTEM DROP FORMAT SCHEMA CACHE FOR Files`. -- После кэширования идентичные запросы не выполняются повторно для получения схемы, пока кэш явно не очищен. -- В дополнение к локальным файлам кэша сообщения Protobuf также кэшируются в оперативной памяти. Даже после очистки локальных файлов кэша кэш в памяти необходимо очистить с помощью `SYSTEM DROP FORMAT SCHEMA CACHE [FOR Protobuf]`, чтобы полностью обновить схему. -- Выполните запрос `SYSTEM DROP FORMAT SCHEMA CACHE`, чтобы очистить кэш как для файлов кэша, так и для схем сообщений Protobuf одновременно. - - - -## format_template_resultset {#format_template_resultset} - - - -Путь к файлу, содержащему строку формата для результирующего набора (для формата Template) - - - -## format_template_resultset_format {#format_template_resultset_format} - - - -Форматная строка для результирующего набора данных (для формата Template) - - - -## format_template_row {#format_template_row} - - - -Путь к файлу, содержащему строку формата для строк (для формата Template) - - - -## format_template_row_format {#format_template_row_format} - - - -Форматная строка для строк (для формата Template) - - - -## format_template_rows_between_delimiter {#format_template_rows_between_delimiter} - - - -Разделитель строк (для формата Template) - - - -## format_tsv_null_representation {#format_tsv_null_representation} - - - -Настраиваемое представление значения NULL в формате TSV - - - -## input_format_allow_errors_num {#input_format_allow_errors_num} - - - -Устанавливает максимальное число допустимых ошибок при чтении из текстовых форматов (CSV, TSV и т. д.). - -Значение по умолчанию — 0. - -Всегда используйте вместе с `input_format_allow_errors_ratio`. - -Если при чтении строк произошла ошибка, но счётчик ошибок всё ещё меньше `input_format_allow_errors_num`, ClickHouse игнорирует строку и переходит к следующей. - -Если превышены и `input_format_allow_errors_num`, и `input_format_allow_errors_ratio`, ClickHouse генерирует исключение. - - - -## input_format_allow_errors_ratio {#input_format_allow_errors_ratio} - - - -Устанавливает максимальный процент допускаемых ошибок при чтении текстовых форматов (CSV, TSV и т. д.). -Процент ошибок задаётся числом с плавающей запятой в диапазоне от 0 до 1. - -Значение по умолчанию — 0. - -Всегда используйте этот параметр вместе с `input_format_allow_errors_num`. - -Если при чтении строк произошла ошибка, но счётчик ошибок всё ещё меньше `input_format_allow_errors_ratio`, ClickHouse игнорирует строку и переходит к следующей. - -Если превышены и `input_format_allow_errors_num`, и `input_format_allow_errors_ratio`, ClickHouse выбрасывает исключение. - - - -## input_format_allow_seeks {#input_format_allow_seeks} - - - -Позволяет выполнять произвольное позиционирование (seek) при чтении во входных форматах ORC/Parquet/Arrow. - -Включено по умолчанию. - - - -## input_format_arrow_allow_missing_columns {#input_format_arrow_allow_missing_columns} - - - -Разрешает отсутствие столбцов при чтении входных форматов Arrow - - - -## input_format_arrow_case_insensitive_column_matching {#input_format_arrow_case_insensitive_column_matching} - - - -Игнорировать регистр при сопоставлении столбцов Arrow со столбцами CH. - - - -## input_format_arrow_skip_columns_with_unsupported_types_in_schema_inference {#input_format_arrow_skip_columns_with_unsupported_types_in_schema_inference} - - - -Пропускать столбцы с неподдерживаемыми типами при определении схемы для формата Arrow - - - -## input_format_avro_allow_missing_fields {#input_format_avro_allow_missing_fields} - - - -Для форматов Avro/AvroConfluent: при отсутствии поля в схеме использовать значение по умолчанию вместо возникновения ошибки - - - -## input_format_avro_null_as_default {#input_format_avro_null_as_default} - - - -Для формата Avro/AvroConfluent: подставлять значение по умолчанию при получении NULL для столбца с типом, не допускающим NULL - - - -## input_format_binary_decode_types_in_binary_format {#input_format_binary_decode_types_in_binary_format} - - - -Читать типы данных в двоичном формате вместо названий типов во входном формате RowBinaryWithNamesAndTypes - - - -## input_format_binary_read_json_as_string {#input_format_binary_read_json_as_string} - - - -Считывает значения типа данных [JSON](../../sql-reference/data-types/newjson.md) в формате ввода RowBinary как значения типа [String](../../sql-reference/data-types/string.md), содержащие JSON. - - - -## input_format_bson_skip_fields_with_unsupported_types_in_schema_inference {#input_format_bson_skip_fields_with_unsupported_types_in_schema_inference} - - - -Пропускать поля с неподдерживаемыми типами при автоматическом определении схемы для формата BSON. - - - -## input_format_capn_proto_skip_fields_with_unsupported_types_in_schema_inference {#input_format_capn_proto_skip_fields_with_unsupported_types_in_schema_inference} - - - -Пропускать столбцы с неподдерживаемыми типами при автоматическом определении схемы для формата CapnProto - - - -## input_format_csv_allow_cr_end_of_line {#input_format_csv_allow_cr_end_of_line} - - - -Если установлено в значение true, символ \\r будет допускаться в конце строки, если за ним не следует - - - -## input_format_csv_allow_variable_number_of_columns {#input_format_csv_allow_variable_number_of_columns} - - - -Игнорировать лишние столбцы во входных данных CSV (если файл содержит больше столбцов, чем ожидается) и использовать значения по умолчанию для отсутствующих полей во входных данных CSV - - - -## input_format_csv_allow_whitespace_or_tab_as_delimiter {#input_format_csv_allow_whitespace_or_tab_as_delimiter} - - - -Разрешает использовать пробелы и табуляцию (\\t) в качестве разделителя полей в строках CSV - - - -## input_format_csv_arrays_as_nested_csv {#input_format_csv_arrays_as_nested_csv} - - - -При чтении значения типа `Array` из CSV предполагается, что его элементы были сериализованы во вложенный CSV и затем помещены в строку. Пример: \"[\"\"Hello\"\", \"\"world\"\", \"\"42\"\"\"\" TV\"\"]\". Квадратные скобки вокруг массива можно опустить. - - - -## input_format_csv_deserialize_separate_columns_into_tuple {#input_format_csv_deserialize_separate_columns_into_tuple} - - - -Если параметр установлен в значение `true`, отдельные столбцы, записанные в формате CSV, могут быть десериализованы в столбец типа Tuple. - - - -## input_format_csv_detect_header {#input_format_csv_detect_header} - - - -Автоматически определять наличие заголовка с именами и типами в формате CSV - - - -## input_format_csv_empty_as_default {#input_format_csv_empty_as_default} - - - -Рассматривать пустые поля во входных данных CSV как значения по умолчанию. - - - -## input_format_csv_enum_as_number {#input_format_csv_enum_as_number} - - - -Рассматривать вставляемые значения Enum в форматах CSV как числовые индексы перечисления - - - -## input_format_csv_skip_first_lines {#input_format_csv_skip_first_lines} - - - -Пропускает указанное количество строк в начале данных в формате CSV - - - -## input_format_csv_skip_trailing_empty_lines {#input_format_csv_skip_trailing_empty_lines} - - - -Пропускать пустые строки в конце CSV - - - -## input_format_csv_trim_whitespaces {#input_format_csv_trim_whitespaces} - - - -Удаляет пробелы и символы табуляции (\\t) в начале и в конце строк CSV - - - -## input_format_csv_try_infer_numbers_from_strings {#input_format_csv_try_infer_numbers_from_strings} - - - -Если включено, при определении схемы ClickHouse будет пытаться определять числа в строковых полях. -Это может быть полезно, если данные CSV содержат заключённые в кавычки числа типа UInt64. - -По умолчанию отключено. - - - -## input_format_csv_try_infer_strings_from_quoted_tuples {#input_format_csv_try_infer_strings_from_quoted_tuples} - - - -Интерпретирует заключённые в кавычки кортежи во входных данных как значение типа String. - - - -## input_format_csv_use_best_effort_in_schema_inference {#input_format_csv_use_best_effort_in_schema_inference} - - - -Применять дополнительные приёмы и эвристики для определения схемы по данным в формате CSV - - - -## input_format_csv_use_default_on_bad_values {#input_format_csv_use_default_on_bad_values} - - - -Позволяет задавать значение по умолчанию для столбца, если при десериализации поля CSV произошла ошибка из‑за некорректного значения - - - -## input_format_custom_allow_variable_number_of_columns {#input_format_custom_allow_variable_number_of_columns} - - - -Игнорировать лишние столбцы во входных данных CustomSeparated (если в файле больше столбцов, чем ожидается) и рассматривать отсутствующие поля во входных данных CustomSeparated как значения по умолчанию - - - -## input_format_custom_detect_header {#input_format_custom_detect_header} - - - -Автоматически распознавать заголовок с именами столбцов и их типами в формате CustomSeparated - - - -## input_format_custom_skip_trailing_empty_lines {#input_format_custom_skip_trailing_empty_lines} - - - -Пропускать пустые строки в конце в формате CustomSeparated - - - -## input_format_defaults_for_omitted_fields {#input_format_defaults_for_omitted_fields} - - - -При выполнении запросов `INSERT` пропущенные значения входных столбцов заменяются значениями по умолчанию для соответствующих столбцов. Этот параметр применяется к форматам [JSONEachRow](/interfaces/formats/JSONEachRow) (и другим JSON-форматам), [CSV](/interfaces/formats/CSV), [TabSeparated](/interfaces/formats/TabSeparated), [TSKV](/interfaces/formats/TSKV), [Parquet](/interfaces/formats/Parquet), [Arrow](/interfaces/formats/Arrow), [Avro](/interfaces/formats/Avro), [ORC](/interfaces/formats/ORC), [Native](/interfaces/formats/Native), а также к форматам с суффиксами `WithNames`/`WithNamesAndTypes`. - -:::note -Когда этот параметр включён, расширенные метаданные таблицы передаются от сервера к клиенту. Это потребляет дополнительные вычислительные ресурсы на сервере и может снизить производительность. -::: - -Возможные значения: - -- 0 — Отключено. -- 1 — Включено. - - - -## input_format_force_null_for_omitted_fields {#input_format_force_null_for_omitted_fields} - - - -Принудительно инициализировать опущенные поля значением NULL - - - -## input_format_hive_text_allow_variable_number_of_columns {#input_format_hive_text_allow_variable_number_of_columns} - - - -Игнорировать лишние столбцы во входных данных Hive Text (если файл содержит больше столбцов, чем ожидается) и обрабатывать отсутствующие поля во входных данных Hive Text как значения по умолчанию. - - - -## input_format_hive_text_collection_items_delimiter {#input_format_hive_text_collection_items_delimiter} - - - -Разделитель между элементами коллекции (array или map) в текстовом файле Hive (Hive Text File) - - - -## input_format_hive_text_fields_delimiter {#input_format_hive_text_fields_delimiter} - - - -Разделитель между полями в текстовом файле Hive - - - -## input_format_hive_text_map_keys_delimiter {#input_format_hive_text_map_keys_delimiter} - - - -Разделитель между элементами (парами ключ–значение) отображения (map) в Hive Text File - - - -## input_format_import_nested_json {#input_format_import_nested_json} - - - -Включает или отключает вставку JSON-данных со вложенными объектами. - -Поддерживаемые форматы: - -- [JSONEachRow](/interfaces/formats/JSONEachRow) - -Возможные значения: - -- 0 — Отключено. -- 1 — Включено. - -См. также: - -- [Использование вложенных структур](/integrations/data-formats/json/other-formats#accessing-nested-json-objects) с форматом `JSONEachRow`. - - - -## input_format_ipv4_default_on_conversion_error {#input_format_ipv4_default_on_conversion_error} - - - -Десериализация IPv4 будет использовать значения по умолчанию вместо выбрасывания исключения при ошибке преобразования. - -По умолчанию отключено. - - - -## input_format_ipv6_default_on_conversion_error {#input_format_ipv6_default_on_conversion_error} - - - -При десериализации IPv6-адресов вместо выбрасывания исключения при ошибке преобразования будут использоваться значения по умолчанию. - -По умолчанию параметр отключён. - - - -## input_format_json_compact_allow_variable_number_of_columns {#input_format_json_compact_allow_variable_number_of_columns} - - - -Разрешает использовать переменное количество столбцов в строках во входных форматах JSONCompact/JSONCompactEachRow. -Игнорирует лишние столбцы в строках, содержащих больше столбцов, чем ожидается, и считает отсутствующие столбцы значениями по умолчанию. - -По умолчанию отключено. - - - -## input_format_json_defaults_for_missing_elements_in_named_tuple {#input_format_json_defaults_for_missing_elements_in_named_tuple} - - - -Подставлять значения по умолчанию для отсутствующих элементов в JSON-объекте при разборе именованного кортежа. -Этот параметр работает только при включённой настройке `input_format_json_named_tuples_as_objects`. - -Включено по умолчанию. - - - -## input_format_json_empty_as_default {#input_format_json_empty_as_default} - - - -Если параметр включён, пустые поля во входном JSON заменяются значениями по умолчанию. Для сложных выражений значений по умолчанию необходимо также включить `input_format_defaults_for_omitted_fields`. - -Возможные значения: - -+ 0 — Отключено. -+ 1 — Включено. - - - -## input_format_json_ignore_unknown_keys_in_named_tuple {#input_format_json_ignore_unknown_keys_in_named_tuple} - - - -Игнорирует неизвестные ключи в JSON-объекте для именованных кортежей. - -Включено по умолчанию. - - - -## input_format_json_ignore_unnecessary_fields {#input_format_json_ignore_unnecessary_fields} - - - -Игнорировать ненужные поля и не парсить их. Включение этой настройки может привести к тому, что исключения не будут генерироваться для JSON-строк с некорректным форматом или с дублирующимися полями. - - - -## input_format_json_infer_array_of_dynamic_from_array_of_different_types - - - -Если параметр включён, во время определения схемы ClickHouse будет использовать тип Array(Dynamic) для JSON-массивов со значениями разных типов данных. - -Пример: - -```sql -SET input_format_json_infer_array_of_dynamic_from_array_of_different_types=1; -DESC format(JSONEachRow, '{"a" : [42, "hello", [1, 2, 3]]}'); -``` - -```response -┌─name─┬─type───────────┐ -│ a │ Array(Dynamic) │ -└──────┴────────────────┘ -``` - -```sql -SET input_format_json_infer_array_of_dynamic_from_array_of_different_types=0; -DESC format(JSONEachRow, '{"a" : [42, "hello", [1, 2, 3]]}'); -``` - -```response -┌─name─┬─type─────────────────────────────────────────────────────────────┐ -│ a │ Tuple(Nullable(Int64), Nullable(String), Array(Nullable(Int64))) │ -└──────┴──────────────────────────────────────────────────────────────────┘ -``` - -Включено по умолчанию. - - -## input_format_json_infer_incomplete_types_as_strings - - - -Разрешает использовать тип String для JSON-ключей, которые содержат только `Null`/`{}`/`[]` в образце данных при выводе схемы. -В JSON-форматах любое значение может быть считано как String, и мы можем избежать ошибок вида `Cannot determine type for column 'column_name' by first 25000 rows of data, most likely this column contains only Nulls or empty Arrays/Maps` при выводе схемы, -используя тип String для ключей с неизвестными типами. - -Пример: - -```sql -SET input_format_json_infer_incomplete_types_as_strings = 1, input_format_json_try_infer_named_tuples_from_objects = 1; -DESCRIBE format(JSONEachRow, '{"obj" : {"a" : [1,2,3], "b" : "hello", "c" : null, "d" : {}, "e" : []}}'); -SELECT * FROM format(JSONEachRow, '{"obj" : {"a" : [1,2,3], "b" : "hello", "c" : null, "d" : {}, "e" : []}}'); -``` - -Результат: - -``` -┌─name─┬─type───────────────────────────────────────────────────────────────────────────────────────────────────────────────────┬─default_type─┬─default_expression─┬─comment─┬─codec_expression─┬─ttl_expression─┐ -│ obj │ Tuple(a Array(Nullable(Int64)), b Nullable(String), c Nullable(String), d Nullable(String), e Array(Nullable(String))) │ │ │ │ │ │ -└──────┴────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴──────────────┴────────────────────┴─────────┴──────────────────┴────────────────┘ - -┌─obj────────────────────────────┐ -│ ([1,2,3],'hello',NULL,'{}',[]) │ -└────────────────────────────────┘ -``` - -Включено по умолчанию. - - -## input_format_json_map_as_array_of_tuples {#input_format_json_map_as_array_of_tuples} - - - -Десериализует столбцы типа Map в виде JSON-массивов кортежей. - -По умолчанию отключено. - - - -## input_format_json_max_depth {#input_format_json_max_depth} - - - -Максимальная глубина поля в JSON. Это не строгое ограничение, его не обязательно соблюдать в точности. - - - -## input_format_json_named_tuples_as_objects {#input_format_json_named_tuples_as_objects} - - - -Разбирать столбцы с именованными кортежами как объекты JSON. - -Включено по умолчанию. - - - -## input_format_json_read_arrays_as_strings - - - -Позволяет разбирать массивы JSON как строки во входных форматах JSON. - -Пример: - -```sql -SET input_format_json_read_arrays_as_strings = 1; -SELECT arr, toTypeName(arr), JSONExtractArrayRaw(arr)[3] from format(JSONEachRow, 'arr String', '{"arr" : [1, "Hello", [1,2,3]]}'); -``` - -Результат: - -``` -┌─arr───────────────────┬─toTypeName(arr)─┬─arrayElement(JSONExtractArrayRaw(arr), 3)─┐ -│ [1, "Hello", [1,2,3]] │ String │ [1,2,3] │ -└───────────────────────┴─────────────────┴───────────────────────────────────────────┘ -``` - -Включено по умолчанию. - - -## input_format_json_read_bools_as_numbers {#input_format_json_read_bools_as_numbers} - - - -Разрешает парсинг логических значений типа `bool` как чисел во входных форматах JSON. - -Включено по умолчанию. - - - -## input_format_json_read_bools_as_strings {#input_format_json_read_bools_as_strings} - - - -Разрешает интерпретировать логические значения как строки во входных форматах JSON. - -Включено по умолчанию. - - - -## input_format_json_read_numbers_as_strings {#input_format_json_read_numbers_as_strings} - - - -Позволяет разбирать числа как строки во входных форматах JSON. - -Включено по умолчанию. - - - -## input_format_json_read_objects_as_strings - - - -Разрешает парсить объекты JSON как строки во входных форматах JSON. - -Пример: - -```sql -SET input_format_json_read_objects_as_strings = 1; -CREATE TABLE test (id UInt64, obj String, date Date) ENGINE=Memory(); -INSERT INTO test FORMAT JSONEachRow {"id" : 1, "obj" : {"a" : 1, "b" : "Hello"}, "date" : "2020-01-01"}; -SELECT * FROM test; -``` - -Результат: - -``` -┌─id─┬─obj──────────────────────┬───────date─┐ -│ 1 │ {"a" : 1, "b" : "Hello"} │ 2020-01-01 │ -└────┴──────────────────────────┴────────────┘ -``` - -По умолчанию включено. - - -## input_format_json_throw_on_bad_escape_sequence {#input_format_json_throw_on_bad_escape_sequence} - - - -Выбрасывать исключение, если JSON-строка содержит некорректную escape-последовательность во входных форматах JSON. Если параметр отключен, некорректные escape-последовательности будут сохранены в данных без изменений. - -По умолчанию включен. - - - -## input_format_json_try_infer_named_tuples_from_objects - - - -Если параметр включён, при определении схемы ClickHouse будет пытаться выводить именованные `Tuple` из JSON-объектов. -Полученный именованный `Tuple` будет содержать все элементы из всех соответствующих JSON-объектов в выборке данных. - -Пример: - -```sql -SET input_format_json_try_infer_named_tuples_from_objects = 1; -DESC format(JSONEachRow, '{"obj" : {"a" : 42, "b" : "Hello"}}, {"obj" : {"a" : 43, "c" : [1, 2, 3]}}, {"obj" : {"d" : {"e" : 42}}}') -``` - -Результат: - -``` -┌─name─┬─type───────────────────────────────────────────────────────────────────────────────────────────────┬─default_type─┬─default_expression─┬─comment─┬─codec_expression─┬─ttl_expression─┐ -│ obj │ Tuple(a Nullable(Int64), b Nullable(String), c Array(Nullable(Int64)), d Tuple(e Nullable(Int64))) │ │ │ │ │ │ -└──────┴────────────────────────────────────────────────────────────────────────────────────────────────────┴──────────────┴────────────────────┴─────────┴──────────────────┴────────────────┘ -``` - -Включено по умолчанию. - - -## input_format_json_try_infer_numbers_from_strings {#input_format_json_try_infer_numbers_from_strings} - - - -Если включено, при определении схемы ClickHouse будет пытаться распознавать числовые значения в строковых полях. -Это может быть полезно, если JSON‑данные содержат заключённые в кавычки числа типа UInt64. - -По умолчанию выключено. - - - -## input_format_json_use_string_type_for_ambiguous_paths_in_named_tuples_inference_from_objects {#input_format_json_use_string_type_for_ambiguous_paths_in_named_tuples_inference_from_objects} - - - -Использовать тип String вместо генерации исключения в случае неоднозначных путей в объектах JSON при выводе типа именованных кортежей - - - -## input_format_json_validate_types_from_metadata {#input_format_json_validate_types_from_metadata} - - - -Для входных форматов JSON/JSONCompact/JSONColumnsWithMetadata, если этот параметр принимает значение 1, -типы из метаданных во входных данных будут сравниваться с типами соответствующих столбцов в таблице. - -Включено по умолчанию. - - - -## input_format_max_block_size_bytes {#input_format_max_block_size_bytes} - - - -Ограничивает размер блоков, формируемых при разборе данных во входных форматах, в байтах. Используется в построчных входных форматах, когда блок формируется на стороне ClickHouse. -0 означает отсутствие ограничения по размеру в байтах. - - - -## input_format_max_bytes_to_read_for_schema_inference {#input_format_max_bytes_to_read_for_schema_inference} - - - -Максимальный объём данных в байтах, считываемый для автоматического вывода схемы. - - - -## input_format_max_rows_to_read_for_schema_inference {#input_format_max_rows_to_read_for_schema_inference} - - - -Максимальное количество строк данных, считываемых при автоматическом определении схемы. - - - -## input_format_msgpack_number_of_columns {#input_format_msgpack_number_of_columns} - - - -Количество столбцов во вставляемых данных в формате MsgPack. Используется для автоматического вывода схемы по данным. - - - -## input_format_mysql_dump_map_column_names {#input_format_mysql_dump_map_column_names} - - - -Сопоставлять столбцы в дампе MySQL и столбцы таблицы ClickHouse по именам - - - -## input_format_mysql_dump_table_name {#input_format_mysql_dump_table_name} - - - -Имя таблицы в дампе MySQL, из которой читать данные - - - -## input_format_native_allow_types_conversion {#input_format_native_allow_types_conversion} - - - -Разрешает преобразование типов данных в формате ввода Native - - - -## input_format_native_decode_types_in_binary_format {#input_format_native_decode_types_in_binary_format} - - - -Считывать типы данных в двоичном формате вместо их названий в формате ввода Native - - - -## input_format_null_as_default {#input_format_null_as_default} - - - -Включает или отключает инициализацию полей [NULL](/sql-reference/syntax#literals) [значениями по умолчанию](/sql-reference/statements/create/table#default_values), если тип данных этих полей не является [Nullable](/sql-reference/data-types/nullable). -Если тип столбца не Nullable и эта настройка отключена, вставка `NULL` приводит к исключению. Если тип столбца Nullable, то значения `NULL` вставляются как есть, независимо от этой настройки. - -Эта настройка применима к большинству форматов ввода. - -Для сложных выражений по умолчанию настройка `input_format_defaults_for_omitted_fields` также должна быть включена. - -Возможные значения: - -- 0 — вставка `NULL` в столбец с типом, не допускающим Nullable, приводит к исключению. -- 1 — поля `NULL` инициализируются значениями столбца по умолчанию. - - - -## input_format_orc_allow_missing_columns {#input_format_orc_allow_missing_columns} - - - -Разрешает отсутствие столбцов при чтении входных данных в формате ORC - - - -## input_format_orc_case_insensitive_column_matching {#input_format_orc_case_insensitive_column_matching} - - - -Игнорировать регистр при сопоставлении столбцов ORC со столбцами ClickHouse. - - - -## input_format_orc_dictionary_as_low_cardinality {#input_format_orc_dictionary_as_low_cardinality} - - - -Обрабатывать столбцы ORC, закодированные с помощью словаря, как столбцы LowCardinality при чтении файлов ORC. - - - -## input_format_orc_filter_push_down {#input_format_orc_filter_push_down} - - - -При чтении файлов ORC целиком пропускаются страйпы (stripes) или группы строк на основе выражений WHERE/PREWHERE, статистики min/max или фильтра Блума в метаданных ORC. - - - -## input_format_orc_reader_time_zone_name {#input_format_orc_reader_time_zone_name} - - - -Имя часового пояса для ORC row reader; по умолчанию используется часовой пояс GMT. - - - -## input_format_orc_row_batch_size {#input_format_orc_row_batch_size} - - - -Размер пакета при чтении страйпов ORC. - - - -## input_format_orc_skip_columns_with_unsupported_types_in_schema_inference {#input_format_orc_skip_columns_with_unsupported_types_in_schema_inference} - - - -Пропускать столбцы с неподдерживаемыми типами при определении схемы для формата ORC - - - -## input_format_orc_use_fast_decoder {#input_format_orc_use_fast_decoder} - - - -Использовать более быструю реализацию декодера ORC. - - - -## input_format_parquet_allow_geoparquet_parser {#input_format_parquet_allow_geoparquet_parser} - - - -Использовать парсер геоколонок для преобразования значений Array(UInt8) в типы Point/Linestring/Polygon/MultiLineString/MultiPolygon - - - -## input_format_parquet_allow_missing_columns {#input_format_parquet_allow_missing_columns} - - - -Допускает отсутствие столбцов при чтении входных данных в формате Parquet - - - -## input_format_parquet_bloom_filter_push_down {#input_format_parquet_bloom_filter_push_down} - - - -При чтении файлов Parquet позволяет пропускать целые группы строк на основе выражений WHERE и bloom-фильтра в метаданных Parquet. - - - -## input_format_parquet_case_insensitive_column_matching {#input_format_parquet_case_insensitive_column_matching} - - - -Игнорировать регистр при сопоставлении столбцов Parquet со столбцами ClickHouse. - - - -## input_format_parquet_enable_json_parsing {#input_format_parquet_enable_json_parsing} - - - -При чтении файлов Parquet разбирать столбцы JSON как столбцы JSON в ClickHouse. - - - -## input_format_parquet_enable_row_group_prefetch {#input_format_parquet_enable_row_group_prefetch} - - - -Включает предварительную выборку групп строк при разборе Parquet. В данный момент предварительная выборка поддерживается только при однопоточном разборе. - - - -## input_format_parquet_filter_push_down {#input_format_parquet_filter_push_down} - - - -При чтении файлов Parquet целые группы строк пропускаются на основе выражений WHERE/PREWHERE и статистики минимальных и максимальных значений в метаданных Parquet. - - - -## input_format_parquet_local_file_min_bytes_for_seek {#input_format_parquet_local_file_min_bytes_for_seek} - - - -Минимальный размер локального чтения (из файла) в байтах, при котором выполняется seek вместо чтения с пропуском в формате ввода Parquet - - - -## input_format_parquet_local_time_as_utc {#input_format_parquet_local_time_as_utc} - - - -Определяет тип данных, используемый при автоматическом выводе схемы для временных меток Parquet с isAdjustedToUTC=false. Если значение true: DateTime64(..., 'UTC'), если false: DateTime64(...). Ни один из вариантов не является полностью корректным, так как в ClickHouse нет типа данных для локального «настенного» времени. На первый взгляд парадоксально, но вариант true, вероятно, менее некорректен, поскольку форматирование временной метки с 'UTC' как String приведёт к представлению корректного локального времени. - - - -## input_format_parquet_max_block_size {#input_format_parquet_max_block_size} - - - -Максимальный размер блока для ридера формата Parquet. - - - -## input_format_parquet_memory_high_watermark {#input_format_parquet_memory_high_watermark} - - - -Приблизительное ограничение объёма памяти для ридера Parquet v3. Ограничивает количество групп строк или столбцов, которые могут считываться параллельно. При чтении нескольких файлов в одном запросе лимит применяется к общему использованию памяти всеми этими файлами. - - - -## input_format_parquet_memory_low_watermark {#input_format_parquet_memory_low_watermark} - - - -Более агрессивно планирует предварительную выборку, если использование памяти ниже заданного порогового значения. Потенциально полезно, например, когда по сети необходимо прочитать множество небольших bloom-фильтров. - - - -## input_format_parquet_page_filter_push_down {#input_format_parquet_page_filter_push_down} - - - -Пропускает страницы на основе минимальных и максимальных значений из индекса столбца. - - - -## input_format_parquet_prefer_block_bytes {#input_format_parquet_prefer_block_bytes} - - - -Средний размер блока в байтах, возвращаемого ридером Parquet - - - -## input_format_parquet_preserve_order {#input_format_parquet_preserve_order} - - - -Не изменяет порядок строк при чтении из файлов Parquet. Не рекомендуется к использованию, так как порядок строк, как правило, не гарантируется, а другие части конвейера обработки запроса могут его нарушить. Вместо этого используйте `ORDER BY _row_number`. - - - -## input_format_parquet_skip_columns_with_unsupported_types_in_schema_inference {#input_format_parquet_skip_columns_with_unsupported_types_in_schema_inference} - - - -Пропускать столбцы с неподдерживаемыми типами при определении схемы для формата Parquet - - - -## input_format_parquet_use_native_reader {#input_format_parquet_use_native_reader} - - - -Использовать нативный ридер Parquet v1. Достаточно быстрый, но ещё не доработан. Устарел. - - - -## input_format_parquet_use_native_reader_v3 {#input_format_parquet_use_native_reader_v3} - - - -Использовать считыватель Parquet v3. - - - -## input_format_parquet_use_offset_index {#input_format_parquet_use_offset_index} - - - -Небольшое изменение в способе чтения страниц из файла Parquet, когда не используется фильтрация страниц. - - - -## input_format_parquet_verify_checksums {#input_format_parquet_verify_checksums} - - - -Проверяет контрольные суммы страниц при чтении файлов Parquet. - - - -## input_format_protobuf_flatten_google_wrappers {#input_format_protobuf_flatten_google_wrappers} - - - -Включает использование Google wrappers для обычных невложенных столбцов, например `google.protobuf.StringValue 'str'` для столбца типа `String` `str`. Для столбцов `Nullable` пустые wrappers интерпретируются как значения по умолчанию, а отсутствующие — как `NULL`. - - - -## input_format_protobuf_oneof_presence {#input_format_protobuf_oneof_presence} - - - -Определяет, какое поле protobuf oneof было обнаружено, путем установки значения перечисления в специальном столбце - - - -## input_format_protobuf_skip_fields_with_unsupported_types_in_schema_inference {#input_format_protobuf_skip_fields_with_unsupported_types_in_schema_inference} - - - -Пропускать поля с неподдерживаемыми типами при определении схемы для формата Protobuf - - - -## input_format_record_errors_file_path {#input_format_record_errors_file_path} - - - -Путь к файлу, в который записываются ошибки при чтении текстовых форматов (CSV, TSV). - - - -## input_format_skip_unknown_fields {#input_format_skip_unknown_fields} - - - -Включает или отключает пропуск лишних данных при вставке. - -При записи данных ClickHouse выбрасывает исключение, если входные данные содержат столбцы, которых нет в целевой таблице. Если пропуск включён, ClickHouse не вставляет лишние данные и не выбрасывает исключение. - -Поддерживаемые форматы: - -- [JSONEachRow](/interfaces/formats/JSONEachRow) (и другие форматы JSON) -- [BSONEachRow](/interfaces/formats/BSONEachRow) (и другие форматы JSON) -- [TSKV](/interfaces/formats/TSKV) -- Все форматы с суффиксами WithNames/WithNamesAndTypes -- [MySQLDump](/interfaces/formats/MySQLDump) -- [Native](/interfaces/formats/Native) - -Возможные значения: - -- 0 — Отключено. -- 1 — Включено. - - - -## input_format_try_infer_dates {#input_format_try_infer_dates} - - - -Если включено, ClickHouse пытается определять тип `Date` по строковым полям при автоматическом определении схемы для текстовых форматов. Если все значения столбца во входных данных были успешно разобраны как даты, результирующим типом будет `Date`. Если хотя бы одно значение не было разобрано как дата, результирующим типом будет `String`. - -По умолчанию включено. - - - -## input_format_try_infer_datetimes {#input_format_try_infer_datetimes} - - - -Если параметр включен, ClickHouse будет пытаться определить тип `DateTime64` по строковым полям при автоматическом определении схемы для текстовых форматов. Если все значения столбца во входных данных были успешно интерпретированы как значения даты и времени, результирующим типом будет `DateTime64`; если хотя бы одно значение не было интерпретировано как дата и время, результирующим типом будет `String`. - -По умолчанию включен. - - - -## input_format_try_infer_datetimes_only_datetime64 {#input_format_try_infer_datetimes_only_datetime64} - - - -Когда `input_format_try_infer_datetimes` включён, определяется только тип `DateTime64`, а не `DateTime`. - - - -## input_format_try_infer_exponent_floats {#input_format_try_infer_exponent_floats} - - - -Пытаться распознавать числа с плавающей запятой в экспоненциальной нотации при автоматическом определении схемы в текстовых форматах (кроме JSON, где числа с экспонентой всегда распознаются) - - - -## input_format_try_infer_integers {#input_format_try_infer_integers} - - - -Если параметр включён, ClickHouse будет пытаться определять целые числа вместо чисел с плавающей запятой при выводе схемы для текстовых форматов. Если все числа в столбце входных данных — целые, результирующим типом будет `Int64`, если хотя бы одно число — с плавающей запятой, результирующим типом будет `Float64`. - -Включён по умолчанию. - - - -## input_format_try_infer_variants {#input_format_try_infer_variants} - - - -Если параметр включен, ClickHouse будет пытаться определять тип [`Variant`](../../sql-reference/data-types/variant.md) при выводе схемы для текстовых форматов, когда для элементов столбца или массива возможно более одного типа. - -Возможные значения: - -- 0 — Отключено. -- 1 — Включено. - - - -## input_format_tsv_allow_variable_number_of_columns {#input_format_tsv_allow_variable_number_of_columns} - - - -Игнорировать лишние столбцы во входных данных TSV (если в файле больше столбцов, чем ожидается) и считать отсутствующие поля во входных данных TSV значениями по умолчанию - - - -## input_format_tsv_crlf_end_of_line {#input_format_tsv_crlf_end_of_line} - - - -Если установлено значение true, функция file будет читать формат TSV с \\r\\n вместо \\n. - - - -## input_format_tsv_detect_header {#input_format_tsv_detect_header} - - - -Автоматически определять строку заголовка с именами столбцов и их типами в формате TSV - - - -## input_format_tsv_empty_as_default {#input_format_tsv_empty_as_default} - - - -Считать пустые поля во входных данных TSV значениями по умолчанию. - - - -## input_format_tsv_enum_as_number {#input_format_tsv_enum_as_number} - - - -Обрабатывать вставляемые значения Enum в форматах TSV как числовые индексы Enum. - - - -## input_format_tsv_skip_first_lines {#input_format_tsv_skip_first_lines} - - - -Пропускает заданное количество строк в начале данных в формате TSV - - - -## input_format_tsv_skip_trailing_empty_lines {#input_format_tsv_skip_trailing_empty_lines} - - - -Пропускать пустые строки в конце данных в формате TSV - - - -## input_format_tsv_use_best_effort_in_schema_inference {#input_format_tsv_use_best_effort_in_schema_inference} - - - -Использовать дополнительные методы и эвристики для определения схемы в формате TSV - - - -## input_format_values_accurate_types_of_literals {#input_format_values_accurate_types_of_literals} - - - -Для формата Values: при разборе и интерпретации выражений с использованием шаблона выполняется проверка фактического типа литерала, чтобы избежать возможного переполнения и потери точности. - - - -## input_format_values_deduce_templates_of_expressions {#input_format_values_deduce_templates_of_expressions} - - - -Для формата Values: если потоковому парсеру не удалось разобрать поле, запустить SQL-парсер, определить шаблон SQL-выражения, попытаться разобрать все строки, используя этот шаблон, а затем интерпретировать выражение для всех строк. - - - -## input_format_values_interpret_expressions {#input_format_values_interpret_expressions} - - - -Для формата Values: если потоковому парсеру не удалось разобрать поле, выполнить разбор с помощью SQL-парсера и попытаться интерпретировать его как SQL-выражение. - - - -## input_format_with_names_use_header {#input_format_with_names_use_header} - - - -Включает или отключает проверку порядка столбцов при вставке данных. - -Для повышения производительности операций вставки рекомендуется отключить эту проверку, если вы уверены, что порядок столбцов во входных данных совпадает с порядком в целевой таблице. - -Поддерживаемые форматы: - -- [CSVWithNames](/interfaces/formats/CSVWithNames) -- [CSVWithNamesAndTypes](/interfaces/formats/CSVWithNamesAndTypes) -- [TabSeparatedWithNames](/interfaces/formats/TabSeparatedWithNames) -- [TabSeparatedWithNamesAndTypes](/interfaces/formats/TabSeparatedWithNamesAndTypes) -- [JSONCompactEachRowWithNames](/interfaces/formats/JSONCompactEachRowWithNames) -- [JSONCompactEachRowWithNamesAndTypes](/interfaces/formats/JSONCompactEachRowWithNamesAndTypes) -- [JSONCompactStringsEachRowWithNames](/interfaces/formats/JSONCompactStringsEachRowWithNames) -- [JSONCompactStringsEachRowWithNamesAndTypes](/interfaces/formats/JSONCompactStringsEachRowWithNamesAndTypes) -- [RowBinaryWithNames](/interfaces/formats/RowBinaryWithNames) -- [RowBinaryWithNamesAndTypes](/interfaces/formats/RowBinaryWithNamesAndTypes) -- [CustomSeparatedWithNames](/interfaces/formats/CustomSeparatedWithNames) -- [CustomSeparatedWithNamesAndTypes](/interfaces/formats/CustomSeparatedWithNamesAndTypes) - -Возможные значения: - -- 0 — Отключено. -- 1 — Включено. - - - -## input_format_with_types_use_header {#input_format_with_types_use_header} - - - -Определяет, должен ли парсер формата проверять соответствие типов данных во входных данных типам данных целевой таблицы. - -Поддерживаемые форматы: - -- [CSVWithNamesAndTypes](/interfaces/formats/CSVWithNamesAndTypes) -- [TabSeparatedWithNamesAndTypes](/interfaces/formats/TabSeparatedWithNamesAndTypes) -- [JSONCompactEachRowWithNamesAndTypes](/interfaces/formats/JSONCompactEachRowWithNamesAndTypes) -- [JSONCompactStringsEachRowWithNamesAndTypes](/interfaces/formats/JSONCompactStringsEachRowWithNamesAndTypes) -- [RowBinaryWithNamesAndTypes](/interfaces/formats/RowBinaryWithNamesAndTypes) -- [CustomSeparatedWithNamesAndTypes](/interfaces/formats/CustomSeparatedWithNamesAndTypes) - -Возможные значения: - -- 0 — отключено. -- 1 — включено. - - - -## insert_distributed_one_random_shard {#insert_distributed_one_random_shard} - - - -Включает или отключает вставку данных в случайный шард таблицы [Distributed](/engines/table-engines/special/distributed), когда не задан распределённый ключ. - -По умолчанию при вставке данных в таблицу `Distributed` с более чем одним шардом сервер ClickHouse отклоняет любой запрос на вставку, если распределённый ключ отсутствует. Когда `insert_distributed_one_random_shard = 1`, вставки разрешены, и данные распределяются случайным образом между всеми шардами. - -Возможные значения: - -- 0 — Вставка отклоняется, если есть несколько шардов и не задан распределённый ключ. -- 1 — Вставка выполняется случайным образом по всем доступным шардам, когда распределённый ключ не задан. - - - -## interval_output_format {#interval_output_format} - - - -Позволяет выбрать формат вывода текстового представления интервальных типов. - -Возможные значения: - -- `kusto` - формат вывода в стиле KQL. - - ClickHouse выводит интервалы в [формате KQL](https://learn.microsoft.com/en-us/dotnet/standard/base-types/standard-timespan-format-strings#the-constant-c-format-specifier). Например, `toIntervalDay(2)` будет иметь формат `2.00:00:00`. Обратите внимание, что для интервальных типов переменной длины (например, `IntervalMonth` и `IntervalYear`) учитывается среднее количество секунд на интервал. - -- `numeric` - числовой формат вывода. - - ClickHouse выводит интервалы в виде их базового числового представления. Например, `toIntervalDay(2)` будет иметь формат `2`. - -См. также: - -- [Interval](../../sql-reference/data-types/special-data-types/interval.md) - - - -## into_outfile_create_parent_directories {#into_outfile_create_parent_directories} - - - -Автоматически создавать родительские директории при использовании INTO OUTFILE, если они ещё не существуют. - - - -## json_type_escape_dots_in_keys {#json_type_escape_dots_in_keys} - - - -При включении точки в ключах JSON будут экранироваться при разборе. - - - -## output_format_arrow_compression_method {#output_format_arrow_compression_method} - - - -Метод сжатия для формата вывода Arrow. Поддерживаемые кодеки: lz4_frame, zstd, none (без сжатия). - - - -## output_format_arrow_fixed_string_as_fixed_byte_array {#output_format_arrow_fixed_string_as_fixed_byte_array} - - - -Использовать тип данных Arrow FIXED_SIZE_BINARY вместо Binary для столбцов FixedString. - - - -## output_format_arrow_low_cardinality_as_dictionary {#output_format_arrow_low_cardinality_as_dictionary} - - - -Включает вывод столбцов типа LowCardinality как столбцов типа Arrow Dictionary - - - -## output_format_arrow_string_as_string {#output_format_arrow_string_as_string} - - - -Использовать тип Arrow String вместо Binary для строковых столбцов - - - -## output_format_arrow_use_64_bit_indexes_for_dictionary {#output_format_arrow_use_64_bit_indexes_for_dictionary} - - - -Всегда использовать 64-разрядные целые числа для индексов словаря в формате Arrow - - - -## output_format_arrow_use_signed_indexes_for_dictionary {#output_format_arrow_use_signed_indexes_for_dictionary} - - - -Использовать знаковые целые числа для индексов словаря в формате Arrow - - - -## output_format_avro_codec {#output_format_avro_codec} - - - -Кодек сжатия, используемый для вывода. Возможные значения: 'null', 'deflate', 'snappy', 'zstd'. - - - -## output_format_avro_rows_in_file {#output_format_avro_rows_in_file} - - - -Максимальное количество строк в файле (если допускается хранилищем) - - - -## output_format_avro_string_column_pattern {#output_format_avro_string_column_pattern} - - -Для формата Avro: регулярное выражение для выбора столбцов типа String, которые следует интерпретировать как строки Avro. - - - -## output_format_avro_sync_interval {#output_format_avro_sync_interval} - - - -Интервал синхронизации в байтах. - - - -## output_format_binary_encode_types_in_binary_format {#output_format_binary_encode_types_in_binary_format} - - - -Записывать типы данных в бинарном формате вместо имен типов в формате вывода RowBinaryWithNamesAndTypes - - - -## output_format_binary_write_json_as_string {#output_format_binary_write_json_as_string} - - - -Записывает значения типа данных [JSON](../../sql-reference/data-types/newjson.md) как значения типа [String](../../sql-reference/data-types/string.md) с JSON-содержимым в формате RowBinary. - - - -## output_format_bson_string_as_string {#output_format_bson_string_as_string} - - - -Использовать тип BSON String вместо Binary для столбцов типа String. - - - -## output_format_csv_crlf_end_of_line {#output_format_csv_crlf_end_of_line} - - - -Если установлено значение `true`, символы конца строки в формате CSV будут \\r\\n вместо \\n. - - - -## output_format_csv_serialize_tuple_into_separate_columns {#output_format_csv_serialize_tuple_into_separate_columns} - - - -Если установлено значение `true`, то кортежи (`Tuple`) в формате CSV сериализуются как отдельные столбцы (то есть их вложенная структура теряется). - - - -## output_format_decimal_trailing_zeros {#output_format_decimal_trailing_zeros} - - - -Выводить завершающие нули при отображении значений типа Decimal. Например, 1.230000 вместо 1.23. - -По умолчанию — отключено. - - - -## output_format_json_array_of_rows - - - -Включает возможность выводить все строки в виде JSON‑массива в формате [JSONEachRow](/interfaces/formats/JSONEachRow). - -Возможные значения: - -* 1 — ClickHouse выводит все строки в виде массива, где каждая строка представлена в формате `JSONEachRow`. -* 0 — ClickHouse выводит каждую строку отдельно в формате `JSONEachRow`. - -**Пример запроса с включённой настройкой** - -Запрос: - -```sql -SET output_format_json_array_of_rows = 1; -SELECT number FROM numbers(3) FORMAT JSONEachRow; -``` - -Результат: - -```text -[ -{"number":"0"}, -{"number":"1"}, -{"number":"2"} -] -``` - -**Пример запроса с отключённым параметром** - -Запрос: - -```sql -SET output_format_json_array_of_rows = 0; -SELECT number FROM numbers(3) FORMAT JSONEachRow; -``` - -Результат: - -```text -{"number":"0"} -{"number":"1"} -{"number":"2"} -``` - - -## output_format_json_escape_forward_slashes {#output_format_json_escape_forward_slashes} - - - -Управляет экранированием прямых слешей (`/`) в строковых значениях при выводе в формате JSON. Предназначен для совместимости с JavaScript. Не путайте с обратными слешами (`\`), которые всегда экранируются. - -По умолчанию параметр включён. - - - -## output_format_json_map_as_array_of_tuples {#output_format_json_map_as_array_of_tuples} - - - -Сериализует столбцы Map как JSON-массивы кортежей. - -По умолчанию отключено. - - - -## output_format_json_named_tuples_as_objects {#output_format_json_named_tuples_as_objects} - - - -Сериализует столбцы именованных кортежей в виде JSON-объектов. - -Включено по умолчанию. - - - -## output_format_json_pretty_print - - - -Этот параметр определяет, как вложенные структуры, такие как Tuples, Maps и Arrays, отображаются внутри массива `data` при использовании формата вывода JSON. - -Например, вместо вывода: - -```json -"data": -[ - { - "tuple": {"a":1,"b":2,"c":3}, - "array": [1,2,3], - "map": {"a":1,"b":2,"c":3} - } -], -``` - -Результат будет отформатирован следующим образом: - -```json -"data": -[ - { - "tuple": { - "a": 1, - "b": 2, - "c": 3 - }, - "array": [ - 1, - 2, - 3 - ], - "map": { - "a": 1, - "b": 2, - "c": 3 - } - } -], -``` - -Включено по умолчанию. - - -## output_format_json_quote_64bit_floats {#output_format_json_quote_64bit_floats} - - - -Управляет заключением в кавычки 64-битных [значений с плавающей запятой](../../sql-reference/data-types/float.md) при их выводе в форматах JSON*. - -По умолчанию отключено. - - - -## output_format_json_quote_64bit_integers {#output_format_json_quote_64bit_integers} - - - -Управляет тем, заключаются ли в кавычки [целые числа](../../sql-reference/data-types/int-uint.md) разрядностью 64 бита и более (такие как `UInt64` или `Int128`) при их выводе в формате [JSON](/interfaces/formats/JSON). -По умолчанию такие целые числа заключаются в кавычки. Это поведение совместимо с большинством реализаций JavaScript. - -Возможные значения: - -- 0 — целые числа выводятся без кавычек. -- 1 — целые числа заключаются в кавычки. - - - -## output_format_json_quote_decimals {#output_format_json_quote_decimals} - - - -Управляет тем, заключаются ли десятичные числа в кавычки в JSON-форматах вывода. - -По умолчанию отключено. - - - -## output_format_json_quote_denormals - - - -Включает вывод значений `+nan`, `-nan`, `+inf`, `-inf` в формате [JSON](/interfaces/formats/JSON). - -Возможные значения: - -* 0 — Отключено. -* 1 — Включено. - -**Пример** - -Рассмотрим следующую таблицу `account_orders`: - -```text -┌─id─┬─name───┬─duration─┬─period─┬─area─┐ -│ 1 │ Andrew │ 20 │ 0 │ 400 │ -│ 2 │ John │ 40 │ 0 │ 0 │ -│ 3 │ Bob │ 15 │ 0 │ -100 │ -└────┴────────┴──────────┴────────┴──────┘ -``` - -Когда `output_format_json_quote_denormals = 0`, запрос возвращает значения `null` в результате: - -```sql -SELECT area/period FROM account_orders FORMAT JSON; -``` - -```json -{ - "meta": - [ - { - "name": "divide(area, period)", - "type": "Float64" - } - ], - - "data": - [ - { - "divide(area, period)": null - }, - { - "divide(area, period)": null - }, - { - "divide(area, period)": null - } - ], - - "rows": 3, - - "statistics": - { - "elapsed": 0.003648093, - "rows_read": 3, - "bytes_read": 24 - } -} -``` - -Когда `output_format_json_quote_denormals = 1`, запрос возвращает: - -```json -{ - "meta": - [ - { - "name": "divide(area, period)", - "type": "Float64" - } - ], - - "data": - [ - { - "divide(area, period)": "inf" - }, - { - "divide(area, period)": "-nan" - }, - { - "divide(area, period)": "-inf" - } - ], - - "rows": 3, - - "statistics": - { - "elapsed": 0.000070241, - "rows_read": 3, - "bytes_read": 24 - } -} -``` - - -## output_format_json_skip_null_value_in_named_tuples {#output_format_json_skip_null_value_in_named_tuples} - - - -Пропускает пары ключ–значение со значением null при сериализации столбцов с именованными кортежами в JSON-объекты. Применяется только, если output_format_json_named_tuples_as_objects имеет значение true. - - - -## output_format_json_validate_utf8 {#output_format_json_validate_utf8} - - - -Управляет проверкой корректности UTF-8-последовательностей в форматах вывода JSON, не влияет на форматы JSON/JSONCompact/JSONColumnsWithMetadata — они всегда проверяют UTF-8. - -По умолчанию настройка отключена. - - - -## output_format_markdown_escape_special_characters - - - -При включении специальные символы в Markdown экранируются. - -[CommonMark](https://spec.commonmark.org/0.30/#example-12) определяет следующие специальные символы, которые могут быть экранированы: - -``` -! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~ -``` - -Возможные значения: - -* 0 — Отключено. -* 1 — Включено. - - -## output_format_msgpack_uuid_representation {#output_format_msgpack_uuid_representation} - - - -Определяет способ вывода UUID в формате MsgPack. - - - -## output_format_native_encode_types_in_binary_format {#output_format_native_encode_types_in_binary_format} - - - -Записывать типы данных в двоичном виде вместо их имен в формате вывода Native - - - -## output_format_native_use_flattened_dynamic_and_json_serialization {#output_format_native_use_flattened_dynamic_and_json_serialization} - - - -Записывает данные столбцов [JSON](../../sql-reference/data-types/newjson.md) и [Dynamic](../../sql-reference/data-types/dynamic.md) в плоском формате (все типы/пути как отдельные подстолбцы). - - - -## output_format_native_write_json_as_string {#output_format_native_write_json_as_string} - - - -Записывает данные столбца типа [JSON](../../sql-reference/data-types/newjson.md) как столбец типа [String](../../sql-reference/data-types/string.md), содержащий строки в формате JSON, вместо используемой по умолчанию нативной сериализации JSON. - - - -## output_format_orc_compression_block_size {#output_format_orc_compression_block_size} - - - -Размер блока сжатия в байтах для выходного формата ORC. - - - -## output_format_orc_compression_method {#output_format_orc_compression_method} - - - -Метод сжатия для формата вывода ORC. Поддерживаемые кодеки: lz4, snappy, zlib, zstd, none (без сжатия). - - - -## output_format_orc_dictionary_key_size_threshold {#output_format_orc_dictionary_key_size_threshold} - - - -Для строкового столбца в формате вывода ORC, если количество различных значений больше этой доли от общего числа строк с ненулевыми (non-NULL) значениями, словарное кодирование отключается. В противном случае словарное кодирование включается. - - - -## output_format_orc_row_index_stride {#output_format_orc_row_index_stride} - - - -Целевой интервал индексации строк в выходном формате ORC - - - -## output_format_orc_string_as_string {#output_format_orc_string_as_string} - - - -Использовать тип данных ORC String вместо Binary для столбцов с типом String - - - -## output_format_orc_writer_time_zone_name {#output_format_orc_writer_time_zone_name} - - - -Название часового пояса, используемого модулем записи ORC; по умолчанию используется часовой пояс GMT. - - - -## output_format_parquet_batch_size {#output_format_parquet_batch_size} - - - -Проверять размер страницы после каждого указанного количества строк. Рассмотрите возможность уменьшения значения, если в данных есть столбцы со средним размером значений более нескольких КБ. - - - -## output_format_parquet_bloom_filter_bits_per_value {#output_format_parquet_bloom_filter_bits_per_value} - - - -Примерное количество бит, используемых для каждого различного значения в Bloom-фильтрах Parquet. Оценочные значения вероятности ложноположительных срабатываний: - * 6 бит — 10% - * 10.5 бита — 1% - * 16.9 бита — 0.1% - * 26.4 бита — 0.01% - * 41 бит — 0.001% - - - -## output_format_parquet_bloom_filter_flush_threshold_bytes {#output_format_parquet_bloom_filter_flush_threshold_bytes} - - - -Где в файле Parquet будут размещаться фильтры Блума. Фильтры Блума будут записываться группами приблизительно такого размера. В частности: - * если 0 — фильтры Блума каждой группы строк записываются сразу после соответствующей группы строк; - * если значение больше общего размера всех фильтров Блума — фильтры Блума для всех групп строк будут накапливаться в памяти, а затем записываться вместе ближе к концу файла; - * в противном случае фильтры Блума будут накапливаться в памяти и записываться каждый раз, как только их общий размер превысит это значение. - - - -## output_format_parquet_compliant_nested_types {#output_format_parquet_compliant_nested_types} - - - -В схеме файла Parquet использовать имя `element` вместо `item` для элементов списка. Это исторический артефакт реализации библиотеки Arrow. В общем случае повышает совместимость, за исключением, возможно, некоторых старых версий Arrow. - - - -## output_format_parquet_compression_method {#output_format_parquet_compression_method} - - - -Метод сжатия для выходного формата Parquet. Поддерживаемые кодеки: snappy, lz4, brotli, zstd, gzip, none (без сжатия) - - - -## output_format_parquet_data_page_size {#output_format_parquet_data_page_size} - - - -Целевой размер страницы в байтах перед сжатием. - - - -## output_format_parquet_date_as_uint16 {#output_format_parquet_date_as_uint16} - - - -Записывать значения типа Date как обычные 16-битные числа (считываются как UInt16), вместо преобразования в 32-битный тип Parquet DATE (считывается как Date32). - - - -## output_format_parquet_datetime_as_uint32 {#output_format_parquet_datetime_as_uint32} - - - -Записывать значения DateTime как исходный Unix timestamp (считываются обратно как UInt32), вместо преобразования в миллисекунды (считываются обратно как DateTime64(3)). - - - -## output_format_parquet_enum_as_byte_array {#output_format_parquet_enum_as_byte_array} - - - -Записывает значения enum с физическим типом Parquet BYTE_ARRAY и логическим типом ENUM - - - -## output_format_parquet_fixed_string_as_fixed_byte_array {#output_format_parquet_fixed_string_as_fixed_byte_array} - - - -Использовать тип FIXED_LEN_BYTE_ARRAY формата Parquet вместо Binary для столбцов FixedString. - - - -## output_format_parquet_geometadata {#output_format_parquet_geometadata} - - - -Позволяет записывать информацию о геометрических столбцах в метаданные Parquet и кодировать столбцы в формате WKB. - - - -## output_format_parquet_max_dictionary_size {#output_format_parquet_max_dictionary_size} - - - -Если размер словаря превышает это количество байт, используется кодирование без словаря. Установите значение 0, чтобы отключить словарное кодирование. - - - -## output_format_parquet_parallel_encoding {#output_format_parquet_parallel_encoding} - - - -Выполняет многопоточное кодирование Parquet. Требует включения настройки output_format_parquet_use_custom_encoder. - - - -## output_format_parquet_row_group_size {#output_format_parquet_row_group_size} - - - -Целевой размер группы строк (в количестве строк). - - - -## output_format_parquet_row_group_size_bytes {#output_format_parquet_row_group_size_bytes} - - - -Целевой размер группы строк в байтах (до сжатия). - - - -## output_format_parquet_string_as_string {#output_format_parquet_string_as_string} - - - -Использовать в Parquet тип String вместо Binary для столбцов с типом String. - - - -## output_format_parquet_use_custom_encoder {#output_format_parquet_use_custom_encoder} - - - -Использовать более быструю реализацию кодировщика Parquet. - - - -## output_format_parquet_version {#output_format_parquet_version} - - - -Версия формата Parquet, используемая для формата вывода. Поддерживаемые версии: 1.0, 2.4, 2.6 и 2.latest (по умолчанию) - - - -## output_format_parquet_write_bloom_filter {#output_format_parquet_write_bloom_filter} - - - -Записывает фильтры Блума в файлы Parquet. Требуется, чтобы параметр `output_format_parquet_use_custom_encoder` имел значение `true`. - - - -## output_format_parquet_write_checksums {#output_format_parquet_write_checksums} - - - -Помещает контрольные суммы CRC32 в заголовки страниц формата Parquet. - - - -## output_format_parquet_write_page_index {#output_format_parquet_write_page_index} - - - -Записывать индекс столбцов и индекс смещений (т. е. статистику по каждой странице данных, которую можно использовать для проталкивания фильтров при чтении) в файлы Parquet. - - - -## output_format_pretty_color {#output_format_pretty_color} - - - -Использовать управляющие последовательности ANSI в форматах Pretty. 0 — отключено, 1 — включено, `auto` — включено, если вывод осуществляется в терминал. - - - -## output_format_pretty_display_footer_column_names - - - -Отображает имена столбцов в нижнем колонтитуле, если в таблице много строк. - -Возможные значения: - -* 0 — имена столбцов не отображаются в нижнем колонтитуле. -* 1 — имена столбцов отображаются в нижнем колонтитуле, если количество строк больше или равно пороговому значению, заданному настройкой [output_format_pretty_display_footer_column_names_min_rows](#output_format_pretty_display_footer_column_names_min_rows) (по умолчанию — 50). - -**Пример** - -Запрос: - -```sql -SELECT *, toTypeName(*) FROM (SELECT * FROM system.numbers LIMIT 1000); -``` - -Результат: - -```response - ┌─number─┬─toTypeName(number)─┐ - 1. │ 0 │ UInt64 │ - 2. │ 1 │ UInt64 │ - 3. │ 2 │ UInt64 │ - ... - 999. │ 998 │ UInt64 │ -1000. │ 999 │ UInt64 │ - └─number─┴─toTypeName(number)─┘ -``` - - -## output_format_pretty_display_footer_column_names_min_rows {#output_format_pretty_display_footer_column_names_min_rows} - - - -Устанавливает минимальное количество строк, начиная с которого будет отображаться футер с именами столбцов, если включена настройка [output_format_pretty_display_footer_column_names](#output_format_pretty_display_footer_column_names). - - - -## output_format_pretty_fallback_to_vertical {#output_format_pretty_fallback_to_vertical} - - - -Если параметр включён и таблица широкая, но короткая, формат Pretty выведет её так же, как формат Vertical. -См. `output_format_pretty_fallback_to_vertical_max_rows_per_chunk` и `output_format_pretty_fallback_to_vertical_min_table_width` для тонкой настройки этого поведения. - - - -## output_format_pretty_fallback_to_vertical_max_rows_per_chunk {#output_format_pretty_fallback_to_vertical_max_rows_per_chunk} - - - -Переход к формату Vertical (см. `output_format_pretty_fallback_to_vertical`) будет выполняться только в том случае, если число строк в чанке не превышает указанного значения. - - - -## output_format_pretty_fallback_to_vertical_min_columns {#output_format_pretty_fallback_to_vertical_min_columns} - - - -Автоматический переход к формату Vertical (см. `output_format_pretty_fallback_to_vertical`) будет выполняться только в том случае, если количество столбцов превышает указанное значение. - - - -## output_format_pretty_fallback_to_vertical_min_table_width {#output_format_pretty_fallback_to_vertical_min_table_width} - - - -Переход к формату Vertical (см. `output_format_pretty_fallback_to_vertical`) будет выполняться только в том случае, если суммарная ширина столбцов в таблице не меньше заданного значения или если хотя бы одно значение содержит символ перевода строки. - - - -## output_format_pretty_glue_chunks {#output_format_pretty_glue_chunks} - - - -Если данные, выводимые в форматах Pretty, поступили в нескольких чанках, даже с задержкой, но следующий чанк имеет те же ширины столбцов, что и предыдущий, будут использованы управляющие последовательности ANSI, чтобы вернуться на предыдущую строку и перезаписать футер предыдущего чанка, продолжив его данными нового чанка. Так результат выглядит более аккуратно. - -0 — отключено, 1 — включено, 'auto' — включено, если вывод в терминал. - - - -## output_format_pretty_grid_charset {#output_format_pretty_grid_charset} - - - -Кодировка символов, используемая для отображения границ таблицы. Доступные кодировки: ASCII, UTF-8 (по умолчанию). - - - -## output_format_pretty_highlight_digit_groups {#output_format_pretty_highlight_digit_groups} - - - -Если параметр включён и вывод осуществляется в терминал, каждая цифра в разрядах тысяч, миллионов и т. д. подчёркивается. - - - -## output_format_pretty_highlight_trailing_spaces {#output_format_pretty_highlight_trailing_spaces} - - - -Если включено и если вывод осуществляется в терминал, подсвечивает пробелы в конце строк серым цветом и подчеркиванием. - - - -## output_format_pretty_max_column_name_width_cut_to {#output_format_pretty_max_column_name_width_cut_to} - - - -Если имя столбца слишком длинное, оно обрезается до этой длины. -Имя столбца будет обрезано, если его длина превышает сумму значений `output_format_pretty_max_column_name_width_cut_to` и `output_format_pretty_max_column_name_width_min_chars_to_cut`. - - - -## output_format_pretty_max_column_name_width_min_chars_to_cut {#output_format_pretty_max_column_name_width_min_chars_to_cut} - - - -Минимальное число символов, на которое укорачивается имя столбца, если оно слишком длинное. -Имя столбца будет укорочено, если его длина превышает `output_format_pretty_max_column_name_width_cut_to` плюс `output_format_pretty_max_column_name_width_min_chars_to_cut`. - - - -## output_format_pretty_max_column_pad_width {#output_format_pretty_max_column_pad_width} - - - -Максимальная ширина, до которой дополняются значения в столбце в форматах Pretty. - - - -## output_format_pretty_max_rows {#output_format_pretty_max_rows} - - - -Максимальное количество строк для форматов Pretty. - - - -## output_format_pretty_max_value_width {#output_format_pretty_max_value_width} - - - -Максимальная длина значения для отображения в форматах Pretty. Если она больше — значение будет обрезано. -Значение 0 означает, что обрезка никогда не выполняется. - - - -## output_format_pretty_max_value_width_apply_for_single_value {#output_format_pretty_max_value_width_apply_for_single_value} - - - -Ограничивать длину значений (см. настройку `output_format_pretty_max_value_width`) только когда в блоке более одного значения. В противном случае выводить значение полностью, что полезно для запроса `SHOW CREATE TABLE`. - - - -## output_format_pretty_multiline_fields {#output_format_pretty_multiline_fields} - - - -Если включено, форматы Pretty будут отображать многострочные поля внутри ячейки таблицы, при этом границы таблицы будут сохранены. -Если выключено, они будут отображаться как есть, что может деформировать таблицу (одно из преимуществ отключения — более удобное копирование и вставка многострочных значений). - - - -## output_format_pretty_row_numbers {#output_format_pretty_row_numbers} - - - -Добавляет номера строк перед каждой строкой для формата вывода Pretty - - - -## output_format_pretty_single_large_number_tip_threshold {#output_format_pretty_single_large_number_tip_threshold} - - - -Выводит справа от таблицы подсказку с числом в удобочитаемом виде, если блок состоит из одного числа, которое превышает это значение (кроме 0). - - - -## output_format_pretty_squash_consecutive_ms {#output_format_pretty_squash_consecutive_ms} - - - -Ожидать появления следующего блока до указанного количества миллисекунд и объединять его с предыдущим перед выводом. -Это позволяет избежать частого вывода слишком маленьких блоков, но при этом по-прежнему отображать данные в потоковом режиме. - - - -## output_format_pretty_squash_max_wait_ms {#output_format_pretty_squash_max_wait_ms} - - - -Выводит накопленный блок в форматах pretty, если с момента предыдущего вывода прошло больше указанного количества миллисекунд. - - - -## output_format_protobuf_nullables_with_google_wrappers {#output_format_protobuf_nullables_with_google_wrappers} - - - -При сериализации столбцов `Nullable` с использованием обёрток Google значения по умолчанию сериализуются как пустые обёртки. Если параметр отключён, значения по умолчанию и `NULL` не сериализуются. - - - -## output_format_schema {#output_format_schema} - - - -Путь к файлу, в который будет сохранена автоматически сгенерированная схема в формате [Cap'n Proto](/interfaces/formats/CapnProto) или [Protobuf](/interfaces/formats/Protobuf). - - - -## output_format_sql_insert_include_column_names {#output_format_sql_insert_include_column_names} - - - -Включать имена столбцов в запросе INSERT - - - -## output_format_sql_insert_max_batch_size {#output_format_sql_insert_max_batch_size} - - - -Максимальное количество строк в одном запросе INSERT. - - - -## output_format_sql_insert_quote_names {#output_format_sql_insert_quote_names} - - - -Заключать имена столбцов в символы '`' - - - -## output_format_sql_insert_table_name {#output_format_sql_insert_table_name} - - - -Имя таблицы в результирующем запросе INSERT - - - -## output_format_sql_insert_use_replace {#output_format_sql_insert_use_replace} - - - -Использовать оператор REPLACE вместо INSERT - - - -## output_format_tsv_crlf_end_of_line {#output_format_tsv_crlf_end_of_line} - - - -Если установлено значение true, строки в формате TSV будут оканчиваться на \\r\\n вместо \\n. - - - -## output_format_values_escape_quote_with_quote {#output_format_values_escape_quote_with_quote} - - - -Если имеет значение true, символ ' экранируется как '', иначе — как \\'. - - - -## output_format_write_statistics {#output_format_write_statistics} - - - -Записывает статистику о прочитанных строках, объёме данных (в байтах) и затраченном времени в соответствующих форматах вывода. - -Включено по умолчанию - - - -## precise_float_parsing {#precise_float_parsing} - - - -Использовать более точный (но более медленный) алгоритм разбора чисел с плавающей запятой - - - -## regexp_dict_allow_hyperscan {#regexp_dict_allow_hyperscan} - - - -Разрешает использование словаря `regexp_tree`, использующего библиотеку Hyperscan. - - - -## regexp_dict_flag_case_insensitive {#regexp_dict_flag_case_insensitive} - - - -Использовать сопоставление, нечувствительное к регистру, для словаря `regexp_tree`. Может быть переопределено в отдельных выражениях с помощью `(?i)` и `(?-i)`. - - - -## regexp_dict_flag_dotall {#regexp_dict_flag_dotall} - - - -Разрешает символу «.» совпадать с символами новой строки для словаря `regexp_tree`. - - - -## rows_before_aggregation {#rows_before_aggregation} - - - -Когда он включён, ClickHouse будет предоставлять точное значение статистики rows_before_aggregation — количества строк, прочитанных до агрегации. - - - -## schema_inference_hints - -Список имён столбцов и их типов, используемых в качестве подсказок при определении схемы для форматов без заданной схемы. - -Пример: - -Запрос: - -```sql -desc format(JSONEachRow, '{"x" : 1, "y" : "String", "z" : "0.0.0.0" }') settings schema_inference_hints='x UInt8, z IPv4'; -``` - -Результат: - -```sql -x UInt8 -y Nullable(String) -z IPv4 -``` - -:::note -Если `schema_inference_hints` имеет неправильный формат или в нём есть опечатка, неверный тип данных и т.п., все значения `schema_inference_hints` будут проигнорированы. -::: - - -## schema_inference_make_columns_nullable {#schema_inference_make_columns_nullable} - - - -Определяет, будут ли выводимые типы иметь модификатор `Nullable` при выводе схемы. -Возможные значения: - * 0 — выводимый тип никогда не будет `Nullable` (используйте `input_format_null_as_default`, чтобы контролировать, что делать со значениями `NULL` в этом случае), - * 1 — все выводимые типы будут `Nullable`, - * 2 или `auto` — выводимый тип будет `Nullable` только если столбец содержит `NULL` в образце данных, который разбирается при выводе схемы, или метаданные файла содержат информацию о допускаемости `NULL` для столбца, - * 3 — допускаемость `NULL` для выводимого типа будет соответствовать метаданным файла, если формат их содержит (например, Parquet), и всегда будет `Nullable` в противном случае (например, CSV). - - - -## schema_inference_make_json_columns_nullable {#schema_inference_make_json_columns_nullable} - - - -Определяет, нужно ли делать выводимые JSON-типы `Nullable` при выводе схемы. -Если этот параметр включён одновременно с schema_inference_make_columns_nullable, выводимый JSON-тип будет `Nullable`. - - - -## schema_inference_mode {#schema_inference_mode} - - - -Режим определения схемы. `default` — предполагается, что все файлы имеют одинаковую схему, и схему можно вывести из любого файла; `union` — файлы могут иметь разные схемы, и итоговая схема должна представлять собой объединение схем всех файлов. - - - -## show_create_query_identifier_quoting_rule {#show_create_query_identifier_quoting_rule} - - - -Задает правило заключения идентификаторов в кавычки в запросе SHOW CREATE - - - -## show_create_query_identifier_quoting_style {#show_create_query_identifier_quoting_style} - - - -Определяет стиль кавычек для идентификаторов в запросе SHOW CREATE. - - - -## type_json_skip_duplicated_paths {#type_json_skip_duplicated_paths} - - - -При включении во время разбора JSON-объекта в тип JSON дублирующиеся пути будут игнорироваться, и вместо генерации исключения будет использовано только первое значение. - - - -## validate_experimental_and_suspicious_types_inside_nested_types {#validate_experimental_and_suspicious_types_inside_nested_types} - - - -Проверять использование экспериментальных и сомнительных типов внутри вложенных типов, таких как Array/Map/Tuple - - +{/*Не редактируйте этот файл — он сгенерирован автоматически*/ } diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/settings/settings.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/settings/settings.md index 41b2e0b5f04..f97997428c6 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/settings/settings.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/settings/settings.md @@ -1,11479 +1,10 @@ --- -title: 'Настройки сеанса' -sidebar_label: 'Настройки сеанса' +title: 'Параметры сессии' +description: 'Настройки, задаваемые в system.settings' +sidebar_label: 'Параметры сессии' slug: /operations/settings/settings toc_max_heading_level: 2 -description: 'Настройки, доступные в таблице ``system.settings``.' doc_type: 'reference' --- -import ExperimentalBadge from '@theme/badges/ExperimentalBadge'; -import BetaBadge from '@theme/badges/BetaBadge'; -import CloudOnlyBadge from '@theme/badges/CloudOnlyBadge'; -import SettingsInfoBlock from '@theme/SettingsInfoBlock/SettingsInfoBlock'; -import VersionHistory from '@theme/VersionHistory/VersionHistory'; - -{/* Сгенерировано автоматически */ } - -Все приведённые ниже настройки также доступны в таблице [system.settings](/docs/operations/system-tables/settings). Эти настройки автоматически генерируются на основе [исходного кода](https://github.com/ClickHouse/ClickHouse/blob/master/src/Core/Settings.cpp). - - -## add_http_cors_header {#add_http_cors_header} - - - -Добавлять HTTP-заголовок CORS. - -## additional_result_filter - -Дополнительное выражение фильтрации, применяемое к результату запроса `SELECT`. -Эта настройка не применяется к подзапросам. - -**Пример** - -```sql -INSERT INTO table_1 VALUES (1, 'a'), (2, 'bb'), (3, 'ccc'), (4, 'dddd'); -SElECT * FROM table_1; -``` - -```response -┌─x─┬─y────┐ -│ 1 │ a │ -│ 2 │ bb │ -│ 3 │ ccc │ -│ 4 │ dddd │ -└───┴──────┘ -``` - -```sql -SELECT * -FROM table_1 -SETTINGS additional_result_filter = 'x != 2' -``` - -```response -┌─x─┬─y────┐ -│ 1 │ a │ -│ 3 │ ccc │ -│ 4 │ dddd │ -└───┴──────┘ -``` - - -## additional_table_filters - - - -Дополнительное выражение фильтрации, применяемое после чтения данных -из указанной таблицы. - -**Пример** - -```sql -INSERT INTO table_1 VALUES (1, 'a'), (2, 'bb'), (3, 'ccc'), (4, 'dddd'); -SELECT * FROM table_1; -``` - -```response -┌─x─┬─y────┐ -│ 1 │ a │ -│ 2 │ bb │ -│ 3 │ ccc │ -│ 4 │ dddd │ -└───┴──────┘ -``` - -```sql -SELECT * -FROM table_1 -SETTINGS additional_table_filters = {'table_1': 'x != 2'} -``` - -```response -┌─x─┬─y────┐ -│ 1 │ a │ -│ 3 │ ccc │ -│ 4 │ dddd │ -└───┴──────┘ -``` - - -## aggregate_functions_null_for_empty - - - -Включает или отключает перезапись всех агрегатных функций в запросе с добавлением к ним суффикса [-OrNull](/sql-reference/aggregate-functions/combinators#-ornull). Включите этот параметр для совместимости со стандартом SQL. -Реализовано через перезапись запроса (аналогично настройке [count_distinct_implementation](#count_distinct_implementation)), чтобы получать единообразные результаты для распределённых запросов. - -Возможные значения: - -* 0 — Отключено. -* 1 — Включено. - -**Пример** - -Рассмотрим следующий запрос с агрегатными функциями: - -```sql -SELECT SUM(-1), MAX(0) FROM system.one WHERE 0; -``` - -При `aggregate_functions_null_for_empty = 0` это даст такой результат: - -```text -┌─SUM(-1)─┬─MAX(0)─┐ -│ 0 │ 0 │ -└─────────┴────────┘ -``` - -При установке `aggregate_functions_null_for_empty = 1` результат будет следующим: - -```text -┌─SUMOrNull(-1)─┬─MAXOrNull(0)─┐ -│ NULL │ NULL │ -└───────────────┴──────────────┘ -``` - - -## aggregation_in_order_max_block_bytes {#aggregation_in_order_max_block_bytes} - - - -Максимальный размер блока в байтах, накапливаемого во время агрегации по первичному ключу. Меньший размер блока позволяет в большей степени распараллелить финальный этап слияния результатов агрегации. - -## aggregation_memory_efficient_merge_threads {#aggregation_memory_efficient_merge_threads} - - - -Количество потоков, используемых для слияния промежуточных результатов агрегации в режиме эффективного использования памяти. Чем больше значение, тем больше потребление памяти. 0 означает то же самое, что и `max_threads`. - -## allow_aggregate_partitions_independently {#allow_aggregate_partitions_independently} - - - -Включает независимую агрегацию партиций в отдельных потоках, когда ключ партиционирования соответствует ключу `GROUP BY`. Полезно, когда число партиций близко к числу ядер, а размеры партиций примерно одинаковы. - -## allow_archive_path_syntax {#allow_archive_path_syntax} - - - - - -Движки File/S3 и табличная функция будут интерпретировать пути с `::` как `::`, если архив имеет допустимое расширение. - -## allow_asynchronous_read_from_io_pool_for_merge_tree {#allow_asynchronous_read_from_io_pool_for_merge_tree} - - - -Использовать фоновый пул ввода-вывода для чтения из таблиц MergeTree. Этот параметр может увеличить производительность для запросов, ограниченных подсистемой ввода-вывода. - -## allow_changing_replica_until_first_data_packet {#allow_changing_replica_until_first_data_packet} - - - -Если параметр включён, в хеджированных запросах можно устанавливать новое соединение до получения первого пакета данных, даже если уже был достигнут некоторый прогресс -(но прогресс не обновлялся в течение тайм-аута `receive_data_timeout`), в противном случае смена реплики запрещается после первого зафиксированного прогресса. - -## allow_create_index_without_type {#allow_create_index_without_type} - - - -Разрешает выполнение запроса CREATE INDEX без указания TYPE. Такой запрос будет проигнорирован. Предназначено для тестов совместимости с SQL. - -## allow_custom_error_code_in_throwif {#allow_custom_error_code_in_throwif} - - - -Включает возможность задания пользовательского кода ошибки в функции throwIf(). Если установлено значение true, выбрасываемые исключения могут иметь неожиданные коды ошибок. - -## allow_ddl {#allow_ddl} - - - -Если установлено значение true, то пользователю разрешается выполнять DDL-запросы. - -## allow_deprecated_database_ordinary {#allow_deprecated_database_ordinary} - - - -Разрешить создание баз данных с устаревшим движком базы данных Ordinary - -## allow_deprecated_error_prone_window_functions {#allow_deprecated_error_prone_window_functions} - - - - - -Разрешить использование устаревших оконных функций, склонных к возникновению ошибок (neighbor, runningAccumulate, runningDifferenceStartingWithFirstValue, runningDifference) - -## allow_deprecated_snowflake_conversion_functions {#allow_deprecated_snowflake_conversion_functions} - - - - - -Функции `snowflakeToDateTime`, `snowflakeToDateTime64`, `dateTimeToSnowflake` и `dateTime64ToSnowflake` помечены как устаревшие и по умолчанию отключены. -Используйте вместо них функции `snowflakeIDToDateTime`, `snowflakeIDToDateTime64`, `dateTimeToSnowflakeID` и `dateTime64ToSnowflakeID`. - -Чтобы повторно включить устаревшие функции (например, в переходный период), установите для этой настройки значение `true`. - -## allow_deprecated_syntax_for_merge_tree {#allow_deprecated_syntax_for_merge_tree} - - - -Разрешает создавать таблицы *MergeTree с устаревшим синтаксисом определения движка таблицы - -## allow_distributed_ddl {#allow_distributed_ddl} - - - -Если параметр имеет значение `true`, пользователю разрешено выполнять распределённые DDL-запросы. - -## allow_drop_detached {#allow_drop_detached} - - - -Разрешает выполнение запросов ALTER TABLE ... DROP DETACHED PART[ITION] ... - -## allow_dynamic_type_in_join_keys {#allow_dynamic_type_in_join_keys} - - - - - -Разрешает использование типа Dynamic в ключах JOIN. Параметр добавлен для совместимости. Не рекомендуется использовать тип Dynamic в ключах JOIN, так как сравнение с другими типами может приводить к неожиданным результатам. - -## allow_execute_multiif_columnar {#allow_execute_multiif_columnar} - - - -Разрешает выполнять функцию multiIf в колоночном режиме - -## allow_experimental_alias_table_engine {#allow_experimental_alias_table_engine} - - - - - - - -Позволяет создавать таблицы с движком Alias. - -## allow_experimental_analyzer {#allow_experimental_analyzer} - -**Псевдонимы**: `enable_analyzer` - - - - - -Разрешает использование нового анализатора запросов. - -## allow_experimental_codecs {#allow_experimental_codecs} - - - - - -Если установлено значение true, можно указывать экспериментальные кодеки сжатия (но таких кодеков у нас ещё нет, поэтому эта опция ничего не делает). - -## allow_experimental_correlated_subqueries {#allow_experimental_correlated_subqueries} - - - - - - - -Разрешает выполнение коррелированных подзапросов. - -## allow_experimental_database_glue_catalog {#allow_experimental_database_glue_catalog} - - - -**Псевдонимы**: `allow_database_glue_catalog` - - - - - -Включает экспериментальный движок базы данных DataLakeCatalog с catalog_type = 'glue' - -## allow_experimental_database_hms_catalog {#allow_experimental_database_hms_catalog} - - - - - - - -Разрешает использование экспериментального движка базы данных DataLakeCatalog с catalog_type = 'hms' - -## allow_experimental_database_iceberg {#allow_experimental_database_iceberg} - - - -**Псевдонимы**: `allow_database_iceberg` - - - - - -Разрешает использование экспериментального движка базы данных DataLakeCatalog с `catalog_type = 'iceberg'`. - -## allow_experimental_database_materialized_postgresql {#allow_experimental_database_materialized_postgresql} - - - - - -Позволяет создать базу данных с движком Engine=MaterializedPostgreSQL(...). - -## allow_experimental_database_unity_catalog {#allow_experimental_database_unity_catalog} - - - -**Aliases**: `allow_database_unity_catalog` - - - - - -Разрешает использование экспериментального движка базы данных DataLakeCatalog с catalog_type = 'unity' - -## allow_experimental_delta_kernel_rs {#allow_experimental_delta_kernel_rs} - - - - - - - -Разрешает использование экспериментальной реализации delta-kernel-rs. - -## allow_experimental_delta_lake_writes {#allow_experimental_delta_lake_writes} - - - - - - - -Включает экспериментальную функцию записи через delta-kernel. - -## allow_experimental_full_text_index {#allow_experimental_full_text_index} - - - - - - - -Если установлено в значение true, разрешает использование экспериментального полнотекстового индекса. - -## allow_experimental_funnel_functions {#allow_experimental_funnel_functions} - - - - - -Включает экспериментальные функции для анализа воронок. - -## allow_experimental_hash_functions {#allow_experimental_hash_functions} - - - - - -Включает экспериментальные хеш-функции - -## allow_experimental_iceberg_compaction {#allow_experimental_iceberg_compaction} - - - - - - - -Позволяет явным образом использовать команду `OPTIMIZE` для таблиц формата Iceberg. - -## allow_experimental_insert_into_iceberg {#allow_experimental_insert_into_iceberg} - - - - - - - -Разрешает выполнять запросы `INSERT` в таблицы Iceberg. - -## allow_experimental_join_right_table_sorting {#allow_experimental_join_right_table_sorting} - - - - - - - -Если параметр установлен в значение `true` и выполняются условия `join_to_sort_minimum_perkey_rows` и `join_to_sort_maximum_table_rows`, правая таблица будет пересортирована по ключу для повышения производительности левого или внутреннего хеш-соединения. - -## allow_experimental_kafka_offsets_storage_in_keeper {#allow_experimental_kafka_offsets_storage_in_keeper} - - - - - - - -Разрешает использование экспериментальной функции хранения смещений Kafka в ClickHouse Keeper. Если параметр включён, для движка таблицы Kafka можно указать путь в ClickHouse Keeper и имя реплики. В результате вместо обычного движка Kafka будет использоваться новый тип движка хранения, в котором зафиксированные смещения хранятся преимущественно в ClickHouse Keeper. - -## allow_experimental_kusto_dialect {#allow_experimental_kusto_dialect} - - - - - - - -Включает поддержку языка запросов Kusto (KQL) — альтернативы SQL. - -## allow_experimental_materialized_postgresql_table {#allow_experimental_materialized_postgresql_table} - - - - - -Позволяет использовать движок таблицы MaterializedPostgreSQL. По умолчанию отключён, так как эта возможность является экспериментальной. - -## allow_experimental_nlp_functions {#allow_experimental_nlp_functions} - - - - - -Включает экспериментальные функции для обработки естественного языка. - -## allow_experimental_parallel_reading_from_replicas {#allow_experimental_parallel_reading_from_replicas} - - - -**Псевдонимы**: `enable_parallel_replicas` - - - -Использовать до `max_parallel_replicas` реплик с каждого шарда для выполнения запроса SELECT. Чтение параллелизуется и динамически координируется. 0 — отключено, 1 — включено, при ошибке параллельное чтение тихо отключается, 2 — включено, при ошибке выбрасывается исключение. - -## allow_experimental_prql_dialect {#allow_experimental_prql_dialect} - - - - - - - -Включает поддержку PRQL — альтернативного диалекта SQL. - -## allow_experimental_qbit_type {#allow_experimental_qbit_type} - - - - - - - -Позволяет создавать тип данных [QBit](../../sql-reference/data-types/qbit.md). - -## allow_experimental_query_deduplication {#allow_experimental_query_deduplication} - - - - - -Экспериментальная дедупликация данных для запросов SELECT на основе UUID частей данных - -## allow_experimental_statistics {#allow_experimental_statistics} - - - -**Псевдонимы**: `allow_experimental_statistic` - - - - - -Позволяет задавать столбцы со [статистикой](../../engines/table-engines/mergetree-family/mergetree.md/#table_engine-mergetree-creating-a-table) и [управлять статистикой](../../engines/table-engines/mergetree-family/mergetree.md/#column-statistics). - -## allow_experimental_time_series_aggregate_functions {#allow_experimental_time_series_aggregate_functions} - - - -**Псевдонимы**: `allow_experimental_ts_to_grid_aggregate_function` - - - - - -Экспериментальные агрегатные функции семейства timeSeries* для ресемплинга временных рядов в стиле Prometheus, вычисления `rate` и `delta`. - -## allow_experimental_time_series_table {#allow_experimental_time_series_table} - - - - - - - -Позволяет создавать таблицы с движком таблицы [TimeSeries](../../engines/table-engines/integrations/time-series.md). Возможные значения: - -- 0 — движок таблицы [TimeSeries](../../engines/table-engines/integrations/time-series.md) отключен. -- 1 — движок таблицы [TimeSeries](../../engines/table-engines/integrations/time-series.md) включен. - -## allow_experimental_time_time64_type {#allow_experimental_time_time64_type} - - - -**Псевдонимы**: `enable_time_time64_type` - - - - - -Позволяет создавать типы данных [Time](../../sql-reference/data-types/time.md) и [Time64](../../sql-reference/data-types/time64.md). - -## allow_experimental_window_view {#allow_experimental_window_view} - - - - - -Включает WINDOW VIEW. Функциональность пока недостаточно стабильна. - -## allow_experimental_ytsaurus_dictionary_source {#allow_experimental_ytsaurus_dictionary_source} - - - - - - - -Экспериментальный источник словарных данных для интеграции с YTsaurus. - -## allow_experimental_ytsaurus_table_engine {#allow_experimental_ytsaurus_table_engine} - - - - - - - -Экспериментальный табличный движок для интеграции с YTsaurus. - -## allow_experimental_ytsaurus_table_function {#allow_experimental_ytsaurus_table_function} - - - - - - - -Экспериментальный табличный движок для интеграции с YTsaurus. - -## allow_general_join_planning {#allow_general_join_planning} - - - - - -Разрешает использование более общего алгоритма планирования JOIN, который может обрабатывать более сложные условия, но работает только с hash join. Если hash join не включён, то независимо от значения этой настройки используется обычный алгоритм планирования JOIN. - -## allow_get_client_http_header {#allow_get_client_http_header} - - - - - -Разрешает использовать функцию `getClientHTTPHeader`, которая позволяет получить значение заголовка из текущего HTTP-запроса. По соображениям безопасности по умолчанию эта функция отключена, так как некоторые заголовки, такие как `Cookie`, могут содержать конфиденциальную информацию. Обратите внимание, что заголовки `X-ClickHouse-*` и `Authentication` всегда недоступны и не могут быть получены с помощью этой функции. - -## allow_hyperscan {#allow_hyperscan} - - - -Разрешает функции, использующие библиотеку Hyperscan. Отключите, чтобы избежать потенциально длительной компиляции и чрезмерного потребления ресурсов. - -## allow_introspection_functions {#allow_introspection_functions} - - - -Включает или отключает [функции интроспекции](../../sql-reference/functions/introspection.md) для профилирования запросов. - -Возможные значения: - -- 1 — функции интроспекции включены. -- 0 — функции интроспекции отключены. - -**См. также** - -- [Sampling Query Profiler](../../operations/optimizing-performance/sampling-query-profiler.md) -- Системная таблица [trace_log](/operations/system-tables/trace_log) - -## allow_materialized_view_with_bad_select {#allow_materialized_view_with_bad_select} - - - - - -Разрешает выполнять CREATE MATERIALIZED VIEW с запросом SELECT, который ссылается на несуществующие таблицы или столбцы. Такой запрос должен оставаться синтаксически корректным. Не применяется к обновляемым материализованным представлениям. Не применяется, если схему материализованного представления нужно выводить из запроса SELECT (то есть если в CREATE нет списка столбцов и нет таблицы, указанной в TO). Может использоваться для создания материализованного представления до создания его исходной таблицы. - -## allow_named_collection_override_by_default {#allow_named_collection_override_by_default} - - - -Разрешает по умолчанию переопределять поля именованных коллекций. - -## allow_non_metadata_alters {#allow_non_metadata_alters} - - - -Разрешает выполнять операции ALTER, которые изменяют не только метаданные таблиц, но и данные на диске. - -## allow_nonconst_timezone_arguments {#allow_nonconst_timezone_arguments} - - - - - -Разрешить неконстантные аргументы часового пояса в некоторых временных функциях, таких как `toTimeZone()`, `fromUnixTimestamp*()`, `snowflakeToDateTime*()`. -Этот параметр существует только для обеспечения совместимости. В ClickHouse часовой пояс является свойством типа данных и, соответственно, столбца. -Включение этого параметра создаёт ложное впечатление, что разные значения в одном столбце могут иметь разные часовые пояса. -Поэтому не включайте этот параметр. - -## allow_nondeterministic_mutations - - - -Пользовательская настройка, которая разрешает мутациям на реплицируемых таблицах использовать недетерминированные функции, такие как `dictGet`. - -Учитывая, что, например, словари могут быть рассинхронизированы между узлами, мутации, которые получают из них значения, по умолчанию запрещены на реплицируемых таблицах. Включение этой настройки разрешает такое поведение и перекладывает на пользователя ответственность за то, чтобы используемые данные были синхронизированы на всех узлах. - -**Пример** - -```xml - - - 1 - - - - - - - -``` - - -## allow_nondeterministic_optimize_skip_unused_shards {#allow_nondeterministic_optimize_skip_unused_shards} - - - -Разрешить использование недетерминированных функций (таких как `rand` или `dictGet`; для `dictGet` при обновлениях есть некоторые особенности) в ключе шардинга. - -Возможные значения: - -- 0 — Запрещено. -- 1 — Разрешено. - -## allow_not_comparable_types_in_comparison_functions {#allow_not_comparable_types_in_comparison_functions} - - - - - -Разрешает или запрещает использование несравнимых типов (например, JSON/AggregateFunction) в функциях сравнения `equal/less/greater/etc`. - -## allow_not_comparable_types_in_order_by {#allow_not_comparable_types_in_order_by} - - - - - -Позволяет или запрещает использование несравниваемых типов (например, JSON/AggregateFunction) в ключах ORDER BY. - -## allow_prefetched_read_pool_for_local_filesystem {#allow_prefetched_read_pool_for_local_filesystem} - - - -Предпочитать пул потоков упреждающего чтения, если все части находятся в локальной файловой системе - -## allow_prefetched_read_pool_for_remote_filesystem {#allow_prefetched_read_pool_for_remote_filesystem} - - - -Предпочитать пул потоков предварительной выборки, если все части находятся в удалённой файловой системе - -## allow_push_predicate_ast_for_distributed_subqueries {#allow_push_predicate_ast_for_distributed_subqueries} - - - - - -Разрешает проталкивание предиката на уровне AST для распределённых подзапросов с включённым анализатором - -## allow_push_predicate_when_subquery_contains_with {#allow_push_predicate_when_subquery_contains_with} - - - -Разрешает проталкивание предиката, если подзапрос содержит конструкцию WITH - -## allow_reorder_prewhere_conditions {#allow_reorder_prewhere_conditions} - - - - - -Разрешить изменение порядка условий при их переносе из WHERE в PREWHERE для оптимизации фильтрации - -## allow_settings_after_format_in_insert - - - - - -Определяет, разрешено ли использовать `SETTINGS` после `FORMAT` в запросах `INSERT`. Использовать эту настройку не рекомендуется, так как при этом часть `SETTINGS` может интерпретироваться как значения. - -Пример: - -```sql -INSERT INTO FUNCTION null('foo String') SETTINGS max_threads=1 VALUES ('bar'); -``` - -Однако следующий запрос будет работать только при включённой настройке `allow_settings_after_format_in_insert`: - -```sql -SET allow_settings_after_format_in_insert=1; -INSERT INTO FUNCTION null('foo String') VALUES ('bar') SETTINGS max_threads=1; -``` - -Возможные значения: - -* 0 — Запретить. -* 1 — Разрешить. - -:::note -Используйте этот параметр только для обеспечения обратной совместимости, если ваши сценарии использования зависят от старого синтаксиса. -::: - - -## allow_simdjson {#allow_simdjson} - - - -Разрешает использование библиотеки simdjson в функциях `JSON*`, если доступны инструкции AVX2. Если параметр отключен, будет использоваться библиотека rapidjson. - -## allow_special_serialization_kinds_in_output_formats {#allow_special_serialization_kinds_in_output_formats} - - - - - -Позволяет выводить столбцы со специальными типами сериализации, такими как Sparse и Replicated, без преобразования их в полное представление столбца. -Это помогает избежать лишнего копирования данных при форматировании. - -## allow_statistics_optimize {#allow_statistics_optimize} - - - -**Синонимы**: `allow_statistic_optimize` - - - - - -Разрешает использовать статистику при оптимизации запросов - -## allow_suspicious_codecs {#allow_suspicious_codecs} - - - - - -Если установлено в значение true, позволяет указывать бессмысленные кодеки сжатия. - -## allow_suspicious_fixed_string_types {#allow_suspicious_fixed_string_types} - - - -В операторе CREATE TABLE эта настройка позволяет создавать столбцы типа FixedString(n) с n > 256. FixedString с длиной >= 256 считается подозрительным и, скорее всего, указывает на неправильное использование типа. - -## allow_suspicious_indices {#allow_suspicious_indices} - - - - - -Отклоняет первичные/вторичные индексы и ключи сортировки с одинаковыми выражениями - -## allow_suspicious_low_cardinality_types {#allow_suspicious_low_cardinality_types} - - - -Разрешает или запрещает использование [LowCardinality](../../sql-reference/data-types/lowcardinality.md) с типами данных фиксированного размера 8 байт или меньше: числовыми типами данных и `FixedString(8_bytes_or_less)`. - -Для небольших фиксированных значений использование `LowCardinality` обычно неэффективно, поскольку ClickHouse хранит числовой индекс для каждой строки. В результате: - -- Расход дискового пространства может увеличиться. -- Потребление оперативной памяти может быть выше в зависимости от размера словаря. -- Некоторые функции могут работать медленнее из-за дополнительных операций кодирования/декодирования. - -Время слияний в таблицах движка [MergeTree](../../engines/table-engines/mergetree-family/mergetree.md) может увеличиваться по всем указанным выше причинам. - -Возможные значения: - -- 1 — использование `LowCardinality` не ограничено. -- 0 — использование `LowCardinality` ограничено. - -## allow_suspicious_primary_key {#allow_suspicious_primary_key} - - - - - -Разрешить подозрительные варианты `PRIMARY KEY`/`ORDER BY` для MergeTree (например, SimpleAggregateFunction). - -## allow_suspicious_ttl_expressions {#allow_suspicious_ttl_expressions} - - - - - -Отклоняет выражения TTL, которые не зависят ни от одного из столбцов таблицы. В большинстве случаев это указывает на ошибку пользователя. - -## allow_suspicious_types_in_group_by {#allow_suspicious_types_in_group_by} - - - - - -Разрешает или запрещает использование типов [Variant](../../sql-reference/data-types/variant.md) и [Dynamic](../../sql-reference/data-types/dynamic.md) в ключах GROUP BY. - -## allow_suspicious_types_in_order_by {#allow_suspicious_types_in_order_by} - - - - - -Разрешает или запрещает использование типов [Variant](../../sql-reference/data-types/variant.md) и [Dynamic](../../sql-reference/data-types/dynamic.md) в ключах ORDER BY. - -## allow_suspicious_variant_types {#allow_suspicious_variant_types} - - - - - -В операторе CREATE TABLE можно указывать тип Variant с похожими вариантами (например, с разными числовыми или типами дат). Включение этой настройки может привести к неоднозначности при работе со значениями похожих типов. - -## allow_unrestricted_reads_from_keeper {#allow_unrestricted_reads_from_keeper} - - - -Разрешает неограниченное (без ограничения по пути) чтение из таблицы system.zookeeper; может быть полезно, но небезопасно для ZooKeeper - -## alter_move_to_space_execute_async {#alter_move_to_space_execute_async} - - - -Выполнять ALTER TABLE MOVE ... TO [DISK|VOLUME] в асинхронном режиме - -## alter_partition_verbose_result - - - -Включает или отключает вывод информации о кусках, к которым операции с партициями и кусками были успешно применены. -Применимо к [ATTACH PARTITION|PART](/sql-reference/statements/alter/partition#attach-partitionpart) и к [FREEZE PARTITION](/sql-reference/statements/alter/partition#freeze-partition). - -Возможные значения: - -* 0 — отключить подробный вывод. -* 1 — включить подробный вывод. - -**Пример** - -```sql -CREATE TABLE test(a Int64, d Date, s String) ENGINE = MergeTree PARTITION BY toYYYYMDECLARE(d) ORDER BY a; -INSERT INTO test VALUES(1, '2021-01-01', ''); -INSERT INTO test VALUES(1, '2021-01-01', ''); -ALTER TABLE test DETACH PARTITION ID '202101'; - -ALTER TABLE test ATTACH PARTITION ID '202101' SETTINGS alter_partition_verbose_result = 1; - -┌─command_type─────┬─partition_id─┬─part_name────┬─old_part_name─┐ -│ ATTACH PARTITION │ 202101 │ 202101_7_7_0 │ 202101_5_5_0 │ -│ ATTACH PARTITION │ 202101 │ 202101_8_8_0 │ 202101_6_6_0 │ -└──────────────────┴──────────────┴──────────────┴───────────────┘ - -ALTER TABLE test FREEZE SETTINGS alter_partition_verbose_result = 1; - -┌─command_type─┬─partition_id─┬─part_name────┬─backup_name─┬─backup_path───────────────────┬─part_backup_path────────────────────────────────────────────┐ -│ FREEZE ALL │ 202101 │ 202101_7_7_0 │ 8 │ /var/lib/clickhouse/shadow/8/ │ /var/lib/clickhouse/shadow/8/data/default/test/202101_7_7_0 │ -│ FREEZE ALL │ 202101 │ 202101_8_8_0 │ 8 │ /var/lib/clickhouse/shadow/8/ │ /var/lib/clickhouse/shadow/8/data/default/test/202101_8_8_0 │ -└──────────────┴──────────────┴──────────────┴─────────────┴───────────────────────────────┴─────────────────────────────────────────────────────────────┘ -``` - - -## alter_sync {#alter_sync} - -**Псевдонимы**: `replication_alter_partitions_sync` - - - -Позволяет задать ожидание выполнения действий на репликах для запросов [ALTER](../../sql-reference/statements/alter/index.md), [OPTIMIZE](../../sql-reference/statements/optimize.md) или [TRUNCATE](../../sql-reference/statements/truncate.md). - -Возможные значения: - -- `0` — Не ждать. -- `1` — Ждать собственного выполнения. -- `2` — Ждать выполнения на всех репликах. - -Значение по умолчанию в Cloud: `1`. - -:::note -`alter_sync` применим только к таблицам `Replicated`; он не влияет на изменения таблиц, не являющихся `Replicated`. -::: - -## alter_update_mode {#alter_update_mode} - - - - - -Режим выполнения запросов `ALTER`, содержащих команды `UPDATE`. - -Возможные значения: - -- `heavy` — выполняет обычную мутацию. -- `lightweight` — выполняет облегчённое обновление, если это возможно, в противном случае выполняет обычную мутацию. -- `lightweight_force` — выполняет облегчённое обновление, если это возможно, в противном случае генерирует исключение. - -## analyze_index_with_space_filling_curves {#analyze_index_with_space_filling_curves} - - - -Если в индексе таблицы используется кривая, заполняющая пространство, например `ORDER BY mortonEncode(x, y)` или `ORDER BY hilbertEncode(x, y)`, и запрос содержит условия на её аргументы, например `x >= 10 AND x <= 20 AND y >= 20 AND y <= 30`, то для анализа индекса используется эта кривая, заполняющая пространство. - -## analyzer_compatibility_allow_compound_identifiers_in_unflatten_nested {#analyzer_compatibility_allow_compound_identifiers_in_unflatten_nested} - - - - - -Разрешает добавление составных идентификаторов к столбцам типа Nested. Это параметр совместимости, поскольку он изменяет результат запроса. Когда параметр отключен, запрос `SELECT a.b.c FROM table ARRAY JOIN a` не работает, а результат `SELECT a FROM table` не включает столбец `a.b.c` в результат для `Nested a`. - -## analyzer_compatibility_join_using_top_level_identifier {#analyzer_compatibility_join_using_top_level_identifier} - - - - - -Принудительное разрешение идентификатора в JOIN USING по проекции (например, в `SELECT a + 1 AS b FROM t1 JOIN t2 USING (b)` соединение будет выполняться по условию `t1.a + 1 = t2.b`, а не `t1.b = t2.b`). - -## any_join_distinct_right_table_keys {#any_join_distinct_right_table_keys} - - - - - -Включает устаревшее поведение сервера ClickHouse в операциях `ANY INNER|LEFT JOIN`. - -:::note -Используйте этот параметр только для обратной совместимости, если ваши сценарии зависят от устаревшего поведения операций `JOIN`. -::: - -Когда устаревшее поведение включено: - -- Результаты операций `t1 ANY LEFT JOIN t2` и `t2 ANY RIGHT JOIN t1` не одинаковы, поскольку ClickHouse использует логику с отображением ключей таблиц слева направо «многие‑к‑одному». -- Результаты операций `ANY INNER JOIN` содержат все строки из левой таблицы, как и операции `SEMI LEFT JOIN`. - -Когда устаревшее поведение отключено: - -- Результаты операций `t1 ANY LEFT JOIN t2` и `t2 ANY RIGHT JOIN t1` одинаковы, поскольку ClickHouse использует логику, обеспечивающую отображение ключей «один‑ко‑многим» в операциях `ANY RIGHT JOIN`. -- Результаты операций `ANY INNER JOIN` содержат по одной строке на ключ из левой и правой таблиц. - -Возможные значения: - -- 0 — устаревшее поведение отключено. -- 1 — устаревшее поведение включено. - -См. также: - -- [Строгость JOIN](/sql-reference/statements/select/join#settings) - -## apply_deleted_mask {#apply_deleted_mask} - - - -Включает фильтрацию строк, удалённых с помощью легковесного удаления (lightweight DELETE). Если параметр отключён, запрос сможет читать эти строки. Это полезно для отладки и сценариев восстановления удалённых данных. - -## apply_mutations_on_fly {#apply_mutations_on_fly} - - - -Если установлено значение `true`, мутации (операции UPDATE и DELETE), которые ещё не материализованы в части данных, будут применяться при выполнении запросов SELECT. - -## apply_patch_parts {#apply_patch_parts} - - - - - -Если установлено значение `true`, патч-части (легковесные обновления) применяются при выполнении запросов `SELECT`. - -## apply_patch_parts_join_cache_buckets {#apply_patch_parts_join_cache_buckets} - - - - - -Количество бакетов во временном кэше при применении частей патча в режиме Join. - -## apply_settings_from_server {#apply_settings_from_server} - - - - - -Определяет, должен ли клиент принимать настройки от сервера. - -Эта настройка влияет только на операции, выполняемые на стороне клиента, в частности на разбор входных данных INSERT и форматирование результата запроса. Основная часть выполнения запроса происходит на сервере и не зависит от этой настройки. - -Обычно эту настройку следует задавать в профиле пользователя (users.xml или запросы вида `ALTER USER`), а не через клиент (аргументы командной строки клиента, запрос `SET` или секция `SETTINGS` запроса `SELECT`). Через клиент её можно изменить на false, но нельзя изменить на true (потому что сервер не будет отправлять настройки, если в профиле пользователя указано `apply_settings_from_server = false`). - -Обратите внимание, что изначально (24.12) существовала серверная настройка (`send_settings_to_client`), но позже она была заменена этой клиентской настройкой для повышения удобства использования. - -## arrow_flight_request_descriptor_type {#arrow_flight_request_descriptor_type} - - - - - -Тип дескриптора, используемого для запросов Arrow Flight. Режим `path` отправляет имя набора данных как дескриптор пути. Режим `command` отправляет SQL‑запрос как дескриптор команды (требуется для Dremio). - -Возможные значения: - -- `path` — использовать FlightDescriptor::Path (значение по умолчанию, работает с большинством серверов Arrow Flight) -- `command` — использовать FlightDescriptor::Command с запросом SELECT (требуется для Dremio) - -## asterisk_include_alias_columns {#asterisk_include_alias_columns} - - - -Включать столбцы типа [ALIAS](../../sql-reference/statements/create/table.md/#alias) в запросах с подстановочным символом (`SELECT *`). - -Возможные значения: - -- 0 — отключено -- 1 — включено - -## asterisk_include_materialized_columns {#asterisk_include_materialized_columns} - - - -Включать столбцы [MATERIALIZED](/sql-reference/statements/create/view#materialized-view) для запросов с использованием подстановочного символа (`SELECT *`). - -Возможные значения: - -- 0 - отключено -- 1 - включено - -## async_insert {#async_insert} - - - -Если значение равно true, данные из запроса INSERT помещаются в очередь и позднее в фоновом режиме записываются в таблицу. Если параметр wait_for_async_insert имеет значение false, запрос INSERT обрабатывается почти мгновенно, в противном случае клиент будет ждать, пока данные не будут записаны в таблицу. - -## async_insert_busy_timeout_decrease_rate {#async_insert_busy_timeout_decrease_rate} - - - - - -Экспоненциальный коэффициент уменьшения адаптивного тайм-аута асинхронной вставки - -## async_insert_busy_timeout_increase_rate {#async_insert_busy_timeout_increase_rate} - - - - - -Экспоненциальный коэффициент увеличения адаптивного таймаута асинхронной вставки - -## async_insert_busy_timeout_max_ms {#async_insert_busy_timeout_max_ms} - -**Псевдонимы**: `async_insert_busy_timeout_ms` - - - - - -Максимальное время ожидания до сброса накопленных данных по запросу, отсчитываемое с момента появления первых данных. - -## async_insert_busy_timeout_min_ms {#async_insert_busy_timeout_min_ms} - - - - - -Если автонастройка включена параметром async_insert_use_adaptive_busy_timeout, это минимальное время ожидания перед сбросом накопленных данных для одного запроса, отсчитываемое с момента появления первых данных. Оно также служит начальным значением для адаптивного алгоритма. - -## async_insert_deduplicate {#async_insert_deduplicate} - - - -Для асинхронных запросов INSERT в реплицированной таблице определяет, должна ли выполняться дедупликация вставляемых блоков. - -## async_insert_max_data_size {#async_insert_max_data_size} - - - - - -Максимальный размер в байтах неразобранных данных, собираемых для одного запроса перед вставкой. - -## async_insert_max_query_number {#async_insert_max_query_number} - - - -Максимальное количество запросов INSERT до выполнения фактической вставки. -Влияет только в том случае, если параметр [`async_insert_deduplicate`](#async_insert_deduplicate) равен 1. - -## async_insert_poll_timeout_ms {#async_insert_poll_timeout_ms} - - - - - -Таймаут для опроса очереди асинхронных вставок - -## async_insert_use_adaptive_busy_timeout {#async_insert_use_adaptive_busy_timeout} - - - - - -Если установлено в значение true, используется адаптивный таймаут занятости для асинхронных вставок - -## async_query_sending_for_remote {#async_query_sending_for_remote} - - - - - -Включает асинхронное создание соединений и отправку запросов при выполнении удалённого запроса. - -По умолчанию включено. - -## async_socket_for_remote {#async_socket_for_remote} - - - - - -Включает асинхронное чтение из сокета при выполнении удалённого запроса. - -По умолчанию включена. - -## azure_allow_parallel_part_upload {#azure_allow_parallel_part_upload} - - - - - -Использовать несколько потоков для многокомпонентной (multipart) загрузки в Azure. - -## azure_check_objects_after_upload {#azure_check_objects_after_upload} - - - - - -Проверять каждый загруженный объект в Azure Blob Storage для подтверждения успешной загрузки - -## azure_connect_timeout_ms {#azure_connect_timeout_ms} - - - - - -Таймаут подключения к хосту дисков Azure. - -## azure_create_new_file_on_insert {#azure_create_new_file_on_insert} - - - -Включает или отключает создание нового файла при каждой вставке в таблицы движка Azure - -## azure_ignore_file_doesnt_exist {#azure_ignore_file_doesnt_exist} - - - - - -Игнорировать отсутствие файлов при чтении по определённым ключам. - -Возможные значения: - -- 1 — `SELECT` возвращает пустой результат. -- 0 — `SELECT` выбрасывает исключение. - -## azure_list_object_keys_size {#azure_list_object_keys_size} - - - -Максимальное количество файлов, которое может быть возвращено за один запросом ListObject - -## azure_max_blocks_in_multipart_upload {#azure_max_blocks_in_multipart_upload} - - - - - -Максимальное количество блоков при multipart-загрузке в Azure. - -## azure_max_get_burst {#azure_max_get_burst} - - - - - -Максимальное количество запросов, которые могут быть отправлены одновременно до достижения ограничения на число запросов в секунду. По умолчанию (0) эквивалентно значению `azure_max_get_rps`. - -## azure_max_get_rps {#azure_max_get_rps} - - - - - -Ограничение скорости GET-запросов к Azure (число запросов в секунду) перед применением троттлинга. Ноль означает отсутствие лимита. - -## azure_max_inflight_parts_for_one_file {#azure_max_inflight_parts_for_one_file} - - - - - -Максимальное количество одновременно загружаемых частей файла в запросе многокомпонентной загрузки (multipart upload). 0 означает отсутствие ограничений. - -## azure_max_put_burst {#azure_max_put_burst} - - - - - -Максимальное число запросов, которые могут быть отправлены одновременно до достижения ограничения на число запросов в секунду. По умолчанию (0) соответствует значению `azure_max_put_rps`. - -## azure_max_put_rps {#azure_max_put_rps} - - - - - -Ограничение количества PUT-запросов к Azure в секунду до начала ограничения скорости (throttling). Ноль означает отсутствие ограничения. - -## azure_max_redirects {#azure_max_redirects} - - - - - -Максимально допустимое число переходов при перенаправлении в Azure. - -## azure_max_single_part_copy_size {#azure_max_single_part_copy_size} - - - - - -Максимальный размер объекта, который можно скопировать с использованием одиночного копирования в хранилище Azure Blob Storage. - -## azure_max_single_part_upload_size {#azure_max_single_part_upload_size} - - - - - -Максимальный размер объекта для загрузки одним запросом (singlepart) в Azure Blob Storage. - -## azure_max_single_read_retries {#azure_max_single_read_retries} - - - -Максимальное количество повторных попыток при одном чтении из Azure Blob Storage. - -## azure_max_unexpected_write_error_retries {#azure_max_unexpected_write_error_retries} - - - - - -Максимальное количество повторных попыток при возникновении неожиданных ошибок при записи в Azure Blob Storage - -## azure_max_upload_part_size {#azure_max_upload_part_size} - - - - - -Максимальный размер фрагмента при многочастичной загрузке в Azure Blob Storage. - -## azure_min_upload_part_size {#azure_min_upload_part_size} - - - - - -Минимальный размер части, отправляемой при многокомпонентной загрузке в Azure Blob Storage. - -## azure_request_timeout_ms {#azure_request_timeout_ms} - - - - - -Таймаут неактивности при отправке и получении данных в/из Azure. Операция завершается с ошибкой, если отдельный вызов TCP-чтения или записи блокируется дольше этого времени. - -## azure_sdk_max_retries {#azure_sdk_max_retries} - - - - - -Максимальное число повторных попыток в Azure SDK - -## azure_sdk_retry_initial_backoff_ms {#azure_sdk_retry_initial_backoff_ms} - - - - - -Минимальный интервал между повторными попытками в Azure SDK - -## azure_sdk_retry_max_backoff_ms {#azure_sdk_retry_max_backoff_ms} - - - - - -Максимальная задержка между повторными попытками в Azure SDK - -## azure_skip_empty_files {#azure_skip_empty_files} - - - - - -Включает или отключает пропуск пустых файлов в движке S3. - -Возможные значения: - -- 0 — `SELECT` выбрасывает исключение, если пустой файл несовместим с запрошенным форматом. -- 1 — `SELECT` возвращает пустой результат для пустого файла. - -## azure_strict_upload_part_size {#azure_strict_upload_part_size} - - - - - -Точный размер части данных, загружаемой при многокомпонентной (multipart) загрузке в объектное хранилище Azure Blob Storage. - -## azure_throw_on_zero_files_match {#azure_throw_on_zero_files_match} - - - - - -Выдавать ошибку, если не удалось сопоставить ни одного файла в соответствии с правилами раскрытия glob-шаблонов. - -Возможные значения: - -- 1 — `SELECT` генерирует исключение. -- 0 — `SELECT` возвращает пустой результат. - -## azure_truncate_on_insert {#azure_truncate_on_insert} - - - -Включает или отключает усечение таблиц движка Azure перед вставкой данных. - -## azure_upload_part_size_multiply_factor {#azure_upload_part_size_multiply_factor} - - - - - -Умножает azure_min_upload_part_size на этот коэффициент каждый раз, когда в рамках одной операции записи в Azure Blob Storage было загружено azure_multiply_parts_count_threshold частей. - -## azure_upload_part_size_multiply_parts_count_threshold {#azure_upload_part_size_multiply_parts_count_threshold} - - - - - -Каждый раз, когда в хранилище Azure Blob загружается указанное количество частей, значение azure_min_upload_part_size умножается на azure_upload_part_size_multiply_factor. - -## azure_use_adaptive_timeouts {#azure_use_adaptive_timeouts} - - - - - -Если значение параметра установлено в `true`, для всех запросов к Azure первые две попытки выполняются с малыми тайм-аутами отправки и получения данных. -Если значение параметра установлено в `false`, все попытки выполняются с одинаковыми тайм-аутами. - -## backup_restore_batch_size_for_keeper_multi {#backup_restore_batch_size_for_keeper_multi} - - - -Максимальный размер пакета для multi-запроса к [Zoo]Keeper во время резервного копирования или восстановления - -## backup_restore_batch_size_for_keeper_multiread {#backup_restore_batch_size_for_keeper_multiread} - - - -Максимальный размер пакета операций для запроса multiread к [Zoo]Keeper во время резервного копирования или восстановления - -## backup_restore_failure_after_host_disconnected_for_seconds {#backup_restore_failure_after_host_disconnected_for_seconds} - - - - - -Если хост во время операции `BACKUP ON CLUSTER` или `RESTORE ON CLUSTER` не пересоздаёт свой эфемерный узел `alive` в ZooKeeper в течение этого времени, то вся операция резервного копирования или восстановления считается неуспешной. -Это значение должно быть больше любого разумного времени, необходимого хосту для повторного подключения к ZooKeeper после сбоя. -Ноль означает отсутствие ограничения. - -## backup_restore_finish_timeout_after_error_sec {#backup_restore_finish_timeout_after_error_sec} - - - - - -Как долго инициатор должен ждать, пока другие хосты отреагируют на узел `error` и прекратят выполнение текущей операции BACKUP ON CLUSTER или RESTORE ON CLUSTER. - -## backup_restore_keeper_fault_injection_probability {#backup_restore_keeper_fault_injection_probability} - - - -Приблизительная вероятность сбоя запроса к Keeper во время резервного копирования или восстановления. Допустимое значение находится в диапазоне от 0.0f до 1.0f включительно. - -## backup_restore_keeper_fault_injection_seed {#backup_restore_keeper_fault_injection_seed} - - - -0 — случайное начальное значение, иначе значение настройки - -## backup_restore_keeper_max_retries {#backup_restore_keeper_max_retries} - - - - - -Максимальное число повторных попыток выполнения операций [Zoo]Keeper во время выполнения операции BACKUP или RESTORE. -Должно быть достаточно большим, чтобы вся операция не завершилась неудачей из-за временного сбоя [Zoo]Keeper. - -## backup_restore_keeper_max_retries_while_handling_error {#backup_restore_keeper_max_retries_while_handling_error} - - - - - -Максимальное число повторных попыток выполнения операций [Zoo]Keeper при обработке ошибки операции BACKUP ON CLUSTER или RESTORE ON CLUSTER. - -## backup_restore_keeper_max_retries_while_initializing {#backup_restore_keeper_max_retries_while_initializing} - - - - - -Максимальное число повторных попыток операций [Zoo]Keeper при инициализации операции BACKUP ON CLUSTER или RESTORE ON CLUSTER. - -## backup_restore_keeper_retry_initial_backoff_ms {#backup_restore_keeper_retry_initial_backoff_ms} - - - -Начальный интервал ожидания перед повторной попыткой (backoff) для операций [Zoo]Keeper при создании или восстановлении резервной копии - -## backup_restore_keeper_retry_max_backoff_ms {#backup_restore_keeper_retry_max_backoff_ms} - - - -Максимальный интервал ожидания при повторных попытках операций [Zoo]Keeper во время создания или восстановления резервной копии - -## backup_restore_keeper_value_max_size {#backup_restore_keeper_value_max_size} - - - -Максимальный размер данных узла [Zoo]Keeper при резервном копировании - -## backup_restore_s3_retry_attempts {#backup_restore_s3_retry_attempts} - - - - - -Параметр для Aws::Client::RetryStrategy, Aws::Client сам выполняет повторные попытки, 0 отключает повторы. Применяется только при резервном копировании и восстановлении. - -## backup_restore_s3_retry_initial_backoff_ms {#backup_restore_s3_retry_initial_backoff_ms} - - - - - -Начальная задержка (backoff) в миллисекундах перед первой повторной попыткой во время резервного копирования и восстановления. Каждая последующая повторная попытка увеличивает задержку экспоненциально, вплоть до максимального значения, заданного параметром `backup_restore_s3_retry_max_backoff_ms`. - -## backup_restore_s3_retry_jitter_factor {#backup_restore_s3_retry_jitter_factor} - - - - - -Коэффициент джиттера, применяемый к задержке между повторными попытками (backoff) в Aws::Client::RetryStrategy во время операций резервного копирования и восстановления. Вычисленная задержка умножается на случайный коэффициент в диапазоне [1.0, 1.0 + jitter], но не более максимального значения `backup_restore_s3_retry_max_backoff_ms`. Должен находиться в интервале [0.0, 1.0]. - -## backup_restore_s3_retry_max_backoff_ms {#backup_restore_s3_retry_max_backoff_ms} - - - - - -Максимальная задержка в миллисекундах между повторными попытками при выполнении операций резервного копирования и восстановления. - -## backup_slow_all_threads_after_retryable_s3_error {#backup_slow_all_threads_after_retryable_s3_error} - - - - - -При значении `true` все потоки, выполняющие запросы к S3 к одной и той же конечной точке (endpoint) резервного копирования, замедляются -после того, как любой отдельный запрос к S3 получает временную ошибку S3, допускающую повторную попытку, такую как «Slow Down». -При значении `false` каждый поток обрабатывает задержку (backoff) для запросов к S3 независимо от остальных. - -## cache_warmer_threads {#cache_warmer_threads} - - - - - -Параметр действует только в ClickHouse Cloud. Количество фоновых потоков для упреждающей (спекулятивной) загрузки новых частей данных в файловый кэш, когда включён [cache_populated_by_fetch](merge-tree-settings.md/#cache_populated_by_fetch). Значение 0 отключает параметр. - -## calculate_text_stack_trace {#calculate_text_stack_trace} - - - -Вычислять текстовый стек вызовов (stack trace) при возникновении исключений во время выполнения запроса. Это значение используется по умолчанию. Требует поиска символов, что может замедлить фаззинг‑тесты при выполнении большого количества некорректных запросов. В обычных случаях не следует отключать эту опцию. - -## cancel_http_readonly_queries_on_client_close {#cancel_http_readonly_queries_on_client_close} - - - -Отменяет HTTP-запросы только для чтения (например, `SELECT`), когда клиент закрывает соединение, не дожидаясь ответа. - -Значение по умолчанию в облаке: `0`. - -## cast_ipv4_ipv6_default_on_conversion_error {#cast_ipv4_ipv6_default_on_conversion_error} - - - - - -Оператор CAST к типу IPv4, оператор CAST к типу IPv6, а также функции toIPv4 и toIPv6 будут возвращать значение по умолчанию вместо выбрасывания исключения при ошибке преобразования. - -## cast_keep_nullable - - - -Включает или отключает сохранение типа данных `Nullable` при операциях [CAST](/sql-reference/functions/type-conversion-functions#cast). - -Когда настройка включена и аргумент функции `CAST` имеет тип `Nullable`, результат также преобразуется в тип `Nullable`. Когда настройка отключена, результат всегда имеет именно целевой тип. - -Возможные значения: - -* 0 — Результат `CAST` имеет в точности указанный целевой тип. -* 1 — Если тип аргумента — `Nullable`, результат `CAST` преобразуется в `Nullable(DestinationDataType)`. - -**Примеры** - -Следующий запрос возвращает результат именно целевого типа данных: - -```sql -SET cast_keep_nullable = 0; -SELECT CAST(toNullable(toInt32(0)) AS Int32) as x, toTypeName(x); -``` - -Результат: - -```text -┌─x─┬─toTypeName(CAST(toNullable(toInt32(0)), 'Int32'))─┐ -│ 0 │ Int32 │ -└───┴───────────────────────────────────────────────────┘ -``` - -Следующий запрос приводит к добавлению модификатора `Nullable` к целевому типу данных: - -```sql -SET cast_keep_nullable = 1; -SELECT CAST(toNullable(toInt32(0)) AS Int32) as x, toTypeName(x); -``` - -Результат: - -```text -┌─x─┬─toTypeName(CAST(toNullable(toInt32(0)), 'Int32'))─┐ -│ 0 │ Nullable(Int32) │ -└───┴───────────────────────────────────────────────────┘ -``` - -**См. также** - -* Функция [CAST](/sql-reference/functions/type-conversion-functions#cast) - - -## cast_string_to_date_time_mode {#cast_string_to_date_time_mode} - - - - - -Позволяет выбрать парсер текстового представления даты и времени при приведении значения из типа String к DateTime. - -Возможные значения: - -- `'best_effort'` — Включает расширенный разбор. - - ClickHouse может разбирать базовый формат `YYYY-MM-DD HH:MM:SS` и все форматы даты и времени стандарта [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601). Например, `'2018-06-08T01:02:03.000Z'`. - -- `'best_effort_us'` — Аналогичен `best_effort` (см. различия в [parseDateTimeBestEffortUS](../../sql-reference/functions/type-conversion-functions#parsedatetimebesteffortus)) - -- `'basic'` — Использовать базовый парсер. - - ClickHouse может разбирать только базовый формат `YYYY-MM-DD HH:MM:SS` или `YYYY-MM-DD`. Например, `2019-08-20 10:18:56` или `2019-08-20`. - -См. также: - -- [Тип данных DateTime.](../../sql-reference/data-types/datetime.md) -- [Функции для работы с датой и временем.](../../sql-reference/functions/date-time-functions.md) - -## cast_string_to_dynamic_use_inference {#cast_string_to_dynamic_use_inference} - - - - - -Использовать вывод типов при преобразовании String в Dynamic - -## cast_string_to_variant_use_inference {#cast_string_to_variant_use_inference} - - - - - -Использовать выведение типов при преобразовании из String в Variant. - -## check_query_single_value_result {#check_query_single_value_result} - - - -Определяет уровень детализации результата запроса [CHECK TABLE](/sql-reference/statements/check-table) для движков семейства `MergeTree`. - -Возможные значения: - -- 0 — запрос показывает статус проверки для каждой части данных таблицы. -- 1 — запрос показывает общий статус проверки таблицы. - -## check_referential_table_dependencies {#check_referential_table_dependencies} - - - -Проверяет, не нарушит ли DDL-запрос (например, DROP TABLE или RENAME) ссылочные зависимости - -## check_table_dependencies {#check_table_dependencies} - - - -Проверьте, что DDL-запрос (например, DROP TABLE или RENAME) не нарушит зависимости - -## checksum_on_read {#checksum_on_read} - - - -Проверять контрольные суммы при чтении. Этот параметр включён по умолчанию и всегда должен быть включён в продуктивных средах. Не стоит ожидать какой-либо выгоды от его отключения. Его можно использовать только для экспериментов и бенчмарков. Настройка применима только к таблицам семейства MergeTree. Для других табличных движков и при получении данных по сети контрольные суммы всегда проверяются. - -## cloud_mode {#cloud_mode} - - - -Облачный режим - -## cloud_mode_database_engine {#cloud_mode_database_engine} - - - - - -Движок базы данных, допустимый в ClickHouse Cloud. 1 — переписывать DDL‑операторы для использования реплицируемой базы данных, 2 — переписывать DDL‑операторы для использования общей базы данных. - -## cloud_mode_engine {#cloud_mode_engine} - - - -Семейство движков, разрешённых в Cloud. - -- 0 — разрешить все движки -- 1 — переписывать DDL так, чтобы использовать *ReplicatedMergeTree -- 2 — переписывать DDL так, чтобы использовать SharedMergeTree -- 3 — переписывать DDL так, чтобы использовать SharedMergeTree, кроме случаев, когда явно указан удалённый диск (remote disk) - -Тип UInt64, чтобы минимизировать публичную часть - -## cluster_for_parallel_replicas {#cluster_for_parallel_replicas} - - - -Кластер для шарда, в который входит текущий сервер - -## cluster_function_process_archive_on_multiple_nodes {#cluster_function_process_archive_on_multiple_nodes} - - - - - -Если имеет значение `true`, повышает производительность обработки архивов в кластерных функциях. Для обеспечения совместимости и во избежание ошибок при обновлении до версии 25.7+ следует установить значение `false`, если вы используете кластерные функции с архивами в версиях до 25.7. - -## cluster_table_function_buckets_batch_size {#cluster_table_function_buckets_batch_size} - - - - - -Определяет примерный размер пакета (в байтах), используемого при распределённой обработке задач в табличных функциях `cluster` с разбиением по `bucket`. Система накапливает данные, пока не будет достигнуто это минимальное значение. Фактический размер может быть немного больше для выравнивания по границам данных. - -## cluster_table_function_split_granularity {#cluster_table_function_split_granularity} - - - - - -Определяет, как данные разбиваются на задачи при выполнении табличной функции CLUSTER. - -Этот параметр задаёт уровень детализации распределения нагрузки по кластеру: - -- `file` — каждая задача обрабатывает целый файл. -- `bucket` — задачи создаются для каждого внутреннего блока данных внутри файла (например, для групп строк (row groups) в Parquet). - -Выбор более мелкой гранулярности (например, `bucket`) может улучшить параллелизм при работе с небольшим количеством крупных файлов. -Например, если Parquet‑файл содержит несколько групп строк, включение гранулярности `bucket` позволяет обрабатывать каждую группу независимо разными исполнителями. - -## collect_hash_table_stats_during_aggregation {#collect_hash_table_stats_during_aggregation} - - - -Включает сбор статистики о хеш-таблицах для оптимизации выделения памяти - -## collect_hash_table_stats_during_joins {#collect_hash_table_stats_during_joins} - - - - - -Включает сбор статистики о хеш-таблицах для оптимизации использования памяти. - -## compatibility {#compatibility} - -Параметр `compatibility` указывает ClickHouse использовать набор настроек по умолчанию из предыдущей версии ClickHouse; сама предыдущая версия задаётся значением этого параметра. - -Если какие-либо настройки заданы в значения, отличные от значений по умолчанию, то эти настройки сохраняются (параметр `compatibility` влияет только на параметры, которые не были изменены). - -Этот параметр принимает номер версии ClickHouse в виде строки, например `22.3`, `22.8`. Пустое значение означает, что параметр отключён. - -По умолчанию отключён. - -:::note -В ClickHouse Cloud значение параметра `compatibility` по умолчанию на уровне сервиса должно быть установлено службой поддержки ClickHouse Cloud. Пожалуйста, [откройте обращение](https://clickhouse.cloud/support) в службу поддержки, чтобы его установить. -Однако параметр `compatibility` может быть переопределён на уровне пользователя, роли, профиля, запроса или сеанса с использованием стандартных механизмов настройки ClickHouse, например `SET compatibility = '22.3'` в сеансе или `SETTINGS compatibility = '22.3'` в запросе. -::: - -## compatibility_ignore_auto_increment_in_create_table {#compatibility_ignore_auto_increment_in_create_table} - - - -Игнорировать ключевое слово AUTO_INCREMENT в объявлении столбца, если параметр имеет значение true; в противном случае возвращать ошибку. Упрощает миграцию с MySQL. - -## compatibility_ignore_collation_in_create_table {#compatibility_ignore_collation_in_create_table} - - - -Совместимость: игнорировать сортировку в `CREATE TABLE` - -## compile_aggregate_expressions {#compile_aggregate_expressions} - - - -Включает или отключает JIT-компиляцию агрегатных функций в нативный код. Включение этого параметра может повысить производительность. - -Возможные значения: - -- 0 — агрегация выполняется без JIT-компиляции. -- 1 — агрегация выполняется с использованием JIT-компиляции. - -**См. также** - -- [min_count_to_compile_aggregate_expression](#min_count_to_compile_aggregate_expression) - -## compile_expressions {#compile_expressions} - - - - - -Компилирует некоторые скалярные функции и операторы в нативный код. - -## compile_sort_description {#compile_sort_description} - - - -Компилировать описание сортировки в нативный код. - -## connect_timeout {#connect_timeout} - - - -Таймаут ожидания подключения при отсутствии реплик. - -## connect_timeout_with_failover_ms {#connect_timeout_with_failover_ms} - - - - - -Таймаут в миллисекундах для подключения к удалённому серверу для движка таблиц Distributed, если в определении кластера используются секции `shard` и `replica`. -Если подключиться не удалось, выполняется несколько попыток подключения к различным репликам. - -## connect_timeout_with_failover_secure_ms {#connect_timeout_with_failover_secure_ms} - - - - - -Тайм-аут ожидания подключения при выборе первой работоспособной реплики (для безопасных подключений). - -## connection_pool_max_wait_ms {#connection_pool_max_wait_ms} - - - -Время ожидания подключения в миллисекундах, когда пул соединений заполнен. - -Возможные значения: - -- Положительное целое число. -- 0 — бесконечное время ожидания. - -## connections_with_failover_max_tries {#connections_with_failover_max_tries} - - - -Максимальное количество попыток подключения к каждой реплике для движка таблицы Distributed. - -## convert_query_to_cnf - - - -Если установлено значение `true`, запрос `SELECT` будет преобразован в конъюнктивную нормальную форму (CNF). В некоторых случаях переписывание запроса в CNF может выполняться быстрее (подробности см. в этом [issue на GitHub](https://github.com/ClickHouse/ClickHouse/issues/11749)). - -Например, обратите внимание, что следующий запрос `SELECT` не изменяется (поведение по умолчанию): - -```sql -EXPLAIN SYNTAX -SELECT * -FROM -( - SELECT number AS x - FROM numbers(20) -) AS a -WHERE ((x >= 1) AND (x <= 5)) OR ((x >= 10) AND (x <= 15)) -SETTINGS convert_query_to_cnf = false; -``` - -Результат: - -```response -┌─explain────────────────────────────────────────────────────────┐ -│ SELECT x │ -│ FROM │ -│ ( │ -│ SELECT number AS x │ -│ FROM numbers(20) │ -│ WHERE ((x >= 1) AND (x <= 5)) OR ((x >= 10) AND (x <= 15)) │ -│ ) AS a │ -│ WHERE ((x >= 1) AND (x <= 5)) OR ((x >= 10) AND (x <= 15)) │ -│ SETTINGS convert_query_to_cnf = 0 │ -└────────────────────────────────────────────────────────────────┘ -``` - -Давайте установим параметр `convert_query_to_cnf` в `true` и посмотрим, что изменится: - -```sql -EXPLAIN SYNTAX -SELECT * -FROM -( - SELECT number AS x - FROM numbers(20) -) AS a -WHERE ((x >= 1) AND (x <= 5)) OR ((x >= 10) AND (x <= 15)) -SETTINGS convert_query_to_cnf = true; -``` - -Обратите внимание, что условие `WHERE` переписано в КНФ, но результирующий набор данных идентичен — булева логика осталась прежней: - -```response -┌─explain───────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ -│ SELECT x │ -│ FROM │ -│ ( │ -│ SELECT number AS x │ -│ FROM numbers(20) │ -│ WHERE ((x <= 15) OR (x <= 5)) AND ((x <= 15) OR (x >= 1)) AND ((x >= 10) OR (x <= 5)) AND ((x >= 10) OR (x >= 1)) │ -│ ) AS a │ -│ WHERE ((x >= 10) OR (x >= 1)) AND ((x >= 10) OR (x <= 5)) AND ((x <= 15) OR (x >= 1)) AND ((x <= 15) OR (x <= 5)) │ -│ SETTINGS convert_query_to_cnf = 1 │ -└───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ -``` - -Возможные значения: true, false - - -## correlated_subqueries_default_join_kind {#correlated_subqueries_default_join_kind} - - - - - -Управляет типом соединений в декоррелированном плане запроса. Значение по умолчанию — `right`, что означает, что декоррелированный план будет содержать RIGHT JOIN с подзапросом в качестве правого источника. - -Возможные значения: - -- `left` — в процессе декорреляции будут создаваться LEFT JOIN, а входная таблица будет находиться слева. -- `right` — в процессе декорреляции будут создаваться RIGHT JOIN, а входная таблица будет находиться справа. - -## correlated_subqueries_substitute_equivalent_expressions {#correlated_subqueries_substitute_equivalent_expressions} - - - - - -Использует фильтрующие выражения, чтобы определять эквивалентные выражения и подставлять их вместо создания операции CROSS JOIN. - -## count_distinct_implementation {#count_distinct_implementation} - - - -Указывает, какая из функций `uniq*` должна использоваться для вычисления конструкции [COUNT(DISTINCT ...)](/sql-reference/aggregate-functions/reference/count). - -Возможные значения: - -- [uniq](/sql-reference/aggregate-functions/reference/uniq) -- [uniqCombined](/sql-reference/aggregate-functions/reference/uniqcombined) -- [uniqCombined64](/sql-reference/aggregate-functions/reference/uniqcombined64) -- [uniqHLL12](/sql-reference/aggregate-functions/reference/uniqhll12) -- [uniqExact](/sql-reference/aggregate-functions/reference/uniqexact) - -## count_distinct_optimization {#count_distinct_optimization} - - - -Преобразует `COUNT(DISTINCT ...)` в подзапрос с `GROUP BY` - -## count_matches_stop_at_empty_match {#count_matches_stop_at_empty_match} - - - - - -Останавливает подсчёт, как только в функции `countMatches` происходит совпадение шаблона с пустой строкой. - -## create_if_not_exists {#create_if_not_exists} - - - - - -Включает `IF NOT EXISTS` для оператора `CREATE` по умолчанию. Если задана либо эта настройка, либо `IF NOT EXISTS`, и таблица с указанным именем уже существует, исключение не будет возбуждено. - -## create_index_ignore_unique {#create_index_ignore_unique} - - - -Игнорировать ключевое слово UNIQUE в CREATE UNIQUE INDEX. Предназначено для тестирования совместимости с SQL. - -## create_replicated_merge_tree_fault_injection_probability {#create_replicated_merge_tree_fault_injection_probability} - - - -Вероятность инъекции сбоя при создании таблицы после создания метаданных в ZooKeeper - -## create_table_empty_primary_key_by_default {#create_table_empty_primary_key_by_default} - - - - - -Позволяет создавать таблицы MergeTree с пустым первичным ключом, если не указаны ORDER BY и PRIMARY KEY. - -## cross_join_min_bytes_to_compress {#cross_join_min_bytes_to_compress} - - - - - -Минимальный размер блока, подлежащего сжатию при выполнении CROSS JOIN. Нулевое значение означает отключение этого порога. Блок сжимается, когда достигается любой из двух порогов (по числу строк или по количеству байт). - -## cross_join_min_rows_to_compress {#cross_join_min_rows_to_compress} - - - - - -Минимальное количество строк для сжатия блока при выполнении CROSS JOIN. Нулевое значение означает отключение этого порога. Блок сжимается, как только достигнут любой из двух порогов (по строкам или по байтам). - -## data_type_default_nullable {#data_type_default_nullable} - - - -Задает, что типы данных без явных модификаторов [NULL или NOT NULL](/sql-reference/statements/create/table#null-or-not-null-modifiers) в определении столбца будут [Nullable](/sql-reference/data-types/nullable) по умолчанию. - -Возможные значения: - -- 1 — Типы данных в определениях столбцов по умолчанию задаются как `Nullable`. -- 0 — Типы данных в определениях столбцов по умолчанию задаются как не `Nullable`. - -## database_atomic_wait_for_drop_and_detach_synchronously {#database_atomic_wait_for_drop_and_detach_synchronously} - - - -Добавляет модификатор `SYNC` для всех запросов `DROP` и `DETACH`. - -Возможные значения: - -- 0 — запросы будут выполняться с задержкой. -- 1 — запросы будут выполняться без задержки. - -## database_replicated_allow_explicit_uuid {#database_replicated_allow_explicit_uuid} - - - - - -0 — Запрещать явное указание UUID таблиц в реплицируемых базах данных. 1 — Разрешать. 2 — Разрешать, но игнорировать указанный UUID и вместо него генерировать случайный. - -## database_replicated_allow_heavy_create {#database_replicated_allow_heavy_create} - - - - - -Разрешает длительные DDL-запросы (CREATE AS SELECT и POPULATE) в движке базы данных Replicated. Учтите, что это может надолго заблокировать очередь DDL-запросов. - -## database_replicated_allow_only_replicated_engine {#database_replicated_allow_only_replicated_engine} - - - -Разрешает создавать в базе данных с движком Replicated только Replicated-таблицы - -## database_replicated_allow_replicated_engine_arguments {#database_replicated_allow_replicated_engine_arguments} - - - - - -0 - Не разрешать явно указывать путь в ZooKeeper и имя реплики для таблиц *MergeTree в реплицируемых базах данных. 1 - Разрешать. 2 - Разрешать, но игнорировать указанный путь и вместо этого использовать путь по умолчанию. 3 - Разрешать и не выводить предупреждение в лог. - -## database_replicated_always_detach_permanently {#database_replicated_always_detach_permanently} - - - -Выполнять `DETACH TABLE` как `DETACH TABLE PERMANENTLY`, если используется движок базы данных `Replicated` - -## database_replicated_enforce_synchronous_settings {#database_replicated_enforce_synchronous_settings} - - - -Принудительно включает синхронное ожидание выполнения некоторых запросов (см. также database_atomic_wait_for_drop_and_detach_synchronously, mutations_sync, alter_sync). Не рекомендуется включать этот параметр. - -## database_replicated_initial_query_timeout_sec {#database_replicated_initial_query_timeout_sec} - - - -Задает время ожидания в секундах, в течение которого начальный DDL-запрос должен ждать, пока база данных Replicated обработает предыдущие записи в очереди DDL. - -Возможные значения: - -- Положительное целое число. -- 0 — без ограничений. - -## database_shared_drop_table_delay_seconds {#database_shared_drop_table_delay_seconds} - - - - - -Задержка в секундах перед фактическим удалением таблицы из базы данных Shared после её удаления. Это позволяет восстановить таблицу в течение этого времени с помощью запроса `UNDROP TABLE`. - -## decimal_check_overflow {#decimal_check_overflow} - - - -Проверять переполнение при выполнении десятичных арифметических операций и операций сравнения - -## deduplicate_blocks_in_dependent_materialized_views {#deduplicate_blocks_in_dependent_materialized_views} - - - -Включает или отключает проверку на дубликаты для материализованных представлений, которые получают данные из таблиц Replicated\*. - -Возможные значения: - -0 — Отключено. - 1 — Включено. - -Когда параметр включен, ClickHouse выполняет дедупликацию блоков в материализованных представлениях, зависящих от таблиц Replicated\*. Этот параметр полезен для обеспечения того, чтобы материализованные представления не содержали дублирующихся данных при повторной попытке операции вставки после сбоя. - -**См. также** - -- [Обработка NULL в операторах IN](/guides/developer/deduplicating-inserts-on-retries#insert-deduplication-with-materialized-views) - -## default_materialized_view_sql_security {#default_materialized_view_sql_security} - - - - - -Позволяет задать значение по умолчанию для параметра SQL SECURITY при создании материализованного представления. [Подробнее о SQL SECURITY](../../sql-reference/statements/create/view.md/#sql_security). - -Значение по умолчанию — `DEFINER`. - -## default_max_bytes_in_join {#default_max_bytes_in_join} - - - -Максимальный размер правой таблицы в соединении, если требуется ограничение, но `max_bytes_in_join` не задан. - -## default_normal_view_sql_security {#default_normal_view_sql_security} - - - - - -Позволяет устанавливать значение по умолчанию для параметра `SQL SECURITY` при создании обычного представления. [Подробнее о `SQL SECURITY`](../../sql-reference/statements/create/view.md/#sql_security). - -Значение по умолчанию — `INVOKER`. - -## default_table_engine - - - - - -Движок таблицы по умолчанию, используемый, если `ENGINE` не указан в операторе `CREATE`. - -Возможные значения: - -* строка с любым допустимым именем движка таблицы - -Значение по умолчанию в Cloud: `SharedMergeTree`. - -**Пример** - -Запрос: - -```sql -SET default_table_engine = 'Log'; - -SELECT name, value, changed FROM system.settings WHERE name = 'default_table_engine'; -``` - -Результат: - -```response -┌─name─────────────────┬─value─┬─changed─┐ -│ default_table_engine │ Log │ 1 │ -└──────────────────────┴───────┴─────────┘ -``` - -В этом примере любая новая таблица, для которой не указан движок таблицы (`Engine`), будет использовать движок таблицы `Log`: - -Запрос: - -```sql -CREATE TABLE my_table ( - x UInt32, - y UInt32 -); - -SHOW CREATE TABLE my_table; -``` - -Результат: - -```response -┌─statement────────────────────────────────────────────────────────────────┐ -│ CREATE TABLE default.my_table -( - `x` UInt32, - `y` UInt32 -) -ENGINE = Log -└──────────────────────────────────────────────────────────────────────────┘ -``` - - -## default_temporary_table_engine - - - -То же, что и [default_table_engine](#default_table_engine), но для временных таблиц. - -В этом примере любая новая временная таблица, для которой не указан параметр `Engine`, будет использовать движок таблицы `Log`: - -Запрос: - -```sql -SET default_temporary_table_engine = 'Log'; - -CREATE TEMPORARY TABLE my_table ( - x UInt32, - y UInt32 -); - -SHOW CREATE TEMPORARY TABLE my_table; -``` - -Результат: - -```response -┌─statement────────────────────────────────────────────────────────────────┐ -│ CREATE TEMPORARY TABLE default.my_table -( - `x` UInt32, - `y` UInt32 -) -ENGINE = Log -└──────────────────────────────────────────────────────────────────────────┘ -``` - - -## default_view_definer {#default_view_definer} - - - - - -Позволяет установить значение по умолчанию для параметра `DEFINER` при создании представления. [Подробнее о безопасности SQL](../../sql-reference/statements/create/view.md/#sql_security). - -Значение по умолчанию — `CURRENT_USER`. - -## delta_lake_enable_engine_predicate {#delta_lake_enable_engine_predicate} - - - - - -Включает внутреннюю фильтрацию данных в delta-kernel. - -## delta_lake_enable_expression_visitor_logging {#delta_lake_enable_expression_visitor_logging} - - - - - -Включает логирование уровня Test для визитора выражений DeltaLake. Такое логирование может быть слишком подробным даже для тестовых целей. - -## delta_lake_insert_max_bytes_in_data_file {#delta_lake_insert_max_bytes_in_data_file} - - - - - -Определяет ограничение в байтах на размер одного вставляемого файла данных в Delta Lake. - -## delta_lake_insert_max_rows_in_data_file {#delta_lake_insert_max_rows_in_data_file} - - - - - -Задаёт максимальное количество строк в одном файле данных при вставке в Delta Lake. - -## delta_lake_log_metadata {#delta_lake_log_metadata} - - - - - -Включает логирование файлов метаданных Delta Lake в системную таблицу. - -## delta_lake_snapshot_version {#delta_lake_snapshot_version} - - - - - -Версия снимка Delta Lake, который следует читать. Значение -1 означает чтение последней версии (значение 0 — допустимая версия снимка). - -## delta_lake_throw_on_engine_predicate_error {#delta_lake_throw_on_engine_predicate_error} - - - - - -Включает выбрасывание исключения, если при анализе предиката сканирования в delta-kernel произошла ошибка. - -## describe_compact_output {#describe_compact_output} - - - -Если включено, в результат запроса DESCRIBE включаются только имена столбцов и их типы - -## describe_include_subcolumns {#describe_include_subcolumns} - - - -Включает вывод подстолбцов в запросе [DESCRIBE](../../sql-reference/statements/describe-table.md). Например, элементов типа [Tuple](../../sql-reference/data-types/tuple.md) или подстолбцов типов [Map](/sql-reference/data-types/map#reading-subcolumns-of-map), [Nullable](../../sql-reference/data-types/nullable.md/#finding-null) или [Array](../../sql-reference/data-types/array.md/#array-size). - -Возможные значения: - -- 0 — Подстолбцы не включаются в результаты запросов `DESCRIBE`. -- 1 — Подстолбцы включаются в результаты запросов `DESCRIBE`. - -**Пример** - -См. пример для оператора [DESCRIBE](../../sql-reference/statements/describe-table.md). - -## describe_include_virtual_columns {#describe_include_virtual_columns} - - - -Если параметр включён, виртуальные столбцы таблицы будут включены в результат запроса DESCRIBE. - -## dialect {#dialect} - - - -Диалект, который будет использоваться для разбора запроса - -## dictionary_validate_primary_key_type {#dictionary_validate_primary_key_type} - - - - - -Проверяет тип первичного ключа для словарей. По умолчанию тип `id` для простых макетов неявно приводится к `UInt64`. - -## distinct_overflow_mode {#distinct_overflow_mode} - - - -Определяет, что происходит, когда объём данных превышает один из лимитов. - -Возможные значения: - -- `throw`: вызывает исключение (по умолчанию). -- `break`: останавливает выполнение запроса и возвращает частичный результат, как если бы -исходные данные исчерпались. - -## distributed_aggregation_memory_efficient {#distributed_aggregation_memory_efficient} - - - -Включен режим экономичного использования памяти для распределённой агрегации. - -## distributed_background_insert_batch {#distributed_background_insert_batch} - -**Псевдонимы**: `distributed_directory_monitor_batch_inserts` - - - -Включает или отключает отправку вставляемых данных пакетами. - -Когда пакетная отправка включена, движок таблицы [Distributed](../../engines/table-engines/special/distributed.md) пытается отправлять несколько файлов с вставленными данными в одной операции, а не по отдельности. Пакетная отправка повышает производительность кластера за счёт более эффективного использования ресурсов сервера и сети. - -Возможные значения: - -- 1 — Включено. -- 0 — Отключено. - -## distributed_background_insert_max_sleep_time_ms {#distributed_background_insert_max_sleep_time_ms} - -**Псевдонимы**: `distributed_directory_monitor_max_sleep_time_ms` - - - -Максимальный интервал отправки данных движком таблицы [Distributed](../../engines/table-engines/special/distributed.md). Ограничивает экспоненциальный рост интервала, заданного настройкой [distributed_background_insert_sleep_time_ms](#distributed_background_insert_sleep_time_ms). - -Возможные значения: - -- Положительное целое число миллисекунд. - -## distributed_background_insert_sleep_time_ms {#distributed_background_insert_sleep_time_ms} - -**Псевдонимы**: `distributed_directory_monitor_sleep_time_ms` - - - -Базовый интервал, с которым движок таблиц [Distributed](../../engines/table-engines/special/distributed.md) отправляет данные. При ошибках фактический интервал увеличивается экспоненциально. - -Возможные значения: - -- Положительное целое количество миллисекунд. - -## distributed_background_insert_split_batch_on_failure {#distributed_background_insert_split_batch_on_failure} - -**Псевдонимы**: `distributed_directory_monitor_split_batch_on_failure` - - - -Включает/отключает разбиение пакетов при сбоях. - -Иногда отправка конкретного пакета на удалённый шард может завершиться неудачей из‑за сложного последующего конвейера обработки (например, `MATERIALIZED VIEW` с `GROUP BY`) по причине ошибок вроде `Memory limit exceeded` или аналогичных. В этом случае повторная попытка не поможет (что приведёт к блокировке распределённых отправок для таблицы), но отправка файлов из этого пакета по одному может завершиться успешным выполнением INSERT. - -Значение `1` для этого параметра отключит пакетную вставку для таких пакетов (то есть временно отключит `distributed_background_insert_batch` для неудачных пакетов). - -Возможные значения: - -- 1 — Включено. -- 0 — Отключено. - -:::note -Этот параметр также влияет на повреждённые пакеты (которые могут возникать из‑за ненормального завершения работы сервера (машины) и отсутствия `fsync_after_insert`/`fsync_directories` для движка таблиц [Distributed](../../engines/table-engines/special/distributed.md)). -::: - -:::note -Не следует полагаться на автоматическое разбиение пакетов, так как это может ухудшить производительность. -::: - -## distributed_background_insert_timeout {#distributed_background_insert_timeout} - -**Псевдонимы**: `insert_distributed_timeout` - - - -Тайм-аут для запроса `INSERT` в таблицу типа `Distributed`. Настройка действует только при включённом параметре `insert_distributed_sync`. Нулевое значение означает отсутствие тайм-аута. - -## distributed_cache_alignment {#distributed_cache_alignment} - - - - - - - -Действует только в ClickHouse Cloud. Параметр предназначен для тестирования, не изменяйте его. - -## distributed_cache_bypass_connection_pool {#distributed_cache_bypass_connection_pool} - - - - - - - -Действует только в ClickHouse Cloud. Позволяет обойти пул соединений распределённого кэша. - -## distributed_cache_connect_backoff_max_ms {#distributed_cache_connect_backoff_max_ms} - - - - - - - -Применяется только в ClickHouse Cloud. Максимальное значение задержки (backoff, в миллисекундах) при создании соединения с распределённым кэшем. - -## distributed_cache_connect_backoff_min_ms {#distributed_cache_connect_backoff_min_ms} - - - - - - - -Действует только в ClickHouse Cloud. Минимальная задержка (в миллисекундах) перед созданием соединения распределённого кэша. - -## distributed_cache_connect_max_tries {#distributed_cache_connect_max_tries} - - - - - - - -Действует только в ClickHouse Cloud. Количество попыток подключения к распределённому кэшу при неудачном подключении. - -## distributed_cache_connect_timeout_ms {#distributed_cache_connect_timeout_ms} - - - - - - - -Действует только в ClickHouse Cloud. Таймаут подключения к серверу распределённого кэша. - -## distributed_cache_credentials_refresh_period_seconds {#distributed_cache_credentials_refresh_period_seconds} - - - - - - - -Действует только в ClickHouse Cloud. Период обновления учетных данных. - -## distributed_cache_data_packet_ack_window {#distributed_cache_data_packet_ack_window} - - - - - - - -Действует только в ClickHouse Cloud. Окно для отправки ACK для последовательности DataPacket в рамках одного запроса на чтение из распределённого кэша. - -## distributed_cache_discard_connection_if_unread_data {#distributed_cache_discard_connection_if_unread_data} - - - - - - - -Действует только в ClickHouse Cloud. Разрывает соединение, если какие‑то данные остаются непрочитанными. - -## distributed_cache_fetch_metrics_only_from_current_az {#distributed_cache_fetch_metrics_only_from_current_az} - - - - - - - -Действует только в ClickHouse Cloud. Получать метрики в таблицах system.distributed_cache_metrics и system.distributed_cache_events только из текущей зоны доступности. - -## distributed_cache_log_mode {#distributed_cache_log_mode} - - - - - - - -Действует только в ClickHouse Cloud. Режим записи в таблицу system.distributed_cache_log. - -## distributed_cache_max_unacked_inflight_packets {#distributed_cache_max_unacked_inflight_packets} - - - - - - - -Применяется только в ClickHouse Cloud. Максимальное число неподтверждённых пакетов, находящихся «в полёте», в одном запросе чтения из распределённого кэша. - -## distributed_cache_min_bytes_for_seek {#distributed_cache_min_bytes_for_seek} - - - - - - - -Действует только в ClickHouse Cloud. Минимальный объём данных (в байтах) для выполнения операции seek в распределённом кэше. - -## distributed_cache_pool_behaviour_on_limit {#distributed_cache_pool_behaviour_on_limit} - - - - - - - -Применяется только в ClickHouse Cloud. Определяет поведение подключения к распределённому кэшу при достижении лимита пула. - -## distributed_cache_prefer_bigger_buffer_size {#distributed_cache_prefer_bigger_buffer_size} - - - - - - - -Применяется только в ClickHouse Cloud. Аналогична filesystem_cache_prefer_bigger_buffer_size, но для распределённого кэша. - -## distributed_cache_read_only_from_current_az {#distributed_cache_read_only_from_current_az} - - - - - - - -Действует только в ClickHouse Cloud. Позволяет читать данные только из текущей зоны доступности. Если параметр отключён, чтение будет выполняться со всех серверов кэша во всех зонах доступности. - -## distributed_cache_read_request_max_tries {#distributed_cache_read_request_max_tries} - - - - - - - -Действует только в ClickHouse Cloud. Количество попыток повторного выполнения запроса к распределённому кэшу при неудаче. - -## distributed_cache_receive_response_wait_milliseconds {#distributed_cache_receive_response_wait_milliseconds} - - - - - - - -Применяется только в ClickHouse Cloud. Время ожидания в миллисекундах для получения данных по запросу из распределённого кэша - -## distributed_cache_receive_timeout_milliseconds {#distributed_cache_receive_timeout_milliseconds} - - - - - - - -Действует только в ClickHouse Cloud. Время ожидания в миллисекундах для получения любого ответа от распределённого кэша. - -## distributed_cache_receive_timeout_ms {#distributed_cache_receive_timeout_ms} - - - - - - - -Действует только в ClickHouse Cloud. Таймаут ожидания данных от сервера распределённого кэша, в миллисекундах. Если в течение этого интервала не было получено ни одного байта, будет сгенерировано исключение. - -## distributed_cache_send_timeout_ms {#distributed_cache_send_timeout_ms} - - - - - - - -Применяется только в ClickHouse Cloud. Таймаут отправки данных на сервер распределённого кеша, в миллисекундах. Если клиенту требуется отправить данные, но он не может передать ни одного байта в течение этого интервала, выбрасывается исключение. - -## distributed_cache_tcp_keep_alive_timeout_ms {#distributed_cache_tcp_keep_alive_timeout_ms} - - - - - - - -Действует только в ClickHouse Cloud. Время в миллисекундах, в течение которого соединение с сервером распределённого кэша должно бездействовать, прежде чем TCP начнёт отправлять keepalive-пакеты. - -## distributed_cache_throw_on_error {#distributed_cache_throw_on_error} - - - - - - - -Действует только в ClickHouse Cloud. Повторно выбрасывает исключение, возникшее при взаимодействии с распределённым кэшем, или исключение, полученное от распределённого кэша. В противном случае происходит переход к пропуску распределённого кэша при ошибке. - -## distributed_cache_wait_connection_from_pool_milliseconds {#distributed_cache_wait_connection_from_pool_milliseconds} - - - - - - - -Действует только в ClickHouse Cloud. Время ожидания в миллисекундах получения соединения из пула соединений, если для distributed_cache_pool_behaviour_on_limit задано значение wait. - -## distributed_connections_pool_size {#distributed_connections_pool_size} - - - -Максимальное количество одновременных подключений к удалённым серверам для распределённой обработки всех запросов к одной таблице типа `Distributed`. Рекомендуется указывать значение не меньше, чем количество серверов в кластере. - -## distributed_ddl_entry_format_version {#distributed_ddl_entry_format_version} - - - -Версия формата для совместимости распределённых DDL‑запросов (ON CLUSTER) - -## distributed_ddl_output_mode {#distributed_ddl_output_mode} - - - -Задает формат результата распределенного DDL-запроса. - -Возможные значения: - -- `throw` — Возвращает результирующий набор со статусом выполнения запроса для всех хостов, где запрос завершен. Если запрос завершился с ошибкой на некоторых хостах, то повторно генерируется первое исключение. Если запрос еще не завершен на некоторых хостах и время [distributed_ddl_task_timeout](#distributed_ddl_task_timeout) превышено, то генерируется исключение `TIMEOUT_EXCEEDED`. -- `none` — Аналогично `throw`, но распределенный DDL-запрос не возвращает результирующий набор. -- `null_status_on_timeout` — Возвращает `NULL` в качестве статуса выполнения в некоторых строках результирующего набора вместо генерации `TIMEOUT_EXCEEDED`, если запрос не завершен на соответствующих хостах. -- `never_throw` — Не генерирует `TIMEOUT_EXCEEDED` и не пробрасывает исключения повторно, даже если запрос завершился с ошибкой на некоторых хостах. -- `none_only_active` — Аналогично `none`, но не дожидается неактивных реплик базы данных `Replicated`. Примечание: в этом режиме невозможно определить, что запрос не был выполнен на какой‑либо реплике и будет выполнен в фоновом режиме. -- `null_status_on_timeout_only_active` — Аналогично `null_status_on_timeout`, но не дожидается неактивных реплик базы данных `Replicated`. -- `throw_only_active` — Аналогично `throw`, но не дожидается неактивных реплик базы данных `Replicated`. - -Значение по умолчанию в ClickHouse Cloud: `throw`. - -## distributed_ddl_task_timeout {#distributed_ddl_task_timeout} - - - -Устанавливает таймаут ожидания ответов на DDL‑запросы от всех хостов в кластере. Если DDL‑запрос не был выполнен на всех хостах, в ответе будет ошибка таймаута, и дальнейшее выполнение запроса продолжится в асинхронном режиме. Отрицательное значение означает бесконечное ожидание. - -Возможные значения: - -- Положительное целое число. -- 0 — асинхронный режим. -- Отрицательное целое число — бесконечный таймаут. - -## distributed_foreground_insert {#distributed_foreground_insert} - -**Псевдонимы**: `insert_distributed_sync` - - - -Включает или отключает синхронную вставку данных в таблицу [Distributed](/engines/table-engines/special/distributed). - -По умолчанию при вставке данных в таблицу `Distributed` сервер ClickHouse отправляет данные на узлы кластера в фоновом режиме. Если `distributed_foreground_insert=1`, данные обрабатываются синхронно, и операция `INSERT` считается успешной только после того, как все данные будут сохранены на всех шардах (как минимум на одной реплике для каждого шарда, если `internal_replication` равно true). - -Возможные значения: - -- `0` — данные вставляются в фоновом режиме. -- `1` — данные вставляются в синхронном режиме. - -Значение по умолчанию в ClickHouse Cloud: `0`. - -**См. также** - -- [Движок таблиц Distributed](/engines/table-engines/special/distributed) -- [Управление распределёнными таблицами](/sql-reference/statements/system#managing-distributed-tables) - -## distributed_group_by_no_merge - - - -Не объединять состояния агрегации с разных серверов при распределённой обработке запроса. Можно использовать в случае, когда точно известно, что на разных шардах разные ключи. - -Возможные значения: - -* `0` — Отключено (окончательная обработка запроса выполняется на инициирующем узле). -* `1` — Не объединять состояния агрегации с разных серверов при распределённой обработке запроса (запрос полностью обрабатывается на шарде, инициатор только проксирует данные). Может использоваться, когда точно известно, что на разных шардах разные ключи. -* `2` — То же, что и `1`, но на инициаторе дополнительно применяются `ORDER BY` и `LIMIT` (что невозможно, когда запрос полностью обрабатывается на удалённом узле, как при `distributed_group_by_no_merge=1`). Может использоваться для запросов с `ORDER BY` и/или `LIMIT`. - -**Пример** - -```sql -SELECT * -FROM remote('127.0.0.{2,3}', system.one) -GROUP BY dummy -LIMIT 1 -SETTINGS distributed_group_by_no_merge = 1 -FORMAT PrettyCompactMonoBlock - -┌─dummy─┐ -│ 0 │ -│ 0 │ -└───────┘ -``` - -```sql -SELECT * -FROM remote('127.0.0.{2,3}', system.one) -GROUP BY dummy -LIMIT 1 -SETTINGS distributed_group_by_no_merge = 2 -FORMAT PrettyCompactMonoBlock - -┌─dummy─┐ -│ 0 │ -└───────┘ -``` - - -## distributed_insert_skip_read_only_replicas {#distributed_insert_skip_read_only_replicas} - - - - - -Позволяет пропускать реплики только для чтения при выполнении запросов INSERT в таблицы с движком Distributed. - -Возможные значения: - -- 0 — INSERT выполняется как обычно; если запрос направляется на реплику только для чтения, он завершится с ошибкой -- 1 — Инициатор будет пропускать реплики только для чтения при отправке данных на шарды. - -## distributed_plan_default_reader_bucket_count {#distributed_plan_default_reader_bucket_count} - - - - - - - -Количество задач по умолчанию для параллельного чтения в распределённом запросе. Задачи распределяются по репликам. - -## distributed_plan_default_shuffle_join_bucket_count {#distributed_plan_default_shuffle_join_bucket_count} - - - - - - - -Количество бакетов по умолчанию для распределённого shuffle-hash-join. - -## distributed_plan_execute_locally {#distributed_plan_execute_locally} - - - - - - - -Выполняет все задачи распределённого плана запроса локально. Полезно для тестирования и отладки. - -## distributed_plan_force_exchange_kind {#distributed_plan_force_exchange_kind} - - - - - -Принудительно задаёт указанный тип операторов Exchange между стадиями распределённого запроса. - -Возможные значения: - -- '' — не принуждать использование какого-либо типа операторов Exchange, предоставить выбор оптимизатору, - - 'Persisted' — использовать временные файлы в объектном хранилище, - - 'Streaming' — передавать данные обмена по сети в потоковом режиме. - -## distributed_plan_force_shuffle_aggregation {#distributed_plan_force_shuffle_aggregation} - - - - - - - -Использует стратегию Shuffle-агрегации вместо PartialAggregation + Merge в распределённом плане запроса. - -## distributed_plan_max_rows_to_broadcast {#distributed_plan_max_rows_to_broadcast} - - - - - - - -Максимальное число строк, при котором в распределённом плане запроса используется broadcast join вместо shuffle join. - -## distributed_plan_optimize_exchanges {#distributed_plan_optimize_exchanges} - - - - - -Удаляет лишние обмены в распределённом плане запроса. Отключайте для отладки. - -## distributed_product_mode {#distributed_product_mode} - - - -Изменяет поведение [распределённых подзапросов](../../sql-reference/operators/in.md). - -ClickHouse применяет этот параметр, когда запрос содержит декартово произведение распределённых таблиц, то есть когда запрос к распределённой таблице содержит подзапрос к распределённой таблице без ключевого слова `GLOBAL`. - -Ограничения: - -- Применяется только для подзапросов `IN` и `JOIN`. -- Только если в секции `FROM` используется распределённая таблица, содержащая более одного шарда. -- Только если подзапрос относится к распределённой таблице, содержащей более одного шарда. -- Не используется для табличной функции [remote](../../sql-reference/table-functions/remote.md). - -Возможные значения: - -- `deny` — значение по умолчанию. Запрещает использование таких типов подзапросов (выбрасывается исключение `Double-distributed IN/JOIN subqueries is denied`). -- `local` — заменяет базу данных и таблицу в подзапросе на локальные для целевого сервера (шарда), при этом обычные `IN`/`JOIN` сохраняются без изменений. -- `global` — заменяет запрос `IN`/`JOIN` на `GLOBAL IN`/`GLOBAL JOIN`. -- `allow` — разрешает использование таких типов подзапросов. - -## distributed_push_down_limit {#distributed_push_down_limit} - - - -Включает или отключает применение [LIMIT](#limit) отдельно на каждом шарде. - -Это позволяет избежать: - -- Отправки лишних строк по сети; -- Обработки строк сверх лимита на сервере-инициаторе. - -Начиная с версии 21.9, получить неточные результаты больше невозможно, так как `distributed_push_down_limit` изменяет выполнение запроса только если выполняется как минимум одно из условий: - -- [distributed_group_by_no_merge](#distributed_group_by_no_merge) > 0. -- В запросе **нет** `GROUP BY`/`DISTINCT`/`LIMIT BY`, но есть `ORDER BY`/`LIMIT`. -- В запросе **есть** `GROUP BY`/`DISTINCT`/`LIMIT BY` с `ORDER BY`/`LIMIT`, и при этом: - - [optimize_skip_unused_shards](#optimize_skip_unused_shards) включен. - - [optimize_distributed_group_by_sharding_key](#optimize_distributed_group_by_sharding_key) включен. - -Возможные значения: - -- 0 — Отключено. -- 1 — Включено. - -См. также: - -- [distributed_group_by_no_merge](#distributed_group_by_no_merge) -- [optimize_skip_unused_shards](#optimize_skip_unused_shards) -- [optimize_distributed_group_by_sharding_key](#optimize_distributed_group_by_sharding_key) - -## distributed_replica_error_cap {#distributed_replica_error_cap} - - - -- Тип: беззнаковое целое число -- Значение по умолчанию: 1000 - -Счетчик ошибок каждой реплики ограничивается этим значением, что предотвращает накопление одной репликой слишком большого количества ошибок. - -См. также: - -- [load_balancing](#load_balancing-round_robin) -- [Движок таблиц Distributed](../../engines/table-engines/special/distributed.md) -- [distributed_replica_error_half_life](#distributed_replica_error_half_life) -- [distributed_replica_max_ignored_errors](#distributed_replica_max_ignored_errors) - -## distributed_replica_error_half_life {#distributed_replica_error_half_life} - - - -- Тип: секунды -- Значение по умолчанию: 60 секунд - -Определяет, с какой скоростью обнуляются ошибки в распределённых таблицах. Если реплика была недоступна некоторое время, накопила 5 ошибок, а параметр distributed_replica_error_half_life равен 1 секунде, то реплика считается нормальной через 3 секунды после последней ошибки. - -См. также: - -- [load_balancing](#load_balancing-round_robin) -- [Движок таблиц Distributed](../../engines/table-engines/special/distributed.md) -- [distributed_replica_error_cap](#distributed_replica_error_cap) -- [distributed_replica_max_ignored_errors](#distributed_replica_max_ignored_errors) - -## distributed_replica_max_ignored_errors {#distributed_replica_max_ignored_errors} - - - -- Тип: беззнаковое целое число -- Значение по умолчанию: 0 - -Количество ошибок, которые будут игнорироваться при выборе реплик (в соответствии с алгоритмом `load_balancing`). - -См. также: - -- [load_balancing](#load_balancing-round_robin) -- [Движок таблиц Distributed](../../engines/table-engines/special/distributed.md) -- [distributed_replica_error_cap](#distributed_replica_error_cap) -- [distributed_replica_error_half_life](#distributed_replica_error_half_life) - -## do_not_merge_across_partitions_select_final {#do_not_merge_across_partitions_select_final} - - - -Объединять части только в пределах одного раздела при выполнении SELECT FINAL - -## empty_result_for_aggregation_by_constant_keys_on_empty_set {#empty_result_for_aggregation_by_constant_keys_on_empty_set} - - - -Возвращать пустой результат при агрегации по константным ключам для пустого набора данных. - -## empty_result_for_aggregation_by_empty_set {#empty_result_for_aggregation_by_empty_set} - - - -Возвращать пустой результат при агрегации без ключей над пустым набором данных. - -## enable_adaptive_memory_spill_scheduler {#enable_adaptive_memory_spill_scheduler} - - - - - - - -Запускает обработчик, который адаптивно выгружает данные из памяти во внешнее хранилище. В настоящее время поддерживаются соединения типа grace join. - -## enable_add_distinct_to_in_subqueries {#enable_add_distinct_to_in_subqueries} - - - - - -Включает использование `DISTINCT` в подзапросах `IN`. Это настройка-компромисс: её включение может значительно уменьшить размер временных таблиц, передаваемых для распределённых подзапросов `IN`, и существенно ускорить передачу данных между шардами за счёт отправки только уникальных значений. -Однако включение этой настройки добавляет дополнительные накладные расходы на слияние на каждом узле, так как необходимо выполнять дедупликацию (`DISTINCT`). Используйте эту настройку, когда узким местом является передача данных по сети и дополнительные накладные расходы на слияние приемлемы. - -## enable_blob_storage_log {#enable_blob_storage_log} - - - - - -Записывать информацию об операциях блоб-хранилища в таблицу system.blob_storage_log - -## enable_deflate_qpl_codec {#enable_deflate_qpl_codec} - - - -При включении кодек DEFLATE_QPL может использоваться для сжатия столбцов. - -## enable_early_constant_folding {#enable_early_constant_folding} - - - -Включает оптимизацию запросов, при которой анализируются результаты функций и подзапросов и запрос переписывается, если в них присутствуют константы - -## enable_extended_results_for_datetime_functions {#enable_extended_results_for_datetime_functions} - - - -Включает или отключает возврат результатов типа `Date32` с расширенным диапазоном значений (по сравнению с типом `Date`) -или `DateTime64` с расширенным диапазоном значений (по сравнению с типом `DateTime`). - -Возможные значения: - -- `0` — Функции возвращают `Date` или `DateTime` для всех типов аргументов. -- `1` — Функции возвращают `Date32` или `DateTime64` для аргументов типа `Date32` или `DateTime64` и `Date` или `DateTime` в остальных случаях. - -В таблице ниже показано поведение этой настройки для различных функций работы с датой и временем. - -| Функция | `enable_extended_results_for_datetime_functions = 0` | `enable_extended_results_for_datetime_functions = 1` | -| ------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `toStartOfYear` | Возвращает `Date` или `DateTime` | Возвращает `Date`/`DateTime` для аргумента типа `Date`/`DateTime`
Возвращает `Date32`/`DateTime64` для аргумента типа `Date32`/`DateTime64` | -| `toStartOfISOYear` | Возвращает значение типа `Date` или `DateTime` | Возвращает `Date`/`DateTime` для аргументов типа `Date`/`DateTime`
Возвращает `Date32`/`DateTime64` для аргументов типа `Date32`/`DateTime64` | -| `toStartOfQuarter` | Возвращает `Date` или `DateTime` | Возвращает `Date`/`DateTime` для аргументов типа `Date`/`DateTime`
Возвращает `Date32`/`DateTime64` для аргументов типа `Date32`/`DateTime64` | -| `toStartOfMonth` | Возвращает `Date` или `DateTime` | Возвращает `Date`/`DateTime` для аргумента типа `Date`/`DateTime`
Возвращает `Date32`/`DateTime64` для аргумента типа `Date32`/`DateTime64` | -| `toStartOfWeek` | Возвращает `Date` или `DateTime`. | Возвращает `Date`/`DateTime` для входных значений `Date`/`DateTime`
Возвращает `Date32`/`DateTime64` для входных значений `Date32`/`DateTime64` | -| `toLastDayOfWeek` | Возвращает `Date` или `DateTime` | Возвращает `Date`/`DateTime` для аргументов типа `Date`/`DateTime`
Возвращает `Date32`/`DateTime64` для аргументов типа `Date32`/`DateTime64` | -| `toLastDayOfMonth` | Возвращает значение типа `Date` или `DateTime` | Возвращает `Date`/`DateTime` для аргумента типа `Date`/`DateTime`
Возвращает `Date32`/`DateTime64` для аргумента типа `Date32`/`DateTime64` | -| `toMonday` | Возвращает значение типа `Date` или `DateTime` | Возвращает `Date`/`DateTime` для входных аргументов `Date`/`DateTime`
Возвращает `Date32`/`DateTime64` для входных аргументов `Date32`/`DateTime64` | -| `toStartOfDay` | Возвращает `DateTime`
*Примечание: возможны некорректные результаты для значений вне диапазона 1970–2149* | Возвращает `DateTime` для аргумента типа `Date`/`DateTime`
Возвращает `DateTime64` для аргумента типа `Date32`/`DateTime64` | -| `toStartOfHour` | Возвращает `DateTime`
*Примечание: может возвращать некорректные результаты для значений вне диапазона 1970–2149 годов* | Возвращает `DateTime` для аргументов типа `Date`/`DateTime`
Возвращает `DateTime64` для аргументов типа `Date32`/`DateTime64` | -| `toStartOfFifteenMinutes` | Возвращает `DateTime`
*Примечание: возможны некорректные результаты для значений вне диапазона 1970–2149* | Возвращает `DateTime` для аргументов типа `Date`/`DateTime`
Возвращает `DateTime64` для аргументов типа `Date32`/`DateTime64` | -| `toStartOfTenMinutes` | Возвращает значение типа `DateTime`
*Примечание: результаты могут быть неверными для значений вне диапазона 1970–2149 годов* | Возвращает `DateTime` для аргументов типов `Date`/`DateTime`
Возвращает `DateTime64` для аргументов типов `Date32`/`DateTime64` | -| `toStartOfFiveMinutes` | Возвращает `DateTime`
*Примечание: Некорректные результаты для значений за пределами диапазона 1970–2149 годов* | Возвращает `DateTime` для аргументов типа `Date`/`DateTime`
Возвращает `DateTime64` для аргументов типа `Date32`/`DateTime64` | -| `toStartOfMinute` | Возвращает `DateTime`
*Примечание: возможны некорректные результаты для значений вне диапазона 1970–2149* | Возвращает `DateTime` для аргументов типа `Date`/`DateTime`
Возвращает `DateTime64` для аргументов типа `Date32`/`DateTime64` | -| `timeSlot` | Возвращает `DateTime`
*Примечание: может возвращать неверные результаты для значений вне диапазона 1970–2149* | Возвращает `DateTime` для аргументов типа `Date`/`DateTime`
Возвращает `DateTime64` для аргументов типа `Date32`/`DateTime64` | - -## enable_filesystem_cache {#enable_filesystem_cache} - - - -Использовать кэш для удалённой файловой системы. Эта настройка не включает и не отключает кэш для дисков (это необходимо делать через конфигурацию диска), но позволяет при необходимости обходить кэш для отдельных запросов. - -## enable_filesystem_cache_log {#enable_filesystem_cache_log} - - - -Включает ведение журнала кэширования файловой системы для каждого запроса - -## enable_filesystem_cache_on_write_operations {#enable_filesystem_cache_on_write_operations} - - - -Включает или отключает кэш `write-through`. Если установлено значение `false`, кэш `write-through` отключен для операций записи. Если установлено значение `true`, кэш `write-through` включён при условии, что параметр `cache_on_write_operations` включён в разделе конфигурации диска кэша в конфигурации сервера. -См. раздел «[Использование локального кэша](/operations/storing-data#using-local-cache)» для получения дополнительной информации. - -## enable_filesystem_read_prefetches_log {#enable_filesystem_read_prefetches_log} - - - -Ведёт журнал в system.filesystem prefetch_log во время выполнения запроса. Должен использоваться только для тестирования или отладки, не рекомендуется включать по умолчанию. - -## enable_global_with_statement {#enable_global_with_statement} - - - - - -Распространяет выражения WITH на запросы UNION и все подзапросы - -## enable_hdfs_pread {#enable_hdfs_pread} - - - - - -Включает или отключает `pread` для файлов HDFS. По умолчанию используется `hdfsPread`. Если параметр отключен, для чтения файлов HDFS будут использоваться функции `hdfsRead` и `hdfsSeek`. - -## enable_http_compression {#enable_http_compression} - - - - - -Включает или отключает сжатие данных в ответе на HTTP‑запрос. - -Дополнительную информацию см. в [описании HTTP-интерфейса](../../interfaces/http.md). - -Возможные значения: - -- 0 — Отключено. -- 1 — Включено. - -## enable_job_stack_trace {#enable_job_stack_trace} - - - - - -Выводит трассировку стека создателя задания, если задание приводит к исключению. По умолчанию отключена, чтобы избежать накладных расходов по производительности. - -## enable_join_runtime_filters {#enable_join_runtime_filters} - - - - - - - -Фильтрует левую таблицу по набору ключей JOIN, собранных из правой таблицы во время выполнения. - -## enable_lazy_columns_replication {#enable_lazy_columns_replication} - - - - - -Включает ленивую репликацию столбцов в JOIN и ARRAY JOIN, что позволяет избежать многократного копирования одних и тех же строк в памяти. - -## enable_lightweight_delete {#enable_lightweight_delete} - -**Псевдонимы**: `allow_experimental_lightweight_delete` - - - -Включает легковесные мутации DELETE для таблиц MergeTree. - -## enable_lightweight_update {#enable_lightweight_update} - - - -**Псевдонимы**: `allow_experimental_lightweight_update` - - - - - -Разрешает использование облегчённых обновлений. - -## enable_memory_bound_merging_of_aggregation_results {#enable_memory_bound_merging_of_aggregation_results} - - - -Включает стратегию слияния результатов агрегации, ограниченную объёмом памяти. - -## enable_multiple_prewhere_read_steps {#enable_multiple_prewhere_read_steps} - - - -Перемещает больше условий из WHERE в PREWHERE и выполняет чтение с диска и фильтрацию в несколько этапов, если есть несколько условий, объединённых оператором AND - -## enable_named_columns_in_function_tuple {#enable_named_columns_in_function_tuple} - - - - - -Генерирует именованные кортежи в функции `tuple()`, если все имена уникальны и могут рассматриваться как идентификаторы без кавычек. - -## enable_optimize_predicate_expression {#enable_optimize_predicate_expression} - - - - - -Включает проталкивание предикатов (predicate pushdown) в запросах `SELECT`. - -Проталкивание предикатов может значительно сократить сетевой трафик для распределённых запросов. - -Возможные значения: - -- 0 — Выключено. -- 1 — Включено. - -Использование - -Рассмотрим следующие запросы: - -1. `SELECT count() FROM test_table WHERE date = '2018-10-10'` -2. `SELECT count() FROM (SELECT * FROM test_table) WHERE date = '2018-10-10'` - -Если `enable_optimize_predicate_expression = 1`, то время выполнения этих запросов одинаково, потому что ClickHouse применяет `WHERE` к подзапросу при его выполнении. - -Если `enable_optimize_predicate_expression = 0`, то время выполнения второго запроса значительно больше, потому что выражение `WHERE` применяется ко всем данным только после завершения подзапроса. - -## enable_optimize_predicate_expression_to_final_subquery {#enable_optimize_predicate_expression_to_final_subquery} - - - -Разрешает проталкивание предиката в подзапрос с FINAL. - -## enable_order_by_all - - - -Включает или отключает сортировку с использованием синтаксиса `ORDER BY ALL`, см. [ORDER BY](../../sql-reference/statements/select/order-by.md). - -Возможные значения: - -* 0 — Отключить ORDER BY ALL. -* 1 — Включить ORDER BY ALL. - -**Пример** - -Запрос: - -```sql -CREATE TABLE TAB(C1 Int, C2 Int, ALL Int) ENGINE=Memory(); - -INSERT INTO TAB VALUES (10, 20, 30), (20, 20, 10), (30, 10, 20); - -SELECT * FROM TAB ORDER BY ALL; -- возвращает ошибку, что ALL неоднозначно - -SELECT * FROM TAB ORDER BY ALL SETTINGS enable_order_by_all = 0; -``` - -Результат: - -```text -┌─C1─┬─C2─┬─ALL─┐ -│ 20 │ 20 │ 10 │ -│ 30 │ 10 │ 20 │ -│ 10 │ 20 │ 30 │ -└────┴────┴─────┘ -``` - - -## enable_parallel_blocks_marshalling {#enable_parallel_blocks_marshalling} - - - - - -Влияет только на распределённые запросы. Если настройка включена, блоки будут (де)сериализоваться и (де)сжиматься в потоках конвейера (то есть с более высокой степенью параллелизма, чем используется по умолчанию) до отправки инициатору и после неё. - -## enable_parsing_to_custom_serialization {#enable_parsing_to_custom_serialization} - - - - - -Если параметр включён, данные могут парситься напрямую в столбцы с пользовательской сериализацией (например, Sparse) в соответствии с подсказками по сериализации, полученными из таблицы. - -## enable_positional_arguments - - - - - -Включает или отключает поддержку позиционных аргументов для операторов [GROUP BY](/sql-reference/statements/select/group-by), [LIMIT BY](../../sql-reference/statements/select/limit-by.md), [ORDER BY](../../sql-reference/statements/select/order-by.md). - -Возможные значения: - -* 0 — позиционные аргументы не поддерживаются. -* 1 — позиционные аргументы поддерживаются: вместо имён столбцов можно использовать номера столбцов. - -**Пример** - -Запрос: - -```sql -CREATE TABLE positional_arguments(one Int, two Int, three Int) ENGINE=Memory(); - -INSERT INTO positional_arguments VALUES (10, 20, 30), (20, 20, 10), (30, 10, 20); - -SELECT * FROM positional_arguments ORDER BY 2,3; -``` - -Результат: - -```text -┌─one─┬─two─┬─three─┐ -│ 30 │ 10 │ 20 │ -│ 20 │ 20 │ 10 │ -│ 10 │ 20 │ 30 │ -└─────┴─────┴───────┘ -``` - - -## enable_producing_buckets_out_of_order_in_aggregation {#enable_producing_buckets_out_of_order_in_aggregation} - - - - - -Позволяет память-эффективной агрегации (см. `distributed_aggregation_memory_efficient`) выдавать бакеты в непоследовательном порядке. -Это может улучшить производительность, когда размеры бакетов агрегации сильно неравномерны, позволяя реплике отправлять инициатору бакеты с более высокими ID, пока он всё ещё обрабатывает тяжёлые бакеты с более низкими ID. -Недостатком является потенциально большее потребление памяти. - -## enable_reads_from_query_cache {#enable_reads_from_query_cache} - - - -Если настройка включена, результаты запросов `SELECT` извлекаются из [кэша запросов](../query-cache.md). - -Возможные значения: - -- 0 — отключено -- 1 — включено - -## enable_s3_requests_logging {#enable_s3_requests_logging} - - - -Включает очень подробное логирование запросов к S3. Имеет смысл использовать только для отладки. - -## enable_scalar_subquery_optimization {#enable_scalar_subquery_optimization} - - - - - -Если установлено в значение true, предотвращает (де)сериализацию больших скалярных значений в скалярных подзапросах и, возможно, позволяет избежать повторного выполнения одного и того же подзапроса. - -## enable_scopes_for_with_statement {#enable_scopes_for_with_statement} - - - - - -Если параметр отключен, объявления в родительских предложениях WITH будут вести себя так же, как если бы они были объявлены в текущей области видимости. - -Обратите внимание, что это параметр совместимости для нового анализатора, позволяющий выполнять некоторые некорректные запросы, которые мог выполнять старый анализатор. - -## enable_shared_storage_snapshot_in_query - - - - - -Если параметр включён, все подзапросы внутри одного запроса будут использовать общий `StorageSnapshot` для каждой таблицы. -Это обеспечивает согласованное представление данных во всём запросе, даже если к одной и той же таблице обращаются несколько раз. - -Это необходимо для запросов, в которых важна внутренняя согласованность фрагментов данных. Пример: - -```sql -SELECT - count() -FROM events -WHERE (_part, _part_offset) IN ( - SELECT _part, _part_offset - FROM events - WHERE user_id = 42 -) -``` - -Без этого параметра внешние и внутренние запросы могут работать с разными снимками данных, что приводит к некорректным результатам. - -:::note -Включение этого параметра отключает оптимизацию, которая удаляет ненужные части данных из снимков после завершения этапа планирования запроса. -В результате долго выполняющиеся запросы могут удерживать устаревшие части на протяжении всего своего выполнения, задерживая очистку частей и увеличивая нагрузку на хранилище данных. - -В настоящий момент этот параметр применяется только к таблицам семейства MergeTree. -::: - -Возможные значения: - -* 0 — Отключено -* 1 — Включено - - -## enable_sharing_sets_for_mutations {#enable_sharing_sets_for_mutations} - - - -Разрешает совместное использование объектов множеств, создаваемых для подзапросов с оператором IN, между разными задачами одной и той же мутации. Это снижает потребление памяти и нагрузку на процессор. - -## enable_software_prefetch_in_aggregation {#enable_software_prefetch_in_aggregation} - - - -Включает использование программной предвыборки данных при агрегации. - -## enable_unaligned_array_join {#enable_unaligned_array_join} - - - -Разрешает `ARRAY JOIN` с несколькими массивами разного размера. Когда этот параметр включён, массивы будут приведены к длине самого длинного массива. - -## enable_url_encoding {#enable_url_encoding} - - - - - -Позволяет включить или отключить декодирование/кодирование пути в URI в таблицах с движком [URL](../../engines/table-engines/special/url.md). - -По умолчанию отключено. - -## enable_vertical_final {#enable_vertical_final} - - - - - -Если включено, при выполнении FINAL дублирующиеся строки удаляются за счёт пометки их как удалённых с последующей фильтрацией, вместо слияния строк. - -## enable_writes_to_query_cache {#enable_writes_to_query_cache} - - - -Если параметр включён, результаты запросов `SELECT` сохраняются в [кэше запросов](../query-cache.md). - -Возможные значения: - -- 0 — отключено -- 1 — включено - -## enable_zstd_qat_codec {#enable_zstd_qat_codec} - - - - - -Если параметр включён, кодек ZSTD_QAT может использоваться для сжатия столбцов. - -## enforce_strict_identifier_format {#enforce_strict_identifier_format} - - - - - -Если настройка включена, допускаются только идентификаторы, содержащие буквенно-цифровые символы и символ подчёркивания. - -## engine_file_allow_create_multiple_files {#engine_file_allow_create_multiple_files} - - - -Включает или отключает создание нового файла при каждой вставке в таблицы движка `File`, если формат имеет суффикс (`JSON`, `ORC`, `Parquet` и т.д.). Если параметр включён, при каждом запросе `INSERT` будет создаваться новый файл с именем по следующему шаблону: - -`data.Parquet` -> `data.1.Parquet` -> `data.2.Parquet` и т.д. - -Возможные значения: - -- 0 — запрос `INSERT` добавляет новые данные в конец файла. -- 1 — запрос `INSERT` создаёт новый файл. - -## engine_file_empty_if_not_exists {#engine_file_empty_if_not_exists} - - - -Позволяет выполнять выборку данных из таблицы с движком File при отсутствии файла. - -Возможные значения: - -- 0 — `SELECT` порождает исключение. -- 1 — `SELECT` возвращает пустой результат. - -## engine_file_skip_empty_files {#engine_file_skip_empty_files} - - - -Включает или отключает пропуск пустых файлов в таблицах с движком [File](../../engines/table-engines/special/file.md). - -Возможные значения: - -- 0 — `SELECT` выбрасывает исключение, если пустой файл не совместим с запрошенным форматом. -- 1 — `SELECT` возвращает пустой результат для пустого файла. - -## engine_file_truncate_on_insert {#engine_file_truncate_on_insert} - - - -Включает или отключает усечение файла перед выполнением вставки в таблицы движка [File](../../engines/table-engines/special/file.md). - -Возможные значения: - -- 0 — запрос `INSERT` дописывает новые данные в конец файла. -- 1 — запрос `INSERT` перезаписывает содержимое файла новыми данными. - -## engine_url_skip_empty_files {#engine_url_skip_empty_files} - - - -Включает или отключает пропуск пустых файлов в таблицах движка таблиц [URL](../../engines/table-engines/special/url.md). - -Возможные значения: - -- 0 — `SELECT` вызывает исключение, если пустой файл не совместим с запрошенным форматом. -- 1 — `SELECT` возвращает пустой результат для пустого файла. - -## except_default_mode {#except_default_mode} - - - -Устанавливает режим по умолчанию в запросе EXCEPT. Возможные значения: пустая строка, 'ALL', 'DISTINCT'. Если значение пустое, запрос без указанного режима вызовет исключение. - -## exclude_materialize_skip_indexes_on_insert - - - -Исключает указанные пропускающие индексы из построения и сохранения во время вставок (INSERT). Исключённые пропускающие индексы всё равно будут построены и сохранены [во время слияний](merge-tree-settings.md/#materialize_skip_indexes_on_merge) или с помощью явного запроса -[MATERIALIZE INDEX](/sql-reference/statements/alter/skipping-index.md/#materialize-index). - -Не оказывает никакого эффекта, если [materialize_skip_indexes_on_insert](#materialize_skip_indexes_on_insert) имеет значение false. - -Пример: - -```sql -CREATE TABLE tab -( - a UInt64, - b UInt64, - INDEX idx_a a TYPE minmax, - INDEX idx_b b TYPE set(3) -) -ENGINE = MergeTree ORDER BY tuple(); - -SET exclude_materialize_skip_indexes_on_insert='idx_a'; -- idx_a не будет обновлён при вставке ---SET exclude_materialize_skip_indexes_on_insert='idx_a, idx_b'; -- ни один из индексов не будет обновлён при вставке - -INSERT INTO tab SELECT number, number / 50 FROM numbers(100); -- обновляется только idx_b - --- поскольку это настройка сеанса, её можно задать на уровне отдельного запроса -INSERT INTO tab SELECT number, number / 50 FROM numbers(100, 100) SETTINGS exclude_materialize_skip_indexes_on_insert='idx_b'; - -ALTER TABLE tab MATERIALIZE INDEX idx_a; -- этот запрос можно использовать для явной материализации индекса - -SET exclude_materialize_skip_indexes_on_insert = DEFAULT; -- сброс настройки на значение по умолчанию -``` - - -## execute_exists_as_scalar_subquery {#execute_exists_as_scalar_subquery} - - - - - -Выполнять некоррелированные подзапросы EXISTS как скалярные подзапросы. Как и для скалярных подзапросов, используется кэш, а к результату применяется свёртка констант. - -## external_storage_connect_timeout_sec {#external_storage_connect_timeout_sec} - - - -Таймаут подключения в секундах. Сейчас поддерживается только для MySQL. - -## external_storage_max_read_bytes {#external_storage_max_read_bytes} - - - -Ограничивает максимальное количество байт при сбросе исторических данных таблицей с внешним движком. В настоящее время поддерживается только для движка таблицы MySQL, движка базы данных и словаря. Если значение равно 0, эта настройка отключена. - -## external_storage_max_read_rows {#external_storage_max_read_rows} - - - -Ограничивает максимальное количество строк при сбросе исторических данных таблицей с внешним движком. В настоящее время поддерживается только для таблиц, баз данных и словарей с движком MySQL. Если равно 0, этот параметр отключен. - -## external_storage_rw_timeout_sec {#external_storage_rw_timeout_sec} - - - -Таймаут чтения/записи в секундах. Сейчас поддерживается только для MySQL. - -## external_table_functions_use_nulls {#external_table_functions_use_nulls} - - - -Определяет, как табличные функции [mysql](../../sql-reference/table-functions/mysql.md), [postgresql](../../sql-reference/table-functions/postgresql.md) и [odbc](../../sql-reference/table-functions/odbc.md) используют столбцы с типом Nullable. - -Возможные значения: - -- 0 — табличная функция явно использует столбцы Nullable. -- 1 — табличная функция неявно использует столбцы Nullable. - -**Использование** - -Если параметр установлен в `0`, табличная функция не помечает столбцы как Nullable и вставляет значения по умолчанию вместо NULL. Это также применяется к значениям NULL внутри массивов. - -## external_table_strict_query {#external_table_strict_query} - - - -Если установлено значение true, преобразование выражения в локальный фильтр запрещено для запросов к внешним таблицам. - -## extract_key_value_pairs_max_pairs_per_row {#extract_key_value_pairs_max_pairs_per_row} - -**Aliases**: `extract_kvp_max_pairs_per_row` - - - - - -Максимальное количество пар, которое может быть сформировано функцией `extractKeyValuePairs`. Используется как защита от чрезмерного потребления памяти. - -## extremes {#extremes} - - - -Определяет, нужно ли учитывать экстремальные значения (минимальные и максимальные значения в столбцах результата запроса). Принимает 0 или 1. По умолчанию — 0 (отключено). -Дополнительную информацию см. в разделе «Экстремальные значения». - -## fallback_to_stale_replicas_for_distributed_queries {#fallback_to_stale_replicas_for_distributed_queries} - - - -Принудительно направляет запрос на устаревшую реплику, если обновлённые данные недоступны. См. раздел [Replication](../../engines/table-engines/mergetree-family/replication.md). - -ClickHouse выбирает наиболее подходящую из устаревших реплик таблицы. - -Используется при выполнении `SELECT` из распределённой таблицы, которая ссылается на реплицируемые таблицы. - -По умолчанию — 1 (включено). - -## filesystem_cache_allow_background_download {#filesystem_cache_allow_background_download} - - - - - -Разрешает файловому кэшу ставить в очередь фоновые загрузки данных, читаемых из удалённого хранилища. Отключите, чтобы выполнять загрузки в переднем плане для текущего запроса или сеанса. - -## filesystem_cache_boundary_alignment {#filesystem_cache_boundary_alignment} - - - - - -Выравнивание границ файлового кэша. Этот параметр применяется только при чтении не с диска (например, для кэша удалённых движков таблиц и табличных функций, но не для конфигурации хранилища таблиц MergeTree). Значение 0 означает отсутствие выравнивания. - -## filesystem_cache_enable_background_download_during_fetch {#filesystem_cache_enable_background_download_during_fetch} - - - - - - - -Действует только в ClickHouse Cloud. Время ожидания при захвате блокировки кэша для резервирования места в файловом кэше - -## filesystem_cache_enable_background_download_for_metadata_files_in_packed_storage {#filesystem_cache_enable_background_download_for_metadata_files_in_packed_storage} - - - - - - - -Применяется только в ClickHouse Cloud. Время ожидания блокировки кэша при резервировании места в файловом кэше - -## filesystem_cache_max_download_size {#filesystem_cache_max_download_size} - - - -Максимальный размер кэша удалённой файловой системы, который может быть загружен одним запросом - -## filesystem_cache_name {#filesystem_cache_name} - - - -Имя файлового кэша для движков таблиц без состояния или дата-лейков - -## filesystem_cache_prefer_bigger_buffer_size {#filesystem_cache_prefer_bigger_buffer_size} - - - - - -Использовать больший размер буфера, если включён файловый кэш, чтобы избежать записи небольших сегментов файлов, ухудшающих производительность кэша. Однако включение этого параметра может увеличить потребление памяти. - -## filesystem_cache_reserve_space_wait_lock_timeout_milliseconds {#filesystem_cache_reserve_space_wait_lock_timeout_milliseconds} - - - - - -Таймаут ожидания захвата блокировки кэша при резервировании пространства в файловом кэше - -## filesystem_cache_segments_batch_size {#filesystem_cache_segments_batch_size} - - - -Ограничение на размер одного пакета файловых сегментов, которые буфер чтения может запросить из кэша. Слишком маленькое значение приведёт к избыточному числу запросов к кэшу, слишком большое может замедлить вытеснение данных из кэша. - -## filesystem_cache_skip_download_if_exceeds_per_query_cache_write_limit {#filesystem_cache_skip_download_if_exceeds_per_query_cache_write_limit} - -**Псевдонимы**: `skip_download_if_exceeds_query_cache` - - - - - -Пропускать загрузку из удалённой файловой системы, если превышен размер кэша запроса - -## filesystem_prefetch_max_memory_usage {#filesystem_prefetch_max_memory_usage} - - - -Максимальный объём памяти, используемой для предварительного чтения. - -## filesystem_prefetch_step_bytes {#filesystem_prefetch_step_bytes} - - - -Шаг предварительной выборки в байтах. Значение `0` означает `auto` — примерно оптимальный шаг предварительной выборки будет выбран автоматически, но может быть не на 100% лучшим. Фактическое значение может отличаться из‑за настройки filesystem_prefetch_min_bytes_for_single_read_task. - -## filesystem_prefetch_step_marks {#filesystem_prefetch_step_marks} - - - -Шаг предварительной выборки в метках. Ноль означает `auto` — приблизительно оптимальный шаг предварительной выборки будет определён автоматически, но он может быть не на 100% лучшим. Фактическое значение может отличаться из-за настройки filesystem_prefetch_min_bytes_for_single_read_task. - -## filesystem_prefetches_limit {#filesystem_prefetches_limit} - - - -Максимальное количество предварительных чтений. Значение 0 означает отсутствие ограничений. Для ограничения количества предварительных чтений предпочтительнее использовать настройку `filesystem_prefetches_max_memory_usage`. - -## final - - - -Автоматически применяет модификатор [FINAL](../../sql-reference/statements/select/from.md/#final-modifier) ко всем таблицам в запросе, для которых [FINAL](../../sql-reference/statements/select/from.md/#final-modifier) применим, включая соединённые таблицы, таблицы в подзапросах и распределённые таблицы. - -Возможные значения: - -* 0 - отключено -* 1 - включено - -Пример: - -```sql -CREATE TABLE test -( - key Int64, - some String -) -ENGINE = ReplacingMergeTree -ORDER BY key; - -INSERT INTO test FORMAT Values (1, 'first'); -INSERT INTO test FORMAT Values (1, 'second'); - -SELECT * FROM test; -┌─key─┬─some───┐ -│ 1 │ second │ -└─────┴────────┘ -┌─key─┬─some──┐ -│ 1 │ first │ -└─────┴───────┘ - -SELECT * FROM test SETTINGS final = 1; -┌─key─┬─some───┐ -│ 1 │ second │ -└─────┴────────┘ - -SET final = 1; -SELECT * FROM test; -┌─key─┬─some───┐ -│ 1 │ second │ -└─────┴────────┘ -``` - - -## flatten_nested - - - -Задает формат данных столбцов типа [Nested](../../sql-reference/data-types/nested-data-structures/index.md). - -Возможные значения: - -* 1 — столбец Nested разворачивается в отдельные массивы. -* 0 — столбец Nested остается одним массивом кортежей. - -**Использование** - -Если параметр установлен в `0`, можно использовать произвольный уровень вложенности. - -**Примеры** - -Запрос: - -```sql -SET flatten_nested = 1; -CREATE TABLE t_nest (`n` Nested(a UInt32, b UInt32)) ENGINE = MergeTree ORDER BY tuple(); - -SHOW CREATE TABLE t_nest; -``` - -Результат: - -```text -┌─statement───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ -│ CREATE TABLE default.t_nest -( - `n.a` Array(UInt32), - `n.b` Array(UInt32) -) -ENGINE = MergeTree -ORDER BY tuple() -SETTINGS index_granularity = 8192 │ -└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ -``` - -Запрос: - -```sql -SET flatten_nested = 0; - -CREATE TABLE t_nest (`n` Nested(a UInt32, b UInt32)) ENGINE = MergeTree ORDER BY tuple(); - -SHOW CREATE TABLE t_nest; -``` - -Результат: - -```text -┌─statement──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ -│ CREATE TABLE default.t_nest -( - `n` Nested(a UInt32, b UInt32) -) -ENGINE = MergeTree -ORDER BY tuple() -SETTINGS index_granularity = 8192 │ -└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## force_aggregate_partitions_independently {#force_aggregate_partitions_independently} - - - -Принудительно использовать оптимизацию, когда она применима, даже если эвристические алгоритмы решили её не использовать - -## force_aggregation_in_order {#force_aggregation_in_order} - - - -Этот параметр используется сервером для обработки распределённых запросов. Не изменяйте его вручную, так как это может нарушить нормальную работу. (Принудительное выполнение агрегации в порядке следования данных на удалённых узлах при распределённой агрегации). - -## force_data_skipping_indices - -Отключает выполнение запроса, если указанные индексы пропуска данных не были использованы. - -Рассмотрим следующий пример: - -```sql -CREATE TABLE data -( - key Int, - d1 Int, - d1_null Nullable(Int), - INDEX d1_idx d1 TYPE minmax GRANULARITY 1, - INDEX d1_null_idx assumeNotNull(d1_null) TYPE minmax GRANULARITY 1 -) -Engine=MergeTree() -ORDER BY key; - -SELECT * FROM data_01515; -SELECT * FROM data_01515 SETTINGS force_data_skipping_indices=''; -- запрос вызовет ошибку CANNOT_PARSE_TEXT. -SELECT * FROM data_01515 SETTINGS force_data_skipping_indices='d1_idx'; -- запрос вызовет ошибку INDEX_NOT_USED. -SELECT * FROM data_01515 WHERE d1 = 0 SETTINGS force_data_skipping_indices='d1_idx'; -- Ок. -SELECT * FROM data_01515 WHERE d1 = 0 SETTINGS force_data_skipping_indices='`d1_idx`'; -- Ок (пример полнофункционального парсера). -SELECT * FROM data_01515 WHERE d1 = 0 SETTINGS force_data_skipping_indices='`d1_idx`, d1_null_idx'; -- запрос вызовет ошибку INDEX_NOT_USED, так как индекс d1_null_idx не используется. -SELECT * FROM data_01515 WHERE d1 = 0 AND assumeNotNull(d1_null) = 0 SETTINGS force_data_skipping_indices='`d1_idx`, d1_null_idx'; -- Ок. -``` - - -## force_grouping_standard_compatibility {#force_grouping_standard_compatibility} - - - - - -Заставляет функцию GROUPING возвращать 1, если аргумент не используется в качестве ключа агрегации - -## force_index_by_date {#force_index_by_date} - - - -Отключает выполнение запроса, если индекс по дате не может быть использован. - -Работает с таблицами семейства MergeTree. - -Если `force_index_by_date=1`, ClickHouse проверяет, содержит ли запрос условие по ключу даты, которое может быть использовано для ограничения диапазонов данных. Если подходящего условия нет, выбрасывается исключение. Однако настройка не проверяет, уменьшает ли условие объем данных для чтения. Например, условие `Date != ' 2000-01-01 '` считается допустимым, даже если ему соответствуют все данные в таблице (то есть для выполнения запроса требуется полное сканирование таблицы). Дополнительную информацию о диапазонах данных в таблицах MergeTree см. в разделе [MergeTree](../../engines/table-engines/mergetree-family/mergetree.md). - -## force_optimize_projection {#force_optimize_projection} - - - -Включает или отключает обязательное использование [проекций](../../engines/table-engines/mergetree-family/mergetree.md/#projections) в запросах `SELECT`, когда включена оптимизация с использованием проекций (см. настройку [optimize_use_projections](#optimize_use_projections)). - -Возможные значения: - -- 0 — Оптимизация с использованием проекций не является обязательной. -- 1 — Оптимизация с использованием проекций является обязательной. - -## force_optimize_projection_name {#force_optimize_projection_name} - -Если параметру задано непустое строковое значение, выполняется проверка, что эта проекция используется в запросе хотя бы один раз. - -Возможные значения: - -- string: имя проекции, используемой в запросе - -## force_optimize_skip_unused_shards {#force_optimize_skip_unused_shards} - - - -Включает или отключает выполнение запроса, если [optimize_skip_unused_shards](#optimize_skip_unused_shards) включен, но пропуск неиспользуемых шардов невозможен. Если пропуск невозможен и настройка включена, будет сгенерировано исключение. - -Возможные значения: - -- 0 — Отключено. ClickHouse не генерирует исключение. -- 1 — Включено. Выполнение запроса запрещается только в том случае, если у таблицы есть ключ шардирования. -- 2 — Включено. Выполнение запроса запрещается независимо от того, определён ли для таблицы ключ шардирования. - -## force_optimize_skip_unused_shards_nesting {#force_optimize_skip_unused_shards_nesting} - - - -Регулирует работу параметра [`force_optimize_skip_unused_shards`](#force_optimize_skip_unused_shards) (и, следовательно, по‑прежнему требует включённого [`force_optimize_skip_unused_shards`](#force_optimize_skip_unused_shards)) в зависимости от уровня вложенности распределённого запроса (когда таблица `Distributed` обращается к другой таблице `Distributed`). - -Возможные значения: - -- 0 — Отключено: `force_optimize_skip_unused_shards` применяется на всех уровнях вложенности. -- 1 — Включает `force_optimize_skip_unused_shards` только для первого уровня вложенности. -- 2 — Включает `force_optimize_skip_unused_shards` до второго уровня вложенности. - -## force_primary_key {#force_primary_key} - - - -Запрещает выполнение запроса, если использование индекса по первичному ключу невозможно. - -Применяется к таблицам семейства MergeTree. - -Если `force_primary_key=1`, ClickHouse проверяет, содержит ли запрос условие по первичному ключу, которое может быть использовано для ограничения диапазонов данных. Если подходящего условия нет, генерируется исключение. При этом не проверяется, уменьшает ли это условие объём данных для чтения. Дополнительную информацию о диапазонах данных в таблицах MergeTree см. в разделе [MergeTree](../../engines/table-engines/mergetree-family/mergetree.md). - -## force_remove_data_recursively_on_drop {#force_remove_data_recursively_on_drop} - - - -Рекурсивно удаляет данные при выполнении запроса DROP. Позволяет избежать ошибки «Directory not empty», но может незаметно удалить отсоединённые данные - -## formatdatetime_e_with_space_padding {#formatdatetime_e_with_space_padding} - - - - - -Форматтер '%e' в функции 'formatDateTime' выводит однозначные значения дней месяца с начальным пробелом, например ' 2' вместо '2'. - -## formatdatetime_f_prints_scale_number_of_digits {#formatdatetime_f_prints_scale_number_of_digits} - - - - - -Форматтер '%f' в функции `formatDateTime` выводит для DateTime64 только количество цифр, соответствующее масштабу, вместо фиксированных 6 цифр. - -## formatdatetime_f_prints_single_zero {#formatdatetime_f_prints_single_zero} - - - - - -Спецификатор формата '%f' в функции 'formatDateTime' выводит один ноль вместо шести, если значение времени не содержит дробной части секунды. - -## formatdatetime_format_without_leading_zeros {#formatdatetime_format_without_leading_zeros} - - - -Спецификаторы формата '%c', '%l' и '%k' в функции 'formatDateTime' выводят месяцы и часы без ведущих нулей. - -## formatdatetime_parsedatetime_m_is_month_name {#formatdatetime_parsedatetime_m_is_month_name} - - - - - -Спецификатор формата `%M` в функциях `formatDateTime` и `parseDateTime` выводит/разбирает название месяца вместо минут. - -## fsync_metadata {#fsync_metadata} - - - -Включает или отключает [fsync](http://pubs.opengroup.org/onlinepubs/9699919799/functions/fsync.html) при записи файлов `.sql`. По умолчанию включено. - -Имеет смысл отключить этот параметр, если на сервере миллионы небольших таблиц, которые постоянно создаются и удаляются. - -## function_date_trunc_return_type_behavior {#function_date_trunc_return_type_behavior} - - - - - -Позволяет изменить поведение возвращаемого типа функции `dateTrunc`. - -Возможные значения: - -- 0 — когда второй аргумент имеет тип `DateTime64/Date32`, тип возвращаемого значения будет `DateTime64/Date32` независимо от временной единицы в первом аргументе. -- 1 — для `Date32` результат всегда имеет тип `Date`. Для `DateTime64` результат имеет тип `DateTime` для временных единиц `second` и более крупных. - -## function_implementation {#function_implementation} - -Выберите реализацию функции для конкретного target или варианта (экспериментально). Если параметр не задан, включаются все реализации. - -## function_json_value_return_type_allow_complex - - - -Определяет, разрешено ли функции json_value возвращать сложные типы (например, struct, array, map). - -```sql -SELECT JSON_VALUE('{"hello":{"world":"!"}}', '$.hello') settings function_json_value_return_type_allow_complex=true - -┌─JSON_VALUE('{"hello":{"world":"!"}}', '$.hello')─┐ -│ {"world":"!"} │ -└──────────────────────────────────────────────────┘ - -Получена 1 строка. Прошло: 0.001 сек. -``` - -Возможные значения: - -* true — разрешить. -* false — запретить. - - -## function_json_value_return_type_allow_nullable - - - -Определяет, можно ли возвращать `NULL`, если запрошенное значение для функции JSON_VALUE отсутствует. - -```sql -SELECT JSON_VALUE('{"hello":"world"}', '$.b') settings function_json_value_return_type_allow_nullable=true; - -┌─JSON_VALUE('{"hello":"world"}', '$.b')─┐ -│ ᴺᵁᴸᴸ │ -└────────────────────────────────────────┘ - -Получена 1 строка. Прошло: 0.001 сек. -``` - -Возможные значения: - -* true — разрешить. -* false — запретить. - - -## function_locate_has_mysql_compatible_argument_order {#function_locate_has_mysql_compatible_argument_order} - - - - - -Определяет порядок аргументов в функции [locate](../../sql-reference/functions/string-search-functions.md/#locate). - -Возможные значения: - -- 0 — функция `locate` принимает аргументы `(haystack, needle[, start_pos])`. -- 1 — функция `locate` принимает аргументы `(needle, haystack, [, start_pos])` (поведение, совместимое с MySQL). - -## function_range_max_elements_in_block {#function_range_max_elements_in_block} - - - -Устанавливает защитный порог для объёма данных, генерируемых функцией [range](/sql-reference/functions/array-functions#range). Определяет максимальное количество значений, генерируемых функцией для блока данных (сумма размеров массивов для каждой строки в блоке). - -Возможные значения: - -- Положительное целое число. - -**См. также** - -- [`max_block_size`](#max_block_size) -- [`min_insert_block_size_rows`](#min_insert_block_size_rows) - -## function_sleep_max_microseconds_per_block {#function_sleep_max_microseconds_per_block} - - - - - -Максимальное количество микросекунд, в течение которых функция `sleep` может приостанавливать выполнение для каждого блока. Если указано большее значение, выбрасывается исключение. Это защитный порог. - -## function_visible_width_behavior {#function_visible_width_behavior} - - - - - -Вариант поведения функции `visibleWidth`. 0 — подсчитывать только количество кодовых точек; 1 — корректно учитывать символы нулевой ширины и комбинируемые символы, считать полноширинные символы за два, оценивать ширину табуляции, учитывать символы удаления. - -## geo_distance_returns_float64_on_float64_arguments {#geo_distance_returns_float64_on_float64_arguments} - - - - - -Если все четыре аргумента функций `geoDistance`, `greatCircleDistance`, `greatCircleAngle` имеют тип Float64, то возвращается Float64, а для внутренних вычислений используется двойная точность. В предыдущих версиях ClickHouse эти функции всегда возвращали Float32. - -## geotoh3_argument_order {#geotoh3_argument_order} - - - - - - - -Функция 'geoToH3' принимает (lon, lat), если установлено 'lon_lat', и (lat, lon), если установлено 'lat_lon'. - -## glob_expansion_max_elements {#glob_expansion_max_elements} - - - -Максимальное количество допустимых адресов (для внешних хранилищ, табличных функций и т. д.). - -## grace_hash_join_initial_buckets {#grace_hash_join_initial_buckets} - - - - - -Начальное количество бакетов grace hash join - -## grace_hash_join_max_buckets {#grace_hash_join_max_buckets} - - - - - -Ограничение на количество бакетов для grace hash join - -## group_by_overflow_mode {#group_by_overflow_mode} - - - -Определяет, что происходит, когда количество уникальных ключей для агрегации превышает заданный предел: - -- `throw`: сгенерировать исключение -- `break`: остановить выполнение запроса и вернуть частичный результат -- `any`: продолжать агрегацию для ключей, уже попавших в множество, но не добавлять в множество новые ключи. - -Использование значения `any` позволяет выполнять приближённый вариант GROUP BY. Качество -этого приближения зависит от статистических свойств данных. - -## group_by_two_level_threshold {#group_by_two_level_threshold} - - - -При каком количестве ключей начинается двухуровневая агрегация. 0 — порог не установлен. - -## group_by_two_level_threshold_bytes {#group_by_two_level_threshold_bytes} - - - -Минимальный размер агрегатного состояния в байтах, при котором начинает применяться двухуровневая агрегация. 0 — порог не установлен. Двухуровневая агрегация используется, когда срабатывает хотя бы один из порогов. - -## group_by_use_nulls {#group_by_use_nulls} - - - -Изменяет способ, которым [предложение GROUP BY](/sql-reference/statements/select/group-by) обрабатывает типы ключей агрегации. -Когда используются спецификаторы `ROLLUP`, `CUBE` или `GROUPING SETS`, некоторые ключи агрегации могут не использоваться при формировании отдельных строк результата. -Столбцы для этих ключей в соответствующих строках заполняются либо значением по умолчанию, либо `NULL` в зависимости от этой настройки. - -Возможные значения: - -- 0 — Для отсутствующих значений используется значение по умолчанию для типа ключа агрегации. -- 1 — ClickHouse выполняет `GROUP BY` так же, как это определено стандартом SQL. Типы ключей агрегации преобразуются в [Nullable](/sql-reference/data-types/nullable). Столбцы для соответствующих ключей агрегации заполняются значением [NULL](/sql-reference/syntax#null) для строк, в которых они не использовались. - -См. также: - -- [Предложение GROUP BY](/sql-reference/statements/select/group-by) - -## h3togeo_lon_lat_result_order {#h3togeo_lon_lat_result_order} - - - - - -Функция `h3ToGeo` возвращает (долгота, широта), если true, иначе (широта, долгота). - -## handshake_timeout_ms {#handshake_timeout_ms} - - - -Таймаут в миллисекундах ожидания пакета Hello от реплик при установлении соединения. - -## hdfs_create_new_file_on_insert {#hdfs_create_new_file_on_insert} - - - -Включает или отключает создание нового файла при каждом `INSERT` в таблицы с движком HDFS. Если включено, при каждом выполнении запроса `INSERT` будет создаваться новый HDFS-файл с именем по шаблону, похожему на следующий: - -изначально `data.Parquet.gz` -> `data.1.Parquet.gz` -> `data.2.Parquet.gz` и т.д. - -Возможные значения: - -- 0 — запрос `INSERT` дописывает новые данные в конец файла. -- 1 — запрос `INSERT` создает новый файл. - -## hdfs_ignore_file_doesnt_exist {#hdfs_ignore_file_doesnt_exist} - - - - - -Игнорировать отсутствие файла при чтении определённых ключей, если запрошенный файл отсутствует. - -Возможные значения: - -- 1 — `SELECT` возвращает пустой результат. -- 0 — `SELECT` выбрасывает исключение. - -## hdfs_replication {#hdfs_replication} - - - -Фактическое количество реплик может быть указано при создании файла HDFS. - -## hdfs_skip_empty_files {#hdfs_skip_empty_files} - - - -Включает или отключает пропуск пустых файлов в таблицах движка [HDFS](../../engines/table-engines/integrations/hdfs.md). - -Возможные значения: - -- 0 — `SELECT` выдает исключение, если пустой файл не совместим с запрошенным форматом. -- 1 — `SELECT` возвращает пустой результат для пустого файла. - -## hdfs_throw_on_zero_files_match {#hdfs_throw_on_zero_files_match} - - - - - -Вызывает ошибку, если по правилам раскрытия шаблонов glob не найдено ни одного файла. - -Возможные значения: - -- 1 — `SELECT` генерирует исключение. -- 0 — `SELECT` возвращает пустой результат. - -## hdfs_truncate_on_insert {#hdfs_truncate_on_insert} - - - -Включает или отключает усечение файла перед вставкой в таблицы движка HDFS. Если параметр отключён, при попытке вставки будет возбуждено исключение, если файл в HDFS уже существует. - -Возможные значения: - -- 0 — запрос `INSERT` дописывает новые данные в конец файла. -- 1 — запрос `INSERT` заменяет существующее содержимое файла новыми данными. - -## hedged_connection_timeout_ms {#hedged_connection_timeout_ms} - - - - - -Таймаут установки соединения с репликой для хеджированных (hedged) запросов - -## hnsw_candidate_list_size_for_search {#hnsw_candidate_list_size_for_search} - - - - - -Размер динамического списка кандидатов при поиске по индексу векторного подобия; этот параметр также известен как `ef_search`. - -## hsts_max_age {#hsts_max_age} - - - -Период действия HSTS. Значение 0 отключает HSTS. - -## http_connection_timeout {#http_connection_timeout} - - - -Таймаут HTTP-соединения (в секундах). - -Возможные значения: - -- Любое положительное целое число. -- 0 — отключено (бесконечный таймаут). - -## http_headers_progress_interval_ms {#http_headers_progress_interval_ms} - - - -Не отправляйте HTTP-заголовки X-ClickHouse-Progress чаще, чем один раз за указанный интервал. - -## http_make_head_request {#http_make_head_request} - - - -Настройка `http_make_head_request` позволяет выполнять запрос `HEAD` при чтении данных по протоколу HTTP, чтобы получить информацию о считываемом файле, например о его размере. Поскольку она включена по умолчанию, в случаях, когда сервер не поддерживает запросы `HEAD`, может потребоваться отключить эту настройку. - -## http_max_field_name_size {#http_max_field_name_size} - - - -Максимальная длина имени поля в заголовке HTTP - -## http_max_field_value_size {#http_max_field_value_size} - - - -Максимальная длина значения поля заголовка HTTP - -## http_max_fields {#http_max_fields} - - - -Максимальное количество полей в HTTP-заголовке - -## http_max_multipart_form_data_size {#http_max_multipart_form_data_size} - - - -Ограничение по размеру содержимого multipart/form-data. Этот параметр не может быть задан через параметры URL и должен указываться в пользовательском профиле. Обратите внимание, что содержимое разбирается, а внешние таблицы создаются в памяти до начала выполнения запроса. И это единственный лимит, который действует на этом этапе (ограничения на максимальное использование памяти и максимальное время выполнения не влияют на чтение данных формы HTTP). - -## http_max_request_param_data_size {#http_max_request_param_data_size} - - - -Ограничение на размер данных запроса, используемых в качестве параметра в предопределённых HTTP-запросах. - -## http_max_tries {#http_max_tries} - - - -Максимальное число попыток чтения через HTTP. - -## http_max_uri_size {#http_max_uri_size} - - - -Устанавливает максимальную длину URI в HTTP‑запросе. - -Возможные значения: - -- Положительное целое число. - -## http_native_compression_disable_checksumming_on_decompress {#http_native_compression_disable_checksumming_on_decompress} - - - -Включает или отключает проверку контрольной суммы при декомпрессии данных HTTP POST‑запроса от клиента. Используется только для собственного формата сжатия ClickHouse (не используется с `gzip` или `deflate`). - -Дополнительные сведения см. в [описании HTTP-интерфейса](../../interfaces/http.md). - -Возможные значения: - -- 0 — Отключено. -- 1 — Включено. - -## http_receive_timeout {#http_receive_timeout} - - - - - -Таймаут ожидания приёма HTTP‑данных (в секундах). - -Возможные значения: - -- Любое положительное целое число. -- 0 — отключено (бесконечный таймаут). - -## http_response_buffer_size {#http_response_buffer_size} - - - -Количество байт, буферизуемых в памяти сервера перед отправкой HTTP‑ответа клиенту или записью на диск (когда включён http_wait_end_of_query). - -## http_response_headers {#http_response_headers} - - - - - -Позволяет добавлять или переопределять HTTP-заголовки, которые сервер вернёт в ответе при успешном выполнении запроса. -Это влияет только на HTTP-интерфейс. - -Если заголовок уже установлен по умолчанию, предоставленное значение его переопределит. -Если заголовок не был установлен по умолчанию, он будет добавлен в список заголовков. -Заголовки, которые сервер устанавливает по умолчанию и которые не переопределены этим параметром, останутся без изменений. - -Параметр позволяет установить заголовок в фиксированное значение. В настоящее время нет способа задать заголовок как динамически вычисляемое значение. - -Ни имена, ни значения не могут содержать управляющие символы ASCII. - -Если вы реализуете UI-приложение, которое позволяет пользователям изменять настройки, но при этом принимает решения на основе возвращаемых заголовков, рекомендуется ограничить этот параметр режимом только для чтения (`readonly`). - -Пример: `SET http_response_headers = '{"Content-Type": "image/png"}'` - -## http_retry_initial_backoff_ms {#http_retry_initial_backoff_ms} - - - -Минимальное значение задержки (backoff) в миллисекундах при повторной попытке чтения по HTTP - -## http_retry_max_backoff_ms {#http_retry_max_backoff_ms} - - - -Максимальное значение задержки (backoff) в миллисекундах при повторной попытке чтения по HTTP - -## http_send_timeout {#http_send_timeout} - - - - - -Таймаут отправки HTTP-запросов (в секундах). - -Возможные значения: - -- Любое положительное целое число. -- 0 — отключено (бесконечный таймаут). - -:::note -Применимо только к профилю по умолчанию. Для вступления изменений в силу требуется перезапуск сервера. -::: - -## http_skip_not_found_url_for_globs {#http_skip_not_found_url_for_globs} - - - -Пропускать URL, соответствующие glob-шаблонам, для которых получена ошибка HTTP_NOT_FOUND - -## http_wait_end_of_query {#http_wait_end_of_query} - - - -Включает буферизацию HTTP-ответов на стороне сервера. - -## http_write_exception_in_output_format {#http_write_exception_in_output_format} - - - - - -Выводить информацию об исключении в выходном формате, чтобы формировать корректный вывод. Работает с форматами JSON и XML. - -## http_zlib_compression_level {#http_zlib_compression_level} - - - -Устанавливает уровень сжатия данных в ответе на HTTP-запрос, если [enable_http_compression = 1](#enable_http_compression). - -Возможные значения: числа от 1 до 9. - -## iceberg_delete_data_on_drop {#iceberg_delete_data_on_drop} - - - - - -Определяет, нужно ли удалять все файлы Iceberg при выполнении операции `DROP`. - -## iceberg_insert_max_bytes_in_data_file {#iceberg_insert_max_bytes_in_data_file} - - - - - -Максимальный размер в байтах Parquet-файла данных Iceberg при выполнении операции вставки. - -## iceberg_insert_max_partitions {#iceberg_insert_max_partitions} - - - - - -Максимально допустимое количество партиций в одной операции вставки в таблицу движка Iceberg. - -## iceberg_insert_max_rows_in_data_file {#iceberg_insert_max_rows_in_data_file} - - - - - -Максимальное количество строк в Parquet-файле данных Iceberg при выполнении операции вставки. - -## iceberg_metadata_compression_method {#iceberg_metadata_compression_method} - - - - - -Метод, используемый для сжатия файла `.metadata.json`. - -## iceberg_metadata_log_level {#iceberg_metadata_log_level} - - - - - -Определяет уровень логирования метаданных для таблиц Iceberg в системную таблицу system.iceberg_metadata_log. -Обычно эту настройку изменяют в целях отладки. - -Возможные значения: - -- none — без журнала метаданных. -- metadata — корневой файл metadata.json. -- manifest_list_metadata — всё выше + метаданные из списка манифестов Avro (avro manifest list), соответствующего снимку (snapshot). -- manifest_list_entry — всё выше + записи списка манифестов Avro. -- manifest_file_metadata — всё выше + метаданные из просматриваемых файлов манифестов Avro. -- manifest_file_entry — всё выше + записи из просматриваемых файлов манифестов Avro. - -## iceberg_snapshot_id {#iceberg_snapshot_id} - - - - - -Выполняет запрос к таблице Iceberg по указанному идентификатору снимка. - -## iceberg_timestamp_ms {#iceberg_timestamp_ms} - - - - - -Выполняет запрос к таблице Iceberg, используя снимок, актуальный на указанный момент времени. - -## idle_connection_timeout {#idle_connection_timeout} - - - -Таймаут для закрытия неактивных TCP-подключений по истечении заданного количества секунд. - -Возможные значения: - -- Положительное целое число (0 — закрыть немедленно, через 0 секунд). - -## ignore_cold_parts_seconds {#ignore_cold_parts_seconds} - - - - - -Действует только в ClickHouse Cloud. Исключает новые части данных из запросов SELECT до тех пор, пока они либо не будут предварительно прогреты (см. [cache_populated_by_fetch](merge-tree-settings.md/#cache_populated_by_fetch)), либо не станут старше указанного числа секунд. Применяется только к Replicated-/SharedMergeTree. - -## ignore_data_skipping_indices - -Игнорирует указанные индексы пропуска данных, если они используются в запросе. - -Рассмотрим следующий пример: - -```sql -CREATE TABLE data -( - key Int, - x Int, - y Int, - INDEX x_idx x TYPE minmax GRANULARITY 1, - INDEX y_idx y TYPE minmax GRANULARITY 1, - INDEX xy_idx (x,y) TYPE minmax GRANULARITY 1 -) -Engine=MergeTree() -ORDER BY key; - -INSERT INTO data VALUES (1, 2, 3); - -SELECT * FROM data; -SELECT * FROM data SETTINGS ignore_data_skipping_indices=''; -- запрос приведет к ошибке CANNOT_PARSE_TEXT. -SELECT * FROM data SETTINGS ignore_data_skipping_indices='x_idx'; -- Ок. -SELECT * FROM data SETTINGS ignore_data_skipping_indices='na_idx'; -- Ок. - -SELECT * FROM data WHERE x = 1 AND y = 1 SETTINGS ignore_data_skipping_indices='xy_idx',force_data_skipping_indices='xy_idx' ; -- запрос приведет к ошибке INDEX_NOT_USED, так как xy_idx явно игнорируется. -SELECT * FROM data WHERE x = 1 AND y = 2 SETTINGS ignore_data_skipping_indices='xy_idx'; -``` - -Запрос с использованием всех индексов: - -```sql -EXPLAIN indexes = 1 SELECT * FROM data WHERE x = 1 AND y = 2; - -Expression ((Projection + Before ORDER BY)) - Filter (WHERE) - ReadFromMergeTree (default.data) - Indexes: - PrimaryKey - Condition: true - Parts: 1/1 - Granules: 1/1 - Skip - Name: x_idx - Description: minmax GRANULARITY 1 - Parts: 0/1 - Granules: 0/1 - Skip - Name: y_idx - Description: minmax GRANULARITY 1 - Parts: 0/0 - Granules: 0/0 - Skip - Name: xy_idx - Description: minmax GRANULARITY 1 - Parts: 0/0 - Granules: 0/0 -``` - -Игнорируем индекс `xy_idx`: - -```sql -EXPLAIN indexes = 1 SELECT * FROM data WHERE x = 1 AND y = 2 SETTINGS ignore_data_skipping_indices='xy_idx'; - -Expression ((Projection + Before ORDER BY)) - Filter (WHERE) - ReadFromMergeTree (default.data) - Indexes: - PrimaryKey - Condition: true - Parts: 1/1 - Granules: 1/1 - Skip - Name: x_idx - Description: minmax GRANULARITY 1 - Parts: 0/1 - Granules: 0/1 - Skip - Name: y_idx - Description: minmax GRANULARITY 1 - Parts: 0/0 - Granules: 0/0 -``` - -Работает с таблицами семейства MergeTree. - - -## ignore_drop_queries_probability {#ignore_drop_queries_probability} - - - - - -При включении настройка заставляет сервер с указанной вероятностью игнорировать все запросы DROP TABLE (для движков Memory и JOIN оператор DROP будет заменён на TRUNCATE). Используется в целях тестирования. - -## ignore_materialized_views_with_dropped_target_table {#ignore_materialized_views_with_dropped_target_table} - - - - - -Игнорировать материализованные представления с удалённой целевой таблицей при отправке данных в представления - -## ignore_on_cluster_for_replicated_access_entities_queries {#ignore_on_cluster_for_replicated_access_entities_queries} - - - -Игнорировать предложение ON CLUSTER для запросов управления реплицируемыми сущностями управления доступом. - -## ignore_on_cluster_for_replicated_named_collections_queries {#ignore_on_cluster_for_replicated_named_collections_queries} - - - - - -Игнорирует предложение ON CLUSTER для запросов управления реплицируемыми именованными коллекциями. - -## ignore_on_cluster_for_replicated_udf_queries {#ignore_on_cluster_for_replicated_udf_queries} - - - -Игнорирует клаузу ON CLUSTER для запросов управления реплицируемыми UDF. - -## implicit_select {#implicit_select} - - - - - -Позволяет выполнять простые запросы без начального ключевого слова SELECT, что упрощает использование в режиме калькулятора: например, `1 + 2` становится корректным запросом. - -В `clickhouse-local` этот параметр включён по умолчанию, но его можно явно отключить. - -## implicit_table_at_top_level {#implicit_table_at_top_level} - - - -Если настройка не пуста, запросы без FROM на верхнем уровне будут считывать данные из этой таблицы вместо system.one. - -Эта настройка используется в clickhouse-local для обработки входных данных. -Параметр может быть явно задан пользователем, но не предназначен для такого варианта использования. - -Подзапросы не затрагиваются этой настройкой (ни скалярные, ни подзапросы в предложениях FROM или IN). -Операторы SELECT на верхнем уровне цепочек UNION, INTERSECT, EXCEPT обрабатываются единообразно и затрагиваются этой настройкой независимо от их группировки в скобках. -То, как эта настройка влияет на представления (views) и распределённые запросы, не определено. - -Настройка принимает имя таблицы (в этом случае таблица определяется в контексте текущей базы данных) или квалифицированное имя в форме 'database.table'. -И имена баз данных, и имена таблиц должны быть без кавычек — допускаются только простые идентификаторы. - -## implicit_transaction {#implicit_transaction} - - - - - -Если параметр включён и запрос ещё не выполняется в рамках транзакции, оборачивает запрос в полноценную транзакцию (BEGIN + COMMIT или ROLLBACK). - -## inject_random_order_for_select_without_order_by {#inject_random_order_for_select_without_order_by} - - - - - -Если настройка включена, добавляет `ORDER BY rand()` в запросы SELECT без предложения ORDER BY. -Применяется только при глубине подзапроса 0. Подзапросы и INSERT INTO ... SELECT не затрагиваются. -Если на верхнем уровне используется конструкция UNION, `ORDER BY rand()` добавляется независимо во все дочерние части. -Полезно только для тестирования и разработки (отсутствие ORDER BY является источником недетерминированных результатов запроса). - -## input_format_parallel_parsing {#input_format_parallel_parsing} - - - -Включает или отключает параллельный разбор форматов данных с сохранением порядка. Поддерживается только для форматов [TabSeparated (TSV)](/interfaces/formats/TabSeparated), [TSKV](/interfaces/formats/TSKV), [CSV](/interfaces/formats/CSV) и [JSONEachRow](/interfaces/formats/JSONEachRow). - -Возможные значения: - -- 1 — Включено. -- 0 — Отключено. - -## insert_allow_materialized_columns {#insert_allow_materialized_columns} - - - -Если настройка включена, разрешает использовать материализованные столбцы в операторе INSERT. - -## insert_deduplicate {#insert_deduplicate} - - - -Включает или отключает дедупликацию блоков при `INSERT` (для реплицируемых таблиц серии Replicated\*). - -Возможные значения: - -- 0 — Выключено. -- 1 — Включено. - -По умолчанию блоки, вставляемые в реплицируемые таблицы оператором `INSERT`, дедуплицируются (см. [Репликация данных](../../engines/table-engines/mergetree-family/replication.md)). -Для реплицируемых таблиц по умолчанию дедуплицируются только 100 последних блоков для каждого раздела (см. [replicated_deduplication_window](merge-tree-settings.md/#replicated_deduplication_window), [replicated_deduplication_window_seconds](merge-tree-settings.md/#replicated_deduplication_window_seconds)). -Для нереплицируемых таблиц см. [non_replicated_deduplication_window](merge-tree-settings.md/#non_replicated_deduplication_window). - -## insert_deduplication_token - -Этот параметр позволяет пользователю задать собственную семантику дедупликации в MergeTree/ReplicatedMergeTree. -Например, указывая уникальное значение этого параметра в каждом операторе INSERT, -пользователь может избежать дедупликации одних и тех же вставленных данных. - -Возможные значения: - -* Любая строка - -`insert_deduplication_token` используется для дедупликации *только* если он непустой. - -Для реплицируемых таблиц по умолчанию дедуплицируются только 100 самых недавних вставок для каждой партиции (см. [replicated_deduplication_window](merge-tree-settings.md/#replicated_deduplication_window), [replicated_deduplication_window_seconds](merge-tree-settings.md/#replicated_deduplication_window_seconds)). -Для нереплицируемых таблиц см. [non_replicated_deduplication_window](merge-tree-settings.md/#non_replicated_deduplication_window). - -:::note -`insert_deduplication_token` работает на уровне партиции (так же, как и контрольная сумма `insert_deduplication`). Несколько партиций могут иметь одинаковый `insert_deduplication_token`. -::: - -Пример: - -```sql -CREATE TABLE test_table -( A Int64 ) -ENGINE = MergeTree -ORDER BY A -SETTINGS non_replicated_deduplication_window = 100; - -INSERT INTO test_table SETTINGS insert_deduplication_token = 'test' VALUES (1); - --- следующая вставка не будет дедуплицирована, так как insert_deduplication_token отличается -INSERT INTO test_table SETTINGS insert_deduplication_token = 'test1' VALUES (1); - --- следующая вставка будет дедуплицирована, так как insert_deduplication_token --- совпадает с одним из предыдущих -INSERT INTO test_table SETTINGS insert_deduplication_token = 'test' VALUES (2); - -SELECT * FROM test_table - -┌─A─┐ -│ 1 │ -└───┘ -┌─A─┐ -│ 1 │ -└───┘ -``` - - -## insert_keeper_fault_injection_probability {#insert_keeper_fault_injection_probability} - - - -Приблизительная вероятность отказа запроса к keeper при вставке. Допустимые значения: от 0.0f до 1.0f. - -## insert_keeper_fault_injection_seed {#insert_keeper_fault_injection_seed} - - - -0 — случайное начальное значение генератора, иначе — значение настройки - -## insert_keeper_max_retries - - - - - -Этот параметр задаёт максимальное количество повторных попыток запросов к ClickHouse Keeper (или ZooKeeper) при вставке в реплицированные таблицы MergeTree. Для повторных попыток учитываются только те запросы к Keeper, которые завершились с ошибкой из‑за сетевой ошибки, тайм‑аута сессии Keeper или тайм‑аута запроса. - -Возможные значения: - -* Положительное целое число. -* 0 — повторные попытки отключены. - -Значение по умолчанию в ClickHouse Cloud: `20`. - -Повторные попытки запросов к Keeper выполняются после некоторой задержки. Эта задержка контролируется следующими настройками: `insert_keeper_retry_initial_backoff_ms`, `insert_keeper_retry_max_backoff_ms`. -Первая повторная попытка выполняется после интервала `insert_keeper_retry_initial_backoff_ms`. Последующие интервалы будут вычисляться следующим образом: - -``` -timeout = min(insert_keeper_retry_max_backoff_ms, latest_timeout * 2) -``` - -Например, если `insert_keeper_retry_initial_backoff_ms=100`, `insert_keeper_retry_max_backoff_ms=10000` и `insert_keeper_max_retries=8`, то таймауты будут равны `100, 200, 400, 800, 1600, 3200, 6400, 10000`. - -Помимо отказоустойчивости, повторные попытки призваны улучшить пользовательский опыт — они позволяют избежать возврата ошибки при выполнении INSERT, если Keeper был перезапущен, например, из-за обновления. - - -## insert_keeper_retry_initial_backoff_ms {#insert_keeper_retry_initial_backoff_ms} - - - -Начальная задержка (в миллисекундах) перед повторной попыткой неудавшегося запроса к Keeper при выполнении запроса INSERT. - -Возможные значения: - -- Положительное целое число. -- 0 — без задержки. - -## insert_keeper_retry_max_backoff_ms {#insert_keeper_retry_max_backoff_ms} - - - -Максимальное время ожидания (в миллисекундах) при повторной попытке выполнения неуспешного запроса к Keeper во время выполнения запроса INSERT. - -Возможные значения: - -- Положительное целое число. -- 0 — максимальное время ожидания не ограничено. - -## insert_null_as_default {#insert_null_as_default} - - - -Включает или отключает вставку [значений по умолчанию](/sql-reference/statements/create/table#default_values) вместо [NULL](/sql-reference/syntax#null) в столбцы с типом данных, не являющимся [Nullable](/sql-reference/data-types/nullable). -Если тип столбца не Nullable и эта настройка отключена, то вставка `NULL` вызывает исключение. Если тип столбца Nullable, значения `NULL` вставляются как есть, независимо от этой настройки. - -Эта настройка применима к запросам [INSERT ... SELECT](../../sql-reference/statements/insert-into.md/#inserting-the-results-of-select). Обратите внимание, что подзапросы `SELECT` могут быть объединены с помощью предложения `UNION ALL`. - -Возможные значения: - -- 0 — Вставка `NULL` в не Nullable столбец вызывает исключение. -- 1 — Вместо `NULL` вставляется значение столбца по умолчанию. - -## insert_quorum {#insert_quorum} - - - -:::note -Этот параметр не применяется к SharedMergeTree, для получения дополнительной информации см. раздел [Согласованность SharedMergeTree](/cloud/reference/shared-merge-tree#consistency). -::: - -Включает кворумную запись. - -- Если `insert_quorum < 2`, кворумная запись отключена. -- Если `insert_quorum >= 2`, кворумная запись включена. -- Если `insert_quorum = 'auto'`, используется большинство (`number_of_replicas / 2 + 1`) в качестве числа кворума. - -Кворумная запись - -`INSERT` считается успешным только в том случае, если ClickHouse удаётся корректно записать данные на `insert_quorum` реплик в течение `insert_quorum_timeout`. Если по какой-либо причине число реплик с успешной записью не достигает значения `insert_quorum`, запись считается неуспешной, и ClickHouse удалит вставленный блок со всех реплик, на которые данные уже были записаны. - -Когда `insert_quorum_parallel` отключён, все реплики в кворуме согласованы, то есть содержат данные всех предыдущих запросов `INSERT` (последовательность операций `INSERT` линеаризована). При чтении данных, записанных с использованием `insert_quorum`, и отключённом `insert_quorum_parallel` вы можете включить последовательную согласованность для запросов `SELECT`, используя [select_sequential_consistency](#select_sequential_consistency). - -ClickHouse генерирует исключение: - -- Если число доступных реплик на момент выполнения запроса меньше значения `insert_quorum`. -- Когда `insert_quorum_parallel` отключён и выполняется попытка записи данных, в то время как предыдущий блок ещё не был вставлен на `insert_quorum` реплик. Эта ситуация может возникнуть, если пользователь пытается выполнить другой запрос `INSERT` к той же таблице до завершения предыдущего запроса с `insert_quorum`. - -См. также: - -- [insert_quorum_timeout](#insert_quorum_timeout) -- [insert_quorum_parallel](#insert_quorum_parallel) -- [select_sequential_consistency](#select_sequential_consistency) - -## insert_quorum_parallel {#insert_quorum_parallel} - - - - - -:::note -Этот параметр не применяется к SharedMergeTree, подробности см. в разделе [SharedMergeTree consistency](/cloud/reference/shared-merge-tree#consistency). -::: - -Включает или отключает параллельную обработку кворумных запросов `INSERT`. Если включено, можно отправлять дополнительные запросы `INSERT`, пока предыдущие ещё не завершены. Если отключено, дополнительные записи в ту же таблицу будут отклонены. - -Возможные значения: - -- 0 — Отключено. -- 1 — Включено. - -См. также: - -- [insert_quorum](#insert_quorum) -- [insert_quorum_timeout](#insert_quorum_timeout) -- [select_sequential_consistency](#select_sequential_consistency) - -## insert_quorum_timeout {#insert_quorum_timeout} - - - -Таймаут ожидания записи в кворум в миллисекундах. Если таймаут истёк и запись ещё не была выполнена, ClickHouse сгенерирует исключение, и клиент должен повторить запрос, чтобы записать тот же блок на ту же или любую другую реплику. - -См. также: - -- [insert_quorum](#insert_quorum) -- [insert_quorum_parallel](#insert_quorum_parallel) -- [select_sequential_consistency](#select_sequential_consistency) - -## insert_shard_id - - - -Если значение не равно `0`, задаёт шард таблицы [Distributed](/engines/table-engines/special/distributed), в который данные будут вставляться синхронно. - -Если значение `insert_shard_id` указано неверно, сервер выбросит исключение. - -Чтобы узнать количество шардов на `requested_cluster`, можно проверить конфигурацию сервера или выполнить следующий запрос: - -```sql -SELECT uniq(shard_num) FROM system.clusters WHERE cluster = 'requested_cluster'; -``` - -Возможные значения: - -* 0 — отключено. -* Любое число от `1` до `shards_num` соответствующей таблицы типа [Distributed](/engines/table-engines/special/distributed). - -**Пример** - -Запрос: - -```sql -CREATE TABLE x AS system.numbers ENGINE = MergeTree ORDER BY number; -CREATE TABLE x_dist AS x ENGINE = Distributed('test_cluster_two_shards_localhost', currentDatabase(), x); -INSERT INTO x_dist SELECT * FROM numbers(5) SETTINGS insert_shard_id = 1; -SELECT * FROM x_dist ORDER BY number ASC; -``` - -Результат: - -```text -┌─number─┐ -│ 0 │ -│ 0 │ -│ 1 │ -│ 1 │ -│ 2 │ -│ 2 │ -│ 3 │ -│ 3 │ -│ 4 │ -│ 4 │ -└────────┘ -``` - - -## interactive_delay {#interactive_delay} - - - -Интервал в микросекундах для проверки отмены выполнения запроса и отправки информации о ходе его выполнения. - -## intersect_default_mode {#intersect_default_mode} - - - -Устанавливает режим по умолчанию для запроса INTERSECT. Возможные значения: пустая строка, 'ALL', 'DISTINCT'. Если значение пустое, запрос без указанного режима вызовет исключение. - -## jemalloc_collect_profile_samples_in_trace_log {#jemalloc_collect_profile_samples_in_trace_log} - - - - - -Собирать выборки операций выделения и освобождения памяти jemalloc в trace-лог. - -## jemalloc_enable_profiler {#jemalloc_enable_profiler} - - - - - -Включает профилировщик jemalloc для запроса. Jemalloc будет выборочно отслеживать операции выделения памяти и все операции освобождения для выделений, попавших в выборку. -Профили можно выгружать с помощью SYSTEM JEMALLOC FLUSH PROFILE, что можно использовать для анализа выделений памяти. -Выборки профиля также могут сохраняться в system.trace_log с помощью конфигурационного параметра jemalloc_collect_global_profile_samples_in_trace_log или параметра запроса jemalloc_collect_profile_samples_in_trace_log. -См. [Allocation Profiling](/operations/allocation-profiling) - -## join_algorithm {#join_algorithm} - - - - - -Задаёт, какой алгоритм [JOIN](../../sql-reference/statements/select/join.md) используется. - -Можно указать несколько алгоритмов, и для конкретного запроса будет выбран доступный алгоритм на основе типа/строгости и движка таблицы. - -Возможные значения: - -- grace_hash - -Используется [Grace hash join](https://en.wikipedia.org/wiki/Hash_join#Grace_hash_join). Grace hash предоставляет вариант алгоритма, который обеспечивает эффективное выполнение сложных JOIN при ограниченном использовании памяти. - -На первой фазе алгоритм grace join читает правую таблицу и разбивает её на N корзин в зависимости от хэш-значения ключевых столбцов (изначально N — это `grace_hash_join_initial_buckets`). Это делается таким образом, чтобы каждая корзина могла обрабатываться независимо. Строки из первой корзины добавляются во внутреннюю хэш-таблицу, а остальные сохраняются на диск. Если хэш-таблица вырастает сверх лимита памяти (например, заданного параметром [`max_bytes_in_join`](/operations/settings/settings#max_bytes_in_join)), увеличивается количество корзин и переназначается корзина для каждой строки. Любые строки, которые не относятся к текущей корзине, сбрасываются и переназначаются. - -Поддерживаются `INNER/LEFT/RIGHT/FULL ALL/ANY JOIN`. - -- hash - -Используется [алгоритм hash join](https://en.wikipedia.org/wiki/Hash_join). Наиболее универсальная реализация, которая поддерживает все комбинации типа и строгости и несколько ключей соединения, объединённых оператором `OR` в секции `JOIN ON`. - -При использовании алгоритма `hash` правая часть `JOIN` загружается в оперативную память. - -- parallel_hash - -Вариант `hash` join, который разбивает данные на корзины и строит несколько хэш-таблиц вместо одной параллельно, чтобы ускорить этот процесс. - -При использовании алгоритма `parallel_hash` правая часть `JOIN` загружается в оперативную память. - -- partial_merge - -Вариант [алгоритма sort-merge](https://en.wikipedia.org/wiki/Sort-merge_join), при котором полностью сортируется только правая таблица. - -`RIGHT JOIN` и `FULL JOIN` поддерживаются только со строгостью `ALL` (`SEMI`, `ANTI`, `ANY` и `ASOF` не поддерживаются). - -При использовании алгоритма `partial_merge` ClickHouse сортирует данные и сбрасывает их на диск. Алгоритм `partial_merge` в ClickHouse немного отличается от классической реализации. Сначала ClickHouse сортирует правую таблицу по ключам соединения блоками и создаёт min-max-индекс для отсортированных блоков. Затем он сортирует части левой таблицы по `join key` и выполняет соединение с правой таблицей. Min-max-индекс также используется для пропуска ненужных блоков правой таблицы. - -- direct - -Этот алгоритм может применяться, когда хранилище для правой таблицы поддерживает запросы вида ключ-значение. - -Алгоритм `direct` выполняет поиск в правой таблице, используя строки из левой таблицы как ключи. Он поддерживается только специальными хранилищами, такими как [Dictionary](/engines/table-engines/special/dictionary) или [EmbeddedRocksDB](../../engines/table-engines/integrations/embedded-rocksdb.md), и только для `LEFT` и `INNER` JOIN. - -- auto - -Если установлено значение `auto`, сначала пробуется `hash` join, а при превышении лимита памяти алгоритм динамически переключается на другой. - -- full_sorting_merge - -[Алгоритм sort-merge](https://en.wikipedia.org/wiki/Sort-merge_join) с полной сортировкой соединяемых таблиц перед выполнением JOIN. - -- prefer_partial_merge - -ClickHouse всегда пытается использовать `partial_merge` join, если это возможно, в противном случае используется `hash`. *Устарел*, то же самое, что `partial_merge,hash`. - -- default (устарел) - -Унаследованное значение, больше не следует использовать. -То же, что `direct,hash`, то есть попытаться использовать соединения direct и hash (в таком порядке). - -## join_any_take_last_row {#join_any_take_last_row} - - - -Изменяет поведение операций соединения со строгостью `ANY`. - -:::note -Этот параметр применяется только к операциям `JOIN` с таблицами табличного движка [Join](../../engines/table-engines/special/join.md). -::: - -Возможные значения: - -- 0 — если в правой таблице больше одной подходящей строки, соединяется только первая найденная. -- 1 — если в правой таблице больше одной подходящей строки, соединяется только последняя найденная. - -См. также: - -- [Оператор JOIN](/sql-reference/statements/select/join) -- [Табличный движок Join](../../engines/table-engines/special/join.md) -- [join_default_strictness](#join_default_strictness) - -## join_default_strictness {#join_default_strictness} - - - -Устанавливает строгость по умолчанию для [предложений JOIN](/sql-reference/statements/select/join). - -Возможные значения: - -- `ALL` — Если в правой таблице есть несколько совпадающих строк, ClickHouse создаёт [декартово произведение](https://en.wikipedia.org/wiki/Cartesian_product) из совпадающих строк. Это обычное поведение `JOIN` в стандартном SQL. -- `ANY` — Если в правой таблице есть несколько совпадающих строк, присоединяется только первая найденная. Если в правой таблице только одна совпадающая строка, результаты `ANY` и `ALL` совпадают. -- `ASOF` — Для соединения последовательностей с неопределённым соответствием. -- `Empty string` — Если в запросе не указано `ALL` или `ANY`, ClickHouse генерирует исключение. - -## join_on_disk_max_files_to_merge {#join_on_disk_max_files_to_merge} - - - -Ограничивает количество файлов, допускаемых для параллельной сортировки в операциях MergeJoin, выполняемых на диске. - -Чем больше значение настройки, тем больше используется RAM и тем меньше требуется дисковых операций ввода-вывода. - -Возможные значения: - -- Любое положительное целое число, начиная с 2. - -## join_output_by_rowlist_perkey_rows_threshold {#join_output_by_rowlist_perkey_rows_threshold} - - - - - -Нижняя граница среднего числа строк на ключ в правой таблице, при которой в хэш-соединении используется вывод в виде списка строк. - -## join_overflow_mode {#join_overflow_mode} - - - -Определяет, какое действие выполняет ClickHouse при достижении одного из следующих ограничений для `JOIN`: - -- [max_bytes_in_join](/operations/settings/settings#max_bytes_in_join) -- [max_rows_in_join](/operations/settings/settings#max_rows_in_join) - -Возможные значения: - -- `THROW` — ClickHouse выбрасывает исключение и прерывает операцию. -- `BREAK` — ClickHouse прерывает операцию и не выбрасывает исключение. - -Значение по умолчанию: `THROW`. - -**См. также** - -- [Оператор JOIN](/sql-reference/statements/select/join) -- [Движок таблицы Join](/engines/table-engines/special/join) - -## join_runtime_bloom_filter_bytes {#join_runtime_bloom_filter_bytes} - - - - - - - -Размер в байтах фильтра Блума, используемого в качестве фильтра во время выполнения операции JOIN (см. настройку enable_join_runtime_filters). - -## join_runtime_bloom_filter_hash_functions {#join_runtime_bloom_filter_hash_functions} - - - - - - - -Количество хеш-функций в фильтре Блума, используемом в качестве фильтра времени выполнения JOIN (см. настройку enable_join_runtime_filters). - -## join_runtime_filter_exact_values_limit {#join_runtime_filter_exact_values_limit} - - - - - - - -Максимальное количество элементов в runtime-фильтре, которые хранятся в множестве в исходном виде; при превышении этого порога фильтр переключается на фильтр Блума. - -## join_to_sort_maximum_table_rows {#join_to_sort_maximum_table_rows} - - - - - - - -Максимальное количество строк в правой таблице для принятия решения, нужно ли пересортировывать правую таблицу по ключу при левом или внутреннем соединении. - -## join_to_sort_minimum_perkey_rows {#join_to_sort_minimum_perkey_rows} - - - - - - - -Нижняя граница среднего числа строк на один ключ в правой таблице, используемая для определения, требуется ли пересортировать правую таблицу по ключу при выполнении LEFT или INNER JOIN. Этот параметр гарантирует, что оптимизация не применяется для таблиц с разреженными ключами - -## join_use_nulls {#join_use_nulls} - - - -Устанавливает тип поведения операции [JOIN](../../sql-reference/statements/select/join.md). При объединении таблиц могут появляться пустые ячейки. ClickHouse заполняет их по-разному в зависимости от этой настройки. - -Возможные значения: - -- 0 — пустые ячейки заполняются значением по умолчанию для соответствующего типа поля. -- 1 — `JOIN` ведёт себя так же, как в стандартном SQL. Тип соответствующего поля преобразуется в [Nullable](/sql-reference/data-types/nullable), а пустые ячейки заполняются значением [NULL](/sql-reference/syntax). - -## joined_block_split_single_row {#joined_block_split_single_row} - - - - - -Позволяет разбивать результат хеш-соединения на чанки по строкам, соответствующим одной строке из левой таблицы. -Это может уменьшить использование памяти в случае строки с большим количеством совпадений в правой таблице, но может увеличить загрузку CPU. -Обратите внимание, что обязательным условием для работы этой настройки является `max_joined_block_size_rows != 0`. -Параметр `max_joined_block_size_bytes` в сочетании с этой настройкой полезен для предотвращения чрезмерного использования памяти в случае перекошенных данных, когда некоторые большие строки имеют много совпадений в правой таблице. - -## joined_subquery_requires_alias {#joined_subquery_requires_alias} - - - -Требует, чтобы присоединённые подзапросы и табличные функции имели псевдонимы для корректной квалификации имён. - -## kafka_disable_num_consumers_limit {#kafka_disable_num_consumers_limit} - - - -Отключает ограничение на `kafka_num_consumers`, которое зависит от количества доступных ядер CPU. - -## kafka_max_wait_ms {#kafka_max_wait_ms} - - - -Время ожидания в миллисекундах при чтении сообщений из [Kafka](/engines/table-engines/integrations/kafka) перед повторной попыткой. - -Возможные значения: - -- Положительное целое число. -- 0 — бесконечный таймаут. - -См. также: - -- [Apache Kafka](https://kafka.apache.org/) - -## keeper_map_strict_mode {#keeper_map_strict_mode} - - - -Включает дополнительные проверки при операциях с KeeperMap. Например, вызывает исключение при попытке вставить уже существующий ключ. - -## keeper_max_retries {#keeper_max_retries} - - - - - -Максимальное количество повторных попыток для общих операций Keeper - -## keeper_retry_initial_backoff_ms {#keeper_retry_initial_backoff_ms} - - - - - -Начальная задержка перед повторной попыткой для общих операций Keeper - -## keeper_retry_max_backoff_ms {#keeper_retry_max_backoff_ms} - - - - - -Максимальный интервал ожидания (backoff) для общих операций Keeper - -## least_greatest_legacy_null_behavior {#least_greatest_legacy_null_behavior} - - - - - -При включении этого параметра функции 'least' и 'greatest' возвращают NULL, если один из их аргументов равен NULL. - -## legacy_column_name_of_tuple_literal {#legacy_column_name_of_tuple_literal} - - - - - -Выводит все имена элементов больших литералов кортежей в именах соответствующих столбцов вместо хеша. Этот параметр существует только по причинам совместимости. Имеет смысл установить значение 'true' при поэтапном обновлении кластера с версии ниже 21.7 до более высокой. - -## lightweight_delete_mode {#lightweight_delete_mode} - - - - - -Режим внутреннего запроса обновления, который выполняется как часть легковесного удаления. - -Возможные значения: - -- `alter_update` — выполнить запрос `ALTER UPDATE`, который создаёт тяжёлую мутацию. -- `lightweight_update` — выполнить легковесное обновление, если возможно, в противном случае выполнить `ALTER UPDATE`. -- `lightweight_update_force` — выполнить легковесное обновление, если возможно, в противном случае выбросить исключение. - -## lightweight_deletes_sync {#lightweight_deletes_sync} - - - - - -То же, что и [`mutations_sync`](#mutations_sync), но управляет только выполнением легковесных удалений (lightweight deletes). - -Возможные значения: - -| Value | Description | -|-------|-------------------------------------------------------------------------------------------------------------------------------------------------------| -| `0` | Мутации выполняются асинхронно. | -| `1` | Запрос ожидает завершения легковесных удалений на текущем сервере. | -| `2` | Запрос ожидает завершения легковесных удалений на всех репликах (если они существуют). | -| `3` | Запрос ожидает завершения легковесных удалений только на активных репликах. Поддерживается только для `SharedMergeTree`. Для `ReplicatedMergeTree` ведёт себя так же, как `mutations_sync = 2`.| - -**См. также** - -- [Синхронность запросов ALTER](../../sql-reference/statements/alter/index.md/#synchronicity-of-alter-queries) -- [Мутации](../../sql-reference/statements/alter/index.md/#mutations) - -## limit {#limit} - - - -Устанавливает максимальное количество строк, получаемых в результате выполнения запроса. Корректирует значение, заданное оператором [LIMIT](/sql-reference/statements/select/limit), таким образом, что лимит, указанный в запросе, не может превышать лимит, заданный этой настройкой. - -Возможные значения: - -- 0 — количество строк не ограничено. -- Положительное целое число. - -## load_balancing {#load_balancing} - - - -Определяет алгоритм выбора реплик, используемый при распределённой обработке запросов. - -ClickHouse поддерживает следующие алгоритмы выбора реплик: - -- [Случайный](#load_balancing-random) (по умолчанию) -- [Ближайшее имя хоста](#load_balancing-nearest_hostname) -- [Расстояние Левенштейна для имени хоста](#load_balancing-hostname_levenshtein_distance) -- [По порядку](#load_balancing-in_order) -- [Первая или случайная](#load_balancing-first_or_random) -- [Циклический (round-robin)](#load_balancing-round_robin) - -См. также: - -- [distributed_replica_max_ignored_errors](#distributed_replica_max_ignored_errors) - -### Случайный (по умолчанию) - -```sql -load_balancing = random -``` - -Количество ошибок отслеживается для каждой реплики. Запрос отправляется на реплику с наименьшим числом ошибок, а если таких несколько — на любую из них. -Недостатки: близость сервера не учитывается; если на репликах разные данные, вы также получите разные данные. - - -### Имя ближайшего хоста - -```sql -load_balancing = nearest_hostname -``` - -Количество ошибок подсчитывается для каждой реплики. Каждые 5 минут количество ошибок целочисленно делится на 2. Таким образом, число ошибок за последнее время вычисляется с использованием экспоненциального сглаживания. Если есть одна реплика с минимальным числом ошибок (т. е. ошибки недавно происходили на других репликах), запрос отправляется на неё. Если есть несколько реплик с одинаковым минимальным числом ошибок, запрос отправляется на реплику с именем хоста, которое наиболее похоже на имя хоста сервера в конфигурационном файле (по количеству отличающихся символов в одинаковых позициях, до минимальной длины обоих имён хостов). - -Например, example01-01-1 и example01-01-2 отличаются в одной позиции, тогда как example01-01-1 и example01-02-2 различаются в двух местах. -Этот метод может показаться примитивным, но он не требует внешних данных о сетевой топологии и не сравнивает IP-адреса, что было бы затруднительно для наших IPv6-адресов. - -Таким образом, если есть эквивалентные реплики, предпочтение отдаётся ближайшей по имени. -Также можно предположить, что при отправке запросов на один и тот же сервер, при отсутствии сбоев, распределённый запрос также будет попадать на те же серверы. Поэтому даже если на репликах размещены разные данные, запрос в большинстве случаев будет возвращать одинаковые результаты. - - -### Расстояние Левенштейна между именами хостов - -```sql -load_balancing = hostname_levenshtein_distance -``` - -Аналогична `nearest_hostname`, но сравнивает имя хоста по [расстоянию Левенштейна](https://en.wikipedia.org/wiki/Levenshtein_distance). Например: - -```text -example-clickhouse-0-0 ample-clickhouse-0-0 -1 - -example-clickhouse-0-0 example-clickhouse-1-10 -2 - -example-clickhouse-0-0 example-clickhouse-12-0 -3 -``` - - -### По порядку - -```sql -load_balancing = in_order -``` - -К репликам с одинаковым количеством ошибок обращаются в том же порядке, в котором они указаны в конфигурации. -Этот метод подходит, когда вы точно знаете, какая реплика является предпочтительной. - - -### Первый или случайный - -```sql -load_balancing = first_or_random -``` - -Этот алгоритм выбирает первую реплику в наборе или случайную, если первая недоступна. Он эффективен в топологиях с перекрёстной репликацией, но практически бесполезен в других конфигурациях. - -Алгоритм `first_or_random` решает проблему алгоритма `in_order`. При использовании `in_order`, если одна реплика выходит из строя, следующая получает двойную нагрузку, в то время как остальные реплики обрабатывают обычный объём трафика. При использовании алгоритма `first_or_random` нагрузка равномерно распределяется между оставшимися доступными репликами. - -Можно явно задать, какая реплика считается первой, с помощью настройки `load_balancing_first_offset`. Это даёт больше контроля над перераспределением нагрузки запросов между репликами. - - -### Раунд-робин - -```sql -load_balancing = round_robin -``` - -Этот алгоритм использует политику round-robin между репликами с одинаковым количеством ошибок (при этом учитываются только запросы с политикой `round_robin`). - - -## load_balancing_first_offset {#load_balancing_first_offset} - - - -Реплика, на которую предпочтительнее отправлять запрос при использовании стратегии балансировки нагрузки FIRST_OR_RANDOM. - -## load_marks_asynchronously {#load_marks_asynchronously} - - - -Асинхронная загрузка отметок MergeTree - -## local_filesystem_read_method {#local_filesystem_read_method} - - - -Метод чтения данных из локальной файловой системы. Возможные значения: read, pread, mmap, io_uring, pread_threadpool. - -Метод `io_uring` является экспериментальным и не работает для таблиц Log, TinyLog, StripeLog, File, Set и Join, а также других таблиц с файлами, поддерживающими добавление данных, при одновременных операциях чтения и записи. -Если вы читали различные статьи об `io_uring` в Интернете, не поддавайтесь впечатлению от них. Это не лучший метод чтения файлов, за исключением случаев большого количества мелких IO‑запросов, что не характерно для ClickHouse. Нет причин включать `io_uring`. - -## local_filesystem_read_prefetch {#local_filesystem_read_prefetch} - - - -Включает предварительную выборку при чтении данных из локальной файловой системы. - -## lock_acquire_timeout {#lock_acquire_timeout} - - - -Определяет, сколько секунд запрос на блокировку ожидает до того, как завершится с ошибкой. - -Таймаут блокировки используется для предотвращения взаимных блокировок при выполнении операций чтения/записи с таблицами. Когда таймаут истекает и запрос на блокировку завершается с ошибкой, сервер ClickHouse выбрасывает исключение "Locking attempt timed out! Possible deadlock avoided. Client should retry." с кодом ошибки `DEADLOCK_AVOIDED`. - -Возможные значения: - -- Положительное целое число (в секундах). -- 0 — таймаут блокировки отключен. - -## log_comment - -Задает значение для поля `log_comment` таблицы [system.query_log](../system-tables/query_log.md) и текст комментария в журнале сервера. - -Может использоваться для улучшения читаемости журналов сервера. Кроме того, позволяет выбрать запросы, относящиеся к тесту, из `system.query_log` после выполнения [clickhouse-test](../../development/tests.md). - -Возможные значения: - -* Любая строка длиной не более [max_query_size](#max_query_size). Если max_query_size превышен, сервер выбрасывает исключение. - -**Пример** - -Запрос: - -```sql -SET log_comment = 'log_comment test', log_queries = 1; -SELECT 1; -SYSTEM FLUSH LOGS; -SELECT type, query FROM system.query_log WHERE log_comment = 'log_comment test' AND event_date >= yesterday() ORDER BY event_time DESC LIMIT 2; -``` - -Результат: - -```text -┌─type────────┬─query─────┐ -│ QueryStart │ SELECT 1; │ -│ QueryFinish │ SELECT 1; │ -└─────────────┴───────────┘ -``` - - -## log_formatted_queries {#log_formatted_queries} - - - -Включает запись форматированных запросов в системную таблицу [system.query_log](../../operations/system-tables/query_log.md) (заполняет столбец `formatted_query` в [system.query_log](../../operations/system-tables/query_log.md)). - -Возможные значения: - -- 0 — Форматированные запросы не записываются в системную таблицу. -- 1 — Форматированные запросы записываются в системную таблицу. - -## log_processors_profiles {#log_processors_profiles} - - - - - -Записывает время, которое процессор затратил на выполнение или ожидание данных, в таблицу `system.processors_profile_log`. - -См. также: - -- [`system.processors_profile_log`](../../operations/system-tables/processors_profile_log.md) -- [`EXPLAIN PIPELINE`](../../sql-reference/statements/explain.md/#explain-pipeline) - -## log_profile_events {#log_profile_events} - - - -Записывать статистику производительности запросов в журналы `query_log`, `query_thread_log` и `query_views_log`. - -## log_queries - - - -Настройка логирования запросов. - -Запросы, отправленные в ClickHouse при включённой этой настройке, записываются в лог в соответствии с правилами параметра конфигурации сервера [query_log](../../operations/server-configuration-parameters/settings.md/#query_log). - -Пример: - -```text -log_queries=1 -``` - - -## log_queries_cut_to_length {#log_queries_cut_to_length} - - - -Если длина запроса превышает заданный порог (в байтах), запрос усекается при записи в журнал запросов. Также ограничивается длина выводимого текста запроса в обычном текстовом логе. - -## log_queries_min_query_duration_ms {#log_queries_min_query_duration_ms} - - - -Если настройка имеет ненулевое значение, запросы, которые выполняются быстрее указанного порога, не будут записываться в лог (можно рассматривать это как аналог `long_query_time` для [MySQL Slow Query Log](https://dev.mysql.com/doc/refman/5.7/slow-query-log.html)). Это означает, что вы не найдёте такие запросы в следующих таблицах: - -- `system.query_log` -- `system.query_thread_log` - -Только запросы со следующими типами попадут в лог: - -- `QUERY_FINISH` -- `EXCEPTION_WHILE_PROCESSING` - -- Тип: миллисекунды -- Значение по умолчанию: 0 (любой запрос) - -## log_queries_min_type - - - -Минимальный тип записей в `query_log`. - -Возможные значения: - -* `QUERY_START` (`=1`) -* `QUERY_FINISH` (`=2`) -* `EXCEPTION_BEFORE_START` (`=3`) -* `EXCEPTION_WHILE_PROCESSING` (`=4`) - -Может использоваться для ограничения того, какие записи будут попадать в `query_log`. Например, если вас интересуют только ошибки, можно использовать `EXCEPTION_WHILE_PROCESSING`: - -```text -log_queries_min_type='EXCEPTION_WHILE_PROCESSING' -``` - - -## log_queries_probability {#log_queries_probability} - - - -Позволяет записывать в системные таблицы [query_log](../../operations/system-tables/query_log.md), [query_thread_log](../../operations/system-tables/query_thread_log.md) и [query_views_log](../../operations/system-tables/query_views_log.md) только часть запросов, выбранных случайным образом с указанной вероятностью. Это помогает снизить нагрузку при большом количестве запросов в секунду. - -Возможные значения: - -- 0 — Запросы не записываются в системные таблицы. -- Положительное число с плавающей запятой в диапазоне [0..1]. Например, если значение настройки равно `0.5`, примерно половина запросов записывается в системные таблицы. -- 1 — Все запросы записываются в системные таблицы. - -## log_query_settings {#log_query_settings} - - - -Записывает параметры запроса в `query_log` и лог спанов OpenTelemetry. - -## log_query_threads - - - -Настройка логирования потоков запросов. - -Потоки запросов записываются в таблицу [system.query_thread_log](../../operations/system-tables/query_thread_log.md). Этот параметр действует только, если [log_queries](#log_queries) имеет значение true. Потоки запросов, выполняемых ClickHouse при такой настройке, записываются в лог в соответствии с правилами серверного параметра конфигурации [query_thread_log](/operations/server-configuration-parameters/settings#query_thread_log). - -Возможные значения: - -* 0 — Отключено. -* 1 — Включено. - -**Пример** - -```text -log_query_threads=1 -``` - - -## log_query_views - - - -Настройка логирования представлений запросов. - -Когда запрос, выполняемый ClickHouse при включённой этой настройке, имеет связанные представления (материализованные или live-представления), они записываются в журнал, задаваемый параметром конфигурации сервера [query_views_log](/operations/server-configuration-parameters/settings#query_views_log). - -Пример: - -```text -log_query_views=1 -``` - - -## low_cardinality_allow_in_native_format {#low_cardinality_allow_in_native_format} - - - -Разрешает или запрещает использование типа данных [LowCardinality](../../sql-reference/data-types/lowcardinality.md) с форматом [Native](/interfaces/formats/Native). - -Если использование `LowCardinality` ограничено, сервер ClickHouse преобразует столбцы типа `LowCardinality` в обычные для запросов `SELECT` и преобразует обычные столбцы в столбцы типа `LowCardinality` для запросов `INSERT`. - -Эта настройка требуется в основном для сторонних клиентов, которые не поддерживают тип данных `LowCardinality`. - -Возможные значения: - -- 1 — использование `LowCardinality` не ограничено. -- 0 — использование `LowCardinality` ограничено. - -## low_cardinality_max_dictionary_size {#low_cardinality_max_dictionary_size} - - - -Устанавливает максимальный размер (в строках) общего глобального словаря для типа данных [LowCardinality](../../sql-reference/data-types/lowcardinality.md), который может быть записан в файловую систему хранилища. Этот параметр предотвращает проблемы с ОЗУ в случае неограниченного роста словаря. Все данные, которые не удаётся закодировать из‑за ограничения на максимальный размер словаря, ClickHouse записывает обычным способом. - -Возможные значения: - -- Любое положительное целое число. - -## low_cardinality_use_single_dictionary_for_part {#low_cardinality_use_single_dictionary_for_part} - - - -Включает или отключает использование одного словаря для части данных. - -По умолчанию сервер ClickHouse отслеживает размеры словарей, и если словарь переполняется, сервер начинает записывать следующий. Чтобы запретить создание нескольких словарей, установите `low_cardinality_use_single_dictionary_for_part = 1`. - -Возможные значения: - -- 1 — Создание нескольких словарей для части данных запрещено. -- 0 — Создание нескольких словарей для части данных не запрещено. - -## low_priority_query_wait_time_ms {#low_priority_query_wait_time_ms} - - - - - - - -Когда используется механизм приоритизации запросов (см. настройку `priority`), низкоприоритетные запросы ожидают завершения запросов с более высоким приоритетом. Этот параметр определяет время ожидания. - -## make_distributed_plan {#make_distributed_plan} - - - - - - - -Создаёт распределённый план выполнения запроса. - -## materialize_skip_indexes_on_insert {#materialize_skip_indexes_on_insert} - - - - - -Определяет, создаются и сохраняются ли пропускающие индексы при выполнении запросов INSERT. Если параметр отключен, пропускающие индексы будут создаваться и сохраняться только [во время слияний](merge-tree-settings.md/#materialize_skip_indexes_on_merge) или при явном вызове [MATERIALIZE INDEX](/sql-reference/statements/alter/skipping-index.md/#materialize-index). - -См. также [exclude_materialize_skip_indexes_on_insert](#exclude_materialize_skip_indexes_on_insert). - -## materialize_statistics_on_insert {#materialize_statistics_on_insert} - - - - - -Если включено, операции INSERT вычисляют и материализуют статистику. Если отключено, статистика будет вычисляться и сохраняться во время слияний или по явной команде MATERIALIZE STATISTICS. - -## materialize_ttl_after_modify {#materialize_ttl_after_modify} - - - -Применять TTL к старым данным после выполнения запроса ALTER MODIFY TTL - -## materialized_views_ignore_errors {#materialized_views_ignore_errors} - - - -Позволяет игнорировать ошибки в MATERIALIZED VIEW и передавать исходный блок в таблицу независимо от материализованных представлений - -## materialized_views_squash_parallel_inserts {#materialized_views_squash_parallel_inserts} - - - - - -Объединяет вставки из одного запроса INSERT в таблицу назначения материализованного представления, выполняемые параллельно, чтобы уменьшить количество создаваемых частей. -Если установлено в значение `false` и включена настройка `parallel_view_processing`, запрос INSERT будет создавать отдельную часть в таблице назначения для каждого `max_insert_thread`. - -## max_analyze_depth {#max_analyze_depth} - - - -Максимальное количество операций анализа, выполняемых интерпретатором. - -## max_ast_depth {#max_ast_depth} - - - -Максимальная глубина вложенности синтаксического дерева запроса. При превышении этого значения выбрасывается исключение. - -:::note -В данный момент это ограничение не проверяется во время разбора (парсинга), а только после разбора запроса. -Это означает, что слишком глубокое синтаксическое дерево может быть создано при разборе, -но запрос завершится с ошибкой. -::: - -## max_ast_elements {#max_ast_elements} - - - -Максимальное количество элементов в синтаксическом дереве запроса. При превышении выбрасывается исключение. - -:::note -На данный момент это не проверяется в процессе разбора, а только после него. -Это означает, что в процессе разбора может быть построено слишком глубокое синтаксическое дерево, -но выполнение запроса завершится ошибкой. -::: - -## max_autoincrement_series {#max_autoincrement_series} - - - - - -Ограничение на количество последовательностей, создаваемых функцией `generateSerialID`. - -Поскольку каждая последовательность представляет собой узел в Keeper, рекомендуется иметь не более пары миллионов таких узлов. - -## max_backup_bandwidth {#max_backup_bandwidth} - - - -Максимальная скорость чтения данных для конкретной резервной копии на сервере, в байтах в секунду. Значение 0 означает отсутствие ограничений. - -## max_block_size {#max_block_size} - - - -В ClickHouse данные обрабатываются блоками, которые представляют собой наборы частей столбцов. Внутренние циклы обработки для одного блока эффективны, но при обработке каждого блока возникают заметные накладные расходы. - -Параметр `max_block_size` указывает рекомендуемое максимальное количество строк, включаемых в один блок при загрузке данных из таблиц. Блоки размера `max_block_size` загружаются из таблицы не всегда: если ClickHouse считает, что нужно извлечь меньше данных, обрабатывается блок меньшего размера. - -Размер блока не должен быть слишком маленьким, чтобы избежать заметных накладных расходов при обработке каждого блока. Он также не должен быть слишком большим, чтобы запросы с оператором LIMIT выполнялись быстро уже после обработки первого блока. При установке `max_block_size` следует стремиться к тому, чтобы не расходовать слишком много памяти при извлечении большого числа столбцов в нескольких потоках и при этом сохранять хотя бы некоторую локальность кэша. - -## max_bytes_before_external_group_by {#max_bytes_before_external_group_by} - - - -Значение по умолчанию в Cloud: половина объёма памяти на реплику. - -Включает или отключает выполнение `GROUP BY` во внешней памяти. -(См. [GROUP BY во внешней памяти](/sql-reference/statements/select/group-by#group-by-in-external-memory)) - -Возможные значения: - -- Максимальный объём ОЗУ (в байтах), который может быть использован одной операцией [GROUP BY](/sql-reference/statements/select/group-by). -- `0` — `GROUP BY` во внешней памяти отключён. - -:::note -Если использование памяти при операциях `GROUP BY` превышает этот порог в байтах, -активируется режим «внешней агрегации» (выгрузка данных на диск). - -Рекомендуемое значение — половина доступной системной памяти. -::: - -## max_bytes_before_external_sort {#max_bytes_before_external_sort} - - - -Значение по умолчанию в облаке: половина объёма памяти на реплику. - -Включает или отключает выполнение `ORDER BY` с использованием внешней памяти. См. [ORDER BY — детали реализации](../../sql-reference/statements/select/order-by.md#implementation-details). -Если использование памяти во время операции `ORDER BY` превышает этот порог в байтах, активируется режим «внешней сортировки» (сброс данных на диск). - -Возможные значения: - -- Максимальный объём ОЗУ (в байтах), который может быть использован одной операцией [ORDER BY](../../sql-reference/statements/select/order-by.md). - Рекомендуемое значение — половина доступной системной памяти. -- `0` — `ORDER BY` с использованием внешней памяти отключён. - -## max_bytes_before_remerge_sort {#max_bytes_before_remerge_sort} - - - -В случае использования ORDER BY с LIMIT, когда потребление памяти превышает заданный порог, выполняются дополнительные этапы слияния блоков перед финальным слиянием, чтобы сохранить только первые LIMIT строк. - -## max_bytes_in_distinct {#max_bytes_in_distinct} - - - -Максимальный объём состояния в памяти (в несжатых байтах), который -используется хеш-таблицей при использовании DISTINCT. - -## max_bytes_in_join {#max_bytes_in_join} - - - -Максимальный размер в байтах хеш-таблицы, используемой при объединении таблиц. - -Этот параметр применяется к операциям [SELECT ... JOIN](/sql-reference/statements/select/join) -и к [движку таблиц Join](/engines/table-engines/special/join). - -Если запрос содержит оператор JOIN, ClickHouse проверяет эту настройку для каждого промежуточного результата. - -Когда достигается лимит, ClickHouse может выполнить различные действия. Используйте -настройку [join_overflow_mode](/operations/settings/settings#join_overflow_mode), чтобы выбрать действие. - -Возможные значения: - -- Положительное целое число. -- 0 — контроль памяти отключен. - -## max_bytes_in_set {#max_bytes_in_set} - - - -Максимальное количество байт (несжатых данных), используемых множеством в операторе IN, -сформированным подзапросом. - -## max_bytes_ratio_before_external_group_by {#max_bytes_ratio_before_external_group_by} - - - - - -Доля доступной памяти, разрешённая для операций `GROUP BY`. После достижения -этого порога для агрегации используется внешняя память. - -Например, если задать `0.6`, `GROUP BY` сможет использовать 60% доступной памяти -(для сервера/пользователя/слияний) в начале выполнения, после чего начнёт -использовать внешнюю агрегацию. - -## max_bytes_ratio_before_external_sort {#max_bytes_ratio_before_external_sort} - - - - - -Доля доступной памяти, которую оператор `ORDER BY` может использовать. После достижения этого порога применяется внешняя сортировка. - -Например, если установить `0.6`, `ORDER BY` сможет использовать `60%` доступной памяти (для сервера/пользователя/слияний) в начале выполнения, после чего будет использоваться внешняя сортировка. - -Обратите внимание, что `max_bytes_before_external_sort` по‑прежнему учитывается: сброс на диск будет выполняться только если блок сортировки превышает `max_bytes_before_external_sort`. - -## max_bytes_to_read {#max_bytes_to_read} - - - -Максимальное количество байт несжатых данных, которое можно прочитать из таблицы при выполнении запроса. -Ограничение проверяется для каждого обрабатываемого фрагмента данных, применяется только к -самому глубокому табличному выражению и при чтении с удалённого сервера проверяется только на -этом удалённом сервере. - -## max_bytes_to_read_leaf {#max_bytes_to_read_leaf} - - - -Максимальное количество байт (несжатых данных), которое может быть прочитано из локальной -таблицы на листовом узле при выполнении распределённого запроса. Хотя распределённые запросы -могут отправлять несколько подзапросов к каждому шарду (листу), этот лимит будет -проверяться только на этапе чтения на листовых узлах и будет игнорироваться на этапе -слияния результатов на корневом узле. - -Например, кластер состоит из 2 шардов, и каждый шард содержит таблицу со -100 байтами данных. Распределённый запрос, который должен прочитать все данные -из обеих таблиц с настройкой `max_bytes_to_read=150`, завершится с ошибкой, так как в сумме -будет 200 байт. Запрос с `max_bytes_to_read_leaf=150` будет выполнен успешно, поскольку -листовые узлы прочитают максимум по 100 байт. - -Ограничение проверяется для каждого обрабатываемого блока данных. - -:::note -Этот параметр работает нестабильно при `prefer_localhost_replica=1`. -::: - -## max_bytes_to_sort {#max_bytes_to_sort} - - - -Максимальное количество байт перед сортировкой. Если для операции ORDER BY требуется обработать объём несжатых данных, превышающий указанное значение, поведение будет определяться параметром `sort_overflow_mode`, который по умолчанию имеет значение `throw`. - -## max_bytes_to_transfer {#max_bytes_to_transfer} - - - -Максимальное количество байт (несжатых данных), которое может быть передано на удалённый -сервер или сохранено во временной таблице при выполнении оператора GLOBAL IN/JOIN. - -## max_columns_to_read {#max_columns_to_read} - - - -Максимальное количество столбцов, которое можно прочитать из таблицы в одном запросе. -Если запросу требуется прочитать больше столбцов, чем указано, будет выброшено -исключение. - -:::tip -Этот параметр полезен для предотвращения чрезмерно сложных запросов. -::: - -Значение `0` означает отсутствие ограничений. - -## max_compress_block_size {#max_compress_block_size} - - - -Максимальный размер блоков несжатых данных перед сжатием при записи в таблицу. По умолчанию — 1 048 576 (1 MiB). Указание меньшего размера блока, как правило, приводит к незначительному снижению коэффициента сжатия, небольшому увеличению скорости сжатия и распаковки за счёт локальности кэша, а также к уменьшению потребления памяти. - -:::note -Это параметр для опытных пользователей, и вам не следует изменять его, если вы только начинаете работать с ClickHouse. -::: - -Не путайте блоки для сжатия (фрагмент памяти, состоящий из байтов) с блоками для обработки запросов (набор строк из таблицы). - -## max_concurrent_queries_for_all_users - - - -Генерирует исключение, если значение этой настройки меньше либо равно текущему количеству одновременно обрабатываемых запросов. - -Пример: `max_concurrent_queries_for_all_users` можно установить равным 99 для всех пользователей, а администратор базы данных может установить его равным 100 для себя, чтобы запускать запросы для расследования даже при перегрузке сервера. - -Изменение настройки для одного запроса или пользователя не влияет на другие запросы. - -Возможные значения: - -* Положительное целое число. -* 0 — без ограничения. - -**Пример** - -```xml -99 -``` - -**См. также** - -* [max_concurrent_queries](/operations/server-configuration-parameters/settings#max_concurrent_queries) - - -## max_concurrent_queries_for_user - - - -Максимальное количество одновременно обрабатываемых запросов для одного пользователя. - -Возможные значения: - -* Положительное целое число. -* 0 — без ограничений. - -**Пример** - -```xml -5 -``` - - -## max_distributed_connections {#max_distributed_connections} - - - -Максимальное количество одновременных соединений с удалёнными серверами для распределённой обработки одного запроса к одной таблице движка Distributed. Рекомендуем задавать значение не меньше числа серверов в кластере. - -Следующие параметры используются только при создании таблиц движка Distributed (и при запуске сервера), поэтому нет смысла изменять их в процессе работы. - -## max_distributed_depth {#max_distributed_depth} - - - -Ограничивает максимальную глубину рекурсивных запросов для таблиц [Distributed](../../engines/table-engines/special/distributed.md). - -При превышении этого значения сервер генерирует исключение. - -Возможные значения: - -- Положительное целое число. -- 0 — Неограниченная глубина. - -## max_download_buffer_size {#max_download_buffer_size} - - - -Максимальный размер буфера для параллельной загрузки (например, для URL-движка) для каждого потока. - -## max_download_threads {#max_download_threads} - - - -Максимальное количество потоков для скачивания данных (например, для URL-движка). - -## max_estimated_execution_time {#max_estimated_execution_time} - - - - - -Максимальное оценочное время выполнения запроса в секундах. Проверяется для каждого блока данных, -когда истекает [`timeout_before_checking_execution_speed`](/operations/settings/settings#timeout_before_checking_execution_speed). - -## max_execution_speed {#max_execution_speed} - - - -Максимальное количество строк, обрабатываемых в секунду. Проверка выполняется для каждого блока данных после истечения -[`timeout_before_checking_execution_speed`](/operations/settings/settings#timeout_before_checking_execution_speed). -Если скорость выполнения слишком высока, она будет снижена. - -## max_execution_speed_bytes {#max_execution_speed_bytes} - - - -Максимальное количество байт, обрабатываемых в секунду. Проверяется на каждом блоке данных, когда -[`timeout_before_checking_execution_speed`](/operations/settings/settings#timeout_before_checking_execution_speed) -истекает. Если скорость выполнения слишком высока, она будет ограничена. - -## max_execution_time {#max_execution_time} - - - -Максимальное время выполнения запроса в секундах. - -Параметр `max_execution_time` может быть немного сложен для понимания. -Он работает на основе интерполяции относительно текущей скорости выполнения запроса -(это поведение контролируется настройкой [`timeout_before_checking_execution_speed`](/operations/settings/settings#timeout_before_checking_execution_speed)). - -ClickHouse прерывает запрос, если прогнозируемое время выполнения превышает -указанное значение `max_execution_time`. По умолчанию параметр `timeout_before_checking_execution_speed` -равен 10 секундам. Это означает, что после 10 секунд выполнения запроса ClickHouse -начинает оценивать общее время выполнения. Если, например, `max_execution_time` -установлен на 3600 секунд (1 час), ClickHouse завершит запрос, если оценочное -время превысит этот лимит в 3600 секунд. Если установить `timeout_before_checking_execution_speed` -в 0, ClickHouse будет использовать время по системным часам как основу для `max_execution_time`. - -Если время выполнения запроса превышает указанное количество секунд, поведение будет -определяться значением параметра `timeout_overflow_mode`, который по умолчанию установлен в `throw`. - -:::note -Тайм-аут проверяется, и запрос может быть остановлен только в специально отведённых местах во время обработки данных. -В настоящее время он не может быть остановлен во время слияния состояний агрегации или во время анализа запроса, -и фактическое время выполнения будет больше значения этой настройки. -::: - -## max_execution_time_leaf - - - -Семантически аналогичен [`max_execution_time`](#max_execution_time), но -применяется только к листовым узлам для распределённых или удалённых запросов. - -Например, если мы хотим ограничить время выполнения на листовом узле до `10s`, но -не ограничивать время на начальном узле, вместо использования `max_execution_time` в -настройках вложенного подзапроса: - -```sql -SELECT count() -FROM cluster(cluster, view(SELECT * FROM t SETTINGS max_execution_time = 10)); -``` - -Мы можем использовать `max_execution_time_leaf` как настройку запроса: - -```sql -SELECT count() -FROM cluster(cluster, view(SELECT * FROM t)) SETTINGS max_execution_time_leaf = 10; -``` - - -## max_expanded_ast_elements {#max_expanded_ast_elements} - - - -Максимальный размер синтаксического дерева запроса в узлах после раскрытия псевдонимов и звёздочки. - -## max_fetch_partition_retries_count {#max_fetch_partition_retries_count} - - - -Число повторных попыток при получении раздела с другого хоста. - -## max_final_threads {#max_final_threads} - - - -Устанавливает максимальное количество параллельных потоков для фазы чтения данных запроса `SELECT` с модификатором [FINAL](/sql-reference/statements/select/from#final-modifier). - -Возможные значения: - -- Положительное целое число. -- 0 или 1 — отключено. Запросы `SELECT` выполняются в одном потоке. - -## max_http_get_redirects {#max_http_get_redirects} - - - -Максимальное допустимое число перенаправлений (hops) для HTTP GET. Обеспечивает дополнительные меры безопасности, не позволяя вредоносному серверу перенаправлять ваши запросы на непредвиденные сервисы.\n\nТакая ситуация возможна, когда внешний сервер перенаправляет на другой адрес, но этот адрес выглядит как внутренний для инфраструктуры компании. В этом случае, отправляя HTTP-запрос на внутренний сервер, вы можете обратиться к внутреннему API из внутренней сети, обходя аутентификацию, или даже выполнять запросы к другим сервисам, таким как Redis или Memcached. Если у вас нет внутренней инфраструктуры (включая что-либо, запущенное на вашем localhost), или вы доверяете серверу, перенаправления можно безопасно разрешить. Имейте в виду, что если URL использует HTTP вместо HTTPS, вам придется доверять не только удаленному серверу, но и вашему провайдеру (ISP), а также всем сетям по пути следования трафика. - -## max_hyperscan_regexp_length - - - -Определяет максимальную длину каждого регулярного выражения в [функциях многократного сопоставления hyperscan](/sql-reference/functions/string-search-functions#multiMatchAny). - -Возможные значения: - -* Положительное целое число. -* 0 — длина не ограничена. - -**Пример** - -Запрос: - -```sql -SELECT multiMatchAny('abcd', ['ab','bcd','c','d']) SETTINGS max_hyperscan_regexp_length = 3; -``` - -Результат: - -```text -┌─multiMatchAny('abcd', ['ab', 'bcd', 'c', 'd'])─┐ -│ 1 │ -└────────────────────────────────────────────────┘ -``` - -Запрос: - -```sql -SELECT multiMatchAny('abcd', ['ab','bcd','c','d']) SETTINGS max_hyperscan_regexp_length = 2; -``` - -Результат: - -```text -Исключение: Длина регулярного выражения слишком велика. -``` - -**См. также** - -* [max_hyperscan_regexp_total_length](#max_hyperscan_regexp_total_length) - - -## max_hyperscan_regexp_total_length - - - -Устанавливает максимальную суммарную длину всех регулярных выражений в каждой [функции Hyperscan множественного сопоставления](/sql-reference/functions/string-search-functions#multiMatchAny). - -Возможные значения: - -* Положительное целое число. -* 0 — длина не ограничена. - -**Пример** - -Запрос: - -```sql -SELECT multiMatchAny('abcd', ['a','b','c','d']) SETTINGS max_hyperscan_regexp_total_length = 5; -``` - -Результат: - -```text -┌─multiMatchAny('abcd', ['a', 'b', 'c', 'd'])─┐ -│ 1 │ -└─────────────────────────────────────────────┘ -``` - -Запрос: - -```sql -SELECT multiMatchAny('abcd', ['ab','bc','c','d']) SETTINGS max_hyperscan_regexp_total_length = 5; -``` - -Результат: - -```text -Исключение: Общая длина регулярных выражений слишком велика. -``` - -**См. также** - -* [max_hyperscan_regexp_length](#max_hyperscan_regexp_length) - - -## max_insert_block_size {#max_insert_block_size} - - - -Размер блоков (по числу строк), которые формируются для вставки в таблицу. -Этот параметр применяется только в случаях, когда блоки формирует сервер. -Например, при выполнении INSERT через HTTP-интерфейс сервер разбирает формат данных и формирует блоки указанного размера. -Но при использовании clickhouse-client клиент разбирает данные сам, и настройка `max_insert_block_size` на сервере не влияет на размер вставляемых блоков. -Настройка также не применяется при использовании INSERT SELECT, поскольку данные вставляются теми же блоками, которые формируются после SELECT. - -Значение по умолчанию немного больше, чем `max_block_size`. Причина в том, что некоторые движки таблиц (`*MergeTree`) формируют часть данных (data part) на диске для каждого вставленного блока, и эта часть является достаточно крупной сущностью. Аналогично, таблицы `*MergeTree` сортируют данные при вставке, и достаточно большой размер блока позволяет отсортировать больше данных в оперативной памяти. - -## max_insert_delayed_streams_for_parallel_write {#max_insert_delayed_streams_for_parallel_write} - - - -Максимальное количество потоков (столбцов), для которых откладывается финальная запись части. По умолчанию — автоматически (100, если используемое хранилище поддерживает параллельную запись, например S3, и отключено в противном случае). - -## max_insert_threads {#max_insert_threads} - - - -Максимальное количество потоков для выполнения запроса `INSERT SELECT`. - -Возможные значения: - -- 0 (или 1) — выполнение `INSERT SELECT` без параллелизма. -- Положительное целое число, больше 1. - -Значение по умолчанию в ClickHouse Cloud: - -- `1` для узлов с 8 GiB памяти -- `2` для узлов с 16 GiB памяти -- `4` для более крупных узлов - -Параллельный `INSERT SELECT` имеет эффект только в том случае, если часть `SELECT` выполняется параллельно, см. настройку [`max_threads`](#max_threads). -Более высокие значения приводят к большему потреблению памяти. - -## max_joined_block_size_bytes {#max_joined_block_size_bytes} - - - - - -Максимальный размер блока в байтах для результата операции JOIN (если алгоритм объединения поддерживает его). Значение 0 означает отсутствие ограничения. - -## max_joined_block_size_rows {#max_joined_block_size_rows} - - - -Максимальный размер блока для результата JOIN (если алгоритм JOIN поддерживает это). 0 означает отсутствие ограничений. - -## max_limit_for_vector_search_queries {#max_limit_for_vector_search_queries} - - - - - -Запросы SELECT с LIMIT, превышающим значение этой настройки, не могут использовать индексы векторного сходства. Это помогает предотвратить переполнение памяти в индексах векторного сходства. - -## max_local_read_bandwidth {#max_local_read_bandwidth} - - - -Максимальная скорость локального чтения в байтах в секунду. - -## max_local_write_bandwidth {#max_local_write_bandwidth} - - - -Максимальная скорость локальной записи в байтах в секунду. - -## max_memory_usage {#max_memory_usage} - - - -Значение по умолчанию в Cloud: зависит от объёма ОЗУ на реплике. - -Максимальное количество ОЗУ, используемое для выполнения запроса на одном сервере. -Значение `0` означает отсутствие ограничения. - -Этот параметр не учитывает объём доступной памяти или общий объём памяти -на машине. Ограничение применяется к одному запросу на одном сервере. - -Вы можете использовать `SHOW PROCESSLIST`, чтобы увидеть текущее использование памяти для каждого запроса. -Пиковое потребление памяти отслеживается для каждого запроса и записывается в лог. - -Использование памяти отслеживается не полностью для состояний следующих агрегатных функций -с аргументами типов `String` и `Array`: - -- `min` -- `max` -- `any` -- `anyLast` -- `argMin` -- `argMax` - -Потребление памяти также ограничивается параметрами [`max_memory_usage_for_user`](/operations/settings/settings#max_memory_usage_for_user) -и [`max_server_memory_usage`](/operations/server-configuration-parameters/settings#max_server_memory_usage). - -## max_memory_usage_for_user - - - -Максимальный объем оперативной памяти, используемой для выполнения запросов пользователя на одном сервере. Ноль означает отсутствие ограничений. - -По умолчанию объем не ограничен (`max_memory_usage_for_user = 0`). - -Также см. описание [`max_memory_usage`](/operations/settings/settings#max_memory_usage). - -Например, если вы хотите установить `max_memory_usage_for_user` в 1000 байт для пользователя с именем `clickhouse_read`, вы можете использовать следующий оператор - -```sql -ALTER USER clickhouse_read SETTINGS max_memory_usage_for_user = 1000; -``` - -Вы можете убедиться, что всё работает корректно, выйдя из клиента, снова войдя в него, а затем вызвав функцию `getSetting`: - -```sql -SELECT getSetting('max_memory_usage_for_user'); -``` - - -## max_network_bandwidth {#max_network_bandwidth} - - - -Ограничивает скорость обмена данными по сети в байтах в секунду. Этот параметр применяется ко всем запросам. - -Возможные значения: - -- Положительное целое число. -- 0 — ограничение пропускной способности отключено. - -## max_network_bandwidth_for_all_users {#max_network_bandwidth_for_all_users} - - - -Ограничивает скорость передачи данных по сети в байтах в секунду. Этот параметр применяется ко всем одновременно выполняемым запросам на сервере. - -Возможные значения: - -- Положительное целое число. -- 0 — управление скоростью передачи данных отключено. - -## max_network_bandwidth_for_user {#max_network_bandwidth_for_user} - - - -Ограничивает скорость обмена данными по сети в байтах в секунду. Этот параметр применяется ко всем одновременно выполняющимся запросам данного пользователя. - -Возможные значения: - -- Положительное целое число. -- 0 — контроль скорости передачи данных отключен. - -## max_network_bytes {#max_network_bytes} - - - -Ограничивает объем данных (в байтах), принимаемых или передаваемых по сети при выполнении запроса. Этот параметр применяется к каждому отдельному запросу. - -Возможные значения: - -- Положительное целое число. -- 0 — ограничение на объем данных отключено. - -## max_number_of_partitions_for_independent_aggregation {#max_number_of_partitions_for_independent_aggregation} - - - -Максимальное количество партиций таблицы, к которым применяется оптимизация - -## max_os_cpu_wait_time_ratio_to_throw {#max_os_cpu_wait_time_ratio_to_throw} - - - - - -Максимальное соотношение между временем ожидания CPU в ОС (метрика OSCPUWaitMicroseconds) и временем занятости CPU (метрика OSCPUVirtualTimeMicroseconds), при превышении которого запросы могут отклоняться. Для вычисления вероятности используется линейная интерполяция между минимальным и максимальным значениями этого соотношения; при максимальном значении вероятность равна 1. - -## max_parallel_replicas {#max_parallel_replicas} - - - - - -Максимальное количество реплик для каждого шарда при выполнении запроса. - -Возможные значения: - -- Положительное целое число. - -**Дополнительная информация** - -Этот параметр может давать разные результаты в зависимости от используемых настроек. - -:::note -Эта настройка приведет к некорректным результатам, если задействованы `JOIN` или подзапросы и не все таблицы удовлетворяют определенным требованиям. Дополнительные сведения см. в разделе [Distributed Subqueries and max_parallel_replicas](/operations/settings/settings#max_parallel_replicas). -::: - -### Параллельная обработка с использованием ключа выборки `SAMPLE` - -Запрос может выполняться быстрее, если его выполнять параллельно на нескольких серверах. Однако производительность запроса может ухудшиться в следующих случаях: - -- Положение ключа выборки в ключе партиционирования не позволяет эффективно выполнять сканирование диапазонов. -- Добавление ключа выборки в таблицу делает фильтрацию по другим столбцам менее эффективной. -- Ключ выборки представляет собой выражение, вычисление которого требует значительных ресурсов. -- Распределение задержек в кластере имеет «длинный хвост», поэтому опрос большего числа серверов увеличивает суммарную задержку выполнения запроса. - -### Параллельная обработка с использованием [parallel_replicas_custom_key](#parallel_replicas_custom_key) - -Эта настройка полезна для любой реплицируемой таблицы. - -## max_parser_backtracks {#max_parser_backtracks} - - - - - -Максимальное число возвратов парсера (сколько раз он пробует разные варианты при рекурсивном нисходящем разборе). - -## max_parser_depth {#max_parser_depth} - - - -Ограничивает максимальную глубину рекурсии в рекурсивном нисходящем парсере. Позволяет управлять размером стека. - -Возможные значения: - -- Положительное целое число. -- 0 — глубина рекурсии не ограничена. - -## max_parsing_threads {#max_parsing_threads} - - - - - -Максимальное количество потоков для парсинга данных во входных форматах, которые поддерживают параллельный парсинг. По умолчанию значение определяется автоматически. - -## max_partition_size_to_drop {#max_partition_size_to_drop} - - - -Ограничение на размер партиций, которые можно удалять во время выполнения запроса. Значение `0` означает, что вы можете удалять партиции без каких-либо ограничений. - -Значение по умолчанию в облаке: 1 ТБ. - -:::note -Эта настройка запроса переопределяет эквивалентную серверную настройку, см. [max_partition_size_to_drop](/operations/server-configuration-parameters/settings#max_partition_size_to_drop) -::: - -## max_partitions_per_insert_block {#max_partitions_per_insert_block} - - - - - -Ограничивает максимальное количество партиций в одном вставляемом блоке; -если блок содержит слишком много партиций, будет выброшено исключение. - -- Положительное целое число. -- `0` — неограниченное количество партиций. - -**Подробнее** - -При вставке данных ClickHouse вычисляет количество партиций во -вставляемом блоке. Если количество партиций превышает -`max_partitions_per_insert_block`, ClickHouse либо записывает предупреждение в журнал, либо выбрасывает -исключение в зависимости от значения `throw_on_max_partitions_per_insert_block`. Текст исключения: - -> "Too many partitions for a single INSERT block (`partitions_count` partitions, limit is " + toString(max_partitions) + "). - The limit is controlled by the 'max_partitions_per_insert_block' setting. - A large number of partitions is a common misconception. It will lead to severe - negative performance impact, including slow server startup, slow INSERT queries - and slow SELECT queries. Recommended total number of partitions for a table is - under 1000..10000. Please note, that partitioning is not intended to speed up - SELECT queries (ORDER BY key is sufficient to make range queries fast). - Partitions are intended for data manipulation (DROP PARTITION, etc)." - -:::note -Этот параметр является защитным порогом, поскольку использование большого количества партиций — распространённое заблуждение. -::: - -## max_partitions_to_read {#max_partitions_to_read} - - - -Ограничивает максимальное число партиций, к которым можно получить доступ в одном запросе. - -Значение настройки, заданное при создании таблицы, может быть переопределено настройкой на уровне запроса. - -Возможные значения: - -- Положительное целое число -- `-1` — без ограничений (по умолчанию) - -:::note -Вы также можете указать настройку MergeTree [`max_partitions_to_read`](/operations/settings/settings#max_partitions_to_read) в настройках таблицы. -::: - -## max_parts_to_move {#max_parts_to_move} - - - - - -Ограничивает количество частей, которые можно переместить в одном запросе. Значение 0 — без ограничений. - -## max_projection_rows_to_use_projection_index {#max_projection_rows_to_use_projection_index} - - - - - -Если количество строк, которое нужно прочитать из индекса проекции, меньше или равно этому пороговому значению, ClickHouse попытается применить индекс проекции во время выполнения запроса. - -## max_query_size {#max_query_size} - - - -Максимальное число байт в строке запроса, которую анализирует SQL-парсер. -Данные в клаузе VALUES операторов INSERT обрабатываются отдельным потоковым парсером (который использует O(1) ОЗУ) и не подпадают под это ограничение. - -:::note -`max_query_size` нельзя задать внутри SQL-запроса (например, `SELECT now() SETTINGS max_query_size=10000`), потому что ClickHouse необходимо выделить буфер для разбора запроса, и размер этого буфера определяется настройкой `max_query_size`, которая должна быть настроена до выполнения запроса. -::: - -## max_read_buffer_size {#max_read_buffer_size} - - - -Максимальный размер буфера при чтении из файловой системы. - -## max_read_buffer_size_local_fs {#max_read_buffer_size_local_fs} - - - -Максимальный размер буфера для чтения из локальной файловой системы. Если установлено значение `0`, будет использоваться `max_read_buffer_size`. - -## max_read_buffer_size_remote_fs {#max_read_buffer_size_remote_fs} - - - -Максимальный размер буфера для чтения из удалённой файловой системы. Если установлено значение 0, будет использоваться `max_read_buffer_size`. - -## max_recursive_cte_evaluation_depth {#max_recursive_cte_evaluation_depth} - - - - - -Максимальная глубина вычисления рекурсивных CTE - -## max_remote_read_network_bandwidth {#max_remote_read_network_bandwidth} - - - -Максимальная скорость сетевого обмена данными при чтении, в байтах в секунду. - -## max_remote_write_network_bandwidth {#max_remote_write_network_bandwidth} - - - -Максимальная скорость обмена данными по сети в байтах в секунду при записи. - -## max_replica_delay_for_distributed_queries {#max_replica_delay_for_distributed_queries} - - - -Исключает отстающие реплики из выполнения распределённых запросов. См. [Репликация](../../engines/table-engines/mergetree-family/replication.md). - -Задаёт время в секундах. Если отставание реплики больше либо равно заданному значению, эта реплика не используется. - -Возможные значения: - -- Положительное целое число. -- 0 — отставание реплик не проверяется. - -Чтобы предотвратить использование любой реплики с ненулевым отставанием, установите этот параметр в 1. - -Используется при выполнении `SELECT` из распределённой таблицы, которая ссылается на реплицируемые таблицы. - -## max_result_bytes {#max_result_bytes} - - - -Ограничивает размер результата в байтах (несжатый). Запрос будет остановлен после обработки блока данных, если порог достигнут, -но последний блок результата обрезан не будет, поэтому размер результата может быть больше порога. - -**Особенности** - -При вычислении этого порога учитывается размер результата в памяти. -Даже если размер результата небольшой, он может ссылаться на более крупные структуры данных в памяти, -представляющие словари столбцов LowCardinality и арены столбцов AggregateFunction, -поэтому порог может быть превышен, несмотря на небольшой размер результата. - -:::warning -Настройка достаточно низкоуровневая и должна использоваться с осторожностью -::: - -## max_result_rows {#max_result_rows} - - - -Значение по умолчанию в облаке: `0`. - -Ограничивает количество строк в результате. Ограничение также проверяется для подзапросов и на удалённых серверах при выполнении фрагментов распределённого запроса. -Если значение равно `0`, ограничение не применяется. - -Запрос будет остановлен после обработки блока данных при достижении порогового значения, но -последний блок результата не будет усечён, поэтому размер результата может быть -больше порога. - -## max_reverse_dictionary_lookup_cache_size_bytes {#max_reverse_dictionary_lookup_cache_size_bytes} - - - - - -Максимальный размер в байтах для кэша обратного поиска по словарю для каждого запроса, используемого функцией `dictGetKeys`. Кэш хранит сериализованные кортежи ключей для каждого значения атрибута, чтобы избежать повторного сканирования словаря в рамках одного и того же запроса. При достижении лимита элементы вытесняются по принципу LRU. Установите значение 0, чтобы отключить кэширование. - -## max_rows_in_distinct {#max_rows_in_distinct} - - - -Максимальное количество уникальных строк при использовании DISTINCT. - -## max_rows_in_join {#max_rows_in_join} - - - -Ограничивает количество строк в хеш-таблице, которая используется при соединении таблиц. - -Эта настройка применяется к операциям [SELECT ... JOIN](/sql-reference/statements/select/join) -и к движку таблиц [Join](/engines/table-engines/special/join). - -Если запрос содержит несколько соединений, ClickHouse проверяет эту настройку для каждого промежуточного результата. - -При достижении лимита ClickHouse может выполнять различные действия. Используйте настройку -[`join_overflow_mode`](/operations/settings/settings#join_overflow_mode), чтобы выбрать нужное действие. - -Возможные значения: - -- Положительное целое число. -- `0` — неограниченное количество строк. - -## max_rows_in_set {#max_rows_in_set} - - - -Максимальное количество строк в наборе значений для выражения IN, сформированном подзапросом. - -## max_rows_in_set_to_optimize_join {#max_rows_in_set_to_optimize_join} - - - - - -Максимальный размер множества, используемого для предварительной фильтрации присоединяемых таблиц по наборам строк друг друга перед выполнением соединения. - -Возможные значения: - -- 0 — отключить. -- Любое положительное целое число. - -## max_rows_to_group_by {#max_rows_to_group_by} - - - -Максимальное количество уникальных ключей, полученных при агрегации. Этот параметр позволяет ограничить потребление памяти при агрегации. - -Если при выполнении GROUP BY получается больше строк (уникальных ключей GROUP BY), чем указано в этой настройке, поведение будет определяться настройкой `group_by_overflow_mode`, которая по умолчанию имеет значение `throw`, но также может быть переключена в режим приблизительного GROUP BY. - -## max_rows_to_read {#max_rows_to_read} - - - -Максимальное количество строк, которые могут быть прочитаны из таблицы при выполнении запроса. -Ограничение проверяется для каждого обрабатываемого блока данных, применяется только к -самому вложенному табличному выражению и, при чтении с удалённого сервера, проверяется только на -удалённом сервере. - -## max_rows_to_read_leaf {#max_rows_to_read_leaf} - - - -Максимальное количество строк, которое может быть прочитано из локальной таблицы на листовом узле при -выполнении распределённого запроса. Хотя распределённые запросы могут выполнять несколько подзапросов -к каждому шарду (листу), этот лимит проверяется только на стадии чтения на -листовых узлах и игнорируется на стадии объединения результатов на корневом узле. - -Например, кластер состоит из 2 шардов, и каждый шард содержит таблицу со -100 строками. Распределённый запрос, который должен прочитать все данные из обеих -таблиц с параметром `max_rows_to_read=150`, завершится с ошибкой, поскольку в сумме будет -200 строк. Запрос с `max_rows_to_read_leaf=150` выполнится успешно, так как листовые узлы -прочитают максимум по 100 строк. - -Ограничение проверяется для каждого обрабатываемого блока данных. - -:::note -Эта настройка нестабильна при `prefer_localhost_replica=1`. -::: - -## max_rows_to_sort {#max_rows_to_sort} - - - -Максимальное число строк, участвующих в сортировке. Это позволяет ограничить потребление памяти при сортировке. -Если для операции ORDER BY требуется обработать больше записей, чем указано, -поведение будет определяться параметром `sort_overflow_mode`, который по умолчанию установлен в `throw`. - -## max_rows_to_transfer {#max_rows_to_transfer} - - - -Максимальное количество строк, которое может быть передано на удалённый сервер или сохранено во временной таблице при выполнении оператора GLOBAL IN/JOIN. - -## max_sessions_for_user - - - -Максимальное количество одновременных сеансов для одного аутентифицированного пользователя сервера ClickHouse. - -Пример: - -```xml - - - 1 - - - 2 - - - 0 - - - - - - single_session_user - - - - two_sessions_profile - - - - unlimited_sessions_profile - - -``` - -Возможные значения: - -* Положительное целое число -* `0` — неограниченное количество одновременных сеансов (по умолчанию) - - -## max_size_to_preallocate_for_aggregation {#max_size_to_preallocate_for_aggregation} - - - - - -Максимальное суммарное количество элементов, под которые разрешено предварительно выделять память во всех хеш-таблицах перед агрегацией. - -## max_size_to_preallocate_for_joins {#max_size_to_preallocate_for_joins} - - - - - -Для какого количества элементов разрешено предварительно выделять память во всех хеш-таблицах суммарно перед выполнением операций JOIN. - -## max_streams_for_merge_tree_reading {#max_streams_for_merge_tree_reading} - - - -Если значение не равно нулю, ограничивает количество потоков чтения для таблицы MergeTree. - -## max_streams_multiplier_for_merge_tables {#max_streams_multiplier_for_merge_tables} - - - -Запрашивает больше потоков при чтении из таблицы Merge. Потоки будут распределены между таблицами, входящими в таблицу Merge. Это обеспечивает более равномерное распределение работы между потоками и особенно полезно, когда эти таблицы заметно различаются по размеру. - -## max_streams_to_max_threads_ratio {#max_streams_to_max_threads_ratio} - - - -Позволяет задействовать больше источников, чем количество потоков, чтобы более равномерно распределять работу между потоками. Предполагается, что это временное решение, поскольку в будущем станет возможным сделать число источников равным числу потоков, при этом каждый источник сможет динамически выбирать доступную ему работу. - -## max_subquery_depth {#max_subquery_depth} - - - -Если запрос содержит больше вложенных подзапросов, чем указано, генерируется -исключение. - -:::tip -Это позволяет выполнять проверку корректности и защититься от того, чтобы пользователи вашего -кластера писали чрезмерно сложные запросы. -::: - -## max_table_size_to_drop {#max_table_size_to_drop} - - - -Ограничение на размер таблиц, которые можно удалять в запросе. Значение `0` означает, что можно удалять любые таблицы без ограничений. - -Значение по умолчанию в ClickHouse Cloud: 1 ТБ. - -:::note -Этот параметр запроса переопределяет одноимённый параметр сервера, см. [max_table_size_to_drop](/operations/server-configuration-parameters/settings#max_table_size_to_drop) -::: - -## max_temporary_columns {#max_temporary_columns} - - - -Максимальное количество временных столбцов, которые должны одновременно храниться в оперативной памяти -при выполнении запроса, включая константные столбцы. Если запрос генерирует в памяти больше -указанного количества временных столбцов в результате промежуточных вычислений, то выдается исключение. - -:::tip -Этот параметр полезен для предотвращения чрезмерно сложных запросов. -::: - -Значение `0` означает отсутствие ограничения. - -## max_temporary_data_on_disk_size_for_query {#max_temporary_data_on_disk_size_for_query} - - - -Максимальный объём данных во временных файлах на диске в байтах для всех -одновременно выполняемых запросов. - -Возможные значения: - -- Положительное целое число. -- `0` — без ограничений (значение по умолчанию) - -## max_temporary_data_on_disk_size_for_user {#max_temporary_data_on_disk_size_for_user} - - - -Максимальный объём данных, потребляемых временными файлами на диске, в байтах для всех одновременно выполняемых пользовательских запросов. - -Возможные значения: - -- Положительное целое число. -- `0` — без ограничений (по умолчанию) - -## max_temporary_non_const_columns {#max_temporary_non_const_columns} - - - -Аналогично `max_temporary_columns`, задаёт максимальное количество временных столбцов, -которые должны одновременно храниться в оперативной памяти при выполнении запроса, -но без учёта константных столбцов. - -:::note -Константные столбцы формируются достаточно часто при выполнении запроса, но сами по себе -практически не требуют вычислительных ресурсов. -::: - -## max_threads {#max_threads} - - - -Максимальное количество потоков обработки запроса, исключая потоки для получения данных с удалённых серверов (см. параметр `max_distributed_connections`). - -Этот параметр применяется к потокам, которые параллельно выполняют одни и те же стадии конвейера обработки запроса. -Например, при чтении из таблицы, если возможно параллельно вычислять выражения с функциями, фильтровать по WHERE и выполнять предварительную агрегацию для GROUP BY с использованием не менее чем `max_threads` потоков, то используются `max_threads` потоков. - -Для запросов, которые завершаются быстро из-за оператора LIMIT, имеет смысл задать меньшее значение `max_threads`. Например, если нужное количество записей находится в каждом блоке и `max_threads = 8`, будет прочитано 8 блоков, хотя было бы достаточно прочитать только один. - -Чем меньше значение `max_threads`, тем меньше потребление памяти. - -Значение по умолчанию в ClickHouse Cloud: `auto(3)` - -## max_threads_for_indexes {#max_threads_for_indexes} - - - -Максимальное число потоков, обрабатывающих индексы. - -## max_untracked_memory {#max_untracked_memory} - - - -Мелкие операции выделения и освобождения памяти группируются в переменной, локальной для потока, и отслеживаются или профилируются только тогда, когда объём (по абсолютному значению) становится больше указанного значения. Если это значение больше, чем `memory_profiler_step`, оно будет автоматически уменьшено до `memory_profiler_step`. - -## memory_overcommit_ratio_denominator {#memory_overcommit_ratio_denominator} - - - - - -Задает мягкий лимит памяти на глобальном уровне при достижении жесткого лимита. -Это значение используется для вычисления коэффициента оверкоммита памяти (overcommit ratio) для запроса. -Нулевое значение означает, что запрос будет пропущен. -Подробнее см. раздел [memory overcommit](memory-overcommit.md). - -## memory_overcommit_ratio_denominator_for_user {#memory_overcommit_ratio_denominator_for_user} - - - - - -Он задаёт мягкий лимит памяти, применяемый после достижения жёсткого лимита на уровне пользователя. -Это значение используется для вычисления коэффициента оверкоммита памяти для запроса. -Значение 0 означает, что запрос будет пропущен. -Подробнее об [оверкоммите памяти](memory-overcommit.md). - -## memory_profiler_sample_max_allocation_size {#memory_profiler_sample_max_allocation_size} - - - -Собирать случайные операции выделения памяти размера, меньшего либо равного указанному значению, с вероятностью, равной `memory_profiler_sample_probability`. 0 означает, что сбор отключен. Рекомендуется установить `max_untracked_memory` в 0, чтобы этот порог работал как ожидается. - -## memory_profiler_sample_min_allocation_size {#memory_profiler_sample_min_allocation_size} - - - -Собирает случайные выделения памяти размером больше или равным указанному значению с вероятностью `memory_profiler_sample_probability`. 0 означает, что функция отключена. Возможно, вам потребуется установить `max_untracked_memory` в 0, чтобы этот порог работал как ожидается. - -## memory_profiler_sample_probability {#memory_profiler_sample_probability} - - - -Собирать случайные операции выделения и освобождения памяти и записывать их в system.trace_log со значением trace_type = 'MemorySample'. Вероятность применяется к каждому alloc/free независимо от размера выделения (можно изменить с помощью `memory_profiler_sample_min_allocation_size` и `memory_profiler_sample_max_allocation_size`). Обратите внимание, что выборка выполняется только тогда, когда объем неотслеживаемой памяти превышает значение 'max_untracked_memory'. Для более детализированного профилирования можно установить 'max_untracked_memory' равным 0. - -## memory_profiler_step {#memory_profiler_step} - - - -Задает шаг профилировщика памяти. Каждый раз, когда потребление памяти запросом превышает очередное значение шага (в байтах), профилировщик памяти собирает стек вызовов выделения и записывает его в [trace_log](/operations/system-tables/trace_log). - -Возможные значения: - -- Положительное целое число байт. - -- 0 — отключить профилировщик памяти. - -## memory_tracker_fault_probability {#memory_tracker_fault_probability} - - - -Для тестирования устойчивости к исключениям (`exception safety`) — выбрасывать исключение при каждом выделении памяти с указанной вероятностью. - -## memory_usage_overcommit_max_wait_microseconds {#memory_usage_overcommit_max_wait_microseconds} - - - -Максимальное время, в течение которого поток будет ожидать освобождения памяти в случае оверкоммита памяти (memory overcommit) на уровне пользователя. -Если время ожидания истекает и память не освобождена, выбрасывается исключение. -Подробнее о [перерасходе памяти](memory-overcommit.md). - -## merge_table_max_tables_to_look_for_schema_inference {#merge_table_max_tables_to_look_for_schema_inference} - - - - - -При создании таблицы `Merge` без явной схемы или при использовании табличной функции `merge` схема определяется как объединение не более чем указанного количества соответствующих таблиц. -Если таблиц больше, схема будет определена на основе первых таблиц в количестве, указанном в настройке. - -## merge_tree_coarse_index_granularity {#merge_tree_coarse_index_granularity} - - - -При поиске данных ClickHouse проверяет метки данных в файле индекса. Если ClickHouse обнаруживает, что нужные ключи лежат в некотором диапазоне, он делит этот диапазон на `merge_tree_coarse_index_granularity` поддиапазонов и рекурсивно ищет там требуемые ключи. - -Возможные значения: - -- Любое положительное чётное целое число. - -## merge_tree_compact_parts_min_granules_to_multibuffer_read {#merge_tree_compact_parts_min_granules_to_multibuffer_read} - - - - - -Влияет только на ClickHouse Cloud. Количество гранул в полосе компактной части таблиц MergeTree, при котором используется multibuffer reader, поддерживающий параллельное чтение и опережающую выборку (prefetch). При чтении из удалённой файловой системы использование multibuffer reader увеличивает количество запросов на чтение. - -## merge_tree_determine_task_size_by_prewhere_columns {#merge_tree_determine_task_size_by_prewhere_columns} - - - -Определяет, следует ли при определении размера задачи чтения учитывать только размер столбцов `PREWHERE`. - -## merge_tree_max_bytes_to_use_cache {#merge_tree_max_bytes_to_use_cache} - - - -Если ClickHouse должен прочитать более `merge_tree_max_bytes_to_use_cache` байт в одном запросе, он не использует кэш несжатых блоков. - -Кэш несжатых блоков хранит данные, извлечённые для запросов. ClickHouse использует этот кэш для ускорения ответов на повторяющиеся небольшие запросы. Этот параметр защищает кэш от засорения из‑за запросов, которые читают большой объём данных. Серверный параметр [uncompressed_cache_size](/operations/server-configuration-parameters/settings#uncompressed_cache_size) определяет размер кэша несжатых блоков. - -Возможные значения: - -- Любое положительное целое число. - -## merge_tree_max_rows_to_use_cache {#merge_tree_max_rows_to_use_cache} - - - -Если при выполнении одного запроса ClickHouse должен прочитать более `merge_tree_max_rows_to_use_cache` строк, кэш несжатых блоков не используется. - -Кэш несжатых блоков хранит данные, извлечённые для запросов. ClickHouse использует этот кэш для ускорения ответов на повторные небольшие запросы. Этот параметр защищает кэш от засорения запросами, которые читают большой объём данных. Параметр сервера [uncompressed_cache_size](/operations/server-configuration-parameters/settings#uncompressed_cache_size) задаёт размер кэша несжатых блоков. - -Возможные значения: - -- Любое положительное целое число. - -## merge_tree_min_bytes_for_concurrent_read {#merge_tree_min_bytes_for_concurrent_read} - - - -Если количество байт, которое нужно прочитать из одного файла таблицы движка [MergeTree](../../engines/table-engines/mergetree-family/mergetree.md), превышает `merge_tree_min_bytes_for_concurrent_read`, то ClickHouse пытается читать этот файл параллельно в нескольких потоках. - -Возможное значение: - -- Положительное целое число. - -## merge_tree_min_bytes_for_concurrent_read_for_remote_filesystem {#merge_tree_min_bytes_for_concurrent_read_for_remote_filesystem} - - - - - -Минимальное количество байт, которое нужно прочитать из одного файла, прежде чем движок [MergeTree](../../engines/table-engines/mergetree-family/mergetree.md) сможет распараллелить чтение при работе с удалённой файловой системой. Мы не рекомендуем использовать этот параметр. - -Возможные значения: - -- Положительное целое число. - -## merge_tree_min_bytes_for_seek {#merge_tree_min_bytes_for_seek} - - - -Если расстояние между двумя блоками данных, которые нужно прочитать из одного файла, меньше `merge_tree_min_bytes_for_seek` байт, ClickHouse последовательно считывает участок файла, содержащий оба блока, избегая дополнительного позиционирования. - -Возможные значения: - -- Любое положительное целое число. - -## merge_tree_min_bytes_per_task_for_remote_reading {#merge_tree_min_bytes_per_task_for_remote_reading} - -**Псевдонимы**: `filesystem_prefetch_min_bytes_for_single_read_task` - - - - - -Минимальный объем данных (в байтах), считываемый в одной задаче. - -## merge_tree_min_read_task_size {#merge_tree_min_read_task_size} - - - - - -Строгое минимальное ограничение на размер задачи (даже если количество гранул невелико и число доступных потоков велико, задачи меньшего размера не создаются) - -## merge_tree_min_rows_for_concurrent_read {#merge_tree_min_rows_for_concurrent_read} - - - -Если количество строк, которые нужно прочитать из файла таблицы [MergeTree](../../engines/table-engines/mergetree-family/mergetree.md), превышает `merge_tree_min_rows_for_concurrent_read`, то ClickHouse пытается читать этот файл параллельно в нескольких потоках. - -Возможные значения: - -- Положительное целое число. - -## merge_tree_min_rows_for_concurrent_read_for_remote_filesystem {#merge_tree_min_rows_for_concurrent_read_for_remote_filesystem} - - - - - -Минимальное количество строк, считываемых из одного файла, прежде чем движок [MergeTree](../../engines/table-engines/mergetree-family/mergetree.md) сможет распараллелить чтение при работе с удалённой файловой системой. Мы не рекомендуем использовать эту настройку. - -Возможные значения: - -- Положительное целое число. - -## merge_tree_min_rows_for_seek {#merge_tree_min_rows_for_seek} - - - -Если расстояние между двумя блоками данных, которые должны быть прочитаны из одного файла, меньше `merge_tree_min_rows_for_seek` строк, ClickHouse не выполняет произвольное позиционирование по файлу, а считывает данные последовательно. - -Возможные значения: - -- Любое положительное целое число. - -## merge_tree_read_split_ranges_into_intersecting_and_non_intersecting_injection_probability {#merge_tree_read_split_ranges_into_intersecting-and-non_intersecting_injection_probability} - - - - - -Для тестирования `PartsSplitter` — с указанной вероятностью при каждом чтении из MergeTree разбивайте диапазоны чтения на пересекающиеся и непересекающиеся. - -## merge_tree_storage_snapshot_sleep_ms {#merge_tree_storage_snapshot_sleep_ms} - - - - - -Добавляет искусственную задержку (в миллисекундах) при создании снимка хранилища для таблиц MergeTree. -Используется только для тестирования и отладки. - -Возможные значения: - -- 0 — без задержки (по умолчанию) -- N — задержка в миллисекундах - -## merge_tree_use_const_size_tasks_for_remote_reading {#merge_tree_use_const_size_tasks_for_remote_reading} - - - -Определяет, использовать ли задачи фиксированного размера для чтения из удалённой таблицы. - -## merge_tree_use_deserialization_prefixes_cache {#merge_tree_use_deserialization_prefixes_cache} - - - - - -Включает кэширование метаданных столбцов из префиксов файлов при чтении с удалённых дисков в MergeTree. - -## merge_tree_use_prefixes_deserialization_thread_pool {#merge_tree_use_prefixes_deserialization_thread_pool} - - - - - -Включает использование пула потоков для параллельной десериализации префиксов при чтении широких (Wide) частей в MergeTree. Размер этого пула потоков задаётся серверной настройкой `max_prefixes_deserialization_thread_pool_size`. - -## merge_tree_use_v1_object_and_dynamic_serialization {#merge_tree_use_v1_object_and_dynamic_serialization} - - - - - -При включении этого параметра в MergeTree для типов JSON и Dynamic будет использоваться версия сериализации V1 вместо V2. Изменение этого параметра вступает в силу только после перезапуска сервера. - -## metrics_perf_events_enabled {#metrics_perf_events_enabled} - - - -Если параметр включён, во время выполнения запросов будут измеряться некоторые perf-события. - -## metrics_perf_events_list {#metrics_perf_events_list} - -Разделённый запятыми список perf‑метрик, которые будут измеряться во время выполнения запросов. Пустое значение означает, что будут измеряться все события. См. `PerfEventInfo` в исходном коде для списка доступных событий. - -## min_bytes_to_use_direct_io {#min_bytes_to_use_direct_io} - - - -Минимальный объём данных, необходимый для использования прямого ввода-вывода (direct I/O) к диску хранения. - -ClickHouse использует этот параметр при чтении данных из таблиц. Если общий объём всех данных, подлежащих чтению, превышает `min_bytes_to_use_direct_io` байт, то ClickHouse читает данные с диска хранения с опцией `O_DIRECT`. - -Возможные значения: - -- 0 — прямой ввод-вывод отключён. -- Положительное целое число. - -## min_bytes_to_use_mmap_io {#min_bytes_to_use_mmap_io} - - - -Это экспериментальная настройка. Задаёт минимальный объём памяти для чтения больших файлов без копирования данных из ядра в пользовательское пространство. Рекомендуемый порог — около 64 МБ, поскольку [mmap/munmap](https://en.wikipedia.org/wiki/Mmap) работает медленно. Имеет смысл только для больших файлов и помогает лишь в том случае, если данные находятся в кэше страниц (page cache). - -Возможные значения: - -- Положительное целое число. -- 0 — большие файлы читаются только с копированием данных из ядра в пользовательское пространство. - -## min_chunk_bytes_for_parallel_parsing {#min_chunk_bytes_for_parallel_parsing} - - - -- Тип: беззнаковое целое число (unsigned int) -- Значение по умолчанию: 1 MiB - -Минимальный размер блока в байтах, который будет обрабатываться каждым потоком параллельно. - -## min_compress_block_size {#min_compress_block_size} - - - -Для таблиц [MergeTree](../../engines/table-engines/mergetree-family/mergetree.md). Чтобы уменьшить задержку при обработке запросов, блок сжимается при записи следующей метки, если его размер не меньше `min_compress_block_size`. По умолчанию — 65 536. - -Фактический размер блока, если объём несжатых данных меньше `max_compress_block_size`, не меньше этого значения и не меньше объёма данных для одной метки. - -Рассмотрим пример. Предположим, что при создании таблицы параметр `index_granularity` был установлен в 8192. - -Мы записываем столбец типа UInt32 (4 байта на значение). При записи 8192 строк суммарный объём составит 32 КБ данных. Поскольку min_compress_block_size = 65 536, сжатый блок будет формироваться на каждые две метки. - -Мы записываем столбец URL типа String (средний размер 60 байт на значение). При записи 8192 строк средний объём будет немного меньше 500 КБ данных. Поскольку это больше 65 536, сжатый блок будет формироваться для каждой метки. В этом случае при чтении данных с диска в диапазоне одной метки лишние данные не будут распакованы. - -:::note -Это настройка для экспертов, и вам не следует изменять её, если вы только начинаете работать с ClickHouse. -::: - -## min_count_to_compile_aggregate_expression {#min_count_to_compile_aggregate_expression} - - - -Минимальное количество идентичных агрегатных выражений для начала JIT-компиляции. Работает только при включённой настройке [compile_aggregate_expressions](#compile_aggregate_expressions). - -Возможные значения: - -- Положительное целое число. -- 0 — идентичные агрегатные выражения всегда JIT-компилируются. - -## min_count_to_compile_expression {#min_count_to_compile_expression} - - - -Минимальное количество выполнений одного и того же выражения, прежде чем оно будет скомпилировано. - -## min_count_to_compile_sort_description {#min_count_to_compile_sort_description} - - - -Число одинаковых описаний сортировки, после которого они будут скомпилированы JIT - -## min_execution_speed {#min_execution_speed} - - - -Минимальная скорость выполнения в строках в секунду. Проверяется на каждом блоке данных, когда истекает -[`timeout_before_checking_execution_speed`](/operations/settings/settings#timeout_before_checking_execution_speed). -Если скорость выполнения ниже, выбрасывается исключение. - -## min_execution_speed_bytes {#min_execution_speed_bytes} - - - -Минимальное количество байт, обрабатываемых в секунду. Проверяется на каждом блоке данных по истечении значения настройки -[`timeout_before_checking_execution_speed`](/operations/settings/settings#timeout_before_checking_execution_speed). -Если скорость выполнения ниже этого значения, выбрасывается исключение. - -## min_external_table_block_size_bytes {#min_external_table_block_size_bytes} - - - - - -Объединяет блоки, передаваемые во внешнюю таблицу, до указанного размера в байтах, если их размер меньше заданного. - -## min_external_table_block_size_rows {#min_external_table_block_size_rows} - - - - - -Объединяет блоки, передаваемые во внешнюю таблицу, до указанного размера по числу строк, если их размер меньше указанного. - -## min_free_disk_bytes_to_perform_insert {#min_free_disk_bytes_to_perform_insert} - - - - - -Минимальный объём свободного дискового пространства (в байтах), необходимый для выполнения операции вставки. - -## min_free_disk_ratio_to_perform_insert {#min_free_disk_ratio_to_perform_insert} - - - - - -Минимальная доля свободного дискового пространства, необходимая для выполнения вставки. - -## min_free_disk_space_for_temporary_data {#min_free_disk_space_for_temporary_data} - - - -Минимальный объем дискового пространства, который необходимо оставлять свободным при записи временных данных, используемых во внешней сортировке и агрегации. - -## min_hit_rate_to_use_consecutive_keys_optimization {#min_hit_rate_to_use_consecutive_keys_optimization} - - - -Минимальный коэффициент попаданий в кэш, используемого для оптимизации последовательных ключей при агрегации, при котором эта оптимизация остаётся включенной - -## min_insert_block_size_bytes {#min_insert_block_size_bytes} - - - -Устанавливает минимальный размер блока в байтах, который может быть вставлен в таблицу запросом `INSERT`. Блоки меньшего размера объединяются в более крупные. - -Возможные значения: - -- Положительное целое число. -- 0 — объединение отключено. - -## min_insert_block_size_bytes_for_materialized_views {#min_insert_block_size_bytes_for_materialized_views} - - - -Задает минимальный размер блока в байтах, который может быть вставлен в таблицу запросом `INSERT`. Блоки меньшего размера объединяются в более крупные блоки. Этот параметр применяется только к блокам, вставляемым в [материализованное представление](../../sql-reference/statements/create/view.md). Настраивая этот параметр, вы управляете объединением блоков при вставке в материализованное представление и избегаете избыточного потребления памяти. - -Возможные значения: - -- Любое положительное целое число. -- 0 — объединение отключено. - -**См. также** - -- [min_insert_block_size_bytes](#min_insert_block_size_bytes) - -## min_insert_block_size_rows {#min_insert_block_size_rows} - - - -Задаёт минимальное количество строк в блоке, который может быть вставлен в таблицу с помощью запроса `INSERT`. Блоки меньшего размера объединяются в более крупные. - -Возможные значения: - -- Положительное целое число. -- 0 — объединение отключено. - -## min_insert_block_size_rows_for_materialized_views {#min_insert_block_size_rows_for_materialized_views} - - - -Определяет минимальное количество строк в блоке, который может быть вставлен в таблицу запросом `INSERT`. Блоки меньшего размера объединяются в более крупные. Этот параметр применяется только к блокам, вставляемым в [материализованное представление](../../sql-reference/statements/create/view.md). Настраивая этот параметр, вы управляете объединением блоков при записи в материализованное представление и позволяете избежать избыточного использования памяти. - -Возможные значения: - -- Любое положительное целое число. -- 0 — объединение отключено. - -**См. также** - -- [min_insert_block_size_rows](#min_insert_block_size_rows) - -## min_joined_block_size_bytes {#min_joined_block_size_bytes} - - - - - -Минимальный размер блока (в байтах) для входных и выходных блоков JOIN (если используемый алгоритм JOIN это поддерживает). Маленькие блоки будут объединены. Значение 0 означает отсутствие ограничений по размеру. - -## min_joined_block_size_rows {#min_joined_block_size_rows} - - - - - -Минимальный размер блока в строках для входных и выходных блоков JOIN (если используемый алгоритм JOIN это поддерживает). Мелкие блоки будут объединены. Значение 0 означает отсутствие ограничения. - -## min_os_cpu_wait_time_ratio_to_throw {#min_os_cpu_wait_time_ratio_to_throw} - - - - - -Минимальное отношение между временем ожидания CPU в ОС (метрика OSCPUWaitMicroseconds) и временем занятости (метрика OSCPUVirtualTimeMicroseconds), при котором сервер начинает рассматривать возможность отклонения запросов. Для вычисления вероятности используется линейная интерполяция между минимальным и максимальным отношением, при этом в этой точке вероятность равна 0. - -## min_outstreams_per_resize_after_split {#min_outstreams_per_resize_after_split} - - - - - -Задает минимальное количество выходных потоков процессора `Resize` или `StrictResize` после выполнения операции разделения при генерации конвейера. Если итоговое число потоков меньше этого значения, операция разделения не будет выполнена. - -### Что такое узел Resize - -Узел `Resize` — это процессор в конвейере запросов, который регулирует количество потоков данных, проходящих через конвейер. Он может как увеличивать, так и уменьшать число потоков, чтобы сбалансировать нагрузку между несколькими потоками выполнения или процессорами. Например, если запросу требуется больше параллелизма, узел `Resize` может разделить один поток на несколько потоков. Напротив, он может объединить несколько потоков в меньшее их число для консолидации обработки данных. - -Узел `Resize` обеспечивает равномерное распределение данных по потокам, сохраняя структуру блоков данных. Это помогает оптимизировать использование ресурсов и повысить производительность запросов. - -### Почему узел Resize необходимо разделить - -Во время выполнения конвейера мьютекс ExecutingGraph::Node::status_mutex центрального узла‑хаба `Resize` испытывает сильную конкуренцию за захват, особенно в средах с большим количеством ядер, и это приводит к следующему: - -1. Увеличению задержки при ExecutingGraph::updateNode, что напрямую влияет на производительность запросов. -2. Чрезмерному расходу циклов CPU из‑за конкуренции за спинлок (native_queued_spin_lock_slowpath), что ухудшает эффективность. -3. Снижению загрузки CPU, что ограничивает параллелизм и пропускную способность. - -### Как выполняется разбиение узла Resize - -1. Проверяется количество выходных потоков, чтобы убедиться, что разбиение возможно: выходные потоки каждого узла после разбиения достигают или превышают порог `min_outstreams_per_resize_after_split`. -2. Узел `Resize` разбивается на несколько меньших узлов `Resize` с одинаковым количеством портов, каждый из которых обрабатывает подмножество входных и выходных потоков. -3. Каждая группа обрабатывается независимо, что снижает конкуренцию за блокировки. - -### Разбиение узла Resize с произвольными входами/выходами - -В некоторых случаях, когда количество входов/выходов не делится нацело на число узлов `Resize`, на которые выполняется разбиение, часть входов подключается к `NullSource`, а часть выходов — к `NullSink`. Это позволяет выполнить разбиение, не влияя на общий поток данных. - -### Назначение настройки - -Настройка `min_outstreams_per_resize_after_split` гарантирует, что разбиение узлов `Resize` действительно имеет смысл и предотвращает создание слишком малого количества потоков, что могло бы привести к неэффективной параллельной обработке. Задавая минимальное число выходных потоков, эта настройка помогает поддерживать баланс между параллелизмом и накладными расходами, оптимизируя выполнение запросов в сценариях, связанных с разбиением и слиянием потоков. - -### Отключение настройки - -Чтобы отключить разбиение узлов `Resize`, установите эту настройку в 0. Это предотвратит разбиение узлов `Resize` при генерации пайплайна, позволяя им сохранять свою исходную структуру без деления на более мелкие узлы. - -## min_table_rows_to_use_projection_index {#min_table_rows_to_use_projection_index} - - - - - -Если оценочное число строк, которые нужно прочитать из таблицы, больше или равно этому порогу, ClickHouse попытается использовать индекс проекции при выполнении запроса. - -## mongodb_throw_on_unsupported_query {#mongodb_throw_on_unsupported_query} - - - - - -Если настройка включена, таблицы MongoDB будут возвращать ошибку, когда не удаётся построить запрос MongoDB. В противном случае ClickHouse считывает всю таблицу и обрабатывает её локально. Эта настройка не применяется, если `allow_experimental_analyzer=0`. - -## move_all_conditions_to_prewhere {#move_all_conditions_to_prewhere} - - - -Перемещать все возможные условия из WHERE в PREWHERE - -## move_primary_key_columns_to_end_of_prewhere {#move_primary_key_columns_to_end_of_prewhere} - - - -Перемещать условия PREWHERE, содержащие столбцы первичного ключа, в конец цепочки условий AND. Скорее всего, эти условия учитываются при анализе первичного ключа и, следовательно, вносят незначительный вклад в фильтрацию на этапе PREWHERE. - -## multiple_joins_try_to_keep_original_names {#multiple_joins_try_to_keep_original_names} - - - -Не добавлять псевдонимы в список выражений верхнего уровня при переписывании запросов с несколькими JOIN - -## mutations_execute_nondeterministic_on_initiator {#mutations_execute_nondeterministic_on_initiator} - - - -Если установлено значение `true`, константные недетерминированные функции (например, функция `now()`) выполняются на инициаторе и заменяются на литералы в запросах `UPDATE` и `DELETE`. Это помогает поддерживать согласованность данных на репликах при выполнении мутаций с константными недетерминированными функциями. Значение по умолчанию: `false`. - -## mutations_execute_subqueries_on_initiator {#mutations_execute_subqueries_on_initiator} - - - -Если значение `true`, скалярные подзапросы выполняются на сервере-инициаторе, а их результаты подставляются как литералы в запросах `UPDATE` и `DELETE`. Значение по умолчанию: `false`. - -## mutations_max_literal_size_to_replace {#mutations_max_literal_size_to_replace} - - - -Максимальный размер в байтах сериализованного литерала, который может быть заменён в запросах `UPDATE` и `DELETE`. Параметр действует только в том случае, если включён хотя бы один из двух параметров выше. Значение по умолчанию: 16384 (16 КиБ). - -## mutations_sync {#mutations_sync} - - - -Позволяет выполнять запросы `ALTER TABLE ... UPDATE|DELETE|MATERIALIZE INDEX|MATERIALIZE PROJECTION|MATERIALIZE COLUMN|MATERIALIZE STATISTICS` ([мутации](../../sql-reference/statements/alter/index.md/#mutations)) синхронно. - -Возможные значения: - -| Value | Description | -|-------|-------------------------------------------------------------------------------------------------------------------------------------------------------| -| `0` | Мутации выполняются асинхронно. | -| `1` | Запрос ожидает завершения всех мутаций на текущем сервере. | -| `2` | Запрос ожидает завершения всех мутаций на всех репликах (если они есть). | -| `3` | Запрос ожидает завершения мутаций только на активных репликах. Поддерживается только для `SharedMergeTree`. Для `ReplicatedMergeTree` ведёт себя так же, как `mutations_sync = 2`.| - -## mysql_datatypes_support_level {#mysql_datatypes_support_level} - -Определяет, как типы MySQL преобразуются в соответствующие типы ClickHouse. Представляет собой список, разделённый запятыми, с любым сочетанием значений `decimal`, `datetime64`, `date2Date32` или `date2String`. - -- `decimal`: преобразовывать типы `NUMERIC` и `DECIMAL` в `Decimal`, если это позволяет точность. -- `datetime64`: преобразовывать типы `DATETIME` и `TIMESTAMP` в `DateTime64` вместо `DateTime`, когда точность не равна `0`. -- `date2Date32`: преобразовывать `DATE` в `Date32` вместо `Date`. Имеет приоритет над `date2String`. -- `date2String`: преобразовывать `DATE` в `String` вместо `Date`. Переопределяется параметром `datetime64`. - -## mysql_map_fixed_string_to_text_in_show_columns {#mysql_map_fixed_string_to_text_in_show_columns} - - - - - -При включении тип данных ClickHouse [FixedString](../../sql-reference/data-types/fixedstring.md) будет отображаться как `TEXT` в [SHOW COLUMNS](../../sql-reference/statements/show.md/#show_columns). - -Действует только при подключении по протоколу MySQL wire. - -- 0 - Использовать `BLOB`. -- 1 - Использовать `TEXT`. - -## mysql_map_string_to_text_in_show_columns {#mysql_map_string_to_text_in_show_columns} - - - - - -При включении тип данных ClickHouse [String](../../sql-reference/data-types/string.md) будет отображаться как `TEXT` в [SHOW COLUMNS](../../sql-reference/statements/show.md/#show_columns). - -Влияет только на подключения, выполняемые через протокол MySQL wire. - -- 0 — использовать `BLOB`. -- 1 — использовать `TEXT`. - -## mysql_max_rows_to_insert {#mysql_max_rows_to_insert} - - - -Максимальное число строк в пакетной операции вставки для движка MySQL - -## network_compression_method {#network_compression_method} - - - -Кодек сжатия данных при взаимодействии «клиент–сервер» и «сервер–сервер». - -Возможные значения: - -- `NONE` — без сжатия. -- `LZ4` — использовать кодек LZ4. -- `LZ4HC` — использовать кодек LZ4HC. -- `ZSTD` — использовать кодек ZSTD. - -**См. также** - -- [network_zstd_compression_level](#network_zstd_compression_level) - -## network_zstd_compression_level {#network_zstd_compression_level} - - - -Настраивает уровень сжатия ZSTD. Используется только если [network_compression_method](#network_compression_method) имеет значение `ZSTD`. - -Возможные значения: - -- Положительное целое число от 1 до 15. - -## normalize_function_names {#normalize_function_names} - - - - - -Нормализовать имена функций до их канонических имен - -## number_of_mutations_to_delay {#number_of_mutations_to_delay} - - - -Если таблица, к которой применяются мутации, содержит как минимум столько незавершённых мутаций, искусственно замедлять выполнение последующих мутаций. 0 — отключено - -## number_of_mutations_to_throw {#number_of_mutations_to_throw} - - - -Если изменяемая таблица содержит не менее указанного количества незавершённых мутаций, будет выброшено исключение «Too many mutations ...». 0 — отключено - -## odbc_bridge_connection_pool_size {#odbc_bridge_connection_pool_size} - - - -Размер пула соединений для каждой строки параметров подключения в ODBC-мосте. - -## odbc_bridge_use_connection_pooling {#odbc_bridge_use_connection_pooling} - - - -Использовать пул подключений в мосте ODBC. Если установлено значение `false`, каждый раз создаётся новое подключение. - -## offset - - - -Задает количество строк, которые нужно пропустить перед началом возврата строк по результатам запроса. Корректирует смещение, заданное предложением [OFFSET](/sql-reference/statements/select/offset), таким образом, что эти два значения суммируются. - -Возможные значения: - -* 0 — строки не пропускаются. -* Положительное целое число. - -**Пример** - -Исходная таблица: - -```sql -CREATE TABLE test (i UInt64) ENGINE = MergeTree() ORDER BY i; -INSERT INTO test SELECT number FROM numbers(500); -``` - -Запрос: - -```sql -SET limit = 5; -SET offset = 7; -SELECT * FROM test LIMIT 10 OFFSET 100; -``` - -Результат: - -```text -┌───i─┐ -│ 107 │ -│ 108 │ -│ 109 │ -└─────┘ -``` - - -## opentelemetry_start_trace_probability {#opentelemetry_start_trace_probability} - - - -Задает вероятность того, что ClickHouse начнет трассировку для выполняемых запросов (если не передан родительский [контекст трассировки](https://www.w3.org/TR/trace-context/)). - -Возможные значения: - -- 0 — трассировка для всех выполняемых запросов отключена (если не передан родительский контекст трассировки). -- Положительное число с плавающей запятой в диапазоне [0..1]. Например, если значение настройки равно `0,5`, ClickHouse будет начинать трассировку в среднем для половины запросов. -- 1 — трассировка для всех выполняемых запросов включена. - -## opentelemetry_trace_cpu_scheduling {#opentelemetry_trace_cpu_scheduling} - - - - - -Сбор спанов OpenTelemetry для вытесняющего планирования CPU рабочих нагрузок. - -## opentelemetry_trace_processors {#opentelemetry_trace_processors} - - - -Собирать спаны OpenTelemetry процессоров. - -## optimize_aggregation_in_order {#optimize_aggregation_in_order} - - - -Включает оптимизацию [GROUP BY](/sql-reference/statements/select/group-by) в запросах [SELECT](../../sql-reference/statements/select/index.md) для агрегации данных в соответствующем порядку сортировки в таблицах семейства [MergeTree](../../engines/table-engines/mergetree-family/mergetree.md). - -Возможные значения: - -- 0 — оптимизация `GROUP BY` отключена. -- 1 — оптимизация `GROUP BY` включена. - -**См. также** - -- [Оптимизация GROUP BY](/sql-reference/statements/select/group-by#group-by-optimization-depending-on-table-sorting-key) - -## optimize_aggregators_of_group_by_keys {#optimize_aggregators_of_group_by_keys} - - - -Устраняет агрегатные функции min/max/any/anyLast для ключей GROUP BY в секции SELECT - -## optimize_and_compare_chain {#optimize_and_compare_chain} - - - - - -Дополняет цепочки AND константными сравнениями для повышения эффективности фильтрации. Поддерживает операторы `<`, `<=`, `>`, `>=`, `=` и их комбинации. Например, `(a < b) AND (b < c) AND (c < 5)` будет преобразовано в `(a < b) AND (b < c) AND (c < 5) AND (b < 5) AND (a < 5)`. - -## optimize_append_index {#optimize_append_index} - - - -Используйте [constraints](../../sql-reference/statements/create/table.md/#constraints), чтобы добавить условие индекса при вставке данных. Значение по умолчанию — `false`. - -Возможные значения: - -- true, false - -## optimize_arithmetic_operations_in_aggregate_functions {#optimize_arithmetic_operations_in_aggregate_functions} - - - -Вынос арифметических операций за пределы агрегатных функций - -## optimize_const_name_size {#optimize_const_name_size} - - - - - -Заменяет константу на скаляр и использует хеш в качестве имени для больших констант (размер оценивается по длине имени). - -Возможные значения: - -- положительное целое число — максимальная длина имени, -- 0 — всегда, -- отрицательное целое число — никогда. - -## optimize_count_from_files {#optimize_count_from_files} - - - -Включает или отключает оптимизацию подсчёта количества строк в файлах в различных входных форматах. Применяется к табличным функциям и движкам таблиц `file`/`s3`/`url`/`hdfs`/`azureBlobStorage`. - -Возможные значения: - -- 0 — оптимизация отключена. -- 1 — оптимизация включена. - -## optimize_distinct_in_order {#optimize_distinct_in_order} - - - -Включает оптимизацию DISTINCT, если некоторые столбцы в операторе DISTINCT образуют префикс сортировки. Например, префикс ключа сортировки в MergeTree или выражения ORDER BY. - -## optimize_distributed_group_by_sharding_key {#optimize_distributed_group_by_sharding_key} - - - -Оптимизирует выполнение запросов `GROUP BY sharding_key`, избегая дорогостоящей агрегации на сервере-инициаторе (что уменьшает потребление памяти запросом на сервере-инициаторе). - -Поддерживаются следующие типы запросов (и все их комбинации): - -- `SELECT DISTINCT [..., ]sharding_key[, ...] FROM dist` -- `SELECT ... FROM dist GROUP BY sharding_key[, ...]` -- `SELECT ... FROM dist GROUP BY sharding_key[, ...] ORDER BY x` -- `SELECT ... FROM dist GROUP BY sharding_key[, ...] LIMIT 1` -- `SELECT ... FROM dist GROUP BY sharding_key[, ...] LIMIT 1 BY x` - -Следующие типы запросов не поддерживаются (поддержка некоторых из них может быть добавлена позже): - -- `SELECT ... GROUP BY sharding_key[, ...] WITH TOTALS` -- `SELECT ... GROUP BY sharding_key[, ...] WITH ROLLUP` -- `SELECT ... GROUP BY sharding_key[, ...] WITH CUBE` -- `SELECT ... GROUP BY sharding_key[, ...] SETTINGS extremes=1` - -Возможные значения: - -- 0 — Отключено. -- 1 — Включено. - -См. также: - -- [distributed_group_by_no_merge](#distributed_group_by_no_merge) -- [distributed_push_down_limit](#distributed_push_down_limit) -- [optimize_skip_unused_shards](#optimize_skip_unused_shards) - -:::note -В настоящее время требуется `optimize_skip_unused_shards` (причина в том, что однажды этот параметр может быть включён по умолчанию, и он будет работать корректно только если данные были вставлены через таблицу Distributed, то есть данные распределены в соответствии с `sharding_key`). -::: - -## optimize_empty_string_comparisons {#optimize_empty_string_comparisons} - - - - - -Преобразует выражения вида col = '' или '' = col в empty(col), а col != '' или '' != col в notEmpty(col), -только если col имеет тип String или FixedString. - -## optimize_extract_common_expressions {#optimize_extract_common_expressions} - - - - - -Позволяет выносить общие подвыражения из дизъюнкций в выражениях WHERE, PREWHERE, ON, HAVING и QUALIFY. Логическое выражение вида `(A AND B) OR (A AND C)` может быть переписано как `A AND (B OR C)`, что может помочь лучше использовать: - -- индексы в простых фильтрующих выражениях -- оптимизацию преобразования CROSS JOIN в INNER JOIN - -## optimize_functions_to_subcolumns {#optimize_functions_to_subcolumns} - - - - - -Включает или отключает оптимизацию путём преобразования некоторых функций к чтению подколонок. Это уменьшает объём считываемых данных. - -Могут быть преобразованы следующие функции: - -- [length](/sql-reference/functions/array-functions#length) для чтения подколонки [size0](../../sql-reference/data-types/array.md/#array-size). -- [empty](/sql-reference/functions/array-functions#empty) для чтения подколонки [size0](../../sql-reference/data-types/array.md/#array-size). -- [notEmpty](/sql-reference/functions/array-functions#notEmpty) для чтения подколонки [size0](../../sql-reference/data-types/array.md/#array-size). -- [isNull](/sql-reference/functions/functions-for-nulls#isNull) для чтения подколонки [null](../../sql-reference/data-types/nullable.md/#finding-null). -- [isNotNull](/sql-reference/functions/functions-for-nulls#isNotNull) для чтения подколонки [null](../../sql-reference/data-types/nullable.md/#finding-null). -- [count](/sql-reference/aggregate-functions/reference/count) для чтения подколонки [null](../../sql-reference/data-types/nullable.md/#finding-null). -- [mapKeys](/sql-reference/functions/tuple-map-functions#mapkeys) для чтения подколонки [keys](/sql-reference/data-types/map#reading-subcolumns-of-map). -- [mapValues](/sql-reference/functions/tuple-map-functions#mapvalues) для чтения подколонки [values](/sql-reference/data-types/map#reading-subcolumns-of-map). - -Возможные значения: - -- 0 — оптимизация отключена. -- 1 — оптимизация включена. - -## optimize_group_by_constant_keys {#optimize_group_by_constant_keys} - - - - - -Оптимизирует GROUP BY, если все ключи в блоке являются константами - -## optimize_group_by_function_keys {#optimize_group_by_function_keys} - - - -Устраняет функции от других ключей в секции GROUP BY - -## optimize_if_chain_to_multiif {#optimize_if_chain_to_multiif} - - - -Заменяет цепочки if(cond1, then1, if(cond2, ...)) на multiIf. Сейчас это не даёт преимуществ для числовых типов. - -## optimize_if_transform_strings_to_enum {#optimize_if_transform_strings_to_enum} - - - -Заменяет строковые аргументы в `if` и `transform` на `Enum`. По умолчанию отключена, поскольку может приводить к несогласованным изменениям в распределённом запросе и, как следствие, к его сбою. - -## optimize_injective_functions_in_group_by {#optimize_injective_functions_in_group_by} - - - - - -Заменяет инъективные функции их аргументами в разделе GROUP BY - -## optimize_injective_functions_inside_uniq {#optimize_injective_functions_inside_uniq} - - - -Удаляет инъективные функции с одним аргументом внутри функций uniq*(). - -## optimize_min_equality_disjunction_chain_length {#optimize_min_equality_disjunction_chain_length} - - - -Минимальная длина выражения `expr = x1 OR ... expr = xN` для оптимизации - -## optimize_min_inequality_conjunction_chain_length {#optimize_min_inequality_conjunction_chain_length} - - - -Минимальная длина выражения `expr <> x1 AND ... expr <> xN` для оптимизации. - -## optimize_move_to_prewhere {#optimize_move_to_prewhere} - - - -Включает или отключает автоматическую оптимизацию [PREWHERE](../../sql-reference/statements/select/prewhere.md) в запросах [SELECT](../../sql-reference/statements/select/index.md). - -Применяется только к таблицам [*MergeTree](../../engines/table-engines/mergetree-family/index.md). - -Возможные значения: - -- 0 — автоматическая оптимизация `PREWHERE` отключена. -- 1 — автоматическая оптимизация `PREWHERE` включена. - -## optimize_move_to_prewhere_if_final {#optimize_move_to_prewhere_if_final} - - - -Включает или отключает автоматическую оптимизацию [PREWHERE](../../sql-reference/statements/select/prewhere.md) в запросах [SELECT](../../sql-reference/statements/select/index.md) с модификатором [FINAL](/sql-reference/statements/select/from#final-modifier). - -Работает только для таблиц семейства [*MergeTree](../../engines/table-engines/mergetree-family/index.md). - -Возможные значения: - -- 0 — автоматическая оптимизация `PREWHERE` в запросах `SELECT` с модификатором `FINAL` отключена. -- 1 — автоматическая оптимизация `PREWHERE` в запросах `SELECT` с модификатором `FINAL` включена. - -**См. также** - -- настройка [optimize_move_to_prewhere](#optimize_move_to_prewhere) - -## optimize_multiif_to_if {#optimize_multiif_to_if} - - - -Заменяет вызовы `multiIf` с единственным условием на `if`. - -## optimize_normalize_count_variants {#optimize_normalize_count_variants} - - - - - -Переписывать агрегатные функции, которые семантически эквивалентны функции count(), в count(). - -## optimize_on_insert - - - - - -Включает или отключает преобразование данных перед вставкой так, как если бы к этому блоку была применена операция слияния (merge) в соответствии с движком таблицы. - -Возможные значения: - -* 0 — Отключено. -* 1 — Включено. - -**Пример** - -Разница между включённым и отключённым режимом: - -Запрос: - -```sql -SET optimize_on_insert = 1; - -CREATE TABLE test1 (`FirstTable` UInt32) ENGINE = ReplacingMergeTree ORDER BY FirstTable; - -INSERT INTO test1 SELECT number % 2 FROM numbers(5); - -SELECT * FROM test1; - -SET optimize_on_insert = 0; - -CREATE TABLE test2 (`SecondTable` UInt32) ENGINE = ReplacingMergeTree ORDER BY SecondTable; - -INSERT INTO test2 SELECT number % 2 FROM numbers(5); - -SELECT * FROM test2; -``` - -Результат: - -```text -┌─FirstTable─┐ -│ 0 │ -│ 1 │ -└────────────┘ - -┌─SecondTable─┐ -│ 0 │ -│ 0 │ -│ 0 │ -│ 1 │ -│ 1 │ -└─────────────┘ -``` - -Обратите внимание, что этот параметр влияет на поведение [материализованного представления](/sql-reference/statements/create/view#materialized-view). - - -## optimize_or_like_chain {#optimize_or_like_chain} - - - -Оптимизирует несколько условий OR LIKE в multiMatchAny. Эту оптимизацию не следует включать по умолчанию, так как в некоторых случаях она мешает анализу индексов. - -## optimize_qbit_distance_function_reads {#optimize_qbit_distance_function_reads} - - - - - -Заменяет функции расстояния для типа данных `QBit` эквивалентными функциями, которые считывают из хранилища только необходимые для вычисления столбцы. - -## optimize_read_in_order {#optimize_read_in_order} - - - -Включает оптимизацию [ORDER BY](/sql-reference/statements/select/order-by#optimization-of-data-reading) в запросах [SELECT](../../sql-reference/statements/select/index.md) при чтении данных из таблиц [MergeTree](../../engines/table-engines/mergetree-family/mergetree.md). - -Возможные значения: - -- 0 — оптимизация `ORDER BY` отключена. -- 1 — оптимизация `ORDER BY` включена. - -**См. также** - -- [Оператор ORDER BY](/sql-reference/statements/select/order-by#optimization-of-data-reading) - -## optimize_read_in_window_order {#optimize_read_in_window_order} - - - -Включает оптимизацию ORDER BY в предложении WINDOW для чтения данных в соответствующем порядке из таблиц MergeTree. - -## optimize_redundant_functions_in_order_by {#optimize_redundant_functions_in_order_by} - - - -Удаляет функции из ORDER BY, если их аргументы также присутствуют в ORDER BY - -## optimize_respect_aliases {#optimize_respect_aliases} - - - -Если значение параметра — true, алиасы в WHERE/GROUP BY/ORDER BY учитываются, что помогает при отсечении партиций, использовании вторичных индексов, а также оптимизациях optimize_aggregation_in_order/optimize_read_in_order/optimize_trivial_count. - -## optimize_rewrite_aggregate_function_with_if {#optimize_rewrite_aggregate_function_with_if} - - - -Переписывает агрегатные функции, в которых аргументом является выражение `if`, на логически эквивалентные варианты. -Например, `avg(if(cond, col, null))` может быть переписана как `avgOrNullIf(cond, col)`. Это может улучшить производительность. - -:::note -Поддерживается только при использовании анализатора (`enable_analyzer = 1`). -::: - -## optimize_rewrite_array_exists_to_has {#optimize_rewrite_array_exists_to_has} - - - -Перезаписывает вызовы функции arrayExists() на has(), когда это логически эквивалентно. Например, arrayExists(x -> x = 1, arr) может быть переписано как has(arr, 1) - -## optimize_rewrite_like_perfect_affix {#optimize_rewrite_like_perfect_affix} - - - - - -Переписывает выражения LIKE с точным префиксом или суффиксом (например, `col LIKE 'ClickHouse%'`) во вызовы функций startsWith или endsWith (например, `startsWith(col, 'ClickHouse')`). - -## optimize_rewrite_regexp_functions {#optimize_rewrite_regexp_functions} - - - - - -Переписывать функции, связанные с регулярными выражениями, в более простые и эффективные формы - -## optimize_rewrite_sum_if_to_count_if {#optimize_rewrite_sum_if_to_count_if} - - - - - -Переписывать sumIf() и sum(if()) в countIf(), когда это логически эквивалентно - -## optimize_skip_merged_partitions {#optimize_skip_merged_partitions} - - - -Включает или отключает оптимизацию для запроса [OPTIMIZE TABLE ... FINAL](../../sql-reference/statements/optimize.md), если существует только одна часть уровня > 0 и у неё не истёк TTL. - -- `OPTIMIZE TABLE ... FINAL SETTINGS optimize_skip_merged_partitions=1` - -По умолчанию запрос `OPTIMIZE TABLE ... FINAL` переписывает эту часть, даже если она единственная. - -Возможные значения: - -- 1 - Включить оптимизацию. -- 0 - Отключить оптимизацию. - -## optimize_skip_unused_shards {#optimize_skip_unused_shards} - - - -Включает или отключает пропуск неиспользуемых шардов для запросов [SELECT](../../sql-reference/statements/select/index.md), которые содержат условие по ключу шардинга в `WHERE/PREWHERE` (при условии, что данные распределены по ключу шардинга; в противном случае запрос может вернуть некорректный результат). - -Возможные значения: - -- 0 — Отключено. -- 1 — Включено. - -## optimize_skip_unused_shards_limit {#optimize_skip_unused_shards_limit} - - - -Ограничение на число значений ключа шардинга; при достижении этого лимита настройка `optimize_skip_unused_shards` отключается. - -Слишком большое число значений может потребовать значительных затрат на обработку, при этом выгода сомнительна, поскольку если у вас очень много значений в `IN (...)`, то, скорее всего, запрос всё равно будет отправлен на все шарды. - -## optimize_skip_unused_shards_nesting {#optimize_skip_unused_shards_nesting} - - - -Определяет работу [`optimize_skip_unused_shards`](#optimize_skip_unused_shards) (поэтому также требует включения [`optimize_skip_unused_shards`](#optimize_skip_unused_shards)) в зависимости от уровня вложенности распределённого запроса (случай, когда у вас есть таблица `Distributed`, которая обращается к другой таблице `Distributed`). - -Возможные значения: - -- 0 — Отключено, `optimize_skip_unused_shards` всегда применяется. -- 1 — Включает `optimize_skip_unused_shards` только для первого уровня. -- 2 — Включает `optimize_skip_unused_shards` до второго уровня включительно. - -## optimize_skip_unused_shards_rewrite_in {#optimize_skip_unused_shards_rewrite_in} - - - -Переписывает оператор IN в запросах к удалённым шардам, чтобы исключить значения, которые не относятся к данному шарду (требует включённого `optimize_skip_unused_shards`). - -Возможные значения: - -- 0 — Отключено. -- 1 — Включено. - -## optimize_sorting_by_input_stream_properties {#optimize_sorting_by_input_stream_properties} - - - -Оптимизировать сортировку с учётом свойств входного потока - -## optimize_substitute_columns {#optimize_substitute_columns} - - - -Используйте [ограничения](../../sql-reference/statements/create/table.md/#constraints) для замены столбцов. Значение по умолчанию — `false`. - -Возможные значения: - -- true, false - -## optimize_syntax_fuse_functions - - - -Позволяет объединять агрегатные функции с одинаковым аргументом. Переписывает запрос, который содержит как минимум две агрегатные функции [sum](/sql-reference/aggregate-functions/reference/sum), [count](/sql-reference/aggregate-functions/reference/count) или [avg](/sql-reference/aggregate-functions/reference/avg) с одинаковым аргументом, в вызов [sumCount](/sql-reference/aggregate-functions/reference/sumcount). - -Возможные значения: - -* 0 — функции с одинаковым аргументом не объединяются. -* 1 — функции с одинаковым аргументом объединяются. - -**Пример** - -Запрос: - -```sql -CREATE TABLE fuse_tbl(a Int8, b Int8) Engine = Log; -SET optimize_syntax_fuse_functions = 1; -EXPLAIN SYNTAX SELECT sum(a), sum(b), count(b), avg(b) from fuse_tbl FORMAT TSV; -``` - -Результат: - -```text -SELECT - sum(a), - sumCount(b).1, - sumCount(b).2, - (sumCount(b).1) / (sumCount(b).2) -FROM fuse_tbl -``` - - -## optimize_throw_if_noop {#optimize_throw_if_noop} - - - -Включает или отключает выбрасывание исключения, если запрос [OPTIMIZE](../../sql-reference/statements/optimize.md) не выполнил слияние. - -По умолчанию `OPTIMIZE` успешно завершается, даже если он ничего не сделал. Эта настройка позволяет различать такие ситуации и получать причину в сообщении исключения. - -Возможные значения: - -- 1 — выбрасывание исключения включено. -- 0 — выбрасывание исключения отключено. - -## optimize_time_filter_with_preimage {#optimize_time_filter_with_preimage} - - - - col >= '2023-01-01' AND col <= '2023-12-31')"}]}]}/> - -Оптимизирует предикаты типов Date и DateTime, преобразуя функции в эквивалентные сравнения без приведения типов (например, `toYear(col) = 2023 -> col >= '2023-01-01' AND col <= '2023-12-31'`) - -## optimize_trivial_approximate_count_query {#optimize_trivial_approximate_count_query} - - - -Использовать приблизительное значение для тривиальной оптимизации запросов `count` в хранилищах, которые поддерживают такую оценку, например, EmbeddedRocksDB. - -Возможные значения: - -- 0 — Оптимизация отключена. - - 1 — Оптимизация включена. - -## optimize_trivial_count_query {#optimize_trivial_count_query} - - - -Включает или отключает оптимизацию тривиального запроса `SELECT count() FROM table` с использованием метаданных MergeTree. Если вам нужно использовать безопасность на уровне строк (row-level security), отключите этот параметр. - -Возможные значения: - -- 0 — Оптимизация отключена. - - 1 — Оптимизация включена. - -См. также: - -- [optimize_functions_to_subcolumns](#optimize_functions_to_subcolumns) - -## optimize_trivial_insert_select {#optimize_trivial_insert_select} - - - - - -Оптимизирует тривиальные запросы вида `INSERT INTO table SELECT ... FROM TABLES` - -## optimize_uniq_to_count {#optimize_uniq_to_count} - - - -Заменяет uniq и его варианты (кроме uniqUpTo) на count, если подзапрос содержит предложение DISTINCT или GROUP BY. - -## optimize_use_implicit_projections {#optimize_use_implicit_projections} - - - -Автоматически выбирать неявные проекции для выполнения запроса SELECT - -## optimize_use_projection_filtering {#optimize_use_projection_filtering} - - - - - -Включает использование проекций для фильтрации диапазонов партиций, даже если проекции не выбраны для выполнения запроса SELECT. - -## optimize_use_projections {#optimize_use_projections} - -**Псевдонимы**: `allow_experimental_projection_optimization` - - - -Включает или отключает оптимизацию [проекций](../../engines/table-engines/mergetree-family/mergetree.md/#projections) при обработке запросов `SELECT`. - -Возможные значения: - -- 0 — оптимизация проекций отключена. -- 1 — оптимизация проекций включена. - -## optimize_using_constraints {#optimize_using_constraints} - - - -Используйте [ограничения](../../sql-reference/statements/create/table.md/#constraints) для оптимизации запросов. Значение по умолчанию — `false`. - -Возможные значения: - -- true, false - -## os_threads_nice_value_materialized_view {#os_threads_nice_value_materialized_view} - - - - - -Значение Linux nice для потоков материализованного представления. Меньшие значения означают более высокий приоритет использования CPU. - -Требуются права CAP_SYS_NICE, в противном случае параметр не оказывает эффекта. - -Возможные значения: от -20 до 19. - -## os_threads_nice_value_query {#os_threads_nice_value_query} - -**Псевдонимы**: `os_thread_priority` - - - - - -Значение nice в Linux для потоков обработки запросов. Более низкие значения означают более высокий приоритет использования CPU. - -Требует привилегии CAP_SYS_NICE, в противном случае параметр не оказывает эффекта. - -Возможные значения: от -20 до 19. - -## output_format_compression_level {#output_format_compression_level} - - - - - -Уровень сжатия по умолчанию, если результат запроса сжимается. Настройка применяется, когда запрос `SELECT` содержит `INTO OUTFILE` или при записи в табличные функции `file`, `url`, `hdfs`, `s3` или `azureBlobStorage`. - -Возможные значения: от `1` до `22` - -## output_format_compression_zstd_window_log {#output_format_compression_zstd_window_log} - - - - - -Может использоваться, если в качестве метода сжатия вывода задан `zstd`. Если значение больше `0`, этот параметр явно задаёт размер окна сжатия (степень двойки) и включает режим long-range для сжатия zstd. Это может помочь добиться лучшего коэффициента сжатия. - -Возможные значения: неотрицательные числа. Обратите внимание, что если значение слишком мало или слишком велико, `zstdlib` выбросит исключение. Типичные значения — от `20` (размер окна = `1MB`) до `30` (размер окна = `1GB`). - -## output_format_parallel_formatting {#output_format_parallel_formatting} - - - -Включает или отключает параллельное формирование данных в форматах. Поддерживается только для форматов [TSV](/interfaces/formats/TabSeparated), [TSKV](/interfaces/formats/TSKV), [CSV](/interfaces/formats/CSV) и [JSONEachRow](/interfaces/formats/JSONEachRow). - -Возможные значения: - -- 1 — Включено. -- 0 — Отключено. - -## page_cache_block_size {#page_cache_block_size} - - - - - -Размер фрагментов файлов, хранимых в пользовательском кэше страниц (userspace page cache), в байтах. Все чтения, проходящие через кэш, будут округляться до кратного этому размеру. - -Этот параметр можно настраивать на уровне отдельного запроса, но записи кэша с разными размерами блоков не могут быть повторно использованы. Изменение этого параметра по сути делает существующие записи в кэше недействительными. - -Большее значение, например 1 MiB, подходит для запросов с высокой пропускной способностью, а меньшее значение, например 64 KiB, — для точечных запросов с низкой задержкой. - -## page_cache_inject_eviction {#page_cache_inject_eviction} - - - - - -Кэш страниц в пространстве пользователя иногда случайным образом инвалидирует некоторые страницы. Параметр предназначен для тестирования. - -## page_cache_lookahead_blocks {#page_cache_lookahead_blocks} - - - - - -При промахе по пользовательскому кэшу страниц (userspace page cache) считывается до указанного количества последовательных блоков из нижележащего хранилища, если они также отсутствуют в кэше. Каждый блок имеет размер page_cache_block_size байт. - -Большее значение подходит для запросов с высокой пропускной способностью, тогда как точечные запросы с низкой задержкой будут работать лучше без опережающего чтения. - -## parallel_distributed_insert_select {#parallel_distributed_insert_select} - - - - - -Включает параллельное распределённое выполнение запроса `INSERT ... SELECT`. - -Если выполняется запрос `INSERT INTO distributed_table_a SELECT ... FROM distributed_table_b`, и обе таблицы используют один и тот же кластер, и обе таблицы являются либо [реплицируемыми](../../engines/table-engines/mergetree-family/replication.md), либо нереплицируемыми, то этот запрос обрабатывается локально на каждом шарде. - -Возможные значения: - -- `0` — Отключено. -- `1` — `SELECT` будет выполняться на каждом шарде из подлежащей таблицы движка `Distributed`. -- `2` — `SELECT` и `INSERT` будут выполняться на каждом шарде из/в подлежащую таблицу движка `Distributed`. - -При использовании этой настройки необходимо установить `enable_parallel_replicas = 1`. - -## parallel_hash_join_threshold {#parallel_hash_join_threshold} - - - - - -При использовании алгоритма соединения по хэш-таблице этот порог определяет, следует ли применять `hash` или `parallel_hash` (только если доступна оценка размера правой таблицы). -`hash` используется, когда известно, что размер правой таблицы ниже этого порога. - -## parallel_replica_offset {#parallel_replica_offset} - - - - - -Это внутренняя настройка, которая не предназначена для прямого использования и является деталями реализации режима «parallel replicas». Это значение будет автоматически установлено инициирующим сервером для распределённых запросов на индекс той реплики, которая участвует в обработке запроса среди параллельных реплик. - -## parallel_replicas_allow_in_with_subquery {#parallel_replicas_allow_in_with_subquery} - - - - - - - -Если параметр имеет значение true, подзапрос в операторе IN будет выполняться на каждой ведомой реплике. - -## parallel_replicas_connect_timeout_ms {#parallel_replicas_connect_timeout_ms} - - - - - - - -Таймаут в миллисекундах для подключения к удалённой реплике во время выполнения запроса с параллельными репликами. Если таймаут истёк, соответствующая реплика не используется для выполнения запроса. - -## parallel_replicas_count {#parallel_replicas_count} - - - - - -Это внутренний параметр, который не следует использовать напрямую и который является деталью реализации режима `parallel replicas`. Для распределённых запросов это значение будет автоматически установлено инициирующим сервером и будет равно количеству параллельных реплик, участвующих в обработке запроса. - -## parallel_replicas_custom_key {#parallel_replicas_custom_key} - - - -Произвольное целочисленное выражение, которое может использоваться для разделения работы между репликами для заданной таблицы. -Значением может быть любое целочисленное выражение. - -Предпочтительны простые выражения на основе первичного ключа. - -Если настройка используется в кластере, состоящем из одного шарда с несколькими репликами, эти реплики будут преобразованы в виртуальные шарды. -В противном случае поведение будет таким же, как у ключа `SAMPLE`: будут использоваться несколько реплик каждого шарда. - -## parallel_replicas_custom_key_range_lower {#parallel_replicas_custom_key_range_lower} - - - - - - - -Позволяет фильтру типа `range` равномерно распределять объём работы между репликами на основе пользовательского диапазона `[parallel_replicas_custom_key_range_lower, INT_MAX]`. - -При совместном использовании с [parallel_replicas_custom_key_range_upper](#parallel_replicas_custom_key_range_upper) позволяет фильтру равномерно распределять объём работы между репликами для диапазона `[parallel_replicas_custom_key_range_lower, parallel_replicas_custom_key_range_upper]`. - -Примечание: эта настройка не приводит к дополнительной фильтрации данных во время выполнения запроса, а лишь изменяет точки, в которых диапазонный фильтр разбивает диапазон `[0, INT_MAX]` для параллельной обработки. - -## parallel_replicas_custom_key_range_upper {#parallel_replicas_custom_key_range_upper} - - - - - - - -Позволяет фильтру типа `range` равномерно распределять работу между репликами на основе пользовательского диапазона `[0, parallel_replicas_custom_key_range_upper]`. Значение 0 отключает верхнюю границу, устанавливая её в максимальное значение выражения пользовательского ключа. - -При совместном использовании с [parallel_replicas_custom_key_range_lower](#parallel_replicas_custom_key_range_lower) позволяет фильтру равномерно распределять работу между репликами для диапазона `[parallel_replicas_custom_key_range_lower, parallel_replicas_custom_key_range_upper]`. - -Примечание: эта настройка не приводит к дополнительной фильтрации данных при обработке запроса, а изменяет точки, в которых диапазонный фильтр разбивает диапазон `[0, INT_MAX]` для параллельной обработки. - -## parallel_replicas_for_cluster_engines {#parallel_replicas_for_cluster_engines} - - - - - -Заменяет движки табличных функций на их варианты с суффиксом -Cluster - -## parallel_replicas_for_non_replicated_merge_tree {#parallel_replicas_for_non_replicated_merge_tree} - - - - - -Если установлено в значение true, ClickHouse будет использовать алгоритм параллельных реплик также для нереплицируемых таблиц MergeTree - -## parallel_replicas_index_analysis_only_on_coordinator {#parallel_replicas_index_analysis_only_on_coordinator} - - - - - - - -Анализ индексов выполняется только на replica-coordinator и не выполняется на других репликах. Действует только при включённом параметре parallel_replicas_local_plan - -## parallel_replicas_insert_select_local_pipeline {#parallel_replicas_insert_select_local_pipeline} - - - - - - - -Использовать локальный конвейер при распределённой операции INSERT SELECT с параллельными репликами - -## parallel_replicas_local_plan {#parallel_replicas_local_plan} - - - - - - - -Создавать локальный план для локальной реплики - -## parallel_replicas_mark_segment_size {#parallel_replicas_mark_segment_size} - - - - - - - -Части логически (виртуально) делятся на сегменты, которые распределяются между репликами для параллельного чтения. Этот параметр управляет размером этих сегментов. Не рекомендуется изменять его, пока вы не будете абсолютно уверены в своих действиях. Значение должно быть в диапазоне [128; 16384] - -## parallel_replicas_min_number_of_rows_per_replica {#parallel_replicas_min_number_of_rows_per_replica} - - - - - -Ограничивает число реплик, используемых в запросе, значением (оценочное число строк для чтения / min_number_of_rows_per_replica). Максимальное значение по‑прежнему ограничено параметром `max_parallel_replicas`. - -## parallel_replicas_mode {#parallel_replicas_mode} - - - - - - - -Тип фильтра, используемого с пользовательским ключом для параллельных реплик. `default` — использовать операцию взятия по модулю над пользовательским ключом, `range` — использовать диапазонный фильтр по пользовательскому ключу с перебором всех возможных значений для типа значения пользовательского ключа. - -## parallel_replicas_only_with_analyzer {#parallel_replicas_only_with_analyzer} - - - - - - - -Для использования параллельных реплик анализатор должен быть включён. При отключённом анализаторе запрос выполняется локально, даже если включено параллельное чтение с реплик. Использование параллельных реплик при отключённом анализаторе не поддерживается. - -## parallel_replicas_prefer_local_join {#parallel_replicas_prefer_local_join} - - - - - - - -Если значение равно true, и JOIN может быть выполнен с использованием алгоритма параллельных реплик, и все хранилища правой части JOIN относятся к типу *MergeTree, будет использован локальный JOIN вместо GLOBAL JOIN. - -## parallel_replicas_support_projection {#parallel_replicas_support_projection} - - - - - - - -Оптимизация проекций может применяться на параллельных репликах. Действует только при включённом parallel_replicas_local_plan и выключенном aggregation_in_order. - -## parallel_view_processing {#parallel_view_processing} - - - -Включает параллельную отправку данных в подключённые представления вместо последовательной. - -## parallelize_output_from_storages {#parallelize_output_from_storages} - - - - - -Параллелизирует вывод на этапе чтения из хранилища. Позволяет, при возможности, распараллелить обработку запроса сразу после чтения из хранилища. - -## parsedatetime_e_requires_space_padding {#parsedatetime_e_requires_space_padding} - - - - - -Форматтер '%e' в функции 'parseDateTime' ожидает, что однозначные значения дня будут дополнены слева пробелом: например, ' 2' принимается, а '2' приводит к ошибке. - -## parsedatetime_parse_without_leading_zeros {#parsedatetime_parse_without_leading_zeros} - - - - - -Спецификаторы формата '%c', '%l' и '%k' в функции 'parseDateTime' разбирают значения месяцев и часов без ведущих нулей. - -## partial_merge_join_left_table_buffer_bytes {#partial_merge_join_left_table_buffer_bytes} - - - -Если не равно 0, объединяет блоки левой таблицы в более крупные для левой стороны при частичном соединении merge. Использует до 2× указанного объёма памяти на поток соединения. - -## partial_merge_join_rows_in_right_blocks {#partial_merge_join_rows_in_right_blocks} - - - -Ограничивает размер блоков данных правой части соединения в алгоритме частичного слияния для запросов [JOIN](../../sql-reference/statements/select/join.md). - -Сервер ClickHouse: - -1. Разбивает данные правой части соединения на блоки с количеством строк не более указанного значения. -2. Индексирует каждый блок по его минимальным и максимальным значениям. -3. Выгружает подготовленные блоки на диск, если это возможно. - -Возможные значения: - -- Любое положительное целое число. Рекомендуемый диапазон значений: \[1000, 100000\]. - -## partial_result_on_first_cancel {#partial_result_on_first_cancel} - - - -Позволяет вернуть частичный результат после отмены выполнения запроса. - -## parts_to_delay_insert {#parts_to_delay_insert} - - - -Если целевая таблица содержит как минимум такое количество активных частей в одной партиции, операция вставки в таблицу искусственно замедляется. - -## parts_to_throw_insert {#parts_to_throw_insert} - - - -Если в одном разделе целевой таблицы число активных частей превышает это значение, будет выброшено исключение «Too many parts ...». - -## per_part_index_stats {#per_part_index_stats} - - - - - -Записывает статистику индекса для каждой части - -## poll_interval {#poll_interval} - - - -Приостанавливает цикл ожидания запроса на сервере на указанное число секунд. - -## postgresql_connection_attempt_timeout {#postgresql_connection_attempt_timeout} - - - - - -Таймаут (в секундах) для отдельной попытки подключения к конечной точке PostgreSQL. -Значение передаётся как параметр `connect_timeout` в URL подключения. - -## postgresql_connection_pool_auto_close_connection {#postgresql_connection_pool_auto_close_connection} - - - -Закрывать соединение перед возвратом в пул. - -## postgresql_connection_pool_retries {#postgresql_connection_pool_retries} - - - - - -Количество повторных попыток операций push/pop в пуле подключений для движка таблиц PostgreSQL и движка баз данных PostgreSQL. - -## postgresql_connection_pool_size {#postgresql_connection_pool_size} - - - -Размер пула подключений для движков таблиц и баз данных PostgreSQL. - -## postgresql_connection_pool_wait_timeout {#postgresql_connection_pool_wait_timeout} - - - -Тайм-аут ожидания операций push/pop в пуле подключений при пустом пуле для движка таблиц PostgreSQL и движка баз данных PostgreSQL. По умолчанию при пустом пуле операции будут блокироваться. - -## postgresql_fault_injection_probability {#postgresql_fault_injection_probability} - - - - - -Приблизительная вероятность искусственного отказа внутренних запросов PostgreSQL (для репликации). Допустимое значение — в интервале [0.0f, 1.0f] - -## prefer_column_name_to_alias - - - -Включает или отключает использование исходных имён столбцов вместо псевдонимов в выражениях и конструкциях запроса. Это особенно важно, когда псевдоним совпадает с именем столбца, см. [Expression Aliases](/sql-reference/syntax#notes-on-usage). Включите этот параметр, чтобы сделать правила синтаксиса псевдонимов в ClickHouse более совместимыми с правилами в большинстве других систем управления базами данных. - -Возможные значения: - -* 0 — Имя столбца заменяется псевдонимом. -* 1 — Имя столбца не заменяется псевдонимом. - -**Пример** - -Различие между включённой и отключённой настройкой: - -Запрос: - -```sql -SET prefer_column_name_to_alias = 0; -SELECT avg(number) AS number, max(number) FROM numbers(10); -``` - -Результат: - -```text -Получено исключение от сервера (версия 21.5.1): -Код: 184. DB::Exception: Получено от localhost:9000. DB::Exception: Агрегатная функция avg(number) найдена внутри другой агрегатной функции в запросе: При обработке avg(number) AS number. -``` - -Запрос: - -```sql -SET prefer_column_name_to_alias = 1; -SELECT avg(number) AS number, max(number) FROM numbers(10); -``` - -Результат: - -```text -┌─number─┬─max(number)─┐ -│ 4.5 │ 9 │ -└────────┴─────────────┘ -``` - - -## prefer_external_sort_block_bytes {#prefer_external_sort_block_bytes} - - - - - -Предпочитать наибольший размер блока в байтах при внешней сортировке, чтобы уменьшить расход памяти при слиянии. - -## prefer_global_in_and_join {#prefer_global_in_and_join} - - - -Включает замену операторов `IN`/`JOIN` на `GLOBAL IN`/`GLOBAL JOIN`. - -Возможные значения: - -- 0 — Отключено. Операторы `IN`/`JOIN` не заменяются на `GLOBAL IN`/`GLOBAL JOIN`. -- 1 — Включено. Операторы `IN`/`JOIN` заменяются на `GLOBAL IN`/`GLOBAL JOIN`. - -**Использование** - -Хотя `SET distributed_product_mode=global` может изменить поведение запросов для распределённых таблиц, эта настройка не подходит для локальных таблиц или таблиц из внешних источников. В таких случаях применяется настройка `prefer_global_in_and_join`. - -Например, у нас есть узлы, обслуживающие запросы и содержащие локальные таблицы, которые не подходят для распределения. Нам нужно распределять их данные «на лету» во время распределённой обработки с использованием ключевого слова `GLOBAL` — `GLOBAL IN`/`GLOBAL JOIN`. - -Другой вариант использования `prefer_global_in_and_join` — доступ к таблицам, созданным внешними движками. Эта настройка помогает сократить количество обращений к внешним источникам при соединении таких таблиц: только один вызов на каждый запрос. - -**См. также:** - -- [Распределённые подзапросы](/sql-reference/operators/in#distributed-subqueries) для получения дополнительной информации об использовании `GLOBAL IN`/`GLOBAL JOIN` - -## prefer_localhost_replica {#prefer_localhost_replica} - - - -Включает/отключает предпочтительное использование локальной реплики (localhost) при обработке распределённых запросов. - -Возможные значения: - -- 1 — ClickHouse всегда отправляет запрос на локальную реплику, если она существует. -- 0 — ClickHouse использует стратегию балансировки, указанную в настройке [load_balancing](#load_balancing). - -:::note -Отключите этот параметр, если вы используете [max_parallel_replicas](#max_parallel_replicas) без [parallel_replicas_custom_key](#parallel_replicas_custom_key). -Если для [parallel_replicas_custom_key](#parallel_replicas_custom_key) задано значение, отключайте этот параметр только в том случае, если он используется в кластере с несколькими шардами, содержащими несколько реплик. -Если он используется в кластере с одним шардом и несколькими репликами, отключение этого параметра окажет негативное влияние. -::: - -## prefer_warmed_unmerged_parts_seconds {#prefer_warmed_unmerged_parts_seconds} - - - - - -Действует только в ClickHouse Cloud. Если слитая часть моложе указанного количества секунд и не была предварительно прогрета (см. [cache_populated_by_fetch](merge-tree-settings.md/#cache_populated_by_fetch)), но все её исходные части доступны и предварительно прогреты, то SELECT-запросы будут считывать данные из этих исходных частей. Применяется только для Replicated-/SharedMergeTree. Обратите внимание, что здесь проверяется только факт обработки части CacheWarmer: если часть была помещена в кэш чем-то другим, она всё равно будет считаться «холодной», пока до неё не доберётся CacheWarmer; если же часть была прогрета, а затем вытеснена из кэша, она всё равно будет считаться «тёплой». - -## preferred_block_size_bytes {#preferred_block_size_bytes} - - - -Этот параметр настраивает размер блока данных для обработки запросов и представляет собой дополнительную тонкую настройку по сравнению с более грубым параметром `max_block_size`. Если столбцы большие и при числе строк, равном `max_block_size`, ожидаемый размер блока, скорее всего, превышает указанное количество байт, его размер будет уменьшен для улучшения локальности кэша процессора. - -## preferred_max_column_in_block_size_bytes {#preferred_max_column_in_block_size_bytes} - - - -Ограничение максимально допустимого размера столбца в блоке при чтении. Помогает уменьшить количество промахов кэша. Значение должно быть близко к размеру L2-кэша. - -## preferred_optimize_projection_name {#preferred_optimize_projection_name} - -Если параметр установлен в непустую строку, ClickHouse попытается применить указанную проекцию в запросе. - -Возможные значения: - -- string: имя предпочтительной проекции - -## prefetch_buffer_size {#prefetch_buffer_size} - - - -Максимальный размер буфера предварительного чтения из файловой системы. - -## print_pretty_type_names - - - - - -Позволяет выводить глубоко вложенные имена типов в более удобочитаемом виде с отступами в запросах `DESCRIBE` и в функции `toTypeName()`. - -Пример: - -```sql -CREATE TABLE test (a Tuple(b String, c Tuple(d Nullable(UInt64), e Array(UInt32), f Array(Tuple(g String, h Map(String, Array(Tuple(i String, j UInt64))))), k Date), l Nullable(String))) ENGINE=Memory; -DESCRIBE TABLE test FORMAT TSVRaw SETTINGS print_pretty_type_names=1; -``` - -``` -a Tuple( - b String, - c Tuple( - d Nullable(UInt64), - e Array(UInt32), - f Array(Tuple( - g String, - h Map( - String, - Array(Tuple( - i String, - j UInt64 - )) - ) - )), - k Date - ), - l Nullable(String) -) -``` - - -## priority {#priority} - - - -Приоритет запроса. 1 — наивысший, большее значение — более низкий приоритет; 0 — не использовать приоритет. - -## promql_database {#promql_database} - - - - - -Указывает имя базы данных, используемой диалектом `promql`. Пустая строка означает текущую базу данных. - -## promql_evaluation_time {#promql_evaluation_time} - - - -**Псевдонимы**: `evaluation_time` - - - - - -Устанавливает время вычисления, используемое диалектом PromQL. Значение `auto` означает текущее время. - -## promql_table {#promql_table} - - - - - -Задаёт имя таблицы `TimeSeries`, используемой диалектом `promql`. - -## push_external_roles_in_interserver_queries {#push_external_roles_in_interserver_queries} - - - - - -Включает передачу ролей пользователей с узла-инициатора на другие узлы при выполнении запроса. - -## query_cache_compress_entries {#query_cache_compress_entries} - - - -Сжимать записи в [кэше запросов](../query-cache.md). Уменьшает потребление памяти кэшем запросов за счет более медленных операций вставки и чтения. - -Возможные значения: - -- 0 — отключено -- 1 — включено - -## query_cache_max_entries {#query_cache_max_entries} - - - -Максимальное количество результатов запросов, которое текущий пользователь может сохранить в [кэше запросов](../query-cache.md). 0 означает отсутствие ограничений. - -Возможные значения: - -- Целое неотрицательное число (>= 0). - -## query_cache_max_size_in_bytes {#query_cache_max_size_in_bytes} - - - -Максимальный объем памяти (в байтах), который текущий пользователь может выделить в [кэше запросов](../query-cache.md). 0 — без ограничений. - -Возможные значения: - -- Положительное целое число >= 0. - -## query_cache_min_query_duration {#query_cache_min_query_duration} - - - -Минимальная продолжительность в миллисекундах, в течение которой запрос должен выполняться, чтобы его результат был сохранён в [кэше запросов](../query-cache.md). - -Возможные значения: - -- Положительное целое число >= 0. - -## query_cache_min_query_runs {#query_cache_min_query_runs} - - - -Минимальное количество запусков запроса `SELECT`, прежде чем его результат будет сохранён в [кэше запросов](../query-cache.md). - -Возможные значения: - -- Неотрицательное целое число (>= 0). - -## query_cache_nondeterministic_function_handling {#query_cache_nondeterministic_function_handling} - - - -Определяет, как [кэш запросов](../query-cache.md) обрабатывает `SELECT`-запросы с недетерминированными функциями, такими как `rand()` или `now()`. - -Возможные значения: - -- `'throw'` - Выбрасывать исключение и не кэшировать результат запроса. -- `'save'` - Кэшировать результат запроса. -- `'ignore'` - Не кэшировать результат запроса и не выбрасывать исключение. - -## query_cache_share_between_users {#query_cache_share_between_users} - - - -Если включено, результат запросов `SELECT`, кэшируемых в [кэше запросов](../query-cache.md), может быть прочитан другими пользователями. -Не рекомендуется включать этот параметр по соображениям безопасности. - -Возможные значения: - -- 0 — отключено -- 1 — включено - -## query_cache_squash_partial_results {#query_cache_squash_partial_results} - - - -Объединяет блоки частичных результатов в блоки размера [max_block_size](#max_block_size). Уменьшает производительность операций вставки в [кеш запросов](../query-cache.md), но улучшает сжимаемость записей кеша (см. [query_cache_compress-entries](#query_cache_compress_entries)). - -Возможные значения: - -- 0 - Отключено -- 1 - Включено - -## query_cache_system_table_handling {#query_cache_system_table_handling} - - - - - -Определяет, как [кэш запросов](../query-cache.md) обрабатывает запросы `SELECT` к системным таблицам, то есть таблицам в базах данных `system.*` и `information_schema.*`. - -Возможные значения: - -- `'throw'` — Выдавать исключение и не кэшировать результат запроса. -- `'save'` — Кэшировать результат запроса. -- `'ignore'` — Не кэшировать результат запроса и не выдавать исключение. - -## query_cache_tag {#query_cache_tag} - - - -Строка, которая служит меткой для записей [кэша запросов](../query-cache.md). -Одинаковые запросы с разными метками считаются кэшем запросов разными. - -Возможные значения: - -- Любая строка - -## query_cache_ttl {#query_cache_ttl} - - - -По истечении указанного количества секунд записи в [кеше запросов](../query-cache.md) считаются устаревшими. - -Возможные значения: - -- Положительное целое число >= 0. - -## query_condition_cache_store_conditions_as_plaintext {#query_condition_cache_store_conditions_as_plaintext} - - - - - -Сохраняет условие фильтра для [кэша условий запросов](/operations/query-condition-cache) в открытом (plaintext) виде. -Если параметр включён, system.query_condition_cache показывает условие фильтра дословно, что упрощает отладку проблем с кэшем. -По умолчанию параметр отключён, так как условие фильтра в открытом виде может раскрывать конфиденциальную информацию. - -Возможные значения: - -- 0 — Отключено -- 1 — Включено - -## query_metric_log_interval {#query_metric_log_interval} - - - - - -Интервал в миллисекундах, с которым выполняется сбор [query_metric_log](../../operations/system-tables/query_metric_log.md) для отдельных запросов. - -Если установлено отрицательное значение, будет использоваться значение `collect_interval_milliseconds` из [настройки query_metric_log](/operations/server-configuration-parameters/settings#query_metric_log) или значение по умолчанию 1000, если оно не указано. - -Чтобы отключить сбор для одного запроса, установите `query_metric_log_interval` в 0. - -Значение по умолчанию: -1 - -## query_plan_aggregation_in_order {#query_plan_aggregation_in_order} - - - - - -Включает или отключает оптимизацию на уровне плана запроса для агрегации с сохранением порядка (in-order). -Имеет эффект только если параметр [`query_plan_enable_optimizations`](#query_plan_enable_optimizations) установлен в 1. - -:::note -Это настройка для экспертов, которая должна использоваться только разработчиками для отладки. В будущем параметр может измениться несовместимым с прошлой версией образом или быть удалён. -::: - -Возможные значения: - -- 0 — Отключить -- 1 — Включить - -## query_plan_convert_any_join_to_semi_or_anti_join {#query_plan_convert_any_join_to_semi_or_anti_join} - - - - - -Позволяет преобразовывать ANY JOIN в SEMI или ANTI JOIN, если фильтр после JOIN всегда принимает значение false для несовпадающих или совпадающих строк - -## query_plan_convert_join_to_in {#query_plan_convert_join_to_in} - - - - - -Разрешает преобразовывать `JOIN` в подзапрос с `IN`, если выходные столбцы зависят только от левой таблицы. Может приводить к неверным результатам для `JOIN`, отличных от `ANY` (например, `ALL JOIN`, используемого по умолчанию). - -## query_plan_convert_outer_join_to_inner_join {#query_plan_convert_outer_join_to_inner_join} - - - - - -Разрешает преобразование `OUTER JOIN` в `INNER JOIN`, если фильтр после `JOIN` всегда отфильтровывает значения по умолчанию - -## query_plan_direct_read_from_text_index {#query_plan_direct_read_from_text_index} - - - - - -Позволяет выполнять фильтрацию при полнотекстовом поиске, используя в плане запроса только инвертированный индекс. - -## query_plan_display_internal_aliases {#query_plan_display_internal_aliases} - - - - - -Показывать внутренние псевдонимы (например __table1) в EXPLAIN PLAN вместо тех, которые указаны в исходном запросе. - -## query_plan_enable_multithreading_after_window_functions {#query_plan_enable_multithreading_after_window_functions} - - - -Включает многопоточность после вычисления оконных функций, что позволяет параллельно обрабатывать потоки данных - -## query_plan_enable_optimizations {#query_plan_enable_optimizations} - - - -Включает или отключает оптимизацию запросов на уровне плана запроса. - -:::note -Это настройка экспертного уровня, которую разработчики должны использовать только для целей отладки. В будущем настройка может измениться несовместимым с предыдущими версиями способом или быть удалена. -::: - -Возможные значения: - -- 0 - Отключить все оптимизации на уровне плана запроса -- 1 - Включить оптимизации на уровне плана запроса (но отдельные оптимизации всё ещё могут быть отключены с помощью их индивидуальных настроек) - -## query_plan_execute_functions_after_sorting {#query_plan_execute_functions_after_sorting} - - - -Переключает оптимизацию на уровне плана запроса, которая переносит вычисление выражений на этапы после сортировки. -Вступает в силу только если параметр [`query_plan_enable_optimizations`](#query_plan_enable_optimizations) установлен в 1. - -:::note -Это параметр для экспертов, который следует использовать только для отладки разработчиками. В будущем он может измениться с нарушением обратной совместимости или быть удалён. -::: - -Возможные значения: - -- 0 — отключить -- 1 — включить - -## query_plan_filter_push_down {#query_plan_filter_push_down} - - - -Включает или отключает оптимизацию на уровне плана запроса, которая перемещает фильтры глубже в план выполнения. -Действует только в том случае, если параметр [query_plan_enable_optimizations](#query_plan_enable_optimizations) установлен в 1. - -:::note -Это параметр для опытных пользователей, который разработчики должны использовать только для отладки. В будущем параметр может измениться с нарушением обратной совместимости или быть удалён. -::: - -Возможные значения: - -- 0 - Отключить -- 1 - Включить - -## query_plan_join_shard_by_pk_ranges {#query_plan_join_shard_by_pk_ranges} - - - - - -Выполнять шардирование для JOIN, если ключи соединения содержат префикс PRIMARY KEY обеих таблиц. Поддерживается для алгоритмов hash, parallel_hash и full_sorting_merge. Как правило, не ускоряет выполнение запросов, но может уменьшить потребление памяти. - -## query_plan_join_swap_table {#query_plan_join_swap_table} - - - - - -Определяет, какая сторона соединения должна быть build-таблицей (также называемой inner — той, которая вставляется в хеш-таблицу для хешевого соединения) в плане выполнения запроса. Этот параметр поддерживается только для строгости соединения `ALL` с предложением `JOIN ON`. Возможные значения: - -- 'auto': позволить планировщику решить, какую таблицу использовать как build-таблицу. - - 'false': никогда не менять таблицы местами (правая таблица является build-таблицей). - - 'true': всегда менять таблицы местами (левая таблица является build-таблицей). - -## query_plan_lift_up_array_join {#query_plan_lift_up_array_join} - - - -Включает или отключает оптимизацию на уровне плана запроса, которая переносит операции ARRAY JOIN выше в плане выполнения. -Применяется только если настройка [query_plan_enable_optimizations](#query_plan_enable_optimizations) равна 1. - -:::note -Это настройка экспертного уровня, которую должны использовать только разработчики для отладки. В будущем настройка может измениться с нарушением обратной совместимости или быть удалена. -::: - -Возможные значения: - -- 0 - Отключить -- 1 - Включить - -## query_plan_lift_up_union {#query_plan_lift_up_union} - - - -Включает оптимизацию на уровне плана запроса, которая поднимает более крупные поддеревья плана запроса в `UNION`, чтобы дать возможность дальнейшим оптимизациям. -Применяется только если настройка [`query_plan_enable_optimizations`](#query_plan_enable_optimizations) равна 1. - -:::note -Это экспертная настройка, которую следует использовать только разработчикам для отладки. В будущем параметр может быть изменён несовместимым образом или удалён. -::: - -Возможные значения: - -- 0 — Отключить -- 1 — Включить - -## query_plan_max_limit_for_lazy_materialization {#query_plan_max_limit_for_lazy_materialization} - - - - - -Управляет максимальным пороговым значением, при котором можно использовать план запроса для оптимизации ленивой материализации. При нулевом значении ограничение отсутствует. - -## query_plan_max_optimizations_to_apply {#query_plan_max_optimizations_to_apply} - - - -Ограничивает общее количество оптимизаций, применяемых к плану запроса, см. настройку [query_plan_enable_optimizations](#query_plan_enable_optimizations). -Полезно для предотвращения чрезмерно долгой оптимизации сложных запросов. -В запросе EXPLAIN PLAN оптимизации перестают применяться после достижения этого лимита, и план возвращается как есть. -При обычном выполнении запроса, если фактическое количество оптимизаций превышает это значение настройки, выбрасывается исключение. - -:::note -Это настройка экспертного уровня, которую следует использовать только для отладки разработчиками. В будущем настройка может быть изменена с нарушением обратной совместимости или удалена. -::: - -## query_plan_max_step_description_length {#query_plan_max_step_description_length} - - - - - -Максимальная длина описания шага в `EXPLAIN PLAN`. - -## query_plan_merge_expressions {#query_plan_merge_expressions} - - - -Включает или отключает оптимизацию на уровне плана запроса, объединяющую последовательные фильтры. -Применяется только если параметр [query_plan_enable_optimizations](#query_plan_enable_optimizations) установлен в значение 1. - -:::note -Это параметр для экспертов, который следует использовать только разработчикам для отладки. В будущем он может быть изменён с нарушением обратной совместимости или удалён. -::: - -Возможные значения: - -- 0 — Отключить -- 1 — Включить - -## query_plan_merge_filter_into_join_condition {#query_plan_merge_filter_into_join_condition} - - - - - -Позволяет объединять фильтр с условием `JOIN` и преобразовывать `CROSS JOIN` в `INNER JOIN`. - -## query_plan_merge_filters {#query_plan_merge_filters} - - - - - -Разрешает объединять фильтры в плане запроса. - -## query_plan_optimize_join_order_limit {#query_plan_optimize_join_order_limit} - - - - - -Оптимизирует порядок операций JOIN в пределах одного и того же подзапроса. В настоящее время поддерживается только для очень ограниченного числа случаев. - Значение задаёт максимальное количество таблиц, для которых выполняется оптимизация. - -## query_plan_optimize_lazy_materialization {#query_plan_optimize_lazy_materialization} - - - - - -Использовать план запроса для оптимизации отложенной материализации. - -## query_plan_optimize_prewhere {#query_plan_optimize_prewhere} - - - - - -Разрешает проталкивать фильтр в выражение PREWHERE для поддерживаемых хранилищ - -## query_plan_push_down_limit {#query_plan_push_down_limit} - - - -Включает оптимизацию на уровне плана запроса, которая перемещает операторы LIMIT вниз по плану выполнения. -Вступает в силу только если настройка [query_plan_enable_optimizations](#query_plan_enable_optimizations) установлена в 1. - -:::note -Это экспертная настройка, которую разработчики должны использовать только для отладки. Настройка может измениться в будущем с нарушением обратной совместимости или быть удалена. -::: - -Возможные значения: - -- 0 - Отключить -- 1 - Включить - -## query_plan_read_in_order {#query_plan_read_in_order} - - - -Включает или отключает оптимизацию чтения в упорядоченном виде на уровне плана запроса. -Применяется только если настройка [`query_plan_enable_optimizations`](#query_plan_enable_optimizations) установлена в 1. - -:::note -Это настройка экспертного уровня, которую следует использовать только разработчикам для отладки. В будущем она может быть изменена с нарушением обратной совместимости или удалена. -::: - -Возможные значения: - -- 0 - Отключить -- 1 - Включить - -## query_plan_remove_redundant_distinct {#query_plan_remove_redundant_distinct} - - - - - -Включает или отключает оптимизацию на уровне плана запроса, которая удаляет избыточные шаги `DISTINCT`. -Влияет на выполнение только в том случае, если настройка [`query_plan_enable_optimizations`](#query_plan_enable_optimizations) установлена в 1. - -:::note -Это настройка экспертного уровня, которую разработчикам следует использовать только для отладки. В будущем настройка может быть изменена с нарушением обратной совместимости или удалена. -::: - -Возможные значения: - -- 0 — Отключить -- 1 — Включить - -## query_plan_remove_redundant_sorting {#query_plan_remove_redundant_sorting} - - - - - -Включает или отключает оптимизацию на уровне плана запроса, которая удаляет избыточные шаги сортировки, например в подзапросах. -Вступает в силу только если настройка [`query_plan_enable_optimizations`](#query_plan_enable_optimizations) равна 1. - -:::note -Это настройка экспертного уровня, предназначенная только для использования разработчиками при отладке. В будущем она может измениться несовместимым с предыдущими версиями образом или быть удалена. -::: - -Возможные значения: - -- 0 - Отключить -- 1 - Включить - -## query_plan_remove_unused_columns {#query_plan_remove_unused_columns} - - - - - -Включает или отключает оптимизацию на уровне плана запроса, которая пытается удалить неиспользуемые столбцы (как входные, так и выходные) из шагов плана запроса. -Применяется только если настройка [query_plan_enable_optimizations](#query_plan_enable_optimizations) равна 1. - -:::note -Это настройка экспертного уровня, которая должна использоваться только для отладки разработчиками. В будущем настройка может измениться несовместимым образом или быть удалена. -::: - -Возможные значения: - -- 0 - Отключить -- 1 - Включить - -## query_plan_reuse_storage_ordering_for_window_functions {#query_plan_reuse_storage_ordering_for_window_functions} - - - -Включает оптимизацию на уровне плана запроса, которая использует порядок данных в хранилище при сортировке для оконных функций. -Применяется только в том случае, если параметр [`query_plan_enable_optimizations`](#query_plan_enable_optimizations) равен 1. - -:::note -Это параметр для экспертов, который должен использоваться только разработчиками для отладки. В будущем его поведение может быть изменено с нарушением обратной совместимости или параметр может быть удалён. -::: - -Возможные значения: - -- 0 - Отключить -- 1 - Включить - -## query_plan_split_filter {#query_plan_split_filter} - - - -:::note -Это настройка экспертного уровня, предназначенная только для использования разработчиками при отладке. В будущем она может быть изменена с нарушением обратной совместимости или удалена. -::: - -Включает оптимизацию на уровне плана запроса, которая разбивает фильтры на выражения. -Применяется только если настройка [query_plan_enable_optimizations](#query_plan_enable_optimizations) равна 1. - -Возможные значения: - -- 0 — Отключить -- 1 — Включить - -## query_plan_try_use_vector_search {#query_plan_try_use_vector_search} - - - - - -Управляет оптимизацией на уровне плана запроса, которая пытается использовать индекс векторного сходства. -Вступает в силу только если настройка [`query_plan_enable_optimizations`](#query_plan_enable_optimizations) равна 1. - -:::note -Это настройка для экспертов, которую следует использовать только разработчикам для отладки. В будущем она может быть изменена несовместимым образом или удалена. -::: - -Возможные значения: - -- 0 — Отключить -- 1 — Включить - -## query_plan_use_new_logical_join_step {#query_plan_use_new_logical_join_step} - -**Псевдонимы**: `query_plan_use_logical_join_step` - - - - - -Использовать логический шаг join в плане запроса. -Примечание: параметр `query_plan_use_new_logical_join_step` устарел, вместо него используйте `query_plan_use_logical_join_step`. - -## query_profiler_cpu_time_period_ns {#query_profiler_cpu_time_period_ns} - - - -Устанавливает период таймера по времени работы CPU для [профилировщика запросов](../../operations/optimizing-performance/sampling-query-profiler.md). Этот таймер учитывает только процессорное время. - -Возможные значения: - -- Положительное целое число наносекунд. - - Рекомендуемые значения: - - - 10000000 (100 раз в секунду) наносекунд и больше для отдельных запросов. - - 1000000000 (раз в секунду) для профилирования на уровне всего кластера. - -- 0 для отключения таймера. - -**Параметр временно недоступен в ClickHouse Cloud.** - -См. также: - -- Системная таблица [trace_log](/operations/system-tables/trace_log) - -## query_profiler_real_time_period_ns {#query_profiler_real_time_period_ns} - - - -Задаёт период таймера реального времени для [профилировщика запросов](../../operations/optimizing-performance/sampling-query-profiler.md). Таймер реального времени измеряет «настенное» (реальное) время. - -Возможные значения: - -- Положительное целое число в наносекундах. - - Рекомендуемые значения: - - - 10000000 наносекунд (100 раз в секунду) и меньше для одиночных запросов. - - 1000000000 наносекунд (раз в секунду) для профилирования на уровне кластера. - -- 0 для отключения таймера. - -**Временно отключено в ClickHouse Cloud.** - -См. также: - -- Системная таблица [trace_log](/operations/system-tables/trace_log) - -## queue_max_wait_ms {#queue_max_wait_ms} - - - -Время ожидания в очереди запросов, если количество одновременных запросов превышает допустимый максимум. - -## rabbitmq_max_wait_ms {#rabbitmq_max_wait_ms} - - - -Время ожидания при чтении из RabbitMQ перед повторной попыткой. - -## read_backoff_max_throughput {#read_backoff_max_throughput} - - - -Настройка для уменьшения количества потоков в случае медленного чтения. Событие учитывается, когда пропускная способность чтения меньше указанного количества байт в секунду. - -## read_backoff_min_concurrency {#read_backoff_min_concurrency} - - - -Настройка, позволяющая стараться сохранять минимальное число потоков при медленном чтении. - -## read_backoff_min_events {#read_backoff_min_events} - - - -Настройка для уменьшения числа потоков при медленном чтении. Количество событий, после которого число потоков будет уменьшено. - -## read_backoff_min_interval_between_events_ms {#read_backoff_min_interval_between_events_ms} - - - -Параметр для уменьшения числа потоков в случае медленного чтения. Событие игнорируется, если с момента предыдущего прошло меньше заданного интервала времени. - -## read_backoff_min_latency_ms {#read_backoff_min_latency_ms} - - - -Параметр для уменьшения числа потоков в случае медленных операций чтения. Учитываются только операции чтения, которые заняли не менее этого времени. - -## read_from_distributed_cache_if_exists_otherwise_bypass_cache {#read_from_distributed_cache_if_exists_otherwise_bypass_cache} - - - - - - - -Имеет эффект только в ClickHouse Cloud. Аналог настройки read_from_filesystem_cache_if_exists_otherwise_bypass_cache, но для распределённого кэша. - -## read_from_filesystem_cache_if_exists_otherwise_bypass_cache {#read_from_filesystem_cache_if_exists_otherwise_bypass_cache} - - - -Позволяет использовать файловый кэш в пассивном режиме — пользоваться уже существующими записями кэша, но не добавлять новые записи в кэш. Если включить этот параметр для тяжёлых ad-hoc‑запросов и оставить его выключенным для коротких запросов реального времени, это позволит избежать «вытеснения» кэша слишком тяжёлыми запросами и повысить общую эффективность системы. - -## read_from_page_cache_if_exists_otherwise_bypass_cache {#read_from_page_cache_if_exists_otherwise_bypass_cache} - - - - - -Использовать кэш страниц в пространстве пользователя в пассивном режиме, аналогично read_from_filesystem_cache_if_exists_otherwise_bypass_cache. - -## read_in_order_two_level_merge_threshold {#read_in_order_two_level_merge_threshold} - - - -Минимальное число частей, которые нужно прочитать, чтобы запустить предварительный этап слияния при многопоточном чтении в порядке первичного ключа. - -## read_in_order_use_buffering {#read_in_order_use_buffering} - - - - - -Включает буферизацию перед слиянием при чтении данных в порядке первичного ключа. Повышает степень параллелизма выполнения запроса. - -## read_in_order_use_virtual_row {#read_in_order_use_virtual_row} - - - - - -Использовать виртуальную строку при чтении в порядке первичного ключа или монотонной функции от него. Полезно при поиске по нескольким частям, поскольку обрабатываются только релевантные части. - -## read_overflow_mode {#read_overflow_mode} - - - -Что делать при превышении лимита. - -## read_overflow_mode_leaf {#read_overflow_mode_leaf} - - - -Задает поведение при превышении объема считываемых данных одного из лимитов на уровне листьев. - -Возможные варианты: - -- `throw`: выбросить исключение (по умолчанию). -- `break`: прекратить выполнение запроса и вернуть частичный результат. - -## read_priority {#read_priority} - - - -Приоритет чтения данных с локальной или удалённой файловой системы. Поддерживается только для метода `pread_threadpool` для локальной файловой системы и метода `threadpool` для удалённой файловой системы. - -## read_through_distributed_cache {#read_through_distributed_cache} - - - - - - - -Действует только в ClickHouse Cloud. Разрешает чтение из распределённого кэша. - -## readonly {#readonly} - - - -0 — ограничения режима только для чтения не применяются. 1 — только запросы на чтение, а также изменение явно разрешённых настроек. 2 — только запросы на чтение, а также изменение настроек, за исключением настройки 'readonly'. - -## receive_data_timeout_ms {#receive_data_timeout_ms} - - - -Таймаут ожидания первого пакета данных или пакета с положительным прогрессом от реплики - -## receive_timeout {#receive_timeout} - - - -Таймаут ожидания получения данных из сети в секундах. Если в течение этого интервала не было получено ни одного байта, генерируется исключение. Если вы зададите этот параметр на клиенте, то для сокета также будет установлен параметр `send_timeout` на соответствующей стороне соединения на сервере. - -## regexp_max_matches_per_row {#regexp_max_matches_per_row} - - - -Устанавливает максимальное количество совпадений одного регулярного выражения для одной строки. Используйте этот параметр, чтобы защититься от чрезмерного потребления памяти при использовании жадных регулярных выражений в функции [extractAllGroupsHorizontal](/sql-reference/functions/string-search-functions#extractAllGroupsHorizontal). - -Возможные значения: - -- Положительное целое число. - -## reject_expensive_hyperscan_regexps {#reject_expensive_hyperscan_regexps} - - - -Отклонять шаблоны, вычисление которых с помощью Hyperscan, вероятнее всего, будет слишком ресурсоёмким (из‑за взрывного роста числа состояний NFA) - -## remerge_sort_lowered_memory_bytes_ratio {#remerge_sort_lowered_memory_bytes_ratio} - - - -Если использование памяти после повторной сортировки не уменьшается как минимум в заданное число раз, повторная сортировка будет отключена. - -## remote_filesystem_read_method {#remote_filesystem_read_method} - - - -Метод чтения данных из удалённой файловой системы, один из: read, threadpool. - -## remote_filesystem_read_prefetch {#remote_filesystem_read_prefetch} - - - -Использует упреждающее чтение при чтении данных из удалённой файловой системы. - -## remote_fs_read_backoff_max_tries {#remote_fs_read_backoff_max_tries} - - - -Максимальное количество попыток чтения с экспоненциальной задержкой - -## remote_fs_read_max_backoff_ms {#remote_fs_read_max_backoff_ms} - - - -Максимальное время ожидания при попытке прочитать данные с удалённого диска - -## remote_read_min_bytes_for_seek {#remote_read_min_bytes_for_seek} - - - -Минимальное количество байт, необходимое для удалённого чтения (URL, S3), при котором выполняется операция seek вместо чтения с параметром ignore. - -## rename_files_after_processing {#rename_files_after_processing} - -- **Тип:** Строка - -- **Значение по умолчанию:** Пустая строка - -Этот параметр позволяет задать шаблон переименования файлов, обрабатываемых табличной функцией `file`. Если параметр задан, все файлы, читаемые табличной функцией `file`, будут переименованы в соответствии с указанным шаблоном с плейсхолдерами, но только в случае успешной обработки файлов. - -### Подстановки - -- `%a` — Полное исходное имя файла (например, «sample.csv»). -- `%f` — Исходное имя файла без расширения (например, «sample»). -- `%e` — Исходное расширение файла с точкой (например, «.csv»). -- `%t` — Временная метка (в микросекундах). -- `%%` — Знак процента («%»). - -### Пример - -- Опция: `--rename_files_after_processing="processed_%f_%t%e"` - -- Запрос: `SELECT * FROM file('sample.csv')` - -Если файл `sample.csv` был успешно прочитан, он будет переименован в `processed_sample_1683473210851438.csv` - -## replace_running_query {#replace_running_query} - - - -При использовании HTTP-интерфейса можно передать параметр `query_id`. Это любая строка, служащая идентификатором запроса. -Если в этот момент уже существует запрос от того же пользователя с тем же `query_id`, поведение зависит от параметра `replace_running_query`. - -`0` (по умолчанию) – выбрасывать исключение (не позволять выполнению запроса, если запрос с тем же `query_id` уже выполняется). - -`1` – отменить старый запрос и запустить новый. - -Установите этот параметр в `1` для реализации подсказок при задании условий сегментации. После ввода следующего символа, если старый запрос ещё не завершился, он должен быть отменён. - -## replace_running_query_max_wait_ms {#replace_running_query_max_wait_ms} - - - -Время ожидания завершения запущенного запроса с тем же `query_id`, когда включена настройка [replace_running_query](#replace_running_query). - -Возможные значения: - -- Положительное целое число. -- 0 — Генерируется исключение, не позволяющее запустить новый запрос, если сервер уже выполняет запрос с тем же `query_id`. - -## replication_wait_for_inactive_replica_timeout {#replication_wait_for_inactive_replica_timeout} - - - -Определяет, как долго (в секундах) ожидать выполнения запросов [`ALTER`](../../sql-reference/statements/alter/index.md), [`OPTIMIZE`](../../sql-reference/statements/optimize.md) или [`TRUNCATE`](../../sql-reference/statements/truncate.md) неактивными репликами. - -Возможные значения: - -- `0` — не ждать. -- Отрицательное целое число — ждать неограниченное время. -- Положительное целое число — количество секунд ожидания. - -## restore_replace_external_dictionary_source_to_null {#restore_replace_external_dictionary_source_to_null} - - - - - -Заменяет источники внешних словарей на Null при восстановлении. Полезно для тестирования. - -## restore_replace_external_engines_to_null {#restore_replace_external_engines_to_null} - - - - - -Для тестирования. Заменяет все внешние движки на Null, чтобы не устанавливать внешние соединения. - -## restore_replace_external_table_functions_to_null {#restore_replace_external_table_functions_to_null} - - - - - -Для тестирования. Заменяет все внешние табличные функции на Null, чтобы не инициировать внешние подключения. - -## restore_replicated_merge_tree_to_shared_merge_tree {#restore_replicated_merge_tree_to_shared_merge_tree} - - - - - -Заменяет движок таблицы Replicated*MergeTree на Shared*MergeTree при выполнении RESTORE. - -## result_overflow_mode - - - -Значение по умолчанию в Cloud: `throw` - -Определяет, что делать, если объём результата превышает один из лимитов. - -Возможные значения: - -* `throw`: сгенерировать исключение (значение по умолчанию). -* `break`: остановить выполнение запроса и вернуть частичный результат, как если бы - исходные данные закончились. - -Использование 'break' аналогично использованию LIMIT. `Break` прерывает выполнение только на -уровне блока. Это означает, что количество возвращаемых строк будет больше значения -[`max_result_rows`](/operations/settings/settings#max_result_rows), будет кратно [`max_block_size`](/operations/settings/settings#max_block_size) -и будет зависеть от [`max_threads`](/operations/settings/settings#max_threads). - -**Пример** - -```sql title="Query" -SET max_threads = 3, max_block_size = 3333; -SET max_result_rows = 3334, result_overflow_mode = 'break'; - -SELECT * -FROM numbers_mt(100000) -FORMAT Null; -``` - -```text title="Result" -6666 rows in set. ... -``` - - -## rewrite_count_distinct_if_with_count_distinct_implementation {#rewrite_count_distinct_if_with_count_distinct_implementation} - - - - - -Позволяет перезаписывать `countDistinctIf` с помощью параметра [count_distinct_implementation](#count_distinct_implementation). - -Возможные значения: - -- true — разрешить. -- false — запретить. - -## rewrite_in_to_join {#rewrite_in_to_join} - - - - - - - -Переписывает выражения вида `x IN subquery` в JOIN. Это может быть полезно для оптимизации всего запроса за счёт переупорядочивания операций JOIN. - -## s3_allow_multipart_copy {#s3_allow_multipart_copy} - - - - - -Разрешает многокомпонентное (multipart) копирование в S3. - -## s3_allow_parallel_part_upload {#s3_allow_parallel_part_upload} - - - -Использовать несколько потоков для многосоставной (multipart) загрузки в S3. Это может привести к немного более высокому потреблению памяти - -## s3_check_objects_after_upload {#s3_check_objects_after_upload} - - - -Проверять каждый загруженный в S3 объект с помощью HEAD-запроса, чтобы убедиться, что загрузка прошла успешно - -## s3_connect_timeout_ms {#s3_connect_timeout_ms} - - - - - -Таймаут подключения к хосту, используемому дисками S3. - -## s3_create_new_file_on_insert {#s3_create_new_file_on_insert} - - - -Включает или отключает создание нового файла при каждой вставке в таблицы с движком S3. Если включено, при каждой вставке будет создаваться новый объект S3 с ключом по следующему шаблону: - -например: `data.Parquet.gz` -> `data.1.Parquet.gz` -> `data.2.Parquet.gz` и т.д. - -Возможные значения: - -- 0 — запрос `INSERT` создает новый файл или завершается с ошибкой, если файл уже существует и s3_truncate_on_insert не установлен. -- 1 — запрос `INSERT` создает новый файл при каждой вставке, используя суффикс (начиная со второго файла), если s3_truncate_on_insert не установлен. - -Подробнее см. [здесь](/integrations/s3#inserting-data). - -## s3_disable_checksum {#s3_disable_checksum} - - - -Не вычисляет контрольную сумму при отправке файла в S3. Это ускоряет операции записи, так как позволяет избежать лишних проходов обработки файла. В большинстве случаев это безопасно, поскольку данные таблиц MergeTree в любом случае снабжаются контрольными суммами в ClickHouse, а при доступе к S3 по HTTPS уровень TLS уже обеспечивает целостность при передаче по сети. Дополнительные контрольные суммы на стороне S3 служат еще одним уровнем защиты. - -## s3_ignore_file_doesnt_exist {#s3_ignore_file_doesnt_exist} - - - - - -Игнорировать отсутствие файла при чтении некоторых ключей, если он не существует. - -Возможные значения: - -- 1 — `SELECT` возвращает пустой результат. -- 0 — `SELECT` вызывает исключение. - -## s3_list_object_keys_size {#s3_list_object_keys_size} - - - -Максимальное количество файлов, которое может быть возвращено одним пакетным запросом ListObject - -## s3_max_connections {#s3_max_connections} - - - -Максимальное количество подключений к одному серверу. - -## s3_max_get_burst {#s3_max_get_burst} - - - -Максимальное количество запросов, которое может быть отправлено одновременно перед достижением лимита запросов в секунду. По умолчанию значение 0 соответствует `s3_max_get_rps`. - -## s3_max_get_rps {#s3_max_get_rps} - - - -Лимит числа запросов S3 GET в секунду, после превышения которого включается ограничение пропускной способности. Ноль означает отсутствие лимита. - -## s3_max_inflight_parts_for_one_file {#s3_max_inflight_parts_for_one_file} - - - -Максимальное количество одновременно загружаемых частей в multipart‑запросе на загрузку. 0 означает отсутствие ограничений. - -## s3_max_part_number {#s3_max_part_number} - - - - - -Максимальный порядковый номер части при загрузке в S3. - -## s3_max_put_burst {#s3_max_put_burst} - - - -Максимальное количество запросов, которые могут быть отправлены одновременно до достижения ограничения по числу запросов в секунду. Значение по умолчанию (0) равно `s3_max_put_rps`. - -## s3_max_put_rps {#s3_max_put_rps} - - - -Ограничение на частоту запросов S3 PUT в секунду, после превышения которого включается троттлинг. Ноль означает отсутствие лимита. - -## s3_max_single_operation_copy_size {#s3_max_single_operation_copy_size} - - - - - -Максимальный размер для однократной операции копирования в S3. Этот параметр используется только, если s3_allow_multipart_copy установлено в значение true. - -## s3_max_single_part_upload_size {#s3_max_single_part_upload_size} - - - -Максимальный размер объекта, загружаемого в S3 при однократной (single-part) загрузке. - -## s3_max_single_read_retries {#s3_max_single_read_retries} - - - -Максимальное количество повторных попыток для одной операции чтения из S3. - -## s3_max_unexpected_write_error_retries {#s3_max_unexpected_write_error_retries} - - - -Максимальное число повторных попыток в случае неожиданных ошибок при записи в S3. - -## s3_max_upload_part_size {#s3_max_upload_part_size} - - - -Максимальный размер части объекта при многочастной (multipart) загрузке в S3. - -## s3_min_upload_part_size {#s3_min_upload_part_size} - - - -Минимальный размер части данных при многокомпонентной загрузке в S3. - -## s3_request_timeout_ms {#s3_request_timeout_ms} - - - -Таймаут простоя для отправки и получения данных в S3 и из него. Считать операцию неудачной, если одиночный вызов чтения или записи по TCP блокируется дольше этого времени. - -## s3_skip_empty_files {#s3_skip_empty_files} - - - - - -Включает или отключает пропуск пустых файлов в таблицах движка [S3](../../engines/table-engines/integrations/s3.md). - -Возможные значения: - -- 0 — `SELECT` выбрасывает исключение, если пустой файл не совместим с запрошенным форматом. -- 1 — `SELECT` возвращает пустой результат для пустого файла. - -## s3_slow_all_threads_after_network_error {#s3_slow_all_threads_after_network_error} - - - - - -Если установлено значение `true`, все потоки, выполняющие S3‑запросы к одной и той же конечной точке резервного копирования, замедляются -после того, как любой отдельный S3‑запрос получает повторяемую сетевую ошибку, например тайм-аут сокета. -Если установлено значение `false`, каждый поток обрабатывает замедление (backoff) S3‑запросов независимо от остальных. - -## s3_strict_upload_part_size {#s3_strict_upload_part_size} - - - -Точный размер фрагмента для загрузки при многокомпонентной (multipart) загрузке в S3 (некоторые реализации не поддерживают фрагменты переменного размера). - -## s3_throw_on_zero_files_match {#s3_throw_on_zero_files_match} - - - -Вызывает ошибку, если запрос ListObjects не находит ни одного файла - -## s3_truncate_on_insert {#s3_truncate_on_insert} - - - -Включает или отключает очистку содержимого перед вставками в таблицы движка S3. Если параметр отключен, при попытке вставки будет сгенерировано исключение, если объект в S3 уже существует. - -Возможные значения: - -- 0 — запрос `INSERT` создает новый файл или завершается с ошибкой, если файл уже существует и параметр s3_create_new_file_on_insert не установлен. -- 1 — запрос `INSERT` заменяет существующее содержимое файла новыми данными. - -Подробнее см. [здесь](/integrations/s3#inserting-data). - -## s3_upload_part_size_multiply_factor {#s3_upload_part_size_multiply_factor} - - - -Умножает s3_min_upload_part_size на этот коэффициент каждый раз, когда при одной операции записи в S3 было загружено s3_multiply_parts_count_threshold частей. - -## s3_upload_part_size_multiply_parts_count_threshold {#s3_upload_part_size_multiply_parts_count_threshold} - - - -Каждый раз, когда в S3 загружается такое количество частей, значение `s3_min_upload_part_size` умножается на `s3_upload_part_size_multiply_factor`. - -## s3_use_adaptive_timeouts {#s3_use_adaptive_timeouts} - - - -Если установлено значение `true`, то для всех запросов к S3 первые две попытки выполняются с короткими таймаутами отправки и получения. -Если установлено значение `false`, то все попытки выполняются с одинаковыми таймаутами. - -## s3_validate_request_settings {#s3_validate_request_settings} - - - - - -Включает проверку настроек запросов к S3. -Возможные значения: - -- 1 — проверять настройки. -- 0 — не проверять настройки. - -## s3queue_default_zookeeper_path {#s3queue_default_zookeeper_path} - - - -Префикс пути ZooKeeper по умолчанию для движка S3Queue - -## s3queue_enable_logging_to_s3queue_log {#s3queue_enable_logging_to_s3queue_log} - - - -Включает запись в журнал system.s3queue_log. Значение можно переопределить для конкретной таблицы с помощью настроек таблицы. - -## s3queue_keeper_fault_injection_probability {#s3queue_keeper_fault_injection_probability} - - - - - -Вероятность инъекции отказов Keeper для S3Queue. - -## s3queue_migrate_old_metadata_to_buckets {#s3queue_migrate_old_metadata_to_buckets} - - - - - -Мигрирует старую структуру метаданных таблицы S3Queue в новую - -## schema_inference_cache_require_modification_time_for_url {#schema_inference_cache_require_modification_time_for_url} - - - -Использовать схему из кэша для URL-адресов с проверкой времени последнего изменения (для URL-адресов с заголовком Last-Modified) - -## schema_inference_use_cache_for_azure {#schema_inference_use_cache_for_azure} - - - -Использовать кэш при определении схемы при использовании табличной функции azure - -## schema_inference_use_cache_for_file {#schema_inference_use_cache_for_file} - - - -Использовать кэш при определении схемы при использовании табличной функции file - -## schema_inference_use_cache_for_hdfs {#schema_inference_use_cache_for_hdfs} - - - -Использовать кэш при выводе схемы при использовании табличной функции hdfs - -## schema_inference_use_cache_for_s3 {#schema_inference_use_cache_for_s3} - - - -Использовать кэш для вывода схемы при использовании табличной функции S3 - -## schema_inference_use_cache_for_url {#schema_inference_use_cache_for_url} - - - -Использовать кэш для определения схемы при использовании табличной функции url - -## secondary_indices_enable_bulk_filtering {#secondary_indices_enable_bulk_filtering} - - - - - -Включает алгоритм пакетной фильтрации для индексов. Предполагается, что он всегда работает лучше, однако эта настройка предусмотрена для совместимости и контроля. - -## select_sequential_consistency {#select_sequential_consistency} - - - -:::note -Параметр ведёт себя по-разному в SharedMergeTree и ReplicatedMergeTree. Дополнительную информацию о поведении `select_sequential_consistency` в SharedMergeTree см. в разделе [SharedMergeTree consistency](/cloud/reference/shared-merge-tree#consistency). -::: - -Включает или отключает последовательную согласованность для запросов `SELECT`. Требует отключения параметра `insert_quorum_parallel` (по умолчанию включён). - -Возможные значения: - -- 0 — Отключено. -- 1 — Включено. - -Использование - -Когда последовательная согласованность включена, ClickHouse позволяет клиенту выполнять запрос `SELECT` только к тем репликам, которые содержат данные всех предыдущих запросов `INSERT`, выполнявшихся с `insert_quorum`. Если клиент обращается к неполной реплике, ClickHouse сгенерирует исключение. Запрос `SELECT` не будет включать данные, которые ещё не были записаны в кворум реплик. - -Когда `insert_quorum_parallel` включён (значение по умолчанию), `select_sequential_consistency` не работает. Это связано с тем, что параллельные запросы `INSERT` могут быть записаны в разные наборы кворумных реплик, поэтому нет гарантии, что одна реплика получит все записи. - -См. также: - -- [insert_quorum](#insert_quorum) -- [insert_quorum_timeout](#insert_quorum_timeout) -- [insert_quorum_parallel](#insert_quorum_parallel) - -## send_logs_level {#send_logs_level} - - - -Отправляет текстовые логи сервера клиенту, начиная с указанного минимального уровня. Допустимые значения: 'trace', 'debug', 'information', 'warning', 'error', 'fatal', 'none' - -## send_logs_source_regexp {#send_logs_source_regexp} - -Отправлять текстовые серверные логи, имя источника которых соответствует заданному регулярному выражению. Пустое значение означает все источники. - -## send_profile_events {#send_profile_events} - - - - - -Включает или отключает отправку клиенту пакетов [ProfileEvents](/native-protocol/server.md#profile-events). - -Настройку можно отключить для уменьшения сетевого трафика у клиентов, которым не требуются события профиля. - -Возможные значения: - -- 0 — выключено. -- 1 — включено. - -## send_progress_in_http_headers {#send_progress_in_http_headers} - - - -Включает или отключает HTTP-заголовки `X-ClickHouse-Progress` в ответах `clickhouse-server`. - -Для получения дополнительной информации см. [описание HTTP-интерфейса](../../interfaces/http.md). - -Возможные значения: - -- 0 — Отключено. -- 1 — Включено. - -## send_timeout {#send_timeout} - - - -Таймаут отправки данных в сеть, в секундах. Если клиенту необходимо отправить данные, но он не может передать ни одного байта в течение этого интервала, будет сгенерировано исключение. Если вы задаёте этот параметр на стороне клиента, то на соответствующем конце соединения на сервере для сокета также будет установлен параметр `receive_timeout`. - -## serialize_query_plan {#serialize_query_plan} - - - - - -Сериализовать план запроса для распределённой обработки - -## session_timezone - - - -Устанавливает неявный часовой пояс текущего сеанса или запроса. -Неявный часовой пояс — это часовой пояс, применяемый к значениям типа DateTime/DateTime64, для которых явно не указан часовой пояс. -Этот параметр имеет приоритет над глобальной настройкой (на уровне сервера) неявного часового пояса. -Значение '' (пустая строка) означает, что неявный часовой пояс текущего сеанса или запроса равен [часовому поясу сервера](../server-configuration-parameters/settings.md/#timezone). - -Вы можете использовать функции `timeZone()` и `serverTimeZone()` чтобы получить часовой пояс сеанса и часовой пояс сервера. - -Возможные значения: - -* Любое имя часового пояса из `system.time_zones`, например `Europe/Berlin`, `UTC` или `Zulu` - -Примеры: - -```sql -SELECT timeZone(), serverTimeZone() FORMAT CSV - -"Europe/Berlin","Europe/Berlin" -``` - -```sql -SELECT timeZone(), serverTimeZone() SETTINGS session_timezone = 'Asia/Novosibirsk' FORMAT CSV - -"Asia/Novosibirsk","Europe/Berlin" -``` - -Установите часовой пояс сеанса 'America/Denver' для внутреннего DateTime, у которого явно не указан часовой пояс: - -```sql -SELECT toDateTime64(toDateTime64('1999-12-12 23:23:23.123', 3), 3, 'Europe/Zurich') SETTINGS session_timezone = 'America/Denver' FORMAT TSV - -1999-12-13 07:23:23.123 -``` - -:::warning -Не все функции, выполняющие разбор значений типов DateTime/DateTime64, учитывают `session_timezone`. Это может приводить к трудноуловимым ошибкам. -См. следующий пример и пояснение. -::: - -```sql -CREATE TABLE test_tz (`d` DateTime('UTC')) ENGINE = Memory AS SELECT toDateTime('2000-01-01 00:00:00', 'UTC'); - -SELECT *, timeZone() FROM test_tz WHERE d = toDateTime('2000-01-01 00:00:00') SETTINGS session_timezone = 'Asia/Novosibirsk' -0 rows in set. - -SELECT *, timeZone() FROM test_tz WHERE d = '2000-01-01 00:00:00' SETTINGS session_timezone = 'Asia/Novosibirsk' -┌───────────────────d─┬─timeZone()───────┐ -│ 2000-01-01 00:00:00 │ Asia/Novosibirsk │ -└─────────────────────┴──────────────────┘ -``` - -Это происходит из-за разных конвейеров обработки: - -* `toDateTime()` без явно заданного часового пояса, используемый в первом запросе `SELECT`, учитывает настройку `session_timezone` и глобальный часовой пояс. -* Во втором запросе значение типа DateTime разбирается из String и наследует тип и часовой пояс существующего столбца `d`. Поэтому настройка `session_timezone` и глобальный часовой пояс не учитываются. - -**См. также** - -* [timezone](../server-configuration-parameters/settings.md/#timezone) - - -## set_overflow_mode {#set_overflow_mode} - - - -Задаёт поведение при превышении одного из лимитов по объёму данных. - -Возможные значения: - -- `throw`: выбросить исключение (по умолчанию). -- `break`: остановить выполнение запроса и вернуть частичный результат, как если бы -исходные данные закончились. - -## shared_merge_tree_sync_parts_on_partition_operations {#shared_merge_tree_sync_parts_on_partition_operations} - - - - - -Автоматически синхронизирует набор частей данных после операций MOVE|REPLACE|ATTACH с партициями в таблицах SMT. Только в ClickHouse Cloud - -## short_circuit_function_evaluation {#short_circuit_function_evaluation} - - - -Позволяет вычислять функции [if](../../sql-reference/functions/conditional-functions.md/#if), [multiIf](../../sql-reference/functions/conditional-functions.md/#multiIf), [and](/sql-reference/functions/logical-functions#and) и [or](/sql-reference/functions/logical-functions#or) по [сокращённой схеме вычисления](https://en.wikipedia.org/wiki/Short-circuit_evaluation). Это помогает оптимизировать выполнение сложных выражений в этих функциях и предотвратить возможные исключения (например, деление на ноль, когда оно не должно выполняться). - -Возможные значения: - -- `enable` — Включает сокращённое вычисление для функций, для которых оно подходит (могут выбрасывать исключение или являются вычислительно затратными). -- `force_enable` — Включает сокращённое вычисление для всех функций. -- `disable` — Отключает сокращённое вычисление функций. - -## short_circuit_function_evaluation_for_nulls {#short_circuit_function_evaluation_for_nulls} - - - - - -Оптимизирует вычисление функций, которые возвращают NULL, если любой из аргументов имеет значение NULL. Когда доля значений NULL в аргументах функции превышает порог short_circuit_function_evaluation_for_nulls_threshold, система перестаёт вычислять функцию построчно. Вместо этого она сразу возвращает NULL для всех строк, избегая ненужных вычислений. - -## short_circuit_function_evaluation_for_nulls_threshold {#short_circuit_function_evaluation_for_nulls_threshold} - - - - - -Пороговое значение доли значений NULL, при котором функции с аргументами типа Nullable выполняются только для строк, в которых все аргументы имеют значения, отличные от NULL. Применяется, когда включена настройка `short_circuit_function_evaluation_for_nulls`. -Когда отношение количества строк, содержащих значения NULL, к общему числу строк превышает этот порог, строки, содержащие значения NULL, не участвуют в вычислениях. - -## show_data_lake_catalogs_in_system_tables {#show_data_lake_catalogs_in_system_tables} - - - - - -Включает отображение каталогов Data Lake в системных таблицах. - -## show_processlist_include_internal {#show_processlist_include_internal} - - - - - -Показывать внутренние вспомогательные процессы в выводе запроса `SHOW PROCESSLIST`. - -К внутренним процессам относятся перезагрузки словарей, перезагрузки обновляемых материализованных представлений, вспомогательные `SELECT`-запросы, выполняемые в запросах `SHOW ...`, вспомогательные запросы `CREATE DATABASE ...`, автоматически выполняемые внутри системы для обработки повреждённых таблиц, и т. п. - -## show_table_uuid_in_table_create_query_if_not_nil {#show_table_uuid_in_table_create_query_if_not_nil} - - - - - -Настраивает формат вывода результата запроса `SHOW TABLE`. - -Возможные значения: - -- 0 — запрос отображается без UUID таблицы. -- 1 — запрос отображается с UUID таблицы. - -## single_join_prefer_left_table {#single_join_prefer_left_table} - - - -Для одиночного JOIN при неоднозначности идентификаторов отдавать предпочтение левой таблице. - -## skip_redundant_aliases_in_udf - - - - - -Избыточные псевдонимы не используются (не подставляются) в пользовательских функциях, чтобы упростить их использование. - -Возможные значения: - -* 1 — Псевдонимы пропускаются (подставляются) в UDF. -* 0 — Псевдонимы не пропускаются (не подставляются) в UDF. - -**Пример** - -Разница между включённой и отключённой настройкой: - -Запрос: - -```sql -SET skip_redundant_aliases_in_udf = 0; -CREATE FUNCTION IF NOT EXISTS test_03274 AS ( x ) -> ((x + 1 as y, y + 2)); - -EXPLAIN SYNTAX SELECT test_03274(4 + 2); -``` - -Результат: - -```text -SELECT ((4 + 2) + 1 AS y, y + 2) -``` - -Запрос: - -```sql -SET skip_redundant_aliases_in_udf = 1; -CREATE FUNCTION IF NOT EXISTS test_03274 AS ( x ) -> ((x + 1 as y, y + 2)); - -EXPLAIN SYNTAX SELECT test_03274(4 + 2); -``` - -Результат: - -```text -SELECT ((4 + 2) + 1, ((4 + 2) + 1) + 2) -``` - - -## skip_unavailable_shards {#skip_unavailable_shards} - - - -Включает или отключает бесшумный пропуск недоступных шардов. - -Шард считается недоступным, если все его реплики недоступны. Реплика считается недоступной в следующих случаях: - -- ClickHouse не может подключиться к реплике по какой-либо причине. - - При подключении к реплике ClickHouse выполняет несколько попыток. Если все эти попытки завершаются неудачей, реплика считается недоступной. - -- Реплика не может быть разрешена через DNS. - - Если имя хоста реплики не может быть разрешено через DNS, это может указывать на следующие ситуации: - - - У хоста реплики нет DNS-записи. Это может происходить в системах с динамическим DNS, например, в [Kubernetes](https://kubernetes.io), где узлы во время простоя могут не разрешаться по DNS, и это не является ошибкой. - - - Ошибка конфигурации. Файл конфигурации ClickHouse содержит неверное имя хоста. - -Возможные значения: - -- 1 — пропуск включён. - - Если шард недоступен, ClickHouse возвращает результат на основе частичных данных и не сообщает о проблемах с доступностью узла. - -- 0 — пропуск отключён. - - Если шард недоступен, ClickHouse генерирует исключение. - -## sleep_after_receiving_query_ms {#sleep_after_receiving_query_ms} - - - -Время задержки после получения запроса в `TCPHandler` - -## sleep_in_send_data_ms {#sleep_in_send_data_ms} - - - -Время задержки (sleep) при отправке данных в `TCPHandler` - -## sleep_in_send_tables_status_ms {#sleep_in_send_tables_status_ms} - - - -Длительность паузы при отправке ответа о статусе таблиц в TCPHandler - -## sort_overflow_mode {#sort_overflow_mode} - - - -Определяет, что происходит, если количество строк, полученных до сортировки, превышает установленный предел. - -Возможные значения: - -- `throw`: выбросить исключение. -- `break`: остановить выполнение запроса и вернуть частичный результат. - -## split_intersecting_parts_ranges_into_layers_final {#split_intersecting_parts_ranges_into_layers_final} - - - - - -Разбивать пересекающиеся диапазоны частей на слои во время оптимизации FINAL - -## split_parts_ranges_into_intersecting_and_non_intersecting_final {#split_parts_ranges_into_intersecting_and_non_intersecting_final} - - - - - -Разбивать диапазоны партиций на пересекающиеся и непересекающиеся при оптимизации FINAL - -## splitby_max_substrings_includes_remaining_string {#splitby_max_substrings_includes_remaining_string} - - - -Контролирует, будет ли функция [splitBy*()](../../sql-reference/functions/splitting-merging-functions.md) при значении аргумента `max_substrings` > 0 включать оставшуюся строку в последний элемент результирующего массива. - -Возможные значения: - -- `0` - оставшаяся строка не включается в последний элемент результирующего массива. -- `1` - оставшаяся строка включается в последний элемент результирующего массива. Соответствует поведению функции Spark [`split()`](https://spark.apache.org/docs/3.1.2/api/python/reference/api/pyspark.sql.functions.split.html) и метода Python [`string.split()`](https://docs.python.org/3/library/stdtypes.html#str.split). - -## stop_refreshable_materialized_views_on_startup {#stop_refreshable_materialized_views_on_startup} - - - - - -При запуске сервера предотвращает планирование обновляемых материализованных представлений, как при выполнении команды SYSTEM STOP VIEWS. После этого вы можете запустить их вручную с помощью `SYSTEM START VIEWS` или `SYSTEM START VIEW `. Также применяется к вновь создаваемым представлениям. Не влияет на необновляемые материализованные представления. - -## storage_file_read_method {#storage_file_read_method} - - - -Метод чтения данных из файла хранилища: `read`, `pread` или `mmap`. Метод `mmap` не применяется к clickhouse-server (он предназначен для clickhouse-local). - -## storage_system_stack_trace_pipe_read_timeout_ms {#storage_system_stack_trace_pipe_read_timeout_ms} - - - -Максимальное время чтения из канала (pipe) для получения информации от потоков при выполнении запроса к таблице `system.stack_trace`. Этот параметр предназначен исключительно для тестирования и не должен изменяться пользователями. - -## stream_flush_interval_ms {#stream_flush_interval_ms} - - - -Применяется для таблиц со стримингом при срабатывании тайм-аута или когда поток генерирует [max_insert_block_size](#max_insert_block_size) строк. - -Значение по умолчанию — 7500. - -Чем меньше значение, тем чаще данные записываются в таблицу. Слишком маленькое значение приводит к снижению производительности. - -## stream_like_engine_allow_direct_select {#stream_like_engine_allow_direct_select} - - - - - -Разрешает прямые запросы SELECT для движков Kafka, RabbitMQ, FileLog, Redis Streams и NATS. Если подключены материализованные представления, запросы SELECT запрещены, даже если этот параметр включён. - -## stream_like_engine_insert_queue {#stream_like_engine_insert_queue} - -Когда stream-подобный движок читает из нескольких очередей, пользователю необходимо выбрать одну очередь для вставки данных при записи. Используется в Redis Streams и NATS. - -## stream_poll_timeout_ms {#stream_poll_timeout_ms} - - - -Таймаут ожидания при опросе данных в потоковых хранилищах и из них. - -## system_events_show_zero_values - - - -Позволяет выбирать события с нулевыми значениями из [`system.events`](../../operations/system-tables/events.md). - -Некоторые системы мониторинга требуют передавать им все значения метрик для каждой контрольной точки, даже если значение метрики равно нулю. - -Возможные значения: - -* 0 — Отключено. -* 1 — Включено. - -**Примеры** - -Запрос - -```sql -SELECT * FROM system.events WHERE event='QueryMemoryLimitExceeded'; -``` - -Результат - -```text -Ок. -``` - -Запрос - -```sql -SET system_events_show_zero_values = 1; -SELECT * FROM system.events WHERE event='QueryMemoryLimitExceeded'; -``` - -Результат - -```text -┌─event────────────────────┬─value─┬─description───────────────────────────────────────────┐ -│ QueryMemoryLimitExceeded │ 0 │ Количество превышений лимита памяти для запроса. │ -└──────────────────────────┴───────┴───────────────────────────────────────────────────────┘ -``` - - -## table_engine_read_through_distributed_cache {#table_engine_read_through_distributed_cache} - - - - - - - -Действует только в ClickHouse Cloud. Позволяет выполнять чтение из распределённого кэша через движки таблиц и табличные функции (S3, Azure и т. д.). - -## table_function_remote_max_addresses {#table_function_remote_max_addresses} - - - -Устанавливает максимальное количество адресов, получаемых по шаблонам для функции [remote](../../sql-reference/table-functions/remote.md). - -Возможные значения: - -- Положительное целое число. - -## tcp_keep_alive_timeout {#tcp_keep_alive_timeout} - - - -Время простоя соединения в секундах до начала отправки TCP keepalive-пакетов. - -## temporary_data_in_cache_reserve_space_wait_lock_timeout_milliseconds {#temporary_data_in_cache_reserve_space_wait_lock_timeout_milliseconds} - - - - - -Время ожидания при блокировке кэша для резервирования пространства под временные данные в файловом кэше - -## temporary_files_buffer_size {#temporary_files_buffer_size} - - - - - -Размер буфера для записи во временные файлы. Увеличение размера буфера уменьшает количество системных вызовов, но повышает потребление памяти. - -## temporary_files_codec {#temporary_files_codec} - - - -Задает кодек сжатия для временных файлов, используемых при сортировке и операциях соединения данных на диске. - -Возможные значения: - -- LZ4 — применяется сжатие [LZ4](https://en.wikipedia.org/wiki/LZ4_(compression_algorithm)). -- NONE — сжатие не применяется. - -## text_index_use_bloom_filter {#text_index_use_bloom_filter} - - - - - -Для тестирования включает или отключает использование блум-фильтра в текстовом индексе. - -## throw_if_deduplication_in_dependent_materialized_views_enabled_with_async_insert {#throw_if_deduplication_in_dependent_materialized_views_enabled_with_async_insert} - - - - - -Генерирует исключение для запроса INSERT, если одновременно включены настройки `deduplicate_blocks_in_dependent_materialized_views` и `async_insert`. Это гарантирует корректность работы, поскольку эти функции несовместимы. - -## throw_if_no_data_to_insert {#throw_if_no_data_to_insert} - - - -Разрешает или запрещает пустые INSERT-запросы. По умолчанию настройка включена (выдаётся ошибка при пустом INSERT-запросе). Применяется только к INSERT-запросам, выполняемым через [`clickhouse-client`](/interfaces/cli) или [gRPC-интерфейс](/interfaces/grpc). - -## throw_on_error_from_cache_on_write_operations {#throw_on_error_from_cache_on_write_operations} - - - -Игнорировать ошибки кэша при кэшировании во время операций записи (INSERT, слияния) - -## throw_on_max_partitions_per_insert_block {#throw_on_max_partitions_per_insert_block} - - - -Позволяет управлять поведением при достижении порога `max_partitions_per_insert_block`. - -Возможные значения: - -- `true` - Если вставляемый блок достигает `max_partitions_per_insert_block`, генерируется исключение. -- `false` - При достижении `max_partitions_per_insert_block` в журнал записывается предупреждение. - -:::tip -Это может быть полезно, если вы хотите оценить влияние на пользователей при изменении значения [`max_partitions_per_insert_block`](/operations/settings/settings#max_partitions_per_insert_block). -::: - -## throw_on_unsupported_query_inside_transaction {#throw_on_unsupported_query_inside_transaction} - - - - - -Выбрасывать исключение, если внутри транзакции выполняется неподдерживаемый запрос - -## timeout_before_checking_execution_speed {#timeout_before_checking_execution_speed} - - - -Проверяет, что скорость выполнения не слишком низкая (не менее `min_execution_speed`) после истечения указанного количества секунд. - -## timeout_overflow_mode {#timeout_overflow_mode} - - - -Определяет, что делать, если запрос выполняется дольше, чем `max_execution_time`, или если -оценочное время выполнения превышает `max_estimated_execution_time`. - -Возможные значения: - -- `throw`: сгенерировать исключение (значение по умолчанию). -- `break`: остановить выполнение запроса и вернуть частичный результат, как если бы -исходные данные закончились. - -## timeout_overflow_mode_leaf {#timeout_overflow_mode_leaf} - - - -Определяет, что происходит, когда выполнение запроса на листовом узле превышает `max_execution_time_leaf`. - -Возможные значения: - -- `throw`: сгенерировать исключение (по умолчанию). -- `break`: остановить выполнение запроса и вернуть частичный результат, как если бы исходные данные закончились. - -## totals_auto_threshold {#totals_auto_threshold} - - - -Пороговое значение для `totals_mode = 'auto'`. -См. раздел «Модификатор WITH TOTALS». - -## totals_mode {#totals_mode} - - - -Как вычисляются TOTALS при наличии HAVING, а также при использовании max_rows_to_group_by и group_by_overflow_mode = 'any'. -См. раздел «Модификатор WITH TOTALS». - -## trace_profile_events {#trace_profile_events} - - - -Включает или отключает сбор стеков вызовов при каждом обновлении события профилирования вместе с именем события профилирования и значением инкремента и их отправку в [trace_log](/operations/system-tables/trace_log). - -Возможные значения: - -- 1 — трассировка событий профилирования включена. -- 0 — трассировка событий профилирования отключена. - -## transfer_overflow_mode {#transfer_overflow_mode} - - - -Определяет, что происходит, когда объём данных превышает один из лимитов. - -Возможные значения: - -- `throw`: выбросить исключение (по умолчанию). -- `break`: остановить выполнение запроса и вернуть частичный результат, как если бы -исходные данные закончились. - -## transform_null_in - - - -Включает равенство значений [NULL](/sql-reference/syntax#null) для оператора [IN](../../sql-reference/operators/in.md). - -По умолчанию значения `NULL` не сравниваются, потому что `NULL` означает неопределённое значение. Поэтому сравнение `expr = NULL` всегда должно возвращать `false`. При включении этой настройки выражение `NULL = NULL` возвращает `true` для оператора `IN`. - -Возможные значения: - -* 0 — сравнение значений `NULL` в операторе `IN` возвращает `false`; -* 1 — сравнение значений `NULL` в операторе `IN` возвращает `true`. - -**Пример** - -Рассмотрим таблицу `null_in`: - -```text -┌──idx─┬─────i─┐ -│ 1 │ 1 │ -│ 2 │ NULL │ -│ 3 │ 3 │ -└──────┴───────┘ -``` - -Запрос: - -```sql -SELECT idx, i FROM null_in WHERE i IN (1, NULL) SETTINGS transform_null_in = 0; -``` - -Результат: - -```text -┌──idx─┬────i─┐ -│ 1 │ 1 │ -└──────┴──────┘ -``` - -Запрос: - -```sql -SELECT idx, i FROM null_in WHERE i IN (1, NULL) SETTINGS transform_null_in = 1; -``` - -Результат: - -```text -┌──idx─┬─────i─┐ -│ 1 │ 1 │ -│ 2 │ NULL │ -└──────┴───────┘ -``` - -**См. также** - -* [Обработка NULL в операторах IN](/sql-reference/operators/in#null-processing) - - -## traverse_shadow_remote_data_paths {#traverse_shadow_remote_data_paths} - - - - - -Выполняет обход замороженных данных (теневого каталога) в дополнение к основным данным таблицы при запросе system.remote_data_paths - -## union_default_mode {#union_default_mode} - -Устанавливает режим объединения результатов запроса `SELECT`. Настройка используется только при совместном использовании с оператором [UNION](../../sql-reference/statements/select/union.md) без явного указания `UNION ALL` или `UNION DISTINCT`. - -Возможные значения: - -- `'DISTINCT'` — ClickHouse выводит строки как результат объединения запросов, удаляя повторяющиеся строки. -- `'ALL'` — ClickHouse выводит все строки как результат объединения запросов, включая повторяющиеся строки. -- `''` — ClickHouse генерирует исключение при использовании с `UNION`. - -См. примеры в разделе [UNION](../../sql-reference/statements/select/union.md). - -## unknown_packet_in_send_data {#unknown_packet_in_send_data} - - - -Отправлять неизвестный пакет вместо N-го пакета данных - -## update_parallel_mode {#update_parallel_mode} - - - - - -Определяет поведение одновременных запросов `UPDATE`. - -Возможные значения: - -- `sync` — выполнять последовательно все запросы `UPDATE`. -- `auto` — выполнять последовательно только те запросы `UPDATE`, у которых есть зависимости между столбцами, обновляемыми в одном запросе, и столбцами, используемыми в выражениях другого запроса. -- `async` — не синхронизировать запросы `UPDATE`. - -## update_sequential_consistency {#update_sequential_consistency} - - - - - -Если установлено значение `true`, то перед выполнением оператора `UPDATE` набор частей обновляется до последней версии. - -## use_async_executor_for_materialized_views {#use_async_executor_for_materialized_views} - - - - - -Использовать асинхронное и потенциально многопоточное выполнение запросов материализованных представлений. Может ускорить обработку представлений во время выполнения INSERT, но при этом может потреблять больше памяти. - -## use_cache_for_count_from_files {#use_cache_for_count_from_files} - - - -Включает кэширование количества строк при выполнении `COUNT` по файлам в табличных функциях `file`/`s3`/`url`/`hdfs`/`azureBlobStorage`. - -По умолчанию включено. - -## use_client_time_zone {#use_client_time_zone} - - - -Интерпретировать строковые значения типа DateTime в часовом поясе клиента, а не сервера. - -## use_compact_format_in_distributed_parts_names {#use_compact_format_in_distributed_parts_names} - - - - - -Использует компактный формат для хранения блоков при фоновой (`distributed_foreground_insert`) операции INSERT в таблицы с движком `Distributed`. - -Возможные значения: - -- 0 — Используется формат каталога `user[:password]@host:port#default_database`. -- 1 — Используется формат каталога `[shard{shard_index}[_replica{replica_index}]]`. - -:::note - -- при `use_compact_format_in_distributed_parts_names=0` изменения, внесённые в определение кластера, не будут применяться к фоновым операциям INSERT. -- при `use_compact_format_in_distributed_parts_names=1` изменение порядка узлов в определении кластера изменит значения `shard_index`/`replica_index`, имейте это в виду. -::: - -## use_concurrency_control {#use_concurrency_control} - - - - - -Учитывать контроль параллелизма, настроенный на сервере (см. глобальные настройки сервера `concurrent_threads_soft_limit_num` и `concurrent_threads_soft_limit_ratio_to_cores`). Если параметр отключен, можно использовать больше потоков, даже если сервер перегружен (не рекомендуется для обычного использования и в основном требуется для тестов). - -## use_hedged_requests {#use_hedged_requests} - - - - - -Включает логику hedged-запросов для удалённых запросов. Она позволяет устанавливать несколько соединений с разными репликами для выполнения запроса. -Новое соединение создаётся, если существующие соединения с репликами не были установлены в течение `hedged_connection_timeout` -или данные не были получены в течение `receive_data_timeout`. Запрос использует первое соединение, которое отправит непустой пакет прогресса (или пакет данных, если `allow_changing_replica_until_first_data_packet`); -остальные соединения отменяются. Поддерживаются запросы с `max_parallel_replicas > 1`. - -Включено по умолчанию. - -Значение по умолчанию в облаке: `1` - -## use_hive_partitioning {#use_hive_partitioning} - - - - - -При включённой настройке ClickHouse будет определять разбиение в стиле Hive в пути (`/name=value/`) для файловых движков таблиц [File](/sql-reference/table-functions/file#hive-style-partitioning)/[S3](/sql-reference/table-functions/s3#hive-style-partitioning)/[URL](/sql-reference/table-functions/url#hive-style-partitioning)/[HDFS](/sql-reference/table-functions/hdfs#hive-style-partitioning)/[AzureBlobStorage](/sql-reference/table-functions/azureBlobStorage#hive-style-partitioning) и позволит использовать столбцы разбиения как виртуальные столбцы в запросе. Эти виртуальные столбцы будут иметь те же имена, что и в пути разбиения, но с префиксом `_`. - -## use_iceberg_metadata_files_cache {#use_iceberg_metadata_files_cache} - - - - - -Если параметр включён, табличная функция `iceberg` и хранилище `iceberg` могут использовать кэш файлов метаданных iceberg. - -Возможные значения: - -- 0 - Отключено -- 1 - Включено - -## use_iceberg_partition_pruning {#use_iceberg_partition_pruning} - - - - - -Использовать отсечение партиций для таблиц Iceberg - -## use_index_for_in_with_subqueries {#use_index_for_in_with_subqueries} - - - -Пробовать использовать индекс, если в правой части оператора IN находится подзапрос или табличное выражение. - -## use_index_for_in_with_subqueries_max_values {#use_index_for_in_with_subqueries_max_values} - - - -Максимальный размер множества в правой части оператора IN, при котором для фильтрации используется индекс таблицы. Позволяет избежать деградации производительности и повышенного потребления памяти из‑за подготовки дополнительных структур данных для больших запросов. Ноль означает отсутствие ограничения. - -## use_join_disjunctions_push_down {#use_join_disjunctions_push_down} - - - - - -Включает проталкивание частей условий JOIN, соединённых оператором OR, на соответствующие стороны входных данных («частичное проталкивание»). -Это позволяет движкам хранилищ раньше выполнять фильтрацию, что может сократить объём считываемых данных. -Оптимизация сохраняет семантику запроса и применяется только тогда, когда каждая верхнеуровневая ветвь по OR содержит как минимум один детерминированный -предикат для соответствующей стороны соединения. - -## use_legacy_to_time {#use_legacy_to_time} - - - - - -Если настройка включена, используется устаревшая функция toTime, которая преобразует дату со временем в некоторую фиксированную дату, сохраняя время. -В противном случае используется новая функция toTime, которая преобразует различные типы данных в тип Time. -Старая функция также всегда доступна под именем toTimeWithFixedDate. - -## use_page_cache_for_disks_without_file_cache {#use_page_cache_for_disks_without_file_cache} - - - - - -Использовать кэш страниц в пространстве пользователя для удалённых дисков, для которых не включён файловый кэш. - -## use_page_cache_with_distributed_cache {#use_page_cache_with_distributed_cache} - - - - - -Использовать кэш страниц в пространстве пользователя при использовании распределённого кэша. - -## use_paimon_partition_pruning {#use_paimon_partition_pruning} - - - - - - - -Включает использование отсечения партиций Paimon для табличных функций Paimon - -## use_query_cache {#use_query_cache} - - - -Если параметр включён, запросы `SELECT` могут использовать [кэш запросов](../query-cache.md). Параметры [enable_reads_from_query_cache](#enable_reads_from_query_cache) -и [enable_writes_to_query_cache](#enable_writes_to_query_cache) более подробно определяют порядок его использования. - -Возможные значения: - -- 0 — отключено -- 1 — включено - -## use_query_condition_cache {#use_query_condition_cache} - - - - - -Включает [кэш условий запроса](/operations/query-condition-cache). Кэш сохраняет диапазоны гранул в частях данных, которые не удовлетворяют условию в предложении `WHERE`, -и затем использует эту информацию как временный индекс для последующих запросов. - -Возможные значения: - -- 0 - Отключено -- 1 - Включено - -## use_roaring_bitmap_iceberg_positional_deletes {#use_roaring_bitmap_iceberg_positional_deletes} - - - - - -Использовать битовые карты Roaring для позиционных удалений в Iceberg. - -## use_skip_indexes {#use_skip_indexes} - - - -Использовать индексы пропуска данных при выполнении запросов. - -Возможные значения: - -- 0 — Отключено. -- 1 — Включено. - -## use_skip_indexes_if_final {#use_skip_indexes_if_final} - - - - - -Управляет использованием пропускающих индексов при выполнении запроса с модификатором FINAL. - -Пропускающие индексы могут исключать строки (гранулы), содержащие самые последние данные, что может приводить к некорректным результатам запроса с модификатором FINAL. Когда эта настройка включена, пропускающие индексы применяются даже с модификатором FINAL, что потенциально улучшает производительность, но с риском пропуска недавних обновлений. Эту настройку следует включать совместно с настройкой use_skip_indexes_if_final_exact_mode (по умолчанию включена). - -Возможные значения: - -- 0 — Отключена. -- 1 — Включена. - -## use_skip_indexes_if_final_exact_mode {#use_skip_indexes_if_final_exact_mode} - - - - - -Управляет тем, разворачиваются ли гранулы, возвращаемые пропускающим индексом, в более новых частях, чтобы возвращать корректные результаты при выполнении запроса с модификатором FINAL. - -Использование пропускающих индексов может исключать строки (гранулы), содержащие самые последние данные, что может приводить к некорректным результатам. Этот параметр позволяет гарантировать корректные результаты за счёт сканирования более новых частей, которые пересекаются с диапазонами, возвращаемыми пропускающим индексом. Отключайте этот параметр только в том случае, если для приложения приемлемы приблизительные результаты, основанные на поиске по пропускающему индексу. - -Возможные значения: - -- 0 — Отключено. -- 1 — Включено. - -## use_skip_indexes_on_data_read {#use_skip_indexes_on_data_read} - - - - - -Включает использование индексов пропуска данных при чтении. - -При включении индексы пропуска данных оцениваются динамически в момент чтения каждой гранулы, а не анализируются заранее перед началом выполнения запроса. Это может уменьшить задержку запуска запроса. - -Возможные значения: - -- 0 — Отключено. -- 1 — Включено. - -## use_statistics_cache {#use_statistics_cache} - - - - - - - -Использовать кэш статистики в запросе, чтобы избежать накладных расходов на загрузку статистики для каждой части данных. - -## use_structure_from_insertion_table_in_table_functions {#use_structure_from_insertion_table_in_table_functions} - - - - - -Использовать структуру таблицы, в которую выполняется вставка, вместо вывода схемы по данным. Возможные значения: 0 — отключено, 1 — включено, 2 — авто. - -## use_text_index_dictionary_cache {#use_text_index_dictionary_cache} - - - - - -Определяет, следует ли использовать кеш десериализованного блока словаря текстового индекса. -Использование кеша блока словаря текстового индекса может значительно снизить задержку и увеличить пропускную способность при выполнении большого количества запросов к текстовому индексу. - -## use_text_index_header_cache {#use_text_index_header_cache} - - - - - -Использовать ли кэш десериализованного заголовка текстового индекса. -Использование кэша заголовка текстового индекса может значительно снизить задержку и увеличить пропускную способность при выполнении большого числа запросов к текстовому индексу. - -## use_text_index_postings_cache {#use_text_index_postings_cache} - - - - - -Определяет, использовать ли кэш десериализованных списков вхождений текстового индекса. -Использование кэша списков вхождений текстового индекса может значительно снизить задержку и увеличить пропускную способность при работе с большим количеством запросов к текстовому индексу. - -## use_uncompressed_cache {#use_uncompressed_cache} - - - -Использовать ли кэш несжатых блоков. Принимает значения 0 или 1. По умолчанию — 0 (отключено). -Использование кэша несжатых данных (только для таблиц семейства MergeTree) может значительно уменьшить задержки и увеличить пропускную способность при работе с большим количеством коротких запросов. Включайте этот параметр для пользователей, которые отправляют частые короткие запросы. Также обратите внимание на конфигурационный параметр [uncompressed_cache_size](/operations/server-configuration-parameters/settings#uncompressed_cache_size) (задаётся только в конфигурационном файле) — размер блоков кэша несжатых данных. По умолчанию он равен 8 GiB. Кэш несжатых данных заполняется по мере необходимости, а наименее используемые данные автоматически удаляются. - -Для запросов, которые читают хотя бы относительно большой объём данных (один миллион строк и более), кэш несжатых данных автоматически отключается, чтобы освободить место для действительно небольших запросов. Это означает, что вы можете всегда держать настройку `use_uncompressed_cache` равной 1. - -## use_variant_as_common_type - - - - - -Позволяет использовать тип `Variant` в качестве результирующего типа для функций [if](../../sql-reference/functions/conditional-functions.md/#if)/[multiIf](../../sql-reference/functions/conditional-functions.md/#multiIf)/[array](../../sql-reference/functions/array-functions.md)/[map](../../sql-reference/functions/tuple-map-functions.md), когда для типов аргументов нет общего типа. - -Пример: - -```sql -SET use_variant_as_common_type = 1; -SELECT toTypeName(if(number % 2, number, range(number))) as variant_type FROM numbers(1); -SELECT if(number % 2, number, range(number)) as variant FROM numbers(5); -``` - -```text -┌─variant_type───────────────────┐ -│ Variant(Array(UInt64), UInt64) │ -└────────────────────────────────┘ -┌─variant───┐ -│ [] │ -│ 1 │ -│ [0,1] │ -│ 3 │ -│ [0,1,2,3] │ -└───────────┘ -``` - -```sql -SET use_variant_as_common_type = 1; -SELECT toTypeName(multiIf((number % 4) = 0, 42, (number % 4) = 1, [1, 2, 3], (number % 4) = 2, 'Hello, World!', NULL)) AS variant_type FROM numbers(1); -SELECT multiIf((number % 4) = 0, 42, (number % 4) = 1, [1, 2, 3], (number % 4) = 2, 'Hello, World!', NULL) AS variant FROM numbers(4); -``` - -```text -─variant_type─────────────────────────┐ -│ Variant(Array(UInt8), String, UInt8) │ -└──────────────────────────────────────┘ - -┌─variant───────┐ -│ 42 │ -│ [1,2,3] │ -│ Hello, World! │ -│ ᴺᵁᴸᴸ │ -└───────────────┘ -``` - -```sql -SET use_variant_as_common_type = 1; -SELECT toTypeName(array(range(number), number, 'str_' || toString(number))) as array_of_variants_type from numbers(1); -SELECT array(range(number), number, 'str_' || toString(number)) as array_of_variants FROM numbers(3); -``` - -```text -┌─array_of_variants_type────────────────────────┐ -│ Array(Variant(Array(UInt64), String, UInt64)) │ -└───────────────────────────────────────────────┘ - -┌─array_of_variants─┐ -│ [[],0,'str_0'] │ -│ [[0],1,'str_1'] │ -│ [[0,1],2,'str_2'] │ -└───────────────────┘ -``` - -```sql -SET use_variant_as_common_type = 1; -SELECT toTypeName(map('a', range(number), 'b', number, 'c', 'str_' || toString(number))) as map_of_variants_type from numbers(1); -SELECT map('a', range(number), 'b', number, 'c', 'str_' || toString(number)) as map_of_variants FROM numbers(3); -``` - -```text -┌─map_of_variants_type────────────────────────────────┐ -│ Map(String, Variant(Array(UInt64), String, UInt64)) │ -└─────────────────────────────────────────────────────┘ - -┌─map_of_variants───────────────┐ -│ {'a':[],'b':0,'c':'str_0'} │ -│ {'a':[0],'b':1,'c':'str_1'} │ -│ {'a':[0,1],'b':2,'c':'str_2'} │ -└───────────────────────────────┘ -``` - - -## use_with_fill_by_sorting_prefix {#use_with_fill_by_sorting_prefix} - - - - - -Столбцы, расположенные перед столбцами WITH FILL в предложении ORDER BY, образуют сортировочный префикс. Строки с различными значениями сортировочного префикса заполняются независимо - -## validate_enum_literals_in_operators {#validate_enum_literals_in_operators} - - - - - -Если настройка включена, выполняется проверка литералов перечислимого типа в операторах `IN`, `NOT IN`, `==`, `!=` на соответствие типу `Enum`, и генерируется исключение, если литерал не является допустимым значением перечисления. - -## validate_mutation_query {#validate_mutation_query} - - - - - -Проверяет запросы мутаций до их принятия. Мутации выполняются в фоновом режиме, и запуск некорректного запроса приведёт к «зависанию» мутаций, что потребует ручного вмешательства. - -Изменяйте эту настройку только в случае возникновения ошибки, связанной с обратной несовместимостью. - -## validate_polygons {#validate_polygons} - - - - - -Включает или отключает выбрасывание исключения в функции [pointInPolygon](/sql-reference/functions/geo/coordinates#pointinpolygon), если многоугольник является самопересекающимся или самокасательным. - -Возможные значения: - -- 0 — Выбрасывание исключения отключено. `pointInPolygon` принимает некорректные многоугольники и возвращает для них потенциально неверные результаты. -- 1 — Выбрасывание исключения включено. - -## vector_search_filter_strategy {#vector_search_filter_strategy} - - - - - -Если запрос векторного поиска содержит предложение WHERE, этот параметр определяет, вычисляется ли оно первым (предфильтрация) или же сначала используется векторный индекс сходства (постфильтрация). Возможные значения: - -- 'auto' — постфильтрация (точная семантика может измениться в будущем). -- 'postfilter' — использовать векторный индекс сходства для определения ближайших соседей, затем применять остальные фильтры. -- 'prefilter' — сначала применять остальные фильтры, затем выполнять поиск прямым перебором для определения соседей. - -## vector_search_index_fetch_multiplier {#vector_search_index_fetch_multiplier} - -**Псевдонимы**: `vector_search_postfilter_multiplier` - - - - - -Умножает количество ближайших соседей, выбираемых из индекса векторного сходства, на это число. Применяется только при постфильтрации с другими предикатами или если установлена настройка `vector_search_with_rescoring = 1`. - -## vector_search_with_rescoring {#vector_search_with_rescoring} - - - - - -Определяет, выполняет ли ClickHouse повторную переоценку результатов (rescoring) для запросов, использующих индекс векторного сходства. -Без rescoring индекс векторного сходства сразу возвращает строки с наилучшим совпадением. -При включённом rescoring строки расширяются до уровня гранулы, и все строки в этой грануле повторно проверяются. -В большинстве случаев rescoring лишь незначительно повышает точность, но при этом значительно ухудшает производительность запросов векторного поиска. -Примечание: запрос, выполняемый без rescoring и с включёнными параллельными репликами, в некоторых случаях может быть выполнен с rescoring. - -## wait_changes_become_visible_after_commit_mode {#wait_changes_become_visible_after_commit_mode} - - - - - -Ожидать, пока зафиксированные изменения не станут видимыми в последнем снимке - -## wait_for_async_insert {#wait_for_async_insert} - - - -Если имеет значение `true`, ожидает завершения обработки асинхронной вставки - -## wait_for_async_insert_timeout {#wait_for_async_insert_timeout} - - - -Таймаут ожидания обработки асинхронной вставки данных - -## wait_for_window_view_fire_signal_timeout {#wait_for_window_view_fire_signal_timeout} - - - - - -Таймаут ожидания сигнала срабатывания window view при обработке по времени события (event time) - -## window_view_clean_interval {#window_view_clean_interval} - - - - - -Интервал очистки window view в секундах для удаления устаревших данных. - -## window_view_heartbeat_interval {#window_view_heartbeat_interval} - - - - - -Интервал (в секундах) отправки сигнала heartbeat, показывающего, что запрос типа WATCH продолжает выполняться. - -## workload {#workload} - - - -Имя рабочей нагрузки, используемое для доступа к ресурсам - -## write_full_path_in_iceberg_metadata {#write_full_path_in_iceberg_metadata} - - - - - - - -Записывает полные пути (включая s3://) в файлы метаданных Iceberg. - -## write_through_distributed_cache {#write_through_distributed_cache} - - - - - - - -Действует только в ClickHouse Cloud. Разрешает выполнять запись в распределённый кэш (при этом запись в S3 также будет выполняться через распределённый кэш). - -## write_through_distributed_cache_buffer_size {#write_through_distributed_cache_buffer_size} - - - - - - - -Применяется только в ClickHouse Cloud. Задает размер буфера для сквозного (write-through) распределенного кэша. Если установлено значение 0, используется размер буфера, который был бы применен при отсутствии распределенного кэша. - -## zstd_window_log_max {#zstd_window_log_max} - - - -Позволяет задать максимальное значение параметра `window_log` для ZSTD (не используется для семейства MergeTree). \ No newline at end of file +{/*Не редактируйте — этот файл создан автоматически*/ } diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/asynchronous_inserts.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/asynchronous_inserts.md index aab39ba916e..bbe8507c14f 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/asynchronous_inserts.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/asynchronous_inserts.md @@ -1,5 +1,5 @@ --- -description: 'Системная таблица, содержащая информацию о необработанных асинхронных вставках в очереди.' +description: 'Системная таблица, содержащая информацию об асинхронных вставках, ожидающих выполнения в очереди.' keywords: ['system table', 'asynchronous_inserts'] slug: /operations/system-tables/asynchronous_inserts title: 'system.asynchronous_inserts' @@ -10,21 +10,12 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -Содержит информацию о находящихся в очереди асинхронных вставках. +Содержит информацию об асинхронных вставках, ожидающих обработки в очереди. Столбцы: {/*AUTOGENERATED_START*/ } -* `query` ([String](../../sql-reference/data-types/)) — Текст запроса. -* `database` ([String](../../sql-reference/data-types/)) — Имя базы данных. -* `table` ([String](../../sql-reference/data-types/)) — Имя таблицы. -* `format` ([String](../../sql-reference/data-types/)) — Имя формата. -* `first_update` ([DateTime64(6)](../../sql-reference/data-types/)) — Время первой вставки с точностью до микросекунд. -* `total_bytes` ([UInt64](../../sql-reference/data-types/)) — Общее количество байт, ожидающих в очереди. -* `entries.query_id` ([Array(String)](../../sql-reference/data-types/)) — Массив идентификаторов запросов INSERT, ожидающих в очереди. -* `entries.bytes` ([Array(UInt64)](../../sql-reference/data-types/)) — Массив значений размера в байтах для каждого запроса INSERT, ожидающего в очереди. - {/*AUTOGENERATED_END*/ } **Пример** @@ -38,7 +29,7 @@ SELECT * FROM system.asynchronous_inserts LIMIT 1 \G; Результат: ```text -Row 1: +Строка 1: ────── query: INSERT INTO public.data_guess (user_id, datasource_id, timestamp, path, type, num, str) FORMAT CSV database: public @@ -52,5 +43,5 @@ entries.bytes: [133223] **См. также** -* [system.query_log](/operations/system-tables/query_log) — Описание системной таблицы `query_log`, содержащей общую информацию о выполнении запросов. -* [system.asynchronous_insert_log](/operations/system-tables/asynchronous_insert_log) — Описание таблицы, содержащей информацию о выполненных асинхронных вставках. +* [system.query_log](/operations/system-tables/query_log) — Описание системной таблицы `query_log`, которая содержит общую информацию о выполнении запросов. +* [system.asynchronous_insert_log](/operations/system-tables/asynchronous_insert_log) — Эта таблица содержит информацию о выполненных асинхронных вставках. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/asynchronous_loader.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/asynchronous_loader.md index 771bc08884f..9b06d4af607 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/asynchronous_loader.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/asynchronous_loader.md @@ -1,5 +1,5 @@ --- -description: 'Системная таблица, содержащая информацию о последних асинхронных заданиях и их статусе (например, для загружаемых таблиц). Таблица содержит строку для каждого задания.' +description: 'Системная таблица, содержащая информацию о последних асинхронных задачах и их состоянии (например, для загружаемых таблиц). Таблица содержит строку для каждой задачи.' keywords: ['system table', 'asynchronous_loader'] slug: /operations/system-tables/asynchronous_loader title: 'system.asynchronous_loader' @@ -13,7 +13,7 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -Содержит информацию и статус недавних асинхронных заданий (например, по загрузке таблиц). Таблица содержит по одной строке для каждого задания. Для визуализации информации из этой таблицы существует утилита `utils/async_loader_graph`. +Содержит информацию и статус недавних асинхронных задач (например, по загрузке таблиц). В таблице содержится по одной строке на каждую задачу. Для визуализации информации из этой таблицы существует утилита `utils/async_loader_graph`. Пример: @@ -28,53 +28,38 @@ FORMAT Vertical {/*AUTOGENERATED_START*/ } -* `job` ([String](../../sql-reference/data-types/)) — Имя задания (может быть неуникальным). -* `job_id` ([UInt64](../../sql-reference/data-types/)) — Уникальный идентификатор задания. -* `dependencies` ([Array(UInt64)](../../sql-reference/data-types/)) — Список идентификаторов заданий, которые должны быть выполнены перед этим заданием. -* `dependencies_left` ([UInt64](../../sql-reference/data-types/)) — Текущее количество оставшихся к выполнению зависимостей. -* `status` ([Enum8('PENDING' = 0, 'OK' = 1, 'FAILED' = 2, 'CANCELED' = 3)](../../sql-reference/data-types/)) — Текущий статус загрузки задания: PENDING: задание загрузки ещё не запущено. OK: задание загрузки выполнено успешно. FAILED: задание загрузки выполнено с ошибкой. CANCELED: задание загрузки не будет выполнено из‑за удаления или ошибки зависимости. -* `is_executing` ([UInt8](../../sql-reference/data-types/)) — Задание в данный момент выполняется рабочим потоком. -* `is_blocked` ([UInt8](../../sql-reference/data-types/)) — Задание ожидает выполнения своих зависимостей. -* `is_ready` ([UInt8](../../sql-reference/data-types/)) — Задание готово к выполнению и ожидает свободного рабочего потока. -* `elapsed` ([Float64](../../sql-reference/data-types/)) — Количество секунд, прошедших с начала выполнения. Ноль, если задание не запущено. Общее время выполнения, если задание завершено. -* `pool_id` ([UInt64](../../sql-reference/data-types/)) — Идентификатор пула, который сейчас назначен заданию. -* `pool` ([String](../../sql-reference/data-types/)) — Имя пула `pool_id`. -* `priority` ([Int64](../../sql-reference/data-types/)) — Приоритет пула `pool_id`. -* `execution_pool_id` ([UInt64](../../sql-reference/data-types/)) — Идентификатор пула, в котором выполняется задание. Совпадает с изначально назначенным пулом до начала выполнения. -* `execution_pool` ([String](../../sql-reference/data-types/)) — Имя пула `execution_pool_id`. -* `execution_priority` ([Int64](../../sql-reference/data-types/)) — Приоритет пула `execution_pool_id`. -* `ready_seqno` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Не `null` для готовых заданий. Рабочий поток выбирает следующее задание для выполнения из очереди готовых заданий своего пула. Если есть несколько готовых заданий, выбирается задание с наименьшим значением `ready_seqno`. -* `waiters` ([UInt64](../../sql-reference/data-types/)) — Количество потоков, ожидающих это задание. -* `exception` ([Nullable(String)](../../sql-reference/data-types/)) — Не `null` для завершившихся с ошибкой и отменённых заданий. Содержит сообщение об ошибке, возникшей при выполнении запроса, или ошибку, приведшую к отмене этого задания, а также цепочку зависимостей с именами заданий. -* `schedule_time` ([DateTime64(6)](../../sql-reference/data-types/)) — Время, когда задание было создано и запланировано к выполнению (обычно со всеми его зависимостями). -* `enqueue_time` ([Nullable(DateTime64(6))](../../sql-reference/data-types/)) — Время, когда задание стало готовым и было поставлено в очередь готовых заданий своего пула. `Null`, если задание ещё не готово. -* `start_time` ([Nullable(DateTime64(6))](../../sql-reference/data-types/)) — Время, когда рабочий поток извлекает задание из очереди готовых заданий и начинает его выполнение. `Null`, если задание ещё не запущено. -* `finish_time` ([Nullable(DateTime64(6))](../../sql-reference/data-types/)) — Время завершения выполнения задания. `Null`, если задание ещё не завершено. - {/*AUTOGENERATED_END*/ } -Задача в очереди может находиться в одном из следующих состояний: +Ожидающая задача может находиться в одном из следующих состояний: + +* `is_executing` (`UInt8`) — Задача в данный момент выполняется воркером. +* `is_blocked` (`UInt8`) — Задача ожидает завершения своих зависимостей. +* `is_ready` (`UInt8`) — Задача готова к выполнению и ожидает воркера. +* `elapsed` (`Float64`) — Количество секунд, прошедших с начала выполнения. Ноль, если задача не запущена. Полное время выполнения, если задача завершена. + +У каждой задачи есть связанный с ней пул, и она запускается в этом пуле. У каждого пула есть фиксированный приоритет и изменяемое максимальное число воркеров. Сначала выполняются задачи с более высоким приоритетом (меньшим значением `priority`). Ни одна задача с более низким приоритетом не запускается, пока существует хотя бы одна задача с более высоким приоритетом, которая готова или выполняется. Приоритет задачи может быть повышен (но не понижен) за счёт её приоритизации. Например, задачи для загрузки и инициализации таблицы будут приоритизированы, если входящий запрос требует эту таблицу. Можно приоритизировать задачу во время её выполнения, но задача не переносится из её `execution_pool` во вновь назначенный `pool`. Задача использует `pool` для создания новых задач, чтобы избежать инверсии приоритетов. Уже запущенные задачи не вытесняются задачами с более высоким приоритетом и всегда выполняются до завершения после старта. + +* `pool_id` (`UInt64`) — ID пула, который в настоящий момент назначен задаче. + +* `pool` (`String`) — Имя пула `pool_id`. -* `is_executing` (`UInt8`) — задача в данный момент выполняется исполнителем. -* `is_blocked` (`UInt8`) — задача ожидает завершения своих зависимостей. -* `is_ready` (`UInt8`) — задача готова к выполнению и ожидает исполнителя. -* `elapsed` (`Float64`) — количество секунд, прошедших с начала выполнения. Ноль, если задача не запущена; общее время выполнения, если задача завершена. +* `priority` (`Int64`) — Приоритет пула `pool_id`. +* `execution_pool_id` (`UInt64`) — ID пула, в котором выполняется задача. Совпадает с изначально назначенным пулом до начала выполнения. -Каждая задача имеет связанный с ней пул и запускается в этом пуле. Каждый пул имеет фиксированный приоритет и изменяемое максимальное количество рабочих потоков. Сначала выполняются задачи с более высоким приоритетом (меньшим значением `priority`). Ни одна задача с более низким приоритетом не запускается, пока существует хотя бы одна задача с более высоким приоритетом, готовая к выполнению или уже выполняющаяся. Приоритет задачи может быть повышен (но не может быть понижен) путём её приоритизации. Например, задачи загрузки таблицы и запуска будут приоритизированы, если входящий запрос требует эту таблицу. Возможно приоритизировать задачу во время её выполнения, но задача не переносится из своего `execution_pool` во вновь назначенный `pool`. Для создания новых задач используется `pool`, чтобы избежать инверсии приоритетов. Уже запущенные задачи не вытесняются задачами с более высоким приоритетом и всегда выполняются до завершения после запуска. -- `pool_id` (`UInt64`) - ID пула, который в данный момент назначен задаче. -- `pool` (`String`) - Имя пула `pool_id`. -- `priority` (`Int64`) - Приоритет пула `pool_id`. -- `execution_pool_id` (`UInt64`) - ID пула, в котором выполняется задача. Совпадает с изначально назначенным пулом до начала выполнения. -- `execution_pool` (`String`) - Имя пула `execution_pool_id`. -- `execution_priority` (`Int64`) - Приоритет пула `execution_pool_id`. +* `execution_pool` (`String`) — Имя пула `execution_pool_id`. -- `ready_seqno` (`Nullable(UInt64)`) - Не Null для готовых задач. Рабочий поток выбирает следующую задачу для выполнения из очереди готовых задач своего пула. Если есть несколько готовых задач, выбирается задача с наименьшим значением `ready_seqno`. -- `waiters` (`UInt64`) - Количество потоков, ожидающих эту задачу. -- `exception` (`Nullable(String)`) - Не Null для завершившихся с ошибкой и отменённых задач. Содержит сообщение об ошибке, возникшей во время выполнения запроса, или ошибку, приведшую к отмене этой задачи, вместе с цепочкой сбоев по зависимостям с именами задач. +* `execution_priority` (`Int64`) — Приоритет пула `execution_pool_id`. + +* `ready_seqno` (`Nullable(UInt64)`) — Не равно `NULL` для готовых задач. Воркер забирает следующую задачу для выполнения из очереди готовых задач своего пула. Если есть несколько готовых задач, выбирается задача с наименьшим значением `ready_seqno`. + +* `waiters` (`UInt64`) — Количество потоков, ожидающих эту задачу. + +* `exception` (`Nullable(String)`) — Не равно `NULL` для задач, завершившихся с ошибкой и отменённых задач. Содержит сообщение об ошибке, возникшей во время выполнения запроса, или об ошибке, которая привела к отмене этой задачи, а также цепочку зависимостей с именами задач, завершившихся с ошибкой. Моменты времени в течение жизненного цикла задачи: -- `schedule_time` (`DateTime64`) - Время, когда задача была создана и поставлена в план на выполнение (обычно со всеми её зависимостями). -- `enqueue_time` (`Nullable(DateTime64)`) - Время, когда задача стала готовой и была добавлена в очередь готовых задач своего пула. Null, если задача ещё не готова. -- `start_time` (`Nullable(DateTime64)`) - Время, когда рабочий поток извлекает задачу из очереди готовых задач и начинает её выполнение. Null, если задача ещё не запущена. -- `finish_time` (`Nullable(DateTime64)`) - Время, когда выполнение задачи завершено. Null, если задача ещё не завершена. + +* `schedule_time` (`DateTime64`) — Время, когда задача была создана и запланирована к выполнению (обычно вместе со всеми её зависимостями). +* `enqueue_time` (`Nullable(DateTime64)`) — Время, когда задача стала готовой и была помещена в очередь готовых задач своего пула. `NULL`, если задача ещё не готова. +* `start_time` (`Nullable(DateTime64)`) — Время, когда воркер извлекает задачу из очереди готовых задач и начинает её выполнение. `NULL`, если задача ещё не запущена. +* `finish_time` (`Nullable(DateTime64)`) — Время завершения выполнения задачи. `NULL`, если задача ещё не завершена. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/azure_queue_settings.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/azure_queue_settings.md index cc61a7d6497..7d888744c7e 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/azure_queue_settings.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/azure_queue_settings.md @@ -14,13 +14,4 @@ doc_type: 'reference' {/*AUTOGENERATED_START*/ } -* `database` ([String](../../sql-reference/data-types/)) — База данных таблицы с движком S3Queue. -* `table` ([String](../../sql-reference/data-types/)) — Имя таблицы с движком S3Queue. -* `name` ([String](../../sql-reference/data-types/)) — Имя настройки. -* `value` ([String](../../sql-reference/data-types/)) — Значение настройки. -* `type` ([String](../../sql-reference/data-types/)) — Тип настройки (строковое значение, зависящее от реализации). -* `changed` ([UInt8](../../sql-reference/data-types/)) — 1, если настройка была явно задана в конфигурации или явно изменена. -* `description` ([String](../../sql-reference/data-types/)) — Описание настройки. -* `alterable` ([UInt8](../../sql-reference/data-types/)) — Показывает, может ли текущий пользователь изменять настройку с помощью ALTER TABLE MODIFY SETTING: 0 — текущий пользователь может изменить настройку, 1 — текущий пользователь не может изменить настройку. - {/*AUTOGENERATED_END*/ } diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/build_options.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/build_options.md index 71008643908..d401a602afd 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/build_options.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/build_options.md @@ -1,20 +1,17 @@ --- -description: 'Системная таблица, содержащая информацию о параметрах сборки сервера ClickHouse.' +description: 'Системная таблица, содержащая сведения о параметрах сборки сервера ClickHouse.' slug: /operations/system-tables/build_options title: 'system.build_options' -keywords: ['системная таблица', 'build_options'] +keywords: ['system table', 'build_options'] doc_type: 'reference' --- -Содержит информацию о параметрах сборки сервера ClickHouse. +Содержит сведения о параметрах сборки сервера ClickHouse. Столбцы: {/*AUTOGENERATED_START*/ } -* `name` ([String](../../sql-reference/data-types/)) — Имя опции сборки. -* `value` ([String](../../sql-reference/data-types/)) — Значение опции сборки. - {/*AUTOGENERATED_END*/ } **Пример** diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/clusters.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/clusters.md index 73eae1d4448..c51184996bc 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/clusters.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/clusters.md @@ -1,41 +1,18 @@ --- -description: 'Системная таблица, содержащая информацию о кластерах, доступных в - конфигурационном файле, и серверах, определённых в них.' +description: 'Системная таблица, содержащая информацию о кластерах, определённых в + файле конфигурации, и входящих в них серверах.' keywords: ['системная таблица', 'кластеры'] slug: /operations/system-tables/clusters title: 'system.clusters' doc_type: 'reference' --- -Содержит информацию о кластерах, доступных в конфигурационном файле, и серверах в них. +Содержит информацию о кластерах, определённых в файле конфигурации, и входящих в них серверах. Столбцы: {/*AUTOGENERATED_START*/ } -* `cluster` ([String](../../sql-reference/data-types/)) — Имя кластера. -* `shard_num` ([UInt32](../../sql-reference/data-types/)) — Номер шарда в кластере, начиная с 1. -* `shard_name` ([String](../../sql-reference/data-types/)) — Имя шарда в кластере. -* `shard_weight` ([UInt32](../../sql-reference/data-types/)) — Относительный вес шарда при записи данных. -* `internal_replication` ([UInt8](../../sql-reference/data-types/)) — Флаг, показывающий, является ли этот хост частью ансамбля, способного самостоятельно реплицировать данные. -* `replica_num` ([UInt32](../../sql-reference/data-types/)) — Номер реплики в шарде, начиная с 1. -* `host_name` ([String](../../sql-reference/data-types/)) — Имя хоста, как указано в конфигурации. -* `host_address` ([String](../../sql-reference/data-types/)) — IP-адрес хоста, полученный из DNS. -* `port` ([UInt16](../../sql-reference/data-types/)) — Порт, используемый для подключения к серверу. -* `is_local` ([UInt8](../../sql-reference/data-types/)) — Флаг, показывающий, является ли хост локальным. -* `user` ([String](../../sql-reference/data-types/)) — Имя пользователя для подключения к серверу. -* `default_database` ([String](../../sql-reference/data-types/)) — Имя базы данных по умолчанию. -* `errors_count` ([UInt32](../../sql-reference/data-types/)) — Количество неудачных попыток подключения этого хоста к реплике. -* `slowdowns_count` ([UInt32](../../sql-reference/data-types/)) — Количество замедлений, которые привели к смене реплики при установлении подключения с замещающими (hedged) запросами. -* `estimated_recovery_time` ([UInt32](../../sql-reference/data-types/)) — Оставшееся количество секунд до обнуления счётчика ошибок реплики и её возвращения в нормальное состояние. -* `database_shard_name` ([String](../../sql-reference/data-types/)) — Имя шарда базы данных `Replicated` (для кластеров, которые принадлежат базе данных `Replicated`). -* `database_replica_name` ([String](../../sql-reference/data-types/)) — Имя реплики базы данных `Replicated` (для кластеров, которые принадлежат базе данных `Replicated`). -* `is_shared_catalog_cluster` ([UInt8](../../sql-reference/data-types/)) — Логическое значение, указывающее, принадлежит ли кластер общему каталогу. -* `is_active` ([Nullable(UInt8)](../../sql-reference/data-types/)) — Статус реплики базы данных `Replicated` (для кластеров, которые принадлежат базе данных `Replicated`): 1 — «replica is online», 0 — «replica is offline», NULL — «unknown». -* `unsynced_after_recovery` ([Nullable(UInt8)](../../sql-reference/data-types/)) — Показывает, имеет ли реплика базы данных `Replicated` отставание репликации больше, чем `max_replication_lag_to_enqueue` после создания или восстановления реплики. -* `replication_lag` ([Nullable(UInt32)](../../sql-reference/data-types/)) — Отставание репликации реплики базы данных `Replicated` (для кластеров, которые принадлежат базе данных `Replicated`). -* `recovery_time` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Время восстановления реплики базы данных `Replicated` (для кластеров, которые принадлежат базе данных `Replicated`), в миллисекундах. - {/*AUTOGENERATED_END*/ } **Пример** @@ -68,34 +45,30 @@ estimated_recovery_time: 0 database_shard_name: database_replica_name: is_active: NULL -``` - -Строка 2: +Row 2: ────── -cluster: test_cluster_two_shards -shard_num: 2 -shard_name: shard_02 -shard_weight: 1 -replica_num: 1 -host_name: 127.0.0.2 -host_address: 127.0.0.2 +cluster: test_cluster_two_shards +shard_num: 2 +shard_name: shard_02 +shard_weight: 1 +replica_num: 1 +host_name: 127.0.0.2 +host_address: 127.0.0.2 port: 9000 -is_local: 0 +is_local: 0 user: default -default_database: -errors_count: 0 -slowdowns_count: 0 -estimated_recovery_time: 0 -database_shard_name: -database_replica_name: -is_active: NULL - +default_database: +errors_count: 0 +slowdowns_count: 0 +estimated_recovery_time: 0 +database_shard_name: +database_replica_name: +is_active: NULL ``` **См. также** -- [Движок таблиц Distributed](../../engines/table-engines/special/distributed.md) -- [Настройка distributed_replica_error_cap](../../operations/settings/settings.md#distributed_replica_error_cap) -- [Настройка distributed_replica_error_half_life](../../operations/settings/settings.md#distributed_replica_error_half_life) -``` +* [Табличный движок Distributed](../../engines/table-engines/special/distributed.md) +* [Настройка distributed_replica_error_cap](../../operations/settings/settings.md#distributed_replica_error_cap) +* [Настройка distributed_replica_error_half_life](../../operations/settings/settings.md#distributed_replica_error_half_life) diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/codecs.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/codecs.md index 2e0a384e5dd..1fc57ac4f31 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/codecs.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/codecs.md @@ -1,5 +1,5 @@ --- -description: 'Системная таблица, содержащая информацию о доступных кодеках.' +description: 'Системная таблица, содержащая информацию о кодеках.' keywords: ['system table', 'codecs', 'compression'] slug: /operations/system-tables/codecs title: 'system.codecs' @@ -8,21 +8,12 @@ doc_type: 'reference' Содержит информацию о кодеках сжатия и шифрования. -Вы можете использовать эту таблицу, чтобы получить информацию о доступных кодеках сжатия и шифрования. +Эту таблицу можно использовать для получения информации о доступных кодеках сжатия и шифрования. Таблица `system.codecs` содержит следующие столбцы (тип столбца указан в скобках): {/*AUTOGENERATED_START*/ } -* `name` ([String](../../sql-reference/data-types/)) — Имя кодека. -* `method_byte` ([UInt8](../../sql-reference/data-types/)) — Байт, обозначающий кодек в сжатом файле. -* `is_compression` ([UInt8](../../sql-reference/data-types/)) — Равно 1, если этот кодек что‑то сжимает. В противном случае это может быть просто преобразование, помогающее сжатию. -* `is_generic_compression` ([UInt8](../../sql-reference/data-types/)) — Кодек является универсальным алгоритмом сжатия, таким как LZ4, ZSTD. -* `is_encryption` ([UInt8](../../sql-reference/data-types/)) — Кодек выполняет шифрование. -* `is_timeseries_codec` ([UInt8](../../sql-reference/data-types/)) — Кодек предназначен для временных рядов с плавающей запятой. -* `is_experimental` ([UInt8](../../sql-reference/data-types/)) — Кодек является экспериментальным. -* `description` ([String](../../sql-reference/data-types/)) — Краткое высокоуровневое описание кодека. - {/*AUTOGENERATED_END*/ } **Пример** diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/columns.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/columns.md index c9419dbdfcf..54d500e2848 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/columns.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/columns.md @@ -8,39 +8,15 @@ doc_type: 'reference' Содержит информацию о столбцах во всех таблицах. -Вы можете использовать эту таблицу, чтобы получить информацию, аналогичную запросу [DESCRIBE TABLE](../../sql-reference/statements/describe-table.md), но сразу для нескольких таблиц. +Эту таблицу можно использовать для получения информации, аналогичной запросу [DESCRIBE TABLE](../../sql-reference/statements/describe-table.md), но сразу для нескольких таблиц. -Столбцы из [временных таблиц](../../sql-reference/statements/create/table.md#temporary-tables) видны в `system.columns` только в тех сессиях, где они были созданы. Они отображаются с пустым полем `database`. +Столбцы из [временных таблиц](../../sql-reference/statements/create/table.md#temporary-tables) видны в таблице `system.columns` только в тех сессиях, в которых они были созданы. Они отображаются с пустым полем `database`. Таблица `system.columns` содержит следующие столбцы (тип столбца указан в скобках): {/*AUTOGENERATED_START*/ } -* `database` ([String](../../sql-reference/data-types/)) — Имя базы данных. -* `table` ([String](../../sql-reference/data-types/)) — Имя таблицы. -* `name` ([String](../../sql-reference/data-types/)) — Имя столбца. -* `type` ([String](../../sql-reference/data-types/)) — Тип столбца. -* `position` ([UInt64](../../sql-reference/data-types/)) — Порядковый номер столбца в таблице, начиная с 1. -* `default_kind` ([String](../../sql-reference/data-types/)) — Тип выражения (DEFAULT, MATERIALIZED, ALIAS) для значения по умолчанию или пустая строка, если оно не определено. -* `default_expression` ([String](../../sql-reference/data-types/)) — Выражение для значения по умолчанию или пустая строка, если оно не определено. -* `data_compressed_bytes` ([UInt64](../../sql-reference/data-types/)) — Размер сжатых данных в байтах. -* `data_uncompressed_bytes` ([UInt64](../../sql-reference/data-types/)) — Размер несжатых данных в байтах. -* `marks_bytes` ([UInt64](../../sql-reference/data-types/)) — Размер меток в байтах. -* `comment` ([String](../../sql-reference/data-types/)) — Комментарий к столбцу или пустая строка, если он не определён. -* `is_in_partition_key` ([UInt8](../../sql-reference/data-types/)) — Флаг, показывающий, входит ли столбец в выражение партиционирования. -* `is_in_sorting_key` ([UInt8](../../sql-reference/data-types/)) — Флаг, показывающий, входит ли столбец в выражение ключа сортировки. -* `is_in_primary_key` ([UInt8](../../sql-reference/data-types/)) — Флаг, показывающий, входит ли столбец в выражение первичного ключа. -* `is_in_sampling_key` ([UInt8](../../sql-reference/data-types/)) — Флаг, показывающий, входит ли столбец в выражение ключа семплирования. -* `compression_codec` ([String](../../sql-reference/data-types/)) — Имя кодека сжатия. -* `character_octet_length` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Максимальная длина в байтах для двоичных, символьных, текстовых данных и изображений. В ClickHouse имеет смысл только для типа данных FixedString. В противном случае возвращается значение NULL. -* `numeric_precision` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Точность приблизительных числовых данных, точных числовых данных, целочисленных данных или денежных данных. В ClickHouse это разрядность (ширина в битах) для целочисленных типов и десятичная точность для типов Decimal. В противном случае возвращается значение NULL. -* `numeric_precision_radix` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Основание системы счисления для точности приблизительных числовых данных, точных числовых данных, целочисленных данных или денежных данных. В ClickHouse это 2 для целочисленных типов и 10 для типов Decimal. В противном случае возвращается значение NULL. -* `numeric_scale` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Масштаб (scale) приблизительных числовых данных, точных числовых данных, целочисленных данных или денежных данных. В ClickHouse имеет смысл только для типов Decimal. В противном случае возвращается значение NULL. -* `datetime_precision` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Десятичная точность типа данных DateTime64. Для других типов данных возвращается значение NULL. -* `serialization_hint` ([Nullable(String)](../../sql-reference/data-types/)) — Подсказка для выбора способа сериализации данных столбца при вставках на основе статистики. -* `statistics` ([String](../../sql-reference/data-types/)) — Типы статистики, созданные для этого столбца. - -{/*АВТОСГЕНЕРИРОВАНО_КОНЕЦ*/ } +{/*AUTOGENERATED_END*/ } **Пример** @@ -48,9 +24,8 @@ doc_type: 'reference' SELECT * FROM system.columns LIMIT 2 FORMAT Vertical; ``` - ```text -Row 1: +Строка 1: ────── database: INFORMATION_SCHEMA table: COLUMNS @@ -74,7 +49,7 @@ numeric_precision_radix: ᴺᵁᴸᴸ numeric_scale: ᴺᵁᴸᴸ datetime_precision: ᴺᵁᴸᴸ -Row 2: +Строка 2: ────── database: INFORMATION_SCHEMA table: COLUMNS diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/contributors.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/contributors.md index ab8d0fc99df..92871db49d8 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/contributors.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/contributors.md @@ -6,14 +6,12 @@ title: 'system.contributors' doc_type: 'reference' --- -Содержит информацию об участниках. Порядок строк при выполнении запроса является случайным. +Содержит информацию об участниках. Порядок является случайным при выполнении запроса. Столбцы: {/*AUTOGENERATED_START*/ } -* `name` ([String](../../sql-reference/data-types/)) — имя участника (автора) из журнала Git. - {/*AUTOGENERATED_END*/ } **Пример** @@ -37,7 +35,7 @@ SELECT * FROM system.contributors LIMIT 10 └──────────────────┘ ``` -Чтобы найти свою запись в таблице, выполните запрос: +Чтобы найти свои данные в таблице, выполните запрос: ```sql SELECT * FROM system.contributors WHERE name = 'Olga Khvostikova' diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/dashboards.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/dashboards.md index 26f34c0388f..e3d2de36c24 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/dashboards.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/dashboards.md @@ -1,13 +1,13 @@ --- -description: 'Содержит запросы, используемые на странице `/dashboard`, доступной через HTTP-интерфейс. Может быть полезна для мониторинга и устранения неполадок.' -keywords: ['системная таблица', 'дашборды', 'мониторинг', 'устранение неполадок'] +description: 'Содержит запросы, используемые на странице `/dashboard`, доступной через HTTP-интерфейс. Полезно для мониторинга и устранения неполадок.' +keywords: ['system table', 'dashboards', 'monitoring', 'troubleshooting'] slug: /operations/system-tables/dashboards title: 'system.dashboards' doc_type: 'reference' --- -Содержит запросы, используемые на странице `/dashboard`, доступной через [HTTP-интерфейс](/interfaces/http.md). -Эта таблица может быть полезна для мониторинга и устранения неполадок. Таблица содержит строку для каждого графика в дашборде. +Содержит запросы, используемые страницей `/dashboard`, доступной через [HTTP-интерфейс](/interfaces/http.md). +Эта таблица может быть полезна для мониторинга и устранения неполадок. Таблица содержит по одной строке для каждого графика на дашборде. :::note Страница `/dashboard` может отображать запросы не только из `system.dashboards`, но и из любой таблицы с той же схемой. @@ -68,8 +68,4 @@ ORDER BY t WITH FILL STEP {rounding:UInt32} {/*AUTOGENERATED_START*/ } -* `dashboard` ([String](../../sql-reference/data-types/)) — Имя панели. -* `title` ([String](../../sql-reference/data-types/)) — Заголовок графика. -* `query` ([String](../../sql-reference/data-types/)) — Запрос для получения данных, которые будут отображаться. - {/*AUTOGENERATED_END*/ } diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/data_skipping_indices.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/data_skipping_indices.md index 04d8cd26f79..a65359f1f6d 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/data_skipping_indices.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/data_skipping_indices.md @@ -1,5 +1,5 @@ --- -description: 'Системная таблица, содержащая информацию о существующих индексах пропуска данных +description: 'Системная таблица, содержащая информацию об имеющихся индексах пропуска данных во всех таблицах.' keywords: ['system table', 'data_skipping_indices'] slug: /operations/system-tables/data_skipping_indices @@ -7,24 +7,13 @@ title: 'system.data_skipping_indices' doc_type: 'reference' --- -Содержит информацию о существующих индексах пропуска данных во всех таблицах. +Содержит информацию об имеющихся индексах пропуска данных во всех таблицах. Столбцы: {/*AUTOGENERATED_START*/ } -* `database` ([String](../../sql-reference/data-types/)) — Имя базы данных. -* `table` ([String](../../sql-reference/data-types/)) — Имя таблицы. -* `name` ([String](../../sql-reference/data-types/)) — Имя индекса. -* `type` ([String](../../sql-reference/data-types/)) — Тип индекса. -* `type_full` ([String](../../sql-reference/data-types/)) — Выражение типа индекса из запроса `CREATE`. -* `expr` ([String](../../sql-reference/data-types/)) — Выражение для вычисления индекса. -* `granularity` ([UInt64](../../sql-reference/data-types/)) — Количество гранул в блоке. -* `data_compressed_bytes` ([UInt64](../../sql-reference/data-types/)) — Размер сжатых данных в байтах. -* `data_uncompressed_bytes` ([UInt64](../../sql-reference/data-types/)) — Размер распакованных данных в байтах. -* `marks_bytes` ([UInt64](../../sql-reference/data-types/)) — Размер меток в байтах. - -{/*AUTOGENERATED_END*/ } +{/*КОНЕЦ_АВТОГЕНЕРАЦИИ*/ } **Пример** diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/data_type_families.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/data_type_families.md index 07e77152948..f867b278e5e 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/data_type_families.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/data_type_families.md @@ -12,10 +12,6 @@ doc_type: 'reference' {/*AUTOGENERATED_START*/ } -* `name` ([String](../../sql-reference/data-types/)) — Имя типа данных. -* `case_insensitive` ([UInt8](../../sql-reference/data-types/)) — Свойство, показывающее, можно ли использовать имя типа данных в запросе без учета регистра. Например, `Date` и `date` оба допустимы. -* `alias_to` ([String](../../sql-reference/data-types/)) — Имя типа данных, для которого `name` является псевдонимом. - {/*AUTOGENERATED_END*/ } **Пример** @@ -41,4 +37,4 @@ SELECT * FROM system.data_type_families WHERE alias_to = 'String' **См. также** -* [Синтаксис](../../sql-reference/syntax.md) — информация о поддерживаемом синтаксисе. +* [Синтаксис](../../sql-reference/syntax.md) — сведения о поддерживаемом синтаксисе. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/database_engines.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/database_engines.md index 814febeef75..ceff7c09866 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/database_engines.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/database_engines.md @@ -1,5 +1,6 @@ --- -description: 'Системная таблица со списком движков баз данных, поддерживаемых сервером.' +description: 'Системная таблица со списком движков баз данных, поддерживаемых + сервером.' keywords: ['system table', 'database_engines'] slug: /operations/system-tables/database_engines title: 'system.database_engines' @@ -8,12 +9,10 @@ doc_type: 'reference' Содержит список движков баз данных, поддерживаемых сервером. -В этой таблице представлены следующие столбцы (тип столбца указан в скобках): +Таблица содержит следующие столбцы (тип столбца указан в скобках): {/*AUTOGENERATED_START*/ } -* `name` ([String](../../sql-reference/data-types/)) — Имя движка базы данных. - {/*AUTOGENERATED_END*/ } Пример: @@ -26,8 +25,8 @@ WHERE name IN ('Atomic', 'Lazy', 'Ordinary') ```text ┌─name─────┐ -│ Обычный │ -│ Атомный │ -│ Ленивый │ +│ Ordinary │ +│ Atomic │ +│ Lazy │ └──────────┘ ``` diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/database_replicas.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/database_replicas.md index e4b03ebfe82..ffc9540e1cf 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/database_replicas.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/database_replicas.md @@ -1,29 +1,17 @@ --- -description: 'Системная таблица, содержащая информацию и состояние реплицируемой базы данных.' +description: 'Системная таблица, содержащая сведения о реплицируемой базе данных и состоянии её реплик.' keywords: ['system table', 'database_replicas'] slug: /operations/system-tables/database_replicas title: 'system.database_replicas' doc_type: 'reference' --- -Содержит информацию о каждой реплике базы данных типа Replicated. +Содержит сведения о каждой реплике базы данных с движком Replicated. Столбцы: {/*AUTOGENERATED_START*/ } -* `database` ([String](../../sql-reference/data-types/)) — Имя реплицируемой базы данных. -* `is_readonly` ([UInt8](../../sql-reference/data-types/)) — Находится ли реплика базы данных в режиме только для чтения. -* `max_log_ptr` ([Int32](../../sql-reference/data-types/)) — Максимальный номер записи в журнале общей активности. -* `replica_name` ([String](../../sql-reference/data-types/)) — Имя реплики в ClickHouse Keeper. -* `replica_path` ([String](../../sql-reference/data-types/)) — Путь к данным реплики в ClickHouse Keeper. -* `zookeeper_path` ([String](../../sql-reference/data-types/)) — Путь к данным базы данных в ClickHouse Keeper. -* `shard_name` ([String](../../sql-reference/data-types/)) — Имя шарда в кластере. -* `log_ptr` ([Int32](../../sql-reference/data-types/)) — Максимальный номер записи в журнале общей активности, которую реплика скопировала в свою очередь выполнения, плюс один. -* `total_replicas` ([UInt32](../../sql-reference/data-types/)) — Общее количество известных реплик этой базы данных. -* `zookeeper_exception` ([String](../../sql-reference/data-types/)) — Сообщение последнего исключения, полученное при возникновении ошибки во время получения информации из ClickHouse Keeper. -* `is_session_expired` ([UInt8](../../sql-reference/data-types/)) — Сеанс с ClickHouse Keeper истёк. По сути — то же самое, что `is_readonly`. - {/*AUTOGENERATED_END*/ } **Пример** @@ -33,7 +21,7 @@ SELECT * FROM system.database_replicas FORMAT Vertical; ``` ```text -Строка 1: +Row 1: ────── database: db_2 is_readonly: 0 diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/databases.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/databases.md index 941a26368bb..1b70c8a0076 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/databases.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/databases.md @@ -1,30 +1,20 @@ --- -description: 'Системная таблица, содержащая сведения о базах данных, доступных - текущему пользователю.' -keywords: ['system table', 'databases'] +description: 'Системная таблица, содержащая информацию о базах данных, доступных текущему пользователю.' +keywords: ['системная таблица', 'базы данных'] slug: /operations/system-tables/databases title: 'system.databases' doc_type: 'reference' --- -Содержит сведения о базах данных, доступных текущему пользователю. +Содержит информацию о базах данных, доступных текущему пользователю. Столбцы: -{/*АВТОГЕНЕРАЦИЯ_НАЧАЛО*/ } - -* `name` ([String](../../sql-reference/data-types/)) — Имя базы данных. -* `engine` ([String](../../sql-reference/data-types/)) — Движок базы данных. -* `data_path` ([String](../../sql-reference/data-types/)) — Путь к данным. -* `metadata_path` ([String](../../sql-reference/data-types/)) — Путь к метаданным. -* `uuid` ([UUID](../../sql-reference/data-types/)) — UUID базы данных. -* `engine_full` ([String](../../sql-reference/data-types/)) — Параметры движка базы данных. -* `comment` ([String](../../sql-reference/data-types/)) — Комментарий базы данных. -* `is_external` ([UInt8](../../sql-reference/data-types/)) — База данных является внешней (например, PostgreSQL/DataLakeCatalog). +{/*AUTOGENERGED_START*/ } {/*AUTOGENERATED_END*/ } -Столбец `name` из этой системной таблицы используется для реализации запроса `SHOW DATABASES`. +Столбец `name` в этой системной таблице используется для реализации запроса `SHOW DATABASES`. **Пример** @@ -34,7 +24,7 @@ doc_type: 'reference' CREATE DATABASE test; ``` -Проверьте все базы данных, доступные пользователю. +Просмотрите все базы данных, доступные пользователю. ```sql SELECT * FROM system.databases; diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/detached_tables.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/detached_tables.md index f64ddf1fc7a..9c1834e75c9 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/detached_tables.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/detached_tables.md @@ -1,23 +1,17 @@ --- -description: 'Системная таблица, содержащая информацию о каждой отсоединённой таблице.' +description: 'Системная таблица, содержащая информацию обо всех отсоединённых таблицах.' keywords: ['system table', 'detached_tables'] slug: /operations/system-tables/detached_tables title: 'system.detached_tables' doc_type: 'reference' --- -Содержит информацию о каждой отсоединённой таблице. +Содержит информацию обо всех отсоединённых таблицах. Столбцы: {/*AUTOGENERATED_START*/ } -* `database` ([String](../../sql-reference/data-types/)) — Имя базы данных, в которой находится таблица. -* `table` ([String](../../sql-reference/data-types/)) — Имя таблицы. -* `uuid` ([UUID](../../sql-reference/data-types/)) — UUID таблицы (база данных Atomic). -* `metadata_path` ([String](../../sql-reference/data-types/)) — Путь к метаданным таблицы в файловой системе. -* `is_permanently` ([UInt8](../../sql-reference/data-types/)) — Таблица была окончательно отсоединена. - {/*AUTOGENERATED_END*/ } **Пример** @@ -27,7 +21,7 @@ SELECT * FROM system.detached_tables FORMAT Vertical; ``` ```text -Row 1: +Строка 1: ────── database: base table: t1 diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/dictionaries.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/dictionaries.md index c08afbe3136..5f165caaba5 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/dictionaries.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/dictionaries.md @@ -1,6 +1,6 @@ --- -description: 'Системная таблица, содержащая сведения о словарях' -keywords: ['system table', 'словари'] +description: 'Системная таблица, содержащая информацию о словарях' +keywords: ['системная таблица', 'словари'] slug: /operations/system-tables/dictionaries title: 'system.dictionaries' doc_type: 'reference' @@ -14,52 +14,14 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; Столбцы: - {/*AUTOGENERATED_START*/ } -* `database` ([String](../../sql-reference/data-types/)) — Имя базы данных, содержащей словарь, созданный DDL-запросом. Пустая строка для других словарей. -* `name` ([String](../../sql-reference/data-types/)) — Имя словаря. -* `uuid` ([UUID](../../sql-reference/data-types/)) — UUID словаря. -* `status` ([Enum8('NOT_LOADED' = 0, 'LOADED' = 1, 'FAILED' = 2, 'LOADING' = 3, 'FAILED_AND_RELOADING' = 4, 'LOADED_AND_RELOADING' = 5, 'NOT_EXIST' = 6)](../../sql-reference/data-types/)) — Статус словаря. Возможные значения: - * **NOT_LOADED** — Словарь не был загружен, так как не использовался - * **LOADED** — Словарь успешно загружен - * **FAILED** — Не удалось загрузить словарь из-за ошибки - * **LOADING** — Словарь сейчас загружается - * **LOADED_AND_RELOADING** — Словарь успешно загружен - * **и в данный момент перезагружается (частые причины: запрос SYSTEM RELOAD DICTIONARY** — - * **таймаут** — - * **изменение конфигурации словаря)** — - * **FAILED_AND_RELOADING** — Не удалось загрузить словарь из-за ошибки, и сейчас он загружается. -* `origin` ([String](../../sql-reference/data-types/)) — Путь к конфигурационному файлу, который описывает словарь. -* `type` ([String](../../sql-reference/data-types/)) — Тип размещения словаря. См. «Хранение словарей в памяти». -* `key.names` ([Array(String)](../../sql-reference/data-types/)) — Массив имён ключей, предоставленных словарём. -* `key.types` ([Array(String)](../../sql-reference/data-types/)) — Соответствующий массив типов ключей, предоставленных словарём. -* `attribute.names` ([Array(String)](../../sql-reference/data-types/)) — Массив имён атрибутов, предоставленных словарём. -* `attribute.types` ([Array(String)](../../sql-reference/data-types/)) — Соответствующий массив типов атрибутов, предоставленных словарём. -* `bytes_allocated` ([UInt64](../../sql-reference/data-types/)) — Объём оперативной памяти, выделенной для словаря. -* `hierarchical_index_bytes_allocated` ([UInt64](../../sql-reference/data-types/)) — Объём оперативной памяти, выделенной для иерархического индекса. -* `query_count` ([UInt64](../../sql-reference/data-types/)) — Количество запросов с момента загрузки словаря или последней успешной перезагрузки. -* `hit_rate` ([Float64](../../sql-reference/data-types/)) — Для кэш-словарей — процент обращений, при которых значение было найдено в кэше. -* `found_rate` ([Float64](../../sql-reference/data-types/)) — Процент обращений, при которых значение было найдено. -* `element_count` ([UInt64](../../sql-reference/data-types/)) — Количество элементов, хранящихся в словаре. -* `load_factor` ([Float64](../../sql-reference/data-types/)) — Процент заполнения словаря (для хеш-словаря — процент заполнения хеш-таблицы). -* `source` ([String](../../sql-reference/data-types/)) — Текстовое описание источника данных для словаря. -* `lifetime_min` ([UInt64](../../sql-reference/data-types/)) — Минимальное время жизни словаря в памяти, по истечении которого ClickHouse пытается перезагрузить словарь (если задан `invalidate_query`, то только если он изменился). Указывается в секундах. -* `lifetime_max` ([UInt64](../../sql-reference/data-types/)) — Максимальное время жизни словаря в памяти, по истечении которого ClickHouse пытается перезагрузить словарь (если задан `invalidate_query`, то только если он изменился). Указывается в секундах. -* `loading_start_time` ([DateTime](../../sql-reference/data-types/)) — Время начала загрузки словаря. -* `last_successful_update_time` ([DateTime](../../sql-reference/data-types/)) — Время окончания загрузки или обновления словаря. Помогает контролировать проблемы с источниками словаря и исследовать их причины. -* `error_count` ([UInt64](../../sql-reference/data-types/)) — Количество ошибок с момента последней успешной загрузки. Помогает контролировать проблемы с источниками словаря и исследовать их причины. -* `loading_duration` ([Float32](../../sql-reference/data-types/)) — Длительность загрузки словаря. -* `last_exception` ([String](../../sql-reference/data-types/)) — Текст ошибки, возникающей при создании или перезагрузке словаря, если словарь не удалось создать. -* `comment` ([String](../../sql-reference/data-types/)) — Текст комментария к словарю. - {/*AUTOGENERATED_END*/ } **Пример** Настройте словарь: - ```sql CREATE DICTIONARY dictionary_with_comment ( diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/disks.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/disks.md index 50a4f4c05ee..b297b9c4626 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/disks.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/disks.md @@ -1,5 +1,5 @@ --- -description: 'Системная таблица, содержащая информацию о дисках, определённых в конфигурации сервера' +description: 'Системная таблица, содержащая информацию о дисках, заданных в конфигурации сервера' keywords: ['системная таблица', 'диски'] slug: /operations/system-tables/disks title: 'system.disks' @@ -16,22 +16,6 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; {/*AUTOGENERATED_START*/ } -* `name` ([String](../../sql-reference/data-types/)) — Имя диска в конфигурации сервера. -* `path` ([String](../../sql-reference/data-types/)) — Путь к точке монтирования в файловой системе. -* `free_space` ([UInt64](../../sql-reference/data-types/)) — Свободное место на диске в байтах. -* `total_space` ([UInt64](../../sql-reference/data-types/)) — Объём диска в байтах. -* `unreserved_space` ([UInt64](../../sql-reference/data-types/)) — Свободное место, не занятое резервациями (free_space минус размер резерваций, занятых слияниями, вставками и другими текущими операциями записи на диск). -* `keep_free_space` ([UInt64](../../sql-reference/data-types/)) — Объём дискового пространства, который должен оставаться свободным, в байтах. Определяется параметром keep_free_space_bytes в конфигурации диска. -* `type` ([String](../../sql-reference/data-types/)) — Тип диска, который указывает, где диск хранит данные: в RAM, на локальном накопителе или в удалённом хранилище. -* `object_storage_type` ([String](../../sql-reference/data-types/)) — Тип объектного хранилища, если тип диска — object_storage. -* `metadata_type` ([String](../../sql-reference/data-types/)) — Тип хранилища метаданных, если тип диска — object_storage. -* `is_encrypted` ([UInt8](../../sql-reference/data-types/)) — Флаг, показывающий, шифрует ли диск исходные данные. -* `is_read_only` ([UInt8](../../sql-reference/data-types/)) — Флаг, указывающий, что с этим диском можно выполнять только операции чтения. -* `is_write_once` ([UInt8](../../sql-reference/data-types/)) — Флаг, указывающий, что диск является write-once. Это означает, что он поддерживает BACKUP на этот диск, но не поддерживает INSERT в таблицу MergeTree на этом диске. -* `is_remote` ([UInt8](../../sql-reference/data-types/)) — Флаг, указывающий, что операции с этим диском предполагают сетевое взаимодействие. -* `is_broken` ([UInt8](../../sql-reference/data-types/)) — Флаг, указывающий, что диск неисправен. Повреждённые диски будут иметь 0 свободного места и не могут быть использованы. -* `cache_path` ([String](../../sql-reference/data-types/)) — Путь к каталогу кэша на локальном накопителе, если диск поддерживает кэширование. - {/*AUTOGENERATED_END*/ } **Пример** @@ -45,5 +29,5 @@ SELECT * FROM system.disks; │ default │ /var/lib/clickhouse/ │ 276392587264 │ 490652508160 │ 0 │ └─────────┴──────────────────────┴──────────────┴──────────────┴─────────────────┘ -1 строка в наборе. Прошло: 0.001 сек. +1 строка в наборе. Затрачено: 0.001 сек. ``` diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/distributed_ddl_queue.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/distributed_ddl_queue.md index 0804c9c1213..d59b287cc5d 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/distributed_ddl_queue.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/distributed_ddl_queue.md @@ -1,34 +1,17 @@ --- -description: 'Системная таблица, содержащая информацию о распределённых DDL-запросах (запросах - с использованием предложения ON CLUSTER), которые были выполнены в кластере.' +description: 'Системная таблица, содержащая информацию о распределённых DDL-запросах (запросах с оператором ON CLUSTER), которые были выполнены на кластере.' keywords: ['system table', 'distributed_ddl_queue'] slug: /operations/system-tables/distributed_ddl_queue title: 'system.distributed_ddl_queue' doc_type: 'reference' --- -Содержит информацию о [распределённых DDL-запросах (предложение ON CLUSTER)](../../sql-reference/distributed-ddl.md), которые были выполнены в кластере. +Содержит информацию о [распределённых DDL-запросах (с оператором ON CLUSTER)](../../sql-reference/distributed-ddl.md), которые были выполнены на кластере. Столбцы: {/*AUTOGENERATED_START*/ } -* `entry` ([String](../../sql-reference/data-types/)) — Идентификатор запроса. -* `entry_version` ([Nullable(UInt8)](../../sql-reference/data-types/)) — Версия записи. -* `initiator_host` ([Nullable(String)](../../sql-reference/data-types/)) — Хост, инициировавший DDL-операцию. -* `initiator_port` ([Nullable(UInt16)](../../sql-reference/data-types/)) — Порт, используемый инициатором. -* `cluster` ([String](../../sql-reference/data-types/)) — Имя кластера, пустая строка, если не определено. -* `query` ([String](../../sql-reference/data-types/)) — Выполненный запрос. -* `settings` ([Map(String, String)](../../sql-reference/data-types/)) — Настройки, используемые в DDL-операции. -* `query_create_time` ([DateTime](../../sql-reference/data-types/)) — Время создания запроса. -* `host` ([Nullable(String)](../../sql-reference/data-types/)) — Имя хоста. -* `port` ([Nullable(UInt16)](../../sql-reference/data-types/)) — Порт хоста. -* `status` ([Nullable(Enum8('Inactive' = 0, 'Active' = 1, 'Finished' = 2, 'Removing' = 3, 'Unknown' = 4))](../../sql-reference/data-types/)) — Статус запроса. -* `exception_code` ([Nullable(UInt16)](../../sql-reference/data-types/)) — Код исключения. -* `exception_text` ([Nullable(String)](../../sql-reference/data-types/)) — Сообщение исключения. -* `query_finish_time` ([Nullable(DateTime)](../../sql-reference/data-types/)) — Время завершения запроса. -* `query_duration_ms` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Длительность выполнения запроса (в миллисекундах). - {/*AUTOGENERATED_END*/ } **Пример** @@ -78,5 +61,5 @@ exception_text: Code: 630. DB::Exception: Cannot drop or rename test_db, beca query_finish_time: 2023-09-01 16:15:14 query_duration_ms: 154 -Получено 2 строки. Прошло: 0.025 сек. +2 строки в наборе. Затрачено: 0.025 сек. ``` diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/distribution_queue.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/distribution_queue.md index 192ba11c5dd..afdecb45608 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/distribution_queue.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/distribution_queue.md @@ -1,30 +1,18 @@ --- description: 'Системная таблица, содержащая информацию о локальных файлах, находящихся - в очереди на отправку шардам.' -keywords: ['системная таблица', 'distribution_queue'] + в очереди на отправку сегментам.' +keywords: ['system table', 'distribution_queue'] slug: /operations/system-tables/distribution_queue title: 'system.distribution_queue' doc_type: 'reference' --- -Содержит информацию о локальных файлах, которые находятся в очереди на отправку шардам. Эти локальные файлы содержат новые части, создаваемые при асинхронной вставке новых данных в таблицу Distributed. +Содержит информацию о локальных файлах, которые находятся в очереди на отправку сегментам. Эти локальные файлы содержат новые части, создаваемые при асинхронной вставке новых данных в распределённую таблицу Distributed. Столбцы: {/*AUTOGENERATED_START*/ } -* `database` ([String](../../sql-reference/data-types/)) — Имя базы данных. -* `table` ([String](../../sql-reference/data-types/)) — Имя таблицы. -* `data_path` ([String](../../sql-reference/data-types/)) — Путь к папке с локальными файлами. -* `is_blocked` ([UInt8](../../sql-reference/data-types/)) — Флаг, показывающий, заблокирована ли отправка локальных файлов на сервер. -* `error_count` ([UInt64](../../sql-reference/data-types/)) — Количество ошибок. -* `data_files` ([UInt64](../../sql-reference/data-types/)) — Количество локальных файлов в папке. -* `data_compressed_bytes` ([UInt64](../../sql-reference/data-types/)) — Размер сжатых данных в локальных файлах, в байтах. -* `broken_data_files` ([UInt64](../../sql-reference/data-types/)) — Количество файлов, помеченных как повреждённые (из‑за ошибки). -* `broken_data_compressed_bytes` ([UInt64](../../sql-reference/data-types/)) — Размер сжатых данных в повреждённых файлах, в байтах. -* `last_exception` ([String](../../sql-reference/data-types/)) — Текстовое сообщение о последней возникшей ошибке (если она была). -* `last_exception_time` ([DateTime](../../sql-reference/data-types/)) — Время возникновения последнего исключения. - {/*AUTOGENERATED_END*/ } **Пример** @@ -48,4 +36,4 @@ SELECT * FROM system.distribution_queue LIMIT 1 FORMAT Vertical; **См. также** -* [Движок распределённых таблиц](../../engines/table-engines/special/distributed.md) +* [Движок таблиц Distributed](../../engines/table-engines/special/distributed.md) diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/dns_cache.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/dns_cache.md index 3e952150dd0..5cd443e6e05 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/dns_cache.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/dns_cache.md @@ -1,6 +1,6 @@ --- description: 'Системная таблица, содержащая информацию о кэшированных DNS-записях.' -keywords: ['системная таблица', 'dns_cache'] +keywords: ['system table', 'dns_cache'] slug: /operations/system-tables/dns_cache title: 'system.dns_cache' doc_type: 'reference' @@ -10,17 +10,12 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -Содержит информацию о кэшированных DNS‑записях. +Содержит информацию о кэшированных DNS-записях. Столбцы: {/*AUTOGENERATED_START*/ } -* `hostname` ([String](../../sql-reference/data-types/)) — Имя хоста. -* `ip_address` ([String](../../sql-reference/data-types/)) — IP-адрес. -* `ip_family` ([Enum8('IPv4' = 0, 'IPv6' = 1, 'UNIX_LOCAL' = 2)](../../sql-reference/data-types/)) — Семейство IP-адресов. -* `cached_at` ([DateTime](../../sql-reference/data-types/)) — Метка времени кэширования записи. - {/*AUTOGENERATED_END*/ } **Пример** diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/dropped_tables.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/dropped_tables.md index cf74b1c40ce..a9daf39aaee 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/dropped_tables.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/dropped_tables.md @@ -1,30 +1,22 @@ --- -description: 'Системная таблица, содержащая сведения о таблицах, для которых был выполнен оператор DROP TABLE, но очистка данных ещё не была выполнена' +description: 'Системная таблица, содержащая информацию о таблицах, для которых был выполнен оператор DROP TABLE, но очистка данных ещё не выполнена' keywords: ['system table', 'dropped_tables'] slug: /operations/system-tables/dropped_tables title: 'system.dropped_tables' doc_type: 'reference' --- -Содержит сведения о таблицах, для которых был выполнен оператор `DROP TABLE`, но очистка данных ещё не была выполнена. +Содержит информацию о таблицах, для которых был выполнен оператор DROP TABLE, но очистка данных ещё не выполнена. Столбцы: {/*AUTOGENERATED_START*/ } -* `index` ([UInt32](../../sql-reference/data-types/)) — Индекс в очереди marked_dropped_tables. -* `database` ([String](../../sql-reference/data-types/)) — Имя базы данных. -* `table` ([String](../../sql-reference/data-types/)) — Имя таблицы. -* `uuid` ([UUID](../../sql-reference/data-types/)) — UUID таблицы. -* `engine` ([String](../../sql-reference/data-types/)) — Имя движка таблицы. -* `metadata_dropped_path` ([String](../../sql-reference/data-types/)) — Путь к файлу метаданных таблицы в каталоге metadata_dropped. -* `table_dropped_time` ([DateTime](../../sql-reference/data-types/)) — Время, когда запланирована следующая попытка удаления данных таблицы. Как правило, это момент удаления таблицы плюс `database_atomic_delay_before_drop_table_sec`. - {/*AUTOGENERATED_END*/ } **Пример** -В следующем примере показано, как получить информацию о `dropped_tables`. +Следующий пример демонстрирует, как получить информацию о `dropped_tables`. ```sql SELECT * diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/error_log.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/error_log.md index 0ff26890968..95a3d588a57 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/error_log.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/error_log.md @@ -1,6 +1,7 @@ --- -description: 'Системная таблица, содержащая историю значений ошибок из таблицы `system.errors`, которая периодически сбрасывается на диск.' -keywords: ['system table', 'error_log'] +description: 'Системная таблица, содержащая историю значений ошибок из таблицы `system.errors`, + периодически сохраняемую на диск.' +keywords: ['системная таблица', 'error_log'] slug: /operations/system-tables/system-error-log title: 'system.error_log' doc_type: 'reference' @@ -18,9 +19,13 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; * `event_date` ([Date](../../sql-reference/data-types/date.md)) — Дата события. * `event_time` ([DateTime](../../sql-reference/data-types/datetime.md)) — Время события. * `code` ([Int32](../../sql-reference/data-types/int-uint.md)) — Код ошибки. -* `error` ([LowCardinality(String)](../../sql-reference/data-types/string.md)) — Название ошибки. +* `error` ([LowCardinality(String)](../../sql-reference/data-types/string.md)) — Имя ошибки. * `value` ([UInt64](../../sql-reference/data-types/int-uint.md)) — Количество возникновений этой ошибки. -* `remote` ([UInt8](../../sql-reference/data-types/int-uint.md)) — Удалённое исключение (то есть полученное во время одного из распределённых запросов). +* `remote` ([UInt8](../../sql-reference/data-types/int-uint.md)) — Удалённое исключение (т. е. полученное во время одного из распределённых запросов). +* `last_error_time` ([DateTime](../../sql-reference/data-types/datetime.md)) — Время, когда произошла последняя ошибка. +* `last_error_message` ([String](../../sql-reference/data-types/string.md)) — Сообщение последней ошибки. +* `last_error_query_id` ([String](../../sql-reference/data-types/string.md)) — Идентификатор запроса, который вызвал последнюю ошибку (если доступен). +* `last_error_trace` ([Array(UInt64)](../../sql-reference/data-types/array.md)) — Стек вызовов, представляющий собой список физических адресов, по которым расположены вызываемые методы. **Пример** @@ -31,17 +36,21 @@ SELECT * FROM system.error_log LIMIT 1 FORMAT Vertical; ```text Row 1: ────── -hostname: clickhouse.eu-central1.internal -event_date: 2024-06-18 -event_time: 2024-06-18 07:32:39 -code: 999 -error: KEEPER_EXCEPTION -value: 2 -remote: 0 +hostname: clickhouse.testing.internal +event_date: 2025-11-11 +event_time: 2025-11-11 11:35:28 +code: 60 +error: UNKNOWN_TABLE +value: 1 +remote: 0 +last_error_time: 2025-11-11 11:35:28 +last_error_message: Неизвестный идентификатор табличного выражения 'system.table_not_exist' в области SELECT * FROM system.table_not_exist +last_error_query_id: 77ad9ece-3db7-4236-9b5a-f789bce4aa2e +last_error_trace: [100506790044914,100506534488542,100506409937998,100506409936517,100506425182891,100506618154123,100506617994473,100506617990486,100506617988112,100506618341386,100506630272160,100506630266232,100506630276900,100506629795243,100506633519500,100506633495783,100506692143858,100506692248921,100506790779783,100506790781278,100506790390399,100506790380047,123814948752036,123814949330028] ``` **См. также** -* [error_log setting](../../operations/server-configuration-parameters/settings.md#error_log) — Включение и отключение настройки. -* [system.errors](../../operations/system-tables/errors.md) — Содержит коды ошибок с числом их срабатываний. -* [Monitoring](../../operations/monitoring.md) — Основные концепции мониторинга ClickHouse. +* [параметр error_log](../../operations/server-configuration-parameters/settings.md#error_log) — Включение и отключение этого параметра. +* [system.errors](../../operations/system-tables/errors.md) — Содержит коды ошибок с числом срабатываний каждой из них. +* [Мониторинг](../../operations/monitoring.md) — Базовые концепции мониторинга ClickHouse. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/errors.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/errors.md index 1d38815d20e..a0d1d18a14f 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/errors.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/errors.md @@ -1,5 +1,5 @@ --- -description: 'Системная таблица, содержащая коды ошибок и количество их возникновений.' +description: 'Системная таблица, содержащая коды ошибок и количество их срабатываний.' keywords: ['системная таблица', 'ошибки'] slug: /operations/system-tables/errors title: 'system.errors' @@ -10,28 +10,18 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -Содержит коды ошибок с количеством их срабатываний. +Содержит коды ошибок с числом их срабатываний. -Чтобы показать все возможные коды ошибок, включая те, которые ни разу не сработали, установите настройку [system_events_show_zero_values](../settings/settings.md#system_events_show_zero_values) в значение 1. +Чтобы показать все возможные коды ошибок, включая те, которые ни разу не сработали, установите настройку [system_events_show_zero_values](../settings/settings.md#system_events_show_zero_values) в 1. Столбцы: {/*AUTOGENERATED_START*/ } -* `name` ([String](../../sql-reference/data-types/)) — Имя ошибки (errorCodeToName). -* `code` ([Int32](../../sql-reference/data-types/)) — Числовой код ошибки. -* `value` ([UInt64](../../sql-reference/data-types/)) — Количество возникновений этой ошибки. -* `last_error_time` ([DateTime](../../sql-reference/data-types/)) — Время, когда произошла последняя ошибка. -* `last_error_message` ([String](../../sql-reference/data-types/)) — Сообщение последней ошибки. -* `last_error_format_string` ([String](../../sql-reference/data-types/)) — Строка формата последней ошибки. -* `last_error_trace` ([Array(UInt64)](../../sql-reference/data-types/)) — Стек вызовов, представляющий список физических адресов, по которым расположены вызываемые методы. -* `remote` ([UInt8](../../sql-reference/data-types/)) — Удалённое исключение (т. е. получено во время одного из распределённых запросов). -* `query_id` ([String](../../sql-reference/data-types/)) — Идентификатор запроса, который вызвал ошибку (если доступен). - {/*AUTOGENERATED_END*/ } :::note -Счётчики некоторых ошибок могут увеличиваться во время успешного выполнения запроса. Не рекомендуется использовать данную таблицу для мониторинга сервера, если вы не уверены, что соответствующая ошибка не является ложным срабатыванием. +Счётчики некоторых ошибок могут увеличиваться при успешном выполнении запроса. Не рекомендуется использовать эту таблицу для мониторинга сервера, если только вы не уверены, что соответствующая ошибка не может быть ложным срабатыванием. ::: **Пример** diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/events.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/events.md index 63ccae8b275..3976c7ca541 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/events.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/events.md @@ -1,6 +1,5 @@ --- -description: 'Системная таблица с информацией о количестве событий, - произошедших в системе.' +description: 'Системная таблица, содержащая информацию о количестве событий, произошедших в системе.' keywords: ['системная таблица', 'события'] slug: /operations/system-tables/events title: 'system.events' @@ -11,19 +10,15 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -Содержит информацию о количестве событий, произошедших в системе. Например, в таблице можно узнать, сколько запросов `SELECT` было обработано с момента запуска сервера ClickHouse. +Содержит информацию о числе событий, произошедших в системе. Например, в этой таблице можно узнать, сколько запросов `SELECT` было обработано с момента запуска сервера ClickHouse. Столбцы: {/*AUTOGENERATED_START*/ } -* `event` ([String](../../sql-reference/data-types/)) — Имя события. -* `value` ([UInt64](../../sql-reference/data-types/)) — Количество событий. -* `description` ([String](../../sql-reference/data-types/)) — Описание события. - {/*AUTOGENERATED_END*/ } -Все поддерживаемые события можно найти в файле исходного кода [src/Common/ProfileEvents.cpp](https://github.com/ClickHouse/ClickHouse/blob/master/src/Common/ProfileEvents.cpp). +Вы можете найти все поддерживаемые события в файле исходного кода [src/Common/ProfileEvents.cpp](https://github.com/ClickHouse/ClickHouse/blob/master/src/Common/ProfileEvents.cpp). **Пример** @@ -44,6 +39,6 @@ SELECT * FROM system.events LIMIT 5 **См. также** * [system.asynchronous_metrics](/operations/system-tables/asynchronous_metrics) — содержит периодически вычисляемые метрики. -* [system.metrics](/operations/system-tables/metrics) — содержит метрики, вычисляемые в реальном времени. -* [system.metric_log](/operations/system-tables/metric_log) — содержит историю значений метрик таблиц `system.metrics` и `system.events`. -* [Monitoring](../../operations/monitoring.md) — основные понятия мониторинга ClickHouse. +* [system.metrics](/operations/system-tables/metrics) — содержит мгновенно вычисляемые метрики. +* [system.metric_log](/operations/system-tables/metric_log) — содержит историю значений метрик из таблиц `system.metrics` и `system.events`. +* [Monitoring](../../operations/monitoring.md) — основные концепции мониторинга ClickHouse. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/functions.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/functions.md index 01eb9e5b4f6..a7f5ef73040 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/functions.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/functions.md @@ -12,21 +12,6 @@ doc_type: 'reference' {/*AUTOGENERATED_START*/ } -* `name` ([String](../../sql-reference/data-types/)) — Имя функции. -* `is_aggregate` ([UInt8](../../sql-reference/data-types/)) — Является ли функция агрегатной. -* `case_insensitive` ([UInt8](../../sql-reference/data-types/)) — Можно ли использовать имя функции без учёта регистра. -* `alias_to` ([String](../../sql-reference/data-types/)) — Исходное имя функции, если текущее имя является псевдонимом. -* `create_query` ([String](../../sql-reference/data-types/)) — Устаревшее. -* `origin` ([Enum8('System' = 0, 'SQLUserDefined' = 1, 'ExecutableUserDefined' = 2)](../../sql-reference/data-types/)) — Устаревшее. -* `description` ([String](../../sql-reference/data-types/)) — Краткое описание того, что делает функция. -* `syntax` ([String](../../sql-reference/data-types/)) — Сигнатура функции. -* `arguments` ([String](../../sql-reference/data-types/)) — Аргументы функции. -* `parameters` ([String](../../sql-reference/data-types/)) — Параметры функции (только для агрегатных функций). -* `returned_value` ([String](../../sql-reference/data-types/)) — Что возвращает функция. -* `examples` ([String](../../sql-reference/data-types/)) — Пример использования. -* `introduced_in` ([String](../../sql-reference/data-types/)) — Версия ClickHouse, в которой функция была впервые представлена. -* `categories` ([String](../../sql-reference/data-types/)) — Категория функции. - {/*AUTOGENERATED_END*/ } **Пример** @@ -44,5 +29,5 @@ doc_type: 'reference' │ mapPartialSort │ 0 │ 1 │ 0 │ │ └──────────────────────────┴──────────────┴──────────────────┴──────────────────┴──────────┘ -Получено 5 строк. Прошло: 0.002 сек. +Выбрано 5 строк. Затрачено: 0.002 сек. ``` diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/graphite_retentions.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/graphite_retentions.md index e8e880ddb23..9e85ad2afdc 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/graphite_retentions.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/graphite_retentions.md @@ -1,27 +1,16 @@ --- description: 'Системная таблица, содержащая информацию о параметрах `graphite_rollup`, - которые используются в таблицах с типом движка `GraphiteMergeTree`.' + которые используются в таблицах с движками типа `GraphiteMergeTree`.' keywords: ['системная таблица', 'graphite_retentions'] slug: /operations/system-tables/graphite_retentions title: 'system.graphite_retentions' doc_type: 'reference' --- -Содержит информацию о параметрах [graphite_rollup](../../operations/server-configuration-parameters/settings.md#graphite), которые используются в таблицах с движком [*GraphiteMergeTree](../../engines/table-engines/mergetree-family/graphitemergetree.md). +Содержит информацию о параметрах [graphite_rollup](../../operations/server-configuration-parameters/settings.md#graphite), которые используются в таблицах с движками типа [*GraphiteMergeTree](../../engines/table-engines/mergetree-family/graphitemergetree.md). Столбцы: {/*AUTOGENERATED_START*/ } -* `config_name` ([String](../../sql-reference/data-types/)) — имя параметра graphite_rollup. -* `rule_type` ([String](../../sql-reference/data-types/)) — тип правила. Возможные значения: RuleTypeAll = 0 — тип по умолчанию, с regex, совместим со старой схемой; RuleTypePlain = 1 — обычные метрики, с regex, совместим со старой схемой; RuleTypeTagged = 2 — тегированные метрики, с regex, совместим со старой схемой; RuleTypeTagList = 3 — тегированные метрики, с regex (преобразуется в RuleTypeTagged из строки вида 'retention=10min ; env=(staging|prod)'). -* `regexp` ([String](../../sql-reference/data-types/)) — шаблон имени метрики. -* `function` ([String](../../sql-reference/data-types/)) — имя агрегирующей функции. -* `age` ([UInt64](../../sql-reference/data-types/)) — минимальный возраст данных в секундах. -* `precision` ([UInt64](../../sql-reference/data-types/)) — точность определения возраста данных в секундах. -* `priority` ([UInt16](../../sql-reference/data-types/)) — приоритет шаблона. -* `is_default` ([UInt8](../../sql-reference/data-types/)) — является ли шаблон значением по умолчанию. -* `Tables.database` ([Array(String)](../../sql-reference/data-types/)) — массив имён таблиц баз данных, которые используют параметр `config_name`. -* `Tables.table` ([Array(String)](../../sql-reference/data-types/)) — массив имён таблиц, которые используют параметр `config_name`. - {/*AUTOGENERATED_END*/ } diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/histogram_metrics.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/histogram_metrics.md index a126bdbc79e..f17b7755cdf 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/histogram_metrics.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/histogram_metrics.md @@ -1,6 +1,7 @@ --- -description: 'Эта таблица содержит гистограммные метрики, которые можно оперативно вычислять и экспортировать в формате Prometheus. Она всегда актуальна.' -keywords: ['system table', 'histogram_metrics'] +description: 'Эта таблица содержит гистограммные метрики, которые можно мгновенно + вычислять и экспортировать в формате Prometheus. Она всегда актуальна.' +keywords: ['системная таблица', 'histogram_metrics'] slug: /operations/system-tables/histogram_metrics title: 'system.histogram_metrics' doc_type: 'reference' @@ -13,22 +14,17 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -Эта таблица содержит гистограммные метрики, которые могут быть моментально вычислены и экспортированы в формате Prometheus. Она всегда содержит актуальные данные. Заменяет устаревшую таблицу `system.latency_log`. +Эта таблица содержит гистограммные метрики, которые можно мгновенно рассчитать и экспортировать в формате Prometheus. Она всегда находится в актуальном состоянии. Заменяет устаревшую таблицу `system.latency_log`. Столбцы: {/*AUTOGENERATED_START*/ } -* `metric` ([String](../../sql-reference/data-types/)) — имя метрики. -* `value` ([Int64](../../sql-reference/data-types/)) — значение метрики. -* `description` ([String](../../sql-reference/data-types/)) — описание метрики. -* `labels` ([Map(String, String)](../../sql-reference/data-types/)) — метки метрики. - {/*AUTOGENERATED_END*/ } **Пример** -Вы можете использовать такой запрос, чтобы экспортировать все гистограммные метрики в формате Prometheus. +Вы можете использовать такой запрос, чтобы экспортировать все метрики типа histogram в формате Prometheus. ```sql SELECT @@ -42,13 +38,15 @@ FORMAT Prometheus ``` -## Описания метрик {#metric_descriptions} +## Описание метрик {#metric_descriptions} ### keeper_response_time_ms_bucket {#keeper_response_time_ms_bucket} -Время отклика Keeper в миллисекундах. + +Время ответа Keeper в миллисекундах. **См. также** + - [system.asynchronous_metrics](/operations/system-tables/asynchronous_metrics) — Содержит периодически вычисляемые метрики. -- [system.events](/operations/system-tables/events) — Содержит сведения о произошедших событиях. -- [system.metric_log](/operations/system-tables/metric_log) — Содержит историю значений метрик из таблиц `system.metrics` и `system.events`. -- [Monitoring](../../operations/monitoring.md) — Базовые концепции мониторинга ClickHouse. +- [system.events](/operations/system-tables/events) — Содержит информацию о произошедших событиях. +- [system.metric_log](/operations/system-tables/metric_log) — Содержит историю значений метрик таблиц `system.metrics` и `system.events`. +- [Monitoring](../../operations/monitoring.md) — Базовые концепции мониторинга ClickHouse. \ No newline at end of file diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/iceberg_history.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/iceberg_history.md index bd26a238f6d..1c564492042 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/iceberg_history.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/iceberg_history.md @@ -1,26 +1,17 @@ --- -description: 'История снимков Iceberg в системе' +description: 'История снимков Iceberg в системной таблице' keywords: ['system iceberg_history'] slug: /operations/system-tables/iceberg_history title: 'system.iceberg_history' doc_type: 'reference' --- - - # system.iceberg_history -Эта системная таблица содержит историю снимков таблиц Iceberg, существующих в ClickHouse. Она будет пустой, если в ClickHouse нет ни одной таблицы Iceberg. +Эта системная таблица содержит историю снимков таблиц Iceberg в ClickHouse. Она будет пустой, если в ClickHouse нет ни одной таблицы Iceberg. Столбцы: {/*AUTOGENERATED_START*/ } -* `database` ([String](../../sql-reference/data-types/)) — Имя базы данных. -* `table` ([String](../../sql-reference/data-types/)) — Имя таблицы. -* `made_current_at` ([Nullable(DateTime64(3))](../../sql-reference/data-types/)) — Дата и время, когда этот снимок был сделан текущим. -* `snapshot_id` ([UInt64](../../sql-reference/data-types/)) — Идентификатор снимка, используемый для его однозначной идентификации. -* `parent_id` ([UInt64](../../sql-reference/data-types/)) — Идентификатор родительского снимка. -* `is_current_ancestor` ([UInt8](../../sql-reference/data-types/)) — Флаг, указывающий, является ли этот снимок предком текущего снимка. - {/*AUTOGENERATED_END*/ } diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/index.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/index.md index db2df612dd6..c40e1482e12 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/index.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/index.md @@ -1,136 +1,20 @@ --- -description: 'Обзор системных таблиц и зачем они нужны.' -keywords: ['системные таблицы', 'обзор'] +description: "Обзор системных таблиц и их назначения." +keywords: ["системные таблицы", "обзор"] pagination_next: operations/system-tables/asynchronous_metric_log -sidebar_label: 'Обзор' +sidebar_label: "Обзор" sidebar_position: 52 slug: /operations/system-tables/ -title: 'Системные таблицы' -doc_type: 'reference' +title: "Системные таблицы" +doc_type: "reference" --- -{/* Оглавление для этой страницы автоматически генерируется скриптом - https://github.com/ClickHouse/clickhouse-docs/blob/main/scripts/autogenerate-table-of-contents.sh - на основе полей блока YAML front matter: slug, description, title. + - -{/*AUTOGENERATED_START*/ } - -| Страница | Описание | -| ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [Обзор системных таблиц](/operations/system-tables/overview) | Обзор системных таблиц и объяснение, почему они полезны. | -| [INFORMATION_SCHEMA](/operations/system-tables/information_schema) | Системная база данных, предоставляющая почти стандартизированное представление метаданных объектов баз данных, независимое от конкретной СУБД. | -| [system.asynchronous_insert_log](/operations/system-tables/asynchronous_insert_log) | Системная таблица, содержащая сведения об асинхронных вставках. Каждая запись соответствует запросу вставки, буферизованному как асинхронный запрос вставки. | -| [system.asynchronous_loader](/operations/system-tables/asynchronous_loader) | Системная таблица, содержащая информацию о состоянии последних асинхронных заданий (например, для таблиц, находящихся в процессе загрузки). Таблица содержит по одной строке для каждого задания. | -| [system.asynchronous_metric_log](/operations/system-tables/asynchronous_metric_log) | Системная таблица, содержащая историю значений таблицы `system.asynchronous_metrics`, которые сохраняются один раз за временной интервал (по умолчанию — одна секунда) | -| [system.asynchronous_inserts](/operations/system-tables/asynchronous_inserts) | Системная таблица, содержащая информацию об отложенных асинхронных вставках в очереди. | -| [system.asynchronous_metrics](/operations/system-tables/asynchronous_metrics) | Системная таблица, содержащая метрики, периодически вычисляемые в фоновом режиме. Например, объем используемой оперативной памяти. | -| [system.azure_queue_settings](/operations/system-tables/azure_queue_settings) | Системная таблица, содержащая информацию о настройках таблиц AzureQueue. Доступна начиная с версии сервера `24.10`. | -| [system.backup_log](/operations/system-tables/backup_log) | Системная таблица, содержащая записи журнала с информацией об операциях `BACKUP` и `RESTORE`. | -| [system.backups](/operations/system-tables/backups) | Системная таблица, содержащая записи журнала с информацией об операциях `BACKUP` и `RESTORE`. | -| [system.blob_storage_log](/operations/system-tables/blob_storage_log) | Системная таблица, содержащая записи журнала с информацией о различных операциях с хранилищем BLOB-объектов, таких как загрузка и удаление. | -| [system.build_options](/operations/system-tables/build_options) | Системная таблица, содержащая информацию о параметрах сборки сервера ClickHouse. | -| [system.clusters](/operations/system-tables/clusters) | Системная таблица, содержащая информацию о кластерах, доступных в конфигурационном файле, и серверах, указанных в них. | -| [system.codecs](/operations/system-tables/codecs) | Системная таблица с информацией о кодеках в очереди. | -| [system.columns](/operations/system-tables/columns) | Системная таблица, содержащая сведения о столбцах всех таблиц | -| [system.contributors](/operations/system-tables/contributors) | Системная таблица, содержащая сведения об участниках. | -| [system.crash_log](/operations/system-tables/crash_log) | Системная таблица, содержащая сведения о трассах стека для фатальных ошибок. | -| [system.current_roles](/operations/system-tables/current_roles) | Системная таблица, содержащая активные роли текущего пользователя. | -| [system.dashboards](/operations/system-tables/dashboards) | Содержит запросы, используемые страницей `/dashboard`, доступной через HTTP-интерфейс, полезные для мониторинга и устранения неполадок. | -| [system.data_skipping_indices](/operations/system-tables/data_skipping_indices) | Системная таблица, содержащая информацию о существующих индексах пропуска данных во всех таблицах. | -| [system.data_type_families](/operations/system-tables/data_type_families) | Системная таблица, содержащая информацию о поддерживаемых типах данных | -| [system.database_engines](/operations/system-tables/database_engines) | Системная таблица со списком движков баз данных, поддерживаемых сервером. | -| [system.database_replicas](/operations/system-tables/database_replicas) | Системная таблица, содержащая сведения о реплицируемой базе данных и её состоянии. | -| [system.databases](/operations/system-tables/databases) | Системная таблица, содержащая информацию о базах данных, доступных текущему пользователю. | -| [system.dead_letter_queue](/operations/system-tables/dead_letter_queue) | Системная таблица, содержащая информацию о сообщениях, полученных через стриминговый движок, при разборе которых возникли ошибки. | -| [system.delta_lake_metadata_log](/operations/system-tables/delta_lake_metadata_log) | Системная таблица, содержащая информацию о файлах метаданных, прочитанных из таблиц Delta Lake. Каждая запись соответствует корневому JSON‑файлу метаданных. | -| [system.detached_parts](/operations/system-tables/detached_parts) | Системная таблица, содержащая информацию об отсоединённых частях таблиц MergeTree | -| [system.detached_tables](/operations/system-tables/detached_tables) | Системная таблица с информацией о каждой отсоединённой таблице. | -| [system.dictionaries](/operations/system-tables/dictionaries) | Системная таблица с информацией о словарях | -| [system.dimensional_metrics](/operations/system-tables/dimensional_metrics) | Эта таблица содержит многомерные метрики, которые можно оперативно вычислить и экспортировать в формате Prometheus. Данные в ней всегда актуальны. | -| [system.disks](/operations/system-tables/disks) | Системная таблица, содержащая информацию о дисках, заданных в конфигурации сервера | -| [system.distributed_ddl_queue](/operations/system-tables/distributed_ddl_queue) | Системная таблица, содержащая информацию о распределённых DDL-запросах (запросах с использованием предложения ON CLUSTER), которые были выполнены на кластере. | -| [system.distribution_queue](/operations/system-tables/distribution_queue) | Системная таблица, содержащая информацию о локальных файлах, находящихся в очереди для отправки на шарды. | -| [system.dns_cache](/operations/system-tables/dns_cache) | Системная таблица, содержащая информацию о кэшированных DNS-записях. | -| [system.dropped_tables](/operations/system-tables/dropped_tables) | Системная таблица, содержащая информацию о таблицах, для которых была выполнена команда DROP TABLE, но очистка их данных ещё не была выполнена | -| [system.dropped_tables_parts](/operations/system-tables/dropped_tables_parts) | Системная таблица, содержащая информацию о частях удалённых таблиц MergeTree, указанных в `system.dropped_tables` | -| [system.enabled_roles](/operations/system-tables/enabled_roles) | Системная таблица, содержащая все активные в данный момент роли, включая текущую роль текущего пользователя и роли, назначенные текущей роли | -| [system.error_log](/operations/system-tables/system-error-log) | Системная таблица, содержащая историю значений ошибок из таблицы `system.errors` и периодически сбрасываемая на диск. | -| [system.errors](/operations/system-tables/errors) | Системная таблица, содержащая коды ошибок и число их срабатываний. | -| [system.events](/operations/system-tables/events) | Системная таблица, содержащая информацию о количестве произошедших в системе событий. | -| [system.functions](/operations/system-tables/functions) | Системная таблица, содержащая информацию о скалярных и агрегатных функциях. | -| [system.grants](/operations/system-tables/grants) | Системная таблица, отображающая привилегии, предоставленные учетным записям пользователей ClickHouse. | -| [system.graphite_retentions](/operations/system-tables/graphite_retentions) | Системная таблица, содержащая информацию о параметрах `graphite_rollup`, которые используются в таблицах с типом движка `GraphiteMergeTree`. | -| [system.histogram_metrics](/operations/system-tables/histogram_metrics) | Эта таблица содержит гистограммные метрики, которые можно мгновенно вычислить и экспортировать в формате Prometheus. Она всегда актуальна. | -| [system.iceberg_history](/operations/system-tables/iceberg_history) | История системных снимков Iceberg | -| [system.iceberg_metadata_log](/operations/system-tables/iceberg_metadata_log) | Системная таблица, содержащая информацию о файлах метаданных, прочитанных из таблиц Iceberg. Каждая запись представляет либо корневой файл метаданных, либо метаданные, извлечённые из файла Avro, либо запись из файла Avro. | -| [system.jemalloc_bins](/operations/system-tables/jemalloc_bins) | Системная таблица, содержащая информацию о выделениях памяти, выполняемых через аллокатор jemalloc для различных классов размеров (bins), агрегированную по всем аренам. | -| [system.kafka_consumers](/operations/system-tables/kafka_consumers) | Системная таблица, которая содержит информацию о потребителях Kafka. | -| [system.licenses](/operations/system-tables/licenses) | Системная таблица, содержащая лицензии сторонних библиотек, расположенных в директории contrib исходного кода ClickHouse. | -| [system.merge_tree_settings](/operations/system-tables/merge_tree_settings) | Системная таблица, содержащая информацию о настройках таблиц MergeTree. | -| [system.merges](/operations/system-tables/merges) | Системная таблица, содержащая информацию о слияниях и мутациях частей, выполняемых в данный момент для таблиц семейства MergeTree. | -| [system.metric_log](/operations/system-tables/metric_log) | Системная таблица, содержащая историю значений метрик из таблиц `system.metrics` и `system.events`, данные которой периодически сбрасываются на диск. | -| [system.metrics](/operations/system-tables/metrics) | Системная таблица, содержащая метрики, которые могут быть вычислены на лету или отражают текущее значение. | -| [system.moves](/operations/system-tables/moves) | Системная таблица, содержащая информацию о выполняющихся в данный момент перемещениях частей данных таблиц MergeTree. Каждое перемещение части данных отображается одной строкой. | -| [system.mutations](/operations/system-tables/mutations) | Системная таблица, содержащая информацию о мутациях таблиц MergeTree и ходе их выполнения. Каждая команда мутации представлена одной строкой. | -| [system.numbers_mt](/operations/system-tables/numbers_mt) | Системная таблица, аналогичная `system.numbers`, но чтение выполняется параллельно, и числа могут возвращаться в произвольном порядке. | -| [system.numbers](/operations/system-tables/numbers) | Системная таблица с единственным столбцом типа UInt64 с именем `number`, в котором хранятся почти все натуральные числа, начиная с нуля. | -| [system.one](/operations/system-tables/one) | Системная таблица, содержащая одну строку с единственным столбцом `dummy` типа UInt8, содержащим значение 0. Аналогична таблице `DUAL`, используемой в других СУБД. | -| [system.opentelemetry_span_log](/operations/system-tables/opentelemetry_span_log) | Системная таблица, содержащая информацию о спанах трассировки выполненных запросов. | -| [system.part_log](/operations/system-tables/part_log) | Системная таблица, содержащая информацию о событиях с частями данных в таблицах семейства MergeTree, например о добавлении или слиянии данных. | -| [system.parts](/operations/system-tables/parts) | Системная таблица, содержащая информацию о частях таблиц семейства MergeTree | -| [system.parts_columns](/operations/system-tables/parts_columns) | Системная таблица, содержащая сведения о частях и столбцах таблиц MergeTree. | -| [system.processes](/operations/system-tables/processes) | Системная таблица, используемая для реализации запроса `SHOW PROCESSLIST`. | -| [system.processors_profile_log](/operations/system-tables/processors_profile_log) | Системная таблица, содержащая информацию о профилировании на уровне процессоров (доступную в выводе `EXPLAIN PIPELINE`) | -| [system.projection_parts_columns](/operations/system-tables/projection_parts_columns) | Системная таблица, содержащая информацию о столбцах в частях проекций таблиц семейства MergeTree | -| [system.projection_parts](/operations/system-tables/projection_parts) | Системная таблица, содержащая информацию о частях проекций таблиц семейства MergeTree. | -| [system.projections](/operations/system-tables/projections) | Системная таблица, содержащая информацию о существующих проекциях во всех таблицах. | -| [system.query_views_log](/operations/system-tables/query_views_log) | Системная таблица, содержащая информацию о зависимых представлениях, выполняемых при выполнении запроса, например о типе представления или времени выполнения. | -| [system.query_condition_cache](/operations/system-tables/query_condition_cache) | Системная таблица, отображающая содержимое кэша условий запроса. | -| [system.query_thread_log](/operations/system-tables/query_thread_log) | Системная таблица, содержащая информацию о потоках, выполняющих запросы, например имя потока, время его запуска и длительность обработки запроса. | -| [system.query_metric_log](/operations/system-tables/query_metric_log) | Системная таблица, содержащая историю значений памяти и метрик из таблицы `system.events` для отдельных запросов, данные которой периодически сбрасываются на диск. | -| [system.query_log](/operations/system-tables/query_log) | Системная таблица, содержащая информацию о выполненных запросах, например, время начала выполнения, длительность обработки, сообщения об ошибках. | -| [system.query_cache](/operations/system-tables/query_cache) | Системная таблица, показывающая содержимое кэша запросов. | -| [system.quota_usage](/operations/system-tables/quota_usage) | Системная таблица, содержащая информацию об использовании квоты текущим пользователем, например, какая часть квоты уже использована и какая осталась. | -| [system.quota_limits](/operations/system-tables/quota_limits) | Системная таблица, содержащая информацию о максимальных значениях для всех интервалов всех квот. Одной квоте может соответствовать любое количество строк, включая ноль. | -| [system.quotas_usage](/operations/system-tables/quotas_usage) | Системная таблица, содержащая информацию об использовании квот всеми пользователями. | -| [system.quotas](/operations/system-tables/quotas) | Системная таблица, содержащая информацию о квотах. | -| [system.replicas](/operations/system-tables/replicas) | Системная таблица, содержащая информацию о реплицированных таблицах на локальном сервере и их состоянии. Полезна для мониторинга. | -| [system.replicated_fetches](/operations/system-tables/replicated_fetches) | Системная таблица, содержащая информацию о выполняющихся в данный момент фоновых операциях выборки данных. | -| [system.replication_queue](/operations/system-tables/replication_queue) | Системная таблица с информацией о задачах из очередей репликации, хранящихся в ClickHouse Keeper или ZooKeeper, для таблиц семейства `ReplicatedMergeTree`. | -| [system.resources](/operations/system-tables/resources) | Системная таблица, содержащая информацию о ресурсах, находящихся на локальном сервере, по одной строке для каждого ресурса. | -| [system.role_grants](/operations/system-tables/role_grants) | Системная таблица, содержащая сведения о назначениях ролей пользователям и ролям. | -| [system.roles](/operations/system-tables/roles) | Системная таблица, содержащая информацию о настроенных ролях. | -| [system.row_policies](/operations/system-tables/row_policies) | Системная таблица, содержащая фильтры для конкретной таблицы, а также список ролей и/или пользователей, к которым применяется эта политика строк. | -| [system.s3_queue_settings](/operations/system-tables/s3_queue_settings) | Системная таблица, содержащая информацию о настройках таблиц S3Queue. Доступна начиная с версии сервера `24.10`. | -| [system.scheduler](/operations/system-tables/scheduler) | Системная таблица, содержащая сведения об узлах-планировщиках, размещённых на локальном сервере, и их состоянии. | -| [system.schema_inference_cache](/operations/system-tables/schema_inference_cache) | Системная таблица, содержащая информацию о всех кэшированных схемах файлов. | -| [system.server_settings](/operations/system-tables/server_settings) | Системная таблица, содержащая информацию о глобальных настройках сервера, которые указаны в `config.xml`. | -| [system.session_log](/operations/system-tables/session_log) | Системная таблица, содержащая информацию обо всех успешных и неуспешных входах в систему и выходах из неё. | -| [system.settings](/operations/system-tables/settings) | Системная таблица, содержащая информацию о настройках сеанса текущего пользователя. | -| [system.settings_profile_elements](/operations/system-tables/settings_profile_elements) | Системная таблица, описывающая содержимое профиля настроек: ограничения, роли и пользователей, к которым применяются настройки, а также родительские профили настроек. | -| [system.settings_changes](/operations/system-tables/settings_changes) | Системная таблица, содержащая информацию об изменениях настроек в более ранних версиях ClickHouse. | -| [system.settings_profiles](/operations/system-tables/settings_profiles) | Системная таблица, содержащая свойства профилей настроек. | -| [system.stack_trace](/operations/system-tables/stack_trace) | Системная таблица, содержащая стеки вызовов всех потоков сервера. Позволяет разработчикам анализировать состояние сервера. | -| [system.storage_policies](/operations/system-tables/storage_policies) | Системная таблица, содержащая информацию о политиках хранения и томах, определённых в конфигурации сервера. | -| [system.symbols](/operations/system-tables/symbols) | Системная таблица, полезная для специалистов по C++ и инженеров ClickHouse, содержащая информацию для анализа бинарного исполняемого файла `clickhouse`. | -| [system.table_engines](/operations/system-tables/table_engines) | Системная таблица, содержащая описания движков таблиц, поддерживаемых сервером, и поддерживаемых ими возможностей. | -| [system.tables](/operations/system-tables/tables) | Системная таблица, содержащая метаданные о каждой таблице, известной серверу. | -| [system.text_log](/operations/system-tables/text_log) | Системная таблица, содержащая записи логирования. | -| [system.time_zones](/operations/system-tables/time_zones) | Системная таблица, содержащая список часовых поясов, поддерживаемых сервером ClickHouse. | -| [system.trace_log](/operations/system-tables/trace_log) | Системная таблица, содержащая трассировки стека, собранные профилировщиком запросов с выборочным профилированием. | -| [system.unicode](/operations/system-tables/unicode) | Системная таблица, содержащая список символов Unicode и их свойств. | -| [system.user_processes](/operations/system-tables/user_processes) | Системная таблица, содержащая информацию, полезную для общего обзора использования памяти и счетчиков ProfileEvents пользователей. | -| [system.users](/operations/system-tables/users) | Системная таблица, содержащая список учетных записей пользователей, настроенных на сервере. | -| [system.view_refreshes](/operations/system-tables/view_refreshes) | Системная таблица, содержащая сведения об обновляемых материализованных представлениях. | -| [system.warnings](/operations/system-tables/system_warnings) | Эта таблица содержит предупреждающие сообщения о сервере ClickHouse. | -| [system.workloads](/operations/system-tables/workloads) | Системная таблица, содержащая информацию о рабочих нагрузках, выполняемых на локальном сервере. | -| [system.zookeeper_log](/operations/system-tables/zookeeper_log) | Системная таблица, содержащая информацию о параметрах запроса к серверу ZooKeeper и о его ответе. | -| [system.zookeeper_connection](/operations/system-tables/zookeeper_connection) | Системная таблица, которая существует только если ZooKeeper настроен. Показывает текущие соединения с ZooKeeper (включая вспомогательные экземпляры ZooKeeper). | -| [system.zookeeper_connection_log](/operations/system-tables/zookeeper_connection_log) | Показывает историю подключений к ZooKeeper (включая вспомогательные экземпляры ZooKeeper). | -| [system.zookeeper](/operations/system-tables/zookeeper) | Системная таблица, которая существует только если настроены ClickHouse Keeper или ZooKeeper. Предоставляет данные из кластера Keeper, заданного в конфигурации. | - -{/*АВТОГЕНЕРАЦИЯ_КОНЕЦ*/ } + + diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/jemalloc_bins.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/jemalloc_bins.md index ef7ea5a96d6..ddfe055139c 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/jemalloc_bins.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/jemalloc_bins.md @@ -1,5 +1,5 @@ --- -description: 'Системная таблица, содержащая информацию о выделениях памяти, выполненных с использованием аллокатора jemalloc в различных классах размеров (bins), агрегированную по всем аренам.' +description: 'Системная таблица, содержащая информацию о выделении памяти, выполненном через аллокатор jemalloc по различным классам размеров (bins), агрегированную со всех арен.' keywords: ['системная таблица', 'jemalloc_bins'] slug: /operations/system-tables/jemalloc_bins title: 'system.jemalloc_bins' @@ -10,24 +10,18 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -Содержит информацию о выделениях памяти, выполненных с помощью аллокатора jemalloc в разных классах размеров (bins), агрегированную по всем аренам. -Эти статистические данные могут быть не вполне точными из‑за кэширования на уровне потока в jemalloc. +Содержит сведения о выделениях памяти через аллокатор jemalloc в различных классах размеров (bins), агрегированные по всем аренам. +Эта статистика может быть не полностью точной из-за кэширования на уровне потоков в jemalloc. Столбцы: {/*AUTOGENERATED_START*/ } -* `index` ([UInt16](../../sql-reference/data-types/)) — Индекс корзины, упорядоченной по размеру. -* `large` ([UInt8](../../sql-reference/data-types/)) — True — для крупных выделений, False — для малых. -* `size` ([UInt64](../../sql-reference/data-types/)) — Размер выделений в этой корзине. -* `allocations` ([Int64](../../sql-reference/data-types/)) — Количество выделений. -* `deallocations` ([Int64](../../sql-reference/data-types/)) — Количество освобождений. - {/*AUTOGENERATED_END*/ } **Пример** -Определите размеры выделений памяти, которые вносят наибольший вклад в текущее общее потребление памяти. +Найдите размеры выделений памяти, которые вносят наибольший вклад в текущее суммарное использование памяти. ```sql SELECT diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/kafka_consumers.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/kafka_consumers.md index d389e67d389..2bcf3f20102 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/kafka_consumers.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/kafka_consumers.md @@ -1,6 +1,6 @@ --- -description: 'Системная таблица, содержащая сведения о потребителях Kafka.' -keywords: ['system table', 'kafka_consumers'] +description: 'Системная таблица, содержащая информацию о потребителях Kafka.' +keywords: ['системная таблица', 'kafka_consumers'] slug: /operations/system-tables/kafka_consumers title: 'system.kafka_consumers' doc_type: 'reference' @@ -11,32 +11,12 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; Содержит информацию о потребителях Kafka. -Применяется для [движка таблиц Kafka](../../engines/table-engines/integrations/kafka) (родная интеграция ClickHouse). +Применимо для [движка таблицы Kafka](../../engines/table-engines/integrations/kafka) (встроенная интеграция ClickHouse) Столбцы: {/*AUTOGENERATED_START*/ } -* `database` ([String](../../sql-reference/data-types/)) — База данных таблицы с движком Kafka. -* `table` ([String](../../sql-reference/data-types/)) — Имя таблицы с движком Kafka. -* `consumer_id` ([String](../../sql-reference/data-types/)) — Идентификатор потребителя Kafka. Обратите внимание, что у таблицы может быть несколько потребителей. Задаётся параметром `kafka_num_consumers`. -* `assignments.topic` ([Array(String)](../../sql-reference/data-types/)) — Топик Kafka. -* `assignments.partition_id` ([Array(Int32)](../../sql-reference/data-types/)) — Идентификатор раздела Kafka. Обратите внимание, что только один потребитель может быть назначен на раздел. -* `assignments.current_offset` ([Array(Int64)](../../sql-reference/data-types/)) — Текущее смещение (offset). -* `assignments.intent_size` ([Array(Nullable(Int64))](../../sql-reference/data-types/)) — Количество отправленных, но ещё не зафиксированных сообщений в новом движке StorageKafka. -* `exceptions.time` ([Array(DateTime)](../../sql-reference/data-types/)) — Метка времени генерации 10 последних исключений. -* `exceptions.text` ([Array(String)](../../sql-reference/data-types/)) — Текст 10 последних исключений. -* `last_poll_time` ([DateTime](../../sql-reference/data-types/)) — Метка времени самого последнего опроса (poll). -* `num_messages_read` ([UInt64](../../sql-reference/data-types/)) — Количество сообщений, прочитанных потребителем. -* `last_commit_time` ([DateTime](../../sql-reference/data-types/)) — Метка времени самой последней фиксации (commit). -* `num_commits` ([UInt64](../../sql-reference/data-types/)) — Общее количество фиксаций (commit) для данного потребителя. -* `last_rebalance_time` ([DateTime](../../sql-reference/data-types/)) — Метка времени самой последней операции перераспределения (Kafka rebalance). -* `num_rebalance_revocations` ([UInt64](../../sql-reference/data-types/)) — Сколько раз у потребителя отзывали его разделы. -* `num_rebalance_assignments` ([UInt64](../../sql-reference/data-types/)) — Сколько раз потребитель назначался на кластер Kafka. -* `is_currently_used` ([UInt8](../../sql-reference/data-types/)) — Флаг, показывающий, используется ли сейчас потребитель. -* `last_used` ([DateTime64(6)](../../sql-reference/data-types/)) — Время последнего использования этого потребителя. -* `rdkafka_stat` ([String](../../sql-reference/data-types/)) — Внутренняя статистика библиотеки. Установите параметр `statistics_interval_ms` в 0, чтобы отключить; значение по умолчанию — 3000 (раз в три секунды). - {/*AUTOGENERATED_END*/ } Пример: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/licenses.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/licenses.md index 8e9462fc2c6..4240e4ed5b9 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/licenses.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/licenses.md @@ -1,26 +1,20 @@ --- -description: 'Системная таблица, содержащая лицензии сторонних библиотек, расположенных в каталоге contrib исходного кода ClickHouse.' +description: 'Системная таблица, содержащая лицензии сторонних библиотек, которые находятся + в каталоге contrib в исходных кодах ClickHouse.' keywords: ['системная таблица', 'лицензии'] slug: /operations/system-tables/licenses title: 'system.licenses' doc_type: 'reference' --- - - # system.licenses -Содержит лицензии сторонних библиотек, которые находятся в каталоге [contrib](https://github.com/ClickHouse/ClickHouse/tree/master/contrib) дерева исходных текстов ClickHouse. +Содержит лицензии сторонних библиотек, которые находятся в каталоге [contrib](https://github.com/ClickHouse/ClickHouse/tree/master/contrib) исходного кода ClickHouse. Столбцы: {/*AUTOGENERATED_START*/ } -* `library_name` ([String](../../sql-reference/data-types/)) — Имя библиотеки. -* `license_type` ([String](../../sql-reference/data-types/)) — Тип лицензии — например, Apache, MIT. -* `license_path` ([String](../../sql-reference/data-types/)) — Путь к файлу с текстом лицензии. -* `license_text` ([String](../../sql-reference/data-types/)) — Текст лицензии. - {/*AUTOGENERATED_END*/ } **Пример** diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/merge_tree_settings.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/merge_tree_settings.md index 9ecdf04337f..51cb5b7fcfb 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/merge_tree_settings.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/merge_tree_settings.md @@ -1,41 +1,19 @@ --- description: 'Системная таблица, содержащая информацию о настройках таблиц MergeTree.' -keywords: ['системная таблица', 'merge_tree_settings'] +keywords: ['system table', 'merge_tree_settings'] slug: /operations/system-tables/merge_tree_settings title: 'system.merge_tree_settings' doc_type: 'reference' --- - - # system.merge_tree_settings -Содержит информацию о параметрах таблиц `MergeTree`. +Содержит сведения о настройках таблиц `MergeTree`. Столбцы: {/*AUTOGENERATED_START*/ } -* `name` ([String](../../sql-reference/data-types/)) — Имя настройки. -* `value` ([String](../../sql-reference/data-types/)) — Значение настройки. -* `default` ([String](../../sql-reference/data-types/)) — Значение настройки по умолчанию. -* `changed` ([UInt8](../../sql-reference/data-types/)) — 1, если настройка была явно задана в конфигурации или явно изменена. -* `description` ([String](../../sql-reference/data-types/)) — Описание настройки. -* `min` ([Nullable(String)](../../sql-reference/data-types/)) — Минимальное значение настройки, если оно задано с помощью ограничений. Если минимальное значение отсутствует, содержит NULL. -* `max` ([Nullable(String)](../../sql-reference/data-types/)) — Максимальное значение настройки, если оно задано с помощью ограничений. Если максимальное значение отсутствует, содержит NULL. -* `disallowed_values` ([Array(String)](../../sql-reference/data-types/)) — Список недопустимых значений. -* `readonly` ([UInt8](../../sql-reference/data-types/)) — Показывает, может ли текущий пользователь изменить настройку: 0 — текущий пользователь может изменить настройку, 1 — текущий пользователь не может изменить настройку. -* `type` ([String](../../sql-reference/data-types/)) — Тип настройки (строковое значение, зависящее от реализации). -* `is_obsolete` ([UInt8](../../sql-reference/data-types/)) — Показывает, является ли настройка устаревшей. -* `tier` ([Enum8('Production' = 0, 'Obsolete' = 4, 'Experimental' = 8, 'Beta' = 12)](../../sql-reference/data-types/)) — - Уровень поддержки этой возможности. Возможности ClickHouse организованы по уровням, которые различаются в зависимости от текущего статуса их - разработки и ожиданий, которые к ним могут предъявляться при использовании: - -- PRODUCTION: Функциональность стабильна, безопасна к использованию и не имеет проблем при взаимодействии с другими возможностями уровня PRODUCTION. -- BETA: Функциональность стабильна и безопасна. Результат её совместного использования с другими возможностями неизвестен, корректность не гарантируется. Тестирование и отчёты приветствуются. -- EXPERIMENTAL: Функциональность находится в разработке. Предназначена только для разработчиков и энтузиастов ClickHouse. Возможность может как работать, так и не работать и может быть удалена в любой момент. -- OBSOLETE: Больше не поддерживается. Либо уже удалена, либо будет удалена в будущих выпусках. - {/*AUTOGENERATED_END*/ } **Пример** @@ -58,7 +36,7 @@ name: min_compress_block_size value: 0 default: 0 changed: 0 -description: При записи гранулы сжимать данные в буфере, если размер накопленных несжатых данных больше или равен указанному порогу. Если параметр не задан, используется соответствующая глобальная настройка. +description: При записи гранулы сжимать данные в буфере, если размер ожидающих несжатых данных больше или равен указанному порогу. Если эта настройка не задана, используется соответствующая глобальная настройка. min: ᴺᵁᴸᴸ max: ᴺᵁᴸᴸ readonly: 0 @@ -72,7 +50,7 @@ name: max_compress_block_size value: 0 default: 0 changed: 0 -description: Сжимать накопленные несжатые данные в буфере, если их размер больше или равен указанному порогу. Блок данных будет сжат, даже если текущая гранула не завершена. Если параметр не задан, используется соответствующая глобальная настройка. +description: Сжимать ожидающие несжатые данные в буфере, если их размер больше или равен указанному порогу. Блок данных будет сжат, даже если текущая гранула не завершена. Если эта настройка не задана, используется соответствующая глобальная настройка. min: ᴺᵁᴸᴸ max: ᴺᵁᴸᴸ readonly: 0 @@ -94,5 +72,5 @@ type: UInt64 is_obsolete: 0 tier: Production -Получено 3 строки. Затрачено: 0.001 сек. +Получено 3 строки. Затрачено: 0,001 сек. ``` diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/merges.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/merges.md index 922e6911e94..1f6a1737f9a 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/merges.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/merges.md @@ -1,6 +1,6 @@ --- -description: 'Системная таблица, содержащая информацию о слияниях и мутациях частей, - которые в данный момент выполняются для таблиц семейства MergeTree.' +description: 'Системная таблица, содержащая информацию о слияниях и мутациях партий, + выполняемых в данный момент для таблиц семейства MergeTree.' keywords: ['системная таблица', 'слияния'] slug: /operations/system-tables/merges title: 'system.merges' @@ -14,35 +14,10 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -Содержит информацию о слияниях и мутациях частей данных, которые в данный момент выполняются для таблиц семейства MergeTree. +Содержит информацию о слияниях и мутациях частей, которые в данный момент выполняются для таблиц семейства MergeTree. Столбцы: {/*AUTOGENERATED_START*/ } -* `database` ([String](../../sql-reference/data-types/)) — Имя базы данных, в которой находится таблица. -* `table` ([String](../../sql-reference/data-types/)) — Имя таблицы. -* `elapsed` ([Float64](../../sql-reference/data-types/)) — Время, прошедшее (в секундах) с момента начала слияния. -* `progress` ([Float64](../../sql-reference/data-types/)) — Доля выполненной работы от 0 до 1. -* `num_parts` ([UInt64](../../sql-reference/data-types/)) — Число частей, подлежащих слиянию. -* `source_part_names` ([Array(String)](../../sql-reference/data-types/)) — Список имён исходных частей. -* `result_part_name` ([String](../../sql-reference/data-types/)) — Имя части, которая будет сформирована в результате слияния. -* `source_part_paths` ([Array(String)](../../sql-reference/data-types/)) — Список путей для каждой исходной части. -* `result_part_path` ([String](../../sql-reference/data-types/)) — Путь части, которая будет сформирована в результате слияния. -* `partition_id` ([String](../../sql-reference/data-types/)) — Идентификатор партиции, в которой выполняется слияние. -* `partition` ([String](../../sql-reference/data-types/)) — Имя партиции. -* `is_mutation` ([UInt8](../../sql-reference/data-types/)) — 1, если этот процесс является мутацией части. -* `total_size_bytes_compressed` ([UInt64](../../sql-reference/data-types/)) — Общий размер сжатых данных в объединённых частях. -* `total_size_bytes_uncompressed` ([UInt64](../../sql-reference/data-types/)) — Общий размер несжатых данных в объединённых частях. -* `total_size_marks` ([UInt64](../../sql-reference/data-types/)) — Общее количество меток в объединённых частях. -* `bytes_read_uncompressed` ([UInt64](../../sql-reference/data-types/)) — Количество прочитанных байт в несжатом виде. -* `rows_read` ([UInt64](../../sql-reference/data-types/)) — Количество прочитанных строк. -* `bytes_written_uncompressed` ([UInt64](../../sql-reference/data-types/)) — Количество записанных байт в несжатом виде. -* `rows_written` ([UInt64](../../sql-reference/data-types/)) — Количество записанных строк. -* `columns_written` ([UInt64](../../sql-reference/data-types/)) — Количество записанных столбцов (для алгоритма вертикального слияния). -* `memory_usage` ([UInt64](../../sql-reference/data-types/)) — Потребление памяти процессом слияния. -* `thread_id` ([UInt64](../../sql-reference/data-types/)) — ID потока процесса слияния. -* `merge_type` ([String](../../sql-reference/data-types/)) — Тип текущего слияния. Пусто, если это мутация. -* `merge_algorithm` ([String](../../sql-reference/data-types/)) — Алгоритм, используемый в текущем слиянии. Пусто, если это мутация. - {/*AUTOGENERATED_END*/ } diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/metrics.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/metrics.md index 285927e523e..f9d64e33990 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/metrics.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/metrics.md @@ -1,5 +1,6 @@ --- -description: 'Системная таблица, содержащая метрики, которые могут быть вычислены мгновенно или отображают текущее значение.' +description: 'Системная таблица, содержащая метрики, которые могут быть вычислены + мгновенно или имеют текущее значение.' keywords: ['системная таблица', 'метрики'] slug: /operations/system-tables/metrics title: 'system.metrics' @@ -13,19 +14,15 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -Содержит метрики, которые могут быть рассчитаны на лету или имеют текущее значение. Например, количество одновременно обрабатываемых запросов или текущую задержку реплики. Эта таблица всегда содержит актуальные данные. +Содержит метрики, которые можно вычислить мгновенно или которые имеют текущее значение. Например, число одновременно обрабатываемых запросов или текущая задержка реплики. Эта таблица всегда содержит актуальные данные. Столбцы: {/*AUTOGENERATED_START*/ } -* `metric` ([String](../../sql-reference/data-types/)) — Имя метрики. -* `value` ([Int64](../../sql-reference/data-types/)) — Значение метрики. -* `description` ([String](../../sql-reference/data-types/)) — Описание метрики. - {/*AUTOGENERATED_END*/ } -Все поддерживаемые метрики можно найти в исходном файле [src/Common/CurrentMetrics.cpp](https://github.com/ClickHouse/ClickHouse/blob/master/src/Common/CurrentMetrics.cpp). +Все поддерживаемые метрики перечислены в файле исходного кода [src/Common/CurrentMetrics.cpp](https://github.com/ClickHouse/ClickHouse/blob/master/src/Common/CurrentMetrics.cpp). **Пример** @@ -35,21 +32,21 @@ SELECT * FROM system.metrics LIMIT 10 ```text ┌─metric───────────────────────────────┬─value─┬─description────────────────────────────────────────────────────────────┐ -│ Query │ 1 │ Количество выполняющихся запросов │ -│ Merge │ 0 │ Количество выполняющихся фоновых слияний │ -│ PartMutation │ 0 │ Количество мутаций (ALTER DELETE/UPDATE) │ -│ ReplicatedFetch │ 0 │ Количество частей данных, запрашиваемых с реплик │ -│ ReplicatedSend │ 0 │ Количество частей данных, отправляемых на реплики │ -│ ReplicatedChecks │ 0 │ Количество частей данных, проверяемых на согласованность │ -│ BackgroundMergesAndMutationsPoolTask │ 0 │ Количество активных слияний и мутаций в связанном фоновом пуле │ -│ BackgroundFetchesPoolTask │ 0 │ Количество активных операций выборки в связанном фоновом пуле │ -│ BackgroundCommonPoolTask │ 0 │ Количество активных задач в связанном фоновом пуле │ -│ BackgroundMovePoolTask │ 0 │ Количество активных задач в BackgroundProcessingPool для перемещения данных │ +│ Query │ 1 │ Количество выполняющихся запросов │ +│ Merge │ 0 │ Количество выполняющихся фоновых слияний │ +│ PartMutation │ 0 │ Количество мутаций (ALTER DELETE/UPDATE) │ +│ ReplicatedFetch │ 0 │ Количество частей данных, получаемых из реплик │ +│ ReplicatedSend │ 0 │ Количество частей данных, отправляемых в реплики │ +│ ReplicatedChecks │ 0 │ Количество частей данных, проверяемых на согласованность │ +│ BackgroundMergesAndMutationsPoolTask │ 0 │ Количество активных слияний и мутаций в связанном фоновом пуле │ +│ BackgroundFetchesPoolTask │ 0 │ Количество активных операций получения в связанном фоновом пуле │ +│ BackgroundCommonPoolTask │ 0 │ Количество активных задач в связанном фоновом пуле │ +│ BackgroundMovePoolTask │ 0 │ Количество активных задач в BackgroundProcessingPool для перемещений │ └──────────────────────────────────────┴───────┴────────────────────────────────────────────────────────────────────────┘ ``` -## Описания метрик {#metric-descriptions} +## Описание метрик {#metric-descriptions} ### AggregatorThreads {#aggregatorthreads} @@ -57,35 +54,35 @@ SELECT * FROM system.metrics LIMIT 10 ### AggregatorThreadsActive {#aggregatorthreadsactive} -Количество потоков в пуле потоков Aggregator, выполняющих задачу. +Количество потоков в пуле потоков Aggregator, выполняющих задачи. ### TablesLoaderForegroundThreads {#tablesloaderforegroundthreads} -Количество потоков в пуле потоков foreground для асинхронного загрузчика (async loader). +Количество потоков в пуле потоков переднего плана асинхронного загрузчика. ### TablesLoaderForegroundThreadsActive {#tablesloaderforegroundthreadsactive} -Количество потоков в пуле потоков foreground для асинхронного загрузчика (async loader), выполняющих задачу. +Количество потоков в пуле foreground-потоков асинхронного загрузчика, которые в данный момент выполняют задачи. ### TablesLoaderBackgroundThreads {#tablesloaderbackgroundthreads} -Количество потоков в пуле потоков background для асинхронного загрузчика (async loader). +Количество потоков в пуле фоновых потоков асинхронного загрузчика. ### TablesLoaderBackgroundThreadsActive {#tablesloaderbackgroundthreadsactive} -Количество потоков в пуле потоков background для асинхронного загрузчика (async loader), выполняющих задачу. +Количество потоков в пуле фоновых потоков асинхронного загрузчика, выполняющих задания. ### AsyncInsertCacheSize {#asyncinsertcachesize} -Количество hash id асинхронных вставок в кэше. +Количество hash ID асинхронных вставок в кэше ### AsynchronousInsertThreads {#asynchronousinsertthreads} -Количество потоков в пуле потоков AsynchronousInsert. +Количество потоков в пуле AsynchronousInsert. ### AsynchronousInsertThreadsActive {#asynchronousinsertthreadsactive} -Количество потоков в пуле потоков AsynchronousInsert, выполняющих задачу. +Количество потоков в пуле потоков AsynchronousInsert, выполняющих задания. ### AsynchronousReadWait {#asynchronousreadwait} @@ -93,67 +90,67 @@ SELECT * FROM system.metrics LIMIT 10 ### BackgroundBufferFlushSchedulePoolSize {#backgroundbufferflushschedulepoolsize} -Ограничение на количество задач в BackgroundBufferFlushSchedulePool. +Ограничение количества задач в BackgroundBufferFlushSchedulePool ### BackgroundBufferFlushSchedulePoolTask {#backgroundbufferflushschedulepooltask} -Количество активных задач в BackgroundBufferFlushSchedulePool. Этот пул используется для периодического сброса (flush) таблиц Buffer. +Количество активных задач в BackgroundBufferFlushSchedulePool. Этот пул используется для периодического сброса буферов. ### BackgroundCommonPoolSize {#backgroundcommonpoolsize} -Ограничение на количество задач в связанном background-пуле. +Ограничение количества задач в соответствующем фоновом пуле ### BackgroundCommonPoolTask {#backgroundcommonpooltask} -Количество активных задач в связанном background-пуле. +Количество активных задач в соответствующем фоновом пуле ### BackgroundDistributedSchedulePoolSize {#backgrounddistributedschedulepoolsize} -Ограничение на количество задач в BackgroundDistributedSchedulePool. +Ограничение на количество задач в пуле BackgroundDistributedSchedulePool ### BackgroundDistributedSchedulePoolTask {#backgrounddistributedschedulepooltask} -Количество активных задач в BackgroundDistributedSchedulePool. Этот пул используется для фоновой отправки данных в распределённые таблицы. +Количество активных задач в BackgroundDistributedSchedulePool. Этот пул используется для фоновой распределённой отправки данных. ### BackgroundFetchesPoolSize {#backgroundfetchespoolsize} -Ограничение на количество одновременных операций fetch в связанном background-пуле. +Лимит количества одновременных операций выборки в связанном фоновом пуле ### BackgroundFetchesPoolTask {#backgroundfetchespooltask} -Количество активных операций fetch в связанном background-пуле. +Количество активных операций выборки в связанном фоновом пуле ### BackgroundMergesAndMutationsPoolSize {#backgroundmergesandmutationspoolsize} -Ограничение на количество активных операций слияний (merge) и мутаций в связанном background-пуле. +Ограничение числа активных слияний и мутаций в соответствующем фоновом пуле ### BackgroundMergesAndMutationsPoolTask {#backgroundmergesandmutationspooltask} -Количество активных операций слияний (merge) и мутаций в связанном background-пуле. +Количество активных слияний и мутаций в связанном фоновом пуле ### BackgroundMessageBrokerSchedulePoolSize {#backgroundmessagebrokerschedulepoolsize} -Ограничение на количество задач в BackgroundProcessingPool для потоковой обработки сообщений (message streaming). +Ограничение числа задач в BackgroundProcessingPool для стриминга сообщений ### BackgroundMessageBrokerSchedulePoolTask {#backgroundmessagebrokerschedulepooltask} -Количество активных задач в BackgroundProcessingPool для потоковой обработки сообщений (message streaming). +Количество активных задач в BackgroundProcessingPool для стриминга сообщений ### BackgroundMovePoolSize {#backgroundmovepoolsize} -Ограничение на количество задач в BackgroundProcessingPool для операций перемещения (move). +Ограничение на число задач в BackgroundProcessingPool для операций перемещения ### BackgroundMovePoolTask {#backgroundmovepooltask} -Количество активных задач в BackgroundProcessingPool для операций перемещения (move). +Количество активных задач в BackgroundProcessingPool для операций MOVE ### BackgroundSchedulePoolSize {#backgroundschedulepoolsize} -Ограничение на количество задач в BackgroundSchedulePool. Этот пул используется для периодических задач ReplicatedMergeTree, таких как очистка старых кусков данных, изменение кусков данных, переинициализация реплик и т. д. +Лимит количества задач в BackgroundSchedulePool. Этот пул используется для периодических задач ReplicatedMergeTree, таких как очистка старых частей данных, изменение частей данных, повторная инициализация реплики и т. д. ### BackgroundSchedulePoolTask {#backgroundschedulepooltask} -Количество активных задач в BackgroundSchedulePool. Этот пул используется для периодических задач ReplicatedMergeTree, таких как очистка старых кусков данных, изменение кусков данных, переинициализация реплик и т. д. +Количество активных задач в BackgroundSchedulePool. Этот пул используется для периодического выполнения задач ReplicatedMergeTree, таких как очистка старых частей данных, изменение частей данных, повторная инициализация реплик и т. д. ### BackupsIOThreads {#backupsiothreads} @@ -165,55 +162,51 @@ SELECT * FROM system.metrics LIMIT 10 ### BackupsThreads {#backupsthreads} -Количество потоков в пуле потоков для BACKUP. +Количество потоков в пуле потоков, используемом для выполнения BACKUP. ### BackupsThreadsActive {#backupsthreadsactive} -Количество потоков в пуле потоков для BACKUP, выполняющих задачу. +Количество потоков в пуле потоков операции BACKUP, выполняющих задачу. ### BrokenDistributedFilesToInsert {#brokendistributedfilestoinsert} -Количество файлов для асинхронной вставки в таблицы Distributed, помеченных как повреждённые. Эта метрика при запуске будет начинаться с 0. Количество файлов для каждого шарда суммируется. +Количество файлов для асинхронной вставки в таблицы типа Distributed, которые были помечены как повреждённые. Эта метрика при запуске начинается с 0. Суммируется количество файлов по всем сегментам. ### CacheDetachedFileSegments {#cachedetachedfilesegments} -Количество существующих отсоединённых сегментов файлов кэша. +Количество существующих отсоединённых сегментов файлового кэша ### CacheDictionaryThreads {#cachedictionarythreads} -Количество потоков в пуле потоков CacheDictionary. +Число потоков в пуле потоков CacheDictionary. ### CacheDictionaryThreadsActive {#cachedictionarythreadsactive} -Количество потоков в пуле потоков CacheDictionary, выполняющих задачу. - - - -Количество потоков в пуле потоков CacheDictionary, выполняющих задачу. +Количество потоков в пуле потоков CacheDictionary, выполняющих задачи. ### CacheDictionaryUpdateQueueBatches {#cachedictionaryupdatequeuebatches} -Количество «пакетов» (наборов ключей) в очереди обновления в CacheDictionaries. +Количество «пакетов» (наборов ключей) в очереди обновления CacheDictionaries. ### CacheDictionaryUpdateQueueKeys {#cachedictionaryupdatequeuekeys} -Точное количество ключей в очереди обновления в CacheDictionaries. +Точное количество ключей в очереди обновления CacheDictionaries. ### CacheFileSegments {#cachefilesegments} -Количество существующих сегментов файлов кэша +Количество существующих файловых сегментов кэша ### ContextLockWait {#contextlockwait} -Количество потоков, ожидающих блокировку в Context. Это глобальная блокировка. +Количество потоков, ожидающих получения блокировки в Context. Это глобальная блокировка. ### DDLWorkerThreads {#ddlworkerthreads} -Количество потоков в пуле потоков DDLWorker для запросов ON CLUSTER. +Число потоков в пуле потоков DDLWorker, используемом для запросов ON CLUSTER. ### DDLWorkerThreadsActive {#ddlworkerthreadsactive} -Количество потоков в пуле потоков DDLWorker для запросов ON CLUSTER, выполняющих задачу. +Количество потоков в пуле потоков DDLWORKER для запросов ON CLUSTER, выполняющих задачи. ### DatabaseCatalogThreads {#databasecatalogthreads} @@ -221,7 +214,7 @@ SELECT * FROM system.metrics LIMIT 10 ### DatabaseCatalogThreadsActive {#databasecatalogthreadsactive} -Количество потоков в пуле потоков DatabaseCatalog, выполняющих задачу. +Количество потоков в пуле потоков DatabaseCatalog, выполняющих задачи. ### DatabaseOnDiskThreads {#databaseondiskthreads} @@ -229,23 +222,23 @@ SELECT * FROM system.metrics LIMIT 10 ### DatabaseOnDiskThreadsActive {#databaseondiskthreadsactive} -Количество потоков в пуле потоков DatabaseOnDisk, выполняющих задачу. +Количество потоков в пуле потоков DatabaseOnDisk, выполняющих задачи. ### DelayedInserts {#delayedinserts} -Количество запросов INSERT, чья работа замедляется из-за большого числа активных кусков данных для партиции в таблице MergeTree. +Количество запросов INSERT, скорость выполнения которых ограничивается из‑за большого числа активных частей данных партиции в таблице MergeTree. ### DestroyAggregatesThreads {#destroyaggregatesthreads} -Количество потоков в пуле потоков для удаления агрегатных состояний. +Количество потоков в пуле потоков, используемом для уничтожения агрегатных состояний. ### DestroyAggregatesThreadsActive {#destroyaggregatesthreadsactive} -Количество потоков в пуле потоков для удаления агрегатных состояний, выполняющих задачу. +Количество потоков в пуле потоков для выполнения задач по уничтожению состояний агрегатов. ### DictCacheRequests {#dictcacherequests} -Количество запросов «на лету» к источникам данных кэш-словарей. +Количество одновременно выполняющихся запросов к источникам данных словарей кеширующего типа. ### DiskObjectStorageAsyncThreads {#diskobjectstorageasyncthreads} @@ -253,23 +246,23 @@ SELECT * FROM system.metrics LIMIT 10 ### DiskObjectStorageAsyncThreadsActive {#diskobjectstorageasyncthreadsactive} -Количество потоков в асинхронном пуле потоков для DiskObjectStorage, выполняющих задачу. +Количество потоков в асинхронном пуле потоков DiskObjectStorage, выполняющих задачи. ### DiskSpaceReservedForMerge {#diskspacereservedformerge} -Дисковое пространство, зарезервированное для текущих фоновых слияний. Оно немного больше суммарного размера сливаемых сейчас кусков. +Дисковое пространство, зарезервированное для выполняющихся в данный момент фоновых слияний. Оно немного больше суммарного размера частей, участвующих в слиянии. ### DistributedFilesToInsert {#distributedfilestoinsert} -Количество отложенных файлов для обработки при асинхронной вставке в таблицы Distributed. Количество файлов по каждому шарду суммируется. +Количество файлов, ожидающих обработки для асинхронной вставки в Distributed-таблицы. Суммируется количество файлов по всем сегментам. ### DistributedSend {#distributedsend} -Количество соединений с удалёнными серверами, отправляющих данные, вставленные в таблицы Distributed. Включает как синхронный, так и асинхронный режим. +Количество подключений к удалённым серверам для отправки данных, вставленных оператором INSERT в таблицы Distributed. Поддерживает синхронный и асинхронный режимы. ### EphemeralNode {#ephemeralnode} -Количество эфемерных узлов, удерживаемых в ZooKeeper. +Количество эфемерных узлов, хранящихся в ZooKeeper. ### FilesystemCacheElements {#filesystemcacheelements} @@ -277,15 +270,15 @@ SELECT * FROM system.metrics LIMIT 10 ### FilesystemCacheReadBuffers {#filesystemcachereadbuffers} -Количество активных буферов кэша +Количество активных буферов файлового кэша ### FilesystemCacheSize {#filesystemcachesize} -Размер кэша файловой системы в байтах +Размер кеша файловой системы в байтах ### QueryCacheBytes {#querycachebytes} -Общий размер кэша запросов в байтах. +Общий объём кэша запросов в байтах. ### QueryCacheEntries {#querycacheentries} @@ -293,13 +286,13 @@ SELECT * FROM system.metrics LIMIT 10 ### UncompressedCacheBytes {#uncompressedcachebytes} -Общий размер некомпрессированного кэша в байтах. Некомпрессированный кэш обычно не улучшает производительность, и его по возможности следует избегать. +Общий размер несжатого кэша в байтах. Несжатый кэш обычно не улучшает производительность, и его, как правило, следует избегать. ### UncompressedCacheCells {#uncompressedcachecells} ### CompiledExpressionCacheBytes {#compiledexpressioncachebytes} -Общее число байт, используемых для кэша JIT-компилированного кода. +Общий объём памяти в байтах, занимаемый кэшем JIT-сомпилированного кода. ### CompiledExpressionCacheCount {#compiledexpressioncachecount} @@ -307,7 +300,7 @@ SELECT * FROM system.metrics LIMIT 10 ### MMapCacheCells {#mmapcachecells} -Количество файлов, открытых с помощью `mmap` (отображённых в память). Используется для запросов с настройкой `local_filesystem_read_method`, установленной в `mmap`. Файлы, открытые с помощью `mmap`, хранятся в кэше, чтобы избежать затратных сбросов TLB. +Количество файлов, открытых с помощью `mmap` (отображённых в память). Используется для запросов с параметром `local_filesystem_read_method`, имеющим значение `mmap`. Файлы, открытые с помощью `mmap`, сохраняются в кэше, чтобы избежать дорогостоящих операций сброса TLB. ### MarkCacheBytes {#markcachebytes} @@ -315,49 +308,47 @@ SELECT * FROM system.metrics LIMIT 10 ### MarkCacheFiles {#markcachefiles} -Общее количество файлов меток, закэшированных в кэше меток +Общее число файлов меток, находящихся в кэше меток ### GlobalThread {#globalthread} -Количество потоков в глобальном пуле потоков. +Число потоков в глобальном пуле потоков. ### GlobalThreadActive {#globalthreadactive} -Количество потоков в глобальном пуле потоков, выполняющих задачу. +Количество потоков в глобальном пуле потоков, которые выполняют задачу. ### HTTPConnection {#httpconnection} -Количество соединений с HTTP-сервером +Количество подключений к HTTP-серверу ### HashedDictionaryThreads {#hasheddictionarythreads} - - Количество потоков в пуле потоков HashedDictionary. ### HashedDictionaryThreadsActive {#hasheddictionarythreadsactive} -Количество потоков в пуле потоков HashedDictionary, выполняющих задачу. +Количество потоков в пуле потоков HashedDictionary, выполняющих задачи. ### IOPrefetchThreads {#ioprefetchthreads} -Количество потоков в пуле потоков предварительной выборки ввода-вывода (IO prefetch). +Количество потоков в пуле предварительной выборки ввода-вывода. ### IOPrefetchThreadsActive {#ioprefetchthreadsactive} -Количество потоков в пуле потоков предварительной выборки ввода-вывода (IO prefetch), выполняющих задачу. +Количество потоков в пуле потоков предварительной выборки операций ввода-вывода, выполняющих задачу. ### IOThreads {#iothreads} -Количество потоков в пуле потоков ввода-вывода (IO). +Количество потоков в пуле потоков ввода/вывода. ### IOThreadsActive {#iothreadsactive} -Количество потоков в пуле потоков ввода-вывода (IO), выполняющих задачу. +Количество потоков в пуле потоков ввода-вывода, выполняющих задачи. ### IOUringInFlightEvents {#iouringinflightevents} -Количество SQE io_uring, находящихся в обработке +Количество активных SQE io_uring ### IOUringPendingEvents {#iouringpendingevents} @@ -369,31 +360,31 @@ SELECT * FROM system.metrics LIMIT 10 ### IOWriterThreadsActive {#iowriterthreadsactive} -Количество потоков в пуле потоков записи ввода-вывода (IO writer), выполняющих задачу. +Количество потоков в пуле потоков записи ввода-вывода, которые в данный момент выполняют задачу. ### InterserverConnection {#interserverconnection} -Количество соединений от других реплик для получения кусков данных +Количество подключений от других реплик для получения частей данных ### KafkaAssignedPartitions {#kafkaassignedpartitions} -Количество разделов, к которым в данный момент назначены таблицы Kafka +Количество разделов, к которым в настоящий момент привязаны таблицы Kafka ### KafkaBackgroundReads {#kafkabackgroundreads} -Количество фоновых чтений, которые сейчас выполняются (заполняют материализованные представления из Kafka) +Количество фоновых операций чтения, которые сейчас выполняются (для заполнения материализованных представлений из Kafka) ### KafkaConsumers {#kafkaconsumers} -Количество активных потребителей Kafka +Количество активных консьюмеров Kafka ### KafkaConsumersInUse {#kafkaconsumersinuse} -Количество потребителей, которые в данный момент используются прямыми или фоновыми чтениями +Количество консьюмеров, в настоящий момент задействованных для прямых или фоновых операций чтения ### KafkaConsumersWithAssignment {#kafkaconsumerswithassignment} -Количество активных потребителей Kafka, которым назначены какие-либо разделы. +Количество активных Kafka-консьюмеров с назначенными партициями. ### KafkaLibrdkafkaThreads {#kafkalibrdkafkathreads} @@ -401,11 +392,11 @@ SELECT * FROM system.metrics LIMIT 10 ### KafkaProducers {#kafkaproducers} -Количество созданных активных продюсеров Kafka +Количество активных продюсеров Kafka ### KafkaWrites {#kafkawrites} -Количество в данный момент выполняемых вставок в Kafka +Количество текущих выполняемых вставок в Kafka ### KeeperAliveConnections {#keeperaliveconnections} @@ -413,27 +404,27 @@ SELECT * FROM system.metrics LIMIT 10 ### KeeperOutstandingRequests {#keeperoutstandingrequests} -Количество запросов, ожидающих обработки +Количество необработанных запросов ### LocalThread {#localthread} -Количество потоков в локальных пулах потоков. Потоки в локальных пулах потоков берутся из глобального пула потоков. +Количество потоков в локальных пулах потоков. Эти потоки выделяются из глобального пула потоков. ### LocalThreadActive {#localthreadactive} -Количество потоков в локальных пулах потоков, выполняющих задачу. +Количество потоков в локальных пулах потоков, выполняющих задачи. ### MMappedAllocBytes {#mmappedallocbytes} -Суммарный объём (в байтах) выделений через mmap +Сумма байт, выделенных через mmap ### MMappedAllocs {#mmappedallocs} -Общее количество выделений через mmap +Общее число выделений памяти через mmap ### MMappedFileBytes {#mmappedfilebytes} -Суммарный размер областей файлов, отображённых в память (mmap). +Суммарный размер участков файлов, отображённых в память (mmapped). ### MMappedFiles {#mmappedfiles} @@ -441,31 +432,31 @@ SELECT * FROM system.metrics LIMIT 10 ### MarksLoaderThreads {#marksloaderthreads} -Количество потоков в пуле потоков для загрузки меток. +Число потоков в пуле для загрузки меток. ### MarksLoaderThreadsActive {#marksloaderthreadsactive} -Количество потоков в пуле потоков для загрузки меток, выполняющих задачу. +Количество потоков в пуле потоков загрузки меток, выполняющих задачу. ### MaxDDLEntryID {#maxddlentryid} -Максимальный обработанный идентификатор записи DDL у DDLWorker. +Идентификатор последней обработанной записи DDL для DDLWorker. ### MaxPushedDDLEntryID {#maxpushedddlentryid} -Максимальный идентификатор записи DDL у DDLWorker, отправленной в ZooKeeper. +Максимальный идентификатор записи DDL, отправленной `DDLWorker` в ZooKeeper. ### MemoryTracking {#memorytracking} Общий объём памяти (в байтах), выделенной сервером. -### Merge {#merge} +### Слияние {#merge} -Количество выполняемых фоновых слияний +Количество выполняющихся фоновых слияний ### MergeTreeAllRangesAnnouncementsSent {#mergetreeallrangesannouncementssent} -Текущее количество уведомлений, отправляемых в данный момент с удалённого сервера инициирующему серверу о наборе кусков данных (для таблиц MergeTree). Измеряется на стороне удалённого сервера. +Текущее количество уведомлений, находящихся в процессе отправки с удалённого сервера на сервер-инициатор о наборе частей данных (для таблиц MergeTree). Измеряется на стороне удалённого сервера. ### MergeTreeBackgroundExecutorThreads {#mergetreebackgroundexecutorthreads} @@ -473,7 +464,7 @@ SELECT * FROM system.metrics LIMIT 10 ### MergeTreeBackgroundExecutorThreadsActive {#mergetreebackgroundexecutorthreadsactive} -Количество потоков в пуле потоков MergeTreeBackgroundExecutor, выполняющих задачу. +Количество потоков в пуле потоков MergeTreeBackgroundExecutor, выполняющих задания. ### MergeTreeDataSelectExecutorThreads {#mergetreedataselectexecutorthreads} @@ -481,13 +472,11 @@ SELECT * FROM system.metrics LIMIT 10 ### MergeTreeDataSelectExecutorThreadsActive {#mergetreedataselectexecutorthreadsactive} -Количество потоков в пуле потоков MergeTreeDataSelectExecutor, выполняющих задачу. +Количество потоков в пуле потоков MergeTreeDataSelectExecutor, выполняющих задания. ### MergeTreePartsCleanerThreads {#mergetreepartscleanerthreads} -Количество потоков в пуле потоков очистки кусков MergeTree. - - +Количество потоков в пуле потоков очистки частей MergeTree. ### MergeTreePartsCleanerThreadsActive {#mergetreepartscleanerthreadsactive} @@ -495,35 +484,35 @@ SELECT * FROM system.metrics LIMIT 10 ### MergeTreePartsLoaderThreads {#mergetreepartsloaderthreads} -Количество потоков в пуле потоков загрузчика частей MergeTree. +Количество потоков в пуле потоков загрузчика частей таблиц MergeTree. ### MergeTreePartsLoaderThreadsActive {#mergetreepartsloaderthreadsactive} -Количество потоков в пуле потоков загрузчика частей MergeTree, выполняющих задачу. +Количество потоков в пуле потоков загрузчика частей MergeTree, выполняющих задачи. ### MergeTreeReadTaskRequestsSent {#mergetreereadtaskrequestssent} -Текущее количество активных callback-запросов, отправленных с удалённого сервера обратно на сервер-инициатор для выбора задачи чтения (для таблиц MergeTree). Измеряется на стороне удалённого сервера. +Текущее количество активных callback-запросов, выполняемых с удалённого сервера на сервер-инициатор для выбора задачи чтения (для таблиц MergeTree). Измеряется на стороне удалённого сервера. -### Move {#move} +### Перемещения {#move} Количество операций перемещения, выполняющихся в данный момент ### MySQLConnection {#mysqlconnection} -Количество клиентских соединений, использующих протокол MySQL +Количество клиентских подключений по протоколу MySQL ### NetworkReceive {#networkreceive} -Количество потоков, получающих данные из сети. Учитывается только сетевое взаимодействие, связанное с ClickHouse, без учёта сторонних библиотек. +Количество потоков, принимающих данные по сети. Учитывается только сетевое взаимодействие, связанное с ClickHouse, а не со сторонними библиотеками. ### NetworkSend {#networksend} -Количество потоков, отправляющих данные в сеть. Учитывается только сетевое взаимодействие, связанное с ClickHouse, без учёта сторонних библиотек. +Количество потоков, отправляющих данные в сеть. При этом учитывается только сетевое взаимодействие, связанное с ClickHouse, без участия сторонних библиотек. ### OpenFileForRead {#openfileforread} -Количество файлов, открытых для чтения +Число файлов, открытых для чтения ### OpenFileForWrite {#openfileforwrite} @@ -531,11 +520,11 @@ SELECT * FROM system.metrics LIMIT 10 ### ParallelFormattingOutputFormatThreads {#parallelformattingoutputformatthreads} -Количество потоков в пуле потоков ParallelFormattingOutputFormatThreads. +Количество потоков в пуле ParallelFormattingOutputFormatThreads. ### ParallelFormattingOutputFormatThreadsActive {#parallelformattingoutputformatthreadsactive} -Количество потоков в пуле потоков ParallelFormattingOutputFormatThreads, выполняющих задачу. +Количество потоков в пуле потоков ParallelFormattingOutputFormatThreads, которые в данный момент выполняют задачу. ### PartMutation {#partmutation} @@ -543,7 +532,7 @@ SELECT * FROM system.metrics LIMIT 10 ### PartsActive {#partsactive} -Активная часть данных, используемая текущими и следующими запросами SELECT. +Активная часть данных, используемая текущими и последующими запросами SELECT. ### PartsCommitted {#partscommitted} @@ -555,19 +544,19 @@ SELECT * FROM system.metrics LIMIT 10 ### PartsDeleteOnDestroy {#partsdeleteondestroy} -Часть была перемещена на другой диск и должна быть удалена в собственном деструкторе. +Часть была перемещена на другой диск и должна быть удалена в своём деструкторе. ### PartsDeleting {#partsdeleting} -Неактивная часть данных с единичным счётчиком ссылок, в данный момент удаляется потоком очистки. +Неактивная часть данных с собственным счётчиком ссылок (refcounter), в данный момент удаляется процессом очистки. ### PartsOutdated {#partsoutdated} -Неактивная часть данных, которая может использоваться только текущими запросами SELECT и может быть удалена после завершения этих запросов SELECT. +Неактивная часть данных; может использоваться только выполняющимися в данный момент запросами SELECT и может быть удалена после их завершения. ### PartsPreActive {#partspreactive} -Часть находится в data_parts, но не используется для запросов SELECT. +Часть находится в data_parts, но не используется в запросах SELECT. ### PartsPreCommitted {#partsprecommitted} @@ -575,7 +564,7 @@ SELECT * FROM system.metrics LIMIT 10 ### PartsTemporary {#partstemporary} -Часть сейчас генерируется, она ещё не находится в списке data_parts. +Часть находится в процессе создания, её нет в списке data_parts. ### PartsWide {#partswide} @@ -583,11 +572,11 @@ SELECT * FROM system.metrics LIMIT 10 ### PendingAsyncInsert {#pendingasyncinsert} -Количество асинхронных вставок, ожидающих сброса на диск. +Количество асинхронных вставок, ожидающих сброса. ### PostgreSQLConnection {#postgresqlconnection} -Количество клиентских соединений, использующих протокол PostgreSQL +Количество клиентских подключений по протоколу PostgreSQL ### Query {#query} @@ -595,7 +584,7 @@ SELECT * FROM system.metrics LIMIT 10 ### QueryPreempted {#querypreempted} -Количество запросов, которые остановлены и ожидают из-за настройки `priority`. +Количество запросов, которые приостановлены и ожидают выполнения из-за параметра `priority`. ### QueryThread {#querythread} @@ -603,39 +592,39 @@ SELECT * FROM system.metrics LIMIT 10 ### RWLockActiveReaders {#rwlockactivereaders} -Количество потоков, удерживающих блокировку на чтение в RWLock таблицы. +Количество потоков, удерживающих блокировку чтения RWLock таблицы. ### RWLockActiveWriters {#rwlockactivewriters} -Количество потоков, удерживающих блокировку на запись в RWLock таблицы. +Количество потоков, удерживающих блокировку на запись (write lock) в RWLock таблицы. ### RWLockWaitingReaders {#rwlockwaitingreaders} -Количество потоков, ожидающих чтения в RWLock таблицы. +Количество потоков, ожидающих получения блокировки на чтение (RWLock) для таблицы. ### RWLockWaitingWriters {#rwlockwaitingwriters} -Количество потоков, ожидающих записи в RWLock таблицы. +Количество потоков, ожидающих возможности записи на RWLock таблицы. ### Read {#read} -Количество системных вызовов чтения (read, pread, io_getevents и т. д.), выполняющихся в данный момент +Количество системных вызовов чтения (read, pread, io_getevents и т. д.), находящихся в полёте ### ReadTaskRequestsSent {#readtaskrequestssent} -Текущее количество активных callback-запросов, отправленных с удалённого сервера обратно на сервер-инициатор для выбора задачи чтения (для функции таблицы s3Cluster и подобных). Измеряется на стороне удалённого сервера. +Текущее количество активных callback‑запросов от удалённого сервера к серверу‑инициатору для выбора задачи чтения (для табличной функции s3Cluster и аналогичных). Измеряется на стороне удалённого сервера. ### ReadonlyReplica {#readonlyreplica} -Количество реплицируемых таблиц, которые сейчас находятся в состоянии readonly из-за повторной инициализации после потери сессии ZooKeeper или из-за запуска без настроенного ZooKeeper. +Количество реплицируемых таблиц, которые в данный момент находятся в режиме `readonly` из‑за повторной инициализации после потери сессии ZooKeeper или из‑за запуска без настроенного ZooKeeper. ### RemoteRead {#remoteread} -Количество операций чтения с удалённым ридером, выполняющихся в данный момент +Количество выполняющихся в данный момент операций чтения с удалённым читателем ### ReplicatedChecks {#replicatedchecks} -Количество частей данных, проверяемых на согласованность +Количество кусков данных, проверяемых на согласованность ### ReplicatedFetch {#replicatedfetch} @@ -643,57 +632,55 @@ SELECT * FROM system.metrics LIMIT 10 ### ReplicatedSend {#replicatedsend} -Количество частей данных, отправляемых на реплики - - +Количество частей данных, отправляемых репликам ### RestartReplicaThreads {#restartreplicathreads} -Количество потоков в пуле потоков RESTART REPLICA. +Количество потоков в пуле потоков для RESTART REPLICA. ### RestartReplicaThreadsActive {#restartreplicathreadsactive} -Количество потоков в пуле потоков RESTART REPLICA, выполняющих задачу. +Количество потоков в пуле потоков RESTART REPLICA, в данный момент выполняющих задачу. ### RestoreThreads {#restorethreads} -Количество потоков в пуле потоков для RESTORE. +Число потоков в пуле потоков, используемом для RESTORE. ### RestoreThreadsActive {#restorethreadsactive} -Количество потоков в пуле потоков для RESTORE, выполняющих задачу. +Количество потоков в пуле потоков, используемых RESTORE для выполнения задачи. -### Revision {#revision} +### Ревизия {#revision} -Ревизия сервера. Это число, увеличивающееся при каждом релизе или релиз-кандидате, за исключением патч-релизов. +Ревизия сервера. Это число, которое увеличивается с каждым релизом или релиз-кандидатом, за исключением патч-релизов. ### S3Requests {#s3requests} -Количество запросов к S3. +S3‑запросы ### SendExternalTables {#sendexternaltables} -Количество соединений, которые отправляют данные для внешних таблиц на удалённые серверы. Внешние таблицы используются для реализации операторов GLOBAL IN и GLOBAL JOIN с распределёнными подзапросами. +Число подключений, которые отправляют данные для внешних таблиц на удалённые серверы. Внешние таблицы используются для реализации операторов GLOBAL IN и GLOBAL JOIN в распределённых подзапросах. ### SendScalars {#sendscalars} -Количество соединений, которые отправляют данные для скаляров на удалённые серверы. +Количество соединений, которые отправляют данные скаляров на удалённые серверы. ### StorageBufferBytes {#storagebufferbytes} -Количество байт в буферах таблиц типа Buffer. +Количество байт в буферах таблиц Buffer ### StorageBufferRows {#storagebufferrows} -Количество строк в буферах таблиц типа Buffer. +Количество строк в буферах таблиц типа Buffer ### StorageDistributedThreads {#storagedistributedthreads} -Количество потоков в пуле потоков StorageDistributed. +Количество потоков в пуле потоков хранилища StorageDistributed. ### StorageDistributedThreadsActive {#storagedistributedthreadsactive} -Количество потоков в пуле потоков StorageDistributed, выполняющих задачу. +Количество потоков в пуле потоков StorageDistributed, которые в данный момент выполняют задачи. ### StorageHiveThreads {#storagehivethreads} @@ -701,97 +688,95 @@ SELECT * FROM system.metrics LIMIT 10 ### StorageHiveThreadsActive {#storagehivethreadsactive} -Количество потоков в пуле потоков StorageHive, выполняющих задачу. +Количество потоков в пуле потоков StorageHive, выполняющих задачи. ### StorageS3Threads {#storages3threads} -Количество потоков в пуле потоков StorageS3. +Число потоков в пуле потоков StorageS3. ### StorageS3ThreadsActive {#storages3threadsactive} -Количество потоков в пуле потоков StorageS3, выполняющих задачу. +Количество потоков в пуле потоков StorageS3, которые выполняют задачи. ### SystemReplicasThreads {#systemreplicasthreads} -Количество потоков в пуле потоков system.replicas. +Количество потоков в пуле потоков `system.replicas`. ### SystemReplicasThreadsActive {#systemreplicasthreadsactive} -Количество потоков в пуле потоков system.replicas, выполняющих задачу. +Количество потоков в пуле потоков system.replicas, в настоящее время выполняющих задачу. ### TCPConnection {#tcpconnection} -Количество соединений с TCP-сервером (клиенты с нативным интерфейсом), сюда также включены соединения сервер–сервер для распределённых запросов. +Количество подключений к TCP-серверу (включая клиентов с нативным интерфейсом), а также соединений «сервер–сервер» для распределённых запросов. ### TablesToDropQueueSize {#tablestodropqueuesize} -Количество удалённых таблиц, ожидающих фонового удаления данных. +Количество удалённых таблиц, которые ожидают фонового удаления данных. ### TemporaryFilesForAggregation {#temporaryfilesforaggregation} -Количество временных файлов, созданных для внешней агрегации. +Количество временных файлов, создаваемых при внешней агрегации ### TemporaryFilesForJoin {#temporaryfilesforjoin} -Количество временных файлов, созданных для JOIN. +Количество временных файлов, созданных для операций JOIN ### TemporaryFilesForSort {#temporaryfilesforsort} -Количество временных файлов, созданных для внешней сортировки. +Количество временных файлов, созданных для внешней сортировки ### TemporaryFilesUnknown {#temporaryfilesunknown} -Количество временных файлов, созданных без известного назначения. +Количество временных файлов, назначение которых неизвестно ### ThreadPoolFSReaderThreads {#threadpoolfsreaderthreads} -Количество потоков в пуле потоков для local_filesystem_read_method=threadpool. +Количество потоков в пуле для local_filesystem_read_method=threadpool. ### ThreadPoolFSReaderThreadsActive {#threadpoolfsreaderthreadsactive} -Количество потоков в пуле потоков для local_filesystem_read_method=threadpool, выполняющих задачу. +Количество потоков в пуле потоков, выполняющих задачу, при local_filesystem_read_method=threadpool. ### ThreadPoolRemoteFSReaderThreads {#threadpoolremotefsreaderthreads} -Количество потоков в пуле потоков для remote_filesystem_read_method=threadpool. +Число потоков в пуле потоков для remote_filesystem_read_method=threadpool. ### ThreadPoolRemoteFSReaderThreadsActive {#threadpoolremotefsreaderthreadsactive} -Количество потоков в пуле потоков для remote_filesystem_read_method=threadpool, выполняющих задачу. +Количество потоков в пуле потоков для remote_filesystem_read_method=threadpool, которые в данный момент выполняют задачу. ### ThreadsInOvercommitTracker {#threadsinovercommittracker} -Количество ожидающих потоков внутри OvercommitTracker. +Количество ожидающих потоков в OvercommitTracker ### TotalTemporaryFiles {#totaltemporaryfiles} -Количество созданных временных файлов. +Число созданных временных файлов ### VersionInteger {#versioninteger} -Версия сервера в виде одного целого числа в системе base-1000. Например, версия 11.22.33 преобразуется в 11022033. +Версия сервера в виде одного целого числа в системе счисления с основанием 1000. Например, версия 11.22.33 преобразуется в 11022033. ### Write {#write} -Количество системных вызовов записи (write, pwrite, io_getevents и т. д.), выполняющихся в данный момент. +Количество выполняющихся системных вызовов записи (write, pwrite, io_getevents и т. д.) ### ZooKeeperRequest {#zookeeperrequest} -Количество запросов к ZooKeeper, выполняющихся в данный момент. +Количество выполняющихся запросов к ZooKeeper. ### ZooKeeperSession {#zookeepersession} -Количество сеансов (соединений) с ZooKeeper. Их должно быть не более одного, так как использование более чем одного соединения с ZooKeeper может привести к ошибкам из-за отсутствия линеаризуемости (устаревшие чтения), допускаемой моделью согласованности ZooKeeper. +Количество сессий (соединений) с ZooKeeper не должно превышать одной, поскольку использование более чем одного соединения с ZooKeeper может приводить к ошибкам из‑за отсутствия линеаризуемости (устаревших чтений), допускаемого моделью согласованности ZooKeeper. ### ZooKeeperWatch {#zookeeperwatch} -Количество наблюдений (подписок на события) в ZooKeeper. +Количество наблюдений (watch, подписок на события) в ZooKeeper. ### ConcurrencyControlAcquired {#concurrencycontrolacquired} -Общее количество занятых CPU-слотов. - - +Общее количество выделенных слотов CPU. ### ConcurrencyControlSoftLimit {#concurrencycontrolsoftlimit} @@ -802,4 +787,4 @@ SELECT * FROM system.metrics LIMIT 10 - [system.asynchronous_metrics](/operations/system-tables/asynchronous_metrics) — Содержит периодически вычисляемые метрики. - [system.events](/operations/system-tables/events) — Содержит количество произошедших событий. - [system.metric_log](/operations/system-tables/metric_log) — Содержит историю значений метрик из таблиц `system.metrics` и `system.events`. -- [Monitoring](../../operations/monitoring.md) — Базовые концепции мониторинга ClickHouse. +- [Monitoring](../../operations/monitoring.md) — Базовые концепции мониторинга ClickHouse. \ No newline at end of file diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/moves.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/moves.md index 2df4566ad51..7b210926c66 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/moves.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/moves.md @@ -1,30 +1,18 @@ --- -description: 'Системная таблица, содержащая информацию о перемещениях частей данных - таблиц MergeTree, находящихся в процессе выполнения. Каждое перемещение части данных представлено одной строкой.' +description: 'Системная таблица, содержащая информацию о текущих перемещениях частей данных таблиц MergeTree. Каждое перемещение части данных представлено одной строкой.' keywords: ['системная таблица', 'перемещения'] slug: /operations/system-tables/moves title: 'system.moves' doc_type: 'reference' --- - - # system.moves -Эта таблица содержит информацию о выполняющихся [перемещениях частей данных](/sql-reference/statements/alter/partition#move-partitionpart) таблиц [MergeTree](/engines/table-engines/mergetree-family/mergetree.md). Каждое перемещение части данных представлено одной строкой. +Таблица содержит информацию о выполняющихся [перемещениях частей данных](/sql-reference/statements/alter/partition#move-partitionpart) таблиц [MergeTree](/engines/table-engines/mergetree-family/mergetree.md). Каждое перемещение части данных представлено одной строкой. Столбцы: -{/*AUTOGENERGED_START*/ } - -* `database` ([String](../../sql-reference/data-types/)) — Имя базы данных. -* `table` ([String](../../sql-reference/data-types/)) — Имя таблицы, содержащей перемещаемую часть данных. -* `elapsed` ([Float64](../../sql-reference/data-types/)) — Время (в секундах), прошедшее с начала перемещения части данных. -* `target_disk_name` ([String](../../sql-reference/data-types/)) — Имя диска, на который перемещается часть данных. -* `target_disk_path` ([String](../../sql-reference/data-types/)) — Путь к точке монтирования диска в файловой системе. -* `part_name` ([String](../../sql-reference/data-types/)) — Имя перемещаемой части данных. -* `part_size` ([UInt64](../../sql-reference/data-types/)) — Размер части данных. -* `thread_id` ([UInt64](../../sql-reference/data-types/)) — Идентификатор потока, выполняющего перемещение. +{/*AUTOGENERATED_START*/ } {/*AUTOGENERATED_END*/ } diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/mutations.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/mutations.md index 9ccd6fec566..babebe388f8 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/mutations.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/mutations.md @@ -1,55 +1,51 @@ --- description: 'Системная таблица, содержащая информацию о мутациях таблиц MergeTree - и ходе их выполнения. Каждая команда мутации представлена одной строкой.' -keywords: ['system table', 'mutations'] + и ходе их выполнения. Каждая команда мутации отображается отдельной строкой.' +keywords: ['системная таблица', 'мутации'] slug: /operations/system-tables/mutations title: 'system.mutations' doc_type: 'reference' --- - - # system.mutations -Эта таблица содержит информацию о [мутациях](/sql-reference/statements/alter/index.md#mutations) таблиц семейства [MergeTree](/engines/table-engines/mergetree-family/mergetree.md) и прогрессе их выполнения. Каждая операция мутации представлена одной строкой. - - +Таблица содержит информацию о [мутациях](/sql-reference/statements/alter/index.md#mutations) таблиц [MergeTree](/engines/table-engines/mergetree-family/mergetree.md) и ходе их выполнения. Каждой команде мутации соответствует одна строка. -## Столбцы {#columns} +## Столбцы: \{#columns\} -- `database` ([String](/sql-reference/data-types/string.md)) — Имя базы данных, к которой применена мутация. -- `table` ([String](/sql-reference/data-types/string.md)) — Имя таблицы, к которой применена мутация. +- `database` ([String](/sql-reference/data-types/string.md)) — Имя базы данных, к которой была применена мутация. +- `table` ([String](/sql-reference/data-types/string.md)) — Имя таблицы, к которой была применена мутация. - `mutation_id` ([String](/sql-reference/data-types/string.md)) — Идентификатор мутации. Для реплицируемых таблиц эти идентификаторы соответствуют именам znode в каталоге `/mutations/` в ClickHouse Keeper. Для нереплицируемых таблиц идентификаторы соответствуют именам файлов в каталоге данных таблицы. - `command` ([String](/sql-reference/data-types/string.md)) — Строка команды мутации (часть запроса после `ALTER TABLE [db.]table`). -- `create_time` ([DateTime](/sql-reference/data-types/datetime.md)) — Дата и время отправки команды мутации на выполнение. -- `block_numbers.partition_id` ([Array](/sql-reference/data-types/array.md)([String](/sql-reference/data-types/string.md))) — Для мутаций реплицируемых таблиц массив содержит идентификаторы партиций (одна запись для каждой партиции). Для мутаций нереплицируемых таблиц массив пуст. -- `block_numbers.number` ([Array](/sql-reference/data-types/array.md)([Int64](/sql-reference/data-types/int-uint.md))) — Для мутаций реплицируемых таблиц массив содержит одну запись для каждой партиции с номером блока, полученным мутацией. В партиции будут мутированы только куски, содержащие блоки с номерами меньше этого номера. В нереплицируемых таблицах номера блоков во всех партициях образуют единую последовательность. Это означает, что для мутаций нереплицируемых таблиц столбец будет содержать одну запись с единственным номером блока, полученным мутацией. -- `parts_to_do_names` ([Array](/sql-reference/data-types/array.md)([String](/sql-reference/data-types/string.md))) — Массив имён кусков данных, которые необходимо мутировать для завершения мутации. -- `parts_to_do` ([Int64](/sql-reference/data-types/int-uint.md)) — Количество кусков данных, которые необходимо мутировать для завершения мутации. -- `is_killed` ([UInt8](/sql-reference/data-types/int-uint.md)) — Указывает, была ли мутация прервана. **Доступно только в ClickHouse Cloud.** - -:::note -`is_killed=1` не обязательно означает, что мутация полностью завершена. Мутация может оставаться в состоянии, где `is_killed=1` и `is_done=0` в течение длительного времени. Это может произойти, если другая долго выполняющаяся мутация блокирует прерванную мутацию. Это нормальная ситуация. +- `create_time` ([DateTime](/sql-reference/data-types/datetime.md)) — Дата и время, когда команда мутации была отправлена на выполнение. +- `block_numbers.partition_id` ([Array](/sql-reference/data-types/array.md)([String](/sql-reference/data-types/string.md))) — Для мутаций реплицируемых таблиц массив содержит идентификаторы партиций (по одной записи для каждой партиции). Для мутаций нереплицируемых таблиц массив пуст. +- `block_numbers.number` ([Array](/sql-reference/data-types/array.md)([Int64](/sql-reference/data-types/int-uint.md))) — Для мутаций реплицируемых таблиц массив содержит по одной записи для каждой партиции с номером блока, который был получен мутацией. В партиции будут изменены только те части, которые содержат блоки с номерами меньше этого значения. В нереплицируемых таблицах номера блоков во всех партициях образуют единую последовательность. Это означает, что для мутаций нереплицируемых таблиц столбец будет содержать одну запись с единственным номером блока, полученным мутацией. +- `parts_in_progress_names` ([Array](/sql-reference/data-types/array.md)([String](/sql-reference/data-types/string.md))) — Массив имён частей данных, которые в данный момент находятся в процессе мутации. +- `parts_to_do_names` ([Array](/sql-reference/data-types/array.md)([String](/sql-reference/data-types/string.md))) — Массив имён частей данных, которые ещё необходимо изменить для завершения мутации. +- `parts_to_do` ([Int64](/sql-reference/data-types/int-uint.md)) — Количество частей данных, которые ещё необходимо изменить для завершения мутации. +- `is_killed` ([UInt8](/sql-reference/data-types/int-uint.md)) — Показывает, была ли мутация принудительно остановлена. **Доступно только в ClickHouse Cloud.** + +:::note +`is_killed=1` не обязательно означает, что мутация полностью завершена. Возможно состояние, при котором мутация остаётся с `is_killed=1` и `is_done=0` в течение продолжительного времени. Это может происходить, если остановленную мутацию блокирует другая, долго выполняющаяся мутация. Это нормальная ситуация. ::: -- `is_done` ([UInt8](/sql-reference/data-types/int-uint.md)) — Флаг, указывающий, завершена ли мутация. Возможные значения: - - `1` — мутация завершена, - - `0` — мутация всё ещё выполняется. +- `is_done` ([UInt8](/sql-reference/data-types/int-uint.md)) — Флаг, показывающий, завершена ли мутация. Возможные значения: + - `1`, если мутация завершена, + - `0`, если мутация всё ещё выполняется. :::note -Даже если `parts_to_do = 0`, возможно, что мутация реплицируемой таблицы ещё не завершена из-за долго выполняющегося запроса `INSERT`, который создаст новый кусок данных, требующий мутации. +Даже если `parts_to_do = 0`, мутация реплицируемой таблицы может ещё не быть завершена из-за долго выполняющегося запроса `INSERT`, который создаст новую часть данных, подлежащую мутации. ::: -Если возникли проблемы с мутацией некоторых кусков данных, следующие столбцы содержат дополнительную информацию: - -- `latest_failed_part` ([String](/sql-reference/data-types/string.md)) — Имя последнего куска, который не удалось мутировать. -- `latest_fail_time` ([DateTime](/sql-reference/data-types/datetime.md)) — Дата и время последнего сбоя мутации куска. -- `latest_fail_reason` ([String](/sql-reference/data-types/string.md)) — Сообщение об исключении, вызвавшем последний сбой мутации куска. +Если при мутации некоторых частей данных возникли проблемы, дополнительные сведения содержатся в следующих столбцах: +- `latest_failed_part` ([String](/sql-reference/data-types/string.md)) — Имя самой последней по времени части, которую не удалось изменить. +- `latest_fail_time` ([DateTime](/sql-reference/data-types/datetime.md)) — Дата и время последнего сбоя при мутации части. +- `latest_fail_reason` ([String](/sql-reference/data-types/string.md)) — Сообщение исключения, вызвавшего последний сбой при мутации части. -## Мониторинг мутаций {#monitoring-mutations} +## Мониторинг мутаций -Для отслеживания прогресса мутаций в таблице `system.mutations` используйте следующий запрос: +Чтобы отслеживать ход выполнения мутаций в таблице `system.mutations`, используйте следующий запрос: ```sql SELECT * FROM clusterAllReplicas('cluster_name', 'system', 'mutations') @@ -63,12 +59,12 @@ WHERE is_done = 0 AND table = 'tmp'; Примечание: для этого требуются права на чтение таблиц `system.*`. -:::tip Использование в Cloud -В ClickHouse Cloud таблица `system.mutations` на каждом узле содержит все мутации кластера, поэтому использование `clusterAllReplicas` не требуется. +:::tip Cloud usage +В ClickHouse Cloud таблица `system.mutations` на каждом узле содержит все мутации в кластере, поэтому в `clusterAllReplicas` нет необходимости. ::: **См. также** -- [Мутации](/sql-reference/statements/alter/index.md#mutations) -- Движок таблиц [MergeTree](/engines/table-engines/mergetree-family/mergetree.md) -- Семейство [ReplicatedMergeTree](/engines/table-engines/mergetree-family/replication.md) +* [Mutations](/sql-reference/statements/alter/index.md#mutations) +* Движок таблицы [MergeTree](/engines/table-engines/mergetree-family/mergetree.md) +* Семейство движков [ReplicatedMergeTree](/engines/table-engines/mergetree-family/replication.md) diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/processes.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/processes.md index 7b73ea547c3..d066c4c7467 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/processes.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/processes.md @@ -1,5 +1,5 @@ --- -description: 'Системная таблица, предназначенная для реализации запроса `SHOW PROCESSLIST`.' +description: 'Системная таблица, используемая для реализации запроса `SHOW PROCESSLIST`.' keywords: ['системная таблица', 'процессы'] slug: /operations/system-tables/processes title: 'system.processes' @@ -11,59 +11,14 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; # system.processes - + Эта системная таблица предназначена для реализации запроса `SHOW PROCESSLIST`. Столбцы: - - {/*AUTOGENERATED_START*/ } -* `is_initial_query` ([UInt8](../../sql-reference/data-types/)) — Показывает, поступил ли этот запрос непосредственно от пользователя или был сформирован сервером ClickHouse при выполнении распределённого запроса. -* `user` ([String](../../sql-reference/data-types/)) — Пользователь, который выполнил запрос. Имейте в виду, что при распределённой обработке запросы отправляются на удалённые серверы от имени пользователя по умолчанию. В поле содержится имя пользователя именно для данного запроса, а не для запросов, которые были инициированы этим запросом. -* `query_id` ([String](../../sql-reference/data-types/)) — идентификатор запроса, если задан. -* `address` ([IPv6](../../sql-reference/data-types/)) — IP-адрес, с которого был выполнен запрос. То же самое справедливо для распределённой обработки. Чтобы отследить, откуда изначально был выполнен распределённый запрос, посмотрите на system.processes на сервере-инициаторе запроса. -* `port` ([UInt16](../../sql-reference/data-types/)) — Порт клиента, с которого был отправлен запрос. -* `initial_user` ([String](../../sql-reference/data-types/)) — Имя пользователя, выполнившего первоначальный запрос (для распределённого выполнения запроса). -* `initial_query_id` ([String](../../sql-reference/data-types/)) — идентификатор исходного запроса (для распределённого выполнения запросов). -* `initial_address` ([IPv6](../../sql-reference/data-types/)) — IP-адрес, с которого был инициирован родительский запрос. -* `initial_port` ([UInt16](../../sql-reference/data-types/)) — Порт клиента, использованный для выполнения родительского запроса. -* `interface` ([UInt8](../../sql-reference/data-types/)) — Интерфейс, через который был отправлен запрос. TCP = 1, HTTP = 2, GRPC = 3, MYSQL = 4, POSTGRESQL = 5, LOCAL = 6, TCP_INTERSERVER = 7. -* `os_user` ([String](../../sql-reference/data-types/)) — Имя пользователя операционной системы, от имени которого запущен clickhouse-client. -* `client_hostname` ([String](../../sql-reference/data-types/)) — Имя хоста клиентской машины, на которой запущен clickhouse-client или другой TCP‑клиент. -* `client_name` ([String](../../sql-reference/data-types/)) — имя клиента clickhouse-client или другого TCP-клиента. -* `client_revision` ([UInt64](../../sql-reference/data-types/)) — ревизия clickhouse-client или другого TCP-клиента. -* `client_version_major` ([UInt64](../../sql-reference/data-types/)) — Мажорная версия clickhouse-client или другого TCP-клиента. -* `client_version_minor` ([UInt64](../../sql-reference/data-types/)) — номер минорной версии clickhouse-client или другого TCP-клиента. -* `client_version_patch` ([UInt64](../../sql-reference/data-types/)) — номер патча версии clickhouse-client или другого TCP-клиента. -* `http_method` ([UInt8](../../sql-reference/data-types/)) — HTTP-метод, которым был инициирован запрос. Возможные значения: 0 — запрос был выполнен через TCP-интерфейс. 1 — использован метод GET. 2 — использован метод POST. -* `http_user_agent` ([String](../../sql-reference/data-types/)) — HTTP-заголовок User-Agent, переданный в HTTP-запросе.` -* `http_referer` ([String](../../sql-reference/data-types/)) — HTTP-заголовок Referer, передаваемый в HTTP-запросе (содержит абсолютный или частичный адрес страницы, с которой выполняется запрос). -* `forwarded_for` ([String](../../sql-reference/data-types/)) — HTTP-заголовок X-Forwarded-For, переданный в HTTP-запросе. -* `quota_key` ([String](../../sql-reference/data-types/)) — Ключ квоты, указанный в настройке quotas (см. keyed). -* `distributed_depth` ([UInt64](../../sql-reference/data-types/)) — Количество повторных передач запроса между серверными узлами внутри кластера. -* `elapsed` ([Float64](../../sql-reference/data-types/)) — время в секундах, прошедшее с момента начала выполнения запроса. -* `is_cancelled` ([UInt8](../../sql-reference/data-types/)) — Был ли запрос отменён. -* `is_all_data_sent` ([UInt8](../../sql-reference/data-types/)) — Все ли данные отправлены клиенту (то есть завершился ли запрос на сервере). -* `read_rows` ([UInt64](../../sql-reference/data-types/)) — количество строк, прочитанных из таблицы. Для распределённой обработки на сервере-инициаторе запроса это суммарное значение для всех удалённых серверов. -* `read_bytes` ([UInt64](../../sql-reference/data-types/)) — количество несжатых байт, прочитанных из таблицы. При распределённой обработке на сервере, отправившем запрос, это суммарное значение для всех удалённых серверов. -* `total_rows_approx` ([UInt64](../../sql-reference/data-types/)) — Приблизительное общее количество строк, которые нужно прочитать. Для распределённой обработки на сервере-инициаторе это суммарное значение для всех удалённых серверов. Может обновляться в процессе выполнения запроса, когда становятся известны новые источники данных для обработки. -* `written_rows` ([UInt64](../../sql-reference/data-types/)) — количество строк, записанных в хранилище. -* `written_bytes` ([UInt64](../../sql-reference/data-types/)) — количество байт, записанных в хранилище. -* `memory_usage` ([Int64](../../sql-reference/data-types/)) — объём оперативной памяти, используемой запросом. Может не учитывать некоторые типы выделенной памяти. -* `peak_memory_usage` ([Int64](../../sql-reference/data-types/)) — текущий максимум использования памяти. -* `query` ([String](../../sql-reference/data-types/)) — Текст запроса. Для запроса INSERT не включает данные для вставки. -* `normalized_query_hash` ([UInt64](../../sql-reference/data-types/)) — числовое хэш-значение, совпадающее для запросов, которые отличаются только значениями литералов. -* `query_kind` ([String](../../sql-reference/data-types/)) — тип запроса: SELECT, INSERT и т. д. -* `thread_ids` ([Array(UInt64)](../../sql-reference/data-types/)) — список идентификаторов всех потоков, которые участвовали в выполнении этого запроса. -* `peak_threads_usage` ([UInt64](../../sql-reference/data-types/)) — Максимальное количество одновременных потоков, выполняющих запрос. -* `ProfileEvents` ([Map(String, UInt64)](../../sql-reference/data-types/)) — счётчики ProfileEvents, вычисленные для этого запроса. -* `Settings` ([Map(String, String)](../../sql-reference/data-types/)) — список изменённых настроек на уровне пользователя. -* `current_database` ([String](../../sql-reference/data-types/)) — имя текущей базы данных. -* `is_internal` ([UInt8](../../sql-reference/data-types/)) — Указывает, является ли запрос служебным и выполняется ли он внутри системы. - {/*AUTOGENERATED_END*/ } ```sql diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/projection_parts.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/projection_parts.md index 5388af66446..c29c0138fb0 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/projection_parts.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/projection_parts.md @@ -6,79 +6,12 @@ title: 'system.projection_parts' doc_type: 'reference' --- - - # system.projection_parts -Эта таблица содержит информацию о частях проекций для таблиц семейства MergeTree. - - - -## Столбцы {#columns} - +Эта таблица содержит информацию о частях проекций таблиц семейства MergeTree. +## Столбцы {/*AUTOGENERATED_START*/ } -* `partition` ([String](../../sql-reference/data-types/)) — имя партиции. -* `name` ([String](../../sql-reference/data-types/)) — имя части данных. -* `part_type` ([String](../../sql-reference/data-types/)) — формат хранения части данных. Возможные значения: Wide (отдельный файл для каждого столбца) и Compact (один файл для всех столбцов). -* `parent_name` ([String](../../sql-reference/data-types/)) — Имя исходной (родительской) части данных. -* `parent_uuid` ([UUID](../../sql-reference/data-types/)) — UUID исходной (родительской) части данных. -* `parent_part_type` ([String](../../sql-reference/data-types/)) — Формат хранения исходной (родительской) части данных. -* `active` ([UInt8](../../sql-reference/data-types/)) — признак, указывающий, активна ли часть данных. Если часть данных активна, она используется в таблице. В противном случае она подлежит удалению. Неактивные части данных появляются после операций слияния (merge) и мутаций (mutation). -* `marks` ([UInt64](../../sql-reference/data-types/)) — Количество меток. Чтобы получить приблизительное количество строк в части данных, умножьте число меток на гранулярность индекса (обычно 8192) (этот прием не работает при адаптивной гранулярности). -* `rows` ([UInt64](../../sql-reference/data-types/)) — Количество строк. -* `bytes_on_disk` ([UInt64](../../sql-reference/data-types/)) — общий размер всех файлов частей данных в байтах. -* `data_compressed_bytes` ([UInt64](../../sql-reference/data-types/)) — Общий размер сжатых данных в части данных. Все вспомогательные файлы (например, файлы с метками) не учитываются.` -* `data_uncompressed_bytes` ([UInt64](../../sql-reference/data-types/)) — Общий размер несжатых данных в части данных таблицы. Все вспомогательные файлы (например, файлы с метками) не учитываются. -* `marks_bytes` ([UInt64](../../sql-reference/data-types/)) — размер файла с метками. -* `parent_marks` ([UInt64](../../sql-reference/data-types/)) — количество меток в исходной (родительской) части. -* `parent_rows` ([UInt64](../../sql-reference/data-types/)) — Количество строк в исходной (родительской) части. -* `parent_bytes_on_disk` ([UInt64](../../sql-reference/data-types/)) — Общий размер всех файлов исходных (родительских) частей данных в байтах. -* `parent_data_compressed_bytes` ([UInt64](../../sql-reference/data-types/)) — Общий объём сжатых данных в исходной (родительской) части данных. -* `parent_data_uncompressed_bytes` ([UInt64](../../sql-reference/data-types/)) — Общий объём несжатых данных в исходной (родительской) части данных. -* `parent_marks_bytes` ([UInt64](../../sql-reference/data-types/)) — размер файла с метками в исходной (родительской) части данных. -* `modification_time` ([DateTime](../../sql-reference/data-types/)) — Время изменения каталога, содержащего часть данных. Обычно соответствует времени создания этой части данных.` -* `remove_time` ([DateTime](../../sql-reference/data-types/)) — время, когда часть данных стала неактивной. -* `refcount` ([UInt32](../../sql-reference/data-types/)) — Количество мест, где используется часть данных. Значение, большее 2, указывает на то, что часть данных используется в запросах или слияниях. -* `min_date` ([Date](../../sql-reference/data-types/)) — минимальное значение ключа даты в части данных. -* `max_date` ([Date](../../sql-reference/data-types/)) — максимальное значение ключа даты в части данных. -* `min_time` ([DateTime](../../sql-reference/data-types/)) — минимальное значение ключа типа DateTime в части данных. -* `max_time` ([DateTime](../../sql-reference/data-types/)) — максимальное значение ключа даты и времени в части данных. -* `partition_id` ([String](../../sql-reference/data-types/)) — идентификатор раздела. -* `min_block_number` ([Int64](../../sql-reference/data-types/)) — минимальное количество частей данных, образующих текущую часть после слияния. -* `max_block_number` ([Int64](../../sql-reference/data-types/)) — Максимальный номер блока среди кусков данных, составляющих текущий кусок после слияния. -* `level` ([UInt32](../../sql-reference/data-types/)) — Глубина дерева слияния. Ноль означает, что текущая часть была создана в результате вставки, а не слияния других частей. -* `data_version` ([UInt64](../../sql-reference/data-types/)) — число, используемое для определения того, какие мутации должны быть применены к части данных (мутации с версией, превышающей значение `data_version`). -* `primary_key_bytes_in_memory` ([UInt64](../../sql-reference/data-types/)) — объём памяти (в байтах), который занимают значения первичного ключа. -* `primary_key_bytes_in_memory_allocated` ([UInt64](../../sql-reference/data-types/)) — Объем памяти (в байтах), выделенный для значений первичного ключа. -* `is_frozen` ([UInt8](../../sql-reference/data-types/)) — флаг, показывающий наличие резервной копии данных партиции. 1 — резервная копия существует. 0 — резервная копия отсутствует. -* `database` ([String](../../sql-reference/data-types/)) — имя базы данных. -* `table` ([String](../../sql-reference/data-types/)) — Имя таблицы. -* `engine` ([String](../../sql-reference/data-types/)) — Имя движка таблицы без параметров. -* `disk_name` ([String](../../sql-reference/data-types/)) — Имя диска, на котором хранится часть данных. -* `path` ([String](../../sql-reference/data-types/)) — Абсолютный путь к каталогу с файлами частей данных. -* `hash_of_all_files` ([String](../../sql-reference/data-types/)) — sipHash128 от сжатых файлов. -* `hash_of_uncompressed_files` ([String](../../sql-reference/data-types/)) — значение sipHash128 для несжатых файлов (файлов с метками, файла индекса и т. д.). -* `uncompressed_hash_of_compressed_files` ([String](../../sql-reference/data-types/)) — sipHash128 данных в сжатых файлах, как если бы они были распакованы. -* `delete_ttl_info_min` ([DateTime](../../sql-reference/data-types/)) — минимальное значение ключа даты и времени для правила TTL DELETE.` -* `delete_ttl_info_max` ([DateTime](../../sql-reference/data-types/)) — максимальное значение ключа даты и времени для правила DELETE TTL. -* `move_ttl_info.expression` ([Array(String)](../../sql-reference/data-types/)) — массив выражений. Каждое выражение определяет правило TTL MOVE. -* `move_ttl_info.min` ([Array(DateTime)](../../sql-reference/data-types/)) — массив значений даты и времени. Каждый элемент соответствует минимальному значению ключа для правила TTL MOVE. -* `move_ttl_info.max` ([Array(DateTime)](../../sql-reference/data-types/)) — массив значений типа DateTime. Каждый элемент задаёт максимальное значение ключа для правила TTL MOVE. -* `default_compression_codec` ([String](../../sql-reference/data-types/)) — Название кодека, который используется для сжатия этой части данных (если для столбцов не задан явный кодек). -* `recompression_ttl_info.expression` ([Array(String)](../../sql-reference/data-types/)) — выражение TTL. -* `recompression_ttl_info.min` ([Array(DateTime)](../../sql-reference/data-types/)) — минимальное значение вычисленного TTL-выражения в пределах данной части. Используется, чтобы определить, есть ли хотя бы одна строка с истёкшим TTL. -* `recompression_ttl_info.max` ([Array(DateTime)](../../sql-reference/data-types/)) — Максимальное значение вычисленного TTL-выражения в этой части. Используется, чтобы понять, содержатся ли в этой части все строки с истекшим TTL. -* `group_by_ttl_info.expression` ([Array(String)](../../sql-reference/data-types/)) — выражение TTL. -* `group_by_ttl_info.min` ([Array(DateTime)](../../sql-reference/data-types/)) — минимальное значение результата вычисления выражения TTL для данной части. Используется, чтобы определить, есть ли хотя бы одна строка с истекшим TTL. -* `group_by_ttl_info.max` ([Array(DateTime)](../../sql-reference/data-types/)) — максимальное значение рассчитанного TTL-выражения в данной части. Используется для определения, содержатся ли здесь все строки с истёкшим TTL.` -* `rows_where_ttl_info.expression` ([Array(String)](../../sql-reference/data-types/)) — выражение TTL. -* `rows_where_ttl_info.min` ([Array(DateTime)](../../sql-reference/data-types/)) — Наименьшее значение вычисленного выражения TTL в этой части. Используется для определения, есть ли хотя бы одна строка с истекшим TTL. -* `rows_where_ttl_info.max` ([Array(DateTime)](../../sql-reference/data-types/)) — максимальное значение вычисленного TTL-выражения в этой части. Используется, чтобы определить, содержатся ли здесь все строки с истекшим сроком действия TTL.` -* `is_broken` ([UInt8](../../sql-reference/data-types/)) — Повреждена ли часть проекции -* `exception_code` ([Int32](../../sql-reference/data-types/)) — Сообщение об исключении, объясняющее повреждённое состояние части проекции -* `exception` ([String](../../sql-reference/data-types/)) — Код исключения, объясняющий нарушенное состояние части проекции - {/*AUTOGENERATED_END*/ } diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/projection_parts_columns.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/projection_parts_columns.md index 30f31b47b2b..33b98063653 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/projection_parts_columns.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/projection_parts_columns.md @@ -1,72 +1,17 @@ --- description: 'Системная таблица, содержащая информацию о столбцах в частях проекций таблиц семейства MergeTree' -keywords: ['системная таблица', 'projection_parts_columns'] +keywords: ['system table', 'projection_parts_columns'] slug: /operations/system-tables/projection_parts_columns title: 'system.projection_parts_columns' doc_type: 'reference' --- - - # system.projection_parts_columns Эта таблица содержит информацию о столбцах частей проекций таблиц семейства MergeTree. +## Столбцы - -## Столбцы {#columns} - - - -{/*AUTOGENERATED_START*/ } - -* `partition` ([String](../../sql-reference/data-types/)) — Имя партиции. -* `name` ([String](../../sql-reference/data-types/)) — Название части данных. -* `part_type` ([String](../../sql-reference/data-types/)) — Формат хранения части данных. -* `parent_name` ([String](../../sql-reference/data-types/)) — Имя родительской (исходной) части данных. -* `parent_uuid` ([UUID](../../sql-reference/data-types/)) — UUID исходной (родительской) части данных. -* `parent_part_type` ([String](../../sql-reference/data-types/)) — Формат хранения исходной (родительской) части данных. -* `active` ([UInt8](../../sql-reference/data-types/)) — флаг, указывающий, активна ли часть данных -* `marks` ([UInt64](../../sql-reference/data-types/)) — Количество меток. -* `rows` ([UInt64](../../sql-reference/data-types/)) — Количество строк. -* `bytes_on_disk` ([UInt64](../../sql-reference/data-types/)) — общий объём всех файлов частей данных в байтах. -* `data_compressed_bytes` ([UInt64](../../sql-reference/data-types/)) — Общий размер сжатых данных в части данных. Все вспомогательные файлы (например, файлы с метками) не учитываются. -* `data_uncompressed_bytes` ([UInt64](../../sql-reference/data-types/)) — Общий размер несжатых данных в куске данных. Все вспомогательные файлы (например, файлы с метками) не учитываются. -* `marks_bytes` ([UInt64](../../sql-reference/data-types/)) — размер файла с метками. -* `parent_marks` ([UInt64](../../sql-reference/data-types/)) — Количество меток в исходной (родительской) части. -* `parent_rows` ([UInt64](../../sql-reference/data-types/)) — количество строк в исходной (родительской) части. -* `parent_bytes_on_disk` ([UInt64](../../sql-reference/data-types/)) — Общий размер всех файлов исходных (родительских) частей данных в байтах. -* `parent_data_compressed_bytes` ([UInt64](../../sql-reference/data-types/)) — Общий размер сжатых данных в исходной (родительской) части данных. -* `parent_data_uncompressed_bytes` ([UInt64](../../sql-reference/data-types/)) — Общий размер несжатых данных в исходной (родительской) части данных. -* `parent_marks_bytes` ([UInt64](../../sql-reference/data-types/)) — размер файла с метками в исходной (родительской) части данных. -* `modification_time` ([DateTime](../../sql-reference/data-types/)) — Время изменения каталога с частью данных. Обычно соответствует времени создания части данных. -* `remove_time` ([DateTime](../../sql-reference/data-types/)) — время, когда часть данных стала неактивной. -* `refcount` ([UInt32](../../sql-reference/data-types/)) — Количество мест, где используется часть данных. Значение больше 2 указывает на то, что часть данных задействована в запросах или операциях слияния. -* `min_date` ([Date](../../sql-reference/data-types/)) — Минимальное значение для столбца Date, если он включён в ключ партиционирования. -* `max_date` ([Date](../../sql-reference/data-types/)) — Максимальное значение для столбца типа Date, если он входит в ключ партиционирования. -* `min_time` ([DateTime](../../sql-reference/data-types/)) — Минимальное значение столбца DateTime, если он входит в ключ партиционирования. -* `max_time` ([DateTime](../../sql-reference/data-types/)) — максимальное значение столбца DateTime, если он включён в ключ партиционирования. -* `partition_id` ([String](../../sql-reference/data-types/)) — идентификатор партиции. -* `min_block_number` ([Int64](../../sql-reference/data-types/)) — минимальный номер части данных, из которых после слияния сформирована текущая часть.` -* `max_block_number` ([Int64](../../sql-reference/data-types/)) — Максимальное количество частей данных, образующих текущую часть после слияния.` -* `level` ([UInt32](../../sql-reference/data-types/)) — Глубина дерева слияний. Значение 0 означает, что текущая часть была создана вставкой, а не слиянием других частей. -* `data_version` ([UInt64](../../sql-reference/data-types/)) — число, которое используется для определения, какие мутации следует применить к части данных (мутации с версией выше значения data_version). -* `primary_key_bytes_in_memory` ([UInt64](../../sql-reference/data-types/)) — Объем памяти (в байтах), используемый для хранения значений первичного ключа. -* `primary_key_bytes_in_memory_allocated` ([UInt64](../../sql-reference/data-types/)) — объем памяти (в байтах), зарезервированный для значений первичного ключа. -* `database` ([String](../../sql-reference/data-types/)) — имя базы данных. -* `table` ([String](../../sql-reference/data-types/)) — Имя таблицы. -* `engine` ([String](../../sql-reference/data-types/)) — Название движка таблицы без параметров. -* `disk_name` ([String](../../sql-reference/data-types/)) — Имя диска, на котором хранится часть данных.` -* `path` ([String](../../sql-reference/data-types/)) — Абсолютный путь к каталогу с файлами частей данных. -* `column` ([String](../../sql-reference/data-types/)) — имя столбца. -* `type` ([String](../../sql-reference/data-types/)) — Тип столбца. -* `column_position` ([UInt64](../../sql-reference/data-types/)) — Порядковый номер столбца в таблице, начиная с 1. -* `default_kind` ([String](../../sql-reference/data-types/)) — Тип выражения значения по умолчанию (DEFAULT, MATERIALIZED, ALIAS) или пустая строка, если оно не определено. -* `default_expression` ([String](../../sql-reference/data-types/)) — выражение, задающее значение по умолчанию, или пустая строка, если оно не задано. -* `column_bytes_on_disk` ([UInt64](../../sql-reference/data-types/)) — Общий размер столбца на диске в байтах. -* `column_data_compressed_bytes` ([UInt64](../../sql-reference/data-types/)) — Общий объём сжатых данных в столбце, в байтах. -* `column_data_uncompressed_bytes` ([UInt64](../../sql-reference/data-types/)) — Общий размер несжатых данных в столбце, в байтах.` -* `column_marks_bytes` ([UInt64](../../sql-reference/data-types/)) — Размер столбца меток в байтах. -* `column_modification_time` ([Nullable(DateTime)](../../sql-reference/data-types/)) — Время последнего изменения столбца. +{/*AUTOGENERGED_START*/ } {/*AUTOGENERATED_END*/ } diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/projections.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/projections.md index 23317836cca..235f33940da 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/projections.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/projections.md @@ -1,13 +1,11 @@ --- -description: 'Системная таблица, содержащая информацию о имеющихся проекциях во всех таблицах.' +description: 'Системная таблица, содержащая информацию о существующих проекциях всех таблиц.' keywords: ['системная таблица', 'проекции'] slug: /operations/system-tables/projections title: 'system.projections' doc_type: 'reference' --- - - # system.projections Содержит информацию о существующих проекциях во всех таблицах. @@ -16,13 +14,6 @@ doc_type: 'reference' {/*AUTOGENERATED_START*/ } -* `database` ([String](../../sql-reference/data-types/)) — имя базы данных. -* `table` ([String](../../sql-reference/data-types/)) — имя таблицы. -* `name` ([String](../../sql-reference/data-types/)) — имя проекции. -* `type` ([Enum8('Normal' = 0, 'Aggregate' = 1)](../../sql-reference/data-types/)) — тип проекции. -* `sorting_key` ([Array(String)](../../sql-reference/data-types/)) — ключ сортировки проекции. -* `query` ([String](../../sql-reference/data-types/)) — запрос проекции. - {/*AUTOGENERATED_END*/ } **Пример** @@ -33,7 +24,7 @@ SELECT * FROM system.projections LIMIT 2 FORMAT Vertical; ```text Строка 1: -────── +───────── database: default table: landing name: improved_sorting_key @@ -42,7 +33,7 @@ sorting_key: ['user_id','date'] query: SELECT * ORDER BY user_id, date Строка 2: -────── +───────── database: default table: landing name: agg_no_key diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/query_cache.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/query_cache.md index b59d3f9858a..a7e1770c397 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/query_cache.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/query_cache.md @@ -13,21 +13,11 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -Отображает содержимое [кэша запросов](../query-cache.md). +Показывает содержимое [кэша запросов](../query-cache.md). Столбцы: -{/*AUTOGENERATED_START*/ } - -* `query` ([String](../../sql-reference/data-types/)) — Строка запроса. -* `query_id` ([String](../../sql-reference/data-types/)) — Идентификатор запроса. -* `result_size` ([UInt64](../../sql-reference/data-types/)) — Размер элемента кэша запросов. -* `tag` ([LowCardinality(String)](../../sql-reference/data-types/)) — Тег элемента кэша запросов. -* `stale` ([UInt8](../../sql-reference/data-types/)) — Является ли элемент кэша запросов устаревшим. -* `shared` ([UInt8](../../sql-reference/data-types/)) — Является ли элемент кэша запросов разделяемым между несколькими пользователями. -* `compressed` ([UInt8](../../sql-reference/data-types/)) — Является ли элемент кэша запросов сжатым. -* `expires_at` ([DateTime](../../sql-reference/data-types/)) — Момент, когда элемент кэша запросов становится устаревшим. -* `key_hash` ([UInt64](../../sql-reference/data-types/)) — Хеш строки запроса, используемый как ключ для поиска элементов кэша запросов. +{/*AUTOGENERGED_START*/ } {/*AUTOGENERATED_END*/ } @@ -50,5 +40,5 @@ compressed: 1 expires_at: 2023-10-13 13:35:45 key_hash: 12188185624808016954 -Получена 1 строка. Время выполнения: 0.004 сек. +Получена 1 строка. Затрачено: 0.004 сек. ``` diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/query_condition_cache.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/query_condition_cache.md index 3f620bf04f3..c94260d4d6e 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/query_condition_cache.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/query_condition_cache.md @@ -1,6 +1,6 @@ --- -description: 'Системная таблица, отображающая содержимое кэша условий запроса.' -keywords: ['system table', 'query_condition_cache'] +description: 'Системная таблица, которая отображает содержимое кэша условий запроса.' +keywords: ['системная таблица', 'query_condition_cache'] slug: /operations/system-tables/query_condition_cache title: 'system.query_condition_cache' doc_type: 'reference' @@ -13,19 +13,12 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -Показывает содержимое [кэша условий запроса](../query-condition-cache.md). +Отображает содержимое [кэша условий запросов](../query-condition-cache.md). Столбцы: {/*AUTOGENERATED_START*/ } -* `table_uuid` ([UUID](../../sql-reference/data-types/)) — UUID таблицы. -* `part_name` ([String](../../sql-reference/data-types/)) — Имя части. -* `condition` ([String](../../sql-reference/data-types/)) — Хешированное условие фильтрации. Задаётся только если настройка query_condition_cache_store_conditions_as_plaintext = true. -* `condition_hash` ([UInt64](../../sql-reference/data-types/)) — Хеш условия фильтрации. -* `entry_size` ([UInt64](../../sql-reference/data-types/)) — Размер записи в байтах. -* `matching_marks` ([String](../../sql-reference/data-types/)) — Совпадающие метки. - {/*AUTOGENERATED_END*/ } **Пример** @@ -44,5 +37,5 @@ condition_hash: 5456494897146899690 -- 5.46 quintillion entry_size: 40 matching_marks: 111111110000000000000000000000000000000000000000000000000111111110000000000000000 -Получена 1 строка. Время выполнения: 0.004 сек. +Получена 1 строка. Затрачено: 0.004 сек. ``` diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/quota_usage.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/quota_usage.md index a945ab60f72..449ad52a936 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/quota_usage.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/quota_usage.md @@ -1,6 +1,6 @@ --- -description: 'Системная таблица, содержащая информацию об использовании квоты текущим пользователем: какая часть квоты уже израсходована и сколько ещё осталось.' -keywords: ['system table', 'quota_usage'] +description: 'Системная таблица, содержащая информацию об использовании квоты текущим пользователем, например о том, сколько квоты уже использовано и сколько осталось.' +keywords: ['системная таблица', 'quota_usage'] slug: /operations/system-tables/quota_usage title: 'system.quota_usage' doc_type: 'reference' @@ -10,44 +10,15 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -Использование квоты текущим пользователем: сколько использовано и сколько осталось. - +Использование квоты для текущего пользователя: сколько уже использовано и сколько осталось. Столбцы: {/*AUTOGENERATED_START*/ } -* `quota_name` ([String](../../sql-reference/data-types/)) — Имя квоты. -* `quota_key` ([String](../../sql-reference/data-types/)) — Значение ключа. -* `start_time` ([Nullable(DateTime)](../../sql-reference/data-types/)) — Время начала расчёта потребления ресурсов. -* `end_time` ([Nullable(DateTime)](../../sql-reference/data-types/)) — Время окончания расчёта потребления ресурсов. -* `duration` ([Nullable(UInt32)](../../sql-reference/data-types/)) — Длительность интервала для расчёта потребления ресурсов, в секундах. -* `queries` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Текущее количество выполненных запросов. -* `max_queries` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Максимально допустимое количество запросов всех типов, которые можно выполнить. -* `query_selects` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Текущее количество выполненных запросов SELECT. -* `max_query_selects` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Максимально допустимое количество запросов SELECT, которые можно выполнить. -* `query_inserts` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Текущее количество выполненных запросов INSERT. -* `max_query_inserts` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Максимально допустимое количество запросов INSERT, которые можно выполнить. -* `errors` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Текущее количество запросов, завершившихся с ошибкой. -* `max_errors` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Максимальное количество запросов, завершившихся с ошибкой, допускаемое в указанный период времени. -* `result_rows` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Текущее общее количество строк в результирующем наборе всех запросов за текущий период времени. -* `max_result_rows` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Максимальное общее количество строк в результирующем наборе всех запросов, допускаемое в указанный период времени. -* `result_bytes` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Текущее общее количество байт в результирующем наборе всех запросов за текущий период времени. -* `max_result_bytes` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Максимальное общее количество байт в результирующем наборе всех запросов, допускаемое в указанный период времени. -* `read_rows` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Текущее общее количество строк, прочитанных при выполнении всех запросов за текущий период времени. -* `max_read_rows` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Максимальное количество строк, которые можно прочитать при выполнении всех запросов в указанный период времени. -* `read_bytes` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Текущее общее количество байт, прочитанных при выполнении всех запросов за текущий период времени. -* `max_read_bytes` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Максимальное количество байт, которые можно прочитать при выполнении всех запросов в указанный период времени. -* `execution_time` ([Nullable(Float64)](../../sql-reference/data-types/)) — Текущее суммарное время (в наносекундах), затраченное на выполнение запросов за текущий период времени. -* `max_execution_time` ([Nullable(Float64)](../../sql-reference/data-types/)) — Максимальное время (в наносекундах), разрешённое на выполнение всех запросов в указанный период времени. -* `written_bytes` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Текущее общее количество байт, записанных при выполнении всех запросов за текущий период времени. -* `max_written_bytes` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Максимальное количество байт, которые можно записать при выполнении всех запросов в указанный период времени. -* `failed_sequential_authentications` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Текущее количество последовательных неудачных попыток аутентификации за текущий период времени. -* `max_failed_sequential_authentications` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Максимальное количество последовательных неудачных попыток аутентификации, допускаемое в указанный период времени. - {/*AUTOGENERATED_END*/ } ## См. также {#see-also} -- [SHOW QUOTA](/sql-reference/statements/show#show-quota)) +- [SHOW QUOTA](/sql-reference/statements/show#show-quota)) \ No newline at end of file diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/quotas_usage.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/quotas_usage.md index 9ca5092ef76..5f0398a4dc5 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/quotas_usage.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/quotas_usage.md @@ -13,44 +13,15 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -Использование квот всеми пользователями. +Использование квот по всем пользователям. Столбцы: {/*AUTOGENERATED_START*/ } -* `quota_name` ([String](../../sql-reference/data-types/)) — Имя квоты. -* `quota_key` ([String](../../sql-reference/data-types/)) — Значение ключа. -* `is_current` ([UInt8](../../sql-reference/data-types/)) — Признак использования квоты текущим пользователем. -* `start_time` ([Nullable(DateTime)](../../sql-reference/data-types/)) — Время начала расчёта потребления ресурсов. -* `end_time` ([Nullable(DateTime)](../../sql-reference/data-types/)) — Время окончания расчёта потребления ресурсов. -* `duration` ([Nullable(UInt32)](../../sql-reference/data-types/)) — Длительность временного интервала для расчёта потребления ресурсов в секундах. -* `queries` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Текущее количество выполненных запросов. -* `max_queries` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Максимально допустимое количество запросов всех типов, разрешённых к выполнению. -* `query_selects` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Текущее количество выполненных запросов SELECT. -* `max_query_selects` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Максимально допустимое количество запросов SELECT, разрешённых к выполнению. -* `query_inserts` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Текущее количество выполненных запросов INSERT. -* `max_query_inserts` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Максимально допустимое количество запросов INSERT, разрешённых к выполнению. -* `errors` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Текущее количество запросов, завершившихся ошибкой. -* `max_errors` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Максимальное количество запросов, завершившихся ошибкой, разрешённое в заданный период времени. -* `result_rows` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Текущее общее количество строк в результирующих наборах всех запросов в текущий период времени. -* `max_result_rows` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Максимально допустимое общее количество строк в результирующих наборах всех запросов в заданный период времени. -* `result_bytes` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Текущее общее количество байт в результирующих наборах всех запросов в текущий период времени. -* `max_result_bytes` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Максимально допустимое общее количество байт в результирующих наборах всех запросов в заданный период времени. -* `read_rows` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Текущее общее количество строк, прочитанных при выполнении всех запросов в текущий период времени. -* `max_read_rows` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Максимальное количество строк, разрешённое к чтению при выполнении всех запросов в заданный период времени. -* `read_bytes` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Текущее общее количество байт, прочитанных при выполнении всех запросов в текущий период времени. -* `max_read_bytes` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Максимальное количество байт, разрешённое к чтению при выполнении всех запросов в заданный период времени. -* `execution_time` ([Nullable(Float64)](../../sql-reference/data-types/)) — Текущее суммарное время (в наносекундах), затраченное на выполнение запросов в текущий период времени. -* `max_execution_time` ([Nullable(Float64)](../../sql-reference/data-types/)) — Максимально допустимое время (в наносекундах), отведённое на выполнение всех запросов в заданный период времени. -* `written_bytes` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Текущее общее количество байт, записанных при выполнении всех запросов в текущий период времени. -* `max_written_bytes` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Максимальное количество байт, разрешённое к записи при выполнении всех запросов в заданный период времени. -* `failed_sequential_authentications` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Текущее количество последовательных неудачных попыток аутентификации в текущий период времени. -* `max_failed_sequential_authentications` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Максимальное количество последовательных неудачных попыток аутентификации, разрешённое в заданный период времени. - {/*AUTOGENERATED_END*/ } ## См. также {#see-also} -- [SHOW QUOTA](/sql-reference/statements/show#show-quota) +- [SHOW QUOTA](/sql-reference/statements/show#show-quota)) \ No newline at end of file diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/replicated_fetches.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/replicated_fetches.md index 15933a662c6..db46fae0d12 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/replicated_fetches.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/replicated_fetches.md @@ -1,6 +1,6 @@ --- -description: 'Системная таблица, содержащая информацию о выполняющихся в данный момент фоновых операциях загрузки данных.' -keywords: ['system table', 'replicated_fetches'] +description: 'Системная таблица, содержащая информацию о текущих фоновых операциях выборки данных.' +keywords: ['системная таблица', 'replicated_fetches'] slug: /operations/system-tables/replicated_fetches title: 'system.replicated_fetches' doc_type: 'reference' @@ -19,23 +19,6 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; {/*AUTOGENERATED_START*/ } -* `database` ([String](../../sql-reference/data-types/)) — Имя базы данных. -* `table` ([String](../../sql-reference/data-types/)) — Имя таблицы. -* `elapsed` ([Float64](../../sql-reference/data-types/)) — Время (в секундах), прошедшее с момента запуска текущей фоновой операции выборки. -* `progress` ([Float64](../../sql-reference/data-types/)) — Доля выполненной работы от 0 до 1. -* `result_part_name` ([String](../../sql-reference/data-types/)) — Имя части, которая будет сформирована в результате текущей фоновой операции выборки. -* `result_part_path` ([String](../../sql-reference/data-types/)) — Абсолютный путь к части, которая будет сформирована в результате текущей фоновой операции выборки. -* `partition_id` ([String](../../sql-reference/data-types/)) — Идентификатор партиции. -* `total_size_bytes_compressed` ([UInt64](../../sql-reference/data-types/)) — Общий размер (в байтах) сжатых данных в результирующей части. -* `bytes_read_compressed` ([UInt64](../../sql-reference/data-types/)) — Количество сжатых байт, прочитанных из результирующей части. -* `source_replica_path` ([String](../../sql-reference/data-types/)) — Абсолютный путь к исходной реплике. -* `source_replica_hostname` ([String](../../sql-reference/data-types/)) — Имя хоста исходной реплики. -* `source_replica_port` ([UInt16](../../sql-reference/data-types/)) — Номер порта исходной реплики. -* `interserver_scheme` ([String](../../sql-reference/data-types/)) — Имя межсерверной схемы. -* `URI` ([String](../../sql-reference/data-types/)) — Унифицированный идентификатор ресурса. -* `to_detached` ([UInt8](../../sql-reference/data-types/)) — Флаг, указывающий, выполняется ли текущая фоновая операция выборки с использованием выражения TO DETACHED. -* `thread_id` ([UInt64](../../sql-reference/data-types/)) — Идентификатор потока. - {/*AUTOGENERATED_END*/ } **Пример** diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/resources.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/resources.md index 401ad1aeeb3..97ea255e2fc 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/resources.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/resources.md @@ -1,17 +1,15 @@ --- description: 'Системная таблица, содержащая информацию о ресурсах, находящихся на - локальном сервере; для каждого ресурса — по одной строке.' + локальном сервере; по одной строке на каждый ресурс.' keywords: ['системная таблица', 'ресурсы'] slug: /operations/system-tables/resources title: 'system.resources' doc_type: 'reference' --- - - # system.resources -Содержит информацию о [ресурсах](/operations/workload-scheduling.md#workload_entity_storage), находящихся на локальном сервере. В таблице по одной строке на каждый ресурс. +Содержит информацию о [ресурсах](/operations/workload-scheduling.md#workload_entity_storage), размещённых на локальном сервере. В таблице — по одной строке на каждый ресурс. Пример: @@ -41,10 +39,4 @@ create_query: CREATE RESOURCE io_write (WRITE DISK s3) {/*AUTOGENERATED_START*/ } -* `name` ([String](../../sql-reference/data-types/)) — Имя ресурса. -* `read_disks` ([Array(String)](../../sql-reference/data-types/)) — Список имен дисков, которые используют этот ресурс для операций чтения. -* `write_disks` ([Array(String)](../../sql-reference/data-types/)) — Список имен дисков, которые используют этот ресурс для операций записи. -* `unit` ([String](../../sql-reference/data-types/)) — Единица ресурса, используемая для расчета стоимости. -* `create_query` ([String](../../sql-reference/data-types/)) — Запрос CREATE для создания ресурса. - {/*AUTOGENERATED_END*/ } diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/roles.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/roles.md index b18346bc1ba..6bf3a774e0c 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/roles.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/roles.md @@ -1,13 +1,11 @@ --- -description: 'Системная таблица, содержащая информацию о настроенных ролях.' +description: 'Системная таблица, содержащая информацию о сконфигурированных ролях.' keywords: ['системная таблица', 'роли'] slug: /operations/system-tables/roles title: 'system.roles' doc_type: 'reference' --- - - # system.roles Содержит информацию о настроенных [ролях](../../guides/sre/user-management/index.md#role-management). @@ -16,13 +14,9 @@ doc_type: 'reference' {/*AUTOGENERATED_START*/ } -* `name` ([String](../../sql-reference/data-types/)) — Имя роли. -* `id` ([UUID](../../sql-reference/data-types/)) — Идентификатор роли. -* `storage` ([String](../../sql-reference/data-types/)) — Путь к хранилищу ролей. Настраивается параметром `access_control_path`. - {/*AUTOGENERATED_END*/ } ## См. также {#see-also} -- [SHOW ROLES](/sql-reference/statements/show#show-roles) +- [SHOW ROLES](/sql-reference/statements/show#show-roles) \ No newline at end of file diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/row_policies.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/row_policies.md index 0967d5b689d..385d5958408 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/row_policies.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/row_policies.md @@ -1,36 +1,23 @@ --- -description: 'Системная таблица, содержащая фильтры для одной таблицы, а также список ролей и/или пользователей, к которым применяется данная политика строк.' +description: 'Системная таблица, содержащая фильтры для одной таблицы, а также + список ролей и/или пользователей, для которых применяется эта политика на уровне строк.' keywords: ['системная таблица', 'row_policies'] slug: /operations/system-tables/row_policies title: 'system.row_policies' doc_type: 'reference' --- - - # system.row_policies -Содержит фильтры для одной определённой таблицы, а также список ролей и/или пользователей, которые должны использовать эту политику строк. +Содержит фильтры для одной таблицы, а также список ролей и/или пользователей, для которых применяется эта политика строк. Столбцы: {/*AUTOGENERATED_START*/ } -* `name` ([String](../../sql-reference/data-types/)) — Имя политики строк. -* `short_name` ([String](../../sql-reference/data-types/)) — Краткое имя политики строк. Имена политик строк составные, например: myfilter ON mydb.mytable. Здесь 'myfilter ON mydb.mytable' — это имя политики строк, 'myfilter' — её краткое имя. -* `database` ([String](../../sql-reference/data-types/)) — Имя базы данных. -* `table` ([String](../../sql-reference/data-types/)) — Имя таблицы. Пустое, если политика задана для базы данных. -* `id` ([UUID](../../sql-reference/data-types/)) — Идентификатор политики строк. -* `storage` ([String](../../sql-reference/data-types/)) — Имя каталога, в котором хранится политика строк. -* `select_filter` ([Nullable(String)](../../sql-reference/data-types/)) — Выражение, используемое для фильтрации в запросах SELECT. -* `is_restrictive` ([UInt8](../../sql-reference/data-types/)) — Показывает, ограничивает ли политика строк доступ к строкам. Значения: • 0 — политика строк определена с указанием `AS PERMISSIVE`, • 1 — политика строк определена с указанием `AS RESTRICTIVE`. -* `apply_to_all` ([UInt8](../../sql-reference/data-types/)) — Показывает, что политика строк задана для всех ролей и/или пользователей. -* `apply_to_list` ([Array(String)](../../sql-reference/data-types/)) — Список ролей и/или пользователей, к которым применяется политика строк. -* `apply_to_except` ([Array(String)](../../sql-reference/data-types/)) — Политика строк применяется ко всем ролям и/или пользователям, за исключением перечисленных. - {/*AUTOGENERATED_END*/ } ## См. также {#see-also} -- [SHOW POLICIES](/sql-reference/statements/show#show-policies) +- [SHOW POLICIES](/sql-reference/statements/show#show-policies) \ No newline at end of file diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/s3_queue_settings.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/s3_queue_settings.md index b47eb385487..c8b9fa29c87 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/s3_queue_settings.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/s3_queue_settings.md @@ -1,29 +1,18 @@ --- description: 'Системная таблица, содержащая информацию о настройках таблиц S3Queue. - Доступна начиная с версии сервера `24.10`.' + Доступна, начиная с версии сервера `24.10`.' keywords: ['системная таблица', 's3_queue_settings'] slug: /operations/system-tables/s3_queue_settings title: 'system.s3_queue_settings' doc_type: 'reference' --- - - # system.s3_queue_settings -Содержит информацию о настройках таблиц [S3Queue](../../engines/table-engines/integrations/s3queue.md). Доступно, начиная с версии сервера `24.10`. +Содержит сведения о настройках таблиц [S3Queue](../../engines/table-engines/integrations/s3queue.md). Эта системная таблица доступна начиная с версии сервера `24.10`. Столбцы: {/*AUTOGENERATED_START*/ } -* `database` ([String](../../sql-reference/data-types/)) — База данных таблицы с движком S3Queue. -* `table` ([String](../../sql-reference/data-types/)) — Имя таблицы с движком S3Queue. -* `name` ([String](../../sql-reference/data-types/)) — Имя настройки. -* `value` ([String](../../sql-reference/data-types/)) — Значение настройки. -* `type` ([String](../../sql-reference/data-types/)) — Тип настройки (строковое значение, зависящее от реализации). -* `changed` ([UInt8](../../sql-reference/data-types/)) — 1, если настройка была явно задана в конфигурации или явно изменена. -* `description` ([String](../../sql-reference/data-types/)) — Описание настройки. -* `alterable` ([UInt8](../../sql-reference/data-types/)) — Показывает, может ли текущий пользователь изменить настройку с помощью ALTER TABLE MODIFY SETTING: 0 — текущий пользователь может изменить настройку, 1 — текущий пользователь не может изменить настройку. - -{/*КОНЕЦ_АВТОГЕНЕРАЦИИ*/ } +{/*AUTOGENERATED_END*/ } diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/scheduler.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/scheduler.md index 0eafec40add..2d6fc2a8bc6 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/scheduler.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/scheduler.md @@ -1,6 +1,6 @@ --- -description: 'Системная таблица, содержащая информацию об узлах планировщика и их состоянии на локальном сервере.' -keywords: ['system table', 'scheduler'] +description: 'Системная таблица, содержащая информацию о состоянии узлов планировщика, находящихся на локальном сервере.' +keywords: ['системная таблица', 'планировщик'] slug: /operations/system-tables/scheduler title: 'system.scheduler' doc_type: 'reference' @@ -13,8 +13,8 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -Содержит сведения об [узлах планировщика](/operations/workload-scheduling.md/#hierarchy), находящихся на локальном сервере, и их состоянии. -Эту таблицу можно использовать для мониторинга. Таблица содержит по одной строке для каждого узла планировщика. +Содержит сведения об [узлах планировщика](/operations/workload-scheduling.md/#hierarchy) на локальном сервере и их состоянии. +Эту таблицу можно использовать для мониторинга. Таблица содержит по одной строке на каждый узел планировщика. Пример: @@ -58,35 +58,6 @@ tokens: ᴺᵁᴸᴸ Столбцы: - {/*AUTOGENERATED_START*/ } -* `resource` ([String](../../sql-reference/data-types/)) — Имя ресурса -* `path` ([String](../../sql-reference/data-types/)) — Путь к узлу планирования в иерархии планирования ресурсов -* `type` ([String](../../sql-reference/data-types/)) — Тип узла планировщика. -* `weight` ([Float64](../../sql-reference/data-types/)) — Вес узла, который используется родительским узлом типа `fair`. -* `priority` ([Int64](../../sql-reference/data-types/)) — Приоритет узла, который используется родительским узлом типа 'priority' (меньшее значение соответствует более высокому приоритету). -* `is_active` ([UInt8](../../sql-reference/data-types/)) — Активен ли этот узел в данный момент: есть ли у него запросы на ресурсы, подлежащие выборке из очереди, и выполнены ли ограничения. -* `active_children` ([UInt64](../../sql-reference/data-types/)) — Количество дочерних элементов в активном состоянии. -* `dequeued_requests` ([UInt64](../../sql-reference/data-types/)) — Общее количество запросов ресурсов, извлечённых из очереди на этом узле. -* `canceled_requests` ([UInt64](../../sql-reference/data-types/)) — Общее количество запросов ресурсов, отменённых на этом узле. -* `dequeued_cost` ([Int64](../../sql-reference/data-types/)) — суммарная стоимость (например, размер в байтах) всех запросов, извлечённых из очереди на этом узле. -* `throughput` ([Float64](../../sql-reference/data-types/)) — Текущая средняя пропускная способность (стоимость элементов, извлекаемых из очереди в секунду). -* `canceled_cost` ([Int64](../../sql-reference/data-types/)) — суммарная стоимость (например, размер в байтах) всех запросов, отменённых на этом узле. -* `busy_periods` ([UInt64](../../sql-reference/data-types/)) — Общее количество деактиваций этого узла. -* `vruntime` ([Nullable(Float64)](../../sql-reference/data-types/)) — Только для дочерних узлов `fair`. Виртуальное время выполнения узла, используемое алгоритмом SFQ для выбора следующего дочернего узла для обработки с max-min-справедливостью. -* `system_vruntime` ([Nullable(Float64)](../../sql-reference/data-types/)) — Только для узлов `fair`. Виртуальное время, показывающее значение `vruntime` для последнего обработанного запроса на ресурс. Используется при активации дочернего элемента как новое значение `vruntime`. -* `queue_length` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Только для узлов типа `fifo`. Текущее число запросов к ресурсам в очереди. -* `queue_cost` ([Nullable(Int64)](../../sql-reference/data-types/)) — Только для узлов FIFO. Суммарная стоимость (например, по размеру в байтах) всех запросов, находящихся в очереди. -* `budget` ([Nullable(Int64)](../../sql-reference/data-types/)) — Только для FIFO-узлов. Количество доступных «единиц стоимости» для новых запросов ресурсов. Может появиться в случае расхождения между оценочной и фактической стоимостью запросов ресурсов (например, после ошибки чтения/записи). -* `is_satisfied` ([Nullable(UInt8)](../../sql-reference/data-types/)) — только для узлов-ограничений (например, `inflight_limit`). Принимает значение `1`, если все ограничения для этого узла выполняются. -* `inflight_requests` ([Nullable(Int64)](../../sql-reference/data-types/)) — Только для узлов `inflight_limit`. Количество ресурсных запросов, извлечённых из очереди этого узла и находящихся в состоянии обработки. -* `inflight_cost` ([Nullable(Int64)](../../sql-reference/data-types/)) — Только для узлов `inflight_limit`. Суммарная стоимость (например, в байтах) всех запросов ресурсов, извлечённых из этого узла, которые в данный момент находятся в состоянии потребления. -* `max_requests` ([Nullable(Int64)](../../sql-reference/data-types/)) — Только для узлов `inflight_limit`. Верхний предел числа inflight_requests, при превышении которого нарушается ограничение. -* `max_cost` ([Nullable(Int64)](../../sql-reference/data-types/)) — только для узлов `inflight_limit`. Верхняя граница значения `inflight_cost`, при превышении которой нарушается ограничение. -* `max_speed` ([Nullable(Float64)](../../sql-reference/data-types/)) — только для узлов типа `bandwidth_limit`. Верхний предел скорости в токенах в секунду. -* `max_burst` ([Nullable(Float64)](../../sql-reference/data-types/)) — Только для узлов `bandwidth_limit`. Верхний предел количества токенов, доступных в ограничителе скорости типа token bucket. -* `throttling_us` ([Nullable(Int64)](../../sql-reference/data-types/)) — Только для узлов `bandwidth_limit`. Общее число микросекунд, в течение которых этот узел находился в состоянии ограничения пропускной способности (throttling). -* `tokens` ([Nullable(Float64)](../../sql-reference/data-types/)) — только для узлов `bandwidth_limit`. Количество токенов, доступных в данный момент в ограничителе скорости (token bucket). - {/*AUTOGENERATED_END*/ } diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/schema_inference_cache.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/schema_inference_cache.md index 6812f82a29d..4d3514f5138 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/schema_inference_cache.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/schema_inference_cache.md @@ -13,21 +13,12 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -Содержит информацию обо всех схемах файлов, находящихся в кэше. +Содержит информацию обо всех кэшированных схемах файлов. Столбцы: {/*AUTOGENERATED_START*/ } -* `storage` ([String](../../sql-reference/data-types/)) — Имя хранилища: File, URL, S3 или HDFS. -* `source` ([String](../../sql-reference/data-types/)) — Источник файла. -* `format` ([String](../../sql-reference/data-types/)) — Имя формата. -* `additional_format_info` ([String](../../sql-reference/data-types/)) — Дополнительная информация, необходимая для идентификации схемы. Например, настройки, специфичные для формата. -* `registration_time` ([DateTime](../../sql-reference/data-types/)) — Время, когда схема была добавлена в кэш. -* `schema` ([Nullable(String)](../../sql-reference/data-types/)) — Схема в кэше. -* `number_of_rows` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Количество строк в файле в заданном формате. Используется для кэширования простого count() по данным файлов и для кэширования количества строк из метаданных при выводе схемы. -* `schema_inference_mode` ([Nullable(String)](../../sql-reference/data-types/)) — Режим вывода схемы. - {/*AUTOGENERATED_END*/ } **Пример** @@ -38,7 +29,7 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; {"id" : 1, "age" : 25, "name" : "Josh", "hobbies" : ["футбол", "кулинария", "музыка"]} {"id" : 2, "age" : 19, "name" : "Alan", "hobbies" : ["теннис", "искусство"]} {"id" : 3, "age" : 32, "name" : "Lana", "hobbies" : ["фитнес", "чтение", "шопинг"]} -{"id" : 4, "age" : 47, "name" : "Brayan", "hobbies" : ["кино", "парашютный спорт"]} +{"id" : 4, "age" : 47, "name" : "Brayan", "hobbies" : ["кино", "прыжки с парашютом"]} ``` :::tip @@ -65,7 +56,7 @@ DESCRIBE file('data.jsonl') SETTINGS input_format_try_infer_integers=0; └─────────┴─────────────────────────┴──────────────┴────────────────────┴─────────┴──────────────────┴────────────────┘ ``` -Посмотрим на содержимое таблицы `system.schema_inference_cache`: +Давайте посмотрим на содержимое таблицы `system.schema_inference_cache`: ```sql SELECT * @@ -86,4 +77,4 @@ schema: id Nullable(Float64), age Nullable(Float64), name Nullab **См. также** -* [Автоматическое определение схемы по входным данным](/interfaces/schema-inference.md) +* [Автоматический вывод схемы по входным данным](/interfaces/schema-inference.md) diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/settings_changes.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/settings_changes.md index f477bf4663e..4ad59d82908 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/settings_changes.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/settings_changes.md @@ -1,13 +1,11 @@ --- description: 'Системная таблица, содержащая информацию об изменениях настроек в предыдущих версиях ClickHouse.' -keywords: ['system table', 'settings_changes'] +keywords: ['системная таблица', 'settings_changes'] slug: /operations/system-tables/settings_changes title: 'system.settings_changes' doc_type: 'reference' --- - - # system.settings_changes Содержит информацию об изменениях настроек в предыдущих версиях ClickHouse. @@ -16,10 +14,6 @@ doc_type: 'reference' {/*AUTOGENERATED_START*/ } -* `type` ([Enum8('Session' = 0, 'MergeTree' = 1)](../../sql-reference/data-types/)) — Группа настроек (Session, MergeTree...) -* `version` ([String](../../sql-reference/data-types/)) — Версия сервера ClickHouse. -* `changes` ([Array(Tuple(name String, previous_value String, new_value String, reason String))](../../sql-reference/data-types/)) — Список изменений в настройках, которые привели к изменению поведения ClickHouse. - {/*AUTOGENERATED_END*/ } **Пример** @@ -36,7 +30,7 @@ Row 1: ────── type: Core version: 23.5 -changes: [('input_format_parquet_preserve_order','1','0','Позволяет читателю Parquet изменять порядок строк для улучшения параллелизма.'),('parallelize_output_from_storages','0','1','Позволяет использовать параллелизм при выполнении запросов, читающих данные из file/url/s3/и т. д. Может изменить порядок строк.'),('use_with_fill_by_sorting_prefix','0','1','Столбцы, предшествующие столбцам WITH FILL в предложении ORDER BY, формируют префикс сортировки. Строки с разными значениями в префиксе сортировки заполняются независимо'),('output_format_parquet_compliant_nested_types','0','1','Изменяет имя внутреннего поля в схеме выходного файла Parquet.')] +changes: [('input_format_parquet_preserve_order','1','0','Позволяет читателю Parquet переупорядочивать строки для улучшения параллелизма.'),('parallelize_output_from_storages','0','1','Позволяет использовать параллелизм при выполнении запросов, читающих данные из file/url/s3/и т. д. Может привести к переупорядочиванию строк.'),('use_with_fill_by_sorting_prefix','0','1','Столбцы, предшествующие столбцам WITH FILL в предложении ORDER BY, формируют префикс сортировки. Строки с различными значениями в префиксе сортировки заполняются независимо'),('output_format_parquet_compliant_nested_types','0','1','Изменяет внутреннее имя поля в схеме выходного файла Parquet.')] ``` **См. также** diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/settings_profile_elements.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/settings_profile_elements.md index 965f86923b0..5ab77079334 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/settings_profile_elements.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/settings_profile_elements.md @@ -1,13 +1,12 @@ --- -description: 'Системная таблица, описывающая содержимое профиля настроек: ограничения, роли и пользователей, к которым применяется данная настройка, а также родительские профили настроек.' +description: 'Системная таблица, описывающая содержимое профиля настроек: ограничения, + роли и пользователей, к которым применяются эти настройки, а также родительские профили настроек.' keywords: ['системная таблица', 'settings_profile_elements'] slug: /operations/system-tables/settings_profile_elements title: 'system.settings_profile_elements' doc_type: 'reference' --- - - # system.settings_profile_elements Описывает содержимое профиля настроек: @@ -20,15 +19,4 @@ doc_type: 'reference' {/*AUTOGENERATED_START*/ } -* `profile_name` ([Nullable(String)](../../sql-reference/data-types/)) — Имя профиля настроек. -* `user_name` ([Nullable(String)](../../sql-reference/data-types/)) — Имя пользователя. -* `role_name` ([Nullable(String)](../../sql-reference/data-types/)) — Имя роли. -* `index` ([UInt64](../../sql-reference/data-types/)) — Порядковый номер элемента профиля настроек. -* `setting_name` ([Nullable(String)](../../sql-reference/data-types/)) — Имя настройки. -* `value` ([Nullable(String)](../../sql-reference/data-types/)) — Значение настройки. -* `min` ([Nullable(String)](../../sql-reference/data-types/)) — Минимальное значение настройки. NULL, если не задано. -* `max` ([Nullable(String)](../../sql-reference/data-types/)) — Максимальное значение настройки. NULL, если не задано. -* `writability` ([Nullable(Enum8('WRITABLE' = 0, 'CONST' = 1, 'CHANGEABLE_IN_READONLY' = 2))](../../sql-reference/data-types/)) — Свойство, которое показывает, можно ли изменить настройку. -* `inherit_profile` ([Nullable(String)](../../sql-reference/data-types/)) — Родительский профиль для этого профиля настроек. NULL, если не задан. Профиль настроек наследует все значения настроек и ограничения (min, max, readonly) от родительских профилей. - {/*AUTOGENERATED_END*/ } diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/settings_profiles.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/settings_profiles.md index 115169f835f..2999730f26d 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/settings_profiles.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/settings_profiles.md @@ -1,32 +1,22 @@ --- -description: 'Системная таблица, содержащая свойства определённых профилей настроек.' -keywords: ['system table', 'settings_profiles'] +description: 'Системная таблица, содержащая свойства настроенных профилей настроек.' +keywords: ['системная таблица', 'settings_profiles'] slug: /operations/system-tables/settings_profiles title: 'system.settings_profiles' doc_type: 'reference' --- - - # system.settings_profiles -Содержит свойства определённых профилей настроек. +Содержит свойства сконфигурированных профилей настроек. Столбцы: {/*AUTOGENERATED_START*/ } -* `name` ([String](../../sql-reference/data-types/)) — Имя профиля настроек. -* `id` ([UUID](../../sql-reference/data-types/)) — Идентификатор профиля настроек. -* `storage` ([String](../../sql-reference/data-types/)) — Путь к хранилищу профилей настроек. Задаётся параметром `access_control_path`. -* `num_elements` ([UInt64](../../sql-reference/data-types/)) — Количество элементов этого профиля в таблице `system.settings_profile_elements`. -* `apply_to_all` ([UInt8](../../sql-reference/data-types/)) — Показывает, что профиль настроек задан для всех ролей и/или пользователей. -* `apply_to_list` ([Array(String)](../../sql-reference/data-types/)) — Список ролей и/или пользователей, к которым применяется профиль настроек. -* `apply_to_except` ([Array(String)](../../sql-reference/data-types/)) — Профиль настроек применяется ко всем ролям и/или пользователям, за исключением перечисленных. - {/*AUTOGENERATED_END*/ } ## См. также {#see-also} -- [SHOW PROFILES](/sql-reference/statements/show#show-profiles) +- [SHOW PROFILES](/sql-reference/statements/show#show-profiles) \ No newline at end of file diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/table_engines.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/table_engines.md index 90b7504261c..c6c6c233247 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/table_engines.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/table_engines.md @@ -1,32 +1,20 @@ --- -description: 'Системная таблица, содержащая описания движков таблиц, поддерживаемых +description: 'Системная таблица, содержащая описания табличных движков, поддерживаемых сервером, и их возможностей.' -keywords: ['системная таблица', 'table_engines'] +keywords: ['system table', 'table_engines'] slug: /operations/system-tables/table_engines title: 'system.table_engines' doc_type: 'reference' --- - - # system.table_engines -Содержит описание движков таблиц, поддерживаемых сервером, и сведения об их поддерживаемых возможностях. +Содержит описание движков таблиц, поддерживаемых сервером, а также информацию об их возможностях. Эта таблица содержит следующие столбцы (тип столбца указан в скобках): {/*AUTOGENERATED_START*/ } -* `name` ([String](../../sql-reference/data-types/)) — Имя движка таблицы. -* `supports_settings` ([UInt8](../../sql-reference/data-types/)) — Флаг, указывающий, поддерживает ли движок таблицы секцию SETTINGS. -* `supports_skipping_indices` ([UInt8](../../sql-reference/data-types/)) — Флаг, указывающий, поддерживает ли движок таблицы пропускающие индексы. -* `supports_projections` ([UInt8](../../sql-reference/data-types/)) — Флаг, указывающий, поддерживает ли движок таблицы проекции. -* `supports_sort_order` ([UInt8](../../sql-reference/data-types/)) — Флаг, указывающий, поддерживает ли движок таблицы конструкции PARTITION_BY, PRIMARY_KEY, ORDER_BY и SAMPLE_BY. -* `supports_ttl` ([UInt8](../../sql-reference/data-types/)) — Флаг, указывающий, поддерживает ли движок таблицы TTL. -* `supports_replication` ([UInt8](../../sql-reference/data-types/)) — Флаг, указывающий, поддерживает ли движок таблицы репликацию данных. -* `supports_deduplication` ([UInt8](../../sql-reference/data-types/)) — Флаг, указывающий, поддерживает ли движок таблицы дедупликацию данных. -* `supports_parallel_insert` ([UInt8](../../sql-reference/data-types/)) — Флаг, указывающий, поддерживает ли движок таблицы параллельную вставку данных (см. настройку max_insert_threads). - {/*AUTOGENERATED_END*/ } Пример: @@ -47,6 +35,6 @@ WHERE name IN ('Kafka', 'MergeTree', 'ReplicatedCollapsingMergeTree') **См. также** -* [Клаузы запросов](../../engines/table-engines/mergetree-family/mergetree.md#mergetree-query-clauses) семейства MergeTree +* [Части запроса](../../engines/table-engines/mergetree-family/mergetree.md#mergetree-query-clauses) семейства MergeTree * [Настройки](/engines/table-engines/integrations/kafka#creating-a-table) Kafka * [Настройки](../../engines/table-engines/special/join.md#join-limitations-and-settings) Join diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/time_zones.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/time_zones.md index d2fe901da18..05755602720 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/time_zones.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/time_zones.md @@ -1,24 +1,19 @@ --- -description: 'Системная таблица, содержащая список часовых поясов, поддерживаемых - сервером ClickHouse.' -keywords: ['системная таблица', 'time_zones'] +description: 'Системная таблица, содержащая список часовых поясов, поддерживаемых сервером ClickHouse.' +keywords: ['system table', 'time_zones'] slug: /operations/system-tables/time_zones title: 'system.time_zones' doc_type: 'reference' --- - - # system.time_zones -Содержит список часовых поясов, поддерживаемых сервером ClickHouse. Этот список часовых поясов может различаться в зависимости от версии ClickHouse. +Содержит перечень часовых поясов, поддерживаемых сервером ClickHouse. Этот список может меняться в зависимости от версии ClickHouse. Столбцы: {/*AUTOGENERATED_START*/ } -* `time_zone` ([String](../../sql-reference/data-types/)) — список поддерживаемых часовых поясов. - {/*AUTOGENERATED_END*/ } **Пример** diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/user_processes.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/user_processes.md index 1510b2c6686..8fb9b3102b7 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/user_processes.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/user_processes.md @@ -1,6 +1,6 @@ --- -description: 'Системная таблица, содержащая информацию, полезную для обзора использования памяти и событий ProfileEvents пользователей.' -keywords: ['system table', 'user_processes'] +description: 'Системная таблица, содержащая информацию, полезную для общего представления об использовании памяти и ProfileEvents пользователей.' +keywords: ['системная таблица', 'user_processes'] slug: /operations/system-tables/user_processes title: 'system.user_processes' doc_type: 'reference' @@ -13,17 +13,12 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -Эта системная таблица предназначена для получения общего представления об использовании памяти и ProfileEvents пользователей. +Эта системная таблица может использоваться для получения общей информации об использовании памяти и ProfileEvents пользователей. Столбцы: {/*AUTOGENERATED_START*/ } -* `user` ([String](../../sql-reference/data-types/)) — Имя пользователя. -* `memory_usage` ([Int64](../../sql-reference/data-types/)) — Суммарный объем ОЗУ, используемый всеми процессами пользователя. Может не включать некоторые типы выделенной памяти. См. настройку max_memory_usage. -* `peak_memory_usage` ([Int64](../../sql-reference/data-types/)) — Пиковое значение использования памяти пользователем. Может быть сброшено, когда для пользователя не выполняется ни один запрос. -* `ProfileEvents` ([Map(String, UInt64)](../../sql-reference/data-types/)) — Сводные значения ProfileEvents, измеряющих различные метрики для пользователя. Их описание можно найти в таблице system.events. - {/*AUTOGENERATED_END*/ } ```sql diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/users.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/users.md index 6143b9f2225..72ad173dc8b 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/users.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/users.md @@ -1,41 +1,22 @@ --- -description: 'Системная таблица, содержащая список учетных записей пользователей, сконфигурированных на сервере.' +description: 'Системная таблица, содержащая список учетных записей пользователей, настроенных на сервере.' keywords: ['системная таблица', 'пользователи'] slug: /operations/system-tables/users title: 'system.users' doc_type: 'reference' --- - - # system.users -Содержит список [учётных записей пользователей](../../guides/sre/user-management/index.md#user-account-management), созданных на сервере. +Содержит список [учётных записей пользователей](../../guides/sre/user-management/index.md#user-account-management), сконфигурированных на сервере. Столбцы: {/*AUTOGENERATED_START*/ } -* `name` ([String](../../sql-reference/data-types/)) — Имя пользователя. -* `id` ([UUID](../../sql-reference/data-types/)) — ID пользователя. -* `storage` ([String](../../sql-reference/data-types/)) — Путь к хранилищу пользователей. Настраивается параметром access_control_path. -* `auth_type` ([Array(Enum8('no_password' = 0, 'plaintext_password' = 1, 'sha256_password' = 2, 'double_sha1_password' = 3, 'ldap' = 4, 'kerberos' = 5, 'ssl_certificate' = 6, 'bcrypt_password' = 7, 'ssh_key' = 8, 'http' = 9, 'jwt' = 10, 'scram_sha256_password' = 11, 'no_authentication' = 12))](../../sql-reference/data-types/)) — Показывает типы аутентификации. Существует несколько способов идентификации пользователя: без пароля, с паролем в открытом виде, с паролем, захешированным алгоритмом SHA256, с паролем, захешированным двойным SHA-1, или с паролем, захешированным алгоритмом bcrypt. -* `auth_params` ([Array(String)](../../sql-reference/data-types/)) — Параметры аутентификации в формате JSON в зависимости от значения auth_type. -* `host_ip` ([Array(String)](../../sql-reference/data-types/)) — IP-адреса хостов, которым разрешено подключаться к серверу ClickHouse. -* `host_names` ([Array(String)](../../sql-reference/data-types/)) — Имена хостов, которым разрешено подключаться к серверу ClickHouse. -* `host_names_regexp` ([Array(String)](../../sql-reference/data-types/)) — Регулярное выражение для имён хостов, которым разрешено подключаться к серверу ClickHouse. -* `host_names_like` ([Array(String)](../../sql-reference/data-types/)) — Имена хостов, которым разрешено подключаться к серверу ClickHouse, заданные с использованием предиката LIKE. -* `default_roles_all` ([UInt8](../../sql-reference/data-types/)) — Показывает, что пользователю по умолчанию назначаются все выданные роли. -* `default_roles_list` ([Array(String)](../../sql-reference/data-types/)) — Список выданных ролей, назначенных по умолчанию. -* `default_roles_except` ([Array(String)](../../sql-reference/data-types/)) — Все выданные роли, назначенные по умолчанию, за исключением перечисленных. -* `grantees_any` ([UInt8](../../sql-reference/data-types/)) — Флаг, указывающий, может ли пользователь с любой опцией передачи прав делегировать её кому угодно. -* `grantees_list` ([Array(String)](../../sql-reference/data-types/)) — Список пользователей или ролей, которым этот пользователь может передавать права. -* `grantees_except` ([Array(String)](../../sql-reference/data-types/)) — Список пользователей или ролей, которым этому пользователю запрещено передавать права. -* `default_database` ([String](../../sql-reference/data-types/)) — Имя базы данных по умолчанию для этого пользователя. - {/*AUTOGENERATED_END*/ } ## См. также {#see-also} -- [SHOW USERS](/sql-reference/statements/show#show-users) +- [SHOW USERS](/sql-reference/statements/show#show-users) \ No newline at end of file diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/view_refreshes.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/view_refreshes.md index e2db672c83b..92847ebeeaa 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/view_refreshes.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/view_refreshes.md @@ -1,6 +1,6 @@ --- description: 'Системная таблица, содержащая информацию об обновляемых материализованных представлениях.' -keywords: ['system table', 'view_refreshes'] +keywords: ['системная таблица', 'view_refreshes'] slug: /operations/system-tables/view_refreshes title: 'system.view_refreshes' doc_type: 'reference' @@ -13,30 +13,12 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -Информация об [обновляемых материализованных представлениях](../../sql-reference/statements/create/view.md#refreshable-materialized-view). Содержит все обновляемые материализованные представления, независимо от того, выполняется ли сейчас обновление или нет. +Информация об [обновляемых материализованных представлениях](../../sql-reference/statements/create/view.md#refreshable-materialized-view). Содержит все обновляемые материализованные представления, независимо от того, выполняется ли их обновление в данный момент или нет. Столбцы: {/*AUTOGENERATED_START*/ } -* `database` ([String](../../sql-reference/data-types/)) — Имя базы данных, в которой находится таблица. -* `view` ([String](../../sql-reference/data-types/)) — Имя таблицы. -* `uuid` ([UUID](../../sql-reference/data-types/)) — UUID таблицы (база данных типа Atomic). -* `status` ([String](../../sql-reference/data-types/)) — Текущее состояние обновления. -* `last_success_time` ([Nullable(DateTime)](../../sql-reference/data-types/)) — Время начала последнего успешно завершившегося обновления. NULL, если с момента запуска сервера или создания таблицы не было ни одного успешного обновления. -* `last_success_duration_ms` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Длительность последнего успешно завершившегося обновления в миллисекундах. -* `last_refresh_time` ([Nullable(DateTime)](../../sql-reference/data-types/)) — Время, когда последняя попытка обновления завершилась (если известно) или началась (если неизвестно или всё ещё выполняется). NULL, если с момента запуска сервера или создания таблицы не было ни одной попытки обновления. -* `last_refresh_replica` ([String](../../sql-reference/data-types/)) — Если координация включена, имя реплики, которая выполняет текущую (если выполняется) или выполняла предыдущую (если не выполняется) попытку обновления. -* `next_refresh_time` ([Nullable(DateTime)](../../sql-reference/data-types/)) — Время, когда запланирован запуск следующего обновления, если `status = Scheduled`. -* `exception` ([String](../../sql-reference/data-types/)) — Сообщение об ошибке из предыдущей попытки, если она завершилась с ошибкой. -* `retry` ([UInt64](../../sql-reference/data-types/)) — Сколько неудачных попыток было на данный момент для текущего обновления. Недоступно, если статус — `RunningOnAnotherReplica`. -* `progress` ([Nullable(Float64)](../../sql-reference/data-types/)) — Прогресс текущего выполняющегося или последнего завершившегося обновления на данной реплике, от 0 до 1. NULL, если статус — `RunningOnAnotherReplica` или обновление не выполняется. -* `read_rows` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Количество строк, прочитанных текущим выполняющимся или последним завершившимся обновлением на данной реплике. NULL, если статус — `RunningOnAnotherReplica`. -* `read_bytes` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Количество байт, прочитанных текущим выполняющимся или последним завершившимся обновлением на данной реплике. NULL, если статус — `RunningOnAnotherReplica`. -* `total_rows` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Оценочное общее количество строк, которые необходимо прочитать текущему выполняющемуся или последнему завершившемуся обновлению на данной реплике. NULL, если статус — `RunningOnAnotherReplica`. -* `written_rows` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Количество строк, записанных текущим выполняющимся или последним завершившимся обновлением на данной реплике. NULL, если статус — `RunningOnAnotherReplica`. -* `written_bytes` ([Nullable(UInt64)](../../sql-reference/data-types/)) — Количество байт, записанных текущим выполняющимся или последним завершившимся обновлением на данной реплике. NULL, если статус — `RunningOnAnotherReplica`. - {/*AUTOGENERATED_END*/ } **Пример** diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/workloads.md b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/workloads.md index df914a62656..e53fe6882c9 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/workloads.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/operations/system-tables/workloads.md @@ -1,16 +1,14 @@ --- -description: 'Системная таблица, содержащая информацию о рабочих нагрузках, выполняющихся на локальном сервере.' +description: 'Системная таблица, содержащая сведения о нагрузках, выполняющихся на локальном сервере.' keywords: ['системная таблица', 'нагрузки'] slug: /operations/system-tables/workloads title: 'system.workloads' doc_type: 'reference' --- - - # system.workloads -Содержит информацию о [рабочих нагрузках](/operations/workload-scheduling.md#workload_entity_storage), размещённых на локальном сервере. Таблица содержит по одной строке для каждой рабочей нагрузки. +Содержит информацию о [рабочих нагрузках](/operations/workload-scheduling.md#workload_entity_storage), размещённых на локальном сервере. Для каждой рабочей нагрузки в таблице есть отдельная строка. Пример: @@ -44,8 +42,4 @@ create_query: CREATE WORKLOAD `all` {/*AUTOGENERATED_START*/ } -* `name` ([String](../../sql-reference/data-types/)) — Имя рабочей нагрузки. -* `parent` ([String](../../sql-reference/data-types/)) — Имя родительской рабочей нагрузки. -* `create_query` ([String](../../sql-reference/data-types/)) — Запрос CREATE для рабочей нагрузки. - {/*AUTOGENERATED_END*/ } diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/aggregate-functions/reference/index.md b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/aggregate-functions/reference/index.md index b9958cef7d9..fc0cc2b7d89 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/aggregate-functions/reference/index.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/aggregate-functions/reference/index.md @@ -1,5 +1,5 @@ --- -description: 'Главная страница раздела агрегатных функций с полным списком агрегатных функций' +description: 'Обзорная страница агрегатных функций с их полным списком' sidebar_position: 36 slug: /sql-reference/aggregate-functions/reference/ title: 'Агрегатные функции' @@ -14,151 +14,12 @@ doc_type: 'landing-page' ClickHouse поддерживает все стандартные агрегатные функции SQL ([sum](../reference/sum.md), [avg](../reference/avg.md), [min](../reference/min.md), [max](../reference/max.md), [count](../reference/count.md)), а также широкий набор других агрегатных функций. -{/* Таблица содержания для этой страницы автоматически генерируется скриптом - https://github.com/ClickHouse/clickhouse-docs/blob/main/scripts/autogenerate-table-of-contents.sh - из полей YAML front matter: slug, description, title. + - -{/*AUTOGENERATED_START*/ } - -| Страница | Описание | -| --------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [aggThrow](/sql-reference/aggregate-functions/reference/aggthrow) | Эту функцию можно использовать для проверки безопасности кода при работе с исключениями. При создании она будет генерировать исключение с указанной вероятностью. | -| [analysisOfVariance](/sql-reference/aggregate-functions/reference/analysis_of_variance) | Предоставляет статистический критерий для однофакторного дисперсионного анализа (тест ANOVA). Это критерий для нескольких групп нормально распределённых наблюдений, позволяющий определить, одинаковы ли средние значения во всех группах. | -| [any](/sql-reference/aggregate-functions/reference/any) | Выбирает первое встреченное в столбце значение. | -| [anyHeavy](/sql-reference/aggregate-functions/reference/anyheavy) | Выбирает часто встречающееся значение с использованием алгоритма heavy hitters. Если существует значение, которое встречается более чем в половине случаев в каждом из потоков выполнения запроса, возвращается именно оно. Как правило, результат недетерминирован. | -| [anyLast](/sql-reference/aggregate-functions/reference/anylast) | Возвращает последнее встретившееся значение столбца. | -| [approx_top_k](/sql-reference/aggregate-functions/reference/approxtopk) | Возвращает массив наиболее часто встречающихся (приблизительно) значений в указанном столбце и количества их вхождений. | -| [approx_top_sum](/sql-reference/aggregate-functions/reference/approxtopsum) | Возвращает массив приблизительно самых частых значений и числа их вхождений в указанном столбце. | -| [argMax](/sql-reference/aggregate-functions/reference/argmax) | Вычисляет значение `arg` при максимальном значении `val`. | -| [argMin](/sql-reference/aggregate-functions/reference/argmin) | Вычисляет значение `arg` для минимального значения `val`. Если существует несколько строк с одинаковым значением `val`, являющимся максимальным, выбор возвращаемого связанного значения `arg` является недетерминированным. | -| [argAndMin](/sql-reference/aggregate-functions/reference/argandmin) | Вычисляет значения `arg` и `val` для минимального значения `val`. Если существует несколько строк с одинаковым минимальным значением `val`, то выбор того, какая пара связанных значений `arg` и `val` будет возвращена, не детерминирован. | -| [argAndMax](/sql-reference/aggregate-functions/reference/argandmax) | Вычисляет значения `arg` и `val` для максимального значения `val`. Если существует несколько строк с одинаковым максимальным `val`, то то, какие связанные значения `arg` и `val` будут возвращены, не определено. | -| [groupArrayArray](/sql-reference/aggregate-functions/reference/grouparrayarray) | Объединяет массивы в один более крупный массив массивов. | -| [avg](/sql-reference/aggregate-functions/reference/avg) | Вычисляет арифметическое среднее значение. | -| [avgWeighted](/sql-reference/aggregate-functions/reference/avgweighted) | Вычисляет взвешенное среднее арифметическое. | -| [boundingRatio](/sql-reference/aggregate-functions/reference/boundingRatio) | Агрегатная функция, которая вычисляет наклон между самой левой и самой правой точками по группе значений. | -| [categoricalInformationValue](/sql-reference/aggregate-functions/reference/categoricalinformationvalue) | Вычисляет значение `(P(tag = 1) - P(tag = 0)) (log(P(tag = 1)) - log(P(tag = 0)))` для каждой категории. | -| [contingency](/sql-reference/aggregate-functions/reference/contingency) | Функция `contingency` вычисляет коэффициент контингенции — величину, измеряющую степень связи между двумя столбцами таблицы. Вычисление аналогично функции `cramersV`, однако использует другой знаменатель под знаком квадратного корня. | -| [corr](/sql-reference/aggregate-functions/reference/corr) | Вычисляет коэффициент корреляции Пирсона. | -| [corrMatrix](/sql-reference/aggregate-functions/reference/corrmatrix) | Вычисляет корреляционную матрицу для N переменных. | -| [corrStable](/sql-reference/aggregate-functions/reference/corrstable) | Вычисляет коэффициент корреляции Пирсона, но использует численно устойчивый алгоритм. | -| [count](/sql-reference/aggregate-functions/reference/count) | Считает количество строк или значений, отличных от NULL. | -| [covarPop](/sql-reference/aggregate-functions/reference/covarpop) | Вычисляет ковариацию генеральной совокупности | -| [covarPopMatrix](/sql-reference/aggregate-functions/reference/covarpopmatrix) | Возвращает матрицу ковариации генеральной совокупности по N переменным. | -| [covarPopStable](/sql-reference/aggregate-functions/reference/covarpopstable) | Вычисляет значение ковариации по генеральной совокупности | -| [covarSamp](/sql-reference/aggregate-functions/reference/covarsamp) | Вычисляет значение `Σ((x - x̅)(y - y̅)) / (n - 1)` | -| [covarSampMatrix](/sql-reference/aggregate-functions/reference/covarsampmatrix) | Возвращает выборочную ковариационную матрицу по N переменным. | -| [covarSampStable](/sql-reference/aggregate-functions/reference/covarsampstable) | Аналогична covarSamp, но работает медленнее и даёт меньшую вычислительную погрешность. | -| [cramersV](/sql-reference/aggregate-functions/reference/cramersv) | Результат функции `cramersV` лежит в диапазоне от 0 (что соответствует отсутствию связи между переменными) до 1 и может достигать 1 только тогда, когда каждое значение одной переменной полностью определяется значением другой. Его можно рассматривать как меру связи между двумя переменными, выраженную в процентах от их максимально возможной вариации. | -| [cramersVBiasCorrected](/sql-reference/aggregate-functions/reference/cramersvbiascorrected) | Вычисляет V Крамера с учетом смещения (bias-correction). | -| [deltaSum](/sql-reference/aggregate-functions/reference/deltasum) | Суммирует арифметическую разность между соседними строками. | -| [deltaSumTimestamp](/sql-reference/aggregate-functions/reference/deltasumtimestamp) | Добавляет разницу между соседними строками. Если разница отрицательная, она игнорируется. | -| [entropy](/sql-reference/aggregate-functions/reference/entropy) | Вычисляет энтропию Шеннона для столбца значений. | -| [estimateCompressionRatio](/sql-reference/aggregate-functions/reference/estimateCompressionRatio) | Оценивает коэффициент сжатия указанного столбца без фактического выполнения сжатия. | -| [exponentialMovingAverage](/sql-reference/aggregate-functions/reference/exponentialMovingAverage) | Вычисляет экспоненциальное скользящее среднее значений за заданный интервал времени. | -| [exponentialTimeDecayedAvg](/sql-reference/aggregate-functions/reference/exponentialTimeDecayedAvg) | Возвращает экспоненциально сглаженное взвешенное скользящее среднее значений временного ряда в момент времени `t`. | -| [exponentialTimeDecayedCount](/sql-reference/aggregate-functions/reference/exponentialTimeDecayedCount) | Возвращает накопленное экспоненциальное затухание для временного ряда в момент времени с индексом `t`. | -| [exponentialTimeDecayedMax](/sql-reference/aggregate-functions/reference/exponentialTimeDecayedMax) | Возвращает максимум из значений экспоненциально сглаженного скользящего среднего в момент времени `t` и в момент `t-1`. | -| [exponentialTimeDecayedSum](/sql-reference/aggregate-functions/reference/exponentialTimeDecayedSum) | Возвращает сумму значений экспоненциально сглаженного скользящего среднего временного ряда в момент времени `t`. | -| [first_value](/sql-reference/aggregate-functions/reference/first_value) | Это псевдоним агрегатной функции `any`, он был добавлен для совместимости с оконными функциями, где иногда требуется обрабатывать значения `NULL` (по умолчанию все агрегатные функции ClickHouse игнорируют значения `NULL`). | -| [flameGraph](/sql-reference/aggregate-functions/reference/flame_graph) | Агрегатная функция, строящая флеймграф по списку стек-трейсов. | -| [groupArray](/sql-reference/aggregate-functions/reference/grouparray) | Создает массив из значений аргументов. Значения могут добавляться в массив в любом (произвольном) порядке. | -| [groupArrayInsertAt](/sql-reference/aggregate-functions/reference/grouparrayinsertat) | Вставляет значение в массив на указанную позицию. | -| [groupArrayIntersect](/sql-reference/aggregate-functions/reference/grouparrayintersect) | Возвращает пересечение заданных массивов (все элементы, которые присутствуют во всех этих массивах). | -| [groupArrayLast](/sql-reference/aggregate-functions/reference/grouparraylast) | Создаёт массив из значений последнего аргумента. | -| [groupArrayMovingSum](/sql-reference/aggregate-functions/reference/grouparraymovingsum) | Вычисляет скользящую сумму входных значений. | -| [groupArrayMovingAvg](/sql-reference/aggregate-functions/reference/grouparraymovingavg) | Вычисляет скользящее среднее для входных значений. | -| [groupArraySample](/sql-reference/aggregate-functions/reference/grouparraysample) | Создаёт массив выборочных значений аргумента. Размер результирующего массива ограничен не более чем `max_size` элементами. Значения аргумента выбираются случайным образом и добавляются в массив. | -| [timeSeriesGroupArray](/sql-reference/aggregate-functions/reference/timeSeriesGroupArray) | Сортирует временные ряды по метке времени в порядке возрастания. | -| [groupArraySorted](/sql-reference/aggregate-functions/reference/grouparraysorted) | Возвращает массив из первых N элементов в порядке возрастания. | -| [groupBitAnd](/sql-reference/aggregate-functions/reference/groupbitand) | Применяет операцию побитового `AND` к последовательности чисел. | -| [groupBitmap](/sql-reference/aggregate-functions/reference/groupbitmap) | Битовые или агрегатные вычисления по столбцу беззнакового целого возвращают мощность множества типа UInt64; при добавлении суффикса -State возвращается объект bitmap. | -| [groupBitmapAnd](/sql-reference/aggregate-functions/reference/groupbitmapand) | Вычисляет пересечение (AND) значений столбца Bitmap и возвращает его кардинальность типа UInt64; при добавлении суффикса -State возвращает объект Bitmap. | -| [groupBitmapOr](/sql-reference/aggregate-functions/reference/groupbitmapor) | Вычисляет операцию OR над битмап-столбцом и возвращает мощность множества типа UInt64, а при добавлении суффикса -State — объект битмапа. Эквивалентно `groupBitmapMerge`. | -| [groupBitmapXor](/sql-reference/aggregate-functions/reference/groupbitmapxor) | Вычисляет XOR по столбцу битовой карты и возвращает кардинальность типа UInt64, а при использовании с суффиксом -State возвращает объект битовой карты | -| [groupBitOr](/sql-reference/aggregate-functions/reference/groupbitor) | Выполняет побитовую операцию `OR` над последовательностью чисел. | -| [groupBitXor](/sql-reference/aggregate-functions/reference/groupbitxor) | Применяет побитовое `XOR` к последовательности чисел. | -| [groupUniqArray](/sql-reference/aggregate-functions/reference/groupuniqarray) | Создает массив из значений переданных аргументов. | -| [intervalLengthSum](/sql-reference/aggregate-functions/reference/intervalLengthSum) | Вычисляет суммарную длину объединения всех диапазонов (отрезков на числовой оси). | -| [kolmogorovSmirnovTest](/sql-reference/aggregate-functions/reference/kolmogorovsmirnovtest) | Применяет критерий Колмогорова–Смирнова к выборкам из двух генеральных совокупностей. | -| [kurtPop](/sql-reference/aggregate-functions/reference/kurtpop) | Вычисляет эксцесс последовательности. | -| [kurtSamp](/sql-reference/aggregate-functions/reference/kurtsamp) | Вычисляет выборочный эксцесс для последовательности. | -| [largestTriangleThreeBuckets](/sql-reference/aggregate-functions/reference/largestTriangleThreeBuckets) | Применяет алгоритм Largest-Triangle-Three-Buckets к исходным данным. | -| [last_value](/sql-reference/aggregate-functions/reference/last_value) | Выбирает последнее встреченное значение, аналогично `anyLast`, но допускает NULL. | -| [mannWhitneyUTest](/sql-reference/aggregate-functions/reference/mannwhitneyutest) | Применяет ранговый критерий Манна–Уитни к выборкам из двух генеральных совокупностей. | -| [max](/sql-reference/aggregate-functions/reference/max) | Агрегатная функция, вычисляющая максимальное значение в группе значений. | -| [maxIntersections](/sql-reference/aggregate-functions/reference/maxintersections) | Агрегатная функция, вычисляющая максимальное количество пересечений внутри группы интервалов (при условии, что все интервалы пересекаются хотя бы один раз). | -| [maxIntersectionsPosition](/sql-reference/aggregate-functions/reference/maxintersectionsposition) | Агрегатная функция, вычисляющая позиции вхождений, определённых функцией maxIntersections. | -| [maxMap](/sql-reference/aggregate-functions/reference/maxmap) | Вычисляет максимальное значение из массива `value` по ключам, указанным в массиве `key`. | -| [meanZTest](/sql-reference/aggregate-functions/reference/meanztest) | Применяет z-тест для проверки среднего по выборкам из двух генеральных совокупностей. | -| [median](/sql-reference/aggregate-functions/reference/median) | Функции `median*` являются псевдонимами соответствующих функций `quantile*`. Они вычисляют медиану выборки числовых данных. | -| [min](/sql-reference/aggregate-functions/reference/min) | Агрегатная функция, вычисляющая минимум над группой значений. | -| [minMap](/sql-reference/aggregate-functions/reference/minmap) | Вычисляет минимум массива `value` по ключам, указанным в массиве `key`. | -| [quantile](/sql-reference/aggregate-functions/reference/quantile) | Вычисляет приближённый квантиль последовательности числовых данных. | -| [quantileDD](/sql-reference/aggregate-functions/reference/quantileddsketch) | Вычисляет приближённый квантиль выборки с гарантированной относительной погрешностью. | -| [quantileBFloat16](/sql-reference/aggregate-functions/reference/quantilebfloat16) | Вычисляет приближённый квантиль выборки, состоящей из чисел формата bfloat16. | -| [quantileDeterministic](/sql-reference/aggregate-functions/reference/quantiledeterministic) | Вычисляет приближённый квантиль последовательности числовых данных. | -| [Функции quantileExact](/sql-reference/aggregate-functions/reference/quantileexact) | функции quantileExact, quantileExactLow, quantileExactHigh, quantileExactExclusive, quantileExactInclusive | -| [quantileExactWeighted](/sql-reference/aggregate-functions/reference/quantileexactweighted) | Точно вычисляет квантиль числового набора данных с учётом веса каждого элемента. | -| [quantileGK](/sql-reference/aggregate-functions/reference/quantileGK) | Вычисляет квантиль для числовой последовательности данных с помощью алгоритма Гринвальда — Ханны. | -| [quantileExactWeightedInterpolated](/sql-reference/aggregate-functions/reference/quantileExactWeightedInterpolated) | Вычисляет квантиль последовательности числовых данных с использованием линейной интерполяции, с учетом веса каждого элемента. | -| [quantileInterpolatedWeighted](/sql-reference/aggregate-functions/reference/quantileInterpolatedWeighted) | Вычисляет квантиль последовательности числовых данных с использованием линейной интерполяции с учётом веса каждого элемента. | -| [Функции quantiles](/sql-reference/aggregate-functions/reference/quantiles) | quantiles, quantilesExactExclusive, quantilesExactInclusive, quantilesGK | -| [quantileTDigest](/sql-reference/aggregate-functions/reference/quantiletdigest) | Вычисляет приближённый квантиль последовательности числовых данных с использованием алгоритма t-digest. | -| [quantileTDigestWeighted](/sql-reference/aggregate-functions/reference/quantiletdigestweighted) | Вычисляет приближённый квантиль последовательности числовых данных с использованием алгоритма t-digest. | -| [quantileTiming](/sql-reference/aggregate-functions/reference/quantiletiming) | С указанной точностью вычисляет квантиль последовательности числовых данных. | -| [quantileTimingWeighted](/sql-reference/aggregate-functions/reference/quantiletimingweighted) | С заданной точностью вычисляет квантиль последовательности числовых данных с учётом веса каждого элемента последовательности. | -| [rankCorr](/sql-reference/aggregate-functions/reference/rankCorr) | Вычисляет коэффициент ранговой корреляции. | -| [simpleLinearRegression](/sql-reference/aggregate-functions/reference/simplelinearregression) | Выполняет простую (одномерную) линейную регрессию. | -| [singleValueOrNull](/sql-reference/aggregate-functions/reference/singlevalueornull) | Агрегатная функция `singleValueOrNull` используется для реализации операторов подзапросов, таких как `x = ALL (SELECT ...)`. Она проверяет, существует ли в данных единственное уникальное значение, отличное от NULL. | -| [skewPop](/sql-reference/aggregate-functions/reference/skewpop) | Вычисляет коэффициент асимметрии для последовательности. | -| [skewSamp](/sql-reference/aggregate-functions/reference/skewsamp) | Вычисляет выборочный коэффициент асимметрии последовательности. | -| [sparkbar](/sql-reference/aggregate-functions/reference/sparkbar) | Функция строит гистограмму частоты для значений `x` и частоты повторения `y` этих значений на интервале `[min_x, max_x]`. | -| [stddevPop](/sql-reference/aggregate-functions/reference/stddevpop) | Результат равен квадратному корню из varPop. | -| [stddevPopStable](/sql-reference/aggregate-functions/reference/stddevpopstable) | Результат равен квадратному корню из varPop. В отличие от stddevPop, эта функция использует численно устойчивый алгоритм. | -| [stddevSamp](/sql-reference/aggregate-functions/reference/stddevsamp) | Результат равен квадратному корню из значения varSamp | -| [stddevSampStable](/sql-reference/aggregate-functions/reference/stddevsampstable) | Результат равен квадратному корню от varSamp. В отличие от varSamp, эта функция использует численно устойчивый алгоритм. | -| [stochasticLinearRegression](/sql-reference/aggregate-functions/reference/stochasticlinearregression) | Эта функция реализует стохастическую линейную регрессию. Она поддерживает настраиваемые параметры скорости обучения, коэффициента L2‑регуляризации, размера мини‑батча и предоставляет несколько методов обновления весов (Adam, простой SGD, Momentum, Nesterov). | -| [stochasticLogisticRegression](/sql-reference/aggregate-functions/reference/stochasticlogisticregression) | Эта функция реализует стохастическую логистическую регрессию. Её можно использовать для решения задач бинарной классификации; она поддерживает те же настраиваемые параметры, что и stochasticLinearRegression, и работает аналогичным образом. | -| [studentTTest](/sql-reference/aggregate-functions/reference/studentttest) | Применяет t-критерий Стьюдента к выборкам из двух генеральных совокупностей. | -| [sum](/sql-reference/aggregate-functions/reference/sum) | Вычисляет сумму. Применимо только к числам. | -| [studentTTestOneSample](/sql-reference/aggregate-functions/reference/studentttestonesample) | Применяет одновыборочный t‑критерий Стьюдента к выборке и известному среднему генеральной совокупности. | -| [sumCount](/sql-reference/aggregate-functions/reference/sumcount) | Вычисляет сумму чисел и одновременно считает количество строк. Функция используется оптимизатором запросов ClickHouse: если в запросе присутствует несколько функций `sum`, `count` или `avg`, их можно заменить одной функцией `sumCount` для повторного использования результатов вычислений. Функцию редко требуется вызывать явно. | -| [sumKahan](/sql-reference/aggregate-functions/reference/sumkahan) | Вычисляет сумму чисел с использованием алгоритма компенсированного суммирования по Кахану | -| [sumMap](/sql-reference/aggregate-functions/reference/summap) | Суммирует один или несколько массивов `value` по ключам, указанным в массиве `key`. Возвращает кортеж массивов: сначала ключи в отсортированном порядке, затем значения, суммированные для соответствующих ключей без переполнения. | -| [sumMapWithOverflow](/sql-reference/aggregate-functions/reference/summapwithoverflow) | Вычисляет сумму элементов массива `value` в соответствии с ключами, заданными в массиве `key`. Возвращает кортеж из двух массивов: отсортированные ключи и суммы значений для соответствующих ключей. Отличается от функции sumMap тем, что выполняет суммирование с переполнением. | -| [sumWithOverflow](/sql-reference/aggregate-functions/reference/sumwithoverflow) | Вычисляет сумму чисел, используя для результата тот же тип данных, что и для входных параметров. Если сумма превышает максимально допустимое значение для этого типа данных, она вычисляется с переполнением. | -| [theilsU](/sql-reference/aggregate-functions/reference/theilsu) | Функция `theilsU` вычисляет коэффициент неопределённости U Тейла — величину, характеризующую степень связи между двумя столбцами в таблице. | -| [topK](/sql-reference/aggregate-functions/reference/topk) | Возвращает массив приблизительно наиболее частых значений в указанном столбце. Полученный массив отсортирован по убыванию приблизительной частоты значений (а не по самим значениям). | -| [topKWeighted](/sql-reference/aggregate-functions/reference/topkweighted) | Возвращает массив примерно наиболее часто встречающихся значений в указанном столбце. Полученный массив отсортирован по убыванию оценочной частоты значений (не по самим значениям). Также учитывается вес значения. | -| [uniq](/sql-reference/aggregate-functions/reference/uniq) | Вычисляет примерное количество уникальных значений аргумента. | -| [uniqCombined](/sql-reference/aggregate-functions/reference/uniqcombined) | Вычисляет примерное количество различных значений аргумента. | -| [uniqCombined64](/sql-reference/aggregate-functions/reference/uniqcombined64) | Вычисляет приблизительное количество различных значений аргумента. Аналогична uniqCombined, но использует 64-битный хеш для всех типов данных, а не только для типа String. | -| [uniqExact](/sql-reference/aggregate-functions/reference/uniqexact) | Вычисляет точное число различных значений аргументов. | -| [uniqHLL12](/sql-reference/aggregate-functions/reference/uniqhll12) | Вычисляет приблизительное количество уникальных значений аргумента с помощью алгоритма HyperLogLog. | -| [uniqTheta](/sql-reference/aggregate-functions/reference/uniqthetasketch) | Вычисляет приблизительное количество различных значений аргумента на основе фреймворка Theta Sketch. | -| [varPop](/sql-reference/aggregate-functions/reference/varPop) | Вычисляет дисперсию генеральной совокупности. | -| [varPopStable](/sql-reference/aggregate-functions/reference/varpopstable) | Возвращает генеральную дисперсию. В отличие от varPop эта функция использует численно устойчивый алгоритм. Работает медленнее, но обеспечивает меньшую вычислительную погрешность. | -| [varSamp](/sql-reference/aggregate-functions/reference/varSamp) | Вычисляет выборочную дисперсию набора данных. | -| [varSampStable](/sql-reference/aggregate-functions/reference/varsampstable) | Вычисляет выборочную дисперсию набора данных. В отличие от `varSamp` эта функция использует численно устойчивый алгоритм. При этом работает медленнее, но обеспечивает меньшую вычислительную погрешность. | -| [welchTTest](/sql-reference/aggregate-functions/reference/welchttest) | Применяет t‑критерий Уэлча к выборкам из двух генеральных совокупностей. | -| [distinctDynamicTypes](/sql-reference/aggregate-functions/reference/distinctdynamictypes) | Вычисляет список уникальных типов данных, хранящихся в столбце Dynamic. | -| [distinctJSONPaths](/sql-reference/aggregate-functions/reference/distinctjsonpaths) | Вычисляет список уникальных путей, хранящихся в JSON-столбце. | -| [timeSeriesDeltaToGrid](/sql-reference/aggregate-functions/reference/timeSeriesDeltaToGrid) | Агрегирующая функция, вычисляющая PromQL‑подобную дельту над данными временных рядов на заданной сетке. | -| [timeSeriesInstantDeltaToGrid](/sql-reference/aggregate-functions/reference/timeSeriesInstantDeltaToGrid) | Агрегатная функция, вычисляющая idelta, аналогичный PromQL, для данных временных рядов на заданной сетке. | -| [timeSeriesInstantRateToGrid](/sql-reference/aggregate-functions/reference/timeSeriesInstantRateToGrid) | Агрегатная функция, вычисляющая PromQL-подобный irate для данных временных рядов на указанной сетке. | -| [timeSeriesLastTwoSamples](/sql-reference/aggregate-functions/reference/timeSeriesLastTwoSamples) | Агрегатная функция для ресемплирования данных временных рядов при вычислении irate и idelta как в PromQL | -| [timeSeriesRateToGrid](/sql-reference/aggregate-functions/reference/timeSeriesRateToGrid) | Агрегатная функция, вычисляющая PromQL‑подобный rate по данным временных рядов на заданной временной сетке. | -| [timeSeriesResampleToGridWithStaleness](/sql-reference/aggregate-functions/reference/timeSeriesResampleToGridWithStaleness) | Агрегатная функция, выполняющая ресемплинг данных временных рядов на заданную сетку. | -| [timeSeriesDerivToGrid](/sql-reference/aggregate-functions/reference/timeSeriesDerivToGrid) | Агрегатная функция, вычисляющая производную по данным временных рядов в стиле PromQL на заданной сетке. | -| [timeSeriesPredictLinearToGrid](/sql-reference/aggregate-functions/reference/timeSeriesPredictLinearToGrid) | Агрегатная функция, вычисляющая линейный прогноз в стиле PromQL по данным временных рядов на заданной временной сетке. | -| [timeSeriesChangesToGrid](/sql-reference/aggregate-functions/reference/timeSeriesChangesToGrid) | Агрегатная функция, вычисляющая изменения по данным временных рядов в стиле PromQL на заданной временной сетке. | -| [timeSeriesResetsToGrid](/sql-reference/aggregate-functions/reference/timeSeriesResetsToGrid) | Агрегатная функция, вычисляющая сбросы счётчиков в стиле PromQL по данным временных рядов на заданной сетке. | -| [groupConcat](/sql-reference/aggregate-functions/reference/groupconcat) | Вычисляет объединённую строку из группы строк, при необходимости разделённых указанным разделителем и, опционально, ограниченных максимальным количеством элементов. | -| [quantilePrometheusHistogram](/sql-reference/aggregate-functions/reference/quantilePrometheusHistogram) | Вычисляет квантиль гистограммы с использованием линейной интерполяции. | - -{/*AUTOGENERATED_END*/ } + + diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/data-types/aggregatefunction.md b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/data-types/aggregatefunction.md index 1aaa96583e9..f765526f286 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/data-types/aggregatefunction.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/data-types/aggregatefunction.md @@ -1,5 +1,6 @@ --- -description: 'Документация по типу данных AggregateFunction в ClickHouse, предназначенному для хранения промежуточных состояний агрегатных функций' +description: 'Документация по типу данных AggregateFunction в ClickHouse, который +хранит промежуточные состояния агрегатных функций' keywords: ['AggregateFunction', 'Type'] sidebar_label: 'AggregateFunction' sidebar_position: 46 @@ -8,28 +9,21 @@ title: 'Тип AggregateFunction' doc_type: 'reference' --- - - # Тип AggregateFunction - - ## Описание {#description} Все [агрегатные функции](/sql-reference/aggregate-functions) в ClickHouse имеют -специфическое для реализации промежуточное состояние, которое может быть сериализовано -в тип данных `AggregateFunction` и сохранено в таблице. Обычно это реализуется с -помощью [материализованного представления](../../sql-reference/statements/create/view.md). - -С типом `AggregateFunction` обычно используются два [комбинатора](/sql-reference/aggregate-functions/combinators) -агрегатных функций: - -- Комбинатор агрегатной функции [`-State`](/sql-reference/aggregate-functions/combinators#-state), который, будучи добавленным к имени агрегатной - функции, создает промежуточные состояния `AggregateFunction`. -- Комбинатор агрегатной функции [`-Merge`](/sql-reference/aggregate-functions/combinators#-merge), который используется для получения итогового - результата агрегации из промежуточных состояний. +промежуточное состояние, зависящее от реализации, которое может быть +сериализовано в тип данных `AggregateFunction` и сохранено в таблице. Обычно это +делается с помощью [материализованного представления](../../sql-reference/statements/create/view.md). +С типом `AggregateFunction` обычно используются два [комбинатора](/sql-reference/aggregate-functions/combinators) агрегатных функций: +- Комбинатор агрегатной функции [`-State`](/sql-reference/aggregate-functions/combinators#-state), который при добавлении к имени агрегатной + функции формирует промежуточные состояния `AggregateFunction`. +- Комбинатор агрегатной функции [`-Merge`](/sql-reference/aggregate-functions/combinators#-merge), который используется для получения + конечного результата агрегации из промежуточных состояний. ## Синтаксис @@ -40,10 +34,10 @@ AggregateFunction(имя_агрегатной_функции, типы_аргу **Параметры** * `aggregate_function_name` - Имя агрегатной функции. Если функция - параметризуемая, её параметры также должны быть указаны. + параметрическая, необходимо также указать её параметры. * `types_of_arguments` - Типы аргументов агрегатной функции. -например: +Например: ```sql CREATE TABLE t @@ -55,17 +49,18 @@ CREATE TABLE t ``` -## Использование +## Использование {#usage} ### Вставка данных Чтобы вставить данные в таблицу со столбцами типа `AggregateFunction`, вы можете использовать `INSERT SELECT` с агрегатными функциями и -комбинатором агрегатных функций [`-State`](/sql-reference/aggregate-functions/combinators#-state). +комбинатором агрегатных функций +[`-State`](/sql-reference/aggregate-functions/combinators#-state). -Например, чтобы вставить данные в столбцы типа `AggregateFunction(uniq, UInt64)` и -`AggregateFunction(quantiles(0.5, 0.9), UInt64)`, следует использовать следующие -агрегатные функции с этим комбинатором. +Например, чтобы вставить данные в столбцы типов `AggregateFunction(uniq, UInt64)` и +`AggregateFunction(quantiles(0.5, 0.9), UInt64)`, нужно использовать следующие +агрегатные функции с комбинаторами. ```sql uniqState(UserID) @@ -79,8 +74,15 @@ quantilesState(0.5, 0.9)(SendTiming) В результатах запроса `SELECT` значения типа `AggregateFunction` имеют зависящее от реализации двоичное представление во всех форматах вывода ClickHouse. -Если вы экспортируете данные, например, в формат `TabSeparated` с помощью запроса `SELECT`, -то затем этот дамп можно загрузить обратно с помощью запроса `INSERT`. +Существует специальный параметр уровня сессии `aggregate_function_input_format`, который позволяет формировать состояние из входных значений. +Он поддерживает следующие форматы: + +* `state` — двоичная строка с сериализованным состоянием (значение по умолчанию). + Если вы выгружаете данные, например, в формат `TabSeparated` с помощью запроса `SELECT`, + то этот дамп можно загрузить обратно с помощью запроса `INSERT`. +* `value` — формат будет ожидать одно значение аргумента агрегатной функции или, в случае нескольких аргументов, кортеж из них; это значение будет десериализовано для формирования соответствующего состояния. +* `array` — формат будет ожидать Array значений, как описано в варианте `value` выше; все элементы массива будут агрегированы для формирования состояния. + ### Выборка данных @@ -88,7 +90,7 @@ quantilesState(0.5, 0.9)(SendTiming) и те же агрегатные функции, что и при вставке данных, но с комбинатором [`-Merge`](/sql-reference/aggregate-functions/combinators#-merge). -Агрегатная функция с добавленным к ней комбинатором `-Merge` принимает набор +Агрегатная функция с добавленным комбинатором `-Merge` принимает набор состояний, объединяет их и возвращает результат полной агрегации данных. Например, следующие два запроса возвращают один и тот же результат: @@ -102,12 +104,11 @@ SELECT uniqMerge(state) FROM (SELECT uniqState(UserID) AS state FROM table GROUP ## Пример использования {#usage-example} -См. описание движка таблицы [AggregatingMergeTree](../../engines/table-engines/mergetree-family/aggregatingmergetree.md). - - +См. описание табличного движка [AggregatingMergeTree](../../engines/table-engines/mergetree-family/aggregatingmergetree.md). ## Связанные материалы {#related-content} -- Статья в блоге: [Использование агрегатных комбинаторов в ClickHouse](https://clickhouse.com/blog/aggregate-functions-combinators-in-clickhouse-for-arrays-maps-and-states) -- Комбинатор [MergeState](/sql-reference/aggregate-functions/combinators#-mergestate). -- Комбинатор [State](/sql-reference/aggregate-functions/combinators#-state). +- Запись в блоге: [Использование агрегатных комбинаторов в ClickHouse](https://clickhouse.com/blog/aggregate-functions-combinators-in-clickhouse-for-arrays-maps-and-states) +- [MergeState](/sql-reference/aggregate-functions/combinators#-mergestate) + комбинатор MergeState. +- [State](/sql-reference/aggregate-functions/combinators#-state) комбинатор State. \ No newline at end of file diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/data-types/data-types-binary-encoding.md b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/data-types/data-types-binary-encoding.md index c7b97db297b..5109a179dd4 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/data-types/data-types-binary-encoding.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/data-types/data-types-binary-encoding.md @@ -7,16 +7,12 @@ title: 'Спецификация двоичного кодирования ти doc_type: 'reference' --- - - # Спецификация двоичного кодирования типов данных -В этой спецификации описывается двоичный формат, который может использоваться для кодирования и декодирования типов данных ClickHouse. Этот формат используется при [двоичной сериализации](dynamic.md#binary-output-format) столбца `Dynamic`, а также может применяться во входных и выходных форматах [RowBinaryWithNamesAndTypes](/interfaces/formats/RowBinaryWithNamesAndTypes) и [Native](/interfaces/formats/Native) при соответствующих настройках. - -В таблице ниже описано, как каждый тип данных представляется в двоичном формате. Каждое кодирование типа данных состоит из одного байта, задающего тип, и некоторой дополнительной информации (опционально). -`var_uint` в двоичном кодировании означает, что размер закодирован с использованием сжатия Variable-Length Quantity. - +В этой спецификации описывается двоичный формат, который может использоваться для двоичного кодирования и декодирования типов данных ClickHouse. Этот формат используется в [двоичной сериализации](dynamic.md#binary-output-format) столбца `Dynamic` и может использоваться во входных и выходных форматах [RowBinaryWithNamesAndTypes](/interfaces/formats/RowBinaryWithNamesAndTypes) и [Native](/interfaces/formats/Native) при соответствующих настройках. +В таблице ниже описано, как каждый тип данных представляется в двоичном формате. Кодирование каждого типа данных состоит из 1 байта, обозначающего тип, и некоторой дополнительной необязательной информации. +`var_uint` в двоичном кодировании означает, что размер закодирован с использованием кодирования переменной длины (Variable-Length Quantity). | Тип данных ClickHouse | Двоичное кодирование | | --------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -74,56 +70,54 @@ doc_type: 'reference' | `Time64(P)` | `0x34` | | `QBit(T, N)` | `0x36` | +Для типа `JSON` байт `uint8_serialization_version` указывает версию сериализации. Сейчас версия всегда равна 0, но в будущем может измениться, если для типа `JSON` будут введены новые аргументы. +### Двоичное кодирование видов интервалов {#interval-kind-binary-encoding} -Для типа `JSON` байт `uint8_serialization_version` указывает версию сериализации. Сейчас версия всегда равна 0, но может измениться в будущем, если для типа `JSON` будут добавлены новые аргументы. +В таблице ниже показано, как в двоичном формате кодируются различные виды интервалов типа данных `Interval`. -### Двоичное кодирование вида интервала {#interval-kind-binary-encoding} +| Вид интервала | Двоичное кодирование | +|---------------|----------------------| +| `Nanosecond` | `0x00` | +| `Microsecond` | `0x01` | +| `Millisecond` | `0x02` | +| `Second` | `0x03` | +| `Minute` | `0x04` | +| `Hour` | `0x05` | +| `Day` | `0x06` | +| `Week` | `0x07` | +| `Month` | `0x08` | +| `Quarter` | `0x09` | +| `Year` | `0x1A` | -В таблице ниже описано, как кодируются различные виды интервалов типа данных `Interval`. - -| Вид интервала | Двоичное кодирование | -|----------------|----------------------| -| `Nanosecond` | `0x00` | -| `Microsecond` | `0x01` | -| `Millisecond` | `0x02` | -| `Second` | `0x03` | -| `Minute` | `0x04` | -| `Hour` | `0x05` | -| `Day` | `0x06` | -| `Week` | `0x07` | -| `Month` | `0x08` | -| `Quarter` | `0x09` | -| `Year` | `0x1A` | - -### Двоичное кодирование параметров агрегатных функций {#aggregate-function-parameter-binary-encoding} +### Бинарное кодирование параметров агрегатной функции {#aggregate-function-parameter-binary-encoding} В таблице ниже описано, как кодируются параметры `AggregateFunction` и `SimpleAggregateFunction`. -Кодирование параметра состоит из одного байта, указывающего тип параметра, и самого значения. - -| Тип параметра | Двоичное кодирование | -|--------------------------|---------------------------------------------------------------------------------------------------------------------------------| -| `Null` | `0x00` | -| `UInt64` | `0x01` | -| `Int64` | `0x02` | -| `UInt128` | `0x03` | -| `Int128` | `0x04` | -| `UInt128` | `0x05` | -| `Int128` | `0x06` | -| `Float64` | `0x07` | -| `Decimal32` | `0x08` | -| `Decimal64` | `0x09` | -| `Decimal128` | `0x0A` | -| `Decimal256` | `0x0B` | -| `String` | `0x0C` | -| `Array` | `0x0D...` | -| `Tuple` | `0x0E...` | -| `Map` | `0x0F...` | -| `IPv4` | `0x10` | -| `IPv6` | `0x11` | -| `UUID` | `0x12` | -| `Bool` | `0x13` | -| `Object` | `0x14...` | -| `AggregateFunctionState` | `0x15` | -| `Negative infinity` | `0xFE` | -| `Positive infinity` | `0xFF` | +Кодирование параметра состоит из одного байта, обозначающего тип параметра, и самого значения. + +| Тип параметра | Бинарное кодирование | +|--------------------------|--------------------------------------------------------------------------------------------------------------------------------| +| `Null` | `0x00` | +| `UInt64` | `0x01` | +| `Int64` | `0x02` | +| `UInt128` | `0x03` | +| `Int128` | `0x04` | +| `UInt256` | `0x05` | +| `Int256` | `0x06` | +| `Float64` | `0x07` | +| `Decimal32` | `0x08` | +| `Decimal64` | `0x09` | +| `Decimal128` | `0x0A` | +| `Decimal256` | `0x0B` | +| `String` | `0x0C` | +| `Array` | `0x0D...` | +| `Tuple` | `0x0E...` | +| `Map` | `0x0F...` | +| `IPv4` | `0x10` | +| `IPv6` | `0x11` | +| `UUID` | `0x12` | +| `Bool` | `0x13` | +| `Object` | `0x14...` | +| `AggregateFunctionState` | `0x15` | +| `Negative infinity` | `0xFE` | +| `Positive infinity` | `0xFF` | \ No newline at end of file diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/arithmetic-functions.md b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/arithmetic-functions.md index fa4a1e87cae..4d90aea3563 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/arithmetic-functions.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/arithmetic-functions.md @@ -1,34 +1,30 @@ --- -description: 'Справочник по арифметическим функциям' +description: 'Документация по арифметическим функциям' sidebar_label: 'Арифметика' slug: /sql-reference/functions/arithmetic-functions title: 'Арифметические функции' doc_type: 'reference' --- - - # Арифметические функции - - ## Обзор Арифметические функции работают для любых двух операндов типов `UInt8`, `UInt16`, `UInt32`, `UInt64`, `Int8`, `Int16`, `Int32`, `Int64`, `Float32` или `Float64`. Перед выполнением операции оба операнда приводятся к типу результата. Тип результата определяется следующим образом (если иное не указано -в документации по функции ниже): +в документации функции ниже): -* Если оба операнда имеют разрядность не более 32 бит, размер типа результата будет равен размеру следующего более крупного типа по сравнению с большим из двух - операндов (promotion целочисленного размера). Например, `UInt8 + UInt16 = UInt32` или `Float32 * Float32 = Float64`. -* Если один из операндов имеет разрядность 64 бита или больше, размер типа результата будет таким же, как размер большего из двух операндов. Например, +* Если оба операнда имеют разрядность до 32 бит включительно, размер типа результата будет соответствовать размеру следующего большего типа + по сравнению с большим из двух операндов (повышение разрядности целочисленного типа). Например, `UInt8 + UInt16 = UInt32` или `Float32 * Float32 = Float64`. +* Если один из операндов имеет 64 бита или больше, размер типа результата будет таким же, как у большего из двух операндов. Например, `UInt32 + UInt128 = UInt128` или `Float32 * Float64 = Float64`. -* Если один из операндов является знаковым типом, тип результата также будет знаковым, в противном случае — беззнаковым. Например, `UInt32 * Int32 = Int64`. +* Если один из операндов знаковый, тип результата также будет знаковым, в противном случае он будет беззнаковым. Например, `UInt32 * Int32 = Int64`. -Эти правила гарантируют, что тип результата будет наименьшим типом, который может представлять все возможные результаты. Хотя это и создаёт риск -переполнения около границ диапазона значений, оно обеспечивает быстрое выполнение вычислений с использованием максимальной нативной целочисленной -разрядности в 64 бита. Такое поведение также гарантирует совместимость со многими другими базами данных, которые предоставляют 64-битные целые числа -(BIGINT) как максимальный целочисленный тип. +Эти правила гарантируют, что тип результата будет наименьшим типом, который может представить все возможные результаты. Хотя это +создаёт риск переполнений вблизи границы диапазона значений, оно обеспечивает быстрое выполнение вычислений с использованием максимальной +нативной целочисленной разрядности 64 бита. Такое поведение также гарантирует совместимость со многими другими СУБД, которые предоставляют +64-битные целые числа (BIGINT) как наибольший целочисленный тип. Пример: @@ -42,1295 +38,14 @@ SELECT toTypeName(0), toTypeName(0 + 0), toTypeName(0 + 0 + 0), toTypeName(0 + 0 └───────────────┴────────────────────────┴─────────────────────────────────┴──────────────────────────────────────────┘ ``` -Переполнения возникают так же, как в C++. +Переполнения происходят так же, как и в C++. {/* - Содержимое приведённых ниже тегов во время сборки фреймворка документации - заменяется на документы, сгенерированные из system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. + Внутреннее содержимое тегов ниже во время сборки фреймворка документации + заменяется документацией, сгенерированной из system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. См.: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## abs - -Появилось в версии: v1.1 - -Вычисляет абсолютное значение `x`. Не влияет на результат, если `x` имеет беззнаковый тип. Если `x` имеет знаковый тип, возвращает беззнаковое число. - -**Синтаксис** - -```sql -abs(x) -``` - -**Аргументы** - -* `x` — число, для которого вычисляется абсолютное значение - -**Возвращаемое значение** - -Абсолютное значение `x` - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT abs(-0.5) -``` - -```response title=Response -0.5 -``` - - -## avg2 - -Добавлена в версии: v25.11 - -Вычисляет и возвращает среднее значение переданных аргументов. -Поддерживает числовые и временные типы. - -**Синтаксис** - -```sql -avg2(x1, x2]) -``` - -**Аргументы** - -* `x1, x2]` — Принимает два значения и вычисляет их среднее. - -**Возвращаемое значение** - -Возвращает среднее значение переданных аргументов, приведённое к наибольшему совместимому типу. - -**Примеры** - -**Числовые типы** - -```sql title=Query -SELECT avg2(toUInt8(3), 1.0) AS result, toTypeName(result) AS type; --- Возвращаемый тип — Float64, так как UInt8 необходимо привести к 64-битному типу для сравнения. -``` - -```response title=Response -┌─result─┬─type────┐ -│ 2 │ Float64 │ -└────────┴─────────┘ -``` - -**Типы Decimal** - -```sql title=Query -SELECT avg2(toDecimal32(1, 2), 2) AS result, toTypeName(result) AS type; -``` - -```response title=Response -┌─result─┬─type──────────┐ -│ 1.5 │ Decimal(9, 2) │ -└────────┴───────────────┘ -``` - -**Типы данных Date** - -```sql title=Query -SELECT avg2(toDate('2025-01-01'), toDate('2025-01-05')) AS result, toTypeName(result) AS type; -``` - -```response title=Response -┌─────result─┬─type─┐ -│ 2025-01-03 │ Date │ -└────────────┴──────┘ -``` - -**Типы данных DateTime** - -```sql title=Query -SELECT avg2(toDateTime('2025-01-01 00:00:00'), toDateTime('2025-01-03 12:00:00')) AS result, toTypeName(result) AS type; -``` - -```response title=Response -┌──────────────result─┬─type─────┐ -│ 2025-01-02 06:00:00 │ DateTime │ -└─────────────────────┴──────────┘ -``` - -**Типы данных Time64** - -```sql title=Query -SELECT avg2(toTime64('12:00:00', 0), toTime64('14:00:00', 0)) AS result, toTypeName(result) AS type; -``` - -```response title=Response -┌───result─┬─type──────┐ -│ 13:00:00 │ Time64(0) │ -└──────────┴───────────┘ -``` - - -## byteSwap - -Добавлена в: v23.10 - -Переставляет байты целого числа в обратном порядке, т. е. изменяет его [порядок байтов (endianness)](https://en.wikipedia.org/wiki/Endianness). - -Пример ниже можно разобрать следующим образом: - -1. Преобразовать десятичное целое число в эквивалентное шестнадцатеричное представление в формате big-endian, т. е. 3351772109 -> C7 C7 FB CD (4 байта) -2. Обратить порядок байт, т. е. C7 C7 FB CD -> CD FB C7 C7 -3. Преобразовать результат обратно в целое число, предполагая формат big-endian, т. е. CD FB C7 C7 -> 3455829959 - - Один из вариантов использования этой функции — разворот IPv4-адресов: - -```result -┌─toIPv4(byteSwap(toUInt32(toIPv4('205.251.199.199'))))─┐ -│ 199.199.251.205 │ -└───────────────────────────────────────────────────────┘ -``` - -**Синтаксис** - -```sql -byteSwap(x) -``` - -**Аргументы** - -* `x` — целочисленное значение. [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает `x` с байтами в обратном порядке. [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT byteSwap(3351772109) -``` - -```response title=Response -3455829959 -``` - -**8-битный** - -```sql title=Query -SELECT byteSwap(54) -``` - -```response title=Response -54 -``` - -**16 бит** - -```sql title=Query -SELECT byteSwap(4135) -``` - -```response title=Response -10000 -``` - -**32-битный** - -```sql title=Query -SELECT byteSwap(3351772109) -``` - -```response title=Response -3455829959 -``` - -**64-битный** - -```sql title=Query -SELECT byteSwap(123294967295) -``` - -```response title=Response -18439412204227788800 -``` - - -## divide - -Добавлена в версии v1.1 - -Вычисляет частное от двух значений `a` и `b`. Тип результата всегда [Float64](/sql-reference/data-types/float). -Целочисленное деление выполняется функцией `intDiv`. - -:::note -Деление на `0` возвращает `inf`, `-inf` или `nan`. -::: - -**Синтаксис** - -```sql -divide(x, y) -``` - -**Аргументы** - -* `x` — делимое, `y` — делитель - -**Возвращаемое значение** - -Частное от деления x на y - -**Примеры** - -**Деление двух чисел** - -```sql title=Query -SELECT divide(25,5) AS quotient, toTypeName(quotient) -``` - -```response title=Response -5 Float64 -``` - -**Деление на ноль** - -```sql title=Query -SELECT divide(25,0) -``` - -```response title=Response -inf -``` - - -## divideDecimal - -Впервые представлена в: v22.12 - -Выполняет деление двух десятичных чисел. Результирующее значение будет иметь тип [Decimal256](/sql-reference/data-types/decimal). -Масштаб результата может быть явно указан аргументом `result_scale` (константное целое число в диапазоне `[0, 76]`). Если он не указан, масштаб результата равен максимальному масштабу среди переданных аргументов. - -:::note -Эти функции работают значительно медленнее, чем обычная `divide`. -Если вам не нужна строго контролируемая точность и/или требуется быстрое выполнение вычислений, рассмотрите использование [divide](#divide). -::: - -**Синтаксис** - -```sql -divideDecimal(x, y[, result_scale]) -``` - -**Аргументы** - -* `x` — первое значение: [Decimal](/sql-reference/data-types/decimal). -* `y` — второе значение: [Decimal](/sql-reference/data-types/decimal). -* `result_scale` — масштаб результата. Тип: [Int/UInt](/sql-reference/data-types/int-uint). - -**Возвращаемое значение** - -Результат деления с указанным масштабом. Тип — [`Decimal256`](/sql-reference/data-types/decimal) - -**Примеры** - -**Пример 1** - -```sql title=Query -divideDecimal(toDecimal256(-12, 0), toDecimal32(2.1, 1), 10) -``` - -```response title=Response -┌─divideDecimal(toDecimal256(-12, 0), toDecimal32(2.1, 1), 10)─┐ -│ -5.7142857142 │ -└──────────────────────────────────────────────────────────────┘ -``` - -**Пример 2** - -```sql title=Query -SELECT toDecimal64(-12, 1) / toDecimal32(2.1, 1); -SELECT toDecimal64(-12, 1) as a, toDecimal32(2.1, 1) as b, divideDecimal(a, b, 1), divideDecimal(a, b, 5); -``` - -```response title=Response -┌─divide(toDecimal64(-12, 1), toDecimal32(2.1, 1))─┐ -│ -5.7 │ -└──────────────────────────────────────────────────┘ -┌───a─┬───b─┬─divideDecimal(toDecimal64(-12, 1), toDecimal32(2.1, 1), 1)─┬─divideDecimal(toDecimal64(-12, 1), toDecimal32(2.1, 1), 5)─┐ -│ -12 │ 2.1 │ -5.7 │ -5.71428 │ -└─────┴─────┴────────────────────────────────────────────────────────────┴────────────────────────────────────────────────────────────┘ -``` - - -## divideOrNull - -Введена в версии: v25.5 - -Аналог функции `divide`, но возвращает NULL при делении на ноль. - -**Синтаксис** - -```sql -divideOrNull(x, y) -``` - -**Аргументы** - -* `x` — делимое, `y` — делитель - -**Возвращаемое значение** - -Частное от x и y или NULL. - -**Примеры** - -**Деление на ноль** - -```sql title=Query -SELECT divideOrNull(25, 0) -``` - -```response title=Response -\N -``` - - -## gcd - -Введена в версии v1.1 - -Возвращает наибольший общий делитель двух значений a и b. - -Исключение выбрасывается при делении на ноль или при делении минимального -отрицательного числа на минус один. - -**Синтаксис** - -```sql -gcd(x, y) -``` - -**Аргументы** - -* `x` — первое целое число, `y` — второе целое число - -**Возвращаемое значение** - -Наибольший общий делитель `x` и `y`. - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT gcd(12, 18) -``` - -```response title=Response -6 -``` - - -## ifNotFinite - -Введена в версии: v20.3 - -Проверяет, является ли число с плавающей запятой конечным. - -Аналогичный результат можно получить с помощью [тернарного оператора](/sql-reference/functions/conditional-functions#if): `isFinite(x) ? x : y`. - -**Синтаксис** - -```sql -ifNotFinite(x,y) -``` - -**Аргументы** - -* `x` — Значение для проверки, является ли оно бесконечным. [`Float*`](/sql-reference/data-types/float) -* `y` — Альтернативное значение. [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -* `x`, если `x` является конечным. -* `y`, если `x` не является конечным. - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT 1/0 AS infimum, ifNotFinite(infimum,42) -``` - -```response title=Response -inf 42 -``` - - -## intDiv - -Введено в: v1.1 - -Выполняет целочисленное деление двух значений: `x` на `y`. Иными словами, -вычисляет частное, округлённое вниз до ближайшего меньшего целого числа. - -Результат имеет ту же разрядность, что и делимое (первый параметр). - -Исключение генерируется при делении на ноль, когда частное не помещается -в диапазон значений делимого, или при делении минимального отрицательного числа на минус один. - -**Синтаксис** - -```sql -intDiv(x, y) -``` - -**Аргументы** - -* `x` — левый операнд. - `y` — правый операнд. - -**Возвращаемое значение** - -Результат целочисленного деления `x` на `y`. - -**Примеры** - -**Целочисленное деление двух чисел с плавающей точкой** - -```sql title=Query -SELECT intDiv(toFloat64(1), 0.001) AS res, toTypeName(res) -``` - -```response title=Response -┌──res─┬─toTypeName(intDiv(toFloat64(1), 0.001))─┐ -│ 1000 │ Int64 │ -└──────┴─────────────────────────────────────────┘ -``` - -**Частное выходит за пределы диапазона делимого** - -```sql title=Query -SELECT -intDiv(1, 0.001) AS res, -toTypeName(res) -``` - -```response title=Response -Получено исключение от сервера (версия 23.2.1): -Код: 153. DB::Exception: Получено от localhost:9000. DB::Exception: -Невозможно выполнить целочисленное деление, поскольку результат будет бесконечным или слишком -большим числом: При обработке intDiv(1, 0.001) AS res, toTypeName(res). -(ILLEGAL_DIVISION) -``` - - -## intDivOrNull - -Добавлена в: v25.5 - -То же, что и `intDiv`, но возвращает NULL при делении на ноль или при делении -минимального отрицательного числа на минус один. - -**Синтаксис** - -```sql -intDivOrNull(x, y) -``` - -**Аргументы** - -* `x` — левый операнд. [`(U)Int*`](/sql-reference/data-types/int-uint) -* `y` — правый операнд. [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Результат целочисленного деления `x` на `y`, или NULL. - -**Примеры** - -**Целочисленное деление на ноль** - -```sql title=Query -SELECT intDivOrNull(1, 0) -``` - -```response title=Response -\N -``` - -**Деление минимального отрицательного числа на −1** - -```sql title=Query -SELECT intDivOrNull(-9223372036854775808, -1) -``` - -```response title=Response -\N -``` - - -## intDivOrZero - -Появилась в версии: v1.1 - -То же, что и `intDiv`, но возвращает ноль при делении на ноль или при делении -минимально возможного отрицательного числа на минус один. - -**Синтаксис** - -```sql -intDivOrZero(a, b) -``` - -**Аргументы** - -* `a` — левый операнд. [`(U)Int*`](/sql-reference/data-types/int-uint) -* `b` — правый операнд. [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Результат целочисленного деления a на b или ноль. - -**Примеры** - -**Целочисленное деление на ноль** - -```sql title=Query -SELECT intDivOrZero(1, 0) -``` - -```response title=Response -0 -``` - -**Деление на минус 1 минимального отрицательного числа** - -```sql title=Query -SELECT intDivOrZero(0.05, -1) -``` - -```response title=Response -0 -``` - - -## isFinite - -Добавлена в: v1.1 - -Возвращает `1`, если аргумент типа Float32 или Float64 конечен и не равен `NaN`, -в противном случае функция возвращает `0`. - -**Синтаксис** - -```sql -isFinite(x) -``` - -**Аргументы** - -* `x` — число, проверяемое на конечность. [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -`1`, если `x` не является бесконечным значением и не равен `NaN`, в противном случае `0`. - -**Примеры** - -**Проверка, является ли число конечным** - -```sql title=Query -SELECT isFinite(inf) -``` - -```response title=Response -0 -``` - - -## isInfinite - -Добавлена в: v1.1 - -Возвращает `1`, если аргумент типа Float32 или Float64 является бесконечным, в противном случае функция возвращает `0`. -Обратите внимание, что для значения `NaN` возвращается `0`. - -**Синтаксис** - -```sql -isInfinite(x) -``` - -**Аргументы** - -* `x` — число для проверки на бесконечность. [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -`1`, если `x` является бесконечным, иначе `0` (включая `NaN`). - -**Примеры** - -**Проверка, является ли число бесконечным** - -```sql title=Query -SELECT isInfinite(inf), isInfinite(NaN), isInfinite(10)) -``` - -```response title=Response -1 0 0 -``` - - -## isNaN - -Добавлена в: v1.1 - -Возвращает `1`, если аргумент типов Float32 или Float64 является `NaN`, в противном случае возвращает `0`. - -**Синтаксис** - -```sql -isNaN(x) -``` - -**Аргументы** - -* `x` — аргумент, который проверяется на `NaN`. [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -`1`, если `NaN`, иначе `0` - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT isNaN(NaN) -``` - -```response title=Response -1 -``` - - -## lcm - -Добавлена в: v1.1 - -Возвращает наименьшее общее кратное двух значений `x` и `y`. - -Исключение выбрасывается при делении на ноль или при делении минимального отрицательного значения на минус один. - -**Синтаксис** - -```sql -lcm(x, y) -``` - -**Аргументы** - -* `x` — Первое целое число. [`(U)Int*`](/sql-reference/data-types/int-uint) -* `y` — Второе целое число. [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает наименьшее общее кратное `x` и `y`. [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT lcm(6, 8) -``` - -```response title=Response -24 -``` - - -## max2 - -Добавлена в версии: v21.11 - -Возвращает большее из двух числовых значений `x` и `y`. - -**Синтаксис** - -```sql -max2(x, y) -``` - -**Аргументы** - -* `x` — первое значение [`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float), или [`Decimal`](/sql-reference/data-types/decimal) -* `y` — второе значение [`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float), или [`Decimal`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Возвращает большее из значений `x` и `y`. Тип результата — [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT max2(-1, 2) -``` - -```response title=Response -2 -``` - - -## midpoint - -Появилась в версии: v25.11 - -Вычисляет и возвращает среднее значение переданных аргументов. -Поддерживает числовые и временные типы. - -**Синтаксис** - -```sql -midpoint(x1[, x2, ...]) -``` - -**Аргументы** - -* `x1[, x2, ...]` — Принимает одно или несколько значений, по которым вычисляется среднее. - -**Возвращаемое значение** - -Возвращает среднее значение переданных аргументов, приведённое к наибольшему совместимому типу. - -**Примеры** - -**Числовые типы** - -```sql title=Query -SELECT midpoint(1, toUInt8(3), 0.5) AS result, toTypeName(result) AS type; --- Возвращаемый тип — Float64, так как UInt8 необходимо привести к 64-битному типу для сравнения. -``` - -```response title=Response -┌─result─┬─type────┐ -│ 1.5 │ Float64 │ -└────────┴─────────┘ -``` - -**Десятичные типы** - -```sql title=Query -SELECT midpoint(toDecimal32(1.5, 2), toDecimal32(1, 1), 2) AS result, toTypeName(result) AS type; -``` - -```response title=Response -┌─result─┬─type──────────┐ -│ 1.5 │ Decimal(9, 2) │ -└────────┴───────────────┘ -``` - -**Типы данных Date** - -```sql title=Query -SELECT midpoint(toDate('2025-01-01'), toDate('2025-01-05')) AS result, toTypeName(result) AS type; -``` - -```response title=Response -┌─────result─┬─type─┐ -│ 2025-01-03 │ Date │ -└────────────┴──────┘ -``` - -**Типы данных DateTime** - -```sql title=Query -SELECT midpoint(toDateTime('2025-01-01 00:00:00'), toDateTime('2025-01-03 12:00:00')) AS result, toTypeName(result) AS type; -``` - -```response title=Response -┌──────────────result─┬─type─────┐ -│ 2025-01-02 06:00:00 │ DateTime │ -└─────────────────────┴──────────┘ -``` - -**Типы данных Time64** - -```sql title=Query -SELECT midpoint(toTime64('12:00:00', 0), toTime64('14:00:00', 0)) AS result, toTypeName(result) AS type; -``` - -```response title=Response -┌───result─┬─type──────┐ -│ 13:00:00 │ Time64(0) │ -└──────────┴───────────┘ -``` - - -## min2 - -Добавлена в версии v21.11. - -Возвращает наименьшее из двух числовых значений `x` и `y`. - -**Синтаксис** - -```sql -min2(x, y) -``` - -**Аргументы** - -* `x` — первое значение [`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal`](/sql-reference/data-types/decimal) -* `y` — второе значение [`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Возвращает меньшее значение из `x` и `y`. [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT min2(-1, 2) -``` - -```response title=Response --1 -``` - - -## minus - -Добавлено в версии: v1.1 - -Вычисляет разность двух значений `a` и `b`. Результат всегда знаковый. -Аналогично функции plus, можно вычитать целое число из даты или даты со временем. -Также поддерживается вычитание дат со временем, в результате чего получается разница во времени между ними. - -**Синтаксис** - -```sql -minus(x, y) -``` - -**Аргументы** - -* `x` — уменьшаемое. -* `y` — вычитаемое. - -**Возвращаемое значение** - -x минус y - -**Примеры** - -**Вычитание двух чисел** - -```sql title=Query -SELECT minus(10, 5) -``` - -```response title=Response -5 -``` - -**Вычитание целого числа из даты** - -```sql title=Query -SELECT minus(toDate('2025-01-01'),5) -``` - -```response title=Response -2024-12-27 -``` - - -## modulo - -Введена в версии: v1.1 - -Вычисляет остаток от деления двух значений a на b. - -Тип результата — целое число, если оба аргумента являются целыми. Если -один из аргументов является числом с плавающей запятой, то тип результата — Float64. - -Остаток вычисляется так же, как в C++. Для отрицательных чисел используется усечённое деление. - -Исключение генерируется при делении на ноль или при делении минимального -отрицательного числа на минус один. - -**Синтаксис** - -```sql -modulo(a, b) -``` - -**Псевдонимы**: `mod` - -**Аргументы** - -* `a` — делимое -* `b` — делитель (модуль) - -**Возвращаемое значение** - -Остаток от `a % b` - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT modulo(5, 2) -``` - -```response title=Response -1 -``` - - -## moduloOrNull - -Впервые появилась в версии v25.5 - -Вычисляет остаток от деления `a` на `b`. Аналогична функции `modulo`, за исключением того, что `moduloOrNull` возвращает NULL, -если правый аргумент равен 0. - -**Синтаксис** - -```sql -moduloOrNull(x, y) -``` - -**Псевдонимы**: `modOrNull` - -**Аргументы** - -* `x` — Делимое. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) -* `y` — Делитель (модуль). [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает остаток от деления `x` на `y` или `NULL`, если делитель равен нулю. - -**Примеры** - -**moduloOrNull при делении на ноль** - -```sql title=Query -SELECT moduloOrNull(5, 0) -``` - -```response title=Response -\N -``` - - -## moduloOrZero - -Введена в версии v20.3 - -Подобна `modulo`, но возвращает ноль, когда делитель равен нулю, в отличие от функции `modulo`, которая в этом случае генерирует исключение. - -**Синтаксис** - -```sql -moduloOrZero(a, b) -``` - -**Аргументы** - -* `a` — делимое. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) -* `b` — делитель (модуль деления). [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает остаток от `a % b` или `0`, если делитель равен `0`. - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT moduloOrZero(5, 0) -``` - -```response title=Response -0 -``` - - -## multiply - -Добавлена в версии: v1.1 - -Вычисляет произведение двух значений `x` и `y`. - -**Синтаксис** - -```sql -multiply(x, y) -``` - -**Аргументы** - -* `x` — множитель. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal`](/sql-reference/data-types/decimal) -* `y` — множитель. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Возвращает произведение `x` и `y`. - -**Примеры** - -**Умножение двух чисел** - -```sql title=Query -SELECT multiply(5,5) -``` - -```response title=Response -25 -``` - - -## multiplyDecimal - -Добавлена в версии: v22.12 - -Выполняет операцию умножения над двумя десятичными числами. Значение результата будет иметь тип [Decimal256](/sql-reference/data-types/decimal). -Масштаб результата (scale) может быть явно задан аргументом `result_scale` (константное целочисленное значение типа Integer в диапазоне `[0, 76]`). Если он не задан, масштаб результата равен максимальному масштабу среди указанных аргументов. - -:::note -Эти функции работают значительно медленнее, чем обычная `multiply`. -Если вам не требуется контролируемая точность и/или необходима высокая скорость вычислений, рассмотрите возможность использования [multiply](#multiply) -::: - -**Синтаксис** - -```sql -multiplyDecimal(a, b[, result_scale]) -``` - -**Аргументы** - -* `a` — Первое значение. [`Decimal`](/sql-reference/data-types/decimal) -* `b` — Второе значение. [`Decimal`](/sql-reference/data-types/decimal) -* `result_scale` — Масштаб результата. [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Результат умножения с заданным масштабом. Тип: [`Decimal256`](/sql-reference/data-types/decimal) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT multiplyDecimal(toDecimal256(-12, 0), toDecimal32(-2.1, 1), 1) -``` - -```response title=Response -25.2 -``` - -**Отличия по сравнению с обычным умножением** - -```sql title=Query -SELECT multiplyDecimal(toDecimal256(-12, 0), toDecimal32(-2.1, 1), 1) -``` - -```response title=Response -┌─multiply(toDecimal64(-12.647, 3), toDecimal32(2.1239, 4))─┐ -│ -26.8609633 │ -└───────────────────────────────────────────────────────────┘ -┌─multiplyDecimal(toDecimal64(-12.647, 3), toDecimal32(2.1239, 4))─┐ -│ -26.8609 │ -└──────────────────────────────────────────────────────────────────┘ -``` - -**Переполнение десятичного типа** - -```sql title=Query -SELECT - toDecimal64(-12.647987876, 9) AS a, - toDecimal64(123.967645643, 9) AS b, - multiplyDecimal(a, b); -SELECT - toDecimal64(-12.647987876, 9) AS a, - toDecimal64(123.967645643, 9) AS b, - a * b; -``` - -```response title=Response -┌─────────────a─┬─────────────b─┬─multiplyDecimal(toDecimal64(-12.647987876, 9), toDecimal64(123.967645643, 9))─┐ -│ -12.647987876 │ 123.967645643 │ -1567.941279108 │ -└───────────────┴───────────────┴───────────────────────────────────────────────────────────────────────────────┘ -Получено исключение от сервера (версия 22.11.1): -Код: 407. DB::Exception: Получено от localhost:9000. DB::Exception: Переполнение при арифметической операции с типом Decimal: -При обработке toDecimal64(-12.647987876, 9) AS a, toDecimal64(123.967645643, 9) AS b, a * b. (DECIMAL_OVERFLOW) -``` - - -## negate - -Добавлена в: v1.1 - -Изменяет знак аргумента `x`. Результат всегда знаковый. - -**Синтаксис** - -```sql -negate(x) -``` - -**Аргументы** - -* `x` — значение, которое нужно изменить на противоположное. - -**Возвращаемое значение** - -Возвращает -x (противоположное значение x) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT negate(10) -``` - -```response title=Response --10 -``` - - -## plus - -Добавлена в: v1.1 - -Вычисляет сумму двух значений `x` и `y`. Псевдоним: `x + y` (оператор). -Можно складывать целое число с датой или датой и временем. В первом случае -операция увеличивает количество дней в дате, во втором случае -операция увеличивает количество секунд в дате и времени. - -**Синтаксис** - -```sql -plus(x, y) -``` - -**Аргументы** - -* `x` — левый операнд. - `y` — правый операнд. - -**Возвращаемое значение** - -Возвращает сумму x и y. - -**Примеры** - -**Сложение двух чисел** - -```sql title=Query -SELECT plus(5,5) -``` - -```response title=Response -10 -``` - -**Добавление целого числа к дате** - -```sql title=Query -SELECT plus(toDate('2025-01-01'),5) -``` - -```response title=Response -2025-01-06 -``` - - -## positiveModulo - -Появилась в: v22.11 - -Вычисляет остаток от деления `x` на `y`. Функция аналогична -`modulo`, за исключением того, что `positiveModulo` всегда возвращает неотрицательное число. - -**Синтаксис** - -```sql -positiveModulo(x, y) -``` - -**Псевдонимы**: `positive_modulo`, `pmod` - -**Аргументы** - -* `x` — Делимое. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal`](/sql-reference/data-types/decimal) -* `y` — Делитель (модуль). [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Возвращает разность между `x` и ближайшим целым числом, которое не превосходит `x` и кратно `y`. - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT positiveModulo(-1, 10) -``` - -```response title=Response -9 -``` - - -## positiveModuloOrNull - -Введена в версии: v25.5 - -Вычисляет остаток от деления `a` на `b`. Аналогична функции `positiveModulo`, за исключением того, что `positiveModuloOrNull` вернёт NULL, -если правый аргумент равен 0. - -**Синтаксис** - -```sql -positiveModuloOrNull(x, y) -``` - -**Псевдонимы**: `positive_modulo_or_null`, `pmodOrNull` - -**Аргументы** - -* `x` — Делимое. [`(U)Int*`](/sql-reference/data-types/int-uint)/[`Float32/64`](/sql-reference/data-types/float). -* `y` — Делитель (модуль). [`(U)Int*`](/sql-reference/data-types/int-uint)/[`Float32/64`](/sql-reference/data-types/float). - -**Возвращаемое значение** - -Возвращает разность между `x` и ближайшим целым числом, не превосходящим `x` и кратным `y`, или `null`, если делитель равен нулю. - -**Примеры** - -**positiveModuloOrNull** - -```sql title=Query -SELECT positiveModuloOrNull(5, 0) -``` - -```response title=Response -\N -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/array-functions.md b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/array-functions.md index 35c5dd77ca1..b327a40a3ca 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/array-functions.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/array-functions.md @@ -6,5035 +6,19 @@ title: 'Функции массивов' doc_type: 'reference' --- - - -# Функции для работы с массивами +# Функции массивов {/* - Внутреннее содержимое тегов ниже при сборке фреймворка документации - заменяется документацией, сгенерированной из system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. + Внутреннее содержимое приведённых ниже тегов заменяется на этапе сборки фреймворка документации + документами, сгенерированными из system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. См.: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## array - -Появилась в версии: v1.1 - -Создаёт массив из аргументов функции. - -Аргументы должны быть константами и иметь типы, для которых существует общий супертип. -Должен быть передан как минимум один аргумент, иначе будет непонятно, какой тип массива создавать. -Это означает, что вы не можете использовать эту функцию для создания пустого массива. Для этого используйте функцию `emptyArray*`. - -Для получения того же результата используйте оператор `[ ]`. - -**Синтаксис** - -```sql -array(x1 [, x2, ..., xN]) -``` - -**Аргументы** - -* `x1` — константное значение любого типа T. Если указан только этот аргумент, массив будет иметь тип T. -* `[, x2, ..., xN]` — дополнительные N константных значений с общим надтипом с `x1` - -**Возвращаемое значение** - -Возвращает массив, где 'T' — наименьший общий тип среди переданных аргументов. [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Корректное использование** - -```sql title=Query -SELECT array(toInt32(1), toUInt16(2), toInt8(3)) AS a, toTypeName(a) -``` - -```response title=Response -┌─a───────┬─toTypeName(a)─┐ -│ [1,2,3] │ Array(Int32) │ -└─────────┴───────────────┘ -``` - -**Неверное использование** - -```sql title=Query -SELECT array(toInt32(5), toDateTime('1998-06-16'), toInt8(5)) AS a, toTypeName(a) -``` - -```response title=Response -Получено исключение от сервера (версия 25.4.3): -Код: 386. DB::Exception: Получено от localhost:9000. DB::Exception: -Отсутствует общий супертип для типов Int32, DateTime, Int8 ... -``` - - -## arrayAUCPR - -Добавлена в: v20.4 - -Вычисляет площадь под кривой «точность–полнота» (precision–recall, PR). -Кривая точность–полнота строится путём отображения точности по оси Y и полноты по оси X для всех порогов. -Полученное значение лежит в диапазоне от 0 до 1, при этом большее значение соответствует более высокой эффективности модели. -PR AUC особенно полезна для несбалансированных наборов данных, обеспечивая более наглядное сравнение качества модели по сравнению с ROC AUC в таких случаях. -Для получения дополнительной информации смотрите [здесь](https://developers.google.com/machine-learning/glossary#pr-auc-area-under-the-pr-curve), [здесь](https://developers.google.com/machine-learning/crash-course/classification/roc-and-auc#expandable-1) и [здесь](https://en.wikipedia.org/wiki/Receiver_operating_characteristic#Area_under_the_curve). - -**Синтаксис** - -```sql -arrayAUCPR(scores, labels[, partial_offsets]) -``` - -**Псевдонимы**: `arrayPRAUC` - -**Аргументы** - -* `cores` — Оценки, которые выдаёт модель предсказания. [`Array((U)Int*)`](/sql-reference/data-types/array) или [`Array(Float*)`](/sql-reference/data-types/array) -* `labels` — Метки объектов, обычно 1 для положительного и 0 для отрицательного примера. [`Array((U)Int*)`](/sql-reference/data-types/array) или [`Array(Enum)`](/sql-reference/data-types/array) -* `partial_offsets` — -* Необязательный аргумент. [`Array(T)`](/sql-reference/data-types/array) из трёх неотрицательных целых чисел для вычисления частичной площади под PR-кривой (эквивалент вертикальной полосе в PR-пространстве) вместо полной AUC. Этот параметр полезен для распределённого вычисления PR AUC. Массив должен содержать следующие элементы [`higher_partitions_tp`, `higher_partitions_fp`, `total_positives`]. - * `higher_partitions_tp`: Количество положительных меток в партициях с более высокими оценками. - * `higher_partitions_fp`: Количество отрицательных меток в партициях с более высокими оценками. - * `total_positives`: Общее количество положительных примеров во всём наборе данных. - -:::note -Когда используется `arr_partial_offsets`, `arr_scores` и `arr_labels` должны представлять только одну партицию всего набора данных, содержащую некоторый интервал оценок. -Набор данных должен быть разделён на смежные партиции, где каждая партиция содержит подмножество данных, оценки которого попадают в определённый диапазон. -Например: - -* Одна партиция может содержать все оценки в диапазоне [0, 0.5). -* Другая партиция может содержать оценки в диапазоне [0.5, 1.0]. - ::: - -**Возвращаемое значение** - -Возвращает площадь под кривой «точность–полнота» (PR). [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT arrayAUCPR([0.1, 0.4, 0.35, 0.8], [0, 0, 1, 1]); -``` - -```response title=Response -┌─arrayAUCPR([0.1, 0.4, 0.35, 0.8], [0, 0, 1, 1])─┐ -│ 0.8333333333333333 │ -└─────────────────────────────────────────────────┘ -``` - - -## arrayAll - -Добавлена в версии: v1.1 - -Возвращает `1`, если лямбда-выражение `func(x [, y1, y2, ... yN])` возвращает `true` для всех элементов. В противном случае возвращает `0`. - -**Синтаксис** - -```sql -arrayAll(func(x[, y1, ..., yN]), source_arr[, cond1_arr, ... , condN_arr]) -``` - -**Аргументы** - -* `func(x[, y1, ..., yN])` — лямбда-функция, которая применяется к элементам исходного массива (`x`) и массивам условий (`y`). [`Лямбда-функция`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `source_arr` — исходный массив для обработки. [`Array(T)`](/sql-reference/data-types/array) -* `cond1_arr, ...` — Необязательно. N массивов условий, которые передают дополнительные аргументы в лямбда-функцию. [`Array(T)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает `1`, если лямбда-функция возвращает true для всех элементов, в противном случае — `0`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Все элементы соответствуют условию** - -```sql title=Query -SELECT arrayAll(x, y -> x=y, [1, 2, 3], [1, 2, 3]) -``` - -```response title=Response -1 -``` - -**Не все элементы совпадают** - -```sql title=Query -SELECT arrayAll(x, y -> x=y, [1, 2, 3], [1, 1, 1]) -``` - -```response title=Response -0 -``` - - -## arrayAvg - -Введена в версии v21.1 - -Возвращает среднее значение элементов исходного массива. - -Если указана лямбда-функция `func`, возвращает среднее значение результатов её применения к элементам массива. - -**Синтаксис** - -```sql -arrayAvg([func(x[, y1, ..., yN])], source_arr[, cond1_arr, ... , condN_arr]) -``` - -**Аргументы** - -* `func(x[, y1, ..., yN])` — Необязательный параметр. Лямбда-функция, которая применяется к элементам исходного массива (`x`) и массивам условий (`y`). [`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `source_arr` — Исходный массив для обработки. [`Array(T)`](/sql-reference/data-types/array) -* `[, cond1_arr, ... , condN_arr]` — Необязательный параметр. N массивов условий, предоставляющих дополнительные аргументы лямбда-функции. [`Array(T)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает среднее значение элементов исходного массива или среднее значение элементов результатов лямбда-функции, если она указана. [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Простой пример** - -```sql title=Query -SELECT arrayAvg([1, 2, 3, 4]); -``` - -```response title=Response -2.5 -``` - -**Использование с лямбда-функцией** - -```sql title=Query -SELECT arrayAvg(x, y -> x*y, [2, 3], [2, 3]) AS res; -``` - -```response title=Response -6.5 -``` - - -## arrayCompact - -Впервые представлена в версии v20.1 - -Удаляет последовательные дублирующиеся элементы из массива, включая значения `null`. Порядок значений в результирующем массиве определяется порядком в исходном массиве. - -**Синтаксис** - -```sql -arrayCompact(arr) -``` - -**Аргументы** - -* `arr` — массив, из которого нужно удалить дубликаты. [`Array(T)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает массив без дубликатов значений [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT arrayCompact([1, 1, nan, nan, 2, 3, 3, 3]); -``` - -```response title=Response -[1,nan,2,3] -``` - - -## arrayConcat - -Введён в версии: v1.1 - -Объединяет массивы, переданные в качестве аргументов. - -**Синтаксис** - -```sql -arrayConcat(arr1 [, arr2, ... , arrN]) -``` - -**Аргументы** - -* `arr1 [, arr2, ... , arrN]` — N массивов для конкатенации. [`Array(T)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает один объединённый массив из переданных массивов. [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT arrayConcat([1, 2], [3, 4], [5, 6]) AS res -``` - -```response title=Response -[1, 2, 3, 4, 5, 6] -``` - - -## arrayCount - -Появилась в версии: v1.1 - -Возвращает количество элементов, для которых `func(arr1[i], ..., arrN[i])` возвращает true. -Если `func` не задана, возвращает количество ненулевых элементов в массиве. - -`arrayCount` — это [функция высшего порядка](/sql-reference/functions/overview#higher-order-functions). - -**Синтаксис** - -```sql -arrayCount([func, ] arr1, ...) -``` - -**Аргументы** - -* `func` — Необязательный параметр. Функция, применяемая к каждому элементу массива/массивов. [`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `arr1, ..., arrN` — N массивов. [`Array(T)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает количество элементов, для которых `func` возвращает значение `true`. В противном случае возвращает количество ненулевых элементов в массиве. [`UInt32`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT arrayCount(x -> (x % 2), groupArray(number)) FROM numbers(10) -``` - -```response title=Response -5 -``` - - -## arrayCumSum - -Введена в версии: v1.1 - -Возвращает массив частичных (нарастающих) сумм элементов исходного массива. Если указана лямбда-функция, сумма вычисляется как сумма результатов применения лямбды к элементам массива в каждой позиции. - -**Синтаксис** - -```sql -arrayCumSum([func,] arr1[, arr2, ... , arrN]) -``` - -**Аргументы** - -* `func` — необязательный параметр. Лямбда-функция, применяемая к элементам массива для каждой позиции. [`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `arr1` — исходный массив числовых значений. [`Array(T)`](/sql-reference/data-types/array) -* `[arr2, ..., arrN]` — необязательные параметры. Дополнительные массивы того же размера, передаваемые в лямбда-функцию в качестве аргументов, если она указана. [`Array(T)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает массив частичных сумм элементов исходного массива. Тип результата соответствует числовому типу входного массива. [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT arrayCumSum([1, 1, 1, 1]) AS res -``` - -```response title=Response -[1, 2, 3, 4] -``` - -**С лямбда-функцией** - -```sql title=Query -SELECT arrayCumSum(x -> x * 2, [1, 2, 3]) AS res -``` - -```response title=Response -[2, 6, 12] -``` - - -## arrayCumSumNonNegative - -Введена в версии: v18.12 - -Возвращает массив частичных (накопительных) сумм элементов исходного массива, при этом любая промежуточная отрицательная сумма заменяется на ноль. Если указана лямбда-функция, сумма вычисляется на основе результата применения лямбды к элементам массива в каждой позиции. - -**Синтаксис** - -```sql -arrayCumSumNonNegative([func,] arr1[, arr2, ... , arrN]) -``` - -**Аргументы** - -* `func` — Необязательный параметр. Лямбда-функция, применяемая к элементам массива для каждой позиции. [`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `arr1` — Исходный массив числовых значений. [`Array(T)`](/sql-reference/data-types/array) -* `[arr2, ..., arrN]` — Необязательные. Дополнительные массивы того же размера, передаваемые как аргументы лямбда-функции, если она указана. [`Array(T)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает массив частичных сумм элементов исходного массива, при этом любое отрицательное значение накопленной суммы заменяется на ноль. Тип результата соответствует числовому типу входного массива. [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT arrayCumSumNonNegative([1, 1, -4, 1]) AS res -``` - -```response title=Response -[1, 2, 0, 1] -``` - -**С лямбдой** - -```sql title=Query -SELECT arrayCumSumNonNegative(x -> x * 2, [1, -2, 3]) AS res -``` - -```response title=Response -[2, 0, 6] -``` - - -## arrayDifference - -Функция появилась в версии v1.1. - -Вычисляет массив разностей между соседними элементами массива. -Первый элемент результирующего массива будет 0, второй — `arr[1] - arr[0]`, третий — `arr[2] - arr[1]` и т. д. -Тип элементов результирующего массива определяется правилами вывода типа для операции вычитания (например, `UInt8` - `UInt8` = `Int16`). - -**Синтаксис** - -```sql -arrayDifference(arr) -``` - -**Аргументы** - -* `arr` — Массив, для которого вычисляют разности между соседними элементами. [`Array(T)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает массив разностей между соседними элементами массива [`UInt*`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT arrayDifference([1, 2, 3, 4]); -``` - -```response title=Response -[0,1,1,1] -``` - -**Пример переполнения при типе результата Int64** - -```sql title=Query -SELECT arrayDifference([0, 10000000000000000000]); -``` - -```response title=Response -┌─arrayDifference([0, 10000000000000000000])─┐ -│ [0,-8446744073709551616] │ -└────────────────────────────────────────────┘ -``` - - -## arrayDistinct - -Введена в версии: v1.1 - -Возвращает массив, содержащий только уникальные элементы исходного массива. - -**Синтаксис** - -```sql -arrayDistinct(arr) -``` - -**Аргументы** - -* `arr` — Массив, из которого нужно извлечь различные элементы. [`Array(T)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает массив, содержащий различные элементы [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT arrayDistinct([1, 2, 2, 3, 1]); -``` - -```response title=Response -[1,2,3] -``` - - -## arrayDotProduct - -Добавлена в версии: v23.5 - -Возвращает скалярное произведение двух массивов. - -:::note -Размеры двух векторов должны быть равны. Массивы и кортежи (Tuples) также могут содержать элементы разных типов. -::: - -**Синтаксис** - -```sql -arrayDotProduct(v1, v2) -``` - -**Аргументы** - -* `v1` — первый вектор. [`Array((U)Int* | Float* | Decimal)`](/sql-reference/data-types/array) или [`Tuple((U)Int* | Float* | Decimal)`](/sql-reference/data-types/tuple) -* `v2` — второй вектор. [`Array((U)Int* | Float* | Decimal)`](/sql-reference/data-types/array) или [`Tuple((U)Int* | Float* | Decimal)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Скалярное произведение двух векторов. - -:::note -Тип возвращаемого значения определяется типом аргументов. Если `Array` или `Tuple` содержат элементы разных типов, тип результата — их супертип. -::: - -[`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal`](/sql-reference/data-types/decimal) - -**Примеры** - -**Пример для Array** - -```sql title=Query -SELECT arrayDotProduct([1, 2, 3], [4, 5, 6]) AS res, toTypeName(res); -``` - -```response title=Response -32 UInt16 -``` - -**Пример tuple** - -```sql title=Query -SELECT dotProduct((1::UInt16, 2::UInt8, 3::Float32),(4::Int16, 5::Float32, 6::UInt8)) AS res, toTypeName(res); -``` - -```response title=Response -32 Float64 -``` - - -## arrayElement - -Впервые появился в версии: v1.1 - -Возвращает элемент переданного массива с индексом `n`, где `n` может быть целым числом любого типа. -Если индекс выходит за границы массива, возвращается значение по умолчанию (0 для чисел, пустая строка для строк и т. д.), -за исключением случаев, когда аргументом является неконстантный массив, а индекс — константа 0. В этом случае будет выдана ошибка `Array indices are 1-based`. - -:::note -Массивы в ClickHouse индексируются с единицы. -::: - -Поддерживаются отрицательные индексы. В этом случае выбирается соответствующий элемент, нумерация которого ведётся с конца. Например, `arr[-1]` — это последний элемент массива. - -Оператор `[n]` обладает той же функциональностью. - -**Синтаксис** - -```sql -arrayElement(arr, n) -``` - -**Аргументы** - -* `arr` — массив для поиска. [`Array(T)`](/sql-reference/data-types/array). - `n` — позиция извлекаемого элемента. [`(U)Int*`](/sql-reference/data-types/int-uint). - -**Возвращаемое значение** - -Возвращает один объединённый массив из переданных аргументов-массивов [`Array(T)`](/sql-reference/data-types/array). - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT arrayElement(arr, 2) FROM (SELECT [1, 2, 3] AS arr) -``` - -```response title=Response -2 -``` - -**Отрицательные индексы** - -```sql title=Query -SELECT arrayElement(arr, -1) FROM (SELECT [1, 2, 3] AS arr) -``` - -```response title=Response -3 -``` - -**Использование обозначения [n]** - -```sql title=Query -SELECT arr[2] FROM (SELECT [1, 2, 3] AS arr) -``` - -```response title=Response -2 -``` - -**Выход индекса за границы массива** - -```sql title=Query -SELECT arrayElement(arr, 4) FROM (SELECT [1, 2, 3] AS arr) -``` - -```response title=Response -0 -``` - - -## arrayElementOrNull - -Впервые появилась в версии v1.1 - -Возвращает элемент указанного массива с индексом `n`, где `n` может быть значением любого целочисленного типа. -Если индекс выходит за границы массива, вместо значения по умолчанию возвращается `NULL`. - -:::note -Массивы в ClickHouse индексируются с единицы. -::: - -Поддерживаются отрицательные индексы. В этом случае выбирается соответствующий элемент, отсчитываемый с конца массива. Например, `arr[-1]` — это последний элемент массива. - -**Синтаксис** - -```sql -arrayElementOrNull(arrays) -``` - -**Аргументы** - -* `arrays` — Произвольное количество аргументов-массивов. [`Array`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает один объединённый массив из переданных массивов. [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT arrayElementOrNull(arr, 2) FROM (SELECT [1, 2, 3] AS arr) -``` - -```response title=Response -2 -``` - -**Отрицательные индексы** - -```sql title=Query -SELECT arrayElementOrNull(arr, -1) FROM (SELECT [1, 2, 3] AS arr) -``` - -```response title=Response -3 -``` - -**Индекс выходит за пределы массива** - -```sql title=Query -SELECT arrayElementOrNull(arr, 4) FROM (SELECT [1, 2, 3] AS arr) -``` - -```response title=Response -NULL -``` - - -## arrayEnumerate - -Введена в версии: v1.1 - -Возвращает массив `[1, 2, 3, ..., length(arr)]` - -Эта функция обычно используется вместе с предложением [`ARRAY JOIN`](/sql-reference/statements/select/array-join). Она позволяет посчитать что-либо только -один раз для каждого массива после применения `ARRAY JOIN`. -Эту функцию также можно использовать во функциях высшего порядка. Например, вы можете использовать её, чтобы получить индексы элементов массива, которые удовлетворяют условию. - -**Синтаксис** - -```sql -arrayEnumerate(arr) -``` - -**Аргументы** - -* `arr` — массив, который требуется пронумеровать. [`Array`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает массив `[1, 2, 3, ..., length(arr)]`. [`Array(UInt32)`](/sql-reference/data-types/array) - -**Примеры** - -**Простейший пример с ARRAY JOIN** - -```sql title=Query -CREATE TABLE test -( - `id` UInt8, - `tag` Array(String), - `version` Array(String) -) -ENGINE = MergeTree -ORDER BY id; - -INSERT INTO test VALUES (1, ['release-stable', 'dev', 'security'], ['2.4.0', '2.6.0-alpha', '2.4.0-sec1']); - -SELECT - id, - tag, - version, - seq -FROM test -ARRAY JOIN - tag, - version, - arrayEnumerate(tag) AS seq -``` - -```response title=Response -┌─id─┬─tag────────────┬─version─────┬─seq─┐ -│ 1 │ release-stable │ 2.4.0 │ 1 │ -│ 1 │ dev │ 2.6.0-alpha │ 2 │ -│ 1 │ security │ 2.4.0-sec1 │ 3 │ -└────┴────────────────┴─────────────┴─────┘ -``` - - -## arrayEnumerateDense - -Появилась в версии: v18.12 - -Возвращает массив того же размера, что и исходный, показывающий позицию первого вхождения каждого элемента в исходный массив. - -**Синтаксис** - -```sql -arrayEnumerateDense(arr) -``` - -**Аргументы** - -* `arr` — массив для перебора. [`Array(T)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает массив того же размера, что и `arr`, в котором указано, где каждый элемент впервые встречается в исходном массиве. [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT arrayEnumerateDense([10, 20, 10, 30]) -``` - -```response title=Response -[1,2,1,3] -``` - - -## arrayEnumerateDenseRanked - -Добавлено в версии: v20.1 - -Возвращает массив того же размера, что и исходный, элементы которого указывают, в каком месте каждый элемент впервые встречается в исходном массиве. Позволяет выполнять нумерацию многомерного массива с возможностью указать глубину обхода массива. - -**Синтаксис** - -```sql -arrayEnumerateDenseRanked(clear_depth, arr, max_array_depth) -``` - -**Аргументы** - -* `clear_depth` — перечислять элементы на указанном уровне отдельно. Должен быть меньше или равен `max_arr_depth`. [`UInt*`](/sql-reference/data-types/int-uint) -* `arr` — N-мерный массив для перечисления. [`Array(T)`](/sql-reference/data-types/array) -* `max_array_depth` — максимальная эффективная глубина. Должна быть меньше или равна глубине `arr`. [`UInt*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает массив, который указывает, где каждый элемент впервые появляется в исходном массиве. [`Array`](/sql-reference/data-types/array) - -**Примеры** - -**Базовое использование** - -```sql title=Query --- При clear_depth=1 и max_array_depth=1 результат идентичен результату функции arrayEnumerateDense. - -SELECT arrayEnumerateDenseRanked(1,[10, 20, 10, 30],1); -``` - -```response title=Response -[1,2,1,3] -``` - -**Использование с многомерным массивом** - -```sql title=Query --- В этом примере arrayEnumerateDenseRanked используется для получения массива, который показывает для каждого элемента --- многомерного массива его порядковый номер среди элементов с одинаковым значением. --- Для первой строки переданного массива [10, 10, 30, 20] соответствующая первая строка результата — [1, 1, 2, 3], --- что означает: 10 — это первое встреченное число в позициях 1 и 2, 30 — второе встреченное число в позиции 3, --- а 20 — третье встреченное число в позиции 4. --- Для второй строки [40, 50, 10, 30] соответствующая вторая строка результата — [4,5,1,2], что означает: 40 --- и 50 — это четвёртое и пятое встреченные числа в позициях 1 и 2 этой строки, ещё одно 10 --- (первое встреченное число) находится в позиции 3, а 30 (второе встреченное число) — в последней позиции. - -SELECT arrayEnumerateDenseRanked(1,[[10,10,30,20],[40,50,10,30]],2); -``` - -```response title=Response -[[1,1,2,3],[4,5,1,2]] -``` - -**Пример с повышенным значением clear_depth** - -```sql title=Query --- Изменение clear_depth=2 приводит к тому, что перечисление выполняется отдельно для каждой строки заново. - -SELECT arrayEnumerateDenseRanked(2,[[10,10,30,20],[40,50,10,30]],2); -``` - -```response title=Response -[[1, 1, 2, 3], [1, 2, 3, 4]] -``` - - -## arrayEnumerateUniq - -Появилась в версии: v1.1 - -Возвращает массив того же размера, что и исходный массив, указывая для каждого элемента его порядковый номер среди элементов с тем же значением. - -Эта функция полезна при использовании `ARRAY JOIN` и агрегации элементов массива. - -Функция может принимать в качестве аргументов несколько массивов одинакового размера. В этом случае уникальность определяется для кортежей элементов, находящихся на одинаковых позициях во всех массивах. - -**Синтаксис** - -```sql -arrayEnumerateUniq(arr1[, arr2, ... , arrN]) -``` - -**Аргументы** - -* `arr1` — Первый массив для обработки. [`Array(T)`](/sql-reference/data-types/array) -* `arr2, ...` — Необязательный параметр. Дополнительные массивы того же размера для обеспечения уникальности кортежей. [`Array(UInt32)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает массив, в котором каждый элемент — это позиция среди элементов с тем же значением или кортежем. [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT arrayEnumerateUniq([10, 20, 10, 30]); -``` - -```response title=Response -[1, 1, 2, 1] -``` - -**Несколько массивов** - -```sql title=Query -SELECT arrayEnumerateUniq([1, 1, 1, 2, 2, 2], [1, 1, 2, 1, 1, 2]); -``` - -```response title=Response -[1,2,1,1,2,1] -``` - -**Агрегация с ARRAY JOIN** - -```sql title=Query --- Для каждого идентификатора цели вычисляется количество конверсий (каждый элемент во вложенной структуре данных Goals представляет собой достигнутую цель, которую мы называем конверсией) --- и количество сессий. Без ARRAY JOIN количество сессий подсчитывалось бы как sum(Sign). Однако в данном случае --- строки умножаются на вложенную структуру Goals, поэтому для подсчёта каждой сессии только один раз применяется условие на --- значение функции arrayEnumerateUniq(Goals.ID). - -SELECT - Goals.ID AS GoalID, - sum(Sign) AS Reaches, - sumIf(Sign, num = 1) AS Visits -FROM test.visits -ARRAY JOIN - Goals, - arrayEnumerateUniq(Goals.ID) AS num -WHERE CounterID = 160656 -GROUP BY GoalID -ORDER BY Reaches DESC -LIMIT 10 -``` - -```response title=Response -┌──GoalID─┬─Reaches─┬─Visits─┐ -│ 53225 │ 3214 │ 1097 │ -│ 2825062 │ 3188 │ 1097 │ -│ 56600 │ 2803 │ 488 │ -│ 1989037 │ 2401 │ 365 │ -│ 2830064 │ 2396 │ 910 │ -│ 1113562 │ 2372 │ 373 │ -│ 3270895 │ 2262 │ 812 │ -│ 1084657 │ 2262 │ 345 │ -│ 56599 │ 2260 │ 799 │ -│ 3271094 │ 2256 │ 812 │ -└─────────┴─────────┴────────┘ -``` - - -## arrayEnumerateUniqRanked - -Впервые появилась в версии: v20.1 - -Возвращает массив (или многомерный массив) с теми же размерами, что и исходный массив, -указывая для каждого элемента, какую позицию он занимает среди элементов с тем же значением. -Позволяет выполнять перечисление многомерного массива с возможностью задать глубину просмотра массива. - -**Синтаксис** - -```sql -arrayEnumerateUniqRanked(clear_depth, arr, max_array_depth) -``` - -**Аргументы** - -* `clear_depth` — Перечислять элементы на указанном уровне по отдельности. Положительное целое число, меньшее или равное `max_arr_depth`. [`UInt*`](/sql-reference/data-types/int-uint) -* `arr` — N-мерный массив для перечисления. [`Array(T)`](/sql-reference/data-types/array) -* `max_array_depth` — Максимальная эффективная глубина. Положительное целое число, меньшее или равное глубине `arr`. [`UInt*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает N-мерный массив того же размера, что и `arr`, в котором каждый элемент показывает позицию этого элемента среди других элементов с тем же значением. [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример 1** - -```sql title=Query --- При clear_depth=1 и max_array_depth=1 результат arrayEnumerateUniqRanked --- идентичен результату, который вернула бы функция arrayEnumerateUniq для того же массива. - -SELECT arrayEnumerateUniqRanked(1, [1, 2, 1], 1); -``` - -```response title=Response -[1, 1, 2] -``` - -**Пример 2** - -```sql title=Query --- при clear_depth=1 и max_array_depth=1 результат arrayEnumerateUniqRanked --- идентичен результату, который вернула бы функция arrayEnumerateUniq для того же массива. - -SELECT arrayEnumerateUniqRanked(1, [[1, 2, 3], [2, 2, 1], [3]], 2);", "[[1, 1, 1], [2, 3, 2], [2]] -``` - -```response title=Response -[1, 1, 2] -``` - -**Пример 3** - -```sql title=Query --- В этом примере arrayEnumerateUniqRanked используется для получения массива, который показывает --- для каждого элемента многомерного массива его порядковый номер среди элементов --- с таким же значением. Для первой строки переданного массива [1, 2, 3] соответствующий --- результат — [1, 1, 1], что означает, что значения 1, 2 и 3 встречаются впервые. --- Для второй строки переданного массива [2, 2, 1] соответствующий результат — [2, 3, 3], --- что означает, что значение 2 встречается во второй и третий раз, а значение 1 — --- во второй раз. Аналогично, для третьей строки переданного массива [3] --- соответствующий результат — [2], что означает, что значение 3 встречается во второй раз. - -SELECT arrayEnumerateUniqRanked(1, [[1, 2, 3], [2, 2, 1], [3]], 2); -``` - -```response title=Response -[[1, 1, 1], [2, 3, 2], [2]] -``` - -**Пример 4** - -```sql title=Query --- Изменение clear_depth=2 приводит к раздельной нумерации элементов для каждой строки. -SELECT arrayEnumerateUniqRanked(2,[[1, 2, 3],[2, 2, 1],[3]], 2); -``` - -```response title=Response -[[1, 1, 1], [1, 2, 1], [1]] -``` - - -## arrayExcept - -Введена в версии v25.9 - -Возвращает массив, содержащий элементы из `source`, которые отсутствуют в `except`, при этом сохраняется исходный порядок. - -Эта функция выполняет операцию разности множеств между двумя массивами. Для каждого элемента в `source` она проверяет, существует ли этот элемент в `except` (с использованием точного сравнения). Если нет, элемент включается в результат. - -Операция обладает следующими свойствами: - -1. Порядок элементов из `source` сохраняется -2. Дубликаты в `source` сохраняются, если их нет в `except` -3. NULL обрабатывается как отдельное значение - -**Синтаксис** - -```sql -arrayExcept(source, except) -``` - -**Аргументы** - -* `source` — исходный массив с элементами, подлежащими фильтрации. [`Array(T)`](/sql-reference/data-types/array) -* `except` — массив, содержащий элементы, которые нужно исключить из результата. [`Array(T)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает массив того же типа, что и входной массив, содержащий элементы из `source`, отсутствующие в `except`. [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Базовый пример** - -```sql title=Query -SELECT arrayExcept([1, 2, 3, 2, 4], [3, 5]) -``` - -```response title=Response -[1, 2, 2, 4] -``` - -**with_nulls1** - -```sql title=Query -SELECT arrayExcept([1, NULL, 2, NULL], [2]) -``` - -```response title=Response -[1, NULL, NULL] -``` - -**with_nulls2** - -```sql title=Query -SELECT arrayExcept([1, NULL, 2, NULL], [NULL, 2, NULL]) -``` - -```response title=Response -[1] -``` - -**строки** - -```sql title=Query -SELECT arrayExcept(['apple', 'banana', 'cherry'], ['banana', 'date']) -``` - -```response title=Response -['яблоко', 'вишня'] -``` - - -## arrayExists - -Введена в версии: v1.1 - -Возвращает `1`, если в исходном массиве есть хотя бы один элемент, для которого `func(x[, y1, y2, ... yN])` возвращает `true`. В противном случае возвращает `0`. - -**Синтаксис** - -```sql -arrayExists(func(x[, y1, ..., yN]), source_arr[, cond1_arr, ... , condN_arr]) -``` - -**Аргументы** - -* `func(x[, y1, ..., yN])` — лямбда-функция, которая применяется к элементам исходного массива (`x`) и массивов условий (`y`). [`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `source_arr` — исходный массив для обработки. [`Array(T)`](/sql-reference/data-types/array) -* `[, cond1_arr, ... , condN_arr]` — необязательный параметр. N массивов условий, передающих дополнительные аргументы лямбда-функции. [`Array(T)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает `1`, если лямбда-функция возвращает значение `true` хотя бы для одного элемента, и `0` в противном случае. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT arrayExists(x, y -> x=y, [1, 2, 3], [0, 0, 0]) -``` - -```response title=Response -0 -``` - - -## arrayFill - -Добавлена в: v20.1 - -Функция `arrayFill` последовательно обрабатывает исходный массив от первого -элемента до последнего, вычисляя лямбда‑условие на каждой позиции с использованием -элементов из исходного массива и массива условий. Когда лямбда‑функция -возвращает false на позиции i, функция заменяет этот элемент элементом на позиции -i-1 из текущего состояния массива. Первый элемент всегда сохраняется -независимо от каких‑либо условий. - -**Синтаксис** - -```sql -arrayFill(func(x [, y1, ..., yN]), source_arr[, cond1_arr, ... , condN_arr]) -``` - -**Аргументы** - -* `func(x [, y1, ..., yN])` — лямбда-функция `func(x [, y1, y2, ... yN]) → F(x [, y1, y2, ... yN])`, которая применяется к элементам исходного массива (`x`) и массивов-условий (`y`). [`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `source_arr` — исходный массив для обработки. [`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `[, cond1_arr, ... , condN_arr]` — Необязательные. N массивов-условий, которые передаются как дополнительные аргументы лямбда-функции. [`Array(T)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает массив [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример с одним массивом** - -```sql title=Query -SELECT arrayFill(x -> not isNull(x), [1, null, 2, null]) AS res -``` - -```response title=Response -[1, 1, 2, 2] -``` - -**Пример с двумя массивами** - -```sql title=Query -SELECT arrayFill(x, y, z -> x > y AND x < z, [5, 3, 6, 2], [4, 7, 1, 3], [10, 2, 8, 5]) AS res -``` - -```response title=Response -[5, 5, 6, 6] -``` - - -## arrayFilter - -Появился в версии: v1.1 - -Возвращает массив, содержащий только те элементы исходного массива, для которых лямбда‑функция возвращает `true`. - -**Синтаксис** - -```sql -arrayFilter(func(x[, y1, ..., yN]), source_arr[, cond1_arr, ... , condN_arr])] -``` - -**Аргументы** - -* `func(x[, y1, ..., yN])` — лямбда-функция, которая применяется к элементам исходного массива (`x`) и массивов условий (`y`). [`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `source_arr` — исходный массив для обработки. [`Array(T)`](/sql-reference/data-types/array) -* `[, cond1_arr, ... , condN_arr]` — необязательный параметр. N массивов условий, предоставляющих дополнительные аргументы для лямбда-функции. [`Array(T)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает подмассив исходного массива [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример 1** - -```sql title=Query -SELECT arrayFilter(x -> x LIKE '%World%', ['Hello', 'abc World']) AS res -``` - -```response title=Response -['abc World'] -``` - -**Пример 2** - -```sql title=Query -SELECT - arrayFilter( - (i, x) -> x LIKE '%World%', - arrayEnumerate(arr), - ['Hello', 'abc World'] AS arr) - AS res -``` - -```response title=Response -[2] -``` - - -## arrayFirst - -Впервые появилось в версии v1.1 - -Возвращает первый элемент исходного массива, для которого `func(x[, y1, y2, ... yN])` возвращает true, иначе возвращает значение по умолчанию. - -**Синтаксис** - -```sql -arrayFirst(func(x[, y1, ..., yN]), source_arr[, cond1_arr, ... , condN_arr]) -``` - -**Аргументы** - -* `func(x[, y1, ..., yN])` — лямбда-функция, которая работает с элементами исходного массива (`x`) и массивов условий (`y`). [Lambda function](/sql-reference/functions/overview#arrow-operator-and-lambda). - `source_arr` — исходный массив для обработки. [`Array(T)`](/sql-reference/data-types/array). - `[, cond1_arr, ... , condN_arr]` — необязательный параметр. N массивов условий, передающих дополнительные аргументы в лямбда-функцию. [`Array(T)`](/sql-reference/data-types/array). - -**Возвращаемое значение** - -Возвращает первый элемент исходного массива, для которого `λ` истинно, в противном случае возвращает значение по умолчанию типа `T`. - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT arrayFirst(x, y -> x=y, ['a', 'b', 'c'], ['c', 'b', 'a']) -``` - -```response title=Response -b -``` - -**Совпадений не найдено** - -```sql title=Query -SELECT arrayFirst(x, y -> x=y, [0, 1, 2], [3, 3, 3]) AS res, toTypeName(res) -``` - -```response title=Response -0 UInt8 -``` - - -## arrayFirstIndex - -Появилась в версии: v1.1 - -Возвращает индекс первого элемента исходного массива, для которого `func(x[, y1, y2, ... yN])` возвращает `true`, в противном случае возвращает `0`. - -**Синтаксис** - -```sql -arrayFirstIndex(func(x[, y1, ..., yN]), source_arr[, cond1_arr, ... , condN_arr]) -``` - -**Аргументы** - -* `func(x[, y1, ..., yN])` — lambda‑функция, которая работает с элементами исходного массива (`x`) и массивов условий (`y`). [Лямбда‑функция](/sql-reference/functions/overview#arrow-operator-and-lambda). - `source_arr` — исходный массив для обработки. [`Array(T)`](/sql-reference/data-types/array). - `[, cond1_arr, ... , condN_arr]` — необязательные N массивов условий, передающих дополнительные аргументы в lambda‑функцию. [`Array(T)`](/sql-reference/data-types/array). - -**Возвращаемое значение** - -Возвращает индекс первого элемента исходного массива, для которого `func` возвращает `true`, в противном случае возвращает `0` [`UInt32`](/sql-reference/data-types/int-uint). - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT arrayFirstIndex(x, y -> x=y, ['a', 'b', 'c'], ['c', 'b', 'a']) -``` - -```response title=Response -2 -``` - -**Совпадений не найдено** - -```sql title=Query -SELECT arrayFirstIndex(x, y -> x=y, ['a', 'b', 'c'], ['d', 'e', 'f']) -``` - -```response title=Response -0 -``` - - -## arrayFirstOrNull - -Введена в версии: v1.1 - -Возвращает первый элемент исходного массива, для которого `func(x[, y1, y2, ... yN])` возвращает `true`, в противном случае — `NULL`. - -**Синтаксис** - -```sql -arrayFirstOrNull(func(x[, y1, ..., yN]), source_arr[, cond1_arr, ... , condN_arr]) -``` - -**Аргументы** - -* `func(x[, y1, ..., yN])` — лямбда-функция, которая применяется к элементам исходного массива (`x`) и массивов-условий (`y`). [`Лямбда-функция`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `source_arr` — исходный массив для обработки. [`Array(T)`](/sql-reference/data-types/array) -* `[, cond1_arr, ... , condN_arr]` — необязательный параметр. N массивов-условий, предоставляющих дополнительные аргументы для лямбда-функции. [`Array(T)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает первый элемент исходного массива, для которого `func` возвращает истину, иначе возвращает `NULL`. - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT arrayFirstOrNull(x, y -> x=y, ['a', 'b', 'c'], ['c', 'b', 'a']) -``` - -```response title=Response -b -``` - -**Совпадений не найдено** - -```sql title=Query -SELECT arrayFirstOrNull(x, y -> x=y, [0, 1, 2], [3, 3, 3]) AS res, toTypeName(res) -``` - -```response title=Response -NULL Nullable(UInt8) -``` - - -## arrayFlatten - -Введена в версии: v20.1 - -Преобразует массив массивов в плоский массив. - -Функция: - -* Применяется к массивам любой глубины вложенности. -* Не изменяет массивы, которые уже являются плоскими. - -Плоский массив содержит все элементы из всех исходных массивов. - -**Синтаксис** - -```sql -arrayFlatten(arr) -``` - -**Псевдонимы**: `flatten` - -**Аргументы** - -* `arr` — многомерный массив. [`Array(Array(T))`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает плоский массив, полученный из многомерного массива [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT arrayFlatten([[[1]], [[2], [3]]]); -``` - -```response title=Response -[1, 2, 3] -``` - - -## arrayFold - -Появилась в версии: v23.10 - -Применяет лямбда-функцию к одному или нескольким массивам одинаковой длины и накапливает результат в аккумуляторе. - -**Синтаксис** - -```sql -arrayFold(λ(acc, x1 [, x2, x3, ... xN]), arr1 [, arr2, arr3, ... arrN], acc) -``` - -**Аргументы** - -* `λ(x, x1 [, x2, x3, ... xN])` — лямбда-функция `λ(acc, x1 [, x2, x3, ... xN]) → F(acc, x1 [, x2, x3, ... xN])`, где `F` — операция, применяемая к `acc` и значениям массива `x` с последующим переиспользованием результата `acc`. [`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `arr1 [, arr2, arr3, ... arrN]` — N массивов, над которыми выполняется операция. [`Array(T)`](/sql-reference/data-types/array) -* `acc` — аккумулятор, значение того же типа, что и тип возвращаемого значения лямбда-функции. - -**Возвращаемое значение** - -Возвращает конечное значение `acc`. - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT arrayFold(acc,x -> acc + x*2, [1, 2, 3, 4], 3::Int64) AS res; -``` - -```response title=Response -23 -``` - -**Числа Фибоначчи** - -```sql title=Query -SELECT arrayFold(acc, x -> (acc.2, acc.2 + acc.1),range(number),(1::Int64, 0::Int64)).1 AS fibonacci FROM numbers(1,10); -``` - -```response title=Response -┌─fibonacci─┐ -│ 0 │ -│ 1 │ -│ 1 │ -│ 2 │ -│ 3 │ -│ 5 │ -│ 8 │ -│ 13 │ -│ 21 │ -│ 34 │ -└───────────┘ -``` - -**Пример с несколькими массивами** - -```sql title=Query -SELECT arrayFold( -(acc, x, y) -> acc + (x * y), -[1, 2, 3, 4], -[10, 20, 30, 40], -0::Int64 -) AS res; -``` - -```response title=Response -300 -``` - - -## arrayIntersect - -Появилась в версии: v1.1 - -Принимает несколько массивов и возвращает массив с элементами, которые присутствуют во всех исходных массивах. Результат содержит только уникальные значения. - -**Синтаксис** - -```sql -arrayIntersect(arr, arr1, ..., arrN) -``` - -**Аргументы** - -* `arrN` — N массивов, из которых создаётся новый массив. [`Array(T)`](/sql-reference/data-types/array). - -**Возвращаемое значение** - -Возвращает массив, содержащий уникальные элементы, присутствующие во всех N массивах. [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT -arrayIntersect([1, 2], [1, 3], [2, 3]) AS empty_intersection, -arrayIntersect([1, 2], [1, 3], [1, 4]) AS non_empty_intersection -``` - -```response title=Response -┌─non_empty_intersection─┬─empty_intersection─┐ -│ [] │ [1] │ -└────────────────────────┴────────────────────┘ -``` - - -## arrayJaccardIndex - -Впервые появилась в версии v23.7 - -Возвращает [индекс Жаккара](https://en.wikipedia.org/wiki/Jaccard_index) двух массивов. - -**Синтаксис** - -```sql -arrayJaccardIndex(arr_x, arr_y) -``` - -**Аргументы** - -* `arr_x` — первый массив. [`Array(T)`](/sql-reference/data-types/array) -* `arr_y` — второй массив. [`Array(T)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает индекс Жаккара для массивов `arr_x` и `arr_y` [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT arrayJaccardIndex([1, 2], [2, 3]) AS res -``` - -```response title=Response -0.3333333333333333 -``` - - -## arrayJoin - -Впервые представлено в: v1.1 - -Функция `arrayJoin` принимает строку, содержащую массив, и разворачивает этот массив, создавая несколько строк — по одной для каждого элемента массива. -В отличие от обычных функций в ClickHouse, которые преобразуют входные значения в выходные в пределах одной строки, -агрегатные функции принимают группу строк и «сжимают» или «сводят» их в одну сводную строку -(или в одно значение в сводной строке, если используются с `GROUP BY`). - -Все значения в столбцах просто копируются, за исключением значений в столбце, к которому применяется эта функция; -они заменяются соответствующим значением из массива. - -**Синтаксис** - -```sql -arrayJoin(arr) -``` - -**Аргументы** - -* `arr` — Массив для разворачивания. [`Array(T)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает набор строк, полученных из `arr`. - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT arrayJoin([1, 2, 3] AS src) AS dst, 'Hello', src -``` - -```response title=Response -┌─dst─┬─\'Hello\'─┬─src─────┐ -│ 1 │ Hello │ [1,2,3] │ -│ 2 │ Hello │ [1,2,3] │ -│ 3 │ Hello │ [1,2,3] │ -└─────┴───────────┴─────────┘ -``` - -**arrayJoin влияет на все части запроса** - -```sql title=Query --- Функция arrayJoin влияет на все секции запроса, включая секцию WHERE. Обратите внимание на результат 2, хотя подзапрос вернул 1 строку. - -SELECT sum(1) AS impressions -FROM -( - SELECT ['Istanbul', 'Berlin', 'Bobruisk'] AS cities -) -WHERE arrayJoin(cities) IN ['Istanbul', 'Berlin']; -``` - -```response title=Response -┌─impressions─┐ -│ 2 │ -└─────────────┘ -``` - -**Использование нескольких функций arrayJoin** - -```sql title=Query -- Запрос может использовать несколько функций arrayJoin. В этом случае преобразование выполняется многократно, и количество строк увеличивается соответственно. - -SELECT - sum(1) AS impressions, - arrayJoin(cities) AS city, - arrayJoin(browsers) AS browser -FROM -( - SELECT - ['Istanbul', 'Berlin', 'Bobruisk'] AS cities, - ['Firefox', 'Chrome', 'Chrome'] AS browsers -) -GROUP BY - 2, - 3 -``` - -```response title=Response -┌─impressions─┬─city─────┬─browser─┐ -│ 2 │ Istanbul │ Chrome │ -│ 1 │ Istanbul │ Firefox │ -│ 2 │ Berlin │ Chrome │ -│ 1 │ Berlin │ Firefox │ -│ 2 │ Bobruisk │ Chrome │ -│ 1 │ Bobruisk │ Firefox │ -└─────────────┴──────────┴─────────┘ -``` - -**Неожиданные результаты из-за оптимизаций** - -```sql title=Query --- Использование нескольких arrayJoin с одинаковым выражением может не дать ожидаемого результата из-за оптимизаций. --- В таких случаях рекомендуется модифицировать повторяющееся выражение массива дополнительными операциями, не влияющими на результат объединения. -- например: arrayJoin(arraySort(arr)), arrayJoin(arrayConcat(arr, [])) - -SELECT - arrayJoin(dice) as first_throw, - /* arrayJoin(dice) as second_throw */ -- технически корректно, но приведёт к уничтожению набора результатов - arrayJoin(arrayConcat(dice, [])) as second_throw -- выражение намеренно изменено для принудительного повторного вычисления -FROM ( - SELECT [1, 2, 3, 4, 5, 6] as dice -); -``` - - -```response title=Response -┌─первый_бросок─┬─второй_бросок─┐ -│ 1 │ 1 │ -│ 1 │ 2 │ -│ 1 │ 3 │ -│ 1 │ 4 │ -│ 1 │ 5 │ -│ 1 │ 6 │ -│ 2 │ 1 │ -│ 2 │ 2 │ -│ 2 │ 3 │ -│ 2 │ 4 │ -│ 2 │ 5 │ -│ 2 │ 6 │ -│ 3 │ 1 │ -│ 3 │ 2 │ -│ 3 │ 3 │ -│ 3 │ 4 │ -│ 3 │ 5 │ -│ 3 │ 6 │ -│ 4 │ 1 │ -│ 4 │ 2 │ -│ 4 │ 3 │ -│ 4 │ 4 │ -│ 4 │ 5 │ -│ 4 │ 6 │ -│ 5 │ 1 │ -│ 5 │ 2 │ -│ 5 │ 3 │ -│ 5 │ 4 │ -│ 5 │ 5 │ -│ 5 │ 6 │ -│ 6 │ 1 │ -│ 6 │ 2 │ -│ 6 │ 3 │ -│ 6 │ 4 │ -│ 6 │ 5 │ -│ 6 │ 6 │ -└───────────────┴───────────────┘ -``` - -**Использование синтаксиса ARRAY JOIN** - -```sql title=Query --- Обратите внимание на синтаксис ARRAY JOIN в запросе `SELECT` ниже — он предоставляет более широкие возможности. --- ARRAY JOIN позволяет одновременно преобразовывать несколько массивов с одинаковым количеством элементов. - -SELECT - sum(1) AS impressions, - city, - browser -FROM -( - SELECT - ['Istanbul', 'Berlin', 'Bobruisk'] AS cities, - ['Firefox', 'Chrome', 'Chrome'] AS browsers -) -ARRAY JOIN - cities AS city, - browsers AS browser -GROUP BY - 2, - 3 -``` - -```response title=Response -┌─impressions─┬─city─────┬─browser─┐ -│ 1 │ Istanbul │ Firefox │ -│ 1 │ Berlin │ Chrome │ -│ 1 │ Bobruisk │ Chrome │ -└─────────────┴──────────┴─────────┘ -``` - -**Использование типа Tuple** - -```sql title=Query --- Также можно использовать кортеж (Tuple) - -SELECT - sum(1) AS impressions, - (arrayJoin(arrayZip(cities, browsers)) AS t).1 AS city, - t.2 AS browser -FROM -( - SELECT - ['Istanbul', 'Berlin', 'Bobruisk'] AS cities, - ['Firefox', 'Chrome', 'Chrome'] AS browsers -) -GROUP BY - 2, - 3 -``` - -```response title=Response -┌─impressions─┬─city─────┬─browser─┐ -│ 1 │ Istanbul │ Firefox │ -│ 1 │ Berlin │ Chrome │ -│ 1 │ Bobruisk │ Chrome │ -└─────────────┴──────────┴─────────┘ -``` - - -## arrayLast - -Добавлена в версии: v1.1 - -Возвращает последний элемент исходного массива, для которого лямбда-функция `func(x [, y1, y2, ... yN])` возвращает `true`, в противном случае возвращает значение по умолчанию. - -**Синтаксис** - -```sql -arrayLast(func(x[, y1, ..., yN]), source[, cond1, ... , condN_arr]) -``` - -**Аргументы** - -* `func(x[, y1, ..., yN])` — лямбда-функция, применяемая к элементам исходного массива (`x`) и массивам условий (`y`). [Lambda function](/sql-reference/functions/overview#arrow-operator-and-lambda). - `source` — исходный массив для обработки. [`Array(T)`](/sql-reference/data-types/array). - `[, cond1, ... , condN]` — необязательный параметр. N массивов условий, передающих дополнительные аргументы в лямбда-функцию. [`Array(T)`](/sql-reference/data-types/array). - -**Возвращаемое значение** - -Возвращает последний элемент исходного массива, для которого `func` возвращает `true`, иначе возвращает значение по умолчанию типа `T`. - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT arrayLast(x, y -> x=y, ['a', 'b', 'c'], ['a', 'b', 'c']) -``` - -```response title=Response -c -``` - -**Совпадений не найдено** - -```sql title=Query -SELECT arrayFirst(x, y -> x=y, [0, 1, 2], [3, 3, 3]) AS res, toTypeName(res) -``` - -```response title=Response -0 UInt8 -``` - - -## arrayLastIndex - -Добавлена в версии: v1.1 - -Возвращает индекс последнего элемента в исходном массиве, для которого `func(x[, y1, y2, ... yN])` возвращает true, в противном случае возвращает '0'. - -**Синтаксис** - -```sql -arrayLastIndex(func(x[, y1, ..., yN]), source_arr[, cond1_arr, ... , condN_arr]) -``` - -**Аргументы** - -* `func(x[, y1, ..., yN])` — лямбда-функция, применяемая к элементам исходного массива (`x`) и массивов-условий (`y`). [`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `source_arr` — исходный массив для обработки. [`Array(T)`](/sql-reference/data-types/array) -* `[, cond1_arr, ... , condN_arr]` — необязательный параметр. N массивов-условий, передающих дополнительные аргументы в лямбда-функцию. [`Array(T)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает индекс последнего элемента исходного массива, для которого `func` возвращает `true`, в противном случае возвращает `0` [`UInt32`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT arrayLastIndex(x, y -> x=y, ['a', 'b', 'c'], ['a', 'b', 'c']); -``` - -```response title=Response -3 -``` - -**Совпадений не найдено** - -```sql title=Query -SELECT arrayLastIndex(x, y -> x=y, ['a', 'b', 'c'], ['d', 'e', 'f']); -``` - -```response title=Response -0 -``` - - -## arrayLastOrNull - -Добавлена в версии v1.1 - -Возвращает последний элемент исходного массива, для которого лямбда `func(x [, y1, y2, ... yN])` возвращает true, в противном случае возвращает `NULL`. - -**Синтаксис** - -```sql -arrayLastOrNull(func(x[, y1, ..., yN]), source_arr[, cond1_arr, ... , condN_arr]) -``` - -**Аргументы** - -* `func(x [, y1, ..., yN])` — лямбда-функция, которая обрабатывает элементы исходного массива (`x`) и массивов условий (`y`). [Лямбда‑функция](/sql-reference/functions/overview#arrow-operator-and-lambda). - -- `source_arr` — исходный массив для обработки. [`Array(T)`](/sql-reference/data-types/array). -- `[, cond1_arr, ... , condN_arr]` — необязательно. N массивов условий, предоставляющих дополнительные аргументы лямбда‑функции. [`Array(T)`](/sql-reference/data-types/array). - -**Возвращаемое значение** - -Возвращает последний элемент исходного массива, для которого значение `λ` ложно, иначе возвращает `NULL`. - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT arrayLastOrNull(x, y -> x=y, ['a', 'b', 'c'], ['a', 'b', 'c']) -``` - -```response title=Response -c -``` - -**Совпадений не найдено** - -```sql title=Query -SELECT arrayLastOrNull(x, y -> x=y, [0, 1, 2], [3, 3, 3]) AS res, toTypeName(res) -``` - -```response title=Response -NULL Nullable(UInt8) -``` - - -## arrayLevenshteinDistance - -Добавлена в версии: v25.4 - -Вычисляет расстояние Левенштейна между двумя массивами. - -**Синтаксис** - -```sql -arrayLevenshteinDistance(from, to) -``` - -**Аргументы** - -* `from` — первый массив. [`Array(T)`](/sql-reference/data-types/array). - `to` — второй массив. [`Array(T)`](/sql-reference/data-types/array). - -**Возвращаемое значение** - -Расстояние Левенштейна между первым и вторым массивами. [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT arrayLevenshteinDistance([1, 2, 4], [1, 2, 3]) -``` - -```response title=Response -1 -``` - - -## arrayLevenshteinDistanceWeighted - -Введена в версии: v25.4 - -Вычисляет расстояние Левенштейна для двух массивов с настраиваемыми весами для каждого элемента. -Число элементов в массиве и число весов должно совпадать. - -**Синтаксис** - -```sql -arrayLevenshteinDistanceWeighted(from, to, from_weights, to_weights) -``` - -**Аргументы** - -* `from` — первый массив. [`Array(T)`](/sql-reference/data-types/array). - `to` — второй массив. [`Array(T)`](/sql-reference/data-types/array). - `from_weights` — веса элементов первого массива. [`Array((U)Int*|Float*)`](/sql-reference/data-types/array) -* `to_weights` — веса элементов второго массива. [`Array((U)Int*|Float*)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Расстояние Левенштейна между первым и вторым массивами с пользовательскими весами для каждого элемента типа [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT arrayLevenshteinDistanceWeighted(['A', 'B', 'C'], ['A', 'K', 'L'], [1.0, 2, 3], [3.0, 4, 5]) -``` - -```response title=Response -14 -``` - - -## arrayMap - -Введена в версии: v1.1 - -Возвращает массив, полученный из исходных массивов путём применения лямбда-функции к каждому элементу. - -**Синтаксис** - -```sql -arrayMap(func, arr) -``` - -**Аргументы** - -* `func` — лямбда-функция, которая применяется к элементам исходного массива (`x`) и массивов условий (`y`). [`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `arr` — N массивов для обработки. [`Array(T)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает массив из результатов выполнения лямбда-функции [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT arrayMap(x -> (x + 2), [1, 2, 3]) as res; -``` - -```response title=Response -[3, 4, 5] -``` - -**Создание кортежа из элементов разных массивов** - -```sql title=Query -SELECT arrayMap((x, y) -> (x, y), [1, 2, 3], [4, 5, 6]) AS res -``` - -```response title=Response -[(1, 4),(2, 5),(3, 6)] -``` - - -## arrayMax - -Добавлена в: v21.1 - -Возвращает максимальный элемент исходного массива. - -Если указана лямбда-функция `func`, возвращает максимальный элемент среди результатов её применения. - -**Синтаксис** - -```sql -arrayMax([func(x[, y1, ..., yN])], source_arr[, cond1_arr, ... , condN_arr]) -``` - -**Аргументы** - -* `func(x[, y1, ..., yN])` — Необязательный параметр. Лямбда-функция, которая применяется к элементам исходного массива (`x`) и массивов условий (`y`). [`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `source_arr` — Исходный массив для обработки. [`Array(T)`](/sql-reference/data-types/array) -* `[, cond1_arr, ... , condN_arr]` — Необязательный параметр. N массивов условий, передающих дополнительные аргументы лямбда-функции. [`Array(T)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает максимальный элемент исходного массива или максимальный элемент среди результатов лямбда-функции, если она задана. - -**Примеры** - -**Базовый пример** - -```sql title=Query -SELECT arrayMax([5, 3, 2, 7]); -``` - -```response title=Response -7 -``` - -**Использование с лямбда-функцией** - -```sql title=Query -SELECT arrayMax(x, y -> x/y, [4, 8, 12, 16], [1, 2, 1, 2]); -``` - -```response title=Response -12 -``` - - -## arrayMin - -Впервые появилась в версии: v21.1 - -Возвращает минимальный элемент исходного массива. - -Если указана лямбда-функция `func`, возвращает минимальный элемент среди результатов этой функции. - -**Синтаксис** - -```sql -arrayMin([func(x[, y1, ..., yN])], source_arr[, cond1_arr, ... , condN_arr]) -``` - -**Аргументы** - -* `func(x[, y1, ..., yN])` — Необязательный параметр. Лямбда-функция, которая применяется к элементам исходного массива (`x`) и массивов условий (`y`). [`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `source_arr` — Исходный массив для обработки. [`Array(T)`](/sql-reference/data-types/array) -* `cond1_arr, ...` — Необязательные параметры. N массивов условий, предоставляющих дополнительные аргументы для лямбда-функции. [`Array(T)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает минимальный элемент исходного массива или минимальный элемент среди результатов лямбда-функции, если она задана. - -**Примеры** - -**Базовый пример** - -```sql title=Query -SELECT arrayMin([5, 3, 2, 7]); -``` - -```response title=Response -2 -``` - -**Использование с лямбда-функцией** - -```sql title=Query -SELECT arrayMin(x, y -> x/y, [4, 8, 12, 16], [1, 2, 1, 2]); -``` - -```response title=Response -4 -``` - - -## arrayNormalizedGini - -Введена в версии: v25.1 - -Вычисляет нормированный коэффициент Джини. - -**Синтаксис** - -```sql -arrayNormalizedGini(predicted, label) -``` - -**Аргументы** - -* `predicted` — Предсказанное значение. [`Array(T)`](/sql-reference/data-types/array) -* `label` — Фактическое значение. [`Array(T)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Кортеж, содержащий коэффициент Джини для предсказанных значений, коэффициент Джини для нормализованных значений и нормализованный коэффициент Джини (= отношение первых двух указанных коэффициентов Джини) [`Tuple(Float64, Float64, Float64)`](/sql-reference/data-types/tuple) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT arrayNormalizedGini([0.9, 0.3, 0.8, 0.7],[6, 1, 0, 2]); -``` - -```response title=Response -(0.18055555555555558, 0.2638888888888889, 0.6842105263157896) -``` - - -## arrayPartialReverseSort - -Появилась в версии: v23.2 - -Эта функция аналогична `arrayReverseSort`, но с дополнительным аргументом `limit`, который позволяет выполнять частичную сортировку. - -:::tip -Чтобы сохранить только отсортированные элементы, используйте `arrayResize`. -::: - -**Синтаксис** - -```sql -arrayPartialReverseSort([f,] arr [, arr1, ... ,arrN], limit) -``` - -**Аргументы** - -* `f(arr[, arr1, ... ,arrN])` — lambda-функция, применяемая к элементам массива `arr`. [`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `arr` — Массив, который необходимо отсортировать. [`Array(T)`](/sql-reference/data-types/array) -* `arr1, ... ,arrN` — N дополнительных массивов в случае, если `f` принимает несколько аргументов. [`Array(T)`](/sql-reference/data-types/array) -* `limit` — Значение индекса, до которого будет выполняться сортировка. [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает массив того же размера, что и исходный массив, в котором элементы в диапазоне `[1..limit]` отсортированы -по убыванию. Оставшиеся элементы `(limit..N]` находятся в произвольном порядке. - -**Примеры** - -**simple_int** - -```sql title=Query -SELECT arrayPartialReverseSort(2, [5, 9, 1, 3]) -``` - -```response title=Response -[9, 5, 1, 3] -``` - -**simple_string** - -```sql title=Query -SELECT arrayPartialReverseSort(2, ['expenses','lasso','embolism','gladly']) -``` - -```response title=Response -['lasso','gladly','expenses','embolism'] -``` - -**retain_sorted** - -```sql title=Query -SELECT arrayResize(arrayPartialReverseSort(2, [5, 9, 1, 3]), 2) -``` - -```response title=Response -[9, 5] -``` - -**lambda_simple** - -```sql title=Query -SELECT arrayPartialReverseSort((x) -> -x, 2, [5, 9, 1, 3]) -``` - -```response title=Response -[1, 3, 5, 9] -``` - -**lambda_complex** - -```sql title=Query -SELECT arrayPartialReverseSort((x, y) -> -y, 1, [0, 1, 2], [1, 2, 3]) as res -``` - -```response title=Response -[0, 1, 2] -``` - - -## arrayPartialShuffle - -Введено в версии: v23.2 - -Возвращает массив того же размера, что и исходный, в котором элементы в диапазоне `[1..limit]` представляют собой случайное -подмножество исходного массива. Оставшиеся элементы `(limit..n]` должны содержать элементы, не вошедшие в диапазон `[1..limit]`, в неопределённом порядке. -Значение `limit` должно быть в диапазоне `[1..n]`. Значения вне этого диапазона эквивалентны выполнению полного `arrayShuffle`: - -:::note -Эта функция не материализует константы. - -Значение `limit` должно быть в диапазоне `[1..N]`. Значения вне этого диапазона эквивалентны выполнению полного [`arrayShuffle`](#arrayShuffle). -::: - -**Синтаксис** - -```sql -arrayPartialShuffle(arr [, limit[, seed]]) -``` - -**Аргументы** - -* `arr` — Массив, который нужно случайным образом перемешать. [`Array(T)`](/sql-reference/data-types/array) -* `seed` — Необязательный параметр. Инициализирующее значение (seed) для генератора случайных чисел. Если не задан, используется случайное значение. [`(U)Int*`](/sql-reference/data-types/int-uint) -* `limit` — Необязательный параметр. Число, ограничивающее количество перестановок элементов, в диапазоне `[1..N]`. [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Массив с частично перемешанными элементами. [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**no_limit1** - -```sql title=Query -SELECT arrayPartialShuffle([1, 2, 3, 4], 0) -``` - -```response title=Response -[2, 4, 3, 1] -``` - -**no_limit2** - -```sql title=Query -SELECT arrayPartialShuffle([1, 2, 3, 4]) -``` - -```response title=Response -[4, 1, 3, 2] -``` - -**random_seed** - -```sql title=Query -SELECT arrayPartialShuffle([1, 2, 3, 4], 2) -``` - -```response title=Response -[3, 4, 1, 2] -``` - -**explicit_seed** - -```sql title=Query -SELECT arrayPartialShuffle([1, 2, 3, 4], 2, 41) -``` - -```response title=Response -[3, 2, 1, 4] -``` - -**materialize** - -```sql title=Query -SELECT arrayPartialShuffle(materialize([1, 2, 3, 4]), 2, 42), arrayPartialShuffle([1, 2, 3], 2, 42) FROM numbers(10) -``` - -```response title=Response -┌─arrayPartial⋯4]), 2, 42)─┬─arrayPartial⋯ 3], 2, 42)─┐ -│ [3,2,1,4] │ [3,2,1] │ -│ [3,2,1,4] │ [3,2,1] │ -│ [4,3,2,1] │ [3,2,1] │ -│ [1,4,3,2] │ [3,2,1] │ -│ [3,4,1,2] │ [3,2,1] │ -│ [1,2,3,4] │ [3,2,1] │ -│ [1,4,3,2] │ [3,2,1] │ -│ [1,4,3,2] │ [3,2,1] │ -│ [3,1,2,4] │ [3,2,1] │ -│ [1,3,2,4] │ [3,2,1] │ -└──────────────────────────┴──────────────────────────┘ -``` - - -## arrayPartialSort - -Добавлена в версии: v23.2 - -Эта функция аналогична `arraySort`, но с дополнительным аргументом `limit`, который позволяет выполнять частичную сортировку. - -:::tip -Чтобы оставить только отсортированные элементы, используйте `arrayResize`. -::: - -**Синтаксис** - -```sql -arrayPartialSort([f,] arr [, arr1, ... ,arrN], limit) -``` - -**Аргументы** - -* `f(arr[, arr1, ... ,arrN])` — Лямбда-функция, применяемая к элементам массива `x`. [`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `arr` — Массив, который нужно отсортировать. [`Array(T)`](/sql-reference/data-types/array) -* `arr1, ... ,arrN` — N дополнительных массивов, если `f` принимает несколько аргументов. [`Array(T)`](/sql-reference/data-types/array) -* `limit` — Значение индекса, до которого (включительно) будет выполняться сортировка. [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает массив того же размера, что и исходный массив, в котором элементы в диапазоне `[1..limit]` отсортированы -по возрастанию. Оставшиеся элементы `(limit..N]` находятся в неопределённом порядке. - -**Примеры** - -**simple_int** - -```sql title=Query -SELECT arrayPartialSort(2, [5, 9, 1, 3]) -``` - -```response title=Response -[1, 3, 5, 9] -``` - -**simple_string** - -```sql title=Query -SELECT arrayPartialSort(2, ['expenses', 'lasso', 'embolism', 'gladly']) -``` - -```response title=Response -['embolism', 'expenses', 'gladly', 'lasso'] -``` - -**retain_sorted** - -```sql title=Query -SELECT arrayResize(arrayPartialSort(2, [5, 9, 1, 3]), 2) -``` - -```response title=Response -[1, 3] -``` - -**lambda_simple** - -```sql title=Query -SELECT arrayPartialSort((x) -> -x, 2, [5, 9, 1, 3]) -``` - -```response title=Response -[9, 5, 1, 3] -``` - -**lambda_complex** - -```sql title=Query -SELECT arrayPartialSort((x, y) -> -y, 1, [0, 1, 2], [1, 2, 3]) as res -``` - -```response title=Response -[2, 1, 0] -``` - - -## arrayPopBack - -Добавлена в версии: v1.1 - -Удаляет последний элемент из массива. - -**Синтаксис** - -```sql -arrayPopBack(arr) -``` - -**Аргументы** - -* `arr` — массив, у которого нужно удалить последний элемент. [`Array(T)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает массив, идентичный `arr`, но без его последнего элемента. [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT arrayPopBack([1, 2, 3]) AS res; -``` - -```response title=Response -[1, 2] -``` - - -## arrayPopFront - -Впервые появилась в версии: v1.1 - -Удаляет первый элемент из массива. - -**Синтаксис** - -```sql -arrayPopFront(arr) -``` - -**Аргументы** - -* `arr` — массив, из которого нужно удалить первый элемент. [`Array(T)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает массив [`Array(T)`](/sql-reference/data-types/array), идентичный `arr`, но без его первого элемента. - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT arrayPopFront([1, 2, 3]) AS res; -``` - -```response title=Response -[2, 3] -``` - - -## arrayProduct - -Введена в версии: v21.1 - -Возвращает произведение элементов исходного массива. - -Если указана лямбда-функция `func`, возвращает произведение элементов результатов выполнения этой лямбда-функции. - -**Синтаксис** - -```sql -arrayProduct([func(x[, y1, ..., yN])], source_arr[, cond1_arr, ... , condN_arr]) -``` - -**Аргументы** - -* `func(x[, y1, ..., yN])` — Необязательный параметр. Лямбда‑функция, которая применяется к элементам исходного массива (`x`) и массивов условий (`y`). [`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `source_arr` — Исходный массив для обработки. [`Array(T)`](/sql-reference/data-types/array) -* `[, cond1_arr, ... , condN_arr]` — Необязательный параметр. N массивов условий, предоставляющих дополнительные аргументы лямбда‑функции. [`Array(T)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает произведение элементов исходного массива или произведение элементов, возвращённых лямбда‑функцией, если она указана. [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Простой пример** - -```sql title=Query -SELECT arrayProduct([1, 2, 3, 4]); -``` - -```response title=Response -24 -``` - -**Использование с функцией Lambda** - -```sql title=Query -SELECT arrayProduct(x, y -> x+y, [2, 2], [2, 2]) AS res; -``` - -```response title=Response -16 -``` - - -## arrayPushBack - -Добавлена в версии: v1.1 - -Добавляет один элемент в конец массива. - -**Синтаксис** - -```sql -arrayPushBack(arr, x) -``` - -**Аргументы** - -* `arr` — массив, в конец которого нужно добавить значение `x`. [`Array(T)`](/sql-reference/data-types/array) -* `x` — -* Отдельное значение, которое нужно добавить в конец массива. [`Array(T)`](/sql-reference/data-types/array). - -:::note - -* В массив с числами можно добавлять только числа, а в массив со строками — только строки. -* При добавлении чисел ClickHouse автоматически приводит тип `x` к типу данных массива. -* Может быть `NULL`. Функция добавляет элемент `NULL` в массив, а тип элементов массива преобразуется в `Nullable`. - -Для получения дополнительной информации о типах данных в ClickHouse см. раздел [Data types](/sql-reference/data-types). -::: - -**Возвращаемое значение** - -Возвращает массив, идентичный `arr`, но с добавленным в конец массива значением `x` [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT arrayPushBack(['a'], 'b') AS res; -``` - -```response title=Response -['a','b'] -``` - - -## arrayPushFront - -Впервые появилась в версии: v1.1 - -Добавляет один элемент в начало массива. - -**Синтаксис** - -```sql -arrayPushFront(arr, x) -``` - -**Аргументы** - -* `arr` — Массив, к концу которого нужно добавить значение `x`. [`Array(T)`](/sql-reference/data-types/array). - `x` — -* Одно значение, которое нужно добавить в начало массива. [`Array(T)`](/sql-reference/data-types/array). - -:::note - -* В массив с числами можно добавлять только числа, а в массив строк — только строки. -* При добавлении чисел ClickHouse автоматически приводит тип `x` к типу данных массива. -* Может быть `NULL`. Функция добавляет элемент `NULL` в массив, и тип элементов массива преобразуется в `Nullable`. - -Дополнительную информацию о типах данных в ClickHouse см. в разделе [Типы данных](/sql-reference/data-types). -::: - -**Возвращаемое значение** - -Возвращает массив, идентичный `arr`, но с дополнительным значением `x` в начале массива [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT arrayPushFront(['b'], 'a') AS res; -``` - -```response title=Response -['a','b'] -``` - - -## arrayROCAUC - -Появилась в версии: v20.4 - -Вычисляет площадь под ROC-кривой (Receiver Operating Characteristic). -ROC-кривая строится путем отображения True Positive Rate (TPR) по оси y и False Positive Rate (FPR) по оси x для всех порогов. -Получаемое значение лежит в диапазоне от нуля до единицы, при этом большее значение указывает на лучшую производительность модели. - -ROC AUC (также просто AUC) — это понятие в машинном обучении. -Подробнее см. [здесь](https://developers.google.com/machine-learning/glossary#pr-auc-area-under-the-pr-curve), [здесь](https://developers.google.com/machine-learning/crash-course/classification/roc-and-auc#expandable-1) и [здесь](https://en.wikipedia.org/wiki/Receiver_operating_characteristic#Area_under_the_curve). - -**Синтаксис** - -```sql -arrayROCAUC(scores, labels[, scale[, partial_offsets]]) -``` - -**Псевдонимы**: `arrayAUC` - -**Аргументы** - -* `scores` — оценки (скоры), которые возвращает модель предсказания. [`Array((U)Int*)`](/sql-reference/data-types/array) или [`Array(Float*)`](/sql-reference/data-types/array) -* `labels` — метки объектов, обычно 1 для положительного примера и 0 для отрицательного. [`Array((U)Int*)`](/sql-reference/data-types/array) или [`Enum`](/sql-reference/data-types/enum) -* `scale` — необязательный параметр. Определяет, нужно ли возвращать нормированную площадь. Если false, вместо этого возвращает площадь под кривой TP (true positives, истинно положительные) × FP (false positives, ложно положительные). Значение по умолчанию: true. [`Bool`](/sql-reference/data-types/boolean) -* `partial_offsets` — -* Массив из четырёх неотрицательных целых чисел для вычисления частичной площади под ROC-кривой (что эквивалентно вертикальной полосе в ROC-пространстве) вместо полного AUC. Эта опция полезна для распределённого вычисления ROC AUC. Массив должен содержать следующие элементы [`higher_partitions_tp`, `higher_partitions_fp`, `total_positives`, `total_negatives`]. [Array](/sql-reference/data-types/array) из неотрицательных [Integers](../data-types/int-uint.md). Необязательный параметр. - * `higher_partitions_tp`: количество положительных меток в разбиениях с более высокими значениями оценок. - * `higher_partitions_fp`: количество отрицательных меток в разбиениях с более высокими значениями оценок. - * `total_positives`: общее количество положительных примеров во всём наборе данных. - * `total_negatives`: общее количество отрицательных примеров во всём наборе данных. - -:::note -Когда используется `arr_partial_offsets`, `arr_scores` и `arr_labels` должны содержать только часть всего набора данных, соответствующую некоторому интервалу значений оценок. -Набор данных должен быть разделён на смежные разбиения, где каждое разбиение содержит подмножество данных с оценками, попадающими в определённый диапазон. -Например: - -* Одно разбиение может содержать все оценки в диапазоне [0, 0.5). -* Другое разбиение может содержать оценки в диапазоне [0.5, 1.0]. - ::: - -**Возвращаемое значение** - -Возвращает площадь под ROC-кривой (receiver operating characteristic). [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT arrayROCAUC([0.1, 0.4, 0.35, 0.8], [0, 0, 1, 1]); -``` - -```response title=Response -0.75 -``` - - -## arrayRandomSample - -Появилась в: v23.10 - -Возвращает подмножество из `samples` случайных элементов входного массива. Если значение `samples` превышает размер входного массива, размер выборки ограничивается размером массива, то есть возвращаются все элементы массива, но их порядок не гарантируется. Функция может работать как с плоскими, так и с вложенными массивами. - -**Синтаксис** - -```sql -arrayRandomSample(arr, samples) -``` - -**Аргументы** - -* `arr` — Входной массив или многомерный массив, из которого выбираются элементы. [`Array(T)`](/sql-reference/data-types/array) -* `samples` — Количество элементов в случайной выборке. [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Массив, содержащий случайную выборку элементов из входного массива. [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT arrayRandomSample(['apple', 'banana', 'cherry', 'date'], 2) as res; -``` - -```response title=Response -['cherry','apple'] -``` - -**Использование многомерных массивов** - -```sql title=Query -SELECT arrayRandomSample([[1, 2], [3, 4], [5, 6]], 2) as res; -``` - -```response title=Response -[[3,4],[5,6]] -``` - - -## arrayReduce - -Введена в версии: v1.1 - -Применяет агрегатную функцию к элементам массива и возвращает её результат. -Имя агрегатной функции передаётся в виде строки в одинарных кавычках: `'max'`, `'sum'`. -При использовании параметрических агрегатных функций параметр указывается после имени функции в круглых скобках: `'uniqUpTo(6)'`. - -**Синтаксис** - -```sql -arrayReduce(agg_f, arr1 [, arr2, ... , arrN)]) -``` - -**Аргументы** - -* `agg_f` — имя агрегатной функции, которое должно быть константой. [`String`](/sql-reference/data-types/string) -* `arr1 [, arr2, ... , arrN)]` — N массивов, соответствующих аргументам функции `agg_f`. [`Array(T)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает результат агрегатной функции. - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT arrayReduce('max', [1, 2, 3]); -``` - -```response title=Response -┌─arrayReduce('max', [1, 2, 3])─┐ -│ 3 │ -└───────────────────────────────┘ -``` - -**Пример агрегатной функции с несколькими аргументами** - -```sql title=Query ---Если агрегатная функция принимает несколько аргументов, то она должна применяться к нескольким массивам одинакового размера. - -SELECT arrayReduce('maxIf', [3, 5], [1, 0]); -``` - -```response title=Response -┌─arrayReduce('maxIf', [3, 5], [1, 0])─┐ -│ 3 │ -└──────────────────────────────────────┘ -``` - -**Пример с параметрической агрегатной функцией** - -```sql title=Query -SELECT arrayReduce('uniqUpTo(3)', [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -``` - -```response title=Response -┌─arrayReduce('uniqUpTo(3)', [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])─┐ -│ 4 │ -└─────────────────────────────────────────────────────────────┘ -``` - - -## arrayReduceInRanges - -Появилась в версии: v20.4 - -Применяет агрегатную функцию к элементам массива в заданных диапазонах и возвращает массив с результатом для каждого диапазона. -Функция возвращает тот же результат, что и несколько вызовов `arrayReduce(agg_func, arraySlice(arr1, index, length), ...)`. - -**Синтаксис** - -```sql -arrayReduceInRanges(agg_f, ranges, arr1 [, arr2, ... ,arrN)]) -``` - -**Аргументы** - -* `agg_f` — имя агрегатной функции, которую следует использовать. [`String`](/sql-reference/data-types/string) -* `ranges` — диапазоны, по которым выполняется агрегация. Массив кортежей `(i, r)`, содержащих индекс `i`, с которого нужно начать, и диапазон `r`, по которому выполняется агрегация. [`Array(T)`](/sql-reference/data-types/array) или [`Tuple(T)`](/sql-reference/data-types/tuple) -* `arr1 [, arr2, ... ,arrN)]` — N массивов в качестве аргументов агрегатной функции. [`Array(T)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает массив с результатами работы агрегатной функции по заданным диапазонам — [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT arrayReduceInRanges( - 'sum', - [(1, 5), (2, 3), (3, 4), (4, 4)], - [1000000, 200000, 30000, 4000, 500, 60, 7] -) AS res -``` - -```response title=Response -┌─res─────────────────────────┐ -│ [1234500,234000,34560,4567] │ -└─────────────────────────────┘ -``` - - -## arrayRemove - -Добавлено в версии v25.11 - -Удаляет из массива все элементы, равные заданному значению. -Значения NULL считаются равными. - -**Синтаксис** - -```sql -arrayRemove(arr, elem) -``` - -**Псевдонимы**: `array_remove` - -**Аргументы** - -* `arr` — Array(T) - `elem` — T - -**Возвращаемое значение** - -Возвращает подмножество исходного массива типа [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример 1** - -```sql title=Query -SELECT arrayRemove([1, 2, 2, 3], 2) -``` - -```response title=Response -[1, 3] -``` - -**Пример 2** - -```sql title=Query -SELECT arrayRemove(['a', NULL, 'b', NULL], NULL) -``` - -```response title=Response -['a', 'b'] -``` - - -## arrayResize - -Появилась в версии: v1.1 - -Изменяет длину массива. - -**Синтаксис** - -```sql -arrayResize(arr, size[, extender]) -``` - -**Аргументы** - -* `arr` — Массив, размер которого нужно изменить. [`Array(T)`](/sql-reference/data-types/array) -* `size` — - * Новая длина массива. - Если `size` меньше исходного размера массива, массив усекается справа. - Если `size` больше исходного размера массива, массив расширяется справа значениями `extender` или значениями по умолчанию для типа данных элементов массива. -* `extender` — Значение, используемое для расширения массива. Может быть `NULL`. - -**Возвращаемое значение** - -Массив длины `size`. [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример 1** - -```sql title=Query -SELECT arrayResize([1], 3); -``` - -```response title=Response -[1,0,0] -``` - -**Пример 2** - -```sql title=Query -SELECT arrayResize([1], 3, NULL); -``` - -```response title=Response -[1,NULL,NULL] -``` - - -## arrayReverse - -Добавлена в версии: v1.1 - -Меняет порядок элементов в заданном массиве на обратный. - -:::note -Функция `reverse(arr)` выполняет ту же функцию, но работает и с другими типами данных, -а не только с массивами. -::: - -**Синтаксис** - -```sql -arrayReverse(arr) -``` - -**Аргументы** - -* `arr` — Массив, который нужно развернуть. [`Array(T)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает массив того же размера, что и исходный массив, с элементами в обратном порядке [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT arrayReverse([1, 2, 3]) -``` - -```response title=Response -[3,2,1] -``` - - -## arrayReverseFill - -Впервые введена в версии: v20.1 - -Функция `arrayReverseFill` последовательно обрабатывает исходный массив от -последнего элемента к первому, вычисляя лямбда-условие в каждой позиции с -использованием элементов из исходного массива и массива условий. Когда условие -оказывается ложным на позиции i, функция заменяет этот элемент элементом на -позиции i+1 из текущего состояния массива. Последний элемент всегда сохраняется, -независимо от условия. - -**Синтаксис** - -```sql -arrayReverseFill(func(x[, y1, ..., yN]), source_arr[, cond1_arr, ... , condN_arr]) -``` - -**Аргументы** - -* `func(x[, y1, ..., yN])` — лямбда-функция, которая применяется к элементам исходного массива (`x`) и массивов условий (`y`). [`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `source_arr` — исходный массив для обработки. [`Array(T)`](/sql-reference/data-types/array) -* `[, cond1_arr, ... , condN_arr]` — Необязательный параметр. N массивов условий, передающих дополнительные аргументы лямбда-функции. [`Array(T)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает массив, в котором элементы исходного массива заменены результатами применения лямбда-функции. [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример с одним массивом** - -```sql title=Query -SELECT arrayReverseFill(x -> not isNull(x), [1, null, 2, null]) AS res -``` - -```response title=Response -[1, 2, 2, NULL] -``` - -**Пример с двумя массивами** - -```sql title=Query -SELECT arrayReverseFill(x, y, z -> x > y AND x < z, [5, 3, 6, 2], [4, 7, 1, 3], [10, 2, 8, 5]) AS res; -``` - -```response title=Response -[5, 6, 6, 2] -``` - - -## arrayReverseSort - -Введена в версии v1.1 - -Сортирует элементы массива в порядке убывания. -Если указана функция `f`, переданный массив сортируется в соответствии с результатом -функции, применённой к элементам массива, после чего отсортированный массив переворачивается. -Если `f` принимает несколько аргументов, в функцию `arrayReverseSort` передаются несколько массивов, -которые будут соответствовать аргументам `f`. - -Если сортируемый массив содержит `-Inf`, `NULL`, `NaN` или `Inf`, они будут отсортированы в следующем порядке: - -1. `-Inf` -2. `Inf` -3. `NaN` -4. `NULL` - -`arrayReverseSort` — это [функция высшего порядка](/sql-reference/functions/overview#higher-order-functions). - -**Синтаксис** - -```sql -arrayReverseSort([f,] arr [, arr1, ... ,arrN) -``` - -**Аргументы** - -* `f(y1[, y2 ... yN])` — лямбда-функция, которая применяется к элементам массива `x`. -* `arr` — массив, который нужно отсортировать. [`Array(T)`](/sql-reference/data-types/array) -* `arr1, ..., yN` — необязательные N дополнительных массивов, используемых, если `f` принимает несколько аргументов. - -**Возвращаемое значение** - -Возвращает массив `x`, отсортированный по убыванию, если лямбда-функция не задана; в противном случае -возвращает массив, отсортированный в соответствии с логикой переданной лямбда-функции, после чего порядок элементов в нём инвертируется. [`Array(T)`](/sql-reference/data-types/array). - -**Примеры** - -**Пример 1** - -```sql title=Query -SELECT arrayReverseSort((x, y) -> y, [4, 3, 5], ['a', 'b', 'c']) AS res; -``` - -```response title=Response -[5,3,4] -``` - -**Пример 2** - -```sql title=Query -SELECT arrayReverseSort((x, y) -> -y, [4, 3, 5], [1, 2, 3]) AS res; -``` - -```response title=Response -[4,3,5] -``` - - -## arrayReverseSplit - -Появилась в версии: v20.1 - -Разбивает исходный массив на несколько массивов. Когда `func(x[, y1, ..., yN])` возвращает ненулевое значение, массив будет разделён сразу после этого элемента. После последнего элемента массив не разделяется. - -**Синтаксис** - -```sql -arrayReverseSplit(func(x[, y1, ..., yN]), source_arr[, cond1_arr, ... , condN_arr]) -``` - -**Аргументы** - -* `func(x[, y1, ..., yN])` — лямбда-функция, которая применяется к элементам исходного массива (`x`) и массивам условий (`y`). [`Лямбда-функция`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `source_arr` — исходный массив для обработки. [`Лямбда-функция`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `[, cond1_arr, ... , condN_arr]` — необязательный параметр. N массивов условий, передающих дополнительные аргументы лямбда-функции. [`Array(T)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает массив массивов. [`Array(Array(T))`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT arrayReverseSplit((x, y) -> y, [1, 2, 3, 4, 5], [1, 0, 0, 1, 0]) AS res -``` - -```response title=Response -[[1], [2, 3, 4], [5]] -``` - - -## arrayRotateLeft - -Введена в версии: v23.8 - -Выполняет циклический сдвиг элементов массива влево на заданное количество позиций. Отрицательные значения `n` рассматриваются как сдвиг вправо на абсолютное значение параметра. - -**Синтаксис** - -```sql -arrayRotateLeft(arr, n) -``` - -**Аргументы** - -* `arr` — массив, элементы которого нужно циклически сдвинуть. [`Array(T)`](/sql-reference/data-types/array). -* `n` — количество элементов для сдвига. [`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint). - -**Возвращаемое значение** - -Массив, циклически сдвинутый влево на указанное число элементов. [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT arrayRotateLeft([1,2,3,4,5,6], 2) as res; -``` - -```response title=Response -[3,4,5,6,1,2] -``` - -**Отрицательное значение n** - -```sql title=Query -SELECT arrayRotateLeft([1,2,3,4,5,6], -2) as res; -``` - -```response title=Response -[5,6,1,2,3,4] -``` - - -## arrayRotateRight - -Введена в версии v23.8 - -Выполняет циклический сдвиг массива вправо на указанное количество элементов. Отрицательные значения `n` интерпретируются как циклический сдвиг влево на абсолютное значение величины сдвига. - -**Синтаксис** - -```sql -arrayRotateRight(arr, n) -``` - -**Аргументы** - -* `arr` — массив, для которого выполняется циклический сдвиг элементов. [`Array(T)`](/sql-reference/data-types/array) -* `n` — количество элементов для сдвига. [`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Массив, циклически сдвинутый вправо на указанное количество элементов. [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT arrayRotateRight([1,2,3,4,5,6], 2) as res; -``` - -```response title=Response -[5,6,1,2,3,4] -``` - -**Отрицательное значение n** - -```sql title=Query -SELECT arrayRotateRight([1,2,3,4,5,6], -2) as res; -``` - -```response title=Response -[3,4,5,6,1,2] -``` - - -## arrayShiftLeft - -Появилась в версии: v23.8 - -Сдвигает массив влево на заданное количество элементов. -Новые элементы заполняются переданным аргументом или значением по умолчанию для типа элемента массива. -Если указанное количество элементов отрицательное, массив сдвигается вправо. - -**Синтаксис** - -```sql -arrayShiftLeft(arr, n[, default]) -``` - -**Аргументы** - -* `arr` — массив, элементы которого необходимо сдвинуть. [`Array(T)`](/sql-reference/data-types/array). - `n` — количество элементов для сдвига. [`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint). - `default` — необязательный параметр. Значение по умолчанию для новых элементов. - -**Возвращаемое значение** - -Массив, сдвинутый влево на указанное количество элементов [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT arrayShiftLeft([1,2,3,4,5,6], 2) as res; -``` - -```response title=Response -[3,4,5,6,0,0] -``` - -**Отрицательное значение n** - -```sql title=Query -SELECT arrayShiftLeft([1,2,3,4,5,6], -2) as res; -``` - -```response title=Response -[0,0,1,2,3,4] -``` - -**Использование значения по умолчанию** - -```sql title=Query -SELECT arrayShiftLeft([1,2,3,4,5,6], 2, 42) as res; -``` - -```response title=Response -[3,4,5,6,42,42] -``` - - -## arrayShiftRight - -Появилась в версии v23.8 - -Сдвигает массив вправо на указанное количество элементов. -Новые элементы заполняются переданным аргументом или значением по умолчанию для типа элементов массива. -Если количество элементов отрицательно, массив сдвигается влево. - -**Синтаксис** - -```sql -arrayShiftRight(arr, n[, default]) -``` - -**Аргументы** - -* `arr` — Массив, элементы которого сдвигаются. [`Array(T)`](/sql-reference/data-types/array) -* `n` — Число элементов, на которое выполняется сдвиг. [`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) -* `default` — Необязательный параметр. Значение по умолчанию для новых элементов. - -**Возвращаемое значение** - -Массив, сдвинутый вправо на указанное число элементов. [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT arrayShiftRight([1, 2, 3, 4, 5, 6], 2) as res; -``` - -```response title=Response -[0, 0, 1, 2, 3, 4] -``` - -**Отрицательное значение n** - -```sql title=Query -SELECT arrayShiftRight([1, 2, 3, 4, 5, 6], -2) as res; -``` - -```response title=Response -[3, 4, 5, 6, 0, 0] -``` - -**Использование значения по умолчанию** - -```sql title=Query -SELECT arrayShiftRight([1, 2, 3, 4, 5, 6], 2, 42) as res; -``` - -```response title=Response -[42, 42, 1, 2, 3, 4] -``` - - -## arrayShingles - -Добавлена в версии v24.1 - -Генерирует массив шинглов (аналогов n-грамм для строк), то есть последовательных подмассивов входного массива заданной длины. - -**Синтаксис** - -```sql -arrayShingles(arr, l) -``` - -**Аргументы** - -* `arr` — Массив, для которого генерируется массив шинглов. [`Array(T)`](/sql-reference/data-types/array) -* `l` — Длина каждого шингла. [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Массив сгенерированных шинглов [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT arrayShingles([1, 2, 3, 4], 3) as res; -``` - -```response title=Response -[[1, 2, 3], [2, 3, 4]] -``` - - -## arrayShuffle - -Добавлена в версии: v23.2 - -Возвращает массив того же размера, что и исходный массив, содержащий элементы в перемешанном порядке. -Элементы переставляются таким образом, что каждая возможная перестановка этих элементов имеет равную вероятность появления. - -:::note -Эта функция не материализует константы. -::: - -**Синтаксис** - -```sql -arrayShuffle(arr [, seed]) -``` - -**Аргументы** - -* `arr` — Массив для перемешивания. [`Array(T)`](/sql-reference/data-types/array) -* `seed (optional)` — Необязательный параметр. Начальное значение (seed), используемое для генерации случайных чисел. Если не указано, используется случайное значение. [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Массив с перемешанными элементами. [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример без seed (недетерминированные результаты)** - -```sql title=Query -SELECT arrayShuffle([1, 2, 3, 4]); -``` - -```response title=Response -[1,4,2,3] -``` - -**Пример без заданного seed (стабильные результаты)** - -```sql title=Query -SELECT arrayShuffle([1, 2, 3, 4], 41); -``` - -```response title=Response -[3,2,1,4] -``` - - -## arraySimilarity - -Появилась в версии: v25.4 - -Вычисляет меру сходства двух массивов от `0` до `1` на основе взвешенного расстояния Левенштейна. - -**Синтаксис** - -```sql -arraySimilarity(from, to, from_weights, to_weights) -``` - -**Аргументы** - -* `from` — первый массив [`Array(T)`](/sql-reference/data-types/array) -* `to` — второй массив [`Array(T)`](/sql-reference/data-types/array) -* `from_weights` — веса для первого массива [`Array((U)Int*|Float*)`](/sql-reference/data-types/array) -* `to_weights` — веса для второго массива [`Array((U)Int*|Float*)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает меру сходства в диапазоне от `0` до `1` для двух массивов на основе взвешенного расстояния Левенштейна [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT arraySimilarity(['A', 'B', 'C'], ['A', 'K', 'L'], [1.0, 2, 3], [3.0, 4, 5]); -``` - -```response title=Response -0.2222222222222222 -``` - - -## arraySlice - -Введена в версии: v1.1 - -Возвращает срез массива, включая элементы `NULL`. - -**Синтаксис** - -```sql -arraySlice(arr, offset [, length]) -``` - -**Аргументы** - -* `arr` — Массив, из которого берётся срез. [`Array(T)`](/sql-reference/data-types/array) -* `offset` — Смещение относительно края массива. Положительное значение задаёт смещение слева, отрицательное — смещение справа. Нумерация элементов массива начинается с `1`. [`(U)Int*`](/sql-reference/data-types/int-uint) -* `length` — Длина требуемого среза. Если указать отрицательное значение, функция вернёт открытый срез `[offset, array_length - length]`. Если параметр не указан, функция вернёт срез `[offset, the_end_of_array]`. [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает срез массива из `length` элементов, начиная с указанного `offset` [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT arraySlice([1, 2, NULL, 4, 5], 2, 3) AS res; -``` - -```response title=Response -[2, NULL, 4] -``` - - -## arraySort - -Введена в версии: v1.1 - -Сортирует элементы переданного массива по возрастанию. -Если указана лямбда-функция `f`, порядок сортировки определяется результатом -применения лямбды к каждому элементу массива. -Если лямбда принимает несколько аргументов, функции `arraySort` передаётся несколько -массивов, элементам которых будут соответствовать аргументы `f`. - -Если сортируемый массив содержит `-Inf`, `NULL`, `NaN` или `Inf`, они будут отсортированы в следующем порядке: - -1. `-Inf` -2. `Inf` -3. `NaN` -4. `NULL` - -`arraySort` — это [функция высшего порядка](/sql-reference/functions/overview#higher-order-functions). - -**Синтаксис** - -```sql -arraySort([f,] arr [, arr1, ... ,arrN]) -``` - -**Аргументы** - -* `f(y1[, y2 ... yN])` — лямбда-функция, применяемая к элементам массива `x`. -* `arr` — массив, который нужно отсортировать. [`Array(T)`](/sql-reference/data-types/array) -* `arr1, ..., yN` — необязательные аргументы. N дополнительных массивов, если `f` принимает несколько аргументов. - -**Возвращаемое значение** - -Возвращает массив `arr`, отсортированный по возрастанию, если лямбда-функция не задана, в противном случае -возвращает массив, отсортированный в соответствии с логикой, реализованной в переданной лямбда-функции. [`Array(T)`](/sql-reference/data-types/array). - -**Примеры** - -**Пример 1** - -```sql title=Query -SELECT arraySort([1, 3, 3, 0]); -``` - -```response title=Response -[0,1,3,3] -``` - -**Пример 2** - -```sql title=Query -SELECT arraySort(['hello', 'world', '!']); -``` - -```response title=Response -['!','hello','world'] -``` - -**Пример 3** - -```sql title=Query -SELECT arraySort([1, nan, 2, NULL, 3, nan, -4, NULL, inf, -inf]); -``` - -```response title=Response -[-inf,-4,1,2,3,inf,nan,nan,NULL,NULL] -``` - - -## arraySplit - -Добавлена в версии: v20.1 - -Разбивает исходный массив на несколько массивов. Когда `func(x [, y1, ..., yN])` возвращает значение, отличное от нуля, массив будет разделён слева от этого элемента. Массив не будет разделён перед первым элементом. - -**Синтаксис** - -```sql -arraySplit(func(x[, y1, ..., yN]), source_arr[, cond1_arr, ... , condN_arr]) -``` - -**Аргументы** - -* `func(x[, y1, ..., yN])` — лямбда-функция, которая обрабатывает элементы исходного массива (`x`) и массивов условий (`y`). [Lambda function](/sql-reference/functions/overview#arrow-operator-and-lambda). -* `source_arr` — исходный массив для разбиения [`Array(T)`](/sql-reference/data-types/array). -* `[, cond1_arr, ... , condN_arr]` — необязательный параметр. N массивов условий, передающих дополнительные аргументы в лямбда-функцию. [`Array(T)`](/sql-reference/data-types/array). - -**Возвращаемое значение** - -Возвращает массив массивов [`Array(Array(T))`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT arraySplit((x, y) -> y, [1, 2, 3, 4, 5], [1, 0, 0, 1, 0]) AS res -``` - -```response title=Response -[[1, 2, 3], [4, 5]] -``` - - -## arraySum - -Введена в: v21.1 - -Возвращает сумму элементов исходного массива. - -Если указана лямбда-функция `func`, возвращает сумму элементов, полученных в результате её применения. - -**Синтаксис** - -```sql -arrayMax([func(x[, y1, ..., yN])], source_arr[, cond1_arr, ... , condN_arr]) -``` - -**Аргументы** - -* `func(x[, y1, ..., yN])` — Необязательный параметр. Лямбда-функция, которая применяется к элементам исходного массива (`x`) и массивов условий (`y`). [`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `source_arr` — Исходный массив для обработки. [`Array(T)`](/sql-reference/data-types/array) -* `, cond1_arr, ... , condN_arr]` — Необязательный параметр. N массивов условий, предоставляющих дополнительные аргументы лямбда-функции. [`Array(T)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает сумму элементов исходного массива или сумму элементов, полученных в результате применения лямбда-функции, если она задана. - -**Примеры** - -**Базовый пример** - -```sql title=Query -SELECT arraySum([1, 2, 3, 4]); -``` - -```response title=Response -10 -``` - -**Использование с функцией Lambda** - -```sql title=Query -SELECT arraySum(x, y -> x+y, [1, 1, 1, 1], [1, 1, 1, 1]); -``` - -```response title=Response -8 -``` - - -## arraySymmetricDifference - -Добавлено в: v25.4 - -Принимает несколько массивов и возвращает массив с элементами, которые отсутствуют хотя бы в одном из исходных массивов. Результат содержит только уникальные значения. - -:::note -Симметрическая разность *более чем двух множеств* [математически определяется](https://en.wikipedia.org/wiki/Symmetric_difference#n-ary_symmetric_difference) -как множество всех входных элементов, которые встречаются в нечётном числе входных множеств. -В отличие от этого определения, функция `arraySymmetricDifference` просто возвращает множество входных элементов, которые отсутствуют во всех входных множествах одновременно. -::: - -**Синтаксис** - -```sql -arraySymmetricDifference(arr1, arr2, ... , arrN) -``` - -**Аргументы** - -* `arrN` — N массивов, из которых создаётся новый массив. [`Array(T)`](/sql-reference/data-types/array). - -**Возвращаемое значение** - -Возвращает массив различных элементов, которые не присутствуют во всех исходных массивах [`Array(T)`](/sql-reference/data-types/array). - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT -arraySymmetricDifference([1, 2], [1, 2], [1, 2]) AS empty_symmetric_difference, -arraySymmetricDifference([1, 2], [1, 2], [1, 3]) AS non_empty_symmetric_difference; -``` - -```response title=Response -┌─empty_symmetric_difference─┬─non_empty_symmetric_difference─┐ -│ [] │ [3] │ -└────────────────────────────┴────────────────────────────────┘ -``` - - -## arrayUnion - -Добавлена в: v24.10 - -Функция принимает несколько массивов и возвращает массив, содержащий все элементы, присутствующие хотя бы в одном из исходных массивов. В результате остаются только уникальные значения. - -**Синтаксис** - -```sql -arrayUnion(arr1, arr2, ..., arrN) -``` - -**Аргументы** - -* `arrN` — N массивов, из которых формируется новый массив. [`Array(T)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает массив, содержащий уникальные элементы исходных массивов [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT -arrayUnion([-2, 1], [10, 1], [-2], []) as num_example, -arrayUnion(['hi'], [], ['hello', 'hi']) as str_example, -arrayUnion([1, 3, NULL], [2, 3, NULL]) as null_example -``` - -```response title=Response -┌─num_example─┬─str_example────┬─null_example─┐ -│ [10,-2,1] │ ['hello','hi'] │ [3,2,1,NULL] │ -└─────────────┴────────────────┴──────────────┘ -``` - - -## arrayUniq - -Появилась в версии: v1.1 - -При передаче одного аргумента считает количество различных элементов в массиве. -При передаче нескольких аргументов считает количество различных **кортежей**, составленных из элементов на соответствующих позициях в нескольких массивах. - -Например, `SELECT arrayUniq([1,2], [3,4], [5,6])` сформирует следующие кортежи: - -* Позиция 1: (1,3,5) -* Позиция 2: (2,4,6) - -Затем будет подсчитано количество уникальных кортежей. В данном случае `2`. - -Все переданные массивы должны иметь одинаковую длину. - -:::tip -Если нужно получить список уникальных элементов в массиве, используйте `arrayReduce('groupUniqArray', arr)`. -::: - -**Синтаксис** - -```sql -arrayUniq(arr1[, arr2, ..., arrN]) -``` - -**Аргументы** - -* `arr1` — Массив, для которого нужно посчитать количество уникальных элементов. [`Array(T)`](/sql-reference/data-types/array) -* `[, arr2, ..., arrN]` — Необязательные аргументы. Дополнительные массивы, используемые для подсчёта количества уникальных кортежей элементов на соответствующих позициях в нескольких массивах. [`Array(T)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Для одного аргумента возвращает количество уникальных элементов. Для нескольких аргументов возвращает количество уникальных кортежей, составленных из элементов на соответствующих позициях в массивах. -[`UInt32`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Один аргумент** - -```sql title=Query -SELECT arrayUniq([1, 1, 2, 2]) -``` - -```response title=Response -2 -``` - -**Несколько аргументов** - -```sql title=Query -SELECT arrayUniq([1, 2, 3, 1], [4, 5, 6, 4]) -``` - -```response title=Response -3 -``` - - -## arrayWithConstant - -Появилась в версии: v20.1 - -Создаёт массив длины `length`, заполненный константой `x`. - -**Синтаксис** - -```sql -arrayWithConstant(N, x) -``` - -**Аргументы** - -* `length` — количество элементов в массиве. [`(U)Int*`](/sql-reference/data-types/int-uint) -* `x` — значение `N` элементов в массиве, произвольного типа. - -**Возвращаемое значение** - -Возвращает массив из `N` элементов со значением `x`. [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT arrayWithConstant(3, 1) -``` - -```response title=Response -[1, 1, 1] -``` - - -## arrayZip - -Появилась в версии: v20.1 - -Объединяет несколько массивов в один массив. Полученный массив содержит соответствующие элементы исходных массивов, сгруппированные в кортежи в указанном порядке аргументов. - -**Синтаксис** - -```sql -arrayZip(arr1, arr2, ... , arrN) -``` - -**Аргументы** - -* `arr1, arr2, ... , arrN` — N массивов для объединения в один массив. [`Array(T)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает массив с элементами исходных массивов, сгруппированными в кортежи. Типы данных в кортеже совпадают с типами входных массивов и следуют в том же порядке, в котором массивы передаются. [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT arrayZip(['a', 'b', 'c'], [5, 2, 1]); -``` - -```response title=Response -[('a', 5), ('b', 2), ('c', 1)] -``` - - -## arrayZipUnaligned - -Впервые добавлена в: v20.1 - -Объединяет несколько массивов в один, позволяя использовать невыравненные массивы (массивы разной длины). Результирующий массив содержит соответствующие элементы исходных массивов, сгруппированные в кортежи в перечисленном порядке аргументов. - -**Синтаксис** - -```sql -arrayZipUnaligned(arr1, arr2, ..., arrN) -``` - -**Аргументы** - -* `arr1, arr2, ..., arrN` — N массивов, которые нужно объединить в один массив. [`Array(T)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает массив с элементами из исходных массивов, сгруппированными в кортежи. Типы данных в кортеже совпадают с типами входных массивов и следуют в том же порядке, в каком переданы массивы. [`Array(T)`](/sql-reference/data-types/array) или [`Tuple(T1, T2, ...)`](/sql-reference/data-types/tuple) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT arrayZipUnaligned(['a'], [1, 2, 3]); -``` - -```response title=Response -[('a', 1),(NULL, 2),(NULL, 3)] -``` - - -## countEqual - -Появилась в версии: v1.1 - -Возвращает количество элементов массива, равных `x`. Эквивалентно `arrayCount(elem -> elem = x, arr)`. - -Элементы `NULL` рассматриваются как отдельные значения. - -**Синтаксис** - -```sql -countEqual(arr, x) -``` - -**Аргументы** - -* `arr` — Массив, в котором выполняется поиск. [`Array(T)`](/sql-reference/data-types/array) -* `x` — Значение в массиве, количество вхождений которого нужно посчитать. Любой тип. - -**Возвращаемое значение** - -Возвращает количество элементов в массиве, равных `x` [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT countEqual([1, 2, NULL, NULL], NULL) -``` - -```response title=Response -2 -``` - - -## empty - -Добавлена в версии: v1.1 - -Проверяет, является ли входной массив пустым. - -Массив считается пустым, если он не содержит ни одного элемента. - -:::note -Выполнение запроса можно оптимизировать, включив [настройку `optimize_functions_to_subcolumns`](/operations/settings/settings#optimize_functions_to_subcolumns). При `optimize_functions_to_subcolumns = 1` функция читает только подстолбец [size0](/sql-reference/data-types/array#array-size) вместо чтения и обработки всего столбца с массивами. Запрос `SELECT empty(arr) FROM TABLE;` преобразуется в `SELECT arr.size0 = 0 FROM TABLE;`. -::: - -Функция также работает со строками (String) и UUID. - -**Синтаксис** - -```sql -empty(arr) -``` - -**Аргументы** - -* `arr` — входной массив типа [`Array(T)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает `1` для пустого массива и `0` для непустого массива типа [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT empty([]); -``` - -```response title=Response -1 -``` - - -## emptyArrayDate - -Введена в версии: v1.1 - -Возвращает пустой массив типа Date - -**Синтаксис** - -```sql -emptyArrayDate() -``` - -**Аргументы** - -* Нет. - -**Возвращаемое значение** - -Пустой массив типа Date. [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT emptyArrayDate -``` - -```response title=Response -[] -``` - - -## emptyArrayDateTime - -Впервые представлена в версии v1.1 - -Возвращает пустой массив значений типа DateTime - -**Синтаксис** - -```sql -emptyArrayDateTime() -``` - -**Аргументы** - -* Отсутствуют. - -**Возвращаемое значение** - -Пустой массив DateTime. [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT emptyArrayDateTime -``` - -```response title=Response -[] -``` - - -## emptyArrayFloat32 - -Появилась в версии: v1.1 - -Возвращает пустой массив типа Float32 - -**Синтаксис** - -```sql -emptyArrayFloat32() -``` - -**Аргументы** - -* Отсутствуют. - -**Возвращаемое значение** - -Пустой массив Float32. [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT emptyArrayFloat32 -``` - -```response title=Response -[] -``` - - -## emptyArrayFloat64 - -Добавлена в: v1.1 - -Возвращает пустой массив типа Float64 - -**Синтаксис** - -```sql -emptyArrayFloat64() -``` - -**Аргументы** - -* Отсутствуют. - -**Возвращаемое значение** - -Пустой массив Float64. [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT emptyArrayFloat64 -``` - -```response title=Response -[] -``` - - -## emptyArrayInt16 - -Добавлена в версии: v1.1 - -Возвращает пустой массив типа Int16 - -**Синтаксис** - -```sql -emptyArrayInt16() -``` - -**Аргументы** - -* Отсутствуют. - -**Возвращаемое значение** - -Пустой массив типа Int16. [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT emptyArrayInt16 -``` - -```response title=Response -[] -``` - - -## emptyArrayInt32 - -Введена в: v1.1 - -Возвращает пустой массив типа Int32 - -**Синтаксис** - -```sql -emptyArrayInt32() -``` - -**Аргументы** - -* Нет. - -**Возвращаемое значение** - -Пустой массив Int32. [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT emptyArrayInt32 -``` - -```response title=Response -[] -``` - - -## emptyArrayInt64 - -Впервые появилось в: v1.1 - -Возвращает пустой массив Int64 - -**Синтаксис** - -```sql -emptyArrayInt64() -``` - -**Аргументы** - -* Отсутствуют. - -**Возвращаемое значение** - -Пустой массив Int64. [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT emptyArrayInt64 -``` - -```response title=Response -[] -``` - - -## emptyArrayInt8 - -Добавлена в версии: v1.1 - -Возвращает пустой массив типа Int8 - -**Синтаксис** - -```sql -emptyArrayInt8() -``` - -**Аргументы** - -* Отсутствуют. - -**Возвращаемое значение** - -Пустой массив типа Int8. [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT emptyArrayInt8 -``` - -```response title=Response -[] -``` - - -## emptyArrayString - -Добавлена в версии: v1.1 - -Возвращает пустой массив типа String - -**Синтаксис** - -```sql -emptyArrayString() -``` - -**Аргументы** - -* Нет. - -**Возвращаемое значение** - -Пустой массив строк. [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT emptyArrayString -``` - -```response title=Response -[] -``` - - -## emptyArrayToSingle - -Добавлено в: v1.1 - -Принимает пустой массив и возвращает одноэлементный массив, содержащий значение по умолчанию. - -**Синтаксис** - -```sql -emptyArrayToSingle(arr) -``` - -**Аргументы** - -* `arr` — пустой массив. [`Array(T)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Массив с одним значением типа по умолчанию для массива. [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Простой пример** - -```sql title=Query -CREATE TABLE test ( - a Array(Int32), - b Array(String), - c Array(DateTime) -) -ENGINE = MergeTree -ORDER BY tuple(); - -INSERT INTO test VALUES ([], [], []); - -SELECT emptyArrayToSingle(a), emptyArrayToSingle(b), emptyArrayToSingle(c) FROM test; -``` - -```response title=Response -┌─emptyArrayToSingle(a)─┬─emptyArrayToSingle(b)─┬─emptyArrayToSingle(c)───┐ -│ [0] │ [''] │ ['1970-01-01 01:00:00'] │ -└───────────────────────┴───────────────────────┴─────────────────────────┘ -``` - - -## emptyArrayUInt16 - -Добавлена в: v1.1 - -Возвращает пустой массив UInt16 - -**Синтаксис** - -```sql -emptyArrayUInt16() -``` - -**Аргументы** - -* Отсутствуют. - -**Возвращаемое значение** - -Пустой массив UInt16. [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT emptyArrayUInt16 -``` - -```response title=Response -[] -``` - - -## emptyArrayUInt32 - -Введено в версии: v1.1 - -Возвращает пустой массив типа UInt32 - -**Синтаксис** - -```sql -emptyArrayUInt32() -``` - -**Аргументы** - -* Нет аргументов. - -**Возвращаемое значение** - -Пустой массив UInt32. [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT emptyArrayUInt32 -``` - -```response title=Response -[] -``` - - -## emptyArrayUInt64 - -Добавлена в: v1.1 - -Возвращает пустой массив UInt64 - -**Синтаксис** - -```sql -emptyArrayUInt64() -``` - -**Аргументы** - -* Отсутствуют. - -**Возвращаемое значение** - -Пустой массив типа UInt64. [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT emptyArrayUInt64 -``` - -```response title=Response -[] -``` - - -## emptyArrayUInt8 - -Добавлена в версии v1.1 - -Возвращает пустой массив типа UInt8 - -**Синтаксис** - -```sql -emptyArrayUInt8() -``` - -**Аргументы** - -* Отсутствуют. - -**Возвращаемое значение** - -Пустой массив типа UInt8. [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT emptyArrayUInt8 -``` - -```response title=Response -[] -``` - - -## has - -Добавлена в: v1.1 - -Возвращает, содержит ли массив указанный элемент. - -**Синтаксис** - -```sql -has(arr, x) -``` - -**Аргументы** - -* `arr` — исходный массив. [`Array(T)`](/sql-reference/data-types/array) -* `x` — значение, которое нужно найти в массиве. - -**Возвращаемое значение** - -Возвращает `1`, если массив содержит указанный элемент, иначе `0`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT has([1, 2, 3], 2) -``` - -```response title=Response -1 -``` - -**Не найдено** - -```sql title=Query -SELECT has([1, 2, 3], 4) -``` - -```response title=Response -0 -``` - - -## hasAll - -Добавлена в версии: v1.1 - -Проверяет, является ли один массив подмножеством другого. - -* Пустой массив является подмножеством любого массива. -* `Null` обрабатывается как значение. -* Порядок значений в обоих массивах не имеет значения. - -**Синтаксис** - -```sql -hasAll(set, subset) -``` - -**Аргументы** - -* `set` — массив любого типа с набором элементов. [`Array(T)`](/sql-reference/data-types/array) -* `subset` — массив любого типа, который имеет общий супертип с `set` и содержит элементы, проверяемые на то, что они образуют подмножество `set`. [`Array(T)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -* `1`, если `set` содержит все элементы из `subset`. -* `0` — в противном случае. - -Генерируется исключение `NO_COMMON_TYPE`, если элементы множества и подмножества не имеют общего супертипа. - -**Примеры** - -**Пустые массивы** - -```sql title=Query -SELECT hasAll([], []) -``` - -```response title=Response -1 -``` - -**Массивы, содержащие значения NULL** - -```sql title=Query -SELECT hasAll([1, Null], [Null]) -``` - -```response title=Response -1 -``` - -**Массивы, содержащие значения разных типов** - -```sql title=Query -SELECT hasAll([1.0, 2, 3, 4], [1, 3]) -``` - -```response title=Response -1 -``` - -**Массивы, содержащие значения типа String** - -```sql title=Query -SELECT hasAll(['a', 'b'], ['a']) -``` - -```response title=Response -1 -``` - -**Массивы без общего типа данных** - -```sql title=Query -SELECT hasAll([1], ['a']) -``` - -```response title=Response -Вызывает исключение NO_COMMON_TYPE -``` - -**Массив массивов** - -```sql title=Query -SELECT hasAll([[1, 2], [3, 4]], [[1, 2], [3, 5]]) -``` - -```response title=Response -0 -``` - - -## hasAny - -Добавлена в версии: v1.1 - -Проверяет, имеют ли два массива пересечение хотя бы по одному элементу. - -* `Null` обрабатывается как значение. -* Порядок значений в обоих массивах не важен. - -**Синтаксис** - -```sql -hasAny(arr_x, arr_y) -``` - -**Аргументы** - -* `arr_x` — массив любого типа с набором элементов. [`Array(T)`](/sql-reference/data-types/array) -* `arr_y` — массив любого типа, имеющий общий супертип с массивом `arr_x`. [`Array(T)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -* `1`, если `arr_x` и `arr_y` имеют по крайней мере один общий элемент. -* `0` — в противном случае. - -Выбрасывает исключение `NO_COMMON_TYPE`, если какие-либо элементы двух массивов не имеют общего супертипа. - -**Примеры** - -**Один массив пустой** - -```sql title=Query -SELECT hasAny([1], []) -``` - -```response title=Response -0 -``` - -**Массивы, содержащие значения NULL** - -```sql title=Query -SELECT hasAny([Null], [Null, 1]) -``` - -```response title=Response -1 -``` - -**Массивы, содержащие значения иного типа** - -```sql title=Query -SELECT hasAny([-128, 1., 512], [1]) -``` - -```response title=Response -1 -``` - -**Массивы без общего типа** - -```sql title=Query -SELECT hasAny([[1, 2], [3, 4]], ['a', 'c']) -``` - -```response title=Response -Вызывает исключение `NO_COMMON_TYPE` -``` - -**Массив массивов** - -```sql title=Query -SELECT hasAll([[1, 2], [3, 4]], [[1, 2], [1, 2]]) -``` - -```response title=Response -1 -``` - - -## hasSubstr - -Введена в версии: v20.6 - -Проверяет, встречаются ли все элементы массива array2 в массиве array1 в точно таком же порядке. -Соответственно, функция вернёт `1` тогда и только тогда, когда array1 = prefix + array2 + suffix. - -Другими словами, функция проверяет, содержатся ли все элементы массива array2 в массиве array1, аналогично функции `hasAll`. -Кроме того, она проверяет, что элементы расположены в одном и том же порядке в обоих массивах array1 и array2. - -* Функция вернёт `1`, если array2 пустой. -* `Null` обрабатывается как значение. Другими словами, `hasSubstr([1, 2, NULL, 3, 4], [2,3])` вернёт `0`. Однако `hasSubstr([1, 2, NULL, 3, 4], [2,NULL,3])` вернёт `1`. -* Порядок значений в обоих массивах имеет значение. - -Вызывает исключение `NO_COMMON_TYPE`, если какой-либо из элементов двух массивов не имеет общего супертипа. - -**Синтаксис** - -```sql -hasSubstr(arr1, arr2) -``` - -**Аргументы** - -* `arr1` — Массив произвольного типа с набором элементов. [`Array(T)`](/sql-reference/data-types/array) -* `arr2` — Массив произвольного типа с набором элементов. [`Array(T)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает `1`, если массив `arr1` содержит массив `arr2`. В противном случае возвращает `0`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Оба массива пусты** - -```sql title=Query -SELECT hasSubstr([], []) -``` - -```response title=Response -1 -``` - -**Массивы, содержащие значения NULL** - -```sql title=Query -SELECT hasSubstr([1, Null], [Null]) -``` - -```response title=Response -1 -``` - -**Массивы, содержащие значения разных типов** - -```sql title=Query -SELECT hasSubstr([1.0, 2, 3, 4], [1, 3]) -``` - -```response title=Response -0 -``` - -**Массивы строк** - -```sql title=Query -SELECT hasSubstr(['a', 'b'], ['a']) -``` - -```response title=Response -1 -``` - -**Массивы с корректным порядком** - -```sql title=Query -SELECT hasSubstr(['a', 'b' , 'c'], ['a', 'b']) -``` - -```response title=Response -1 -``` - -**Массивы с некорректным порядком** - -```sql title=Query -SELECT hasSubstr(['a', 'b' , 'c'], ['a', 'c']) -``` - -```response title=Response -0 -``` - -**Массив массивов** - -```sql title=Query -SELECT hasSubstr([[1, 2], [3, 4], [5, 6]], [[1, 2], [3, 4]]) -``` - -```response title=Response -1 -``` - -**Массивы без единого типа** - -```sql title=Query -SELECT hasSubstr([1, 2, NULL, 3, 4], ['a']) -``` - -```response title=Response -Вызывает исключение `NO_COMMON_TYPE` -``` - - -## indexOf - -Добавлена в версии: v1.1 - -Функция возвращает индекс первого элемента со значением 'x' (начиная с 1), если он есть в массиве. -Если массив не содержит искомого значения, функция возвращает `0`. - -Элементы со значением `NULL` обрабатываются как обычные значения. - -**Синтаксис** - -```sql -indexOf(arr, x) -``` - -**Аргументы** - -* `arr` — Массив, в котором выполняется поиск значения `x`. [`Array(T)`](/sql-reference/data-types/array) -* `x` — Значение первого совпадающего элемента в `arr`, индекс которого требуется вернуть. [`UInt64`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает индекс (отсчёт от единицы) первого вхождения `x` в `arr`, если такое значение существует. В противном случае возвращает `0`. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Простой пример** - -```sql title=Query -SELECT indexOf([5, 4, 1, 3], 3) -``` - -```response title=Response -4 -``` - -**Массив с NULL-значениями** - -```sql title=Query -SELECT indexOf([1, 3, NULL, NULL], NULL) -``` - -```response title=Response -3 -``` - - -## indexOfAssumeSorted - -Добавлено в: v24.12 - -Возвращает индекс первого элемента со значением 'x' (начиная с `1`), если он есть в массиве. -Если массив не содержит искомого значения, функция возвращает `0`. - -:::note -В отличие от функции `indexOf`, эта функция предполагает, что массив отсортирован -по возрастанию. Если массив не отсортирован, результаты не определены. -::: - -**Синтаксис** - -```sql -indexOfAssumeSorted(arr, x) -``` - -**Аргументы** - -* `arr` — отсортированный массив для поиска. [`Array(T)`](/sql-reference/data-types/array) -* `x` — значение первого совпадающего элемента в отсортированном массиве `arr`, индекс которого нужно вернуть. [`UInt64`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает индекс (нумерация с единицы) первого `x` в `arr`, если такой элемент существует. В противном случае возвращает `0`. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Простой пример** - -```sql title=Query -SELECT indexOfAssumeSorted([1, 3, 3, 3, 4, 4, 5], 4) -``` - -```response title=Response -5 -``` - - -## length - -Добавлена в: v1.1 - -Вычисляет длину строки или массива. - -* Для аргументов типа String или FixedString: вычисляет количество байт в строке. -* Для аргументов типа Array: вычисляет количество элементов в массиве. -* При применении к аргументу типа FixedString функция является константным выражением. - -Обратите внимание, что количество байт в строке не совпадает с количеством -Unicode "code points" (кодовых точек) и не совпадает с количеством Unicode "grapheme clusters" -(того, что мы обычно называем "символами"), и не совпадает с видимой шириной строки. - -В строках допустимо наличие нулевых байтов (ASCII NULL), и они также будут учитываться. - -**Синтаксис** - -```sql -length(x) -``` - -**Псевдонимы**: `OCTET_LENGTH` - -**Аргументы** - -* `x` — значение, для которого вычисляется количество байт (для String/FixedString) или элементов (для Array). [`String`](/sql-reference/data-types/string) или [`FixedString`](/sql-reference/data-types/fixedstring) или [`Array(T)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает количество байт в String/FixedString `x` или количество элементов в массиве `x`. Тип: [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример для строки String** - -```sql title=Query -SELECT length('Hello, world!') -``` - -```response title=Response -13 -``` - -**Пример массива** - -```sql title=Query -SELECT length(['Hello', 'world']) -``` - -```response title=Response -2 -``` - -**пример constexpr** - -```sql title=Query -WITH 'hello' || toString(number) AS str -SELECT str, -isConstant(length(str)) AS str_length_is_constant, -isConstant(length(str::FixedString(6))) AS fixed_str_length_is_constant -FROM numbers(3) -``` - -```response title=Response -┌─str────┬─str_length_is_constant─┬─fixed_str_length_is_constant─┐ -│ hello0 │ 0 │ 1 │ -│ hello1 │ 0 │ 1 │ -│ hello2 │ 0 │ 1 │ -└────────┴────────────────────────┴──────────────────────────────┘ -``` - -**пример Unicode** - -```sql title=Query -SELECT 'ёлка' AS str1, length(str1), lengthUTF8(str1), normalizeUTF8NFKD(str1) AS str2, length(str2), lengthUTF8(str2) -``` - -```response title=Response -┌─str1─┬─length(str1)─┬─lengthUTF8(str1)─┬─str2─┬─length(str2)─┬─lengthUTF8(str2)─┐ -│ ёлка │ 8 │ 4 │ ёлка │ 10 │ 5 │ -└──────┴──────────────┴──────────────────┴──────┴──────────────┴──────────────────┘ -``` - -**пример ascii_vs_utf8** - -```sql title=Query -SELECT 'ábc' AS str, length(str), lengthUTF8(str) -``` - -```response title=Response -┌─str─┬─length(str)──┬─lengthUTF8(str)─┐ -│ ábc │ 4 │ 3 │ -└─────┴──────────────┴─────────────────┘ -``` - - -## notEmpty - -Добавлена в: v1.1 - -Проверяет, является ли входной массив непустым. - -Массив считается непустым, если он содержит по крайней мере один элемент. - -:::note -Её работу можно оптимизировать, включив настройку [`optimize_functions_to_subcolumns`](/operations/settings/settings#optimize_functions_to_subcolumns). При `optimize_functions_to_subcolumns = 1` функция читает только подстолбец [size0](/sql-reference/data-types/array#array-size) вместо чтения и обработки всего столбца-массива. Запрос `SELECT notEmpty(arr) FROM table` преобразуется в `SELECT arr.size0 != 0 FROM TABLE`. -::: - -Функцию также можно применять к значениям типов `String` и `UUID`. - -**Синтаксис** - -```sql -notEmpty(arr) -``` - -**Аргументы** - -* `arr` — входной массив. [`Array(T)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает `1` для непустого массива или `0` для пустого массива. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT notEmpty([1,2]); -``` - -```response title=Response -1 -``` - - -## range - -Введена в версии: v1.1 - -Возвращает массив чисел от `start` до `end - 1` с шагом `step`. - -Поддерживаемые типы: - -* `UInt8/16/32/64` - -* `Int8/16/32/64` - -* Все аргументы `start`, `end`, `step` должны быть одним из указанных выше поддерживаемых типов. Элементы возвращаемого массива будут иметь тип — общий супертип аргументов. - -* Генерируется исключение, если функция возвращает массив с общей длиной больше числа элементов, указанного настройкой [`function_range_max_elements_in_block`](../../operations/settings/settings.md#function_range_max_elements_in_block). - -* Возвращает `NULL`, если какой-либо аргумент имеет тип Nullable(Nothing). Генерируется исключение, если какой-либо аргумент имеет значение `NULL` (тип Nullable(T)). - -**Синтаксис** - -```sql -range([start, ] end [, step]) -``` - -**Аргументы** - -* `start` — Необязательный параметр. Первый элемент массива. Обязателен, если используется `step`. Значение по умолчанию: `0`. - `end` — Обязательный параметр. Число, до которого (не включительно) строится массив. - `step` — Необязательный параметр. Определяет шаг между элементами массива. Значение по умолчанию: `1`. - -**Возвращаемое значение** - -Массив чисел от `start` до `end - 1` с шагом `step`. [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT range(5), range(1, 5), range(1, 5, 2), range(-1, 5, 2); -``` - -```response title=Response -┌─range(5)────┬─range(1, 5)─┬─range(1, 5, 2)─┬─range(-1, 5, 2)─┐ -│ [0,1,2,3,4] │ [1,2,3,4] │ [1,3] │ [-1,1,3] │ -└─────────────┴─────────────┴────────────────┴─────────────────┘ -``` - - -## replicate - -Добавлено в: v1.1 - -Создаёт массив, содержащий одно значение. - -**Синтаксис** - -```sql -replicate(x, arr) -``` - -**Аргументы** - -* `x` — значение, которым заполняется результирующий массив. [`Any`](/sql-reference/data-types) -* `arr` — массив. [`Array(T)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает массив той же длины, что и `arr`, заполненный значением `x`. [`Array(T)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT replicate(1, ['a', 'b', 'c']); -``` - -```response title=Response -┌─replicate(1, ['a', 'b', 'c'])───┐ -│ [1, 1, 1] │ -└─────────────────────────────────┘ -``` - - -## reverse - -Добавлена в версии v1.1 - -Меняет порядок следования элементов во входном массиве или символов во входной строке на обратный. - -**Синтаксис** - -```sql -reverse(arr | str) -``` - -**Аргументы** - -* `arr | str` — Исходный массив или строка. [`Array(T)`](/sql-reference/data-types/array) или [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает массив или строку, в которой элементы или символы расположены в обратном порядке. - -**Примеры** - -**Массив в обратном порядке** - -```sql title=Query -SELECT reverse([1, 2, 3, 4]); -``` - -```response title=Response -[4, 3, 2, 1] -``` - -**Реверс строки** - -```sql title=Query -SELECT reverse('abcd'); -``` - -```response title=Response -'dcba' -``` - {/*AUTOGENERATED_END*/ } ## Функции расстояния {#distance-functions} -Все поддерживаемые функции описаны в [документации по функциям расстояния](../../sql-reference/functions/distance-functions.md). +Все поддерживаемые функции описаны в [документации по функциям расстояния](../../sql-reference/functions/distance-functions.md). \ No newline at end of file diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/bit-functions.md b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/bit-functions.md index b498926b06d..06e012ac32d 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/bit-functions.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/bit-functions.md @@ -1,698 +1,23 @@ --- -description: 'Справочник по битовым функциям' -sidebar_label: 'Битовые функции' +description: 'Документация по побитовым функциям' +sidebar_label: 'Побитовые' slug: /sql-reference/functions/bit-functions -title: 'Битовые функции' +title: 'Побитовые функции' doc_type: 'reference' --- +# Битовые функции +Битовые функции могут применяться к любой паре типов из `UInt8`, `UInt16`, `UInt32`, `UInt64`, `Int8`, `Int16`, `Int32`, `Int64`, `Float32` или `Float64`. Некоторые функции поддерживают типы `String` и `FixedString`. -# Побитовые функции - -Побитовые функции работают для любой пары типов из `UInt8`, `UInt16`, `UInt32`, `UInt64`, `Int8`, `Int16`, `Int32`, `Int64`, `Float32` или `Float64`. Некоторые функции поддерживают типы `String` и `FixedString`. - -Тип результата — целое число с количеством бит, равным максимальному количеству бит среди его аргументов. Если хотя бы один из аргументов — знаковый, результат будет знаковым числом. Если аргумент является числом с плавающей запятой, он приводится к типу Int64. +Тип результата — целое число с количеством бит, равным максимальному количеству бит среди аргументов. Если хотя бы один из аргументов знаковый, результат является знаковым числом. Если аргумент — число с плавающей запятой, оно приводится к типу Int64. {/* - Во время сборки фреймворка документации внутреннее содержимое приведённых ниже тегов - заменяется документацией, сгенерированной из system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. + Внутреннее содержимое тегов ниже при сборке фреймворка документации + заменяется на документацию, сгенерированную из system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. См.: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## bitAnd - -Добавлено в: v1.1 - -Выполняет побитовую операцию AND между двумя значениями. - -**Синтаксис** - -```sql -bitAnd(a, b) -``` - -**Аргументы** - -* `a` — первое значение. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) -* `b` — второе значение. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает результат побитовой операции `a AND b` - -**Примеры** - -**Пример использования** - -```sql title=Query -CREATE TABLE bits -( - `a` UInt8, - `b` UInt8 -) -ENGINE = Memory; - -INSERT INTO bits VALUES (0, 0), (0, 1), (1, 0), (1, 1); - -SELECT - a, - b, - bitAnd(a, b) -FROM bits -``` - -```response title=Response -┌─a─┬─b─┬─bitAnd(a, b)─┐ -│ 0 │ 0 │ 0 │ -│ 0 │ 1 │ 0 │ -│ 1 │ 0 │ 0 │ -│ 1 │ 1 │ 1 │ -└───┴───┴──────────────┘ -``` - - -## bitCount - -Добавлена в: v20.3 - -Вычисляет количество битов, установленных в 1, в двоичном представлении числа. - -**Синтаксис** - -```sql -bitCount(x) -``` - -**Аргументы** - -* `x` — Целочисленное или вещественное значение. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает количество битов, равных единице, в `x`. [`UInt8`](../data-types/int-uint.md). - -:::note -Функция не преобразует входное значение к типу с большей разрядностью ([расширение знака](https://en.wikipedia.org/wiki/Sign_extension)). -Например: `bitCount(toUInt8(-1)) = 8`. -::: - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT bin(333), bitCount(333); -``` - -```response title=Response -┌─bin(333)─────────┬─bitCount(333)─┐ -│ 0000000101001101 │ 5 │ -└──────────────────┴───────────────┘ -``` - - -## bitHammingDistance - -Добавлено в: v21.1 - -Возвращает [расстояние Хэмминга](https://en.wikipedia.org/wiki/Hamming_distance) между битовыми представлениями двух чисел. -Может использоваться с функциями [`SimHash`](../../sql-reference/functions/hash-functions.md#ngramSimHash) для обнаружения частично дублирующихся строк. -Чем меньше расстояние, тем более похожи строки. - -**Синтаксис** - -```sql -bitHammingDistance(x, y) -``` - -**Аргументы** - -* `x` — первое число для вычисления расстояния Хэмминга. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) -* `y` — второе число для вычисления расстояния Хэмминга. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает расстояние Хэмминга между `x` и `y` типа [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT bitHammingDistance(111, 121); -``` - -```response title=Response -┌─bitHammingDistance(111, 121)─┐ -│ 3 │ -└──────────────────────────────┘ -``` - - -## bitNot - -Добавлена в версии: v1.1 - -Выполняет побитовую операцию NOT. - -**Синтаксис** - -```sql -bitNot(a) -``` - -**Аргументы** - -* `a` — Значение, к которому применяется побитовое отрицание (NOT). [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает результат `~a`, то есть `a` с инвертированными битами. - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT - CAST('5', 'UInt8') AS original, - bin(original) AS original_binary, - bitNot(original) AS result, - bin(bitNot(original)) AS result_binary; -``` - -```response title=Response -┌─original─┬─original_binary─┬─result─┬─result_binary─┐ -│ 5 │ 00000101 │ 250 │ 11111010 │ -└──────────┴─────────────────┴────────┴───────────────┘ -``` - - -## bitOr - -Добавлено в: v1.1 - -Выполняет побитовое операция OR между двумя значениями. - -**Синтаксис** - -```sql -bitOr(a, b) -``` - -**Аргументы** - -* `a` — первое значение. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) -* `b` — второе значение. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает результат побитовой операции `a OR b` - -**Примеры** - -**Пример использования** - -```sql title=Query -CREATE TABLE bits -( - `a` UInt8, - `b` UInt8 -) -ENGINE = Memory; - -INSERT INTO bits VALUES (0, 0), (0, 1), (1, 0), (1, 1); - -SELECT - a, - b, - bitOr(a, b) -FROM bits; -``` - -```response title=Response -┌─a─┬─b─┬─bitOr(a, b)─┐ -│ 0 │ 0 │ 0 │ -│ 0 │ 1 │ 1 │ -│ 1 │ 0 │ 1 │ -│ 1 │ 1 │ 1 │ -└───┴───┴─────────────┘ -``` - - -## bitRotateLeft - -Добавлена в версии: v1.1 - -Выполняет циклический сдвиг битов влево на указанное количество позиций. Биты, вышедшие за левую границу, циклически переносятся вправо. - -**Синтаксис** - -```sql -bitRotateLeft(a, N) -``` - -**Аргументы** - -* `a` — значение для циклического сдвига. [`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) -* `N` — число позиций циклического сдвига влево. [`UInt8/16/32/64`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает результат циклического сдвига того же типа, что и `a`. [`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT 99 AS a, bin(a), bitRotateLeft(a, 2) AS a_rotated, bin(a_rotated); -``` - -```response title=Response -┌──a─┬─bin(a)───┬─a_rotated─┬─bin(a_rotated)─┐ -│ 99 │ 01100011 │ 141 │ 10001101 │ -└────┴──────────┴───────────┴────────────────┘ -``` - - -## bitRotateRight - -Добавлена в: v1.1 - -Циклически сдвигает биты вправо на заданное число позиций. Биты, которые выходят за пределы, появляются слева. - -**Синтаксис** - -```sql -bitRotateRight(a, N) -``` - -**Аргументы** - -* `a` — значение для циклического сдвига. [`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) -* `N` — количество позиций, на которое выполняется циклический сдвиг вправо. [`UInt8/16/32/64`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает значение после циклического сдвига того же типа, что и `a`. [`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT 99 AS a, bin(a), bitRotateRight(a, 2) AS a_rotated, bin(a_rotated); -``` - -```response title=Response -┌──a─┬─bin(a)───┬─a_rotated─┬─bin(a_rotated)─┐ -│ 99 │ 01100011 │ 216 │ 11011000 │ -└────┴──────────┴───────────┴────────────────┘ -``` - - -## bitShiftLeft - -Впервые появился в: v1.1 - -Выполняет сдвиг двоичного представления значения влево на заданное число битовых позиций. - -`FixedString` или `String` рассматриваются как одно многобайтное значение. - -Биты значения типа `FixedString` теряются по мере их выхода за пределы при сдвиге. -Напротив, значение типа `String` расширяется дополнительными байтами, поэтому биты не теряются. - -**Синтаксис** - -```sql -bitShiftLeft(a, N) -``` - -**Аргументы** - -* `a` — Значение для сдвига. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`String`](/sql-reference/data-types/string) или [`FixedString`](/sql-reference/data-types/fixedstring) -* `N` — Количество позиций сдвига. [`UInt8/16/32/64`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает сдвинутое значение с типом, совпадающим с типом `a`. - -**Примеры** - -**Пример использования с двоичным кодированием** - -```sql title=Query -SELECT 99 AS a, bin(a), bitShiftLeft(a, 2) AS a_shifted, bin(a_shifted); -``` - -```response title=Response -┌──a─┬─bin(99)──┬─a_shifted─┬─bin(bitShiftLeft(99, 2))─┐ -│ 99 │ 01100011 │ 140 │ 10001100 │ -└────┴──────────┴───────────┴──────────────────────────┘ -``` - -**Пример использования в шестнадцатеричном формате** - -```sql title=Query -SELECT 'abc' AS a, hex(a), bitShiftLeft(a, 4) AS a_shifted, hex(a_shifted); -``` - -```response title=Response -┌─a───┬─hex('abc')─┬─a_shifted─┬─hex(bitShiftLeft('abc', 4))─┐ -│ abc │ 616263 │ &0 │ 06162630 │ -└─────┴────────────┴───────────┴─────────────────────────────┘ -``` - -**Пример использования с кодировкой FixedString** - -```sql title=Query -SELECT toFixedString('abc', 3) AS a, hex(a), bitShiftLeft(a, 4) AS a_shifted, hex(a_shifted); -``` - -```response title=Response -┌─a───┬─hex(toFixedString('abc', 3))─┬─a_shifted─┬─hex(bitShiftLeft(toFixedString('abc', 3), 4))─┐ -│ abc │ 616263 │ &0 │ 162630 │ -└─────┴──────────────────────────────┴───────────┴───────────────────────────────────────────────┘ -``` - - -## bitShiftRight - -Введено в: v1.1 - -Сдвигает двоичное представление значения на указанное число бит вправо. - -`FixedString` или `String` рассматривается как одно многобайтное значение. - -Биты значения типа `FixedString` теряются по мере их смещения за пределы разрядной сетки. -Напротив, значение типа `String` дополняется дополнительными байтами, поэтому биты не теряются. - -**Синтаксис** - -```sql -bitShiftRight(a, N) -``` - -**Аргументы** - -* `a` — Значение для сдвига. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`String`](/sql-reference/data-types/string) или [`FixedString`](/sql-reference/data-types/fixedstring) -* `N` — Количество позиций для сдвига. [`UInt8/16/32/64`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает сдвинутое значение с тем же типом, что и у `a`. - -**Примеры** - -**Пример использования с двоичным кодированием** - -```sql title=Query -SELECT 101 AS a, bin(a), bitShiftRight(a, 2) AS a_shifted, bin(a_shifted); -``` - -```response title=Response -┌───a─┬─bin(101)─┬─a_shifted─┬─bin(bitShiftRight(101, 2))─┐ -│ 101 │ 01100101 │ 25 │ 00011001 │ -└─────┴──────────┴───────────┴────────────────────────────┘ -``` - -**Пример использования шестнадцатеричного кодирования** - -```sql title=Query -SELECT 'abc' AS a, hex(a), bitShiftLeft(a, 4) AS a_shifted, hex(a_shifted); -``` - -```response title=Response -┌─a───┬─hex('abc')─┬─a_shifted─┬─hex(bitShiftRight('abc', 12))─┐ -│ abc │ 616263 │ │ 0616 │ -└─────┴────────────┴───────────┴───────────────────────────────┘ -``` - -**Пример использования с кодировкой FixedString** - -```sql title=Query -SELECT toFixedString('abc', 3) AS a, hex(a), bitShiftRight(a, 12) AS a_shifted, hex(a_shifted); -``` - -```response title=Response -┌─a───┬─hex(toFixedString('abc', 3))─┬─a_shifted─┬─hex(bitShiftRight(toFixedString('abc', 3), 12))─┐ -│ abc │ 616263 │ │ 000616 │ -└─────┴──────────────────────────────┴───────────┴─────────────────────────────────────────────────┘ -``` - - -## bitSlice - -Добавлено в: v22.2 - -Возвращает подстроку бит длиной 'length' бит, начиная с бита с индексом 'offset'. - -**Синтаксис** - -```sql -bitSlice(s, offset[, length]) -``` - -**Аргументы** - -* `s` — Строка или фиксированная строка, из которой выполняется извлечение. [`String`](/sql-reference/data-types/string) или [`FixedString`](/sql-reference/data-types/fixedstring) -* `offset` — - Начальная позиция бита (индексация с 1). -* Положительные значения: отсчет от начала строки. -* Отрицательные значения: отсчет от конца строки. - - [`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) -* `length` — - Необязательный параметр. Количество бит для извлечения. -* Положительные значения: извлекается `length` бит. -* Отрицательные значения: извлечение от смещения до `(string_length - |length|)`. -* Если параметр опущен: извлечение от смещения до конца строки. -* Если длина не делится на 8, результат дополняется нулями справа. - [`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает строку, содержащую извлеченные биты, представленные в виде бинарной последовательности. Результат всегда дополняется до границ байта (кратности 8 бит). [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT bin('Hello'), bin(bitSlice('Hello', 1, 8)); -SELECT bin('Hello'), bin(bitSlice('Hello', 1, 2)); -SELECT bin('Hello'), bin(bitSlice('Hello', 1, 9)); -SELECT bin('Hello'), bin(bitSlice('Hello', -4, 8)); -``` - -```response title=Response -┌─bin('Hello')─────────────────────────────┬─bin(bitSlice('Hello', 1, 8))─┐ -│ 0100100001100101011011000110110001101111 │ 01001000 │ -└──────────────────────────────────────────┴──────────────────────────────┘ -┌─bin('Hello')─────────────────────────────┬─bin(bitSlice('Hello', 1, 2))─┐ -│ 0100100001100101011011000110110001101111 │ 01000000 │ -└──────────────────────────────────────────┴──────────────────────────────┘ -┌─bin('Hello')─────────────────────────────┬─bin(bitSlice('Hello', 1, 9))─┐ -│ 0100100001100101011011000110110001101111 │ 0100100000000000 │ -└──────────────────────────────────────────┴──────────────────────────────┘ -┌─bin('Hello')─────────────────────────────┬─bin(bitSlice('Hello', -4, 8))─┐ -│ 0100100001100101011011000110110001101111 │ 11110000 │ -└──────────────────────────────────────────┴───────────────────────────────┘ -``` - - -## bitTest - -Добавлено в версии: v1.1 - -Принимает число и преобразует его в [двоичную форму](https://en.wikipedia.org/wiki/Binary_number), затем возвращает значение бита на заданной позиции. Подсчёт битов ведётся справа налево, начиная с 0. - -**Синтаксис** - -```sql -bitTest(a, i) -``` - -**Аргументы** - -* `a` — число для преобразования. [`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) -* `i` — позиция бита, который нужно вернуть. [`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает значение бита на позиции `i` в двоичном представлении числа `a` типа [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT bin(2), bitTest(2, 1); -``` - -```response title=Response -┌─bin(2)───┬─bitTest(2, 1)─┐ -│ 00000010 │ 1 │ -└──────────┴───────────────┘ -``` - - -## bitTestAll - -Впервые добавлена в: v1.1 - -Возвращает результат [логического И](https://en.wikipedia.org/wiki/Logical_conjunction) (оператор AND) всех битов в указанных позициях. -Подсчёт ведётся справа налево, начиная с 0. - -Логическое И между двумя битами истинно тогда и только тогда, когда оба входных бита истинны. - -**Синтаксис** - -```sql -bitTestAll(a, index1[, index2, ... , indexN]) -``` - -**Аргументы** - -* `a` — Целочисленное значение. [`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) -* `index1, ...` — Одна или несколько позиций битов. [`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает результат логической конъюнкции типа [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования 1** - -```sql title=Query -SELECT bitTestAll(43, 0, 1, 3, 5); -``` - -```response title=Response -┌─bin(43)──┬─bitTestAll(43, 0, 1, 3, 5)─┐ -│ 00101011 │ 1 │ -└──────────┴────────────────────────────┘ -``` - -**Пример использования № 2** - -```sql title=Query -SELECT bitTestAll(43, 0, 1, 3, 5, 2); -``` - -```response title=Response -┌─bin(43)──┬─bitTestAll(4⋯1, 3, 5, 2)─┐ -│ 00101011 │ 0 │ -└──────────┴──────────────────────────┘ -``` - - -## bitTestAny - -Впервые появилась в версии v1.1 - -Возвращает результат [логического сложения](https://en.wikipedia.org/wiki/Logical_disjunction) (оператора ИЛИ) всех битов на заданных позициях в числе. -Подсчёт ведётся справа налево, начиная с 0. - -Логическое ИЛИ между двумя битами истинно, если хотя бы один из входных битов истинен. - -**Синтаксис** - -```sql -bitTestAny(a, index1[, index2, ... , indexN]) -``` - -**Аргументы** - -* `a` — Целое число. [`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) -* `index1, ...` — Одна или несколько позиций бит. [`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает результат операции логического «ИЛИ» [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования 1** - -```sql title=Query -SELECT bitTestAny(43, 0, 2); -``` - -```response title=Response -┌─bin(43)──┬─bitTestAny(43, 0, 2)─┐ -│ 00101011 │ 1 │ -└──────────┴──────────────────────┘ -``` - -**Пример использования 2** - -```sql title=Query -SELECT bitTestAny(43, 4, 2); -``` - -```response title=Response -┌─bin(43)──┬─bitTestAny(43, 4, 2)─┐ -│ 00101011 │ 0 │ -└──────────┴──────────────────────┘ -``` - - -## bitXor - -Добавлена в версии v1.1 - -Выполняет побитовую операцию исключающего ИЛИ (XOR) между двумя значениями. - -**Синтаксис** - -```sql -bitXor(a, b) -``` - -**Аргументы** - -* `a` — первое значение. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) -* `b` — второе значение. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает результат побитовой операции `a XOR b`. - -**Примеры** - -**Пример использования** - -```sql title=Query -CREATE TABLE bits -( - `a` UInt8, - `b` UInt8 -) -ENGINE = Memory; - -INSERT INTO bits VALUES (0, 0), (0, 1), (1, 0), (1, 1); - -SELECT - a, - b, - bitXor(a, b) -FROM bits; -``` - -```response title=Response -┌─a─┬─b─┬─bitXor(a, b)─┐ -│ 0 │ 0 │ 0 │ -│ 0 │ 1 │ 1 │ -│ 1 │ 0 │ 1 │ -│ 1 │ 1 │ 0 │ -└───┴───┴──────────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/bitmap-functions.md b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/bitmap-functions.md index 21546625f9e..4f6f4f4df92 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/bitmap-functions.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/bitmap-functions.md @@ -1,729 +1,21 @@ --- -description: 'Справочник по функциям Bitmap' +description: 'Документация по функциям Bitmap' sidebar_label: 'Bitmap' slug: /sql-reference/functions/bitmap-functions title: 'Функции Bitmap' doc_type: 'reference' --- +# Функции битмапов - -# Функции для битовых карт - -Битовые карты можно создавать двумя способами. Первый способ — с помощью агрегирующей функции groupBitmap с суффиксом `-State`, второй — создание битовой карты на основе объекта Array. +Битмапы можно создавать двумя способами. Первый — с помощью агрегатной функции groupBitmap с суффиксом `-State`, второй — путём построения битмапа из объекта Array. {/* - Содержимое тегов ниже при сборке фреймворка документации - заменяется документацией, сгенерированной из system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. + Внутреннее содержимое тегов ниже при сборке фреймворка документации + заменяется на документацию, сгенерированную из system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. См.: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## bitmapAnd - -Введена в версии: v20.1 - -Вычисляет логическую конъюнкцию (AND) двух битмапов. - -**Синтаксис** - -```sql -bitmapAnd(bitmap1, bitmap2) -``` - -**Аргументы** - -* `bitmap1` — первый объект bitmap. [`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). -* `bitmap2` — второй объект bitmap. [`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - -**Возвращаемое значение** - -Возвращает bitmap, содержащий биты, присутствующие в обоих входных объектах bitmap [`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT bitmapToArray(bitmapAnd(bitmapBuild([1, 2, 3]), bitmapBuild([3, 4, 5]))) AS res; -``` - -```response title=Response -┌─res─┐ -│ [3] │ -└─────┘ -``` - - -## bitmapAndCardinality - -Добавлена в версии: v20.1 - -Возвращает кардинальность логической конъюнкции (AND) двух битмапов. - -**Синтаксис** - -```sql -bitmapAndCardinality(bitmap1, bitmap2) -``` - -**Аргументы** - -* `bitmap1` — первый объект битмапа. [`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). -* `bitmap2` — второй объект битмапа. [`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - -**Возвращаемое значение** - -Возвращает количество установленных битов в пересечении двух битмапов [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT bitmapAndCardinality(bitmapBuild([1,2,3]), bitmapBuild([3,4,5])) AS res; -``` - -```response title=Response -┌─res─┐ -│ 1 │ -└─────┘ -``` - - -## bitmapAndnot - -Добавлена в версии: v20.1 - -Вычисляет разность множеств A AND-NOT B между двумя битмапами. - -**Синтаксис** - -```sql -bitmapAndnot(bitmap1, bitmap2) -``` - -**Аргументы** - -* `bitmap1` — первый объект bitmap. [`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). -* `bitmap2` — второй объект bitmap. [`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - -**Возвращаемое значение** - -Возвращает bitmap, содержащий биты, установленные в первом bitmap, но отсутствующие во втором. [`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT bitmapToArray(bitmapAndnot(bitmapBuild([1, 2, 3]), bitmapBuild([3, 4, 5]))) AS res; -``` - -```response title=Response -┌─res────┐ -│ [1, 2] │ -└────────┘ -``` - - -## bitmapAndnotCardinality - -Введена в версии v20.1 - -Возвращает мощность результата операции AND-NOT над двумя битовыми картами. - -**Синтаксис** - -```sql -bitmapAndnotCardinality(bitmap1, bitmap2) -``` - -**Аргументы** - -* `bitmap1` — первый объект bitmap. [`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). -* `bitmap2` — второй объект bitmap. [`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - -**Возвращаемое значение** - -Возвращает количество установленных битов в результате `bitmap1 AND-NOT bitmap2` [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT bitmapAndnotCardinality(bitmapBuild([1,2,3]), bitmapBuild([3,4,5])) AS res; -``` - -```response title=Response -┌─res─┐ -│ 2 │ -└─────┘ -``` - - -## bitmapBuild - -Добавлена в версии v20.1. - -Создает битмап из массива беззнаковых целых чисел. Является противоположностью функции [`bitmapToArray`](/sql-reference/functions/bitmap-functions#bitmapToArray). - -**Синтаксис** - -```sql -bitmapBuild(array) -``` - -**Аргументы** - -* `array` — массив беззнаковых целых чисел. [`Array(UInt*)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает битмап, построенный на основе переданного массива [`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT bitmapBuild([1, 2, 3, 4, 5]) AS res, toTypeName(res); -``` - -```response title=Response -┌─res─┬─toTypeName(bitmapBuild([1, 2, 3, 4, 5]))─────┐ -│ │ AggregateFunction(groupBitmap, UInt8) │ -└─────┴──────────────────────────────────────────────┘ -``` - - -## bitmapCardinality - -Появилась в версии: v20.1 - -Возвращает количество установленных битов (кардинальность) в битовой карте. - -**Синтаксис** - -```sql -bitmapCardinality(bitmap) -``` - -**Аргументы** - -* `bitmap` — объект типа Bitmap. [`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - -**Возвращаемое значение** - -Возвращает количество установленных битов в `bitmap`, тип результата — [`UInt64`](/sql-reference/data-types/int-uint). - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT bitmapCardinality(bitmapBuild([1, 3, 3, 5, 7, 7])) AS res -``` - -```response title=Response -┌─res─┐ -│ 4 │ -└─────┘ -``` - - -## bitmapContains - -Впервые появилась в: v20.1 - -Проверяет, содержит ли битмап заданный элемент. - -**Синтаксис** - -```sql -bitmapContains(bitmap, value) -``` - -**Аргументы** - -* `bitmap` — объект типа Bitmap. [`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - `value` — элемент, для которого выполняется проверка. [(U)Int8/16/32/64](/sql-reference/data-types/int-uint/) - -**Возвращаемое значение** - -Возвращает `1`, если `bitmap` содержит указанное значение, иначе `0` [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT bitmapContains(bitmapBuild([1, 2, 3]), 2) AS res; -``` - -```response title=Response -┌─res─┐ -│ 1 │ -└─────┘ -``` - - -## bitmapHasAll - -Добавлена в версии: v20.1 - -Проверяет, содержит ли первый битмап все установленные биты второго битмапа. - -**Синтаксис** - -```sql -bitmapHasAll(bitmap1, bitmap2) -``` - -**Аргументы** - -* `bitmap1` — первый объект bitmap. [`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - `bitmap2` — второй объект bitmap. [`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - -**Возвращаемое значение** - -Возвращает `1`, если все установленные биты второго bitmap присутствуют в первом bitmap, в противном случае — `0` [`UInt8`](/sql-reference/data-types/int-uint). - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT bitmapHasAll(bitmapBuild([1, 2, 3]), bitmapBuild([2, 3])) AS res; -``` - -```response title=Response -┌─res─┐ -│ 1 │ -└─────┘ -``` - - -## bitmapHasAny - -Впервые появилось в: v20.1 - -Проверяет, содержит ли первый битмап какие-либо биты, установленные во втором битмапе. - -**Синтаксис** - -```sql -bitmapHasAny(bitmap1, bitmap2) -``` - -**Аргументы** - -* `bitmap1` — первый объект bitmap. [`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). -* `bitmap2` — второй объект bitmap. [`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - -**Возвращаемое значение** - -Возвращает `1`, если какие-либо биты второго bitmap присутствуют в первом bitmap, иначе `0` [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT bitmapHasAny(bitmapBuild([1, 2, 3]), bitmapBuild([3, 4, 5])) AS res; -``` - -```response title=Response -┌─res─┐ -│ 1 │ -└─────┘ -``` - - -## bitmapMax - -Появилась в версии: v20.1 - -Возвращает позицию старшего установленного бита в битмапе или `0`, если битмап пуст. - -**Синтаксис** - -```sql -bitmapMax(bitmap) -``` - -**Аргументы** - -* `bitmap` — объект Bitmap. [`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - -**Возвращаемое значение** - -Возвращает позицию старшего установленного бита в `bitmap`, иначе `0` типа [`UInt64`](/sql-reference/data-types/int-uint). - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT bitmapMax(bitmapBuild([1, 2, 3, 4, 5])) AS res; -``` - -```response title=Response -┌─res─┐ -│ 5 │ -└─────┘ -``` - - -## bitmapMin - -Впервые представлена в версии v20.1 - -Возвращает позицию наименьшего установленного бита в битовой карте. Если все биты сброшены — `UINT32_MAX` (`UINT64_MAX`, если битовая карта содержит более чем `2^64` бит). - -**Синтаксис** - -```sql -bitmapMin(bitmap) -``` - -**Аргументы** - -* `bitmap` — объект Bitmap. [`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - -**Возвращаемое значение** - -Возвращает позицию младшего установленного бита в объекте `bitmap` или `UINT32_MAX`/`UINT64_MAX` [`UInt64`](/sql-reference/data-types/int-uint). - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT bitmapMin(bitmapBuild([3, 5, 2, 6])) AS res; -``` - -```response title=Response -┌─res─┐ -│ 2 │ -└─────┘ -``` - - -## bitmapOr - -Впервые появилась в: v20.1 - -Вычисляет логическую дизъюнкцию (OR) двух битовых карт. - -**Синтаксис** - -```sql -bitmapOr(bitmap1, bitmap2) -``` - -**Аргументы** - -* `bitmap1` — первый объект bitmap. [`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - `bitmap2` — второй объект bitmap. [`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - -**Возвращаемое значение** - -Возвращает bitmap, содержащий установленные биты, присутствующие хотя бы в одном из входных bitmap-объектов [`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT bitmapToArray(bitmapOr(bitmapBuild([1, 2, 3]), bitmapBuild([3, 4, 5]))) AS res; -``` - -```response title=Response -┌─res─────────────┐ -│ [1, 2, 3, 4, 5] │ -└─────────────────┘ -``` - - -## bitmapOrCardinality - -Введена в версии: v20.1 - -Возвращает мощность логической дизъюнкции (OR) двух битовых карт. - -**Синтаксис** - -```sql -bitmapOrCardinality(bitmap1, bitmap2) -``` - -**Аргументы** - -* `bitmap1` — первый bitmap-объект. [`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - `bitmap2` — второй bitmap-объект. [`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - -**Возвращаемое значение** - -Возвращает количество установленных битов в объединении двух bitmap-объектов [`UInt64`](/sql-reference/data-types/int-uint). - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT bitmapOrCardinality(bitmapBuild([1,2,3]), bitmapBuild([3,4,5])) AS res; -``` - -```response title=Response -┌─res─┐ -│ 5 │ -└─────┘ -``` - - -## bitmapSubsetInRange - -Впервые появился в версии v20.1 - -Возвращает подмножество битовой карты, содержащее только установленные биты в указанном диапазоне [start, end). Используется индексация с единицы. - -**Синтаксис** - -```sql -bitmapSubsetInRange(bitmap, start, end) -``` - -**Аргументы** - -* `bitmap` — битовая карта, из которой извлекается поднабор. [`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - `start` — начало диапазона (включительно). [`UInt*`](/sql-reference/data-types/int-uint) - `end` — конец диапазона (не включая). [`UInt*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает битовую карту, содержащую только биты, установленные в указанном диапазоне. [`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT bitmapToArray(bitmapSubsetInRange(bitmapBuild([1, 2, 3, 4, 5]), 2, 5)) AS res; -``` - -```response title=Response -┌─res───────┐ -│ [2, 3, 4] │ -└───────────┘ -``` - - -## bitmapSubsetLimit - -Добавлена в версии v20.1 - -Возвращает подмножество битовой карты, начиная с позиции `range_start`, содержащее не более `cardinality_limit` установленных битов. Использует индексацию, начинающуюся с 1. - -**Синтаксис** - -```sql -bitmapSubsetLimit(bitmap, range_start, cardinality_limit) -``` - -**Аргументы** - -* `bitmap` — объект bitmap. [`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - `range_start` — начало диапазона (включительно). [`UInt32`](/sql-reference/data-types/int-uint) - `cardinality_limit` — максимальное количество установленных битов в подмножестве. [`UInt32`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает bitmap, содержащий не более `cardinality_limit` установленных битов, начиная с `range_start`, типа [`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT bitmapToArray(bitmapSubsetLimit(bitmapBuild([1, 5, 3, 2, 8]), 3, 2)) AS res; -``` - -```response title=Response -┌─res────┐ -│ [5, 3] │ -└────────┘ -``` - - -## bitmapToArray - -Впервые появилась в версии: v20.1 - -Преобразует битовую карту в массив беззнаковых целых чисел. Является противоположностью функции [`bitmapBuild`](/sql-reference/functions/bitmap-functions#bitmapBuild). - -**Синтаксис** - -```sql -bitmapToArray(bitmap) -``` - -**Аргументы** - -* `bitmap` — битовая карта для преобразования. [`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - -**Возвращаемое значение** - -Возвращает массив беззнаковых целых чисел, содержащихся в битовой карте [`Array(UInt*)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT bitmapToArray(bitmapBuild([1, 2, 3, 4, 5])) AS res; -``` - -```response title=Response -┌─res─────────────┐ -│ [1, 2, 3, 4, 5] │ -└─────────────────┘ -``` - - -## bitmapTransform - -Впервые появилась в: v20.1 - -Изменяет до N бит в битовой карте, заменяя определённые значения битов из `from_array` на соответствующие значения из `to_array`. - -**Синтаксис** - -```sql -bitmapTransform(bitmap, from_array, to_array) -``` - -**Аргументы** - -* `bitmap` — объект Bitmap. [`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - `from_array` — массив исходных установленных бит, которые необходимо заменить. [`Array(T)`](/sql-reference/data-types/array). - `to_array` — массив новых установленных бит, на которые производится замена. [`Array(T)`](/sql-reference/data-types/array). - -**Возвращаемое значение** - -Возвращает bitmap с элементами, преобразованными в соответствии с указанным отображением. [`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT bitmapToArray(bitmapTransform(bitmapBuild([1, 2, 3, 4, 5]), [2, 4], [20, 40])) AS res; -``` - -```response title=Response -┌─res───────────────┐ -│ [1, 3, 5, 20, 40] │ -└───────────────────┘ -``` - - -## bitmapXor - -Введена в версии v20.1 - -Вычисляет симметрическую разность (XOR) двух битмапов. - -**Синтаксис** - -```sql -bitmapXor(bitmap1, bitmap2) -``` - -**Аргументы** - -* `bitmap1` — первый объект bitmap. [`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). -* `bitmap2` — второй объект bitmap. [`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - -**Возвращаемое значение** - -Возвращает bitmap, содержащий биты, установленные в одном из входных bitmap-объектов, но не в обоих. [`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT bitmapToArray(bitmapXor(bitmapBuild([1, 2, 3]), bitmapBuild([3, 4, 5]))) AS res; -``` - -```response title=Response -┌─res──────────┐ -│ [1, 2, 4, 5] │ -└──────────────┘ -``` - - -## bitmapXorCardinality - -Добавлена в версии: v20.1 - -Возвращает мощность результата XOR (симметрической разности) двух битмапов. - -**Синтаксис** - -```sql -bitmapXorCardinality(bitmap1, bitmap2) -``` - -**Аргументы** - -* `bitmap1` — первый объект bitmap. [`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - `bitmap2` — второй объект bitmap. [`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - -**Возвращаемое значение** - -Возвращает количество установленных битов в симметрической разности двух объектов bitmap [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT bitmapXorCardinality(bitmapBuild([1,2,3]), bitmapBuild([3,4,5])) AS res; -``` - -```response title=Response -┌─res─┐ -│ 4 │ -└─────┘ -``` - - -## subBitmap - -Введена в версии: v21.9 - -Возвращает подмножество битовой карты, начиная с позиции `offset`. Максимальная кардинальность возвращаемой битовой карты — `cardinality_limit`. - -**Синтаксис** - -```sql -subBitmap(bitmap, offset, cardinality_limit) -``` - -**Аргументы** - -* `bitmap` — объект Bitmap. [`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - `offset` — количество установленных (единичных) битов, которые нужно пропустить от начала (нумерация с нуля). [`UInt32`](/sql-reference/data-types/int-uint) - `cardinality_limit` — максимальное количество установленных (единичных) битов, включаемых в подмножество. [`UInt32`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает bitmap, содержащий не более `limit` установленных битов, начиная после пропуска `offset` установленных битов в порядке возрастания. [`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT bitmapToArray(subBitmap(bitmapBuild([1, 2, 3, 4, 5]), 2, 2)) AS res; -``` - -```response title=Response -┌─res────┐ -│ [3, 4] │ -└────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/comparison-functions.md b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/comparison-functions.md index 9b966c742f8..8e840c2a7cb 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/comparison-functions.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/comparison-functions.md @@ -6,18 +6,14 @@ title: 'Функции сравнения' doc_type: 'reference' --- - - # Функции сравнения - - ## Правила сравнения -Функции сравнения, приведённые ниже, возвращают `0` или `1` типа [UInt8](/sql-reference/data-types/int-uint). Сравниваться могут только значения в пределах одной группы (например, `UInt16` и `UInt64`), но не из разных групп (например, `UInt16` и `DateTime`). -Возможны сравнения чисел и строк, а также сравнение строк с датами и дат со временем. +Перечисленные ниже функции сравнения возвращают значения `0` или `1` типа [UInt8](/sql-reference/data-types/int-uint). Сравнивать можно только значения внутри одной группы (например, `UInt16` и `UInt64`), но не между группами (например, `UInt16` и `DateTime`). +Возможны сравнения чисел и строк, а также строк с датами и дат с временем. Для кортежей и массивов используется лексикографическое сравнение, то есть сравнение выполняется для каждого соответствующего -элемента кортежа/массива левой и правой стороны. +элемента кортежа/массива слева и справа. Сравнивать можно следующие типы: @@ -30,325 +26,15 @@ doc_type: 'reference' :::note Строки сравниваются побайтно. Это может приводить к неожиданным результатам, если одна из строк содержит многобайтовые символы в кодировке UTF-8. -Строка S1, которая имеет другую строку S2 в качестве префикса, считается больше строки S2. +Строка S1, для которой строка S2 является префиксом, считается более длинной, чем S2. ::: {/* - Внутреннее содержимое тегов ниже при сборке фреймворка документации - заменяется документацией, сгенерированной из system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. + Внутреннее содержимое тегов ниже заменяется во время сборки фреймворка документации + документацией, сгенерированной из system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. См.: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## equals - -Впервые представлен в версии v1.1 - -Сравнивает два значения на равенство. - -**Синтаксис** - -```sql -equals(a, b) - -- a = b - -- a == b -``` - -**Аргументы** - -* `a` — первое значение.[*](#comparison-rules) - `b` — второе значение.[*](#comparison-rules) - -**Возвращаемое значение** - -Возвращает `1`, если `a` равно `b`, в противном случае — `0` типа [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT 1 = 1, 1 = 2; -``` - -```response title=Response -┌─equals(1, 1)─┬─equals(1, 2)─┐ -│ 1 │ 0 │ -└──────────────┴──────────────┘ -``` - - -## greater - -Введён в версии: v1.1 - -Сравнивает два значения на предмет отношения «больше чем». - -**Синтаксис** - -```sql -greater(a, b) - -- a > b -``` - -**Аргументы** - -* `a` — первое значение.[*](#comparison-rules) - `b` — второе значение.[*](#comparison-rules) - -**Возвращаемое значение** - -Возвращает `1`, если `a` больше, чем `b`, иначе `0` [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT 2 > 1, 1 > 2; -``` - -```response title=Response -┌─greater(2, 1)─┬─greater(1, 2)─┐ -│ 1 │ 0 │ -└───────────────┴───────────────┘ -``` - - -## greaterOrEquals - -Впервые появилось в версии: v1.1 - -Сравнивает два значения, проверяя отношение «больше или равно». - -**Синтаксис** - -```sql -greaterOrEquals(a, b) - -- a >= b -``` - -**Аргументы** - -* `a` — первое значение.[*](#comparison-rules) - `b` — второе значение.[*](#comparison-rules) - -**Возвращаемое значение** - -Возвращает `1`, если `a` больше или равно `b`, иначе `0` типа [`UInt8`](/sql-reference/data-types/int-uint). - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT 2 >= 1, 2 >= 2, 1 >= 2; -``` - -```response title=Response -┌─greaterOrEquals(2, 1)─┬─greaterOrEquals(2, 2)─┬─greaterOrEquals(1, 2)─┐ -│ 1 │ 1 │ 0 │ -└───────────────────────┴───────────────────────┴───────────────────────┘ -``` - - -## isDistinctFrom - -Добавлена в: v25.9 - -Выполняет NULL-безопасное сравнение «не равно» между двумя значениями. -Возвращает `true`, если значения различаются (не равны), включая случай, когда одно значение равно NULL, а другое — нет. -Возвращает `false`, если значения равны или если оба равны NULL. - -**Синтаксис** - -```sql -isDistinctFrom(x, y) -``` - -**Аргументы** - -* `x` — первое сравниваемое значение. Может иметь любой тип данных ClickHouse. [`Any`](/sql-reference/data-types) -* `y` — второе сравниваемое значение. Может иметь любой тип данных ClickHouse. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает `true`, если два значения различаются, при этом значения NULL считаются сравнимыми: - -* Возвращает `true`, если x != y. -* Возвращает `true`, если ровно одно из x или y равно NULL. -* Возвращает `false`, если x = y или оба x и y равны NULL. [`Bool`](/sql-reference/data-types/boolean) - -**Примеры** - -**Базовое использование с числами и NULL** - -```sql title=Query -SELECT - isDistinctFrom(1, 2) AS result_1, - isDistinctFrom(1, 1) AS result_2, - isDistinctFrom(NULL, 1) AS result_3, - isDistinctFrom(NULL, NULL) AS result_4 -``` - -```response title=Response -┌─result_1─┬─result_2─┬─result_3─┬─result_4─┐ -│ 1 │ 0 │ 1 │ 0 │ -└──────────┴──────────┴──────────┴──────────┘ -``` - - -## isNotDistinctFrom - -Впервые появилась в версии: v25.9 - -Выполняет null‑безопасное сравнение на равенство между двумя значениями. -Возвращает `true`, если значения равны, включая случай, когда оба равны NULL. -Возвращает `false`, если значения различаются или если только одно из них равно NULL. - -**Синтаксис** - -```sql -isNotDistinctFrom(x, y) -``` - -**Аргументы** - -* `x` — первое значение для сравнения. Может иметь любой тип данных ClickHouse. [`Any`](/sql-reference/data-types) -* `y` — второе значение для сравнения. Может иметь любой тип данных ClickHouse. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает `true`, если два значения равны, считая NULL сравнимым значением: - -* Возвращает `true`, если x = y. -* Возвращает `true`, если и x, и y равны NULL. -* Возвращает `false`, если x != y или только одно из x или y равно NULL. [`Bool`](/sql-reference/data-types/boolean) - -**Примеры** - -**Простейший пример использования с числами и NULL** - -```sql title=Query -SELECT - isNotDistinctFrom(1, 1) AS result_1, - isNotDistinctFrom(1, 2) AS result_2, - isNotDistinctFrom(NULL, NULL) AS result_3, - isNotDistinctFrom(NULL, 1) AS result_4 -``` - -```response title=Response -┌─result_1─┬─result_2─┬─result_3─┬─result_4─┐ -│ 1 │ 0 │ 1 │ 0 │ -└──────────┴──────────┴──────────┴──────────┘ -``` - - -## less - -Добавлено в версии: v1.1 - -Сравнивает два значения по отношению «меньше чем». - -**Синтаксис** - -```sql -less(a, b) - -- a < b -``` - -**Аргументы** - -* `a` — первое значение.[*](#comparison-rules) - `b` — второе значение.[*](#comparison-rules) - -**Возвращаемое значение** - -Возвращает `1`, если `a` меньше `b`, в противном случае — `0`. Тип данных: [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT 1 < 2, 2 < 1; -``` - -```response title=Response -┌─less(1, 2)─┬─less(2, 1)─┐ -│ 1 │ 0 │ -└────────────┴────────────┘ -``` - - -## lessOrEquals - -Добавлена в версии: v1.1 - -Сравнивает два значения на отношение «меньше или равно». - -**Синтаксис** - -```sql -lessOrEquals(a, b) --- a <= b -``` - -**Аргументы** - -* `a` — первое значение.[*](#comparison-rules) - `b` — второе значение.[*](#comparison-rules) - -**Возвращаемое значение** - -Возвращает `1`, если `a` меньше или равно `b`, иначе — `0` типа [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT 1 <= 2, 2 <= 2, 3 <= 2; -``` - -```response title=Response -┌─lessOrEquals(1, 2)─┬─lessOrEquals(2, 2)─┬─lessOrEquals(3, 2)─┐ -│ 1 │ 1 │ 0 │ -└────────────────────┴────────────────────┴────────────────────┘ -``` - - -## notEquals - -Появился в версии: v1.1 - -Сравнивает два значения на неравенство. - -**Синтаксис** - -```sql -notEquals(a, b) - -- a != b - -- a <> b -``` - -**Аргументы** - -* `a` — первое значение.[*](#comparison-rules) - `b` — второе значение.[*](#comparison-rules) - -**Возвращаемое значение** - -Возвращает `1`, если `a` не равно `b`, иначе — `0`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT 1 != 2, 1 != 1; -``` - -```response title=Response -┌─notEquals(1, 2)─┬─notEquals(1, 1)─┐ -│ 1 │ 0 │ -└─────────────────┴─────────────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/conditional-functions.md b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/conditional-functions.md index 471631dbf04..50ec7c9fcf1 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/conditional-functions.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/conditional-functions.md @@ -6,17 +6,13 @@ title: 'Условные функции' doc_type: 'reference' --- - - # Условные функции +## Обзор {#overview} +### Прямое использование результатов условных выражений -## Обзор - -### Непосредственное использование результатов условных выражений - -Условные выражения всегда возвращают `0`, `1` или `NULL`. Поэтому вы можете непосредственно использовать результаты условных выражений, как в этом примере: +Условные выражения всегда возвращают значение `0`, `1` или `NULL`. Поэтому вы можете напрямую использовать результаты условных выражений, как показано ниже: ```sql SELECT left < right AS is_small @@ -31,9 +27,10 @@ FROM LEFT_RIGHT └──────────┘ ``` + ### Значения NULL в условных выражениях -Если в условных выражениях участвуют значения `NULL`, результат также будет `NULL`. +Когда в условных выражениях участвует `NULL`, результат также будет `NULL`. ```sql SELECT @@ -47,9 +44,9 @@ SELECT └───────────────┴───────────────┴──────────────────┴────────────────────┘ ``` -Поэтому при работе с типами `Nullable` следует тщательно составлять запросы. +Поэтому при работе с типами `Nullable` запросы следует составлять особенно тщательно. -Следующий пример демонстрирует это на неудачной попытке добавить условие равенства к `multiIf`. +Следующий пример демонстрирует это на ситуации, когда к `multiIf` не добавлено условие равенства. ```sql SELECT @@ -67,15 +64,16 @@ FROM LEFT_RIGHT └──────┴───────┴──────────────────┘ ``` + ### Оператор CASE -Выражение CASE в ClickHouse предоставляет условную логику, аналогичную оператору CASE в SQL. Оно проверяет условия и возвращает значения на основе первого истинного условия. +Выражение CASE в ClickHouse реализует условную логику, аналогичную оператору CASE в SQL. Оно проверяет условия и возвращает значения в зависимости от первого условия, которое оказалось истинным. -ClickHouse поддерживает две формы CASE: +ClickHouse поддерживает две формы записи CASE: 1. `CASE WHEN ... THEN ... ELSE ... END`
- Эта форма обеспечивает полную гибкость и внутренне реализована с использованием функции [multiIf](/sql-reference/functions/conditional-functions#multiIf). Каждое условие вычисляется независимо, и выражения могут включать неконстантные значения. + Эта форма предоставляет максимальную гибкость и внутренне реализована с использованием функции [multiIf](/sql-reference/functions/conditional-functions#multiIf). Каждое условие вычисляется независимо, а выражения могут включать неконстантные значения. ```sql SELECT @@ -88,7 +86,7 @@ SELECT FROM system.numbers WHERE number < 5; --- преобразуется в +-- транслируется в SELECT number, multiIf((number % 2) = 0, number + 1, (number % 2) = 1, number * 10, number) AS result @@ -103,14 +101,14 @@ WHERE number < 5 │ 4 │ 5 │ └────────┴────────┘ -Получено 5 строк. Прошло: 0.002 сек. +Получено 5 строк. Затрачено: 0.002 сек. ``` 2. `CASE WHEN THEN ... WHEN THEN ... ELSE ... END`
Эта более компактная форма оптимизирована для сопоставления с константными значениями и внутри использует `caseWithExpression()`. -Например, следующее выражение является корректным: +Например, следующая конструкция является допустимой: ```sql SELECT @@ -123,15 +121,13 @@ SELECT FROM system.numbers WHERE number < 3; --- транслируется в +-- преобразуется в SELECT number, caseWithExpression(number, 0, 100, 1, 200, 0) AS result FROM system.numbers WHERE number < 3 -``` - ┌─number─┬─result─┐ │ 0 │ 100 │ @@ -139,11 +135,10 @@ WHERE number < 3 │ 2 │ 0 │ └────────┴────────┘ -3 строк в наборе. Прошло: 0.002 сек. - -```` +Получено 3 строки. Прошло: 0.002 сек. +``` -Эта форма также не требует, чтобы возвращаемые выражения были константами. +В этой форме также не требуется, чтобы возвращаемые выражения были константами. ```sql SELECT @@ -171,17 +166,18 @@ WHERE number < 3 └────────┴──────────────────────────┘ Получено 3 строки. Затрачено: 0.001 сек. -```` +``` + -#### Ограничения +#### Особенности -ClickHouse определяет результирующий тип выражения CASE (или его внутреннего аналога, такого как `multiIf`) до вычисления каких‑либо условий. Это важно, когда возвращаемые выражения различаются по типу, например используют разные часовые пояса или числовые типы. +ClickHouse определяет результирующий тип выражения CASE (или его внутреннего аналога, такого как `multiIf`) до вычисления каких-либо условий. Это важно, когда выражения, возвращаемые в разных ветвях, имеют разные типы, например разные часовые пояса или числовые типы. -* Результирующий тип выбирается как наиболее общий совместимый тип среди всех ветвей. -* После выбора этого типа все остальные ветви неявно приводятся к нему — даже если их логика никогда не будет выполнена во время выполнения. -* Для типов вроде DateTime64, где часовой пояс является частью сигнатуры типа, это может приводить к неожиданному поведению: первый встреченный часовой пояс может использоваться для всех ветвей, даже если в других ветвях указаны другие часовые пояса. +* Результирующий тип выбирается на основе наибольшего совместимого типа среди всех ветвей. +* После выбора этого типа все остальные ветви неявно приводятся к нему — даже если соответствующая ветка никогда не будет выбрана при выполнении. +* Для типов вроде DateTime64, где часовой пояс является частью сигнатуры типа, это может приводить к неожиданному поведению: первый встретившийся часовой пояс может быть использован для всех ветвей, даже если в других ветвях указаны разные часовые пояса. -Например, в приведённом ниже случае во всех строках будет возвращаться метка времени в часовом поясе первой совпавшей ветви, то есть `Asia/Kolkata`. +Например, ниже во всех строках возвращается метка времени в часовом поясе первой совпавшей ветви, то есть `Asia/Kolkata`. ```sql SELECT @@ -208,12 +204,12 @@ WHERE number < 3 │ 2 │ 1970-01-01 05:30:00.000 │ └────────┴─────────────────────────┘ -Получено 3 строки. Прошло: 0.011 сек. +Получено 3 строки. Время выполнения: 0.011 сек. ``` -Здесь ClickHouse видит несколько возвращаемых типов `DateTime64(3, <timezone>)`. Он выводит общий тип как `DateTime64(3, 'Asia/Kolkata'` по первому встретившемуся варианту, неявно приводя остальные ветви к этому типу. +Здесь ClickHouse видит несколько возвращаемых типов `DateTime64(3, )`. Он определяет общий тип как `DateTime64(3, 'Asia/Kolkata'` по первому встреченному значению, неявно приводя остальные ветви к этому типу. -Эту проблему можно решить, преобразовав значение в строку, чтобы сохранить задуманное форматирование часового пояса: +Эту ситуацию можно исправить, преобразовав значение в строку, чтобы сохранить требуемое форматирование часового пояса: ```sql SELECT @@ -233,8 +229,6 @@ SELECT multiIf(number = 0, formatDateTime(fromUnixTimestamp64Milli(0), '%F %T', 'Asia/Kolkata'), number = 1, formatDateTime(fromUnixTimestamp64Milli(0), '%F %T', 'America/Los_Angeles'), formatDateTime(fromUnixTimestamp64Milli(0), '%F %T', 'UTC')) AS tz FROM system.numbers WHERE number < 3 -``` - ┌─number─┬─tz──────────────────┐ │ 0 │ 1970-01-01 05:30:00 │ @@ -242,335 +236,15 @@ WHERE number < 3 │ 2 │ 1970-01-01 00:00:00 │ └────────┴─────────────────────┘ -3 строки в наборе. Прошло: 0.002 сек. - -``` - - +Получено 3 строки. Прошло: 0.002 сек. ``` +{/* + Внутреннее содержимое тегов ниже при сборке фреймворка документации + заменяется документацией, сгенерированной из system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. + См.: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md + */ } {/*AUTOGENERATED_START*/ } -## clamp - -Введена в версии: v24.5 - -Ограничивает значение заданными минимальной и максимальной границами. - -Если значение меньше минимума, возвращается минимум. Если значение больше максимума, возвращается максимум. В противном случае возвращается само значение. - -Все аргументы должны быть сравнимых типов. Тип результата — наибольший совместимый тип среди всех аргументов. - -**Синтаксис** - -```sql -clamp(value, min, max) -``` - -**Аргументы** - -* `value` — Значение, которое нужно ограничить. - `min` — Нижняя граница. - `max` — Верхняя граница. - -**Возвращаемое значение** - -Возвращает значение, ограниченное диапазоном [min, max]. - -**Примеры** - -**Базовый пример использования** - -```sql title=Query -SELECT clamp(5, 1, 10) AS result; -``` - -```response title=Response -┌─result─┐ -│ 5 │ -└────────┘ -``` - -**Значение меньше минимального** - -```sql title=Query -SELECT clamp(-3, 0, 7) AS result; -``` - -```response title=Response -┌─result─┐ -│ 0 │ -└────────┘ -``` - -**Значение превышает максимум** - -```sql title=Query -SELECT clamp(15, 0, 7) AS result; -``` - -```response title=Response -┌─result─┐ -│ 7 │ -└────────┘ -``` - - -## greatest - -Введена в версии: v1.1 - -Возвращает наибольшее значение среди аргументов. -Аргументы `NULL` игнорируются. - -* Для массивов возвращает лексикографически наибольший массив. -* Для типов `DateTime` тип результата продвигается до наиболее «широкого» типа (например, до `DateTime64`, если он смешан с `DateTime32`). - -:::note Используйте настройку `least_greatest_legacy_null_behavior` для изменения поведения `NULL` -Версия [24.12](/whats-new/changelog/2024#a-id2412a-clickhouse-release-2412-2024-12-19) внесла изменение, несовместимое с предыдущими версиями: значения `NULL` игнорируются, тогда как ранее возвращалось `NULL`, если один из аргументов был `NULL`. -Чтобы сохранить прежнее поведение, установите настройку `least_greatest_legacy_null_behavior` (по умолчанию: `false`) в значение `true`. -::: - -**Синтаксис** - -```sql -greatest(x1[, x2, ...]) -``` - -**Аргументы** - -* `x1[, x2, ...]` — Одного или нескольких значений для сравнения. Все аргументы должны иметь сопоставимые типы. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает наибольшее значение среди аргументов, приведённое к наибольшему совместимому типу. [`Any`](/sql-reference/data-types) - -**Примеры** - -**Числовые типы** - -```sql title=Query -SELECT greatest(1, 2, toUInt8(3), 3.) AS result, toTypeName(result) AS type; --- Возвращаемый тип — Float64, так как UInt8 необходимо привести к 64-битному типу для сравнения. -``` - -```response title=Response -┌─result─┬─type────┐ -│ 3 │ Float64 │ -└────────┴─────────┘ -``` - -**Массивы** - -```sql title=Query -SELECT greatest(['hello'], ['there'], ['world']); -``` - -```response title=Response -┌─greatest(['hello'], ['there'], ['world'])─┐ -│ ['world'] │ -└───────────────────────────────────────────┘ -``` - -**Типы данных DateTime** - -```sql title=Query -SELECT greatest(toDateTime32(now() + toIntervalDay(1)), toDateTime64(now(), 3)); --- Возвращаемый тип — DateTime64, так как DateTime32 необходимо преобразовать в 64-битный тип для выполнения сравнения. -``` - -```response title=Response -┌─greatest(toD⋯(now(), 3))─┐ -│ 2025-05-28 15:50:53.000 │ -└──────────────────────────┘ -``` - - -## if - -Впервые появилась в версии v1.1 - -Выполняет условное ветвление. - -* Если условие `cond` принимает ненулевое значение, функция возвращает результат выражения `then`. -* Если `cond` равно нулю или NULL, возвращается результат выражения `else`. - -Настройка [`short_circuit_function_evaluation`](/operations/settings/settings#short_circuit_function_evaluation) определяет, используется ли укороченное вычисление выражений (short-circuit evaluation). - -Если настройка включена, выражение `then` вычисляется только для строк, где `cond` истинно, а выражение `else` — только для строк, где `cond` ложно. - -Например, при укороченном вычислении выражений при выполнении следующего запроса не возникает исключения «деление на ноль»: - -```sql -SELECT if(number = 0, 0, intDiv(42, number)) FROM numbers(10) -``` - -`then` и `else` должны быть одного типа. - -**Синтаксис** - -```sql -if(cond, then, else) -``` - -**Аргументы** - -* `cond` — вычисляемое условие. [`UInt8`](/sql-reference/data-types/int-uint) или [`Nullable(UInt8)`](/sql-reference/data-types/nullable) или [`NULL`](/sql-reference/syntax#null) -* `then` — выражение, возвращаемое, если `cond` истинно. -* `else` — выражение, возвращаемое, если `cond` ложно или равно `NULL`. - -**Возвращаемое значение** - -Результат выражения `then` или `else` в зависимости от значения `cond`. - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT if(1, 2 + 2, 2 + 6) AS res; -``` - -```response title=Response -┌─res─┐ -│ 4 │ -└─────┘ -``` - - -## least - -Впервые появилось в версии v1.1 - -Возвращает наименьшее значение среди аргументов. -Аргументы `NULL` игнорируются. - -* Для массивов возвращает лексикографически наименьший массив. -* Для типов DateTime тип результата повышается до наибольшего типа (например, DateTime64 при смешивании с DateTime32). - -:::note Используйте настройку `least_greatest_legacy_null_behavior` для изменения поведения `NULL` -Версия [24.12](/whats-new/changelog/2024#a-id2412a-clickhouse-release-2412-2024-12-19) внесла несовместимое с предыдущими версиями изменение, в результате которого значения `NULL` игнорируются, тогда как ранее возвращалось `NULL`, если один из аргументов был `NULL`. -Чтобы сохранить прежнее поведение, установите настройку `least_greatest_legacy_null_behavior` (по умолчанию: `false`) в значение `true`. -::: - -**Синтаксис** - -```sql -least(x1[, x2, ...]) -``` - -**Аргументы** - -* `x1[, x2, ...]` — Одно значение или несколько значений для сравнения. Все аргументы должны быть сравнимых типов. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает наименьшее значение среди аргументов, приведённое к наибольшему совместимому типу. [`Any`](/sql-reference/data-types) - -**Примеры** - -**Числовые типы** - -```sql title=Query -SELECT least(1, 2, toUInt8(3), 3.) AS result, toTypeName(result) AS type; --- Возвращаемый тип — Float64, так как UInt8 необходимо привести к 64-битному типу для сравнения. -``` - -```response title=Response -┌─result─┬─type────┐ -│ 1 │ Float64 │ -└────────┴─────────┘ -``` - -**Массивы** - -```sql title=Query -SELECT least(['hello'], ['there'], ['world']); -``` - -```response title=Response -┌─least(['hell⋯ ['world'])─┐ -│ ['hello'] │ -└──────────────────────────┘ -``` - -**Типы данных DateTime** - -```sql title=Query -SELECT least(toDateTime32(now() + toIntervalDay(1)), toDateTime64(now(), 3)); --- Возвращаемый тип — DateTime64, так как DateTime32 необходимо преобразовать в 64-битный формат для выполнения сравнения. -``` - -```response title=Response -┌─least(toDate⋯(now(), 3))─┐ -│ 2025-05-27 15:55:20.000 │ -└──────────────────────────┘ -``` - - -## multiIf - -Добавлена в версии: v1.1 - -Позволяет более компактно записывать оператор [`CASE`](/sql-reference/operators#conditional-expression) в запросе. -Последовательно вычисляет каждое условие. Для первого условия, которое истинно (ненулевое и не `NULL`), возвращает соответствующее значение ветки. -Если ни одно из условий не истинно, возвращается значение `else`. - -Настройка [`short_circuit_function_evaluation`](/operations/settings/settings#short_circuit_function_evaluation) управляет тем, -используется ли укороченное вычисление. Если оно включено, выражение `then_i` вычисляется только для строк, для которых -`((NOT cond_1) AND ... AND (NOT cond_{i-1}) AND cond_i)` истинно. - -Например, при укороченном вычислении при выполнении следующего запроса не возникает исключения деления на ноль: - -```sql -SELECT multiIf(number = 2, intDiv(1, number), number = 5) FROM numbers(10) -``` - -Все выражения ветвей и `else` должны иметь общий супертип. Условия, результатом которых является `NULL`, считаются ложными. - -**Синтаксис** - -```sql -multiIf(cond_1, then_1, cond_2, then_2, ..., else) -``` - -**Псевдонимы**: `caseWithoutExpression`, `caseWithoutExpr` - -**Аргументы** - -* `cond_N` — N‑е вычисляемое условие, которое определяет, будет ли возвращено значение `then_N`. [`UInt8`](/sql-reference/data-types/int-uint) или [`Nullable(UInt8)`](/sql-reference/data-types/nullable) или [`NULL`](/sql-reference/syntax#null) -* `then_N` — Результат функции, когда `cond_N` истинно. - `else` — Результат функции, если ни одно из условий не истинно. - -**Возвращаемое значение** - -Возвращает результат `then_N` для соответствующего `cond_N`, иначе возвращает значение из `else`. - -**Примеры** - -**Пример использования** - -```sql title=Query -CREATE TABLE LEFT_RIGHT (left Nullable(UInt8), right Nullable(UInt8)) ENGINE = Memory; -INSERT INTO LEFT_RIGHT VALUES (NULL, 4), (1, 3), (2, 2), (3, 1), (4, NULL); - -SELECT - left, - right, - multiIf(left < right, 'левое меньше', left > right, 'левое больше', left = right, 'Оба равны', 'Значение Null') AS result -FROM LEFT_RIGHT; -``` - -```response title=Response -┌─left─┬─right─┬─result──────────┐ -│ ᴺᵁᴸᴸ │ 4 │ Значение Null │ -│ 1 │ 3 │ left меньше │ -│ 2 │ 2 │ Оба равны │ -│ 3 │ 1 │ left больше │ -│ 4 │ ᴺᵁᴸᴸ │ Значение Null │ -└──────┴───────┴─────────────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/date-time-functions.md b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/date-time-functions.md index ce5fc1f5bdd..c6691cf8b94 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/date-time-functions.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/date-time-functions.md @@ -1,16 +1,14 @@ --- -description: 'Документация по функциям работы с датами и временем' +description: 'Справочная документация по функциям для работы с датами и временем' sidebar_label: 'Даты и время' slug: /sql-reference/functions/date-time-functions -title: 'Функции работы с датами и временем' +title: 'Функции для работы с датами и временем' doc_type: 'reference' --- - - # Функции для работы с датами и временем -Большинство функций в этом разделе принимают необязательный аргумент часового пояса, например, `Europe/Amsterdam`. В этом случае используется указанный часовой пояс вместо локального (по умолчанию). +Большинство функций в этом разделе принимают необязательный аргумент часового пояса, например `Europe/Amsterdam`. В этом случае используется указанный часовой пояс вместо локального (по умолчанию). **Пример** @@ -29,5650 +27,11 @@ SELECT ``` {/* - Внутреннее содержимое тегов ниже заменяется во время сборки фреймворка документации - документацией, сгенерированной из system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. + Внутреннее содержимое тегов ниже во время сборки фреймворка документации + заменяется документацией, сгенерированной из system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. См.: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - -{/*AUTOGENERATED_START*/ } - -## UTCTimestamp - -Введена в версии: v22.11 - -Возвращает текущие дату и время на момент анализа запроса. Функция является константным выражением. - -Эта функция возвращает тот же результат, что и `now('UTC')`. Она была добавлена только для совместимости с MySQL. Предпочтительно использовать функцию [`now`](#now). - -**Синтаксис** - -```sql -UTCTimestamp() -``` - -**Псевдонимы**: `UTC_timestamp` - -**Аргументы** - -* Отсутствуют. - -**Возвращаемое значение** - -Возвращает текущие дату и время на момент анализа запроса. [`DateTime`](/sql-reference/data-types/datetime) - -**Примеры** - -**Получение текущей метки времени UTC** - -```sql title=Query -SELECT UTCTimestamp() -``` - -```response title=Response -┌──────UTCTimestamp()─┐ -│ 2024-05-28 08:32:09 │ -└─────────────────────┘ -``` - - -## YYYYMMDDToDate - -Появилась в версии v23.9 - -Преобразует число, содержащее год, месяц и день, в значение типа `Date`. -Эта функция является противоположностью функции [`toYYYYMMDD()`](/sql-reference/functions/date-time-functions#toYYYYMMDD). -Результат не определён, если входное значение не кодирует корректную дату. - -**Синтаксис** - -```sql -YYYYMMDDToDate(YYYYMMDD) -``` - -**Аргументы** - -* `YYYYMMDD` — Число, в котором закодированы год, месяц и день. [`(U)Int*`](/sql-reference/data-types/int-uint), [`Float*`](/sql-reference/data-types/float) или [`Decimal`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Возвращает значение типа `Date` на основе переданного аргумента [`Date`](/sql-reference/data-types/date) - -**Примеры** - -**Пример** - -```sql title=Query -SELECT YYYYMMDDToDate(20230911); -``` - -```response title=Response -┌─toYYYYMMDD(20230911)─┐ -│ 2023-09-11 │ -└──────────────────────┘ -``` - - -## YYYYMMDDToDate32 - -Добавлена в: v23.9 - -Преобразует числовое значение, содержащее год, месяц и день, в `Date32`. -Эта функция является противоположностью функции [`toYYYYMMDD()`](/sql-reference/functions/date-time-functions#toYYYYMMDD). -Поведение не определено, если входное значение не кодирует корректное значение `Date32`. - -**Синтаксис** - -```sql -YYYYMMDDToDate32(YYYYMMDD) -``` - -**Аргументы** - -* `YYYYMMDD` — число, содержащее год, месяц и день. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Возвращает значение типа `Date32` на основе переданных аргументов [`Date32`](/sql-reference/data-types/date32) - -**Примеры** - -**Пример** - -```sql title=Query -SELECT YYYYMMDDToDate32(20000507); -``` - -```response title=Response -┌─YYYYMMDDToDate32(20000507)─┐ -│ 2000-05-07 │ -└────────────────────────────┘ -``` - - -## YYYYMMDDhhmmssToDateTime - -Добавлена в версии: v23.9 - -Преобразует число, содержащее год, месяц, день, час, минуту и секунду, в `DateTime`. -Эта функция является противоположностью функции [`toYYYYMMDDhhmmss()`](/sql-reference/functions/date-time-functions#toYYYYMMDDhhmmss). -Результат не определён, если входное значение не задаёт корректное значение `DateTime`. - -**Синтаксис** - -```sql -YYYYMMDDhhmmssToDateTime(YYYYMMDDhhmmss[, timezone]) -``` - -**Аргументы** - -* `YYYYMMDDhhmmss` — число, содержащее год, месяц, день, час, минуту и секунду. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal`](/sql-reference/data-types/decimal) -* `timezone` — имя часового пояса. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает значение типа `DateTime`, сформированное из переданных аргументов. [`DateTime`](/sql-reference/data-types/datetime) - -**Примеры** - -**Пример** - -```sql title=Query -SELECT YYYYMMDDToDateTime(20230911131415); -``` - -```response title=Response -┌──────YYYYMMDDhhmmssToDateTime(20230911131415)─┐ -│ 2023-09-11 13:14:15 │ -└───────────────────────────────────────────────┘ -``` - - -## YYYYMMDDhhmmssToDateTime64 - -Появилась в версии: v23.9 - -Преобразует число, содержащее год, месяц, день, час, минуту и секунду, в `DateTime64`. -Эта функция является противоположностью функции [`toYYYYMMDDhhmmss()`](/sql-reference/functions/date-time-functions#toYYYYMMDDhhmmss). -Результат не определён, если входное значение не кодирует корректное значение `DateTime64`. - -**Синтаксис** - -```sql -YYYYMMDDhhmmssToDateTime64(YYYYMMDDhhmmss[, precision[, timezone]]) -``` - -**Аргументы** - -* `YYYYMMDDhhmmss` — число, содержащее год, месяц, день, час, минуту и секунду. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal`](/sql-reference/data-types/decimal) -* `precision` — точность дробной части (0–9). [`UInt8`](/sql-reference/data-types/int-uint) -* `timezone` — название часового пояса. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает значение типа `DateTime64` на основании переданных аргументов [`DateTime64`](/sql-reference/data-types/datetime64) - -**Примеры** - -**Пример** - -```sql title=Query -SELECT YYYYMMDDhhmmssToDateTime64(20230911131415, 3, 'Asia/Istanbul'); -``` - -```response title=Response -┌─YYYYMMDDhhmm⋯/Istanbul')─┐ -│ 2023-09-11 13:14:15.000 │ -└──────────────────────────┘ -``` - - -## addDate - -Появилась в: v23.9 - -Добавляет временной интервал к указанной дате, дате со временем или строковому представлению даты или даты со временем. -Если в результате сложения получается значение за пределами допустимого диапазона типа данных, результат не определён. - -**Синтаксис** - -```sql -addDate(datetime, interval) -``` - -**Аргументы** - -* `datetime` — дата или дата и время, к которой добавляется `interval`. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) или [`String`](/sql-reference/data-types/string) -* `interval` — интервал, который нужно добавить. [`Interval`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает дату или дату и время, полученную при добавлении `interval` к `datetime`. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Примеры** - -**Добавление интервала к дате** - -```sql title=Query -SELECT addDate(toDate('2018-01-01'), INTERVAL 3 YEAR) -``` - -```response title=Response -┌─addDate(toDa⋯valYear(3))─┐ -│ 2021-01-01 │ -└──────────────────────────┘ -``` - - -## addDays - -Появилась в версии v1.1 - -Добавляет указанное количество дней к дате, дате и времени или их строковому представлению. - -**Синтаксис** - -```sql -addDays(datetime, num) -``` - -**Аргументы** - -* `datetime` — дата или дата и время, к которой нужно добавить указанное количество дней. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) или [`String`](/sql-reference/data-types/string) -* `num` — количество добавляемых дней. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает `datetime`, увеличенную на `num` дней. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Примеры** - -**Добавление дней к различным типам дат** - -```sql title=Query -WITH - toDate('2024-01-01') AS date, - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - addDays(date, 5) AS add_days_with_date, - addDays(date_time, 5) AS add_days_with_date_time, - addDays(date_time_string, 5) AS add_days_with_date_time_string -``` - -```response title=Response -┌─add_days_with_date─┬─add_days_with_date_time─┬─add_days_with_date_time_string─┐ -│ 2024-01-06 │ 2024-01-06 00:00:00 │ 2024-01-06 00:00:00.000 │ -└────────────────────┴─────────────────────────┴────────────────────────────────┘ -``` - -**Использование альтернативного синтаксиса INTERVAL** - -```sql title=Query -SELECT dateAdd('1998-06-16'::Date, INTERVAL 10 day) -``` - -```response title=Response -┌─plus(CAST('1⋯valDay(10))─┐ -│ 1998-06-26 │ -└──────────────────────────┘ -``` - - -## addHours - -Добавлена в версии v1.1 - -Добавляет указанное количество часов к дате, дате и времени или их строковому представлению. - -**Синтаксис** - -```sql -addHours(datetime, num) -``` - -**Аргументы** - -* `datetime` — дата или дата со временем, к которой нужно прибавить указанное количество часов. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) или [`String`](/sql-reference/data-types/string) -* `num` — количество часов, на которое нужно увеличить значение. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает значение `datetime`, увеличенное на `num` часов, типа [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64(3)`](/sql-reference/data-types/datetime64) - -**Примеры** - -**Добавление часов к разным типам дат** - -```sql title=Query -WITH - toDate('2024-01-01') AS date, - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - addHours(date, 12) AS add_hours_with_date, - addHours(date_time, 12) AS add_hours_with_date_time, - addHours(date_time_string, 12) AS add_hours_with_date_time_string -``` - -```response title=Response -┌─add_hours_with_date─┬─add_hours_with_date_time─┬─add_hours_with_date_time_string─┐ -│ 2024-01-01 12:00:00 │ 2024-01-01 12:00:00 │ 2024-01-01 12:00:00.000 │ -└─────────────────────┴──────────────────────────┴─────────────────────────────────┘ -``` - -**Использование альтернативного синтаксиса INTERVAL** - -```sql title=Query -SELECT dateAdd('1998-06-16'::Date, INTERVAL 10 hour) -``` - -```response title=Response -┌─plus(CAST('1⋯alHour(10))─┐ -│ 1998-06-16 10:00:00 │ -└──────────────────────────┘ -``` - - -## addInterval - -Появилась в версии: v22.11 - -Добавляет интервал к другому интервалу или к кортежу интервалов. - -:::note -Интервалы одного и того же типа будут объединены в один интервал. Например, если переданы `toIntervalDay(1)` и `toIntervalDay(2)`, результат будет `(3)`, а не `(1,1)`. -::: - -**Синтаксис** - -```sql -addInterval(interval_1, interval_2) -``` - -**Аргументы** - -* `interval_1` — первый интервал или кортеж интервалов. [`Interval`](/sql-reference/data-types/int-uint) или [`Tuple(Interval)`](/sql-reference/data-types/tuple) -* `interval_2` — второй интервал для добавления. [`Interval`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает кортеж интервалов [`Tuple(Interval)`](/sql-reference/data-types/tuple) - -**Примеры** - -**Добавление интервалов** - -```sql title=Query -SELECT addInterval(INTERVAL 1 DAY, INTERVAL 1 MONTH); -SELECT addInterval((INTERVAL 1 DAY, INTERVAL 1 YEAR), INTERVAL 1 MONTH); -SELECT addInterval(INTERVAL 2 DAY, INTERVAL 1 DAY) -``` - -```response title=Response -┌─addInterval(toIntervalDay(1), toIntervalMonth(1))─┐ -│ (1,1) │ -└───────────────────────────────────────────────────┘ -┌─addInterval((toIntervalDay(1), toIntervalYear(1)), toIntervalMonth(1))─┐ -│ (1,1,1) │ -└────────────────────────────────────────────────────────────────────────┘ -┌─addInterval(toIntervalDay(2), toIntervalDay(1))─┐ -│ (3) │ -└─────────────────────────────────────────────────┘ -``` - - -## addMicroseconds - -Добавлена в версии: v22.6 - -Добавляет заданное количество микросекунд к дате и времени или к строковому представлению даты и времени. - -**Синтаксис** - -```sql -addMicroseconds(datetime, num) -``` - -**Аргументы** - -* `datetime` — дата и время, к которым нужно прибавить указанное количество микросекунд. [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) или [`String`](/sql-reference/data-types/string) -* `num` — количество микросекунд, которое нужно добавить. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает `date_time` плюс `num` микросекунд в формате [`DateTime64`](/sql-reference/data-types/datetime64) - -**Примеры** - -**Добавление микросекунд к различным типам даты и времени** - -```sql title=Query -WITH - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - addMicroseconds(date_time, 1000000) AS add_microseconds_with_date_time, - addMicroseconds(date_time_string, 1000000) AS add_microseconds_with_date_time_string -``` - -```response title=Response -┌─add_microseconds_with_date_time─┬─add_microseconds_with_date_time_string─┐ -│ 2024-01-01 00:00:01.000000 │ 2024-01-01 00:00:01.000000 │ -└─────────────────────────────────┴────────────────────────────────────────┘ -``` - -**Использование альтернативного синтаксиса для INTERVAL** - -```sql title=Query -SELECT dateAdd('1998-06-16'::DateTime, INTERVAL 10 microsecond) -``` - -```response title=Response -┌─plus(CAST('19⋯osecond(10))─┐ -│ 1998-06-16 00:00:00.000010 │ -└────────────────────────────┘ -``` - - -## addMilliseconds - -Добавлена в версии: v22.6 - -Добавляет указанное количество миллисекунд к значению даты и времени или к строке, содержащей дату и время. - -**Синтаксис** - -```sql -addMilliseconds(datetime, num) -``` - -**Аргументы** - -* `datetime` — дата и время, к которым нужно прибавить указанное количество миллисекунд. [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) или [`String`](/sql-reference/data-types/string) -* `num` — количество миллисекунд, которое нужно прибавить. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает `datetime`, увеличенное на `num` миллисекунд. Тип результата — [`DateTime64`](/sql-reference/data-types/datetime64) - -**Примеры** - -**Добавление миллисекунд к различным типам даты и времени** - -```sql title=Query -WITH - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - addMilliseconds(date_time, 1000) AS add_milliseconds_with_date_time, - addMilliseconds(date_time_string, 1000) AS add_milliseconds_with_date_time_string -``` - -```response title=Response -┌─add_milliseconds_with_date_time─┬─add_milliseconds_with_date_time_string─┐ -│ 2024-01-01 00:00:01.000 │ 2024-01-01 00:00:01.000 │ -└─────────────────────────────────┴────────────────────────────────────────┘ -``` - -**Использование альтернативного синтаксиса INTERVAL** - -```sql title=Query -SELECT dateAdd('1998-06-16'::DateTime, INTERVAL 10 millisecond) -``` - -```response title=Response -┌─plus(CAST('1⋯second(10))─┐ -│ 1998-06-16 00:00:00.010 │ -└──────────────────────────┘ -``` - - -## addMinutes - -Появилась в версии: v1.1 - -Добавляет указанное количество минут к дате, дате и времени или их строковому представлению. - -**Синтаксис** - -```sql -addMinutes(datetime, num) -``` - -**Аргументы** - -* `datetime` — Дата или дата и время, к которым необходимо прибавить указанное количество минут. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) или [`String`](/sql-reference/data-types/string) -* `num` — Количество минут, которое нужно прибавить. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает `datetime`, увеличенное на `num` минут, типа [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64(3)`](/sql-reference/data-types/datetime64) - -**Примеры** - -**Добавление минут к разным типам дат** - -```sql title=Query -WITH - toDate('2024-01-01') AS date, - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - addMinutes(date, 20) AS add_minutes_with_date, - addMinutes(date_time, 20) AS add_minutes_with_date_time, - addMinutes(date_time_string, 20) AS add_minutes_with_date_time_string -``` - -```response title=Response -┌─add_minutes_with_date─┬─add_minutes_with_date_time─┬─add_minutes_with_date_time_string─┐ -│ 2024-01-01 00:20:00 │ 2024-01-01 00:20:00 │ 2024-01-01 00:20:00.000 │ -└───────────────────────┴────────────────────────────┴───────────────────────────────────┘ -``` - -**Использование альтернативного синтаксиса для INTERVAL** - -```sql title=Query -SELECT dateAdd('1998-06-16'::Date, INTERVAL 10 minute) -``` - -```response title=Response -┌─plus(CAST('1⋯Minute(10))─┐ -│ 1998-06-16 00:10:00 │ -└──────────────────────────┘ -``` - - -## addMonths - -Появилась в версии: v1.1 - -Добавляет указанное количество месяцев к дате, дате и времени или к их строковому представлению. - -**Синтаксис** - -```sql -addMonths(datetime, num) -``` - -**Аргументы** - -* `datetime` — дата или дата со временем, к которой нужно добавить указанное количество месяцев. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) или [`String`](/sql-reference/data-types/string) -* `num` — количество добавляемых месяцев. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает `datetime`, увеличенное на `num` месяцев. Тип результата: [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64). - -**Примеры** - -**Добавление месяцев к различным типам дат** - -```sql title=Query -WITH - toDate('2024-01-01') AS date, - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - addMonths(date, 6) AS add_months_with_date, - addMonths(date_time, 6) AS add_months_with_date_time, - addMonths(date_time_string, 6) AS add_months_with_date_time_string -``` - -```response title=Response -┌─add_months_with_date─┬─add_months_with_date_time─┬─add_months_with_date_time_string─┐ -│ 2024-07-01 │ 2024-07-01 00:00:00 │ 2024-07-01 00:00:00.000 │ -└──────────────────────┴───────────────────────────┴──────────────────────────────────┘ -``` - -**Использование альтернативного синтаксиса INTERVAL** - -```sql title=Query -SELECT dateAdd('1998-06-16'::Date, INTERVAL 10 month) -``` - -```response title=Response -┌─plus(CAST('1⋯lMonth(10))─┐ -│ 1999-04-16 │ -└──────────────────────────┘ -``` - - -## addNanoseconds - -Добавлена в версии: v22.6 - -Добавляет указанное количество наносекунд к значению даты и времени или к его строковому представлению. - -**Синтаксис** - -```sql -addNanoseconds(datetime, num) -``` - -**Аргументы** - -* `datetime` — Дата и время, к которым нужно прибавить заданное количество наносекунд. [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) или [`String`](/sql-reference/data-types/string) -* `num` — Количество наносекунд, которое нужно добавить. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает значение `datetime`, увеличенное на `num` наносекунд, в формате [`DateTime64`](/sql-reference/data-types/datetime64) - -**Примеры** - -**Добавление наносекунд к различным типам даты и времени** - -```sql title=Query -WITH - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - addNanoseconds(date_time, 1000) AS add_nanoseconds_with_date_time, - addNanoseconds(date_time_string, 1000) AS add_nanoseconds_with_date_time_string -``` - -```response title=Response -┌─add_nanoseconds_with_date_time─┬─add_nanoseconds_with_date_time_string─┐ -│ 2024-01-01 00:00:00.000001000 │ 2024-01-01 00:00:00.000001000 │ -└────────────────────────────────┴───────────────────────────────────────┘ -``` - -**Использование альтернативного синтаксиса INTERVAL** - -```sql title=Query -SELECT dateAdd('1998-06-16'::DateTime, INTERVAL 1000 nanosecond) -``` - -```response title=Response -┌─plus(CAST('199⋯osecond(1000))─┐ -│ 1998-06-16 00:00:00.000001000 │ -└───────────────────────────────┘ -``` - - -## addQuarters - -Впервые появилась в версии v20.1 - -Добавляет указанное количество кварталов к дате, дате и времени или их строковому представлению. - -**Синтаксис** - -```sql -addQuarters(datetime, num) -``` - -**Аргументы** - -* `datetime` — дата или дата со временем, к которой прибавляется указанное количество кварталов. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) или [`String`](/sql-reference/data-types/string) -* `num` — количество кварталов, которое нужно прибавить. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает `datetime`, увеличенное на `num` кварталов. Тип результата: [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64). - -**Примеры** - -**Добавление кварталов к различным типам дат** - -```sql title=Query -WITH - toDate('2024-01-01') AS date, - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - addQuarters(date, 1) AS add_quarters_with_date, - addQuarters(date_time, 1) AS add_quarters_with_date_time, - addQuarters(date_time_string, 1) AS add_quarters_with_date_time_string -``` - -```response title=Response -┌─add_quarters_with_date─┬─add_quarters_with_date_time─┬─add_quarters_with_date_time_string─┐ -│ 2024-04-01 │ 2024-04-01 00:00:00 │ 2024-04-01 00:00:00.000 │ -└────────────────────────┴─────────────────────────────┴────────────────────────────────────┘ -``` - -**Использование альтернативного синтаксиса INTERVAL** - -```sql title=Query -SELECT dateAdd('1998-06-16'::Date, INTERVAL 10 quarter) -``` - -```response title=Response -┌─plus(CAST('1⋯uarter(10))─┐ -│ 2000-12-16 │ -└──────────────────────────┘ -``` - - -## addSeconds - -Добавлена в версии: v1.1 - -Добавляет указанное количество секунд к дате, дате со временем или их строковому представлению. - -**Синтаксис** - -```sql -addSeconds(datetime, num) -``` - -**Аргументы** - -* `datetime` — дата или дата со временем, к которой нужно прибавить указанное количество секунд. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) или [`String`](/sql-reference/data-types/string) -* `num` — количество секунд, которое нужно прибавить. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает значение `datetime`, увеличенное на `num` секунд, типа [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64(3)`](/sql-reference/data-types/datetime64) - -**Примеры** - -**Добавление секунд к различным типам дат и времени** - -```sql title=Query -WITH - toDate('2024-01-01') AS date, - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - addSeconds(date, 30) AS add_seconds_with_date, - addSeconds(date_time, 30) AS add_seconds_with_date_time, - addSeconds(date_time_string, 30) AS add_seconds_with_date_time_string -``` - -```response title=Response -┌─add_seconds_with_date─┬─add_seconds_with_date_time─┬─add_seconds_with_date_time_string─┐ -│ 2024-01-01 00:00:30 │ 2024-01-01 00:00:30 │ 2024-01-01 00:00:30.000 │ -└───────────────────────┴────────────────────────────┴───────────────────────────────────┘ -``` - -**Использование альтернативного синтаксиса INTERVAL** - -```sql title=Query -SELECT dateAdd('1998-06-16'::Date, INTERVAL 10 second) -``` - -```response title=Response -┌─dateAdd('1998-06-16'::Date, INTERVAL 10 second)─┐ -│ 1998-06-16 00:00:10 │ -└─────────────────────────────────────────────────┘ -``` - - -## addTupleOfIntervals - -Появилась в: v22.11 - -Последовательно добавляет кортеж интервалов к дате или дате-времени. - -**Синтаксис** - -```sql -addTupleOfIntervals(datetime, intervals) -``` - -**Аргументы** - -* `datetime` — дата или дата со временем, к которой нужно добавить интервалы. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32), или [`DateTime`](/sql-reference/data-types/datetime), или [`DateTime64`](/sql-reference/data-types/datetime64) -* `intervals` — кортеж интервалов, добавляемых к `datetime`. [`Tuple(Interval)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает `date` с добавленными `intervals` — [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32), или [`DateTime`](/sql-reference/data-types/datetime), или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Примеры** - -**Добавление кортежа интервалов к дате** - -```sql title=Query -WITH toDate('2018-01-01') AS date -SELECT addTupleOfIntervals(date, (INTERVAL 1 DAY, INTERVAL 1 MONTH, INTERVAL 1 YEAR)) -``` - -```response title=Response -┌─addTupleOfIntervals(date, (toIntervalDay(1), toIntervalMonth(1), toIntervalYear(1)))─┐ -│ 2019-02-02 │ -└──────────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## addWeeks - -Добавлена в: v1.1 - -Добавляет указанное количество недель к дате, дате с временем или их строковому представлению. - -**Синтаксис** - -```sql -addWeeks(datetime, num) -``` - -**Аргументы** - -* `datetime` — Дата или дата со временем, к которой нужно прибавить заданное количество недель. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) или [`String`](/sql-reference/data-types/string) -* `num` — Количество недель, которое нужно прибавить. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает `datetime` плюс `num` недель. Тип результата: [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Примеры** - -**Добавление недель к различным типам дат** - -```sql title=Query -WITH - toDate('2024-01-01') AS date, - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - addWeeks(date, 5) AS add_weeks_with_date, - addWeeks(date_time, 5) AS add_weeks_with_date_time, - addWeeks(date_time_string, 5) AS add_weeks_with_date_time_string -``` - -```response title=Response -┌─add_weeks_with_date─┬─add_weeks_with_date_time─┬─add_weeks_with_date_time_string─┐ -│ 2024-02-05 │ 2024-02-05 00:00:00 │ 2024-02-05 00:00:00.000 │ -└─────────────────────┴──────────────────────────┴─────────────────────────────────┘ -``` - -**Использование альтернативного синтаксиса INTERVAL** - -```sql title=Query -SELECT dateAdd('1998-06-16'::Date, INTERVAL 10 week) -``` - -```response title=Response -┌─plus(CAST('1⋯alWeek(10))─┐ -│ 1998-08-25 │ -└──────────────────────────┘ -``` - - -## addYears - -Впервые появилось в: v1.1 - -Добавляет заданное количество лет к дате, дате и времени или их строковому представлению. - -**Синтаксис** - -```sql -addYears(datetime, num) -``` - -**Аргументы** - -* `datetime` — дата или дата со временем, к которой нужно прибавить указанное количество лет. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) или [`String`](/sql-reference/data-types/string) -* `num` — количество лет, на которое нужно увеличить дату. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает значение `datetime`, увеличенное на `num` лет, типа [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Примеры** - -**Добавление лет к значениям разных типов дат** - -```sql title=Query -WITH - toDate('2024-01-01') AS date, - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - addYears(date, 1) AS add_years_with_date, - addYears(date_time, 1) AS add_years_with_date_time, - addYears(date_time_string, 1) AS add_years_with_date_time_string -``` - -```response title=Response -┌─add_years_with_date─┬─add_years_with_date_time─┬─add_years_with_date_time_string─┐ -│ 2025-01-01 │ 2025-01-01 00:00:00 │ 2025-01-01 00:00:00.000 │ -└─────────────────────┴──────────────────────────┴─────────────────────────────────┘ -``` - -**Использование альтернативного синтаксиса INTERVAL** - -```sql title=Query -SELECT dateAdd('1998-06-16'::Date, INTERVAL 10 year) -``` - -```response title=Response -┌─plus(CAST('1⋯alYear(10))─┐ -│ 2008-06-16 │ -└──────────────────────────┘ -``` - - -## age - -Введена в: v23.1 - -Возвращает компонент разности между `startdate` и `enddate` в выбранных единицах. -Разность вычисляется с точностью до 1 наносекунды. - -Например, разность между 2021-12-29 и 2022-01-01 составляет 3 дня для единицы «дни», -0 месяцев для единицы «месяцы» и 0 лет для единицы «годы». - -В качестве альтернативы функции `age` см. функцию [`dateDiff`](#dateDiff). - -**Синтаксис** - -```sql -age('unit', startdate, enddate[, timezone]) -``` - -**Аргументы** - -* `unit` — Тип единицы измерения интервала результата. - -| Unit | Possible values | -| ----------- | ---------------------------------------- | -| nanosecond | `nanosecond`, `nanoseconds`, `ns` | -| microsecond | `microsecond`, `microseconds`, `us`, `u` | -| millisecond | `millisecond`, `milliseconds`, `ms` | -| second | `second`, `seconds`, `ss`, `s` | -| minute | `minute`, `minutes`, `mi`, `n` | -| hour | `hour`, `hours`, `hh`, `h` | -| day | `day`, `days`, `dd`, `d` | -| week | `week`, `weeks`, `wk`, `ww` | -| month | `month`, `months`, `mm`, `m` | -| quarter | `quarter`, `quarters`, `qq`, `q` | -| year | `year`, `years`, `yyyy`, `yy` | - -* `startdate` — Первое значение времени, вычитаемое из второго (вычитаемое). [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) -* `enddate` — Второе значение времени, из которого выполняется вычитание (уменьшаемое). [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) -* `timezone` — Необязательный параметр. Название часового пояса. Если указано, применяется и к `startdate`, и к `enddate`. Если не указано, используются часовые пояса `startdate` и `enddate`. Если они различаются, результат не определён. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает разницу между `enddate` и `startdate`, выраженную в `unit`. [`Int32`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Вычисление возраста в часах** - -```sql title=Query -SELECT age('hour', toDateTime('2018-01-01 22:30:00'), toDateTime('2018-01-02 23:00:00')) -``` - -```response title=Response -┌─age('hour', toDateTime('2018-01-01 22:30:00'), toDateTime('2018-01-02 23:00:00'))─┐ -│ 24 │ -└───────────────────────────────────────────────────────────────────────────────────┘ -``` - -**Вычисление возраста в разных единицах** - -```sql title=Query -SELECT - toDate('2022-01-01') AS e, - toDate('2021-12-29') AS s, - age('day', s, e) AS day_age, - age('month', s, e) AS month_age, - age('year', s, e) AS year_age -``` - -```response title=Response -┌──────────e─┬──────────s─┬─day_age─┬─month_age─┬─year_age─┐ -│ 2022-01-01 │ 2021-12-29 │ 3 │ 0 │ 0 │ -└────────────┴────────────┴─────────┴───────────┴──────────┘ -``` - - -## changeDay - -Добавлена в версии: v24.7 - -Изменяет компонент дня в значении даты или даты и времени. - -**Синтаксис** - -```sql -changeDay(date_or_datetime, value) -``` - -**Аргументы** - -* `date_or_datetime` — значение, которое нужно изменить. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) -* `value` — новое значение. [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает значение того же типа, что и `date_or_datetime`, с изменённым компонентом дня. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT changeDay('2024-01-31'::DateTime, 15) -``` - -```response title=Response -2024-01-15 00:00:00 -``` - - -## changeHour - -Добавлена в версии v24.7 - -Изменяет часовую часть значения типа `Date` или `DateTime`. - -**Синтаксис** - -```sql -changeHour(date_or_datetime, value) -``` - -**Аргументы** - -* `date_or_datetime` — значение, которое требуется изменить. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) -* `value` — новое значение. [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает значение того же типа, что и `date_or_datetime`, с изменённым значением часа. [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT changeHour('2024-01-01 12:00:00'::DateTime, 5) -``` - -```response title=Response -2024-01-01 05:00:00 -``` - - -## changeMinute - -Добавлена в версии: v24.7 - -Изменяет минутную часть значения типа `date` или `date time`. - -**Синтаксис** - -```sql -changeMinute(date_or_datetime, value) -``` - -**Аргументы** - -* `date_or_datetime` — изменяемое значение. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) -* `value` — новое значение. [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает значение того же типа, что и `date_or_datetime`, с изменённым значением минут. [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT changeMinute('2024-01-01 12:30:00'::DateTime, 45) -``` - -```response title=Response -2024-01-01 12:45:00 -``` - - -## changeMonth - -Впервые появилась в версии v24.7 - -Изменяет месячную часть значения типа Date или DateTime. - -**Синтаксис** - -```sql -changeMonth(date_or_datetime, value) -``` - -**Аргументы** - -* `date_or_datetime` — Значение, которое нужно изменить. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) -* `value` — Новое значение. [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает значение того же типа, что и `date_or_datetime`, с изменённым значением месяца. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT changeMonth('2024-01-01'::DateTime, 12) -``` - -```response title=Response -2024-12-01 00:00:00 -``` - - -## changeSecond - -Добавлено в версии: v24.7 - -Изменяет компонент секунд в дате или дате-времени. - -**Синтаксис** - -```sql -changeSecond(date_or_datetime, value) -``` - -**Аргументы** - -* `date_or_datetime` — Значение, которое нужно изменить. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) -* `value` — Новое значение. [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает значение того же типа, что и `date_or_datetime`, с изменённым значением секунд. [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT changeSecond('2024-01-01 12:30:45'::DateTime, 15) -``` - -```response title=Response -2024-01-01 12:30:15 -``` - - -## changeYear - -Добавлена в: v24.7 - -Изменяет годовую часть значения типа `Date` или `DateTime`. - -**Синтаксис** - -```sql -changeYear(date_or_datetime, value) -``` - -**Аргументы** - -* `date_or_datetime` — Значение, которое нужно изменить. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) -* `value` — Новое значение. [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает значение того же типа, что и `date_or_datetime`, с изменённым значением года. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT changeYear('2024-01-01'::DateTime, 2023) -``` - -```response title=Response -2023-01-01 00:00:00 -``` - - -## dateDiff - -Появилась в версии: v23.4 - -Возвращает количество границ указанной временной единицы `unit`, пересечённых между `startdate` и `enddate`. -Разница вычисляется с использованием относительных единиц. Например, разница между 2021-12-29 и 2022-01-01 составляет 3 дня для единицы day -(см. [`toRelativeDayNum`](#toRelativeDayNum)), 1 месяц для единицы month (см. [`toRelativeMonthNum`](#toRelativeMonthNum)) и 1 год для единицы year -(см. [`toRelativeYearNum`](#toRelativeYearNum)). - -Если указана единица `week`, то `dateDiff` считает, что неделя начинается с понедельника. -Обратите внимание, что это поведение отличается от функции `toWeek()`, в которой недели по умолчанию начинаются с воскресенья. - -В качестве альтернативы `dateDiff` см. функцию [`age`](#age). - -**Синтаксис** - -```sql -dateDiff(единица, дата_начала, дата_окончания[, часовой_пояс]) -``` - -**Псевдонимы**: `timestampDiff`, `TIMESTAMP_DIFF`, `DATE_DIFF`, `date_diff`, `timestamp_diff` - -**Аргументы** - -* `unit` — тип интервала результата. - -| Единица | Допустимые значения | -| ----------- | ---------------------------------------- | -| nanosecond | `nanosecond`, `nanoseconds`, `ns` | -| microsecond | `microsecond`, `microseconds`, `us`, `u` | -| millisecond | `millisecond`, `milliseconds`, `ms` | -| second | `second`, `seconds`, `ss`, `s` | -| minute | `minute`, `minutes`, `mi`, `n` | -| hour | `hour`, `hours`, `hh`, `h` | -| day | `day`, `days`, `dd`, `d` | -| week | `week`, `weeks`, `wk`, `ww` | -| month | `month`, `months`, `mm`, `m` | -| quarter | `quarter`, `quarters`, `qq`, `q` | -| year | `year`, `years`, `yyyy`, `yy` | - -* `startdate` — первое значение времени, которое вычитается (вычитаемое). [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) -* `enddate` — второе значение времени, из которого вычитают (уменьшаемое). [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) -* `timezone` — необязательный параметр. Имя часового пояса. Если указано, применяется и к `startdate`, и к `enddate`. Если не указано, используются часовые пояса `startdate` и `enddate`. Если они различаются, результат не определён. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает разность между `enddate` и `startdate`, выраженную в `unit`. [`Int64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Вычисление разности дат в часах** - -```sql title=Query -SELECT dateDiff('hour', toDateTime('2018-01-01 22:00:00'), toDateTime('2018-01-02 23:00:00')) AS res -``` - -```response title=Response -┌─res─┐ -│ 25 │ -└─────┘ -``` - -**Вычисление разницы между датами в разных единицах измерения** - -```sql title=Query -SELECT - toDate('2022-01-01') AS e, - toDate('2021-12-29') AS s, - dateDiff('day', s, e) AS day_diff, - dateDiff('month', s, e) AS month_diff, - dateDiff('year', s, e) AS year_diff -``` - -```response title=Response -┌──────────e─┬──────────s─┬─day_diff─┬─month_diff─┬─year_diff─┐ -│ 2022-01-01 │ 2021-12-29 │ 3 │ 1 │ 1 │ -└────────────┴────────────┴──────────┴────────────┴───────────┘ -``` - - -## dateName - -Добавлена в: v21.7 - -Возвращает указанную часть даты. - -Возможные значения: - -* 'year' -* 'quarter' -* 'month' -* 'week' -* 'dayofyear' -* 'day' -* 'weekday' -* 'hour' -* 'minute' -* 'second' - -**Синтаксис** - -```sql -dateName(date_part, date[, timezone]) -``` - -**Аргументы** - -* `date_part` — Часть даты, которую нужно извлечь. [`String`](/sql-reference/data-types/string) -* `datetime` — Значение даты или даты и времени. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) -* `timezone` — Необязательный параметр. Часовой пояс. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает указанную часть даты. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Извлечение различных частей даты** - -```sql title=Query -WITH toDateTime('2021-04-14 11:22:33') AS date_value -SELECT - dateName('year', date_value), - dateName('month', date_value), - dateName('day', date_value) -``` - -```response title=Response -┌─dateName('year', date_value)─┬─dateName('month', date_value)─┬─dateName('day', date_value)─┐ -│ 2021 │ Апрель │ 14 │ -└──────────────────────────────┴───────────────────────────────┴─────────────────────────────┘ -``` - - -## dateTrunc - -Добавлена в версии: v20.8 - -Обрезает значение даты и времени до указанной части даты. - -**Синтаксис** - -```sql -dateTrunc(unit, datetime[, timezone]) -``` - -**Псевдонимы**: `DATE_TRUNC` - -**Аргументы** - -* `unit` — - Тип интервала, до которого усекается результат. Аргумент `unit` не чувствителен к регистру. - | Единица | Совместимость | - | -------------------------------------------- | ------------------------------------ | - | `nanosecond` | Поддерживается только для DateTime64 | - | `microsecond` | Поддерживается только для DateTime64 | - | `millisecond` | Поддерживается только для DateTime64 | - | `second` | | - | `minute` | | - | `hour` | | - | `day` | | - | `week` | | - | `month` | | - | `quarter` | | - | `year` | | - | [`String`](/sql-reference/data-types/string) | | -* `datetime` — Дата и время. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) -* `timezone` — Необязательный аргумент. Имя часового пояса для возвращаемого значения даты и времени. Если не указан, функция использует часовой пояс аргумента `datetime`. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает усечённое значение даты и времени. - -| Аргумент `unit` | Аргумент `datetime` | Тип возвращаемого значения | -| -------------------------- | --------------------------------------------------- | --------------------------------------------------------------------------------------- | -| Year, Quarter, Month, Week | `Date32` или `DateTime64` или `Date` или `DateTime` | [`Date32`](../data-types/date32.md) или [`Date`](../data-types/date.md) | -| Day, Hour, Minute, Second | `Date32`, `DateTime64`, `Date` или `DateTime` | [`DateTime64`](../data-types/datetime64.md) или [`DateTime`](../data-types/datetime.md) | -| Millisecond, Microsecond, | Любой | [`DateTime64`](../data-types/datetime64.md) | -| Nanosecond | | с точностью 3, 6 или 9 | - -**Примеры** - -**Усечение без часового пояса** - -```sql title=Query -SELECT now(), dateTrunc('hour', now()); -``` - -```response title=Response -┌───────────────now()─┬─dateTrunc('hour', now())──┐ -│ 2020-09-28 10:40:45 │ 2020-09-28 10:00:00 │ -└─────────────────────┴───────────────────────────┘ -``` - -**Усечение с заданным часовым поясом** - -```sql title=Query -SELECT now(), dateTrunc('hour', now(), 'Asia/Istanbul'); -``` - -```response title=Response -┌───────────────now()─┬─dateTrunc('hour', now(), 'Asia/Istanbul')──┐ -│ 2020-09-28 10:46:26 │ 2020-09-28 13:00:00 │ -└─────────────────────┴────────────────────────────────────────────┘ -``` - - -## formatDateTime - -Появилась в версии: v1.1 - -Форматирует дату или дату со временем в соответствии с заданной строкой формата. `format` является константным выражением, поэтому вы не можете использовать несколько форматов для одного результирующего столбца. - -`formatDateTime` использует стиль форматов даты и времени MySQL, см. [документацию MySQL](https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_date-format). - -Обратная операция для этой функции — [`parseDateTime`](/sql-reference/functions/type-conversion-functions#parsedatetime). - -Используя подстановочные поля, вы можете задать шаблон для результирующей строки. -Пример столбца в таблице ниже показывает результат форматирования для `2018-01-02 22:33:44`. - -**Подстановочные поля:** - -| Placeholder | Описание | Пример | -| ----------- | ---------------------------------------------------------- | ---------- | -| %a | краткое название дня недели (Mon-Sun) | Mon | -| %b | краткое название месяца (Jan-Dec) | Jan | -| %c | месяц как целое число (01-12) | 01 | -| %C | год, делённый на 100 и усечённый до целого (00-99) | 20 | -| %d | день месяца с ведущим нулём (01-31) | 02 | -| %D | краткий формат даты MM/DD/YY, эквивалент %m/%d/%y | 01/02/18 | -| %e | день месяца с ведущим пробелом (1-31) | 2 | -| %f | дробная часть секунды | 123456 | -| %F | краткий формат даты YYYY-MM-DD, эквивалент %Y-%m-%d | 2018-01-02 | -| %g | двухзначный формат года по ISO 8601 | 18 | -| %G | четырёхзначный формат года для номера недели по ISO | 2018 | -| %h | час в 12-часовом формате (01-12) | 09 | -| %H | час в 24-часовом формате (00-23) | 22 | -| %i | минуты (00-59) | 33 | -| %I | час в 12-часовом формате (01-12) | 10 | -| %j | день года (001-366) | 002 | -| %k | час в 24-часовом формате (00-23) | 14 | -| %l | час в 12-часовом формате (01-12) | 09 | -| %m | месяц как целое число (01-12) | 01 | -| %M | полное название месяца (January-December) | January | -| %n | символ перевода строки | | -| %p | обозначение AM или PM | PM | -| %Q | квартал (1-4) | 1 | -| %r | 12-часовой формат времени HH:MM AM/PM, эквивалент %h:%i %p | 10:30 PM | -| %R | 24-часовой формат времени HH:MM, эквивалент %H:%i | 22:33 | -| %s | секунды (00-59) | 44 | -| %S | секунды (00-59) | 44 | -| %t | символ горизонтальной табуляции | | -| %T | формат времени ISO 8601 (HH:MM:SS), эквивалент %H:%i:%S | 22:33:44 | -| %u | номер дня недели ISO 8601, где понедельник — 1 (1-7) | 2 | -| %V | номер недели по ISO 8601 (01-53) | 01 | -| %w | номер дня недели, где воскресенье — 0 (0-6) | 2 | -| %W | полное название дня недели (Monday-Sunday) | Monday | -| %y | год, последние две цифры (00-99) | 18 | -| %Y | год | 2018 | -| %z | смещение от UTC в формате +HHMM или -HHMM | -0500 | -| %% | символ % | % | - -* В версиях ClickHouse до v23.4 `%f` выводит один ноль (0), если форматируемое значение имеет тип Date, Date32 или DateTime (у них нет дробных секунд), либо тип DateTime64 с точностью 0. -* В версиях ClickHouse до v25.1 `%f` выводит количество цифр, равное масштабу DateTime64, вместо фиксированных 6 цифр. -* В версиях ClickHouse до v23.4 `%M` выводит минуты (00-59) вместо полного названия месяца (January-December). - -**Синтаксис** - -```sql -formatDateTime(datetime, format[, timezone]) -``` - -**Синонимы**: `DATE_FORMAT` - -**Аргументы** - - -* `datetime` — Дата или дата и время для форматирования. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) -* `format` — Строка формата с подстановочными полями. [`String`](/sql-reference/data-types/string) -* `timezone` — Необязательный параметр. Название часового пояса для форматированного времени. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает значения даты и времени в соответствии с указанным форматом. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Форматирование даты с плейсхолдером года** - -```sql title=Query -SELECT formatDateTime(toDate('2010-01-04'), '%g') -``` - -```response title=Response -┌─formatDateTime(toDate('2010-01-04'), '%g')─┐ -│ 10 │ -└────────────────────────────────────────────┘ -``` - -**Форматирование DateTime64 с долями секунды** - -```sql title=Query -SELECT formatDateTime(toDateTime64('2010-01-04 12:34:56.123456', 7), '%f') -``` - -```response title=Response -┌─formatDateTime(toDateTime64('2010-01-04 12:34:56.123456', 7), '%f')─┐ -│ 1234560 │ -└─────────────────────────────────────────────────────────────────────┘ -``` - -**Формат с указанием часового пояса** - -```sql title=Query -SELECT - now() AS ts, - time_zone, - formatDateTime(ts, '%T', time_zone) AS str_tz_time -FROM system.time_zones -WHERE time_zone LIKE 'Europe%' -LIMIT 10 -``` - -```response title=Response -┌──────────────────ts─┬─time_zone─────────┬─str_tz_time─┐ -│ 2023-09-08 19:13:40 │ Europe/Amsterdam │ 21:13:40 │ -│ 2023-09-08 19:13:40 │ Europe/Andorra │ 21:13:40 │ -│ 2023-09-08 19:13:40 │ Europe/Astrakhan │ 23:13:40 │ -│ 2023-09-08 19:13:40 │ Europe/Athens │ 22:13:40 │ -│ 2023-09-08 19:13:40 │ Europe/Belfast │ 20:13:40 │ -│ 2023-09-08 19:13:40 │ Europe/Belgrade │ 21:13:40 │ -│ 2023-09-08 19:13:40 │ Europe/Berlin │ 21:13:40 │ -│ 2023-09-08 19:13:40 │ Europe/Bratislava │ 21:13:40 │ -│ 2023-09-08 19:13:40 │ Europe/Brussels │ 21:13:40 │ -│ 2023-09-08 19:13:40 │ Europe/Bucharest │ 22:13:40 │ -└─────────────────────┴───────────────────┴─────────────┘ -``` - - -## formatDateTimeInJodaSyntax - -Появилось в версии: v20.1 - -Аналогично `formatDateTime`, за исключением того, что форматирует дату и время в стиле Joda вместо стиля MySQL. См. [документацию Joda Time](https://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormat.html). - -Обратная операция к этой функции — [`parseDateTimeInJodaSyntax`](/sql-reference/functions/type-conversion-functions#parsedatetimeinjodasyntax). - -С помощью полей подстановки вы можете задать шаблон для результирующей строки. - -**Поля подстановки:** - -| Placeholder | Описание | Представление | Примеры | -| ----------- | ---------------------------------------- | ------------- | -------------------------- | -| G | эра | текст | AD | -| C | век эры (>=0) | число | 20 | -| Y | год эры (>=0) | год | 1996 | -| x | weekyear (пока не поддерживается) | год | 1996 | -| w | неделя weekyear (пока не поддерживается) | число | 27 | -| e | день недели | число | 2 | -| E | день недели | текст | Tuesday; Tue | -| y | год | год | 1996 | -| D | день года | число | 189 | -| M | месяц года | месяц | July; Jul; 07 | -| d | день месяца | число | 10 | -| a | половина суток | текст | PM | -| K | час в пределах половины суток (0~11) | число | 0 | -| h | час в пределах половины суток (1~12) | число | 12 | -| H | час суток (0~23) | число | 0 | -| k | час суток (1~24) | число | 24 | -| m | минута часа | число | 30 | -| s | секунда минуты | число | 55 | -| S | доля секунды | число | 978 | -| z | часовой пояс | текст | Eastern Standard Time; EST | -| Z | смещение часового пояса | зона | -0800; -0812 | -| ' | экранирование текста | разделитель | | -| '' | одиночная кавычка | литерал | ' | - -**Синтаксис** - -```sql -formatDateTimeInJodaSyntax(datetime, format[, timezone]) -``` - -**Аргументы** - -* `datetime` — Дата или дата и время для форматирования. [`DateTime`](/sql-reference/data-types/datetime) или [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime64`](/sql-reference/data-types/datetime64) -* `format` — Строка формата с полями подстановки в стиле Joda. [`String`](/sql-reference/data-types/string) -* `timezone` — Необязательный параметр. Название часового пояса для форматируемого времени. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает значения даты и времени в соответствии с заданным форматом. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Форматирование значения datetime с использованием синтаксиса Joda** - -```sql title=Query -SELECT formatDateTimeInJodaSyntax(toDateTime('2010-01-04 12:34:56'), 'yyyy-MM-dd HH:mm:ss') -``` - -```response title=Response -┌─formatDateTimeInJodaSyntax(toDateTime('2010-01-04 12:34:56'), 'yyyy-MM-dd HH:mm:ss')─┐ -│ 2010-01-04 12:34:56 │ -└─────────────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## fromDaysSinceYearZero - -Введено в версии v23.11 - -Для заданного количества дней, прошедших с [1 января 0000](https://en.wikipedia.org/wiki/Year_zero), возвращает соответствующую дату в [пролептическом григорианском календаре, определённом стандартом ISO 8601](https://en.wikipedia.org/wiki/Gregorian_calendar#Proleptic_Gregorian_calendar). - -Вычисление выполняется аналогично функции MySQL `FROM_DAYS()`. Результат не определён, если его нельзя представить в пределах типа [Date](../data-types/date.md). - -**Синтаксис** - -```sql -fromDaysSinceYearZero(days) -``` - -**Псевдонимы**: `FROM_DAYS` - -**Аргументы** - -* `days` — количество дней, прошедших с нулевого года. [`UInt32`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает дату, соответствующую количеству дней, прошедших с нулевого года. [`Date`](/sql-reference/data-types/date) - -**Примеры** - -**Преобразование количества дней, прошедших с нулевого года, в даты** - -```sql title=Query -SELECT -fromDaysSinceYearZero(739136) AS date1, -fromDaysSinceYearZero(toDaysSinceYearZero(toDate('2023-09-08'))) AS date2 -``` - -```response title=Response -┌──────date1─┬──────date2─┐ -│ 2023-09-08 │ 2023-09-08 │ -└────────────┴────────────┘ -``` - - -## fromDaysSinceYearZero32 - -Добавлена в версии: v23.11 - -Для заданного количества дней, прошедших с [1 января 0000 года](https://en.wikipedia.org/wiki/Year_zero), возвращает соответствующую дату в [пролептическом григорианском календаре, определённом стандартом ISO 8601](https://en.wikipedia.org/wiki/Gregorian_calendar#Proleptic_Gregorian_calendar). -Вычисление выполняется так же, как в функции MySQL `FROM_DAYS()`. Результат не определён, если его нельзя представить в пределах типа [`Date32`](../data-types/date32.md). - -**Синтаксис** - -```sql -fromDaysSinceYearZero32(days) -``` - -**Аргументы** - -* `days` — количество дней, прошедших с нулевого года. [`UInt32`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает дату, соответствующую количеству дней, прошедших с нулевого года. [`Date32`](/sql-reference/data-types/date32) - -**Примеры** - -**Преобразование числа дней, прошедших с нулевого года, в даты** - -```sql title=Query -SELECT -fromDaysSinceYearZero32(739136) AS date1, -fromDaysSinceYearZero32(toDaysSinceYearZero(toDate('2023-09-08'))) AS date2 -``` - -```response title=Response -┌──────date1─┬──────date2─┐ -│ 2023-09-08 │ 2023-09-08 │ -└────────────┴────────────┘ -``` - - -## fromModifiedJulianDay - -Добавлено в: v21.1 - -Преобразует число [модифицированного юлианского дня](https://en.wikipedia.org/wiki/Julian_day#Variants) в дату в [пролептическом григорианском календаре](https://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar) в текстовом виде `YYYY-MM-DD`. Функция поддерживает номера дней от `-678941` до `2973483` (которые, соответственно, представляют даты 0000-01-01 и 9999-12-31). Генерирует исключение, если номер дня выходит за поддерживаемый диапазон. - -**Синтаксис** - -```sql -fromModifiedJulianDay(day) -``` - -**Аргументы** - -* `day` — номер модифицированного юлианского дня. [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает дату в текстовом формате. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Преобразование модифицированного юлианского дня в дату** - -```sql title=Query -SELECT fromModifiedJulianDay(58849) -``` - -```response title=Response -┌─fromModifiedJulianDay(58849)─┐ -│ 2020-01-01 │ -└──────────────────────────────┘ -``` - - -## fromModifiedJulianDayOrNull - -Добавлена в версии: v21.1 - -Аналогична [`fromModifiedJulianDay()`](#fromModifiedJulianDay), но вместо выбрасывания исключений возвращает `NULL`. - -**Синтаксис** - -```sql -fromModifiedJulianDayOrNull(day) -``` - -**Аргументы** - -* `day` — число модифицированного юлианского дня. [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает дату в текстовом виде для валидного аргумента `day`, в противном случае — `null`. [`Nullable(String)`](/sql-reference/data-types/nullable) - -**Примеры** - -**Преобразование модифицированного юлианского дня в дату с обработкой значений null** - -```sql title=Query -SELECT fromModifiedJulianDayOrNull(58849); -SELECT fromModifiedJulianDayOrNull(60000000); -- недопустимый аргумент, возвращает NULL -``` - -```response title=Response -┌─fromModified⋯Null(58849)─┐ -│ 2020-01-01 │ -└──────────────────────────┘ -┌─fromModified⋯l(60000000)─┐ -│ ᴺᵁᴸᴸ │ -└──────────────────────────┘ -``` - - -## fromUTCTimestamp - -Появилась в версии: v22.1 - -Преобразует значение даты или даты со временем из часового пояса UTC в значение даты или даты со временем в указанном часовом поясе. Эта функция предназначена главным образом для совместимости с Apache Spark и аналогичными фреймворками. - -**Синтаксис** - -```sql -fromUTCTimestamp(datetime, time_zone) -``` - -**Псевдонимы**: `from_utc_timestamp` - -**Аргументы** - -* `datetime` — константа типа дата или дата со временем либо выражение. [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) -* `time_zone` — константа типа String или выражение, задающее часовой пояс. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает значение типа DateTime/DateTime64 в указанном часовом поясе. [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Примеры** - -**Преобразование часового пояса UTC в указанный часовой пояс** - -```sql title=Query -SELECT fromUTCTimestamp(toDateTime64('2023-03-16 10:00:00', 3), 'Asia/Shanghai') -``` - -```response title=Response -┌─fromUTCTimestamp(toDateTime64('2023-03-16 10:00:00',3), 'Asia/Shanghai')─┐ -│ 2023-03-16 18:00:00.000 │ -└─────────────────────────────────────────────────────────────────────────┘ -``` - - -## fromUnixTimestamp - -Введена в версии: v20.8 - -Эта функция преобразует Unix-метку времени в календарную дату и время суток. - -Её можно вызывать двумя способами: - -* Если передан один аргумент типа [`Integer`](../data-types/int-uint.md), возвращается значение типа [`DateTime`](../data-types/datetime.md), т.е. функция ведёт себя как [`toDateTime`](../../sql-reference/functions/type-conversion-functions.md#todatetime). -* Если переданы два или три аргумента, где первый аргумент — значение типа [`Integer`](../data-types/int-uint.md), [`Date`](../data-types/date.md), [`Date32`](../data-types/date32.md), [`DateTime`](../data-types/datetime.md) или [`DateTime64`](../data-types/datetime64.md), второй аргумент — константная строка формата, а третий аргумент — необязательная константная строка часового пояса, функция возвращает значение типа [`String`](../data-types/string.md), т.е. ведёт себя как [`formatDateTime`](#formatDateTime). - В этом случае используется [стиль формата datetime из MySQL](https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_date-format). - -**Синтаксис** - -```sql -fromUnixTimestamp(timestamp) -fromUnixTimestamp(timestamp[, format[, timezone]]) -``` - -**Псевдонимы**: `FROM_UNIXTIME` - -**Аргументы** - -* `timestamp` — Unix-временная метка или значение даты/даты со временем. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) -* `format` — Необязательный аргумент. Константная строка формата для форматирования вывода. [`String`](/sql-reference/data-types/string) -* `timezone` — Необязательный аргумент. Константная строка часового пояса. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -При вызове с одним аргументом возвращает значение `DateTime`, соответствующее временной метке, при вызове с двумя или тремя аргументами — строку `String`. [`DateTime`](/sql-reference/data-types/datetime) или [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Преобразование Unix-временной метки в DateTime** - -```sql title=Query -SELECT fromUnixTimestamp(423543535) -``` - -```response title=Response -┌─fromUnixTimestamp(423543535)─┐ -│ 1983-06-04 10:58:55 │ -└──────────────────────────────┘ -``` - -**Преобразование метки времени Unix с указанием формата** - -```sql title=Query -SELECT fromUnixTimestamp(1234334543, '%Y-%m-%d %R:%S') AS DateTime -``` - -```response title=Response -┌─DateTime────────────┐ -│ 2009-02-11 14:42:23 │ -└─────────────────────┘ -``` - - -## fromUnixTimestampInJodaSyntax - -Введена в версии v23.1 - -Эта функция преобразует Unix-метку времени в календарную дату и время суток. - -Её можно вызывать двумя способами: - -Если передан один аргумент типа [`Integer`](../data-types/int-uint.md), функция возвращает значение типа [`DateTime`](../data-types/datetime.md), т. е. ведёт себя как [`toDateTime`](../../sql-reference/functions/type-conversion-functions.md#todatetime). - -Если переданы два или три аргумента, где первый аргумент — значение типа [`Integer`](../data-types/int-uint.md), [`Date`](../data-types/date.md), [`Date32`](../data-types/date32.md), [`DateTime`](../data-types/datetime.md) или [`DateTime64`](../data-types/datetime64.md), второй аргумент — константная строка формата, а третий аргумент — необязательная константная строка часового пояса, функция возвращает значение типа [`String`](../data-types/string.md), т. е. ведёт себя как [`formatDateTimeInJodaSyntax`](#formatDateTimeInJodaSyntax). В этом случае используется [стиль формата даты и времени Joda](https://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormat.html). - -**Синтаксис** - -```sql -fromUnixTimestampInJodaSyntax(timestamp) -fromUnixTimestampInJodaSyntax(timestamp, format[, timezone]) -``` - -**Аргументы** - -* `timestamp` — Unix-метка времени или значение даты/времени. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) -* `format` — Необязательный параметр. Константная строка формата, использующая синтаксис Joda для форматирования вывода. [`String`](/sql-reference/data-types/string) -* `timezone` — Необязательный параметр. Константная строка часового пояса. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает дату и время при вызове с одним аргументом или строку при вызове с двумя или тремя аргументами. [`DateTime`](/sql-reference/data-types/datetime) или [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Преобразование Unix-метки времени с использованием формата Joda** - -```sql title=Query -SELECT fromUnixTimestampInJodaSyntax(1234334543, 'yyyy-MM-dd HH:mm:ss', 'UTC') AS DateTime -``` - -```response title=Response -┌─DateTime────────────┐ -│ 2009-02-11 06:42:23 │ -└─────────────────────┘ -``` - - -## makeDate - -Появилась в версии: v22.6 - -Создаёт значение типа `Date` из одного из вариантов: - -* год, месяц и день -* год и порядковый номер дня в году - -**Синтаксис** - -```sql -makeDate(year, month, day) -makeDate(year, day_of_year) -``` - -**Аргументы** - -* `year` — Номер года. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal`](/sql-reference/data-types/decimal) -* `month` — Номер месяца (1–12). [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal`](/sql-reference/data-types/decimal) -* `day` — День месяца (1–31). [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal`](/sql-reference/data-types/decimal) -* `day_of_year` — Номер дня в году (1–365). [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Возвращает значение типа [`Date`](/sql-reference/data-types/date), сформированное из переданных аргументов. - -**Примеры** - -**Дата по году, месяцу и дню** - -```sql title=Query -SELECT makeDate(2023, 2, 28) AS date; -``` - -```response title=Response -┌───────date─┐ -│ 2023-02-28 │ -└────────────┘ -``` - -**Дата по году и порядковому номеру дня** - -```sql title=Query -SELECT makeDate(2023, 42) AS date; -``` - -```response title=Response -┌───────date─┐ -│ 2023-02-11 │ -└────────────┘ -``` - - -## makeDate32 - -Добавлена в версии: v22.6 - -Создаёт `Date32` из: - -* года, месяца и дня -* года и порядкового номера дня в году - -**Синтаксис** - -```sql -makeDate32(year, month, day) -makeDate32(year, day_of_year) -``` - -**Аргументы** - -* `year` — Год. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal`](/sql-reference/data-types/decimal) -* `month` — Месяц (1–12). [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal`](/sql-reference/data-types/decimal) -* `day` — День месяца (1–31). [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal`](/sql-reference/data-types/decimal) -* `day_of_year` — День года (1–365). [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Возвращает значение типа `Date32`, сформированное из переданных аргументов. См. [`Date32`](/sql-reference/data-types/date32) - -**Примеры** - -**Date32 по году, месяцу и дню** - -```sql title=Query -SELECT makeDate(2023, 2, 28) AS date; -``` - -```response title=Response -┌───────date─┐ -│ 2023-02-28 │ -└────────────┘ -``` - -**Date32 из года и дня года** - -```sql title=Query -SELECT makeDate(2023, 42) AS date; -``` - -```response title=Response -┌───────date─┐ -│ 2023-02-11 │ -└────────────┘ -``` - - -## makeDateTime - -Введена в версии: v22.6 - -Создаёт `DateTime` из значений года, месяца, дня, часа, минуты и секунды с необязательным указанием часового пояса. - -**Синтаксис** - -```sql -makeDateTime(year, month, day, hour, minute, second[, timezone]) -``` - -**Аргументы** - -* `year` — Год. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal`](/sql-reference/data-types/decimal) -* `month` — Месяц (1–12). [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal`](/sql-reference/data-types/decimal) -* `day` — День месяца (1–31). [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal`](/sql-reference/data-types/decimal) -* `hour` — Час (0–23). [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal`](/sql-reference/data-types/decimal) -* `minute` — Минута (0–59). [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal`](/sql-reference/data-types/decimal) -* `second` — Секунда (0–59). [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal`](/sql-reference/data-types/decimal) -* `timezone` — Название часового пояса. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает значение типа `DateTime`, сформированное из переданных аргументов [`DateTime`](/sql-reference/data-types/datetime) - -**Примеры** - -**DateTime из значений года, месяца, дня, часа, минуты и секунды** - -```sql title=Query -SELECT makeDateTime(2023, 2, 28, 17, 12, 33) AS DateTime; -``` - -```response title=Response -┌────────────DateTime─┐ -│ 2023-02-28 17:12:33 │ -└─────────────────────┘ -``` - - -## makeDateTime64 - -Введена в: v22.6 - -Создаёт `DateTime64` из года, месяца, дня, часа, минуты, секунды с необязательной дробной частью, точностью и часовым поясом. - -**Синтаксис** - -```sql -makeDateTime64(year, month, day, hour, minute, second[, fraction[, precision[, timezone]]]) -``` - -**Аргументы** - -* `year` — Год. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal`](/sql-reference/data-types/decimal) -* `month` — Месяц (1-12). [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal`](/sql-reference/data-types/decimal) -* `day` — День месяца (1-31). [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal`](/sql-reference/data-types/decimal) -* `hour` — Час (0-23). [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal`](/sql-reference/data-types/decimal) -* `minute` — Минута (0-59). [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal`](/sql-reference/data-types/decimal) -* `second` — Секунда (0-59). [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal`](/sql-reference/data-types/decimal) -* `fraction` — Дробная часть секунды. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal`](/sql-reference/data-types/decimal) -* `precision` — Точность дробной части (0-9). [`UInt8`](/sql-reference/data-types/int-uint) -* `timezone` — Название часового пояса. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает значение `DateTime64`, сконструированное из переданных аргументов [`DateTime64`](/sql-reference/data-types/datetime64) - -**Примеры** - -**DateTime64 из года, месяца, дня, часа, минуты, секунды** - -```sql title=Query -SELECT makeDateTime64(2023, 5, 15, 10, 30, 45, 779, 5); -``` - -```response title=Response -┌─makeDateTime64(2023, 5, 15, 10, 30, 45, 779, 5)─┐ -│ 2023-05-15 10:30:45.00779 │ -└─────────────────────────────────────────────────┘ -``` - - -## monthName - -Появился в версии: v22.1 - -Возвращает название месяца в виде строки из значения даты или даты со временем. - -**Синтаксис** - -```sql -monthName(datetime) -``` - -**Аргументы** - -* `datetime` — Дата или дата и время. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Возвращаемое значение** - -Возвращает название месяца. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Получение названия месяца по дате** - -```sql title=Query -WITH toDateTime('2021-04-14 11:22:33') AS date_value -SELECT monthName(date_value) -``` - -```response title=Response -┌─monthName(date_value)─┐ -│ Апрель │ -└───────────────────────┘ -``` - - -## now - -Впервые появилась в версии v1.1 - -Возвращает текущие дату и время на момент анализа запроса. Функция является константным выражением. - -**Синтаксис** - -```sql -now([timezone]) -``` - -**Псевдонимы**: `current_timestamp` - -**Аргументы** - -* `timezone` — Необязательный параметр. Название часового пояса для возвращаемого значения. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает текущие дату и время. [`DateTime`](/sql-reference/data-types/datetime) - -**Примеры** - -**Запрос без часового пояса** - -```sql title=Query -SELECT now() -``` - -```response title=Response -┌───────────────now()─┐ -│ 2020-10-17 07:42:09 │ -└─────────────────────┘ -``` - -**Запрос с заданным часовым поясом** - -```sql title=Query -SELECT now('Asia/Istanbul') -``` - -```response title=Response -┌─now('Asia/Istanbul')─┐ -│ 2020-10-17 10:42:23 │ -└──────────────────────┘ -``` - - -## now64 - -Добавлено в: v20.1 - -Возвращает текущие дату и время с точностью до долей секунды на момент анализа запроса. Функция является константным выражением. - -**Синтаксис** - -```sql -now64([scale[, timezone]]) -``` - -**Аргументы** - -* `scale` — необязательный. Размер тика (точность): 10^-precision секунды. Допустимый диапазон: [0 : 9]. Обычно используются значения 3 (по умолчанию, миллисекунды), 6 (микросекунды), 9 (наносекунды). [`UInt8`](/sql-reference/data-types/int-uint) -* `timezone` — необязательный. Имя часового пояса для возвращаемого значения. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает текущие дату и время с долями секунды. [`DateTime64`](/sql-reference/data-types/datetime64) - -**Примеры** - -**Запрос с точностью по умолчанию и с пользовательской точностью** - -```sql title=Query -SELECT now64(), now64(9, 'Asia/Istanbul') -``` - -```response title=Response -┌─────────────────now64()─┬─────now64(9, 'Asia/Istanbul')─┐ -│ 2022-08-21 19:34:26.196 │ 2022-08-21 22:34:26.196542766 │ -└─────────────────────────┴───────────────────────────────┘ -``` - - -## nowInBlock - -Впервые появилась в версии v22.8 - -Возвращает текущие дату и время на момент обработки каждого блока данных. В отличие от функции [`now`](#now), эта функция не является константным выражением, и возвращаемое значение будет отличаться в разных блоках для долго выполняющихся запросов. - -Имеет смысл использовать эту функцию для генерации текущего времени в долго выполняющихся запросах `INSERT SELECT`. - -**Синтаксис** - -```sql -nowInBlock([timezone]) -``` - -**Аргументы** - -* `timezone` — необязательный параметр. Имя часового пояса для возвращаемого значения. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает текущие дату и время на момент обработки каждого блока данных. [`DateTime`](/sql-reference/data-types/datetime) - -**Примеры** - -**Отличие от функции now()** - -```sql title=Query -SELECT - now(), - nowInBlock(), - sleep(1) -FROM numbers(3) -SETTINGS max_block_size = 1 -FORMAT PrettyCompactMonoBlock -``` - -```response title=Response -┌───────────────now()─┬────────nowInBlock()─┬─sleep(1)─┐ -│ 2022-08-21 19:41:19 │ 2022-08-21 19:41:19 │ 0 │ -│ 2022-08-21 19:41:19 │ 2022-08-21 19:41:20 │ 0 │ -│ 2022-08-21 19:41:19 │ 2022-08-21 19:41:21 │ 0 │ -└─────────────────────┴─────────────────────┴──────────┘ -``` - - -## nowInBlock64 - -Введена в: v25.8 - -Возвращает текущие дату и время на момент обработки каждого блока данных, в миллисекундах. В отличие от функции [now64](#now64), она не является константным выражением, и возвращаемое значение будет отличаться в разных блоках для длительных запросов. - -Имеет смысл использовать эту функцию для генерации текущего времени в длительных запросах INSERT SELECT. - -**Синтаксис** - -```sql -nowInBlock([scale[, timezone]]) -``` - -**Аргументы** - -* `scale` — необязательный параметр. Размер тика (точность): 10^-scale секунды. Диапазон допустимых значений: [0 : 9]. Обычно используются значения 3 (по умолчанию — миллисекунды), 6 (микросекунды), 9 (наносекунды). [`UInt8`](/sql-reference/data-types/int-uint) -* `timezone` — необязательный параметр. Название часового пояса для возвращаемого значения. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает текущие дату и время на момент обработки каждого блока данных с точностью до долей секунды. [`DateTime64`](/sql-reference/data-types/datetime64) - -**Примеры** - -**Отличие от функции now64()** - -```sql title=Query -SELECT - now64(), - nowInBlock64(), - sleep(1) -FROM numbers(3) -SETTINGS max_block_size = 1 -FORMAT PrettyCompactMonoBlock -``` - -```response title=Response -┌─────────────────now64()─┬──────────nowInBlock64()─┬─sleep(1)─┐ -│ 2025-07-29 17:07:29.526 │ 2025-07-29 17:07:29.534 │ 0 │ -│ 2025-07-29 17:07:29.526 │ 2025-07-29 17:07:30.535 │ 0 │ -│ 2025-07-29 17:07:29.526 │ 2025-07-29 17:07:31.535 │ 0 │ -└─────────────────────────┴─────────────────────────┴──────────┘ -``` - - -## serverTimezone - -Добавлена в: v23.6 - -Возвращает часовой пояс сервера, то есть значение настройки [`timezone`](/operations/server-configuration-parameters/settings#timezone). -Если функция выполняется в контексте распределённой таблицы, она формирует обычный столбец со значениями, соответствующими каждому шарду. В противном случае она возвращает константное значение. - -**Синтаксис** - -```sql -serverTimeZone() -``` - -**Псевдонимы**: `serverTimeZone` - -**Аргументы** - -* Нет. - -**Возвращаемое значение** - -Возвращает часовой пояс сервера в виде строки типа [`String`](/sql-reference/data-types/string). - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT serverTimeZone() -``` - -```response title=Response -┌─serverTimeZone()─┐ -│ UTC │ -└──────────────────┘ -``` - - -## subDate - -Добавлено в: v23.9 - -Вычитает временной интервал из переданной даты, даты со временем или их строкового представления. -Если результат вычитания выходит за пределы диапазона типа данных, результат неопределён. - -**Синтаксис** - -```sql -subDate(datetime, interval) -``` - -**Аргументы** - -* `datetime` — Дата или дата и время, из которой вычитается `interval`. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) -* `interval` — Интервал, который нужно вычесть. [`Interval`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает дату или дату и время, полученную вычитанием `interval` из `datetime`. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Примеры** - -**Вычесть интервал из даты** - -```sql title=Query -SELECT subDate(toDate('2018-01-01'), INTERVAL 3 YEAR) -``` - -```response title=Response -┌─subDate(toDate('2018-01-01'), toIntervalYear(3))─┐ -│ 2015-01-01 │ -└──────────────────────────────────────────────────┘ -``` - - -## subtractDays - -Добавлена в: v1.1 - -Вычитает указанное количество дней из даты, даты со временем или строкового представления даты или даты со временем. - -**Синтаксис** - -```sql -subtractDays(datetime, num) -``` - -**Аргументы** - -* `datetime` — дата или дата со временем, из которой вычитается указанное количество дней. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) или [`String`](/sql-reference/data-types/string) -* `num` — количество дней, на которое нужно уменьшить дату. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает значение `datetime`, уменьшенное на `num` дней. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Примеры** - -**Вычитание дней из разных типов дат** - -```sql title=Query -WITH - toDate('2024-01-01') AS date, - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - subtractDays(date, 31) AS subtract_days_with_date, - subtractDays(date_time, 31) AS subtract_days_with_date_time, - subtractDays(date_time_string, 31) AS subtract_days_with_date_time_string -``` - -```response title=Response -┌─subtract_days_with_date─┬─subtract_days_with_date_time─┬─subtract_days_with_date_time_string─┐ -│ 2023-12-01 │ 2023-12-01 00:00:00 │ 2023-12-01 00:00:00.000 │ -└─────────────────────────┴──────────────────────────────┴─────────────────────────────────────┘ -``` - -**Использование альтернативного синтаксиса INTERVAL** - -```sql title=Query -SELECT dateSub('1998-06-16'::Date, INTERVAL 10 day) -``` - -```response title=Response -┌─minus(CAST('⋯valDay(10))─┐ -│ 1998-06-06 │ -└──────────────────────────┘ -``` - - -## subtractHours - -Впервые представлена в версии v1.1 - -Вычитает заданное количество часов из даты, даты и времени или их строкового представления. - -**Синтаксис** - -```sql -subtractHours(datetime, num) -``` - -**Аргументы** - -* `datetime` — дата или дата и время, из которой нужно вычесть заданное количество часов. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) или [`String`](/sql-reference/data-types/string) -* `num` — количество часов, которое нужно вычесть. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает `datetime` минус `num` часов в виде [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64(3)`](/sql-reference/data-types/datetime64). - -**Примеры** - -**Вычитание часов из значений разных типов даты** - -```sql title=Query -WITH - toDate('2024-01-01') AS date, - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - subtractHours(date, 12) AS subtract_hours_with_date, - subtractHours(date_time, 12) AS subtract_hours_with_date_time, - subtractHours(date_time_string, 12) AS subtract_hours_with_date_time_string -``` - -```response title=Response -┌─subtract_hours_with_date─┬─subtract_hours_with_date_time─┬─subtract_hours_with_date_time_string─┐ -│ 2023-12-31 12:00:00 │ 2023-12-31 12:00:00 │ 2023-12-31 12:00:00.000 │ -└──────────────────────────┴───────────────────────────────┴──────────────────────────────────────┘ -``` - -**Использование альтернативного синтаксиса INTERVAL** - -```sql title=Query -SELECT dateSub('1998-06-16'::Date, INTERVAL 10 hour) -``` - -```response title=Response -┌─minus(CAST('⋯alHour(10))─┐ -│ 1998-06-15 14:00:00 │ -└──────────────────────────┘ -``` - - -## subtractInterval - -Впервые представлена в версии v22.11 - -Добавляет отрицательный интервал к другому интервалу или к кортежу интервалов. - -Примечание: интервалы одного типа будут объединены в один интервал. Например, если переданы `toIntervalDay(2)` и `toIntervalDay(1)`, -то результатом будет `(1)`, а не `(2,1)`. - -**Синтаксис** - -```sql -subtractInterval(interval_1, interval_2) -``` - -**Аргументы** - -* `interval_1` — Первый интервал или кортеж интервалов. [`Interval`](/sql-reference/data-types/int-uint) или [`Tuple(Interval)`](/sql-reference/data-types/tuple) -* `interval_2` — Второй интервал, который нужно инвертировать. [`Interval`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает кортеж интервалов [`Tuple(T)`](/sql-reference/data-types/tuple) - -**Примеры** - -**Вычитание интервалов** - -```sql title=Query -SELECT subtractInterval(INTERVAL 1 DAY, INTERVAL 1 MONTH); -SELECT subtractInterval((INTERVAL 1 DAY, INTERVAL 1 YEAR), INTERVAL 1 MONTH); -SELECT subtractInterval(INTERVAL 2 DAY, INTERVAL 1 DAY); -``` - -```response title=Response -┌─subtractInterval(toIntervalDay(1), toIntervalMonth(1))─┐ -│ (1,-1) │ -└────────────────────────────────────────────────────────┘ -┌─subtractInterval((toIntervalDay(1), toIntervalYear(1)), toIntervalMonth(1))─┐ -│ (1,1,-1) │ -└─────────────────────────────────────────────────────────────────────────────┘ -┌─subtractInterval(toIntervalDay(2), toIntervalDay(1))─┐ -│ (1) │ -└──────────────────────────────────────────────────────┘ -``` - - -## subtractMicroseconds - -Добавлена в версии: v22.6 - -Вычитает указанное количество микросекунд из даты и времени или их строкового представления. - -**Синтаксис** - -```sql -subtractMicroseconds(datetime, num) -``` - -**Аргументы** - -* `datetime` — дата и время, из которых нужно вычесть указанное количество микросекунд. [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) или [`String`](/sql-reference/data-types/string) -* `num` — количество микросекунд для вычитания. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает значение типа [`DateTime64`](/sql-reference/data-types/datetime64), равное `datetime` минус `num` микросекунд. - -**Примеры** - -**Вычитание микросекунд из различных типов значений даты и времени** - -```sql title=Query -WITH - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - subtractMicroseconds(date_time, 1000000) AS subtract_microseconds_with_date_time, - subtractMicroseconds(date_time_string, 1000000) AS subtract_microseconds_with_date_time_string -``` - -```response title=Response -┌─subtract_microseconds_with_date_time─┬─subtract_microseconds_with_date_time_string─┐ -│ 2023-12-31 23:59:59.000000 │ 2023-12-31 23:59:59.000000 │ -└──────────────────────────────────────┴─────────────────────────────────────────────┘ -``` - -**Использование альтернативного синтаксиса INTERVAL** - -```sql title=Query -SELECT dateSub('1998-06-16'::DateTime, INTERVAL 10 microsecond) -``` - -```response title=Response -┌─minus(CAST('1⋯osecond(10))─┐ -│ 1998-06-15 23:59:59.999990 │ -└────────────────────────────┘ -``` - - -## subtractMilliseconds - -Добавлена в версии: v22.6 - -Вычитает заданное количество миллисекунд из значения даты и времени или из строки с датой и временем в текстовом формате. - -**Синтаксис** - -```sql -subtractMilliseconds(datetime, num) -``` - -**Аргументы** - -* `datetime` — Дата и время, из которых нужно вычесть указанное количество миллисекунд. [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) или [`String`](/sql-reference/data-types/string) -* `num` — Количество миллисекунд, которое нужно вычесть. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает `datetime` минус `num` миллисекунд, значение типа [`DateTime64`](/sql-reference/data-types/datetime64) - -**Примеры** - -**Вычитание миллисекунд для разных типов даты и времени** - -```sql title=Query -WITH - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - subtractMilliseconds(date_time, 1000) AS subtract_milliseconds_with_date_time, - subtractMilliseconds(date_time_string, 1000) AS subtract_milliseconds_with_date_time_string -``` - -```response title=Response -┌─subtract_milliseconds_with_date_time─┬─subtract_milliseconds_with_date_time_string─┐ -│ 2023-12-31 23:59:59.000 │ 2023-12-31 23:59:59.000 │ -└──────────────────────────────────────┴─────────────────────────────────────────────┘ -``` - -**Использование альтернативного синтаксиса INTERVAL** - -```sql title=Query -SELECT dateSub('1998-06-16'::DateTime, INTERVAL 10 millisecond) -``` - -```response title=Response -┌─minus(CAST('⋯second(10))─┐ -│ 1998-06-15 23:59:59.990 │ -└──────────────────────────┘ -``` - - -## subtractMinutes - -Добавлена в: v1.1 - -Вычитает заданное количество минут из даты, даты со временем или их строкового представления. - -**Синтаксис** - -```sql -subtractMinutes(datetime, num) -``` - -**Аргументы** - -* `datetime` — дата или дата со временем, из которой вычитается указанное количество минут. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) или [`String`](/sql-reference/data-types/string) -* `num` — количество минут, на которое нужно уменьшить значение. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает `datetime` за вычетом `num` минут — [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64(3)`](/sql-reference/data-types/datetime64) - -**Примеры** - -**Вычитание минут из разных типов дат** - -```sql title=Query -WITH - toDate('2024-01-01') AS date, - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - subtractMinutes(date, 30) AS subtract_minutes_with_date, - subtractMinutes(date_time, 30) AS subtract_minutes_with_date_time, - subtractMinutes(date_time_string, 30) AS subtract_minutes_with_date_time_string -``` - -```response title=Response -┌─subtract_minutes_with_date─┬─subtract_minutes_with_date_time─┬─subtract_minutes_with_date_time_string─┐ -│ 2023-12-31 23:30:00 │ 2023-12-31 23:30:00 │ 2023-12-31 23:30:00.000 │ -└────────────────────────────┴─────────────────────────────────┴────────────────────────────────────────┘ -``` - -**Использование альтернативного синтаксиса INTERVAL** - -```sql title=Query -SELECT dateSub('1998-06-16'::Date, INTERVAL 10 minute) -``` - -```response title=Response -┌─minus(CAST('⋯Minute(10))─┐ -│ 1998-06-15 23:50:00 │ -└──────────────────────────┘ -``` - - -## subtractMonths - -Добавлена в версии v1.1 - -Вычитает заданное количество месяцев из даты, даты со временем или их строкового представления. - -**Синтаксис** - -```sql -subtractMonths(datetime, num) -``` - -**Аргументы** - -* `datetime` — дата или дата и время, из которых нужно вычесть указанное число месяцев. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) или [`String`](/sql-reference/data-types/string) -* `num` — количество месяцев, которое нужно вычесть. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает значение `datetime` минус `num` месяцев типа [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Примеры** - -**Вычитание месяцев из различных типов дат** - -```sql title=Query -WITH - toDate('2024-01-01') AS дата, - toDateTime('2024-01-01 00:00:00') AS дата_время, - '2024-01-01 00:00:00' AS строка_даты_времени -SELECT - subtractMonths(дата, 1) AS вычитание_месяцев_из_даты, - subtractMonths(дата_время, 1) AS вычитание_месяцев_из_даты_времени, - subtractMonths(строка_даты_времени, 1) AS вычитание_месяцев_из_строки_даты_времени -``` - -```response title=Response -┌─subtract_months_with_date─┬─subtract_months_with_date_time─┬─subtract_months_with_date_time_string─┐ -│ 2023-12-01 │ 2023-12-01 00:00:00 │ 2023-12-01 00:00:00.000 │ -└───────────────────────────┴────────────────────────────────┴───────────────────────────────────────┘ -``` - -**Использование альтернативного синтаксиса INTERVAL** - -```sql title=Query -SELECT dateSub('1998-06-16'::Date, INTERVAL 10 month) -``` - -```response title=Response -┌─minus(CAST('⋯lMonth(10))─┐ -│ 1997-08-16 │ -└──────────────────────────┘ -``` - - -## subtractNanoseconds - -Добавлено в версии: v20.1 - -Вычитает заданное количество наносекунд из даты и времени или из строки с датой и временем. - -**Синтаксис** - -```sql -subtractNanoseconds(datetime, num) -``` - -**Аргументы** - -* `datetime` — Дата и время, из которых вычитается заданное количество наносекунд. [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) или [`String`](/sql-reference/data-types/string) -* `num` — Количество наносекунд, которое нужно вычесть. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает `datetime` минус `num` наносекунд в виде значения типа [`DateTime64`](/sql-reference/data-types/datetime64) - -**Примеры** - -**Вычитание наносекунд из значений разных типов даты и времени** - -```sql title=Query -WITH - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - subtractNanoseconds(date_time, 1000) AS subtract_nanoseconds_with_date_time, - subtractNanoseconds(date_time_string, 1000) AS subtract_nanoseconds_with_date_time_string -``` - -```response title=Response -┌─subtract_nanoseconds_with_date_time─┬─subtract_nanoseconds_with_date_time_string─┐ -│ 2023-12-31 23:59:59.999999000 │ 2023-12-31 23:59:59.999999000 │ -└─────────────────────────────────────┴────────────────────────────────────────────┘ -``` - -**Использование альтернативного синтаксиса INTERVAL** - -```sql title=Query -SELECT dateSub('1998-06-16'::DateTime, INTERVAL 10 nanosecond) -``` - -```response title=Response -┌─minus(CAST('19⋯anosecond(10))─┐ -│ 1998-06-15 23:59:59.999999990 │ -└───────────────────────────────┘ -``` - - -## subtractQuarters - -Появилась в версии: v20.1 - -Вычитает заданное количество кварталов из даты, даты и времени или строки, содержащей дату либо дату и время. - -**Синтаксис** - -```sql -subtractQuarters(datetime, num) -``` - -**Аргументы** - -* `datetime` — дата или дата со временем, из которой вычитается заданное количество кварталов. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) или [`String`](/sql-reference/data-types/string) -* `num` — количество кварталов, которое нужно вычесть. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает `datetime` минус `num` кварталов, типа [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Примеры** - -**Вычитание кварталов из различных типов дат** - -```sql title=Query -WITH - toDate('2024-01-01') AS date, - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - subtractQuarters(date, 1) AS subtract_quarters_with_date, - subtractQuarters(date_time, 1) AS subtract_quarters_with_date_time, - subtractQuarters(date_time_string, 1) AS subtract_quarters_with_date_time_string -``` - -```response title=Response -┌─subtract_quarters_with_date─┬─subtract_quarters_with_date_time─┬─subtract_quarters_with_date_time_string─┐ -│ 2023-10-01 │ 2023-10-01 00:00:00 │ 2023-10-01 00:00:00.000 │ -└─────────────────────────────┴──────────────────────────────────┴─────────────────────────────────────────┘ -``` - -**Использование альтернативного синтаксиса INTERVAL** - -```sql title=Query -SELECT dateSub('1998-06-16'::Date, INTERVAL 10 quarter) -``` - -```response title=Response -┌─minus(CAST('1⋯Quarter(10))─┐ -│ 1996-09-16 │ -└───────────────────────────┘ -``` - - -## subtractSeconds - -Появилась в версии: v1.1 - -Вычитает заданное количество секунд из даты, даты и времени или их строкового представления. - -**Синтаксис** - -```sql -subtractSeconds(datetime, num) -``` - -**Аргументы** - -* `datetime` — дата или дата и время, из которых нужно вычесть указанное количество секунд. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) или [`String`](/sql-reference/data-types/string) -* `num` — количество секунд, на которое нужно уменьшить значение. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает `datetime`, уменьшенное на `num` секунд, в формате [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64(3)`](/sql-reference/data-types/datetime64) - -**Примеры** - -**Вычитание секунд из значений разных типов даты и времени** - -```sql title=Query -WITH - toDate('2024-01-01') AS date, - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - subtractSeconds(date, 60) AS subtract_seconds_with_date, - subtractSeconds(date_time, 60) AS subtract_seconds_with_date_time, - subtractSeconds(date_time_string, 60) AS subtract_seconds_with_date_time_string -``` - -```response title=Response -┌─subtract_seconds_with_date─┬─subtract_seconds_with_date_time─┬─subtract_seconds_with_date_time_string─┐ -│ 2023-12-31 23:59:00 │ 2023-12-31 23:59:00 │ 2023-12-31 23:59:00.000 │ -└────────────────────────────┴─────────────────────────────────┴────────────────────────────────────────┘ -``` - -**Использование альтернативного синтаксиса INTERVAL** - -```sql title=Query -SELECT dateSub('1998-06-16'::Date, INTERVAL 10 second) -``` - -```response title=Response -┌─minus(CAST('⋯Second(10))─┐ -│ 1998-06-15 23:59:50 │ -└──────────────────────────┘ -``` - - -## subtractTupleOfIntervals - -Введена в версии: v22.11 - -Последовательно вычитает кортеж интервалов из даты или даты-время. - -**Синтаксис** - -```sql -subtractTupleOfIntervals(datetime, intervals) -``` - -**Аргументы** - -* `datetime` — дата или дата и время, из которой вычитаются интервалы. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) -* `intervals` — кортеж интервалов, вычитаемых из `datetime`. [`Tuple(Interval)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает `date` с вычтенными `intervals` — [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Примеры** - -**Вычитание кортежа интервалов из даты** - -```sql title=Query -WITH toDate('2018-01-01') AS date SELECT subtractTupleOfIntervals(date, (INTERVAL 1 DAY, INTERVAL 1 YEAR)) -``` - -```response title=Response -┌─subtractTupl⋯alYear(1)))─┐ -│ 2016-12-31 │ -└──────────────────────────┘ -``` - - -## subtractWeeks - -Добавлена в версии: v1.1 - -Вычитает указанное количество недель из даты, даты и времени или их строкового представления. - -**Синтаксис** - -```sql -subtractWeeks(datetime, num) -``` - -**Аргументы** - -* `datetime` — дата или дата со временем, от которой нужно вычесть указанное количество недель. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) или [`String`](/sql-reference/data-types/string) -* `num` — количество недель, которое нужно вычесть. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает значение `datetime` минус `num` недель, в виде [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Примеры** - -**Вычитание недель для разных типов дат** - -```sql title=Query -WITH - toDate('2024-01-01') AS дата, - toDateTime('2024-01-01 00:00:00') AS дата_время, - '2024-01-01 00:00:00' AS строка_даты_времени -SELECT - subtractWeeks(дата, 1) AS вычитание_недель_из_даты, - subtractWeeks(дата_время, 1) AS вычитание_недель_из_даты_времени, - subtractWeeks(строка_даты_времени, 1) AS вычитание_недель_из_строки_даты_времени -``` - -```response title=Response -┌─subtract_weeks_with_date─┬─subtract_weeks_with_date_time─┬─subtract_weeks_with_date_time_string─┐ -│ 2023-12-25 │ 2023-12-25 00:00:00 │ 2023-12-25 00:00:00.000 │ -└──────────────────────────┴───────────────────────────────┴──────────────────────────────────────┘ -``` - -**Использование альтернативного синтаксиса INTERVAL** - -```sql title=Query -SELECT dateSub('1998-06-16'::Date, INTERVAL 10 week) -``` - -```response title=Response -┌─minus(CAST('⋯alWeek(10))─┐ -│ 1998-04-07 │ -└──────────────────────────┘ -``` - - -## subtractYears - -Добавлена в версии: v1.1 - -Вычитает заданное количество лет из значения типа дата, дата и время или их строкового представления. - -**Синтаксис** - -```sql -subtractYears(datetime, num) -``` - -**Аргументы** - -* `datetime` — дата или дата со временем, из которой нужно вычесть указанное количество лет. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) или [`String`](/sql-reference/data-types/string) -* `num` — количество лет, которое нужно вычесть. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает значение `datetime` минус `num` лет, типа [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Примеры** - -**Вычитание лет из значений различных типов даты** - -```sql title=Query -WITH - toDate('2024-01-01') AS date, - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - subtractYears(date, 1) AS вычитание_лет_из_даты, - subtractYears(date_time, 1) AS вычитание_лет_из_даты_времени, - subtractYears(date_time_string, 1) AS вычитание_лет_из_строки_даты_времени -``` - -```response title=Response -┌─subtract_years_with_date─┬─subtract_years_with_date_time─┬─subtract_years_with_date_time_string─┐ -│ 2023-01-01 │ 2023-01-01 00:00:00 │ 2023-01-01 00:00:00.000 │ -└──────────────────────────┴───────────────────────────────┴──────────────────────────────────────┘ -``` - -**Использование альтернативного синтаксиса INTERVAL** - -```sql title=Query -SELECT dateSub('1998-06-16'::Date, INTERVAL 10 year) -``` - -```response title=Response -┌─minus(CAST('⋯alYear(10))─┐ -│ 1988-06-16 │ -└──────────────────────────┘ -``` - - -## timeDiff - -Добавлена в: v23.4 - -Возвращает разницу в секундах между двумя датами или датами и временем. -Разница вычисляется как `enddate` - `startdate`. - -Эта функция эквивалентна `dateDiff('second', startdate, enddate)`. - -Для вычисления разницы во времени в других единицах (часы, дни, месяцы и т. д.) используйте функцию [`dateDiff`](#dateDiff). - -**Синтаксис** - -```sql -timeDiff(startdate, enddate) -``` - -**Аргументы** - -* `startdate` — Первое значение времени, которое вычитается (вычитаемое). [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) -* `enddate` — Второе значение времени, из которого производится вычитание (уменьшаемое). [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Возвращаемое значение** - -Возвращает разность между `enddate` и `startdate`, выраженную в секундах. [`Int64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Вычисление разности во времени в секундах** - -```sql title=Query -SELECT timeDiff(toDateTime('2018-01-01 22:00:00'), toDateTime('2018-01-02 23:00:00')) AS res -``` - -```response title=Response -┌───res─┐ -│ 90000 │ -└───────┘ -``` - -**Вычислить разницу во времени и перевести её в часы** - -```sql title=Query -SELECT timeDiff(toDateTime('2018-01-01 22:00:00'), toDateTime('2018-01-02 23:00:00')) / 3600 AS hours -``` - -```response title=Response -┌─hours─┐ -│ 25 │ -└───────┘ -``` - -**Эквивалент dateDiff в секундах** - -```sql title=Query -SELECT - timeDiff(toDateTime('2021-12-29'), toDateTime('2022-01-01')) AS time_diff_result, - dateDiff('second', toDateTime('2021-12-29'), toDateTime('2022-01-01')) AS date_diff_result -``` - -```response title=Response -┌─time_diff_result─┬─date_diff_result─┐ -│ 259200 │ 259200 │ -└──────────────────┴──────────────────┘ -``` - - -## timeSlot - -Добавлена в версии: v1.1 - -Округляет время до начала получасового интервала. - -:::note -Хотя эта функция может принимать в качестве аргумента значения расширенных типов `Date32` и `DateTime64`, -передача ей времени вне нормального диапазона (с 1970 по 2149 годы для `Date` / до 2106 года для `DateTime`) приведёт к неверным результатам. -::: - -**Синтаксис** - -```sql -timeSlot(time[, time_zone]) -``` - -**Аргументы** - -* `time` — Время, которое нужно округлить до начала получасового интервала. [`DateTime`](/sql-reference/data-types/datetime) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime64`](/sql-reference/data-types/datetime64) -* `time_zone` — Необязательный параметр. Константное значение типа [`String`](/sql-reference/data-types/string) или выражение, задающее часовой пояс. - -**Возвращаемое значение** - -Возвращает время, округлённое до начала получасового интервала. [`DateTime`](/sql-reference/data-types/datetime) - -**Примеры** - -**Округление времени до получасового интервала** - -```sql title=Query -SELECT timeSlot(toDateTime('2000-01-02 03:04:05', 'UTC')) -``` - -```response title=Response -┌─timeSlot(toDateTime('2000-01-02 03:04:05', 'UTC'))─┐ -│ 2000-01-02 03:00:00 │ -└────────────────────────────────────────────────────┘ -``` - - -## timeSlots - -Введена в: v1.1 - -Для временного интервала, начинающегося в момент времени `StartTime` и продолжающегося в течение `Duration` секунд, возвращает массив моментов времени, состоящий из точек этого интервала, округлённых вниз до шага `Size` в секундах. Параметр `Size` является необязательным и по умолчанию равен 1800 (30 минут). - -Это может потребоваться, например, при поиске просмотров страниц в соответствующей сессии. - -Для `DateTime64` масштаб возвращаемого значения может отличаться от масштаба `StartTime`. Берётся наибольший масштаб среди всех переданных аргументов. - -**Синтаксис** - -```sql -timeSlots(StartTime, Duration[, Size]) -``` - -**Аргументы** - -* `StartTime` — начальное время интервала. [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) -* `Duration` — продолжительность интервала в секундах. [`UInt32`](/sql-reference/data-types/int-uint) или [`DateTime64`](/sql-reference/data-types/datetime64) -* `Size` — необязательный параметр. Размер временных слотов в секундах. Значение по умолчанию — 1800 (30 минут). [`UInt32`](/sql-reference/data-types/int-uint) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Возвращаемое значение** - -Возвращает массив значений типов DateTime/DateTime64 (тип возвращаемого значения совпадает с типом `StartTime`). Для DateTime64 масштаб возвращаемого значения может отличаться от масштаба `StartTime` — берётся наибольший масштаб среди всех переданных аргументов. [`Array(DateTime)`](/sql-reference/data-types/array) или [`Array(DateTime64)`](/sql-reference/data-types/array) - -**Примеры** - -**Создание временных слотов для интервала** - -```sql title=Query -SELECT timeSlots(toDateTime('2012-01-01 12:20:00'), toUInt32(600)); -SELECT timeSlots(toDateTime('1980-12-12 21:01:02', 'UTC'), toUInt32(600), 299); -SELECT timeSlots(toDateTime64('1980-12-12 21:01:02.1234', 4, 'UTC'), toDecimal64(600.1, 1), toDecimal64(299, 0)) -``` - -```response title=Response -┌─timeSlots(toDateTime('2012-01-01 12:20:00'), toUInt32(600))─┐ -│ ['2012-01-01 12:00:00','2012-01-01 12:30:00'] │ -└─────────────────────────────────────────────────────────────┘ -┌─timeSlots(toDateTime('1980-12-12 21:01:02', 'UTC'), toUInt32(600), 299)─┐ -│ ['1980-12-12 20:56:13','1980-12-12 21:01:12','1980-12-12 21:06:11'] │ -└─────────────────────────────────────────────────────────────────────────┘ -┌─timeSlots(toDateTime64('1980-12-12 21:01:02.1234', 4, 'UTC'), toDecimal64(600.1, 1), toDecimal64(299, 0))─┐ -│ ['1980-12-12 20:56:13.0000','1980-12-12 21:01:12.0000','1980-12-12 21:06:11.0000'] │ -└───────────────────────────────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## timestamp - -Появилась в версии: v23.9 - -Преобразует первый аргумент `expr` к типу [`DateTime64(6)`](/sql-reference/data-types/datetime64). -Если указан второй аргумент `expr_time`, то указанное время добавляется к преобразованному значению. - -**Синтаксис** - -```sql -timestamp(expr[, expr_time]) -``` - -**Аргументы** - -* `expr` — дата или дата со временем. [`String`](/sql-reference/data-types/string) -* `expr_time` — необязательный параметр. Время, которое нужно добавить к преобразованному значению. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает значение `expr`, преобразованное к типу [`DateTime64(6)`](/sql-reference/data-types/datetime64), или `expr` с добавленным временем. - -**Примеры** - -**Преобразование строки с датой в DateTime64(6)** - -```sql title=Query -SELECT timestamp('2023-12-31') AS ts; -``` - -```response title=Response -┌─────────────────────────ts─┐ -│ 2023-12-31 00:00:00.000000 │ -└────────────────────────────┘ -``` - -**Добавить время к строке даты** - -```sql title=Query -SELECT timestamp('2023-12-31 12:00:00', '12:00:00.11') AS ts; -``` - -```response title=Response -┌─────────────────────────ts─┐ -│ 2024-01-01 00:00:00.110000 │ -└────────────────────────────┘ -``` - - -## timezone - -Добавлена в версии: v21.4 - -Возвращает имя часового пояса текущего сеанса или преобразует смещение -часового пояса или его имя в каноническое имя часового пояса. - -**Синтаксис** - -```sql -timezone() -``` - -**Псевдонимы**: `timeZone` - -**Аргументы** - -* Отсутствуют. - -**Возвращаемое значение** - -Возвращает каноническое имя часового пояса в виде [`String`](/sql-reference/data-types/string). - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT timezone() -``` - -```response title=Response -┌─timezone()───────┐ -│ Europe/Amsterdam │ -└──────────────────┘ -``` - - -## timezoneOf - -Появилась в версии: v21.4 - -Возвращает имя часового пояса значения типа [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64). - -**Синтаксис** - -```sql -timeZoneOf(datetime) -``` - -**Псевдонимы**: `timeZoneOf` - -**Аргументы** - -* `datetime` — значение типа [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) -* `timezone` — необязательный аргумент. Имя часового пояса, в который нужно преобразовать часовой пояс значения `datetime`. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает имя часового пояса для `datetime` в виде значения типа [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT timezoneOf(now()); -``` - -```response title=Response -┌─timezoneOf(now())─┐ -│ Europe/Amsterdam │ -└───────────────────┘ -``` - - -## timezoneOffset - -Впервые появилась в версии: v21.6 - -Возвращает смещение часового пояса в секундах относительно [UTC](https://en.wikipedia.org/wiki/Coordinated_Universal_Time). -Функция учитывает переход на летнее время и исторические изменения часовых поясов для указанной даты и времени. - -**Синтаксис** - -```sql -timeZoneOffset(datetime) -``` - -**Псевдонимы**: `timeZoneOffset` - -**Аргументы** - -* `datetime` — значение типа `DateTime`, для которого требуется получить смещение часового пояса. [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Возвращаемое значение** - -Возвращает смещение от UTC в секундах. [`Int32`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT toDateTime('2021-04-21 10:20:30', 'America/New_York') AS Time, -toTypeName(Time) AS Type, -timeZoneOffset(Time) AS Offset_in_seconds, -(Offset_in_seconds / 3600) AS Offset_in_hours; -``` - -```response title=Response -┌────────────────Time─┬─Type─────────────────────────┬─Offset_in_seconds─┬─Offset_in_hours─┐ -│ 2021-04-21 10:20:30 │ DateTime('America/New_York') │ -14400 │ -4 │ -└─────────────────────┴──────────────────────────────┴───────────────────┴─────────────────┘ -``` - - -## toDayOfMonth - -Добавлена в версии: v1.1 - -Возвращает день месяца (1–31) для значения типа `Date` или `DateTime`. - -**Синтаксис** - -```sql -toDayOfMonth(datetime) -``` - -**Псевдонимы**: `DAY`, `DAYOFMONTH` - -**Аргументы** - -* `datetime` — дата или дата со временем, из которой нужно извлечь день месяца. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Возвращаемое значение** - -Возвращает день месяца заданной даты/времени в виде значения типа [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT toDayOfMonth(toDateTime('2023-04-21 10:20:30')) -``` - -```response title=Response -┌─toDayOfMonth(toDateTime('2023-04-21 10:20:30'))─┐ -│ 21 │ -└─────────────────────────────────────────────────┘ -``` - - -## toDayOfWeek - -Впервые представлена в: v1.1 - -Возвращает номер дня недели для значения типа `Date` или `DateTime`. - -Двухаргументная форма `toDayOfWeek()` позволяет указать, начинается ли неделя с понедельника или воскресенья, -а также должно ли возвращаемое значение быть в диапазоне от 0 до 6 или от 1 до 7. - -| Режим | Первый день недели | Диапазон | -| ----- | ------------------ | ------------------------------------------------------- | -| 0 | Понедельник | 1-7: понедельник = 1, вторник = 2, ..., воскресенье = 7 | -| 1 | Понедельник | 0-6: понедельник = 0, вторник = 1, ..., воскресенье = 6 | -| 2 | Воскресенье | 0-6: воскресенье = 0, понедельник = 1, ..., суббота = 6 | -| 3 | Воскресенье | 1-7: воскресенье = 1, понедельник = 2, ..., суббота = 7 | - -**Синтаксис** - -```sql -toDayOfWeek(datetime[, mode[, timezone]]) -``` - -**Псевдонимы**: `DAYOFWEEK` - -**Аргументы** - -* `datetime` — Дата или дата и время, для которой нужно получить день недели. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) -* `mode` — Необязательный аргумент. Целое число, задающее режим недели (0–3). По умолчанию — 0, если аргумент не указан. [`UInt8`](/sql-reference/data-types/int-uint) -* `timezone` — Необязательный аргумент. Часовой пояс, используемый для преобразования. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает день недели для заданных `Date` или `DateTime` в виде значения типа [`UInt8`](/sql-reference/data-types/int-uint). - -**Примеры** - -**Пример использования** - -```sql title=Query --- Следующая дата — 21 апреля 2023 года, это была пятница: -SELECT - toDayOfWeek(toDateTime('2023-04-21')), - toDayOfWeek(toDateTime('2023-04-21'), 1) -``` - -```response title=Response -┌─toDayOfWeek(toDateTime('2023-04-21'))─┬─toDayOfWeek(toDateTime('2023-04-21'), 1)─┐ -│ 5 │ 4 │ -└───────────────────────────────────────┴──────────────────────────────────────────┘ -``` - - -## toDayOfYear - -Введена в версии: v18.4 - -Возвращает порядковый номер дня в пределах года (1–366) для значения типа `Date` или `DateTime`. - -**Синтаксис** - -```sql -toDayOfYear(datetime) -``` - -**Псевдонимы**: `DAYOFYEAR` - -**Аргументы** - -* `datetime` — дата или дата со временем, для которой нужно получить номер дня в году. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Возвращаемое значение** - -Возвращает номер дня в году для заданного значения типов Date или DateTime в формате [`UInt16`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT toDayOfYear(toDateTime('2023-04-21 10:20:30')) -``` - -```response title=Response -┌─toDayOfYear(toDateTime('2023-04-21 10:20:30'))─┐ -│ 111 │ -└────────────────────────────────────────────────┘ -``` - - -## toDaysSinceYearZero - -Впервые представлен в: v23.9 - -Для заданной даты возвращает количество дней, прошедших с [1 января 0000 года](https://en.wikipedia.org/wiki/Year_zero) в -[пролептическом григорианском календаре, определённом в ISO 8601](https://en.wikipedia.org/wiki/Gregorian_calendar#Proleptic_Gregorian_calendar). - -Расчёт выполняется так же, как в функции MySQL [`TO_DAYS`](https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_to-days). - -**Синтаксис** - -```sql -toDaysSinceYearZero(date[, time_zone]) -``` - -**Псевдонимы**: `TO_DAYS` - -**Аргументы** - -* `date` — Дата или дата со временем, для которой нужно вычислить количество дней, прошедших с нулевого года. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) -* `time_zone` — Часовой пояс. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает количество дней, прошедших с даты `0000-01-01`. [`UInt32`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Вычисление количества дней, прошедших с нулевого года** - -```sql title=Query -SELECT toDaysSinceYearZero(toDate('2023-09-08')) -``` - -```response title=Response -┌─toDaysSinceYearZero(toDate('2023-09-08')))─┐ -│ 713569 │ -└────────────────────────────────────────────┘ -``` - - -## toHour - -Введено в версии: v1.1 - -Возвращает час (0–23) из значения типа `DateTime` или `DateTime64`. - -**Синтаксис** - -```sql -toHour(datetime) -``` - -**Псевдонимы**: `HOUR` - -**Аргументы** - -* `datetime` — Дата и время, из которых требуется получить час. [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Возвращаемое значение** - -Возвращает час (0–23) из `datetime`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT toHour(toDateTime('2023-04-21 10:20:30')) -``` - -```response title=Response -┌─toHour(toDateTime('2023-04-21 10:20:30'))─┐ -│ 10 │ -└───────────────────────────────────────────┘ -``` - - -## toISOYear - -Добавлена в версии: v18.4 - -Преобразует дату или дату со временем в номер года по стандарту ISO. - -**Синтаксис** - -```sql -toISOYear(datetime) -``` - -**Аргументы** - -* `datetime` — Значение с датой или с датой и временем. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Возвращаемое значение** - -Возвращает входное значение, преобразованное в номер года по ISO. [`UInt16`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Получение номера года по ISO из значений даты** - -```sql title=Query -SELECT -toISOYear(toDate('2024/10/02')) as year1, -toISOYear(toDateTime('2024-10-02 01:30:00')) as year2 -``` - -```response title=Response -┌─week1─┬─week2─┐ -│ 40 │ 40 │ -└───────┴───────┘ -``` - - -## toLastDayOfMonth - -Добавлено в версии v1.1 - -Округляет дату или дату со временем до последнего дня месяца. - -:::note -Тип возвращаемого значения можно настроить с помощью параметра [`enable_extended_results_for_datetime_functions`](/operations/settings/settings#enable_extended_results_for_datetime_functions). -::: - -**Синтаксис** - -```sql -toLastDayOfMonth(value) -``` - -**Псевдонимы**: `LAST_DAY` - -**Аргументы** - -* `value` — дата или дата со временем, которые необходимо округлить до последнего дня месяца. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Возвращаемое значение** - -Возвращает дату последнего дня месяца для заданной даты или даты со временем. [`Date`](/sql-reference/data-types/date) - -**Примеры** - -**Округление даты до последнего дня месяца** - -```sql title=Query -SELECT toLastDayOfMonth(toDateTime('2023-04-21 10:20:30')) -``` - -```response title=Response -┌─toLastDayOfMonth(toDateTime('2023-04-21 10:20:30'))─┐ -│ 2023-04-30 │ -└─────────────────────────────────────────────────────┘ -``` - - -## toLastDayOfWeek - -Введена в версии: v23.5 - -Округляет дату или дату со временем до ближайшей субботы или воскресенья. - -:::note -Тип возвращаемого значения можно настроить с помощью параметра [`enable_extended_results_for_datetime_functions`](/operations/settings/settings#enable_extended_results_for_datetime_functions). -::: - -**Синтаксис** - -```sql -toLastDayOfWeek(datetime[, mode[, timezone]]) -``` - -**Аргументы** - -* `datetime` — Дата или дата со временем для преобразования. [`Date`](/sql-reference/data-types/date) или [`DateTime`](/sql-reference/data-types/datetime) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime64`](/sql-reference/data-types/datetime64) -* `mode` — Определяет первый день недели, как описано в функции `toWeek()`. По умолчанию `0`. [`UInt8`](/sql-reference/data-types/int-uint) -* `timezone` — Необязательный аргумент. Часовой пояс, который используется при преобразовании. Если не указан, используется часовой пояс сервера. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает дату ближайшей субботы или воскресенья, не ранее указанной даты, в зависимости от значения `mode` — [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Примеры** - -**Округление вверх до ближайшей субботы или воскресенья** - -```sql title=Query -SELECT - toLastDayOfWeek(toDateTime('2023-04-21 10:20:30')), /* пятница */ - toLastDayOfWeek(toDateTime('2023-04-21 10:20:30'), 1), /* пятница */ - toLastDayOfWeek(toDate('2023-04-23')), /* воскресенье */ - toLastDayOfWeek(toDate('2023-04-23'), 1) /* воскресенье */ -FORMAT Vertical -``` - -```response title=Response -Строка 1: -────── -toLastDayOfWeek(toDateTime('2023-04-21 10:20:30')): 2023-04-23 -toLastDayOfWeek(toDateTime('2023-04-21 10:20:30'), 1): 2023-04-22 -toLastDayOfWeek(toDate('2023-04-23')): 2023-04-23 -toLastDayOfWeek(toDate('2023-04-23'), 1): 2023-04-23 -``` - - -## toMillisecond - -Добавлено в: v24.2 - -Возвращает компоненту миллисекунд (0–999) для значения типа `DateTime` или `DateTime64`. - -**Синтаксис** - -```sql -toMillisecond(datetime) -``` - -**Псевдонимы**: `MILLISECOND` - -**Аргументы** - -* `datetime` — Дата и время, из которых требуется получить миллисекунду. [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Возвращаемое значение** - -Возвращает миллисекунду в пределах минуты (0–59) из `datetime`. [`UInt16`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT toMillisecond(toDateTime64('2023-04-21 10:20:30.456', 3)); -``` - -```response title=Response -┌──toMillisecond(toDateTime64('2023-04-21 10:20:30.456', 3))─┐ -│ 456 │ -└────────────────────────────────────────────────────────────┘ -``` - - -## toMinute - -Появилась в версии: v1.1 - -Возвращает минутную часть (0–59) значения `Date` или `DateTime`. - -**Синтаксис** - -```sql -toMinute(datetime) -``` - -**Псевдонимы**: `MINUTE` - -**Аргументы** - -* `datetime` — Дата и время, из которых извлекается минута. [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Возвращаемое значение** - -Возвращает минуту часа (0–59) значения `datetime`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT toMinute(toDateTime('2023-04-21 10:20:30')) -``` - -```response title=Response -┌─toMinute(toDateTime('2023-04-21 10:20:30'))─┐ -│ 20 │ -└─────────────────────────────────────────────┘ -``` - - -## toModifiedJulianDay - -Появилась в версии: v21.1 - -Преобразует дату в [пролептическом григорианском календаре](https://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar) в текстовом формате `YYYY-MM-DD` в номер [модифицированного юлианского дня](https://en.wikipedia.org/wiki/Julian_day#Variants) типа `Int32`. Функция поддерживает даты от `0000-01-01` до `9999-12-31`. Вызывает исключение, если аргумент не может быть интерпретирован как дата или дата недопустима. - -**Синтаксис** - -```sql -toModifiedJulianDay(date) -``` - -**Аргументы** - -* `date` — дата в строковом формате. [`String`](/sql-reference/data-types/string) или [`FixedString`](/sql-reference/data-types/fixedstring) - -**Возвращаемое значение** - -Возвращает номер модифицированного юлианского дня. [`Int32`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Преобразование даты в модифицированный юлианский день** - -```sql title=Query -SELECT toModifiedJulianDay('2020-01-01') -``` - -```response title=Response -┌─toModifiedJulianDay('2020-01-01')─┐ -│ 58849 │ -└───────────────────────────────────┘ -``` - - -## toModifiedJulianDayOrNull - -Добавлена в: v21.1 - -Аналогична [`toModifiedJulianDay()`](#toModifiedJulianDay), но вместо выбрасывания исключений возвращает `NULL`. - -**Синтаксис** - -```sql -toModifiedJulianDayOrNull(date) -``` - -**Аргументы** - -* `date` — дата в текстовой форме. [`String`](/sql-reference/data-types/string) или [`FixedString`](/sql-reference/data-types/fixedstring) - -**Возвращаемое значение** - -Возвращает номер модифицированного юлианского дня для допустимого значения `date`, в противном случае — `null`. [`Nullable(Int32)`](/sql-reference/data-types/nullable) - -**Примеры** - -**Преобразование даты в модифицированный юлианский день с обработкой значений null** - -```sql title=Query -SELECT toModifiedJulianDayOrNull('2020-01-01'); -SELECT toModifiedJulianDayOrNull('0000-00-00'); -- некорректная дата, возвращает NULL -``` - -```response title=Response -┌─toModifiedJu⋯020-01-01')─┐ -│ 58849 │ -└──────────────────────────┘ -┌─toModifiedJu⋯000-00-00')─┐ -│ ᴺᵁᴸᴸ │ -└──────────────────────────┘ -``` - - -## toMonday - -Впервые появился в версии v1.1 - -Округляет дату или дату со временем вниз до понедельника соответствующей недели. Возвращает дату. - -:::note -Тип возвращаемого значения можно настроить с помощью параметра [`enable_extended_results_for_datetime_functions`](/operations/settings/settings#enable_extended_results_for_datetime_functions). -::: - -**Синтаксис** - -```sql -toMonday(value) -``` - -**Аргументы** - -* `value` — дата или дата со временем, которые нужно округлить вниз до понедельника соответствующей недели. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Возвращаемое значение** - -Возвращает дату понедельника той же недели, что и заданная дата или дата со временем. [`Date`](/sql-reference/data-types/date) - -**Примеры** - -**Округление вниз до понедельника недели** - -```sql title=Query -SELECT -toMonday(toDateTime('2023-04-21 10:20:30')), -- Пятница -toMonday(toDate('2023-04-24')); -- Уже понедельник -``` - -```response title=Response -┌─toMonday(toDateTime('2023-04-21 10:20:30'))─┬─toMonday(toDate('2023-04-24'))─┐ -│ 2023-04-17 │ 2023-04-24 │ -└─────────────────────────────────────────────┴────────────────────────────────┘ -``` - - -## toMonth - -Введена в версии: v1.1 - -Возвращает номер месяца (1–12) значения типа `Date` или `DateTime`. - -**Синтаксис** - -```sql -toMonth(datetime) -``` - -**Псевдонимы**: `MONTH` - -**Аргументы** - -* `datetime` — дата или дата и время, из которых нужно получить месяц. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Возвращаемое значение** - -Возвращает месяц из указанной даты/времени в виде значения типа [`UInt8`](/sql-reference/data-types/int-uint). - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT toMonth(toDateTime('2023-04-21 10:20:30')) -``` - -```response title=Response -┌─toMonth(toDateTime('2023-04-21 10:20:30'))─┐ -│ 4 │ -└────────────────────────────────────────────┘ -``` - - -## toMonthNumSinceEpoch - -Появилась в версии: v25.3 - -Возвращает количество месяцев, прошедших с 1970 года - -**Синтаксис** - -```sql -toMonthNumSinceEpoch(date) -``` - -**Аргументы** - -* `date` — Дата или значение даты и времени. [`Date`](/sql-reference/data-types/date) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Возвращаемое значение** - -Положительное целое число - -**Примеры** - -**Пример** - -```sql title=Query -SELECT toMonthNumSinceEpoch(toDate('2024-10-01')) -``` - -```response title=Response -657 -``` - - -## toQuarter - -Добавлена в версии: v1.1 - -Возвращает квартал года (1–4) для заданного значения `Date` или `DateTime`. - -**Синтаксис** - -```sql -toQuarter(datetime) -``` - -**Псевдонимы**: `QUARTER` - -**Аргументы** - -* `datetime` — дата или дата и время, из которой нужно получить квартал года. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Возвращаемое значение** - -Возвращает квартал года для указанной даты/времени в виде значения типа [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT toQuarter(toDateTime('2023-04-21 10:20:30')) -``` - -```response title=Response -┌─toQuarter(toDateTime('2023-04-21 10:20:30'))─┐ -│ 2 │ -└──────────────────────────────────────────────┘ -``` - - -## toRelativeDayNum - -Введена в версии: v1.1 - -Преобразует дату или дату со временем в количество дней, прошедших с определённого фиксированного момента в прошлом. -Точная точка во времени является деталями реализации, поэтому эту функцию не следует использовать самостоятельно. -Основное назначение функции — вычислять разницу в днях между двумя датами или датами со временем, например, `toRelativeDayNum(dt1) - toRelativeDayNum(dt2)`. - -**Синтаксис** - -```sql -toRelativeDayNum(date) -``` - -**Аргументы** - -* `date` — дата или дата и время. [`Date`](/sql-reference/data-types/date) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Возвращаемое значение** - -Возвращает количество дней, прошедших с фиксированной точки отсчёта в прошлом. [`UInt32`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Получение относительных номеров дней** - -```sql title=Query -SELECT toRelativeDayNum(toDate('2023-04-01')) - toRelativeDayNum(toDate('2023-01-01')) -``` - -```response title=Response -┌─minus(toRela⋯3-01-01')))─┐ -│ 90 │ -└──────────────────────────┘ -``` - - -## toRelativeHourNum - -Появилась в: v1.1 - -Преобразует дату или дату со временем в количество часов, прошедших с некоторого фиксированного момента в прошлом. -Точный момент времени является деталью реализации, поэтому эта функция не предназначена для самостоятельного применения. -Основное назначение функции — вычисление разницы в часах между двумя датами или датами со временем, например, `toRelativeHourNum(dt1) - toRelativeHourNum(dt2)`. - -**Синтаксис** - -```sql -toRelativeHourNum(date) -``` - -**Аргументы** - -* `date` — дата или дата со временем. [`Date`](/sql-reference/data-types/date) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Возвращаемое значение** - -Возвращает количество часов, прошедшее с фиксированной точки отсчёта в прошлом. [`UInt32`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Получение относительных номеров часов** - -```sql title=Query -SELECT toRelativeHourNum(toDateTime('2023-01-01 12:00:00')) - toRelativeHourNum(toDateTime('2023-01-01 00:00:00')) AS hours_difference -``` - -```response title=Response -┌─hours_difference─┐ -│ 12 │ -└──────────────────┘ -``` - - -## toRelativeMinuteNum - -Введена в версии: v1.1 - -Преобразует дату или дату со временем в количество минут, прошедших с некоторого фиксированного момента в прошлом. -Точная точка во времени является деталью реализации, поэтому эту функцию не следует использовать отдельно. -Основное назначение функции — вычислять разницу в минутах между двумя датами или датами со временем, например: `toRelativeMinuteNum(dt1) - toRelativeMinuteNum(dt2)`. - -**Синтаксис** - -```sql -toRelativeMinuteNum(date) -``` - -**Аргументы** - -* `date` — дата или дата и время. [`Date`](/sql-reference/data-types/date) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Возвращаемое значение** - -Возвращает количество минут, прошедших с фиксированной опорной точки в прошлом. [`UInt32`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Получение относительного номера минуты** - -```sql title=Query -SELECT toRelativeMinuteNum(toDateTime('2023-01-01 00:30:00')) - toRelativeMinuteNum(toDateTime('2023-01-01 00:00:00')) AS minutes_difference -``` - -```response title=Response -┌─minutes_difference─┐ -│ 30 │ -└────────────────────┘ -``` - - -## toRelativeMonthNum - -Добавлена в версии: v1.1 - -Преобразует дату или дату со временем в количество месяцев, прошедших с некоторого фиксированного момента в прошлом. -Точная точка во времени является деталью реализации, поэтому эту функцию не следует использовать отдельно. -Основное назначение функции — вычисление разницы в месяцах между двумя датами или датами со временем, например: `toRelativeMonthNum(dt1) - toRelativeMonthNum(dt2)`. - -**Синтаксис** - -```sql -toRelativeMonthNum(date) -``` - -**Аргументы** - -* `date` — дата или дата со временем. [`Date`](/sql-reference/data-types/date) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Возвращаемое значение** - -Возвращает число месяцев от фиксированной точки отсчёта в прошлом. [`UInt32`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Получение относительных номеров месяцев** - -```sql title=Query -SELECT toRelativeMonthNum(toDate('2023-04-01')) - toRelativeMonthNum(toDate('2023-01-01')) AS months_difference -``` - -```response title=Response -┌─months_difference─┐ -│ 3 │ -└───────────────────┘ -``` - - -## toRelativeQuarterNum - -Появилась в версии: v1.1 - -Преобразует дату или дату со временем в количество кварталов, прошедших с некоторого фиксированного момента в прошлом. -Точная точка во времени является деталью реализации, поэтому эта функция не предназначена для самостоятельного использования. -Основное назначение функции — вычислять разницу в кварталах между двумя датами или датами со временем, например, `toRelativeQuarterNum(dt1) - toRelativeQuarterNum(dt2)`. - -**Синтаксис** - -```sql -toRelativeQuarterNum(date) -``` - -**Аргументы** - -* `date` — дата или дата и время. [`Date`](/sql-reference/data-types/date) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Возвращаемое значение** - -Возвращает количество кварталов, прошедших с фиксированной точки отсчёта в прошлом. [`UInt32`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Получение относительных номеров кварталов** - -```sql title=Query -SELECT toRelativeQuarterNum(toDate('2023-04-01')) - toRelativeQuarterNum(toDate('2023-01-01')) AS разница_кварталов -``` - -```response title=Response -┌─quarters_difference─┐ -│ 1 │ -└─────────────────────┘ -``` - - -## toRelativeSecondNum - -Появилась в версии: v1.1 - -Преобразует дату или дату со временем в количество секунд, прошедших с некоторого фиксированного момента в прошлом. -Точная точка во времени является деталью реализации, поэтому эта функция не предназначена для использования по отдельности. -Основное назначение функции — вычисление разницы в секундах между двумя датами или датами со временем, например, `toRelativeSecondNum(dt1) - toRelativeSecondNum(dt2)`. - -**Синтаксис** - -```sql -toRelativeSecondNum(date) -``` - -**Аргументы** - -* `date` — Дата или дата и время. [`Date`](/sql-reference/data-types/date) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Возвращаемое значение** - -Возвращает количество секунд, прошедших с фиксированной точки отсчёта в прошлом. [`UInt32`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Получение относительных чисел секунд** - -```sql title=Query -SELECT toRelativeSecondNum(toDateTime('2023-01-01 00:01:00')) - toRelativeSecondNum(toDateTime('2023-01-01 00:00:00')) AS seconds_difference -``` - -```response title=Response -┌─seconds_difference─┐ -│ 60 │ -└────────────────────┘ -``` - - -## toRelativeWeekNum - -Впервые появилась в: v1.1 - -Преобразует дату или дату со временем в количество недель, прошедших с определённого фиксированного момента в прошлом. -Точная точка во времени является деталью реализации, поэтому эту функцию не следует использовать изолированно. -Основное назначение функции — вычислять разницу в неделях между двумя датами или датами со временем, например: `toRelativeWeekNum(dt1) - toRelativeWeekNum(dt2)`. - -**Синтаксис** - -```sql -toRelativeWeekNum(date) -``` - -**Аргументы** - -* `date` — дата или дата со временем. [`Date`](/sql-reference/data-types/date) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Возвращаемое значение** - -Возвращает количество недель от фиксированной точки отсчёта в прошлом. [`UInt32`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Получение относительных номеров недель** - -```sql title=Query -SELECT toRelativeWeekNum(toDate('2023-01-08')) - toRelativeWeekNum(toDate('2023-01-01')) AS разница_недель -``` - -```response title=Response -┌─weeks_difference─┐ -│ 1 │ -└──────────────────┘ -``` - - -## toRelativeYearNum - -Введена в версии: v1.1 - -Преобразует дату или дату со временем в количество лет, прошедших с определённого фиксированного момента в прошлом. -Конкретная точка во времени является деталью реализации, поэтому эта функция не предназначена для самостоятельного использования. -Основное назначение функции — вычислять разницу в годах между двумя датами или датами со временем, например, `toRelativeYearNum(dt1) - toRelativeYearNum(dt2)`. - -**Синтаксис** - -```sql -toRelativeYearNum(date) -``` - -**Аргументы** - -* `date` — дата или дата со временем. [`Date`](/sql-reference/data-types/date) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Возвращаемое значение** - -Возвращает количество лет, прошедших с фиксированного момента в прошлом. [`UInt16`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Получение относительных значений года** - -```sql title=Query -SELECT toRelativeYearNum('2010-10-01'::DateTime) - toRelativeYearNum('2000-01-01'::DateTime) -``` - -```response title=Response -┌─minus(toRela⋯ateTime')))─┐ -│ 10 │ -└──────────────────────────┘ -``` - - -## toSecond - -Добавлена в версии: v1.1 - -Возвращает секундную компоненту (0–59) значения типа `DateTime` или `DateTime64`. - -**Синтаксис** - -```sql -toSecond(datetime) -``` - -**Псевдонимы**: `SECOND` - -**Аргументы** - -* `datetime` — Дата и время, из которых нужно получить секунду. [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Возвращаемое значение** - -Возвращает секунду в минуте (0–59) для `datetime`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT toSecond(toDateTime('2023-04-21 10:20:30')) -``` - -```response title=Response -┌─toSecond(toDateTime('2023-04-21 10:20:30'))─┐ -│ 30 │ -└─────────────────────────────────────────────┘ -``` - - -## toStartOfDay - -Добавлена в версии: v1.1 - -Округляет дату и время вниз до начала дня. - -:::note -Тип возвращаемого значения можно настроить с помощью параметра [`enable_extended_results_for_datetime_functions`](/operations/settings/settings#enable_extended_results_for_datetime_functions). -::: - -**Синтаксис** - -```sql -toStartOfDay(datetime) -``` - -**Аргументы** - -* `datetime` — Дата или дата и время, которые нужно округлить. [`Date`](/sql-reference/data-types/date) или [`DateTime`](/sql-reference/data-types/datetime) - -**Возвращаемое значение** - -Возвращает дату со временем, округлённую вниз до начала дня. [`Date`](/sql-reference/data-types/date) или [`DateTime`](/sql-reference/data-types/datetime) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Примеры** - -**Округление вниз до начала дня** - -```sql title=Query -SELECT toStartOfDay(toDateTime('2023-04-21 10:20:30')) -``` - -```response title=Response -┌─toStartOfDay(toDateTime('2023-04-21 10:20:30'))─┐ -│ 2023-04-21 00:00:00 │ -└─────────────────────────────────────────────────┘ -``` - - -## toStartOfFifteenMinutes - -Впервые появилась в версии v1.1 - -Округляет дату и время вниз до начала пятнадцатиминутного интервала. - -:::note -Тип возвращаемого значения можно настроить с помощью параметра [`enable_extended_results_for_datetime_functions`](/operations/settings/settings#enable_extended_results_for_datetime_functions). -::: - -**Синтаксис** - -```sql -toStartOfFifteenMinutes(datetime) -``` - -**Аргументы** - -* `datetime` — Дата или дата и время, которые нужно округлить. [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Возвращаемое значение** - -Возвращает дату и время, округлённые до начала ближайшего пятнадцатиминутного интервала [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Примеры** - -**Пример** - -```sql title=Query -SELECT - toStartOfFifteenMinutes(toDateTime('2023-04-21 10:17:00')), - toStartOfFifteenMinutes(toDateTime('2023-04-21 10:20:00')), - toStartOfFifteenMinutes(toDateTime('2023-04-21 10:23:00')) -FORMAT Vertical -``` - -```response title=Response -Row 1: -────── -toStartOfFifteenMinutes(toDateTime('2023-04-21 10:17:00')): 2023-04-21 10:15:00 -toStartOfFifteenMinutes(toDateTime('2023-04-21 10:20:00')): 2023-04-21 10:15:00 -toStartOfFifteenMinutes(toDateTime('2023-04-21 10:23:00')): 2023-04-21 10:15:00 -``` - - -## toStartOfFiveMinutes - -Добавлена в версии: v22.6 - -Округляет дату и время вниз до начала ближайшего пятиминутного интервала. - -:::note -Тип возвращаемого значения можно настроить с помощью параметра [`enable_extended_results_for_datetime_functions`](/operations/settings/settings#enable_extended_results_for_datetime_functions). -::: - -**Синтаксис** - -```sql -toStartOfFiveMinutes(datetime) -``` - -**Псевдонимы**: `toStartOfFiveMinute` - -**Аргументы** - -* `datetime` — дата и время для округления. [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Возвращаемое значение** - -Возвращает дату и время, округлённые до начала ближайшего пятиминутного интервала [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Примеры** - -**Пример** - -```sql title=Query -SELECT - toStartOfFiveMinutes(toDateTime('2023-04-21 10:17:00')), - toStartOfFiveMinutes(toDateTime('2023-04-21 10:20:00')), - toStartOfFiveMinutes(toDateTime('2023-04-21 10:23:00')) -FORMAT Vertical -``` - -```response title=Response -Row 1: -────── -toStartOfFiveMinutes(toDateTime('2023-04-21 10:17:00')): 2023-04-21 10:15:00 -toStartOfFiveMinutes(toDateTime('2023-04-21 10:20:00')): 2023-04-21 10:20:00 -toStartOfFiveMinutes(toDateTime('2023-04-21 10:23:00')): 2023-04-21 10:20:00 -``` - - -## toStartOfHour - -Впервые появилась в версии v1.1 - -Округляет дату со временем до начала часа. - -:::note -Тип возвращаемого значения можно настроить с помощью параметра [`enable_extended_results_for_datetime_functions`](/operations/settings/settings#enable_extended_results_for_datetime_functions). -::: - -**Синтаксис** - -```sql -toStartOfHour(datetime) -``` - -**Аргументы** - -* `datetime` — Дата и время для округления. [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Возвращаемое значение** - -Возвращает дату и время, округлённые вниз до начала часа. [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Примеры** - -**Округление вниз до начала часа** - -```sql title=Query -SELECT - toStartOfHour(toDateTime('2023-04-21 10:20:30')); -``` - -```response title=Response -┌─────────────────res─┬─toTypeName(res)─┐ -│ 2023-04-21 10:00:00 │ DateTime │ -└─────────────────────┴─────────────────┘ -``` - - -## toStartOfISOYear - -Введена в версии: v1.1 - -Округляет дату или дату со временем вниз до первого дня ISO-года, который может отличаться от обычного календарного года. См. статью [ISO week date](https://en.wikipedia.org/wiki/ISO_week_date). - -:::note -Тип возвращаемого значения можно настроить с помощью параметра [`enable_extended_results_for_datetime_functions`](/operations/settings/settings#enable_extended_results_for_datetime_functions). -::: - -**Синтаксис** - -```sql -toStartOfISOYear(value) -``` - -**Аргументы** - -* `value` — дата или дата со временем, которую нужно округлить вниз до первого дня года ISO. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Возвращаемое значение** - -Возвращает первый день года ISO для указанной даты или даты со временем. [`Date`](/sql-reference/data-types/date) - -**Примеры** - -**Округление вниз до первого дня года ISO** - -```sql title=Query -SELECT toStartOfISOYear(toDateTime('2023-04-21 10:20:30')) -``` - -```response title=Response -┌─toStartOfISOYear(toDateTime('2023-04-21 10:20:30'))─┐ -│ 2023-01-02 │ -└─────────────────────────────────────────────────────┘ -``` - - -## toStartOfInterval - -Добавлена в версии: v20.1 - -Эта функция обобщает другие функции `toStartOf*()` и использует синтаксис `toStartOfInterval(date_or_date_with_time, INTERVAL x unit [, time_zone])`. - -Например, - -* `toStartOfInterval(t, INTERVAL 1 YEAR)` возвращает то же, что и `toStartOfYear(t)`, -* `toStartOfInterval(t, INTERVAL 1 MONTH)` возвращает то же, что и `toStartOfMonth(t)`, -* `toStartOfInterval(t, INTERVAL 1 DAY)` возвращает то же, что и `toStartOfDay(t)`, -* `toStartOfInterval(t, INTERVAL 15 MINUTE)` возвращает то же, что и `toStartOfFifteenMinutes(t)`. - -Вычисление выполняется относительно определённых моментов времени: - -| Interval | Start | -| ---------------------------------------------------------------------------------------------------------------------------- | ------------------------ | -| YEAR | год 0 | -| QUARTER | 1900 Q1 | -| MONTH | январь 1900 | -| WEEK | 1970, 1‑я неделя (01‑05) | -| DAY | 1970‑01‑01 | -| HOUR | (*) | -| MINUTE | 1970‑01‑01 00:00:00 | -| SECOND | 1970‑01‑01 00:00:00 | -| MILLISECOND | 1970‑01‑01 00:00:00 | -| MICROSECOND | 1970‑01‑01 00:00:00 | -| NANOSECOND | 1970‑01‑01 00:00:00 | -| (*) интервалы по часам — особый случай: вычисление всегда ведётся относительно 00:00:00 (полночь) текущего дня. В результате | | -| полезны только значения часов от 1 до 23. | | - -Если указана единица `WEEK`, `toStartOfInterval` предполагает, что недели начинаются с понедельника. Обратите внимание, что это поведение отличается от функции `toStartOfWeek`, в которой недели по умолчанию начинаются с воскресенья. - -Вторая перегрузка эмулирует функцию TimescaleDB `time_bucket()`, а также функцию PostgreSQL `date_bin()`. - -**Синтаксис** - -```sql -toStartOfInterval(value, INTERVAL x unit[, time_zone]) -toStartOfInterval(value, INTERVAL x unit[, origin[, time_zone]]) -``` - -**Псевдонимы**: `date_bin`, `time_bucket` - -**Аргументы** - -* `value` — Дата или дата‑время, которое нужно округлить в меньшую сторону. [`Date`](/sql-reference/data-types/date) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) -* `x` — Число, задающее длину интервала. - `unit` — Единица измерения интервала: YEAR, QUARTER, MONTH, WEEK, DAY, HOUR, MINUTE, SECOND, MILLISECOND, MICROSECOND, NANOSECOND. - `time_zone` — Необязательный параметр. Название часового пояса в виде строки. - `origin` — Необязательный параметр. Точка отсчёта для вычислений (только для второй перегрузки). - -**Возвращаемое значение** - -Возвращает начало интервала, содержащего входное значение. [`DateTime`](/sql-reference/data-types/datetime) - -**Примеры** - -**Базовое округление до интервала** - -```sql title=Query -SELECT toStartOfInterval(toDateTime('2023-01-15 14:30:00'), INTERVAL 1 MONTH) -``` - -```response title=Response -┌─toStartOfInt⋯alMonth(1))─┐ -│ 2023-01-01 │ -└──────────────────────────┘ -``` - -**Использование исходной точки** - -```sql title=Query -SELECT toStartOfInterval(toDateTime('2023-01-01 14:45:00'), INTERVAL 1 MINUTE, toDateTime('2023-01-01 14:35:30')) -``` - -```response title=Response -┌─toStartOfInt⋯14:35:30'))─┐ -│ 2023-01-01 14:44:30 │ -└──────────────────────────┘ -``` - - -## toStartOfMicrosecond - -Добавлена в: v22.6 - -Округляет дату и время вниз до начала микросекунды. - -**Синтаксис** - -```sql -toStartOfMicrosecond(datetime[, timezone]) -``` - -**Аргументы** - -* `datetime` — Дата и время. [`DateTime64`](/sql-reference/data-types/datetime64) -* `timezone` — Необязательный параметр. Часовой пояс для возвращаемого значения. Если не указан, функция использует часовой пояс параметра `value`. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Входное значение в формате [`DateTime64`](/sql-reference/data-types/datetime64) с точностью до субмикросекунд - -**Примеры** - -**Запрос без часового пояса** - -```sql title=Query -WITH toDateTime64('2020-01-01 10:20:30.999999999', 9) AS dt64 -SELECT toStartOfMicrosecond(dt64); -``` - -```response title=Response -┌────toStartOfMicrosecond(dt64)─┐ -│ 2020-01-01 10:20:30.999999000 │ -└───────────────────────────────┘ -``` - -**Запрос с указанием часового пояса** - -```sql title=Query -WITH toDateTime64('2020-01-01 10:20:30.999999999', 9) AS dt64 -SELECT toStartOfMicrosecond(dt64, 'Asia/Istanbul'); -``` - -```response title=Response -┌─toStartOfMicrosecond(dt64, 'Asia/Istanbul')─┐ -│ 2020-01-01 12:20:30.999999000 │ -└─────────────────────────────────────────────┘ -``` - - -## toStartOfMillisecond - -Добавлена в версии: v22.6 - -Округляет дату и время вниз до начала миллисекунды. - -**Синтаксис** - -```sql -toStartOfMillisecond(datetime[, timezone]) -``` - -**Аргументы** - -* `datetime` — дата и время. [`DateTime64`](/sql-reference/data-types/datetime64) -* `timezone` — необязательный параметр. Часовой пояс для возвращаемого значения. Если не указан, функция использует часовой пояс параметра `value`. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Входное значение с субмиллисекундной точностью. [`DateTime64`](/sql-reference/data-types/datetime64) - -**Примеры** - -**Запрос без указания часового пояса** - -```sql title=Query -WITH toDateTime64('2020-01-01 10:20:30.999999999', 9) AS dt64 -SELECT toStartOfMillisecond(dt64); -``` - -```response title=Response -┌────toStartOfMillisecond(dt64)─┐ -│ 2020-01-01 10:20:30.999000000 │ -└───────────────────────────────┘ -``` - -**Запрос с учётом часового пояса** - -```sql title=Query -WITH toDateTime64('2020-01-01 10:20:30.999999999', 9) AS dt64 -SELECT toStartOfMillisecond(dt64, 'Asia/Istanbul'); -``` - -```response title=Response -┌─toStartOfMillisecond(dt64, 'Asia/Istanbul')─┐ -│ 2020-01-01 12:20:30.999000000 │ -└─────────────────────────────────────────────┘ -``` - - -## toStartOfMinute - -Добавлена в версии: v1.1 - -Округляет дату и время вниз до начала минуты. - -:::note -Тип возвращаемого значения можно настроить с помощью настройки [`enable_extended_results_for_datetime_functions`](/operations/settings/settings#enable_extended_results_for_datetime_functions). -::: - -**Синтаксис** - -```sql -toStartOfMinute(datetime) -``` - -**Аргументы** - -* `datetime` — Значение даты и времени, подлежащее округлению. [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Возвращаемое значение** - -Возвращает дату и время, округлённые вниз до начала минуты. [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Примеры** - -**Округление вниз до начала минуты** - -```sql title=Query -SELECT - toStartOfMinute(toDateTime('2023-04-21 10:20:30')), - toStartOfMinute(toDateTime64('2023-04-21 10:20:30.5300', 8)) -FORMAT Vertical -``` - -```response title=Response -Строка 1: -────── -toStartOfMinute(toDateTime('2023-04-21 10:20:30')): 2023-04-21 10:20:00 -toStartOfMinute(toDateTime64('2023-04-21 10:20:30.5300', 8)): 2023-04-21 10:20:00 -``` - - -## toStartOfMonth - -Добавлена в версии v1.1 - -Округляет дату или дату со временем до первого дня месяца (в меньшую сторону). - -:::note -Тип возвращаемого значения можно настроить с помощью параметра [`enable_extended_results_for_datetime_functions`](/operations/settings/settings#enable_extended_results_for_datetime_functions). -::: - -**Синтаксис** - -```sql -toStartOfMonth(value) -``` - -**Аргументы** - -* `value` — Дата или дата со временем, которую нужно округлить в меньшую сторону до первого дня месяца. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Возвращаемое значение** - -Возвращает первый день месяца для указанной даты или даты со временем. [`Date`](/sql-reference/data-types/date) - -**Примеры** - -**Округление в меньшую сторону до первого дня месяца** - -```sql title=Query -SELECT toStartOfMonth(toDateTime('2023-04-21 10:20:30')) -``` - -```response title=Response -┌─toStartOfMonth(toDateTime('2023-04-21 10:20:30'))─┐ -│ 2023-04-01 │ -└───────────────────────────────────────────────────┘ -``` - - -## toStartOfNanosecond - -Появилось в: v22.6 - -Округляет дату и время до начала наносекунды. - -**Синтаксис** - -```sql -toStartOfNanosecond(datetime[, timezone]) -``` - -**Аргументы** - -* `datetime` — дата и время. [`DateTime64`](/sql-reference/data-types/datetime64) -* `timezone` — необязательный параметр. Часовой пояс для возвращаемого значения. Если не указан, функция использует часовой пояс параметра `value`. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Входное значение с точностью до наносекунд. [`DateTime64`](/sql-reference/data-types/datetime64) - -**Примеры** - -**Запрос без часового пояса** - -```sql title=Query -WITH toDateTime64('2020-01-01 10:20:30.999999999', 9) AS dt64 -SELECT toStartOfNanosecond(dt64); -``` - -```response title=Response -┌─────toStartOfNanosecond(dt64)─┐ -│ 2020-01-01 10:20:30.999999999 │ -└───────────────────────────────┘ -``` - -**Запрос с указанием часового пояса** - -```sql title=Query -WITH toDateTime64('2020-01-01 10:20:30.999999999', 9) AS dt64 -SELECT toStartOfNanosecond(dt64, 'Asia/Istanbul'); -``` - -```response title=Response -┌─toStartOfNanosecond(dt64, 'Asia/Istanbul')─┐ -│ 2020-01-01 12:20:30.999999999 │ -└────────────────────────────────────────────┘ -``` - - -## toStartOfQuarter - -Добавлена в версии v1.1 - -Округляет дату или дату со временем в меньшую сторону до первого дня квартала. Первый день квартала — это либо 1 января, либо 1 апреля, либо 1 июля, либо 1 октября. - -:::note -Тип возвращаемого значения можно настроить с помощью параметра [`enable_extended_results_for_datetime_functions`](/operations/settings/settings#enable_extended_results_for_datetime_functions). -::: - -**Синтаксис** - -```sql -toStartOfQuarter(value) -``` - -**Аргументы** - -* `value` — дата или дата со временем, которую нужно округлить вниз до первого дня квартала. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Возвращаемое значение** - -Возвращает первый день квартала для заданной даты или даты со временем. [`Date`](/sql-reference/data-types/date) - -**Примеры** - -**Округление вниз до первого дня квартала** - -```sql title=Query -SELECT toStartOfQuarter(toDateTime('2023-04-21 10:20:30')) -``` - -```response title=Response -┌─toStartOfQuarter(toDateTime('2023-04-21 10:20:30'))─┐ -│ 2023-04-01 │ -└─────────────────────────────────────────────────────┘ -``` - - -## toStartOfSecond - -Добавлена в версии: v20.5 - -Округляет дату и время вниз до начала секунды. - -**Синтаксис** - -```sql -toStartOfSecond(datetime[, timezone]) -``` - -**Аргументы** - -* `datetime` — дата и время, из которых нужно отбросить доли секунды. [`DateTime64`](/sql-reference/data-types/datetime64) -* `timezone` — необязательный параметр. Часовой пояс для возвращаемого значения. Если не указан, функция использует часовой пояс параметра `value`. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает исходное значение без долей секунды. [`DateTime64`](/sql-reference/data-types/datetime64) - -**Примеры** - -**Запрос без часового пояса** - -```sql title=Query -WITH toDateTime64('2020-01-01 10:20:30.999', 3) AS dt64 -SELECT toStartOfSecond(dt64); -``` - -```response title=Response -┌───toStartOfSecond(dt64)─┐ -│ 2020-01-01 10:20:30.000 │ -└─────────────────────────┘ -``` - -**Запрос с указанием часового пояса** - -```sql title=Query -WITH toDateTime64('2020-01-01 10:20:30.999', 3) AS dt64 -SELECT toStartOfSecond(dt64, 'Asia/Istanbul'); -``` - -```response title=Response -┌─toStartOfSecond(dt64, 'Asia/Istanbul')─┐ -│ 2020-01-01 13:20:30.000 │ -└────────────────────────────────────────┘ -``` - - -## toStartOfTenMinutes - -Добавлено в версии: v20.1 - -Округляет дату и время вниз до начала ближайшего десятиминутного интервала. - -:::note -Тип возвращаемого значения можно настроить с помощью настройки [`enable_extended_results_for_datetime_functions`](/operations/settings/settings#enable_extended_results_for_datetime_functions). -::: - -**Синтаксис** - -```sql -toStartOfTenMinutes(datetime) -``` - -**Аргументы** - -* `datetime` — Дата и время типа [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64). - -**Возвращаемое значение** - -Возвращает дату и время, округлённые до начала ближайшего десятиминутного интервала, типа [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64). - -**Примеры** - -**Пример** - -```sql title=Query -SELECT - toStartOfTenMinutes(toDateTime('2023-04-21 10:17:00')), - toStartOfTenMinutes(toDateTime('2023-04-21 10:20:00')), - toStartOfTenMinutes(toDateTime('2023-04-21 10:23:00')) -FORMAT Vertical -``` - -```response title=Response -Row 1: -────── -toStartOfTenMinutes(toDateTime('2023-04-21 10:17:00')): 2023-04-21 10:10:00 -toStartOfTenMinutes(toDateTime('2023-04-21 10:20:00')): 2023-04-21 10:20:00 -toStartOfTenMinutes(toDateTime('2023-04-21 10:23:00')): 2023-04-21 10:20:00 -``` - - -## toStartOfWeek - -Впервые появилось в версии: v20.1 - -Округляет дату или дату-время до ближайшего воскресенья или понедельника в меньшую сторону. - -:::note -Тип возвращаемого значения можно настроить с помощью параметра [`enable_extended_results_for_datetime_functions`](/operations/settings/settings#enable_extended_results_for_datetime_functions). -::: - -**Синтаксис** - -```sql -toStartOfWeek(datetime[, mode[, timezone]]) -``` - -**Аргументы** - -* `datetime` — Дата или дата со временем, которую нужно преобразовать. [`Date`](/sql-reference/data-types/date) или [`DateTime`](/sql-reference/data-types/datetime) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime64`](/sql-reference/data-types/datetime64) -* `mode` — Определяет, какой день недели считается первым, как описано в функции `toWeek()`. По умолчанию `0`. [`UInt8`](/sql-reference/data-types/int-uint) -* `timezone` — Часовой пояс, используемый для преобразования. Если не указан, используется часовой пояс сервера. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает дату ближайшего воскресенья или понедельника, приходящихся на указанную дату или предшествующих ей, в зависимости от режима. Тип возвращаемого значения: [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Примеры** - -**Округление вниз до ближайшего воскресенья или понедельника** - -```sql title=Query -SELECT - toStartOfWeek(toDateTime('2023-04-21 10:20:30')), /* пятница */ - toStartOfWeek(toDateTime('2023-04-21 10:20:30'), 1), /* пятница */ - toStartOfWeek(toDate('2023-04-24')), /* понедельник */ - toStartOfWeek(toDate('2023-04-24'), 1) /* понедельник */ - FORMAT Vertical -``` - -```response title=Response -Row 1: - ────── - toStartOfWeek(toDateTime('2023-04-21 10:20:30')): 2023-04-17 - toStartOfWeek(toDateTime('2023-04-21 10:20:30'), 1): 2023-04-17 - toStartOfWeek(toDate('2023-04-24')): 2023-04-24 - toStartOfWeek(toDate('2023-04-24'), 1): 2023-04-24 -``` - - -## toStartOfYear - -Добавлена в версии: v1.1 - -Округляет дату или дату со временем вниз до первого дня года. Возвращает дату как объект типа `Date`. - -:::note -Тип возвращаемого значения можно настроить с помощью параметра [`enable_extended_results_for_datetime_functions`](/operations/settings/settings#enable_extended_results_for_datetime_functions). -::: - -**Синтаксис** - -```sql -toStartOfYear(value) -``` - -**Аргументы** - -* `value` — дата или дата со временем, которые нужно округлить вниз. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Возвращаемое значение** - -Возвращает первый день года для заданной даты/времени типа [`Date`](/sql-reference/data-types/date). - -**Примеры** - -**Округление вниз до первого дня года** - -```sql title=Query -SELECT toStartOfYear(toDateTime('2023-04-21 10:20:30')) -``` - -```response title=Response -┌─toStartOfYear(toDateTime('2023-04-21 10:20:30'))─┐ -│ 2023-01-01 │ -└──────────────────────────────────────────────────┘ -``` - - -## toTimeWithFixedDate - -Появилась в версии: v1.1 - -Извлекает составляющую времени из даты или даты со временем. -Возвращаемый результат — это смещение от фиксированной точки во времени, в настоящее время `1970-01-02`, -но точная точка во времени является деталью реализации и может измениться в будущем. - -Поэтому `toTime` не следует использовать отдельно. -Основное назначение функции — вычисление разницы во времени между двумя датами или датами со временем, например, `toTime(dt1) - toTime(dt2)`. - -**Синтаксис** - -```sql -toTime(date[, timezone]) -``` - -**Аргументы** - -* `date` — Дата, которую нужно преобразовать во время. [`Date`](/sql-reference/data-types/date) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) -* `timezone` — Необязательный параметр. Часовой пояс для возвращаемого значения. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает компонент времени из даты или даты со временем в виде смещения от фиксированной точки во времени (на данный момент выбрана 1970-01-02). [`DateTime`](/sql-reference/data-types/datetime) - -**Примеры** - -**Вычисление разницы по времени между двумя датами** - -```sql title=Query -SELECT toTime('2025-06-15 12:00:00'::DateTime) - toTime('2024-05-10 11:00:00'::DateTime) AS result, toTypeName(result) -``` - -```response title=Response -┌─result─┬─toTypeName(result)─┐ -│ 3600 │ Int32 │ -└────────┴────────────────────┘ -``` - - -## toTimezone - -Введена в версии v1.1 - -Преобразует `DateTime` или `DateTime64` в указанную часовую зону. -Внутреннее значение (количество секунд Unix) не изменяется. -Изменяются только атрибут часовой зоны и строковое представление значения. - -**Синтаксис** - -```sql -toTimeZone(datetime, timezone) -``` - -**Псевдонимы**: `toTimeZone` - -**Аргументы** - -* `date` — значение для преобразования. [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) -* `timezone` — имя целевого часового пояса. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает то же значение временной метки, что и на входе, но с указанным часовым поясом — [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64). - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT toDateTime('2019-01-01 00:00:00', 'UTC') AS time_utc, -toTypeName(time_utc) AS type_utc, -toInt32(time_utc) AS int32utc, -toTimeZone(time_utc, 'Asia/Yekaterinburg') AS time_yekat, -toTypeName(time_yekat) AS type_yekat, -toInt32(time_yekat) AS int32yekat, -toTimeZone(time_utc, 'US/Samoa') AS time_samoa, -toTypeName(time_samoa) AS type_samoa, -toInt32(time_samoa) AS int32samoa -FORMAT Vertical; -``` - -```response title=Response -Строка 1: -────── -time_utc: 2019-01-01 00:00:00 -type_utc: DateTime('UTC') -int32utc: 1546300800 -time_yekat: 2019-01-01 05:00:00 -type_yekat: DateTime('Asia/Yekaterinburg') -int32yekat: 1546300800 -time_samoa: 2018-12-31 13:00:00 -type_samoa: DateTime('US/Samoa') -int32samoa: 1546300800 -``` - - -## toUTCTimestamp - -Добавлена в версии: v23.8 - -Преобразует значение даты или даты и времени из одного часового пояса во временную метку в часовом поясе UTC. Эта функция в основном добавлена для совместимости с Apache Spark и аналогичными фреймворками. - -**Синтаксис** - -```sql -toUTCTimestamp(datetime, time_zone) -``` - -**Псевдонимы**: `to_utc_timestamp` - -**Аргументы** - -* `datetime` — константа или выражение типа дата или дата и время. [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) -* `time_zone` — константа строкового типа или выражение, задающее часовой пояс. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает дату или дату и время в часовом поясе UTC. [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Примеры** - -**Преобразование часового пояса в UTC** - -```sql title=Query -SELECT toUTCTimestamp(toDateTime('2023-03-16'), 'Asia/Shanghai') -``` - -```response title=Response -┌─toUTCTimestamp(toDateTime('2023-03-16'), 'Asia/Shanghai')─┐ -│ 2023-03-15 16:00:00 │ -└─────────────────────────────────────────────────────────┘ -``` - - -## toUnixTimestamp - -Введена в версии: v1.1 - -Преобразует `String`, `Date` или `DateTime` в Unix-метку времени (количество секунд, прошедших с `1970-01-01 00:00:00 UTC`), типа `UInt32`. - -**Синтаксис** - -```sql -toUnixTimestamp(date[, timezone]) -``` - -**Аргументы** - -* `date` — Значение для преобразования. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) или [`String`](/sql-reference/data-types/string) -* `timezone` — Необязательный параметр. Часовой пояс, который используется при преобразовании. Если не указан, используется часовой пояс сервера. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает метку времени Unix. [`UInt32`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT -'2017-11-05 08:07:47' AS dt_str, -toUnixTimestamp(dt_str) AS from_str, -toUnixTimestamp(dt_str, 'Asia/Tokyo') AS from_str_tokyo, -toUnixTimestamp(toDateTime(dt_str)) AS from_datetime, -toUnixTimestamp(toDateTime64(dt_str, 0)) AS from_datetime64, -toUnixTimestamp(toDate(dt_str)) AS from_date, -toUnixTimestamp(toDate32(dt_str)) AS from_date32 -FORMAT Vertical; -``` - -```response title=Response -Row 1: -────── -dt_str: 2017-11-05 08:07:47 -from_str: 1509869267 -from_str_tokyo: 1509836867 -from_datetime: 1509869267 -from_datetime64: 1509869267 -from_date: 1509840000 -from_date32: 1509840000 -``` - - -## toWeek - -Введена в: v20.1 - -Эта функция возвращает номер недели для значения типа date или datetime. Двухаргументная форма `toWeek()` позволяет указать, начинается ли неделя -с воскресенья или понедельника, а также должен ли возвращаемый результат находиться в диапазоне от `0` до `53` или от `1` до `53`. - -Функция совместимости [`toISOWeek()`](#toWeek) эквивалентна `toWeek(date,3)`. - -В следующей таблице описано, как работает аргумент режима. - -| Mode | First day of week | Range | Week 1 is the first week ... | -| ---- | ----------------- | ----- | ------------------------------- | -| 0 | Sunday | 0-53 | с воскресеньем в этом году | -| 1 | Monday | 0-53 | с 4 или более днями в этом году | -| 2 | Sunday | 1-53 | с воскресеньем в этом году | -| 3 | Monday | 1-53 | с 4 или более днями в этом году | -| 4 | Sunday | 0-53 | с 4 или более днями в этом году | -| 5 | Monday | 0-53 | с понедельником в этом году | -| 6 | Sunday | 1-53 | с 4 или более днями в этом году | -| 7 | Monday | 1-53 | с понедельником в этом году | -| 8 | Sunday | 1-53 | содержащая 1 января | -| 9 | Monday | 1-53 | содержащая 1 января | - -Для значений режима со смыслом «с 4 или более днями в этом году» нумерация недель выполняется в соответствии с ISO 8601:1988: - -* Если неделя, содержащая 1 января, имеет 4 или более дней в новом году, это 1‑я неделя. -* В противном случае это последняя неделя предыдущего года, а следующая неделя — 1‑я неделя. - -Для значений режима со смыслом «содержащая 1 января» неделя, содержащая 1 января, является 1‑й неделей. -Не имеет значения, сколько дней в новом году содержит эта неделя, даже если только один день. -Т. е. если последняя неделя декабря содержит 1 января следующего года, это будет 1‑я неделя следующего года. - -Первый аргумент также может быть указан как [`String`](../data-types/string.md) в формате, поддерживаемом [`parseDateTime64BestEffort()`](type-conversion-functions.md#parsedatetime64besteffort). Поддержка строковых аргументов существует только по причинам совместимости с MySQL, чего ожидают некоторые сторонние инструменты. Поскольку в будущем поддержка строковых аргументов может быть сделана зависимой от новых настроек совместимости с MySQL, а также потому, что разбор строк в целом является медленной операцией, рекомендуется их не использовать. - -**Синтаксис** - -```sql -toWeek(datetime[, mode[, time_zone]]) -``` - -**Псевдонимы**: `week` - -**Аргументы** - -* `datetime` — дата или дата со временем, для которой нужно получить номер недели. [`Date`](/sql-reference/data-types/date) или [`DateTime`](/sql-reference/data-types/datetime) -* `mode` — необязательный параметр. Значение от `0` до `9` определяет первый день недели и диапазон значений номера недели. По умолчанию — `0`. -* `time_zone` — необязательный параметр. Часовой пояс. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает номер недели в соответствии с указанным режимом. [`UInt32`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Получение номеров недель с разными режимами** - -```sql title=Query -SELECT toDate('2016-12-27') AS date, toWeek(date) AS week0, toWeek(date,1) AS week1, toWeek(date,9) AS week9 -``` - -```response title=Response -┌───────date─┬─week0─┬─week1─┬─week9─┐ -│ 2016-12-27 │ 52 │ 52 │ 1 │ -└────────────┴───────┴───────┴───────┘ -``` - - -## toYYYYMM - -Добавлена в: v1.1 - -Преобразует дату или дату со временем в число типа `UInt32`, в котором закодированы год и месяц (YYYY * 100 + MM). -Принимает второй необязательный аргумент — часовой пояс. Если он указан, часовой пояс должен быть строковой константой. - -Эта функция является обратной по отношению к функции `YYYYMMDDToDate()`. - -**Синтаксис** - -```sql -toYYYYMM(datetime[, timezone]) -``` - -**Аргументы** - -* `datetime` — дата или дата со временем для преобразования. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) -* `timezone` — необязательный аргумент. Часовой пояс для преобразования. Если указан, часовой пояс должен быть строковой константой. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает число типа `UInt32`, представляющее год и номер месяца (YYYY * 100 + MM). [`UInt32`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Преобразование текущей даты в формат YYYYMM** - -```sql title=Query -SELECT toYYYYMM(now(), 'US/Eastern') -``` - -```response title=Response -┌─toYYYYMM(now(), 'US/Eastern')─┐ -│ 202303 │ -└───────────────────────────────┘ -``` - - -## toYYYYMMDD - -Добавлено в версии: v1.1 - -Преобразует дату или дату со временем в число типа `UInt32`, содержащее год, месяц и день (YYYY * 10000 + MM * 100 + DD). Принимает второй необязательный аргумент — часовой пояс. Если он указан, часовой пояс должен быть строковой константой. - -**Синтаксис** - -```sql -toYYYYMMDD(datetime[, timezone]) -``` - -**Аргументы** - -* `datetime` — дата или дата со временем для преобразования. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) -* `timezone` — необязательный параметр. Часовой пояс для преобразования. Если указан, часовой пояс должен быть строковой константой. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает число типа `UInt32`, содержащее год, месяц и день (YYYY * 10000 + MM * 100 + DD). [`UInt32`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Преобразование текущей даты в формат YYYYMMDD** - -```sql title=Query -SELECT toYYYYMMDD(now(), 'US/Eastern') -``` - -```response title=Response -┌─toYYYYMMDD(now(), 'US/Eastern')─┐ -│ 20230302 │ -└─────────────────────────────────┘ -``` - - -## toYYYYMMDDhhmmss - -Добавлена в: v1.1 - -Преобразует дату или дату со временем в число типа `UInt64`, содержащее год, месяц, день, часы, минуты и секунды (YYYY * 10000000000 + MM * 100000000 + DD * 1000000 + hh * 10000 + mm * 100 + ss). -Принимает второй необязательный аргумент — часовой пояс. Если он указан, часовой пояс должен быть строковой константой. - -**Синтаксис** - -```sql -toYYYYMMDDhhmmss(datetime[, timezone]) -``` - -**Аргументы** - -* `datetime` — дата или дата со временем для преобразования. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) -* `timezone` — необязательный часовой пояс для преобразования. Если задан, часовой пояс должен быть строковой константой. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает число типа `UInt64`, содержащее год, месяц, день, час, минуту и секунду (YYYY * 10000000000 + MM * 100000000 + DD * 1000000 + hh * 10000 + mm * 100 + ss). [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Преобразование текущих даты и времени в формат YYYYMMDDhhmmss** - -```sql title=Query -SELECT toYYYYMMDDhhmmss(now(), 'US/Eastern') -``` - -```response title=Response -┌─toYYYYMMDDhhmmss(now(), 'US/Eastern')─┐ -│ 20230302112209 │ -└───────────────────────────────────────┘ -``` - - -## toYear - -Добавлена в: v1.1 - -Возвращает год (н. э.) из значения типа `Date` или `DateTime`. - -**Синтаксис** - -```sql -toYear(datetime) -``` - -**Псевдонимы**: `YEAR` - -**Аргументы** - -* `datetime` — дата или дата со временем, из которой извлекается год. [`Date`](/sql-reference/data-types/date) или [`Date32`](/sql-reference/data-types/date32) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Возвращаемое значение** - -Возвращает год указанного значения типа Date или DateTime в виде [`UInt16`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT toYear(toDateTime('2023-04-21 10:20:30')) -``` - -```response title=Response -┌─toYear(toDateTime('2023-04-21 10:20:30'))─┐ -│ 2023 │ -└───────────────────────────────────────────┘ -``` - - -## toYearNumSinceEpoch - -Добавлено в версии: v25.3 - -Возвращает количество лет, прошедших с 1970 года - -**Синтаксис** - -```sql -toYearNumSinceEpoch(date) -``` - -**Аргументы** - -* `date` — дата или дата со временем, подлежащая преобразованию. [`Date`](/sql-reference/data-types/date) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Возвращаемое значение** - -Целое положительное число - -**Примеры** - -**Пример** - -```sql title=Query -SELECT toYearNumSinceEpoch(toDate('2024-10-01')) -``` - -```response title=Response -54 -``` - - -## toYearWeek - -Введена в версии: v20.1 - -Возвращает год и номер недели для даты. Год в результате может отличаться от года в аргументе даты для первой и последней недели года. - -Аргумент `mode` работает так же, как аргумент `mode` функции [`toWeek()`](/sql-reference/functions/date-time-functions#toWeek). - -Предупреждение: номер недели, возвращаемый `toYearWeek()`, может отличаться от значения, которое возвращает `toWeek()`. `toWeek()` всегда возвращает номер недели в контексте заданного года, и в случае, когда `toWeek()` возвращает `0`, `toYearWeek()` возвращает значение, соответствующее последней неделе предыдущего года. См. `prev_yearWeek` в примере ниже. - -Первый аргумент также может быть указан как [`String`](../data-types/string.md) в формате, поддерживаемом [`parseDateTime64BestEffort()`](type-conversion-functions.md#parsedatetime64besteffort). Поддержка строковых аргументов обусловлена лишь совместимостью с MySQL, на которую рассчитывают некоторые сторонние инструменты. Поскольку в будущем поддержка строковых аргументов может быть связана с новыми настройками совместимости с MySQL и потому, что разбор строк в целом — медленная операция, рекомендуется не использовать их. - -**Синтаксис** - -```sql -toYearWeek(datetime[, mode[, timezone]]) -``` - -**Псевдонимы**: `yearweek` - -**Аргументы** - -* `datetime` — дата или дата со временем, для которой нужно получить год и номер недели. [`Date`](/sql-reference/data-types/date) или [`DateTime`](/sql-reference/data-types/datetime) -* `mode` — необязательный параметр. Режим от `0` до `9` определяет первый день недели и диапазон номеров недель. Значение по умолчанию — `0`. -* `timezone` — необязательный параметр. Часовой пояс. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает год и номер недели как объединённое целочисленное значение. [`UInt32`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Получение комбинаций год–неделя с разными режимами** - -```sql title=Query -SELECT toDate('2016-12-27') AS date, toYearWeek(date) AS yearWeek0, toYearWeek(date,1) AS yearWeek1, toYearWeek(date,9) AS yearWeek9, toYearWeek(toDate('2022-01-01')) AS prev_yearWeek -``` - -```response title=Response -┌───────date─┬─yearWeek0─┬─yearWeek1─┬─yearWeek9─┬─prev_yearWeek─┐ -│ 2016-12-27 │ 201652 │ 201652 │ 201701 │ 202152 │ -└────────────┴───────────┴───────────┴───────────┴───────────────┘ -``` - - -## today - -Добавлено в: v1.1 - -Возвращает текущую дату на момент анализа запроса. То же, что и `toDate(now())`. - -**Синтаксис** - -```sql -today() -``` - -**Псевдонимы**: `curdate`, `current_date` - -**Аргументы** - -* Нет. - -**Возвращаемое значение** - -Возвращает текущую дату [`Date`](/sql-reference/data-types/date). - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT today() AS today, curdate() AS curdate, current_date() AS current_date FORMAT Pretty -``` - -```response title=Response -┏━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━━━┓ -┃ today ┃ curdate ┃ current_date ┃ -┡━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━┩ -│ 2025-03-03 │ 2025-03-03 │ 2025-03-03 │ -└────────────┴────────────┴──────────────┘ -``` - - -## yesterday - -Добавлена в версии v1.1 - -Не принимает аргументов и возвращает вчерашнюю дату на одном из этапов анализа запроса. - -**Синтаксис** - -```sql -yesterday() -``` - -**Аргументы** - -* Нет. - -**Возвращаемое значение** - -Возвращает вчерашнюю дату. [`Date`](/sql-reference/data-types/date) - -**Примеры** - -**Получение вчерашней даты** - -```sql title=Query -SELECT yesterday(); -SELECT today() - 1; -``` - -```response title=Response -┌─yesterday()─┐ -│ 2025-06-09 │ -└─────────────┘ -┌─minus(today(), 1)─┐ -│ 2025-06-09 │ -└───────────────────┘ -``` +{/*AUTOGENERGED_START*/ } {/*AUTOGENERATED_END*/ } diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/distance-functions.md b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/distance-functions.md index 6f5cdd288c1..d9e815147dc 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/distance-functions.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/distance-functions.md @@ -1,631 +1,20 @@ --- -description: 'Документация по функциям расстояний' +description: 'Документация по функциям расстояния' sidebar_label: 'Расстояние' slug: /sql-reference/functions/distance-functions -title: 'Функции расстояний' -keywords: ['функции расстояний', 'нормы', 'расстояния', 'векторы'] +title: 'Функции расстояния' +keywords: ['функции расстояния', 'нормы', 'расстояния', 'векторы'] doc_type: 'reference' --- - - -# Функции для вычисления расстояния +# Функции расстояния {/* - Содержимое следующих тегов при сборке фреймворка документации + Содержимое приведённых ниже тегов при сборке фреймворка документации заменяется документацией, сгенерированной из system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. См.: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## L1Distance - -Добавлена в версии: v21.11 - -Вычисляет расстояние между двумя точками (элементы векторов являются координатами) в пространстве `L1` (1-норма, расстояние в [таксомоторной геометрии](https://en.wikipedia.org/wiki/Taxicab_geometry)). - -**Синтаксис** - -```sql -L1Distance(vector1, vector2) -``` - -**Псевдонимы**: `distanceL1` - -**Аргументы** - -* `vector1` — Первый вектор. [`Tuple(T)`](/sql-reference/data-types/tuple) или [`Array(T)`](/sql-reference/data-types/array) -* `vector2` — Второй вектор. [`Tuple(T)`](/sql-reference/data-types/tuple) или [`Array(T)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает расстояние в норме L1. [`UInt32`](/sql-reference/data-types/int-uint) или [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT L1Distance((1, 2), (2, 3)) -``` - -```response title=Response -┌─L1Distance((1, 2), (2, 3))─┐ -│ 2 │ -└────────────────────────────┘ -``` - - -## L1Norm - -Появилась в версии: v21.11 - -Вычисляет сумму абсолютных значений элементов вектора. - -**Синтаксис** - -```sql -L1Norm(vector) -``` - -**Псевдонимы**: `normL1` - -**Аргументы** - -* `vector` — вектор или кортеж числовых значений. [`Array(T)`](/sql-reference/data-types/array) или [`Tuple(T)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает L1-норму или расстояние в [таксомоторной геометрии](https://en.wikipedia.org/wiki/Taxicab_geometry). [`UInt*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal`](/sql-reference/data-types/decimal) - -**Примеры** - -**Простейший пример** - -```sql title=Query -SELECT L1Norm((1, 2)) -``` - -```response title=Response -┌─L1Norm((1, 2))─┐ -│ 3 │ -└────────────────┘ -``` - - -## L1Normalize - -Добавлено в версии: v21.11 - -Вычисляет единичный вектор заданного вектора (элементы кортежа рассматриваются как координаты) в пространстве `L1` ([манхэттенская, или таксомоторная, метрика](https://en.wikipedia.org/wiki/Taxicab_geometry)). - -**Синтаксис** - -```sql -L1Normalize(tuple) -``` - -**Псевдонимы**: `normalizeL1` - -**Аргументы** - -* `tuple` — кортеж числовых значений. [`Tuple(T)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает единичный вектор. [`Tuple(Float64)`](/sql-reference/data-types/tuple) - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT L1Normalize((1, 2)) -``` - -```response title=Response -┌─L1Normalize((1, 2))─────────────────────┐ -│ (0.3333333333333333,0.6666666666666666) │ -└─────────────────────────────────────────┘ -``` - - -## L2Distance - -Появилась в версии: v21.11 - -Вычисляет расстояние между двумя точками (элементы векторов — это координаты) в евклидовом пространстве ([евклидово расстояние](https://en.wikipedia.org/wiki/Euclidean_distance)). - -**Синтаксис** - -```sql -L2Distance(vector1, vector2) -``` - -**Псевдонимы**: `distanceL2` - -**Аргументы** - -* `vector1` — первый вектор. [`Tuple(T)`](/sql-reference/data-types/tuple) или [`Array(T)`](/sql-reference/data-types/array) -* `vector2` — второй вектор. [`Tuple(T)`](/sql-reference/data-types/tuple) или [`Array(T)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает расстояние в 2-норме. [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT L2Distance((1, 2), (2, 3)) -``` - -```response title=Response -┌─L2Distance((1, 2), (2, 3))─┐ -│ 1.4142135623730951 │ -└────────────────────────────┘ -``` - - -## L2DistanceTransposed - -Добавлено в: v25.10 - -Вычисляет приблизительное расстояние между двумя точками в евклидовом пространстве (значения векторов считаются их координатами) ([евклидово расстояние](https://en.wikipedia.org/wiki/Euclidean_distance)). - -**Синтаксис** - -```sql -L2DistanceTransposed(vector1, vector2, p) -``` - -**Псевдонимы**: `distanceL2Transposed` - -**Аргументы** - -* `vectors` — Векторы. [`QBit(T, UInt64)`](/sql-reference/data-types/qbit) -* `reference` — Опорный вектор. [`Array(T)`](/sql-reference/data-types/array) -* `p` — Количество бит каждого элемента вектора, используемых при вычислении расстояния (от 1 до разрядности элемента). Уровень квантизации определяет компромисс между точностью и скоростью. Использование меньшего числа бит приводит к более быстрым операциям ввода-вывода и вычислениям с меньшей точностью, тогда как использование большего числа бит повышает точность за счёт производительности. [`UInt`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает приближённое расстояние по 2-норме. [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Базовое использование** - -```sql title=Query -CREATE TABLE qbit (id UInt32, vec QBit(Float64, 2)) ENGINE = Memory; -INSERT INTO qbit VALUES (1, [0, 1]); -SELECT L2DistanceTransposed(vec, array(1.0, 2.0), 16) FROM qbit;" -``` - -```response title=Response -┌─L2DistanceTransposed([0, 1], [1.0, 2.0], 16)─┐ -│ 1.4142135623730951 │ -└──────────────────────────────────────────────┘ -``` - - -## L2Norm - -Появилась в версии: v21.11 - -Вычисляет квадратный корень из суммы квадратов элементов вектора. - -**Синтаксис** - -```sql -L2Norm(vector) -``` - -**Синонимы**: `normL2` - -**Аргументы** - -* `vector` — вектор или кортеж из числовых значений. [`Tuple(T)`](/sql-reference/data-types/tuple) или [`Array(T)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает норму L2 или [евклидово расстояние](https://en.wikipedia.org/wiki/Euclidean_distance). [`UInt*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT L2Norm((1, 2)) -``` - -```response title=Response -┌───L2Norm((1, 2))─┐ -│ 2.23606797749979 │ -└──────────────────┘ -``` - - -## L2Normalize - -Появилась в версии: v21.11 - -Вычисляет единичный вектор для заданного вектора (элементы кортежа — это координаты) в евклидовом пространстве (с использованием [евклидового расстояния](https://en.wikipedia.org/wiki/Euclidean_distance)). - -**Синтаксис** - -```sql -L2Normalize(tuple) -``` - -**Псевдонимы**: `normalizeL2` - -**Аргументы** - -* `tuple` — кортеж числовых значений. [`Tuple(T)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает единичный вектор в виде [`Tuple(Float64)`](/sql-reference/data-types/tuple). - -**Примеры** - -**Базовый пример использования** - -```sql title=Query -SELECT L2Normalize((3, 4)) -``` - -```response title=Response -┌─L2Normalize((3, 4))─┐ -│ (0.6,0.8) │ -└─────────────────────┘ -``` - - -## L2SquaredDistance - -Появилась в версии: v22.7 - -Вычисляет сумму квадратов разностей между соответствующими элементами двух векторов. - -**Синтаксис** - -```sql -L2SquaredDistance(vector1, vector2) -``` - -**Псевдонимы**: `distanceL2Squared` - -**Аргументы** - -* `vector1` — первый вектор. [`Tuple(T)`](/sql-reference/data-types/tuple) или [`Array(T)`](/sql-reference/data-types/array) -* `vector2` — второй вектор. [`Tuple(T)`](/sql-reference/data-types/tuple) или [`Array(T)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает сумму квадратов разностей соответствующих элементов двух векторов. [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT L2SquaredDistance([1, 2, 3], [0, 0, 0]) -``` - -```response title=Response -┌─L2SquaredDis⋯ [0, 0, 0])─┐ -│ 14 │ -└──────────────────────────┘ -``` - - -## L2SquaredNorm - -Введена в версии: v22.7 - -Вычисляет квадратный корень из суммы квадратов элементов вектора (то есть [`L2Norm`](#L2Norm), возведённую в квадрат). - -**Синтаксис** - -```sql -L2SquaredNorm(vector) -``` - -**Псевдонимы**: `normL2Squared` - -**Аргументы** - -* `vector` — вектор или кортеж числовых значений. [`Array(T)`](/sql-reference/data-types/array) или [`Tuple(T)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает квадрат L2-нормы. [`UInt*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal`](/sql-reference/data-types/decimal) - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT L2SquaredNorm((1, 2)) -``` - -```response title=Response -┌─L2SquaredNorm((1, 2))─┐ -│ 5 │ -└───────────────────────┘ -``` - - -## LinfDistance - -Добавлена в версии: v21.11 - -Вычисляет расстояние между двумя точками (элементы векторов — их координаты) в пространстве `L_{inf}` ([максимальная норма](https://en.wikipedia.org/wiki/Norm_\(mathematics\)#Maximum_norm_\(special_case_of:_infinity_norm,_uniform_norm,_or_supremum_norm\))). - -**Синтаксис** - -```sql -LinfDistance(vector1, vector2) -``` - -**Псевдонимы**: `distanceLinf` - -**Аргументы** - -* `vector1` — Первый вектор. [`Tuple(T)`](/sql-reference/data-types/tuple) или [`Array(T)`](/sql-reference/data-types/array) -* `vector2` — Второй вектор. [`Tuple(T)`](/sql-reference/data-types/tuple) или [`Array(T)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает расстояние в норме бесконечности (Infinity-norm). [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT LinfDistance((1, 2), (2, 3)) -``` - -```response title=Response -┌─LinfDistance((1, 2), (2, 3))─┐ -│ 1 │ -└──────────────────────────────┘ -``` - - -## LinfNorm - -Впервые появилось в: v21.11 - -Вычисляет максимум абсолютных значений элементов вектора. - -**Синтаксис** - -```sql -LinfNorm(vector) -``` - -**Псевдонимы**: `normLinf` - -**Аргументы** - -* `vector` — вектор или кортеж числовых значений. [`Array(T)`](/sql-reference/data-types/array) или [`Tuple(T)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает норму L∞ (Linf) или максимальное абсолютное значение. [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT LinfNorm((1, -2)) -``` - -```response title=Response -┌─LinfNorm((1, -2))─┐ -│ 2 │ -└───────────────────┘ -``` - - -## LinfNormalize - -Добавлена в версии v21.11 - -Вычисляет единичный вектор для заданного вектора (элементы кортежа являются координатами) в пространстве `L_{inf}` (с использованием [максимальной нормы](https://en.wikipedia.org/wiki/Norm_\(mathematics\)#Maximum_norm_\(special_case_of:_infinity_norm,_uniform_norm,_or_supremum_norm\))). - -**Синтаксис** - -```sql -LinfNormalize(tuple) -``` - -**Псевдонимы**: `normalizeLinf` - -**Аргументы** - -* `tuple` — кортеж числовых значений. [`Tuple(T)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает единичный вектор. [`Tuple(Float64)`](/sql-reference/data-types/tuple) - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT LinfNormalize((3, 4)) -``` - -```response title=Response -┌─LinfNormalize((3, 4))─┐ -│ (0.75,1) │ -└───────────────────────┘ -``` - - -## LpDistance - -Впервые появилась в: v21.11 - -Вычисляет расстояние между двумя точками (элементы векторов являются координатами) в пространстве `Lp` (расстояние по [p-норме](https://en.wikipedia.org/wiki/Norm_\(mathematics\)#p-norm)). - -**Синтаксис** - -```sql -LpDistance(vector1, vector2, p) -``` - -**Псевдонимы**: `distanceLp` - -**Аргументы** - -* `vector1` — первый вектор. [`Tuple(T)`](/sql-reference/data-types/tuple) или [`Array(T)`](/sql-reference/data-types/array) -* `vector2` — второй вектор. [`Tuple(T)`](/sql-reference/data-types/tuple) или [`Array(T)`](/sql-reference/data-types/array) -* `p` — степень. Возможные значения: вещественное число в диапазоне `[1; inf)`. [`UInt*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает расстояние по p-норме. [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT LpDistance((1, 2), (2, 3), 3) -``` - -```response title=Response -┌─LpDistance((1, 2), (2, 3), 3)─┐ -│ 1.2599210498948732 │ -└───────────────────────────────┘ -``` - - -## LpNorm - -Добавлена в версии: v21.11 - -Вычисляет p-норму вектора, которая представляет собой p-й корень из суммы p-х степеней модулей его элементов. - -Частные случаи: - -* Когда p=1, это эквивалентно L1Norm (манхэттенское расстояние). -* Когда p=2, это эквивалентно L2Norm (евклидово расстояние). -* Когда p=∞, это эквивалентно LinfNorm (максимальная норма). - -**Синтаксис** - -```sql -LpNorm(vector, p) -``` - -**Псевдонимы**: `normLp` - -**Аргументы** - -* `vector` — вектор или кортеж числовых значений. [`Tuple(T)`](/sql-reference/data-types/tuple) или [`Array(T)`](/sql-reference/data-types/array) -* `p` — степень. Возможные значения — вещественные числа в диапазоне `[1; inf)`. [`UInt*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает [Lp-норму](https://en.wikipedia.org/wiki/Norm_\(mathematics\)#p-norm). [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT LpNorm((1, -2), 2) -``` - -```response title=Response -┌─LpNorm((1, -2), 2)─┐ -│ 2.23606797749979 │ -└────────────────────┘ -``` - - -## LpNormalize - -Введена в версии: v21.11 - -Вычисляет единичный вектор для заданного вектора (элементы кортежа являются координатами) в пространстве `Lp` (с использованием [p-нормы](https://en.wikipedia.org/wiki/Norm_\(mathematics\)#p-norm)). - -**Синтаксис** - -```sql -LpNormalize(tuple, p) -``` - -**Псевдонимы**: `normalizeLp` - -**Аргументы** - -* `tuple` — кортеж числовых значений. [`Tuple(T)`](/sql-reference/data-types/tuple) -* `p` — степень. Возможные значения — любое число в диапазоне от `[1; inf)`. [`UInt*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает единичный вектор. [`Tuple(Float64)`](/sql-reference/data-types/tuple) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT LpNormalize((3, 4), 5) -``` - -```response title=Response -┌─LpNormalize((3, 4), 5)──────────────────┐ -│ (0.7187302630182624,0.9583070173576831) │ -└─────────────────────────────────────────┘ -``` - - -## cosineDistance - -Добавлена в версии: v1.1 - -Вычисляет косинусное расстояние между двумя векторами (элементы кортежей являются их координатами). Чем меньше возвращаемое значение, тем более сходны векторы. - -**Синтаксис** - -```sql -cosineDistance(vector1, vector2) -``` - -**Аргументы** - -* `vector1` — Первый вектор. [`Tuple(T)`](/sql-reference/data-types/tuple) или [`Array(T)`](/sql-reference/data-types/array) -* `vector2` — Второй вектор. [`Tuple(T)`](/sql-reference/data-types/tuple) или [`Array(T)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает единицу минус косинус угла между двумя векторами. [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT cosineDistance((1, 2), (2, 3)); -``` - -```response title=Response -┌─cosineDistance((1, 2), (2, 3))─┐ -│ 0.007722123286332261 │ -└────────────────────────────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/encoding-functions.md b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/encoding-functions.md index 0935b3a88d2..68440854d0c 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/encoding-functions.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/encoding-functions.md @@ -3,1111 +3,18 @@ description: 'Документация по функциям кодирован sidebar_label: 'Кодирование' slug: /sql-reference/functions/encoding-functions title: 'Функции кодирования' -keywords: ['encoding', 'regular functions', 'encode', 'decode'] +keywords: ['кодирование', 'обычные функции', 'кодировать', 'декодировать'] doc_type: 'reference' --- - - # Функции кодирования {/* - Содержимое расположенных ниже тегов заменяется во время сборки фреймворка документации - документами, сгенерированными из system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. + Внутреннее содержимое расположенных ниже тегов будет заменено в момент сборки фреймворка документации + документацией, сгенерированной из system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. См.: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## bech32Decode - -Появилась в версии: v25.6 - -Декодирует строку адреса Bech32, сгенерированную с использованием алгоритмов bech32 или bech32m. - -:::note -В отличие от функции кодирования, `Bech32Decode` автоматически обрабатывает дополненные значения типа FixedString. -::: - -**Синтаксис** - -```sql -bech32Decode(address) -``` - -**Аргументы** - -* `address` — строка в кодировке Bech32 для декодирования. [`String`](/sql-reference/data-types/string) или [`FixedString`](/sql-reference/data-types/fixedstring) - -**Возвращаемое значение** - -Возвращает кортеж `(hrp, data)`, использованных при кодировании строки. Данные представлены в двоичном формате. [`Tuple(String, String)`](/sql-reference/data-types/tuple) - -**Примеры** - -**Декодирование адреса** - -```sql title=Query -SELECT tup.1 AS hrp, hex(tup.2) AS data FROM (SELECT bech32Decode('bc1w508d6qejxtdg4y5r3zarvary0c5xw7kj7gz7z') AS tup) -``` - -```response title=Response -bc 751E76E8199196D454941C45D1B3A323F1433BD6 -``` - -**Адрес тестовой сети** - -```sql title=Query -SELECT tup.1 AS hrp, hex(tup.2) AS data FROM (SELECT bech32Decode('tb1w508d6qejxtdg4y5r3zarvary0c5xw7kzp034v') AS tup) -``` - -```response title=Response -tb 751E76E8199196D454941C45D1B3A323F1433BD6 -``` - - -## bech32Encode - -Добавлена в: v25.6 - -Кодирует бинарную строку данных вместе с человеко-читаемой частью (HRP), используя алгоритмы [Bech32 или Bech32m](https://en.bitcoin.it/wiki/Bech32). - -:::note -При использовании типа данных [`FixedString`](../data-types/fixedstring.md), если значение не полностью заполняет строку, оно дополняется нулевыми символами. -Функция `bech32Encode` обрабатывает это автоматически для аргумента `hrp`, но для аргумента `data` значения не должны быть дополнены. -По этой причине не рекомендуется использовать тип данных [`FixedString`](../data-types/fixedstring.md) для ваших данных, если только вы не -уверены, что все значения имеют одинаковую длину, и не обеспечите, что столбец `FixedString` также имеет эту длину. -::: - -**Синтаксис** - -```sql -bech32Encode(hrp, data[, witver]) -``` - -**Аргументы** - -* `hrp` — Строка из `1 - 83` символов в нижнем регистре, задающая "human-readable part" (читаемую человеком часть) кода. Обычно 'bc' или 'tb'. [`String`](/sql-reference/data-types/string) или [`FixedString`](/sql-reference/data-types/fixedstring) -* `data` — Строка двоичных данных для кодирования. [`String`](/sql-reference/data-types/string) или [`FixedString`](/sql-reference/data-types/fixedstring) -* `witver` — Необязательный параметр. Версия witness (по умолчанию = 1). `UInt*`, задающий версию алгоритма. `0` для Bech32 и `1` или больше для Bech32m. [`UInt*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает строку адреса Bech32, состоящую из human-readable части, разделительного символа, который всегда равен '1', и части данных. Длина строки никогда не превышает 90 символов. Если алгоритм не может сгенерировать корректный адрес из входных данных, возвращается пустая строка. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Bech32m по умолчанию** - -```sql title=Query --- Если версия witness не указана, по умолчанию используется версия 1 — обновлённый алгоритм Bech32m. -SELECT bech32Encode('bc', unhex('751e76e8199196d454941c45d1b3a323f1433bd6')) -``` - -```response title=Response -bc1w508d6qejxtdg4y5r3zarvary0c5xw7k8zcwmq -``` - -**Алгоритм Bech32** - -```sql title=Query --- Версия witness со значением 0 приведёт к другой строке адреса. -SELECT bech32Encode('bc', unhex('751e76e8199196d454941c45d1b3a323f1433bd6'), 0) -``` - -```response title=Response -bc1w508d6qejxtdg4y5r3zarvary0c5xw7kj7gz7z -``` - -**Пользовательский HRP** - -```sql title=Query --- Хотя 'bc' (Mainnet) и 'tb' (Testnet) являются единственными допустимыми значениями hrp для --- формата адресов SegWit, Bech32 допускает любое значение hrp, удовлетворяющее указанным выше требованиям. -SELECT bech32Encode('abcdefg', unhex('751e76e8199196d454941c45d1b3a323f1433bd6'), 10) -``` - -```response title=Response -abcdefg1w508d6qejxtdg4y5r3zarvary0c5xw7k9rp8r4 -``` - - -## bin - -Введена в: v21.8 - -Возвращает строку, содержащую двоичное представление аргумента -в соответствии со следующей логикой для разных типов: - -| Type | Description | -| -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `(U)Int*` | Выводит двоичные разряды от старшего к младшему (порядок big-endian или «читаемый человеком»). Начинает с первого (самого старшего) ненулевого байта (ведущие нулевые байты опускаются), но всегда выводит восемь разрядов для каждого байта, если старший разряд равен нулю. | -| `Date` and `DateTime` | Форматируются как соответствующие целые числа (количество дней с начала эпохи Unix для Date и значение UNIX timestamp для DateTime). | -| `String` and `FixedString` | Все байты просто кодируются как восемь двоичных разрядов. Нулевые байты не опускаются. | -| `Float*` and `Decimal` | Кодируются в соответствии с их представлением в памяти. Так как поддерживается архитектура little-endian, они кодируются в формате little-endian. Ведущие и замыкающие нулевые байты не опускаются. | -| `UUID` | Кодируется как строка в порядке big-endian. | - -**Синтаксис** - -```sql -bin(arg) -``` - -**Аргументы** - -* `arg` — Значение для преобразования в двоичное представление. [`String`](/sql-reference/data-types/string) или [`FixedString`](/sql-reference/data-types/fixedstring) или [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal`](/sql-reference/data-types/decimal) или [`Date`](/sql-reference/data-types/date) или [`DateTime`](/sql-reference/data-types/datetime) - -**Возвращаемое значение** - -Возвращает строку, содержащую двоичное представление аргумента. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Простое целое число** - -```sql title=Query -SELECT bin(14) -``` - -```response title=Response -┌─bin(14)──┐ -│ 00001110 │ -└──────────┘ -``` - -**Числа типа Float32** - -```sql title=Query -SELECT bin(toFloat32(number)) AS bin_presentation FROM numbers(15, 2) -``` - -```response title=Response -┌─bin_presentation─────────────────┐ -│ 00000000000000000111000001000001 │ -│ 00000000000000001000000001000001 │ -└──────────────────────────────────┘ -``` - -**Числа с плавающей запятой Float64** - -```sql title=Query -SELECT bin(toFloat64(number)) AS bin_presentation FROM numbers(15, 2) -``` - -```response title=Response -┌─bin_presentation─────────────────────────────────────────────────┐ -│ 0000000000000000000000000000000000000000000000000010111001000000 │ -│ 0000000000000000000000000000000000000000000000000011000001000000 │ -└──────────────────────────────────────────────────────────────────┘ -``` - -**Конвертация UUID** - -```sql title=Query -SELECT bin(toUUID('61f0c404-5cb3-11e7-907b-a6006ad3dba0')) AS bin_uuid -``` - -```response title=Response -┌─bin_uuid─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ -│ 01100001111100001100010000000100010111001011001100010001111001111001000001111011101001100000000001101010110100111101101110100000 │ -└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## bitPositionsToArray - -Введена в версии: v21.7 - -Эта функция возвращает позиции (в порядке возрастания) битов со значением 1 в двоичном представлении беззнакового целого числа. -Знаковые целые числа во входных данных сначала приводятся к беззнаковому целому числу. - -**Синтаксис** - -```sql -bitPositionsToArray(arg) -``` - -**Аргументы** - -* `arg` — целое число. [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает массив с позициями единичных битов в двоичном представлении входного значения, упорядоченными по возрастанию. [`Array(UInt64)`](/sql-reference/data-types/array) - -**Примеры** - -**Установлен один бит** - -```sql title=Query -SELECT bitPositionsToArray(toInt8(1)) AS bit_positions -``` - -```response title=Response -┌─bit_positions─┐ -│ [0] │ -└───────────────┘ -``` - -**Все биты установлены** - -```sql title=Query -SELECT bitPositionsToArray(toInt8(-1)) AS bit_positions -``` - -```response title=Response -┌─bit_positions─────────────┐ -│ [0, 1, 2, 3, 4, 5, 6, 7] │ -└───────────────────────────┘ -``` - - -## bitmaskToArray - -Добавлена в версии: v1.1 - -Эта функция разлагает целое число на сумму степеней двойки. -Степени двойки возвращаются в виде массива, отсортированного по возрастанию. - -**Синтаксис** - -```sql -bitmaskToArray(num) -``` - -**Аргументы** - -* `num` — целое число. [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает массив степеней двойки, отсортированных по возрастанию, которые в сумме дают исходное число. [`Array(UInt64)`](/sql-reference/data-types/array) - -**Примеры** - -**Базовый пример** - -```sql title=Query -SELECT bitmaskToArray(50) AS powers_of_two -``` - -```response title=Response -┌─powers_of_two───┐ -│ [2, 16, 32] │ -└─────────────────┘ -``` - -**Степень двойки** - -```sql title=Query -SELECT bitmaskToArray(8) AS powers_of_two -``` - -```response title=Response -┌─powers_of_two─┐ -│ [8] │ -└───────────────┘ -``` - - -## bitmaskToList - -Появилась в версии: v1.1 - -Аналогична bitmaskToArray, но возвращает степени двойки в виде строки со значениями, разделёнными запятыми. - -**Синтаксис** - -```sql -bitmaskToList(num) -``` - -**Аргументы** - -* `num` — целое число. [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает строку, содержащую степени двойки, разделённые запятыми. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Базовый пример** - -```sql title=Query -SELECT bitmaskToList(50) AS powers_list -``` - -```response title=Response -┌─powers_list───┐ -│ 2, 16, 32 │ -└───────────────┘ -``` - - -## char - -Введена в версии v20.1 - -Возвращает строку длиной, равной количеству переданных аргументов, где каждый байт -имеет значение соответствующего аргумента. Принимает несколько аргументов числовых типов. - -Если значение аргумента выходит за пределы диапазона типа данных `UInt8`, то оно приводится -к `UInt8` с возможным округлением и переполнением. - -**Синтаксис** - -```sql -char(num1[, num2[, ...]]) -``` - -**Аргументы** - -* `num1[, num2[, num3 ...]]` — числовые аргументы, интерпретируемые как целые числа. [`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает строку из указанных байтов. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Базовый пример** - -```sql title=Query -SELECT char(104.1, 101, 108.9, 108.9, 111) AS hello; -``` - -```response title=Response -┌─hello─┐ -│ hello │ -└───────┘ -``` - -**Создание произвольных кодировок** - -```sql title=Query --- Можно создать строку с произвольной кодировкой, передав соответствующие байты. --- например, UTF8 -SELECT char(0xD0, 0xBF, 0xD1, 0x80, 0xD0, 0xB8, 0xD0, 0xB2, 0xD0, 0xB5, 0xD1, 0x82) AS hello; -``` - -```response title=Response -┌─hello──┐ -│ привет │ -└────────┘ -``` - - -## hex - -Добавлена в версии: v1.1 - -Возвращает строку, содержащую шестнадцатеричное представление аргумента в соответствии -со следующей логикой для разных типов: - -| Тип | Описание | -| ------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `(U)Int*` | Выводит шестнадцатеричные цифры («полубайты», nibbles) от старшего к младшему разряду (порядок big-endian или «читаемый человеком» порядок). Начинает со старшего ненулевого байта (ведущие нулевые байты опускаются), но всегда выводит обе цифры каждого байта, даже если старшая цифра равна нулю. | -| `Date` и `DateTime` | Форматируются как соответствующие целые числа (количество дней, прошедших с начала эпохи, для Date и значение метки времени Unix для DateTime). | -| `String` и `FixedString` | Все байты просто кодируются как две шестнадцатеричные цифры. Нулевые байты не опускаются. | -| `Float*` и `Decimal` | Кодируются в виде их представления в памяти. ClickHouse хранит значения во внутреннем представлении всегда в формате little-endian, поэтому они кодируются именно так. Ведущие и завершающие нулевые байты не опускаются. | -| `UUID` | Кодируется как строка в порядке big-endian. | - -Функция использует заглавные буквы `A-F` и не использует никаких префиксов (например, `0x`) или суффиксов (например, `h`). - -**Синтаксис** - -```sql -hex(arg) -``` - -**Аргументы** - -* `arg` — значение, которое нужно преобразовать в шестнадцатеричное представление. [`String`](/sql-reference/data-types/string) или [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal`](/sql-reference/data-types/decimal) или [`Date`](/sql-reference/data-types/date) или [`DateTime`](/sql-reference/data-types/datetime) - -**Возвращаемое значение** - -Возвращает строку с шестнадцатеричным представлением аргумента. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Простое целое число** - -```sql title=Query -SELECT hex(1) -``` - -```response title=Response -01 -``` - -**Числа типа Float32** - -```sql title=Query -SELECT hex(toFloat32(number)) AS hex_presentation FROM numbers(15, 2) -``` - -```response title=Response -┌─hex_presentation─┐ -│ 00007041 │ -│ 00008041 │ -└──────────────────┘ -``` - -**Числа типа Float64** - -```sql title=Query -SELECT hex(toFloat64(number)) AS hex_presentation FROM numbers(15, 2) -``` - -```response title=Response -┌─hex_presentation─┐ -│ 0000000000002E40 │ -│ 0000000000003040 │ -└──────────────────┘ -``` - -**Преобразование UUID** - -```sql title=Query -SELECT lower(hex(toUUID('61f0c404-5cb3-11e7-907b-a6006ad3dba0'))) AS uuid_hex -``` - -```response title=Response -┌─uuid_hex─────────────────────────┐ -│ 61f0c4045cb311e7907ba6006ad3dba0 │ -└──────────────────────────────────┘ -``` - - -## hilbertDecode - -Введена в: v24.6 - -Декодирует индекс кривой Гильберта обратно в кортеж беззнаковых целых чисел, представляющих координаты в многомерном пространстве. - -Как и функция `hilbertEncode`, эта функция имеет два режима работы: - -* **Простой** -* **Расширенный** - -**Простой режим** - -Принимает до двух беззнаковых целых чисел в качестве аргументов и возвращает код типа `UInt64`. - -**Расширенный режим** - -Принимает маску диапазона (кортеж) в качестве первого аргумента и до двух беззнаковых целых чисел в -качестве остальных аргументов. Каждое число в маске задаёт количество бит, на которое -соответствующий аргумент будет сдвинут влево, фактически масштабируя аргумент -внутри его диапазона. - -Расширение диапазона может быть полезно, когда требуется получить схожее распределение для -аргументов с сильно различающимися диапазонами (или кардинальностями). Например: «IP-адрес» `(0...FFFFFFFF)` -и «код страны» `(0...FF)`. Как и при кодировании, количество чисел ограничено максимум 8. - -**Синтаксис** - -```sql -hilbertDecode(tuple_size, code) -``` - -**Аргументы** - -* `tuple_size` — целое число не более `2`. [`UInt8/16/32/64`](/sql-reference/data-types/int-uint) или [`Tuple(UInt8/16/32/64)`](/sql-reference/data-types/tuple) -* `code` — код типа `UInt64`. [`UInt64`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает кортеж указанного размера. [`Tuple(UInt64)`](/sql-reference/data-types/tuple) - -**Примеры** - -**Простой режим** - -```sql title=Query -SELECT hilbertDecode(2, 31) -``` - -```response title=Response -["3", "4"] -``` - -**Один аргумент** - -```sql title=Query --- Код Гильберта для одного аргумента всегда совпадает с самим аргументом (в виде кортежа). -SELECT hilbertDecode(1, 1) -``` - -```response title=Response -["1"] -``` - -**Расширенный режим** - -```sql title=Query --- Единственный аргумент с кортежем, задающим битовые сдвиги, будет соответственно сдвинут вправо. -SELECT hilbertDecode(tuple(2), 32768) -``` - -```response title=Response -["128"] -``` - -**Использование столбцов** - -```sql title=Query --- Сначала создайте таблицу и вставьте некоторые данные -CREATE TABLE hilbert_numbers( - n1 UInt32, - n2 UInt32 -) -ENGINE=MergeTree() -ORDER BY n1 SETTINGS index_granularity = 8192, index_granularity_bytes = '10Mi'; -insert into hilbert_numbers (*) values(1,2); - --- Используйте имена столбцов вместо констант в качестве аргументов функций -SELECT untuple(hilbertDecode(2, hilbertEncode(n1, n2))) FROM hilbert_numbers; -``` - -```response title=Response -1 2 -``` - - -## hilbertEncode - -Добавлена в версии: v24.6 - -Вычисляет код кривой Гильберта для списка беззнаковых целых чисел. - -Функция имеет два режима работы: - -* **Простой** -* **Расширенный** - -**Простой режим** - -Принимает до двух беззнаковых целых чисел в качестве аргументов и возвращает код типа UInt64. - -**Расширенный режим** - -Принимает маску диапазона ([Tuple](../../sql-reference/data-types/tuple.md)) в качестве -первого аргумента и до двух [беззнаковых целых чисел](../../sql-reference/data-types/int-uint.md) -в качестве остальных аргументов. - -Каждое число в маске задаёт количество бит, на которое соответствующий аргумент -будет сдвинут влево, эффективно масштабируя аргумент внутри его диапазона. - -**Синтаксис** - -```sql --- Упрощённый режим -hilbertEncode(args) - --- Расширенный режим -hilbertEncode(range_mask, args) -``` - -**Аргументы** - -* `args` — До двух значений типа `UInt` или столбцов типа `UInt`. [`UInt8/16/32/64`](/sql-reference/data-types/int-uint) -* `range_mask` — Для расширенного режима — до двух значений типа `UInt` или столбцов типа `UInt`. [`UInt8/16/32/64`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает код типа `UInt64`. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Простой режим** - -```sql title=Query -SELECT hilbertEncode(3, 4) -``` - -```response title=Response -31 -``` - -**Расширенный режим** - -```sql title=Query --- Расширение диапазона может быть полезно, когда требуется схожее распределение для --- аргументов с сильно различающимися диапазонами (или мощностью). --- Например: 'IP-адрес' (0...FFFFFFFF) и 'Код страны' (0...FF). --- Примечание: размер кортежа должен соответствовать количеству остальных аргументов. -SELECT hilbertEncode((10, 6), 1024, 16) -``` - -```response title=Response -4031541586602 -``` - -**Один аргумент** - -```sql title=Query --- Для одного аргумента без кортежа функция возвращает сам аргумент --- в качестве индекса Гильберта, так как отображение размерностей не требуется. -SELECT hilbertEncode(1) -``` - -```response title=Response -1 -``` - -**Расширенная форма с одним аргументом** - -```sql title=Query --- Если передан один аргумент с кортежем, задающим битовые сдвиги, функция --- выполняет сдвиг аргумента влево на указанное количество битов. -SELECT hilbertEncode(tuple(2), 128) -``` - -```response title=Response -512 -``` - -**Использование столбцов** - -```sql title=Query --- Сначала создайте таблицу и вставьте некоторые данные -CREATE TABLE hilbert_numbers( - n1 UInt32, - n2 UInt32 -) -ENGINE=MergeTree() -ORDER BY n1; -insert into hilbert_numbers (*) values(1, 2); - --- Используйте имена столбцов вместо констант в качестве аргументов функции -SELECT hilbertEncode(n1, n2) FROM hilbert_numbers; -``` - -```response title=Response -13 -``` - - -## mortonDecode - -Введена в: v24.6 - -Декодирует кодировку Morton (ZCurve) в соответствующий кортеж беззнаковых целых чисел. - -Как и функция `mortonEncode`, эта функция имеет два режима работы: - -* **Простой** -* **Расширенный** - -**Простой режим** - -Принимает размер результирующего кортежа в качестве первого аргумента и код — в качестве второго аргумента. - -**Расширенный режим** - -Принимает маску диапазона (кортеж) в качестве первого аргумента и код — в качестве второго аргумента. -Каждое число в маске задаёт степень сжатия диапазона: - -* `1` — без сжатия -* `2` — сжатие в 2 раза -* `3` — сжатие в 3 раза - ⋮ -* До 8-кратного сжатия. - -Расширение диапазона может быть полезно, когда требуется схожее распределение -для аргументов с сильно различающимися диапазонами (или кардинальностью). Например: 'IP Address' `(0...FFFFFFFF)` -и 'Country code' `(0...FF)`. Как и для функции кодирования, это ограничено не более чем -8 числами. - -**Синтаксис** - -```sql --- Простой режим -mortonDecode(tuple_size, code) - --- Расширенный режим -mortonDecode(range_mask, code) -``` - -**Аргументы** - -* `tuple_size` — целое число не более 8. [`UInt8/16/32/64`](/sql-reference/data-types/int-uint) -* `range_mask` — в расширенном режиме маска для каждого аргумента. Маска — это кортеж беззнаковых целых чисел. Каждое число в маске задаёт степень уменьшения диапазона. [`Tuple(UInt8/16/32/64)`](/sql-reference/data-types/tuple) -* `code` — код UInt64. [`UInt64`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает кортеж заданного размера. [`Tuple(UInt64)`](/sql-reference/data-types/tuple) - -**Примеры** - -**Простой режим** - -```sql title=Query -SELECT mortonDecode(3, 53) -``` - -```response title=Response -["1", "2", "3"] -``` - -**Единственный аргумент** - -```sql title=Query -SELECT mortonDecode(1, 1) -``` - -```response title=Response -["1"] -``` - -**Расширенный режим, сокращение одного аргумента** - -```sql title=Query -SELECT mortonDecode(tuple(2), 32768) -``` - -```response title=Response -["128"] -``` - -**Использование столбцов** - -```sql title=Query --- Сначала создадим таблицу и вставим данные -CREATE TABLE morton_numbers( - n1 UInt32, - n2 UInt32, - n3 UInt16, - n4 UInt16, - n5 UInt8, - n6 UInt8, - n7 UInt8, - n8 UInt8 -) -ENGINE=MergeTree() -ORDER BY n1; -INSERT INTO morton_numbers (*) values(1, 2, 3, 4, 5, 6, 7, 8); - --- Используем имена столбцов вместо констант в качестве аргументов функции -SELECT untuple(mortonDecode(8, mortonEncode(n1, n2, n3, n4, n5, n6, n7, n8))) FROM morton_numbers; -``` - -```response title=Response -1 2 3 4 5 6 7 8 -``` - - -## mortonEncode - -Впервые появилась в: v24.6 - -Вычисляет кодирование Мортон (Z-curve) для списка беззнаковых целых чисел. - -Функция работает в двух режимах: - -* **Простой** -* *Расширенный** - -**Простой режим** - -Принимает до 8 беззнаковых целых чисел в качестве аргументов и возвращает значение типа `UInt64`. - -**Расширенный режим** - -Принимает маску диапазона ([Tuple](../data-types/tuple.md)) в качестве первого аргумента и -до 8 [беззнаковых целых чисел](../data-types/int-uint.md) в качестве остальных аргументов. - -Каждое число в маске задаёт степень расширения диапазона: - -* 1 — без расширения -* 2 — расширение в 2 раза -* 3 — расширение в 3 раза - ⋮ -* До 8-кратного расширения. - -**Синтаксис** - -```sql --- Упрощённый режим -mortonEncode(args) - --- Расширенный режим -mortonEncode(range_mask, args) -``` - -**Аргументы** - -* `args` — до 8 беззнаковых целых чисел или столбцов указанного выше типа. [`UInt8/16/32/64`](/sql-reference/data-types/int-uint) -* `range_mask` — для расширенного режима — маска для каждого аргумента. Маска — это кортеж беззнаковых целых чисел от `1` до `8`. Каждое число в маске задаёт величину сжатия диапазона. [`Tuple(UInt8/16/32/64)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает код типа `UInt64`. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Простой режим** - -```sql title=Query -SELECT mortonEncode(1, 2, 3) -``` - -```response title=Response -53 -``` - -**Расширенный режим** - -```sql title=Query --- Расширение диапазона может быть полезно, когда требуется схожее распределение для --- аргументов с сильно различающимися диапазонами (или мощностью) --- Например: 'IP-адрес' (0...FFFFFFFF) и 'Код страны' (0...FF). --- Примечание: размер кортежа должен быть равен количеству других аргументов. -SELECT mortonEncode((1,2), 1024, 16) -``` - -```response title=Response -1572864 -``` - -**Один аргумент** - -```sql title=Query --- Кодирование Мортона для одного аргумента всегда возвращает сам аргумент -SELECT mortonEncode(1) -``` - -```response title=Response -1 -``` - -**Развёрнутый одиночный аргумент** - -```sql title=Query -SELECT mortonEncode(tuple(2), 128) -``` - -```response title=Response -32768 -``` - -**Использование столбцов** - -```sql title=Query --- Сначала создадим таблицу и вставим данные -CREATE TABLE morton_numbers( - n1 UInt32, - n2 UInt32, - n3 UInt16, - n4 UInt16, - n5 UInt8, - n6 UInt8, - n7 UInt8, - n8 UInt8 -) -ENGINE=MergeTree() -ORDER BY n1; -INSERT INTO morton_numbers (*) values(1, 2, 3, 4, 5, 6, 7, 8); - --- Используем имена столбцов вместо констант в качестве аргументов функции -SELECT mortonEncode(n1, n2, n3, n4, n5, n6, n7, n8) FROM morton_numbers; -``` - -```response title=Response -2155374165 -``` - - -## sqidDecode - -Добавлена в версии v24.1 - -Преобразует [sqid](https://sqids.org/) обратно в массив чисел. - -**Синтаксис** - -```sql -sqidDecode(sqid) -``` - -**Аргументы** - -* `sqid` — значение `sqid`, которое нужно декодировать. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает массив чисел, полученных из `sqid`. [`Array(UInt64)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT sqidDecode('gXHfJ1C6dN'); -``` - -```response title=Response -┌─sqidDecode('gXHfJ1C6dN')─────┐ -│ [1, 2, 3, 4, 5] │ -└──────────────────────────────┘ -``` - - -## sqidEncode - -Добавлена в: v24.1 - -Преобразует числа в [sqid](https://sqids.org/) — строковый идентификатор в стиле YouTube. - -**Синтаксис** - -```sql -sqidEncode(n1[, n2, ...]) -``` - -**Псевдонимы**: `sqid` - -**Аргументы** - -* `n1[, n2, ...]` — Произвольное количество чисел. [`UInt8/16/32/64`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает хеш-идентификатор [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT sqidEncode(1, 2, 3, 4, 5); -``` - -```response title=Response -┌─sqidEncode(1, 2, 3, 4, 5)─┐ -│ gXHfJ1C6dN │ -└───────────────────────────┘ -``` - - -## unbin - -Введена в: v21.8 - -Интерпретирует каждую пару двоичных разрядов (в аргументе) как число и преобразует её в байт, представленный этим числом. Функция выполняет операцию, противоположную `bin`. - -Для числового аргумента `unbin()` не возвращает значение, обратное `bin()`. Если вы хотите преобразовать результат в число, вы можете использовать функции `reverse` и `reinterpretAs`. - -:::note -Если `unbin` вызывается из `clickhouse-client`, двоичные строки отображаются в кодировке UTF-8. -::: - -Поддерживает двоичные цифры `0` и `1`. Количество двоичных разрядов не обязано быть кратным восьми. Если строка-аргумент содержит что-либо, кроме двоичных цифр, -результат не определён (исключение не генерируется). - -**Синтаксис** - -```sql -unbin(arg) -``` - -**Аргументы** - -* `arg` — строка, содержащая любое количество двоичных цифр. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает двоичную строку (BLOB). [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT UNBIN('001100000011000100110010'), UNBIN('0100110101111001010100110101000101001100') -``` - -```response title=Response -┌─unbin('001100000011000100110010')─┬─unbin('0100110101111001010100110101000101001100')─┐ -│ 012 │ MySQL │ -└───────────────────────────────────┴───────────────────────────────────────────────────┘ -``` - -**Преобразовать в число** - -```sql title=Query -SELECT reinterpretAsUInt64(reverse(unbin('1110'))) AS num -``` - -```response title=Response -┌─num─┐ -│ 14 │ -└─────┘ -``` - - -## unhex - -Добавлена в: v1.1 - -Выполняет операцию, противоположную [`hex`](#hex). Интерпретирует каждую пару шестнадцатеричных цифр (в аргументе) как число и преобразует -его в байт, представленный этим числом. Возвращаемое значение — бинарная строка (BLOB). - -Если нужно преобразовать результат в число, можно использовать функции `reverse` и `reinterpretAs`. - -:::note -`clickhouse-client` интерпретирует строки как UTF-8. -Это может приводить к неожиданному отображению значений, возвращаемых `hex`. -::: - -Поддерживаются как заглавные, так и строчные буквы `A-F`. -Количество шестнадцатеричных цифр не обязательно должно быть чётным. -Если оно нечётно, последняя цифра интерпретируется как наименее значимая половина байта `00-0F`. -Если строковый аргумент содержит что-либо, кроме шестнадцатеричных цифр, возвращается зависящий от реализации результат (исключение не выбрасывается). -Для числового аргумента обратная операция к `hex(N)` функцией `unhex()` не выполняется. - -**Синтаксис** - -```sql -unhex(arg) -``` - -**Аргументы** - -* `arg` — Строка с любым количеством шестнадцатеричных цифр. [`String`](/sql-reference/data-types/string) или [`FixedString`](/sql-reference/data-types/fixedstring) - -**Возвращаемое значение** - -Возвращает двоичную строку (BLOB). [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT unhex('303132'), UNHEX('4D7953514C') -``` - -```response title=Response -┌─unhex('303132')─┬─unhex('4D7953514C')─┐ -│ 012 │ MySQL │ -└─────────────────┴─────────────────────┘ -``` - -**Преобразовать в число** - -```sql title=Query -SELECT reinterpretAsUInt64(reverse(unhex('FFF'))) AS num -``` - -```response title=Response -┌──num─┐ -│ 4095 │ -└──────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/encryption-functions.md b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/encryption-functions.md index d1e3cf32d49..9ed4bcb2832 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/encryption-functions.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/encryption-functions.md @@ -3,393 +3,24 @@ description: 'Документация по функциям шифровани sidebar_label: 'Шифрование' slug: /sql-reference/functions/encryption-functions title: 'Функции шифрования' -keywords: ['шифрование', 'обычные функции', 'зашифровать', 'дешифровать'] +keywords: ['шифрование', 'обычные функции', 'шифровать', 'дешифровать'] doc_type: 'reference' --- - - # Функции шифрования -Эти функции выполняют шифрование и расшифровку данных с использованием алгоритма AES (Advanced Encryption Standard). +Эти функции реализуют шифрование и дешифрование данных с использованием алгоритма AES (Advanced Encryption Standard). Длина ключа зависит от режима шифрования: `16`, `24` и `32` байта для режимов `-128-`, `-196-` и `-256-` соответственно. -Длина вектора инициализации всегда составляет 16 байт (байты сверх этого значения игнорируются). +Длина вектора инициализации всегда составляет 16 байт (байты сверх 16 игнорируются). {/* - Внутреннее содержимое расположенных ниже тегов заменяется на этапе сборки фреймворка документации - на документацию, сгенерированную из system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. + Внутреннее содержимое тегов ниже при сборке фреймворка документации + заменяется на документацию, сгенерированную из system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. См.: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## aes_decrypt_mysql - -Добавлена в версии: v20.12 - -Расшифровывает данные, зашифрованные функцией MySQL [`AES_ENCRYPT`](https://dev.mysql.com/doc/refman/8.0/en/encryption-functions.html#function_aes-encrypt). - -Возвращает тот же открытый текст, что и [`decrypt`](#decrypt) при тех же входных данных. -Когда `key` или `iv` длиннее, чем это обычно требуется, `aes_decrypt_mysql` ведет себя так же, как MySQL `AES_DECRYPT`, то есть «сворачивает» `key` и игнорирует лишние биты `IV`. - -Поддерживает следующие режимы расшифрования: - -* aes-128-ecb, aes-192-ecb, aes-256-ecb -* aes-128-cbc, aes-192-cbc, aes-256-cbc -* aes-128-cfb128 -* aes-128-ofb, aes-192-ofb, aes-256-ofb - -**Синтаксис** - -```sql -aes_decrypt_mysql(mode, ciphertext, key[, iv]) -``` - -**Аргументы** - -* `mode` — режим расшифровки. [`String`](/sql-reference/data-types/string) -* `ciphertext` — зашифрованный текст, который необходимо расшифровать. [`String`](/sql-reference/data-types/string) -* `key` — ключ расшифровки. [`String`](/sql-reference/data-types/string) -* `iv` — необязательный параметр, вектор инициализации. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает расшифрованную строку. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Расшифровка данных из MySQL** - -```sql title=Query --- Расшифруем данные, ранее зашифрованные с помощью MySQL: -mysql> SET block_encryption_mode='aes-256-ofb'; -Query OK, 0 rows affected (0.00 sec) - -mysql> SELECT aes_encrypt('Secret', '123456789101213141516171819202122', 'iviviviviviviviv123456') as ciphertext; -+------------------------+ -| ciphertext | -+------------------------+ -| 0x24E9E4966469 | -+------------------------+ -1 row in set (0.00 sec) - -SELECT aes_decrypt_mysql('aes-256-ofb', unhex('24E9E4966469'), '123456789101213141516171819202122', 'iviviviviviviviv123456') AS plaintext -``` - -```response title=Response -┌─plaintext─┐ -│ Секрет │ -└───────────┘ -``` - - -## aes_encrypt_mysql - -Введена в версии v20.12 - -Шифрует текст тем же способом, что и функция MySQL `AES_ENCRYPT`. -Полученный шифртекст может быть расшифрован с помощью функции MySQL `AES_DECRYPT`. -Для одинаковых входных данных создаёт тот же шифртекст, что и функция `encrypt`. -Когда `key` или `iv` длиннее, чем должны быть, `aes_encrypt_mysql` ведёт себя так же, как MySQL `aes_encrypt`, то есть «сворачивает» `key` и игнорирует лишние биты `iv`. - -Поддерживаемые режимы шифрования: - -* aes-128-ecb, aes-192-ecb, aes-256-ecb -* aes-128-cbc, aes-192-cbc, aes-256-cbc -* aes-128-ofb, aes-192-ofb, aes-256-ofb - -**Синтаксис** - -```sql -aes_encrypt_mysql(mode, plaintext, key[, iv]) -``` - -**Аргументы** - -* `mode` — режим шифрования. [`String`](/sql-reference/data-types/string) -* `plaintext` — текст, который нужно зашифровать. [`String`](/sql-reference/data-types/string) -* `key` — ключ шифрования. Если ключ длиннее, чем требуется `mode`, выполняется специфичная для MySQL свёртка ключа. [`String`](/sql-reference/data-types/string) -* `iv` — необязательный параметр. Вектор инициализации. Учитываются только первые 16 байт. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Бинарная строка шифртекста. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Сравнение одинаковых входных данных** - -```sql title=Query --- При одинаковых входных данных функции encrypt и aes_encrypt_mysql возвращают один и тот же зашифрованный текст: -SELECT encrypt('aes-256-ofb', 'Secret', '12345678910121314151617181920212', 'iviviviviviviviv') = aes_encrypt_mysql('aes-256-ofb', 'Secret', '12345678910121314151617181920212', 'iviviviviviviviv') AS ciphertexts_equal; -``` - -```response title=Response -┌─ciphertexts_equal─┐ -│ 1 │ -└───────────────────┘ -``` - -**Ошибка шифрования при длинном ключе** - -```sql title=Query --- Но encrypt завершается с ошибкой, если ключ или iv длиннее ожидаемого: -SELECT encrypt('aes-256-ofb', 'Secret', '123456789101213141516171819202122', 'iviviviviviviviv123'); -``` - -```response title=Response -Получено исключение от сервера (версия 22.6.1): -Код: 36. DB::Exception: получено от localhost:9000. DB::Exception: Недопустимый размер ключа: 33, ожидалось 32: при обработке encrypt('aes-256-ofb', 'Secret', '123456789101213141516171819202122', 'iviviviviviviviv123'). -``` - -**Совместимость с MySQL** - -```sql title=Query --- aes_encrypt_mysql выдаёт результат, совместимый с MySQL: -SELECT hex(aes_encrypt_mysql('aes-256-ofb', 'Secret', '123456789101213141516171819202122', 'iviviviviviviviv123')) AS ciphertext; -``` - -```response title=Response -┌─ciphertext───┐ -│ 24E9E4966469 │ -└──────────────┘ -``` - -**Более длинный IV даёт тот же результат** - -```sql title=Query --- Обратите внимание, что использование даже более длинного IV дает тот же результат -SELECT hex(aes_encrypt_mysql('aes-256-ofb', 'Secret', '123456789101213141516171819202122', 'iviviviviviviviv123456')) AS ciphertext -``` - -```response title=Response -┌─ciphertext───┐ -│ 24E9E4966469 │ -└──────────────┘ -``` - - -## decrypt - -Появилась в версии: v20.12 - -Эта функция расшифровывает двоичную строку, зашифрованную с помощью AES, в одном из следующих режимов: - -* aes-128-ecb, aes-192-ecb, aes-256-ecb -* aes-128-cbc, aes-192-cbc, aes-256-cbc -* aes-128-ofb, aes-192-ofb, aes-256-ofb -* aes-128-gcm, aes-192-gcm, aes-256-gcm -* aes-128-ctr, aes-192-ctr, aes-256-ctr -* aes-128-cfb, aes-128-cfb1, aes-128-cfb8 - -**Синтаксис** - -```sql -decrypt(mode, ciphertext, key[, iv, aad]) -``` - -**Аргументы** - -* `mode` — Режим расшифрования. [`String`](/sql-reference/data-types/string) -* `ciphertext` — Зашифрованный текст, который нужно расшифровать. [`String`](/sql-reference/data-types/string) -* `key` — Ключ расшифрования. [`String`](/sql-reference/data-types/string) -* `iv` — Вектор инициализации. Обязателен для режимов `-gcm`, для остальных не является обязательным. [`String`](/sql-reference/data-types/string) -* `aad` — Дополнительные аутентифицированные данные. Расшифрование не будет выполнено, если это значение некорректно. Работает только в режимах `-gcm`, для остальных вызывает исключение. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает расшифрованный открытый текст. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Корректная расшифровка зашифрованных данных** - -```sql title=Query --- Повторное использование таблицы из примера функции encrypt -SELECT comment, hex(secret) FROM encryption_test; -``` - -```response title=Response -┌─comment──────────────┬─hex(secret)──────────────────────────────────┐ -│ aes-256-gcm │ A8A3CCBC6426CFEEB60E4EAE03D3E94204C1B09E0254 │ -│ aes-256-gcm с AAD │ A8A3CCBC6426D9A1017A0A932322F1852260A4AD6837 │ -└──────────────────────┴──────────────────────────────────────────────┘ -┌─comment──────────────────────────┬─hex(secret)──────────────────────┐ -│ aes-256-ofb без IV │ B4972BDC4459 │ -│ aes-256-ofb без IV, другой ключ │ 2FF57C092DC9 │ -│ aes-256-ofb с IV │ 5E6CB398F653 │ -│ aes-256-cbc без IV │ 1BC0629A92450D9E73A00E7D02CF4142 │ -└──────────────────────────────────┴──────────────────────────────────┘ -``` - -**Некорректная расшифровка зашифрованных данных** - -```sql title=Query -SELECT comment, decrypt('aes-256-cfb128', secret, '12345678910121314151617181920212') AS plaintext FROM encryption_test -``` - -```response title=Response --- Обратите внимание, что корректно расшифрована только часть данных, а остальное представляет собой бессмысленный набор символов, так как при шифровании использовались другие значения `mode`, `key` или `iv`. -┌─comment──────────────┬─plaintext──┐ -│ aes-256-gcm │ OQ�E - �t�7T�\���\� │ -│ aes-256-gcm with AAD │ OQ�E - �\��si����;�o�� │ -└──────────────────────┴────────────┘ -┌─comment──────────────────────────┬─plaintext─┐ -│ aes-256-ofb no IV │ Secret │ -│ aes-256-ofb no IV, different key │ �4� - � │ -│ aes-256-ofb with IV │ ���6�~ │ -│aes-256-cbc no IV │ �2*4�h3c�4w��@ -└──────────────────────────────────┴───────────┘ -``` - - -## encrypt - -Появилась в версии: v20.12 - -Шифрует открытый текст в шифртекст с использованием AES в одном из следующих режимов: - -* aes-128-ecb, aes-192-ecb, aes-256-ecb -* aes-128-cbc, aes-192-cbc, aes-256-cbc -* aes-128-ofb, aes-192-ofb, aes-256-ofb -* aes-128-gcm, aes-192-gcm, aes-256-gcm -* aes-128-ctr, aes-192-ctr, aes-256-ctr -* aes-128-cfb, aes-128-cfb1, aes-128-cfb8 - -**Синтаксис** - -```sql -encrypt(mode, plaintext, key[, iv, aad]) -``` - -**Аргументы** - -* `mode` — режим шифрования. [`String`](/sql-reference/data-types/string) -* `plaintext` — текст, который нужно зашифровать. [`String`](/sql-reference/data-types/string) -* `key` — ключ шифрования. [`String`](/sql-reference/data-types/string) -* `iv` — вектор инициализации. Обязателен для режимов `-gcm`, для остальных — необязателен. [`String`](/sql-reference/data-types/string) -* `aad` — дополнительные аутентифицируемые данные. Они не шифруются, но влияют на расшифровку. Работает только в режимах `-gcm`, для остальных генерируется исключение. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает двоичную строку с зашифрованным текстом (ciphertext). [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример шифрования** - -```sql title=Query -CREATE TABLE encryption_test -( - `comment` String, - `secret` String -) -ENGINE = MergeTree; - -INSERT INTO encryption_test VALUES -('aes-256-ofb без IV', encrypt('aes-256-ofb', 'Secret', '12345678910121314151617181920212')), -('aes-256-ofb без IV, другой ключ', encrypt('aes-256-ofb', 'Secret', 'keykeykeykeykeykeykeykeykeykeyke')), -('aes-256-ofb с IV', encrypt('aes-256-ofb', 'Secret', '12345678910121314151617181920212', 'iviviviviviviviv')), -('aes-256-cbc без IV', encrypt('aes-256-cbc', 'Secret', '12345678910121314151617181920212')); - -SELECT comment, hex(secret) FROM encryption_test; -``` - -```response title=Response -┌─comment──────────────────────────┬─hex(secret)──────────────────────┐ -│ aes-256-ofb без вектора инициализации │ B4972BDC4459 │ -│ aes-256-ofb без вектора инициализации, другой ключ │ 2FF57C092DC9 │ -│ aes-256-ofb с вектором инициализации │ 5E6CB398F653 │ -│ aes-256-cbc без вектора инициализации │ 1BC0629A92450D9E73A00E7D02CF4142 │ -└──────────────────────────────────┴──────────────────────────────────┘ -``` - -**Пример для режима GCM** - -```sql title=Query -INSERT INTO encryption_test VALUES -('aes-256-gcm', encrypt('aes-256-gcm', 'Secret', '12345678910121314151617181920212', 'iviviviviviviviv')), - -('aes-256-gcm с AAD', encrypt('aes-256-gcm', 'Secret', '12345678910121314151617181920212', 'iviviviviviviviv', 'aad')); - -SELECT comment, hex(secret) FROM encryption_test WHERE comment LIKE '%gcm%'; -``` - -```response title=Response -┌─comment──────────────┬─hex(secret)──────────────────────────────────┐ -│ aes-256-gcm │ A8A3CCBC6426CFEEB60E4EAE03D3E94204C1B09E0254 │ -│ aes-256-gcm с AAD │ A8A3CCBC6426D9A1017A0A932322F1852260A4AD6837 │ -└──────────────────────┴──────────────────────────────────────────────┘ -``` - - -## tryDecrypt - -Добавлена в: v22.10 - -Похожа на функцию `decrypt`, но возвращает `NULL`, если расшифрование завершается ошибкой при использовании неверного ключа. - -**Синтаксис** - -```sql -tryDecrypt(режим, шифротекст, ключ[, iv, aad]) -``` - -**Аргументы** - -* `mode` — режим расшифрования. [`String`](/sql-reference/data-types/string) -* `ciphertext` — зашифрованный текст, который нужно расшифровать. [`String`](/sql-reference/data-types/string) -* `key` — ключ расшифрования. [`String`](/sql-reference/data-types/string) -* `iv` — необязательный параметр. Вектор инициализации. Обязателен для режимов `-gcm`, необязателен для других режимов. [`String`](/sql-reference/data-types/string) -* `aad` — необязательный параметр. Дополнительные аутентифицированные данные. Расшифровка не произойдёт, если это значение неверно. Работает только в режимах `-gcm`, для других режимов выбрасывает исключение. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает расшифрованную строку или `NULL`, если расшифровка не удалась. [`Nullable(String)`](/sql-reference/data-types/nullable) - -**Примеры** - -**Создание таблицы и вставка данных** - -```sql title=Query --- Создадим таблицу, где user_id — уникальный идентификатор пользователя, encrypted — зашифрованное строковое поле, iv — вектор инициализации для расшифровки/шифрования. --- Предполагается, что пользователи знают свой идентификатор и ключ для расшифровки зашифрованного поля: -CREATE TABLE decrypt_null -( - dt DateTime, - user_id UInt32, - encrypted String, - iv String -) -ENGINE = MergeTree; - --- Вставим данные: -INSERT INTO decrypt_null VALUES -('2022-08-02 00:00:00', 1, encrypt('aes-256-gcm', 'value1', 'keykeykeykeykeykeykeykeykeykey01', 'iv1'), 'iv1'), -('2022-09-02 00:00:00', 2, encrypt('aes-256-gcm', 'value2', 'keykeykeykeykeykeykeykeykeykey02', 'iv2'), 'iv2'), -('2022-09-02 00:00:01', 3, encrypt('aes-256-gcm', 'value3', 'keykeykeykeykeykeykeykeykeykey03', 'iv3'), 'iv3'); - --- Попробуем расшифровать с помощью одного ключа: -SELECT - dt, - user_id, - tryDecrypt('aes-256-gcm', encrypted, 'keykeykeykeykeykeykeykeykeykey02', iv) AS value -FROM decrypt_null -ORDER BY user_id ASC -``` - -```response title=Response -┌──────────────────dt─┬─user_id─┬─value──┐ -│ 2022-08-02 00:00:00 │ 1 │ ᴺᵁᴸᴸ │ -│ 2022-09-02 00:00:00 │ 2 │ value2 │ -│ 2022-09-02 00:00:01 │ 3 │ ᴺᵁᴸᴸ │ -└─────────────────────┴─────────┴────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/ext-dict-functions.md b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/ext-dict-functions.md index af39a8f2589..0b9bc36222f 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/ext-dict-functions.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/ext-dict-functions.md @@ -1,26 +1,22 @@ --- -description: 'Документация по функциям работы со словарями' +description: 'Документация по функциям для работы со словарями' sidebar_label: 'Словари' slug: /sql-reference/functions/ext-dict-functions title: 'Функции для работы со словарями' doc_type: 'reference' --- - - # Функции для работы со словарями :::note -Для словарей, созданных с помощью [DDL-запросов](../../sql-reference/statements/create/dictionary.md), параметр `dict_name` должен быть указан полностью, в формате `.`. В противном случае будет использована текущая база данных. +Для словарей, создаваемых с помощью [DDL‑запросов](../../sql-reference/statements/create/dictionary.md), параметр `dict_name` должен быть полностью указан в формате `.`. В противном случае используется текущая база данных. ::: -Сведения о подключении и настройке словарей см. в разделе [Словари](../../sql-reference/dictionaries/index.md). - - +Информацию о подключении и настройке словарей см. в разделе [Словари](../../sql-reference/dictionaries/index.md). ## dictGet, dictGetOrDefault, dictGetOrNull -Возвращают значения из словаря. +Извлекает значения из словаря. ```sql dictGet('dict_name', attr_names, id_expr) @@ -30,24 +26,24 @@ dictGetOrNull('dict_name', attr_name, id_expr) **Аргументы** -* `dict_name` — Имя словаря. [Строковый литерал](/sql-reference/syntax#string). -* `attr_names` — Имя столбца словаря, [строковый литерал](/sql-reference/syntax#string), или кортеж имён столбцов, [Tuple](/sql-reference/data-types/tuple)([строковый литерал](/sql-reference/syntax#string). -* `id_expr` — Значение ключа. [Выражение](/sql-reference/syntax#expressions), возвращающее значение типа ключа словаря или значение типа [Tuple](../data-types/tuple.md) в зависимости от конфигурации словаря. -* `default_value_expr` — Значения, возвращаемые, если словарь не содержит строки с ключом `id_expr`. [Выражение](/sql-reference/syntax#expressions) или [Tuple](../data-types/tuple.md)([выражение](/sql-reference/syntax#expressions)), возвращающее значение (или значения) в типах данных, настроенных для атрибута `attr_names`. +* `dict_name` — имя словаря. [Строковый литерал](/sql-reference/syntax#string). +* `attr_names` — имя столбца словаря, [строковый литерал](/sql-reference/syntax#string), или кортеж имён столбцов — [Tuple](/sql-reference/data-types/tuple)([строковый литерал](/sql-reference/syntax#string)). +* `id_expr` — значение ключа. [Выражение](/sql-reference/syntax#expressions), возвращающее значение типа ключа словаря или значение типа [Tuple](../data-types/tuple.md) в зависимости от конфигурации словаря. +* `default_value_expr` — значения, возвращаемые, если в словаре нет строки с ключом `id_expr`. [Expression](/sql-reference/syntax#expressions) или [Tuple](../data-types/tuple.md)([Expression](/sql-reference/syntax#expressions)), возвращающее значение (или значения) в типах данных, настроенных для атрибута `attr_names`. **Возвращаемое значение** -* Если ClickHouse успешно интерпретирует значение атрибута как [тип данных атрибута](/sql-reference/dictionaries#dictionary-key-and-fields), функции возвращают значение атрибута словаря, которое соответствует `id_expr`. +* Если ClickHouse успешно приводит атрибут к [типу данных атрибута](/sql-reference/dictionaries#dictionary-key-and-fields), функции возвращают значение атрибута словаря, соответствующее `id_expr`. -* Если в словаре нет ключа, соответствующего `id_expr`, то: +* Если в словаре отсутствует ключ, соответствующий `id_expr`, то: * `dictGet` возвращает содержимое элемента ``, указанного для атрибута в конфигурации словаря. * `dictGetOrDefault` возвращает значение, переданное в параметре `default_value_expr`. - * `dictGetOrNull` возвращает `NULL`, если ключ не был найден в словаре. + * `dictGetOrNull` возвращает `NULL`, если ключ не найден в словаре. -ClickHouse выбрасывает исключение, если не может интерпретировать значение атрибута или если значение не соответствует типу данных атрибута. +ClickHouse выдает исключение, если не может распарсить значение атрибута или значение не соответствует типу данных атрибута. -**Пример для словаря с простым ключом** +**Пример словаря с простым ключом** Создайте текстовый файл `ext-dict-test.csv` со следующим содержимым: @@ -106,7 +102,7 @@ LIMIT 3; └─────┴────────┘ ``` -**Пример словаря с составным ключом** +**Пример словаря со сложным ключом** Создайте текстовый файл `ext-dict-mult.csv` со следующим содержимым: @@ -120,7 +116,6 @@ LIMIT 3; Настройте словарь: - ```xml @@ -232,14 +227,14 @@ FROM system.numbers LIMIT 5 FORMAT TabSeparated; (4,'2019-05-20') 0 \N \N (NULL,NULL) ``` -**Смотрите также** +**См. также** -* [Справочники](../../sql-reference/dictionaries/index.md) +* [Словари](../../sql-reference/dictionaries/index.md) ## dictHas -Проверяет, есть ли ключ в словаре. +Проверяет, присутствует ли ключ в словаре. ```sql dictHas('dict_name', id_expr) @@ -247,8 +242,8 @@ dictHas('dict_name', id_expr) **Аргументы** -* `dict_name` — Имя словаря. [Строковый литерал](/sql-reference/syntax#string). -* `id_expr` — Значение ключа. [Выражение](/sql-reference/syntax#expressions), возвращающее значение типа ключа словаря или значение типа [Tuple](../data-types/tuple.md) в зависимости от конфигурации словаря. +* `dict_name` — имя словаря. [Строковый литерал](/sql-reference/syntax#string). +* `id_expr` — значение ключа. [Выражение](/sql-reference/syntax#expressions), возвращающее значение типа ключа словаря или значение типа [Tuple](../data-types/tuple.md) в зависимости от конфигурации словаря. **Возвращаемое значение** @@ -258,27 +253,27 @@ dictHas('dict_name', id_expr) ## dictGetHierarchy -Создаёт массив со всеми родительскими элементами указанного ключа в [иерархическом словаре](../../sql-reference/dictionaries/index.md#hierarchical-dictionaries). +Создаёт массив, содержащий всех родителей заданного ключа в [иерархическом словаре](../../sql-reference/dictionaries/index.md#hierarchical-dictionaries). **Синтаксис** ```sql -dictGetHierarchy('имя_словаря', ключ) +dictGetHierarchy('dict_name', key) ``` **Аргументы** -* `dict_name` — имя словаря. [Строковый литерал](/sql-reference/syntax#string). -* `key` — значение ключа. [Выражение](/sql-reference/syntax#expressions), возвращающее значение типа [UInt64](../data-types/int-uint.md). +* `dict_name` — Имя словаря. [Строковый литерал](/sql-reference/syntax#string). +* `key` — Значение ключа. [Выражение](/sql-reference/syntax#expressions), возвращающее значение типа [UInt64](../data-types/int-uint.md). **Возвращаемое значение** -* Родители ключа. [Array(UInt64)](../data-types/array.md). +* Родительские элементы для ключа. [Array(UInt64)](../data-types/array.md). ## dictIsIn -Проверяет наличие предка ключа по всей иерархии словаря. +Проверяет наличие предка ключа во всей иерархической цепочке словаря. ```sql dictIsIn('dict_name', child_id_expr, ancestor_id_expr) @@ -287,18 +282,18 @@ dictIsIn('dict_name', child_id_expr, ancestor_id_expr) **Аргументы** * `dict_name` — имя словаря. [Строковый литерал](/sql-reference/syntax#string). -* `child_id_expr` — ключ, подлежащий проверке. [Выражение](/sql-reference/syntax#expressions), возвращающее значение типа [UInt64](../data-types/int-uint.md). +* `child_id_expr` — ключ, который требуется проверить. [Выражение](/sql-reference/syntax#expressions), возвращающее значение типа [UInt64](../data-types/int-uint.md). * `ancestor_id_expr` — предполагаемый предок ключа `child_id_expr`. [Выражение](/sql-reference/syntax#expressions), возвращающее значение типа [UInt64](../data-types/int-uint.md). **Возвращаемое значение** * 0, если `child_id_expr` не является потомком `ancestor_id_expr`. [UInt8](../data-types/int-uint.md). -* 1, если `child_id_expr` является потомком `ancestor_id_expr` или если `child_id_expr` совпадает с `ancestor_id_expr`. [UInt8](../data-types/int-uint.md). +* 1, если `child_id_expr` является потомком `ancestor_id_expr` или если `child_id_expr` равен `ancestor_id_expr`. [UInt8](../data-types/int-uint.md). ## dictGetChildren -Возвращает потомков первого уровня в виде массива индексов. Является обратным преобразованием для [dictGetHierarchy](#dictgethierarchy). +Возвращает дочерние элементы первого уровня в виде массива индексов. Является обратной операцией к [dictGetHierarchy](#dictgethierarchy). **Синтаксис** @@ -308,12 +303,12 @@ dictGetChildren(имя_словаря, ключ) **Аргументы** -* `dict_name` — Имя словаря. [Строковый литерал](/sql-reference/syntax#string). -* `key` — Значение ключа. [Выражение](/sql-reference/syntax#expressions), возвращающее значение типа [UInt64](../data-types/int-uint.md). +* `dict_name` — имя словаря. [Строковый литерал](/sql-reference/syntax#string). +* `key` — значение ключа. [Выражение](/sql-reference/syntax#expressions), возвращающее значение типа [UInt64](../data-types/int-uint.md). **Возвращаемые значения** -* Потомки ключа первого уровня. [Array](../data-types/array.md)([UInt64](../data-types/int-uint.md)). +* Потомки первого уровня для ключа. [Array](../data-types/array.md)([UInt64](../data-types/int-uint.md)). **Пример** @@ -358,11 +353,11 @@ dictGetDescendants(dict_name, key, level) * `dict_name` — имя словаря. [Строковый литерал](/sql-reference/syntax#string). * `key` — значение ключа. [Выражение](/sql-reference/syntax#expressions), возвращающее значение типа [UInt64](../data-types/int-uint.md). -* `level` — уровень иерархии. Если `level = 0`, возвращает всех потомков до конца иерархии. [UInt8](../data-types/int-uint.md). +* `level` — уровень иерархии. Если `level = 0`, возвращает всех потомков до последнего уровня. [UInt8](../data-types/int-uint.md). **Возвращаемые значения** -* Потомки для заданного ключа. [Array](../data-types/array.md)([UInt64](../data-types/int-uint.md)). +* Потомки указанного ключа. [Array](../data-types/array.md)([UInt64](../data-types/int-uint.md)). **Пример** @@ -377,7 +372,7 @@ dictGetDescendants(dict_name, key, level) └────┴───────────┘ ``` -Все дочерние элементы: +Все потомки: ```sql SELECT dictGetDescendants('hierarchy_flat_dictionary', number) FROM system.numbers LIMIT 4; @@ -410,9 +405,9 @@ SELECT dictGetDescendants('hierarchy_flat_dictionary', number, 1) FROM system.nu ## dictGetAll -Извлекает значения атрибутов всех узлов, совпавших с каждым ключом в [словаре на основе дерева регулярных выражений](../../sql-reference/dictionaries/index.md#regexp-tree-dictionary). +Извлекает значения атрибутов всех узлов, соответствующих каждому ключу в [словаре на основе дерева регулярных выражений](../../sql-reference/dictionaries/index.md#regexp-tree-dictionary). -За исключением того, что возвращает значения типа `Array(T)` вместо `T`, эта функция ведет себя аналогично [`dictGet`](#dictget-dictgetordefault-dictgetornull). +Помимо возврата значений типа `Array(T)` вместо `T`, эта функция ведёт себя аналогично [`dictGet`](#dictget-dictgetordefault-dictgetornull). **Синтаксис** @@ -422,22 +417,22 @@ dictGetAll('dict_name', attr_names, id_expr[, limit]) **Аргументы** -* `dict_name` — Имя словаря. [Строковый литерал](/sql-reference/syntax#string). -* `attr_names` — Имя столбца словаря, [Строковый литерал](/sql-reference/syntax#string), или кортеж имён столбцов, [Tuple](/sql-reference/data-types/tuple)([Строковый литерал](/sql-reference/syntax#string)). -* `id_expr` — Значение ключа. [Выражение](/sql-reference/syntax#expressions), возвращающее массив значений типа ключа словаря или значение типа [Tuple](/sql-reference/data-types/tuple) в зависимости от конфигурации словаря. -* `limit` - Максимальная длина для каждого возвращаемого массива значений. При усечении дочерние узлы имеют приоритет над родительскими, а в остальном соблюдается определённый порядок списка для словаря-дерева regexp. Если параметр не задан, длина массива не ограничена. +* `dict_name` — имя словаря. [Строковый литерал](/sql-reference/syntax#string). +* `attr_names` — имя столбца словаря — [строковый литерал](/sql-reference/syntax#string) — или кортеж имён столбцов — [Tuple](/sql-reference/data-types/tuple)([строковый литерал](/sql-reference/syntax#string)). +* `id_expr` — значение ключа. [Выражение](/sql-reference/syntax#expressions), возвращающее массив значений типа ключа словаря или значение типа [Tuple](/sql-reference/data-types/tuple) в зависимости от конфигурации словаря. +* `limit` — максимальная длина для каждого возвращаемого массива значений. При усечении дочерние узлы имеют приоритет над родительскими, а в остальных случаях соблюдается определённый порядок списка для словаря regexp tree. Если параметр не указан, длина массива не ограничена. **Возвращаемое значение** -* Если ClickHouse успешно разбирает атрибут в тип данных атрибута, определённый в словаре, возвращается массив значений атрибутов словаря, которые соответствуют `id_expr` для каждого атрибута, указанного в `attr_names`. +* Если ClickHouse успешно интерпретирует значение атрибута в его тип данных, определённый в словаре, возвращается массив значений атрибутов словаря, которые соответствуют `id_expr` для каждого атрибута, указанного в `attr_names`. * Если в словаре нет ключа, соответствующего `id_expr`, возвращается пустой массив. -ClickHouse генерирует исключение, если не может разобрать значение атрибута или значение не соответствует типу данных атрибута. +ClickHouse выбрасывает исключение, если не может интерпретировать значение атрибута или значение не соответствует типу данных атрибута. **Пример** -Рассмотрим следующий словарь-дерево regexp: +Рассмотрим следующий словарь regexp tree: ```sql CREATE DICTIONARY regexp_dict @@ -451,7 +446,6 @@ LAYOUT(regexp_tree) ... ``` - ```yaml # /var/lib/clickhouse/user_files/regexp_tree.yaml - regexp: 'foo' @@ -474,7 +468,7 @@ SELECT dictGetAll('regexp_dict', 'tag', 'foobarbaz'); └───────────────────────────────────────────────┘ ``` -Получите не более 2 совпадающих значений: +Получите до двух совпадающих значений: ```sql SELECT dictGetAll('regexp_dict', 'tag', 'foobarbaz', 2); @@ -489,7 +483,7 @@ SELECT dictGetAll('regexp_dict', 'tag', 'foobarbaz', 2); ## dictGetKeys -Возвращает ключ(и) словаря, у которого атрибут равен указанному значению. Это обратная функция к [`dictGet`](#dictget-dictgetordefault-dictgetornull) для одного атрибута. +Возвращает ключ(и) словаря, значение указанного атрибута которых равно заданному значению. Является обратной функцией к [`dictGet`](#dictget-dictgetordefault-dictgetornull) по одному атрибуту. **Синтаксис** @@ -500,18 +494,18 @@ dictGetKeys('dict_name', 'attr_name', value_expr); **Аргументы** * `dict_name` — имя словаря. [Строковый литерал](/sql-reference/syntax#string). -* `attr_name` — имя столбца-атрибута словаря. [Строковый литерал](/sql-reference/syntax#string). -* `value_expr` — значение, которое сравнивается с атрибутом. [Выражение](/sql-reference/syntax#expressions), которое может быть преобразовано к типу данных атрибута. +* `attr_name` — имя столбца атрибута словаря. [Строковый литерал](/sql-reference/syntax#string). +* `value_expr` — значение для сравнения с атрибутом. [Выражение](/sql-reference/syntax#expressions), которое может быть приведено к типу данных атрибута. **Возвращаемое значение** -* Для словарей с одним ключом: массив ключей, атрибут которых равен `value_expr`. [Array(T)](../data-types/array.md), где `T` — тип данных ключа словаря. +* Для словарей с простым ключом: массив ключей, для которых значение атрибута равно `value_expr`. [Array(T)](../data-types/array.md), где `T` — тип данных ключа словаря. -* Для словарей с составным ключом: массив кортежей ключей, атрибут которых равен `value_expr`. [Array](../data-types/array.md)([Tuple(T1, T2, ...)](../data-types/tuple.md)), где каждый `Tuple` содержит столбцы ключа словаря в порядке их следования. +* Для словарей с составным ключом: массив кортежей ключей, для которых значение атрибута равно `value_expr`. [Array](../data-types/array.md)([Tuple(T1, T2, ...)](../data-types/tuple.md)), где каждый `Tuple` содержит столбцы ключа словаря в заданном порядке. * Если в словаре нет атрибута, соответствующего `value_expr`, возвращается пустой массив. -ClickHouse генерирует исключение, если не удаётся разобрать значение атрибута или если значение не может быть приведено к типу данных атрибута. +ClickHouse генерирует исключение, если не удаётся интерпретировать значение атрибута или привести его к типу данных атрибута. **Пример** @@ -519,10 +513,10 @@ ClickHouse генерирует исключение, если не удаётс ```txt ┌─id─┬─level──┐ - │ 1 │ низкий │ - │ 2 │ высокий │ - │ 3 │ средний │ - │ 4 │ высокий │ + │ 1 │ low │ + │ 2 │ high │ + │ 3 │ medium │ + │ 4 │ high │ └────┴────────┘ ``` @@ -539,15 +533,15 @@ SELECT dictGetKeys('levels', 'level', 'high') AS ids; ``` :::note -Используйте настройку `max_reverse_dictionary_lookup_cache_size_bytes`, чтобы ограничить размер кэша обратного поиска на один запрос, который используется `dictGetKeys`. Кэш сохраняет сериализованные кортежи ключей для каждого значения атрибута, чтобы избежать повторного сканирования словаря в пределах одного и того же запроса. Кэш не сохраняется между запросами. Когда достигается лимит, элементы вытесняются по алгоритму LRU. Это наиболее эффективно при работе с большими словарями, когда входные данные имеют низкую кардинальность и рабочий набор помещается в кэш. Установите `0`, чтобы отключить кэширование. +Используйте параметр `max_reverse_dictionary_lookup_cache_size_bytes`, чтобы ограничить размер кеша обратного поиска для каждого запроса, используемого `dictGetKeys`. Кеш хранит сериализованные кортежи ключей для каждого значения атрибута, чтобы избежать повторного сканирования словаря в рамках одного и того же запроса. Кеш не сохраняется между запросами. Когда лимит достигается, записи вытесняются по принципу LRU. Это наиболее эффективно для больших словарей, когда входные данные имеют низкую кардинальность и рабочий набор помещается в кеш. Установите значение `0`, чтобы отключить кеширование. -Кроме того, если уникальные значения столбца `attr_name` умещаются в кэш, то в большинстве случаев выполнение функции должно быть линейным от числа входных строк плюс небольшое количество сканирований словаря. +Кроме того, если уникальные значения столбца `attr_name` помещаются в кеш, то в большинстве случаев выполнение функции должно быть линейным по количеству входных строк плюс небольшое количество сканирований словаря. ::: ## Другие функции -ClickHouse поддерживает специализированные функции, которые независимо от конфигурации словаря преобразуют значения его атрибутов в конкретный тип данных. +ClickHouse поддерживает специализированные функции, которые преобразуют значения атрибутов словаря в определённый тип данных независимо от конфигурации словаря. Функции: @@ -560,7 +554,7 @@ ClickHouse поддерживает специализированные фун * `dictGetString` * `dictGetIPv4`, `dictGetIPv6` -Все эти функции имеют вариант `OrDefault`. Например, `dictGetDateOrDefault`. +Все эти функции имеют модификацию `OrDefault`. Например, `dictGetDateOrDefault`. Синтаксис: @@ -574,68 +568,67 @@ dictGet[Type]OrDefault('dict_name', 'attr_name', id_expr, default_value_expr) * `dict_name` — Имя словаря. [Строковый литерал](/sql-reference/syntax#string). * `attr_name` — Имя столбца словаря. [Строковый литерал](/sql-reference/syntax#string). * `id_expr` — Значение ключа. [Выражение](/sql-reference/syntax#expressions), возвращающее значение типа [UInt64](../data-types/int-uint.md) или [Tuple](../data-types/tuple.md) в зависимости от конфигурации словаря. -* `default_value_expr` — Значение, возвращаемое, если в словаре нет строки с ключом `id_expr`. [Выражение](/sql-reference/syntax#expressions), возвращающее значение типа данных, настроенного для атрибута `attr_name`. +* `default_value_expr` — Значение, возвращаемое, если в словаре нет строки с ключом `id_expr`. [Выражение](/sql-reference/syntax#expressions), возвращающее значение в тип данных, настроенный для атрибута `attr_name`. **Возвращаемое значение** -* Если ClickHouse успешно преобразует значение атрибута к [типу данных атрибута](/sql-reference/dictionaries#dictionary-key-and-fields), функции возвращают значение атрибута словаря, которое соответствует `id_expr`. +* Если ClickHouse успешно разбирает атрибут в [тип данных атрибута](/sql-reference/dictionaries#dictionary-key-and-fields), функции возвращают значение атрибута словаря, соответствующее `id_expr`. -* Если запрошенного `id_expr` нет в словаре, то: +* Если запрошенный `id_expr` отсутствует в словаре, то: * `dictGet[Type]` возвращает содержимое элемента ``, указанного для атрибута в конфигурации словаря. * `dictGet[Type]OrDefault` возвращает значение, переданное в параметре `default_value_expr`. -ClickHouse выбрасывает исключение, если не может разобрать значение атрибута или если значение не соответствует типу данных атрибута. +ClickHouse генерирует исключение, если не может разобрать значение атрибута или если значение не соответствует типу данных атрибута. ## Примеры словарей {#example-dictionary} -Примеры в этом разделе используют следующие словари. Вы можете создать их в ClickHouse -для запуска примеров функций, описанных ниже. +Примеры в этом разделе используют следующие словари. Вы можете создать их в ClickHouse, +чтобы выполнить примеры для функций, описанных ниже.
-Пример словаря для функций dictGet\ и dictGet\OrDefault +Пример словаря для функций dictGet<T> и dictGet<T>OrDefault ```sql --- Создание таблицы со всеми необходимыми типами данных +-- Создать таблицу со всеми необходимыми типами данных CREATE TABLE all_types_test ( `id` UInt32, - + -- Тип String `String_value` String, - + -- Беззнаковые целочисленные типы `UInt8_value` UInt8, `UInt16_value` UInt16, `UInt32_value` UInt32, `UInt64_value` UInt64, - + -- Знаковые целочисленные типы `Int8_value` Int8, `Int16_value` Int16, `Int32_value` Int32, `Int64_value` Int64, - + -- Типы с плавающей точкой `Float32_value` Float32, `Float64_value` Float64, - - -- Типы даты и времени + + -- Типы даты/времени `Date_value` Date, `DateTime_value` DateTime, - + -- Сетевые типы `IPv4_value` IPv4, `IPv6_value` IPv6, - + -- Тип UUID `UUID_value` UUID -) ENGINE = MergeTree() +) ENGINE = MergeTree() ORDER BY id; ``` - ```sql --- Вставка тестовых данных +-- Вставить тестовые данные INSERT INTO all_types_test VALUES ( 1, -- id @@ -659,7 +652,7 @@ INSERT INTO all_types_test VALUES ``` ```sql --- Создание словаря +-- Создать словарь CREATE DICTIONARY all_types_dict ( id UInt32, @@ -685,7 +678,6 @@ SOURCE(CLICKHOUSE(HOST 'localhost' PORT 9000 USER 'default' TABLE 'all_types_tes LAYOUT(HASHED()) LIFETIME(MIN 300 MAX 600); ``` -
@@ -707,7 +699,7 @@ ENGINE = Memory; Вставьте данные в таблицу: ```sql -INSERT INTO regexp_os +INSERT INTO regexp_os SELECT * FROM s3( 'https://datasets-documentation.s3.eu-west-3.amazonaws.com/' || @@ -732,2053 +724,148 @@ SOURCE(CLICKHOUSE(TABLE 'regexp_os')) LIFETIME(MIN 0 MAX 0) LAYOUT(REGEXP_TREE); ``` -
-Пример словаря с диапазонным ключом - -Создайте входную таблицу: - -```sql -CREATE TABLE range_key_dictionary_source_table -( - key UInt64, - start_date Date, - end_date Date, - value String, - value_nullable Nullable(String) -) -ENGINE = TinyLog(); -``` - -Вставьте данные во входную таблицу: - - -```sql -INSERT INTO range_key_dictionary_source_table VALUES(1, toDate('2019-05-20'), toDate('2019-05-20'), 'First', 'First'); -INSERT INTO range_key_dictionary_source_table VALUES(2, toDate('2019-05-20'), toDate('2019-05-20'), 'Second', NULL); -INSERT INTO range_key_dictionary_source_table VALUES(3, toDate('2019-05-20'), toDate('2019-05-20'), 'Third', 'Third'); -``` - -Создайте словарь: - -```sql -CREATE DICTIONARY range_key_dictionary -( - key UInt64, - start_date Date, - end_date Date, - value String, - value_nullable Nullable(String) -) -PRIMARY KEY key -SOURCE(CLICKHOUSE(HOST 'localhost' PORT tcpPort() TABLE 'range_key_dictionary_source_table')) -LIFETIME(MIN 1 MAX 1000) -LAYOUT(RANGE_HASHED()) -RANGE(MIN start_date MAX end_date); -``` - + Пример словаря с диапазонным ключом + + Создайте входную таблицу: + + ```sql + CREATE TABLE range_key_dictionary_source_table + ( + key UInt64, + start_date Date, + end_date Date, + value String, + value_nullable Nullable(String) + ) + ENGINE = TinyLog(); + ``` + + Вставьте данные во входную таблицу: + + ```sql + INSERT INTO range_key_dictionary_source_table VALUES(1, toDate('2019-05-20'), toDate('2019-05-20'), 'First', 'First'); + INSERT INTO range_key_dictionary_source_table VALUES(2, toDate('2019-05-20'), toDate('2019-05-20'), 'Second', NULL); + INSERT INTO range_key_dictionary_source_table VALUES(3, toDate('2019-05-20'), toDate('2019-05-20'), 'Third', 'Third'); + ``` + + Создайте словарь: + + ```sql + CREATE DICTIONARY range_key_dictionary + ( + key UInt64, + start_date Date, + end_date Date, + value String, + value_nullable Nullable(String) + ) + PRIMARY KEY key + SOURCE(CLICKHOUSE(HOST 'localhost' PORT tcpPort() TABLE 'range_key_dictionary_source_table')) + LIFETIME(MIN 1 MAX 1000) + LAYOUT(RANGE_HASHED()) + RANGE(MIN start_date MAX end_date); + ```
-Пример словаря с составным ключом - -Создайте исходную таблицу: - -```sql -CREATE TABLE dict_mult_source -( -id UInt32, -c1 UInt32, -c2 String -) ENGINE = Memory; -``` - -Вставьте данные в исходную таблицу: - -```sql -INSERT INTO dict_mult_source VALUES -(1, 1, '1'), -(2, 2, '2'), -(3, 3, '3'); -``` - -Создайте словарь: - -```sql -CREATE DICTIONARY ext_dict_mult -( - id UInt32, - c1 UInt32, - c2 String -) -PRIMARY KEY id -SOURCE(CLICKHOUSE(HOST 'localhost' PORT 9000 USER 'default' TABLE 'dict_mult_source' DB 'default')) -LAYOUT(FLAT()) -LIFETIME(MIN 0 MAX 0); -``` - + Пример словаря со сложным ключом + + Создайте исходную таблицу: + + ```sql + CREATE TABLE dict_mult_source + ( + id UInt32, + c1 UInt32, + c2 String + ) ENGINE = Memory; + ``` + + Вставьте данные в исходную таблицу: + + ```sql + INSERT INTO dict_mult_source VALUES + (1, 1, '1'), + (2, 2, '2'), + (3, 3, '3'); + ``` + + Создайте словарь: + + ```sql + CREATE DICTIONARY ext_dict_mult + ( + id UInt32, + c1 UInt32, + c2 String + ) + PRIMARY KEY id + SOURCE(CLICKHOUSE(HOST 'localhost' PORT 9000 USER 'default' TABLE 'dict_mult_source' DB 'default')) + LAYOUT(FLAT()) + LIFETIME(MIN 0 MAX 0); + ```
-Пример иерархического словаря - -Создайте исходную таблицу: - -```sql -CREATE TABLE hierarchy_source -( - id UInt64, - parent_id UInt64, - name String -) ENGINE = Memory; -``` - -Вставьте данные в исходную таблицу: - -```sql -INSERT INTO hierarchy_source VALUES -(0, 0, 'Root'), -(1, 0, 'Level 1 - Node 1'), -(2, 1, 'Level 2 - Node 2'), -(3, 1, 'Level 2 - Node 3'), -(4, 2, 'Level 3 - Node 4'), -(5, 2, 'Level 3 - Node 5'), -(6, 3, 'Level 3 - Node 6'); - --- 0 (Root) --- └── 1 (Level 1 - Node 1) --- ├── 2 (Level 2 - Node 2) --- │ ├── 4 (Level 3 - Node 4) --- │ └── 5 (Level 3 - Node 5) --- └── 3 (Level 2 - Node 3) --- └── 6 (Level 3 - Node 6) -``` + Пример иерархического словаря -Создайте словарь: + Создайте исходную таблицу: -```sql -CREATE DICTIONARY hierarchical_dictionary -( + ```sql + CREATE TABLE hierarchy_source + ( id UInt64, - parent_id UInt64 HIERARCHICAL, + parent_id UInt64, name String -) -PRIMARY KEY id -SOURCE(CLICKHOUSE(HOST 'localhost' PORT 9000 USER 'default' TABLE 'hierarchy_source' DB 'default')) -LAYOUT(HASHED()) -LIFETIME(MIN 300 MAX 600); -``` - + ) ENGINE = Memory; + ``` + + Вставьте данные в исходную таблицу: + + ```sql + INSERT INTO hierarchy_source VALUES + (0, 0, 'Root'), + (1, 0, 'Level 1 - Node 1'), + (2, 1, 'Level 2 - Node 2'), + (3, 1, 'Level 2 - Node 3'), + (4, 2, 'Level 3 - Node 4'), + (5, 2, 'Level 3 - Node 5'), + (6, 3, 'Level 3 - Node 6'); + + -- 0 (Root) + -- └── 1 (Level 1 - Node 1) + -- ├── 2 (Level 2 - Node 2) + -- │ ├── 4 (Level 3 - Node 4) + -- │ └── 5 (Level 3 - Node 5) + -- └── 3 (Level 2 - Node 3) + -- └── 6 (Level 3 - Node 6) + ``` + + Создайте словарь: + + ```sql + CREATE DICTIONARY hierarchical_dictionary + ( + id UInt64, + parent_id UInt64 HIERARCHICAL, + name String + ) + PRIMARY KEY id + SOURCE(CLICKHOUSE(HOST 'localhost' PORT 9000 USER 'default' TABLE 'hierarchy_source' DB 'default')) + LAYOUT(HASHED()) + LIFETIME(MIN 300 MAX 600); + ```
- - +{/* + Содержимое тегов ниже при сборке фреймворка документации заменяется + документацией, сгенерированной из system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. + См.: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md + */ } {/*AUTOGENERATED_START*/ } -## dictGet - -Добавлена в версии: v18.16 - -Извлекает значения из словаря. - -**Синтаксис** - -```sql -dictGet('dict_name', attr_names, id_expr) -``` - -**Аргументы** - -* `dict_name` — Имя словаря. [`String`](/sql-reference/data-types/string) -* `attr_names` — Имя столбца словаря или кортеж имён столбцов. [`String`](/sql-reference/data-types/string) или [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — Значение ключа — выражение, возвращающее UInt64/Tuple(T). [`UInt64`](/sql-reference/data-types/int-uint) или [`Tuple(T)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает значение атрибута словаря, соответствующее `id_expr`, если ключ найден. -Если ключ не найден, возвращает содержимое элемента ``, указанного для атрибута в конфигурации словаря. - -**Примеры** - -**Получение одного атрибута** - -```sql title=Query -SELECT dictGet('ext_dict_test', 'c1', toUInt64(1)) AS val -``` - -```response title=Response -1 -``` - -**Несколько атрибутов** - -```sql title=Query -SELECT - dictGet('ext_dict_mult', ('c1','c2'), number + 1) AS val, - toTypeName(val) AS type -FROM system.numbers -LIMIT 3; -``` - -```response title=Response -┌─val─────┬─type───────────┐ -│ (1,'1') │ Tuple( ↴│ -│ │↳ c1 UInt32,↴│ -│ │↳ c2 String) │ -│ (2,'2') │ Tuple( ↴│ -│ │↳ c1 UInt32,↴│ -│ │↳ c2 String) │ -│ (3,'3') │ Tuple( ↴│ -│ │↳ c1 UInt32,↴│ -│ │↳ c2 String) │ -└─────────┴────────────────┘ -``` - - -## dictGetAll - -Добавлена в версии: v23.5 - -Преобразует значение атрибута словаря к типу данных `All` независимо от конфигурации словаря. - -**Синтаксис** - -```sql -dictGetAll(dict_name, attr_name, id_expr) -``` - -**Аргументы** - -* `dict_name` — имя словаря. [`String`](/sql-reference/data-types/string) -* `attr_name` — имя столбца словаря. [`String`](/sql-reference/data-types/string) или [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — значение ключа. Выражение, возвращающее значение типа ключа словаря или значение-кортеж (в зависимости от конфигурации словаря). [`Expression`](/sql-reference/data-types/special-data-types/expression) или [`Tuple(T)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает значение атрибута словаря, соответствующее `id_expr`, -в противном случае возвращает содержимое элемента ``, заданного для атрибута в конфигурации словаря. - -:::note -ClickHouse генерирует исключение, если не может разобрать значение атрибута или если значение не соответствует типу данных атрибута. -::: - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT - 'Mozilla/5.0 (Linux; Android 12; SM-G998B) Mobile Safari/537.36' AS user_agent, - - -- Будут найдены ВСЕ подходящие шаблоны - dictGetAll('regexp_tree', 'os_replacement', 'Mozilla/5.0 (Linux; Android 12; SM-G998B) Mobile Safari/537.36') AS all_matches, - - -- Будет возвращено только первое совпадение - dictGet('regexp_tree', 'os_replacement', 'Mozilla/5.0 (Linux; Android 12; SM-G998B) Mobile Safari/537.36') AS first_match; -``` - -```response title=Response -┌─user_agent─────────────────────────────────────────────────────┬─all_matches─────────────────────────────┬─first_match─┐ -│ Mozilla/5.0 (Linux; Android 12; SM-G998B) Mobile Safari/537.36 │ ['Android','Android','Android','Linux'] │ Android │ -└────────────────────────────────────────────────────────────────┴─────────────────────────────────────────┴─────────────┘ -``` - - -## dictGetChildren - -Введено в: v21.4 - -Возвращает дочерние элементы первого уровня в виде массива индексов. Является обратным преобразованием к [dictGetHierarchy](#dictgethierarchy). - -**Синтаксис** - -```sql -dictGetChildren(имя_словаря, ключ) -``` - -**Аргументы** - -* `dict_name` — Название словаря. [`String`](/sql-reference/data-types/string) -* `key` — Ключ для проверки. [`const String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает потомков первого уровня для указанного ключа. [`Array(UInt64)`](/sql-reference/data-types/array) - -**Примеры** - -**Получение потомков первого уровня словаря** - -```sql title=Query -SELECT dictGetChildren('hierarchical_dictionary', 2); -``` - -```response title=Response -┌─dictGetChild⋯ionary', 2)─┐ -│ [4,5] │ -└──────────────────────────┘ -``` - - -## dictGetDate - -Введена в версии: v1.1 - -Преобразует значение атрибута словаря к типу данных `Date` независимо от конфигурации словаря. - -**Синтаксис** - -```sql -dictGetDate(имя_словаря, имя_атрибута, id_expr) -``` - -**Аргументы** - -* `dict_name` — Имя словаря. [`String`](/sql-reference/data-types/string) -* `attr_name` — Имя столбца словаря. [`String`](/sql-reference/data-types/string) или [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — Значение ключа. Выражение, возвращающее значение типа ключа словаря или значение-кортеж (в зависимости от конфигурации словаря). [`Expression`](/sql-reference/data-types/special-data-types/expression) или [`Tuple(T)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает значение атрибута словаря, которое соответствует `id_expr`, -в противном случае возвращает содержимое элемента ``, указанного для атрибута в конфигурации словаря. - -:::note -ClickHouse генерирует исключение, если не может разобрать значение атрибута или если значение не соответствует типу данных атрибута. -::: - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT dictGetDate('all_types_dict', 'Date_value', 1) -``` - -```response title=Response -┌─dictGetDate(⋯_value', 1)─┐ -│ 2020-01-01 │ -└──────────────────────────┘ -``` - - -## dictGetDateOrDefault - -Добавлено в версии: v1.1 - -Преобразует значение атрибута словаря к типу данных `Date` независимо от конфигурации словаря или возвращает указанное значение по умолчанию, если ключ не найден. - -**Синтаксис** - -```sql -dictGetDateOrDefault(имя_словаря, имя_атрибута, выражение_id, выражение_значения_по_умолчанию) -``` - -**Аргументы** - -* `dict_name` — Имя словаря. [`String`](/sql-reference/data-types/string) -* `attr_name` — Имя столбца словаря. [`String`](/sql-reference/data-types/string) или [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — Значение ключа. Выражение, возвращающее значение типа ключа словаря или кортеж значений (в зависимости от конфигурации словаря). [`Expression`](/sql-reference/data-types/special-data-types/expression) или [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value_expr` — Значение (значения), возвращаемое, если в словаре нет строки с ключом `id_expr`. [`Expression`](/sql-reference/data-types/special-data-types/expression) или [`Tuple(T)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает значение атрибута словаря, которое соответствует `id_expr`, -в противном случае возвращает значение, переданное в параметре `default_value_expr`. - -:::note -ClickHouse вызывает исключение, если не может распарсить значение атрибута или если значение не соответствует типу данных атрибута. -::: - -**Примеры** - -**Пример использования** - -```sql title=Query --- для существующего ключа -SELECT dictGetDate('all_types_dict', 'Date_value', 1); - --- для несуществующего ключа возвращает указанное значение по умолчанию -SELECT dictGetDateOrDefault('all_types_dict', 'Date_value', 999, toDate('1970-01-01')); -``` - -```response title=Response -┌─dictGetDate(⋯_value', 1)─┐ -│ 2024-01-15 │ -└──────────────────────────┘ -┌─dictGetDateO⋯70-01-01'))─┐ -│ 1970-01-01 │ -└──────────────────────────┘ -``` - - -## dictGetDateTime - -Добавлено в: v1.1 - -Преобразует значение атрибута словаря в тип данных `DateTime` независимо от конфигурации словаря. - -**Синтаксис** - -```sql -dictGetDateTime(dict_name, attr_name, id_expr) -``` - -**Аргументы** - -* `dict_name` — имя словаря. [`String`](/sql-reference/data-types/string) -* `attr_name` — имя столбца словаря. [`String`](/sql-reference/data-types/string) или [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — значение ключа. Выражение, возвращающее значение типа ключа словаря или кортеж (в зависимости от конфигурации словаря). [`Expression`](/sql-reference/data-types/special-data-types/expression) или [`Tuple(T)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает значение атрибута словаря, которое соответствует `id_expr`, -в противном случае возвращает содержимое элемента ``, указанного для атрибута в конфигурации словаря. - -:::note -ClickHouse выбрасывает исключение, если не может разобрать значение атрибута или если значение не соответствует типу данных атрибута. -::: - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT dictGetDateTime('all_types_dict', 'DateTime_value', 1) -``` - -```response title=Response -┌─dictGetDateT⋯_value', 1)─┐ -│ 2024-01-15 10:30:00 │ -└──────────────────────────┘ -``` - - -## dictGetDateTimeOrDefault - -Появилась в версии: v1.1 - -Преобразует значение атрибута словаря к типу данных `DateTime` независимо от конфигурации словаря либо возвращает указанное значение по умолчанию, если ключ не найден. - -**Синтаксис** - -```sql -dictGetDateTimeOrDefault(dict_name, attr_name, id_expr, default_value_expr) -``` - -**Аргументы** - -* `dict_name` — Имя словаря. [`String`](/sql-reference/data-types/string) -* `attr_name` — Имя столбца словаря. [`String`](/sql-reference/data-types/string) или [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — Значение ключа. Выражение, возвращающее значение типа ключа словаря или значение-кортеж (в зависимости от конфигурации словаря). [`Expression`](/sql-reference/data-types/special-data-types/expression) или [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value_expr` — Значение или значения, возвращаемые, если словарь не содержит строки с ключом `id_expr`. [`Expression`](/sql-reference/data-types/special-data-types/expression) или [`Tuple(T)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает значение атрибута словаря, которое соответствует `id_expr`, -в противном случае возвращает значение, переданное в параметре `default_value_expr`. - -:::note -ClickHouse выбрасывает исключение, если не может распарсить значение атрибута или если значение не соответствует типу данных атрибута. -::: - -**Примеры** - -**Пример использования** - -```sql title=Query --- для существующего ключа -SELECT dictGetDateTime('all_types_dict', 'DateTime_value', 1); - --- для несуществующего ключа возвращается указанное значение по умолчанию -SELECT dictGetDateTimeOrDefault('all_types_dict', 'DateTime_value', 999, toDateTime('1970-01-01 00:00:00')); -``` - -```response title=Response -┌─dictGetDateT⋯_value', 1)─┐ -│ 2024-01-15 10:30:00 │ -└──────────────────────────┘ -┌─dictGetDateT⋯0:00:00'))──┐ -│ 1970-01-01 00:00:00 │ -└──────────────────────────┘ -``` - - -## dictGetDescendants - -Введена в версии: v21.4 - -Возвращает всех потомков так, как если бы функция [`dictGetChildren`](#dictGetChildren) была рекурсивно применена `level` раз. - -**Синтаксис** - -```sql -dictGetDescendants(имя_словаря, ключ, уровень) -``` - -**Аргументы** - -* `dict_name` — имя словаря. [`String`](/sql-reference/data-types/string) -* `key` — проверяемый ключ. [`const String`](/sql-reference/data-types/string) -* `level` — уровень иерархии для проверки ключа. Если `level = 0`, возвращает всех потомков до конца иерархии. [`UInt8`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает потомков для ключа. [`Array(UInt64)`](/sql-reference/data-types/array) - -**Примеры** - -**Получение дочерних элементов словаря первого уровня** - -```sql title=Query --- рассмотрим следующий иерархический словарь: --- 0 (Корень) --- └── 1 (Уровень 1 - Узел 1) --- ├── 2 (Уровень 2 - Узел 2) --- │ ├── 4 (Уровень 3 - Узел 4) --- │ └── 5 (Уровень 3 - Узел 5) --- └── 3 (Уровень 2 - Узел 3) --- └── 6 (Уровень 3 - Узел 6) - -SELECT dictGetDescendants('hierarchical_dictionary', 0, 2) -``` - -```response title=Response -┌─dictGetDesce⋯ary', 0, 2)─┐ -│ [3,2] │ -└──────────────────────────┘ -``` - - -## dictGetFloat32 - -Появилась в версии: v1.1 - -Преобразует значение атрибута словаря к типу данных `Float32` независимо от конфигурации словаря. - -**Синтаксис** - -```sql -dictGetFloat32(dict_name, attr_name, id_expr) -``` - -**Аргументы** - -* `dict_name` — имя словаря. [`String`](/sql-reference/data-types/string) -* `attr_name` — имя столбца словаря. [`String`](/sql-reference/data-types/string) или [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — значение ключа. Выражение, возвращающее значение ключевого типа словаря или кортеж (в зависимости от конфигурации словаря). [`Expression`](/sql-reference/data-types/special-data-types/expression) или [`Tuple(T)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает значение атрибута словаря, которое соответствует `id_expr`, -в противном случае возвращает содержимое элемента ``, указанного для атрибута в конфигурации словаря. - -:::note -ClickHouse генерирует исключение, если не удаётся интерпретировать значение атрибута или оно не соответствует типу данных атрибута. -::: - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT dictGetFloat32('all_types_dict', 'Float32_value', 1) -``` - -```response title=Response -┌─dictGetFloat⋯_value', 1)─┐ -│ -123.123 │ -└──────────────────────────┘ -``` - - -## dictGetFloat32OrDefault - -Добавлено в: v1.1 - -Преобразует значение атрибута словаря к типу данных `Float32` независимо от конфигурации словаря или возвращает указанное значение по умолчанию, если ключ не найден. - -**Синтаксис** - -```sql -dictGetFloat32OrDefault(имя_словаря, имя_атрибута, id_выражение, выражение_значения_по_умолчанию) -``` - -**Аргументы** - -* `dict_name` — Имя словаря. [`String`](/sql-reference/data-types/string) -* `attr_name` — Имя столбца словаря. [`String`](/sql-reference/data-types/string) или [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — Значение ключа. Выражение, возвращающее значение типа ключа словаря или кортеж (в зависимости от конфигурации словаря). [`Expression`](/sql-reference/data-types/special-data-types/expression) или [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value_expr` — Значение или значения, возвращаемые, если в словаре нет строки с ключом `id_expr`. [`Expression`](/sql-reference/data-types/special-data-types/expression) или [`Tuple(T)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает значение атрибута словаря, которое соответствует `id_expr`, -в противном случае возвращает значение, переданное в параметре `default_value_expr`. - -:::note -ClickHouse выбрасывает исключение, если не удаётся разобрать значение атрибута или оно не соответствует типу данных атрибута. -::: - -**Примеры** - -**Пример использования** - -```sql title=Query --- для существующего ключа -SELECT dictGetFloat32('all_types_dict', 'Float32_value', 1); - --- для несуществующего ключа возвращает указанное значение по умолчанию (-1.0) -SELECT dictGetFloat32OrDefault('all_types_dict', 'Float32_value', 999, -1.0); -``` - -```response title=Response -┌─dictGetFloat⋯_value', 1)─┐ -│ 123.45 │ -└──────────────────────────┘ -┌─dictGetFloat⋯e', 999, -1)─┐ -│ -1 │ -└───────────────────────────┘ -``` - - -## dictGetFloat64 - -Добавлено в версии: v1.1 - -Преобразует значение атрибута словаря к типу данных `Float64` независимо от конфигурации словаря. - -**Синтаксис** - -```sql -dictGetFloat64(имя_словаря, имя_атрибута, id_expr) -``` - -**Аргументы** - -* `dict_name` — Имя словаря. [`String`](/sql-reference/data-types/string) -* `attr_name` — Имя столбца словаря. [`String`](/sql-reference/data-types/string) или [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — Значение ключа. Выражение, возвращающее значение типа ключа словаря или значение-кортеж (в зависимости от конфигурации словаря). [`Expression`](/sql-reference/data-types/special-data-types/expression) или [`Tuple(T)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает значение атрибута словаря, которое соответствует `id_expr`, -в противном случае — содержимое элемента ``, указанного для атрибута в конфигурации словаря. - -:::note -ClickHouse выбрасывает исключение, если не может разобрать значение атрибута или если значение не соответствует типу данных атрибута. -::: - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT dictGetFloat64('all_types_dict', 'Float64_value', 1) -``` - -```response title=Response -┌─dictGetFloat⋯_value', 1)─┐ -│ -123.123 │ -└──────────────────────────┘ -``` - - -## dictGetFloat64OrDefault - -Добавлено в: v1.1 - -Приводит значение атрибута словаря к типу данных `Float64` вне зависимости от конфигурации словаря или возвращает указанное значение по умолчанию, если ключ не найден. - -**Синтаксис** - -```sql -dictGetFloat64OrDefault(имя_словаря, имя_атрибута, id_выражение, выражение_значения_по_умолчанию) -``` - -**Аргументы** - -* `dict_name` — Имя словаря. [`String`](/sql-reference/data-types/string) -* `attr_name` — Имя столбца словаря. [`String`](/sql-reference/data-types/string) или [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — Значение ключа. Выражение, возвращающее значение типа ключа словаря или кортеж (в зависимости от конфигурации словаря). [`Expression`](/sql-reference/data-types/special-data-types/expression) или [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value_expr` — Значение или значения, возвращаемые, если словарь не содержит строки с ключом `id_expr`. [`Expression`](/sql-reference/data-types/special-data-types/expression) или [`Tuple(T)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает значение атрибута словаря, которое соответствует `id_expr`, -в противном случае возвращает значение, переданное в параметре `default_value_expr`. - -:::note -ClickHouse выбрасывает исключение, если не может разобрать значение атрибута или если значение не соответствует типу данных атрибута. -::: - -**Примеры** - -**Пример использования** - -```sql title=Query --- для существующего ключа -SELECT dictGetFloat64('all_types_dict', 'Float64_value', 1); - --- для несуществующего ключа возвращает указанное значение по умолчанию (nan) -SELECT dictGetFloat64OrDefault('all_types_dict', 'Float64_value', 999, nan); -``` - -```response title=Response -┌─dictGetFloat⋯_value', 1)─┐ -│ 987654.123456 │ -└──────────────────────────┘ -┌─dictGetFloat⋯, 999, nan)─┐ -│ nan │ -└──────────────────────────┘ -``` - - -## dictGetHierarchy - -Добавлено в версии: v1.1 - -Создает массив, содержащий всех родителей ключа в [иерархическом словаре](../../sql-reference/dictionaries/index.md#hierarchical-dictionaries). - -**Синтаксис** - -```sql -dictGetHierarchy(dict_name, key) -``` - -**Аргументы** - -* `dict_name` — Имя словаря. [`String`](/sql-reference/data-types/string) -* `key` — Значение ключа. [`const String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает список родительских элементов для заданного ключа. [`Array(UInt64)`](/sql-reference/data-types/array) - -**Примеры** - -**Получение иерархии по ключу** - -```sql title=Query -SELECT dictGetHierarchy('hierarchical_dictionary', 5) -``` - -```response title=Response -┌─dictGetHiera⋯ionary', 5)─┐ -│ [5,2,1] │ -└──────────────────────────┘ -``` - - -## dictGetIPv4 - -Добавлена в: v1.1 - -Преобразует значение атрибута словаря в тип данных `IPv4` независимо от конфигурации словаря. - -**Синтаксис** - -```sql -dictGetIPv4(dict_name, attr_name, id_expr) -``` - -**Аргументы** - -* `dict_name` — имя словаря. [`String`](/sql-reference/data-types/string) -* `attr_name` — имя столбца словаря. [`String`](/sql-reference/data-types/string) или [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — значение ключа. Выражение, возвращающее значение типа ключа словаря или кортеж (в зависимости от конфигурации словаря). [`Expression`](/sql-reference/data-types/special-data-types/expression) или [`Tuple(T)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает значение атрибута словаря, которое соответствует значению `id_expr`, -в противном случае возвращает содержимое элемента ``, указанного для атрибута в конфигурации словаря. - -:::note -ClickHouse генерирует исключение, если не может интерпретировать значение атрибута или если значение не соответствует типу данных атрибута. -::: - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT dictGetIPv4('all_types_dict', 'IPv4_value', 1) -``` - -```response title=Response -┌─dictGetIPv4('all_⋯ 'IPv4_value', 1)─┐ -│ 192.168.0.1 │ -└─────────────────────────────────────┘ -``` - - -## dictGetIPv4OrDefault - -Добавлена в версии v23.1 - -Преобразует значение атрибута словаря к типу данных `IPv4` независимо от конфигурации словаря или возвращает указанное значение по умолчанию, если ключ не найден. - -**Синтаксис** - -```sql -dictGetIPv4OrDefault(dict_name, attr_name, id_expr, default_value_expr) -``` - -**Аргументы** - -* `dict_name` — Имя словаря. [`String`](/sql-reference/data-types/string) -* `attr_name` — Имя столбца словаря. [`String`](/sql-reference/data-types/string) или [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — Значение ключа. Выражение, возвращающее значение типа ключа словаря или значение кортежа (зависит от конфигурации словаря). [`Expression`](/sql-reference/data-types/special-data-types/expression) или [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value_expr` — Значение или значения, которые возвращаются, если словарь не содержит строки с ключом `id_expr`. [`Expression`](/sql-reference/data-types/special-data-types/expression) или [`Tuple(T)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает значение атрибута словаря, соответствующее `id_expr`, -в противном случае возвращает значение параметра `default_value_expr`. - -:::note -ClickHouse выбрасывает исключение, если не может разобрать значение атрибута или если значение не соответствует типу данных атрибута. -::: - -**Примеры** - -**Пример использования** - -```sql title=Query --- для существующего ключа -SELECT dictGetIPv4('all_types_dict', 'IPv4_value', 1); - --- для несуществующего ключа возвращается указанное значение по умолчанию -SELECT dictGetIPv4OrDefault('all_types_dict', 'IPv4_value', 999, toIPv4('0.0.0.0')); -``` - -```response title=Response -┌─dictGetIPv4('all_⋯ 'IPv4_value', 1)─┐ -│ 192.168.0.1 │ -└─────────────────────────────────────┘ -┌─dictGetIPv4OrDefa⋯0.0.0.0'))─┐ -│ 0.0.0.0 │ -└──────────────────────────────┘ -``` - - -## dictGetIPv6 - -Появилась в версии: v23.1 - -Преобразует значение атрибута словаря в тип данных `IPv6` независимо от конфигурации словаря. - -**Синтаксис** - -```sql -dictGetIPv6(dict_name, attr_name, id_expr) -``` - -**Аргументы** - -* `dict_name` — Имя словаря. [`String`](/sql-reference/data-types/string) -* `attr_name` — Имя столбца словаря. [`String`](/sql-reference/data-types/string) или [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — Значение ключа. Выражение, возвращающее значение типа ключа словаря или кортеж значений (в зависимости от конфигурации словаря). [`Expression`](/sql-reference/data-types/special-data-types/expression) или [`Tuple(T)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает значение атрибута словаря, соответствующее `id_expr`, -в противном случае возвращает содержимое элемента ``, указанного для атрибута в конфигурации словаря. - -:::note -ClickHouse генерирует исключение, если не может распарсить значение атрибута или если значение не соответствует типу данных атрибута. -::: - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT dictGetIPv6('all_types_dict', 'IPv6_value', 1) -``` - -```response title=Response -┌─dictGetIPv6('all_⋯ 'IPv6_value', 1)─┐ -│ 2001:db8:85a3::8a2e:370:7334 │ -└─────────────────────────────────────┘ -``` - - -## dictGetIPv6OrDefault - -Добавлена в: v23.1 - -Преобразует значение атрибута словаря к типу данных `IPv6` независимо от конфигурации словаря или возвращает указанное значение по умолчанию, если ключ не найден. - -**Синтаксис** - -```sql -dictGetIPv6OrDefault(dict_name, attr_name, id_expr, default_value_expr) -``` - -**Аргументы** - -* `dict_name` — имя словаря. [`String`](/sql-reference/data-types/string) -* `attr_name` — имя столбца словаря. [`String`](/sql-reference/data-types/string) или [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — значение ключа. Выражение, возвращающее значение типа ключа словаря или кортеж (в зависимости от конфигурации словаря). [`Expression`](/sql-reference/data-types/special-data-types/expression) или [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value_expr` — значение или значения, возвращаемые, если словарь не содержит строки с ключом `id_expr`. [`Expression`](/sql-reference/data-types/special-data-types/expression) или [`Tuple(T)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает значение атрибута словаря, соответствующее значению `id_expr`, -в противном случае возвращает значение, переданное в параметре `default_value_expr`. - -:::note -ClickHouse генерирует исключение, если не может разобрать значение атрибута или если значение не соответствует типу данных атрибута. -::: - -**Примеры** - -**Пример использования** - -```sql title=Query --- для существующего ключа -SELECT dictGetIPv6('all_types_dict', 'IPv6_value', 1); - --- для несуществующего ключа возвращает переданное значение по умолчанию -SELECT dictGetIPv6OrDefault('all_types_dict', 'IPv6_value', 999, '::1'::IPv6); -``` - -```response title=Response -┌─dictGetIPv6('all_⋯ 'IPv6_value', 1)─┐ -│ 2001:db8:85a3::8a2e:370:7334 │ -└─────────────────────────────────────┘ -┌─dictGetIPv6OrDefa⋯:1'::IPv6)─┐ -│ ::1 │ -└──────────────────────────────┘ -``` - - -## dictGetInt16 - -Добавлено в версии v1.1 - -Преобразует значение атрибута словаря к типу данных `Int16` независимо от конфигурации словаря. - -**Синтаксис** - -```sql -dictGetInt16(dict_name, attr_name, id_expr) -``` - -**Аргументы** - -* `dict_name` — Имя словаря. [`String`](/sql-reference/data-types/string) -* `attr_name` — Имя столбца словаря. [`String`](/sql-reference/data-types/string) или [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — Значение ключа. Выражение, возвращающее значение типа ключа словаря или значение-кортеж (в зависимости от конфигурации словаря). [`Expression`](/sql-reference/data-types/special-data-types/expression) или [`Tuple(T)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает значение атрибута словаря, которое соответствует `id_expr`, -иначе возвращает содержимое элемента ``, указанного для атрибута в конфигурации словаря. - -:::note -ClickHouse выбрасывает исключение, если не может распарсить значение атрибута или если значение не соответствует типу данных атрибута. -::: - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT dictGetInt16('all_types_dict', 'Int16_value', 1) -``` - -```response title=Response -┌─dictGetInt16⋯_value', 1)─┐ -│ -5000 │ -└──────────────────────────┘ -``` - - -## dictGetInt16OrDefault - -Появилась в версии: v1.1 - -Преобразует значение атрибута словаря к типу данных `Int16` независимо от конфигурации словаря либо возвращает указанное значение по умолчанию, если ключ не найден. - -**Синтаксис** - -```sql -dictGetInt16OrDefault(dict_name, attr_name, id_expr, default_value_expr) -``` - -**Аргументы** - -* `dict_name` — Имя словаря. [`String`](/sql-reference/data-types/string) -* `attr_name` — Имя столбца словаря. [`String`](/sql-reference/data-types/string) или [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — Значение ключа. Выражение, возвращающее значение типа ключа словаря или кортеж (в зависимости от конфигурации словаря). [`Expression`](/sql-reference/data-types/special-data-types/expression) или [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value_expr` — Значение (значения), возвращаемое, если словарь не содержит строки с ключом `id_expr`. [`Expression`](/sql-reference/data-types/special-data-types/expression) или [`Tuple(T)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает значение атрибута словаря, которое соответствует `id_expr`, -в противном случае — значение, переданное в параметре `default_value_expr`. - -:::note -ClickHouse выбрасывает исключение, если не может распарсить значение атрибута или если значение не соответствует типу данных атрибута. -::: - -**Примеры** - -**Пример использования** - -```sql title=Query --- для существующего ключа -SELECT dictGetInt16('all_types_dict', 'Int16_value', 1); - --- для несуществующего ключа возвращается указанное значение по умолчанию (-1) -SELECT dictGetInt16OrDefault('all_types_dict', 'Int16_value', 999, -1); -``` - -```response title=Response -┌─dictGetInt16⋯_value', 1)─┐ -│ -5000 │ -└──────────────────────────┘ -┌─dictGetInt16⋯', 999, -1)─┐ -│ -1 │ -└──────────────────────────┘ -``` - - -## dictGetInt32 - -Добавлена в версии v1.1 - -Преобразует значение атрибута словаря к типу данных `Int32` независимо от конфигурации словаря. - -**Синтаксис** - -```sql -dictGetInt32(dict_name, attr_name, id_expr) -``` - -**Аргументы** - -* `dict_name` — Имя словаря. [`String`](/sql-reference/data-types/string) -* `attr_name` — Имя столбца словаря. [`String`](/sql-reference/data-types/string) или [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — Значение ключа. Выражение, возвращающее значение типа ключа словаря или кортеж (в зависимости от конфигурации словаря). [`Expression`](/sql-reference/data-types/special-data-types/expression) или [`Tuple(T)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает значение атрибута словаря, соответствующее `id_expr`, -в противном случае возвращает содержимое элемента ``, указанного для атрибута в конфигурации словаря. - -:::note -ClickHouse генерирует исключение, если не удаётся разобрать значение атрибута или если значение не соответствует типу данных атрибута. -::: - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT dictGetInt32('all_types_dict', 'Int32_value', 1) -``` - -```response title=Response -┌─dictGetInt32⋯_value', 1)─┐ -│ -1000000 │ -└──────────────────────────┘ -``` - - -## dictGetInt32OrDefault - -Введено в версии: v1.1 - -Приводит значение атрибута словаря к типу данных `Int32` независимо от конфигурации словаря или возвращает указанное значение по умолчанию, если ключ не найден. - -**Синтаксис** - -```sql -dictGetInt32OrDefault(dict_name, attr_name, id_expr, default_value_expr) -``` - -**Аргументы** - -* `dict_name` — Имя словаря. [`String`](/sql-reference/data-types/string) -* `attr_name` — Имя столбца в словаре. [`String`](/sql-reference/data-types/string) или [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — Значение ключа. Выражение, возвращающее значение типа ключа словаря или кортеж (в зависимости от конфигурации словаря). [`Expression`](/sql-reference/data-types/special-data-types/expression) или [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value_expr` — Значение или значения, возвращаемые, если словарь не содержит строки с ключом `id_expr`. [`Expression`](/sql-reference/data-types/special-data-types/expression) или [`Tuple(T)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает значение атрибута словаря, которое соответствует `id_expr`, -в противном случае возвращает значение, переданное в параметре `default_value_expr`. - -:::note -ClickHouse генерирует исключение, если не может разобрать значение атрибута или если значение не соответствует типу данных атрибута. -::: - -**Примеры** - -**Пример использования** - -```sql title=Query --- для существующего ключа -SELECT dictGetInt32('all_types_dict', 'Int32_value', 1); - --- для несуществующего ключа возвращает указанное значение по умолчанию (-1) -SELECT dictGetInt32OrDefault('all_types_dict', 'Int32_value', 999, -1); -``` - -```response title=Response -┌─dictGetInt32⋯_value', 1)─┐ -│ -1000000 │ -└──────────────────────────┘ -┌─dictGetInt32⋯', 999, -1)─┐ -│ -1 │ -└──────────────────────────┘ -``` - - -## dictGetInt64 - -Появилось в версии v1.1 - -Преобразует значение атрибута словаря к типу данных `Int64` независимо от конфигурации словаря. - -**Синтаксис** - -```sql -dictGetInt64(dict_name, attr_name, id_expr) -``` - -**Аргументы** - -* `dict_name` — Имя словаря. [`String`](/sql-reference/data-types/string) -* `attr_name` — Имя столбца словаря. [`String`](/sql-reference/data-types/string) или [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — Значение ключа. Выражение, возвращающее значение типа ключа словаря или значение-кортеж (в зависимости от конфигурации словаря). [`Expression`](/sql-reference/data-types/special-data-types/expression) или [`Tuple(T)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает значение атрибута словаря, которое соответствует `id_expr`, -в противном случае возвращает содержимое элемента ``, указанного для атрибута в конфигурации словаря. - -:::note -ClickHouse генерирует исключение, если не может распарсить значение атрибута или если значение не соответствует типу данных атрибута. -::: - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT dictGetInt64('all_types_dict', 'Int64_value', 1) -``` - -```response title=Response -┌─dictGetInt64⋯_value', 1)───┐ -│ -9223372036854775807 │ -└────────────────────────────┘ -``` - - -## dictGetInt64OrDefault - -Добавлена в версии: v1.1 - -Преобразует значение атрибута словаря к типу данных `Int64` независимо от конфигурации словаря или возвращает переданное значение по умолчанию, если ключ не найден. - -**Синтаксис** - -```sql -dictGetInt64OrDefault(dict_name, attr_name, id_expr, default_value_expr) -``` - -**Аргументы** - -* `dict_name` — Имя словаря. [`String`](/sql-reference/data-types/string) -* `attr_name` — Имя столбца словаря. [`String`](/sql-reference/data-types/string) или [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — Значение ключа. Выражение, возвращающее значение типа ключа словаря или значение-кортеж (в зависимости от конфигурации словаря). [`Expression`](/sql-reference/data-types/special-data-types/expression) или [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value_expr` — Значение или несколько значений, возвращаемые, если словарь не содержит строки с ключом `id_expr`. [`Expression`](/sql-reference/data-types/special-data-types/expression) или [`Tuple(T)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает значение атрибута словаря, которое соответствует `id_expr`, -в противном случае возвращает значение, переданное в параметре `default_value_expr`. - -:::note -ClickHouse генерирует исключение, если не может разобрать значение атрибута или если значение не соответствует типу данных атрибута. -::: - -**Примеры** - -**Пример использования** - -```sql title=Query --- для существующего ключа -SELECT dictGetInt64('all_types_dict', 'Int64_value', 1); - --- для несуществующего ключа: возвращает заданное значение по умолчанию (-1) -SELECT dictGetInt64OrDefault('all_types_dict', 'Int64_value', 999, -1); -``` - -```response title=Response -┌─dictGetInt64⋯_value', 1)─┐ -│ -9223372036854775808 │ -└──────────────────────────┘ -┌─dictGetInt64⋯', 999, -1)─┐ -│ -1 │ -└──────────────────────────┘ -``` - - -## dictGetInt8 - -Добавлено в: v1.1 - -Преобразует значение атрибута словаря к типу данных `Int8` независимо от конфигурации словаря. - -**Синтаксис** - -```sql -dictGetInt8(dict_name, attr_name, id_expr) -``` - -**Аргументы** - -* `dict_name` — Имя словаря. [`String`](/sql-reference/data-types/string) -* `attr_name` — Имя столбца словаря. [`String`](/sql-reference/data-types/string) или [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — Значение ключа. Выражение, возвращающее значение типа ключа словаря или кортеж (в зависимости от конфигурации словаря). [`Expression`](/sql-reference/data-types/special-data-types/expression) или [`Tuple(T)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает значение атрибута словаря, которое соответствует `id_expr`, -в противном случае возвращает содержимое элемента ``, указанного для атрибута в конфигурации словаря. - -:::note -ClickHouse генерирует исключение, если не может разобрать значение атрибута или если значение не соответствует типу данных атрибута. -::: - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT dictGetInt8('all_types_dict', 'Int8_value', 1) -``` - -```response title=Response -┌─dictGetInt8(⋯_value', 1)─┐ -│ -100 │ -└──────────────────────────┘ -``` - - -## dictGetInt8OrDefault - -Добавлена в версии: v1.1 - -Преобразует значение атрибута словаря к типу данных `Int8` независимо от конфигурации словаря или возвращает указанное значение по умолчанию, если ключ не найден. - -**Синтаксис** - -```sql -dictGetInt8OrDefault(dict_name, attr_name, id_expr, default_value_expr) -``` - -**Аргументы** - -* `dict_name` — Имя словаря. [`String`](/sql-reference/data-types/string) -* `attr_name` — Имя столбца словаря. [`String`](/sql-reference/data-types/string) или [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — Значение ключа. Выражение, возвращающее значение типа ключа словаря или кортеж (в зависимости от конфигурации словаря). [`Expression`](/sql-reference/data-types/special-data-types/expression) или [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value_expr` — Значение или значения, возвращаемые, если словарь не содержит строки с ключом `id_expr`. [`Expression`](/sql-reference/data-types/special-data-types/expression) или [`Tuple(T)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает значение атрибута словаря, которое соответствует `id_expr`, -в противном случае возвращает значение, переданное в параметре `default_value_expr`. - -:::note -ClickHouse выбрасывает исключение, если не может разобрать значение атрибута или если значение не соответствует типу данных атрибута. -::: - -**Примеры** - -**Пример использования** - -```sql title=Query --- для существующего ключа -SELECT dictGetInt8('all_types_dict', 'Int8_value', 1); - --- для несуществующего ключа возвращается переданное значение по умолчанию (-1) -SELECT dictGetInt8OrDefault('all_types_dict', 'Int8_value', 999, -1); -``` - -```response title=Response -┌─dictGetInt8(⋯_value', 1)─┐ -│ -100 │ -└──────────────────────────┘ -┌─dictGetInt8O⋯', 999, -1)─┐ -│ -1 │ -└──────────────────────────┘ -``` - - -## dictGetKeys - -Добавлена в: v25.11 - -Возвращает ключ(и) словаря, для которых значение атрибута равно указанному. Это операция, обратная функции `dictGet` для одного атрибута. - -Используйте параметр `max_reverse_dictionary_lookup_cache_size_bytes`, чтобы ограничить размер кэша обратного поиска для одного запроса, используемого `dictGetKeys`. -Кэш хранит сериализованные кортежи ключей для каждого значения атрибута, чтобы избежать повторного сканирования словаря в пределах одного запроса. -Кэш не сохраняется между запросами. При достижении лимита записи вытесняются по алгоритму LRU. -Наиболее эффективно используется с большими словарями, когда входные данные имеют низкую кардинальность, а рабочий набор умещается в кэше. Установите `0`, чтобы отключить кэширование. - -**Синтаксис** - -```sql -dictGetKeys('dict_name', 'attr_name', value_expr) -``` - -**Аргументы** - -* `dict_name` — Имя словаря. [`String`](/sql-reference/data-types/string) -* `attr_name` — Атрибут для сопоставления. [`String`](/sql-reference/data-types/string) -* `value_expr` — Значение для сопоставления с атрибутом. [`Expression`](/sql-reference/data-types/special-data-types/expression) - -**Возвращаемое значение** - -Для словарей с простым ключом: массив ключей, атрибут которых равен `value_expr`. Для словарей с составным ключом: массив кортежей ключей, атрибут которых равен `value_expr`. Если в словаре нет атрибута, соответствующего значению `value_expr`, возвращается пустой массив. ClickHouse выбрасывает исключение, если не может разобрать значение атрибута или если значение не может быть преобразовано к типу данных атрибута. - -**Примеры** - - -## dictGetOrDefault - -Начиная с версии: v18.16 - -Извлекает значения из словаря, подставляя значение по умолчанию, если ключ не найден. - -**Синтаксис** - -```sql -dictGetOrDefault('dict_name', attr_names, id_expr, default_value) -``` - -**Аргументы** - -* `dict_name` — имя словаря. [`String`](/sql-reference/data-types/string) -* `attr_names` — имя столбца словаря или кортеж имён столбцов. [`String`](/sql-reference/data-types/string) или [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — значение ключа. Выражение, возвращающее UInt64/Tuple(T). [`UInt64`](/sql-reference/data-types/int-uint) или [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value` — значение по умолчанию, которое возвращается, если ключ не найден. Тип должен совпадать с типом данных атрибута. - -**Возвращаемое значение** - -Возвращает значение атрибута словаря, соответствующее `id_expr`, если ключ найден. -Если ключ не найден, возвращает указанное `default_value`. - -**Примеры** - -**Получение значения с указанием значения по умолчанию** - -```sql title=Query -SELECT dictGetOrDefault('ext_dict_mult', 'c1', toUInt64(999), 0) AS val -``` - -```response title=Response -0 -``` - - -## dictGetOrNull - -Появилась в версии: v21.4 - -Извлекает значения из словаря, возвращая NULL, если ключ не найден. - -**Синтаксис** - -```sql -dictGetOrNull('dict_name', 'attr_name', id_expr) -``` - -**Аргументы** - -* `dict_name` — имя словаря. Строковый литерал. - `attr_name` — имя столбца, значение которого требуется получить. Строковый литерал. - `id_expr` — значение ключа. Выражение, возвращающее значение типа ключа словаря. - -**Возвращаемое значение** - -Возвращает значение атрибута словаря, соответствующее значению `id_expr`, если ключ найден. -Если ключ не найден, возвращает `NULL`. - -**Примеры** - -**Пример использования словаря с диапазонным ключом** - -```sql title=Query -SELECT - (number, toDate('2019-05-20')), - dictGetOrNull('range_key_dictionary', 'value', number, toDate('2019-05-20')), -FROM system.numbers LIMIT 5 FORMAT TabSeparated; -``` - -```response title=Response -(0,'2019-05-20') \N -(1,'2019-05-20') Первый -(2,'2019-05-20') Второй -(3,'2019-05-20') Третий -(4,'2019-05-20') \N -``` - - -## dictGetString - -Введена в версии: v1.1 - -Преобразует значение атрибута словаря к типу данных `String` независимо от конфигурации словаря. - -**Синтаксис** - -```sql -dictGetString(dict_name, attr_name, id_expr) -``` - -**Аргументы** - -* `dict_name` — имя словаря. [`String`](/sql-reference/data-types/string) -* `attr_name` — имя столбца словаря. [`String`](/sql-reference/data-types/string) или [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — значение ключа. Выражение, возвращающее значение типа ключа словаря или кортеж (в зависимости от конфигурации словаря). [`Expression`](/sql-reference/data-types/special-data-types/expression) или [`Tuple(T)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает значение атрибута словаря, соответствующее `id_expr`, -в противном случае — содержимое элемента ``, указанного для атрибута в конфигурации словаря. - -:::note -ClickHouse генерирует исключение, если не удаётся разобрать значение атрибута или если значение не соответствует типу данных атрибута. -::: - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT dictGetString('all_types_dict', 'String_value', 1) -``` - -```response title=Response -┌─dictGetString(⋯_value', 1)─┐ -│ тестовая строка │ -└────────────────────────────┘ -``` - - -## dictGetStringOrDefault - -Введена в версии v1.1 - -Преобразует значение атрибута словаря к типу данных `String` независимо от конфигурации словаря или возвращает указанное значение по умолчанию, если ключ не найден. - -**Синтаксис** - -```sql -dictGetStringOrDefault(dict_name, attr_name, id_expr, default_value_expr) -``` - -**Аргументы** - -* `dict_name` — Имя словаря. [`String`](/sql-reference/data-types/string) -* `attr_name` — Имя столбца словаря. [`String`](/sql-reference/data-types/string) или [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — Значение ключа. Выражение, возвращающее значение типа ключа словаря или кортеж значений (в зависимости от конфигурации словаря). [`Expression`](/sql-reference/data-types/special-data-types/expression) или [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value_expr` — Значение (значения), возвращаемое, если словарь не содержит строки с ключом, равным `id_expr`. [`Expression`](/sql-reference/data-types/special-data-types/expression) или [`Tuple(T)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает значение атрибута словаря, соответствующее `id_expr`, -в противном случае возвращает значение, переданное в параметре `default_value_expr`. - -:::note -ClickHouse выбрасывает исключение, если не может разобрать значение атрибута или если значение не соответствует типу данных атрибута. -::: - -**Примеры** - -**Пример использования** - -```sql title=Query --- для существующего ключа -SELECT dictGetString('all_types_dict', 'String_value', 1); - --- для отсутствующего ключа возвращает заданное значение по умолчанию -SELECT dictGetStringOrDefault('all_types_dict', 'String_value', 999, 'default'); -``` - -```response title=Response -┌─dictGetString(⋯_value', 1)─┐ -│ тестовая строка │ -└────────────────────────────┘ -┌─dictGetStringO⋯ 999, 'default')─┐ -│ значение по умолчанию │ -└─────────────────────────────────┘ -``` - - -## dictGetUInt16 - -Введена в: v1.1 - -Преобразует значение атрибута словаря к типу данных `UInt16` независимо от конфигурации словаря. - -**Синтаксис** - -```sql -dictGetUInt16(dict_name, attr_name, id_expr) -``` - -**Аргументы** - -* `dict_name` — имя словаря. [`String`](/sql-reference/data-types/string) -* `attr_name` — имя столбца словаря. [`String`](/sql-reference/data-types/string) или [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — значение ключа. Выражение, возвращающее значение типа ключа словаря или кортеж значений (в зависимости от конфигурации словаря). [`Expression`](/sql-reference/data-types/special-data-types/expression) или [`Tuple(T)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает значение атрибута словаря, которое соответствует `id_expr`, -иначе возвращает содержимое элемента ``, указанного для атрибута в конфигурации словаря. - -:::note -ClickHouse выбрасывает исключение, если не может разобрать значение атрибута или если значение не соответствует типу данных атрибута. -::: - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT dictGetUInt16('all_types_dict', 'UInt16_value', 1) -``` - -```response title=Response -┌─dictGetUInt1⋯_value', 1)─┐ -│ 5000 │ -└──────────────────────────┘ -``` - - -## dictGetUInt16OrDefault - -Добавлено в версии v1.1 - -Преобразует значение атрибута словаря к типу данных `UInt16` независимо от конфигурации словаря или возвращает указанное значение по умолчанию, если ключ не найден. - -**Синтаксис** - -```sql -dictGetUInt16OrDefault(dict_name, attr_name, id_expr, default_value_expr) -``` - -**Аргументы** - -* `dict_name` — Имя словаря. [`String`](/sql-reference/data-types/string) -* `attr_name` — Имя столбца словаря. [`String`](/sql-reference/data-types/string) или [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — Значение ключа. Выражение, возвращающее значение типа ключа словаря или значение в виде кортежа (зависит от конфигурации словаря). [`Expression`](/sql-reference/data-types/special-data-types/expression) или [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value_expr` — Значение или значения, возвращаемые, если словарь не содержит строки с ключом `id_expr`. [`Expression`](/sql-reference/data-types/special-data-types/expression) или [`Tuple(T)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает значение атрибута словаря, соответствующее `id_expr`, -в противном случае возвращает значение, переданное в параметре `default_value_expr`. - -:::note -ClickHouse выбрасывает исключение, если не может разобрать значение атрибута или если значение не соответствует типу данных атрибута. -::: - -**Примеры** - -**Пример использования** - -```sql title=Query --- для существующего ключа -SELECT dictGetUInt16('all_types_dict', 'UInt16_value', 1); - --- для несуществующего ключа возвращает указанное значение по умолчанию (0) -SELECT dictGetUInt16OrDefault('all_types_dict', 'UInt16_value', 999, 0); -``` - -```response title=Response -┌─dictGetUInt1⋯_value', 1)─┐ -│ 5000 │ -└──────────────────────────┘ -┌─dictGetUInt1⋯e', 999, 0)─┐ -│ 0 │ -└──────────────────────────┘ -``` - - -## dictGetUInt32 - -Функция появилась в версии v1.1 - -Преобразует значение атрибута словаря к типу данных `UInt32` независимо от конфигурации словаря. - -**Синтаксис** - -```sql -dictGetUInt32(dict_name, attr_name, id_expr) -``` - -**Аргументы** - -* `dict_name` — Имя словаря. [`String`](/sql-reference/data-types/string) -* `attr_name` — Имя столбца словаря. [`String`](/sql-reference/data-types/string) или [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — Значение ключа. Выражение, возвращающее значение типа ключа словаря или кортеж (в зависимости от конфигурации словаря). [`Expression`](/sql-reference/data-types/special-data-types/expression) или [`Tuple(T)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает значение атрибута словаря, которое соответствует `id_expr`, -в противном случае возвращает содержимое элемента ``, указанного для атрибута в конфигурации словаря. - -:::note -ClickHouse выбрасывает исключение, если не удаётся распарсить значение атрибута или если значение не соответствует типу данных атрибута. -::: - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT dictGetUInt32('all_types_dict', 'UInt32_value', 1) -``` - -```response title=Response -┌─dictGetUInt3⋯_value', 1)─┐ -│ 1000000 │ -└──────────────────────────┘ -``` - - -## dictGetUInt32OrDefault - -Добавлена в: v1.1 - -Преобразует значение атрибута словаря к типу данных `UInt32` независимо от конфигурации словаря или возвращает указанное значение по умолчанию, если ключ не найден. - -**Синтаксис** - -```sql -dictGetUInt32OrDefault(dict_name, attr_name, id_expr, default_value_expr) -``` - -**Аргументы** - -* `dict_name` — Имя словаря. [`String`](/sql-reference/data-types/string) -* `attr_name` — Имя столбца словаря. [`String`](/sql-reference/data-types/string) или [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — Значение ключа. Выражение, возвращающее значение типа ключа словаря или кортеж (в зависимости от конфигурации словаря). [`Expression`](/sql-reference/data-types/special-data-types/expression) или [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value_expr` — Значение или значения, возвращаемые, если словарь не содержит строки с ключом `id_expr`. [`Expression`](/sql-reference/data-types/special-data-types/expression) или [`Tuple(T)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает значение атрибута словаря, соответствующее `id_expr`,\ -в противном случае возвращает значение, переданное в параметре `default_value_expr`. - -:::note -ClickHouse выбрасывает исключение, если не может интерпретировать значение атрибута или если значение не соответствует типу данных атрибута. -::: - -**Примеры** - -**Пример использования** - -```sql title=Query --- для существующего ключа -SELECT dictGetUInt32('all_types_dict', 'UInt32_value', 1); - --- для несуществующего ключа возвращает указанное значение по умолчанию (0) -SELECT dictGetUInt32OrDefault('all_types_dict', 'UInt32_value', 999, 0); -``` - -```response title=Response -┌─dictGetUInt3⋯_value', 1)─┐ -│ 1000000 │ -└──────────────────────────┘ -┌─dictGetUInt3⋯e', 999, 0)─┐ -│ 0 │ -└──────────────────────────┘ -``` - - -## dictGetUInt64 - -Добавлена в версии: v1.1 - -Преобразует значение атрибута словаря к типу данных `UInt64` независимо от конфигурации словаря. - -**Синтаксис** - -```sql -dictGetUInt64(dict_name, attr_name, id_expr) -``` - -**Аргументы** - -* `dict_name` — Имя словаря. [`String`](/sql-reference/data-types/string) -* `attr_name` — Имя столбца словаря. [`String`](/sql-reference/data-types/string) или [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — Значение ключа. Выражение, возвращающее значение ключевого типа словаря или кортеж (в зависимости от конфигурации словаря). [`Expression`](/sql-reference/data-types/special-data-types/expression) или [`Tuple(T)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает значение атрибута словаря, соответствующее `id_expr`, -иначе возвращает содержимое элемента ``, указанного для атрибута в конфигурации словаря. - -:::note -ClickHouse генерирует исключение, если не может разобрать значение атрибута или если значение не соответствует типу данных атрибута. -::: - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT dictGetUInt64('all_types_dict', 'UInt64_value', 1) -``` - -```response title=Response -┌─dictGetUInt6⋯_value', 1)─┐ -│ 9223372036854775807 │ -└──────────────────────────┘ -``` - - -## dictGetUInt64OrDefault - -Введена в версии: v1.1 - -Преобразует значение атрибута словаря к типу данных `UInt64` независимо от конфигурации словаря или возвращает переданное значение по умолчанию, если ключ не найден. - -**Синтаксис** - -```sql -dictGetUInt64OrDefault(dict_name, attr_name, id_expr, default_value_expr) -``` - -**Аргументы** - -* `dict_name` — Имя словаря. [`String`](/sql-reference/data-types/string) -* `attr_name` — Имя столбца словаря. [`String`](/sql-reference/data-types/string) или [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — Значение ключа. Выражение, возвращающее значение типа ключа словаря или кортеж (в зависимости от конфигурации словаря). [`Expression`](/sql-reference/data-types/special-data-types/expression) или [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value_expr` — Значение (значения), возвращаемое, если словарь не содержит строки с ключом `id_expr`. [`Expression`](/sql-reference/data-types/special-data-types/expression) или [`Tuple(T)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает значение атрибута словаря, соответствующее значению `id_expr`, -в противном случае возвращает значение, переданное в параметре `default_value_expr`. - -:::note -ClickHouse генерирует исключение, если не может разобрать значение атрибута или если значение не соответствует типу данных атрибута. -::: - -**Примеры** - -**Пример использования** - -```sql title=Query --- для существующего ключа -SELECT dictGetUInt64('all_types_dict', 'UInt64_value', 1); - --- для отсутствующего ключа возвращает указанное значение по умолчанию (0) -SELECT dictGetUInt64OrDefault('all_types_dict', 'UInt64_value', 999, 0); -``` - -```response title=Response -┌─dictGetUInt6⋯_value', 1)─┐ -│ 9223372036854775807 │ -└──────────────────────────┘ -┌─dictGetUInt6⋯e', 999, 0)─┐ -│ 0 │ -└──────────────────────────┘ -``` - - -## dictGetUInt8 - -Введена в версии v1.1 - -Преобразует значение атрибута словаря к типу данных `UInt8` независимо от конфигурации словаря. - -**Синтаксис** - -```sql -dictGetUInt8(dict_name, attr_name, id_expr) -``` - -**Аргументы** - -* `dict_name` — Имя словаря. [`String`](/sql-reference/data-types/string) -* `attr_name` — Имя столбца словаря. [`String`](/sql-reference/data-types/string) или [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — Значение ключа. Выражение, возвращающее значение типа ключа словаря или значение-кортеж (в зависимости от конфигурации словаря). [`Expression`](/sql-reference/data-types/special-data-types/expression) или [`Tuple(T)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает значение атрибута словаря, которое соответствует `id_expr`, -в противном случае возвращает содержимое элемента ``, заданного для атрибута в конфигурации словаря. - -:::note -ClickHouse выбрасывает исключение, если не удаётся интерпретировать значение атрибута или если оно не соответствует типу данных атрибута. -::: - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT dictGetUInt8('all_types_dict', 'UInt8_value', 1) -``` - -```response title=Response -┌─dictGetUInt8⋯_value', 1)─┐ -│ 100 │ -└──────────────────────────┘ -``` - - -## dictGetUInt8OrDefault - -Появилась в версии: v1.1 - -Преобразует значение атрибута словаря к типу данных `UInt8` независимо от конфигурации словаря или возвращает указанное значение по умолчанию, если ключ не найден. - -**Синтаксис** - -```sql -dictGetUInt8OrDefault(dict_name, attr_name, id_expr, default_value_expr) -``` - -**Аргументы** - -* `dict_name` — Имя словаря. [`String`](/sql-reference/data-types/string) -* `attr_name` — Имя столбца словаря. [`String`](/sql-reference/data-types/string) или [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — Значение ключа. Выражение, возвращающее значение типа ключа словаря или кортеж (в зависимости от конфигурации словаря). [`Expression`](/sql-reference/data-types/special-data-types/expression) или [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value_expr` — Значение (значения), которое возвращается, если словарь не содержит строки с ключом `id_expr`. [`Expression`](/sql-reference/data-types/special-data-types/expression) или [`Tuple(T)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает значение атрибута словаря, соответствующее `id_expr`, -в противном случае — значение, переданное в параметре `default_value_expr`. - -:::note -ClickHouse выбрасывает исключение, если не может разобрать значение атрибута или если значение не соответствует типу данных атрибута. -::: - -**Примеры** - -**Пример использования** - -```sql title=Query --- для ключа, который существует -SELECT dictGetUInt8('all_types_dict', 'UInt8_value', 1); - --- для ключа, который не существует, возвращает переданное значение по умолчанию (0) -SELECT dictGetUInt8OrDefault('all_types_dict', 'UInt8_value', 999, 0); -``` - -```response title=Response -┌─dictGetUInt8⋯_value', 1)─┐ -│ 100 │ -└──────────────────────────┘ -┌─dictGetUInt8⋯e', 999, 0)─┐ -│ 0 │ -└──────────────────────────┘ -``` - - -## dictGetUUID - -Появилась в версии: v1.1 - -Преобразует значение атрибута словаря в тип данных `UUID` независимо от конфигурации словаря. - -**Синтаксис** - -```sql -dictGetUUID(dict_name, attr_name, id_expr) -``` - -**Аргументы** - -* `dict_name` — Имя словаря. [`String`](/sql-reference/data-types/string) -* `attr_name` — Имя столбца словаря. [`String`](/sql-reference/data-types/string) или [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — Значение ключа. Выражение, возвращающее значение типа ключа словаря или кортеж (в зависимости от конфигурации словаря). [`Expression`](/sql-reference/data-types/special-data-types/expression) или [`Tuple(T)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает значение атрибута словаря, соответствующее `id_expr`, -иначе возвращает содержимое элемента ``, указанного для атрибута в конфигурации словаря. - -:::note -ClickHouse выбрасывает исключение, если не удаётся интерпретировать значение атрибута или значение не соответствует типу данных атрибута. -::: - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT dictGetUUID('all_types_dict', 'UUID_value', 1) -``` - -```response title=Response -┌─dictGetUUID(⋯_value', 1)─────────────┐ -│ 123e4567-e89b-12d3-a456-426614174000 │ -└──────────────────────────────────────┘ -``` - - -## dictGetUUIDOrDefault - -Добавлена в версии: v1.1 - -Преобразует значение атрибута словаря к типу данных `UUID` независимо от конфигурации словаря или возвращает указанное значение по умолчанию, если ключ не найден. - -**Синтаксис** - -```sql -dictGetUUIDOrDefault(dict_name, attr_name, id_expr, default_value_expr) -``` - -**Аргументы** - -* `dict_name` — Имя словаря. [`String`](/sql-reference/data-types/string) -* `attr_name` — Имя столбца словаря. [`String`](/sql-reference/data-types/string) или [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — Значение ключа. Выражение, возвращающее значение типа ключа словаря или кортеж (в зависимости от конфигурации словаря). [`Expression`](/sql-reference/data-types/special-data-types/expression) или [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value_expr` — Значение (значения), возвращаемое, если словарь не содержит строки с ключом `id_expr`. [`Expression`](/sql-reference/data-types/special-data-types/expression) или [`Tuple(T)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает значение атрибута словаря, соответствующее `id_expr`, -в противном случае возвращает значение, переданное в параметре `default_value_expr`. - -:::note -ClickHouse выбрасывает исключение, если не может разобрать значение атрибута или если значение не соответствует типу данных атрибута. -::: - -**Примеры** - -**Пример использования** - -```sql title=Query --- для существующего ключа -SELECT dictGetUUID('all_types_dict', 'UUID_value', 1); - --- для несуществующего ключа возвращает переданное значение по умолчанию -SELECT dictGetUUIDOrDefault('all_types_dict', 'UUID_value', 999, '00000000-0000-0000-0000-000000000000'::UUID); -``` - -```response title=Response -┌─dictGetUUID('all_t⋯ 'UUID_value', 1)─┐ -│ 550e8400-e29b-41d4-a716-446655440000 │ -└──────────────────────────────────────┘ -┌─dictGetUUIDOrDefa⋯000000000000'::UUID)─┐ -│ 00000000-0000-0000-0000-000000000000 │ -└────────────────────────────────────────┘ -``` - - -## dictHas - -Добавлена в версии: v1.1 - -Проверяет, присутствует ли ключ в словаре. - -**Синтаксис** - -```sql -dictHas('dict_name', id_expr) -``` - -**Аргументы** - -* `dict_name` — Имя словаря. [`String`](/sql-reference/data-types/string) -* `id_expr` — Значение ключа. [`const String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает `1`, если ключ существует, в противном случае — `0`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Проверка существования ключа в словаре** - -```sql title=Query --- рассмотрим такой иерархический словарь: --- 0 (корень) --- └── 1 (уровень 1 — узел 1) --- ├── 2 (уровень 2 — узел 2) --- │ ├── 4 (уровень 3 — узел 4) --- │ └── 5 (уровень 3 — узел 5) --- └── 3 (уровень 2 — узел 3) --- └── 6 (уровень 3 — узел 6) - -SELECT dictHas('hierarchical_dictionary', 2); -SELECT dictHas('hierarchical_dictionary', 7); -``` - -```response title=Response -┌─dictHas('hie⋯ionary', 2)─┐ -│ 1 │ -└──────────────────────────┘ -┌─dictHas('hie⋯ionary', 7)─┐ -│ 0 │ -└──────────────────────────┘ -``` - - -## dictIsIn - -Добавлено в: v1.1 - -Проверяет наличие предка у ключа по всей иерархической цепочке в словаре. - -**Синтаксис** - -```sql -dictIsIn(dict_name, child_id_expr, ancestor_id_expr) -``` - -**Аргументы** - -* `dict_name` — имя словаря. [`String`](/sql-reference/data-types/string) -* `child_id_expr` — проверяемый ключ. [`String`](/sql-reference/data-types/string) -* `ancestor_id_expr` — предполагаемый предок ключа `child_id_expr`. [`const String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает `0`, если `child_id_expr` не является потомком `ancestor_id_expr`, `1`, если `child_id_expr` является потомком `ancestor_id_expr` или если `child_id_expr` совпадает с `ancestor_id_expr`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Проверка иерархической связи** - -```sql title=Query --- корректная иерархия -SELECT dictIsIn('hierarchical_dictionary', 6, 3) - --- некорректная иерархия -SELECT dictIsIn('hierarchical_dictionary', 3, 5) -``` - -```response title=Response -┌─dictIsIn('hi⋯ary', 6, 3)─┐ -│ 1 │ -└──────────────────────────┘ -┌─dictIsIn('hi⋯ary', 3, 5)─┐ -│ 0 │ -└──────────────────────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/financial-functions.md b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/financial-functions.md index 2f36d260581..8139871bd8e 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/financial-functions.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/financial-functions.md @@ -1,14 +1,12 @@ --- description: 'Документация по финансовым функциям' -sidebar_label: 'Финансы' +sidebar_label: 'Финансовые' slug: /sql-reference/functions/financial-functions title: 'Финансовые функции' -keywords: ['Финансы', 'норма доходности', 'чистая приведённая стоимость'] +keywords: ['Финансовые', 'норма доходности', 'чистая приведённая стоимость'] doc_type: 'reference' --- - - # Финансовые функции :::note @@ -16,246 +14,16 @@ doc_type: 'reference' ::: {/* - Содержимое расположенных ниже тегов заменяется во время сборки фреймворка документации - документацией, сгенерированной из system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. + Содержимое тегов ниже во время сборки фреймворка документации + заменяется документацией, сгенерированной из system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. См.: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## financialInternalRateOfReturn - -Добавлена в: v25.7 - -Вычисляет внутреннюю норму доходности (IRR) для ряда денежных потоков, возникающих через равные промежутки времени. -IRR — это ставка дисконтирования, при которой чистая приведённая стоимость (NPV) равна нулю. - -IRR определяется как решение следующего уравнения: - -$$ -\sum_{i=0}^n \frac{cashflow_i}{(1 + irr)^i} = 0 -$$ - -**Синтаксис** - -```sql -financialInternalRateOfReturn(cashflows[, guess]) -``` - -**Аргументы** - -* `cashflows` — массив денежных потоков. Каждое значение представляет платёж (отрицательное значение) или доход (положительное значение). [`Array(Int8/16/32/64)`](/sql-reference/data-types/array) или [`Array(Float*)`](/sql-reference/data-types/array) -* `[, guess]` — необязательное начальное приближение (константа) для внутренней нормы доходности (по умолчанию 0.1). [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает внутреннюю норму доходности или `NaN`, если вычисление не может сойтись, входной массив пуст или содержит только один элемент, все денежные потоки равны нулю либо происходят другие ошибки вычисления. [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**simple_example** - -```sql title=Query -SELECT financialInternalRateOfReturn([-100, 39, 59, 55, 20]) -``` - -```response title=Response -0.2809484211599611 -``` - -**simple_example_with_guess** - -```sql title=Query -SELECT financialInternalRateOfReturn([-100, 39, 59, 55, 20], 0.1) -``` - -```response title=Response -0.2809484211599611 -``` - - -## financialInternalRateOfReturnExtended {#financialInternalRateOfReturnExtended} - -Введена в версии: v25.7 - -Вычисляет расширенную внутреннюю норму доходности (XIRR) для серии денежных потоков с нерегулярными интервалами. XIRR — это ставка дисконтирования, при которой чистая приведённая стоимость (NPV) всех денежных потоков равна нулю. - -XIRR решает следующее уравнение (пример для `ACT_365F`): - -$$ -\sum_{i=0}^n \frac{cashflow_i}{(1 + rate)^{(date_i - date_0)/365}} = 0 -$$ - -Массивы должны быть отсортированы по датам в порядке возрастания. Даты должны быть уникальными. - -**Синтаксис** - -```sql -financialInternalRateOfReturnExtended(cashflow, date [, guess, daycount]) -``` - -**Аргументы** - -- `cashflow` — Массив денежных потоков, соответствующих датам во втором параметре. [`Array(Int8/16/32/64)`](/sql-reference/data-types/array) или [`Array(Float*)`](/sql-reference/data-types/array) -- `date` — Отсортированный массив уникальных дат, соответствующих денежным потокам. [`Array(Date)`](/sql-reference/data-types/array) или [`Array(Date32)`](/sql-reference/data-types/array) -- `[, guess]` — Необязательный параметр. Начальное приближение (константа) для вычисления XIRR. [`Float*`](/sql-reference/data-types/float) -- `[, daycount]` — - Необязательный параметр. Соглашение о подсчёте дней (по умолчанию 'ACT_365F'). Поддерживаемые значения: -- 'ACT_365F' - Actual/365 Fixed: использует фактическое количество дней между датами, делённое на 365 -- 'ACT_365_25' - Actual/365.25: использует фактическое количество дней между датами, делённое на 365.25 - [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает значение XIRR. Если вычисление невозможно, возвращает NaN. [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**simple_example** - -```sql title=Запрос -SELECT financialInternalRateOfReturnExtended([-10000, 5750, 4250, 3250], [toDate('2020-01-01'), toDate('2020-03-01'), toDate('2020-10-30'), toDate('2021-02-15')]) -``` - -```response title=Ответ -0.6342972615260243 -``` - -**simple_example_with_guess** - -```sql title=Запрос -SELECT financialInternalRateOfReturnExtended([-10000, 5750, 4250, 3250], [toDate('2020-01-01'), toDate('2020-03-01'), toDate('2020-10-30'), toDate('2021-02-15')], 0.5) -``` - -```response title=Ответ -0.6342972615260243 -``` - -**simple_example_daycount** - -```sql title=Запрос -SELECT round(financialInternalRateOfReturnExtended([100000, -110000], [toDate('2020-01-01'), toDate('2021-01-01')], 0.1, 'ACT_365_25'), 6) AS xirr_365_25 -``` - -```response title=Ответ -0.099785 -``` - - -## financialNetPresentValue - -Появилась в версии: v25.7 - -Вычисляет чистую приведённую стоимость (Net Present Value, NPV) ряда денежных потоков при условии равных временных интервалов между каждым денежным потоком. - -Вариант по умолчанию (`start_from_zero` = true): - -$$ -\sum_{i=0}^{N-1} \frac{values_i}{(1 + rate)^i} -$$ - -Вариант, совместимый с Excel (`start_from_zero` = false): - -$$ -\sum_{i=1}^{N} \frac{values_i}{(1 + rate)^i} -$$ - -**Синтаксис** - -```sql -financialNetPresentValue(rate, cashflows[, start_from_zero]) -``` - -**Аргументы** - -* `rate` — Ставка дисконтирования, которая будет применена. [`Float*`](/sql-reference/data-types/float) -* `cashflows` — Массив денежных потоков. Каждое значение представляет собой платеж (отрицательное значение) или доход (положительное значение). [`Array(Int8/16/32/64)`](/sql-reference/data-types/array) или [`Array(Float*)`](/sql-reference/data-types/array) -* `[, start_from_zero]` — Необязательный логический параметр, определяющий, начинать ли расчет NPV с периода `0` (true) или с периода `1` (false, как в Excel). Значение по умолчанию: true. [`Bool`](/sql-reference/data-types/boolean) - -**Возвращаемое значение** - -Возвращает чистую приведенную стоимость в виде значения типа Float64. [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**default_calculation** - -```sql title=Query -SELECT financialNetPresentValue(0.08, [-40000., 5000., 8000., 12000., 30000.]) -``` - -```response title=Response -3065.2226681795255 -``` - -**excel_compatible_calculation** - -```sql title=Query -SELECT financialNetPresentValue(0.08, [-40000., 5000., 8000., 12000., 30000.], false) -``` - -```response title=Response -2838.1691372032656 -``` - - -## financialNetPresentValueExtended {#financialNetPresentValueExtended} - -Введена в версии: v25.7 - -Вычисляет расширенную чистую приведённую стоимость (XNPV) для серии денежных потоков, происходящих через нерегулярные интервалы. XNPV учитывает конкретное время каждого денежного потока при расчёте приведённой стоимости. - -Уравнение XNPV для `ACT_365F`: - -$$ -XNPV=\sum_{i=1}^n \frac{cashflow_i}{(1 + rate)^{(date_i - date_0)/365}} -$$ - -Массивы должны быть отсортированы по дате в порядке возрастания. Даты должны быть уникальными. - -**Синтаксис** - -```sql -financialNetPresentValueExtended(rate, cashflows, dates[, daycount]) -``` - -**Аргументы** - -- `rate` — Применяемая ставка дисконтирования. [`Float*`](/sql-reference/data-types/float) -- `cashflows` — Массив денежных потоков. Каждое значение представляет платёж (отрицательное значение) или доход (положительное значение). Должен содержать как минимум одно положительное и одно отрицательное значение. [`Array(Int8/16/32/64)`](/sql-reference/data-types/array) или [`Array(Float*)`](/sql-reference/data-types/array) -- `dates` — Массив дат, соответствующих каждому денежному потоку. Должен иметь тот же размер, что и массив cashflows. [`Array(Date)`](/sql-reference/data-types/array) или [`Array(Date32)`](/sql-reference/data-types/array) -- `[, daycount]` — Необязательное соглашение о подсчёте дней. Поддерживаемые значения: `'ACT_365F'` (по умолчанию) — Actual/365 Fixed, `'ACT_365_25'` — Actual/365.25. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает чистую приведённую стоимость в виде значения Float64. [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Базовое использование** - -```sql title=Запрос -SELECT financialNetPresentValueExtended(0.1, [-10000., 5750., 4250., 3250.], [toDate('2020-01-01'), toDate('2020-03-01'), toDate('2020-10-30'), toDate('2021-02-15')]) -``` - -```response title=Ответ -2506.579458169746 -``` - -**Использование другого соглашения о подсчёте дней** - -```sql title=Запрос -SELECT financialNetPresentValueExtended(0.1, [-10000., 5750., 4250., 3250.], [toDate('2020-01-01'), toDate('2020-03-01'), toDate('2020-10-30'), toDate('2021-02-15')], 'ACT_365_25') -``` - -```response title=Ответ -2507.067268742502 -``` - - +{/*AUTOGENERATED_END*/ } ## Связанные ресурсы {#related-resources} -- [Видео о финансовых функциях в ClickHouse](https://www.youtube.com/watch?v=BePLPVa0w_o) +- [Видео о финансовых функциях в ClickHouse](https://www.youtube.com/watch?v=BePLPVa0w_o) \ No newline at end of file diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/functions-for-nulls.md b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/functions-for-nulls.md index ff3e779ecad..7c75b1bed3f 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/functions-for-nulls.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/functions-for-nulls.md @@ -3,477 +3,18 @@ description: 'Документация по функциям для работы sidebar_label: 'Nullable' slug: /sql-reference/functions/functions-for-nulls title: 'Функции для работы со значениями Nullable' -keywords: ['nullable', 'functions'] +keywords: ['nullable', 'функции'] doc_type: 'reference' --- - - -# Функции для работы со значениями типа Nullable +# Функции для работы с nullable-значениями {/* - Внутреннее содержимое тегов ниже во время сборки фреймворка документации - заменяется на документы, сгенерированные из system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. + Внутреннее содержимое тегов ниже на этапе сборки фреймворка документации + заменяется документацией, сгенерированной из system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. См.: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## assumeNotNull - -Впервые представлена в версии v1.1 - -Возвращает соответствующее значение не-`Nullable` типа для значения типа [`Nullable`](../data-types/nullable.md). -Если исходное значение равно `NULL`, может быть возвращён произвольный результат. - -См. также: функции [`ifNull`](#ifNull) и [`coalesce`](#coalesce). - -**Синтаксис** - -```sql -assumeNotNull(x) -``` - -**Аргументы** - -* `x` — исходное значение любого nullable-типа. [`Nullable(T)`](/sql-reference/data-types/nullable) - -**Возвращаемое значение** - -Возвращает значение не-nullable типа, если исходное значение не равно `NULL`, в противном случае — произвольное значение, если входное значение равно `NULL`. [`Any`](/sql-reference/data-types) - -**Примеры** - -**Пример использования** - -```sql title=Query -CREATE TABLE t_null (x Int8, y Nullable(Int8)) -ENGINE=MergeTree() -ORDER BY x; - -INSERT INTO t_null VALUES (1, NULL), (2, 3); - -SELECT assumeNotNull(y) FROM table; -SELECT toTypeName(assumeNotNull(y)) FROM t_null; -``` - -```response title=Response -┌─assumeNotNull(y)─┐ -│ 0 │ -│ 3 │ -└──────────────────┘ -┌─toTypeName(assumeNotNull(y))─┐ -│ Int8 │ -│ Int8 │ -└──────────────────────────────┘ -``` - - -## coalesce - -Добавлено в: v1.1 - -Возвращает левый аргумент, не равный `NULL`. - -**Синтаксис** - -```sql -coalesce(x[, y, ...]) -``` - -**Аргументы** - -* `x[, y, ...]` — Произвольное количество параметров простого (несоставного) типа. Все параметры должны иметь взаимно совместимые между собой типы данных. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает первый аргумент, не равный `NULL`, иначе `NULL`, если все аргументы равны `NULL`. [`Any`](/sql-reference/data-types) или [`NULL`](/sql-reference/syntax#null) - -**Примеры** - -**Пример использования** - -```sql title=Query --- Рассмотрим список контактов, в котором может быть указано несколько способов связи с клиентом. - -CREATE TABLE aBook -( - name String, - mail Nullable(String), - phone Nullable(String), - telegram Nullable(UInt32) -) -ENGINE = MergeTree -ORDER BY tuple(); - -INSERT INTO aBook VALUES ('client 1', NULL, '123-45-67', 123), ('client 2', NULL, NULL, NULL); - --- Поля mail и phone имеют тип String, а поле telegram — тип UInt32, поэтому его необходимо преобразовать в String. - --- Получение первого доступного способа связи с клиентом из списка контактов - -SELECT name, coalesce(mail, phone, CAST(telegram,'Nullable(String)')) FROM aBook; -``` - -```response title=Response -┌─имя──────┬─coalesce(mail, phone, CAST(telegram, 'Nullable(String)'))─┐ -│ клиент 1 │ 123-45-67 │ -│ клиент 2 │ ᴺᵁᴸᴸ │ -└──────────┴───────────────────────────────────────────────────────────┘ -``` - - -## firstNonDefault - -Появилась в версии: v25.9 - -Возвращает первое значение из набора аргументов, не равное значению по умолчанию - -**Синтаксис** - -```sql -``` - -**Аргументы** - -* `arg1` — первый аргумент для проверки - `arg2` — второй аргумент для проверки - `...` — дополнительные аргументы для проверки - -**Возвращаемое значение** - -Тип результата — супертип всех аргументов - -**Примеры** - -**целые числа** - -```sql title=Query -SELECT firstNonDefault(0, 1, 2) -``` - -```response title=Response -1 -``` - -**строки** - -```sql title=Query -SELECT firstNonDefault('', 'hello', 'world') -``` - -```response title=Response -'привет' -``` - -**Значения NULL** - -```sql title=Query -SELECT firstNonDefault(NULL, 0 :: UInt8, 1 :: UInt8) -``` - -```response title=Response -1 -``` - -**нулевое значение для Nullable** - -```sql title=Query -SELECT firstNonDefault(NULL, 0 :: Nullable(UInt8), 1 :: Nullable(UInt8)) -``` - -```response title=Response -0 -``` - - -## ifNull - -Появилось в версии v1.1 - -Возвращает альтернативное значение, если первый аргумент равен `NULL`. - -**Синтаксис** - -```sql -ifNull(x, alt) -``` - -**Аргументы** - -* `x` — Значение, проверяемое на `NULL`. [`Any`](/sql-reference/data-types) -* `alt` — Значение, которое функция возвращает, если `x` равно `NULL`. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает значение `x`, если оно не равно `NULL`, в противном случае — `alt`. [`Any`](/sql-reference/data-types) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT ifNull('a', 'b'), ifNull(NULL, 'b'); -``` - -```response title=Response -┌─ifNull('a', 'b')─┬─ifNull(NULL, 'b')─┐ -│ a │ b │ -└──────────────────┴───────────────────┘ -``` - - -## isNotNull - -Впервые появилась в версии: v1.1 - -Проверяет, что аргумент не является `NULL`. - -См. также: оператор [`IS NOT NULL`](/sql-reference/operators#is_not_null). - -**Синтаксис** - -```sql -isNotNull(x) -``` - -**Аргументы** - -* `x` — Значение несоставного типа данных. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает `1`, если `x` не `NULL`, иначе `0`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -CREATE TABLE t_null -( - x Int32, - y Nullable(Int32) -) -ENGINE = MergeTree -ORDER BY tuple(); - -INSERT INTO t_null VALUES (1, NULL), (2, 3); - -SELECT x FROM t_null WHERE isNotNull(y); -``` - -```response title=Response -┌─x─┐ -│ 2 │ -└───┘ -``` - - -## isNull - -Добавлена в: v1.1 - -Проверяет, является ли аргумент `NULL`. - -См. также: оператор [`IS NULL`](/sql-reference/operators#is_null). - -**Синтаксис** - -```sql -isNull(x) -``` - -**Аргументы** - -* `x` — значение простого (несоставного) типа данных. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает `1`, если `x` равно `NULL`, в противном случае — `0`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -CREATE TABLE t_null -( - x Int32, - y Nullable(Int32) -) -ENGINE = MergeTree -ORDER BY tuple(); - -INSERT INTO t_null VALUES (1, NULL), (2, 3); - -SELECT x FROM t_null WHERE isNull(y); -``` - -```response title=Response -┌─x─┐ -│ 1 │ -└───┘ -``` - - -## isNullable - -Введена в версии v22.7 - -Проверяет, является ли тип данных аргумента `Nullable` (то есть допускает значения `NULL`). - -**Синтаксис** - -```sql -isNullable(x) -``` - -**Аргументы** - -* `x` — значение любого типа данных. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает `1`, если `x` имеет тип данных `Nullable`, иначе `0`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -CREATE TABLE tab ( - ordinary_col UInt32, - nullable_col Nullable(UInt32) -) -ENGINE = MergeTree -ORDER BY tuple(); -INSERT INTO tab (ordinary_col, nullable_col) VALUES (1,1), (2, 2), (3,3); -SELECT isNullable(ordinary_col), isNullable(nullable_col) FROM tab; -``` - -```response title=Response -┌───isNullable(ordinary_col)──┬───isNullable(nullable_col)──┐ -│ 0 │ 1 │ -│ 0 │ 1 │ -│ 0 │ 1 │ -└─────────────────────────────┴─────────────────────────────┘ -``` - - -## isZeroOrNull - -Добавлена в: v20.3 - -Проверяет, равен ли аргумент нулю (`0`) или имеет значение `NULL`. - -**Синтаксис** - -```sql -isZeroOrNull(x) -``` - -**Аргументы** - -* `x` — числовое значение. [`UInt`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает `1`, если `x` равно `NULL` или нулю, в противном случае — `0`. [`UInt8/16/32/64`](/sql-reference/data-types/int-uint) или [`Float32/Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -CREATE TABLE t_null -( - x Int32, - y Nullable(Int32) -) -ENGINE = MergeTree -ORDER BY tuple(); - -INSERT INTO t_null VALUES (1, NULL), (2, 0), (3, 3); - -SELECT x FROM t_null WHERE isZeroOrNull(y); -``` - -```response title=Response -┌─x─┐ -│ 1 │ -│ 2 │ -└───┘ -``` - - -## nullIf - -Впервые появилась в версии v1.1 - -Возвращает `NULL`, если оба аргумента равны. - -**Синтаксис** - -```sql -nullIf(x, y) -``` - -**Аргументы** - -* `x` — первое значение. [`Any`](/sql-reference/data-types) -* `y` — второе значение. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает `NULL`, если оба аргумента равны, в противном случае — первый аргумент. [`NULL`](/sql-reference/syntax#null) или [`Nullable(x)`](/sql-reference/data-types/nullable) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT nullIf(1, 1), nullIf(1, 2); -``` - -```response title=Response -┌─nullIf(1, 1)─┬─nullIf(1, 2)─┐ -│ ᴺᵁᴸᴸ │ 1 │ -└──────────────┴──────────────┘ -``` - - -## toNullable - -Введён в версии v1.1 - -Преобразует тип переданного аргумента в `Nullable`. - -**Синтаксис** - -```sql -toNullable(x) -``` - -**Аргументы** - -* `x` — значение любого несоставного типа. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает входное значение, но типа `Nullable`. [`Nullable(Any)`](/sql-reference/data-types/nullable) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT toTypeName(10), toTypeName(toNullable(10)); -``` - -```response title=Response -┌─toTypeName(10)─┬─toTypeName(toNullable(10))─┐ -│ UInt8 │ Nullable(UInt8) │ -└────────────────┴────────────────────────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/hash-functions.md b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/hash-functions.md index 177c34e8f6d..c94a2cbcfdd 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/hash-functions.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/hash-functions.md @@ -6,18 +6,16 @@ title: 'Хеш-функции' doc_type: 'reference' --- - - # Хеш-функции Хеш-функции можно использовать для детерминированного псевдослучайного перемешивания элементов. -Simhash — это хеш-функция, которая возвращает близкие значения хеша для близких (похожих) аргументов. +Simhash — это хеш-функция, которая возвращает близкие хеш-значения для близких (похожих) аргументов. Большинство хеш-функций принимают любое количество аргументов любых типов. :::note -Хеш от NULL равен NULL. Чтобы получить хеш Nullable-столбца, отличный от NULL, оберните его в tuple: +Хеш от значения NULL равен NULL. Чтобы получить отличный от NULL хеш для столбца типа Nullable, оберните его в кортеж: ```sql SELECT cityHash64(tuple(NULL)) @@ -26,2641 +24,15 @@ SELECT cityHash64(tuple(NULL)) ::: :::note -Для вычисления хеша всего содержимого таблицы используйте `sum(cityHash64(tuple(*)))` (или другую хеш-функцию). `tuple` обеспечивает, что строки со значениями NULL не будут пропущены. `sum` обеспечивает, что порядок строк не имеет значения. +Чтобы вычислить хеш всего содержимого таблицы, используйте `sum(cityHash64(tuple(*)))` (или другую хеш‑функцию). `tuple` гарантирует, что строки со значениями NULL не будут пропущены. `sum` гарантирует, что порядок строк не имеет значения. ::: {/* - Содержимое тегов ниже заменяется при сборке фреймворка документации - документацией, сгенерированной на основе system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. + Внутреннее содержимое нижеуказанных тегов заменяется на этапе сборки фреймворка документации + документацией, сгенерированной из system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. См.: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## BLAKE3 - -Введено в: v22.10 - -Вычисляет хеш-строку BLAKE3 и возвращает полученный набор байт в виде FixedString. -Эта криптографическая хеш-функция реализована в ClickHouse с использованием библиотеки BLAKE3 на Rust. -Функция достаточно быстрая и демонстрирует примерно в два раза более высокую производительность по сравнению с SHA-2, при этом генерирует хеши той же длины, что и SHA-256. -Она возвращает хеш BLAKE3 в виде массива байт типа FixedString(32). - -**Синтаксис** - -```sql -BLAKE3(message) -``` - -**Аргументы** - -* `message` — входная строка для хеширования. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает 32-байтовый хеш BLAKE3 входной строки в виде строки фиксированной длины. [`FixedString(32)`](/sql-reference/data-types/fixedstring) - -**Примеры** - -**hash** - -```sql title=Query -SELECT hex(BLAKE3('ABC')) -``` - -```response title=Response -┌─hex(BLAKE3('ABC'))───────────────────────────────────────────────┐ -│ D1717274597CF0289694F75D96D444B992A096F1AFD8E7BBFA6EBB1D360FEDFC │ -└──────────────────────────────────────────────────────────────────┘ -``` - - -## MD4 - -Добавлено в: v21.11 - -Вычисляет хеш MD4 для заданной строки. - -**Синтаксис** - -```sql -MD4(s) -``` - -**Аргументы** - -* `s` — входная строка для хеширования. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает хеш MD4 для заданной входной строки в виде строки фиксированной длины. [`FixedString(16)`](/sql-reference/data-types/fixedstring) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT HEX(MD4('abc')); -``` - -```response title=Response -┌─hex(MD4('abc'))──────────────────┐ -│ A448017AAF21D8525FC10AE87AA6729D │ -└──────────────────────────────────┘ -``` - - -## MD5 - -Появилось в версии: v1.1 - -Вычисляет хэш MD5 для заданной строки. - -**Синтаксис** - -```sql -MD5(s) -``` - -**Аргументы** - -* `s` — входная строка для хеширования. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает MD5-хеш заданной входной строки в виде строки фиксированной длины. [`FixedString(16)`](/sql-reference/data-types/fixedstring) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT HEX(MD5('abc')); -``` - -```response title=Response -┌─hex(MD5('abc'))──────────────────┐ -│ 900150983CD24FB0D6963F7D28E17F72 │ -└──────────────────────────────────┘ -``` - - -## RIPEMD160 - -Появилась в версии: v24.10 - -Вычисляет хэш RIPEMD-160 для заданной строки. - -**Синтаксис** - -```sql -RIPEMD160(s) -``` - -**Аргументы** - -* `s` — Входная строка для хеширования. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает хеш RIPEMD160 для заданной строки в виде строки фиксированной длины. [`FixedString(20)`](/sql-reference/data-types/fixedstring) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT HEX(RIPEMD160('Быстрая коричневая лиса перепрыгивает через ленивую собаку')); -``` - -```response title=Response -┌─HEX(RIPEMD160('The quick brown fox jumps over the lazy dog'))─┐ -│ 37F332F68DB77BD9D7EDD4969571AD671CF9DD3B │ -└───────────────────────────────────────────────────────────────┘ -``` - - -## SHA1 - -Появилось в версии v1.1 - -Вычисляет хэш SHA1 для заданной строки. - -**Синтаксис** - -```sql -SHA1(s) -``` - -**Аргументы** - -* `s` — входная строка для хеширования [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает SHA1-хеш заданной входной строки в виде строки фиксированной длины. [`FixedString(20)`](/sql-reference/data-types/fixedstring) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT HEX(SHA1('abc')); -``` - -```response title=Response -┌─hex(SHA1('abc'))─────────────────────────┐ -│ A9993E364706816ABA3E25717850C26C9CD0D89D │ -└──────────────────────────────────────────┘ -``` - - -## SHA224 - -Добавлена в версии: v1.1 - -Вычисляет хэш SHA224 для указанной строки. - -**Синтаксис** - -```sql -SHA224(s) -``` - -**Аргументы** - -* `s` — Входное значение для хеширования. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает хеш SHA224 для указанной входной строки в виде строки фиксированной длины. [`FixedString(28)`](/sql-reference/data-types/fixedstring) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT HEX(SHA224('abc')); -``` - -```response title=Response -┌─hex(SHA224('abc'))───────────────────────────────────────┐ -│ 23097D223405D8228642A477BDA255B32AADBCE4BDA0B3F7E36C9DA7 │ -└──────────────────────────────────────────────────────────┘ -``` - - -## SHA256 - -Добавлено в версии: v1.1 - -Вычисляет хеш SHA256 для заданной строки. - -**Синтаксис** - -```sql -SHA256(s) -``` - -**Аргументы** - -* `s` — входная строка для хеширования. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает SHA256-хеш заданной входной строки в виде строки фиксированной длины. [`FixedString(32)`](/sql-reference/data-types/fixedstring) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT HEX(SHA256('abc')); -``` - -```response title=Response -┌─hex(SHA256('abc'))───────────────────────────────────────────────┐ -│ BA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61F20015AD │ -└──────────────────────────────────────────────────────────────────┘ -``` - - -## SHA384 - -Добавлено в версии: v1.1 - -Вычисляет хеш SHA384 для указанной строки. - -**Синтаксис** - -```sql -SHA384(s) -``` - -**Аргументы** - -* `s` — входная строка для хеширования. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает хеш SHA384 для заданной входной строки в виде строки фиксированной длины. [`FixedString(48)`](/sql-reference/data-types/fixedstring) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT HEX(SHA384('abc')); -``` - -```response title=Response -┌─hex(SHA384('abc'))───────────────────────────────────────────────────────────────────────────────┐ -│ CB00753F45A35E8BB5A03D699AC65007272C32AB0EDED1631A8B605A43FF5BED8086072BA1E7CC2358BAECA134C825A7 │ -└──────────────────────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## SHA512 - -Добавлено в версии v1.1 - -Вычисляет хеш SHA512 для указанной строки. - -**Синтаксис** - -```sql -SHA512(s) -``` - -**Аргументы** - -* `s` — входная строка для хеширования [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает SHA512-хеш переданной входной строки в виде строки фиксированной длины [`FixedString(64)`](/sql-reference/data-types/fixedstring). - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT HEX(SHA512('abc')); -``` - -```response title=Response -┌─hex(SHA512('abc'))───────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ -│ DDAF35A193617ABACC417349AE20413112E6FA4E89A97EA20A9EEEE64B55D39A2192992A274FC1A836BA3C23A3FEEBBD454D4423643CE80E2A9AC94FA54CA49F │ -└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## SHA512_256 - -Появилось в версии: v1.1 - -Вычисляет хэш SHA512_256 для заданной строки. - -**Синтаксис** - -```sql -SHA512_256(s) -``` - -**Аргументы** - -* `s` — входная строка для хеширования. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает хеш-значение SHA512_256 для указанной входной строки в виде строки фиксированной длины. [`FixedString(32)`](/sql-reference/data-types/fixedstring) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT HEX(SHA512_256('abc')); -``` - -```response title=Response -┌─hex(SHA512_256('abc'))───────────────────────────────────────────┐ -│ 53048E2681941EF99B2E29B76B4C7DABE4C2D0C634FC6D46E0E2F13107E7AF23 │ -└──────────────────────────────────────────────────────────────────┘ -``` - - -## URLHash - -Введена в: v1.1 - -Быстрая, достаточно качественная некриптографическая хеш‑функция для строки, полученной из URL с использованием некоторого вида нормализации. - -Эта хеш‑функция имеет два режима: - -| Mode | Description | -| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `URLHash(url)` | Вычисляет хеш из строки без одного из завершающих символов `/`, `?` или `#` в конце, если такой символ присутствует. | -| `URLHash(url, N)` | Вычисляет хеш из строки до N‑го уровня в иерархии URL, без одного из завершающих символов `/`, `?` или `#` в конце, если такой символ присутствует. Уровни такие же, как в `URLHierarchy`. | - -**Синтаксис** - -```sql -URLHash(url[, N]) -``` - -**Аргументы** - -* `url` — строка URL для хеширования. [`String`](/sql-reference/data-types/string) -* `N` — Необязательный. Уровень в иерархии URL. [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает вычисленное хеш-значение `url`. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT URLHash('https://www.clickhouse.com') -``` - -```response title=Response -┌─URLHash('htt⋯house.com')─┐ -│ 13614512636072854701 │ -└──────────────────────────┘ -``` - -**Хэш URL с заданным уровнем** - -```sql title=Query -SELECT URLHash('https://www.clickhouse.com/docs', 0); -SELECT URLHash('https://www.clickhouse.com/docs', 1); -``` - -```response title=Response --- хеш https://www.clickhouse.com -┌─URLHash('htt⋯m/docs', 0)─┐ -│ 13614512636072854701 │ -└──────────────────────────┘ --- хеш https://www.clickhouse.com/docs -┌─URLHash('htt⋯m/docs', 1)─┐ -│ 13167253331440520598 │ -└──────────────────────────┘ -``` - - -## cityHash64 - -Добавлено в: v1.1 - -Возвращает 64-битное хеш-значение [CityHash](https://github.com/google/cityhash). - -Это быстрая некриптографическая хеш-функция. -Она использует алгоритм CityHash для строковых параметров и зависящую от реализации некриптографическую хеш-функцию для параметров с другими типами данных. -Функция использует комбинатор CityHash для получения итогового результата. - -:::info -Google изменил алгоритм CityHash после того, как он был добавлен в ClickHouse. -Другими словами, cityHash64 в ClickHouse и исходный CityHash от Google теперь выдают разные результаты. -cityHash64 в ClickHouse соответствует CityHash v1.0.2. -::: - -:::note -Вычисленные хеш-значения могут совпадать для одинаковых входных значений аргументов разных типов. -Это затрагивает, например, целочисленные типы разного размера, именованный и безымянный `Tuple` с одинаковыми данными, `Map` и соответствующий тип `Array(Tuple(key, value))` с одинаковыми данными. -::: - -**Синтаксис** - -```sql -cityHash64(arg1[, arg2, ...]) -``` - -**Аргументы** - -* `arg1[, arg2, ...]` — Переменное количество входных аргументов, для которых вычисляется хэш. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает вычисленный хэш входных аргументов. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример вызова** - -```sql title=Query -SELECT cityHash64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS CityHash, toTypeName(CityHash) AS type; -``` - -```response title=Response -┌─────────────CityHash─┬─type───┐ -│ 12072650598913549138 │ UInt64 │ -└──────────────────────┴────────┘ -``` - -**Вычисление контрольной суммы всей таблицы с учетом порядка строк** - -```sql title=Query -CREATE TABLE users ( - id UInt32, - name String, - age UInt8, - city String -) -ENGINE = MergeTree -ORDER BY tuple(); - -INSERT INTO users VALUES -(1, 'Alice', 25, 'New York'), -(2, 'Bob', 30, 'London'), -(3, 'Charlie', 35, 'Tokyo'); - -SELECT groupBitXor(cityHash64(*)) FROM users; -``` - -```response title=Response -┌─groupBitXor(⋯age, city))─┐ -│ 11639977218258521182 │ -└──────────────────────────┘ -``` - - -## farmFingerprint64 - -Добавлена в версии: v20.12 - -Возвращает 64-битное значение [FarmHash](https://github.com/google/farmhash) с использованием метода `Fingerprint64`. - -:::tip -Для получения стабильного и переносимого значения рекомендуется использовать `farmFingerprint64` вместо [`farmHash64`](#farmHash64). -::: - -:::note -Получаемые значения хеша могут совпадать для одинаковых входных значений разных типов аргументов. -Это касается, например, целочисленных типов разного размера, именованных и неименованных `Tuple` с одинаковыми данными, `Map` и соответствующего типа `Array(Tuple(key, value))` с одинаковыми данными. -::: - -**Синтаксис** - -```sql -farmFingerprint64(arg1[, arg2, ...]) -``` - -**Аргументы** - -* `arg1[, arg2, ...]` — Переменное число входных аргументов, для которых вычисляется хеш. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает вычисленное значение хеша входных аргументов. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT farmFingerprint64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS FarmFingerprint, toTypeName(FarmFingerprint) AS type; -``` - -```response title=Response -┌─────FarmFingerprint─┬─type───┐ -│ 5752020380710916328 │ UInt64 │ -└─────────────────────┴────────┘ -``` - - -## farmHash64 - -Появилось в версии v1.1 - -Вычисляет 64-битный [FarmHash](https://github.com/google/farmhash) с использованием метода `Hash64`. - -:::tip -Для получения стабильного и переносимого значения предпочтительно использовать [`farmFingerprint64`](#farmFingerprint64). -::: - -:::note -Вычисленные хеш-значения могут совпадать для одинаковых входных значений при разных типах аргументов. -Это касается, например, целочисленных типов разного размера, именованного и неименованного `Tuple` с одинаковыми данными, `Map` и соответствующего типа `Array(Tuple(key, value))` с одинаковыми данными. -::: - -**Синтаксис** - -```sql -farmHash64(arg1[, arg2, ...]) -``` - -**Аргументы** - -* `arg1[, arg2, ...]` — Произвольное количество входных аргументов, для которых вычисляется хеш. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает вычисленное значение хеша входных аргументов. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT farmHash64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS FarmHash, toTypeName(FarmHash) AS type; -``` - -```response title=Response -┌─────────────FarmHash─┬─type───┐ -│ 18125596431186471178 │ UInt64 │ -└──────────────────────┴────────┘ -``` - - -## gccMurmurHash - -Добавлена в версии v20.1. - -Вычисляет 64-битный хэш [MurmurHash2](https://github.com/aappleby/smhasher) для входного значения, используя то же начальное значение (seed), что и в [GCC](https://github.com/gcc-mirror/gcc/blob/41d6b10e96a1de98e90a7c0378437c3255814b16/libstdc%2B%2B-v3/include/bits/functional_hash.h#L191). - -Переносима между сборками Clang и GCC. - -**Синтаксис** - -```sql -gccMurmurHash(arg1[, arg2, ...]) -``` - -**Аргументы** - -* `arg1[, arg2, ...]` — Произвольное количество аргументов, для которых вычисляется хеш. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает вычисленное значение хеша входных аргументов. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT - gccMurmurHash(1, 2, 3) AS res1, - gccMurmurHash(('a', [1, 2, 3], 4, (4, ['foo', 'bar'], 1, (1, 2)))) AS res2 -``` - -```response title=Response -┌─────────────────res1─┬────────────────res2─┐ -│ 12384823029245979431 │ 1188926775431157506 │ -└──────────────────────┴─────────────────────┘ -``` - - -## halfMD5 - -Введена в версии v1.1 - -[Интерпретирует](/sql-reference/functions/type-conversion-functions#reinterpretasstring) все входные -параметры как строки и вычисляет MD5-хэш для каждого из них. Затем объединяет хэши, берёт первые 8 байт хэша -полученной строки и интерпретирует их как [UInt64](/sql-reference/data-types/int-uint) в порядке байтов big-endian. Функция -работает относительно медленно (5 миллионов коротких строк в секунду на одно ядро процессора). - -Рекомендуется рассмотреть использование функции [`sipHash64`](#sipHash64). - -Функция принимает переменное количество входных параметров. -Аргументы могут иметь любой из поддерживаемых типов данных. -Для некоторых типов данных вычисленное значение хэш-функции может совпадать для одинаковых значений, даже если типы аргументов различаются (например, целые числа разного размера, именованный и неименованный Tuple с одинаковыми данными, Map и соответствующий тип Array(Tuple(key, value)) с одинаковыми данными). - -**Синтаксис** - -```sql -halfMD5(arg1[, arg2, ..., argN]) -``` - -**Аргументы** - -* `arg1[, arg2, ..., argN]` — Переменное число аргументов, для которых вычисляется хеш. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает вычисленную половину MD5-хеша переданных входных параметров, представленную как `UInt64` в порядке байтов big-endian. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT HEX(halfMD5('abc', 'cde', 'fgh')); -``` - -```response title=Response -┌─hex(halfMD5('abc', 'cde', 'fgh'))─┐ -│ 2C9506B7374CFAF4 │ -└───────────────────────────────────┘ -``` - - -## hiveHash - -Впервые появилась в: v20.1 - -Вычисляет «HiveHash» для строки. -Это просто [`JavaHash`](#javaHash) с обнулёнными битами знака. -Эта функция используется в [Apache Hive](https://en.wikipedia.org/wiki/Apache_Hive) в версиях до 3.0. - -:::caution -Эта хэш-функция малопроизводительна. -Используйте её только в том случае, если этот алгоритм уже применяется в другой системе и вам нужно получить тот же результат. -::: - -**Синтаксис** - -```sql -hiveHash(arg) -``` - -**Аргументы** - -* `arg` — входная строка для хеширования. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает вычисленное значение «hive hash» для входной строки. [`Int32`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT hiveHash('Hello, world!'); -``` - -```response title=Response -┌─hiveHash('Hello, world!')─┐ -│ 267439093 │ -└───────────────────────────┘ -``` - - -## icebergHash - -Впервые представлена в: v25.5 - -Реализует логику [хеш‑преобразования](https://iceberg.apache.org/spec/#appendix-b-32-bit-hash-requirements) Iceberg - -**Синтаксис** - -```sql -icebergHash(value) -``` - -**Аргументы** - -* `value` — исходное значение, для которого вычисляется хеш: [`Integer`](/sql-reference/data-types/int-uint), [`Bool`](/sql-reference/data-types/boolean), [`Decimal`](/sql-reference/data-types/decimal), [`Float*`](/sql-reference/data-types/float), [`String`](/sql-reference/data-types/string), [`FixedString`](/sql-reference/data-types/fixedstring), [`UUID`](/sql-reference/data-types/uuid), [`Date`](/sql-reference/data-types/date), [`Time`](/sql-reference/data-types/time) или [`DateTime`](/sql-reference/data-types/datetime) - -**Возвращаемое значение** - -Возвращает 32-битный хеш Murmur3, вариант x86, с начальным значением (seed) 0 типа [`Int32`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример** - -```sql title=Query -SELECT icebergHash(1.0 :: Float32) -``` - -```response title=Response --142385009 -``` - - -## intHash32 - -Появилась в версии: v1.1 - -Вычисляет 32-битный хеш целого числа. - -Функция хеширования относительно быстрая, но не является криптографической хеш-функцией. - -**Синтаксис** - -```sql -intHash32(arg) -``` - -**Аргументы** - -* `arg` — целое число, которое нужно хешировать. [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает вычисленный 32-битный хеш-код входного целого числа типа [`UInt32`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT intHash32(42); -``` - -```response title=Response -┌─intHash32(42)─┐ -│ 1228623923 │ -└───────────────┘ -``` - - -## intHash64 - -Введена в версии: v1.1 - -Вычисляет 64-битный хеш целого числа. - -Функция хеширования достаточно быстрая (даже быстрее, чем [`intHash32`](#intHash32)), но не является криптографической хеш-функцией. - -**Синтаксис** - -```sql -intHash64(int) -``` - -**Аргументы** - -* `int` — целое число для хеширования. [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -64-битный хеш-код. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT intHash64(42); -``` - -```response title=Response -┌────────intHash64(42)─┐ -│ 11490350930367293593 │ -└──────────────────────┘ -``` - - -## javaHash - -Впервые появилась в: v20.1 - -Вычисляет JavaHash для: - -* [string](http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/478a4add975b/src/share/classes/java/lang/String.java#l1452), -* [Byte](https://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/478a4add975b/src/share/classes/java/lang/Byte.java#l405), -* [Short](https://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/478a4add975b/src/share/classes/java/lang/Short.java#l410), -* [Integer](https://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/478a4add975b/src/share/classes/java/lang/Integer.java#l959), -* [Long](https://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/478a4add975b/src/share/classes/java/lang/Long.java#l1060). - -:::caution -Эта хеш-функция обладает низкой производительностью. -Используйте её только в том случае, если этот алгоритм уже применяется в другой системе и вам нужно получить тот же результат. -::: - -:::note -Java поддерживает вычисление хеша только для знаковых целых чисел, -поэтому, если вы хотите вычислить хеш беззнаковых целых чисел, вы должны привести их к соответствующим знаковым типам ClickHouse. -::: - -**Синтаксис** - -```sql -javaHash(arg) -``` - -**Аргументы** - -* `arg` — входное значение для хеширования. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает вычисленный хеш значения `arg`. [`Int32`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования 1** - -```sql title=Query -SELECT javaHash(toInt32(123)); -``` - -```response title=Response -┌─javaHash(toInt32(123))─┐ -│ 123 │ -└────────────────────────┘ -``` - -**Пример использования 2** - -```sql title=Query -SELECT javaHash('Hello, world!'); -``` - -```response title=Response -┌─javaHash('Hello, world!')─┐ -│ -1880044555 │ -└───────────────────────────┘ -``` - - -## javaHashUTF16LE - -Добавлено в версии v20.1 - -Вычисляет [JavaHash](http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/478a4add975b/src/share/classes/java/lang/String.java#l1452) для строки, предполагая, что она содержит байты, представляющие строку в кодировке UTF-16LE. - -**Синтаксис** - -```sql -javaHashUTF16LE(arg) -``` - -**Аргументы** - -* `arg` — строка в кодировке UTF-16LE. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает вычисленное хеш-значение строки в кодировке UTF-16LE. [`Int32`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT javaHashUTF16LE(convertCharset('test', 'utf-8', 'utf-16le')); -``` - -```response title=Response -┌─javaHashUTF16LE(convertCharset('test', 'utf-8', 'utf-16le'))─┐ -│ 3556498 │ -└──────────────────────────────────────────────────────────────┘ -``` - - -## jumpConsistentHash - -Появилась в версии: v1.1 - -Вычисляет [jump consistent hash](https://arxiv.org/pdf/1406.2294.pdf) для целого числа. - -**Синтаксис** - -```sql -jumpConsistentHash(key, buckets) -``` - -**Аргументы** - -* `key` — входной ключ. [`UInt64`](/sql-reference/data-types/int-uint) -* `buckets` — количество бакетов. [`Int32`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает вычисленное значение хеша. [`Int32`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT jumpConsistentHash(256, 4) -``` - -```response title=Response -┌─jumpConsistentHash(256, 4)─┐ -│ 3 │ -└────────────────────────────┘ -``` - - -## kafkaMurmurHash - -Добавлена в версии: v23.4 - -Вычисляет 32-битный хеш [MurmurHash2](https://github.com/aappleby/smhasher) входного значения, используя тот же seed, что и в [Kafka](https://github.com/apache/kafka/blob/461c5cfe056db0951d9b74f5adc45973670404d7/clients/src/main/java/org/apache/kafka/common/utils/Utils.java#L482), и без старшего бита для совместимости с [Default Partitioner](https://github.com/apache/kafka/blob/139f7709bd3f5926901a21e55043388728ccca78/clients/src/main/java/org/apache/kafka/clients/producer/internals/BuiltInPartitioner.java#L328). - -**Синтаксис** - -```sql -kafkaMurmurHash(arg1[, arg2, ...]) -``` - -**Аргументы** - -* `arg1[, arg2, ...]` — Произвольное число аргументов, для которых вычисляется хеш. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает вычисленное хеш-значение входных аргументов. [`UInt32`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT - kafkaMurmurHash('foobar') AS res1, - kafkaMurmurHash(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS res2 -``` - -```response title=Response -┌───────res1─┬─────res2─┐ -│ 1357151166 │ 85479775 │ -└────────────┴──────────┘ -``` - - -## keccak256 - -Введена в: v25.4 - -Вычисляет криптографический хэш Keccak-256 для указанной строки. -Эта хеш-функция широко используется в блокчейн-приложениях, в частности в Ethereum. - -**Синтаксис** - -```sql -keccak256(message) -``` - -**Аргументы** - -* `message` — входная строка для хеширования. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает 32-байтовый хэш Keccak-256 от входной строки в виде строки фиксированной длины. [`FixedString(32)`](/sql-reference/data-types/fixedstring) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT hex(keccak256('hello')) -``` - -```response title=Response -┌─hex(keccak256('hello'))──────────────────────────────────────────┐ -│ 1C8AFF950685C2ED4BC3174F3472287B56D9517B9C948127319A09A7A36DEAC8 │ -└──────────────────────────────────────────────────────────────────┘ -``` - - -## kostikConsistentHash - -Появился в версии: v22.6 - -Алгоритм согласованного хеширования с постоянной временной и пространственной сложностью O(1), разработанный Konstantin «Kostik» Oblakov. -Эффективен только при `n <= 32768`. - -**Синтаксис** - -```sql -kostikConsistentHash(input, n) -``` - -**Псевдонимы**: `yandexConsistentHash` - -**Аргументы** - -* `input` — целочисленный ключ. [`UInt64`](/sql-reference/data-types/int-uint) -* `n` — количество бакетов. [`UInt16`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает вычисленное значение хеша. [`UInt16`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT kostikConsistentHash(16045690984833335023, 2); -``` - -```response title=Response -┌─kostikConsistentHash(16045690984833335023, 2)─┐ -│ 1 │ -└───────────────────────────────────────────────┘ -``` - - -## metroHash64 - -Добавлено в версии: v1.1 - -Возвращает 64-битное хеш-значение [MetroHash](http://www.jandrewrogers.com/2015/05/27/metrohash/). - -:::note -Вычисленные хеш-значения могут совпадать для одинаковых входных значений аргументов разных типов. -Это касается, например, целочисленных типов разного размера, именованных и неименованных `Tuple` с одинаковыми данными, `Map` и соответствующего типа `Array(Tuple(key, value))` с одинаковыми данными. -::: - -**Синтаксис** - -```sql -metroHash64(arg1[, arg2, ...]) -``` - -**Аргументы** - -* `arg1[, arg2, ...]` — Произвольное число входных аргументов, для которых вычисляется хэш. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает вычисленный хэш от входных аргументов. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT metroHash64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS MetroHash, toTypeName(MetroHash) AS type; -``` - -```response title=Response -┌────────────MetroHash─┬─тип────┐ -│ 14235658766382344533 │ UInt64 │ -└──────────────────────┴────────┘ -``` - - -## murmurHash2_32 - -Впервые представлена в: v18.5 - -Вычисляет хеш [MurmurHash2](https://github.com/aappleby/smhasher) для входного значения. - -:::note -Вычисленные хеш-значения могут совпадать для одинаковых входных значений разных типов аргументов. -Это касается, например, целочисленных типов разного размера, именованных и неименованных `Tuple` с одинаковыми данными, `Map` и соответствующего типа `Array(Tuple(key, value))` с одинаковыми данными. -::: - -**Синтаксис** - -```sql -murmurHash2_32(arg1[, arg2, ...]) -``` - -**Аргументы** - -* `arg1[, arg2, ...]` — Произвольное количество входных аргументов, для которых вычисляется хеш. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает вычисленное значение хеша входных аргументов. [`UInt32`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT murmurHash2_32(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS MurmurHash2, toTypeName(MurmurHash2) AS type; -``` - -```response title=Response -┌─MurmurHash2─┬─тип────┐ -│ 3681770635 │ UInt32 │ -└─────────────┴────────┘ -``` - - -## murmurHash2_64 - -Введено в версии: v18.10 - -Вычисляет хеш [MurmurHash2](https://github.com/aappleby/smhasher) для входного значения. - -:::note -Вычисленные хеш-значения могут совпадать для одинаковых входных значений разных типов аргументов. -Это относится, например, к целочисленным типам разной разрядности, именованным и неименованным `Tuple` с одинаковыми данными, а также к `Map` и соответствующему типу `Array(Tuple(key, value))` с одинаковыми данными. -::: - -**Синтаксис** - -```sql -murmurHash2_64(arg1[, arg2, ...]) -``` - -**Аргументы** - -* `arg1[, arg2, ...]` — Произвольное число входных аргументов, для которых вычисляется хеш. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает вычисленный хеш входных аргументов. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT murmurHash2_64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS MurmurHash2, toTypeName(MurmurHash2) AS type; -``` - -```response title=Response -┌──────────MurmurHash2─┬─тип────┐ -│ 11832096901709403633 │ UInt64 │ -└──────────────────────┴────────┘ -``` - - -## murmurHash3_128 - -Появилась в версии: v18.10 - -Вычисляет 128-битный хэш [MurmurHash3](https://github.com/aappleby/smhasher) от входного значения. - -**Синтаксис** - -```sql -murmurHash3_128(arg1[, arg2, ...]) -``` - -**Аргументы** - -* `arg1[, arg2, ...]` — Переменное количество входных аргументов, для которых вычисляется хеш. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает 128-битный хеш `MurmurHash3`, вычисленный по входным аргументам. [`FixedString(16)`](/sql-reference/data-types/fixedstring) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT hex(murmurHash3_128('foo', 'foo', 'foo')); -``` - -```response title=Response -┌─hex(murmurHash3_128('foo', 'foo', 'foo'))─┐ -│ F8F7AD9B6CD4CF117A71E277E2EC2931 │ -└───────────────────────────────────────────┘ -``` - - -## murmurHash3_32 - -Введена в версии: v18.10 - -Возвращает хэш-значение [MurmurHash3](https://github.com/aappleby/smhasher). - -:::note -Вычисленные хэш-значения могут совпадать для одинаковых входных значений аргументов разных типов. -Это, например, относится к целочисленным типам разного размера, именованному и неименованному `Tuple` с одинаковыми данными, `Map` и соответствующему типу `Array(Tuple(key, value))` с одинаковыми данными. -::: - -**Синтаксис** - -```sql -murmurHash3_32(arg1[, arg2, ...]) -``` - -**Аргументы** - -* `arg1[, arg2, ...]` — Переменное число входных аргументов, для которых вычисляется хеш. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает вычисленное значение хеша входных аргументов. [`UInt32`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT murmurHash3_32(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS MurmurHash3, toTypeName(MurmurHash3) AS type; -``` - -```response title=Response -┌─MurmurHash3─┬─тип────┐ -│ 2152717 │ UInt32 │ -└─────────────┴────────┘ -``` - - -## murmurHash3_64 - -Введена в версии v18.10 - -Вычисляет хеш [MurmurHash3](https://github.com/aappleby/smhasher) для входного значения. - -:::note -Вычисленные хеш-значения могут совпадать для одинаковых входных значений аргументов разных типов. -Это касается, например, целочисленных типов разного размера, именованных и неименованных `Tuple` с одинаковыми данными, `Map` и соответствующего типа `Array(Tuple(key, value))` с одинаковыми данными. -::: - -**Синтаксис** - -```sql -murmurHash3_64(arg1[, arg2, ...]) -``` - -**Аргументы** - -* `arg1[, arg2, ...]` — Переменное число входных аргументов, для которых вычисляется хеш. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает вычисленное значение хеша входных аргументов. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT murmurHash3_64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS MurmurHash3, toTypeName(MurmurHash3) AS type; -``` - -```response title=Response -┌──────────MurmurHash3─┬─тип────┐ -│ 11832096901709403633 │ UInt64 │ -└──────────────────────┴────────┘ -``` - - -## ngramMinHash - -Появилась в версии: v21.1 - -Разбивает ASCII-строку на n-граммы длиной `ngramsize` символов, вычисляет хэш-значение для каждой n-граммы и возвращает кортеж с этими хэшами. -Использует `hashnum` минимальных хэшей для вычисления минимального хэша и `hashnum` максимальных хэшей для вычисления максимального хэша. -Функция чувствительна к регистру. - -Может использоваться для обнаружения почти дублирующихся строк с помощью [`tupleHammingDistance`](../functions/tuple-functions.md#tupleHammingDistance). -Для двух строк, если возвращаемые хэши совпадают для обеих строк, то эти строки считаются одинаковыми. - -**Синтаксис** - -```sql -ngramMinHash(string[, ngramsize, hashnum]) -``` - -**Аргументы** - -* `string` — Строка, для которой вычисляется хэш. [`String`](/sql-reference/data-types/string) -* `ngramsize` — Необязательный параметр. Размер n-граммы, любое число от `1` до `25`. Значение по умолчанию — `3`. [`UInt8`](/sql-reference/data-types/int-uint) -* `hashnum` — Необязательный параметр. Количество хэшей минимума и максимума, используемых для вычисления результата, любое число от `1` до `25`. Значение по умолчанию — `6`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает кортеж из двух хэшей — минимального и максимального. [`Tuple`](/sql-reference/data-types/tuple) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT ngramMinHash('ClickHouse') AS Tuple; -``` - -```response title=Response -┌─Кортеж─────────────────────────────────────┐ -│ (18333312859352735453,9054248444481805918) │ -└────────────────────────────────────────────┘ -``` - - -## ngramMinHashArg - -Появилась в версии v21.1 - -Разбивает ASCII-строку на n-граммы из `ngramsize` символов и возвращает n-граммы с минимальным и максимальным хешами, вычисленными функцией [`ngramMinHash`](#ngramMinHash) для того же входного значения. -Чувствительна к регистру. - -**Синтаксис** - -```sql -ngramMinHashArg(строка[, размер_нграммы, число_хешей]) -``` - -**Аргументы** - -* `string` — Строка, для которой вычисляется хэш. [`String`](/sql-reference/data-types/string) -* `ngramsize` — Необязательный параметр. Размер n-граммы, число от `1` до `25`. Значение по умолчанию — `3`. [`UInt8`](/sql-reference/data-types/int-uint) -* `hashnum` — Необязательный параметр. Количество минимальных и максимальных хэшей, используемых для вычисления результата, число от `1` до `25`. Значение по умолчанию — `6`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает кортеж из двух кортежей, каждый содержащий `hashnum` n-грамм. [`Tuple(String)`](/sql-reference/data-types/tuple) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT ngramMinHashArg('ClickHouse') AS Tuple; -``` - -```response title=Response -┌─Tuple─────────────────────────────────────────────────────────────────────────┐ -│ (('ous','ick','lic','Hou','kHo','use'),('Hou','lic','ick','ous','ckH','Cli')) │ -└───────────────────────────────────────────────────────────────────────────────┘ -``` - - -## ngramMinHashArgCaseInsensitive - -Впервые добавлена в: v21.1 - -Разбивает ASCII-строку на n-граммы по `ngramsize` символов и возвращает n-граммы с минимальным и максимальным хэшами, вычисленными функцией [`ngramMinHashCaseInsensitive`](#ngramMinHashCaseInsensitive) с теми же входными данными. -Функция нечувствительна к регистру. - -**Синтаксис** - -```sql -ngramMinHashArgCaseInsensitive(string[, ngramsize, hashnum]) -``` - -**Аргументы** - -* `string` — Строка, для которой вычисляется хеш. [`String`](/sql-reference/data-types/string) -* `ngramsize` — Необязательный параметр. Размер n-граммы, любое целое число от `1` до `25`. Значение по умолчанию — `3`. [`UInt8`](/sql-reference/data-types/int-uint) -* `hashnum` — Необязательный параметр. Количество минимальных и максимальных хешей, используемых для вычисления результата, любое целое число от `1` до `25`. Значение по умолчанию — `6`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает кортеж из двух кортежей, с `hashnum` n-граммами в каждом. [`Tuple(Tuple(String))`](/sql-reference/data-types/tuple) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT ngramMinHashArgCaseInsensitive('ClickHouse') AS Tuple; -``` - -```response title=Response -┌─Tuple─────────────────────────────────────────────────────────────────────────┐ -│ (('ous','ick','lic','kHo','use','Cli'),('kHo','lic','ick','ous','ckH','Hou')) │ -└───────────────────────────────────────────────────────────────────────────────┘ -``` - - -## ngramMinHashArgCaseInsensitiveUTF8 - -Добавлено в версии: v21.1 - -Разбивает строку в кодировке UTF-8 на n-граммы длиной `ngramsize` символов и возвращает n-граммы с минимальным и максимальным хешами, вычисленными функцией ngramMinHashCaseInsensitiveUTF8 с теми же входными данными. -Функция нечувствительна к регистру. - -**Синтаксис** - -```sql -ngramMinHashArgCaseInsensitiveUTF8(string[, ngramsize, hashnum]) -``` - -**Аргументы** - -* `string` — Строка, для которой вычисляется хэш. [`String`](/sql-reference/data-types/string) -* `ngramsize` — Необязательный параметр. Размер n-граммы, любое число от `1` до `25`. Значение по умолчанию — `3`. [`UInt8`](/sql-reference/data-types/int-uint) -* `hashnum` — Необязательный параметр. Количество минимальных и максимальных хэшей, используемых для вычисления результата, любое число от `1` до `25`. Значение по умолчанию — `6`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает кортеж из двух кортежей с `hashnum` n-граммами в каждом. [`Tuple(Tuple(String))`](/sql-reference/data-types/tuple) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT ngramMinHashArgCaseInsensitiveUTF8('ClickHouse') AS Tuple; -``` - -```response title=Response -┌─Tuple─────────────────────────────────────────────────────────────────────────┐ -│ (('ckH','ous','ick','lic','kHo','use'),('kHo','lic','ick','ous','ckH','Hou')) │ -└───────────────────────────────────────────────────────────────────────────────┘ -``` - - -## ngramMinHashArgUTF8 - -Впервые появилась в версии: v21.1 - -Разбивает строку в кодировке UTF-8 на n-граммы длиной `ngramsize` символов и возвращает n-граммы с минимальным и максимальным хэшами, вычисленными функцией `ngramMinHashUTF8` с теми же входными данными. -Функция чувствительна к регистру. - -**Синтаксис** - -```sql -ngramMinHashArgUTF8(string[, ngramsize, hashnum]) -``` - -**Аргументы** - -* `string` — Строка, для которой вычисляется хеш. [`String`](/sql-reference/data-types/string) -* `ngramsize` — Необязательный параметр. Размер n-граммы, любое число от `1` до `25`. Значение по умолчанию — `3`. [`UInt8`](/sql-reference/data-types/int-uint) -* `hashnum` — Необязательный параметр. Количество минимальных и максимальных хешей, используемых для вычисления результата, любое число от `1` до `25`. Значение по умолчанию — `6`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает кортеж из двух кортежей, каждый с `hashnum` n-граммами. [`Tuple(Tuple(String))`](/sql-reference/data-types/tuple) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT ngramMinHashArgUTF8('ClickHouse') AS Tuple; -``` - -```response title=Response -┌─Tuple─────────────────────────────────────────────────────────────────────────┐ -│ (('ous','ick','lic','Hou','kHo','use'),('kHo','Hou','lic','ick','ous','ckH')) │ -└───────────────────────────────────────────────────────────────────────────────┘ -``` - - -## ngramMinHashCaseInsensitive - -Введена в версии v21.1 - -Разбивает ASCII-строку на n-граммы из `ngramsize` символов, вычисляет хэш-значения для каждой n-граммы и возвращает кортеж с этими хэшами. -Использует `hashnum` наименьших хэшей для вычисления минимального хэша и `hashnum` наибольших хэшей для вычисления максимального хэша. -Не чувствительна к регистру. - -Может использоваться для обнаружения почти дублирующихся строк с помощью [`tupleHammingDistance`](../functions/tuple-functions.md#tupleHammingDistance). -Для двух строк, если возвращаемые хэши совпадают для обеих строк, то эти строки считаются одинаковыми. - -**Синтаксис** - -```sql -ngramMinHashCaseInsensitive(string[, ngramsize, hashnum]) -``` - -**Аргументы** - -* `string` — Строка. [String](../data-types/string.md). - `ngramsize` — Размер n-граммы. Необязательный параметр. Возможные значения: любое число от `1` до `25`. Значение по умолчанию: `3`. [UInt8](../data-types/int-uint.md). - `hashnum` — Количество минимальных и максимальных хешей, используемых для вычисления результата. Необязательный параметр. Возможные значения: любое число от `1` до `25`. Значение по умолчанию: `6`. [UInt8](../data-types/int-uint.md). - -**Возвращаемое значение** - -Кортеж из двух хешей — минимального и максимального. [Tuple](../data-types/tuple.md)([UInt64](../data-types/int-uint.md), [UInt64](../data-types/int-uint.md)). [`Tuple`](/sql-reference/data-types/tuple) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT ngramMinHashCaseInsensitive('ClickHouse') AS Tuple; -``` - -```response title=Response -┌─Tuple──────────────────────────────────────┐ -│ (2106263556442004574,13203602793651726206) │ -└────────────────────────────────────────────┘ -``` - - -## ngramMinHashCaseInsensitiveUTF8 - -Впервые появилась в версии v21.1 - -Разбивает строку в кодировке UTF-8 на n-граммы из `ngramsize` символов, вычисляет хеш-значение для каждой n-граммы и возвращает кортеж с этими хешами. -Использует `hashnum` минимальных хешей для вычисления минимального хеша и `hashnum` максимальных хешей для вычисления максимального хеша. -Функция нечувствительна к регистру. - -Может использоваться для обнаружения частично дублирующихся строк с помощью [`tupleHammingDistance`](../functions/tuple-functions.md#tupleHammingDistance). -Для двух строк, если возвращаемые хеши совпадают, то эти строки идентичны. - -**Синтаксис** - -```sql -ngramMinHashCaseInsensitiveUTF8(string [, ngramsize, hashnum]) -``` - -**Аргументы** - -* `string` — Строка, для которой вычисляется хеш. [`String`](/sql-reference/data-types/string) -* `ngramsize` — Необязательный параметр. Размер n-граммы, любое число от `1` до `25`. Значение по умолчанию — `3`. [`UInt8`](/sql-reference/data-types/int-uint) -* `hashnum` — Необязательный параметр. Количество хешей (минимальных и максимальных), используемых для вычисления результата, любое число от `1` до `25`. Значение по умолчанию — `6`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает кортеж из двух хешей — минимального и максимального. [`Tuple`](/sql-reference/data-types/tuple) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT ngramMinHashCaseInsensitiveUTF8('ClickHouse') AS Tuple; -``` - -```response title=Response -┌─Кортеж──────────────────────────────────────┐ -│ (12493625717655877135,13203602793651726206) │ -└─────────────────────────────────────────────┘ -``` - - -## ngramMinHashUTF8 - -Введена в версии: v21.1 - -Разбивает строку в кодировке UTF-8 на n-граммы из `ngramsize` символов, вычисляет значения хэшей для каждой n-граммы и возвращает кортеж с этими хэшами. -Использует `hashnum` минимальных хэшей для вычисления минимального хэша и `hashnum` максимальных хэшей для вычисления максимального хэша. -Функция чувствительна к регистру. - -Может использоваться для обнаружения частично дублирующихся строк с помощью [`tupleHammingDistance`](../functions/tuple-functions.md#tupleHammingDistance). -Если для двух строк возвращаются одинаковые хэши, то эти строки совпадают. - -**Синтаксис** - -```sql -ngramMinHashUTF8(string[, ngramsize, hashnum]) -``` - -**Аргументы** - -* `string` — Строка, для которой вычисляется хэш. [`String`](/sql-reference/data-types/string) -* `ngramsize` — Необязательный параметр. Размер n-граммы, целое число от `1` до `25`. Значение по умолчанию — `3`. [`UInt8`](/sql-reference/data-types/int-uint) -* `hashnum` — Необязательный параметр. Количество минимальных и максимальных хэшей, используемых при вычислении результата, целое число от `1` до `25`. Значение по умолчанию — `6`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает кортеж из двух хэшей — минимального и максимального. [`Tuple`](/sql-reference/data-types/tuple) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT ngramMinHashUTF8('ClickHouse') AS Tuple; -``` - -```response title=Response -┌─Кортеж─────────────────────────────────────┐ -│ (18333312859352735453,6742163577938632877) │ -└────────────────────────────────────────────┘ -``` - - -## ngramSimHash - -Введена в версии v21.1 - -Разбивает ASCII-строку на n-граммы из `ngramsize` символов и возвращает `simhash` этих n-грамм. - -Может использоваться для обнаружения частично дублирующихся строк с помощью [`bitHammingDistance`](../functions/bit-functions.md/#bitHammingDistance). -Чем меньше [расстояние Хэмминга](https://en.wikipedia.org/wiki/Hamming_distance) между вычисленными `simhash` двух строк, тем выше вероятность, что эти строки совпадают. - -**Синтаксис** - -```sql -ngramSimHash(string[, ngramsize]) -``` - -**Аргументы** - -* `string` — Строка, для которой вычисляется регистрозависимый хэш `simhash`. [`String`](/sql-reference/data-types/string) -* `ngramsize` — Необязательный параметр. Размер n-граммы, любое число от `1` до `25`. Значение по умолчанию — `3`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает вычисленный хэш входной строки. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT ngramSimHash('ClickHouse') AS Hash; -``` - -```response title=Response -┌───────Хеш─┐ -│ 1627567969 │ -└────────────┘ -``` - - -## ngramSimHashCaseInsensitive - -Добавлено в версии: v21.1 - -Разбивает ASCII-строку на n-граммы длиной `ngramsize` символов и возвращает `simhash` для этих n-грамм. -Функция нечувствительна к регистру. - -Может использоваться для обнаружения частично совпадающих строк с помощью [`bitHammingDistance`](/sql-reference/functions/bit-functions#bitHammingDistance). -Чем меньше [расстояние Хэмминга](https://en.wikipedia.org/wiki/Hamming_distance) между вычисленными `simhash` двух строк, тем выше вероятность, что эти строки совпадают. - -**Синтаксис** - -```sql -ngramSimHashCaseInsensitive(строка[, размер_н-граммы]) -``` - -**Аргументы** - -* `string` — Строка, для которой нужно вычислить регистронезависимый `simhash`. [`String`](/sql-reference/data-types/string) -* `ngramsize` — Необязательный параметр. Размер n-граммы, любое число от `1` до `25`. Значение по умолчанию — `3`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Хеш-значение. [UInt64](../data-types/int-uint.md). [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT ngramSimHashCaseInsensitive('ClickHouse') AS Hash; -``` - -```response title=Response -┌──────Хэш─┐ -│ 562180645 │ -└───────────┘ -``` - - -## ngramSimHashCaseInsensitiveUTF8 - -Появилась в версии: v21.1 - -Разбивает строку в кодировке UTF-8 на n-граммы из `ngramsize` символов и возвращает `simhash` этих n-грамм. -Функция нечувствительна к регистру. - -Может использоваться для обнаружения почти совпадающих строк совместно с [bitHammingDistance](../functions/bit-functions.md/#bitHammingDistance). Чем меньше [расстояние Хэмминга](https://en.wikipedia.org/wiki/Hamming_distance) между вычисленными значениями `simhash` двух строк, тем выше вероятность, что эти строки совпадают. - -**Синтаксис** - -```sql -ngramSimHashCaseInsensitiveUTF8(string[, ngramsize]) -``` - -**Аргументы** - -* `string` — Строка, для которой нужно вычислить хеш. [`String`](/sql-reference/data-types/string) -* `ngramsize` — Необязательный параметр. Размер n-граммы — число от `1` до `25`. Значение по умолчанию — `3`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает вычисленное значение хеша. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT ngramSimHashCaseInsensitiveUTF8('ClickHouse') AS Hash; -``` - -```response title=Response -┌──────Хэш─┐ -│ 1636742693 │ -└────────────┘ -``` - - -## ngramSimHashUTF8 - -Добавлена в: v21.1 - -Разбивает строку в кодировке UTF-8 на n-граммы из `ngramsize` символов и возвращает `simhash` этих n-грамм. -Функция чувствительна к регистру. - -Может использоваться для обнаружения частично дублирующихся строк совместно с [`bitHammingDistance`](../functions/bit-functions.md/#bitHammingDistance). -Чем меньше [расстояние Хэмминга](https://en.wikipedia.org/wiki/Hamming_distance) между вычисленными значениями `simhash` двух строк, тем выше вероятность, что эти строки совпадают. - -**Синтаксис** - -```sql -ngramSimHashUTF8(string[, ngramsize]) -``` - -**Аргументы** - -* `string` — Строка, для которой нужно вычислить хеш. [`String`](/sql-reference/data-types/string) -* `ngramsize` — Необязательный параметр. Размер n-граммы, любое число от `1` до `25`. Значение по умолчанию — `3`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает вычисленное хеш-значение. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT ngramSimHashUTF8('ClickHouse') AS Хэш; -``` - -```response title=Response -┌───────Хеш─┐ -│ 1628157797 │ -└────────────┘ -``` - - -## sipHash128 - -Добавлена в версии: v1.1 - -Аналог [`sipHash64`](#sipHash64), но возвращает 128-битное хеш-значение, то есть финальная xor-свёртка состояния выполняется до 128 бит. - -:::tip Используйте sipHash128Reference для новых проектов -Этот 128-битный вариант отличается от эталонной реализации и является более слабым. -Эта версия существует потому, что на момент её создания не было официального 128-битного расширения для SipHash. -Для новых проектов рекомендуется использовать [`sipHash128Reference`](#sipHash128Reference). -::: - -**Синтаксис** - -```sql -sipHash128(arg1[, arg2, ...]) -``` - -**Аргументы** - -* `arg1[, arg2, ...]` — переменное количество входных аргументов, для которых вычисляется хеш. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает 128-битное хеш-значение `SipHash`. [`FixedString(16)`](/sql-reference/data-types/fixedstring) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT hex(sipHash128('foo', '\x01', 3)); -``` - -```response title=Response -┌─hex(sipHash128('foo', '', 3))────┐ -│ 9DE516A64A414D4B1B609415E4523F24 │ -└──────────────────────────────────┘ -``` - - -## sipHash128Keyed - -Добавлена в версии v23.2 - -То же, что и [`sipHash128`](#sipHash128), но дополнительно принимает явный аргумент ключа вместо использования фиксированного ключа. - -:::tip используйте sipHash128ReferenceKeyed для новых проектов -Этот 128-битный вариант отличается от эталонной реализации и является более слабым. -Эта версия существует потому что на момент её разработки не было официального 128-битного расширения для SipHash. -Для новых проектов, вероятно, следует использовать [`sipHash128ReferenceKeyed`](#sipHash128ReferenceKeyed). -::: - -**Синтаксис** - -```sql -sipHash128Keyed((k0, k1), [arg1, arg2, ...]) -``` - -**Аргументы** - -* `(k0, k1)` — кортеж из двух значений типа UInt64, представляющих ключ. [`Tuple(UInt64, UInt64)`](/sql-reference/data-types/tuple) -* `arg1[, arg2, ...]` — переменное количество входных аргументов, для которых нужно вычислить хеш. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -128-битное значение хеша `SipHash` типа [FixedString(16)](../data-types/fixedstring.md). [`FixedString(16)`](/sql-reference/data-types/fixedstring) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT hex(sipHash128Keyed((506097522914230528, 1084818905618843912),'foo', '\x01', 3)); -``` - -```response title=Response -┌─hex(sipHash128Keyed((506097522914230528, 1084818905618843912), 'foo', '', 3))─┐ -│ B8467F65C8B4CFD9A5F8BD733917D9BF │ -└───────────────────────────────────────────────────────────────────────────────┘ -``` - - -## sipHash128Reference - -Добавлено в: v23.2 - -Аналог функции [`sipHash128`](/sql-reference/functions/hash-functions#sipHash128), но реализует 128-битный алгоритм, предложенный авторами SipHash. - -**Синтаксис** - -```sql -sipHash128Reference(arg1[, arg2, ...]) -``` - -**Аргументы** - -* `arg1[, arg2, ...]` — Переменное количество входных аргументов, для которых вычисляется хеш. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает вычисленное 128-битное значение хеша `SipHash` входных аргументов. [`FixedString(16)`](/sql-reference/data-types/fixedstring) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT hex(sipHash128Reference('foo', '', 3)); -``` - -```response title=Response -┌─hex(sipHash128Reference('foo', '', 3))─┐ -│ 4D1BE1A22D7F5933C0873E1698426260 │ -└────────────────────────────────────────┘ -``` - - -## sipHash128ReferenceKeyed - -Впервые появилась в: v23.2 - -Аналог функции [`sipHash128Reference`](#sipHash128Reference), но дополнительно принимает явный параметр ключа вместо использования фиксированного ключа. - -**Синтаксис** - -```sql -sipHash128ReferenceKeyed((k0, k1), arg1[, arg2, ...]) -``` - -**Аргументы** - -* `(k0, k1)` — кортеж из двух значений, задающий ключ [`Tuple(UInt64, UInt64)`](/sql-reference/data-types/tuple) -* `arg1[, arg2, ...]` — произвольное количество входных аргументов, для которых вычисляется хэш. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает вычисленное 128-битное значение хэша `SipHash` для входных аргументов. [`FixedString(16)`](/sql-reference/data-types/fixedstring) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT hex(sipHash128Reference('foo', '', 3)); -``` - -```response title=Response -┌─hex(sipHash128Reference('foo', '', 3))─┐ -│ 4D1BE1A22D7F5933C0873E1698426260 │ -└────────────────────────────────────────┘ -``` - - -## sipHash64 - -Впервые появилась в: v1.1 - -Возвращает 64-битное хеш-значение [SipHash](https://en.wikipedia.org/wiki/SipHash). - -Это криптографическая хеш-функция. Работает как минимум в три раза быстрее, чем хеш-функция [`MD5`](#MD5). - -Функция [интерпретирует](/sql-reference/functions/type-conversion-functions#reinterpretasstring) все входные параметры как строки и вычисляет хеш-значение для каждого из них. -Затем она комбинирует хеши по следующему алгоритму: - -1. Первое и второе хеш-значения объединяются в массив, который затем хешируется. -2. Ранее вычисленное хеш-значение и хеш третьего входного параметра хешируются аналогичным образом. -3. Это вычисление повторяется для всех оставшихся хеш-значений исходных аргументов. - -:::note -Вычисленные хеш-значения могут совпадать для одинаковых входных значений аргументов разных типов. -Это, например, относится к целочисленным типам разного размера, именованным и неименованным `Tuple` с одинаковыми данными, а также к `Map` и соответствующему типу `Array(Tuple(key, value))` с одинаковыми данными. -::: - -**Синтаксис** - -```sql -sipHash64(arg1[, arg2, ...]) -``` - -**Аргументы** - -* `arg1[, arg2, ...]` — Переменное количество входных аргументов. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает вычисленное хэш-значение входных аргументов. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT sipHash64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS SipHash, toTypeName(SipHash) AS type; -``` - -```response title=Response -┌──────────────SipHash─┬─тип───┐ -│ 11400366955626497465 │ UInt64 │ -└──────────────────────┴────────┘ -``` - - -## sipHash64Keyed - -Добавлена в версии v23.2 - -Аналогична [`sipHash64`](#sipHash64), но вместо фиксированного ключа принимает явный ключ в качестве аргумента. - -**Синтаксис** - -```sql -sipHash64Keyed((k0, k1), arg1[,arg2, ...]) -``` - -**Аргументы** - -* `(k0, k1)` — кортеж из двух значений, представляющих ключ. [`Tuple(UInt64, UInt64)`](/sql-reference/data-types/tuple) -* `arg1[,arg2, ...]` — произвольное количество входных аргументов. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает вычисленное хеш-значение входных данных. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT sipHash64Keyed((506097522914230528, 1084818905618843912), array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS SipHash, toTypeName(SipHash) AS type; -``` - -```response title=Response -┌─────────────SipHash─┬─Тип────┐ -│ 8017656310194184311 │ UInt64 │ -└─────────────────────┴────────┘ -``` - - -## wordShingleMinHash - -Впервые появилась в версии: v21.1 - -Разбивает ASCII-строку на части (шинглы) по `shinglesize` слов, вычисляет хэш-значения для каждого шингла слов и возвращает кортеж с этими хэшами. -Использует `hashnum` минимальных хэшей для вычисления минимального хэша и `hashnum` максимальных хэшей для вычисления максимального хэша. -Функция чувствительна к регистру. - -Может использоваться для обнаружения частично совпадающих строк с помощью [`tupleHammingDistance`](../functions/tuple-functions.md#tupleHammingDistance). -Для двух строк, если возвращаемые хэши совпадают для обеих строк, то эти строки одинаковы. - -**Синтаксис** - -```sql -wordShingleMinHash(string[, размер_шингла, число_хешей]) -``` - -**Аргументы** - -* `string` — Строка, для которой вычисляется хэш. [`String`](/sql-reference/data-types/string) -* `shinglesize` — Необязательный аргумент. Размер шингла (последовательности слов), любое число от `1` до `25`. Значение по умолчанию — `3`. [`UInt8`](/sql-reference/data-types/int-uint) -* `hashnum` — Необязательный аргумент. Количество минимальных и максимальных хэшей, используемых для вычисления результата, любое число от `1` до `25`. Значение по умолчанию — `6`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает кортеж из двух хэшей — минимального и максимального. [`Tuple(UInt64, UInt64)`](/sql-reference/data-types/tuple) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT wordShingleMinHash('ClickHouse® — колоночная система управления базами данных (СУБД) для онлайн-аналитической обработки запросов (OLAP).') AS Tuple; -``` - -```response title=Response -┌─Кортеж─────────────────────────────────────┐ -│ (16452112859864147620,5844417301642981317) │ -└────────────────────────────────────────────┘ -``` - - -## wordShingleMinHashArg - -Появилась в версии v1.1 - -Разбивает ASCII-строку на части (шинглы), каждая из которых содержит по `shinglesize` слов, и возвращает шинглы с минимальным и максимальным хешами слов, вычисленными функцией wordShingleMinHash с теми же входными данными. -Функция чувствительна к регистру. - -**Синтаксис** - -```sql -wordShingleMinHashArg(строка[, размершингла, числохешей]) -``` - -**Аргументы** - -* `string` — Строка, для которой вычисляется хеш. [`String`](/sql-reference/data-types/string) -* `shinglesize` — Необязательный параметр. Размер шингла по словам, любое число от `1` до `25`. Значение по умолчанию — `3`. [`UInt8`](/sql-reference/data-types/int-uint) -* `hashnum` — Необязательный параметр. Количество минимальных и максимальных хешей, используемых для вычисления результата, любое число от `1` до `25`. Значение по умолчанию — `6`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает кортеж из двух кортежей, каждый содержащий по `hashnum` словесных шинглов. [`Tuple(Tuple(String))`](/sql-reference/data-types/tuple) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT wordShingleMinHashArg('ClickHouse® — колоночная система управления базами данных (СУБД) для онлайн-аналитической обработки запросов (OLAP).', 1, 3) AS Tuple; -``` - -```response title=Response -┌─Tuple─────────────────────────────────────────────────────────────────┐ -│ (('OLAP','база данных','аналитическая'),('онлайн','ориентированная','обработка')) │ -└───────────────────────────────────────────────────────────────────────┘ -``` - - -## wordShingleMinHashArgCaseInsensitive - -Добавлена в: v21.1 - -Разбивает ASCII-строку на части (шинглы) размером `shinglesize` слов каждый и возвращает шинглы с минимальным и максимальным хешами слов, вычисленными функцией [`wordShingleMinHashCaseInsensitive`](#wordShingleMinHashCaseInsensitive) с теми же входными данными. -Функция нечувствительна к регистру. - -**Синтаксис** - -```sql -wordShingleMinHashArgCaseInsensitive(строка[, размер_шингла, количество_хешей]) -``` - -**Аргументы** - -* `string` — Строка, для которой нужно вычислить хеш. [`String`](/sql-reference/data-types/string) -* `shinglesize` — Необязательный параметр. Размер шингла слов, любое число от `1` до `25`. Значение по умолчанию — `3`. [`UInt8`](/sql-reference/data-types/int-uint) -* `hashnum` — Необязательный параметр. Количество минимальных и максимальных хешей, используемых при вычислении результата, любое число от `1` до `25`. Значение по умолчанию — `6`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает кортеж из двух кортежей, каждый с `hashnum` шинглами слов. [`Tuple(Tuple(String))`](/sql-reference/data-types/tuple) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT wordShingleMinHashArgCaseInsensitive('ClickHouse® — колоночная система управления базами данных (СУБД) для онлайн-аналитической обработки запросов (OLAP).', 1, 3) AS Tuple; -``` - -```response title=Response -┌─Tuple──────────────────────────────────────────────────────────────────┐ -│ (('запросы','база данных','аналитическая'),('ориентированная','обработка','СУБД')) │ -└────────────────────────────────────────────────────────────────────────┘ -``` - - -## wordShingleMinHashArgCaseInsensitiveUTF8 - -Добавлена в: v21.1 - -Разбивает строку в кодировке UTF-8 на части (шинглы) по `shinglesize` слов каждая и возвращает шинглы с минимальными и максимальными хешами слов, вычисленными функцией [`wordShingleMinHashCaseInsensitiveUTF8`](#wordShingleMinHashCaseInsensitiveUTF8) с тем же вводом. -Функция регистронезависима. - -**Синтаксис** - -```sql -wordShingleMinHashArgCaseInsensitiveUTF8(string[, shinglesize, hashnum]) -``` - -**Аргументы** - -* `string` — Строка, для которой вычисляется хеш. [`String`](/sql-reference/data-types/string) -* `shinglesize` — Необязательный параметр. Размер шингла слов, любое число от `1` до `25`. Значение по умолчанию — `3`. [`UInt8`](/sql-reference/data-types/int-uint) -* `hashnum` — Необязательный параметр. Количество минимальных и максимальных хешей, используемых для вычисления результата, любое число от `1` до `25`. Значение по умолчанию — `6`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает кортеж из двух кортежей, каждый из которых содержит по `hashnum` шинглов слов. [`Tuple(Tuple(String))`](/sql-reference/data-types/tuple) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT wordShingleMinHashArgCaseInsensitiveUTF8('ClickHouse® — колонкоориентированная система управления базами данных (СУБД) для онлайн-аналитической обработки запросов (OLAP).', 1, 3) AS Tuple; -``` - -```response title=Response -┌─Tuple──────────────────────────────────────────────────────────────────┐ -│ (('запросы','база данных','аналитическая'),('ориентированная','обработка','СУБД')) │ -└────────────────────────────────────────────────────────────────────────┘ -``` - - -## wordShingleMinHashArgUTF8 - -Введена в версии: v21.1 - -Разбивает строку в кодировке UTF-8 на части (shingles), каждая содержит по `shinglesize` слов, и возвращает shingles с минимальными и максимальными хешами слов, вычисленными функцией [`wordShingleMinHashUTF8`](#wordShingleMinHashUTF8) для того же ввода. -Регистрозависима. - -**Синтаксис** - -```sql -wordShingleMinHashArgUTF8(string[, shinglesize, hashnum]) -``` - -**Аргументы** - -* `string` — Строка, для которой вычисляется хэш. [`String`](/sql-reference/data-types/string) -* `shinglesize` — Необязательный параметр. Размер словесного шингла, любое число от `1` до `25`. Значение по умолчанию — `3`. [`UInt8`](/sql-reference/data-types/int-uint) -* `hashnum` — Необязательный параметр. Количество минимальных и максимальных хэшей, используемых для вычисления результата, любое число от `1` до `25`. Значение по умолчанию — `6`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает кортеж из двух кортежей, каждый из которых содержит по `hashnum` словесных шинглов. [`Tuple(Tuple(String))`](/sql-reference/data-types/tuple) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT wordShingleMinHashArgUTF8('ClickHouse® — колоночная система управления базами данных (СУБД) для онлайн-аналитической обработки запросов (OLAP).', 1, 3) AS Tuple; -``` - -```response title=Response -┌─Tuple─────────────────────────────────────────────────────────────────┐ -│ (('OLAP','база данных','аналитическая'),('онлайн','ориентированная','обработка')) │ -└───────────────────────────────────────────────────────────────────────┘ -``` - - -## wordShingleMinHashCaseInsensitive - -Впервые появилась в: v21.1 - -Разбивает ASCII-строку на части (шинглы) по `shinglesize` слов, вычисляет хеш-значения для каждого шингла и возвращает кортеж с этими хешами. -Использует `hashnum` минимальных хешей для вычисления минимального значения хеша и `hashnum` максимальных хешей для вычисления максимального значения хеша. -Нечувствительна к регистру. - -Может использоваться для обнаружения почти дублирующихся строк с помощью [`tupleHammingDistance`](../functions/tuple-functions.md#tupleHammingDistance). -Для двух строк, если возвращаемые хеши одинаковы для обеих строк, то эти строки считаются одинаковыми. - -**Синтаксис** - -```sql -wordShingleMinHashCaseInsensitive(строка[, размершингла, количествохешей]) -``` - -**Аргументы** - -* `string` — Строка, для которой вычисляется хеш. [`String`](/sql-reference/data-types/string) -* `shinglesize` — Необязательный параметр. Размер шингла (последовательности слов), любое значение от `1` до `25`. Значение по умолчанию — `3`. [`UInt8`](/sql-reference/data-types/int-uint) -* `hashnum` — Необязательный параметр. Количество минимальных и максимальных хешей, используемых для вычисления результата, любое значение от `1` до `25`. Значение по умолчанию — `6`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает кортеж из двух хешей — минимального и максимального. [`Tuple(UInt64, UInt64)`](/sql-reference/data-types/tuple) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT wordShingleMinHashCaseInsensitive('ClickHouse® — колоночная система управления базами данных (СУБД), предназначенная для онлайн-аналитической обработки запросов (OLAP).') AS Tuple; -``` - -```response title=Response -┌─Tuple─────────────────────────────────────┐ -│ (3065874883688416519,1634050779997673240) │ -└───────────────────────────────────────────┘ -``` - - -## wordShingleMinHashCaseInsensitiveUTF8 - -Введена в версии: v21.1 - -Разбивает строку в кодировке UTF-8 на части (шинглы) по `shinglesize` слов, вычисляет хеш‑значения для каждого шингла и возвращает кортеж с этими хешами. -Использует `hashnum` минимальных значений хеша для вычисления минимального хеша и `hashnum` максимальных значений хеша для вычисления максимального хеша. -Функция регистронезависимая. - -Может использоваться для обнаружения почти дублирующихся строк с помощью [`tupleHammingDistance`](../functions/tuple-functions.md#tupleHammingDistance). -Для двух строк, если возвращаемые хеши совпадают для обеих строк, эти строки считаются одинаковыми. - -**Синтаксис** - -```sql -wordShingleMinHashCaseInsensitiveUTF8(string[, shinglesize, hashnum]) -``` - -**Аргументы** - -* `string` — Строка, для которой вычисляется хеш. [`String`](/sql-reference/data-types/string) -* `shinglesize` — Необязательный параметр. Размер шингла (последовательности слов), любое число от `1` до `25`. Значение по умолчанию — `3`. [`UInt8`](/sql-reference/data-types/int-uint) -* `hashnum` — Необязательный параметр. Количество минимальных и максимальных хешей, используемых для вычисления результата, любое число от `1` до `25`. Значение по умолчанию — `6`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает кортеж из двух хешей — минимального и максимального. [`Tuple(UInt64, UInt64)`](/sql-reference/data-types/tuple) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT wordShingleMinHashCaseInsensitiveUTF8('ClickHouse® — это колоночная СУБД (DBMS) для онлайн-аналитической обработки запросов (OLAP).') AS Tuple; -``` - -```response title=Response -┌─Tuple─────────────────────────────────────┐ -│ (3065874883688416519,1634050779997673240) │ -└───────────────────────────────────────────┘ -``` - - -## wordShingleMinHashUTF8 - -Введена в: v21.1 - -Разбивает строку в кодировке UTF-8 на части (шинглы) по `shinglesize` слов, вычисляет хеш-значения для каждого шингла и возвращает кортеж с этими хешами. -Использует `hashnum` минимальных значений хеша для вычисления минимального хеша и `hashnum` максимальных значений хеша для вычисления максимального хеша. -Функция чувствительна к регистру. - -Может использоваться для обнаружения почти дублирующихся строк с помощью [`tupleHammingDistance`](../functions/tuple-functions.md#tupleHammingDistance). -Для двух строк, если возвращаемые хеши одинаковы для обеих строк, то эти строки считаются одинаковыми. - -**Синтаксис** - -```sql -wordShingleMinHashUTF8(строка[, размер_шингла, количество_хешей]) -``` - -**Аргументы** - -* `string` — Строка, для которой вычисляется хеш. [`String`](/sql-reference/data-types/string) -* `shinglesize` — Необязательный параметр. Размер шингла по словам, любое число от `1` до `25`. Значение по умолчанию — `3`. [`UInt8`](/sql-reference/data-types/int-uint) -* `hashnum` — Необязательный параметр. Количество минимальных и максимальных хешей, используемых для вычисления результата, любое число от `1` до `25`. Значение по умолчанию — `6`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает кортеж из двух хешей — минимального и максимального. [`Tuple(UInt64, UInt64)`](/sql-reference/data-types/tuple) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT wordShingleMinHashUTF8('ClickHouse® — колонко-ориентированная система управления базами данных (СУБД) для онлайн-аналитической обработки запросов (OLAP).') AS Tuple; -``` - -```response title=Response -┌─Tuple──────────────────────────────────────┐ -│ (16452112859864147620,5844417301642981317) │ -└────────────────────────────────────────────┘ -``` - - -## wordShingleSimHash - -Введена в версии: v21.1 - -Разбивает ASCII-строку на части (шинглы) из `shinglesize` слов и возвращает значение `simhash` для словесного шингла. -Функция чувствительна к регистру. - -Может использоваться для обнаружения частично дублирующихся строк совместно с [`bitHammingDistance`](../functions/bit-functions.md/#bitHammingDistance). -Чем меньше [расстояние Хэмминга](https://en.wikipedia.org/wiki/Hamming_distance) между вычисленными `simhash` двух строк, тем выше вероятность, что эти строки одинаковы. - -**Синтаксис** - -```sql -wordShingleSimHash(строка[, размер_шингла]) -``` - -**Аргументы** - -* `string` — Строка, для которой нужно вычислить хеш. [`String`](/sql-reference/data-types/string) -* `shinglesize` — Необязательный параметр. Размер шингла по словам, любое число от `1` до `25`. Значение по умолчанию — `3`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает вычисленное значение хеша. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT wordShingleSimHash('ClickHouse® — это колоночная система управления базами данных (СУБД) для онлайн-аналитической обработки запросов (OLAP).') AS Hash; -``` - -```response title=Response -┌───────Хэш─┐ -│ 2328277067 │ -└────────────┘ -``` - - -## wordShingleSimHashCaseInsensitive - -Добавлена в версии: v21.1 - -Разбивает ASCII-строку на части (шинглы) по `shinglesize` слов и возвращает `simhash` этих шинглов. -Функция регистронезависима. - -Может использоваться для обнаружения частично дублирующихся строк с помощью [`bitHammingDistance`](../functions/bit-functions.md/#bitHammingDistance). -Чем меньше [расстояние Хэмминга](https://en.wikipedia.org/wiki/Hamming_distance) вычисленных `simhashes` для двух строк, тем более вероятно, что эти строки совпадают. - -**Синтаксис** - -```sql -wordShingleSimHashCaseInsensitive(string[, shinglesize]) -``` - -**Аргументы** - -* `string` — Строка, для которой нужно вычислить хэш. [`String`](/sql-reference/data-types/string) -* `shinglesize` — Необязательный параметр. Размер шингла (последовательности слов), любое число от `1` до `25`. Значение по умолчанию — `3`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает вычисленное значение хеша. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT wordShingleSimHashCaseInsensitive('ClickHouse® — колоночная система управления базами данных (СУБД) для онлайн-аналитической обработки запросов (OLAP).') AS Hash; -``` - -```response title=Response -┌───────Хэш─┐ -│ 2194812424 │ -└────────────┘ -``` - - -## wordShingleSimHashCaseInsensitiveUTF8 - -Введено в версии: v1.1 - -Разбивает строку в кодировке UTF-8 на части (шинглы) по `shinglesize` слов и возвращает `simhash` для словесного шингла. -Функция регистронезависима. - -Может использоваться для обнаружения частичных дубликатов строк с помощью [`bitHammingDistance`](../functions/bit-functions.md/#bitHammingDistance). -Чем меньше [расстояние Хэмминга](https://en.wikipedia.org/wiki/Hamming_distance) вычисленных `simhash`‑значений двух строк, тем выше вероятность, что эти строки совпадают. - -**Синтаксис** - -```sql -wordShingleSimHashCaseInsensitiveUTF8(string[, shinglesize]) -``` - -**Аргументы** - -* `string` — Строка, для которой нужно вычислить хеш. [`String`](/sql-reference/data-types/string) -* `shinglesize` — Необязательный параметр. Размер шингла по словам, любое число от `1` до `25`. Значение по умолчанию — `3`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает вычисленный хеш. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT wordShingleSimHashCaseInsensitiveUTF8('ClickHouse® — это колоночная система управления базами данных (СУБД) для онлайн-аналитической обработки запросов (OLAP).') AS Hash; -``` - -```response title=Response -┌───────Хэш─┐ -│ 2194812424 │ -└────────────┘ -``` - - -## wordShingleSimHashUTF8 - -Добавлена в версии: v21.1 - -Разбивает строку в кодировке UTF-8 на части (шинглы) из `shinglesize` слов и возвращает `simhash` по шинглам слов. -Функция чувствительна к регистру. - -Может использоваться для обнаружения почти дублирующихся строк с помощью [`bitHammingDistance`](../functions/bit-functions.md/#bitHammingDistance). -Чем меньше [расстояние Хэмминга](https://en.wikipedia.org/wiki/Hamming_distance) между вычисленными значениями `simhash` двух строк, тем выше вероятность, что эти строки совпадают. - -**Синтаксис** - -```sql -wordShingleSimHashUTF8(string[, shinglesize]) -``` - -**Аргументы** - -* `string` — Строка, для которой нужно вычислить хеш. [`String`](/sql-reference/data-types/string) -* `shinglesize` — Необязательный параметр. Размер словесного шингла, любое число от `1` до `25`. Значение по умолчанию — `3`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает вычисленное хеш-значение. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT wordShingleSimHashUTF8('ClickHouse® — это колоночная система управления базами данных (СУБД) для онлайн-аналитической обработки запросов (OLAP).') AS Hash; -``` - -```response title=Response -┌───────Хэш─┐ -│ 2328277067 │ -└────────────┘ -``` - - -## wyHash64 - -Впервые представлен в версии: v22.7 - -Вычисляет 64-битное хеш-значение [wyHash64](https://github.com/wangyi-fudan/wyhash). - -**Синтаксис** - -```sql -wyHash64(arg) -``` - -**Аргументы** - -* `arg` — строковый аргумент, для которого нужно вычислить хеш. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает вычисленное 64-битное значение хеша [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT wyHash64('ClickHouse') AS Hash; -``` - -```response title=Response -12336419557878201794 -``` - - -## xxHash32 - -Введено в: v20.1 - -Вычисляет [xxHash](http://cyan4973.github.io/xxHash/) для строки. - -Для 64-битной версии см. [`xxHash64`](#xxHash64) - -**Синтаксис** - -```sql -xxHash32(arg) -``` - -**Аргументы** - -* `arg` — входная строка для хеширования. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает вычисленный 32-битный хеш входной строки. [`UInt32`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT xxHash32('Hello, world!'); -``` - -```response title=Response -┌─xxHash32('Hello, world!')─┐ -│ 834093149 │ -└───────────────────────────┘ -``` - - -## xxHash64 - -Появилась в версии: v20.1 - -Вычисляет хэш [xxHash](http://cyan4973.github.io/xxHash/) для строки. - -Для 32-битной версии см. [`xxHash32`](#xxHash32) - -**Синтаксис** - -```sql -xxHash64(arg) -``` - -**Аргументы** - -* `arg` — Входная строка для хэширования. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает 64-битный хэш входной строки. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT xxHash64('Привет, мир!'); -``` - -```response title=Response -┌─xxHash64('Hello, world!')─┐ -│ 17691043854468224118 │ -└───────────────────────────┘ -``` - - -## xxh3 - -Появилась в версии: v22.12 - -Вычисляет 64-битное хеш-значение [XXH3](https://github.com/Cyan4973/xxHash). - -**Синтаксис** - -```sql -xxh3(expr) -``` - -**Аргументы** - -* `expr` — список выражений любого типа данных. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает вычисленное 64-битное значение хеша `xxh3` типа [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT xxh3('ClickHouse') -``` - -```response title=Response -18009318874338624809 -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/introspection.md b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/introspection.md index 2a51d340072..369510a1474 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/introspection.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/introspection.md @@ -1,276 +1,35 @@ --- -description: 'Документация по функциям интроспекции' +description: 'Справочник по функциям интроспекции' sidebar_label: 'Интроспекция' slug: /sql-reference/functions/introspection title: 'Функции интроспекции' doc_type: 'reference' --- - - # Функции интроспекции Вы можете использовать функции, описанные в этой главе, для интроспекции [ELF](https://en.wikipedia.org/wiki/Executable_and_Linkable_Format) и [DWARF](https://en.wikipedia.org/wiki/DWARF) при профилировании запросов. :::note -Эти функции работают медленно и могут представлять риск для безопасности. +Эти функции работают медленно и могут иметь последствия для безопасности. ::: Для корректной работы функций интроспекции: * Установите пакет `clickhouse-common-static-dbg`. -* Установите параметр [allow_introspection_functions](../../operations/settings/settings.md#allow_introspection_functions) в значение 1. +* Установите настройку [allow_introspection_functions](../../operations/settings/settings.md#allow_introspection_functions) в значение 1. По соображениям безопасности функции интроспекции по умолчанию отключены. -ClickHouse сохраняет отчёты профилировщика в системную таблицу [trace_log](/operations/system-tables/trace_log). Убедитесь, что таблица и профилировщик настроены корректно. +ClickHouse сохраняет отчёты профилировщика в системную таблицу [trace_log](/operations/system-tables/trace_log). Убедитесь, что таблица и профилировщик корректно настроены. {/* - Внутреннее содержимое тегов ниже при сборке фреймворка документации - заменяется документацией, сгенерированной из system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. + Содержимое тегов ниже во время сборки фреймворка документации + заменяется документацией, сгенерированной на основе system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. См.: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## demangle - -Впервые появилось в v20.1 - -Преобразует символ в имя функции C++. -Символ обычно возвращается функцией `addressToSymbol`. - -**Синтаксис** - -```sql -demangle(symbol) -``` - -**Аргументы** - -* `symbol` — символ из объектного файла. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает имя функции на C++, или пустую строку, если символ недопустим. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Выбор первой строки из системной таблицы `trace_log`** - -```sql title=Query -SELECT * FROM system.trace_log LIMIT 1 \G; -``` - -```response title=Response --- Поле `trace` содержит трассировку стека в момент сэмплирования. -Row 1: -────── -event_date: 2019-11-20 -event_time: 2019-11-20 16:57:59 -revision: 54429 -timer_type: Real -thread_number: 48 -query_id: 724028bf-f550-45aa-910d-2af6212b94ac -trace: [94138803686098,94138815010911,94138815096522,94138815101224,94138815102091,94138814222988,94138806823642,94138814457211,94138806823642,94138814457211,94138806823642,94138806795179,94138806796144,94138753770094,94138753771646,94138753760572,94138852407232,140399185266395,140399178045583] -``` - -**Определение имени функции по одному адресу** - -```sql title=Query -SET allow_introspection_functions=1; -SELECT demangle(addressToSymbol(94138803686098)) \G; -``` - -```response title=Response -Строка 1: -────── -demangle(addressToSymbol(94138803686098)): DB::IAggregateFunctionHelper > >::addBatchSinglePlace(unsigned long, char*, DB::IColumn const**, DB::Arena*) const -``` - -**Применение функции ко всей трассировке стека** - -```sql title=Query -SET allow_introspection_functions=1; - --- Функция arrayMap позволяет обработать каждый элемент массива trace с помощью функции demangle. --- Результат обработки отображается в столбце trace_functions. - -SELECT - arrayStringConcat(arrayMap(x -> demangle(addressToSymbol(x)), trace), '\n') AS trace_functions -FROM system.trace_log -LIMIT 1 -\G -``` - - -```response title=Response -Row 1: -────── -trace_functions: DB::IAggregateFunctionHelper > >::addBatchSinglePlace(unsigned long, char*, DB::IColumn const**, DB::Arena*) const -DB::Aggregator::executeWithoutKeyImpl(char*&, unsigned long, DB::Aggregator::AggregateFunctionInstruction*, DB::Arena*) const -DB::Aggregator::executeOnBlock(std::vector::immutable_ptr, std::allocator::immutable_ptr > >, unsigned long, DB::AggregatedDataVariants&, std::vector >&, std::vector >, std::allocator > > >&, bool&) -DB::Aggregator::executeOnBlock(DB::Block const&, DB::AggregatedDataVariants&, std::vector >&, std::vector >, std::allocator > > >&, bool&) -DB::Aggregator::execute(std::shared_ptr const&, DB::AggregatedDataVariants&) -DB::AggregatingBlockInputStream::readImpl() -DB::IBlockInputStream::read() -DB::ExpressionBlockInputStream::readImpl() -DB::IBlockInputStream::read() -DB::ExpressionBlockInputStream::readImpl() -DB::IBlockInputStream::read() -DB::AsynchronousBlockInputStream::calculate() -std::_Function_handler::_M_invoke(std::_Any_data const&) -ThreadPoolImpl::worker(std::_List_iterator) -ThreadFromGlobalPool::ThreadFromGlobalPool::scheduleImpl(std::function, int, std::optional)::{lambda()#3}>(ThreadPoolImpl::scheduleImpl(std::function, int, std::optional)::{lambda()#3}&&)::{lambda()#1}::operator()() const -ThreadPoolImpl::worker(std::_List_iterator) -execute_native_thread_routine -start_thread -clone -``` - - -## isMergeTreePartCoveredBy - -Добавлено в: v25.6 - -Функция, проверяющая, покрывается ли часть первого аргумента частью второго аргумента. - -**Синтаксис** - -```sql -isMergeTreePartCoveredBy(nested_part, covering_part) -``` - -**Аргументы** - -* `nested_part` — Имя ожидаемой вложенной части. [`String`](/sql-reference/data-types/string) -* `covering_part` — Имя ожидаемой покрывающей части. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает `1`, если покрывает, иначе — `0`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Базовый пример** - -```sql title=Query -WITH 'all_12_25_7_4' AS lhs, 'all_7_100_10_20' AS rhs -SELECT isMergeTreePartCoveredBy(rhs, lhs), isMergeTreePartCoveredBy(lhs, rhs); -``` - -```response title=Response -┌─isMergeTreePartCoveredBy(rhs, lhs)─┬─isMergeTreePartCoveredBy(lhs, rhs)─┐ -│ 0 │ 1 │ -└────────────────────────────────────┴────────────────────────────────────┘ -``` - - -## logTrace - -Появилась в: v20.12 - -Выводит сообщение трассировки в лог сервера для каждого [блока](/development/architecture/#block). - -**Синтаксис** - -```sql -logTrace(message) -``` - -**Аргументы** - -* `message` — сообщение, которое записывается в журнал сервера. [`const String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Всегда возвращает значение `0`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Базовый пример** - -```sql title=Query -SELECT logTrace('сообщение logTrace'); -``` - -```response title=Response -┌─logTrace('logTrace message')─┐ -│ 0 │ -└──────────────────────────────┘ -``` - - -## mergeTreePartInfo - -Появилась в версии: v25.6 - -Функция, позволяющая извлечь полезные значения из имени парта `MergeTree`. - -**Синтаксис** - -```sql -mergeTreePartInfo(part_name) -``` - -**Аргументы** - -* `part_name` — имя парта для распаковки. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает кортеж с подстолбцами: `partition_id`, `min_block`, `max_block`, `level`, `mutation`. [`Tuple`](/sql-reference/data-types/tuple) - -**Примеры** - -**Базовый пример** - -```sql title=Query -WITH mergeTreePartInfo('all_12_25_7_4') AS info -SELECT info.partition_id, info.min_block, info.max_block, info.level, info.mutation; -``` - -```response title=Response -┌─info.partition_id─┬─info.min_block─┬─info.max_block─┬─info.level─┬─info.mutation─┐ -│ all │ 12 │ 25 │ 7 │ 4 │ -└───────────────────┴────────────────┴────────────────┴────────────┴───────────────┘ -``` - - -## tid - -Введена в версии: v20.12 - -Возвращает идентификатор потока, в котором обрабатывается текущий [Block](/development/architecture/#block). - -**Синтаксис** - -```sql -tid() -``` - -**Аргументы** - -* Отсутствуют. - -**Возвращаемое значение** - -Возвращает идентификатор текущего потока. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT tid(); -``` - -```response title=Response -┌─tid()─┐ -│ 3878 │ -└───────┘ -``` - -{/*АВТОГЕНЕРАЦИЯ_КОНЕЦ*/ } +{/*AUTOGENERATED_END*/ } diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/ip-address-functions.md b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/ip-address-functions.md index fa78c073d01..72947b55bf7 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/ip-address-functions.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/ip-address-functions.md @@ -1,1131 +1,19 @@ --- -description: 'Документация по функциям, используемым для работы с адресами IPv4 и IPv6.' +description: 'Документация по функциям для работы с адресами IPv4 и IPv6.' sidebar_label: 'IP-адреса' slug: /sql-reference/functions/ip-address-functions title: 'Функции для работы с адресами IPv4 и IPv6' doc_type: 'reference' --- - - -# Функции для работы с адресами IPv4 и IPv6 +# Функции для работы с IP-адресами IPv4 и IPv6 {/* - Внутреннее содержимое тегов ниже при сборке фреймворка документации - заменяется документацией, генерируемой из system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. + Содержимое тегов ниже заменяется при сборке фреймворка документации + документацией, сгенерированной из system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. См.: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## IPv4CIDRToRange - -Добавлена в версии: v20.1 - -Принимает IPv4-адрес и длину CIDR-префикса и возвращает диапазон адресов подсети в виде кортежа из двух значений IPv4: первого и последнего адресов в этой подсети. -Версию для IPv6 см. в [`IPv6CIDRToRange`](#IPv4CIDRToRange). - -**Синтаксис** - -```sql -IPv4CIDRToRange(ipv4, cidr) -``` - -**Аргументы** - -* `ipv4` — IPv4-адрес. [`IPv4`](/sql-reference/data-types/ipv4) или [`String`](/sql-reference/data-types/string) -* `cidr` — значение CIDR. [`UInt8`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает кортеж из двух IPv4-адресов, представляющих диапазон подсети. [`Tuple(IPv4, IPv4)`](/sql-reference/data-types/tuple) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT IPv4CIDRToRange(toIPv4('192.168.5.2'), 16); -``` - -```response title=Response -┌─IPv4CIDRToRange(toIPv4('192.168.5.2'), 16)─┐ -│ ('192.168.0.0','192.168.255.255') │ -└────────────────────────────────────────────┘ -``` - - -## IPv4NumToString - -Добавлена в версии v1.1 - -Преобразует 32-битное целое число в строковое представление IPv4-адреса в точечной десятичной нотации (формат A.B.C.D). -Интерпретирует входное значение в порядке байт big-endian. - -**Синтаксис** - -```sql -IPv4NumToString(num) -``` - -**Псевдонимы**: `INET_NTOA` - -**Аргументы** - -* `num` — IPv4-адрес в формате числа UInt32. [`UInt32`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает число, представляющее MAC-адрес, или `0`, если формат некорректен. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -IPv4NumToString(3232235521) -``` - -```response title=Response -192.168.0.1 -``` - - -## IPv4NumToStringClassC - -Введена в версии: v1.1 - -Преобразует 32-битное целое число в строковое представление IPv4-адреса в десятичной точечной записи (формат A.B.C.D), -аналогично [`IPv4NumToString`](#IPv4NumToString), но с использованием `xxx` вместо последнего октета. - -**Синтаксис** - -```sql -IPv4NumToStringClassC(num) -``` - -**Аргументы** - -* `num` — IPv4-адрес в формате числа UInt32. [`UInt32`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает строку с IPv4-адресом, в которой последний октет заменён на xxx. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Базовый пример с агрегацией** - -```sql title=Query -SELECT - IPv4NumToStringClassC(ClientIP) AS k, - count() AS c -FROM test.hits -GROUP BY k -ORDER BY c DESC -LIMIT 10 -``` - -```response title=Response -┌─k──────────────┬─────c─┐ -│ 83.149.9.xxx │ 26238 │ -│ 217.118.81.xxx │ 26074 │ -│ 213.87.129.xxx │ 25481 │ -│ 83.149.8.xxx │ 24984 │ -│ 217.118.83.xxx │ 22797 │ -│ 78.25.120.xxx │ 22354 │ -│ 213.87.131.xxx │ 21285 │ -│ 78.25.121.xxx │ 20887 │ -│ 188.162.65.xxx │ 19694 │ -│ 83.149.48.xxx │ 17406 │ -└────────────────┴───────┘ -``` - - -## IPv4StringToNum - -Впервые появилась в версии: v1.1 - -Преобразует строку с IPv4-адресом в десятичной точечной нотации (формат A.B.C.D) в соответствующее 32-битное целочисленное представление (обратная функция к [`IPv4NumToString`](#IPv4NumToString)). -Если IPv4-адрес имеет неверный формат, выбрасывается исключение. - -**Синтаксис** - -```sql -IPv4StringToNum(string) -``` - -**Псевдонимы**: `INET_ATON` - -**Аргументы** - -* `string` — строка IPv4-адреса. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает IPv4-адрес. [`UInt32`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -IPv4StringToNum('192.168.0.1') -``` - -```response title=Response -3232235521 -``` - - -## IPv4StringToNumOrDefault - -Добавлена в версии: v22.3 - -Преобразует строку IPv4-адреса в десятичной точечной нотации (формат A.B.C.D) в соответствующее 32-битное целочисленное представление. Если IPv4-адрес имеет недопустимый формат, функция возвращает `0`. - -**Синтаксис** - -```sql -IPv4StringToNumOrDefault(string) -``` - -**Аргументы** - -* `string` — строка с IPv4-адресом. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает IPv4-адрес или `0`, если адрес недопустим. [`UInt32`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример с некорректным адресом** - -```sql title=Query -SELECT - IPv4StringToNumOrDefault('127.0.0.1') AS valid, - IPv4StringToNumOrDefault('invalid') AS invalid; -``` - -```response title=Response -┌──────valid─┬─invalid─┐ -│ 2130706433 │ 0 │ -└────────────┴─────────┘ -``` - - -## IPv4StringToNumOrNull - -Добавлена в версии: v22.3 - -Преобразует 32-битное целое число в строковое представление IPv4-адреса в десятичной точечной нотации (формат A.B.C.D), а при недопустимом формате IPv4-адреса возвращает `NULL`. - -**Синтаксис** - -```sql -IPv4StringToNumOrNull(строка) -``` - -**Аргументы** - -* `string` — строка с IPv4-адресом. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает IPv4-адрес или `NULL`, если адрес некорректен. [`Nullable(UInt32)`](/sql-reference/data-types/nullable) - -**Примеры** - -**Пример с некорректным адресом** - -```sql title=Query -SELECT -IPv4StringToNumOrNull('127.0.0.1') AS валидный, -IPv4StringToNumOrNull('invalid') AS невалидный; -``` - -```response title=Response -┌──────валидный─┬─невалидный─┐ -│ 2130706433 │ ᴺᵁᴸᴸ │ -└────────────┴─────────┘ -``` - - -## IPv4ToIPv6 - -Впервые появилось в версии: v1.1 - -Интерпретирует 32-битное число в порядке big endian как IPv4-адрес, который затем трактуется как соответствующий IPv6-адрес в формате `FixedString(16)`. - -**Синтаксис** - -```sql -IPv4ToIPv6(x) -``` - -**Аргументы** - -* `x` — IPv4-адрес. [`UInt32`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает IPv6-адрес в бинарном формате. [`FixedString(16)`](/sql-reference/data-types/fixedstring) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT IPv6NumToString(IPv4ToIPv6(IPv4StringToNum('192.168.0.1'))) AS addr; -``` - -```response title=Response -┌─addr───────────────┐ -│ ::ffff:192.168.0.1 │ -└────────────────────┘ -``` - - -## IPv6CIDRToRange - -Добавлена в версии: v20.1 - -Принимает IPv6-адрес с длиной префикса CIDR (Classless Inter-Domain Routing) и возвращает диапазон адресов подсети в виде кортежа из двух значений IPv6: минимального и максимального адресов в этой подсети. -Версию для IPv4 см. в [`IPv4CIDRToRange`](#IPv4CIDRToRange). - -**Синтаксис** - -```sql -IPv6CIDRToRange(ipv6, cidr) -``` - -**Аргументы** - -* `ipv6` — IPv6-адрес. [`IPv6`](/sql-reference/data-types/ipv6) или [`String`](/sql-reference/data-types/string) -* `cidr` — значение CIDR. [`UInt8`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает кортеж из двух IPv6-адресов, представляющих диапазон подсети. [`Tuple(IPv6, IPv6)`](/sql-reference/data-types/tuple) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT IPv6CIDRToRange(toIPv6('2001:0db8:0000:85a3:0000:0000:ac1f:8001'), 32); -``` - -```response title=Response -┌─IPv6CIDRToRange(toIPv6('2001:0db8:0000:85a3:0000:0000:ac1f:8001'), 32)─┐ -│ ('2001:db8::','2001:db8:ffff:ffff:ffff:ffff:ffff:ffff') │ -└────────────────────────────────────────────────────────────────────────┘ -``` - - -## IPv6NumToString - -Введена в версии: v1.1 - -Преобразует IPv6-адрес из двоичного формата (FixedString(16)) в его стандартное текстовое представление. -IPv6-адреса, сопоставленные с IPv4, отображаются в формате `::ffff:111.222.33.44`. - -**Синтаксис** - -```sql -IPv6NumToString(x) -``` - -**Псевдонимы**: `INET6_NTOA` - -**Аргументы** - -* `x` — IPv6-адрес в двоичном виде. [`FixedString(16)`](/sql-reference/data-types/fixedstring) или [`IPv6`](/sql-reference/data-types/ipv6) - -**Возвращаемое значение** - -Возвращает IPv6-адрес в строковом формате. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT IPv6NumToString(toFixedString(unhex('2A0206B8000000000000000000000011'), 16)) AS addr; -``` - -```response title=Response -┌─addr─────────┐ -│ 2a02:6b8::11 │ -└──────────────┘ -``` - -**IPv6 с анализом обращений** - -```sql title=Query -SELECT - IPv6NumToString(ClientIP6 AS k), - count() AS c -FROM hits_all -WHERE EventDate = today() AND substring(ClientIP6, 1, 12) != unhex('00000000000000000000FFFF') -GROUP BY k -ORDER BY c DESC -LIMIT 10 -``` - -```response title=Response -┌─IPv6NumToString(ClientIP6)──────────────┬─────c─┐ -│ 2a02:2168:aaa:bbbb::2 │ 24695 │ -│ 2a02:2698:abcd:abcd:abcd:abcd:8888:5555 │ 22408 │ -│ 2a02:6b8:0:fff::ff │ 16389 │ -│ 2a01:4f8:111:6666::2 │ 16016 │ -│ 2a02:2168:888:222::1 │ 15896 │ -│ 2a01:7e00::ffff:ffff:ffff:222 │ 14774 │ -│ 2a02:8109:eee:ee:eeee:eeee:eeee:eeee │ 14443 │ -│ 2a02:810b:8888:888:8888:8888:8888:8888 │ 14345 │ -│ 2a02:6b8:0:444:4444:4444:4444:4444 │ 14279 │ -│ 2a01:7e00::ffff:ffff:ffff:ffff │ 13880 │ -└─────────────────────────────────────────┴───────┘ -``` - -**IPv4-адреса в формате IPv6** - -```sql title=Query -SELECT - IPv6NumToString(ClientIP6 AS k), - count() AS c -FROM hits_all -WHERE EventDate = today() -GROUP BY k -ORDER BY c DESC -LIMIT 10 -``` - -```response title=Response -┌─IPv6NumToString(ClientIP6)─┬──────c─┐ -│ ::ffff:94.26.111.111 │ 747440 │ -│ ::ffff:37.143.222.4 │ 529483 │ -│ ::ffff:5.166.111.99 │ 317707 │ -│ ::ffff:46.38.11.77 │ 263086 │ -│ ::ffff:79.105.111.111 │ 186611 │ -│ ::ffff:93.92.111.88 │ 176773 │ -│ ::ffff:84.53.111.33 │ 158709 │ -│ ::ffff:217.118.11.22 │ 154004 │ -│ ::ffff:217.118.11.33 │ 148449 │ -│ ::ffff:217.118.11.44 │ 148243 │ -└────────────────────────────┴────────┘ -``` - - -## IPv6StringToNum - -Введена в версии: v1.1 - -Преобразует IPv6-адрес из его стандартного текстового представления в бинарный формат (`FixedString(16)`). -Поддерживает IPv4-картированные IPv6-адреса в формате `::ffff:111.222.33.44.`. -Если IPv6-адрес имеет некорректный формат, генерируется исключение. - -Если входная строка содержит корректный IPv4-адрес, возвращается его эквивалент в виде IPv6-адреса. -Шестнадцатеричные символы могут быть в верхнем или нижнем регистре. - -**Синтаксис** - -```sql -IPv6StringToNum(string) -``` - -**Псевдонимы**: `INET6_ATON` - -**Аргументы** - -* `string` — строка с IPv6-адресом. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает IPv6-адрес в двоичном виде. [`FixedString(16)`](/sql-reference/data-types/fixedstring) - -**Примеры** - -**Базовый пример** - -```sql title=Query -SELECT addr, cutIPv6(IPv6StringToNum(addr), 0, 0) FROM (SELECT ['notaddress', '127.0.0.1', '1111::ffff'] AS addr) ARRAY JOIN addr; -``` - -```response title=Response -┌─addr───────┬─cutIPv6(IPv6StringToNum(addr), 0, 0)─┐ -│ notaddress │ :: │ -│ 127.0.0.1 │ ::ffff:127.0.0.1 │ -│ 1111::ffff │ 1111::ffff │ -└────────────┴──────────────────────────────────────┘ -``` - - -## IPv6StringToNumOrDefault - -Добавлено в: v22.3 - -Преобразует IPv6-адрес из его стандартного текстового представления в двоичный формат (`FixedString(16)`). -Принимает IPv4-отображённые IPv6-адреса в формате `::ffff:111.222.33.44.`. -Если формат IPv6-адреса некорректен, функция возвращает значение по умолчанию `::`. - -**Синтаксис** - -```sql -IPv6StringToNumOrDefault(string) -``` - -**Аргументы** - -* `string` — строка с IPv6-адресом. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -IPv6-адрес в двоичном представлении или строка FixedString(16), заполненная нулями, если адрес некорректен. [`FixedString(16)`](/sql-reference/data-types/fixedstring) - -**Примеры** - -**Базовый пример с некорректным адресом** - -```sql title=Query -SELECT - IPv6NumToString(IPv6StringToNumOrDefault('2001:db8::1')) AS valid, - IPv6NumToString(IPv6StringToNumOrDefault('invalid')) AS invalid; -``` - -```response title=Response -┌─valid───────┬─invalid─┐ -│ 2001:db8::1 │ :: │ -└─────────────┴─────────┘ -``` - - -## IPv6StringToNumOrNull - -Добавлено в версии: v22.3 - -Преобразует IPv6-адрес из его стандартного текстового представления в двоичный формат (`FixedString(16)`). -Принимает IPv4-отображённые IPv6-адреса в формате `::ffff:111.222.33.44.`. -Если IPv6-адрес имеет недопустимый формат, функция возвращает `NULL`. - -**Синтаксис** - -```sql -IPv6StringToNumOrNull(string) -``` - -**Аргументы** - -* `string` — строка с IPv6-адресом. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает IPv6-адрес в двоичном формате или `NULL`, если адрес некорректен. [`Nullable(FixedString(16))`](/sql-reference/data-types/nullable) - -**Примеры** - -**Базовый пример с некорректным адресом** - -```sql title=Query -SELECT - IPv6NumToString(IPv6StringToNumOrNull('2001:db8::1')) AS valid, - IPv6StringToNumOrNull('invalid') AS invalid; -``` - -```response title=Response -┌─valid───────┬─invalid─┐ -│ 2001:db8::1 │ ᴺᵁᴸᴸ │ -└─────────────┴─────────┘ -``` - - -## cutIPv6 - -Впервые появилась в версии: v1.1 - -Принимает значение типа `FixedString(16)`, содержащее IPv6-адрес в двоичном формате. -Возвращает строку, содержащую адрес с удалённым заданным числом байт, в текстовом виде. - -**Синтаксис** - -```sql -cutIPv6(x, bytesToCutForIPv6, bytesToCutForIPv4) -``` - -**Аргументы** - -* `x` — IPv6-адрес в двоичном формате. [`FixedString(16)`](/sql-reference/data-types/fixedstring) или [`IPv6`](/sql-reference/data-types/ipv6) -* `bytesToCutForIPv6` — Количество байт, которые нужно обрезать для IPv6-адреса. [`UInt8`](/sql-reference/data-types/int-uint) -* `bytesToCutForIPv4` — Количество байт, которые нужно обрезать для IPv4-адреса. [`UInt8`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает строку, содержащую IPv6-адрес в текстовом формате с удалёнными указанными байтами. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -WITH - IPv6StringToNum('2001:0DB8:AC10:FE01:FEED:BABE:CAFE:F00D') AS ipv6, - IPv4ToIPv6(IPv4StringToNum('192.168.0.1')) AS ipv4 -SELECT - cutIPv6(ipv6, 2, 0), - cutIPv6(ipv4, 0, 2) -``` - -```response title=Response -┌─cutIPv6(ipv6, 2, 0)─────────────────┬─cutIPv6(ipv4, 0, 2)─┐ -│ 2001:db8:ac10:fe01:feed:babe:cafe:0 │ ::ffff:192.168.0.0 │ -└─────────────────────────────────────┴─────────────────────┘ -``` - - -## isIPAddressInRange - -Добавлена в версии: v21.4 - -Определяет, находится ли IP-адрес в сети, заданной в формате [Classless Inter-Domain Routing (CIDR)](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing). - -Эта функция принимает как IPv4-, так и IPv6-адреса (и сети), представленные в виде строк. Она возвращает `0`, если версии IP-адреса и CIDR не совпадают. - -**Синтаксис** - -```sql -isIPAddressInRange(address, prefix) -``` - -**Аргументы** - -* `address` — адрес IPv4 или IPv6. [`String`](/sql-reference/data-types/string) -* `prefix` — сетевой префикс IPv4 или IPv6 в формате CIDR. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает `1`, если версия IP-адреса и CIDR совпадают, в противном случае — `0`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**IPv4-адрес в диапазоне** - -```sql title=Query -SELECT isIPAddressInRange('127.0.0.1', '127.0.0.0/8') -``` - -```response title=Response -1 -``` - -**Адрес IPv4 вне допустимого диапазона** - -```sql title=Query -SELECT isIPAddressInRange('127.0.0.1', 'ffff::/16') -``` - -```response title=Response -0 -``` - -**IPv6-адрес вне допустимого диапазона** - -```sql title=Query -SELECT isIPAddressInRange('::ffff:192.168.0.1', '::ffff:192.168.0.4/128') -``` - -```response title=Response -0 -``` - - -## isIPv4String - -Добавлено в версии: v21.1 - -Определяет, является ли входная строка IPv4-адресом. -Для версии IPv6 см. [`isIPv6String`](#isIPv6String). - -**Синтаксис** - -```sql -isIPv4String(string) -``` - -**Аргументы** - -* `string` — строка с IP-адресом для проверки. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает `1`, если значение `string` является IPv4-адресом, иначе `0`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT addr, isIPv4String(addr) -FROM( -SELECT ['0.0.0.0', '127.0.0.1', '::ffff:127.0.0.1'] AS addr -) -ARRAY JOIN addr; -``` - -```response title=Response -┌─addr─────────────┬─isIPv4String(addr)─┐ -│ 0.0.0.0 │ 1 │ -│ 127.0.0.1 │ 1 │ -│ ::ffff:127.0.0.1 │ 0 │ -└──────────────────┴────────────────────┘ -``` - - -## isIPv6String - -Введена в версии: v21.1 - -Определяет, является ли входная строка IPv6-адресом. -Функцию для IPv4 см. в [`isIPv4String`](#isIPv4String). - -**Синтаксис** - -```sql -isIPv6String(string) -``` - -**Аргументы** - -* `string` — строка с IP-адресом для проверки. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает `1`, если `string` содержит IPv6-адрес, иначе `0`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT addr, isIPv6String(addr) -FROM(SELECT ['::', '1111::ffff', '::ffff:127.0.0.1', '127.0.0.1'] AS addr) -ARRAY JOIN addr; -``` - -```response title=Response -┌─addr─────────────┬─isIPv6String(addr)─┐ -│ :: │ 1 │ -│ 1111::ffff │ 1 │ -│ ::ffff:127.0.0.1 │ 1 │ -│ 127.0.0.1 │ 0 │ -└──────────────────┴────────────────────┘ -``` - - -## toIPv4 - -Добавлена в: v20.1 - -Преобразует строку или значение IPv4-адреса типа UInt32 в тип IPv4. -Похожа на функции [`IPv4StringToNum`](/sql-reference/functions/ip-address-functions#IPv4StringToNum) и [`IPv4NumToString`](/sql-reference/functions/ip-address-functions#IPv4NumToString), но поддерживает в качестве входных аргументов как строковый, так и беззнаковый целочисленный типы данных. - -**Синтаксис** - -```sql -toIPv4(x) -``` - -**Аргументы** - -* `x` — IPv4-адрес типа [`String`](/sql-reference/data-types/string) или [`UInt8/16/32`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает IPv4-адрес типа [`IPv4`](/sql-reference/data-types/ipv4). - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT toIPv4('171.225.130.45'); -``` - -```response title=Response -┌─toIPv4('171.225.130.45')─┐ -│ 171.225.130.45 │ -└──────────────────────────┘ -``` - -**Сравнение с функциями IPv4StringToNum и IPv4NumToString.** - -```sql title=Query -WITH - '171.225.130.45' AS IPv4_string -SELECT - hex(IPv4StringToNum(IPv4_string)), - hex(toIPv4(IPv4_string)) -``` - -```response title=Response -┌─hex(IPv4StringToNum(IPv4_string))─┬─hex(toIPv4(IPv4_string))─┐ -│ ABE1822D │ ABE1822D │ -└───────────────────────────────────┴──────────────────────────┘ -``` - -**Преобразование из целого типа** - -```sql title=Query -SELECT toIPv4(2130706433); -``` - -```response title=Response -┌─toIPv4(2130706433)─┐ -│ 127.0.0.1 │ -└────────────────────┘ -``` - - -## toIPv4OrDefault - -Введена в: v22.3 - -Преобразует строку или значение IPv4-адреса типа `UInt32` в тип [`IPv4`](../data-types/ipv4.md). -Если IPv4-адрес имеет некорректный формат, функция возвращает `0.0.0.0` (0 в формате IPv4) или заданное значение IPv4 по умолчанию. - -**Синтаксис** - -```sql -toIPv4OrDefault(string[, default]) -``` - -**Аргументы** - -* `string` — строка с IPv4-адресом для преобразования. [`String`](/sql-reference/data-types/string) -* `default` — необязательный параметр. Значение, которое будет возвращено, если `string` — некорректный IPv4-адрес. [`IPv4`](/sql-reference/data-types/ipv4) - -**Возвращаемое значение** - -Возвращает строку, преобразованную в IPv4-адрес, или значение по умолчанию, если преобразование не удалось. [`IPv4`](/sql-reference/data-types/ipv4) - -**Примеры** - -**Корректные и некорректные строки IPv4** - -```sql title=Query -WITH - '192.168.1.1' AS valid_IPv4_string, - '999.999.999.999' AS invalid_IPv4_string, - 'not_an_ip' AS malformed_string -SELECT - toIPv4OrDefault(valid_IPv4_string) AS valid, - toIPv4OrDefault(invalid_IPv4_string) AS default_value, - toIPv4OrDefault(malformed_string, toIPv4('8.8.8.8')) AS provided_default; -``` - -```response title=Response -┌─valid─────────┬─default_value─┬─provided_default─┐ -│ 192.168.1.1 │ 0.0.0.0 │ 8.8.8.8 │ -└───────────────┴───────────────┴──────────────────┘ -``` - - -## toIPv4OrNull - -Добавлена в версии: v22.3 - -Преобразует входное значение в тип `IPv4`, но в случае ошибки возвращает `NULL`. -Аналог функции [`toIPv4`](#toIPv4), но при ошибках преобразования вместо выбрасывания исключения возвращает `NULL`. - -Поддерживаемые аргументы: - -* Строковые представления IPv4-адресов в десятичной точечной нотации. -* Целочисленные представления IPv4-адресов. - -Неподдерживаемые аргументы (возвращают `NULL`): - -* Неверные форматы IP-адресов. -* IPv6-адреса. -* Значения вне допустимого диапазона. -* Некорректно сформированные адреса. - -**Синтаксис** - -```sql -toIPv4OrNull(x) -``` - -**Аргументы** - -* `x` — строковое или целочисленное представление IPv4-адреса. [`String`](/sql-reference/data-types/string) или [`Integer`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает IPv4-адрес при успешном преобразовании, в противном случае — `NULL`. [`IPv4`](/sql-reference/data-types/ipv4) или [`NULL`](/sql-reference/syntax#null) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT - toIPv4OrNull('192.168.1.1') AS valid_ip, - toIPv4OrNull('invalid.ip') AS invalid_ip -``` - -```response title=Response -┌─valid_ip────┬─invalid_ip─┐ -│ 192.168.1.1 │ ᴺᵁᴸᴸ │ -└─────────────┴────────────┘ -``` - - -## toIPv4OrZero - -Введена в версии: v23.1 - -Преобразует входное значение в значение типа [IPv4](../data-types/ipv4.md), но в случае ошибки возвращает нулевой IPv4-адрес. -Аналог функции [`toIPv4`](#toIPv4), но вместо генерации исключения при ошибках преобразования возвращает нулевой IPv4-адрес (`0.0.0.0`). - -Поддерживаемые аргументы: - -* Строковые представления IPv4-адресов в точечной десятичной нотации. -* Целочисленные представления IPv4-адресов. - -Неподдерживаемые аргументы (возвращается нулевой IPv4-адрес): - -* Неверные форматы IP-адресов. -* IPv6-адреса. -* Значения вне допустимого диапазона. - -**Синтаксис** - -```sql -toIPv4OrZero(x) -``` - -**Аргументы** - -* `x` — строковое или целочисленное представление IPv4-адреса. [`String`](/sql-reference/data-types/string) или [`Integer`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает IPv4-адрес при успешном преобразовании, в противном случае — нулевой IPv4-адрес (`0.0.0.0`). [`IPv4`](/sql-reference/data-types/ipv4) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT - toIPv4OrZero('192.168.1.1') AS valid_ip, - toIPv4OrZero('invalid.ip') AS invalid_ip -``` - -```response title=Response -┌─valid_ip────┬─invalid_ip─┐ -│ 192.168.1.1 │ 0.0.0.0 │ -└─────────────┴────────────┘ -``` - - -## toIPv6 - -Появилась в версии: v20.1 - -Преобразует строку или `UInt128`-представление IPv6-адреса в тип [`IPv6`](../data-types/ipv6.md). -Для строк: если IPv6-адрес имеет некорректный формат, возвращается пустое значение. -Аналогична функциям [`IPv6StringToNum`](/sql-reference/functions/ip-address-functions#IPv6StringToNum) и [`IPv6NumToString`](/sql-reference/functions/ip-address-functions#IPv6NumToString), которые преобразуют IPv6-адрес в двоичный формат и обратно (а именно в `FixedString(16)`). - -Если входная строка содержит корректный IPv4-адрес, возвращается IPv6-эквивалент этого IPv4-адреса. - -**Синтаксис** - -```sql -toIPv6(x) -``` - -**Аргументы** - -* `x` — IP-адрес. [`String`](/sql-reference/data-types/string) или [`UInt128`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает IPv6-адрес. [`IPv6`](/sql-reference/data-types/ipv6) - -**Примеры** - -**Пример использования** - -```sql title=Query -WITH '2001:438:ffff::407d:1bc1' AS IPv6_string -SELECT - hex(IPv6StringToNum(IPv6_string)), - hex(toIPv6(IPv6_string)); -``` - -```response title=Response -┌─hex(IPv6StringToNum(IPv6_string))─┬─hex(toIPv6(IPv6_string))─────────┐ -│ 20010438FFFF000000000000407D1BC1 │ 20010438FFFF000000000000407D1BC1 │ -└───────────────────────────────────┴──────────────────────────────────┘ -``` - -**Отображение адресов IPv4 в IPv6** - -```sql title=Query -SELECT toIPv6('127.0.0.1'); -``` - -```response title=Response -┌─toIPv6('127.0.0.1')─┐ -│ ::ffff:127.0.0.1 │ -└─────────────────────┘ -``` - - -## toIPv6OrDefault - -Впервые представлена в: v22.3 - -Преобразует строку или целочисленное значение типа UInt128, представляющее IPv6-адрес, в тип [`IPv6`](../data-types/ipv6.md). -Если IPv6-адрес имеет неверный формат, функция возвращает `::` (нулевой IPv6) или указанный IPv6 по умолчанию. - -**Синтаксис** - -```sql -toIPv6OrDefault(string[, default]) -``` - -**Аргументы** - -* `string` — строка с IP-адресом для преобразования. -* `default` — необязательный аргумент. Значение, которое будет возвращено, если `string` имеет некорректный формат. - -**Возвращаемое значение** - -Возвращает IPv6-адрес. Если аргумент `string` имеет некорректный формат, возвращает `::` или переданное необязательное значение по умолчанию. [`IPv6`](/sql-reference/data-types/ipv6) - -**Примеры** - -**Корректные и некорректные строки IPv6** - -```sql title=Query -WITH - '2001:0db8:85a3:0000:0000:8a2e:0370:7334' AS valid_IPv6_string, - '2001:0db8:85a3::8a2e:370g:7334' AS invalid_IPv6_string, - 'not_an_ipv6' AS malformed_string -SELECT - toIPv6OrDefault(valid_IPv6_string) AS valid, - toIPv6OrDefault(invalid_IPv6_string) AS default_value, - toIPv6OrDefault(malformed_string, toIPv6('::1')) AS provided_default; -``` - -```response title=Response -┌─допустимый────────────────────────────┬─значение_по_умолчанию─┬─заданное_значение_по_умолчанию─┐ -│ 2001:db8:85a3::8a2e:370:7334 │ :: │ ::1 │ -└────────────────────────────────────────┴───────────────┴──────────────────┘ -``` - - -## toIPv6OrNull - -Введена в версии: v22.3 - -Преобразует входное значение в значение типа `IPv6`, но возвращает `NULL` в случае ошибки. -Аналогична [`toIPv6`](#toIPv6), но возвращает `NULL` вместо выброса исключения при ошибках преобразования. - -Поддерживаемые аргументы: - -* Строковые представления IPv6-адресов в стандартной записи. -* Строковые представления IPv4-адресов (преобразуются в IPv4-mapped IPv6). -* Бинарные представления IPv6-адресов. - -Неподдерживаемые аргументы (возвращают `NULL`): - -* Неверные форматы IP-адресов. -* Некорректные IPv6-адреса. -* Значения вне допустимого диапазона. -* Неверная запись. - -**Синтаксис** - -```sql -toIPv6OrNull(x) -``` - -**Аргументы** - -* `x` — строковое представление IPv6- или IPv4-адреса. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает IPv6-адрес в случае успеха, иначе `NULL`. [`IPv6`](/sql-reference/data-types/ipv6) или [`NULL`](/sql-reference/syntax#null) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT - toIPv6OrNull('2001:0db8:85a3:0000:0000:8a2e:0370:7334') AS valid_ipv6, - toIPv6OrNull('invalid::ip') AS invalid_ipv6 -``` - -```response title=Response -┌─valid_ipv6──────────────────────────┬─invalid_ipv6─┐ -│ 2001:db8:85a3::8a2e:370:7334 │ ᴺᵁᴸᴸ │ -└─────────────────────────────────────┴──────────────┘ -``` - - -## toIPv6OrZero - -Появилась в версии: v23.1 - -Преобразует входное значение в значение типа [IPv6](../data-types/ipv6.md), но в случае ошибки возвращает нулевой IPv6-адрес. -Аналогична [`toIPv6`](#toIPv6), но возвращает нулевой IPv6-адрес (`::`) вместо генерации исключения при ошибках преобразования. - -Поддерживаемые аргументы: - -* Строковые представления IPv6-адресов в стандартной нотации. -* Строковые представления IPv4-адресов (преобразуются в IPv4-mapped IPv6). -* Бинарные представления IPv6-адресов. - -Неподдерживаемые аргументы (функция возвращает нулевой IPv6-адрес): - -* Неверные форматы IP-адресов. -* Некорректно сформированные IPv6-адреса. -* Значения вне допустимого диапазона. - -**Синтаксис** - -```sql -toIPv6OrZero(x) -``` - -**Аргументы** - -* `x` — строковое представление IPv6- или IPv4-адреса. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает IPv6-адрес при успешном выполнении, в противном случае — нулевой IPv6-адрес (`::`). [`IPv6`](/sql-reference/data-types/ipv6) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT - toIPv6OrZero('2001:0db8:85a3:0000:0000:8a2e:0370:7334') AS valid_ipv6, - toIPv6OrZero('invalid::ip') AS invalid_ipv6 -``` - -```response title=Response -┌─valid_ipv6──────────────────────────┬─invalid_ipv6─┐ -│ 2001:db8:85a3::8a2e:370:7334 │ :: │ -└─────────────────────────────────────┴──────────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/json-functions.md b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/json-functions.md index 387e5ae3bf6..657a0fc5fe2 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/json-functions.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/json-functions.md @@ -6,2032 +6,44 @@ title: 'Функции JSON' doc_type: 'reference' --- - - ## Типы JSON-функций {#types-of-functions} -Существует два набора функций для разбора JSON: +Существует два набора функций для парсинга JSON: -- [`simpleJSON*` (`visitParam*`)](#simplejson-visitparam-functions) — предназначены для очень быстрого разбора ограниченного подмножества JSON. -- [`JSONExtract*`](#jsonextract-functions) — предназначены для разбора обычного JSON. +- [`simpleJSON*` (`visitParam*`)](#simplejson-visitparam-functions), предназначенные для сверхбыстрого парсинга ограниченного подмножества JSON. +- [`JSONExtract*`](#jsonextract-functions), предназначенные для парсинга обычного JSON. -### Функции simpleJSON (visitParam) {#simplejson-visitparam-functions} +### функции simpleJSON (visitParam) {#simplejson-visitparam-functions} -В ClickHouse есть специальные функции для работы с упрощённым JSON. Все эти JSON-функции основаны на строгих предположениях о том, каким может быть JSON. Они выполняют минимум операций для максимально быстрого решения задачи. +В ClickHouse есть специальные функции для работы с упрощённым JSON. Все эти JSON-функции основаны на строгих предположениях о том, каким может быть JSON. Они стараются делать как можно меньше, чтобы выполнить задачу как можно быстрее. -Делаются следующие предположения: +Делаются следующие допущения: 1. Имя поля (аргумент функции) должно быть константой. 2. Имя поля должно быть канонически закодировано в JSON. Например: `simpleJSONHas('{"abc":"def"}', 'abc') = 1`, но `simpleJSONHas('{"\\u0061\\u0062\\u0063":"def"}', 'abc') = 0` -3. Поля ищутся на любом уровне вложенности без разбора. Если существует несколько совпадающих полей, используется первое вхождение. -4. JSON не содержит пробельных символов вне строковых литералов. +3. Поля ищутся на любом уровне вложенности, без различия. Если есть несколько совпадающих полей, используется первое вхождение. +4. В JSON нет пробелов вне строковых литералов. ### Функции JSONExtract {#jsonextract-functions} -Эти функции основаны на библиотеке [simdjson](https://github.com/lemire/simdjson) и предназначены для более сложных требований к разбору JSON. +Эти функции основаны на библиотеке [simdjson](https://github.com/lemire/simdjson) и предназначены для более сложных требований к парсингу JSON. -### Регистронезависимые функции JSONExtract {#case-insensitive-jsonextract-functions} +### Регистронезависимые функции JSONExtract Эти функции выполняют регистронезависимое сопоставление ключей ASCII при извлечении значений из JSON-объектов. -Они работают идентично своим регистрозависимым аналогам, за исключением того, что ключи объектов сопоставляются без учёта регистра. -Когда несколько ключей совпадают с разным регистром, возвращается первое совпадение. +Они работают так же, как и их регистрозависимые аналоги, за исключением того, что ключи объектов сопоставляются без учета регистра. +Если нескольким ключам соответствуют разные варианты написания, возвращается первое совпадение. :::note Эти функции могут работать медленнее, чем их регистрозависимые аналоги, поэтому по возможности используйте обычные функции JSONExtract. ::: - - - - - -## JSONAllPaths {#JSONAllPaths} - -Введена в версии: v24.8 - -Возвращает список всех путей, сохранённых в каждой строке столбца JSON. - -**Синтаксис** - -```sql -JSONAllPaths(json) -``` - -**Аргументы** - -- `json` — столбец JSON. [`JSON`](/sql-reference/data-types/newjson) - -**Возвращаемое значение** - -Возвращает массив всех путей в столбце JSON. [`Array(String)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -CREATE TABLE test (json JSON(max_dynamic_paths=1)) ENGINE = Memory; -INSERT INTO test FORMAT JSONEachRow {"json" : {"a" : 42}}, {"json" : {"b" : "Hello"}}, {"json" : {"a" : [1, 2, 3], "c" : "2020-01-01"}} -SELECT json, JSONAllPaths(json) FROM test; -``` - -```response title=Response -┌─json─────────────────────────────────┬─JSONAllPaths(json)─┐ -│ {"a":"42"} │ ['a'] │ -│ {"b":"Hello"} │ ['b'] │ -│ {"a":["1","2","3"],"c":"2020-01-01"} │ ['a','c'] │ -└──────────────────────────────────────┴────────────────────┘ -``` - - -## JSONAllPathsWithTypes {#JSONAllPathsWithTypes} - -Введена в версии: v24.8 - -Возвращает список всех путей и их типов данных, хранящихся в каждой строке столбца JSON. - -**Синтаксис** - -```sql -JSONAllPathsWithTypes(json) -``` - -**Аргументы** - -- `json` — столбец JSON. [`JSON`](/sql-reference/data-types/newjson) - -**Возвращаемое значение** - -Возвращает словарь всех путей и их типов данных в столбце JSON. [`Map(String, String)`](/sql-reference/data-types/map) - -**Примеры** - -**Пример использования** - -```sql title=Запрос -CREATE TABLE test (json JSON(max_dynamic_paths=1)) ENGINE = Memory; -INSERT INTO test FORMAT JSONEachRow {"json" : {"a" : 42}}, {"json" : {"b" : "Hello"}}, {"json" : {"a" : [1, 2, 3], "c" : "2020-01-01"}} -SELECT json, JSONAllPathsWithTypes(json) FROM test; -``` - -```response title=Результат -┌─json─────────────────────────────────┬─JSONAllPathsWithTypes(json)───────────────┐ -│ {"a":"42"} │ {'a':'Int64'} │ -│ {"b":"Hello"} │ {'b':'String'} │ -│ {"a":["1","2","3"],"c":"2020-01-01"} │ {'a':'Array(Nullable(Int64))','c':'Date'} │ -└──────────────────────────────────────┴───────────────────────────────────────────┘ -``` - - -## JSONArrayLength {#JSONArrayLength} - -Введена в версии: v23.2 - -Возвращает количество элементов в самом внешнем массиве JSON. -Функция возвращает `NULL`, если входная строка JSON невалидна. - -**Синтаксис** - -```sql -JSONArrayLength(json) -``` - -**Псевдонимы**: `JSON_ARRAY_LENGTH` - -**Аргументы** - -- `json` — строка с валидным JSON. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает количество элементов массива, если `json` является валидной строкой массива JSON, в противном случае возвращает `NULL`. [`Nullable(UInt64)`](/sql-reference/data-types/nullable) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT - JSONArrayLength(''), - JSONArrayLength('[1,2,3]'); -``` - -```response title=Response -┌─JSONArrayLength('')─┬─JSONArrayLength('[1,2,3]')─┐ -│ ᴺᵁᴸᴸ │ 3 │ -└─────────────────────┴────────────────────────────┘ -``` - - -## JSONDynamicPaths {#JSONDynamicPaths} - -Введено в версии: v24.8 - -Возвращает список динамических путей, которые хранятся как отдельные подстолбцы в столбце JSON. - -**Синтаксис** - -```sql -JSONDynamicPaths(json) -``` - -**Аргументы** - -- `json` — столбец JSON. [`JSON`](/sql-reference/data-types/newjson) - -**Возвращаемое значение** - -Возвращает массив динамических путей в столбце JSON. [`Array(String)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -CREATE TABLE test (json JSON(max_dynamic_paths=1)) ENGINE = Memory; -INSERT INTO test FORMAT JSONEachRow {"json" : {"a" : 42}}, {"json" : {"b" : "Hello"}}, {"json" : {"a" : [1, 2, 3], "c" : "2020-01-01"}} -SELECT json, JSONDynamicPaths(json) FROM test; -``` - -```response title=Response -┌─json─────────────────────────────────┬─JSONDynamicPaths(json)─┐ -│ {"a":"42"} │ ['a'] │ -│ {"b":"Hello"} │ [] │ -│ {"a":["1","2","3"],"c":"2020-01-01"} │ ['a'] │ -└──────────────────────────────────────┴────────────────────────┘ -``` - - -## JSONDynamicPathsWithTypes {#JSONDynamicPathsWithTypes} - -Введена в версии: v24.8 - -Возвращает список динамических путей, которые хранятся как отдельные подстолбцы, и их типы для каждой строки в столбце JSON. - -**Синтаксис** - -```sql -JSONDynamicPathsWithTypes(json) -``` - -**Аргументы** - -- `json` — столбец JSON. [`JSON`](/sql-reference/data-types/newjson) - -**Возвращаемое значение** - -Возвращает словарь динамических путей и их типов данных в столбце JSON. [`Map(String, String)`](/sql-reference/data-types/map) - -**Примеры** - -**Пример использования** - -```sql title=Запрос -CREATE TABLE test (json JSON(max_dynamic_paths=1)) ENGINE = Memory; -INSERT INTO test FORMAT JSONEachRow {"json" : {"a" : 42}}, {"json" : {"b" : "Hello"}}, {"json" : {"a" : [1, 2, 3], "c" : "2020-01-01"}} -SELECT json, JSONDynamicPathsWithTypes(json) FROM test; -``` - -```response title=Результат -┌─json─────────────────────────────────┬─JSONDynamicPathsWithTypes(json)─┐ -│ {"a":"42"} │ {'a':'Int64'} │ -│ {"b":"Hello"} │ {} │ -│ {"a":["1","2","3"],"c":"2020-01-01"} │ {'a':'Array(Nullable(Int64))'} │ -└──────────────────────────────────────┴─────────────────────────────────┘ -``` - - -## JSONExtract {#JSONExtract} - -Введена в версии: v19.14 - -Разбирает JSON и извлекает значение с заданным типом данных ClickHouse. - -**Синтаксис** - -```sql -JSONExtract(json, return_type[, indices_or_keys, ...]) -``` - -**Аргументы** - -- `json` — строка JSON для разбора. [`String`](/sql-reference/data-types/string) -- `return_type` — возвращаемый тип данных ClickHouse. [`String`](/sql-reference/data-types/string) -- `indices_or_keys` — список из нуля или более аргументов, каждый из которых может быть строкой или целым числом. [`String`](/sql-reference/data-types/string) или [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает значение указанного типа данных ClickHouse, если это возможно, иначе возвращает значение по умолчанию для этого типа. - -**Примеры** - -**Пример использования** - -```sql title=Запрос -SELECT JSONExtract('{"a": "hello", "b": [-100, 200.0, 300]}', 'Tuple(String, Array(Float64))') AS res; -``` - -```response title=Ответ -┌─res──────────────────────────────┐ -│ ('hello',[-100,200,300]) │ -└──────────────────────────────────┘ -``` - - -## JSONExtractArrayRaw {#JSONExtractArrayRaw} - -Введена в версии: v20.1 - -Возвращает массив с элементами JSON-массива, каждый из которых представлен в виде непарсенной строки. - -**Синтаксис** - -```sql -JSONExtractArrayRaw(json[, indices_or_keys, ...]) -``` - -**Аргументы** - -- `json` — JSON-строка для парсинга. [`String`](/sql-reference/data-types/string) -- `indices_or_keys` — Список из нуля или более аргументов, каждый из которых может быть строкой или целым числом. [`String`](/sql-reference/data-types/string) или [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает массив строк с элементами JSON-массива. Если указанная часть не является массивом или не существует, возвращается пустой массив. [`Array(String)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Запрос -SELECT JSONExtractArrayRaw('{"a": "hello", "b": [-100, 200.0, "hello"]}', 'b') AS res; -``` - -```response title=Результат -┌─res──────────────────────────┐ -│ ['-100','200.0','"hello"'] │ -└──────────────────────────────┘ -``` - - -## JSONExtractArrayRawCaseInsensitive {#JSONExtractArrayRawCaseInsensitive} - -Введена в версии: v25.8 - -Возвращает массив элементов JSON-массива, каждый из которых представлен в виде необработанной строки, с использованием регистронезависимого сопоставления ключей. Эта функция аналогична [`JSONExtractArrayRaw`](#JSONExtractArrayRaw). - -**Синтаксис** - -```sql -JSONExtractArrayRawCaseInsensitive(json [, indices_or_keys]...) -``` - -**Аргументы** - -- `json` — JSON-строка для парсинга [`String`](/sql-reference/data-types/string) -- `indices_or_keys` — Необязательный параметр. Индексы или ключи для навигации к массиву. Ключи используют регистронезависимое сопоставление [`String`](/sql-reference/data-types/string) или [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает массив необработанных JSON-строк. [`Array(String)`](/sql-reference/data-types/array) - -**Примеры** - -**базовый пример** - -```sql title=Query -SELECT JSONExtractArrayRawCaseInsensitive('{"Items": [1, 2, 3]}', 'ITEMS') -``` - -```response title=Response -['1','2','3'] -``` - - -## JSONExtractBool {#JSONExtractBool} - -Добавлена в версии: v20.1 - -Парсит JSON и извлекает значение типа Bool. - -**Синтаксис** - -```sql -JSONExtractBool(json[, indices_or_keys, ...]) -``` - -**Аргументы** - -- `json` — JSON-строка для парсинга. [`String`](/sql-reference/data-types/string) -- `indices_or_keys` — список из нуля или более аргументов, каждый из которых может быть строкой или целым числом. [`String`](/sql-reference/data-types/string) или [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает значение Bool, если оно существует, в противном случае возвращает `0`. [`Bool`](/sql-reference/data-types/boolean) - -**Примеры** - -**Пример использования** - -```sql title=Запрос -SELECT JSONExtractBool('{"passed": true}', 'passed') AS res; -``` - -```response title=Результат -┌─res─┐ -│ 1 │ -└─────┘ -``` - - -## JSONExtractBoolCaseInsensitive {#JSONExtractBoolCaseInsensitive} - -Введена в версии: v25.8 - -Разбирает JSON и извлекает логическое значение, используя регистронезависимое сопоставление ключей. Эта функция аналогична [`JSONExtractBool`](#JSONExtractBool). - -**Синтаксис** - -```sql -JSONExtractBoolCaseInsensitive(json [, indices_or_keys]...) -``` - -**Аргументы** - -- `json` — строка JSON для разбора [`String`](/sql-reference/data-types/string) -- `indices_or_keys` — необязательный параметр. Индексы или ключи для навигации к полю. Ключи используют регистронезависимое сопоставление [`String`](/sql-reference/data-types/string) или [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает извлечённое логическое значение (1 для true, 0 для false), 0 если значение не найдено. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Базовый пример** - -```sql title=Запрос -SELECT JSONExtractBoolCaseInsensitive('{"IsActive": true}', 'isactive') -``` - -```response title=Результат -1 -``` - - -## JSONExtractCaseInsensitive {#JSONExtractCaseInsensitive} - -Введена в версии: v25.8 - -Разбирает JSON и извлекает значение заданного типа данных ClickHouse с использованием сопоставления ключей без учёта регистра. Эта функция аналогична [`JSONExtract`](#JSONExtract). - -**Синтаксис** - -```sql -JSONExtractCaseInsensitive(json [, indices_or_keys...], return_type) -``` - -**Аргументы** - -- `json` — строка JSON для разбора [`String`](/sql-reference/data-types/string) -- `indices_or_keys` — необязательный параметр. Индексы или ключи для навигации к полю. Ключи сопоставляются без учёта регистра [`String`](/sql-reference/data-types/string) или [`(U)Int*`](/sql-reference/data-types/int-uint) -- `return_type` — тип данных ClickHouse для извлечения [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает извлечённое значение в указанном типе данных. [`Any`](/sql-reference/data-types) - -**Примеры** - -**int_type** - -```sql title=Запрос -SELECT JSONExtractCaseInsensitive('{"Number": 123}', 'number', 'Int32') -``` - -```response title=Результат -123 -``` - -**array_type** - -```sql title=Запрос -SELECT JSONExtractCaseInsensitive('{"List": [1, 2, 3]}', 'list', 'Array(Int32)') -``` - -```response title=Результат -[1,2,3] -``` - - -## JSONExtractFloat {#JSONExtractFloat} - -Введена в версии: v20.1 - -Разбирает JSON и извлекает значение типа Float. - -**Синтаксис** - -```sql -JSONExtractFloat(json[, indices_or_keys, ...]) -``` - -**Аргументы** - -- `json` — строка JSON для разбора. [`String`](/sql-reference/data-types/string) -- `indices_or_keys` — список из нуля или более аргументов, каждый из которых может быть строкой или целым числом. [`String`](/sql-reference/data-types/string) или [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает значение типа Float, если оно существует, в противном случае возвращает `0`. [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Запрос -SELECT JSONExtractFloat('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', 2) AS res; -``` - -```response title=Результат -┌─res─┐ -│ 200 │ -└─────┘ -``` - - -## JSONExtractFloatCaseInsensitive {#JSONExtractFloatCaseInsensitive} - -Введена в версии: v25.8 - -Разбирает JSON и извлекает значение типа Float, используя сопоставление ключей без учёта регистра. Эта функция аналогична [`JSONExtractFloat`](#JSONExtractFloat). - -**Синтаксис** - -```sql -JSONExtractFloatCaseInsensitive(json [, indices_or_keys]...) -``` - -**Аргументы** - -- `json` — строка JSON для разбора [`String`](/sql-reference/data-types/string) -- `indices_or_keys` — необязательный параметр. Индексы или ключи для навигации к полю. Ключи используют сопоставление без учёта регистра [`String`](/sql-reference/data-types/string) или [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает извлечённое значение Float, 0, если значение не найдено или не может быть преобразовано. [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**базовый пример** - -```sql title=Запрос -SELECT JSONExtractFloatCaseInsensitive('{"Price": 12.34}', 'PRICE') -``` - -```response title=Ответ -12.34 -``` - - -## JSONExtractInt {#JSONExtractInt} - -Введена в версии: v20.1 - -Разбирает JSON и извлекает значение типа Int. - -**Синтаксис** - -```sql -JSONExtractInt(json[, indices_or_keys, ...]) -``` - -**Аргументы** - -- `json` — JSON-строка для разбора. [`String`](/sql-reference/data-types/string) -- `indices_or_keys` — список из нуля или более аргументов, каждый из которых может быть строкой или целым числом. [`String`](/sql-reference/data-types/string) или [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает значение типа Int, если оно существует, в противном случае возвращает `0`. [`Int64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Запрос -SELECT JSONExtractInt('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', 1) AS res; -``` - -```response title=Результат -┌─res─┐ -│ 200 │ -└─────┘ -``` - - -## JSONExtractIntCaseInsensitive {#JSONExtractIntCaseInsensitive} - -Введена в версии: v25.8 - -Разбирает JSON и извлекает значение типа Int с использованием сопоставления ключей без учёта регистра. Эта функция аналогична [`JSONExtractInt`](#JSONExtractInt). - -**Синтаксис** - -```sql -JSONExtractIntCaseInsensitive(json [, indices_or_keys]...) -``` - -**Аргументы** - -- `json` — строка JSON для разбора [`String`](/sql-reference/data-types/string) -- `indices_or_keys` — необязательный параметр. Индексы или ключи для навигации к полю. Ключи сопоставляются без учёта регистра [`String`](/sql-reference/data-types/string) или [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает извлечённое значение Int, 0 если значение не найдено или не может быть преобразовано. [`Int64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**базовый пример** - -```sql title=Запрос -SELECT JSONExtractIntCaseInsensitive('{"Value": 123}', 'value') -``` - -```response title=Ответ -123 -``` - -**вложенная структура** - -```sql title=Запрос -SELECT JSONExtractIntCaseInsensitive('{"DATA": {"COUNT": 42}}', 'data', 'Count') -``` - -```response title=Ответ -42 -``` - - -## JSONExtractKeys {#JSONExtractKeys} - -Введена в версии: v21.11 - -Разбирает JSON-строку и извлекает ключи. - -**Синтаксис** - -```sql -JSONExtractKeys(json[, indices_or_keys, ...]) -``` - -**Аргументы** - -- `json` — JSON-строка для разбора. [`String`](/sql-reference/data-types/string) -- `indices_or_keys` — Список из нуля или более аргументов, каждый из которых может быть строкой или целым числом. [`String`](/sql-reference/data-types/string) или [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает массив с ключами JSON-объекта. [`Array(String)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Запрос -SELECT JSONExtractKeys('{"a": "hello", "b": [-100, 200.0, 300]}') AS res; -``` - -```response title=Результат -┌─res─────────┐ -│ ['a','b'] │ -└─────────────┘ -``` - - -## JSONExtractKeysAndValues {#JSONExtractKeysAndValues} - -Введена в версии: v20.1 - -Извлекает пары ключ-значение из JSON, где значения имеют заданный тип данных ClickHouse. - -**Синтаксис** - -```sql -JSONExtractKeysAndValues(json, value_type[, indices_or_keys, ...]) -``` - -**Аргументы** - -- `json` — строка JSON для парсинга. [`String`](/sql-reference/data-types/string) -- `value_type` — тип данных ClickHouse для значений. [`String`](/sql-reference/data-types/string) -- `indices_or_keys` — список из нуля или более аргументов, каждый из которых может быть строкой или целым числом. [`String`](/sql-reference/data-types/string) или [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает массив кортежей с разобранными парами ключ-значение. [`Array(Tuple(String, value_type))`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Запрос -SELECT JSONExtractKeysAndValues('{"x": {"a": 5, "b": 7, "c": 11}}', 'Int8', 'x') AS res; -``` - -```response title=Результат -┌─res────────────────────┐ -│ [('a',5),('b',7),('c',11)] │ -└────────────────────────┘ -``` - - -## JSONExtractKeysAndValuesCaseInsensitive {#JSONExtractKeysAndValuesCaseInsensitive} - -Введена в версии: v25.8 - -Извлекает пары ключ-значение из JSON с использованием регистронезависимого сопоставления ключей. Функция аналогична [`JSONExtractKeysAndValues`](#JSONExtractKeysAndValues). - -**Синтаксис** - -```sql -JSONExtractKeysAndValuesCaseInsensitive(json [, indices_or_keys...], value_type) -``` - -**Аргументы** - -- `json` — строка JSON для парсинга [`String`](/sql-reference/data-types/string) -- `indices_or_keys` — необязательный параметр. Индексы или ключи для навигации к объекту. Ключи сопоставляются без учета регистра [`String`](/sql-reference/data-types/string) или [`(U)Int*`](/sql-reference/data-types/int-uint) -- `value_type` — тип данных ClickHouse для значений [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает массив кортежей, содержащих пары ключ-значение. [`Array(Tuple(String, T))`](/sql-reference/data-types/array) - -**Примеры** - -**basic** - -```sql title=Запрос -SELECT JSONExtractKeysAndValuesCaseInsensitive('{"Name": "Alice", "AGE": 30}', 'String') -``` - -```response title=Результат -[('Name','Alice'),('AGE','30')] -``` - - -## JSONExtractKeysAndValuesRaw {#JSONExtractKeysAndValuesRaw} - -Введена в версии: v20.4 - -Возвращает массив кортежей с ключами и значениями из JSON-объекта. Все значения представлены в виде непарсированных строк. - -**Синтаксис** - -```sql -JSONExtractKeysAndValuesRaw(json[, indices_or_keys, ...]) -``` - -**Аргументы** - -- `json` — JSON-строка для парсинга. [`String`](/sql-reference/data-types/string) -- `indices_or_keys` — Список из нуля или более аргументов, каждый из которых может быть строкой или целым числом. [`String`](/sql-reference/data-types/string) или [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает массив кортежей с парами ключ-значение, где значения представлены в виде непарсированных строк. [`Array(Tuple(String, String))`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Запрос -SELECT JSONExtractKeysAndValuesRaw('{"a": [-100, 200.0], "b": "hello"}') AS res; -``` - -```response title=Результат -┌─res──────────────────────────────────┐ -│ [('a','[-100,200.0]'),('b','"hello"')] │ -└──────────────────────────────────────┘ -``` - - -## JSONExtractKeysAndValuesRawCaseInsensitive {#JSONExtractKeysAndValuesRawCaseInsensitive} - -Введена в версии: v25.8 - -Извлекает необработанные пары ключ-значение из JSON с использованием регистронезависимого сопоставления ключей. Эта функция аналогична [`JSONExtractKeysAndValuesRaw`](#JSONExtractKeysAndValuesRaw). - -**Синтаксис** - -```sql -JSONExtractKeysAndValuesRawCaseInsensitive(json [, indices_or_keys]...) -``` - -**Аргументы** - -- `json` — строка JSON для парсинга [`String`](/sql-reference/data-types/string) -- `indices_or_keys` — необязательный параметр. Индексы или ключи для навигации к объекту. Ключи используют регистронезависимое сопоставление [`String`](/sql-reference/data-types/string) или [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает массив кортежей, содержащих пары ключ-значение в виде необработанных строк. [`Array(Tuple(String, String))`](/sql-reference/data-types/array) - -**Примеры** - -**базовый пример** - -```sql title=Query -SELECT JSONExtractKeysAndValuesRawCaseInsensitive('{"Name": "Alice", "AGE": 30}') -``` - -```response title=Response -[('Name','"Alice"'),('AGE','30')] -``` - - -## JSONExtractKeysCaseInsensitive {#JSONExtractKeysCaseInsensitive} - -Введена в версии: v25.8 - -Разбирает JSON-строку и извлекает ключи с использованием регистронезависимого сопоставления для навигации по вложенным объектам. Функция аналогична [`JSONExtractKeys`](#JSONExtractKeys). - -**Синтаксис** - -```sql -JSONExtractKeysCaseInsensitive(json [, indices_or_keys]...) -``` - -**Аргументы** - -- `json` — JSON-строка для разбора [`String`](/sql-reference/data-types/string) -- `indices_or_keys` — Необязательный параметр. Индексы или ключи для навигации к объекту. Ключи сопоставляются без учета регистра [`String`](/sql-reference/data-types/string) или [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает массив ключей из JSON-объекта. [`Array(String)`](/sql-reference/data-types/array) - -**Примеры** - -**базовый пример** - -```sql title=Запрос -SELECT JSONExtractKeysCaseInsensitive('{"Name": "Alice", "AGE": 30}') -``` - -```response title=Результат -['Name','AGE'] -``` - -**вложенный объект** - -```sql title=Запрос -SELECT JSONExtractKeysCaseInsensitive('{"User": {"name": "John", "AGE": 25}}', 'user') -``` - -```response title=Результат -['name','AGE'] -``` - - -## JSONExtractRaw {#JSONExtractRaw} - -Введена в версии: v20.1 - -Возвращает часть JSON в виде неразобранной строки. - -**Синтаксис** - -```sql -JSONExtractRaw(json[, indices_or_keys, ...]) -``` - -**Аргументы** - -- `json` — строка JSON для разбора. [`String`](/sql-reference/data-types/string) -- `indices_or_keys` — список из нуля или более аргументов, каждый из которых может быть строкой или целым числом. [`String`](/sql-reference/data-types/string) или [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает часть JSON в виде неразобранной строки. Если часть не существует или имеет неверный тип, будет возвращена пустая строка. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT JSONExtractRaw('{"a": "hello", "b": [-100, 200.0, 300]}', 'b') AS res; -``` - -```response title=Response -┌─res──────────────┐ -│ [-100,200.0,300] │ -└──────────────────┘ -``` - - -## JSONExtractRawCaseInsensitive {#JSONExtractRawCaseInsensitive} - -Добавлена в версии: v25.8 - -Возвращает часть JSON в виде необработанной строки с использованием регистронезависимого сопоставления ключей. Эта функция аналогична [`JSONExtractRaw`](#JSONExtractRaw). - -**Синтаксис** - -```sql -JSONExtractRawCaseInsensitive(json [, indices_or_keys]...) -``` - -**Аргументы** - -- `json` — строка JSON для парсинга. [`String`](/sql-reference/data-types/string) -- `indices_or_keys` — необязательный параметр. Индексы или ключи для навигации к полю. Ключи используют регистронезависимое сопоставление. [`String`](/sql-reference/data-types/string) или [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает необработанную строку JSON извлечённого элемента. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**объект** - -```sql title=Query -SELECT JSONExtractRawCaseInsensitive('{"Object": {"key": "value"}}', 'OBJECT') -``` - -```response title=Response -{"key":"value"} -``` - - -## JSONExtractString {#JSONExtractString} - -Введена в версии: v20.1 - -Парсит JSON и извлекает значение типа String. - -**Синтаксис** - -```sql -JSONExtractString(json[, indices_or_keys, ...]) -``` - -**Аргументы** - -- `json` — JSON-строка для парсинга. [`String`](/sql-reference/data-types/string) -- `indices_or_keys` — список из нуля или более аргументов, каждый из которых может быть строкой или целым числом. [`String`](/sql-reference/data-types/string) или [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает значение типа String, если оно существует, в противном случае возвращает пустую строку. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Запрос -SELECT JSONExtractString('{"a": "hello", "b": [-100, 200.0, 300]}', 'a') AS res; -``` - -```response title=Результат -┌─res───┐ -│ hello │ -└───────┘ -``` - - -## JSONExtractStringCaseInsensitive {#JSONExtractStringCaseInsensitive} - -Введена в версии: v25.8 - -Разбирает JSON и извлекает строку с использованием сопоставления ключей без учёта регистра. Функция аналогична [`JSONExtractString`](#JSONExtractString). - -**Синтаксис** - -```sql -JSONExtractStringCaseInsensitive(json [, indices_or_keys]...) -``` - -**Аргументы** - -- `json` — строка JSON для разбора [`String`](/sql-reference/data-types/string) -- `indices_or_keys` — необязательный параметр. Индексы или ключи для навигации к полю. Ключи сопоставляются без учёта регистра [`String`](/sql-reference/data-types/string) или [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает извлечённое строковое значение или пустую строку, если значение не найдено. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**базовый пример** - -```sql title=Запрос -SELECT JSONExtractStringCaseInsensitive('{"ABC": "def"}', 'abc') -``` - -```response title=Результат -def -``` - -**вложенная структура** - -```sql title=Запрос -SELECT JSONExtractStringCaseInsensitive('{"User": {"Name": "John"}}', 'user', 'name') -``` - -```response title=Результат -John -``` - - -## JSONExtractUInt {#JSONExtractUInt} - -Добавлено в версии: v20.1 - -Разбирает JSON и извлекает значение типа UInt. - -**Синтаксис** - -```sql -JSONExtractUInt(json [, indices_or_keys, ...]) -``` - -**Аргументы** - -- `json` — строка JSON для разбора. [`String`](/sql-reference/data-types/string) -- `indices_or_keys` — список из нуля или более аргументов, каждый из которых может быть строкой или целым числом. [`String`](/sql-reference/data-types/string) или [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает значение типа UInt, если оно существует, в противном случае возвращает `0`. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Запрос -SELECT JSONExtractUInt('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', -1) AS res; -``` - -```response title=Результат -┌─res─┐ -│ 300 │ -└─────┘ -``` - - -## JSONExtractUIntCaseInsensitive {#JSONExtractUIntCaseInsensitive} - -Добавлено в версии: v25.8 - -Разбирает JSON и извлекает значение типа UInt с использованием сопоставления ключей без учёта регистра. Функция аналогична [`JSONExtractUInt`](#JSONExtractUInt). - -**Синтаксис** - -```sql -JSONExtractUIntCaseInsensitive(json [, indices_or_keys]...) -``` - -**Аргументы** - -- `json` — строка JSON для разбора. [`String`](/sql-reference/data-types/string) -- `indices_or_keys` — необязательный параметр. Индексы или ключи для навигации к полю. Ключи сопоставляются без учёта регистра. [`String`](/sql-reference/data-types/string) или [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает извлечённое значение UInt, либо 0, если значение не найдено или не может быть преобразовано. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**базовый пример** - -```sql title=Query -SELECT JSONExtractUIntCaseInsensitive('{"COUNT": 789}', 'count') -``` - -```response title=Response -789 -``` - - -## JSONHas {#JSONHas} - -Введена в версии: v20.1 - -Проверяет наличие указанного значения (значений) в JSON-документе. - -**Синтаксис** - -```sql -JSONHas(json[ ,indices_or_keys, ...]) -``` - -**Аргументы** - -- `json` — JSON-строка для парсинга [`String`](/sql-reference/data-types/string) -- `[ ,indices_or_keys, ...]` — Список из нуля или более аргументов. [`String`](/sql-reference/data-types/string) или [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает `1`, если значение присутствует в `json`, иначе `0` [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Запрос -SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', 'b') = 1; -SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', 4) = 0; -``` - -```response title=Результат -1 -0 -``` - - -## JSONLength {#JSONLength} - -Введена в версии: v20.1 - -Возвращает длину JSON-массива или JSON-объекта. -Если значение не существует или имеет неправильный тип, возвращается `0`. - -**Синтаксис** - -```sql -JSONLength(json [, indices_or_keys, ...]) -``` - -**Аргументы** - -- `json` — JSON-строка для парсинга [`String`](/sql-reference/data-types/string) -- `[, indices_or_keys, ...]` — Необязательный параметр. Список из нуля или более аргументов. [`String`](/sql-reference/data-types/string) или [`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает длину JSON-массива или JSON-объекта. Если значение не существует или имеет неправильный тип, возвращается `0`. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Запрос -SELECT JSONLength('{"a": "hello", "b": [-100, 200.0, 300]}', 'b') = 3; -SELECT JSONLength('{"a": "hello", "b": [-100, 200.0, 300]}') = 2; -``` - -```response title=Результат -1 -1 -``` - - -## JSONMergePatch {#JSONMergePatch} - -Introduced in: v23.10 - -Возвращает строку объединённого JSON-объекта, сформированного путём слияния нескольких JSON-объектов. - -**Синтаксис** - -```sql -jsonMergePatch(json1[, json2, ...]) -``` - -**Псевдонимы**: `jsonMergePatch` - -**Аргументы** - -- `json1[, json2, ...]` — одна или несколько строк с корректным JSON. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает строку объединённого JSON-объекта, если строки JSON-объектов корректны. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Запрос -SELECT jsonMergePatch('{"a":1}', '{"name": "joey"}', '{"name": "tom"}', '{"name": "zoey"}') AS res; -``` - -```response title=Результат -┌─res───────────────────┐ -│ {"a":1,"name":"zoey"} │ -└───────────────────────┘ -``` - - -## JSONSharedDataPaths {#JSONSharedDataPaths} - -Введена в версии: v24.8 - -Возвращает список путей, хранящихся в структуре разделяемых данных столбца JSON. - -**Синтаксис** - -```sql -JSONSharedDataPaths(json) -``` - -**Аргументы** - -- `json` — столбец JSON. [`JSON`](/sql-reference/data-types/newjson) - -**Возвращаемое значение** - -Возвращает массив путей, хранящихся в структуре разделяемых данных столбца JSON. [`Array(String)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Запрос -CREATE TABLE test (json JSON(max_dynamic_paths=1)) ENGINE = Memory; -INSERT INTO test FORMAT JSONEachRow {"json" : {"a" : 42}}, {"json" : {"b" : "Hello"}}, {"json" : {"a" : [1, 2, 3], "c" : "2020-01-01"}} -SELECT json, JSONSharedDataPaths(json) FROM test; -``` - -```response title=Результат -┌─json─────────────────────────────────┬─JSONSharedDataPaths(json)─┐ -│ {"a":"42"} │ [] │ -│ {"b":"Hello"} │ ['b'] │ -│ {"a":["1","2","3"],"c":"2020-01-01"} │ ['c'] │ -└──────────────────────────────────────┴───────────────────────────┘ -``` - - -## JSONSharedDataPathsWithTypes {#JSONSharedDataPathsWithTypes} - -Введена в версии: v24.8 - -Возвращает список путей, хранящихся в общей структуре данных, и их типы для каждой строки столбца JSON. - -**Синтаксис** - -```sql -JSONSharedDataPathsWithTypes(json) -``` - -**Аргументы** - -- `json` — столбец JSON. [`JSON`](/sql-reference/data-types/newjson) - -**Возвращаемое значение** - -Возвращает словарь путей, хранящихся в общей структуре данных, и их типов данных в столбце JSON. [`Map(String, String)`](/sql-reference/data-types/map) - -**Примеры** - -**Пример использования** - -```sql title=Query -CREATE TABLE test (json JSON(max_dynamic_paths=1)) ENGINE = Memory; -INSERT INTO test FORMAT JSONEachRow {"json" : {"a" : 42}}, {"json" : {"b" : "Hello"}}, {"json" : {"a" : [1, 2, 3], "c" : "2020-01-01"}} -SELECT json, JSONSharedDataPathsWithTypes(json) FROM test; -``` - -```response title=Response -┌─json─────────────────────────────────┬─JSONSharedDataPathsWithTypes(json)─┐ -│ {"a":"42"} │ {} │ -│ {"b":"Hello"} │ {'b':'String'} │ -│ {"a":["1","2","3"],"c":"2020-01-01"} │ {'c':'Date'} │ -└──────────────────────────────────────┴─────────────────────────────────────┘ -``` - - -## JSONType {#JSONType} - -Введена в версии: v20.1 - -Возвращает тип значения JSON. Если значение не существует, возвращается `Null=0`. - -**Синтаксис** - -```sql -JSONType(json[, indices_or_keys, ...]) -``` - -**Аргументы** - -- `json` — JSON-строка для парсинга [`String`](/sql-reference/data-types/string) -- `json[, indices_or_keys, ...]` — Список из нуля или более аргументов, каждый из которых может быть строкой или целым числом. [`String`](/sql-reference/data-types/string) или [`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает тип значения JSON в виде строки, в противном случае, если значение не существует, возвращается `Null=0` [`Enum`](/sql-reference/data-types/enum) - -**Примеры** - -**Пример использования** - -```sql title=Запрос -SELECT JSONType('{"a": "hello", "b": [-100, 200.0, 300]}') = 'Object'; -SELECT JSONType('{"a": "hello", "b": [-100, 200.0, 300]}', 'a') = 'String'; -SELECT JSONType('{"a": "hello", "b": [-100, 200.0, 300]}', 'b') = 'Array'; -``` - -```response title=Результат -1 -1 -1 -``` - - -## JSON_EXISTS {#JSON_EXISTS} - -Введена в версии: v21.8 - -Если значение существует в JSON-документе, возвращается `1`. -Если значение не существует, возвращается `0`. - -**Синтаксис** - -```sql -JSON_EXISTS(json, path) -``` - -**Аргументы** - -- `json` — строка с валидным JSON. [`String`](/sql-reference/data-types/string) -- `path` — строка, представляющая путь. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает `1`, если значение существует в JSON-документе, иначе `0`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Запрос -SELECT JSON_EXISTS('{"hello":1}', '$.hello'); -SELECT JSON_EXISTS('{"hello":{"world":1}}', '$.hello.world'); -SELECT JSON_EXISTS('{"hello":["world"]}', '$.hello[*]'); -SELECT JSON_EXISTS('{"hello":["world"]}', '$.hello[0]'); -``` - -```response title=Результат -┌─JSON_EXISTS(⋯ '$.hello')─┐ -│ 1 │ -└──────────────────────────┘ -┌─JSON_EXISTS(⋯llo.world')─┐ -│ 1 │ -└──────────────────────────┘ -┌─JSON_EXISTS(⋯.hello[*]')─┐ -│ 1 │ -└──────────────────────────┘ -┌─JSON_EXISTS(⋯.hello[0]')─┐ -│ 1 │ -└──────────────────────────┘ -``` - - -## JSON_QUERY {#JSON_QUERY} - -Введена в версии: v21.8 - -Разбирает JSON и извлекает значение в виде массива JSON или объекта JSON. -Если значение не существует, возвращается пустая строка. - -**Синтаксис** - -```sql -JSON_QUERY(json, path) -``` - -**Аргументы** - -- `json` — строка с валидным JSON. [`String`](/sql-reference/data-types/string) -- `path` — строка, представляющая путь. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает извлечённый массив JSON или объект JSON в виде строки, или пустую строку, если значение не существует. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Запрос -SELECT JSON_QUERY('{"hello":"world"}', '$.hello'); -SELECT JSON_QUERY('{"array":[[0, 1, 2, 3, 4, 5], [0, -1, -2, -3, -4, -5]]}', '$.array[*][0 to 2, 4]'); -SELECT JSON_QUERY('{"hello":2}', '$.hello'); -SELECT toTypeName(JSON_QUERY('{"hello":2}', '$.hello')); -``` - -```response title=Результат -["world"] -[0, 1, 4, 0, -1, -4] -[2] -String -``` - - -## JSON_VALUE {#JSON_VALUE} - -Введена в версии: v21.11 - -Разбирает JSON и извлекает значение как JSON-скаляр. Если значение не существует, по умолчанию возвращается пустая строка. - -Работа этой функции управляется следующими настройками: - -- при установке `function_json_value_return_type_allow_nullable` = `true` будет возвращено значение `NULL`. Если значение имеет сложный тип (например: struct, array, map), по умолчанию возвращается пустая строка. -- при установке `function_json_value_return_type_allow_complex` = `true` будет возвращено сложное значение. - -**Синтаксис** - -```sql -JSON_VALUE(json, path) -``` - -**Аргументы** - -- `json` — строка с валидным JSON. [`String`](/sql-reference/data-types/string) -- `path` — строка, представляющая путь. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает извлеченный JSON-скаляр в виде строки или пустую строку, если значение не существует. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT JSON_VALUE('{"hello":"world"}', '$.hello'); -SELECT JSON_VALUE('{"array":[[0, 1, 2, 3, 4, 5], [0, -1, -2, -3, -4, -5]]}', '$.array[*][0 to 2, 4]'); -SELECT JSON_VALUE('{"hello":2}', '$.hello'); -SELECT JSON_VALUE('{"hello":"world"}', '$.b') settings function_json_value_return_type_allow_nullable=true; -``` - -```response title=Response -world -0 -2 -ᴺᵁᴸᴸ -``` - - -## dynamicElement {#dynamicElement} - -Введена в версии: v24.1 - -Извлекает столбец указанного типа из столбца `Dynamic`. - -Эта функция позволяет извлекать значения определённого типа из столбца Dynamic. Если строка содержит значение -запрашиваемого типа, возвращается это значение. Если строка содержит значение другого типа или NULL, возвращается NULL -для скалярных типов или пустой массив для массивов. - -**Синтаксис** - -```sql -dynamicElement(dynamic, type_name) -``` - -**Аргументы** - -- `dynamic` — столбец Dynamic, из которого выполняется извлечение. [`Dynamic`](/sql-reference/data-types/dynamic) -- `type_name` — имя типа для извлечения (например, 'String', 'Int64', 'Array(Int64)'). - -**Возвращаемое значение** - -Возвращает значения указанного типа из столбца Dynamic. Для несовпадающих типов возвращается NULL (или пустой массив для массивов). [`Any`](/sql-reference/data-types) - -**Примеры** - -**Извлечение различных типов из столбца Dynamic** - -```sql title=Запрос -CREATE TABLE test (d Dynamic) ENGINE = Memory; -INSERT INTO test VALUES (NULL), (42), ('Hello, World!'), ([1, 2, 3]); -SELECT d, dynamicType(d), dynamicElement(d, 'String'), dynamicElement(d, 'Int64'), dynamicElement(d, 'Array(Int64)'), dynamicElement(d, 'Date'), dynamicElement(d, 'Array(String)') FROM test -``` - -```response title=Результат -┌─d─────────────┬─dynamicType(d)─┬─dynamicElement(d, 'String')─┬─dynamicElement(d, 'Int64')─┬─dynamicElement(d, 'Array(Int64)')─┬─dynamicElement(d, 'Date')─┬─dynamicElement(d, 'Array(String)')─┐ -│ ᴺᵁᴸᴸ │ None │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ [] │ ᴺᵁᴸᴸ │ [] │ -│ 42 │ Int64 │ ᴺᵁᴸᴸ │ 42 │ [] │ ᴺᵁᴸᴸ │ [] │ -│ Hello, World! │ String │ Hello, World! │ ᴺᵁᴸᴸ │ [] │ ᴺᵁᴸᴸ │ [] │ -│ [1,2,3] │ Array(Int64) │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ [1,2,3] │ ᴺᵁᴸᴸ │ [] │ -└───────────────┴────────────────┴─────────────────────────────┴────────────────────────────┴───────────────────────────────────┴───────────────────────────┴────────────────────────────────────┘ -``` - - -## dynamicType {#dynamicType} - -Введена в версии: v24.1 - -Возвращает имя типа варианта для каждой строки столбца `Dynamic`. - -Для строк, содержащих NULL, функция возвращает 'None'. Для всех остальных строк возвращается фактический тип данных, -хранящийся в этой строке столбца Dynamic (например, 'Int64', 'String', 'Array(Int64)'). - -**Синтаксис** - -```sql -dynamicType(dynamic) -``` - -**Аргументы** - -- `dynamic` — столбец Dynamic для анализа. [`Dynamic`](/sql-reference/data-types/dynamic) - -**Возвращаемое значение** - -Возвращает имя типа значения, хранящегося в каждой строке, или 'None' для значений NULL. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Анализ типов в столбце Dynamic** - -```sql title=Запрос -CREATE TABLE test (d Dynamic) ENGINE = Memory; -INSERT INTO test VALUES (NULL), (42), ('Hello, World!'), ([1, 2, 3]); -SELECT d, dynamicType(d) FROM test; -``` - -```response title=Результат -┌─d─────────────┬─dynamicType(d)─┐ -│ ᴺᵁᴸᴸ │ None │ -│ 42 │ Int64 │ -│ Hello, World! │ String │ -│ [1,2,3] │ Array(Int64) │ -└───────────────┴────────────────┘ -``` - - -## isDynamicElementInSharedData {#isDynamicElementInSharedData} - -Введена в версии: v24.1 - -Возвращает true для строк в столбце типа Dynamic, которые хранятся в общем формате вариантов, а не в виде отдельных подстолбцов. - -Когда столбец типа Dynamic имеет ограничение `max_types`, значения, превышающие этот лимит, сохраняются в общем бинарном формате -вместо разделения на отдельные типизированные подстолбцы. Эта функция определяет, какие строки хранятся в этом общем формате. - -**Синтаксис** - -```sql -isDynamicElementInSharedData(dynamic) -``` - -**Аргументы** - -- `dynamic` — столбец типа Dynamic для проверки. [`Dynamic`](/sql-reference/data-types/dynamic) - -**Возвращаемое значение** - -Возвращает true, если значение хранится в общем формате вариантов, false, если хранится как отдельный подстолбец или является NULL. [`Bool`](/sql-reference/data-types/boolean) - -**Примеры** - -**Проверка формата хранения в столбце Dynamic с ограничением max_types** - -```sql title=Query -CREATE TABLE test (d Dynamic(max_types=2)) ENGINE = Memory; -INSERT INTO test VALUES (NULL), (42), ('Hello, World!'), ([1, 2, 3]); -SELECT d, isDynamicElementInSharedData(d) FROM test; -``` - -```response title=Response -┌─d─────────────┬─isDynamicElementInSharedData(d)─┐ -│ ᴺᵁᴸᴸ │ false │ -│ 42 │ false │ -│ Hello, World! │ true │ -│ [1,2,3] │ true │ -└───────────────┴─────────────────────────────────┘ -``` - - -## isValidJSON {#isValidJSON} - -Введена в версии: v20.1 - -Проверяет, является ли переданная строка валидным JSON. - -**Синтаксис** - -```sql -isValidJSON(json) -``` - -**Аргументы** - -- `json` — JSON-строка для валидации [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает `1`, если строка является валидным JSON, иначе `0`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Запрос -SELECT isValidJSON('{"a": "hello", "b": [-100, 200.0, 300]}') = 1; -SELECT isValidJSON('not JSON') = 0; -``` - -```response title=Результат -1 -0 -``` - -**Использование целых чисел для доступа к JSON-массивам и JSON-объектам** - -```sql title=Запрос -SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', 0); -SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', 1); -SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', 2); -SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', -1); -SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', -2); -SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', 3); -``` - -```response title=Результат -0 -1 -1 -1 -1 -1 -0 -``` - - -## simpleJSONExtractBool {#simpleJSONExtractBool} - -Введена в версии: v21.4 - -Извлекает логическое значение true/false из поля с именем `field_name`. -Результат имеет тип `UInt8`. - -**Синтаксис** - -```sql -simpleJSONExtractBool(json, field_name) -``` - -**Псевдонимы**: `visitParamExtractBool` - -**Аргументы** - -- `json` — JSON, в котором выполняется поиск поля. [`String`](/sql-reference/data-types/string) -- `field_name` — Имя искомого поля. [`const String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает `1`, если значение поля равно `true`, иначе `0`. Это означает, что функция вернёт `0` в следующих случаях (включая, но не ограничиваясь): - -- Если поле не существует. -- Если поле содержит `true` в виде строки, например: `{"field":"true"}`. -- Если поле содержит `1` в виде числового значения. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Запрос -CREATE TABLE jsons -( - `json` String -) -ENGINE = MergeTree -ORDER BY tuple(); - -INSERT INTO jsons VALUES ('{"foo":false,"bar":true}'); -INSERT INTO jsons VALUES ('{"foo":"true","qux":1}'); - -SELECT simpleJSONExtractBool(json, 'bar') FROM jsons ORDER BY json; -SELECT simpleJSONExtractBool(json, 'foo') FROM jsons ORDER BY json; -``` - -```response title=Результат -0 -1 -0 -0 -``` - - -## simpleJSONExtractFloat {#simpleJSONExtractFloat} - -Введена в версии: v21.4 - -Извлекает значение типа `Float64` из поля с именем `field_name`. -Если `field_name` является строковым полем, функция пытается извлечь число из начала строки. -Если поле не существует или не содержит число, возвращается `0`. - -**Синтаксис** - -```sql -simpleJSONExtractFloat(json, field_name) -``` - -**Псевдонимы**: `visitParamExtractFloat` - -**Аргументы** - -- `json` — JSON, в котором выполняется поиск поля. [`String`](/sql-reference/data-types/string) -- `field_name` — Имя искомого поля. [`const String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает число, извлечённое из поля, если поле существует и содержит число, в противном случае — `0`. [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Запрос -CREATE TABLE jsons -( - `json` String -) -ENGINE = MergeTree -ORDER BY tuple(); - -INSERT INTO jsons VALUES ('{"foo":"-4e3"}'); -INSERT INTO jsons VALUES ('{"foo":-3.4}'); -INSERT INTO jsons VALUES ('{"foo":5}'); -INSERT INTO jsons VALUES ('{"foo":"not1number"}'); -INSERT INTO jsons VALUES ('{"baz":2}'); - -SELECT simpleJSONExtractFloat(json, 'foo') FROM jsons ORDER BY json; -``` - -```response title=Результат -0 --4000 -0 --3.4 -5 -``` - - -## simpleJSONExtractInt {#simpleJSONExtractInt} - -Введено в версии: v21.4 - -Извлекает значение типа `Int64` из поля с именем `field_name`. -Если `field_name` является строковым полем, функция пытается извлечь число из начала строки. -Если поле не существует или не содержит число, возвращается `0`. - -**Синтаксис** - -```sql -simpleJSONExtractInt(json, field_name) -``` - -**Псевдонимы**: `visitParamExtractInt` - -**Аргументы** - -- `json` — JSON, в котором выполняется поиск поля. [`String`](/sql-reference/data-types/string) -- `field_name` — Имя искомого поля. [`const String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает число, извлечённое из поля, если поле существует и содержит число, иначе `0`. [`Int64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Запрос -CREATE TABLE jsons -( - `json` String -) -ENGINE = MergeTree -ORDER BY tuple(); - -INSERT INTO jsons VALUES ('{"foo":"-4e3"}'); -INSERT INTO jsons VALUES ('{"foo":-3.4}'); -INSERT INTO jsons VALUES ('{"foo":5}'); -INSERT INTO jsons VALUES ('{"foo":"not1number"}'); -INSERT INTO jsons VALUES ('{"baz":2}'); - -SELECT simpleJSONExtractInt(json, 'foo') FROM jsons ORDER BY json; -``` - -```response title=Результат -0 --4 -0 --3 -5 -``` - - -## simpleJSONExtractRaw {#simpleJSONExtractRaw} - -Введена в версии: v21.4 - -Возвращает значение поля с именем `field_name` в виде `String`, включая разделители. - -**Синтаксис** - -```sql -simpleJSONExtractRaw(json, field_name) -``` - -**Псевдонимы**: `visitParamExtractRaw` - -**Аргументы** - -- `json` — JSON, в котором осуществляется поиск поля. [`String`](/sql-reference/data-types/string) -- `field_name` — Имя искомого поля. [`const String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает значение поля в виде строки, включая разделители, если поле существует, или пустую строку в противном случае. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Запрос -CREATE TABLE jsons -( - `json` String -) -ENGINE = MergeTree -ORDER BY tuple(); - -INSERT INTO jsons VALUES ('{"foo":"-4e3"}'); -INSERT INTO jsons VALUES ('{"foo":-3.4}'); -INSERT INTO jsons VALUES ('{"foo":5}'); -INSERT INTO jsons VALUES ('{"foo":{"def":[1,2,3]}}'); -INSERT INTO jsons VALUES ('{"baz":2}'); - -SELECT simpleJSONExtractRaw(json, 'foo') FROM jsons ORDER BY json; -``` - -```response title=Результат -"-4e3" --3.4 -5 -{"def":[1,2,3]} -``` - - -## simpleJSONExtractString {#simpleJSONExtractString} - -Введена в версии: v21.4 - -Извлекает строковое значение в двойных кавычках из поля с именем `field_name`. - -**Детали реализации** - -В настоящее время не поддерживаются кодовые точки в формате `\uXXXX\uYYYY`, не входящие в базовую многоязычную плоскость (они преобразуются в CESU-8 вместо UTF-8). - -**Синтаксис** - -```sql -simpleJSONExtractString(json, field_name) -``` - -**Псевдонимы**: `visitParamExtractString` - -**Аргументы** - -- `json` — JSON, в котором выполняется поиск поля. [`String`](/sql-reference/data-types/string) -- `field_name` — Имя искомого поля. [`const String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает значение поля в виде строки с обработанными escape-последовательностями, включая разделители. Возвращается пустая строка, если поле не содержит строку в двойных кавычках, если обработка escape-последовательностей завершилась неудачей или если поле не существует. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Запрос -CREATE TABLE jsons -( - `json` String -) -ENGINE = MergeTree -ORDER BY tuple(); - -INSERT INTO jsons VALUES ('{"foo":"\\n\\u0000"}'); -INSERT INTO jsons VALUES ('{"foo":"\\u263"}'); -INSERT INTO jsons VALUES ('{"foo":"\\u263a"}'); -INSERT INTO jsons VALUES ('{"foo":"hello}'); - -SELECT simpleJSONExtractString(json, 'foo') FROM jsons ORDER BY json; -``` - -```response title=Результат -\n\0 - -☺ -``` - - -## simpleJSONExtractUInt {#simpleJSONExtractUInt} - -Введена в версии: v21.4 - -Извлекает значение `UInt64` из поля с именем `field_name`. -Если `field_name` является строковым полем, функция пытается извлечь число из начала строки. -Если поле не существует или не содержит число, возвращается `0`. - -**Синтаксис** - -```sql -simpleJSONExtractUInt(json, field_name) -``` - -**Псевдонимы**: `visitParamExtractUInt` - -**Аргументы** - -- `json` — JSON, в котором выполняется поиск поля. [`String`](/sql-reference/data-types/string) -- `field_name` — Имя поля для поиска. [`const String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает число, извлечённое из поля, если поле существует и содержит число, в противном случае `0`. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -CREATE TABLE jsons -( - `json` String -) -ENGINE = MergeTree -ORDER BY tuple(); - -INSERT INTO jsons VALUES ('{"foo":"4e3"}'); -INSERT INTO jsons VALUES ('{"foo":3.4}'); -INSERT INTO jsons VALUES ('{"foo":5}'); -INSERT INTO jsons VALUES ('{"foo":"not1number"}'); -INSERT INTO jsons VALUES ('{"baz":2}'); - -SELECT simpleJSONExtractUInt(json, 'foo') FROM jsons ORDER BY json; -``` - -```response title=Response -0 -4 -0 -3 -5 -``` - - -## simpleJSONHas {#simpleJSONHas} - -Introduced in: v21.4 - -Проверяет наличие поля с именем `field_name`. - -**Синтаксис** - -```sql -simpleJSONHas(json, field_name) -``` - -**Псевдонимы**: `visitParamHas` - -**Аргументы** - -- `json` — JSON, в котором выполняется поиск поля. [`String`](/sql-reference/data-types/string) -- `field_name` — Имя искомого поля. [`const String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает `1`, если поле существует, `0` в противном случае. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -CREATE TABLE jsons -( - `json` String -) -ENGINE = MergeTree -ORDER BY tuple(); - -INSERT INTO jsons VALUES ('{"foo":"true","qux":1}'); - -SELECT simpleJSONHas(json, 'foo') FROM jsons; -SELECT simpleJSONHas(json, 'bar') FROM jsons; -``` - -```response title=Response -1 -0 -``` - - -## toJSONString {#toJSONString} - -Введена в версии: v21.7 - -Сериализует значение в его JSON-представление. Поддерживаются различные типы данных и вложенные структуры. -64-битные [целые числа](../data-types/int-uint.md) или больше (например, `UInt64` или `Int128`) по умолчанию заключаются в кавычки. Настройка [output_format_json_quote_64bit_integers](/operations/settings/formats#output_format_json_quote_64bit_integers) управляет этим поведением. -Специальные значения `NaN` и `inf` заменяются на `null`. Включите настройку [output_format_json_quote_denormals](/operations/settings/formats#output_format_json_quote_denormals), чтобы отображать их. -При сериализации значения [Enum](../data-types/enum.md) функция выводит его имя. - -См. также: - -- [output_format_json_quote_64bit_integers](/operations/settings/formats#output_format_json_quote_64bit_integers) -- [output_format_json_quote_denormals](/operations/settings/formats#output_format_json_quote_denormals) - -**Синтаксис** - -```sql -toJSONString(value) -``` - -**Аргументы** - -- `value` — значение для сериализации. Значение может быть любого типа данных. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает JSON-представление значения. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Сериализация Map** - -```sql title=Запрос -SELECT toJSONString(map('key1', 1, 'key2', 2)); -``` - -```response title=Результат -┌─toJSONString(map('key1', 1, 'key2', 2))─┐ -│ {"key1":1,"key2":2} │ -└─────────────────────────────────────────┘ -``` - -**Специальные значения** - -```sql title=Запрос -SELECT toJSONString(tuple(1.25, NULL, NaN, +inf, -inf, [])) SETTINGS output_format_json_quote_denormals = 1; -``` +{/* + Внутреннее содержимое тегов ниже при сборке фреймворка документации заменяется + на документацию, сгенерированную из system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. + См.: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md + */ } -```response title=Результат -┌─toJSONString(tuple(1.25, NULL, NaN, plus(inf), minus(inf), []))─┐ -│ [1.25,null,"nan","inf","-inf",[]] │ -└─────────────────────────────────────────────────────────────────┘ -``` +{/*AUTOGENERATED_START*/ } - +{/*AUTOGENERATED_END*/ } diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/logical-functions.md b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/logical-functions.md index 4de0eccdb1b..499479e0687 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/logical-functions.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/logical-functions.md @@ -6,208 +6,19 @@ title: 'Логические функции' doc_type: 'reference' --- - - # Логические функции -Приведённые ниже функции выполняют логические операции над аргументами произвольных числовых типов. -Они возвращают либо `0`, либо `1` как значение типа [`UInt8`](../data-types/int-uint.md) или, в некоторых случаях, `NULL`. +Следующие функции выполняют логические операции над аргументами произвольных числовых типов. +Они возвращают либо `0`, либо `1` в виде [`UInt8`](../data-types/int-uint.md), либо в некоторых случаях `NULL`. Ноль в качестве аргумента считается `false`, ненулевые значения считаются `true`. {/* - Внутреннее содержимое расположенных ниже тегов заменяется при сборке фреймворка документации - документацией, сгенерированной на основе system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. + Содержимое приведённых ниже тегов заменяется во время сборки фреймворка документации + документацией, сгенерированной из system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. См.: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## and - -Введена в: v1.1 - -Вычисляет логическое И (конъюнкцию) двух и более значений. - -Настройка [`short_circuit_function_evaluation`](/operations/settings/settings#short_circuit_function_evaluation) управляет использованием укороченной оценки выражений. -Если она включена, `val_i` вычисляется только в том случае, если `(val_1 AND val_2 AND ... AND val_{i-1})` равно `true`. - -Например, при включённой укороченной оценке выражений исключение «деление на ноль» не возникает при выполнении запроса `SELECT and(number = 2, intDiv(1, number)) FROM numbers(5)`. -Ноль в качестве аргумента считается `false`, ненулевые значения считаются `true`. - -**Синтаксис** - -```sql -and(знач1, знач2[, ...]) -``` - -**Аргументы** - -* `val1, val2[, ...]` — список не менее чем из двух значений. [`Nullable((U)Int*)`](/sql-reference/data-types/nullable) или [`Nullable(Float*)`](/sql-reference/data-types/nullable) - -**Возвращаемое значение** - -Возвращает: - -* `0`, если хотя бы один аргумент принимает значение `false` -* `NULL`, если ни один аргумент не принимает значение `false` и при этом хотя бы один аргумент равен `NULL` -* `1` — в остальных случаях - [`Nullable(UInt8)`](/sql-reference/data-types/nullable) - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT and(0, 1, -2); -``` - -```response title=Response -0 -``` - -**С NULL** - -```sql title=Query -SELECT and(NULL, 1, 10, -2); -``` - -```response title=Response -ᴺᵁᴸᴸ -``` - - -## not - -Добавлено в версии: v1.1 - -Вычисляет логическое отрицание значения. -Ноль в качестве аргумента рассматривается как `false`, ненулевые значения — как `true`. - -**Синтаксис** - -```sql -not(val) -``` - -**Аргументы** - -* `val` — значение. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает: - -* `1`, если `val` интерпретируется как `false` -* `0`, если `val` интерпретируется как `true` -* `NULL`, если `val` равно `NULL`. - [`Nullable(UInt8)`](/sql-reference/data-types/nullable) - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT NOT(1); -``` - -```response title=Response -0 -``` - - -## or - -Введено в: v1.1 - -Вычисляет логическую дизъюнкцию двух или более значений. - -Настройка [`short_circuit_function_evaluation`](https://clickhouse.com/docs/operations/settings/settings#short_circuit_function_evaluation) управляет использованием укороченного вычисления. -Если настройка включена, `val_i` вычисляется только в том случае, если `((NOT val_1) AND (NOT val_2) AND ... AND (NOT val_{i-1}))` имеет значение `true`. - -Например, при использовании укороченного вычисления исключение «деление на ноль» не возникает при выполнении запроса `SELECT or(number = 0, intDiv(1, number) != 0) FROM numbers(5)`. -Ноль в качестве аргумента считается `false`, ненулевые значения считаются `true`. - -**Синтаксис** - -```sql -or(знач1, знач2[, ...]) -``` - -**Аргументы** - -* `val1, val2[, ...]` — список как минимум из двух значений. [`Nullable((U)Int*)`](/sql-reference/data-types/nullable) или [`Nullable(Float*)`](/sql-reference/data-types/nullable) - -**Возвращаемое значение** - -Возвращает: - -* `1`, если хотя бы один аргумент имеет значение `true` -* `0`, если все аргументы имеют значение `false` -* `NULL`, если все аргументы имеют значение `false` и хотя бы один аргумент равен `NULL` - [`Nullable(UInt8)`](/sql-reference/data-types/nullable) - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT or(1, 0, 0, 2, NULL); -``` - -```response title=Response -1 -``` - -**С NULL-значением** - -```sql title=Query -SELECT or(0, NULL); -``` - -```response title=Response -ᴺᵁᴸᴸ -``` - - -## xor - -Добавлена в: v1.1 - -Вычисляет логическое исключающее «или» (исключающую дизъюнкцию) для двух или более значений. -При более чем двух входных значениях функция сначала применяет xor к первым двум значениям, затем — к результату и третьему значению и т.д. -Ноль в качестве аргумента интерпретируется как `false`, ненулевые значения — как `true`. - -**Синтаксис** - -```sql -xor(val1, val2[, ...]) -``` - -**Аргументы** - -* `val1, val2[, ...]` — список из как минимум двух значений. [`Nullable((U)Int*)`](/sql-reference/data-types/nullable) или [`Nullable(Float*)`](/sql-reference/data-types/nullable) - -**Возвращаемое значение** - -Возвращает: - -* `1` для двух значений, если одно из значений интерпретируется как `false`, а другое — нет -* `0` для двух значений, если оба значения интерпретируются как `false` или оба как `true` -* `NULL`, если хотя бы один из аргументов имеет значение `NULL`. - [`Nullable(UInt8)`](/sql-reference/data-types/nullable) - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT xor(0, 1, 1); -``` - -```response title=Response -0 -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/math-functions.md b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/math-functions.md index 1302000604e..efa73530e43 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/math-functions.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/math-functions.md @@ -6,1299 +6,14 @@ title: 'Математические функции' doc_type: 'reference' --- - - # Математические функции {/* - Внутреннее содержимое приведённых ниже тегов при сборке фреймворка документации + Внутреннее содержимое тегов ниже при сборке фреймворка документации заменяется документацией, сгенерированной из system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. См.: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## acos - -Впервые появилась в версии: v1.1 - -Возвращает арккосинус аргумента. - -**Синтаксис** - -```sql -acos(x) -``` - -**Аргументы** - -* `x` — значение, для которого вычисляется арккосинус. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal*`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Возвращает арккосинус числа `x` в виде [`Float*`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT acos(0.5); -``` - -```response title=Response -1.0471975511965979 -``` - - -## acosh - -Появилась в версии: v20.12 - -Возвращает обратный гиперболический косинус. - -**Синтаксис** - -```sql -acosh(x) -``` - -**Аргументы** - -* `x` — значение гиперболического косинуса угла. Значения из интервала: `1 ≤ x < +∞`. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal*`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Возвращает угол в радианах. Значения из интервала: `0 ≤ acosh(x) < +∞`. [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT acosh(1) -``` - -```response title=Response -0 -``` - - -## asin - -Впервые появилась в версии v1.1 - -Вычисляет арксинус переданного аргумента. -Для аргументов в диапазоне `[-1, 1]` возвращает значение в диапазоне `[-pi() / 2, pi() / 2]`. - -**Синтаксис** - -```sql -asin(x) -``` - -**Аргументы** - -* `x` — аргумент, для которого вычисляется арксинус. [`(U)Int*`](/sql-reference/data-types/int-uint), [`Float*`](/sql-reference/data-types/float) или [`Decimal`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Возвращает арксинус аргумента `x` в формате [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**обратная функция** - -```sql title=Query -SELECT asin(1.0) = pi() / 2, sin(asin(1)), asin(sin(1)) -``` - -```response title=Response -1 1 1 -``` - -**float32** - -```sql title=Query -SELECT toTypeName(asin(1.0::Float32)) -``` - -```response title=Response -Float64 -``` - -**nan** - -```sql title=Query -SELECT asin(1.1), asin(-2), asin(inf), asin(nan) -``` - -```response title=Response -nan nan nan nan -``` - - -## asinh - -Впервые добавлена в версии: v20.12 - -Возвращает обратный гиперболический синус. - -**Синтаксис** - -```sql -asinh(x) -``` - -**Аргументы** - -* `x` — гиперболический синус угла. Значения из диапазона: `-∞ < x < +∞`. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal*`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Возвращает угол в радианах. Значения из диапазона: `-∞ < asinh(x) < +∞`. [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT asinh(0) -``` - -```response title=Response -0 -``` - - -## atan - -Появился в версии v1.1 - -Возвращает арктангенс аргумента. - -**Синтаксис** - -```sql -atan(x) -``` - -**Аргументы** - -* `x` — значение, для которого нужно вычислить арктангенс. [`(U)Int*`](/sql-reference/data-types/int-uint), [`Float*`](/sql-reference/data-types/float) или [`Decimal*`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Возвращает арктангенс числа `x`. [`Float*`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT atan(1); -``` - -```response title=Response -0.7853981633974483 -``` - - -## atan2 - -Появилась в версии: v20.12 - -Возвращает значение функции atan2 — угол в евклидовой плоскости в радианах между положительным направлением оси x и лучом, проходящим через точку `(x, y) ≠ (0, 0)`. - -**Синтаксис** - -```sql -atan2(y, x) -``` - -**Аргументы** - -* `y` — координата y точки, через которую проходит луч. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal*`](/sql-reference/data-types/decimal) -* `x` — координата x точки, через которую проходит луч. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal*`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Возвращает угол `θ`, такой что `-π < θ ≤ π`, в радианах, типа [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT atan2(1, 1) -``` - -```response title=Response -0.7853981633974483 -``` - - -## atanh - -Появилась в версии v20.12 - -Возвращает обратный гиперболический тангенс. - -**Синтаксис** - -```sql -atanh(x) -``` - -**Аргументы** - -* `x` — гиперболический тангенс аргумента. Значения из диапазона: -1 < x < 1. `(U)Int*`, `Float*` или `Decimal*`. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal*`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Возвращает угол в радианах. Значения из диапазона: -∞ < atanh(x) < +∞ [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT atanh(0) -``` - -```response title=Response -0 -``` - - -## cbrt - -Добавлена в версии v1.1 - -Возвращает кубический корень аргумента. - -**Синтаксис** - -```sql -cbrt(x) -``` - -**Аргументы** - -* `x` — Значение, для которого нужно найти кубический корень. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal*`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Возвращает кубический корень от `x`. [`Float*`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT cbrt(8); -``` - -```response title=Response -2 -``` - - -## cos - -Введена в версии v1.1 - -Возвращает косинус аргумента. - -**Синтаксис** - -```sql -cos(x) -``` - -**Аргументы** - -* `x` — угол в радианах. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal*`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Возвращает косинус `x`. [`Float*`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT cos(0); -``` - -```response title=Response -1 -``` - - -## cosh - -Добавлена в: v20.12 - -Возвращает гиперболический косинус аргумента. - -**Синтаксис** - -```sql -cosh(x) -``` - -**Аргументы** - -* `x` — угол в радианах. Значения из интервала: `-∞ < x < +∞`. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal*`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Возвращает значения из интервала: `1 ≤ cosh(x) < +∞` [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Базовый пример** - -```sql title=Query -SELECT cosh(0) -``` - -```response title=Response -1 -``` - - -## degrees - -Добавлена в версии: v22.2 - -Преобразует радианы в градусы. - -**Синтаксис** - -```sql -degrees(x) -``` - -**Аргументы** - -* `x` — входное значение в радианах. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal*`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Возвращает значение `x` в градусах. [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT degrees(3.141592653589793) -``` - -```response title=Response -180 -``` - - -## e - -Введена в версии v1.1 - -Возвращает постоянную Эйлера e. - -**Синтаксис** - -```sql -e() -``` - -**Аргументы** - -* Нет. - -**Возвращаемое значение** - -Возвращает константу Эйлера типа [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT e(); -``` - -```response title=Response -2.718281828459045 -``` - - -## erf - -Введена в версии: v1.1 - -Если `x` неотрицательно, то `erf(x/(σ√2))` — это вероятность того, что случайная величина, имеющая нормальное распределение со стандартным отклонением `σ`, примет значение, которое отклоняется от математического ожидания более чем на `x`. - -**Синтаксис** - -```sql -erf(x) -``` - -**Аргументы** - -* `x` — Значение, для которого вычисляется значение функции ошибок. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal*`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Возвращает значение функции ошибок типа [`Float*`](/sql-reference/data-types/float) - -**Примеры** - -**Правило трёх сигм** - -```sql title=Query -SELECT erf(3 / sqrt(2)) -``` - -```response title=Response -┌─erf(divide(3, sqrt(2)))─┐ -│ 0.9973002039367398 │ -└─────────────────────────┘ -``` - - -## erfc - -Впервые появилась в версии v1.1 - -Возвращает значение, близкое к `1 - erf(x)`, без потери точности даже для больших значений `x`. - -**Синтаксис** - -```sql -erfc(x) -``` - -**Аргументы** - -* `x` — значение, для которого вычисляется дополнительная функция ошибок. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal*`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Возвращает значение дополнительной функции ошибок типа [`Float*`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT erfc(0); -``` - -```response title=Response -1 -``` - - -## exp - -Добавлено в: v1.1 - -Возвращает `e`, возведённое в степень `x`, где `x` — переданный функции аргумент. - -**Синтаксис** - -```sql -exp(x) -``` - -**Аргументы** - -* `x` — показатель степени, тип [`(U)Int*`](/sql-reference/data-types/int-uint), [`Float*`](/sql-reference/data-types/float) или [`Decimal*`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Возвращает `e^x` типа [`Float*`](/sql-reference/data-types/float) - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT round(exp(-1), 4) -``` - -```response title=Response -┌─round(exp(-1), 4)─┐ -│ 0.3679 │ -└───────────────────┘ -``` - - -## exp10 - -Появилась в версии v1.1 - -Возвращает 10, возведённое в степень, заданную аргументом. - -**Синтаксис** - -```sql -exp10(x) -``` - -**Аргументы** - -* `x` — показатель степени. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal*`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Возвращает 10^x типа [`Float*`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT exp10(2); -``` - -```response title=Response -100 -``` - - -## exp2 - -Появилось в версии: v1.1 - -Возвращает 2 в степени указанного аргумента. - -**Синтаксис** - -```sql -exp2(x) -``` - -**Аргументы** - -* `x` — показатель степени. Тип [`(U)Int*`](/sql-reference/data-types/int-uint), [`Float*`](/sql-reference/data-types/float) или [`Decimal*`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Возвращает число 2^x типа [`Float*`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT exp2(3); -``` - -```response title=Response -8 -``` - - -## factorial - -Введена в версии v22.11 - -Вычисляет факториал целочисленного значения. -Факториал 0 равен 1. Аналогично, функция `factorial()` возвращает `1` для любого отрицательного значения. -Максимальное положительное значение входного аргумента — `20`; значение `21` или больше вызовет исключение. - -**Синтаксис** - -```sql -factorial(n) -``` - -**Аргументы** - -* `n` — целочисленное значение, факториал которого нужно вычислить. Максимальное значение — 20. [`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает факториал входного значения в виде UInt64. Возвращает 1, если на вход подано 0 или отрицательное значение. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -factorial(10) -``` - -```response title=Response -3628800 -``` - - -## hypot - -Добавлена в: v20.12 - -Возвращает длину гипотенузы прямоугольного треугольника. -Функция `hypot` предотвращает проблемы, возникающие при возведении в квадрат очень больших или очень малых чисел. - -**Синтаксис** - -```sql -hypot(x, y) -``` - -**Аргументы** - -* `x` — первый катет прямоугольного треугольника. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal*`](/sql-reference/data-types/decimal) -* `y` — второй катет прямоугольного треугольника. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal*`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Возвращает длину гипотенузы прямоугольного треугольника. [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT hypot(1, 1) -``` - -```response title=Response -1.4142135623730951 -``` - - -## intExp10 - -Добавлена в версии: v1.1 - -Аналог функции [exp10](#exp10), но возвращает число типа `UInt64`. - -**Синтаксис** - -```sql -intExp10(x) -``` - -**Аргументы** - -* `x` — показатель степени. [`Int*`](/sql-reference/data-types/int-uint), [`UInt*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает 10^x в виде значения типа [`UInt64`](/sql-reference/data-types/int-uint). - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT intExp10(2); -``` - -```response title=Response -100 -``` - - -## intExp2 - -Добавлена в версии v1.1 - -Как [exp2](#exp2), но возвращает число типа `UInt64`. - -**Синтаксис** - -```sql -intExp2(x) -``` - -**Аргументы** - -* `x` — показатель степени. [`Int*`](/sql-reference/data-types/int-uint) или [`UInt*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает 2^x. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT intExp2(3); -``` - -```response title=Response -8 -``` - - -## lgamma - -Введена в версии v1.1 - -Возвращает логарифм гамма-функции. - -**Синтаксис** - -```sql -lgamma(x) -``` - -**Аргументы** - -* `x` — число, для которого вычисляется логарифм гамма-функции. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal*`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Возвращает логарифм гамма-функции от `x`. [`Float*`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT lgamma(5); -``` - -```response title=Response -3.1780538303479458 -``` - - -## log - -Впервые появилась в версии v1.1 - -Возвращает натуральный логарифм аргумента. - -**Синтаксис** - -```sql -log(x) -``` - -**Псевдонимы**: `ln` - -**Аргументы** - -* `x` — число, для которого нужно вычислить натуральный логарифм. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal*`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Возвращает натуральный логарифм `x`. [`Float*`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT log(10); -``` - -```response title=Response -2.302585092994046 -``` - - -## log10 - -Впервые представлена в версии: v1.1 - -Возвращает десятичный логарифм аргумента. - -**Синтаксис** - -```sql -log10(x) -``` - -**Аргументы** - -* `x` — число, для которого вычисляется десятичный логарифм. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal*`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Возвращает десятичный логарифм `x`. [`Float*`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT log10(100); -``` - -```response title=Response -2 -``` - - -## log1p - -Добавлена в версии: v20.12 - -Вычисляет log(1 + x). -Вычисление log1p(x) даёт более точный результат, чем log(1 + x), для малых значений `x`. - -**Синтаксис** - -```sql -log1p(x) -``` - -**Аргументы** - -* `x` — значения из интервала `-1 < x < +∞`. [`(U)Int*`](/sql-reference/data-types/int-uint), [`Float*`](/sql-reference/data-types/float) или [`Decimal*`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Возвращает значения из интервала: -∞ < log1p(x) < +∞ [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT log1p(0) -``` - -```response title=Response -0 -``` - - -## log2 - -Введена в версии: v1.1 - -Возвращает двоичный логарифм аргумента. - -**Синтаксис** - -```sql -log2(x) -``` - -**Аргументы** - -* `x` — число, для которого нужно вычислить двоичный логарифм. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal*`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Возвращает двоичный логарифм `x`. [`Float*`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT log2(8); -``` - -```response title=Response -3 -``` - - -## pi - -Введена в версии v1.1 - -Возвращает число π. - -**Синтаксис** - -```sql -pi() -``` - -**Аргументы** - -* Нет. - -**Возвращаемое значение** - -Возвращает число π типа [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT pi(); -``` - -```response title=Response -3.141592653589793 -``` - - -## pow - -Введена в версии: v1.1 - -Возвращает x, возведённый в степень y. - -**Синтаксис** - -```sql -pow(x, y) -``` - -**Псевдонимы**: `power` - -**Аргументы** - -* `x` — основание. [`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal*`](/sql-reference/data-types/decimal) -* `y` — показатель степени. [`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal*`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Возвращает x^y типа [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT pow(2, 3); -``` - -```response title=Response -8 -``` - - -## radians - -Добавлена в версии: v22.2 - -Преобразует градусы в радианы. - -**Синтаксис** - -```sql -radians(x) -``` - -**Аргументы** - -* `x` — Входное значение в градусах. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal*`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Возвращает значение в радианах [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT radians(180) -``` - -```response title=Response -3.141592653589793 -``` - - -## sign - -Добавлена в версии: v21.2 - -Возвращает знак вещественного числа. - -**Синтаксис** - -```sql -sign(x) -``` - -**Аргументы** - -* `x` — значения в диапазоне от -∞ до +∞. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Decimal*`](/sql-reference/data-types/decimal) или [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает `-1` при `x < 0`, `0` при `x = 0`, `1` при `x > 0`. [`Int8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Знак для нуля** - -```sql title=Query -SELECT sign(0) -``` - -```response title=Response -0 -``` - -**Знак для положительных значений** - -```sql title=Query -SELECT sign(1) -``` - -```response title=Response -1 -``` - -**Знак отрицательных значений** - -```sql title=Query -SELECT sign(-1) -``` - -```response title=Response --1 -``` - - -## sin - -Появилась в версии: v - -Возвращает синус аргумента. - -**Синтаксис** - -```sql -sin(x) -``` - -**Аргументы** - -* `x` — число, синус которого возвращается. [`(U)Int*`](/sql-reference/data-types/int-uint), [`Float*`](/sql-reference/data-types/float) или [`Decimal*`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Возвращает синус `x`. - -**Примеры** - -**Простой пример** - -```sql title=Query -SELECT sin(1.23) -``` - -```response title=Response -0.9424888019316975 -``` - - -## sinh - -Добавлено в: v20.12 - -Возвращает гиперболический синус. - -**Синтаксис** - -```sql -sinh(x) -``` - -**Аргументы** - -* `x` — угол в радианах. Значения из интервала: -∞ < x < +∞. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal*`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Возвращает значение из интервала: -∞ < sinh(x) < +∞ [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT sinh(0) -``` - -```response title=Response -0 -``` - - -## sqrt - -Введена в версии v1.1 - -Возвращает квадратный корень от аргумента. - -**Синтаксис** - -```sql -sqrt(x) -``` - -**Аргументы** - -* `x` — число, квадратный корень которого нужно найти. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal*`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Возвращает квадратный корень числа x [`Float*`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT sqrt(16); -``` - -```response title=Response -4 -``` - - -## tan - -Появилась в версии: v1.1 - -Возвращает тангенс аргумента. - -**Синтаксис** - -```sql -tan(x) -``` - -**Аргументы** - -* `x` — угол в радианах. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal*`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Возвращает тангенс угла `x`. [`Float*`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT tan(0); -``` - -```response title=Response -0 -``` - - -## tanh - -Впервые появилась в версии: v20.1 - -Возвращает гиперболический тангенс. - -**Синтаксис** - -```sql -tanh(x) -``` - -**Аргументы** - -* `x` — угол в радианах. Значение из интервала: -∞ < x < +∞. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal*`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Возвращает значение из интервала: -1 < tanh(x) < 1 [`Float*`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT tanh(0) -``` - -```response title=Response -0 -``` - - -## tgamma - -Появилась в версии: v1.1 - -Возвращает гамма-функцию. - -**Синтаксис** - -```sql -tgamma(x) -``` - -**Аргументы** - -* `x` — число, для которого нужно вычислить гамма-функцию. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal*`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Возвращает значение гамма-функции типа [`Float*`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT tgamma(5); -``` - -```response title=Response -24 -``` - - -## widthBucket - -Добавлена в: v23.3 - -Возвращает номер корзины гистограммы, в которую попадает параметр `operand`, при условии, что гистограмма состоит из `count` корзин одинаковой ширины, охватывающих диапазон от `low` до `high`. Возвращает 0, если `operand` меньше `low`, и `count`+1, если `operand` больше либо равен `high`. -Также существует регистронезависимый синоним `WIDTH_BUCKET` для обеспечения совместимости с другими системами управления базами данных. - -**Синтаксис** - -```sql -widthBucket(operand, low, high, count) -``` - -**Псевдонимы**: `width_bucket` - -**Аргументы** - -* `operand` — Значение, для которого нужно определить корзину. [`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) -* `low` — Нижняя граница диапазона гистограммы. [`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) -* `high` — Верхняя граница диапазона гистограммы. [`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) -* `count` — Количество корзин одинаковой ширины. Не может быть равен нулю. [`UInt8/16/32/64`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает номер корзины в виде целого числа. Возвращает 0, если `operand` < `low`, возвращает `count` + 1, если `operand` >= `high`. [`UInt8/16/32/64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -widthBucket(10.15, -8.6, 23, 18) -``` - -```response title=Response -11 -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/nlp-functions.md b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/nlp-functions.md index 1bdaf91d807..6aab69645bb 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/nlp-functions.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/nlp-functions.md @@ -18,339 +18,15 @@ import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; :::warning -Это экспериментальная функция, которая в данный момент находится в разработке и не готова к широкому применению. В будущих релизах она может меняться непредсказуемым образом, нарушающим обратную совместимость. Установите `allow_experimental_nlp_functions = 1`, чтобы включить её. +Это экспериментальная функциональность, которая в данный момент находится в разработке и не готова для широкого использования. В будущих версиях она будет меняться непредсказуемым образом, нарушая обратную совместимость. Установите `allow_experimental_nlp_functions = 1`, чтобы включить её. ::: {/* - Внутреннее содержимое тегов ниже заменяется во время сборки фреймворка документации + Внутреннее содержимое следующих тегов заменяется на этапе сборки фреймворка документации документацией, сгенерированной из system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. См.: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## detectCharset - -Появилась в: v22.2 - -Определяет кодировку входной строки, закодированной не в UTF-8. - -**Синтаксис** - -```sql -detectCharset(s) -``` - -**Аргументы** - -* `s` — текст для анализа. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает строку с кодировкой обнаруженного набора символов. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT detectCharset('Я останусь на несколько дней.') -``` - -```response title=Response -WINDOWS-1252 -``` - - -## detectLanguage - -Появилась в версии: v22.2 - -Определяет язык входной строки в кодировке UTF-8. -Функция использует библиотеку [CLD2](https://github.com/CLD2Owners/cld2) для определения языка и возвращает двухбуквенный языковой код ISO. - -Чем длиннее входные данные, тем точнее будет определение языка. - -**Синтаксис** - -```sql -detectLanguage(s) -``` - -**Аргументы** - -* `text_to_be_analyzed` — Текст для анализа. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает двухбуквенный ISO‑код определённого языка. Другие возможные результаты: `un` = неизвестно, не удалось определить язык, `other` = для определённого языка нет двухбуквенного кода. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Текст на смешанном языке** - -```sql title=Query -SELECT detectLanguage('Je pense que je ne parviendrai jamais à parler français comme un natif. Where there\'s a will, there\'s a way.') -``` - -```response title=Response -fr -``` - - -## detectLanguageMixed - -Добавлено в: v22.2 - -Аналогично функции [`detectLanguage`](#detectLanguage), но `detectLanguageMixed` возвращает `Map`, в котором двухбуквенным кодам языков сопоставлены значения с процентной долей соответствующего языка в тексте. - -**Синтаксис** - -```sql -detectLanguageMixed(s) -``` - -**Аргументы** - -* `s` — текст для анализа [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает отображение (map), где ключами являются двухбуквенные ISO‑коды, а значениями — процент текста, относящийся к соответствующему языку [`Map(String, Float32)`](/sql-reference/data-types/map) - -**Примеры** - -**Смешанные языки** - -```sql title=Query -SELECT detectLanguageMixed('二兎を追う者は一兎をも得ず二兎を追う者は一兎をも得ず A vaincre sans peril, on triomphe sans gloire.') -``` - -```response title=Response -{'ja':0.62,'fr':0.36} -``` - - -## detectLanguageUnknown - -Добавлена в версии: v22.2 - -Аналогична функции [`detectLanguage`](#detectLanguage), за исключением того, что функция detectLanguageUnknown работает со строками, закодированными не в UTF-8. -Используйте эту версию, когда набор символов — UTF-16 или UTF-32. - -**Синтаксис** - -```sql -detectLanguageUnknown('s') -``` - -**Аргументы** - -* `s` — текст для анализа. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает двухбуквенный код ISO обнаруженного языка. Другие возможные результаты: `un` = неизвестно, не удалось определить язык; `other` = для обнаруженного языка не существует двухбуквенного кода. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT detectLanguageUnknown('Я останусь на несколько дней.') -``` - -```response title=Response -de -``` - - -## detectProgrammingLanguage - -Впервые появилась в версии v22.2 - -Определяет язык программирования по заданному фрагменту исходного кода. - -**Синтаксис** - -```sql -detectProgrammingLanguage('source_code') -``` - -**Аргументы** - -* `source_code` — строковое представление исходного кода для анализа. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает язык программирования в виде [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Определение кода на C++** - -```sql title=Query -SELECT detectProgrammingLanguage('#include ') -``` - -```response title=Response -C++ -``` - - -## detectTonality - -Появилась в версии: v22.2 - -Определяет тональность (эмоциональную окраску) переданных текстовых данных. - -:::note Ограничение -Текущая реализация функции ограничена использованием встроенного словаря эмоциональной лексики и работает только для русского языка. -::: - -**Синтаксис** - -```sql -detectTonality(s) -``` - -**Аргументы** - -* `s` — текст для анализа. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает среднее значение тональности слов в тексте. [`Float32`](/sql-reference/data-types/float) - -**Примеры** - -**Анализ тональности текста на русском языке** - -```sql title=Query -SELECT - detectTonality('Шарик - хороший пёс'), - detectTonality('Шарик - пёс'), - detectTonality('Шарик - плохой пёс') -``` - -```response title=Response -0.44445, 0, -0.3 -``` - - -## lemmatize - -Впервые представлена в версии v21.9 - -Выполняет лемматизацию заданного слова. -Для работы этой функции требуются словари, которые можно получить с [GitHub](https://github.com/vpodpecan/lemmagen3/tree/master/src/lemmagen3/models). Подробнее о загрузке словаря из локального файла см. на странице ["Определение словарей"](/sql-reference/dictionaries#local-file). - -**Синтаксис** - -```sql -lemmatize(lang, word) -``` - -**Аргументы** - -* `lang` — Язык, к которому будут применены правила. [`String`](/sql-reference/data-types/string) -* `word` — Слово в нижнем регистре, которое нужно лемматизировать. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает лемматизированную форму слова в виде [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Лемматизация на английском языке** - -```sql title=Query -SELECT lemmatize('en', 'wolves') -``` - -```response title=Response -волк -``` - - -## stem - -Добавлено в: v21.9 - -Выполняет стемминг для заданного слова. - -**Синтаксис** - -```sql -stem(lang, word) -``` - -**Аргументы** - -* `lang` — Язык, к которому будут применены правила. Используйте двухбуквенный код ISO 639-1. [`String`](/sql-reference/data-types/string) -* `word` — Слово в нижнем регистре, которое нужно привести к основе (стеммировать). [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает стеммированную форму слова в виде [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Стемминг английских слов** - -```sql title=Query -SELECT arrayMap(x -> stem('en', x), -['I', 'think', 'it', 'is', 'a', 'blessing', 'in', 'disguise']) AS res -``` - -```response title=Response -['Я','думаю','это','скрытое','благословение'] -``` - - -## synonyms - -Введено в версии v21.9 - -Находит синонимы заданного слова. - -Существует два типа расширений синонимов: - -* `plain` -* `wordnet` - -Для типа расширения `plain` необходимо указать путь к простому текстовому файлу, в котором каждая строка соответствует определённому набору синонимов. -Слова в этой строке должны быть разделены пробелом или символом табуляции. - -Для типа расширения `wordnet` необходимо указать путь к каталогу с тезаурусом WordNet. -Тезаурус должен содержать индекс смыслов (WordNet sense index). - -**Синтаксис** - -```sql -synonyms(ext_name, word) -``` - -**Аргументы** - -* `ext_name` — Название расширения, в котором будет выполняться поиск. [`String`](/sql-reference/data-types/string) -* `word` — Слово, по которому выполняется поиск в расширении. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает массив синонимов для указанного слова. [`Array(String)`](/sql-reference/data-types/array) - -**Примеры** - -**Поиск синонимов** - -```sql title=Query -SELECT synonyms('list', 'important') -``` - -```response title=Response -['важный','значительный','критический','решающий'] -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/numeric-indexed-vector-functions.md b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/numeric-indexed-vector-functions.md index 347fe98e314..8254d0d9de8 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/numeric-indexed-vector-functions.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/numeric-indexed-vector-functions.md @@ -6,42 +6,34 @@ title: 'Функции NumericIndexedVector' doc_type: 'reference' --- - - # NumericIndexedVector -NumericIndexedVector — это абстрактная структура данных, которая инкапсулирует вектор и реализует агрегирующие и покомпонентные операции над векторами. В качестве формата хранения в ней используется Bit-Sliced Index. Теоретические основы и сценарии использования описаны в статье [Large-Scale Metric Computation in Online Controlled Experiment Platform](https://arxiv.org/pdf/2405.08411). - - +NumericIndexedVector — это абстрактная структура данных, которая инкапсулирует вектор и реализует агрегирующие и покомпонентные операции над вектором. В качестве метода хранения используется Bit-Sliced Index. Теоретические основы и сценарии использования описаны в статье [Large-Scale Metric Computation in Online Controlled Experiment Platform](https://arxiv.org/pdf/2405.08411). ## BSI {#bit-sliced-index} -В методе хранения BSI (Bit-Sliced Index) данные сохраняются в формате [Bit-Sliced Index](https://dl.acm.org/doi/abs/10.1145/253260.253268), а затем сжимаются с помощью [Roaring Bitmap](https://github.com/RoaringBitmap/RoaringBitmap). Операции агрегации и покомпонентные операции выполняются непосредственно над сжатыми данными, что может значительно повысить эффективность хранения и выполнения запросов. - -Вектор содержит индексы и соответствующие им значения. Ниже перечислены некоторые характеристики и ограничения этой структуры данных в режиме хранения BSI: - -- Тип индекса может быть одним из `UInt8`, `UInt16` или `UInt32`. **Примечание:** Учитывая производительность 64-битной реализации Roaring Bitmap, формат BSI не поддерживает `UInt64`/`Int64`. -- Тип значения может быть одним из `Int8`, `Int16`, `Int32`, `Int64`, `UInt8`, `UInt16`, `UInt32`, `UInt64`, `Float32` или `Float64`. **Примечание:** Тип значения не расширяется автоматически. Например, если вы используете `UInt8` как тип значения, любая сумма, превышающая диапазон `UInt8`, приведёт к переполнению, а не к повышению типа; аналогично, операции над целыми числами будут возвращать целочисленные результаты (например, деление не будет автоматически преобразовано в результат с плавающей запятой). Поэтому важно заранее продумать и спроектировать тип значения. На практике обычно используются типы с плавающей запятой (`Float32`/`Float64`). -- Операции могут выполняться только над двумя векторами с одинаковым типом индекса и типом значения. -- Базовое хранилище использует Bit-Sliced Index, при этом индексы хранятся в виде битовой карты (bitmap). Roaring Bitmap используется как конкретная реализация битовой карты. Рекомендуемой практикой является максимальная концентрация индексов в небольшом числе контейнеров Roaring Bitmap, чтобы максимально повысить степень сжатия и производительность выполнения запросов. -- Механизм Bit-Sliced Index преобразует значение в двоичное представление. Для типов с плавающей запятой используется фиксированно-точечное представление, что может привести к потере точности. Точность можно настраивать, задавая количество бит для дробной части; по умолчанию используется 24 бита, чего достаточно для большинства сценариев. Вы можете задать количество бит для целой и дробной части при создании NumericIndexedVector с помощью агрегатной функции groupNumericIndexedVector с суффиксом `-State`. -- Для индексов возможны три состояния: ненулевое значение, нулевое значение и отсутствие. В NumericIndexedVector хранятся только ненулевые и нулевые значения. Кроме того, при покомпонентных операциях между двумя NumericIndexedVector значение отсутствующего индекса трактуется как 0. В сценарии деления результат также равен нулю, если делитель равен нулю. +В методе хранения BSI (Bit-Sliced Index) данные хранятся в формате [Bit-Sliced Index](https://dl.acm.org/doi/abs/10.1145/253260.253268), а затем сжимаются с помощью [Roaring Bitmap](https://github.com/RoaringBitmap/RoaringBitmap). Агрегирующие и поэлементные операции выполняются непосредственно над сжатыми данными, что может существенно повысить эффективность хранения и запросов. +Вектор содержит индексы и соответствующие им значения. Ниже приведены некоторые характеристики и ограничения этой структуры данных в режиме хранения BSI: +- Тип индекса может быть одним из `UInt8`, `UInt16` или `UInt32`. **Примечание:** с учётом производительности 64-битной реализации Roaring Bitmap формат BSI не поддерживает `UInt64`/`Int64`. +- Тип значения может быть одним из `Int8`, `Int16`, `Int32`, `Int64`, `UInt8`, `UInt16`, `UInt32`, `UInt64`, `Float32` или `Float64`. **Примечание:** тип значения не расширяется автоматически. Например, если вы используете `UInt8` как тип значения, любая сумма, превышающая допустимый диапазон `UInt8`, приведёт к переполнению, а не к расширению типа до более широкого; аналогично, операции над целыми числами будут возвращать целочисленный результат (например, деление не будет автоматически приводить к результату с плавающей запятой). Поэтому важно заранее продумать и спроектировать тип значения. В реальных сценариях обычно используются типы с плавающей запятой (`Float32`/`Float64`). +- Операции можно выполнять только над двумя векторами с одинаковым типом индекса и типом значения. +- Подлежащая система хранения использует Bit-Sliced Index, при этом bitmap хранит индексы. Roaring Bitmap используется как конкретная реализация bitmap. Рекомендуемой практикой является по возможности концентрировать индексы в небольшом числе контейнеров Roaring Bitmap для максимизации степени сжатия и производительности запросов. +- Механизм Bit-Sliced Index преобразует значение в двоичное представление. Для типов с плавающей запятой используется фиксированное-точечное представление (fixed-point), что может приводить к потере точности. Точность можно регулировать, настраивая количество бит, отводимых под дробную часть; по умолчанию используется 24 бита, чего достаточно для большинства сценариев. Вы можете настроить количество бит для целой и дробной части при конструировании NumericIndexedVector с помощью агрегатной функции groupNumericIndexedVector с суффиксом `-State`. +- Для индексов возможны три состояния: ненулевое значение, нулевое значение и отсутствие. В NumericIndexedVector хранятся только ненулевые и нулевые значения. Кроме того, в поэлементных операциях между двумя NumericIndexedVector значение отсутствующего индекса трактуется как 0. В сценарии деления результатом будет ноль, если делитель равен нулю. ## Создание объекта numericIndexedVector {#create-numeric-indexed-vector-object} Существует два способа создать эту структуру: первый — использовать агрегатную функцию `groupNumericIndexedVector` с суффиксом `-State`. -Вы можете добавить суффикс `-if`, чтобы задать дополнительное условие. -Агрегатная функция будет обрабатывать только те строки, для которых выполняется это условие. -Второй способ — построить её из значения типа Map с помощью `numericIndexedVectorBuild`. -Функция `groupNumericIndexedVectorState` позволяет настроить количество целых и дробных битов через параметры, в то время как `numericIndexedVectorBuild` такой возможности не предоставляет. - - +Можно добавить суффикс `-if`, чтобы задать дополнительное условие. +Агрегатная функция будет обрабатывать только те строки, для которых выполняется условие. +Второй способ — построить её из map с помощью `numericIndexedVectorBuild`. +Функция `groupNumericIndexedVectorState` позволяет настраивать количество целочисленных и дробных битов через параметры, тогда как `numericIndexedVectorBuild` такой возможности не предоставляет. ## groupNumericIndexedVector -Создает `NumericIndexedVector` из двух столбцов данных и возвращает сумму всех значений как значение типа `Float64`. Если добавить суффикс `State`, возвращает объект `NumericIndexedVector`. +Создаёт NumericIndexedVector из двух столбцов данных и возвращает сумму всех значений типа `Float64`. Если к имени функции добавить суффикс `State`, возвращается объект NumericIndexedVector. **Синтаксис** @@ -53,15 +45,15 @@ groupNumericIndexedVectorState(type, integer_bit_num, fraction_bit_num)(col1, co **Параметры** * `type`: String, необязательный. Определяет формат хранения. В настоящее время поддерживается только `'BSI'`. -* `integer_bit_num`: `UInt32`, необязательный. Актуален для формата хранения `'BSI'`. Этот параметр задаёт количество бит, используемых для целой части. Если тип индекса является целочисленным, значение по умолчанию соответствует количеству бит, используемых для хранения индекса. Например, если тип индекса — UInt16, значение `integer_bit_num` по умолчанию равно 16. Для типов индекса Float32 и Float64 значение `integer_bit_num` по умолчанию равно 40, поэтому целая часть данных, которую можно представить, находится в диапазоне `[-2^39, 2^39 - 1]`. Допустимый диапазон — `[0, 64]`. -* `fraction_bit_num`: `UInt32`, необязательный. Актуален для формата хранения `'BSI'`. Этот параметр задаёт количество бит, используемых для дробной части. Когда тип значения — целочисленный, значение по умолчанию равно 0; когда тип значения — Float32 или Float64, значение по умолчанию равно 24. Допустимый диапазон — `[0, 24]`. -* Дополнительно накладывается ограничение: допустимый диапазон для `integer_bit_num + fraction_bit_num` — `[0, 64]`. -* `col1`: Индексный столбец. Поддерживаемые типы: `UInt8`/`UInt16`/`UInt32`/`Int8`/`Int16`/`Int32`. +* `integer_bit_num`: `UInt32`, необязательный. Применяется при формате хранения `'BSI'`; этот параметр задаёт количество бит, используемых для целой части. Когда тип индекса — целочисленный, значение по умолчанию соответствует количеству бит, используемых для его хранения. Например, если тип индекса — UInt16, значение `integer_bit_num` по умолчанию равно 16. Для типов индекса Float32 и Float64 значение `integer_bit_num` по умолчанию равно 40, поэтому целая часть данных, которые могут быть представлены, находится в диапазоне `[-2^39, 2^39 - 1]`. Допустимый диапазон: `[0, 64]`. +* `fraction_bit_num`: `UInt32`, необязательный. Применяется при формате хранения `'BSI'`; этот параметр задаёт количество бит, используемых для дробной части. Когда тип значения — целое число, значение по умолчанию равно 0; когда тип значения — Float32 или Float64, значение по умолчанию равно 24. Допустимый диапазон: `[0, 24]`. +* Также накладывается ограничение: допустимый диапазон суммы integer_bit_num + fraction_bit_num — [0, 64]. +* `col1`: Столбец индекса. Поддерживаемые типы: `UInt8`/`UInt16`/`UInt32`/`Int8`/`Int16`/`Int32`. * `col2`: Столбец значений. Поддерживаемые типы: `Int8`/`Int16`/`Int32`/`Int64`/`UInt8`/`UInt16`/`UInt32`/`UInt64`/`Float32`/`Float64`. **Возвращаемое значение** -Значение типа `Float64`, представляющее сумму всех значений. +Значение `Float64`, представляющее сумму всех значений. **Пример** @@ -103,638 +95,10 @@ SELECT groupNumericIndexedVectorStateIf('BSI', 32, 0)(UserID, PlayTime, day = '2 ::: {/* - нижеприведённые теги используются для генерации документации из системных таблиц и не должны быть удалены. + расположенные ниже теги используются для генерации документации из системных таблиц, их нельзя удалять. Подробнее см. https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## numericIndexedVectorAllValueSum - -Добавлена в версии: v25.7 - -Возвращает сумму всех значений в numericIndexedVector. - -**Синтаксис** - -```sql -numericIndexedVectorAllValueSum(v) -``` - -**Аргументы** - -* `v` — [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**Возвращаемое значение** - -Возвращает сумму. [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT numericIndexedVectorAllValueSum(numericIndexedVectorBuild(mapFromArrays([1, 2, 3], [10, 20, 30]))) AS res; -``` - -```response title=Response -┌─res─┐ -│ 60 │ -└─────┘ -``` - - -## numericIndexedVectorBuild - -Появилось в: v25.7 - -Создаёт NumericIndexedVector из отображения (map). Ключи отображения задают индекс вектора, а значения — элементы вектора. - -**Синтаксис** - -```sql -numericIndexedVectorBuild(map) -``` - -**Аргументы** - -* `map` — отображение индекса в значение. [`Map`](/sql-reference/data-types/map) - -**Возвращаемое значение** - -Возвращает объект NumericIndexedVector. [`AggregateFunction`](/sql-reference/data-types/aggregatefunction) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT numericIndexedVectorBuild(mapFromArrays([1, 2, 3], [10, 20, 30])) AS res, toTypeName(res); -``` - -```response title=Response -┌─res─┬─toTypeName(res)────────────────────────────────────────────┐ -│ │ AggregateFunction(groupNumericIndexedVector, UInt8, UInt8) │ -└─────┴────────────────────────────────────────────────────────────┘ -``` - - -## numericIndexedVectorCardinality - -Впервые представлена в: v25.7 - -Возвращает кардинальность (число уникальных индексов) объекта numericIndexedVector. - -**Синтаксис** - -```sql -numericIndexedVectorCardinality(v) -``` - -**Аргументы** - -* `v` — [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**Возвращаемое значение** - -Возвращает число уникальных индексов. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT numericIndexedVectorCardinality(numericIndexedVectorBuild(mapFromArrays([1, 2, 3], [10, 20, 30]))) AS res; -``` - -```response title=Response -┌─res─┐ -│ 3 │ -└─────┘ -``` - - -## numericIndexedVectorGetValue - -Появилась в версии: v25.7 - -Извлекает значение, соответствующее указанному индексу, из `numericIndexedVector`. - -**Синтаксис** - -```sql -numericIndexedVectorGetValue(v, i) -``` - -**Аргументы** - -* `v` — [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) -* `i` — Индекс, по которому извлекается значение. [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Числовое значение того же типа, что и тип значений NumericIndexedVector: [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT numericIndexedVectorGetValue(numericIndexedVectorBuild(mapFromArrays([1, 2, 3], [10, 20, 30])), 3) AS res; -``` - -```response title=Response -┌─res─┐ -│ 30 │ -└─────┘ -``` - - -## numericIndexedVectorPointwiseAdd - -Представлен в версии: v25.7 - -Выполняет покомпонентное сложение между `numericIndexedVector` и другим `numericIndexedVector` или числовой константой. - -**Синтаксис** - -```sql -numericIndexedVectorPointwiseAdd(v1, v2) -``` - -**Аргументы** - -* `v1` — [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) -* `v2` — числовая константа или объект типа `numericIndexedVector`. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**Возвращаемое значение** - -Возвращает новый объект типа `numericIndexedVector`. [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**Примеры** - -**Пример использования** - -```sql title=Query -WITH - numericIndexedVectorBuild(mapFromArrays([1, 2, 3], arrayMap(x -> toInt32(x), [10, 20, 30]))) AS vec1, - numericIndexedVectorBuild(mapFromArrays([2, 3, 4], arrayMap(x -> toInt32(x), [10, 20, 30]))) AS vec2 -SELECT - numericIndexedVectorToMap(numericIndexedVectorPointwiseAdd(vec1, vec2)) AS res1, - numericIndexedVectorToMap(numericIndexedVectorPointwiseAdd(vec1, 2)) AS res2; -``` - -```response title=Response -┌─res1──────────────────┬─res2─────────────┐ -│ {1:10,2:30,3:50,4:30} │ {1:12,2:22,3:32} │ -└───────────────────────┴──────────────────┘ -``` - - -## numericIndexedVectorPointwiseDivide - -Введён в версии: v25.7 - -Выполняет покомпонентное деление между numericIndexedVector и другим numericIndexedVector или числовой константой. - -**Синтаксис** - -```sql -numericIndexedVectorPointwiseDivide(v1, v2) -``` - -**Аргументы** - -* `v1` — [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) -* `v2` — числовая константа или объект типа numericIndexedVector. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**Возвращаемое значение** - -Возвращает новый объект типа numericIndexedVector. [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**Примеры** - -**Пример использования** - -```sql title=Query -with - numericIndexedVectorBuild(mapFromArrays([1, 2, 3], arrayMap(x -> toFloat64(x), [10, 20, 30]))) as vec1, - numericIndexedVectorBuild(mapFromArrays([2, 3, 4], arrayMap(x -> toFloat64(x), [10, 20, 30]))) as vec2 -SELECT - numericIndexedVectorToMap(numericIndexedVectorPointwiseDivide(vec1, vec2)) AS res1, - numericIndexedVectorToMap(numericIndexedVectorPointwiseDivide(vec1, 2)) AS res2; -``` - -```response title=Response -┌─res1────────┬─res2────────────┐ -│ {2:2,3:1.5} │ {1:5,2:10,3:15} │ -└─────────────┴─────────────────┘ -``` - - -## numericIndexedVectorPointwiseEqual - -Введено в: v25.7 - -Выполняет покомпонентное сравнение между `numericIndexedVector` и другим `numericIndexedVector` или числовой константой. -Результатом является `numericIndexedVector`, содержащий индексы элементов, значения которых равны, при этом всем соответствующим значениям присваивается 1. - -**Синтаксис** - -```sql -numericIndexedVectorPointwiseEqual(v1, v2) -``` - -**Аргументы** - -* `v1` — объект типа [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) -* `v2` — числовая константа или объект типа numericIndexedVector: [`(U)Int*`](/sql-reference/data-types/int-uint), [`Float*`](/sql-reference/data-types/float) или [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**Возвращаемое значение** - -Возвращает новый объект типа numericIndexedVector. [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**Примеры** - -*** - -```sql title=Query -with - numericIndexedVectorBuild(mapFromArrays([1, 2, 3], arrayMap(x -> toFloat64(x), [10, 20, 30]))) as vec1, - numericIndexedVectorBuild(mapFromArrays([2, 3, 4], arrayMap(x -> toFloat64(x), [20, 20, 30]))) as vec2 -SELECT - numericIndexedVectorToMap(numericIndexedVectorPointwiseEqual(vec1, vec2)) AS res1, - numericIndexedVectorToMap(numericIndexedVectorPointwiseEqual(vec1, 20)) AS res2; -``` - -```response title=Response -┌─res1──┬─res2──┐ -│ {2:1} │ {2:1} │ -└───────┴───────┘ -``` - - -## numericIndexedVectorPointwiseGreater - -Появилась в версии: v25.7 - -Выполняет покомпонентное сравнение между `numericIndexedVector` и другим `numericIndexedVector` либо числовой константой. -Результатом является `numericIndexedVector`, содержащий индексы, для которых значение первого вектора больше значения второго, при этом все соответствующие значения устанавливаются равными 1. - -**Синтаксис** - -```sql -numericIndexedVectorPointwiseGreater(v1, v2) -``` - -**Аргументы** - -* `v1` — [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) -* `v2` — числовая константа или объект типа `numericIndexedVector`. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**Возвращаемое значение** - -Возвращает новый объект типа `numericIndexedVector`. [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**Примеры** - -**Пример использования** - -```sql title=Query -with - numericIndexedVectorBuild(mapFromArrays([1, 2, 3], arrayMap(x -> toFloat64(x), [10, 20, 50]))) as vec1, - numericIndexedVectorBuild(mapFromArrays([2, 3, 4], arrayMap(x -> toFloat64(x), [20, 40, 30]))) as vec2 -SELECT - numericIndexedVectorToMap(numericIndexedVectorPointwiseGreater(vec1, vec2)) AS res1, - numericIndexedVectorToMap(numericIndexedVectorPointwiseGreater(vec1, 20)) AS res2; -``` - -```response title=Response -┌─res1──────┬─res2──┐ -│ {1:1,3:1} │ {3:1} │ -└───────────┴───────┘ -``` - - -## numericIndexedVectorPointwiseGreaterEqual - -Введено в: v25.7 - -Выполняет поэлементное сравнение между `numericIndexedVector` и другим `numericIndexedVector` или числовой константой. -Результатом является `numericIndexedVector`, содержащий индексы позиций, где значение первого вектора больше либо равно значению второго вектора, при этом все соответствующие значения устанавливаются равными 1. - -**Синтаксис** - -```sql -numericIndexedVectorPointwiseGreaterEqual(v1, v2) -``` - -**Аргументы** - -* `v1` — [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) -* `v2` — числовая константа или объект типа `numericIndexedVector`. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**Возвращаемое значение** - -Возвращает новый объект типа `numericIndexedVector`. [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**Примеры** - -**Пример использования** - -```sql title=Query -with - numericIndexedVectorBuild(mapFromArrays([1, 2, 3], arrayMap(x -> toFloat64(x), [10, 20, 50]))) as vec1, - numericIndexedVectorBuild(mapFromArrays([2, 3, 4], arrayMap(x -> toFloat64(x), [20, 40, 30]))) as vec2 -SELECT - numericIndexedVectorToMap(numericIndexedVectorPointwiseGreaterEqual(vec1, vec2)) AS res1, - numericIndexedVectorToMap(numericIndexedVectorPointwiseGreaterEqual(vec1, 20)) AS res2; -``` - -```response title=Response -┌─res1──────────┬─res2──────┐ -│ {1:1,2:1,3:1} │ {2:1,3:1} │ -└───────────────┴───────────┘ -``` - - -## numericIndexedVectorPointwiseLess - -Впервые представлено в: v25.7 - -Выполняет покомпонентное сравнение `numericIndexedVector` либо с другим `numericIndexedVector`, либо с числовой константой. -Результатом является `numericIndexedVector`, содержащий индексы, где значение первого вектора меньше значения второго, при этом все соответствующие значения равны 1. - -**Синтаксис** - -```sql -numericIndexedVectorPointwiseLess(v1, v2) -``` - -**Аргументы** - -* `v1` — [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) -* `v2` — числовая константа или объект `numericIndexedVector`. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**Возвращаемое значение** - -Возвращает новый объект `numericIndexedVector`. [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**Примеры** - -**Пример использования** - -```sql title=Query -with - numericIndexedVectorBuild(mapFromArrays([1, 2, 3], arrayMap(x -> toFloat64(x), [10, 20, 30]))) as vec1, - numericIndexedVectorBuild(mapFromArrays([2, 3, 4], arrayMap(x -> toFloat64(x), [20, 40, 30]))) as vec2 -SELECT - numericIndexedVectorToMap(numericIndexedVectorPointwiseLess(vec1, vec2)) AS res1, - numericIndexedVectorToMap(numericIndexedVectorPointwiseLess(vec1, 20)) AS res2; -``` - -```response title=Response -┌─res1──────┬─res2──┐ -│ {3:1,4:1} │ {1:1} │ -└───────────┴───────┘ -``` - - -## numericIndexedVectorPointwiseLessEqual - -Добавлена в: v25.7 - -Выполняет поэлементное сравнение между `numericIndexedVector` и другим `numericIndexedVector` или числовой константой. -Результатом является `numericIndexedVector`, содержащий индексы, для которых значение первого вектора меньше либо равно значению второго вектора, при этом все соответствующие значения установлены в 1. - -**Синтаксис** - -```sql -numericIndexedVectorPointwiseLessEqual(v1, v2) -``` - -**Аргументы** - -* `v1` — [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) -* `v2` — числовая константа или объект [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) типов [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает новый объект [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object). - -**Примеры** - -**Пример использования** - -```sql title=Query -with - numericIndexedVectorBuild(mapFromArrays([1, 2, 3], arrayMap(x -> toFloat64(x), [10, 20, 30]))) as vec1, - numericIndexedVectorBuild(mapFromArrays([2, 3, 4], arrayMap(x -> toFloat64(x), [20, 40, 30]))) as vec2 -SELECT - numericIndexedVectorToMap(numericIndexedVectorPointwiseLessEqual(vec1, vec2)) AS res1, - numericIndexedVectorToMap(numericIndexedVectorPointwiseLessEqual(vec1, 20)) AS res2; -``` - -```response title=Response -┌─res1──────────┬─res2──────┐ -│ {2:1,3:1,4:1} │ {1:1,2:1} │ -└───────────────┴───────────┘ -``` - - -## numericIndexedVectorPointwiseMultiply - -Введено в: v25.7 - -Выполняет поэлементное умножение между `numericIndexedVector` и другим `numericIndexedVector` или числовой константой. - -**Синтаксис** - -```sql -numericIndexedVectorPointwiseMultiply(v1, v2) -``` - -**Аргументы** - -* `v1` — [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) -* `v2` — числовая константа или объект типа `numericIndexedVector`. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**Возвращаемое значение** - -Возвращает новый объект типа `numericIndexedVector`. [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**Примеры** - -*** - -```sql title=Query -with - numericIndexedVectorBuild(mapFromArrays([1, 2, 3], arrayMap(x -> toInt32(x), [10, 20, 30]))) as vec1, - numericIndexedVectorBuild(mapFromArrays([2, 3, 4], arrayMap(x -> toInt32(x), [10, 20, 30]))) as vec2 -SELECT - numericIndexedVectorToMap(numericIndexedVectorPointwiseMultiply(vec1, vec2)) AS res1, - numericIndexedVectorToMap(numericIndexedVectorPointwiseMultiply(vec1, 2)) AS res2; -``` - -```response title=Response -┌─res1──────────┬─res2─────────────┐ -│ {2:200,3:600} │ {1:20,2:40,3:60} │ -└───────────────┴──────────────────┘ -``` - - -## numericIndexedVectorPointwiseNotEqual - -Впервые появился в: v25.7 - -Выполняет покомпонентное сравнение между `numericIndexedVector` и либо другим `numericIndexedVector`, либо числовой константой. -Результатом является `numericIndexedVector`, содержащий индексы, для которых значения не равны, при этом все соответствующие значения равны 1. - -**Синтаксис** - -```sql -numericIndexedVectorPointwiseNotEqual(v1, v2) -``` - -**Аргументы** - -* `v1` — [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) -* `v2` — числовая константа или объект типа [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object). [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**Возвращаемое значение** - -Возвращает новый объект типа [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object). - -**Примеры** - -**Пример использования** - -```sql title=Query -with - numericIndexedVectorBuild(mapFromArrays([1, 2, 3], arrayMap(x -> toFloat64(x), [10, 20, 30]))) as vec1, - numericIndexedVectorBuild(mapFromArrays([2, 3, 4], arrayMap(x -> toFloat64(x), [20, 20, 30]))) as vec2 -SELECT - numericIndexedVectorToMap(numericIndexedVectorPointwiseNotEqual(vec1, vec2)) AS res1, - numericIndexedVectorToMap(numericIndexedVectorPointwiseNotEqual(vec1, 20)) AS res2; -``` - -```response title=Response -┌─res1──────────┬─res2──────┐ -│ {1:1,3:1,4:1} │ {1:1,3:1} │ -└───────────────┴───────────┘ -``` - - -## numericIndexedVectorPointwiseSubtract - -Представлено в: v25.7 - -Выполняет покомпонентное вычитание между `numericIndexedVector` и другим `numericIndexedVector` или числовой константой. - -**Синтаксис** - -```sql -numericIndexedVectorPointwiseSubtract(v1, v2) -``` - -**Аргументы** - -* `v1` — [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) -* `v2` — числовая константа или объект `numericIndexedVector`: [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**Возвращаемое значение** - -Возвращает новый объект `numericIndexedVector`. [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**Примеры** - -**Пример использования** - -```sql title=Query -WITH - numericIndexedVectorBuild(mapFromArrays([1, 2, 3], arrayMap(x -> toInt32(x), [10, 20, 30]))) AS vec1, - numericIndexedVectorBuild(mapFromArrays([2, 3, 4], arrayMap(x -> toInt32(x), [10, 20, 30]))) AS vec2 -SELECT - numericIndexedVectorToMap(numericIndexedVectorPointwiseSubtract(vec1, vec2)) AS res1, - numericIndexedVectorToMap(numericIndexedVectorPointwiseSubtract(vec1, 2)) AS res2; -``` - -```response title=Response -┌─res1───────────────────┬─res2────────────┐ -│ {1:10,2:10,3:10,4:-30} │ {1:8,2:18,3:28} │ -└────────────────────────┴─────────────────┘ -``` - - -## numericIndexedVectorShortDebugString - -Появилась в версии: v25.7 - -Возвращает внутреннюю информацию о numericIndexedVector в формате JSON. -Эта функция в основном используется для отладки. - -**Синтаксис** - -```sql -numericIndexedVectorShortDebugString(v) -``` - -**Аргументы** - -* `v` — [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**Возвращаемое значение** - -Возвращает JSON-строку с отладочной информацией. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT numericIndexedVectorShortDebugString(numericIndexedVectorBuild(mapFromArrays([1, 2, 3], [10, 20, 30]))) AS res\G; -``` - -```response title=Response -Строка 1: -────── -res: {"vector_type":"BSI","index_type":"char8_t","value_type":"char8_t","integer_bit_num":8,"fraction_bit_num":0,"zero_indexes_info":{"cardinality":"0"},"non_zero_indexes_info":{"total_cardinality":"3","all_value_sum":60,"number_of_bitmaps":"8","bitmap_info":{"cardinality":{"0":"0","1":"2","2":"2","3":"2","4":"2","5":"0","6":"0","7":"0"}}}} -``` - - -## numericIndexedVectorToMap - -Впервые появилась в версии v25.7 - -Преобразует значение типа numericIndexedVector в map. - -**Синтаксис** - -```sql -numericIndexedVectorToMap(v) -``` - -**Аргументы** - -* `v` — [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**Возвращаемое значение** - -Возвращает отображение [`Map`](/sql-reference/data-types/map) с парами индекс–значение. - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT numericIndexedVectorToMap(numericIndexedVectorBuild(mapFromArrays([1, 2, 3], [10, 20, 30]))) AS res; -``` - -```response title=Response -┌─res──────────────┐ -│ {1:10,2:20,3:30} │ -└──────────────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/other-functions.md b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/other-functions.md index 5aa48ad361c..e7ab33f32a7 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/other-functions.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/other-functions.md @@ -1,5 +1,5 @@ --- -description: 'Документация для категории «Прочие функции»' +description: 'Документация по категории функций «Прочие»' sidebar_label: 'Прочие' slug: /sql-reference/functions/other-functions title: 'Прочие функции' @@ -18,5510 +18,11 @@ import DeprecatedBadge from '@theme/badges/DeprecatedBadge'; ::: {/* - Внутреннее содержимое тегов ниже заменяется при сборке фреймворка документации - на документацию, сгенерированную из system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. + Внутреннее содержимое расположенных ниже тегов при сборке фреймворка документации + заменяется на документацию, сгенерированную из system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. См.: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## FQDN - -Появилась в версии v20.1 - -Возвращает полное доменное имя сервера ClickHouse. - -**Синтаксис** - -```sql -fqdn() -``` - -**Псевдонимы**: `fullHostName` - -**Аргументы** - -* Отсутствуют. - -**Возвращаемое значение** - -Возвращает полное доменное имя сервера ClickHouse. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT fqdn() -``` - -```response title=Response -┌─FQDN()──────────────────────────┐ -│ clickhouse.us-east-2.internal │ -└─────────────────────────────────┘ -``` - - -## MACNumToString - -Добавлена в: v1.1 - -Интерпретирует число типа [`UInt64`](/sql-reference/data-types/int-uint) как MAC-адрес в порядке байтов big endian. -Возвращает соответствующий MAC-адрес в формате `AA:BB:CC:DD:EE:FF` (разделённые двоеточиями числа в шестнадцатеричном представлении) в виде строки. - -**Синтаксис** - -```sql -MACNumToString(num) -``` - -**Аргументы** - -* `num` — число типа UInt64. [`UInt64`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает MAC-адрес в формате AA:BB:CC:DD:EE:FF. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT MACNumToString(149809441867716) AS mac_address; -``` - -```response title=Response -┌─mac_address───────┐ -│ 88:00:11:22:33:44 │ -└───────────────────┘ -``` - - -## MACStringToNum - -Добавлена в версии v1.1 - -Обратная функция MACNumToString. Если MAC-адрес имеет недопустимый формат, возвращает 0. - -**Синтаксис** - -```sql -MACStringToNum(s) -``` - -**Аргументы** - -* `s` — строка MAC-адреса. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает число типа UInt64. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT MACStringToNum('01:02:03:04:05:06') AS mac_numeric; -``` - -```response title=Response -1108152157446 -``` - - -## MACStringToOUI - -Добавлена в версии: v1.1 - -Для MAC-адреса в формате AA:BB:CC:DD:EE:FF (шестнадцатеричные числа, разделённые двоеточиями) возвращает первые три октета в виде числа UInt64. Если MAC-адрес имеет неверный формат, возвращает 0. - -**Синтаксис** - -```sql -MACStringToOUI(s) -``` - -**Аргументы** - -* `s` — строка с MAC-адресом. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Первые три октета в формате числа UInt64. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT MACStringToOUI('00:50:56:12:34:56') AS oui; -``` - -```response title=Response -20566 -``` - - -## __filterContains - -Добавлена в версии: v25.10 - -Специальная функция для фильтрации при выполнении операций JOIN. - -**Синтаксис** - -```sql -__filterContains(filter_name, key) -``` - -**Аргументы** - -* `filter_name` — внутреннее имя runtime-фильтра. Создаётся при выполнении BuildRuntimeFilterStep. [`String`](/sql-reference/data-types/string) -* `key` — значение произвольного типа, для которого проверяется его наличие в фильтре - -**Возвращаемое значение** - -True, если ключ был найден в фильтре [`Bool`](/sql-reference/data-types/boolean) - -**Примеры** - -**Пример** - -```sql title=Query -Эта функция не предназначена для использования в пользовательских запросах. Она может быть добавлена в план выполнения запроса на этапе оптимизации. -``` - -```response title=Response -``` - - -## __patchPartitionID - -Добавлена в: v25.5 - -Внутренняя функция. Принимает имя части и хэш имён столбцов патч-части. Возвращает имя раздела патч-части. Аргумент должен быть корректным именем части, в противном случае поведение не определено. - -**Синтаксис** - -```sql -``` - -**Аргументы** - -* Нет. - -**Возвращаемое значение** - -**Примеры** - - -## authenticatedUser - -Появилась в версии: v25.11 - -Если пользователь сеанса был переключён с помощью команды EXECUTE AS, эта функция возвращает имя исходного пользователя, который использовался для аутентификации и создания сеанса. -Псевдоним: authUser() - -**Синтаксис** - -```sql -authenticatedUser() -``` - -**Псевдонимы**: `authUser` - -**Аргументы** - -* Нет. - -**Возвращаемое значение** - -Имя аутентифицированного пользователя. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -EXECUTE as u1; - SELECT currentUser(), authenticatedUser(); -``` - -```response title=Response -┌─currentUser()─┬─authenticatedUser()─┐ -│ u1 │ default │ -└───────────────┴─────────────────────┘ -``` - - -## bar - -Введена в версии: v1.1 - -Строит столбчатую диаграмму. -Рисует полосу с шириной, пропорциональной (x - min), и равной `width` символам при x = max. -Полоса рисуется с точностью до одной восьмой символа. - -**Синтаксис** - -```sql -bar(x, min, max[, width]) -``` - -**Аргументы** - -* `x` — Значение для отображения. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal`](/sql-reference/data-types/decimal) -* `min` — Минимальное значение. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal`](/sql-reference/data-types/decimal) -* `max` — Максимальное значение. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal`](/sql-reference/data-types/decimal) -* `width` — Необязательный параметр. Ширина индикатора в символах. Значение по умолчанию — `80`. [`const (U)Int*`](/sql-reference/data-types/int-uint) или [`const Float*`](/sql-reference/data-types/float) или [`const Decimal`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Возвращает строку с индикатором в виде Unicode-графики. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT -toHour(EventTime) AS h, -count() AS c, -bar(c, 0, 600000, 20) AS bar -FROM test.hits -GROUP BY h -ORDER BY h ASC -``` - -```response title=Response -┌──h─┬──────c─┬─bar────────────────┐ -│ 0 │ 292907 │ █████████▋ │ -│ 1 │ 180563 │ ██████ │ -│ 2 │ 114861 │ ███▋ │ -│ 3 │ 85069 │ ██▋ │ -│ 4 │ 68543 │ ██▎ │ -│ 5 │ 78116 │ ██▌ │ -│ 6 │ 113474 │ ███▋ │ -│ 7 │ 170678 │ █████▋ │ -│ 8 │ 278380 │ █████████▎ │ -│ 9 │ 391053 │ █████████████ │ -│ 10 │ 457681 │ ███████████████▎ │ -│ 11 │ 493667 │ ████████████████▍ │ -│ 12 │ 509641 │ ████████████████▊ │ -│ 13 │ 522947 │ █████████████████▍ │ -│ 14 │ 539954 │ █████████████████▊ │ -│ 15 │ 528460 │ █████████████████▌ │ -│ 16 │ 539201 │ █████████████████▊ │ -│ 17 │ 523539 │ █████████████████▍ │ -│ 18 │ 506467 │ ████████████████▊ │ -│ 19 │ 520915 │ █████████████████▎ │ -│ 20 │ 521665 │ █████████████████▍ │ -│ 21 │ 542078 │ ██████████████████ │ -│ 22 │ 493642 │ ████████████████▍ │ -│ 23 │ 400397 │ █████████████▎ │ -└────┴────────┴────────────────────┘ -``` - - -## blockNumber - -Появилось в версии: v1.1 - -Возвращает монотонно возрастающий порядковый номер [блока](../../development/architecture.md#block), содержащего строку. -Возвращаемый номер блока обновляется по принципу «best effort», поэтому может быть не полностью точным. - -**Синтаксис** - -```sql -blockNumber() -``` - -**Аргументы** - -* Отсутствуют. - -**Возвращаемое значение** - -Порядковый номер блока данных, в котором расположена строка. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT blockNumber() -FROM -( - SELECT * - FROM system.numbers - LIMIT 10 -) SETTINGS max_block_size = 2 -``` - -```response title=Response -┌─blockNumber()─┐ -│ 7 │ -│ 7 │ -└───────────────┘ -┌─blockNumber()─┐ -│ 8 │ -│ 8 │ -└───────────────┘ -┌─blockNumber()─┐ -│ 9 │ -│ 9 │ -└───────────────┘ -┌─blockNumber()─┐ -│ 10 │ -│ 10 │ -└───────────────┘ -┌─blockNumber()─┐ -│ 11 │ -│ 11 │ -└───────────────┘ -``` - - -## blockSerializedSize - -Добавлена в версии: v20.3 - -Возвращает несжатый размер блока значений на диске в байтах. - -**Синтаксис** - -```sql -blockSerializedSize(x1[, x2[, ...]]) -``` - -**Аргументы** - -* `x1[, x2, ...]` — Произвольное количество значений, для которых нужно получить несжатый размер блока. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает количество байт, которое будет записано на диск для блока значений без сжатия. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT blockSerializedSize(maxState(1)) AS x; -``` - -```response title=Response -┌─x─┐ -│ 2 │ -└───┘ -``` - - -## blockSize - -Введена в версии: v1.1 - -В ClickHouse запросы обрабатываются [блоками](/development/architecture#block) (чанками). -Эта функция возвращает размер (число строк) блока, на котором она была вызвана. - -**Синтаксис** - -```sql -blockSize() -``` - -**Аргументы** - -* Нет. - -**Возвращаемое значение** - -Возвращает число строк в текущем блоке. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT blockSize() -FROM system.numbers LIMIT 5 -``` - -```response title=Response -┌─blockSize()─┐ -│ 5 │ -│ 5 │ -│ 5 │ -│ 5 │ -│ 5 │ -└─────────────┘ -``` - - -## byteSize - -Введена в версии v21.1 - -Возвращает оценку несжатого размера своих аргументов в байтах в памяти. -Для аргументов типа `String` функция возвращает длину строки + 8 байт (на хранение длины). -Если у функции несколько аргументов, она суммирует их размеры в байтах. - -**Синтаксис** - -```sql -byteSize(arg1[, arg2, ...]) -``` - -**Аргументы** - -* `arg1[, arg2, ...]` — значения любого типа данных, для которых требуется оценить несжатый размер в байтах. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает оценку размера в байтах, занимаемого аргументами в памяти. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT byteSize('string') -``` - -```response title=Response -┌─byteSize('string')─┐ -│ 15 │ -└────────────────────┘ -``` - -**Несколько аргументов** - -```sql title=Query -SELECT byteSize(NULL, 1, 0.3, '') -``` - -```response title=Response -┌─byteSize(NULL, 1, 0.3, '')─┐ -│ 19 │ -└────────────────────────────┘ -``` - - -## catboostEvaluate - -Добавлено в: v22.9 - -Позволяет оценивать внешнюю модель catboost. [CatBoost](https://catboost.ai) — это библиотека градиентного бустинга с открытым исходным кодом, разработанная компанией Yandex для задач машинного обучения. -Принимает путь к модели catboost и аргументы модели (признаки). - -**Предварительные требования** - -1. Сборка библиотеки оценки catboost - -Перед оценкой моделей catboost библиотека `libcatboostmodel.` должна быть доступна в системе. См. [документацию CatBoost](https://catboost.ai/docs/concepts/c-plus-plus-api_dynamic-c-pluplus-wrapper.html) о том, как её скомпилировать. - -Затем укажите путь к `libcatboostmodel.` в конфигурации ClickHouse: - -```xml - -... - /path/to/libcatboostmodel.so -... - -``` - -По соображениям безопасности и изоляции оценка модели выполняется не в серверном процессе, а в процессе clickhouse-library-bridge. -При первом вызове `catboostEvaluate()` сервер запускает процесс clickhouse-library-bridge, если он ещё не запущен. Оба процесса -обмениваются данными через HTTP-интерфейс. По умолчанию используется порт `9012`. Другой порт можно указать следующим образом — это полезно, если порт -`9012` уже занят другим сервисом. - -```xml - - 9019 - -``` - -2. Обучите модель CatBoost с помощью библиотеки libcatboost - -См. раздел [Training and applying models](https://catboost.ai/docs/features/training.html#training) для получения сведений о том, как обучать модели CatBoost на обучающем наборе данных. - -**Синтаксис** - -```sql -catboostEvaluate(path_to_model, feature_1[, feature_2, ..., feature_n]) -``` - -**Аргументы** - -* `path_to_model` — Путь к модели CatBoost. [`const String`](/sql-reference/data-types/string) -* `feature` — Один или несколько признаков/аргументов модели. [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает результат оценки модели. [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**catboostEvaluate** - -```sql title=Query -SELECT catboostEvaluate('/root/occupy.bin', Temperature, Humidity, Light, CO2, HumidityRatio) AS prediction FROM occupancy LIMIT 1 -``` - -```response title=Response -4.695691092573497 -``` - - -## colorOKLCHToSRGB - -Добавлена в: v25.7 - -Преобразует цвет из перцептивного цветового пространства **OKLCH** в привычное цветовое пространство **sRGB**. - -Если `L` выходит за пределы диапазона `[0...1]`, `C` имеет отрицательное значение или `H` выходит за пределы диапазона `[0...360]`, результат определяется реализацией. - -:::note -**OKLCH** — цилиндрическая версия цветового пространства OKLab. -Его три координаты: `L` (светлота в диапазоне `[0...1]`), `C` (насыщенность `>= 0`) и `H` (тон в градусах в диапазоне `[0...360]`). -OKLab/OKLCH разработано как перцептивно равномерное, при этом остаётся вычислительно недорогим. -::: - -Преобразование является обратным к [`colorSRGBToOKLCH`](#colorSRGBToOKLCH): - -1. OKLCH в OKLab. -2. OKLab в линейное sRGB. -3. Линейное sRGB в sRGB. - -Второй аргумент `gamma` используется на последнем этапе. - -Справочные значения цветов в пространстве OKLCH и их соответствие цветам sRGB см. на сайте [https://oklch.com/](https://oklch.com/). - -**Синтаксис** - -```sql -colorOKLCHToSRGB(tuple [, gamma]) -``` - -**Аргументы** - -* `tuple` — кортеж из трёх числовых значений `L`, `C`, `H`, где `L` находится в диапазоне `[0...1]`, `C >= 0`, а `H` находится в диапазоне `[0...360]`. [`Tuple(Float64, Float64, Float64)`](/sql-reference/data-types/tuple) -* `gamma` — необязательный параметр. Показатель степени, используемый для преобразования линейного sRGB обратно в sRGB путём применения `(x ^ (1 / gamma)) * 255` к каждому каналу `x`. Значение по умолчанию — `2.2`. [`Float64`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает кортеж (R, G, B), представляющий значения цветов в пространстве sRGB. [`Tuple(Float64, Float64, Float64)`](/sql-reference/data-types/tuple) - -**Примеры** - -**Преобразование OKLCH в sRGB** - -```sql title=Query -SELECT colorOKLCHToSRGB((0.4466, 0.0991, 45.44), 2.2) AS rgb -WITH colorOKLCHToSRGB((0.7, 0.1, 54)) as t SELECT tuple(toUInt8(t.1), toUInt8(t.2), toUInt8(t.3)) AS RGB -``` - -```response title=Response -┌─rgb──────────────────────────────────────────────────────┐ -│ (127.03349738778945,66.06672044472008,37.11802592155851) │ -└──────────────────────────────────────────────────────────┘ -┌─RGB──────────┐ -│ (205,139,97) │ -└──────────────┘ -``` - - -## colorSRGBToOKLCH - -Появилась в версии: v25.7 - -Преобразует цвет, закодированный в цветовом пространстве **sRGB**, в перцептивно равномерное цветовое пространство **OKLCH**. - -Если какой-либо входной канал выходит за пределы диапазона `[0...255]` или значение гаммы неположительно, поведение является зависящим от реализации. - -:::note -**OKLCH** — цилиндрическая версия цветового пространства OKLab. -У него три координаты: `L` (светлота в диапазоне `[0...1]`), `C` (хрома, `>= 0`) и `H` (тон в градусах из диапазона `[0...360]`). -OKLab/OKLCH спроектировано как перцептивно равномерное при сохранении низкой вычислительной стоимости. -::: - -Преобразование состоит из трёх этапов: - -1. sRGB → линейное sRGB -2. Линейное sRGB → OKLab -3. OKLab → OKLCH. - -Для примеров цветов в пространстве OKLCH и их соответствия цветам в sRGB см. [https://OKLCH.com/](https://OKLCH.com/). - -**Синтаксис** - -```sql -colorSRGBToOKLCH(tuple[, gamma]) -``` - -**Аргументы** - -* `tuple` — кортеж из трёх значений R, G, B в диапазоне `[0...255]`. [`Tuple(UInt8, UInt8, UInt8)`](/sql-reference/data-types/tuple) -* `gamma` — необязательный параметр. Показатель степени, который используется для линеаризации sRGB путём применения `(x / 255)^gamma` к каждому каналу `x`. По умолчанию — `2.2`. [`Float64`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает кортеж (L, C, H), представляющий значения в цветовом пространстве OKLCH. [`Tuple(Float64, Float64, Float64)`](/sql-reference/data-types/tuple) - -**Примеры** - -**Преобразование sRGB в OKLCH** - -```sql title=Query -SELECT colorSRGBToOKLCH((128, 64, 32), 2.2) AS lch -``` - -```response title=Response -┌─lch─────────────────────────────────────────────────────────┐ -│ (0.4436238384931984,0.10442699545678624,45.907345481930236) │ -└─────────────────────────────────────────────────────────────┘ -``` - - -## connectionId - -Появилась в: v21.3 - -Возвращает идентификатор соединения клиента, который отправил текущий запрос. -Эта функция наиболее полезна в сценариях отладки. -Она была создана для совместимости с функцией MySQL `CONNECTION_ID`. -Обычно не используется в запросах в продуктивной среде. - -**Синтаксис** - -```sql -connectionId() -``` - -**Аргументы** - -* Нет аргументов. - -**Возвращаемое значение** - -Возвращает идентификатор соединения текущего клиента. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT connectionId(); -``` - -```response title=Response -┌─connectionId()─┐ -│ 0 │ -└────────────────┘ -``` - - -## countDigits - -Введена в: v20.8 - -Возвращает количество десятичных цифр, необходимых для представления значения. - -:::note -Эта функция учитывает масштаб десятичных значений, то есть вычисляет результат по базовому целочисленному типу, равному `(value * scale)`. - -Например: - -* `countDigits(42) = 2` -* `countDigits(42.000) = 5` -* `countDigits(0.04200) = 4` - ::: - -:::tip -Вы можете проверить переполнение для `Decimal64` с помощью условия `countDigits(x) > 18`, -хотя это медленнее, чем [`isDecimalOverflow`](#isDecimalOverflow). -::: - -**Синтаксис** - -```sql -countDigits(x) -``` - -**Аргументы** - -* `x` — Целочисленное или десятичное значение. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Decimal`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Возвращает количество цифр, необходимых для представления `x`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT countDigits(toDecimal32(1, 9)), countDigits(toDecimal32(-1, 9)), - countDigits(toDecimal64(1, 18)), countDigits(toDecimal64(-1, 18)), - countDigits(toDecimal128(1, 38)), countDigits(toDecimal128(-1, 38)); -``` - -```response title=Response -┌─countDigits(toDecimal32(1, 9))─┬─countDigits(toDecimal32(-1, 9))─┬─countDigits(toDecimal64(1, 18))─┬─countDigits(toDecimal64(-1, 18))─┬─countDigits(toDecimal128(1, 38))─┬─countDigits(toDecimal128(-1, 38))─┐ -│ 10 │ 10 │ 19 │ 19 │ 39 │ 39 │ -└────────────────────────────────┴─────────────────────────────────┴─────────────────────────────────┴──────────────────────────────────┴──────────────────────────────────┴───────────────────────────────────┘ -``` - - -## currentDatabase - -Добавлено в версии: v1.1 - -Возвращает имя текущей базы данных. -Полезна в параметрах движка таблицы в запросах `CREATE TABLE`, где нужно указать базу данных. - -См. также оператор [`SET`](/sql-reference/statements/use). - -**Синтаксис** - -```sql -currentDatabase() -``` - -**Псевдонимы**: `current_database`, `SCHEMA`, `DATABASE` - -**Аргументы** - -* Отсутствуют. - -**Возвращаемое значение** - -Возвращает имя текущей базы данных. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT currentDatabase() -``` - -```response title=Response -┌─currentDatabase()─┐ -│ default │ -└───────────────────┘ -``` - - -## currentProfiles - -Введена в версии: v21.9 - -Возвращает массив профилей настроек для текущего пользователя. - -**Синтаксис** - -```sql -currentProfiles() -``` - -**Аргументы** - -* Нет. - -**Возвращаемое значение** - -Возвращает массив профилей настроек для текущего пользователя. [`Array(String)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT currentProfiles(); -``` - -```response title=Response -┌─currentProfiles()─────────────────────────────┐ -│ ['default', 'readonly_user', 'web_analytics'] │ -└───────────────────────────────────────────────┘ -``` - - -## currentQueryID - -Введена в версии: v - -Возвращает текущий идентификатор запроса. - -**Синтаксис** - -```sql -currentQueryID() -``` - -**Псевдонимы**: `current_query_id` - -**Аргументы** - -* Нет аргументов. - -**Возвращаемое значение** - -**Примеры** - -**Пример** - -```sql title=Query -SELECT currentQueryID(); -``` - -```response title=Response -┌─currentQueryID()─────────────────────┐ -│ 1280d0e8-1a08-4524-be6e-77975bb68e7d │ -└──────────────────────────────────────┘ -``` - - -## currentRoles - -Появилась в версии: v21.9 - -Возвращает массив ролей, назначенных текущему пользователю. - -**Синтаксис** - -```sql -currentRoles() -``` - -**Аргументы** - -* Нет. - -**Возвращаемое значение** - -Возвращает массив ролей, назначенных текущему пользователю. [`Array(String)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT currentRoles(); -``` - -```response title=Response -┌─currentRoles()─────────────────────────────────┐ -│ ['sql-console-role:jane.smith@clickhouse.com'] │ -└────────────────────────────────────────────────┘ -``` - - -## currentSchemas - -Введена в: v23.7 - -Аналогична функции [`currentDatabase`](#currentDatabase), но - -* принимает логический аргумент, который игнорируется -* возвращает имя базы данных в виде массива с одним значением. - -Функция `currentSchemas` существует только для совместимости с PostgreSQL. -Вместо неё используйте `currentDatabase`. - -См. также оператор [`SET`](/sql-reference/statements/use). - -**Синтаксис** - -```sql -currentSchemas(bool) -``` - -**Псевдонимы**: `current_schemas` - -**Аргументы** - -* `bool` — логическое значение, которое игнорируется. [`Bool`](/sql-reference/data-types/boolean) - -**Возвращаемое значение** - -Возвращает массив из одного элемента, содержащий имя текущей базы данных. [`Array(String)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT currentSchemas(true) -``` - -```response title=Response -┌─currentSchemas(true)─┐ -│ ['default'] │ -└──────────────────────┘ -``` - - -## currentUser - -Добавлено в версии: v20.1 - -Возвращает имя текущего пользователя. -В случае распределённого запроса возвращается имя пользователя, который инициировал запрос. - -**Синтаксис** - -```sql -currentUser() -``` - -**Псевдонимы**: `current_user`, `user` - -**Аргументы** - -* Нет. - -**Возвращаемое значение** - -Возвращает имя текущего пользователя, в противном случае — логин пользователя, инициировавшего запрос. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT currentUser() -``` - -```response title=Response -┌─currentUser()─┐ -│ default │ -└───────────────┘ -``` - - -## defaultProfiles - -Введена в версии: v21.9 - -Возвращает массив имен профилей настроек по умолчанию для текущего пользователя. - -**Синтаксис** - -```sql -defaultProfiles() -``` - -**Аргументы** - -* Нет. - -**Возвращаемое значение** - -Возвращает массив имён профилей настроек по умолчанию для текущего пользователя. [`Array(String)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT defaultProfiles(); -``` - -```response title=Response -┌─defaultProfiles()─┐ -│ ['default'] │ -└───────────────────┘ -``` - - -## defaultRoles - -Впервые появилось в версии v21.9 - -Возвращает массив ролей по умолчанию для текущего пользователя. - -**Синтаксис** - -```sql -defaultRoles() -``` - -**Аргументы** - -* Отсутствуют. - -**Возвращаемое значение** - -Возвращает массив ролей по умолчанию для текущего пользователя. [`Array(String)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT defaultRoles(); -``` - -```response title=Response -┌─defaultRoles()─────────────────────────────────┐ -│ ['sql-console-role:jane.smith@clickhouse.com'] │ -└────────────────────────────────────────────────┘ -``` - - -## defaultValueOfArgumentType - -Добавлена в версии v1.1 - -Возвращает значение по умолчанию для указанного типа данных. -Не включает значения по умолчанию для столбцов, определённых пользователем. - -**Синтаксис** - -```sql -defaultValueOfArgumentType(expression) -``` - -**Аргументы** - -* `expression` — Значение любого типа или выражение, результатом которого является значение любого типа. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает `0` для чисел, пустую строку для строк или `NULL` для типов Nullable. [`UInt8`](/sql-reference/data-types/int-uint) или [`String`](/sql-reference/data-types/string) или [`NULL`](/sql-reference/syntax#null) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT defaultValueOfArgumentType(CAST(1 AS Int8)); -``` - -```response title=Response -┌─defaultValueOfArgumentType(CAST(1, 'Int8'))─┐ -│ 0 │ -└─────────────────────────────────────────────┘ -``` - -**Пример типа Nullable** - -```sql title=Query -SELECT defaultValueOfArgumentType(CAST(1 AS Nullable(Int8))); -``` - -```response title=Response -┌─defaultValueOfArgumentType(CAST(1, 'Nullable(Int8)'))─┐ -│ ᴺᵁᴸᴸ │ -└───────────────────────────────────────────────────────┘ -``` - - -## defaultValueOfTypeName - -Появилась в версии: v1.1 - -Возвращает значение по умолчанию для указанного имени типа. - -**Синтаксис** - -```sql -defaultValueOfTypeName(type) -``` - -**Аргументы** - -* `type` — строка, задающая имя типа. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает значение по умолчанию для заданного имени типа: `0` для чисел, пустую строку для строк или `NULL` для Nullable [`UInt8`](/sql-reference/data-types/int-uint), [`String`](/sql-reference/data-types/string) или [`NULL`](/sql-reference/syntax#null) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT defaultValueOfTypeName('Int8'); -``` - -```response title=Response -┌─defaultValueOfTypeName('Int8')─┐ -│ 0 │ -└────────────────────────────────┘ -``` - -**Пример типа Nullable** - -```sql title=Query -SELECT defaultValueOfTypeName('Nullable(Int8)'); -``` - -```response title=Response -┌─defaultValueOfTypeName('Nullable(Int8)')─┐ -│ ᴺᵁᴸᴸ │ -└──────────────────────────────────────────┘ -``` - - -## displayName - -Появилась в версии: v22.11 - -Возвращает значение `display_name` из [config](/operations/configuration-files) или полное доменное имя сервера (FQDN), если параметр не задан. - -**Синтаксис** - -```sql -displayName() -``` - -**Аргументы** - -* Отсутствуют. - -**Возвращаемое значение** - -Возвращает значение `display_name` из конфигурации или полное доменное имя сервера (FQDN), если `display_name` не задан. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT displayName(); -``` - -```response title=Response -┌─displayName()─┐ -│ production │ -└───────────────┘ -``` - - -## dumpColumnStructure - -Добавлена в версии: v1.1 - -Выводит подробное описание внутренней структуры столбца и его типа данных. - -**Синтаксис** - -```sql -dumpColumnStructure(x) -``` - -**Аргументы** - -* `x` — Значение, для которого нужно получить описание. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает описание структуры столбца, которая используется для представления этого значения. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT dumpColumnStructure(CAST('2018-01-01 01:02:03', 'DateTime')); -``` - -```response title=Response -┌─dumpColumnStructure(CAST('2018-01-01 01:02:03', 'DateTime'))─┐ -│ DateTime, Const(size = 1, UInt32(size = 1)) │ -└──────────────────────────────────────────────────────────────┘ -``` - - -## enabledProfiles - -Появилась в версии: v21.9 - -Возвращает массив названий профилей настроек, которые включены для текущего пользователя. - -**Синтаксис** - -```sql -enabledProfiles() -``` - -**Аргументы** - -* Нет. - -**Возвращаемое значение** - -Возвращает массив имён профилей настроек, которые включены для текущего пользователя. [`Array(String)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT enabledProfiles(); -``` - -```response title=Response -┌─enabledProfiles()─────────────────────────────────────────────────┐ -│ ['default', 'readonly_user', 'web_analytics', 'batch_processing'] │ -└───────────────────────────────────────────────────────────────────┘ -``` - - -## enabledRoles - -Добавлена в версии: v21.9 - -Возвращает массив ролей, которые активированы для текущего пользователя. - -**Синтаксис** - -```sql -enabledRoles() -``` - -**Аргументы** - -* Нет. - -**Возвращаемое значение** - -Возвращает массив имён ролей, которые активированы для текущего пользователя. [`Array(String)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT enabledRoles(); -``` - -```response title=Response -┌─enabledRoles()─────────────────────────────────────────────────┐ -│ ['general_data', 'sql-console-role:jane.smith@clickhouse.com'] │ -└────────────────────────────────────────────────────────────────┘ -``` - - -## errorCodeToName - -Добавлена в версии: v20.12 - -Возвращает текстовое имя числового кода ошибки ClickHouse. -Соответствие числовых кодов ошибок их именам доступно [здесь](https://github.com/ClickHouse/ClickHouse/blob/master/src/Common/ErrorCodes.cpp). - -**Синтаксис** - -```sql -errorCodeToName(error_code) -``` - -**Аргументы** - -* `error_code` — код ошибки ClickHouse. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Возвращает строковое название `error_code`. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT errorCodeToName(252); -``` - -```response title=Response -┌─errorCodeToName(252)─┐ -│ TOO_MANY_PARTS │ -└──────────────────────┘ -``` - - -## file - -Появилась в версии: v21.3 - -Читает файл как строку и загружает данные в указанный столбец. -Содержимое файла не интерпретируется. - -См. также табличную функцию [`file`](../table-functions/file.md). - -**Синтаксис** - -```sql -file(path[, default]) -``` - -**Аргументы** - -* `path` — Путь к файлу относительно `user_files_path`. Поддерживает шаблоны `*`, `**`, `?`, `{abc,def}` и `{N..M}`, где `N`, `M` — числа, а `'abc', 'def'` — строки. [`String`](/sql-reference/data-types/string) -* `default` — Значение, которое возвращается, если файл не существует или недоступен. [`String`](/sql-reference/data-types/string) или [`NULL`](/sql-reference/syntax#null) - -**Возвращаемое значение** - -Возвращает содержимое файла как строку. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Добавление файлов в таблицу** - -```sql title=Query -INSERT INTO table SELECT file('a.txt'), file('b.txt'); -``` - -```response title=Response -``` - - -## filesystemAvailable - -Добавлено в: v20.1 - -Возвращает объём свободного места в файловой системе, на которой размещаются данные базы данных. -Возвращаемое значение всегда меньше общего свободного пространства ([`filesystemUnreserved`](../../sql-reference/functions/other-functions.md#filesystemUnreserved)), так как часть пространства зарезервирована для операционной системы. - -**Синтаксис** - -```sql -filesystemAvailable([disk_name]) -``` - -**Аргументы** - -* `disk_name` — необязательный параметр. Имя диска, для которого нужно определить количество свободного места. Если параметр не указан, используется диск по умолчанию. [`String`](/sql-reference/data-types/string) или [`FixedString`](/sql-reference/data-types/fixedstring) - -**Возвращаемое значение** - -Возвращает объем оставшегося свободного места в байтах. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT formatReadableSize(filesystemAvailable()) AS "Доступное место"; -``` - -```response title=Response -┌─Доступное место─┐ -│ 30.75 GiB │ -└─────────────────┘ -``` - - -## filesystemCapacity - -Появилась в версии: v20.1 - -Возвращает емкость файловой системы в байтах. -Необходимо настроить параметр [path](../../operations/server-configuration-parameters/settings.md#path), указывающий каталог данных. - -**Синтаксис** - -```sql -filesystemCapacity([disk_name]) -``` - -**Аргументы** - -* `disk_name` — необязательный параметр. Имя диска, для которого нужно получить ёмкость. Если параметр опущен, используется диск по умолчанию. [`String`](/sql-reference/data-types/string) или [`FixedString`](/sql-reference/data-types/fixedstring) - -**Возвращаемое значение** - -Возвращает ёмкость файловой системы в байтах. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT formatReadableSize(filesystemCapacity()) AS "Емкость"; -``` - -```response title=Response -┌─Ёмкость───┐ -│ 39.32 ГиБ │ -└───────────┘ -``` - - -## filesystemUnreserved - -Добавлено в версии: v22.12 - -Возвращает общий объем свободного места в файловой системе, на которой хранятся данные базы данных (ранее `filesystemFree`). -См. также [`filesystemAvailable`](#filesystemAvailable). - -**Синтаксис** - -```sql -filesystemUnreserved([disk_name]) -``` - -**Аргументы** - -* `disk_name` — необязательный параметр. Имя диска, для которого требуется определить общее количество свободного места. Если параметр опущен, используется диск по умолчанию. [`String`](/sql-reference/data-types/string) или [`FixedString`](/sql-reference/data-types/fixedstring) - -**Возвращаемое значение** - -Возвращает количество свободного места в байтах. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT formatReadableSize(filesystemUnreserved()) AS "Свободное место"; -``` - -```response title=Response -┌─Свободное пространство─┐ -│ 32.39 GiB │ -└────────────┘ -``` - - -## finalizeAggregation - -Введена в версии: v1.1 - -Функция по заданному состоянию агрегации возвращает результат агрегации (или финализированное состояние при использовании комбинатора [-State](../../sql-reference/aggregate-functions/combinators.md#-state)). - -**Синтаксис** - -```sql -finalizeAggregation(state) -``` - -**Аргументы** - -* `state` — состояние агрегации. [`AggregateFunction`](/sql-reference/data-types/aggregatefunction) - -**Возвращаемое значение** - -Возвращает окончательный результат агрегации. [`Any`](/sql-reference/data-types) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT finalizeAggregation(arrayReduce('maxState', [1, 2, 3])); -``` - -```response title=Response -┌─finalizeAggregation(arrayReduce('maxState', [1, 2, 3]))─┐ -│ 3 │ -└─────────────────────────────────────────────────────────┘ -``` - -**В сочетании с initializeAggregation** - -```sql title=Query -WITH initializeAggregation('sumState', number) AS one_row_sum_state -SELECT - number, - finalizeAggregation(one_row_sum_state) AS one_row_sum, - runningAccumulate(one_row_sum_state) AS cumulative_sum -FROM numbers(5); -``` - -```response title=Response -┌─number─┬─one_row_sum─┬─cumulative_sum─┐ -│ 0 │ 0 │ 0 │ -│ 1 │ 1 │ 1 │ -│ 2 │ 2 │ 3 │ -│ 3 │ 3 │ 6 │ -│ 4 │ 4 │ 10 │ -└────────┴─────────────┴────────────────┘ -``` - - -## flipCoordinates - -Добавлена в: v25.10 - -Меняет местами координаты `Point`, `Ring`, `Polygon` или `MultiPolygon`. Для `Point` просто переставляет координаты. Для массивов рекурсивно применяет то же преобразование к каждой паре координат. - -**Синтаксис** - -```sql -flipCoordinates(geometry) -``` - -**Аргументы** - -* `geometry` — геометрический объект для преобразования. Поддерживаемые типы: Point (Tuple(Float64, Float64)), Ring (Array(Point)), Polygon (Array(Ring)), MultiPolygon (Array(Polygon)). - -**Возвращаемое значение** - -Геометрический объект с переставленными местами координатами. Тип совпадает с типом входного значения: [`Point`](/sql-reference/data-types/geo#point) или [`Ring`](/sql-reference/data-types/geo#ring) или [`Polygon`](/sql-reference/data-types/geo#polygon) или [`MultiPolygon`](/sql-reference/data-types/geo#multipolygon) - -**Примеры** - -**basic_point** - -```sql title=Query -SELECT flipCoordinates((1.0, 2.0)); -``` - -```response title=Response -(2.0, 1.0) -``` - -**кольцо** - -```sql title=Query -SELECT flipCoordinates([(1.0, 2.0), (3.0, 4.0)]); -``` - -```response title=Response -[(2.0, 1.0), (4.0, 3.0)] -``` - -**многоугольник** - -```sql title=Query -SELECT flipCoordinates([[(1.0, 2.0), (3.0, 4.0)], [(5.0, 6.0), (7.0, 8.0)]]); -``` - -```response title=Response -[[(2.0, 1.0), (4.0, 3.0)], [(6.0, 5.0), (8.0, 7.0)]] -``` - - -## formatQuery - -Добавлена в версии: v - -Возвращает форматированный, возможно многострочный, вариант заданного SQL‑запроса. Выбрасывает исключение в случае ошибки разбора. -[example:multiline] - -**Синтаксис** - -```sql -formatQuery(query) -``` - -**Аргументы** - -* `query` — SQL-запрос, который нужно отформатировать. [String](../../sql-reference/data-types/string.md) - -**Возвращаемое значение** - -Отформатированный запрос [`String`](/sql-reference/data-types/string) - -**Примеры** - -**многострочный** - -```sql title=Query -SELECT formatQuery('select a, b FRom tab WHERE a > 3 and b < 3'); -``` - -```response title=Response -SELECT - a, - b -FROM tab -WHERE (a > 3) AND (b < 3) -``` - - -## formatQueryOrNull - -Добавлено в: v - -Возвращает отформатированную, возможно, многострочную версию указанного SQL‑запроса. В случае ошибки синтаксического анализа возвращает NULL. -[example:multiline] - -**Синтаксис** - -```sql -formatQueryOrNull(query) -``` - -**Аргументы** - -* `query` — SQL-запрос, который нужно отформатировать. [String](../../sql-reference/data-types/string.md) - -**Возвращаемое значение** - -Отформатированный запрос типа [`String`](/sql-reference/data-types/string) - -**Примеры** - -**multiline** - -```sql title=Query -SELECT formatQuery('select a, b FRom tab WHERE a > 3 and b < 3'); -``` - -```response title=Response -SELECT - a, - b -FROM tab -WHERE (a > 3) AND (b < 3) -``` - - -## formatQuerySingleLine - -Впервые появилась в: v - -Аналогична функции formatQuery(), но возвращаемая отформатированная строка не содержит переводов строки. Вызывает исключение в случае ошибки парсинга. -[example:multiline] - -**Синтаксис** - -```sql -formatQuerySingleLine(query) -``` - -**Аргументы** - -* `query` — SQL-запрос, который нужно отформатировать. [String](../../sql-reference/data-types/string.md) - -**Возвращаемое значение** - -Отформатированный запрос [`String`](/sql-reference/data-types/string) - -**Примеры** - -**многострочный** - -```sql title=Query -SELECT formatQuerySingleLine('select a, b FRom tab WHERE a > 3 and b < 3'); -``` - -```response title=Response -SELECT a, b FROM tab WHERE (a > 3) AND (b < 3) -``` - - -## formatQuerySingleLineOrNull - -Добавлена в: v - -Похожа на formatQuery(), но возвращаемая форматированная строка не содержит переводов строк. Возвращает NULL в случае ошибки разбора. -[example:multiline] - -**Синтаксис** - -```sql -formatQuerySingleLineOrNull(query) -``` - -**Аргументы** - -* `query` — SQL-запрос для форматирования. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Отформатированный запрос [`String`](/sql-reference/data-types/string) - -**Примеры** - -**multiline** - -```sql title=Query -SELECT formatQuerySingleLine('select a, b FRom tab WHERE a > 3 and b < 3'); -``` - -```response title=Response -SELECT a, b FROM tab WHERE (a > 3) AND (b < 3) -``` - - -## formatReadableDecimalSize - -Введена в версии: v22.11 - -Для заданного размера (в байтах) эта функция возвращает удобочитаемый, округлённый размер с суффиксом (KB, MB и т.п.) в виде строки. - -Обратной функцией к ней является [`parseReadableSize`](#parseReadableSize). - -**Синтаксис** - -```sql -formatReadableDecimalSize(x) -``` - -**Аргументы** - -* `x` — размер в байтах. [`UInt64`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает округлённое значение размера в удобочитаемом виде с суффиксом в виде строки. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Форматирование размеров файлов** - -```sql title=Query -SELECT - arrayJoin([1, 1024, 1024*1024, 192851925]) AS filesize_bytes, - formatReadableDecimalSize(filesize_bytes) AS filesize -``` - -```response title=Response -┌─filesize_bytes─┬─filesize───┐ -│ 1 │ 1.00 Б │ -│ 1024 │ 1.02 КБ │ -│ 1048576 │ 1.05 МБ │ -│ 192851925 │ 192.85 МБ │ -└────────────────┴────────────┘ -``` - - -## formatReadableQuantity - -Введена в: v20.10 - -Эта функция, получив число, возвращает округлённое значение с суффиксом (тысяча, миллион, миллиард и т.д.) в виде строки. - -Функция принимает на вход любой числовой тип, но внутри приводит его к `Float64`. -Результаты могут быть неоптимальными для очень больших значений. - -**Синтаксис** - -```sql -formatReadableQuantity(x) -``` - -**Аргументы** - -* `x` — число для форматирования. [`UInt64`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает округлённое число с суффиксом в виде строки. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Форматирование чисел с суффиксами** - -```sql title=Query -SELECT - arrayJoin([1024, 1234 * 1000, (4567 * 1000) * 1000, 98765432101234]) AS number, - formatReadableQuantity(number) AS number_for_humans -``` - -```response title=Response -┌─────────number─┬─number_for_humans─┐ -│ 1024 │ 1.02 тыс. │ -│ 1234000 │ 1.23 млн │ -│ 4567000000 │ 4.57 млрд │ -│ 98765432101234 │ 98.77 трлн │ -└────────────────┴───────────────────┘ -``` - - -## formatReadableSize - -Добавлено в: v1.1 - -Для заданного размера (количества байт) эта функция возвращает удобочитаемое, округлённое значение с суффиксом (KiB, MiB и т. д.) в виде строки. - -Обратными функциями для этой функции являются [`parseReadableSize`](#parseReadableSize), [`parseReadableSizeOrZero`](#parseReadableSizeOrZero) и [`parseReadableSizeOrNull`](#parseReadableSizeOrNull). -Функция принимает на вход значение любого числового типа, но внутри приводит его к типу `Float64`. Результаты могут быть неоптимальными для очень больших значений. - -**Синтаксис** - -```sql -formatReadableSize(x) -``` - -**Псевдонимы**: `FORMAT_BYTES` - -**Аргументы** - -* `x` — размер в байтах. [`UInt64`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает размер в человекочитаемом виде: округлённое значение с суффиксом, представленное строкой. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Форматирование размеров файлов** - -```sql title=Query -SELECT - arrayJoin([1, 1024, 1024*1024, 192851925]) AS filesize_bytes, - formatReadableSize(filesize_bytes) AS filesize -``` - -```response title=Response -┌─filesize_bytes─┬─filesize───┐ -│ 1 │ 1.00 B │ -│ 1024 │ 1.00 KiB │ -│ 1048576 │ 1.00 MiB │ -│ 192851925 │ 183.92 MiB │ -└────────────────┴────────────┘ -``` - - -## formatReadableTimeDelta - -Введена в версии: v20.12 - -Получив временной интервал (дельту) в секундах, эта функция возвращает строковое представление временной дельты с годом/месяцем/днём/часом/минутой/секундой/миллисекундой/микросекундой/наносекундой. - -Эта функция принимает на вход любое числовое значение, но затем внутренне приводит их к типу `Float64`. Результаты могут быть неоптимальными для больших значений. - -**Синтаксис** - -```sql -formatReadableTimeDelta(column[, maximum_unit, minimum_unit]) -``` - -**Аргументы** - -* `column` — Столбец с числовым значением временной дельты. [`Float64`](/sql-reference/data-types/float) -* `maximum_unit` — Необязательный параметр. Максимальная единица измерения времени для отображения. Допустимые значения: `nanoseconds`, `microseconds`, `milliseconds`, `seconds`, `minutes`, `hours`, `days`, `months`, `years`. Значение по умолчанию: `years`. [`const String`](/sql-reference/data-types/string) -* `minimum_unit` — Необязательный параметр. Минимальная единица измерения времени для отображения. Все меньшие единицы усекаются. Допустимые значения: `nanoseconds`, `microseconds`, `milliseconds`, `seconds`, `minutes`, `hours`, `days`, `months`, `years`. Если явно указанное значение больше, чем `maximum_unit`, генерируется исключение. Значение по умолчанию: `seconds`, если `maximum_unit` — `seconds` или больше, в противном случае — `nanoseconds`. [`const String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает временную дельту в виде строки. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT - arrayJoin([100, 12345, 432546534]) AS elapsed, - formatReadableTimeDelta(elapsed) AS time_delta -``` - -```response title=Response -┌────elapsed─┬─time_delta─────────────────────────────────────────────────────┐ -│ 100 │ 1 минута 40 секунд │ -│ 12345 │ 3 часа 25 минут 45 секунд │ -│ 432546534 │ 13 лет 8 месяцев 17 дней 7 часов 48 минут 54 секунды │ -└────────────┴────────────────────────────────────────────────────────────────┘ -``` - -**С максимальной единицей** - -```sql title=Query -SELECT - arrayJoin([100, 12345, 432546534]) AS elapsed, - formatReadableTimeDelta(elapsed, 'minutes') AS time_delta -``` - -```response title=Response -┌────elapsed─┬─time_delta─────────────────────────────────────────────────────┐ -│ 100 │ 1 минута 40 секунд │ -│ 12345 │ 205 минут 45 секунд │ -│ 432546534 │ 7209108 минут 54 секунды │ -└────────────┴─────────────────────────────────────────────────────────────────┘ -``` - - -## generateRandomStructure - -Появилась в версии: v23.5 - -Генерирует случайную структуру таблицы в формате `column1_name column1_type, column2_name column2_type, ...`. - -**Синтаксис** - -```sql -generateRandomStructure([number_of_columns, seed]) -``` - -**Аргументы** - -* `number_of_columns` — Заданное количество столбцов в результирующей структуре таблицы. Если равно 0 или `Null`, количество столбцов будет случайным от 1 до 128. Значение по умолчанию: `Null`. [`UInt64`](/sql-reference/data-types/int-uint) -* `seed` — Значение-инициализатор генератора случайных чисел для получения стабильных результатов. Если `seed` не указан или равен `Null`, он генерируется случайным образом. [`UInt64`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Случайно сгенерированная структура таблицы. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT generateRandomStructure() -``` - -```response title=Response -c1 Decimal32(5), c2 Date, c3 Tuple(LowCardinality(String), Int128, UInt64, UInt16, UInt8, IPv6), c4 Array(UInt128), c5 UInt32, c6 IPv4, c7 Decimal256(64), c8 Decimal128(3), c9 UInt256, c10 UInt64, c11 DateTime -``` - -**с заданным числом столбцов** - -```sql title=Query -SELECT generateRandomStructure(1) -``` - -```response title=Response -c1 Map(UInt256, UInt16) -``` - -**с заданным значением seed** - -```sql title=Query -SELECT generateRandomStructure(NULL, 33) -``` - -```response title=Response -c1 DateTime, c2 Enum8('c2V0' = 0, 'c2V1' = 1, 'c2V2' = 2, 'c2V3' = 3), c3 LowCardinality(Nullable(FixedString(30))), c4 Int16, c5 Enum8('c5V0' = 0, 'c5V1' = 1, 'c5V2' = 2, 'c5V3' = 3), c6 Nullable(UInt8), c7 String, c8 Nested(e1 IPv4, e2 UInt8, e3 UInt16, e4 UInt16, e5 Int32, e6 Map(Date, Decimal256(70))) -``` - - -## generateSerialID - -Впервые появилась в версии v25.1 - -Генерирует и возвращает последовательные числа, продолжая нумерацию от предыдущего значения счетчика. -Функция принимает строковый аргумент — идентификатор серии, а также необязательное начальное значение. -Сервер должен быть настроен на использование Keeper. -Серии хранятся в узлах Keeper по пути, который можно задать в параметре [`series_keeper_path`](/operations/server-configuration-parameters/settings#series_keeper_path) в конфигурации сервера. - -**Синтаксис** - -```sql -generateSerialID(series_identifier[, start_value]) -``` - -**Аргументы** - -* `series_identifier` — идентификатор серии [`const String`](/sql-reference/data-types/string) -* `start_value` — необязательный параметр. Начальное значение счётчика. По умолчанию — 0. Примечание: это значение используется только при создании новой серии и игнорируется, если серия уже существует [`UInt*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает последовательные числа, начиная с предыдущего значения счётчика. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**первый вызов** - -```sql title=Query -SELECT generateSerialID('id1') -``` - -```response title=Response -┌─generateSerialID('id1')──┐ -│ 1 │ -└──────────────────────────┘ -``` - -**второй вызов** - -```sql title=Query -SELECT generateSerialID('id1') -``` - -```response title=Response -┌─generateSerialID('id1')──┐ -│ 2 │ -└──────────────────────────┘ -``` - -**вызов столбца** - -```sql title=Query -SELECT *, generateSerialID('id1') FROM test_table -``` - -```response title=Response -┌─CounterID─┬─UserID─┬─ver─┬─generateSerialID('id1')──┐ -│ 1 │ 3 │ 3 │ 3 │ -│ 1 │ 1 │ 1 │ 4 │ -│ 1 │ 2 │ 2 │ 5 │ -│ 1 │ 5 │ 5 │ 6 │ -│ 1 │ 4 │ 4 │ 7 │ -└───────────┴────────┴─────┴──────────────────────────┘ -``` - -**с начальным значением** - -```sql title=Query -SELECT generateSerialID('id2', 100) -``` - -```response title=Response -┌─generateSerialID('id2', 100)──┐ -│ 100 │ -└───────────────────────────────┘ -``` - -**со стартовым значением — второй вызов** - -```sql title=Query -SELECT generateSerialID('id2', 100) -``` - -```response title=Response -┌─generateSerialID('id2', 100)──┐ -│ 101 │ -└───────────────────────────────┘ -``` - - -## getClientHTTPHeader - -Появилась в версии: v24.5 - -Получает значение HTTP-заголовка. -Если такого заголовка нет или текущий запрос не выполняется через HTTP-интерфейс, функция возвращает пустую строку. -Некоторые HTTP-заголовки (например, `Authentication` и `X-ClickHouse-*`) имеют ограничения. - -:::note Для работы требуется включить `allow_get_client_http_header` -Для работы функции необходимо включить настройку `allow_get_client_http_header`. -По соображениям безопасности эта настройка по умолчанию отключена, так как некоторые заголовки, такие как `Cookie`, могут содержать конфиденциальную информацию. -::: - -Для этой функции в HTTP-заголовках учитывается регистр. -Если функция используется в контексте распределённого запроса, она возвращает непустой результат только на инициирующем узле. - -**Синтаксис** - -```sql -getClientHTTPHeader(name) -``` - -**Аргументы** - -* `name` — Имя HTTP-заголовка. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает значение заголовка. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT getClientHTTPHeader('Content-Type'); -``` - -```response title=Response -┌─getClientHTTPHeader('Content-Type')─┐ -│ application/x-www-form-urlencoded │ -└─────────────────────────────────────┘ -``` - - -## getMacro - -Впервые появилось в версии v20.1 - -Возвращает значение макроса из файла конфигурации сервера. -Макросы определяются в разделе [``](/operations/server-configuration-parameters/settings#macros) файла конфигурации и могут использоваться для различения серверов по удобным именам, даже если у них сложные имена хостов. -Если функция выполняется в контексте распределённой таблицы, она генерирует обычный столбец со значениями, соответствующими каждому шарду. - -**Синтаксис** - -```sql -getMacro(name) -``` - -**Аргументы** - -* `name` — Имя макроса, значение которого необходимо получить. [`const String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает значение указанного макроса. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT getMacro('test'); -``` - -```response title=Response -┌─getMacro('test')─┐ -│ Value │ -└──────────────────┘ -``` - - -## getMaxTableNameLengthForDatabase - -Добавлена в: v - -Возвращает максимально допустимую длину имени таблицы в указанной базе данных. - -**Синтаксис** - -```sql -getMaxTableNameLengthForDatabase(database_name) -``` - -**Аргументы** - -* `database_name` — имя указанной базы данных. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает максимальную длину имени таблицы, целое число. - -**Примеры** - -**Типичный пример** - -```sql title=Query -SELECT getMaxTableNameLengthForDatabase('default'); -``` - -```response title=Response -┌─getMaxTableNameLengthForDatabase('default')─┐ - │ 206 │ - └─────────────────────────────────────────────┘ -``` - - -## getMergeTreeSetting - -Добавлена в версии v25.6 - -Возвращает текущее значение настройки MergeTree. - -**Синтаксис** - -```sql -getMergeTreeSetting(setting_name) -``` - -**Аргументы** - -* `setting_name` — имя настройки. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает текущее значение настройки MergeTree. - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT getMergeTreeSetting('index_granularity'); -``` - -```response title=Response -┌─getMergeTreeSetting('index_granularity')─┐ -│ 8192 │ -└──────────────────────────────────────────┘ -``` - - -## getOSKernelVersion - -Появилась в версии: v21.11 - -Возвращает строку с версией ядра ОС. - -**Синтаксис** - -```sql -getOSKernelVersion() -``` - -**Аргументы** - -* Нет. - -**Возвращаемое значение** - -Возвращает текущую версию ядра ОС. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT getOSKernelVersion(); -``` - -```response title=Response -┌─getOSKernelVersion()────┐ -│ Linux 4.15.0-55-generic │ -└─────────────────────────┘ -``` - - -## getServerPort - -Впервые появилась в версии: v21.10 - -Возвращает номер порта сервера для заданного протокола. - -**Синтаксис** - -```sql -getServerPort(port_name) -``` - -**Аргументы** - -* `port_name` — имя порта. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает номер порта сервера. [`UInt16`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT getServerPort('tcp_port'); -``` - -```response title=Response -┌─getServerPort('tcp_port')─┐ -│ 9000 │ -└───────────────────────────┘ -``` - - -## getServerSetting - -Введена в: v25.6 - -Возвращает текущее значение настройки сервера по её имени. - -**Синтаксис** - -```sql -getServerSetting(setting_name') -``` - -**Аргументы** - -* `setting_name` — Имя настройки сервера. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает текущее значение настройки сервера. [`Any`](/sql-reference/data-types) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT getServerSetting('allow_use_jemalloc_memory'); -``` - -```response title=Response -┌─getServerSetting('allow_use_jemalloc_memory')─┐ -│ true │ -└───────────────────────────────────────────────┘ -``` - - -## getSetting - -Появилось в версии: v20.7 - -Возвращает текущее значение настройки. - -**Синтаксис** - -```sql -getSetting(setting_name) -``` - -**Аргументы** - -* `setting_Name` — имя настройки. [`const String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает текущее значение настройки. [`Any`](/sql-reference/data-types) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT getSetting('enable_analyzer'); -SET enable_analyzer = false; -SELECT getSetting('enable_analyzer'); -``` - -```response title=Response -┌─getSetting('⋯_analyzer')─┐ -│ true │ -└──────────────────────────┘ -┌─getSetting('⋯_analyzer')─┐ -│ false │ -└──────────────────────────┘ -``` - - -## getSettingOrDefault - -Добавлена в версии: v24.10 - -Возвращает текущее значение настройки или значение по умолчанию, указанное во втором аргументе, если настройка не задана в текущем профиле. - -**Синтаксис** - -```sql -getSettingOrDefault(setting_name, default_value) -``` - -**Аргументы** - -* `setting_name` — Имя настройки. [`String`](/sql-reference/data-types/string) -* `default_value` — Значение, которое возвращается, если `custom_setting` не задана. Значение может иметь любой тип данных или быть равным Null. - -**Возвращаемое значение** - -Возвращает текущее значение указанной настройки или `default_value`, если настройка не задана. - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT getSettingOrDefault('custom_undef1', 'my_value'); -SELECT getSettingOrDefault('custom_undef2', 100); -SELECT getSettingOrDefault('custom_undef3', NULL); -``` - -```response title=Response -my_value -100 -NULL -``` - - -## getSizeOfEnumType - -Впервые появилось в: v1.1 - -Возвращает количество элементов в указанном типе [`Enum`](../../sql-reference/data-types/enum.md). - -**Синтаксис** - -```sql -getSizeOfEnumType(x) -``` - -**Аргументы** - -* `x` — значение типа `Enum`. [`Enum`](/sql-reference/data-types/enum) - -**Возвращаемое значение** - -Возвращает количество полей со значениями типа `Enum`. [`UInt8/16`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT getSizeOfEnumType(CAST('a' AS Enum8('a' = 1, 'b' = 2))) AS x; -``` - -```response title=Response -┌─x─┐ -│ 2 │ -└───┘ -``` - - -## getSubcolumn - -Впервые представлена в версии: v - -Принимает выражение или идентификатор и константную строку с именем подстолбца. - -Возвращает запрошенный подстолбец, извлечённый из выражения. - -**Синтаксис** - -```sql -``` - -**Аргументы** - -* Нет. - -**Возвращаемое значение** - -**Примеры** - -**getSubcolumn** - -```sql title=Query -SELECT getSubcolumn(array_col, 'size0'), getSubcolumn(tuple_col, 'elem_name') -``` - -```response title=Response -``` - - -## getTypeSerializationStreams - -Добавлена в версии: v22.6 - -Перечисляет пути потоков сериализации для типа данных. -Эта функция предназначена для использования при разработке. - -**Синтаксис** - -```sql -getTypeSerializationStreams(col) -``` - -**Аргументы** - -* `col` — столбец или строковое представление типа данных, на основе которого будет определён тип данных. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает массив со всеми путями подпотоков сериализации. [`Array(String)`](/sql-reference/data-types/array) - -**Примеры** - -**tuple** - -```sql title=Query -SELECT getTypeSerializationStreams(tuple('a', 1, 'b', 2)) -``` - -```response title=Response -['{TupleElement(1), Regular}','{TupleElement(2), Regular}','{TupleElement(3), Regular}','{TupleElement(4), Regular}'] -``` - -**map** - -```sql title=Query -SELECT getTypeSerializationStreams('Map(String, Int64)') -``` - -```response title=Response -['{ArraySizes}','{ArrayElements, TupleElement(keys), Regular}','{ArrayElements, TupleElement(values), Regular}'] -``` - - -## globalVariable - -Введена в версии v20.5 - -Принимает константный строковый аргумент и возвращает значение глобальной переменной с этим именем. Эта функция предназначена для совместимости с MySQL и не требуется и не представляет практической пользы при обычной работе с ClickHouse. Определено лишь несколько фиктивных глобальных переменных. - -**Синтаксис** - -```sql -globalVariable(name) -``` - -**Аргументы** - -* `name` — имя глобальной переменной. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает значение переменной `name`. [`Any`](/sql-reference/data-types) - -**Примеры** - -**globalVariable** - -```sql title=Query -SELECT globalVariable('max_allowed_packet') -``` - -```response title=Response -67108864 -``` - - -## hasColumnInTable - -Появилась в версии v1.1 - -Проверяет, существует ли определённый столбец в таблице базы данных. -Для элементов во вложенной структуре данных функция проверяет существование столбца. -Для самой вложенной структуры данных функция возвращает `0`. - -**Синтаксис** - -```sql -hasColumnInTable([hostname[, username[, password]],]database, table, column) -``` - -**Аргументы** - -* `database` — Имя базы данных. [`const String`](/sql-reference/data-types/string) -* `table` — Имя таблицы. [`const String`](/sql-reference/data-types/string) -* `column` — Имя столбца. [`const String`](/sql-reference/data-types/string) -* `hostname` — Необязательный параметр. Имя удалённого сервера, на котором выполняется проверка. [`const String`](/sql-reference/data-types/string) -* `username` — Необязательный параметр. Имя пользователя для удалённого сервера. [`const String`](/sql-reference/data-types/string) -* `password` — Необязательный параметр. Пароль для удалённого сервера. [`const String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает `1`, если указанный столбец существует, иначе — `0`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Проверка существующего столбца** - -```sql title=Query -SELECT hasColumnInTable('system','metrics','metric') -``` - -```response title=Response -1 -``` - -**Проверка несуществующего столбца** - -```sql title=Query -SELECT hasColumnInTable('system','metrics','non-existing_column') -``` - -```response title=Response -0 -``` - - -## hasThreadFuzzer - -Появилась в версии: v20.6 - -Возвращает, включён ли thread fuzzer. -Эта функция полезна только для тестирования и отладки. - -**Синтаксис** - -```sql -hasThreadFuzzer() -``` - -**Аргументы** - -* Нет. - -**Возвращаемое значение** - -Возвращает, активен ли Thread Fuzzer. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Проверка статуса Thread Fuzzer** - -```sql title=Query -SELECT hasThreadFuzzer() -``` - -```response title=Response -┌─hasThreadFuzzer()─┐ -│ 0 │ -└───────────────────┘ -``` - - -## hostName - -Впервые появилась в версии v20.5 - -Возвращает имя хоста, на котором была выполнена эта функция. -Если функция выполняется на удалённом сервере (распределённая обработка), возвращается имя этого удалённого сервера. -Если функция выполняется в контексте распределённой таблицы, она генерирует обычный столбец со значениями, соответствующими каждому шарду. -В остальных случаях она возвращает константное значение. - -**Синтаксис** - -```sql -hostName() -``` - -**Псевдонимы**: `hostname` - -**Аргументы** - -* Нет аргументов. - -**Возвращаемое значение** - -Возвращает имя хоста. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT hostName() -``` - -```response title=Response -┌─hostName()─┐ -│ clickhouse │ -└────────────┘ -``` - - -## icebergBucket - -Введено в версии v25.5 - -Реализует логику [преобразования bucket в Iceberg](https://iceberg.apache.org/spec/#bucket-transform-details.). - -**Синтаксис** - -```sql -icebergBucket(N, value) -``` - -**Аргументы** - -* `N` — Число бакетов (модуль). [`const (U)Int*`](/sql-reference/data-types/int-uint) -* `value` — Исходное значение для преобразования. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Bool`](/sql-reference/data-types/boolean) или [`Decimal`](/sql-reference/data-types/decimal) или [`Float*`](/sql-reference/data-types/float) или [`String`](/sql-reference/data-types/string) или [`FixedString`](/sql-reference/data-types/fixedstring) или [`UUID`](/sql-reference/data-types/uuid) или [`Date`](/sql-reference/data-types/date) или [`Time`](/sql-reference/data-types/time) или [`DateTime`](/sql-reference/data-types/datetime) - -**Возвращаемое значение** - -Возвращает 32-битный хэш исходного значения. [`Int32`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример** - -```sql title=Query -SELECT icebergBucket(5, 1.0 :: Float32) -``` - -```response title=Response -4 -``` - - -## icebergTruncate - -Впервые появился в: v25.3 - -Реализует логику преобразования truncate в Iceberg: [https://iceberg.apache.org/spec/#truncate-transform-details](https://iceberg.apache.org/spec/#truncate-transform-details). - -**Синтаксис** - -```sql -icebergTruncate(N, value) -``` - -**Аргументы** - -* `value` — значение для преобразования. [`String`](/sql-reference/data-types/string) или [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Decimal`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Того же типа, что и аргумент - -**Примеры** - -**Пример** - -```sql title=Query -SELECT icebergTruncate(3, 'iceberg') -``` - -```response title=Response -ice -``` - - -## identity - -Введена в версии v1.1 - -Эта функция возвращает переданный ей аргумент, что полезно для отладки и тестирования. Она позволяет обойти использование индексов, чтобы вместо этого оценить производительность полного сканирования. Анализатор запросов игнорирует всё, что находится внутри функций identity при поиске индексов, а также отключает свёртывание констант. - -**Синтаксис** - -```sql -identity(x) -``` - -**Аргументы** - -* `x` — входное значение. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает входное значение без изменений. [`Any`](/sql-reference/data-types) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT identity(42) -``` - -```response title=Response -42 -``` - - -## ignore - -Появилась в версии: v1.1 - -Принимает произвольные аргументы и безусловно возвращает `0`. - -**Синтаксис** - -```sql -ignore(x) -``` - -**Аргументы** - -* `x` — входное значение, которое не используется и передаётся только для того, чтобы избежать синтаксической ошибки. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Всегда возвращает `0`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT ignore(0, 'ClickHouse', NULL) -``` - -```response title=Response -┌─ignore(0, 'ClickHouse', NULL)─┐ -│ 0 │ -└───────────────────────────────┘ -``` - - -## indexHint - -Добавлена в: v1.1 - -Эта функция предназначена для отладки и интроспекции. -Она игнорирует свой аргумент и всегда возвращает 1. -Её аргументы не вычисляются. - -При анализе индекса аргумент этой функции рассматривается так, как если бы он не был обёрнут в `indexHint`. -Это позволяет выбирать данные по диапазонам индекса по соответствующему условию, но без дальнейшей фильтрации по этому условию. -Индекс в ClickHouse является разреженным, и использование `indexHint` приведёт к выборке большего объёма данных, чем при непосредственном указании того же условия. - -**Синтаксис** - -```sql -indexHint(выражение) -``` - -**Аргументы** - -* `expression` — Произвольное выражение для выбора диапазона индекса. [`Expression`](/sql-reference/data-types/special-data-types/expression) - -**Возвращаемое значение** - -Во всех случаях возвращает `1`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования с фильтрацией по дате** - -```sql title=Query -SELECT FlightDate AS k, count() FROM ontime WHERE indexHint(k = '2025-09-15') GROUP BY k ORDER BY k ASC; -``` - -```response title=Response -┌──────────k─┬─count()─┐ -│ 2025-09-14 │ 7071 │ -│ 2025-09-15 │ 16428 │ -│ 2025-09-16 │ 1077 │ -│ 2025-09-30 │ 8167 │ -└────────────┴─────────┘ -``` - - -## initialQueryID - -Добавлено в: v1.1 - -Возвращает идентификатор исходного запроса. -Другие параметры запроса можно получить из поля `initial_query_id` в таблице [`system.query_log`](../../operations/system-tables/query_log.md). - -В отличие от функции [`queryID`](/sql-reference/functions/other-functions#queryID), `initialQueryID` возвращает одинаковые результаты на разных шардах. - -**Синтаксис** - -```sql -initialQueryID() -``` - -**Псевдонимы**: `initial_query_id` - -**Аргументы** - -* Нет. - -**Возвращаемое значение** - -Возвращает идентификатор исходного запроса. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -CREATE TABLE tmp (str String) ENGINE = Log; -INSERT INTO tmp (*) VALUES ('a'); -SELECT count(DISTINCT t) FROM (SELECT initialQueryID() AS t FROM remote('127.0.0.{1..3}', currentDatabase(), 'tmp') GROUP BY queryID()); -``` - -```response title=Response -┌─count(DISTINCT t)─┐ -│ 1 │ -└───────────────────┘ -``` - - -## initialQueryStartTime - -Добавлено в: v25.4 - -Возвращает время начала исходного запроса. -`initialQueryStartTime` возвращает одинаковые результаты на всех шардах. - -**Синтаксис** - -```sql -initialQueryStartTime() -``` - -**Псевдонимы**: `initial_query_start_time` - -**Аргументы** - -* Нет. - -**Возвращаемое значение** - -Возвращает время начала исходного запроса. [`DateTime`](/sql-reference/data-types/datetime) - -**Примеры** - -**Пример использования** - -```sql title=Query -CREATE TABLE tmp (str String) ENGINE = Log; -INSERT INTO tmp (*) VALUES ('a'); -SELECT count(DISTINCT t) FROM (SELECT initialQueryStartTime() AS t FROM remote('127.0.0.{1..3}', currentDatabase(), 'tmp') GROUP BY queryID()); -``` - -```response title=Response -┌─count(DISTINCT t)─┐ -│ 1 │ -└───────────────────┘ -``` - - -## initializeAggregation - -Добавлено в версии: v20.6 - -Вычисляет результат агрегатной функции по одному значению. -Эту функцию можно использовать для инициализации агрегатных функций с комбинатором [-State](../../sql-reference/aggregate-functions/combinators.md#-state). -Вы можете создавать состояния агрегатных функций и записывать их в столбцы типа [`AggregateFunction`](../../sql-reference/data-types/aggregatefunction.md) или использовать инициализированные состояния в качестве значений по умолчанию. - -**Синтаксис** - -```sql -initializeAggregation(aggregate_function, arg1[, arg2, ...]) -``` - -**Аргументы** - -* `aggregate_function` — Имя агрегатной функции для инициализации. [`String`](/sql-reference/data-types/string) -* `arg1[, arg2, ...]` — Аргументы агрегатной функции. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает результат агрегации для каждой строки, переданной функции. Тип возвращаемого значения совпадает с типом возвращаемого значения функции, которую `initializeAggregation` принимает в качестве первого аргумента. [`Any`](/sql-reference/data-types) - -**Примеры** - -**Базовое использование с uniqState** - -```sql title=Query -SELECT uniqMerge(state) FROM (SELECT initializeAggregation('uniqState', number % 3) AS state FROM numbers(10000)); -``` - -```response title=Response -┌─uniqMerge(state)─┐ -│ 3 │ -└──────────────────┘ -``` - -**Использование функций sumState и finalizeAggregation** - -```sql title=Query -SELECT finalizeAggregation(state), toTypeName(state) FROM (SELECT initializeAggregation('sumState', number % 3) AS state FROM numbers(5)); -``` - -```response title=Response -┌─finalizeAggregation(state)─┬─toTypeName(state)─────────────┐ -│ 0 │ AggregateFunction(sum, UInt8) │ -│ 1 │ AggregateFunction(sum, UInt8) │ -│ 2 │ AggregateFunction(sum, UInt8) │ -│ 0 │ AggregateFunction(sum, UInt8) │ -│ 1 │ AggregateFunction(sum, UInt8) │ -└────────────────────────────┴───────────────────────────────┘ -``` - - -## isConstant - -Впервые появилась в: v20.3 - -Возвращает, является ли аргумент константным выражением. -Константное выражение — это выражение, результат которого известен на этапе анализа запроса, то есть до выполнения. -Например, выражения с [литералами](/sql-reference/syntax#literals) являются константными выражениями. -Эта функция в основном предназначена для разработки, отладки и демонстрации. - -**Синтаксис** - -```sql -isConstant(x) -``` - -**Аргументы** - -* `x` — выражение для проверки. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает `1`, если `x` — константа, и `0`, если `x` — не константа. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Константное выражение** - -```sql title=Query -SELECT isConstant(x + 1) -FROM (SELECT 43 AS x) -``` - -```response title=Response -┌─isConstant(plus(x, 1))─┐ -│ 1 │ -└────────────────────────┘ -``` - -**Константа с функцией** - -```sql title=Query -WITH 3.14 AS pi -SELECT isConstant(cos(pi)) -``` - -```response title=Response -┌─isConstant(cos(pi))─┐ -│ 1 │ -└─────────────────────┘ -``` - -**Неконстантное выражение** - -```sql title=Query -SELECT isConstant(number) -FROM numbers(1) -``` - -```response title=Response -┌─isConstant(number)─┐ -│ 0 │ -└────────────────────┘ -``` - -**Поведение функции now()** - -```sql title=Query -SELECT isConstant(now()) -``` - -```response title=Response -┌─isConstant(now())─┐ -│ 1 │ -└───────────────────┘ -``` - - -## isDecimalOverflow - -Появилась в версии: v20.8 - -Проверяет, имеет ли десятичное число слишком много цифр, чтобы поместиться в тип данных `Decimal` с заданной точностью. - -**Синтаксис** - -```sql -isDecimalOverflow(value[, precision]) -``` - -**Аргументы** - -* `value` — десятичное значение для проверки. [`Decimal`](/sql-reference/data-types/decimal) -* `precision` — необязательный параметр. Точность типа `Decimal`. Если параметр опущен, используется исходная точность первого аргумента. [`UInt8`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает `1`, если десятичное значение содержит больше цифр, чем допускает его точность, и `0`, если десятичное значение соответствует указанной точности. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT isDecimalOverflow(toDecimal32(1000000000, 0), 9), - isDecimalOverflow(toDecimal32(1000000000, 0)), - isDecimalOverflow(toDecimal32(-1000000000, 0), 9), - isDecimalOverflow(toDecimal32(-1000000000, 0)); -``` - -```response title=Response -┌─isDecimalOverflow(toDecimal32(1000000000, 0), 9)─┬─isDecimalOverflow(toDecimal32(1000000000, 0))─┬─isDecimalOverflow(toDecimal32(-1000000000, 0), 9)─┬─isDecimalOverflow(toDecimal32(-1000000000, 0))─┐ -│ 1 │ 1 │ 1 │ 1 │ -└──────────────────────────────────────────────────┴───────────────────────────────────────────────┴───────────────────────────────────────────────────┴────────────────────────────────────────────────┘ -``` - - -## joinGet - -Добавлена в: v18.16 - -Позволяет извлекать данные из таблицы таким же образом, как из словаря. -Извлекает данные из таблиц Join, используя указанный ключ соединения. - -:::note -Поддерживаются только таблицы, созданные с помощью выражения `ENGINE = Join(ANY, LEFT, <join_keys>)` [выражения](/engines/table-engines/special/join). -::: - -**Синтаксис** - -```sql -joinGet(имя_таблицы_join, столбец_значения, ключи_соединения) -``` - -**Аргументы** - -* `join_storage_table_name` — идентификатор, определяющий, где выполнять поиск. Идентификатор ищется в базе данных по умолчанию (см. параметр `default_database` в конфигурационном файле). Чтобы переопределить базу данных по умолчанию, используйте запрос `USE database_name` или укажите базу данных и таблицу через точку, например `database_name.table_name`. [`String`](/sql-reference/data-types/string) -* `value_column` — имя столбца таблицы, содержащего необходимые данные. [`const String`](/sql-reference/data-types/string) -* `join_keys` — список ключей соединения. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает список значений, соответствующих списку ключей. [`Any`](/sql-reference/data-types) - -**Примеры** - -**Пример использования** - -```sql title=Query -CREATE TABLE db_test.id_val(`id` UInt32, `val` UInt32) ENGINE = Join(ANY, LEFT, id); -INSERT INTO db_test.id_val VALUES (1,11)(2,12)(4,13); - -SELECT joinGet(db_test.id_val, 'val', toUInt32(1)); -``` - -```response title=Response -┌─joinGet(db_test.id_val, 'val', toUInt32(1))─┐ -│ 11 │ -└─────────────────────────────────────────────┘ -``` - -**Использование с таблицей текущей базы данных** - -```sql title=Query -USE db_test; -SELECT joinGet(id_val, 'val', toUInt32(2)); -``` - -```response title=Response -┌─joinGet(id_val, 'val', toUInt32(2))─┐ -│ 12 │ -└─────────────────────────────────────┘ -``` - -**Использование массивов в качестве ключей соединения (JOIN)** - -```sql title=Query -CREATE TABLE some_table (id1 UInt32, id2 UInt32, name String) ENGINE = Join(ANY, LEFT, id1, id2); -INSERT INTO some_table VALUES (1, 11, 'a') (2, 12, 'b') (3, 13, 'c'); - -SELECT joinGet(some_table, 'name', 1, 11); -``` - -```response title=Response -┌─joinGet(some_table, 'name', 1, 11)─┐ -│ a │ -└────────────────────────────────────┘ -``` - - -## joinGetOrNull - -Впервые появилась в версии v20.4 - -Позволяет извлекать данные из таблицы так же, как из словаря. -Получает данные из таблиц Join, используя указанный ключ соединения. -В отличие от [`joinGet`](#joinGet), возвращает `NULL`, если ключ отсутствует. - -:::note -Поддерживаются только таблицы, созданные с помощью выражения `ENGINE = Join(ANY, LEFT, )` [statement](/engines/table-engines/special/join). -::: - -**Синтаксис** - -```sql -joinGetOrNull(join_storage_table_name, value_column, join_keys) -``` - -**Аргументы** - -* `join_storage_table_name` — идентификатор, указывающий, где выполнять поиск. Поиск этого идентификатора выполняется в базе данных по умолчанию (см. параметр default_database в конфигурационном файле). Чтобы переопределить базу данных по умолчанию, используйте запрос `USE database_name` или укажите базу данных и таблицу через точку, например `database_name.table_name`. [`String`](/sql-reference/data-types/string) -* `value_column` — имя столбца таблицы, содержащего необходимые данные. [`const String`](/sql-reference/data-types/string) -* `join_keys` — список ключей соединения. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает список значений, соответствующих списку ключей, или `NULL`, если ключ не найден. [`Any`](/sql-reference/data-types) - -**Примеры** - -**Пример использования** - -```sql title=Query -CREATE TABLE db_test.id_val(`id` UInt32, `val` UInt32) ENGINE = Join(ANY, LEFT, id); -INSERT INTO db_test.id_val VALUES (1,11)(2,12)(4,13); - -SELECT joinGetOrNull(db_test.id_val, 'val', toUInt32(1)), joinGetOrNull(db_test.id_val, 'val', toUInt32(999)); -``` - -```response title=Response -┌─joinGetOrNull(db_test.id_val, 'val', toUInt32(1))─┬─joinGetOrNull(db_test.id_val, 'val', toUInt32(999))─┐ -│ 11 │ ᴺᵁᴸᴸ │ -└───────────────────────────────────────────────────┴─────────────────────────────────────────────────────┘ -``` - - -## lowCardinalityIndices - -Добавлена в: v18.12 - -Возвращает позицию значения в словаре столбца типа [LowCardinality](../data-types/lowcardinality.md). Нумерация позиций начинается с 1. Поскольку для LowCardinality используются словари на каждую часть данных, эта функция может возвращать разные позиции для одного и того же значения в разных частях. - -**Синтаксис** - -```sql -lowCardinalityIndices(col) -``` - -**Аргументы** - -* `col` — столбец низкой кардинальности. [`LowCardinality`](/sql-reference/data-types/lowcardinality) - -**Возвращаемое значение** - -Позиция значения в словаре текущей части. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Примеры использования** - -```sql title=Query -DROP TABLE IF EXISTS test; -CREATE TABLE test (s LowCardinality(String)) ENGINE = Memory; - --- создать две части: - -INSERT INTO test VALUES ('ab'), ('cd'), ('ab'), ('ab'), ('df'); -INSERT INTO test VALUES ('ef'), ('cd'), ('ab'), ('cd'), ('ef'); - -SELECT s, lowCardinalityIndices(s) FROM test; -``` - -```response title=Response -┌─s──┬─lowCardinalityIndices(s)─┐ -│ ab │ 1 │ -│ cd │ 2 │ -│ ab │ 1 │ -│ ab │ 1 │ -│ df │ 3 │ -└────┴──────────────────────────┘ -┌─s──┬─lowCardinalityIndices(s)─┐ -│ ef │ 1 │ -│ cd │ 2 │ -│ ab │ 3 │ -│ cd │ 2 │ -│ ef │ 1 │ -└────┴──────────────────────────┘ -``` - - -## lowCardinalityKeys - -Появилась в версии: v18.12 - -Возвращает значения словаря для столбца [LowCardinality](../data-types/lowcardinality.md). -Если блок меньше или больше размера словаря, результат будет обрезан или дополнен значениями по умолчанию. -Поскольку для LowCardinality используются словари на уровне частей, эта функция может возвращать разные словарные значения в разных частях. - -**Синтаксис** - -```sql -lowCardinalityKeys(col) -``` - -**Аргументы** - -* `col` — столбец с низкой кардинальностью. [`LowCardinality`](/sql-reference/data-types/lowcardinality) - -**Возвращаемое значение** - -Возвращает ключи словаря. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**lowCardinalityKeys** - -```sql title=Query -DROP TABLE IF EXISTS test; -CREATE TABLE test (s LowCardinality(String)) ENGINE = Memory; - --- создать две части: - -INSERT INTO test VALUES ('ab'), ('cd'), ('ab'), ('ab'), ('df'); -INSERT INTO test VALUES ('ef'), ('cd'), ('ab'), ('cd'), ('ef'); - -SELECT s, lowCardinalityKeys(s) FROM test; -``` - -```response title=Response -┌─s──┬─lowCardinalityKeys(s)─┐ -│ ef │ │ -│ cd │ ef │ -│ ab │ cd │ -│ cd │ ab │ -│ ef │ │ -└────┴───────────────────────┘ -┌─s──┬─lowCardinalityKeys(s)─┐ -│ ab │ │ -│ cd │ ab │ -│ ab │ cd │ -│ ab │ df │ -│ df │ │ -└────┴───────────────────────┘ -``` - - -## materialize - -Впервые появилась в: v1.1 - -Преобразует константу в полноценный столбец, содержащий одно значение. -Полноценные столбцы и константы по-разному представляются в памяти. -Функции, как правило, выполняют разный код для обычных и константных аргументов, хотя результат обычно должен быть одинаковым. -Эту функцию можно использовать для отладки такого поведения. - -**Синтаксис** - -```sql -materialize(x) -``` - -**Аргументы** - -* `x` — константа. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает столбец, полностью заполненный этим константным значением. [`Any`](/sql-reference/data-types) - -**Примеры** - -**Пример использования** - -```sql title=Query --- В примере ниже функция `countMatches` ожидает константу в качестве второго аргумента. --- Это поведение можно отладить с помощью функции `materialize`, которая преобразует константу в полный столбец, --- подтверждая, что функция выдаёт ошибку при передаче неконстантного аргумента. - -SELECT countMatches('foobarfoo', 'foo'); -SELECT countMatches('foobarfoo', materialize('foo')); -``` - -```response title=Response -2 -Код: 44. DB::Exception: Получено от localhost:9000. DB::Exception: Недопустимый тип аргумента #2 'pattern' функции countMatches, ожидается константа типа String, получен тип String -``` - - -## minSampleSizeContinuous - -Введена в версии: v23.10 - -Вычисляет минимально необходимый размер выборки для A/B‑теста, сравнивающего средние значения непрерывной метрики в двух выборках. - -Использует формулу, описанную в [этой статье](https://towardsdatascience.com/required-sample-size-for-a-b-testing-6f6608dd330a). -Предполагает равные размеры экспериментальной и контрольной групп. -Возвращает требуемый размер выборки для одной группы (т. е. общий размер выборки для всего эксперимента вдвое больше возвращаемого значения). -Также предполагается равенство дисперсий тестовой метрики в экспериментальной и контрольной группах. - -**Синтаксис** - -```sql -minSampleSizeContinuous(baseline, sigma, mde, power, alpha) -``` - -**Псевдонимы**: `minSampleSizeContinous` - -**Аргументы** - -* `baseline` — базовое значение метрики. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) -* `sigma` — базовое стандартное отклонение метрики. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) -* `mde` — минимальный различимый эффект (MDE) в процентах от базового значения (например, для базового значения 112.25 значение MDE 0.03 означает ожидаемое изменение до 112.25 ± 112.25*0.03). [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) -* `power` — требуемая статистическая мощность теста (1 - вероятность ошибки II рода). [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) -* `alpha` — требуемый уровень значимости теста (вероятность ошибки I рода). [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает именованный `Tuple` из трёх элементов: `minimum_sample_size`, `detect_range_lower` и `detect_range_upper`. Это, соответственно: требуемый размер выборки, нижняя граница диапазона значений, не обнаруживаемых при возвращённом требуемом размере выборки, вычисляемая как `baseline * (1 - mde)`, и верхняя граница диапазона значений, не обнаруживаемых при возвращённом требуемом размере выборки, вычисляемая как `baseline * (1 + mde)` (Float64). [`Tuple(Float64, Float64, Float64)`](/sql-reference/data-types/tuple) - -**Примеры** - -**minSampleSizeContinuous** - -```sql title=Query -SELECT minSampleSizeContinuous(112.25, 21.1, 0.03, 0.80, 0.05) AS sample_size -``` - -```response title=Response -(616.2931945826209,108.8825,115.6175) -``` - - -## minSampleSizeConversion - -Добавлена в: v22.6 - -Вычисляет минимально необходимый размер выборки для A/B‑теста, сравнивающего конверсии (доли) в двух выборках. - -Использует формулу, описанную в [этой статье](https://towardsdatascience.com/required-sample-size-for-a-b-testing-6f6608dd330a). Предполагается, что размеры экспериментальной и контрольной групп равны. Возвращает требуемый размер выборки для одной группы (т.е. размер выборки, необходимый для всего эксперимента, равен удвоенному возвращаемому значению). - -**Синтаксис** - -```sql -minSampleSizeConversion(baseline, mde, power, alpha) -``` - -**Аргументы** - -* `baseline` — Базовая конверсия. [`Float*`](/sql-reference/data-types/float) -* `mde` — Минимальный обнаружимый эффект (MDE) в процентных пунктах (например, для базовой конверсии 0.25 значение MDE 0.03 означает ожидаемое изменение до 0.25 ± 0.03). [`Float*`](/sql-reference/data-types/float) -* `power` — Требуемая статистическая мощность теста (1 - вероятность ошибки второго рода). [`Float*`](/sql-reference/data-types/float) -* `alpha` — Требуемый уровень значимости теста (вероятность ошибки первого рода). [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает именованный `Tuple` с 3 элементами: `minimum_sample_size`, `detect_range_lower`, `detect_range_upper`. Это, соответственно: требуемый размер выборки, нижняя граница диапазона значений, не обнаруживаемых при данном требуемом размере выборки и вычисляемая как `baseline - mde`, верхняя граница диапазона значений, не обнаруживаемых при данном требуемом размере выборки и вычисляемая как `baseline + mde`. [`Tuple(Float64, Float64, Float64)`](/sql-reference/data-types/tuple) - -**Примеры** - -**minSampleSizeConversion** - -```sql title=Query -SELECT minSampleSizeConversion(0.25, 0.03, 0.80, 0.05) AS sample_size -``` - -```response title=Response -(3396.077603219163,0.22,0.28) -``` - - -## neighbor - -Добавлена в версии: v20.1 - -Возвращает значение из столбца со смещением относительно текущей строки. -Эта функция устарела и подвержена ошибкам, так как оперирует физическим порядком блоков данных, который может не соответствовать логическому порядку, ожидаемому пользователями. -Рекомендуется вместо неё использовать полноценные оконные функции. - -Функцию можно включить, установив параметр `allow_deprecated_error_prone_window_functions = 1`. - -**Синтаксис** - -```sql -neighbor(column, offset[, default_value]) -``` - -**Аргументы** - -* `column` — Исходный столбец. [`Any`](/sql-reference/data-types) -* `offset` — Смещение относительно текущей строки. Положительные значения смещают выборку вперёд, отрицательные — назад. [`Integer`](/sql-reference/data-types/int-uint) -* `default_value` — Необязательный параметр. Значение, которое возвращается, если смещение выходит за пределы доступных данных. Если не указано, используется значение по умолчанию для типа столбца. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает значение по указанному смещению или значение по умолчанию, если смещение выходит за пределы доступных данных. [`Any`](/sql-reference/data-types) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT number, neighbor(number, 2) FROM system.numbers LIMIT 10; -``` - -```response title=Response -┌─number─┬─neighbor(number, 2)─┐ -│ 0 │ 2 │ -│ 1 │ 3 │ -│ 2 │ 4 │ -│ 3 │ 5 │ -│ 4 │ 6 │ -│ 5 │ 7 │ -│ 6 │ 8 │ -│ 7 │ 9 │ -│ 8 │ 0 │ -│ 9 │ 0 │ -└────────┴─────────────────────┘ -``` - -**Со значением по умолчанию** - -```sql title=Query -SELECT number, neighbor(number, 2, 999) FROM system.numbers LIMIT 10; -``` - -```response title=Response -┌─number─┬─neighbor(number, 2, 999)─┐ -│ 0 │ 2 │ -│ 1 │ 3 │ -│ 2 │ 4 │ -│ 3 │ 5 │ -│ 4 │ 6 │ -│ 5 │ 7 │ -│ 6 │ 8 │ -│ 7 │ 9 │ -│ 8 │ 999 │ -│ 9 │ 999 │ -└────────┴──────────────────────────┘ -``` - - -## nested - -Появилась в версии: v - -Эта функция используется внутри движка ClickHouse и не предназначена для прямого использования. - -Возвращает массив кортежей, сформированный из нескольких массивов. - -Первый аргумент должен быть константным массивом строк, определяющим имена результирующего кортежа типа `Tuple`. -Остальные аргументы должны быть массивами одинаковой длины. - -**Синтаксис** - -```sql -``` - -**Аргументы** - -* Нет. - -**Возвращаемое значение** - -**Примеры** - -**nested** - -```sql title=Query -SELECT nested(['keys', 'values'], ['key_1', 'key_2'], ['value_1','value_2']) -``` - -```response title=Response -``` - - -## normalizeQuery - -Появилась в версии: v20.8 - -Заменяет литералы, последовательности литералов и сложные псевдонимы (содержащие пробелы, более двух цифр или имеющие длину не менее 36 байт, например UUID) на плейсхолдер `?`. - -**Синтаксис** - -```sql -normalizeQuery(x) -``` - -**Аргументы** - -* `x` — последовательность символов. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает заданную последовательность символов с местозаполнителями. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT normalizeQuery('[1, 2, 3, x]') AS query -``` - -```response title=Response -┌─query────┐ -│ [?.., x] │ -└──────────┘ -``` - - -## normalizeQueryKeepNames - -Введено в версии v21.2 - -Заменяет литералы и последовательности литералов на заполнитель `?`, но не заменяет сложные псевдонимы (содержащие пробелы, более двух цифр или имеющие длину не менее 36 байт, например UUID). -Это помогает лучше анализировать логи сложных запросов. - -**Синтаксис** - -```sql -normalizeQueryKeepNames(x) -``` - -**Аргументы** - -* `x` — последовательность символов. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает заданную последовательность символов с местозаполнителями. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT normalizeQuery('SELECT 1 AS aComplexName123'), normalizeQueryKeepNames('SELECT 1 AS aComplexName123') -``` - -```response title=Response -┌─normalizeQuery('SELECT 1 AS aComplexName123')─┬─normalizeQueryKeepNames('SELECT 1 AS aComplexName123')─┐ -│ SELECT ? AS `?` │ SELECT ? AS aComplexName123 │ -└───────────────────────────────────────────────┴────────────────────────────────────────────────────────┘ -``` - - -## normalizedQueryHash - -Впервые появилась в версии v20.8. - -Возвращает одинаковые 64-битные хэш-значения без учёта значений литералов для похожих запросов. -Может быть полезна при анализе журналов запросов. - -**Синтаксис** - -```sql -normalizedQueryHash(x) -``` - -**Аргументы** - -* `x` — последовательность символов. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает 64-битное значение хеша. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT normalizedQueryHash('SELECT 1 AS `xyz`') != normalizedQueryHash('SELECT 1 AS `abc`') AS res -``` - -```response title=Response -┌─res─┐ -│ 1 │ -└─────┘ -``` - - -## normalizedQueryHashKeepNames - -Появилось в версии: v21.2 - -Как и [`normalizedQueryHash`](#normalizedQueryHash), возвращает одинаковые 64-битные хеш-значения без учета значений литералов для похожих запросов, но при этом не заменяет сложные алиасы (содержащие пробелы, более двух цифр или имеющие длину не менее 36 байт, например UUID) на заполнитель перед хешированием. -Может быть полезно при анализе журналов запросов. - -**Синтаксис** - -```sql -normalizedQueryHashKeepNames(x) -``` - -**Аргументы** - -* `x` — последовательность символов. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает 64-битное хеш-значение. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT normalizedQueryHash('SELECT 1 AS `xyz123`') != normalizedQueryHash('SELECT 1 AS `abc123`') AS normalizedQueryHash; -SELECT normalizedQueryHashKeepNames('SELECT 1 AS `xyz123`') != normalizedQueryHashKeepNames('SELECT 1 AS `abc123`') AS normalizedQueryHashKeepNames; -``` - -```response title=Response -┌─normalizedQueryHash─┐ -│ 0 │ -└─────────────────────┘ -┌─normalizedQueryHashKeepNames─┐ -│ 1 │ -└──────────────────────────────┘ -``` - - -## parseReadableSize - -Впервые появилась в: v24.6 - -Если в качестве аргумента передана строка, содержащая размер в байтах и единицу измерения `B`, `KiB`, `KB`, `MiB`, `MB` и т. д. (т. е. в формате [ISO/IEC 80000-13](https://en.wikipedia.org/wiki/ISO/IEC_80000) или с десятичной единицей объёма данных), эта функция возвращает соответствующее количество байт. -Если функция не может разобрать входное значение, она генерирует исключение. - -Обратными операциями для этой функции являются [`formatReadableSize`](#formatReadableSize) и [`formatReadableDecimalSize`](#formatReadableDecimalSize). - -**Синтаксис** - -```sql -parseReadableSize(x) -``` - -**Аргументы** - -* `x` — человекочитаемый размер в единицах ISO/IEC 80000-13 или в десятичных байтах. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает количество байт, округлённое в большую сторону до ближайшего целого числа. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT arrayJoin(['1 B', '1 KiB', '3 MB', '5.314 KiB']) AS readable_sizes, parseReadableSize(readable_sizes) AS sizes; -``` - -```response title=Response -┌─readable_sizes─┬───sizes─┐ -│ 1 B │ 1 │ -│ 1 KiB │ 1024 │ -│ 3 MB │ 3000000 │ -│ 5.314 KiB │ 5442 │ -└────────────────┴─────────┘ -``` - - -## parseReadableSizeOrNull - -Введена в версии: v24.6 - -Если в качестве аргумента передана строка, содержащая размер в байтах с единицей измерения `B`, `KiB`, `KB`, `MiB`, `MB` и т. д. (т. е. в формате [ISO/IEC 80000-13](https://en.wikipedia.org/wiki/ISO/IEC_80000) или с десятичной единицей байта), эта функция возвращает соответствующее количество байт. -Если функция не может распознать входное значение, она возвращает `NULL`. - -Обратными операциями к этой функции являются [`formatReadableSize`](#formatReadableSize) и [`formatReadableDecimalSize`](#formatReadableDecimalSize). - -**Синтаксис** - -```sql -parseReadableSizeOrNull(x) -``` - -**Аргументы** - -* `x` — размер в удобочитаемом формате с единицей измерения байтов по ISO/IEC 80000-13 или в десятичном формате. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает количество байтов, округлённое вверх до ближайшего целого числа, или `NULL`, если не удалось разобрать входное значение [`Nullable(UInt64)`](/sql-reference/data-types/nullable) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT arrayJoin(['1 B', '1 KiB', '3 MB', '5.314 KiB', 'invalid']) AS readable_sizes, parseReadableSizeOrNull(readable_sizes) AS sizes; -``` - -```response title=Response -┌─readable_sizes─┬───sizes─┐ -│ 1 B │ 1 │ -│ 1 KiB │ 1024 │ -│ 3 MB │ 3000000 │ -│ 5.314 KiB │ 5442 │ -│ invalid │ ᴺᵁᴸᴸ │ -└────────────────┴─────────┘ -``` - - -## parseReadableSizeOrZero - -Введена в версии: v24.6 - -Функция принимает строку, содержащую размер в байтах и единицу измерения `B`, `KiB`, `KB`, `MiB`, `MB` и т. д. (т. е. [ISO/IEC 80000-13](https://en.wikipedia.org/wiki/ISO/IEC_80000) или десятичную единицу измерения объёма данных), и возвращает соответствующее количество байт. -Если функция не может распознать входное значение, она возвращает `0`. - -Обратные операции к этой функции — [`formatReadableSize`](#formatReadableSize) и [`formatReadableDecimalSize`](#formatReadableDecimalSize). - -**Синтаксис** - -```sql -parseReadableSizeOrZero(x) -``` - -**Аргументы** - -* `x` — человекочитаемый размер с использованием единиц ISO/IEC 80000-13 или десятичных единиц объёма в байтах. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает количество байт, округлённое вверх до ближайшего целого числа, или `0`, если не удалось проанализировать входное значение. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT arrayJoin(['1 B', '1 KiB', '3 MB', '5.314 KiB', 'invalid']) AS readable_sizes, parseReadableSizeOrZero(readable_sizes) AS sizes; -``` - -```response title=Response -┌─readable_sizes─┬───sizes─┐ -│ 1 B │ 1 │ -│ 1 KiB │ 1024 │ -│ 3 MB │ 3000000 │ -│ 5.314 KiB │ 5442 │ -│ invalid │ 0 │ -└────────────────┴─────────┘ -``` - - -## parseTimeDelta - -Введена в версии: v22.7 - -Разбирает последовательность чисел, за которыми следует текст, похожий на обозначение единицы времени. - -Строка временного интервала использует следующие обозначения единиц времени: - -* `years`, `year`, `yr`, `y` -* `months`, `month`, `mo` -* `weeks`, `week`, `w` -* `days`, `day`, `d` -* `hours`, `hour`, `hr`, `h` -* `minutes`, `minute`, `min`, `m` -* `seconds`, `second`, `sec`, `s` -* `milliseconds`, `millisecond`, `millisec`, `ms` -* `microseconds`, `microsecond`, `microsec`, `μs`, `µs`, `us` -* `nanoseconds`, `nanosecond`, `nanosec`, `ns` - -Несколько единиц времени можно комбинировать, разделяя их символами (пробел, `;`, `-`, `+`, `,`, `:`). - -Длительность лет и месяцев задаётся приближённо: год — 365 дней, месяц — 30,5 дня. - -**Синтаксис** - -```sql -parseTimeDelta(timestr) -``` - -**Аргументы** - -* `timestr` — последовательность чисел, после которых следует нечто, напоминающее обозначение единицы времени. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Количество секунд. [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT parseTimeDelta('11s+22min') -``` - -```response title=Response -┌─parseTimeDelta('11s+22min')─┐ -│ 1331 │ -└─────────────────────────────┘ -``` - -**Составные единицы времени** - -```sql title=Query -SELECT parseTimeDelta('1yr2mo') -``` - -```response title=Response -┌─parseTimeDelta('1yr2mo')─┐ -│ 36806400 │ -└──────────────────────────┘ -``` - - -## partitionId - -Введена в версии: v21.4 - -Вычисляет [идентификатор партиции](../../engines/table-engines/mergetree-family/custom-partitioning-key.md). - -:::note -Эта функция работает медленно и не должна вызываться для большого количества строк. -::: - -**Синтаксис** - -```sql -partitionId(column1[, column2, ...]) -``` - -**Псевдонимы**: `partitionID` - -**Аргументы** - -* `column1, column2, ...` — Столбец (столбцы), для которого (которых) возвращается идентификатор партиции. - -**Возвращаемое значение** - -Возвращает идентификатор партиции, к которой принадлежит строка. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -DROP TABLE IF EXISTS tab; - -CREATE TABLE tab -( - i int, - j int -) -ENGINE = MergeTree -PARTITION BY i -ORDER BY tuple(); - -INSERT INTO tab VALUES (1, 1), (1, 2), (1, 3), (2, 4), (2, 5), (2, 6); - -SELECT i, j, partitionId(i), _partition_id FROM tab ORDER BY i, j; -``` - -```response title=Response -┌─i─┬─j─┬─partitionId(i)─┬─_partition_id─┐ -│ 1 │ 1 │ 1 │ 1 │ -│ 1 │ 2 │ 1 │ 1 │ -│ 1 │ 3 │ 1 │ 1 │ -│ 2 │ 4 │ 2 │ 2 │ -│ 2 │ 5 │ 2 │ 2 │ -│ 2 │ 6 │ 2 │ 2 │ -└───┴───┴────────────────┴───────────────┘ -``` - - -## queryID - -Добавлена в версии v21.9 - -Возвращает идентификатор текущего запроса. -Другие параметры запроса можно получить из поля `query_id` в таблице [`system.query_log`](../../operations/system-tables/query_log.md). - -В отличие от функции [`initialQueryID`](#initialQueryID), `queryID` может возвращать разные результаты на разных шардах. - -**Синтаксис** - -```sql -queryID() -``` - -**Псевдонимы**: `query_id` - -**Аргументы** - -* Нет. - -**Возвращаемое значение** - -Возвращает идентификатор текущего запроса. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -CREATE TABLE tmp (str String) ENGINE = Log; -INSERT INTO tmp (*) VALUES ('a'); -SELECT count(DISTINCT t) FROM (SELECT queryID() AS t FROM remote('127.0.0.{1..3}', currentDatabase(), 'tmp') GROUP BY queryID()); -``` - -```response title=Response -┌─count(DISTINCT t)─┐ -│ 3 │ -└───────────────────┘ -``` - - -## revision - -Впервые появилась в версии: v22.7 - -Возвращает текущую ревизию сервера ClickHouse. - -**Синтаксис** - -```sql -revision() -``` - -**Аргументы** - -* Нет аргументов. - -**Возвращаемое значение** - -Возвращает текущую ревизию сервера ClickHouse. [`UInt32`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT revision() -``` - -```response title=Response -┌─revision()─┐ -│ 54485 │ -└────────────┘ -``` - - -## rowNumberInAllBlocks - -Появилась в версии: v1.1 - -Возвращает уникальный номер для каждой обрабатываемой строки. - -**Синтаксис** - -```sql -rowNumberInAllBlocks() -``` - -**Аргументы** - -* Нет. - -**Возвращаемое значение** - -Возвращает порядковый номер строки в блоке данных, начиная с `0`. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT rowNumberInAllBlocks() -FROM -( - SELECT * - FROM system.numbers_mt - LIMIT 10 -) -SETTINGS max_block_size = 2 -``` - -```response title=Response -┌─rowNumberInAllBlocks()─┐ -│ 0 │ -│ 1 │ -└────────────────────────┘ -┌─rowNumberInAllBlocks()─┐ -│ 4 │ -│ 5 │ -└────────────────────────┘ -┌─rowNumberInAllBlocks()─┐ -│ 2 │ -│ 3 │ -└────────────────────────┘ -┌─rowNumberInAllBlocks()─┐ -│ 6 │ -│ 7 │ -└────────────────────────┘ -┌─rowNumberInAllBlocks()─┐ -│ 8 │ -│ 9 │ -└────────────────────────┘ -``` - - -## rowNumberInBlock - -Введена в версии: v1.1 - -Функция `rowNumberInBlock` для каждого [блока](../../development/architecture.md#block), который она обрабатывает, возвращает номер текущей строки. - -Нумерация начинается с 0 для каждого блока. - -**Синтаксис** - -```sql -rowNumberInBlock() -``` - -**Аргументы** - -* Нет. - -**Возвращаемое значение** - -Возвращает порядковый номер строки в блоке данных, начиная с `0`. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT rowNumberInBlock() -FROM -( - SELECT * - FROM system.numbers_mt - LIMIT 10 -) SETTINGS max_block_size = 2 -``` - -```response title=Response -┌─rowNumberInBlock()─┐ -│ 0 │ -│ 1 │ -└────────────────────┘ -┌─rowNumberInBlock()─┐ -│ 0 │ -│ 1 │ -└────────────────────┘ -┌─rowNumberInBlock()─┐ -│ 0 │ -│ 1 │ -└────────────────────┘ -┌─rowNumberInBlock()─┐ -│ 0 │ -│ 1 │ -└────────────────────┘ -┌─rowNumberInBlock()─┐ -│ 0 │ -│ 1 │ -└────────────────────┘ -``` - - -## runningAccumulate - -Введена в версии: v1.1 - -Накопливает состояния агрегатной функции для каждой строки блока данных. - -:::warning Устарело -Состояние сбрасывается для каждого нового блока данных. -Из‑за такого подверженного ошибкам поведения функция объявлена устаревшей, и вместо неё рекомендуется использовать [оконные функции](/sql-reference/window-functions). -Вы можете использовать настройку [`allow_deprecated_error_prone_window_functions`](/operations/settings/settings#allow_deprecated_error_prone_window_functions), чтобы разрешить использование этой функции. -::: - -**Синтаксис** - -```sql -runningAccumulate(agg_state[, grouping]) -``` - -**Аргументы** - -* `agg_state` — состояние агрегатной функции. [`AggregateFunction`](/sql-reference/data-types/aggregatefunction) -* `grouping` — необязательный параметр. Ключ группировки. Состояние функции сбрасывается, если значение `grouping` изменяется. Может иметь любой из поддерживаемых типов данных, для которых определён оператор равенства. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает накопленный результат для каждой строки. [`Any`](/sql-reference/data-types) - -**Примеры** - -**Пример использования с initializeAggregation** - -```sql title=Query -WITH initializeAggregation('sumState', number) AS one_row_sum_state -SELECT - number, - finalizeAggregation(one_row_sum_state) AS one_row_sum, - runningAccumulate(one_row_sum_state) AS cumulative_sum -FROM numbers(5); -``` - -```response title=Response -┌─number─┬─one_row_sum─┬─cumulative_sum─┐ -│ 0 │ 0 │ 0 │ -│ 1 │ 1 │ 1 │ -│ 2 │ 2 │ 3 │ -│ 3 │ 3 │ 6 │ -│ 4 │ 4 │ 10 │ -└────────┴─────────────┴────────────────┘ -``` - - -## runningConcurrency - -Введена в версии: v21.3 - -Вычисляет количество одновременно происходящих событий. -Каждое событие имеет время начала и время окончания. -Время начала включается в интервал события, время окончания — исключается. -Столбцы с временем начала и временем окончания должны иметь одинаковый тип данных. -Функция вычисляет общее количество активных (одновременных) событий для каждого времени начала события. - -:::tip Требования -События должны быть отсортированы по времени начала в порядке возрастания. -Если это требование нарушено, функция генерирует исключение. -Каждый блок данных обрабатывается отдельно. -Если события из разных блоков данных пересекаются по времени, они не могут быть обработаны корректно. -::: - -:::warning Устаревшая функция -Рекомендуется вместо неё использовать [оконные функции](/sql-reference/window-functions). -::: - -**Синтаксис** - -```sql -runningConcurrency(start, end) -``` - -**Аргументы** - -* `start` — столбец, содержащий время начала событий. [`Date`](/sql-reference/data-types/date) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) -* `end` — столбец, содержащий время окончания событий. [`Date`](/sql-reference/data-types/date) или [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) - -**Возвращаемое значение** - -Возвращает количество одновременно происходящих событий в момент начала каждого события. [`UInt32`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT start, runningConcurrency(start, end) FROM example_table; -``` - -```response title=Response -┌──────start─┬─runningConcurrency(start, end)─┐ -│ 2025-03-03 │ 1 │ -│ 2025-03-06 │ 2 │ -│ 2025-03-07 │ 3 │ -│ 2025-03-11 │ 2 │ -└────────────┴────────────────────────────────┘ -``` - - -## runningDifference - -Введена в версии: v1.1 - -Вычисляет разность между значениями двух последовательных строк в блоке данных. -Возвращает `0` для первой строки и разность с предыдущей строкой для всех последующих. - -:::warning Устарела -Возвращает разности только внутри текущего обрабатываемого блока данных. -Из-за такого поведения, подверженного ошибкам, функция считается устаревшей. -Рекомендуется вместо неё использовать [оконные функции](/sql-reference/window-functions). - -Вы можете использовать настройку [`allow_deprecated_error_prone_window_functions`](/operations/settings/settings#allow_deprecated_error_prone_window_functions), чтобы разрешить использование этой функции. -::: - -Результат функции зависит от обрабатываемых блоков данных и порядка данных в блоке. -Порядок строк при вычислении `runningDifference()` может отличаться от порядка строк, возвращаемых пользователю. -Чтобы этого избежать, вы можете создать подзапрос с [`ORDER BY`](../../sql-reference/statements/select/order-by.md) и вызвать функцию вне подзапроса. -Обратите внимание, что размер блока влияет на результат. -Внутреннее состояние `runningDifference` сбрасывается для каждого нового блока. - -**Синтаксис** - -```sql -runningDifference(x) -``` - -**Аргументы** - -* `x` — столбец, для которого вычисляется разность между соседними значениями. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает разность между последовательными значениями, для первой строки — 0. - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT - EventID, - EventTime, - runningDifference(EventTime) AS delta -FROM -( - SELECT - EventID, - EventTime - FROM events - WHERE EventDate = '2025-11-24' - ORDER BY EventTime ASC - LIMIT 5 -); -``` - -```response title=Response -┌─EventID─┬───────────EventTime─┬─delta─┐ -│ 1106 │ 2025-11-24 00:00:04 │ 0 │ -│ 1107 │ 2025-11-24 00:00:05 │ 1 │ -│ 1108 │ 2025-11-24 00:00:05 │ 0 │ -│ 1109 │ 2025-11-24 00:00:09 │ 4 │ -│ 1110 │ 2025-11-24 00:00:10 │ 1 │ -└─────────┴─────────────────────┴───────┘ -``` - -**Пример влияния размера блока** - -```sql title=Query -SELECT - number, - runningDifference(number + 1) AS diff -FROM numbers(100000) -WHERE diff != 1; -``` - -```response title=Response -┌─number─┬─diff─┐ -│ 0 │ 0 │ -└────────┴──────┘ -┌─number─┬─diff─┐ -│ 65536 │ 0 │ -└────────┴──────┘ -``` - - -## runningDifferenceStartingWithFirstValue - -Введена в версии: v1.1 - -Вычисляет разность между последовательными значениями строк в блоке данных, но в отличие от [`runningDifference`](#runningDifference) возвращает фактическое значение первой строки вместо `0`. - -:::warning Устарела -Возвращает разности только внутри текущего обрабатываемого блока данных. -Из-за потенциально ошибочного поведения функция признана устаревшей. -Рекомендуется вместо неё использовать [оконные функции](/sql-reference/window-functions). - -Вы можете использовать настройку `allow_deprecated_error_prone_window_functions`, чтобы разрешить использование этой функции. -::: - -**Синтаксис** - -```sql -runningDifferenceStartingWithFirstValue(x) -``` - -**Аргументы** - -* `x` — столбец, для которого вычисляется разность между последовательными значениями. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает разность между соседними значениями, а для первой строки — её собственное значение. [`Any`](/sql-reference/data-types) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT - number, - runningDifferenceStartingWithFirstValue(number) AS diff -FROM numbers(5); -``` - -```response title=Response -┌─number─┬─diff─┐ -│ 0 │ 0 │ -│ 1 │ 1 │ -│ 2 │ 1 │ -│ 3 │ 1 │ -│ 4 │ 1 │ -└────────┴──────┘ -``` - - -## serverUUID - -Добавлена в версии: v20.1 - -Возвращает случайный и уникальный UUID (v4), сгенерированный при первом запуске сервера. -UUID сохраняется, т.е. при втором, третьем и последующих запусках сервера возвращается тот же UUID. - -**Синтаксис** - -```sql -serverUUID() -``` - -**Аргументы** - -* Нет. - -**Возвращаемое значение** - -Возвращает случайный UUID сервера. [`UUID`](/sql-reference/data-types/uuid) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT serverUUID(); -``` - -```response title=Response -┌─serverUUID()─────────────────────────────┐ -│ 7ccc9260-000d-4d5c-a843-5459abaabb5f │ -└──────────────────────────────────────────┘ -``` - - -## shardCount - -Появилось в: v21.9 - -Возвращает общее число шардов для распределённого запроса. -Если запрос не является распределённым, то возвращается константное значение `0`. - -**Синтаксис** - -```sql -shardCount() -``` - -**Аргументы** - -* Нет аргументов. - -**Возвращаемое значение** - -Возвращает общее число шардов или `0`. [`UInt32`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query --- См. пример shardNum() выше, который также демонстрирует использование shardCount() -CREATE TABLE shard_count_example (dummy UInt8) -ENGINE=Distributed(test_cluster_two_shards_localhost, system, one, dummy); -SELECT shardCount() FROM shard_count_example; -``` - -```response title=Response -┌─shardCount()─┐ -│ 2 │ -│ 2 │ -└──────────────┘ -``` - - -## shardNum - -Добавлена в: v21.9 - -Возвращает индекс шарда, который обрабатывает часть данных в распределённом запросе. -Нумерация начинается с `1`. -Если запрос не является распределённым, возвращается константное значение `0`. - -**Синтаксис** - -```sql -shardNum() -``` - -**Аргументы** - -* Нет - -**Возвращаемое значение** - -Возвращает индекс шарда или константу `0`. [`UInt32`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -CREATE TABLE shard_num_example (dummy UInt8) -ENGINE=Distributed(test_cluster_two_shards_localhost, system, one, dummy); -SELECT dummy, shardNum(), shardCount() FROM shard_num_example; -``` - -```response title=Response -┌─dummy─┬─shardNum()─┬─shardCount()─┐ -│ 0 │ 1 │ 2 │ -│ 0 │ 2 │ 2 │ -└───────┴────────────┴──────────────┘ -``` - - -## showCertificate - -Добавлена в версии: v22.6 - -Отображает информацию о сертификате Secure Sockets Layer (SSL) текущего сервера, если он настроен. -Подробнее см. раздел [Настройка SSL-TLS](/guides/sre/configuring-ssl) о том, как настроить ClickHouse для использования сертификатов OpenSSL для проверки соединений. - -**Синтаксис** - -```sql -showCertificate() -``` - -**Аргументы** - -* Отсутствуют. - -**Возвращаемое значение** - -Возвращает карту пар «ключ–значение», содержащих сведения о настроенном SSL‑сертификате. [`Map(String, String)`](/sql-reference/data-types/map) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT showCertificate() FORMAT LineAsString; -``` - -```response title=Response -{'version':'1','serial_number':'2D9071D64530052D48308473922C7ADAFA85D6C5','signature_algo':'sha256WithRSAEncryption','issuer':'/CN=marsnet.local CA','not_before':'May 7 17:01:21 2024 GMT','not_after':'May 7 17:01:21 2025 GMT','subject':'/CN=chnode1','pkey_algo':'rsaEncryption'} -``` - - -## sleep - -Впервые появилась в версии v1.1 - -Приостанавливает выполнение запроса на указанное количество секунд. -Функция в первую очередь используется для тестирования и отладки. - -Функцию `sleep()` в целом не следует использовать в продуктивных средах, так как она может негативно влиять на производительность запросов и отзывчивость системы. -Однако она может быть полезна в следующих сценариях: - -1. **Тестирование**: При тестировании или бенчмаркинге ClickHouse может потребоваться имитировать задержки или вводить паузы, чтобы наблюдать, как система ведет себя при определённых условиях. -2. **Отладка**: Если нужно изучить состояние системы или выполнение запроса в определённый момент времени, можно использовать `sleep()` для введения паузы, что позволит проанализировать или собрать соответствующую информацию. -3. **Симуляция**: В некоторых случаях может потребоваться смоделировать реальные сценарии, где возникают задержки или паузы, например сетевую латентность или зависимости от внешних систем. - -:::warning -Важно использовать функцию `sleep()` взвешенно и только при необходимости, поскольку она может повлиять на общую производительность и отзывчивость вашей системы ClickHouse. -::: - -По соображениям безопасности функция может выполняться только в профиле пользователя по умолчанию (с включённым параметром `allow_sleep`). - -**Синтаксис** - -```sql -sleep(seconds) -``` - -**Аргументы** - -* `seconds` — Количество секунд, на которое нужно приостановить выполнение запроса, максимум на 3 секунды. Может быть значением с плавающей запятой для указания долей секунды. [`const UInt*`](/sql-reference/data-types/int-uint) или [`const Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает `0`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query --- Этот запрос будет приостановлен на 2 секунды перед завершением. --- В течение этого времени результаты не будут возвращены, и запрос будет выглядеть зависшим или не отвечающим. -SELECT sleep(2); -``` - -```response title=Response -┌─sleep(2)─┐ -│ 0 │ -└──────────┘ -1 row in set. Elapsed: 2.012 sec. -``` - - -## sleepEachRow - -Впервые представлена в: v1.1 - -Приостанавливает выполнение запроса на заданное количество секунд для каждой строки в результирующем наборе. - -Функция `sleepEachRow()` в основном используется для тестирования и отладки, аналогично функции [`sleep()`](#sleep). -Она позволяет моделировать задержки или добавлять паузы при обработке каждой строки, что может быть полезно в следующих сценариях: - -1. **Тестирование**: При тестировании или бенчмаркинге производительности ClickHouse в определённых условиях вы можете использовать `sleepEachRow()` для моделирования задержек или добавления пауз для каждой обрабатываемой строки. -2. **Отладка**: Если вам нужно проанализировать состояние системы или выполнение запроса для каждой обрабатываемой строки, вы можете использовать `sleepEachRow()` для добавления пауз, что позволит просматривать или собирать необходимую информацию. -3. **Моделирование**: В некоторых случаях может потребоваться смоделировать реальные сценарии, когда для каждой обрабатываемой строки возникают задержки или паузы, например, при работе с внешними системами или сетевыми задержками. - -:::warning -Как и в случае с функцией `sleep()`, важно использовать `sleepEachRow()` взвешенно и только при необходимости, так как она может существенно повлиять на общую производительность и отзывчивость системы ClickHouse, особенно при работе с большими результирующими наборами. -::: - -**Синтаксис** - -```sql -sleepEachRow(секунды) -``` - -**Аргументы** - -* `seconds` — количество секунд, на которое приостанавливается выполнение запроса для каждой строки в наборе результатов, но не более чем на 3 секунды. Может быть числом с плавающей запятой для указания долей секунды. [`const UInt*`](/sql-reference/data-types/int-uint) или [`const Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает `0` для каждой строки. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query --- Вывод будет задержан с паузой в 0,5 секунды между каждой строкой. -SELECT number, sleepEachRow(0.5) FROM system.numbers LIMIT 5; -``` - -```response title=Response -┌─number─┬─sleepEachRow(0.5)─┐ -│ 0 │ 0 │ -│ 1 │ 0 │ -│ 2 │ 0 │ -│ 3 │ 0 │ -│ 4 │ 0 │ -└────────┴───────────────────┘ -``` - - -## structureToCapnProtoSchema - -Впервые добавлена в: v - -Функция, которая преобразует структуру таблицы ClickHouse в схему формата CapnProto - -**Синтаксис** - -```sql -``` - -**Аргументы** - -* Нет. - -**Возвращаемое значение** - -**Примеры** - -**random** - -```sql title=Query -SELECT structureToCapnProtoSchema('s String, x UInt32', 'MessageName') format TSVRaw -``` - -```response title=Response -struct MessageName -{ - s @0 : Data; - x @1 : UInt32; -} -``` - - -## structureToProtobufSchema - -Впервые представлена в: v23.8 - -Преобразует структуру таблицы ClickHouse в схему формата Protobuf. - -Эта функция принимает определение структуры таблицы ClickHouse и преобразует его в определение схемы Protocol Buffers (Protobuf) -в синтаксисе proto3. Это полезно для генерации Protobuf-схем, которые соответствуют структурам ваших таблиц ClickHouse -для обмена данными. - -**Синтаксис** - -```sql -structureToProtobufSchema(structure, message_name) -``` - -**Аргументы** - -* `structure` — определение структуры таблицы ClickHouse в виде строки (например, 'column1 Type1, column2 Type2'). [`String`](/sql-reference/data-types/string) -* `message_name` — имя типа Protobuf‑сообщения в сгенерированной схеме. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает определение схемы Protobuf в синтаксисе proto3, которое соответствует исходной структуре ClickHouse. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Преобразование структуры ClickHouse в схему Protobuf** - -```sql title=Query -SELECT structureToProtobufSchema('s String, x UInt32', 'MessageName') FORMAT TSVRaw; -``` - -```response title=Response -syntax = "proto3"; - -message MessageName -{ - bytes s = 1; - uint32 x = 2; -} -``` - - -## tcpPort - -Появилась в версии: v20.12 - -Возвращает номер TCP-порта [нативного интерфейса](../../interfaces/tcp.md), который прослушивает сервер. -Если выполняется в контексте распределённой таблицы, эта функция формирует обычный столбец со значениями, относящимися к каждому шарду. -В противном случае она возвращает константное значение. - -**Синтаксис** - -```sql -tcpPort() -``` - -**Аргументы** - -* Отсутствуют. - -**Возвращаемое значение** - -Возвращает номер TCP-порта. [`UInt16`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT tcpPort() -``` - -```response title=Response -┌─tcpPort()─┐ -│ 9000 │ -└───────────┘ -``` - - -## throwIf - -Добавлено в: v1.1 - -Генерирует исключение, если аргумент `x` равен `true`. -Чтобы использовать аргумент `error_code`, необходимо включить параметр конфигурации `allow_custom_error_code_in_throw`. - -**Синтаксис** - -```sql -throwIf(x[, message[, error_code]]) -``` - -**Аргументы** - -* `x` — условие для проверки. [`Any`](/sql-reference/data-types) -* `message` — необязательный параметр. Пользовательское сообщение об ошибке. [`const String`](/sql-reference/data-types/string) -* `error_code` — необязательный параметр. Пользовательский код ошибки. [`const Int8/16/32`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает `0`, если условие ложно, и генерирует исключение, если условие истинно. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT throwIf(number = 3, 'Too many') FROM numbers(10); -``` - -```response title=Response -↙ Progress: 0.00 rows, 0.00 B (0.00 rows/s., 0.00 B/s.) Получено исключение от сервера (версия 19.14.1): -Code: 395. DB::Exception: Received from localhost:9000. DB::Exception: Too many. -``` - - -## toColumnTypeName - -Добавлено в версии: v1.1 - -Возвращает внутреннее имя типа данных переданного значения. -В отличие от функции [`toTypeName`](#toTypeName), возвращаемый тип данных потенциально включает внутренние обёртки для столбцов, такие как `Const` и `LowCardinality`. - -**Синтаксис** - -```sql -toColumnTypeName(value) -``` - -**Аргументы** - -* `value` — Значение, для которого нужно вернуть внутренний тип данных. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает внутренний тип данных, используемый для представления этого значения. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT toColumnTypeName(CAST('2025-01-01 01:02:03' AS DateTime)); -``` - -```response title=Response -┌─toColumnTypeName(CAST('2025-01-01 01:02:03', 'DateTime'))─┐ -│ Const(UInt32) │ -└───────────────────────────────────────────────────────────┘ -``` - - -## toTypeName - -Введена в версии v1.1 - -Возвращает имя типа переданного аргумента. -Если передан `NULL`, функция возвращает тип `Nullable(Nothing)`, который соответствует внутреннему представлению `NULL` в ClickHouse. - -**Синтаксис** - -```sql -toTypeName(x) -``` - -**Аргументы** - -* `x` — Значение произвольного типа. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает имя типа данных переданного значения. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT toTypeName(123) -``` - -```response title=Response -┌─toTypeName(123)─┐ -│ UInt8 │ -└─────────────────┘ -``` - - -## transactionID - -Введена в версии v22.6 - - - - - -Возвращает идентификатор транзакции. - -:::note -Эта функция является частью набора экспериментальных возможностей. -Включите экспериментальную поддержку транзакций, добавив этот параметр в вашу [конфигурацию](/operations/configuration-files): - -```xml - - 1 - -``` - -Для получения дополнительной информации см. страницу [Поддержка транзакций (ACID)](/guides/developer/transactional#transactions-commit-and-rollback). -::: - -**Синтаксис** - -````sql -## transactionID {#transactionID} - -Добавлено в версии: v22.6 - - - - - -Возвращает идентификатор транзакции. - -:::note -Эта функция является частью экспериментального набора возможностей. -Включите экспериментальную поддержку транзакций, добавив эту настройку в ваш [конфигурационный файл](/operations/configuration-files): - -```xml - - 1 - -``` - -Дополнительную информацию см. на странице [Поддержка транзакций (ACID)](/guides/developer/transactional#transactions-commit-and-rollback). -::: - - -**Синтаксис** - -```sql -transactionID() -``` - -**Аргументы** - -- Отсутствуют. - -**Возвращаемое значение** - -Возвращает кортеж, состоящий из `start_csn`, `local_tid` и `host_id`. -- `start_csn`: Глобальный порядковый номер, самая новая временная метка фиксации, которая была видна на момент начала этой транзакции. -- `local_tid`: Локальный порядковый номер, уникальный для каждой транзакции, запущенной этим хостом в рамках конкретного start_csn. -- `host_id`: UUID хоста, запустившего эту транзакцию. - [`Tuple(UInt64, UInt64, UUID)`](/sql-reference/data-types/tuple) - -**Примеры** - -**Пример использования** - -```sql title=Запрос -BEGIN TRANSACTION; -SELECT transactionID(); -ROLLBACK; -``` - -```response title=Результат -┌─transactionID()────────────────────────────────┐ -│ (32,34,'0ee8b069-f2bb-4748-9eae-069c85b5252b') │ -└────────────────────────────────────────────────┘ -``` -```` - -**Аргументы** - -* Отсутствуют. - -**Возвращаемое значение** - -Возвращает кортеж, состоящий из `start_csn`, `local_tid` и `host_id`. - -* `start_csn`: глобальный последовательный номер, последняя метка времени фиксации, которая была видна на момент начала этой транзакции. -* `local_tid`: локальный последовательный номер, уникальный для каждой транзакции, запущенной этим хостом в пределах конкретного значения start_csn. -* `host_id`: UUID хоста, который инициировал эту транзакцию. - [`Tuple(UInt64, UInt64, UUID)`](/sql-reference/data-types/tuple) - -**Примеры** - -**Пример использования** - -```sql title=Query -BEGIN TRANSACTION; -SELECT transactionID(); -ROLLBACK; -``` - -```response title=Response -┌─transactionID()────────────────────────────────┐ -│ (32,34,'0ee8b069-f2bb-4748-9eae-069c85b5252b') │ -└────────────────────────────────────────────────┘ -``` - - -## transactionLatestSnapshot - -Добавлена в версии: v22.6 - - - - - -Возвращает самый свежий снимок (Commit Sequence Number) [транзакции](/guides/developer/transactional#transactions-commit-and-rollback), доступный для чтения. - -:::note -Эта функция является частью набора экспериментальных возможностей. Включите экспериментальную поддержку транзакций, добавив этот параметр в конфигурацию: - -```xml - - 1 - -``` - -Для получения дополнительной информации см. страницу [Поддержка транзакций (ACID)](/guides/developer/transactional#transactions-commit-and-rollback). -::: - -**Синтаксис** - -```sql -transactionLatestSnapshot() -``` - -**Аргументы** - -* Отсутствуют. - -**Возвращаемое значение** - -Возвращает последний снимок (CSN) транзакции. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -BEGIN TRANSACTION; -SELECT transactionLatestSnapshot(); -ROLLBACK; -``` - -```response title=Response -┌─transactionLatestSnapshot()─┐ -│ 32 │ -└─────────────────────────────┘ -``` - - -## transactionOldestSnapshot - -Добавлена в: v22.6 - - - - - -Возвращает самый старый снимок (Commit Sequence Number), который виден для некоторой выполняющейся [транзакции](/guides/developer/transactional#transactions-commit-and-rollback). - -:::note -Эта функция является частью набора экспериментальных возможностей. Включите экспериментальную поддержку транзакций, добавив этот параметр в конфигурацию: - -```xml - - 1 - -``` - -Для получения дополнительной информации см. раздел [Поддержка транзакций (ACID)](/guides/developer/transactional#transactions-commit-and-rollback). -::: - -**Синтаксис** - -```sql -transactionOldestSnapshot() -``` - -**Аргументы** - -* Нет. - -**Возвращаемое значение** - -Возвращает самый ранний снимок транзакции (CSN). [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -BEGIN TRANSACTION; -SELECT transactionOldestSnapshot(); -ROLLBACK; -``` - -```response title=Response -┌─transactionOldestSnapshot()─┐ -│ 32 │ -└─────────────────────────────┘ -``` - - -## transform - -Введена в: v1.1 - -Преобразует значение в соответствии с явно заданным отображением одних элементов в другие. - -Существует два варианта этой функции: - -* `transform(x, array_from, array_to, default)` — преобразует `x`, используя массивы сопоставления со значением по умолчанию для элементов без соответствия -* `transform(x, array_from, array_to)` — выполняет то же преобразование, но возвращает исходное `x`, если соответствие не найдено - -Функция ищет `x` в `array_from` и возвращает соответствующий элемент из `array_to` с тем же индексом. -Если `x` не найден в `array_from`, она возвращает либо значение `default` (четырёхпараметрная версия), либо исходное `x` (трёхпараметрная версия). -Если в `array_from` существует несколько совпадающих элементов, возвращается элемент, соответствующий первому совпадению. - -Требования: - -* `array_from` и `array_to` должны иметь одинаковое количество элементов -* Для четырёхпараметрной версии: `transform(T, Array(T), Array(U), U) -> U`, где `T` и `U` могут быть разными совместимыми типами -* Для трёхпараметрной версии: `transform(T, Array(T), Array(T)) -> T`, где все типы должны совпадать - -**Синтаксис** - -```sql -transform(x, array_from, array_to[, default]) -``` - -**Аргументы** - -* `x` — Значение для преобразования. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Decimal`](/sql-reference/data-types/decimal) или [`Float*`](/sql-reference/data-types/float) или [`String`](/sql-reference/data-types/string) или [`Date`](/sql-reference/data-types/date) или [`DateTime`](/sql-reference/data-types/datetime) -* `array_from` — Константный массив значений, в котором выполняется поиск совпадений. [`Array((U)Int*)`](/sql-reference/data-types/array) или [`Array(Decimal)`](/sql-reference/data-types/array) или [`Array(Float*)`](/sql-reference/data-types/array) или [`Array(String)`](/sql-reference/data-types/array) или [`Array(Date)`](/sql-reference/data-types/array) или [`Array(DateTime)`](/sql-reference/data-types/array) -* `array_to` — Константный массив значений, возвращаемых для соответствующих совпадений в `array_from`. [`Array((U)Int*)`](/sql-reference/data-types/array) или [`Array(Decimal)`](/sql-reference/data-types/array) или [`Array(Float*)`](/sql-reference/data-types/array) или [`Array(String)`](/sql-reference/data-types/array) или [`Array(Date)`](/sql-reference/data-types/array) или [`Array(DateTime)`](/sql-reference/data-types/array) -* `default` — Необязательный аргумент. Значение, которое возвращается, если `x` не найден в `array_from`. Если не задан, возвращается `x` без изменений. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Decimal`](/sql-reference/data-types/decimal) или [`Float*`](/sql-reference/data-types/float) или [`String`](/sql-reference/data-types/string) или [`Date`](/sql-reference/data-types/date) или [`DateTime`](/sql-reference/data-types/datetime) - -**Возвращаемое значение** - -Возвращает соответствующее значение из `array_to`, если `x` совпадает с элементом в `array_from`, иначе возвращает `default` (если задан) или `x` (если `default` не задан). [`Any`](/sql-reference/data-types) - -**Примеры** - -**transform(T, Array(T), Array(U), U) -> U** - -```sql title=Query -SELECT -transform(SearchEngineID, [2, 3], ['Яндекс', 'Google'], 'Прочее') AS title, -count() AS c -FROM test.hits -WHERE SearchEngineID != 0 -GROUP BY title -ORDER BY c DESC -``` - -```response title=Response -┌─title─────┬──────c─┐ -│ Yandex │ 498635 │ -│ Google │ 229872 │ -│ Прочее │ 104472 │ -└───────────┴────────┘ -``` - -**transform(T, Array(T), Array(T)) -> T** - -```sql title=Query -SELECT -transform(domain(Referer), ['yandex.ru', 'google.ru', 'vkontakte.ru'], ['www.yandex', 'example.com', 'vk.com']) AS s, count() AS c -FROM test.hits -GROUP BY domain(Referer) -ORDER BY count() DESC -LIMIT 10 -``` - - -```response title=Response -┌─s──────────────┬───────c─┐ -│ │ 2906259 │ -│ www.yandex │ 867767 │ -│ ███████.ru │ 313599 │ -│ mail.yandex.ru │ 107147 │ -│ ██████.ru │ 100355 │ -│ █████████.ru │ 65040 │ -│ news.yandex.ru │ 64515 │ -│ ██████.net │ 59141 │ -│ example.com │ 57316 │ -└────────────────┴─────────┘ -``` - - -## uniqThetaIntersect - -Добавлена в версии: v22.9 - -Два объекта uniqThetaSketch используются для вычисления пересечения (операция над множествами ∩); результатом является новый uniqThetaSketch. - -**Синтаксис** - -```sql -uniqThetaIntersect(uniqThetaSketch,uniqThetaSketch) -``` - -**Аргументы** - -* `uniqThetaSketch` — объект типа uniqThetaSketch. [`Tuple`](/sql-reference/data-types/tuple) или [`Array`](/sql-reference/data-types/array) или [`Date`](/sql-reference/data-types/date) или [`DateTime`](/sql-reference/data-types/datetime) или [`String`](/sql-reference/data-types/string) или [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Новый объект uniqThetaSketch, содержащий результат пересечения. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT finalizeAggregation(uniqThetaIntersect(a, b)) AS a_intersect_b, finalizeAggregation(a) AS a_cardinality, finalizeAggregation(b) AS b_cardinality -FROM -(SELECT arrayReduce('uniqThetaState', [1, 2]) AS a, arrayReduce('uniqThetaState', [2, 3, 4]) AS b); -``` - -```response title=Response -┌─a_intersect_b─┬─a_cardinality─┬─b_cardinality─┐ -│ 1 │ 2 │ 3 │ -└───────────────┴───────────────┴───────────────┘ -``` - - -## uniqThetaNot - -Впервые появился в версии: v22.9 - -Два объекта uniqThetaSketch для выполнения операции над множествами a_not_b (разность множеств); результатом является новый uniqThetaSketch. - -**Синтаксис** - -```sql -uniqThetaNot(uniqThetaSketch,uniqThetaSketch) -``` - -**Аргументы** - -* `uniqThetaSketch` — объект uniqThetaSketch. [`Tuple`](/sql-reference/data-types/tuple) или [`Array`](/sql-reference/data-types/array) или [`Date`](/sql-reference/data-types/date) или [`DateTime`](/sql-reference/data-types/datetime) или [`String`](/sql-reference/data-types/string) или [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Возвращает новый uniqThetaSketch, содержащий результат операции a_not_b. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT finalizeAggregation(uniqThetaNot(a, b)) AS a_not_b, finalizeAggregation(a) AS a_cardinality, finalizeAggregation(b) AS b_cardinality -FROM -(SELECT arrayReduce('uniqThetaState', [2, 3, 4]) AS a, arrayReduce('uniqThetaState', [1, 2]) AS b); -``` - -```response title=Response -┌─a_not_b─┬─a_cardinality─┬─b_cardinality─┐ -│ 2 │ 3 │ 2 │ -└─────────┴───────────────┴───────────────┘ -``` - - -## uniqThetaUnion - -Добавлено в: v22.9 - -Объединяет два объекта uniqThetaSketch (операция объединения множеств ∪); результатом является новый uniqThetaSketch. - -**Синтаксис** - -```sql -uniqThetaUnion(uniqThetaSketch,uniqThetaSketch) -``` - -**Аргументы** - -* `uniqThetaSketch` — объект типа uniqThetaSketch. [`Tuple`](/sql-reference/data-types/tuple) или [`Array`](/sql-reference/data-types/array) или [`Date`](/sql-reference/data-types/date) или [`DateTime`](/sql-reference/data-types/datetime) или [`String`](/sql-reference/data-types/string) или [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Возвращает новый объект uniqThetaSketch, содержащий результат объединения. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT finalizeAggregation(uniqThetaUnion(a, b)) AS a_union_b, finalizeAggregation(a) AS a_cardinality, finalizeAggregation(b) AS b_cardinality -FROM -(SELECT arrayReduce('uniqThetaState', [1, 2]) AS a, arrayReduce('uniqThetaState', [2, 3, 4]) AS b); -``` - -```response title=Response -┌─a_union_b─┬─a_cardinality─┬─b_cardinality─┐ -│ 4 │ 2 │ 3 │ -└───────────┴───────────────┴───────────────┘ -``` - - -## uptime - -Введена в версии v1.1 - -Возвращает время непрерывной работы сервера в секундах. -Если выполняется в контексте распределённой таблицы, эта функция создаёт обычный столбец со значениями для каждого шарда. -В противном случае возвращает константное значение. - -**Синтаксис** - -```sql -uptime() -``` - -**Аргументы** - -* Нет. - -**Возвращаемое значение** - -Возвращает время работы сервера в секундах. [`UInt32`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT uptime() AS Uptime -``` - -```response title=Response -┌─Время работы─┐ -│ 55867 │ -└──────────────┘ -``` - - -## variantElement - -Добавлена в: v25.2 - -Извлекает столбец указанного типа из столбца `Variant`. - -**Синтаксис** - -```sql -variantElement(variant, type_name[, default_value]) -``` - -**Аргументы** - -* `variant` — Столбец типа Variant. [`Variant`](/sql-reference/data-types/variant) -* `type_name` — Имя типа варианта, который нужно извлечь. [`String`](/sql-reference/data-types/string) -* `default_value` — Значение по умолчанию, которое будет использовано, если в `variant` нет варианта с указанным типом. Может быть любого типа. Необязательный параметр. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает столбец с указанным типом варианта, извлечённым из столбца типа Variant. [`Any`](/sql-reference/data-types) - -**Примеры** - -**Пример использования** - -```sql title=Query -CREATE TABLE test (v Variant(UInt64, String, Array(UInt64))) ENGINE = Memory; -INSERT INTO test VALUES (NULL), (42), ('Hello, World!'), ([1, 2, 3]); -SELECT v, variantElement(v, 'String'), variantElement(v, 'UInt64'), variantElement(v, 'Array(UInt64)') FROM test; -``` - -```response title=Response -┌─v─────────────┬─variantElement(v, 'String')─┬─variantElement(v, 'UInt64')─┬─variantElement(v, 'Array(UInt64)')─┐ -│ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ [] │ -│ 42 │ ᴺᵁᴸᴸ │ 42 │ [] │ -│ Hello, World! │ Hello, World! │ ᴺᵁᴸᴸ │ [] │ -│ [1,2,3] │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ [1,2,3] │ -└───────────────┴─────────────────────────────┴─────────────────────────────┴────────────────────────────────────┘ -``` - - -## variantType - -Добавлено в версии v24.2 - -Возвращает имя вариантного типа для каждой строки столбца `Variant`. Если строка содержит NULL, для неё возвращается 'None'. - -**Синтаксис** - -```sql -variantType(variant) -``` - -**Аргументы** - -* `variant` — столбец типа Variant. [`Variant`](/sql-reference/data-types/variant) - -**Возвращаемое значение** - -Возвращает столбец типа Enum с названием варианта для каждой строки. [`Enum`](/sql-reference/data-types/enum) - -**Примеры** - -**Пример использования** - -```sql title=Query -CREATE TABLE test (v Variant(UInt64, String, Array(UInt64))) ENGINE = Memory; -INSERT INTO test VALUES (NULL), (42), ('Hello, World!'), ([1, 2, 3]); -SELECT variantType(v) FROM test; -``` - -```response title=Response -┌─variantType(v)─┐ -│ None │ -│ UInt64 │ -│ String │ -│ Array(UInt64) │ -└────────────────┘ -``` - - -## version - -Появилась в: v1.1 - -Возвращает текущую версию ClickHouse в виде строки формата: `major_version.minor_version.patch_version.number_of_commits_since_the_previous_stable_release`. -Если выполняется в контексте распределённой таблицы, эта функция генерирует обычный столбец со значениями, соответствующими каждому шарду. -В противном случае она возвращает константное значение. - -**Синтаксис** - -```sql -version() -``` - -**Аргументы** - -* Нет. - -**Возвращаемое значение** - -Возвращает текущую версию ClickHouse. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT version() -``` - -```response title=Response -┌─version()─┐ -│ 24.2.1.1 │ -└───────────┘ -``` - - -## visibleWidth - -Введена в версии v1.1 - -Вычисляет приблизительную ширину при выводе значений в консоль в текстовом формате с разделителями табуляции. -Эта функция используется системой для реализации Pretty-форматов. -`NULL` представляется как строка, соответствующая `NULL` в Pretty-форматах. - -**Синтаксис** - -```sql -visibleWidth(x) -``` - -**Аргументы** - -* `x` — значение любого типа данных. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает приблизительную ширину значения при выводе в текстовом формате. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Вычисление видимой ширины значения NULL** - -```sql title=Query -SELECT visibleWidth(NULL) -``` - -```response title=Response -┌─visibleWidth(NULL)─┐ -│ 4 │ -└────────────────────┘ -``` - - -## zookeeperSessionUptime - -Добавлено в: v21.11 - -Возвращает время непрерывной работы текущей сессии ZooKeeper в секундах. - -**Синтаксис** - -```sql -zookeeperSessionUptime() -``` - -**Аргументы** - -* Нет. - -**Возвращаемое значение** - -Возвращает время работы текущей сессии ZooKeeper в секундах. [`UInt32`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT zookeeperSessionUptime(); -``` - -```response title=Response -┌─zookeeperSessionUptime()─┐ -│ 286 │ -└──────────────────────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/random-functions.md b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/random-functions.md index 98232227905..84dad41afbc 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/random-functions.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/random-functions.md @@ -1,16 +1,14 @@ --- -description: 'Документация по функциям, используемым для генерации случайных чисел' +description: 'Документация по функциям генерации случайных чисел' sidebar_label: 'Случайное число' slug: /sql-reference/functions/random-functions -title: 'Функции для генерации случайных чисел' +title: 'Функции генерации случайных чисел' doc_type: 'reference' --- - - # Функции для генерации случайных чисел -Все функции в этом разделе принимают ноль или один аргумент. Единственное назначение аргумента (если он передан) — предотвратить [устранение общих подвыражений](/sql-reference/functions/overview#common-subexpression-elimination), чтобы два разных вызова одной и той же случайной функции в пределах одной строки возвращали разные случайные значения. +Все функции в этом разделе принимают либо ноль, либо один аргумент. Единственное назначение аргумента (если он передан) — предотвратить [устранение общих подвыражений](/sql-reference/functions/overview#common-subexpression-elimination), чтобы два разных вычисления в пределах одной строки одной и той же функции генерации случайных чисел возвращали разные случайные значения. Связанные материалы @@ -18,814 +16,19 @@ doc_type: 'reference' * Блог: [Генерация случайных данных в ClickHouse](https://clickhouse.com/blog/generating-random-test-distribution-data-for-clickhouse) :::note -Случайные числа генерируются некриптографическими алгоритмами. +Случайные числа генерируются с использованием некриптографических алгоритмов. ::: :::note -Документация ниже сгенерирована из системной таблицы `system.functions`. +Приведённая ниже документация сгенерирована из системной таблицы `system.functions`. ::: {/* - Внутреннее содержимое следующих тегов при сборке фреймворка документации + Внутреннее содержимое расположенных ниже тегов во время сборки фреймворка документации заменяется документацией, сгенерированной из system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. См.: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## fuzzBits - -Появилась в версии v20.5 - -Инвертирует биты входной строки `s` с вероятностью `p` для каждого бита. - -**Синтаксис** - -```sql -fuzzBits(s, p) -``` - -**Аргументы** - -* `s` — `String` или `FixedString`, над которыми выполняется битовое зашумление [`String`](/sql-reference/data-types/string) или [`FixedString`](/sql-reference/data-types/fixedstring) -* `p` — вероятность инверсии каждого бита как число с плавающей запятой в диапазоне от `0.0` до `1.0` [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает зашумлённую строку того же типа, что и `s`. [`String`](/sql-reference/data-types/string) или [`FixedString`](/sql-reference/data-types/fixedstring) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT fuzzBits(materialize('abacaba'), 0.1) -FROM numbers(3) -``` - -```response title=Response -┌─fuzzBits(materialize('abacaba'), 0.1)─┐ -│ abaaaja │ -│ a*cjab+ │ -│ aeca2A │ -└───────────────────────────────────────┘ -``` - - -## rand - -Впервые добавлена в: v1.1 - -Возвращает случайное число типа `UInt32` с равномерным распределением. - -Использует линейный конгруэнтный генератор с начальным состоянием, полученным из системы. Это означает, что, хотя результат выглядит случайным, он не является по-настоящему случайным и может быть предсказуем, если известно начальное состояние. -В сценариях, где критична истинная случайность, рассмотрите использование альтернативных методов, таких как системные вызовы или интеграция с внешними библиотеками. - -**Синтаксис** - -```sql -rand([x]) -``` - -**Псевдонимы**: `rand32` - -**Аргументы** - -* `x` — необязательный аргумент, который игнорируется. Единственная цель этого аргумента — предотвратить [устранение общих подвыражений](/sql-reference/functions/overview#common-subexpression-elimination), когда один и тот же вызов функции используется несколько раз в запросе. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает случайное число типа `UInt32`. [`UInt32`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT rand(); -``` - -```response title=Response -1569354847 -``` - - -## rand64 - -Впервые появилась в: v1.1 - -Возвращает случайное число типа `UInt64` с равномерным распределением. - -Использует линейный конгруэнтный генератор с начальным состоянием, полученным из системы. Это означает, что, хотя результат выглядит случайным, он не является по-настоящему случайным и может быть предсказуем, если начальное состояние известно. -В сценариях, где критична истинная случайность, используйте альтернативные методы, такие как системные вызовы или интеграция с внешними библиотеками. - -**Синтаксис** - -```sql -rand64([x]) -``` - -**Аргументы** - -* `x` — необязательный аргумент, значение игнорируется. Единственная цель аргумента — предотвратить [устранение общих подвыражений](/sql-reference/functions/overview#common-subexpression-elimination), когда один и тот же вызов функции используется несколько раз в запросе. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает случайное число типа UInt64 с равномерным распределением. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT rand64(); -``` - -```response title=Response -15030268859237645412 -``` - - -## randBernoulli - -Появилась в версии: v22.10 - -Возвращает случайное число типа Float64, сгенерированное по [распределению Бернулли](https://en.wikipedia.org/wiki/Bernoulli_distribution). - -**Синтаксис** - -```sql -randBernoulli(probability[, x]) -``` - -**Аргументы** - -* `probability` — Вероятность успеха в виде значения в диапазоне от `0` до `1`. [`Float64`](/sql-reference/data-types/float) -* `x` — Необязательный аргумент, который игнорируется. Его единственная цель — предотвратить [устранение общих подвыражений](/sql-reference/functions/overview#common-subexpression-elimination), когда один и тот же вызов функции используется несколько раз в запросе. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает случайное число типа Float64, сгенерированное согласно указанному распределению Бернулли. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT randBernoulli(.75) FROM numbers(5) -``` - -```response title=Response -┌─randBernoulli(0.75)─┐ -│ 1 │ -│ 1 │ -│ 0 │ -│ 1 │ -│ 1 │ -└─────────────────────┘ -``` - - -## randBinomial - -Добавлена в версии v22.10 - -Возвращает случайное число типа Float64, выбранное из [биномиального распределения](https://en.wikipedia.org/wiki/Binomial_distribution). - -**Синтаксис** - -```sql -randBinomial(experiments, probability[, x]) -``` - -**Аргументы** - -* `experiments` — количество экспериментов [`UInt64`](/sql-reference/data-types/int-uint) -* `probability` — вероятность успеха в каждом эксперименте как значение между `0` и `1` [`Float64`](/sql-reference/data-types/float) -* `x` — необязательный аргумент, который игнорируется. Его единственная цель — предотвратить [устранение общих подвыражений](/sql-reference/functions/overview#common-subexpression-elimination), когда один и тот же вызов функции используется несколько раз в запросе. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает случайное число типа `Float64`, выбранное из указанного биномиального распределения. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT randBinomial(100, .75) FROM numbers(5) -``` - -```response title=Response -┌─randBinomial(100, 0.75)─┐ -│ 74 │ -│ 78 │ -│ 76 │ -│ 77 │ -│ 80 │ -└─────────────────────────┘ -``` - - -## randCanonical - -Появилась в версии: v22.11 - -Возвращает случайное число типа `Float64` с равномерным распределением на отрезке от `0` (включительно) до `1` (не включительно). - -**Синтаксис** - -```sql -randCanonical([x]) -``` - -**Аргументы** - -* `x` — необязательный аргумент, игнорируется. Единственная его цель — предотвратить [устранение общих подвыражений](/sql-reference/functions/overview#common-subexpression-elimination), когда один и тот же вызов функции используется несколько раз в запросе. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает случайное число с плавающей запятой типа Float64. [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT randCanonical(); -``` - -```response title=Response -0.345217890123456 -``` - - -## randChiSquared - -Появилась в: v22.10 - -Возвращает случайное число типа Float64, сгенерированное по [распределению хи-квадрат](https://en.wikipedia.org/wiki/Chi-squared_distribution). - -**Синтаксис** - -```sql -randChiSquared(degree_of_freedom[, x]) -``` - -**Аргументы** - -* `degree_of_freedom` — Число степеней свободы. [`Float64`](/sql-reference/data-types/float) -* `x` — Необязательный аргумент, который игнорируется. Единственная его цель — предотвратить [устранение общих подвыражений](/sql-reference/functions/overview#common-subexpression-elimination), когда один и тот же вызов функции используется несколько раз в запросе. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает случайное число типа Float64, выбранное из указанного распределения хи-квадрат. [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT randChiSquared(10) FROM numbers(5) -``` - -```response title=Response -┌─randChiSquared(10)─┐ -│ 10.015463656521543 │ -│ 9.621799919882768 │ -│ 2.71785015634699 │ -│ 11.128188665931908 │ -│ 4.902063104425469 │ -└────────────────────┘ -``` - - -## randConstant - -Добавлена в: v1.1 - -Генерирует одно случайное значение, которое остаётся неизменным для всех строк в рамках текущего выполнения запроса. - -Эта функция: - -* Возвращает одно и то же случайное значение для каждой строки в пределах одного запроса -* Выдаёт разные значения при отдельных выполненияx запроса - -Полезна для применения единых случайных seed-значений или идентификаторов ко всем строкам в наборе данных. - -**Синтаксис** - -```sql -randConstant([x]) -``` - -**Аргументы** - -* `x` — необязательный аргумент, значение которого игнорируется. Единственная его цель — предотвратить [устранение общих подвыражений](/sql-reference/functions/overview#common-subexpression-elimination), когда один и тот же вызов функции повторно используется в запросе. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает столбец типа `UInt32`, содержащий одно и то же случайное значение в каждой строке. [`UInt32`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT randConstant() AS random_value; -``` - -```response title=Response -| random_value | -|--------------| -| 1234567890 | -``` - -**Использование с параметром** - -```sql title=Query -SELECT randConstant(10) AS random_value; -``` - -```response title=Response -| random_value | -|--------------| -| 9876543210 | -``` - - -## randExponential - -Появилась в версии v22.10 - -Возвращает случайное число типа Float64, полученное из [экспоненциального распределения](https://en.wikipedia.org/wiki/Exponential_distribution). - -**Синтаксис** - -```sql -randExponential(lambda[, x]) -``` - -**Аргументы** - -* `lambda` — параметр интенсивности (значение λ) распределения [`Float64`](/sql-reference/data-types/float) -* `x` — необязательный и игнорируемый аргумент. Его единственная цель — предотвратить [устранение общих подвыражений](/sql-reference/functions/overview#common-subexpression-elimination), когда один и тот же вызов функции используется несколько раз в запросе. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает случайное число типа Float64, сгенерированное по указанному экспоненциальному распределению. [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT randExponential(1/10) FROM numbers(5) -``` - -```response title=Response -┌─randExponential(divide(1, 10))─┐ -│ 44.71628934340778 │ -│ 4.211013337903262 │ -│ 10.809402553207766 │ -│ 15.63959406553284 │ -│ 1.8148392319860158 │ -└────────────────────────────────┘ -``` - - -## randFisherF - -Появилась в версии: v22.10 - -Возвращает случайное число типа Float64, сгенерированное по [F-распределению](https://en.wikipedia.org/wiki/F-distribution). - -**Синтаксис** - -```sql -randFisherF(d1, d2[, x]) -``` - -**Аргументы** - -* `d1` — число степеней свободы d1 в `X = (S1 / d1) / (S2 / d2)`. [`Float64`](/sql-reference/data-types/float) -* `d2` — число степеней свободы d2 в `X = (S1 / d1) / (S2 / d2)`. [`Float64`](/sql-reference/data-types/float) -* `x` — необязательный аргумент, значение которого игнорируется. Единственное назначение аргумента — предотвратить [устранение общих подвыражений](/sql-reference/functions/overview#common-subexpression-elimination), когда один и тот же вызов функции используется несколько раз в запросе. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает случайное число типа Float64, выбранное из указанного F-распределения. [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT randFisherF(10, 3) FROM numbers(5) -``` - -```response title=Response -┌─randFisherF(10, 20)─┐ -│ 0.7204609609506184 │ -│ 0.9926258472572916 │ -│ 1.4010752726735863 │ -│ 0.34928401507025556 │ -│ 1.8216216009473598 │ -└─────────────────────┘ -``` - - -## randLogNormal - -Добавлена в версии: v22.10 - -Возвращает случайное число с плавающей запятой типа Float64, полученное из [логнормального распределения](https://en.wikipedia.org/wiki/Log-normal_distribution). - -**Синтаксис** - -```sql -randLogNormal(mean, stddev[, x]) -``` - -**Аргументы** - -* `mean` — Среднее значение распределения. [`Float64`](/sql-reference/data-types/float) -* `stddev` — Стандартное отклонение распределения. [`Float64`](/sql-reference/data-types/float) -* `x` — Необязательный аргумент, значение которого игнорируется. Единственная цель аргумента — предотвратить [устранение общих подвыражений](/sql-reference/functions/overview#common-subexpression-elimination), когда один и тот же вызов функции используется несколько раз в запросе. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает случайное число с плавающей запятой типа Float64, выбранное из указанного логнормального распределения. [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT randLogNormal(100, 5) FROM numbers(5) -``` - -```response title=Response -┌─randLogNormal(100, 5)─┐ -│ 1.295699673937363e48 │ -│ 9.719869109186684e39 │ -│ 6.110868203189557e42 │ -│ 9.912675872925529e39 │ -│ 2.3564708490552458e42 │ -└───────────────────────┘ -``` - - -## randNegativeBinomial - -Добавлена в: v22.10 - -Возвращает случайное число типа Float64, сгенерированное из [отрицательного биномиального распределения](https://en.wikipedia.org/wiki/Negative_binomial_distribution). - -**Синтаксис** - -```sql -randNegativeBinomial(experiments, probability[, x]) -``` - -**Аргументы** - -* `experiments` — Количество экспериментов. [`UInt64`](/sql-reference/data-types/int-uint) -* `probability` — Вероятность неудачи в каждом эксперименте в виде значения от `0` до `1`. [`Float64`](/sql-reference/data-types/float) -* `x` — Необязательный аргумент, который игнорируется. Единственная цель аргумента — предотвратить [устранение общих подвыражений](/sql-reference/functions/overview#common-subexpression-elimination), когда один и тот же вызов функции используется несколько раз в запросе. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает случайное число типа `Float64`, сгенерированное по указанному отрицательному биномиальному распределению. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT randNegativeBinomial(100, .75) FROM numbers(5) -``` - -```response title=Response -┌─randNegativeBinomial(100, 0.75)─┐ -│ 33 │ -│ 32 │ -│ 39 │ -│ 40 │ -│ 50 │ -└─────────────────────────────────┘ -``` - - -## randNormal - -Добавлено в: v22.10 - -Возвращает случайное число типа Float64, сгенерированное по [нормальному распределению](https://en.wikipedia.org/wiki/Normal_distribution). - -**Синтаксис** - -```sql -randNormal(mean, stddev[, x]) -``` - -**Аргументы** - -* `mean` — Среднее значение распределения [`Float64`](/sql-reference/data-types/float) -* `stddev` — Стандартное отклонение распределения [`Float64`](/sql-reference/data-types/float) -* `x` — Необязательный аргумент, игнорируется. Единственная цель этого аргумента — предотвратить [устранение общих подвыражений](/sql-reference/functions/overview#common-subexpression-elimination), когда один и тот же вызов функции используется несколько раз в запросе. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает случайное число типа Float64, сгенерированное из заданного нормального распределения. [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT randNormal(10, 2) FROM numbers(5) -``` - -```response title=Response -┌──randNormal(10, 2)─┐ -│ 13.389228911709653 │ -│ 8.622949707401295 │ -│ 10.801887062682981 │ -│ 4.5220192605895315 │ -│ 10.901239123982567 │ -└────────────────────┘ -``` - - -## randPoisson - -Впервые появился в: v22.10 - -Возвращает случайное число типа Float64, сгенерированное по [распределению Пуассона](https://en.wikipedia.org/wiki/Poisson_distribution). - -**Синтаксис** - -```sql -randPoisson(n[, x]) -``` - -**Аргументы** - -* `n` — Среднее число событий (среднее количество наступлений события). [`UInt64`](/sql-reference/data-types/int-uint) -* `x` — Необязательный аргумент, значение которого игнорируется. Единственная его цель — предотвратить [устранение общих подвыражений](/sql-reference/functions/overview#common-subexpression-elimination), когда один и тот же вызов функции используется несколько раз в запросе. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает случайное число типа Float64, сгенерированное из указанного распределения Пуассона. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT randPoisson(10) FROM numbers(5) -``` - -```response title=Response -┌─randPoisson(10)─┐ -│ 8 │ -│ 8 │ -│ 7 │ -│ 10 │ -│ 6 │ -└─────────────────┘ -``` - - -## randStudentT - -Появилась в версии: v22.10 - -Возвращает случайное число типа Float64, сгенерированное по [t-распределению Стьюдента](https://en.wikipedia.org/wiki/Student%27s_t-distribution). - -**Синтаксис** - -```sql -randStudentT(degree_of_freedom[, x]) -``` - -**Аргументы** - -* `degree_of_freedom` — число степеней свободы. [`Float64`](/sql-reference/data-types/float) -* `x` — необязательный аргумент, который игнорируется. Единственная цель аргумента — предотвратить [устранение общих подвыражений](/sql-reference/functions/overview#common-subexpression-elimination), когда один и тот же вызов функции используется несколько раз в запросе. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает случайное число типа Float64, выбранное из указанного распределения Стьюдента. [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT randStudentT(10) FROM numbers(5) -``` - -```response title=Response -┌─────randStudentT(10)─┐ -│ 1.2217309938538725 │ -│ 1.7941971681200541 │ -│ -0.28192176076784664 │ -│ 0.2508897721303792 │ -│ -2.7858432909761186 │ -└──────────────────────┘ -``` - - -## randUniform - -Впервые появилась в версии v22.10 - -Возвращает случайное число типа Float64, равномерно распределённое на интервале $[\min, \max]$. - -**Синтаксис** - -```sql -randUniform(min, max[, x]) -``` - -**Аргументы** - -* `min` — Левая граница диапазона (включительно). [`Float64`](/sql-reference/data-types/float) -* `max` — Правая граница диапазона (включительно). [`Float64`](/sql-reference/data-types/float) -* `x` — Необязательный и игнорируемый аргумент. Единственная цель аргумента — предотвратить [устранение общих подвыражений](/sql-reference/functions/overview#common-subexpression-elimination), когда один и тот же вызов функции используется несколько раз в запросе. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает случайное число, равномерно распределённое по интервалу между `min` и `max`. [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT randUniform(5.5, 10) FROM numbers(5) -``` - -```response title=Response -┌─randUniform(5.5, 10)─┐ -│ 8.094978491443102 │ -│ 7.3181248914450885 │ -│ 7.177741903868262 │ -│ 6.483347380953762 │ -│ 6.122286382885112 │ -└──────────────────────┘ -``` - - -## randomFixedString - -Появилась в версии v20.5 - -Генерирует случайную строку фиксированной длины с указанным количеством символов. -Возвращаемые символы не обязательно являются символами ASCII, то есть они могут быть непечатаемыми. - -**Синтаксис** - -```sql -randomFixedString(length) -``` - -**Аргументы** - -* `length` — длина строки в байтах. [`UInt*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает строку, заполненную случайными байтами. [`FixedString`](/sql-reference/data-types/fixedstring) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT randomFixedString(13) AS rnd, toTypeName(rnd) -``` - -```response title=Response -┌─rnd──────┬─toTypeName(randomFixedString(13))─┐ -│ j▒h㋖HɨZ'▒ │ FixedString(13) │ -└──────────┴───────────────────────────────────┘ -``` - - -## randomPrintableASCII - -Введена в версии: v20.1 - -Генерирует случайную строку [ASCII](https://en.wikipedia.org/wiki/ASCII#Printable_characters) с указанным количеством символов. - -Если передать `length < 0`, поведение функции не определено. - -**Синтаксис** - -```sql -randomPrintableASCII(length[, x]) -``` - -**Аргументы** - -* `length` — длина строки в байтах. [`(U)Int*`](/sql-reference/data-types/int-uint) -* `x` — необязательный аргумент, который игнорируется. Единственное назначение аргумента — предотвратить [устранение общих подвыражений](/sql-reference/functions/overview#common-subexpression-elimination), когда один и тот же вызов функции используется несколько раз в запросе. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает строку со случайным набором печатных ASCII-символов. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT number, randomPrintableASCII(30) AS str, length(str) FROM system.numbers LIMIT 3 -``` - -```response title=Response -┌─number─┬─str────────────────────────────┬─length(randomPrintableASCII(30))─┐ -│ 0 │ SuiCOSTvC0csfABSw=UcSzp2.`rv8x │ 30 │ -│ 1 │ 1Ag NlJ &RCN:*>HVPG;PE-nO"SUFD │ 30 │ -│ 2 │ /"+<"with:=LjJ Vm!c&hI*m#XTfzz │ 30 │ -└────────┴────────────────────────────────┴──────────────────────────────────┘ -``` - - -## randomString - -Введена в версии: v20.5 - -Генерирует случайную строку с указанным количеством символов. -Возвращаемые символы не обязательно относятся к ASCII, то есть они могут быть непечатаемыми. - -**Синтаксис** - -```sql -randomString(length[, x]) -``` - -**Аргументы** - -* `length` — длина строки в байтах. [`(U)Int*`](/sql-reference/data-types/int-uint) -* `x` — необязательный аргумент, его значение игнорируется. Единственная цель аргумента — предотвратить [устранение общих подвыражений](/sql-reference/functions/overview#common-subexpression-elimination), когда один и тот же вызов функции многократно используется в запросе. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает строку, заполненную случайными байтами. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT randomString(5) AS str FROM numbers(2) -``` - -```response title=Response -��� -�v6B� -``` - - -## randomStringUTF8 - -Добавлена в: v20.5 - -Генерирует случайную строку в кодировке [UTF-8](https://en.wikipedia.org/wiki/UTF-8) с указанным числом кодовых точек. -Кодовые точки из неназначенных [плоскостей](https://en.wikipedia.org/wiki/Plane_\(Unicode\)) (плоскости с 4 по 13) не возвращаются. -По‑прежнему возможно, что клиент, взаимодействующий с сервером ClickHouse, не сможет корректно отобразить полученную строку UTF-8. - -**Синтаксис** - -```sql -randomStringUTF8(length) -``` - -**Аргументы** - -* `length` — длина строки в кодовых точках. [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает строку, заполненную случайными кодовыми точками UTF-8. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT randomStringUTF8(13) -``` - -```response title=Response -┌─randomStringUTF8(13)─┐ -│ 𘤗𙉝д兠庇󡅴󱱎󦐪􂕌𔊹𓰛 │ -└──────────────────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/rounding-functions.md b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/rounding-functions.md index f72995bd85d..8d0209d4627 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/rounding-functions.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/rounding-functions.md @@ -6,475 +6,18 @@ title: 'Функции округления' doc_type: 'reference' --- - - # Функции округления :::note -Приведённая ниже документация сгенерирована на основе системной таблицы `system.functions` +Приведённая ниже документация сгенерирована из системной таблицы `system.functions` ::: {/* - Внутреннее содержимое приведённых ниже тегов при сборке фреймворка документации - заменяется документацией, сгенерированной из system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. + Содержимое тегов ниже при сборке фреймворка документации + заменяется на документацию, сгенерированную из system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. См.: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## ceil - -Добавлена в версии: v1.1 - -Аналог функции [`floor`](#floor), но возвращает наименьшее целое число, не меньшее `x`. -Если округление приводит к переполнению (например, `ceiling(255, -1)`), результат не определён. - -**Синтаксис** - -```sql -ceiling(x[, N]) -``` - -**Псевдонимы**: `ceiling` - -**Аргументы** - -* `x` — значение для округления. [`Float*`](/sql-reference/data-types/float) или [`Decimal*`](/sql-reference/data-types/decimal) или [`(U)Int*`](/sql-reference/data-types/int-uint) -* `N` — необязательный параметр. Количество знаков после запятой, до которых нужно округлить. По умолчанию — ноль, что означает округление до целого числа. Может быть отрицательным. [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает округлённое число того же типа, что и `x`. [`Float*`](/sql-reference/data-types/float) или [`Decimal*`](/sql-reference/data-types/decimal) или [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT ceiling(123.45, 1) AS округлено -``` - -```response title=Response -┌─rounded─┐ -│ 123.5 │ -└─────────┘ -``` - -**Отрицательная точность** - -```sql title=Query -SELECT ceiling(123.45, -1) -``` - -```response title=Response -┌─ceiling(123.45, -1)─┐ -│ 130 │ -└─────────────────────┘ -``` - - -## floor - -Появилась в версии: v1.1 - -Возвращает наибольшее число, меньшее либо равное `x`, при этом это число кратно `1 / 10 * N`, либо ближайшее число соответствующего типа данных, если `1 / 10 * N` не представимо точно. - -Целочисленные аргументы могут округляться при отрицательном значении аргумента `N`. -При неотрицательном `N` функция возвращает `x`. - -Если округление приводит к переполнению (например, `floor(-128, -1)`), результат не определён. - -**Синтаксис** - -```sql -floor(x[, N]) -``` - -**Аргументы** - -* `x` — Значение для округления. [`Float*`](/sql-reference/data-types/float) или [`Decimal*`](/sql-reference/data-types/decimal) или [`(U)Int*`](/sql-reference/data-types/int-uint) -* `N` — Необязательный параметр. Количество знаков после запятой, до которых нужно округлить. По умолчанию — ноль, что означает округление до целого числа. Может быть отрицательным. [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает округлённое число того же типа, что и `x`. [`Float*`](/sql-reference/data-types/float) или [`Decimal*`](/sql-reference/data-types/decimal) или [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT floor(123.45, 1) AS rounded -``` - -```response title=Response -┌─rounded─┐ -│ 123.4 │ -└─────────┘ -``` - -**Отрицательная точность** - -```sql title=Query -SELECT floor(123.45, -1) -``` - -```response title=Response -┌─floor(123.45, -1)─┐ -│ 120 │ -└───────────────────┘ -``` - - -## round - -Появилась в версии: v1.1 - -Округляет значение до заданного количества знаков после запятой `N`. - -* Если `N > 0`, функция округляет вправо от десятичной запятой. -* Если `N < 0`, функция округляет влево от десятичной запятой. -* Если `N = 0`, функция округляет до ближайшего целого числа. - -Функция возвращает ближайшее число указанного порядка. -Если входное значение находится на одинаковом расстоянии от двух соседних чисел, функция использует банковское округление для значений типа `Float*` и округление от нуля для остальных числовых типов (`Decimal*`). - -Если округление приводит к переполнению (например, `round(255, -1)`), результат неопределён. - -**Синтаксис** - -```sql -round(x[, N]) -``` - -**Аргументы** - -* `x` — Число для округления. [`Float*`](/sql-reference/data-types/float) или [`Decimal*`](/sql-reference/data-types/decimal) или [`(U)Int*`](/sql-reference/data-types/int-uint) -* `N` — Необязательный параметр. Количество знаков после запятой, до которого выполняется округление. По умолчанию `0`. [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает округлённое число того же типа, что и `x`. [`Float*`](/sql-reference/data-types/float) или [`Decimal*`](/sql-reference/data-types/decimal) или [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Входные значения типа Float** - -```sql title=Query -SELECT number / 2 AS x, round(x) FROM system.numbers LIMIT 3; -``` - -```response title=Response -┌───x─┬─round(x)─┐ -│ 0 │ 0 │ -│ 0.5 │ 0 │ -│ 1 │ 1 │ -└─────┴──────────┘ -``` - -**Десятичные значения** - -```sql title=Query -SELECT cast(number / 2 AS Decimal(10,4)) AS x, round(x) FROM system.numbers LIMIT 3; -``` - -```response title=Response -┌───x─┬─round(x)─┐ -│ 0 │ 0 │ -│ 0.5 │ 1 │ -│ 1 │ 1 │ -└─────┴──────────┘ -``` - - -## roundAge - -Введена в версии v1.1 - -Принимает число, обозначающее возраст человека, сравнивает его со стандартными возрастными диапазонами и возвращает либо нижнюю, либо верхнюю границу диапазона, в который попадает число. - -* Возвращает `0` для `age < 1`. -* Возвращает `17` для `1 ≤ age ≤ 17`. -* Возвращает `18` для `18 ≤ age ≤ 24`. -* Возвращает `25` для `25 ≤ age ≤ 34`. -* Возвращает `35` для `35 ≤ age ≤ 44`. -* Возвращает `45` для `45 ≤ age ≤ 54`. -* Возвращает `55` для `age ≥ 55`. - -**Синтаксис** - -```sql -roundAge(num) -``` - -**Аргументы** - -* `age` — число, обозначающее возраст в годах. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает нижнюю или верхнюю границу диапазона возрастов, в который попадает `age`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT *, roundAge(*) FROM system.numbers WHERE number IN (0, 5, 20, 31, 37, 54, 72); -``` - -```response title=Response -┌─number─┬─roundAge(number)─┐ -│ 0 │ 0 │ -│ 5 │ 17 │ -│ 20 │ 18 │ -│ 31 │ 25 │ -│ 37 │ 35 │ -│ 54 │ 45 │ -│ 72 │ 55 │ -└────────┴──────────────────┘ -``` - - -## roundBankers - -Введена в: v20.1 - -Округляет число до заданной десятичной позиции `N`. -Если округляемое число находится ровно посередине между двумя значениями, функция использует метод, называемый банковским округлением (banker's rounding), который является стандартным методом округления для чисел с плавающей запятой, определённым в IEEE 754. - -* Если `N > 0`, функция округляет вправо от десятичной точки -* Если `N < 0`, функция округляет влево от десятичной точки -* Если `N = 0`, функция округляет до ближайшего целого числа - -:::info Заметки - -* Когда округляемое число находится ровно посередине между двумя значениями, оно округляется до ближайшей чётной цифры на заданной десятичной позиции. - Например: `3.5` округляется вверх до `4`, `2.5` округляется вниз до `2`. -* Функция `round` использует такой же способ округления для чисел с плавающей запятой. -* Функция `roundBankers` также округляет целые числа таким же образом, например, `roundBankers(45, -1) = 40`. -* В остальных случаях функция округляет числа до ближайшего целого значения. - ::: - -:::tip Используйте банковское округление для суммирования или вычитания чисел -С помощью банковского округления можно уменьшить влияние округления чисел на результат их суммирования или вычитания. - -Например, просуммируем числа `1.5, 2.5, 3.5, 4.5` с разными вариантами округления: - -* Без округления: `1.5 + 2.5 + 3.5 + 4.5 = 12`. -* Банковское округление: `2 + 2 + 4 + 4 = 12`. -* Округление до ближайшего целого: `2 + 3 + 4 + 5 = 14`. - ::: - -**Синтаксис** - -```sql -roundBankers(x[, N]) -``` - -**Аргументы** - -* `x` — число для округления. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Decimal*`](/sql-reference/data-types/decimal) или [`Float*`](/sql-reference/data-types/float) -* `[, N]` — необязательный аргумент. Количество знаков после запятой, до которых нужно округлить. По умолчанию — `0`. [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает значение, округлённое методом банковского округления. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Decimal*`](/sql-reference/data-types/decimal) или [`Float*`](/sql-reference/data-types/float) - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT number / 2 AS x, roundBankers(x, 0) AS b FROM system.numbers LIMIT 10 -``` - -```response title=Response -┌───x─┬─b─┐ -│ 0 │ 0 │ -│ 0.5 │ 0 │ -│ 1 │ 1 │ -│ 1.5 │ 2 │ -│ 2 │ 2 │ -│ 2.5 │ 2 │ -│ 3 │ 3 │ -│ 3.5 │ 4 │ -│ 4 │ 4 │ -│ 4.5 │ 4 │ -└─────┴───┘ -``` - - -## roundDown - -Добавлена в версии: v20.1 - -Округляет число вниз до элемента в указанном массиве. -Если значение меньше нижней границы, возвращается нижняя граница. - -**Синтаксис** - -```sql -roundDown(num, arr) -``` - -**Аргументы** - -* `num` — число, которое нужно округлить вниз. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Decimal*`](/sql-reference/data-types/decimal) или [`Float*`](/sql-reference/data-types/float) -* `arr` — массив значений, до одного из которых округляется `num` вниз. [`Array((U)Int*)`](/sql-reference/data-types/array) или [`Array(Float*)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает число, округлённое вниз до одного из элементов `arr`. Если значение меньше нижней границы, возвращается нижняя граница. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT *, roundDown(*, [3, 4, 5]) FROM system.numbers WHERE number IN (0, 1, 2, 3, 4, 5) -``` - -```response title=Response -┌─number─┬─roundDown(number, [3, 4, 5])─┐ -│ 0 │ 3 │ -│ 1 │ 3 │ -│ 2 │ 3 │ -│ 3 │ 3 │ -│ 4 │ 4 │ -│ 5 │ 5 │ -└────────┴──────────────────────────────┘ -``` - - -## roundDuration - -Впервые появилась в: v1.1 - -Округляет число вниз до ближайшего значения из набора часто используемых значений длительности: `1, 10, 30, 60, 120, 180, 240, 300, 600, 1200, 1800, 3600, 7200, 18000, 36000`. -Если число меньше единицы, возвращает `0`. - -**Синтаксис** - -```sql -округлитьДлительность(num) -``` - -**Аргументы** - -* `num` — Число, округляемое до одного из чисел из набора стандартных длительностей. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает `0` при `num` < 1. В остальных случаях — одно из: `1, 10, 30, 60, 120, 180, 240, 300, 600, 1200, 1800, 3600, 7200, 18000, 36000`. [`UInt16`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT *, roundDuration(*) FROM system.numbers WHERE number IN (0, 9, 19, 47, 101, 149, 205, 271, 421, 789, 1423, 2345, 4567, 9876, 24680, 42573) -``` - -```response title=Response -┌─number─┬─roundDuration(number)─┐ -│ 0 │ 0 │ -│ 9 │ 1 │ -│ 19 │ 10 │ -│ 47 │ 30 │ -│ 101 │ 60 │ -│ 149 │ 120 │ -│ 205 │ 180 │ -│ 271 │ 240 │ -│ 421 │ 300 │ -│ 789 │ 600 │ -│ 1423 │ 1200 │ -│ 2345 │ 1800 │ -│ 4567 │ 3600 │ -│ 9876 │ 7200 │ -│ 24680 │ 18000 │ -│ 42573 │ 36000 │ -└────────┴───────────────────────┘ -``` - - -## roundToExp2 - -Добавлена в версии: v1.1 - -Округляет число вниз до ближайшей (целой неотрицательной) степени двойки. -Если число меньше единицы, возвращает `0`. - -**Синтаксис** - -```sql -roundToExp2(num) -``` - -**Аргументы** - -* `num` — число для округления. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает `num`, округлённое в меньшую сторону до ближайшей (целой неотрицательной) степени двойки, или `0` для `num < 1`. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT *, roundToExp2(*) FROM system.numbers WHERE number IN (0, 2, 5, 10, 19, 50) -``` - -```response title=Response -┌─number─┬─roundToExp2(number)─┐ -│ 0 │ 0 │ -│ 2 │ 2 │ -│ 5 │ 4 │ -│ 10 │ 8 │ -│ 19 │ 16 │ -│ 50 │ 32 │ -└────────┴─────────────────────┘ -``` - - -## trunc - -Впервые добавлена в версии v1.1 - -Аналог функции [`floor`](#floor), но возвращает округлённое число с максимальным по модулю значением, не превышающим модуль `x`. - -**Синтаксис** - -```sql -truncate(x[, N]) -``` - -**Псевдонимы**: `truncate` - -**Аргументы** - -* `x` — значение, которое нужно округлить. [`Float*`](/sql-reference/data-types/float) или [`Decimal*`](/sql-reference/data-types/decimal) или [`(U)Int*`](/sql-reference/data-types/int-uint) -* `N` — необязательный аргумент. Количество знаков после запятой, до которого выполняется округление. По умолчанию — ноль, что означает округление до целого числа. [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает округлённое число того же типа, что и `x`. [`Float*`](/sql-reference/data-types/float) или [`Decimal*`](/sql-reference/data-types/decimal) или [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT truncate(123.499, 1) AS res; -``` - -```response title=Response -┌───res─┐ -│ 123.4 │ -└───────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/splitting-merging-functions.md b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/splitting-merging-functions.md index aea5781735b..45b6117667e 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/splitting-merging-functions.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/splitting-merging-functions.md @@ -8,464 +8,18 @@ doc_type: 'reference' import DeprecatedBadge from '@theme/badges/DeprecatedBadge'; - # Функции для разделения строк :::note Документация ниже генерируется из системной таблицы `system.functions`. ::: - - - - - -## alphaTokens {#alphaTokens} - -Введена в версии: v1.1 - -Выделяет подстроки из последовательных байтов в диапазонах `a-z` и `A-Z` и возвращает массив выделенных подстрок. - -**Синтаксис** - -```sql -alphaTokens(s[, max_substrings]) -``` - -**Псевдонимы**: `splitByAlpha` - -**Аргументы** - -- `s` — строка для разделения. [`String`](/sql-reference/data-types/string) -- `max_substrings` — необязательный параметр. Если `max_substrings > 0`, количество возвращаемых подстрок будет не более `max_substrings`, в противном случае функция вернёт максимально возможное количество подстрок. [`Int64`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает массив выделенных подстрок из `s`. [`Array(String)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Запрос -SELECT alphaTokens('abca1abc'); -``` - -```response title=Результат -┌─alphaTokens('abca1abc')─┐ -│ ['abca','abc'] │ -└─────────────────────────┘ -``` - - -## arrayStringConcat {#arrayStringConcat} - -Введена в версии: v1.1 - -Объединяет строковые представления значений из массива с указанным разделителем. Разделитель является необязательным параметром, по умолчанию используется пустая строка. - -**Синтаксис** - -```sql -arrayStringConcat(arr[, separator]) -``` - -**Аргументы** - -- `arr` — массив для объединения. [`Array(T)`](/sql-reference/data-types/array) -- `separator` — необязательный параметр. Строка-разделитель. По умолчанию — пустая строка. [`const String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает объединённую строку. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Запрос -SELECT arrayStringConcat(['12/05/2021', '12:50:00'], ' ') AS DateString; -``` - -```response title=Результат -┌─DateString──────────┐ -│ 12/05/2021 12:50:00 │ -└─────────────────────┘ -``` - - -## extractAllGroupsVertical {#extractAllGroupsVertical} - -Введена в версии: v20.5 - -Находит все группы в строке с помощью регулярного выражения и возвращает массив массивов, где каждый массив содержит совпадающие фрагменты из всех групп, сгруппированные в порядке появления во входной строке. - -**Синтаксис** - -```sql -extractAllGroupsVertical(s, regexp) -``` - -**Псевдонимы**: `extractAllGroups` - -**Аргументы** - -- `s` — Входная строка для извлечения. [`String`](/sql-reference/data-types/string) или [`FixedString`](/sql-reference/data-types/fixedstring) -- `regexp` — Регулярное выражение для поиска совпадений. [`const String`](/sql-reference/data-types/string) или [`const FixedString`](/sql-reference/data-types/fixedstring) - -**Возвращаемое значение** - -Возвращает массив массивов, где каждый внутренний массив содержит захваченные группы из одного совпадения. Каждое совпадение формирует массив с элементами, соответствующими захватывающим группам в регулярном выражении (группа 1, группа 2 и т. д.). Если совпадений не найдено, возвращается пустой массив. [`Array(Array(String))`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Запрос -WITH '< Server: nginx -< Date: Tue, 22 Jan 2019 00:26:14 GMT -< Content-Type: text/html; charset=UTF-8 -< Connection: keep-alive -' AS s -SELECT extractAllGroupsVertical(s, '< ([\\w\\-]+): ([^\\r\\n]+)'); -``` - -```response title=Результат -[['Server','nginx'],['Date','Tue, 22 Jan 2019 00:26:14 GMT'],['Content-Type','text/html; charset=UTF-8'],['Connection','keep-alive']] -``` - - -## ngrams {#ngrams} - -Введена в версии: v21.11 - -Разбивает UTF-8 строку на n-граммы размером `ngramsize` символов. - -**Синтаксис** - -```sql -ngrams(s, ngram_size) -``` - -**Аргументы** - -- `s` — входная строка. [`String`](/sql-reference/data-types/string) или [`FixedString`](/sql-reference/data-types/fixedstring) -- `ngram_size` — размер n-граммы. [`const UInt8/16/32/64`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Массив с n-граммами. [`Array(String)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Запрос -SELECT ngrams('ClickHouse', 3); -``` - -```response title=Результат -['Cli','lic','ick','ckH','kHo','Hou','ous','use'] -``` - - -## splitByChar {#splitByChar} - -Введена в версии: v1.1 - -Разделяет строку на массив подстрок по указанному константному разделителю `separator`, состоящему ровно из одного символа. -Пустые подстроки могут появляться, если разделитель находится в начале или конце строки, или если присутствует несколько последовательных разделителей. - -:::note -Настройка [`splitby_max_substrings_includes_remaining_string`](../../operations/settings/settings.md#splitby_max_substrings_includes_remaining_string) (по умолчанию: `0`) определяет, будет ли оставшаяся строка включена в последний элемент результирующего массива при `max_substrings > 0`. -::: - -Пустые подстроки могут появляться в следующих случаях: - -- Разделитель находится в начале или конце строки -- Присутствует несколько последовательных разделителей -- Исходная строка `s` пуста - -**Синтаксис** - -```sql -splitByChar(separator, s[, max_substrings]) -``` - -**Аргументы** - -- `separator` — Разделитель, должен быть однобайтовым символом. [`String`](/sql-reference/data-types/string) -- `s` — Строка для разделения. [`String`](/sql-reference/data-types/string) -- `max_substrings` — Необязательный параметр. Если `max_substrings > 0`, возвращаемый массив будет содержать не более `max_substrings` подстрок, в противном случае функция вернёт максимально возможное количество подстрок. Значение по умолчанию: `0`. [`Int64`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает массив полученных подстрок. [`Array(String)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Запрос -SELECT splitByChar(',', '1,2,3,abcde'); -``` - -```response title=Ответ -┌─splitByChar(⋯2,3,abcde')─┐ -│ ['1','2','3','abcde'] │ -└──────────────────────────┘ -``` - - -## splitByNonAlpha {#splitByNonAlpha} - -Introduced in: v21.9 - -Разделяет строку по пробелам и знакам пунктуации на массив подстрок. - -:::note -Настройка [`splitby_max_substrings_includes_remaining_string`](../../operations/settings/settings.md#splitby_max_substrings_includes_remaining_string) (по умолчанию: `0`) определяет, будет ли остаток строки включён в последний элемент результирующего массива при `max_substrings > 0`. -::: - -**Синтаксис** - -```sql -splitByNonAlpha(s[, max_substrings]) -``` - -**Аргументы** - -- `s` — строка для разделения. [`String`](/sql-reference/data-types/string) -- `max_substrings` — необязательный параметр. При `max_substrings > 0` количество возвращаемых подстрок не превысит `max_substrings`, в противном случае функция вернёт максимально возможное количество подстрок. Значение по умолчанию: `0`. [`Int64`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает массив подстрок из `s`. [`Array(String)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT splitByNonAlpha('user@domain.com'); -``` - -```response title=Response -['user','domain','com'] -``` - - -## splitByRegexp {#splitByRegexp} - -Введено в версии: v21.6 - -Разделяет строку по заданному регулярному выражению на массив подстрок. -Если регулярное выражение пустое, строка будет разделена на массив отдельных символов. -Если совпадений с регулярным выражением не найдено, строка не будет разделена. - -Пустые подстроки могут появиться в следующих случаях: - -- непустое совпадение с регулярным выражением находится в начале или конце строки -- имеется несколько последовательных непустых совпадений с регулярным выражением -- исходная строка пустая, а регулярное выражение непустое. - -:::note -Настройка [`splitby_max_substrings_includes_remaining_string`](../../operations/settings/settings.md#splitby_max_substrings_includes_remaining_string) (по умолчанию: `0`) определяет, включается ли оставшаяся часть строки в последний элемент результирующего массива при `max_substrings > 0`. -::: - -**Синтаксис** - -```sql -splitByRegexp(regexp, s[, max_substrings]) -``` - -**Аргументы** - -- `regexp` — Регулярное выражение. Константа. [`String`](/sql-reference/data-types/string) или [`FixedString`](/sql-reference/data-types/fixedstring) -- `s` — Строка для разделения. [`String`](/sql-reference/data-types/string) -- `max_substrings` — Необязательный параметр. При `max_substrings > 0` количество возвращаемых подстрок будет не более `max_substrings`, в противном случае функция вернёт максимально возможное количество подстрок. Значение по умолчанию: `0`. [`Int64`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает массив выделенных подстрок из `s`. [`Array(String)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Запрос -SELECT splitByRegexp('\\d+', 'a12bc23de345f'); -``` - -```response title=Ответ -┌─splitByRegex⋯c23de345f')─┐ -│ ['a12bc23de345f'] │ -└──────────────────────────┘ -``` - -**Пустое регулярное выражение** - -```sql title=Запрос -SELECT splitByRegexp('', 'abcde'); -``` - -```response title=Ответ -┌─splitByRegexp('', 'abcde')─┐ -│ ['a','b','c','d','e'] │ -└────────────────────────────┘ -``` - - -## splitByString {#splitByString} - -Введена в версии: v1.1 - -Разделяет строку константным разделителем `separator`, состоящим из нескольких символов, на массив подстрок. -Если строка `separator` пуста, функция разделит строку `s` на массив отдельных символов. - -Пустые подстроки могут появиться в следующих случаях: - -- Непустой разделитель встречается в начале или конце строки -- Присутствует несколько последовательных непустых разделителей -- Исходная строка `s` пуста, а разделитель не пуст - -:::note -Настройка [`splitby_max_substrings_includes_remaining_string`](../../operations/settings/settings.md#splitby_max_substrings_includes_remaining_string) (по умолчанию: `0`) определяет, будет ли оставшаяся строка включена в последний элемент результирующего массива при `max_substrings > 0`. -::: - -**Синтаксис** - -```sql -splitByString(separator, s[, max_substrings]) -``` - -**Аргументы** - -- `separator` — Разделитель. [`String`](/sql-reference/data-types/string) -- `s` — Строка для разделения. [`String`](/sql-reference/data-types/string) -- `max_substrings` — Необязательный параметр. При `max_substrings > 0` количество возвращаемых подстрок будет не более `max_substrings`, в противном случае функция вернёт максимально возможное количество подстрок. Значение по умолчанию: `0`. [`Int64`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает массив выделенных подстрок из `s` [`Array(String)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Запрос -SELECT splitByString(', ', '1, 2 3, 4,5, abcde'); -``` - -```response title=Результат -┌─splitByStrin⋯4,5, abcde')─┐ -│ ['1','2 3','4,5','abcde'] │ -└───────────────────────────┘ -``` - -**Пустой разделитель** - -```sql title=Запрос -SELECT splitByString('', 'abcde'); -``` - -```response title=Результат -┌─splitByString('', 'abcde')─┐ -│ ['a','b','c','d','e'] │ -└────────────────────────────┘ -``` - - -## splitByWhitespace {#splitByWhitespace} - -Введена в версии: v21.9 - -Разделяет строку по пробельным символам на массив подстрок. - -:::note -Настройка [`splitby_max_substrings_includes_remaining_string`](../../operations/settings/settings.md#splitby_max_substrings_includes_remaining_string) (по умолчанию: `0`) управляет тем, будет ли остаток строки включён в последний элемент результирующего массива при `max_substrings > 0`. -::: - -**Синтаксис** - -```sql -splitByWhitespace(s[, max_substrings]) -``` - -**Аргументы** - -- `s` — строка для разделения. [`String`](/sql-reference/data-types/string) -- `max_substrings` — необязательный параметр. При `max_substrings > 0` количество возвращаемых подстрок не превысит `max_substrings`, в противном случае функция вернёт максимально возможное количество подстрок. Значение по умолчанию: `0`. [`Int64`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает массив подстрок из `s`. [`Array(String)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT splitByWhitespace(' 1! a, b. '); -``` - -```response title=Response -['1!','a,','b.'] -``` - - -## tokens {#tokens} - -Введена в версии: v21.11 - -Разбивает строку на токены с помощью указанного токенизатора. -Токенизатор по умолчанию использует не-буквенно-цифровые ASCII-символы в качестве разделителей. - -В случае токенизатора `split`, если токены не образуют [префиксный код](https://en.wikipedia.org/wiki/Prefix_code), вероятно, вы захотите, чтобы при сопоставлении приоритет отдавался более длинным разделителям. -Для этого передавайте разделители в порядке убывания длины. -Например, при separators = `['%21', '%']` строка `%21abc` будет токенизирована как `['abc']`, тогда как separators = `['%', '%21']` приведёт к токенизации в `['21ac']` (что, вероятно, не то, что вам нужно). - -**Синтаксис** - -```sql -tokens(value[, tokenizer[, ngrams[, separators]]]) -``` - -**Аргументы** - -- `value` — Входная строка. [`String`](/sql-reference/data-types/string) или [`FixedString`](/sql-reference/data-types/fixedstring) -- `tokenizer` — Используемый токенизатор. Допустимые значения: `splitByNonAlpha`, `ngrams`, `splitByString`, `array` и `sparseGrams`. Необязательный параметр, если не указан явно, по умолчанию используется `splitByNonAlpha`. [`const String`](/sql-reference/data-types/string) -- `ngrams` — Актуально только если аргумент `tokenizer` равен `ngrams`: необязательный параметр, определяющий длину n-грамм. Если не указан явно, по умолчанию равен `3`. [`const UInt8`](/sql-reference/data-types/int-uint) -- `separators` — Актуально только если аргумент `tokenizer` равен `split`: необязательный параметр, определяющий строки-разделители. Если не указан явно, по умолчанию равен `[' ']`. [`const Array(String)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает результирующий массив токенов из входной строки. [`Array`](/sql-reference/data-types/array) - -**Примеры** - -**Токенизатор по умолчанию** - -```sql title=Запрос -SELECT tokens('test1,;\\\\ test2,;\\\\ test3,;\\\\ test4') AS tokens; -``` - -```response title=Результат -['test1','test2','test3','test4'] -``` - -**Токенизатор n-грамм** - -```sql title=Запрос -SELECT tokens('abc def', 'ngrams', 3) AS tokens; -``` +{/* + Внутреннее содержимое приведённых ниже тегов во время сборки фреймворка документации + заменяется документацией, сгенерированной из system.functions. Не изменяйте и не удаляйте эти теги. + См. https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md + */ } -```response title=Результат -['abc','bc ','c d',' de','def'] -``` +{/*AUTOGENERATED_START*/ } - +{/*AUTOGENERATED_END*/ } diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/string-functions.md b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/string-functions.md index 1077ce6a37a..1f2df092071 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/string-functions.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/string-functions.md @@ -1,6 +1,6 @@ --- -description: 'Документация по строковым функциям' -sidebar_label: 'Строковые' +description: 'Справочник по строковым функциям' +sidebar_label: 'Строки' slug: /sql-reference/functions/string-functions title: 'Функции для работы со строками' doc_type: 'reference' @@ -14,3605 +14,15 @@ import VersionBadge from '@theme/badges/VersionBadge'; Функции для [поиска](string-search-functions.md) в строках и для [замены](string-replace-functions.md) в строках описаны отдельно. :::note -Приведённая ниже документация сгенерирована из системной таблицы `system.functions`. +Приведенная ниже документация сгенерирована из системной таблицы `system.functions`. ::: {/* - Содержимое тегов ниже при сборке фреймворка документации - заменяется документацией, сгенерированной из system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. + Внутреннее содержимое тегов ниже заменяется во время сборки фреймворка документации + на документы, сгенерированные из system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. См.: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## CRC32 - -Добавлено в версии: v20.1 - -Вычисляет контрольную сумму CRC32 для строки, используя полином CRC-32-IEEE 802.3 и начальное значение `0xffffffff` (реализация zlib). - -**Синтаксис** - -```sql -CRC32(s) -``` - -**Аргументы** - -* `s` — строка, для которой нужно вычислить CRC32. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает контрольную сумму CRC32 для строки. [`UInt32`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT CRC32('ClickHouse') -``` - -```response title=Response -┌─CRC32('ClickHouse')─┐ -│ 1538217360 │ -└─────────────────────┘ -``` - - -## CRC32IEEE - -Появилась в версии: v20.1 - -Вычисляет контрольную сумму CRC32 строки с использованием полинома CRC-32-IEEE 802.3. - -**Синтаксис** - -```sql -CRC32IEEE(ы) -``` - -**Аргументы** - -* `s` — строка, для которой вычисляется CRC32. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает контрольную сумму CRC32 строки. [`UInt32`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT CRC32IEEE('ClickHouse'); -``` - -```response title=Response -┌─CRC32IEEE('ClickHouse')─┐ -│ 3089448422 │ -└─────────────────────────┘ -``` - - -## CRC64 - -Добавлено в версии v20.1 - -Вычисляет контрольную сумму CRC64 для строки с использованием полинома CRC-64-ECMA. - -**Синтаксис** - -```sql -CRC64(ы) -``` - -**Аргументы** - -* `s` — строка, для которой вычисляется CRC64. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает CRC64-контрольную сумму строки. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT CRC64('ClickHouse'); -``` - -```response title=Response -┌──CRC64('ClickHouse')─┐ -│ 12126588151325169346 │ -└──────────────────────┘ -``` - - -## appendTrailingCharIfAbsent - -Появилась в версии: v1.1 - -Добавляет символ `c` к строке `s`, если `s` непустая и не оканчивается символом `c`. - -**Синтаксис** - -```sql -appendTrailingCharIfAbsent(s, c) -``` - -**Аргументы** - -* `s` — входная строка. [`String`](/sql-reference/data-types/string) -* `c` — символ, который нужно добавить, если он отсутствует. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает строку `s` с добавленным символом `c`, если `s` не заканчивается на `c`. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT appendTrailingCharIfAbsent('https://example.com', '/'); -``` - -```response title=Response -┌─appendTraili⋯.com', '/')─┐ -│ https://example.com/ │ -└──────────────────────────┘ -``` - - -## ascii - -Введена в версии: v22.11 - -Возвращает кодовую точку ASCII первого символа строки `s` в виде `Int32`. - -**Синтаксис** - -```sql -ascii(s) -``` - -**Аргументы** - -* `s` — строковый аргумент. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает ASCII-кодовую точку первого символа. Если `s` — пустая строка, результат — `0`. Если первый символ не является символом ASCII или не входит в диапазон дополнения Latin-1 в UTF-16, результат не определён. [`Int32`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT ascii('234') -``` - -```response title=Response -┌─ascii('234')─┐ -│ 50 │ -└──────────────┘ -``` - - -## base32Decode - -Введена в версии: v25.6 - -Декодирует строку в формате [Base32](https://datatracker.ietf.org/doc/html/rfc4648#section-6) (RFC 4648). -Если строка не является корректной строкой в кодировке Base32, генерируется исключение. - -**Синтаксис** - -```sql -base32Decode(encoded) -``` - -**Аргументы** - -* `encoded` — столбец типа String или константа. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает строку с декодированным значением аргумента. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT base32Decode('IVXGG33EMVSA===='); -``` - -```response title=Response -┌─base32Decode('IVXGG33EMVSA====')─┐ -│ Закодировано │ -└──────────────────────────────────┘ -``` - - -## base32Encode - -Добавлена в версии: v25.6 - -Кодирует строку в формате [Base32](https://datatracker.ietf.org/doc/html/rfc4648#section-6). - -**Синтаксис** - -```sql -base32Encode(plaintext) -``` - -**Аргументы** - -* `plaintext` — Исходный текст для кодирования. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает строку, содержащую закодированное значение аргумента. [`String`](/sql-reference/data-types/string) или [`FixedString`](/sql-reference/data-types/fixedstring) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT base32Encode('Encoded') -``` - -```response title=Response -┌─base32Encode('Encoded')─┐ -│ IVXGG33EMVSA==== │ -└─────────────────────────┘ -``` - - -## base58Decode - -Добавлена в версии v22.7 - -Декодирует строку в формате [Base58](https://datatracker.ietf.org/doc/html/draft-msporny-base58-03#section-3). -Если строка не является корректной Base58-последовательностью, генерируется исключение. - -**Синтаксис** - -```sql -base58Decode(encoded) -``` - -**Аргументы** - -* `encoded` — Строковый столбец или строковая константа для декодирования. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает строку, содержащую декодированное значение аргумента. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT base58Decode('JxF12TrwUP45BMd'); -``` - -```response title=Response -┌─base58Decode⋯rwUP45BMd')─┐ -│ Hello World │ -└──────────────────────────┘ -``` - - -## base58Encode - -Добавлена в версии: v22.7 - -Кодирует строку в формате [Base58](https://tools.ietf.org/id/draft-msporny-base58-01.html). - -**Синтаксис** - -```sql -base58Encode(plaintext) -``` - -**Аргументы** - -* `plaintext` — Исходный текст для кодирования. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает строку, содержащую закодированное значение аргумента. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT base58Encode('ClickHouse'); -``` - -```response title=Response -┌─base58Encode('ClickHouse')─┐ -│ 4nhk8K7GHXf6zx │ -└────────────────────────────┘ -``` - - -## base64Decode - -Добавлена в версии: v18.16 - -Декодирует строку из представления [Base64](https://en.wikipedia.org/wiki/Base64) в соответствии с RFC 4648. -В случае ошибки выбрасывает исключение. - -**Синтаксис** - -```sql -base64Decode(encoded) -``` - -**Псевдонимы**: `FROM_BASE64` - -**Аргументы** - -* `encoded` — Столбец строкового типа или строковая константа для декодирования. Если строка не является корректной строкой в формате Base64, генерируется исключение. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает декодированную строку. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT base64Decode('Y2xpY2tob3VzZQ==') -``` - -```response title=Response -┌─base64Decode('Y2xpY2tob3VzZQ==')─┐ -│ clickhouse │ -└──────────────────────────────────┘ -``` - - -## base64Encode - -Введена в версии: v18.16 - -Кодирует строку в кодировку [Base64](https://en.wikipedia.org/wiki/Base64) в соответствии с RFC 4648. - -**Синтаксис** - -```sql -base64Encode(plaintext) -``` - -**Псевдонимы**: `TO_BASE64` - -**Аргументы** - -* `plaintext` — Столбец или константа с исходным текстом для декодирования. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает строку, содержащую закодированное значение аргумента. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT base64Encode('clickhouse') -``` - -```response title=Response -┌─base64Encode('clickhouse')─┐ -│ Y2xpY2tob3VzZQ== │ -└────────────────────────────┘ -``` - - -## base64URLDecode - -Добавлена в: v24.6 - -Декодирует строку из представления [Base64](https://en.wikipedia.org/wiki/Base64), используя URL-безопасный алфавит в соответствии с RFC 4648. -В случае ошибки вызывает исключение. - -**Синтаксис** - -```sql -base64URLDecode(encoded) -``` - -**Аргументы** - -* `encoded` — Столбец или константа строкового типа для декодирования. Если строка не является корректной Base64-последовательностью, генерируется исключение. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает строку, содержащую декодированное значение аргумента. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT base64URLDecode('aHR0cHM6Ly9jbGlja2hvdXNlLmNvbQ') -``` - -```response title=Response -┌─base64URLDecode('aHR0cHM6Ly9jbGlja2hvdXNlLmNvbQ')─┐ -│ https://clickhouse.com │ -└───────────────────────────────────────────────────┘ -``` - - -## base64URLEncode - -Добавлена в версии: v18.16 - -Кодирует строку в представление [Base64](https://datatracker.ietf.org/doc/html/rfc4648#section-4) (RFC 4648) с URL‑безопасным алфавитом. - -**Синтаксис** - -```sql -base64URLEncode(plaintext) -``` - -**Аргументы** - -* `plaintext` — Столбец или константа с открытым текстом для кодирования. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает строку, содержащую закодированное значение аргумента. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT base64URLEncode('https://clickhouse.com') -``` - -```response title=Response -┌─base64URLEncode('https://clickhouse.com')─┐ -│ aHR0cHM6Ly9jbGlja2hvdXNlLmNvbQ │ -└───────────────────────────────────────────┘ -``` - - -## basename - -Добавлена в: v20.1 - -Извлекает часть строки после последнего слеша (/) или обратного слеша (). -Эта функция часто используется для извлечения имени файла из пути. - -**Синтаксис** - -```sql -basename(expr) -``` - -**Аргументы** - -* `expr` — строковое выражение. Обратные косые черты должны быть экранированы. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает часть входной строки после последнего прямого или обратного слеша. Если входная строка оканчивается прямым или обратным слешем, функция возвращает пустую строку. Если в строке нет прямых или обратных слешей, возвращается исходная строка. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Извлечение имени файла из Unix-пути** - -```sql title=Query -SELECT 'some/long/path/to/file' AS a, basename(a) -``` - -```response title=Response -┌─a──────────────────────┬─basename('some/long/path/to/file')─┐ -│ some/long/path/to/file │ file │ -└────────────────────────┴────────────────────────────────────┘ -``` - -**Извлечь имя файла из пути в Windows** - -```sql title=Query -SELECT 'some\\long\\path\\to\\file' AS a, basename(a) -``` - -```response title=Response -┌─a──────────────────────┬─basename('some\\long\\path\\to\\file')─┐ -│ some\long\path\to\file │ file │ -└────────────────────────┴────────────────────────────────────────┘ -``` - -**Строка без символов разделителей пути** - -```sql title=Query -SELECT 'some-file-name' AS a, basename(a) -``` - -```response title=Response -┌─a──────────────┬─basename('some-file-name')─┐ -│ some-file-name │ some-file-name │ -└────────────────┴────────────────────────────┘ -``` - - -## byteHammingDistance - -Добавлена в версии: v23.9 - -Вычисляет [расстояние Хэмминга](https://en.wikipedia.org/wiki/Hamming_distance) между двумя строками байт. - -**Синтаксис** - -```sql -byteHammingDistance(s1, s2) -``` - -**Псевдонимы**: `mismatches` - -**Аргументы** - -* `s1` — первая входная строка. [`String`](/sql-reference/data-types/string) -* `s2` — вторая входная строка. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает расстояние Хэмминга между двумя строками. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT byteHammingDistance('karolin', 'kathrin') -``` - -```response title=Response -┌─byteHammingDistance('karolin', 'kathrin')─┐ -│ 3 │ -└───────────────────────────────────────────┘ -``` - - -## compareSubstrings - -Появилась в версии: v25.2 - -Лексикографически сравнивает две строки. - -**Синтаксис** - -```sql -compareSubstrings(s1, s2, s1_offset, s2_offset, num_bytes) -``` - -**Аргументы** - -* `s1` — Первая строка для сравнения. [`String`](/sql-reference/data-types/string) -* `s2` — Вторая строка для сравнения. [`String`](/sql-reference/data-types/string) -* `s1_offset` — Позиция (нумерация с нуля) в `s1`, с которой начинается сравнение. [`UInt*`](/sql-reference/data-types/int-uint) -* `s2_offset` — Позиция (нумерация с нуля) в `s2`, с которой начинается сравнение. [`UInt*`](/sql-reference/data-types/int-uint) -* `num_bytes` — Максимальное число байт, сравниваемых в обеих строках. Если `s1_offset` (или `s2_offset`) + `num_bytes` превышает длину входной строки, `num_bytes` будет соответственно уменьшено. [`UInt*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает: - -* `-1`, если `s1`[`s1_offset` : `s1_offset` + `num_bytes`] < `s2`[`s2_offset` : `s2_offset` + `num_bytes`]. -* `0`, если `s1`[`s1_offset` : `s1_offset` + `num_bytes`] = `s2`[`s2_offset` : `s2_offset` + `num_bytes`]. -* `1`, если `s1`[`s1_offset` : `s1_offset` + `num_bytes`] > `s2`[`s2_offset` : `s2_offset` + `num_bytes`]. - [`Int8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT compareSubstrings('Saxony', 'Anglo-Saxon', 0, 6, 5) AS result -``` - -```response title=Response -┌─result─┐ -│ 0 │ -└────────┘ -``` - - -## concat - -Введена в версии: v1.1 - -Объединяет переданные аргументы. - -Аргументы, которые не имеют типов [`String`](../data-types/string.md) или [`FixedString`](../data-types/fixedstring.md), преобразуются в строки с использованием их стандартной сериализации. -Поскольку это снижает производительность, не рекомендуется использовать аргументы других типов, отличных от String/FixedString. - -**Синтаксис** - -```sql -concat([s1, s2, ...]) -``` - -**Аргументы** - -* `s1, s2, ...` — Произвольное количество значений любого типа. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает строку, созданную путем конкатенации аргументов. Если хотя бы один из аргументов равен `NULL`, функция возвращает `NULL`. Если аргументы отсутствуют, возвращается пустая строка. [`Nullable(String)`](/sql-reference/data-types/nullable) - -**Примеры** - -**Конкатенация строк** - -```sql title=Query -SELECT concat('Привет, ', 'мир!') -``` - -```response title=Response -┌─concat('Hello, ', 'World!')─┐ -│ Hello, World! │ -└─────────────────────────────┘ -``` - -**Конкатенация чисел** - -```sql title=Query -SELECT concat(42, 144) -``` - -```response title=Response -┌─concat(42, 144)─┐ -│ 42144 │ -└─────────────────┘ -``` - - -## concatAssumeInjective - -Добавлена в: v1.1 - -Аналог функции [`concat`](#concat), но предполагает, что `concat(s1, s2, ...) → sn` является инъективной, -то есть возвращает разные результаты для разных аргументов. - -Может использоваться для оптимизации `GROUP BY`. - -**Синтаксис** - -```sql -concatAssumeInjective([s1, s2, ...]) -``` - -**Аргументы** - -* `s1, s2, ...` — Произвольное количество значений любых типов. [`String`](/sql-reference/data-types/string) или [`FixedString`](/sql-reference/data-types/fixedstring) - -**Возвращаемое значение** - -Возвращает строку, полученную конкатенацией аргументов. Если любое из значений аргументов равно `NULL`, функция возвращает `NULL`. Если не передано ни одного аргумента, возвращается пустая строка. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Оптимизация GROUP BY** - -```sql title=Query -SELECT concat(key1, key2), sum(value) FROM key_val GROUP BY concatAssumeInjective(key1, key2) -``` - -```response title=Response -┌─concat(key1, key2)─┬─sum(value)─┐ -│ Привет, мир! │ 3 │ -│ Привет, мир! │ 2 │ -│ Привет, мир │ 3 │ -└────────────────────┴────────────┘ -``` - - -## concatWithSeparator - -Добавлена в: v22.12 - -Объединяет переданные строки, вставляя между ними указанный разделитель. - -**Синтаксис** - -```sql -concatWithSeparator(sep[, exp1, exp2, ...]) -``` - -**Псевдонимы**: `concat_ws` - -**Аргументы** - -* `sep` — используемый разделитель. [`const String`](/sql-reference/data-types/string) или [`const FixedString`](/sql-reference/data-types/fixedstring) -* `exp1, exp2, ...` — выражения для конкатенации. Аргументы, тип которых не `String` или `FixedString`, преобразуются в строки с использованием их стандартной сериализации. Поскольку это снижает производительность, не рекомендуется использовать аргументы типов, отличных от String/FixedString. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает строку, созданную конкатенацией аргументов. Если какое-либо из значений аргументов равно `NULL`, функция возвращает `NULL`. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT concatWithSeparator('a', '1', '2', '3', '4') -``` - -```response title=Response -┌─concatWithSeparator('a', '1', '2', '3', '4')─┐ -│ 1a2a3a4 │ -└──────────────────────────────────────────────┘ -``` - - -## concatWithSeparatorAssumeInjective - -Введена в: v22.12 - -Аналог [`concatWithSeparator`](#concatWithSeparator), но предполагает, что `concatWithSeparator(sep[,exp1, exp2, ... ]) → result` является инъективной. -Функция считается инъективной, если она возвращает разные результаты для разных аргументов. - -Может использоваться для оптимизации `GROUP BY`. - -**Синтаксис** - -```sql -concatWithSeparatorAssumeInjective(sep[, exp1, exp2, ... ]) -``` - -**Аргументы** - -* `sep` — разделитель, который будет использоваться. [`const String`](/sql-reference/data-types/string) или [`const FixedString`](/sql-reference/data-types/fixedstring) -* `exp1, exp2, ...` — выражения для конкатенации. Аргументы, которые не имеют типа `String` или `FixedString`, преобразуются в строки с использованием их сериализации по умолчанию. Поскольку это снижает производительность, не рекомендуется использовать аргументы типов, отличных от String/FixedString. [`String`](/sql-reference/data-types/string) или [`FixedString`](/sql-reference/data-types/fixedstring) - -**Возвращаемое значение** - -Возвращает строку, полученную конкатенацией аргументов. Если какое-либо из значений аргументов равно `NULL`, функция возвращает `NULL`. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -CREATE TABLE user_data ( -user_id UInt32, -first_name String, -last_name String, -score UInt32 -) -ENGINE = MergeTree -ORDER BY tuple(); - -INSERT INTO user_data VALUES -(1, 'John', 'Doe', 100), -(2, 'Jane', 'Smith', 150), -(3, 'John', 'Wilson', 120), -(4, 'Jane', 'Smith', 90); - -SELECT - concatWithSeparatorAssumeInjective('-', first_name, last_name) as full_name, - sum(score) as total_score -FROM user_data -GROUP BY concatWithSeparatorAssumeInjective('-', first_name, last_name); -``` - -```response title=Response -┌─full_name───┬─total_score─┐ -│ Jane-Smith │ 240 │ -│ John-Doe │ 100 │ -│ John-Wilson │ 120 │ -└─────────────┴─────────────┘ -``` - - -## conv - -Впервые появилась в версии v1.1 - -Преобразует числа между различными системами счисления. - -Функция преобразует число из одной системы счисления в другую. Поддерживаются основания систем счисления от 2 до 36. -Для оснований больше 10 используются буквы A–Z (независимо от регистра) для представления цифр 10–35. - -Эта функция совместима с функцией MySQL CONV(). - -**Синтаксис** - -```sql -conv(number, from_base, to_base) -``` - -**Аргументы** - -* `number` — Число для преобразования. Может иметь строковый или числовой тип. - `from_base` — Исходная система счисления (2–36). Должно быть целым числом. - `to_base` — Целевая система счисления (2–36). Должно быть целым числом. - -**Возвращаемое значение** - -Строковое представление числа в целевой системе счисления. - -**Примеры** - -**Преобразование десятичного числа в двоичное** - -```sql title=Query -SELECT conv('10', 10, 2) -``` - -```response title=Response -1010 -``` - -**Преобразование шестнадцатеричных чисел в десятичные** - -```sql title=Query -SELECT conv('FF', 16, 10) -``` - -```response title=Response -255 -``` - -**Преобразование с отрицательным числом** - -```sql title=Query -SELECT conv('-1', 10, 16) -``` - -```response title=Response -FFFFFFFFFFFFFFFF -``` - -**Преобразовать двоичное число в восьмеричное** - -```sql title=Query -SELECT conv('1010', 2, 8) -``` - -```response title=Response -12 -``` - - -## convertCharset - -Появилась в версии: v1.1 - -Возвращает строку `s`, преобразованную из кодировки `from` в кодировку `to`. - -**Синтаксис** - -```sql -convertCharset(s, from, to) -``` - -**Аргументы** - -* `s` — входная строка. [`String`](/sql-reference/data-types/string) -* `from` — исходная кодировка. [`String`](/sql-reference/data-types/string) -* `to` — целевая кодировка. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает строку `s`, преобразованную из кодировки `from` в кодировку `to`. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT convertCharset('Café', 'UTF-8', 'ISO-8859-1'); -``` - -```response title=Response -┌─convertChars⋯SO-8859-1')─┐ -│ Caf� │ -└──────────────────────────┘ -``` - - -## damerauLevenshteinDistance - -Введена в версии: v24.1 - -Вычисляет [расстояние Дамерау — Левенштейна](https://en.wikipedia.org/wiki/Damerau%E2%80%93Levenshtein_distance) между двумя байтовыми строками. - -**Синтаксис** - -```sql -damerauLevenshteinDistance(s1, s2) -``` - -**Аргументы** - -* `s1` — первая входная строка. [`String`](/sql-reference/data-types/string) -* `s2` — вторая входная строка. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает расстояние Дамерау — Левенштейна между двумя строками. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT damerauLevenshteinDistance('clickhouse', 'mouse') -``` - -```response title=Response -┌─damerauLevenshteinDistance('clickhouse', 'mouse')─┐ -│ 6 │ -└───────────────────────────────────────────────────┘ -``` - - -## decodeHTMLComponent - -Введена в версии v23.9 - -Преобразует HTML-сущности в строке в соответствующие символы. - -**Синтаксис** - -```sql -decodeHTMLComponent(s) -``` - -**Аргументы** - -* `s` — строка, содержащая HTML-сущности для декодирования. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает строку с декодированными HTML-сущностями. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT decodeHTMLComponent('<div>Привет & "Мир"</div>') -``` - -```response title=Response -┌─decodeHTMLComponent('<div>Hello & "World"</div>')─┐ -│
Hello & "World"
│ -└─────────────────────────────────────────────────────────────────────────────┘ -``` - - -## decodeXMLComponent - -Впервые появилось в версии: v21.2 - -Декодирует XML-сущности в строке в соответствующие символы. - -**Синтаксис** - -```sql -decodeXMLComponent(s) -``` - -**Аргументы** - -* `s` — строка с XML-сущностями для декодирования. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает переданную строку с декодированными XML-сущностями. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT decodeXMLComponent('<tag>Привет & Мир</tag>') -``` - -```response title=Response -┌─decodeXMLCom⋯;/tag>')─┐ -│ Привет & мир │ -└──────────────────────────┘ -``` - - -## editDistance - -Добавлена в версии v23.9 - -Вычисляет [редакционное расстояние](https://en.wikipedia.org/wiki/Edit_distance) между двумя байтовыми строками. - -**Синтаксис** - -```sql -editDistance(s1, s2) -``` - -**Псевдонимы**: `levenshteinDistance` - -**Аргументы** - -* `s1` — Первая входная строка. [`String`](/sql-reference/data-types/string) -* `s2` — Вторая входная строка. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает расстояние редактирования между двумя строками. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT editDistance('clickhouse', 'mouse') -``` - -```response title=Response -┌─editDistance('clickhouse', 'mouse')─┐ -│ 6 │ -└─────────────────────────────────────┘ -``` - - -## editDistanceUTF8 - -Добавлена в версии: v24.6 - -Вычисляет [редакционное расстояние](https://en.wikipedia.org/wiki/Edit_distance) между двумя строками в кодировке UTF-8. - -**Синтаксис** - -```sql -editDistanceUTF8(s1, s2) -``` - -**Псевдонимы**: `levenshteinDistanceUTF8` - -**Аргументы** - -* `s1` — первая входная строка. [`String`](/sql-reference/data-types/string) -* `s2` — вторая входная строка. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает редакционное расстояние между двумя строками UTF-8. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT editDistanceUTF8('我是谁', '我是我') -``` - -```response title=Response -┌─editDistanceUTF8('我是谁', '我是我')──┐ -│ 1 │ -└─────────────────────────────────────┘ -``` - - -## encodeXMLComponent - -Появилась в версии: v21.1 - -Экранирует символы для помещения строки в текстовый узел или атрибут XML. - -**Синтаксис** - -```sql -encodeXMLComponent(s) -``` - -**Аргументы** - -* `s` — строка, которую нужно экранировать. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает экранированную строку. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT - 'Hello & "World"' AS original, - encodeXMLComponent('Hello & "World"') AS xml_encoded; -``` - -```response title=Response -┌─оригинал───────────────────┬─xml_кодированный──────────────────────────────────────────┐ -│ Hello & "World" │ <tag>Hello & "World"</tag> │ -└────────────────────────────┴──────────────────────────────────────────────────────┘ -``` - - -## endsWith - -Добавлена в версии: v1.1 - -Проверяет, оканчивается ли строка указанным суффиксом. - -**Синтаксис** - -```sql -endsWith(s, suffix) -``` - -**Аргументы** - -* `s` — Строка для проверки. [`String`](/sql-reference/data-types/string) -* `suffix` — Суффикс, наличие которого нужно проверить. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает `1`, если `s` заканчивается на `suffix`, иначе `0`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT endsWith('ClickHouse', 'House'); -``` - -```response title=Response -┌─endsWith('Cl⋯', 'House')─┐ -│ 1 │ -└──────────────────────────┘ -``` - - -## endsWithCaseInsensitive - -Добавлена в версии: v25.9 - -Проверяет, оканчивается ли строка заданным суффиксом без учета регистра. - -**Синтаксис** - -```sql -endsWithCaseInsensitive(s, suffix) -``` - -**Аргументы** - -* `s` — Строка, которую нужно проверить. [`String`](/sql-reference/data-types/string) -* `suffix` — Суффикс, проверяемый без учета регистра. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает `1`, если `s` оканчивается на суффикс `suffix` без учета регистра, иначе `0`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT endsWithCaseInsensitive('ClickHouse', 'HOUSE'); -``` - -```response title=Response -┌─endsWithCaseInsensitive('Cl⋯', 'HOUSE')─┐ -│ 1 │ -└─────────────────────────────────────────┘ -``` - - -## endsWithCaseInsensitiveUTF8 - -Добавлена в: v25.9 - -Возвращает, оканчивается ли строка `s` на `suffix` без учета регистра. -Предполагается, что строка содержит корректный текст в кодировке UTF-8. -Если это предположение нарушено, исключение не выбрасывается, и результат не определен. - -**Синтаксис** - -```sql -endsWithCaseInsensitiveUTF8(s, suffix) -``` - -**Аргументы** - -* `s` — строка для проверки. [`String`](/sql-reference/data-types/string) -* `suffix` — суффикс, сравнение с которым выполняется без учета регистра. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает `1`, если `s` оканчивается на `suffix` (сравнение без учета регистра), иначе `0`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT endsWithCaseInsensitiveUTF8('данных', 'ых'); -``` - -```response title=Response -┌─endsWithCaseInsensitiveUTF8('данных', 'ых')─┐ -│ 1 │ -└─────────────────────────────────────────────┘ -``` - - -## endsWithUTF8 - -Добавлена в: v23.8 - -Возвращает, оканчивается ли строка `s` суффиксом `suffix`. -Предполагается, что строка содержит текст в корректной кодировке UTF-8. -Если это предположение нарушено, исключение не генерируется и результат не определён. - -**Синтаксис** - -```sql -endsWithUTF8(s, suffix) -``` - -**Аргументы** - -* `s` — Строка для проверки. [`String`](/sql-reference/data-types/string) -* `suffix` — Суффикс, который нужно проверить. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает `1`, если `s` заканчивается на `suffix`, иначе `0`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT endsWithUTF8('данных', 'ых'); -``` - -```response title=Response -┌─endsWithUTF8('данных', 'ых')─┐ -│ 1 │ -└──────────────────────────────┘ -``` - - -## extractTextFromHTML - -Введена в: v21.3 - -Извлекает текстовое содержимое из HTML или XHTML. - -Эта функция удаляет HTML-теги, комментарии и элементы script/style, оставляя только текст. Она выполняет: - -* Удаление всех HTML/XML-тегов -* Удаление комментариев (``) -* Удаление элементов script и style вместе с их содержимым -* Обработку секций CDATA (копируются дословно) -* Корректную обработку и нормализацию пробельных символов - -Примечание: HTML-сущности не декодируются и при необходимости должны обрабатываться отдельной функцией. - -**Синтаксис** - -```sql -extractTextFromHTML(html) -``` - -**Аргументы** - -* `html` — строка, содержащая HTML‑код, из которого нужно извлечь текст. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает извлечённый текст с нормализованными пробелами. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT extractTextFromHTML(' - - Заголовок страницы - -

Привет, мир!

- - - - -'); -``` - -```response title=Response -┌─extractTextFromHTML('...')─┐ -│ Заголовок страницы «Привет, мир!» │ -└────────────────────────────────────────┘ -``` - - -## firstLine - -Введена в версии: v23.7 - -Возвращает первую строку многострочной строки. - -**Синтаксис** - -```sql -firstLine(s) -``` - -**Аргументы** - -* `s` — входная строка. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает первую строку входной строки или всю строку, если в ней нет разделителей строк. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT firstLine('foo\\nbar\\nbaz') -``` - -```response title=Response -┌─firstLine('foo\nbar\nbaz')─┐ -│ foo │ -└────────────────────────────┘ -``` - - -## idnaDecode - -Появилась в версии v24.1 - -Возвращает Unicode-представление (UTF-8) доменного имени (алгоритм ToUnicode) в соответствии с механизмом [Internationalized Domain Names in Applications](https://en.wikipedia.org/wiki/Internationalized_domain_name#Internationalizing_Domain_Names_in_Applications) (IDNA). -В случае ошибки (например, из-за некорректного входного значения) возвращается исходная строка. -Обратите внимание, что повторное применение [`idnaEncode()`](#idnaEncode) и [`idnaDecode()`](#idnaDecode) не обязательно возвращает исходную строку из-за нормализации регистра. - -**Синтаксис** - -```sql -idnaDecode(s) -``` - -**Аргументы** - -* `s` — входная строка. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает представление входной строки в кодировке Unicode (UTF-8) в соответствии с механизмом IDNA для данного значения. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT idnaDecode('xn--strae-oqa.xn--mnchen-3ya.de') -``` - -```response title=Response -┌─idnaDecode('xn--strae-oqa.xn--mnchen-3ya.de')─┐ -│ straße.münchen.de │ -└───────────────────────────────────────────────┘ -``` - - -## idnaEncode - -Введена в версии v24.1 - -Возвращает ASCII-представление (алгоритм ToASCII) доменного имени в соответствии с механизмом [Internationalized Domain Names in Applications](https://en.wikipedia.org/wiki/Internationalized_domain_name#Internationalizing_Domain_Names_in_Applications) (IDNA). -Входная строка должна быть закодирована в UTF и преобразуема в ASCII-строку, иначе будет выброшено исключение. - -:::note -Не выполняется декодирование percent-encoding и удаление табуляций, пробелов или управляющих символов. -::: - -**Синтаксис** - -```sql -idnaEncode(s) -``` - -**Аргументы** - -* `s` — входная строка. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает ASCII-представление входной строки в соответствии с механизмом IDNA для входного значения. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT idnaEncode('straße.münchen.de') -``` - -```response title=Response -┌─idnaEncode('straße.münchen.de')─────┐ -│ xn--strae-oqa.xn--mnchen-3ya.de │ -└─────────────────────────────────────┘ -``` - - -## initcap - -Впервые появилась в: v23.7 - -Преобразует первую букву каждого слова в верхний регистр, а остальные — в нижний. -Слова представляют собой последовательности буквенно-цифровых символов, разделённые небуквенно-цифровыми символами. - -:::note -Поскольку `initcap` преобразует в верхний регистр только первую букву каждого слова, вы можете наблюдать неожиданное поведение для слов, содержащих апострофы или заглавные буквы. -Это известное поведение, и в настоящее время нет планов его менять. -::: - -**Синтаксис** - -```sql -initcap(s) -``` - -**Аргументы** - -* `s` — входная строка. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает `s`, в которой первая буква каждого слова преобразована в верхний регистр. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT initcap('создано для скорости') -``` - -```response title=Response -┌─initcap('building for fast')─┐ -│ Сборка Для Скорости │ -└──────────────────────────────┘ -``` - -**Пример известного поведения при работе со словами, содержащими апострофы или прописные буквы** - -```sql title=Query -SELECT initcap('Кот Джона не ест.'); -``` - -```response title=Response -┌─initcap('Joh⋯n\'t eat.')─┐ -│ John'S Cat Won'T Eat. │ -└──────────────────────────┘ -``` - - -## initcapUTF8 - -Появилась в версии: v23.7 - -Как и [`initcap`](#initcap), `initcapUTF8` преобразует первую букву каждого слова в верхний регистр, а остальные — в нижний. -Предполагается, что строка содержит корректный текст в кодировке UTF-8. -Если это предположение нарушено, исключение не генерируется, а результат не определён. - -:::note -Эта функция не определяет язык, поэтому, например, для турецкого результата может быть недостаточно корректным (i/İ vs. i/I). -Если длина байтовой последовательности UTF-8 отличается для верхнего и нижнего регистра одной и той же кодовой точки, результат для этой кодовой точки может быть некорректным. -::: - -**Синтаксис** - -```sql -initcapUTF8(s) -``` - -**Аргументы** - -* `s` — входная строка. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает `s`, где первая буква каждого слова преобразована в верхний регистр. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT initcapUTF8('Не Тормозит') -``` - -```response title=Response -┌─initcapUTF8('не тормозит')─┐ -│ Не тормозит │ -└────────────────────────────┘ -``` - - -## isValidASCII - -Появилась в версии: v25.9 - -Возвращает 1, если входной `String` или `FixedString` содержит только байты в диапазоне ASCII (0x00–0x7F), в противном случае — 0. - -**Синтаксис** - -```sql -``` - -**Псевдонимы**: `isASCII` - -**Аргументы** - -* Нет. - -**Возвращаемое значение** - -**Примеры** - -**isValidASCII** - -```sql title=Query -SELECT isValidASCII('hello') AS is_ascii, isValidASCII('你好') AS is_not_ascii -``` - -```response title=Response -``` - - -## isValidUTF8 - -Добавлена в: v20.1 - -Проверяет, представляет ли набор байтов корректно закодированный в UTF-8 текст. - -**Синтаксис** - -```sql -isValidUTF8(s) -``` - -**Аргументы** - -* `s` — Строка для проверки на корректность кодирования в UTF-8. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает `1`, если набор байтов представляет собой корректный текст в кодировке UTF-8, иначе `0`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT isValidUTF8('\\xc3\\xb1') AS корректный, isValidUTF8('\\xc3\\x28') AS некорректный -``` - -```response title=Response -┌─валидные─┬─невалидные─┐ -│ 1 │ 0 │ -└───────┴─────────┘ -``` - - -## jaroSimilarity - -Введена в версии: v24.1 - -Вычисляет [метрику сходства Яро](https://en.wikipedia.org/wiki/Jaro%E2%80%93Winkler_distance#Jaro_similarity) между двумя байтовыми строками. - -**Синтаксис** - -```sql -jaroSimilarity(s1, s2) -``` - -**Аргументы** - -* `s1` — первая входная строка. [`String`](/sql-reference/data-types/string) -* `s2` — вторая входная строка. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает коэффициент сходства Джаро для двух строк. [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT jaroSimilarity('clickhouse', 'click') -``` - -```response title=Response -┌─jaroSimilarity('clickhouse', 'click')─┐ -│ 0.8333333333333333 │ -└───────────────────────────────────────┘ -``` - - -## jaroWinklerSimilarity - -Добавлена в версии: v24.1 - -Вычисляет [сходство по метрике Джаро — Винклера](https://en.wikipedia.org/wiki/Jaro%E2%80%93Winkler_distance) между двумя строками байтов. - -**Синтаксис** - -```sql -jaroWinklerSimilarity(s1, s2) -``` - -**Аргументы** - -* `s1` — первая входная строка. [`String`](/sql-reference/data-types/string) -* `s2` — вторая входная строка. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает коэффициент сходства Джаро — Уинклера между двумя строками. [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT jaroWinklerSimilarity('clickhouse', 'click') -``` - -```response title=Response -┌─jaroWinklerSimilarity('clickhouse', 'click')─┐ -│ 0.8999999999999999 │ -└──────────────────────────────────────────────┘ -``` - - -## left - -Добавлена в версии: v22.1 - -Возвращает подстроку из строки `s` с указанным смещением `offset`, считая от левого края. - -**Синтаксис** - -```sql -left(s, offset) -``` - -**Аргументы** - -* `s` — Строка, из которой извлекается подстрока. [`String`](/sql-reference/data-types/string) или [`FixedString`](/sql-reference/data-types/fixedstring) -* `offset` — Число байт смещения. [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает: - -* Для положительного `offset` — подстроку `s` длиной `offset` байт, начиная с начала строки. -* Для отрицательного `offset` — подстроку `s` длиной `length(s) - |offset|` байт, начиная с начала строки. -* Пустую строку, если `length` равно `0`. - [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Положительное смещение** - -```sql title=Query -SELECT left('Hello World', 5) -``` - -```response title=Response -Привет -``` - -**Отрицательное смещение** - -```sql title=Query -SELECT left('Hello World', -6) -``` - -```response title=Response -Здравствуйте -``` - - -## leftPad - -Впервые появился в: v21.8 - -Дополняет строку слева пробелами или указанной строкой (повторяя её при необходимости), пока результирующая строка не достигнет заданного значения `length`. - -**Синтаксис** - -```sql -leftPad(string, length[, pad_string]) -``` - -**Псевдонимы**: `lpad` - -**Аргументы** - -* `string` — Входная строка, которую необходимо дополнить. [`String`](/sql-reference/data-types/string) -* `length` — Длина результирующей строки. Если значение меньше длины входной строки, то входная строка укорачивается до `length` символов. [`(U)Int*`](/sql-reference/data-types/int-uint) -* `pad_string` — Необязательный параметр. Строка, которой дополняется входная строка. Если параметр не указан, входная строка дополняется пробелами. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает строку заданной длины, дополненную слева. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT leftPad('abc', 7, '*'), leftPad('def', 7) -``` - -```response title=Response -┌─leftPad('abc', 7, '*')─┬─leftPad('def', 7)─┐ -│ ****abc │ def │ -└────────────────────────┴───────────────────┘ -``` - - -## leftPadUTF8 - -Добавлено в: v21.8 - -Дополняет строку в UTF-8 слева пробелами или указанной строкой (при необходимости — многократно) до тех пор, пока результирующая строка не достигнет заданной длины. -В отличие от [`leftPad`](#leftPad), где длина строки измеряется в байтах, здесь длина строки измеряется в кодовых точках. - -**Синтаксис** - -```sql -leftPadUTF8(string, length[, pad_string]) -``` - -**Аргументы** - -* `string` — Входная строка, которую необходимо дополнить. [`String`](/sql-reference/data-types/string) -* `length` — Длина результирующей строки. Если значение меньше длины входной строки, входная строка укорачивается до `length` символов. [`(U)Int*`](/sql-reference/data-types/int-uint) -* `pad_string` — Необязательный параметр. Строка, используемая для дополнения входной строки. Если параметр не задан, входная строка дополняется пробелами. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает строку, дополненную слева до заданной длины. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT leftPadUTF8('абвг', 7, '*'), leftPadUTF8('дежз', 7) -``` - -```response title=Response -┌─leftPadUTF8('абвг', 7, '*')─┬─leftPadUTF8('дежз', 7)─┐ -│ ***абвг │ дежз │ -└─────────────────────────────┴────────────────────────┘ -``` - - -## leftUTF8 - -Добавлена в: v22.1 - -Возвращает подстроку строки `s` в кодировке UTF‑8 с заданным смещением `offset`, начиная слева. - -**Синтаксис** - -```sql -leftUTF8(s, offset) -``` - -**Аргументы** - -* `s` — Строка в кодировке UTF-8, из которой извлекается подстрока. [`String`](/sql-reference/data-types/string) или [`FixedString`](/sql-reference/data-types/fixedstring) -* `offset` — Количество байт смещения. [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает: - -* Для положительного `offset` — подстроку `s` длиной `offset` байт, начиная с начала строки.\n" -* Для отрицательного `offset` — подстроку `s` длиной `length(s) - |offset|` байт, начиная с начала строки.\n" -* Пустую строку, если `length` равно 0. - [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Положительное смещение** - -```sql title=Query -SELECT leftUTF8('Привет', 4) -``` - -```response title=Response -Прив -``` - -**Отрицательное смещение** - -```sql title=Query -SELECT leftUTF8('Привет', -4) -``` - -```response title=Response -Пр -``` - - -## lengthUTF8 - -Добавлена в: v1.1 - -Возвращает длину строки в кодовых точках Unicode, а не в байтах или символах. -Предполагается, что строка содержит корректный текст в кодировке UTF-8. -Если это предположение нарушено, исключение не генерируется, а результат становится неопределённым. - -**Синтаксис** - -```sql -lengthUTF8(s) -``` - -**Псевдонимы**: `CHAR_LENGTH`, `CHARACTER_LENGTH` - -**Аргументы** - -* `s` — строка с корректно закодированным в UTF-8 текстом. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Длина строки `s` в кодовых точках Unicode. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT lengthUTF8('Здравствуй, мир!') -``` - -```response title=Response -┌─lengthUTF8('Здравствуй, мир!')─┐ -│ 16 │ -└────────────────────────────────┘ -``` - - -## lower - -Добавлена в версии: v1.1 - -Преобразует ASCII-строку в нижний регистр. - -**Синтаксис** - -```sql -lower(s) -``` - -**Псевдонимы**: `lcase` - -**Аргументы** - -* `s` — строка, которую нужно преобразовать в нижний регистр. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает строку `s` в нижнем регистре. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT lower('CLICKHOUSE') -``` - -```response title=Response -┌─lower('CLICKHOUSE')─┐ -│ clickhouse │ -└─────────────────────┘ -``` - - -## lowerUTF8 - -Добавлена в версии: v1.1 - -Преобразует строку в нижний регистр, предполагая, что строка содержит корректный текст в кодировке UTF-8. Если это предположение нарушается, исключение не генерируется, а результат не определён. - -**Синтаксис** - -```sql -lowerUTF8(input) -``` - -**Аргументы** - -* `input` — входная строка для преобразования в нижний регистр. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает строку в нижнем регистре. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Первый** - -```sql title=Query -SELECT lowerUTF8('München') as Lowerutf8; -``` - -```response title=Response -Мюнхен -``` - - -## normalizeUTF8NFC - -Впервые появилась в версии: v21.11 - -Нормализует строку в кодировке UTF-8 в соответствии с [формой нормализации NFC](https://en.wikipedia.org/wiki/Unicode_equivalence#Normal_forms). - -**Синтаксис** - -```sql -normalizeUTF8NFC(str) -``` - -**Аргументы** - -* `str` — входная строка в кодировке UTF-8. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает строку в нормализованной форме NFC для UTF-8. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT -'é' AS original, -- e + комбинируемый диакритический знак острого ударения (U+0065 + U+0301) -length(original), -normalizeUTF8NFC('é') AS nfc_normalized, -- é (U+00E9) -length(nfc_normalized); -``` - -```response title=Response -┌─original─┬─length(original)─┬─nfc_normalized─┬─length(nfc_normalized)─┐ -│ é │ 2 │ é │ 2 │ -└──────────┴──────────────────┴────────────────┴────────────────────────┘ -``` - - -## normalizeUTF8NFD - -Добавлено в версии: v21.11 - -Нормализует строку в кодировке UTF-8 в соответствии с [нормальной формой NFD](https://en.wikipedia.org/wiki/Unicode_equivalence#Normal_forms). - -**Синтаксис** - -```sql -normalizeUTF8NFD(str) -``` - -**Аргументы** - -* `str` — входная строка в кодировке UTF-8. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает строку UTF-8 в нормализованной форме NFD. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT - 'é' AS original, -- é (U+00E9) - length(original), - normalizeUTF8NFD('é') AS nfd_normalized, -- e + комбинирующий острый акцент (U+0065 + U+0301) - length(nfd_normalized); -``` - -```response title=Response -┌─original─┬─length(original)─┬─nfd_normalized─┬─length(nfd_normalized)─┐ -│ é │ 2 │ é │ 3 │ -└──────────┴──────────────────┴────────────────┴────────────────────────┘ -``` - - -## normalizeUTF8NFKC - -Введена в версии: v21.11 - -Нормализует строку в кодировке UTF-8 в соответствии с [формой нормализации NFKC](https://en.wikipedia.org/wiki/Unicode_equivalence#Normal_forms). - -**Синтаксис** - -```sql -normalizeUTF8NFKC(str) -``` - -**Аргументы** - -* `str` — входная строка в кодировке UTF-8. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает строку, нормализованную в форме NFKC, в кодировке UTF-8. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT - '① ② ③' AS original, -- Символы цифр в кружках - normalizeUTF8NFKC('① ② ③') AS nfkc_normalized; -- Преобразует в 1 2 3 -``` - -```response title=Response -┌─original─┬─nfkc_normalized─┐ -│ ① ② ③ │ 1 2 3 │ -└──────────┴─────────────────┘ -``` - - -## normalizeUTF8NFKD - -Появилась в версии: v21.11 - -Нормализует строку в кодировке UTF-8 в соответствии с [формой нормализации NFKD](https://en.wikipedia.org/wiki/Unicode_equivalence#Normal_forms). - -**Синтаксис** - -```sql -normalizeUTF8NFKD(str) -``` - -**Аргументы** - -* `str` — входная строка в кодировке UTF-8. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает строку в кодировке UTF-8 в нормализованной форме NFKD. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT - 'H₂O²' AS original, -- H + нижний индекс 2 + O + верхний индекс 2 - normalizeUTF8NFKD('H₂O²') AS nfkd_normalized; -- Преобразует в H 2 O 2 -``` - -```response title=Response -┌─original─┬─nfkd_normalized─┐ -│ H₂O² │ H2O2 │ -└──────────┴─────────────────┘ -``` - - -## punycodeDecode - -Добавлена в: v24.1 - -Возвращает текст в кодировке UTF-8 из строки, закодированной в формате [Punycode](https://en.wikipedia.org/wiki/Punycode). -Если передана строка, не являющаяся корректной строкой в кодировке Punycode, генерируется исключение. - -**Синтаксис** - -```sql -punycodeDecode(s) -``` - -**Аргументы** - -* `s` — строка, закодированная в Punycode. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает исходную строку для входного значения. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT punycodeDecode('Mnchen-3ya') -``` - -```response title=Response -┌─punycodeDecode('Mnchen-3ya')─┐ -│ Мюнхен │ -└──────────────────────────────┘ -``` - - -## punycodeEncode - -Добавлено в: v24.1 - -Возвращает представление строки в формате [Punycode](https://en.wikipedia.org/wiki/Punycode). -Строка должна быть закодирована в UTF-8, иначе поведение не определено. - -**Синтаксис** - -```sql -punycodeEncode(s) -``` - -**Аргументы** - -* `s` — входное значение. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает представление входного значения в кодировке Punycode. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT punycodeEncode('Münхен') -``` - -```response title=Response -┌─punycodeEncode('München')─┐ -│ Mnchen-3ya │ -└───────────────────────────┘ -``` - - -## regexpExtract - -Появилась в версии: v23.2 - -Извлекает первую подстроку в `haystack`, которая соответствует шаблону регулярного выражения и относится к указанному индексу группы в регулярном выражении. - -**Синтаксис** - -```sql -regexpExtract(haystack, pattern[, index]) -``` - -**Псевдонимы**: `REGEXP_EXTRACT` - -**Аргументы** - -* `haystack` — Строка, в которой выполняется поиск по регулярному выражению. [`String`](/sql-reference/data-types/string) -* `pattern` — Строка, шаблон регулярного выражения. `pattern` может содержать несколько групп регулярного выражения, `index` указывает, какую группу извлечь. Индекс 0 означает совпадение со всем регулярным выражением. [`const String`](/sql-reference/data-types/string) -* `index` — Необязательный аргумент. Целое число больше или равно 0, по умолчанию — 1. Определяет, какую группу регулярного выражения извлечь. [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает строку с найденным совпадением. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT - regexpExtract('100-200', '(\\d+)-(\\d+)', 1), - regexpExtract('100-200', '(\\d+)-(\\d+)', 2), - regexpExtract('100-200', '(\\d+)-(\\d+)', 0), - regexpExtract('100-200', '(\\d+)-(\\d+)'); -``` - -```response title=Response -┌─regexpExtract('100-200', '(\\d+)-(\\d+)', 1)─┬─regexpExtract('100-200', '(\\d+)-(\\d+)', 2)─┬─regexpExtract('100-200', '(\\d+)-(\\d+)', 0)─┬─regexpExtract('100-200', '(\\d+)-(\\d+)')─┐ -│ 100 │ 200 │ 100-200 │ 100 │ -└──────────────────────────────────────────────┴──────────────────────────────────────────────┴──────────────────────────────────────────────┴───────────────────────────────────────────┘ -``` - - -## repeat - -Добавлена в версии: v20.1 - -Повторяет строку указанное количество раз. - -**Синтаксис** - -```sql -repeat(s, n) -``` - -**Аргументы** - -* `s` — Строка для повторения. [`String`](/sql-reference/data-types/string) -* `n` — Количество повторений строки. [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Строка, содержащая строку `s`, повторённую `n` раз. Если `n` — отрицательное число, функция возвращает пустую строку. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT repeat('abc', 10) -``` - -```response title=Response -┌─repeat('abc', 10)──────────────┐ -│ abcabcabcabcabcabcabcabcabcabc │ -└────────────────────────────────┘ -``` - - -## reverseUTF8 - -Добавлена в версии: v1.1 - -Разворачивает последовательность кодовых точек Unicode в строке. -Предполагается, что строка содержит корректный текст в кодировке UTF-8. -Если это предположение нарушено, исключение не генерируется, и результат не определён. - -**Синтаксис** - -```sql -reverseUTF8(s) -``` - -**Аргументы** - -* `s` — строка, содержащая текст в корректной кодировке UTF-8. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает строку с последовательностью кодовых точек Unicode в обратном порядке. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT reverseUTF8('ClickHouse') -``` - -```response title=Response -esuoHkcilC -``` - - -## right - -Впервые представлена в версии v22.1 - -Возвращает подстроку строки `s` с заданным смещением `offset`, считая от правого края. - -**Синтаксис** - -```sql -right(s, offset) -``` - -**Аргументы** - -* `s` — Строка, для которой вычисляется подстрока. [`String`](/sql-reference/data-types/string) или [`FixedString`](/sql-reference/data-types/fixedstring) -* `offset` — Смещение в байтах. [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает: - -* Для положительного `offset` — подстроку `s` длиной `offset` байт, начиная с правого конца строки. -* Для отрицательного `offset` — подстроку `s` длиной `length(s) - |offset|` байт, начиная с правого конца строки. -* Пустую строку, если `length` равно `0`. - [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Положительное смещение** - -```sql title=Query -SELECT right('Hello', 3) -``` - -```response title=Response -лло -``` - -**Отрицательное смещение** - -```sql title=Query -SELECT right('Hello', -3) -``` - -```response title=Response -lo -``` - - -## rightPad - -Введена в: v21.8 - -Дополняет строку справа пробелами или указанной строкой (при необходимости — несколько раз), пока результирующая строка не достигнет заданной длины `length`. - -**Синтаксис** - -```sql -rightPad(string, length[, pad_string]) -``` - -**Псевдонимы**: `rpad` - -**Аргументы** - -* `string` — Входная строка, которую нужно дополнить. [`String`](/sql-reference/data-types/string) -* `length` — Длина результирующей строки. Если значение меньше длины входной строки, то входная строка укорачивается до `length` символов. [`(U)Int*`](/sql-reference/data-types/int-uint) -* `pad_string` — Необязательный параметр. Строка, которой дополняется входная строка. Если параметр не задан, входная строка дополняется пробелами. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает строку заданной длины, дополненную справа. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT rightPad('abc', 7, '*'), rightPad('abc', 7) -``` - -```response title=Response -┌─rightPad('abc', 7, '*')─┬─rightPad('abc', 7)─┐ -│ abc**** │ abc │ -└─────────────────────────┴────────────────────┘ -``` - - -## rightPadUTF8 - -Добавлена в: v21.8 - -Дополняет строку справа пробелами или указанной строкой (при необходимости многократно) до тех пор, пока результирующая строка не достигнет заданной длины. -В отличие от [`rightPad`](#rightPad), который измеряет длину строки в байтах, здесь длина строки измеряется в кодовых точках. - -**Синтаксис** - -```sql -rightPadUTF8(string, length[, pad_string]) -``` - -**Аргументы** - -* `string` — Входная строка, которую необходимо дополнить. [`String`](/sql-reference/data-types/string) -* `length` — Длина результирующей строки. Если значение меньше длины входной строки, то входная строка сокращается до `length` символов. [`(U)Int*`](/sql-reference/data-types/int-uint) -* `pad_string` — Необязательный параметр. Строка, которой дополняется входная строка. Если параметр не указан, входная строка дополняется пробелами. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает строку заданной длины, дополненную справа. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT rightPadUTF8('абвг', 7, '*'), rightPadUTF8('абвг', 7) -``` - -```response title=Response -┌─rightPadUTF8('абвг', 7, '*')─┬─rightPadUTF8('абвг', 7)─┐ -│ абвг*** │ абвг │ -└──────────────────────────────┴─────────────────────────┘ -``` - - -## rightUTF8 - -Появилась в версии: v22.1 - -Возвращает подстроку строки в кодировке UTF-8 `s` с указанным `offset`, отсчитываемым справа. - -**Синтаксис** - -```sql -rightUTF8(s, offset) -``` - -**Аргументы** - -* `s` — Строка в кодировке UTF-8, из которой вычисляется подстрока. [`String`](/sql-reference/data-types/string) или [`FixedString`](/sql-reference/data-types/fixedstring) -* `offset` — Количество байт смещения. [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает: - -* Для положительного `offset` — подстроку `s` длиной `offset` байт, начиная с конца строки. -* Для отрицательного `offset` — подстроку `s` длиной `length(s) - |offset|` байт, начиная с конца строки. -* Пустую строку, если `length` равен `0`. - [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Положительное смещение** - -```sql title=Query -SELECT rightUTF8('Привет', 4) -``` - -```response title=Response -ивет -``` - -**Отрицательное смещение** - -```sql title=Query -SELECT rightUTF8('Привет', -4) -``` - -```response title=Response -ет -``` - - -## soundex - -Добавлена в версии v23.4 - -Возвращает [код Soundex](https://en.wikipedia.org/wiki/Soundex) для строки. - -**Синтаксис** - -```sql -soundex(s) -``` - -**Аргументы** - -* `s` — входная строка. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает код Soundex входной строки. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT soundex('aksel') -``` - -```response title=Response -┌─soundex('aksel')─┐ -│ A240 │ -└──────────────────┘ -``` - - -## space - -Добавлено в версии: v23.5 - -Возвращает строку, состоящую из символа пробела (` `), повторённого указанное количество раз. - -**Синтаксис** - -```sql -space(n) -``` - -**Аргументы** - -* `n` — Количество повторов пробела. [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает строку, состоящую из пробела, повторённого `n` раз. Если `n <= 0`, функция возвращает пустую строку. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT space(3) AS res, length(res); -``` - -```response title=Response -┌─res─┬─length(res)─┐ -│ │ 3 │ -└─────┴─────────────┘ -``` - - -## sparseGrams - -Добавлена в: v25.5 - -Находит все подстроки заданной строки длиной не менее `n`, -для которых хэши (n-1)-грамм на концах подстроки -строго больше хэшей любых (n-1)-грамм внутри подстроки. -Использует `CRC32` в качестве хеш-функции. - -**Синтаксис** - -```sql -sparseGrams(s[, min_ngram_length, max_ngram_length]) -``` - -**Аргументы** - -* `s` — Входная строка. [`String`](/sql-reference/data-types/string) -* `min_ngram_length` — Необязательный параметр. Минимальная длина извлекаемой n-граммы. Значение по умолчанию и минимальное значение — 3. [`UInt*`](/sql-reference/data-types/int-uint) -* `max_ngram_length` — Необязательный параметр. Максимальная длина извлекаемой n-граммы. Значение по умолчанию — 100. Не должно быть меньше `min_ngram_length`. [`UInt*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает массив выбранных подстрок. [`Array(String)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT sparseGrams('alice', 3) -``` - -```response title=Response -┌─sparseGrams('alice', 3)────────────┐ -│ ['ali','lic','lice','ice'] │ -└────────────────────────────────────┘ -``` - - -## sparseGramsHashes - -Добавлена в версии: v25.5 - -Находит хеши всех подстрок заданной строки длиной не менее `n`, -для которых хеши (n-1)-грамм на границах подстроки -строго больше, чем хеши любых (n-1)-грамм внутри подстроки. -В качестве хеш-функции используется `CRC32`. - -**Синтаксис** - -```sql -sparseGramsHashes(s[, min_ngram_length, max_ngram_length]) -``` - -**Аргументы** - -* `s` — входная строка. [`String`](/sql-reference/data-types/string) -* `min_ngram_length` — необязательный параметр. Минимальная длина извлекаемой n-граммы. Значение по умолчанию и минимальное значение — 3. [`UInt*`](/sql-reference/data-types/int-uint) -* `max_ngram_length` — необязательный параметр. Максимальная длина извлекаемой n-граммы. Значение по умолчанию — 100. Должно быть не меньше `min_ngram_length`. [`UInt*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает массив хешей CRC32 выбранных подстрок. [`Array(UInt32)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT sparseGramsHashes('alice', 3) -``` - -```response title=Response -┌─sparseGramsHashes('alice', 3)──────────────────────┐ -│ [1481062250,2450405249,4012725991,1918774096] │ -└────────────────────────────────────────────────────┘ -``` - - -## sparseGramsHashesUTF8 - -Введена в версии v25.5 - -Находит хеши всех подстрок заданной строки в кодировке UTF-8, имеющих длину не менее `n`, для которых хеши (n-1)-грамм на границах подстроки строго больше хешей любых (n-1)-грамм внутри подстроки. -Ожидает строку в кодировке UTF-8, вызывает исключение в случае некорректной последовательности в кодировке UTF-8. -Использует `CRC32` в качестве хеш-функции. - -**Синтаксис** - -```sql -sparseGramsHashesUTF8(s[, min_ngram_length, max_ngram_length]) -``` - -**Аргументы** - -* `s` — Входная строка. [`String`](/sql-reference/data-types/string) -* `min_ngram_length` — Необязательный параметр. Минимальная длина извлекаемой n-граммы. Значение по умолчанию и минимальное значение — 3. [`UInt*`](/sql-reference/data-types/int-uint) -* `max_ngram_length` — Необязательный параметр. Максимальная длина извлекаемой n-граммы. Значение по умолчанию — 100. Не должно быть меньше `min_ngram_length`. [`UInt*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает массив хешей CRC32 выбранных подстрок в кодировке UTF-8. [`Array(UInt32)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT sparseGramsHashesUTF8('алиса', 3) -``` - -```response title=Response -┌─sparseGramsHashesUTF8('алиса', 3)─┐ -│ [4178533925,3855635300,561830861] │ -└───────────────────────────────────┘ -``` - - -## sparseGramsUTF8 - -Добавлена в версии: v25.5 - -Находит все подстроки заданной строки в кодировке UTF-8 длиной не менее `n`, для которых хеши (n-1)-грамм на границах подстроки строго больше, чем хеши любых (n-1)-грамм внутри подстроки. -Ожидает строку в кодировке UTF-8; при некорректной последовательности UTF-8 выбрасывает исключение. -Использует `CRC32` в качестве функции хеширования. - -**Синтаксис** - -```sql -sparseGramsUTF8(s[, min_ngram_length, max_ngram_length]) -``` - -**Аргументы** - -* `s` — Входная строка. [`String`](/sql-reference/data-types/string) -* `min_ngram_length` — Необязательный параметр. Минимальная длина извлекаемой n-граммы. Значение по умолчанию и минимальное значение — 3. [`UInt*`](/sql-reference/data-types/int-uint) -* `max_ngram_length` — Необязательный параметр. Максимальная длина извлекаемой n-граммы. Значение по умолчанию — 100. Не должно быть меньше `min_ngram_length`. [`UInt*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает массив выбранных подстрок в кодировке UTF-8. [`Array(String)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT sparseGramsUTF8('алиса', 3) -``` - -```response title=Response -┌─sparseGramsUTF8('алиса', 3)─┐ -│ ['али','лис','иса'] │ -└─────────────────────────────┘ -``` - - -## startsWith - -Впервые появился в: v1.1 - -Проверяет, начинается ли строка с указанной строки. - -**Синтаксис** - -```sql -startsWith(s, prefix) -``` - -**Аргументы** - -* `s` — Строка, которую нужно проверить. [`String`](/sql-reference/data-types/string) -* `prefix` — Префикс, который нужно проверить. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает `1`, если `s` начинается с `prefix`, иначе `0`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT startsWith('ClickHouse', 'Click'); -``` - -```response title=Response -┌─startsWith('⋯', 'Click')─┐ -│ 1 │ -└──────────────────────────┘ -``` - - -## startsWithCaseInsensitive - -Появилась в версии: v25.9 - -Проверяет, начинается ли строка с указанной строки без учета регистра. - -**Синтаксис** - -```sql -startsWithCaseInsensitive(s, prefix) -``` - -**Аргументы** - -* `s` — строка для проверки. [`String`](/sql-reference/data-types/string) -* `prefix` — префикс для проверки без учета регистра. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает `1`, если `s` начинается с `prefix` без учета регистра, иначе `0`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT startsWithCaseInsensitive('ClickHouse', 'CLICK'); -``` - -```response title=Response -┌─startsWithCaseInsensitive('⋯', 'CLICK')─┐ -│ 1 │ -└─────────────────────────────────────────┘ -``` - - -## startsWithCaseInsensitiveUTF8 - -Появилась в версии: v25.9 - -Проверяет, начинается ли строка с указанного префикса без учета регистра. -Предполагается, что строка содержит корректный текст в кодировке UTF-8. -Если это предположение нарушено, исключение не выбрасывается, и результат не определён. - -**Синтаксис** - -```sql -startsWithCaseInsensitiveUTF8(s, prefix) -``` - -**Аргументы** - -* `s` — строка для проверки. [`String`](/sql-reference/data-types/string) -* `prefix` — префикс для проверки без учета регистра. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает `1`, если `s` начинается с `prefix` без учета регистра, иначе `0`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT startsWithCaseInsensitiveUTF8('приставка', 'при') -``` - -```response title=Response -┌─startsWithUT⋯ка', 'при')─┐ -│ 1 │ -└──────────────────────────┘ -``` - - -## startsWithUTF8 - -Добавлено в: v23.8 - -Проверяет, начинается ли строка с указанного префикса. -Предполагается, что строка содержит корректный текст в кодировке UTF-8. -Если это предположение нарушено, исключение не выбрасывается, и результат не определён. - -**Синтаксис** - -```sql -startsWithUTF8(s, prefix) -``` - -**Аргументы** - -* `s` — Строка для проверки. [`String`](/sql-reference/data-types/string) -* `prefix` — Префикс для проверки. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает `1`, если `s` начинается с `prefix`, иначе `0`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT startsWithUTF8('приставка', 'при') -``` - -```response title=Response -┌─startsWithUT⋯ка', 'при')─┐ -│ 1 │ -└──────────────────────────┘ -``` - - -## stringBytesEntropy - -Добавлена в версии: v25.6 - -Вычисляет энтропию Шеннона распределения байтов в строке. - -**Синтаксис** - -```sql -stringBytesEntropy(s) -``` - -**Аргументы** - -* `s` — строка для анализа. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает энтропию Шеннона по распределению байтов в строке. [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT stringBytesEntropy('Hello, world!') -``` - -```response title=Response -┌─stringBytesEntropy('Hello, world!')─┐ -│ 3.07049960 │ -└─────────────────────────────────────┘ -``` - - -## stringBytesUniq - -Впервые появилось в версии: v25.6 - -Подсчитывает количество уникальных байтов в строке. - -**Синтаксис** - -```sql -stringBytesUniq(s) -``` - -**Аргументы** - -* `s` — строка для анализа. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает количество различных байтов в строке. [`UInt16`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT stringBytesUniq('Hello') -``` - -```response title=Response -┌─stringBytesUniq('Hello')─┐ -│ 4 │ -└──────────────────────────┘ -``` - - -## stringJaccardIndex - -Добавлена в версии v23.11 - -Вычисляет [индекс похожести Жаккара](https://en.wikipedia.org/wiki/Jaccard_index) между двумя байтовыми строками. - -**Синтаксис** - -```sql -stringJaccardIndex(s1, s2) -``` - -**Аргументы** - -* `s1` — первая входная строка. [`String`](/sql-reference/data-types/string) -* `s2` — вторая входная строка. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает индекс сходства Жаккара между двумя строками. [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT stringJaccardIndex('clickhouse', 'mouse') -``` - -```response title=Response -┌─stringJaccardIndex('clickhouse', 'mouse')─┐ -│ 0.4 │ -└───────────────────────────────────────────┘ -``` - - -## stringJaccardIndexUTF8 - -Добавлена в версии v23.11 - -Аналог [`stringJaccardIndex`](#stringJaccardIndex), но для строк в кодировке UTF-8. - -**Синтаксис** - -```sql -stringJaccardIndexUTF8(s1, s2) -``` - -**Аргументы** - -* `s1` — первая входная строка UTF-8. [`String`](/sql-reference/data-types/string) -* `s2` — вторая входная строка UTF-8. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает индекс Жаккара сходства между двумя строками UTF-8. [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT stringJaccardIndexUTF8('我爱你', '我也爱你') -``` - -```response title=Response -┌─stringJaccardIndexUTF8('我爱你', '我也爱你')─┐ -│ 0.75 │ -└─────────────────────────────────────────────┘ -``` - - -## substring - -Добавлена в: v1.1 - -Возвращает подстроку строки `s`, начинающуюся с указанного байтового индекса `offset`. -Отсчёт байтов начинается с 1 по следующей логике: - -* Если `offset` равен `0`, возвращается пустая строка. -* Если `offset` отрицателен, подстрока начинается на `pos` символов от конца строки, а не от её начала. - -Необязательный аргумент `length` задаёт максимальное количество байт в возвращаемой подстроке. - -**Синтаксис** - -```sql -substring(s, offset[, length]) -``` - -**Псевдонимы**: `byteSlice`, `mid`, `substr` - -**Аргументы** - -* `s` — Строка, из которой извлекается подстрока. [`String`](/sql-reference/data-types/string) или [`FixedString`](/sql-reference/data-types/fixedstring) или [`Enum`](/sql-reference/data-types/enum) -* `offset` — Начальная позиция подстроки в `s`. [`(U)Int*`](/sql-reference/data-types/int-uint) -* `length` — Необязательный параметр. Максимальная длина подстроки. [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает подстроку `s` длиной `length` байт, начиная с индекса `offset`. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT 'database' AS db, substr(db, 5), substr(db, 5, 1) -``` - -```response title=Response -┌─db───────┬─substring('database', 5)─┬─substring('database', 5, 1)─┐ -│ database │ base │ b │ -└──────────┴──────────────────────────┴─────────────────────────────┘ -``` - - -## substringIndex - -Добавлена в версии v23.7 - -Возвращает подстроку строки `s`, расположенную до `count`-го вхождения разделителя `delim`, как в Spark или MySQL. - -**Синтаксис** - -```sql -substringIndex(s, delim, count) -``` - -**Псевдонимы**: `SUBSTRING_INDEX` - -**Аргументы** - -* `s` — Строка, из которой извлекается подстрока. [`String`](/sql-reference/data-types/string) -* `delim` — Символ, по которому выполняется разделение. [`String`](/sql-reference/data-types/string) -* `count` — Количество вхождений разделителя, которое нужно учесть перед извлечением подстроки. Если `count` положителен, возвращается всё слева от последнего разделителя (считая слева). Если `count` отрицателен, возвращается всё справа от последнего разделителя (считая справа). [`UInt`](/sql-reference/data-types/int-uint) или [`Int`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает подстроку из `s` до `count`-го вхождения `delim`. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT substringIndex('www.clickhouse.com', '.', 2) -``` - -```response title=Response -┌─substringIndex('www.clickhouse.com', '.', 2)─┐ -│ www.clickhouse │ -└──────────────────────────────────────────────┘ -``` - - -## substringIndexUTF8 - -Впервые появилась в: v23.7 - -Возвращает подстроку `s` до `count` вхождений разделителя `delim` при работе с кодовыми точками Unicode. -Предполагается, что строка содержит корректный текст в кодировке UTF-8. -Если это предположение нарушено, исключение не генерируется, а результат неопределён. - -**Синтаксис** - -```sql -substringIndexUTF8(s, delim, count) -``` - -**Аргументы** - -* `s` — Строка, из которой извлекается подстрока. [`String`](/sql-reference/data-types/string) -* `delim` — Символ-разделитель. [`String`](/sql-reference/data-types/string) -* `count` — Количество вхождений разделителя, которые нужно учесть перед извлечением подстроки. Если `count` положительно, возвращается всё слева от последнего (то есть `count`-го) разделителя, считая слева направо. Если `count` отрицательно, возвращается всё справа от последнего (то есть `|count|`-го) разделителя, считая справа налево. [`UInt`](/sql-reference/data-types/int-uint) или [`Int`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает подстроку из `s` до `count`-го вхождения `delim`. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример с UTF-8** - -```sql title=Query -SELECT substringIndexUTF8('www.straßen-in-europa.de', '.', 2) -``` - -```response title=Response -www.straßen-in-europa -``` - - -## substringUTF8 - -Введена в: v1.1 - -Возвращает подстроку строки `s`, начинающуюся с указанного байтового индекса `offset` (по юникодным кодовым точкам). -Отсчёт байтов начинается с `1` по следующей логике: - -* Если `offset` равен `0`, возвращается пустая строка. -* Если `offset` отрицателен, подстрока начинается на `pos` символов от конца строки, а не от начала. - -Необязательный аргумент `length` задаёт максимальное количество байт, которое может иметь возвращаемая подстрока. - -:::note -Эта функция предполагает, что строка содержит корректный текст в кодировке UTF-8. -Если это предположение нарушено, исключение не генерируется, а результат не определён. -::: - -**Синтаксис** - -```sql -substringUTF8(s, offset[, length]) -``` - -**Аргументы** - -* `s` — Строка, из которой извлекается подстрока. [`String`](/sql-reference/data-types/string) или [`FixedString`](/sql-reference/data-types/fixedstring) или [`Enum`](/sql-reference/data-types/enum) -* `offset` — Начальная позиция подстроки в `s`. [`Int`](/sql-reference/data-types/int-uint) или [`UInt`](/sql-reference/data-types/int-uint) -* `length` — Максимальная длина подстроки. Необязательный параметр. [`Int`](/sql-reference/data-types/int-uint) или [`UInt`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает подстроку `s` длиной `length` байт, начиная с индекса `offset`. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT 'Каждый день — День сурка.' AS str, substringUTF8(str, 9), substringUTF8(str, 9, 5) -``` - -```response title=Response -День сурка. День сурка. приветствует -``` - - -## toValidUTF8 - -Добавлена в версии v20.1 - -Преобразует строку в корректную кодировку UTF-8, заменяя любые некорректные символы в кодировке UTF-8 символом замены `�` (U+FFFD). -Если обнаруживается несколько подряд идущих некорректных символов, они объединяются в один символ замены. - -**Синтаксис** - -```sql -toValidUTF8(s) -``` - -**Аргументы** - -* `s` — Любой набор байтов, представленный объектом строкового типа данных String. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает корректную строку в кодировке UTF-8. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT toValidUTF8('\\x61\\xF0\\x80\\x80\\x80b') -``` - -```response title=Response -c -┌─toValidUTF8('a����b')─┐ -│ a�b │ -└───────────────────────┘ -``` - - -## trimBoth - -Добавлена в версии: v20.1 - -Удаляет указанные символы в начале и конце строки. -По умолчанию удаляет распространённые пробельные (ASCII) символы. - -**Синтаксис** - -```sql -trimBoth(s[, trim_characters]) -``` - -**Псевдонимы**: `trim` - -**Аргументы** - -* `s` — Строка, из которой нужно удалить символы. [`String`](/sql-reference/data-types/string) -* `trim_characters` — Необязательный параметр. Символы для удаления. Если не указано, удаляются стандартные пробельные символы. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает строку с указанными символами, удалёнными по краям. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT trimBoth('$$ClickHouse$$', '$') -``` - -```response title=Response -┌─trimBoth('$$⋯se$$', '$')─┐ -│ ClickHouse │ -└──────────────────────────┘ -``` - - -## trimLeft - -Добавлена в версии: v20.1 - -Удаляет заданные символы с начала строки. -По умолчанию удаляет распространённые пробельные символы (ASCII). - -**Синтаксис** - -```sql -trimLeft(input[, trim_characters]) -``` - -**Псевдонимы**: `ltrim` - -**Аргументы** - -* `input` — Строка для обрезки. [`String`](/sql-reference/data-types/string) -* `trim_characters` — Необязательный параметр. Символы для обрезки. Если не указаны, удаляются стандартные пробельные символы. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает строку с удалёнными слева указанными символами. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT trimLeft('ClickHouse', 'Click'); -``` - -```response title=Response -┌─trimLeft('Cl⋯', 'Click')─┐ -│ House │ -└──────────────────────────┘ -``` - - -## trimRight - -Добавлена в: v20.1 - -Удаляет указанные символы с конца строки. -По умолчанию удаляет распространённые пробельные символы (ASCII). - -**Синтаксис** - -```sql -trimRight(s[, trim_characters]) -``` - -**Псевдонимы**: `rtrim` - -**Аргументы** - -* `s` — Строка для обрезания. [`String`](/sql-reference/data-types/string) -* `trim_characters` — Необязательный набор символов для обрезания. Если не указан, удаляются обычные пробельные символы. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает строку, у которой указанные символы удалены справа. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT trimRight('ClickHouse','House'); -``` - -```response title=Response -┌─trimRight('C⋯', 'House')─┐ -│ Click │ -└──────────────────────────┘ -``` - - -## tryBase32Decode - -Функция впервые появилась в версии v25.6. - -Принимает строку и декодирует её, используя схему кодирования [Base32](https://datatracker.ietf.org/doc/html/rfc4648#section-6). - -**Синтаксис** - -```sql -tryBase32Decode(encoded) -``` - -**Аргументы** - -* `encoded` — Столбец или константа типа String для декодирования. Если строка не является корректной Base32-строкой, в случае ошибки возвращается пустая строка. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает строку, содержащую декодированное значение аргумента. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT tryBase32Decode('IVXGG33EMVSA===='); -``` - -```response title=Response -┌─tryBase32Decode('IVXGG33EMVSA====')─┐ -│ Закодировано │ -└─────────────────────────────────────┘ -``` - - -## tryBase58Decode - -Появилась в: v22.10 - -Как [`base58Decode`](#base58Decode), но в случае ошибки возвращает пустую строку. - -**Синтаксис** - -```sql -tryBase58Decode(encoded) -``` - -**Аргументы** - -* `encoded` — столбец или константа типа String. Если строка не является корректной в кодировке Base58, в случае ошибки возвращается пустая строка. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает строку, содержащую декодированное значение аргумента. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT tryBase58Decode('3dc8KtHrwM') AS res, tryBase58Decode('invalid') AS res_invalid; -``` - -```response title=Response -┌─res─────┬─res_invalid─┐ -│ Закодированное │ │ -└─────────┴─────────────┘ -``` - - -## tryBase64Decode - -Добавлена в версии: v18.16 - -Аналог функции [`base64Decode`](#base64Decode), но в случае ошибки возвращает пустую строку. - -**Синтаксис** - -```sql -tryBase64Decode(encoded) -``` - -**Аргументы** - -* `encoded` — Столбец или константа типа String для декодирования. Если строка не является корректной Base64-строкой, в случае ошибки возвращается пустая строка. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает строку с декодированным значением аргумента. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT tryBase64Decode('Y2xpY2tob3VzZQ==') -``` - -```response title=Response -┌─tryBase64Decode('Y2xpY2tob3VzZQ==')─┐ -│ clickhouse │ -└─────────────────────────────────────┘ -``` - - -## tryBase64URLDecode - -Добавлена в версии: v18.16 - -Аналогична [`base64URLDecode`](#base64URLDecode), но в случае ошибки возвращает пустую строку. - -**Синтаксис** - -```sql -tryBase64URLDecode(encoded) -``` - -**Аргументы** - -* `encoded` — Столбец или константа строкового типа для декодирования. Если строка не является корректной строкой в кодировке Base64, в случае ошибки возвращается пустая строка. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает строку, содержащую декодированное значение аргумента. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT tryBase64URLDecode('aHR0cHM6Ly9jbGlja2hvdXNlLmNvbQ') -``` - -```response title=Response -┌─tryBase64URLDecode('aHR0cHM6Ly9jbGlja2hvdXNlLmNvbQ')─┐ -│ https://clickhouse.com │ -└──────────────────────────────────────────────────────┘ -``` - - -## tryIdnaEncode - -Появилась в версии: v24.1 - -Возвращает представление доменного имени в Unicode (UTF-8) (алгоритм ToUnicode) в соответствии с механизмом [Internationalized Domain Names in Applications](https://en.wikipedia.org/wiki/Internationalized_domain_name#Internationalizing_Domain_Names_in_Applications) (IDNA). -В случае ошибки вместо выброса исключения возвращает пустую строку. - -**Синтаксис** - -```sql -tryIdnaEncode(s) -``` - -**Аргументы** - -* `s` — входная строка. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает ASCII-представление входной строки в соответствии с механизмом IDNA для этого значения или пустую строку, если входные данные некорректны. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT tryIdnaEncode('straße.münchen.de') -``` - -```response title=Response -┌─tryIdnaEncode('straße.münchen.de')──┐ -│ xn--strae-oqa.xn--mnchen-3ya.de │ -└─────────────────────────────────────┘ -``` - - -## tryPunycodeDecode - -Добавлена в версии v24.1 - -Аналог `punycodeDecode`, но возвращает пустую строку, если на вход передана некорректная строка в кодировке Punycode. - -**Синтаксис** - -```sql -tryPunycodeDecode(s) -``` - -**Аргументы** - -* `s` — строка в кодировке Punycode. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает исходный текст входного значения или пустую строку, если входное значение некорректно. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT tryPunycodeDecode('Mnchen-3ya') -``` - -```response title=Response -┌─tryPunycodeDecode('Mnchen-3ya')─┐ -│ München │ -└─────────────────────────────────┘ -``` - - -## upper - -Появилась в версии: v1.1 - -Преобразует латинские символы в кодировке ASCII в строке в верхний регистр. - -**Синтаксис** - -```sql -upper(s) -``` - -**Псевдонимы**: `ucase` - -**Аргументы** - -* `s` — строка, которую нужно преобразовать в верхний регистр. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает строку `s`, преобразованную в верхний регистр. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT upper('clickhouse') -``` - -```response title=Response -┌─upper('clickhouse')─┐ -│ CLICKHOUSE │ -└─────────────────────┘ -``` - - -## upperUTF8 - -Введена в версии: v1.1 - -Преобразует строку в верхний регистр, предполагая, что строка содержит корректный текст в кодировке UTF-8. -Если это предположение не выполняется, исключение не генерируется, а результат не определён. - -:::note -Эта функция не определяет язык, поэтому, например, для турецкого результат может быть не совсем корректным (i/İ vs. i/I). -Если длина последовательности байт UTF-8 различается для верхнего и нижнего регистра кодовой точки (таких, как `ẞ` и `ß`), результат для этой кодовой точки может быть неверным. -::: - -**Синтаксис** - -```sql -upperUTF8(s) -``` - -**Аргументы** - -* `s` — строка. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Значение строкового типа данных. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT upperUTF8('München') AS Upperutf8 -``` - -```response title=Response -┌─Upperutf8─┐ -│ МЮНХЕН │ -└───────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/string-replace-functions.md b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/string-replace-functions.md index 043f14bd180..6a1012d6f98 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/string-replace-functions.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/string-replace-functions.md @@ -7,9 +7,7 @@ doc_type: 'reference' keywords: ['замена строк'] --- - - -# Функции замены строк +# Функции для замены строк [Общие строковые функции](string-functions.md) и [функции для поиска в строках](string-search-functions.md) описаны отдельно. @@ -18,509 +16,11 @@ keywords: ['замена строк'] ::: {/* - Внутреннее содержимое тегов ниже заменяется на этапе сборки фреймворка документации - документацией, сгенерированной из system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. + Внутренее содержимое расположенных ниже тегов при сборке фреймворка документации + заменяется документацией, сгенерированной из system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. См.: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## format - -Добавлено в: v20.1 - -Форматирует строку шаблона `pattern` с использованием значений (строк, целых чисел и т.д.), перечисленных в аргументах, аналогично форматированию в Python. -Строка шаблона может содержать поля подстановки, заключённые в фигурные скобки `{}`. -Всё, что не заключено в скобки, рассматривается как буквальный текст и копируется в вывод без изменений. -Символ фигурной скобки можно экранировать двумя скобками: `{{` и `}}`. -Имена полей могут быть числами (начиная с нуля) или быть пустыми (тогда им неявно присваиваются последовательно возрастающие номера). - -**Синтаксис** - -```sql -format(pattern, s0[, s1, ...]) -``` - -**Аргументы** - -* `pattern` — Форматная строка, содержащая заполнители. [`String`](/sql-reference/data-types/string) -* `s0[, s1, ...]` — Одно или несколько значений для подстановки в шаблон. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает форматированную строку. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Нумерованные заполнители** - -```sql title=Query -SELECT format('{1} {0} {1}', 'World', 'Hello') -``` - -```response title=Response -┌─format('{1} {0} {1}', 'World', 'Hello')─┐ -│ Hello World Hello │ -└─────────────────────────────────────────┘ -``` - -**Неявная нумерация** - -```sql title=Query -SELECT format('{} {}', 'Hello', 'World') -``` - -```response title=Response -┌─format('{} {}', 'Hello', 'World')─┐ -│ Hello World │ -└───────────────────────────────────┘ -``` - - -## overlay - -Добавлена в: v24.9 - -Заменяет часть строки `input` строкой `replace`, начиная с индекса `offset`, отсчёт которого ведётся с 1. - -**Синтаксис** - -```sql -overlay(s, replace, offset[, length]) -``` - -**Аргументы** - -* `s` — Входная строка. [`String`](/sql-reference/data-types/string) -* `replace` — Строка для замены. [`const String`](/sql-reference/data-types/string) -* `offset` — Целочисленный тип `Int` (нумерация с 1). Если `offset` отрицательный, отсчёт ведётся с конца строки `s`. [`Int`](/sql-reference/data-types/int-uint) -* `length` — Необязательный параметр. Целочисленный тип `Int`. `length` задаёт длину фрагмента во входной строке `s`, который требуется заменить. Если `length` не указан, количество байт, удаляемых из `s`, равно длине `replace`; иначе удаляется `length` байт. [`Int`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает строку с выполненной заменой. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Базовая замена** - -```sql title=Query -SELECT overlay('Мой отец из Мексики.', 'мать', 4) AS res; -``` - -```response title=Response -┌─res──────────────────────┐ -│ Моя мама из Мексики. │ -└──────────────────────────┘ -``` - -**Замена с заданной длиной** - -```sql title=Query -SELECT overlay('Мой отец родом из Мексики.', 'папа', 5, 8) AS res; -``` - -```response title=Response -┌─res───────────────────┐ -│ Мой отец из Мексики.│ -└───────────────────────┘ -``` - - -## overlayUTF8 - -Появилась в версии: v24.9 - -Заменяет часть строки `s` другой строкой `replace`, начиная с позиции `offset` (индексация с 1). -Предполагается, что строка содержит корректный текст в кодировке UTF-8. -Если это предположение нарушено, исключение не выбрасывается, а результат становится неопределённым. - -**Синтаксис** - -```sql -overlayUTF8(s, replace, offset[, length]) -``` - -**Аргументы** - -* `s` — входная строка. [`String`](/sql-reference/data-types/string) -* `replace` — строка для замены. [`const String`](/sql-reference/data-types/string) -* `offset` — целочисленный тип `Int` (нумерация с 1). Если `offset` отрицательный, он отсчитывается от конца входной строки `s`. [`(U)Int*`](/sql-reference/data-types/int-uint) -* `length` — необязательный аргумент. Определяет длину фрагмента во входной строке `s`, который нужно заменить. Если `length` не указан, количество символов, удаляемых из `s`, равно длине `replace`, иначе удаляется `length` символов. [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает строку с произведённой заменой. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Замена в UTF-8** - -```sql title=Query -SELECT overlayUTF8('Mein Vater ist aus Österreich.', 'der Türkei', 20) AS res; -``` - -```response title=Response -┌─res───────────────────────────┐ -│ Mein Vater ist aus der Türkei.│ -└───────────────────────────────┘ -``` - - -## printf - -Добавлено в версии: v24.8 - -Функция `printf` форматирует заданную строку, подставляя значения (строки, целые числа, числа с плавающей запятой и т. д.), перечисленные в аргументах, аналогично функции printf в C++. -Строка формата может содержать спецификаторы формата, начинающиеся с символа `%`. -Все, что не является символом `%` и следующим за ним спецификатором формата, считается литеральным текстом и копируется в вывод без изменений. -Символ `%` как литерал можно экранировать с помощью `%%`. - -**Синтаксис** - -```sql -printf(format[, sub1, sub2, ...]) -``` - -**Аргументы** - -* `format` — Форматная строка со спецификаторами `%`. [`String`](/sql-reference/data-types/string) -* `sub1, sub2, ...` — Необязательный параметр. Ноль или более значений для подстановки в форматную строку. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает отформатированную строку. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Форматирование в стиле C++** - -```sql title=Query -SELECT printf('%%%s %s %d', 'Hello', 'World', 2024); -``` - -```response title=Response -┌─printf('%%%s %s %d', 'Hello', 'World', 2024)─┐ -│ %Hello World 2024 │ -└──────────────────────────────────────────────┘ -``` - - -## regexpQuoteMeta - -Введена в версии v20.1 - -Добавляет обратный слеш перед следующими символами, которые имеют специальное значение в регулярных выражениях: `\0`, `\\`, `|`, `(`, `)`, `^`, `$`, `.`, `[`, `]`, `?`, `*`, `+`, `{`, `:`, `-`. -Эта реализация незначительно отличается от re2::RE2::QuoteMeta. -Она экранирует нулевой байт как `\0` вместо `\x00` и экранирует только необходимые символы. - -**Синтаксис** - -```sql -regexpQuoteMeta(s) -``` - -**Аргументы** - -* `s` — Входная строка, содержащая символы, подлежащие экранированию в регулярных выражениях (regex). [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает строку, в которой экранированы специальные символы регулярных выражений (regex). [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Экранирование специальных символов регулярных выражений (regex)** - -```sql title=Query -SELECT regexpQuoteMeta('Hello. [World]? (Yes)*') AS res -``` - -```response title=Response -┌─res───────────────────────────┐ -│ Hello\. \[World\]\? \(Yes\)\* │ -└───────────────────────────────┘ -``` - - -## replaceAll - -Появилась в версии: v1.1 - -Заменяет все вхождения подстроки `pattern` в `haystack` строкой `replacement`. - -**Синтаксис** - -```sql -replaceAll(haystack, pattern, replacement) -``` - -**Псевдонимы**: `replace` - -**Аргументы** - -* `haystack` — входная строка, в которой выполняется поиск. [`String`](/sql-reference/data-types/string) -* `pattern` — подстрока, которую нужно найти и заменить. [`const String`](/sql-reference/data-types/string) -* `replacement` — строка, которой будет заменена подстрока `pattern`. [`const String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает строку, в которой все вхождения `pattern` заменены. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Замена всех вхождений** - -```sql title=Query -SELECT replaceAll('Hello, Hello world', 'Hello', 'Hi') AS res; -``` - -```response title=Response -┌─res──────────┐ -│ Hi, Hi world │ -└──────────────┘ -``` - - -## replaceOne - -Добавлена в: v1.1 - -Заменяет первое вхождение подстроки `pattern` в `haystack` строкой `replacement`. - -**Синтаксис** - -```sql -replaceOne(haystack, pattern, replacement) -``` - -**Аргументы** - -* `haystack` — входная строка, в которой выполняется поиск. [`String`](/sql-reference/data-types/string) -* `pattern` — подстрока для поиска и замены. [`const String`](/sql-reference/data-types/string) -* `replacement` — строка, которой будет заменена найденная подстрока. [`const String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает строку, в которой первое вхождение подстроки заменено. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Замена первого вхождения** - -```sql title=Query -SELECT replaceOne('Hello, Hello world', 'Hello', 'Hi') AS res; -``` - -```response title=Response -┌─res─────────────┐ -│ Привет, Hello world │ -└─────────────────┘ -``` - - -## replaceRegexpAll - -Введена в версии v1.1 - -Аналог функции `replaceRegexpOne`, но заменяет все вхождения шаблона. -В качестве исключения, если регулярное выражение сработало на пустой подстроке, замена выполняется не более одного раза. - -**Синтаксис** - -```sql -replaceRegexpAll(haystack, pattern, replacement) -``` - -**Псевдонимы**: `REGEXP_REPLACE` - -**Аргументы** - -* `haystack` — Входная строка, в которой выполняется поиск. [`String`](/sql-reference/data-types/string) -* `pattern` — Шаблон регулярного выражения для поиска. [`const String`](/sql-reference/data-types/string) -* `replacement` — Строка, заменяющая найденный шаблон, может содержать подстановки. [`const String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает строку, в которой все совпадения с регулярным выражением заменены. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Заменить каждый символ на его удвоенную версию** - -```sql title=Query -SELECT replaceRegexpAll('Hello123', '.', '\\\\0\\\\0') AS res -``` - -```response title=Response -┌─res──────────────────┐ -│ HHeelllloo112233 │ -└──────────────────────┘ -``` - -**Пример замены пустой подстроки** - -```sql title=Query -SELECT replaceRegexpAll('Hello, World!', '^', 'here: ') AS res -``` - -```response title=Response -┌─res─────────────────┐ -│ здесь: Привет, мир! │ -└─────────────────────┘ -``` - - -## replaceRegexpOne - -Введено в: v1.1 - -Заменяет первое вхождение подстроки в `haystack`, совпадающей с регулярным выражением `pattern` (в синтаксисе re2), строкой `replacement`. -`replacement` может содержать подстановки `\0-\9`. -Подстановки `\1-\9` соответствуют 1-й–9-й захватывающим группам (подсовпадениям), подстановка `\0` соответствует полному совпадению. -Чтобы использовать буквальный символ `\` в строках `pattern` или `replacement`, экранируйте его с помощью `\`. -Также имейте в виду, что строковые литералы требуют дополнительного экранирования. - -**Синтаксис** - -```sql -replaceRegexpOne(haystack, pattern, replacement) -``` - -**Аргументы** - -* `haystack` — Входная строка, в которой выполняется поиск. [`String`](/sql-reference/data-types/string) -* `pattern` — Шаблон регулярного выражения для поиска. [`const String`](/sql-reference/data-types/string) -* `replacement` — Строка, на которую заменяется совпадение с шаблоном, может содержать подстановки. [`const String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает строку, в которой первая подстрока, соответствующая регулярному выражению, заменена. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Преобразование дат из формата ISO в американский формат** - -```sql title=Query -SELECT DISTINCT - EventDate, - replaceRegexpOne(toString(EventDate), '(\\d{4})-(\\d{2})-(\\d{2})', '\\2/\\3/\\1') AS res -FROM test.hits -LIMIT 7 -FORMAT TabSeparated -``` - -```response title=Response -2014-03-17 03/17/2014 -2014-03-18 03/18/2014 -2014-03-19 03/19/2014 -2014-03-20 03/20/2014 -2014-03-21 03/21/2014 -2014-03-22 03/22/2014 -2014-03-23 03/23/2014 -``` - -**Копирование строки десять раз** - -```sql title=Query -SELECT replaceRegexpOne('Hello, World!', '.*', '\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0') AS res -``` - -```response title=Response -┌─res────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ -│ Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!Привет, мир! │ -└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## translate - -Впервые появилась в: v22.7 - -Заменяет символы в строке `s` по взаимно-однозначному соответствию символов, заданному строками `from` и `to`. -`from` и `to` должны быть константными ASCII-строками. -Если длины `from` и `to` совпадают, каждое вхождение первого символа `from` в `s` заменяется на первый символ `to`, каждого вхождения второго символа `from` в `s` — на второй символ `to` и так далее. -Если `from` содержит больше символов, чем `to`, все вхождения символов из конца `from`, для которых нет соответствующего символа в `to`, удаляются из `s`. -Не-ASCII-символы в `s` этой функцией не изменяются. - -**Синтаксис** - -```sql -translate(s, from, to) -``` - -**Аргументы** - -* `s` — входная строка для преобразования. [`String`](/sql-reference/data-types/string) -* `from` — константная строка ASCII, содержащая символы для замены. [`const String`](/sql-reference/data-types/string) -* `to` — константная строка ASCII, содержащая символы-заменители. [`const String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает строку с применёнными заменами символов. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Сопоставление символов** - -```sql title=Query -SELECT translate('Привет, мир!', 'delor', 'DELOR') AS res -``` - -```response title=Response -┌─res───────────┐ -│ HELLO, WORLD! │ -└───────────────┘ -``` - -**Разная длина** - -```sql title=Query -SELECT translate('clickhouse', 'clickhouse', 'CLICK') AS res -``` - -```response title=Response -┌─res───┐ -│ CLICK │ -└───────┘ -``` - - -## translateUTF8 - -Добавлена в версии: v22.7 - -Аналог [`translate`](#translate), но предполагает, что `s`, `from` и `to` — строки в кодировке UTF-8. - -**Синтаксис** - -```sql -translateUTF8(s, from, to) -``` - -**Аргументы** - -* `s` — входная строка в кодировке UTF-8 для преобразования. [`String`](/sql-reference/data-types/string) -* `from` — константная строка UTF-8, содержащая заменяемые символы. [`const String`](/sql-reference/data-types/string) -* `to` — константная строка UTF-8, содержащая символы замены. [`const String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает значение типа данных `String`. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Преобразование символов UTF-8** - -```sql title=Query -SELECT translateUTF8('Münchener Straße', 'üß', 'us') AS res; -``` - -```response title=Response -┌─res──────────────┐ -│ Munchener Strase │ -└──────────────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/string-search-functions.md b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/string-search-functions.md index 1bbf5564137..9efe0f4eab7 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/string-search-functions.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/string-search-functions.md @@ -1,27 +1,25 @@ --- -description: 'Документация по функциям поиска по строкам' -sidebar_label: 'Поиск по строкам' +description: 'Документация по функциям для поиска в строках' +sidebar_label: 'Поиск в строках' slug: /sql-reference/functions/string-search-functions -title: 'Функции поиска по строкам' +title: 'Функции для поиска в строках' doc_type: 'reference' --- - - # Функции для поиска в строках -Все функции в этом разделе по умолчанию выполняют поиск с учётом регистра. Поиск без учёта регистра обычно реализован в отдельных вариантах функций. +Все функции в этом разделе по умолчанию выполняют поиск с учетом регистра. Поиск без учета регистра, как правило, реализован отдельными вариантами функций. :::note -Поиск без учёта регистра следует правилам соответствия строчных и прописных букв английского языка. Например, прописная буква для `i` в английском языке — это -`I`, тогда как в турецком языке — `İ`, поэтому результаты для языков, отличных от английского, могут быть неожиданными. +Поиск без учета регистра следует правилам соответствия строчных и заглавных букв английского языка. Например, заглавная буква `i` в английском языке — это +`I`, тогда как в турецком языке — `İ`, поэтому результаты для языков, отличных от английского, могут быть непредсказуемыми. ::: -Функции в этом разделе также предполагают, что строка, в которой выполняется поиск (в этом разделе обозначается как `haystack`), и строка поиска (обозначается как `needle`) являются текстом в однобайтной кодировке. Если это предположение -не выполняется, исключение не генерируется, а результаты не определены. Поиск в строках в кодировке UTF-8 обычно реализован в отдельных -вариантах функций. Аналогично, если используется вариант функции для UTF-8, а входные строки не являются текстом в кодировке UTF-8, исключение не генерируется, а -результаты не определены. Учтите, что автоматическая нормализация Unicode не выполняется, однако вы можете использовать функции -[normalizeUTF8*()](https://clickhouse.com../functions/string-functions/) для этого. +Функции в этом разделе также предполагают, что строка, в которой выполняется поиск (в этом разделе называется `haystack`), и искомая строка (называется `needle`) — это текст в однобайтовой кодировке. Если это предположение +нарушается, исключение не генерируется, а результаты не определены. Поиск в строках в кодировке UTF-8, как правило, реализован отдельными вариантами функций. +Аналогично, если используется вариант функции для UTF-8, а входные строки не являются текстом в кодировке UTF-8, исключение не генерируется, а результаты +не определены. Обратите внимание, что автоматическая нормализация Unicode не выполняется, однако вы можете использовать функции +[normalizeUTF8*()](https://clickhouse.com../functions/string-functions/) для этой цели. [Общие строковые функции](string-functions.md) и [функции для замены в строках](string-replace-functions.md) описаны отдельно. @@ -30,2682 +28,11 @@ doc_type: 'reference' ::: {/* - Содержимое тегов ниже при сборке фреймворка документации - заменяется документами, сгенерированными из system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. + Содержимое расположенных ниже тегов при сборке фреймворка документации + заменяется на документацию, сгенерированную из system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. См.: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## countMatches - -Введена в версии: v21.1 - -Возвращает количество вхождений регулярного выражения в строке. - -:::note Зависимость поведения от версии -Поведение этой функции зависит от версии ClickHouse: - -* в версиях < v25.6 функция прекращает подсчёт при первом пустом совпадении, даже если шаблон допускает дальнейшие совпадения. -* в версиях >= 25.6 функция продолжает выполнение при возникновении пустого совпадения. Устаревшее поведение можно восстановить с помощью настройки `count_matches_stop_at_empty_match = true`. - ::: - -**Синтаксис** - -```sql -countMatches(строка, шаблон) -``` - -**Аргументы** - -* `haystack` — Строка, в которой выполняется поиск. [`String`](/sql-reference/data-types/string) -* `pattern` — Шаблон регулярного выражения. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает количество найденных совпадений. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Подсчёт последовательностей цифр** - -```sql title=Query -SELECT countMatches('hello 123 world 456 test', '[0-9]+') -``` - -```response title=Response -┌─countMatches('hello 123 world 456 test', '[0-9]+')─┐ -│ 2 │ -└─────────────────────────────────────────────────────┘ -``` - - -## countMatchesCaseInsensitive - -Добавлена в: v21.1 - -Аналог [`countMatches`](#countMatches), но выполняет поиск без учета регистра. - -**Синтаксис** - -```sql -countMatchesCaseInsensitive(haystack, pattern) -``` - -**Аргументы** - -* `haystack` — Строка, в которой выполняется поиск. [`String`](/sql-reference/data-types/string) -* `pattern` — Шаблон регулярного выражения. [`const String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает количество найденных совпадений. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Подсчет без учета регистра** - -```sql title=Query -SELECT countMatchesCaseInsensitive('Hello HELLO world', 'hello') -``` - -```response title=Response -┌─countMatchesCaseInsensitive('Hello HELLO world', 'hello')─┐ -│ 2 │ -└───────────────────────────────────────────────────────────┘ -``` - - -## countSubstrings - -Впервые появилась в версии v21.1 - -Возвращает количество вхождений подстроки `needle` в строку `haystack`. - -**Синтаксис** - -```sql -countSubstrings(haystack, needle[, start_pos]) -``` - -**Аргументы** - -* `haystack` — Строка, в которой выполняется поиск. [String](../../sql-reference/data-types/string.md) или [Enum](../../sql-reference/data-types/enum.md). - `needle` — Подстрока для поиска. [String](../../sql-reference/data-types/string.md). - `start_pos` — Позиция (отсчёт с 1) в `haystack`, с которой начинается поиск. [UInt](../../sql-reference/data-types/int-uint.md). Необязательный. - -**Возвращаемое значение** - -Количество вхождений. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT countSubstrings('aaaa', 'aa'); -``` - -```response title=Response -┌─countSubstrings('aaaa', 'aa')─┐ -│ 2 │ -└───────────────────────────────┘ -``` - -**С аргументом start_pos** - -```sql title=Query -SELECT countSubstrings('abc___abc', 'abc', 4); -``` - -```response title=Response -┌─countSubstrings('abc___abc', 'abc', 4)─┐ -│ 1 │ -└────────────────────────────────────────┘ -``` - - -## countSubstringsCaseInsensitive - -Добавлена в версии: v21.1 - -Аналог [`countSubstrings`](#countSubstrings), но выполняет подсчёт без учёта регистра. - -**Синтаксис** - -```sql -countSubstringsCaseInsensitive(haystack, needle[, start_pos]) -``` - -**Аргументы** - -* `haystack` — строка, в которой выполняется поиск. [`String`](/sql-reference/data-types/string) или [`Enum`](/sql-reference/data-types/enum) -* `needle` — подстрока, которую нужно найти. [`String`](/sql-reference/data-types/string) -* `start_pos` — необязательный аргумент. Позиция (начиная с 1) в `haystack`, с которой начинается поиск. [`UInt*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает количество вхождений `needle` в `haystack`. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT countSubstringsCaseInsensitive('AAAA', 'aa'); -``` - -```response title=Response -┌─countSubstri⋯AAA', 'aa')─┐ -│ 2 │ -└──────────────────────────┘ -``` - -**С параметром start_pos** - -```sql title=Query -SELECT countSubstringsCaseInsensitive('abc___ABC___abc', 'abc', 4); -``` - -```response title=Response -┌─countSubstri⋯, 'abc', 4)─┐ -│ 2 │ -└──────────────────────────┘ -``` - - -## countSubstringsCaseInsensitiveUTF8 - -Добавлена в: v21.1 - -Аналог [`countSubstrings`](#countSubstrings), но считает подстроки без учета регистра и предполагает, что haystack — строка в кодировке UTF-8. - -**Синтаксис** - -```sql -countSubstringsCaseInsensitiveUTF8(haystack, needle[, start_pos]) -``` - -**Аргументы** - -* `haystack` — строка в кодировке UTF-8, в которой выполняется поиск. [`String`](/sql-reference/data-types/string) или [`Enum`](/sql-reference/data-types/enum) -* `needle` — подстрока, которую нужно найти. [`String`](/sql-reference/data-types/string) -* `start_pos` — необязательный параметр. Позиция (начиная с 1) в `haystack`, с которой начинается поиск. [`UInt*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает количество вхождений подстроки `needle` в строку `haystack`. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT countSubstringsCaseInsensitiveUTF8('ложка, кошка, картошка', 'КА'); -``` - -```response title=Response -┌─countSubstri⋯шка', 'КА')─┐ -│ 4 │ -└──────────────────────────┘ -``` - -**С аргументом start_pos** - -```sql title=Query -SELECT countSubstringsCaseInsensitiveUTF8('ложка, кошка, картошка', 'КА', 13); -``` - -```response title=Response -┌─countSubstri⋯, 'КА', 13)─┐ -│ 2 │ -└──────────────────────────┘ -``` - - -## extract - -Добавлена в версии: v1.1 - -Извлекает первое совпадение регулярного выражения в строке. -Если 'haystack' не соответствует 'pattern', возвращается пустая строка. - -Эта функция использует библиотеку регулярных выражений RE2. См. [re2](https://github.com/google/re2/wiki/Syntax) для описания поддерживаемого синтаксиса. - -Если регулярное выражение содержит группы захвата (подшаблоны), функция возвращает содержимое первой группы захвата. - -**Синтаксис** - -```sql -extract(haystack, pattern) -``` - -**Аргументы** - -* `haystack` — Строка, из которой извлекается значение. [`String`](/sql-reference/data-types/string) -* `pattern` — Регулярное выражение, обычно содержащее захватывающую группу. [`const String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает извлечённый фрагмент в виде строки. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Извлечение домена из email-адреса** - -```sql title=Query -SELECT extract('test@clickhouse.com', '.*@(.*)$') -``` - -```response title=Response -┌─extract('test@clickhouse.com', '.*@(.*)$')─┐ -│ clickhouse.com │ -└───────────────────────────────────────────┘ -``` - -**Если совпадение не найдено, возвращается пустая строка** - -```sql title=Query -SELECT extract('test@clickhouse.com', 'no_match') -``` - -```response title=Response -┌─extract('test@clickhouse.com', 'no_match')─┐ -│ │ -└────────────────────────────────────────────┘ -``` - - -## extractAll - -Добавлена в версии: v1.1 - -Аналогична [`extract`](#extract), но возвращает массив всех вхождений регулярного выражения в строке. -Если в строке `haystack` нет совпадений с регулярным выражением `pattern`, возвращается пустой массив. - -Если регулярное выражение содержит группы захвата (подвыражения), функция сопоставляет входную строку по первой группе захвата. - -**Синтаксис** - -```sql -extractAll(haystack, pattern) -``` - -**Аргументы** - -* `haystack` — строка, из которой извлекаются фрагменты. [`String`](/sql-reference/data-types/string) -* `pattern` — регулярное выражение, которое может содержать группы захвата. [`const String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает массив извлечённых фрагментов. [`Array(String)`](/sql-reference/data-types/array) - -**Примеры** - -**Извлечение всех чисел** - -```sql title=Query -SELECT extractAll('привет 123 мир 456', '[0-9]+') -``` - -```response title=Response -┌─extractAll('hello 123 world 456', '[0-9]+')─┐ -│ ['123','456'] │ -└─────────────────────────────────────────────┘ -``` - -**Извлечение с помощью группы захвата** - -```sql title=Query -SELECT extractAll('test@example.com, user@domain.org', '([a-zA-Z0-9]+)@') -``` - -```response title=Response -┌─extractAll('test@example.com, user@domain.org', '([a-zA-Z0-9]+)@')─┐ -│ ['test','user'] │ -└────────────────────────────────────────────────────────────────────┘ -``` - - -## extractAllGroupsHorizontal - -Добавлено в: v20.5 - -Находит все группы в строке с использованием переданного регулярного выражения и возвращает массив массивов, где каждый внутренний массив содержит все фрагменты, захваченные одной и той же группой, упорядоченные по номеру группы. - -**Синтаксис** - -```sql -extractAllGroupsHorizontal(s, regexp) -``` - -**Аргументы** - -* `s` — Входная строка, из которой выполняется извлечение. [`String`](/sql-reference/data-types/string) или [`FixedString`](/sql-reference/data-types/fixedstring) -* `regexp` — Регулярное выражение для сопоставления. [`const String`](/sql-reference/data-types/string) или [`const FixedString`](/sql-reference/data-types/fixedstring) - -**Возвращаемое значение** - -Возвращает массив массивов, где каждый внутренний массив содержит все захваченные подвыражения одной группы захвата по всем совпадениям. Первый внутренний массив содержит все значения, захваченные группой 1, второй — группой 2 и т. д. Если совпадения не найдены, возвращается пустой массив. [`Array(Array(String))`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -WITH '< Server: nginx -< Date: Tue, 22 Jan 2019 00:26:14 GMT -< Content-Type: text/html; charset=UTF-8 -< Connection: keep-alive -' AS s -SELECT extractAllGroupsHorizontal(s, '< ([\\w\\-]+): ([^\\r\\n]+)'); -``` - -```response title=Response -[['Server','Date','Content-Type','Connection'],['nginx','Tue, 22 Jan 2019 00:26:14 GMT','text/html; charset=UTF-8','keep-alive']] -``` - - -## extractGroups - -Впервые представлена в: v20.5 - -Извлекает все группы из непересекающихся подстрок, соответствующих регулярному выражению. - -**Синтаксис** - -```sql -extractAllGroups(s, regexp) -``` - -**Аргументы** - -* `s` — Входная строка, из которой выполняется извлечение. [`String`](/sql-reference/data-types/string) или [`FixedString`](/sql-reference/data-types/fixedstring) -* `regexp` — Регулярное выражение. Константное значение. [`const String`](/sql-reference/data-types/string) или [`const FixedString`](/sql-reference/data-types/fixedstring) - -**Возвращаемое значение** - -Если функция находит хотя бы одну совпадающую группу, она возвращает столбец типа Array(Array(String)), упорядоченный по group_id (от `1` до `N`, где `N` — количество захватывающих групп в регулярном выражении). Если совпадающих групп нет, возвращается пустой массив. [`Array(Array(String))`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -WITH '< Server: nginx -< Date: Tue, 22 Jan 2019 00:26:14 GMT -< Content-Type: text/html; charset=UTF-8 -< Connection: keep-alive -' AS s -SELECT extractAllGroups(s, '< ([\\w\\-]+): ([^\\r\\n]+)'); -``` - -```response title=Response -[['Server','nginx'],['Date','Tue, 22 Jan 2019 00:26:14 GMT'],['Content-Type','text/html; charset=UTF-8'],['Connection','keep-alive']] -``` - - -## hasAllTokens - -Введена в: v25.10 - -Аналогично [`hasAnyTokens`](#hasAnyTokens), но возвращает 1, если все токены в строке или массиве `needle` присутствуют в строке `input`, и 0 в противном случае. Если `input` — это столбец, возвращает все строки, удовлетворяющие этому условию. - -:::note -Для столбца `input` должен быть определён [текстовый индекс](../../engines/table-engines/mergetree-family/invertedindexes) для обеспечения оптимальной производительности. -Если текстовый индекс не определён, функция выполняет полное сканирование столбца, которое на несколько порядков медленнее, чем поиск по индексу. -::: - -Перед поиском функция выполняет токенизацию - -* аргумента `input` (всегда) и -* аргумента `needle` (если он задан как [String](../../sql-reference/data-types/string.md)) - с использованием токенизатора, указанного для текстового индекса. - Если для столбца не определён текстовый индекс, вместо него используется токенизатор `splitByNonAlpha`. - Если аргумент `needle` имеет тип [Array(String)](../../sql-reference/data-types/array.md), каждый элемент массива рассматривается как отдельный токен — дополнительная токенизация не выполняется. - -Дубликаты токенов игнорируются. -Например, needles = ['ClickHouse', 'ClickHouse'] обрабатывается так же, как ['ClickHouse']. - -**Синтаксис** - -```sql -hasAllTokens(input, needles) -``` - -**Псевдонимы**: `hasAllToken` - -**Аргументы** - -* `input` — входной столбец. [`String`](/sql-reference/data-types/string) или [`FixedString`](/sql-reference/data-types/fixedstring) или [`Array(String)`](/sql-reference/data-types/array) или [`Array(FixedString)`](/sql-reference/data-types/array) -* `needles` — токены для поиска. Поддерживается не более 64 токенов. [`String`](/sql-reference/data-types/string) или [`Array(String)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает 1, если найдены все токены. В противном случае — 0. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования для строкового столбца** - -```sql title=Query -CREATE TABLE table ( - id UInt32, - msg String, - INDEX idx(msg) TYPE text(tokenizer = splitByString(['()', '\\'])) -) -ENGINE = MergeTree -ORDER BY id; - -INSERT INTO table VALUES (1, '()a,\\bc()d'), (2, '()\\a()bc\\d'), (3, ',()a\\,bc,(),d,'); - -SELECT count() FROM table WHERE hasAllTokens(msg, 'a\\d()'); -``` - -```response title=Response -┌─count()─┐ -│ 1 │ -└─────────┘ -``` - -**Укажите подстроки для поиска по точному совпадению (без токенизации) в массиве** - -```sql title=Query -SELECT count() FROM table WHERE hasAllTokens(msg, ['a', 'd']); -``` - -```response title=Response -┌─count()─┐ -│ 1 │ -└─────────┘ -``` - -**Сгенерируйте подстроки с помощью функции `tokens`** - -```sql title=Query -SELECT count() FROM table WHERE hasAllTokens(msg, tokens('a()d', 'splitByString', ['()', '\\'])); -``` - -```response title=Response -┌─count()─┐ -│ 1 │ -└─────────┘ -``` - -**Примеры использования столбцов типов Array и Map** - -```sql title=Query -CREATE TABLE log ( - id UInt32, - tags Array(String), - attributes Map(String, String), - INDEX idx_tags (tags) TYPE text(tokenizer = splitByNonAlpha), - INDEX idx_attributes_keys mapKeys(attributes) TYPE text(tokenizer = array), - INDEX idx_attributes_vals mapValues(attributes) TYPE text(tokenizer = array) -) -ENGINE = MergeTree -ORDER BY id; - -INSERT INTO log VALUES - (1, ['clickhouse', 'clickhouse cloud'], {'address': '192.0.0.1', 'log_level': 'INFO'}), - (2, ['chdb'], {'embedded': 'true', 'log_level': 'DEBUG'}); -``` - -```response title=Response -``` - -**Пример со столбцом типа массив** - -```sql title=Query -SELECT count() FROM log WHERE hasAllTokens(tags, 'clickhouse'); -``` - -```response title=Response -┌─count()─┐ -│ 1 │ -└─────────┘ -``` - -**Пример использования mapKeys** - -```sql title=Query -SELECT count() FROM log WHERE hasAllTokens(mapKeys(attributes), ['address', 'log_level']); -``` - - -```response title=Response -┌─count()─┐ -│ 1 │ -└─────────┘ -``` - -**Пример с mapValues** - -```sql title=Query -SELECT count() FROM log WHERE hasAllTokens(mapValues(attributes), ['192.0.0.1', 'DEBUG']); -``` - -```response title=Response -┌─count()─┐ -│ 0 │ -└─────────┘ -``` - - -## hasAnyTokens - -Добавлена в: v25.10 - -Возвращает 1, если хотя бы один токен в строке или массиве `needle` совпадает со строкой `input`, и 0 в противном случае. Если `input` — это столбец, возвращает все строки, которые удовлетворяют этому условию. - -:::note -Для столбца `input` должен быть определён [текстовый индекс](../../engines/table-engines/mergetree-family/invertedindexes) для оптимальной производительности. -Если текстовый индекс не определён, функция выполняет полное сканирование столбца (brute-force), которое на порядки медленнее поиска по индексу. -::: - -Перед поиском функция выполняет токенизацию: - -* аргумента `input` (всегда) и -* аргумента `needle` (если он задан как тип [String](../../sql-reference/data-types/string.md)) - с использованием токенизатора, указанного для текстового индекса. - Если для столбца не определён текстовый индекс, вместо этого используется токенизатор `splitByNonAlpha`. - Если аргумент `needle` имеет тип [Array(String)](../../sql-reference/data-types/array.md), каждый элемент массива рассматривается как отдельный токен — дополнительная токенизация не выполняется. - -Дубликаты токенов игнорируются. -Например, ['ClickHouse', 'ClickHouse'] обрабатывается так же, как ['ClickHouse']. - -**Синтаксис** - -```sql -hasAnyTokens(input, needles) -``` - -**Псевдонимы**: `hasAnyToken` - -**Аргументы** - -* `input` — Входной столбец. [`String`](/sql-reference/data-types/string) или [`FixedString`](/sql-reference/data-types/fixedstring) или [`Array(String)`](/sql-reference/data-types/array) или [`Array(FixedString)`](/sql-reference/data-types/array) -* `needles` — Токены для поиска. Поддерживается не более 64 токенов. [`String`](/sql-reference/data-types/string) или [`Array(String)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает `1`, если найдено хотя бы одно совпадение, в противном случае — `0`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования для строкового столбца** - -```sql title=Query -CREATE TABLE table ( - id UInt32, - msg String, - INDEX idx(msg) TYPE text(tokenizer = splitByString(['()', '\\'])) -) -ENGINE = MergeTree -ORDER BY id; - -INSERT INTO table VALUES (1, '()a,\\bc()d'), (2, '()\\a()bc\\d'), (3, ',()a\\,bc,(),d,'); - -SELECT count() FROM table WHERE hasAnyTokens(msg, 'a\\d()'); -``` - -```response title=Response -┌─count()─┐ -│ 3 │ -└─────────┘ -``` - -**Указать значения для поиска в неизменном виде (без токенизации) в массиве** - -```sql title=Query -SELECT count() FROM table WHERE hasAnyTokens(msg, ['a', 'd']); -``` - -```response title=Response -┌─count()─┐ -│ 3 │ -└─────────┘ -``` - -**Сгенерируйте искомые строки с помощью функции `tokens`** - -```sql title=Query -SELECT count() FROM table WHERE hasAnyTokens(msg, tokens('a()d', 'splitByString', ['()', '\\'])); -``` - -```response title=Response -┌─count()─┐ -│ 3 │ -└─────────┘ -``` - -**Примеры использования столбцов с типами Array и Map** - -```sql title=Query -CREATE TABLE log ( - id UInt32, - tags Array(String), - attributes Map(String, String), - INDEX idx_tags (tags) TYPE text(tokenizer = splitByNonAlpha), - INDEX idx_attributes_keys mapKeys(attributes) TYPE text(tokenizer = array), - INDEX idx_attributes_vals mapValues(attributes) TYPE text(tokenizer = array) -) -ENGINE = MergeTree -ORDER BY id; - -INSERT INTO log VALUES - (1, ['clickhouse', 'clickhouse cloud'], {'address': '192.0.0.1', 'log_level': 'INFO'}), - (2, ['chdb'], {'embedded': 'true', 'log_level': 'DEBUG'}); -``` - -```response title=Response -``` - -**Пример со столбцом типа массив** - -```sql title=Query -SELECT count() FROM log WHERE hasAnyTokens(tags, 'clickhouse'); -``` - -```response title=Response -┌─count()─┐ -│ 1 │ -└─────────┘ -``` - -**Пример с mapKeys** - -```sql title=Query -SELECT count() FROM log WHERE hasAnyTokens(mapKeys(attributes), ['address', 'log_level']); -``` - - -```response title=Response -┌─count()─┐ -│ 2 │ -└─────────┘ -``` - -**Пример использования mapValues** - -```sql title=Query -SELECT count() FROM log WHERE hasAnyTokens(mapValues(attributes), ['192.0.0.1', 'DEBUG']); -``` - -```response title=Response -┌─count()─┐ -│ 2 │ -└─────────┘ -``` - - -## hasSubsequence - -Введена в версии v23.7 - -Проверяет, является ли `needle` подпоследовательностью `haystack`. -Подпоследовательность строки — это последовательность, которую можно получить из другой строки, удалив некоторые символы или ни одного, не меняя порядок оставшихся символов. - -**Синтаксис** - -```sql -hasSubsequence(haystack, needle) -``` - -**Аргументы** - -* `haystack` — строка, в которой выполняется поиск подпоследовательности. [`String`](/sql-reference/data-types/string) -* `needle` — подпоследовательность, которую нужно найти. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает `1`, если needle является подпоследовательностью haystack, в противном случае — `0`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Базовая проверка подпоследовательности** - -```sql title=Query -SELECT hasSubsequence('Hello World', 'HlWrd') -``` - -```response title=Response -┌─hasSubsequence('Hello World', 'HlWrd')─┐ -│ 1 │ -└────────────────────────────────────────┘ -``` - -**Подпоследовательность не найдена** - -```sql title=Query -SELECT hasSubsequence('Hello World', 'xyz') -``` - -```response title=Response -┌─hasSubsequence('Hello World', 'xyz')─┐ -│ 0 │ -└──────────────────────────────────────┘ -``` - - -## hasSubsequenceCaseInsensitive - -Добавлено в версии: v23.7 - -Аналог [`hasSubsequence`](#hasSubsequence), но выполняет поиск без учета регистра. - -**Синтаксис** - -```sql -hasSubsequenceCaseInsensitive(haystack, needle) -``` - -**Аргументы** - -* `haystack` — строка, в которой выполняется поиск. [`String`](/sql-reference/data-types/string) -* `needle` — подпоследовательность, которую необходимо найти. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает 1, если `needle` является подпоследовательностью `haystack`, в противном случае — 0. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT hasSubsequenceCaseInsensitive('garbage', 'ARG'); -``` - -```response title=Response -┌─hasSubsequenceCaseInsensitive('garbage', 'ARG')─┐ -│ 1 │ -└─────────────────────────────────────────────────┘ -``` - - -## hasSubsequenceCaseInsensitiveUTF8 - -Добавлена в версии v23.7 - -Аналог функции [`hasSubsequenceUTF8`](#hasSubsequenceUTF8), но выполняет поиск без учета регистра. - -**Синтаксис** - -```sql -hasSubsequenceCaseInsensitiveUTF8(haystack, needle) -``` - -**Аргументы** - -* `haystack` — строка в кодировке UTF-8, в которой выполняется поиск. [`String`](/sql-reference/data-types/string) -* `needle` — подпоследовательность в строке в кодировке UTF-8, которую требуется найти. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает 1, если `needle` является подпоследовательностью `haystack`, иначе 0. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT hasSubsequenceCaseInsensitiveUTF8('ClickHouse - столбцовая система управления базами данных', 'СИСТЕМА'); -``` - -```response title=Response -┌─hasSubsequen⋯ 'СИСТЕМА')─┐ -│ 1 │ -└──────────────────────────┘ -``` - - -## hasSubsequenceUTF8 - -Добавлена в версии: v23.7 - -Аналог функции [`hasSubsequence`](/sql-reference/functions/string-search-functions#hasSubsequence), но предполагает, что и исходная строка, и образец закодированы в UTF-8. - -**Синтаксис** - -```sql -hasSubsequenceUTF8(haystack, needle) -``` - -**Аргументы** - -* `haystack` — строка, в которой выполняется поиск. [`String`](/sql-reference/data-types/string) -* `needle` — подпоследовательность, которую нужно найти. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает `1`, если `needle` является подпоследовательностью `haystack`, иначе `0`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT hasSubsequenceUTF8('картошка', 'кошка'); -``` - -```response title=Response -┌─hasSubsequen⋯', 'кошка')─┐ -│ 1 │ -└──────────────────────────┘ -``` - -**Несовпадающая подпоследовательность** - -```sql title=Query -SELECT hasSubsequenceUTF8('картошка', 'апельсин'); -``` - -```response title=Response -┌─hasSubsequen⋯'апельсин')─┐ -│ 0 │ -└──────────────────────────┘ -``` - - -## hasToken - -Появилась в версии: v20.1 - -Проверяет, присутствует ли указанный токен в строке (haystack). - -Токен определяется как максимально возможная последовательность идущих подряд символов `[0-9A-Za-z_]`, то есть цифр, ASCII‑букв и символа подчёркивания. - -**Синтаксис** - -```sql -hasToken(haystack, token) -``` - -**Аргументы** - -* `haystack` — Строка, в которой выполняется поиск. [`String`](/sql-reference/data-types/string) -* `token` — Искомый токен. [`const String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает `1`, если токен найден, в противном случае — `0`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Поиск токена** - -```sql title=Query -SELECT hasToken('clickhouse test', 'test') -``` - -```response title=Response -┌─hasToken('clickhouse test', 'test')─┐ -│ 1 │ -└─────────────────────────────────────┘ -``` - - -## hasTokenCaseInsensitive - -Впервые появилась в: v - -Выполняет регистронезависимый поиск значения needle в haystack с использованием индекса tokenbf_v1. - -**Синтаксис** - -```sql -``` - -**Аргументы** - -* Нет. - -**Возвращаемое значение** - -**Примеры** - - -## hasTokenCaseInsensitiveOrNull - -Введена в версии: v - -Выполняет поиск подстроки в строке без учета регистра с использованием индекса tokenbf_v1. Возвращает null, если подстрока имеет некорректный формат. - -**Синтаксис** - -```sql -``` - -**Аргументы** - -* Нет аргументов. - -**Возвращаемое значение** - -**Примеры** - - -## hasTokenOrNull - -Появилась в версии: v20.1 - -Аналог функции [`hasToken`](#hasToken), но возвращает null, если токен имеет некорректный формат. - -**Синтаксис** - -```sql -hasTokenOrNull(haystack, token) -``` - -**Аргументы** - -* `haystack` — строка, в которой выполняется поиск. Должна быть константой. [`String`](/sql-reference/data-types/string) -* `token` — токен для поиска. [`const String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает `1`, если токен найден, `0` — в противном случае, и `null`, если токен имеет неверный формат. [`Nullable(UInt8)`](/sql-reference/data-types/nullable) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT hasTokenOrNull('apple banana cherry', 'ban ana'); -``` - -```response title=Response -┌─hasTokenOrNu⋯ 'ban ana')─┐ -│ ᴺᵁᴸᴸ │ -└──────────────────────────┘ -``` - - -## ilike - -Добавлено в: v20.6 - -Аналог [`like`](#like), но выполняет поиск независимо от регистра. - -**Синтаксис** - -```sql -ilike(haystack, pattern) --- haystack ILIKE pattern -``` - -**Аргументы** - -* `haystack` — строка, в которой выполняется поиск. [`String`](/sql-reference/data-types/string) или [`FixedString`](/sql-reference/data-types/fixedstring) -* `pattern` — шаблон LIKE для сопоставления. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает `1`, если строка соответствует шаблону LIKE (без учета регистра), иначе `0`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT ilike('ClickHouse', '%house%'); -``` - -```response title=Response -┌─ilike('ClickHouse', '%house%')─┐ -│ 1 │ -└────────────────────────────────┘ -``` - - -## like - -Введена в версии: v1.1 - -Возвращает, соответствует ли строка `haystack` выражению `LIKE` `pattern`. - -Выражение `LIKE` может содержать обычные символы и следующие метасимволы: - -* `%` обозначает произвольное количество произвольных символов (включая ноль символов). -* `_` обозначает один произвольный символ. -* `\` используется для экранирования литералов `%`, `_` и `\`. - -Сопоставление выполняется по правилам UTF-8, например `_` соответствует символу Unicode `¥`, который в UTF-8 представлен двумя байтами. - -Если `haystack` или выражение `LIKE` не являются корректной строкой UTF-8, поведение не определено. - -Автоматическая нормализация Unicode не выполняется, для этого можно использовать функции `normalizeUTF8*`. - -Чтобы сопоставить литеральные `%`, `_` и `\` (которые являются метасимволами `LIKE`), добавьте перед ними обратную косую черту: `\%`, `\_` и `\\`. -Обратная косая черта теряет своё специальное значение (то есть интерпретируется буквально), если она предшествует символу, отличному от `%`, `_` или `\`. - -:::note -ClickHouse также требует [экранировать обратные косые черты в строках](../syntax.md#string), поэтому на практике нужно писать `\\%`, `\\_` и `\\\\`. -::: - -Для выражений `LIKE` вида `%needle%` функция работает так же быстро, как функция `position`. -Все остальные выражения `LIKE` внутренне преобразуются в регулярное выражение и выполняются с производительностью, сопоставимой с функцией `match`. - -**Синтаксис** - -```sql -like(haystack, pattern) --- haystack LIKE pattern -``` - -**Аргументы** - -* `haystack` — строка, в которой выполняется поиск. [`String`](/sql-reference/data-types/string) или [`FixedString`](/sql-reference/data-types/fixedstring) -* `pattern` — шаблон для оператора `LIKE`. Может содержать `%` (совпадает с любым количеством символов), `_` (совпадает с одним символом) и `\` для экранирования. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает `1`, если строка соответствует шаблону `LIKE`, иначе — `0`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT like('ClickHouse', '%House'); -``` - -```response title=Response -┌─like('ClickHouse', '%House')─┐ -│ 1 │ -└──────────────────────────────┘ -``` - -**Подстановочный символ для одного символа** - -```sql title=Query -SELECT like('ClickHouse', 'Click_ouse'); -``` - -```response title=Response -┌─like('ClickH⋯lick_ouse')─┐ -│ 1 │ -└──────────────────────────┘ -``` - -**Несоответствующий шаблон** - -```sql title=Query -SELECT like('ClickHouse', '%SQL%'); -``` - -```response title=Response -┌─like('ClickHouse', '%SQL%')─┐ -│ 0 │ -└─────────────────────────────┘ -``` - - -## locate - -Впервые появилась в версии v18.16 - -Аналог функции [`position`](#position), но с аргументами `haystack` и `locate` в обратном порядке. - -:::note Поведение зависит от версии -Поведение этой функции зависит от версии ClickHouse: - -* в версиях < v24.3 `locate` была псевдонимом функции `position` и принимала аргументы `(haystack, needle[, start_pos])`; -* в версиях >= 24.3 `locate` является самостоятельной функцией (для лучшей совместимости с MySQL) и принимает аргументы `(needle, haystack[, start_pos])`. - Предыдущее поведение можно восстановить, используя параметр настройки `function_locate_has_mysql_compatible_argument_order = false`. - ::: - -**Синтаксис** - -```sql -locate(needle, haystack[, start_pos]) -``` - -**Аргументы** - -* `needle` — подстрока для поиска. [`String`](/sql-reference/data-types/string) -* `haystack` — строка, в которой выполняется поиск. [`String`](/sql-reference/data-types/string) или [`Enum`](/sql-reference/data-types/enum) -* `start_pos` — необязательный параметр. Позиция (нумерация с 1) в `haystack`, с которой начинается поиск. [`UInt`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает начальную позицию в байтах, считая с 1, если подстрока найдена, и `0`, если подстрока не найдена. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT locate('ca', 'abcabc') -``` - -```response title=Response -┌─locate('ca', 'abcabc')─┐ -│ 3 │ -└────────────────────────┘ -``` - - -## match - -Добавлено в версии: v1.1 - -Проверяет, соответствует ли переданная строка указанному шаблону регулярного выражения. - -Эта функция использует библиотеку регулярных выражений RE2. Обратитесь к [re2](https://github.com/google/re2/wiki/Syntax) для получения сведений о поддерживаемом синтаксисе. - -Сопоставление исходит из предположения, что данные находятся в кодировке UTF-8, например, `¥` внутренне использует два байта, но при сопоставлении рассматривается как один кодпоинт. -Регулярное выражение не должно содержать байтов NULL. -Если строка (haystack) или шаблон не являются корректным UTF-8, поведение не определено. - -В отличие от поведения по умолчанию в re2, `.` также сопоставляется с символами перевода строки. Чтобы отключить это, добавьте к шаблону префикс `(?-s)`. - -Шаблон автоматически якорится с обеих сторон (как если бы шаблон начинался с `^` и заканчивался `$`). - -Если вам нужно только искать подстроки, вместо этого вы можете использовать функции [`like`](#like) или [`position`](#position) — они работают значительно быстрее, чем эта функция. - -Альтернативный синтаксис оператора: `haystack REGEXP pattern`. - -**Синтаксис** - -```sql -match(haystack, pattern) -``` - -**Псевдонимы**: `REGEXP_MATCHES` - -**Аргументы** - -* `haystack` — Строка, в которой выполняется поиск по шаблону. [`String`](/sql-reference/data-types/string) -* `pattern` — Шаблон регулярного выражения. [`const String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает `1`, если найдено совпадение с шаблоном, и `0` в противном случае. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Базовое сопоставление с шаблоном** - -```sql title=Query -SELECT match('Привет, мир', 'Привет.*') -``` - -```response title=Response -┌─match('Hello World', 'Hello.*')─┐ -│ 1 │ -└─────────────────────────────────┘ -``` - -**Несовпадение шаблона** - -```sql title=Query -SELECT match('Hello World', 'goodbye.*') -``` - -```response title=Response -┌─match('Hello World', 'goodbye.*')─┐ -│ 0 │ -└───────────────────────────────────┘ -``` - - -## multiFuzzyMatchAllIndices - -Введена в: v20.1 - -Аналог [`multiFuzzyMatchAny`](#multiFuzzyMatchAny), но возвращает массив всех индексов в произвольном порядке, элементы которых соответствуют набору строк (haystack) при фиксированном [редакционном расстоянии](https://en.wikipedia.org/wiki/Edit_distance). - -**Синтаксис** - -```sql -multiFuzzyMatchAllIndices(искатель, расстояние, [шаблон1, шаблон2, ..., шаблонN]) -``` - -**Аргументы** - -* `haystack` — строка, в которой выполняется поиск. [`String`](/sql-reference/data-types/string) -* `distance` — максимальное расстояние редактирования для нечеткого поиска. [`UInt8`](/sql-reference/data-types/int-uint) -* `pattern` — массив шаблонов для сопоставления. [`Array(String)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает массив всех индексов (начиная с 1), которые соответствуют строке `haystack` в пределах указанного расстояния редактирования, в любом порядке. Возвращает пустой массив, если соответствия не найдены. [`Array(UInt64)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT multiFuzzyMatchAllIndices('ClickHouse', 2, ['ClickHouse', 'ClckHouse', 'ClickHose', 'House']); -``` - -```response title=Response -┌─multiFuzzyMa⋯, 'House'])─┐ -│ [3,1,4,2] │ -└──────────────────────────┘ -``` - - -## multiFuzzyMatchAny - -Впервые появилась в: v20.1 - -Аналог функции [`multiMatchAny`](#multiMatchAny), но возвращает 1, если любой из шаблонов совпадает со строкой с учётом заданного [редакционного расстояния](https://en.wikipedia.org/wiki/Edit_distance). -Эта функция использует экспериментальную возможность библиотеки [hyperscan](https://intel.github.io/hyperscan/dev-reference/compilation.html#approximate-matching) и может работать медленно в некоторых крайних случаях. -Производительность зависит от значения редакционного расстояния и используемых шаблонов, но всегда ниже по сравнению с вариантами без неточного сопоставления. - -:::note -Семейство функций `multiFuzzyMatch*()` не поддерживает регулярные выражения в кодировке UTF-8 (они рассматриваются как последовательность байт) из-за ограничений hyperscan. -::: - -**Синтаксис** - -```sql -multiFuzzyMatchAny(haystack, distance, [pattern1, pattern2, ..., patternN]) -``` - -**Аргументы** - -* `haystack` — Строка, в которой выполняется поиск. [`String`](/sql-reference/data-types/string) -* `distance` — Максимальное редакционное расстояние для нечеткого поиска. [`UInt8`](/sql-reference/data-types/int-uint) -* `pattern` — Необязательный параметр. Массив шаблонов для сопоставления. [`Array(String)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает `1`, если хотя бы один шаблон совпадает со строкой `haystack` в пределах заданного редакционного расстояния, иначе `0`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT multiFuzzyMatchAny('ClickHouse', 2, ['ClickHouse', 'ClckHouse', 'ClickHose']); -``` - -```response title=Response -┌─multiFuzzyMa⋯lickHose'])─┐ -│ 1 │ -└──────────────────────────┘ -``` - - -## multiFuzzyMatchAnyIndex - -Добавлена в: v20.1 - -Аналог функции [`multiFuzzyMatchAny`](#multiFuzzyMatchAny), но возвращает любой индекс, для которого строка соответствует строке поиска при фиксированном [редакционном расстоянии](https://en.wikipedia.org/wiki/Edit_distance). - -**Синтаксис** - -```sql -multiFuzzyMatchAnyIndex(стог_сена, расстояние, [шаблон1, шаблон2, ..., шаблонn]) -``` - -**Аргументы** - -* `haystack` — Строка, в которой выполняется поиск. [`String`](/sql-reference/data-types/string) -* `distance` — Максимальное редакционное расстояние для нечеткого сопоставления. [`UInt8`](/sql-reference/data-types/int-uint) -* `pattern` — Массив шаблонов для поиска соответствий. [`Array(String)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает индекс (начиная с 1) любого шаблона, который соответствует `haystack` в пределах заданного редакционного расстояния, в противном случае — `0`. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT multiFuzzyMatchAnyIndex('ClickHouse', 2, ['ClckHouse', 'ClickHose', 'ClickHouse']); -``` - -```response title=Response -┌─multiFuzzyMa⋯ickHouse'])─┐ -│ 2 │ -└──────────────────────────┘ -``` - - -## multiMatchAllIndices - -Добавлена в версии: v20.1 - -Аналог [`multiMatchAny`](#multiMatchAny), но возвращает массив всех индексов, соответствующих элементам `haystack` в любом порядке. - -**Синтаксис** - -```sql -multiMatchAllIndices(haystack, [pattern1, pattern2, ..., patternn]) -``` - -**Аргументы** - -* `haystack` — Строка, в которой выполняется поиск. [`String`](/sql-reference/data-types/string) -* `pattern` — Регулярное выражение для поиска совпадений. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Массив всех индексов (начиная с 1), в которых в `haystack` найдено совпадение с шаблоном, в произвольном порядке. Возвращает пустой массив, если совпадений не найдено. [`Array(UInt64)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT multiMatchAllIndices('ClickHouse', ['[0-9]', 'House', 'Click', 'ouse']); -``` - -```response title=Response -┌─multiMatchAl⋯', 'ouse'])─┐ -│ [3, 2, 4] │ -└──────────────────────────┘ -``` - - -## multiMatchAny - -Введена в версии: v20.1 - -Проверяет, соответствует ли хотя бы один из нескольких шаблонов регулярных выражений исходной строке. - -Если вам нужно только искать несколько подстрок в строке, вместо этой функции вы можете использовать [`multiSearchAny`](#multiSearchAny) — она работает гораздо быстрее. - -**Синтаксис** - -```sql -multiMatchAny(строка, шаблон1[, шаблон2, ...]) -``` - -**Аргументы** - -* `haystack` — строка, в которой выполняется поиск шаблонов. [`String`](/sql-reference/data-types/string) -* `pattern1[, pattern2, ...]` — массив, содержащий один или несколько шаблонов регулярных выражений. [`Array(String)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает `1`, если хотя бы один шаблон совпал, иначе `0`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Сопоставление с несколькими шаблонами** - -```sql title=Query -SELECT multiMatchAny('Hello World', ['Hello.*', 'foo.*']) -``` - -```response title=Response -┌─multiMatchAny('Hello World', ['Hello.*', 'foo.*'])─┐ -│ 1 │ -└────────────────────────────────────────────────────┘ -``` - -**Нет подходящих шаблонов** - -```sql title=Query -SELECT multiMatchAny('Hello World', ['goodbye.*', 'foo.*']) -``` - -```response title=Response -┌─multiMatchAny('Hello World', ['goodbye.*', 'foo.*'])─┐ -│ 0 │ -└──────────────────────────────────────────────────────┘ -``` - - -## multiMatchAnyIndex - -Появилась в версии: v20.1 - -Аналог [`multiMatchAny`](#multiMatchAny), но возвращает любой индекс, соответствующий строке, в которой осуществляется поиск. - -**Синтаксис** - -```sql -multiMatchAnyIndex(haystack, [pattern1, pattern2, ..., patternn]) -``` - -**Аргументы** - -* `haystack` — строка, в которой выполняется поиск. [`String`](/sql-reference/data-types/string) -* `pattern` — регулярные выражения для поиска совпадений. [`Array(String)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает индекс (начиная с 1) первого шаблона, для которого найдено совпадение, или 0, если совпадений нет. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT multiMatchAnyIndex('ClickHouse', ['[0-9]', 'House', 'Click']); -``` - -```response title=Response -┌─multiMatchAn⋯, 'Click'])─┐ -│ 3 │ -└──────────────────────────┘ -``` - - -## multiSearchAllPositions - -Введена в версии v20.1 - -Аналог функции [`position`](#position), но возвращает массив позиций (в байтах, начиная с 1) для нескольких подстрок `needle` в строке `haystack`. - -Все функции `multiSearch*()` поддерживают не более 2^8 подстрок `needle`. - -**Синтаксис** - -```sql -multiSearchAllPositions(haystack, needle1[, needle2, ...]) -``` - -**Аргументы** - -* `haystack` — Строка, в которой выполняется поиск. [`String`](/sql-reference/data-types/string) -* `needle1[, needle2, ...]` — Массив из одной или нескольких подстрок для поиска. [`Array(String)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает массив начальных позиций в байтах, считая с 1, если подстрока найдена, и `0`, если подстрока не найдена. [`Array(UInt64)`](/sql-reference/data-types/array) - -**Примеры** - -**Поиск по нескольким подстрокам** - -```sql title=Query -SELECT multiSearchAllPositions('Привет, мир!', ['привет', '!', 'мир']) -``` - -```response title=Response -┌─multiSearchAllPositions('Hello, World!', ['hello', '!', 'world'])─┐ -│ [0,13,0] │ -└───────────────────────────────────────────────────────────────────┘ -``` - - -## multiSearchAllPositionsCaseInsensitive - -Введена в версии: v20.1 - -Аналог [`multiSearchAllPositions`](#multiSearchAllPositions), но игнорирует регистр. - -**Синтаксис** - -```sql -multiSearchAllPositionsCaseInsensitive(haystack, needle1[, needle2, ...]) -``` - -**Аргументы** - -* `haystack` — Строка, в которой выполняется поиск. [`String`](/sql-reference/data-types/string) -* `needle1[, needle2, ...]` — Массив одной или нескольких подстрок, по которым выполняется поиск. [`Array(String)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает массив начальных позиций подстроки в байтах с нумерацией от 1 (если подстрока найдена) или `0`, если подстрока не найдена. [`Array(UInt64)`](/sql-reference/data-types/array) - -**Примеры** - -**Регистронезависимый множественный поиск** - -```sql title=Query -SELECT multiSearchAllPositionsCaseInsensitive('ClickHouse',['c','h']) -``` - -```response title=Response -┌─multiSearchA⋯['c', 'h'])─┐ -│ [1,6] │ -└──────────────────────────┘ -``` - - -## multiSearchAllPositionsCaseInsensitiveUTF8 - -Добавлена в: v20.1 - -Аналог [`multiSearchAllPositionsUTF8`](#multiSearchAllPositionsUTF8), но игнорирует регистр. - -**Синтаксис** - -```sql -multiSearchAllPositionsCaseInsensitiveUTF8(строка, [шаблон1, шаблон2, ..., шаблонN]) -``` - -**Аргументы** - -* `haystack` — строка в кодировке UTF-8, в которой выполняется поиск. [`String`](/sql-reference/data-types/string) -* `needle` — подстроки в кодировке UTF-8, которые требуется найти. [`Array(String)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Массив позиций начала подстроки в байтах, счёт от 1 (если подстрока была найдена). Возвращает 0, если подстрока не найдена. [`Array`](/sql-reference/data-types/array) - -**Примеры** - -**Регистронезависимый поиск в UTF-8** - -```sql title=Query -SELECT multiSearchAllPositionsCaseInsensitiveUTF8('Здравствуй, мир!', ['здравствуй', 'МИР']); -``` - -```response title=Response -┌─multiSearchA⋯й', 'МИР'])─┐ -│ [1, 13] │ -└──────────────────────────┘ -``` - - -## multiSearchAllPositionsUTF8 - -Добавлена в версии: v20.1 - -Аналог [`multiSearchAllPositions`](#multiSearchAllPositions), но предполагается, что `haystack` и подстроки `needle` — это строки в кодировке UTF-8. - -**Синтаксис** - -```sql -multiSearchAllPositionsUTF8(haystack, needle1[, needle2, ...]) -``` - -**Аргументы** - -* `haystack` — строка в кодировке UTF-8, в которой выполняется поиск. [`String`](/sql-reference/data-types/string) -* `needle1[, needle2, ...]` — массив подстрок в кодировке UTF-8, которые требуется найти. [`Array(String)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает массив начальных позиций в байтах, считая с 1 (если подстрока найдена), или `0`, если подстрока не найдена. [`Array`](/sql-reference/data-types/array) - -**Примеры** - -**Множественный поиск в UTF-8** - -```sql title=Query -SELECT multiSearchAllPositionsUTF8('ClickHouse',['C','H']) -``` - -```response title=Response -┌─multiSearchAllPositionsUTF8('ClickHouse', ['C', 'H'])─┐ -│ [1,6] │ -└───────────────────────────────────────────────────────┘ -``` - - -## multiSearchAny - -Введена в версии: v20.1 - -Проверяет, содержит ли исходная строка хотя бы одну строку из набора строк-образцов. - -Функции [`multiSearchAnyCaseInsensitive`](#multiSearchAnyCaseInsensitive), [`multiSearchAnyUTF8`](#multiSearchAnyUTF8) и [`multiSearchAnyCaseInsensitiveUTF8`](#multiSearchAnyCaseInsensitiveUTF8) предоставляют регистронезависимые и/или UTF‑8‑варианты этой функции. - -**Синтаксис** - -```sql -multiSearchAny(стог_сена, искомая1[, искомая2, ...]) -``` - -**Аргументы** - -* `haystack` — строка, в которой выполняется поиск. [`String`](/sql-reference/data-types/string) -* `needle1[, needle2, ...]` — массив подстрок, по которым выполняется поиск. [`Array(String)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает `1`, если найдено хотя бы одно совпадение, в противном случае — `0`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Поиск при наличии любого совпадения** - -```sql title=Query -SELECT multiSearchAny('ClickHouse',['C','H']) -``` - -```response title=Response -┌─multiSearchAny('ClickHouse', ['C', 'H'])─┐ -│ 1 │ -└──────────────────────────────────────────┘ -``` - - -## multiSearchAnyCaseInsensitive - -Введена в версии v20.1 - -Аналог [multiSearchAny](#multiSearchAny), но не учитывает регистр. - -**Синтаксис** - -```sql -multiSearchAnyCaseInsensitive(строка, [подстрока1, подстрока2, ..., подстрокаN]) -``` - -**Аргументы** - -* `haystack` — Строка, в которой выполняется поиск. [`String`](/sql-reference/data-types/string) -* `needle` — Подстроки, которые нужно найти. [`Array(String)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает `1`, если найдено хотя бы одно совпадение без учета регистра, или `0`, если ни одного совпадения без учета регистра не найдено. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Поиск без учета регистра** - -```sql title=Query -SELECT multiSearchAnyCaseInsensitive('ClickHouse',['c','h']) -``` - -```response title=Response -┌─multiSearchAnyCaseInsensitive('ClickHouse', ['c', 'h'])─┐ -│ 1 │ -└─────────────────────────────────────────────────────────┘ -``` - - -## multiSearchAnyCaseInsensitiveUTF8 - -Появилась в версии: v20.1 - -Аналог [multiSearchAnyUTF8](#multiSearchAnyUTF8), но без учета регистра. - -**Синтаксис** - -```sql -multiSearchAnyCaseInsensitiveUTF8(иглаВСтоге, [игла1, игла2, ..., иглаN]) -``` - -**Аргументы** - -* `haystack` — строка в кодировке UTF-8, в которой выполняется поиск. [`String`](/sql-reference/data-types/string) -* `needle` — подстроки в кодировке UTF-8, которые нужно найти. [`Array(String)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает `1`, если найдено хотя бы одно совпадение без учета регистра, в противном случае — `0`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Дана строка UTF-8 'Здравствуйте', проверить, присутствует ли символ 'з' (строчная буква)** - -```sql title=Query -SELECT multiSearchAnyCaseInsensitiveUTF8('Здравствуйте',['з']) -``` - -```response title=Response -┌─multiSearchA⋯те', ['з'])─┐ -│ 1 │ -└──────────────────────────┘ -``` - - -## multiSearchAnyUTF8 - -Впервые появилась в: v20.1 - -Аналог [multiSearchAny](#multiSearchAny), но предполагает, что `haystack` и подстроки `needle` — строки в кодировке UTF-8. - -**Синтаксис** - -```sql -multiSearchAnyUTF8(haystack, [needle1, needle2, ..., needleN]) -``` - -**Аргументы** - -* `haystack` — строка в кодировке UTF-8, в которой выполняется поиск. [`String`](/sql-reference/data-types/string) -* `needle` — подстроки в кодировке UTF-8, которые нужно найти. [`Array(String)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает `1`, если найдено хотя бы одно совпадение, в противном случае `0`, если не найдено ни одного совпадения. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Для строки '你好,世界' ('Hello, world') в кодировке UTF-8 проверьте, есть ли в строке символы 你 или 界** - -```sql title=Query -SELECT multiSearchAnyUTF8('你好,世界', ['你', '界']) -``` - -```response title=Response -┌─multiSearchA⋯你', '界'])─┐ -│ 1 │ -└──────────────────────────┘ -``` - - -## multiSearchFirstIndex - -Добавлено в: v20.1 - -Выполняет поиск нескольких строк-образцов в строке-«стоге сена» (с учетом регистра) и возвращает индекс первого найденного образца, начиная с 1. - -**Синтаксис** - -```sql -multiSearchFirstIndex(haystack, [needle1, needle2, ..., needleN]) -``` - -**Аргументы** - -* `haystack` — Строка, в которой выполняется поиск. [`String`](/sql-reference/data-types/string) -* `needles` — Массив строк для поиска. [`Array(String)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает индекс, начинающийся с 1 (позицию в массиве `needles`) первой найденной строки в `haystack`. Возвращает 0, если ни одна из строк не найдена. Поиск чувствителен к регистру. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT multiSearchFirstIndex('База данных ClickHouse', ['Click', 'Database', 'Server']); -``` - -```response title=Response -┌─multiSearchF⋯ 'Server'])─┐ -│ 1 │ -└──────────────────────────┘ -``` - -**Чувствительность к регистру** - -```sql title=Query -SELECT multiSearchFirstIndex('ClickHouse Database', ['CLICK', 'Database', 'Server']); -``` - -```response title=Response -┌─multiSearchF⋯ 'Server'])─┐ -│ 2 │ -└──────────────────────────┘ -``` - -**Совпадений не найдено** - -```sql title=Query -SELECT multiSearchFirstIndex('Привет, мир', ['прощай', 'тест']); -``` - -```response title=Response -┌─multiSearchF⋯', 'test'])─┐ -│ 0 │ -└──────────────────────────┘ -``` - - -## multiSearchFirstIndexCaseInsensitive - -Введено в: v20.1 - -Возвращает индекс `i` (начиная с 1) первой найденной слева подстроки needle_i в строке `haystack` и 0 в противном случае. -Игнорирует регистр. - -**Синтаксис** - -```sql -multiSearchFirstIndexCaseInsensitive(струя, [игла1, игла2, ..., иглаN] -``` - -**Аргументы** - -* `haystack` — строка, в которой выполняется поиск. [`String`](/sql-reference/data-types/string) -* `needle` — подстроки для поиска. [`Array(String)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает индекс (начиная с 1) самой левой найденной подстроки. В противном случае — `0`, если совпадений нет. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT multiSearchFirstIndexCaseInsensitive('пРиВеТ МиР', ['мир', 'привет']); -``` - -```response title=Response -┌─multiSearchF⋯, 'Hello'])─┐ -│ 1 │ -└──────────────────────────┘ -``` - - -## multiSearchFirstIndexCaseInsensitiveUTF8 - -Впервые появилась в: v20.1 - -Выполняет поиск нескольких подстрок (needle) в строке (haystack) без учета регистра с поддержкой кодировки UTF-8 и возвращает индекс первого найденного элемента (с отсчётом от 1). - -**Синтаксис** - -```sql -multiSearchFirstIndexCaseInsensitiveUTF8(haystack, [needle1, needle2, ..., needleN]) -``` - -**Аргументы** - -* `haystack` — Строка, в которой выполняется поиск. [`String`](/sql-reference/data-types/string) -* `needles` — Массив строк для поиска. [`Array(String)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает индекс, начинающийся с 1 (позицию в массиве `needles`), первой строки, найденной в `haystack`. Возвращает 0, если ни одна строка не найдена. Поиск регистронезависимый и учитывает кодировку UTF-8. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT multiSearchFirstIndexCaseInsensitiveUTF8('База данных ClickHouse', ['CLICK', 'data', 'server']); -``` - -```response title=Response -┌─multiSearchF⋯ 'server'])─┐ -│ 1 │ -└──────────────────────────┘ -``` - -**Обработка регистра символов UTF-8** - -```sql title=Query -SELECT multiSearchFirstIndexCaseInsensitiveUTF8('Привет Мир', ['мир', 'ПРИВЕТ']); -``` - -```response title=Response -┌─multiSearchF⋯ 'ПРИВЕТ'])─┐ -│ 1 │ -└──────────────────────────┘ -``` - -**Совпадений не найдено** - -```sql title=Query -SELECT multiSearchFirstIndexCaseInsensitiveUTF8('Привет, мир', ['до свидания', 'тест']); -``` - -```response title=Response -┌─multiSearchF⋯', 'test'])─┐ -│ 0 │ -└──────────────────────────┘ -``` - - -## multiSearchFirstIndexUTF8 - -Введена в версии: v20.1 - -Возвращает индекс `i` (начиная с 1) самой левой найденной подстроки `needle_i` в строке `haystack`, или 0, если совпадений нет. -Предполагается, что `haystack` и `needle` — строки в кодировке UTF-8. - -**Синтаксис** - -```sql -multiSearchFirstIndexUTF8(haystack, [needle1, needle2, ..., needleN]) -``` - -**Аргументы** - -* `haystack` — строка в кодировке UTF-8, в которой выполняется поиск. [`String`](/sql-reference/data-types/string) -* `needle` — массив подстрок в кодировке UTF-8, которые требуется найти. [`Array(String)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает индекс (начиная с 1) самой левой найденной подстроки из массива `needle`. В противном случае — 0, если совпадений нет. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT multiSearchFirstIndexUTF8('Здравствуйте мир', ['мир', 'здравствуйте']); -``` - -```response title=Response -┌─multiSearchF⋯введите'])─┐ -│ 1 │ -└──────────────────────────┘ -``` - - -## multiSearchFirstPosition - -Введена в версии v20.1 - -Аналог функции [`position`](#position), но возвращает смещение самой левой позиции в строке `haystack`, соответствующей любой из нескольких строк `needle`. - -Функции [`multiSearchFirstPositionCaseInsensitive`](#multiSearchFirstPositionCaseInsensitive), [`multiSearchFirstPositionUTF8`](#multiSearchFirstPositionUTF8) и [`multiSearchFirstPositionCaseInsensitiveUTF8`](#multiSearchFirstPositionCaseInsensitiveUTF8) предоставляют варианты этой функции, регистронезависимые и/или работающие с UTF-8. - -**Синтаксис** - -```sql -multiSearchFirstPosition(haystack, needle1[, needle2, ...]) -``` - -**Аргументы** - -* `haystack` — строка, в которой выполняется поиск. [`String`](/sql-reference/data-types/string) -* `needle1[, needle2, ...]` — массив из одной или более подстрок, по которым выполняется поиск. [`Array(String)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает смещение первой (самой левой) позиции в строке `haystack`, которая совпадает с любой из подстрок `needle`; в противном случае возвращает `0`, если совпадений не найдено. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Поиск первой позиции** - -```sql title=Query -SELECT multiSearchFirstPosition('Hello World',['llo', 'Wor', 'ld']) -``` - -```response title=Response -┌─multiSearchFirstPosition('Hello World', ['llo', 'Wor', 'ld'])─┐ -│ 3 │ -└───────────────────────────────────────────────────────────────┘ -``` - - -## multiSearchFirstPositionCaseInsensitive - -Появилась в версии: v20.1 - -Аналог [multiSearchFirstPosition](#multiSearchFirstPosition), но выполняет поиск без учета регистра. - -**Синтаксис** - -```sql -multiSearchFirstPositionCaseInsensitive(строка, [подстрока1, подстрока2, ..., подстрокаN]) -``` - -**Аргументы** - -* `haystack` — строка, в которой выполняется поиск. [`String`](/sql-reference/data-types/string) -* `needle` — массив подстрок для поиска. [`Array(String)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает самое левое смещение в строке `haystack`, где найдено совпадение с любой подстрокой из `needle`. Возвращает `0`, если совпадений нет. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Первая позиция без учёта регистра** - -```sql title=Query -SELECT multiSearchFirstPositionCaseInsensitive('ПРИВЕТ МИР',['мир', 'ир', 'рив']) -``` - -```response title=Response -┌─multiSearchFirstPositionCaseInsensitive('HELLO WORLD', ['wor', 'ld', 'ello'])─┐ -│ 2 │ -└───────────────────────────────────────────────────────────────────────────────┘ -``` - - -## multiSearchFirstPositionCaseInsensitiveUTF8 - -Добавлено в: v20.1 - -Аналогично [multiSearchFirstPosition](#multiSearchFirstPosition), но предполагает, что `haystack` и `needle` — строки в кодировке UTF-8 и не учитывает регистр. - -**Синтаксис** - -```sql -multiSearchFirstPositionCaseInsensitiveUTF8(haystack, [needle1, needle2, ..., needleN]) -``` - -**Аргументы** - -* `haystack` — строка в кодировке UTF-8, в которой выполняется поиск. [`String`](/sql-reference/data-types/string) -* `needle` — массив подстрок в кодировке UTF-8, по которым выполняется поиск. [`Array(String)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает смещение от начала строки `haystack` до самого левого вхождения любой из подстрок `needle` при сравнении без учёта регистра. Возвращает `0`, если совпадений нет. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Найти смещение самого левого вхождения в строке UTF-8 'Здравствуй, мир' ('Hello, world'), которое совпадает с любой из заданных подстрок** - -```sql title=Query -SELECT multiSearchFirstPositionCaseInsensitiveUTF8('Здравствуй, мир', ['МИР', 'вст', 'Здра']) -``` - -```response title=Response -┌─multiSearchFirstPositionCaseInsensitiveUTF8('Здравствуй, мир', ['мир', 'вст', 'Здра'])─┐ -│ 3 │ -└────────────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## multiSearchFirstPositionUTF8 - -Добавлена в версии v20.1 - -Аналог функции [multiSearchFirstPosition](#multiSearchFirstPosition), но предполагает, что `haystack` и `needle` — строки в кодировке UTF-8. - -**Синтаксис** - -```sql -multiSearchFirstPositionUTF8(haystack, [needle1, needle2, ..., needleN]) -``` - -**Аргументы** - -* `haystack` — строка в кодировке UTF-8, в которой выполняется поиск. [`String`](/sql-reference/data-types/string) -* `needle` — массив подстрок в кодировке UTF-8, которые нужно найти. [`Array(String)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Самое левое смещение (позиция, считая слева) в строке `haystack`, где найдено совпадение хотя бы с одной из подстрок `needle`. Возвращает `0`, если совпадений нет. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Найти самое левое смещение в строке UTF-8 'Здравствуй, мир' ('Hello, world'), которое совпадает хотя бы с одной из заданных подстрок** - -```sql title=Query -SELECT multiSearchFirstPositionUTF8('Здравствуй, мир',['мир', 'вст', 'авст']) -``` - -```response title=Response -┌─multiSearchFirstPositionUTF8('Здравствуй, мир', ['мир', 'вст', 'авст'])─┐ -│ 3 │ -└─────────────────────────────────────────────────────────────────────────┘ -``` - - -## ngramDistance - -Добавлена в версии: v20.1 - -Вычисляет расстояние по 4-граммам между двумя строками. -Для этого функция считает симметрическую разность между двумя мультимножествами 4-грамм и нормализует её, деля на сумму их мощностей. -Чем меньше возвращаемое значение, тем более похожи строки. - -Для поиска без учёта регистра и/или в кодировке UTF-8 используйте функции [`ngramDistanceCaseInsensitive`](#ngramDistanceCaseInsensitive), [`ngramDistanceUTF8`](#ngramDistanceUTF8), [`ngramDistanceCaseInsensitiveUTF8`](#ngramDistanceCaseInsensitiveUTF8). - -**Синтаксис** - -```sql -ngramDistance(строка_искания, подстрока) -``` - -**Аргументы** - -* `haystack` — строка для сравнения. [`String`](/sql-reference/data-types/string) -* `needle` — строка для сравнения. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает число типа `Float32` в диапазоне от `0` до `1`. Чем меньше возвращаемое значение, тем более похожи строки. [`Float32`](/sql-reference/data-types/float) - -**Примеры** - -**Вычисление 4-граммного расстояния** - -```sql title=Query -SELECT ngramDistance('ClickHouse', 'ClickHouses') -``` - -```response title=Response -┌─ngramDistance('ClickHouse', 'ClickHouses')─┐ -│ 0.1 │ -└────────────────────────────────────────────┘ -``` - - -## ngramDistanceCaseInsensitive - -Введена в версии: v20.1 - -Предоставляет регистронезависимый вариант функции [`ngramDistance`](#ngramDistance). -Вычисляет расстояние 4-грамм между двумя строками без учета регистра. -Чем меньше возвращаемое значение, тем более похожи строки. - -**Синтаксис** - -```sql -ngramDistanceCaseInsensitive(haystack, needle) -``` - -**Аргументы** - -* `haystack` — первая строка для сравнения. [`String`](/sql-reference/data-types/string) -* `needle` — вторая строка для сравнения. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает число типа `Float32` в диапазоне от `0` до `1`. [`Float32`](/sql-reference/data-types/float) - -**Примеры** - -**Регистронезависимое расстояние по 4-граммам** - -```sql title=Query -SELECT ngramDistanceCaseInsensitive('ClickHouse','clickhouse') -``` - -```response title=Response -┌─ngramDistanceCaseInsensitive('ClickHouse','clickhouse')─┐ -│ 0 │ -└─────────────────────────────────────────────────────────┘ -``` - - -## ngramDistanceCaseInsensitiveUTF8 - -Добавлено в: v20.1 - -Предоставляет вариант функции [`ngramDistance`](#ngramDistance) для UTF-8 без учета регистра. -Предполагается, что строки `needle` и `haystack` закодированы в UTF-8, и регистр символов игнорируется. -Вычисляет расстояние по 3-граммам между двумя строками UTF-8, игнорируя регистр. -Чем меньше возвращаемое значение, тем более похожи строки. - -**Синтаксис** - -```sql -ngramDistanceCaseInsensitiveUTF8(haystack, needle) -``` - -**Аргументы** - -* `haystack` — первая сравниваемая строка в кодировке UTF-8. [`String`](/sql-reference/data-types/string) -* `needle` — вторая сравниваемая строка в кодировке UTF-8. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает число Float32 в диапазоне от `0` до `1`. [`Float32`](/sql-reference/data-types/float) - -**Примеры** - -**Регистронезависимое UTF-8 расстояние по 3-граммам** - -```sql title=Query -SELECT ngramDistanceCaseInsensitiveUTF8('abcde','CDE') -``` - -```response title=Response -┌─ngramDistanceCaseInsensitiveUTF8('abcde','CDE')─┐ -│ 0.5 │ -└─────────────────────────────────────────────────┘ -``` - - -## ngramDistanceUTF8 - -Введена в версии: v20.1 - -Предоставляет UTF-8-вариант функции [`ngramDistance`](#ngramDistance). -Предполагается, что строки `needle` и `haystack` закодированы в UTF-8. -Вычисляет расстояние по 3-граммам между двумя строками в UTF-8. -Чем меньше полученное значение, тем более похожи строки. - -**Синтаксис** - -```sql -ngramDistanceUTF8(haystack, needle) -``` - -**Аргументы** - -* `haystack` — первая сравниваемая строка в кодировке UTF-8. [`String`](/sql-reference/data-types/string) -* `needle` — вторая сравниваемая строка в кодировке UTF-8. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает число типа Float32 в диапазоне от `0` до `1`. [`Float32`](/sql-reference/data-types/float) - -**Примеры** - -**Расстояние на основе 3-грамм в UTF-8** - -```sql title=Query -SELECT ngramDistanceUTF8('abcde','cde') -``` - -```response title=Response -┌─ngramDistanceUTF8('abcde','cde')─┐ -│ 0.5 │ -└───────────────────────────────────┘ -``` - - -## ngramSearch - -Появилась в версии: v20.1 - -Проверяет, что 4-граммное расстояние между двумя строками меньше или равно заданному порогу. - -Для поиска без учета регистра и/или для строк в кодировке UTF-8 используйте функции `ngramSearchCaseInsensitive`, `ngramSearchUTF8`, `ngramSearchCaseInsensitiveUTF8`. - -**Синтаксис** - -```sql -ngramSearch(стог, иголка) -``` - -**Аргументы** - -* `haystack` — строка для сравнения. [`String`](/sql-reference/data-types/string) -* `needle` — строка для сравнения. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает `1`, если расстояние на основе 4-грамм между строками меньше или равно пороговому значению (`1.0` по умолчанию), в противном случае — `0`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Поиск по 4-граммам** - -```sql title=Query -SELECT ngramSearch('ClickHouse', 'Click') -``` - -```response title=Response -┌─ngramSearch('ClickHouse', 'Click')─┐ -│ 1 │ -└────────────────────────────────────┘ -``` - - -## ngramSearchCaseInsensitive - -Добавлена в: v20.1 - -Предоставляет вариант функции [`ngramSearch`](#ngramSearch), нечувствительный к регистру. -Вычисляет несимметричную разность между строкой needle и строкой haystack, то есть (количество n-грамм в needle минус количество общих n-грамм), нормированное на количество n-грамм в needle. -Проверяет, что расстояние по 4-граммам между двумя строками меньше или равно заданному порогу, игнорируя регистр. - -**Синтаксис** - -```sql -ngramSearchCaseInsensitive(строка, подстрока) -``` - -**Аргументы** - -* `haystack` — строка для сравнения. [`String`](/sql-reference/data-types/string) -* `needle` — строка для сравнения. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает `1`, если расстояние по 4-граммам между строками меньше либо равно порогу (`1.0` по умолчанию), в противном случае — `0`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Поиск без учета регистра по 4-граммам** - -```sql title=Query -SELECT ngramSearchCaseInsensitive('Привет, мир','привет') -``` - -```response title=Response -┌─ngramSearchCaseInsensitive('Hello World','hello')─┐ -│ 1 │ -└────────────────────────────────────────────────────┘ -``` - - -## ngramSearchCaseInsensitiveUTF8 - -Добавлена в: v20.1 - -Предоставляет регистронезависимый UTF-8‑вариант функции [`ngramSearch`](#ngramSearch). -Предполагается, что `haystack` и `needle` — это строки в кодировке UTF-8, при этом регистр символов не учитывается. -Проверяет, что расстояние по 3-граммам между двумя строками UTF-8 меньше или равно заданному порогу, игнорируя регистр. - -**Синтаксис** - -```sql -ngramSearchCaseInsensitiveUTF8(haystack, needle) -``` - -**Аргументы** - -* `haystack` — строка в кодировке UTF-8 для сравнения. [`String`](/sql-reference/data-types/string) -* `needle` — строка в кодировке UTF-8 для сравнения. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает `1`, если расстояние на основе 3-грамм между строками меньше или равно пороговому значению (`1.0` по умолчанию), и `0` в противном случае. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Регистронезависимый поиск по UTF-8 с использованием 3-грамм** - -```sql title=Query -SELECT ngramSearchCaseInsensitiveUTF8('абвГДЕёжз', 'АбвгдЕЁжз') -``` - -```response title=Response -┌─ngramSearchCaseInsensitiveUTF8('абвГДЕёжз', 'АбвгдЕЁжз')─┐ -│ 1 │ -└──────────────────────────────────────────────────────────┘ -``` - - -## ngramSearchUTF8 - -Введена в: v20.1 - -Предоставляет вариант функции `ngramSearch` для строк в кодировке UTF-8. -Предполагается, что `haystack` и `needle` — строки в кодировке UTF-8. -Проверяет, что 3-граммное расстояние между двумя строками UTF-8 меньше или равно заданному порогу. - -**Синтаксис** - -```sql -ngramSearchUTF8(haystack, needle) -``` - -**Аргументы** - -* `haystack` — сравниваемая строка в кодировке UTF-8. [`String`](/sql-reference/data-types/string) -* `needle` — сравниваемая строка в кодировке UTF-8. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает `1`, если расстояние по 3-граммам между строками меньше либо равно пороговому значению (`1.0` по умолчанию), иначе `0`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Поиск по UTF-8-строкам с использованием 3-грамм** - -```sql title=Query -SELECT ngramSearchUTF8('абвгдеёжз', 'гдеёзд') -``` - -```response title=Response -┌─ngramSearchUTF8('абвгдеёжз', 'гдеёзд')─┐ -│ 1 │ -└────────────────────────────────────────┘ -``` - - -## notILike - -Добавлено в: v20.6 - -Проверяет, не соответствует ли строка шаблону без учета регистра. Шаблон может содержать специальные символы `%` и `_` для сопоставления в стиле SQL LIKE. - -**Синтаксис** - -```sql -notILike(haystack, pattern) -``` - -**Аргументы** - -* `haystack` — входная строка, в которой выполняется поиск. [`String`](/sql-reference/data-types/string) или [`FixedString`](/sql-reference/data-types/fixedstring) -* `pattern` — шаблон SQL LIKE для сопоставления. `%` соответствует любому числу символов (включая ноль), `_` соответствует ровно одному символу. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает `1`, если строка не соответствует шаблону (без учета регистра), в противном случае — `0`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT notILike('ClickHouse', '%house%'); -``` - -```response title=Response -┌─notILike('Cl⋯ '%house%')─┐ -│ 0 │ -└──────────────────────────┘ -``` - - -## notLike - -Добавлена в версии v1.1 - -Аналогична [`like`](#like), но возвращает противоположный результат. - -**Синтаксис** - -```sql -notLike(haystack, pattern) --- haystack НЕ СООТВЕТСТВУЕТ шаблону pattern (NOT LIKE) -``` - -**Аргументы** - -* `haystack` — Строка, в которой выполняется поиск. [`String`](/sql-reference/data-types/string) или [`FixedString`](/sql-reference/data-types/fixedstring) -* `pattern` — Шаблон для оператора LIKE, с которым выполняется сопоставление. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает `1`, если строка не соответствует шаблону `LIKE`, в противном случае — `0`. [`UInt8`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT notLike('ClickHouse', '%House%'); -``` - -```response title=Response -┌─notLike('Cli⋯ '%House%')─┐ -│ 0 │ -└──────────────────────────┘ -``` - -**Несоответствующий шаблон** - -```sql title=Query -SELECT notLike('ClickHouse', '%SQL%'); -``` - -```response title=Response -┌─notLike('Cli⋯', '%SQL%')─┐ -│ 1 │ -└──────────────────────────┘ -``` - - -## position - -Появилась в версии: v1.1 - -Возвращает позицию (в байтах, начиная с 1) подстроки `needle` в строке `haystack`. - -Если подстрока `needle` пустая, применяются следующие правила: - -* если `start_pos` не указан: возвращается `1` -* если `start_pos = 0`: возвращается `1` -* если `start_pos >= 1` и `start_pos <= length(haystack) + 1`: возвращается `start_pos` -* иначе: возвращается `0` - -Те же правила применяются и к функциям [`locate`](#locate), [`positionCaseInsensitive`](#positionCaseInsensitive), [`positionUTF8`](#positionUTF8) и [`positionCaseInsensitiveUTF8`](#positionCaseInsensitiveUTF8). - -**Синтаксис** - -```sql -position(haystack, needle[, start_pos]) -``` - -**Аргументы** - -* `haystack` — Строка, в которой выполняется поиск. [`String`](/sql-reference/data-types/string) или [`Enum`](/sql-reference/data-types/enum) -* `needle` — Подстрока, которую нужно найти. [`String`](/sql-reference/data-types/string) -* `start_pos` — Позиция (отсчёт с 1) в `haystack`, с которой начинается поиск. Необязательный параметр. [`UInt`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает начальную позицию в байтах, считая с 1, если подстрока найдена, в противном случае — `0`. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT position('Hello, world!', '!') -``` - -```response title=Response -┌─position('Hello, world!', '!')─┐ -│ 13 │ -└────────────────────────────────┘ -``` - -**С аргументом `start_pos`** - -```sql title=Query -SELECT position('Hello, world!', 'o', 1), position('Hello, world!', 'o', 7) -``` - -```response title=Response -┌─position('Hello, world!', 'o', 1)─┬─position('Hello, world!', 'o', 7)─┐ -│ 5 │ 9 │ -└───────────────────────────────────┴───────────────────────────────────┘ -``` - -**Синтаксис `needle IN haystack`** - -```sql title=Query -SELECT 6 = position('/' IN s) FROM (SELECT 'Hello/World' AS s) -``` - -```response title=Response -┌─equals(6, position(s, '/'))─┐ -│ 1 │ -└─────────────────────────────┘ -``` - -**Пустая искомая подстрока** - -```sql title=Query -SELECT position('abc', ''), position('abc', '', 0), position('abc', '', 1), position('abc', '', 2), position('abc', '', 3), position('abc', '', 4), position('abc', '', 5) -``` - -```response title=Response -┌─position('abc', '')─┬─position('abc', '', 0)─┬─position('abc', '', 1)─┬─position('abc', '', 2)─┬─position('abc', '', 3)─┬─position('abc', '', 4)─┬─position('abc', '', 5)─┐ -│ 1 │ 1 │ 1 │ 2 │ 3 │ 4 │ 0 │ -└─────────────────────┴────────────────────────┴────────────────────────┴────────────────────────┴────────────────────────┴────────────────────────┴────────────────────────┘ -``` - - -## positionCaseInsensitive - -Появилась в версии: v1.1 - -Как [`position`](#position), но без учета регистра. - -**Синтаксис** - -```sql -positionCaseInsensitive(haystack, needle[, start_pos]) -``` - -**Псевдонимы**: `instr` - -**Аргументы** - -* `haystack` — строка, в которой выполняется поиск. [`String`](/sql-reference/data-types/string) или [`Enum`](/sql-reference/data-types/enum) -* `needle` — подстрока для поиска. [`String`](/sql-reference/data-types/string) -* `start_pos` — необязательный параметр. Позиция (счёт начиная с 1) в `haystack`, с которой начинается поиск. [`UInt*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает начальную позицию в байтах, считая с 1, если подстрока найдена, иначе — `0`, если подстрока не найдена. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Поиск без учёта регистра** - -```sql title=Query -SELECT positionCaseInsensitive('Hello, world!', 'hello') -``` - -```response title=Response -┌─positionCaseInsensitive('Привет, мир!', 'привет')─┐ -│ 1 │ -└───────────────────────────────────────────────────┘ -``` - - -## positionCaseInsensitiveUTF8 - -Добавлена в версии: v1.1 - -Аналог [`positionUTF8`](#positionUTF8), но выполняет поиск без учета регистра. - -**Синтаксис** - -```sql -positionCaseInsensitiveUTF8(haystack, needle[, start_pos]) -``` - -**Аргументы** - -* `haystack` — Строка, в которой выполняется поиск. [`String`](/sql-reference/data-types/string) или [`Enum`](/sql-reference/data-types/enum) -* `needle` — Подстрока для поиска. [`String`](/sql-reference/data-types/string) -* `start_pos` — Необязательный параметр. Позиция (счёт от 1) в `haystack`, с которой начинается поиск. [`UInt*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает начальную позицию (в байтах, счёт с 1), если подстрока найдена, иначе `0`, если подстрока не найдена. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Регистронезависимый поиск в UTF-8** - -```sql title=Query -SELECT positionCaseInsensitiveUTF8('Привет мир', 'МИР') -``` - -```response title=Response -┌─positionCaseInsensitiveUTF8('Привет мир', 'МИР')─┐ -│ 8 │ -└──────────────────────────────────────────────────┘ -``` - - -## positionUTF8 - -Добавлена в версии: v1.1 - -Аналог [`position`](#position), но предполагает, что `haystack` и `needle` — строки в кодировке UTF‑8. - -**Синтаксис** - -```sql -positionUTF8(строка, подстрока[, начальная_позиция]) -``` - -**Аргументы** - -* `haystack` — Строка, в которой выполняется поиск. [`String`](/sql-reference/data-types/string) или [`Enum`](/sql-reference/data-types/enum) -* `needle` — Подстрока, которую нужно найти. [`String`](/sql-reference/data-types/string) -* `start_pos` — Необязательный параметр. Позиция в `haystack`, с которой начинается поиск (нумерация с 1). [`UInt*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает начальную позицию подстроки в байтах (нумерация с 1), если подстрока найдена; в противном случае — `0`. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Подсчёт символов в UTF-8** - -```sql title=Query -SELECT positionUTF8('Motörhead', 'r') -``` - -```response title=Response -┌─position('Motörhead', 'r')─┐ -│ 5 │ -└────────────────────────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/time-series-functions.md b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/time-series-functions.md index 4700c425d27..e2375cf7667 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/time-series-functions.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/time-series-functions.md @@ -1,25 +1,21 @@ --- -description: 'Документация по функциям для работы с временными рядами' -sidebar_label: 'TimeSeries' +description: 'Документация по функциям работы с временными рядами' +sidebar_label: 'Временные ряды' slug: /sql-reference/functions/time-series-functions title: 'Функции для работы с временными рядами' doc_type: 'reference' --- - - # Функции для временных рядов -Следующие функции предназначены для использования совместно с агрегатными функциями семейства `timeSeries*()`, такими как +Ниже приведённые функции предназначены для использования с агрегатными функциями `timeSeries*()`, такими как [timeSeriesInstantRateToGrid](../aggregate-functions/reference/timeSeriesInstantRateToGrid.md), [timeSeriesLastToGrid](../aggregate-functions/reference/timeSeriesResampleToGridWithStaleness.md) и другими. - - ## timeSeriesRange -Создаёт диапазон временных меток. +Создает диапазон временных меток. **Синтаксис** @@ -35,7 +31,7 @@ timeSeriesRange(start_timestamp, end_timestamp, step) **Возвращаемое значение** -* Возвращает диапазон меток времени `[start_timestamp, start_timestamp + step, start_timestamp + 2 * step, ..., end_timestamp]`. +* Возвращает диапазон временных меток `[start_timestamp, start_timestamp + step, start_timestamp + 2 * step, ..., end_timestamp]`. **Примеры** @@ -56,9 +52,9 @@ SELECT timeSeriesRange('2025-06-01 00:00:00'::DateTime64(3), '2025-06-01 00:01:0 **Примечания** * Если функция `timeSeriesRange()` вызывается с `start_timestamp`, равным `end_timestamp`, - то она возвращает массив из одного элемента, содержащий этот момент времени: `[start_timestamp]` + то она возвращает массив из одного элемента, содержащий эту временную метку: `[start_timestamp]` * Функция `timeSeriesRange()` аналогична функции [range](../functions/array-functions.md#range). - Например, если тип меток времени — `DateTime64(3)` и `start_timestamp < end_timestamp`, то + Например, если тип временных меток — `DateTime64(3)` и `start_timestamp < end_timestamp`, то `timeSeriesRange(start_timestamp, end_timestamp, step)` возвращает тот же результат, что и следующее выражение: ```sql @@ -71,12 +67,12 @@ range(start_timestamp::Int64, end_timestamp::Int64 + 1, step::Int64)::Array(Date Преобразует массив значений `[value1, value2, value3, ..., valueN]` в массив кортежей `[(start_timestamp, value1), (start_timestamp + step, value2), (start_timestamp + 2 * step, value3), ..., (end_timestamp, valueN)]`. -Если некоторые значения из `[value1, value2, value3, ...]` равны `NULL`, функция не будет копировать такие `NULL`-значения в результирующий массив, -но при этом всё равно будет увеличивать текущую временную метку. То есть, например, для `[value1, NULL, value2]` функция вернёт +Если некоторые из значений `[value1, value2, value3, ...]` равны `NULL`, функция не будет копировать такие значения `NULL` в результирующий массив, +но при этом всё равно увеличит текущую метку времени. Например, для `[value1, NULL, value2]` функция вернёт `[(start_timestamp, value1), (start_timestamp + 2 * step, value2)]`. -Текущая временная метка увеличивается на `step` до тех пор, пока не станет больше `end_timestamp`, при этом каждая временная метка будет сочетаться со значением -из указанного массива значений. Если количество значений не совпадает с количеством временных меток, функция сгенерирует исключение. +Текущая метка времени увеличивается на `step` до тех пор, пока не станет больше, чем `end_timestamp`, при этом каждой метке времени сопоставляется значение +из заданного массива. Если количество значений не совпадает с количеством меток времени, функция выбросит исключение. **Синтаксис** @@ -88,12 +84,12 @@ timeSeriesFromGrid(start_timestamp, end_timestamp, step, values); * `start_timestamp` — начало временной сетки. * `end_timestamp` — конец временной сетки. -* `step` — шаг сетки в секундах. +* `step` — шаг временной сетки в секундах. * `values` — массив значений `[value1, value2, ..., valueN]`. **Возвращаемое значение** -* Возвращает значения из исходного массива, объединённые с метками времени на равномерной временной сетке, задаваемой параметрами `start_timestamp` и `step`. +* Возвращает значения из исходного массива, совмещённые с метками времени в соответствии с регулярной временной сеткой, задаваемой `start_timestamp` и `step`. **Примеры** @@ -119,382 +115,11 @@ arrayFilter(x -> x.2 IS NOT NULL, arrayZip(timeSeriesRange(start_timestamp, end_ ``` {/* - Содержимое указанных ниже тегов при сборке фреймворка документации - заменяется на документацию, сгенерированную из system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. + Внутреннее содержимое следующих тегов при сборке фреймворка документации + заменяется документацией, сгенерированной из system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. См.: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## seriesDecomposeSTL - -Добавлена в версии v24.1 - -Разлагает данные временного ряда с помощью STL [(Seasonal-Trend Decomposition Procedure Based on Loess)](https://www.wessa.net/download/stl.pdf) на сезонную, трендовую и остаточную компоненты. - -**Синтаксис** - -```sql -seriesDecomposeSTL(series, period) -``` - -**Аргументы** - -* `series` — массив числовых значений [`Array((U)Int8/16/32/64)`](/sql-reference/data-types/array) или [`Array(Float*)`](/sql-reference/data-types/array) -* `period` — положительное целое число [`UInt8/16/32/64`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает массив из четырёх массивов, где первый массив содержит сезонные компоненты, второй массив — тренд, третий массив — остаточную компоненту, а четвёртый массив — базовую компоненту (seasonal + trend). [`Array(Array(Float32), Array(Float32), Array(Float32), Array(Float32))`](/sql-reference/data-types/array) - -**Примеры** - -**Разложение временного ряда с помощью STL** - -```sql title=Query -SELECT seriesDecomposeSTL([10.1, 20.45, 40.34, 10.1, 20.45, 40.34, 10.1, 20.45, 40.34, 10.1, 20.45, 40.34, 10.1, 20.45, 40.34, 10.1, 20.45, 40.34, 10.1, 20.45, 40.34, 10.1, 20.45, 40.34], 3) AS print_0 -``` - -```response title=Response -┌───────────print_0──────────────────────────────────────────────────────────────────────────────────────────────────────┐ -│ [[ - -13.529999, -3.1799996, 16.71, -13.53, -3.1799996, 16.71, -13.53, -3.1799996, - 16.71, -13.530001, -3.18, 16.710001, -13.530001, -3.1800003, 16.710001, -13.530001, - -3.1800003, 16.710001, -13.530001, -3.1799994, 16.71, -13.529999, -3.1799994, 16.709997 - ], - [ - 23.63, 23.63, 23.630003, 23.630001, 23.630001, 23.630001, 23.630001, 23.630001, - 23.630001, 23.630001, 23.630001, 23.63, 23.630001, 23.630001, 23.63, 23.630001, - 23.630001, 23.63, 23.630001, 23.630001, 23.630001, 23.630001, 23.630001, 23.630003 - ], - [ - 0, 0.0000019073486, -0.0000019073486, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.0000019073486, 0, - 0 - ], - [ - 10.1, 20.449999, 40.340004, 10.100001, 20.45, 40.34, 10.100001, 20.45, 40.34, 10.1, 20.45, 40.34, - 10.1, 20.45, 40.34, 10.1, 20.45, 40.34, 10.1, 20.45, 40.34, 10.100002, 20.45, 40.34 - ]] │ -└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## seriesOutliersDetectTukey - -Добавлено в: v24.2 - -Обнаруживает выбросы в последовательностях данных с использованием [границ Тьюки (Tukey Fences)](https://en.wikipedia.org/wiki/Outlier#Tukey%27s_fences). - -**Синтаксис** - -```sql -seriesOutliersDetectTukey(series[, min_percentile, max_percentile, K]) -``` - -**Аргументы** - -* `series` — Массив числовых значений. [`Array((UInt8/16/32/64))`](/sql-reference/data-types/array) или [`Array(Float*)`](/sql-reference/data-types/array) -* `min_percentile` — Необязательный параметр. Минимальный перцентиль, используемый для вычисления межквартильного размаха [(IQR)](https://en.wikipedia.org/wiki/Interquartile_range). Значение должно быть в диапазоне [0.02, 0.98]. Значение по умолчанию — 0.25. [`Float*`](/sql-reference/data-types/float) -* `max_percentile` — Необязательный параметр. Максимальный перцентиль, используемый для вычисления межквартильного размаха (IQR). Значение должно быть в диапазоне [0.02, 0.98]. Значение по умолчанию — 0.75. [`Float*`](/sql-reference/data-types/float) -* `K` — Необязательный параметр. Неотрицательное константное значение для обнаружения умеренных или сильных выбросов. Значение по умолчанию — 1.5. [`Float*`](/sql-reference/data-types/float) - -**Возвращаемое значение** - -Возвращает массив той же длины, что и входной массив, где каждое значение представляет собой оценку степени возможной аномалии соответствующего элемента в последовательности. Ненулевое значение оценки указывает на возможную аномалию. [`Array(Float32)`](/sql-reference/data-types/array) - -**Примеры** - -**Базовое обнаружение выбросов** - -```sql title=Query -SELECT seriesOutliersDetectTukey([-3, 2, 15, 3, 5, 6, 4, 5, 12, 45, 12, 3, 3, 4, 5, 6]) AS print_0 -``` - -```response title=Response -┌───────────print_0─────────────────┐ -│[0,0,0,0,0,0,0,0,0,27,0,0,0,0,0,0] │ -└───────────────────────────────────┘ -``` - -**Обнаружение выбросов с настраиваемыми параметрами** - -```sql title=Query -SELECT seriesOutliersDetectTukey([-3, 2, 15, 3, 5, 6, 4.50, 5, 12, 45, 12, 3.40, 3, 4, 5, 6], 0.2, 0.8, 1.5) AS print_0 -``` - -```response title=Response -┌─print_0──────────────────────────────┐ -│ [0,0,0,0,0,0,0,0,0,19.5,0,0,0,0,0,0] │ -└──────────────────────────────────────┘ -``` - - -## seriesPeriodDetectFFT - -Добавлено в версии: v23.12 - -Определяет период заданных данных временного ряда с использованием быстрого преобразования Фурье (FFT) — [Fast Fourier transform](https://en.wikipedia.org/wiki/Fast_Fourier_transform) - -**Синтаксис** - -```sql -seriesPeriodDetectFFT(series) -``` - -**Аргументы** - -* `series` — массив числовых значений. [`Array((U)Int8/16/32/64)`](/sql-reference/data-types/array) или [`Array(Float*)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает вещественное число, равное периоду данных ряда. Возвращает NaN, если количество точек данных меньше четырёх. [`Float64`](/sql-reference/data-types/float) - -**Примеры** - -**Определение периода по простому шаблону** - -```sql title=Query -SELECT seriesPeriodDetectFFT([1, 4, 6, 1, 4, 6, 1, 4, 6, 1, 4, 6, 1, 4, 6, 1, 4, 6, 1, 4, 6]) AS print_0 -``` - -```response title=Response -┌───────────print_0──────┐ -│ 3 │ -└────────────────────────┘ -``` - -**Определение периода по сложному шаблону** - -```sql title=Query -SELECT seriesPeriodDetectFFT(arrayMap(x -> abs((x % 6) - 3), range(1000))) AS print_0 -``` - -```response title=Response -┌─print_0─┐ -│ 6 │ -└─────────┘ -``` - - -## timeSeriesFromGrid - -Добавлена в: v25.8 - -Преобразует массив значений `[x1, x2, x3, ...]` в массив кортежей -`[(start_timestamp, x1), (start_timestamp + step, x2), (start_timestamp + 2 * step, x3), ...]`. - -Текущая временная метка увеличивается на `step` до тех пор, пока не станет больше `end_timestamp`. -Если количество значений не совпадает с количеством временных меток, функция генерирует исключение. - -Значения NULL в `[x1, x2, x3, ...]` пропускаются, но текущая временная метка всё равно увеличивается. -Например, для `[value1, NULL, x2]` функция возвращает `[(start_timestamp, x1), (start_timestamp + 2 * step, x2)]`. - -**Синтаксис** - -```sql -timeSeriesFromGrid(start_timestamp, end_timestamp, step, values) -``` - -**Аргументы** - -* `start_timestamp` — Начало сетки. [`DateTime64`](/sql-reference/data-types/datetime64) или [`DateTime`](/sql-reference/data-types/datetime) или [`UInt32`](/sql-reference/data-types/int-uint) -* `end_timestamp` — Конец сетки. [`DateTime64`](/sql-reference/data-types/datetime64) или [`DateTime`](/sql-reference/data-types/datetime) или [`UInt32`](/sql-reference/data-types/int-uint) -* `step` — Шаг сетки в секундах, [`Decimal64`](/sql-reference/data-types/decimal) или [`Decimal32`](/sql-reference/data-types/decimal) или [`UInt32/64`](/sql-reference/data-types/int-uint) -* `values` — Массив значений [`Array(Float*)`](/sql-reference/data-types/array) или [`Array(Nullable(Float*))`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -Возвращает значения из исходного массива, объединённые с метками времени на регулярной временной сетке, определяемой `start_timestamp` и `step`. [`Array(Tuple(DateTime64, Float64))`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT timeSeriesFromGrid('2025-06-01 00:00:00'::DateTime64(3), '2025-06-01 00:01:30.000'::DateTime64(3), 30, [10, 20, NULL, 30]) AS result; -``` - -```response title=Response -┌─────────────────────────────────────────────result─────────────────────────────────────────────┐ -│ [('2025-06-01 00:00:00.000',10),('2025-06-01 00:00:30.000',20),('2025-06-01 00:01:30.000',30)] │ -└────────────────────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## timeSeriesIdToTags - -Добавлена в версии v25.8 - -Находит теги, связанные с указанным идентификатором временного ряда. - -**Синтаксис** - -```sql -timeSeriesIdToTags(id) -``` - -**Аргументы** - -* `id` — идентификатор временного ряда. [`UInt64`](/sql-reference/data-types/int-uint) или [`UInt128`](/sql-reference/data-types/int-uint) или [`UUID`](/sql-reference/data-types/uuid) или [`FixedString(16)`](/sql-reference/data-types/fixedstring) - -**Возвращаемое значение** - -Возвращает массив пар (`tag_name`, `tag_value`). [`Array(Tuple(String, String))`](/sql-reference/data-types/array) - -**Примеры** - -**Пример** - -```sql title=Query -SELECT timeSeriesStoreTags(8374283493092, [('region', 'eu'), ('env', 'dev')], '__name__', 'http_requests_count') AS id, timeSeriesIdToTags(id) -``` - -```response title=Response -8374283493092 [('__name__', ''http_requests_count''), ('env', 'dev'), ('region', 'eu')] -``` - - -## timeSeriesIdToTagsGroup - -Добавлена в версии: v25.8 - -Преобразует указанный идентификатор временного ряда в индекс соответствующей группы. Индексы групп — это числа 0, 1, 2, 3, сопоставленные каждому уникальному набору тегов в контексте текущего запроса. - -**Синтаксис** - -```sql -timeSeriesIdToTagsGroup(id) -``` - -**Аргументы** - -* `id` — Идентификатор временного ряда. [`UInt64`](/sql-reference/data-types/int-uint) или [`UInt128`](/sql-reference/data-types/int-uint) или [`UUID`](/sql-reference/data-types/uuid) или [`FixedString(16)`](/sql-reference/data-types/fixedstring) - -**Возвращаемое значение** - -Возвращает индекс группы, соответствующий этому набору тегов. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример** - -```sql title=Query -SELECT timeSeriesStoreTags(8374283493092, [('region', 'eu'), ('env', 'dev')], '__name__', 'http_requests_count') AS id, timeSeriesIdToTagsGroup(id) -``` - -```response title=Response -8374283493092 0 -``` - - -## timeSeriesRange - -Добавлена в версии: v25.8 - -Генерирует диапазон временных меток [start_timestamp, start_timestamp + step, start_timestamp + 2 * step, ..., end_timestamp]. - -Если `start_timestamp` равен `end_timestamp`, функция возвращает массив из одного элемента, содержащий `[start_timestamp]`. - -Функция `timeSeriesRange()` аналогична функции [range](../functions/array-functions.md#range). - -**Синтаксис** - -```sql -timeSeriesRange(start_timestamp, end_timestamp, step) -``` - -**Аргументы** - -* `start_timestamp` — начало диапазона. [`DateTime64`](/sql-reference/data-types/datetime64) или [`DateTime`](/sql-reference/data-types/datetime) или [`UInt32`](/sql-reference/data-types/int-uint) -* `end_timestamp` — конец диапазона. [`DateTime64`](/sql-reference/data-types/datetime64) или [`DateTime`](/sql-reference/data-types/datetime) или [`UInt32`](/sql-reference/data-types/int-uint) -* `step` — шаг диапазона в секундах: [`UInt32/64`](/sql-reference/data-types/int-uint) или [`Decimal32/64`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Возвращает диапазон временных меток. [`Array(DateTime64)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT timeSeriesRange('2025-06-01 00:00:00'::DateTime64(3), '2025-06-01 00:01:00'::DateTime64(3), 30) -``` - -```response title=Response -┌────────────────────────────────────result─────────────────────────────────────────┐ -│ ['2025-06-01 00:00:00.000', '2025-06-01 00:00:30.000', '2025-06-01 00:01:00.000'] │ -└───────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## timeSeriesStoreTags - -Добавлено в: v25.8 - -Сохраняет соответствие между идентификатором временного ряда и его тегами в контексте запроса, чтобы функция timeSeriesIdToTags() могла затем извлечь эти теги. - -**Синтаксис** - -```sql -timeSeriesStoreTags(id, tags_array, separate_tag_name_1, separate_tag_value_1, ...) -``` - -**Аргументы** - -* `id` — идентификатор временного ряда. [`UInt64`](/sql-reference/data-types/int-uint) или [`UInt128`](/sql-reference/data-types/int-uint) или [`UUID`](/sql-reference/data-types/uuid) или [`FixedString(16)`](/sql-reference/data-types/fixedstring) -* `tags_array` — массив пар вида (tag_name, tag_value). [`Array(Tuple(String, String))`](/sql-reference/data-types/array) или [`NULL`](/sql-reference/syntax#null) -* `separate_tag_name_i` — имя тега. [`String`](/sql-reference/data-types/string) или [`FixedString`](/sql-reference/data-types/fixedstring) -* `separate_tag_value_i` — значение тега. [`String`](/sql-reference/data-types/string) или [`FixedString`](/sql-reference/data-types/fixedstring) или [`Nullable(String)`](/sql-reference/data-types/nullable) - -**Возвращаемое значение** - -Возвращает первый аргумент, то есть идентификатор временного ряда. - -**Примеры** - -**Пример** - -```sql title=Query -SELECT timeSeriesStoreTags(8374283493092, [('region', 'eu'), ('env', 'dev')], '__name__', 'http_requests_count') -``` - -```response title=Response -8374283493092 -``` - - -## timeSeriesTagsGroupToTags - -Появилась в версии: v25.8 - -Находит теги, связанные с индексом группы. Индексы групп — это числа 0, 1, 2, 3, соответствующие каждому уникальному набору тегов в контексте текущего выполняемого запроса. - -**Синтаксис** - -```sql -timeSeriesTagsGroupToTags(group) -``` - -**Аргументы** - -* `group` — индекс группы, связанный с временным рядом. [`UInt64`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Массив пар (tag_name, tag_value). [`Array(Tuple(String, String))`](/sql-reference/data-types/array) - -**Примеры** - -**Пример** - -```sql title=Query -SELECT timeSeriesStoreTags(8374283493092, [('region', 'eu'), ('env', 'dev')], '__name__', 'http_requests_count') AS id, timeSeriesIdToTagsGroup(id) AS group, timeSeriesTagsGroupToTags(group) -``` - -```response title=Response -8374283493092 0 [('__name__', ''http_requests_count''), ('env', 'dev'), ('region', 'eu')] -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/time-window-functions.md b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/time-window-functions.md index c3b33dedd3e..fef8857821d 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/time-window-functions.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/time-window-functions.md @@ -17,239 +17,20 @@ import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -Функции временных окон возвращают нижнюю границу соответствующего окна (включительно) и верхнюю границу (исключительно). +Функции временных окон возвращают нижнюю включительную и верхнюю невключительную границы соответствующего окна. Ниже перечислены функции для работы с [WindowView](/sql-reference/statements/create/view#window-view): {/* - Внутреннее содержимое расположенных ниже тегов при сборке фреймворка документации - заменяется на документы, сгенерированные на основе system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. + Внутреннее содержимое тегов ниже заменяется при сборке фреймворка документации + на документацию, сгенерированную на основе system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. См.: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## hop - -Введена в: v21.12 - -Скользящее временное окно имеет фиксированную длительность (`window_interval`) и сдвигается на заданный интервал (`hop_interval`). Если `hop_interval` меньше `window_interval`, скользящие окна перекрываются. Таким образом, записи могут попадать в несколько окон. - -Поскольку одна запись может попадать в несколько скользящих окон, функция возвращает только границу первого окна при использовании функции hop без WINDOW VIEW. - -**Синтаксис** - -```sql -hop(time_attr, hop_interval, window_interval[, timezone]) -``` - -**Аргументы** - -* `time_attr` — дата и время. [`DateTime`](/sql-reference/data-types/datetime) -* `hop_interval` — положительный интервал шага окна. [`Interval`](/sql-reference/data-types/int-uint) -* `window_interval` — положительный интервал окна. [`Interval`](/sql-reference/data-types/int-uint) -* `timezone` — необязательный параметр. Название часового пояса. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает нижнюю границу (включительно) и верхнюю границу (не включая) соответствующего скользящего (hopping) окна. [`Tuple(DateTime, DateTime)`](/sql-reference/data-types/tuple) - -**Примеры** - -**Скользящее (hopping) окно** - -```sql title=Query -SELECT hop(now(), INTERVAL '1' DAY, INTERVAL '2' DAY) -``` - -```response title=Response -('2024-07-03 00:00:00','2024-07-05 00:00:00') -``` - - -## hopEnd - -Добавлена в версии: v22.1 - -Возвращает верхнюю исключающую границу соответствующего скользящего окна. - -Поскольку одна запись может быть назначена нескольким hop-окнам, функция возвращает границу только первого окна, если функция hop используется без `WINDOW VIEW`. - -**Синтаксис** - -```sql -hopEnd(time_attr, hop_interval, window_interval[, timezone]) -``` - -**Аргументы** - -* `time_attr` — Дата и время. [`DateTime`](/sql-reference/data-types/datetime) -* `hop_interval` — Положительный интервал шага (hop). [`Interval`](/sql-reference/data-types/int-uint) -* `window_interval` — Положительный интервал окна (window). [`Interval`](/sql-reference/data-types/int-uint) -* `timezone` — Необязательный параметр. Название часового пояса. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает верхнюю границу (исключая её) соответствующего hopping-окна. [`DateTime`](/sql-reference/data-types/datetime) - -**Примеры** - -**Конец hopping-окна** - -```sql title=Query -SELECT hopEnd(now(), INTERVAL '1' DAY, INTERVAL '2' DAY) -``` - -```response title=Response -2024-07-05 00:00:00 -``` - - -## hopStart - -Впервые появилась в: v22.1 - -Возвращает включающую нижнюю границу соответствующего скользящего окна. - -Поскольку одна запись может относиться к нескольким скользящим окнам, при использовании функции hop без `WINDOW VIEW` возвращается граница только первого окна. - -**Синтаксис** - -```sql -hopStart(time_attr, hop_interval, window_interval[, timezone]) -``` - -**Аргументы** - -* `time_attr` — Дата и время. [`DateTime`](/sql-reference/data-types/datetime) -* `hop_interval` — Положительный интервал сдвига окна. [`Interval`](/sql-reference/data-types/int-uint) -* `window_interval` — Положительный интервал окна. [`Interval`](/sql-reference/data-types/int-uint) -* `timezone` — Необязательный параметр. Название часового пояса. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает включительную нижнюю границу соответствующего окна сдвига (hopping-окна). [`DateTime`](/sql-reference/data-types/datetime) - -**Примеры** - -**Начало окна сдвига (hopping-окна)** - -```sql title=Query -SELECT hopStart(now(), INTERVAL '1' DAY, INTERVAL '2' DAY) -``` - -```response title=Response -2024-07-03 00:00:00 -``` - - -## tumble - -Добавлено в: v21.12 - -Функция `tumble` разбивает записи на неперекрывающиеся, последовательные временные окна фиксированной продолжительности (`interval`). - -**Синтаксис** - -```sql -tumble(time_attr, interval[, timezone]) -``` - -**Аргументы** - -* `time_attr` — Дата и время. [`DateTime`](/sql-reference/data-types/datetime) -* `interval` — Интервал окна, тип Interval. [`Interval`](/sql-reference/data-types/int-uint) -* `timezone` — Необязательный параметр. Название часового пояса. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает нижнюю границу (включительно) и верхнюю границу (не включительно) соответствующего tumbling-окна. [`Tuple(DateTime, DateTime)`](/sql-reference/data-types/tuple) - -**Примеры** - -**Tumbling-окно** - -```sql title=Query -SELECT tumble(now(), toIntervalDay('1')) -``` - -```response title=Response -('2024-07-04 00:00:00','2024-07-05 00:00:00') -``` - - -## tumbleEnd - -Добавлена в версии: v22.1 - -Возвращает невключительную верхнюю границу соответствующего tumbling-окна. - -**Синтаксис** - -```sql -tumbleEnd(time_attr, interval[, timezone]) -``` - -**Аргументы** - -* `time_attr` — Дата и время. [`DateTime`](/sql-reference/data-types/datetime) -* `interval` — Интервал окна с типом `Interval`. [`Interval`](/sql-reference/data-types/int-uint) -* `timezone` — Необязательный параметр. Название часового пояса. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает верхнюю границу (не включительно) соответствующего окна типа tumbling. [`DateTime`](/sql-reference/data-types/datetime) - -**Примеры** - -**Конец окна типа tumbling** - -```sql title=Query -SELECT tumbleEnd(now(), toIntervalDay('1')) -``` - -```response title=Response -2024-07-05 00:00:00 -``` - - -## tumbleStart - -Появилась в версии v22.1 - -Возвращает включающую нижнюю границу соответствующего фиксированного окна. - -**Синтаксис** - -```sql -tumbleStart(time_attr, interval[, timezone]) -``` - -**Аргументы** - -* `time_attr` — Дата и время. [`DateTime`](/sql-reference/data-types/datetime) -* `interval` — Интервал временного окна в типе `Interval`. [`Interval`](/sql-reference/data-types/int-uint) -* `timezone` — Необязательный параметр. Имя часового пояса. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает включающую нижнюю границу соответствующего фиксированного окна. [`DateTime`](/sql-reference/data-types/datetime) - -**Примеры** - -**Начало фиксированного окна** - -```sql title=Query -SELECT tumbleStart(now(), toIntervalDay('1')) -``` - -```response title=Response -2024-07-04 00:00:00 -``` - {/*AUTOGENERATED_END*/ } ## Связанные материалы {#related-content} -- [Руководства по сценариям использования временных рядов](/use-cases/time-series) +- [Руководства по сценариям использования временных рядов](/use-cases/time-series) \ No newline at end of file diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/tuple-functions.md b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/tuple-functions.md index 9b025f64d4d..0764ad8b0e0 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/tuple-functions.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/tuple-functions.md @@ -1,836 +1,23 @@ --- -description: 'Документация по функциям кортежей (Tuple)' -sidebar_label: 'Кортежи (Tuple)' +description: 'Документация по функциям работы с кортежами' +sidebar_label: 'Кортежи' slug: /sql-reference/functions/tuple-functions -title: 'Функции кортежей (Tuple)' +title: 'Функции работы с кортежами' doc_type: 'reference' --- :::note -Приведённая ниже документация сгенерирована на основе системной таблицы `system.functions`. +Приведённая ниже документация сгенерирована из системной таблицы `system.functions`. ::: {/* - Внутреннее содержимое расположенных ниже тегов при сборке фреймворка документации - заменяется документацией, сгенерированной на основе system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. + Внутреннее содержимое тегов ниже подменяется при сборке фреймворка документации + документацией, сгенерированной из system.functions. Пожалуйста, не изменяйте и не удаляйте теги. См.: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## flattenTuple - -Впервые появилось в: v22.6 - -Разворачивает именованный и вложенный кортеж. -Элементы возвращаемого кортежа — это пути к элементам входного кортежа. - -**Синтаксис** - -```sql -расплющитьКортеж(input) -``` - -**Аргументы** - -* `input` — именованный и вложенный кортеж для преобразования в плоский вид. [`Tuple(n1 T1[, n2 T2, ... ])`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает результирующий кортеж, элементы которого представляют собой пути в исходном кортеже. [`Tuple(T)`](/sql-reference/data-types/tuple) - -**Примеры** - -**Пример использования** - -```sql title=Query -CREATE TABLE tab(t Tuple(a UInt32, b Tuple(c String, d UInt32))) ENGINE = MergeTree ORDER BY tuple(); -INSERT INTO tab VALUES ((3, ('c', 4))); - -SELECT flattenTuple(t) FROM tab; -``` - -```response title=Response -┌─flattenTuple(t)┐ -│ (3, 'c', 4) │ -└────────────────┘ -``` - - -## tuple - -Впервые представлена в версии: v - -Возвращает кортеж, группируя входные аргументы. - -Для столбцов C1, C2, ... с типами T1, T2, ... возвращается именованный кортеж типа Tuple(C1 T1, C2 T2, ...), содержащий эти столбцы, если их имена уникальны и могут трактоваться как идентификаторы без кавычек; в противном случае возвращается Tuple(T1, T2, ...). Выполнение функции не имеет вычислительной стоимости. -Кортежи обычно используются как промежуточные значения для аргументов операторов IN или для создания списка формальных параметров лямбда-функций. Кортежи нельзя записывать в таблицу. - -Функция реализует оператор `(x, y, ...)`. - -**Синтаксис** - -```sql -``` - -**Аргументы** - -* Нет. - -**Возвращаемое значение** - -**Примеры** - -**Типичный** - -```sql title=Query -SELECT tuple(1, 2) -``` - -```response title=Response -(1,2) -``` - - -## tupleConcat - -Впервые представлена в: v23.8 - -Объединяет кортежи, переданные в качестве аргументов. - -**Синтаксис** - -```sql -tupleConcat(tuple1[, tuple2, [...]]) -``` - -**Аргументы** - -* `tupleN` — Произвольное число аргументов типа Tuple. [`Tuple(T)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает кортеж, содержащий все элементы из входных кортежей. [`Tuple(T)`](/sql-reference/data-types/tuple) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT tupleConcat((1, 2), ('a',), (true, false)) -``` - -```response title=Response -(1, 2, 'a', true, false) -``` - - -## tupleDivide - -Появилась в: v21.11 - -Вычисляет частное соответствующих элементов двух кортежей одинаковой длины. - -:::note -Деление на ноль вернёт `inf`. -::: - -**Синтаксис** - -```sql -tupleDivide(t1, t2) -``` - -**Аргументы** - -* `t1` — первый кортеж. [`Tuple((U)Int*)`](/sql-reference/data-types/tuple) или [`Tuple(Float*)`](/sql-reference/data-types/tuple) или [`Tuple(Decimal)`](/sql-reference/data-types/tuple) -* `t2` — второй кортеж. [`Tuple((U)Int*)`](/sql-reference/data-types/tuple) или [`Tuple(Float*)`](/sql-reference/data-types/tuple) или [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает кортеж, содержащий результат деления. [`Tuple((U)Int*)`](/sql-reference/data-types/tuple) или [`Tuple(Float*)`](/sql-reference/data-types/tuple) или [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT tupleDivide((1, 2), (2, 3)) -``` - -```response title=Response -(0.5, 0.6666666666666666) -``` - - -## tupleDivideByNumber - -Добавлена в версии: v21.11 - -Возвращает кортеж, в котором все элементы поделены на число. - -:::note -При делении на ноль будет возвращено значение `inf`. -::: - -**Синтаксис** - -```sql -tupleРазделитьНаЧисло(tuple, number) -``` - -**Аргументы** - -* `tuple` — Кортеж для деления. [`Tuple((U)Int*)`](/sql-reference/data-types/tuple) или [`Tuple(Float*)`](/sql-reference/data-types/tuple) или [`Tuple(Decimal)`](/sql-reference/data-types/tuple) -* `number` — Делитель. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Возвращает кортеж с элементами, получёнными в результате деления. [`Tuple((U)Int*)`](/sql-reference/data-types/tuple) или [`Tuple(Float*)`](/sql-reference/data-types/tuple) или [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT tupleDivideByNumber((1, 2), 0.5) -``` - -```response title=Response -(2, 4) -``` - - -## tupleElement - -Введена в версии: v1.1 - -Извлекает элемент из кортежа по индексу или имени. - -При доступе по индексу ожидается числовой индекс, начинающийся с 1. -При доступе по имени имя элемента может быть передано в виде строки (работает только для именованных кортежей). - -Необязательный третий аргумент задаёт значение по умолчанию, которое возвращается вместо генерации исключения, если запрашиваемый элемент не существует. -Все аргументы должны быть константами. - -Эта функция не имеет накладных затрат во время выполнения и реализует операторы `x.index` и `x.name`. - -**Синтаксис** - -```sql -tupleElement(кортеж, индекс|имя[, значение_по_умолчанию]) -``` - -**Аргументы** - -* `tuple` — кортеж или массив кортежей. [`Tuple(T)`](/sql-reference/data-types/tuple) или [`Array(Tuple(T))`](/sql-reference/data-types/array) -* `index` — индекс столбца, начиная с 1. [`const UInt8/16/32/64`](/sql-reference/data-types/int-uint) -* `name` — имя элемента. [`const String`](/sql-reference/data-types/string) -* `default_value` — значение по умолчанию, возвращаемое, если индекс выходит за пределы допустимого диапазона или элемент отсутствует. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает элемент по указанному индексу или имени. [`Any`](/sql-reference/data-types) - -**Примеры** - -**Доступ по индексу** - -```sql title=Query -SELECT tupleElement((1, 'привет'), 2) -``` - -```response title=Response -Здравствуйте -``` - -**Именованный кортеж с таблицей** - -```sql title=Query -CREATE TABLE example (values Tuple(name String, age UInt32)) ENGINE = Memory; -INSERT INTO example VALUES (('Alice', 30)); -SELECT tupleElement(values, 'name') FROM example; -``` - -```response title=Response -Алиса -``` - -**Со значением по умолчанию** - -```sql title=Query -SELECT tupleElement((1, 2), 5, 'не_найдено') -``` - -```response title=Response -не найдено -``` - -**Синтаксис оператора** - -```sql title=Query -SELECT (1, 'hello').2 -``` - -```response title=Response -Здравствуйте -``` - - -## tupleHammingDistance - -Впервые представлена в: v21.1 - -Возвращает [расстояние Хэмминга](https://en.wikipedia.org/wiki/Hamming_distance) между двумя кортежами одинакового размера. - -:::note -Тип результата определяется так же, как для [арифметических функций](../../sql-reference/functions/arithmetic-functions.md), на основе количества элементов во входных кортежах. - -```sql -SELECT - toTypeName(tupleHammingDistance(tuple(0), tuple(0))) AS t1, - toTypeName(tupleHammingDistance((0, 0), (0, 0))) AS t2, - toTypeName(tupleHammingDistance((0, 0, 0), (0, 0, 0))) AS t3, - toTypeName(tupleHammingDistance((0, 0, 0, 0), (0, 0, 0, 0))) AS t4, - toTypeName(tupleHammingDistance((0, 0, 0, 0, 0), (0, 0, 0, 0, 0))) AS t5 -``` - -```text -┌─t1────┬─t2─────┬─t3─────┬─t4─────┬─t5─────┐ -│ UInt8 │ UInt16 │ UInt32 │ UInt64 │ UInt64 │ -└───────┴────────┴────────┴────────┴────────┘ -``` - -::: - -**Синтаксис** - -```sql -tupleHammingDistance(t1, t2) -``` - -**Аргументы** - -* `t1` — Первый кортеж. [`Tuple(*)`](/sql-reference/data-types/tuple) -* `t2` — Второй кортеж. [`Tuple(*)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает расстояние Хэмминга. [`UInt8/16/32/64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT tupleHammingDistance((1, 2, 3), (3, 2, 1)) -``` - -```response title=Response -2 -``` - -**Поиск почти дублирующихся строк с помощью MinHash** - -```sql title=Query -SELECT tupleHammingDistance(wordShingleMinHash(string), wordShingleMinHashCaseInsensitive(string)) FROM (SELECT 'ClickHouse — колоночная система управления базами данных для онлайн-аналитической обработки запросов.' AS string) -``` - -```response title=Response -2 -``` - - -## tupleIntDiv - -Введено в: v23.8 - -Выполняет целочисленное деление для кортежа числителей и кортежа знаменателей. Возвращает кортеж частных. -Если один из кортежей содержит нецелые элементы, результат вычисляется с округлением до ближайшего целого для каждого нецелого числителя или делителя. -Деление на 0 вызывает ошибку. - -**Синтаксис** - -```sql -tupleIntDiv(tuple_num, tuple_div) -``` - -**Аргументы** - -* `tuple_num` — Кортеж со значениями числителя. [`Tuple((U)Int*)`](/sql-reference/data-types/tuple) или [`Tuple(Float*)`](/sql-reference/data-types/tuple) или [`Tuple(Decimal)`](/sql-reference/data-types/tuple) -* `tuple_div` — Кортеж со значениями знаменателя. [`Tuple((U)Int*)`](/sql-reference/data-types/tuple) или [`Tuple(Float*)`](/sql-reference/data-types/tuple) или [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает кортеж результатов деления. [`Tuple((U)Int*)`](/sql-reference/data-types/tuple) или [`Tuple(Float*)`](/sql-reference/data-types/tuple) или [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT tupleIntDiv((15, 10, 5), (5, 5, 5)) -``` - -```response title=Response -(3, 2, 1) -``` - -**С десятичными дробями** - -```sql title=Query -SELECT tupleIntDiv((15, 10, 5), (5.5, 5.5, 5.5)) -``` - -```response title=Response -(2, 1, 0) -``` - - -## tupleIntDivByNumber - -Впервые появилась в версии v23.8 - -Выполняет целочисленное деление кортежа числителей на заданный знаменатель и возвращает кортеж частных. -Если один из входных параметров содержит нецелочисленные элементы, результат вычисляется с округлением до ближайшего целого для каждого нецелочисленного числителя или делителя. -При делении на 0 будет сгенерирована ошибка. - -**Синтаксис** - -```sql -tupleIntDivByNumber(tuple_num, div) -``` - -**Аргументы** - -* `tuple_num` — кортеж значений числителя. [`Tuple((U)Int*)`](/sql-reference/data-types/tuple) или [`Tuple(Float*)`](/sql-reference/data-types/tuple) или [`Tuple(Decimal)`](/sql-reference/data-types/tuple) -* `div` — значение делителя. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Возвращает кортеж результатов деления. [`Tuple((U)Int*)`](/sql-reference/data-types/tuple) или [`Tuple(Float*)`](/sql-reference/data-types/tuple) или [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT tupleIntDivByNumber((15, 10, 5), 5) -``` - -```response title=Response -(3, 2, 1) -``` - -**С десятичными дробями** - -```sql title=Query -SELECT tupleIntDivByNumber((15.2, 10.7, 5.5), 5.8) -``` - -```response title=Response -(2, 1, 0) -``` - - -## tupleIntDivOrZero - -Добавлена в версии: v23.8 - -Аналогично [`tupleIntDiv`](#tupleIntDiv) выполняет целочисленное деление кортежа числителей на кортеж знаменателей и возвращает кортеж частных. -В случае деления на 0 возвращает частное, равное 0, вместо генерации исключения. -Если любой из кортежей содержит нецелочисленные элементы, результат вычисляется с округлением до ближайшего целого для каждого нецелочисленного числителя или делителя. - -**Синтаксис** - -```sql -tupleIntDivOrZero(tuple_num, tuple_div) -``` - -**Аргументы** - -* `tuple_num` — Кортеж числителей. [`Tuple((U)Int*)`](/sql-reference/data-types/tuple) или [`Tuple(Float*)`](/sql-reference/data-types/tuple) или [`Tuple(Decimal)`](/sql-reference/data-types/tuple) -* `tuple_div` — Кортеж знаменателей. [`Tuple((U)Int*)`](/sql-reference/data-types/tuple) или [`Tuple(Float*)`](/sql-reference/data-types/tuple) или [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает кортеж результатов деления. Для делений, где знаменатель равен 0, возвращает 0. [`Tuple((U)Int*)`](/sql-reference/data-types/tuple) или [`Tuple(Float*)`](/sql-reference/data-types/tuple) или [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**Примеры** - -**С нулевыми знаменателями** - -```sql title=Query -SELECT tupleIntDivOrZero((5, 10, 15), (0, 0, 0)) -``` - -```response title=Response -(0, 0, 0) -``` - - -## tupleIntDivOrZeroByNumber - -Введена в версии: v23.8 - -Подобно [`tupleIntDivByNumber`](#tupleIntDivByNumber), выполняет целочисленное деление кортежа числителей на заданный делитель и возвращает кортеж частных. -Не генерирует ошибку при нулевом делителе, а вместо этого возвращает частное, равное нулю. -Если кортеж или делитель содержат нецелочисленные элементы, результат вычисляется путём округления до ближайшего целого для каждого нецелочисленного числителя или делителя. - -**Синтаксис** - -```sql -tupleIntDivOrZeroByNumber(tuple_num, div) -``` - -**Аргументы** - -* `tuple_num` — Кортеж значений числителя. [`Tuple((U)Int*)`](/sql-reference/data-types/tuple) или [`Tuple(Float*)`](/sql-reference/data-types/tuple) или [`Tuple(Decimal)`](/sql-reference/data-types/tuple) -* `div` — Значение делителя. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Возвращает кортеж результатов деления, где для элементов с делителем `0` возвращается `0`. [`Tuple((U)Int*)`](/sql-reference/data-types/tuple) или [`Tuple(Float*)`](/sql-reference/data-types/tuple) или [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT tupleIntDivOrZeroByNumber((15, 10, 5), 5) -``` - -```response title=Response -(3, 2, 1) -``` - -**С нулевым делителем** - -```sql title=Query -SELECT tupleIntDivOrZeroByNumber((15, 10, 5), 0) -``` - -```response title=Response -(0, 0, 0) -``` - - -## tupleMinus - -Добавлена в версии v21.11 - -Вычисляет разность между соответствующими элементами двух кортежей одинаковой длины. - -**Синтаксис** - -```sql -tupleMinus(t1, t2) -``` - -**Псевдонимы**: `vectorDifference` - -**Аргументы** - -* `t1` — первый кортеж. [`Tuple((U)Int*)`](/sql-reference/data-types/tuple) или [`Tuple(Float*)`](/sql-reference/data-types/tuple) или [`Tuple(Decimal)`](/sql-reference/data-types/tuple) -* `t2` — второй кортеж. [`Tuple((U)Int*)`](/sql-reference/data-types/tuple) или [`Tuple(Float*)`](/sql-reference/data-types/tuple) или [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает кортеж, содержащий результаты операций вычитания. [`Tuple((U)Int*)`](/sql-reference/data-types/tuple) или [`Tuple(Float*)`](/sql-reference/data-types/tuple) или [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT tupleMinus((1, 2), (2, 3)) -``` - -```response title=Response -(-1, -1) -``` - - -## tupleModulo - -Появилась в версии: v23.8 - -Возвращает кортеж остатков (по модулю) от поэлементного деления двух кортежей. - -**Синтаксис** - -```sql -tupleModulo(tuple_num, tuple_mod) -``` - -**Аргументы** - -* `tuple_num` — Кортеж числителей. [`Tuple((U)Int*)`](/sql-reference/data-types/tuple) или [`Tuple(Float*)`](/sql-reference/data-types/tuple) или [`Tuple(Decimal)`](/sql-reference/data-types/tuple) -* `tuple_mod` — Кортеж значений модуля. [`Tuple((U)Int*)`](/sql-reference/data-types/tuple) или [`Tuple(Float*)`](/sql-reference/data-types/tuple) или [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает кортеж остатков деления. При делении на ноль выдается ошибка. [`Tuple((U)Int*)`](/sql-reference/data-types/tuple) или [`Tuple(Float*)`](/sql-reference/data-types/tuple) или [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT tupleModulo((15, 10, 5), (5, 3, 2)) -``` - -```response title=Response -(0, 1, 1) -``` - - -## tupleModuloByNumber - -Добавлена в: v23.8 - -Возвращает кортеж остатков от деления элементов кортежа на заданный делитель. - -**Синтаксис** - -```sql -tupleModuloByNumber(tuple_num, div) -``` - -**Аргументы** - -* `tuple_num` — кортеж числителей. [`Tuple((U)Int*)`](/sql-reference/data-types/tuple) или [`Tuple(Float*)`](/sql-reference/data-types/tuple) или [`Tuple(Decimal)`](/sql-reference/data-types/tuple) -* `div` — значение делителя. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Возвращает кортеж остатков от деления. При делении на ноль возникает ошибка. [`Tuple((U)Int*)`](/sql-reference/data-types/tuple) или [`Tuple(Float*)`](/sql-reference/data-types/tuple) или [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT tupleModuloByNumber((15, 10, 5), 2) -``` - -```response title=Response -(1, 0, 1) -``` - - -## tupleMultiply - -Появилась в версии: v21.11 - -Выполняет поэлементное умножение двух кортежей одинакового размера. - -**Синтаксис** - -```sql -tupleMultiply(t1, t2) -``` - -**Аргументы** - -* `t1` — первый кортеж. [`Tuple((U)Int*)`](/sql-reference/data-types/tuple) или [`Tuple(Float*)`](/sql-reference/data-types/tuple) или [`Tuple(Decimal)`](/sql-reference/data-types/tuple) -* `t2` — второй кортеж. [`Tuple((U)Int*)`](/sql-reference/data-types/tuple) или [`Tuple(Float*)`](/sql-reference/data-types/tuple) или [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает кортеж с результатами умножения. [`Tuple((U)Int*)`](/sql-reference/data-types/tuple) или [`Tuple(Float*)`](/sql-reference/data-types/tuple) или [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT tupleMultiply((1, 2), (2, 3)) -``` - -```response title=Response -(2, 6) -``` - - -## tupleMultiplyByNumber - -Введена в версии: v21.11 - -Возвращает кортеж, в котором все элементы умножены на число. - -**Синтаксис** - -```sql -tupleMultiplyByNumber(кортеж, число) -``` - -**Аргументы** - -* `tuple` — кортеж для умножения. [`Tuple((U)Int*)`](/sql-reference/data-types/tuple) или [`Tuple(Float*)`](/sql-reference/data-types/tuple) или [`Tuple(Decimal)`](/sql-reference/data-types/tuple) -* `number` — множитель. [`(U)Int*`](/sql-reference/data-types/int-uint) или [`Float*`](/sql-reference/data-types/float) или [`Decimal`](/sql-reference/data-types/decimal) - -**Возвращаемое значение** - -Возвращает кортеж с элементами, умноженными на заданный множитель. [`Tuple((U)Int*)`](/sql-reference/data-types/tuple) или [`Tuple(Float*)`](/sql-reference/data-types/tuple) или [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT tupleMultiplyByNumber((1, 2), -2.1) -``` - -```response title=Response -(-2.1, -4.2) -``` - - -## tupleNames - -Впервые появилась в версии: v - -Преобразует кортеж в массив имён столбцов. Для кортежа вида `Tuple(a T, b T, ...)` возвращает массив строк с именами столбцов этого кортежа. Если элементы кортежа не имеют явных имён, в качестве имён столбцов будут использованы их индексы. - -**Синтаксис** - -```sql -``` - -**Аргументы** - -* Нет. - -**Возвращаемое значение** - -**Примеры** - -**Типичный** - -```sql title=Query -SELECT tupleNames(tuple(1 as a, 2 as b)) -``` - -```response title=Response -['a','b'] -``` - - -## tupleNegate - -Добавлена в версии: v21.11 - -Вычисляет отрицание элементов кортежа. - -**Синтаксис** - -```sql -tupleNegate(t) -``` - -**Аргументы** - -* `t` — кортеж, к которому применяется операция отрицания. [`Tuple((U)Int*)`](/sql-reference/data-types/tuple) или [`Tuple(Float*)`](/sql-reference/data-types/tuple) или [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает кортеж — результат применения отрицания. [`Tuple((U)Int*)`](/sql-reference/data-types/tuple) или [`Tuple(Float*)`](/sql-reference/data-types/tuple) или [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT tupleNegate((1, 2)) -``` - -```response title=Response -(-1, -2) -``` - - -## tuplePlus - -Появился в версии: v21.11 - -Вычисляет сумму соответствующих элементов двух кортежей одинакового размера. - -**Синтаксис** - -```sql -tuplePlus(t1, t2) -``` - -**Псевдонимы**: `vectorSum` - -**Аргументы** - -* `t1` — первый кортеж. [`Tuple((U)Int*)`](/sql-reference/data-types/tuple) или [`Tuple(Float*)`](/sql-reference/data-types/tuple) или [`Tuple(Decimal)`](/sql-reference/data-types/tuple) -* `t2` — второй кортеж. [`Tuple((U)Int*)`](/sql-reference/data-types/tuple) или [`Tuple(Float*)`](/sql-reference/data-types/tuple) или [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает кортеж, содержащий суммы соответствующих элементов входных кортежей. [`Tuple((U)Int*)`](/sql-reference/data-types/tuple) или [`Tuple(Float*)`](/sql-reference/data-types/tuple) или [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**Примеры** - -**Базовое использование** - -```sql title=Query -SELECT tuplePlus((1, 2), (2, 3)) -``` - -```response title=Response -(3, 5) -``` - - -## tupleToNameValuePairs - -Впервые появилась в версии: v21.9 - -Преобразует кортеж в массив пар `(name, value)`. -Например, кортеж `Tuple(n1 T1, n2 T2, ...)` преобразуется в `Array(Tuple('n1', T1), Tuple('n2', T2), ...)`. -Все значения в кортеже должны иметь один и тот же тип. - -**Синтаксис** - -```sql -tupleToNameValuePairs(tuple) -``` - -**Аргументы** - -* `tuple` — именованный кортеж с любыми типами значений. [`Tuple(n1 T1[, n2 T2, ...])`](/sql-reference/data-types/tuple) - -**Возвращаемое значение** - -Возвращает массив пар вида `(name, value)`. [`Array(Tuple(String, T))`](/sql-reference/data-types/array) - -**Примеры** - -**Именованный кортеж** - -```sql title=Query -SELECT tupleToNameValuePairs(tuple(1593 AS user_ID, 2502 AS session_ID)) -``` - -```response title=Response -[('1', 1593), ('2', 2502)] -``` - -**Безымянный кортеж** - -```sql title=Query -SELECT tupleToNameValuePairs(tuple(3, 2, 1)) -``` - -```response title=Response -[('1', 3), ('2', 2), ('3', 1)] -``` - {/*АВТОСГЕНЕРИРОВАНО_КОНЕЦ*/ } @@ -870,7 +57,7 @@ untuple(x) └─────┴────┴────┴────┴────┴────┴───────────┘ ``` -Пример использования столбца типа `Tuple` в качестве аргумента функции `untuple`: +Пример использования столбца типа данных `Tuple` в качестве параметра функции `untuple`: Запрос: @@ -913,4 +100,4 @@ SELECT untuple((* EXCEPT (v2, v3),)) FROM kv; ## Функции расстояния {#distance-functions} -Все поддерживаемые функции описаны в [документации по функциям расстояния](../../sql-reference/functions/distance-functions.md). +Все поддерживаемые функции описаны в [документации по функциям расстояния](../../sql-reference/functions/distance-functions.md). \ No newline at end of file diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/ulid-functions.md b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/ulid-functions.md index d9a2d836e14..6882eb1ac2e 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/ulid-functions.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/ulid-functions.md @@ -6,8 +6,6 @@ title: 'Функции для работы с ULID' doc_type: 'reference' --- - - # Функции для работы с ULID :::note @@ -15,100 +13,16 @@ doc_type: 'reference' ::: {/* - Внутреннее содержимое расположенных ниже тегов при сборке фреймворка документации - заменяется документацией, сгенерированной из system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. + Содержимое приведённых ниже тегов заменяется при сборке фреймворка документации + документами, сгенерированными из system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. См.: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## ULIDStringToDateTime - -Введена в версии: v23.3 - -Эта функция извлекает метку времени из [ULID](([https://github.com/ulid/spec](https://github.com/ulid/spec)). - -**Синтаксис** - -```sql -ULIDStringToDateTime(ulid[, timezone]) -``` - -**Аргументы** - -* `ulid` — Входной ULID. [`String`](/sql-reference/data-types/string) или [`FixedString(26)`](/sql-reference/data-types/fixedstring) -* `timezone` — Необязательный параметр. Название часового пояса для возвращаемого значения. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Метка времени с точностью до миллисекунд. [`DateTime64(3)`](/sql-reference/data-types/datetime64) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT ULIDStringToDateTime('01GNB2S2FGN2P93QPXDNB4EN2R') -``` - -```response title=Response -┌─ULIDStringToDateTime('01GNB2S2FGN2P93QPXDNB4EN2R')─┐ -│ 2022-12-28 00:40:37.616 │ -└────────────────────────────────────────────────────┘ -``` - - -## generateULID - -Введена в версии v23.2 - -Генерирует [универсальный уникальный лексикографически сортируемый идентификатор (ULID)](https://github.com/ulid/spec). - -**Синтаксис** - -```sql -generateULID([x]) -``` - -**Аргументы** - -* `x` — Необязательный аргумент. Выражение, дающее на выходе значение любого из поддерживаемых типов данных. Полученное значение отбрасывается, но само выражение используется для обхода [устранения общих подвыражений](/sql-reference/functions/overview#common-subexpression-elimination), если функция вызывается несколько раз в одном запросе. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает ULID. [`FixedString(26)`](/sql-reference/data-types/fixedstring) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT generateULID() -``` - -```response title=Response -┌─generateULID()─────────────┐ -│ 01GNB2S2FGN2P93QPXDNB4EN2R │ -└────────────────────────────┘ -``` - -**Пример использования при необходимости сгенерировать несколько значений в одной строке** - -```sql title=Query -SELECT generateULID(1), generateULID(2) -``` - -```response title=Response -┌─generateULID(1)────────────┬─generateULID(2)────────────┐ -│ 01GNB2SGG4RHKVNT9ZGA4FFMNP │ 01GNB2SGG4V0HMQVH4VBVPSSRB │ -└────────────────────────────┴────────────────────────────┘ -``` - {/*AUTOGENERATED_END*/ } ## См. также {#see-also} -- [UUID](../../sql-reference/functions/uuid-functions.md) - +- [UUID](../../sql-reference/functions/uuid-functions.md) \ No newline at end of file diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/url-functions.md b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/url-functions.md index 651e82d7f92..4b752ce4ebf 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/url-functions.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/url-functions.md @@ -6,21 +6,17 @@ title: 'Функции для работы с URL-адресами' doc_type: 'reference' --- - - -# Функции для работы с URL - - +# Функции для работы с URL-адресами ## Обзор :::note Функции, упомянутые в этом разделе, оптимизированы для максимальной производительности и в большинстве случаев не следуют стандарту RFC-3986. -Функции, которые реализуют RFC-3986, имеют суффикс `RFC` в имени функции и, как правило, работают медленнее. +Функции, реализующие RFC-3986, имеют суффикс `RFC` в имени функции и, как правило, работают медленнее. ::: -Как правило, вы можете использовать варианты функций без `RFC` при работе с публично зарегистрированными доменами, которые не содержат ни пользовательской части, ни символа `@`. -В таблице ниже указано, какие символы в URL могут (`✔`) или не могут (`✗`) быть разобраны соответствующими вариантами с `RFC` и без `RFC`: +Как правило, можно использовать варианты функций без суффикса `RFC` при работе с публично зарегистрированными доменами, которые не содержат пользовательских данных и символов `@`. +В таблице ниже показано, какие символы в URL могут (`✔`) или не могут (`✗`) быть разобраны соответствующими вариантами `RFC` и non-`RFC`: | Symbol | non-`RFC` | `RFC` | | | ----------- | --------- | ----- | - | @@ -41,1400 +37,23 @@ doc_type: 'reference' | = | ✗ | ✔* | | | & | ✗ | ✔* | | -Символы, помеченные `*`, являются субразделителями в RFC 3986 и допускаются в пользовательской информации, следующей за символом `@`. +Символы, помеченные `*`, являются субделимитерами в RFC 3986 и допускаются для пользовательской информации, следующей за символом `@`. Существует два типа функций для работы с URL: -* Функции, которые извлекают части URL. Если соответствующая часть отсутствует в URL, возвращается пустая строка. -* Функции, которые удаляют часть URL. Если в URL нет ничего подобного, URL остаётся без изменений. +* Функции, извлекающие части URL. Если соответствующая часть отсутствует в URL, возвращается пустая строка. +* Функции, удаляющие часть URL. Если соответствующая часть в URL отсутствует, URL остаётся неизменным. :::note -Приведённые ниже функции сгенерированы из системной таблицы `system.functions`. +Приведённые ниже функции генерируются из системной таблицы `system.functions`. ::: {/* - Внутреннее содержимое расположенных ниже тегов при сборке фреймворка документации + Во время сборки фреймворка документации содержимое приведённых ниже тегов заменяется документацией, сгенерированной из system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. См.: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## cutFragment - -Добавлено в версии v1.1 - -Удаляет идентификатор фрагмента, включая символ `#` (решётку), из URL. - -**Синтаксис** - -```sql -cutFragment(url) -``` - -**Аргументы** - -* `url` — URL. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает URL без идентификатора фрагмента. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT cutFragment('http://example.com/path?query=value#fragment123'); -``` - -```response title=Response -┌─cutFragment('http://example.com/path?query=value#fragment123')─┐ -│ http://example.com/path?query=value │ -└────────────────────────────────────────────────────────────────┘ -``` - - -## cutQueryString - -Впервые представлена в версии v1.1 - -Удаляет строку запроса, включая знак вопроса, из URL-адреса. - -**Синтаксис** - -```sql -cutQueryString(url) -``` - -**Аргументы** - -* `url` — URL. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает URL без строки запроса. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT cutQueryString('http://example.com/path?query=value¶m=123#fragment'); -``` - -```response title=Response -┌─cutQueryString('http://example.com/path?query=value¶m=123#fragment')─┐ -│ http://example.com/path#fragment │ -└──────────────────────────────────────────────────────────────────────────┘ -``` - - -## cutQueryStringAndFragment - -Появилось в версии: v1.1 - -Удаляет строку запроса и идентификатор фрагмента, включая вопросительный знак и символ решётки, из URL-адреса. - -**Синтаксис** - -```sql -cutQueryStringAndFragment(url) -``` - -**Аргументы** - -* `url` — URL. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает URL без строки запроса и идентификатора фрагмента. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT cutQueryStringAndFragment('http://example.com/path?query=value¶m=123#fragment'); -``` - -```response title=Response -┌─cutQueryStringAndFragment('http://example.com/path?query=value¶m=123#fragment')─┐ -│ http://example.com/path │ -└─────────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## cutToFirstSignificantSubdomain - -Добавлено в: v1.1 - -Возвращает часть доменного имени, которая включает поддомены верхнего уровня до [первого значимого поддомена](/sql-reference/functions/url-functions#firstSignificantSubdomain). - -**Синтаксис** - -```sql -cutToFirstSignificantSubdomain(url) -``` - -**Аргументы** - -* `url` — URL или строка с доменным именем для обработки. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает часть домена, которая включает поддомены верхнего уровня вплоть до первого значимого поддомена, если это возможно, в противном случае возвращает пустую строку. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT - cutToFirstSignificantSubdomain('https://news.clickhouse.com.tr/'), - cutToFirstSignificantSubdomain('www.tr'), - cutToFirstSignificantSubdomain('tr'); -``` - -```response title=Response -┌─cutToFirstSignificantSubdomain('https://news.clickhouse.com.tr/')─┬─cutToFirstSignificantSubdomain('www.tr')─┬─cutToFirstSignificantSubdomain('tr')─┐ -│ clickhouse.com.tr │ tr │ │ -└───────────────────────────────────────────────────────────────────┴──────────────────────────────────────────┴──────────────────────────────────────┘ -``` - - -## cutToFirstSignificantSubdomainCustom - -Добавлено в: v21.1 - -Возвращает часть домена, которая включает домены верхнего уровня и субдомены до первого значимого субдомена. Принимает имя пользовательского списка [TLD](https://en.wikipedia.org/wiki/List_of_Internet_top-level_domains). Эта функция может быть полезна, если вам нужен обновлённый список TLD или если у вас есть собственный список. - -**Пример конфигурации** - -```yaml - - - - public_suffix_list.dat - - -``` - -**Синтаксис** - -```sql -cutToFirstSignificantSubdomainCustom(url, имя_списка_доменных_зон) -``` - -**Аргументы** - -* `url` — URL или доменное имя в виде строки для обработки. [`String`](/sql-reference/data-types/string) -* `tld_list_name` — имя пользовательского списка TLD, настроенного в ClickHouse. [`const String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает часть доменного имени, которая включает поддомены верхнего уровня до первого значимого поддомена. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Использование пользовательского списка TLD для нестандартных доменов** - -```sql title=Query -SELECT cutToFirstSignificantSubdomainCustom('bar.foo.there-is-no-such-domain', 'public_suffix_list') -``` - -```response title=Response -foo.there-is-no-such-domain -``` - - -## cutToFirstSignificantSubdomainCustomRFC - -Появилась в версии v22.10 - -Возвращает часть домена, которая включает поддомены верхнего уровня вплоть до первого значимого поддомена. -Принимает имя пользовательского списка [TLD](https://en.wikipedia.org/wiki/List_of_Internet_top-level_domains). -Эта функция может быть полезна, если вам нужен обновлённый список TLD или если у вас есть собственный список. -Аналогична [cutToFirstSignificantSubdomainCustom](#cutToFirstSignificantSubdomainCustom), но соответствует RFC 3986. - -**Пример конфигурации** - -```xml - - - - public_suffix_list.dat - - -``` - -**Синтаксис** - -```sql -cutToFirstSignificantSubdomainCustomRFC(url, tld_list_name) -``` - -**Аргументы** - -* `url` — строка URL или доменного имени для обработки в соответствии с RFC 3986. -* `tld_list_name` — имя пользовательского списка TLD, настроенного в ClickHouse. - -**Возвращаемое значение** - -Возвращает часть домена, которая включает верхние поддомены вплоть до первого значимого поддомена. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT cutToFirstSignificantSubdomainCustomRFC('www.foo', 'public_suffix_list'); -``` - -```response title=Response -┌─cutToFirstSignificantSubdomainCustomRFC('www.foo', 'public_suffix_list')─────┐ -│ www.foo │ -└──────────────────────────────────────────────────────────────────────────────┘ -``` - - -## cutToFirstSignificantSubdomainCustomWithWWW - -Добавлена в версии v21.1 - -Возвращает часть домена, которая включает поддомены верхнего уровня вплоть до первого значимого поддомена, не удаляя `www`. Принимает имя пользовательского списка TLD. Это может быть полезно, если вам нужен актуальный список TLD или у вас есть собственный список. - -**Пример конфигурации** - -````yaml - - - - public_suffix_list.dat - - - - -**Синтаксис** - -```sql -cutToFirstSignificantSubdomainCustomWithWWW(url, tld_list_name) -```` - -**Аргументы** - -* `url` — URL или строка домена для обработки. -* `tld_list_name` — имя пользовательского списка TLD, настроенного в ClickHouse. - -**Возвращаемое значение** - -Часть домена, которая включает поддомены верхнего уровня до первого значимого поддомена, при этом `www` не удаляется. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT cutToFirstSignificantSubdomainCustomWithWWW('www.foo', 'public_suffix_list'); -``` - -```response title=Response -┌─cutToFirstSignificantSubdomainCustomWithWWW('www.foo', 'public_suffix_list')─┐ -│ www.foo │ -└──────────────────────────────────────────────────────────────────────────────┘ -``` - - -## cutToFirstSignificantSubdomainCustomWithWWWRFC - -Появилась в версии v22.10 - -Возвращает часть доменного имени, включающую поддомены верхних уровней до первого значимого поддомена, при этом `www` не удаляется. -Принимает имя пользовательского списка TLD. -Может быть полезна, если вам нужен обновлённый список TLD или у вас есть собственный список. -Аналогична [cutToFirstSignificantSubdomainCustomWithWWW](#cutToFirstSignificantSubdomainCustomWithWWW), но соответствует [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986). - -**Пример конфигурации** - -````xml - - - - public_suffix_list.dat - - - - -**Синтаксис** - -```sql -cutToFirstSignificantSubdomainCustomWithWWWRFC(url, tld_list_name) -```` - -**Аргументы** - -* `url` — строка URL или доменного имени для обработки в соответствии с RFC 3986. -* `tld_list_name` — имя пользовательского списка TLD, настроенного в ClickHouse. - -**Возвращаемое значение** - -Возвращает часть доменного имени, которая включает домены верхнего уровня и субдомены вплоть до первого значимого субдомена, без удаления `www`. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Разбор RFC 3986 с сохранением www и пользовательским списком TLD** - -```sql title=Query -SELECT cutToFirstSignificantSubdomainCustomWithWWWRFC('https://www.subdomain.example.custom', 'public_suffix_list') -``` - -```response title=Response -www.example.custom -``` - - -## cutToFirstSignificantSubdomainRFC - -Впервые представлена в: v22.10 - -Возвращает часть доменного имени, которая включает старшие поддомены вплоть до ["первого значимого поддомена"](/sql-reference/functions/url-functions#firstSignificantSubdomain). Аналогична [`cutToFirstSignificantSubdomain`](#cutToFirstSignificantSubdomain), но соответствует [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986). - -**Синтаксис** - -```sql -cutToFirstSignificantSubdomainRFC(url) -``` - -**Аргументы** - -* `url` — URL или строка с доменным именем для обработки в соответствии с RFC 3986. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает часть доменного имени, которая включает домены верхнего уровня вплоть до первого значимого поддомена, если это возможно, в противном случае возвращает пустую строку. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT - cutToFirstSignificantSubdomain('http://user:password@example.com:8080'), - cutToFirstSignificantSubdomainRFC('http://user:password@example.com:8080'); -``` - -```response title=Response -┌─cutToFirstSignificantSubdomain('http://user:password@example.com:8080')─┬─cutToFirstSignificantSubdomainRFC('http://user:password@example.com:8080')─┐ -│ │ example.com │ -└─────────────────────────────────────────────────────────────────────────┴────────────────────────────────────────────────────────────────────────────┘ -``` - - -## cutToFirstSignificantSubdomainWithWWW - -Введена в: v20.12 - -Возвращает часть домена, которая включает субдомены верхнего уровня вплоть до «первого значимого субдомена», не удаляя префикс '[www](http://www).'. - -Аналогична [`cutToFirstSignificantSubdomain`](#cutToFirstSignificantSubdomain), но сохраняет префикс '[www](http://www).', если он присутствует. - -**Синтаксис** - -```sql -cutToFirstSignificantSubdomainWithWWW(url) -``` - -**Аргументы** - -* `url` — URL или строка с доменным именем для обработки. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает часть домена, которая включает поддомены верхнего уровня до первого значимого поддомена (включая www), если возможно, иначе возвращает пустую строку. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT - cutToFirstSignificantSubdomainWithWWW('https://news.clickhouse.com.tr/'), - cutToFirstSignificantSubdomainWithWWW('www.tr'), - cutToFirstSignificantSubdomainWithWWW('tr'); -``` - -```response title=Response -┌─cutToFirstSignificantSubdomainWithWWW('https://news.clickhouse.com.tr/')─┬─cutToFirstSignificantSubdomainWithWWW('www.tr')─┬─cutToFirstSignificantSubdomainWithWWW('tr')─┐ -│ clickhouse.com.tr │ www.tr │ │ -└──────────────────────────────────────────────────────────────────────────┴─────────────────────────────────────────────────┴─────────────────────────────────────────────┘ -``` - - -## cutToFirstSignificantSubdomainWithWWWRFC - -Добавлено в версии: v22.10 - -Возвращает часть доменного имени, включающую поддомены верхнего уровня вплоть до «первого значимого поддомена», без удаления `www`. Аналогично [`cutToFirstSignificantSubdomainWithWWW`](#cutToFirstSignificantSubdomainWithWWW), но соответствует [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986). - -**Синтаксис** - -```sql -cutToFirstSignificantSubdomainWithWWWRFC(url) -``` - -**Аргументы** - -* `url` — URL или строка с доменным именем для обработки в соответствии с RFC 3986. - -**Возвращаемое значение** - -Возвращает часть доменного имени, включающую все старшие поддомены вплоть до первого значимого поддомена (с `www`, если он есть); в противном случае возвращает пустую строку типа [`String`](/sql-reference/data-types/string). - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT - cutToFirstSignificantSubdomainWithWWW('http:%2F%2Fwwwww.nova@mail.ru/economicheskiy'), - cutToFirstSignificantSubdomainWithWWWRFC('http:%2F%2Fwwwww.nova@mail.ru/economicheskiy'); -``` - -```response title=Response -┌─cutToFirstSignificantSubdomainWithWWW('http:%2F%2Fwwwww.nova@mail.ru/economicheskiy')─┬─cutToFirstSignificantSubdomainWithWWWRFC('http:%2F%2Fwwwww.nova@mail.ru/economicheskiy')─┐ -│ │ mail.ru │ -└───────────────────────────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## cutURLParameter - -Введена в версии: v1.1 - -Удаляет параметр `name` из URL, если он присутствует. -Эта функция не кодирует и не декодирует символы в именах параметров, например `Client ID` и `Client%20ID` рассматриваются как разные имена параметров. - -**Синтаксис** - -```sql -cutURLParameter(url, name) -``` - -**Аргументы** - -* `url` — URL. [`String`](/sql-reference/data-types/string) -* `name` — Имя параметра URL. [`String`](/sql-reference/data-types/string) или [`Array(String)`](/sql-reference/data-types/array) - -**Возвращаемое значение** - -URL, из которого удалён параметр URL с именем `name`. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT - cutURLParameter('http://bigmir.net/?a=b&c=d&e=f#g', 'a') AS url_без_a, - cutURLParameter('http://bigmir.net/?a=b&c=d&e=f#g', ['c', 'e']) AS url_без_c_и_e; -``` - -```response title=Response -┌─url_without_a────────────────┬─url_without_c_and_e──────┐ -│ http://bigmir.net/?c=d&e=f#g │ http://bigmir.net/?a=b#g │ -└──────────────────────────────┴──────────────────────────┘ -``` - - -## cutWWW - -Добавлена в версии: v1.1 - -Удаляет начальный `www.`, если он присутствует, из доменного имени URL-адреса. - -**Синтаксис** - -```sql -cutWWW(url) -``` - -**Аргументы** - -* `url` — URL. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает URL, в домене которого удалён начальный префикс `www.`. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT cutWWW('http://www.example.com/path?query=value#fragment'); -``` - -```response title=Response -┌─cutWWW('http://www.example.com/path?query=value#fragment')─┐ -│ http://example.com/path?query=value#fragment │ -└────────────────────────────────────────────────────────────┘ -``` - - -## decodeURLComponent - -Появилась в версии: v1.1 - -Принимает URL-кодированную строку на вход и декодирует её обратно в исходный, человекочитаемый вид. - -**Синтаксис** - -```sql -decodeURLComponent(url) -``` - -**Аргументы** - -* `url` — URL. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает декодированный URL. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT decodeURLComponent('http://127.0.0.1:8123/?query=SELECT%201%3B') AS DecodedURL; -``` - -```response title=Response -┌─DecodedURL─────────────────────────────┐ -│ http://127.0.0.1:8123/?query=SELECT 1; │ -└────────────────────────────────────────┘ -``` - - -## decodeURLFormComponent - -Добавлено в версии: v1.1 - -Декодирует строки в URL-кодировке с использованием правил кодирования веб-форм ([RFC-1866](https://www.rfc-editor.org/rfc/rfc1866.html)), при которых знаки `+` преобразуются в пробелы, а символы в percent-кодировке декодируются. - -**Синтаксис** - -```sql -decodeURLFormComponent(url) -``` - -**Аргументы** - -* `url` — URL. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает декодированный URL. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT decodeURLFormComponent('http://127.0.0.1:8123/?query=SELECT%201+2%2B3') AS DecodedURL; -``` - -```response title=Response -┌─DecodedURL────────────────────────────────┐ -│ http://127.0.0.1:8123/?query=SELECT 1 2+3 │ -└───────────────────────────────────────────┘ -``` - - -## domain - -Появилась в версии v1.1 - -Извлекает имя хоста из URL-адреса. - -URL-адрес может быть указан с протоколом или без него. - -**Синтаксис** - -```sql -domain(url) -``` - -**Аргументы** - -* `url` — URL. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает имя хоста, если входная строка может быть интерпретирована как URL, в противном случае — пустую строку. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT domain('svn+ssh://some.svn-hosting.com:80/repo/trunk'); -``` - -```response title=Response -┌─domain('svn+ssh://some.svn-hosting.com:80/repo/trunk')─┐ -│ some.svn-hosting.com │ -└────────────────────────────────────────────────────────┘ -``` - - -## domainRFC - -Добавлена в версии: v22.10 - -Извлекает имя хоста из URL. -Аналогична [`domain`](#domain), но соответствует [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986). - -**Синтаксис** - -```sql -domainRFC(url) -``` - -**Аргументы** - -* `url` — URL. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает имя хоста, если входная строка может быть разобрана как URL, в противном случае — пустую строку. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT - domain('http://user:password@example.com:8080/path?query=value#fragment'), - domainRFC('http://user:password@example.com:8080/path?query=value#fragment'); -``` - -```response title=Response -┌─domain('http://user:password@example.com:8080/path?query=value#fragment')─┬─domainRFC('http://user:password@example.com:8080/path?query=value#fragment')─┐ -│ │ example.com │ -└───────────────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────────────────────────┘ -``` - - -## domainWithoutWWW - -Введена в версии: v1.1 - -Возвращает домен из URL без ведущего `www.`, если он присутствует. - -**Синтаксис** - -```sql -domainWithoutWWW(url) -``` - -**Аргументы** - -* `url` — URL. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает имя домена, если входная строка может быть интерпретирована как URL (без начального `www.`), в противном случае — пустую строку. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT domainWithoutWWW('http://paul@www.example.com:80/'); -``` - -```response title=Response -┌─domainWithoutWWW('http://paul@www.example.com:80/')─┐ -│ example.com │ -└─────────────────────────────────────────────────────┘ -``` - - -## domainWithoutWWWRFC - -Добавлена в: v1.1 - -Возвращает домен без начального `www.`, если он присутствует. Аналогична [`domainWithoutWWW`](#domainWithoutWWW), но соответствует [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986). - -**Синтаксис** - -```sql -domainWithoutWWWRFC(url) -``` - -**Аргументы** - -* `url` — URL-адрес. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает доменное имя, если входная строка может быть интерпретирована как URL-адрес (без ведущего `www.`), в противном случае — пустую строку. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT - domainWithoutWWW('http://user:password@www.example.com:8080/path?query=value#fragment'), - domainWithoutWWWRFC('http://user:password@www.example.com:8080/path?query=value#fragment'); -``` - -```response title=Response -┌─domainWithoutWWW('http://user:password@www.example.com:8080/path?query=value#fragment')─┬─domainWithoutWWWRFC('http://user:password@www.example.com:8080/path?query=value#fragment')─┐ -│ │ example.com │ -└─────────────────────────────────────────────────────────────────────────────────────────┴────────────────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## encodeURLComponent - -Появилась в: v22.3 - -Принимает обычную строку и преобразует её в URL-кодированный (процентное кодирование) формат, в котором специальные символы заменяются их процентно закодированными эквивалентами. - -**Синтаксис** - -```sql -encodeURLComponent(url) -``` - -**Аргументы** - -* `url` — URL. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает закодированный URL. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT encodeURLComponent('http://127.0.0.1:8123/?query=SELECT 1;') AS EncodedURL; -``` - -```response title=Response -┌─EncodedURL───────────────────────────────────────────────┐ -│ http%3A%2F%2F127.0.0.1%3A8123%2F%3Fquery%3DSELECT%201%3B │ -└──────────────────────────────────────────────────────────┘ -``` - - -## encodeURLFormComponent - -Добавлена в версии: v22.3 - -Кодирует строки по правилам кодирования веб-форм ([RFC-1866](https://www.rfc-editor.org/rfc/rfc1866.html)), при которых пробелы преобразуются в символ «+», а специальные символы представляются в виде percent-encoding. - -**Синтаксис** - -```sql -encodeURLFormComponent(url) -``` - -**Аргументы** - -* `url` — URL. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает закодированный URL. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT encodeURLFormComponent('http://127.0.0.1:8123/?query=SELECT 1 2+3') AS EncodedURL; -``` - -```response title=Response -┌─EncodedURL────────────────────────────────────────────────┐ -│ http%3A%2F%2F127.0.0.1%3A8123%2F%3Fquery%3DSELECT+1+2%2B3 │ -└───────────────────────────────────────────────────────────┘ -``` - - -## extractURLParameter - -Появилась в версии: v1.1 - -Возвращает значение параметра `name` в URL, если он присутствует, в противном случае возвращается пустая строка. -Если в URL несколько параметров с таким именем, возвращается первое вхождение. -Функция предполагает, что URL в аргументе `url` закодирован тем же способом, что и значение аргумента `name`. - -**Синтаксис** - -```sql -extractURLParameter(url, name) -``` - -**Аргументы** - -* `url` — URL. [`String`](/sql-reference/data-types/string) -* `name` — имя параметра. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает значение параметра URL с указанным именем. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT extractURLParameter('http://example.com/?param1=value1¶m2=value2', 'param1'); -``` - -```response title=Response -┌─extractURLPa⋯, 'param1')─┐ -│ value1 │ -└──────────────────────────┘ -``` - - -## extractURLParameterNames - -Добавлено в: v1.1 - -Возвращает массив строк с именами параметров URL. -Значения не декодируются. - -**Синтаксис** - -```sql -extractURLParameterNames(url) -``` - -**Аргументы** - -* `url` — URL. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает массив строк с именами параметров URL. [`Array(String)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT extractURLParameterNames('http://example.com/?param1=value1¶m2=value2'); -``` - -```response title=Response -┌─extractURLPa⋯m2=value2')─┐ -│ ['param1','param2'] │ -└──────────────────────────┘ -``` - - -## extractURLParameters - -Добавлена в версии v1.1 - -Возвращает массив строк `name=value`, соответствующих параметрам URL-адреса. -Значения не декодируются. - -**Синтаксис** - -```sql -extractURLParameters(url) -``` - -**Аргументы** - -* `url` — URL. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает массив строк вида `name=value`, соответствующих параметрам URL. [`Array(String)`](/sql-reference/data-types/array) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT extractURLParameters('http://example.com/?param1=value1¶m2=value2'); -``` - -```response title=Response -┌─extractURLParame⋯¶m2=value2')─┐ -│ ['param1=value1','param2=value2'] │ -└───────────────────────────────────┘ -``` - - -## firstSignificantSubdomain - -Добавлена в версии: v - -Возвращает «первый значимый поддомен». - -Первым значимым поддоменом считается домен второго уровня, если он равен 'com', 'net', 'org' или 'co'. -В противном случае это домен третьего уровня. - -Например, firstSignificantSubdomain('[https://news.clickhouse.com/](https://news.clickhouse.com/)') = 'clickhouse', firstSignificantSubdomain('[https://news.clickhouse.com.tr/](https://news.clickhouse.com.tr/)') = 'clickhouse'. - -Список «незначимых» доменов второго уровня и другие детали реализации могут измениться в будущем. - -**Синтаксис** - -```sql -``` - -**Аргументы** - -* Нет. - -**Возвращаемое значение** - -**Примеры** - -**firstSignificantSubdomain** - -```sql title=Query -SELECT firstSignificantSubdomain('https://news.clickhouse.com/') -``` - -```response title=Response -``` - - -## firstSignificantSubdomainRFC - -Появилась в версии: v - -Возвращает «первый значимый поддомен» в соответствии с RFC 1034. - -**Синтаксис** - -```sql -``` - -**Аргументы** - -* Нет. - -**Возвращаемое значение** - -**Примеры** - - -## fragment - -Добавлена в версии: v1.1 - -Возвращает идентификатор фрагмента без начального символа `#`. - -**Синтаксис** - -```sql -fragment(url) -``` - -**Аргументы** - -* `url` — URL. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает идентификатор фрагмента без начального символа `#`. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT fragment('https://clickhouse.com/docs/getting-started/quick-start/cloud#1-create-a-clickhouse-service'); -``` - -```response title=Response -┌─fragment('http⋯ouse-service')─┐ -│ 1-create-a-clickhouse-service │ -└───────────────────────────────┘ -``` - - -## netloc - -Введена в версии v20.5 - -Извлекает сетевую часть (`username:password@host:port`) из URL. - -**Синтаксис** - -```sql -netloc(url) -``` - -**Аргументы** - -* `url` — URL. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает `username:password@host:port` из переданного URL. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT netloc('http://paul@www.example.com:80/'); -``` - -```response title=Response -┌─netloc('http⋯e.com:80/')─┐ -│ paul@www.example.com:80 │ -└──────────────────────────┘ -``` - - -## path - -Добавлено в: v1.1 - -Возвращает путь из URL-адреса без строки запроса. - -**Синтаксис** - -```sql -path(url) -``` - -**Аргументы** - -* `url` — URL. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает путь URL-адреса без строки запроса. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT path('https://clickhouse.com/docs/sql-reference/functions/url-functions/?query=value'); -``` - -```response title=Response -┌─path('https://clickhouse.com/en/sql-reference/functions/url-functions/?query=value')─┐ -│ /docs/sql-reference/functions/url-functions/ │ -└──────────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## pathFull - -Добавлено в версии: v1.1 - -То же, что и [`path`](#path), но включает строку запроса и фрагмент URL-адреса. - -**Синтаксис** - -```sql -pathFull(url) -``` - -**Аргументы** - -* `url` — URL. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает путь URL-адреса, включая строку запроса и фрагмент. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT pathFull('https://clickhouse.com/docs/sql-reference/functions/url-functions/?query=value#section'); -``` - -```response title=Response -┌─pathFull('https://clickhouse.com⋯unctions/?query=value#section')─┐ -│ /docs/sql-reference/functions/url-functions/?query=value#section │ -└──────────────────────────────────────────────────────────────────┘ -``` - - -## port - -Добавлена в версии: v20.5 - -Возвращает порт URL-адреса или `default_port`, если URL не содержит указания порта или не может быть разобран. - -**Синтаксис** - -```sql -port(url[, default_port]) -``` - -**Аргументы** - -* `url` — URL. [`String`](/sql-reference/data-types/string) -* `default_port` — Необязательный параметр. Номер порта по умолчанию, который будет возвращён. Если не задан, по умолчанию `0`. [`UInt16`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает порт из URL или порт по умолчанию, если в URL порт не указан или в случае ошибки валидации. [`UInt16`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT port('https://clickhouse.com:8443/docs'), port('https://clickhouse.com/docs', 443); -``` - -```response title=Response -┌─port('https://clickhouse.com:8443/docs')─┬─port('https://clickhouse.com/docs', 443)─┐ -│ 8443 │ 443 │ -└──────────────────────────────────────────┴──────────────────────────────────────────┘ -``` - - -## portRFC - -Добавлена в версии: v22.10 - -Возвращает порт или `default_port`, если URL не содержит порт или его невозможно разобрать. -Аналогична функции [`port`](#port), но соответствует [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986). - -**Синтаксис** - -```sql -portRFC(url[, default_port]) -``` - -**Аргументы** - -* `url` — URL. [`String`](/sql-reference/data-types/string) -* `default_port` — необязательный параметр. Номер порта по умолчанию, который будет возвращён. По умолчанию `0`. [`UInt16`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает порт или порт по умолчанию, если в URL не указан порт или при ошибке валидации. [`UInt16`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT port('http://user:password@example.com:8080/'), portRFC('http://user:password@example.com:8080/'); -``` - -```response title=Response -┌─port('http:/⋯com:8080/')─┬─portRFC('htt⋯com:8080/')─┐ -│ 0 │ 8080 │ -└──────────────────────────┴──────────────────────────┘ -``` - - -## protocol - -Добавлена в версии: v1.1 - -Извлекает протокол из URL-адреса. - -Примеры типичных возвращаемых значений: http, https, ftp, mailto, tel, magnet. - -**Синтаксис** - -```sql -protocol(url) -``` - -**Аргументы** - -* `url` — URL. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает протокол URL-адреса или пустую строку, если его не удаётся определить. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT protocol('https://clickhouse.com/'); -``` - -```response title=Response -┌─protocol('https://clickhouse.com/')─┐ -│ https │ -└─────────────────────────────────────┘ -``` - - -## queryString - -Добавлена в версии: v1.1 - -Возвращает строку запроса в URL без начального вопросительного знака, символа `#` и всего, что следует после `#`. - -**Синтаксис** - -```sql -queryString(url) -``` - -**Аргументы** - -* `url` — URL. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает строку запроса из URL без начального знака вопроса и фрагмента. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT queryString('https://clickhouse.com/docs?query=value¶m=123#section'); -``` - -```response title=Response -┌─queryString(⋯3#section')─┐ -│ query=value¶m=123 │ -└──────────────────────────┘ -``` - - -## queryStringAndFragment - -Впервые представлена в: v1.1 - -Возвращает строку запроса и идентификатор фрагмента URL-адреса. - -**Синтаксис** - -```sql -queryStringAndFragment(url) -``` - -**Аргументы** - -* `url` — URL. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает строку запроса и идентификатор фрагмента URL-адреса. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT queryStringAndFragment('https://clickhouse.com/docs?query=value¶m=123#section'); -``` - -```response title=Response -┌─queryStringAnd⋯=123#section')─┐ -│ query=value¶m=123#section │ -└───────────────────────────────┘ -``` - - -## topLevelDomain - -Добавлено в версии: v1.1 - -Извлекает домен верхнего уровня из URL. - -:::note -URL можно указывать с протоколом или без него. -Например: - -```text -svn+ssh://some.svn-hosting.com:80/repo/trunk -some.svn-hosting.com:80/repo/trunk -https://clickhouse.com/time/ -``` - -::: - -**Синтаксис** - -```sql -topLevelDomain(url) -``` - -**Аргументы** - -* `url` — URL-адрес. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает доменное имя, если входную строку можно интерпретировать как URL-адрес. В противном случае — пустую строку. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT topLevelDomain('svn+ssh://www.some.svn-hosting.com:80/repo/trunk'); -``` - -```response title=Response -┌─topLevelDomain('svn+ssh://www.some.svn-hosting.com:80/repo/trunk')─┐ -│ com │ -└────────────────────────────────────────────────────────────────────┘ -``` - - -## topLevelDomainRFC - -Добавлена в версии: v22.10 - -Извлекает домен верхнего уровня из URL-адреса. -Аналогична [`topLevelDomain`](#topLevelDomain), но соответствует [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986). - -**Синтаксис** - -```sql -topLevelDomainRFC(url) -``` - -**Аргументы** - -* `url` — URL-адрес. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Доменное имя, если входная строка может быть интерпретирована как URL-адрес. В противном случае — пустая строка. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT topLevelDomain('http://foo:foo%41bar@foo.com'), topLevelDomainRFC('http://foo:foo%41bar@foo.com'); -``` - -```response title=Response -┌─topLevelDomain('http://foo:foo%41bar@foo.com')─┬─topLevelDomainRFC('http://foo:foo%41bar@foo.com')─┐ -│ │ com │ -└────────────────────────────────────────────────┴───────────────────────────────────────────────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/uuid-functions.md b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/uuid-functions.md index af317ad9635..7e313122203 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/uuid-functions.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/functions/uuid-functions.md @@ -1,5 +1,5 @@ --- -description: 'Справочник функций для работы с UUID' +description: 'Справочная документация по функциям для работы с UUID' sidebar_label: 'UUID' slug: /sql-reference/functions/uuid-functions title: 'Функции для работы с UUID' @@ -11,13 +11,11 @@ import DeprecatedBadge from '@theme/badges/DeprecatedBadge'; # Функции для работы с UUID - - ## Генерация UUIDv7 -Сгенерированный UUID содержит 48-битный временной штамп в миллисекундах Unix, за которым следуют версия «7» (4 бита), счётчик (42 бита) для различения UUID в пределах одной миллисекунды (включая поле варианта «2», 2 бита) и случайное поле (32 бита). -Для любого заданного временного штампа (`unix_ts_ms`) счётчик начинается со случайного значения и увеличивается на 1 для каждого нового UUID до тех пор, пока временной штамп не изменится. В случае переполнения счётчика поле временного штампа увеличивается на 1, а счётчик сбрасывается на новое случайное начальное значение. -Функции генерации UUID гарантируют, что поле счётчика в рамках одного временного штампа монотонно возрастает во всех вызовах функций в параллельно выполняющихся потоках и запросах. +Сгенерированный UUID содержит 48-битный таймстамп в миллисекундах Unix-времени, за которым следуют версия «7» (4 бита), счётчик (42 бита) для различения UUID в пределах одной миллисекунды (включая поле варианта «2» — 2 бита) и случайное поле (32 бита). +Для любого заданного таймстампа (`unix_ts_ms`) счётчик начинается со случайного значения и увеличивается на 1 для каждого нового UUID до тех пор, пока таймстамп не изменится. В случае переполнения счётчика поле таймстампа увеличивается на 1, а счётчик сбрасывается на новое случайное начальное значение. +Функции генерации UUID гарантируют, что поле счётчика в пределах одного таймстампа монотонно возрастает во всех вызовах функции в параллельно выполняющихся потоках и запросах. ```text 0 1 2 3 @@ -36,17 +34,17 @@ import DeprecatedBadge from '@theme/badges/DeprecatedBadge'; ## Генерация Snowflake ID -Сгенерированный Snowflake ID содержит текущую метку времени Unix в миллисекундах (41 + 1 старший нулевой бит), затем идентификатор машины (10 бит) и счётчик (12 бит) для различения идентификаторов в пределах одной миллисекунды. Для любой заданной метки времени (`unix_ts_ms`) счётчик начинается с 0 и увеличивается на 1 для каждого нового Snowflake ID до тех пор, пока метка времени не изменится. В случае переполнения счётчика поле метки времени увеличивается на 1, а счётчик обнуляется. +Сгенерированный Snowflake ID содержит текущую Unix-метку времени в миллисекундах (41 бит + 1 старший нулевой бит), за которой следуют идентификатор машины (10 бит) и счётчик (12 бит) для различения идентификаторов в пределах одной миллисекунды. Для любой заданной метки времени (`unix_ts_ms`) счётчик начинается с 0 и увеличивается на 1 для каждого нового Snowflake ID до изменения метки времени. В случае переполнения счётчика поле метки времени увеличивается на 1, а счётчик сбрасывается в 0. :::note -Сгенерированные Snowflake ID основаны на эпохе Unix 1970-01-01. Хотя не существует стандарта или рекомендаций для эпохи Snowflake ID, реализации в других системах могут использовать другую эпоху, например Twitter/X (2010-11-04) или Mastodon (2015-01-01). +Сгенерированные Snowflake ID основаны на эпохе UNIX 1970-01-01. Хотя не существует стандарта или рекомендаций для эпохи Snowflake ID, реализации в других системах могут использовать другую эпоху, например Twitter/X (2010-11-04) или Mastodon (2015-01-01). ::: ```text 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤ -|0| временная метка | +|0| timestamp | ├─┼ ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤ | | machine_id | machine_seq_num | └─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘ @@ -65,7 +63,7 @@ generateUUIDv4([expr]) **Аргументы** -* `expr` — Произвольное [выражение](/sql-reference/syntax#expressions), используемое для обхода механизма [устранения общих подвыражений](/sql-reference/functions/overview#common-subexpression-elimination), если функция вызывается несколько раз в запросе. Значение выражения не влияет на возвращаемый UUID. Необязательный параметр. +* `expr` — Произвольное [выражение](/sql-reference/syntax#expressions), используемое для обхода [устранения общих подвыражений](/sql-reference/functions/overview#common-subexpression-elimination) при многократном вызове функции в одном запросе. Значение выражения не влияет на возвращаемый UUID. Необязательный параметр. **Возвращаемое значение** @@ -73,7 +71,7 @@ generateUUIDv4([expr]) **Пример** -Сначала создайте таблицу со столбцом типа UUID, затем вставьте в таблицу сгенерированный UUIDv4. +Сначала создайте таблицу со столбцом типа UUID, затем вставьте сгенерированный UUIDv4 в эту таблицу. ```sql CREATE TABLE tab (uuid UUID) ENGINE = Memory; @@ -91,7 +89,7 @@ SELECT * FROM tab; └──────────────────────────────────────┘ ``` -**Пример с несколькими UUID, генерируемыми для каждой строки** +**Пример, в котором для каждой строки генерируется несколько UUID** ```sql SELECT generateUUIDv4(1), generateUUIDv4(2); @@ -104,12 +102,12 @@ SELECT generateUUIDv4(1), generateUUIDv4(2); ## generateUUIDv7 -Генерирует [UUID версии 7](https://datatracker.ietf.org/doc/html/draft-peabody-dispatch-new-uuid-format-04) [UUID](../data-types/uuid.md). +Генерирует [UUID версии 7](https://datatracker.ietf.org/doc/html/draft-peabody-dispatch-new-uuid-format-04) [(UUID)](../data-types/uuid.md). См. раздел ["Генерация UUIDv7"](#uuidv7-generation) для подробностей о структуре UUID, управлении счётчиком и гарантиях при конкурентном доступе. :::note -По состоянию на апрель 2024 года UUID версии 7 находятся в статусе черновика, и их формат может измениться в будущем. +По состоянию на апрель 2024 года UUID версии 7 имеют статус черновика, и их структура в будущем может измениться. ::: **Синтаксис** @@ -120,7 +118,7 @@ generateUUIDv7([expr]) **Аргументы** -* `expr` — Произвольное [выражение](/sql-reference/syntax#expressions), используемое для отключения [устранения общих подвыражений](/sql-reference/functions/overview#common-subexpression-elimination), если функция вызывается несколько раз в запросе. Значение выражения не влияет на возвращаемый UUID. Необязательный параметр. +* `expr` — Произвольное [выражение](/sql-reference/syntax#expressions), позволяющее обойти [устранение общих подвыражений](/sql-reference/functions/overview#common-subexpression-elimination), если функция вызывается несколько раз в запросе. Значение выражения не влияет на возвращаемый UUID. Необязательный параметр. **Возвращаемое значение** @@ -146,7 +144,7 @@ SELECT * FROM tab; └──────────────────────────────────────┘ ``` -**Пример с несколькими UUID, создаваемыми для каждой строки** +**Пример с несколькими UUID, генерируемыми для каждой строки** ```sql SELECT generateUUIDv7(1), generateUUIDv7(2); @@ -159,12 +157,12 @@ SELECT generateUUIDv7(1), generateUUIDv7(2); ## dateTimeToUUIDv7 -Преобразует значение [DateTime](../data-types/datetime.md) в [UUIDv7](https://en.wikipedia.org/wiki/UUID#Version_7) для заданного момента времени. +Преобразует значение [DateTime](../data-types/datetime.md) в [UUIDv7](https://en.wikipedia.org/wiki/UUID#Version_7) на заданный момент времени. -См. раздел ["Генерация UUIDv7"](#uuidv7-generation) для подробностей о структуре UUID, управлении счетчиком и гарантиях при конкурентном доступе. +См. раздел «[UUIDv7 generation](#uuidv7-generation)» для подробностей о структуре UUID, управлении счётчиком и гарантиях корректной работы при конкурентном доступе. :::note -По состоянию на апрель 2024 года UUID версии 7 находятся в статусе черновика, и их структура может измениться в будущем. +По состоянию на апрель 2024 года UUID версии 7 имеют статус черновика, и их структура может измениться в будущем. ::: **Синтаксис** @@ -195,7 +193,7 @@ SELECT dateTimeToUUIDv7(toDateTime('2021-08-15 18:57:56', 'Asia/Shanghai')); └─────────────────────────────────────────────────────────────────────────┘ ``` -**Пример с несколькими UUID для одного и того же значения метки времени** +**Пример с несколькими UUID для одной и той же временной метки** ```sql SELECT dateTimeToUUIDv7(toDateTime('2021-08-15 18:57:56')); @@ -214,7 +212,7 @@ SELECT dateTimeToUUIDv7(toDateTime('2021-08-15 18:57:56')); └──────────────────────────────────────┘ ``` -Функция гарантирует, что при нескольких вызовах с одной и той же отметкой времени генерируются уникальные, монотонно возрастающие идентификаторы UUID. +Функция гарантирует, что несколько вызовов с одинаковым значением временной метки генерируют уникальные, монотонно возрастающие UUID. ## empty @@ -227,9 +225,9 @@ SELECT dateTimeToUUIDv7(toDateTime('2021-08-15 18:57:56')); empty(UUID) ``` -UUID считается пустым, если он состоит из одних нулей (нулевой UUID). +UUID считается пустым, если он состоит полностью из нулей (нулевой UUID). -Функция также работает с `Array` и `String`. +Функция также работает для массивов и строк. **Аргументы** @@ -241,7 +239,7 @@ UUID считается пустым, если он состоит из одни **Пример** -Для генерации значения UUID ClickHouse предоставляет функцию [generateUUIDv4](#generateuuidv4). +Чтобы сгенерировать значение UUID, ClickHouse предоставляет функцию [generateUUIDv4](#generateuuidv4). Запрос: @@ -260,7 +258,7 @@ SELECT empty(generateUUIDv4()); ## notEmpty -Проверяет, что входной UUID не является пустым. +Проверяет, что переданный UUID не пустой. **Синтаксис** @@ -268,9 +266,9 @@ SELECT empty(generateUUIDv4()); notEmpty(UUID) ``` -UUID считается пустым, если он содержит все нули (нулевой UUID). +UUID считается пустым, если он состоит полностью из нулей (нулевой UUID). -Функция также работает для значений типов `Array` и `String`. +Функция также работает для массивов и строк. **Аргументы** @@ -282,7 +280,7 @@ UUID считается пустым, если он содержит все ну **Пример** -Для генерации значения UUID ClickHouse предоставляет функцию [generateUUIDv4](#generateuuidv4). +Для генерации значения UUID в ClickHouse предусмотрена функция [generateUUIDv4](#generateuuidv4). Запрос: @@ -301,7 +299,7 @@ SELECT notEmpty(generateUUIDv4()); ## toUUID -Преобразует значение типа `String` в UUID. +Преобразует значение типа String в значение типа UUID. ```sql toUUID(string) @@ -331,7 +329,7 @@ SELECT toUUID('61f0c404-5cb3-11e7-907b-a6006ad3dba0') AS uuid **Аргументы** * `string` — строка длиной 36 символов или FixedString(36). [String](../syntax.md#string). -* `default` — UUID, который используется по умолчанию, если первый аргумент не может быть преобразован в тип UUID. [UUID](../data-types/uuid.md). +* `default` — UUID, используемый по умолчанию, если первый аргумент не может быть преобразован в тип UUID. [UUID](../data-types/uuid.md). **Возвращаемое значение** @@ -347,7 +345,7 @@ toUUIDOrDefault(string, default) **Примеры использования** -В этом первом примере возвращается первый аргумент, преобразованный к типу UUID, поскольку его можно преобразовать: +В этом первом примере возвращается первый аргумент, преобразованный к типу UUID, так как его можно привести к этому типу: ```sql SELECT toUUIDOrDefault('61f0c404-5cb3-11e7-907b-a6006ad3dba0', cast('59f0c404-5cb3-11e7-907b-a6006ad3dba0' AS UUID)); @@ -361,7 +359,7 @@ SELECT toUUIDOrDefault('61f0c404-5cb3-11e7-907b-a6006ad3dba0', cast('59f0c404-5c └───────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ ``` -Во втором примере возвращается второй аргумент (указанный UUID по умолчанию), так как первый аргумент не может быть преобразован в тип UUID: +Этот второй пример возвращает второй аргумент (указанный UUID по умолчанию), поскольку первый аргумент нельзя привести к типу UUID: ```sql SELECT toUUIDOrDefault('-----61f0c404-5cb3-11e7-907b-a6006ad3dba0', cast('59f0c404-5cb3-11e7-907b-a6006ad3dba0' AS UUID)); @@ -405,7 +403,7 @@ SELECT toUUIDOrNull('61f0c404-5cb3-11e7-907b-a6006ad3dba0T') AS uuid ## toUUIDOrZero -Принимает аргумент типа String и пытается преобразовать его в UUID. Если преобразование не удалось, возвращает нулевой UUID. +Принимает аргумент типа String и пытается преобразовать его в UUID. Если преобразование не удаётся, возвращает нулевой UUID. ```sql toUUIDOrZero(string) @@ -432,7 +430,7 @@ SELECT toUUIDOrZero('61f0c404-5cb3-11e7-907b-a6006ad3dba0T') AS uuid ## UUIDStringToNum -Принимает строку типа `string`, содержащую 36 символов в формате `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`, и возвращает [FixedString(16)](../data-types/fixedstring.md) в виде двоичного представления, формат которого может быть дополнительно указан параметром `variant` (по умолчанию `Big-endian`). +Принимает строку типа `string`, содержащую 36 символов в формате `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`, и возвращает [FixedString(16)](../data-types/fixedstring.md) в виде её двоичного представления, формат которого может быть дополнительно задан параметром `variant` (по умолчанию `Big-endian`). **Синтаксис** @@ -442,8 +440,8 @@ UUIDStringToNum(string[, variant = 1]) **Аргументы** -* `string` — [String](/sql-reference/data-types/string) длиной 36 символов или [FixedString](/sql-reference/data-types/string) -* `variant` — целое число, задающее вариант, определённый в [RFC4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.1). 1 = `Big-endian` (по умолчанию), 2 = `Microsoft`. +* `string` — [String](/sql-reference/data-types/string) из 36 символов или [FixedString](/sql-reference/data-types/string) +* `variant` — целое число, задающее вариант в соответствии с [RFC4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.1). 1 = `Big-endian` (по умолчанию), 2 = `Microsoft`. **Возвращаемое значение** @@ -482,7 +480,7 @@ SELECT ## UUIDNumToString -Принимает значение типа `binary`, содержащее двоичное представление UUID, с форматом, при необходимости задаваемым параметром `variant` (по умолчанию `Big-endian`), и возвращает строку длиной 36 символов в текстовом формате. +Принимает значение типа `binary`, содержащее двоичное представление UUID (его формат можно дополнительно указать параметром `variant`, по умолчанию используется `Big-endian`), и возвращает строку из 36 символов в текстовом формате. **Синтаксис** @@ -492,8 +490,8 @@ UUIDNumToString(binary[, variant = 1]) **Аргументы** -* `binary` — [FixedString(16)](../data-types/fixedstring.md) в двоичном представлении UUID. -* `variant` — целое число, обозначающее вариант, как указано в [RFC4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.1). 1 = `Big-endian` (по умолчанию), 2 = `Microsoft`. +* `binary` — [FixedString(16)](../data-types/fixedstring.md) как двоичное представление UUID. +* `variant` — целое число, представляющее вариант, как указано в [RFC4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.1). 1 = `Big-endian` (по умолчанию), 2 = `Microsoft`. **Возвращаемое значение** @@ -532,7 +530,7 @@ SELECT ## UUIDToNum -Принимает [UUID](../data-types/uuid.md) и возвращает его двоичное представление в виде значения типа [FixedString(16)](../data-types/fixedstring.md); формат можно задать параметром `variant` (по умолчанию `Big-endian`). Эта функция заменяет конструкцию `UUIDStringToNum(toString(uuid))`, поэтому для извлечения байтов из UUID не требуется промежуточное преобразование UUID в строку. +Принимает [UUID](../data-types/uuid.md) и возвращает его двоичное представление в виде [FixedString(16)](../data-types/fixedstring.md); формат двоичного представления может быть дополнительно указан параметром `variant` (по умолчанию `Big-endian`). Эта функция заменяет вызовы двух отдельных функций вида `UUIDStringToNum(toString(uuid))`, поэтому для извлечения байтов из UUID не требуется промежуточное преобразование UUID в строку. **Синтаксис** @@ -543,7 +541,7 @@ UUIDToNum(uuid[, variant = 1]) **Аргументы** * `uuid` — [UUID](../data-types/uuid.md). -* `variant` — целое число, определяющее вариант в соответствии с [RFC4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.1). 1 = `Big-endian` (по умолчанию), 2 = `Microsoft`. +* `variant` — целое число, представляющее вариант, как указано в [RFC4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.1). 1 = `Big-endian` (по умолчанию), 2 = `Microsoft`. **Возвращаемое значение** @@ -582,7 +580,7 @@ SELECT ## UUIDv7ToDateTime -Возвращает компонент временной метки UUID версии 7. +Возвращает компонент отметки времени из UUID версии 7. **Синтаксис** @@ -597,7 +595,7 @@ UUIDv7ToDateTime(uuid[, timezone]) **Возвращаемое значение** -* Метка времени с точностью до миллисекунд. Если UUID не является корректным UUID версии 7, возвращается 1970-01-01 00:00:00.000. [DateTime64(3)](../data-types/datetime64.md). +* Временная метка с точностью до миллисекунд. Если UUID не является корректным UUID версии 7, возвращается 1970-01-01 00:00:00.000. [DateTime64(3)](../data-types/datetime64.md). **Примеры использования** @@ -644,9 +642,9 @@ serverUUID() ## generateSnowflakeID Генерирует [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID). -Эта функция гарантирует, что поле счётчика внутри метки времени монотонно возрастает во всех вызовах функции в параллельно выполняющихся потоках и запросах. +Эта функция гарантирует, что поле счётчика внутри метки времени монотонно увеличивается при всех вызовах функции в одновременно выполняющихся потоках и запросах. -См. раздел ["Snowflake ID generation"](#snowflake-id-generation) для деталей реализации. +См. раздел ["Генерация Snowflake ID"](#snowflake-id-generation) для подробных сведений о реализации. **Синтаксис** @@ -656,7 +654,7 @@ generateSnowflakeID([expr, [machine_id]]) **Аргументы** -* `expr` — Произвольное [выражение](/sql-reference/syntax#expressions), используемое для предотвращения [устранения общих подвыражений](/sql-reference/functions/overview#common-subexpression-elimination), если функция вызывается несколько раз в запросе. Значение выражения не влияет на возвращаемый Snowflake ID. Необязательный параметр. +* `expr` — Произвольное [выражение](/sql-reference/syntax#expressions), используемое для обхода механизма [устранения общих подвыражений](/sql-reference/functions/overview#common-subexpression-elimination), если функция вызывается несколько раз в одном запросе. Значение выражения не влияет на возвращаемый Snowflake ID. Необязательный параметр. * `machine_id` — Идентификатор машины, используются младшие 10 бит. [Int64](../data-types/int-uint.md). Необязательный параметр. **Возвращаемое значение** @@ -683,7 +681,7 @@ SELECT * FROM tab; └─────────────────────┘ ``` -**Пример с несколькими идентификаторами Snowflake, генерируемыми для каждой строки** +**Пример с несколькими Snowflake ID, создаваемыми для каждой строки** ```sql SELECT generateSnowflakeID(1), generateSnowflakeID(2); @@ -693,7 +691,7 @@ SELECT generateSnowflakeID(1), generateSnowflakeID(2); └────────────────────────┴────────────────────────┘ ``` -**Пример с выражением и идентификатором машины** +**Пример с выражением и идентификатором хоста** ```sql SELECT generateSnowflakeID('expr', 1); @@ -709,13 +707,13 @@ SELECT generateSnowflakeID('expr', 1); :::warning -Эта функция устарела и может использоваться только при включенной настройке [allow_deprecated_snowflake_conversion_functions](../../operations/settings/settings.md#allow_deprecated_snowflake_conversion_functions). -Функция будет удалена в какой-то момент в будущем. +Эта функция устарела и может использоваться только в том случае, если включена настройка [allow_deprecated_snowflake_conversion_functions](../../operations/settings/settings.md#allow_deprecated_snowflake_conversion_functions). +Функция будет удалена в будущем. -Пожалуйста, используйте вместо нее функцию [snowflakeIDToDateTime](#snowflakeidtodatetime). +Вместо неё используйте функцию [snowflakeIDToDateTime](#snowflakeidtodatetime). ::: -Извлекает временную метку из [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) в формате [DateTime](../data-types/datetime.md). +Извлекает компонент временной метки из [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) в формате [DateTime](../data-types/datetime.md). **Синтаксис** @@ -726,11 +724,11 @@ snowflakeToDateTime(value[, time_zone]) **Аргументы** * `value` — идентификатор Snowflake. [Int64](../data-types/int-uint.md). -* `time_zone` — [Timezone](/operations/server-configuration-parameters/settings.md#timezone). Функция интерпретирует `time_string` в указанном часовом поясе. Необязательный аргумент. [String](../data-types/string.md). +* `time_zone` — [часовой пояс](/operations/server-configuration-parameters/settings.md#timezone). Функция разбирает `time_string` в соответствии с часовым поясом. Необязательный параметр. [String](../data-types/string.md). **Возвращаемое значение** -* Компонента метки времени из `value` в виде значения типа [DateTime](../data-types/datetime.md). +* Компонент метки времени значения `value` в виде значения [DateTime](../data-types/datetime.md). **Пример** @@ -761,7 +759,7 @@ SELECT snowflakeToDateTime(CAST('1426860702823350272', 'Int64'), 'UTC'); Используйте вместо неё функцию [snowflakeIDToDateTime64](#snowflakeidtodatetime64). ::: -Извлекает компонент временной метки из [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) в формате [DateTime64](../data-types/datetime64.md). +Извлекает компонент метки времени из [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) в формате [DateTime64](../data-types/datetime64.md). **Синтаксис** @@ -776,7 +774,7 @@ snowflakeToDateTime64(value[, time_zone]) **Возвращаемое значение** -* Компонент временной метки из `value` в виде [DateTime64](../data-types/datetime64.md) с масштабом 3, то есть с точностью до миллисекунд. +* Компонента временной метки `value` в формате [DateTime64](../data-types/datetime64.md) с масштабом = 3, то есть с точностью до миллисекунды. **Пример** @@ -801,13 +799,13 @@ SELECT snowflakeToDateTime64(CAST('1426860802823350272', 'Int64'), 'UTC'); :::warning -Эта функция устарела и может использоваться только при включённой настройке [allow_deprecated_snowflake_conversion_functions](../../operations/settings/settings.md#allow_deprecated_snowflake_conversion_functions). -Функция будет удалена в будущем. +Эта функция устарела и может использоваться только в том случае, если включён параметр [allow_deprecated_snowflake_conversion_functions](../../operations/settings/settings.md#allow_deprecated_snowflake_conversion_functions). +Функция будет удалена в какой‑то момент в будущем. -Используйте вместо неё функцию [dateTimeToSnowflakeID](#datetimetosnowflakeid). +Пожалуйста, используйте вместо неё функцию [dateTimeToSnowflakeID](#datetimetosnowflakeid). ::: -Преобразует значение [DateTime](../data-types/datetime.md) в первый [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) в указанный момент времени. +Преобразует значение [DateTime](../data-types/datetime.md) в первый [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) в заданный момент времени. **Синтаксис** @@ -817,11 +815,11 @@ dateTimeToSnowflake(value) **Аргументы** -* `value` — дата со временем. [DateTime](../data-types/datetime.md). +* `value` — дата и время. [DateTime](../data-types/datetime.md). **Возвращаемое значение** -* Входное значение, приведённое к типу данных [Int64](../data-types/int-uint.md) как первый Snowflake ID для этого момента времени. +* Входное значение, преобразованное в тип данных [Int64](../data-types/int-uint.md) как первый идентификатор Snowflake в этот момент времени. **Пример** @@ -845,13 +843,13 @@ WITH toDateTime('2021-08-15 18:57:56', 'Asia/Shanghai') AS dt SELECT dateTimeToS :::warning -Эта функция устаревшая и может использоваться только если включена настройка [allow_deprecated_snowflake_conversion_functions](../../operations/settings/settings.md#allow_deprecated_snowflake_conversion_functions). +Эта функция устарела и может использоваться только если включена настройка [allow_deprecated_snowflake_conversion_functions](../../operations/settings/settings.md#allow_deprecated_snowflake_conversion_functions). Функция будет удалена в будущем. Используйте вместо неё функцию [dateTime64ToSnowflakeID](#datetime64tosnowflakeid). ::: -Преобразует [DateTime64](../data-types/datetime64.md) в первый [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) в заданный момент времени. +Преобразует [DateTime64](../data-types/datetime64.md) в первый [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) в указанный момент времени. **Синтаксис** @@ -865,7 +863,7 @@ dateTime64ToSnowflake(value) **Возвращаемое значение** -* Входное значение, преобразованное к типу данных [Int64](../data-types/int-uint.md) в виде первого Snowflake ID для этого момента времени. +* Входное значение, преобразованное к типу данных [Int64](../data-types/int-uint.md) как первый идентификатор Snowflake для этого момента времени. **Пример** @@ -886,7 +884,7 @@ WITH toDateTime64('2021-08-15 18:57:56.492', 3, 'Asia/Shanghai') AS dt64 SELECT ## snowflakeIDToDateTime -Возвращает компонент метки времени идентификатора [Snowflake](https://en.wikipedia.org/wiki/Snowflake_ID) в виде значения типа [DateTime](../data-types/datetime.md). +Возвращает компонент отметки времени [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) в виде значения типа [DateTime](../data-types/datetime.md). **Синтаксис** @@ -897,7 +895,7 @@ snowflakeIDToDateTime(value[, epoch[, time_zone]]) **Аргументы** * `value` — Snowflake ID. [UInt64](../data-types/int-uint.md). -* `epoch` — эпоха Snowflake ID в миллисекундах, отсчитываемых с 1970-01-01. По умолчанию — 0 (1970-01-01). Для эпохи Twitter/X (2015-01-01) укажите 1288834974657. Необязательный параметр. [UInt*](../data-types/int-uint.md). +* `epoch` — эпоха Snowflake ID в миллисекундах, отсчитанных с 1970-01-01. По умолчанию — 0 (1970-01-01). Для эпохи Twitter/X (2015-01-01) укажите 1288834974657. Необязательный параметр. [UInt*](../data-types/int-uint.md). * `time_zone` — [Timezone](/operations/server-configuration-parameters/settings.md#timezone). Функция интерпретирует `time_string` в соответствии с часовым поясом. Необязательный параметр. [String](../data-types/string.md). **Возвращаемое значение** @@ -933,13 +931,13 @@ snowflakeIDToDateTime64(value[, epoch[, time_zone]]) **Аргументы** -* `value` — Snowflake ID. [UInt64](../data-types/int-uint.md). -* `epoch` — эпоха Snowflake ID в миллисекундах, отсчитываемых с 1970-01-01. По умолчанию — 0 (1970-01-01). Для эпохи Twitter/X (2015-01-01) укажите 1288834974657. Необязательный параметр. [UInt*](../data-types/int-uint.md). -* `time_zone` — [Timezone](/operations/server-configuration-parameters/settings.md#timezone). Функция разбирает `time_string` в соответствии с часовым поясом. Необязательный параметр. [String](../data-types/string.md). +* `value` — идентификатор Snowflake. [UInt64](../data-types/int-uint.md). +* `epoch` — эпоха идентификаторов Snowflake в миллисекундах, прошедших с 1970-01-01. По умолчанию — 0 (1970-01-01). Для эпохи Twitter/X (2015-01-01) укажите 1288834974657. Необязательный параметр. [UInt*](../data-types/int-uint.md). +* `time_zone` — [Timezone](/operations/server-configuration-parameters/settings.md#timezone). Функция разбирает `time_string` в соответствии с указанным часовым поясом. Необязательный параметр. [String](../data-types/string.md). **Возвращаемое значение** -* Компонент метки времени из `value` как [DateTime64](../data-types/datetime64.md) с масштабом 3, то есть с миллисекундной точностью. +* Компонент метки времени из `value` в виде [DateTime64](../data-types/datetime64.md) с scale = 3, то есть с точностью до миллисекунд. **Пример** @@ -971,11 +969,11 @@ dateTimeToSnowflakeID(value[, epoch]) **Аргументы** * `value` — дата и время. [DateTime](../data-types/datetime.md). -* `epoch` — эпоха идентификаторов Snowflake в миллисекундах, отсчитываемых с 1970-01-01. По умолчанию 0 (1970-01-01). Для эпохи Twitter/X (2015-01-01) укажите 1288834974657. Необязательный параметр. [UInt*](../data-types/int-uint.md). +* `epoch` — эпоха для Snowflake ID в миллисекундах, прошедших с 1970-01-01. По умолчанию 0 (1970-01-01). Для эпохи Twitter/X (2015-01-01) используйте 1288834974657. Необязательный параметр. [UInt*](../data-types/int-uint.md). **Возвращаемое значение** -* Входное значение, преобразованное в [UInt64](../data-types/int-uint.md) — первый Snowflake ID для данного момента времени. +* Входное значение, преобразованное в [UInt64](../data-types/int-uint.md) как первый Snowflake ID для этого момента времени. **Пример** @@ -996,7 +994,7 @@ SELECT toDateTime('2021-08-15 18:57:56', 'Asia/Shanghai') AS dt, dateTimeToSnowf ## dateTime64ToSnowflakeID -Преобразует [DateTime64](../data-types/datetime64.md) в первый [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) для заданного момента времени. +Преобразует [DateTime64](../data-types/datetime64.md) в первый [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) в заданный момент времени. **Синтаксис** @@ -1006,12 +1004,12 @@ dateTime64ToSnowflakeID(value[, epoch]) **Аргументы** -* `value` — дата со временем. [DateTime64](../data-types/datetime64.md). -* `epoch` — эпоха Snowflake ID в миллисекундах, прошедших с 1970-01-01. По умолчанию — 0 (1970-01-01). Для эпохи Twitter/X (2015-01-01) укажите 1288834974657. Необязательный параметр. [UInt*](../data-types/int-uint.md). +* `value` — дата и время. [DateTime64](../data-types/datetime64.md). +* `epoch` — эпоха Snowflake ID в миллисекундах, отсчитываемая от 1970-01-01. По умолчанию — 0 (1970-01-01). Для эпохи Twitter/X (2015-01-01) укажите 1288834974657. Необязательный параметр. [UInt*](../data-types/int-uint.md). **Возвращаемое значение** -* Входное значение, преобразованное в [UInt64](../data-types/int-uint.md) в виде первого Snowflake ID в этот момент времени. +* Входное значение, преобразованное в [UInt64](../data-types/int-uint.md) как значение первого Snowflake ID для этого момента времени. **Пример** @@ -1035,920 +1033,11 @@ SELECT toDateTime('2021-08-15 18:57:56.493', 3, 'Asia/Shanghai') AS dt, dateTime * [dictGetUUID](/sql-reference/functions/ext-dict-functions#other-functions) {/* - Содержимое следующих тегов заменяется при сборке фреймворка документации - документацией, сгенерированной из system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. + Содержимое тегов ниже во время сборки фреймворка документации + заменяется документацией, сгенерированной на основе system.functions. Пожалуйста, не изменяйте и не удаляйте эти теги. См.: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## UUIDNumToString - -Добавлена в: v1.1 - -Принимает двоичное представление UUID, формат которого можно задать параметром `variant` (по умолчанию — `Big-endian`), и возвращает строку из 36 символов в текстовом формате. - -**Синтаксис** - -```sql -UUIDNumToString(binary[, variant]) -``` - -**Аргументы** - -* `binary` — Двоичное представление UUID. [`FixedString(16)`](/sql-reference/data-types/fixedstring) -* `variant` — Вариант, определённый в [RFC4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.1). 1 = `Big-endian` (по умолчанию), 2 = `Microsoft`. [`(U)Int*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает UUID в виде строки. [`String`](/sql-reference/data-types/string) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT - 'a/<@];!~p{jTj={)' AS bytes, - UUIDNumToString(toFixedString(bytes, 16)) AS uuid -``` - -```response title=Response -┌─bytes────────────┬─uuid─────────────────────────────────┐ -│ a/<@];!~p{jTj={) │ 612f3c40-5d3b-217e-707b-6a546a3d7b29 │ -└──────────────────┴──────────────────────────────────────┘ -``` - -**Вариант для Microsoft** - -```sql title=Query -SELECT - '@ - -:::warning -Эта функция устарела и может использоваться только в том случае, если включена настройка [`allow_deprecated_snowflake_conversion_functions`](../../operations/settings/settings.md#allow_deprecated_snowflake_conversion_functions). -Функция будет удалена в одной из будущих версий. - -Используйте функцию [dateTime64ToSnowflakeID](#dateTime64ToSnowflakeID) вместо неё. -::: - -Преобразует [DateTime64](../data-types/datetime64.md) в первый [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) в заданный момент времени. - -**Синтаксис** - -```sql -dateTime64ToSnowflake(value) -``` - -**Аргументы** - -* `value` — дата и время. [`DateTime64`](/sql-reference/data-types/datetime64) - -**Возвращаемое значение** - -Возвращает переданное значение, преобразованное в первый Snowflake ID для этого момента времени. [`Int64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -WITH toDateTime64('2021-08-15 18:57:56.492', 3, 'Asia/Shanghai') AS dt64 SELECT dateTime64ToSnowflake(dt64); -``` - -```response title=Response -┌─dateTime64ToSnowflake(dt64)─┐ -│ 1426860704886947840 │ -└─────────────────────────────┘ -``` - - -## dateTime64ToSnowflakeID - -Введено в версии: v24.6 - -Преобразует [`DateTime64`](../data-types/datetime64.md) в первый [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) для заданного времени. - -Подробности реализации см. в разделе ["Генерация Snowflake ID"](#snowflake-id-generation). - -**Синтаксис** - -```sql -dateTime64ToSnowflakeID(value[, epoch]) -``` - -**Аргументы** - -* `value` — дата и время. [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) -* `epoch` — эпоха для Snowflake ID в миллисекундах с 1970-01-01. По умолчанию — 0 (1970-01-01). Для эпохи Twitter/X (2015-01-01) укажите 1288834974657. [`UInt*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает первый Snowflake ID, соответствующий этому моменту времени. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT toDateTime64('2025-08-15 18:57:56.493', 3, 'Asia/Shanghai') AS dt, dateTime64ToSnowflakeID(dt) AS res; -``` - -```response title=Response -┌──────────────────────dt─┬─────────────────res─┐ -│ 2025-08-15 18:57:56.493 │ 7362075066076495872 │ -└─────────────────────────┴─────────────────────┘ -``` - - -## dateTimeToSnowflake - -Появилась в версии: v21.10 - - - -:::warning -Эта функция устарела и может использоваться только в том случае, если включена настройка [`allow_deprecated_snowflake_conversion_functions`](../../operations/settings/settings.md#allow_deprecated_snowflake_conversion_functions). -Функция будет удалена в одной из будущих версий. - -Используйте вместо неё функцию [dateTimeToSnowflakeID](#dateTimeToSnowflakeID). -::: - -Преобразует значение [DateTime](../data-types/datetime.md) в первый [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) для указанного момента времени. - -**Синтаксис** - -```sql -dateTimeToSnowflake(value) -``` - -**Аргументы** - -* `value` — дата и время. [`DateTime`](/sql-reference/data-types/datetime) - -**Возвращаемое значение** - -Возвращает переданное значение в виде первого идентификатора Snowflake в этот момент времени. [`Int64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -WITH toDateTime('2021-08-15 18:57:56', 'Asia/Shanghai') AS dt SELECT dateTimeToSnowflake(dt); -``` - -```response title=Response -┌─dateTimeToSnowflake(dt)─┐ -│ 1426860702823350272 │ -└─────────────────────────┘ -``` - - -## dateTimeToSnowflakeID - -Добавлено в версии v24.6 - -Преобразует значение [DateTime](../data-types/datetime.md) в первый идентификатор [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) для заданного момента времени. - -**Синтаксис** - -```sql -dateTimeToSnowflakeID(value[, epoch]) -``` - -**Аргументы** - -* `value` — Дата и время. [`DateTime`](/sql-reference/data-types/datetime) или [`DateTime64`](/sql-reference/data-types/datetime64) -* `epoch` — Необязательный параметр. Эпоха Snowflake ID в миллисекундах, отсчитываемых с 1970-01-01. По умолчанию — 0 (1970-01-01). Для эпохи Twitter/X (2015-01-01) укажите 1288834974657. [`UInt*`](/sql-reference/data-types/int-uint) - -**Возвращаемое значение** - -Возвращает входное значение в виде первого возможного Snowflake ID для этого момента времени. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT toDateTime('2021-08-15 18:57:56', 'Asia/Shanghai') AS dt, dateTimeToSnowflakeID(dt) AS res; -``` - -```response title=Response -┌──────────────────dt─┬─────────────────res─┐ -│ 2021-08-15 18:57:56 │ 6832626392367104000 │ -└─────────────────────┴─────────────────────┘ -``` - - -## dateTimeToUUIDv7 - -Добавлено в: v25.9 - -Преобразует значение [DateTime](../data-types/datetime.md) в [UUIDv7](https://en.wikipedia.org/wiki/UUID#Version_7) для заданного момента времени. - -См. раздел ["Генерация UUIDv7"](#uuidv7-generation) для подробной информации о структуре UUID, управлении счётчиком и гарантиях при параллельной работе. - -:::note -По состоянию на сентябрь 2025 года UUID версии 7 находятся в статусе черновика, и их формат может измениться в будущем. -::: - -**Синтаксис** - -```sql -dateTimeToUUIDv7(value) -``` - -**Аргументы** - -* `value` — Дата и время. [`DateTime`](/sql-reference/data-types/datetime) - -**Возвращаемое значение** - -Возвращает UUIDv7. [`UUID`](/sql-reference/data-types/uuid) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT dateTimeToUUIDv7(toDateTime('2021-08-15 18:57:56', 'Asia/Shanghai')); -``` - -```response title=Response -┌─dateTimeToUUIDv7(toDateTime('2021-08-15 18:57:56', 'Asia/Shanghai'))─┐ -│ 018f05af-f4a8-778f-beee-1bedbc95c93b │ -└─────────────────────────────────────────────────────────────────────────┘ -``` - -**несколько UUID для одной и той же метки времени** - -```sql title=Query -SELECT dateTimeToUUIDv7(toDateTime('2021-08-15 18:57:56')); -SELECT dateTimeToUUIDv7(toDateTime('2021-08-15 18:57:56')); -``` - -```response title=Response -┌─dateTimeToUUIDv7(t⋯08-15 18:57:56'))─┐ -│ 017b4b2d-7720-76ed-ae44-bbcc23a8c550 │ -└──────────────────────────────────────┘ -┌─dateTimeToUUIDv7(t⋯08-15 18:57:56'))─┐ -│ 017b4b2d-7720-76ed-ae44-bbcf71ed0fd3 │ -└──────────────────────────────────────┘ -``` - - -## generateSnowflakeID - -Добавлена в версии: v24.6 - -Генерирует [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID). - -Функция `generateSnowflakeID` гарантирует, что счётчик внутри метки времени монотонно увеличивается при всех вызовах функции в параллельно выполняющихся потоках и запросах. - -См. раздел «[Генерация Snowflake ID](#snowflake-id-generation)» для подробностей реализации. - -**Синтаксис** - -```sql -generateSnowflakeID([expr, [machine_id]]) -``` - -**Аргументы** - -* `expr` — Произвольное [выражение](/sql-reference/syntax#expressions), используемое для обхода [устранения общих подвыражений](/sql-reference/functions/overview#common-subexpression-elimination), если функция вызывается несколько раз в запросе. Значение выражения не влияет на возвращаемый идентификатор Snowflake. Необязательный. -* `machine_id` — Идентификатор машины, используются младшие 10 бит. [Int64](../data-types/int-uint.md). Необязательный. - -**Возвращаемое значение** - -Возвращает идентификатор Snowflake. [`UInt64`](/sql-reference/data-types/int-uint) - -**Примеры** - -**Пример использования** - -```sql title=Query -CREATE TABLE tab (id UInt64) -ENGINE = MergeTree() -ORDER BY tuple(); - -INSERT INTO tab SELECT generateSnowflakeID(); - -SELECT * FROM tab; -``` - -```response title=Response -┌──────────────────id─┐ -│ 7199081390080409600 │ -└─────────────────────┘ -``` - -**Несколько идентификаторов Snowflake, сгенерированных для одной строки** - -```sql title=Query -SELECT generateSnowflakeID(1), generateSnowflakeID(2); -``` - -```response title=Response -┌─generateSnowflakeID(1)─┬─generateSnowflakeID(2)─┐ -│ 7199081609652224000 │ 7199081609652224001 │ -└────────────────────────┴────────────────────────┘ -``` - -**С выражением и идентификатором машины** - -```sql title=Query -SELECT generateSnowflakeID('expr', 1); -``` - -```response title=Response -┌─generateSnowflakeID('expr', 1)─┐ -│ 7201148511606784002 │ -└────────────────────────────────┘ -``` - - -## generateUUIDv4 - -Добавлена в версии: v1.1 - -Генерирует [UUID](../data-types/uuid.md) [версии 4](https://tools.ietf.org/html/rfc4122#section-4.4). - -**Синтаксис** - -```sql -generateUUIDv4([expr]) -``` - -**Аргументы** - -* `expr` — Необязательный параметр. Произвольное выражение, используемое для обхода оптимизации [устранения общих подвыражений](/sql-reference/functions/overview#common-subexpression-elimination), если функция вызывается несколько раз в запросе. Значение выражения не влияет на возвращаемый UUID. - -**Возвращаемое значение** - -Возвращает UUIDv4. [`UUID`](/sql-reference/data-types/uuid) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT generateUUIDv4(number) FROM numbers(3); -``` - -```response title=Response -┌─generateUUIDv4(number)───────────────┐ -│ fcf19b77-a610-42c5-b3f5-a13c122f65b6 │ -│ 07700d36-cb6b-4189-af1d-0972f23dc3bc │ -│ 68838947-1583-48b0-b9b7-cf8268dd343d │ -└──────────────────────────────────────┘ -``` - -**Устранение общих подвыражений** - -```sql title=Query -SELECT generateUUIDv4(1), generateUUIDv4(1); -``` - -```response title=Response -┌─generateUUIDv4(1)────────────────────┬─generateUUIDv4(2)────────────────────┐ -│ 2d49dc6e-ddce-4cd0-afb8-790956df54c1 │ 2d49dc6e-ddce-4cd0-afb8-790956df54c1 │ -└──────────────────────────────────────┴──────────────────────────────────────┘ -``` - - -## generateUUIDv7 - -Добавлена в версии v24.5 - -Генерирует [UUID](../data-types/uuid.md) [версии 7](https://datatracker.ietf.org/doc/html/draft-peabody-dispatch-new-uuid-format-04). - -См. раздел ["Генерация UUIDv7"](#uuidv7-generation) для получения подробной информации о структуре UUID, управлении счётчиком и гарантиях при параллельном доступе. - -:::note -По состоянию на сентябрь 2025 года UUID версии 7 находятся в статусе черновика, и их формат может измениться в будущем. -::: - -**Синтаксис** - -```sql -generateUUIDv7([expr]) -``` - -**Аргументы** - -* `expr` — необязательное произвольное выражение, используемое для обхода [устранения общих подвыражений](/sql-reference/functions/overview#common-subexpression-elimination), если функция вызывается несколько раз в запросе. Значение выражения не влияет на возвращаемый UUID. [`Any`](/sql-reference/data-types) - -**Возвращаемое значение** - -Возвращает UUIDv7. [`UUID`](/sql-reference/data-types/uuid) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT generateUUIDv7(number) FROM numbers(3); -``` - -```response title=Response -┌─generateUUIDv7(number)───────────────┐ -│ 019947fb-5766-7ed0-b021-d906f8f7cebb │ -│ 019947fb-5766-7ed0-b021-d9072d0d1e07 │ -│ 019947fb-5766-7ed0-b021-d908dca2cf63 │ -└──────────────────────────────────────┘ -``` - -**Устранение общих подвыражений** - -```sql title=Query -SELECT generateUUIDv7(1), generateUUIDv7(1); -``` - -```response title=Response -┌─generateUUIDv7(1)────────────────────┬─generateUUIDv7(1)────────────────────┐ -│ 019947ff-0f87-7d88-ace0-8b5b3a66e0c1 │ 019947ff-0f87-7d88-ace0-8b5b3a66e0c1 │ -└──────────────────────────────────────┴──────────────────────────────────────┘ -``` - - -## readWKTLineString - -Добавлена в: v - -Разбирает представление геометрии типа LineString в формате Well-Known Text (WKT) и возвращает результат во внутреннем формате ClickHouse. - -**Синтаксис** - -```sql -readWKTLineString(wkt_string) -``` - -**Аргументы** - -* `wkt_string` — входная строка WKT, представляющая геометрию типа LineString. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Функция возвращает внутреннее представление геометрии LineString в ClickHouse. - -**Примеры** - -**первый вызов** - -```sql title=Query -SELECT readWKTLineString('LINESTRING (1 1, 2 2, 3 3, 1 1)'); -``` - -```response title=Response -┌─readWKTLineString('LINESTRING (1 1, 2 2, 3 3, 1 1)')─┐ -│ [(1,1),(2,2),(3,3),(1,1)] │ -└──────────────────────────────────────────────────────┘ -``` - -**второй вызов** - -```sql title=Query -SELECT toTypeName(readWKTLineString('LINESTRING (1 1, 2 2, 3 3, 1 1)')); -``` - -```response title=Response -┌─toTypeName(readWKTLineString('LINESTRING (1 1, 2 2, 3 3, 1 1)'))─┐ -│ LineString │ -└──────────────────────────────────────────────────────────────────┘ -``` - - -## snowflakeIDToDateTime - -Введена в: v24.6 - -Возвращает компонент временной метки [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) в виде значения типа [DateTime](../data-types/datetime.md). - -**Синтаксис** - -```sql -snowflakeIDToDateTime(value[, epoch[, time_zone]]) -``` - -**Аргументы** - -* `value` — Snowflake ID. [`UInt64`](/sql-reference/data-types/int-uint) -* `epoch` — Необязательный параметр. Эпоха Snowflake ID в миллисекундах, отсчитываемых с 1970-01-01. По умолчанию — 0 (1970-01-01). Для эпохи Twitter/X (2015-01-01) укажите 1288834974657. [`UInt*`](/sql-reference/data-types/int-uint) -* `time_zone` — Необязательный параметр. [Часовой пояс](/operations/server-configuration-parameters/settings.md#timezone). Функция интерпретирует `time_string` в соответствии с часовым поясом. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает временную компоненту значения `value`. [`DateTime`](/sql-reference/data-types/datetime) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT snowflakeIDToDateTime(7204436857747984384) AS res -``` - -```response title=Response -┌─────────────────res─┐ -│ 2024-06-06 10:59:58 │ -└─────────────────────┘ -``` - - -## snowflakeIDToDateTime64 - -Добавлена в версии: v24.6 - -Возвращает компонент метки времени [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) в виде значения типа [DateTime64](../data-types/datetime64.md). - -**Синтаксис** - -```sql -snowflakeIDToDateTime64(value[, epoch[, time_zone]]) -``` - -**Аргументы** - -* `value` — идентификатор Snowflake. [`UInt64`](/sql-reference/data-types/int-uint) -* `epoch` — необязательный параметр. Эпоха идентификатора Snowflake в миллисекундах, отсчитываемых с 1970-01-01. По умолчанию — 0 (1970-01-01). Для эпохи Twitter/X (2015-01-01) укажите 1288834974657. [`UInt*`](/sql-reference/data-types/int-uint) -* `time_zone` — необязательный параметр. [Часовой пояс](/operations/server-configuration-parameters/settings.md#timezone). Функция интерпретирует `time_string` в соответствии с указанным часовым поясом. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает компонент метки времени из `value` в виде `DateTime64` с масштабом = 3, то есть с миллисекундной точностью. [`DateTime64`](/sql-reference/data-types/datetime64) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT snowflakeIDToDateTime64(7204436857747984384) AS res -``` - -```response title=Response -┌─────────────────res─┐ -│ 2024-06-06 10:59:58 │ -└─────────────────────┘ -``` - - -## snowflakeToDateTime - -Введена в: v21.10 - - - -:::warning -Эта функция устарела и может использоваться только в том случае, если включена настройка [`allow_deprecated_snowflake_conversion_functions`](../../operations/settings/settings.md#allow_deprecated_snowflake_conversion_functions). -Функция будет удалена в одной из будущих версий. - -Используйте вместо неё функцию [`snowflakeIDToDateTime`](#snowflakeIDToDateTime). -::: - -Извлекает компонент временной метки из [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) в формате [DateTime](../data-types/datetime.md). - -**Синтаксис** - -```sql -snowflakeToDateTime(value[, time_zone]) -``` - -**Аргументы** - -* `value` — Snowflake ID. [`Int64`](/sql-reference/data-types/int-uint) -* `time_zone` — необязательный параметр. [Часовой пояс](/operations/server-configuration-parameters/settings.md#timezone). Функция интерпретирует `time_string` в соответствии с часовым поясом. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает компонент метки времени значения `value`. [`DateTime`](/sql-reference/data-types/datetime) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT snowflakeToDateTime(CAST('1426860702823350272', 'Int64'), 'UTC'); -``` - -```response title=Response -┌─snowflakeToDateTime(CAST('1426860702823350272', 'Int64'), 'UTC')─┐ -│ 2021-08-15 10:57:56 │ -└──────────────────────────────────────────────────────────────────┘ -``` - - -## snowflakeToDateTime64 - -Впервые появилась в версии v21.10 - - - -:::warning -Эта функция устарела и может использоваться только в случае, если включена настройка [`allow_deprecated_snowflake_conversion_functions`](../../operations/settings/settings.md#allow_deprecated_snowflake_conversion_functions). -Функция будет удалена в одной из будущих версий. - -Используйте вместо неё функцию [`snowflakeIDToDateTime64`](#snowflakeIDToDateTime64). -::: - -Извлекает компонент метки времени из [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) в формате [DateTime64](../data-types/datetime64.md). - -**Синтаксис** - -```sql -snowflakeToDateTime64(value[, time_zone]) -``` - -**Аргументы** - -* `value` — Snowflake ID. [`Int64`](/sql-reference/data-types/int-uint) -* `time_zone` — необязательный аргумент. [Timezone](/operations/server-configuration-parameters/settings.md#timezone). Функция разбирает `time_string` в соответствии с часовым поясом. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает компонент временной метки из `value`. [`DateTime64(3)`](/sql-reference/data-types/datetime64) - -**Примеры** - -**Пример использования** - -```sql title=Query -SELECT snowflakeToDateTime64(CAST('1426860802823350272', 'Int64'), 'UTC'); -``` - -```response title=Response -┌─snowflakeToDateTime64(CAST('1426860802823350272', 'Int64'), 'UTC')─┐ -│ 2021-08-15 10:58:19.841 │ -└────────────────────────────────────────────────────────────────────┘ -``` - - -## toUUIDOrDefault - -Появилась в версии: v21.1 - -Преобразует значение типа String в тип UUID. Если преобразование не удалось, возвращает значение UUID по умолчанию вместо генерации ошибки. - -Эта функция пытается разобрать строку длиной 36 символов в стандартном формате UUID (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx). -Если строку нельзя преобразовать в корректный UUID, функция возвращает переданное значение UUID по умолчанию. - -**Синтаксис** - -```sql -toUUIDOrDefault(string, default) -``` - -**Аргументы** - -* `string` — строка из 36 символов или FixedString(36), которая будет преобразована в UUID. -* `default` — значение UUID, которое будет возвращено, если первый аргумент нельзя преобразовать к типу UUID. - -**Возвращаемое значение** - -Возвращает преобразованный UUID при успешном выполнении или значение UUID по умолчанию, если преобразование не удалось. [`UUID`](/sql-reference/data-types/uuid) - -**Примеры** - -**При успешном преобразовании возвращается распарсенный UUID** - -```sql title=Query -SELECT toUUIDOrDefault('61f0c404-5cb3-11e7-907b-a6006ad3dba0', toUUID('59f0c404-5cb3-11e7-907b-a6006ad3dba0')); -``` - -```response title=Response -┌─toUUIDOrDefault('61f0c404-5cb3-11e7-907b-a6006ad3dba0', toUUID('59f0c404-5cb3-11e7-907b-a6006ad3dba0'))─┐ -│ 61f0c404-5cb3-11e7-907b-a6006ad3dba0 │ -└──────────────────────────────────────────────────────────────────────────────────────────────────────────┘ -``` - -**При неудачном преобразовании возвращается UUID по умолчанию** - -```sql title=Query -SELECT toUUIDOrDefault('-----61f0c404-5cb3-11e7-907b-a6006ad3dba0', toUUID('59f0c404-5cb3-11e7-907b-a6006ad3dba0')); -``` - -```response title=Response -┌─toUUIDOrDefault('-----61f0c404-5cb3-11e7-907b-a6006ad3dba0', toUUID('59f0c404-5cb3-11e7-907b-a6006ad3dba0'))─┐ -│ 59f0c404-5cb3-11e7-907b-a6006ad3dba0 │ -└───────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## toUUIDOrNull - -Появилась в версии: v20.12 - -Преобразует входное значение к типу `UUID`, но в случае ошибки возвращает `NULL`. -Аналог функции [`toUUID`](#touuid), но возвращает `NULL` вместо генерации исключения при ошибках преобразования. - -Поддерживаемые аргументы: - -* Строковые представления UUID в стандартном формате (8-4-4-4-12 шестнадцатеричных цифр). -* Строковые представления UUID без дефисов (32 шестнадцатеричные цифры). - -Неподдерживаемые аргументы (возвращается `NULL`): - -* Неверные строковые форматы. -* Типы, отличные от строковых. -* Некорректные UUID. - -**Синтаксис** - -```sql -toUUIDOrNull(x) -``` - -**Аргументы** - -* `x` — строковое представление UUID. [`String`](/sql-reference/data-types/string) - -**Возвращаемое значение** - -Возвращает значение UUID при успешном преобразовании, иначе `NULL`. [`UUID`](/sql-reference/data-types/uuid) или [`NULL`](/sql-reference/syntax#null) - -**Примеры** - -**Примеры использования** - -```sql title=Query -SELECT - toUUIDOrNull('550e8400-e29b-41d4-a716-446655440000') AS valid_uuid, - toUUIDOrNull('invalid-uuid') AS invalid_uuid -``` - -```response title=Response -┌─valid_uuid───────────────────────────┬─invalid_uuid─┐ -│ 550e8400-e29b-41d4-a716-446655440000 │ ᴺᵁᴸᴸ │ -└──────────────────────────────────────┴──────────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/operators/distributed-ddl.md b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/operators/distributed-ddl.md index 701d4271bd8..1889976dcbc 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/operators/distributed-ddl.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/operators/distributed-ddl.md @@ -6,6 +6,6 @@ title: 'Страница для Distributed DDL' doc_type: 'reference' --- -import Content from '@site/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/distributed-ddl.md'; +import Content from '@site/docs/sql-reference/distributed-ddl.md'; diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/operators/index.md b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/operators/index.md index d578967ab61..3913f79189f 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/operators/index.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/operators/index.md @@ -1,6 +1,5 @@ --- description: 'Документация по операторам' -displayed_sidebar: 'sqlreference' sidebar_label: 'Операторы' sidebar_position: 38 slug: /sql-reference/operators/ @@ -8,136 +7,127 @@ title: 'Операторы' doc_type: 'reference' --- - - # Операторы -ClickHouse преобразует операторы в соответствующие функции на этапе разбора запроса в соответствии с их приоритетом, порядком вычисления и ассоциативностью. - - - -## Операторы доступа {#access-operators} - -`a[N]` – Доступ к элементу массива. Функция `arrayElement(a, N)`. +ClickHouse преобразует операторы в соответствующие функции на этапе разбора запроса, исходя из их приоритета, порядка выполнения и ассоциативности. -`a.N` – Доступ к элементу кортежа. Функция `tupleElement(a, N)`. +## Операторы доступа \{#access-operators\} +`a[N]` – обращение к элементу массива. Функция `arrayElement(a, N)`. -## Оператор числового отрицания {#numeric-negation-operator} +`a.N` – обращение к элементу кортежа. Функция `tupleElement(a, N)`. -`-a` – функция `negate (a)`. +## Оператор числового отрицания \{#numeric-negation-operator\} -Для отрицания кортежей: [tupleNegate](../../sql-reference/functions/tuple-functions.md#tupleNegate). +`-a` – это функция `negate(a)`. +Для отрицания кортежей используйте [tupleNegate](../../sql-reference/functions/tuple-functions.md#tupleNegate). -## Операторы умножения и деления {#multiplication-and-division-operators} +## Операторы умножения и деления \{#multiplication-and-division-operators\} -`a * b` – функция `multiply (a, b)`. +`a * b` — функция `multiply(a, b)`. -Для умножения кортежа на число используйте: [tupleMultiplyByNumber](../../sql-reference/functions/tuple-functions.md#tupleMultiplyByNumber), для скалярного произведения: [dotProduct](/sql-reference/functions/array-functions#arrayDotProduct). +Для умножения кортежа на число: [tupleMultiplyByNumber](../../sql-reference/functions/tuple-functions.md#tupleMultiplyByNumber), для скалярного произведения: [dotProduct](/sql-reference/functions/array-functions#arrayDotProduct). -`a / b` – функция `divide(a, b)`. +`a / b` — функция `divide(a, b)`. -Для деления кортежа на число используйте: [tupleDivideByNumber](../../sql-reference/functions/tuple-functions.md#tupleDivideByNumber). +Для деления кортежа на число: [tupleDivideByNumber](../../sql-reference/functions/tuple-functions.md#tupleDivideByNumber). -`a % b` – функция `modulo(a, b)`. +`a % b` — функция `modulo(a, b)`. +## Операторы сложения и вычитания \{#addition-and-subtraction-operators\} -## Операторы сложения и вычитания {#addition-and-subtraction-operators} - -`a + b` – функция `plus(a, b)`. +`a + b` – соответствует функции `plus(a, b)`. Для сложения кортежей: [tuplePlus](../../sql-reference/functions/tuple-functions.md#tuplePlus). -`a - b` – функция `minus(a, b)`. +`a - b` – соответствует функции `minus(a, b)`. Для вычитания кортежей: [tupleMinus](../../sql-reference/functions/tuple-functions.md#tupleMinus). +## Операторы сравнения \{#comparison-operators\} -## Операторы сравнения {#comparison-operators} - -### Функция equals {#equals-function} +### Функция equals \{#equals-function\} `a = b` – функция `equals(a, b)`. `a == b` – функция `equals(a, b)`. -### Функция notEquals {#notequals-function} +### функция notEquals \{#notequals-function\} -`a != b` – функция `notEquals(a, b)`. +`a != b` – то же самое, что `notEquals(a, b)`. -`a <> b` – функция `notEquals(a, b)`. +`a <> b` – то же самое, что `notEquals(a, b)`. -### Функция lessOrEquals {#lessorequals-function} +### Функция lessOrEquals \{#lessorequals-function\} -`a <= b` – функция `lessOrEquals(a, b)`. +`a <= b` — это функция `lessOrEquals(a, b)`. -### Функция greaterOrEquals {#greaterorequals-function} +### Функция greaterOrEquals \{#greaterorequals-function\} -`a >= b` – функция `greaterOrEquals(a, b)`. +`a >= b` — это функция `greaterOrEquals(a, b)`. -### Функция less {#less-function} +### функция less \{#less-function\} -`a < b` – функция `less(a, b)`. +`a < b` — это функция `less(a, b)`. -### Функция greater {#greater-function} +### функция greater \{#greater-function\} -`a > b` – функция `greater(a, b)`. +`a > b` — функция `greater(a, b)`. -### Функция like {#like-function} +### Функция like \{#like-function\} `a LIKE b` – функция `like(a, b)`. -### Функция notLike {#notlike-function} +### функция notLike \{#notlike-function\} `a NOT LIKE b` – функция `notLike(a, b)`. -### Функция ilike {#ilike-function} +### Функция ilike \{#ilike-function\} -`a ILIKE b` – функция `ilike(a, b)`. +`a ILIKE b` — это функция `ilike(a, b)`. -### Функция BETWEEN {#between-function} +### Функция BETWEEN \{#between-function\} `a BETWEEN b AND c` – эквивалентно `a >= b AND a <= c`. `a NOT BETWEEN b AND c` – эквивалентно `a < b OR a > c`. +## Операторы для работы с наборами данных \{#operators-for-working-with-data-sets\} -## Операторы для работы с наборами данных {#operators-for-working-with-data-sets} - -См. [операторы IN](../../sql-reference/operators/in.md) и оператор [EXISTS](../../sql-reference/operators/exists.md). +См. [операторы IN](../../sql-reference/operators/in.md) и [оператор EXISTS](../../sql-reference/operators/exists.md). -### Функция in {#in-function} +### в функции in \{#in-function\} -`a IN ...` — функция `in(a, b)`. +`a IN ...` – функция `in(a, b)`. -### Функция notIn {#notin-function} +### Функция notIn \{#notin-function\} -`a NOT IN ...` — функция `notIn(a, b)`. +`a NOT IN ...` – функция `notIn(a, b)`. -### Функция globalIn {#globalin-function} +### функция globalIn \{#globalin-function\} -`a GLOBAL IN ...` — функция `globalIn(a, b)`. +`a GLOBAL IN ...` — это функция `globalIn(a, b)`. -### Функция globalNotIn {#globalnotin-function} +### Функция globalNotIn \{#globalnotin-function\} -`a GLOBAL NOT IN ...` — функция `globalNotIn(a, b)`. +`a GLOBAL NOT IN ...` – это функция `globalNotIn(a, b)`. -### Функция in с подзапросом {#in-subquery-function} +### функция in с подзапросом \{#in-subquery-function\} -`a = ANY (subquery)` — функция `in(a, subquery)`. +`a = ANY (subquery)` – функция `in(a, subquery)`. -### Функция notIn с подзапросом {#notin-subquery-function} +### функция подзапроса notIn \{#notin-subquery-function\} -`a != ANY (subquery)` — эквивалентно `a NOT IN (SELECT singleValueOrNull(*) FROM subquery)`. +`a != ANY (subquery)` – то же, что и `a NOT IN (SELECT singleValueOrNull(*) FROM subquery)`. -### Функция in с подзапросом {#in-subquery-function-1} +### функция IN с подзапросом \{#in-subquery-function-1\} -`a = ALL (subquery)` — эквивалентно `a IN (SELECT singleValueOrNull(*) FROM subquery)`. +`a = ALL (subquery)` – эквивалентно `a IN (SELECT singleValueOrNull(*) FROM subquery)`. -### Функция notIn с подзапросом {#notin-subquery-function-1} +### Функция подзапроса notIn -`a != ALL (subquery)` — функция `notIn(a, subquery)`. +`a != ALL (subquery)` — эквивалент функции `notIn(a, subquery)`. **Примеры** @@ -158,7 +148,7 @@ SELECT number AS a FROM numbers(10) WHERE a > ALL (SELECT number FROM numbers(3, └───┘ ``` -Запрос с ANY: +Запрос с оператором ANY: ```sql SELECT number AS a FROM numbers(10) WHERE a > ANY (SELECT number FROM numbers(3, 3)); @@ -178,28 +168,28 @@ SELECT number AS a FROM numbers(10) WHERE a > ANY (SELECT number FROM numbers(3, ``` -## Операторы для работы с датами и временем {#operators-for-working-with-dates-and-times} +## Операторы для работы с датой и временем \{#operators-for-working-with-dates-and-times\} -### EXTRACT {#extract} +### EXTRACT ```sql EXTRACT(part FROM date); ``` -Извлекает части из заданной даты. Например, можно извлечь месяц из заданной даты или секунду из времени. +Извлекает части даты из заданного значения. Например, вы можете получить месяц из указанной даты или секунду из времени. -Параметр `part` указывает, какую часть даты необходимо извлечь. Доступны следующие значения: +Параметр `part` определяет, какую часть даты нужно извлечь. Доступны следующие значения: -- `DAY` — День месяца. Возможные значения: 1–31. -- `MONTH` — Номер месяца. Возможные значения: 1–12. -- `YEAR` — Год. -- `SECOND` — Секунда. Возможные значения: 0–59. -- `MINUTE` — Минута. Возможные значения: 0–59. -- `HOUR` — Час. Возможные значения: 0–23. +* `DAY` — день месяца. Возможные значения: 1–31. +* `MONTH` — номер месяца. Возможные значения: 1–12. +* `YEAR` — год. +* `SECOND` — секунда. Возможные значения: 0–59. +* `MINUTE` — минута. Возможные значения: 0–59. +* `HOUR` — час. Возможные значения: 0–23. -Параметр `part` не чувствителен к регистру. +Параметр `part` нечувствителен к регистру. -Параметр `date` указывает дату или время для обработки. Поддерживаются типы [Date](../../sql-reference/data-types/date.md) и [DateTime](../../sql-reference/data-types/datetime.md). +Параметр `date` определяет дату или время для обработки. Поддерживаются типы [Date](../../sql-reference/data-types/date.md) и [DateTime](../../sql-reference/data-types/datetime.md). Примеры: @@ -209,7 +199,7 @@ SELECT EXTRACT(MONTH FROM toDate('2017-06-15')); SELECT EXTRACT(YEAR FROM toDate('2017-06-15')); ``` -В следующем примере создается таблица, и в неё вставляется значение типа `DateTime`. +В следующем примере мы создаём таблицу и вставляем в неё значение типа данных `DateTime`. ```sql CREATE TABLE test.Orders @@ -242,27 +232,28 @@ FROM test.Orders; └───────────┴────────────┴──────────┴───────────┴─────────────┴─────────────┘ ``` -Дополнительные примеры можно найти в [тестах](https://github.com/ClickHouse/ClickHouse/blob/master/tests/queries/0_stateless/00619_extract.sql). +Вы можете найти больше примеров в [tests](https://github.com/ClickHouse/ClickHouse/blob/master/tests/queries/0_stateless/00619_extract.sql). -### INTERVAL {#interval} + +### INTERVAL Создает значение типа [Interval](../../sql-reference/data-types/special-data-types/interval.md), которое используется в арифметических операциях со значениями типов [Date](../../sql-reference/data-types/date.md) и [DateTime](../../sql-reference/data-types/datetime.md). Типы интервалов: -- `SECOND` -- `MINUTE` -- `HOUR` -- `DAY` -- `WEEK` -- `MONTH` -- `QUARTER` -- `YEAR` +* `SECOND` +* `MINUTE` +* `HOUR` +* `DAY` +* `WEEK` +* `MONTH` +* `QUARTER` +* `YEAR` -При задании значения `INTERVAL` также можно использовать строковый литерал. Например, `INTERVAL 1 HOUR` идентично `INTERVAL '1 hour'` или `INTERVAL '1' hour`. +Вы также можете использовать строковый литерал при задании значения `INTERVAL`. Например, `INTERVAL 1 HOUR` эквивалентно `INTERVAL '1 hour'` или `INTERVAL '1' hour`. -:::tip -Интервалы разных типов нельзя комбинировать. Нельзя использовать выражения вида `INTERVAL 4 DAY 1 HOUR`. Указывайте интервалы в единицах, которые меньше или равны наименьшей единице интервала, например `INTERVAL 25 HOUR`. Можно использовать последовательные операции, как показано в примере ниже. +:::tip\ +Интервалы разных типов нельзя комбинировать. Нельзя использовать выражения вида `INTERVAL 4 DAY 1 HOUR`. Задавайте интервалы в единицах, которые не превосходят наименьшую единицу интервала, например `INTERVAL 25 HOUR`. Вы можете использовать последовательные операции, как в примере ниже. ::: Примеры: @@ -281,7 +272,6 @@ SELECT now() AS current_date_time, current_date_time + INTERVAL 4 DAY + INTERVAL SELECT now() AS current_date_time, current_date_time + INTERVAL '4 day' + INTERVAL '3 hour'; ``` - ```text ┌───current_date_time─┬─plus(plus(now(), toIntervalDay(4)), toIntervalHour(3))─┐ │ 2020-11-03 22:12:10 │ 2020-11-08 01:12:10 │ @@ -299,7 +289,7 @@ SELECT now() AS current_date_time, current_date_time + INTERVAL '4' day + INTERV ``` :::note\ -Синтаксис `INTERVAL` или функция `addDays` всегда предпочтительны. Простое сложение или вычитание (синтаксис вида `now() + ...`) не учитывает настройки временной зоны, например переход на летнее время. +Синтаксис `INTERVAL` или функция `addDays` всегда предпочтительнее. Простое сложение или вычитание (синтаксис вида `now() + ...`) не учитывает настройки часового пояса, например переход на летнее время. ::: Примеры: @@ -316,35 +306,31 @@ SELECT toDateTime('2014-10-26 00:00:00', 'Asia/Istanbul') AS time, time + 60 * 6 **См. также** -* [Interval](../../sql-reference/data-types/special-data-types/interval.md) — тип данных -* [toInterval](/sql-reference/functions/type-conversion-functions#tointervalyear) — функции преобразования типов +* Тип данных [Interval](../../sql-reference/data-types/special-data-types/interval.md) +* Функции преобразования типов [toInterval](/sql-reference/functions/type-conversion-functions#tointervalyear) -## Оператор логического И {#logical-and-operator} +## Оператор логического И \{#logical-and-operator\} -Синтаксис `SELECT a AND b` — вычисляет логическую конъюнкцию `a` и `b` с использованием функции [and](/sql-reference/functions/logical-functions#and). +Синтаксис `SELECT a AND b` — вычисляет логическую конъюнкцию `a` и `b` с помощью функции [and](/sql-reference/functions/logical-functions#and). +## Оператор логического ИЛИ \{#logical-or-operator\} -## Оператор логического ИЛИ {#logical-or-operator} +Синтаксис `SELECT a OR b` вычисляет логическую дизъюнкцию выражений `a` и `b` с помощью функции [or](/sql-reference/functions/logical-functions#or). -Синтаксис `SELECT a OR b` — вычисляет логическую дизъюнкцию `a` и `b` с помощью функции [or](/sql-reference/functions/logical-functions#or). +## Оператор логического отрицания \{#logical-negation-operator\} +Синтаксис `SELECT NOT a` вычисляет логическое отрицание выражения `a` с помощью функции [not](/sql-reference/functions/logical-functions#not). -## Оператор логического отрицания {#logical-negation-operator} - -Синтаксис `SELECT NOT a` — вычисляет логическое отрицание `a` с использованием функции [not](/sql-reference/functions/logical-functions#not). - - -## Условный оператор {#conditional-operator} +## Условный оператор \{#conditional-operator\} `a ? b : c` – функция `if(a, b, c)`. Примечание: -Условный оператор вычисляет значения b и c, затем проверяет выполнение условия a и возвращает соответствующее значение. Если `b` или `c` является функцией [arrayJoin()](/sql-reference/functions/array-join), каждая строка будет реплицирована независимо от условия "a". +Условный оператор сначала вычисляет значения `b` и `c`, затем проверяет, выполняется ли условие `a`, и возвращает соответствующее значение. Если `b` или `C` является функцией [arrayJoin()](/sql-reference/functions/array-join), каждая строка будет продублирована независимо от условия `a`. - -## Условное выражение {#conditional-expression} +## Условное выражение ```sql CASE [x] @@ -354,57 +340,52 @@ CASE [x] END ``` -Если указан `x`, используется функция `transform(x, [a, ...], [b, ...], c)`. В противном случае используется `multiIf(a, b, ..., c)`. +Если параметр `x` задан, используется функция `transform(x, [a, ...], [b, ...], c)`. В противном случае — `multiIf(a, b, ..., c)`. -Если в выражении отсутствует секция `ELSE c`, значение по умолчанию — `NULL`. +Если в выражении отсутствует конструкция `ELSE c`, значением по умолчанию является `NULL`. Функция `transform` не работает с `NULL`. -## Оператор конкатенации {#concatenation-operator} - -`s1 || s2` – функция `concat(s1, s2)`. +## Оператор конкатенации \{#concatenation-operator\} +`s1 || s2` — то же, что функция `concat(s1, s2)`. -## Оператор создания лямбда-функции {#lambda-creation-operator} +## Оператор создания лямбда-выражения \{#lambda-creation-operator\} -`x -> expr` – функция `lambda(x, expr)`. +`x -> expr` – это функция `lambda(x, expr)`. -Следующие операторы не имеют приоритета, так как они являются скобками: +Следующие операторы не имеют приоритета, так как являются скобками: +## Оператор создания массива \{#array-creation-operator\} -## Оператор создания массива {#array-creation-operator} +`[x1, ...]` – это функция `array(x1, ...)`. -`[x1, ...]` – функция `array(x1, ...)`. +## Оператор создания кортежа \{#tuple-creation-operator\} +`(x1, x2, ...)` – То же, что и функция `tuple(x1, x2, ...)`. -## Оператор создания кортежа {#tuple-creation-operator} +## Ассоциативность \{#associativity\} -`(x1, x2, ...)` — функция `tuple(x2, x2, ...)`. +Все бинарные операторы являются левоассоциативными. Например, `1 + 2 + 3` преобразуется в `plus(plus(1, 2), 3)`. +Иногда это работает не так, как вы ожидаете. Например, `SELECT 4 > 2 > 3` вернёт 0. +Для повышения эффективности функции `and` и `or` принимают любое количество аргументов. Соответствующие цепочки операторов `AND` и `OR` преобразуются в один вызов этих функций. -## Ассоциативность {#associativity} - -Все бинарные операторы обладают левой ассоциативностью. Например, выражение `1 + 2 + 3` преобразуется в `plus(plus(1, 2), 3)`. -Иногда это работает не так, как ожидается. Например, запрос `SELECT 4 > 2 > 3` вернёт 0. - -Для повышения производительности функции `and` и `or` принимают любое количество аргументов. Соответствующие цепочки операторов `AND` и `OR` преобразуются в один вызов этих функций. - - -## Проверка на `NULL` {#checking-for-null} +## Проверка на `NULL` \{#checking-for-null\} ClickHouse поддерживает операторы `IS NULL` и `IS NOT NULL`. -### IS NULL {#is_null} +### IS NULL \ -- Для значений типа [Nullable](../../sql-reference/data-types/nullable.md) оператор `IS NULL` возвращает: - - `1`, если значение равно `NULL`. - - `0` в противном случае. -- Для остальных значений оператор `IS NULL` всегда возвращает `0`. +* Для значений типа [Nullable](../../sql-reference/data-types/nullable.md) оператор `IS NULL` возвращает: + * `1`, если значение равно `NULL`; + * `0` во всех остальных случаях. +* Для остальных типов значений оператор `IS NULL` всегда возвращает `0`. -Может быть оптимизирован при включении настройки [optimize_functions_to_subcolumns](/operations/settings/settings#optimize_functions_to_subcolumns). При `optimize_functions_to_subcolumns = 1` функция читает только подстолбец [null](../../sql-reference/data-types/nullable.md#finding-null) вместо чтения и обработки данных всего столбца. Запрос `SELECT n IS NULL FROM table` преобразуется в `SELECT n.null FROM TABLE`. +Работу оператора можно оптимизировать, включив настройку [optimize_functions_to_subcolumns](/operations/settings/settings#optimize_functions_to_subcolumns). При `optimize_functions_to_subcolumns = 1` функция читает только подколонку [null](../../sql-reference/data-types/nullable.md#finding-null) вместо чтения и обработки данных всей колонки. Запрос `SELECT n IS NULL FROM table` преобразуется в `SELECT n.null FROM TABLE`. - +{/* */ } ```sql SELECT x+100 FROM t_null WHERE y IS NULL @@ -416,14 +397,15 @@ SELECT x+100 FROM t_null WHERE y IS NULL └──────────────┘ ``` -### IS NOT NULL {#is_not_null} -- Для значений типа [Nullable](../../sql-reference/data-types/nullable.md) оператор `IS NOT NULL` возвращает: - - `0`, если значение равно `NULL`. - - `1` в противном случае. -- Для остальных значений оператор `IS NOT NULL` всегда возвращает `1`. +### IS NOT NULL \ + +* Для значений типа [Nullable](../../sql-reference/data-types/nullable.md) оператор `IS NOT NULL` возвращает: + * `0`, если значение `NULL`; + * `1` во всех остальных случаях. +* Для значений других типов оператор `IS NOT NULL` всегда возвращает `1`. - +{/* */ } ```sql SELECT * FROM t_null WHERE y IS NOT NULL @@ -435,4 +417,4 @@ SELECT * FROM t_null WHERE y IS NOT NULL └───┴───┘ ``` -Может быть оптимизирован при включении настройки [optimize_functions_to_subcolumns](/operations/settings/settings#optimize_functions_to_subcolumns). При `optimize_functions_to_subcolumns = 1` функция читает только подстолбец [null](../../sql-reference/data-types/nullable.md#finding-null) вместо чтения и обработки данных всего столбца. Запрос `SELECT n IS NOT NULL FROM table` преобразуется в `SELECT NOT n.null FROM TABLE`. +Можно оптимизировать, включив настройку [optimize_functions_to_subcolumns](/operations/settings/settings#optimize_functions_to_subcolumns). При `optimize_functions_to_subcolumns = 1` функция читает только подстолбец [null](../../sql-reference/data-types/nullable.md#finding-null) вместо чтения и обработки данных всего столбца. Запрос `SELECT n IS NOT NULL FROM table` преобразуется в `SELECT NOT n.null FROM TABLE`. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/sql-reference-links.json b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/sql-reference-links.json index 8948ed3b365..87b87a5fae3 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/sql-reference-links.json +++ b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/sql-reference-links.json @@ -1,12 +1,12 @@ [ { "title": "Операторы", - "description": "Список доступных SQL-операторов в ClickHouse", + "description": "Список доступных в ClickHouse SQL-операторов", "url": "/docs/sql-reference/statements/" }, { "title": "Движки баз данных и таблиц", - "description": "Движки определяют, где и как будут храниться данные", + "description": "Движки определяют, где и как будут храниться ваши данные", "url": "/docs/engines/table-engines" } ] \ No newline at end of file diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/statements/alter/settings-profile.md b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/statements/alter/settings-profile.md index 2fc0ff9cb9a..9d5dc649b77 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/statements/alter/settings-profile.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/statements/alter/settings-profile.md @@ -1,6 +1,6 @@ --- description: 'Документация по профилю настроек' -sidebar_label: 'SETTINGS PROFILE' +sidebar_label: 'ПРОФИЛЬ НАСТРОЕК' sidebar_position: 48 slug: /sql-reference/statements/alter/settings-profile title: 'ALTER SETTINGS PROFILE' diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/statements/alter/user.md b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/statements/alter/user.md index 5d821e96fd4..5235ad1ba3f 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/statements/alter/user.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/statements/alter/user.md @@ -1,13 +1,13 @@ --- -description: 'Документация по пользователю' -sidebar_label: 'ПОЛЬЗОВАТЕЛЬ' +description: 'Документация по USER' +sidebar_label: 'USER' sidebar_position: 45 slug: /sql-reference/statements/alter/user title: 'ALTER USER' doc_type: 'reference' --- -Изменяет учётные записи пользователей ClickHouse. +Изменяет учетные записи пользователей в ClickHouse. Синтаксис: @@ -28,33 +28,33 @@ ALTER USER [IF EXISTS] name1 [RENAME TO new_name |, name2 [,...]] [ADD PROFILES 'profile_name' [,...] ] ``` -Чтобы использовать `ALTER USER`, вы должны иметь право [ALTER USER](../../../sql-reference/statements/grant.md#access-management). +Чтобы использовать `ALTER USER`, необходимо иметь привилегию [ALTER USER](../../../sql-reference/statements/grant.md#access-management). -## Предложение GRANTEES {#grantees-clause} +## Клауза GRANTEES {#grantees-clause} -Указывает пользователей или роли, которым разрешено получать [привилегии](../../../sql-reference/statements/grant.md#privileges) от данного пользователя при условии, что этому пользователю также предоставлены все необходимые права с опцией [GRANT OPTION](../../../sql-reference/statements/grant.md#granting-privilege-syntax). Варианты предложения `GRANTEES`: +Определяет пользователей или роли, которым разрешено получать [привилегии](../../../sql-reference/statements/grant.md#privileges) от этого пользователя при условии, что этому пользователю также выданы все необходимые привилегии с [GRANT OPTION](../../../sql-reference/statements/grant.md#granting-privilege-syntax). Параметры клаузы `GRANTEES`: - `user` — Указывает пользователя, которому этот пользователь может выдавать привилегии. - `role` — Указывает роль, которой этот пользователь может выдавать привилегии. -- `ANY` — Этот пользователь может выдавать привилегии кому угодно. Значение по умолчанию. +- `ANY` — Этот пользователь может выдавать привилегии любому пользователю или роли. Значение по умолчанию. - `NONE` — Этот пользователь не может выдавать привилегии никому. -Вы можете исключить любого пользователя или роль, используя выражение `EXCEPT`. Например, `ALTER USER user1 GRANTEES ANY EXCEPT user2`. Это означает, что если у пользователя `user1` есть некоторые привилегии, выданные с `GRANT OPTION`, он сможет выдавать эти привилегии кому угодно, кроме `user2`. +Вы можете исключить любого пользователя или роль с помощью выражения `EXCEPT`. Например, `ALTER USER user1 GRANTEES ANY EXCEPT user2`. Это означает, что если у `user1` есть какие‑то привилегии, выданные с `GRANT OPTION`, то он сможет выдавать эти привилегии кому угодно, кроме `user2`. ## Примеры -Сделать назначенные роли ролями по умолчанию: +Сделайте назначенные роли ролями по умолчанию: ```sql ALTER USER user DEFAULT ROLE role1, role2 ``` -Если роли ранее не были назначены пользователю, ClickHouse выдаст исключение. +Если роли ранее не были назначены пользователю, ClickHouse сгенерирует исключение. -Назначьте все выданные роли как роли по умолчанию: +Сделайте все назначенные роли ролями по умолчанию: ```sql ALTER USER user DEFAULT ROLE ALL @@ -68,13 +68,13 @@ ALTER USER user DEFAULT ROLE ALL ALTER USER user DEFAULT ROLE ALL EXCEPT role1, role2 ``` -Позволяет пользователю с учётной записью `john` передавать свои привилегии пользователю с учётной записью `jack`: +Позволяет пользователю с учётной записью `john` предоставлять свои привилегии пользователю с учётной записью `jack`: ```sql ALTER USER john GRANTEES jack; ``` -Добавляет пользователю новые методы аутентификации, при этом сохраняя существующие: +Добавляет новые методы аутентификации пользователю, сохраняя уже существующие: ```sql ALTER USER user1 ADD IDENTIFIED WITH plaintext_password by '1', bcrypt_password by '2', plaintext_password by '3' @@ -82,23 +82,23 @@ ALTER USER user1 ADD IDENTIFIED WITH plaintext_password by '1', bcrypt_password Notes: -1. Более старые версии ClickHouse могут не поддерживать синтаксис с несколькими методами аутентификации. Поэтому, если на сервере ClickHouse есть такие пользователи и выполняется откат до версии, которая этого не поддерживает, такие пользователи станут непригодны для использования, а некоторые операции, связанные с пользователями, перестанут работать. Чтобы выполнить откат версии корректно, необходимо заранее настроить всех пользователей так, чтобы у каждого был только один метод аутентификации. Либо, если сервер уже был откатан без соблюдения правильной процедуры, проблемные учетные записи пользователей нужно удалить. +1. Более старые версии ClickHouse могут не поддерживать синтаксис с несколькими методами аутентификации. Поэтому, если сервер ClickHouse содержит таких пользователей и понижен до версии, которая этого не поддерживает, такие пользователи станут непригодными к использованию, а некоторые операции, связанные с пользователями, перестанут работать. Чтобы выполнить понижение версии без последствий, необходимо перед понижением оставить для всех пользователей только один метод аутентификации. Если же сервер был понижен без соблюдения этой процедуры, проблемных пользователей следует удалить. 2. `no_password` не может сосуществовать с другими методами аутентификации по соображениям безопасности. - По этой причине невозможно выполнить `ADD` метода аутентификации `no_password`. Приведенный ниже запрос завершится ошибкой: + По этой причине невозможно добавить метод аутентификации `no_password` с помощью `ADD`. Приведённый ниже запрос вызовет ошибку: ```sql ALTER USER user1 ADD IDENTIFIED WITH no_password ``` -Если вы хотите удалить методы аутентификации для пользователя и полагаться на `no_password`, вы должны указать это в форме с заменой ниже. +Если вы хотите удалить методы аутентификации пользователя и полагаться только на `no_password`, необходимо воспользоваться приведённой ниже формой с заменой. -Сбрасывает методы аутентификации и добавляет те, которые указаны в запросе (эквивалентно использованию ведущего IDENTIFIED без ключевого слова ADD): +Сбрасывает методы аутентификации и добавляет те, что указаны в запросе (эквивалент ведущего IDENTIFIED без ключевого слова ADD): ```sql ALTER USER user1 IDENTIFIED WITH plaintext_password by '1', bcrypt_password by '2', plaintext_password by '3' ``` -Сбросьте методы аутентификации, оставив только последний добавленный: +Сбросить методы аутентификации и сохранить только последний добавленный: ```sql ALTER USER user1 RESET AUTHENTICATION METHODS TO NEW @@ -107,8 +107,8 @@ ALTER USER user1 RESET AUTHENTICATION METHODS TO NEW ## Оператор VALID UNTIL {#valid-until-clause} -Позволяет указать дату окончания срока действия и, при необходимости, время для метода аутентификации. В качестве параметра принимает строку. Рекомендуется использовать формат `YYYY-MM-DD [hh:mm:ss] [timezone]` для значения даты и времени. По умолчанию значение этого параметра — `'infinity'`. -Оператор `VALID UNTIL` может быть указан только вместе с методом аутентификации, за исключением случая, когда метод аутентификации в запросе не указан. В этом случае оператор `VALID UNTIL` будет применён ко всем существующим методам аутентификации. +Позволяет задать дату окончания срока действия и, при необходимости, время для метода аутентификации. Принимает строку в качестве параметра. Рекомендуется использовать формат `YYYY-MM-DD [hh:mm:ss] [timezone]` для значения даты и времени. По умолчанию этот параметр равен `'infinity'`. +Оператор `VALID UNTIL` может быть указан только вместе с методом аутентификации, за исключением случая, когда в запросе метод аутентификации не задан. В этом случае оператор `VALID UNTIL` будет применён ко всем существующим методам аутентификации. Примеры: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/statements/create/quota.md b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/statements/create/quota.md index 3b8982d78d6..5baf90a3460 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/statements/create/quota.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/statements/create/quota.md @@ -1,13 +1,13 @@ --- -description: 'Документация по квоте' -sidebar_label: 'КВОТА' +description: 'Документация по QUOTA' +sidebar_label: 'QUOTA' sidebar_position: 42 slug: /sql-reference/statements/create/quota title: 'CREATE QUOTA' doc_type: 'reference' --- -Создаёт [квоту](../../../guides/sre/user-management/index.md#quotas-management), которую можно назначить пользователю или роли. +Создает [квоту](../../../guides/sre/user-management/index.md#quotas-management), которую можно назначить пользователю или роли. Синтаксис: @@ -21,29 +21,29 @@ CREATE QUOTA [IF NOT EXISTS | OR REPLACE] name [ON CLUSTER cluster_name] [TO {role [,...] | ALL | ALL EXCEPT role [,...]}] ``` -Ключи `user_name`, `ip_address`, `client_key`, `client_key, user_name` и `client_key, ip_address` соответствуют столбцам в таблице [system.quotas](../../../operations/system-tables/quotas.md). +Ключи `user_name`, `ip_address`, `client_key`, `client_key, user_name` и `client_key, ip_address` соответствуют полям в таблице [system.quotas](../../../operations/system-tables/quotas.md). -Параметры `queries`, `query_selects`, `query_inserts`, `errors`, `result_rows`, `result_bytes`, `read_rows`, `read_bytes`, `written_bytes`, `execution_time`, `failed_sequential_authentications` соответствуют столбцам в таблице [system.quotas_usage](../../../operations/system-tables/quotas_usage.md). +Параметры `queries`, `query_selects`, `query_inserts`, `errors`, `result_rows`, `result_bytes`, `read_rows`, `read_bytes`, `written_bytes`, `execution_time`, `failed_sequential_authentications` соответствуют полям в таблице [system.quotas_usage](../../../operations/system-tables/quotas_usage.md). -Конструкция `ON CLUSTER` позволяет создавать квоты на кластере, см. [Distributed DDL](../../../sql-reference/distributed-ddl.md). +Предложение `ON CLUSTER` позволяет создавать квоты на кластере, см. [Distributed DDL](../../../sql-reference/distributed-ddl.md). **Примеры** -Ограничьте максимальное количество запросов для текущего пользователя значением 123 запроса за период 15 месяцев: +Ограничьте максимальное число запросов для текущего пользователя значением 123 запроса за период в 15 месяцев: ```sql CREATE QUOTA qA FOR INTERVAL 15 month MAX queries = 123 TO CURRENT_USER; ``` -Для пользователя по умолчанию установите максимальное время выполнения до 0,5 секунды за 30 минут, а также ограничьте максимальное число запросов 321 и максимальное число ошибок — 10 за 5 кварталов: +Для пользователя по умолчанию задайте следующие ограничения: максимальное время выполнения — полсекунды в течение 30 минут, максимальное число запросов — 321, а максимальное число ошибок — 10 за 5 кварталов: ```sql CREATE QUOTA qB FOR INTERVAL 30 minute MAX execution_time = 0.5, FOR INTERVAL 5 quarter MAX queries = 321, errors = 10 TO default; ``` -Дополнительные примеры с использованием конфигурации XML (которая не поддерживается в ClickHouse Cloud) можно найти в [руководстве по квотам](/operations/quotas). +Дополнительные примеры с использованием конфигурации XML (не поддерживается в ClickHouse Cloud) можно найти в [руководстве по QUOTA](/operations/quotas). ## Связанные материалы {#related-content} -- Блог: [Создание одностраничных приложений на базе ClickHouse](https://clickhouse.com/blog/building-single-page-applications-with-clickhouse-and-http) +- Блог: [Создание одностраничных приложений на ClickHouse](https://clickhouse.com/blog/building-single-page-applications-with-clickhouse-and-http) diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/statements/create/settings-profile.md b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/statements/create/settings-profile.md index 1aafc5d3217..c4e3ce362c3 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/statements/create/settings-profile.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/statements/create/settings-profile.md @@ -1,13 +1,13 @@ --- -description: 'Документация по профилю настроек' -sidebar_label: 'ПРОФИЛЬ НАСТРОЕК' +description: 'Документация по SETTINGS PROFILE' +sidebar_label: 'SETTINGS PROFILE' sidebar_position: 43 slug: /sql-reference/statements/create/settings-profile title: 'CREATE SETTINGS PROFILE' doc_type: 'reference' --- -Создает [профили настроек](../../../guides/sre/user-management/index.md#settings-profiles-management), которые могут быть назначены пользователю или роли. +Создаёт [профили настроек](../../../guides/sre/user-management/index.md#settings-profiles-management), которые можно назначать пользователю или роли. Синтаксис: @@ -19,7 +19,7 @@ CREATE SETTINGS PROFILE [IF NOT EXISTS | OR REPLACE] name1 [, name2 [,...]] [TO {{role1 | user1 [, role2 | user2 ...]} | NONE | ALL | ALL EXCEPT {role1 | user1 [, role2 | user2 ...]}}] ``` -Клауза `ON CLUSTER` позволяет создавать профили настроек в кластере, см. [распределённый DDL](../../../sql-reference/distributed-ddl.md). +Клауза `ON CLUSTER` позволяет создавать профили настроек на кластере, см. [Distributed DDL](../../../sql-reference/distributed-ddl.md). ## Пример @@ -30,7 +30,7 @@ CREATE SETTINGS PROFILE [IF NOT EXISTS | OR REPLACE] name1 [, name2 [,...]] CREATE USER robin IDENTIFIED BY 'password'; ``` -Создайте профиль настроек `max_memory_usage_profile` с заданным значением и ограничениями для параметра `max_memory_usage` и назначьте его пользователю `robin`: +Создайте SETTINGS PROFILE `max_memory_usage_profile` с заданием значения и ограничений для параметра `max_memory_usage` и назначьте его пользователю `robin`: ```sql CREATE diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/statements/create/user.md b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/statements/create/user.md index 1bf1aca5ec8..f51dd4867bb 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/statements/create/user.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/statements/create/user.md @@ -1,13 +1,13 @@ --- -description: 'Документация по пользователю' -sidebar_label: 'ПОЛЬЗОВАТЕЛЬ' +description: 'Документация по USER' +sidebar_label: 'USER' sidebar_position: 39 slug: /sql-reference/statements/create/user title: 'CREATE USER' doc_type: 'reference' --- -Создает [учетные записи пользователей](../../../guides/sre/user-management/index.md#user-account-management). +Создаёт [учётные записи пользователей](../../../guides/sre/user-management/index.md#user-account-management). Синтаксис: @@ -24,7 +24,7 @@ CREATE USER [IF NOT EXISTS | OR REPLACE] name1 [, name2 [,...]] [ON CLUSTER clus [SETTINGS variable [= value] [MIN [=] min_value] [MAX [=] max_value] [READONLY | WRITABLE] | PROFILE 'profile_name'] [,...] ``` -Предложение `ON CLUSTER` позволяет создавать пользователей на кластере; см. [Distributed DDL](../../../sql-reference/distributed-ddl.md). +Предложение `ON CLUSTER` позволяет создавать пользователей на кластере, см. [Распределённый DDL](../../../sql-reference/distributed-ddl.md). ## Идентификация @@ -46,7 +46,7 @@ CREATE USER [IF NOT EXISTS | OR REPLACE] name1 [, name2 [,...]] [ON CLUSTER clus * `IDENTIFIED WITH http SERVER 'http_server'` или `IDENTIFIED WITH http SERVER 'http_server' SCHEME 'basic'` * `IDENTIFIED BY 'qwerty'` -Требования к сложности паролей можно настроить в [config.xml](/operations/configuration-files). Ниже приведён пример конфигурации, которая требует, чтобы пароли были длиной не менее 12 символов и содержали как минимум одну цифру. Каждое правило сложности пароля задаётся регулярным выражением для проверки паролей, а также описанием правила. +Требования к сложности паролей можно изменить в [config.xml](/operations/configuration-files). Ниже приведён пример конфигурации, который требует, чтобы пароли были длиной не менее 12 символов и содержали как минимум 1 цифру. Для каждого правила сложности пароля задаются регулярное выражение, по которому проверяются пароли, и описание правила. ```xml @@ -57,48 +57,48 @@ CREATE USER [IF NOT EXISTS | OR REPLACE] name1 [, name2 [,...]] [ON CLUSTER clus
\p{N} - должен содержать хотя бы одну цифру + должен содержать хотя бы 1 цифру ``` :::note -В ClickHouse Cloud по умолчанию пароли должны соответствовать следующим требованиям к сложности: +По умолчанию в ClickHouse Cloud пароли должны соответствовать следующим требованиям к сложности: -* Содержать не менее 12 символов -* Содержать не менее 1 цифры -* Содержать не менее 1 заглавной буквы -* Содержать не менее 1 строчной буквы -* Содержать не менее 1 специального символа +* Иметь длину не менее 12 символов +* Содержать как минимум 1 цифру +* Содержать как минимум 1 заглавную букву +* Содержать как минимум 1 строчную букву +* Содержать как минимум 1 специальный символ ::: ## Примеры {#examples} -1. Следующее имя пользователя — `name1`, и для него не требуется пароль, что, очевидно, не обеспечивает особой безопасности: +1. Следующее имя пользователя — `name1`, и для него не требуется пароль — что, очевидно, практически не обеспечивает безопасность: ```sql CREATE USER name1 NOT IDENTIFIED ``` -2. Чтобы указать пароль в открытом виде (plaintext): +2. Чтобы указать пароль в виде открытого текста: ```sql CREATE USER name2 IDENTIFIED WITH plaintext_password BY 'my_password' ``` :::tip - Пароль сохраняется в текстовом SQL-файле в `/var/lib/clickhouse/access`, поэтому использование `plaintext_password` — не лучшая идея. Вместо этого попробуйте `sha256_password`, как показано далее... + Пароль сохраняется в SQL-файле в `/var/lib/clickhouse/access`, поэтому использование `plaintext_password` — не лучшая идея. Вместо этого используйте `sha256_password`, как показано ниже... ::: -3. Наиболее распространённый вариант — использовать пароль, хэшированный с помощью SHA-256. ClickHouse выполнит хеширование пароля, когда вы укажете `IDENTIFIED WITH sha256_password`. Например: +3. Наиболее распространённый вариант — использовать пароль, хэшированный с помощью SHA-256. ClickHouse вычислит хэш пароля за вас, когда вы укажете `IDENTIFIED WITH sha256_password`. Например: ```sql CREATE USER name3 IDENTIFIED WITH sha256_password BY 'my_password' ``` - Пользователь `name3` теперь может выполнять вход, используя `my_password`, но пароль хранится в виде хэшированного значения, показанного выше. В `/var/lib/clickhouse/access` был создан следующий SQL-файл, который выполняется при запуске сервера: + Пользователь `name3` теперь может входить, используя `my_password`, но пароль хранится в виде хэшированного значения, приведённого выше. В `/var/lib/clickhouse/access` был создан следующий SQL-файл, который выполняется при запуске сервера: ```bash /var/lib/clickhouse/access $ cat 3843f510-6ebd-a52d-72ac-e021686d8a93.sql @@ -106,10 +106,10 @@ CREATE USER [IF NOT EXISTS | OR REPLACE] name1 [, name2 [,...]] [ON CLUSTER clus ``` :::tip - Если вы уже создали хэш-значение и соответствующее значение соли для имени пользователя, вы можете использовать `IDENTIFIED WITH sha256_hash BY 'hash'` или `IDENTIFIED WITH sha256_hash BY 'hash' SALT 'salt'`. Для идентификации с `sha256_hash` с использованием `SALT` хэш должен быть вычислен из конкатенации 'password' и 'salt'. + Если вы уже вычислили значение хэша и соответствующее значение соли для имени пользователя, вы можете использовать `IDENTIFIED WITH sha256_hash BY 'hash'` или `IDENTIFIED WITH sha256_hash BY 'hash' SALT 'salt'`. Для идентификации с `sha256_hash` с использованием `SALT` хэш должен быть вычислен из конкатенации 'password' и 'salt'. ::: -4. `double_sha1_password` обычно не требуется, но бывает полезен при работе с клиентами, которым он необходим (например, интерфейс MySQL): +4. Тип `double_sha1_password` обычно не требуется, но бывает полезен при работе с клиентами, которые его требуют (например, интерфейс MySQL): ```sql CREATE USER name4 IDENTIFIED WITH double_sha1_password BY 'my_password' @@ -121,25 +121,25 @@ CREATE USER [IF NOT EXISTS | OR REPLACE] name1 [, name2 [,...]] [ON CLUSTER clus CREATE USER name4 IDENTIFIED WITH double_sha1_hash BY 'CCD3A959D6A004B9C3807B728BC2E55B67E10518' ``` -5. `bcrypt_password` — самый безопасный вариант для хранения паролей. Он использует алгоритм [bcrypt](https://en.wikipedia.org/wiki/Bcrypt), который устойчив к атакам перебором даже в случае компрометации хэша пароля. +5. Тип `bcrypt_password` является самым безопасным вариантом хранения паролей. Он использует алгоритм [bcrypt](https://en.wikipedia.org/wiki/Bcrypt), который устойчив к атакам перебором, даже если хэш пароля скомпрометирован. ```sql CREATE USER name5 IDENTIFIED WITH bcrypt_password BY 'my_password' ``` - В этом методе длина пароля ограничена 72 символами. - Параметр work factor алгоритма bcrypt, определяющий объём вычислений и время, необходимые для расчёта хэша и проверки пароля, можно изменить в конфигурации сервера: + Длина пароля при этом методе ограничена 72 символами. + Параметр work factor для bcrypt, определяющий объём вычислений и время, необходимое для вычисления хэша и проверки пароля, можно изменить в конфигурации сервера: ```xml 12 ``` - Значение work factor должно быть от 4 до 31, по умолчанию — 12. + Значение work factor должно быть в диапазоне от 4 до 31, по умолчанию — 12. :::warning - Для приложений с высокочастотной аутентификацией - рассмотрите альтернативные методы аутентификации из-за - вычислительных накладных расходов bcrypt при высоких значениях work factor. + Для приложений с частой аутентификацией + рассмотрите альтернативные методы аутентификации + из-за вычислительных накладных расходов bcrypt при высоких значениях work factor. ::: 6. 6. Тип пароля также можно опустить: @@ -165,22 +165,22 @@ CREATE USER [IF NOT EXISTS | OR REPLACE] name1 [, name2 [,...]] [ON CLUSTER clus Примечания: -1. Старые версии ClickHouse могут не поддерживать синтаксис с несколькими методами аутентификации. Поэтому, если на сервере ClickHouse есть такие пользователи и сервер откатывают до версии, которая этого не поддерживает, эти пользователи станут недоступны, а некоторые операции, связанные с пользователями, перестанут работать. Чтобы выполнить понижение версии корректно, перед откатом необходимо настроить всех пользователей так, чтобы у каждого был только один метод аутентификации. Либо, если сервер был понижен без соблюдения надлежащей процедуры, проблемных пользователей следует удалить. -2. По соображениям безопасности `no_password` не может использоваться совместно с другими методами аутентификации. Поэтому вы можете указывать -`no_password` только в том случае, если это единственный метод аутентификации в запросе. +1. Более старые версии ClickHouse могут не поддерживать синтаксис с несколькими методами аутентификации. Поэтому, если на сервере ClickHouse есть пользователи с такими настройками и сервер понижен до версии, которая этого не поддерживает, эти пользователи станут недоступны, а некоторые операции, связанные с пользователями, перестанут работать. Чтобы выполнить понижение версии корректно, необходимо перед понижением настроить всех пользователей так, чтобы у каждого был только один метод аутентификации. Либо, если сервер был понижен без соблюдения предусмотренной процедуры, проблемных пользователей следует удалить. +2. `no_password` не может сосуществовать с другими методами аутентификации по соображениям безопасности. Поэтому вы можете указать +`no_password` только если это единственный метод аутентификации в запросе. -## Пользовательский хост {#user-host} +## Хост пользователя {#user-host} -Пользовательский хост — это хост, с которого может быть установлено соединение с сервером ClickHouse. Хост может быть указан в секции `HOST` запроса следующими способами: +Хост пользователя — это хост, с которого может быть установлено соединение с сервером ClickHouse. Хост может быть указан в секции запроса `HOST` следующими способами: -- `HOST IP 'ip_address_or_subnetwork'` — Пользователь может подключаться к серверу ClickHouse только с указанного IP-адреса или [подсети](https://en.wikipedia.org/wiki/Subnetwork). Примеры: `HOST IP '192.168.0.0/16'`, `HOST IP '2001:DB8::/32'`. Для промышленной эксплуатации указывайте только элементы `HOST IP` (IP-адреса и их маски), так как использование `host` и `host_regexp` может приводить к дополнительной задержке. +- `HOST IP 'ip_address_or_subnetwork'` — Пользователь может подключаться к серверу ClickHouse только с указанного IP‑адреса или [подсети](https://en.wikipedia.org/wiki/Subnetwork). Примеры: `HOST IP '192.168.0.0/16'`, `HOST IP '2001:DB8::/32'`. Для использования в продакшене указывайте только элементы `HOST IP` (IP‑адреса и их маски), так как использование `host` и `host_regexp` может привести к дополнительным задержкам. - `HOST ANY` — Пользователь может подключаться из любого места. Это вариант по умолчанию. - `HOST LOCAL` — Пользователь может подключаться только локально. -- `HOST NAME 'fqdn'` — Пользовательский хост может быть указан как FQDN. Например, `HOST NAME 'mysite.com'`. -- `HOST REGEXP 'regexp'` — При указании пользовательских хостов можно использовать регулярные выражения [pcre](http://www.pcre.org/). Например, `HOST REGEXP '.*\.mysite\.com'`. -- `HOST LIKE 'template'` — Позволяет использовать оператор [LIKE](/sql-reference/functions/string-search-functions#like) для фильтрации пользовательских хостов. Например, `HOST LIKE '%'` эквивалентно `HOST ANY`, а `HOST LIKE '%.mysite.com'` фильтрует все хосты в домене `mysite.com`. +- `HOST NAME 'fqdn'` — Хост пользователя может быть указан как FQDN. Например, `HOST NAME 'mysite.com'`. +- `HOST REGEXP 'regexp'` — Можно использовать регулярные выражения [PCRE](http://www.pcre.org/) при указании хостов пользователя. Например, `HOST REGEXP '.*\.mysite\.com'`. +- `HOST LIKE 'template'` — Позволяет использовать оператор [LIKE](/sql-reference/functions/string-search-functions#like) для фильтрации хостов пользователя. Например, `HOST LIKE '%'` эквивалентен `HOST ANY`, `HOST LIKE '%.mysite.com'` отбирает все хосты в домене `mysite.com`. Другой способ указания хоста — использовать синтаксис `@` после имени пользователя. Примеры: @@ -189,15 +189,15 @@ CREATE USER [IF NOT EXISTS | OR REPLACE] name1 [, name2 [,...]] [ON CLUSTER clus - `CREATE USER mira@'192.168.%.%'` — Эквивалентно синтаксису `HOST LIKE`. :::tip -ClickHouse рассматривает `user_name@'address'` как единое имя пользователя. Таким образом, технически вы можете создать нескольких пользователей с одинаковым `user_name` и разными конструкциями после `@`. Однако мы не рекомендуем так делать. +ClickHouse рассматривает `user_name@'address'` как имя пользователя целиком. Таким образом, технически вы можете создать несколько пользователей с одинаковым `user_name` и разными конструкциями после `@`. Однако мы не рекомендуем делать это. ::: ## Оператор VALID UNTIL {#valid-until-clause} -Позволяет указать дату окончания срока действия и, при необходимости, время для метода аутентификации. В качестве параметра принимает строку. Для значения даты и времени рекомендуется использовать формат `YYYY-MM-DD [hh:mm:ss] [timezone]`. По умолчанию этот параметр имеет значение `'infinity'`. -Оператор `VALID UNTIL` может быть указан только вместе с методом аутентификации, за исключением случая, когда в запросе не указан ни один метод аутентификации. В этом случае оператор `VALID UNTIL` будет применён ко всем существующим методам аутентификации. +Позволяет задать дату окончания срока действия и, при необходимости, время для метода аутентификации. В качестве параметра принимает строку. Рекомендуется использовать формат `YYYY-MM-DD [hh:mm:ss] [timezone]` для даты и времени. По умолчанию этот параметр имеет значение `'infinity'`. +Оператор `VALID UNTIL` может быть указан только вместе с методом аутентификации, за исключением случая, когда в запросе не задан ни один метод аутентификации. В этом случае оператор `VALID UNTIL` будет применён ко всем существующим методам аутентификации. Примеры: @@ -209,30 +209,30 @@ ClickHouse рассматривает `user_name@'address'` как единое -## Предложение GRANTEES {#grantees-clause} +## Клауза GRANTEES {#grantees-clause} -Задаёт пользователей или роли, которым разрешено получать [привилегии](../../../sql-reference/statements/grant.md#privileges) от этого пользователя при условии, что этому пользователю также предоставлены все необходимые привилегии с опцией [GRANT OPTION](../../../sql-reference/statements/grant.md#granting-privilege-syntax). Варианты предложения `GRANTEES`: +Указывает пользователей или роли, которым разрешено получать [привилегии](../../../sql-reference/statements/grant.md#privileges) от этого пользователя при условии, что этому пользователю также выданы все требуемые привилегии с [GRANT OPTION](../../../sql-reference/statements/grant.md#granting-privilege-syntax). Варианты клаузы `GRANTEES`: -- `user` — Указывает пользователя, которому этот пользователь может предоставлять привилегии. -- `role` — Указывает роль, которой этот пользователь может предоставлять привилегии. -- `ANY` — Этот пользователь может предоставлять привилегии кому угодно. Это значение используется по умолчанию. -- `NONE` — Этот пользователь не может предоставлять привилегии никому. +- `user` — Указывает пользователя, которому этот пользователь может выдавать привилегии. +- `role` — Указывает роль, которой этот пользователь может выдавать привилегии. +- `ANY` — Этот пользователь может выдавать привилегии кому угодно. Значение по умолчанию. +- `NONE` — Этот пользователь не может выдавать привилегии никому. -Вы можете исключить любого пользователя или роль с помощью выражения `EXCEPT`. Например, `CREATE USER user1 GRANTEES ANY EXCEPT user2`. Это означает, что если у `user1` есть какие‑то привилегии, выданные с опцией `GRANT OPTION`, он сможет предоставлять эти привилегии кому угодно, кроме `user2`. +Вы можете исключить любого пользователя или роль с помощью выражения `EXCEPT`. Например, `CREATE USER user1 GRANTEES ANY EXCEPT user2`. Это означает, что если у `user1` есть некоторые привилегии, выданные с `GRANT OPTION`, он сможет выдавать эти привилегии кому угодно, кроме `user2`. ## Примеры -Создайте учетную запись пользователя `mira` и установите для неё пароль `qwerty`: +Создайте учетную запись пользователя `mira` с паролем `qwerty`: ```sql CREATE USER mira HOST IP '127.0.0.1' IDENTIFIED WITH sha256_password BY 'qwerty'; ``` -`mira` должна запускать клиентское приложение на хосте, где запущен сервер ClickHouse. +Клиентское приложение `mira` следует запускать на хосте, где запущен сервер ClickHouse. -Создайте учётную запись пользователя `john`, назначьте ей роли и сделайте эти роли ролями по умолчанию: +Создайте учетную запись пользователя `john`, назначьте ей роли и сделайте эти роли ролями по умолчанию: ```sql CREATE USER john DEFAULT ROLE role1, role2; @@ -244,21 +244,21 @@ CREATE USER john DEFAULT ROLE role1, role2; CREATE USER john DEFAULT ROLE ALL; ``` -Если в дальнейшем пользователю `john` будет назначена какая‑либо роль, она автоматически станет ролью по умолчанию. +Когда в дальнейшем пользователю `john` будет назначена какая-либо роль, она автоматически станет ролью по умолчанию. -Создайте учетную запись пользователя `john` и сделайте так, чтобы все назначаемые ему в будущем роли становились ролями по умолчанию, за исключением `role1` и `role2`: +Создайте учетную запись пользователя `john` и сделайте все его будущие роли ролями по умолчанию, за исключением ролей `role1` и `role2`: ```sql CREATE USER john DEFAULT ROLE ALL EXCEPT role1, role2; ``` -Создайте учетную запись пользователя `john` и разрешите этому пользователю передавать свои привилегии пользователю `jack`: +Создайте учётную запись пользователя `john` и разрешите ему передавать свои привилегии пользователю `jack`: ```sql CREATE USER john GRANTEES jack; ``` -Используйте параметр запроса, чтобы создать учетную запись пользователя `john`: +Используйте параметр запроса для создания учетной записи пользователя `john`: ```sql SET param_user=john; diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/statements/select/index.md b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/statements/select/index.md index d0396d7f714..5289a4147e7 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/statements/select/index.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/statements/select/index.md @@ -7,14 +7,10 @@ title: 'Запрос SELECT' doc_type: 'reference' --- - - # Запрос SELECT Запросы `SELECT` выполняют извлечение данных. По умолчанию запрошенные данные возвращаются клиенту, а в сочетании с [INSERT INTO](../../../sql-reference/statements/insert-into.md) могут быть перенаправлены в другую таблицу. - - ## Синтаксис {#syntax} ```sql @@ -64,7 +60,6 @@ SELECT [DISTINCT [ON (column1, column2, ...)]] expr_list - [Секция INTO OUTFILE](../../../sql-reference/statements/select/into-outfile.md) - [Секция FORMAT](../../../sql-reference/statements/select/format.md) - ## Секция SELECT {#select-clause} [Выражения](/sql-reference/syntax#expressions), указанные в секции `SELECT`, вычисляются после завершения всех операций в секциях, описанных выше. Эти выражения работают так, как если бы они применялись к отдельным строкам результата. Если выражения в секции `SELECT` содержат агрегатные функции, то ClickHouse обрабатывает агрегатные функции и выражения, используемые в качестве их аргументов, во время агрегации [GROUP BY](/sql-reference/statements/select/group-by). @@ -180,7 +175,6 @@ Code: 42. DB::Exception: Received from localhost:9000. DB::Exception: Number of Дополнительную информацию см. в разделе «Настройки». Возможно использование внешней сортировки (сохранение временных таблиц на диск) и внешней агрегации. - ## Модификаторы SELECT {#select-modifiers} В запросах `SELECT` можно использовать следующие модификаторы. @@ -221,7 +215,6 @@ SELECT * REPLACE(i + 1 AS i) EXCEPT (j) APPLY(sum) from columns_transformers; └─────────────────┴────────┘ ``` - ## SETTINGS в запросе SELECT {#settings-in-select-query} Необходимые настройки можно указать непосредственно в запросе `SELECT`. Значение настройки применяется только к этому запросу и сбрасывается до значения по умолчанию или предыдущего значения после выполнения запроса. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/statements/system.md b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/statements/system.md index ab6624a748c..3b298e6b66b 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/statements/system.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/statements/system.md @@ -12,35 +12,31 @@ import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; # Операторы SYSTEM - - -## SYSTEM RELOAD EMBEDDED DICTIONARIES {#reload-embedded-dictionaries} +## SYSTEM RELOAD EMBEDDED DICTIONARIES \{#reload-embedded-dictionaries\} Перезагружает все [внутренние словари](../../sql-reference/dictionaries/index.md). По умолчанию внутренние словари отключены. -Всегда возвращает `Ok.` независимо от результата обновления внутреннего словаря. - +Всегда возвращает `Ok.` независимо от результата обновления внутренних словарей. -## SYSTEM RELOAD DICTIONARIES {#reload-dictionaries} +## SYSTEM RELOAD DICTIONARIES -Перезагружает все словари, которые были успешно загружены ранее. -По умолчанию словари загружаются по требованию (см. [dictionaries_lazy_load](../../operations/server-configuration-parameters/settings.md#dictionaries_lazy_load)), поэтому вместо автоматической загрузки при запуске они инициализируются при первом обращении через функцию dictGet или SELECT из таблиц с ENGINE = Dictionary. Запрос `SYSTEM RELOAD DICTIONARIES` перезагружает такие словари (LOADED). -Всегда возвращает `Ok.` независимо от результата обновления словаря. +Запрос `SYSTEM RELOAD DICTIONARIES` перезагружает словари со статусом `LOADED` (см. столбец `status` таблицы [`system.dictionaries`](/operations/system-tables/dictionaries)), то есть словари, которые ранее были успешно загружены. +По умолчанию словари загружаются лениво (см. [dictionaries_lazy_load](../../operations/server-configuration-parameters/settings.md#dictionaries_lazy_load)), поэтому вместо автоматической загрузки при запуске они инициализируются при первом обращении через функцию [`dictGet`](/sql-reference/functions/ext-dict-functions#dictGet) или при выполнении `SELECT` из таблиц с `ENGINE = Dictionary`. **Синтаксис** ```sql -SYSTEM RELOAD DICTIONARIES [ON CLUSTER cluster_name] +SYSTEM RELOAD DICTIONARIES [ON CLUSTER имя_кластера] ``` -## SYSTEM RELOAD DICTIONARY {#reload-dictionary} +## SYSTEM RELOAD DICTIONARY -Полностью перезагружает словарь `dictionary_name` независимо от его состояния (LOADED / NOT_LOADED / FAILED). +Полностью перезагружает словарь `dictionary_name`, независимо от его состояния (LOADED / NOT_LOADED / FAILED). Всегда возвращает `Ok.` независимо от результата обновления словаря. ```sql -SYSTEM RELOAD DICTIONARY [ON CLUSTER cluster_name] dictionary_name +SYSTEM RELOAD DICTIONARY [ON CLUSTER имя_кластера] имя_словаря ``` Статус словаря можно проверить, выполнив запрос к таблице `system.dictionaries`. @@ -50,10 +46,11 @@ SELECT name, status FROM system.dictionaries; ``` -## SYSTEM RELOAD MODELS {#reload-models} +## SYSTEM RELOAD MODELS :::note -Эта команда и `SYSTEM RELOAD MODEL` только выгружают модели CatBoost из clickhouse-library-bridge. Функция `catboostEvaluate()` загружает модель при первом обращении, если она ещё не загружена. +Эта команда и `SYSTEM RELOAD MODEL` только выгружают модели CatBoost из clickhouse-library-bridge. Функция `catboostEvaluate()` +загружает модель при первом обращении, если она ещё не загружена. ::: Выгружает все модели CatBoost. @@ -61,80 +58,73 @@ SELECT name, status FROM system.dictionaries; **Синтаксис** ```sql -SYSTEM RELOAD MODELS [ON CLUSTER cluster_name] +SYSTEM RELOAD MODELS [ON CLUSTER имя_кластера] ``` -## SYSTEM RELOAD MODEL {#reload-model} +## SYSTEM RELOAD MODEL -Перезагружает модель CatBoost, расположенную по пути `model_path`. +Выгружает из памяти модель CatBoost, расположенную по пути `model_path`. **Синтаксис** ```sql -SYSTEM RELOAD MODEL [ON CLUSTER cluster_name] +SYSTEM RELOAD MODEL [ON CLUSTER имя_кластера] <путь_модели> ``` -## SYSTEM RELOAD FUNCTIONS {#reload-functions} +## ФУНКЦИИ SYSTEM RELOAD Перезагружает все зарегистрированные [исполняемые пользовательские функции](/sql-reference/functions/udf#executable-user-defined-functions) или одну из них из конфигурационного файла. **Синтаксис** ```sql -SYSTEM RELOAD FUNCTIONS [ON CLUSTER cluster_name] -SYSTEM RELOAD FUNCTION [ON CLUSTER cluster_name] function_name +SYSTEM RELOAD FUNCTIONS [ON CLUSTER имя_кластера] +SYSTEM RELOAD FUNCTION [ON CLUSTER имя_кластера] имя_функции ``` -## SYSTEM RELOAD ASYNCHRONOUS METRICS {#reload-asynchronous-metrics} +## SYSTEM RELOAD ASYNCHRONOUS METRICS -Пересчитывает все [асинхронные метрики](../../operations/system-tables/asynchronous_metrics.md). Поскольку асинхронные метрики периодически обновляются на основе параметра [asynchronous_metrics_update_period_s](../../operations/server-configuration-parameters/settings.md), их ручное обновление с помощью данной команды обычно не требуется. +Пересчитывает все [асинхронные метрики](../../operations/system-tables/asynchronous_metrics.md). Поскольку асинхронные метрики периодически обновляются в соответствии с параметром конфигурации [asynchronous_metrics_update_period_s](../../operations/server-configuration-parameters/settings.md), их ручное обновление с помощью этого оператора, как правило, не требуется. ```sql -SYSTEM RELOAD ASYNCHRONOUS METRICS [ON CLUSTER cluster_name] +SYSTEM RELOAD ASYNCHRONOUS METRICS [ON CLUSTER имя_кластера] ``` -## SYSTEM DROP DNS CACHE {#drop-dns-cache} - -Очищает внутренний DNS-кеш ClickHouse. В некоторых случаях (для старых версий ClickHouse) необходимо использовать эту команду при изменении инфраструктуры (например, при изменении IP-адреса другого сервера ClickHouse или сервера, используемого словарями). - -Для более удобного (автоматического) управления кешем см. параметры `disable_internal_dns_cache`, `dns_cache_max_entries`, `dns_cache_update_period`. +## SYSTEM DROP DNS CACHE \{#drop-dns-cache\} +Очищает внутренний DNS-кэш ClickHouse. Иногда (для старых версий ClickHouse) необходимо использовать эту команду при изменении инфраструктуры (при изменении IP-адреса другого сервера ClickHouse или сервера, используемого словарями). -## SYSTEM DROP MARK CACHE {#drop-mark-cache} +Для более удобного (автоматического) управления кэшем см. параметры `disable_internal_dns_cache`, `dns_cache_max_entries`, `dns_cache_update_period`. -Очищает кеш засечек. +## SYSTEM DROP MARK CACHE \{#drop-mark-cache\} +Очищает кэш меток. -## SYSTEM DROP ICEBERG METADATA CACHE {#drop-iceberg-metadata-cache} +## SYSTEM DROP ICEBERG METADATA CACHE \{#drop-iceberg-metadata-cache\} Очищает кэш метаданных Iceberg. - -## SYSTEM DROP TEXT INDEX DICTIONARY CACHE {#drop-text-index-dictionary-cache} +## SYSTEM DROP TEXT INDEX DICTIONARY CACHE \{#drop-text-index-dictionary-cache\} Очищает кэш словаря текстового индекса. +## SYSTEM DROP TEXT INDEX HEADER CACHE \{#drop-text-index-header-cache\} -## SYSTEM DROP TEXT INDEX HEADER CACHE {#drop-text-index-header-cache} - -Очищает кеш заголовков текстовых индексов. - +Очищает кэш заголовков текстового индекса. -## SYSTEM DROP TEXT INDEX POSTINGS CACHE {#drop-text-index-postings-cache} +## SYSTEM DROP TEXT INDEX POSTINGS CACHE \{#drop-text-index-postings-cache\} Очищает кэш постингов текстового индекса. - -## SYSTEM DROP TEXT INDEX CACHES {#drop-text-index-caches} +## SYSTEM DROP TEXT INDEX CACHES \{#drop-text-index-caches\} Очищает кэш заголовков текстового индекса, кэш словаря и кэш постингов. - -## SYSTEM DROP REPLICA {#drop-replica} +## SYSTEM DROP REPLICA Неактивные реплики таблиц `ReplicatedMergeTree` можно удалить с помощью следующего синтаксиса: @@ -145,17 +135,17 @@ SYSTEM DROP REPLICA 'replica_name'; SYSTEM DROP REPLICA 'replica_name' FROM ZKPATH '/path/to/table/in/zk'; ``` -Запросы удаляют путь реплики `ReplicatedMergeTree` в ZooKeeper. Это полезно, когда реплика неактивна и её метаданные невозможно удалить из ZooKeeper командой `DROP TABLE`, поскольку такой таблицы больше не существует. Команда удаляет только неактивные/устаревшие реплики и не может удалить локальную реплику — для этого используйте `DROP TABLE`. `DROP REPLICA` не удаляет таблицы и не удаляет данные или метаданные с диска. +Запросы удаляют путь к реплике `ReplicatedMergeTree` в ZooKeeper. Это полезно, когда реплика неактивна (мертвая), и её метаданные не могут быть удалены из ZooKeeper с помощью `DROP TABLE`, потому что соответствующей таблицы больше не существует. Будет удалена только неактивная/устаревшая реплика; локальную реплику таким образом удалить нельзя, для неё используйте `DROP TABLE`. `DROP REPLICA` не удаляет таблицы и не удаляет какие‑либо данные или метаданные с диска. -Первый вариант удаляет метаданные реплики `'replica_name'` таблицы `database.table`. -Второй выполняет то же самое для всех реплицируемых таблиц в базе данных. -Третий выполняет то же самое для всех реплицируемых таблиц на локальном сервере. -Четвёртый вариант полезен для удаления метаданных неактивной реплики, когда все остальные реплики таблицы были удалены. Требуется явно указать путь к таблице. Это должен быть тот же путь, который был передан в качестве первого аргумента движка `ReplicatedMergeTree` при создании таблицы. +Первый запрос удаляет метаданные реплики `'replica_name'` таблицы `database.table`. +Второй делает то же самое для всех реплицируемых таблиц в базе данных. +Третий делает то же самое для всех реплицируемых таблиц на локальном сервере. +Четвёртый полезен для удаления метаданных неактивной (мертвой) реплики, когда все остальные реплики таблицы были удалены. Для него требуется явно указать путь к таблице. Он должен совпадать с путём, который был передан в первый аргумент движка `ReplicatedMergeTree` при создании таблицы. -## SYSTEM DROP DATABASE REPLICA {#drop-database-replica} +## SYSTEM DROP DATABASE REPLICA -Неработающие реплики баз данных `Replicated` можно удалить с помощью следующего синтаксиса: +«Мёртвые» реплики баз данных с движком `Replicated` можно удалить, используя следующий синтаксис: ```sql SYSTEM DROP DATABASE REPLICA 'replica_name' [FROM SHARD 'shard_name'] FROM DATABASE database; @@ -163,182 +153,183 @@ SYSTEM DROP DATABASE REPLICA 'replica_name' [FROM SHARD 'shard_name']; SYSTEM DROP DATABASE REPLICA 'replica_name' [FROM SHARD 'shard_name'] FROM ZKPATH '/path/to/table/in/zk'; ``` -Аналогично `SYSTEM DROP REPLICA`, но удаляет путь реплики базы данных `Replicated` из ZooKeeper в случае, когда отсутствует база данных для выполнения `DROP DATABASE`. Обратите внимание, что данная команда не удаляет реплики `ReplicatedMergeTree` (поэтому может также потребоваться выполнение `SYSTEM DROP REPLICA`). Имена шарда и реплики — это имена, которые были указаны в аргументах движка `Replicated` при создании базы данных. Эти имена также можно получить из столбцов `database_shard_name` и `database_replica_name` в таблице `system.clusters`. Если предложение `FROM SHARD` отсутствует, то `replica_name` должно быть полным именем реплики в формате `shard_name|replica_name`. - +Аналогично команде `SYSTEM DROP REPLICA`, но удаляет путь реплики базы данных `Replicated` в ZooKeeper, когда нет самой базы данных, над которой можно выполнить `DROP DATABASE`. Обратите внимание, что эта команда не удаляет реплики `ReplicatedMergeTree` (поэтому вам также может понадобиться `SYSTEM DROP REPLICA`). Имена шарда и реплики — это имена, которые были указаны в аргументах движка `Replicated` при создании базы данных. Кроме того, эти имена можно получить из столбцов `database_shard_name` и `database_replica_name` в `system.clusters`. Если предложение `FROM SHARD` отсутствует, то `replica_name` должен быть полным именем реплики в формате `shard_name|replica_name`. -## SYSTEM DROP UNCOMPRESSED CACHE {#drop-uncompressed-cache} -Очищает кэш несжатых данных. -Кэш несжатых данных включается и отключается с помощью настройки [`use_uncompressed_cache`](../../operations/settings/settings.md#use_uncompressed_cache) на уровне запроса, пользователя или профиля. -Размер кэша настраивается с помощью серверной настройки [`uncompressed_cache_size`](../../operations/server-configuration-parameters/settings.md#uncompressed_cache_size). +## SYSTEM DROP UNCOMPRESSED CACHE \{#drop-uncompressed-cache\} +Очищает кеш несжатых данных. +Кеш несжатых данных включается и отключается настройкой на уровне запроса/пользователя/профиля [`use_uncompressed_cache`](../../operations/settings/settings.md#use_uncompressed_cache). +Его размер можно настроить с помощью настройки на уровне сервера [`uncompressed_cache_size`](../../operations/server-configuration-parameters/settings.md#uncompressed_cache_size). -## SYSTEM DROP COMPILED EXPRESSION CACHE {#drop-compiled-expression-cache} +## SYSTEM DROP COMPILED EXPRESSION CACHE \{#drop-compiled-expression-cache\} Очищает кэш скомпилированных выражений. -Кэш скомпилированных выражений включается и отключается с помощью настройки [`compile_expressions`](../../operations/settings/settings.md#compile_expressions) на уровне запроса, пользователя или профиля. +Кэш скомпилированных выражений управляется настройкой на уровне запроса, пользователя или профиля [`compile_expressions`](../../operations/settings/settings.md#compile_expressions). +## SYSTEM DROP QUERY CONDITION CACHE \{#drop-query-condition-cache\} -## SYSTEM DROP QUERY CONDITION CACHE {#drop-query-condition-cache} +Очищает кеш условий запросов. -Очищает кеш условий запроса. - - -## SYSTEM DROP QUERY CACHE {#drop-query-cache} +## SYSTEM DROP QUERY CACHE ```sql SYSTEM DROP QUERY CACHE; SYSTEM DROP QUERY CACHE TAG '' ``` -Очищает [кеш запросов](../../operations/query-cache.md). -Если указан тег, удаляются только записи кеша запросов с указанным тегом. +Очищает [кэш запросов](../../operations/query-cache.md). +Если указан тег, удаляются только записи кэша запросов с этим тегом. + +## SYSTEM DROP FORMAT SCHEMA CACHE -## SYSTEM DROP FORMAT SCHEMA CACHE {#system-drop-schema-format} +Очищает кэш для схем, загруженных из [`format_schema_path`](../../operations/server-configuration-parameters/settings.md#format_schema_path). -Очищает кэш схем, загруженных из [`format_schema_path`](../../operations/server-configuration-parameters/settings.md#format_schema_path). +Поддерживаемые варианты: -Поддерживаемые типы: +* Protobuf: удаляет импортированные определения Protobuf-сообщений из памяти. +* Files: удаляет кэшированные файлы схем, сохранённые локально в [`format_schema_path`](../../operations/server-configuration-parameters/settings.md#format_schema_path), которые были сгенерированы, когда для `format_schema_source` задано значение `query`. -- Protobuf: Удаляет из памяти импортированные определения сообщений Protobuf. -- Files: Удаляет кэшированные файлы схем, хранящиеся локально в [`format_schema_path`](../../operations/server-configuration-parameters/settings.md#format_schema_path), которые создаются при установке `format_schema_source` в значение `query`. - Примечание: Если тип не указан, очищаются оба кэша. +Примечание: если цель не указана, оба кэша очищаются. ```sql SYSTEM DROP FORMAT SCHEMA CACHE [FOR Protobuf/Files] ``` -## SYSTEM FLUSH LOGS {#flush-logs} +## SYSTEM FLUSH LOGS -Сбрасывает буферизованные сообщения журнала в системные таблицы, например system.query_log. Полезна в основном для отладки, так как большинство системных таблиц имеют интервал сброса по умолчанию 7,5 секунд. +Сбрасывает буферизованные сообщения журнала в системные таблицы, например `system.query_log`. В основном полезно для отладки, поскольку для большинства системных таблиц интервал сброса по умолчанию составляет 7,5 секунды. Эта команда также создаст системные таблицы, даже если очередь сообщений пуста. ```sql -SYSTEM FLUSH LOGS [ON CLUSTER cluster_name] [log_name|[database.table]] [, ...] +SYSTEM FLUSH LOGS [ON CLUSTER имя_кластера] [имя_журнала|[база_данных.таблица]] [, ...] ``` -Если не требуется сбрасывать всё, можно сбросить один или несколько отдельных журналов, указав их имя или целевую таблицу: +Если вы не хотите сбрасывать всё содержимое, можно сбросить один или несколько отдельных логов, передав их имя или целевую таблицу: ```sql SYSTEM FLUSH LOGS query_log, system.query_views_log; ``` -## SYSTEM RELOAD CONFIG {#reload-config} +## SYSTEM RELOAD CONFIG -Перезагружает конфигурацию ClickHouse. Используется, когда конфигурация хранится в ZooKeeper. Обратите внимание, что `SYSTEM RELOAD CONFIG` не перезагружает конфигурацию пользователей (`USER`), хранящуюся в ZooKeeper, а только конфигурацию пользователей из файла `users.xml`. Для перезагрузки всей конфигурации пользователей используйте `SYSTEM RELOAD USERS`. +Перезагружает конфигурацию ClickHouse. Используется, когда конфигурация хранится в ZooKeeper. Обратите внимание, что `SYSTEM RELOAD CONFIG` не перезагружает конфигурацию `USER`, хранящуюся в ZooKeeper, а только конфигурацию `USER`, которая хранится в `users.xml`. Чтобы перезагрузить всю конфигурацию `USER`, используйте `SYSTEM RELOAD USERS`. ```sql SYSTEM RELOAD CONFIG [ON CLUSTER cluster_name] ``` -## SYSTEM RELOAD USERS {#reload-users} +## SYSTEM RELOAD USERS -Перезагружает все хранилища управления доступом, включая: users.xml, локальное дисковое хранилище доступа, реплицируемое (в ZooKeeper) хранилище доступа. +Перезагружает все хранилища доступа, включая users.xml, локальное хранилище доступа на диске и реплицируемое (в ZooKeeper) хранилище доступа. ```sql SYSTEM RELOAD USERS [ON CLUSTER cluster_name] ``` -## SYSTEM SHUTDOWN {#shutdown} - - - -Корректно завершает работу ClickHouse (аналогично командам `service clickhouse-server stop` / `kill {$pid_clickhouse-server}`) +## SYSTEM SHUTDOWN \{#shutdown\} + -## SYSTEM KILL {#kill} +Выполняет штатное завершение работы ClickHouse (аналогично `service clickhouse-server stop` / `kill {$pid_clickhouse-server}`) -Завершает процесс ClickHouse (аналогично `kill -9 {$ pid_clickhouse-server}`) +## SYSTEM KILL \{#kill\} +Принудительно завершает процесс ClickHouse (аналогично `kill -9 {$ pid_clickhouse-server}`) -## Управление распределёнными таблицами {#managing-distributed-tables} +## Управление распределёнными таблицами \{#managing-distributed-tables\} -ClickHouse может управлять [распределёнными](../../engines/table-engines/special/distributed.md) таблицами. Когда пользователь вставляет данные в эти таблицы, ClickHouse сначала создаёт очередь данных, которые должны быть отправлены на узлы кластера, а затем асинхронно отправляет их. Управлять обработкой очереди можно с помощью запросов [`STOP DISTRIBUTED SENDS`](#stop-distributed-sends), [FLUSH DISTRIBUTED](#flush-distributed) и [`START DISTRIBUTED SENDS`](#start-distributed-sends). Также можно синхронно вставлять распределённые данные с помощью настройки [`distributed_foreground_insert`](../../operations/settings/settings.md#distributed_foreground_insert). +ClickHouse может управлять [распределёнными](../../engines/table-engines/special/distributed.md) таблицами. Когда пользователь вставляет данные в эти таблицы, ClickHouse сначала создаёт очередь данных, подлежащих отправке на узлы кластера, а затем асинхронно отправляет их. Вы можете управлять обработкой очереди с помощью запросов [`STOP DISTRIBUTED SENDS`](#stop-distributed-sends), [FLUSH DISTRIBUTED](#flush-distributed) и [`START DISTRIBUTED SENDS`](#start-distributed-sends). Вы также можете синхронно вставлять распределённые данные с помощью настройки [`distributed_foreground_insert`](../../operations/settings/settings.md#distributed_foreground_insert). -### SYSTEM STOP DISTRIBUTED SENDS {#stop-distributed-sends} +### SYSTEM STOP DISTRIBUTED SENDS -Отключает фоновое распределение данных при вставке данных в распределённые таблицы. +Отключает фоновое распределение данных при вставке в распределённые таблицы. ```sql -SYSTEM STOP DISTRIBUTED SENDS [db.] [ON CLUSTER cluster_name] +SYSTEM STOP DISTRIBUTED SENDS [db.]<имя_распределённой_таблицы> [ON CLUSTER имя_кластера] ``` :::note -Если включена настройка [`prefer_localhost_replica`](../../operations/settings/settings.md#prefer_localhost_replica) (по умолчанию), данные в локальный шард всё равно будут вставлены. +Если параметр [`prefer_localhost_replica`](../../operations/settings/settings.md#prefer_localhost_replica) включён (по умолчанию), данные всё равно будут записаны в локальный шард. ::: -### SYSTEM FLUSH DISTRIBUTED {#flush-distributed} -Заставляет ClickHouse синхронно отправлять данные на узлы кластера. Если какие-либо узлы недоступны, ClickHouse выбрасывает исключение и останавливает выполнение запроса. Запрос можно повторять до тех пор, пока он не выполнится успешно, что произойдёт, когда все узлы снова будут в сети. +### SYSTEM FLUSH DISTRIBUTED -Также можно переопределить некоторые настройки с помощью секции `SETTINGS`, что может быть полезно для обхода некоторых временных ограничений, таких как `max_concurrent_queries_for_all_users` или `max_memory_usage`. +Принудительно инициирует синхронную отправку данных ClickHouse на узлы кластера. Если какие-либо узлы недоступны, ClickHouse генерирует исключение и останавливает выполнение запроса. Вы можете повторять запрос до тех пор, пока он не выполнится успешно, то есть пока все узлы снова не станут доступными. + +Вы также можете переопределить некоторые настройки с помощью оператора `SETTINGS`, что может быть полезно для обхода временных ограничений, таких как `max_concurrent_queries_for_all_users` или `max_memory_usage`. ```sql SYSTEM FLUSH DISTRIBUTED [db.] [ON CLUSTER cluster_name] [SETTINGS ...] ``` :::note -Каждый ожидающий блок хранится на диске с настройками из исходного запроса INSERT, поэтому иногда может потребоваться переопределить настройки. +Каждый блок в ожидании обработки сохраняется на диск с параметрами из исходного запроса INSERT, поэтому иногда может потребоваться переопределить эти параметры. ::: -### SYSTEM START DISTRIBUTED SENDS {#start-distributed-sends} -Включает фоновое распределение данных при вставке данных в распределённые таблицы. +### SYSTEM START DISTRIBUTED SENDS + +Включает фоновое распределение данных при вставке в распределённые таблицы. ```sql SYSTEM START DISTRIBUTED SENDS [db.] [ON CLUSTER cluster_name] ``` -### SYSTEM STOP LISTEN {#stop-listen} -Закрывает сокет и корректно завершает существующие соединения с сервером на указанном порту с указанным протоколом. +### SYSTEM STOP LISTEN + +Закрывает сокет и корректно завершает существующие подключения к серверу на указанном порту с использованием указанного протокола. -Однако если соответствующие настройки протокола не были указаны в конфигурации clickhouse-server, эта команда не будет иметь эффекта. +Однако, если соответствующие настройки протокола не были заданы в конфигурации clickhouse-server, эта команда не окажет никакого действия. ```sql -SYSTEM STOP LISTEN [ON CLUSTER cluster_name] [QUERIES ALL | QUERIES DEFAULT | QUERIES CUSTOM | TCP | TCP WITH PROXY | TCP SECURE | HTTP | HTTPS | MYSQL | GRPC | POSTGRESQL | PROMETHEUS | CUSTOM 'protocol'] +SYSTEM STOP LISTEN [ON CLUSTER имя_кластера] [QUERIES ALL | QUERIES DEFAULT | QUERIES CUSTOM | TCP | TCP WITH PROXY | TCP SECURE | HTTP | HTTPS | MYSQL | GRPC | POSTGRESQL | PROMETHEUS | CUSTOM 'протокол'] ``` -- Если указан модификатор `CUSTOM 'protocol'`, будет остановлен пользовательский протокол с указанным именем, определённый в секции protocols конфигурации сервера. -- Если указан модификатор `QUERIES ALL [EXCEPT .. [,..]]`, останавливаются все протоколы, если они не указаны в секции `EXCEPT`. -- Если указан модификатор `QUERIES DEFAULT [EXCEPT .. [,..]]`, останавливаются все протоколы по умолчанию, если они не указаны в секции `EXCEPT`. -- Если указан модификатор `QUERIES CUSTOM [EXCEPT .. [,..]]`, останавливаются все пользовательские протоколы, если они не указаны в секции `EXCEPT`. +* Если указан модификатор `CUSTOM 'protocol'`, будет остановлен пользовательский протокол с указанным именем, определённый в секции `protocols` конфигурации сервера. +* Если указан модификатор `QUERIES ALL [EXCEPT .. [,..]]`, будут остановлены все протоколы, за исключением явно указанных в операторе `EXCEPT`. +* Если указан модификатор `QUERIES DEFAULT [EXCEPT .. [,..]]`, будут остановлены все протоколы по умолчанию, за исключением явно указанных в операторе `EXCEPT`. +* Если указан модификатор `QUERIES CUSTOM [EXCEPT .. [,..]]`, будут остановлены все пользовательские протоколы, за исключением явно указанных в операторе `EXCEPT`. -### SYSTEM START LISTEN {#start-listen} -Разрешает установку новых соединений по указанным протоколам. +### SYSTEM START LISTEN -Однако если сервер на указанном порту и протоколе не был остановлен с помощью команды SYSTEM STOP LISTEN, эта команда не будет иметь эффекта. +Позволяет устанавливать новые соединения по указанным протоколам. + +Однако если сервер на указанном порту и протоколе не был остановлен с помощью команды SYSTEM STOP LISTEN, эта команда не подействует. ```sql SYSTEM START LISTEN [ON CLUSTER cluster_name] [QUERIES ALL | QUERIES DEFAULT | QUERIES CUSTOM | TCP | TCP WITH PROXY | TCP SECURE | HTTP | HTTPS | MYSQL | GRPC | POSTGRESQL | PROMETHEUS | CUSTOM 'protocol'] ``` -## Управление таблицами MergeTree {#managing-mergetree-tables} +## Управление таблицами MergeTree \{#managing-mergetree-tables\} -ClickHouse может управлять фоновыми процессами в таблицах [MergeTree](../../engines/table-engines/mergetree-family/mergetree.md). +ClickHouse может управлять фоновыми процессами в таблицах типа [MergeTree](../../engines/table-engines/mergetree-family/mergetree.md). -### SYSTEM STOP MERGES {#stop-merges} +### SYSTEM STOP MERGES -Позволяет остановить фоновые слияния для таблиц семейства MergeTree: +Позволяет останавливать фоновые слияния для таблиц семейства MergeTree: ```sql -SYSTEM STOP MERGES [ON CLUSTER cluster_name] [ON VOLUME | [db.]merge_tree_family_table_name] +SYSTEM STOP MERGES [ON CLUSTER имя_кластера] [ON VOLUME <имя_тома> | [бд.]имя_таблицы_семейства_merge_tree] ``` :::note -`DETACH / ATTACH` таблицы запустит фоновые слияния для таблицы, даже если слияния были остановлены для всех таблиц MergeTree ранее. +Операции `DETACH / ATTACH` таблицы запустят фоновые слияния для этой таблицы даже в том случае, если слияния были остановлены для всех таблиц MergeTree. ::: -### SYSTEM START MERGES {#start-merges} + +### SYSTEM START MERGES @@ -348,191 +339,207 @@ SYSTEM STOP MERGES [ON CLUSTER cluster_name] [ON VOLUME | [db.]mer SYSTEM START MERGES [ON CLUSTER cluster_name] [ON VOLUME | [db.]merge_tree_family_table_name] ``` -### SYSTEM STOP TTL MERGES {#stop-ttl-merges} -Позволяет остановить фоновое удаление старых данных согласно [выражению TTL](../../engines/table-engines/mergetree-family/mergetree.md#table_engine-mergetree-ttl) для таблиц семейства MergeTree. -Возвращает `Ok.`, даже если таблица не существует или таблица не использует движок MergeTree. Возвращает ошибку, если база данных не существует: +### SYSTEM STOP TTL MERGES + +Позволяет остановить фоновое удаление старых данных в соответствии с [TTL-выражением](../../engines/table-engines/mergetree-family/mergetree.md#table_engine-mergetree-ttl) для таблиц семейства MergeTree. +Возвращает `Ok.` даже если таблица не существует или таблица не использует движок MergeTree. Возвращает ошибку, если база данных не существует. ```sql -SYSTEM STOP TTL MERGES [ON CLUSTER cluster_name] [[db.]merge_tree_family_table_name] +SYSTEM STOP TTL MERGES [ON CLUSTER имя_кластера] [[бд.]имя_таблицы_семейства_merge_tree] ``` -### SYSTEM START TTL MERGES {#start-ttl-merges} -Позволяет запустить фоновое удаление старых данных согласно [выражению TTL](../../engines/table-engines/mergetree-family/mergetree.md#table_engine-mergetree-ttl) для таблиц семейства MergeTree. -Возвращает `Ok.`, даже если таблица не существует. Возвращает ошибку, если база данных не существует: +### SYSTEM START TTL MERGES + +Позволяет запустить фоновое удаление старых данных в соответствии с [TTL-выражением](../../engines/table-engines/mergetree-family/mergetree.md#table_engine-mergetree-ttl) для таблиц семейства MergeTree.\ +Возвращает `Ok.`, даже если таблица не существует. Возвращает ошибку, если база данных не существует. ```sql SYSTEM START TTL MERGES [ON CLUSTER cluster_name] [[db.]merge_tree_family_table_name] ``` -### SYSTEM STOP MOVES {#stop-moves} -Позволяет остановить фоновое перемещение данных согласно [табличному выражению TTL с предложением TO VOLUME или TO DISK](../../engines/table-engines/mergetree-family/mergetree.md#mergetree-table-ttl) для таблиц семейства MergeTree. -Возвращает `Ok.`, даже если таблица не существует. Возвращает ошибку, если база данных не существует: +### SYSTEM STOP MOVES + +Позволяет остановить фоновое перемещение данных в соответствии с [TTL-выражением таблицы с оператором TO VOLUME или TO DISK](../../engines/table-engines/mergetree-family/mergetree.md#mergetree-table-ttl) для таблиц семейства MergeTree.\ +Возвращает `Ok.` даже, если таблица не существует. Возвращает ошибку, если база данных не существует: ```sql SYSTEM STOP MOVES [ON CLUSTER cluster_name] [[db.]merge_tree_family_table_name] ``` -### SYSTEM START MOVES {#start-moves} -Позволяет запустить фоновое перемещение данных согласно [табличному выражению TTL с предложением TO VOLUME и TO DISK](../../engines/table-engines/mergetree-family/mergetree.md#mergetree-table-ttl) для таблиц семейства MergeTree. -Возвращает `Ok.`, даже если таблица не существует. Возвращает ошибку, если база данных не существует: +### SYSTEM START MOVES + +Позволяет запустить фоновое перемещение данных в соответствии с [TTL-выражением таблицы с операторами TO VOLUME и TO DISK](../../engines/table-engines/mergetree-family/mergetree.md#mergetree-table-ttl) для таблиц семейства MergeTree: +Возвращает `Ok.` даже если таблица отсутствует. Возвращает ошибку, если база данных не существует: ```sql SYSTEM START MOVES [ON CLUSTER cluster_name] [[db.]merge_tree_family_table_name] ``` -### SYSTEM SYSTEM UNFREEZE {#query_language-system-unfreeze} -Удаляет замороженную резервную копию с указанным именем со всех дисков. Подробнее о размораживании отдельных частей см. в [ALTER TABLE table_name UNFREEZE WITH NAME](/sql-reference/statements/alter/partition#unfreeze-partition) +### SYSTEM SYSTEM UNFREEZE + +Удаляет замороженный бэкап с указанным именем со всех дисков. Подробнее о разморозке отдельных частей см. в разделе [ALTER TABLE table_name UNFREEZE WITH NAME ](/sql-reference/statements/alter/partition#unfreeze-partition) ```sql -SYSTEM UNFREEZE WITH NAME +РАЗМОРОЗИТЬ СИСТЕМУ С ИМЕНЕМ ``` -### SYSTEM WAIT LOADING PARTS {#wait-loading-parts} -Ожидает завершения загрузки всех асинхронно загружаемых частей данных таблицы (устаревших частей данных). +### SYSTEM WAIT LOADING PARTS + +Ожидать, пока все асинхронно загружаемые части данных таблицы (устаревшие части данных) не будут загружены. ```sql SYSTEM WAIT LOADING PARTS [ON CLUSTER cluster_name] [db.]merge_tree_family_table_name ``` -## Управление таблицами ReplicatedMergeTree {#managing-replicatedmergetree-tables} +## Управление таблицами ReplicatedMergeTree \{#managing-replicatedmergetree-tables\} ClickHouse может управлять фоновыми процессами, связанными с репликацией, в таблицах [ReplicatedMergeTree](/engines/table-engines/mergetree-family/replication). -### SYSTEM STOP FETCHES {#stop-fetches} +### SYSTEM STOP FETCHES -Позволяет остановить фоновую загрузку вставленных кусков данных для таблиц семейства `ReplicatedMergeTree`. -Всегда возвращает `Ok.` независимо от движка таблицы, даже если таблица или база данных не существует. +Останавливает фоновую загрузку вставленных кусков данных для таблиц семейства `ReplicatedMergeTree`. +Всегда возвращает `Ok.` независимо от движка таблицы, а также если таблица или база данных не существует. ```sql -SYSTEM STOP FETCHES [ON CLUSTER cluster_name] [[db.]replicated_merge_tree_family_table_name] +SYSTEM STOP FETCHES [ON CLUSTER имя_кластера] [[бд.]имя_реплицируемой_таблицы_семейства_merge_tree] ``` -### SYSTEM START FETCHES {#start-fetches} + +### SYSTEM START FETCHES -Позволяет запустить фоновую загрузку вставленных кусков данных для таблиц семейства `ReplicatedMergeTree`. +Позволяет запустить фоновые загрузки вставленных частей данных для таблиц семейства `ReplicatedMergeTree`. Всегда возвращает `Ok.` независимо от движка таблицы, даже если таблица или база данных не существует. ```sql -SYSTEM START FETCHES [ON CLUSTER cluster_name] [[db.]replicated_merge_tree_family_table_name] +SYSTEM START FETCHES [ON CLUSTER имя_кластера] [[бд.]имя_таблицы_семейства_replicated_merge_tree] ``` -### SYSTEM STOP REPLICATED SENDS {#stop-replicated-sends} -Позволяет остановить фоновую отправку новых вставленных кусков данных другим репликам в кластере для таблиц семейства `ReplicatedMergeTree`: +### SYSTEM STOP REPLICATED SENDS + +Позволяет остановить фоновую отправку новых вставленных частей таблиц семейства `ReplicatedMergeTree` на другие реплики кластера: ```sql -SYSTEM STOP REPLICATED SENDS [ON CLUSTER cluster_name] [[db.]replicated_merge_tree_family_table_name] +SYSTEM STOP REPLICATED SENDS [ON CLUSTER имя_кластера] [[бд.]имя_таблицы_семейства_replicated_merge_tree] ``` -### SYSTEM START REPLICATED SENDS {#start-replicated-sends} -Позволяет запустить фоновую отправку новых вставленных кусков данных другим репликам в кластере для таблиц семейства `ReplicatedMergeTree`: +### SYSTEM START REPLICATED SENDS + +Позволяет запустить фоновые отправки новых вставленных частей на другие реплики кластера для таблиц семейства `ReplicatedMergeTree`: ```sql -SYSTEM START REPLICATED SENDS [ON CLUSTER cluster_name] [[db.]replicated_merge_tree_family_table_name] +SYSTEM START REPLICATED SENDS [ON CLUSTER имя_кластера] [[бд.]имя_таблицы_семейства_replicated_merge_tree] ``` -### SYSTEM STOP REPLICATION QUEUES {#stop-replication-queues} -Позволяет остановить фоновые задачи загрузки из очередей репликации, хранящихся в ZooKeeper, для таблиц семейства `ReplicatedMergeTree`. Возможные типы фоновых задач: слияния, загрузки, мутации, DDL-операторы с предложением ON CLUSTER: +### SYSTEM STOP REPLICATION QUEUES + +Предоставляет возможность остановить фоновые задачи загрузки (`fetch`) из очередей репликации, хранящихся в Zookeeper для таблиц семейства `ReplicatedMergeTree`. Возможные типы фоновых задач — слияния (`merges`), загрузки (`fetches`), мутации (`mutations`), операторы DDL с клаузой ON CLUSTER: ```sql -SYSTEM STOP REPLICATION QUEUES [ON CLUSTER cluster_name] [[db.]replicated_merge_tree_family_table_name] +SYSTEM STOP REPLICATION QUEUES [ON CLUSTER имя_кластера] [[бд.]имя_таблицы_семейства_replicated_merge_tree] ``` -### SYSTEM START REPLICATION QUEUES {#start-replication-queues} -Позволяет запустить фоновые задачи загрузки из очередей репликации, хранящихся в ZooKeeper, для таблиц семейства `ReplicatedMergeTree`. Возможные типы фоновых задач: слияния, загрузки, мутации, DDL-операторы с предложением ON CLUSTER: +### SYSTEM START REPLICATION QUEUES + +Позволяет запустить фоновые задачи загрузки из очередей репликации, которые хранятся в ZooKeeper для таблиц семейства `ReplicatedMergeTree`. Возможные типы фоновых задач — слияния, загрузки, мутации, DDL-операторы с предложением ON CLUSTER: ```sql -SYSTEM START REPLICATION QUEUES [ON CLUSTER cluster_name] [[db.]replicated_merge_tree_family_table_name] +SYSTEM START REPLICATION QUEUES [ON CLUSTER имя_кластера] [[бд.]имя_таблицы_семейства_replicated_merge_tree] ``` -### SYSTEM STOP PULLING REPLICATION LOG {#stop-pulling-replication-log} -Останавливает загрузку новых записей из журнала репликации в очередь репликации таблицы `ReplicatedMergeTree`. +### SYSTEM STOP PULLING REPLICATION LOG + +Прекращает загрузку новых записей из журнала репликации в очередь репликации в таблице `ReplicatedMergeTree`. ```sql SYSTEM STOP PULLING REPLICATION LOG [ON CLUSTER cluster_name] [[db.]replicated_merge_tree_family_table_name] ``` -### SYSTEM START PULLING REPLICATION LOG {#start-pulling-replication-log} -Отменяет действие `SYSTEM STOP PULLING REPLICATION LOG`. +### SYSTEM START PULLING REPLICATION LOG + +Отменяет `SYSTEM STOP PULLING REPLICATION LOG`. ```sql SYSTEM START PULLING REPLICATION LOG [ON CLUSTER cluster_name] [[db.]replicated_merge_tree_family_table_name] ``` -### SYSTEM SYNC REPLICA {#sync-replica} -Ожидает синхронизации таблицы `ReplicatedMergeTree` с другими репликами в кластере, но не более `receive_timeout` секунд. +### SYSTEM SYNC REPLICA + +Ожидает, пока таблица `ReplicatedMergeTree` не будет синхронизирована с другими репликами в кластере, но не дольше, чем `receive_timeout` секунд. ```sql -SYSTEM SYNC REPLICA [ON CLUSTER cluster_name] [db.]replicated_merge_tree_family_table_name [IF EXISTS] [STRICT | LIGHTWEIGHT [FROM 'srcReplica1'[, 'srcReplica2'[, ...]]] | PULL] +SYSTEM SYNC REPLICA [ON CLUSTER имя_кластера] [бд.]имя_таблицы_семейства_replicated_merge_tree [IF EXISTS] [STRICT | LIGHTWEIGHT [FROM 'исходная_реплика1'[, 'исходная_реплика2'[, ...]]] | PULL] ``` -После выполнения этого оператора таблица `[db.]replicated_merge_tree_family_table_name` загружает команды из общего журнала репликации в свою очередь репликации, после чего запрос ожидает, пока реплика обработает все загруженные команды. Поддерживаются следующие модификаторы: +После выполнения этого запроса `[db.]replicated_merge_tree_family_table_name` получает команды из общего журнала репликации в собственную очередь репликации, после чего запрос ожидает, пока реплика обработает все полученные команды. Поддерживаются следующие модификаторы: +* При использовании `IF EXISTS` (доступен начиная с 25.6) запрос не будет выдавать ошибку, если таблица не существует. Это полезно при добавлении новой реплики в кластер, когда она уже является частью конфигурации кластера, но таблица ещё находится в процессе создания и синхронизации. +* Если указан модификатор `STRICT`, то запрос ожидает, пока очередь репликации не опустеет. Вариант `STRICT` может никогда не завершиться успешно, если в очередь репликации постоянно добавляются новые записи. +* Если указан модификатор `LIGHTWEIGHT`, то запрос ожидает только обработки записей `GET_PART`, `ATTACH_PART`, `DROP_RANGE`, `REPLACE_RANGE` и `DROP_PART`. + Дополнительно модификатор `LIGHTWEIGHT` поддерживает необязательное предложение `FROM 'srcReplicas'`, где `'srcReplicas'` — это список имён исходных реплик, разделённых запятыми. Это расширение позволяет выполнять более целевую синхронизацию, фокусируясь только на задачах репликации, исходящих от указанных исходных реплик. +* Если указан модификатор `PULL`, то запрос получает новые записи очереди репликации из ZooKeeper, но не ожидает обработки каких-либо записей. -- С `IF EXISTS` (доступно с версии 25.6) запрос не вызовет ошибку, если таблица не существует. Это полезно при добавлении новой реплики в кластер, когда она уже является частью конфигурации кластера, но всё ещё находится в процессе создания и синхронизации таблицы. -- Если указан модификатор `STRICT`, запрос ожидает, пока очередь репликации не станет пустой. Версия `STRICT` может никогда не завершиться успешно, если в очереди репликации постоянно появляются новые записи. -- Если указан модификатор `LIGHTWEIGHT`, запрос ожидает обработки только записей `GET_PART`, `ATTACH_PART`, `DROP_RANGE`, `REPLACE_RANGE` и `DROP_PART`. - Кроме того, модификатор LIGHTWEIGHT поддерживает необязательное предложение FROM 'srcReplicas', где 'srcReplicas' — это список имён исходных реплик, разделённых запятыми. Это расширение позволяет выполнять более целенаправленную синхронизацию, фокусируясь только на задачах репликации, поступающих от указанных исходных реплик. -- Если указан модификатор `PULL`, запрос извлекает новые записи очереди репликации из ZooKeeper, но не ожидает их обработки. -### SYNC DATABASE REPLICA {#sync-database-replica} +### SYNC DATABASE REPLICA -Ожидает, пока указанная [реплицируемая база данных](/engines/database-engines/replicated) применит все изменения схемы из очереди DDL этой базы данных. +Ожидает, пока указанная [реплицируемая база данных](/engines/database-engines/replicated) не применит все изменения схемы из своей очереди DDL. **Синтаксис** ```sql -SYSTEM SYNC DATABASE REPLICA replicated_database_name; +SYSTEM SYNC DATABASE REPLICA имя_реплицируемой_бд; ``` -### SYSTEM RESTART REPLICA {#restart-replica} -Предоставляет возможность повторно инициализировать состояние сессии Zookeeper для таблицы `ReplicatedMergeTree`, сравнивает текущее состояние с Zookeeper как источником истины и добавляет задачи в очередь Zookeeper при необходимости. -Инициализация очереди репликации на основе данных ZooKeeper происходит так же, как и для оператора `ATTACH TABLE`. На короткое время таблица будет недоступна для любых операций. +### SYSTEM RESTART REPLICA + +Предоставляет возможность повторно инициализировать состояние сессии ZooKeeper для таблицы `ReplicatedMergeTree`, сравнивает текущее состояние с ZooKeeper как источником истины и при необходимости добавляет задачи в очередь ZooKeeper. +Инициализация очереди репликации на основе данных ZooKeeper происходит так же, как для инструкции `ATTACH TABLE`. В течение короткого времени таблица будет недоступна для каких-либо операций. ```sql -SYSTEM RESTART REPLICA [ON CLUSTER cluster_name] [db.]replicated_merge_tree_family_table_name +SYSTEM RESTART REPLICA [ON CLUSTER имя_кластера] [бд.]имя_реплицируемой_таблицы_семейства_merge_tree ``` -### SYSTEM RESTORE REPLICA {#restore-replica} -Восстанавливает реплику, если данные [возможно] присутствуют, но метаданные Zookeeper утеряны. +### SYSTEM RESTORE REPLICA \{#restore-replica\} -Работает только с таблицами `ReplicatedMergeTree`, доступными только для чтения. +Восстанавливает реплику, если данные, возможно, присутствуют, но метаданные ZooKeeper утеряны. + +Работает только для таблиц `ReplicatedMergeTree` в режиме только для чтения (readonly). Запрос можно выполнить после: -- Потери корня ZooKeeper `/`. -- Потери пути реплик `/replicas`. -- Потери пути отдельной реплики `/replicas/replica_name/`. +- Утраты корня ZooKeeper `/`. +- Утраты пути реплик `/replicas`. +- Утраты пути отдельной реплики `/replicas/replica_name/`. -Реплика присоединяет локально найденные части и отправляет информацию о них в Zookeeper. -Части, присутствующие на реплике до потери метаданных, не загружаются повторно с других реплик, если они не устарели (таким образом, восстановление реплики не означает повторную загрузку всех данных по сети). +Реплика прикрепляет локально найденные парты и отправляет сведения о них в ZooKeeper. +Парты, присутствовавшие на реплике до потери метаданных, не перекачиваются с других реплик, если они не устарели (то есть восстановление реплики не означает повторную загрузку всех данных по сети). :::note -Части во всех состояниях перемещаются в папку `detached/`. Части, активные до потери данных (зафиксированные), присоединяются. +Парты во всех состояниях перемещаются в каталог `detached/`. Парты, активные до потери данных (committed), прикрепляются. ::: -### SYSTEM RESTORE DATABASE REPLICA {#restore-database-replica} +### SYSTEM RESTORE DATABASE REPLICA -Восстанавливает реплику, если данные [возможно] присутствуют, но метаданные Zookeeper утеряны. +Восстанавливает реплику, если данные, возможно, присутствуют, но метаданные ZooKeeper утрачены. **Синтаксис** @@ -561,7 +568,7 @@ SYSTEM RESTORE DATABASE REPLICA repl_db; SYSTEM RESTORE REPLICA [db.]replicated_merge_tree_family_table_name [ON CLUSTER cluster_name] ``` -Альтернативный синтаксис: +Альтернативный вариант синтаксиса: ```sql SYSTEM RESTORE REPLICA [ON CLUSTER cluster_name] [db.]replicated_merge_tree_family_table_name @@ -569,7 +576,7 @@ SYSTEM RESTORE REPLICA [ON CLUSTER cluster_name] [db.]replicated_merge_tree_fami **Пример** -Создание таблицы на нескольких серверах. После потери метаданных реплики в ZooKeeper таблица будет присоединена в режиме только для чтения, так как метаданные отсутствуют. Последний запрос необходимо выполнить на каждой реплике. +Создание таблицы на нескольких серверах. После того как метаданные реплики в ZooKeeper будут утеряны, таблица будет подключена в режиме только для чтения, так как метаданные отсутствуют. Последний запрос необходимо выполнить на каждой реплике. ```sql CREATE TABLE test(n UInt32) @@ -578,46 +585,48 @@ ORDER BY n PARTITION BY n % 10; INSERT INTO test SELECT * FROM numbers(1000); --- zookeeper_delete_path("/clickhouse/tables/test", recursive=True) <- потеря корня. +-- zookeeper_delete_path("/clickhouse/tables/test", recursive=True) <- потеря корневого узла. SYSTEM RESTART REPLICA test; SYSTEM RESTORE REPLICA test; ``` -Другой способ: +Альтернативный способ: ```sql SYSTEM RESTORE REPLICA test ON CLUSTER cluster; ``` -### SYSTEM RESTART REPLICAS {#restart-replicas} -Предоставляет возможность повторно инициализировать состояние сессий Zookeeper для всех таблиц `ReplicatedMergeTree`, сравнивает текущее состояние с Zookeeper как источником истины и добавляет задачи в очередь Zookeeper при необходимости +### SYSTEM RESTART REPLICAS \{#restart-replicas\} +Позволяет повторно инициализировать состояние сессий Zookeeper для всех таблиц `ReplicatedMergeTree`, сравнивает текущее состояние с Zookeeper, выступающим в качестве источника истины, и при необходимости добавляет задачи в очередь Zookeeper. -### SYSTEM DROP FILESYSTEM CACHE {#drop-filesystem-cache} +### SYSTEM DROP FILESYSTEM CACHE -Позволяет очистить кеш файловой системы. +Позволяет очистить кэш файловой системы. ```sql SYSTEM DROP FILESYSTEM CACHE [ON CLUSTER cluster_name] ``` -### SYSTEM SYNC FILE CACHE {#sync-file-cache} + +### SYSTEM SYNC FILE CACHE :::note -Эта операция ресурсоёмкая и может быть использована некорректно. +Это слишком ресурсоёмкая операция и может использоваться неправильно. ::: -Выполняет системный вызов sync. +Выполнит системный вызов sync. ```sql SYSTEM SYNC FILE CACHE [ON CLUSTER cluster_name] ``` -### SYSTEM LOAD PRIMARY KEY {#load-primary-key} -Загружает первичные ключи для указанной таблицы или для всех таблиц. +### SYSTEM LOAD PRIMARY KEY + +Загрузить первичные ключи для указанной таблицы или для всех таблиц. ```sql SYSTEM LOAD PRIMARY KEY [db.]name @@ -627,9 +636,10 @@ SYSTEM LOAD PRIMARY KEY [db.]name SYSTEM LOAD PRIMARY KEY ``` -### SYSTEM UNLOAD PRIMARY KEY {#unload-primary-key} -Выгружает первичные ключи для указанной таблицы или для всех таблиц. +### SYSTEM UNLOAD PRIMARY KEY + +Выгрузить первичные ключи для указанной таблицы или для всех таблиц. ```sql SYSTEM UNLOAD PRIMARY KEY [db.]name @@ -640,67 +650,71 @@ SYSTEM UNLOAD PRIMARY KEY ``` -## Управление обновляемыми материализованными представлениями {#refreshable-materialized-views} +## Управление обновляемыми материализованными представлениями \{#refreshable-materialized-views\} -Команды для управления фоновыми задачами, выполняемыми [обновляемыми материализованными представлениями](../../sql-reference/statements/create/view.md#refreshable-materialized-view) +Команды для управления фоновыми задачами, выполняемыми для [обновляемых материализованных представлений](../../sql-reference/statements/create/view.md#refreshable-materialized-view). -При использовании отслеживайте состояние в таблице [`system.view_refreshes`](../../operations/system-tables/view_refreshes.md). +При работе с ними следите за таблицей [`system.view_refreshes`](../../operations/system-tables/view_refreshes.md). -### SYSTEM REFRESH VIEW {#refresh-view} +### SYSTEM REFRESH VIEW -Запускает немедленное внеплановое обновление указанного представления. +Выполнить немедленное внеплановое обновление указанного представления. ```sql SYSTEM REFRESH VIEW [db.]name ``` -### SYSTEM WAIT VIEW {#wait-view} -Ожидает завершения текущего обновления. Если обновление завершается с ошибкой, генерирует исключение. Если обновление не выполняется, завершается немедленно, генерируя исключение, если предыдущее обновление завершилось с ошибкой. +### SYSTEM WAIT VIEW \{#wait-view\} + +Ожидает завершения текущего обновления. Если обновление завершается с ошибкой, выбрасывается исключение. Если обновление не выполняется, завершается немедленно и выбрасывает исключение, если предыдущее обновление завершилось с ошибкой. -### SYSTEM STOP [REPLICATED] VIEW, STOP VIEWS {#stop-view-stop-views} +### SYSTEM STOP [REPLICATED] VIEW, STOP VIEWS -Отключает периодическое обновление указанного представления или всех обновляемых представлений. Если обновление выполняется, также отменяет его. +Отключает периодическое обновление указанного представления или всех обновляемых представлений. Если обновление выполняется, оно также будет отменено. -Если представление находится в реплицируемой (Replicated) или общей (Shared) базе данных, `STOP VIEW` влияет только на текущую реплику, тогда как `STOP REPLICATED VIEW` влияет на все реплики. +Если представление находится в реплицируемой (Replicated) или общей (Shared) базе данных, `STOP VIEW` затрагивает только текущую реплику, тогда как `STOP REPLICATED VIEW` затрагивает все реплики. ```sql SYSTEM STOP VIEW [db.]name ``` ```sql -SYSTEM STOP VIEWS +ВИДЫ СИСТЕМНЫХ ОСТАНОВОК ``` -### SYSTEM START [REPLICATED] VIEW, START VIEWS {#start-view-start-views} -Включает периодическое обновление для указанного представления или всех обновляемых представлений. Немедленное обновление не запускается. +### SYSTEM START [REPLICATED] VIEW, START VIEWS + +Включает периодическое обновление для указанного представления или всех представлений, поддерживающих обновление. При этом немедленное обновление не выполняется. -Если представление находится в реплицируемой (Replicated) или общей (Shared) базе данных, `START VIEW` отменяет действие `STOP VIEW`, а `START REPLICATED VIEW` отменяет действие `STOP REPLICATED VIEW`. +Если представление находится в базе данных Replicated или Shared, `START VIEW` отменяет действие `STOP VIEW`, а `START REPLICATED VIEW` отменяет действие `STOP REPLICATED VIEW`. ```sql SYSTEM START VIEW [db.]name ``` ```sql -SYSTEM START VIEWS +ВИДЫ ЗАПУСКА СИСТЕМЫ ``` -### SYSTEM CANCEL VIEW {#cancel-view} -Если для указанного представления на текущей реплике выполняется обновление, прерывает и отменяет его. В противном случае ничего не делает. +### SYSTEM CANCEL VIEW + +Если на текущей реплике в данный момент выполняется обновление указанного представления, оно прерывается и отменяется. В противном случае ничего не происходит. ```sql SYSTEM CANCEL VIEW [db.]name ``` -### SYSTEM WAIT VIEW {#system-wait-view} -Ожидает завершения выполняющегося обновления. Если обновление не выполняется, возвращает управление немедленно. Если последняя попытка обновления завершилась с ошибкой, сообщает об ошибке. +### SYSTEM WAIT VIEW + +Ожидает завершения текущего обновления. Если обновление не выполняется, немедленно завершается. Если последняя попытка обновления завершилась с ошибкой, сообщает об ошибке. -Может использоваться сразу после создания нового обновляемого материализованного представления (без ключевого слова EMPTY) для ожидания завершения начального обновления. +Может использоваться сразу после создания нового обновляемого материализованного представления (без ключевого слова EMPTY), чтобы дождаться завершения начального обновления. -Если представление находится в реплицируемой (Replicated) или общей (Shared) базе данных и обновление выполняется на другой реплике, ожидает завершения этого обновления. +Если представление находится в базе данных Replicated или Shared и обновление выполняется на другой реплике, ожидает завершения этого обновления. ```sql SYSTEM WAIT VIEW [db.]name diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/syntax.md b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/syntax.md index a1592c0e077..55a6e65757b 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/syntax.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/syntax.md @@ -1,6 +1,5 @@ --- description: 'Документация по синтаксису' -displayed_sidebar: 'sqlreference' sidebar_label: 'Синтаксис' sidebar_position: 2 slug: /sql-reference/syntax @@ -9,18 +8,16 @@ doc_type: 'reference' --- В этом разделе мы рассмотрим синтаксис SQL в ClickHouse. -ClickHouse использует синтаксис, основанный на SQL, но дополняет его рядом расширений и оптимизаций. +ClickHouse использует синтаксис, основанный на SQL, но предлагает ряд расширений и оптимизаций. +## Разбор запросов +В ClickHouse есть два типа парсеров: -## Разбор запросов {#query-parsing} +* *Полный SQL-парсер* (рекурсивный нисходящий парсер). +* *Парсер формата данных* (быстрый потоковый парсер). -В ClickHouse существует два типа парсеров: - -- _Полный SQL-парсер_ (рекурсивный нисходящий парсер). -- _Парсер формата данных_ (быстрый потоковый парсер). - -Полный SQL-парсер используется во всех случаях, за исключением запроса `INSERT`, который использует оба парсера. +Полный SQL-парсер используется во всех случаях, кроме запроса `INSERT`, который использует оба парсера. Рассмотрим следующий запрос: @@ -33,170 +30,166 @@ INSERT INTO t VALUES (1, 'Hello, world'), (2, 'abc'), (3, 'def') а данные `(1, 'Hello, world'), (2, 'abc'), (3, 'def')` разбираются парсером формата данных, или быстрым потоковым парсером.
-Включение полного парсера + Включение полного парсера -Вы также можете включить полный парсер для данных -с помощью настройки [`input_format_values_interpret_expressions`](../operations/settings/settings-formats.md#input_format_values_interpret_expressions). - -Когда эта настройка установлена в `1`, -ClickHouse сначала пытается разобрать значения с помощью быстрого потокового парсера. -Если это не удается, ClickHouse пытается использовать полный парсер для данных, обрабатывая их как SQL-[выражение](#expressions). + Вы также можете включить полный парсер для данных, + используя настройку [`input_format_values_interpret_expressions`](../operations/settings/settings-formats.md#input_format_values_interpret_expressions). + Когда указанная настройка установлена в `1`, + ClickHouse сначала пытается разобрать значения с помощью быстрого потокового парсера. + Если это не удаётся, ClickHouse пытается использовать полный парсер для данных, обрабатывая их как SQL-[выражения](#expressions).
-Данные могут иметь любой формат. -При получении запроса сервер загружает в оперативную память не более [max_query_size](../operations/settings/settings.md#max_query_size) байт запроса -(по умолчанию 1 МБ), а остальное разбирается потоково. -Это позволяет избежать проблем с большими запросами `INSERT`, что является рекомендуемым способом вставки данных в ClickHouse. +Данные могут быть в любом формате. +При получении запроса сервер помещает в оперативную память не более [max_query_size](../operations/settings/settings.md#max_query_size) байт запроса +(по умолчанию 1 МБ), а остальная часть обрабатывается потоковым парсером. +Это позволяет избежать проблем с большими `INSERT`-запросами, который является рекомендуемым способом вставки данных в ClickHouse. При использовании формата [`Values`](/interfaces/formats/Values) в запросе `INSERT` может показаться, что данные разбираются так же, как выражения в запросе `SELECT`, однако это не так. Формат `Values` гораздо более ограничен. -В остальной части этого раздела рассматривается полный парсер. +Оставшаяся часть этого раздела посвящена полному парсеру. :::note -Дополнительную информацию о парсерах форматов см. в разделе [Форматы](../interfaces/formats.md). +Дополнительные сведения о парсерах форматов см. в разделе [Форматы](../interfaces/formats.md). ::: -## Пробельные символы {#spaces} - -- Между синтаксическими конструкциями (включая начало и конец запроса) может находиться любое количество пробельных символов. -- К пробельным символам относятся: пробел, табуляция, перевод строки (LF), возврат каретки (CR) и перевод страницы (FF). +## Пробелы \{#spaces\} +- Между синтаксическими конструкциями (включая начало и конец запроса) может быть произвольное количество пробельных символов. +- К пробельным символам относятся пробел, табуляция, перевод строки, возврат каретки (CR) и разрыв страницы. -## Комментарии {#comments} +## Комментарии \{#comments\} -ClickHouse поддерживает комментарии в стиле SQL и C: +ClickHouse поддерживает как комментарии в стиле SQL, так и в стиле C: - Комментарии в стиле SQL начинаются с `--`, `#!` или `# ` и продолжаются до конца строки. Пробел после `--` и `#!` можно опустить. -- Комментарии в стиле C начинаются с `/*` и заканчиваются `*/`, могут быть многострочными. Пробелы также не требуются. +- Комментарии в стиле C записываются между `/*` и `*/` и могут быть многострочными. Пробелы также не требуются. +## Ключевые слова -## Ключевые слова {#keywords} - -Ключевые слова в ClickHouse могут быть _чувствительными к регистру_ или _нечувствительными к регистру_ в зависимости от контекста. +Ключевые слова в ClickHouse могут быть *чувствительными к регистру* или *нечувствительными к регистру* в зависимости от контекста. Ключевые слова **нечувствительны к регистру**, когда они соответствуют: -- Стандарту SQL. Например, `SELECT`, `select` и `SeLeCt` — все варианты допустимы. -- Реализации в некоторых популярных СУБД (MySQL или Postgres). Например, `DateTime` эквивалентен `datetime`. +* стандарту SQL. Например, `SELECT`, `select` и `SeLeCt` — все корректны. +* реализации в некоторых популярных СУБД (MySQL или Postgres). Например, `DateTime` то же самое, что и `datetime`. :::note -Проверить, является ли имя типа данных чувствительным к регистру, можно в таблице [system.data_type_families](/operations/system-tables/data_type_families). +Вы можете проверить, является ли имя типа данных чувствительным к регистру, в таблице [system.data_type_families](/operations/system-tables/data_type_families). ::: В отличие от стандартного SQL, все остальные ключевые слова (включая имена функций) **чувствительны к регистру**. Кроме того, ключевые слова не являются зарезервированными. -Они рассматриваются как ключевые слова только в соответствующем контексте. +Они рассматриваются как ключевые только в соответствующем контексте. Если вы используете [идентификаторы](#identifiers) с тем же именем, что и ключевые слова, заключайте их в двойные кавычки или обратные кавычки. -Например, следующий запрос допустим, если таблица `table_name` содержит столбец с именем `"FROM"`: +Например, следующий запрос является корректным, если таблица `table_name` содержит столбец с именем `"FROM"`: ```sql SELECT "FROM" FROM table_name ``` -## Идентификаторы {#identifiers} +## Идентификаторы \{#identifiers\} Идентификаторы — это: -- Имена кластеров, баз данных, таблиц, партиций и столбцов. +- Имена кластера, базы данных, таблицы, партиции и столбца. - [Функции](#functions). - [Типы данных](../sql-reference/data-types/index.md). - [Псевдонимы выражений](#expression-aliases). -Идентификаторы могут быть заключены в кавычки или использоваться без кавычек, хотя второй вариант предпочтителен. +Идентификаторы могут заключаться в кавычки или быть без кавычек, при этом предпочтителен второй вариант. -Идентификаторы без кавычек должны соответствовать регулярному выражению `^[a-zA-Z_][0-9a-zA-Z_]*$` и не могут совпадать с [ключевыми словами](#keywords). -Примеры допустимых и недопустимых идентификаторов приведены в таблице ниже: +Идентификаторы без кавычек должны соответствовать регулярному выражению `^[a-zA-Z_][0-9a-Z_]*$` и не могут совпадать с [ключевыми словами](#keywords). +См. таблицу ниже с примерами корректных и некорректных идентификаторов: -| Допустимые идентификаторы | Недопустимые идентификаторы | -| ---------------------------------------------- | -------------------------------------- | +| Корректные идентификаторы | Некорректные идентификаторы | +|------------------------------------------------|----------------------------------------| | `xyz`, `_internal`, `Id_with_underscores_123_` | `1x`, `tom@gmail.com`, `äußerst_schön` | -Если вы хотите использовать идентификаторы, совпадающие с ключевыми словами, или использовать в идентификаторах другие символы, заключите их в двойные кавычки или обратные апострофы, например: `"id"`, `` `id` ``. +Если вы хотите использовать идентификаторы, совпадающие с ключевыми словами, или хотите использовать в идентификаторах другие символы, заключайте их в двойные кавычки или обратные кавычки, например, `"id"`, `` `id` ``. :::note -Правила экранирования для идентификаторов в кавычках также применяются к строковым литералам. Подробнее см. в разделе [String](#string). +Те же правила экранирования, которые применяются к идентификаторам в кавычках, также применяются к строковым литералам. Подробности см. в разделе [String](#string). ::: +## Литералы \{#literals\} -## Литералы {#literals} - -В ClickHouse литерал — это значение, которое непосредственно представлено в запросе. +В ClickHouse литерал — это значение, которое явно задаётся в запросе. Другими словами, это фиксированное значение, которое не изменяется во время выполнения запроса. Литералы могут быть: -- [Строковые](#string) -- [Числовые](#numeric) -- [Составные](#compound) +- [Строковыми](#string) +- [Числовыми](#numeric) +- [Составными](#compound) - [`NULL`](#null) - [Heredocs](#heredoc) (пользовательские строковые литералы) -Рассмотрим каждый из них более подробно в разделах ниже. +В следующих разделах мы подробно рассмотрим каждый из этих видов. -### Строковые {#string} +### String \{#string\} Строковые литералы должны быть заключены в одинарные кавычки. Двойные кавычки не поддерживаются. -Экранирование работает одним из следующих способов: +Экранирование работает одним из двух способов: -- использование предшествующей одинарной кавычки, где символ одинарной кавычки `'` (и только этот символ) может быть экранирован как `''`, или -- использование предшествующей обратной косой черты со следующими поддерживаемыми escape-последовательностями, перечисленными в таблице ниже. +- с использованием предшествующей одинарной кавычки, когда символ одинарной кавычки `'` (и только этот символ) может быть экранирован как `''`, или +- с использованием предшествующего обратного слэша с поддерживаемыми управляющими последовательностями, перечисленными в таблице ниже. :::note -Обратная косая черта теряет свое специальное значение, т.е. интерпретируется буквально, если она предшествует символам, отличным от перечисленных ниже. +Обратный слэш теряет своё специальное значение, то есть интерпретируется буквально, если он стоит перед символами, отличными от перечисленных ниже. ::: -| Поддерживаемая escape-последовательность | Описание | -| -------------------------------------- | ----------------------------------------------------------------------- | -| `\xHH` | Спецификация 8-битного символа, за которой следует любое количество шестнадцатеричных цифр (H). | -| `\N` | зарезервировано, ничего не делает (например, `SELECT 'a\Nb'` возвращает `ab`) | -| `\a` | сигнал | -| `\b` | возврат на один символ | -| `\e` | символ escape | -| `\f` | перевод страницы | -| `\n` | перевод строки | -| `\r` | возврат каретки | -| `\t` | горизонтальная табуляция | -| `\v` | вертикальная табуляция | -| `\0` | нулевой символ | -| `\\` | обратная косая черта | -| `\'` (или `''`) | одинарная кавычка | -| `\"` | двойная кавычка | -| `` ` `` | обратная кавычка | -| `\/` | прямая косая черта | -| `\=` | знак равенства | -| Управляющие символы ASCII (c <= 31). | | +| Supported Escape | Description | +|-------------------------------------|-------------------------------------------------------------------------| +| `\xHH` | 8-битный символ, за которым следует любое количество шестнадцатеричных цифр (H). | +| `\N` | зарезервировано, ничего не делает (например, `SELECT 'a\Nb'` возвращает `ab`) | +| `\a` | звуковой сигнал | +| `\b` | backspace | +| `\e` | управляющий символ Escape | +| `\f` | перевод страницы | +| `\n` | перевод строки | +| `\r` | возврат каретки | +| `\t` | горизонтальная табуляция | +| `\v` | вертикальная табуляция | +| `\0` | нулевой символ | +| `\\` | обратный слэш | +| `\'` (или ` '' `) | одинарная кавычка | +| `\"` | двойная кавычка | +| `` ` `` | обратная кавычка (backtick) | +| `\/` | косая черта (forward slash) | +| `\=` | знак равенства | +| ASCII control characters (c <= 31). | управляющие символы ASCII (c <= 31). | :::note -В строковых литералах необходимо экранировать как минимум `'` и `\` с помощью escape-кодов `\'` (или: `''`) и `\\`. +В строковых литералах необходимо как минимум экранировать символы `'` и `\`, используя управляющие последовательности `\'` (или: `''`) и `\\`. ::: -### Числовые {#numeric} +### Числовые литералы Числовые литералы разбираются следующим образом: -- Если литерал имеет префикс в виде знака минус `-`, токен пропускается, и результат инвертируется после разбора. -- Числовой литерал сначала разбирается как 64-битное беззнаковое целое число с использованием функции [strtoull](https://en.cppreference.com/w/cpp/string/byte/strtoul). - - Если значение имеет префикс `0b` или `0x`/`0X`, число разбирается как двоичное или шестнадцатеричное соответственно. - - Если значение отрицательное и абсолютная величина больше 263, возвращается ошибка. -- Если это не удается, значение затем разбирается как число с плавающей точкой с использованием функции [strtod](https://en.cppreference.com/w/cpp/string/byte/strtof). -- В противном случае возвращается ошибка. +* Если литерал начинается со знака минус `-`, этот токен пропускается, а знак результата меняется после разбора. +* Числовой литерал сначала разбирается как 64-битное беззнаковое целое число с использованием функции [strtoull](https://en.cppreference.com/w/cpp/string/byte/strtoul). + * Если значение имеет префикс `0b` или `0x`/`0X`, число разбирается как двоичное или шестнадцатеричное соответственно. + * Если значение отрицательное и абсолютная величина больше 263, возвращается ошибка. +* Если разбор не удался, значение далее разбирается как число с плавающей запятой с использованием функции [strtod](https://en.cppreference.com/w/cpp/string/byte/strtof). +* В противном случае возвращается ошибка. -Литеральные значения приводятся к наименьшему типу, в который помещается значение. +Литералы приводятся к наименьшему типу, в который это значение помещается. Например: -- `1` разбирается как `UInt8` -- `256` разбирается как `UInt16`. +* `1` разбирается как `UInt8` +* `256` разбирается как `UInt16`. :::note Важно -Целочисленные значения шире 64 бит (`UInt128`, `Int128`, `UInt256`, `Int256`) должны быть приведены к более широкому типу для правильного разбора: +Целочисленные значения шире 64 бит (`UInt128`, `Int128`, `UInt256`, `Int256`) должны быть явно приведены к более крупному типу, чтобы быть корректно разобраны: ```sql -170141183460469231731687303715884105728::Int128 @@ -205,61 +198,61 @@ SELECT "FROM" FROM table_name 115792089237316195423570985008687907853269984665640564039457584007913129639935::UInt256 ``` -Это обходит вышеуказанный алгоритм и разбирает целое число с помощью процедуры, поддерживающей произвольную точность. +Это обходит описанный выше алгоритм и выполняет разбор целого числа с помощью функции, поддерживающей произвольную точность. -В противном случае литерал будет разобран как число с плавающей точкой и, следовательно, подвержен потере точности из-за усечения. +В противном случае литерал будет разобран как число с плавающей запятой и, следовательно, может привести к потере точности из‑за усечения. ::: -Для получения дополнительной информации см. [Типы данных](../sql-reference/data-types/index.md). +Дополнительные сведения см. в разделе [Data types](../sql-reference/data-types/index.md). Символы подчеркивания `_` внутри числовых литералов игнорируются и могут использоваться для улучшения читаемости. Поддерживаются следующие числовые литералы: - -| Числовой литерал | Примеры | -| ----------------------------------------------------- | ----------------------------------------------- | -| **Целые числа** | `1`, `10_000_000`, `18446744073709551615`, `01` | -| **Десятичные числа** | `0.1` | -| **Экспоненциальная запись** | `1e100`, `-1e-100` | -| **Числа с плавающей точкой** | `123.456`, `inf`, `nan` | -| **Шестнадцатеричные** | `0xc0fe` | -| **Шестнадцатеричная строка, совместимая со стандартом SQL** | `x'c0fe'` | -| **Двоичные** | `0b1101` | -| **Двоичная строка, совместимая со стандартом SQL** | `b'1101'` | +| Числовой литерал | Примеры | +| --------------------------------------------------------------------- | ----------------------------------------------- | +| **Целые числа** | `1`, `10_000_000`, `18446744073709551615`, `01` | +| **Десятичные дроби** | `0.1` | +| **Экспоненциальная запись** | `1e100`, `-1e-100` | +| **Числа с плавающей запятой** | `123.456`, `inf`, `nan` | +| **Шестнадцатеричные числа** | `0xc0fe` | +| **Строки в шестнадцатеричном формате, совместимые со стандартом SQL** | `x'c0fe'` | +| **Двоичные числа** | `0b1101` | +| **Строки в двоичном формате, совместимые со стандартом SQL** | `b'1101'` | :::note -Восьмеричные литералы не поддерживаются во избежание случайных ошибок интерпретации. +Восьмеричные литералы не поддерживаются, чтобы избежать случайных ошибок интерпретации. ::: -### Составные {#compound} + +### Составные \{#compound\} Массивы создаются с помощью квадратных скобок `[1, 2, 3]`. Кортежи создаются с помощью круглых скобок `(1, 'Hello, world!', 2)`. Технически это не литералы, а выражения с оператором создания массива и оператором создания кортежа соответственно. Массив должен состоять как минимум из одного элемента, а кортеж — как минимум из двух элементов. :::note -Существует особый случай, когда кортежи используются в предложении `IN` запроса `SELECT`. -Результаты запроса могут включать кортежи, но кортежи нельзя сохранить в базу данных (за исключением таблиц с движком [Memory](../engines/table-engines/special/memory.md)). +Существует отдельный случай, когда кортежи используются в условии `IN` запроса `SELECT`. +Результаты запроса могут включать кортежи, но кортежи не могут храниться в базе данных (за исключением таблиц, использующих движок [Memory](../engines/table-engines/special/memory.md)). ::: -### NULL {#null} +### NULL \{#null\} -`NULL` используется для обозначения отсутствующего значения. -Чтобы хранить `NULL` в поле таблицы, оно должно иметь тип [Nullable](../sql-reference/data-types/nullable.md). +`NULL` используется для обозначения отсутствующего значения. +Чтобы хранить `NULL` в поле таблицы, это поле должно иметь тип [Nullable](../sql-reference/data-types/nullable.md). :::note -Следует учитывать следующие особенности `NULL`: +Следует учитывать следующее о `NULL`: -- В зависимости от формата данных (входного или выходного) `NULL` может иметь различное представление. Подробнее см. в разделе [форматы данных](/interfaces/formats). -- Обработка `NULL` имеет свои нюансы. Например, если хотя бы один из аргументов операции сравнения является `NULL`, результат этой операции также будет `NULL`. То же самое справедливо для умножения, сложения и других операций. Рекомендуется ознакомиться с документацией по каждой операции. -- В запросах можно проверить `NULL` с помощью операторов [`IS NULL`](/sql-reference/functions/functions-for-nulls#isNull) и [`IS NOT NULL`](/sql-reference/functions/functions-for-nulls#isNotNull), а также связанных функций `isNull` и `isNotNull`. - ::: +- В зависимости от формата данных (входного или выходного) `NULL` может иметь разное представление. Дополнительную информацию см. в разделе [форматы данных](/interfaces/formats). +- Обработка `NULL` имеет особенности. Например, если хотя бы один из аргументов операции сравнения равен `NULL`, результат этой операции также будет `NULL`. То же касается умножения, сложения и других операций. Рекомендуем ознакомиться с документацией для каждой операции. +- В запросах вы можете проверять `NULL` с помощью операторов [`IS NULL`](/sql-reference/functions/functions-for-nulls#isNull) и [`IS NOT NULL`](/sql-reference/functions/functions-for-nulls#isNotNull), а также соответствующих функций `isNull` и `isNotNull`. +::: -### Heredoc {#heredoc} +### Heredoc -[Heredoc](https://en.wikipedia.org/wiki/Here_document) — это способ определения строки (часто многострочной) с сохранением исходного форматирования. -Heredoc определяется как пользовательский строковый литерал, размещённый между двумя символами `$`. +[Heredoc](https://en.wikipedia.org/wiki/Here_document) — это способ задать строку (часто многострочную), сохраняя исходное форматирование. +Heredoc — это пользовательский строковый литерал, помещённый между двумя символами `$`. Например: @@ -273,37 +266,37 @@ SELECT $heredoc$SHOW CREATE VIEW my_view$heredoc$; :::note -- Значение между двумя heredoc обрабатывается «как есть». +* Содержимое между двумя heredoc-блоками обрабатывается «как есть». ::: :::tip -- Вы можете использовать heredoc для встраивания фрагментов кода SQL, HTML, XML и т. д. +* Вы можете использовать heredoc, чтобы вставлять фрагменты кода на SQL, HTML, XML и т. д. ::: -## Определение и использование параметров запроса {#defining-and-using-query-parameters} +## Определение и использование параметров запроса \{#defining-and-using-query-parameters\} -Параметры запроса позволяют писать универсальные запросы, содержащие абстрактные заполнители вместо конкретных идентификаторов. -При выполнении запроса с параметрами -все заполнители разрешаются и заменяются фактическими значениями параметров запроса. +Параметры запроса позволяют писать универсальные запросы, содержащие абстрактные placeholders вместо конкретных идентификаторов. +Когда выполняется запрос с параметрами запроса, +все placeholders обрабатываются и заменяются фактическими значениями параметров запроса. -Существует два способа определения параметра запроса: +Существует два способа задать параметр запроса: - `SET param_=` - `--param_=''` -При использовании второго варианта параметр передается в качестве аргумента `clickhouse-client` в командной строке, где: +Во втором варианте он передаётся как аргумент в `clickhouse-client` в командной строке, где: - `` — имя параметра запроса. - `` — его значение. -На параметр запроса можно ссылаться в запросе, используя `{: }`, где `` — имя параметра запроса, а `` — тип данных, к которому он преобразуется. +На параметр запроса можно сослаться в запросе с помощью `{: }`, где `` — имя параметра запроса, а `` — тип данных, к которому он приводится.
Пример с командой SET -Например, следующий SQL определяет параметры с именами `a`, `b`, `c` и `d` — каждый с различным типом данных: +Например, следующий SQL задаёт параметры с именами `a`, `b`, `c` и `d`, каждый со своим типом данных: ```sql SET param_a = 13; @@ -319,13 +312,12 @@ SELECT 13 str 2022-08-04 18:30:53 {'10':[11,12],'13':[14,15]} ``` -
Пример с clickhouse-client -Если вы используете `clickhouse-client`, параметры указываются как `--param_name=value`. Например, следующий параметр имеет имя `message` и извлекается как `String`: +Если вы используете `clickhouse-client`, параметры указываются как `--param_name=value`. Например, следующий параметр имеет имя `message`, и он интерпретируется как значение типа `String`: ```bash clickhouse-client --param_message='hello' --query="SELECT {message: String}" @@ -333,53 +325,51 @@ clickhouse-client --param_message='hello' --query="SELECT {message: String}" hello ``` -Если параметр запроса представляет имя базы данных, таблицы, функции или другого идентификатора, используйте `Identifier` в качестве его типа. Например, следующий запрос возвращает строки из таблицы с именем `uk_price_paid`: +Если параметр запроса представляет имя базы данных, таблицы, функции или другого идентификатора, используйте тип `Identifier`. Например, следующий запрос возвращает строки из таблицы с именем `uk_price_paid`: ```sql SET param_mytablename = "uk_price_paid"; SELECT * FROM {mytablename:Identifier}; ``` -
:::note -Параметры запроса не являются общими текстовыми подстановками, которые можно использовать в произвольных местах произвольных SQL-запросов. -Они предназначены в первую очередь для работы в операторах `SELECT` вместо идентификаторов или литералов. +Параметры запроса не являются универсальным механизмом текстовой подстановки, который можно использовать в произвольных местах произвольных SQL-запросов. +Они в первую очередь предназначены для работы в операторах `SELECT` вместо идентификаторов или литералов. ::: - -## Функции {#functions} +## Функции Вызовы функций записываются как идентификатор со списком аргументов (возможно, пустым) в круглых скобках. -В отличие от стандартного SQL, скобки обязательны, даже для пустого списка аргументов. +В отличие от стандартного SQL, скобки обязательны даже для пустого списка аргументов. Например: ```sql now() ``` -Также существуют: +Также есть: -- [Обычные функции](/sql-reference/functions/overview). -- [Агрегатные функции](/sql-reference/aggregate-functions). +* [Обычные функции](/sql-reference/functions/overview). +* [Агрегатные функции](/sql-reference/aggregate-functions). -Некоторые агрегатные функции могут содержать два списка аргументов в скобках. Например: +Некоторые агрегатные функции могут иметь два списка аргументов в скобках. Например: ```sql -quantile (0.9)(x) +quantile (0.9)(x) ``` -Такие агрегатные функции называются «параметрическими», -а аргументы в первом списке называются «параметрами». +Эти агрегатные функции называются параметрическими функциями, +а аргументы из первого списка — параметрами. :::note Синтаксис агрегатных функций без параметров совпадает с синтаксисом обычных функций. ::: -## Операторы {#operators} +## Операторы -Операторы преобразуются в соответствующие им функции на этапе разбора запроса с учётом их приоритета и ассоциативности. +Операторы во время разбора запроса преобразуются в соответствующие функции с учётом их приоритета и ассоциативности. Например, выражение @@ -394,21 +384,20 @@ plus(plus(1, multiply(2, 3)), 4)` ``` -## Типы данных и движки таблиц {#data-types-and-database-table-engines} +## Типы данных и движки таблиц базы данных \{#data-types-and-database-table-engines\} -Типы данных и движки таблиц в запросе `CREATE` записываются так же, как идентификаторы или функции. -Иными словами, они могут содержать или не содержать список аргументов в скобках. +Типы данных и движки таблиц в запросе `CREATE` указываются так же, как идентификаторы или функции. +Другими словами, они могут как содержать список аргументов в скобках, так и не содержать его. -Дополнительную информацию см. в разделах: +Для получения дополнительной информации см. разделы: - [Типы данных](/sql-reference/data-types/index.md) - [Движки таблиц](/engines/table-engines/index.md) - [CREATE](/sql-reference/statements/create/index.md). +## Expressions \{#expressions\} -## Выражения {#expressions} - -Выражением может быть любое из следующего: +Выражением может быть любой из следующих типов: - функция - идентификатор @@ -416,18 +405,17 @@ plus(plus(1, multiply(2, 3)), 4)` - применение оператора - выражение в скобках - подзапрос -- звёздочка +- звёздочка (`*`) -Выражение также может содержать [псевдоним](#expression-aliases). +Оно также может содержать [псевдоним](#expression-aliases). Список выражений — это одно или несколько выражений, разделённых запятыми. -Функции и операторы, в свою очередь, могут принимать выражения в качестве аргументов. +Функции и операторы, в свою очередь, могут иметь выражения в качестве аргументов. -Константное выражение — это выражение, результат которого известен на этапе анализа запроса, т. е. до его выполнения. -Например, выражения над литералами являются константными выражениями. +Константное выражение — это выражение, результат которого известен во время анализа запроса, то есть до выполнения. +Например, выражения, состоящие из литералов, являются константными выражениями. - -## Псевдонимы выражений {#expression-aliases} +## Псевдонимы выражений Псевдоним — это определяемое пользователем имя для [выражения](#expressions) в запросе. @@ -435,35 +423,36 @@ plus(plus(1, multiply(2, 3)), 4)` expr AS alias ``` -Элементы синтаксиса, приведенного выше, описаны ниже. +Части приведённого выше синтаксиса описаны ниже. + +| Элемент синтаксиса | Описание | Пример | Примечания | +| ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | +| `AS` | Ключевое слово для определения псевдонимов. В операторе `SELECT` можно задать псевдоним для имени таблицы или имени столбца и без использования ключевого слова `AS`. | `SELECT table_name_alias.column_name FROM table_name table_name_alias`. | В функции [CAST](/sql-reference/functions/type-conversion-functions#cast) ключевое слово `AS` имеет иное значение. См. описание функции. | +| `expr` | Любое выражение, поддерживаемое ClickHouse. | `SELECT column_name * 2 AS double FROM some_table` | | +| `alias` | Имя для `expr`. Псевдонимы должны соответствовать синтаксису [идентификаторов](#identifiers). | `SELECT "table t".column_name FROM table_name AS "table t"`. | | -| Элемент синтаксиса | Описание | Пример | Примечания | -| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `AS` | Ключевое слово для определения псевдонимов. Псевдоним для имени таблицы или столбца в предложении `SELECT` можно определить без использования ключевого слова `AS`. | `SELECT table_name_alias.column_name FROM table_name table_name_alias`. | В функции [CAST](/sql-reference/functions/type-conversion-functions#cast) ключевое слово `AS` имеет другое значение. См. описание функции. | -| `expr` | Любое выражение, поддерживаемое ClickHouse. | `SELECT column_name * 2 AS double FROM some_table` | | -| `alias` | Имя для `expr`. Псевдонимы должны соответствовать синтаксису [идентификаторов](#identifiers). | `SELECT "table t".column_name FROM table_name AS "table t"`. | | -### Примечания по использованию {#notes-on-usage} +### Примечания по использованию -- Псевдонимы являются глобальными для запроса или подзапроса, и псевдоним можно определить в любой части запроса для любого выражения. Например: +* Псевдонимы действуют в пределах всего запроса или подзапроса, и вы можете задать псевдоним в любой части запроса для любого выражения. Например: ```sql -SELECT (1 AS n) + 2, n +SELECT (1 AS n) + 2, n`. ``` -- Псевдонимы не видны в подзапросах и между подзапросами. Например, при выполнении следующего запроса ClickHouse генерирует исключение `Unknown identifier: num`: +* Псевдонимы не видны в подзапросах и между подзапросами. Например, при выполнении следующего запроса ClickHouse выдаёт исключение `Unknown identifier: num`: ```sql -SELECT (SELECT sum(b.a) + num FROM b) - a.a AS num FROM a +`SELECT (SELECT sum(b.a) + num FROM b) - a.a AS num FROM a` ``` -- Если псевдоним определен для результирующих столбцов в предложении `SELECT` подзапроса, эти столбцы видны во внешнем запросе. Например: +* Если для результирующих столбцов в предложении `SELECT` подзапроса определены псевдонимы, эти столбцы доступны во внешнем запросе. Например: ```sql -SELECT n + m FROM (SELECT 1 AS n, 2 AS m) +SELECT n + m FROM (SELECT 1 AS n, 2 AS m)`. ``` -- Будьте осторожны с псевдонимами, совпадающими с именами столбцов или таблиц. Рассмотрим следующий пример: +* Будьте осторожны с псевдонимами, совпадающими с именами столбцов или таблиц. Рассмотрим следующий пример: ```sql CREATE TABLE t @@ -478,22 +467,22 @@ SELECT sum(b) AS b FROM t; -Received exception from server (version 18.14.17): -Code: 184. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception: Aggregate function sum(b) is found inside another aggregate function in query. +Получено исключение от сервера (версия 18.14.17): +Code: 184. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception: Агрегатная функция sum(b) обнаружена внутри другой агрегатной функции в запросе. ``` -В приведенном выше примере мы объявили таблицу `t` со столбцом `b`. -Затем при выборке данных мы определили псевдоним `sum(b) AS b`. +В предыдущем примере мы объявили таблицу `t` со столбцом `b`. +Затем при выборке данных мы задали псевдоним `sum(b) AS b`. Поскольку псевдонимы являются глобальными, -ClickHouse заменил литерал `b` в выражении `argMax(a, b)` на выражение `sum(b)`. -Эта замена вызвала исключение. +ClickHouse заменил литерал `b` в выражении `argMax(a, b)` выражением `sum(b)`. +Эта замена привела к возникновению исключения. :::note -Вы можете изменить это поведение по умолчанию, установив параметр [prefer_column_name_to_alias](/operations/settings/settings#prefer_column_name_to_alias) в значение `1`. +Вы можете изменить это поведение по умолчанию, установив [prefer_column_name_to_alias](/operations/settings/settings#prefer_column_name_to_alias) в значение `1`. ::: -## Звездочка {#asterisk} +## Звёздочка \{#asterisk\} -В запросе `SELECT` звездочка может заменять выражение. -Подробнее см. раздел [SELECT](/sql-reference/statements/select/index.md#asterisk). +В запросе `SELECT` звёздочка может использоваться вместо выражения. +Дополнительные сведения см. в разделе [SELECT](/sql-reference/statements/select/index.md#asterisk). \ No newline at end of file diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/table-functions/index.md b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/table-functions/index.md index 9897085382b..c8ac4abd4db 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/table-functions/index.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/sql-reference/table-functions/index.md @@ -11,79 +11,17 @@ doc_type: 'reference' # Табличные функции -Табличные функции — это способы создания таблиц. - - - -{/*AUTOGENERATED_START*/ } - -| Страница | Описание | -| -------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [azureBlobStorage](/sql-reference/table-functions/azureBlobStorage) | Предоставляет табличный интерфейс для выбора и вставки файлов в Azure Blob Storage. Аналогична функции s3. | -| [azureBlobStorageCluster](/sql-reference/table-functions/azureBlobStorageCluster) | Позволяет обрабатывать файлы из Azure Blob Storage параллельно на нескольких узлах в указанном кластере. | -| [clusterAllReplicas](/sql-reference/table-functions/cluster) | Позволяет обращаться ко всем шардам кластера (настроенным в секции `remote_servers`) без создания распределённой таблицы (Distributed). | -| [deltaLake](/sql-reference/table-functions/deltalake) | Предоставляет табличный интерфейс только для чтения к таблицам Delta Lake в Amazon S3. | -| [deltaLakeCluster](/sql-reference/table-functions/deltalakeCluster) | Это расширение для табличной функции deltaLake. | -| [dictionary](/sql-reference/table-functions/dictionary) | Отображает данные словаря как таблицу ClickHouse. Работает аналогично движку Dictionary. | -| [executable](/engines/table-functions/executable) | Табличная функция `executable` создает таблицу на основе вывода пользовательской функции (UDF), определенной в скрипте, который выводит строки в **stdout**. | -| [file](/sql-reference/table-functions/file) | Табличный движок, который предоставляет интерфейс, подобный таблице, для выполнения SELECT из файлов и INSERT в файлы, аналогичный табличной функции s3. Используйте `file()` при работе с локальными файлами и `s3()` при работе с бакетами в объектном хранилище, таком как S3, GCS или MinIO. | -| [fileCluster](/sql-reference/table-functions/fileCluster) | Обеспечивает одновременную обработку файлов, путь к которым соответствует заданному шаблону, на нескольких узлах кластера. Инициатор устанавливает соединения с узлами-исполнителями, разворачивает glob‑шаблоны в пути к файлам и делегирует им задачи чтения файлов. Каждый узел-исполнитель запрашивает у инициатора следующий файл для обработки и повторяет это до завершения всех задач (пока не будут прочитаны все файлы). | -| [format](/sql-reference/table-functions/format) | Разбирает данные из переданных аргументов в соответствии с указанным входным форматом. Если аргумент структуры не задан, структура определяется по данным. | -| [gcs](/sql-reference/table-functions/gcs) | Предоставляет табличный интерфейс для выполнения операций `SELECT` и `INSERT` с данными в Google Cloud Storage. Требуется роль IAM `Storage Object User`. | -| [fuzzQuery](/sql-reference/table-functions/fuzzQuery) | Вносит случайные изменения в заданную строку запроса. | -| [fuzzJSON](/sql-reference/table-functions/fuzzJSON) | Вносит случайные искажения в JSON-строку. | -| [generateRandom](/sql-reference/table-functions/generate) | Генерирует случайные данные по заданной схеме. Позволяет заполнять тестовые таблицы этими данными. Поддерживаются не все типы данных. | -| [mergeTreeProjection](/sql-reference/table-functions/mergeTreeProjection) | Представляет содержимое проекции в таблицах MergeTree. Может использоваться для анализа. | -| [mergeTreeIndex](/sql-reference/table-functions/mergeTreeIndex) | Представляет содержимое файлов индекса и меток таблиц MergeTree. Может использоваться для анализа внутреннего устройства. | -| [hdfs](/sql-reference/table-functions/hdfs) | Создаёт таблицу из файлов в HDFS. Эта табличная функция аналогична табличным функциям url и file. | -| [hdfsCluster](/sql-reference/table-functions/hdfsCluster) | Позволяет параллельно обрабатывать файлы из HDFS на нескольких узлах указанного кластера. | -| [hudi](/sql-reference/table-functions/hudi) | Предоставляет табличный интерфейс только для чтения к таблицам Apache Hudi в Amazon S3. | -| [ytsaurus](/sql-reference/table-functions/ytsaurus) | Табличная функция позволяет считывать данные из кластера YTsaurus. | -| [Табличная функция hudiCluster](/sql-reference/table-functions/hudiCluster) | Расширение табличной функции hudi. Позволяет обрабатывать файлы из таблиц Apache Hudi в Amazon S3 параллельно на многих узлах заданного кластера. | -| [iceberg](/sql-reference/table-functions/iceberg) | Предоставляет табличный интерфейс только для чтения к таблицам Apache Iceberg, размещённым в Amazon S3, Azure, HDFS или в локальном хранилище. | -| [paimon](/sql-reference/table-functions/paimon) | Предоставляет табличный интерфейс только для чтения к таблицам Apache Paimon, размещённым в Amazon S3, Azure, HDFS или в локальном хранилище. | -| [icebergCluster](/sql-reference/table-functions/icebergCluster) | Расширение табличной функции iceberg, которое позволяет обрабатывать файлы Apache Iceberg параллельно на нескольких узлах указанного кластера. | -| [paimonCluster](/sql-reference/table-functions/paimonCluster) | Расширение табличной функции paimon, позволяющее параллельно обрабатывать файлы Apache Paimon на множестве узлов заданного кластера. | -| [input](/sql-reference/table-functions/input) | Табличная функция, позволяющая эффективно преобразовывать и вставлять данные, отправленные на сервер с заданной структурой, в таблицу с другой структурой. | -| [jdbc](/sql-reference/table-functions/jdbc) | Возвращает таблицу, подключённую через JDBC-драйвер. | -| [merge](/sql-reference/table-functions/merge) | Создаёт временную таблицу типа Merge. Её структура будет определена на основе подлежащих таблиц путём объединения их столбцов и вывода общих типов. | -| [mongodb](/sql-reference/table-functions/mongodb) | Позволяет выполнять запросы `SELECT` к данным, хранящимся на удалённом сервере MongoDB. | -| [mysql](/sql-reference/table-functions/mysql) | Позволяет выполнять запросы `SELECT` и `INSERT` к данным, хранящимся на удалённом MySQL-сервере. | -| [null](/sql-reference/table-functions/null) | Создаёт временную таблицу указанной структуры с табличным движком Null. Функция используется для удобства при написании тестов и проведении демонстраций. | -| [timeSeriesMetrics](/sql-reference/table-functions/timeSeriesMetrics) | timeSeriesMetrics возвращает таблицу метрик, используемую таблицей `db_name.time_series_table` с движком TimeSeries. | -| [timeSeriesSelector](/sql-reference/table-functions/timeSeriesSelector) | Считывает временные ряды из таблицы TimeSeries, отфильтрованные селектором и с метками времени, попадающими в указанный интервал. | -| [timeSeriesTags](/sql-reference/table-functions/timeSeriesTags) | Табличная функция timeSeriesTags возвращает таблицу тегов, используемую таблицей `db_name.time_series_table` с движком TimeSeries. | -| [prometheusQueryRange](/sql-reference/table-functions/prometheusQueryRange) | Выполняет запрос Prometheus по данным из таблицы TimeSeries. | -| [zeros](/sql-reference/table-functions/zeros) | Используется для тестирования как самый быстрый способ сгенерировать большое количество строк. Аналогична системным таблицам `system.zeros` и `system.zeros_mt`. | -| [timeSeriesData](/sql-reference/table-functions/timeSeriesData) | timeSeriesData возвращает таблицу данных, используемую таблицей `db_name.time_series_table` с движком TimeSeries. | -| [numbers](/sql-reference/table-functions/numbers) | Возвращает таблицы с одним столбцом `number`, содержащим задаваемые пользователем целые числа. | -| [prometheusQuery](/sql-reference/table-functions/prometheusQuery) | Выполняет запрос Prometheus с использованием данных из таблицы TimeSeries. | -| [generate_series (generateSeries)](/sql-reference/table-functions/generate_series) | Возвращает таблицу с единственным столбцом `generate_series` (UInt64), содержащим целые числа от start до stop включительно. | -| [odbc](/sql-reference/table-functions/odbc) | Возвращает таблицу, подключённую по ODBC. | -| [postgresql](/sql-reference/table-functions/postgresql) | Позволяет выполнять запросы `SELECT` и `INSERT` к данным, хранящимся на удалённом сервере PostgreSQL. | -| [redis](/sql-reference/table-functions/redis) | Эта табличная функция позволяет интегрировать ClickHouse с Redis. | -| [remote, remoteSecure](/sql-reference/table-functions/remote) | Табличная функция `remote` позволяет получать доступ к удалённым серверам «на лету», то есть без создания распределённой таблицы. Табличная функция `remoteSecure` аналогична функции `remote`, но использует защищённое соединение. | -| [Табличная функция S3](/sql-reference/table-functions/s3) | Предоставляет табличный интерфейс для выбора и вставки файлов в Amazon S3 и Google Cloud Storage. Эта табличная функция аналогична функции hdfs, но поддерживает дополнительные возможности, специфичные для S3. | -| [s3Cluster](/sql-reference/table-functions/s3Cluster) | Расширение табличной функции `s3`, позволяющее обрабатывать файлы из Amazon S3 и Google Cloud Storage параллельно на множестве узлов в заданном кластере. | -| [sqlite](/sql-reference/table-functions/sqlite) | Позволяет выполнять запросы к данным, хранящимся в базе данных SQLite. | -| [arrowFlight](/sql-reference/table-functions/arrowflight) | Позволяет выполнять запросы к данным, доступным через сервер Apache Arrow Flight. | -| [url](/sql-reference/table-functions/url) | Создает таблицу из данных по заданному `URL` с указанными `format` и `structure` | -| [urlCluster](/sql-reference/table-functions/urlCluster) | Позволяет параллельно обрабатывать файлы по URL на множестве узлов указанного кластера. | -| [view](/sql-reference/table-functions/view) | Преобразует подзапрос в таблицу. Эта функция реализует механизм представлений. | -| [values](/sql-reference/table-functions/values) | создаёт временное хранилище, в котором столбцы заполняются значениями. | -| [loop](/sql-reference/table-functions/loop) | Табличная функция loop в ClickHouse используется для бесконечного вывода результатов запроса в цикле. | - -{/*AUTOGENERATED_END*/ } - - - - - -## Использование +Табличные функции — это способы конструирования таблиц. + + + + + +## Использование {#usage} Табличные функции можно использовать в предложении [`FROM`](../../sql-reference/statements/select/from.md) -оператора `SELECT`. Например, вы можете выбрать данные из файла на локальном -компьютере с помощью табличной функции `file`. +запроса `SELECT`. Например, можно выполнить `SELECT` данных из файла на локальной +машине с помощью табличной функции `file`. ```bash echo "1, 2, 3" > example.csv @@ -97,14 +35,14 @@ echo "1, 2, 3" > example.csv └────┴────┴────┘ ``` -Вы также можете использовать табличные функции для создания временной таблицы, доступной +Табличные функции также можно использовать для создания временной таблицы, которая доступна только в текущем запросе. Например: -```sql title="Query" +```sql title="Запрос" SELECT * FROM generateSeries(1,5); ``` -```response title="Response" +```response title="Результат" ┌─generate_series─┐ │ 1 │ │ 2 │ @@ -116,7 +54,7 @@ SELECT * FROM generateSeries(1,5); Таблица удаляется после завершения запроса. -Функции таблиц можно использовать для создания таблиц со следующим синтаксисом: +Табличные функции можно использовать для создания таблиц с помощью следующего синтаксиса: ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name AS table_function() @@ -124,7 +62,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name AS table_function() Например: -```sql title="Query" +```sql title="Запрос" CREATE TABLE series AS generateSeries(1, 5); SELECT * FROM series; ``` @@ -139,9 +77,9 @@ SELECT * FROM series; └─────────────────┘ ``` -Наконец, табличные функции можно использовать для выполнения `INSERT` в таблицу. Например, -мы можем записать содержимое таблицы, которую создали в предыдущем примере, -в файл на диске, повторно используя табличную функцию `file`: +Наконец, табличные функции можно использовать для вставки (`INSERT`) данных в таблицу. Например, +можно записать содержимое таблицы, созданной в предыдущем примере, +в файл на диске, снова используя табличную функцию `file`: ```sql INSERT INTO FUNCTION file('numbers.csv', 'CSV') SELECT * FROM series; @@ -157,5 +95,5 @@ cat numbers.csv ``` :::note -Нельзя использовать табличные функции, если настройка [allow_ddl](/operations/settings/settings#allow_ddl) отключена. +Табличные функции нельзя использовать, если настройка [allow_ddl](/operations/settings/settings#allow_ddl) отключена. ::: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/use-cases/AI_ML/data-exploration/marimo-notebook.md b/i18n/ru/docusaurus-plugin-content-docs/current/use-cases/AI_ML/data-exploration/marimo-notebook.md index b38b646754b..f01dc15b92a 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/use-cases/AI_ML/data-exploration/marimo-notebook.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/use-cases/AI_ML/data-exploration/marimo-notebook.md @@ -1,8 +1,8 @@ --- slug: /use-cases/AI/marimo-notebook -sidebar_label: 'Исследование данных с блокнотами Marimo и chDB' -title: 'Исследование данных с блокнотами Marimo и chDB' -description: 'Это руководство объясняет, как настроить и использовать chDB для исследования данных из ClickHouse Cloud или локальных файлов в блокнотах Marimo' +sidebar_label: 'Исследование данных с помощью ноутбуков Marimo и chDB' +title: 'Исследование данных с помощью ноутбуков Marimo и chDB' +description: 'В этом руководстве показано, как настроить и использовать chDB для исследования данных из ClickHouse Cloud или локальных файлов в ноутбуках Marimo' keywords: ['ML', 'Marimo', 'chDB', 'pandas'] doc_type: 'guide' --- @@ -17,85 +17,88 @@ import image_6 from '@site/static/images/use-cases/AI_ML/Marimo/6.png'; import image_7 from '@site/static/images/use-cases/AI_ML/Marimo/7.gif'; import image_8 from '@site/static/images/use-cases/AI_ML/Marimo/8.gif'; -В этом руководстве вы узнаете, как можно исследовать набор данных в ClickHouse Cloud с помощью блокнота Marimo, используя [chDB](/docs/chdb) — быстрый внутрипроцессный SQL OLAP движок на базе ClickHouse. +В этом руководстве вы узнаете, как исследовать набор данных в ClickHouse Cloud в ноутбуке Marimo с помощью [chDB](/docs/chdb) — быстрого внутрипроцессного SQL OLAP-движка на базе ClickHouse. **Предварительные требования:** -- Python 3.8 или выше -- виртуальная среда -- работающий сервис ClickHouse Cloud и ваши [данные для подключения](/docs/cloud/guides/sql-console/gather-connection-details) + +* Python 3.8 или выше +* виртуальное окружение +* работающий сервис ClickHouse Cloud и ваши [данные для подключения](/docs/cloud/guides/sql-console/gather-connection-details) :::tip -Если у вас ещё нет учётной записи ClickHouse Cloud, вы можете [зарегистрироваться](https://console.clickhouse.cloud/signUp?loc=docs-marimo-chdb) для -получения пробного периода и получить $300 в виде бесплатных кредитов для начала работы. +Если у вас ещё нет аккаунта ClickHouse Cloud, вы можете [зарегистрироваться](https://console.clickhouse.cloud/signUp?loc=docs-marimo-chdb) и оформить пробную подписку, получив $300 в виде бесплатных кредитов для начала работы. ::: -**Что вы узнаете:** -- Подключение к ClickHouse Cloud из блокнотов Marimo с использованием chDB -- Запрос удалённых наборов данных и преобразование результатов в Pandas DataFrames -- Визуализация данных с помощью Plotly в Marimo -- Использование реактивной модели выполнения Marimo для интерактивного исследования данных +**Чему вы научитесь:** + +* Подключаться к ClickHouse Cloud из ноутбуков Marimo с использованием chDB +* Выполнять запросы к удалённым наборам данных и преобразовывать результаты в объекты DataFrame библиотеки Pandas +* Визуализировать данные с помощью Plotly в Marimo +* Использовать реактивную модель выполнения Marimo для интерактивного исследования данных -Мы будем использовать набор данных о ценах на недвижимость в Великобритании, который доступен в ClickHouse Cloud как один из стартовых наборов данных. -Он содержит данные о ценах, по которым были проданы дома в Великобритании с 1995 по 2024 год. +Мы будем использовать набор данных UK Property Price, который доступен в ClickHouse Cloud как один из стартовых наборов данных. +Он содержит данные о ценах, по которым дома продавались в Соединённом Королевстве с 1995 по 2024 год. -## Настройка {#setup} -### Загрузка набора данных {#loading-the-dataset} +## Настройка -Чтобы добавить этот набор данных к существующему сервису ClickHouse Cloud, войдите в [console.clickhouse.cloud](https://console.clickhouse.cloud/) с вашими учётными данными. +### Загрузка набора данных -В левом меню нажмите `Data sources` (Источники данных). Затем нажмите `Predefined sample data` (Предопределённые примеры данных): +Чтобы добавить этот набор данных в существующий сервис ClickHouse Cloud, войдите на [console.clickhouse.cloud](https://console.clickhouse.cloud/) с использованием данных своей учётной записи. -Добавление примера набора данных +В меню слева нажмите `Data sources`. Затем нажмите `Predefined sample data`: -Выберите `Get started` (Начать) в карточке UK property price paid data (4GB) (Данные о ценах на недвижимость в Великобритании (4 ГБ)): +Добавить пример набора данных -Выбор набора данных о ценах в Великобритании +Выберите `Get started` в карточке UK property price paid data (4GB): -Затем нажмите `Import dataset` (Импортировать набор данных): +Выбор набора данных UK price paid -Импорт набора данных о ценах в Великобритании +Затем нажмите `Import dataset`: -ClickHouse автоматически создаст таблицу `pp_complete` в базе данных `default` и заполнит таблицу 28,92 миллионами строк данных о ценах. +Импорт набора данных UK price paid -Чтобы снизить вероятность раскрытия ваших учётных данных, мы рекомендуем добавить имя пользователя и пароль Cloud в качестве переменных среды на вашем локальном компьютере. -Из терминала выполните следующую команду, чтобы добавить ваше имя пользователя и пароль в качестве переменных среды: +ClickHouse автоматически создаст таблицу `pp_complete` в базе данных `default` и заполнит таблицу 28,92 миллионами строк ценовых данных. -### Настройка учётных данных {#setting-up-credentials} +Чтобы снизить вероятность раскрытия ваших учётных данных, мы рекомендуем добавить имя пользователя и пароль ClickHouse Cloud в виде переменных окружения на локальной машине. +В терминале выполните следующую команду, чтобы добавить имя пользователя и пароль как переменные окружения: + +### Настройка учётных данных ```bash -export CLICKHOUSE_CLOUD_HOSTNAME= +export CLICKHOUSE_CLOUD_HOSTNAME=<ИМЯ_ХОСТА> export CLICKHOUSE_CLOUD_USER=default -export CLICKHOUSE_CLOUD_PASSWORD=your_actual_password +export CLICKHOUSE_CLOUD_PASSWORD=ваш_реальный_пароль ``` :::note -Переменные среды выше сохраняются только в течение вашей сессии терминала. -Чтобы установить их постоянно, добавьте их в конфигурационный файл вашей оболочки. +Переменные окружения, указанные выше, сохраняются только на время текущего сеанса терминала. +Чтобы сделать их постоянными, добавьте их в конфигурационный файл вашей оболочки. ::: -### Установка Marimo {#installing-marimo} +### Установка Marimo -Теперь активируйте вашу виртуальную среду. -Из виртуальной среды установите следующие пакеты, которые мы будем использовать в этом руководстве: +Теперь активируйте ваше виртуальное окружение. +Находясь в виртуальном окружении, установите следующие пакеты, которые мы будем использовать в этом руководстве: ```python pip install chdb pandas plotly marimo ``` -Создайте новый блокнот Marimo с помощью следующей команды: +Создайте новый ноутбук Marimo с помощью следующей команды: ```bash marimo edit clickhouse_exploration.py ``` -Должно открыться новое окно браузера с интерфейсом Marimo на localhost:2718: +В новом окне браузера должен открыться интерфейс Marimo по адресу localhost:2718: + +Интерфейс Marimo -Интерфейс Marimo +Ноутбуки Marimo представляют собой обычные файлы Python, поэтому их легко размещать в системах контроля версий и делиться ими с другими. -Блокноты Marimo хранятся как чистые Python-файлы, что делает их удобными для контроля версий и совместного использования с другими. -## Установка зависимостей {#installing-dependencies} +## Установка зависимостей В новой ячейке импортируйте необходимые пакеты: @@ -108,30 +111,31 @@ import plotly.express as px import plotly.graph_objects as go ``` -Если вы наведёте курсор мыши на ячейку, вы увидите два кружка с символом "+". +Если вы наведёте курсор мыши на ячейку, вы увидите, что появляются два кружка с символом «+». Вы можете нажать на них, чтобы добавить новые ячейки. -Добавьте новую ячейку и выполните простой запрос, чтобы проверить, что всё настроено правильно: +Добавьте новую ячейку и выполните простой запрос, чтобы убедиться, что всё настроено правильно: ```python -result = chdb.query("SELECT 'Hello ClickHouse from Marimo!'", "DataFrame") +result = chdb.query("SELECT 'Привет, ClickHouse, от Marimo!'", "DataFrame") result ``` -Вы должны увидеть результат, показанный под только что выполненной ячейкой: +Под ячейкой, которую вы только что запустили, должен появиться результат: -Marimo hello world +Marimo hello world -## Исследование данных {#exploring-the-data} -Теперь, когда набор данных о ценах в Великобритании настроен, а chDB запущен и работает в блокноте Marimo, мы можем начать исследовать наши данные. -Давайте представим, что нас интересует, как цена изменялась со временем для конкретной области в Великобритании, такой как столица Лондон. -Функция [`remoteSecure`](/docs/sql-reference/table-functions/remote) ClickHouse позволяет легко извлекать данные из ClickHouse Cloud. -Вы можете указать chDB вернуть эти данные в процессе в виде фрейма данных Pandas — это удобный и знакомый способ работы с данными. +## Исследование данных -### Запрос данных ClickHouse Cloud {#querying-clickhouse-cloud-data} +После того как мы настроили набор данных UK price paid и запустили chDB в блокноте Marimo, можно приступать к исследованию данных. +Представим, что нас интересует, как изменялась цена со временем для определённого района в Великобритании, например столицы — Лондона. +Функция ClickHouse [`remoteSecure`](/docs/sql-reference/table-functions/remote) позволяет легко получать данные из ClickHouse Cloud. +Вы можете указать chDB вернуть эти данные напрямую в виде фрейма данных Pandas — это удобный и хорошо знакомый способ работы с данными. -Создайте новую ячейку со следующим запросом для получения данных о ценах в Великобритании из вашего сервиса ClickHouse Cloud и преобразования их в `pandas.DataFrame`: +### Выполнение запросов к данным в ClickHouse Cloud + +Создайте новую ячейку со следующим запросом, чтобы получить данные UK price paid из вашего сервиса ClickHouse Cloud и преобразовать их в `pandas.DataFrame`: ```python query = f""" @@ -154,38 +158,39 @@ df = chdb.query(query, "DataFrame") df.head() ``` -В приведённом выше фрагменте кода `chdb.query(query, "DataFrame")` выполняет указанный запрос и выводит результат в виде фрейма данных Pandas. +В приведённом выше фрагменте `chdb.query(query, "DataFrame")` выполняет указанный запрос и выводит результат в виде Pandas DataFrame. В запросе мы используем функцию [`remoteSecure`](/sql-reference/table-functions/remote) для подключения к ClickHouse Cloud. Функция `remoteSecure` принимает в качестве параметров: -- строку подключения -- имя базы данных и таблицы для использования -- ваше имя пользователя -- ваш пароль -В качестве передовой практики безопасности вы должны предпочесть использование переменных среды для параметров имени пользователя и пароля, а не указывать их непосредственно в функции, хотя это возможно, если вы хотите. +* строку подключения +* имя базы данных и таблицы +* ваше имя пользователя +* ваш пароль + +В целях безопасности рекомендуется использовать переменные окружения для параметров имени пользователя и пароля, а не указывать их непосредственно в функции, хотя при необходимости это возможно. Функция `remoteSecure` подключается к удалённому сервису ClickHouse Cloud, выполняет запрос и возвращает результат. -В зависимости от размера ваших данных это может занять несколько секунд. +В зависимости от объёма ваших данных это может занять несколько секунд. -В этом случае мы возвращаем среднюю цену за год и фильтруем по `town='LONDON'`. -Результат затем сохраняется как DataFrame в переменной с именем `df`. +В данном случае мы возвращаем среднюю цену за год и фильтруем по `town='LONDON'`. +Затем результат сохраняется как DataFrame в переменной `df`. -### Визуализация данных {#visualizing-the-data} +### Визуализация данных -Теперь, когда данные доступны нам в знакомой форме, давайте исследуем, как цены на недвижимость в Лондоне изменялись со временем. +Теперь, когда данные доступны нам в привычной форме, давайте посмотрим, как со временем изменялись цены на недвижимость в Лондоне. -Marimo особенно хорошо работает с интерактивными библиотеками построения графиков, такими как Plotly. -В новой ячейке создайте интерактивную диаграмму: +Marimo особенно хорошо работает с интерактивными библиотеками визуализации, такими как Plotly. +В новой ячейке создайте интерактивный график: ```python fig = px.line( df, x='year', y='price', - title='Average Property Prices in London Over Time', - labels={'price': 'Average Price (£)', 'year': 'Year'} + title='Средние цены на недвижимость в Лондоне по годам', + labels={'price': 'Средняя цена (£)', 'year': 'Год'} ) fig.update_traces(mode='lines+markers') @@ -193,26 +198,26 @@ fig.update_layout(hovermode='x unified') fig ``` -Возможно, неудивительно, что цены на недвижимость в Лондоне со временем существенно выросли. +Вполне ожидаемо, что со временем цены на недвижимость в Лондоне значительно выросли. -Визуализация данных в Marimo +Визуализация данных Marimo -Одна из сильных сторон Marimo — это его реактивная модель выполнения. Давайте создадим интерактивный виджет для динамического выбора различных городов. +Одна из сильных сторон Marimo — её реактивная модель исполнения. Давайте создадим интерактивный виджет для динамического выбора городов. -### Интерактивный выбор города {#interactive-town-selection} +### Интерактивный выбор города -В новой ячейке создайте выпадающий список для выбора различных городов: +В новой ячейке создайте выпадающий список для выбора городов: ```python town_selector = mo.ui.dropdown( options=['LONDON', 'MANCHESTER', 'BIRMINGHAM', 'LEEDS', 'LIVERPOOL'], value='LONDON', - label='Select a town:' + label='Выберите город:' ) town_selector ``` -В другой ячейке создайте запрос, который реагирует на выбор города. Когда вы измените выпадающий список, эта ячейка автоматически повторно выполнится: +В другой ячейке создайте запрос, который реагирует на выбор города. Когда вы измените значение в выпадающем списке, эта ячейка будет выполняться повторно автоматически: ```python query_reactive = f""" @@ -234,17 +239,18 @@ df_reactive = chdb.query(query_reactive, "DataFrame") df_reactive ``` -Теперь создайте диаграмму, которая автоматически обновляется при изменении города. -Вы можете переместить диаграмму над динамическим фреймом данных, чтобы она появлялась +Теперь создайте диаграмму, которая будет автоматически обновляться при смене города. +Вы можете переместить диаграмму выше динамического датафрейма, чтобы она располагалась под ячейкой с выпадающим списком. + ```python fig_reactive = px.line( df_reactive, x='year', y='price', - title=f'Average Property Prices in {town_selector.value} Over Time', - labels={'price': 'Average Price (£)', 'year': 'Year'} + title=f'Средние цены на недвижимость в {town_selector.value} по годам', + labels={'price': 'Средняя цена (£)', 'year': 'Год'} ) fig_reactive.update_traces(mode='lines+markers') @@ -252,15 +258,15 @@ fig_reactive.update_layout(hovermode='x unified') fig_reactive ``` -Теперь, когда вы выбираете город из выпадающего списка, диаграмма будет обновляться динамически: +Теперь, когда вы выбираете город из выпадающего списка, график будет динамически обновляться: -Динамическая диаграмма Marimo +Динамический график Marimo -### Исследование распределения цен с интерактивными диаграммами типа "ящик с усами" {#exploring-price-distributions} +### Изучение распределения цен с помощью интерактивных коробчатых диаграмм -Давайте глубже погрузимся в данные, изучив распределение цен на недвижимость в Лондоне для различных лет. -Диаграмма "ящик с усами" покажет нам медиану, квартили и выбросы, давая нам гораздо лучшее понимание, чем просто средняя цена. -Сначала давайте создадим ползунок года, который позволит нам интерактивно исследовать различные годы: +Давайте глубже изучим данные, рассмотрев распределение цен на недвижимость в Лондоне по разным годам. +Коробчатая диаграмма (box-and-whisker plot) покажет медиану, квартили и выбросы, давая гораздо более полное представление, чем просто средняя цена. +Сначала создадим ползунок выбора года, который позволит нам интерактивно исследовать данные за разные годы: В новой ячейке добавьте следующее: @@ -270,14 +276,14 @@ year_slider = mo.ui.slider( stop=2024, value=2020, step=1, - label='Select Year:', + label='Выберите год:', show_value=True ) year_slider ``` -Теперь давайте запросим индивидуальные цены на недвижимость для выбранного года. -Обратите внимание, что мы не агрегируем здесь — нам нужны все индивидуальные транзакции для построения нашего распределения: +Теперь давайте запросим цены отдельных объектов недвижимости за выбранный год. +Обратите внимание, что мы здесь не выполняем агрегацию — нам нужны все отдельные сделки, чтобы построить наше распределение: ```python query_distribution = f""" @@ -297,40 +303,46 @@ WHERE town = 'LONDON' """ df_distribution = chdb.query(query_distribution, "DataFrame") +``` -# создаём интерактивную диаграмму "ящик с усами". -fig_box = go.Figure() - -fig_box.add_trace( - go.Box( - y=df_distribution['price'], - name=f'London {year_slider.value}', - boxmean='sd', # Показать среднее и стандартное отклонение - marker_color='lightblue', - boxpoints='outliers' # Показать точки-выбросы - ) + +# Создадим интерактивную диаграмму размаха. + +fig_box = go.Figure() + +fig_box.add_trace( +go.Box( +y=df_distribution['price'], +name=f'London {year_slider.value}', +boxmean='sd', # Показать среднее значение и стандартное отклонение +marker_color='lightblue', +boxpoints='outliers' # Показать значения-выбросы +) ) -fig_box.update_layout( - title=f'Distribution of Property Prices in London ({year_slider.value})', - yaxis=dict( - title='Price (£)', - tickformat=',.0f' - ), - showlegend=False, - height=600 +fig_box.update_layout( +title=f'Распределение цен на недвижимость в Лондоне ({year_slider.value})', +yaxis=dict( +title='Цена (£)', +tickformat=',.0f' +), +showlegend=False, +height=600 ) -fig_box +fig_box + ``` -Если вы выберете кнопку параметров в правом верхнем углу ячейки, вы можете скрыть +Если нажать кнопку параметров в правом верхнем углу ячейки, можно скрыть код. -По мере перемещения ползунка график будет автоматически обновляться благодаря реактивному выполнению Marimo: +При перемещении ползунка график будет автоматически обновляться благодаря реактивному выполнению Marimo: + +Динамический график Marimo +``` -Динамическая диаграмма Marimo -## Заключение {#summary} +## Итоги {#summary} -Это руководство продемонстрировало, как вы можете использовать chDB для исследования ваших данных в ClickHouse Cloud с помощью блокнотов Marimo. -Используя набор данных о ценах на недвижимость в Великобритании, мы показали, как запрашивать удалённые данные ClickHouse Cloud с помощью функции `remoteSecure()` и преобразовывать результаты непосредственно в фреймы данных Pandas для анализа и визуализации. -Благодаря chDB и реактивной модели выполнения Marimo специалисты по анализу данных могут использовать мощные SQL-возможности ClickHouse вместе со знакомыми инструментами Python, такими как Pandas и Plotly, с дополнительным преимуществом интерактивных виджетов и автоматического отслеживания зависимостей, которые делают исследовательский анализ более эффективным и воспроизводимым. \ No newline at end of file +В этом руководстве было показано, как использовать chDB для исследования данных в ClickHouse Cloud с помощью ноутбуков Marimo. +На примере набора данных UK Property Price мы продемонстрировали, как выполнять запросы к удалённым данным ClickHouse Cloud с помощью функции `remoteSecure()` и преобразовывать результаты непосредственно в DataFrame библиотеки Pandas для анализа и визуализации. +Благодаря chDB и реактивной модели выполнения Marimo дата-сайентисты могут использовать мощные возможности SQL в ClickHouse вместе с привычными инструментами Python, такими как Pandas и Plotly, с дополнительным преимуществом интерактивных виджетов и автоматического отслеживания зависимостей, что делает исследовательский анализ более эффективным и воспроизводимым. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/use-cases/observability/clickstack/api-reference.md b/i18n/ru/docusaurus-plugin-content-docs/current/use-cases/observability/clickstack/api-reference.md new file mode 100644 index 00000000000..b5cf6d131a2 --- /dev/null +++ b/i18n/ru/docusaurus-plugin-content-docs/current/use-cases/observability/clickstack/api-reference.md @@ -0,0 +1,15 @@ +--- +slug: /use-cases/observability/clickstack/api-reference +title: 'Справочник API' +pagination_prev: null +pagination_next: null +description: 'Главная страница документации по справочнику API ClickStack' +doc_type: 'landing-page' +--- + +import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; +import {Button} from "@clickhouse/click-ui/bundled"; + + + +Справочная документация по API доступна на [этой странице](https://www.clickhouse.com/docs/clickstack/api-reference) diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/use-cases/observability/clickstack/integration-examples/redis-metrics.md b/i18n/ru/docusaurus-plugin-content-docs/current/use-cases/observability/clickstack/integration-examples/redis-metrics.md index e81846f66a3..dde5f743efe 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/use-cases/observability/clickstack/integration-examples/redis-metrics.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/use-cases/observability/clickstack/integration-examples/redis-metrics.md @@ -16,7 +16,6 @@ import finish_import from '@site/static/images/clickstack/import-redis-metrics-d import example_dashboard from '@site/static/images/clickstack/redis-metrics-dashboard.png'; import { TrackedLink } from '@site/src/components/GalaxyTrackedLink/GalaxyTrackedLink'; - # Мониторинг метрик Redis с помощью ClickStack {#redis-metrics-clickstack} :::note[TL;DR] @@ -347,7 +346,6 @@ docker exec <имя-контейнера> ls -lh /etc/otelcol-contrib/custom.con docker exec <имя-контейнера> cat /etc/otelcol-contrib/custom.config.yaml ``` - ### Метрики не отображаются в HyperDX Убедитесь, что Redis доступен из коллектора: @@ -378,7 +376,6 @@ docker exec cat /etc/otel/supervisor-data/agent.log | grep -i redis # Проверьте наличие ошибок подключения или сбоев аутентификации ``` - ### Ошибки аутентификации Если вы видите ошибки аутентификации в журналах: @@ -403,7 +400,6 @@ receivers: password: ${env:REDIS_PASSWORD} ``` - ### Проблемы с сетевой связью Если ClickStack не может подключиться к Redis: @@ -419,7 +415,6 @@ docker exec telnet redis 6379 Убедитесь, что в вашем файле Docker Compose или командах `docker run` оба контейнера подключены к одной сети. - ## Следующие шаги {#next-steps} Если вы хотите продолжить изучение, вот несколько следующих шагов для экспериментов с мониторингом: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/whats-new/changelog/index.md b/i18n/ru/docusaurus-plugin-content-docs/current/whats-new/changelog/index.md index f430dcdd6fb..11d08eaac43 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/whats-new/changelog/index.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/whats-new/changelog/index.md @@ -1,14 +1,16 @@ --- -description: 'Журнал изменений за 2025 год' -note: 'Этот файл сгенерирован с помощью yarn build' +description: 'Список изменений за 2025 год' +note: 'Этот файл сгенерирован с помощью команды yarn build' slug: /whats-new/changelog/ sidebar_position: 2 sidebar_label: '2025' -title: 'Журнал изменений за 2025 год' +title: 'Список изменений 2025' doc_type: 'changelog' --- ### Оглавление + +**[Релиз ClickHouse v25.11, 2025-11-25](#2511)**
**[Релиз ClickHouse v25.10, 2025-10-30](#2510)**
**[Релиз ClickHouse v25.9, 2025-09-25](#259)**
**[Релиз ClickHouse v25.8 LTS, 2025-08-28](#258)**
@@ -28,705 +30,904 @@ doc_type: 'changelog' **[Журнал изменений за 2018 год](https://clickhouse.com/docs/whats-new/changelog/2018/)**
**[Журнал изменений за 2017 год](https://clickhouse.com/docs/whats-new/changelog/2017/)**
+### Релиз ClickHouse 25.11, 2025-11-25 {#2511} -### Релиз ClickHouse 25.10, 2025-10-31 {#2510} +#### Несовместимое изменение +* Удалён устаревший тип данных `Object`. [#85718](https://github.com/ClickHouse/ClickHouse/pull/85718) ([Pavel Kruglov](https://github.com/Avogar)). +* Удалена устаревшая возможность `LIVE VIEW`. Если вы используете `LIVE VIEW`, обновление до новой версии будет невозможно. [#88706](https://github.com/ClickHouse/ClickHouse/pull/88706) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* В предыдущих версиях тип `Geometry` был алиасом типа `String`, но теперь это полноценный тип. [#83344](https://github.com/ClickHouse/ClickHouse/pull/83344) ([scanhex12](https://github.com/scanhex12)). +* Добавлено экранирование имён файлов, создаваемых для подстолбцов типа `Variant` в широких партах данных (Wide) таблиц MergeTree. Это изменение нарушает совместимость со старыми таблицами с типами данных Variant/Dynamic/JSON. Исправляет хранение типов со специальными символами внутри Variant (например, DateTime с определённым часовым поясом, который содержит `\`). Экранирование можно отключить, изменив настройку MergeTree `escape_variant_subcolumn_filenames` (для сохранения совместимости отключите эту настройку в конфигурации для MergeTree или установите настройку `compatibility` на предыдущую версию перед обновлением). Решает [#69590](https://github.com/ClickHouse/ClickHouse/issues/69590). [#87300](https://github.com/ClickHouse/ClickHouse/pull/87300) ([Pavel Kruglov](https://github.com/Avogar)). +* По умолчанию включён формат сериализации `with_size_stream` для типа данных `String`. Это изменение обратно совместимо, но новый формат сериализации поддерживается только начиная с версии 25.10, что означает невозможность отката до версий ранее 25.10. Если вы хотите сохранить возможность отката до версий 25.9 и более ранних, настройте `serialization_info_version` как `basic` и `string_serialization_version` как `single_stream` в разделе `merge_tree` конфигурации сервера. [#89329](https://github.com/ClickHouse/ClickHouse/pull/89329) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Добавлена поддержка пометки исключений тегами в HTTP-ответах, чтобы клиенты могли более надёжно анализировать исключения. Исправляет [#75175](https://github.com/ClickHouse/ClickHouse/issues/75175). Настройка `http_write_exception_in_output_format` по умолчанию отключена для обеспечения единообразия между форматами. [#88818](https://github.com/ClickHouse/ClickHouse/pull/88818) ([Kaviraj Kanagaraj](https://github.com/kavirajk)). Хотя не предполагается, что это нарушит какое-либо существующее поведение (в худшем случае к сообщению об исключении будет добавлена странная строка), всё же имеет смысл использовать «Изменение, нарушающее обратную совместимость» как категорию в changelog просто для информирования (потому что неизвестно, как какие-нибудь грязные скрипты могут разбирать сообщение об исключении). +* TODO, @Michicosun — уточнить или удалить. Диски `PlainRewritable` хранят дерево своей файловой системы в памяти. Если другой диск изменит структуру объектного хранилища, структура в памяти не будет обновлена, что приведёт к некорректным операциям файловой системы и возможным ошибкам вида no such key. [#89038](https://github.com/ClickHouse/ClickHouse/pull/89038) ([Mikhail Artemenko](https://github.com/Michicosun)). +* Исправлен приоритет настроек SASL для хранилища Kafka. Табличные настройки SASL, заданные в запросах CREATE TABLE, теперь корректно переопределяют настройки consumer/producer из конфигурационных файлов. [#89401](https://github.com/ClickHouse/ClickHouse/pull/89401) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). +* Временные метки Parquet без часового пояса (isAdjustedToUTC=false) теперь читаются как DateTime64(..., 'UTC') вместо DateTime64(...). Это менее ошибочно, так как преобразование такой временной метки в UTC в строку даёт корректное локальное время. Используйте `input_format_parquet_local_time_as_utc = 0`, чтобы вернуть старое поведение. Решает проблему [#87469](https://github.com/ClickHouse/ClickHouse/issues/87469). [#87872](https://github.com/ClickHouse/ClickHouse/pull/87872) ([Michael Kolupaev](https://github.com/al13n321)). +* Небольшое улучшение кодека `T64`: он больше не принимает типы данных, не выровненные по размеру элемента сжатия, что иначе приводило бы к ошибке. Исправляет [#89282](https://github.com/ClickHouse/ClickHouse/issues/89282). [#89432](https://github.com/ClickHouse/ClickHouse/pull/89432) ([yanglongwei](https://github.com/ylw510)). + +#### Новая функция + +* Добавлен тип `Geometry`. Для него поддерживается чтение форматов `WKB` и `WKT`. В предыдущих версиях тип `Geometry` был псевдонимом типа `String`, но теперь это полноценный тип. [#83344](https://github.com/ClickHouse/ClickHouse/pull/83344) ([scanhex12](https://github.com/scanhex12)). +* Добавлен новый оператор SQL `EXECUTE AS` для поддержки выполнения от имени других пользователей. Исправляет [#39048](https://github.com/ClickHouse/ClickHouse/issues/39048). [#70775](https://github.com/ClickHouse/ClickHouse/pull/70775) ([Shankar](https://github.com/shiyer7474)). +* Добавлена функция `naiveBayesClassifier` для классификации текста с использованием метода наивного Байеса на основе n-грамм. [#88677](https://github.com/ClickHouse/ClickHouse/pull/88677) ([Nihal Z. Miaji](https://github.com/nihalzp)). +* Добавлена поддержка дробных значений параметров `LIMIT` и `OFFSET` для выборки доли таблицы. Закрывает [#81892](https://github.com/ClickHouse/ClickHouse/issues/81892). [#88755](https://github.com/ClickHouse/ClickHouse/pull/88755) ([Ahmed Gouda](https://github.com/0xgouda)). +* Подсистема ClickHouse для каталога Microsoft OneLake. [#89366](https://github.com/ClickHouse/ClickHouse/pull/89366) ([scanhex12](https://github.com/scanhex12)). +* Добавлена функция `flipCoordinates`, которая распаковывает заданное количество измерений массива и переставляет указатели местами внутри столбца Tuple. Исправляет [#79469](https://github.com/ClickHouse/ClickHouse/issues/79469). [#79634](https://github.com/ClickHouse/ClickHouse/pull/79634) ([Sachin Kumar Singh](https://github.com/sachinkumarsingh092)). +* Добавлена таблица `system.unicode`, содержащая список символов Юникода и их свойств. Закрывает [#80055](https://github.com/ClickHouse/ClickHouse/issues/80055). [#80857](https://github.com/ClickHouse/ClickHouse/pull/80857) ([wxybear](https://github.com/wxybear)). +* Добавлена новая настройка MergeTree `merge_max_dynamic_subcolumns_in_wide_part`, позволяющая ограничивать число динамических подстолбцов в широкой парте после слияния независимо от параметров, заданных в типе данных. [#87646](https://github.com/ClickHouse/ClickHouse/pull/87646) ([Pavel Kruglov](https://github.com/Avogar)). +* Добавлена поддержка оконной функции `cume_dist`. Исправлена проблема [#86920](https://github.com/ClickHouse/ClickHouse/issues/86920). [#88102](https://github.com/ClickHouse/ClickHouse/pull/88102) ([Manuel](https://github.com/raimannma)). +* Теперь пользователь может добавить новый аргумент `preprocessor` при построении текстового индекса. Этот аргумент — произвольное выражение, которое преобразует каждый документ перед токенизацией. [#88272](https://github.com/ClickHouse/ClickHouse/pull/88272) ([Jimmy Aguilar Mena](https://github.com/Ergus)). +* Добавляет поле `memory_usage` в `X-ClickHouse-Progress` и `X-ClickHouse-Summary`. Его можно использовать для сбора данных об использовании памяти запросами в режиме реального времени на стороне клиента. [#88393](https://github.com/ClickHouse/ClickHouse/pull/88393) ([Christoph Wurm](https://github.com/cwurm)). +* Добавлена настройка `into_outfile_create_parent_directories` для автоматического создания родительских директорий для `INTO OUTFILE`, что предотвращает ошибки, когда путь вывода не существует. Это упрощает процессы, в которых запросы записывают результаты во вложенные директории. Исправляет [#88610](https://github.com/ClickHouse/ClickHouse/issues/88610). [#88795](https://github.com/ClickHouse/ClickHouse/pull/88795) ([Saksham](https://github.com/Saksham10-11)). +* Добавлена поддержка синтаксиса `CREATE OR REPLACE` для временных таблиц. Закрывает [#35888](https://github.com/ClickHouse/ClickHouse/issues/35888). [#89450](https://github.com/ClickHouse/ClickHouse/pull/89450) ([Aleksandr Musorin](https://github.com/AVMusorin)). +* Поддержка функции `arrayRemove` для удаления всех элементов, равных `elem`, из массива `arr`. Она нужна только для совместимости с Postgres, поскольку в ClickHouse уже есть гораздо более мощная функция `arrayFilter`. Исправляет [#52099](https://github.com/ClickHouse/ClickHouse/issues/52099). [#89585](https://github.com/ClickHouse/ClickHouse/pull/89585) ([tiwarysaurav](https://github.com/tiwarysaurav)). +* Добавлена скалярная функция `midpoint` для вычисления среднего значения. Исправлена задача [#89029](https://github.com/ClickHouse/ClickHouse/issues/89029). [#89679](https://github.com/ClickHouse/ClickHouse/pull/89679) ([simonmichal](https://github.com/simonmichal)). +* В веб-интерфейсе теперь доступна кнопка загрузки. Она позволяет скачать полный результат, даже если в интерфейсе отображается только его часть. [#89768](https://github.com/ClickHouse/ClickHouse/pull/89768) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Добавлена настройка `arrow_flight_request_descriptor_type` для поддержки Dremio и других серверов Arrow Flight, которым требуются дескрипторы командного типа. Реализует [#89523](https://github.com/ClickHouse/ClickHouse/issues/89523). [#89826](https://github.com/ClickHouse/ClickHouse/pull/89826) ([Shreyas Ganesh](https://github.com/shreyasganesh0)). +* Новые агрегатные функции `argAndMin` и `argAndMax`, которые возвращают аргумент и соответствующее минимальное/максимальное значение. В предыдущих версиях это также можно было сделать с использованием кортежа в качестве аргумента. [#89884](https://github.com/ClickHouse/ClickHouse/pull/89884) ([AbdAlRahman Gad](https://github.com/AbdAlRahmanGad)). +* Настройки записи и проверки контрольных сумм Parquet. [#79012](https://github.com/ClickHouse/ClickHouse/pull/79012) ([Michael Kolupaev](https://github.com/al13n321)). +* Добавлена настройка `kafka_schema_registry_skip_bytes` в табличный движок Kafka для пропуска байт заголовка оболочки (например, 19-байтного префикса AWS Glue Schema Registry) перед разбором полезной нагрузки сообщения. Это позволяет ClickHouse читать сообщения из реестров схем, которые добавляют метаданные в заголовки. [#89621](https://github.com/ClickHouse/ClickHouse/pull/89621) ([Taras Polishchuk](https://github.com/wake-up-neo)). +* Добавлена функция `h3PolygonToCells`, которая заполняет геометрию h3‑шестиугольниками. Решает проблему [#33991](https://github.com/ClickHouse/ClickHouse/issues/33991). [#66262](https://github.com/ClickHouse/ClickHouse/pull/66262) ([Zacharias Knudsen](https://github.com/zachasme)). +* Добавлен новый виртуальный столбец `_tags` (`Map(String, String)`) со всеми тегами, связанными с объектом в S3 (обратите внимание, что если у объекта нет тегов, дополнительный запрос выполняться не будет). Решает [#72945](https://github.com/ClickHouse/ClickHouse/issues/72945). [#77773](https://github.com/ClickHouse/ClickHouse/pull/77773) ([Zicong Qu](https://github.com/zicongleoqu)). +* TODO, @vdimir — объяснить разницу и перенести в другую категорию. Добавлены NULL-безопасные операторы сравнения `<=>` (псевдоним `IS NOT DISTINCT FROM`) и `IS DISTINCT FROM` для выполнения проверок на равенство с корректной обработкой значений `NULL`. Исправляет [#86763](https://github.com/ClickHouse/ClickHouse/issues/86763). [#87581](https://github.com/ClickHouse/ClickHouse/pull/87581) ([yanglongwei](https://github.com/ylw510)). +#### Экспериментальные возможности -#### Обратно несовместимое изменение +* Поддержка получения TLS-сертификатов от ACME-провайдеров, [RFC 8555](https://datatracker.ietf.org/doc/html/rfc8555), таких как Let's Encrypt. Это позволяет автоматически настраивать TLS в распределённых кластерах. [#66315](https://github.com/ClickHouse/ClickHouse/pull/66315) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* Поддержка части Prometheus HTTP Query API. Чтобы включить её, добавьте правило с типом `query_api` в раздел `` конфигурационного файла. Поддерживаемые обработчики: `/api/v1/query_range` и `/api/v1/query`. [#86132](https://github.com/ClickHouse/ClickHouse/pull/86132) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). +* Полнотекстовый поиск теперь в статусе бета (ранее был экспериментальной возможностью). [#88928](https://github.com/ClickHouse/ClickHouse/pull/88928) ([Robert Schulze](https://github.com/rschu1ze)). +* `Alias` переведён в разряд экспериментальных возможностей, может быть включён параметром `allow_experimental_alias_table_engine = 1`. [#89712](https://github.com/ClickHouse/ClickHouse/pull/89712) ([Kai Zhu](https://github.com/nauu)). -* Изменено значение настройки по умолчанию `schema_inference_make_columns_nullable`: теперь используется информация о том, являются ли столбцы `Nullable`, из метаданных Parquet/ORC/Arrow, вместо того чтобы делать все столбцы Nullable. Для текстовых форматов изменений нет. [#71499](https://github.com/ClickHouse/ClickHouse/pull/71499) ([Michael Kolupaev](https://github.com/al13n321)). -* Кэш результатов запросов будет игнорировать настройку `log_comment`, чтобы изменение только `log_comment` в запросе больше не приводило к промаху кэша. Существует небольшая вероятность, что некоторые пользователи намеренно сегментировали свой кэш, варьируя `log_comment`. Это изменение изменяет такое поведение и, следовательно, является обратно несовместимым. Пожалуйста, используйте настройку `query_cache_tag` для этой цели. [#79878](https://github.com/ClickHouse/ClickHouse/pull/79878) ([filimonov](https://github.com/filimonov)). -* В предыдущих версиях запросы с табличными функциями, названными так же, как функции-реализации операторов, форматировались непоследовательно. Закрывает [#81601](https://github.com/ClickHouse/ClickHouse/issues/81601). Закрывает [#81977](https://github.com/ClickHouse/ClickHouse/issues/81977). Закрывает [#82834](https://github.com/ClickHouse/ClickHouse/issues/82834). Закрывает [#82835](https://github.com/ClickHouse/ClickHouse/issues/82835). Запросы EXPLAIN SYNTAX больше не будут всегда форматировать операторы — новое поведение лучше отражает назначение объяснения синтаксиса. `clickhouse-format`, `formatQuery` и подобные больше не будут форматировать функции как операторы, если в запросе они использованы в функциональной форме. [#82825](https://github.com/ClickHouse/ClickHouse/pull/82825) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Запрещено использование типа `Dynamic` в ключах `JOIN`. Это может привести к непредсказуемым результатам при сравнении значения типа `Dynamic` со значением типа, отличным от `Dynamic`. Лучше предварительно привести столбец `Dynamic` к нужному типу. [#86358](https://github.com/ClickHouse/ClickHouse/pull/86358) ([Pavel Kruglov](https://github.com/Avogar)). -* Опция сервера `storage_metadata_write_full_object_key` включена по умолчанию, сейчас её нельзя отключить. Это обратно совместимое изменение, просто примите его во внимание. Это изменение вперёд совместимо только с релизами 25.x. Это означает, что при необходимости отката нового релиза вы сможете откатиться только на релизы линейки 25.x. [#87335](https://github.com/ClickHouse/ClickHouse/pull/87335) ([Sema Checherinda](https://github.com/CheSema)). -* Уменьшено значение `replicated_deduplication_window_seconds` с одной недели до одного часа, чтобы уменьшить количество znode, хранящихся в ZooKeeper, при низкой скорости вставки. [#87414](https://github.com/ClickHouse/ClickHouse/pull/87414) ([Sema Checherinda](https://github.com/CheSema)). -* Переименована настройка `query_plan_use_new_logical_join_step` в `query_plan_use_logical_join_step`. [#87679](https://github.com/ClickHouse/ClickHouse/pull/87679) ([Vladimir Cherkasov](https://github.com/vdimir)). -* Новый синтаксис позволяет более гибко задавать параметр tokenizer для текстового индекса. [#87997](https://github.com/ClickHouse/ClickHouse/pull/87997) ([Elmi Ahmadov](https://github.com/ahmadov)). -* Функции `searchAny` и `searchAll` переименованы в `hasAnyTokens` и `hasAllTokens` для большей согласованности с существующей функцией `hasToken`. [#88109](https://github.com/ClickHouse/ClickHouse/pull/88109) ([Robert Schulze](https://github.com/rschu1ze)). -* Из файлового кэша удалён параметр `cache_hits_threshold`. Эта функциональность была добавлена внешним контрибьютором ещё до появления политики кэша SLRU, и теперь, когда она есть, нет смысла поддерживать оба механизма. [#88344](https://github.com/ClickHouse/ClickHouse/pull/88344) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Два небольших изменения в том, как работают настройки `min_free_disk_ratio_to_perform_insert` и `min_free_disk_bytes_to_perform_insert`: - используются незарезервированные, а не доступные байты для определения, следует ли отклонить вставку. Вероятно, это не критично, если резервы для фоновых слияний и мутаций малы по сравнению с настроенными порогами, но так более правильно. - Эти настройки не применяются к системным таблицам. Причина в том, что нам по-прежнему нужно, чтобы такие таблицы, как `query_log`, продолжали обновляться. Это сильно помогает при отладке. Объём данных, записываемых в системные таблицы, обычно невелик по сравнению с пользовательскими данными, поэтому они могут продолжать работать гораздо дольше при разумном пороге `min_free_disk_ratio_to_perform_insert`. [#88468](https://github.com/ClickHouse/ClickHouse/pull/88468) ([c-end](https://github.com/c-end)). -* Включён асинхронный режим для внутренней репликации Keeper. Keeper сохранит прежнее поведение с возможными улучшениями производительности. Если вы обновляетесь с версии старее 23.9, необходимо сначала обновиться до 23.9+ и затем — до 25.10+. Вы также можете установить `keeper_server.coordination_settings.async_replication` в значение 0 перед обновлением и включить его после завершения обновления. [#88515](https://github.com/ClickHouse/ClickHouse/pull/88515) ([Antonio Andelic](https://github.com/antonio2368)). +#### Повышение производительности +* Parquet reader v3 включен по умолчанию. [#88827](https://github.com/ClickHouse/ClickHouse/pull/88827) ([Michael Kolupaev](https://github.com/al13n321)). +* Распределённое выполнение: лучше разбивать задачи по идентификаторам групп строк, а не по файлам. [#87508](https://github.com/ClickHouse/ClickHouse/pull/87508) ([scanhex12](https://github.com/scanhex12)). +* `RIGHT` и `FULL` JOIN теперь используют ConcurrentHashJoin; это означает, что эти типы соединений выполняются с более высокой степенью параллелизма. В различных сценариях `RIGHT` и `FULL` JOIN работают до двух раз быстрее. Устраняет [#78027](https://github.com/ClickHouse/ClickHouse/issues/78027). [#78462](https://github.com/ClickHouse/ClickHouse/pull/78462) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* Оптимизация обработки больших значений константных выражений в запросах. Закрывает [#72880](https://github.com/ClickHouse/ClickHouse/issues/72880). [#81104](https://github.com/ClickHouse/ClickHouse/pull/81104) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* Запросы `SELECT` до 8 раз быстрее при интенсивном отсечении партиций на таблицах с более чем 10 000 частями. [#85535](https://github.com/ClickHouse/ClickHouse/pull/85535) ([James Morrison](https://github.com/jawm)). +* Когда запрос использует фиксированную хеш-таблицу для состояния агрегации (GROUP BY по небольшому целочисленному значению), ClickHouse параллельно объединяет состояние агрегации, чтобы ускорить выполнение запроса. [#87366](https://github.com/ClickHouse/ClickHouse/pull/87366) ([Jianfei Hu](https://github.com/incfly)). +* Разрешить использование проекций (которые выполняют SELECT `_part_offset` и используют иной ORDER BY) в качестве вторичного индекса. При включении параметра некоторые предикаты запроса могут использоваться для чтения из частей проекций и генерации битовых карт для эффективной фильтрации строк на этапе PREWHERE. Это третий шаг в реализации индекса проекций, следующий за [#80343](https://github.com/ClickHouse/ClickHouse/issues/80343). [#81021](https://github.com/ClickHouse/ClickHouse/pull/81021) ([Amos Bird](https://github.com/amosbird)). +* Исправлен VDSO для редких систем на базе Aarch64 и, возможно, других сочетаний архитектур и версий ядра. [#86096](https://github.com/ClickHouse/ClickHouse/pull/86096) ([Tomas Hulata](https://github.com/tombokombo)). +* Ускорена декомпрессия LZ4 за счёт упрощения кода и оптимизации [алгоритма выбора](https://clickhouse.com/blog/lz4-compression-in-clickhouse#how-to-choose-the-best-algorithm). [#88360](https://github.com/ClickHouse/ClickHouse/pull/88360) ([Raúl Marín](https://github.com/Algunenano)). +* S3 внутренне распределяет объекты по разделам в зависимости от префиксов имён ключей и автоматически масштабируется до высокой интенсивности запросов на каждый раздел. Это изменение добавляет два новых параметра BACKUP: data_file_name_generator и data_file_name_prefix_length. Когда data_file_name_generator=checksum, файлы резервной копии данных получают имена на основе хэша их содержимого. Пример: для checksum = `abcd1234ef567890abcd1234ef567890` и `data_file_name_prefix_length = 3` результирующий путь будет: `abc/d1234ef567890abcd1234ef567890`. Получившееся распределение ключей улучшает балансировку нагрузки между разделами S3 и снижает риск ограничения пропускной способности (throttling). [#88418](https://github.com/ClickHouse/ClickHouse/pull/88418) ([Julia Kartseva](https://github.com/jkartseva)). +* Повышена производительность текстового индекса за счёт кэширования блоков словаря и использования хеш-таблиц для поиска токенов вместо бинарного поиска. [#88786](https://github.com/ClickHouse/ClickHouse/pull/88786) ([Elmi Ahmadov](https://github.com/ahmadov)). +* Запросы теперь могут одновременно использовать `optimize_read_in_order` и `query_plan_optimize_lazy_materialization`. Решает [#88767](https://github.com/ClickHouse/ClickHouse/issues/88767). [#88866](https://github.com/ClickHouse/ClickHouse/pull/88866) ([Manuel](https://github.com/raimannma)). +* Использовать агрегирующую проекцию для запросов с оператором `DISTINCT`. Закрывает [#86925](https://github.com/ClickHouse/ClickHouse/issues/86925). [#88894](https://github.com/ClickHouse/ClickHouse/pull/88894) ([Nihal Z. Miaji](https://github.com/nihalzp)). +* Кэширование списков постинга для повышения производительности при последующих запусках. [#88912](https://github.com/ClickHouse/ClickHouse/pull/88912) ([Elmi Ahmadov](https://github.com/ahmadov)). +* Выполнять потоковую трансформацию LIMIT BY при совпадении порядка сортировки входных данных с ключами LIMIT BY. [#88969](https://github.com/ClickHouse/ClickHouse/pull/88969) ([Eduard Karacharov](https://github.com/korowa)). +* Добавлена возможность в некоторых случаях переписывать `ANY LEFT JOIN` или `ANY RIGHT JOIN` в `ALL INNER JOIN`. [#89403](https://github.com/ClickHouse/ClickHouse/pull/89403) ([Dmitry Novik](https://github.com/novikd)). +* Снизить накладные расходы на логирование: использовать меньше атомарных операций на запись. [#89651](https://github.com/ClickHouse/ClickHouse/pull/89651) ([Sergei Trifonov](https://github.com/serxa)). +* При включённых runtime-фильтрах в запросе с несколькими JOIN и несколькими runtime-фильтрами реализовано проталкивание (pushdown) заново добавленных шагов фильтрации с приоритетом над остальными. [#89725](https://github.com/ClickHouse/ClickHouse/pull/89725) ([Alexander Gololobov](https://github.com/davenger)). +* Незначительно ускорены некоторые операции `uniqExact` за счёт уменьшения накладных расходов на слияние хеш-таблиц. [#89727](https://github.com/ClickHouse/ClickHouse/pull/89727) ([Raúl Marín](https://github.com/Algunenano)). +* Увеличен лимит количества строк ленивой материализации с 10 до 100. [#89772](https://github.com/ClickHouse/ClickHouse/pull/89772) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* По умолчанию включена настройка `allow_special_serialization_kinds_in_output_formats`. Это приведет к меньшему потреблению памяти и ускорит вывод результатов запросов для столбцов типов Sparse/Replicated в некоторых строковых форматах вывода. [#89402](https://github.com/ClickHouse/ClickHouse/pull/89402) ([Pavel Kruglov](https://github.com/Avogar)). +* Добавлен параллельный режим выполнения запросов `ALTER TABLE ... FREEZE`. [#71743](https://github.com/ClickHouse/ClickHouse/pull/71743) ([Kirill](https://github.com/kirillgarbar)). +* Добавлен кэш для аутентификации с помощью bcrypt. [#87115](https://github.com/ClickHouse/ClickHouse/pull/87115) ([Nikolay Degterinsky](https://github.com/evillique)). +* Если пропускающий индекс, используемый в запросе с оператором `FINAL`, находится на столбце, который является частью первичного ключа, дополнительный шаг по проверке пересечения по первичному ключу в других частях запроса больше не требуется и теперь не выполняется. Исправлена [#85897](https://github.com/ClickHouse/ClickHouse/issues/85897). [#88368](https://github.com/ClickHouse/ClickHouse/pull/88368) ([Shankar Iyer](https://github.com/shankar-iyer)). +* Оптимизация `enable_lazy_columns_replication` теперь включена по умолчанию, что позволит сократить потребление памяти при операциях JOIN. [#89316](https://github.com/ClickHouse/ClickHouse/pull/89316) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Ввести кэш `ColumnsDescription` на уровне таблицы для частей, чтобы сократить использование памяти, когда таблицы содержат много частей и много столбцов. [#89352](https://github.com/ClickHouse/ClickHouse/pull/89352) ([Azat Khuzhin](https://github.com/azat)). +* Добавлен кэш для десериализованного заголовка текстового индекса для снижения объёма операций ввода-вывода и улучшения производительности запросов. Кэш можно настроить с помощью новых серверных настроек: - `text_index_header_cache_policy` - `text_index_header_cache_size` - `text_index_header_cache_max_entries` - `text_index_header_cache_size_ratio`. [#89513](https://github.com/ClickHouse/ClickHouse/pull/89513) ([Elmi Ahmadov](https://github.com/ahmadov)). +#### Улучшение +* UNION при необходимости должен приводить типы к `Variant`, если включён `use_variant_as_common_type`. Устраняет проблему [#82772](https://github.com/ClickHouse/ClickHouse/issues/82772). [#83246](https://github.com/ClickHouse/ClickHouse/pull/83246) ([Mithun p](https://github.com/mithunputhusseri)). +* Роли, заданные в SQL, теперь можно назначать пользователям, заданным в `users.xml`. [#88139](https://github.com/ClickHouse/ClickHouse/pull/88139) ([c-end](https://github.com/c-end)). +* Логировать внутренние запросы (выполняемые словарями, обновляемыми материализованными представлениями и т. д.) и добавить новый столбец `is_internal` в `system.query_log`. [#83277](https://github.com/ClickHouse/ClickHouse/pull/83277) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). +* `clickhouse-client` и `clickhouse-local` в интерактивном режиме будут подсвечивать в командной строке идентификаторы, которые имеют то же имя, что и текущий идентификатор под курсором. [#89689](https://github.com/ClickHouse/ClickHouse/pull/89689) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Настройки, связанные с форматом вывода, теперь не влияют на кэширование запросов. Кроме того, кэширование запросов игнорирует настройку `http_response_headers`. Это необходимо для реализации функций, например загрузки результата из кэша в веб‑интерфейсе. [#89756](https://github.com/ClickHouse/ClickHouse/pull/89756) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* HTTP-интерфейс будет передавать заголовки `Age` и `Expires` при использовании кэша результатов запроса. Наличие заголовка `Age` показывает, что результат получен из кэша, а `Expires` также устанавливается при первой записи. Добавлены новые события профилирования: `QueryCacheAgeSeconds`, `QueryCacheReadRows`, `QueryCacheReadBytes`, `QueryCacheWrittenRows`, `QueryCacheWrittenBytes`. [#89759](https://github.com/ClickHouse/ClickHouse/pull/89759) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Разрешена вставка в удалённые таблицы и таблицы в data lake, когда включён параметр `disable_insertion_and_mutation` (что соответствует режиму только для чтения в ClickHouse Cloud). [#88549](https://github.com/ClickHouse/ClickHouse/pull/88549) ([Alexander Tokmakov](https://github.com/tavplubix)). +* Добавлен запрос `SYSTEM DROP TEXT INDEX CACHES`. [#90287](https://github.com/ClickHouse/ClickHouse/pull/90287) ([Anton Popov](https://github.com/CurtizJ)). +* По умолчанию включена настройка `enable_shared_storage_snapshot_in_query` для обеспечения более строгих гарантий согласованности. Это изменение не должно иметь побочных эффектов. [#82634](https://github.com/ClickHouse/ClickHouse/pull/82634) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Добавлена настройка `send_profile_events`, которая позволяет клиентам уменьшить сетевой трафик, когда события профилирования не используются. [#89588](https://github.com/ClickHouse/ClickHouse/pull/89588) ([Kaviraj Kanagaraj](https://github.com/kavirajk)). +* Добавлена возможность отключать фоновую загрузку соседних сегментов на уровне отдельных запросов. Исправляет [#89524](https://github.com/ClickHouse/ClickHouse/issues/89524). [#89668](https://github.com/ClickHouse/ClickHouse/pull/89668) ([tanner-bruce](https://github.com/tanner-bruce)). +* Разрешена операция `FETCH PARTITION` при наличии повреждённых дисков в реплицированных таблицах MergeTree. [#58663](https://github.com/ClickHouse/ClickHouse/pull/58663) ([Duc Canh Le](https://github.com/canhld94)). +* Исправлено необработанное исключение при получении схемы таблицы MySQL в движке базы данных MySQL. [#69358](https://github.com/ClickHouse/ClickHouse/pull/69358) ([Duc Canh Le](https://github.com/canhld94)). +* Все DDL-запросы `ON CLUSTER` теперь выполняются в контексте исходного пользователя запроса для более корректной проверки прав доступа. [#71334](https://github.com/ClickHouse/ClickHouse/pull/71334) ([pufit](https://github.com/pufit)). +* Добавлена поддержка типа `UUID` в `Parquet`, если он представлен как `FixedString(16)` с логическим типом `UUID`. [#74484](https://github.com/ClickHouse/ClickHouse/pull/74484) ([alekseev-maksim](https://github.com/alekseev-maksim)). +* Отключить ThreadFuzzer по умолчанию в несерверных исполняемых файлах. [#89115](https://github.com/ClickHouse/ClickHouse/pull/89115) ([Raúl Marín](https://github.com/Algunenano)). +* Сделать оптимизации плана запроса видимыми для входного подплана коррелированного подзапроса за счёт откладывания его материализации. Часть [#79890](https://github.com/ClickHouse/ClickHouse/issues/79890). [#85455](https://github.com/ClickHouse/ClickHouse/pull/85455) ([Dmitry Novik](https://github.com/novikd)). +* Вы можете наблюдать индикатор выполнения, логи и статистику производительности для запросов `CREATE OR REPLACE TABLE` с `SELECT` в clickhouse-client. Такой запрос больше не будет приводить к истечению времени ожидания, даже если `SELECT` требует довольно много времени на выполнение. Исправляет [#38416](https://github.com/ClickHouse/ClickHouse/issues/38416). [#87247](https://github.com/ClickHouse/ClickHouse/pull/87247) ([Diskein](https://github.com/Diskein)). +* Добавлена поддержка типов `JSON` и `Dynamic` в хеш-функциях. Исправляет [#87734](https://github.com/ClickHouse/ClickHouse/issues/87734). [#87791](https://github.com/ClickHouse/ClickHouse/pull/87791) ([Pavel Kruglov](https://github.com/Avogar)). +* Реализованы недостающие части сервера ArrowFlight. [#88013](https://github.com/ClickHouse/ClickHouse/pull/88013) ([Vitaly Baranov](https://github.com/vitlibar)). +* Добавлены несколько гистограммных метрик для сервера и Keeper для измерения длительностей этапов выполнения запросов Keeper. Для сервера добавлены следующие метрики: `keeper_client_queue_duration_milliseconds`, `keeper_client_send_duration_milliseconds`, `keeper_client_roundtrip_duration_milliseconds`. Для Keeper добавлены следующие метрики: `keeper_server_preprocess_request_duration_milliseconds`, `keeper_server_process_request_duration_milliseconds`, `keeper_server_queue_duration_milliseconds`, `keeper_server_send_duration_milliseconds`. [#88158](https://github.com/ClickHouse/ClickHouse/pull/88158) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). +* В запрос `EXPLAIN` добавлена опция `input_headers` для добавления входных заголовков к шагам. [#88311](https://github.com/ClickHouse/ClickHouse/pull/88311) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). +* Добавлены профильные события для подсчёта количества запросов к S3 и AzureBlobStorage, задержанных троттлерами. Исправлена несогласованность между профильными событиями ThrottlerCount, связанными с дисками и не связанными с ними. Теперь HTTP‑запросы DELETE к AzureBlobStorage не подвергаются троттлингу. [#88535](https://github.com/ClickHouse/ClickHouse/pull/88535) ([Sergei Trifonov](https://github.com/serxa)). +* Кэшировать статистику на уровне таблиц: добавлены два параметра. Настройка MergeTree `refresh_statistics_interval` задаёт интервал обновления кэша статистики, значение 0 означает, что кэш создаваться не будет. Параметр сессии `use_statistics_cache` определяет, использовать ли статистику на уровне таблиц в запросе. Иногда нам нужна более точная статистика, поэтому мы можем отключить использование кэша. [#88670](https://github.com/ClickHouse/ClickHouse/pull/88670) ([Han Fei](https://github.com/hanfei1991)). +* Исправлена бинарная десериализация `Array` и `Map`, чтобы при проверке ограничений размера использовать параметр `max_binary_array_size` вместо `max_binary_string_size`. Это гарантирует применение корректных лимитов при чтении в формате `RowBinary`. [#88744](https://github.com/ClickHouse/ClickHouse/pull/88744) ([Raufs Dunamalijevs](https://github.com/rienath)). +* Добавлен класс `LockGuardWithStopWatch`, который используется в фоновом пуле для выполнения слияний. Если мьютекс удерживается дольше секунды или какому‑то потоку не удаётся получить его в течение секунды, выводится предупреждающее сообщение. Ресурсоёмкий код из деструктора `MergeMutateSelectedEntry` перенесён в метод `finalize`, чтобы избежать слишком долгого удержания блокировки в исполнителе `MergeTreeBackground`. [#88898](https://github.com/ClickHouse/ClickHouse/pull/88898) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). +* Разрешить автоматическое использование подключаемых регионов AWS для S3, если регион не указан в endpoint. См. также: [opt-in AWS regions](https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html). [#88930](https://github.com/ClickHouse/ClickHouse/pull/88930) ([Andrey Zvonov](https://github.com/zvonand)). +* Теперь в clickhouse-client можно отменить запрос, нажав Ctrl+C во время работы пейджера. Устраняет проблему [#80778](https://github.com/ClickHouse/ClickHouse/issues/80778). [#88935](https://github.com/ClickHouse/ClickHouse/pull/88935) ([Grigorii](https://github.com/GSokol)). +* Веб-интерфейс будет отображать столбики в таблице даже при отрицательных значениях. Таким образом, он может отображать двустороннюю столбчатую диаграмму с разными цветами столбиков для отрицательной и положительной сторон. [#89016](https://github.com/ClickHouse/ClickHouse/pull/89016) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Отключите `shared_merge_tree_create_per_replica_metadata_nodes`, чтобы сократить объем метаданных, которые `SharedMergeTree` хранит в Keeper. [#89036](https://github.com/ClickHouse/ClickHouse/pull/89036) ([Alexander Tokmakov](https://github.com/tavplubix)). +* Обеспечить, чтобы `S3Queue` учитывал серверный параметр `disable_insertion_and_mutation`. [#89048](https://github.com/ClickHouse/ClickHouse/pull/89048) ([Raúl Marín](https://github.com/Algunenano)). +* По умолчанию значение `s3_retry_attempts` установлено равным 500 в версии 25.6, чтобы обеспечить успешное выполнение резервного копирования при репартиционировании S3, когда S3 в течение более 10 минут отвечает ошибками замедления. [#89051](https://github.com/ClickHouse/ClickHouse/pull/89051) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). +* Параметры `kafka_compression_codec` и `kafka_compression_level` теперь можно использовать для задания сжатия продюсеров Kafka в обоих движках Kafka. [#89073](https://github.com/ClickHouse/ClickHouse/pull/89073) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). +* Добавлен новый столбец `statistics` в `system.columns`, который указывает типы статистики, построенных для этой таблицы. Если тип статистики создаётся автоматически, к нему в суффиксе добавляется пометка (auto). [#89086](https://github.com/ClickHouse/ClickHouse/pull/89086) ([Han Fei](https://github.com/hanfei1991)). +* Улучшено сообщение об ошибке при передаче обобщённой подстановки вместо имени кластера в табличную функцию `*Cluster`. [#89093](https://github.com/ClickHouse/ClickHouse/pull/89093) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* YTsaurus: разрешено использование replicated_table как источника данных. [#89107](https://github.com/ClickHouse/ClickHouse/pull/89107) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). +* Запросы, начинающиеся с пробельных символов, больше не сохраняются в историю CLI. [#89116](https://github.com/ClickHouse/ClickHouse/pull/89116) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* Добавлена поддержка массива строк в качестве аргумента функций `hasAnyTokens` и `hasAllTokens`. [#89124](https://github.com/ClickHouse/ClickHouse/pull/89124) ([Elmi Ahmadov](https://github.com/ahmadov)). +* Изменён способ хранения метаданных в памяти для дисков типа plain-rewritable, что исправляет множество ошибок, связанных с вложенностью каталогов и аналогичными ситуациями. [#89125](https://github.com/ClickHouse/ClickHouse/pull/89125) ([Mikhail Artemenko](https://github.com/Michicosun)). +* Подзапросы, которые используются внутри выражений IN при запросе к таблице Iceberg, будут корректно предварительно вычисляться перед анализом отсечения партиций. [#89177](https://github.com/ClickHouse/ClickHouse/pull/89177) ([Daniil Ivanik](https://github.com/divanik)). +* Включена настройка `create_table_empty_primary_key_by_default` по умолчанию. Это повышает удобство использования. [#89333](https://github.com/ClickHouse/ClickHouse/pull/89333) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Исправлен некорректный код в движке базы данных `Backup`, из-за которого мог быть сгенерирован неверный запрос при использовании `SHOW CREATE DATABASE` или при запросе `engine_full` из `system.databases`. Закрывает [#89477](https://github.com/ClickHouse/ClickHouse/issues/89477). [#89341](https://github.com/ClickHouse/ClickHouse/pull/89341) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* В предыдущих версиях настройка `create_table_empty_primary_key_by_default` не работала, если вы не указывали движок таблицы в запросе CREATE TABLE. [#89342](https://github.com/ClickHouse/ClickHouse/pull/89342) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Обновить `chdig` до v25.11.1 — содержит значительные улучшения логирования и ряд других доработок ([примечания к выпуску 25.11](https://github.com/azat/chdig/releases/tag/v25.11.1)). [#89957](https://github.com/ClickHouse/ClickHouse/pull/89957) ([Azat Khuzhin](https://github.com/azat)). ([примечания к выпуску 25.10](https://github.com/azat/chdig/releases/tag/v25.10.1)). [#89452](https://github.com/ClickHouse/ClickHouse/pull/89452) ([Azat Khuzhin](https://github.com/azat)). +* Ресайзер текстового поля запроса в веб-интерфейсе сделан во всю ширину, что делает работу с ним немного удобнее. Кроме того, встроенный в браузер ресайзер был недоступен в Safari на iPad, а после этого изменения вы хотя бы можете перетаскивать нижнюю границу текстового поля, если знаете об этой возможности. [#89457](https://github.com/ClickHouse/ClickHouse/pull/89457) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Улучшено отслеживание памяти при формировании результата хеш-соединений. Ранее временные выделения памяти при формировании результата соединения отслеживались некорректно, что могло приводить к превышению лимита памяти. [#89560](https://github.com/ClickHouse/ClickHouse/pull/89560) ([Azat Khuzhin](https://github.com/azat)). +* Асинхронный серверный лог: более ранний сброс и увеличенный размер очереди по умолчанию. [#89597](https://github.com/ClickHouse/ClickHouse/pull/89597) ([Raúl Marín](https://github.com/Algunenano)). +* Исправлены некорректные значения `FilesystemCacheBytes` (и других) в `system.asynchronous_metrics`. Запросы `SYSTEM` к файловым кэшем выполняются только один раз. Добавлено атомарное представление для кэшей, указывающее на тот же путь в `system.filesystem_caches`. [#89640](https://github.com/ClickHouse/ClickHouse/pull/89640) ([Azat Khuzhin](https://github.com/azat)). +* Уточнены описания некоторых столбцов в `system.view_refreshes`. [#89701](https://github.com/ClickHouse/ClickHouse/pull/89701) ([Tuan Pham Anh](https://github.com/tuanpach)). +* Кэшировать учетные данные S3 при взаимодействии с конечной точкой STS для их повторного использования в разных вызовах функций. Количество закэшированных учетных данных можно контролировать с помощью `s3_credentials_provider_max_cache_size`. [#89734](https://github.com/ClickHouse/ClickHouse/pull/89734) ([Antonio Andelic](https://github.com/antonio2368)). +* Исправлено проталкивание runtime-фильтра при наличии нескольких нижележащих шагов выражения. [#89741](https://github.com/ClickHouse/ClickHouse/pull/89741) ([Alexander Gololobov](https://github.com/davenger)). +* Если объём оперативной памяти системы меньше 5 ГБ, по умолчанию не выполнять mlock для исполняемого файла. [#89751](https://github.com/ClickHouse/ClickHouse/pull/89751) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Подсказки типов в веб-интерфейсе больше не выходят за границы заголовка таблицы. Также исправлено отображение всплывающих подсказок — теперь они не скрываются за заголовком таблицы. [#89753](https://github.com/ClickHouse/ClickHouse/pull/89753) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Отображать свойства таблиц в веб-интерфейсе. При нажатии на число строк или байт открывается запрос к `system.tables`. При нажатии на движок таблицы выполняется `SHOW TABLES`. [#89771](https://github.com/ClickHouse/ClickHouse/pull/89771) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Добавлена поддержка `non_replicated_deduplication_window` для таблиц с диском, который не поддерживает дозапись (append). Исправляет [#87281](https://github.com/ClickHouse/ClickHouse/issues/87281). [#89796](https://github.com/ClickHouse/ClickHouse/pull/89796) ([Tuan Pham Anh](https://github.com/tuanpach)). +* Добавлена возможность указывать список таблиц для сброса в команде `SYSTEM FLUSH ASYNC INSERT QUEUE`. [#89915](https://github.com/ClickHouse/ClickHouse/pull/89915) ([Sema Checherinda](https://github.com/CheSema)). +* Идентификаторы блоков дедупликации сохраняются в `system.part_log`. [#89928](https://github.com/ClickHouse/ClickHouse/pull/89928) ([Sema Checherinda](https://github.com/CheSema)). +* Изменено значение по умолчанию настройки файлового кэша `keep_free_space_remove_batch` с 10 до 100, так как это оптимальнее. [#90030](https://github.com/ClickHouse/ClickHouse/pull/90030) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Введён тип слияния TTL DROP; после таких слияний расписание следующего удаления по TTL больше не обновляется. [#90077](https://github.com/ClickHouse/ClickHouse/pull/90077) ([Mikhail Artemenko](https://github.com/Michicosun)). +* Использовать меньший лимит числа узлов в запросе RemoveRecursive Keeper при очистке S3Queue. [#90201](https://github.com/ClickHouse/ClickHouse/pull/90201) ([Antonio Andelic](https://github.com/antonio2368)). +* Сделать так, чтобы запрос `SYSTEM FLUSH LOGS` ожидал создание таблицы, даже если журналы пусты. [#89408](https://github.com/ClickHouse/ClickHouse/pull/89408) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). +* Исправлена некорректная величина `rows_before_limit_at_least`, возникающая, когда в агрегирующей операции с распределённым слиянием задействовано несколько удалённых шардов или присутствуют подзапросы типа IN. Это исправляет [#63280](https://github.com/ClickHouse/ClickHouse/issues/63280). [#63511](https://github.com/ClickHouse/ClickHouse/pull/63511) ([Amos Bird](https://github.com/amosbird)). +* Исправлено появление сообщения `0 rows in set` после запроса `INSERT INTO ... SELECT`. Закрывает [#47800](https://github.com/ClickHouse/ClickHouse/issues/47800). [#79462](https://github.com/ClickHouse/ClickHouse/pull/79462) ([Engel Danila](https://github.com/aaaengel)). + +#### Исправление ошибки (некорректная работа, заметная пользователю, в официальном стабильном релизе) + +* Исправлена работа `multiIf` с константными аргументами и укороченным вычислением. Закрывает [#72714](https://github.com/ClickHouse/ClickHouse/issues/72714). [#84546](https://github.com/ClickHouse/ClickHouse/pull/84546) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* Исправлена логическая ошибка при выполнении выбора данных из таблицы с ограничением, использующим подзапрос. Устраняет [#84190](https://github.com/ClickHouse/ClickHouse/issues/84190). [#85575](https://github.com/ClickHouse/ClickHouse/pull/85575) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +* Исправлена ошибка для специальных запросов, использующих URI с вопросительными знаками. [#85663](https://github.com/ClickHouse/ClickHouse/pull/85663) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* Исправлено периодическое отсутствие некоторых столбцов в выводе `EXPLAIN indexes = 1`. Решает [#86696](https://github.com/ClickHouse/ClickHouse/issues/86696). [#87083](https://github.com/ClickHouse/ClickHouse/pull/87083) ([Michael Kolupaev](https://github.com/al13n321)). +* Исправлена возможная ошибка «Cannot add subcolumn with parallel replicas». Закрывает [#84888](https://github.com/ClickHouse/ClickHouse/issues/84888). [#87514](https://github.com/ClickHouse/ClickHouse/pull/87514) ([Pavel Kruglov](https://github.com/Avogar)). +* В parquet writer добавлен вывод строки `created_by` в корректном формате, например `ClickHouse version 25.10.1 (build 5b1dfb14925db8901a4e9202cd5d63c11ecfbb9f)` вместо `ClickHouse v25.9.1.1-testing`. Исправлена совместимость parquet reader с файлами некорректного формата, записанными старой версией parquet-mr. [#87735](https://github.com/ClickHouse/ClickHouse/pull/87735) ([Michael Kolupaev](https://github.com/al13n321)). +* Исправлено вычисление phi-squared, приводившее к неверным результатам в `cramersV`, `cramersVBiasCorrected`, `theilsU` и `contingency`. [#87831](https://github.com/ClickHouse/ClickHouse/pull/87831) ([Nihal Z. Miaji](https://github.com/nihalzp)). +* Исправлено чтение массивов в JSON, одновременно содержащих значения типов Float и Bool. Ранее вставка таких данных приводила к исключению. [#88008](https://github.com/ClickHouse/ClickHouse/pull/88008) ([Pavel Kruglov](https://github.com/Avogar)). +* Использование `shared_ptr` для `QueryState` в `TCPHandler` для обнаружения, если состояние стало невалидным, в `setProgressCallback`, `setFileProgressCallback` и `setBlockMarshallingCallback`. [#88201](https://github.com/ClickHouse/ClickHouse/pull/88201) ([Tuan Pham Anh](https://github.com/tuanpach)). +* Исправлена логическая ошибка при перестановке операций CROSS JOIN, когда query_plan_optimize_join_order_limit > 1. Закрыта [#89409](https://github.com/ClickHouse/ClickHouse/issues/89409). [#88286](https://github.com/ClickHouse/ClickHouse/pull/88286) ([Vladimir Cherkasov](https://github.com/vdimir)). +* Исправление [#88426](https://github.com/ClickHouse/ClickHouse/issues/88426): 1. Запретить явное задание столбцов в таблицах типа Alias, столбцы автоматически подгружаются из целевой таблицы. Это гарантирует, что Alias всегда соответствует схеме целевой таблицы. 2. Проксировать больше методов из IStorage. [#88552](https://github.com/ClickHouse/ClickHouse/pull/88552) ([Kai Zhu](https://github.com/nauu)). +* После восстановления реплика базы данных Replicated могла надолго «застрять», постоянно выводя сообщения вида `Failed to marked query-0004647339 as finished (finished=No node, synced=No node)`, теперь это исправлено. [#88671](https://github.com/ClickHouse/ClickHouse/pull/88671) ([Alexander Tokmakov](https://github.com/tavplubix)). +* Исправлена возможная ошибка "Context has expired" при использовании нового анализатора запросов с подзапросами. [#88694](https://github.com/ClickHouse/ClickHouse/pull/88694) ([Azat Khuzhin](https://github.com/azat)). +* Исправлена ошибка сегментации в считывателе Parquet, возникавшая, когда input_format_parquet_local_file_min_bytes_for_seek установлен в 0. Исправляет [#78456](https://github.com/ClickHouse/ClickHouse/issues/78456). [#88784](https://github.com/ClickHouse/ClickHouse/pull/88784) ([Animesh](https://github.com/anibilthare)). +* Исправлен некорректный результат min(PK)/max(PK) при обратном порядке сортировки PK. Это исправляет [#83619](https://github.com/ClickHouse/ClickHouse/issues/83619). [#88796](https://github.com/ClickHouse/ClickHouse/pull/88796) ([Amos Bird](https://github.com/amosbird)). +* Исправлена передача ограничений на размер через настройки max_table_size_to_drop и max_partition_size_to_drop при выполнении операции DROP для внутренних таблиц. [#88812](https://github.com/ClickHouse/ClickHouse/pull/88812) ([Nikolay Degterinsky](https://github.com/evillique)). +* Исправлено поведение функции `top_k`, чтобы она учитывала параметр threshold при вызове с одним аргументом. Закрывает [#88757](https://github.com/ClickHouse/ClickHouse/issues/88757). [#88867](https://github.com/ClickHouse/ClickHouse/pull/88867) ([Manuel](https://github.com/raimannma)). +* Источники, использующие конечные точки ArrowFlight и требующие SSL‑соединения (например, за AWS ALB), теперь могут корректно запрашивать конкретный набор данных. [#88868](https://github.com/ClickHouse/ClickHouse/pull/88868) ([alex-shchetkov](https://github.com/alex-shchetkov)). +* Исправлена обработка нематериализованных Nested(Tuple(...)), добавленных через ALTER. Исправляет [#83133](https://github.com/ClickHouse/ClickHouse/issues/83133). [#88879](https://github.com/ClickHouse/ClickHouse/pull/88879) ([Azat Khuzhin](https://github.com/azat)). +* Исправлена ошибка в функции `reverseUTF8`. В предыдущих версиях она ошибочно обращала порядок байт у четырёхбайтовых кодовых точек UTF-8. Это закрывает [#88913](https://github.com/ClickHouse/ClickHouse/issues/88913). [#88914](https://github.com/ClickHouse/ClickHouse/pull/88914) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Исправлен протокол icebergS3Cluster. Добавлена поддержка эволюции схемы, позиционных удалений и удалений по равенству в функции icebergCluster. Устранена ошибка [#88287](https://github.com/ClickHouse/ClickHouse/issues/88287). [#88919](https://github.com/ClickHouse/ClickHouse/pull/88919) ([Yang Jiang](https://github.com/Ted-Jiang)). +* Отключена проекция parallel_replicas_support для запросов с параллельными репликами по распределённым таблицам. Закрывает [#88899](https://github.com/ClickHouse/ClickHouse/issues/88899). [#88922](https://github.com/ClickHouse/ClickHouse/pull/88922) ([zoomxi](https://github.com/zoomxi)). +* Передача контекста во внутренних приведениях типов. Исправлены несколько проблем, из-за которых настройки приведения типов не передавались. Закрывает [#88873](https://github.com/ClickHouse/ClickHouse/issues/88873). Закрывает [#78025](https://github.com/ClickHouse/ClickHouse/issues/78025). [#88929](https://github.com/ClickHouse/ClickHouse/pull/88929) ([Manuel](https://github.com/raimannma)). +* Исправлено определение формата файла по шаблонам (globs) в функции file(). Исправлена ошибка [#88920](https://github.com/ClickHouse/ClickHouse/issues/88920). [#88947](https://github.com/ClickHouse/ClickHouse/pull/88947) ([Vitaly Baranov](https://github.com/vitlibar)). +* Не выполнять проверку доступа `SET DEFINER :definer` при создании представления с SQL SECURITY DEFINER. [#88968](https://github.com/ClickHouse/ClickHouse/pull/88968) ([pufit](https://github.com/pufit)). +* Исправлена ошибка `LOGICAL_ERROR` в `L2DistanceTransposed(vec1, vec2, p)`, из-за которой оптимизация частичного чтения `QBit` некорректно удаляла `Nullable` из возвращаемого типа, когда `p` был `Nullable`. [#88974](https://github.com/ClickHouse/ClickHouse/pull/88974) ([Raufs Dunamalijevs](https://github.com/rienath)). +* Исправлено падение при использовании неизвестного типа каталога. Исправляет [#88819](https://github.com/ClickHouse/ClickHouse/issues/88819). [#88987](https://github.com/ClickHouse/ClickHouse/pull/88987) ([scanhex12](https://github.com/scanhex12)). +* Закрывает [#88081](https://github.com/ClickHouse/ClickHouse/issues/88081). [#88988](https://github.com/ClickHouse/ClickHouse/pull/88988) ([scanhex12](https://github.com/scanhex12)). +* Исправлено снижение производительности при анализе пропускающих индексов. [#89004](https://github.com/ClickHouse/ClickHouse/pull/89004) ([Anton Popov](https://github.com/CurtizJ)). +* Устранена ошибка ACCESS_ENTITY_NOT_FOUND при попытке выполнить clusterAllReplicas от имени пользователя с несуществующей ролью. Устраняет [#87670](https://github.com/ClickHouse/ClickHouse/issues/87670). [#89068](https://github.com/ClickHouse/ClickHouse/pull/89068) ([pufit](https://github.com/pufit)). +* Исправлена обработка разреженных столбцов с помощью ограничения CHECK. Закрывает [#88637](https://github.com/ClickHouse/ClickHouse/issues/88637). [#89076](https://github.com/ClickHouse/ClickHouse/pull/89076) ([Eduard Karacharov](https://github.com/korowa)). +* Исправлен некорректный подсчёт количества строк при заполнении виртуальных столбцов в MergeTreeReaderTextIndex, приводивший к сбою с LOGICAL_ERROR. [#89095](https://github.com/ClickHouse/ClickHouse/pull/89095) ([Peng Jian](https://github.com/fastio)). +* Предотвращены утечки счетчика слияний по TTL при возникновении исключений во время подготовки слияния. Устраняет проблему [#89019](https://github.com/ClickHouse/ClickHouse/issues/89019). [#89127](https://github.com/ClickHouse/ClickHouse/pull/89127) ([save-my-heart](https://github.com/save-my-heart)). +* Исправлен расчёт размера буфера, необходимого для операций кодирования и декодирования в base32/base58. [#89133](https://github.com/ClickHouse/ClickHouse/pull/89133) ([Antonio Andelic](https://github.com/antonio2368)). +* Исправлено использование освобождённой памяти (use-after-free) в движке `Distributed` из-за гонки состояний между остановкой и фоновыми операциями `INSERT`. Решает проблему [#88640](https://github.com/ClickHouse/ClickHouse/issues/88640). [#89136](https://github.com/ClickHouse/ClickHouse/pull/89136) ([Azat Khuzhin](https://github.com/azat)). +* Предотвращены возможные гонки данных из‑за изменяемых исключений при разборе Parquet. Исправляет [#88385](https://github.com/ClickHouse/ClickHouse/issues/88385). [#89174](https://github.com/ClickHouse/ClickHouse/pull/89174) ([Azat Khuzhin](https://github.com/azat)). +* Обновляемое материализованное представление: исправлен редкий сбой сервера, возникавший при полном удалении исходной таблицы во время обновления. [#89203](https://github.com/ClickHouse/ClickHouse/pull/89203) ([Michael Kolupaev](https://github.com/al13n321)). +* Сбрасывать буферы при отправке ошибки в середине сжатого потока в HTTP-интерфейсе. [#89256](https://github.com/ClickHouse/ClickHouse/pull/89256) ([Alexander Tokmakov](https://github.com/tavplubix)). +* Исправлена ошибка, из-за которой правила маскирования запросов некорректно применялись к DDL-операторам. [#89272](https://github.com/ClickHouse/ClickHouse/pull/89272) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). +* Исправлено неверное количество строк при заполнении виртуальных столбцов в MergeTreeReaderTextIndex, что приводило к аварийному завершению с LOGICAL_ERROR. Переоткрыта задача [#89095](https://github.com/ClickHouse/ClickHouse/issues/89095). [#89303](https://github.com/ClickHouse/ClickHouse/pull/89303) ([Jimmy Aguilar Mena](https://github.com/Ergus)). +* Исправлена ошибка LOGICAL_ERROR в Statistics countmin: не поддерживался тип данных estimate LowCardinality(Nullable(String)). [#89343](https://github.com/ClickHouse/ClickHouse/pull/89343) ([Han Fei](https://github.com/hanfei1991)). +* Возможен сбой или неопределённое поведение в операторе IN, когда типы столбцов первичного ключа отличаются от типов столбцов в правой части оператора IN. Пример: SELECT string_column, int_column FROM test_table WHERE (string_column, int_column) IN (SELECT '5', 'not a number'). Проявляется, если выбирается много строк и среди них есть строки со значениями несовместимых типов. [#89367](https://github.com/ClickHouse/ClickHouse/pull/89367) ([Ilya Golshtein](https://github.com/ilejn)). +* Исправлено усечение аргументов функции `countIf(*)`. Закрывает [#89372](https://github.com/ClickHouse/ClickHouse/issues/89372). [#89373](https://github.com/ClickHouse/ClickHouse/pull/89373) ([Manuel](https://github.com/raimannma)). +* Предотвращена потеря несжатых контрольных сумм для статистики по мутациям. [#89381](https://github.com/ClickHouse/ClickHouse/pull/89381) ([Azat Khuzhin](https://github.com/azat)). +* Исправлена LOGICAL_ERROR в L2DistanceTransposed(vec1, vec2, p), из-за которой при оптимизации частичного чтения QBit из типа возвращаемого значения ошибочно удалялся Nullable, когда p имел тип LowCardinality(Nullable(T)). Устраняет [#88362](https://github.com/ClickHouse/ClickHouse/issues/88362). [#89397](https://github.com/ClickHouse/ClickHouse/pull/89397) ([Raufs Dunamalijevs](https://github.com/rienath)). +* Исправлена загрузка таблиц с некорректной разреженной сериализацией самого `tuple`, записанного старыми версиями ClickHouse. [#89405](https://github.com/ClickHouse/ClickHouse/pull/89405) ([Azat Khuzhin](https://github.com/azat)). +* Исправлена некорректная обработка слияний частей, очищенных по TTL, с непустыми проекциями при использовании `deduplicate_merge_projection_mode='ignore'`. Решает [#89430](https://github.com/ClickHouse/ClickHouse/issues/89430). [#89458](https://github.com/ClickHouse/ClickHouse/pull/89458) ([Amos Bird](https://github.com/amosbird)). +* Исправлена логическая ошибка в соединении `full_sorting_merge` с дублирующимися столбцами. Устраняет [#86957](https://github.com/ClickHouse/ClickHouse/issues/86957). [#89495](https://github.com/ClickHouse/ClickHouse/pull/89495) ([Vladimir Cherkasov](https://github.com/vdimir)). +* Исправлено чтение журнала изменений при запуске Keeper в случае, если changelog не был корректно переименован при ротации. [#89496](https://github.com/ClickHouse/ClickHouse/pull/89496) ([Antonio Andelic](https://github.com/antonio2368)). +* Исправлены некорректные результаты JOIN при использовании условий OR с уникальными ключами правой таблицы. Решает проблему [#89391](https://github.com/ClickHouse/ClickHouse/issues/89391). [#89512](https://github.com/ClickHouse/ClickHouse/pull/89512) ([Vladimir Cherkasov](https://github.com/vdimir)). +* Исправлена возможная ошибка "Context has expired" при использовании анализатора и выражения PK IN (подзапрос) (v2). Исправляет [#89433](https://github.com/ClickHouse/ClickHouse/issues/89433). [#89527](https://github.com/ClickHouse/ClickHouse/pull/89527) ([Azat Khuzhin](https://github.com/azat)). +* Исправлена репликация MaterializedPostgreSQL для таблиц с именами столбцов, заданными в верхнем регистре. Решает проблему [#72363](https://github.com/ClickHouse/ClickHouse/issues/72363). [#89530](https://github.com/ClickHouse/ClickHouse/pull/89530) ([Danylo Osipchuk](https://github.com/Lenivaya)). +* Исправлена ошибка, приводившая к падению в случае, когда состояние агрегатной функции содержит сериализованное значение столбца типа LowCardinality(String). [#89550](https://github.com/ClickHouse/ClickHouse/pull/89550) ([Pavel Kruglov](https://github.com/Avogar)). +* Исправлен сбой при использовании `ARRAY JOIN` на правой стороне JOIN при включённой настройке `enable_lazy_columns_replication`. [#89551](https://github.com/ClickHouse/ClickHouse/pull/89551) ([Pavel Kruglov](https://github.com/Avogar)). +* Устранена логическая ошибка в query_plan_convert_join_to_in. Устраняет [#89066](https://github.com/ClickHouse/ClickHouse/issues/89066). [#89554](https://github.com/ClickHouse/ClickHouse/pull/89554) ([Vladimir Cherkasov](https://github.com/vdimir)). +* Исправлено исключение в оценщике статистики при попытке оценить условия с несовпадающими типами столбца и константы, которые нельзя преобразовать. [#89596](https://github.com/ClickHouse/ClickHouse/pull/89596) ([Han Fei](https://github.com/hanfei1991)). +* Добавлять runtime-фильтры только для поддерживаемых алгоритмов соединения, то есть хеш-соединений. Фильтр может быть создан только тогда, когда алгоритм соединения сначала полностью читает правую сторону, а затем левую, но, например, FullSortingMergeJoin читает обе стороны одновременно. Исправляет [#89220](https://github.com/ClickHouse/ClickHouse/issues/89220). [#89652](https://github.com/ClickHouse/ClickHouse/pull/89652) ([Alexander Gololobov](https://github.com/davenger)). +* Исправлено конкурентное выполнение функций `hasAnyTokens`, `hasAllTokens` и `tokens` с токенизатором `sparseGrams`. Устраняет проблему [#89605](https://github.com/ClickHouse/ClickHouse/issues/89605). [#89665](https://github.com/ClickHouse/ClickHouse/pull/89665) ([Elmi Ahmadov](https://github.com/ahmadov)). +* Исправлена логическая ошибка, приводившая к сбоям при использовании runtime-фильтра JOIN в некоторых случаях. Исправляет [#89062](https://github.com/ClickHouse/ClickHouse/issues/89062). [#89666](https://github.com/ClickHouse/ClickHouse/pull/89666) ([Alexander Gololobov](https://github.com/davenger)). +* Исправлена возможная логическая ошибка при выполнении ARRAY JOIN над столбцом Map при включённом `enable_lazy_columns_replication`. Закрывает [#89705](https://github.com/ClickHouse/ClickHouse/issues/89705). [#89717](https://github.com/ClickHouse/ClickHouse/pull/89717) ([Pavel Kruglov](https://github.com/Avogar)). +* Исправлена ошибка, вызывавшая сбой при чтении с удалённого сервера после отключения соединения в удалённых запросах при их отмене. Исправляет [#89468](https://github.com/ClickHouse/ClickHouse/issues/89468). [#89740](https://github.com/ClickHouse/ClickHouse/pull/89740) ([Azat Khuzhin](https://github.com/azat)). +* Исправлена гонка при чтении индекса проекций. Устраняет [#89497](https://github.com/ClickHouse/ClickHouse/issues/89497). [#89762](https://github.com/ClickHouse/ClickHouse/pull/89762) ([Peng Jian](https://github.com/fastio)). +* Исправлена ошибка при чтении проекционного индекса, которая могла приводить к состояниям гонки. Решает проблему [#89497](https://github.com/ClickHouse/ClickHouse/issues/89497). [#89775](https://github.com/ClickHouse/ClickHouse/pull/89775) ([Amos Bird](https://github.com/amosbird)). +* Исправлена обработка табличной функции Paimon для таблиц без партиций. Устраняет проблему [#89690](https://github.com/ClickHouse/ClickHouse/issues/89690). [#89793](https://github.com/ClickHouse/ClickHouse/pull/89793) ([JIaQi](https://github.com/JiaQiTang98)). +* Исправлена возможная логическая ошибка при чтении путей и их подстолбцов в расширенной общей сериализации данных JSON. Закрывает [#89805](https://github.com/ClickHouse/ClickHouse/issues/89805). [#89819](https://github.com/ClickHouse/ClickHouse/pull/89819) ([Pavel Kruglov](https://github.com/Avogar)). +* Исправлено возможное переполнение стека при бинарной десериализации типов данных. Закрывает [#88710](https://github.com/ClickHouse/ClickHouse/issues/88710). [#89822](https://github.com/ClickHouse/ClickHouse/pull/89822) ([Pavel Kruglov](https://github.com/Avogar)). +* Исправлена логическая ошибка при использовании пустого кортежа в функции `IN`. Закрывает [#88343](https://github.com/ClickHouse/ClickHouse/issues/88343). [#89850](https://github.com/ClickHouse/ClickHouse/pull/89850) ([Nihал Z. Miaji](https://github.com/nihalzp)). +* Удалены инъективные функции из `GROUP BY` в старом анализаторе вне зависимости от настройки `optimize_injective_functions_in_group_by` для обеспечения совместимости. Исправлена проблема [#89854](https://github.com/ClickHouse/ClickHouse/issues/89854). [#89870](https://github.com/ClickHouse/ClickHouse/pull/89870) ([Raufs Dunamalijevs](https://github.com/rienath)). +* Если объединение было прервано, например, из‑за ограничения по памяти, фоновый исполнитель merge mutate вызовет `cancel` для задачи объединения без блокировки, но в этом случае частично созданная результирующая часть не будет удалена (поскольку она не была завершена и на этом этапе ещё не была видна). После этого задача объединения будет уничтожена, что приведёт к уничтожению результирующей части. Это откатит транзакцию на диске и приведёт к удалению данных из S3. В итоге эта очистка мусора была выполнена под блокировкой фонового исполнителя merge mutate. [#89875](https://github.com/ClickHouse/ClickHouse/pull/89875) ([Mikhail Artemenko](https://github.com/Michicosun)). +* Исправлена логическая ошибка при обработке пустого кортежа в функциях `reverse` и `CAST`. Закрывает [#89137](https://github.com/ClickHouse/ClickHouse/issues/89137). [#89908](https://github.com/ClickHouse/ClickHouse/pull/89908) ([Nihал Z. Miaji](https://github.com/nihalzp)). +* Теперь ClickHouse по умолчанию будет показывать базу данных каталога Data Lake в результате запроса `SHOW DATABASES`. [#89914](https://github.com/ClickHouse/ClickHouse/pull/89914) ([alesapin](https://github.com/alesapin)). +* Исправлено использование нативного копирования на GCS для создания резервных копий. Из-за некорректного клонирования клиента нативное копирование GCS всегда завершалось с ошибкой, и поэтому применялся менее оптимальный подход с ручным чтением и записью данных. [#89923](https://github.com/ClickHouse/ClickHouse/pull/89923) ([Antonio Andelic](https://github.com/antonio2368)). +* Исправлен расчёт размера буфера в base32Encode. Вычисление base32Encode для столбца строк длиной менее 5 символов могло приводить к сбоям. Устраняет проблему [#89911](https://github.com/ClickHouse/ClickHouse/issues/89911). [#89929](https://github.com/ClickHouse/ClickHouse/pull/89929) ([Antonio Andelic](https://github.com/antonio2368)). +* Исправлено некорректное экранирование для запросов `SHOW COLUMNS` и `SHOW FUNCTIONS`. [#89942](https://github.com/ClickHouse/ClickHouse/pull/89942) ([alesapin](https://github.com/alesapin)). +* Исправлена валидация URL в движке MongoDB для случаев, когда имя пользователя содержит символ '@'. Ранее такие имена пользователей вызывали ошибку из-за некорректного кодирования. [#89970](https://github.com/ClickHouse/ClickHouse/pull/89970) ([Kai Zhu](https://github.com/nauu)). +* Бэкпортировано в [#90592](https://github.com/ClickHouse/ClickHouse/issues/90592): исправлено возможное аварийное завершение при выполнении удалённого запроса с `ARRAY JOIN` внутри `IN` при включённой настройке `enable_lazy_columns_replication`. Исправляет [#90361](https://github.com/ClickHouse/ClickHouse/issues/90361). [#89997](https://github.com/ClickHouse/ClickHouse/pull/89997) ([Pavel Kruglov](https://github.com/Avogar)). +* Бэкпортировано в [#90448](https://github.com/ClickHouse/ClickHouse/issues/90448): исправлена интерпретация некорректных значений DateTime64 при разборе строк в текстовых форматах в ряде случаев. Закрывает [#89368](https://github.com/ClickHouse/ClickHouse/issues/89368). [#90013](https://github.com/ClickHouse/ClickHouse/pull/90013) ([Pavel Kruglov](https://github.com/Avogar)). +* Исправлена логическая ошибка, вызванная пустым столбцом типа Tuple в `BSONEachRow` и `MsgPack`. Закрывает [#89814](https://github.com/ClickHouse/ClickHouse/issues/89814). Закрывает [#71536](https://github.com/ClickHouse/ClickHouse/issues/71536). [#90018](https://github.com/ClickHouse/ClickHouse/pull/90018) ([Nihal Z. Miaji](https://github.com/nihalzp)). +* Бэкпортировано в [#90457](https://github.com/ClickHouse/ClickHouse/issues/90457): выполнять проверку размера при десериализации данных из агрегатных состояний и других источников. [#90031](https://github.com/ClickHouse/ClickHouse/pull/90031) ([Raúl Marín](https://github.com/Algunenano)). +* Исправлена потенциальная ошибка 'Invalid number of rows in Chunk' при выполнении JOIN с повторяющимися столбцами. Исправляет [#89411](https://github.com/ClickHouse/ClickHouse/issues/89411). [#90053](https://github.com/ClickHouse/ClickHouse/pull/90053) ([Vladimir Cherkasov](https://github.com/vdimir)). +* Бэкпортировано в [#90588](https://github.com/ClickHouse/ClickHouse/issues/90588): исправлена возможная ошибка `Column with Array type is not represented by ColumnArray column: Replicated` при вставке с использованием `ARRAY JOIN` и при включённой настройке `enable_lazy_columns_replication`. [#90066](https://github.com/ClickHouse/ClickHouse/pull/90066) ([Pavel Kruglov](https://github.com/Avogar)). +* Разрешены файлы в `user_files`, имена которых начинаются с точки. Закрывает [#89662](https://github.com/ClickHouse/ClickHouse/issues/89662). [#90079](https://github.com/ClickHouse/ClickHouse/pull/90079) ([Raúl Marín](https://github.com/Algunenano)). +* Бэкпортировано в [#90647](https://github.com/ClickHouse/ClickHouse/issues/90647): исправлены логическая ошибка и ошибка вычисления остатка от деления (modulo) в системной таблице `numbers` при использовании большого шага. Закрывает [#83398](https://github.com/ClickHouse/ClickHouse/issues/83398). [#90123](https://github.com/ClickHouse/ClickHouse/pull/90123) ([Nihал Z. Miaji](https://github.com/nihalzp)). +* Исправлено переполнение целого числа при разборе аргументов словаря. Закрывает [#78506](https://github.com/ClickHouse/ClickHouse/issues/78506). [#90171](https://github.com/ClickHouse/ClickHouse/pull/90171) ([Raúl Marín](https://github.com/Algunenano)). +* Бэкпортировано в [#90468](https://github.com/ClickHouse/ClickHouse/issues/90468): Исправлена несовместимость с Hive-партиционированием, препятствовавшая корректному обновлению до версии 25.8 (исправляет ошибку `All hive partitioning columns must be present in the schema` во время обновления). [#90202](https://github.com/ClickHouse/ClickHouse/pull/90202) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Исправлены возможные некорректные результаты запросов после выполнения легковесных обновлений в запросах `SELECT` при включённом кэше условий запроса. Исправлена проблема [#90176](https://github.com/ClickHouse/ClickHouse/issues/90176). Исправлена проблема [#90054](https://github.com/ClickHouse/ClickHouse/issues/90054). [#90204](https://github.com/ClickHouse/ClickHouse/pull/90204) ([Anton Popov](https://github.com/CurtizJ)). +* Исправлен сбой в StorageDistributed при разборе некорректных имён каталогов шардов. [#90243](https://github.com/ClickHouse/ClickHouse/pull/90243) ([Aleksandr Musorin](https://github.com/AVMusorin)). +* Реализована обработка неявного преобразования строк в целые числа и логические значения в `LogicalExpressionOptimizerPass`. Исправляет [#89803](https://github.com/ClickHouse/ClickHouse/issues/89803). [#90245](https://github.com/ClickHouse/ClickHouse/pull/90245) ([Elmi Ahmadov](https://github.com/ahmadov)). +* Исправлено некорректное форматирование некоторых skip-индексов в определении таблицы, приводившее к ошибке `METADATA_MISMATCH` и мешавшее созданию новых реплик в реплицируемой базе данных. [#90251](https://github.com/ClickHouse/ClickHouse/pull/90251) ([Nikolay Degterinsky](https://github.com/evillique)). +* Бэкпортировано в [#90381](https://github.com/ClickHouse/ClickHouse/issues/90381): исправлено несоответствие количества строк в MergeTreeReaderIndex, когда part содержит меньше строк, чем index_granularity. Устраняет [#89691](https://github.com/ClickHouse/ClickHouse/issues/89691). [#90254](https://github.com/ClickHouse/ClickHouse/pull/90254) ([Peng Jian](https://github.com/fastio)). +* Бэкпортировано в [#90608](https://github.com/ClickHouse/ClickHouse/issues/90608): Исправлена ошибка при чтении подстолбцов из JSON в компактных частях, которая могла приводить к ошибке `CANNOT_READ_ALL_DATA`. Закрывает [#90264](https://github.com/ClickHouse/ClickHouse/issues/90264). [#90302](https://github.com/ClickHouse/ClickHouse/pull/90302) ([Pavel Kruglov](https://github.com/Avogar)). +* Исправлена проблема, из-за которой функции `trim`, `ltrim`, `rtrim` не работали с двумя аргументами. Закрывает [#90170](https://github.com/ClickHouse/ClickHouse/issues/90170). [#90305](https://github.com/ClickHouse/ClickHouse/pull/90305) ([Nihал Z. Miaji](https://github.com/nihalzp)). +* Бэкпортировано в [#90625](https://github.com/ClickHouse/ClickHouse/issues/90625): исправлена возможная логическая ошибка в PREWHERE при обращении к несуществующему JSON-пути при index_granularity_bytes=0. Исправляет [#86924](https://github.com/ClickHouse/ClickHouse/issues/86924). [#90375](https://github.com/ClickHouse/ClickHouse/pull/90375) ([Pavel Kruglov](https://github.com/Avogar)). +* Бэкпортировано в [#90484](https://github.com/ClickHouse/ClickHouse/issues/90484): исправлена ошибка в `L2DistanceTransposed`, приводившая к сбоям при выходе значения аргумента precision за допустимый диапазон. Закрывает [#90401](https://github.com/ClickHouse/ClickHouse/issues/90401). [#90405](https://github.com/ClickHouse/ClickHouse/pull/90405) ([Raufs Dunamalijevs](https://github.com/rienath)). +* Бэкпортировано в [#90577](https://github.com/ClickHouse/ClickHouse/issues/90577): исправлены некорректные вычисления расстояния в `L2DistanceTransposed` при использовании массивов опорных векторов (по умолчанию `Array(Float64)`) со столбцами `QBit` с элементами типов, отличных от `Float64` (`Float32`, `BFloat16`). Функция теперь автоматически приводит тип опорного вектора к типу элемента `QBit`. Закрывает [#89976](https://github.com/ClickHouse/ClickHouse/issues/89976). [#90485](https://github.com/ClickHouse/ClickHouse/pull/90485) ([Raufs Dunamalijevs](https://github.com/rienath)). +* Бэкпортировано в [#90601](https://github.com/ClickHouse/ClickHouse/issues/90601): исправлена логическая ошибка, возникающая в редком случае в функции `equals`. Закрывает [#88142](https://github.com/ClickHouse/ClickHouse/issues/88142). [#90557](https://github.com/ClickHouse/ClickHouse/pull/90557) ([Nihal Z. Miaji](https://github.com/nihalzp)). +* Исправлен `CoalescingMergeTree` для типов `Tuple`. [#88828](https://github.com/ClickHouse/ClickHouse/pull/88828) ([scanhex12](https://github.com/scanhex12)). +#### Улучшения сборки/тестирования/упаковки -#### Новая возможность +* Исправлена ошибка Connection refused при запуске ClickHouse в Docker с initdb SQL-скриптами и переопределённым TCP-портом. [#88042](https://github.com/ClickHouse/ClickHouse/pull/88042) ([Grigorii](https://github.com/GSokol)). +* Экспериментально добавлена поддержка e2k как новой платформы для ClickHouse. [#90159](https://github.com/ClickHouse/ClickHouse/pull/90159) ([Ramil Sattarov](https://github.com/r-a-sattarov)). +* Убрано оставшееся использование `FindPackage` в CMake. Сборка не должна зависеть от системных пакетов. [#89380](https://github.com/ClickHouse/ClickHouse/pull/89380) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Включено использование кэша компилятора при сборке на этапе конфигурации CMake (например, для `protoc`). [#89613](https://github.com/ClickHouse/ClickHouse/pull/89613) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* Переведена сборка на использование sysroot FreeBSD 13.4. [#89617](https://github.com/ClickHouse/ClickHouse/pull/89617) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* Добавлена поддержка отрицательных значений `LIMIT` и `OFFSET`. Закрывает [#28913](https://github.com/ClickHouse/ClickHouse/issues/28913). [#88411](https://github.com/ClickHouse/ClickHouse/pull/88411) ([Nihal Z. Miaji](https://github.com/nihalzp)). -* Движок `Alias` создаёт прокси к другой таблице. Все операции чтения и записи перенаправляются в целевую таблицу, в то время как сам алиас не хранит данные и содержит только ссылку на целевую таблицу. [#87965](https://github.com/ClickHouse/ClickHouse/pull/87965) ([Kai Zhu](https://github.com/nauu)). -* Полная поддержка оператора `IS NOT DISTINCT FROM` (`<=>`). [#88155](https://github.com/ClickHouse/ClickHouse/pull/88155) ([simonmichal](https://github.com/simonmichal)). -* Добавлена возможность автоматически создавать статистику по всем подходящим столбцам в таблицах `MergeTree`. Добавлена настройка на уровне таблицы `auto_statistics_types`, в которой хранятся типы статистики, задаваемые через запятую (например, `auto_statistics_types = 'minmax, uniq, countmin'`). [#87241](https://github.com/ClickHouse/ClickHouse/pull/87241) ([Anton Popov](https://github.com/CurtizJ)). -* Новый блум-фильтр-индекс для текстовых данных `sparse_gram`. [#79985](https://github.com/ClickHouse/ClickHouse/pull/79985) ([scanhex12](https://github.com/scanhex12)). -* Новая функция `conv` для преобразования чисел между системами счисления, в настоящее время поддерживает основания от `2` до `36`. [#83058](https://github.com/ClickHouse/ClickHouse/pull/83058) ([hp](https://github.com/hp77-creator)). -* Добавлена поддержка синтаксиса `LIMIT BY ALL`. Аналогично `GROUP BY ALL` и `ORDER BY ALL`, `LIMIT BY ALL` автоматически расширяется до использования всех неагрегатных выражений из предложения SELECT в качестве ключей LIMIT BY. Например, `SELECT id, name, count(*) FROM table GROUP BY id LIMIT 1 BY ALL` эквивалентен `SELECT id, name, count(*) FROM table GROUP BY id LIMIT 1 BY id, name`. Эта возможность упрощает запросы, когда требуется ограничить результат по всем выбранным неагрегатным столбцам без их явного перечисления. Закрывает [#59152](https://github.com/ClickHouse/ClickHouse/issues/59152). [#84079](https://github.com/ClickHouse/ClickHouse/pull/84079) ([Surya Kant Ranjan](https://github.com/iit2009046)). -* Добавлена поддержка выполнения запросов к Apache Paimon из ClickHouse. Эта интеграция позволит пользователям ClickHouse напрямую работать с хранилищем озера данных Paimon. [#84423](https://github.com/ClickHouse/ClickHouse/pull/84423) ([JIaQi](https://github.com/JiaQiTang98)). -* Добавлена агрегатная функция `studentTTestOneSample`. [#85436](https://github.com/ClickHouse/ClickHouse/pull/85436) ([Dylan](https://github.com/DylanBlakemore)). -* Агрегатная функция `quantilePrometheusHistogram`, которая принимает в качестве аргументов верхние границы и кумулятивные значения бакетов гистограммы и выполняет линейную интерполяцию между верхней и нижней границами того бакета, в котором находится позиция квантиля. Ведёт себя аналогично функции PromQL `histogram_quantile` для классических гистограмм. [#86294](https://github.com/ClickHouse/ClickHouse/pull/86294) ([Stephen Chi](https://github.com/stephchi0)). -* Новая системная таблица для файлов метаданных Delta Lake. [#87263](https://github.com/ClickHouse/ClickHouse/pull/87263) ([scanhex12](https://github.com/scanhex12)). -* Добавлено `ALTER TABLE REWRITE PARTS` — выполняет полную перезапись частей таблицы с нуля с использованием всех новых настроек (поскольку некоторые, такие как `use_const_adaptive_granularity`, будут применяться только к новым частям). [#87774](https://github.com/ClickHouse/ClickHouse/pull/87774) ([Azat Khuzhin](https://github.com/azat)). -* Добавлена команда `SYSTEM RECONNECT ZOOKEEPER` для принудительного разрыва соединения с ZooKeeper и повторного подключения ([https://github.com/ClickHouse/ClickHouse/issues/87317](https://github.com/ClickHouse/ClickHouse/issues/87317)). [#87318](https://github.com/ClickHouse/ClickHouse/pull/87318) ([Pradeep Chhetri](https://github.com/chhetripradeep)). -* Ограничьте количество именованных коллекций с помощью настроек `max_named_collection_num_to_warn` и `max_named_collection_num_to_throw`. Добавлены новая метрика `NamedCollection` и ошибка `TOO_MANY_NAMED_COLLECTIONS`. [#87343](https://github.com/ClickHouse/ClickHouse/pull/87343) ([Pablo Marcos](https://github.com/pamarcos)). -* Добавлены оптимизированные регистронезависимые варианты функций `startsWith` и `endsWith`: `startsWithCaseInsensitive`, `endsWithCaseInsensitive`, `startsWithCaseInsensitiveUTF8` и `endsWithCaseInsensitiveUTF8`. [#87374](https://github.com/ClickHouse/ClickHouse/pull/87374) ([Guang Zhao](https://github.com/zheguang)). -* Добавлена возможность задавать определения `WORKLOAD` и `RESOURCE` в SQL через секцию конфигурации сервера "resources_and_workloads". [#87430](https://github.com/ClickHouse/ClickHouse/pull/87430) ([Sergei Trifonov](https://github.com/serxa)). -* Добавлена новая настройка таблицы `min_level_for_wide_part`, которая позволяет указать минимальный уровень части, начиная с которого она создаётся как wide-часть. [#88179](https://github.com/ClickHouse/ClickHouse/pull/88179) ([Christoph Wurm](https://github.com/cwurm)). -* В клиент Keeper добавлены рекурсивные варианты команд `cp`-`cpr` и `mv`-`mvr`. [#88570](https://github.com/ClickHouse/ClickHouse/pull/88570) ([Mikhail Artemenko](https://github.com/Michicosun)). -* Добавлена настройка сессии для исключения из материализации списка индексов пропуска при вставках (`exclude_materialize_skip_indexes_on_insert`). Добавлена настройка таблицы MergeTree для исключения из материализации списка индексов пропуска во время слияния (`exclude_materialize_skip_indexes_on_merge`). [#87252](https://github.com/ClickHouse/ClickHouse/pull/87252) ([George Larionov](https://github.com/george-larionov)). +### Релиз ClickHouse 25.10, 2025-10-31 {#2510} +#### Несовместимое изменение +* Изменена настройка по умолчанию `schema_inference_make_columns_nullable`: теперь она учитывает признак `Nullable` для столбцов по метаданным Parquet/ORC/Arrow вместо того, чтобы делать все столбцы Nullable. Для текстовых форматов изменений нет. [#71499](https://github.com/ClickHouse/ClickHouse/pull/71499) ([Michael Kolupaev](https://github.com/al13n321)). +* Кэш результатов запросов будет игнорировать настройку `log_comment`, так что изменение только `log_comment` в запросе больше не будет приводить к промаху по кэшу. Существует небольшая вероятность, что пользователи намеренно сегментировали свой кэш, варьируя `log_comment`. Это изменение меняет такое поведение и, следовательно, не является обратно совместимым. Пожалуйста, используйте настройку `query_cache_tag` для этой цели. [#79878](https://github.com/ClickHouse/ClickHouse/pull/79878) ([filimonov](https://github.com/filimonov)). +* В предыдущих версиях запросы с табличными функциями, названными так же, как функции реализации операторов, форматировались непоследовательно. Закрывает [#81601](https://github.com/ClickHouse/ClickHouse/issues/81601). Закрывает [#81977](https://github.com/ClickHouse/ClickHouse/issues/81977). Закрывает [#82834](https://github.com/ClickHouse/ClickHouse/issues/82834). Закрывает [#82835](https://github.com/ClickHouse/ClickHouse/issues/82835). Запросы EXPLAIN SYNTAX больше не всегда будут форматировать операторы — новое поведение лучше отражает цель объяснения синтаксиса. `clickhouse-format`, `formatQuery` и подобные инструменты не будут форматировать функции как операторы, если в запросе они используются в функциональной форме. [#82825](https://github.com/ClickHouse/ClickHouse/pull/82825) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Запрещено использовать тип `Dynamic` в ключах `JOIN`. Это может приводить к неожиданным результатам при сравнении значения типа `Dynamic` со значением типа, отличного от `Dynamic`. Лучше приводить столбец `Dynamic` к требуемому типу. [#86358](https://github.com/ClickHouse/ClickHouse/pull/86358) ([Pavel Kruglov](https://github.com/Avogar)). +* Опция сервера `storage_metadata_write_full_object_key` по умолчанию включена, сейчас её нельзя отключить. Это обратно совместимое изменение. Приводится только для вашего сведения. Это изменение совместимо по направлению вперёд только с релизами 25.x. Это означает, что вы сможете выполнить откат только до любого релиза 25.x в случае, если потребуется вернуть новый релиз. [#87335](https://github.com/ClickHouse/ClickHouse/pull/87335) ([Sema Checherinda](https://github.com/CheSema)). +* Уменьшите значение `replicated_deduplication_window_seconds` с одной недели до одного часа, чтобы сократить число znode в ZooKeeper при низкой скорости вставки. [#87414](https://github.com/ClickHouse/ClickHouse/pull/87414) ([Sema Checherinda](https://github.com/CheSema)). +* Переименована настройка `query_plan_use_new_logical_join_step` в `query_plan_use_logical_join_step`. [#87679](https://github.com/ClickHouse/ClickHouse/pull/87679) ([Vladimir Cherkasov](https://github.com/vdimir)). +* Новый синтаксис позволяет более гибко задавать параметр tokenizer для текстового индекса. [#87997](https://github.com/ClickHouse/ClickHouse/pull/87997) ([Elmi Ahmadov](https://github.com/ahmadov)). +* Функции `searchAny` и `searchAll` переименованы в `hasAnyTokens` и `hasAllTokens` для лучшей согласованности с существующей функцией `hasToken`. [#88109](https://github.com/ClickHouse/ClickHouse/pull/88109) ([Robert Schulze](https://github.com/rschu1ze)). +* Удалён параметр `cache_hits_threshold` из кеша файловой системы. Этот параметр был добавлен внешним участником до появления политики кеширования SLRU, и теперь, когда она есть, нет смысла поддерживать обе. [#88344](https://github.com/ClickHouse/ClickHouse/pull/88344) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Два небольших изменения в работе настроек `min_free_disk_ratio_to_perform_insert` и `min_free_disk_bytes_to_perform_insert`: - использовать незарезервированные, а не доступные байты для определения, должна ли операция вставки быть отклонена. Это, вероятно, не критично, если резервы для фоновых слияний и мутаций малы по сравнению с настроенными порогами, но так считается более корректным. - Не применять эти настройки к системным таблицам. Обоснование в том, что мы по‑прежнему хотим, чтобы такие таблицы, как `query_log`, обновлялись. Это сильно помогает при отладке. Данные, записываемые в системные таблицы, обычно невелики по сравнению с основными данными, поэтому они смогут продолжать работу значительно дольше при разумном пороге `min_free_disk_ratio_to_perform_insert`. [#88468](https://github.com/ClickHouse/ClickHouse/pull/88468) ([c-end](https://github.com/c-end)). +* Включите асинхронный режим для внутренней репликации Keeper. Keeper сохранит прежнее поведение с возможным улучшением производительности. Если вы обновляетесь с версии старее 23.9, вам нужно сначала обновиться до 23.9+ и затем до 25.10+. Вы также можете установить `keeper_server.coordination_settings.async_replication` в значение 0 перед обновлением и включить его после завершения обновления. [#88515](https://github.com/ClickHouse/ClickHouse/pull/88515) ([Antonio Andelic](https://github.com/antonio2368)). -#### Экспериментальная функциональность -* Реализован тип данных `QBit`, который хранит векторы в бит-слайсинговом формате, и функция `L2DistanceTransposed`, позволяющая выполнять приближённый векторный поиск с управляемым компромиссом между точностью и скоростью с помощью параметра. [#87922](https://github.com/ClickHouse/ClickHouse/pull/87922) ([Raufs Dunamalijevs](https://github.com/rienath)). -* Функции `searchAll` и `searchAny` теперь могут использоваться и в таблицах без текстовых столбцов. В таких случаях они применяют токенизатор по умолчанию. [#87722](https://github.com/ClickHouse/ClickHouse/pull/87722) ([Jimmy Aguilar Mena](https://github.com/Ergus)). +#### Новая функция + +* Добавлена поддержка отрицательных значений для `LIMIT` и `OFFSET`. Закрывает [#28913](https://github.com/ClickHouse/ClickHouse/issues/28913). [#88411](https://github.com/ClickHouse/ClickHouse/pull/88411) ([Nihal Z. Miaji](https://github.com/nihalzp)). +* Движок `Alias` создаёт прокси для другой таблицы. Все операции чтения и записи перенаправляются в целевую таблицу, при этом псевдоним сам по себе не хранит данные и только содержит ссылку на целевую таблицу. [#87965](https://github.com/ClickHouse/ClickHouse/pull/87965) ([Kai Zhu](https://github.com/nauu)). +* Полная поддержка оператора `IS NOT DISTINCT FROM` (`<=>`). [#88155](https://github.com/ClickHouse/ClickHouse/pull/88155) ([simonmichal](https://github.com/simonmichal)). +* Добавлена возможность автоматически создавать статистику по всем подходящим столбцам в таблицах `MergeTree`. Добавлена настройка на уровне таблицы `auto_statistics_types`, которая хранит через запятую список типов статистики, которые будут создаваться (например, `auto_statistics_types = 'minmax, uniq, countmin'`). [#87241](https://github.com/ClickHouse/ClickHouse/pull/87241) ([Anton Popov](https://github.com/CurtizJ)). +* Новый индекс блум-фильтра для текстовых данных, `sparse_gram`. [#79985](https://github.com/ClickHouse/ClickHouse/pull/79985) ([scanhex12](https://github.com/scanhex12)). +* Новая функция `conv` для преобразования чисел между системами счисления, которая на данный момент поддерживает основания систем счисления от `2` до `36`. [#83058](https://github.com/ClickHouse/ClickHouse/pull/83058) ([hp](https://github.com/hp77-creator)). +* Добавлена поддержка синтаксиса `LIMIT BY ALL`. Аналогично `GROUP BY ALL` и `ORDER BY ALL`, `LIMIT BY ALL` автоматически расширяется до использования всех неагрегатных выражений из предложения SELECT в качестве ключей LIMIT BY. Например, `SELECT id, name, count(*) FROM table GROUP BY id LIMIT 1 BY ALL` эквивалентен `SELECT id, name, count(*) FROM table GROUP BY id LIMIT 1 BY id, name`. Эта возможность упрощает запросы, когда требуется ограничить выборку по всем выбранным неагрегатным столбцам без их явного перечисления. Закрывает [#59152](https://github.com/ClickHouse/ClickHouse/issues/59152). [#84079](https://github.com/ClickHouse/ClickHouse/pull/84079) ([Surya Kant Ranjan](https://github.com/iit2009046)). +* Добавлена поддержка выполнения запросов к Apache Paimon из ClickHouse. Эта интеграция позволяет пользователям ClickHouse напрямую работать с хранилищем Paimon в формате data lake. [#84423](https://github.com/ClickHouse/ClickHouse/pull/84423) ([JIaQi](https://github.com/JiaQiTang98)). +* Добавлена агрегатная функция `studentTTestOneSample`. [#85436](https://github.com/ClickHouse/ClickHouse/pull/85436) ([Dylan](https://github.com/DylanBlakemore)). +* Агрегатная функция `quantilePrometheusHistogram`, которая принимает в качестве аргументов верхние границы и накопленные значения бакетов гистограммы и выполняет линейную интерполяцию между верхней и нижней границами того бакета, в котором находится позиция квантиля. Ведёт себя аналогично функции PromQL `histogram_quantile` для классических гистограмм. [#86294](https://github.com/ClickHouse/ClickHouse/pull/86294) ([Stephen Chi](https://github.com/stephchi0)). +* Новая системная таблица для файлов метаданных Delta Lake. [#87263](https://github.com/ClickHouse/ClickHouse/pull/87263) ([scanhex12](https://github.com/scanhex12)). +* Добавлена команда `ALTER TABLE REWRITE PARTS` — переписывает части таблицы заново, с учётом всех новых настроек (поскольку некоторые из них, например `use_const_adaptive_granularity`, применяются только к новым частям). [#87774](https://github.com/ClickHouse/ClickHouse/pull/87774) ([Azat Khuzhin](https://github.com/azat)). +* Добавлена команда `SYSTEM RECONNECT ZOOKEEPER` для принудительного разрыва соединения и повторного подключения к Zookeeper ([https://github.com/ClickHouse/ClickHouse/issues/87317](https://github.com/ClickHouse/ClickHouse/issues/87317)). [#87318](https://github.com/ClickHouse/ClickHouse/pull/87318) ([Pradeep Chhetri](https://github.com/chhetripradeep)). +* Ограничено количество именованных коллекций посредством настроек `max_named_collection_num_to_warn` и `max_named_collection_num_to_throw`. Добавлена новая метрика `NamedCollection` и ошибка `TOO_MANY_NAMED_COLLECTIONS`. [#87343](https://github.com/ClickHouse/ClickHouse/pull/87343) ([Pablo Marcos](https://github.com/pamarcos)). +* Добавлены оптимизированные регистронезависимые версии функций `startsWith` и `endsWith`: `startsWithCaseInsensitive`, `endsWithCaseInsensitive`, `startsWithCaseInsensitiveUTF8` и `endsWithCaseInsensitiveUTF8`. [#87374](https://github.com/ClickHouse/ClickHouse/pull/87374) ([Guang Zhao](https://github.com/zheguang)). +* Добавляет возможность задавать определения `WORKLOAD` и `RESOURCE` в SQL через раздел конфигурации сервера "resources_and_workloads". [#87430](https://github.com/ClickHouse/ClickHouse/pull/87430) ([Sergei Trifonov](https://github.com/serxa)). +* Добавлена новая настройка таблицы `min_level_for_wide_part`, которая позволяет задать минимальный уровень части, начиная с которого она будет создаваться как wide-часть. [#88179](https://github.com/ClickHouse/ClickHouse/pull/88179) ([Christoph Wurm](https://github.com/cwurm)). +* Добавлены рекурсивные варианты команд `cp`-`cpr` и `mv`-`mvr` в клиенте Keeper. [#88570](https://github.com/ClickHouse/ClickHouse/pull/88570) ([Mikhail Artemenko](https://github.com/Michicosun)). +* Добавлена сеансовая настройка для исключения из материализации списка пропускающих индексов при вставках (`exclude_materialize_skip_indexes_on_insert`). Добавлена настройка таблицы MergeTree для исключения из материализации списка пропускающих индексов при слиянии (`exclude_materialize_skip_indexes_on_merge`). [#87252](https://github.com/ClickHouse/ClickHouse/pull/87252) ([George Larionov](https://github.com/george-larionov)). +#### Экспериментальная возможность +* Реализован тип данных `QBit`, который хранит векторы в побитово-расслоённом формате, и функция `L2DistanceTransposed`, позволяющая выполнять приближённый векторный поиск, в котором соотношение точности и скорости управляется параметром. [#87922](https://github.com/ClickHouse/ClickHouse/pull/87922) ([Raufs Dunamalijevs](https://github.com/rienath)). +* Функции `searchAll` и `searchAny` теперь могут работать со столбцами, не содержащими текстовых данных. В таких случаях используется токенайзер по умолчанию. [#87722](https://github.com/ClickHouse/ClickHouse/pull/87722) ([Jimmy Aguilar Mena](https://github.com/Ergus)). #### Повышение производительности -* Реализована ленивая репликация столбцов в JOIN и ARRAY JOIN. Теперь не требуется преобразовывать специальное представление столбцов, такое как Sparse и Replicated, в полные столбцы в некоторых форматах вывода. Это позволяет избежать лишнего копирования данных в памяти. [#88752](https://github.com/ClickHouse/ClickHouse/pull/88752) ([Pavel Kruglov](https://github.com/Avogar)). -* Добавлена опциональная сериализация подстолбца `.size` для строковых столбцов верхнего уровня в таблицах MergeTree для улучшения сжатия и обеспечения эффективного доступа к подстолбцам. Введены новые настройки MergeTree для управления версией сериализации и оптимизации выражений с пустыми строками. [#82850](https://github.com/ClickHouse/ClickHouse/pull/82850) ([Amos Bird](https://github.com/amosbird)). +* Реализована ленивая репликация столбцов в JOIN и ARRAY JOIN. Избегается преобразование специальных представлений столбцов, таких как Sparse и Replicated, в полные столбцы в некоторых выходных форматах. Это предотвращает ненужное копирование данных в памяти. [#88752](https://github.com/ClickHouse/ClickHouse/pull/88752) ([Pavel Kruglov](https://github.com/Avogar)). +* Добавлена возможность необязательной сериализации подстолбца `.size` для строковых столбцов верхнего уровня в таблицах MergeTree для улучшения сжатия и обеспечения эффективного доступа к подстолбцам. Введены новые настройки MergeTree для управления версией сериализации и оптимизации выражений с пустыми строками. [#82850](https://github.com/ClickHouse/ClickHouse/pull/82850) ([Amos Bird](https://github.com/amosbird)). * Поддержка упорядоченного чтения для Iceberg. [#88454](https://github.com/ClickHouse/ClickHouse/pull/88454) ([scanhex12](https://github.com/scanhex12)). -* Ускорены некоторые запросы с `JOIN` за счёт построения во время выполнения фильтра Блума из правого поддерева и передачи этого фильтра операции сканирования в левом поддереве. Это может быть полезно для запросов вида `SELECT avg(o_totalprice) FROM orders, customer, nation WHERE c_custkey = o_custkey AND c_nationkey=n_nationkey AND n_name = 'FRANCE'`. [#84772](https://github.com/ClickHouse/ClickHouse/pull/84772) ([Alexander Gololobov](https://github.com/davenger)). -* Производительность выполнения запросов улучшена за счёт переработки порядка применения и интеграции Query Condition Cache (QCC) с анализом индексов. Фильтрация с помощью QCC теперь применяется до анализа первичного ключа и skip-индексов, что сокращает избыточные вычисления по индексам. Анализ индексов расширен для поддержки нескольких диапазонных фильтров, а его результаты фильтрации теперь сохраняются обратно в QCC. Это значительно ускоряет запросы, в которых анализ индексов доминирует во времени выполнения — особенно те, которые полагаются на skip-индексы (например, векторные или инвертированные индексы). [#82380](https://github.com/ClickHouse/ClickHouse/pull/82380) ([Amos Bird](https://github.com/amosbird)). -* Набор микрооптимизаций для ускорения выполнения небольших запросов. [#83096](https://github.com/ClickHouse/ClickHouse/pull/83096) ([Raúl Marín](https://github.com/Algunenano)). -* Сжимать логи и события профилирования в нативном протоколе. На кластерах со 100+ репликами несжатые события профилирования генерируют трафик 1–10 МБ/с, и индикатор прогресса медленно обновляется при низкой скорости интернет-соединения. Это закрывает [#82533](https://github.com/ClickHouse/ClickHouse/issues/82533). [#83586](https://github.com/ClickHouse/ClickHouse/pull/83586) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Улучшена производительность поиска строк с учетом регистра (операции, такие как фильтрация, например `WHERE URL LIKE '%google%'`) с помощью библиотеки [StringZilla](https://github.com/ashvardanian/StringZilla), использующей SIMD‑инструкции процессора при их наличии. [#84161](https://github.com/ClickHouse/ClickHouse/pull/84161) ([Raúl Marín](https://github.com/Algunenano)). -* Снижено количество операций выделения и копирования памяти при выполнении запроса `SELECT ... FINAL` из таблицы движка AggregatingMergeTree, если в таблице есть столбцы типа `SimpleAggregateFunction(anyLast)`. [#84428](https://github.com/ClickHouse/ClickHouse/pull/84428) ([Duc Canh Le](https://github.com/canhld94)). +* Ускорено выполнение некоторых запросов с операцией JOIN за счёт построения bloom-фильтра по правому поддереву во время выполнения и передачи этого фильтра в операцию сканирования в левом поддереве. Это может быть полезно для запросов вида `SELECT avg(o_totalprice) FROM orders, customer, nation WHERE c_custkey = o_custkey AND c_nationkey=n_nationkey AND n_name = 'FRANCE'`. [#84772](https://github.com/ClickHouse/ClickHouse/pull/84772) ([Alexander Gololobov](https://github.com/davenger)). +* Повышена производительность запросов за счет рефакторинга порядка выполнения и интеграции Query Condition Cache (QCC) с анализом индексов. Фильтрация с помощью QCC теперь выполняется до анализа по первичному ключу и skip-индексам, что сокращает лишние вычисления по индексам. Анализ индексов был расширен для поддержки нескольких диапазонных фильтров, а его результаты фильтрации теперь сохраняются обратно в QCC. Это существенно ускоряет запросы, в которых анализ индексов доминирует во времени выполнения — особенно те, что опираются на skip-индексы (например, векторные или инвертированные индексы). [#82380](https://github.com/ClickHouse/ClickHouse/pull/82380) ([Amos Bird](https://github.com/amosbird)). +* Серия микрооптимизаций для ускорения небольших запросов. [#83096](https://github.com/ClickHouse/ClickHouse/pull/83096) ([Raúl Marín](https://github.com/Algunenano)). +* Добавлено сжатие логов и событий профилирования в нативном протоколе. На кластерах со 100+ репликами несжатые события профилирования создают трафик 1–10 МБ/с, и индикатор выполнения работает медленно при медленном подключении к интернету. Это исправляет [#82533](https://github.com/ClickHouse/ClickHouse/issues/82533). [#83586](https://github.com/ClickHouse/ClickHouse/pull/83586) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Улучшена производительность поиска по строкам с учётом регистра (для операций, таких как фильтрация, например `WHERE URL LIKE '%google%'`) за счёт использования библиотеки [StringZilla](https://github.com/ashvardanian/StringZilla), применяющей SIMD-инструкции процессора, когда они доступны. [#84161](https://github.com/ClickHouse/ClickHouse/pull/84161) ([Raúl Marín](https://github.com/Algunenano)). +* Сокращено количество операций выделения и копирования памяти при выполнении запроса `SELECT` с модификатором `FINAL` из таблицы AggregatingMergeTree, если в таблице есть столбцы типа `SimpleAggregateFunction(anyLast)`. [#84428](https://github.com/ClickHouse/ClickHouse/pull/84428) ([Duc Canh Le](https://github.com/canhld94)). * Реализует логику проталкивания дизъюнктивных предикатов JOIN. Пример: в TPC-H Q7 для условия над двумя таблицами n1 и n2 вида `(n1.n_name = 'FRANCE' AND n2.n_name = 'GERMANY') OR (n1.n_name = 'GERMANY' AND n2.n_name = 'FRANCE')` мы извлекаем отдельные частичные фильтры для каждой таблицы: `n1.n_name = 'FRANCE' OR n1.n_name = 'GERMANY'` для n1 и `n2.n_name = 'GERMANY' OR n2.n_name = 'FRANCE'` для n2. [#84735](https://github.com/ClickHouse/ClickHouse/pull/84735) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* Улучшена производительность оператора `LIKE` с префиксом или суффиксом за счёт использования нового значения настройки по умолчанию `optimize_rewrite_like_perfect_affix`. [#85920](https://github.com/ClickHouse/ClickHouse/pull/85920) ([Guang Zhao](https://github.com/zheguang)). -* Устранена деградация производительности, вызванная большим сериализованным ключом при группировке по нескольким строковым и числовым столбцам. Это продолжение [#83884](https://github.com/ClickHouse/ClickHouse/pull/83884). [#85924](https://github.com/ClickHouse/ClickHouse/pull/85924) ([李扬](https://github.com/taiyang-li)). -* Добавлена новая настройка `joined_block_split_single_row` для снижения потребления памяти при хеш-соединениях с большим количеством совпадений на один ключ. Она позволяет разбивать результаты хеш-соединения на блоки даже внутри совпадений для одной строки левой таблицы, что особенно полезно, когда одна строка из левой таблицы сопоставляется с тысячами или миллионами строк из правой таблицы. Ранее все совпадения должны были быть материализованы в памяти одновременно. Это снижает пиковое потребление памяти, но может увеличить нагрузку на CPU. [#87913](https://github.com/ClickHouse/ClickHouse/pull/87913) ([Vladimir Cherkasov](https://github.com/vdimir)). -* Улучшения в реализации SharedMutex (повышена производительность при большом числе конкурентных запросов). [#87491](https://github.com/ClickHouse/ClickHouse/pull/87491) ([Raúl Marín](https://github.com/Algunenano)). -* Повышена производительность построения текстового индекса для документов, которые содержат в основном редко встречающиеся токены. [#87546](https://github.com/ClickHouse/ClickHouse/pull/87546) ([Anton Popov](https://github.com/CurtizJ)). -* Ускорен типичный случай работы деструктора `Field` (улучшена производительность при большом количестве небольших запросов). [#87631](https://github.com/ClickHouse/ClickHouse/pull/87631) ([Raúl Marín](https://github.com/Algunenano)). -* Пропускается пересчёт статистики хеш-таблицы при оптимизации JOIN (это улучшает производительность всех запросов с JOIN). Добавлены новые профильные события `JoinOptimizeMicroseconds` и `QueryPlanOptimizeMicroseconds`. [#87683](https://github.com/ClickHouse/ClickHouse/pull/87683) ([Vladimir Cherkasov](https://github.com/vdimir)). -* Включена возможность сохранять метки в кэше и избегать прямого ввода-вывода для ридера MergeTreeLazy. Это улучшает производительность запросов с ORDER BY и небольшим LIMIT. [#87989](https://github.com/ClickHouse/ClickHouse/pull/87989) ([Nikita Taranov](https://github.com/nickitat)). -* Запрос SELECT с предложением `FINAL` для таблицы `ReplacingMergeTree` со столбцом `is_deleted` теперь выполняется быстрее благодаря улучшенной параллелизации на основе двух существующих оптимизаций: 1. оптимизация `do_not_merge_across_partitions_select_final` для разделов таблицы, которые содержат только один `part`; 2. разбиение других выбранных диапазонов таблицы на `intersecting` / `non-intersecting`, при этом только пересекающиеся диапазоны должны проходить через преобразование слияния FINAL. [#88090](https://github.com/ClickHouse/ClickHouse/pull/88090) ([Shankar Iyer](https://github.com/shankar-iyer)). -* Уменьшено влияние неиспользования fail points на путь выполнения по умолчанию (когда отладка не активна). [#88196](https://github.com/ClickHouse/ClickHouse/pull/88196) ([Raúl Marín](https://github.com/Algunenano)). -* Избегается полное сканирование `system.tables` при фильтрации по `uuid` (может быть полезно, если у вас есть только UUID из логов или пути в ZooKeeper). [#88379](https://github.com/ClickHouse/ClickHouse/pull/88379) ([Azat Khuzhin](https://github.com/azat)). -* Улучшена производительность функций `tokens`, `hasAllTokens` и `hasAnyTokens`. [#88416](https://github.com/ClickHouse/ClickHouse/pull/88416) ([Anton Popov](https://github.com/CurtizJ)). +* Повышает производительность операций `LIKE` с префиксом или суффиксом за счёт использования новой настройки по умолчанию `optimize_rewrite_like_perfect_affix`. [#85920](https://github.com/ClickHouse/ClickHouse/pull/85920) ([Guang Zhao](https://github.com/zheguang)). +* Исправлено снижение производительности, вызванное большим сериализованным ключом при группировке по нескольким строковым и числовым столбцам. Это продолжение [#83884](https://github.com/ClickHouse/ClickHouse/pull/83884). [#85924](https://github.com/ClickHouse/ClickHouse/pull/85924) ([李扬](https://github.com/taiyang-li)). +* Добавлена новая настройка `joined_block_split_single_row` для снижения потребления памяти при хеш-соединениях с большим числом совпадений на ключ. Она позволяет разбивать результаты хеш-соединения на блоки даже внутри множества совпадений для одной строки левой таблицы, что особенно полезно, когда одна строка из левой таблицы сопоставляется с тысячами или миллионами строк из правой таблицы. Ранее все совпадения должны были материализоваться в памяти одновременно. Это снижает пиковое потребление памяти, но может увеличить нагрузку на CPU. [#87913](https://github.com/ClickHouse/ClickHouse/pull/87913) ([Vladimir Cherkasov](https://github.com/vdimir)). +* Улучшения SharedMutex (улучшена производительность при большом числе параллельных запросов). [#87491](https://github.com/ClickHouse/ClickHouse/pull/87491) ([Raúl Marín](https://github.com/Algunenano)). +* Улучшена производительность построения текстового индекса для документов, содержащих в основном редкие токены. [#87546](https://github.com/ClickHouse/ClickHouse/pull/87546) ([Anton Popov](https://github.com/CurtizJ)). +* Ускорена работа деструктора `Field` в типичном случае (повышена производительность при большом количестве небольших запросов). [#87631](https://github.com/ClickHouse/ClickHouse/pull/87631) ([Raúl Marín](https://github.com/Algunenano)). +* Пропуск перерасчёта статистики хеш-таблиц при оптимизации JOIN (повышает производительность всех запросов с JOIN). Добавлены новые профильные события `JoinOptimizeMicroseconds` и `QueryPlanOptimizeMicroseconds`. [#87683](https://github.com/ClickHouse/ClickHouse/pull/87683) ([Vladimir Cherkasov](https://github.com/vdimir)). +* Включено сохранение меток в кэше и исключён прямой ввод-вывод (direct I/O) для ридера MergeTreeLazy. Это повышает производительность запросов с ORDER BY и небольшим LIMIT. [#87989](https://github.com/ClickHouse/ClickHouse/pull/87989) ([Nikita Taranov](https://github.com/nickitat)). +* Запрос SELECT с оператором `FINAL` по таблице `ReplacingMergeTree` с колонкой `is_deleted` теперь выполняется быстрее за счёт улучшенной параллелизации на базе двух существующих оптимизаций: 1. оптимизация `do_not_merge_across_partitions_select_final` для разделов (partitions) таблицы, которые содержат только одну часть (`part`); 2. разделение остальных выбранных диапазонов таблицы на пересекающиеся / непересекающиеся (intersecting / non-intersecting), при этом через преобразование финального слияния (FINAL) должны проходить только пересекающиеся диапазоны. [#88090](https://github.com/ClickHouse/ClickHouse/pull/88090) ([Shankar Iyer](https://github.com/shankar-iyer)). +* Уменьшено влияние неиспользования fail points (штатного пути выполнения кода, когда отладка не активна). [#88196](https://github.com/ClickHouse/ClickHouse/pull/88196) ([Raúl Marín](https://github.com/Algunenano)). +* Избегайте полного сканирования `system.tables` при фильтрации по `uuid` (может быть полезно, если у вас есть только UUID из логов или пути в ZooKeeper). [#88379](https://github.com/ClickHouse/ClickHouse/pull/88379) ([Azat Khuzhin](https://github.com/azat)). +* Улучшена производительность функций `tokens`, `hasAllTokens`, `hasAnyTokens`. [#88416](https://github.com/ClickHouse/ClickHouse/pull/88416) ([Anton Popov](https://github.com/CurtizJ)). * Сделан inline `AddedColumns::appendFromBlock` для небольшого улучшения производительности JOIN в некоторых случаях. [#88455](https://github.com/ClickHouse/ClickHouse/pull/88455) ([Nikita Taranov](https://github.com/nickitat)). -* Автодополнение на стороне клиента становится быстрее и последовательнее при использовании `system.completions` вместо выполнения множества запросов к системным таблицам. [#84694](https://github.com/ClickHouse/ClickHouse/pull/84694) ([|2ustam](https://github.com/RuS2m)). -* Добавлен новый параметр текстового индекса `dictionary_block_frontcoding_compression` для управления сжатием словаря. По умолчанию он включён, и используется сжатие типа `front-coding`. [#87175](https://github.com/ClickHouse/ClickHouse/pull/87175) ([Elmi Ahmadov](https://github.com/ahmadov)). -* Данные со всех потоков сжимаются перед вставкой в материализованные представления в соответствии с настройками `min_insert_block_size_rows_for_materialized_views` и `min_insert_block_size_bytes_for_materialized_views`. Ранее, если `parallel_view_processing` был включен, каждый поток, выполняющий вставку в конкретное материализованное представление, выполнял сжатие вставки независимо, что могло приводить к увеличению числа создаваемых частей. [#87280](https://github.com/ClickHouse/ClickHouse/pull/87280) ([Antonio Andelic](https://github.com/antonio2368)). -* Добавлена настройка `temporary_files_buffer_size` для управления размером буфера при записи во временные файлы. * Оптимизировано потребление памяти операцией `scatter` (используется, например, в grace hash join) для столбцов `LowCardinality`. [#88237](https://github.com/ClickHouse/ClickHouse/pull/88237) ([Vladimir Cherkasov](https://github.com/vdimir)). -* Добавлена поддержка прямого чтения текстовых индексов при использовании параллельных реплик. Улучшена производительность чтения текстовых индексов из объектного хранилища. [#88262](https://github.com/ClickHouse/ClickHouse/pull/88262) ([Anton Popov](https://github.com/CurtizJ)). -* Запросы к таблицам из каталогов Data Lakes теперь используют параллельные реплики для распределённой обработки. [#88273](https://github.com/ClickHouse/ClickHouse/pull/88273) ([scanhex12](https://github.com/scanhex12)). -* Внутренняя эвристика для настройки алгоритма фоновых слияний с именем "to_remove_small_parts_at_right" будет выполняться до вычисления оценки диапазона слияния. Ранее селектор слияний выбирал широкое слияние, а затем отфильтровывал его суффикс. Исправления: [#85374](https://github.com/ClickHouse/ClickHouse/issues/85374). [#88736](https://github.com/ClickHouse/ClickHouse/pull/88736) ([Mikhail Artemenko](https://github.com/Michicosun)). - - - +* Автодополнение на стороне клиента работает быстрее и более последовательно при использовании `system.completions`, чем при выполнении нескольких запросов к системным таблицам. [#84694](https://github.com/ClickHouse/ClickHouse/pull/84694) ([|2ustam](https://github.com/RuS2m)). +* Добавлен новый параметр текстового индекса `dictionary_block_frontcoding_compression`, управляющий сжатием словаря. По умолчанию он включен и использует сжатие `front-coding`. [#87175](https://github.com/ClickHouse/ClickHouse/pull/87175) ([Elmi Ahmadov](https://github.com/ahmadov)). +* Объединяет данные из всех потоков перед вставкой в материализованные представления в зависимости от настроек `min_insert_block_size_rows_for_materialized_views` и `min_insert_block_size_bytes_for_materialized_views`. Ранее, если `parallel_view_processing` был включен, каждый поток, выполняющий вставку в конкретное материализованное представление, выполнял объединение данных при вставке независимо, что могло приводить к увеличению количества генерируемых частей. [#87280](https://github.com/ClickHouse/ClickHouse/pull/87280) ([Antonio Andelic](https://github.com/antonio2368)). +* Добавлена настройка `temporary_files_buffer_size` для управления размером буфера при записи временных файлов. * Оптимизировано потребление памяти операцией `scatter` (используется, например, в grace hash join) для столбцов типа `LowCardinality`. [#88237](https://github.com/ClickHouse/ClickHouse/pull/88237) ([Vladimir Cherkasov](https://github.com/vdimir)). +* Добавлена поддержка прямого чтения из текстовых индексов при использовании параллельных реплик. Улучшена производительность чтения текстовых индексов из объектного хранилища. [#88262](https://github.com/ClickHouse/ClickHouse/pull/88262) ([Anton Popov](https://github.com/CurtizJ)). +* Запросы, использующие таблицы из каталогов Data Lakes, будут применять параллельные реплики для распределённой обработки. [#88273](https://github.com/ClickHouse/ClickHouse/pull/88273) ([scanhex12](https://github.com/scanhex12)). +* Внутренняя эвристика настройки алгоритма фоновых слияний с именем «to_remove_small_parts_at_right» теперь выполняется перед вычислением оценки диапазона слияния. Ранее селектор слияний выбирал широкое слияние, а затем отфильтровывал его суффикс. Исправления: [#85374](https://github.com/ClickHouse/ClickHouse/issues/85374). [#88736](https://github.com/ClickHouse/ClickHouse/pull/88736) ([Mikhail Artemenko](https://github.com/Michicosun)). +#### Улучшения -#### Улучшение - -* Теперь функция `generateSerialID` поддерживает неконстантный аргумент для имени серии. Закрывает [#83750](https://github.com/ClickHouse/ClickHouse/issues/83750). [#88270](https://github.com/ClickHouse/ClickHouse/pull/88270) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Теперь функция `generateSerialID` поддерживает неконстантный аргумент с именем серии. Закрыта задача [#83750](https://github.com/ClickHouse/ClickHouse/issues/83750). [#88270](https://github.com/ClickHouse/ClickHouse/pull/88270) ([Alexey Milovidov](https://github.com/alexey-milovidov)). * Добавлен необязательный параметр `start_value` в функцию `generateSerialID` для задания пользовательских начальных значений для новых последовательностей. [#88085](https://github.com/ClickHouse/ClickHouse/pull/88085) ([Manuel](https://github.com/raimannma)). * Добавлена опция `--semicolons_inline` в `clickhouse-format` для форматирования запросов так, чтобы точки с запятой ставились в конце последней строки, а не на новой строке. [#88018](https://github.com/ClickHouse/ClickHouse/pull/88018) ([Jan Rada](https://github.com/ZelvaMan)). -* Разрешить настройку троттлинга на уровне сервера, даже когда конфигурация переопределена в Keeper. Закрывает [#73964](https://github.com/ClickHouse/ClickHouse/issues/73964). [#74066](https://github.com/ClickHouse/ClickHouse/pull/74066) ([JIaQi](https://github.com/JiaQiTang98)). -* `mannWhitneyUTest` больше не выбрасывает исключение, когда обе выборки содержат только одинаковые значения. Теперь возвращает корректный результат, соответствующий поведению SciPy. Закрывает: [#79814](https://github.com/ClickHouse/ClickHouse/issues/79814). [#80009](https://github.com/ClickHouse/ClickHouse/pull/80009) ([DeanNeaht](https://github.com/DeanNeaht)). -* Транзакция перезаписи диска объектного хранилища удаляет предыдущие блобы в удалённом хранилище, если транзакция метаданных зафиксирована. [#81787](https://github.com/ClickHouse/ClickHouse/pull/81787) ([Sema Checherinda](https://github.com/CheSema)). -* Исправлен оптимизационный проход для избыточного выражения равенства в случаях, когда `LowCardinality` результирующего типа отличается до и после оптимизации. [#82651](https://github.com/ClickHouse/ClickHouse/pull/82651) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* Когда HTTP-клиенты устанавливают заголовок `X-ClickHouse-100-Continue: defer` в дополнение к `Expect: 100-continue`, ClickHouse не отправляет клиенту ответ `100 Continue` до тех пор, пока не пройдет проверка квоты, что предотвращает напрасную трату сетевой полосы пропускания при передаче тел запросов, которые в любом случае будут отброшены. Это актуально для запросов INSERT, когда сам запрос может быть передан в строке URL-запроса, а данные — в теле запроса. Прерывание запроса без отправки полного тела предотвращает повторное использование соединения с HTTP/1.1, но дополнительная задержка, связанная с открытием новых соединений, обычно несущественна по сравнению с общей длительностью выполнения INSERT при больших объемах данных. [#84304](https://github.com/ClickHouse/ClickHouse/pull/84304) ([c-end](https://github.com/c-end)). -* Скрывать учетные данные доступа к S3 в логах при использовании DATABASE ENGINE = Backup с хранилищем S3. [#85336](https://github.com/ClickHouse/ClickHouse/pull/85336) ([Kenny Sun](https://github.com/hwabis)). -* Сделать оптимизации плана запроса видимыми для входного подплана коррелированного подзапроса за счет откладывания его материализации. Часть [#79890](https://github.com/ClickHouse/ClickHouse/issues/79890). [#85455](https://github.com/ClickHouse/ClickHouse/pull/85455) ([Dmitry Novik](https://github.com/novikd)). +* Добавлена возможность настройки ограничения нагрузки на уровне сервера при переопределении конфигурации в Keeper. Закрывает [#73964](https://github.com/ClickHouse/ClickHouse/issues/73964). [#74066](https://github.com/ClickHouse/ClickHouse/pull/74066) ([JIaQi](https://github.com/JiaQiTang98)). +* `mannWhitneyUTest` больше не выбрасывает исключение, когда обе выборки содержат только идентичные значения. Теперь он возвращает корректный результат, соответствующий SciPy. Закрывает: [#79814](https://github.com/ClickHouse/ClickHouse/issues/79814). [#80009](https://github.com/ClickHouse/ClickHouse/pull/80009) ([DeanNeaht](https://github.com/DeanNeaht)). +* Транзакция переписывания для объектного хранилища диска удаляет предыдущие блобы в удалённом хранилище, если транзакция метаданных зафиксирована. [#81787](https://github.com/ClickHouse/ClickHouse/pull/81787) ([Sema Checherinda](https://github.com/CheSema)). +* Исправлен этап оптимизации для избыточного выражения сравнения на равенство, когда `LowCardinality` результирующего типа отличается до и после оптимизации. [#82651](https://github.com/ClickHouse/ClickHouse/pull/82651) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* Когда HTTP‑клиенты устанавливают заголовок `X-ClickHouse-100-Continue: defer` в дополнение к `Expect: 100-continue`, ClickHouse не отправляет клиенту ответ `100 Continue` до прохождения проверки квоты, что предотвращает лишний расход сетевой пропускной способности на передачу тел запросов, которые всё равно будут отброшены. Это актуально для запросов INSERT, где сам запрос может передаваться в строке запроса URL, а данные — в теле запроса. Прерывание запроса без отправки полного тела препятствует повторному использованию соединения по HTTP/1.1, но дополнительная задержка, связанная с установкой новых соединений, обычно несущественна по сравнению с общей длительностью выполнения INSERT при работе с большими объёмами данных. [#84304](https://github.com/ClickHouse/ClickHouse/pull/84304) ([c-end](https://github.com/c-end)). +* Маскировать учетные данные S3 в журналах при использовании DATABASE ENGINE = Backup с хранилищем S3. [#85336](https://github.com/ClickHouse/ClickHouse/pull/85336) ([Kenny Sun](https://github.com/hwabis)). +* Сделать оптимизации плана запроса видимыми для входного подплана коррелированного подзапроса за счёт отсрочки его материализации. Часть [#79890](https://github.com/ClickHouse/ClickHouse/issues/79890). [#85455](https://github.com/ClickHouse/ClickHouse/pull/85455) ([Dmitry Novik](https://github.com/novikd)). * Изменение для SYSTEM DROP DATABASE REPLICA: - When dropping with database or drop the whole replica: it also drops replica for each table of the database - If 'WITH TABLES' is provided, drop replica for each storage - Otherwise, the logic is unchanged, only drop replica on the databases - When dropping a database replica with the keeper path: - If 'WITH TABLES' is provided: - Restore the database as Atomic - Restore RMT tables from statement in Keeper - Drop the database (restored tables are also dropped) - Otherwise, only drop replica on the provided keeper path. [#85637](https://github.com/ClickHouse/ClickHouse/pull/85637) ([Tuan Pham Anh](https://github.com/tuanpach)). -* Исправлено некорректное форматирование TTL при использовании функции `materialize`. Закрывает [#82828](https://github.com/ClickHouse/ClickHouse/issues/82828). [#85749](https://github.com/ClickHouse/ClickHouse/pull/85749) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Состояние таблицы Iceberg больше не хранится в объекте хранилища. Это должно обеспечить корректную работу Iceberg в ClickHouse при выполнении параллельных запросов. [#86062](https://github.com/ClickHouse/ClickHouse/pull/86062) ([Daniil Ivanik](https://github.com/divanik)). -* Сделать режим блокировки бакета в упорядоченном режиме S3Queue постоянным, аналогично узлам обработки при `use_persistent_processing_nodes = 1`. Добавить в тесты имитацию сбоев Keeper. [#86628](https://github.com/ClickHouse/ClickHouse/pull/86628) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Выводить подсказки, если пользователь допускает опечатку в имени формата. Закрывает [#86761](https://github.com/ClickHouse/ClickHouse/issues/86761). [#87092](https://github.com/ClickHouse/ClickHouse/pull/87092) ([flynn](https://github.com/ucasfl)). -* Теперь удалённые реплики пропускают анализ индексов, если нет проекций. [#87096](https://github.com/ClickHouse/ClickHouse/pull/87096) ([zoomxi](https://github.com/zoomxi)). -* Добавлена возможность отключить кодировку UTF-8 для таблицы YTsaurus. [#87150](https://github.com/ClickHouse/ClickHouse/pull/87150) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). -* По умолчанию отключена настройка `s3_slow_all_threads_after_retryable_error`. [#87198](https://github.com/ClickHouse/ClickHouse/pull/87198) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). +* Исправлено непоследовательное форматирование TTL, когда в нём используется функция `materialize`. Закрывает [#82828](https://github.com/ClickHouse/ClickHouse/issues/82828). [#85749](https://github.com/ClickHouse/ClickHouse/pull/85749) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Состояние таблицы Iceberg больше не хранится в объекте хранилища. Это должно позволить использовать Iceberg в ClickHouse с конкурентными запросами. [#86062](https://github.com/ClickHouse/ClickHouse/pull/86062) ([Daniil Ivanik](https://github.com/divanik)). +* Сделать блокировку бакета в упорядоченном режиме S3Queue постоянной, аналогично обрабатывающим узлам при `use_persistent_processing_nodes = 1`. Добавить инъекцию отказов Keeper в тестах. [#86628](https://github.com/ClickHouse/ClickHouse/pull/86628) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Выводить подсказки при опечатках в названии формата. Закрывает [#86761](https://github.com/ClickHouse/ClickHouse/issues/86761). [#87092](https://github.com/ClickHouse/ClickHouse/pull/87092) ([flynn](https://github.com/ucasfl)). +* Удалённые реплики будут пропускать анализ индексов, если нет проекций. [#87096](https://github.com/ClickHouse/ClickHouse/pull/87096) ([zoomxi](https://github.com/zoomxi)). +* Добавлена возможность отключать кодировку UTF-8 для таблицы ytsaurus. [#87150](https://github.com/ClickHouse/ClickHouse/pull/87150) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). +* Отключить параметр `s3_slow_all_threads_after_retryable_error` по умолчанию. [#87198](https://github.com/ClickHouse/ClickHouse/pull/87198) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). * Переименована табличная функция `arrowflight` в `arrowFlight`. [#87249](https://github.com/ClickHouse/ClickHouse/pull/87249) ([Vitaly Baranov](https://github.com/vitlibar)). -* Обновлён `clickhouse-benchmark`, чтобы он поддерживал использование `-` вместо `_` в флагах командной строки. [#87251](https://github.com/ClickHouse/ClickHouse/pull/87251) ([Ahmed Gouda](https://github.com/0xgouda)). -* Сброс в `system.crash_log` при обработке сигналов сделан синхронным. [#87253](https://github.com/ClickHouse/ClickHouse/pull/87253) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). -* Добавлена настройка `inject_random_order_for_select_without_order_by`, которая вставляет `ORDER BY rand()` в верхнеуровневые запросы `SELECT` без предложения `ORDER BY`. [#87261](https://github.com/ClickHouse/ClickHouse/pull/87261) ([Rui Zhang](https://github.com/zhangruiddn)). -* Улучшено сообщение об ошибке в `joinGet`, которое теперь корректно сообщает, что количество `join_keys` не совпадает с количеством `right_table_keys`. [#87279](https://github.com/ClickHouse/ClickHouse/pull/87279) ([Isak Ellmer](https://github.com/spinojara)). -* Добавлена возможность проверять структуру stat произвольного узла Keeper при выполнении транзакции записи. Это может помочь при обнаружении проблемы ABA. [#87282](https://github.com/ClickHouse/ClickHouse/pull/87282) ([Mikhail Artemenko](https://github.com/Michicosun)). -* Перенаправлять тяжёлые запросы YTsaurus на тяжёлые прокси-серверы. [#87342](https://github.com/ClickHouse/ClickHouse/pull/87342) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). -* Исправляет откаты операций unlink/rename/removeRecursive/removeDirectory/и т. д., а также счётчики жёстких ссылок при любых возможных нагрузках для метаданных из дисковых транзакций и упрощает интерфейсы, делая их более универсальными, чтобы их можно было повторно использовать в других хранилищах метаданных. [#87358](https://github.com/ClickHouse/ClickHouse/pull/87358) ([Mikhail Artemenko](https://github.com/Michicosun)). +* Обновлён `clickhouse-benchmark`, чтобы принимать `-` вместо `_` в своих CLI-флагах. [#87251](https://github.com/ClickHouse/ClickHouse/pull/87251) ([Ahmed Gouda](https://github.com/0xgouda)). +* Сделан синхронным сброс в `system.crash_log` при обработке сигналов. [#87253](https://github.com/ClickHouse/ClickHouse/pull/87253) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). +* Добавлена настройка `inject_random_order_for_select_without_order_by`, которая автоматически добавляет `ORDER BY rand()` в запросы `SELECT` на верхнем уровне без предложения `ORDER BY`. [#87261](https://github.com/ClickHouse/ClickHouse/pull/87261) ([Rui Zhang](https://github.com/zhangruiddn)). +* Улучшено сообщение об ошибке в `joinGet`, чтобы оно корректно указывало, что количество `join_keys` не совпадает с количеством `right_table_keys`. [#87279](https://github.com/ClickHouse/ClickHouse/pull/87279) ([Isak Ellmer](https://github.com/spinojara)). +* Добавлена возможность проверять статистику произвольного узла Keeper во время транзакции записи. Это может помочь в обнаружении проблемы типа ABA. [#87282](https://github.com/ClickHouse/ClickHouse/pull/87282) ([Mikhail Artemenko](https://github.com/Michicosun)). +* Перенаправлять ресурсоёмкие запросы ytsaurus на тяжёлые прокси. [#87342](https://github.com/ClickHouse/ClickHouse/pull/87342) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). +* Исправлены откаты операций unlink/rename/removeRecursive/removeDirectory и т. п., а также подсчёт количества жёстких ссылок при любых вариантах нагрузки на метаданные в дисковых транзакциях, и упрощены интерфейсы, сделав их более универсальными, чтобы их можно было повторно использовать в других хранилищах метаданных. [#87358](https://github.com/ClickHouse/ClickHouse/pull/87358) ([Mikhail Artemenko](https://github.com/Michicosun)). * Добавлен параметр конфигурации `keeper_server.tcp_nodelay`, который позволяет отключить `TCP_NODELAY` для Keeper. [#87363](https://github.com/ClickHouse/ClickHouse/pull/87363) (Copilot). -* Добавлена поддержка `--connection` в `clickhouse-benchmarks`. Как и в `clickhouse-client`, вы можете указать предопределённые соединения в клиентском `config.xml`/`config.yaml` в секции `connections_credentials`, чтобы не указывать имя пользователя и пароль явным образом через аргументы командной строки. Добавлена поддержка `--accept-invalid-certificate` в `clickhouse-benchmark`. [#87370](https://github.com/ClickHouse/ClickHouse/pull/87370) ([Azat Khuzhin](https://github.com/azat)). -* Теперь параметр `max_insert_threads` будет применяться к таблицам Iceberg. [#87407](https://github.com/ClickHouse/ClickHouse/pull/87407) ([alesapin](https://github.com/alesapin)). -* Добавлены гистограммные и многомерные метрики в `PrometheusMetricsWriter`. Таким образом, обработчик `PrometheusRequestHandler` будет содержать все необходимые метрики и может использоваться для надежного сбора метрик с низкими накладными расходами в облачной среде. [#87521](https://github.com/ClickHouse/ClickHouse/pull/87521) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). -* Функция `hasToken` теперь возвращает ноль совпадений для пустого токена (а ранее в таком случае выбрасывалось исключение). [#87564](https://github.com/ClickHouse/ClickHouse/pull/87564) ([Jimmy Aguilar Mena](https://github.com/Ergus)). -* Добавлена поддержка текстового индекса для значений типов `Array` и `Map` (`mapKeys` и `mapValues`). Поддерживаются функции `mapContainsKey` и `has`. [#87602](https://github.com/ClickHouse/ClickHouse/pull/87602) ([Elmi Ahmadov](https://github.com/ahmadov)). -* Добавлена новая метрика `ZooKeeperSessionExpired`, указывающая число истекших глобальных сессий ZooKeeper. [#87613](https://github.com/ClickHouse/ClickHouse/pull/87613) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). -* Используйте клиент хранилища S3 со специальными настройками для резервного копирования (например, backup_slow_all_threads_after_retryable_s3_error) для нативного копирования на стороне сервера в целевое хранилище бэкапа. Параметр s3_slow_all_threads_after_retryable_error объявлен устаревшим. [#87660](https://github.com/ClickHouse/ClickHouse/pull/87660) ([Julia Kartseva](https://github.com/jkartseva)). -* Исправлена некорректная обработка настроек `max_joined_block_size_rows` и `max_joined_block_size_bytes` при сериализации плана запроса с экспериментальной функцией `make_distributed_plan`. [#87675](https://github.com/ClickHouse/ClickHouse/pull/87675) ([Vladimir Cherkasov](https://github.com/vdimir)). -* Настройка `enable_http_compression` теперь включена по умолчанию. Это означает, что если клиент поддерживает HTTP-сжатие, сервер будет его использовать. Однако это изменение имеет некоторые недостатки. Клиент может запросить тяжёлый метод сжатия, такой как `bzip2`, что неразумно и увеличит потребление ресурсов сервером (но это будет заметно только при передаче больших результатов). Клиент может запросить `gzip`, что не так уж плохо, но менее эффективно по сравнению с `zstd`. Исправление закрывает [#71591](https://github.com/ClickHouse/ClickHouse/issues/71591). [#87703](https://github.com/ClickHouse/ClickHouse/pull/87703) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* В `system.server_settings` добавлена новая запись `keeper_hosts`, в которой содержится список хостов [Zoo]Keeper, к которым ClickHouse может подключаться. [#87718](https://github.com/ClickHouse/ClickHouse/pull/87718) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). -* Добавьте значения `from` и `to` в системные дашборды, чтобы упростить проведение ретроспективных расследований. [#87823](https://github.com/ClickHouse/ClickHouse/pull/87823) ([Mikhail f. Shiryaev](https://github.com/Felixoid)). -* Добавлена дополнительная информация для отслеживания производительности в запросах SELECT к Iceberg. [#87903](https://github.com/ClickHouse/ClickHouse/pull/87903) ([Daniil Ivanik](https://github.com/divanik)). -* Улучшение файлового кеша: совместное использование итератора приоритета кеша потоками, одновременно резервирующими место в кеше. [#87914](https://github.com/ClickHouse/ClickHouse/pull/87914) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Добавлена возможность ограничивать запросы для `Keeper` (настройка `max_request_size`, аналогичная `jute.maxbuffer` для `ZooKeeper`, по умолчанию — `OFF` для обратной совместимости; в следующих релизах значение будет изменено). [#87952](https://github.com/ClickHouse/ClickHouse/pull/87952) ([Azat Khuzhin](https://github.com/azat)). -* Изменить `clickhouse-benchmark`, чтобы он по умолчанию не включал трассировки стека в сообщения об ошибках. [#87954](https://github.com/ClickHouse/ClickHouse/pull/87954) ([Ahmed Gouda](https://github.com/0xgouda)). -* Избегайте использования асинхронной загрузки меток с использованием пула потоков (`load_marks_asynchronously=1`), когда метки находятся в кэше (так как пул может быть перегружен, и запросы будут платить штраф по производительности, даже если метки уже находятся в кэше). [#87967](https://github.com/ClickHouse/ClickHouse/pull/87967) ([Azat Khuzhin](https://github.com/azat)). -* Ytsaurus: разрешить создание таблиц, табличных функций и словарей с подмножеством столбцов. [#87982](https://github.com/ClickHouse/ClickHouse/pull/87982) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). -* Теперь `system.zookeeper_connection_log` включён по умолчанию, и его можно использовать для получения информации о сеансах Keeper. [#88011](https://github.com/ClickHouse/ClickHouse/pull/88011) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). -* Унифицировано поведение TCP и HTTP при передаче дублирующихся внешних таблиц. HTTP позволяет передавать временную таблицу несколько раз. [#88032](https://github.com/ClickHouse/ClickHouse/pull/88032) ([Sema Checherinda](https://github.com/CheSema)). -* Удалены кастомные MemoryPools для чтения Arrow/ORC/Parquet. Этот компонент, по-видимому, больше не требуется после [#84082](https://github.com/ClickHouse/ClickHouse/pull/84082), поскольку теперь мы в любом случае отслеживаем все выделения памяти. [#88035](https://github.com/ClickHouse/ClickHouse/pull/88035) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). -* Разрешено создавать базу данных `Replicated` без аргументов. [#88044](https://github.com/ClickHouse/ClickHouse/pull/88044) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). -* `clickhouse-keeper-client`: Добавлена поддержка подключения к TLS-порту clickhouse-keeper, имена флагов сохранены такими же, как в clickhouse-client. [#88065](https://github.com/ClickHouse/ClickHouse/pull/88065) ([Pradeep Chhetri](https://github.com/chhetripradeep)). -* Добавлено новое событие профилирования для отслеживания числа отклонений фонового слияния из-за превышения лимитов памяти. [#88084](https://github.com/ClickHouse/ClickHouse/pull/88084) ([Grant Holly](https://github.com/grantholly-clickhouse)). -* Включает анализатор для проверки выражений значений по умолчанию для столбцов в операторах CREATE/ALTER TABLE. [#88087](https://github.com/ClickHouse/ClickHouse/pull/88087) ([Max Justus Spransy](https://github.com/maxjustus)). +* Добавлена поддержка `--connection` в `clickhouse-benchmarks`. Он работает так же, как в `clickhouse-client`: вы можете указать предопределённые подключения в клиентском `config.xml`/`config.yaml` в разделе `connections_credentials`, чтобы не указывать явно пользователя и пароль через аргументы командной строки. Добавлена поддержка `--accept-invalid-certificate` в `clickhouse-benchmark`. [#87370](https://github.com/ClickHouse/ClickHouse/pull/87370) ([Azat Khuzhin](https://github.com/azat)). +* Теперь параметр `max_insert_threads` будет применяться и к таблицам Iceberg. [#87407](https://github.com/ClickHouse/ClickHouse/pull/87407) ([alesapin](https://github.com/alesapin)). +* Добавлены гистограммы и метрики с измерениями в `PrometheusMetricsWriter`. Таким образом, обработчик `PrometheusRequestHandler` будет обладать всеми необходимыми метриками и сможет использоваться для надежного сбора метрик в облаке с низкими накладными расходами. [#87521](https://github.com/ClickHouse/ClickHouse/pull/87521) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). +* Функция `hasToken` теперь возвращает 0 совпадений для пустого токена (тогда как раньше в этом случае генерировалось исключение). [#87564](https://github.com/ClickHouse/ClickHouse/pull/87564) ([Jimmy Aguilar Mena](https://github.com/Ergus)). +* Добавлена поддержка текстовых индексов для значений `Array` и `Map` (`mapKeys` и `mapValues`). Теперь поддерживаются функции `mapContainsKey` и `has`. [#87602](https://github.com/ClickHouse/ClickHouse/pull/87602) ([Elmi Ahmadov](https://github.com/ahmadov)). +* Добавлена новая метрика `ZooKeeperSessionExpired`, показывающая число истекших глобальных сессий ZooKeeper. [#87613](https://github.com/ClickHouse/ClickHouse/pull/87613) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). +* Используйте клиент хранилища S3 с настройками, специфичными для резервного копирования (например, backup_slow_all_threads_after_retryable_s3_error), для серверного (нативного) копирования в целевое размещение резервной копии. Настройка s3_slow_all_threads_after_retryable_error объявлена устаревшей. [#87660](https://github.com/ClickHouse/ClickHouse/pull/87660) ([Julia Kartseva](https://github.com/jkartseva)). +* Исправлена некорректная обработка настроек `max_joined_block_size_rows` и `max_joined_block_size_bytes` при сериализации плана запроса с экспериментальной настройкой `make_distributed_plan`. [#87675](https://github.com/ClickHouse/ClickHouse/pull/87675) ([Vladimir Cherkasov](https://github.com/vdimir)). +* Настройка `enable_http_compression` теперь включена по умолчанию. Это означает, что если клиент поддерживает HTTP‑сжатие, сервер будет его использовать. Однако у этого изменения есть определённые недостатки. Клиент может запросить «тяжёлый» метод сжатия, такой как `bzip2`, что нецелесообразно и приведёт к увеличению потребления ресурсов сервера (но это будет заметно только при передаче больших результатов). Клиент может запросить `gzip`, что не так уж плохо, но неоптимально по сравнению с `zstd`. Закрывает [#71591](https://github.com/ClickHouse/ClickHouse/issues/71591). [#87703](https://github.com/ClickHouse/ClickHouse/pull/87703) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* В таблицу `system.server_settings` добавлен новый параметр `keeper_hosts`, который содержит список хостов [Zoo]Keeper, к которым ClickHouse может подключаться. [#87718](https://github.com/ClickHouse/ClickHouse/pull/87718) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). +* Добавлены значения `from` и `to` в системные дашборды для упрощения анализа исторических данных. [#87823](https://github.com/ClickHouse/ClickHouse/pull/87823) ([Mikhail f. Shiryaev](https://github.com/Felixoid)). +* Добавлена дополнительная информация для мониторинга производительности в запросах Iceberg SELECT. [#87903](https://github.com/ClickHouse/ClickHouse/pull/87903) ([Daniil Ivanik](https://github.com/divanik)). +* Улучшение файлового кэша: повторное использование итератора приоритета кэша между потоками, одновременно резервирующими место в кэше. [#87914](https://github.com/ClickHouse/ClickHouse/pull/87914) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Добавлена возможность ограничивать размер запросов для `Keeper` (настройка `max_request_size`, аналогична `jute.maxbuffer` для `ZooKeeper`, по умолчанию отключена для сохранения обратной совместимости, будет включена в следующих релизах). [#87952](https://github.com/ClickHouse/ClickHouse/pull/87952) ([Azat Khuzhin](https://github.com/azat)). +* Изменить `clickhouse-benchmark`, чтобы по умолчанию он не добавлял трассировки стека в сообщения об ошибках. [#87954](https://github.com/ClickHouse/ClickHouse/pull/87954) ([Ahmed Gouda](https://github.com/0xgouda)). +* Избегайте использования асинхронной загрузки меток через пул потоков (`load_marks_asynchronously=1`), когда метки находятся в кэше (поскольку пул может быть перегружен, и запросы понесут накладные расходы даже в случае, если метки уже есть в кэше). [#87967](https://github.com/ClickHouse/ClickHouse/pull/87967) ([Azat Khuzhin](https://github.com/azat)). +* Ytsaurus: добавлена возможность создавать таблицы/табличные функции/словари с подмножеством столбцов. [#87982](https://github.com/ClickHouse/ClickHouse/pull/87982) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). +* Теперь таблица `system.zookeeper_connection_log` включена по умолчанию, и её можно использовать для получения информации о сессиях Keeper. [#88011](https://github.com/ClickHouse/ClickHouse/pull/88011) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). +* Согласовать поведение TCP и HTTP при передаче дублирующихся внешних таблиц. HTTP позволяет передавать временную таблицу несколько раз. [#88032](https://github.com/ClickHouse/ClickHouse/pull/88032) ([Sema Checherinda](https://github.com/CheSema)). +* Удалены пользовательские MemoryPools для чтения Arrow/ORC/Parquet. Этот компонент, по-видимому, стал ненужен после [#84082](https://github.com/ClickHouse/ClickHouse/pull/84082), так как теперь мы в любом случае отслеживаем все выделения памяти. [#88035](https://github.com/ClickHouse/ClickHouse/pull/88035) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). +* Добавлена возможность создавать базу данных `Replicated` без аргументов. [#88044](https://github.com/ClickHouse/ClickHouse/pull/88044) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +* `clickhouse-keeper-client`: Добавлена поддержка подключения к TLS-порту clickhouse-keeper, имена флагов оставлены такими же, как в clickhouse-client. [#88065](https://github.com/ClickHouse/ClickHouse/pull/88065) ([Pradeep Chhetri](https://github.com/chhetripradeep)). +* Добавлено новое событие профилирования для отслеживания количества отказов в выполнении фонового слияния из-за превышения лимита памяти. [#88084](https://github.com/ClickHouse/ClickHouse/pull/88084) ([Grant Holly](https://github.com/grantholly-clickhouse)). +* Включает анализатор для проверки выражений значений по умолчанию столбцов в операторах CREATE/ALTER TABLE. [#88087](https://github.com/ClickHouse/ClickHouse/pull/88087) ([Max Justus Spransy](https://github.com/maxjustus)). * Внутреннее улучшение планировщика запросов: использование JoinStepLogical для `CROSS JOIN`. [#88151](https://github.com/ClickHouse/ClickHouse/pull/88151) ([Vladimir Cherkasov](https://github.com/vdimir)). -* Добавлены алиасы для функций `hasAnyTokens` (`hasAnyToken`) и `hasAllTokens` (`hasAllToken`). [#88162](https://github.com/ClickHouse/ClickHouse/pull/88162) ([George Larionov](https://github.com/george-larionov)). -* По умолчанию включён глобальный профилировщик сэмплирования (то есть даже для серверных потоков, не связанных с запросами): собирать стеки вызовов всех потоков каждые 10 секунд по процессорному и реальному времени. [#88209](https://github.com/ClickHouse/ClickHouse/pull/88209) ([Alexander Tokmakov](https://github.com/tavplubix)). -* Обновить Azure SDK, чтобы включить исправление для 'Content-Length', проявляющееся при операциях копирования и создания контейнеров. [#88278](https://github.com/ClickHouse/ClickHouse/pull/88278) ([Smita Kulkarni](https://github.com/SmitaRKulkarni)). -* Функция `lag` сделана нечувствительной к регистру для совместимости с MySQL. [#88322](https://github.com/ClickHouse/ClickHouse/pull/88322) ([Lonny Kapelushnik](https://github.com/lonnylot)). -* Разрешен запуск `clickhouse-local` из каталога `clickhouse-server`. В предыдущих версиях это приводило к ошибке `Cannot parse UUID: .`. Теперь можно запускать `clickhouse-local` и работать с базами данных сервера без запуска самого сервера. [#88383](https://github.com/ClickHouse/ClickHouse/pull/88383) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Добавлен параметр конфигурации `keeper_server.coordination_settings.check_node_acl_on_remove`. Если он включен, перед каждым удалением узла будут проверяться ACL как самого узла, так и родительского. В противном случае будет проверяться только ACL родительского узла. [#88513](https://github.com/ClickHouse/ClickHouse/pull/88513) ([Antonio Andelic](https://github.com/antonio2368)). -* Столбцы `JSON` теперь красиво форматируются при использовании формата `Vertical`. Закрывает [#81794](https://github.com/ClickHouse/ClickHouse/issues/81794). [#88524](https://github.com/ClickHouse/ClickHouse/pull/88524) ([Frank Rosner](https://github.com/FRosner)). -* Файлы `clickhouse-client` (например, историю запросов) следует хранить в местах, описанных спецификацией [XDG Base Directories](https://specifications.freedesktop.org/basedir-spec/latest/index.html), вместо корня домашнего каталога. `~/.clickhouse-client-history` по-прежнему будет использоваться, если этот файл уже существует. [#88538](https://github.com/ClickHouse/ClickHouse/pull/88538) ([Konstantин Богданов](https://github.com/thevar1able)). -* Исправлена утечка памяти из-за `GLOBAL IN` ([https://github.com/ClickHouse/ClickHouse/issues/88615](https://github.com/ClickHouse/ClickHouse/issues/88615)). [#88617](https://github.com/ClickHouse/ClickHouse/pull/88617) ([pranavmehta94](https://github.com/pranavmehta94)). +* Добавлены псевдонимы для функций `hasAnyTokens` (`hasAnyToken`) и `hasAllTokens` (`hasAllToken`). [#88162](https://github.com/ClickHouse/ClickHouse/pull/88162) ([George Larionov](https://github.com/george-larionov)). +* Включен глобальный профилировщик с выборочным отслеживанием (то есть он работает даже для серверных потоков, не связанных с запросами) по умолчанию: он собирает трассировки стека всех потоков каждые 10 секунд процессорного и реального времени. [#88209](https://github.com/ClickHouse/ClickHouse/pull/88209) ([Alexander Tokmakov](https://github.com/tavplubix)). +* Обновлён Azure SDK, чтобы включить исправление для `Content-Length`, затрагивающее операции копирования и создания контейнеров. [#88278](https://github.com/ClickHouse/ClickHouse/pull/88278) ([Smita Kulkarni](https://github.com/SmitaRKulkarni)). +* Сделана функция `lag` нечувствительной к регистру для совместимости с MySQL. [#88322](https://github.com/ClickHouse/ClickHouse/pull/88322) ([Lonny Kapelushnik](https://github.com/lonnylot)). +* Разрешен запуск `clickhouse-local` из директории `clickhouse-server`. В предыдущих версиях это приводило к ошибке `Cannot parse UUID: .` Теперь можно запускать `clickhouse-local` и работать с базами данных сервера без запуска самого сервера. [#88383](https://github.com/ClickHouse/ClickHouse/pull/88383) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Добавлен конфигурационный параметр `keeper_server.coordination_settings.check_node_acl_on_remove`. Если он включён, перед каждым удалением узла будут проверяться ACL как самого узла, так и родительского узла. В противном случае будет проверяться только ACL родительского узла. [#88513](https://github.com/ClickHouse/ClickHouse/pull/88513) ([Antonio Andelic](https://github.com/antonio2368)). +* Столбцы `JSON` теперь выводятся в удобочитаемом виде при использовании формата `Vertical`. Закрывает [#81794](https://github.com/ClickHouse/ClickHouse/issues/81794). [#88524](https://github.com/ClickHouse/ClickHouse/pull/88524) ([Frank Rosner](https://github.com/FRosner)). +* Хранить файлы `clickhouse-client` (например, историю запросов) в расположениях, определённых спецификацией [XDG Base Directories](https://specifications.freedesktop.org/basedir-spec/latest/index.html), вместо корня домашнего каталога. `~/.clickhouse-client-history` по‑прежнему будет использоваться, если этот файл уже существует. [#88538](https://github.com/ClickHouse/ClickHouse/pull/88538) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* Исправлена утечка памяти, обусловленная оператором `GLOBAL IN` ([https://github.com/ClickHouse/ClickHouse/issues/88615](https://github.com/ClickHouse/ClickHouse/issues/88615)). [#88617](https://github.com/ClickHouse/ClickHouse/pull/88617) ([pranavmehta94](https://github.com/pranavmehta94)). * Добавлена перегрузка функций hasAny/hasAllTokens, принимающая строковый аргумент. [#88679](https://github.com/ClickHouse/ClickHouse/pull/88679) ([George Larionov](https://github.com/george-larionov)). * Добавлен шаг в postinstall-скрипт для `clickhouse-keeper`, который включает его автозапуск при загрузке системы. [#88746](https://github.com/ClickHouse/ClickHouse/pull/88746) ([YenchangChan](https://github.com/YenchangChan)). -* Учетные данные в веб-интерфейсе теперь проверяются только при вставке, а не при каждом нажатии клавиши. Это позволяет избежать проблемы с некорректно настроенными серверами LDAP. Закрывает [#85777](https://github.com/ClickHouse/ClickHouse/issues/85777). [#88769](https://github.com/ClickHouse/ClickHouse/pull/88769) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Ограничена длина сообщения об исключении при нарушении ограничения. В предыдущих версиях вы могли получить очень длинное сообщение об исключении при вставке очень длинной строки, и это сообщение в итоге попадало в `query_log`. Закрывает [#87032](https://github.com/ClickHouse/ClickHouse/issues/87032). [#88801](https://github.com/ClickHouse/ClickHouse/pull/88801) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Исправлено получение структуры набора данных с сервера ArrowFlight при создании таблицы. [#87542](https://github.com/ClickHouse/ClickHouse/pull/87542) ([Vitaly Baranov](https://github.com/vitlibar)). - +* Проверка учетных данных в веб-интерфейсе теперь выполняется только при вставке, а не при каждом нажатии клавиши. Это позволяет избежать проблем с некорректно настроенными LDAP-серверами. Исправляет [#85777](https://github.com/ClickHouse/ClickHouse/issues/85777). [#88769](https://github.com/ClickHouse/ClickHouse/pull/88769) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Ограничена длина сообщения об исключении при нарушении ограничения. В предыдущих версиях при вставке слишком длинной строки вы могли получить очень длинное сообщение об исключении, которое в итоге записывалось в `query_log`. Закрывает [#87032](https://github.com/ClickHouse/ClickHouse/issues/87032). [#88801](https://github.com/ClickHouse/ClickHouse/pull/88801) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Исправлено получение структуры набора данных от сервера ArrowFlight при создании таблицы. [#87542](https://github.com/ClickHouse/ClickHouse/pull/87542) ([Vitaly Baranov](https://github.com/vitlibar)). +#### Исправление ошибки (ошибка, заметная пользователю, в официальном стабильном релизе) - - -#### Исправление ошибки (видимая пользователю неисправность в официальном стабильном релизе) - -* Исправлена проблема с GeoParquet, приводившая к ошибкам клиентского протокола. [#84020](https://github.com/ClickHouse/ClickHouse/pull/84020) ([Michael Kolupaev](https://github.com/al13n321)). -* Исправлено разрешение зависящих от хоста функций, таких как shardNum(), в подзапросах на узле-инициаторе. [#84409](https://github.com/ClickHouse/ClickHouse/pull/84409) ([Eduard Karacharov](https://github.com/korowa)). -* Исправлена некорректная обработка дат до эпохи с дробными секундами в различных функциях работы с датой и временем, таких как `parseDateTime64BestEffort`, `change{Year,Month,Day}` и `makeDateTime64`. Ранее дробная часть секунд вычиталась из целых секунд, вместо того чтобы прибавляться к ним. Например, `parseDateTime64BestEffort('1969-01-01 00:00:00.468')` возвращала `1968-12-31 23:59:59.532` вместо `1969-01-01 00:00:00.468`. [#85396](https://github.com/ClickHouse/ClickHouse/pull/85396) ([xiaohuanlin](https://github.com/xiaohuanlin)). -* Исправлена ошибка, из-за которой команды ALTER COLUMN IF EXISTS завершались сбоем, когда состояние столбца изменялось в пределах одного и того же запроса ALTER. Теперь команды DROP COLUMN IF EXISTS, MODIFY COLUMN IF EXISTS, COMMENT COLUMN IF EXISTS и RENAME COLUMN IF EXISTS корректно обрабатывают случаи, когда столбец был удалён предыдущей командой в том же запросе. [#86046](https://github.com/ClickHouse/ClickHouse/pull/86046) ([xiaohuanlin](https://github.com/xiaohuanlin)). +* Исправлена ошибка в GeoParquet, приводившая к ошибкам клиентского протокола. [#84020](https://github.com/ClickHouse/ClickHouse/pull/84020) ([Michael Kolupaev](https://github.com/al13n321)). +* Исправлено вычисление зависящих от хоста функций, таких как shardNum(), в подзапросах на инициирующем узле. [#84409](https://github.com/ClickHouse/ClickHouse/pull/84409) ([Eduard Karacharov](https://github.com/korowa)). +* Исправлена некорректная обработка дат до эпохи Unix с дробными секундами в различных функциях, связанных с датой и временем, таких как `parseDateTime64BestEffort`, `change{Year,Month,Day}` и `makeDateTime64`. Ранее дробная часть секунд вычиталась из целых секунд, а не прибавлялась к ним. Например, `parseDateTime64BestEffort('1969-01-01 00:00:00.468')` возвращала `1968-12-31 23:59:59.532` вместо `1969-01-01 00:00:00.468`. [#85396](https://github.com/ClickHouse/ClickHouse/pull/85396) ([xiaohuanlin](https://github.com/xiaohuanlin)). +* Исправлена ошибка, из-за которой команды `ALTER COLUMN IF EXISTS` завершались сбоем при изменении состояния столбца в рамках одного и того же запроса `ALTER`. Теперь команды `DROP COLUMN IF EXISTS`, `MODIFY COLUMN IF EXISTS`, `COMMENT COLUMN IF EXISTS` и `RENAME COLUMN IF EXISTS` корректно обрабатывают случаи, когда столбец был удалён предыдущей командой в том же запросе. [#86046](https://github.com/ClickHouse/ClickHouse/pull/86046) ([xiaohuanlin](https://github.com/xiaohuanlin)). * Исправлен вывод типов Date/DateTime/DateTime64 для дат, выходящих за поддерживаемый диапазон. [#86184](https://github.com/ClickHouse/ClickHouse/pull/86184) ([Pavel Kruglov](https://github.com/Avogar)). -* Исправлена ошибка, из-за которой некоторые корректные пользовательские данные, отправленные в столбец `AggregateFunction(quantileDD)`, могли приводить к бесконечной рекурсии при слиянии. [#86560](https://github.com/ClickHouse/ClickHouse/pull/86560) ([Raphaël Thériault](https://github.com/raphael-theriault-swi)). -* Добавлена поддержка типов JSON/Dynamic в таблице, создаваемой с помощью табличной функции `cluster`. [#86821](https://github.com/ClickHouse/ClickHouse/pull/86821) ([Pavel Kruglov](https://github.com/Avogar)). -* Исправлена недетерминированность результата функции, вычисляемой в CTE, в запросе. [#86967](https://github.com/ClickHouse/ClickHouse/pull/86967) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* Исправлена ошибка LOGICAL_ERROR в EXPLAIN при использовании функции pointInPolygon на столбцах первичного ключа. [#86971](https://github.com/ClickHouse/ClickHouse/pull/86971) ([Michael Kolupaev](https://github.com/al13n321)). -* Исправлены таблицы озера данных, в имени которых содержится последовательность, закодированная в формате percent-encoding. Закрывает [#86626](https://github.com/ClickHouse/ClickHouse/issues/86626). [#87020](https://github.com/ClickHouse/ClickHouse/pull/87020) ([Anton Ivashkin](https://github.com/ianton-ru)). -* Исправлено некорректное поведение оператора `IS NULL` на nullable-столбцах в `OUTER JOIN` при включённом `optimize_functions_to_subcolumns`, закрыт [#78625](https://github.com/ClickHouse/ClickHouse/issues/78625). [#87058](https://github.com/ClickHouse/ClickHouse/pull/87058) ([Vladimir Cherkasov](https://github.com/vdimir)). -* Исправлен некорректный учет освобождения временных данных при отслеживании лимита `max_temporary_data_on_disk_size`, закрыт [#87118](https://github.com/ClickHouse/ClickHouse/issues/87118). [#87140](https://github.com/ClickHouse/ClickHouse/pull/87140) ([JIaQi](https://github.com/JiaQiTang98)). -* Функция checkHeaders теперь корректно проверяет переданные заголовки и отклоняет запрещённые. Изначальный автор: Michael Anastasakis (@michael-anastasakis). [#87172](https://github.com/ClickHouse/ClickHouse/pull/87172) ([Raúl Marín](https://github.com/Algunenano)). -* Унифицирует поведение `toDate` и `toDate32` для всех числовых типов. Исправляет проверку на выход за нижнюю границу (underflow) для Date32 при приведении из int16. [#87176](https://github.com/ClickHouse/ClickHouse/pull/87176) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). -* Исправлена логическая ошибка при использовании параллельных реплик для запросов с несколькими операциями JOIN, в частности с RIGHT JOIN, следующим за LEFT/INNER JOIN. [#87178](https://github.com/ClickHouse/ClickHouse/pull/87178) ([Igor Nikonov](https://github.com/devcrafter)). +* Исправлена ошибка, из-за которой некоторые корректные данные, отправленные пользователем в столбец `AggregateFunction(quantileDD)`, могли приводить к бесконечной рекурсии при выполнении слияний. [#86560](https://github.com/ClickHouse/ClickHouse/pull/86560) ([Raphaël Thériault](https://github.com/raphael-theriault-swi)). +* Добавлена поддержка типов JSON/Dynamic в таблицах, создаваемых табличной функцией `cluster`. [#86821](https://github.com/ClickHouse/ClickHouse/pull/86821) ([Pavel Kruglov](https://github.com/Avogar)). +* Исправлена проблема, из-за которой результат функции, вычисляемой в CTE, оказывался недетерминированным в запросе. [#86967](https://github.com/ClickHouse/ClickHouse/pull/86967) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* Исправлена ошибка LOGICAL_ERROR в EXPLAIN при использовании pointInPolygon для столбцов первичного ключа. [#86971](https://github.com/ClickHouse/ClickHouse/pull/86971) ([Michael Kolupaev](https://github.com/al13n321)). +* Исправлены таблицы озера данных с процентно-кодированной последовательностью в имени. Закрывает [#86626](https://github.com/ClickHouse/ClickHouse/issues/86626). [#87020](https://github.com/ClickHouse/ClickHouse/pull/87020) ([Anton Ivashkin](https://github.com/ianton-ru)). +* Исправлено некорректное поведение `IS NULL` для столбцов, допускающих NULL, в `OUTER JOIN` при включённой настройке `optimize_functions_to_subcolumns`, закрыта задача [#78625](https://github.com/ClickHouse/ClickHouse/issues/78625). [#87058](https://github.com/ClickHouse/ClickHouse/pull/87058) ([Vladimir Cherkasov](https://github.com/vdimir)). +* Исправлен некорректный учет освобождения временных данных при отслеживании лимита `max_temporary_data_on_disk_size`, закрывает [#87118](https://github.com/ClickHouse/ClickHouse/issues/87118). [#87140](https://github.com/ClickHouse/ClickHouse/pull/87140) ([JIaQi](https://github.com/JiaQiTang98)). +* Функция checkHeaders теперь корректно проверяет переданные заголовки и отклоняет недопустимые заголовки. Автор исходной реализации: Michael Anastasakis (@michael-anastasakis). [#87172](https://github.com/ClickHouse/ClickHouse/pull/87172) ([Raúl Marín](https://github.com/Algunenano)). +* Унифицирует поведение функций `toDate` и `toDate32` для всех числовых типов. Исправляет проверку на выход за нижнюю границу диапазона (underflow) для Date32 при приведении из int16. [#87176](https://github.com/ClickHouse/ClickHouse/pull/87176) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +* Исправлена логическая ошибка в работе параллельных реплик для запросов с несколькими операциями JOIN, в частности — с RIGHT JOIN, идущим после LEFT/INNER JOIN. [#87178](https://github.com/ClickHouse/ClickHouse/pull/87178) ([Igor Nikonov](https://github.com/devcrafter)). * Учитывать настройку `input_format_try_infer_variants` в кэше определения схемы. [#87180](https://github.com/ClickHouse/ClickHouse/pull/87180) ([Pavel Kruglov](https://github.com/Avogar)). -* Сделать так, чтобы pathStartsWith сопоставлял только пути, начинающиеся с заданного префикса. [#87181](https://github.com/ClickHouse/ClickHouse/pull/87181) ([Raúl Marín](https://github.com/Algunenano)). -* Исправлены логические ошибки в виртуальном столбце `_row_number` и позиционированных удалениях в Iceberg. [#87220](https://github.com/ClickHouse/ClickHouse/pull/87220) ([Michael Kolupaev](https://github.com/al13n321)). -* Исправлена логическая ошибка `LOGICAL_ERROR` «Too large size passed to allocator» в `JOIN`, возникавшая из-за смешения константных и неконстантных блоков. [#87231](https://github.com/ClickHouse/ClickHouse/pull/87231) ([Azat Khuzhin](https://github.com/azat)). -* Исправлены легковесные обновления с подзапросами, которые читают из других таблиц `MergeTree`. [#87285](https://github.com/ClickHouse/ClickHouse/pull/87285) ([Anton Popov](https://github.com/CurtizJ)). -* Исправлена оптимизация move-to-prewhere, которая не работала при наличии политик строк. Продолжение [#85118](https://github.com/ClickHouse/ClickHouse/issues/85118). Закрывает [#69777](https://github.com/ClickHouse/ClickHouse/issues/69777). Закрывает [#83748](https://github.com/ClickHouse/ClickHouse/issues/83748). [#87303](https://github.com/ClickHouse/ClickHouse/pull/87303) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). -* Исправлено применение патчей к столбцам с выражением по умолчанию, отсутствующим в частях данных. [#87347](https://github.com/ClickHouse/ClickHouse/pull/87347) ([Anton Popov](https://github.com/CurtizJ)). -* Исправлена ошибка сегментации при использовании повторяющихся имён столбцов секционирования в таблицах MergeTree. [#87365](https://github.com/ClickHouse/ClickHouse/pull/87365) ([xiaohuanlin](https://github.com/xiaohuanlin)). +* Сделать так, чтобы pathStartsWith сопоставлял только пути, начинающиеся с указанного префикса. [#87181](https://github.com/ClickHouse/ClickHouse/pull/87181) ([Raúl Marín](https://github.com/Algunenano)). +* Исправлены логические ошибки в виртуальном столбце `_row_number` и в позиционных удалениях Iceberg. [#87220](https://github.com/ClickHouse/ClickHouse/pull/87220) ([Michael Kolupaev](https://github.com/al13n321)). +* Исправлена ошибка `LOGICAL_ERROR` «Too large size passed to allocator» в `JOIN`, возникавшая из-за смешения константных и неконстантных блоков. [#87231](https://github.com/ClickHouse/ClickHouse/pull/87231) ([Azat Khuzhin](https://github.com/azat)). +* Исправлены легковесные обновления с подзапросами, читающими из других таблиц `MergeTree`. [#87285](https://github.com/ClickHouse/ClickHouse/pull/87285) ([Anton Popov](https://github.com/CurtizJ)). +* Исправлена оптимизация move-to-prewhere, которая не работала при наличии политики строк (row policy). Продолжение [#85118](https://github.com/ClickHouse/ClickHouse/issues/85118). Закрывает [#69777](https://github.com/ClickHouse/ClickHouse/issues/69777). Закрывает [#83748](https://github.com/ClickHouse/ClickHouse/issues/83748). [#87303](https://github.com/ClickHouse/ClickHouse/pull/87303) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). +* Исправлено применение патчей к отсутствующим в частях данных столбцам с выражением по умолчанию. [#87347](https://github.com/ClickHouse/ClickHouse/pull/87347) ([Anton Popov](https://github.com/CurtizJ)). +* Исправлена ошибка сегментации при использовании дублирующихся имён полей партиционирования в таблицах MergeTree. [#87365](https://github.com/ClickHouse/ClickHouse/pull/87365) ([xiaohuanlin](https://github.com/xiaohuanlin)). * Исправлена проблема с обновлением EmbeddedRocksDB. [#87392](https://github.com/ClickHouse/ClickHouse/pull/87392) ([Raúl Marín](https://github.com/Algunenano)). -* Исправлено прямое чтение из текстового индекса в объектном хранилище. [#87399](https://github.com/ClickHouse/ClickHouse/pull/87399) ([Anton Popov](https://github.com/CurtizJ)). -* Запрещено создание привилегии, использующей несуществующий движок. [#87419](https://github.com/ClickHouse/ClickHouse/pull/87419) ([Jitendra](https://github.com/jitendra1411)). -* Игнорировать только ошибки `not found` для `s3_plain_rewritable` (так как это может привести к самым разным проблемам). [#87426](https://github.com/ClickHouse/ClickHouse/pull/87426) ([Azat Khuzhin](https://github.com/azat)). -* Исправлены словари, использующие источник YTSaurus и макеты *range_hashed. [#87490](https://github.com/ClickHouse/ClickHouse/pull/87490) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). +* Исправлено прямое чтение текстового индекса в объектном хранилище. [#87399](https://github.com/ClickHouse/ClickHouse/pull/87399) ([Anton Popov](https://github.com/CurtizJ)). +* Предотвращено создание привилегий для несуществующего движка. [#87419](https://github.com/ClickHouse/ClickHouse/pull/87419) ([Jitendra](https://github.com/jitendra1411)). +* Игнорировать только ошибки «not found» для `s3_plain_rewritable` (что может приводить к различным проблемам). [#87426](https://github.com/ClickHouse/ClickHouse/pull/87426) ([Azat Khuzhin](https://github.com/azat)). +* Исправлены словари с источником данных YTSaurus и макетами *range_hashed. [#87490](https://github.com/ClickHouse/ClickHouse/pull/87490) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). * Исправлена ошибка при создании массива пустых кортежей. [#87520](https://github.com/ClickHouse/ClickHouse/pull/87520) ([Pavel Kruglov](https://github.com/Avogar)). -* Проверка наличия недопустимых столбцов при создании временной таблицы. [#87524](https://github.com/ClickHouse/ClickHouse/pull/87524) ([Pavel Kruglov](https://github.com/Avogar)). -* Никогда не указывайте столбцы партиций Hive в заголовке формата. Исправлена ошибка [#87515](https://github.com/ClickHouse/ClickHouse/issues/87515). [#87528](https://github.com/ClickHouse/ClickHouse/pull/87528) ([Arthur Passos](https://github.com/arthurpassos)). -* Исправлена подготовка чтения данных из формата в DeltaLake при использовании текстового формата. [#87529](https://github.com/ClickHouse/ClickHouse/pull/87529) ([Pavel Kruglov](https://github.com/Avogar)). -* Исправлена проверка доступа при выполнении `SELECT` и `INSERT` для таблиц `Buffer`. [#87545](https://github.com/ClickHouse/ClickHouse/pull/87545) ([pufit](https://github.com/pufit)). +* Проверка недопустимых столбцов при создании временной таблицы. [#87524](https://github.com/ClickHouse/ClickHouse/pull/87524) ([Pavel Kruglov](https://github.com/Avogar)). +* Никогда не помещайте столбцы партиционирования Hive в заголовок формата. Исправляет [#87515](https://github.com/ClickHouse/ClickHouse/issues/87515). [#87528](https://github.com/ClickHouse/ClickHouse/pull/87528) ([Arthur Passos](https://github.com/arthurpassos)). +* Исправлена подготовка чтения из формата в DeltaLake при работе с текстовым форматом. [#87529](https://github.com/ClickHouse/ClickHouse/pull/87529) ([Pavel Kruglov](https://github.com/Avogar)). +* Исправлена проверка прав доступа при выполнении `SELECT` и `INSERT` для таблиц типа `Buffer`. [#87545](https://github.com/ClickHouse/ClickHouse/pull/87545) ([pufit](https://github.com/pufit)). * Запрещено создание индекса пропуска данных для таблицы S3. [#87554](https://github.com/ClickHouse/ClickHouse/pull/87554) ([Bharat Nallan](https://github.com/bharatnc)). -* Предотвращена утечка отслеживаемой памяти при асинхронном логировании (могла приводить к значительному дрейфу: за 10 часов до ~100 GiB) и в text_log (мог наблюдаться почти такой же дрейф). [#87584](https://github.com/ClickHouse/ClickHouse/pull/87584) ([Azat Khuzhin](https://github.com/azat)). -* Исправлена ошибка, которая могла приводить к перезаписи глобальных настроек сервера настройками SELECT для представления или материализованного представления, если это представление удалялось асинхронно, а сервер перезапускался до завершения фоновой очистки. [#87603](https://github.com/ClickHouse/ClickHouse/pull/87603) ([Alexander Tokmakov](https://github.com/tavplubix)). -* Исключать байты кэша страниц в пространстве пользователя (если возможно) при вычислении предупреждения о перегрузке по памяти. [#87610](https://github.com/ClickHouse/ClickHouse/pull/87610) ([Bharat Nallan](https://github.com/bharatnc)). -* Исправлена ошибка, из-за которой некорректный порядок типов во время десериализации CSV приводил к `LOGICAL_ERROR`. [#87622](https://github.com/ClickHouse/ClickHouse/pull/87622) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* Исправлена ошибка некорректной обработки `command_read_timeout` для исполняемых словарей. [#87627](https://github.com/ClickHouse/ClickHouse/pull/87627) ([Azat Khuzhin](https://github.com/azat)). -* Исправлено некорректное поведение `SELECT * REPLACE` в предложении `WHERE` при использовании нового анализатора при фильтрации по заменённым столбцам. [#87630](https://github.com/ClickHouse/ClickHouse/pull/87630) ([xiaohuanlin](https://github.com/xiaohuanlin)). -* Исправлена двухуровневая агрегация при использовании `Merge` поверх `Distributed`. [#87687](https://github.com/ClickHouse/ClickHouse/pull/87687) ([c-end](https://github.com/c-end)). -* Исправлена генерация выходного блока в алгоритме `HashJoin`, когда список правых строк не используется. Исправляет [#87401](https://github.com/ClickHouse/ClickHouse/issues/87401). [#87699](https://github.com/ClickHouse/ClickHouse/pull/87699) ([Dmitry Novik](https://github.com/novikd)). -* Режим чтения параллельных реплик мог быть выбран некорректно, если после анализа индекса не оставалось данных для чтения. Закрывает [#87653](https://github.com/ClickHouse/ClickHouse/issues/87653). [#87700](https://github.com/ClickHouse/ClickHouse/pull/87700) ([zoomxi](https://github.com/zoomxi)). -* Исправлена обработка столбцов типов `timestamp` и `timestamptz` в Glue. [#87733](https://github.com/ClickHouse/ClickHouse/pull/87733) ([Andrey Zvonov](https://github.com/zvonand)). +* Предотвращена утечка отслеживаемой памяти при асинхронном логировании (за 10 часов мог накапливаться значительный дрейф, до ~100GiB) и в text_log (аналогичный дрейф также был возможен). [#87584](https://github.com/ClickHouse/ClickHouse/pull/87584) ([Azat Khuzhin](https://github.com/azat)). +* Исправлена ошибка, которая могла приводить к перезаписи глобальных настроек сервера настройками `SELECT` представления или материализованного представления, если это представление было удалено асинхронно, а сервер был перезапущен до завершения фоновой очистки. [#87603](https://github.com/ClickHouse/ClickHouse/pull/87603) ([Alexander Tokmakov](https://github.com/tavplubix)). +* Исключить байты кэша страниц в пространстве пользователя (если возможно) при вычислении предупреждения о перегрузке памяти. [#87610](https://github.com/ClickHouse/ClickHouse/pull/87610) ([Bharat Nallan](https://github.com/bharatnc)). +* Исправлена ошибка, из-за которой при десериализации CSV неверный порядок типов приводил к `LOGICAL_ERROR`. [#87622](https://github.com/ClickHouse/ClickHouse/pull/87622) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* Исправлена некорректная обработка `command_read_timeout` для исполняемых словарей. [#87627](https://github.com/ClickHouse/ClickHouse/pull/87627) ([Azat Khuzhin](https://github.com/azat)). +* Исправлено некорректное поведение `SELECT * REPLACE` в условии `WHERE` при использовании нового анализатора для фильтрации по заменённым столбцам. [#87630](https://github.com/ClickHouse/ClickHouse/pull/87630) ([xiaohuanlin](https://github.com/xiaohuanlin)). +* Исправлена работа двухуровневой агрегации при использовании `Merge` поверх `Distributed`. [#87687](https://github.com/ClickHouse/ClickHouse/pull/87687) ([c-end](https://github.com/c-end)). +* Исправлена генерация выходного блока в алгоритме HashJoin, когда список строк правой таблицы не используется. Исправляет проблему [#87401](https://github.com/ClickHouse/ClickHouse/issues/87401). [#87699](https://github.com/ClickHouse/ClickHouse/pull/87699) ([Dmitry Novik](https://github.com/novikd)). +* Режим чтения с параллельными репликами мог быть выбран неверно, если после анализа индексов не оставалось данных для чтения. Закрывает [#87653](https://github.com/ClickHouse/ClickHouse/issues/87653). [#87700](https://github.com/ClickHouse/ClickHouse/pull/87700) ([zoomxi](https://github.com/zoomxi)). +* Исправлена обработка столбцов `timestamp` / `timestamptz` в Glue. [#87733](https://github.com/ClickHouse/ClickHouse/pull/87733) ([Andrey Zvonov](https://github.com/zvonand)). * Закрывает [#86587](https://github.com/ClickHouse/ClickHouse/issues/86587). [#87761](https://github.com/ClickHouse/ClickHouse/pull/87761) ([scanhex12](https://github.com/scanhex12)). -* Исправлена запись булевых значений в интерфейсе PostgreSQL. [#87762](https://github.com/ClickHouse/ClickHouse/pull/87762) ([Artem Yurov](https://github.com/ArtemYurov)). -* Исправлена ошибка `unknown table` в запросе `INSERT SELECT` с CTE, [#85368](https://github.com/ClickHouse/ClickHouse/issues/85368). [#87789](https://github.com/ClickHouse/ClickHouse/pull/87789) ([Guang Zhao](https://github.com/zheguang)). -* Исправлено чтение подстолбца map, содержащего null, из Variant, который не может находиться внутри Nullable. [#87798](https://github.com/ClickHouse/ClickHouse/pull/87798) ([Pavel Kruglov](https://github.com/Avogar)). -* Исправлена обработка ошибки при сбое полного удаления базы данных в кластере на вторичном узле. [#87802](https://github.com/ClickHouse/ClickHouse/pull/87802) ([Tuan Pham Anh](https://github.com/tuanpach)). -* Исправлено несколько ошибок в пропускающих индексах. [#87817](https://github.com/ClickHouse/ClickHouse/pull/87817) ([Raúl Marín](https://github.com/Algunenano)). -* В AzureBlobStorage обновлено поведение: сначала выполняется нативное копирование, а при ошибке 'Unauthroized' выполняется чтение и запись (в AzureBlobStorage, если учетные записи хранилища для источника и назначения различаются, возникает ошибка 'Unauthorized'). Также исправлено применение параметра "use_native_copy", когда в конфигурации определен endpoint. [#87826](https://github.com/ClickHouse/ClickHouse/pull/87826) ([Smita Kulkarni](https://github.com/SmitaRKulkarni)). -* ClickHouse завершался с ошибкой, если файл ArrowStream содержал неуникальный словарь. [#87863](https://github.com/ClickHouse/ClickHouse/pull/87863) ([Ilya Golshtein](https://github.com/ilejn)). +* Исправлена запись булевых значений через интерфейс PostgreSQL. [#87762](https://github.com/ClickHouse/ClickHouse/pull/87762) ([Artem Yurov](https://github.com/ArtemYurov)). +* Исправлена ошибка «Unknown table» в запросе `INSERT SELECT` с CTE, [#85368](https://github.com/ClickHouse/ClickHouse/issues/85368). [#87789](https://github.com/ClickHouse/ClickHouse/pull/87789) ([Guang Zhao](https://github.com/zheguang)). +* Исправлено чтение подстолбца Map со значением NULL из Variants, которые не могут быть Nullable. [#87798](https://github.com/ClickHouse/ClickHouse/pull/87798) ([Pavel Kruglov](https://github.com/Avogar)). +* Исправлена обработка ошибки при неудачной попытке полного удаления базы данных в кластере на вторичном узле. [#87802](https://github.com/ClickHouse/ClickHouse/pull/87802) ([Tuan Pham Anh](https://github.com/tuanpach)). +* Исправлено несколько ошибок в индексах пропуска. [#87817](https://github.com/ClickHouse/ClickHouse/pull/87817) ([Raúl Marín](https://github.com/Algunenano)). +* В AzureBlobStorage обновлено поведение: сначала выполняется попытка нативного копирования, а при ошибке 'Unauthroized' выполняются чтение и запись (в AzureBlobStorage, если для источника и назначения используются разные учетные записи хранилища, возникает ошибка 'Unauthorized'). Также исправлено применение параметра "use_native_copy" при заданном endpoint в конфигурации. [#87826](https://github.com/ClickHouse/ClickHouse/pull/87826) ([Smita Kulkarni](https://github.com/SmitaRKulkarni)). +* ClickHouse аварийно завершает работу, если в файле ArrowStream используется неуникальный словарь. [#87863](https://github.com/ClickHouse/ClickHouse/pull/87863) ([Ilya Golshtein](https://github.com/ilejn)). * Исправлена фатальная ошибка при использовании approx_top_k и finalizeAggregation. [#87892](https://github.com/ClickHouse/ClickHouse/pull/87892) ([Jitendra](https://github.com/jitendra1411)). * Исправлено слияние с проекциями при пустом последнем блоке. [#87928](https://github.com/ClickHouse/ClickHouse/pull/87928) ([Raúl Marín](https://github.com/Algunenano)). -* Не удалять инъективные функции из GROUP BY, если типы их аргументов не допускаются в GROUP BY. [#87958](https://github.com/ClickHouse/ClickHouse/pull/87958) ([Pavel Kruglov](https://github.com/Avogar)). -* Исправление некорректного исключения гранул/разделов для ключей по дате/времени при использовании настройки `session_timezone` в запросах. [#87987](https://github.com/ClickHouse/ClickHouse/pull/87987) ([Eduard Karacharov](https://github.com/korowa)). -* Возвращает количество затронутых строк после выполнения запроса через интерфейс PostgreSQL. [#87990](https://github.com/ClickHouse/ClickHouse/pull/87990) ([Artem Yurov](https://github.com/ArtemYurov)). -* Ограничивает использование оптимизации проталкивания фильтров для PASTE JOIN, поскольку это может приводить к некорректным результатам. [#88078](https://github.com/ClickHouse/ClickHouse/pull/88078) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* Применяет нормализацию URI перед выполнением проверки прав доступа, введённой в [https://github.com/ClickHouse/ClickHouse/pull/84503](https://github.com/ClickHouse/ClickHouse/pull/84503). [#88089](https://github.com/ClickHouse/ClickHouse/pull/88089) ([pufit](https://github.com/pufit)). -* Исправлена логическая ошибка в новом анализаторе, возникавшая, если ARRAY JOIN COLUMNS() не находил ни одного столбца. [#88091](https://github.com/ClickHouse/ClickHouse/pull/88091) ([xiaohuanlin](https://github.com/xiaohuanlin)). -* Исправлено предупреждение "High ClickHouse memory usage" (без учета page cache). [#88092](https://github.com/ClickHouse/ClickHouse/pull/88092) ([Azat Khuzhin](https://github.com/azat)). -* Исправлена возможная порча данных в таблицах `MergeTree` с заданным для столбца `TTL`. [#88095](https://github.com/ClickHouse/ClickHouse/pull/88095) ([Anton Popov](https://github.com/CurtizJ)). -* Исправлено потенциальное неперехваченное исключение при чтении `system.tables` при наличии некорректных таблиц во внешних подключённых базах данных (`PostgreSQL`/`SQLite`/...). [#88105](https://github.com/ClickHouse/ClickHouse/pull/88105) ([Azat Khuzhin](https://github.com/azat)). -* Исправлено падение в функциях `mortonEncode` и `hilbertEncode` при вызове с пустым кортежем в качестве аргумента. [#88110](https://github.com/ClickHouse/ClickHouse/pull/88110) ([xiaohuanlin](https://github.com/xiaohuanlin)). -* Теперь запросы `ON CLUSTER` будут выполняться быстрее при наличии неактивных реплик в кластере. [#88153](https://github.com/ClickHouse/ClickHouse/pull/88153) ([alesapin](https://github.com/alesapin)). -* Теперь DDL worker очищает набор реплик от устаревших хостов. Это уменьшит объём хранимых метаданных в ZooKeeper. [#88154](https://github.com/ClickHouse/ClickHouse/pull/88154) ([alesapin](https://github.com/alesapin)). -* Исправлена проблема с запуском ClickHouse без cgroups (случайно cgroups оказались обязательным требованием для асинхронных метрик). [#88164](https://github.com/ClickHouse/ClickHouse/pull/88164) ([Azat Khuzhin](https://github.com/azat)). -* Корректно выполнять откат операции перемещения директории в случае ошибки. Необходимо перезаписывать все объекты `prefix.path`, изменённые во время выполнения, а не только корневой объект. [#88198](https://github.com/ClickHouse/ClickHouse/pull/88198) ([Mikhail Artemenko](https://github.com/Michicosun)). -* Исправлена передача флага `is_shared` в `ColumnLowCardinality`. Это могло приводить к неверному результату операции GROUP BY, если в столбец вставлялось новое значение после того, как значения хеша уже были предварительно вычислены и закэшированы в `ReverseIndex`. [#88213](https://github.com/ClickHouse/ClickHouse/pull/88213) ([Nikita Taranov](https://github.com/nickitat)). -* Исправлен параметр рабочей нагрузки `max_cpu_share`. Теперь его можно использовать без задания параметра рабочей нагрузки `max_cpus`. [#88217](https://github.com/ClickHouse/ClickHouse/pull/88217) ([Neerav](https://github.com/neeravsalaria)). -* Исправлена ошибка, из-за которой очень тяжёлые мутации с подзапросами могли зависать на этапе подготовки. Теперь такие мутации можно остановить с помощью `SYSTEM STOP MERGES`. [#88241](https://github.com/ClickHouse/ClickHouse/pull/88241) ([alesapin](https://github.com/alesapin)). -* Теперь коррелированные подзапросы работают с объектными хранилищами. [#88290](https://github.com/ClickHouse/ClickHouse/pull/88290) ([alesapin](https://github.com/alesapin)). -* Не пытайтесь инициализировать базы данных DataLake во время доступа к `system.projections` и `system.data_skipping_indices`. [#88330](https://github.com/ClickHouse/ClickHouse/pull/88330) ([Azat Khuzhin](https://github.com/azat)). -* Теперь каталоги даталейков будут отображаться в системных таблицах для интроспекции только в том случае, если параметр `show_data_lake_catalogs_in_system_tables` явно включён. [#88341](https://github.com/ClickHouse/ClickHouse/pull/88341) ([alesapin](https://github.com/alesapin)). -* Исправлено поведение DatabaseReplicated, чтобы он учитывал параметр конфигурации `interserver_http_host`. [#88378](https://github.com/ClickHouse/ClickHouse/pull/88378) ([xiaohuanlin](https://github.com/xiaohuanlin)). -* Позиционные аргументы теперь явно отключены в контексте определения проекций, так как они не имеют смысла на данном внутреннем этапе запроса. Это исправляет [#48604](https://github.com/ClickHouse/ClickHouse/issues/48604). [#88380](https://github.com/ClickHouse/ClickHouse/pull/88380) ([Amos Bird](https://github.com/amosbird)). -* Устранена квадратичная сложность в функции `countMatches`. Закрывает [#88400](https://github.com/ClickHouse/ClickHouse/issues/88400). [#88401](https://github.com/ClickHouse/ClickHouse/pull/88401) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Команды `ALTER COLUMN ... COMMENT` для таблиц KeeperMap теперь реплицируются, чтобы фиксироваться в метаданных базы данных Replicated и распространяться на все реплики. Закрывает [#88077](https://github.com/ClickHouse/ClickHouse/issues/88077). [#88408](https://github.com/ClickHouse/ClickHouse/pull/88408) ([Eduard Karacharov](https://github.com/korowa)). -* Исправлен случай ложного срабатывания проверки циклической зависимости с материализованными представлениями в базе типа Database Replicated, который препятствовал добавлению новых реплик в базу данных. [#88423](https://github.com/ClickHouse/ClickHouse/pull/88423) ([Nikolay Degterinsky](https://github.com/evillique)). -* Исправлена агрегация разрежённых столбцов при значении `group_by_overflow_mode` = `any`. [#88440](https://github.com/ClickHouse/ClickHouse/pull/88440) ([Eduard Karacharov](https://github.com/korowa)). -* Исправлена ошибка «column not found» при использовании `query_plan_use_logical_join_step=0` с несколькими предложениями FULL JOIN USING. Закрывает [#88103](https://github.com/ClickHouse/ClickHouse/issues/88103). [#88473](https://github.com/ClickHouse/ClickHouse/pull/88473) ([Vladimir Cherkasov](https://github.com/vdimir)). -* Большие кластеры с числом узлов > 10 имеют высокую вероятность сбоя операции восстановления с ошибкой `[941] 67c45db4-4df4-4879-87c5-25b8d1e0d414 : RestoreCoordinationOnCluster The version of node /clickhouse/backups/restore-7c551a77-bd76-404c-bad0-3213618ac58e/stage/num_hosts changed (attempt #9), will try again`. Узел `num_hosts` перезаписывается большим числом хостов одновременно. Исправление делает параметр, управляющий количеством попыток, динамическим. Закрывает [#87721](https://github.com/ClickHouse/ClickHouse/issues/87721). [#88484](https://github.com/ClickHouse/ClickHouse/pull/88484) ([Mikhail f. Shiryaev](https://github.com/Felixoid)). -* Этот PR предназначен только для обеспечения совместимости с 23.8 и более ранними версиями. Проблема совместимости появилась из‑за этого PR: [https://github.com/ClickHouse/ClickHouse/pull/54240](https://github.com/ClickHouse/ClickHouse/pull/54240) Этот SQL‑запрос завершится ошибкой при `enable_analyzer=0` (до 23.8 он выполнялся нормально). [#88491](https://github.com/ClickHouse/ClickHouse/pull/88491) ([JIaQi](https://github.com/JiaQiTang98)). -* Исправлена ошибка переполнения целого числа UBSAN в сообщении об ошибке `accurateCast` при преобразовании больших значений в DateTime. [#88520](https://github.com/ClickHouse/ClickHouse/pull/88520) ([xiaohuanlin](https://github.com/xiaohuanlin)). +* Не удалять инъективные функции из GROUP BY, если типы их аргументов не могут использоваться в GROUP BY. [#87958](https://github.com/ClickHouse/ClickHouse/pull/87958) ([Pavel Kruglov](https://github.com/Avogar)). +* Исправлено некорректное исключение гранул/партиций для datetime-ключей при использовании параметра `session_timezone` в запросах. [#87987](https://github.com/ClickHouse/ClickHouse/pull/87987) ([Eduard Karacharov](https://github.com/korowa)). +* Возвращает количество затронутых строк после выполнения запроса в интерфейсе PostgreSQL. [#87990](https://github.com/ClickHouse/ClickHouse/pull/87990) ([Artem Yurov](https://github.com/ArtemYurov)). +* Ограничивает использование проталкивания фильтров (filter pushdown) для PASTE JOIN, так как это может привести к некорректным результатам. [#88078](https://github.com/ClickHouse/ClickHouse/pull/88078) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* Применяет нормализацию URI перед выполнением проверки прав доступа, добавленной в [https://github.com/ClickHouse/ClickHouse/pull/84503](https://github.com/ClickHouse/ClickHouse/pull/84503). [#88089](https://github.com/ClickHouse/ClickHouse/pull/88089) ([pufit](https://github.com/pufit)). +* Исправлена логическая ошибка, возникавшая, когда `ARRAY JOIN COLUMNS()` не находил ни одного столбца в новом анализаторе. [#88091](https://github.com/ClickHouse/ClickHouse/pull/88091) ([xiaohuanlin](https://github.com/xiaohuanlin)). +* Исправлено предупреждение «Высокое использование памяти ClickHouse» (исключая кэш страниц). [#88092](https://github.com/ClickHouse/ClickHouse/pull/88092) ([Azat Khuzhin](https://github.com/azat)). +* Исправлено возможное повреждение данных в таблицах `MergeTree` с установленным для столбца `TTL`. [#88095](https://github.com/ClickHouse/ClickHouse/pull/88095) ([Anton Popov](https://github.com/CurtizJ)). +* Исправлено возможное необработанное исключение при чтении из `system.tables` при наличии некорректных таблиц во внешних базах данных (`PostgreSQL`/`SQLite`/...), подключённых к системе. [#88105](https://github.com/ClickHouse/ClickHouse/pull/88105) ([Azat Khuzhin](https://github.com/azat)). +* Исправлен сбой в функциях `mortonEncode` и `hilbertEncode` при вызове с пустым кортежем в качестве аргумента. [#88110](https://github.com/ClickHouse/ClickHouse/pull/88110) ([xiaohuanlin](https://github.com/xiaohuanlin)). +* Теперь запросы с `ON CLUSTER` будут выполняться быстрее при наличии неактивных реплик в кластере. [#88153](https://github.com/ClickHouse/ClickHouse/pull/88153) ([alesapin](https://github.com/alesapin)). +* Теперь DDL-воркер очищает набор реплик от устаревших хостов. Это уменьшает объём хранимых метаданных в ZooKeeper. [#88154](https://github.com/ClickHouse/ClickHouse/pull/88154) ([alesapin](https://github.com/alesapin)). +* Исправлена проблема с запуском ClickHouse без cgroups (случайно использование cgroups стало обязательным условием для асинхронных метрик). [#88164](https://github.com/ClickHouse/ClickHouse/pull/88164) ([Azat Khuzhin](https://github.com/azat)). +* Выполнять корректный откат операции перемещения каталога в случае ошибки. Необходимо перезаписывать все объекты `prefix.path`, изменённые в ходе выполнения, а не только корневой. [#88198](https://github.com/ClickHouse/ClickHouse/pull/88198) ([Mikhail Artemenko](https://github.com/Michicosun)). +* Исправлено распространение флага `is_shared` в `ColumnLowCardinality`. Это могло приводить к некорректному результату операции GROUP BY, если в столбец вставлялось новое значение после того, как хеш-значения уже были предварительно вычислены и закэшированы в `ReverseIndex`. [#88213](https://github.com/ClickHouse/ClickHouse/pull/88213) ([Nikita Taranov](https://github.com/nickitat)). +* Исправлена настройка рабочей нагрузки `max_cpu_share`. Теперь её можно использовать без указания настройки рабочей нагрузки `max_cpus`. [#88217](https://github.com/ClickHouse/ClickHouse/pull/88217) ([Neerav](https://github.com/neeravsalaria)). +* Исправлена ошибка, из-за которой очень ресурсоёмкие мутации с подзапросами могли застревать на стадии подготовки. Теперь такие мутации можно остановить командой `SYSTEM STOP MERGES`. [#88241](https://github.com/ClickHouse/ClickHouse/pull/88241) ([alesapin](https://github.com/alesapin)). +* Теперь коррелированные подзапросы будут работать с объектными хранилищами. [#88290](https://github.com/ClickHouse/ClickHouse/pull/88290) ([alesapin](https://github.com/alesapin)). +* Не выполняйте инициализацию баз данных DataLake во время доступа к `system.projections` и `system.data_skipping_indices`. [#88330](https://github.com/ClickHouse/ClickHouse/pull/88330) ([Azat Khuzhin](https://github.com/azat)). +* Теперь каталоги data lake будут отображаться в системных таблицах интроспекции только при явном включении параметра `show_data_lake_catalogs_in_system_tables`. [#88341](https://github.com/ClickHouse/ClickHouse/pull/88341) ([alesapin](https://github.com/alesapin)). +* Скорректирована работа DatabaseReplicated с учётом конфигурации `interserver_http_host`. [#88378](https://github.com/ClickHouse/ClickHouse/pull/88378) ([xiaohuanlin](https://github.com/xiaohuanlin)). +* Позиционные аргументы теперь явно запрещены в контексте определения проекций, поскольку они не имеют смысла на этом внутреннем этапе обработки запроса. Это исправляет [#48604](https://github.com/ClickHouse/ClickHouse/issues/48604). [#88380](https://github.com/ClickHouse/ClickHouse/pull/88380) ([Amos Bird](https://github.com/amosbird)). +* Исправлена квадратичная сложность функции `countMatches`. Закрывает [#88400](https://github.com/ClickHouse/ClickHouse/issues/88400). [#88401](https://github.com/ClickHouse/ClickHouse/pull/88401) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Команды `ALTER COLUMN ... COMMENT` для таблиц KeeperMap сделаны реплицируемыми, чтобы они фиксировались в метаданных реплицируемой базы данных и распространялись на все её реплики. Закрывает [#88077](https://github.com/ClickHouse/ClickHouse/issues/88077). [#88408](https://github.com/ClickHouse/ClickHouse/pull/88408) ([Eduard Karacharov](https://github.com/korowa)). +* Исправлена ситуация с ложной циклической зависимостью у материализованных представлений в базе данных DatabaseReplicated, которая предотвращала добавление новых реплик в базу. [#88423](https://github.com/ClickHouse/ClickHouse/pull/88423) ([Nikolay Degterinsky](https://github.com/evillique)). +* Исправлена агрегация разреженных столбцов при установленном значении `group_by_overflow_mode` = `any`. [#88440](https://github.com/ClickHouse/ClickHouse/pull/88440) ([Eduard Karacharov](https://github.com/korowa)). +* Исправлена ошибка «column not found» при использовании параметра `query_plan_use_logical_join_step=0` с несколькими предложениями FULL JOIN USING. Закрывает [#88103](https://github.com/ClickHouse/ClickHouse/issues/88103). [#88473](https://github.com/ClickHouse/ClickHouse/pull/88473) ([Vladimir Cherkasov](https://github.com/vdimir)). +* Большие кластеры с числом узлов > 10 имеют высокую вероятность того, что восстановление завершится с ошибкой `[941] 67c45db4-4df4-4879-87c5-25b8d1e0d414 <Trace>: RestoreCoordinationOnCluster The version of node /clickhouse/backups/restore-7c551a77-bd76-404c-bad0-3213618ac58e/stage/num_hosts changed (attempt #9), will try again`. Узел `num_hosts` одновременно перезаписывается многими хостами. Исправление делает настройку, управляющую количеством попыток, динамической. Закрывает [#87721](https://github.com/ClickHouse/ClickHouse/issues/87721). [#88484](https://github.com/ClickHouse/ClickHouse/pull/88484) ([Mikhail f. Shiryaev](https://github.com/Felixoid)). +* Этот PR предназначен только для обеспечения совместимости с версиями 23.8 и более ранними. Проблема совместимости была внесена этим PR: [https://github.com/ClickHouse/ClickHouse/pull/54240](https://github.com/ClickHouse/ClickHouse/pull/54240). Этот SQL-запрос завершится с ошибкой при `enable_analyzer=0` (до 23.8 он выполнялся корректно). [#88491](https://github.com/ClickHouse/ClickHouse/pull/88491) ([JIaQi](https://github.com/JiaQiTang98)). +* Исправлено переполнение целого числа, выявляемое UBSAN, в сообщении об ошибке `accurateCast` при преобразовании больших значений в DateTime. [#88520](https://github.com/ClickHouse/ClickHouse/pull/88520) ([xiaohuanlin](https://github.com/xiaohuanlin)). * Исправлен движок CoalescingMergeTree для кортежных типов. Это закрывает [#88469](https://github.com/ClickHouse/ClickHouse/issues/88469). [#88526](https://github.com/ClickHouse/ClickHouse/pull/88526) ([scanhex12](https://github.com/scanhex12)). -* Запретить удаления для `iceberg_format_version=1`. Это закрывает [#88444](https://github.com/ClickHouse/ClickHouse/issues/88444). [#88532](https://github.com/ClickHouse/ClickHouse/pull/88532) ([scanhex12](https://github.com/scanhex12)). +* Запретить операции удаления для `iceberg_format_version=1`. Закрывает задачу [#88444](https://github.com/ClickHouse/ClickHouse/issues/88444). [#88532](https://github.com/ClickHouse/ClickHouse/pull/88532) ([scanhex12](https://github.com/scanhex12)). * Этот патч исправляет операцию перемещения на дисках `plain-rewritable` для каталогов произвольной глубины. [#88586](https://github.com/ClickHouse/ClickHouse/pull/88586) ([Mikhail Artemenko](https://github.com/Michicosun)). * Исправлена поддержка SQL SECURITY DEFINER для функций *cluster. [#88588](https://github.com/ClickHouse/ClickHouse/pull/88588) ([Julian Maicher](https://github.com/jmaicher)). -* Исправлен потенциальный сбой, возникавший при конкурентном изменении базовых константных столбцов PREWHERE. [#88605](https://github.com/ClickHouse/ClickHouse/pull/88605) ([Azat Khuzhin](https://github.com/azat)). +* Исправлен потенциальный сбой, вызванный конкурентной мутацией подлежащих константных столбцов PREWHERE. [#88605](https://github.com/ClickHouse/ClickHouse/pull/88605) ([Azat Khuzhin](https://github.com/azat)). * Исправлено чтение из текстового индекса и включён кэш условий запроса (при включённых настройках `use_skip_indexes_on_data_read` и `use_query_condition_cache`). [#88660](https://github.com/ClickHouse/ClickHouse/pull/88660) ([Anton Popov](https://github.com/CurtizJ)). * Исключение `Poco::TimeoutException`, выброшенное из `Poco::Net::HTTPChunkedStreamBuf::readFromDevice`, приводит к аварийному завершению процесса с сигналом SIGABRT. [#88668](https://github.com/ClickHouse/ClickHouse/pull/88668) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). -* Бэкпортировано в [#88910](https://github.com/ClickHouse/ClickHouse/issues/88910): после восстановления реплика базы данных Replicated могла надолго зависать, выводя сообщения вида `Failed to marked query-0004647339 as finished (finished=No node, synced=No node)`, эта проблема исправлена. [#88671](https://github.com/ClickHouse/ClickHouse/pull/88671) ([Alexander Tokmakov](https://github.com/tavplubix)). -* Исправлено добавление записей в `system.zookeeper_connection_log` в случае, когда ClickHouse подключается впервые после перезагрузки конфигурации. [#88728](https://github.com/ClickHouse/ClickHouse/pull/88728) ([Antonio Andelic](https://github.com/antonio2368)). -* Исправлена ошибка, из-за которой преобразование DateTime64 в Date при `date_time_overflow_behavior = 'saturate'` могло приводить к некорректным результатам для значений вне диапазона при работе с часовыми поясами. [#88737](https://github.com/ClickHouse/ClickHouse/pull/88737) ([Manuel](https://github.com/raimannma)). -* N-я попытка исправить ошибку «having zero bytes» в движке таблиц S3 с включённым кэшем. [#88740](https://github.com/ClickHouse/ClickHouse/pull/88740) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Исправлена проверка прав доступа при выполнении запроса `SELECT` для табличной функции `loop`. [#88802](https://github.com/ClickHouse/ClickHouse/pull/88802) ([pufit](https://github.com/pufit)). -* Перехватывайте исключения при сбоях асинхронного логирования, чтобы не допустить аварийного завершения программы. [#88814](https://github.com/ClickHouse/ClickHouse/pull/88814) ([Raúl Marín](https://github.com/Algunenano)). -* Бэкпортировано в [#89060](https://github.com/ClickHouse/ClickHouse/issues/89060): исправлена функция `top_k`, чтобы учитывать пороговый параметр при вызове с одним аргументом. Закрывает [#88757](https://github.com/ClickHouse/ClickHouse/issues/88757). [#88867](https://github.com/ClickHouse/ClickHouse/pull/88867) ([Manuel](https://github.com/raimannma)). -* Перенесено в [#88944](https://github.com/ClickHouse/ClickHouse/issues/88944): исправлена ошибка в функции `reverseUTF8`. В предыдущих версиях она ошибочно переворачивала байты кодовых точек UTF-8 длиной 4 байта. Это закрывает [#88913](https://github.com/ClickHouse/ClickHouse/issues/88913). [#88914](https://github.com/ClickHouse/ClickHouse/pull/88914) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Бэкпортировано в [#88910](https://github.com/ClickHouse/ClickHouse/issues/88910): после восстановления реплика базы данных Replicated могла надолго «зависать», выводя сообщения вида `Failed to marked query-0004647339 as finished (finished=No node, synced=No node)`, теперь это исправлено. [#88671](https://github.com/ClickHouse/ClickHouse/pull/88671) ([Alexander Tokmakov](https://github.com/tavplubix)). +* Исправлено добавление записей в `system.zookeeper_connection_log`, если ClickHouse впервые подключается к ZooKeeper после перезагрузки конфигурации. [#88728](https://github.com/ClickHouse/ClickHouse/pull/88728) ([Antonio Andelic](https://github.com/antonio2368)). +* Исправлена ошибка, при которой преобразование значения типа DateTime64 в Date с `date_time_overflow_behavior = 'saturate'` могло приводить к некорректным результатам для значений, выходящих за допустимый диапазон, при работе с часовыми поясами. [#88737](https://github.com/ClickHouse/ClickHouse/pull/88737) ([Manuel](https://github.com/raimannma)). +* Очередная попытка исправить ошибку «having zero bytes» в движке таблиц S3 с включённым кэшем. [#88740](https://github.com/ClickHouse/ClickHouse/pull/88740) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Исправлена проверка прав доступа на выполнение `SELECT` для табличной функции `loop`. [#88802](https://github.com/ClickHouse/ClickHouse/pull/88802) ([pufit](https://github.com/pufit)). +* Перехватывать исключения при ошибках асинхронного логирования, чтобы предотвратить аварийное завершение программы. [#88814](https://github.com/ClickHouse/ClickHouse/pull/88814) ([Raúl Marín](https://github.com/Algunenano)). +* Бэкпортировано в [#89060](https://github.com/ClickHouse/ClickHouse/issues/89060): исправлен `top_k`, чтобы он учитывал пороговый параметр при вызове с одним аргументом. Закрывает [#88757](https://github.com/ClickHouse/ClickHouse/issues/88757). [#88867](https://github.com/ClickHouse/ClickHouse/pull/88867) ([Manuel](https://github.com/raimannma)). +* Бэкпортировано в [#88944](https://github.com/ClickHouse/ClickHouse/issues/88944): исправлена ошибка в функции `reverseUTF8`. В предыдущих версиях она по ошибке инвертировала порядок байт у четырёхбайтовых кодовых точек UTF-8. Это закрывает [#88913](https://github.com/ClickHouse/ClickHouse/issues/88913). [#88914](https://github.com/ClickHouse/ClickHouse/pull/88914) ([Alexey Milovidov](https://github.com/alexey-milovidov)). * Бэкпортировано в [#88980](https://github.com/ClickHouse/ClickHouse/issues/88980): не выполнять проверку прав доступа `SET DEFINER :definer` при создании представления с SQL SECURITY DEFINER. [#88968](https://github.com/ClickHouse/ClickHouse/pull/88968) ([pufit](https://github.com/pufit)). -* Бэкпортировано в [#89058](https://github.com/ClickHouse/ClickHouse/issues/89058): исправлена ошибка `LOGICAL_ERROR` в `L2DistanceTransposed(vec1, vec2, p)`, при которой оптимизация частичного чтения `QBit` некорректно удаляла `Nullable` из возвращаемого типа, когда параметр `p` имел тип `Nullable`. [#88974](https://github.com/ClickHouse/ClickHouse/pull/88974) ([Raufs Dunamalijevs](https://github.com/rienath)). -* Бэкпортировано в [#89167](https://github.com/ClickHouse/ClickHouse/issues/89167): исправлена ошибка, приводившая к сбою при неизвестном типе каталога. Исправляет [#88819](https://github.com/ClickHouse/ClickHouse/issues/88819). [#88987](https://github.com/ClickHouse/ClickHouse/pull/88987) ([scanhex12](https://github.com/scanhex12)). -* Бэкпортировано в [#89028](https://github.com/ClickHouse/ClickHouse/issues/89028): исправлена деградация производительности при анализе пропускающих индексов. [#89004](https://github.com/ClickHouse/ClickHouse/pull/89004) ([Anton Popov](https://github.com/CurtizJ)). - - +* Бэкпортировано в [#89058](https://github.com/ClickHouse/ClickHouse/issues/89058): исправлена ошибка `LOGICAL_ERROR` в `L2DistanceTransposed(vec1, vec2, p)`, когда оптимизация частичного чтения `QBit` приводила к некорректному удалению `Nullable` из возвращаемого типа, если `p` был `Nullable`. [#88974](https://github.com/ClickHouse/ClickHouse/pull/88974) ([Raufs Dunamalijevs](https://github.com/rienath)). +* Бэкпортировано в [#89167](https://github.com/ClickHouse/ClickHouse/issues/89167): исправлена ошибка, приводившая к аварийному завершению работы при неизвестном типе каталога. Закрывает [#88819](https://github.com/ClickHouse/ClickHouse/issues/88819). [#88987](https://github.com/ClickHouse/ClickHouse/pull/88987) ([scanhex12](https://github.com/scanhex12)). +* Бэкпортировано в [#89028](https://github.com/ClickHouse/ClickHouse/issues/89028): исправлено ухудшение производительности при анализе skipping-индексов. [#89004](https://github.com/ClickHouse/ClickHouse/pull/89004) ([Anton Popov](https://github.com/CurtizJ)). #### Улучшения сборки/тестирования/упаковки + * Использовать библиотеку `postgres` версии 18.0. [#87647](https://github.com/ClickHouse/ClickHouse/pull/87647) ([Konstantin Bogdanov](https://github.com/thevar1able)). * Включить ICU для FreeBSD. [#87891](https://github.com/ClickHouse/ClickHouse/pull/87891) ([Raúl Marín](https://github.com/Algunenano)). * Использовать SSE 4.2, когда применяется динамическая диспетчеризация на SSE 4.2, а не SSE 4. [#88029](https://github.com/ClickHouse/ClickHouse/pull/88029) ([Raúl Marín](https://github.com/Algunenano)). * Не требовать флаг `NO_ARMV81_OR_HIGHER`, если `Speculative Store Bypass Safe` недоступен. [#88051](https://github.com/ClickHouse/ClickHouse/pull/88051) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* Если ClickHouse собирается с `ENABLE_LIBFIU=OFF`, функции, связанные с failpoint, превращаются в no-op и больше не могут влиять на производительность. Запросы `SYSTEM ENABLE/DISABLE FAILPOINT` в этом случае возвращают ошибку `SUPPORT_IS_DISABLED`. [#88184](https://github.com/ClickHouse/ClickHouse/pull/88184) ([c-end](https://github.com/c-end)). - +* Когда ClickHouse собирается с `ENABLE_LIBFIU=OFF`, функции, связанные с failpoint, становятся no-op и больше не влияют на производительность. В этом случае запросы `SYSTEM ENABLE/DISABLE FAILPOINT` возвращают ошибку `SUPPORT_IS_DISABLED`. [#88184](https://github.com/ClickHouse/ClickHouse/pull/88184) ([c-end](https://github.com/c-end)). -### Релиз ClickHouse 25.9, 2025-09-25 {#259} - -#### Несовместимое изменение -* Отключены бессмысленные бинарные операции с IPv4/IPv6: операции сложения/вычитания IPv4/IPv6 с типом, не являющимся целочисленным, теперь запрещены. Ранее они допускались с типами с плавающей запятой и приводили к логическим ошибкам с некоторыми другими типами (такими как DateTime). [#86336](https://github.com/ClickHouse/ClickHouse/pull/86336) ([Raúl Marín](https://github.com/Algunenano)). -* Настройка `allow_dynamic_metadata_for_data_lakes` объявлена устаревшей. Теперь все таблицы Iceberg перед выполнением каждого запроса пытаются получить актуальную схему таблицы из хранилища. [#86366](https://github.com/ClickHouse/ClickHouse/pull/86366) ([Daniil Ivanik](https://github.com/divanik)). -* Изменён способ определения коалесцированного столбца из предложения `OUTER JOIN ... USING`, чтобы сделать его более согласованным: ранее при выборе одновременно столбца из USING и квалифицированных столбцов (`a, t1.a, t2.a`) в OUTER JOIN столбец из USING ошибочно сопоставлялся с `t1.a`, показывая 0/NULL для строк из правой таблицы без соответствия слева. Теперь идентификаторы из предложения USING всегда сопоставляются с коалесцированным столбцом, а квалифицированные идентификаторы — с некоалесцированными столбцами, независимо от того, какие ещё идентификаторы присутствуют в запросе. Например: ```sql SELECT a, t1.a, t2.a FROM (SELECT 1 as a WHERE 0) t1 FULL JOIN (SELECT 2 as a) t2 USING (a) -- До: a=0, t1.a=0, t2.a=2 (неправильно — 'a' сопоставлён с t1.a) -- После: a=2, t1.a=0, t2.a=2 (правильно — 'a' коалесцирован). [#80848](https://github.com/ClickHouse/ClickHouse/pull/80848) ([Vladimir Cherkasov](https://github.com/vdimir)). -* Увеличено окно дедупликации в реплицируемых таблицах до 10 000. Это полностью совместимо, но можно представить сценарии, когда такое изменение может привести к высокому потреблению ресурсов при большом количестве таблиц. [#86820](https://github.com/ClickHouse/ClickHouse/pull/86820) ([Sema Checherinda](https://github.com/CheSema)). +### Релиз ClickHouse 25.9 от 2025-09-25 {#259} +#### Изменения, нарушающие обратную совместимость +* Отключены бессмысленные бинарные операции с IPv4/IPv6: операции сложения/вычитания IPv4/IPv6 с типом, не являющимся целочисленным, теперь запрещены. Ранее допускались операции с числовыми типами с плавающей запятой, а для некоторых других типов (таких как `DateTime`) возникали логические ошибки. [#86336](https://github.com/ClickHouse/ClickHouse/pull/86336) ([Raúl Marín](https://github.com/Algunenano)). +* Настройка `allow_dynamic_metadata_for_data_lakes` помечена как устаревшая. Теперь все таблицы Iceberg перед выполнением каждого запроса пытаются получить актуальную схему таблицы из хранилища. [#86366](https://github.com/ClickHouse/ClickHouse/pull/86366) ([Daniil Ivanik](https://github.com/divanik)). +* Изменено разрешение объединённого (coalesced) столбца из предложения `OUTER JOIN ... USING` для большей согласованности: ранее при одновременном выборе столбца из USING и квалифицированных столбцов (`a, t1.a, t2.a`) в `OUTER JOIN` столбец из USING некорректно разрешался в `t1.a`, показывая 0/NULL для строк из правой таблицы без соответствия в левой. Теперь идентификаторы из предложения USING всегда разрешаются в объединённый столбец, тогда как квалифицированные идентификаторы разрешаются в необъединённые столбцы, независимо от того, какие другие идентификаторы присутствуют в запросе. Например: ```sql SELECT a, t1.a, t2.a FROM (SELECT 1 as a WHERE 0) t1 FULL JOIN (SELECT 2 as a) t2 USING (a) -- Before: a=0, t1.a=0, t2.a=2 (incorrect - 'a' resolved to t1.a) -- After: a=2, t1.a=0, t2.a=2 (correct - 'a' is coalesced). [#80848](https://github.com/ClickHouse/ClickHouse/pull/80848) ([Vladimir Cherkasov](https://github.com/vdimir)). +* Увеличено окно дедупликации в реплицируемых таблицах до 10000. Это полностью совместимое изменение, но можно представить сценарии, когда оно может привести к высокому потреблению ресурсов при наличии большого количества таблиц. [#86820](https://github.com/ClickHouse/ClickHouse/pull/86820) ([Sema Checherinda](https://github.com/CheSema)). #### Новая возможность -* Теперь пользователи могут использовать NATS JetStream для потребления сообщений, задавая новые настройки `nats_stream` и `nats_consumer` для движка NATS. [#84799](https://github.com/ClickHouse/ClickHouse/pull/84799) ([Dmitry Novikov](https://github.com/dmitry-sles-novikov)). +* Теперь пользователи могут использовать NATS JetStream для потребления сообщений, указывая новые параметры `nats_stream` и `nats_consumer` для движка NATS. [#84799](https://github.com/ClickHouse/ClickHouse/pull/84799) ([Dmitry Novikov](https://github.com/dmitry-sles-novikov)). * Добавлена поддержка аутентификации и SSL в табличной функции `arrowFlight`. [#87120](https://github.com/ClickHouse/ClickHouse/pull/87120) ([Vitaly Baranov](https://github.com/vitlibar)). -* Добавлен новый параметр для движка таблицы `S3` и табличной функции `s3` с именем `storage_class_name`, который позволяет указать режим Intelligent-Tiering, поддерживаемый AWS. Поддерживается как в формате ключ-значение, так и в позиционном (устаревшем) формате. [#87122](https://github.com/ClickHouse/ClickHouse/pull/87122) ([alesapin](https://github.com/alesapin)). -* `ALTER UPDATE` для движка таблицы Iceberg. [#86059](https://github.com/ClickHouse/ClickHouse/pull/86059) ([scanhex12](https://github.com/scanhex12)). -* Добавлена системная таблица `iceberg_metadata_log` для получения файлов метаданных Iceberg во время выполнения запросов SELECT. [#86152](https://github.com/ClickHouse/ClickHouse/pull/86152) ([scanhex12](https://github.com/scanhex12)). -* Таблицы `Iceberg` и `DeltaLake` поддерживают пользовательскую конфигурацию дисков через настройку `disk` на уровне хранилища. [#86778](https://github.com/ClickHouse/ClickHouse/pull/86778) ([scanhex12](https://github.com/scanhex12)). -* Добавлена поддержка Azure для дисков для озер данных. [#87173](https://github.com/ClickHouse/ClickHouse/pull/87173) ([scanhex12](https://github.com/scanhex12)). -* Добавлена поддержка каталога `Unity` поверх хранилища Azure Blob Storage. [#80013](https://github.com/ClickHouse/ClickHouse/pull/80013) ([Smita Kulkarni](https://github.com/SmitaRKulkarni)). +* Добавлен новый параметр `storage_class_name` для движка таблиц `S3` и табличной функции `s3`, который позволяет указывать режим Intelligent-Tiering, поддерживаемый AWS. Поддерживается как в формате ключ-значение, так и в позиционном (устаревшем) формате. [#87122](https://github.com/ClickHouse/ClickHouse/pull/87122) ([alesapin](https://github.com/alesapin)). +* `ALTER UPDATE` для движка таблиц Iceberg. [#86059](https://github.com/ClickHouse/ClickHouse/pull/86059) ([scanhex12](https://github.com/scanhex12)). +* Добавлена системная таблица `iceberg_metadata_log` для получения файлов метаданных Iceberg во время выполнения операторов SELECT. [#86152](https://github.com/ClickHouse/ClickHouse/pull/86152) ([scanhex12](https://github.com/scanhex12)). +* Таблицы `Iceberg` и `DeltaLake` поддерживают пользовательскую конфигурацию диска с помощью настройки хранилища `disk`. [#86778](https://github.com/ClickHouse/ClickHouse/pull/86778) ([scanhex12](https://github.com/scanhex12)). +* Добавлена поддержка Azure для дисков Data Lake. [#87173](https://github.com/ClickHouse/ClickHouse/pull/87173) ([scanhex12](https://github.com/scanhex12)). +* Поддержка каталога `Unity` на базе хранилища Azure Blob Storage. [#80013](https://github.com/ClickHouse/ClickHouse/pull/80013) ([Smita Kulkarni](https://github.com/SmitaRKulkarni)). * Добавлена поддержка дополнительных форматов (`ORC`, `Avro`) при записи в `Iceberg`. Это закрывает [#86179](https://github.com/ClickHouse/ClickHouse/issues/86179). [#87277](https://github.com/ClickHouse/ClickHouse/pull/87277) ([scanhex12](https://github.com/scanhex12)). -* Добавлена новая системная таблица `database_replicas` с информацией о репликах баз данных. [#83408](https://github.com/ClickHouse/ClickHouse/pull/83408) ([Konstantин Morозов](https://github.com/k-morozov)). -* Добавлена функция `arrayExcept`, которая вычитает из одного массива (как множества) элементы другого. [#82368](https://github.com/ClickHouse/ClickHouse/pull/82368) ([Joanna Hulboj](https://github.com/jh0x)). -* Добавлена новая таблица `system.aggregated_zookeeper_log`. Таблица содержит статистику по операциям ZooKeeper (например, количество операций, средняя задержка, ошибки), сгруппированную по идентификатору сессии, родительскому пути и типу операции; данные периодически сбрасываются на диск. [#85102](https://github.com/ClickHouse/ClickHouse/pull/85102) [#87208](https://github.com/ClickHouse/ClickHouse/pull/87208) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). -* Новая функция `isValidASCII`. Возвращает 1, если входная строка или значение типа FixedString содержит только байты ASCII (0x00–0x7F), в противном случае — 0. Закрывает [#85377](https://github.com/ClickHouse/ClickHouse/issues/85377). ... [#85786](https://github.com/ClickHouse/ClickHouse/pull/85786) ([rajat mohan](https://github.com/rajatmohan22)). -* Логические настройки могут указываться без аргументов, например, `SET use_query_cache;`, что эквивалентно установке значения в true. [#85800](https://github.com/ClickHouse/ClickHouse/pull/85800) ([thraeka](https://github.com/thraeka)). -* Новые параметры конфигурации: `logger.startupLevel` и `logger.shutdownLevel` позволяют переопределять уровень логирования при запуске и завершении работы ClickHouse соответственно. [#85967](https://github.com/ClickHouse/ClickHouse/pull/85967) ([Lennard Eijsackers](https://github.com/Blokje5)). -* Агрегатные функции `timeSeriesChangesToGrid` и `timeSeriesResetsToGrid`. Ведут себя аналогично `timeSeriesRateToGrid`, принимая параметры начальной и конечной меток времени, шага и окна look back, а также два аргумента для меток времени и значений, но при этом требуют как минимум одну выборку на окно вместо двух. Вычисляют PromQL `changes`/`resets`, подсчитывая количество изменений или уменьшений значения выборки в указанном окне для каждой метки времени во временной сетке, определённой параметрами. Тип возвращаемого значения — `Array(Nullable(Float64))`. [#86010](https://github.com/ClickHouse/ClickHouse/pull/86010) ([Stephen Chi](https://github.com/stephchi0)). -* Позволяет пользователям создавать временные представления с синтаксисом, аналогичным синтаксису временных таблиц (`CREATE TEMPORARY VIEW`). [#86432](https://github.com/ClickHouse/ClickHouse/pull/86432) ([Aly Kafoury](https://github.com/AlyHKafoury)). -* В таблицу `system.warnings` добавлены предупреждения об использовании CPU и памяти. [#86838](https://github.com/ClickHouse/ClickHouse/pull/86838) ([Bharat Nallan](https://github.com/bharatnc)). -* Реализована поддержка индикатора `oneof` во входных данных `Protobuf`. Для указания наличия поля из oneof может использоваться специальный столбец. Если сообщение содержит [oneof](https://protobuf.dev/programming-guides/proto3/#oneof) и установлен `input_format_protobuf_oneof_presence`, ClickHouse заполняет столбец, который указывает, какое поле oneof было найдено. [#82885](https://github.com/ClickHouse/ClickHouse/pull/82885) ([Ilya Golshtein](https://github.com/ilejn)). -* Улучшено профилирование выделения памяти на основе внутреннего инструментария jemalloc. Глобальный профилировщик jemalloc теперь можно включить с помощью параметра конфигурации `jemalloc_enable_global_profiler`. Выборочно отбираемые глобальные операции выделения и освобождения памяти могут сохраняться в `system.trace_log` с типом `JemallocSample` при включении параметра конфигурации `jemalloc_collect_global_profile_samples_in_trace_log`. Профилирование jemalloc теперь можно включать для каждого запроса отдельно с помощью настройки `jemalloc_enable_profiler`. Сохранение выборок в `system.trace_log` можно управлять по каждому запросу с помощью настройки `jemalloc_collect_profile_samples_in_trace_log`. Обновлён jemalloc до более новой версии. [#85438](https://github.com/ClickHouse/ClickHouse/pull/85438) ([Antonio Andelic](https://github.com/antonio2368)). -* Новый параметр, который удаляет файлы при удалении таблиц Iceberg. Это закрывает [#86211](https://github.com/ClickHouse/ClickHouse/issues/86211). [#86501](https://github.com/ClickHouse/ClickHouse/pull/86501) ([scanhex12](https://github.com/scanhex12)). - - - -#### Экспериментальные функции -* Инвертированный текстовый индекс был переработан с нуля, чтобы масштабироваться для наборов данных, которые не помещаются в оперативную память. [#86485](https://github.com/ClickHouse/ClickHouse/pull/86485) ([Anton Popov](https://github.com/CurtizJ)). -* Оптимизация порядка `JOIN` теперь использует статистику. Функцию можно включить, установив `allow_statistics_optimize = 1` и `query_plan_optimize_join_order_limit = 10`. [#86822](https://github.com/ClickHouse/ClickHouse/pull/86822) ([Han Fei](https://github.com/hanfei1991)). -* Добавлена поддержка `alter table ... materialize statistics all`, который материализует всю статистику таблицы. [#87197](https://github.com/ClickHouse/ClickHouse/pull/87197) ([Han Fei](https://github.com/hanfei1991)). +* Добавлена новая системная таблица `database_replicas` с информацией о репликах баз данных. [#83408](https://github.com/ClickHouse/ClickHouse/pull/83408) ([Konstantin Morozov](https://github.com/k-morozov)). +* Добавлена функция `arrayExcept`, которая вычитает элементы одного массива из другого, рассматривая их как множества. [#82368](https://github.com/ClickHouse/ClickHouse/pull/82368) ([Joanna Hulboj](https://github.com/jh0x)). +* Добавлена новая таблица `system.aggregated_zookeeper_log`. Таблица содержит статистику (например, количество операций, среднюю задержку, ошибки) операций ZooKeeper, сгруппированных по идентификатору сессии, родительскому пути и типу операции, а её содержимое периодически сбрасывается на диск. [#85102](https://github.com/ClickHouse/ClickHouse/pull/85102) [#87208](https://github.com/ClickHouse/ClickHouse/pull/87208) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). +* Новая функция `isValidASCII`. Возвращает 1, если входная строка или FixedString содержит только ASCII-байты (0x00–0x7F), иначе — 0. Закрывает [#85377](https://github.com/ClickHouse/ClickHouse/issues/85377). ... [#85786](https://github.com/ClickHouse/ClickHouse/pull/85786) ([rajat mohan](https://github.com/rajatmohan22)). +* Булевы настройки можно задавать без аргументов, например: `SET use_query_cache;`, что равнозначно установке значения true. [#85800](https://github.com/ClickHouse/ClickHouse/pull/85800) ([thraeka](https://github.com/thraeka)). +* Новые параметры конфигурации `logger.startupLevel` и `logger.shutdownLevel` позволяют переопределять уровень логирования на время запуска и завершения работы ClickHouse соответственно. [#85967](https://github.com/ClickHouse/ClickHouse/pull/85967) ([Lennard Eijsackers](https://github.com/Blokje5)). +* Агрегатные функции `timeSeriesChangesToGrid` и `timeSeriesResetsToGrid`. Ведут себя аналогично `timeSeriesRateToGrid`, принимая параметры начальной и конечной меток времени, шага и окна ретроспективного просмотра (look back window), а также два аргумента — для меток времени и значений, но требуя как минимум один сэмпл на окно вместо двух. Вычисляют PromQL `changes`/`resets`, подсчитывая количество раз, когда значение сэмпла изменяется или уменьшается в указанном окне для каждой метки времени во временной сетке, определённой параметрами. Тип возвращаемого значения — `Array(Nullable(Float64))`. [#86010](https://github.com/ClickHouse/ClickHouse/pull/86010) ([Stephen Chi](https://github.com/stephchi0)). +* Позволяет пользователям создавать временные представления с синтаксисом, похожим на синтаксис временных таблиц (`CREATE TEMPORARY VIEW`). [#86432](https://github.com/ClickHouse/ClickHouse/pull/86432) ([Aly Kafoury](https://github.com/AlyHKafoury)). +* В таблицу `system.warnings` добавлены предупреждения о потреблении CPU и памяти. [#86838](https://github.com/ClickHouse/ClickHouse/pull/86838) ([Bharat Nallan](https://github.com/bharatnc)). +* Поддержка индикатора `oneof` во входных данных `Protobuf`. Для указания того, какой вариант oneof присутствует, может использоваться специальный столбец. Если сообщение содержит [oneof](https://protobuf.dev/programming-guides/proto3/#oneof) и установлен `input_format_protobuf_oneof_presence`, ClickHouse заполняет столбец, который указывает, какое поле oneof было найдено. [#82885](https://github.com/ClickHouse/ClickHouse/pull/82885) ([Ilya Golshtein](https://github.com/ilejn)). +* Улучшено профилирование выделения памяти на основе внутренних инструментов jemalloc. Глобальный профилировщик jemalloc теперь можно включить с помощью конфигурации `jemalloc_enable_global_profiler`. Выборочно отобранные глобальные операции выделения и освобождения памяти могут сохраняться в `system.trace_log` с типом `JemallocSample` при включении конфигурации `jemalloc_collect_global_profile_samples_in_trace_log`. Профилирование jemalloc теперь можно включать независимо для каждого запроса с помощью настройки `jemalloc_enable_profiler`. Сохранением выборок в `system.trace_log` можно управлять для каждого запроса с помощью настройки `jemalloc_collect_profile_samples_in_trace_log`. Обновлён jemalloc до новой версии. [#85438](https://github.com/ClickHouse/ClickHouse/pull/85438) ([Antonio Andelic](https://github.com/antonio2368)). +* Новая настройка для удаления файлов при удалении (DROP) таблиц Iceberg. Это закрывает проблему [#86211](https://github.com/ClickHouse/ClickHouse/issues/86211). [#86501](https://github.com/ClickHouse/ClickHouse/pull/86501) ([scanhex12](https://github.com/scanhex12)). +#### Экспериментальная функциональность +* Инвертированный текстовый индекс был полностью переработан и теперь масштабируется на наборы данных, которые не помещаются в ОЗУ. [#86485](https://github.com/ClickHouse/ClickHouse/pull/86485) ([Anton Popov](https://github.com/CurtizJ)). +* Переупорядочивание `JOIN` теперь использует статистику. Функцию можно включить, установив `allow_statistics_optimize = 1` и `query_plan_optimize_join_order_limit = 10`. [#86822](https://github.com/ClickHouse/ClickHouse/pull/86822) ([Han Fei](https://github.com/hanfei1991)). +* Поддержка `alter table ... materialize statistics all` позволяет материализовать всю статистику таблицы. [#87197](https://github.com/ClickHouse/ClickHouse/pull/87197) ([Han Fei](https://github.com/hanfei1991)). #### Повышение производительности -* Добавлена поддержка фильтрации частей данных с использованием skip-индексов при чтении для сокращения ненужных чтений индексов. Управляется новой настройкой `use_skip_indexes_on_data_read` (по умолчанию выключена). Это решает проблему [#75774](https://github.com/ClickHouse/ClickHouse/issues/75774). Также включает общую подготовительную работу, совместную с [#81021](https://github.com/ClickHouse/ClickHouse/issues/81021). [#81526](https://github.com/ClickHouse/ClickHouse/pull/81526) ([Amos Bird](https://github.com/amosbird)). -* Добавлена оптимизация порядка JOIN, которая может автоматически переупорядочивать JOIN для повышения производительности (управляется настройкой `query_plan_optimize_join_order_limit`). Обратите внимание, что оптимизация порядка JOIN в настоящее время имеет ограниченную поддержку статистики и в основном опирается на оценки количества строк от движков хранения — более продвинутый сбор статистики и оценка кардинальности будут добавлены в будущих релизах. **Если после обновления вы сталкиваетесь с проблемами с запросами JOIN**, вы можете временно отключить новую реализацию, установив `SET query_plan_use_new_logical_join_step = 0`, и сообщить о проблеме для дальнейшего расследования. **Примечание о разрешении идентификаторов из предложения USING**: Изменено разрешение объединённого столбца из предложения `OUTER JOIN ... USING` для большей согласованности: ранее при выборе и столбца из USING, и квалифицированных столбцов (`a, t1.a, t2.a`) в OUTER JOIN столбец из USING ошибочно разрешался в `t1.a`, показывая 0/NULL для строк из правой таблицы без соответствия в левой. Теперь идентификаторы из предложения USING всегда разрешаются в объединённый (coalesced) столбец, в то время как квалифицированные идентификаторы разрешаются в необъединённые столбцы, независимо от того, какие ещё идентификаторы присутствуют в запросе. Например: - SELECT a, t1.a, t2.a - FROM (SELECT 1 as a WHERE 0) t1 - FULL JOIN (SELECT 2 as a) t2 USING (a) - -- Раньше: a=0, t1.a=0, t2.a=2 (некорректно — 'a' разрешён в t1.a) - -- Теперь: a=2, t1.a=0, t2.a=2 (корректно — 'a' объединён). [#80848](https://github.com/ClickHouse/ClickHouse/pull/80848) ([Vladimir Cherkasov](https://github.com/vdimir)). +* Добавлена поддержка фильтрации частей данных с использованием skip-индексов при чтении для сокращения лишних чтений индексов. Управляется новым параметром настройки `use_skip_indexes_on_data_read` (по умолчанию отключён). Это решает задачу [#75774](https://github.com/ClickHouse/ClickHouse/issues/75774). Включает общую подготовительную работу, используемую также в [#81021](https://github.com/ClickHouse/ClickHouse/issues/81021). [#81526](https://github.com/ClickHouse/ClickHouse/pull/81526) ([Amos Bird](https://github.com/amosbird)). +* Добавлена оптимизация порядка JOIN, которая может автоматически переставлять JOINы для повышения производительности (управляется настройкой `query_plan_optimize_join_order_limit`). Note that the join order optimization currently has limited statistics support and primarily relies on row count estimates from storage engines - more sophisticated statistics collection and cardinality estimation will be added in future releases. **If you encounter issues with JOIN queries after upgrading**, you can temporarily disable the new implementation by setting `SET query_plan_use_new_logical_join_step = 0` and report the issue for investigation. **Note about resolution of identifiers from USING clause**: Changed resolving of the coalesced column from `OUTER JOIN ... USING` clause to be more consistent: previously, when selecting both the USING column and qualified columns (`a, t1.a, t2.a`) in a OUTER JOIN, the USING column would incorrectly be resolved to `t1.a`, showing 0/NULL for rows from the right table with no left match. Now identifiers from USING clause are always resolved to the coalesced column, while qualified identifiers resolve to the non-coalesced columns, regardless of which other identifiers are present in the query. For example: ```sql SELECT a, t1.a, t2.a FROM (SELECT 1 as a WHERE 0) t1 FULL JOIN (SELECT 2 as a) t2 USING (a) -- Before: a=0, t1.a=0, t2.a=2 (incorrect - 'a' resolved to t1.a) -- After: a=2, t1.a=0, t2.a=2 (correct - 'a' is coalesced). [#80848](https://github.com/ClickHouse/ClickHouse/pull/80848) ([Vladimir Cherkasov](https://github.com/vdimir)). * Распределённый `INSERT SELECT` для озёр данных. [#86783](https://github.com/ClickHouse/ClickHouse/pull/86783) ([scanhex12](https://github.com/scanhex12)). * Улучшена оптимизация PREWHERE для условий вида `func(primary_column) = 'xx'` и `column in (xxx)`. [#85529](https://github.com/ClickHouse/ClickHouse/pull/85529) ([李扬](https://github.com/taiyang-li)). -* Реализовано преобразование JOIN: 1. Преобразовывать `LEFT ANY JOIN` и `RIGHT ANY JOIN` в `SEMI`/`ANTI` JOIN, если условие фильтра всегда ложно для совпавших или несовпавших строк. Эта оптимизация управляется новым параметром `query_plan_convert_any_join_to_semi_or_anti_join`. 2. Преобразовывать `FULL ALL JOIN` в `LEFT ALL` или `RIGHT ALL` JOIN, если условие фильтра всегда ложно для несовпавших строк с одной из сторон соединения. [#86028](https://github.com/ClickHouse/ClickHouse/pull/86028) ([Dmitry Novik](https://github.com/novikd)). -* Повышена производительность вертикальных слияний после выполнения операции lightweight delete. [#86169](https://github.com/ClickHouse/ClickHouse/pull/86169) ([Anton Popov](https://github.com/CurtizJ)). -* Производительность `HashJoin` немного улучшена в случае `LEFT/RIGHT` JOIN с большим количеством несоответствующих строк. [#86312](https://github.com/ClickHouse/ClickHouse/pull/86312) ([Nikita Taranov](https://github.com/nickitat)). -* Поразрядная сортировка (radix sort): помогает компилятору эффективнее использовать SIMD и выполнять более эффективную предвыборку данных (prefetching). Использует динамическую диспетчеризацию для программной предвыборки только на процессорах Intel. Продолжение работы @taiyang-li в [https://github.com/ClickHouse/ClickHouse/pull/77029](https://github.com/ClickHouse/ClickHouse/pull/77029). [#86378](https://github.com/ClickHouse/ClickHouse/pull/86378) ([Raúl Marín](https://github.com/Algunenano)). -* Повышает производительность коротких запросов с большим количеством фрагментов в таблицах (за счет оптимизации `MarkRanges` с использованием `devector` вместо `deque`). [#86933](https://github.com/ClickHouse/ClickHouse/pull/86933) ([Azat Khuzhin](https://github.com/azat)). -* Улучшена производительность применения патч-частей в режиме JOIN. [#87094](https://github.com/ClickHouse/ClickHouse/pull/87094) ([Anton Popov](https://github.com/CurtizJ)). -* Добавлена настройка `query_condition_cache_selectivity_threshold` (значение по умолчанию: 1.0), которая не помещает в кэш условий запроса результаты сканирования предикатов с низкой селективностью. Это позволяет уменьшить потребление памяти кэшем условий запроса ценой более низкого коэффициента попаданий в кэш. [#86076](https://github.com/ClickHouse/ClickHouse/pull/86076) ([zhongyuankai](https://github.com/zhongyuankai)). -* Уменьшено потребление памяти при записи в Iceberg. [#86544](https://github.com/ClickHouse/ClickHouse/pull/86544) ([scanhex12](https://github.com/scanhex12)). - - - - - -#### Улучшение - -* Добавлена поддержка записи нескольких файлов данных в Iceberg в рамках одной операции вставки. Добавлены новые настройки `iceberg_insert_max_rows_in_data_file` и `iceberg_insert_max_bytes_in_data_file` для управления ограничениями. [#86275](https://github.com/ClickHouse/ClickHouse/pull/86275) ([scanhex12](https://github.com/scanhex12)). -* Добавлены ограничения на количество строк/байтов для создаваемых при вставке файлов данных в Delta Lake. Ограничения задаются настройками `delta_lake_insert_max_rows_in_data_file` и `delta_lake_insert_max_bytes_in_data_file`. [#86357](https://github.com/ClickHouse/ClickHouse/pull/86357) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Добавлена поддержка большего числа типов данных для партиционирования при записи в Iceberg. Тем самым закрывается [#86206](https://github.com/ClickHouse/ClickHouse/issues/86206). [#86298](https://github.com/ClickHouse/ClickHouse/pull/86298) ([scanhex12](https://github.com/scanhex12)). -* Сделать стратегию повторных попыток для S3 настраиваемой и добавить возможность горячей перезагрузки настроек диска S3 при изменении XML-файла конфигурации. [#82642](https://github.com/ClickHouse/ClickHouse/pull/82642) ([RinChanNOW](https://github.com/RinChanNOWWW)). -* Улучшен табличный движок S3(Azure)Queue, чтобы он продолжал работать при потере соединения с ZooKeeper без риска появления дубликатов. Требуется включить настройку S3Queue `use_persistent_processing_nodes` (ее можно изменить с помощью `ALTER TABLE MODIFY SETTING`). [#85995](https://github.com/ClickHouse/ClickHouse/pull/85995) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Вы можете использовать параметры запроса после ключевого слова `TO` при создании материализованного представления, например: `CREATE MATERIALIZED VIEW mv TO {to_table:Identifier} AS SELECT * FROM src_table`. [#84899](https://github.com/ClickHouse/ClickHouse/pull/84899) ([Diskein](https://github.com/Diskein)). -* Выводить более понятные инструкции пользователям при указании некорректных настроек для движка таблицы `Kafka2`. [#83701](https://github.com/ClickHouse/ClickHouse/pull/83701) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). -* Теперь нельзя указывать часовые пояса для типа `Time` (в этом не было смысла). [#84689](https://github.com/ClickHouse/ClickHouse/pull/84689) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* Упростили логику, связанную с разбором Time/Time64 в режиме `best_effort`, и устранили некоторые ошибки. [#84730](https://github.com/ClickHouse/ClickHouse/pull/84730) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* Добавлена функция `deltaLakeAzureCluster` (аналогичная `deltaLakeAzure` для кластерного режима) и функция `deltaLakeS3Cluster` (псевдоним `deltaLakeCluster`). Устраняет проблему [#85358](https://github.com/ClickHouse/ClickHouse/issues/85358). [#85547](https://github.com/ClickHouse/ClickHouse/pull/85547) ([Smita Kulkarni](https://github.com/SmitaRKulkarni)). -* Применять настройку `azure_max_single_part_copy_size` для обычных операций копирования так же, как и для резервного копирования. [#85767](https://github.com/ClickHouse/ClickHouse/pull/85767) ([Ilya Golshtein](https://github.com/ilejn)). -* Замедлена работа потоков клиента S3 при повторяемых ошибках в хранилище объектов S3. Теперь действие предыдущего параметра `backup_slow_all_threads_after_retryable_s3_error` распространено на диски S3, а сам параметр переименован в более общий `s3_slow_all_threads_after_retryable_error`. [#85918](https://github.com/ClickHouse/ClickHouse/pull/85918) ([Julia Kartseva](https://github.com/jkartseva)). -* Настройки allow_experimental_variant/dynamic/json и enable_variant/dynamic/json помечены как устаревшие. Теперь все три типа включены безусловно. [#85934](https://github.com/ClickHouse/ClickHouse/pull/85934) ([Pavel Kruglov](https://github.com/Avogar)). -* Реализована поддержка фильтрации по полному URL-адресу (директива `full_url`) в `http_handlers` (включая схему и host:port). [#86155](https://github.com/ClickHouse/ClickHouse/pull/86155) ([Azat Khuzhin](https://github.com/azat)). +* Реализовано переписывание операций JOIN: 1. Преобразование `LEFT ANY JOIN` и `RIGHT ANY JOIN` в `SEMI`/`ANTI` JOIN, если условие фильтрации всегда ложно для совпавших или несовпавших строк. Эта оптимизация управляется новой настройкой `query_plan_convert_any_join_to_semi_or_anti_join`. 2. Преобразование `FULL ALL JOIN` в `LEFT ALL` или `RIGHT ALL` JOIN, если условие фильтрации всегда ложно для несовпавших строк с одной из сторон. [#86028](https://github.com/ClickHouse/ClickHouse/pull/86028) ([Dmitry Novik](https://github.com/novikd)). +* Улучшена производительность вертикальных слияний после выполнения операции LIGHTWEIGHT DELETE. [#86169](https://github.com/ClickHouse/ClickHouse/pull/86169) ([Anton Popov](https://github.com/CurtizJ)). +* Производительность `HashJoin` немного улучшена в случае, когда операция `LEFT/RIGHT JOIN` возвращает большое количество строк без соответствия. [#86312](https://github.com/ClickHouse/ClickHouse/pull/86312) ([Nikita Taranov](https://github.com/nickitat)). +* Поразрядная сортировка (radix sort): помогает компилятору использовать SIMD и эффективнее выполнять предвыборку данных. Использует динамическую диспетчеризацию, чтобы применять программную предвыборку только на процессорах Intel. Продолжение работы @taiyang-li в [https://github.com/ClickHouse/ClickHouse/pull/77029](https://github.com/ClickHouse/ClickHouse/pull/77029). [#86378](https://github.com/ClickHouse/ClickHouse/pull/86378) ([Raúl Marín](https://github.com/Algunenano)). +* Улучшена производительность коротких запросов к таблицам с большим количеством частей (за счет оптимизации `MarkRanges` с использованием `devector` вместо `deque`). [#86933](https://github.com/ClickHouse/ClickHouse/pull/86933) ([Azat Khuzhin](https://github.com/azat)). +* Улучшена производительность применения частей патча в режиме join. [#87094](https://github.com/ClickHouse/ClickHouse/pull/87094) ([Anton Popov](https://github.com/CurtizJ)). +* Добавлена настройка `query_condition_cache_selectivity_threshold` (значение по умолчанию: 1.0), которая не помещает в кэш условий запроса результаты сканирования предикатов с низкой селективностью. Это позволяет уменьшить потребление памяти кэшем условий запроса ценой ухудшения коэффициента попаданий в кэш. [#86076](https://github.com/ClickHouse/ClickHouse/pull/86076) ([zhongyuankai](https://github.com/zhongyuankai)). +* Снижено использование памяти при записи в Iceberg. [#86544](https://github.com/ClickHouse/ClickHouse/pull/86544) ([scanhex12](https://github.com/scanhex12)). + +#### Улучшения + +* Реализована поддержка записи нескольких файлов данных в Iceberg за одну вставку. Добавлены новые настройки `iceberg_insert_max_rows_in_data_file` и `iceberg_insert_max_bytes_in_data_file` для задания ограничений. [#86275](https://github.com/ClickHouse/ClickHouse/pull/86275) ([scanhex12](https://github.com/scanhex12)). +* Добавлено ограничение на количество строк/байт в файлах данных, вставляемых в Delta Lake. Параметры задаются настройками `delta_lake_insert_max_rows_in_data_file` и `delta_lake_insert_max_bytes_in_data_file`. [#86357](https://github.com/ClickHouse/ClickHouse/pull/86357) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Добавлена поддержка большего числа типов партиционирования при записи в Iceberg. Это закрывает [#86206](https://github.com/ClickHouse/ClickHouse/issues/86206). [#86298](https://github.com/ClickHouse/ClickHouse/pull/86298) ([scanhex12](https://github.com/scanhex12)). +* Сделана настраиваемой стратегия повторных попыток для S3 и обеспечена возможность горячей перезагрузки настроек S3-диска при изменении XML-файла конфигурации. [#82642](https://github.com/ClickHouse/ClickHouse/pull/82642) ([RinChanNOW](https://github.com/RinChanNOWWW)). +* Улучшен движок таблицы S3(Azure)Queue, чтобы он мог переживать потерю соединения с ZooKeeper без возникновения дубликатов. Требуется включить настройку S3Queue `use_persistent_processing_nodes` (можно изменить через `ALTER TABLE MODIFY SETTING`). [#85995](https://github.com/ClickHouse/ClickHouse/pull/85995) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Вы можете использовать параметры запроса после `TO` при создании материализованного представления, например: `CREATE MATERIALIZED VIEW mv TO {to_table:Identifier} AS SELECT * FROM src_table`. [#84899](https://github.com/ClickHouse/ClickHouse/pull/84899) ([Diskein](https://github.com/Diskein)). +* Выводить более понятные инструкции для пользователей при указании некорректных настроек для движка таблицы `Kafka2`. [#83701](https://github.com/ClickHouse/ClickHouse/pull/83701) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). +* Теперь нельзя указывать часовые пояса для типа `Time` (что и не имело смысла). [#84689](https://github.com/ClickHouse/ClickHouse/pull/84689) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* Упростили (и избежали некоторых ошибок) логику, связанную с парсингом Time/Time64 в режиме `best_effort`. [#84730](https://github.com/ClickHouse/ClickHouse/pull/84730) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* Добавлены функции `deltaLakeAzureCluster` (аналогичная `deltaLakeAzure` для кластерного режима) и `deltaLakeS3Cluster` (синоним `deltaLakeCluster`). Исправлена проблема [#85358](https://github.com/ClickHouse/ClickHouse/issues/85358). [#85547](https://github.com/ClickHouse/ClickHouse/pull/85547) ([Smita Kulkarni](https://github.com/SmitaRKulkarni)). +* Применять настройку `azure_max_single_part_copy_size` для обычных операций копирования так же, как для резервного копирования. [#85767](https://github.com/ClickHouse/ClickHouse/pull/85767) ([Ilya Golshtein](https://github.com/ilejn)). +* Замедлять потоки клиента S3 при повторяемых ошибках в S3 Object Storage. Это расширяет действие предыдущей настройки `backup_slow_all_threads_after_retryable_s3_error` на диски S3 и переименовывает её в более общую `s3_slow_all_threads_after_retryable_error`. [#85918](https://github.com/ClickHouse/ClickHouse/pull/85918) ([Julia Kartseva](https://github.com/jkartseva)). +* Настройки allow_experimental_variant/dynamic/json и enable_variant/dynamic/json помечены как устаревшие. Теперь все три типа всегда включены. [#85934](https://github.com/ClickHouse/ClickHouse/pull/85934) ([Pavel Kruglov](https://github.com/Avogar)). +* Добавлена поддержка фильтрации по полному URL (директива `full_url`) в `http_handlers` (включая схему и host:port). [#86155](https://github.com/ClickHouse/ClickHouse/pull/86155) ([Azat Khuzhin](https://github.com/azat)). * Добавлена новая настройка `allow_experimental_delta_lake_writes`. [#86180](https://github.com/ClickHouse/ClickHouse/pull/86180) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Исправлено обнаружение systemd в скрипте init.d (исправлена проверка «Install packages»). [#86187](https://github.com/ClickHouse/ClickHouse/pull/86187) ([Azat Khuzhin](https://github.com/azat)). -* Добавлена новая размерная метрика `startup_scripts_failure_reason`. Эта метрика нужна, чтобы различать разные типы ошибок, приводящих к сбою скриптов запуска. В частности, для целей оповещения необходимо различать временные (например, `MEMORY_LIMIT_EXCEEDED` или `KEEPER_EXCEPTION`) и постоянные ошибки. [#86202](https://github.com/ClickHouse/ClickHouse/pull/86202) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). -* Добавлена возможность опускать функцию `identity` для раздела (partition) таблицы Iceberg. [#86314](https://github.com/ClickHouse/ClickHouse/pull/86314) ([scanhex12](https://github.com/scanhex12)). -* Добавлена возможность включать JSON-логирование только для конкретного канала: для этого установите параметр `logger.formatting.channel` в одно из следующих значений: `syslog`/`console`/`errorlog`/`log`. [#86331](https://github.com/ClickHouse/ClickHouse/pull/86331) ([Azat Khuzhin](https://github.com/azat)). +* Исправлено определение systemd в скрипте init.d (исправлена проверка «Install packages»). [#86187](https://github.com/ClickHouse/ClickHouse/pull/86187) ([Azat Khuzhin](https://github.com/azat)). +* Добавлена новая метрика с размерностью `startup_scripts_failure_reason`. Эта метрика нужна, чтобы различать типы ошибок, приводящих к сбоям стартовых скриптов. В частности, для целей настройки оповещений необходимо различать временные (например, `MEMORY_LIMIT_EXCEEDED` или `KEEPER_EXCEPTION`) и постоянные ошибки. [#86202](https://github.com/ClickHouse/ClickHouse/pull/86202) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). +* Разрешено опускать функцию `identity` в определении партиции таблицы Iceberg. [#86314](https://github.com/ClickHouse/ClickHouse/pull/86314) ([scanhex12](https://github.com/scanhex12)). +* Добавлена возможность включать JSON‑логирование только для конкретного канала: для этого установите `logger.formatting.channel` в одно из следующих значений: `syslog`/`console`/`errorlog`/`log`. [#86331](https://github.com/ClickHouse/ClickHouse/pull/86331) ([Azat Khuzhin](https://github.com/azat)). * Теперь можно использовать нативные числа в `WHERE`. Они уже допускаются в качестве аргументов логических функций. Это упрощает оптимизации filter-push-down и move-to-prewhere. [#86390](https://github.com/ClickHouse/ClickHouse/pull/86390) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). -* Исправлена ошибка при выполнении `SYSTEM DROP REPLICA` для каталога с повреждёнными метаданными. [#86391](https://github.com/ClickHouse/ClickHouse/pull/86391) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). -* Добавлены дополнительные попытки повторной проверки доступа к диску (`skip_access_check = 0`) в Azure, поскольку предоставление доступа может занимать довольно много времени. [#86419](https://github.com/ClickHouse/ClickHouse/pull/86419) ([Alexander Tokmakov](https://github.com/tavplubix)). -* Интервал устаревания в функциях `timeSeries*()` теперь левосторонне открыт и правосторонне закрыт. [#86588](https://github.com/ClickHouse/ClickHouse/pull/86588) ([Vitaly Baranov](https://github.com/vitlibar)). +* Исправлена ошибка при выполнении команды `SYSTEM DROP REPLICA` для каталога с повреждёнными метаданными. [#86391](https://github.com/ClickHouse/ClickHouse/pull/86391) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). +* Добавлены дополнительные попытки проверки доступа к диску (`skip_access_check = 0`) в Azure, поскольку предоставление доступа может занимать довольно много времени. [#86419](https://github.com/ClickHouse/ClickHouse/pull/86419) ([Alexander Tokmakov](https://github.com/tavplubix)). +* Окно устаревания в функциях `timeSeries*()` сделано левооткрытым и правозакрытым. [#86588](https://github.com/ClickHouse/ClickHouse/pull/86588) ([Vitaly Baranov](https://github.com/vitlibar)). * Добавлены события профилирования `FailedInternal*Query`. [#86627](https://github.com/ClickHouse/ClickHouse/pull/86627) ([Shane Andrade](https://github.com/mauidude)). -* Исправлена обработка пользователей с точкой в имени пользователя при добавлении через конфигурационный файл. [#86633](https://github.com/ClickHouse/ClickHouse/pull/86633) ([Mikhail Koviazin](https://github.com/mkmkme)). -* Добавлена асинхронная метрика использования памяти в запросах (`QueriesMemoryUsage` и `QueriesPeakMemoryUsage`). [#86669](https://github.com/ClickHouse/ClickHouse/pull/86669) ([Azat Khuzhin](https://github.com/azat)). -* Вы можете использовать флаг `clickhouse-benchmark --precise` для более точного измерения QPS и других метрик по интервалам. Это помогает получать стабильные значения QPS в случаях, когда длительность запросов сопоставима с интервалом отчетности `--delay D`. [#86684](https://github.com/ClickHouse/ClickHouse/pull/86684) ([Sergei Trifonov](https://github.com/serxa)). -* Сделать значения nice для потоков Linux настраиваемыми, чтобы можно было назначать отдельным потокам (слияние/мутация, запрос, материализованное представление, клиент ZooKeeper) более высокий или более низкий приоритет. [#86703](https://github.com/ClickHouse/ClickHouse/pull/86703) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). -* Исправлена вводящая в заблуждение ошибка «specified upload does not exist», возникающая, когда исходное исключение теряется в ходе многокомпонентной загрузки из‑за условия гонки. [#86725](https://github.com/ClickHouse/ClickHouse/pull/86725) ([Julia Kartseva](https://github.com/jkartseva)). -* Ограничено описание плана запроса в запросе `EXPLAIN`. Описание больше не вычисляется для других запросов, кроме `EXPLAIN`. Добавлена настройка `query_plan_max_step_description_length`. [#86741](https://github.com/ClickHouse/ClickHouse/pull/86741) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). -* Добавлена возможность настраивать очередь ожидающих сигналов, чтобы снизить вероятность ошибки CANNOT_CREATE_TIMER (для профилировщиков запросов, `query_profiler_real_time_period_ns`/`query_profiler_cpu_time_period_ns`). Также добавлен сбор `SigQ` из `/proc/self/status` для интроспекции (если `ProcessSignalQueueSize` близко к `ProcessSignalQueueLimit`, то, скорее всего, будут возникать ошибки `CANNOT_CREATE_TIMER`). [#86760](https://github.com/ClickHouse/ClickHouse/pull/86760) ([Azat Khuzhin](https://github.com/azat)). -* Повышена производительность операции `RemoveRecursive` в Keeper. [#86789](https://github.com/ClickHouse/ClickHouse/pull/86789) ([Antonio Andelic](https://github.com/antonio2368)). -* Удалены лишние пробелы в `PrettyJSONEachRow` при выводе данных типа JSON. [#86819](https://github.com/ClickHouse/ClickHouse/pull/86819) ([Pavel Kruglov](https://github.com/Avogar)). -* Теперь записываем размеры блобов для `prefix.path` при удалении директории на обычном перезаписываемом диске. [#86908](https://github.com/ClickHouse/ClickHouse/pull/86908) ([alesapin](https://github.com/alesapin)). -* Добавлена поддержка тестов производительности для удалённых экземпляров ClickHouse, включая ClickHouse Cloud. Пример использования: `tests/performance/scripts/perf.py tests/performance/math.xml --runs 10 --user <username> --password <password> --host <hostname> --port <port> --secure`. [#86995](https://github.com/ClickHouse/ClickHouse/pull/86995) ([Raufs Dunamalijevs](https://github.com/rienath)). -* Соблюдать лимиты памяти в местах, где заведомо выделяется значительный (>16MiB) объем памяти (сортировка, асинхронные вставки, файловый лог). [#87035](https://github.com/ClickHouse/ClickHouse/pull/87035) ([Azat Khuzhin](https://github.com/azat)). -* Выбрасывать исключение, если при установке параметра `network_compression_method` указан неподдерживаемый универсальный кодек. [#87097](https://github.com/ClickHouse/ClickHouse/pull/87097) ([Robert Schulze](https://github.com/rschu1ze)). -* Системная таблица `system.query_cache` теперь возвращает *все* записи кэша результатов запросов, тогда как ранее она возвращала только общие записи или необщие записи того же пользователя и роли. Это корректно, поскольку необщие записи не должны раскрывать *результаты запросов*, тогда как `system.query_cache` возвращает *строки запросов*. Это делает поведение системной таблицы более похожим на `system.query_log`. [#87104](https://github.com/ClickHouse/ClickHouse/pull/87104) ([Robert Schulze](https://github.com/rschu1ze)). -* Включено укороченное вычисление для функции `parseDateTime`. [#87184](https://github.com/ClickHouse/ClickHouse/pull/87184) ([Pavel Kruglov](https://github.com/Avogar)). -* Добавлен новый столбец `statistics` в `system.parts_columns`. [#87259](https://github.com/ClickHouse/ClickHouse/pull/87259) ([Han Fei](https://github.com/hanfei1991)). - - - - - -#### Исправление ошибки (видимая пользователю неисправность в официальном стабильном релизе) - -* Результаты alter-запросов теперь проверяются только на узле-инициаторе для реплицируемых баз данных и таблиц с внутренней репликацией. Это устранит ситуации, когда уже зафиксированный alter-запрос мог зависать на других узлах. [#83849](https://github.com/ClickHouse/ClickHouse/pull/83849) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). -* Ограничивает количество задач каждого типа в `BackgroundSchedulePool`. Позволяет избежать ситуаций, когда все слоты заняты задачами одного типа, а задачи других типов простаивают. Также предотвращает взаимоблокировки, когда задачи ожидают друг друга. Управляется серверной настройкой `background_schedule_pool_max_parallel_tasks_per_type_ratio`. [#84008](https://github.com/ClickHouse/ClickHouse/pull/84008) ([Alexander Tokmakov](https://github.com/tavplubix)). -* Корректно завершайте работу таблиц при восстановлении реплики базы данных. Некорректное завершение приведёт к ошибке LOGICAL_ERROR для некоторых движков таблиц. [#84744](https://github.com/ClickHouse/ClickHouse/pull/84744) ([Antonio Andelic](https://github.com/antonio2368)). -* Проверять права доступа при генерации подсказок по исправлению опечаток в имени базы данных. [#85371](https://github.com/ClickHouse/ClickHouse/pull/85371) ([Dmitry Novik](https://github.com/novikd)). -* 1. LowCardinality для столбцов hive 2. Заполнять столбцы hive перед виртуальными столбцами (требуется для [https://github.com/ClickHouse/ClickHouse/pull/81040](https://github.com/ClickHouse/ClickHouse/pull/81040)) 3. LOGICAL_ERROR при пустом формате для hive [#85528](https://github.com/ClickHouse/ClickHouse/issues/85528) 4. Проверять, что столбцы партиционирования hive являются единственными столбцами 5. Проверять, что все столбцы hive указаны в схеме 6. Частично исправить работу parallel_replicas_cluster с hive 7. Использовать упорядоченный контейнер в extractkeyValuePairs для hive utils (требуется для [https://github.com/ClickHouse/ClickHouse/pull/81040](https://github.com/ClickHouse/ClickHouse/pull/81040)). [#85538](https://github.com/ClickHouse/ClickHouse/pull/85538) ([Arthur Passos](https://github.com/arthurpassos)). -* Предотвращена ненужная оптимизация первого аргумента в функциях `IN`, иногда приводившая к ошибкам при использовании отображения массивов (array mapping). [#85546](https://github.com/ClickHouse/ClickHouse/pull/85546) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* Отображение между идентификаторами источника Iceberg и именами Parquet не было скорректировано в соответствии со схемой при записи файла Parquet. В этом PR схема обрабатывается отдельно для каждого файла данных Iceberg, а не используется текущая. [#85829](https://github.com/ClickHouse/ClickHouse/pull/85829) ([Daniil Ivanik](https://github.com/divanik)). -* Исправлено раздельное определение размера файла и его открытие. Связано с [https://github.com/ClickHouse/ClickHouse/pull/33372](https://github.com/ClickHouse/ClickHouse/pull/33372), который был внесён в ответ на ошибку в ядрах Linux версий до `5.10`. [#85837](https://github.com/ClickHouse/ClickHouse/pull/85837) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* ClickHouse Keeper больше не завершается с ошибкой при запуске на системах, где IPv6 отключён на уровне ядра (например, RHEL с ipv6.disable=1). Теперь он пытается перейти на IPv4-слушатель, если не удалось запустить исходный IPv6-слушатель. [#85901](https://github.com/ClickHouse/ClickHouse/pull/85901) ([jskong1124](https://github.com/jskong1124)). +* Исправлена обработка пользователей, имя которых содержит точку, при добавлении через конфигурационный файл. [#86633](https://github.com/ClickHouse/ClickHouse/pull/86633) ([Mikhail Koviazin](https://github.com/mkmkme)). +* Добавлена асинхронная метрика для отслеживания использования памяти в запросах (`QueriesMemoryUsage` и `QueriesPeakMemoryUsage`). [#86669](https://github.com/ClickHouse/ClickHouse/pull/86669) ([Azat Khuzhin](https://github.com/azat)). +* Вы можете использовать флаг `clickhouse-benchmark --precise` для более точной отчётности по QPS и другим метрикам, вычисляемым по интервалам. Это помогает получать стабильные значения QPS в случае, если длительности запросов сопоставимы с интервалом отчётности `--delay D`. [#86684](https://github.com/ClickHouse/ClickHouse/pull/86684) ([Sergei Trifonov](https://github.com/serxa)). +* Сделать значения nice для потоков Linux настраиваемыми, чтобы можно было назначать отдельным потокам (merge/mutate, query, материализованное представление, клиент ZooKeeper) более высокий или низкий приоритет. [#86703](https://github.com/ClickHouse/ClickHouse/pull/86703) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). +* Исправлена вводящая в заблуждение ошибка с сообщением «specified upload does not exist», которая возникает, когда исходное исключение теряется при multipart-загрузке из-за состояния гонки. [#86725](https://github.com/ClickHouse/ClickHouse/pull/86725) ([Julia Kartseva](https://github.com/jkartseva)). +* Ограничена длина описания плана запроса в запросе `EXPLAIN`. Описание больше не вычисляется для запросов, отличных от `EXPLAIN`. Добавлена настройка `query_plan_max_step_description_length`. [#86741](https://github.com/ClickHouse/ClickHouse/pull/86741) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). +* Добавлена возможность настраивать параметры ожидающих сигналов, чтобы обойти CANNOT_CREATE_TIMER (для профилировщиков запросов, `query_profiler_real_time_period_ns`/`query_profiler_cpu_time_period_ns`). Также добавлен сбор `SigQ` из `/proc/self/status` для интроспекции (если `ProcessSignalQueueSize` близко к `ProcessSignalQueueLimit`, то вы, скорее всего, получите ошибки `CANNOT_CREATE_TIMER`). [#86760](https://github.com/ClickHouse/ClickHouse/pull/86760) ([Azat Khuzhin](https://github.com/azat)). +* Улучшена производительность запроса `RemoveRecursive` в Keeper. [#86789](https://github.com/ClickHouse/ClickHouse/pull/86789) ([Antonio Andelic](https://github.com/antonio2368)). +* Удалены лишние пробелы в `PrettyJSONEachRow` при выводе значений типа JSON. [#86819](https://github.com/ClickHouse/ClickHouse/pull/86819) ([Pavel Kruglov](https://github.com/Avogar)). +* Теперь мы записываем размеры блобов для `prefix.path` при удалении каталога на обычном перезаписываемом диске. [#86908](https://github.com/ClickHouse/ClickHouse/pull/86908) ([alesapin](https://github.com/alesapin)). +* Добавлена поддержка нагрузочного тестирования удалённых экземпляров ClickHouse, включая ClickHouse Cloud. Пример использования: `tests/performance/scripts/perf.py tests/performance/math.xml --runs 10 --user --password --host --port --secure`. [#86995](https://github.com/ClickHouse/ClickHouse/pull/86995) ([Raufs Dunamalijevs](https://github.com/rienath)). +* Соблюдать ограничения по памяти в местах, где происходят значительные (>16MiB) выделения памяти (сортировка, асинхронные вставки, лог файлов). [#87035](https://github.com/ClickHouse/ClickHouse/pull/87035) ([Azat Khuzhin](https://github.com/azat)). +* Выбрасывать исключение, если при установке `network_compression_method` указан неподдерживаемый универсальный кодек. [#87097](https://github.com/ClickHouse/ClickHouse/pull/87097) ([Robert Schulze](https://github.com/rschu1ze)). +* Системная таблица `system.query_cache` теперь возвращает *все* записи кэша результатов запросов, тогда как ранее она возвращала только разделяемые записи или неразделяемые записи для того же пользователя и роли. Это корректно, поскольку неразделяемые записи не должны раскрывать *результаты запросов*, тогда как `system.query_cache` возвращает *строки запросов*. Это делает поведение системной таблицы более похожим на `system.query_log`. [#87104](https://github.com/ClickHouse/ClickHouse/pull/87104) ([Robert Schulze](https://github.com/rschu1ze)). +* Включена короткая (short-circuit) оценка для функции `parseDateTime`. [#87184](https://github.com/ClickHouse/ClickHouse/pull/87184) ([Pavel Kruglov](https://github.com/Avogar)). +* Добавлен новый столбец `statistics` в таблицу `system.parts_columns`. [#87259](https://github.com/ClickHouse/ClickHouse/pull/87259) ([Han Fei](https://github.com/hanfei1991)). + +#### Исправление ошибки (некорректное поведение, заметное пользователю, в официальном стабильном релизе) + +* Результаты запросов `ALTER` теперь проверяются только на инициирующем узле для реплицируемых баз данных и таблиц с внутренней репликацией. Это устраняет ситуации, когда уже зафиксированный запрос `ALTER` мог застревать на других узлах. [#83849](https://github.com/ClickHouse/ClickHouse/pull/83849) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). +* Ограничено число задач каждого типа в `BackgroundSchedulePool`. Это позволяет избегать ситуаций, когда все слоты заняты задачами одного типа, в то время как другие задачи голодают. Также предотвращаются взаимные блокировки, когда задачи ожидают друг друга. Поведение контролируется серверной настройкой `background_schedule_pool_max_parallel_tasks_per_type_ratio`. [#84008](https://github.com/ClickHouse/ClickHouse/pull/84008) ([Alexander Tokmakov](https://github.com/tavplubix)). +* Обеспечивает корректное завершение работы таблиц при восстановлении реплики базы данных. Некорректное завершение могло приводить к LOGICAL_ERROR для некоторых движков таблиц во время восстановления реплики базы данных. [#84744](https://github.com/ClickHouse/ClickHouse/pull/84744) ([Antonio Andelic](https://github.com/antonio2368)). +* Проверять права доступа при формировании подсказок по исправлению опечаток в имени базы данных. [#85371](https://github.com/ClickHouse/ClickHouse/pull/85371) ([Dmitry Novik](https://github.com/novikd)). +* 1. LowCardinality для столбцов Hive 2. Заполнять столбцы Hive перед виртуальными столбцами (требуется для [https://github.com/ClickHouse/ClickHouse/pull/81040](https://github.com/ClickHouse/ClickHouse/pull/81040)) 3. LOGICAL_ERROR при пустом формате для Hive [#85528](https://github.com/ClickHouse/ClickHouse/issues/85528) 4. Исправлена проверка, что партиционные столбцы Hive являются единственными столбцами 5. Добавлена проверка, что все столбцы Hive указаны в схеме 6. Частичное исправление для parallel_replicas_cluster с Hive 7. Использовать упорядоченный контейнер в extractkeyValuePairs в утилитах Hive (требуется для [https://github.com/ClickHouse/ClickHouse/pull/81040](https://github.com/ClickHouse/ClickHouse/pull/81040)). [#85538](https://github.com/ClickHouse/ClickHouse/pull/85538) ([Arthur Passos](https://github.com/arthurpassos)). +* Предотвращена ненужная оптимизация первого аргумента функций `IN`, иногда приводившая к ошибке при использовании сопоставления массивов. [#85546](https://github.com/ClickHouse/ClickHouse/pull/85546) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* Соответствие между идентификаторами источников Iceberg и именами файлов Parquet не было скорректировано с учётом схемы, действовавшей на момент записи файла Parquet. В этом PR для каждого файла данных Iceberg используется его собственная схема, а не текущая. [#85829](https://github.com/ClickHouse/ClickHouse/pull/85829) ([Daniil Ivanik](https://github.com/divanik)). +* Исправлена ситуация, когда размер файла считывался отдельно от его открытия. Относится к [https://github.com/ClickHouse/ClickHouse/pull/33372](https://github.com/ClickHouse/ClickHouse/pull/33372), который был добавлен в ответ на ошибку в ядрах Linux до релиза `5.10`. [#85837](https://github.com/ClickHouse/ClickHouse/pull/85837) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* ClickHouse Keeper больше не завершается с ошибкой при запуске на системах, где IPv6 отключён на уровне ядра (например, RHEL с ipv6.disable=1). Теперь он пытается переключиться на IPv4‑слушатель, если не удаётся запустить основной IPv6‑слушатель. [#85901](https://github.com/ClickHouse/ClickHouse/pull/85901) ([jskong1124](https://github.com/jskong1124)). * Этот PR закрывает [#77990](https://github.com/ClickHouse/ClickHouse/issues/77990). Добавлена поддержка TableFunctionRemote для параллельных реплик в globalJoin. [#85929](https://github.com/ClickHouse/ClickHouse/pull/85929) ([zoomxi](https://github.com/zoomxi)). -* Исправлено разыменование нулевого указателя в orcschemareader::initializeifneeded(). Этот PR устраняет следующую проблему: [#85292](https://github.com/ClickHouse/ClickHouse/issues/85292) ### запись в документации об изменениях, заметных пользователю. [#85951](https://github.com/ClickHouse/ClickHouse/pull/85951) ([yanglongwei](https://github.com/ylw510)). -* Добавлена проверка, разрешающая использовать коррелированные подзапросы в предложении FROM только если они используют столбцы из внешнего запроса. Исправляет [#85469](https://github.com/ClickHouse/ClickHouse/issues/85469). Исправляет [#85402](https://github.com/ClickHouse/ClickHouse/issues/85402). [#85966](https://github.com/ClickHouse/ClickHouse/pull/85966) ([Dmitry Novik](https://github.com/novikd)). -* Исправлена работа ALTER UPDATE для столбца с подстолбцом, используемым в материализованном выражении другого столбца. Ранее такой материализованный столбец с подстолбцом в выражении обновлялся некорректно. [#85985](https://github.com/ClickHouse/ClickHouse/pull/85985) ([Pavel Kruglov](https://github.com/Avogar)). -* Запрещено изменять столбцы, если их подстолбцы используются в PK или выражении партиционирования. [#86005](https://github.com/ClickHouse/ClickHouse/pull/86005) ([Pavel Kruglov](https://github.com/Avogar)). -* Исправлена ошибка чтения подстолбцов при использовании нестандартного режима сопоставления столбцов в хранилище DeltaLake. [#86064](https://github.com/ClickHouse/ClickHouse/pull/86064) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Исправлено использование некорректных значений по умолчанию для пути при подсказке Enum в JSON. [#86065](https://github.com/ClickHouse/ClickHouse/pull/86065) ([Pavel Kruglov](https://github.com/Avogar)). -* Разбор URL каталога Hive в DataLake с санитизацией входных данных. Закрывает [#86018](https://github.com/ClickHouse/ClickHouse/issues/86018). [#86092](https://github.com/ClickHouse/ClickHouse/pull/86092) ([rajat mohan](https://github.com/rajatmohan22)). -* Исправлена логическая ошибка при динамическом изменении размера кэша файловой системы. Закрывает [#86122](https://github.com/ClickHouse/ClickHouse/issues/86122). Закрывает [https://github.com/ClickHouse/clickhouse-core-incidents/issues/473](https://github.com/ClickHouse/clickhouse-core-incidents/issues/473). [#86130](https://github.com/ClickHouse/ClickHouse/pull/86130) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Используйте `NonZeroUInt64` для параметра `logs_to_keep` в DatabaseReplicatedSettings. [#86142](https://github.com/ClickHouse/ClickHouse/pull/86142) ([Tuan Pham Anh](https://github.com/tuanpach)). -* Исключение возникало при выполнении запроса `FINAL` с пропускающим индексом (skip index), если таблица (например, `ReplacingMergeTree`) была создана с настройкой `index_granularity_bytes = 0`. Теперь эта проблема устранена. [#86147](https://github.com/ClickHouse/ClickHouse/pull/86147) ([Shankar Iyer](https://github.com/shankar-iyer)). -* Устраняет неопределённое поведение (UB) и исправляет проблемы с разбором выражения секционирования в Iceberg. [#86166](https://github.com/ClickHouse/ClickHouse/pull/86166) ([Daniil Ivanik](https://github.com/divanik)). +* Исправлена ошибка с нулевым указателем в orcschemareader::initializeifneeded(). Этот PR устраняет следующую проблему: [#85292](https://github.com/ClickHouse/ClickHouse/issues/85292) ### Запись в документации об изменениях, затрагивающих пользователей. [#85951](https://github.com/ClickHouse/ClickHouse/pull/85951) ([yanglongwei](https://github.com/ylw510)). +* Добавлена проверка, которая разрешает коррелированные подзапросы в предложении FROM только в том случае, если они используют столбцы из внешнего запроса. Исправляет [#85469](https://github.com/ClickHouse/ClickHouse/issues/85469). Исправляет [#85402](https://github.com/ClickHouse/ClickHouse/issues/85402). [#85966](https://github.com/ClickHouse/ClickHouse/pull/85966) ([Dmitry Novik](https://github.com/novikd)). +* Исправлена работа `ALTER UPDATE` при изменении столбца, подстолбец которого используется в материализованном выражении другого столбца. Ранее материализованный столбец, в выражении которого использовался подстолбец, обновлялся некорректно. [#85985](https://github.com/ClickHouse/ClickHouse/pull/85985) ([Pavel Kruglov](https://github.com/Avogar)). +* Запрещено изменять столбцы, подстолбцы которых используются в PK или в выражении партиционирования. [#86005](https://github.com/ClickHouse/ClickHouse/pull/86005) ([Pavel Kruglov](https://github.com/Avogar)). +* Исправлено чтение подколонок с нестандартным режимом сопоставления столбцов в хранилище DeltaLake. [#86064](https://github.com/ClickHouse/ClickHouse/pull/86064) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Исправлена ошибка, из-за которой для `path` с подсказкой `Enum` внутри JSON использовались неверные значения по умолчанию. [#86065](https://github.com/ClickHouse/ClickHouse/pull/86065) ([Pavel Kruglov](https://github.com/Avogar)). +* Разбор URL каталога Hive в DataLake с очисткой входных данных. Закрывает [#86018](https://github.com/ClickHouse/ClickHouse/issues/86018). [#86092](https://github.com/ClickHouse/ClickHouse/pull/86092) ([rajat mohan](https://github.com/rajatmohan22)). +* Исправлена логическая ошибка при динамическом изменении размера файлового кэша. Закрывает [#86122](https://github.com/ClickHouse/ClickHouse/issues/86122). Закрывает [https://github.com/ClickHouse/clickhouse-core-incidents/issues/473](https://github.com/ClickHouse/clickhouse-core-incidents/issues/473). [#86130](https://github.com/ClickHouse/ClickHouse/pull/86130) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Используйте `NonZeroUInt64` для параметра `logs_to_keep` в настройках DatabaseReplicatedSettings. [#86142](https://github.com/ClickHouse/ClickHouse/pull/86142) ([Tuan Pham Anh](https://github.com/tuanpach)). +* Исключение выбрасывалось запросом `FINAL` со skip-индексом, если таблица (например, `ReplacingMergeTree`) была создана с настройкой `index_granularity_bytes = 0`. Эта ошибка теперь исправлена. [#86147](https://github.com/ClickHouse/ClickHouse/pull/86147) ([Shankar Iyer](https://github.com/shankar-iyer)). +* Устраняет неопределённое поведение и исправляет проблемы с разбором выражения секционирования Iceberg. [#86166](https://github.com/ClickHouse/ClickHouse/pull/86166) ([Daniil Ivanik](https://github.com/divanik)). * Исправлено падение при одновременном использовании константных и неконстантных блоков в одном INSERT. [#86230](https://github.com/ClickHouse/ClickHouse/pull/86230) ([Azat Khuzhin](https://github.com/azat)). -* По умолчанию при создании дисков из SQL обрабатываются директивы include из `/etc/metrika.xml`. [#86232](https://github.com/ClickHouse/ClickHouse/pull/86232) ([alekar](https://github.com/alekar)). -* Исправлена работа accurateCastOrNull/accurateCastOrDefault при приведении значений типа String к JSON. [#86240](https://github.com/ClickHouse/ClickHouse/pull/86240) ([Pavel Kruglov](https://github.com/Avogar)). -* Добавлена поддержка каталогов без '/' в движке Iceberg. [#86249](https://github.com/ClickHouse/ClickHouse/pull/86249) ([scanhex12](https://github.com/scanhex12)). -* Исправлена ошибка, приводившая к сбою при использовании replaceRegex с haystack типа FixedString и пустой needle. [#86270](https://github.com/ClickHouse/ClickHouse/pull/86270) ([Raúl Marín](https://github.com/Algunenano)). -* Исправлено аварийное завершение при `ALTER UPDATE Nullable(JSON)`. [#86281](https://github.com/ClickHouse/ClickHouse/pull/86281) ([Pavel Kruglov](https://github.com/Avogar)). +* Процесс по умолчанию использует `include`-директивы из `/etc/metrika.xml` при создании дисков из SQL. [#86232](https://github.com/ClickHouse/ClickHouse/pull/86232) ([alekar](https://github.com/alekar)). +* Исправлены функции accurateCastOrNull/accurateCastOrDefault при приведении типа String к JSON. [#86240](https://github.com/ClickHouse/ClickHouse/pull/86240) ([Pavel Kruglov](https://github.com/Avogar)). +* Поддержка каталогов без '/' в движке Iceberg. [#86249](https://github.com/ClickHouse/ClickHouse/pull/86249) ([scanhex12](https://github.com/scanhex12)). +* Исправлен сбой при использовании replaceRegex со строкой типа FixedString и пустой подстрокой. [#86270](https://github.com/ClickHouse/ClickHouse/pull/86270) ([Raúl Marín](https://github.com/Algunenano)). +* Исправлен сбой при выполнении ALTER UPDATE Nullable(JSON). [#86281](https://github.com/ClickHouse/ClickHouse/pull/86281) ([Pavel Kruglov](https://github.com/Avogar)). * Исправлено отсутствие определения столбца в system.tables. [#86295](https://github.com/ClickHouse/ClickHouse/pull/86295) ([Raúl Marín](https://github.com/Algunenano)). -* Исправлено приведение типов из LowCardinality(Nullable(T)) к Dynamic. [#86365](https://github.com/ClickHouse/ClickHouse/pull/86365) ([Pavel Kruglov](https://github.com/Avogar)). +* Исправлено приведение типов из LowCardinality(Nullable(T)) к типу Dynamic. [#86365](https://github.com/ClickHouse/ClickHouse/pull/86365) ([Pavel Kruglov](https://github.com/Avogar)). * Исправлена логическая ошибка при записи в Delta Lake. Закрывает [#86175](https://github.com/ClickHouse/ClickHouse/issues/86175). [#86367](https://github.com/ClickHouse/ClickHouse/pull/86367) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Исправлена ошибка `416 The range specified is invalid for the current size of the resource. The range specified is invalid for the current size of the resource` при чтении пустых blob-объектов из Azure Blob Storage для диска plain_rewritable. [#86400](https://github.com/ClickHouse/ClickHouse/pull/86400) ([Julia Kartseva](https://github.com/jkartseva)). -* Исправлена работа GROUP BY с Nullable(JSON). [#86410](https://github.com/ClickHouse/ClickHouse/pull/86410) ([Pavel Kruglov](https://github.com/Avogar)). -* Исправлена ошибка в материализованных представлениях: материализованное представление могло не работать, если его создать, удалить, а затем снова создать с тем же именем. [#86413](https://github.com/ClickHouse/ClickHouse/pull/86413) ([Alexander Tokmakov](https://github.com/tavplubix)). -* Выдавать ошибку, если при чтении из функций *cluster все реплики недоступны. [#86414](https://github.com/ClickHouse/ClickHouse/pull/86414) ([Julian Maicher](https://github.com/jmaicher)). -* Устранена утечка `MergesMutationsMemoryTracking`, возникавшая из-за таблиц `Buffer`, и исправлен `query_views_log` для потоковой загрузки из `Kafka` (и других источников). [#86422](https://github.com/ClickHouse/ClickHouse/pull/86422) ([Azat Khuzhin](https://github.com/azat)). -* Исправлена работа SHOW TABLES после удаления таблицы-справочника хранилища Alias. [#86433](https://github.com/ClickHouse/ClickHouse/pull/86433) ([RinChanNOW](https://github.com/RinChanNOWWW)). -* Исправлено отсутствие заголовка чанка при включённом параметре send_chunk_header и вызове UDF по протоколу HTTP. [#86469](https://github.com/ClickHouse/ClickHouse/pull/86469) ([Vladimir Cherkasov](https://github.com/vdimir)). -* Исправлена потенциальная взаимная блокировка при включённом сбросе профиля jemalloc. [#86473](https://github.com/ClickHouse/ClickHouse/pull/86473) ([Azat Khuzhin](https://github.com/azat)). +* Исправлена ошибка `416 The range specified is invalid for the current size of the resource. The range specified is invalid for the current size of the resource` при чтении пустых BLOB-объектов из Azure Blob Storage для диска plain_rewritable. [#86400](https://github.com/ClickHouse/ClickHouse/pull/86400) ([Julia Kartseva](https://github.com/jkartseva)). +* Исправлена обработка GROUP BY для Nullable(JSON). [#86410](https://github.com/ClickHouse/ClickHouse/pull/86410) ([Pavel Kruglov](https://github.com/Avogar)). +* Исправлена ошибка в материализованных представлениях: материализованное представление могло не работать, если его создавали, удаляли, а затем снова создавали с тем же именем. [#86413](https://github.com/ClickHouse/ClickHouse/pull/86413) ([Alexander Tokmakov](https://github.com/tavplubix)). +* Выдавать ошибку, если все реплики недоступны при чтении из функций *cluster. [#86414](https://github.com/ClickHouse/ClickHouse/pull/86414) ([Julian Maicher](https://github.com/jmaicher)). +* Исправлена утечка `MergesMutationsMemoryTracking` из‑за таблиц типа `Buffer` и исправлен `query_views_log` для потоковой загрузки из `Kafka` (и других источников). [#86422](https://github.com/ClickHouse/ClickHouse/pull/86422) ([Azat Khузhin](https://github.com/azat)). +* Исправлена работа оператора `SHOW TABLES` после удаления опорной таблицы хранилища Alias. [#86433](https://github.com/ClickHouse/ClickHouse/pull/86433) ([RinChanNOW](https://github.com/RinChanNOWWW)). +* Исправлено отсутствие заголовка чанка, когда включен send_chunk_header и UDF вызывается по протоколу HTTP. [#86469](https://github.com/ClickHouse/ClickHouse/pull/86469) ([Vladimir Cherkasov](https://github.com/vdimir)). +* Исправлена возможная взаимоблокировка при включённой функции сброса профиля jemalloc. [#86473](https://github.com/ClickHouse/ClickHouse/pull/86473) ([Azat Khuzhin](https://github.com/azat)). * Исправлено чтение подстолбцов в движке таблицы DeltaLake. Закрывает [#86204](https://github.com/ClickHouse/ClickHouse/issues/86204). [#86477](https://github.com/ClickHouse/ClickHouse/pull/86477) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Корректная обработка идентификатора loopback-хоста для предотвращения коллизий при обработке DDL-задач: [#86479](https://github.com/ClickHouse/ClickHouse/pull/86479) ([Tuan Pham Anh](https://github.com/tuanpach)). -* Исправлена работа операций detach/attach для таблиц движка базы данных PostgreSQL с числовыми и десятичными столбцами. [#86480](https://github.com/ClickHouse/ClickHouse/pull/86480) ([Julian Maicher](https://github.com/jmaicher)). -* Исправлено использование неинициализированной памяти в функции getSubcolumnType. [#86498](https://github.com/ClickHouse/ClickHouse/pull/86498) ([Raúl Marín](https://github.com/Algunenano)). -* Функции `searchAny` и `searchAll` при вызове с пустыми образцами теперь возвращают `true` (то есть «совпадает со всем»). Ранее они возвращали `false`. (issue [#86300](https://github.com/ClickHouse/ClickHouse/issues/86300)). [#86500](https://github.com/ClickHouse/ClickHouse/pull/86500) ([Elmi Ahmadov](https://github.com/ahmadov)). -* Исправлена работа функции `timeSeriesResampleToGridWithStaleness()` в случае отсутствия значения в первом бакете. [#86507](https://github.com/ClickHouse/ClickHouse/pull/86507) ([Vitaly Baranov](https://github.com/vitlibar)). -* Исправлен сбой, возникавший при значении `merge_tree_min_read_task_size`, равном 0. [#86527](https://github.com/ClickHouse/ClickHouse/pull/86527) ([yanglongwei](https://github.com/ylw510)). -* При чтении формат для каждого файла данных теперь берётся из метаданных Iceberg (раньше — из аргументов таблицы). [#86529](https://github.com/ClickHouse/ClickHouse/pull/86529) ([Daniil Ivanik](https://github.com/divanik)). -* Игнорировать исключения при сбросе логов во время завершения работы и сделать завершение более безопасным (чтобы избежать SIGSEGV). [#86546](https://github.com/ClickHouse/ClickHouse/pull/86546) ([Azat Khuzhin](https://github.com/azat)). -* Исправлена ошибка в движке базы данных Backup, приводившая к возникновению исключения при запросе с файловыми частями нулевого размера. [#86563](https://github.com/ClickHouse/ClickHouse/pull/86563) ([Max Justus Spransy](https://github.com/maxjustus)). -* Исправлено отсутствие заголовка чанка при включённом send_chunk_header и вызове UDF по протоколу HTTP. [#86606](https://github.com/ClickHouse/ClickHouse/pull/86606) ([Vladimir Cherkasov](https://github.com/vdimir)). -* Исправлена логическая ошибка S3Queue "Expected current processor {} to be equal to {}", возникавшая из-за истечения сессии Keeper. [#86615](https://github.com/ClickHouse/ClickHouse/pull/86615) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Ошибки, связанные с `Nullable`, при вставке данных и отсечении. Закрывает [#86407](https://github.com/ClickHouse/ClickHouse/issues/86407). [#86630](https://github.com/ClickHouse/ClickHouse/pull/86630) ([scanhex12](https://github.com/scanhex12)). +* Корректная обработка идентификатора хоста loopback для предотвращения коллизий при обработке DDL-задач. [#86479](https://github.com/ClickHouse/ClickHouse/pull/86479) ([Tuan Pham Anh](https://github.com/tuanpach)). +* Исправлена работа операций DETACH/ATTACH для таблиц движка базы данных postgres с числовыми и десятичными (DECIMAL) столбцами. [#86480](https://github.com/ClickHouse/ClickHouse/pull/86480) ([Julian Maicher](https://github.com/jmaicher)). +* Исправлено использование неинициализированной памяти в getSubcolumnType. [#86498](https://github.com/ClickHouse/ClickHouse/pull/86498) ([Raúl Marín](https://github.com/Algunenano)). +* Функции `searchAny` и `searchAll` при вызове с пустым списком строк (needles) теперь возвращают `true` (то есть «совпадает со всем»). Ранее они возвращали `false` (issue [#86300](https://github.com/ClickHouse/ClickHouse/issues/86300)). [#86500](https://github.com/ClickHouse/ClickHouse/pull/86500) ([Elmi Ahmadov](https://github.com/ahmadov)). +* Исправлена функция `timeSeriesResampleToGridWithStaleness()` при отсутствии значения в первом бакете. [#86507](https://github.com/ClickHouse/ClickHouse/pull/86507) ([Vitaly Baranov](https://github.com/vitlibar)). +* Исправлен сбой, возникавший при установке `merge_tree_min_read_task_size` в значение 0. [#86527](https://github.com/ClickHouse/ClickHouse/pull/86527) ([yanglongwei](https://github.com/ylw510)). +* При чтении формат для каждого файла данных теперь берётся из метаданных Iceberg (ранее он брался из аргументов таблицы). [#86529](https://github.com/ClickHouse/ClickHouse/pull/86529) ([Daniil Ivanik](https://github.com/divanik)). +* Игнорировать исключения при сбросе журнала при завершении работы и сделать завершение работы более безопасным (чтобы избежать SIGSEGV). [#86546](https://github.com/ClickHouse/ClickHouse/pull/86546) ([Azat Khuzhin](https://github.com/azat)). +* Исправлена ошибка в движке базы данных Backup, приводившая к выбросу исключения при запросе с файловыми частями нулевого размера. [#86563](https://github.com/ClickHouse/ClickHouse/pull/86563) ([Max Justus Spransy](https://github.com/maxjustus)). +* Исправлена проблема с отсутствующим заголовком чанка, если `send_chunk_header` включён и UDF вызывается по протоколу HTTP. [#86606](https://github.com/ClickHouse/ClickHouse/pull/86606) ([Vladimir Cherkasov](https://github.com/vdimir)). +* Исправлена логическая ошибка S3Queue «Expected current processor {} to be equal to {}», которая возникала из-за истечения сессии Keeper. [#86615](https://github.com/ClickHouse/ClickHouse/pull/86615) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Ошибки обработки `Nullable` при вставке и отсечении данных. Эта правка закрывает [#86407](https://github.com/ClickHouse/ClickHouse/issues/86407). [#86630](https://github.com/ClickHouse/ClickHouse/pull/86630) ([scanhex12](https://github.com/scanhex12)). * Не отключайте кэш файловой системы, если отключён кэш метаданных Iceberg. [#86635](https://github.com/ClickHouse/ClickHouse/pull/86635) ([Daniil Ivanik](https://github.com/divanik)). -* Исправлена ошибка «Deadlock in Parquet::ReadManager (single-threaded)» в Parquet reader v3. [#86644](https://github.com/ClickHouse/ClickHouse/pull/86644) ([Michael Kolupaev](https://github.com/al13n321)). -* Исправлена поддержка IPv6 в `listen_host` для ArrowFlight. [#86664](https://github.com/ClickHouse/ClickHouse/pull/86664) ([Vitaly Baranov](https://github.com/vitlibar)). +* Исправлена ошибка «Deadlock in Parquet::ReadManager (single-threaded)» в компоненте parquet reader v3. [#86644](https://github.com/ClickHouse/ClickHouse/pull/86644) ([Michael Kolupaev](https://github.com/al13n321)). +* Исправлена работа IPv6 в `listen_host` для ArrowFlight. [#86664](https://github.com/ClickHouse/ClickHouse/pull/86664) ([Vitaly Baranov](https://github.com/vitlibar)). * Исправлено завершение работы обработчика `ArrowFlight`. Этот PR исправляет [#86596](https://github.com/ClickHouse/ClickHouse/issues/86596). [#86665](https://github.com/ClickHouse/ClickHouse/pull/86665) ([Vitaly Baranov](https://github.com/vitlibar)). -* Исправлены распределённые запросы с `describe_compact_output=1`. [#86676](https://github.com/ClickHouse/ClickHouse/pull/86676) ([Azat Khuzhin](https://github.com/azat)). -* Исправлены разбор определения окон и применение параметров запроса. [#86720](https://github.com/ClickHouse/ClickHouse/pull/86720) ([Azat Khuzhin](https://github.com/azat)). -* Исправлено исключение `Partition strategy wildcard can not be used without a '_partition_id' wildcard.` при создании таблицы с `PARTITION BY`, но без подстановочного символа для партиционирования, что раньше работало в версиях до 25.8. Закрывает [https://github.com/ClickHouse/clickhouse-private/issues/37567](https://github.com/ClickHouse/clickhouse-private/issues/37567). [#86748](https://github.com/ClickHouse/ClickHouse/pull/86748) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Исправлена ошибка LogicalError, возникающая, если параллельные запросы пытаются получить одну и ту же блокировку. [#86751](https://github.com/ClickHouse/ClickHouse/pull/86751) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). -* Исправлена запись значения NULL в общие JSON-данные во входном формате RowBinary и добавлены дополнительные проверки в ColumnObject. [#86812](https://github.com/ClickHouse/ClickHouse/pull/86812) ([Pavel Kruglov](https://github.com/Avogar)). -* Исправлена проблема с перестановкой пустого Tuple с LIMIT. [#86828](https://github.com/ClickHouse/ClickHouse/pull/86828) ([Pavel Kruglov](https://github.com/Avogar)). -* Не используйте отдельный узел Keeper для persistent-узлов обработки. Исправление для [https://github.com/ClickHouse/ClickHouse/pull/85995](https://github.com/ClickHouse/ClickHouse/pull/85995). Закрывает [#86406](https://github.com/ClickHouse/ClickHouse/issues/86406). [#86841](https://github.com/ClickHouse/ClickHouse/pull/86841) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Исправлена проблема, из-за которой таблица с движком TimeSeries нарушала создание новой реплики в реплицируемой базе данных. [#86845](https://github.com/ClickHouse/ClickHouse/pull/86845) ([Nikolay Degterinsky](https://github.com/evillique)). -* Исправлена обработка запросов к `system.distributed_ddl_queue` в случаях, когда в задачах отсутствуют некоторые узлы Keeper. [#86848](https://github.com/ClickHouse/ClickHouse/pull/86848) ([Antonio Andelic](https://github.com/antonio2368)). -* Исправлено позиционирование в конце декомпрессированного блока. [#86906](https://github.com/ClickHouse/ClickHouse/pull/86906) ([Pavel Kruglov](https://github.com/Avogar)). -* Обработка исключения, выбрасываемого при асинхронном выполнении итератора Iceberg. [#86932](https://github.com/ClickHouse/ClickHouse/pull/86932) ([Daniil Ivanik](https://github.com/divanik)). -* Исправлено сохранение крупных предварительно обработанных XML-конфигураций. [#86934](https://github.com/ClickHouse/ClickHouse/pull/86934) ([c-end](https://github.com/c-end)). +* Исправлены проблемы с распределёнными запросами при `describe_compact_output=1`. [#86676](https://github.com/ClickHouse/ClickHouse/pull/86676) ([Azat Khuzhin](https://github.com/azat)). +* Исправлены разбор определения окна и применение параметров запроса. [#86720](https://github.com/ClickHouse/ClickHouse/pull/86720) ([Azat Khuzhin](https://github.com/azat)). +* Исправлено исключение `Partition strategy wildcard can not be used without a '_partition_id' wildcard.`, возникавшее при создании таблицы с `PARTITION BY`, но без подстановочного шаблона для партиционирования, что ранее работало в версиях до 25.8. Закрывает [https://github.com/ClickHouse/clickhouse-private/issues/37567](https://github.com/ClickHouse/clickhouse-private/issues/37567). [#86748](https://github.com/ClickHouse/ClickHouse/pull/86748) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Исправлена ошибка LogicalError, возникающая при попытке параллельных запросов захватить одну и ту же блокировку. [#86751](https://github.com/ClickHouse/ClickHouse/pull/86751) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +* Исправлена запись NULL в разделяемые JSON‑данные во входном формате RowBinary и добавлены дополнительные проверки в ColumnObject. [#86812](https://github.com/ClickHouse/ClickHouse/pull/86812) ([Pavel Kruglov](https://github.com/Avogar)). +* Исправлена ошибка перестановки пустого Tuple с LIMIT. [#86828](https://github.com/ClickHouse/ClickHouse/pull/86828) ([Pavel Kruglov](https://github.com/Avogar)). +* Не используйте отдельный узел Keeper для узлов persistent processing. Исправление для [https://github.com/ClickHouse/ClickHouse/pull/85995](https://github.com/ClickHouse/ClickHouse/pull/85995). Закрывает [#86406](https://github.com/ClickHouse/ClickHouse/issues/86406). [#86841](https://github.com/ClickHouse/ClickHouse/pull/86841) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Исправлено поведение таблицы с движком TimeSeries, из‑за которого возникали сбои при создании новой реплики в Replicated Database. [#86845](https://github.com/ClickHouse/ClickHouse/pull/86845) ([Nikolay Degterinsky](https://github.com/evillique)). +* Исправлена проблема с выполнением запросов к `system.distributed_ddl_queue` в случаях, когда в задачах отсутствуют некоторые узлы Keeper. [#86848](https://github.com/ClickHouse/ClickHouse/pull/86848) ([Antonio Andelic](https://github.com/antonio2368)). +* Исправлено позиционирование при переходе в конец разжатого блока. [#86906](https://github.com/ClickHouse/ClickHouse/pull/86906) ([Pavel Kruglov](https://github.com/Avogar)). +* Обрабатывается исключение, выбрасываемое при асинхронном выполнении итератора Iceberg. [#86932](https://github.com/ClickHouse/ClickHouse/pull/86932) ([Daniil Ivanik](https://github.com/divanik)). +* Исправлено сохранение больших предварительно обработанных XML-конфигураций. [#86934](https://github.com/ClickHouse/ClickHouse/pull/86934) ([c-end](https://github.com/c-end)). * Исправлено заполнение поля date в таблице system.iceberg_metadata_log. [#86961](https://github.com/ClickHouse/ClickHouse/pull/86961) ([Daniil Ivanik](https://github.com/divanik)). -* Исправлен бесконечный пересчёт `TTL` с `WHERE`. [#86965](https://github.com/ClickHouse/ClickHouse/pull/86965) ([Anton Popov](https://github.com/CurtizJ)). -* Исправлен потенциально некорректный результат функции `uniqExact` с модификаторами `ROLLUP` и `CUBE`. [#87014](https://github.com/ClickHouse/ClickHouse/pull/87014) ([Nikita Taranov](https://github.com/nickitat)). -* Исправлено определение схемы таблицы с помощью табличной функции `url()` при значении настройки `parallel_replicas_for_cluster_functions`, установленном в 1. [#87029](https://github.com/ClickHouse/ClickHouse/pull/87029) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* Корректно выполняется приведение типа результата `PREWHERE` после разбиения на несколько шагов. [#87040](https://github.com/ClickHouse/ClickHouse/pull/87040) ([Antonio Andelic](https://github.com/antonio2368)). -* Исправлена работа легковесных обновлений с клаузой `ON CLUSTER`. [#87043](https://github.com/ClickHouse/ClickHouse/pull/87043) ([Anton Popov](https://github.com/CurtizJ)). +* Исправлен бесконечный перерасчёт `TTL` при использовании `WHERE`. [#86965](https://github.com/ClickHouse/ClickHouse/pull/86965) ([Anton Popov](https://github.com/CurtizJ)). +* Исправлен возможный некорректный результат работы функции `uniqExact` с модификаторами `ROLLUP` и `CUBE`. [#87014](https://github.com/ClickHouse/ClickHouse/pull/87014) ([Nikita Taranov](https://github.com/nickitat)). +* Исправлена проблема с определением схемы таблицы с помощью табличной функции `url()` при значении настройки `parallel_replicas_for_cluster_functions`, равном 1. [#87029](https://github.com/ClickHouse/ClickHouse/pull/87029) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* Корректно приводить тип результата PREWHERE после разбиения его на несколько шагов. [#87040](https://github.com/ClickHouse/ClickHouse/pull/87040) ([Antonio Andelic](https://github.com/antonio2368)). +* Исправлены облегчённые обновления с клаузой `ON CLUSTER`. [#87043](https://github.com/ClickHouse/ClickHouse/pull/87043) ([Anton Popov](https://github.com/CurtizJ)). * Исправлена совместимость некоторых состояний агрегатных функций с аргументом типа String. [#87049](https://github.com/ClickHouse/ClickHouse/pull/87049) ([Pavel Kruglov](https://github.com/Avogar)). -* Исправляет ошибку, из-за которой имя модели OpenAI не передавалось дальше. [#87100](https://github.com/ClickHouse/ClickHouse/pull/87100) ([Kaushik Iska](https://github.com/iskakaushik)). -* EmbeddedRocksDB: Путь должен указывать на расположение внутри user_files. [#87109](https://github.com/ClickHouse/ClickHouse/pull/87109) ([Raúl Marín](https://github.com/Algunenano)). -* Исправлена проблема с таблицами KeeperMap, созданными до версии 25.1, которые оставляли данные в ZooKeeper после выполнения запроса DROP. [#87112](https://github.com/ClickHouse/ClickHouse/pull/87112) ([Nikolay Degterinsky](https://github.com/evillique)). -* Исправлена обработка идентификаторов полей карт и массивов при чтении Parquet. [#87136](https://github.com/ClickHouse/ClickHouse/pull/87136) ([scanhex12](https://github.com/scanhex12)). -* Исправлено чтение массива с подколонкой размеров массива при ленивой материализации. [#87139](https://github.com/ClickHouse/ClickHouse/pull/87139) ([Pavel Kruglov](https://github.com/Avogar)). +* Исправлена проблема, при которой имя модели OpenAI не передавалось. [#87100](https://github.com/ClickHouse/ClickHouse/pull/87100) ([Kaushik Iska](https://github.com/iskakaushik)). +* EmbeddedRocksDB: путь должен находиться внутри каталога user_files. [#87109](https://github.com/ClickHouse/ClickHouse/pull/87109) ([Raúl Marín](https://github.com/Algunenano)). +* Исправлена проблема с таблицами KeeperMap, созданными до 25.1, которые оставляли данные в ZooKeeper после выполнения запроса DROP. [#87112](https://github.com/ClickHouse/ClickHouse/pull/87112) ([Nikolay Degterinsky](https://github.com/evillique)). +* Исправлено чтение идентификаторов полей типов map и array из Parquet. [#87136](https://github.com/ClickHouse/ClickHouse/pull/87136) ([scanhex12](https://github.com/scanhex12)). +* Исправлено чтение массивов с подстолбцом размеров при ленивой материализации. [#87139](https://github.com/ClickHouse/ClickHouse/pull/87139) ([Pavel Kruglov](https://github.com/Avogar)). * Исправлена работа функции CASE с аргументами типа Dynamic. [#87177](https://github.com/ClickHouse/ClickHouse/pull/87177) ([Pavel Kruglov](https://github.com/Avogar)). -* Исправлена обработка пустого массива при чтении из пустой строки в CSV. [#87182](https://github.com/ClickHouse/ClickHouse/pull/87182) ([Pavel Kruglov](https://github.com/Avogar)). -* Исправлена потенциальная ошибка, из-за которой некоррелированный `EXISTS` мог возвращать некорректный результат. Ошибка появилась с параметром `execute_exists_as_scalar_subquery=1`, который был добавлен в [https://github.com/ClickHouse/ClickHouse/pull/85481](https://github.com/ClickHouse/ClickHouse/pull/85481) и влияет на версию `25.8`. Исправляет [#86415](https://github.com/ClickHouse/ClickHouse/issues/86415). [#87207](https://github.com/ClickHouse/ClickHouse/pull/87207) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). -* Выбрасывает ошибку, если iceberg_metadata_log не настроен, но пользователь пытается получить отладочную информацию о метаданных Iceberg. Исправляет обращение к nullptr. [#87250](https://github.com/ClickHouse/ClickHouse/pull/87250) ([Daniil Ivanik](https://github.com/divanik)). - +* Исправлена обработка чтения пустого массива из пустой строки в CSV. [#87182](https://github.com/ClickHouse/ClickHouse/pull/87182) ([Pavel Kruglov](https://github.com/Avogar)). +* Исправлена возможная неверная обработка некоррелированного `EXISTS`. Ошибка проявлялась при `execute_exists_as_scalar_subquery=1`, который был добавлен в [https://github.com/ClickHouse/ClickHouse/pull/85481](https://github.com/ClickHouse/ClickHouse/pull/85481) и затрагивает версию `25.8`. Исправляет [#86415](https://github.com/ClickHouse/ClickHouse/issues/86415). [#87207](https://github.com/ClickHouse/ClickHouse/pull/87207) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). +* Вызывает ошибку, если `iceberg_metadata_log` не настроен, но пользователь пытается получить отладочную информацию о метаданных Iceberg. Устраняет обращение к nullptr. [#87250](https://github.com/ClickHouse/ClickHouse/pull/87250) ([Daniil Ivanik](https://github.com/divanik)). +#### Улучшения сборки, тестирования и упаковки -#### Улучшения сборки/тестирования/упаковки * Исправлена совместимость с abseil-cpp 20250814.0, https://github.com/abseil/abseil-cpp/issues/1923. [#85970](https://github.com/ClickHouse/ClickHouse/pull/85970) ([Yuriy Chernyshov](https://github.com/georgthegreat)). -* Сборка автономного WASM-лексера теперь управляется флагом. [#86505](https://github.com/ClickHouse/ClickHouse/pull/86505) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* Сборка автономного WASM-лексера вынесена под управляющий флаг. [#86505](https://github.com/ClickHouse/ClickHouse/pull/86505) ([Konstantin Bogdanov](https://github.com/thevar1able)). * Исправлена сборка crc32c на старых ARM CPU без поддержки инструкции `vmull_p64`. [#86521](https://github.com/ClickHouse/ClickHouse/pull/86521) ([Pablo Marcos](https://github.com/pamarcos)). -* Используется `openldap` 2.6.10. [#86623](https://github.com/ClickHouse/ClickHouse/pull/86623) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* Не перехватывать `memalign` на darwin. [#86769](https://github.com/ClickHouse/ClickHouse/pull/86769) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* Используется `krb5` 1.22.1-final. [#86836](https://github.com/ClickHouse/ClickHouse/pull/86836) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* Исправлена распаковка имён Rust crate в `list-licenses.sh`. [#87305](https://github.com/ClickHouse/ClickHouse/pull/87305) ([Konstantin Bogdanov](https://github.com/thevar1able)). - +* Обновление `openldap` до версии 2.6.10. [#86623](https://github.com/ClickHouse/ClickHouse/pull/86623) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* Отключена попытка перехвата `memalign` на darwin. [#86769](https://github.com/ClickHouse/ClickHouse/pull/86769) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* Обновление `krb5` до версии 1.22.1-final. [#86836](https://github.com/ClickHouse/ClickHouse/pull/86836) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* Исправлена распаковка имён crate Rust в `list-licenses.sh`. [#87305](https://github.com/ClickHouse/ClickHouse/pull/87305) ([Konstantin Bogdanov](https://github.com/thevar1able)). ### Релиз ClickHouse 25.8 LTS, 2025-08-28 {#258} +#### Обратное несовместимое изменение - -#### Обратно несовместимые изменения -* Выводить `Array(Dynamic)` вместо безымянного `Tuple` для массивов значений с разными типами в JSON. Чтобы использовать предыдущее поведение, отключите настройку `input_format_json_infer_array_of_dynamic_from_array_of_different_types`. [#80859](https://github.com/ClickHouse/ClickHouse/pull/80859) ([Pavel Kruglov](https://github.com/Avogar)). -* Перевести метрики задержек S3 в гистограммы для однородности и упрощения. [#82305](https://github.com/ClickHouse/ClickHouse/pull/82305) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). -* Требовать обратные кавычки вокруг идентификаторов с точками в выражениях по умолчанию (DEFAULT), чтобы предотвратить их разбор как составных идентификаторов. [#83162](https://github.com/ClickHouse/ClickHouse/pull/83162) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). -* Ленивую материализацию включать только при использовании analyzer (это поведение по умолчанию), чтобы избежать необходимости поддерживать режим без analyzer, который, по нашему опыту, имеет некоторые проблемы (например, при использовании `indexHint()` в условиях). [#83791](https://github.com/ClickHouse/ClickHouse/pull/83791) ([Igor Nikonov](https://github.com/devcrafter)). +* Выводить `Array(Dynamic)` вместо безымянного `Tuple` для массивов значений с разными типами в JSON. Чтобы использовать прежнее поведение, отключите настройку `input_format_json_infer_array_of_dynamic_from_array_of_different_types`. [#80859](https://github.com/ClickHouse/ClickHouse/pull/80859) ([Pavel Kruglov](https://github.com/Avogar)). +* Перенести метрики задержки S3 в гистограммы для однородности и упрощения. [#82305](https://github.com/ClickHouse/ClickHouse/pull/82305) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). +* Требовать использования обратных кавычек вокруг идентификаторов с точками в DEFAULT-выражениях, чтобы предотвратить их разбор как составных идентификаторов. [#83162](https://github.com/ClickHouse/ClickHouse/pull/83162) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +* Отложенная материализация включена только при использовании анализатора (который используется по умолчанию), чтобы избежать необходимости поддерживать режим без анализатора, который, по нашему опыту, имеет некоторые проблемы (например, при использовании `indexHint()` в условиях). [#83791](https://github.com/ClickHouse/ClickHouse/pull/83791) ([Igor Nikonov](https://github.com/devcrafter)). * По умолчанию записывать значения типа `Enum` как `BYTE_ARRAY` с логическим типом `ENUM` в формате вывода Parquet. [#84169](https://github.com/ClickHouse/ClickHouse/pull/84169) ([Pavel Kruglov](https://github.com/Avogar)). -* Включить настройку MergeTree `write_marks_for_substreams_in_compact_parts` по умолчанию. Она существенно улучшает производительность чтения подстолбцов из вновь создаваемых Compact‑частей. Серверы версии ниже 25.5 не смогут читать новые Compact‑части. [#84171](https://github.com/ClickHouse/ClickHouse/pull/84171) ([Pavel Kruglov](https://github.com/Avogar)). -* Предыдущее значение по умолчанию для `concurrent_threads_scheduler` было `round_robin`, которое оказалось несправедливым при большом количестве однопоточных запросов (например, INSERT). Это изменение устанавливает более безопасный планировщик `fair_round_robin` значением по умолчанию. [#84747](https://github.com/ClickHouse/ClickHouse/pull/84747) ([Sergei Trifonov](https://github.com/serxa)). -* ClickHouse поддерживает синтаксис heredoc в стиле PostgreSQL: `$tag$ string contents... $tag$`, также известный как строковые литералы с долларовым квотированием (dollar-quoted string literals). В предыдущих версиях было меньше ограничений на теги: они могли содержать произвольные символы, включая знаки пунктуации и пробелы. Это приводит к неоднозначности разбора с идентификаторами, которые также могут начинаться с символа доллара. При этом PostgreSQL разрешает использовать в тегах только символьные (word) символы. Для решения проблемы мы теперь ограничиваем теги heredoc только символьными (word) символами. Закрывает [#84731](https://github.com/ClickHouse/ClickHouse/issues/84731). [#84846](https://github.com/ClickHouse/ClickHouse/pull/84846) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Функции `azureBlobStorage`, `deltaLakeAzure` и `icebergAzure` были обновлены для корректной проверки привилегий `AZURE`. Все кластерные варианты функций (функции `-Cluster`) теперь проверяют привилегии относительно соответствующих некластерных версий. Дополнительно функции `icebergLocal` и `deltaLakeLocal` теперь применяют проверки привилегий `FILE`. [#84938](https://github.com/ClickHouse/ClickHouse/pull/84938) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). -* Включить настройку `allow_dynamic_metadata_for_data_lakes` (настройка на уровне движка таблиц) по умолчанию. [#85044](https://github.com/ClickHouse/ClickHouse/pull/85044) ([Daniil Ivanik](https://github.com/divanik)). -* По умолчанию отключить заключение в кавычки 64‑битных целых чисел в форматах JSON. [#74079](https://github.com/ClickHouse/ClickHouse/pull/74079) ([Pavel Kruglov](https://github.com/Avogar)) - - - -#### Новая возможность - -* Добавлена базовая поддержка диалекта PromQL. Чтобы использовать его, задайте `dialect='promql'` в clickhouse-client, укажите таблицу TimeSeries с помощью настройки `promql_table_name='X'` и выполняйте запросы вида `rate(ClickHouseProfileEvents_ReadCompressedBytes[1m])[5m:1m]`. Также можно обернуть запрос PromQL в SQL: `SELECT * FROM prometheusQuery('up', ...);`. На данный момент поддерживаются только функции `rate`, `delta` и `increase`. Унарные и бинарные операторы пока не поддерживаются. HTTP API пока нет. [#75036](https://github.com/ClickHouse/ClickHouse/pull/75036) ([Vitaly Baranov](https://github.com/vitlibar)). -* Генерация SQL с помощью ИИ теперь, при их наличии, может автоматически определять из окружения переменные ANTHROPIC_API_KEY и OPENAI_API_KEY, чтобы обеспечить возможность использования этой функции в режиме «нулевой конфигурации». [#83787](https://github.com/ClickHouse/ClickHouse/pull/83787) ([Kaushik Iska](https://github.com/iskakaushik)). -* Реализована поддержка протокола [ArrowFlight RPC](https://arrow.apache.org/docs/format/Flight.html) за счет добавления новой табличной функции `arrowflight`. [#74184](https://github.com/ClickHouse/ClickHouse/pull/74184) ([zakr600](https://github.com/zakr600)). -* Теперь все таблицы поддерживают виртуальный столбец `_table` (не только таблицы с движком `Merge`), что особенно полезно для запросов с операцией UNION ALL. [#63665](https://github.com/ClickHouse/ClickHouse/pull/63665) ([Xiaozhe Yu](https://github.com/wudidapaopao)). -* Разрешено использование любой политики хранения (например, объектного хранилища, такого как S3) для внешней агрегации/сортировки. [#84734](https://github.com/ClickHouse/ClickHouse/pull/84734) ([Azat Khuzhin](https://github.com/azat)). -* Реализована поддержка аутентификации в AWS S3 с явным указанием роли IAM. Реализована поддержка OAuth для GCS. До недавнего времени эти возможности были доступны только в ClickHouse Cloud, теперь они открыты в виде open source. Синхронизированы некоторые интерфейсы, такие как сериализация параметров подключения для объектных хранилищ. [#84011](https://github.com/ClickHouse/ClickHouse/pull/84011) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Добавлена поддержка удалений по позициям (position deletes) для Iceberg TableEngine. [#83094](https://github.com/ClickHouse/ClickHouse/pull/83094) ([Daniil Ivanik](https://github.com/divanik)). -* Реализована поддержка операций Iceberg Equality Deletes. [#85843](https://github.com/ClickHouse/ClickHouse/pull/85843) ([Han Fei](https://github.com/hanfei1991)). -* Запись в Iceberg при выполнении CREATE. Закрывает [#83927](https://github.com/ClickHouse/ClickHouse/issues/83927). [#83983](https://github.com/ClickHouse/ClickHouse/pull/83983) ([Konstantин Vedernikov](https://github.com/scanhex12)). -* Каталоги Glue для записи. [#84136](https://github.com/ClickHouse/ClickHouse/pull/84136) ([Konstantin Vedernikov](https://github.com/scanhex12)). -* Каталоги REST Iceberg для записи. [#84684](https://github.com/ClickHouse/ClickHouse/pull/84684) ([Konstantin Vedernikov](https://github.com/scanhex12)). -* Объединить все файлы позиционных удалений (position delete) формата Iceberg в файлы с данными. Это сократит количество и размер файлов Parquet в хранилище Iceberg. Синтаксис: `OPTIMIZE TABLE table_name`. [#85250](https://github.com/ClickHouse/ClickHouse/pull/85250) ([Konstantin Vedernikov](https://github.com/scanhex12)). -* Реализована поддержка оператора `DROP TABLE` для Iceberg (удаление из каталогов REST/Glue и связанных с таблицей метаданных). [#85395](https://github.com/ClickHouse/ClickHouse/pull/85395) ([Konstantin Vedernikov](https://github.com/scanhex12)). -* Поддержка мутаций `ALTER DELETE` для Iceberg в формате merge-on-read. [#85549](https://github.com/ClickHouse/ClickHouse/pull/85549) ([Konstantин Vedernikov](https://github.com/scanhex12)). -* Добавлена поддержка записи в Delta Lake. Закрывает [#79603](https://github.com/ClickHouse/ClickHouse/issues/79603). [#85564](https://github.com/ClickHouse/ClickHouse/pull/85564) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Добавлена настройка `delta_lake_snapshot_version` для чтения определённой версии снимка в движке таблиц `DeltaLake`. [#85295](https://github.com/ClickHouse/ClickHouse/pull/85295) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Сохранять больше статистики Iceberg (размеры столбцов, нижние и верхние границы) в метаданные (записи манифеста) для min-max-прунинга. [#85746](https://github.com/ClickHouse/ClickHouse/pull/85746) ([Konstantин Vedernikov](https://github.com/scanhex12)). -* Добавлена поддержка добавления, удаления и изменения столбцов в Iceberg для простых типов. [#85769](https://github.com/ClickHouse/ClickHouse/pull/85769) ([Konstantин Ведерников](https://github.com/scanhex12)). +* Включить настройку MergeTree `write_marks_for_substreams_in_compact_parts` по умолчанию. Она существенно улучшает производительность чтения подколонок из недавно созданных Compact‑частей. Серверы с версией менее 25.5 не смогут читать новые Compact‑части. [#84171](https://github.com/ClickHouse/ClickHouse/pull/84171) ([Pavel Kruglov](https://github.com/Avogar)). +* Предыдущее значение по умолчанию для `concurrent_threads_scheduler` было `round_robin`, что оказалось несправедливым при большом количестве однопоточных запросов (например, INSERT). Это изменение делает более безопасный планировщик `fair_round_robin` значением по умолчанию. [#84747](https://github.com/ClickHouse/ClickHouse/pull/84747) ([Sergei Trifonov](https://github.com/serxa)). +* ClickHouse поддерживает синтаксис heredoc в стиле PostgreSQL: `$tag$ string contents... $tag$`, также известный как строковые литералы с долларовым кавычкованием. В предыдущих версиях на теги накладывалось меньше ограничений: они могли содержать произвольные символы, включая пунктуацию и пробелы. Это создаёт неоднозначность при разборе с идентификаторами, которые также могут начинаться с символа доллара. В то же время PostgreSQL разрешает в тегах только буквенно-цифровые символы и подчёркивание. Для решения проблемы теперь мы разрешаем в тегах heredoc только символы слова (буквенно-цифровые символы и подчёркивание). Закрывает [#84731](https://github.com/ClickHouse/ClickHouse/issues/84731). [#84846](https://github.com/ClickHouse/ClickHouse/pull/84846) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Функции `azureBlobStorage`, `deltaLakeAzure` и `icebergAzure` были обновлены для корректной проверки разрешений `AZURE`. Все кластерные варианты функций (функции с суффиксом `-Cluster`) теперь сверяют разрешения с соответствующими некластерными аналогами. Дополнительно функции `icebergLocal` и `deltaLakeLocal` теперь применяют проверки разрешений `FILE`. [#84938](https://github.com/ClickHouse/ClickHouse/pull/84938) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). +* Включить настройку `allow_dynamic_metadata_for_data_lakes` (настройка уровня Table Engine) по умолчанию. [#85044](https://github.com/ClickHouse/ClickHouse/pull/85044) ([Daniil Ivanik](https://github.com/divanik)). +* По умолчанию отключить заключение 64‑битных целых чисел в кавычки в форматах JSON. [#74079](https://github.com/ClickHouse/ClickHouse/pull/74079) ([Pavel Kruglov](https://github.com/Avogar)) + +#### Новая функция + +* Добавлена базовая поддержка диалекта PromQL. Чтобы использовать его, установите `dialect='promql'` в clickhouse-client, укажите таблицу TimeSeries с помощью настройки `promql_table_name='X'` и выполняйте запросы вида `rate(ClickHouseProfileEvents_ReadCompressedBytes[1m])[5m:1m]`. Кроме того, вы можете обернуть запрос PromQL в SQL: `SELECT * FROM prometheusQuery('up', ...);`. Пока поддерживаются только функции `rate`, `delta` и `increase`. Унарные/бинарные операторы не поддерживаются. HTTP API отсутствует. [#75036](https://github.com/ClickHouse/ClickHouse/pull/75036) ([Vitaly Baranov](https://github.com/vitlibar)). +* Функция генерации SQL на основе ИИ теперь при наличии может автоматически считывать из переменных окружения ключи ANTHROPIC_API_KEY и OPENAI_API_KEY, что позволяет использовать эту функцию без дополнительной конфигурации. [#83787](https://github.com/ClickHouse/ClickHouse/pull/83787) ([Kaushik Iska](https://github.com/iskakaushik)). +* Реализована поддержка протокола [ArrowFlight RPC](https://arrow.apache.org/docs/format/Flight.html) добавлением новой табличной функции `arrowflight`. [#74184](https://github.com/ClickHouse/ClickHouse/pull/74184) ([zakr600](https://github.com/zakr600)). +* Теперь все таблицы поддерживают виртуальный столбец `_table` (не только таблицы с движком `Merge`), что особенно полезно для запросов с оператором UNION ALL. [#63665](https://github.com/ClickHouse/ClickHouse/pull/63665) ([Xiaozhe Yu](https://github.com/wudidapaopao)). +* Добавлена возможность использовать любую политику хранения (например, объектное хранилище, такое как S3) для внешней агрегации и сортировки. [#84734](https://github.com/ClickHouse/ClickHouse/pull/84734) ([Azat Khuzhin](https://github.com/azat)). +* Реализована аутентификация в AWS S3 с явно заданной ролью IAM. Реализован OAuth для GCS. Эти возможности до недавнего времени были доступны только в ClickHouse Cloud и теперь открыты в составе open source. Синхронизированы некоторые интерфейсы, например, сериализация параметров подключения для объектных хранилищ. [#84011](https://github.com/ClickHouse/ClickHouse/pull/84011) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Добавлена поддержка position deletes для Iceberg TableEngine. [#83094](https://github.com/ClickHouse/ClickHouse/pull/83094) ([Daniil Ivanik](https://github.com/divanik)). +* Добавлена поддержка Iceberg Equality Deletes. [#85843](https://github.com/ClickHouse/ClickHouse/pull/85843) ([Han Fei](https://github.com/hanfei1991)). +* Поддержка записи в Iceberg при операции CREATE. Закрывает [#83927](https://github.com/ClickHouse/ClickHouse/issues/83927). [#83983](https://github.com/ClickHouse/ClickHouse/pull/83983) ([Konstantin Vedernikov](https://github.com/scanhex12)). +* Каталоги Glue для записи. [#84136](https://github.com/ClickHouse/ClickHouse/pull/84136) ([Konstantин Vedernikov](https://github.com/scanhex12)). +* REST-каталоги Iceberg для записи. [#84684](https://github.com/ClickHouse/ClickHouse/pull/84684) ([Konstantin Vedernikov](https://github.com/scanhex12)). +* Объединяет все файлы позиционных удалений Iceberg в файлы данных. Это уменьшает количество и размеры файлов Parquet в хранилище Iceberg. Синтаксис: `OPTIMIZE TABLE table_name`. [#85250](https://github.com/ClickHouse/ClickHouse/pull/85250) ([Konstantin Vedernikov](https://github.com/scanhex12)). +* Поддержка команды `DROP TABLE` для Iceberg (удаление из каталогов REST/Glue и удаление метаданных таблицы). [#85395](https://github.com/ClickHouse/ClickHouse/pull/85395) ([Konstantin Vedernikov](https://github.com/scanhex12)). +* Добавлена поддержка мутаций `ALTER DELETE` для Iceberg в формате merge-on-read. [#85549](https://github.com/ClickHouse/ClickHouse/pull/85549) ([Konstantin Vedernikov](https://github.com/scanhex12)). +* Добавлена поддержка записи в DeltaLake. Закрывает [#79603](https://github.com/ClickHouse/ClickHouse/issues/79603). [#85564](https://github.com/ClickHouse/ClickHouse/pull/85564) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Добавлена настройка `delta_lake_snapshot_version` для чтения снимка указанной версии в табличном движке `DeltaLake`. [#85295](https://github.com/ClickHouse/ClickHouse/pull/85295) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Записывать расширенную статистику Iceberg (размеры столбцов, нижние и верхние границы) в метаданные (записи манифеста) для min-max‑отсечения. [#85746](https://github.com/ClickHouse/ClickHouse/pull/85746) ([Konstantin Vedernikov](https://github.com/scanhex12)). +* Добавлена поддержка операций add/drop/modify над столбцами в формате Iceberg для простых типов. [#85769](https://github.com/ClickHouse/ClickHouse/pull/85769) ([Konstantin Vedernikov](https://github.com/scanhex12)). * Iceberg: добавлена поддержка записи файла version-hint. Это закрывает [#85097](https://github.com/ClickHouse/ClickHouse/issues/85097). [#85130](https://github.com/ClickHouse/ClickHouse/pull/85130) ([Konstantin Vedernikov](https://github.com/scanhex12)). -* Представления, созданные временными пользователями, теперь будут хранить копию реального пользователя и больше не будут инвалидироваться после удаления временного пользователя. [#84763](https://github.com/ClickHouse/ClickHouse/pull/84763) ([pufit](https://github.com/pufit)). -* Индекс похожести векторов теперь поддерживает бинарное квантование. Бинарное квантование значительно снижает потребление памяти и ускоряет процесс построения векторного индекса (за счёт более быстрого вычисления расстояний). Также существующая настройка `vector_search_postfilter_multiplier` была помечена как устаревшая и заменена более общей настройкой: `vector_search_index_fetch_multiplier`. [#85024](https://github.com/ClickHouse/ClickHouse/pull/85024) ([Shankar Iyer](https://github.com/shankar-iyer)). -* Разрешить использование аргументов вида ключ–значение в табличном движке/функции `s3` или `s3Cluster`, например `s3('url', CSV, structure = 'a Int32', compression_method = 'gzip')`. [#85134](https://github.com/ClickHouse/ClickHouse/pull/85134) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Новая системная таблица для хранения ошибочных входящих сообщений от движков, таких как Kafka ("очередь мёртвых писем", dead letter queue). [#68873](https://github.com/ClickHouse/ClickHouse/pull/68873) ([Ilya Golshtein](https://github.com/ilejn)). -* Новая команда SYSTEM RESTORE DATABASE REPLICA для реплицируемых баз данных, аналогичная имеющейся функциональности восстановления в ReplicatedMergeTree. [#73100](https://github.com/ClickHouse/ClickHouse/pull/73100) ([Konstantин Morozов](https://github.com/k-morozov)). -* Теперь в протоколе PostgreSQL поддерживается команда `COPY`. [#74344](https://github.com/ClickHouse/ClickHouse/pull/74344) ([Konstantin Vedernikov](https://github.com/scanhex12)). -* Добавлена поддержка C#-клиента для протокола MySQL. Это закрывает [#83992](https://github.com/ClickHouse/ClickHouse/issues/83992). [#84397](https://github.com/ClickHouse/ClickHouse/pull/84397) ([Konstantin Vedernikov](https://github.com/scanhex12)). -* Добавлена поддержка чтения и записи в формате секционирования Hive. [#76802](https://github.com/ClickHouse/ClickHouse/pull/76802) ([Arthur Passos](https://github.com/arthurpassos)). -* Добавлена системная таблица `zookeeper_connection_log` для хранения истории подключений к ZooKeeper. [#79494](https://github.com/ClickHouse/ClickHouse/pull/79494) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). -* Серверная настройка `cpu_slot_preemption` включает вытесняющее планирование CPU для рабочих нагрузок и обеспечивает справедливое по принципу max-min распределение процессорного времени между ними. Добавлены новые настройки рабочих нагрузок для ограничения потребления CPU: `max_cpus`, `max_cpu_share` и `max_burst_cpu_seconds`. Подробнее: [https://clickhouse.com/docs/operations/workload-scheduling#cpu_scheduling](https://clickhouse.com/docs/operations/workload-scheduling#cpu_scheduling). [#80879](https://github.com/ClickHouse/ClickHouse/pull/80879) ([Sergei Trifonov](https://github.com/serxa)). -* Разрывать TCP-соединение после заданного количества запросов или по достижении заданного порога времени. Это полезно для более равномерного распределения соединений между узлами кластера за балансировщиком нагрузки. Устраняет [#68000](https://github.com/ClickHouse/ClickHouse/issues/68000). [#81472](https://github.com/ClickHouse/ClickHouse/pull/81472) ([Kenny Sun](https://github.com/hwabis)). +* Представления, создаваемые эфемерными пользователями, теперь будут хранить копию соответствующего пользователя и больше не будут становиться недействительными после удаления эфемерного пользователя. [#84763](https://github.com/ClickHouse/ClickHouse/pull/84763) ([pufit](https://github.com/pufit)). +* Индекс векторного сходства теперь поддерживает бинарное квантование. Бинарное квантование существенно снижает потребление памяти и ускоряет процесс построения векторного индекса (за счет более быстрого вычисления расстояний). Также существующая настройка `vector_search_postfilter_multiplier` была признана устаревшей и заменена более общей настройкой: `vector_search_index_fetch_multiplier`. [#85024](https://github.com/ClickHouse/ClickHouse/pull/85024) ([Shankar Iyer](https://github.com/shankar-iyer)). +* Разрешить использование аргументов в формате ключ-значение в табличном движке/функции `s3` или `s3Cluster`, например, `s3('url', CSV, structure = 'a Int32', compression_method = 'gzip')`. [#85134](https://github.com/ClickHouse/ClickHouse/pull/85134) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Новая системная таблица для хранения ошибочных входящих сообщений от движков, таких как Kafka («очередь мёртвых писем»). [#68873](https://github.com/ClickHouse/ClickHouse/pull/68873) ([Ilya Golshtein](https://github.com/ilejn)). +* Новая команда SYSTEM RESTORE DATABASE REPLICA для реплицируемых баз данных, аналогичная существующей функциональности восстановления для ReplicatedMergeTree. [#73100](https://github.com/ClickHouse/ClickHouse/pull/73100) ([Konstantин Morozov](https://github.com/k-morozov)). +* Протокол PostgreSQL теперь поддерживает команду `COPY`. [#74344](https://github.com/ClickHouse/ClickHouse/pull/74344) ([Konstantin Vedernikov](https://github.com/scanhex12)). +* Добавлена поддержка клиента C# для протокола MySQL. Закрывает [#83992](https://github.com/ClickHouse/ClickHouse/issues/83992). [#84397](https://github.com/ClickHouse/ClickHouse/pull/84397) ([Konstantin Vedernikov](https://github.com/scanhex12)). +* Добавлена поддержка чтения и записи в стиле секционирования Hive. [#76802](https://github.com/ClickHouse/ClickHouse/pull/76802) ([Arthur Passos](https://github.com/arthurpassos)). +* Добавлена системная таблица `zookeeper_connection_log` для хранения исторических сведений о соединениях с ZooKeeper. [#79494](https://github.com/ClickHouse/ClickHouse/pull/79494) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). +* Серверная настройка `cpu_slot_preemption` включает вытесняющее планирование CPU для рабочих нагрузок и обеспечивает max-min-справедливое распределение процессорного времени между рабочими нагрузками. Добавлены новые настройки рабочих нагрузок для ограничения использования CPU: `max_cpus`, `max_cpu_share` и `max_burst_cpu_seconds`. Подробности: [https://clickhouse.com/docs/operations/workload-scheduling#cpu_scheduling](https://clickhouse.com/docs/operations/workload-scheduling#cpu_scheduling). [#80879](https://github.com/ClickHouse/ClickHouse/pull/80879) ([Sergei Trifonov](https://github.com/serxa)). +* Разрывать TCP‑подключение после заданного количества запросов или по достижении заданного порога по времени. Это полезно для более равномерного распределения подключений между узлами кластера за балансировщиком нагрузки. Решает проблему [#68000](https://github.com/ClickHouse/ClickHouse/issues/68000). [#81472](https://github.com/ClickHouse/ClickHouse/pull/81472) ([Kenny Sun](https://github.com/hwabis)). * Параллельные реплики теперь поддерживают использование проекций при выполнении запросов. [#82659](https://github.com/ClickHouse/ClickHouse/issues/82659). [#82807](https://github.com/ClickHouse/ClickHouse/pull/82807) ([zoomxi](https://github.com/zoomxi)). -* Добавлена поддержка `DESCRIBE SELECT` в дополнение к `DESCRIBE (SELECT ...)`. [#82947](https://github.com/ClickHouse/ClickHouse/pull/82947) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* Принудительное использование защищённого соединения для mysql_port и postgresql_port. [#82962](https://github.com/ClickHouse/ClickHouse/pull/82962) ([tiandiwonder](https://github.com/tiandiwonder)). -* Теперь пользователи могут выполнять поиск по ключам JSON без учета регистра с помощью `JSONExtractCaseInsensitive` (и других вариантов `JSONExtract`). [#83770](https://github.com/ClickHouse/ClickHouse/pull/83770) ([Alistair Evans](https://github.com/alistairjevans)). -* Добавлена системная таблица `system.completions`. Закрывает [#81889](https://github.com/ClickHouse/ClickHouse/issues/81889). [#83833](https://github.com/ClickHouse/ClickHouse/pull/83833) ([|2ustam](https://github.com/RuS2m)). -* Добавлена новая функция `nowInBlock64`. Пример использования: `SELECT nowInBlock64(6)` возвращает `2025-07-29 17:09:37.775725`. [#84178](https://github.com/ClickHouse/ClickHouse/pull/84178) ([Halersson Paris](https://github.com/halersson)). -* Добавлена поддержка extra_credentials в AzureBlobStorage для аутентификации по client_id и tenant_id. [#84235](https://github.com/ClickHouse/ClickHouse/pull/84235) ([Pablo Marcos](https://github.com/pamarcos)). +* Добавлена поддержка DESCRIBE SELECT в дополнение к DESCRIBE (SELECT ...). [#82947](https://github.com/ClickHouse/ClickHouse/pull/82947) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* Принудительно использовать защищённое соединение для портов mysql_port и postgresql_port. [#82962](https://github.com/ClickHouse/ClickHouse/pull/82962) ([tiandiwonder](https://github.com/tiandiwonder)). +* Теперь пользователи могут выполнять поиск по ключам JSON без учета регистра, используя `JSONExtractCaseInsensitive` (и другие варианты `JSONExtract`). [#83770](https://github.com/ClickHouse/ClickHouse/pull/83770) ([Alistair Evans](https://github.com/alistairjevans)). +* Добавлена таблица `system.completions`. Закрывает [#81889](https://github.com/ClickHouse/ClickHouse/issues/81889). [#83833](https://github.com/ClickHouse/ClickHouse/pull/83833) ([|2ustam](https://github.com/RuS2m)). +* Добавлена новая функция `nowInBlock64`. Пример использования: `SELECT nowInBlock64(6)` вернёт `2025-07-29 17:09:37.775725`. [#84178](https://github.com/ClickHouse/ClickHouse/pull/84178) ([Halersson Paris](https://github.com/halersson)). +* Добавлена поддержка параметра extra_credentials в AzureBlobStorage для аутентификации с использованием client_id и tenant_id. [#84235](https://github.com/ClickHouse/ClickHouse/pull/84235) ([Pablo Marcos](https://github.com/pamarcos)). * Добавлена функция `dateTimeToUUIDv7` для преобразования значения типа DateTime в UUIDv7. Пример использования: `SELECT dateTimeToUUIDv7(toDateTime('2025-08-15 18:57:56'))` возвращает `0198af18-8320-7a7d-abd3-358db23b9d5c`. [#84319](https://github.com/ClickHouse/ClickHouse/pull/84319) ([samradovich](https://github.com/samradovich)). -* Агрегатные функции `timeSeriesDerivToGrid` и `timeSeriesPredictLinearToGrid` для повторного дискретизирования данных на временную сетку, заданную указанными метками времени начала и конца, а также шагом; соответственно вычисляют значения, аналогичные PromQL-функциям `deriv` и `predict_linear`. [#84328](https://github.com/ClickHouse/ClickHouse/pull/84328) ([Stephen Chi](https://github.com/stephchi0)). +* Агрегатные функции `timeSeriesDerivToGrid` и `timeSeriesPredictLinearToGrid` для ресемплирования данных по временной сетке, определяемой заданными начальной меткой времени, конечной меткой времени и шагом; соответственно вычисляют PromQL-подобные функции `deriv` и `predict_linear`. [#84328](https://github.com/ClickHouse/ClickHouse/pull/84328) ([Stephen Chi](https://github.com/stephchi0)). * Добавлены две новые функции TimeSeries: - `timeSeriesRange(start_timestamp, end_timestamp, step)`, - `timeSeriesFromGrid(start_timestamp, end_timestamp, step, values)`. [#85435](https://github.com/ClickHouse/ClickHouse/pull/85435) ([Vitaly Baranov](https://github.com/vitlibar)). -* Добавлен новый синтаксис: `GRANT READ ON S3('s3://foo/.*') TO user`. [#84503](https://github.com/ClickHouse/ClickHouse/pull/84503) ([pufit](https://github.com/pufit)). -* Добавлен новый формат вывода `Hash`. Он вычисляет одно хеш-значение для всех столбцов и строк результата. Это полезно для вычисления «отпечатка» результата, например, в сценариях, когда передача данных является узким местом. Пример: `SELECT arrayJoin(['abc', 'def']), 42 FORMAT Hash` возвращает `e5f9e676db098fdb9530d2059d8c23ef`. [#84607](https://github.com/ClickHouse/ClickHouse/pull/84607) ([Robert Schulze](https://github.com/rschu1ze)). -* Добавлена возможность устанавливать произвольные наблюдатели в запросах Keeper Multi. [#84964](https://github.com/ClickHouse/ClickHouse/pull/84964) ([Mikhail Artemenko](https://github.com/Michicosun)). -* Добавлена опция `--max-concurrency` в инструменте `clickhouse-benchmark`, включающая режим с постепенным увеличением числа параллельных запросов. [#85623](https://github.com/ClickHouse/ClickHouse/pull/85623) ([Sergei Trifonov](https://github.com/serxa)). +* Добавлен новый синтаксис `GRANT READ ON S3('s3://foo/.*') TO user`. [#84503](https://github.com/ClickHouse/ClickHouse/pull/84503) ([pufit](https://github.com/pufit)). +* Добавлен новый формат вывода `Hash`. Он вычисляет одно хеш-значение для всех столбцов и строк результата. Это полезно для вычисления «отпечатка» результата, например, в случаях, когда узким местом является передача данных. Пример: `SELECT arrayJoin(['abc', 'def']), 42 FORMAT Hash` возвращает `e5f9e676db098fdb9530d2059d8c23ef`. [#84607](https://github.com/ClickHouse/ClickHouse/pull/84607) ([Robert Schulze](https://github.com/rschu1ze)). +* Добавлена возможность устанавливать произвольные наблюдения (watches) в запросах Keeper Multi. [#84964](https://github.com/ClickHouse/ClickHouse/pull/84964) ([Mikhail Artemenko](https://github.com/Michicosun)). +* Добавлена опция `--max-concurrency` для инструмента `clickhouse-benchmark`, которая включает режим с постепенным увеличением числа параллельных запросов. [#85623](https://github.com/ClickHouse/ClickHouse/pull/85623) ([Sergei Trifonov](https://github.com/serxa)). * Добавлена поддержка частично агрегированных метрик. [#85328](https://github.com/ClickHouse/ClickHouse/pull/85328) ([Mikhail Artemenko](https://github.com/Michicosun)). +#### Экспериментальные функции +* Включена поддержка коррелированных подзапросов по умолчанию; она больше не считается экспериментальной. [#85107](https://github.com/ClickHouse/ClickHouse/pull/85107) ([Dmitry Novik](https://github.com/novikd)). +* Каталоги озера данных Unity, Glue, Rest и Hive Metastore переведены из экспериментального режима в бета-режим. [#85848](https://github.com/ClickHouse/ClickHouse/pull/85848) ([Melvyn Peignon](https://github.com/melvynator)). +* Лёгкие операции обновления и удаления переведены из экспериментального режима в бета-режим. +* Приблизительный векторный поиск с использованием индексов векторного сходства переведён в статус GA. [#85888](https://github.com/ClickHouse/ClickHouse/pull/85888) ([Robert Schulze](https://github.com/rschu1ze)). +* Добавлены движок таблиц Ytsaurus и табличная функция. [#77606](https://github.com/ClickHouse/ClickHouse/pull/77606) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). +* Ранее данные текстового индекса разделялись на несколько сегментов (размер каждого сегмента по умолчанию составлял 256 MiB). Это могло снизить потребление памяти при построении текстового индекса, однако увеличивало требуемый объём дискового пространства и время ответа на запросы. [#84590](https://github.com/ClickHouse/ClickHouse/pull/84590) ([Elmi Ahmadov](https://github.com/ahmadov)). -#### Экспериментальная функциональность -* Включена поддержка коррелированных подзапросов по умолчанию, они больше не считаются экспериментальными. [#85107](https://github.com/ClickHouse/ClickHouse/pull/85107) ([Dmitry Novik](https://github.com/novikd)). -* Каталоги озера данных Unity, Glue, Rest и Hive Metastore переведены из экспериментального режима в бета-стадию. [#85848](https://github.com/ClickHouse/ClickHouse/pull/85848) ([Melvyn Peignon](https://github.com/melvynator)). -* Облегчённые операции обновления (UPDATE) и удаления (DELETE) переведены из экспериментального режима в бета-стадию. -* Приблизительный векторный поиск с индексами векторного сходства теперь имеет статус GA. [#85888](https://github.com/ClickHouse/ClickHouse/pull/85888) ([Robert Schulze](https://github.com/rschu1ze)). -* Движок таблиц Ytsaurus и табличная функция. [#77606](https://github.com/ClickHouse/ClickHouse/pull/77606) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). -* Ранее данные текстового индекса разделялись на несколько сегментов (размер каждого сегмента по умолчанию составлял 256 MiB). Это могло уменьшить потребление памяти при построении текстового индекса, но увеличивало требования к дисковому пространству и время ответа на запрос. [#84590](https://github.com/ClickHouse/ClickHouse/pull/84590) ([Elmi Ahmadov](https://github.com/ahmadov)). - - - -#### Повышение производительности +#### Улучшение производительности -* Новая реализация ридера Parquet. В целом работает быстрее, поддерживает проталкивание фильтров на уровне страниц (page-level filter pushdown) и PREWHERE. Пока является экспериментальной. Используйте настройку `input_format_parquet_use_native_reader_v3`, чтобы её включить. [#82789](https://github.com/ClickHouse/ClickHouse/pull/82789) ([Michael Kolupaev](https://github.com/al13n321)). -* Официальный HTTP-транспорт в библиотеке Azure был заменён нашей собственной реализацией HTTP‑клиента для Azure Blob Storage. Добавлены многочисленные настройки для этого клиента, которые соответствуют настройкам для S3. Введены агрессивные тайм-ауты установления соединения как для Azure, так и для S3. Улучшена возможность инспектирования событий и метрик профиля Azure. Новый клиент включён по умолчанию и обеспечивает значительно меньшую задержку для холодных запросов при работе с Azure Blob Storage. Старый клиент на базе `Curl` можно вернуть, установив параметр `azure_sdk_use_native_client=false`. [#83294](https://github.com/ClickHouse/ClickHouse/pull/83294) ([alesapin](https://github.com/alesapin)). Предыдущая официальная реализация клиента Azure была непригодна для эксплуатации в продакшене из-за ужасных всплесков задержки — от пяти секунд до минут. Мы избавились от этой ужасной реализации и очень этим гордимся. -* Обрабатывает индексы в порядке возрастания размера файла. Конечный порядок индексов отдаёт приоритет индексам minmax и векторным индексам (из-за простоты и селективности соответственно), а затем — небольшим индексам. Внутри групп minmax/векторных индексов также предпочитаются индексы меньшего размера. [#84094](https://github.com/ClickHouse/ClickHouse/pull/84094) ([Maruth Goyal](https://github.com/maruthgoyal)). -* По умолчанию включена настройка MergeTree `write_marks_for_substreams_in_compact_parts`. Это существенно повышает производительность чтения подколонок из вновь создаваемых Compact‑частей. Серверы с версией ниже 25.5 не смогут читать новые Compact‑части. [#84171](https://github.com/ClickHouse/ClickHouse/pull/84171) ([Pavel Kruglov](https://github.com/Avogar)). -* Движок таблицы `azureBlobStorage`: кэшировать и по возможности повторно использовать токены проверки подлинности управляемого удостоверения, чтобы избежать ограничения частоты запросов. [#79860](https://github.com/ClickHouse/ClickHouse/pull/79860) ([Nick Blakely](https://github.com/niblak)). -* Операции `ALL` `LEFT/INNER` JOIN будут автоматически преобразованы в `RightAny`, если правая сторона соединения функционально определяется столбцами ключа соединения (во всех строках уникальные значения ключа соединения). [#84010](https://github.com/ClickHouse/ClickHouse/pull/84010) ([Nikita Taranov](https://github.com/nickitat)). -* Добавлен параметр `max_joined_block_size_bytes` в дополнение к `max_joined_block_size_rows` для ограничения потребления памяти при выполнении операций JOIN с «тяжёлыми» столбцами. [#83869](https://github.com/ClickHouse/ClickHouse/pull/83869) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). -* Добавлена новая логика (управляется настройкой `enable_producing_buckets_out_of_order_in_aggregation`, по умолчанию включена), которая позволяет отправлять некоторые бакеты не по порядку при агрегации с экономным использованием памяти. Когда слияние некоторых бакетов агрегации занимает значительно больше времени, чем слияние других, это улучшает производительность, позволяя инициатору тем временем сливать бакеты с более высокими идентификаторами. Недостаток — потенциально более высокое потребление памяти (не должно быть значительным). [#80179](https://github.com/ClickHouse/ClickHouse/pull/80179) ([Nikita Taranov](https://github.com/nickitat)). -* Добавлена настройка `optimize_rewrite_regexp_functions` (включена по умолчанию), которая позволяет оптимизатору переписывать некоторые вызовы функций `replaceRegexpAll`, `replaceRegexpOne` и `extract` в более простые и эффективные формы при обнаружении определённых шаблонов регулярных выражений. (issue [#81981](https://github.com/ClickHouse/ClickHouse/issues/81981)). [#81992](https://github.com/ClickHouse/ClickHouse/pull/81992) ([Amos Bird](https://github.com/amosbird)). -* Обрабатывать `max_joined_block_rows` вне основного цикла хешированного JOIN. Незначительно улучшена производительность ALL JOIN. [#83216](https://github.com/ClickHouse/ClickHouse/pull/83216) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). -* Сначала обрабатывать min-max-индексы с более высокой детализацией. Закрывает [#75381](https://github.com/ClickHouse/ClickHouse/issues/75381). [#83798](https://github.com/ClickHouse/ClickHouse/pull/83798) ([Maruth Goyal](https://github.com/maruthgoyal)). -* Обеспечить выполнение оконных агрегатных функций с `DISTINCT` за линейное время и исправить ошибку в `sumDistinct`. Закрывает [#79792](https://github.com/ClickHouse/ClickHouse/issues/79792). Закрывает [#52253](https://github.com/ClickHouse/ClickHouse/issues/52253). [#79859](https://github.com/ClickHouse/ClickHouse/pull/79859) ([Nihal Z. Miaji](https://github.com/nihalzp)). -* Векторные поисковые запросы с использованием индекса векторного сходства выполняются с меньшими задержками за счет уменьшения количества чтений из хранилища и снижения загрузки процессора. [#83803](https://github.com/ClickHouse/ClickHouse/pull/83803) ([Shankar Iyer](https://github.com/shankar-iyer)). -* Rendezvous-хеширование для улучшения локальности кэша при распределении нагрузки по параллельным репликам. [#82511](https://github.com/ClickHouse/ClickHouse/pull/82511) ([Anton Ivashkin](https://github.com/ianton-ru)). -* Реализована функция `addManyDefaults` для комбинаторов `If`, благодаря чему агрегатные функции с комбинаторами `If` теперь работают быстрее. [#83870](https://github.com/ClickHouse/ClickHouse/pull/83870) ([Raúl Marín](https://github.com/Algunenano)). -* Вычислять сериализованный ключ по столбцам при группировке по нескольким строковым или числовым столбцам. [#83884](https://github.com/ClickHouse/ClickHouse/pull/83884) ([李扬](https://github.com/taiyang-li)). -* Исключено полное сканирование таблицы в случаях, когда анализ индекса приводит к пустым диапазонам при чтении с параллельных реплик. [#84971](https://github.com/ClickHouse/ClickHouse/pull/84971) ([Eduard Karacharov](https://github.com/korowa)). -* Попробуйте `-falign-functions=64` для более стабильных тестов производительности. [#83920](https://github.com/ClickHouse/ClickHouse/pull/83920) ([Azat Khuzhin](https://github.com/azat)). -* Индекс блум-фильтра теперь используется для условий вида `has([c1, c2, ...], column)`, где `column` не относится к типу `Array`. Это повышает производительность таких запросов, делая их столь же эффективными, как оператор `IN`. [#83945](https://github.com/ClickHouse/ClickHouse/pull/83945) ([Doron David](https://github.com/dorki)). -* Снижено число избыточных вызовов memcpy в CompressedReadBufferBase::readCompressedData. [#83986](https://github.com/ClickHouse/ClickHouse/pull/83986) ([Raúl Marín](https://github.com/Algunenano)). -* Оптимизировать `largestTriangleThreeBuckets` путём удаления временных данных. [#84479](https://github.com/ClickHouse/ClickHouse/pull/84479) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Оптимизирована десериализация строк за счет упрощения кода. Закрывает [#38564](https://github.com/ClickHouse/ClickHouse/issues/38564). [#84561](https://github.com/ClickHouse/ClickHouse/pull/84561) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Исправлен расчет минимального размера задачи для параллельных реплик. [#84752](https://github.com/ClickHouse/ClickHouse/pull/84752) ([Nikita Taranov](https://github.com/nickitat)). -* Повышена производительность применения частей патча в режиме `Join`. [#85040](https://github.com/ClickHouse/ClickHouse/pull/85040) ([Anton Popov](https://github.com/CurtizJ)). -* Исправлена обработка нулевого байта. Закрывает [#85062](https://github.com/ClickHouse/ClickHouse/issues/85062). Исправлено несколько незначительных ошибок. Функции `structureToProtobufSchema`, `structureToCapnProtoSchema` некорректно ставили нуль-терминирующий байт и использовали символ новой строки вместо него. Это приводило к отсутствию новой строки в выводе и могло приводить к переполнению буфера при использовании других функций, зависящих от нулевого байта (таких, как `logTrace`, `demangle`, `extractURLParameter`, `toStringCutToZero` и `encrypt`/`decrypt`). Макет словаря `regexp_tree` не поддерживал обработку строк с нулевыми байтами. Функция `formatRowNoNewline`, вызываемая с форматом `Values` или с любым другим форматом без новой строки в конце строк, ошибочно обрезала последний символ вывода. Функция `stem` содержала ошибку безопасной обработки исключений, которая в очень редком сценарии могла привести к утечке памяти. Функция `initcap` работала неправильно для аргументов типа `FixedString`: она не распознавала начало слова в начале строки, если предыдущая строка в блоке заканчивалась символом слова. Исправлена уязвимость формата Apache `ORC`, которая могла привести к раскрытию неинициализированной памяти. Изменено поведение функции `replaceRegexpAll` и соответствующего алиаса `REGEXP_REPLACE`: теперь она может выполнять пустое совпадение в конце строки, даже если предыдущее совпадение охватило всю строку, как в случае `^a*|a*$` или `^|.*` — это соответствует семантике JavaScript, Perl, Python, PHP, Ruby, но отличается от семантики PostgreSQL. Реализация многих функций была упрощена и оптимизирована. Документация для нескольких функций была некорректной и теперь исправлена. Имейте в виду, что вывод `byteSize` для столбцов типа String и сложных типов, состоящих из столбцов типа String, изменился (с 9 байт на пустую строку на 8 байт на пустую строку), и это нормально. [#85063](https://github.com/ClickHouse/ClickHouse/pull/85063) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Оптимизировать материализацию констант в случаях, когда она выполняется только для возврата одной строки. [#85071](https://github.com/ClickHouse/ClickHouse/pull/85071) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Новая реализация считывателя Parquet. В целом она работает быстрее и поддерживает проталкивание фильтра на уровне страниц и PREWHERE. В настоящий момент является экспериментальной. Используйте настройку `input_format_parquet_use_native_reader_v3`, чтобы включить её. [#82789](https://github.com/ClickHouse/ClickHouse/pull/82789) ([Michael Kolupaev](https://github.com/al13n321)). +* Официальный HTTP-транспорт в библиотеке Azure был заменён на нашу собственную реализацию HTTP‑клиента для Azure Blob Storage. Добавлено несколько настроек для этих клиентов, аналогичных настройкам для S3. Введены агрессивные тайм-ауты установления соединения как для Azure, так и для S3. Улучшены возможности анализа событий и метрик профилирования Azure. Новый клиент включён по умолчанию и обеспечивает значительно более низкие задержки для «холодных» запросов к Azure Blob Storage. Старый клиент на основе `Curl` можно вернуть, установив `azure_sdk_use_native_client=false`. [#83294](https://github.com/ClickHouse/ClickHouse/pull/83294) ([alesapin](https://github.com/alesapin)). Предыдущая, официальная реализация клиента Azure была непригодна для использования в продакшене из‑за ужасных всплесков задержек — от пяти секунд до нескольких минут. Мы отказались от этой ужасной реализации и очень этим гордимся. +* Обрабатывает индексы в порядке возрастания размера файла. Итоговый порядок индексов отдает приоритет индексам minmax и vector (из-за простоты и селективности соответственно), а затем более компактным индексам. Среди индексов minmax/vector также предпочитаются индексы меньшего размера. [#84094](https://github.com/ClickHouse/ClickHouse/pull/84094) ([Maruth Goyal](https://github.com/maruthgoyal)). +* По умолчанию включена настройка MergeTree `write_marks_for_substreams_in_compact_parts`. Она значительно улучшает производительность чтения подколонок из вновь созданных Compact-частей. Серверы с версией ниже 25.5 не смогут читать новые Compact-части. [#84171](https://github.com/ClickHouse/ClickHouse/pull/84171) ([Pavel Kruglov](https://github.com/Avogar)). +* Движок таблицы `azureBlobStorage`: кэшировать и повторно использовать токены аутентификации управляемой идентичности, когда это возможно, чтобы избежать ограничения частоты запросов. [#79860](https://github.com/ClickHouse/ClickHouse/pull/79860) ([Nick Blakely](https://github.com/niblak)). +* Операции `ALL` `LEFT/INNER` JOIN будут автоматически преобразовываться в `RightAny`, если правая сторона функционально определяется столбцами ключа соединения (все строки имеют уникальные значения ключа соединения). [#84010](https://github.com/ClickHouse/ClickHouse/pull/84010) ([Nikita Taranov](https://github.com/nickitat)). +* Добавлен параметр `max_joined_block_size_bytes` в дополнение к `max_joined_block_size_rows` для ограничения потребления памяти при выполнении операций JOIN с «объёмными» столбцами. [#83869](https://github.com/ClickHouse/ClickHouse/pull/83869) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). +* Добавлена новая логика (управляется настройкой `enable_producing_buckets_out_of_order_in_aggregation`, по умолчанию включена), которая позволяет отправлять некоторые бакеты в непорядке во время агрегации с экономным использованием памяти. Когда слияние некоторых бакетов агрегации занимает значительно больше времени, чем остальных, это повышает производительность, позволяя инициатору в это время сливать бакеты с более высокими идентификаторами. Недостаток — потенциально более высокое потребление памяти (не должно быть существенным). [#80179](https://github.com/ClickHouse/ClickHouse/pull/80179) ([Nikita Taranov](https://github.com/nickitat)). +* Добавлена настройка `optimize_rewrite_regexp_functions` (включена по умолчанию), которая позволяет оптимизатору преобразовывать некоторые вызовы функций `replaceRegexpAll`, `replaceRegexpOne` и `extract` в более простые и эффективные формы при обнаружении определённых шаблонов регулярных выражений. (issue [#81981](https://github.com/ClickHouse/ClickHouse/issues/81981)). [#81992](https://github.com/ClickHouse/ClickHouse/pull/81992) ([Amos Bird](https://github.com/amosbird)). +* Обрабатывать `max_joined_block_rows` вне основного цикла hash JOIN. Незначительно улучшена производительность для ALL JOIN. [#83216](https://github.com/ClickHouse/ClickHouse/pull/83216) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). +* Сначала обрабатывать индексы min-max с более высокой детализацией. Закрывает [#75381](https://github.com/ClickHouse/ClickHouse/issues/75381). [#83798](https://github.com/ClickHouse/ClickHouse/pull/83798) ([Maruth Goyal](https://github.com/maruthgoyal)). +* Сделать так, чтобы оконные агрегатные функции с `DISTINCT` работали за линейное время, и исправить ошибку в `sumDistinct`. Закрывает [#79792](https://github.com/ClickHouse/ClickHouse/issues/79792). Закрывает [#52253](https://github.com/ClickHouse/ClickHouse/issues/52253). [#79859](https://github.com/ClickHouse/ClickHouse/pull/79859) ([Nihal Z. Miaji](https://github.com/nihalzp)). +* Запросы векторного поиска с использованием индекса векторного сходства выполняются с меньшей задержкой за счет сокращения операций чтения из хранилища и снижения нагрузки на CPU. [#83803](https://github.com/ClickHouse/ClickHouse/pull/83803) ([Shankar Iyer](https://github.com/shankar-iyer)). +* Rendezvous-хеширование для улучшения локальности кэша при распределении нагрузки между параллельными репликами. [#82511](https://github.com/ClickHouse/ClickHouse/pull/82511) ([Anton Ivashkin](https://github.com/ianton-ru)). +* Реализована функция `addManyDefaults` для комбинаторов `If`, благодаря чему агрегатные функции с `If` теперь работают быстрее. [#83870](https://github.com/ClickHouse/ClickHouse/pull/83870) ([Raúl Marín](https://github.com/Algunenano)). +* Вычислять сериализованный ключ в колоннарном формате при группировке по нескольким строковым или числовым столбцам. [#83884](https://github.com/ClickHouse/ClickHouse/pull/83884) ([李扬](https://github.com/taiyang-li)). +* Исключено полное сканирование в случаях, когда анализ индексов приводит к пустым диапазонам при параллельном чтении реплик. [#84971](https://github.com/ClickHouse/ClickHouse/pull/84971) ([Eduard Karacharov](https://github.com/korowa)). +* Попробовать опцию -falign-functions=64 для повышения стабильности тестов производительности. [#83920](https://github.com/ClickHouse/ClickHouse/pull/83920) ([Azat Khuzhin](https://github.com/azat)). +* Индекс блум-фильтра теперь используется для условий вида `has([c1, c2, ...], column)`, где `column` не относится к типу `Array`. Это улучшает производительность таких запросов, делая их по эффективности сопоставимыми с оператором `IN`. [#83945](https://github.com/ClickHouse/ClickHouse/pull/83945) ([Doron David](https://github.com/dorki)). +* Снижено число лишних вызовов memcpy в CompressedReadBufferBase::readCompressedData. [#83986](https://github.com/ClickHouse/ClickHouse/pull/83986) ([Raúl Marín](https://github.com/Algunenano)). +* Оптимизирован `largestTriangleThreeBuckets` за счёт удаления временных данных. [#84479](https://github.com/ClickHouse/ClickHouse/pull/84479) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Оптимизировать десериализацию строк за счёт упрощения кода. Закрывает [#38564](https://github.com/ClickHouse/ClickHouse/issues/38564). [#84561](https://github.com/ClickHouse/ClickHouse/pull/84561) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Исправлен расчёт минимального размера задачи для параллельных реплик. [#84752](https://github.com/ClickHouse/ClickHouse/pull/84752) ([Nikita Taranov](https://github.com/nickitat)). +* Повышена производительность применения патч‑частей в режиме `Join`. [#85040](https://github.com/ClickHouse/ClickHouse/pull/85040) ([Anton Popov](https://github.com/CurtizJ)). +* Удалён нулевой байт. Закрывает [#85062](https://github.com/ClickHouse/ClickHouse/issues/85062). Исправлено несколько незначительных багов. Функции `structureToProtobufSchema`, `structureToCapnProtoSchema` некорректно записывали нуль-терминирующий байт и использовали перевод строки вместо него. Это приводило к отсутствию перевода строки в выводе и могло приводить к переполнению буфера при использовании других функций, зависящих от нулевого байта (таких как `logTrace`, `demangle`, `extractURLParameter`, `toStringCutToZero` и `encrypt`/`decrypt`). Структура словаря `regexp_tree` не поддерживала обработку строк с нулевыми байтами. Функция `formatRowNoNewline`, вызываемая с форматом `Values` или с любым другим форматом без перевода строки в конце строк, ошибочно обрезала последний символ вывода. Функция `stem` содержала ошибку в гарантиях безопасности исключений, которая в очень редком сценарии могла приводить к утечке памяти. Функция `initcap` работала неправильно для аргументов типа `FixedString`: она не распознавала начало слова в начале строки, если предыдущая строка в блоке заканчивалась на буквенно-цифровой символ. Исправлена уязвимость безопасности формата Apache `ORC`, которая могла приводить к раскрытию неинициализированной памяти. Изменено поведение функции `replaceRegexpAll` и соответствующего алиаса `REGEXP_REPLACE`: теперь она может выполнять пустое совпадение в конце строки, даже если предыдущее совпадение обработало всю строку, как в случае `^a*|a*$` или `^|.*` — это соответствует семантике JavaScript, Perl, Python, PHP, Ruby, но отличается от семантики PostgreSQL. Реализация многих функций была упрощена и оптимизирована. Документация для нескольких функций была неверной и теперь исправлена. Имейте в виду, что вывод функции `byteSize` для столбцов типа String и сложных типов, состоящих из столбцов типа String, изменился (с 9 байт на пустую строку на 8 байт на пустую строку), и это ожидаемое поведение. [#85063](https://github.com/ClickHouse/ClickHouse/pull/85063) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Оптимизирована материализация констант в случаях, когда она выполняется исключительно для возврата одной строки. [#85071](https://github.com/ClickHouse/ClickHouse/pull/85071) ([Alexey Milovidov](https://github.com/alexey-milovidov)). * Улучшена параллельная обработка файлов с помощью бэкенда delta-kernel-rs. [#85642](https://github.com/ClickHouse/ClickHouse/pull/85642) ([Azat Khuzhin](https://github.com/azat)). -* Добавлена новая настройка enable_add_distinct_to_in_subqueries. При её включении ClickHouse будет автоматически добавлять DISTINCT в подзапросы в выражениях IN для распределённых запросов. Это может значительно уменьшить размер временных таблиц, передаваемых между шардами, и повысить эффективность использования сетевых ресурсов. Примечание: это компромисс — хотя объём передаваемых по сети данных сокращается, на каждом узле требуется дополнительная работа по слиянию (удалению дубликатов). Включайте эту настройку, когда узким местом является сетевой трафик и стоимость слияния приемлема. [#81908](https://github.com/ClickHouse/ClickHouse/pull/81908) ([fhw12345](https://github.com/fhw12345)). -* Снижены накладные расходы при отслеживании использования памяти запросов для исполняемых пользовательских функций. [#83929](https://github.com/ClickHouse/ClickHouse/pull/83929) ([Eduard Karacharov](https://github.com/korowa)). -* Реализована внутренняя фильтрация `delta-kernel-rs` (по статистике и отсечению партиций) в хранилище `DeltaLake`. [#84006](https://github.com/ClickHouse/ClickHouse/pull/84006) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Более тонко регулируется отключение пропускающих индексов, которые зависят от столбцов, обновляемых «на лету» или через patch parts. Теперь пропускающие индексы не используются только в частях, затронутых мутациями «на лету» или patch parts; ранее такие индексы отключались для всех частей. [#84241](https://github.com/ClickHouse/ClickHouse/pull/84241) ([Anton Popov](https://github.com/CurtizJ)). -* Выделяйте минимальный объём памяти, необходимый под encrypted_buffer для зашифрованных именованных коллекций. [#84432](https://github.com/ClickHouse/ClickHouse/pull/84432) ([Pablo Marcos](https://github.com/pamarcos)). -* Улучшена поддержка индексов блум‑фильтра (обычных, ngram и token), которые теперь могут использоваться, когда первый аргумент — константный массив (множество), а второй — индексированный столбец (подмножество), что обеспечивает более эффективное выполнение запросов. [#84700](https://github.com/ClickHouse/ClickHouse/pull/84700) ([Doron David](https://github.com/dorki)). +* Была введена новая настройка enable_add_distinct_to_in_subqueries. При её включении ClickHouse автоматически добавляет DISTINCT к подзапросам в выражениях IN для распределённых запросов. Это может значительно уменьшить размер временных таблиц, передаваемых между шардами, и повысить эффективность использования сети. Примечание: это компромисс — хотя объём сетевого трафика сокращается, на каждом узле требуется дополнительная работа по слиянию (удалению дубликатов). Включайте этот параметр, когда сетевой трафик является узким местом, а стоимость слияния приемлема. [#81908](https://github.com/ClickHouse/ClickHouse/pull/81908) ([fhw12345](https://github.com/fhw12345)). +* Снижены накладные расходы на отслеживание потребления памяти запросами для выполняемых пользовательских функций. [#83929](https://github.com/ClickHouse/ClickHouse/pull/83929) ([Eduard Karacharov](https://github.com/korowa)). +* Реализована внутренняя фильтрация в хранилище `DeltaLake` с использованием `delta-kernel-rs` (статистика и отсечение партиций). [#84006](https://github.com/ClickHouse/ClickHouse/pull/84006) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Более гибко настроено отключение пропускающих индексов, зависящих от столбцов, обновляемых «на лету» или с помощью `patch`‑частей. Теперь пропускающие индексы не используются только в тех частях, которые затронуты мутациями «на лету» или `patch`‑частями; ранее такие индексы отключались для всех частей. [#84241](https://github.com/ClickHouse/ClickHouse/pull/84241) ([Anton Popov](https://github.com/CurtizJ)). +* Выделять минимально необходимый объём памяти под encrypted_buffer для зашифрованных именованных коллекций. [#84432](https://github.com/ClickHouse/ClickHouse/pull/84432) ([Pablo Marcos](https://github.com/pamarcos)). +* Улучшена поддержка индексов блум-фильтра (обычных, `ngram` и `token`), которые теперь используются в случаях, когда первый аргумент — константный массив (множество), а второй — индексируемый столбец (подмножество), что обеспечивает более эффективное выполнение запросов. [#84700](https://github.com/ClickHouse/ClickHouse/pull/84700) ([Doron David](https://github.com/dorki)). * Снижена конкуренция за блокировку хранилища в Keeper. [#84732](https://github.com/ClickHouse/ClickHouse/pull/84732) ([Antonio Andelic](https://github.com/antonio2368)). -* Добавлена поддержка `read_in_order_use_virtual_row` для `WHERE`. Это позволяет пропускать чтение дополнительных частей для запросов с фильтрами, которые не удалось полностью протолкнуть в `PREWHERE`. [#84835](https://github.com/ClickHouse/ClickHouse/pull/84835) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). -* Позволяет асинхронно перебирать объекты из таблицы Iceberg без явного хранения объектов для каждого файла данных. [#85369](https://github.com/ClickHouse/ClickHouse/pull/85369) ([Daniil Ivanik](https://github.com/divanik)). -* Выполняет некоррелированный `EXISTS` в виде скалярного подзапроса. Это позволяет использовать кэш скалярных подзапросов и выполнять константное свёртывание результата, что полезно для индексов. Для совместимости добавлена новая настройка `execute_exists_as_scalar_subquery=1`. [#85481](https://github.com/ClickHouse/ClickHouse/pull/85481) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). - - - - - -#### Улучшение - -* Добавлены настройки `database_replicated`, задающие значения по умолчанию для DatabaseReplicatedSettings. Если настройка отсутствует в запросе создания реплицируемой базы данных, используется значение из `database_replicated`. [#85127](https://github.com/ClickHouse/ClickHouse/pull/85127) ([Tuan Pham Anh](https://github.com/tuanpach)). -* В веб-интерфейсе (play) добавлена возможность изменять ширину столбцов таблицы. [#84012](https://github.com/ClickHouse/ClickHouse/pull/84012) ([Doron David](https://github.com/dorki)). -* Добавлена поддержка сжатого файла `.metadata.json` через настройку `iceberg_metadata_compression_method`. Поддерживаются все методы сжатия ClickHouse. Тем самым закрывается [#84895](https://github.com/ClickHouse/ClickHouse/issues/84895). [#85196](https://github.com/ClickHouse/ClickHouse/pull/85196) ([Konstantin Vedernikov](https://github.com/scanhex12)). -* Теперь в выводе `EXPLAIN indexes = 1` отображается количество диапазонов, которые будут прочитаны. [#79938](https://github.com/ClickHouse/ClickHouse/pull/79938) ([Christoph Wurm](https://github.com/cwurm)). -* Добавлены настройки для задания размера блока сжатия ORC и обновлено значение по умолчанию с 64 KB до 256 KB, чтобы привести его в соответствие с Spark и Hive. [#80602](https://github.com/ClickHouse/ClickHouse/pull/80602) ([李扬](https://github.com/taiyang-li)). -* Добавлен файл `columns_substreams.txt` в Wide-часть для отслеживания всех подстримов, хранящихся в части. Это помогает отслеживать динамические стримы в типах JSON и Dynamic и таким образом позволяет избежать необходимости чтения выборки этих столбцов для получения списка динамических стримов (например, для вычисления размеров столбцов). Также теперь все динамические стримы отображаются в `system.parts_columns`. [#81091](https://github.com/ClickHouse/ClickHouse/pull/81091) ([Pavel Kruglov](https://github.com/Avogar)). -* Добавлен флаг командной строки `--show_secrets` для `clickhouse format`, который по умолчанию скрывает конфиденциальные данные. [#81524](https://github.com/ClickHouse/ClickHouse/pull/81524) ([Nikolai Ryzhov](https://github.com/Dolaxom)). -* Запросы на чтение и запись в S3 дросселируются на уровне HTTP-сокета (вместо всего запроса к S3), чтобы избежать проблем с дросселированием `max_remote_read_network_bandwidth_for_server` и `max_remote_write_network_bandwidth_for_server`. [#81837](https://github.com/ClickHouse/ClickHouse/pull/81837) ([Sergei Trifonov](https://github.com/serxa)). -* Разрешено смешивать разные правила сопоставления (collation) для одного и того же столбца в разных окнах (для оконных функций). [#82877](https://github.com/ClickHouse/ClickHouse/pull/82877) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* Добавлен инструмент, который позволяет моделировать, визуализировать и сравнивать селекторы слияния. [#71496](https://github.com/ClickHouse/ClickHouse/pull/71496) ([Sergei Trifonov](https://github.com/serxa)). -* Добавлена поддержка табличных функций `remote*` с параллельными репликами, если в аргументе `address_expression` указан кластер. Также исправлена [#73295](https://github.com/ClickHouse/ClickHouse/issues/73295). [#82904](https://github.com/ClickHouse/ClickHouse/pull/82904) ([Igor Nikonov](https://github.com/devcrafter)). -* Все сообщения журнала, связанные с записью файлов резервных копий, переведены на уровень TRACE. [#82907](https://github.com/ClickHouse/ClickHouse/pull/82907) ([Hans Krutzer](https://github.com/hkrutzer)). -* Пользовательские функции с необычными именами и кодеками могут некорректно форматироваться SQL-форматтером. Это закрывает [#83092](https://github.com/ClickHouse/ClickHouse/issues/83092). [#83644](https://github.com/ClickHouse/ClickHouse/pull/83644) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Теперь можно использовать типы Time и Time64 внутри типа JSON. [#83784](https://github.com/ClickHouse/ClickHouse/pull/83784) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* Соединения с параллельными репликами теперь используют логический шаг JOIN. Если возникают какие-либо проблемы с запросами `JOIN`, использующими параллельные реплики, попробуйте `SET query_plan_use_new_logical_join_step=0` и сообщите о проблеме. [#83801](https://github.com/ClickHouse/ClickHouse/pull/83801) ([Vladimir Cherkasov](https://github.com/vdimir)). -* Исправлена совместимость cluster_function_process_archive_on_multiple_nodes. [#83968](https://github.com/ClickHouse/ClickHouse/pull/83968) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Добавлена поддержка изменения настроек вставки в материализованные представления на уровне таблицы `S3Queue`. Добавлены новые настройки уровня `S3Queue`: `min_insert_block_size_rows_for_materialized_views` и `min_insert_block_size_bytes_for_materialized_views`. По умолчанию будут использоваться настройки на уровне профиля, а настройки уровня `S3Queue` будут их переопределять. [#83971](https://github.com/ClickHouse/ClickHouse/pull/83971) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Добавлено событие профилирования `MutationAffectedRowsUpperBound`, которое показывает количество строк, затронутых мутацией (например, общее количество строк, удовлетворяющих условию в запросе `ALTER UPDATE` или `ALTER DELETE`). [#83978](https://github.com/ClickHouse/ClickHouse/pull/83978) ([Anton Popov](https://github.com/CurtizJ)). -* Использовать информацию из cgroup (если применимо, то есть когда включён `memory_worker_use_cgroup` и доступны cgroups) для корректировки трекера памяти (`memory_worker_correct_memory_tracker`). [#83981](https://github.com/ClickHouse/ClickHouse/pull/83981) ([Azat Khuzhin](https://github.com/azat)). -* MongoDB: неявное преобразование строк в числовые типы. Ранее если из источника MongoDB для числового столбца в таблице ClickHouse поступало строковое значение, выбрасывалось исключение. Теперь движок пытается автоматически преобразовать строку в числовое значение. Закрывает [#81167](https://github.com/ClickHouse/ClickHouse/issues/81167). [#84069](https://github.com/ClickHouse/ClickHouse/pull/84069) ([Kirill Nikiforov](https://github.com/allmazz)). -* Подсветка групп цифр в форматах `Pretty` для чисел типа `Nullable`. [#84070](https://github.com/ClickHouse/ClickHouse/pull/84070) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Добавлена недостающая поддержка `read_in_order_use_virtual_row` для `WHERE`. Это позволяет избегать чтения дополнительных кусков данных для запросов с фильтрами, которые не были полностью перенесены в `PREWHERE`. [#84835](https://github.com/ClickHouse/ClickHouse/pull/84835) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). +* Позволяет асинхронно перебирать объекты таблицы Iceberg без явного хранения объектов для каждого файла данных. [#85369](https://github.com/ClickHouse/ClickHouse/pull/85369) ([Daniil Ivanik](https://github.com/divanik)). +* Выполнять некоррелированный `EXISTS` как скалярный подзапрос. Это позволяет использовать кэш скалярных подзапросов и выполнять свёртывание результата к константе, что полезно для индексов. Для совместимости добавлена новая настройка `execute_exists_as_scalar_subquery=1`. [#85481](https://github.com/ClickHouse/ClickHouse/pull/85481) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). + +#### Улучшения + +* Добавлены настройки `database_replicated`, задающие значения по умолчанию для параметров DatabaseReplicatedSettings. Если параметр не указан в запросе создания реплицируемой базы данных, используется значение из `database_replicated`. [#85127](https://github.com/ClickHouse/ClickHouse/pull/85127) ([Tuan Pham Anh](https://github.com/tuanpach)). +* Добавлена возможность изменять размер столбцов таблицы в веб-интерфейсе (play). [#84012](https://github.com/ClickHouse/ClickHouse/pull/84012) ([Doron David](https://github.com/dorki)). +* Добавлена поддержка сжатого файла `.metadata.json` с помощью настройки `iceberg_metadata_compression_method`. Поддерживаются все методы сжатия ClickHouse. Это закрывает [#84895](https://github.com/ClickHouse/ClickHouse/issues/84895). [#85196](https://github.com/ClickHouse/ClickHouse/pull/85196) ([Konstantin Vedernikov](https://github.com/scanhex12)). +* Показывать в выводе `EXPLAIN indexes = 1` количество диапазонов для чтения. [#79938](https://github.com/ClickHouse/ClickHouse/pull/79938) ([Christoph Wurm](https://github.com/cwurm)). +* Добавлены настройки для задания размера блока сжатия ORC и изменено значение по умолчанию с 64 КБ до 256 КБ для соответствия Spark и Hive. [#80602](https://github.com/ClickHouse/ClickHouse/pull/80602) ([李扬](https://github.com/taiyang-li)). +* Добавлен файл `columns_substreams.txt` в части формата Wide для отслеживания всех подпотоков, хранящихся в части. Это помогает отслеживать динамические потоки в типах JSON и Dynamic и таким образом избегать чтения образца данных этих столбцов для получения списка динамических потоков (например, для расчёта размеров столбцов). Также теперь все динамические потоки отражены в `system.parts_columns`. [#81091](https://github.com/ClickHouse/ClickHouse/pull/81091) ([Pavel Kruglov](https://github.com/Avogar)). +* В команду clickhouse format добавлен флаг CLI --show_secrets, который по умолчанию скрывает конфиденциальные данные. [#81524](https://github.com/ClickHouse/ClickHouse/pull/81524) ([Nikolai Ryzhov](https://github.com/Dolaxom)). +* Запросы чтения и записи в S3 теперь ограничиваются по пропускной способности на уровне HTTP-сокета (а не целого запроса к S3), чтобы избежать проблем с ограничением, задаваемым параметрами `max_remote_read_network_bandwidth_for_server` и `max_remote_write_network_bandwidth_for_server`. [#81837](https://github.com/ClickHouse/ClickHouse/pull/81837) ([Sergei Trifonov](https://github.com/serxa)). +* Разрешено использовать разные сопоставления строк (collation) для одного и того же столбца в разных окнах (для оконных функций). [#82877](https://github.com/ClickHouse/ClickHouse/pull/82877) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* Добавлен инструмент для моделирования, визуализации и сравнения селекторов слияния. [#71496](https://github.com/ClickHouse/ClickHouse/pull/71496) ([Sergei Trifonov](https://github.com/serxa)). +* Добавлена поддержка табличных функций `remote*` для параллельных реплик, если кластер указан в аргументе `address_expression`. Также исправлена проблема [#73295](https://github.com/ClickHouse/ClickHouse/issues/73295). [#82904](https://github.com/ClickHouse/ClickHouse/pull/82904) ([Igor Nikonov](https://github.com/devcrafter)). +* Установлен уровень TRACE для всех сообщений журнала, связанных с записью файлов резервных копий. [#82907](https://github.com/ClickHouse/ClickHouse/pull/82907) ([Hans Krutzer](https://github.com/hkrutzer)). +* Пользовательские функции с необычными именами и кодеками могут непоследовательно форматироваться SQL-форматтером. Исправление закрывает [#83092](https://github.com/ClickHouse/ClickHouse/issues/83092). [#83644](https://github.com/ClickHouse/ClickHouse/pull/83644) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Теперь пользователи могут использовать типы Time и Time64 внутри типа JSON. [#83784](https://github.com/ClickHouse/ClickHouse/pull/83784) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* Операции JOIN с параллельными репликами теперь используют логический шаг JOIN. В случае каких-либо проблем с запросами с JOIN, использующими параллельные реплики, попробуйте выполнить `SET query_plan_use_new_logical_join_step=0` и сообщите об ошибке. [#83801](https://github.com/ClickHouse/ClickHouse/pull/83801) ([Vladimir Cherkasov](https://github.com/vdimir)). +* Исправлена проблема совместимости функции cluster_function_process_archive_on_multiple_nodes. [#83968](https://github.com/ClickHouse/ClickHouse/pull/83968) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Реализована возможность изменять настройки вставки для материализованных представлений (`mv`) на уровне таблицы `S3Queue`. Добавлены новые настройки уровня `S3Queue`: `min_insert_block_size_rows_for_materialized_views` и `min_insert_block_size_bytes_for_materialized_views`. По умолчанию используются настройки профиля, которые могут быть переопределены настройками уровня `S3Queue`. [#83971](https://github.com/ClickHouse/ClickHouse/pull/83971) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Добавлено профильное событие `MutationAffectedRowsUpperBound`, которое показывает количество затронутых строк в мутации (например, общее число строк, удовлетворяющих условию запроса `ALTER UPDATE` или `ALTER DELETE`). [#83978](https://github.com/ClickHouse/ClickHouse/pull/83978) ([Anton Popov](https://github.com/CurtizJ)). +* Использовать информацию из cgroup (если применимо, то есть `memory_worker_use_cgroup` и cgroups доступны) для корректировки трекера памяти (`memory_worker_correct_memory_tracker`). [#83981](https://github.com/ClickHouse/ClickHouse/pull/83981) ([Azat Khuzhin](https://github.com/azat)). +* MongoDB: неявное преобразование строк в числовые типы. Ранее, если строковое значение получалось из источника MongoDB для числового столбца в таблице ClickHouse, выбрасывалось исключение. Теперь движок пытается автоматически преобразовать строку в числовое значение. Закрывает [#81167](https://github.com/ClickHouse/ClickHouse/issues/81167). [#84069](https://github.com/ClickHouse/ClickHouse/pull/84069) ([Kirill Nikiforov](https://github.com/allmazz)). +* Выделять группы цифр в форматах `Pretty` для числовых типов `Nullable`. [#84070](https://github.com/ClickHouse/ClickHouse/pull/84070) ([Alexey Milovidov](https://github.com/alexey-milovidov)). * Dashboard: всплывающая подсказка больше не будет выходить за верхнюю границу контейнера. [#84072](https://github.com/ClickHouse/ClickHouse/pull/84072) ([Alexey Milovidov](https://github.com/alexey-milovidov)). * Немного улучшен внешний вид точек на дашборде. [#84074](https://github.com/ClickHouse/ClickHouse/pull/84074) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* У Dashboard теперь немного более удачный favicon. [#84076](https://github.com/ClickHouse/ClickHouse/pull/84076) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Web UI: Разрешить браузерам сохранять пароль, а также значения URL. [#84087](https://github.com/ClickHouse/ClickHouse/pull/84087) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Добавлена поддержка применения дополнительного ACL на конкретных узлах Keeper с использованием конфигурации `apply_to_children`. [#84137](https://github.com/ClickHouse/ClickHouse/pull/84137) ([Antonio Andelic](https://github.com/antonio2368)). -* Исправлено использование компактной сериализации дискриминаторов типа Variant в MergeTree. Ранее в некоторых случаях она не применялась, хотя могла бы. [#84141](https://github.com/ClickHouse/ClickHouse/pull/84141) ([Pavel Kruglov](https://github.com/Avogar)). -* Добавлена серверная настройка `logs_to_keep` для реплицируемых баз данных, которая позволяет изменять значение параметра `logs_to_keep` по умолчанию для таких баз. Меньшие значения уменьшают число ZNode-ов (особенно при большом количестве баз данных), тогда как большие значения позволяют отставшей реплике догнать состояние спустя более длительный период времени. [#84183](https://github.com/ClickHouse/ClickHouse/pull/84183) ([Alexey Khatskevich](https://github.com/Khatskevich)). -* Добавлена настройка `json_type_escape_dots_in_keys` для экранирования точек в ключах JSON при разборе типа JSON. По умолчанию настройка отключена. [#84207](https://github.com/ClickHouse/ClickHouse/pull/84207) ([Pavel Kruglov](https://github.com/Avogar)). -* Проверьте, было ли соединение отменено, прежде чем проверять EOF, чтобы предотвратить чтение из закрытого соединения. Исправляет [#83893](https://github.com/ClickHouse/ClickHouse/issues/83893). [#84227](https://github.com/ClickHouse/ClickHouse/pull/84227) ([Raufs Dunamalijevs](https://github.com/rienath)). -* Немного улучшены цвета выделения текста в веб‑интерфейсе. Разница заметна только для выделенных ячеек таблицы в тёмной теме. В предыдущих версиях контраст между текстом и фоном выделения был недостаточным. [#84258](https://github.com/ClickHouse/ClickHouse/pull/84258) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Улучшена обработка завершения работы сервера при наличии клиентских подключений за счет упрощения внутренних проверок. [#84312](https://github.com/ClickHouse/ClickHouse/pull/84312) ([Raufs Dunamalijevs](https://github.com/rienath)). -* Добавлена настройка `delta_lake_enable_expression_visitor_logging` для отключения логирования обходчика выражений, поскольку такие логи могут быть слишком подробными даже на тестовом уровне логирования при отладке. [#84315](https://github.com/ClickHouse/ClickHouse/pull/84315) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Метрики на уровне cgroup и на уровне всей системы теперь выводятся вместе. Метрики на уровне cgroup имеют имена `CGroup`, а метрики уровня ОС (собираемые из procfs) имеют имена `OS`. [#84317](https://github.com/ClickHouse/ClickHouse/pull/84317) ([Nikita Taranov](https://github.com/nickitat)). -* Чуть получше графики в веб-интерфейсе. Не намного, но лучше. [#84326](https://github.com/ClickHouse/ClickHouse/pull/84326) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Изменено значение по умолчанию настройки реплицируемой базы данных `max_retries_before_automatic_recovery` на 10, чтобы в некоторых случаях ускорить восстановление. [#84369](https://github.com/ClickHouse/ClickHouse/pull/84369) ([Alexander Tokmakov](https://github.com/tavplubix)). -* Исправлено форматирование оператора `CREATE USER` с параметрами запроса (например, `CREATE USER {username:Identifier} IDENTIFIED WITH no_password`). [#84376](https://github.com/ClickHouse/ClickHouse/pull/84376) ([Azat Khuzhin](https://github.com/azat)). -* Добавлены настройки `backup_restore_s3_retry_initial_backoff_ms`, `backup_restore_s3_retry_max_backoff_ms`, `backup_restore_s3_retry_jitter_factor` для управления стратегией backoff при повторных попытках обращения к S3, используемой во время операций резервного копирования и восстановления. [#84421](https://github.com/ClickHouse/ClickHouse/pull/84421) ([Julia Kartseva](https://github.com/jkartseva)). -* Исправление упорядоченного режима (ordered) в S3Queue: раньше завершать работу при вызове shutdown. [#84463](https://github.com/ClickHouse/ClickHouse/pull/84463) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Добавлена поддержка записей Iceberg, совместимых с чтением через pyiceberg. [#84466](https://github.com/ClickHouse/ClickHouse/pull/84466) ([Konstantin Vedernikov](https://github.com/scanhex12)). -* Разрешено приведение типов значений множеств при проталкивании фильтров `IN` и `GLOBAL IN` по первичным ключам хранилищ KeyValue (например, EmbeddedRocksDB, KeeperMap). [#84515](https://github.com/ClickHouse/ClickHouse/pull/84515) ([Eduard Karacharov](https://github.com/korowa)). +* У Dashboard теперь немного более удачный фавикон. [#84076](https://github.com/ClickHouse/ClickHouse/pull/84076) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Web UI: Теперь браузеры могут сохранять пароль. Также запоминаются значения URL. [#84087](https://github.com/ClickHouse/ClickHouse/pull/84087) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Добавлена поддержка применения дополнительного ACL на отдельных узлах Keeper с помощью конфигурации `apply_to_children`. [#84137](https://github.com/ClickHouse/ClickHouse/pull/84137) ([Antonio Andelic](https://github.com/antonio2368)). +* Исправлено использование варианта сериализации дискриминаторов Variant «compact» в MergeTree. Ранее он не использовался в некоторых случаях, когда мог бы использоваться. [#84141](https://github.com/ClickHouse/ClickHouse/pull/84141) ([Pavel Kruglov](https://github.com/Avogar)). +* Добавлена серверная настройка `logs_to_keep` в настройки реплицируемых баз данных, которая позволяет изменять значение параметра `logs_to_keep` по умолчанию. Более низкие значения уменьшают число ZNode (особенно при большом количестве баз данных), а более высокие значения позволяют отсутствующей реплике догнать остальные спустя более длительный период времени. [#84183](https://github.com/ClickHouse/ClickHouse/pull/84183) ([Alexey Khatskevich](https://github.com/Khatskevich)). +* Добавлена настройка `json_type_escape_dots_in_keys` для экранирования точек в ключах JSON при разборе типов JSON. По умолчанию настройка отключена. [#84207](https://github.com/ClickHouse/ClickHouse/pull/84207) ([Pavel Kruglov](https://github.com/Avogar)). +* Проверьте, не было ли соединение отменено, прежде чем проверять EOF, чтобы избежать чтения из закрытого соединения. Исправляет [#83893](https://github.com/ClickHouse/ClickHouse/issues/83893). [#84227](https://github.com/ClickHouse/ClickHouse/pull/84227) ([Raufs Dunamalijevs](https://github.com/rienath)). +* Немного улучшены цвета выделения текста в веб-интерфейсе. Существенная разница заметна только для выделенных ячеек таблиц в тёмной теме. В предыдущих версиях контраст между текстом и фоном выделения был недостаточным. [#84258](https://github.com/ClickHouse/ClickHouse/pull/84258) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Улучшена обработка завершения работы сервера для клиентских подключений за счёт упрощения внутренних проверок. [#84312](https://github.com/ClickHouse/ClickHouse/pull/84312) ([Raufs Dunamalijevs](https://github.com/rienath)). +* Добавлена настройка `delta_lake_enable_expression_visitor_logging` для отключения логирования обходчика выражений, поскольку такие логи могут быть избыточно подробными даже на уровне логирования `test` при отладке. [#84315](https://github.com/ClickHouse/ClickHouse/pull/84315) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Метрики уровня cgroup и уровня всей системы теперь экспортируются вместе. Метрики уровня cgroup имеют имена `CGroup<Metric>`, а метрики уровня ОС (собираемые из procfs) — имена `OS<Metric>`. [#84317](https://github.com/ClickHouse/ClickHouse/pull/84317) ([Nikita Taranov](https://github.com/nickitat)). +* Графики в веб-интерфейсе стали немного лучше. Ненамного, но лучше. [#84326](https://github.com/ClickHouse/ClickHouse/pull/84326) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Изменено значение по умолчанию для настройки реплицируемой базы данных `max_retries_before_automatic_recovery` на 10, что в некоторых случаях ускорит восстановление. [#84369](https://github.com/ClickHouse/ClickHouse/pull/84369) ([Alexander Tokmakov](https://github.com/tavplubix)). +* Исправлено форматирование оператора `CREATE USER` при использовании параметров запроса (например, `CREATE USER {username:Identifier} IDENTIFIED WITH no_password`). [#84376](https://github.com/ClickHouse/ClickHouse/pull/84376) ([Azat Khuzhin](https://github.com/azat)). +* Добавлены параметры `backup_restore_s3_retry_initial_backoff_ms`, `backup_restore_s3_retry_max_backoff_ms`, `backup_restore_s3_retry_jitter_factor` для настройки стратегии задержки перед повторными попытками S3, используемой во время операций резервного копирования и восстановления. [#84421](https://github.com/ClickHouse/ClickHouse/pull/84421) ([Julia Kartseva](https://github.com/jkartseva)). +* Исправление упорядоченного режима S3Queue: завершать работу раньше при вызове shutdown. [#84463](https://github.com/ClickHouse/ClickHouse/pull/84463) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Добавлена поддержка записи в Iceberg с возможностью чтения через pyiceberg. [#84466](https://github.com/ClickHouse/ClickHouse/pull/84466) ([Konstantin Vedernikov](https://github.com/scanhex12)). +* Разрешено приведение типов значений множеств при проталкивании фильтров `IN` / `GLOBAL IN` к первичным ключам хранилищ KeyValue (например, EmbeddedRocksDB, KeeperMap). [#84515](https://github.com/ClickHouse/ClickHouse/pull/84515) ([Eduard Karacharov](https://github.com/korowa)). * Обновлён chdig до версии [25.7.1](https://github.com/azat/chdig/releases/tag/v25.7.1). [#84521](https://github.com/ClickHouse/ClickHouse/pull/84521) ([Azat Khuzhin](https://github.com/azat)). -* Ошибки низкого уровня при выполнении UDF теперь приводят к завершению с кодом ошибки `UDF_EXECUTION_FAILED`, тогда как ранее могли возвращаться различные коды ошибок. [#84547](https://github.com/ClickHouse/ClickHouse/pull/84547) ([Xu Jia](https://github.com/XuJia0210)). +* Ошибки низкого уровня при выполнении UDF теперь приводят к возврату кода ошибки `UDF_EXECUTION_FAILED`, тогда как ранее могли возвращаться различные коды ошибок. [#84547](https://github.com/ClickHouse/ClickHouse/pull/84547) ([Xu Jia](https://github.com/XuJia0210)). * Добавлена команда `get_acl` в KeeperClient. [#84641](https://github.com/ClickHouse/ClickHouse/pull/84641) ([Antonio Andelic](https://github.com/antonio2368)). -* Добавлена версия snapshot для движков таблиц data lake. [#84659](https://github.com/ClickHouse/ClickHouse/pull/84659) ([Pete Hampton](https://github.com/pjhampton)). -* Добавлена метрика с измерениями для размера `ConcurrentBoundedQueue` с метками по типу очереди (т.е. для чего предназначена очередь) и идентификатору очереди (т.е. случайно сгенерированный идентификатор для текущего экземпляра очереди). [#84675](https://github.com/ClickHouse/ClickHouse/pull/84675) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). -* Таблица `system.columns` теперь содержит столбец `column`, являющийся псевдонимом существующего столбца `name`. [#84695](https://github.com/ClickHouse/ClickHouse/pull/84695) ([Yunchi Pang](https://github.com/yunchipang)). +* Добавлена возможность указания snapshot-версии для движков таблиц data lake. [#84659](https://github.com/ClickHouse/ClickHouse/pull/84659) ([Pete Hampton](https://github.com/pjhampton)). +* Добавлена метрика размера для `ConcurrentBoundedQueue` с метками по типу очереди (то есть для чего предназначена очередь) и идентификатору очереди (то есть случайно сгенерированному идентификатору текущего экземпляра очереди). [#84675](https://github.com/ClickHouse/ClickHouse/pull/84675) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). +* Таблица `system.columns` теперь поддерживает псевдоним `column` для существующего столбца `name`. [#84695](https://github.com/ClickHouse/ClickHouse/pull/84695) ([Yunchi Pang](https://github.com/yunchipang)). * Новая настройка MergeTree `search_orphaned_parts_drives` для ограничения области поиска частей, например по дискам с локальными метаданными. [#84710](https://github.com/ClickHouse/ClickHouse/pull/84710) ([Ilya Golshtein](https://github.com/ilejn)). -* Добавлена 4LW-команда в Keeper, `lgrq`, для переключения логирования входящих запросов. [#84719](https://github.com/ClickHouse/ClickHouse/pull/84719) ([Antonio Andelic](https://github.com/antonio2368)). -* Сопоставлять заголовки внешней аутентификации forward_headers без учета регистра. [#84737](https://github.com/ClickHouse/ClickHouse/pull/84737) ([ingodwerust](https://github.com/ingodwerust)). +* Добавлена 4LW-команда Keeper `lgrq` для включения и отключения логирования полученных запросов. [#84719](https://github.com/ClickHouse/ClickHouse/pull/84719) ([Antonio Andelic](https://github.com/antonio2368)). +* Сопоставлять заголовки external auth forward_headers без учета регистра. [#84737](https://github.com/ClickHouse/ClickHouse/pull/84737) ([ingodwerust](https://github.com/ingodwerust)). * Инструмент `encrypt_decrypt` теперь поддерживает шифрованные соединения с ZooKeeper. [#84764](https://github.com/ClickHouse/ClickHouse/pull/84764) ([Roman Vasin](https://github.com/rvasin)). -* Добавлен столбец с форматной строкой в `system.errors`. Этот столбец нужен для группировки ошибок одного типа в правилах оповещений. [#84776](https://github.com/ClickHouse/ClickHouse/pull/84776) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). -* Обновлён `clickhouse-format`, чтобы он принимал `--highlight` как алиас для `--hilite`. - Обновлён `clickhouse-client`, чтобы он принимал `--hilite` как алиас для `--highlight`. - Обновлена документация `clickhouse-format`, чтобы отразить это изменение. [#84806](https://github.com/ClickHouse/ClickHouse/pull/84806) ([Rishabh Bhardwaj](https://github.com/rishabh1815769)). +* Добавлен столбец `format_string` в таблицу `system.errors`. Этот столбец необходим для группировки ошибок одного типа в правилах оповещений. [#84776](https://github.com/ClickHouse/ClickHouse/pull/84776) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). +* Обновлён `clickhouse-format`: добавлена поддержка параметра `--highlight` как псевдонима для `--hilite`. - Обновлён `clickhouse-client`: добавлена поддержка параметра `--hilite` как псевдонима для `--highlight`. - Обновлена документация по `clickhouse-format` с учётом этих изменений. [#84806](https://github.com/ClickHouse/ClickHouse/pull/84806) ([Rishabh Bhardwaj](https://github.com/rishabh1815769)). * Исправлено чтение таблиц Iceberg по идентификаторам полей для сложных типов. [#84821](https://github.com/ClickHouse/ClickHouse/pull/84821) ([Konstantin Vedernikov](https://github.com/scanhex12)). -* Добавлена новая настройка `backup_slow_all_threads_after_retryable_s3_error` для снижения нагрузки на S3 во время массовых повторных попыток, вызванных ошибками вроде `SlowDown`, за счёт замедления всех потоков, как только обнаружена одна повторяемая ошибка. [#84854](https://github.com/ClickHouse/ClickHouse/pull/84854) ([Julia Kartseva](https://github.com/jkartseva)). -* Пропускать создание и переименование старой временной таблицы для non-append RMV DDL в реплицируемых базах данных. [#84858](https://github.com/ClickHouse/ClickHouse/pull/84858) ([Tuan Pham Anh](https://github.com/tuanpach)). -* Размер кэша записей журнала Keeper теперь ограничен по количеству записей с помощью параметров `keeper_server.coordination_settings.latest_logs_cache_entry_count_threshold` и `keeper_server.coordination_settings.commit_logs_cache_entry_count_threshold`. [#84877](https://github.com/ClickHouse/ClickHouse/pull/84877) ([Antonio Andelic](https://github.com/antonio2368)). -* Теперь можно использовать `simdjson` на неподдерживаемых архитектурах (раньше это приводило к ошибкам `CANNOT_ALLOCATE_MEMORY`). [#84966](https://github.com/ClickHouse/ClickHouse/pull/84966) ([Azat Khuzhin](https://github.com/azat)). -* Асинхронное логирование: сделать лимиты настраиваемыми и добавить средства интроспекции. [#85105](https://github.com/ClickHouse/ClickHouse/pull/85105) ([Raúl Marín](https://github.com/Algunenano)). -* Собирать все удаляемые объекты для выполнения одной операции удаления в объектном хранилище. [#85316](https://github.com/ClickHouse/ClickHouse/pull/85316) ([Mikhail Artemenko](https://github.com/Michicosun)). -* Текущая реализация файлов позиционного удаления в Iceberg хранит все данные в оперативной памяти (RAM). Это может быть довольно дорого, если файлы позиционного удаления большие, что нередко бывает. Моя реализация хранит в оперативной памяти только последнюю row-group файлов удаления в формате Parquet, что значительно дешевле. [#85329](https://github.com/ClickHouse/ClickHouse/pull/85329) ([Konstantin Vedernikov](https://github.com/scanhex12)). -* chdig: исправлены артефакты на экране, исправлен сбой после редактирования запроса в редакторе, поиск `editor` в `PATH`, обновление до версии [25.8.1](https://github.com/azat/chdig/releases/tag/v25.8.1). [#85341](https://github.com/ClickHouse/ClickHouse/pull/85341) ([Azat Khuzhin](https://github.com/azat)). -* Добавлен отсутствующий параметр `partition_columns_in_data_file` в конфигурацию Azure. [#85373](https://github.com/ClickHouse/ClickHouse/pull/85373) ([Arthur Passos](https://github.com/arthurpassos)). -* Разрешён нулевой шаг в функциях `timeSeries*ToGrid`. Это часть [#75036](https://github.com/ClickHouse/ClickHouse/pull/75036). [#85390](https://github.com/ClickHouse/ClickHouse/pull/85390) ([Vitaly Baranov](https://github.com/vitlibar)). -* Добавлен флаг show_data_lake_catalogs_in_system_tables для управления добавлением таблиц data lake в system.tables. Исправляет [#85384](https://github.com/ClickHouse/ClickHouse/issues/85384). [#85411](https://github.com/ClickHouse/ClickHouse/pull/85411) ([Smita Kulkarni](https://github.com/SmitaRKulkarni)). -* Добавлена поддержка подстановки макросов в `remote_fs_zero_copy_zookeeper_path`. [#85437](https://github.com/ClickHouse/ClickHouse/pull/85437) ([Mikhail Koviazin](https://github.com/mkmkme)). -* ИИ в clickhouse-client теперь выглядит немного лучше. [#85447](https://github.com/ClickHouse/ClickHouse/pull/85447) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Включить trace_log.symbolize по умолчанию для старых развертываний. [#85456](https://github.com/ClickHouse/ClickHouse/pull/85456) ([Azat Khuzhin](https://github.com/azat)). -* Расширена поддержка большего числа случаев разрешения составных идентификаторов. В частности, улучшена совместимость `ARRAY JOIN` со старым анализатором. Добавлена новая настройка `analyzer_compatibility_allow_compound_identifiers_in_unflatten_nested` для сохранения старого поведения. [#85492](https://github.com/ClickHouse/ClickHouse/pull/85492) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). +* Добавлена новая настройка `backup_slow_all_threads_after_retryable_s3_error`, чтобы уменьшить нагрузку на S3 во время массовых повторных попыток, вызванных ошибками типа `SlowDown`, за счет замедления работы всех потоков, как только обнаружена первая повторяемая ошибка. [#84854](https://github.com/ClickHouse/ClickHouse/pull/84854) ([Julia Kartseva](https://github.com/jkartseva)). +* Не создавать и не переименовывать старую временную таблицу non-append RMV DDL в реплицируемых БД. [#84858](https://github.com/ClickHouse/ClickHouse/pull/84858) ([Tuan Pham Anh](https://github.com/tuanpach)). +* Ограничен размер кэша записей журнала Keeper по количеству записей с помощью параметров `keeper_server.coordination_settings.latest_logs_cache_entry_count_threshold` и `keeper_server.coordination_settings.commit_logs_cache_entry_count_threshold`. [#84877](https://github.com/ClickHouse/ClickHouse/pull/84877) ([Antonio Andelic](https://github.com/antonio2368)). +* Теперь можно использовать `simdjson` на неподдерживаемых архитектурах (ранее это приводило к ошибкам `CANNOT_ALLOCATE_MEMORY`). [#84966](https://github.com/ClickHouse/ClickHouse/pull/84966) ([Azat Khuzhin](https://github.com/azat)). +* Асинхронное логирование: сделать ограничения настраиваемыми и добавить средства интроспекции. [#85105](https://github.com/ClickHouse/ClickHouse/pull/85105) ([Raúl Marín](https://github.com/Algunenano)). +* Собирать все удалённые объекты для выполнения одной операции удаления в объектном хранилище. [#85316](https://github.com/ClickHouse/ClickHouse/pull/85316) ([Mikhail Artemenko](https://github.com/Michicosun)). +* Текущая реализация файлов позиционного удаления в Iceberg держит все данные в оперативной памяти. Это может быть достаточно затратно, если файлы позиционного удаления большие, что часто и бывает. Моя реализация хранит в оперативной памяти только последнюю группу строк файлов удаления в формате Parquet, что значительно дешевле. [#85329](https://github.com/ClickHouse/ClickHouse/pull/85329) ([Konstantin Vedernikov](https://github.com/scanhex12)). +* chdig: исправлены артефакты, остающиеся на экране, устранён сбой после редактирования запроса в редакторе, поиск по `editor` в `path`, обновление до версии [25.8.1](https://github.com/azat/chdig/releases/tag/v25.8.1). [#85341](https://github.com/ClickHouse/ClickHouse/pull/85341) ([Azat Khuzhin](https://github.com/azat)). +* Добавлен отсутствовавший параметр `partition_columns_in_data_file` в конфигурацию Azure. [#85373](https://github.com/ClickHouse/ClickHouse/pull/85373) ([Arthur Passos](https://github.com/arthurpassos)). +* Разрешён нулевой шаг в функциях семейства `timeSeries*ToGrid`. Это часть [#75036](https://github.com/ClickHouse/ClickHouse/pull/75036). [#85390](https://github.com/ClickHouse/ClickHouse/pull/85390) ([Vitaly Baranov](https://github.com/vitlibar)). +* Добавлен флаг show_data_lake_catalogs_in_system_tables для управления добавлением в system.tables таблиц из data lake. Решает [#85384](https://github.com/ClickHouse/ClickHouse/issues/85384). [#85411](https://github.com/ClickHouse/ClickHouse/pull/85411) ([Smita Kulkarni](https://github.com/SmitaRKulkarni)). +* Добавлена поддержка расширения макросов в `remote_fs_zero_copy_zookeeper_path`. [#85437](https://github.com/ClickHouse/ClickHouse/pull/85437) ([Mikhail Koviazin](https://github.com/mkmkme)). +* ИИ в clickhouse-client станет выглядеть немного лучше. [#85447](https://github.com/ClickHouse/ClickHouse/pull/85447) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Включить trace_log.symbolize по умолчанию для ранее созданных развёртываний. [#85456](https://github.com/ClickHouse/ClickHouse/pull/85456) ([Azat Khuzhin](https://github.com/azat)). +* Реализована поддержка большего числа случаев использования составных идентификаторов. В частности, улучшена совместимость `ARRAY JOIN` со старым анализатором. Добавлена новая настройка `analyzer_compatibility_allow_compound_identifiers_in_unflatten_nested` для сохранения прежнего поведения. [#85492](https://github.com/ClickHouse/ClickHouse/pull/85492) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). * Игнорировать UNKNOWN_DATABASE при получении размеров столбцов таблиц из system.columns. [#85632](https://github.com/ClickHouse/ClickHouse/pull/85632) ([Azat Khuzhin](https://github.com/azat)). -* Добавлено ограничение (настройка таблицы `max_uncompressed_bytes_in_patches`) на общий объём несжатых байт в патч-частях. Это предотвращает значительные замедления запросов SELECT после легковесных обновлений и исключает возможное злоупотребление легковесными обновлениями. [#85641](https://github.com/ClickHouse/ClickHouse/pull/85641) ([Anton Popov](https://github.com/CurtizJ)). -* Добавлен столбец `parameter` в таблицу `system.grants` для определения типа источника для `GRANT READ/WRITE` и движка таблицы для `GRANT TABLE ENGINE`. [#85643](https://github.com/ClickHouse/ClickHouse/pull/85643) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). -* Исправлена обработка завершающей запятой в списке столбцов запроса CREATE DICTIONARY после столбца с параметрами, например, Decimal(8). Закрывает [#85586](https://github.com/ClickHouse/ClickHouse/issues/85586). [#85653](https://github.com/ClickHouse/ClickHouse/pull/85653) ([Nikolay Degterinsky](https://github.com/evillique)). -* Добавлена поддержка вложенных массивов для функции `nested`. [#85719](https://github.com/ClickHouse/ClickHouse/pull/85719) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). -* Все выделения памяти, выполняемые внешними библиотеками, теперь видны трекеру памяти ClickHouse и корректно учитываются. Это может привести к «повышенному» отчётному использованию памяти для некоторых запросов или сбоям с ошибкой `MEMORY_LIMIT_EXCEEDED`. [#84082](https://github.com/ClickHouse/ClickHouse/pull/84082) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). - - +* Добавлено ограничение (настройка таблицы `max_uncompressed_bytes_in_patches`) на суммарный объём несжатых данных в патчевых частях. Это предотвращает значительное замедление выполнения запросов SELECT после легковесных обновлений и возможное злоупотребление легковесными обновлениями. [#85641](https://github.com/ClickHouse/ClickHouse/pull/85641) ([Anton Popov](https://github.com/CurtizJ)). +* Добавлен столбец `parameter` в `system.grants`, чтобы определять тип источника для `GRANT READ/WRITE` и движок таблицы для `GRANT TABLE ENGINE`. [#85643](https://github.com/ClickHouse/ClickHouse/pull/85643) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). +* Исправлена обработка висячей запятой в списке столбцов в запросе CREATE DICTIONARY после столбца с параметрами, например Decimal(8). Закрывает [#85586](https://github.com/ClickHouse/ClickHouse/issues/85586). [#85653](https://github.com/ClickHouse/ClickHouse/pull/85653) ([Nikolay Degterinsky](https://github.com/evillique)). +* Добавлена поддержка внутренних массивов для функции `nested`. [#85719](https://github.com/ClickHouse/ClickHouse/pull/85719) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). +* Все выделения памяти, выполняемые внешними библиотеками, теперь видны трекеру памяти ClickHouse и корректно учитываются. Это может привести к «повышенному» сообщаемому объему потребляемой памяти для некоторых запросов или к ошибкам `MEMORY_LIMIT_EXCEEDED`. [#84082](https://github.com/ClickHouse/ClickHouse/pull/84082) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). #### Исправление ошибки (некорректное поведение, заметное пользователю, в официальном стабильном релизе) - - * Этот pull request исправляет обработку метаданных при выполнении запросов к таблицам Iceberg через REST‑каталог. ... [#80562](https://github.com/ClickHouse/ClickHouse/pull/80562) ([Saurabh Kumar Ojha](https://github.com/saurabhojha)). * Исправлена логика markReplicasActive в DDLWorker и DatabaseReplicatedDDLWorker. [#81395](https://github.com/ClickHouse/ClickHouse/pull/81395) ([Tuan Pham Anh](https://github.com/tuanpach)). * Исправлен откат столбца типа Dynamic при ошибке парсинга. [#82169](https://github.com/ClickHouse/ClickHouse/pull/82169) ([Pavel Kruglov](https://github.com/Avogar)). @@ -847,1509 +1048,1413 @@ doc_type: 'changelog' * Не создавать пустой файл удалений Iceberg. [#86061](https://github.com/ClickHouse/ClickHouse/pull/86061) ([Konstantin Vedernikov](https://github.com/scanhex12)). * Исправлена проблема, из-за которой слишком большие значения параметров приводили к сбоям в работе таблиц S3Queue и мешали перезапуску реплик. [#86074](https://github.com/ClickHouse/ClickHouse/pull/86074) ([Nikolay Degterinsky](https://github.com/evillique)). - - #### Улучшения сборки/тестирования/упаковки -* По умолчанию используются зашифрованные диски для тестов с S3. [#59898](https://github.com/ClickHouse/ClickHouse/pull/59898) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). -* Использовать исполняемый файл `clickhouse` в интеграционных тестах, чтобы получать полные отладочные символы. [#83779](https://github.com/ClickHouse/ClickHouse/pull/83779) ([Mikhail f. Shiryaev](https://github.com/Felixoid)). -* Обновлена внутренняя libxml2 с 2.14.4 до 2.14.5. [#84230](https://github.com/ClickHouse/ClickHouse/pull/84230) ([Robert Schulze](https://github.com/rschu1ze)). -* Обновлён внутренний curl с 8.14.0 до 8.15.0. [#84231](https://github.com/ClickHouse/ClickHouse/pull/84231) ([Robert Schulze](https://github.com/rschu1ze)). -* Теперь мы используем меньше памяти для кэшей в CI и имеем более качественные тесты вытеснения данных из кэша. [#84676](https://github.com/ClickHouse/ClickHouse/pull/84676) ([alesapin](https://github.com/alesapin)). +* По умолчанию использовать зашифрованные диски для тестов с S3. [#59898](https://github.com/ClickHouse/ClickHouse/pull/59898) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). +* Использовать бинарный файл `clickhouse` в интеграционных тестах, чтобы получать полные отладочные символы (без strip). [#83779](https://github.com/ClickHouse/ClickHouse/pull/83779) ([Mikhail f. Shiryaev](https://github.com/Felixoid)). +* Обновлена внутренняя библиотека libxml2 с версии 2.14.4 до 2.14.5. [#84230](https://github.com/ClickHouse/ClickHouse/pull/84230) ([Robert Schulze](https://github.com/rschu1ze)). +* Обновлён внутренний curl с версии 8.14.0 до 8.15.0. [#84231](https://github.com/ClickHouse/ClickHouse/pull/84231) ([Robert Schulze](https://github.com/rschu1ze)). +* Теперь мы используем меньше памяти для кэшей в CI и имеем более качественные тесты на вытеснение. [#84676](https://github.com/ClickHouse/ClickHouse/pull/84676) ([alesapin](https://github.com/alesapin)). ### Релиз ClickHouse 25.7, 2025-07-24 {#257} -#### Обратные несовместимые изменения -* Изменения в функции `extractKeyValuePairs`: введён новый аргумент `unexpected_quoting_character_strategy`, который управляет тем, что происходит, когда `quoting_character` неожиданно встречается при чтении ключа или значения без кавычек. Значение может быть одним из: `invalid`, `accept` или `promote`. `invalid` отбросит ключ и вернёт парсер в состояние ожидания ключа. `accept` будет трактовать символ как часть ключа. `promote` отбросит предыдущий символ и начнёт разбор как ключа в кавычках. Дополнительно, после разбора значения в кавычках следующий ключ разбирается только в том случае, если найден разделитель пары. [#80657](https://github.com/ClickHouse/ClickHouse/pull/80657) ([Arthur Passos](https://github.com/arthurpassos)). -* Поддержка совпадения нулевого байта в функции `countMatches`. Пользователи, которые хотят сохранить старое поведение, могут включить настройку `count_matches_stop_at_empty_match`. [#81676](https://github.com/ClickHouse/ClickHouse/pull/81676) ([Elmi Ahmadov](https://github.com/ahmadov)). -* Использование глобальных серверных ограничителей пропускной способности для локальных (`max_local_read_bandwidth_for_server` и `max_local_write_bandwidth_for_server`) и удалённых (`max_remote_read_network_bandwidth_for_server` и `max_remote_write_network_bandwidth_for_server`) операций при создании резервных копий (BACKUP) в дополнение к их специализированным серверным настройкам (`max_backup_bandwidth_for_server`, `max_mutations_bandwidth_for_server` и `max_merges_bandwidth_for_server`). [#81753](https://github.com/ClickHouse/ClickHouse/pull/81753) ([Sergei Trifonov](https://github.com/serxa)). -* Запрещено создание таблицы без столбцов, в которые можно вставлять данные. [#81835](https://github.com/ClickHouse/ClickHouse/pull/81835) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). -* Параллелизация кластерных функций по файлам внутри архивов. В предыдущих версиях единицей работы был целый архив (например, zip, tar или 7z). Добавлена новая настройка `cluster_function_process_archive_on_multiple_nodes`, по умолчанию равная `true`. Если установлена в `true`, повышает производительность обработки архивов в кластерных функциях. Должна быть установлена в `false` для совместимости и чтобы избежать ошибок при обновлении до 25.7+ при использовании кластерных функций с архивами на более ранних версиях. [#82355](https://github.com/ClickHouse/ClickHouse/pull/82355) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Запрос `SYSTEM RESTART REPLICAS` приводил к пробуждению таблиц в базе данных Lazy даже без доступа к этой базе, и это происходило в то время, когда эти таблицы одновременно удалялись. Примечание: теперь `SYSTEM RESTART REPLICAS` будет перезапускать реплики только в тех базах данных, в которых у вас есть право на `SHOW TABLES`, что является естественным поведением. [#83321](https://github.com/ClickHouse/ClickHouse/pull/83321) ([Alexey Milovidov](https://github.com/alexey-milovidov)). - +#### Обратное несовместимое изменение +* Изменения в функции `extractKeyValuePairs`: добавлен новый аргумент `unexpected_quoting_character_strategy`, который определяет, что происходит, когда `quoting_character` неожиданно встречается при чтении неквотированного ключа или значения. Значение может быть одним из: `invalid`, `accept` или `promote`. Значение `invalid` приведёт к отбрасыванию ключа и возврату в состояние ожидания ключа. Значение `accept` будет трактовать символ как часть ключа. Значение `promote` отбросит предыдущий символ и начнёт разбор как квотированного ключа. Кроме того, после разбора квотированного значения следующий ключ разбирается только в том случае, если найден разделитель пары. [#80657](https://github.com/ClickHouse/ClickHouse/pull/80657) ([Arthur Passos](https://github.com/arthurpassos)). +* Поддержка совпадений нулевой длины в функции `countMatches`. Пользователи, которые хотят сохранить старое поведение, могут включить настройку `count_matches_stop_at_empty_match`. [#81676](https://github.com/ClickHouse/ClickHouse/pull/81676) ([Elmi Ahmadov](https://github.com/ahmadov)). +* Использование серверных ограничителей (throttlers) для локальных (`max_local_read_bandwidth_for_server` и `max_local_write_bandwidth_for_server`) и удалённых (`max_remote_read_network_bandwidth_for_server` и `max_remote_write_network_bandwidth_for_server`) операций при создании резервных копий (BACKUP), в дополнение к их специализированным серверным настройкам (`max_backup_bandwidth_for_server`, `max_mutations_bandwidth_for_server` и `max_merges_bandwidth_for_server`). [#81753](https://github.com/ClickHouse/ClickHouse/pull/81753) ([Sergei Trifonov](https://github.com/serxa)). +* Запрещено создание таблицы без столбцов, доступных для вставки данных. [#81835](https://github.com/ClickHouse/ClickHouse/pull/81835) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +* Параллелизация кластерных функций по файлам внутри архивов. В предыдущих версиях единицей работы был целый архив (например, zip, tar или 7z). Добавлена новая настройка `cluster_function_process_archive_on_multiple_nodes`, по умолчанию равная `true`. Если установлена в `true`, повышает производительность обработки архивов в кластерных функциях. Должна быть установлена в `false` для обеспечения совместимости и во избежание ошибок при обновлении до версии 25.7+ при использовании кластерных функций с архивами на более ранних версиях. [#82355](https://github.com/ClickHouse/ClickHouse/pull/82355) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Запрос `SYSTEM RESTART REPLICAS` вызывал пробуждение таблиц в базе данных Lazy, даже без доступа к этой базе данных, и это происходило в то время, когда эти таблицы одновременно удалялись. Примечание: теперь `SYSTEM RESTART REPLICAS` будет перезапускать реплики только в тех базах данных, где у вас есть право выполнять `SHOW TABLES`, что является естественным поведением. [#83321](https://github.com/ClickHouse/ClickHouse/pull/83321) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -#### Новая возможность +#### Новая функция -* Добавлена поддержка легковесных обновлений для таблиц семейства `MergeTree`. Легковесные обновления можно использовать с новым синтаксисом: `UPDATE SET col1 = val1, col2 = val2, ... WHERE `. Добавлена реализация легковесных удалений через легковесные обновления. Это можно включить, установив `lightweight_delete_mode = 'lightweight_update'`. [#82004](https://github.com/ClickHouse/ClickHouse/pull/82004) ([Anton Popov](https://github.com/CurtizJ)). -* Поддержка сложных типов при эволюции схем Iceberg. [#73714](https://github.com/ClickHouse/ClickHouse/pull/73714) ([Konstantин Vedernikov](https://github.com/scanhex12)). -* Добавлена поддержка операций `INSERT` в таблицы Iceberg. [#82692](https://github.com/ClickHouse/ClickHouse/pull/82692) ([Konstantин Vedernikov](https://github.com/scanhex12)). -* Чтение файлов данных Iceberg по идентификаторам полей. Это улучшает совместимость с Iceberg: поля могут переименовываться в метаданных при одновременном сопоставлении с другими именами в базовых файлах Parquet. Это решает задачу [#83065](https://github.com/ClickHouse/ClickHouse/issues/83065). [#83653](https://github.com/ClickHouse/ClickHouse/pull/83653) ([Konstantin Vedernikov](https://github.com/scanhex12)). -* Теперь в ClickHouse поддерживаются сжатые файлы `metadata.json` для Iceberg. Исправляет [#70874](https://github.com/ClickHouse/ClickHouse/issues/70874). [#81451](https://github.com/ClickHouse/ClickHouse/pull/81451) ([alesapin](https://github.com/alesapin)). +* Добавлена поддержка легковесных обновлений для таблиц семейства `MergeTree`. Легковесные обновления можно использовать с помощью нового синтаксиса: `UPDATE
SET col1 = val1, col2 = val2, ... WHERE `. Добавлена реализация легковесных удалений через легковесные обновления. Это можно включить, установив `lightweight_delete_mode = 'lightweight_update'`. [#82004](https://github.com/ClickHouse/ClickHouse/pull/82004) ([Anton Popov](https://github.com/CurtizJ)). +* Добавлена поддержка сложных типов в рамках эволюции схемы Iceberg. [#73714](https://github.com/ClickHouse/ClickHouse/pull/73714) ([Konstantin Vedernikov](https://github.com/scanhex12)). +* Добавлена поддержка вставки данных (INSERT) в таблицы Iceberg. [#82692](https://github.com/ClickHouse/ClickHouse/pull/82692) ([Konstantin Vedernikov](https://github.com/scanhex12)). +* Чтение файлов данных Iceberg по идентификаторам полей. Это улучшает совместимость с Iceberg: поля можно переименовывать в метаданных, сопоставляя их с другими именами в базовых файлах Parquet. Устраняет проблему [#83065](https://github.com/ClickHouse/ClickHouse/issues/83065). [#83653](https://github.com/ClickHouse/ClickHouse/pull/83653) ([Konstantin Vedernikov](https://github.com/scanhex12)). +* Теперь ClickHouse поддерживает сжатые файлы `metadata.json` для Iceberg. Исправлена проблема [#70874](https://github.com/ClickHouse/ClickHouse/issues/70874). [#81451](https://github.com/ClickHouse/ClickHouse/pull/81451) ([alesapin](https://github.com/alesapin)). * Добавлена поддержка `TimestampTZ` в каталоге Glue. Это закрывает [#81654](https://github.com/ClickHouse/ClickHouse/issues/81654). [#83132](https://github.com/ClickHouse/ClickHouse/pull/83132) ([Konstantin Vedernikov](https://github.com/scanhex12)). -* Добавлена возможность генерации SQL-запросов с использованием ИИ в клиенте ClickHouse. Теперь пользователи могут генерировать SQL-запросы из описаний на естественном языке, добавляя к своему запросу префикс `??`. Поддерживаются провайдеры OpenAI и Anthropic с автоматическим обнаружением схемы. [#83314](https://github.com/ClickHouse/ClickHouse/pull/83314) ([Kaushik Iska](https://github.com/iskakaushik)). -* Добавлена функция для записи Geo-типов в формат WKB. [#82935](https://github.com/ClickHouse/ClickHouse/pull/82935) ([Konstantin Vedernikov](https://github.com/scanhex12)). -* Добавлены два новых типа доступа к источникам: `READ` и `WRITE`, а все предыдущие типы доступа для источников объявлены устаревшими. Раньше: `GRANT S3 ON *.* TO user`, теперь: `GRANT READ, WRITE ON S3 TO user`. Это также позволяет раздельно выдавать права `READ` и `WRITE` для источников, например: `GRANT READ ON * TO user`, `GRANT WRITE ON S3 TO user`. Функция управляется настройкой `access_control_improvements.enable_read_write_grants` и по умолчанию отключена. [#73659](https://github.com/ClickHouse/ClickHouse/pull/73659) ([pufit](https://github.com/pufit)). -* NumericIndexedVector: новая структура векторных данных на основе бит-слайсинга и сжатия Roaring-bitmap, с более чем 20 функциями для построения, анализа и поэлементной арифметики. Может сократить объем хранимых данных и ускорить соединения (JOIN), фильтры и агрегации на разреженных данных. Реализует [#70582](https://github.com/ClickHouse/ClickHouse/issues/70582) и идеи статьи [“Large-Scale Metric Computation in Online Controlled Experiment Platform”](https://arxiv.org/abs/2405.08411) Т. Xiong и Y. Wang из VLDB 2024. [#74193](https://github.com/ClickHouse/ClickHouse/pull/74193) ([FriendLey](https://github.com/FriendLey)). -* Теперь поддерживается настройка профиля нагрузки `max_waiting_queries`. Ее можно использовать для ограничения размера очереди запросов. Если предел достигнут, все последующие запросы будут завершаться с ошибкой `SERVER_OVERLOADED`. [#81250](https://github.com/ClickHouse/ClickHouse/pull/81250) ([Oleg Doronin](https://github.com/dorooleg)). +* Добавлена функция генерации SQL‑запросов с помощью ИИ в клиент ClickHouse. Пользователи теперь могут генерировать SQL‑запросы из описаний на естественном языке, добавляя к своему запросу префикс `??`. Поддерживаются провайдеры OpenAI и Anthropic с автоматическим обнаружением схемы. [#83314](https://github.com/ClickHouse/ClickHouse/pull/83314) ([Kaushik Iska](https://github.com/iskakaushik)). +* Добавлена функция записи Geo-типов в формат WKB. [#82935](https://github.com/ClickHouse/ClickHouse/pull/82935) ([Konstantin Vedernikov](https://github.com/scanhex12)). +* Добавлены два новых типа доступа к источникам: `READ` и `WRITE`; все прежние типы доступа, связанные с источниками, объявлены устаревшими. Вместо `GRANT S3 ON *.* TO user` теперь используется: `GRANT READ, WRITE ON S3 TO user`. Это также позволяет разделять права `READ` и `WRITE` для источников, например: `GRANT READ ON * TO user`, `GRANT WRITE ON S3 TO user`. Эта функциональность управляется настройкой `access_control_improvements.enable_read_write_grants` и по умолчанию отключена. [#73659](https://github.com/ClickHouse/ClickHouse/pull/73659) ([pufit](https://github.com/pufit)). +* NumericIndexedVector: новая векторная структура данных на основе bit-sliced-сжатия и Roaring-bitmap, с более чем 20 функциями для построения, анализа и покомпонентной арифметики. Может сократить объем хранимых данных и ускорить операции соединения (JOIN), фильтрацию и агрегации на разреженных данных. Реализует [#70582](https://github.com/ClickHouse/ClickHouse/issues/70582) и идеи статьи [“Large-Scale Metric Computation in Online Controlled Experiment Platform”](https://arxiv.org/abs/2405.08411) авторов T. Xiong и Y. Wang (VLDB 2024). [#74193](https://github.com/ClickHouse/ClickHouse/pull/74193) ([FriendLey](https://github.com/FriendLey)). +* Настройка нагрузки `max_waiting_queries` теперь поддерживается. Её можно использовать для ограничения длины очереди запросов. Если предел достигнут, все последующие запросы будут прерваны с ошибкой `SERVER_OVERLOADED`. [#81250](https://github.com/ClickHouse/ClickHouse/pull/81250) ([Oleg Doronin](https://github.com/dorooleg)). * Добавлены финансовые функции: `financialInternalRateOfReturnExtended` (`XIRR`), `financialInternalRateOfReturn` (`IRR`), `financialNetPresentValueExtended` (`XNPV`), `financialNetPresentValue` (`NPV`). [#81599](https://github.com/ClickHouse/ClickHouse/pull/81599) ([Joanna Hulboj](https://github.com/jh0x)). -* Добавлены геопространственные функции `polygonsIntersectCartesian` и `polygonsIntersectSpherical` для проверки, пересекаются ли два полигона. [#81882](https://github.com/ClickHouse/ClickHouse/pull/81882) ([Paul Lamb](https://github.com/plamb)). -* Добавлена поддержка виртуального столбца `_part_granule_offset` в таблицах семейства MergeTree. Этот столбец указывает индекс (с нуля) гранулы/метки, к которой относится каждая строка внутри своей части данных. Это решает проблему [#79572](https://github.com/ClickHouse/ClickHouse/issues/79572). [#82341](https://github.com/ClickHouse/ClickHouse/pull/82341) ([Amos Bird](https://github.com/amosbird)). [#82341](https://github.com/ClickHouse/ClickHouse/pull/82341) ([Amos Bird](https://github.com/amosbird)) +* Добавлены геопространственные функции `polygonsIntersectCartesian` и `polygonsIntersectSpherical` для проверки пересечения двух полигонов. [#81882](https://github.com/ClickHouse/ClickHouse/pull/81882) ([Paul Lamb](https://github.com/plamb)). +* Добавлена поддержка виртуального столбца `_part_granule_offset` в таблицах семейства MergeTree. Этот столбец указывает индекс (с нуля) гранулы/метки, к которой относится каждая строка внутри соответствующей части данных. Это устраняет проблему [#79572](https://github.com/ClickHouse/ClickHouse/issues/79572). [#82341](https://github.com/ClickHouse/ClickHouse/pull/82341) ([Amos Bird](https://github.com/amosbird)). [#82341](https://github.com/ClickHouse/ClickHouse/pull/82341) ([Amos Bird](https://github.com/amosbird)) * Добавлены SQL-функции `colorSRGBToOkLCH` и `colorOkLCHToSRGB` для преобразования цветов между цветовыми пространствами sRGB и OkLCH. [#83679](https://github.com/ClickHouse/ClickHouse/pull/83679) ([Fgrtue](https://github.com/Fgrtue)). -* Разрешить использование параметров в запросах `CREATE USER` в качестве имён пользователей. [#81387](https://github.com/ClickHouse/ClickHouse/pull/81387) ([Diskein](https://github.com/Diskein)). -* Таблица `system.formats` теперь содержит расширенную информацию о форматах, например тип содержимого HTTP (Content-Type), возможности автоматического определения схемы и т. д. [#81505](https://github.com/ClickHouse/ClickHouse/pull/81505) ([Alexey Milovidov](https://github.com/alexey-milovidov)). - +* Разрешено использование параметров в запросах `CREATE USER` для имён пользователей. [#81387](https://github.com/ClickHouse/ClickHouse/pull/81387) ([Diskein](https://github.com/Diskein)). +* Таблица `system.formats` теперь содержит расширенную информацию о форматах, например тип содержимого HTTP, возможности вывода схемы и т. д. [#81505](https://github.com/ClickHouse/ClickHouse/pull/81505) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +#### Экспериментальные возможности -#### Экспериментальная функциональность * Добавлены функции `searchAny` и `searchAll`, которые являются универсальными инструментами для поиска по текстовым индексам. [#80641](https://github.com/ClickHouse/ClickHouse/pull/80641) ([Elmi Ahmadov](https://github.com/ahmadov)). * Текстовый индекс теперь поддерживает новый токенизатор `split`. [#81752](https://github.com/ClickHouse/ClickHouse/pull/81752) ([Elmi Ahmadov](https://github.com/ahmadov)). -* Изменено значение индексной гранулярности по умолчанию для индексов `text` на 64. Это улучшает ожидаемую производительность среднего тестового запроса во внутренних бенчмарках. [#82162](https://github.com/ClickHouse/ClickHouse/pull/82162) ([Jimmy Aguilar Mena](https://github.com/Ergus)). -* 256-битовая битовая карта хранит исходящие метки состояния в упорядоченном виде, но исходящие состояния записываются на диск в том порядке, в котором они появляются в хеш-таблице. Поэтому при чтении с диска метка может указывать на неправильное следующее состояние. [#82783](https://github.com/ClickHouse/ClickHouse/pull/82783) ([Elmi Ahmadov](https://github.com/ahmadov)). -* Включена zstd-компрессия для BLOB-данных дерева FST в текстовых индексах. [#83093](https://github.com/ClickHouse/ClickHouse/pull/83093) ([Elmi Ahmadov](https://github.com/ahmadov)). -* Переведен индекс векторного сходства в статус бета. Добавлен параметр-алиас `enable_vector_similarity_index`, который должен быть включен для использования индекса векторного сходства. [#83459](https://github.com/ClickHouse/ClickHouse/pull/83459) ([Robert Schulze](https://github.com/rschu1ze)). -* Удалена экспериментальная логика `send_metadata`, связанная с экспериментальной репликацией с нулевым копированием. Она никогда не использовалась, и никто не поддерживает этот код. Поскольку не было даже тестов, связанных с ней, велика вероятность, что она уже давно сломана. [#82508](https://github.com/ClickHouse/ClickHouse/pull/82508) ([alesapin](https://github.com/alesapin)). +* Изменено значение размера гранул индекса по умолчанию для индексов `text` на 64. Это повышает ожидаемую производительность среднего тестового запроса во внутренних бенчмарках. [#82162](https://github.com/ClickHouse/ClickHouse/pull/82162) ([Jimmy Aguilar Mena](https://github.com/Ergus)). +* 256-битная битовая карта хранит исходящие метки состояния в упорядоченном виде, но исходящие состояния сохраняются на диск в том порядке, в котором они появляются в хеш-таблице. Поэтому при чтении с диска метка будет указывать на некорректное следующее состояние. [#82783](https://github.com/ClickHouse/ClickHouse/pull/82783) ([Elmi Ahmadov](https://github.com/ahmadov)). +* Включено сжатие zstd для блоба дерева FST в текстовых индексах. [#83093](https://github.com/ClickHouse/ClickHouse/pull/83093) ([Elmi Ahmadov](https://github.com/ahmadov)). +* Переведён индекс векторного сходства в стадию beta. Добавлен параметр-псевдоним `enable_vector_similarity_index`, который необходимо включить для использования индекса векторного сходства. [#83459](https://github.com/ClickHouse/ClickHouse/pull/83459) ([Robert Schulze](https://github.com/rschu1ze)). +* Удалена экспериментальная логика `send_metadata`, связанная с экспериментальной репликацией без копирования (zero-copy). Она никогда не использовалась, и этот код никто не поддерживал. Поскольку не было даже тестов, связанных с ней, велика вероятность, что она уже давно была сломана. [#82508](https://github.com/ClickHouse/ClickHouse/pull/82508) ([alesapin](https://github.com/alesapin)). * Интегрирован `StorageKafka2` в `system.kafka_consumers`. [#82652](https://github.com/ClickHouse/ClickHouse/pull/82652) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). -* Реализована оценка сложных CNF/DNF-выражений, например, `(a < 1 and a > 0) or b = 3`, на основе статистики. [#82663](https://github.com/ClickHouse/ClickHouse/pull/82663) ([Han Fei](https://github.com/hanfei1991)). - - +* Реализована оценка сложных CNF/DNF-выражений, например `(a < 1 and a > 0) or b = 3`, по статистике. [#82663](https://github.com/ClickHouse/ClickHouse/pull/82663) ([Han Fei](https://github.com/hanfei1991)). #### Повышение производительности -* Введено асинхронное логирование. При выводе логов на медленное устройство это больше не замедляет выполнение запросов. [#82516](https://github.com/ClickHouse/ClickHouse/pull/82516) ([Raúl Marín](https://github.com/Algunenano)). Ограничено максимальное число записей, которые могут находиться в очереди. [#83214](https://github.com/ClickHouse/ClickHouse/pull/83214) ([Raúl Marín](https://github.com/Algunenano)). -* Параллельный распределённый INSERT SELECT по умолчанию включён в режиме, когда INSERT SELECT выполняется независимо на каждом шарде, см. настройку `parallel_distributed_insert_select`. [#83040](https://github.com/ClickHouse/ClickHouse/pull/83040) ([Igor Nikonov](https://github.com/devcrafter)). -* Когда агрегирующий запрос содержит только одну функцию `count()` по столбцу, который не является `Nullable`, логика агрегации полностью встраивается непосредственно в процесс зондирования хеш-таблицы. Это позволяет избежать выделения и ведения какого-либо состояния агрегации, что значительно снижает потребление памяти и накладные расходы на CPU. Это частично решает [#81982](https://github.com/ClickHouse/ClickHouse/issues/81982). [#82104](https://github.com/ClickHouse/ClickHouse/pull/82104) ([Amos Bird](https://github.com/amosbird)). -* Производительность `HashJoin` улучшена за счёт удаления дополнительного цикла по хэш-таблицам в типичном случае с единственным ключевым столбцом; также устранены проверки `null_map` и `join_mask`, когда они всегда принимают значения `true`/`false`. [#82308](https://github.com/ClickHouse/ClickHouse/pull/82308) ([Nikita Taranov](https://github.com/nickitat)). -* Простая оптимизация комбинатора `-If`. [#78454](https://github.com/ClickHouse/ClickHouse/pull/78454) ([李扬](https://github.com/taiyang-li)). -* Запросы векторного поиска с использованием индекса векторного сходства выполняются с меньшей задержкой благодаря сокращению числа операций чтения из хранилища и снижению нагрузки на CPU. [#79103](https://github.com/ClickHouse/ClickHouse/pull/79103) ([Shankar Iyer](https://github.com/shankar-iyer)). -* Учитывать `merge_tree_min_{rows,bytes}_for_seek` в `filterPartsByQueryConditionCache`, чтобы привести его в соответствие с другими методами, выполняющими фильтрацию по индексам. [#80312](https://github.com/ClickHouse/ClickHouse/pull/80312) ([李扬](https://github.com/taiyang-li)). -* Конвейер после шага `TOTALS` стал многопоточным. [#80331](https://github.com/ClickHouse/ClickHouse/pull/80331) ([UnamedRus](https://github.com/UnamedRus)). -* Исправлена фильтрация по ключу для хранилищ `Redis` и `KeeperMap`. [#81833](https://github.com/ClickHouse/ClickHouse/pull/81833) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). -* Добавлена новая настройка `min_joined_block_size_rows` (аналогична `min_joined_block_size_bytes`; значение по умолчанию — 65409) для управления минимальным размером блока (в строках) для входных и выходных блоков операции JOIN (если алгоритм JOIN это поддерживает). Маленькие блоки будут сливаться в более крупные. [#81886](https://github.com/ClickHouse/ClickHouse/pull/81886) ([Nikita Taranov](https://github.com/nickitat)). +* Введено асинхронное логирование. Вывод логов на медленное устройство больше не замедляет выполнение запросов. [#82516](https://github.com/ClickHouse/ClickHouse/pull/82516) ([Raúl Marín](https://github.com/Algunenano)). Ограничено максимальное количество записей, хранящихся в очереди. [#83214](https://github.com/ClickHouse/ClickHouse/pull/83214) ([Raúl Марин](https://github.com/Algunenano)). +* Параллельный распределённый INSERT SELECT по умолчанию включён в режиме, при котором INSERT SELECT выполняется независимо на каждом шарде, см. настройку `parallel_distributed_insert_select`. [#83040](https://github.com/ClickHouse/ClickHouse/pull/83040) ([Igor Nikonov](https://github.com/devcrafter)). +* Когда агрегирующий запрос содержит только одну функцию `count()` по не-`Nullable` столбцу, логика агрегации полностью встраивается на этапе обхода хеш-таблицы. Это позволяет избежать выделения и поддержания какого-либо агрегирующего состояния, что существенно снижает потребление памяти и накладные расходы на CPU. Это частично решает [#81982](https://github.com/ClickHouse/ClickHouse/issues/81982). [#82104](https://github.com/ClickHouse/ClickHouse/pull/82104) ([Amos Bird](https://github.com/amosbird)). +* Производительность `HashJoin` оптимизирована за счёт удаления дополнительного прохода по хеш-таблицам в типичном случае, когда есть только один ключевой столбец, а также исключения проверок `null_map` и `join_mask`, когда они всегда равны `true`/`false`. [#82308](https://github.com/ClickHouse/ClickHouse/pull/82308) ([Nikita Taranov](https://github.com/nickitat)). +* Небольшая оптимизация комбинатора `-If`. [#78454](https://github.com/ClickHouse/ClickHouse/pull/78454) ([李扬](https://github.com/taiyang-li)). +* Запросы векторного поиска с использованием индекса векторного сходства выполняются с меньшей задержкой за счет сокращения числа операций чтения из хранилища и снижения нагрузки на CPU. [#79103](https://github.com/ClickHouse/ClickHouse/pull/79103) ([Shankar Iyer](https://github.com/shankar-iyer)). +* Учитывать `merge_tree_min_{rows,bytes}_for_seek` в `filterPartsByQueryConditionCache`, чтобы привести его в соответствие с другими методами, фильтрующими по индексам. [#80312](https://github.com/ClickHouse/ClickHouse/pull/80312) ([李扬](https://github.com/taiyang-li)). +* Сделать конвейер после шага `TOTALS` многопоточным. [#80331](https://github.com/ClickHouse/ClickHouse/pull/80331) ([UnamedRus](https://github.com/UnamedRus)). +* Исправлена фильтрация по ключу в хранилищах `Redis` и `KeeperMap`. [#81833](https://github.com/ClickHouse/ClickHouse/pull/81833) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +* Добавлена новая настройка `min_joined_block_size_rows` (аналогичная `min_joined_block_size_bytes`; по умолчанию 65409) для управления минимальным размером блока (в строках) для входных и выходных блоков операции JOIN (если алгоритм JOIN это поддерживает). Маленькие блоки будут укрупняться. [#81886](https://github.com/ClickHouse/ClickHouse/pull/81886) ([Nikita Taranov](https://github.com/nickitat)). * `ATTACH PARTITION` больше не приводит к сбросу всех кэшей. [#82377](https://github.com/ClickHouse/ClickHouse/pull/82377) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Оптимизирован сгенерированный план для коррелированных подзапросов за счёт удаления избыточных операций JOIN с использованием классов эквивалентности. Если существуют эквивалентные выражения для всех коррелированных столбцов, операция `CROSS JOIN` не выполняется при включённой настройке `query_plan_correlated_subqueries_use_substitution`. [#82435](https://github.com/ClickHouse/ClickHouse/pull/82435) ([Dmitry Novik](https://github.com/novikd)). -* Считывать только требуемые столбцы в коррелированном подзапросе, если он является аргументом функции `EXISTS`. [#82443](https://github.com/ClickHouse/ClickHouse/pull/82443) ([Dmitry Novik](https://github.com/novikd)). -* Незначительно ускорено сравнение деревьев запросов при анализе запроса. [#82617](https://github.com/ClickHouse/ClickHouse/pull/82617) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). -* Добавлено выравнивание в счётчике `Counter` из `ProfileEvents` для уменьшения эффекта false sharing. [#82697](https://github.com/ClickHouse/ClickHouse/pull/82697) ([Jiebin Sun](https://github.com/jiebinn)). -* Оптимизации для `null_map` и `JoinMask` из [#82308](https://github.com/ClickHouse/ClickHouse/issues/82308) были применены к операции JOIN с несколькими дизъюнктами. Также была оптимизирована структура данных `KnownRowsHolder`. [#83041](https://github.com/ClickHouse/ClickHouse/pull/83041) ([Nikita Taranov](https://github.com/nickitat)). -* Простой `std::vector` используется для флагов соединения, чтобы избежать вычисления хэша при каждом обращении к флагам. [#83043](https://github.com/ClickHouse/ClickHouse/pull/83043) ([Nikita Taranov](https://github.com/nickitat)). -* Не выделяйте память для результирующих столбцов заранее, когда `HashJoin` использует режим вывода `lazy`. Это неэффективно, особенно когда количество совпадений невелико. Кроме того, после завершения операции соединения нам известно точное количество совпадений, поэтому мы можем заранее выделить память с нужной точностью. [#83304](https://github.com/ClickHouse/ClickHouse/pull/83304) ([Nikita Taranov](https://github.com/nickitat)). -* Минимизировать объём копирования памяти в заголовках портов при построении конвейера. Исходный [PR](https://github.com/ClickHouse/ClickHouse/pull/70105) от [heymind](https://github.com/heymind). [#83381](https://github.com/ClickHouse/ClickHouse/pull/83381) ([Raúl Marín](https://github.com/Algunenano)). -* Улучшен процесс запуска clickhouse-keeper при использовании хранилища rocksdb. [#83390](https://github.com/ClickHouse/ClickHouse/pull/83390) ([Antonio Andelic](https://github.com/antonio2368)). -* Избегайте удержания блокировки при создании данных снимка хранилища, чтобы снизить конкуренцию за блокировку при высокой параллельной нагрузке. [#83510](https://github.com/ClickHouse/ClickHouse/pull/83510) ([Duc Canh Le](https://github.com/canhld94)). -* Повышена производительность формата ввода `ProtobufSingle` за счёт повторного использования сериализатора при отсутствии ошибок разбора. [#83613](https://github.com/ClickHouse/ClickHouse/pull/83613) ([Eduard Karacharov](https://github.com/korowa)). -* Улучшена производительность построения конвейера, что ускоряет выполнение коротких запросов. [#83631](https://github.com/ClickHouse/ClickHouse/pull/83631) ([Raúl Marín](https://github.com/Algunenano)). -* Оптимизирован `MergeTreeReadersChain::getSampleBlock`, ускоряющий выполнение коротких запросов. [#83875](https://github.com/ClickHouse/ClickHouse/pull/83875) ([Raúl Marín](https://github.com/Algunenano)). -* Ускорен вывод списка таблиц в каталогах данных за счет асинхронных запросов. [#81084](https://github.com/ClickHouse/ClickHouse/pull/81084) ([alesapin](https://github.com/alesapin)). -* Добавить джиттер в механизм повторных попыток обращений к S3, когда включена конфигурация `s3_slow_all_threads_after_network_error`. [#81849](https://github.com/ClickHouse/ClickHouse/pull/81849) ([zoomxi](https://github.com/zoomxi)). - - - - +* Оптимизировано формирование плана для коррелированных подзапросов за счёт удаления избыточных операций JOIN с использованием классов эквивалентности. Если для всех коррелированных столбцов существуют эквивалентные выражения и включена настройка `query_plan_correlated_subqueries_use_substitution`, оператор `CROSS JOIN` не генерируется. [#82435](https://github.com/ClickHouse/ClickHouse/pull/82435) ([Dmitry Novik](https://github.com/novikd)). +* Считывать в коррелированном подзапросе только требуемые столбцы, если он выступает аргументом функции `EXISTS`. [#82443](https://github.com/ClickHouse/ClickHouse/pull/82443) ([Dmitry Novik](https://github.com/novikd)). +* Немного ускорено сравнение деревьев запросов при анализе запроса. [#82617](https://github.com/ClickHouse/ClickHouse/pull/82617) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). +* Добавлено выравнивание в `Counter` из `ProfileEvents` для уменьшения эффекта ложного совместного использования кэша. [#82697](https://github.com/ClickHouse/ClickHouse/pull/82697) ([Jiebin Sun](https://github.com/jiebinn)). +* Оптимизации для `null_map` и `JoinMask` из [#82308](https://github.com/ClickHouse/ClickHouse/issues/82308) были применены к операциям JOIN с несколькими дизъюнктами. Также была оптимизирована структура данных `KnownRowsHolder`. [#83041](https://github.com/ClickHouse/ClickHouse/pull/83041) ([Nikita Taranov](https://github.com/nickitat)). +* Обычный `std::vector` используется для join-флагов, чтобы избежать вычисления хэша при каждом доступе к флагам. [#83043](https://github.com/ClickHouse/ClickHouse/pull/83043) ([Nikita Taranov](https://github.com/nickitat)). +* Не выделяйте память для результирующих столбцов заранее, когда `HashJoin` использует режим отложенного (`lazy`) вывода. Это неэффективно, особенно когда количество совпадений невелико. Кроме того, после завершения операции соединения мы знаем точное количество совпадений, поэтому можем более точно предварительно выделить память. [#83304](https://github.com/ClickHouse/ClickHouse/pull/83304) ([Nikita Taranov](https://github.com/nickitat)). +* Минимизировано копирование данных в памяти в заголовках портов при построении конвейера. Исходный [PR](https://github.com/ClickHouse/ClickHouse/pull/70105) от [heymind](https://github.com/heymind). [#83381](https://github.com/ClickHouse/ClickHouse/pull/83381) ([Raúl Marín](https://github.com/Algunenano)). +* Улучшен процесс запуска clickhouse-keeper при использовании хранилища RocksDB. [#83390](https://github.com/ClickHouse/ClickHouse/pull/83390) ([Antonio Andelic](https://github.com/antonio2368)). +* Старайтесь не удерживать блокировку во время создания снимка данных хранилища, чтобы уменьшить конкуренцию за блокировку при высокой конкурентной нагрузке. [#83510](https://github.com/ClickHouse/ClickHouse/pull/83510) ([Duc Canh Le](https://github.com/canhld94)). +* Повышена производительность формата входных данных `ProtobufSingle` за счёт повторного использования сериализатора при отсутствии ошибок парсинга. [#83613](https://github.com/ClickHouse/ClickHouse/pull/83613) ([Eduard Karacharov](https://github.com/korowa)). +* Улучшена производительность построения конвейера, что позволяет ускорить выполнение коротких запросов. [#83631](https://github.com/ClickHouse/ClickHouse/pull/83631) ([Raúl Marín](https://github.com/Algunenano)). +* Оптимизирован `MergeTreeReadersChain::getSampleBlock`, ускоряющий короткие запросы. [#83875](https://github.com/ClickHouse/ClickHouse/pull/83875) ([Raúl Marín](https://github.com/Algunenano)). +* Ускорен вывод списка таблиц в каталогах данных за счёт асинхронных запросов. [#81084](https://github.com/ClickHouse/ClickHouse/pull/81084) ([alesapin](https://github.com/alesapin)). +* Добавлен джиттер в механизм повторных попыток S3 при включённой настройке `s3_slow_all_threads_after_network_error`. [#81849](https://github.com/ClickHouse/ClickHouse/pull/81849) ([zoomxi](https://github.com/zoomxi)). #### Улучшение -* Подсветить круглые скобки несколькими цветами для лучшей читаемости. [#82538](https://github.com/ClickHouse/ClickHouse/pull/82538) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* Подсветка метасимволов в шаблонах LIKE/REGEXP теперь работает по мере ввода. Она уже была доступна в `clickhouse-format` и в выводе `clickhouse-client`, но теперь реализована и в командной строке. [#82871](https://github.com/ClickHouse/ClickHouse/pull/82871) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Подсветка синтаксиса в `clickhouse-format` и в echo-выводе клиента будет работать так же, как подсветка в приглашении командной строки. [#82874](https://github.com/ClickHouse/ClickHouse/pull/82874) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Теперь диски `plain_rewritable` можно использовать для хранения метаданных базы данных. Реализованы методы `moveFile` и `replaceFile` в `plain_rewritable`, чтобы поддерживать его в качестве диска базы данных. [#79424](https://github.com/ClickHouse/ClickHouse/pull/79424) ([Tuan Pham Anh](https://github.com/tuanpach)). -* Разрешено создание резервных копий баз данных `PostgreSQL`, `MySQL` и `DataLake`. Резервная копия такой базы данных будет сохранять только определение, а не содержащиеся в ней данные. [#79982](https://github.com/ClickHouse/ClickHouse/pull/79982) ([Nikolay Degterinsky](https://github.com/evillique)). -* Параметр `allow_experimental_join_condition` помечен как устаревший, так как теперь он всегда разрешён. [#80566](https://github.com/ClickHouse/ClickHouse/pull/80566) ([Vladimir Cherkasov](https://github.com/vdimir)). -* Добавлены метрики pressure в асинхронные метрики ClickHouse. [#80779](https://github.com/ClickHouse/ClickHouse/pull/80779) ([Xander Garbett](https://github.com/Garbett1)). -* Добавлены метрики `MarkCacheEvictedBytes`, `MarkCacheEvictedMarks`, `MarkCacheEvictedFiles` для отслеживания вытеснений из кэша меток (issue [#60989](https://github.com/ClickHouse/ClickHouse/issues/60989)). [#80799](https://github.com/ClickHouse/ClickHouse/pull/80799) ([Shivji Kumar Jha](https://github.com/shiv4289)). -* Добавлена поддержка записи перечислений Parquet (enum) в виде массива байт, как предписывает [спецификация](https://github.com/apache/parquet-format/blob/master/LogicalTypes.md#enum). [#81090](https://github.com/ClickHouse/ClickHouse/pull/81090) ([Arthur Passos](https://github.com/arthurpassos)). -* Улучшение для движка таблицы `DeltaLake`: в delta-kernel-rs появился API `ExpressionVisitor`, который реализован в этом PR и используется для преобразования выражений над партиционными столбцами (он заменит старый устаревший механизм в delta-kernel-rs, который ранее применялся в нашем коде). В будущем этот `ExpressionVisitor` также позволит реализовать отсечение на основе статистики (statistics-based pruning) и некоторые проприетарные возможности delta-lake. Дополнительно цель этого изменения — поддержка partition pruning в движке таблицы `DeltaLakeCluster` (результат разобранного выражения — ActionsDAG — будет сериализован и отправлен с инициатора вместе с путем к данным, поскольку информация, необходимая для pruning, доступна только как метаинформация при получении списка файлов данных, которое выполняется только инициатором, но при этом должна применяться к данным на каждом сервере чтения). [#81136](https://github.com/ClickHouse/ClickHouse/pull/81136) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Подсветка скобок разными цветами для лучшей читаемости. [#82538](https://github.com/ClickHouse/ClickHouse/pull/82538) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* Подсвечивать метасимволы в шаблонах LIKE/REGEXP по мере ввода. Это уже реализовано в `clickhouse-format` и в выводе `clickhouse-client`, но теперь работает и в приглашении командной строки. [#82871](https://github.com/ClickHouse/ClickHouse/pull/82871) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Подсветка в `clickhouse-format` и в выводе клиента будет работать так же, как подсветка в приглашении командной строки. [#82874](https://github.com/ClickHouse/ClickHouse/pull/82874) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Теперь диски `plain_rewritable` можно использовать для метаданных баз данных. Реализованы методы `moveFile` и `replaceFile` в `plain_rewritable`, чтобы поддержать его использование в качестве диска базы данных. [#79424](https://github.com/ClickHouse/ClickHouse/pull/79424) ([Tuan Pham Anh](https://github.com/tuanpach)). +* Разрешено создание резервных копий для баз данных `PostgreSQL`, `MySQL` и `DataLake`. Резервная копия такой базы данных будет сохранять только определение, но не данные, которые в ней хранятся. [#79982](https://github.com/ClickHouse/ClickHouse/pull/79982) ([Nikolay Degterinsky](https://github.com/evillique)). +* Настройка `allow_experimental_join_condition` помечена как устаревшая, так как соответствующее поведение теперь всегда включено. [#80566](https://github.com/ClickHouse/ClickHouse/pull/80566) ([Vladimir Cherkasov](https://github.com/vdimir)). +* Добавить метрики нагрузки к асинхронным метрикам ClickHouse. [#80779](https://github.com/ClickHouse/ClickHouse/pull/80779) ([Xander Garbett](https://github.com/Garbett1)). +* Добавлены метрики `MarkCacheEvictedBytes`, `MarkCacheEvictedMarks`, `MarkCacheEvictedFiles` для отслеживания вытеснений из кэша меток. (issue [#60989](https://github.com/ClickHouse/ClickHouse/issues/60989)). [#80799](https://github.com/ClickHouse/ClickHouse/pull/80799) ([Shivji Kumar Jha](https://github.com/shiv4289)). +* Добавлена поддержка записи Parquet enum в виде массива байт, как предписывает [спецификация](https://github.com/apache/parquet-format/blob/master/LogicalTypes.md#enum). [#81090](https://github.com/ClickHouse/ClickHouse/pull/81090) ([Arthur Passos](https://github.com/arthurpassos)). +* Улучшение для движка таблиц `DeltaLake`: в delta-kernel-rs появился API `ExpressionVisitor`, который реализован в этом PR и используется для преобразования выражений по столбцам партиционирования (он заменит старый, устаревший способ в delta-kernel-rs, который ранее использовался в нашем коде). В будущем этот `ExpressionVisitor` также позволит реализовать отсечение (pruning) на основе статистики и некоторые проприетарные возможности Delta Lake. Дополнительно цель этого изменения — поддержать отсечение партиций в движке таблиц `DeltaLakeCluster` (результат разобранного выражения — ActionsDAG — будет сериализован и отправлен от инициатора вместе с путём к данным, потому что такая информация, необходимая для отсечения, доступна только как метаинформация при получении списка файлов с данными, что выполняется только инициатором, но должна применяться к данным на каждом сервере чтения). [#81136](https://github.com/ClickHouse/ClickHouse/pull/81136) ([Kseniia Sumarokova](https://github.com/kssenii)). * Сохранять имена элементов при выводе супертипов для именованных кортежей. [#81345](https://github.com/ClickHouse/ClickHouse/pull/81345) ([lgbo](https://github.com/lgbo-ustc)). -* Считать потреблённые сообщения вручную, чтобы не зависеть от ранее зафиксированного смещения в StorageKafka2. [#81662](https://github.com/ClickHouse/ClickHouse/pull/81662) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). -* Добавлен `clickhouse-keeper-utils` — новый инструмент командной строки для управления и анализа данных ClickHouse Keeper. Инструмент поддерживает дамп состояния из снимков и журналов изменений, анализ файлов журналов изменений и извлечение заданных диапазонов логов. [#81677](https://github.com/ClickHouse/ClickHouse/pull/81677) ([Antonio Andelic](https://github.com/antonio2368)). -* Общие и помпользовательские ограничители сетевой пропускной способности никогда не сбрасываются, что гарантирует, что лимиты `max_network_bandwidth_for_all_users` и `max_network_bandwidth_for_all_users` никогда не будут превышены. [#81729](https://github.com/ClickHouse/ClickHouse/pull/81729) ([Sergei Trifonov](https://github.com/serxa)). +* Подсчитывайте потреблённые сообщения вручную, чтобы не зависеть от ранее зафиксированного смещения в StorageKafka2. [#81662](https://github.com/ClickHouse/ClickHouse/pull/81662) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). +* Добавлен `clickhouse-keeper-utils` — новый инструмент командной строки для управления и анализа данных ClickHouse Keeper. Инструмент поддерживает выгрузку состояния из снапшотов и журналов изменений (changelog), анализ файлов changelog и извлечение отдельных диапазонов логов. [#81677](https://github.com/ClickHouse/ClickHouse/pull/81677) ([Antonio Andelic](https://github.com/antonio2368)). +* Общие и помпользовательские ограничители сетевой пропускной способности никогда не сбрасываются, что исключает превышение лимитов `max_network_bandwidth_for_all_users` и `max_network_bandwidth_for_all_users`. [#81729](https://github.com/ClickHouse/ClickHouse/pull/81729) ([Sergei Trifonov](https://github.com/serxa)). * Добавлена поддержка записи в формат GeoParquet. [#81784](https://github.com/ClickHouse/ClickHouse/pull/81784) ([Konstantin Vedernikov](https://github.com/scanhex12)). -* Запрещен запуск мутации ALTER `RENAME COLUMN`, если она будет переименовывать столбец, который в данный момент затронут незавершённой мутацией данных. [#81823](https://github.com/ClickHouse/ClickHouse/pull/81823) ([Mikhail Artemenko](https://github.com/Michicosun)). -* Заголовок Connection отправляется в конце всех заголовков, когда уже известно, следует ли сохранять соединение. [#81951](https://github.com/ClickHouse/ClickHouse/pull/81951) ([Sema Checherinda](https://github.com/CheSema)). -* Настройте размер очереди TCP-серверов (по умолчанию 64) в соответствии с параметром listen_backlog (по умолчанию 4096). [#82045](https://github.com/ClickHouse/ClickHouse/pull/82045) ([Azat Khuzhin](https://github.com/azat)). -* Добавлена возможность перезагружать параметры `max_local_read_bandwidth_for_server` и `max_local_write_bandwidth_for_server` на лету без перезапуска сервера. [#82083](https://github.com/ClickHouse/ClickHouse/pull/82083) ([Kai Zhu](https://github.com/nauu)). +* Запрещён запуск мутации ALTER `RENAME COLUMN`, если она попытается переименовать столбец, на который в данный момент распространяется незавершённая мутация данных. [#81823](https://github.com/ClickHouse/ClickHouse/pull/81823) ([Mikhail Artemenko](https://github.com/Michicosun)). +* Заголовок Connection теперь отправляется в конце списка заголовков, когда уже известно, нужно ли сохранять соединение. [#81951](https://github.com/ClickHouse/ClickHouse/pull/81951) ([Sema Checherinda](https://github.com/CheSema)). +* Настройте очередь TCP-серверов (по умолчанию — 64) в соответствии со значением `listen_backlog` (по умолчанию — 4096). [#82045](https://github.com/ClickHouse/ClickHouse/pull/82045) ([Azat Khuzhin](https://github.com/azat)). +* Добавлена возможность перезагружать `max_local_read_bandwidth_for_server` и `max_local_write_bandwidth_for_server` на лету без перезапуска сервера. [#82083](https://github.com/ClickHouse/ClickHouse/pull/82083) ([Kai Zhu](https://github.com/nauu)). * Добавлена возможность очистки всех предупреждений из таблицы `system.warnings` с помощью `TRUNCATE TABLE system.warnings`. [#82087](https://github.com/ClickHouse/ClickHouse/pull/82087) ([Vladimir Cherkasov](https://github.com/vdimir)). -* Исправлено отсечение партиций при использовании кластерных функций для озера данных. [#82131](https://github.com/ClickHouse/ClickHouse/pull/82131) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Исправлено чтение секционированных данных в табличной функции DeltaLakeCluster. В этом PR повышена версия протокола кластерных функций, что позволяет передавать дополнительную информацию от инициатора к репликам. Эта дополнительная информация содержит выражение преобразования delta-kernel, которое необходимо для разбора секционирующих столбцов (а в будущем и для других возможностей, таких как сгенерированные столбцы и т. п.). [#82132](https://github.com/ClickHouse/ClickHouse/pull/82132) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Функция `reinterpret` теперь поддерживает преобразование к типу `Array(T)`, где `T` — тип данных фиксированного размера (issue [#82621](https://github.com/ClickHouse/ClickHouse/issues/82621)). [#83399](https://github.com/ClickHouse/ClickHouse/pull/83399) ([Shankar Iyer](https://github.com/shankar-iyer)). -* Теперь база данных Datalake выдаёт более информативное исключение. Исправляет [#81211](https://github.com/ClickHouse/ClickHouse/issues/81211). [#82304](https://github.com/ClickHouse/ClickHouse/pull/82304) ([alesapin](https://github.com/alesapin)). -* Улучшен `CROSS JOIN` путём возврата `false` из `HashJoin::needUsedFlagsForPerRightTableRow`. [#82379](https://github.com/ClickHouse/ClickHouse/pull/82379) ([lgbo](https://github.com/lgbo-ustc)). -* Разрешена запись и чтение столбцов Map в виде Array(Tuple). [#82408](https://github.com/ClickHouse/ClickHouse/pull/82408) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). -* Вывод списка лицензий крейтов [Rust](https://clickhouse.com/blog/rust) в `system.licenses`. [#82440](https://github.com/ClickHouse/ClickHouse/pull/82440) ([Raúl Marín](https://github.com/Algunenano)). -* Макросы вроде `{uuid}` теперь можно использовать в параметре `keeper_path` движка таблицы S3Queue. [#82463](https://github.com/ClickHouse/ClickHouse/pull/82463) ([Nikolay Degterinsky](https://github.com/evillique)). -* Улучшение Keeper: перемещение файлов changelog между дисками в фоновом потоке. Ранее перенос changelog на другой диск полностью блокировал Keeper до завершения операции. Это приводило к деградации производительности, когда перенос занимал много времени (например, на диск S3). [#82485](https://github.com/ClickHouse/ClickHouse/pull/82485) ([Antonio Andelic](https://github.com/antonio2368)). -* Улучшение Keeper: добавлен новый параметр конфигурации `keeper_server.cleanup_old_and_ignore_new_acl`. Если он включён, ACL всех узлов будут очищены, а ACL для новых запросов — игнорироваться. Если цель — полностью удалить ACL на узлах, важно оставить параметр включённым до тех пор, пока не будет создан новый снапшот. [#82496](https://github.com/ClickHouse/ClickHouse/pull/82496) ([Antonio Andelic](https://github.com/antonio2368)). -* Добавлена новая серверная настройка `s3queue_disable_streaming`, которая отключает стриминг в таблицах с движком S3Queue. Эту настройку можно изменять без перезапуска сервера. [#82515](https://github.com/ClickHouse/ClickHouse/pull/82515) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Рефакторинг механизма динамического изменения размера кэша файловой системы. Добавлено больше логов для диагностики. [#82556](https://github.com/ClickHouse/ClickHouse/pull/82556) ([Kseniia Sumarokova](https://github.com/kssenii)). -* `clickhouse-server` без файла конфигурации также будет слушать порт PostgreSQL 9005 — аналогично конфигурации по умолчанию. [#82633](https://github.com/ClickHouse/ClickHouse/pull/82633) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* В `ReplicatedMergeTree::executeMetadataAlter` мы получаем `StorageID` и, не захватывая `DDLGuard`, пытаемся вызвать `IDatabase::alterTable`. За это время мы технически могли заменить рассматриваемую таблицу на другую, поэтому при получении определения таблицы мы могли бы получить неверное. Чтобы избежать этого, мы добавляем отдельную проверку на совпадение UUID при попытке вызвать `IDatabase::alterTable`. [#82666](https://github.com/ClickHouse/ClickHouse/pull/82666) ([Nikolay Degterinsky](https://github.com/evillique)). -* При подключении базы данных, использующей удалённый диск только для чтения, необходимо вручную добавить UUID таблиц в DatabaseCatalog. [#82670](https://github.com/ClickHouse/ClickHouse/pull/82670) ([Tuan Pham Anh](https://github.com/tuanpach)). -* Запрещено использование пользователями значений `nan` и `inf` с `NumericIndexedVector`. Исправлены [#82239](https://github.com/ClickHouse/ClickHouse/issues/82239) и некоторые сопутствующие проблемы. [#82681](https://github.com/ClickHouse/ClickHouse/pull/82681) ([Raufs Dunamalijevs](https://github.com/rienath)). +* Исправлено отсечение партиций в кластерных функциях дата-лейка. [#82131](https://github.com/ClickHouse/ClickHouse/pull/82131) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Исправлено чтение секционированных данных в табличной функции DeltaLakeCluster. В этом PR версия протокола кластерных функций повышена, что позволяет передавать дополнительную информацию от инициатора к репликам. Эта дополнительная информация содержит выражение преобразования delta-kernel, которое необходимо для разбора столбцов секционирования (а также некоторых других элементов в будущем, например, генерируемых столбцов и т. д.). [#82132](https://github.com/ClickHouse/ClickHouse/pull/82132) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Функция `reinterpret` теперь поддерживает преобразование в `Array(T)`, где `T` — тип фиксированного размера (issue [#82621](https://github.com/ClickHouse/ClickHouse/issues/82621)). [#83399](https://github.com/ClickHouse/ClickHouse/pull/83399) ([Shankar Iyer](https://github.com/shankar-iyer)). +* Теперь база данных Datalake выбрасывает более понятное исключение. Исправлена [#81211](https://github.com/ClickHouse/ClickHouse/issues/81211). [#82304](https://github.com/ClickHouse/ClickHouse/pull/82304) ([alesapin](https://github.com/alesapin)). +* Улучшена операция CROSS JOIN за счёт возврата false из `HashJoin::needUsedFlagsForPerRightTableRow`. [#82379](https://github.com/ClickHouse/ClickHouse/pull/82379) ([lgbo](https://github.com/lgbo-ustc)). +* Добавлена возможность записывать и читать столбцы типа Map как массив кортежей (Array(Tuple)). [#82408](https://github.com/ClickHouse/ClickHouse/pull/82408) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). +* Добавлен вывод лицензий Rust-крейтов в таблицу `system.licenses`. [Rust](https://clickhouse.com/blog/rust) [#82440](https://github.com/ClickHouse/ClickHouse/pull/82440) ([Raúl Marín](https://github.com/Algunenano)). +* Теперь макросы, такие как `{uuid}`, можно использовать в параметре `keeper_path` движка таблицы S3Queue. [#82463](https://github.com/ClickHouse/ClickHouse/pull/82463) ([Nikolay Degterinsky](https://github.com/evillique)). +* Улучшение в Keeper: перемещение файлов журнала изменений между дисками в фоновом потоке. Ранее при перемещении журнала изменений на другой диск Keeper глобально блокировался до завершения операции. Это приводило к ухудшению производительности, если перемещение занимало много времени (например, на диск S3). [#82485](https://github.com/ClickHouse/ClickHouse/pull/82485) ([Antonio Andelic](https://github.com/antonio2368)). +* Улучшение в Keeper: добавлена новая настройка `keeper_server.cleanup_old_and_ignore_new_acl`. Если она включена, у всех узлов будут очищены ACL, а ACL для новых запросов будет игнорироваться. Если цель — полностью удалить ACL с узлов, важно оставить эту настройку включённой до тех пор, пока не будет создан новый snapshot. [#82496](https://github.com/ClickHouse/ClickHouse/pull/82496) ([Antonio Andelic](https://github.com/antonio2368)). +* Добавлена новая настройка сервера `s3queue_disable_streaming`, которая отключает стриминг в таблицах с движком S3Queue. Эту настройку можно изменять без перезапуска сервера. [#82515](https://github.com/ClickHouse/ClickHouse/pull/82515) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Рефакторинг механизма динамического изменения размера кеша файловой системы. Добавлено больше логирования для диагностики. [#82556](https://github.com/ClickHouse/ClickHouse/pull/82556) ([Kseniia Sumarokova](https://github.com/kssenii)). +* `clickhouse-server` без файла конфигурации также будет слушать порт PostgreSQL 9005, как и с конфигурацией по умолчанию. [#82633](https://github.com/ClickHouse/ClickHouse/pull/82633) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* В `ReplicatedMergeTree::executeMetadataAlter` мы получаем `StorageID` и, не используя `DDLGuard`, пытаемся вызвать `IDatabase::alterTable`. За это время мы технически могли заменить рассматриваемую таблицу другой, так что при получении определения таблицы мы получим неверное. Чтобы избежать этого, мы добавляем отдельную проверку совпадения UUID при попытке вызвать `IDatabase::alterTable`. [#82666](https://github.com/ClickHouse/ClickHouse/pull/82666) ([Nikolay Degterinsky](https://github.com/evillique)). +* При присоединении базы данных с удалённым диском только для чтения нужно вручную добавить UUID таблиц в DatabaseCatalog. [#82670](https://github.com/ClickHouse/ClickHouse/pull/82670) ([Tuan Pham Anh](https://github.com/tuanpach)). +* Запрещено использование значений `nan` и `inf` с `NumericIndexedVector`. Исправляет [#82239](https://github.com/ClickHouse/ClickHouse/issues/82239) и немного больше. [#82681](https://github.com/ClickHouse/ClickHouse/pull/82681) ([Raufs Dunamalijevs](https://github.com/rienath)). * Не пропускайте нулевые значения в форматах заголовков `X-ClickHouse-Progress` и `X-ClickHouse-Summary`. [#82727](https://github.com/ClickHouse/ClickHouse/pull/82727) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). -* Улучшение в Keeper: поддержка конкретных прав для ACL world:anyone. [#82755](https://github.com/ClickHouse/ClickHouse/pull/82755) ([Antonio Andelic](https://github.com/antonio2368)). -* Запретить выполнение `RENAME COLUMN` или `DROP COLUMN`, затрагивающих явно указанные столбцы суммирования в SummingMergeTree. Закрывает [#81836](https://github.com/ClickHouse/ClickHouse/issues/81836). [#82821](https://github.com/ClickHouse/ClickHouse/pull/82821) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Улучшение в Keeper: поддержка отдельных прав доступа для ACL world:anyone. [#82755](https://github.com/ClickHouse/ClickHouse/pull/82755) ([Antonio Andelic](https://github.com/antonio2368)). +* Не разрешать выполнение `RENAME COLUMN` или `DROP COLUMN` для столбцов, явно указанных в списке столбцов для суммирования в SummingMergeTree. Закрывает [#81836](https://github.com/ClickHouse/ClickHouse/issues/81836). [#82821](https://github.com/ClickHouse/ClickHouse/pull/82821) ([Alexey Milovidov](https://github.com/alexey-milovidov)). * Улучшена точность преобразования из `Decimal` в `Float32`. Реализовано преобразование из `Decimal` в `BFloat16`. Закрывает [#82660](https://github.com/ClickHouse/ClickHouse/issues/82660). [#82823](https://github.com/ClickHouse/ClickHouse/pull/82823) ([Alexey Milovidov](https://github.com/alexey-milovidov)). * Полосы прокрутки в веб-интерфейсе станут выглядеть немного лучше. [#82869](https://github.com/ClickHouse/ClickHouse/pull/82869) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* `clickhouse-server` со встроенной конфигурацией позволит использовать Web UI путём отправки HTTP-ответа OPTIONS. [#82870](https://github.com/ClickHouse/ClickHouse/pull/82870) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Добавлена поддержка задания дополнительных ACL Keeper для путей в конфигурации. Если вы хотите добавить дополнительные ACL для конкретного пути, задайте их в конфигурации в разделе `zookeeper.path_acls`. [#82898](https://github.com/ClickHouse/ClickHouse/pull/82898) ([Antonio Andelic](https://github.com/antonio2368)). -* Теперь снимок мутаций будет формироваться на основе снимка видимых частей. Также счетчики мутаций, используемые в этом снимке, будут пересчитаны исходя из включенных мутаций. [#82945](https://github.com/ClickHouse/ClickHouse/pull/82945) ([Mikhail Artemenko](https://github.com/Michicosun)). -* Добавлен ProfileEvent, срабатывающий, когда Keeper отклоняет операцию записи из‑за мягкого ограничения по памяти. [#82963](https://github.com/ClickHouse/ClickHouse/pull/82963) ([Xander Garbett](https://github.com/Garbett1)). +* `clickhouse-server` со встроенной конфигурацией позволит использовать веб-интерфейс, отвечая на HTTP-запрос OPTIONS. [#82870](https://github.com/ClickHouse/ClickHouse/pull/82870) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Добавлена поддержка указания дополнительных ACL Keeper для путей в конфигурации. Если вы хотите добавить дополнительные ACL для конкретного пути, задайте их в конфигурации в секции `zookeeper.path_acls`. [#82898](https://github.com/ClickHouse/ClickHouse/pull/82898) ([Antonio Andelic](https://github.com/antonio2368)). +* Теперь снимок мутаций будет формироваться на основе снимка видимых частей. Также счетчики мутаций, используемые в снимке, будут пересчитаны по включённым мутациям. [#82945](https://github.com/ClickHouse/ClickHouse/pull/82945) ([Mikhail Artemenko](https://github.com/Michicosun)). +* Добавлен ProfileEvent, когда Keeper отклоняет запись из‑за мягкого ограничения памяти. [#82963](https://github.com/ClickHouse/ClickHouse/pull/82963) ([Xander Garbett](https://github.com/Garbett1)). * Добавлены столбцы `commit_time`, `commit_id` в таблицу `system.s3queue_log`. [#83016](https://github.com/ClickHouse/ClickHouse/pull/83016) ([Kseniia Sumarokova](https://github.com/kssenii)). -* В некоторых случаях нам требуется несколько размерностей для наших метрик. Например, подсчитывать неуспешные слияния или мутации по кодам ошибок, а не вести один общий счетчик. Представлен `system.dimensional_metrics`, который как раз это и обеспечивает и добавляет первую размерную метрику `failed_merges`. [#83030](https://github.com/ClickHouse/ClickHouse/pull/83030) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). -* Объединить предупреждения о неизвестных настройках в clickhouse client и логировать их в виде сводного сообщения. [#83042](https://github.com/ClickHouse/ClickHouse/pull/83042) ([Bharat Nallan](https://github.com/bharatnc)). -* Клиент ClickHouse теперь сообщает локальный порт при возникновении ошибки подключения. [#83050](https://github.com/ClickHouse/ClickHouse/pull/83050) ([Jianfei Hu](https://github.com/incfly)). -* Незначительно улучшена обработка ошибок в `AsynchronousMetrics`. Если каталог `/sys/block` существует, но недоступен, сервер запустится без мониторинга блочных устройств. Исправляет [#79229](https://github.com/ClickHouse/ClickHouse/issues/79229). [#83115](https://github.com/ClickHouse/ClickHouse/pull/83115) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Отключение SystemLogs после обычных таблиц (и перед системными таблицами, а не перед обычными). [#83134](https://github.com/ClickHouse/ClickHouse/pull/83134) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Добавлен вывод логов процесса остановки `S3Queue`. [#83163](https://github.com/ClickHouse/ClickHouse/pull/83163) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Добавлена возможность интерпретировать значения типов `Time` и `Time64` как `MM:SS`, `M:SS`, `SS` или `S`. [#83299](https://github.com/ClickHouse/ClickHouse/pull/83299) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* Когда `distributed_ddl_output_mode='*_only_active'`, не ожидайте новые или восстановленные реплики, у которых лаг репликации больше `max_replication_lag_to_enqueue`. Это должно помочь избежать ошибки `DDL task is not finished on some hosts`, когда новая реплика становится активной после завершения инициализации или восстановления, но при инициализации накопила огромный журнал репликации. Также реализован запрос `SYSTEM SYNC DATABASE REPLICA STRICT`, который ожидает, пока журнал репликации не станет меньше `max_replication_lag_to_enqueue`. [#83302](https://github.com/ClickHouse/ClickHouse/pull/83302) ([Alexander Tokmakov](https://github.com/tavplubix)). -* Не выводить слишком длинные описания действий выражения в сообщениях об исключениях. Закрывает [#83164](https://github.com/ClickHouse/ClickHouse/issues/83164). [#83350](https://github.com/ClickHouse/ClickHouse/pull/83350) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Добавлена возможность парсить префикс и суффикс части, а также проверять покрытие для неконстантных столбцов. [#83377](https://github.com/ClickHouse/ClickHouse/pull/83377) ([Mikhail Artemenko](https://github.com/Michicosun)). -* Унифицировать имена параметров в ODBC и JDBC при использовании именованных коллекций. [#83410](https://github.com/ClickHouse/ClickHouse/pull/83410) ([Andrey Zvonov](https://github.com/zvonand)). -* Когда хранилище останавливается, `getStatus` выбрасывает исключение `ErrorCodes::ABORTED`. Ранее это приводило к ошибке выполнения запроса SELECT. Теперь мы перехватываем исключения `ErrorCodes::ABORTED` и намеренно их игнорируем. [#83435](https://github.com/ClickHouse/ClickHouse/pull/83435) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). -* Добавлены метрики ресурсов процесса (такие как `UserTimeMicroseconds`, `SystemTimeMicroseconds`, `RealTimeMicroseconds`) в события профиля part_log для записей `MergeParts`. [#83460](https://github.com/ClickHouse/ClickHouse/pull/83460) ([Vladimir Cherkasov](https://github.com/vdimir)). -* Теперь в Keeper по умолчанию включены флаги `create_if_not_exists`, `check_not_exists`, `remove_recursive`, которые позволяют использовать новые типы запросов. [#83488](https://github.com/ClickHouse/ClickHouse/pull/83488) ([Antonio Andelic](https://github.com/antonio2368)). -* Останавливать стриминг S3(Azure/etc)Queue перед остановкой любых таблиц при завершении работы сервера. [#83530](https://github.com/ClickHouse/ClickHouse/pull/83530) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Включена поддержка типов `Date`/`Date32` как целых чисел во входных форматах `JSON`. [#83597](https://github.com/ClickHouse/ClickHouse/pull/83597) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). -* Сделаны более понятными сообщения об исключениях в ряде ситуаций при загрузке и добавлении проекций. [#83728](https://github.com/ClickHouse/ClickHouse/pull/83728) ([Robert Schulze](https://github.com/rschu1ze)). -* Добавлена конфигурационная опция, позволяющая пропускать проверку целостности бинарного файла `clickhouse-server` по контрольной сумме. Решает [#83637](https://github.com/ClickHouse/ClickHouse/issues/83637). [#83749](https://github.com/ClickHouse/ClickHouse/pull/83749) ([Rafael Roquetto](https://github.com/rafaelroquetto)). - - - - - -#### Исправление ошибки (видимая пользователю неисправность в официальном стабильном релизе) - -* Исправлено некорректное значение по умолчанию параметра `--reconnect` в `clickhouse-benchmark`. Оно было изменено по ошибке в [#79465](https://github.com/ClickHouse/ClickHouse/issues/79465). [#82677](https://github.com/ClickHouse/ClickHouse/pull/82677) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Исправлено непоследовательное форматирование оператора `CREATE DICTIONARY`. Закрывает [#82105](https://github.com/ClickHouse/ClickHouse/issues/82105). [#82829](https://github.com/ClickHouse/ClickHouse/pull/82829) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Исправлено непоследовательное форматирование выражений TTL, содержащих функцию `materialize`. Закрывает [#82828](https://github.com/ClickHouse/ClickHouse/issues/82828). [#82831](https://github.com/ClickHouse/ClickHouse/pull/82831) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Исправлено несогласованное форматирование `EXPLAIN AST` во вложенном запросе, когда он содержит опции вывода, такие как `INTO OUTFILE`. Закрывает [#82826](https://github.com/ClickHouse/ClickHouse/issues/82826). [#82840](https://github.com/ClickHouse/ClickHouse/pull/82840) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Исправлено несогласованное форматирование выражений в скобках с псевдонимами в контексте, когда использование псевдонимов не допускается. Закрывает [#82836](https://github.com/ClickHouse/ClickHouse/issues/82836). Закрывает [#82837](https://github.com/ClickHouse/ClickHouse/issues/82837). [#82867](https://github.com/ClickHouse/ClickHouse/pull/82867) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Используется корректный код ошибки при умножении состояния агрегатной функции на IPv4. Исправляет [#82817](https://github.com/ClickHouse/ClickHouse/issues/82817). [#82818](https://github.com/ClickHouse/ClickHouse/pull/82818) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Исправлена логическая ошибка в файловом кэше: «Having zero bytes but range is not finished». [#81868](https://github.com/ClickHouse/ClickHouse/pull/81868) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Пересчитывайте индекс min-max, когда TTL уменьшает число строк, чтобы обеспечить корректность алгоритмов, которые зависят от него, таких как `minmax_count_projection`. Это исправляет ошибку [#77091](https://github.com/ClickHouse/ClickHouse/issues/77091). [#77166](https://github.com/ClickHouse/ClickHouse/pull/77166) ([Amos Bird](https://github.com/amosbird)). -* Для запросов с комбинацией `ORDER BY ... LIMIT BY ... LIMIT N`, когда ORDER BY выполняется как PartialSorting, счётчик `rows_before_limit_at_least` теперь отражает количество строк, обработанных предложением LIMIT, вместо количества строк, обработанных преобразованием сортировки. [#78999](https://github.com/ClickHouse/ClickHouse/pull/78999) ([Eduard Karacharov](https://github.com/korowa)). -* Исправлен чрезмерный пропуск гранул при фильтрации по token/ngram-индексам с регулярным выражением, которое содержит чередование, первая альтернатива которого не является литералом. [#79373](https://github.com/ClickHouse/ClickHouse/pull/79373) ([Eduard Karacharov](https://github.com/korowa)). -* Исправлена логическая ошибка при использовании оператора `<=>` с хранилищем Join, теперь запрос возвращает корректный код ошибки. [#80165](https://github.com/ClickHouse/ClickHouse/pull/80165) ([Vladimir Cherkasov](https://github.com/vdimir)). -* Исправлено аварийное завершение работы функции `loop` при использовании с семейством функций `remote`. Теперь в `loop(remote(...))` корректно соблюдается предложение LIMIT. [#80299](https://github.com/ClickHouse/ClickHouse/pull/80299) ([Julia Kartseva](https://github.com/jkartseva)). -* Исправлено некорректное поведение функций `to_utc_timestamp` и `from_utc_timestamp` при обработке дат до эпохи Unix (1970-01-01) и после максимальной даты (2106-02-07 06:28:15). Теперь эти функции корректно ограничивают значения началом эпохи Unix и максимальной датой соответственно. [#80498](https://github.com/ClickHouse/ClickHouse/pull/80498) ([Surya Kant Ranjan](https://github.com/iit2009046)). -* Для некоторых запросов, выполняемых с параллельными репликами, оптимизация чтения в заданном порядке могла применяться на инициаторе, но не на удалённых узлах. Это приводило к тому, что координатор параллельных реплик (на инициаторе) и удалённые узлы использовали разные режимы чтения, что является логической ошибкой. [#80652](https://github.com/ClickHouse/ClickHouse/pull/80652) ([Igor Nikonov](https://github.com/devcrafter)). -* Исправлена логическая ошибка при материализации проекции, возникавшая, если тип столбца был изменён на Nullable. [#80741](https://github.com/ClickHouse/ClickHouse/pull/80741) ([Pavel Kruglov](https://github.com/Avogar)). +* В некоторых случаях нам нужно иметь несколько измерений в метриках. Например, считать неудавшиеся слияния или мутации по кодам ошибок, а не вести один общий счётчик. Представлена таблица `system.dimensional_metrics`, которая как раз это и делает и добавляет первую многомерную метрику `failed_merges`. [#83030](https://github.com/ClickHouse/ClickHouse/pull/83030) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). +* Объединить предупреждения о неизвестных настройках в клиенте ClickHouse и логировать их в виде сводки. [#83042](https://github.com/ClickHouse/ClickHouse/pull/83042) ([Bharat Nallan](https://github.com/bharatnc)). +* Клиент ClickHouse теперь указывает локальный порт при возникновении ошибки подключения. [#83050](https://github.com/ClickHouse/ClickHouse/pull/83050) ([Jianfei Hu](https://github.com/incfly)). +* Немного улучшена обработка ошибок в `AsynchronousMetrics`. Если каталог `/sys/block` существует, но недоступен, сервер запустится без мониторинга блочных устройств. Закрывает [#79229](https://github.com/ClickHouse/ClickHouse/issues/79229). [#83115](https://github.com/ClickHouse/ClickHouse/pull/83115) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Завершать работу SystemLogs после обычных таблиц (и перед системными таблицами, вместо того чтобы делать это перед обычными). [#83134](https://github.com/ClickHouse/ClickHouse/pull/83134) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Добавлено логирование процесса завершения работы `S3Queue`. [#83163](https://github.com/ClickHouse/ClickHouse/pull/83163) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Возможность интерпретировать `Time` и `Time64` как `MM:SS`, `M:SS`, `SS` или `S`. [#83299](https://github.com/ClickHouse/ClickHouse/pull/83299) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* Когда `distributed_ddl_output_mode='*_only_active'`, новые или восстановленные реплики с лагом репликации, превышающим `max_replication_lag_to_enqueue`, не ожидаются. Это должно помочь избежать ошибки `DDL task is not finished on some hosts`, когда новая реплика становится активной после завершения инициализации или восстановления, но за время инициализации накопила большой объём журнала репликации. Также реализован запрос `SYSTEM SYNC DATABASE REPLICA STRICT`, который ожидает, пока журнал репликации не станет меньше `max_replication_lag_to_enqueue`. [#83302](https://github.com/ClickHouse/ClickHouse/pull/83302) ([Alexander Tokmakov](https://github.com/tavplubix)). +* Не выводить слишком длинные описания действий с выражениями в сообщениях об исключениях. Закрывает [#83164](https://github.com/ClickHouse/ClickHouse/issues/83164). [#83350](https://github.com/ClickHouse/ClickHouse/pull/83350) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Добавлена возможность анализировать префикс и суффикс части, а также проверять покрытие для неконстантных столбцов. [#83377](https://github.com/ClickHouse/ClickHouse/pull/83377) ([Mikhail Artemenko](https://github.com/Michicosun)). +* Унифицированы имена параметров ODBC и JDBC при использовании именованных коллекций. [#83410](https://github.com/ClickHouse/ClickHouse/pull/83410) ([Andrey Zvonov](https://github.com/zvonand)). +* Когда хранилище останавливается, `getStatus` генерирует исключение `ErrorCodes::ABORTED`. Ранее это приводило к сбою запроса SELECT. Теперь мы перехватываем исключения `ErrorCodes::ABORTED` и намеренно их игнорируем. [#83435](https://github.com/ClickHouse/ClickHouse/pull/83435) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). +* Добавлены метрики использования ресурсов процесса (такие, как `UserTimeMicroseconds`, `SystemTimeMicroseconds`, `RealTimeMicroseconds`) к событиям профиля part_log для записей `MergeParts`. [#83460](https://github.com/ClickHouse/ClickHouse/pull/83460) ([Vladimir Cherkasov](https://github.com/vdimir)). +* В Keeper по умолчанию включены флаги возможностей `create_if_not_exists`, `check_not_exists`, `remove_recursive`, что позволяет использовать новые типы запросов. [#83488](https://github.com/ClickHouse/ClickHouse/pull/83488) ([Antonio Andelic](https://github.com/antonio2368)). +* Останавливает стриминг S3(Azure/etc)Queue перед остановкой любых таблиц при завершении работы сервера. [#83530](https://github.com/ClickHouse/ClickHouse/pull/83530) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Включена поддержка `Date`/`Date32` в виде целых чисел во входных форматах `JSON`. [#83597](https://github.com/ClickHouse/ClickHouse/pull/83597) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). +* Сделали сообщения об исключениях в ряде ситуаций при загрузке и добавлении проекций более понятными. [#83728](https://github.com/ClickHouse/ClickHouse/pull/83728) ([Robert Schulze](https://github.com/rschu1ze)). +* Добавлена конфигурационная опция, позволяющая пропустить проверку целостности бинарного файла по контрольным суммам для `clickhouse-server`. Решает [#83637](https://github.com/ClickHouse/ClickHouse/issues/83637). [#83749](https://github.com/ClickHouse/ClickHouse/pull/83749) ([Rafael Roquetto](https://github.com/rafaelroquetto)). + +#### Исправление ошибки (ошибка, приводящая к заметному пользователю некорректному поведению в официальном стабильном релизе) + +* Исправлено неверное значение по умолчанию для параметра `--reconnect` в `clickhouse-benchmark`. Оно было изменено по ошибке в [#79465](https://github.com/ClickHouse/ClickHouse/issues/79465). [#82677](https://github.com/ClickHouse/ClickHouse/pull/82677) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Исправлено непоследовательное форматирование инструкции `CREATE DICTIONARY`. Закрывает [#82105](https://github.com/ClickHouse/ClickHouse/issues/82105). [#82829](https://github.com/ClickHouse/ClickHouse/pull/82829) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Исправлена непоследовательность форматирования TTL при наличии в нём функции `materialize`. Закрывает [#82828](https://github.com/ClickHouse/ClickHouse/issues/82828). [#82831](https://github.com/ClickHouse/ClickHouse/pull/82831) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Исправлено непоследовательное форматирование `EXPLAIN AST` в подзапросе, если он содержит опции вывода, такие как `INTO OUTFILE`. Закрывает [#82826](https://github.com/ClickHouse/ClickHouse/issues/82826). [#82840](https://github.com/ClickHouse/ClickHouse/pull/82840) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Исправлено непоследовательное форматирование заключённых в скобки выражений с псевдонимами в контексте, где псевдонимы не допускаются. Закрывает [#82836](https://github.com/ClickHouse/ClickHouse/issues/82836). Закрывает [#82837](https://github.com/ClickHouse/ClickHouse/issues/82837). [#82867](https://github.com/ClickHouse/ClickHouse/pull/82867) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Теперь используется корректный код ошибки при умножении состояния агрегатной функции на IPv4. Закрывает [#82817](https://github.com/ClickHouse/ClickHouse/issues/82817). [#82818](https://github.com/ClickHouse/ClickHouse/pull/82818) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Исправлена логическая ошибка в кэше файловой системы: «Having zero bytes but range is not finished». [#81868](https://github.com/ClickHouse/ClickHouse/pull/81868) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Пересчитывать индекс min-max, когда TTL уменьшает число строк, чтобы обеспечить корректность алгоритмов, которые на нём основаны, таких как `minmax_count_projection`. Это исправляет [#77091](https://github.com/ClickHouse/ClickHouse/issues/77091). [#77166](https://github.com/ClickHouse/ClickHouse/pull/77166) ([Amos Bird](https://github.com/amosbird)). +* Для запросов с сочетанием `ORDER BY ... LIMIT BY ... LIMIT N`, когда ORDER BY выполняется как PartialSorting, счётчик `rows_before_limit_at_least` теперь отражает количество строк, обработанных предложением LIMIT, а не количество строк, обработанных преобразованием сортировки. [#78999](https://github.com/ClickHouse/ClickHouse/pull/78999) ([Eduard Karacharov](https://github.com/korowa)). +* Исправлено избыточное пропускание гранул при фильтрации по token/ngram-индексам с использованием регулярного выражения с альтернацией, в котором первая альтернатива не является литералом. [#79373](https://github.com/ClickHouse/ClickHouse/pull/79373) ([Eduard Karacharov](https://github.com/korowa)). +* Исправлена логическая ошибка, связанная с оператором `<=>` и таблицей Join, теперь при выполнении запроса возвращается корректный код ошибки. [#80165](https://github.com/ClickHouse/ClickHouse/pull/80165) ([Vladimir Cherkasov](https://github.com/vdimir)). +* Исправлено аварийное завершение работы функции `loop` при использовании с семейством функций `remote`. Обеспечено соблюдение предложения LIMIT в `loop(remote(...))`. [#80299](https://github.com/ClickHouse/ClickHouse/pull/80299) ([Julia Kartseva](https://github.com/jkartseva)). +* Исправлено некорректное поведение функций `to_utc_timestamp` и `from_utc_timestamp` при обработке дат до начала Unix-эпохи (1970-01-01) и после максимально допустимой даты (2106-02-07 06:28:15). Теперь эти функции корректно приводят значения к началу эпохи и максимально допустимой дате соответственно. [#80498](https://github.com/ClickHouse/ClickHouse/pull/80498) ([Surya Kant Ranjan](https://github.com/iit2009046)). +* Для некоторых запросов, выполняемых с параллельными репликами, оптимизация упорядоченного чтения может применяться на инициаторе, но не может применяться на удалённых узлах. Это приводит к использованию разных режимов чтения координатором параллельных реплик (на инициаторе) и на удалённых узлах, что является логической ошибкой. [#80652](https://github.com/ClickHouse/ClickHouse/pull/80652) ([Igor Nikonov](https://github.com/devcrafter)). +* Исправлена логическая ошибка при материализации проекции, возникавшая при изменении типа столбца на Nullable. [#80741](https://github.com/ClickHouse/ClickHouse/pull/80741) ([Pavel Kruglov](https://github.com/Avogar)). * Исправлен некорректный пересчёт TTL в `TTL GROUP BY` при обновлении TTL. [#81222](https://github.com/ClickHouse/ClickHouse/pull/81222) ([Evgeniy Ulasik](https://github.com/H0uston)). -* Исправлена ошибка в bloom-фильтре Parquet, из-за которой условие вида `WHERE function(key) IN (...)` применялось так, как если бы это было `WHERE key IN (...)`. [#81255](https://github.com/ClickHouse/ClickHouse/pull/81255) ([Michael Kolupaev](https://github.com/al13n321)). -* Исправлено возможное падение в `Aggregator` в случае возникновения исключения во время слияния. [#81450](https://github.com/ClickHouse/ClickHouse/pull/81450) ([Nikita Taranov](https://github.com/nickitat)). -* Исправлен `InterpreterInsertQuery::extendQueryLogElemImpl`, чтобы при необходимости добавлять обратные кавычки вокруг имён баз данных и таблиц (например, когда имена содержат специальные символы, такие как `-`). [#81528](https://github.com/ClickHouse/ClickHouse/pull/81528) ([Ilia Shvyrialkin](https://github.com/Harzu)). -* Исправлено выполнение `IN` при `transform_null_in=1` с `NULL` в левом аргументе и результатом подзапроса, не допускающим `NULL`. [#81584](https://github.com/ClickHouse/ClickHouse/pull/81584) ([Pavel Kruglov](https://github.com/Avogar)). -* Не выполнять проверку экспериментальных и подозрительных типов при вычислении выражений DEFAULT/MATERIALIZE при чтении из существующей таблицы. [#81618](https://github.com/ClickHouse/ClickHouse/pull/81618) ([Pavel Kruglov](https://github.com/Avogar)). -* Исправлена ошибка "Context has expired" при слияниях, когда `dict` используется в выражении TTL. [#81690](https://github.com/ClickHouse/ClickHouse/pull/81690) ([Azat Khuzhin](https://github.com/azat)). +* Исправлена ошибка в блум-фильтре Parquet, из-за которой условие вида `WHERE function(key) IN (...)` ошибочно применялось как `WHERE key IN (...)`. [#81255](https://github.com/ClickHouse/ClickHouse/pull/81255) ([Michael Kolupaev](https://github.com/al13n321)). +* Исправлен возможный сбой в `Aggregator` при возникновении исключения при слиянии. [#81450](https://github.com/ClickHouse/ClickHouse/pull/81450) ([Nikita Taranov](https://github.com/nickitat)). +* Исправлен `InterpreterInsertQuery::extendQueryLogElemImpl`, чтобы при необходимости добавлять обратные кавычки к именам баз данных и таблиц (например, если имена содержат специальные символы, такие как `-`). [#81528](https://github.com/ClickHouse/ClickHouse/pull/81528) ([Ilia Shvyrialkin](https://github.com/Harzu)). +* Исправлено выполнение оператора `IN` при `transform_null_in=1` в случае NULL в левом аргументе и не допускающего NULL результата подзапроса. [#81584](https://github.com/ClickHouse/ClickHouse/pull/81584) ([Pavel Kruglov](https://github.com/Avogar)). +* Не выполнять проверку экспериментальных/подозрительных типов при выполнении выражений DEFAULT/MATERIALIZE при чтении из существующей таблицы. [#81618](https://github.com/ClickHouse/ClickHouse/pull/81618) ([Pavel Kruglov](https://github.com/Avogar)). +* Исправлена ошибка «Context has expired» во время слияний, возникавшая при использовании dict в выражении TTL. [#81690](https://github.com/ClickHouse/ClickHouse/pull/81690) ([Azat Khuzhin](https://github.com/azat)). * Исправлена монотонность функции cast. [#81722](https://github.com/ClickHouse/ClickHouse/pull/81722) ([zoomxi](https://github.com/zoomxi)). -* Исправлена проблема, из-за которой необходимые столбцы не считывались при обработке скалярного коррелированного подзапроса. Исправляет [#81716](https://github.com/ClickHouse/ClickHouse/issues/81716). [#81805](https://github.com/ClickHouse/ClickHouse/pull/81805) ([Dmitry Novik](https://github.com/novikd)). -* В предыдущих версиях сервер возвращал избыточное содержимое для запросов к `/js`. Это закрывает [#61890](https://github.com/ClickHouse/ClickHouse/issues/61890). [#81895](https://github.com/ClickHouse/ClickHouse/pull/81895) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Ранее определения движка таблиц `MongoDB` могли включать компонент пути в параметре `host:port`, который при этом тихо игнорировался. Интеграция с `MongoDB` отказывалась загружать такие таблицы. С этим исправлением *разрешена загрузка таких таблиц при игнорировании компонента пути*, если у движка `MongoDB` указано пять аргументов; в этом случае используется имя базы данных из аргументов. *Примечание:* Исправление не применяется к вновь создаваемым таблицам или запросам с использованием табличной функции `mongo`, а также к источникам словарей и именованным коллекциям. [#81942](https://github.com/ClickHouse/ClickHouse/pull/81942) ([Vladimir Cherkasov](https://github.com/vdimir)). -* Исправлено возможное падение `Aggregator` при возникновении исключения во время слияния. [#82022](https://github.com/ClickHouse/ClickHouse/pull/82022) ([Nikita Taranov](https://github.com/nickitat)). -* Исправлен анализ фильтра, когда в запросе используется только константный столбец‑псевдоним. Исправляет [#79448](https://github.com/ClickHouse/ClickHouse/issues/79448). [#82037](https://github.com/ClickHouse/ClickHouse/pull/82037) ([Dmitry Novik](https://github.com/novikd)). -* Исправлены LOGICAL_ERROR и последующий сбой при использовании одного и того же столбца в TTL для GROUP BY и SET. [#82054](https://github.com/ClickHouse/ClickHouse/pull/82054) ([Pablo Marcos](https://github.com/pamarcos)). -* Исправлена проверка аргументов табличной функции S3 при маскировании секретов, предотвращающая возможную ошибку `LOGICAL_ERROR`; закрыт [#80620](https://github.com/ClickHouse/ClickHouse/issues/80620). [#82056](https://github.com/ClickHouse/ClickHouse/pull/82056) ([Vladimir Cherkasov](https://github.com/vdimir)). -* Устранены гонки данных в Iceberg. [#82088](https://github.com/ClickHouse/ClickHouse/pull/82088) ([Azat Khuzhin](https://github.com/azat)). -* Исправлен метод `DatabaseReplicated::getClusterImpl`. Если первый элемент (или несколько первых элементов) в `hosts` имеет `id == DROPPED_MARK` и нет других элементов для того же шарда, первый элемент в `shards` окажется пустым вектором, что приводит к исключению `std::out_of_range`. [#82093](https://github.com/ClickHouse/ClickHouse/pull/82093) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). -* Исправлена ошибка копирования и вставки в arraySimilarity, запрещено использование весов с типами UInt32 и Int32. Обновлены тесты и документация. [#82103](https://github.com/ClickHouse/ClickHouse/pull/82103) ([Mikhail f. Shiryaev](https://github.com/Felixoid)). -* Исправлена ошибка `Not found column` при выполнении запросов с `arrayJoin` в условии `WHERE` при использовании `IndexSet`. [#82113](https://github.com/ClickHouse/ClickHouse/pull/82113) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). -* Исправлена ошибка в интеграции с каталогом Glue. Теперь ClickHouse может считывать таблицы с вложенными типами данных, в которых некоторые из подколонок имеют тип `Decimal`, например: `map`. Исправляет [#81301](https://github.com/ClickHouse/ClickHouse/issues/81301). [#82114](https://github.com/ClickHouse/ClickHouse/pull/82114) ([alesapin](https://github.com/alesapin)). +* Устранена проблема, из-за которой необходимые столбцы не считывались при обработке скалярного коррелированного подзапроса. Устраняет [#81716](https://github.com/ClickHouse/ClickHouse/issues/81716). [#81805](https://github.com/ClickHouse/ClickHouse/pull/81805) ([Dmitry Novik](https://github.com/novikd)). +* В предыдущих версиях сервер возвращал избыточный контент для запросов к `/js`. Это исправляет [#61890](https://github.com/ClickHouse/ClickHouse/issues/61890). [#81895](https://github.com/ClickHouse/ClickHouse/pull/81895) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Ранее определения движка таблиц `MongoDB` могли включать компонент пути в аргументе `host:port`, который молча игнорировался. Интеграция с MongoDB отказывалась загружать такие таблицы. С этим исправлением *мы допускаем загрузку таких таблиц и игнорируем компонент пути*, если движок `MongoDB` имеет пять аргументов, используя имя базы данных из аргументов. *Примечание:* исправление не применяется к вновь создаваемым таблицам или к запросам с табличной функцией `mongo`, а также к источникам словарей и именованным коллекциям. [#81942](https://github.com/ClickHouse/ClickHouse/pull/81942) ([Vladimir Cherkasov](https://github.com/vdimir)). +* Исправлено возможное аварийное завершение работы `Aggregator` при возникновении исключения во время слияния. [#82022](https://github.com/ClickHouse/ClickHouse/pull/82022) ([Nikita Taranov](https://github.com/nickitat)). +* Исправлен анализ фильтра, когда в запросе используется только столбец-псевдоним с константным значением. Исправляет [#79448](https://github.com/ClickHouse/ClickHouse/issues/79448). [#82037](https://github.com/ClickHouse/ClickHouse/pull/82037) ([Dmitry Novik](https://github.com/novikd)). +* Исправлена ошибка LOGICAL_ERROR и последующее падение при использовании одного и того же столбца в TTL одновременно в GROUP BY и SET. [#82054](https://github.com/ClickHouse/ClickHouse/pull/82054) ([Pablo Marcos](https://github.com/pamarcos)). +* Исправлена проверка аргументов табличной функции S3 при маскировке секретов, что предотвращает возможную ошибку `LOGICAL_ERROR`; закрыт [#80620](https://github.com/ClickHouse/ClickHouse/issues/80620). [#82056](https://github.com/ClickHouse/ClickHouse/pull/82056) ([Vladimir Cherkasov](https://github.com/vdimir)). +* Исправлены гонки данных в Iceberg. [#82088](https://github.com/ClickHouse/ClickHouse/pull/82088) ([Azat Khuzhin](https://github.com/azat)). +* Исправлен метод `DatabaseReplicated::getClusterImpl`. Если первый элемент (или несколько первых элементов) `hosts` имеет `id == DROPPED_MARK` и нет других элементов для того же шарда, первый элемент `shards` будет пустым вектором, что приведёт к `std::out_of_range`. [#82093](https://github.com/ClickHouse/ClickHouse/pull/82093) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). +* Исправлена ошибка копипаста в `arraySimilarity`, запрещено использование весов типов `UInt32` и `Int32`. Обновлены тесты и документация. [#82103](https://github.com/ClickHouse/ClickHouse/pull/82103) ([Mikhail f. Shiryaev](https://github.com/Felixoid)). +* Исправлена ошибка `Not found column` в запросах с `arrayJoin` в условии `WHERE` и с `IndexSet`. [#82113](https://github.com/ClickHouse/ClickHouse/pull/82113) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). +* Исправлена ошибка в интеграции с Glue Catalog. Теперь ClickHouse может читать таблицы с вложенными типами данных, где часть подстолбцов содержит десятичные числа (Decimal), например: `map`. Исправляет [#81301](https://github.com/ClickHouse/ClickHouse/issues/81301). [#82114](https://github.com/ClickHouse/ClickHouse/pull/82114) ([alesapin](https://github.com/alesapin)). * Исправлено ухудшение производительности в SummingMergeTree, которое появилось в версии 25.5 в [https://github.com/ClickHouse/ClickHouse/pull/79051](https://github.com/ClickHouse/ClickHouse/pull/79051). [#82130](https://github.com/ClickHouse/ClickHouse/pull/82130) ([Pavel Kruglov](https://github.com/Avogar)). -* При передаче настроек через URI берётся последнее значение. [#82137](https://github.com/ClickHouse/ClickHouse/pull/82137) ([Sema Checherinda](https://github.com/CheSema)). +* При передаче настроек по URI используется последнее указанное значение. [#82137](https://github.com/ClickHouse/ClickHouse/pull/82137) ([Sema Checherinda](https://github.com/CheSema)). * Исправлена ошибка «Context has expired» в Iceberg. [#82146](https://github.com/ClickHouse/ClickHouse/pull/82146) ([Azat Khuzhin](https://github.com/azat)). -* Исправлена возможная взаимоблокировка для удалённых запросов, когда сервер испытывает дефицит памяти. [#82160](https://github.com/ClickHouse/ClickHouse/pull/82160) ([Kirill](https://github.com/kirillgarbar)). -* Исправлено переполнение в функциях `numericIndexedVectorPointwiseAdd`, `numericIndexedVectorPointwiseSubtract`, `numericIndexedVectorPointwiseMultiply`, `numericIndexedVectorPointwiseDivide`, которое происходило при применении к большим числам. [#82165](https://github.com/ClickHouse/ClickHouse/pull/82165) ([Raufs Dunamalijevs](https://github.com/rienath)). +* Исправлена возможная взаимоблокировка удалённых запросов при нехватке памяти на сервере. [#82160](https://github.com/ClickHouse/ClickHouse/pull/82160) ([Kirill](https://github.com/kirillgarbar)). +* Исправлено переполнение в функциях `numericIndexedVectorPointwiseAdd`, `numericIndexedVectorPointwiseSubtract`, `numericIndexedVectorPointwiseMultiply`, `numericIndexedVectorPointwiseDivide`, возникавшее при их применении к большим числам. [#82165](https://github.com/ClickHouse/ClickHouse/pull/82165) ([Raufs Dunamalijevs](https://github.com/rienath)). * Исправлена ошибка в зависимостях таблиц, из-за которой материализованные представления пропускали операции INSERT. [#82222](https://github.com/ClickHouse/ClickHouse/pull/82222) ([Nikolay Degterinsky](https://github.com/evillique)). -* Исправлена возможная гонка данных между потоком подсказок и основным клиентским потоком. [#82233](https://github.com/ClickHouse/ClickHouse/pull/82233) ([Azat Khuzhin](https://github.com/azat)). +* Исправлена потенциальная гонка данных между потоком подсказок и основным клиентским потоком. [#82233](https://github.com/ClickHouse/ClickHouse/pull/82233) ([Azat Khuzhin](https://github.com/azat)). * Теперь ClickHouse может читать таблицы Iceberg из каталога Glue после изменений схемы. Исправлена проблема [#81272](https://github.com/ClickHouse/ClickHouse/issues/81272). [#82301](https://github.com/ClickHouse/ClickHouse/pull/82301) ([alesapin](https://github.com/alesapin)). * Исправлена проверка настроек асинхронных метрик `asynchronous_metrics_update_period_s` и `asynchronous_heavy_metrics_update_period_s`. [#82310](https://github.com/ClickHouse/ClickHouse/pull/82310) ([Bharat Nallan](https://github.com/bharatnc)). -* Исправлена логическая ошибка при разрешении сопоставления в запросе с несколькими операторами JOIN, закрыт [#81969](https://github.com/ClickHouse/ClickHouse/issues/81969). [#82421](https://github.com/ClickHouse/ClickHouse/pull/82421) ([Vladimir Cherkasov](https://github.com/vdimir)). -* Добавлен срок действия токена AWS ECS, чтобы его можно было обновлять. [#82422](https://github.com/ClickHouse/ClickHouse/pull/82422) ([Konstantин Богданов](https://github.com/thevar1able)). +* Исправлена логическая ошибка при определении сопоставителя в запросе с несколькими операторами JOIN, закрыт [#81969](https://github.com/ClickHouse/ClickHouse/issues/81969). [#82421](https://github.com/ClickHouse/ClickHouse/pull/82421) ([Vladimir Cherkasov](https://github.com/vdimir)). +* Добавлен срок действия токена AWS ECS, чтобы его можно было обновлять. [#82422](https://github.com/ClickHouse/ClickHouse/pull/82422) ([Konstantin Bogdanov](https://github.com/thevar1able)). * Исправлена ошибка обработки аргументов `NULL` в функции `CASE`. [#82436](https://github.com/ClickHouse/ClickHouse/pull/82436) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* Исправлены гонки данных в клиенте (за счёт отказа от использования глобального контекста) и переопределения `session_timezone` (ранее если `session_timezone` был задан, например, в `users.xml`/опциях клиента непустым значением, а в контексте запроса — пустым, то использовалось значение из `users.xml`, что неверно; теперь контекст запроса всегда имеет приоритет над глобальным контекстом). [#82444](https://github.com/ClickHouse/ClickHouse/pull/82444) ([Azat Khuzhin](https://github.com/azat)). -* Исправлено отключение выравнивания по границе для кэшированного буфера в движках внешних таблиц. Оно было сломано в [https://github.com/ClickHouse/ClickHouse/pull/81868](https://github.com/ClickHouse/ClickHouse/pull/81868). [#82493](https://github.com/ClickHouse/ClickHouse/pull/82493) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Исправлен сбой, возникавший при соединении key-value хранилища с ключом с приведённым типом. [#82497](https://github.com/ClickHouse/ClickHouse/pull/82497) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). -* Исправлена проблема сокрытия значений именованных коллекций в logs/query_log. Закрывает [#82405](https://github.com/ClickHouse/ClickHouse/issues/82405). [#82510](https://github.com/ClickHouse/ClickHouse/pull/82510) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Исправлено возможное аварийное завершение при логировании во время завершения сессии, так как `user_id` иногда может быть пустым. [#82513](https://github.com/ClickHouse/ClickHouse/pull/82513) ([Bharat Nallan](https://github.com/bharatnc)). -* Исправляет случаи, когда разбор Time мог приводить к проблемам MSan. Исправляет: [#82477](https://github.com/ClickHouse/ClickHouse/issues/82477). [#82514](https://github.com/ClickHouse/ClickHouse/pull/82514) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* Запрещена установка параметра `threadpool_writer_pool_size` в значение 0, чтобы избежать зависания операций сервера. [#82532](https://github.com/ClickHouse/ClickHouse/pull/82532) ([Bharat Nallan](https://github.com/bharatnc)). -* Исправлена ошибка `LOGICAL_ERROR` при анализе выражения политики строк для коррелируемых столбцов. [#82618](https://github.com/ClickHouse/ClickHouse/pull/82618) ([Dmitry Novik](https://github.com/novikd)). -* Исправлена некорректная работа с родительскими метаданными в табличной функции `mergeTreeProjection` при `enable_shared_storage_snapshot_in_query = 1`. Относится к [#82634](https://github.com/ClickHouse/ClickHouse/issues/82634). [#82638](https://github.com/ClickHouse/ClickHouse/pull/82638) ([Amos Bird](https://github.com/amosbird)). +* Исправлены гонки данных в клиенте (путём отказа от использования глобального контекста) и переопределения `session_timezone` (ранее, если `session_timezone` был установлен, например, в `users.xml`/опциях клиента в непустое значение, а в контексте запроса — в пустое, то использовалось значение из `users.xml`, что неверно; теперь контекст запроса всегда имеет приоритет над глобальным контекстом). [#82444](https://github.com/ClickHouse/ClickHouse/pull/82444) ([Azat Khuzhin](https://github.com/azat)). +* Исправлена работа отключения выравнивания по границе для кэшированного буфера во внешних движках таблиц. Оно было сломано в [https://github.com/ClickHouse/ClickHouse/pull/81868](https://github.com/ClickHouse/ClickHouse/pull/81868). [#82493](https://github.com/ClickHouse/ClickHouse/pull/82493) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Исправлено падение при соединении key-value-хранилища с ключом с приведённым типом. [#82497](https://github.com/ClickHouse/ClickHouse/pull/82497) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +* Исправлена ошибка сокрытия значений именованных коллекций в логах и таблице query_log. Закрывает [#82405](https://github.com/ClickHouse/ClickHouse/issues/82405). [#82510](https://github.com/ClickHouse/ClickHouse/pull/82510) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Исправлено возможное падение при логировании при завершении сессии, так как `user_id` иногда мог быть пустым. [#82513](https://github.com/ClickHouse/ClickHouse/pull/82513) ([Bharat Nallan](https://github.com/bharatnc)). +* Исправлены случаи, когда разбор Time мог приводить к проблемам msan. Это исправляет: [#82477](https://github.com/ClickHouse/ClickHouse/issues/82477). [#82514](https://github.com/ClickHouse/ClickHouse/pull/82514) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* Запрещено устанавливать `threadpool_writer_pool_size` в ноль, чтобы операции сервера не зависали. [#82532](https://github.com/ClickHouse/ClickHouse/pull/82532) ([Bharat Nallan](https://github.com/bharatnc)). +* Исправлен `LOGICAL_ERROR`, возникавший при анализе выражения политики строк для коррелированных столбцов. [#82618](https://github.com/ClickHouse/ClickHouse/pull/82618) ([Dmitry Novik](https://github.com/novikd)). +* Исправлено некорректное использование метаданных родительской таблицы в табличной функции `mergeTreeProjection`, когда `enable_shared_storage_snapshot_in_query = 1`. Это исправление для [#82634](https://github.com/ClickHouse/ClickHouse/issues/82634). [#82638](https://github.com/ClickHouse/ClickHouse/pull/82638) ([Amos Bird](https://github.com/amosbird)). * Функции `trim{Left,Right,Both}` теперь поддерживают входные строки типа «FixedString(N)». Например, `SELECT trimBoth(toFixedString('abc', 3), 'ac')` теперь работает. [#82691](https://github.com/ClickHouse/ClickHouse/pull/82691) ([Robert Schulze](https://github.com/rschu1ze)). -* В AzureBlobStorage для нативного копирования мы сравниваем методы аутентификации, и если при этом возникает исключение, мы обновили код, чтобы выполнять резервное переключение на режим чтения и копирования (т.е. ненативное копирование). [#82693](https://github.com/ClickHouse/ClickHouse/pull/82693) ([Smita Kulkarni](https://github.com/SmitaRKulkarni)). -* Исправлена десериализация `groupArraySample`/`groupArrayLast` в случае пустых значений (при пустом вводе десериализация могла пропустить часть бинарных данных, что могло приводить к повреждению данных при чтении и ошибке UNKNOWN_PACKET_FROM_SERVER в протоколе TCP). Это не затрагивает числовые типы и типы даты/времени. [#82763](https://github.com/ClickHouse/ClickHouse/pull/82763) ([Pedro Ferreira](https://github.com/PedroTadim)). -* Исправлена проблема с созданием бэкапа пустой таблицы `Memory`, из‑за которой восстановление из бэкапа завершалось с ошибкой `BACKUP_ENTRY_NOT_FOUND`. [#82791](https://github.com/ClickHouse/ClickHouse/pull/82791) ([Julia Kartseva](https://github.com/jkartseva)). -* Исправлена безопасность при обработке исключений в переписывании union/intersect/except_default_mode. Закрывает [#82664](https://github.com/ClickHouse/ClickHouse/issues/82664). [#82820](https://github.com/ClickHouse/ClickHouse/pull/82820) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Отслеживайте число заданий по загрузке асинхронных таблиц. Если есть запущенные задания, не обновляйте `tail_ptr` в `TransactionLog::removeOldEntries`. [#82824](https://github.com/ClickHouse/ClickHouse/pull/82824) ([Tuan Pham Anh](https://github.com/tuanpach)). +* В AzureBlobStorage для нативного копирования мы сравниваем методы аутентификации, и если при этом происходит исключение, теперь выполняется откат к чтению и копированию (т. е. не нативному копированию). [#82693](https://github.com/ClickHouse/ClickHouse/pull/82693) ([Smita Kulkarni](https://github.com/SmitaRKulkarni)). +* Исправлена десериализация `groupArraySample`/`groupArrayLast` в случае пустых элементов (при десериализации могла пропускаться часть бинарных данных, если входные данные были пустыми, что могло приводить к повреждению данных при чтении и ошибке UNKNOWN_PACKET_FROM_SERVER в протоколе TCP). Это не затрагивает числовые типы и типы даты/времени. [#82763](https://github.com/ClickHouse/ClickHouse/pull/82763) ([Pedro Ferreira](https://github.com/PedroTadim)). +* Исправлена проблема с резервным копированием пустой таблицы `Memory`, из-за которой восстановление из резервной копии завершалось ошибкой `BACKUP_ENTRY_NOT_FOUND`. [#82791](https://github.com/ClickHouse/ClickHouse/pull/82791) ([Julia Kartseva](https://github.com/jkartseva)). +* Исправлена безопасность работы с исключениями при переписывании union/intersect/except_default_mode. Закрывает [#82664](https://github.com/ClickHouse/ClickHouse/issues/82664). [#82820](https://github.com/ClickHouse/ClickHouse/pull/82820) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Отслеживайте число заданий асинхронной загрузки таблиц. Если какие-либо задания выполняются, не обновляйте `tail_ptr` в `TransactionLog::removeOldEntries`. [#82824](https://github.com/ClickHouse/ClickHouse/pull/82824) ([Tuan Pham Anh](https://github.com/tuanpach)). * Исправлены гонки данных в Iceberg. [#82841](https://github.com/ClickHouse/ClickHouse/pull/82841) ([Azat Khuzhin](https://github.com/azat)). -* Настройка оптимизации `use_skip_indexes_if_final_exact_mode` (введённой в 25.6) могла приводить к тому, что не выбирался подходящий диапазон-кандидат в зависимости от настроек движка таблицы `MergeTree` и распределения данных. Теперь проблема устранена. [#82879](https://github.com/ClickHouse/ClickHouse/pull/82879) ([Shankar Iyer](https://github.com/shankar-iyer)). -* Теперь задаётся соль для данных аутентификации при разборе AST с типом SCRAM_SHA256_PASSWORD. [#82888](https://github.com/ClickHouse/ClickHouse/pull/82888) ([Tuan Pham Anh](https://github.com/tuanpach)). -* При использовании реализации Database без кэширования метаданные соответствующей таблицы удаляются после возврата столбцов и аннулирования ссылки. [#82939](https://github.com/ClickHouse/ClickHouse/pull/82939) ([buyval01](https://github.com/buyval01)). -* Исправлена модификация фильтра в запросах с выражением JOIN к таблице с движком `Merge`. Исправлена ошибка [#82092](https://github.com/ClickHouse/ClickHouse/issues/82092). [#82950](https://github.com/ClickHouse/ClickHouse/pull/82950) ([Dmitry Novik](https://github.com/novikd)). -* Исправлена ошибка LOGICAL_ERROR в QueryMetricLog: mutex не может быть NULL. [#82979](https://github.com/ClickHouse/ClickHouse/pull/82979) ([Pablo Marcos](https://github.com/pamarcos)). -* Исправлен некорректный вывод функции `formatDateTime` при использовании спецификатора формата `%f` совместно со спецификаторами формата переменной длины (например, `%M`). [#83020](https://github.com/ClickHouse/ClickHouse/pull/83020) ([Robert Schulze](https://github.com/rschu1ze)). -* Исправлено ухудшение производительности при включённом анализаторе, когда вторичные запросы всегда читают все столбцы из представлений (VIEW). Исправляет [#81718](https://github.com/ClickHouse/ClickHouse/issues/81718). [#83036](https://github.com/ClickHouse/ClickHouse/pull/83036) ([Dmitry Novik](https://github.com/novikd)). -* Исправлено вводящее в заблуждение сообщение об ошибке при восстановлении резервной копии на диске, доступном только для чтения. [#83051](https://github.com/ClickHouse/ClickHouse/pull/83051) ([Julia Kartseva](https://github.com/jkartseva)). -* Не проверять наличие циклических зависимостей при создании таблиц без зависимостей. Это исправляет деградацию производительности в сценариях с созданием тысяч таблиц, которая появилась в результате [https://github.com/ClickHouse/ClickHouse/pull/65405](https://github.com/ClickHouse/ClickHouse/pull/65405). [#83077](https://github.com/ClickHouse/ClickHouse/pull/83077) ([Pavel Kruglov](https://github.com/Avogar)). -* Исправляет ошибку с неявным чтением отрицательных значений Time в таблицу и устраняет неоднозначности в документации. [#83091](https://github.com/ClickHouse/ClickHouse/pull/83091) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* Включение оптимизации `use_skip_indexes_if_final_exact_mode` (введённой в 25.6) могло приводить к тому, что в зависимости от настроек движка `MergeTree` и распределения данных выбирался некорректный диапазон-кандидат. Теперь это исправлено. [#82879](https://github.com/ClickHouse/ClickHouse/pull/82879) ([Shankar Iyer](https://github.com/shankar-iyer)). +* Устанавливать соль для данных аутентификации при разборе AST с типом SCRAM_SHA256_PASSWORD. [#82888](https://github.com/ClickHouse/ClickHouse/pull/82888) ([Tuan Pham Anh](https://github.com/tuanpach)). +* При использовании некеширующей реализации Database метаданные соответствующей таблицы удаляются после возврата столбцов и утраты действительности ссылки. [#82939](https://github.com/ClickHouse/ClickHouse/pull/82939) ([buyval01](https://github.com/buyval01)). +* Исправлена модификация фильтра в запросах с выражением JOIN к таблице с хранилищем `Merge`. Исправляет [#82092](https://github.com/ClickHouse/ClickHouse/issues/82092). [#82950](https://github.com/ClickHouse/ClickHouse/pull/82950) ([Dmitry Novik](https://github.com/novikd)). +* Исправлена ошибка LOGICAL_ERROR в QueryMetricLog: Mutex не может быть NULL. [#82979](https://github.com/ClickHouse/ClickHouse/pull/82979) ([Pablo Marcos](https://github.com/pamarcos)). +* Исправлен некорректный вывод функции `formatDateTime` при использовании спецификатора формата `%f` вместе со спецификаторами переменного размера (например, `%M`). [#83020](https://github.com/ClickHouse/ClickHouse/pull/83020) ([Robert Schulze](https://github.com/rschu1ze)). +* Исправлена проблема снижения производительности при включённом анализаторе, когда вторичные запросы всегда читали все столбцы из представлений (VIEW). Исправляет [#81718](https://github.com/ClickHouse/ClickHouse/issues/81718). [#83036](https://github.com/ClickHouse/ClickHouse/pull/83036) ([Dmitry Novik](https://github.com/novikd)). +* Исправлено некорректное сообщение об ошибке при восстановлении резервной копии на диск с доступом только для чтения. [#83051](https://github.com/ClickHouse/ClickHouse/pull/83051) ([Julia Kartseva](https://github.com/jkartseva)). +* Не выполнять проверку циклических зависимостей при создании таблиц без зависимостей. Это исправляет деградацию производительности в сценариях создания тысяч таблиц, которая появилась в [https://github.com/ClickHouse/ClickHouse/pull/65405](https://github.com/ClickHouse/ClickHouse/pull/65405). [#83077](https://github.com/ClickHouse/ClickHouse/pull/83077) ([Pavel Kruglov](https://github.com/Avogar)). +* Исправляет проблему с неявной интерпретацией отрицательных значений типа Time при чтении данных в таблицу и делает документацию более понятной. [#83091](https://github.com/ClickHouse/ClickHouse/pull/83091) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). * Не используйте несвязанные части общего словаря в функции `lowCardinalityKeys`. [#83118](https://github.com/ClickHouse/ClickHouse/pull/83118) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Исправлена регрессия при использовании подстолбцов в материализованных представлениях. Это исправляет: [#82784](https://github.com/ClickHouse/ClickHouse/issues/82784). [#83221](https://github.com/ClickHouse/ClickHouse/pull/83221) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). -* Исправлен сбой в клиенте из-за соединения, оставшегося в состоянии отключения после неудачного INSERT. [#83253](https://github.com/ClickHouse/ClickHouse/pull/83253) ([Azat Khuzhin](https://github.com/azat)). -* Исправлен сбой при вычислении размера блока, содержащего пустые столбцы. [#83271](https://github.com/ClickHouse/ClickHouse/pull/83271) ([Raúl Marín](https://github.com/Algunenano)). -* Исправлено возможное падение типа Variant при использовании UNION. [#83295](https://github.com/ClickHouse/ClickHouse/pull/83295) ([Pavel Kruglov](https://github.com/Avogar)). +* Исправлена регрессия при использовании подстолбцов в материализованных представлениях. Исправлены: [#82784](https://github.com/ClickHouse/ClickHouse/issues/82784). [#83221](https://github.com/ClickHouse/ClickHouse/pull/83221) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). +* Исправлено падение клиента из-за соединения, оставленного в разорванном состоянии после ошибочного INSERT. [#83253](https://github.com/ClickHouse/ClickHouse/pull/83253) ([Azat Khuzhin](https://github.com/azat)). +* Исправлена ошибка, приводившая к падению при вычислении размера блока с пустыми столбцами. [#83271](https://github.com/ClickHouse/ClickHouse/pull/83271) ([Raúl Marín](https://github.com/Algunenano)). +* Исправлена возможная ошибка, приводящая к аварийному завершению работы при использовании типа Variant в UNION. [#83295](https://github.com/ClickHouse/ClickHouse/pull/83295) ([Pavel Kruglov](https://github.com/Avogar)). * Исправлена ошибка LOGICAL_ERROR в clickhouse-local при выполнении неподдерживаемых запросов SYSTEM. [#83333](https://github.com/ClickHouse/ClickHouse/pull/83333) ([Surya Kant Ranjan](https://github.com/iit2009046)). -* Исправлен параметр `no_sign_request` для клиента S3. Его можно использовать, чтобы явно отключить подпись запросов к S3. Его также можно задать для конкретных endpoint’ов с помощью настроек, основанных на endpoint’ах. [#83379](https://github.com/ClickHouse/ClickHouse/pull/83379) ([Antonio Andelic](https://github.com/antonio2368)). -* Исправлена ошибка, приводившая к аварийному завершению запроса с настройкой 'max_threads=1' при выполнении под нагрузкой и включённом планировании по CPU. [#83387](https://github.com/ClickHouse/ClickHouse/pull/83387) ([Fan Ziqi](https://github.com/f2quantum)). -* Исправлена ошибка, приводившая к возникновению исключения `TOO_DEEP_SUBQUERIES`, когда определение CTE ссылалось на другое табличное выражение с тем же именем. [#83413](https://github.com/ClickHouse/ClickHouse/pull/83413) ([Dmitry Novik](https://github.com/novikd)). -* Исправлено некорректное поведение, при котором выполнение `REVOKE S3 ON system.*` приводило к отзыву S3‑разрешений для `*.*`. Это исправляет [#83417](https://github.com/ClickHouse/ClickHouse/issues/83417). [#83420](https://github.com/ClickHouse/ClickHouse/pull/83420) ([pufit](https://github.com/pufit)). -* Не используйте общие async_read_counters для разных запросов. [#83423](https://github.com/ClickHouse/ClickHouse/pull/83423) ([Azat Khuzhin](https://github.com/azat)). -* Отключать параллельные реплики, если подзапрос содержит FINAL. [#83455](https://github.com/ClickHouse/ClickHouse/pull/83455) ([zoomxi](https://github.com/zoomxi)). -* Устранено незначительное целочисленное переполнение при конфигурировании настройки `role_cache_expiration_time_seconds` (issue [#83374](https://github.com/ClickHouse/ClickHouse/issues/83374)). [#83461](https://github.com/ClickHouse/ClickHouse/pull/83461) ([wushap](https://github.com/wushap)). -* Исправлена ошибка, появившаяся в [https://github.com/ClickHouse/ClickHouse/pull/79963](https://github.com/ClickHouse/ClickHouse/pull/79963). При вставке в MV с определяющим пользователем (definer) проверка прав должна выполняться на основе грантов этого пользователя. Это исправляет [#79951](https://github.com/ClickHouse/ClickHouse/issues/79951). [#83502](https://github.com/ClickHouse/ClickHouse/pull/83502) ([pufit](https://github.com/pufit)). -* Отключено отсечение файлов на основе границ для элементов массивов Iceberg и значений карт Iceberg, включая все их вложенные подполя. [#83520](https://github.com/ClickHouse/ClickHouse/pull/83520) ([Daniil Ivanik](https://github.com/divanik)). -* Исправлены возможные ошибки «file cache not initialized» при использовании файлового кэша в качестве временного хранилища данных. [#83539](https://github.com/ClickHouse/ClickHouse/pull/83539) ([Bharat Nallan](https://github.com/bharatnc)). -* Исправление в Keeper: корректное обновление общего числа наблюдений при удалении эфемерных узлов при закрытии сессии. [#83583](https://github.com/ClickHouse/ClickHouse/pull/83583) ([Antonio Andelic](https://github.com/antonio2368)). -* Исправлена некорректная работа с памятью, связанная с `max_untracked_memory`. [#83607](https://github.com/ClickHouse/ClickHouse/pull/83607) ([Azat Khuzhin](https://github.com/azat)). -* INSERT SELECT с UNION ALL мог привести к разыменованию нулевого указателя в редком граничном случае. Это закрывает [#83618](https://github.com/ClickHouse/ClickHouse/issues/83618). [#83643](https://github.com/ClickHouse/ClickHouse/pull/83643) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Запрещено использование нулевого значения для max_insert_block_size, так как оно может приводить к логической ошибке. [#83688](https://github.com/ClickHouse/ClickHouse/pull/83688) ([Bharat Nallan](https://github.com/bharatnc)). -* Исправлен бесконечный цикл в estimateCompressionRatio() при block_size_bytes=0. [#83704](https://github.com/ClickHouse/ClickHouse/pull/83704) ([Azat Khuzhin](https://github.com/azat)). -* Исправлены метрики `IndexUncompressedCacheBytes`/`IndexUncompressedCacheCells`/`IndexMarkCacheBytes`/`IndexMarkCacheFiles` (ранее они учитывались в метрике без префикса `Cache`). [#83730](https://github.com/ClickHouse/ClickHouse/pull/83730) ([Azat Khuzhin](https://github.com/azat)). -* Исправлено возможное аварийное завершение процесса (из-за ожидания завершения потоков задачи) и, вероятно, зависания (в модульных тестах) при остановке `BackgroundSchedulePool`. [#83769](https://github.com/ClickHouse/ClickHouse/pull/83769) ([Azat Khuzhin](https://github.com/azat)). -* Добавлена настройка обратной совместимости, позволяющая новому анализатору ссылаться на внешний псевдоним в предложении WITH в случае конфликта имён. Исправляет [#82700](https://github.com/ClickHouse/ClickHouse/issues/82700). [#83797](https://github.com/ClickHouse/ClickHouse/pull/83797) ([Dmitry Novik](https://github.com/novikd)). -* Исправлена взаимоблокировка при остановке из-за рекурсивной блокировки контекста во время очистки library bridge. [#83824](https://github.com/ClickHouse/ClickHouse/pull/83824) ([Azat Khuzhin](https://github.com/azat)). - - +* Исправлен параметр `no_sign_request` для клиента S3. Его можно использовать для явного отключения подписи запросов к S3. Его также можно задавать для конкретных endpoint-ов с помощью настроек на основе endpoint-ов. [#83379](https://github.com/ClickHouse/ClickHouse/pull/83379) ([Antonio Andelic](https://github.com/antonio2368)). +* Исправляет возможное аварийное завершение сервера при выполнении запроса с настройкой 'max_threads=1' под нагрузкой при включённом планировщике ЦП. [#83387](https://github.com/ClickHouse/ClickHouse/pull/83387) ([Fan Ziqi](https://github.com/f2quantum)). +* Исправлено исключение `TOO_DEEP_SUBQUERIES`, возникающее, когда определение CTE ссылается на другое табличное выражение с тем же именем. [#83413](https://github.com/ClickHouse/ClickHouse/pull/83413) ([Dmitry Novik](https://github.com/novikd)). +* Исправлено некорректное поведение, при котором выполнение `REVOKE S3 ON system.*` приводило к отзыву прав S3 для `*.*`. Это исправляет [#83417](https://github.com/ClickHouse/ClickHouse/issues/83417). [#83420](https://github.com/ClickHouse/ClickHouse/pull/83420) ([pufit](https://github.com/pufit)). +* Счётчики async_read_counters больше не разделяются между запросами. [#83423](https://github.com/ClickHouse/ClickHouse/pull/83423) ([Azat Khuzhin](https://github.com/azat)). +* Отключены параллельные реплики, если подзапрос содержит FINAL. [#83455](https://github.com/ClickHouse/ClickHouse/pull/83455) ([zoomxi](https://github.com/zoomxi)). +* Исправлено незначительное переполнение целого числа в конфигурации параметра `role_cache_expiration_time_seconds` (issue [#83374](https://github.com/ClickHouse/ClickHouse/issues/83374)). [#83461](https://github.com/ClickHouse/ClickHouse/pull/83461) ([wushap](https://github.com/wushap)). +* Исправлена ошибка, появившаяся в [https://github.com/ClickHouse/ClickHouse/pull/79963](https://github.com/ClickHouse/ClickHouse/pull/79963). При вставке в MV с определяющим пользователем проверка прав должна выполняться с использованием грантов этого пользователя. Это исправляет [#79951](https://github.com/ClickHouse/ClickHouse/issues/79951). [#83502](https://github.com/ClickHouse/ClickHouse/pull/83502) ([pufit](https://github.com/pufit)). +* Отключена обрезка файлов по границам (bounds-based file pruning) для элементов массивов Iceberg и значений карт Iceberg, включая все их вложенные подполя. [#83520](https://github.com/ClickHouse/ClickHouse/pull/83520) ([Daniil Ivanik](https://github.com/divanik)). +* Исправлены возможные ошибки `file cache not initialized`, возникающие при использовании файлового кеша в качестве временного хранилища данных. [#83539](https://github.com/ClickHouse/ClickHouse/pull/83539) ([Bharat Nallan](https://github.com/bharatnc)). +* Исправление в Keeper: корректно обновлять общее количество наблюдений при закрытии сессии и удалении эфемерных узлов. [#83583](https://github.com/ClickHouse/ClickHouse/pull/83583) ([Antonio Andelic](https://github.com/antonio2368)). +* Исправлен некорректный учёт памяти, связанный с max_untracked_memory. [#83607](https://github.com/ClickHouse/ClickHouse/pull/83607) ([Azat Khuzhin](https://github.com/azat)). +* INSERT SELECT с UNION ALL в редком пограничном случае мог приводить к разыменованию нулевого указателя. Это исправление закрывает [#83618](https://github.com/ClickHouse/ClickHouse/issues/83618). [#83643](https://github.com/ClickHouse/ClickHouse/pull/83643) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Запретить использование нулевого значения для max_insert_block_size, так как оно может вызвать логическую ошибку. [#83688](https://github.com/ClickHouse/ClickHouse/pull/83688) ([Bharat Nallan](https://github.com/bharatnc)). +* Исправлен бесконечный цикл в estimateCompressionRatio() при значении block_size_bytes=0. [#83704](https://github.com/ClickHouse/ClickHouse/pull/83704) ([Azat Khuzhin](https://github.com/azat)). +* Исправлены метрики `IndexUncompressedCacheBytes`/`IndexUncompressedCacheCells`/`IndexMarkCacheBytes`/`IndexMarkCacheFiles` (ранее они включались в метрику без префикса `Cache`). [#83730](https://github.com/ClickHouse/ClickHouse/pull/83730) ([Azat Khuzhin](https://github.com/azat)). +* Исправлено возможное аварийное завершение (из-за присоединения потоков задачи) и, возможно, зависания (в модульных тестах) во время завершения работы `BackgroundSchedulePool`. [#83769](https://github.com/ClickHouse/ClickHouse/pull/83769) ([Azat Khuzhin](https://github.com/azat)). +* Добавлена настройка обратной совместимости, чтобы новый анализатор мог ссылаться на внешний алиас в предложении WITH при конфликте имён. Исправляет [#82700](https://github.com/ClickHouse/ClickHouse/issues/82700). [#83797](https://github.com/ClickHouse/ClickHouse/pull/83797) ([Dmitry Novik](https://github.com/novikd)). +* Исправлена взаимоблокировка при завершении работы из-за рекурсивной блокировки контекста при очистке компонента library bridge. [#83824](https://github.com/ClickHouse/ClickHouse/pull/83824) ([Azat Khuzhin](https://github.com/azat)). #### Улучшения сборки/тестирования/упаковки -* Создана минимальная C-библиотека (10 КБ) для лексера ClickHouse. Это требуется для [#80977](https://github.com/ClickHouse/ClickHouse/issues/80977). [#81347](https://github.com/ClickHouse/ClickHouse/pull/81347) ([Alexey Milovidov](https://github.com/alexey-milovidov)). Добавлен тест для автономного лексера, добавлен тестовый тег `fasttest-only`. [#82472](https://github.com/ClickHouse/ClickHouse/pull/82472) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* Добавлена проверка входных параметров подмодулей Nix. [#81691](https://github.com/ClickHouse/ClickHouse/pull/81691) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* Исправлён ряд проблем, которые могут возникать при попытке запустить интеграционные тесты на локальной машине (localhost). [#82135](https://github.com/ClickHouse/ClickHouse/pull/82135) ([Oleg Doronin](https://github.com/dorooleg)). -* Скомпилирован SymbolIndex на Mac и FreeBSD. (Но он будет работать только в системах с ELF, Linux и FreeBSD). [#82347](https://github.com/ClickHouse/ClickHouse/pull/82347) ([Alexey Milovidov](https://github.com/alexey-milovidov)). + +* Собрана минимальная C-библиотека (10 КБ) для лексера ClickHouse. Это требуется для [#80977](https://github.com/ClickHouse/ClickHouse/issues/80977). [#81347](https://github.com/ClickHouse/ClickHouse/pull/81347) ([Alexey Milovidov](https://github.com/alexey-milovidov)). Добавлен тест для автономного лексера, добавлен тестовый тег `fasttest-only`. [#82472](https://github.com/ClickHouse/ClickHouse/pull/82472) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* Добавлена проверка входных параметров сабмодулей Nix. [#81691](https://github.com/ClickHouse/ClickHouse/pull/81691) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* Исправлен набор проблем, которые могут возникать при попытке запустить интеграционные тесты на локальной машине (localhost). [#82135](https://github.com/ClickHouse/ClickHouse/pull/82135) ([Oleg Doronin](https://github.com/dorooleg)). +* SymbolIndex компилируется на Mac и FreeBSD (но будет работать только на системах с ELF, таких как Linux и FreeBSD). [#82347](https://github.com/ClickHouse/ClickHouse/pull/82347) ([Alexey Milovidov](https://github.com/alexey-milovidov)). * Обновлён Azure SDK до v1.15.0. [#82747](https://github.com/ClickHouse/ClickHouse/pull/82747) ([Smita Kulkarni](https://github.com/SmitaRKulkarni)). * Добавлен модуль хранения из google-cloud-cpp в систему сборки. [#82881](https://github.com/ClickHouse/ClickHouse/pull/82881) ([Pablo Marcos](https://github.com/pamarcos)). -* Изменён `Dockerfile.ubuntu` для clickhouse-server для соответствия требованиям Docker Official Library. [#83039](https://github.com/ClickHouse/ClickHouse/pull/83039) ([Mikhail f. Shiryaev](https://github.com/Felixoid)). -* Продолжение [#83158](https://github.com/ClickHouse/ClickHouse/issues/83158) для исправления загрузки сборок через `curl clickhouse.com`. [#83463](https://github.com/ClickHouse/ClickHouse/pull/83463) ([Mikhail f. Shiryaev](https://github.com/Felixoid)). -* Добавлены бинарник `busybox` и инструменты установки в образы `clickhouse/clickhouse-server` и официальный образ `clickhouse`. [#83735](https://github.com/ClickHouse/ClickHouse/pull/83735) ([Mikhail f. Shiryaev](https://github.com/Felixoid)). -* Добавлена поддержка переменной окружения `CLICKHOUSE_HOST` для указания хоста сервера ClickHouse, в соответствии с уже существующими переменными окружения `CLICKHOUSE_USER` и `CLICKHOUSE_PASSWORD`. Это упрощает конфигурацию без прямого изменения клиента или конфигурационных файлов. [#83659](https://github.com/ClickHouse/ClickHouse/pull/83659) ([Doron David](https://github.com/dorki)). - +* Изменён `Dockerfile.ubuntu` для clickhouse-server в соответствии с требованиями Docker Official Library. [#83039](https://github.com/ClickHouse/ClickHouse/pull/83039) ([Mikhail f. Shiryaev](https://github.com/Felixoid)). +* Продолжение для [#83158](https://github.com/ClickHouse/ClickHouse/issues/83158) для исправления выкладки сборок для `curl clickhouse.com`. [#83463](https://github.com/ClickHouse/ClickHouse/pull/83463) ([Mikhail f. Shiryaev](https://github.com/Felixoid)). +* Добавлены исполняемый файл `busybox` и инструменты установки в образы `clickhouse/clickhouse-server` и официальный образ `clickhouse`. [#83735](https://github.com/ClickHouse/ClickHouse/pull/83735) ([Mikhail f. Shiryaev](https://github.com/Felixoid)). +* Добавлена поддержка переменной окружения `CLICKHOUSE_HOST` для указания хоста сервера ClickHouse, в соответствии с уже существующими переменными окружения `CLICKHOUSE_USER` и `CLICKHOUSE_PASSWORD`. Это упрощает настройку без прямого изменения клиентских или конфигурационных файлов. [#83659](https://github.com/ClickHouse/ClickHouse/pull/83659) ([Doron David](https://github.com/dorki)). ### Релиз ClickHouse 25.6, 2025-06-26 {#256} -#### Обратное несовместимое изменение -* Ранее функция `countMatches` прекращала подсчёт на первом пустом совпадении, даже если шаблон его допускал. Чтобы устранить эту проблему, `countMatches` теперь продолжает выполнение, продвигаясь на один символ вперёд при возникновении пустого совпадения. Пользователи, желающие сохранить старое поведение, могут включить настройку `count_matches_stop_at_empty_match`. [#81676](https://github.com/ClickHouse/ClickHouse/pull/81676) ([Elmi Ahmadov](https://github.com/ahmadov)). -* Минорное изменение: принудительно задать параметрам сервера `backup_threads` и `restore_threads` ненулевые значения. [#80224](https://github.com/ClickHouse/ClickHouse/pull/80224) ([Raúl Marín](https://github.com/Algunenano)). -* Минорное изменение: исправлено поведение `bitNot` для `String`, чтобы во внутреннем представлении в памяти возвращалась строка с нулевым терминатором. Это не должно повлиять на какое-либо поведение, видимое пользователю, однако автор посчитал нужным выделить это изменение. [#80791](https://github.com/ClickHouse/ClickHouse/pull/80791) ([Azat Khuzhin](https://github.com/azat)). - - - -#### Новая возможность - -* Новые типы данных: `Time` ([H]HH:MM:SS) и `Time64` ([H]HH:MM:SS[.fractional]), а также некоторые базовые функции приведения типов и функции для работы с другими типами данных. Добавлены настройки для совместимости с существующей функцией `toTime`. Параметр `use_legacy_to_time` пока установлен для сохранения старого поведения. [#81217](https://github.com/ClickHouse/ClickHouse/pull/81217) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). Добавлена поддержка сравнения между Time/Time64. [#80327](https://github.com/ClickHouse/ClickHouse/pull/80327) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* Новый CLI-инструмент [`chdig`](https://github.com/azat/chdig/) — TUI-интерфейс для ClickHouse (аналог top), входящий в состав ClickHouse. [#79666](https://github.com/ClickHouse/ClickHouse/pull/79666) ([Azat Khuzhin](https://github.com/azat)). -* Добавлена поддержка параметра `disk` для движков баз данных `Atomic` и `Ordinary`, который задаёт диск для хранения файлов метаданных таблиц. [#80546](https://github.com/ClickHouse/ClickHouse/pull/80546) ([Tuan Pham Anh](https://github.com/tuanpach)). Это позволяет подключать базы данных из внешних источников. -* Новый тип MergeTree, `CoalescingMergeTree` — движок, который берёт первое значение, отличное от NULL, во время фоновых слияний. Это закрывает [#78869](https://github.com/ClickHouse/ClickHouse/issues/78869). [#79344](https://github.com/ClickHouse/ClickHouse/pull/79344) ([scanhex12](https://github.com/scanhex12)). -* Добавлены функции для чтения WKB ("Well-Known Binary" — формат двоичного представления различных типов геометрий, используемый в ГИС-приложениях). См. [#43941](https://github.com/ClickHouse/ClickHouse/issues/43941). [#80139](https://github.com/ClickHouse/ClickHouse/pull/80139) ([scanhex12](https://github.com/scanhex12)). -* Добавлено планирование слотов запросов для рабочих нагрузок; подробности см. в разделе [Workload scheduling](https://clickhouse.com/docs/operations/workload-scheduling#query_scheduling). [#78415](https://github.com/ClickHouse/ClickHouse/pull/78415) ([Sergei Trifonov](https://github.com/serxa)). -* Вспомогательные функции `timeSeries*` для ускорения работы в некоторых сценариях при работе с временными рядами данных: - ресемплирование данных на временную сетку с заданными начальной меткой времени, конечной меткой времени и шагом - вычисление PromQL-подобных `delta`, `rate`, `idelta` и `irate`. [#80590](https://github.com/ClickHouse/ClickHouse/pull/80590) ([Alexander Gololobov](https://github.com/davenger)). -* Добавлены функции `mapContainsValuesLike`/`mapContainsValues`/`mapExtractValuesLike` для фильтрации по значениям в `map` и их поддержка в индексах, основанных на фильтре Блума. [#78171](https://github.com/ClickHouse/ClickHouse/pull/78171) ([UnamedRus](https://github.com/UnamedRus)). -* Теперь ограничения настроек могут задавать набор недопустимых значений. [#78499](https://github.com/ClickHouse/ClickHouse/pull/78499) ([Bharat Nallan](https://github.com/bharatnc)). -* Добавлена настройка `enable_shared_storage_snapshot_in_query` для использования общего снимка хранилища всеми подзапросами одного запроса. Это обеспечивает согласованное чтение из одной и той же таблицы, даже если таблица упоминается несколько раз внутри запроса. [#79471](https://github.com/ClickHouse/ClickHouse/pull/79471) ([Amos Bird](https://github.com/amosbird)). -* Добавлена поддержка записи столбцов типа `JSON` в `Parquet` и прямого чтения столбцов типа `JSON` из `Parquet`. [#79649](https://github.com/ClickHouse/ClickHouse/pull/79649) ([Nihal Z. Miaji](https://github.com/nihalzp)). -* Добавлена поддержка типа `MultiPolygon` для `pointInPolygon`. [#79773](https://github.com/ClickHouse/ClickHouse/pull/79773) ([Nihal Z. Miaji](https://github.com/nihalzp)). -* Добавлена поддержка запросов к таблицам Delta, смонтированным в локальную файловую систему, с помощью табличной функции `deltaLakeLocal`. [#79781](https://github.com/ClickHouse/ClickHouse/pull/79781) ([roykim98](https://github.com/roykim98)). -* Добавлена новая настройка `cast_string_to_date_time_mode`, которая позволяет выбрать режим разбора значения DateTime при приведении из String. [#80210](https://github.com/ClickHouse/ClickHouse/pull/80210) ([Pavel Kruglov](https://github.com/Avogar)). Например, вы можете установить её в режим best effort. +#### Изменение, нарушающее обратную совместимость + +* Ранее функция `countMatches` прекращала подсчёт при первом пустом совпадении, даже если шаблон его допускает. Чтобы устранить эту проблему, `countMatches` теперь продолжает выполнение, продвигаясь на один символ вперёд при возникновении пустого совпадения. Пользователи, которые хотят сохранить старое поведение, могут включить настройку `count_matches_stop_at_empty_match`. [#81676](https://github.com/ClickHouse/ClickHouse/pull/81676) ([Elmi Ahmadov](https://github.com/ahmadov)). +* Незначительное: Настройки сервера `backup_threads` и `restore_threads` теперь принудительно должны быть ненулевыми. [#80224](https://github.com/ClickHouse/ClickHouse/pull/80224) ([Raúl Marín](https://github.com/Algunenano)). +* Незначительное: Исправлено поведение `bitNot` для `String`, теперь во внутреннем представлении в памяти используется строка с нулевым терминатором. Это не должно влиять на какое-либо поведение, заметное пользователям, однако автор хотел подчеркнуть это изменение. [#80791](https://github.com/ClickHouse/ClickHouse/pull/80791) ([Azat Khuzhin](https://github.com/azat)). + +#### Новая функция + +* Новые типы данных: `Time` ([H]HH:MM:SS) и `Time64` ([H]HH:MM:SS[.fractional]), а также некоторые базовые функции приведения типов и функции для взаимодействия с другими типами данных. Добавлены настройки для совместимости с существующей функцией `toTime`. Настройка `use_legacy_to_time` установлена так, чтобы пока сохранять прежнее поведение. [#81217](https://github.com/ClickHouse/ClickHouse/pull/81217) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). Добавлена поддержка операций сравнения для Time/Time64. [#80327](https://github.com/ClickHouse/ClickHouse/pull/80327) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* Новый CLI-инструмент [`chdig`](https://github.com/azat/chdig/) — TUI-интерфейс для ClickHouse (аналог `top`), входящий в состав ClickHouse. [#79666](https://github.com/ClickHouse/ClickHouse/pull/79666) ([Azat Khuzhin](https://github.com/azat)). +* Добавлена поддержка настройки `disk` для движков баз данных `Atomic` и `Ordinary`, позволяющей указывать диск для хранения файлов метаданных таблиц. [#80546](https://github.com/ClickHouse/ClickHouse/pull/80546) ([Tuan Pham Anh](https://github.com/tuanpach)). Это позволяет подключать базы данных из внешних источников. +* Новый тип MergeTree, `CoalescingMergeTree` — движок выбирает первое ненулевое (не Null) значение при фоновых слияниях. Это решает [#78869](https://github.com/ClickHouse/ClickHouse/issues/78869). [#79344](https://github.com/ClickHouse/ClickHouse/pull/79344) ([scanhex12](https://github.com/scanhex12)). +* Добавлены функции для чтения WKB («Well-Known Binary» — это формат двоичного кодирования различных типов геометрии, используемый в GIS‑приложениях). См. [#43941](https://github.com/ClickHouse/ClickHouse/issues/43941). [#80139](https://github.com/ClickHouse/ClickHouse/pull/80139) ([scanhex12](https://github.com/scanhex12)). +* Добавлено планирование слотов запросов для рабочих нагрузок. Подробности см. в разделе [workload scheduling](https://clickhouse.com/docs/operations/workload-scheduling#query_scheduling). [#78415](https://github.com/ClickHouse/ClickHouse/pull/78415) ([Sergei Trifonov](https://github.com/serxa)). +* Вспомогательные функции `timeSeries*` для ускорения некоторых сценариев при работе с временными рядами: - ресемплирование данных по временной сетке с заданными начальной и конечной метками времени и шагом - вычисление PromQL-подобных `delta`, `rate`, `idelta` и `irate`. [#80590](https://github.com/ClickHouse/ClickHouse/pull/80590) ([Alexander Gololobov](https://github.com/davenger)). +* Добавлены функции `mapContainsValuesLike`/`mapContainsValues`/`mapExtractValuesLike` для фильтрации по значениям map и их поддержка в индексах на основе bloom-фильтров. [#78171](https://github.com/ClickHouse/ClickHouse/pull/78171) ([UnamedRus](https://github.com/UnamedRus)). +* Теперь ограничения настроек могут задавать набор запрещённых значений. [#78499](https://github.com/ClickHouse/ClickHouse/pull/78499) ([Bharat Nallan](https://github.com/bharatnc)). +* Добавлена настройка `enable_shared_storage_snapshot_in_query`, которая позволяет всем подзапросам одного запроса использовать общий снимок хранилища. Это обеспечивает согласованное чтение из одной и той же таблицы, даже если таблица упоминается в запросе несколько раз. [#79471](https://github.com/ClickHouse/ClickHouse/pull/79471) ([Amos Bird](https://github.com/amosbird)). +* Добавлена поддержка записи столбцов `JSON` в формат `Parquet` и прямого чтения столбцов `JSON` из `Parquet`. [#79649](https://github.com/ClickHouse/ClickHouse/pull/79649) ([Nihal Z. Miaji](https://github.com/nihalzp)). +* Добавлена поддержка `MultiPolygon` для `pointInPolygon`. [#79773](https://github.com/ClickHouse/ClickHouse/pull/79773) ([Nihal Z. Miaji](https://github.com/nihalzp)). +* Добавлена поддержка запросов к Delta-таблицам, смонтированным из локальной файловой системы, через табличную функцию `deltaLakeLocal`. [#79781](https://github.com/ClickHouse/ClickHouse/pull/79781) ([roykim98](https://github.com/roykim98)). +* Добавлена новая настройка `cast_string_to_date_time_mode`, которая позволяет выбирать режим разбора `DateTime` при приведении типа из `String`. [#80210](https://github.com/ClickHouse/ClickHouse/pull/80210) ([Pavel Kruglov](https://github.com/Avogar)). Например, вы можете установить её в режим «best effort». * Добавлены функции `bech32Encode` и `bech32Decode` для работы с алгоритмом Bech32 в Bitcoin (issue [#40381](https://github.com/ClickHouse/ClickHouse/issues/40381)). [#80239](https://github.com/ClickHouse/ClickHouse/pull/80239) ([George Larionov](https://github.com/glarik)). * Добавлены SQL-функции для анализа имён частей MergeTree. [#80573](https://github.com/ClickHouse/ClickHouse/pull/80573) ([Mikhail Artemenko](https://github.com/Michicosun)). -* Разрешена фильтрация частей, выбранных для запроса, по диску, на котором они находятся, с помощью нового виртуального столбца `_disk_name`. [#80650](https://github.com/ClickHouse/ClickHouse/pull/80650) ([tanner-bruce](https://github.com/tanner-bruce)). -* Добавлена стартовая страница со списком встроенных веб-инструментов. Она будет открываться при обращении из браузероподобного пользовательского агента. [#81129](https://github.com/ClickHouse/ClickHouse/pull/81129) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Функции `arrayFirst`, `arrayFirstIndex`, `arrayLast` и `arrayLastIndex` теперь отбрасывают значения NULL, возвращаемые выражением фильтра. В предыдущих версиях результаты фильтра с типом Nullable не поддерживались. Исправляет [#81113](https://github.com/ClickHouse/ClickHouse/issues/81113). [#81197](https://github.com/ClickHouse/ClickHouse/pull/81197) ([Lennard Eijsackers](https://github.com/Blokje5)). -* Теперь можно писать `USE DATABASE name` вместо `USE name`. [#81307](https://github.com/ClickHouse/ClickHouse/pull/81307) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* Добавлена новая системная таблица `system.codecs` для получения сведений о доступных кодеках. (issue [#81525](https://github.com/ClickHouse/ClickHouse/issues/81525)). [#81600](https://github.com/ClickHouse/ClickHouse/pull/81600) ([Jimmy Aguilar Mena](https://github.com/Ergus)). +* Добавлена возможность фильтровать части, выбранные для запроса, по диску, на котором они находятся, благодаря введению нового виртуального столбца `_disk_name`. [#80650](https://github.com/ClickHouse/ClickHouse/pull/80650) ([tanner-bruce](https://github.com/tanner-bruce)). +* Добавлена стартовая страница со списком встроенных веб-инструментов. Она будет открываться при запросе браузероподобным пользовательским агентом. [#81129](https://github.com/ClickHouse/ClickHouse/pull/81129) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Функции `arrayFirst`, `arrayFirstIndex`, `arrayLast` и `arrayLastIndex` отбрасывают значения NULL, возвращаемые выражением фильтра. В предыдущих версиях результаты фильтра типа Nullable не поддерживались. Исправляет [#81113](https://github.com/ClickHouse/ClickHouse/issues/81113). [#81197](https://github.com/ClickHouse/ClickHouse/pull/81197) ([Lennard Eijsackers](https://github.com/Blokje5)). +* Теперь можно использовать `USE DATABASE name` вместо `USE name`. [#81307](https://github.com/ClickHouse/ClickHouse/pull/81307) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* Добавлена новая системная таблица `system.codecs` для просмотра доступных кодеков. (issue [#81525](https://github.com/ClickHouse/ClickHouse/issues/81525)). [#81600](https://github.com/ClickHouse/ClickHouse/pull/81600) ([Jimmy Aguilar Mena](https://github.com/Ergus)). * Добавлена поддержка оконных функций `lag` и `lead`. Закрывает [#9887](https://github.com/ClickHouse/ClickHouse/issues/9887). [#82108](https://github.com/ClickHouse/ClickHouse/pull/82108) ([Dmitry Novik](https://github.com/novikd)). -* Функция `tokens` теперь поддерживает новый токенизатор под названием `split`, который хорошо подходит для логов. [#80195](https://github.com/ClickHouse/ClickHouse/pull/80195) ([Robert Schulze](https://github.com/rschu1ze)). +* Функция `tokens` теперь поддерживает новый токенизатор `split`, удобный для обработки логов. [#80195](https://github.com/ClickHouse/ClickHouse/pull/80195) ([Robert Schulze](https://github.com/rschu1ze)). * Добавлена поддержка аргумента `--database` в `clickhouse-local`. Теперь можно переключаться на уже созданную базу данных. Это закрывает [#44115](https://github.com/ClickHouse/ClickHouse/issues/44115). [#81465](https://github.com/ClickHouse/ClickHouse/pull/81465) ([Alexey Milovidov](https://github.com/alexey-milovidov)). - - #### Экспериментальная возможность -* Реализована логика, аналогичная перераспределению (rebalance) в Kafka для `Kafka2` с использованием ClickHouse Keeper. Для каждой реплики поддерживаются два типа блокировок партиций: постоянные и временные. Реплика старается удерживать постоянные блокировки как можно дольше; при этом в любой момент времени на реплике не более чем `all_topic_partitions / active_replicas_count` постоянных блокировок (где `all_topic_partitions` — количество всех партиций, а `active_replicas_count` — количество активных реплик). Если блокировок больше, реплика освобождает часть партиций. Некоторые партиции временно удерживаются репликой. Максимальное количество временных блокировок на реплике динамически изменяется, чтобы дать другим репликам возможность взять часть партиций в постоянные блокировки. При обновлении временных блокировок реплика освобождает их все и затем снова пытается захватить некоторые другие. [#78726](https://github.com/ClickHouse/ClickHouse/pull/78726) ([Daria Fomina](https://github.com/sinfillo)). -* Улучшение для экспериментального текстового индекса: явные параметры поддерживаются через пары ключ–значение. В настоящий момент поддерживаются параметры: обязательный `tokenizer` и два необязательных — `max_rows_per_postings_list` и `ngram_size`. [#80262](https://github.com/ClickHouse/ClickHouse/pull/80262) ([Elmi Ahmadov](https://github.com/ahmadov)). -* Ранее хранилище формата `packed` не поддерживалось для полнотекстового индекса, поскольку идентификатор сегмента обновлялся «на лету» посредством чтения и записи файла (`.gin_sid`) на диск. В случае хранилища `packed` чтение значения из незакоммиченного файла не поддерживается, что приводило к проблеме. Теперь это исправлено. [#80852](https://github.com/ClickHouse/ClickHouse/pull/80852) ([Elmi Ahmadov](https://github.com/ahmadov)). -* Экспериментальные индексы типа `gin` (которые мне не нравятся, потому что это внутренняя шутка разработчиков PostgreSQL) были переименованы в `text`. Существующие индексы типа `gin` по-прежнему можно загрузить, но при попытке использовать их в поисковых запросах они будут выбрасывать исключение (предлагая вместо них индексы `text`). [#80855](https://github.com/ClickHouse/ClickHouse/pull/80855) ([Robert Schulze](https://github.com/rschu1ze)). - +* Реализована логика ребалансировки, аналогичная механизму Kafka rebalance, для `Kafka2` с использованием ClickHouse Keeper. Для каждой реплики поддерживаются два типа блокировок партиций: постоянные и временные. Реплика старается удерживать постоянные блокировки как можно дольше; в любой момент времени на реплике не более чем `all_topic_partitions / active_replicas_count` (где `all_topic_partitions` — количество всех партиций, `active_replicas_count` — количество активных реплик) постоянных блокировок; если их больше, реплика освобождает некоторые партиции. Некоторые партиции временно удерживаются репликой. Максимальное количество временных блокировок на реплике динамически изменяется, чтобы дать другим репликам возможность взять часть партиций в постоянные блокировки. При обновлении временных блокировок реплика снимает их все и снова пытается захватить некоторые другие. [#78726](https://github.com/ClickHouse/ClickHouse/pull/78726) ([Daria Fomina](https://github.com/sinfillo)). +* Улучшение для экспериментального текстового индекса: поддерживаются явные параметры в виде пар ключ–значение. В настоящее время поддерживаются параметры: обязательный `tokenizer` и два необязательных — `max_rows_per_postings_list` и `ngram_size`. [#80262](https://github.com/ClickHouse/ClickHouse/pull/80262) ([Elmi Ahmadov](https://github.com/ahmadov)). +* Ранее хранилище `packed` не поддерживалось для полнотекстового индекса, поскольку идентификатор сегмента обновлялся «на лету» путём чтения и записи файла (`.gin_sid`) на диске. В случае `packed`‑хранилища чтение значения из незакоммиченного файла не поддерживается, и это приводило к проблеме. Теперь это работает корректно. [#80852](https://github.com/ClickHouse/ClickHouse/pull/80852) ([Elmi Ahmadov](https://github.com/ahmadov)). +* Экспериментальные индексы типа `gin` (которые мне не нравятся, потому что это внутренняя шутка хакеров PostgreSQL) были переименованы в `text`. Существующие индексы типа `gin` по‑прежнему можно загрузить, но при попытке использовать их в поиске они будут выбрасывать исключение (предлагая вместо них использовать индексы `text`). [#80855](https://github.com/ClickHouse/ClickHouse/pull/80855) ([Robert Schulze](https://github.com/rschu1ze)). #### Повышение производительности -* Включена поддержка фильтрации по нескольким проекциям, что позволяет задействовать более одной проекции для фильтрации на уровне частей. Это решает задачу [#55525](https://github.com/ClickHouse/ClickHouse/issues/55525). Это второй шаг к реализации индекса проекций, следующий за [#78429](https://github.com/ClickHouse/ClickHouse/issues/78429). [#80343](https://github.com/ClickHouse/ClickHouse/pull/80343) ([Amos Bird](https://github.com/amosbird)). -* По умолчанию в файловом кеше используется политика кеширования `SLRU`. [#75072](https://github.com/ClickHouse/ClickHouse/pull/75072) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Устранено соперничество за ресурсы на шаге Resize в конвейере запросов. [#77562](https://github.com/ClickHouse/ClickHouse/pull/77562) ([Zhiguo Zhou](https://github.com/ZhiguoZh)). -* Добавлена опция, позволяющая вынести (де)сжатие и (де)сериализацию блоков в потоки конвейера (pipeline threads) вместо одного потока, связанного с сетевым подключением. Управляется настройкой `enable_parallel_blocks_marshalling`. Это должно ускорить распределённые запросы, передающие значительные объёмы данных между инициатором и удалёнными узлами. [#78694](https://github.com/ClickHouse/ClickHouse/pull/78694) ([Nikita Taranov](https://github.com/nickitat)). -* Улучшена производительность всех типов bloom-фильтров. [Видео с конференции OpenHouse](https://www.youtube.com/watch?v=yIVz0NKwQvA\&pp=ygUQb3BlbmhvdXNlIG9wZW5haQ%3D%3D) [#79800](https://github.com/ClickHouse/ClickHouse/pull/79800) ([Delyan Kratunov](https://github.com/dkratunov)). -* Добавлен быстрый путь в `UniqExactSet::merge`, когда один из наборов пуст. Кроме того, теперь если левый набор (LHS) двухуровневый, а правый (RHS) одноуровневый, мы больше не выполняем преобразование правого набора в двухуровневый. [#79971](https://github.com/ClickHouse/ClickHouse/pull/79971) ([Nikita Taranov](https://github.com/nickitat)). -* Повышена эффективность повторного использования памяти и уменьшено количество отказов страниц при использовании двухуровневых хеш-таблиц, что должно ускорить выполнение GROUP BY. [#80245](https://github.com/ClickHouse/ClickHouse/pull/80245) ([Jiebin Sun](https://github.com/jiebinn)). +* Добавлена поддержка фильтрации по нескольким проекциям, что позволяет использовать более одной проекции при фильтрации на уровне частей. Это решает [#55525](https://github.com/ClickHouse/ClickHouse/issues/55525). Это второй шаг на пути к реализации индекса проекций, после [#78429](https://github.com/ClickHouse/ClickHouse/issues/78429). [#80343](https://github.com/ClickHouse/ClickHouse/pull/80343) ([Amos Bird](https://github.com/amosbird)). +* По умолчанию в файловом кэше используется политика кэширования `SLRU`. [#75072](https://github.com/ClickHouse/ClickHouse/pull/75072) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Устранена конкуренция при выполнении шага Resize в конвейере запросов. [#77562](https://github.com/ClickHouse/ClickHouse/pull/77562) ([Zhiguo Zhou](https://github.com/ZhiguoZh)). +* Добавлена опция переноса (де)сжатия и (де)сериализации блоков в конвейерные потоки вместо использования одного потока, связанного с сетевым подключением. Управляется настройкой `enable_parallel_blocks_marshalling`. Это должно ускорить распределённые запросы, которые передают значительные объёмы данных между инициатором и удалёнными узлами. [#78694](https://github.com/ClickHouse/ClickHouse/pull/78694) ([Nikita Taranov](https://github.com/nickitat)). +* Улучшена производительность всех типов Bloom‑фильтров. [Видео с конференции OpenHouse](https://www.youtube.com/watch?v=yIVz0NKwQvA\&pp=ygUQb3BlbmhvdXNlIG9wZW5haQ%3D%3D) [#79800](https://github.com/ClickHouse/ClickHouse/pull/79800) ([Delyan Kratunov](https://github.com/dkratunov)). +* Добавлен оптимизированный путь выполнения в `UniqExactSet::merge` для случая, когда один из наборов пустой. Также теперь, если множество LHS двухуровневое, а RHS одноуровневое, не выполняется преобразование RHS в двухуровневое множество. [#79971](https://github.com/ClickHouse/ClickHouse/pull/79971) ([Nikita Taranov](https://github.com/nickitat)). +* Повышена эффективность повторного использования памяти и уменьшено количество ошибок страничной памяти при использовании двухуровневых хеш-таблиц. Это позволяет ускорить выполнение GROUP BY. [#80245](https://github.com/ClickHouse/ClickHouse/pull/80245) ([Jiebin Sun](https://github.com/jiebinn)). * Исключены лишние обновления и снижена конкуренция за блокировки в кэше условий запросов. [#80247](https://github.com/ClickHouse/ClickHouse/pull/80247) ([Jiebin Sun](https://github.com/jiebinn)). -* Незначительная оптимизация для `concatenateBlocks`. Скорее всего, она пойдёт на пользу parallel hash join. [#80328](https://github.com/ClickHouse/ClickHouse/pull/80328) ([李扬](https://github.com/taiyang-li)). -* При выборе диапазонов меток из диапазона первичного ключа двоичный поиск нельзя использовать, если первичный ключ обёрнут функциями. Этот pull request снимает это ограничение: двоичный поиск всё равно может применяться, когда первичный ключ обёрнут всегда монотонной цепочкой функций или когда RPN содержит элемент, который всегда является истинным. Закрывает [#45536](https://github.com/ClickHouse/ClickHouse/issues/45536). [#80597](https://github.com/ClickHouse/ClickHouse/pull/80597) ([zoomxi](https://github.com/zoomxi)). -* Ускорено завершение работы движка `Kafka` (удалена дополнительная 3‑секундная задержка при наличии нескольких таблиц `Kafka`). [#80796](https://github.com/ClickHouse/ClickHouse/pull/80796) ([Azat Khuzhin](https://github.com/azat)). -* Асинхронные вставки: уменьшают потребление памяти и повышают производительность запросов INSERT. [#80972](https://github.com/ClickHouse/ClickHouse/pull/80972) ([Raúl Marín](https://github.com/Algunenano)). -* Профилирование процессоров не выполняется, если таблица логов отключена. [#81256](https://github.com/ClickHouse/ClickHouse/pull/81256) ([Raúl Marín](https://github.com/Algunenano)). Это ускоряет выполнение очень коротких запросов. -* Ускорена работа `toFixedString`, если исходное значение уже в точности соответствует запрошенному формату. [#81257](https://github.com/ClickHouse/ClickHouse/pull/81257) ([Raúl Marín](https://github.com/Algunenano)). -* Не обрабатывать значения квоты, если для пользователя не задано ограничение. [#81549](https://github.com/ClickHouse/ClickHouse/pull/81549) ([Raúl Marín](https://github.com/Algunenano)). Это ускоряет очень короткие запросы. -* Исправлен регресс производительности в механизме отслеживания памяти. [#81694](https://github.com/ClickHouse/ClickHouse/pull/81694) ([Michael Kolupaev](https://github.com/al13n321)). -* Улучшена оптимизация шардирующего ключа для распределённых запросов. [#78452](https://github.com/ClickHouse/ClickHouse/pull/78452) ([fhw12345](https://github.com/fhw12345)). -* Параллельные реплики: избегайте ожидания медленных, неиспользуемых реплик, если все задачи на чтение уже распределены по другим репликам. [#80199](https://github.com/ClickHouse/ClickHouse/pull/80199) ([Igor Nikonov](https://github.com/devcrafter)). -* Для parallel replicas теперь используется отдельный таймаут подключения, см. настройку `parallel_replicas_connect_timeout_ms`. Ранее в качестве таймаута подключения для запросов parallel replicas использовались настройки `connect_timeout_with_failover_ms`/`connect_timeout_with_failover_secure_ms` (по умолчанию 1 секунда). [#80421](https://github.com/ClickHouse/ClickHouse/pull/80421) ([Igor Nikonov](https://github.com/devcrafter)). -* В файловой системе с журналированием операция `mkdir` записывается в журнал файловой системы, который затем сбрасывается на диск. В случае медленного диска это может занять много времени. Вынесите создание каталога из области действия резервной блокировки. [#81371](https://github.com/ClickHouse/ClickHouse/pull/81371) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Отложено чтение файлов манифестов Iceberg до выполнения первого запроса на чтение. [#81619](https://github.com/ClickHouse/ClickHouse/pull/81619) ([Daniil Ivanik](https://github.com/divanik)). +* Тривиальная оптимизация для `concatenateBlocks`. Скорее всего, она также полезна для параллельного hash join. [#80328](https://github.com/ClickHouse/ClickHouse/pull/80328) ([李扬](https://github.com/taiyang-li)). +* При выборе диапазонов меток из диапазона первичного ключа двоичный поиск не может быть использован, если первичный ключ обернут функциями. В этом PR это ограничение смягчено: двоичный поиск по-прежнему может применяться, когда первичный ключ обернут цепочкой всегда монотонных функций или когда RPN содержит элемент, который всегда истиннен. Закрывает [#45536](https://github.com/ClickHouse/ClickHouse/issues/45536). [#80597](https://github.com/ClickHouse/ClickHouse/pull/80597) ([zoomxi](https://github.com/zoomxi)). +* Ускорено завершение работы движка `Kafka` (удалена лишняя задержка в 3 секунды при наличии нескольких таблиц `Kafka`). [#80796](https://github.com/ClickHouse/ClickHouse/pull/80796) ([Azat Khuzhin](https://github.com/azat)). +* Асинхронные вставки: снижают потребление памяти и повышают производительность запросов INSERT. [#80972](https://github.com/ClickHouse/ClickHouse/pull/80972) ([Raúl Marín](https://github.com/Algunenano)). +* Если таблица логов отключена, не профилировать процессоры. [#81256](https://github.com/ClickHouse/ClickHouse/pull/81256) ([Raúl Marín](https://github.com/Algunenano)). Это ускоряет очень короткие запросы. +* Ускорена работа `toFixedString`, когда исходное значение уже имеет требуемый формат. [#81257](https://github.com/ClickHouse/ClickHouse/pull/81257) ([Raúl Marín](https://github.com/Algunenano)). +* Не обрабатывать значения квоты, если для пользователя не задана квота. [#81549](https://github.com/ClickHouse/ClickHouse/pull/81549) ([Raúl Marín](https://github.com/Algunenano)). Это ускоряет очень короткие запросы. +* Исправлена регрессия по производительности в отслеживании использования памяти. [#81694](https://github.com/ClickHouse/ClickHouse/pull/81694) ([Michael Kolupaev](https://github.com/al13n321)). +* Улучшена оптимизация ключа шардирования в распределённых запросах. [#78452](https://github.com/ClickHouse/ClickHouse/pull/78452) ([fhw12345](https://github.com/fhw12345)). +* Параллельные реплики: избегайте ожидания медленных, неиспользуемых реплик, если все задачи чтения уже распределены между другими репликами. [#80199](https://github.com/ClickHouse/ClickHouse/pull/80199) ([Igor Nikonov](https://github.com/devcrafter)). +* Теперь для parallel replicas используется отдельный таймаут подключения, см. настройку `parallel_replicas_connect_timeout_ms`. Ранее в качестве таймаута подключения для запросов с parallel replicas использовались настройки `connect_timeout_with_failover_ms`/`connect_timeout_with_failover_secure_ms` (по умолчанию 1 секунда). [#80421](https://github.com/ClickHouse/ClickHouse/pull/80421) ([Igor Nikonov](https://github.com/devcrafter)). +* В файловой системе с журналированием `mkdir` записывается в журнал файловой системы, который затем сбрасывается на диск. В случае медленного диска это может занимать много времени. Переместите его за пределы области блокировки резерва. [#81371](https://github.com/ClickHouse/ClickHouse/pull/81371) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Отложить чтение файлов манифестов Iceberg до выполнения первого запроса на чтение. [#81619](https://github.com/ClickHouse/ClickHouse/pull/81619) ([Daniil Ivanik](https://github.com/divanik)). * Разрешить перенос предиката `GLOBAL [NOT] IN` в предложение `PREWHERE`, если это возможно. [#79996](https://github.com/ClickHouse/ClickHouse/pull/79996) ([Eduard Karacharov](https://github.com/korowa)). +#### Улучшения - - - -#### Улучшение - -* `EXPLAIN SYNTAX` теперь использует новый анализатор. Он возвращает AST, которое строится на основе дерева запроса. Добавлена опция `query_tree_passes` для управления числом проходов, выполняемых перед преобразованием дерева запроса в AST. [#74536](https://github.com/ClickHouse/ClickHouse/pull/74536) ([Vladimir Cherkasov](https://github.com/vdimir)). -* Реализована «плоская» сериализация для Dynamic и JSON в формате Native, которая позволяет сериализовать и десериализовать данные Dynamic и JSON без специальных структур, таких как shared variant для Dynamic и shared data для JSON. Эту сериализацию можно включить, установив настройку `output_format_native_use_flattened_dynamic_and_json_serialization`. Она может использоваться для упрощения поддержки Dynamic и JSON в протоколе TCP в клиентах на разных языках программирования. [#80499](https://github.com/ClickHouse/ClickHouse/pull/80499) ([Pavel Kruglov](https://github.com/Avogar)). -* Обновлять учетные данные `S3` после ошибки `AuthenticationRequired`. [#77353](https://github.com/ClickHouse/ClickHouse/pull/77353) ([Vitaly Baranov](https://github.com/vitlibar)). -* Добавлены метрики словарей в `system.asynchronous_metrics` - `DictionaryMaxUpdateDelay` — максимальная задержка (в секундах) обновления словаря. - `DictionaryTotalFailedUpdates` — количество ошибок с момента последней успешной загрузки во всех словарях. [#78175](https://github.com/ClickHouse/ClickHouse/pull/78175) ([Vlad](https://github.com/codeworse)). +* `EXPLAIN SYNTAX` теперь использует новый анализатор. Он возвращает AST, построенное из дерева запроса. Добавлен параметр `query_tree_passes` для управления количеством проходов, выполняемых перед преобразованием дерева запроса в AST. [#74536](https://github.com/ClickHouse/ClickHouse/pull/74536) ([Vladimir Cherkasov](https://github.com/vdimir)). +* Реализована плоская сериализация для Dynamic и JSON в формате Native, которая позволяет сериализовать и десериализовать данные Dynamic и JSON без использования специальных структур, таких как shared variant для Dynamic и shared data для JSON. Эту сериализацию можно включить, установив параметр `output_format_native_use_flattened_dynamic_and_json_serialization`. Её можно использовать для упрощения поддержки Dynamic и JSON в TCP-протоколе в клиентах на разных языках. [#80499](https://github.com/ClickHouse/ClickHouse/pull/80499) ([Pavel Kruglov](https://github.com/Avogar)). +* Обновлять учетные данные для `S3` после ошибки `AuthenticationRequired`. [#77353](https://github.com/ClickHouse/ClickHouse/pull/77353) ([Vitaly Baranov](https://github.com/vitlibar)). +* Добавлены метрики для словарей в `system.asynchronous_metrics`: `DictionaryMaxUpdateDelay` — максимальная задержка (в секундах) обновления словаря; `DictionaryTotalFailedUpdates` — количество ошибок при обновлении всех словарей с момента последней успешной загрузки. [#78175](https://github.com/ClickHouse/ClickHouse/pull/78175) ([Vlad](https://github.com/codeworse)). * Добавлено предупреждение о базах данных, которые могли быть созданы для сохранения повреждённых таблиц. [#78841](https://github.com/ClickHouse/ClickHouse/pull/78841) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). * Добавлен виртуальный столбец `_time` в движках `S3Queue` и `AzureQueue`. [#78926](https://github.com/ClickHouse/ClickHouse/pull/78926) ([Anton Ivashkin](https://github.com/ianton-ru)). -* Сделать настройки, управляющие разрывом соединения при перегрузке CPU, поддерживающими «горячую» перезагрузку. [#79052](https://github.com/ClickHouse/ClickHouse/pull/79052) ([Alexey Katsman](https://github.com/alexkats)). -* Добавлен префикс контейнера к путям данных, отображаемым в `system.tables` для обычных дисков в Azure Blob Storage, чтобы сделать их отображение согласованным с S3 и GCP. [#79241](https://github.com/ClickHouse/ClickHouse/pull/79241) ([Julia Kartseva](https://github.com/jkartseva)). -* Теперь clickhouse-client и local также могут принимать параметры запроса в виде `param-` (дефис) наряду с `param_` (подчёркивание). Это закрывает [#63093](https://github.com/ClickHouse/ClickHouse/issues/63093). [#79429](https://github.com/ClickHouse/ClickHouse/pull/79429) ([Engel Danila](https://github.com/aaaengel)). -* Подробное предупреждающее сообщение о скидке на трафик при копировании данных из локального хранилища в удалённый S3 с включённой проверкой контрольной суммы. [#79464](https://github.com/ClickHouse/ClickHouse/pull/79464) ([VicoWu](https://github.com/VicoWu)). -* Ранее при `input_format_parquet_max_block_size = 0` (недопустимом значении) ClickHouse зависал. Теперь это поведение исправлено. Это закрывает [#79394](https://github.com/ClickHouse/ClickHouse/issues/79394). [#79601](https://github.com/ClickHouse/ClickHouse/pull/79601) ([abashkeev](https://github.com/abashkeev)). -* Добавлена настройка `throw_on_error` для `startup_scripts`: когда параметр `throw_on_error` имеет значение true, сервер не запустится, пока все запросы не завершатся успешно. По умолчанию `throw_on_error` имеет значение false, что сохраняет прежнее поведение. [#79732](https://github.com/ClickHouse/ClickHouse/pull/79732) ([Aleksandr Musorin](https://github.com/AVMusorin)). -* Добавлена возможность добавлять `http_response_headers` в `http_handlers` любого типа. [#79975](https://github.com/ClickHouse/ClickHouse/pull/79975) ([Andrey Zvonov](https://github.com/zvonand)). -* Функция `reverse` теперь поддерживает тип `Tuple`. Закрывает [#80053](https://github.com/ClickHouse/ClickHouse/issues/80053). [#80083](https://github.com/ClickHouse/ClickHouse/pull/80083) ([flynn](https://github.com/ucasfl)). +* Настройки, управляющие разрывом соединения при перегрузке CPU, сделаны горячеперезагружаемыми. [#79052](https://github.com/ClickHouse/ClickHouse/pull/79052) ([Alexey Katsman](https://github.com/alexkats)). +* Добавлен префикс контейнера к путям данных, отображаемым в `system.tables` для обычных дисков в хранилище Azure Blob, что делает представление данных единообразным с S3 и GCP. [#79241](https://github.com/ClickHouse/ClickHouse/pull/79241) ([Julia Kartseva](https://github.com/jkartseva)). +* Теперь clickhouse-client и local также принимают параметры запроса с именами вида `param-` (дефис) наряду с `param_` (подчёркивание). Тем самым закрывается [#63093](https://github.com/ClickHouse/ClickHouse/issues/63093). [#79429](https://github.com/ClickHouse/ClickHouse/pull/79429) ([Engel Danila](https://github.com/aaaengel)). +* Подробное предупреждающее сообщение об экономии трафика при копировании данных из локального хранилища в удалённое S3 при включённой проверке контрольных сумм. [#79464](https://github.com/ClickHouse/ClickHouse/pull/79464) ([VicoWu](https://github.com/VicoWu)). +* Ранее при `input_format_parquet_max_block_size = 0` (некорректное значение) ClickHouse зависал. Теперь это поведение исправлено. Это закрывает [#79394](https://github.com/ClickHouse/ClickHouse/issues/79394). [#79601](https://github.com/ClickHouse/ClickHouse/pull/79601) ([abashkeev](https://github.com/abashkeev)). +* Добавлена настройка `throw_on_error` для `startup_scripts`: если `throw_on_error` установлена в `true`, сервер не запустится, пока все запросы не завершатся успешно. По умолчанию `throw_on_error` имеет значение `false`, что сохраняет прежнее поведение. [#79732](https://github.com/ClickHouse/ClickHouse/pull/79732) ([Aleksandr Musorin](https://github.com/AVMusorin)). +* Разрешено добавлять `http_response_headers` в `http_handlers` любого типа. [#79975](https://github.com/ClickHouse/ClickHouse/pull/79975) ([Andrey Zvonov](https://github.com/zvonand)). +* Теперь функция `reverse` поддерживает тип данных `Tuple`. Закрывает [#80053](https://github.com/ClickHouse/ClickHouse/issues/80053). [#80083](https://github.com/ClickHouse/ClickHouse/pull/80083) ([flynn](https://github.com/ucasfl)). * Решена задача [#75817](https://github.com/ClickHouse/ClickHouse/issues/75817): теперь можно получать данные `auxiliary_zookeepers` из таблицы `system.zookeeper`. [#80146](https://github.com/ClickHouse/ClickHouse/pull/80146) ([Nikolay Govorov](https://github.com/mrdimidium)). -* Добавлены асинхронные метрики по TCP-сокетам сервера. Это повышает наблюдаемость. Закрывает [#80187](https://github.com/ClickHouse/ClickHouse/issues/80187). [#80188](https://github.com/ClickHouse/ClickHouse/pull/80188) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Добавлена поддержка `anyLast_respect_nulls` и `any_respect_nulls` как `SimpleAggregateFunction`. [#80219](https://github.com/ClickHouse/ClickHouse/pull/80219) ([Diskein](https://github.com/Diskein)). -* Удалён лишний вызов `adjustCreateQueryForBackup` для реплицируемых баз данных. [#80282](https://github.com/ClickHouse/ClickHouse/pull/80282) ([Vitaly Baranov](https://github.com/vitlibar)). -* Разрешена передача дополнительных опций (которые идут после `--`, например `-- --config.value='abc'`) в `clickhouse-local` без знака равенства. Закрывает [#80292](https://github.com/ClickHouse/ClickHouse/issues/80292). [#80293](https://github.com/ClickHouse/ClickHouse/pull/80293) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Подсветка метасимволов в запросах `SHOW ... LIKE`. Исправляет [#80275](https://github.com/ClickHouse/ClickHouse/issues/80275). [#80297](https://github.com/ClickHouse/ClickHouse/pull/80297) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Сделать SQL UDF в `clickhouse-local` постоянной: ранее созданная функция теперь будет загружаться при запуске. Это закрывает [#80085](https://github.com/ClickHouse/ClickHouse/issues/80085). [#80300](https://github.com/ClickHouse/ClickHouse/pull/80300) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Добавлены асинхронные метрики для TCP-сокетов сервера. Это повышает наблюдаемость. Закрывает [#80187](https://github.com/ClickHouse/ClickHouse/issues/80187). [#80188](https://github.com/ClickHouse/ClickHouse/pull/80188) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Добавлена поддержка `anyLast_respect_nulls` и `any_respect_nulls` в качестве `SimpleAggregateFunction`. [#80219](https://github.com/ClickHouse/ClickHouse/pull/80219) ([Diskein](https://github.com/Diskein)). +* Удалён ненужный вызов `adjustCreateQueryForBackup` для реплицируемых баз данных. [#80282](https://github.com/ClickHouse/ClickHouse/pull/80282) ([Vitaly Baranov](https://github.com/vitlibar)). +* Разрешить использование дополнительных параметров (которые идут после `--`, как `-- --config.value='abc'`) в `clickhouse-local` без знака равенства. Закрывает [#80292](https://github.com/ClickHouse/ClickHouse/issues/80292). [#80293](https://github.com/ClickHouse/ClickHouse/pull/80293) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Подсветить метасимволы в запросах `SHOW ... LIKE`. Закрывает задачу [#80275](https://github.com/ClickHouse/ClickHouse/issues/80275). [#80297](https://github.com/ClickHouse/ClickHouse/pull/80297) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Сделать SQL UDF в `clickhouse-local` постоянной. Ранее созданная функция будет загружаться при запуске. Это закрывает [#80085](https://github.com/ClickHouse/ClickHouse/issues/80085). [#80300](https://github.com/ClickHouse/ClickHouse/pull/80300) ([Alexey Milovidov](https://github.com/alexey-milovidov)). * Исправлено описание в плане выполнения запроса для предварительного шага DISTINCT. [#80330](https://github.com/ClickHouse/ClickHouse/pull/80330) ([UnamedRus](https://github.com/UnamedRus)). -* Добавлена возможность использования именованных коллекций в ODBC/JDBC. [#80334](https://github.com/ClickHouse/ClickHouse/pull/80334) ([Andrey Zvonov](https://github.com/zvonand)). -* Метрики числа дисков в режиме только для чтения и повреждённых дисков. Индикатор записывает сообщение в журнал при запуске DiskLocalCheckThread. [#80391](https://github.com/ClickHouse/ClickHouse/pull/80391) ([VicoWu](https://github.com/VicoWu)). +* Разрешено использование именованных коллекций в ODBC/JDBC. [#80334](https://github.com/ClickHouse/ClickHouse/pull/80334) ([Andrey Zvonov](https://github.com/zvonand)). +* Метрики количества дисков только для чтения и повреждённых дисков. Индикатор логирует сообщение при запуске DiskLocalCheckThread. [#80391](https://github.com/ClickHouse/ClickHouse/pull/80391) ([VicoWu](https://github.com/VicoWu)). * Реализована поддержка хранилища `s3_plain_rewritable` с проекциями. В предыдущих версиях объекты метаданных в S3, ссылающиеся на проекции, не обновлялись при их перемещении. Закрывает [#70258](https://github.com/ClickHouse/ClickHouse/issues/70258). [#80393](https://github.com/ClickHouse/ClickHouse/pull/80393) ([Sav](https://github.com/sberss)). -* Команда `SYSTEM UNFREEZE` больше не будет пытаться искать части на дисках только для чтения и с однократной записью. Исправляет [#80430](https://github.com/ClickHouse/ClickHouse/issues/80430). [#80432](https://github.com/ClickHouse/ClickHouse/pull/80432) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Понижен уровень логирования сообщений о слиянии частей. [#80476](https://github.com/ClickHouse/ClickHouse/pull/80476) ([Hans Krutzer](https://github.com/hkrutzer)). -* Изменено поведение по умолчанию механизма отсечения партиций (partition pruning) для таблиц Iceberg. [#80583](https://github.com/ClickHouse/ClickHouse/pull/80583) ([Melvyn Peignon](https://github.com/melvynator)). -* Добавлены два новых события ProfileEvents для наблюдаемости алгоритмов поиска по индексу: `IndexBinarySearchAlgorithm` и `IndexGenericExclusionSearchAlgorithm`. [#80679](https://github.com/ClickHouse/ClickHouse/pull/80679) ([Pablo Marcos](https://github.com/pamarcos)). -* Не выводить в логи предупреждение об отсутствии поддержки `MADV_POPULATE_WRITE` в старых версиях ядра (чтобы не засорять логи). [#80704](https://github.com/ClickHouse/ClickHouse/pull/80704) ([Robert Schulze](https://github.com/rschu1ze)). +* Команда `SYSTEM UNFREEZE` больше не пытается искать части данных на дисках только для чтения (readonly) и одноразовой записи (write-once). Это закрывает [#80430](https://github.com/ClickHouse/ClickHouse/issues/80430). [#80432](https://github.com/ClickHouse/ClickHouse/pull/80432) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Уменьшен уровень логирования сообщений о слитых партах. [#80476](https://github.com/ClickHouse/ClickHouse/pull/80476) ([Hans Krutzer](https://github.com/hkrutzer)). +* Изменено поведение обрезки партиций (partition pruning) по умолчанию для таблиц Iceberg. [#80583](https://github.com/ClickHouse/ClickHouse/pull/80583) ([Melvyn Peignon](https://github.com/melvynator)). +* Добавлены два новых ProfileEvents для наблюдаемости алгоритмов поиска по индексу: `IndexBinarySearchAlgorithm` и `IndexGenericExclusionSearchAlgorithm`. [#80679](https://github.com/ClickHouse/ClickHouse/pull/80679) ([Pablo Marcos](https://github.com/pamarcos)). +* Не выводить в логах предупреждения о неподдерживаемом `MADV_POPULATE_WRITE` на более старых версиях ядра (чтобы не засорять логи). [#80704](https://github.com/ClickHouse/ClickHouse/pull/80704) ([Robert Schulze](https://github.com/rschu1ze)). * Добавлена поддержка `Date32` и `DateTime64` в выражениях `TTL`. [#80710](https://github.com/ClickHouse/ClickHouse/pull/80710) ([Andrey Zvonov](https://github.com/zvonand)). * Скорректированы значения совместимости для `max_merge_delayed_streams_for_parallel_write`. [#80760](https://github.com/ClickHouse/ClickHouse/pull/80760) ([Azat Khuzhin](https://github.com/azat)). -* Исправлен сбой: если при попытке удалить временный файл (они используются для выгрузки временных данных на диск) в деструкторе выбрасывается исключение, программа может аварийно завершиться. [#80776](https://github.com/ClickHouse/ClickHouse/pull/80776) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Исправлен сбой: если при попытке удаления временного файла (они используются для сброса временных данных на диск) в деструкторе выбрасывалось исключение, программа могла аварийно завершиться. [#80776](https://github.com/ClickHouse/ClickHouse/pull/80776) ([Alexey Milovidov](https://github.com/alexey-milovidov)). * Добавлен модификатор `IF EXISTS` для команды `SYSTEM SYNC REPLICA`. [#80810](https://github.com/ClickHouse/ClickHouse/pull/80810) ([Raúl Marín](https://github.com/Algunenano)). -* Расширено сообщение об исключении «Having zero bytes, but read range is not finished...», добавлен столбец finished_download_time в таблицу `system.filesystem_cache`. [#80849](https://github.com/ClickHouse/ClickHouse/pull/80849) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Добавлен раздел об алгоритме поиска в вывод `EXPLAIN` при использовании его с `indexes = 1`. В нём отображается либо "binary search", либо "generic exclusion search". [#80881](https://github.com/ClickHouse/ClickHouse/pull/80881) ([Pablo Marcos](https://github.com/pamarcos)). -* В начале 2024 года значение `prefer_column_name_to_alias` было жёстко зашито как true для обработчика MySQL, поскольку новый анализатор по умолчанию не был включён. Теперь это можно убрать. [#80916](https://github.com/ClickHouse/ClickHouse/pull/80916) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* Теперь `system.iceberg_history` показывает историю для баз данных-каталогов, таких как Glue или Iceberg REST. Также столбцы `table_name` и `database_name` переименованы в `table` и `database` в `system.iceberg_history` для единообразия. [#80975](https://github.com/ClickHouse/ClickHouse/pull/80975) ([alesapin](https://github.com/alesapin)). -* Включён режим только чтения для табличной функции `merge`, поэтому для её использования больше не требуется привилегия `CREATE TEMPORARY TABLE`. [#80981](https://github.com/ClickHouse/ClickHouse/pull/80981) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). -* Улучшена интроспекция кэшей в памяти (теперь информация о кэшах предоставляется в `system.metrics` вместо неполного `system.asynchronouse_metrics`). В `dashboard.html` добавлен размер кэшей в памяти (в байтах). `VectorSimilarityIndexCacheSize`/`IcebergMetadataFilesCacheSize` были переименованы в `VectorSimilarityIndexCacheBytes`/`IcebergMetadataFilesCacheBytes`. [#81023](https://github.com/ClickHouse/ClickHouse/pull/81023) ([Azat Khuzhin](https://github.com/azat)). -* Пропускать базы данных с движками, которые не могут содержать таблицы `RocksDB`, при чтении из `system.rocksdb`. [#81083](https://github.com/ClickHouse/ClickHouse/pull/81083) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). -* Разрешить `filesystem_caches` и `named_collections` в конфигурационном файле `clickhouse-local`. [#81105](https://github.com/ClickHouse/ClickHouse/pull/81105) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Исправлена подсветка `PARTITION BY` в операторах `INSERT`. В предыдущих версиях `PARTITION BY` не подсвечивался как ключевое слово. [#81106](https://github.com/ClickHouse/ClickHouse/pull/81106) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Два небольших улучшения в веб-интерфейсе: — корректная обработка запросов без вывода, таких как `CREATE`, `INSERT` (до недавнего времени эти запросы приводили к бесконечной анимации загрузки); — при двойном щелчке по таблице выполняется прокрутка к началу. [#81131](https://github.com/ClickHouse/ClickHouse/pull/81131) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Метрика `MemoryResidentWithoutPageCache` показывает объём физической памяти, используемой серверным процессом в байтах, за вычетом кэша страниц в пользовательском пространстве (userspace page cache). Это даёт более точное представление о фактическом использовании памяти при задействованном кэше страниц в пользовательском пространстве. Когда кэш страниц в пользовательском пространстве отключён, это значение равно `MemoryResident`. [#81233](https://github.com/ClickHouse/ClickHouse/pull/81233) ([Jayme Bird](https://github.com/jaymebrd)). -* Пометить исключения, вручную записанные в журнал в client, local server, keeper client и приложении disks, как уже записанные, чтобы они не попадали в журнал дважды. [#81271](https://github.com/ClickHouse/ClickHouse/pull/81271) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). -* Параметры `use_skip_indexes_if_final` и `use_skip_indexes_if_final_exact_mode` теперь по умолчанию установлены в значение `True`. Запросы с модификатором `FINAL` теперь будут использовать skip-индексы (если применимо) для предварительного отбора гранул, а также читать любые дополнительные гранулы, попадающие в соответствующие диапазоны первичного ключа. Пользователи, которым требуется прежнее поведение с приблизительными/неточными результатами, могут установить `use_skip_indexes_if_final_exact_mode` в `FALSE` после тщательной оценки последствий. [#81331](https://github.com/ClickHouse/ClickHouse/pull/81331) ([Shankar Iyer](https://github.com/shankar-iyer)). -* Если в веб-интерфейсе у вас открыто несколько запросов, выполняется тот, под которым находится курсор. Продолжение [#80977](https://github.com/ClickHouse/ClickHouse/issues/80977). [#81354](https://github.com/ClickHouse/ClickHouse/pull/81354) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Этот pull request исправляет проблемы с реализацией `is_strict` в проверках монотонности функций преобразования. В настоящее время некоторые функции преобразования, такие как `toFloat64(UInt32)` и `toDate(UInt8)`, некорректно возвращают `is_strict` со значением false, когда должны возвращать true. [#81359](https://github.com/ClickHouse/ClickHouse/pull/81359) ([zoomxi](https://github.com/zoomxi)). -* При проверке того, соответствует ли `KeyCondition` непрерывному диапазону, когда ключ обёрнут цепочкой нестрогих функций, `Constraint::POINT` может потребовать преобразования в `Constraint::RANGE`. Например: `toDate(event_time) = '2025-06-03'` подразумевает диапазон для `event_time`: ['2025-06-03 00:00:00', '2025-06-04 00:00:00'). Этот PR исправляет данное поведение. [#81400](https://github.com/ClickHouse/ClickHouse/pull/81400) ([zoomxi](https://github.com/zoomxi)). -* Алиасы `clickhouse`/`ch` будут вызывать `clickhouse-client` вместо `clickhouse-local`, если заданы параметры `--host` или `--port`. Продолжение [#79422](https://github.com/ClickHouse/ClickHouse/issues/79422). Закрывает [#65252](https://github.com/ClickHouse/ClickHouse/issues/65252). [#81509](https://github.com/ClickHouse/ClickHouse/pull/81509) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Теперь, когда у нас есть данные о распределении времени ответа Keeper, мы можем настроить интервалы гистограммы метрик. [#81516](https://github.com/ClickHouse/ClickHouse/pull/81516) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). +* Сообщение об исключении «Having zero bytes, but read range is not finished...» расширено, в таблицу `system.filesystem_cache` добавлен столбец `finished_download_time`. [#80849](https://github.com/ClickHouse/ClickHouse/pull/80849) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Добавлен раздел с алгоритмом поиска в вывод `EXPLAIN` при использовании с indexes = 1. В нём отображается либо «binary search», либо «generic exclusion search». [#80881](https://github.com/ClickHouse/ClickHouse/pull/80881) ([Pablo Marcos](https://github.com/pamarcos)). +* В начале 2024 года параметр `prefer_column_name_to_alias` был жёстко зафиксирован в значение true для обработчика MySQL, поскольку новый анализатор не был включён по умолчанию. Теперь это жёсткое задание убрано. [#80916](https://github.com/ClickHouse/ClickHouse/pull/80916) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* Теперь `system.iceberg_history` показывает историю для баз данных каталогов, таких как glue или iceberg rest. Также для единообразия в `system.iceberg_history` столбцы `table_name` и `database_name` были переименованы в `table` и `database`. [#80975](https://github.com/ClickHouse/ClickHouse/pull/80975) ([alesapin](https://github.com/alesapin)). +* Добавлен режим только для чтения для табличной функции `merge`, поэтому для её использования больше не требуются права `CREATE TEMPORARY TABLE`. [#80981](https://github.com/ClickHouse/ClickHouse/pull/80981) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). +* Улучшена интроспекция кешей в памяти (информация о кешах теперь экспортируется в `system.metrics` вдобавок к неполному `system.asynchronouse_metrics`). В `dashboard.html` добавлен размер кешей в памяти (в байтах). `VectorSimilarityIndexCacheSize`/`IcebergMetadataFilesCacheSize` были переименованы в `VectorSimilarityIndexCacheBytes`/`IcebergMetadataFilesCacheBytes`. [#81023](https://github.com/ClickHouse/ClickHouse/pull/81023) ([Azat Khuzhin](https://github.com/azat)). +* Игнорировать базы данных с движками баз данных, которые не могут содержать таблицы `RocksDB` при чтении из `system.rocksdb`. [#81083](https://github.com/ClickHouse/ClickHouse/pull/81083) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +* Разрешено использование `filesystem_caches` и `named_collections` в конфигурационном файле `clickhouse-local`. [#81105](https://github.com/ClickHouse/ClickHouse/pull/81105) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Исправлена подсветка синтаксиса для `PARTITION BY` в запросах `INSERT`. В предыдущих версиях `PARTITION BY` не подсвечивалось как ключевое слово. [#81106](https://github.com/ClickHouse/ClickHouse/pull/81106) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Два небольших улучшения в веб-интерфейсе: — корректная обработка запросов без вывода, таких как `CREATE`, `INSERT` (до недавнего времени эти запросы приводили к бесконечной анимации загрузки); — при двойном щелчке по таблице страница прокручивается к началу. [#81131](https://github.com/ClickHouse/ClickHouse/pull/81131) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Метрика `MemoryResidentWithoutPageCache` показывает объём физической памяти, используемой серверным процессом, за вычетом userspace page cache, в байтах. Это даёт более точное представление о фактическом использовании памяти при использовании userspace page cache. Когда userspace page cache отключён, это значение равно `MemoryResident`. [#81233](https://github.com/ClickHouse/ClickHouse/pull/81233) ([Jayme Bird](https://github.com/jaymebrd)). +* Помечать исключения, вручную записанные в лог в client, local server, keeper client и приложении disks, как уже записанные, чтобы они не попадали в логи дважды. [#81271](https://github.com/ClickHouse/ClickHouse/pull/81271) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). +* Параметры `use_skip_indexes_if_final` и `use_skip_indexes_if_final_exact_mode` теперь по умолчанию установлены в `True`. Запросы с оператором `FINAL` теперь будут использовать пропускающие индексы (если применимо) для предварительного отбора гранул, а также считывать любые дополнительные гранулы, соответствующие диапазонам первичных ключей, попадающим под условие. Пользователи, которым требуется прежнее поведение с приблизительными/неточными результатами, могут установить `use_skip_indexes_if_final_exact_mode` в `FALSE` после тщательной оценки последствий. [#81331](https://github.com/ClickHouse/ClickHouse/pull/81331) ([Shankar Iyer](https://github.com/shankar-iyer)). +* Когда в веб-интерфейсе открыто несколько запросов, выполняется тот, который находится под курсором. Продолжение [#80977](https://github.com/ClickHouse/ClickHouse/issues/80977). [#81354](https://github.com/ClickHouse/ClickHouse/pull/81354) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Этот PR устраняет проблемы с реализацией `is_strict` в проверках монотонности для функций преобразования. В настоящее время некоторые функции преобразования, такие как `toFloat64(UInt32)` и `toDate(UInt8)`, некорректно возвращают `is_strict` со значением false, когда должны возвращать true. [#81359](https://github.com/ClickHouse/ClickHouse/pull/81359) ([zoomxi](https://github.com/zoomxi)). +* При проверке того, соответствует ли `KeyCondition` непрерывному диапазону, и если ключ обёрнут цепочкой нестрогих функций, может потребоваться преобразование `Constraint::POINT` в `Constraint::RANGE`. Например, выражение `toDate(event_time) = '2025-06-03'` подразумевает для `event_time` диапазон ['2025-06-03 00:00:00', '2025-06-04 00:00:00'). Этот PR исправляет такое поведение. [#81400](https://github.com/ClickHouse/ClickHouse/pull/81400) ([zoomxi](https://github.com/zoomxi)). +* Псевдонимы `clickhouse`/`ch` будут вызывать `clickhouse-client` вместо `clickhouse-local`, если указаны `--host` или `--port`. Продолжение [#79422](https://github.com/ClickHouse/ClickHouse/issues/79422). Закрывает [#65252](https://github.com/ClickHouse/ClickHouse/issues/65252). [#81509](https://github.com/ClickHouse/ClickHouse/pull/81509) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Теперь, когда у нас есть данные о распределении времени отклика Keeper, мы можем настроить интервалы гистограммы для метрик. [#81516](https://github.com/ClickHouse/ClickHouse/pull/81516) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). * Добавлено событие профилирования `PageCacheReadBytes`. [#81742](https://github.com/ClickHouse/ClickHouse/pull/81742) ([Kseniia Sumarokova](https://github.com/kssenii)). * Исправлена логическая ошибка в кэше файловой системы: «Having zero bytes but range is not finished». [#81868](https://github.com/ClickHouse/ClickHouse/pull/81868) ([Kseniia Sumarokova](https://github.com/kssenii)). +#### Исправление ошибки (некорректное поведение, заметное пользователю, в официальном стабильном релизе) - - - -#### Исправление ошибки (видимая пользователю неисправность в официальном стабильном релизе) - -* Исправлено параметризованное представление с запросом SELECT EXCEPT. Закрывает [#49447](https://github.com/ClickHouse/ClickHouse/issues/49447). [#57380](https://github.com/ClickHouse/ClickHouse/pull/57380) ([Nikolay Degterinsky](https://github.com/evillique)). -* Analyzer: исправлено имя проекции столбца после повышения типа столбца при `JOIN`. Закрывает [#63345](https://github.com/ClickHouse/ClickHouse/issues/63345). [#63519](https://github.com/ClickHouse/ClickHouse/pull/63519) ([Dmitry Novik](https://github.com/novikd)). -* Исправлена логическая ошибка при конфликте имён столбцов, когда включён analyzer_compatibility_join_using_top_level_identifier. [#75676](https://github.com/ClickHouse/ClickHouse/pull/75676) ([Vladimir Cherkasov](https://github.com/vdimir)). -* Исправлено использование CTE в проталкиваемых предикатах при включённом `allow_push_predicate_ast_for_distributed_subqueries`. Устранена проблема [#75647](https://github.com/ClickHouse/ClickHouse/issues/75647). Устранена проблема [#79672](https://github.com/ClickHouse/ClickHouse/issues/79672). [#77316](https://github.com/ClickHouse/ClickHouse/pull/77316) ([Dmitry Novik](https://github.com/novikd)). -* Исправлена проблема, из-за которой SYSTEM SYNC REPLICA LIGHTWEIGHT 'foo' сообщала об успешном завершении, даже когда указанная реплика не существовала. Теперь команда корректно проверяет наличие реплики в Keeper, прежде чем пытаться выполнить синхронизацию. [#78405](https://github.com/ClickHouse/ClickHouse/pull/78405) ([Jayme Bird](https://github.com/jaymebrd)). -* Исправлен сбой в очень специфическом случае, когда функция `currentDatabase` использовалась в разделе `CONSTRAINT` запросов `ON CLUSTER`. Закрывает [#78100](https://github.com/ClickHouse/ClickHouse/issues/78100). [#79070](https://github.com/ClickHouse/ClickHouse/pull/79070) ([pufit](https://github.com/pufit)). +* Исправлено параметризованное представление, использующее запрос SELECT EXCEPT. Закрывает [#49447](https://github.com/ClickHouse/ClickHouse/issues/49447). [#57380](https://github.com/ClickHouse/ClickHouse/pull/57380) ([Nikolay Degterinsky](https://github.com/evillique)). +* Analyzer: Исправлено имя проекции столбца после повышения типа столбца при выполнении JOIN. Закрывает [#63345](https://github.com/ClickHouse/ClickHouse/issues/63345). [#63519](https://github.com/ClickHouse/ClickHouse/pull/63519) ([Dmitry Novik](https://github.com/novikd)). +* Исправлена логическая ошибка при конфликте имён столбцов при включённой опции analyzer_compatibility_join_using_top_level_identifier. [#75676](https://github.com/ClickHouse/ClickHouse/pull/75676) ([Vladimir Cherkasov](https://github.com/vdimir)). +* Исправлено использование CTE в проталкиваемых предикатах при включённом параметре `allow_push_predicate_ast_for_distributed_subqueries`. Исправлены [#75647](https://github.com/ClickHouse/ClickHouse/issues/75647) и [#79672](https://github.com/ClickHouse/ClickHouse/issues/79672). [#77316](https://github.com/ClickHouse/ClickHouse/pull/77316) ([Dmitry Novik](https://github.com/novikd)). +* Исправляет проблему, при которой команда SYSTEM SYNC REPLICA LIGHTWEIGHT 'foo' ошибочно сообщала об успешном выполнении, даже если указанная реплика не существовала. Теперь команда корректно проверяет наличие реплики в Keeper перед попыткой синхронизации. [#78405](https://github.com/ClickHouse/ClickHouse/pull/78405) ([Jayme Bird](https://github.com/jaymebrd)). +* Исправлена ошибка, приводившая к аварийному завершению в очень специфической ситуации, когда функция `currentDatabase` использовалась в секциях `CONSTRAINT` для запросов `ON CLUSTER`. Закрывает [#78100](https://github.com/ClickHouse/ClickHouse/issues/78100). [#79070](https://github.com/ClickHouse/ClickHouse/pull/79070) ([pufit](https://github.com/pufit)). * Исправлена передача внешних ролей в межсерверных запросах. [#79099](https://github.com/ClickHouse/ClickHouse/pull/79099) ([Andrey Zvonov](https://github.com/zvonand)). -* Попробуйте использовать IColumn вместо Field в SingleValueDataGeneric. Это позволит исправить некорректные возвращаемые значения для некоторых агрегатных функций, таких как `argMax` для типов `Dynamic/Variant/JSON`. [#79166](https://github.com/ClickHouse/ClickHouse/pull/79166) ([Pavel Kruglov](https://github.com/Avogar)). -* Исправлено применение настроек `use_native_copy` и `allow_azure_native_copy` для Azure Blob Storage; поведение обновлено так, чтобы native copy использовалась только при совпадении учётных данных, что устраняет [#78964](https://github.com/ClickHouse/ClickHouse/issues/78964). [#79561](https://github.com/ClickHouse/ClickHouse/pull/79561) ([Smita Kulkarni](https://github.com/SmitaRKulkarni)). -* Исправлены логические ошибки, связанные с неизвестной областью происхождения столбца, возникавшие при проверке, коррелирован ли этот столбец. Исправлены [#78183](https://github.com/ClickHouse/ClickHouse/issues/78183). Исправлены [#79451](https://github.com/ClickHouse/ClickHouse/issues/79451). [#79727](https://github.com/ClickHouse/ClickHouse/pull/79727) ([Dmitry Novik](https://github.com/novikd)). -* Исправлены некорректные результаты при использовании GROUPING SETS с ColumnConst и Analyzer. [#79743](https://github.com/ClickHouse/ClickHouse/pull/79743) ([Andrey Zvonov](https://github.com/zvonand)). -* Исправлено дублирование результатов локального шарда при чтении из распределённой таблицы, когда локальная реплика устарела. [#79761](https://github.com/ClickHouse/ClickHouse/pull/79761) ([Eduard Karacharov](https://github.com/korowa)). -* Исправлен порядок сортировки NaN с отрицательным знаковым битом. [#79847](https://github.com/ClickHouse/ClickHouse/pull/79847) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). -* Теперь GROUP BY ALL не учитывает секцию GROUPING. [#79915](https://github.com/ClickHouse/ClickHouse/pull/79915) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* Исправлено некорректное объединение состояний для функций `TopK` / `TopKWeighted`, которое приводило к слишком большим значениям погрешности, даже когда ёмкость не была исчерпана. [#79939](https://github.com/ClickHouse/ClickHouse/pull/79939) ([Joel Höner](https://github.com/athre0z)). -* Учитывать параметр `readonly` в объектном хранилище `azure_blob_storage`. [#79954](https://github.com/ClickHouse/ClickHouse/pull/79954) ([Julia Kartseva](https://github.com/jkartseva)). -* Исправлены некорректные результаты запросов и аварийные завершения по нехватке памяти при использовании `match(column, '^…')` с символами, экранированными обратной косой чертой. [#79969](https://github.com/ClickHouse/ClickHouse/pull/79969) ([filimonov](https://github.com/filimonov)). -* Отключение разбиения Hive для озёр данных Частично решает [https://github.com/issues/assigned?issue=ClickHouse%7CClickHouse%7C79937](https://github.com/issues/assigned?issue=ClickHouse%7CClickHouse%7C79937). [#80005](https://github.com/ClickHouse/ClickHouse/pull/80005) ([Daniil Ivanik](https://github.com/divanik)). -* Пропускающие индексы с лямбда-выражениями не применялись. Исправлен случай, когда высокоуровневые функции в определении индекса в точности совпадают с функциями в запросе. [#80025](https://github.com/ClickHouse/ClickHouse/pull/80025) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). -* Исправлена версия метаданных при присоединении парта на реплике, выполняющей команду ATTACH_PART из журнала репликации. [#80038](https://github.com/ClickHouse/ClickHouse/pull/80038) ([Aleksei Filatov](https://github.com/aalexfvk)). -* Имена исполняемых пользовательских функций (eUDF) не добавляются в столбец `used_functions` таблицы `system.query_log`, в отличие от других функций. В этом PR реализовано добавление имени eUDF в случае её использования в запросе. [#80073](https://github.com/ClickHouse/ClickHouse/pull/80073) ([Kyamran](https://github.com/nibblerenush)). -* Исправлена логическая ошибка в формате Arrow с `LowCardinality(FixedString)`. [#80156](https://github.com/ClickHouse/ClickHouse/pull/80156) ([Pavel Kruglov](https://github.com/Avogar)). -* Исправлено чтение подстолбцов в движке Merge. [#80158](https://github.com/ClickHouse/ClickHouse/pull/80158) ([Pavel Kruglov](https://github.com/Avogar)). -* Исправлена ошибка при сравнении числовых типов в `KeyCondition`. [#80207](https://github.com/ClickHouse/ClickHouse/pull/80207) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* Исправлено возникновение AMBIGUOUS_COLUMN_NAME при применении ленивой материализации к таблице с проекциями. [#80251](https://github.com/ClickHouse/ClickHouse/pull/80251) ([Igor Nikonov](https://github.com/devcrafter)). -* Исправлена некорректная оптимизация подсчёта для строковых фильтров по префиксу, таких как LIKE 'ab_c%', при использовании неявных проекций. Это исправляет [#80250](https://github.com/ClickHouse/ClickHouse/issues/80250). [#80261](https://github.com/ClickHouse/ClickHouse/pull/80261) ([Amos Bird](https://github.com/amosbird)). -* Исправлена некорректная сериализация вложенных числовых полей в виде строк в документах MongoDB. Удалено ограничение максимальной глубины для документов MongoDB. [#80289](https://github.com/ClickHouse/ClickHouse/pull/80289) ([Kirill Nikiforov](https://github.com/allmazz)). -* Теперь выполняются менее строгие проверки метаданных для RMT в реплицируемой базе данных. Закрывает [#80296](https://github.com/ClickHouse/ClickHouse/issues/80296). [#80298](https://github.com/ClickHouse/ClickHouse/pull/80298) ([Nikolay Degterinsky](https://github.com/evillique)). -* Исправлено текстовое представление типов DateTime и DateTime64 для хранилища PostgreSQL. [#80301](https://github.com/ClickHouse/ClickHouse/pull/80301) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* Добавлена возможность использования `DateTime` с часовым поясом в таблицах `StripeLog`. Это закрывает [#44120](https://github.com/ClickHouse/ClickHouse/issues/44120). [#80304](https://github.com/ClickHouse/ClickHouse/pull/80304) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Отключено проталкивание фильтра вниз (filter-push-down) для предиката с недетерминированной функцией, если шаг плана запроса изменяет количество строк. Исправляет [#40273](https://github.com/ClickHouse/ClickHouse/issues/40273). [#80329](https://github.com/ClickHouse/ClickHouse/pull/80329) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). -* Исправлены возможные логические ошибки и сбои в проекциях с подстолбцами. [#80333](https://github.com/ClickHouse/ClickHouse/pull/80333) ([Pavel Kruglov](https://github.com/Avogar)). -* Исправлена ошибка `NOT_FOUND_COLUMN_IN_BLOCK`, вызванная оптимизацией проталкивания фильтра (filter-push-down) на логическом шаге JOIN в случае, когда выражение `ON` не является простым равенством. Исправлены [#79647](https://github.com/ClickHouse/ClickHouse/issues/79647) и [#77848](https://github.com/ClickHouse/ClickHouse/issues/77848). [#80360](https://github.com/ClickHouse/ClickHouse/pull/80360) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). +* Попробуйте использовать IColumn вместо Field в SingleValueDataGeneric. Это устраняет некорректные возвращаемые значения некоторых агрегатных функций, например `argMax` для типов `Dynamic/Variant/JSON`. [#79166](https://github.com/ClickHouse/ClickHouse/pull/79166) ([Pavel Kruglov](https://github.com/Avogar)). +* Исправлено применение параметров use_native_copy и allow_azure_native_copy для Azure Blob Storage, а также обновлён механизм, который использует native copy только при совпадении учетных данных, что устраняет проблему [#78964](https://github.com/ClickHouse/ClickHouse/issues/78964). [#79561](https://github.com/ClickHouse/ClickHouse/pull/79561) ([Smita Kulkarni](https://github.com/SmitaRKulkarni)). +* Исправлены логические ошибки, связанные с неопределённой областью происхождения столбца, возникавшие при проверке, коррелирован ли этот столбец. Исправлены [#78183](https://github.com/ClickHouse/ClickHouse/issues/78183). Исправлены [#79451](https://github.com/ClickHouse/ClickHouse/issues/79451). [#79727](https://github.com/ClickHouse/ClickHouse/pull/79727) ([Dmitry Novik](https://github.com/novikd)). +* Исправлены некорректные результаты для grouping sets при использовании ColumnConst и Analyzer. [#79743](https://github.com/ClickHouse/ClickHouse/pull/79743) ([Andrey Zvonov](https://github.com/zvonand)). +* Исправлено дублирование результатов локального шарда при чтении из распределённой таблицы в случае устаревшей локальной реплики. [#79761](https://github.com/ClickHouse/ClickHouse/pull/79761) ([Eduard Karacharov](https://github.com/korowa)). +* Исправлен порядок сортировки значений NaN с отрицательным знаковым битом. [#79847](https://github.com/ClickHouse/ClickHouse/pull/79847) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +* Теперь `GROUP BY ALL` не учитывает конструкцию `GROUPING`. [#79915](https://github.com/ClickHouse/ClickHouse/pull/79915) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* Исправлено некорректное слияние состояний для функций `TopK` / `TopKWeighted`, из-за которого возникали чрезмерные значения ошибки даже при неиспользованной до конца ёмкости. [#79939](https://github.com/ClickHouse/ClickHouse/pull/79939) ([Joel Höner](https://github.com/athre0z)). +* Теперь учитывается настройка `readonly` в объектном хранилище `azure_blob_storage`. [#79954](https://github.com/ClickHouse/ClickHouse/pull/79954) ([Julia Kartseva](https://github.com/jkartseva)). +* Исправлены некорректные результаты запросов и аварийные завершения из-за нехватки памяти при использовании `match(column, '^…')` с символами, экранированными обратной косой чертой. [#79969](https://github.com/ClickHouse/ClickHouse/pull/79969) ([filimonov](https://github.com/filimonov)). +* Отключено секционирование в стиле Hive для озёр данных. Частично решает [https://github.com/issues/assigned?issue=ClickHouse%7CClickHouse%7C79937](https://github.com/issues/assigned?issue=ClickHouse%7CClickHouse%7C79937). [#80005](https://github.com/ClickHouse/ClickHouse/pull/80005) ([Daniil Ivanik](https://github.com/divanik)). +* Пропускающие индексы с lambda-выражениями не применялись. Исправлен случай, когда высокоуровневые функции в определении индекса в точности совпадают с функциями в запросе. [#80025](https://github.com/ClickHouse/ClickHouse/pull/80025) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). +* Исправлена версия метаданных, используемая при присоединении части на реплике, выполняющей команду ATTACH_PART из журнала репликации. [#80038](https://github.com/ClickHouse/ClickHouse/pull/80038) ([Aleksei Filatov](https://github.com/aalexfvk)). +* Имена исполняемых пользовательских определяемых функций (eUDF) не добавляются в столбец `used_functions` таблицы `system.query_log`, в отличие от других функций. В этом PR реализовано добавление имени eUDF в случае её использования в запросе. [#80073](https://github.com/ClickHouse/ClickHouse/pull/80073) ([Kyamran](https://github.com/nibblerenush)). +* Исправлена логическая ошибка в формате Arrow при работе с LowCardinality(FixedString). [#80156](https://github.com/ClickHouse/ClickHouse/pull/80156) ([Pavel Kruglov](https://github.com/Avogar)). +* Исправлено чтение подколонок в движке Merge. [#80158](https://github.com/ClickHouse/ClickHouse/pull/80158) ([Pavel Kruglov](https://github.com/Avogar)). +* Исправлена ошибка в сравнении числовых типов в `KeyCondition`. [#80207](https://github.com/ClickHouse/ClickHouse/pull/80207) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* Исправлена ошибка AMBIGUOUS_COLUMN_NAME, возникавшая при применении ленивой материализации к таблице с проекциями. [#80251](https://github.com/ClickHouse/ClickHouse/pull/80251) ([Igor Nikonov](https://github.com/devcrafter)). +* Исправлена некорректная оптимизация вычисления count() для фильтров по строковому префиксу вида LIKE 'ab_c%' при использовании неявных проекций. Это исправляет [#80250](https://github.com/ClickHouse/ClickHouse/issues/80250). [#80261](https://github.com/ClickHouse/ClickHouse/pull/80261) ([Amos Bird](https://github.com/amosbird)). +* Исправлена некорректная сериализация вложенных числовых полей как строк в документах MongoDB. Удалено ограничение на максимальную глубину вложенности документов MongoDB. [#80289](https://github.com/ClickHouse/ClickHouse/pull/80289) ([Kirill Nikiforov](https://github.com/allmazz)). +* Ослаблены проверки метаданных для RMT в реплицируемой базе данных. Закрывает [#80296](https://github.com/ClickHouse/ClickHouse/issues/80296). [#80298](https://github.com/ClickHouse/ClickHouse/pull/80298) ([Nikolay Degterinsky](https://github.com/evillique)). +* Исправлено текстовое представление типов DateTime и DateTime64 при сохранении в PostgreSQL. [#80301](https://github.com/ClickHouse/ClickHouse/pull/80301) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* Добавлена поддержка `DateTime` с часовым поясом в таблицах `StripeLog`. Это закрывает [#44120](https://github.com/ClickHouse/ClickHouse/issues/44120). [#80304](https://github.com/ClickHouse/ClickHouse/pull/80304) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Отключён push-down фильтра для предиката с недетерминированной функцией, если шаг плана запроса изменяет количество строк. Исправлено [#40273](https://github.com/ClickHouse/ClickHouse/issues/40273). [#80329](https://github.com/ClickHouse/ClickHouse/pull/80329) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). +* Исправлены потенциальные логические ошибки и сбои в проекциях с подстолбцами. [#80333](https://github.com/ClickHouse/ClickHouse/pull/80333) ([Pavel Kruglov](https://github.com/Avogar)). +* Исправлена ошибка `NOT_FOUND_COLUMN_IN_BLOCK`, вызванная оптимизацией проталкивания фильтра (filter-push-down) на этапе логического JOIN sep в случае, когда выражение `ON` не является тривиальным равенством. Исправляет [#79647](https://github.com/ClickHouse/ClickHouse/issues/79647) и [#77848](https://github.com/ClickHouse/ClickHouse/issues/77848). [#80360](https://github.com/ClickHouse/ClickHouse/pull/80360) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). * Исправлен некорректный результат при чтении ключей в обратном порядке в секционированных таблицах. Это исправляет [#79987](https://github.com/ClickHouse/ClickHouse/issues/79987). [#80448](https://github.com/ClickHouse/ClickHouse/pull/80448) ([Amos Bird](https://github.com/amosbird)). -* Исправлена некорректная сортировка в таблицах с ключом типа Nullable и включённым параметром optimize_read_in_order. [#80515](https://github.com/ClickHouse/ClickHouse/pull/80515) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). -* Исправлена проблема, из-за которой операция DROP для обновляемого материализованного представления зависала, если представление было приостановлено с помощью SYSTEM STOP REPLICATED VIEW. [#80543](https://github.com/ClickHouse/ClickHouse/pull/80543) ([Michael Kolupaev](https://github.com/al13n321)). -* Исправлена ошибка 'Cannot find column' при использовании константного кортежа в распределённом запросе. [#80596](https://github.com/ClickHouse/ClickHouse/pull/80596) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* Исправлена функция `shardNum` в таблицах Distributed с `join_use_nulls`. [#80612](https://github.com/ClickHouse/ClickHouse/pull/80612) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). +* Исправлена некорректная сортировка в таблицах с ключом, допускающим NULL, и включённым optimize_read_in_order. [#80515](https://github.com/ClickHouse/ClickHouse/pull/80515) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +* Исправлена проблема, из‑за которой операция DROP для обновляемого материализованного представления зависала, если это представление было приостановлено с помощью SYSTEM STOP REPLICATED VIEW. [#80543](https://github.com/ClickHouse/ClickHouse/pull/80543) ([Michael Kolupaev](https://github.com/al13n321)). +* Исправлена ошибка 'Cannot find column' при использовании кортежа-константы в распределённом запросе. [#80596](https://github.com/ClickHouse/ClickHouse/pull/80596) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* Исправлена функция `shardNum` в таблицах типа Distributed при использовании `join_use_nulls`. [#80612](https://github.com/ClickHouse/ClickHouse/pull/80612) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). * Исправлен некорректный результат при чтении столбца, который присутствует только в части таблиц в движке Merge. [#80643](https://github.com/ClickHouse/ClickHouse/pull/80643) ([Pavel Kruglov](https://github.com/Avogar)). -* Исправлена возможная проблема с протоколом SSH (из-за зависания в replxx). [#80688](https://github.com/ClickHouse/ClickHouse/pull/80688) ([Azat Khuzhin](https://github.com/azat)). -* Метка времени в таблице iceberg_history теперь должна быть правильной. [#80711](https://github.com/ClickHouse/ClickHouse/pull/80711) ([Melvyn Peignon](https://github.com/melvynator)). -* Исправлен возможный сбой при неудачной регистрации словаря (когда `CREATE DICTIONARY` завершалась ошибкой `CANNOT_SCHEDULE_TASK`, в реестре словарей мог оставаться висячий указатель, что впоследствии приводило к падению). [#80714](https://github.com/ClickHouse/ClickHouse/pull/80714) ([Azat Khuzhin](https://github.com/azat)). -* Исправлена обработка glob-шаблонов enum с единственным элементом в табличных функциях объектного хранилища. [#80716](https://github.com/ClickHouse/ClickHouse/pull/80716) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* Исправлена потенциальная проблема протокола SSH (из-за зависания в replxx). [#80688](https://github.com/ClickHouse/ClickHouse/pull/80688) ([Azat Khuzhin](https://github.com/azat)). +* Временная метка в таблице iceberg_history теперь должна быть правильной. [#80711](https://github.com/ClickHouse/ClickHouse/pull/80711) ([Melvyn Peignon](https://github.com/melvynator)). +* Устранён потенциальный сбой при неудачной регистрации словаря (когда `CREATE DICTIONARY` завершался с ошибкой `CANNOT_SCHEDULE_TASK`, в реестре словарей мог оставаться висячий указатель, что впоследствии приводило к аварийному завершению). [#80714](https://github.com/ClickHouse/ClickHouse/pull/80714) ([Azат Khuzhin](https://github.com/azat)). +* Исправлена обработка glob-шаблонов перечислений с одним элементом в табличных функциях для объектного хранилища. [#80716](https://github.com/ClickHouse/ClickHouse/pull/80716) ([Konstantин Bogdanov](https://github.com/thevar1able)). * Исправлен неверный тип результата функций сравнения с Tuple(Dynamic) и String, приводивший к логической ошибке. [#80728](https://github.com/ClickHouse/ClickHouse/pull/80728) ([Pavel Kruglov](https://github.com/Avogar)). -* Добавлена недостающая поддержка типа данных `timestamp_ntz` в Unity Catalog. Исправляет [#79535](https://github.com/ClickHouse/ClickHouse/issues/79535) и [#79875](https://github.com/ClickHouse/ClickHouse/issues/79875). [#80740](https://github.com/ClickHouse/ClickHouse/pull/80740) ([alesapin](https://github.com/alesapin)). +* Добавлена недостающая поддержка типа данных `timestamp_ntz` для Unity Catalog. Исправлены [#79535](https://github.com/ClickHouse/ClickHouse/issues/79535) и [#79875](https://github.com/ClickHouse/ClickHouse/issues/79875). [#80740](https://github.com/ClickHouse/ClickHouse/pull/80740) ([alesapin](https://github.com/alesapin)). * Исправлена ошибка `THERE_IS_NO_COLUMN` для распределённых запросов с `IN cte`. Устраняет [#75032](https://github.com/ClickHouse/ClickHouse/issues/75032). [#80757](https://github.com/ClickHouse/ClickHouse/pull/80757) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). -* Исправлена проблема чрезмерного количества файлов (приводила к чрезмерному использованию памяти) для внешнего ORDER BY. [#80777](https://github.com/ClickHouse/ClickHouse/pull/80777) ([Azat Khuzhin](https://github.com/azat)). +* Исправлена проблема с чрезмерным количеством файлов (что приводило к чрезмерному использованию памяти) для внешнего ORDER BY. [#80777](https://github.com/ClickHouse/ClickHouse/pull/80777) ([Azat Khuzhin](https://github.com/azat)). * Этот PR может закрыть [#80742](https://github.com/ClickHouse/ClickHouse/issues/80742). [#80783](https://github.com/ClickHouse/ClickHouse/pull/80783) ([zoomxi](https://github.com/zoomxi)). -* Исправлен сбой в Kafka из‑за того, что get_member_id() пыталась создать std::string из NULL (вероятно, проблема проявлялась только при неуспешном подключении к брокеру). [#80793](https://github.com/ClickHouse/ClickHouse/pull/80793) ([Azat Khuzhin](https://github.com/azat)). -* Корректное ожидание завершения работы потребителей перед остановкой движка Kafka (активные потребители после остановки могут приводить к срабатыванию различных отладочных assert-ов, а также продолжать считывать данные у брокеров в фоновом режиме после удаления/открепления таблицы). [#80795](https://github.com/ClickHouse/ClickHouse/pull/80795) ([Azat Khuzhin](https://github.com/azat)). -* Исправлена ошибка `NOT_FOUND_COLUMN_IN_BLOCK`, возникавшая из-за оптимизации `predicate-push-down`. Исправляет [#80443](https://github.com/ClickHouse/ClickHouse/issues/80443). [#80834](https://github.com/ClickHouse/ClickHouse/pull/80834) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). -* Исправлена логическая ошибка при обработке шаблона со звездочкой (*) в табличной функции при выполнении JOIN с USING. [#80894](https://github.com/ClickHouse/ClickHouse/pull/80894) ([Vladimir Cherkasov](https://github.com/vdimir)). -* Исправлен учет использования памяти в кэше файлов метаданных Iceberg. [#80904](https://github.com/ClickHouse/ClickHouse/pull/80904) ([Azat Khuzhin](https://github.com/azat)). -* Исправлено неверное секционирование с nullable-ключом партиционирования. [#80913](https://github.com/ClickHouse/ClickHouse/pull/80913) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). -* Исправлена ошибка `Table does not exist` для распределённых запросов с проталкиванием предиката (`allow_push_predicate_ast_for_distributed_subqueries=1`), когда исходная таблица отсутствует на сервере-инициаторе запроса. Исправляет [#77281](https://github.com/ClickHouse/ClickHouse/issues/77281). [#80915](https://github.com/ClickHouse/ClickHouse/pull/80915) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). +* Исправлен сбой в Kafka из‑за того, что функция get_member_id() создавала std::string из NULL (ошибка, вероятно, проявлялась только в случае неудачного подключения к брокеру). [#80793](https://github.com/ClickHouse/ClickHouse/pull/80793) ([Azat Khuzhin](https://github.com/azat)). +* Корректно дожидаться завершения потребителей перед остановкой движка Kafka (активные потребители после остановки могут приводить к срабатыванию различных отладочных assert'ов, а также продолжать считывать данные от брокеров в фоновом режиме после удаления или отсоединения таблицы). [#80795](https://github.com/ClickHouse/ClickHouse/pull/80795) ([Azat Khuzhin](https://github.com/azat)). +* Исправлена ошибка `NOT_FOUND_COLUMN_IN_BLOCK`, вызванная оптимизацией `predicate-push-down`. Исправляет [#80443](https://github.com/ClickHouse/ClickHouse/issues/80443). [#80834](https://github.com/ClickHouse/ClickHouse/pull/80834) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). +* Исправлена логическая ошибка при разрешении звёздочного шаблона (*) в табличной функции в JOIN с USING. [#80894](https://github.com/ClickHouse/ClickHouse/pull/80894) ([Vladimir Cherkasov](https://github.com/vdimir)). +* Исправлен учет памяти для кэша файлов метаданных Iceberg. [#80904](https://github.com/ClickHouse/ClickHouse/pull/80904) ([Azat Khuzhin](https://github.com/azat)). +* Исправлено некорректное секционирование с ключом секционирования типа Nullable. [#80913](https://github.com/ClickHouse/ClickHouse/pull/80913) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +* Исправлена ошибка `Table does not exist` для распределённых запросов с проталкиванием предиката (`allow_push_predicate_ast_for_distributed_subqueries=1`), когда исходная таблица отсутствует на инициаторе запроса. Исправляет [#77281](https://github.com/ClickHouse/ClickHouse/issues/77281). [#80915](https://github.com/ClickHouse/ClickHouse/pull/80915) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). * Исправлена логическая ошибка во вложенных функциях с именованными окнами. [#80926](https://github.com/ClickHouse/ClickHouse/pull/80926) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). -* Исправлена обработка экстремальных значений для столбцов с типом Nullable и столбцов с плавающей точкой. [#80970](https://github.com/ClickHouse/ClickHouse/pull/80970) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). -* Исправлено возможное аварийное завершение при выполнении запроса к system.tables (вероятно при дефиците памяти). [#80976](https://github.com/ClickHouse/ClickHouse/pull/80976) ([Azat Khuzhin](https://github.com/azat)). -* Исправлено атомарное переименование с усечением для файлов, у которых тип сжатия определяется по расширению файла. [#80979](https://github.com/ClickHouse/ClickHouse/pull/80979) ([Pablo Marcos](https://github.com/pamarcos)). -* Исправлена функция ErrorCodes::getName. [#81032](https://github.com/ClickHouse/ClickHouse/pull/81032) ([RinChanNOW](https://github.com/RinChanNOWWW)). -* Исправлена ошибка, из-за которой пользователь не мог получить список таблиц в Unity Catalog без прав на каждую из них. Теперь все таблицы корректно перечисляются, а попытка чтения из таблицы с ограниченным доступом приведёт к исключению. [#81044](https://github.com/ClickHouse/ClickHouse/pull/81044) ([alesapin](https://github.com/alesapin)). -* Теперь ClickHouse игнорирует ошибки и неожиданные ответы от каталогов озера данных в запросе `SHOW TABLES`. Исправляет [#79725](https://github.com/ClickHouse/ClickHouse/issues/79725). [#81046](https://github.com/ClickHouse/ClickHouse/pull/81046) ([alesapin](https://github.com/alesapin)). -* Исправлен разбор значения `DateTime64` из целых чисел в `JSONExtract` и при разборе типа данных `JSON`. [#81050](https://github.com/ClickHouse/ClickHouse/pull/81050) ([Pavel Kruglov](https://github.com/Avogar)). -* Учитывать настройку date_time_input_format в кэше автоматического определения схемы. [#81052](https://github.com/ClickHouse/ClickHouse/pull/81052) ([Pavel Kruglov](https://github.com/Avogar)). -* Исправлен сбой при операции INSERT, если таблица была удалена (DROP) после запуска запроса, но до отправки данных. [#81053](https://github.com/ClickHouse/ClickHouse/pull/81053) ([Azat Khuzhin](https://github.com/azat)). -* Исправлена ошибка использования неинициализированного значения в quantileDeterministic. [#81062](https://github.com/ClickHouse/ClickHouse/pull/81062) ([Azat Khuzhin](https://github.com/azat)). -* Исправить управление счётчиком жёстких ссылок для транзакций диска `metadatastoragefromdisk`. Добавить тесты. [#81066](https://github.com/ClickHouse/ClickHouse/pull/81066) ([Sema Checherinda](https://github.com/CheSema)). -* Имена пользовательских функций (UDF) не записываются в таблицу `system.query_log` в отличие от имён других функций. Этот PR добавляет запись имени UDF в один из двух столбцов `used_executable_user_defined_functions` или `used_sql_user_defined_functions`, если UDF была использована в запросе. [#81101](https://github.com/ClickHouse/ClickHouse/pull/81101) ([Kyamran](https://github.com/nibblerenush)). -* Исправлены ошибки `Too large size ... passed to allocator` и возможные сбои при вставках через HTTP-протокол с текстовыми форматами (`JSON`, `Values` и др.) при пропуске полей типа `Enum`. [#81145](https://github.com/ClickHouse/ClickHouse/pull/81145) ([Anton Popov](https://github.com/CurtizJ)). -* Исправлена ошибка LOGICAL_ERROR при наличии разреженного столбца (Sparse column) в блоке INSERT, направляемом в не-MT материализованное представление. [#81161](https://github.com/ClickHouse/ClickHouse/pull/81161) ([Azat Khuzhin](https://github.com/azat)). -* Исправлена ошибка `Unknown table expression identifier` для `distributed_product_mode_local=local` в режиме кросс-репликации. [#81162](https://github.com/ClickHouse/ClickHouse/pull/81162) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). +* Исправлены экстремумы для столбцов Nullable и с плавающей запятой. [#80970](https://github.com/ClickHouse/ClickHouse/pull/80970) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +* Исправлен возможный сбой при выполнении запросов к `system.tables` (вероятно возникающий при недостатке памяти). [#80976](https://github.com/ClickHouse/ClickHouse/pull/80976) ([Azat Khuzhin](https://github.com/azat)). +* Исправлена работа атомарного переименования с усечением для файлов, сжатие которых определяется по их расширению. [#80979](https://github.com/ClickHouse/ClickHouse/pull/80979) ([Pablo Marcos](https://github.com/pamarcos)). +* Исправлен метод `ErrorCodes::getName`. [#81032](https://github.com/ClickHouse/ClickHouse/pull/81032) ([RinChanNOW](https://github.com/RinChanNOWWW)). +* Исправлена ошибка, из-за которой пользователь не мог получить список таблиц в Unity Catalog без прав на все таблицы. Теперь все таблицы корректно перечисляются, а попытка чтения из таблицы с ограниченным доступом вызовет исключение. [#81044](https://github.com/ClickHouse/ClickHouse/pull/81044) ([alesapin](https://github.com/alesapin)). +* Теперь ClickHouse игнорирует ошибки и неожиданные ответы от каталогов data lake в запросе `SHOW TABLES`. Исправляет [#79725](https://github.com/ClickHouse/ClickHouse/issues/79725). [#81046](https://github.com/ClickHouse/ClickHouse/pull/81046) ([alesapin](https://github.com/alesapin)). +* Исправлен разбор значений `DateTime64` из целых чисел в `JSONExtract` и при разборе типа `JSON`. [#81050](https://github.com/ClickHouse/ClickHouse/pull/81050) ([Pavel Kruglov](https://github.com/Avogar)). +* Учесть параметр date_time_input_format в кэше определения схемы. [#81052](https://github.com/ClickHouse/ClickHouse/pull/81052) ([Pavel Kruglov](https://github.com/Avogar)). +* Исправлен сбой при INSERT, если таблица была удалена (DROP) после начала запроса, но до отправки столбцов. [#81053](https://github.com/ClickHouse/ClickHouse/pull/81053) ([Azat Khuzhin](https://github.com/azat)). +* Исправлено использование неинициализированного значения в quantileDeterministic. [#81062](https://github.com/ClickHouse/ClickHouse/pull/81062) ([Azat Khuzhin](https://github.com/azat)). +* Исправлено управление счётчиком жёстких ссылок для транзакций диска metadatastoragefromdisk. Добавлены тесты. [#81066](https://github.com/ClickHouse/ClickHouse/pull/81066) ([Sema Checherinda](https://github.com/CheSema)). +* Имена пользовательских функций (UDF) не добавляются в таблицу `system.query_log` в отличие от других функций. Этот pull request добавляет запись имени UDF в один из двух столбцов — `used_executable_user_defined_functions` или `used_sql_user_defined_functions`, если UDF использовалась в запросе. [#81101](https://github.com/ClickHouse/ClickHouse/pull/81101) ([Kyamran](https://github.com/nibblerenush)). +* Исправлены ошибки `Too large size ... passed to allocator` и возможные сбои при вставке данных по протоколу HTTP с использованием текстовых форматов (`JSON`, `Values`, ...) и пропущенных полей типа `Enum`. [#81145](https://github.com/ClickHouse/ClickHouse/pull/81145) ([Anton Popov](https://github.com/CurtizJ)). +* Исправлена ошибка LOGICAL_ERROR при наличии разрежённого столбца (Sparse column) в блоке INSERT, отправляемом в не многопоточное материализованное представление (non-MT MV). [#81161](https://github.com/ClickHouse/ClickHouse/pull/81161) ([Azat Khuzhin](https://github.com/azat)). +* Исправлена ошибка `Unknown table expression identifier` при использовании `distributed_product_mode_local=local` при кросс-репликации. [#81162](https://github.com/ClickHouse/ClickHouse/pull/81162) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). * Исправлено некорректное кэширование количества строк в файлах Parquet после фильтрации. [#81184](https://github.com/ClickHouse/ClickHouse/pull/81184) ([Michael Kolupaev](https://github.com/al13n321)). -* Исправлен параметр fs cache max_size_to_total_space при использовании с относительным путем к каталогу кэша. [#81237](https://github.com/ClickHouse/ClickHouse/pull/81237) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Исправлена ошибка, из-за которой clickhouse-local завершался с ошибкой при выводе константных кортежей или значений типа Map в формате Parquet. [#81249](https://github.com/ClickHouse/ClickHouse/pull/81249) ([Michael Kolupaev](https://github.com/al13n321)). -* Проверять смещения массивов, получаемых по сети. [#81269](https://github.com/ClickHouse/ClickHouse/pull/81269) ([Azat Khuzhin](https://github.com/azat)). -* Исправлен крайний случай в запросе, который выполняет `JOIN` пустых таблиц и использует оконные функции. Ошибка приводила к взрывному росту количества параллельных потоков, что вызывало переполнение памяти (OOM). [#81299](https://github.com/ClickHouse/ClickHouse/pull/81299) ([Alexander Gololobov](https://github.com/davenger)). -* Исправления для кластерных функций data lake (`deltaLakeCluster`, `icebergCluster` и т.д.): (1) исправлена потенциальная ошибка сегментации в `DataLakeConfiguration` при использовании функции `Cluster` со старым анализатором; (2) убраны дублирующиеся обновления метаданных data lake (лишние запросы к объектному хранилищу); (3) исправлен избыточный листинг в объектном хранилище, когда формат явно не указан (что уже было сделано для некластерных движков data lake). [#81300](https://github.com/ClickHouse/ClickHouse/pull/81300) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Флаг force_restore_data теперь восстанавливает потерянные метаданные Keeper. [#81324](https://github.com/ClickHouse/ClickHouse/pull/81324) ([Raúl Marín](https://github.com/Algunenano)). -* Исправлена ошибка региона в delta-kernel. Исправляет [#79914](https://github.com/ClickHouse/ClickHouse/issues/79914). [#81353](https://github.com/ClickHouse/ClickHouse/pull/81353) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Отключен некорректный JIT для divideOrNull. [#81370](https://github.com/ClickHouse/ClickHouse/pull/81370) ([Raúl Marín](https://github.com/Algunenano)). -* Исправлена ошибка вставки данных, возникавшая, когда у таблицы MergeTree было слишком длинное имя столбца секции. [#81390](https://github.com/ClickHouse/ClickHouse/pull/81390) ([hy123q](https://github.com/haoyangqian)). -* Бэкпортировано в [#81957](https://github.com/ClickHouse/ClickHouse/issues/81957): исправлена возможная аварийная остановка в `Aggregator` при возникновении исключения во время слияния. [#81450](https://github.com/ClickHouse/ClickHouse/pull/81450) ([Nikita Taranov](https://github.com/nickitat)). -* Не сохраняем содержимое нескольких файлов манифестов в памяти. [#81470](https://github.com/ClickHouse/ClickHouse/pull/81470) ([Daniil Ivanik](https://github.com/divanik)). -* Исправлено возможное аварийное завершение во время остановки фоновых пулов (`background_.*pool_size`). [#81473](https://github.com/ClickHouse/ClickHouse/pull/81473) ([Azat Khuzhin](https://github.com/azat)). -* Исправлен выход за границы буфера при чтении в формате `Npy`, происходивший при записи в таблицу с движком `URL`. Это закрывает [#81356](https://github.com/ClickHouse/ClickHouse/issues/81356). [#81502](https://github.com/ClickHouse/ClickHouse/pull/81502) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Возможно, что веб-интерфейс отобразит `NaN%` (типичные проблемы JavaScript). [#81507](https://github.com/ClickHouse/ClickHouse/pull/81507) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Исправлен `DatabaseReplicated` при `database_replicated_enforce_synchronous_settings=1`. [#81564](https://github.com/ClickHouse/ClickHouse/pull/81564) ([Azat Khuzhin](https://github.com/azat)). -* Исправлен порядок сортировки типов LowCardinality(Nullable(...)). [#81583](https://github.com/ClickHouse/ClickHouse/pull/81583) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). -* Сервер не должен поддерживать HTTP‑соединение, если запрос не был полностью прочитан из сокета. [#81595](https://github.com/ClickHouse/ClickHouse/pull/81595) ([Sema Checherinda](https://github.com/CheSema)). -* Теперь скалярные коррелированные подзапросы возвращают результат выражения проекции, допускающий NULL. Исправлен случай, когда коррелированный подзапрос возвращает пустой набор результатов. [#81632](https://github.com/ClickHouse/ClickHouse/pull/81632) ([Dmitry Novik](https://github.com/novikd)). +* Исправлен параметр fs cache max_size_to_total_space при использовании с относительным путём к кэшу. [#81237](https://github.com/ClickHouse/ClickHouse/pull/81237) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Исправлено падение clickhouse-local при выводе в формате Parquet константных кортежей или отображений. [#81249](https://github.com/ClickHouse/ClickHouse/pull/81249) ([Michael Kolupaev](https://github.com/al13n321)). +* Проверка смещений массивов, полученных по сети. [#81269](https://github.com/ClickHouse/ClickHouse/pull/81269) ([Azat Khuzhin](https://github.com/azat)). +* Исправлен граничный случай в запросе, выполняющем `JOIN` над пустыми таблицами и использующем оконные функции. Ошибка приводила к взрывному росту числа параллельных потоков, что вызывало OOM. [#81299](https://github.com/ClickHouse/ClickHouse/pull/81299) ([Alexander Gololobov](https://github.com/davenger)). +* Исправления для кластерных функций data lake (`deltaLakeCluster`, `icebergCluster` и т. д.): (1) исправлен потенциальный сегфолт в `DataLakeConfiguration` при использовании функции `Cluster` со старым анализатором; (2) удалены дублирующие обновления метаданных data lake (лишние запросы к объектному хранилищу); (3) исправлен избыточный листинг в объектном хранилище, когда формат явно не указан (что уже было реализовано для некластерных движков data lake). [#81300](https://github.com/ClickHouse/ClickHouse/pull/81300) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Флаг force_restore_data восстанавливает потерянные метаданные Keeper. [#81324](https://github.com/ClickHouse/ClickHouse/pull/81324) ([Raúl Marín](https://github.com/Algunenano)). +* Исправлена ошибка региона в delta-kernel. Исправляет проблему [#79914](https://github.com/ClickHouse/ClickHouse/issues/79914). [#81353](https://github.com/ClickHouse/ClickHouse/pull/81353) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Отключена некорректная JIT-компиляция для divideOrNull. [#81370](https://github.com/ClickHouse/ClickHouse/pull/81370) ([Raúl Marín](https://github.com/Algunenano)). +* Исправлена ошибка вставки данных, возникавшая, когда таблица MergeTree имела слишком длинное имя столбца партиционирования. [#81390](https://github.com/ClickHouse/ClickHouse/pull/81390) ([hy123q](https://github.com/haoyangqian)). +* Бэкпортировано в [#81957](https://github.com/ClickHouse/ClickHouse/issues/81957): исправлена возможная аварийная остановка `Aggregator` при возникновении исключения во время слияния. [#81450](https://github.com/ClickHouse/ClickHouse/pull/81450) ([Nikita Taranov](https://github.com/nickitat)). +* Не хранить в памяти содержимое нескольких файлов манифестов. [#81470](https://github.com/ClickHouse/ClickHouse/pull/81470) ([Daniil Ivanik](https://github.com/divanik)). +* Исправлено возможное аварийное завершение при остановке фоновых пулов (`background_.*pool_size`). [#81473](https://github.com/ClickHouse/ClickHouse/pull/81473) ([Azat Khuzhin](https://github.com/azat)). +* Исправлено чтение за пределами допустимого диапазона памяти в формате `Npy`, возникавшее при записи в таблицу с движком `URL`. Это закрывает [#81356](https://github.com/ClickHouse/ClickHouse/issues/81356). [#81502](https://github.com/ClickHouse/ClickHouse/pull/81502) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Есть вероятность, что веб-интерфейс будет отображать `NaN%` (типичная проблема JavaScript). [#81507](https://github.com/ClickHouse/ClickHouse/pull/81507) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Исправлена проблема с `DatabaseReplicated` при `database_replicated_enforce_synchronous_settings=1`. [#81564](https://github.com/ClickHouse/ClickHouse/pull/81564) ([Azat Khuzhin](https://github.com/azat)). +* Исправлен порядок сортировки для типов LowCardinality(Nullable(...)). [#81583](https://github.com/ClickHouse/ClickHouse/pull/81583) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +* Сервер не должен удерживать HTTP‑соединение, если запрос не был полностью прочитан из сокета. [#81595](https://github.com/ClickHouse/ClickHouse/pull/81595) ([Sema Checherinda](https://github.com/CheSema)). +* Скалярные коррелированные подзапросы теперь возвращают результат проекционного выражения типа Nullable. Исправлен случай, когда коррелированный подзапрос возвращает пустое результирующее множество. [#81632](https://github.com/ClickHouse/ClickHouse/pull/81632) ([Dmitry Novik](https://github.com/novikd)). * Исправлена ошибка `Unexpected relative path for a deduplicated part` во время операции `ATTACH` к `ReplicatedMergeTree`. [#81647](https://github.com/ClickHouse/ClickHouse/pull/81647) ([Azat Khuzhin](https://github.com/azat)). -* Параметр запроса `use_iceberg_partition_pruning` не будет применяться к хранилищу Iceberg, так как для него используется глобальный контекст, а не контекст запроса. Это не критично, так как его значение по умолчанию — true. Этот PR исправляет это. [#81673](https://github.com/ClickHouse/ClickHouse/pull/81673) ([Han Fei](https://github.com/hanfei1991)). -* Бэкпортировано в [#82128](https://github.com/ClickHouse/ClickHouse/issues/82128): исправлена ошибка "Context has expired" при слияниях, когда словарь использовался в выражении TTL. [#81690](https://github.com/ClickHouse/ClickHouse/pull/81690) ([Azat Khuzhin](https://github.com/azat)). -* Добавлена проверка настройки MergeTree `merge_max_block_size`, чтобы гарантировать, что значение не равно нулю. [#81693](https://github.com/ClickHouse/ClickHouse/pull/81693) ([Bharat Nallan](https://github.com/bharatnc)). -* Исправлены проблемы в `clickhouse-local`, связанные с зависающими запросами `DROP VIEW`. [#81705](https://github.com/ClickHouse/ClickHouse/pull/81705) ([Bharat Nallan](https://github.com/bharatnc)). -* Исправлен join в StorageRedis в некоторых случаях. [#81736](https://github.com/ClickHouse/ClickHouse/pull/81736) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). -* Исправлено падение в `ConcurrentHashJoin` при использовании пустого `USING ()` и включённом старом анализаторе. [#81754](https://github.com/ClickHouse/ClickHouse/pull/81754) ([Nikita Taranov](https://github.com/nickitat)). -* Исправление в Keeper: блокировать фиксацию новых логов при наличии некорректной записи в логах. Ранее, если лидер некорректно применял часть логов, он продолжал фиксировать новые, хотя фолловер обнаруживал несоответствие дайджеста и прерывал работу. [#81780](https://github.com/ClickHouse/ClickHouse/pull/81780) ([Antonio Andelic](https://github.com/antonio2368)). -* Исправлена проблема, из-за которой требуемые столбцы не считывались при обработке скалярных коррелированных подзапросов. Исправляет [#81716](https://github.com/ClickHouse/ClickHouse/issues/81716). [#81805](https://github.com/ClickHouse/ClickHouse/pull/81805) ([Dmitry Novik](https://github.com/novikd)). -* Кто-то засорил наш код Kusto. Я всё подчистил. Это закрывает [#81643](https://github.com/ClickHouse/ClickHouse/issues/81643). [#81885](https://github.com/ClickHouse/ClickHouse/pull/81885) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* В предыдущих версиях сервер возвращал чрезмерный объём данных в ответ на запросы к `/js`. Это закрывает [#61890](https://github.com/ClickHouse/ClickHouse/issues/61890). [#81895](https://github.com/ClickHouse/ClickHouse/pull/81895) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Ранее определения движка таблиц `MongoDB` могли включать компонент пути в аргументе `host:port`, который просто игнорировался. Интеграция с `MongoDB` отказывалась загружать такие таблицы. С этим исправлением *теперь допускается загрузка таких таблиц, при этом компонент пути игнорируется*, если движок `MongoDB` указан с пятью аргументами, а имя базы данных берётся из аргументов. *Примечание:* исправление не применяется к вновь создаваемым таблицам или запросам с табличной функцией `mongo`, а также к источникам словарей и именованным коллекциям. [#81942](https://github.com/ClickHouse/ClickHouse/pull/81942) ([Vladimir Cherkasov](https://github.com/vdimir)). -* Исправлено возможное падение `Aggregator` при возникновении исключения во время слияния. [#82022](https://github.com/ClickHouse/ClickHouse/pull/82022) ([Nikita Taranov](https://github.com/nickitat)). -* Исправлена ошибка copy-paste в `arraySimilarity`, запрещено использование весов типов `UInt32` и `Int32`. Обновлены тесты и документация. [#82103](https://github.com/ClickHouse/ClickHouse/pull/82103) ([Mikhail f. Shiryaev](https://github.com/Felixoid)). -* Исправлена возможная гонка данных между потоком подсказок и основным потоком клиента. [#82233](https://github.com/ClickHouse/ClickHouse/pull/82233) ([Azat Khuzhin](https://github.com/azat)). - - - - +* Настройка запроса `use_iceberg_partition_pruning` не будет применяться для хранилища Iceberg, потому что оно использует глобальный контекст, а не контекст запроса. Это не критично, так как значение по умолчанию — true. Этот pull request исправляет это. [#81673](https://github.com/ClickHouse/ClickHouse/pull/81673) ([Han Fei](https://github.com/hanfei1991)). +* Перенесено в [#82128](https://github.com/ClickHouse/ClickHouse/issues/82128): исправлена ошибка «Context has expired» при слияниях, когда в выражении TTL используется словарь. [#81690](https://github.com/ClickHouse/ClickHouse/pull/81690) ([Azat Khuzhin](https://github.com/azat)). +* Добавлена проверка настройки MergeTree `merge_max_block_size`, чтобы гарантировать, что она не равна нулю. [#81693](https://github.com/ClickHouse/ClickHouse/pull/81693) ([Bharat Nallan](https://github.com/bharatnc)). +* Исправлены проблемы с `clickhouse-local`, связанные с зависанием запросов `DROP VIEW`. [#81705](https://github.com/ClickHouse/ClickHouse/pull/81705) ([Bharat Nallan](https://github.com/bharatnc)). +* Исправлен JOIN с хранилищем StorageRedis в ряде случаев. [#81736](https://github.com/ClickHouse/ClickHouse/pull/81736) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +* Исправлено падение `ConcurrentHashJoin` при пустом `USING ()` и включённом старом анализаторе. [#81754](https://github.com/ClickHouse/ClickHouse/pull/81754) ([Nikita Taranov](https://github.com/nickitat)). +* Исправление в Keeper: блокировать фиксацию (коммит) новых логов, если в логах есть некорректная запись. Ранее, если лидер некорректно применял некоторые логи, он продолжал фиксировать новые логи, хотя фолловер обнаруживал несоответствие дайджеста и прерывал операцию. [#81780](https://github.com/ClickHouse/ClickHouse/pull/81780) ([Antonio Andelic](https://github.com/antonio2368)). +* Исправлена проблема, из-за которой обязательные столбцы не читались при обработке скалярного коррелированного подзапроса. Исправляет [#81716](https://github.com/ClickHouse/ClickHouse/issues/81716). [#81805](https://github.com/ClickHouse/ClickHouse/pull/81805) ([Dmitry Novik](https://github.com/novikd)). +* Кто-то засорил наш код Kusto. Почистили. Это закрывает [#81643](https://github.com/ClickHouse/ClickHouse/issues/81643). [#81885](https://github.com/ClickHouse/ClickHouse/pull/81885) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* В предыдущих версиях сервер возвращал избыточное содержимое для запросов к `/js`. Это изменение закрывает [#61890](https://github.com/ClickHouse/ClickHouse/issues/61890). [#81895](https://github.com/ClickHouse/ClickHouse/pull/81895) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Ранее определения движка таблицы `MongoDB` могли включать компонент пути в аргументе `host:port`, который при этом тихо игнорировался. Интеграция с `MongoDB` отказывалась загружать такие таблицы. С этим исправлением *загрузка таких таблиц разрешена, а компонент пути игнорируется*, если движок `MongoDB` имеет пять аргументов; при этом используется имя базы данных из аргументов. *Примечание:* Исправление не применяется к вновь созданным таблицам или запросам с табличной функцией `mongo`, а также к источникам словарей и именованным коллекциям. [#81942](https://github.com/ClickHouse/ClickHouse/pull/81942) ([Vladimir Cherkasov](https://github.com/vdimir)). +* Исправлено возможное аварийное завершение работы `Aggregator` при возникновении исключения во время слияния. [#82022](https://github.com/ClickHouse/ClickHouse/pull/82022) ([Nikita Taranov](https://github.com/nickitat)). +* Исправлена ошибка копирования и вставки в `arraySimilarity`, запрещено использование весов с типами `UInt32` и `Int32`. Обновлены тесты и документация. [#82103](https://github.com/ClickHouse/ClickHouse/pull/82103) ([Mikhail f. Shiryaev](https://github.com/Felixoid)). +* Исправлена возможная гонка данных между потоком подсказок и основным клиентским потоком. [#82233](https://github.com/ClickHouse/ClickHouse/pull/82233) ([Azat Khuzhin](https://github.com/azat)). -#### Улучшение сборки/тестирования/упаковки +#### Улучшения в сборке, тестировании и упаковке -* Используем `postgres` 16.9. [#81437](https://github.com/ClickHouse/ClickHouse/pull/81437) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* Используется `postgres` 16.9. [#81437](https://github.com/ClickHouse/ClickHouse/pull/81437) ([Konstantin Bogdanov](https://github.com/thevar1able)). * Используйте `openssl` 3.2.4. [#81438](https://github.com/ClickHouse/ClickHouse/pull/81438) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* Использовать версию `abseil-cpp` от 2025-01-27. [#81440](https://github.com/ClickHouse/ClickHouse/pull/81440) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* Используйте `mongo-c-driver` 1.30.4. [#81449](https://github.com/ClickHouse/ClickHouse/pull/81449) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* Использовать `abseil-cpp` версии от 2025-01-27. [#81440](https://github.com/ClickHouse/ClickHouse/pull/81440) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* Используйте `mongo-c-driver` 1.30.4. [#81449](https://github.com/ClickHouse/ClickHouse/pull/81449) ([Konstantин Богданов](https://github.com/thevar1able)). * Используйте `krb5` 1.21.3-final. [#81453](https://github.com/ClickHouse/ClickHouse/pull/81453) ([Konstantin Bogdanov](https://github.com/thevar1able)). * Используйте `orc` 2.1.2. [#81455](https://github.com/ClickHouse/ClickHouse/pull/81455) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* Используйте `grpc` 1.73.0. [#81629](https://github.com/ClickHouse/ClickHouse/pull/81629) ([Konстантин Богданов](https://github.com/thevar1able)). -* Используйте `delta-kernel-rs` v0.12.1. [#81707](https://github.com/ClickHouse/ClickHouse/pull/81707) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* Обновить `c-ares` до `v1.34.5`. [#81159](https://github.com/ClickHouse/ClickHouse/pull/81159) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* Обновите `curl` до версии 8.14 для устранения уязвимостей CVE-2025-5025 и CVE-2025-4947. [#81171](https://github.com/ClickHouse/ClickHouse/pull/81171) ([larryluogit](https://github.com/larryluogit)). -* Обновлён `libarchive` до версии 3.7.9 для устранения следующих уязвимостей: CVE-2024-20696 CVE-2025-25724 CVE-2024-48958 CVE-2024-57970 CVE-2025-1632 CVE-2024-48957 CVE-2024-48615. [#81174](https://github.com/ClickHouse/ClickHouse/pull/81174) ([larryluogit](https://github.com/larryluogit)). -* Обновите `libxml2` до версии 2.14.3. [#81187](https://github.com/ClickHouse/ClickHouse/pull/81187) ([larryluogit](https://github.com/larryluogit)). -* Не копировать вендорные исходники Rust в `CARGO_HOME`. [#79560](https://github.com/ClickHouse/ClickHouse/pull/79560) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* Удалить зависимость от библиотеки Sentry, заменив её нашим собственным endpoint'ом. [#80236](https://github.com/ClickHouse/ClickHouse/pull/80236) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Используйте `grpc` 1.73.0. [#81629](https://github.com/ClickHouse/ClickHouse/pull/81629) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* Используйте `delta-kernel-rs` версии 0.12.1. [#81707](https://github.com/ClickHouse/ClickHouse/pull/81707) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* Обновлён `c-ares` до `v1.34.5`. [#81159](https://github.com/ClickHouse/ClickHouse/pull/81159) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* Обновите `curl` до версии 8.14, чтобы устранить уязвимости CVE-2025-5025 и CVE-2025-4947. [#81171](https://github.com/ClickHouse/ClickHouse/pull/81171) ([larryluogit](https://github.com/larryluogit)). +* Обновить `libarchive` до версии 3.7.9 для устранения следующих уязвимостей: CVE-2024-20696 CVE-2025-25724 CVE-2024-48958 CVE-2024-57970 CVE-2025-1632 CVE-2024-48957 CVE-2024-48615. [#81174](https://github.com/ClickHouse/ClickHouse/pull/81174) ([larryluogit](https://github.com/larryluogit)). +* Обновить `libxml2` до версии 2.14.3. [#81187](https://github.com/ClickHouse/ClickHouse/pull/81187) ([larryluogit](https://github.com/larryluogit)). +* Исключено копирование вендорных исходников Rust в `CARGO_HOME`. [#79560](https://github.com/ClickHouse/ClickHouse/pull/79560) ([Konstantин Bogdanов](https://github.com/thevar1able)). +* Удалена зависимость от библиотеки Sentry путём замены её на собственный endpoint. [#80236](https://github.com/ClickHouse/ClickHouse/pull/80236) ([Alexey Milovidov](https://github.com/alexey-milovidov)). * Обновлены зависимости Python в CI-образах для устранения предупреждений Dependabot. [#80658](https://github.com/ClickHouse/ClickHouse/pull/80658) ([Raúl Marín](https://github.com/Algunenano)). -* Повторно считывать флаг остановки реплицируемого DDL из Keeper при запуске, чтобы сделать тесты более надёжными при включённой инъекции сбоев в Keeper. [#80964](https://github.com/ClickHouse/ClickHouse/pull/80964) ([Alexander Gololobov](https://github.com/davenger)). -* Использовать HTTPS для URL архива Ubuntu. [#81016](https://github.com/ClickHouse/ClickHouse/pull/81016) ([Raúl Marín](https://github.com/Algunenano)). +* Повторить чтение флага остановки реплицируемого DDL из Keeper при запуске, чтобы сделать тесты более надёжными, когда для Keeper включена инъекция сбоев. [#80964](https://github.com/ClickHouse/ClickHouse/pull/80964) ([Alexander Gololobov](https://github.com/davenger)). +* Использовать HTTPS для URL-адреса архива Ubuntu. [#81016](https://github.com/ClickHouse/ClickHouse/pull/81016) ([Raúl Marín](https://github.com/Algunenano)). * Обновлены зависимости Python в тестовых образах. [#81042](https://github.com/ClickHouse/ClickHouse/pull/81042) ([dependabot[bot]](https://github.com/apps/dependabot)). * Добавлен файл `flake.nix` для сборок Nix. [#81463](https://github.com/ClickHouse/ClickHouse/pull/81463) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* Устранена зависимость `delta-kernel-rs` от сетевого доступа во время сборки. Закрывает [#80609](https://github.com/ClickHouse/ClickHouse/issues/80609). [#81602](https://github.com/ClickHouse/ClickHouse/pull/81602) ([Konstantin Bogdanov](https://github.com/thevar1able)). Подробнее см. в статье [A Year of Rust in ClickHouse](https://clickhouse.com/blog/rust). - - - +* Исправлена проблема, из-за которой `delta-kernel-rs` требовал доступа к сети во время сборки. Закрыта задача [#80609](https://github.com/ClickHouse/ClickHouse/issues/80609). [#81602](https://github.com/ClickHouse/ClickHouse/pull/81602) ([Konstantin Bogdanov](https://github.com/thevar1able)). Прочитайте статью [«Год Rust в ClickHouse»](https://clickhouse.com/blog/rust). ### Релиз ClickHouse 25.5, 2025-05-22 {#255} -#### Обратные несовместимые изменения -* Функция `geoToH3` теперь принимает аргументы в порядке (lat, lon, res) (что соответствует другим геометрическим функциям). Пользователи, которые хотят сохранить прежний порядок аргументов (lon, lat, res), могут установить настройку `geotoh3_argument_order = 'lon_lat'`. [#78852](https://github.com/ClickHouse/ClickHouse/pull/78852) ([Pratima Patel](https://github.com/pratimapatel2008)). -* Добавлена настройка файлового кэша `allow_dynamic_cache_resize`, по умолчанию `false`, позволяющая динамически изменять размер файлового кэша. Причина: в некоторых средах (ClickHouse Cloud) все события масштабирования происходят через перезапуск процесса, и мы хотим, чтобы эта возможность была явно отключена, чтобы иметь больший контроль над поведением, а также в качестве меры безопасности. Этот PR помечен как обратно несовместимое изменение, потому что в старых версиях динамическое изменение размера кэша работало по умолчанию без специальной настройки. [#79148](https://github.com/ClickHouse/ClickHouse/pull/79148) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Удалена поддержка устаревших типов индексов `annoy` и `usearch`. Оба уже долгое время были заглушками, то есть любая попытка использовать эти устаревшие индексы всё равно возвращала ошибку. Если у вас всё ещё есть индексы `annoy` и `usearch`, пожалуйста, удалите их. [#79802](https://github.com/ClickHouse/ClickHouse/pull/79802) ([Robert Schulze](https://github.com/rschu1ze)). -* Удалена серверная настройка `format_alter_commands_with_parentheses`. Эта настройка была добавлена и по умолчанию отключена в версии 24.2. В версии 25.2 она была включена по умолчанию. Поскольку сейчас нет LTS-версий, которые не поддерживают новый формат, мы можем удалить эту настройку. [#79970](https://github.com/ClickHouse/ClickHouse/pull/79970) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). -* Реализация `delta-kernel-rs` для хранилища `DeltaLake` теперь включена по умолчанию. [#79541](https://github.com/ClickHouse/ClickHouse/pull/79541) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Если чтение из `URL` включает несколько перенаправлений, настройка `enable_url_encoding` теперь корректно применяется ко всем перенаправлениям в цепочке. [#79563](https://github.com/ClickHouse/ClickHouse/pull/79563) ([Shankar Iyer](https://github.com/shankar-iyer)). Значение по умолчанию настройки `enble_url_encoding` теперь равно `false`. [#80088](https://github.com/ClickHouse/ClickHouse/pull/80088) ([Shankar Iyer](https://github.com/shankar-iyer)). - - - -#### Новая возможность +#### Обратное несовместимое изменение -* Поддержка скалярных коррелированных подзапросов в предложении WHERE. Закрывает [#6697](https://github.com/ClickHouse/ClickHouse/issues/6697). [#79600](https://github.com/ClickHouse/ClickHouse/pull/79600) ([Dmitry Novik](https://github.com/novikd)). Поддержка коррелированных подзапросов в списке проекций в простых случаях. [#79925](https://github.com/ClickHouse/ClickHouse/pull/79925) ([Dmitry Novik](https://github.com/novikd)). [#76078](https://github.com/ClickHouse/ClickHouse/pull/76078) ([Dmitry Novik](https://github.com/novikd)). Теперь покрывает 100% набора тестов TPC-H. -* Векторный поиск с использованием индекса векторного сходства получил статус бета-версии (ранее был экспериментальной функцией). [#80164](https://github.com/ClickHouse/ClickHouse/pull/80164) ([Robert Schulze](https://github.com/rschu1ze)). -* Добавлена поддержка типов геоданных в формате `Parquet`. Это закрывает [#75317](https://github.com/ClickHouse/ClickHouse/issues/75317). [#79777](https://github.com/ClickHouse/ClickHouse/pull/79777) ([scanhex12](https://github.com/scanhex12)). -* Новые функции `sparseGrams`, `sparseGramsHashes`, `sparseGramsHashesUTF8`, `sparseGramsUTF8` для вычисления «разреженных n-грамм» — надёжного алгоритма извлечения подстрок для индексирования и поиска. [#79517](https://github.com/ClickHouse/ClickHouse/pull/79517) ([scanhex12](https://github.com/scanhex12)). -* `clickhouse-local` (и его сокращённый псевдоним `ch`) теперь неявно добавляют `FROM table`, когда есть входные данные для обработки. Это закрывает [#65023](https://github.com/ClickHouse/ClickHouse/issues/65023). Также в clickhouse-local включено автоматическое определение формата, если не указан `--input-format` и обрабатывается обычный файл. [#79085](https://github.com/ClickHouse/ClickHouse/pull/79085) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Добавлены функции `stringBytesUniq` и `stringBytesEntropy` для обнаружения потенциально случайных или зашифрованных данных. [#79350](https://github.com/ClickHouse/ClickHouse/pull/79350) ([Sachin Kumar Singh](https://github.com/sachinkumarsingh092)). -* Добавлены функции кодирования и декодирования base32. [#79809](https://github.com/ClickHouse/ClickHouse/pull/79809) ([Joanna Hulboj](https://github.com/jh0x)). +* Функция `geoToH3` теперь принимает аргументы в порядке (lat, lon, res) (что соответствует другим геометрическим функциям). Пользователи, которые хотят сохранить прежний порядок аргументов (lon, lat, res), могут установить настройку `geotoh3_argument_order = 'lon_lat'`. [#78852](https://github.com/ClickHouse/ClickHouse/pull/78852) ([Pratima Patel](https://github.com/pratimapatel2008)). +* Добавлена настройка файлового кэша `allow_dynamic_cache_resize` (по умолчанию `false`), позволяющая динамически изменять размер файлового кэша. Причина: в некоторых средах (ClickHouse Cloud) все события масштабирования происходят через перезапуск процесса, и мы хотим, чтобы эта возможность была явно отключена для более точного контроля поведения, а также в качестве предохранительной меры. Этот PR помечен как обратно несовместимый, потому что в старых версиях динамическое изменение размера кэша работало по умолчанию без специальной настройки. [#79148](https://github.com/ClickHouse/ClickHouse/pull/79148) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Удалена поддержка устаревших типов индексов `annoy` и `usearch`. Оба уже давно являлись заглушками, то есть любая попытка использовать эти устаревшие индексы всё равно возвращала ошибку. Если у вас всё ещё есть индексы `annoy` и `usearch`, удалите их. [#79802](https://github.com/ClickHouse/ClickHouse/pull/79802) ([Robert Schulze](https://github.com/rschu1ze)). +* Удалена серверная настройка `format_alter_commands_with_parentheses`. Эта настройка была добавлена и по умолчанию отключена в версии 24.2. В версии 25.2 она была включена по умолчанию. Так как теперь нет LTS-версий, которые не поддерживают новый формат, мы можем удалить эту настройку. [#79970](https://github.com/ClickHouse/ClickHouse/pull/79970) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). +* Реализация хранилища `DeltaLake` на основе `delta-kernel-rs` теперь включена по умолчанию. [#79541](https://github.com/ClickHouse/ClickHouse/pull/79541) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Если чтение из `URL` включает несколько перенаправлений, настройка `enable_url_encoding` корректно применяется ко всем перенаправлениям в цепочке. [#79563](https://github.com/ClickHouse/ClickHouse/pull/79563) ([Shankar Iyer](https://github.com/shankar-iyer)). Значение по умолчанию для настройки `enble_url_encoding` теперь установлено в `false`. [#80088](https://github.com/ClickHouse/ClickHouse/pull/80088) ([Shankar Iyer](https://github.com/shankar-iyer)). + +#### Новая функция + +* Добавлена поддержка скалярных коррелированных подзапросов в предложении WHERE. Закрывает [#6697](https://github.com/ClickHouse/ClickHouse/issues/6697). [#79600](https://github.com/ClickHouse/ClickHouse/pull/79600) ([Dmitry Novik](https://github.com/novikd)). Добавлена поддержка коррелированных подзапросов в списке проекций в простых случаях. [#79925](https://github.com/ClickHouse/ClickHouse/pull/79925) ([Dmitry Novik](https://github.com/novikd)). [#76078](https://github.com/ClickHouse/ClickHouse/pull/76078) ([Dmitry Novik](https://github.com/novikd)). Теперь покрывается 100 % тестового набора TPC-H. +* Векторный поиск на основе индекса векторного сходства теперь имеет статус beta (ранее — experimental). [#80164](https://github.com/ClickHouse/ClickHouse/pull/80164) ([Robert Schulze](https://github.com/rschu1ze)). +* Добавлена поддержка геопространственных типов данных в формате `Parquet`. Это закрывает [#75317](https://github.com/ClickHouse/ClickHouse/issues/75317). [#79777](https://github.com/ClickHouse/ClickHouse/pull/79777) ([scanhex12](https://github.com/scanhex12)). +* Новые функции `sparseGrams`, `sparseGramsHashes`, `sparseGramsHashesUTF8`, `sparseGramsUTF8` для вычисления «разрежённых n‑грамм» (sparse-ngrams) — надёжного алгоритма извлечения подстрок для индексации и поиска. [#79517](https://github.com/ClickHouse/ClickHouse/pull/79517) ([scanhex12](https://github.com/scanhex12)). +* `clickhouse-local` (и его сокращённый псевдоним `ch`) теперь неявно добавляют `FROM table`, если есть входные данные для обработки. Это закрывает [#65023](https://github.com/ClickHouse/ClickHouse/issues/65023). Также в clickhouse-local включено автоопределение формата, если `--input-format` не указан и обрабатывается обычный файл. [#79085](https://github.com/ClickHouse/ClickHouse/pull/79085) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Добавлены функции `stringBytesUniq` и `stringBytesEntropy` для поиска возможных случайных или зашифрованных данных. [#79350](https://github.com/ClickHouse/ClickHouse/pull/79350) ([Sachin Kumar Singh](https://github.com/sachinkumarsingh092)). +* Добавлены функции кодирования и декодирования Base32. [#79809](https://github.com/ClickHouse/ClickHouse/pull/79809) ([Joanna Hulboj](https://github.com/jh0x)). * Добавлены функции `getServerSetting` и `getMergeTreeSetting`. Закрывает #78318. [#78439](https://github.com/ClickHouse/ClickHouse/pull/78439) ([NamNguyenHoai](https://github.com/NamHoaiNguyen)). * Добавлена новая настройка `iceberg_enable_version_hint` для использования файла `version-hint.text`. [#78594](https://github.com/ClickHouse/ClickHouse/pull/78594) ([Arnaud Briche](https://github.com/arnaudbriche)). -* Позволяет очищать (TRUNCATE) отдельные таблицы в базе данных, отфильтрованные с помощью ключевого слова `LIKE`. [#78597](https://github.com/ClickHouse/ClickHouse/pull/78597) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* Добавлена поддержка виртуального столбца `_part_starting_offset` в таблицах семейства `MergeTree`. Этот столбец представляет собой накопительный счетчик строк по всем предшествующим частям, вычисляемый во время выполнения запроса на основе текущего списка частей. Накопительные значения сохраняются на протяжении выполнения запроса и остаются актуальными даже после отсечения частей. Связанная внутренняя логика была переработана для поддержки такого поведения. [#79417](https://github.com/ClickHouse/ClickHouse/pull/79417) ([Amos Bird](https://github.com/amosbird)). -* Добавлены функции `divideOrNull`,`moduloOrNull`, `intDivOrNull`,`positiveModuloOrNull`, которые возвращают NULL, если правый аргумент равен нулю. [#78276](https://github.com/ClickHouse/ClickHouse/pull/78276) ([kevinyhzou](https://github.com/KevinyhZou)). -* Векторный поиск в ClickHouse теперь поддерживает как предварительную, так и последующую фильтрацию и предоставляет соответствующие настройки для более тонкого управления. (issue [#78161](https://github.com/ClickHouse/ClickHouse/issues/78161)). [#79854](https://github.com/ClickHouse/ClickHouse/pull/79854) ([Shankar Iyer](https://github.com/shankar-iyer)). -* Добавлены функции [`icebergHash`](https://iceberg.apache.org/spec/#appendix-b-32-bit-hash-requirements) и [`icebergBucket`](https://iceberg.apache.org/spec/#bucket-transform-details). Добавлена поддержка отсечения файлов с данными в таблицах `Iceberg`, партиционированных с использованием [`bucket transfom`](https://iceberg.apache.org/spec/#partitioning). [#79262](https://github.com/ClickHouse/ClickHouse/pull/79262) ([Daniil Ivanik](https://github.com/divanik)). - - - -#### Экспериментальная функциональность -* Новые типы данных `Time`/`Time64`: `Time` (HHH:MM:SS) и `Time64` (HHH:MM:SS.``) и некоторые базовые функции приведения типов, а также функции для взаимодействия с другими типами данных. Кроме того, существующая функция toTime была переименована в toTimeWithFixedDate, так как функция toTime требуется для функции приведения типа. [#75735](https://github.com/ClickHouse/ClickHouse/pull/75735) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* Каталог Hive Metastore для озера данных Iceberg. [#77677](https://github.com/ClickHouse/ClickHouse/pull/77677) ([scanhex12](https://github.com/scanhex12)). -* Индексы типа `full_text` были переименованы в `gin`. Это соответствует более привычной терминологии PostgreSQL и других баз данных. Существующие индексы типа `full_text` по‑прежнему можно загружать, но при попытке использовать их в поиске они будут выбрасывать исключение (с предложением использовать индексы `gin`). [#79024](https://github.com/ClickHouse/ClickHouse/pull/79024) ([Robert Schulze](https://github.com/rschu1ze)). +* Добавляет возможность выполнять операцию TRUNCATE для отдельных таблиц базы данных, отфильтрованных по шаблону с помощью ключевого слова `LIKE`. [#78597](https://github.com/ClickHouse/ClickHouse/pull/78597) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* Добавлена поддержка виртуального столбца `_part_starting_offset` в таблицах семейства `MergeTree`. Этот столбец представляет собой суммарное количество строк во всех предшествующих частях, вычисляемое во время выполнения запроса на основе текущего списка частей. Суммарные значения сохраняются на протяжении всего выполнения запроса и остаются корректными даже после отсечения частей. Связанная внутренняя логика была переработана для поддержки такого поведения. [#79417](https://github.com/ClickHouse/ClickHouse/pull/79417) ([Amos Bird](https://github.com/amosbird)). +* Добавлены функции `divideOrNull`, `moduloOrNull`, `intDivOrNull`, `positiveModuloOrNull`, возвращающие NULL, если правый аргумент равен нулю. [#78276](https://github.com/ClickHouse/ClickHouse/pull/78276) ([kevinyhzou](https://github.com/KevinyhZou)). +* Векторный поиск в ClickHouse теперь поддерживает как предварительную фильтрацию, так и постфильтрацию и предоставляет соответствующие параметры для более точного управления. (issue [#78161](https://github.com/ClickHouse/ClickHouse/issues/78161)). [#79854](https://github.com/ClickHouse/ClickHouse/pull/79854) ([Shankar Iyer](https://github.com/shankar-iyer)). +* Добавлены функции [`icebergHash`](https://iceberg.apache.org/spec/#appendix-b-32-bit-hash-requirements) и [`icebergBucket`](https://iceberg.apache.org/spec/#bucket-transform-details). Добавлена поддержка отсечения файлов данных в таблицах `Iceberg`, разбитых на партиции с помощью [`bucket transfom`](https://iceberg.apache.org/spec/#partitioning). [#79262](https://github.com/ClickHouse/ClickHouse/pull/79262) ([Daniil Ivanik](https://github.com/divanik)). +#### Экспериментальная возможность +* Новые типы данных `Time`/`Time64`: `Time` (HHH:MM:SS) и `Time64` (HHH:MM:SS.`<fractional>`), а также несколько базовых функций приведения типов и функций для взаимодействия с другими типами данных. Также было изменено имя существующей функции с toTime на toTimeWithFixedDate, потому что функция toTime требуется для реализации приведения типов. [#75735](https://github.com/ClickHouse/ClickHouse/pull/75735) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* Каталог Hive metastore для озера данных Iceberg. [#77677](https://github.com/ClickHouse/ClickHouse/pull/77677) ([scanhex12](https://github.com/scanhex12)). +* Индексы типа `full_text` были переименованы в `gin`. Это соответствует более привычной терминологии PostgreSQL и других баз данных. Существующие индексы типа `full_text` по‑прежнему можно загружать, но при попытке использовать их в поиске они будут генерировать исключение (с предложением использовать индексы `gin`). [#79024](https://github.com/ClickHouse/ClickHouse/pull/79024) ([Robert Schulze](https://github.com/rschu1ze)). #### Повышение производительности -* Изменён формат Compact-частей, чтобы сохранять метки для каждого подпотока и тем самым обеспечить чтение отдельных подстолбцов. Старый формат Compact по-прежнему поддерживается для чтения и может быть включён для записи с помощью настройки MergeTree `write_marks_for_substreams_in_compact_parts`. По умолчанию она отключена для более безопасного обновления, так как она изменяет способ хранения Compact-частей. В одном из следующих релизов она будет включена по умолчанию. [#77940](https://github.com/ClickHouse/ClickHouse/pull/77940) ([Pavel Kruglov](https://github.com/Avogar)). -* Добавлена поддержка переноса условий с подстолбцами в PREWHERE. [#79489](https://github.com/ClickHouse/ClickHouse/pull/79489) ([Pavel Kruglov](https://github.com/Avogar)). -* Ускорена работа вторичных индексов за счет вычисления их выражений одновременно на нескольких гранулах. [#64109](https://github.com/ClickHouse/ClickHouse/pull/64109) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Параметр `compile_expressions` (JIT-компилятор для фрагментов обычных выражений) теперь включён по умолчанию. Это закрывает [#51264](https://github.com/ClickHouse/ClickHouse/issues/51264), [#56386](https://github.com/ClickHouse/ClickHouse/issues/56386) и [#66486](https://github.com/ClickHouse/ClickHouse/issues/66486). [#79907](https://github.com/ClickHouse/ClickHouse/pull/79907) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Добавлена новая настройка: `use_skip_indexes_in_final_exact_mode`. Если запрос к таблице `ReplacingMergeTree` содержит клаузу FINAL, чтение только диапазонов таблицы на основе пропускающих индексов может привести к некорректному результату. Эта настройка позволяет гарантировать корректные результаты за счет сканирования более новых частей таблицы, которые пересекаются с диапазонами первичного ключа, возвращаемыми пропускающим индексом. Установите значение 0, чтобы отключить, и 1 — чтобы включить. [#78350](https://github.com/ClickHouse/ClickHouse/pull/78350) ([Shankar Iyer](https://github.com/shankar-iyer)). -* Функции кластерных таблиц объектного хранилища (например, `s3Cluster`) теперь распределяют файлы по репликам для чтения на основе консистентного хеша, чтобы улучшить локальность кэша. [#77326](https://github.com/ClickHouse/ClickHouse/pull/77326) ([Andrej Hoos](https://github.com/adikus)). -* Улучшена производительность `S3Queue`/`AzureQueue` за счёт возможности параллельной вставки данных (`INSERT`), которую можно включить с помощью настройки очереди `parallel_inserts=true`. Ранее S3Queue/AzureQueue могли выполнять в несколько потоков только первую часть конвейера (загрузка, парсинг), а `INSERT` выполнялся в одном потоке. При этом именно `INSERT` почти всегда является узким местом. Теперь производительность масштабируется почти линейно с числом потоков `processing_threads_num`. [#77671](https://github.com/ClickHouse/ClickHouse/pull/77671) ([Azat Khuzhin](https://github.com/azat)). Более справедливое ограничение max_processed_files_before_commit в S3Queue/AzureQueue. [#79363](https://github.com/ClickHouse/ClickHouse/pull/79363) ([Azat Khuzhin](https://github.com/azat)). -* Введён порог (настраивается с помощью `parallel_hash_join_threshold`), при котором выполняется откат к алгоритму `hash`, если размер правой таблицы меньше порогового значения. [#76185](https://github.com/ClickHouse/ClickHouse/pull/76185) ([Nikita Taranov](https://github.com/nickitat)). -* Теперь для определения размера задачи при чтении с включёнными параллельными репликами мы используем число реплик. Это обеспечивает более равномерное распределение нагрузки между репликами, когда объём данных для чтения не слишком велик. [#78695](https://github.com/ClickHouse/ClickHouse/pull/78695) ([Nikita Taranov](https://github.com/nickitat)). -* Включена поддержка параллельного слияния состояний `uniqExact` на финальной стадии распределённой агрегации. [#78703](https://github.com/ClickHouse/ClickHouse/pull/78703) ([Nikita Taranov](https://github.com/nickitat)). -* Исправлена возможная деградация производительности при параллельном слиянии состояний `uniqExact` для агрегации с ключом. [#78724](https://github.com/ClickHouse/ClickHouse/pull/78724) ([Nikita Taranov](https://github.com/nickitat)). -* Снижено количество вызовов API List Blobs к хранилищу Azure. [#78860](https://github.com/ClickHouse/ClickHouse/pull/78860) ([Julia Kartseva](https://github.com/jkartseva)). -* Исправлена проблема с производительностью распределённого INSERT SELECT при использовании параллельных реплик. [#79441](https://github.com/ClickHouse/ClickHouse/pull/79441) ([Azat Khuzhin](https://github.com/azat)). -* Предотвращено выполнение очистки в `LogSeriesLimiter` при каждом создании экземпляра, чтобы избежать конфликтов блокировок и деградации производительности в высококонкурентных сценариях. [#79864](https://github.com/ClickHouse/ClickHouse/pull/79864) ([filimonov](https://github.com/filimonov)). -* Ускорены запросы за счет тривиальной оптимизации count. [#79945](https://github.com/ClickHouse/ClickHouse/pull/79945) ([Raúl Marín](https://github.com/Algunenano)). +* Изменён формат компактных частей для сохранения меток для каждого подпотока, чтобы можно было читать отдельные подстолбцы. Старый компактный формат по-прежнему поддерживается для чтения и может быть включён для записи с помощью настройки MergeTree `write_marks_for_substreams_in_compact_parts`. По умолчанию она отключена для более безопасного обновления, так как изменяет хранение компактных частей. По умолчанию будет включена в одном из следующих релизов. [#77940](https://github.com/ClickHouse/ClickHouse/pull/77940) ([Pavel Kruglov](https://github.com/Avogar)). +* Разрешено перемещение условий с подстолбцами в PREWHERE. [#79489](https://github.com/ClickHouse/ClickHouse/pull/79489) ([Pavel Kruglov](https://github.com/Avogar)). +* Ускорена обработка вторичных индексов за счёт вычисления их выражений одновременно на нескольких гранулах. [#64109](https://github.com/ClickHouse/ClickHouse/pull/64109) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Включена настройка `compile_expressions` (JIT-компилятор для фрагментов обычных выражений) по умолчанию. Это закрывает [#51264](https://github.com/ClickHouse/ClickHouse/issues/51264), [#56386](https://github.com/ClickHouse/ClickHouse/issues/56386) и [#66486](https://github.com/ClickHouse/ClickHouse/issues/66486). [#79907](https://github.com/ClickHouse/ClickHouse/pull/79907) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Добавлена новая настройка: `use_skip_indexes_in_final_exact_mode`. Если в запросе к таблице `ReplacingMergeTree` используется ключевое слово FINAL, чтение только тех диапазонов таблицы, которые выбраны на основе skip-индексов, может привести к некорректному результату. Эта настройка позволяет гарантировать корректные результаты за счет сканирования более новых частей, которые пересекаются с диапазонами первичного ключа, возвращенными skip-индексом. Установите 0, чтобы отключить, 1, чтобы включить. [#78350](https://github.com/ClickHouse/ClickHouse/pull/78350) ([Shankar Iyer](https://github.com/shankar-iyer)). +* Табличные функции для кластеров объектного хранилища (например, `s3Cluster`) теперь распределяют файлы по репликам для чтения на основе консистентного хеширования, чтобы улучшить локальность кэша. [#77326](https://github.com/ClickHouse/ClickHouse/pull/77326) ([Andrej Hoos](https://github.com/adikus)). +* Улучшена производительность `S3Queue`/`AzureQueue` за счёт возможности параллельного выполнения вставок данных (`INSERT`, включается с помощью настройки очереди `parallel_inserts=true`). Ранее `S3Queue`/`AzureQueue` могли выполнять параллельно только первую часть конвейера (загрузка, парсинг), а `INSERT` выполнялся однопоточно. При этом `INSERT` почти всегда является узким местом. Теперь производительность будет масштабироваться почти линейно в зависимости от `processing_threads_num`. [#77671](https://github.com/ClickHouse/ClickHouse/pull/77671) ([Azat Khuzhin](https://github.com/azat)). Более справедливое значение `max_processed_files_before_commit` в `S3Queue`/`AzureQueue`. [#79363](https://github.com/ClickHouse/ClickHouse/pull/79363) ([Azat Khuzhin](https://github.com/azat)). +* Введён порог (управляется настройкой `parallel_hash_join_threshold`), ниже которого выполняется возврат к алгоритму `hash`, если размер правой таблицы меньше этого порога. [#76185](https://github.com/ClickHouse/ClickHouse/pull/76185) ([Nikita Taranov](https://github.com/nickitat)). +* Теперь мы используем количество реплик для определения размера задачи чтения при включённых параллельных репликах. Это обеспечивает более равномерное распределение работы между репликами, когда объём читаемых данных невелик. [#78695](https://github.com/ClickHouse/ClickHouse/pull/78695) ([Nikita Taranov](https://github.com/nickitat)). +* Добавлена возможность параллельного слияния состояний `uniqExact` на финальном этапе распределённой агрегации. [#78703](https://github.com/ClickHouse/ClickHouse/pull/78703) ([Nikita Taranov](https://github.com/nickitat)). +* Исправлено возможное снижение производительности при параллельном слиянии состояний агрегатной функции `uniqExact` при агрегации с ключом. [#78724](https://github.com/ClickHouse/ClickHouse/pull/78724) ([Nikita Taranov](https://github.com/nickitat)). +* Уменьшено количество вызовов к API List Blobs хранилища Azure. [#78860](https://github.com/ClickHouse/ClickHouse/pull/78860) ([Julia Kartseva](https://github.com/jkartseva)). +* Улучшена производительность операции распределённого INSERT SELECT с параллельными репликами. [#79441](https://github.com/ClickHouse/ClickHouse/pull/79441) ([Azat Khuzhin](https://github.com/azat)). +* При создании `LogSeriesLimiter` больше не выполняется очистка, что позволяет избежать конкуренции за блокировки и деградации производительности в сценариях с высокой степенью параллелизма. [#79864](https://github.com/ClickHouse/ClickHouse/pull/79864) ([filimonov](https://github.com/filimonov)). +* Ускорено выполнение запросов за счёт оптимизации тривиальных операций подсчёта. [#79945](https://github.com/ClickHouse/ClickHouse/pull/79945) ([Raúl Marín](https://github.com/Algunenano)). * Улучшен инлайнинг некоторых операций с `Decimal`. [#79999](https://github.com/ClickHouse/ClickHouse/pull/79999) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* По умолчанию включить параметр `input_format_parquet_bloom_filter_push_down` (значение true). Также исправить ошибку в истории изменений настроек. [#80058](https://github.com/ClickHouse/ClickHouse/pull/80058) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Оптимизированы мутации `ALTER ... DELETE` для кусков, в которых подлежат удалению все строки. Теперь в таких случаях вместо исходного куска сразу создаётся пустой кусок, и мутация не выполняется. [#79307](https://github.com/ClickHouse/ClickHouse/pull/79307) ([Anton Popov](https://github.com/CurtizJ)). -* Избегать лишнего копирования блока при вставке в Compact-часть по возможности. [#79536](https://github.com/ClickHouse/ClickHouse/pull/79536) ([Pavel Kruglov](https://github.com/Avogar)). -* Добавлена настройка `input_format_max_block_size_bytes`, позволяющая ограничить размер блоков, создаваемых во входных форматах, в байтах. Это помогает избежать избыточного потребления памяти при импорте данных, когда строки содержат большие значения. [#79495](https://github.com/ClickHouse/ClickHouse/pull/79495) ([Pavel Kruglov](https://github.com/Avogar)). -* Удалены guard-страницы для потоков и async_socket_for_remote/use_hedge_requests. Изменён метод выделения памяти в `FiberStack` с `mmap` на `aligned_alloc`. Поскольку это дробит VMA, при высокой нагрузке может быть достигнут предел vm.max_map_count. [#79147](https://github.com/ClickHouse/ClickHouse/pull/79147) ([Sema Checherinda](https://github.com/CheSema)). +* По умолчанию установить для `input_format_parquet_bloom_filter_push_down` значение `true`. Также исправлена ошибка в истории изменений настроек. [#80058](https://github.com/ClickHouse/ClickHouse/pull/80058) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Оптимизированы мутации `ALTER ... DELETE` для частей, в которых должны быть удалены все строки. Теперь в таких случаях вместо исходной части создаётся пустая, причём мутация не выполняется. [#79307](https://github.com/ClickHouse/ClickHouse/pull/79307) ([Anton Popov](https://github.com/CurtizJ)). +* Избегать дополнительного копирования блока при вставке в часть Compact, когда это возможно. [#79536](https://github.com/ClickHouse/ClickHouse/pull/79536) ([Pavel Kruglov](https://github.com/Avogar)). +* Добавлена настройка `input_format_max_block_size_bytes` для ограничения в байтах размера блоков, создаваемых во входных форматах. Это может помочь избежать высокого потребления памяти при импорте данных, когда строки содержат большие значения. [#79495](https://github.com/ClickHouse/ClickHouse/pull/79495) ([Pavel Kruglov](https://github.com/Avogar)). +* Удалены защитные страницы для потоков и async_socket_for_remote/use_hedge_requests. Изменён метод выделения памяти в `FiberStack` с `mmap` на `aligned_alloc`, так как это приводит к дроблению VMA и под высокой нагрузкой может быть достигнут предел vm.max_map_count. [#79147](https://github.com/ClickHouse/ClickHouse/pull/79147) ([Sema Checherinda](https://github.com/CheSema)). * Ленивая материализация с параллельными репликами. [#79401](https://github.com/ClickHouse/ClickHouse/pull/79401) ([Igor Nikonov](https://github.com/devcrafter)). - - - - #### Улучшение -* Добавлена возможность применять операции лёгкого удаления «на лету» (при настройках `lightweight_deletes_sync = 0`, `apply_mutations_on_fly = 1`). [#79281](https://github.com/ClickHouse/ClickHouse/pull/79281) ([Anton Popov](https://github.com/CurtizJ)). -* Если данные в формате pretty выводятся в терминале и следующий блок имеет те же ширины столбцов, он может быть продолжением предыдущего блока, «склеивая» его с предыдущим за счет перемещения курсора вверх. Это закрывает [#79333](https://github.com/ClickHouse/ClickHouse/issues/79333). Возможность управляется новой настройкой `output_format_pretty_glue_chunks`. [#79339](https://github.com/ClickHouse/ClickHouse/pull/79339) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Функция `isIPAddressInRange` расширена и теперь поддерживает типы данных `String`, `IPv4`, `IPv6`, `Nullable(String)`, `Nullable(IPv4)` и `Nullable(IPv6)`. [#78364](https://github.com/ClickHouse/ClickHouse/pull/78364) ([YjyJeff](https://github.com/YjyJeff)). -* Добавлена возможность динамически изменять настройки пула подключений движка `PostgreSQL`. [#78414](https://github.com/ClickHouse/ClickHouse/pull/78414) ([Samay Sharma](https://github.com/samay-sharma)). -* Добавлена возможность указывать `_part_offset` в обычной проекции. Это первый шаг к построению индекса проекции. Эту возможность можно использовать вместе с [#58224](https://github.com/ClickHouse/ClickHouse/issues/58224), и она может помочь в решении #63207. [#78429](https://github.com/ClickHouse/ClickHouse/pull/78429) ([Amos Bird](https://github.com/amosbird)). -* Добавлены новые столбцы (`create_query` и `source`) в таблицу `system.named_collections`. Закрывает [#78179](https://github.com/ClickHouse/ClickHouse/issues/78179). [#78582](https://github.com/ClickHouse/ClickHouse/pull/78582) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). -* В системной таблице `system.query_condition_cache` добавлено новое поле `condition`. Оно хранит условие в виде открытого текста, хэш которого используется в качестве ключа в кэше условий запроса. [#78671](https://github.com/ClickHouse/ClickHouse/pull/78671) ([Robert Schulze](https://github.com/rschu1ze)). -* Индексы векторного сходства теперь можно создавать для столбцов типа `BFloat16`. [#78850](https://github.com/ClickHouse/ClickHouse/pull/78850) ([Robert Schulze](https://github.com/rschu1ze)). -* Добавлена поддержка Unix-меток времени с дробной частью при разборе `DateTime64` в режиме best-effort. [#78908](https://github.com/ClickHouse/ClickHouse/pull/78908) ([Pavel Kruglov](https://github.com/Avogar)). -* В реализации delta-kernel хранилища `DeltaLake` исправлен режим сопоставления столбцов и добавлены тесты эволюции схемы. [#78921](https://github.com/ClickHouse/ClickHouse/pull/78921) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Добавлена возможность выполнять легковесные удаления на лету (с настройками `lightweight_deletes_sync = 0`, `apply_mutations_on_fly = 1`). [#79281](https://github.com/ClickHouse/ClickHouse/pull/79281) ([Anton Popov](https://github.com/CurtizJ)). +* Если данные в формате `pretty` отображаются в терминале и следующий блок имеет те же ширины столбцов, вывод может быть продолжен, «склеив» его с предыдущим блоком путём перемещения курсора вверх. Тем самым закрывается задача [#79333](https://github.com/ClickHouse/ClickHouse/issues/79333). Поведение управляется новым параметром `output_format_pretty_glue_chunks`. [#79339](https://github.com/ClickHouse/ClickHouse/pull/79339) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Функция `isIPAddressInRange` теперь поддерживает типы данных `String`, `IPv4`, `IPv6`, `Nullable(String)`, `Nullable(IPv4)` и `Nullable(IPv6)`. [#78364](https://github.com/ClickHouse/ClickHouse/pull/78364) ([YjyJeff](https://github.com/YjyJeff)). +* Добавлена возможность динамически изменять настройки пула соединений движка `PostgreSQL`. [#78414](https://github.com/ClickHouse/ClickHouse/pull/78414) ([Samay Sharma](https://github.com/samay-sharma)). +* Разрешить задавать `_part_offset` в обычной проекции. Это первый шаг к построению индекса проекции. Его можно использовать вместе с [#58224](https://github.com/ClickHouse/ClickHouse/issues/58224), что может помочь улучшить #63207. [#78429](https://github.com/ClickHouse/ClickHouse/pull/78429) ([Amos Bird](https://github.com/amosbird)). +* Добавлены новые столбцы (`create_query` и `source`) в `system.named_collections`. Закрыта задача [#78179](https://github.com/ClickHouse/ClickHouse/issues/78179). [#78582](https://github.com/ClickHouse/ClickHouse/pull/78582) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). +* В системную таблицу `system.query_condition_cache` добавлено новое поле `condition`. Оно хранит условие в открытом виде, хэш которого используется в качестве ключа в кэше условий запросов. [#78671](https://github.com/ClickHouse/ClickHouse/pull/78671) ([Robert Schulze](https://github.com/rschu1ze)). +* Теперь векторные индексы сходства можно создавать для столбцов типа `BFloat16`. [#78850](https://github.com/ClickHouse/ClickHouse/pull/78850) ([Robert Schulze](https://github.com/rschu1ze)). +* Поддержка Unix-меток времени с дробной частью при разборе `DateTime64` в режиме best effort. [#78908](https://github.com/ClickHouse/ClickHouse/pull/78908) ([Pavel Kruglov](https://github.com/Avogar)). +* В хранилище `DeltaLake` в реализации delta-kernel исправлен режим сопоставления столбцов и добавлены тесты для эволюции схемы. [#78921](https://github.com/ClickHouse/ClickHouse/pull/78921) ([Kseniia Sumarokova](https://github.com/kssenii)). * Улучшена вставка в столбец `Variant` в формате VALUES за счёт более корректного преобразования значений. [#78923](https://github.com/ClickHouse/ClickHouse/pull/78923) ([Pavel Kruglov](https://github.com/Avogar)). -* Функция `tokens` была расширена и теперь принимает дополнительный аргумент «tokenizer», а также дополнительные аргументы, специфичные для выбранного токенизатора. [#79001](https://github.com/ClickHouse/ClickHouse/pull/79001) ([Elmi Ahmadov](https://github.com/ahmadov)). -* Оператор `SHOW CLUSTER` теперь разворачивает макросы (если они есть) в своём аргументе. [#79006](https://github.com/ClickHouse/ClickHouse/pull/79006) ([arf42](https://github.com/arf42)). -* Функции хеширования теперь поддерживают значения `NULL` внутри массивов, кортежей и отображений (map). (задачи [#48365](https://github.com/ClickHouse/ClickHouse/issues/48365) и [#48623](https://github.com/ClickHouse/ClickHouse/issues/48623)). [#79008](https://github.com/ClickHouse/ClickHouse/pull/79008) ([Michael Kolupaev](https://github.com/al13n321)). -* Обновить cctz до версии 2025a. [#79043](https://github.com/ClickHouse/ClickHouse/pull/79043) ([Raúl Marín](https://github.com/Algunenano)). -* Изменена обработка stderr по умолчанию для UDF на "log_last". Это повышает удобство использования. [#79066](https://github.com/ClickHouse/ClickHouse/pull/79066) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Сделать вкладки в веб-интерфейсе поддерживающими отмену действий. Это закрывает задачу [#71284](https://github.com/ClickHouse/ClickHouse/issues/71284). [#79084](https://github.com/ClickHouse/ClickHouse/pull/79084) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Удалены настройки в ходе `recoverLostReplica` аналогично тому, как это было сделано в [https://github.com/ClickHouse/ClickHouse/pull/78637](https://github.com/ClickHouse/ClickHouse/pull/78637). [#79113](https://github.com/ClickHouse/ClickHouse/pull/79113) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). +* Функция `tokens` была расширена: теперь она принимает дополнительный аргумент «tokenizer», а также другие аргументы, специфичные для токенизатора. [#79001](https://github.com/ClickHouse/ClickHouse/pull/79001) ([Elmi Ahmadov](https://github.com/ahmadov)). +* Оператор `SHOW CLUSTER` теперь раскрывает макросы (если они есть) в своём аргументе. [#79006](https://github.com/ClickHouse/ClickHouse/pull/79006) ([arf42](https://github.com/arf42)). +* Функции хеширования теперь поддерживают значения `NULL` внутри массивов, кортежей и отображений (issues [#48365](https://github.com/ClickHouse/ClickHouse/issues/48365) и [#48623](https://github.com/ClickHouse/ClickHouse/issues/48623)). [#79008](https://github.com/ClickHouse/ClickHouse/pull/79008) ([Michael Kolupaev](https://github.com/al13n321)). +* Обновлён cctz до версии 2025a. [#79043](https://github.com/ClickHouse/ClickHouse/pull/79043) ([Raúl Marín](https://github.com/Algunenano)). +* Изменили обработку stderr по умолчанию для UDF на "log_last". Это повышает удобство использования. [#79066](https://github.com/ClickHouse/ClickHouse/pull/79066) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Сделать закрытие вкладок в Web UI обратимым. Закрывает [#71284](https://github.com/ClickHouse/ClickHouse/issues/71284). [#79084](https://github.com/ClickHouse/ClickHouse/pull/79084) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Удалить настройки при выполнении `recoverLostReplica` так же, как это было сделано в: [https://github.com/ClickHouse/ClickHouse/pull/78637](https://github.com/ClickHouse/ClickHouse/pull/78637). [#79113](https://github.com/ClickHouse/ClickHouse/pull/79113) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). * Добавлены события профилирования: `ParquetReadRowGroups` и `ParquetPrunedRowGroups` для профилирования отсечения по индексу Parquet. [#79180](https://github.com/ClickHouse/ClickHouse/pull/79180) ([flynn](https://github.com/ucasfl)). -* Поддержка выполнения команды `ALTER` для базы данных в кластере. [#79242](https://github.com/ClickHouse/ClickHouse/pull/79242) ([Tuan Pham Anh](https://github.com/tuanpach)). -* Явно пропускайте пропуски запусков сбора статистики для QueryMetricLog, иначе журналу потребуется много времени, чтобы догнать текущее время. [#79257](https://github.com/ClickHouse/ClickHouse/pull/79257) ([Mikhail Artemenko](https://github.com/Michicosun)). +* Добавлена поддержка выполнения `ALTER` над базой данных на кластере. [#79242](https://github.com/ClickHouse/ClickHouse/pull/79242) ([Tuan Pham Anh](https://github.com/tuanpach)). +* Явно пропускать пропущенные запуски сбора статистики в журнале QueryMetricLog, иначе журналу потребуется много времени, чтобы догнать текущее время. [#79257](https://github.com/ClickHouse/ClickHouse/pull/79257) ([Mikhail Artemenko](https://github.com/Michicosun)). * Небольшие оптимизации чтения форматов на основе `Arrow`. [#79308](https://github.com/ClickHouse/ClickHouse/pull/79308) ([Bharat Nallan](https://github.com/bharatnc)). * Настройка `allow_archive_path_syntax` по ошибке была помечена как экспериментальная. Добавлен тест, чтобы предотвратить включение экспериментальных настроек по умолчанию. [#79320](https://github.com/ClickHouse/ClickHouse/pull/79320) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Параметры кэша страниц сделали настраиваемыми на уровне отдельного запроса. Это необходимо для более быстрого проведения экспериментов и возможности тонкой настройки запросов с высокой пропускной способностью и низкой задержкой. [#79337](https://github.com/ClickHouse/ClickHouse/pull/79337) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Не выводить числовые подсказки в «красивом» формате для чисел, которые выглядят как типичные 64-битные хэши. Это закрывает [#79334](https://github.com/ClickHouse/ClickHouse/issues/79334). [#79338](https://github.com/ClickHouse/ClickHouse/pull/79338) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Цвета графиков на расширенных дашбордах будут рассчитываться на основе хеша соответствующего запроса. Это упрощает запоминание и поиск графика при прокрутке дашборда. [#79341](https://github.com/ClickHouse/ClickHouse/pull/79341) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Добавлена асинхронная метрика `FilesystemCacheCapacity` — общая ёмкость виртуальной файловой системы `cache`. Полезно для глобального мониторинга инфраструктуры. [#79348](https://github.com/ClickHouse/ClickHouse/pull/79348) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Оптимизирован доступ к system.parts (размеры столбцов и индексов читаются только при явном запросе). [#79352](https://github.com/ClickHouse/ClickHouse/pull/79352) ([Azat Khuzhin](https://github.com/azat)). -* Вычислять только необходимые поля для запроса `'SHOW CLUSTER '` вместо всех полей. [#79368](https://github.com/ClickHouse/ClickHouse/pull/79368) ([Tuan Pham Anh](https://github.com/tuanpach)). +* Настройки кэша страниц теперь можно задавать на уровне отдельного запроса. Это необходимо для более быстрого экспериментирования и возможности тонкой настройки запросов с высокой пропускной способностью и низкой задержкой. [#79337](https://github.com/ClickHouse/ClickHouse/pull/79337) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Не выводить числовые подсказки в удобочитаемом формате для чисел, которые выглядят как большинство 64-битных хэшей. Это закрывает [#79334](https://github.com/ClickHouse/ClickHouse/issues/79334). [#79338](https://github.com/ClickHouse/ClickHouse/pull/79338) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Цвета графиков на расширенных дашбордах будут вычисляться на основе хеша соответствующего запроса. Это упрощает запоминание и поиск графика при прокрутке дашборда. [#79341](https://github.com/ClickHouse/ClickHouse/pull/79341) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Добавлена асинхронная метрика `FilesystemCacheCapacity` — общая ёмкость виртуальной файловой системы `cache`. Полезна для глобального мониторинга инфраструктуры. [#79348](https://github.com/ClickHouse/ClickHouse/pull/79348) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Оптимизирован доступ к system.parts (размер столбцов и индексов читается только по запросу). [#79352](https://github.com/ClickHouse/ClickHouse/pull/79352) ([Azat Khuzhin](https://github.com/azat)). +* Вычислять только соответствующие поля для запроса `'SHOW CLUSTER '` вместо всех полей. [#79368](https://github.com/ClickHouse/ClickHouse/pull/79368) ([Tuan Pham Anh](https://github.com/tuanpach)). * Добавлена возможность указывать настройки хранилища для `DatabaseCatalog`. [#79407](https://github.com/ClickHouse/ClickHouse/pull/79407) ([Kseniia Sumarokova](https://github.com/kssenii)). * Добавлена поддержка локального хранилища в `DeltaLake`. [#79416](https://github.com/ClickHouse/ClickHouse/pull/79416) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Добавлена настройка уровня запроса для включения delta-kernel-rs: `allow_experimental_delta_kernel_rs`. [#79418](https://github.com/ClickHouse/ClickHouse/pull/79418) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Исправлена возможная ситуация с бесконечным циклом при перечислении блобов в хранилищах блобов Azure/S3. [#79425](https://github.com/ClickHouse/ClickHouse/pull/79425) ([Alexander Gololobov](https://github.com/davenger)). -* Добавлена настройка кеша файловой системы `max_size_ratio_to_total_space`. [#79460](https://github.com/ClickHouse/ClickHouse/pull/79460) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Для `clickhouse-benchmark` перенастроена опция `reconnect`, чтобы принимать значения 0, 1 или N, определяющие число переподключений. [#79465](https://github.com/ClickHouse/ClickHouse/pull/79465) ([Sachin Kumar Singh](https://github.com/sachinkumarsingh092)). -* Разрешить `ALTER TABLE ... MOVE|REPLACE PARTITION` для таблиц, расположенных на разных дисках `plain_rewritable`. [#79566](https://github.com/ClickHouse/ClickHouse/pull/79566) ([Julia Kartseva](https://github.com/jkartseva)). -* Индекс векторного сходства теперь также используется, если опорный вектор имеет тип `Array(BFloat16)`. [#79745](https://github.com/ClickHouse/ClickHouse/pull/79745) ([Shankar Iyer](https://github.com/shankar-iyer)). -* Добавлены столбцы last_error_message, last_error_trace и query_id в таблицу system.error_log. Связанный тикет [#75816](https://github.com/ClickHouse/ClickHouse/issues/75816). [#79836](https://github.com/ClickHouse/ClickHouse/pull/79836) ([Andrei Tinikov](https://github.com/Dolso)). -* По умолчанию включена отправка отчётов о сбоях. Это можно отключить в файле конфигурации сервера. [#79838](https://github.com/ClickHouse/ClickHouse/pull/79838) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Добавлена настройка на уровне запроса для включения поддержки delta-kernel-rs: `allow_experimental_delta_kernel_rs`. [#79418](https://github.com/ClickHouse/ClickHouse/pull/79418) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Исправлен возможный бесконечный цикл при получении списка BLOB-объектов из хранилищ Azure/S3. [#79425](https://github.com/ClickHouse/ClickHouse/pull/79425) ([Alexander Gololobov](https://github.com/davenger)). +* Добавлена настройка кэша файловой системы `max_size_ratio_to_total_space`. [#79460](https://github.com/ClickHouse/ClickHouse/pull/79460) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Для `clickhouse-benchmark` перенастроен параметр `reconnect`, чтобы он принимал значения 0, 1 или N, задающие соответствующее поведение переподключения. [#79465](https://github.com/ClickHouse/ClickHouse/pull/79465) ([Sachin Kumar Singh](https://github.com/sachinkumarsingh092)). +* Разрешить использование `ALTER TABLE ... MOVE|REPLACE PARTITION` для таблиц на разных дисках `plain_rewritable`. [#79566](https://github.com/ClickHouse/ClickHouse/pull/79566) ([Julia Kartseva](https://github.com/jkartseva)). +* Индекс сходства векторов теперь также используется, если опорный вектор имеет тип `Array(BFloat16)`. [#79745](https://github.com/ClickHouse/ClickHouse/pull/79745) ([Shankar Iyer](https://github.com/shankar-iyer)). +* Добавлены last_error_message, last_error_trace и query_id в таблицу system.error_log. Связанный тикет [#75816](https://github.com/ClickHouse/ClickHouse/issues/75816). [#79836](https://github.com/ClickHouse/ClickHouse/pull/79836) ([Andrei Tinikov](https://github.com/Dolso)). +* По умолчанию включена отправка отчетов о сбоях. Это можно отключить в конфигурационном файле сервера. [#79838](https://github.com/ClickHouse/ClickHouse/pull/79838) ([Alexey Milovidov](https://github.com/alexey-milovidov)). * Системная таблица `system.functions` теперь показывает, в какой версии ClickHouse функции впервые появились. [#79839](https://github.com/ClickHouse/ClickHouse/pull/79839) ([Robert Schulze](https://github.com/rschu1ze)). -* Добавлена настройка `access_control_improvements.enable_user_name_access_type`. Эта настройка позволяет включать или отключать детализированные привилегии GRANT для пользователей и ролей, добавленные в [https://github.com/ClickHouse/ClickHouse/pull/72246](https://github.com/ClickHouse/ClickHouse/pull/72246). Имеет смысл отключить эту настройку, если в кластере есть реплики версии ниже 25.1. [#79842](https://github.com/ClickHouse/ClickHouse/pull/79842) ([pufit](https://github.com/pufit)). -* Корректная реализация метода `ASTSelectWithUnionQuery::clone()` теперь также учитывает поле `is_normalized`. Это может помочь с [#77569](https://github.com/ClickHouse/ClickHouse/issues/77569). [#79909](https://github.com/ClickHouse/ClickHouse/pull/79909) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). -* Исправлено несогласованное форматирование некоторых запросов с оператором EXCEPT. Если левая часть оператора EXCEPT заканчивается на `*`, отформатированный запрос теряет круглые скобки и затем интерпретируется как `*` с модификатором `EXCEPT`. Эти запросы обнаруживаются фаззером и маловероятно, что они встретятся на практике. Это закрывает [#79950](https://github.com/ClickHouse/ClickHouse/issues/79950). [#79952](https://github.com/ClickHouse/ClickHouse/pull/79952) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Небольшое улучшение разбора типа `JSON` за счёт использования кэша порядка десериализации вариантов. [#79984](https://github.com/ClickHouse/ClickHouse/pull/79984) ([Pavel Kruglov](https://github.com/Avogar)). +* Добавлена настройка `access_control_improvements.enable_user_name_access_type`. Эта настройка позволяет включать или отключать точное назначение прав доступа пользователям и ролям, добавленное в [https://github.com/ClickHouse/ClickHouse/pull/72246](https://github.com/ClickHouse/ClickHouse/pull/72246). Имеет смысл отключить эту настройку, если в вашем кластере есть реплики версий ранее 25.1. [#79842](https://github.com/ClickHouse/ClickHouse/pull/79842) ([pufit](https://github.com/pufit)). +* Теперь в корректной реализации метода `ASTSelectWithUnionQuery::clone()` также учитывается поле `is_normalized`. Это может помочь с [#77569](https://github.com/ClickHouse/ClickHouse/issues/77569). [#79909](https://github.com/ClickHouse/ClickHouse/pull/79909) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). +* Исправлено непоследовательное форматирование некоторых запросов с оператором EXCEPT. Если левая часть оператора EXCEPT заканчивается символом `*`, отформатированный запрос теряет скобки и затем разбирается как `*` с модификатором `EXCEPT`. Эти запросы обнаруживаются фаззером и вряд ли будут встречаться на практике. Это закрывает [#79950](https://github.com/ClickHouse/ClickHouse/issues/79950). [#79952](https://github.com/ClickHouse/ClickHouse/pull/79952) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Незначительное улучшение разбора типа `JSON` за счёт использования кэша порядка десериализации вариантов. [#79984](https://github.com/ClickHouse/ClickHouse/pull/79984) ([Pavel Kruglov](https://github.com/Avogar)). * Добавлена настройка `s3_slow_all_threads_after_network_error`. [#80035](https://github.com/ClickHouse/ClickHouse/pull/80035) ([Vitaly Baranov](https://github.com/vitlibar)). -* Уровень логирования сообщений о выбранных для слияния частях был некорректным (Information). Закрывает [#80061](https://github.com/ClickHouse/ClickHouse/issues/80061). [#80062](https://github.com/ClickHouse/ClickHouse/pull/80062) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* trace-visualizer: добавить runtime/share во всплывающие подсказки и сообщения о статусе. [#79040](https://github.com/ClickHouse/ClickHouse/pull/79040) ([Sergei Trifonov](https://github.com/serxa)). -* trace-visualizer: загружать данные с сервера ClickHouse. [#79042](https://github.com/ClickHouse/ClickHouse/pull/79042) ([Sergei Trifonov](https://github.com/serxa)). -* Добавлены метрики для отслеживания неуспешных слияний. [#79228](https://github.com/ClickHouse/ClickHouse/pull/79228) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). -* `clickhouse-benchmark` будет отображать процент выполнения, исходя из максимального числа итераций, если оно задано. [#79346](https://github.com/ClickHouse/ClickHouse/pull/79346) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Добавлен визуализатор таблицы system.parts. [#79437](https://github.com/ClickHouse/ClickHouse/pull/79437) ([Sergei Trifonov](https://github.com/serxa)). +* Уровень логирования сообщений о выбранных частях для слияния был неверным (Information). Закрывает [#80061](https://github.com/ClickHouse/ClickHouse/issues/80061). [#80062](https://github.com/ClickHouse/ClickHouse/pull/80062) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* trace-visualizer: добавлено отображение runtime/share во всплывающих подсказках и статусных сообщениях. [#79040](https://github.com/ClickHouse/ClickHouse/pull/79040) ([Sergei Trifonov](https://github.com/serxa)). +* trace-visualizer: загрузка данных с сервера ClickHouse. [#79042](https://github.com/ClickHouse/ClickHouse/pull/79042) ([Sergei Trifonov](https://github.com/serxa)). +* Добавлены метрики для неуспешных слияний. [#79228](https://github.com/ClickHouse/ClickHouse/pull/79228) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). +* `clickhouse-benchmark` будет отображать процент выполнения на основе максимального числа итераций, если оно задано. [#79346](https://github.com/ClickHouse/ClickHouse/pull/79346) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Добавлен визуализатор для таблицы system.parts. [#79437](https://github.com/ClickHouse/ClickHouse/pull/79437) ([Sergei Trifonov](https://github.com/serxa)). * Добавлен инструмент для анализа задержек запросов. [#79978](https://github.com/ClickHouse/ClickHouse/pull/79978) ([Sergei Trifonov](https://github.com/serxa)). +#### Исправление ошибки (некорректное поведение, заметное пользователю, в официальном стабильном релизе) - - - -#### Исправление ошибки (видимая пользователю неисправность в официальном стабильном релизе) - -* Исправлено переименование столбцов, отсутствующих в части. [#76346](https://github.com/ClickHouse/ClickHouse/pull/76346) ([Anton Popov](https://github.com/CurtizJ)). -* Материализованное представление может начать работать слишком поздно, например после таблицы Kafka, которая передаёт в него данные. [#72123](https://github.com/ClickHouse/ClickHouse/pull/72123) ([Ilya Golshtein](https://github.com/ilejn)). -* Исправлена перезапись запроса `SELECT` при создании `VIEW` с включённым анализатором. Закрывает [#75956](https://github.com/ClickHouse/ClickHouse/issues/75956). [#76356](https://github.com/ClickHouse/ClickHouse/pull/76356) ([Dmitry Novik](https://github.com/novikd)). -* Исправлено применение настройки `async_insert`, получаемой с сервера (через `apply_settings_from_server`), которое ранее приводило к ошибкам `Unknown packet 11 from server` на клиенте. [#77578](https://github.com/ClickHouse/ClickHouse/pull/77578) ([Azat Khuzhin](https://github.com/azat)). -* Исправлена проблема, из-за которой обновляемое материализованное представление в реплицируемой базе данных не работало на недавно добавленных репликах. [#77774](https://github.com/ClickHouse/ClickHouse/pull/77774) ([Michael Kolupaev](https://github.com/al13n321)). -* Исправлена проблема, из-за которой обновляемые материализованные представления приводили к повреждению резервных копий. [#77893](https://github.com/ClickHouse/ClickHouse/pull/77893) ([Michael Kolupaev](https://github.com/al13n321)). -* Устранена давняя логическая ошибка в функции `transform`. [#78247](https://github.com/ClickHouse/ClickHouse/pull/78247) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* Исправлены некоторые случаи, когда вторичный индекс не применялся анализатором. Исправлены [#65607](https://github.com/ClickHouse/ClickHouse/issues/65607), [#69373](https://github.com/ClickHouse/ClickHouse/issues/69373). [#78485](https://github.com/ClickHouse/ClickHouse/pull/78485) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). -* Исправлена выгрузка событий профилирования (`NetworkSendElapsedMicroseconds`/`NetworkSendBytes`) для протокола HTTP с включённым сжатием (погрешность не должна превышать размер буфера, обычно около 1MiB). [#78516](https://github.com/ClickHouse/ClickHouse/pull/78516) ([Azat Khuzhin](https://github.com/azat)). -* Исправлен анализатор, вызывавший LOGICAL_ERROR при `JOIN ... USING` с участием столбца `ALIAS` — теперь вместо этого выдаётся корректная ошибка. [#78618](https://github.com/ClickHouse/ClickHouse/pull/78618) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* Исправлен анализатор: `CREATE VIEW ... ON CLUSTER` завершался с ошибкой, если `SELECT` содержал позиционные параметры. [#78663](https://github.com/ClickHouse/ClickHouse/pull/78663) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* Исправлена ошибка `Block structure mismatch` при выполнении `INSERT SELECT` в табличную функцию с автоопределением схемы, если `SELECT` содержит скалярные подзапросы. [#78677](https://github.com/ClickHouse/ClickHouse/pull/78677) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). -* Исправлен анализатор запросов: при prefer_global_in_and_join = 1 для распределённой таблицы в запросе SELECT функция `in` должна быть заменена на `globalIn`. [#78749](https://github.com/ClickHouse/ClickHouse/pull/78749) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* Исправлено несколько типов запросов `SELECT`, читающих из таблиц с движком `MongoDB` или табличной функцией `mongodb`: запросы с неявным преобразованием константного значения в секции `WHERE` (например, `WHERE datetime = '2025-03-10 00:00:00'`); запросы с `LIMIT` и `GROUP BY`. Ранее они могли возвращать некорректный результат. [#78777](https://github.com/ClickHouse/ClickHouse/pull/78777) ([Anton Popov](https://github.com/CurtizJ)). -* Исправлено преобразование между разными типами JSON. Теперь оно выполняется простым приведением типов через преобразование к/от String. Это менее эффективно, но на 100% корректно. [#78807](https://github.com/ClickHouse/ClickHouse/pull/78807) ([Pavel Kruglov](https://github.com/Avogar)). +* Исправлены ошибки при переименовании столбцов, отсутствующих в части. [#76346](https://github.com/ClickHouse/ClickHouse/pull/76346) ([Anton Popov](https://github.com/CurtizJ)). +* Материализованное представление могло запускаться слишком поздно, например после таблицы Kafka, которая передаёт в него поток данных. [#72123](https://github.com/ClickHouse/ClickHouse/pull/72123) ([Ilya Golshtein](https://github.com/ilejn)). +* Исправлена проблема с перезаписью запроса `SELECT` при создании `VIEW` с включённым анализатором. Закрывает [#75956](https://github.com/ClickHouse/ClickHouse/issues/75956). [#76356](https://github.com/ClickHouse/ClickHouse/pull/76356) ([Dmitry Novik](https://github.com/novikd)). +* Исправлена проблема с применением `async_insert` с сервера (через `apply_settings_from_server`), которая ранее приводила к ошибкам `Unknown packet 11 from server` на стороне клиента. [#77578](https://github.com/ClickHouse/ClickHouse/pull/77578) ([Azat Khuzhin](https://github.com/azat)). +* Исправлена проблема, из-за которой обновляемое материализованное представление в реплицируемой базе данных не работало на вновь добавленных репликах. [#77774](https://github.com/ClickHouse/ClickHouse/pull/77774) ([Michael Kolupaev](https://github.com/al13n321)). +* Исправлена проблема, из-за которой обновляемые материализованные представления приводили к сбоям резервного копирования. [#77893](https://github.com/ClickHouse/ClickHouse/pull/77893) ([Michael Kolupaev](https://github.com/al13n321)). +* Исправлена старая логическая ошибка, возникавшая в `transform`. [#78247](https://github.com/ClickHouse/ClickHouse/pull/78247) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* Исправлены некоторые случаи, когда вторичный индекс не использовался анализатором. Тем самым исправлены [#65607](https://github.com/ClickHouse/ClickHouse/issues/65607) и [#69373](https://github.com/ClickHouse/ClickHouse/issues/69373). [#78485](https://github.com/ClickHouse/ClickHouse/pull/78485) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). +* Исправлен дамп профилирующих событий (`NetworkSendElapsedMicroseconds`/`NetworkSendBytes`) для протокола HTTP с включённым сжатием (расхождение не должно превышать размер буфера, обычно около 1MiB). [#78516](https://github.com/ClickHouse/ClickHouse/pull/78516) ([Azat Khuzhin](https://github.com/azat)). +* Исправлен анализатор, приводивший к LOGICAL_ERROR при использовании JOIN ... USING со столбцом ALIAS; теперь он выдаёт корректную ошибку. [#78618](https://github.com/ClickHouse/ClickHouse/pull/78618) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* Исправлена ошибка анализатора: `CREATE VIEW ... ON CLUSTER` завершался с ошибкой, если `SELECT` содержал позиционные аргументы. [#78663](https://github.com/ClickHouse/ClickHouse/pull/78663) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* Исправлена ошибка `Block structure mismatch` в случае `INSERT SELECT` в табличную функцию с автоматическим выводом схемы, если `SELECT` содержит скалярные подзапросы. [#78677](https://github.com/ClickHouse/ClickHouse/pull/78677) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +* Исправлен анализатор: при prefer_global_in_and_join=1 для Distributed-таблицы функция `in` в запросе SELECT должна заменяться на `globalIn`. [#78749](https://github.com/ClickHouse/ClickHouse/pull/78749) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* Исправлено несколько типов запросов `SELECT`, которые читают из таблиц с движком `MongoDB` или табличной функцией `mongodb`: запросы с неявным преобразованием константного значения в предложении `WHERE` (например, `WHERE datetime = '2025-03-10 00:00:00'`); запросы с `LIMIT` и `GROUP BY`. Ранее они могли возвращать неверный результат. [#78777](https://github.com/ClickHouse/ClickHouse/pull/78777) ([Anton Popov](https://github.com/CurtizJ)). +* Исправлено преобразование между разными типами JSON. Теперь оно выполняется простым приведением типов через преобразование к/от типа String. Это менее эффективно, но на 100% корректно. [#78807](https://github.com/ClickHouse/ClickHouse/pull/78807) ([Pavel Kruglov](https://github.com/Avogar)). * Исправлена логическая ошибка при преобразовании типа Dynamic в Interval. [#78813](https://github.com/ClickHouse/ClickHouse/pull/78813) ([Pavel Kruglov](https://github.com/Avogar)). * Исправлен откат столбца при ошибке парсинга JSON. [#78836](https://github.com/ClickHouse/ClickHouse/pull/78836) ([Pavel Kruglov](https://github.com/Avogar)). -* Исправлена ошибка «bad cast» при выполнении join с использованием константного столбца-псевдонима. [#78848](https://github.com/ClickHouse/ClickHouse/pull/78848) ([Vladimir Cherkasov](https://github.com/vdimir)). -* Не разрешать использование PREWHERE в материализованных представлениях для столбцов, у которых в представлении и целевой таблице разные типы. [#78889](https://github.com/ClickHouse/ClickHouse/pull/78889) ([Pavel Kruglov](https://github.com/Avogar)). +* Исправлена ошибка 'bad cast' при выполнении операции JOIN с использованием константного столбца-алиаса. [#78848](https://github.com/ClickHouse/ClickHouse/pull/78848) ([Vladimir Cherkasov](https://github.com/vdimir)). +* Запрещено использовать `PREWHERE` в материализованном представлении для столбцов с разными типами данных в представлении и целевой таблице. [#78889](https://github.com/ClickHouse/ClickHouse/pull/78889) ([Pavel Kruglov](https://github.com/Avogar)). * Исправлена логическая ошибка при разборе некорректных бинарных данных столбца типа Variant. [#78982](https://github.com/ClickHouse/ClickHouse/pull/78982) ([Pavel Kruglov](https://github.com/Avogar)). -* Выбрасывать исключение, если размер пакета Parquet установлен в 0. Ранее при output_format_parquet_batch_size = 0 ClickHouse зависал. Теперь это поведение исправлено. [#78991](https://github.com/ClickHouse/ClickHouse/pull/78991) ([daryawessely](https://github.com/daryawessely)). -* Исправлена десериализация дискриминаторов типа Variant в базовом формате в компактных партах. Ошибка была внесена в [https://github.com/ClickHouse/ClickHouse/pull/55518](https://github.com/ClickHouse/ClickHouse/pull/55518). [#79000](https://github.com/ClickHouse/ClickHouse/pull/79000) ([Pavel Kruglov](https://github.com/Avogar)). -* Словари типа `complex_key_ssd_cache` теперь отклоняют нулевые или отрицательные значения параметров `block_size` и `write_buffer_size` (issue [#78314](https://github.com/ClickHouse/ClickHouse/issues/78314)). [#79028](https://github.com/ClickHouse/ClickHouse/pull/79028) ([Elmi Ahmadov](https://github.com/ahmadov)). -* Избегайте использования Field для неагрегированных столбцов в SummingMergeTree. Это может привести к неожиданным ошибкам при работе с типами Dynamic/Variant, которые используются в SummingMergeTree. [#79051](https://github.com/ClickHouse/ClickHouse/pull/79051) ([Pavel Kruglov](https://github.com/Avogar)). +* Теперь выбрасывается исключение, если размер пакета Parquet установлен в 0. Ранее при `output_format_parquet_batch_size = 0` ClickHouse зависал. Теперь это поведение исправлено. [#78991](https://github.com/ClickHouse/ClickHouse/pull/78991) ([daryawessely](https://github.com/daryawessely)). +* Исправлена десериализация дискриминаторов variant с базовым форматом в компактных партах. Регрессия появилась в [https://github.com/ClickHouse/ClickHouse/pull/55518](https://github.com/ClickHouse/ClickHouse/pull/55518). [#79000](https://github.com/ClickHouse/ClickHouse/pull/79000) ([Pavel Kruglov](https://github.com/Avogar)). +* Словари типа `complex_key_ssd_cache` теперь отклоняют значения параметров `block_size` и `write_buffer_size`, равные нулю или отрицательные (issue [#78314](https://github.com/ClickHouse/ClickHouse/issues/78314)). [#79028](https://github.com/ClickHouse/ClickHouse/pull/79028) ([Elmi Ahmadov](https://github.com/ahmadov)). +* Избегайте использования Field для неагрегированных столбцов в SummingMergeTree. Это может привести к неожиданным ошибкам с типами Dynamic/Variant, используемыми в SummingMergeTree. [#79051](https://github.com/ClickHouse/ClickHouse/pull/79051) ([Pavel Kruglov](https://github.com/Avogar)). * Исправлено чтение из материализованного представления с распределённой целевой таблицей и отличающимся заголовком в анализаторе. [#79059](https://github.com/ClickHouse/ClickHouse/pull/79059) ([Pavel Kruglov](https://github.com/Avogar)). -* Исправляет ошибку, из-за которой `arrayUnion()` возвращал лишние (некорректные) значения в таблицах при пакетных вставках. Исправляет [#75057](https://github.com/ClickHouse/ClickHouse/issues/75057). [#79079](https://github.com/ClickHouse/ClickHouse/pull/79079) ([Peter Nguyen](https://github.com/petern48)). -* Исправлена ошибка сегментации в `OpenSSLInitializer`. Закрывает [#79092](https://github.com/ClickHouse/ClickHouse/issues/79092). [#79097](https://github.com/ClickHouse/ClickHouse/pull/79097) ([Konstantин Bogdanov](https://github.com/thevar1able)). -* Всегда задавайте префикс для операции ListObject в S3. [#79114](https://github.com/ClickHouse/ClickHouse/pull/79114) ([Azat Khuzhin](https://github.com/azat)). -* Исправляет ошибку, из-за которой arrayUnion() возвращала лишние (некорректные) значения в таблицах, в которые выполнялись пакетные вставки. Исправляет [#79157](https://github.com/ClickHouse/ClickHouse/issues/79157). [#79158](https://github.com/ClickHouse/ClickHouse/pull/79158) ([Peter Nguyen](https://github.com/petern48)). -* Исправлена логическая ошибка после проталкивания фильтра. [#79164](https://github.com/ClickHouse/ClickHouse/pull/79164) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). -* Исправлена работа движка таблиц DeltaLake с реализацией delta-kernel при использовании через HTTP-эндпоинты, а также исправлен NOSIGN. Закрывает [#78124](https://github.com/ClickHouse/ClickHouse/issues/78124). [#79203](https://github.com/ClickHouse/ClickHouse/pull/79203) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Исправление в Keeper: предотвращено срабатывание watch-уведомлений при неуспешных multi-запросах. [#79247](https://github.com/ClickHouse/ClickHouse/pull/79247) ([Antonio Andelic](https://github.com/antonio2368)). -* Запретить использование типов Dynamic и JSON в выражении `IN`. При текущей реализации `IN` это может приводить к некорректным результатам. Корректная поддержка этих типов в `IN` сложна и может быть реализована в будущем. [#79282](https://github.com/ClickHouse/ClickHouse/pull/79282) ([Pavel Kruglov](https://github.com/Avogar)). +* Исправляет ошибку, из-за которой `arrayUnion()` возвращал лишние (некорректные) значения в таблицах, в которые выполнялись пакетные вставки. Исправляет ошибку [#75057](https://github.com/ClickHouse/ClickHouse/issues/75057). [#79079](https://github.com/ClickHouse/ClickHouse/pull/79079) ([Peter Nguyen](https://github.com/petern48)). +* Исправлена ошибка сегментации в `OpenSSLInitializer`. Закрывает [#79092](https://github.com/ClickHouse/ClickHouse/issues/79092). [#79097](https://github.com/ClickHouse/ClickHouse/pull/79097) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* Всегда задавайте префикс при использовании S3 ListObject. [#79114](https://github.com/ClickHouse/ClickHouse/pull/79114) ([Azat Khuzhin](https://github.com/azat)). +* Исправлена ошибка, из-за которой `arrayUnion()` возвращала лишние (некорректные) значения в таблицах с пакетной вставкой данных. Исправляет [#79157](https://github.com/ClickHouse/ClickHouse/issues/79157). [#79158](https://github.com/ClickHouse/ClickHouse/pull/79158) ([Peter Nguyen](https://github.com/petern48)). +* Исправлена логическая ошибка после применения оптимизации проталкивания фильтра (filter pushdown). [#79164](https://github.com/ClickHouse/ClickHouse/pull/79164) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +* Исправлен движок таблиц DeltaLake с реализацией delta-kernel при работе с HTTP-эндпоинтами, исправлен NOSIGN. Закрывает [#78124](https://github.com/ClickHouse/ClickHouse/issues/78124). [#79203](https://github.com/ClickHouse/ClickHouse/pull/79203) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Исправление в Keeper: предотвращено срабатывание наблюдателей при неудачных мультизапросах. [#79247](https://github.com/ClickHouse/ClickHouse/pull/79247) ([Antonio Andelic](https://github.com/antonio2368)). +* Запрещены типы Dynamic и JSON в операторе `IN`. При текущей реализации `IN` это может приводить к некорректным результатам. Правильная поддержка этих типов в `IN` сложна и может быть реализована в будущем. [#79282](https://github.com/ClickHouse/ClickHouse/pull/79282) ([Pavel Kruglov](https://github.com/Avogar)). * Исправлена проверка на дублирующиеся пути при разборе типа JSON. [#79317](https://github.com/ClickHouse/ClickHouse/pull/79317) ([Pavel Kruglov](https://github.com/Avogar)). * Исправлены проблемы с подключением SecureStreamSocket. [#79383](https://github.com/ClickHouse/ClickHouse/pull/79383) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* Исправлена проблема с загрузкой дисков plain_rewritable, содержащих данные. [#79439](https://github.com/ClickHouse/ClickHouse/pull/79439) ([Julia Kartseva](https://github.com/jkartseva)). -* Исправлен сбой при динамическом обнаружении подстолбцов в Wide‑частях таблиц MergeTree. [#79466](https://github.com/ClickHouse/ClickHouse/pull/79466) ([Pavel Kruglov](https://github.com/Avogar)). -* Проверяйте длину имени таблицы только для первичных запросов `CREATE`. Не выполняйте эту проверку для последующих запросов `CREATE`, чтобы избежать проблем с обратной совместимостью. [#79488](https://github.com/ClickHouse/ClickHouse/pull/79488) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). +* Исправлена загрузка дисков plain_rewritable, содержащих данные. [#79439](https://github.com/ClickHouse/ClickHouse/pull/79439) ([Julia Kartseva](https://github.com/jkartseva)). +* Исправлена ошибка, приводившая к аварийному завершению при динамическом определении подстолбцов в широких партах MergeTree. [#79466](https://github.com/ClickHouse/ClickHouse/pull/79466) ([Pavel Kruglov](https://github.com/Avogar)). +* Проверяйте длину имени таблицы только для первоначальных запросов CREATE. Не выполняйте эту проверку для последующих CREATE, чтобы избежать проблем с обратной совместимостью. [#79488](https://github.com/ClickHouse/ClickHouse/pull/79488) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). * Исправлена ошибка `Block structure mismatch` в ряде случаев при работе с таблицами с разрежёнными столбцами. [#79491](https://github.com/ClickHouse/ClickHouse/pull/79491) ([Anton Popov](https://github.com/CurtizJ)). -* Исправлены два случая, приводившие к ошибке "Logical Error: Can't set alias of * of Asterisk on alias". [#79505](https://github.com/ClickHouse/ClickHouse/pull/79505) ([Raúl Marín](https://github.com/Algunenano)). -* Исправлено использование некорректных путей при переименовании базы данных Atomic. [#79569](https://github.com/ClickHouse/ClickHouse/pull/79569) ([Tuan Pham Anh](https://github.com/tuanpach)). -* Исправлена работа ORDER BY по JSON-столбцу совместно с другими столбцами. [#79591](https://github.com/ClickHouse/ClickHouse/pull/79591) ([Pavel Kruglov](https://github.com/Avogar)). -* Исправлено дублирование результатов при чтении с удалённого сервера при отключённых `use_hedged_requests` и `allow_experimental_parallel_reading_from_replicas`. [#79599](https://github.com/ClickHouse/ClickHouse/pull/79599) ([Eduard Karacharov](https://github.com/korowa)). -* Исправлено аварийное завершение работы реализации delta-kernel при использовании Unity Catalog. [#79677](https://github.com/ClickHouse/ClickHouse/pull/79677) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Реализовано разрешение макросов для кластеров автообнаружения. [#79696](https://github.com/ClickHouse/ClickHouse/pull/79696) ([Anton Ivashkin](https://github.com/ianton-ru)). -* Корректно обрабатываются случаи некорректной настройки параметра page_cache_limits. [#79805](https://github.com/ClickHouse/ClickHouse/pull/79805) ([Bharat Nallan](https://github.com/bharatnc)). -* Исправляет результат работы SQL‑функции `formatDateTime`, если спецификатор формата переменной длины (например, `%W`, он же день недели — `Monday`, `Tuesday` и т. д.) следует за составным спецификатором формата (который выводит сразу несколько компонентов, например, `%D`, он же американский формат даты `05/04/25`). [#79835](https://github.com/ClickHouse/ClickHouse/pull/79835) ([Robert Schulze](https://github.com/rschu1ze)). -* IcebergS3 поддерживает оптимизацию подсчёта, а IcebergS3Cluster — нет. В результате значение count(), возвращаемое в кластерном режиме, может быть кратно количеству реплик. [#79844](https://github.com/ClickHouse/ClickHouse/pull/79844) ([wxybear](https://github.com/wxybear)). -* Исправляет ошибку AMBIGUOUS_COLUMN_NAME при отложенной материализации, если до применения проекции ни один столбец не используется при выполнении запроса. Например, SELECT * FROM t ORDER BY rand() LIMIT 5. [#79926](https://github.com/ClickHouse/ClickHouse/pull/79926) ([Igor Nikonov](https://github.com/devcrafter)). -* Пароль в запросе `CREATE DATABASE datalake ENGINE = DataLakeCatalog(\'http://catalog:8181\', \'admin\', \'password\')` теперь скрывается. [#79941](https://github.com/ClickHouse/ClickHouse/pull/79941) ([Han Fei](https://github.com/hanfei1991)). -* Добавлена возможность указывать псевдоним в JOIN USING. Указывайте этот псевдоним, если столбец был переименован (например, из‑за ARRAY JOIN). Это исправляет [#73707](https://github.com/ClickHouse/ClickHouse/issues/73707). [#79942](https://github.com/ClickHouse/ClickHouse/pull/79942) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). -* Обеспечена корректная работа материализованных представлений с UNION на новых репликах. [#80037](https://github.com/ClickHouse/ClickHouse/pull/80037) ([Samay Sharma](https://github.com/samay-sharma)). -* Спецификатор формата `%e` в SQL‑функции `parseDateTime` теперь распознаёт однозначные значения дня месяца (например, `3`), тогда как ранее требовался ведущий пробел (например, ` 3`). Это делает его поведение совместимым с MySQL. Чтобы сохранить прежнее поведение, установите настройку `parsedatetime_e_requires_space_padding = 1`. (issue [#78243](https://github.com/ClickHouse/ClickHouse/issues/78243)). [#80057](https://github.com/ClickHouse/ClickHouse/pull/80057) ([Robert Schulze](https://github.com/rschu1ze)). -* Исправлено появление предупреждений `Cannot find 'kernel' in '[...]/memory.stat'` в логах ClickHouse (issue [#77410](https://github.com/ClickHouse/ClickHouse/issues/77410)). [#80129](https://github.com/ClickHouse/ClickHouse/pull/80129) ([Robert Schulze](https://github.com/rschu1ze)). -* Проверяется размер стека в FunctionComparison, чтобы избежать аварийного завершения работы из-за переполнения стека. [#78208](https://github.com/ClickHouse/ClickHouse/pull/78208) ([Julia Kartseva](https://github.com/jkartseva)). -* Исправлено состояние гонки при выполнении запроса SELECT из `system.workloads`. [#78743](https://github.com/ClickHouse/ClickHouse/pull/78743) ([Sergei Trifonov](https://github.com/serxa)). -* Исправление: ленивая материализация в распределённых запросах. [#78815](https://github.com/ClickHouse/ClickHouse/pull/78815) ([Igor Nikonov](https://github.com/devcrafter)). -* Исправлено преобразование из `Array(Bool)` в `Array(FixedString)`. [#78863](https://github.com/ClickHouse/ClickHouse/pull/78863) ([Nikita Taranov](https://github.com/nickitat)). -* Выбор версии Parquet сделан менее запутанным. [#78818](https://github.com/ClickHouse/ClickHouse/pull/78818) ([Michael Kolupaev](https://github.com/al13n321)). -* Исправлено слияние `ReservoirSampler` с самим собой. [#79031](https://github.com/ClickHouse/ClickHouse/pull/79031) ([Nikita Taranov](https://github.com/nickitat)). -* Исправлено хранение таблицы вставки в клиентском контексте. [#79046](https://github.com/ClickHouse/ClickHouse/pull/79046) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +* Исправлены два случая ошибки "Logical error: Can't set alias of * of Asterisk on alias". [#79505](https://github.com/ClickHouse/ClickHouse/pull/79505) ([Raúl Marín](https://github.com/Algunenano)). +* Исправлена ошибка использования некорректных путей при переименовании базы данных Atomic. [#79569](https://github.com/ClickHouse/ClickHouse/pull/79569) ([Tuan Pham Anh](https://github.com/tuanpach)). +* Исправлена работа ORDER BY по JSON-столбцу в сочетании с другими столбцами. [#79591](https://github.com/ClickHouse/ClickHouse/pull/79591) ([Pavel Kruglov](https://github.com/Avogar)). +* Исправлено дублирование результатов при чтении из `remote`, когда оба параметра `use_hedged_requests` и `allow_experimental_parallel_reading_from_replicas` отключены. [#79599](https://github.com/ClickHouse/ClickHouse/pull/79599) ([Eduard Karacharov](https://github.com/korowa)). +* Исправлен сбой в реализации delta-kernel при использовании Unity Catalog. [#79677](https://github.com/ClickHouse/ClickHouse/pull/79677) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Реализована подстановка макросов для кластеров автообнаружения. [#79696](https://github.com/ClickHouse/ClickHouse/pull/79696) ([Anton Ivashkin](https://github.com/ianton-ru)). +* Корректно обрабатывать некорректно настроенный параметр `page_cache_limits`. [#79805](https://github.com/ClickHouse/ClickHouse/pull/79805) ([Bharat Nallan](https://github.com/bharatnc)). +* Исправляет результат SQL-функции `formatDateTime`, если за спецификатором формата переменной длины (например, `%W`, т.е. день недели `Monday` `Tuesday` и т.д.) следует составной спецификатор формата (который выводит сразу несколько компонентов, например, `%D`, т.е. американский формат даты `05/04/25`). [#79835](https://github.com/ClickHouse/ClickHouse/pull/79835) ([Robert Schulze](https://github.com/rschu1ze)). +* IcebergS3 поддерживает оптимизацию операции count(), а IcebergS3Cluster — нет. В результате в кластерном режиме возвращаемый результат count() может быть кратен количеству реплик. [#79844](https://github.com/ClickHouse/ClickHouse/pull/79844) ([wxybear](https://github.com/wxybear)). +* Исправлена ошибка AMBIGUOUS_COLUMN_NAME при ленивой материализации, когда до применения проекции при выполнении запроса не используется ни один столбец. Например, SELECT * FROM t ORDER BY rand() LIMIT 5. [#79926](https://github.com/ClickHouse/ClickHouse/pull/79926) ([Igor Nikonov](https://github.com/devcrafter)). +* Пароль в запросе `CREATE DATABASE datalake ENGINE = DataLakeCatalog(\'http://catalog:8181\', \'admin\', \'password\')` скрывается. [#79941](https://github.com/ClickHouse/ClickHouse/pull/79941) ([Han Fei](https://github.com/hanfei1991)). +* Добавлена возможность указывать псевдоним в JOIN USING. Указывайте этот псевдоним, если столбец был переименован (например, из-за ARRAY JOIN). Исправляет [#73707](https://github.com/ClickHouse/ClickHouse/issues/73707). [#79942](https://github.com/ClickHouse/ClickHouse/pull/79942) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). +* Обеспечена корректная работа материализованных представлений с операторами UNION на новых репликах. [#80037](https://github.com/ClickHouse/ClickHouse/pull/80037) ([Samay Sharma](https://github.com/samay-sharma)). +* Спецификатор формата `%e` в SQL-функции `parseDateTime` теперь распознаёт однозначные номера дней (например, `3`), тогда как ранее требовалось добавление пробела слева (например, ` 3`). Это делает его поведение совместимым с MySQL. Чтобы сохранить прежнее поведение, установите настройку `parsedatetime_e_requires_space_padding = 1`. (issue [#78243](https://github.com/ClickHouse/ClickHouse/issues/78243)). [#80057](https://github.com/ClickHouse/ClickHouse/pull/80057) ([Robert Schulze](https://github.com/rschu1ze)). +* Исправлены предупреждения `Cannot find 'kernel' in '[...]/memory.stat'` в журнале ClickHouse (issue [#77410](https://github.com/ClickHouse/ClickHouse/issues/77410)). [#80129](https://github.com/ClickHouse/ClickHouse/pull/80129) ([Robert Schulze](https://github.com/rschu1ze)). +* Добавлена проверка размера стека в FunctionComparison, чтобы избежать сбоя из-за переполнения стека. [#78208](https://github.com/ClickHouse/ClickHouse/pull/78208) ([Julia Kartseva](https://github.com/jkartseva)). +* Устранена гонка при выполнении SELECT из `system.workloads`. [#78743](https://github.com/ClickHouse/ClickHouse/pull/78743) ([Sergei Trifonov](https://github.com/serxa)). +* Исправлена ленивая материализация в распределённых запросах. [#78815](https://github.com/ClickHouse/ClickHouse/pull/78815) ([Igor Nikonov](https://github.com/devcrafter)). +* Исправлена проблема с преобразованием `Array(Bool)` в `Array(FixedString)`. [#78863](https://github.com/ClickHouse/ClickHouse/pull/78863) ([Nikita Taranov](https://github.com/nickitat)). +* Выбор версии формата Parquet сделан менее запутанным. [#78818](https://github.com/ClickHouse/ClickHouse/pull/78818) ([Michael Kolupaev](https://github.com/al13n321)). +* Исправлена проблема с самослиянием `ReservoirSampler`. [#79031](https://github.com/ClickHouse/ClickHouse/pull/79031) ([Nikita Taranov](https://github.com/nickitat)). +* Исправлено хранение таблицы для вставки в клиентском контексте. [#79046](https://github.com/ClickHouse/ClickHouse/pull/79046) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). * Исправлен порядок уничтожения членов данных классов `AggregatingSortedAlgorithm` и `SummingSortedAlgorithm`. [#79056](https://github.com/ClickHouse/ClickHouse/pull/79056) ([Nikita Taranov](https://github.com/nickitat)). * `enable_user_name_access_type` не должен влиять на тип доступа `DEFINER`. [#80026](https://github.com/ClickHouse/ClickHouse/pull/80026) ([pufit](https://github.com/pufit)). -* Запрос к системной базе данных может зависать, если метаданные системной базы данных хранятся в Keeper. [#79304](https://github.com/ClickHouse/ClickHouse/pull/79304) ([Mikhail Artemenko](https://github.com/Michicosun)). - - +* Запрос к системной базе данных может зависнуть, если её метаданные размещены в Keeper. [#79304](https://github.com/ClickHouse/ClickHouse/pull/79304) ([Mikhail Artemenko](https://github.com/Michicosun)). #### Улучшения сборки/тестирования/упаковки -* Реализована возможность повторного использования уже собранного бинарного файла `chcache` вместо его пересборки при каждом запуске. [#78851](https://github.com/ClickHouse/ClickHouse/pull/78851) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). + +* Добавлена возможность повторно использовать уже собранный бинарный файл `chcache` вместо его постоянной пересборки. [#78851](https://github.com/ClickHouse/ClickHouse/pull/78851) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). * Добавлено ожидание паузы в NATS. [#78987](https://github.com/ClickHouse/ClickHouse/pull/78987) ([Dmitry Novikov](https://github.com/dmitry-sles-novikov)). -* Исправлена некорректная публикация ARM-сборки как `amd64compat`. [#79122](https://github.com/ClickHouse/ClickHouse/pull/79122) ([Alexander Gololobov](https://github.com/davenger)). -* Используется заранее сгенерированный ассемблерный код для OpenSSL. [#79386](https://github.com/ClickHouse/ClickHouse/pull/79386) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* Исправлена некорректная публикация ARM-сборки как amd64compat. [#79122](https://github.com/ClickHouse/ClickHouse/pull/79122) ([Alexander Gololobov](https://github.com/davenger)). +* Используется предварительно сгенерированный ассемблерный код для OpenSSL. [#79386](https://github.com/ClickHouse/ClickHouse/pull/79386) ([Konstantin Bogdanov](https://github.com/thevar1able)). * Исправления, позволяющие собирать с `clang20`. [#79588](https://github.com/ClickHouse/ClickHouse/pull/79588) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* `chcache`: поддержка кэширования на Rust. [#78691](https://github.com/ClickHouse/ClickHouse/pull/78691) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* Добавлена информация для раскрутки стека (unwind information) для ассемблерных файлов `zstd`. [#79288](https://github.com/ClickHouse/ClickHouse/pull/79288) ([Michael Kolupaev](https://github.com/al13n321)). - +* `chcache`: поддержка кэширования в Rust. [#78691](https://github.com/ClickHouse/ClickHouse/pull/78691) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* Добавлена информация о раскрутке стека (unwind) для ассемблерных файлов `zstd`. [#79288](https://github.com/ClickHouse/ClickHouse/pull/79288) ([Michael Kolupaev](https://github.com/al13n321)). ### Релиз ClickHouse 25.4, 2025-04-22 {#254} -#### Обратные несовместимые изменения -* Проверяется, что все столбцы в материализованном представлении соответствуют целевой таблице, если `allow_materialized_view_with_bad_select` равен `false`. [#74481](https://github.com/ClickHouse/ClickHouse/pull/74481) ([Christoph Wurm](https://github.com/cwurm)). -* Исправлены случаи, когда `dateTrunc` используется с отрицательными аргументами Date/DateTime. [#77622](https://github.com/ClickHouse/ClickHouse/pull/77622) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* Устаревшая интеграция с `MongoDB` была удалена. Настройка сервера `use_legacy_mongodb_integration` устарела и теперь не оказывает никакого эффекта. [#77895](https://github.com/ClickHouse/ClickHouse/pull/77895) ([Robert Schulze](https://github.com/rschu1ze)). -* Улучшена проверка `SummingMergeTree`, чтобы пропускать агрегацию для столбцов, используемых в ключах партиционирования или сортировки. [#78022](https://github.com/ClickHouse/ClickHouse/pull/78022) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). - - - -#### Новая возможность - -* Добавлено планирование слотов CPU для рабочих нагрузок, подробнее см. в [документации](https://clickhouse.com/docs/operations/workload-scheduling#cpu_scheduling). [#77595](https://github.com/ClickHouse/ClickHouse/pull/77595) ([Sergei Trifonov](https://github.com/serxa)). -* `clickhouse-local` будет сохранять базы данных после перезапуска, если указать аргумент командной строки `--path`. Тем самым закрывается [#50647](https://github.com/ClickHouse/ClickHouse/issues/50647). Тем самым закрывается [#49947](https://github.com/ClickHouse/ClickHouse/issues/49947). [#71722](https://github.com/ClickHouse/ClickHouse/pull/71722) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Отклонять запросы, когда сервер перегружен. Решение принимается на основе отношения времени ожидания (`OSCPUWaitMicroseconds`) к времени занятости (`OSCPUVirtualTimeMicroseconds`). Запрос с некоторой вероятностью отклоняется, если это отношение находится в диапазоне между `min_os_cpu_wait_time_ratio_to_throw` и `max_os_cpu_wait_time_ratio_to_throw` (это настройки на уровне запроса). [#63206](https://github.com/ClickHouse/ClickHouse/pull/63206) ([Alexey Katsman](https://github.com/alexkats)). -* Путешествие во времени в `Iceberg`: добавлена настройка для выполнения запросов к таблицам `Iceberg` по состоянию на указанный момент времени. [#71072](https://github.com/ClickHouse/ClickHouse/pull/71072) ([Brett Hoerner](https://github.com/bretthoerner)). [#77439](https://github.com/ClickHouse/ClickHouse/pull/77439) ([Daniil Ivanik](https://github.com/divanik)). -* Кэш метаданных `Iceberg` в памяти, который хранит файлы манифестов и их список, а также `metadata.json`, чтобы ускорить выполнение запросов. [#77156](https://github.com/ClickHouse/ClickHouse/pull/77156) ([Han Fei](https://github.com/hanfei1991)). -* Добавлена поддержка движка таблицы `DeltaLake` для Azure Blob Storage. Исправлено [#68043](https://github.com/ClickHouse/ClickHouse/issues/68043). [#74541](https://github.com/ClickHouse/ClickHouse/pull/74541) ([Smita Kulkarni](https://github.com/SmitaRKulkarni)). -* Добавлен кэш в оперативной памяти для десериализованных индексов поиска по сходству векторов. Это должно ускорить повторные запросы приблизительного поиска ближайших соседей (ANN). Размер нового кэша управляется настройками сервера `vector_similarity_index_cache_size` и `vector_similarity_index_cache_max_entries`. Эта функция заменяет механизм кэширования пропускающих индексов, использовавшийся в более ранних версиях. [#77905](https://github.com/ClickHouse/ClickHouse/pull/77905) ([Shankar Iyer](https://github.com/shankar-iyer)). -* Реализована поддержка отсечения партиций (partition pruning) в DeltaLake. [#78486](https://github.com/ClickHouse/ClickHouse/pull/78486) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Поддержка фонового обновления в таблицах `MergeTree` только для чтения, что позволяет выполнять запросы к обновляемым таблицам с неограниченным количеством распределённых читателей (нативное дата-озеро ClickHouse). [#76467](https://github.com/ClickHouse/ClickHouse/pull/76467) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Поддержка использования кастомных дисков для хранения файлов метаданных баз данных. Сейчас это можно настроить только на уровне всего сервера. [#77365](https://github.com/ClickHouse/ClickHouse/pull/77365) ([Tuan Pham Anh](https://github.com/tuanpach)). +#### Изменения, нарушающие обратную совместимость + +* При значении `allow_materialized_view_with_bad_select` равном `false` теперь проверяется, что все столбцы в материализованном представлении соответствуют целевой таблице. [#74481](https://github.com/ClickHouse/ClickHouse/pull/74481) ([Christoph Wurm](https://github.com/cwurm)). +* Исправлены случаи, когда `dateTrunc` вызывалась с отрицательными аргументами типов Date/DateTime. [#77622](https://github.com/ClickHouse/ClickHouse/pull/77622) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* Устаревшая интеграция с `MongoDB` была удалена. Настройка сервера `use_legacy_mongodb_integration` стала неактуальной и теперь ни на что не влияет. [#77895](https://github.com/ClickHouse/ClickHouse/pull/77895) ([Robert Schulze](https://github.com/rschu1ze)). +* Улучшена проверка в `SummingMergeTree`: агрегация теперь пропускается для столбцов, используемых в ключах партиционирования или сортировки. [#78022](https://github.com/ClickHouse/ClickHouse/pull/78022) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). + +#### Новая функция + +* Добавлено планирование слотов CPU для рабочих нагрузок, подробности см. в [документации](https://clickhouse.com/docs/operations/workload-scheduling#cpu_scheduling). [#77595](https://github.com/ClickHouse/ClickHouse/pull/77595) ([Sergei Trifonov](https://github.com/serxa)). +* `clickhouse-local` будет сохранять свои базы данных после перезапуска при указании параметра командной строки `--path`. Это закрывает [#50647](https://github.com/ClickHouse/ClickHouse/issues/50647). Это закрывает [#49947](https://github.com/ClickHouse/ClickHouse/issues/49947). [#71722](https://github.com/ClickHouse/ClickHouse/pull/71722) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Отклонять запросы, когда сервер перегружен. Решение принимается на основе отношения времени ожидания (`OSCPUWaitMicroseconds`) к времени занятости (`OSCPUVirtualTimeMicroseconds`). Запрос с некоторой вероятностью отбрасывается, когда это отношение находится между `min_os_cpu_wait_time_ratio_to_throw` и `max_os_cpu_wait_time_ratio_to_throw` (это параметры на уровне запроса). [#63206](https://github.com/ClickHouse/ClickHouse/pull/63206) ([Alexey Katsman](https://github.com/alexkats)). +* Путешествие во времени в `Iceberg`: добавлена настройка для запроса таблиц `Iceberg` по состоянию на указанный момент времени. [#71072](https://github.com/ClickHouse/ClickHouse/pull/71072) ([Brett Hoerner](https://github.com/bretthoerner)). [#77439](https://github.com/ClickHouse/ClickHouse/pull/77439) ([Daniil Ivanik](https://github.com/divanik)). +* Кэш в памяти для метаданных `Iceberg`, который хранит файлы манифестов и `metadata.json` для ускорения выполнения запросов. [#77156](https://github.com/ClickHouse/ClickHouse/pull/77156) ([Han Fei](https://github.com/hanfei1991)). +* Добавлена поддержка табличного движка `DeltaLake` для Azure Blob Storage. Устраняет проблему [#68043](https://github.com/ClickHouse/ClickHouse/issues/68043). [#74541](https://github.com/ClickHouse/ClickHouse/pull/74541) ([Smita Kulkarni](https://github.com/SmitaRKulkarni)). +* Добавлен кэш в оперативной памяти для десериализованных индексов векторного сходства. Это должно ускорить повторяющиеся запросы приблизительного поиска ближайших соседей (ANN). Размер нового кэша контролируется серверными настройками `vector_similarity_index_cache_size` и `vector_similarity_index_cache_max_entries`. Эта возможность заменяет функцию кэширования индексов-пропусков из более ранних версий. [#77905](https://github.com/ClickHouse/ClickHouse/pull/77905) ([Shankar Iyer](https://github.com/shankar-iyer)). +* Добавлена поддержка отсечения партиций в DeltaLake. [#78486](https://github.com/ClickHouse/ClickHouse/pull/78486) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Поддержка фонового обновления для таблиц `MergeTree` в режиме только для чтения, что позволяет выполнять запросы к обновляемым таблицам с неограниченным числом распределённых читателей (нативное озеро данных ClickHouse). [#76467](https://github.com/ClickHouse/ClickHouse/pull/76467) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Добавлена поддержка использования пользовательских дисков для хранения файлов метаданных баз данных. Сейчас это можно настроить только на глобальном уровне сервера. [#77365](https://github.com/ClickHouse/ClickHouse/pull/77365) ([Tuan Pham Anh](https://github.com/tuanpach)). * Добавлена поддержка `ALTER TABLE ... ATTACH|DETACH|MOVE|REPLACE PARTITION` для диска `plain_rewritable`. [#77406](https://github.com/ClickHouse/ClickHouse/pull/77406) ([Julia Kartseva](https://github.com/jkartseva)). -* Добавлены параметры таблицы для настройки `SASL` и учетных данных в движок таблиц `Kafka`. Это позволяет настраивать аутентификацию на основе SASL для Kafka и совместимых с Kafka систем непосредственно в инструкции CREATE TABLE, вместо использования файлов конфигурации или именованных коллекций. [#78810](https://github.com/ClickHouse/ClickHouse/pull/78810) ([Christoph Wurm](https://github.com/cwurm)). -* Добавлена возможность задавать `default_compression_codec` для таблиц MergeTree: он используется, когда в CREATE-запросе явно не задан кодек для указанных столбцов. Это закрывает [#42005](https://github.com/ClickHouse/ClickHouse/issues/42005). [#66394](https://github.com/ClickHouse/ClickHouse/pull/66394) ([gvoelfin](https://github.com/gvoelfin)). -* Добавьте параметр `bind_host` в конфигурацию кластеров, чтобы ClickHouse мог использовать конкретную сеть для распределённых подключений. [#74741](https://github.com/ClickHouse/ClickHouse/pull/74741) ([Todd Yocum](https://github.com/toddyocum)). -* В таблицу `system.tables` добавлен новый столбец `parametrized_view_parameters`. Закрывает [https://github.com/clickhouse/clickhouse/issues/66756](https://github.com/clickhouse/clickhouse/issues/66756). [#75112](https://github.com/ClickHouse/ClickHouse/pull/75112) ([NamNguyenHoai](https://github.com/NamHoaiNguyen)). -* Разрешить изменение комментария базы данных. Закрывает [#73351](https://github.com/ClickHouse/ClickHouse/issues/73351) ### Запись в документации об изменениях, видимых пользователям. [#75622](https://github.com/ClickHouse/ClickHouse/pull/75622) ([NamNguyenHoai](https://github.com/NamHoaiNguyen)). -* Реализована поддержка аутентификации `SCRAM-SHA-256` в протоколе совместимости PostgreSQL. [#76839](https://github.com/ClickHouse/ClickHouse/pull/76839) ([scanhex12](https://github.com/scanhex12)). +* Добавлены параметры таблицы для настройки `SASL` и учетных данных в движке таблицы `Kafka`. Это позволяет настраивать аутентификацию на основе SASL для Kafka и Kafka-совместимых систем непосредственно в операторе CREATE TABLE, а не использовать файлы конфигурации или именованные коллекции. [#78810](https://github.com/ClickHouse/ClickHouse/pull/78810) ([Christoph Wurm](https://github.com/cwurm)). +* Добавлена возможность задавать `default_compression_codec` для таблиц MergeTree: он используется, если в запросе CREATE явно не задан кодек сжатия для соответствующих столбцов. Это закрывает [#42005](https://github.com/ClickHouse/ClickHouse/issues/42005). [#66394](https://github.com/ClickHouse/ClickHouse/pull/66394) ([gvoelfin](https://github.com/gvoelfin)). +* Добавьте параметр `bind_host` в конфигурацию кластеров, чтобы ClickHouse мог использовать конкретную сеть для распределённых соединений. [#74741](https://github.com/ClickHouse/ClickHouse/pull/74741) ([Todd Yocum](https://github.com/toddyocum)). +* Добавлен новый столбец `parametrized_view_parameters` в системную таблицу `system.tables`. Закрывает [https://github.com/clickhouse/clickhouse/issues/66756](https://github.com/clickhouse/clickhouse/issues/66756). [#75112](https://github.com/ClickHouse/ClickHouse/pull/75112) ([NamNguyenHoai](https://github.com/NamHoaiNguyen)). +* Разрешить изменение комментария базы данных. Closes [#73351](https://github.com/ClickHouse/ClickHouse/issues/73351) ### Запись в документации об изменениях, затрагивающих пользователей. [#75622](https://github.com/ClickHouse/ClickHouse/pull/75622) ([NamNguyenHoai](https://github.com/NamHoaiNguyen)). +* Добавлена поддержка аутентификации `SCRAM-SHA-256` в протоколе совместимости с PostgreSQL. [#76839](https://github.com/ClickHouse/ClickHouse/pull/76839) ([scanhex12](https://github.com/scanhex12)). * Добавлены функции `arrayLevenshteinDistance`, `arrayLevenshteinDistanceWeighted` и `arraySimilarity`. [#77187](https://github.com/ClickHouse/ClickHouse/pull/77187) ([Mikhail f. Shiryaev](https://github.com/Felixoid)). -* Настройка `parallel_distributed_insert_select` теперь применяется к `INSERT SELECT` в `ReplicatedMergeTree` (ранее для этого требовались таблицы движка `Distributed`). [#78041](https://github.com/ClickHouse/ClickHouse/pull/78041) ([Igor Nikonov](https://github.com/devcrafter)). -* Добавлена функция `toInterval`. Функция принимает два аргумента (значение и единицу измерения) и преобразует значение в соответствующий тип `Interval`. [#78723](https://github.com/ClickHouse/ClickHouse/pull/78723) ([Andrew Davis](https://github.com/pulpdrew)). -* Добавлено несколько удобных способов задания корневого файла `metadata.json` в табличной функции и движке Iceberg. Закрывает [#78455](https://github.com/ClickHouse/ClickHouse/issues/78455). [#78475](https://github.com/ClickHouse/ClickHouse/pull/78475) ([Daniil Ivanik](https://github.com/divanik)). +* Настройка `parallel_distributed_insert_select` теперь действует для `INSERT SELECT` в таблицах `ReplicatedMergeTree` (ранее для этого требовались таблицы `Distributed`). [#78041](https://github.com/ClickHouse/ClickHouse/pull/78041) ([Igor Nikonov](https://github.com/devcrafter)). +* Добавлена функция `toInterval`. Эта функция принимает два аргумента (значение и единицу измерения) и преобразует значение в соответствующий тип `Interval`. [#78723](https://github.com/ClickHouse/ClickHouse/pull/78723) ([Andrew Davis](https://github.com/pulpdrew)). +* Добавлено несколько удобных вариантов указания корневого файла `metadata.json` в табличной функции и движке Iceberg. Закрывает [#78455](https://github.com/ClickHouse/ClickHouse/issues/78455). [#78475](https://github.com/ClickHouse/ClickHouse/pull/78475) ([Daniil Ivanik](https://github.com/divanik)). * Добавлена поддержка аутентификации по паролю в протоколе SSH в ClickHouse. [#78586](https://github.com/ClickHouse/ClickHouse/pull/78586) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). +#### Экспериментальная возможность - -#### Экспериментальная функциональность -* Поддержка коррелированных подзапросов в качестве аргумента выражения `EXISTS` в предложении `WHERE`. Закрывает [#72459](https://github.com/ClickHouse/ClickHouse/issues/72459). [#76078](https://github.com/ClickHouse/ClickHouse/pull/76078) ([Dmitry Novik](https://github.com/novikd)). -* Добавлены функции `sparseGrams` и `sparseGramsHashes` с вариантами для ASCII и UTF-8. Автор: [scanhex12](https://github.com/scanhex12). [#78176](https://github.com/ClickHouse/ClickHouse/pull/78176) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). Не используйте эти функции: реализация будет изменена в последующих версиях. - - +* Поддержка коррелированных подзапросов в качестве аргумента для выражения `EXISTS` в предложении `WHERE`. Закрывает [#72459](https://github.com/ClickHouse/ClickHouse/issues/72459). [#76078](https://github.com/ClickHouse/ClickHouse/pull/76078) ([Dmitry Novik](https://github.com/novikd)). +* Добавлены функции `sparseGrams` и `sparseGramsHashes` с вариантами для ASCII и UTF-8. Автор: [scanhex12](https://github.com/scanhex12). [#78176](https://github.com/ClickHouse/ClickHouse/pull/78176) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). Не используйте их: реализация будет изменена в следующих версиях. #### Повышение производительности -* Оптимизируйте производительность с помощью «ленивых» столбцов, которые читают данные после применения ORDER BY и LIMIT. [#55518](https://github.com/ClickHouse/ClickHouse/pull/55518) ([Xiaozhe Yu](https://github.com/wudidapaopao)). -* Включено кеширование условий запроса по умолчанию. [#79080](https://github.com/ClickHouse/ClickHouse/pull/79080) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Оптимизирована производительность за счет использования ленивых столбцов, считывающих данные после ORDER BY и LIMIT. [#55518](https://github.com/ClickHouse/ClickHouse/pull/55518) ([Xiaozhe Yu](https://github.com/wudidapaopao)). +* По умолчанию включён кэш условий запросов. [#79080](https://github.com/ClickHouse/ClickHouse/pull/79080) ([Alexey Milovidov](https://github.com/alexey-milovidov)). * Ускорено построение результата JOIN за счёт девиртуализации вызовов `col->insertFrom()`. [#77350](https://github.com/ClickHouse/ClickHouse/pull/77350) ([Alexander Gololobov](https://github.com/davenger)). -* Объединять условия равенства из шага плана запроса `filter` с условием `JOIN`, если возможно, чтобы их можно было использовать как ключи хеш-таблицы. [#78877](https://github.com/ClickHouse/ClickHouse/pull/78877) ([Dmitry Novik](https://github.com/novikd)). -* Используйте динамический шардинг для JOIN, если ключ JOIN является префиксом первичного ключа (PK) для обеих таблиц. Эта оптимизация включается настройкой `query_plan_join_shard_by_pk_ranges` (по умолчанию отключена). [#74733](https://github.com/ClickHouse/ClickHouse/pull/74733) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). -* Добавлена поддержка отсечения данных в `Iceberg` на основе нижних и верхних граничных значений столбцов. Исправлена проблема [#77638](https://github.com/ClickHouse/ClickHouse/issues/77638). [#78242](https://github.com/ClickHouse/ClickHouse/pull/78242) ([alesapin](https://github.com/alesapin)). -* Реализована простая оптимизация подсчёта для `Iceberg`. Теперь запросы с `count()` и без каких‑либо фильтров должны выполняться быстрее. Закрывает [#77639](https://github.com/ClickHouse/ClickHouse/issues/77639). [#78090](https://github.com/ClickHouse/ClickHouse/pull/78090) ([alesapin](https://github.com/alesapin)). -* Добавлена возможность настроить количество столбцов, которые при слияниях могут сбрасываться параллельно, с помощью `max_merge_delayed_streams_for_parallel_write` (это должно примерно в 25 раз снизить потребление памяти для вертикальных слияний в S3). [#77922](https://github.com/ClickHouse/ClickHouse/pull/77922) ([Azat Khuzhin](https://github.com/azat)). -* Отключайте `filesystem_cache_prefer_bigger_buffer_size`, когда кэш используется пассивно, например для слияний. Это снижает потребление памяти при выполнении слияний. [#77898](https://github.com/ClickHouse/ClickHouse/pull/77898) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Теперь мы используем количество реплик для определения размера задачи чтения при включённых параллельных репликах. Это обеспечивает более равномерное распределение работы между репликами, когда объём читаемых данных не слишком велик. [#78695](https://github.com/ClickHouse/ClickHouse/pull/78695) ([Nikita Taranov](https://github.com/nickitat)). -* Добавлена поддержка асинхронной предварительной выборки (prefetch) операций ввода-вывода для формата `ORC`, что повышает общую производительность за счет скрытия задержок удаленного ввода-вывода. [#70534](https://github.com/ClickHouse/ClickHouse/pull/70534) ([李扬](https://github.com/taiyang-li)). -* Предварительно выделять память для асинхронных вставок, чтобы повысить производительность. [#74945](https://github.com/ClickHouse/ClickHouse/pull/74945) ([Ilya Golshtein](https://github.com/ilejn)). -* Уменьшено количество запросов к Keeper за счет замены одиночных запросов `get` на `multiRead` там, где он доступен, поскольку при увеличении числа реплик такие запросы могли создавать значительную нагрузку на Keeper. [#56862](https://github.com/ClickHouse/ClickHouse/pull/56862) ([Nikolay Degterinsky](https://github.com/evillique)). -* Незначительная оптимизация для выполнения функций с аргументами типа Nullable. [#76489](https://github.com/ClickHouse/ClickHouse/pull/76489) ([李扬](https://github.com/taiyang-li)). -* Оптимизирован `arraySort`. [#76850](https://github.com/ClickHouse/ClickHouse/pull/76850) ([李扬](https://github.com/taiyang-li)). -* Объединяйте метки одной и той же части и за один раз записывайте их в кэш условий запроса, чтобы сократить использование блокировок. [#77377](https://github.com/ClickHouse/ClickHouse/pull/77377) ([zhongyuankai](https://github.com/zhongyuankai)). -* Оптимизирована производительность `s3Cluster` для запросов с одним раскрытием скобок. [#77686](https://github.com/ClickHouse/ClickHouse/pull/77686) ([Tomáš Hromada](https://github.com/gyfis)). -* Оптимизирован ORDER BY по одиночным столбцам типа Nullable или LowCardinality. [#77789](https://github.com/ClickHouse/ClickHouse/pull/77789) ([李扬](https://github.com/taiyang-li)). -* Оптимизировано использование памяти форматом `Native`. [#78442](https://github.com/ClickHouse/ClickHouse/pull/78442) ([Azat Khuzhin](https://github.com/azat)). -* Тривиальная оптимизация: не переписывать `count(if(...))` в `countIf`, если требуется приведение типов. Закрывает [#78564](https://github.com/ClickHouse/ClickHouse/issues/78564). [#78565](https://github.com/ClickHouse/ClickHouse/pull/78565) ([李扬](https://github.com/taiyang-li)). -* Функция `hasAll` теперь может использовать полнотекстовые пропускающие индексы `tokenbf_v1`, `ngrambf_v1`. [#77662](https://github.com/ClickHouse/ClickHouse/pull/77662) ([UnamedRus](https://github.com/UnamedRus)). -* Индекс векторного сходства мог выделять в оперативной памяти до двух раз больше ресурсов, чем требовалось. Это исправление изменяет стратегию выделения памяти, снижая ее потребление и повышая эффективность кэша индекса векторного сходства (issue [#78056](https://github.com/ClickHouse/ClickHouse/issues/78056)). [#78394](https://github.com/ClickHouse/ClickHouse/pull/78394) ([Shankar Iyer](https://github.com/shankar-iyer)). -* Добавлен параметр `schema_type` для таблицы `system.metric_log`, определяющий тип схемы. Допустимы три схемы: `wide` — текущая схема, каждая метрика/каждое событие в отдельном столбце (наиболее эффективна для чтения отдельных столбцов), `transposed` — аналогично `system.asynchronous_metric_log`, метрики/события хранятся по строкам, и самая интересная — `transposed_with_wide_view`: создаётся подлежащая таблица со схемой `transposed`, но также добавляется представление со схемой `wide`, которое транслирует запросы в подлежащую таблицу. В `transposed_with_wide_view` субсекундное разрешение для представления не поддерживается, `event_time_microseconds` является лишь псевдонимом для сохранения обратной совместимости. [#78412](https://github.com/ClickHouse/ClickHouse/pull/78412) ([alesapin](https://github.com/alesapin)). - - - - +* Теперь условия равенства из шага плана запроса с фильтрацией объединяются с условием JOIN, когда это возможно, чтобы их можно было использовать в качестве ключей хеш-таблицы. [#78877](https://github.com/ClickHouse/ClickHouse/pull/78877) ([Dmitry Novik](https://github.com/novikd)). +* Используйте динамический шардинг для JOIN, если ключ JOIN является префиксом PK для обеих частей. Эта оптимизация включается с помощью настройки `query_plan_join_shard_by_pk_ranges` (по умолчанию отключена). [#74733](https://github.com/ClickHouse/ClickHouse/pull/74733) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). +* Добавлена поддержка отсечения данных в `Iceberg` на основе нижних и верхних граничных значений столбцов. Исправляет [#77638](https://github.com/ClickHouse/ClickHouse/issues/77638). [#78242](https://github.com/ClickHouse/ClickHouse/pull/78242) ([alesapin](https://github.com/alesapin)). +* Реализована простая оптимизация подсчёта для `Iceberg`. Теперь запросы с `count()` и без каких-либо фильтров должны выполняться быстрее. Закрывает [#77639](https://github.com/ClickHouse/ClickHouse/issues/77639). [#78090](https://github.com/ClickHouse/ClickHouse/pull/78090) ([alesapin](https://github.com/alesapin)). +* Добавлена возможность настраивать количество столбцов, которые могут сбрасываться параллельно при слияниях, с помощью `max_merge_delayed_streams_for_parallel_write` (это должно снизить потребление памяти при вертикальных слияниях в S3 примерно в 25 раз). [#77922](https://github.com/ClickHouse/ClickHouse/pull/77922) ([Azat Khuzhin](https://github.com/azat)). +* Отключайте `filesystem_cache_prefer_bigger_buffer_size`, когда кэш используется пассивно, например при слияниях. Это снижает потребление памяти во время слияний. [#77898](https://github.com/ClickHouse/ClickHouse/pull/77898) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Теперь для определения размера задачи при чтении с включёнными параллельными репликами используется количество реплик. Это обеспечивает более равномерное распределение нагрузки между репликами, когда объём данных для чтения не слишком велик. [#78695](https://github.com/ClickHouse/ClickHouse/pull/78695) ([Nikita Taranov](https://github.com/nickitat)). +* Добавлена поддержка асинхронного предварительного чтения (I/O prefetch) для формата `ORC`, что улучшает общую производительность за счёт скрытия задержок удалённого ввода-вывода. [#70534](https://github.com/ClickHouse/ClickHouse/pull/70534) ([李扬](https://github.com/taiyang-li)). +* Предварительно выделять память, используемую асинхронными вставками, для повышения производительности. [#74945](https://github.com/ClickHouse/ClickHouse/pull/74945) ([Ilya Golshtein](https://github.com/ilejn)). +* Уменьшено количество запросов к Keeper за счёт отказа от использования одиночных запросов `get` в пользу `multiRead` там, где он доступен, поскольку при увеличении числа реплик такие одиночные запросы могли создавать существенную нагрузку на Keeper. [#56862](https://github.com/ClickHouse/ClickHouse/pull/56862) ([Nikolay Degterinsky](https://github.com/evillique)). +* Незначительная оптимизация выполнения функций при работе с аргументами типа Nullable. [#76489](https://github.com/ClickHouse/ClickHouse/pull/76489) ([李扬](https://github.com/taiyang-li)). +* Оптимизирована функция `arraySort`. [#76850](https://github.com/ClickHouse/ClickHouse/pull/76850) ([李扬](https://github.com/taiyang-li)). +* Объединять метки одной и той же части и записывать их в кэш условий запроса за один раз, чтобы уменьшить накладные расходы на блокировки. [#77377](https://github.com/ClickHouse/ClickHouse/pull/77377) ([zhongyuankai](https://github.com/zhongyuankai)). +* Оптимизирована производительность `s3Cluster` для запросов с одиночным раскрытием скобок. [#77686](https://github.com/ClickHouse/ClickHouse/pull/77686) ([Tomáš Hromada](https://github.com/gyfis)). +* Оптимизация ORDER BY по отдельным столбцам типа Nullable или LowCardinality. [#77789](https://github.com/ClickHouse/ClickHouse/pull/77789) ([李扬](https://github.com/taiyang-li)). +* Оптимизировано использование памяти формата `Native`. [#78442](https://github.com/ClickHouse/ClickHouse/pull/78442) ([Azat Khuzhin](https://github.com/azat)). +* Тривиальная оптимизация: не переписывать выражение `count(if(...))` в `countIf`, если требуется приведение типов. Закрыта задача [#78564](https://github.com/ClickHouse/ClickHouse/issues/78564). [#78565](https://github.com/ClickHouse/ClickHouse/pull/78565) ([李扬](https://github.com/taiyang-li)). +* Функция `hasAll` теперь может использовать полнотекстовые пропускающие индексы `tokenbf_v1` и `ngrambf_v1`. [#77662](https://github.com/ClickHouse/ClickHouse/pull/77662) ([UnamedRus](https://github.com/UnamedRus)). +* Индекс векторного сходства мог выделять оперативную память с избыточным запасом — до 2 раз больше необходимого. В этом исправлении переработана стратегия распределения памяти, что снизило её потребление и повысило эффективность кэша индекса векторного сходства. (issue [#78056](https://github.com/ClickHouse/ClickHouse/issues/78056)). [#78394](https://github.com/ClickHouse/ClickHouse/pull/78394) ([Shankar Iyer](https://github.com/shankar-iyer)). +* Добавлена настройка `schema_type` для таблицы `system.metric_log`, задающая тип схемы. Допускаются три варианта схемы: `wide` — текущая схема, каждая метрика/событие в отдельном столбце (наиболее эффективна при чтении отдельных столбцов), `transposed` — аналогично `system.asynchronous_metric_log`, метрики/события хранятся по строкам, и самая интересная `transposed_with_wide_view` — создаётся базовая таблица со схемой `transposed`, но также добавляется представление со схемой `wide`, которое транслирует запросы в базовую таблицу. В схеме `transposed_with_wide_view` субсекундная точность во view не поддерживается, `event_time_microseconds` — это лишь псевдоним для обеспечения обратной совместимости. [#78412](https://github.com/ClickHouse/ClickHouse/pull/78412) ([alesapin](https://github.com/alesapin)). #### Улучшение -* Сериализация плана запроса для запросов к `Distributed`. Добавлена новая настройка `serialize_query_plan`. При ее включении запросы к таблице `Distributed` будут использовать сериализованный план запроса для удаленного выполнения. Это добавляет новый тип пакета в протокол TCP; для разрешения обработки этого пакета в конфигурацию сервера необходимо добавить `true`. [#69652](https://github.com/ClickHouse/ClickHouse/pull/69652) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). -* Добавлена поддержка чтения типа `JSON` и его подстолбцов из представлений. [#76903](https://github.com/ClickHouse/ClickHouse/pull/76903) ([Pavel Kruglov](https://github.com/Avogar)). +* Сериализация плана запроса для запросов к таблицам `Distributed`. Добавлена новая настройка `serialize_query_plan`. При её включении запросы из таблиц `Distributed` будут использовать сериализованный план запроса для удалённого выполнения. Это добавляет новый тип пакета в протокол TCP; в конфигурацию сервера следует добавить `true`, чтобы разрешить обработку этого пакета. [#69652](https://github.com/ClickHouse/ClickHouse/pull/69652) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). +* Поддержка чтения столбцов типа `JSON` и подстолбцов из представлений. [#76903](https://github.com/ClickHouse/ClickHouse/pull/76903) ([Pavel Kruglov](https://github.com/Avogar)). * Добавлена поддержка ALTER DATABASE ... ON CLUSTER. [#79242](https://github.com/ClickHouse/ClickHouse/pull/79242) ([Tuan Pham Anh](https://github.com/tuanpach)). -* Операции обновления обновляемых материализованных представлений теперь отображаются в таблице `system.query_log`. [#71333](https://github.com/ClickHouse/ClickHouse/pull/71333) ([Michael Kolupaev](https://github.com/al13n321)). -* Пользовательские функции (UDF) теперь можно помечать как детерминированные с помощью нового параметра в их конфигурации. Кроме того, кэш запросов теперь проверяет, являются ли вызываемые в запросе UDF детерминированными. В этом случае результат запроса кэшируется. (Issue [#59988](https://github.com/ClickHouse/ClickHouse/issues/59988)). [#77769](https://github.com/ClickHouse/ClickHouse/pull/77769) ([Jimmy Aguilar Mena](https://github.com/Ergus)). -* Включена логика backoff для всех типов задач репликации. Это позволит снизить нагрузку на CPU, потребление памяти и размеры файлов логов. Добавлены новые настройки `max_postpone_time_for_failed_replicated_fetches_ms`, `max_postpone_time_for_failed_replicated_merges_ms` и `max_postpone_time_for_failed_replicated_tasks_ms`, аналогичные `max_postpone_time_for_failed_mutations_ms`. [#74576](https://github.com/ClickHouse/ClickHouse/pull/74576) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). +* Операции обновления обновляемых материализованных представлений теперь отображаются в `system.query_log`. [#71333](https://github.com/ClickHouse/ClickHouse/pull/71333) ([Michael Kolupaev](https://github.com/al13n321)). +* Пользовательские функции (UDF) теперь можно помечать как детерминированные с помощью нового параметра конфигурации. Кроме того, кэш запросов теперь проверяет, являются ли вызываемые в запросе UDF детерминированными. Если да, результат запроса кэшируется. (Issue [#59988](https://github.com/ClickHouse/ClickHouse/issues/59988)). [#77769](https://github.com/ClickHouse/ClickHouse/pull/77769) ([Jimmy Aguilar Mena](https://github.com/Ergus)). +* Включён механизм экспоненциальной задержки (backoff) для всех типов реплицированных задач. Это позволит снизить потребление CPU и памяти, а также размер файлов журналов. Добавлены новые настройки `max_postpone_time_for_failed_replicated_fetches_ms`, `max_postpone_time_for_failed_replicated_merges_ms` и `max_postpone_time_for_failed_replicated_tasks_ms`, которые аналогичны `max_postpone_time_for_failed_mutations_ms`. [#74576](https://github.com/ClickHouse/ClickHouse/pull/74576) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). * Добавлен `query_id` в таблицу `system.errors`. Закрывает [#75815](https://github.com/ClickHouse/ClickHouse/issues/75815). [#76581](https://github.com/ClickHouse/ClickHouse/pull/76581) ([Vladimir Baikov](https://github.com/bkvvldmr)). -* Добавлена поддержка преобразования `UInt128` в `IPv6`. Это позволяет выполнять операцию `bitAnd` и арифметические операции для `IPv6`, а также преобразовывать результат обратно в `IPv6`. Закрывает [#76752](https://github.com/ClickHouse/ClickHouse/issues/76752). См. также [#57707](https://github.com/ClickHouse/ClickHouse/pull/57707). [#76928](https://github.com/ClickHouse/ClickHouse/pull/76928) ([Muzammil Abdul Rehman](https://github.com/muzammilar)). -* По умолчанию специальные значения `Bool` в текстовых форматах внутри типа `Variant` не разбираются. Это поведение можно включить с помощью настройки `allow_special_bool_values_inside_variant`. [#76974](https://github.com/ClickHouse/ClickHouse/pull/76974) ([Pavel Kruglov](https://github.com/Avogar)). -* Добавлена поддержка настраиваемого времени ожидания для задач низкоприоритетных запросов на уровне сессии и сервера. [#77013](https://github.com/ClickHouse/ClickHouse/pull/77013) ([VicoWu](https://github.com/VicoWu)). -* Реализовано сравнение значений типа данных JSON. Теперь объекты JSON можно сравнивать так же, как Map. [#77397](https://github.com/ClickHouse/ClickHouse/pull/77397) ([Pavel Kruglov](https://github.com/Avogar)). -* Улучшена поддержка прав доступа в `system.kafka_consumers`. Пробрасываются внутренние ошибки `librdkafka` (стоит отметить, что эта библиотека оставляет желать лучшего). [#77700](https://github.com/ClickHouse/ClickHouse/pull/77700) ([Ilya Golshtein](https://github.com/ilejn)). +* Добавлена поддержка преобразования `UInt128` в `IPv6`. Это позволяет выполнять операцию `bitAnd` и арифметические операции над `IPv6`, а также преобразовывать результат обратно в `IPv6`. Закрывает [#76752](https://github.com/ClickHouse/ClickHouse/issues/76752). Это также позволяет конвертировать результат операции `bitAnd` над `IPv6` обратно в `IPv6`. См. также [#57707](https://github.com/ClickHouse/ClickHouse/pull/57707). [#76928](https://github.com/ClickHouse/ClickHouse/pull/76928) ([Muzammil Abdul Rehman](https://github.com/muzammilar)). +* По умолчанию не парсить специальные значения `Bool` в текстовых форматах внутри типа `Variant`. Это можно включить с помощью настройки `allow_special_bool_values_inside_variant`. [#76974](https://github.com/ClickHouse/ClickHouse/pull/76974) ([Pavel Kruglov](https://github.com/Avogar)). +* Поддерживается настройка времени ожидания по задаче для низкоприоритетного запроса (`priority`) на уровне сессии и сервера. [#77013](https://github.com/ClickHouse/ClickHouse/pull/77013) ([VicoWu](https://github.com/VicoWu)). +* Реализовано сравнение значений типа данных JSON. Теперь JSON-объекты можно сравнивать аналогично типу Map. [#77397](https://github.com/ClickHouse/ClickHouse/pull/77397) ([Pavel Kruglov](https://github.com/Avogar)). +* Улучшена поддержка прав доступа в `system.kafka_consumers`. Теперь пробрасываются внутренние ошибки `librdkafka` (стоит отметить, что эта библиотека, мягко говоря, так себе). [#77700](https://github.com/ClickHouse/ClickHouse/pull/77700) ([Ilya Golshtein](https://github.com/ilejn)). * Добавлена проверка настроек движка таблицы Buffer. [#77840](https://github.com/ClickHouse/ClickHouse/pull/77840) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). -* Добавлен параметр конфигурации `enable_hdfs_pread` для включения или отключения pread в `HDFS`. [#77885](https://github.com/ClickHouse/ClickHouse/pull/77885) ([kevinyhzou](https://github.com/KevinyhZou)). -* Добавлены события профилирования для количества `multi`-запросов чтения и записи в ZooKeeper. [#77888](https://github.com/ClickHouse/ClickHouse/pull/77888) ([JackyWoo](https://github.com/JackyWoo)). -* Разрешить создание и вставку данных во временные таблицы, когда включён `disable_insertion_and_mutation`. [#77901](https://github.com/ClickHouse/ClickHouse/pull/77901) ([Xu Jia](https://github.com/XuJia0210)). +* Добавлен параметр конфигурации `enable_hdfs_pread` для включения или отключения операции `pread` в `HDFS`. [#77885](https://github.com/ClickHouse/ClickHouse/pull/77885) ([kevinyhzou](https://github.com/KevinyhZou)). +* Добавлены profile events для количества запросов чтения и записи `multi` в ZooKeeper. [#77888](https://github.com/ClickHouse/ClickHouse/pull/77888) ([JackyWoo](https://github.com/JackyWoo)). +* Разрешено создавать и вставлять данные во временные таблицы при включённом параметре `disable_insertion_and_mutation`. [#77901](https://github.com/ClickHouse/ClickHouse/pull/77901) ([Xu Jia](https://github.com/XuJia0210)). * Уменьшено значение параметра `max_insert_delayed_streams_for_parallel_write` (до 100). [#77919](https://github.com/ClickHouse/ClickHouse/pull/77919) ([Azat Khuzhin](https://github.com/azat)). -* Исправлен разбор года в синтаксисе Joda (это из мира Java, если вам интересно), например для шаблона `yyy`. [#77973](https://github.com/ClickHouse/ClickHouse/pull/77973) ([李扬](https://github.com/taiyang-li)). -* Присоединение частей таблиц `MergeTree` будет выполняться в порядке следования блоков, что важно для специальных алгоритмов слияния, например `ReplacingMergeTree`. Это закрывает [#71009](https://github.com/ClickHouse/ClickHouse/issues/71009). [#77976](https://github.com/ClickHouse/ClickHouse/pull/77976) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Правила маскировки запросов теперь могут генерировать `LOGICAL_ERROR` в случае, если произошло совпадение. Это поможет проверить, не утекает ли заранее заданный пароль куда-либо в логах. [#78094](https://github.com/ClickHouse/ClickHouse/pull/78094) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). -* Добавлен столбец `index_length_column` в `information_schema.tables` для повышения совместимости с MySQL. [#78119](https://github.com/ClickHouse/ClickHouse/pull/78119) ([Paweł Zakrzewski](https://github.com/KrzaQ)). -* Добавлены две новые метрики: `TotalMergeFailures` и `NonAbortedMergeFailures`. Эти метрики нужны для выявления случаев, когда слишком много слияний завершается с ошибкой в течение короткого промежутка времени. [#78150](https://github.com/ClickHouse/ClickHouse/pull/78150) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). -* Исправлен некорректный разбор URL‑адресов S3, когда ключ не задан в URL в стиле path. [#78185](https://github.com/ClickHouse/ClickHouse/pull/78185) ([Arthur Passos](https://github.com/arthurpassos)). -* Исправлены некорректные значения асинхронных метрик `BlockActiveTime`, `BlockDiscardTime`, `BlockWriteTime`, `BlockQueueTime` и `BlockReadTime` (до изменения 1 секунда ошибочно сообщалась как 0.001). [#78211](https://github.com/ClickHouse/ClickHouse/pull/78211) ([filimonov](https://github.com/filimonov)). -* Учитывается лимит `loading_retries` при возникновении ошибок во время отправки данных в материализованное представление для StorageS3(Azure)Queue. Ранее такие ошибки повторялись неограниченное количество раз. [#78313](https://github.com/ClickHouse/ClickHouse/pull/78313) ([Kseniia Sumarokova](https://github.com/kssenii)). -* В Delta Lake с реализацией `delta-kernel-rs` улучшена производительность и исправлен индикатор прогресса. [#78368](https://github.com/ClickHouse/ClickHouse/pull/78368) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Добавлена поддержка директив `include`, `from_env` и `from_zk` для runtime-дисков. Закрывает [#78177](https://github.com/ClickHouse/ClickHouse/issues/78177). [#78470](https://github.com/ClickHouse/ClickHouse/pull/78470) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Добавлено динамическое предупреждение в таблицу `system.warnings` для долго выполняющихся мутаций. [#78658](https://github.com/ClickHouse/ClickHouse/pull/78658) ([Bharat Nallan](https://github.com/bharatnc)). -* Добавлено поле `condition` в системную таблицу `system.query_condition_cache`. В нём хранится условие в открытом виде, хэш которого используется как ключ в кэше условий запросов. [#78671](https://github.com/ClickHouse/ClickHouse/pull/78671) ([Robert Schulze](https://github.com/rschu1ze)). -* Разрешено использование пустого значения для секционирования Hive. [#78816](https://github.com/ClickHouse/ClickHouse/pull/78816) ([Arthur Passos](https://github.com/arthurpassos)). -* Исправлено приведение типов в операторе `IN` для `BFloat16` (то есть теперь `SELECT toBFloat16(1) IN [1, 2, 3];` возвращает `1`). Закрывает [#78754](https://github.com/ClickHouse/ClickHouse/issues/78754). [#78839](https://github.com/ClickHouse/ClickHouse/pull/78839) ([Raufs Dunamalijevs](https://github.com/rienath)). -* Не проверять части на других дисках в `MergeTree` при указании `disk = ...`. [#78855](https://github.com/ClickHouse/ClickHouse/pull/78855) ([Azat Khuzhin](https://github.com/azat)). -* Сделать так, чтобы типы данных в `used_data_type_families` в `system.query_log` записывались в виде канонических имён. [#78972](https://github.com/ClickHouse/ClickHouse/pull/78972) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Очистка настроек при `recoverLostReplica` выполнена так же, как и в [#78637](https://github.com/ClickHouse/ClickHouse/pull/78637). [#79113](https://github.com/ClickHouse/ClickHouse/pull/79113) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). -* Использовать столбцы вставляемых данных для вывода схемы INFILE. [#78490](https://github.com/ClickHouse/ClickHouse/pull/78490) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). - - - - - -#### Исправление ошибки (видимая пользователю неисправность в официальном стабильном релизе) - -* Исправлен некорректный анализ проекций при использовании `count(Nullable)` в агрегатных проекциях, что устраняет проблему [#74495](https://github.com/ClickHouse/ClickHouse/issues/74495). В этот PR также добавлены дополнительные логи в процессе анализа проекций, чтобы прояснить, почему проекция используется или не используется. [#74498](https://github.com/ClickHouse/ClickHouse/pull/74498) ([Amos Bird](https://github.com/amosbird)). -* Исправлена проблема `Part <...> does not contain in snapshot of previous virtual parts. (PART_IS_TEMPORARILY_LOCKED)` при выполнении `DETACH PART`. [#76039](https://github.com/ClickHouse/ClickHouse/pull/76039) ([Aleksei Filatov](https://github.com/aalexfvk)). -* Исправлена некорректная работа пропускающих индексов с выражением, содержащим литералы, в анализаторе, а также удалены тривиальные приведения типов при анализе индексов. [#77229](https://github.com/ClickHouse/ClickHouse/pull/77229) ([Pavel Kruglov](https://github.com/Avogar)). -* Исправлена ошибка, из-за которой параметр запроса `close_session` не имел эффекта, вследствие чего именованные сессии закрывались только после `session_timeout`. [#77336](https://github.com/ClickHouse/ClickHouse/pull/77336) ([Alexey Katsman](https://github.com/alexkats)). -* Исправлено получение сообщений с сервера NATS без присоединённых материализованных представлений. [#77392](https://github.com/ClickHouse/ClickHouse/pull/77392) ([Dmitry Novikov](https://github.com/dmitry-sles-novikov)). -* Исправлена логическая ошибка при чтении из пустого `FileLog` с помощью табличной функции `merge`, закрыта [#75575](https://github.com/ClickHouse/ClickHouse/issues/75575). [#77441](https://github.com/ClickHouse/ClickHouse/pull/77441) ([Vladimir Cherkasov](https://github.com/vdimir)). -* Использовать настройки формата по умолчанию при сериализации `Dynamic` из общего варианта. [#77572](https://github.com/ClickHouse/ClickHouse/pull/77572) ([Pavel Kruglov](https://github.com/Avogar)). +* Исправлен разбор года в синтаксисе Joda (если вам интересно, это из мира Java) для шаблонов вида `yyy`. [#77973](https://github.com/ClickHouse/ClickHouse/pull/77973) ([李扬](https://github.com/taiyang-li)). +* Присоединение частей таблиц `MergeTree` будет выполняться в их блочном порядке, что важно для специальных алгоритмов слияния, таких как `ReplacingMergeTree`. Это закрывает [#71009](https://github.com/ClickHouse/ClickHouse/issues/71009). [#77976](https://github.com/ClickHouse/ClickHouse/pull/77976) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Правила маскировки запросов теперь могут выбрасывать `LOGICAL_ERROR` в случае, если найдено совпадение. Это поможет проверить, не утек ли заранее заданный пароль в какие-либо логи. [#78094](https://github.com/ClickHouse/ClickHouse/pull/78094) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). +* Добавлен столбец `index_length_column` в `information_schema.tables` для улучшения совместимости с MySQL. [#78119](https://github.com/ClickHouse/ClickHouse/pull/78119) ([Paweł Zakrzewski](https://github.com/KrzaQ)). +* Добавлены две новые метрики: `TotalMergeFailures` и `NonAbortedMergeFailures`. Эти метрики необходимы для обнаружения случаев, когда за короткий промежуток времени происходит слишком много неудачных слияний. [#78150](https://github.com/ClickHouse/ClickHouse/pull/78150) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). +* Исправлен некорректный разбор URL S3 при использовании path-style, когда ключ не указан. [#78185](https://github.com/ClickHouse/ClickHouse/pull/78185) ([Arthur Passos](https://github.com/arthurpassos)). +* Исправлены некорректные значения асинхронных метрик `BlockActiveTime`, `BlockDiscardTime`, `BlockWriteTime`, `BlockQueueTime` и `BlockReadTime` (до изменения одна секунда ошибочно отображалась как 0,001 секунды). [#78211](https://github.com/ClickHouse/ClickHouse/pull/78211) ([filimonov](https://github.com/filimonov)). +* Теперь учитывается ограничение `loading_retries` для ошибок при отправке данных в материализованное представление для StorageS3(Azure)Queue. Ранее такие ошибки повторялись бесконечно. [#78313](https://github.com/ClickHouse/ClickHouse/pull/78313) ([Kseniia Sumarokova](https://github.com/kssenii)). +* В DeltaLake с реализацией `delta-kernel-rs` исправлены проблемы с производительностью и индикатором прогресса. [#78368](https://github.com/ClickHouse/ClickHouse/pull/78368) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Реализована поддержка `include`, `from_env`, `from_zk` для runtime-дисков. Закрывает [#78177](https://github.com/ClickHouse/ClickHouse/issues/78177). [#78470](https://github.com/ClickHouse/ClickHouse/pull/78470) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Добавлено динамическое предупреждение в таблицу `system.warnings` для длительно выполняющихся мутаций. [#78658](https://github.com/ClickHouse/ClickHouse/pull/78658) ([Bharat Nallan](https://github.com/bharatnc)). +* Добавлено поле `condition` в системную таблицу `system.query_condition_cache`. Оно хранит условие в открытом виде, хеш которого используется как ключ в кэше условий запросов. [#78671](https://github.com/ClickHouse/ClickHouse/pull/78671) ([Robert Schulze](https://github.com/rschu1ze)). +* Разрешено использование пустого значения при партиционировании Hive. [#78816](https://github.com/ClickHouse/ClickHouse/pull/78816) ([Arthur Passos](https://github.com/arthurpassos)). +* Исправлено приведение типов в операторе `IN` для `BFloat16` (т. е. теперь `SELECT toBFloat16(1) IN [1, 2, 3];` возвращает `1`). Закрывает [#78754](https://github.com/ClickHouse/ClickHouse/issues/78754). [#78839](https://github.com/ClickHouse/ClickHouse/pull/78839) ([Raufs Dunamalijevs](https://github.com/rienath)). +* Не проверять части на других дисках для `MergeTree`, если установлен `disk = ...`. [#78855](https://github.com/ClickHouse/ClickHouse/pull/78855) ([Azat Khuzhin](https://github.com/azat)). +* Теперь типы данных в `used_data_type_families` в `system.query_log` записываются с каноническими именами. [#78972](https://github.com/ClickHouse/ClickHouse/pull/78972) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Настройки очистки при `recoverLostReplica` выполнены аналогично тому, как это сделано в [#78637](https://github.com/ClickHouse/ClickHouse/pull/78637). [#79113](https://github.com/ClickHouse/ClickHouse/pull/79113) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). +* Используйте столбцы вставки для определения схемы INFILE. [#78490](https://github.com/ClickHouse/ClickHouse/pull/78490) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). + +#### Исправление ошибки (ошибка, проявляющаяся для пользователя как некорректное поведение в официальном стабильном релизе) + +* Исправлен некорректный анализ проекций при использовании `count(Nullable)` в агрегатных проекциях. Тем самым исправляется [#74495](https://github.com/ClickHouse/ClickHouse/issues/74495). В этом PR также добавлено дополнительное логирование анализа проекций, чтобы было понятно, почему проекция используется или нет. [#74498](https://github.com/ClickHouse/ClickHouse/pull/74498) ([Amos Bird](https://github.com/amosbird)). +* Исправлена ошибка `Part <...> does not contain in snapshot of previous virtual parts. (PART_IS_TEMPORARILY_LOCKED)` при выполнении `DETACH PART`. [#76039](https://github.com/ClickHouse/ClickHouse/pull/76039) ([Aleksei Filatov](https://github.com/aalexfvk)). +* Исправлена некорректная работа пропускающих индексов с выражениями, содержащими литералы, в анализаторе, а также удалены тривиальные приведения типов во время анализа индексов. [#77229](https://github.com/ClickHouse/ClickHouse/pull/77229) ([Pavel Kruglov](https://github.com/Avogar)). +* Исправлена ошибка, из-за которой параметр запроса `close_session` не действовал, и именованные сессии закрывались только после `session_timeout`. [#77336](https://github.com/ClickHouse/ClickHouse/pull/77336) ([Alexey Katsman](https://github.com/alexkats)). +* Исправлено получение сообщений от сервера NATS без связанных материализованных представлений. [#77392](https://github.com/ClickHouse/ClickHouse/pull/77392) ([Dmitry Novikov](https://github.com/dmitry-sles-novikov)). +* Исправлена логическая ошибка при чтении из пустого `FileLog` с использованием табличной функции `merge`, закрыто [#75575](https://github.com/ClickHouse/ClickHouse/issues/75575). [#77441](https://github.com/ClickHouse/ClickHouse/pull/77441) ([Vladimir Cherkasov](https://github.com/vdimir)). +* Использовать настройки формата по умолчанию в сериализации `Dynamic` из разделяемого варианта. [#77572](https://github.com/ClickHouse/ClickHouse/pull/77572) ([Pavel Kruglov](https://github.com/Avogar)). * Исправлена проверка наличия пути к данным таблицы на локальном диске. [#77608](https://github.com/ClickHouse/ClickHouse/pull/77608) ([Tuan Pham Anh](https://github.com/tuanpach)). -* Исправлена отправка константных значений на удалённый сервер для некоторых типов данных. [#77634](https://github.com/ClickHouse/ClickHouse/pull/77634) ([Pavel Kruglov](https://github.com/Avogar)). -* Исправлен сбой из‑за истёкшего контекста в S3/AzureQueue. [#77720](https://github.com/ClickHouse/ClickHouse/pull/77720) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Скрывать учетные данные в табличных движках RabbitMQ, Nats, Redis и AzureQueue. [#77755](https://github.com/ClickHouse/ClickHouse/pull/77755) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Исправлено неопределённое поведение при сравнении значений `NaN` в `argMin`/`argMax`. [#77756](https://github.com/ClickHouse/ClickHouse/pull/77756) ([Raúl Marín](https://github.com/Algunenano)). +* Исправлена передача константных значений на удалённый сервер для некоторых типов данных. [#77634](https://github.com/ClickHouse/ClickHouse/pull/77634) ([Pavel Kruglov](https://github.com/Avogar)). +* Исправлено аварийное завершение работы из‑за истекшего контекста в S3/AzureQueue. [#77720](https://github.com/ClickHouse/ClickHouse/pull/77720) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Скрыть учетные данные в табличных движках RabbitMQ, Nats, Redis и AzureQueue. [#77755](https://github.com/ClickHouse/ClickHouse/pull/77755) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Исправлено неопределённое поведение при сравнении значений `NaN` в функциях `argMin` и `argMax`. [#77756](https://github.com/ClickHouse/ClickHouse/pull/77756) ([Raúl Marín](https://github.com/Algunenano)). * Регулярно проверяйте, были ли слияния и мутации отменены, даже если операция не порождает блоков для записи. [#77766](https://github.com/ClickHouse/ClickHouse/pull/77766) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). -* Исправлена проблема, когда обновляемое материализованное представление в реплицируемой базе данных не работало на новых репликах. [#77774](https://github.com/ClickHouse/ClickHouse/pull/77774) ([Michael Kolupaev](https://github.com/al13n321)). -* Исправлено возможное падение при возникновении ошибки `NOT_FOUND_COLUMN_IN_BLOCK`. [#77854](https://github.com/ClickHouse/ClickHouse/pull/77854) ([Vladimir Cherkasov](https://github.com/vdimir)). -* Исправлен сбой в S3/AzureQueue при заполнении данных. [#77878](https://github.com/ClickHouse/ClickHouse/pull/77878) ([Bharat Nallan](https://github.com/bharatnc)). +* Исправлена проблема, из-за которой обновляемое материализованное представление в реплицируемой базе данных не работало на вновь добавленных репликах. [#77774](https://github.com/ClickHouse/ClickHouse/pull/77774) ([Michael Kolupaev](https://github.com/al13n321)). +* Исправлен потенциальный краш при возникновении ошибки `NOT_FOUND_COLUMN_IN_BLOCK`. [#77854](https://github.com/ClickHouse/ClickHouse/pull/77854) ([Vladimir Cherkasov](https://github.com/vdimir)). +* Исправлена ошибка, приводившая к сбою в S3/AzureQueue во время заполнения данными. [#77878](https://github.com/ClickHouse/ClickHouse/pull/77878) ([Bharat Nallan](https://github.com/bharatnc)). * Отключён нечеткий поиск по истории в SSH-сервере (так как для него требуется библиотека skim). [#78002](https://github.com/ClickHouse/ClickHouse/pull/78002) ([Azat Khuzhin](https://github.com/azat)). -* Исправляет ошибку, при которой запрос векторного поиска по неиндексированному столбцу возвращал некорректные результаты, если в таблице был другой векторный столбец с заданным индексом векторного сходства. (Issue [#77978](https://github.com/ClickHouse/ClickHouse/issues/77978)). [#78069](https://github.com/ClickHouse/ClickHouse/pull/78069) ([Shankar Iyer](https://github.com/shankar-iyer)). -* Исправлена незначительная ошибка в сообщении запроса "The requested output format {} is binary... Do you want to output it anyway? [y/N]". [#78095](https://github.com/ClickHouse/ClickHouse/pull/78095) ([Azat Khuzhin](https://github.com/azat)). -* Исправление ошибки в случае использования `toStartOfInterval` с аргументом origin, равным нулю. [#78096](https://github.com/ClickHouse/ClickHouse/pull/78096) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* Запрещено задавать пустой параметр запроса `session_id` в HTTP-интерфейсе. [#78098](https://github.com/ClickHouse/ClickHouse/pull/78098) ([Alexey Katsman](https://github.com/alexkats)). -* Исправлена перезапись метаданных в базе данных `Replicated`, которая могла произойти из-за выполнения запроса `RENAME` сразу после запроса `ALTER`. [#78107](https://github.com/ClickHouse/ClickHouse/pull/78107) ([Nikolay Degterinsky](https://github.com/evillique)). -* Устранён сбой в движке `NATS`. [#78108](https://github.com/ClickHouse/ClickHouse/pull/78108) ([Dmitry Novikov](https://github.com/dmitry-sles-novikov)). -* Больше не выполняется попытка создать history_file во встроенном SSH-клиенте (в предыдущих версиях создание всегда завершалось неудачей, хотя попытка предпринималась). [#78112](https://github.com/ClickHouse/ClickHouse/pull/78112) ([Azat Khuzhin](https://github.com/azat)). -* Исправлена ошибка, из-за которой `system.detached_tables` отображала некорректную информацию после запросов `RENAME DATABASE` или `DROP TABLE`. [#78126](https://github.com/ClickHouse/ClickHouse/pull/78126) ([Nikolay Degterinsky](https://github.com/evillique)). -* Исправлены проверки на слишком большое количество таблиц в базе данных `Replicated` после [#77274](https://github.com/ClickHouse/ClickHouse/pull/77274). Также проверка теперь выполняется до создания хранилища, чтобы избежать создания неучтённых узлов в Keeper в случае `ReplicatedMergeTree` или `KeeperMap`. [#78127](https://github.com/ClickHouse/ClickHouse/pull/78127) ([Nikolay Degterinsky](https://github.com/evillique)). -* Исправлено возможное аварийное завершение из-за конкурентной инициализации метаданных `S3Queue`. [#78131](https://github.com/ClickHouse/ClickHouse/pull/78131) ([Azat Khuzhin](https://github.com/azat)). -* Функции `groupArray*` теперь выдают ошибку `BAD_ARGUMENTS` для значения 0 типа Int в аргументе `max_size` (как уже делается для значения типа UInt), вместо попытки выполнить их с этим значением. [#78140](https://github.com/ClickHouse/ClickHouse/pull/78140) ([Eduard Karacharov](https://github.com/korowa)). -* Предотвращено падение при восстановлении потерянной реплики, если локальная таблица была удалена до её отсоединения. [#78173](https://github.com/ClickHouse/ClickHouse/pull/78173) ([Raúl Marín](https://github.com/Algunenano)). -* Исправлена ошибка, из-за которой столбец "alterable" в `system.s3_queue_settings` всегда возвращал `false`. [#78187](https://github.com/ClickHouse/ClickHouse/pull/78187) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Скрывать подпись доступа Azure, чтобы она не отображалась пользователю и не попадала в логи. [#78189](https://github.com/ClickHouse/ClickHouse/pull/78189) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Исправлена предвыборка подпотоков с префиксами в частях Wide. [#78205](https://github.com/ClickHouse/ClickHouse/pull/78205) ([Pavel Kruglov](https://github.com/Avogar)). -* Исправлены падения и некорректные результаты для `mapFromArrays` в случае, когда массив ключей имеет тип `LowCardinality(Nullable)`. [#78240](https://github.com/ClickHouse/ClickHouse/pull/78240) ([Eduard Karacharov](https://github.com/korowa)). +* Исправлена ошибка, из-за которой запрос векторного поиска по столбцу без индекса возвращал некорректные результаты, если в таблице был другой векторный столбец с определённым индексом векторного сходства. (Issue [#77978](https://github.com/ClickHouse/ClickHouse/issues/77978)). [#78069](https://github.com/ClickHouse/ClickHouse/pull/78069) ([Shankar Iyer](https://github.com/shankar-iyer)). +* Исправлена незначительная ошибка в запросе подтверждения «Запрошенный формат вывода {} — двоичный... Всё равно вывести? [y/N]». [#78095](https://github.com/ClickHouse/ClickHouse/pull/78095) ([Azat Khuzhin](https://github.com/azat)). +* Исправлена ошибка при использовании `toStartOfInterval` с нулевым значением аргумента origin. [#78096](https://github.com/ClickHouse/ClickHouse/pull/78096) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* Запрещена передача пустого параметра запроса `session_id` в HTTP-интерфейсе. [#78098](https://github.com/ClickHouse/ClickHouse/pull/78098) ([Alexey Katsman](https://github.com/alexkats)). +* Исправлена перезапись метаданных в базе данных `Replicated`, которая могла произойти из‑за выполнения запроса `RENAME` сразу после запроса `ALTER`. [#78107](https://github.com/ClickHouse/ClickHouse/pull/78107) ([Nikolay Degterinsky](https://github.com/evillique)). +* Исправлена ошибка, приводившая к аварийному завершению работы движка `NATS`. [#78108](https://github.com/ClickHouse/ClickHouse/pull/78108) ([Dmitry Novikov](https://github.com/dmitry-sles-novikov)). +* Не пытаться создавать файл `history_file` во встроенном SSH‑клиенте (в предыдущих версиях создание всегда завершалось неудачей, но всё же предпринималось). [#78112](https://github.com/ClickHouse/ClickHouse/pull/78112) ([Azat Khuzhin](https://github.com/azat)). +* Исправлено некорректное отображение информации в `system.detached_tables` после выполнения запросов `RENAME DATABASE` или `DROP TABLE`. [#78126](https://github.com/ClickHouse/ClickHouse/pull/78126) ([Nikolay Degterinsky](https://github.com/evillique)). +* Исправлена проверка на слишком большое количество таблиц в базе данных `Replicated` после [#77274](https://github.com/ClickHouse/ClickHouse/pull/77274). Кроме того, проверка теперь выполняется перед созданием хранилища, чтобы избежать создания неучтённых узлов в Keeper в случае `ReplicatedMergeTree` или `KeeperMap`. [#78127](https://github.com/ClickHouse/ClickHouse/pull/78127) ([Nikolay Degterinsky](https://github.com/evillique)). +* Исправлено возможное аварийное завершение работы из-за одновременной инициализации метаданных `S3Queue`. [#78131](https://github.com/ClickHouse/ClickHouse/pull/78131) ([Azat Khuzhin](https://github.com/azat)). +* Функции `groupArray*` теперь выдают ошибку `BAD_ARGUMENTS` для значения аргумента `max_size`, равного 0 и имеющего тип Int (как это уже делается для значения типа UInt), вместо попытки выполнить операцию с таким значением. [#78140](https://github.com/ClickHouse/ClickHouse/pull/78140) ([Eduard Karacharov](https://github.com/korowa)). +* Предотвращён сбой при восстановлении потерянной реплики, если локальная таблица была удалена до её отключения. [#78173](https://github.com/ClickHouse/ClickHouse/pull/78173) ([Raúl Marín](https://github.com/Algunenano)). +* Исправлена проблема, из-за которой столбец «alterable» в `system.s3_queue_settings` всегда возвращал `false`. [#78187](https://github.com/ClickHouse/ClickHouse/pull/78187) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Маскировать подпись доступа Azure, чтобы она не отображалась пользователю и в логах. [#78189](https://github.com/ClickHouse/ClickHouse/pull/78189) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Исправлена предвыборка подпотоков с префиксами в широких частях. [#78205](https://github.com/ClickHouse/ClickHouse/pull/78205) ([Pavel Kruglov](https://github.com/Avogar)). +* Исправлены сбои и некорректный результат для `mapFromArrays` в случае, когда массив ключей имеет тип `LowCardinality(Nullable)`. [#78240](https://github.com/ClickHouse/ClickHouse/pull/78240) ([Eduard Karacharov](https://github.com/korowa)). * Исправлены параметры аутентификации для delta-kernel-rs. [#78255](https://github.com/ClickHouse/ClickHouse/pull/78255) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Не планировать задачу Refreshable Materialized Views, если у реплики параметр `disable_insertion_and_mutation` имеет значение true. Задача выполняет вставку, и она завершится с ошибкой, если `disable_insertion_and_mutation` равно true. [#78277](https://github.com/ClickHouse/ClickHouse/pull/78277) ([Xu Jia](https://github.com/XuJia0210)). -* Проверка доступа к исходным таблицам для движка `Merge`. [#78339](https://github.com/ClickHouse/ClickHouse/pull/78339) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). -* Модификатор `FINAL` можно опускать при выполнении запросов к таблице `Distributed`. [#78428](https://github.com/ClickHouse/ClickHouse/pull/78428) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* `bitmapMin` возвращает uint32_max, когда битовая карта пуста (и uint64_max, когда тип входных данных шире), что соответствует поведению минимального значения пустого roaring_bitmap. [#78444](https://github.com/ClickHouse/ClickHouse/pull/78444) ([wxybear](https://github.com/wxybear)). -* Отключена параллелизация обработки запроса сразу после чтения FROM при включённом режиме `distributed_aggregation_memory_efficient`, так как это может приводить к логической ошибке. Закрывает [#76934](https://github.com/ClickHouse/ClickHouse/issues/76934). [#78500](https://github.com/ClickHouse/ClickHouse/pull/78500) ([flynn](https://github.com/ucasfl)). -* Устанавливается как минимум один поток чтения на случай, если после применения настройки `max_streams_to_max_threads_ratio` не останется ни одного запланированного потока. [#78505](https://github.com/ClickHouse/ClickHouse/pull/78505) ([Eduard Karacharov](https://github.com/korowa)). -* В хранилище `S3Queue` исправлена логическая ошибка «Cannot unregister: table uuid is not registered». Закрывает [#78285](https://github.com/ClickHouse/ClickHouse/issues/78285). [#78541](https://github.com/ClickHouse/ClickHouse/pull/78541) ([Kseniia Sumarokova](https://github.com/kssenii)). -* ClickHouse теперь умеет определять свой cgroup v2 на системах, где одновременно используются cgroups v1 и v2. [#78566](https://github.com/ClickHouse/ClickHouse/pull/78566) ([Grigory Korolev](https://github.com/gkorolev)). -* Табличные функции `-Cluster` завершались с ошибкой при использовании настроек на уровне таблицы. [#78587](https://github.com/ClickHouse/ClickHouse/pull/78587) ([Daniil Ivanik](https://github.com/divanik)). -* Улучшены проверки в случаях, когда движок ReplicatedMergeTree не поддерживает транзакции при выполнении операций INSERT. [#78633](https://github.com/ClickHouse/ClickHouse/pull/78633) ([Azat Khuzhin](https://github.com/azat)). +* Не планировать задачу Refreshable Materialized Views, если у реплики параметр `disable_insertion_and_mutation` имеет значение true. Задача представляет собой вставку и завершится с ошибкой, если `disable_insertion_and_mutation` равно true. [#78277](https://github.com/ClickHouse/ClickHouse/pull/78277) ([Xu Jia](https://github.com/XuJia0210)). +* Проверять права доступа к базовым таблицам движка `Merge`. [#78339](https://github.com/ClickHouse/ClickHouse/pull/78339) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +* Модификатор `FINAL` можно не использовать при запросах к таблице `Distributed`. [#78428](https://github.com/ClickHouse/ClickHouse/pull/78428) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* `bitmapMin` возвращает uint32_max, когда битовая карта пуста (и uint64_max, когда разрядность входного типа больше), что соответствует поведению минимального значения пустого roaring_bitmap. [#78444](https://github.com/ClickHouse/ClickHouse/pull/78444) ([wxybear](https://github.com/wxybear)). +* Отключена параллелизация обработки запроса сразу после чтения FROM при включённом параметре `distributed_aggregation_memory_efficient`, так как это может приводить к логической ошибке. Закрывает [#76934](https://github.com/ClickHouse/ClickHouse/issues/76934). [#78500](https://github.com/ClickHouse/ClickHouse/pull/78500) ([flynn](https://github.com/ucasfl)). +* Устанавливать минимум один поток для чтения на случай, если после применения настройки `max_streams_to_max_threads_ratio` не остаётся ни одного запланированного потока. [#78505](https://github.com/ClickHouse/ClickHouse/pull/78505) ([Eduard Karacharov](https://github.com/korowa)). +* В хранилище `S3Queue` исправлена логическая ошибка вида «Cannot unregister: table uuid is not registered». Закрывает [#78285](https://github.com/ClickHouse/ClickHouse/issues/78285). [#78541](https://github.com/ClickHouse/ClickHouse/pull/78541) ([Kseniia Sumarokova](https://github.com/kssenii)). +* ClickHouse теперь может корректно определять свою cgroup v2 на системах, где включены и cgroups v1, и v2. [#78566](https://github.com/ClickHouse/ClickHouse/pull/78566) ([Grigory Korolev](https://github.com/gkorolev)). +* Табличные функции `-Cluster` давали сбой при использовании с настройками на уровне таблицы. [#78587](https://github.com/ClickHouse/ClickHouse/pull/78587) ([Daniil Ivanik](https://github.com/divanik)). +* Улучшены проверки на отсутствие поддержки транзакций в ReplicatedMergeTree при выполнении INSERT. [#78633](https://github.com/ClickHouse/ClickHouse/pull/78633) ([Azat Khuzhin](https://github.com/azat)). * Очистка настроек запроса при выполнении ATTACH. [#78637](https://github.com/ClickHouse/ClickHouse/pull/78637) ([Raúl Marín](https://github.com/Algunenano)). -* Исправлено аварийное завершение при указании недопустимого пути в `iceberg_metadata_file_path`. [#78688](https://github.com/ClickHouse/ClickHouse/pull/78688) ([alesapin](https://github.com/alesapin)). -* В движке таблицы `DeltaLake` с реализацией delta-kernel-s исправлена ситуация, когда схема чтения отличается от схемы таблицы и при этом присутствуют столбцы партиционирования, что приводило к ошибке «not found column». [#78690](https://github.com/ClickHouse/ClickHouse/pull/78690) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Исправлена проблема, при которой после планирования закрытия именованной сессии (но до истечения тайм-аута) создание новой именованной сессии с тем же именем приводило к её закрытию в момент, на который было запланировано закрытие первой сессии. [#78698](https://github.com/ClickHouse/ClickHouse/pull/78698) ([Alexey Katsman](https://github.com/alexkats)). -* Исправлено несколько типов запросов `SELECT`, которые читают из таблиц с движком `MongoDB` или табличной функцией `mongodb`: запросы с неявным преобразованием константного значения в предложении `WHERE` (например, `WHERE datetime = '2025-03-10 00:00:00'`); запросы с `LIMIT` и `GROUP BY`. Ранее они могли возвращать неверный результат. [#78777](https://github.com/ClickHouse/ClickHouse/pull/78777) ([Anton Popov](https://github.com/CurtizJ)). -* Не блокировать остановку таблицы во время выполнения команды `CHECK TABLE`. [#78782](https://github.com/ClickHouse/ClickHouse/pull/78782) ([Raúl Marín](https://github.com/Algunenano)). -* Keeper: скорректирован подсчёт эфемерных узлов во всех случаях. [#78799](https://github.com/ClickHouse/ClickHouse/pull/78799) ([Antonio Andelic](https://github.com/antonio2368)). -* Исправлено некорректное приведение типов в `StorageDistributed` при использовании табличных функций, отличных от `view`. Закрывает [#78464](https://github.com/ClickHouse/ClickHouse/issues/78464). [#78828](https://github.com/ClickHouse/ClickHouse/pull/78828) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* Унифицировано форматирование для `tupleElement(*, 1)`. Закрывает [#78639](https://github.com/ClickHouse/ClickHouse/issues/78639). [#78832](https://github.com/ClickHouse/ClickHouse/pull/78832) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* Словари типа `ssd_cache` теперь отклоняют нулевые или отрицательные значения параметров `block_size` и `write_buffer_size` ([#78314](https://github.com/ClickHouse/ClickHouse/issues/78314)). [#78854](https://github.com/ClickHouse/ClickHouse/pull/78854) ([Elmi Ahmadov](https://github.com/ahmadov)). -* Исправлено падение обновляемого материализованного представления в случае выполнения ALTER после некорректного завершения работы. [#78858](https://github.com/ClickHouse/ClickHouse/pull/78858) ([Azat Khuzhin](https://github.com/azat)). -* Исправлен разбор некорректных значений `DateTime` в формате `CSV`. [#78919](https://github.com/ClickHouse/ClickHouse/pull/78919) ([Pavel Kruglov](https://github.com/Avogar)). -* Исправление в Keeper: исключено срабатывание наблюдателей при неуспешных multi-запросах. [#79247](https://github.com/ClickHouse/ClickHouse/pull/79247) ([Antonio Andelic](https://github.com/antonio2368)). -* Исправлена ошибка чтения таблицы Iceberg, возникавшая, когда значение min-max указывалось явно, но было равно `NULL`. Отмечено, что библиотека Go Iceberg генерировала настолько некорректные файлы. Закрывает [#78740](https://github.com/ClickHouse/ClickHouse/issues/78740). [#78764](https://github.com/ClickHouse/ClickHouse/pull/78764) ([flynn](https://github.com/ucasfl)). - - +* Исправлена ошибка, приводившая к аварийному завершению при указании недопустимого пути в `iceberg_metadata_file_path`. [#78688](https://github.com/ClickHouse/ClickHouse/pull/78688) ([alesapin](https://github.com/alesapin)). +* В движке таблиц `DeltaLake` с реализацией на delta-kernel-s исправлен случай, когда схема чтения отличается от схемы таблицы и одновременно заданы столбцы партиционирования, что приводило к ошибке «not found column». [#78690](https://github.com/ClickHouse/ClickHouse/pull/78690) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Исправлена проблема, при которой после планирования закрытия именованной сессии (но до истечения таймаута) создание новой именованной сессии с тем же именем приводило к её закрытию в то же время, что и первой сессии. [#78698](https://github.com/ClickHouse/ClickHouse/pull/78698) ([Alexey Katsman](https://github.com/alexkats)). +* Исправлено несколько типов запросов `SELECT`, которые читают из таблиц с движком `MongoDB` или табличной функцией `mongodb`: запросы с неявным преобразованием константы в условии `WHERE` (например, `WHERE datetime = '2025-03-10 00:00:00'`); запросы с `LIMIT` и `GROUP BY`. Ранее они могли возвращать неверный результат. [#78777](https://github.com/ClickHouse/ClickHouse/pull/78777) ([Anton Popov](https://github.com/CurtizJ)). +* Не блокировать завершение работы таблицы во время выполнения `CHECK TABLE`. [#78782](https://github.com/ClickHouse/ClickHouse/pull/78782) ([Raúl Marín](https://github.com/Algunenano)). +* Исправление в Keeper: во всех случаях исправлен подсчёт эфемерных сущностей. [#78799](https://github.com/ClickHouse/ClickHouse/pull/78799) ([Antonio Andelic](https://github.com/antonio2368)). +* Исправлено некорректное приведение типов в `StorageDistributed` при использовании табличных функций, кроме `view`. Закрывает [#78464](https://github.com/ClickHouse/ClickHouse/issues/78464). [#78828](https://github.com/ClickHouse/ClickHouse/pull/78828) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* Приведено к единому стилю форматирование для `tupleElement(*, 1)`. Закрывает [#78639](https://github.com/ClickHouse/ClickHouse/issues/78639). [#78832](https://github.com/ClickHouse/ClickHouse/pull/78832) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* Словари типа `ssd_cache` теперь отклоняют нулевые или отрицательные значения параметров `block_size` и `write_buffer_size` (issue [#78314](https://github.com/ClickHouse/ClickHouse/issues/78314)). [#78854](https://github.com/ClickHouse/ClickHouse/pull/78854) ([Elmi Ahmadov](https://github.com/ahmadov)). +* Исправлено падение Refreshable MATERIALIZED VIEW при выполнении ALTER после некорректного завершения работы. [#78858](https://github.com/ClickHouse/ClickHouse/pull/78858) ([Azat Khuzhin](https://github.com/azat)). +* Исправлена обработка некорректных значений `DateTime` в формате `CSV`. [#78919](https://github.com/ClickHouse/ClickHouse/pull/78919) ([Pavel Kruglov](https://github.com/Avogar)). +* Исправление в Keeper: предотвращает срабатывание наблюдателей (watches) при неуспешных multi‑запросах. [#79247](https://github.com/ClickHouse/ClickHouse/pull/79247) ([Antonio Andelic](https://github.com/antonio2368)). +* Исправлена ошибка чтения таблиц Iceberg, возникавшая, когда значения min/max были явно заданы, но имели значение `NULL`. Отмечено, что библиотека Go Iceberg генерировала как раз такие некорректные файлы. Закрывает [#78740](https://github.com/ClickHouse/ClickHouse/issues/78740). [#78764](https://github.com/ClickHouse/ClickHouse/pull/78764) ([flynn](https://github.com/ucasfl)). #### Улучшения сборки/тестирования/упаковки -* Учитываются целевые возможности CPU в Rust и LTO включён во всех крейтах. [#78590](https://github.com/ClickHouse/ClickHouse/pull/78590) ([Raúl Marín](https://github.com/Algunenano)). +* Учитывать целевые особенности процессора в Rust и включать LTO во всех крейтах. [#78590](https://github.com/ClickHouse/ClickHouse/pull/78590) ([Raúl Marín](https://github.com/Algunenano)). ### Релиз ClickHouse 25.3 LTS, 2025-03-20 {#253} -#### Обратно несовместимое изменение -* Запрещено усечение реплицируемых баз данных. [#76651](https://github.com/ClickHouse/ClickHouse/pull/76651) ([Bharat Nallan](https://github.com/bharatnc)). -* Пропуск кэша индексов отменён. [#77447](https://github.com/ClickHouse/ClickHouse/pull/77447) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). - +#### Обратимые несовместимые изменения +* Операция TRUNCATE для реплицируемых баз данных запрещена. [#76651](https://github.com/ClickHouse/ClickHouse/pull/76651) ([Bharat Nallan](https://github.com/bharatnc)). +* Отменено изменение, из-за которого пропускался кэш индексов. [#77447](https://github.com/ClickHouse/ClickHouse/pull/77447) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). -#### Новая возможность +#### Новая функция -* Тип данных `JSON` готов к промышленной эксплуатации. См. [https://jsonbench.com/](https://jsonbench.com/). Типы данных `Dynamic` и `Variant` готовы к промышленной эксплуатации. [#77785](https://github.com/ClickHouse/ClickHouse/pull/77785) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Добавлена поддержка протокола SSH для clickhouse-server. Теперь к ClickHouse можно подключаться с помощью любого SSH-клиента. Тем самым закрывается задача: [#74340](https://github.com/ClickHouse/ClickHouse/issues/74340). [#74989](https://github.com/ClickHouse/ClickHouse/pull/74989) ([George Gamezardashvili](https://github.com/Infjoker)). -* Заменяет табличные функции их вариантами -Cluster, если задействованы параллельные реплики. Исправляет [#65024](https://github.com/ClickHouse/ClickHouse/issues/65024). [#70659](https://github.com/ClickHouse/ClickHouse/pull/70659) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* Новая реализация Userspace Page Cache, которая позволяет кэшировать данные в памяти процесса вместо использования кэша страниц ОС, что полезно, когда данные хранятся на удалённой виртуальной файловой системе без локального файлового кэша. [#70509](https://github.com/ClickHouse/ClickHouse/pull/70509) ([Michael Kolupaev](https://github.com/al13n321)). -* Добавлен серверный параметр `concurrent_threads_scheduler`, управляющий распределением слотов CPU между одновременными запросами. Может принимать значения `round_robin` (предыдущее поведение) или `fair_round_robin`, чтобы устранить проблему несправедливого распределения CPU между запросами INSERT и SELECT. [#75949](https://github.com/ClickHouse/ClickHouse/pull/75949) ([Sergei Trifonov](https://github.com/serxa)). +* Тип данных `JSON` готов для промышленной эксплуатации. См. [https://jsonbench.com/](https://jsonbench.com/). Типы данных `Dynamic` и `Variant` также готовы для промышленной эксплуатации. [#77785](https://github.com/ClickHouse/ClickHouse/pull/77785) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Появилась поддержка протокола SSH для clickhouse-server. Теперь можно подключаться к ClickHouse с помощью любого SSH‑клиента. Закрывает: [#74340](https://github.com/ClickHouse/ClickHouse/issues/74340). [#74989](https://github.com/ClickHouse/ClickHouse/pull/74989) ([George Gamezardashvili](https://github.com/Infjoker)). +* Заменяет табличные функции на их версии с суффиксом -Cluster, если включены параллельные реплики. Исправляет [#65024](https://github.com/ClickHouse/ClickHouse/issues/65024). [#70659](https://github.com/ClickHouse/ClickHouse/pull/70659) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* Новая реализация кэша страниц в пространстве пользователя (Userspace Page Cache), которая позволяет кэшировать данные в памяти процесса вместо использования кэша страниц ОС, что полезно, когда данные хранятся на удалённой виртуальной файловой системе без опоры на локальный файловый кэш. [#70509](https://github.com/ClickHouse/ClickHouse/pull/70509) ([Michael Kolupaev](https://github.com/al13n321)). +* Добавлена настройка сервера `concurrent_threads_scheduler`, которая управляет распределением CPU-слотов между одновременными запросами. Может принимать значения `round_robin` (предыдущее поведение) или `fair_round_robin` для устранения проблемы несправедливого распределения CPU между INSERT и SELECT. [#75949](https://github.com/ClickHouse/ClickHouse/pull/75949) ([Sergei Trifonov](https://github.com/serxa)). * Добавлена агрегатная функция `estimateCompressionRatio` [#70801](https://github.com/ClickHouse/ClickHouse/issues/70801). [#76661](https://github.com/ClickHouse/ClickHouse/pull/76661) ([Tariq Almawash](https://github.com/talmawash)). -* Добавлена функция `arraySymmetricDifference`. Она возвращает все элементы из нескольких массивов-аргументов, которые не содержатся во всех массивах одновременно. Пример: `SELECT arraySymmetricDifference([1, 2], [2, 3])` возвращает `[1, 3]`. (issue [#61673](https://github.com/ClickHouse/ClickHouse/issues/61673)). [#76231](https://github.com/ClickHouse/ClickHouse/pull/76231) ([Filipp Abapolov](https://github.com/pheepa)). -* Добавлена возможность явно указывать файл метаданных для чтения Iceberg с помощью настройки функции хранилища/таблицы `iceberg_metadata_file_path`. Исправляет [#47412](https://github.com/ClickHouse/ClickHouse/issues/47412). [#77318](https://github.com/ClickHouse/ClickHouse/pull/77318) ([alesapin](https://github.com/alesapin)). +* Добавлена функция `arraySymmetricDifference`. Она возвращает все элементы из нескольких массивов, переданных в качестве аргументов, которые не встречаются во всех аргументах одновременно. Пример: `SELECT arraySymmetricDifference([1, 2], [2, 3])` возвращает `[1, 3]`. (issue [#61673](https://github.com/ClickHouse/ClickHouse/issues/61673)). [#76231](https://github.com/ClickHouse/ClickHouse/pull/76231) ([Filipp Abapolov](https://github.com/pheepa)). +* Добавлена возможность явно указывать файл метаданных для чтения таблиц Iceberg с помощью настройки функции хранилища/табличной функции `iceberg_metadata_file_path`. Исправляет [#47412](https://github.com/ClickHouse/ClickHouse/issues/47412). [#77318](https://github.com/ClickHouse/ClickHouse/pull/77318) ([alesapin](https://github.com/alesapin)). * Добавлена хеш-функция `keccak256`, широко используемая в блокчейн-реализациях, особенно в системах на базе EVM. [#76669](https://github.com/ClickHouse/ClickHouse/pull/76669) ([Arnaud Briche](https://github.com/arnaudbriche)). -* Добавлены три новые функции: `icebergTruncate` в соответствии со спецификацией ([https://iceberg.apache.org/spec/#truncate-transform-details](https://iceberg.apache.org/spec/#truncate-transform-details)), `toYearNumSinceEpoch` и `toMonthNumSinceEpoch`. Добавлена поддержка трансформации `truncate` при отсечении партиций для движка `Iceberg`. [#77403](https://github.com/ClickHouse/ClickHouse/pull/77403) ([alesapin](https://github.com/alesapin)). -* Добавлена поддержка типов данных `LowCardinality(Decimal)` [#72256](https://github.com/ClickHouse/ClickHouse/issues/72256). [#72833](https://github.com/ClickHouse/ClickHouse/pull/72833) ([zhanglistar](https://github.com/zhanglistar)). -* События профилирования `FilterTransformPassedRows` и `FilterTransformPassedBytes` отображают количество строк и байт, отфильтрованных во время выполнения запроса. [#76662](https://github.com/ClickHouse/ClickHouse/pull/76662) ([Onkar Deshpande](https://github.com/onkar)). -* Поддержка типа метрик histogram. Интерфейс во многом повторяет клиент Prometheus: вы просто вызываете `observe(value)`, чтобы увеличить счётчик в бакете, соответствующем значению. Метрики типа histogram доступны через `system.histogram_metrics`. [#75736](https://github.com/ClickHouse/ClickHouse/pull/75736) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). -* Поддержка неконстантного `CASE` для переключения по заданным значениям. [#77399](https://github.com/ClickHouse/ClickHouse/pull/77399) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). - - +* Добавлены три новые функции: `icebergTruncate` в соответствии со спецификацией [https://iceberg.apache.org/spec/#truncate-transform-details](https://iceberg.apache.org/spec/#truncate-transform-details), `toYearNumSinceEpoch` и `toMonthNumSinceEpoch`. Добавлена поддержка преобразования `truncate` при отсечении партиций для движка `Iceberg`. [#77403](https://github.com/ClickHouse/ClickHouse/pull/77403) ([alesapin](https://github.com/alesapin)). +* Добавлена поддержка типа данных `LowCardinality(Decimal)` [#72256](https://github.com/ClickHouse/ClickHouse/issues/72256). [#72833](https://github.com/ClickHouse/ClickHouse/pull/72833) ([zhanglistar](https://github.com/zhanglistar)). +* Профилирующие события `FilterTransformPassedRows` и `FilterTransformPassedBytes` будут показывать количество строк и объём данных в байтах, отфильтрованных во время выполнения запроса. [#76662](https://github.com/ClickHouse/ClickHouse/pull/76662) ([Onkar Deshpande](https://github.com/onkar)). +* Поддержка метрик типа «гистограмма». Интерфейс во многом повторяет клиент Prometheus: вы просто вызываете `observe(value)`, чтобы увеличить счётчик в бакете, соответствующем значению. Метрики-гистограммы доступны через `system.histogram_metrics`. [#75736](https://github.com/ClickHouse/ClickHouse/pull/75736) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). +* Поддержка неконстантного оператора CASE для переключения по явным значениям. [#77399](https://github.com/ClickHouse/ClickHouse/pull/77399) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). #### Экспериментальная функциональность -* Добавлена поддержка [Unity Catalog](https://www.databricks.com/product/unity-catalog) для таблиц Delta Lake поверх AWS S3 и локальной файловой системы. [#76988](https://github.com/ClickHouse/ClickHouse/pull/76988) ([alesapin](https://github.com/alesapin)). -* Представлена экспериментальная интеграция с каталогом данных службы AWS Glue для таблиц Iceberg. [#77257](https://github.com/ClickHouse/ClickHouse/pull/77257) ([alesapin](https://github.com/alesapin)). -* Добавлена поддержка динамического автообнаружения кластеров. Это расширяет существующую функцию автообнаружения _узлов_. ClickHouse теперь может автоматически обнаруживать и регистрировать новые _кластеры_ по общему пути в ZooKeeper с использованием ``. [#76001](https://github.com/ClickHouse/ClickHouse/pull/76001) ([Anton Ivashkin](https://github.com/ianton-ru)). -* Добавлена возможность автоматической очистки слияний (merge) целых партиций по истечении настраиваемого тайм-аута с помощью новой настройки `enable_replacing_merge_with_cleanup_for_min_age_to_force_merge`. [#76440](https://github.com/ClickHouse/ClickHouse/pull/76440) ([Christoph Wurm](https://github.com/cwurm)). - +* Добавлена поддержка [Unity Catalog](https://www.databricks.com/product/unity-catalog) для таблиц Delta Lake поверх AWS S3 и локальной файловой системы. [#76988](https://github.com/ClickHouse/ClickHouse/pull/76988) ([alesapin](https://github.com/alesapin)). +* Представлена экспериментальная интеграция с каталогом данных (Data Catalog) сервиса AWS Glue для таблиц Iceberg. [#77257](https://github.com/ClickHouse/ClickHouse/pull/77257) ([alesapin](https://github.com/alesapin)). +* Добавлена поддержка динамического автообнаружения кластеров. Это расширяет существующую функциональность автообнаружения _узлов_. Теперь ClickHouse может автоматически обнаруживать и регистрировать новые _кластеры_ под общим путем в ZooKeeper, используя ``. [#76001](https://github.com/ClickHouse/ClickHouse/pull/76001) ([Anton Ivashkin](https://github.com/ianton-ru)). +* Добавлена возможность автоматической очистки слияниями целых партиций по истечении настраиваемого тайм-аута с помощью нового параметра `enable_replacing_merge_with_cleanup_for_min_age_to_force_merge`. [#76440](https://github.com/ClickHouse/ClickHouse/pull/76440) ([Christoph Wurm](https://github.com/cwurm)). #### Повышение производительности -* Реализован кэш условий запроса для повышения производительности запросов с повторяющимися условиями. Диапазон участка данных, не удовлетворяющего условию, запоминается как временный индекс в памяти. Последующие запросы используют этот индекс. Закрыты [#67768](https://github.com/ClickHouse/ClickHouse/issues/67768) [#69236](https://github.com/ClickHouse/ClickHouse/pull/69236) ([zhongyuankai](https://github.com/zhongyuankai)). -* Данные теперь активно удаляются из кэша при удалении частей. Кэш больше не растёт до максимального размера, если объём данных меньше. [#76641](https://github.com/ClickHouse/ClickHouse/pull/76641) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* `Int256` и `UInt256` в арифметических вычислениях заменены на встроенный в clang тип `i256`, что даёт прирост производительности [#70502](https://github.com/ClickHouse/ClickHouse/issues/70502). [#73658](https://github.com/ClickHouse/ClickHouse/pull/73658) ([李扬](https://github.com/taiyang-li)). -* В некоторых случаях (например, пустой столбец-массив) части данных могут содержать пустые файлы. Теперь можно пропускать запись пустых блобов в ObjectStorage и хранить только метаданные для таких файлов, когда таблица размещена на диске с раздельным хранением метаданных и объектов. [#75860](https://github.com/ClickHouse/ClickHouse/pull/75860) ([Alexander Gololobov](https://github.com/davenger)). -* Улучшена производительность `min/max` для `Decimal32`/`Decimal64`/`DateTime64`. [#76570](https://github.com/ClickHouse/ClickHouse/pull/76570) ([李扬](https://github.com/taiyang-li)). -* Компиляция запросов (настройка `compile_expressions`) теперь учитывает тип машины, что значительно ускоряет такие запросы. [#76753](https://github.com/ClickHouse/ClickHouse/pull/76753) ([ZhangLiStar](https://github.com/zhanglistar)). -* Оптимизирован `arraySort`. [#76850](https://github.com/ClickHouse/ClickHouse/pull/76850) ([李扬](https://github.com/taiyang-li)). -* Настройка `filesystem_cache_prefer_bigger_buffer_size` отключена, когда кэш используется пассивно, например при слияниях. [#77898](https://github.com/ClickHouse/ClickHouse/pull/77898) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Атрибут `preserve_most` применён в ряде мест кода, что позволяет немного улучшить генерацию кода. [#67778](https://github.com/ClickHouse/ClickHouse/pull/67778) ([Nikita Taranov](https://github.com/nickitat)). -* Ускорено завершение работы серверов ClickHouse (убрана задержка 2,5 секунды). [#76550](https://github.com/ClickHouse/ClickHouse/pull/76550) ([Azat Khuzhin](https://github.com/azat)). -* Избегаются лишние аллокации в `ReadBufferFromS3` и других буферах для удалённого чтения, их потребление памяти снижено вдвое. [#76692](https://github.com/ClickHouse/ClickHouse/pull/76692) ([Sema Checherinda](https://github.com/CheSema)). -* Обновлён `zstd` с 1.5.5 до 1.5.7, что может привести к некоторым [улучшениям производительности](https://github.com/facebook/zstd/releases/tag/v1.5.7). [#77137](https://github.com/ClickHouse/ClickHouse/pull/77137) ([Pradeep Chhetri](https://github.com/chhetripradeep)). -* Снижено потребление памяти при предзагрузке столбца JSON в частях формата Wide. Это актуально, когда ClickHouse используется поверх разделяемого хранилища, например в ClickHouse Cloud. [#77640](https://github.com/ClickHouse/ClickHouse/pull/77640) ([Pavel Kruglov](https://github.com/Avogar)). - +* Реализован кэш условий запроса для улучшения производительности запросов с повторяющимися условиями. Диапазон области данных, не удовлетворяющей условию, запоминается в памяти как временный индекс. Последующие запросы используют этот индекс. Закрыты [#67768](https://github.com/ClickHouse/ClickHouse/issues/67768) [#69236](https://github.com/ClickHouse/ClickHouse/pull/69236) ([zhongyuankai](https://github.com/zhongyuankai)). +* Активное удаление данных из кэша при удалении кусков данных. Не допускать роста кэша до максимального размера, если объём данных меньше. [#76641](https://github.com/ClickHouse/ClickHouse/pull/76641) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Заменены Int256 и UInt256 на встроенный тип clang i256 в арифметических вычислениях, что даёт прирост производительности [#70502](https://github.com/ClickHouse/ClickHouse/issues/70502). [#73658](https://github.com/ClickHouse/ClickHouse/pull/73658) ([李扬](https://github.com/taiyang-li)). +* В некоторых случаях (например, пустой столбец-массив) части данных могут содержать пустые файлы. Можно пропускать запись пустых blob-объектов в ObjectStorage и хранить только метаданные для таких файлов, когда таблица размещена на диске с раздельным хранением метаданных и объектов. [#75860](https://github.com/ClickHouse/ClickHouse/pull/75860) ([Alexander Gololobov](https://github.com/davenger)). +* Улучшена производительность вычислений min/max для Decimal32/Decimal64/DateTime64. [#76570](https://github.com/ClickHouse/ClickHouse/pull/76570) ([李扬](https://github.com/taiyang-li)). +* Компиляция запросов (параметр `compile_expressions`) теперь учитывает тип машины. Это существенно ускоряет такие запросы. [#76753](https://github.com/ClickHouse/ClickHouse/pull/76753) ([ZhangLiStar](https://github.com/zhanglistar)). +* Оптимизирован `arraySort`. [#76850](https://github.com/ClickHouse/ClickHouse/pull/76850) ([李扬](https://github.com/taiyang-li)). +* Отключён `filesystem_cache_prefer_bigger_buffer_size`, когда кэш используется пассивно, например при слияниях. [#77898](https://github.com/ClickHouse/ClickHouse/pull/77898) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Атрибут `preserve_most` применён в ряде мест в коде, что позволяет немного улучшить генерацию кода. [#67778](https://github.com/ClickHouse/ClickHouse/pull/67778) ([Nikita Taranov](https://github.com/nickitat)). +* Ускорено завершение работы серверов ClickHouse (убрана задержка 2.5 секунды). [#76550](https://github.com/ClickHouse/ClickHouse/pull/76550) ([Azat Khuzhin](https://github.com/azat)). +* Исключено избыточное выделение памяти в ReadBufferFromS3 и других буферах удалённого чтения, их потребление памяти уменьшено вдвое. [#76692](https://github.com/ClickHouse/ClickHouse/pull/76692) ([Sema Checherinda](https://github.com/CheSema)). +* Обновлён zstd с версии 1.5.5 до 1.5.7, что может привести к [улучшению производительности](https://github.com/facebook/zstd/releases/tag/v1.5.7). [#77137](https://github.com/ClickHouse/ClickHouse/pull/77137) ([Pradeep Chhetri](https://github.com/chhetripradeep)). +* Снижено потребление памяти при предварительной подзагрузке JSON-столбца в Wide-частях. Актуально, когда ClickHouse используется поверх разделяемого хранилища, например в ClickHouse Cloud. [#77640](https://github.com/ClickHouse/ClickHouse/pull/77640) ([Pavel Kruglov](https://github.com/Avogar)). + +#### Улучшения + +* Добавлена поддержка атомарного переименования при использовании `TRUNCATE` с `INTO OUTFILE`. Исправлена проблема [#70323](https://github.com/ClickHouse/ClickHouse/issues/70323). [#77181](https://github.com/ClickHouse/ClickHouse/pull/77181) ([Onkar Deshpande](https://github.com/onkar)). +* Больше нельзя использовать `NaN` или `inf` в качестве значений параметров с плавающей запятой. Впрочем, раньше в этом всё равно не было никакого смысла. [#77546](https://github.com/ClickHouse/ClickHouse/pull/77546) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* Параллельные реплики теперь по умолчанию отключаются, если analyzer отключен, независимо от настройки `compatibility`. Это поведение по-прежнему можно изменить, явно установив `parallel_replicas_only_with_analyzer` в `false`. [#77115](https://github.com/ClickHouse/ClickHouse/pull/77115) ([Igor Nikonov](https://github.com/devcrafter)). +* Добавлена возможность задавать список заголовков, которые передаются из заголовков клиентского запроса во внешний HTTP-аутентификатор. [#77054](https://github.com/ClickHouse/ClickHouse/pull/77054) ([inv2004](https://github.com/inv2004)). +* Учитывать регистронезависимое сопоставление имён столбцов для полей в столбцах-кортежах. Закрывает [https://github.com/apache/incubator-gluten/issues/8324](https://github.com/apache/incubator-gluten/issues/8324). [#73780](https://github.com/ClickHouse/ClickHouse/pull/73780) ([李扬](https://github.com/taiyang-li)). +* Параметры кодека Gorilla теперь всегда будут сохраняться в метаданных таблицы в файле .sql. Это исправляет: [#70072](https://github.com/ClickHouse/ClickHouse/issues/70072). [#74814](https://github.com/ClickHouse/ClickHouse/pull/74814) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). +* Реализованы улучшения парсинга для некоторых озёр данных (парсинг Sequence ID: добавлена возможность разбора идентификаторов последовательностей в манифест-файлах и парсинг метаданных Avro: переработан парсер метаданных Avro, чтобы его было проще расширять в будущем). [#75010](https://github.com/ClickHouse/ClickHouse/pull/75010) ([Daniil Ivanik](https://github.com/divanik)). +* `trace_id` убран из ORDER BY по умолчанию для `system.opentelemetry_span_log`. [#75907](https://github.com/ClickHouse/ClickHouse/pull/75907) ([Azat Khuzhin](https://github.com/azat)). +* Шифрование (атрибут `encrypted_by`) теперь может применяться к любому конфигурационному файлу (config.xml, users.xml, вложенные конфигурационные файлы). Ранее этот атрибут поддерживался только для файла config.xml верхнего уровня. [#75911](https://github.com/ClickHouse/ClickHouse/pull/75911) ([Mikhail Gorshkov](https://github.com/mgorshkov)). +* Улучшена таблица `system.warnings` и добавлены динамические сообщения-предупреждения, которые можно добавлять, обновлять или удалять. [#76029](https://github.com/ClickHouse/ClickHouse/pull/76029) ([Bharat Nallan](https://github.com/bharatnc)). +* Этот PR делает невозможным выполнение запроса `ALTER USER user1 ADD PROFILES a, DROP ALL PROFILES`, поскольку все операции `DROP` должны располагаться в запросе первыми. [#76242](https://github.com/ClickHouse/ClickHouse/pull/76242) ([pufit](https://github.com/pufit)). +* Различные улучшения механизма SYNC REPLICA (более информативные сообщения об ошибках, улучшенные тесты, проверки корректности). [#76307](https://github.com/ClickHouse/ClickHouse/pull/76307) ([Azat Khuzhin](https://github.com/azat)). +* Используется корректный резервный механизм при ошибке Access Denied во время многочастного копирования в S3 при создании резервной копии. Многочастное копирование может приводить к ошибке Access Denied, когда резервное копирование выполняется между бакетами с разными учетными данными. [#76515](https://github.com/ClickHouse/ClickHouse/pull/76515) ([Antonio Andelic](https://github.com/antonio2368)). +* Обновлена librdkafka (которая представляет собой кучу мусора) до версии 2.8.0 (куча от этого лучше не стала) и улучшена процедура завершения работы для таблиц Kafka, что сократило задержки при удалении таблиц и перезапуске сервера. `engine=Kafka` больше не выходит из группы потребителей (consumer group) при удалении таблицы. Вместо этого потребитель остаётся в группе, пока не будет автоматически удалён после `session_timeout_ms` (по умолчанию: 45 секунд) бездействия. [#76621](https://github.com/ClickHouse/ClickHouse/pull/76621) ([filimonov](https://github.com/filimonov)). +* Исправлена валидация настроек запросов к S3. [#76658](https://github.com/ClickHouse/ClickHouse/pull/76658) ([Vitaly Baranov](https://github.com/vitlibar)). +* Системные таблицы, такие как `server_settings` или `settings`, имеют столбец значений по умолчанию `default`, что удобно. Теперь такой столбец есть и в `merge_tree_settings` и `replicated_merge_tree_settings`. [#76942](https://github.com/ClickHouse/ClickHouse/pull/76942) ([Diego Nieto](https://github.com/lesandie)). +* Добавлен `ProfileEvents::QueryPreempted` с логикой, аналогичной `CurrentMetrics::QueryPreempted`. [#77015](https://github.com/ClickHouse/ClickHouse/pull/77015) ([VicoWu](https://github.com/VicoWu)). +* Ранее база данных Replicated могла выводить в логи учетные данные, указанные в запросе. Это поведение исправлено. Этим исправлением закрыт тикет: [#77123](https://github.com/ClickHouse/ClickHouse/issues/77123). [#77133](https://github.com/ClickHouse/ClickHouse/pull/77133) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). +* Разрешён `ALTER TABLE DROP PARTITION` для диска `plain_rewritable`. [#77138](https://github.com/ClickHouse/ClickHouse/pull/77138) ([Julia Kartseva](https://github.com/jkartseva)). +* Параметр резервного копирования/восстановления `allow_s3_native_copy` теперь поддерживает три возможных значения: - `False` — S3 native copy использоваться не будет; - `True` (старое значение по умолчанию) — ClickHouse сначала попытается использовать S3 native copy, а при неудаче переключится на подход с чтением и записью; - `'auto'` (новое значение по умолчанию) — ClickHouse сначала сравнит учетные данные источника и приемника. Если они совпадают, ClickHouse попытается использовать S3 native copy и затем при необходимости может переключиться на подход с чтением и записью. Если они различаются, ClickHouse сразу перейдет к подходу с чтением и записью. [#77401](https://github.com/ClickHouse/ClickHouse/pull/77401) ([Vitaly Baranov](https://github.com/vitlibar)). +* Добавлена поддержка использования AWS session token и учетных данных, полученных из переменных окружения, в delta kernel для движка таблиц DeltaLake. [#77661](https://github.com/ClickHouse/ClickHouse/pull/77661) ([Kseniia Sumarokova](https://github.com/kssenii)). -#### Улучшение +#### Исправление ошибки (некорректное поведение, заметное пользователю, в официальном стабильном релизе) -* Добавлена поддержка атомарного переименования при использовании `TRUNCATE` с `INTO OUTFILE`. Решает [#70323](https://github.com/ClickHouse/ClickHouse/issues/70323). [#77181](https://github.com/ClickHouse/ClickHouse/pull/77181) ([Onkar Deshpande](https://github.com/onkar)). -* Больше нельзя использовать `NaN` или `inf` в качестве значений типа float для настроек. Да и раньше в этом не было особого смысла. [#77546](https://github.com/ClickHouse/ClickHouse/pull/77546) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* Теперь параллельные реплики по умолчанию отключены, когда analyzer выключен, независимо от настройки `compatibility`. При необходимости это поведение можно изменить, явно установив `parallel_replicas_only_with_analyzer` в значение `false`. [#77115](https://github.com/ClickHouse/ClickHouse/pull/77115) ([Igor Nikonov](https://github.com/devcrafter)). -* Добавлена возможность определять список заголовков, которые будут пересылаться из заголовков клиентского запроса во внешний HTTP-аутентификатор. [#77054](https://github.com/ClickHouse/ClickHouse/pull/77054) ([inv2004](https://github.com/inv2004)). -* Учитывать регистронезависимое сопоставление столбцов для полей в столбцах-кортежах. Закрыта задача [https://github.com/apache/incubator-gluten/issues/8324](https://github.com/apache/incubator-gluten/issues/8324). [#73780](https://github.com/ClickHouse/ClickHouse/pull/73780) ([李扬](https://github.com/taiyang-li)). -* Параметры кодека Gorilla теперь всегда будут сохраняться в метаданных таблицы в .sql-файле. Это закрывает: [#70072](https://github.com/ClickHouse/ClickHouse/issues/70072). [#74814](https://github.com/ClickHouse/ClickHouse/pull/74814) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). -* Реализованы улучшения парсинга для некоторых озёр данных (парсинг Sequence ID: добавлена возможность разбора идентификаторов последовательностей в manifest-файлах и парсинг метаданных Avro: переработан парсер метаданных Avro, чтобы его было легко расширять для будущих улучшений). [#75010](https://github.com/ClickHouse/ClickHouse/pull/75010) ([Daniil Ivanik](https://github.com/divanik)). -* Из ORDER BY по умолчанию для `system.opentelemetry_span_log` удалён столбец `trace_id`. [#75907](https://github.com/ClickHouse/ClickHouse/pull/75907) ([Azat Khuzhin](https://github.com/azat)). -* Шифрование (атрибут `encrypted_by`) теперь может применяться к любому конфигурационному файлу (config.xml, users.xml, вложенные файлы конфигурации). Ранее оно работало только для корневого файла config.xml. [#75911](https://github.com/ClickHouse/ClickHouse/pull/75911) ([Mikhail Gorshkov](https://github.com/mgorshkov)). -* Улучшена таблица `system.warnings` и добавлены динамические сообщения о предупреждениях, которые можно добавлять, обновлять или удалять. [#76029](https://github.com/ClickHouse/ClickHouse/pull/76029) ([Bharat Nallan](https://github.com/bharatnc)). -* Этот PR предотвращает выполнение запроса `ALTER USER user1 ADD PROFILES a, DROP ALL PROFILES`, потому что все операции `DROP` должны идти первыми по порядку. [#76242](https://github.com/ClickHouse/ClickHouse/pull/76242) ([pufit](https://github.com/pufit)). -* Различные доработки для SYNC REPLICA (более информативные сообщения об ошибках, улучшенные тесты, проверки корректности). [#76307](https://github.com/ClickHouse/ClickHouse/pull/76307) ([Azat Khuzhin](https://github.com/azat)). -* Использовать корректный резервный вариант, когда multipart‑копирование в S3 завершается с ошибкой Access Denied во время резервного копирования. Многокомпонентное (multipart) копирование может приводить к ошибке Access Denied, когда резервное копирование выполняется между бакетами с разными учетными данными доступа. [#76515](https://github.com/ClickHouse/ClickHouse/pull/76515) ([Antonio Andelic](https://github.com/antonio2368)). -* Обновлена librdkafka (которая представляет собой кучу дерьма) до версии 2.8.0 (этот хлам лучше от этого не становится) и улучшена процедура завершения работы для таблиц Kafka, что сократило задержки при удалении таблиц и перезапусках сервера. `engine=Kafka` больше не выходит из consumer group явно при удалении таблицы. Вместо этого consumer остаётся в группе, пока не будет автоматически удалён после `session_timeout_ms` (по умолчанию: 45 секунд) бездействия. [#76621](https://github.com/ClickHouse/ClickHouse/pull/76621) ([filimonov](https://github.com/filimonov)). -* Исправлена проверка параметров запросов к S3. [#76658](https://github.com/ClickHouse/ClickHouse/pull/76658) ([Vitaly Baranov](https://github.com/vitlibar)). -* Системные таблицы, такие как `server_settings` или `settings`, имеют столбец `default`, что удобно. В `merge_tree_settings` и `replicated_merge_tree_settings` также добавлен такой столбец. [#76942](https://github.com/ClickHouse/ClickHouse/pull/76942) ([Diego Nieto](https://github.com/lesandie)). -* Добавлен `ProfileEvents::QueryPreempted`, логика которого аналогична `CurrentMetrics::QueryPreempted`. [#77015](https://github.com/ClickHouse/ClickHouse/pull/77015) ([VicoWu](https://github.com/VicoWu)). -* Ранее реплицируемая база данных могла записывать в логи учетные данные, указанные в запросе. Это поведение исправлено. Исправлено в: [#77123](https://github.com/ClickHouse/ClickHouse/issues/77123). [#77133](https://github.com/ClickHouse/ClickHouse/pull/77133) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). -* Разрешён ALTER TABLE DROP PARTITION для диска `plain_rewritable`. [#77138](https://github.com/ClickHouse/ClickHouse/pull/77138) ([Julia Kartseva](https://github.com/jkartseva)). -* Настройка резервного копирования/восстановления `allow_s3_native_copy` теперь поддерживает три возможных значения: - `False` — S3 native copy не будет использоваться; - `True` (старое значение по умолчанию) — ClickHouse сначала попытается использовать S3 native copy, а в случае ошибки переключится на подход с чтением и записью; - `'auto'` (новое значение по умолчанию) — ClickHouse сначала сравнит учетные данные источника и назначения. Если они совпадают, ClickHouse попробует S3 native copy и затем при необходимости может переключиться на подход с чтением и записью. Если они различаются, ClickHouse сразу перейдет к подходу с чтением и записью. [#77401](https://github.com/ClickHouse/ClickHouse/pull/77401) ([Vitaly Baranov](https://github.com/vitlibar)). -* Добавлена поддержка использования сеансового токена AWS и учётных данных из переменных окружения в ядре Delta для движка таблиц DeltaLake. [#77661](https://github.com/ClickHouse/ClickHouse/pull/77661) ([Kseniia Sumarokova](https://github.com/kssenii)). - - - - - -#### Исправление ошибки (видимая пользователю неисправность в официальном стабильном релизе) - -* Исправлено зависание при обработке отложенного пакета для асинхронного распределённого INSERT (например, из‑за `No such file or directory`). [#72939](https://github.com/ClickHouse/ClickHouse/pull/72939) ([Azat Khuzhin](https://github.com/azat)). -* Улучшено преобразование DateTime во время анализа индексов за счет принудительного поведения с насыщением для неявных преобразований Date в DateTime. Это устраняет возможные неточности анализа индексов, вызванные ограничениями диапазона значений DateTime. Исправлена проблема [#73307](https://github.com/ClickHouse/ClickHouse/issues/73307). Также исправлено явное преобразование `toDateTime`, когда `date_time_overflow_behavior = 'ignore'`, что является значением по умолчанию. [#73326](https://github.com/ClickHouse/ClickHouse/pull/73326) ([Amos Bird](https://github.com/amosbird)). -* Исправлены различные ошибки, возникающие из‑за гонки между UUID и именами таблиц (например, устраняется гонка между `RENAME` и `RESTART REPLICA`: в случае одновременного выполнения `RENAME` с `SYSTEM RESTART REPLICA` в итоге можно перезапустить не ту реплику и/или оставить одну из таблиц в состоянии `Table X is being restarted`). [#76308](https://github.com/ClickHouse/ClickHouse/pull/76308) ([Azat Khuzhin](https://github.com/azat)). -* Исправлена потеря данных при включённом async insert и выполнении insert into ... from file ... с неравным размером блоков: если размер первого блока < async_max_size, а второго блока > async_max_size, второй блок не вставлялся. В результате эти данные оставались в состоянии `squashing`. [#76343](https://github.com/ClickHouse/ClickHouse/pull/76343) ([Han Fei](https://github.com/hanfei1991)). +* Исправлена блокировка при обработке отложенной пачки данных для асинхронного распределённого INSERT (например, из‑за ошибки `No such file or directory`). [#72939](https://github.com/ClickHouse/ClickHouse/pull/72939) ([Azat Khuzhin](https://github.com/azat)). +* Улучшено преобразование DateTime при анализе индексов за счёт принудительного использования насыщающего поведения для неявных преобразований Date в DateTime. Это устраняет возможные неточности анализа индексов, вызванные ограничениями диапазона DateTime. Исправлена [#73307](https://github.com/ClickHouse/ClickHouse/issues/73307). Также исправлено явное преобразование `toDateTime`, когда `date_time_overflow_behavior = 'ignore'`, что является значением по умолчанию. [#73326](https://github.com/ClickHouse/ClickHouse/pull/73326) ([Amos Bird](https://github.com/amosbird)). +* Исправлены различные ошибки, возникавшие из‑за гонок между UUID и именами таблиц (например, устранена гонка между `RENAME` и `RESTART REPLICA`: при одновременном выполнении `RENAME` и `SYSTEM RESTART REPLICA` можно было в итоге перезапустить не ту реплику и/или оставить одну из таблиц в состоянии `Table X is being restarted`). [#76308](https://github.com/ClickHouse/ClickHouse/pull/76308) ([Azat Khuzhin](https://github.com/azat)). +* Исправлена потеря данных при включённой асинхронной вставке (async insert) и выполнении команды insert into ... from file ... с разным размером блоков: если размер первого блока < async_max_size, а второго блока > async_max_size, то второй блок не вставлялся. Эти данные оставались в `squashing`. [#76343](https://github.com/ClickHouse/ClickHouse/pull/76343) ([Han Fei](https://github.com/hanfei1991)). * Поле 'marks' переименовано в 'marks_bytes' в `system.data_skipping_indices`. [#76374](https://github.com/ClickHouse/ClickHouse/pull/76374) ([Robert Schulze](https://github.com/rschu1ze)). -* Исправлена обработка динамического изменения размера кэша файловой системы при неожиданных ошибках во время вытеснения данных из кэша. [#76466](https://github.com/ClickHouse/ClickHouse/pull/76466) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Исправлена инициализация `used_flag` в параллельной хеш-таблице. Это могло приводить к сбою сервера. [#76580](https://github.com/ClickHouse/ClickHouse/pull/76580) ([Nikita Taranov](https://github.com/nickitat)). +* Исправлена обработка неожиданных ошибок при изменении размера динамического кэша файловой системы во время вытеснения. [#76466](https://github.com/ClickHouse/ClickHouse/pull/76466) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Исправлена инициализация `used_flag` в параллельном хеше. Это могло приводить к падению сервера. [#76580](https://github.com/ClickHouse/ClickHouse/pull/76580) ([Nikita Taranov](https://github.com/nickitat)). * Исправлена логическая ошибка при вызове функции `defaultProfiles` внутри проекции. [#76627](https://github.com/ClickHouse/ClickHouse/pull/76627) ([pufit](https://github.com/pufit)). -* Не запрашивать интерактивную базовую аутентификацию в браузере при работе с Web UI. Закрывает [#76319](https://github.com/ClickHouse/ClickHouse/issues/76319). [#76637](https://github.com/ClickHouse/ClickHouse/pull/76637) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Исправлено исключение THERE_IS_NO_COLUMN при выборке булевого литерала из распределённых таблиц. [#76656](https://github.com/ClickHouse/ClickHouse/pull/76656) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* Подкаталог внутри каталога таблицы теперь выбирается более продуманным образом. [#76681](https://github.com/ClickHouse/ClickHouse/pull/76681) ([Daniil Ivanik](https://github.com/divanik)). -* Исправлена ошибка `Not found column in block` после изменения таблицы с подколонкой в первичном ключе. После [https://github.com/ClickHouse/ClickHouse/pull/72644](https://github.com/ClickHouse/ClickHouse/pull/72644) требуется [https://github.com/ClickHouse/ClickHouse/pull/74403](https://github.com/ClickHouse/ClickHouse/pull/74403). [#76686](https://github.com/ClickHouse/ClickHouse/pull/76686) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). -* Добавить тесты производительности для обработки NULL по принципу короткого замыкания и исправить ошибки. [#76708](https://github.com/ClickHouse/ClickHouse/pull/76708) ([李扬](https://github.com/taiyang-li)). -* Сбрасывать выходные буферы записи перед их финализацией. Исправлен `LOGICAL_ERROR`, возникавший при финализации некоторых форматов вывода, например `JSONEachRowWithProgressRowOutputFormat`. [#76726](https://github.com/ClickHouse/ClickHouse/pull/76726) ([Antonio Andelic](https://github.com/antonio2368)). -* Добавлена поддержка бинарного UUID MongoDB ([#74452](https://github.com/ClickHouse/ClickHouse/issues/74452)) - Исправлено проталкивание условия WHERE в MongoDB при использовании табличной функции ([#72210](https://github.com/ClickHouse/ClickHouse/issues/72210)) - Изменено сопоставление типов MongoDB → ClickHouse таким образом, что бинарный UUID MongoDB может интерпретироваться только как UUID ClickHouse. Это должно избежать двусмысленностей и неожиданных ситуаций в будущем. - Исправлено сопоставление OID с сохранением обратной совместимости. [#76762](https://github.com/ClickHouse/ClickHouse/pull/76762) ([Kirill Nikiforov](https://github.com/allmazz)). -* Исправлена обработка исключений при параллельной десериализации префиксов JSON-подстолбцов. [#76809](https://github.com/ClickHouse/ClickHouse/pull/76809) ([Pavel Kruglov](https://github.com/Avogar)). +* Не запрашивать интерактивную базовую аутентификацию в браузере для Web UI. Закрывает [#76319](https://github.com/ClickHouse/ClickHouse/issues/76319). [#76637](https://github.com/ClickHouse/ClickHouse/pull/76637) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Исправлено исключение THERE_IS_NO_COLUMN при выборке логического литерала из распределённых таблиц. [#76656](https://github.com/ClickHouse/ClickHouse/pull/76656) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* Вложенный путь в каталоге таблицы выбирается более рациональным образом. [#76681](https://github.com/ClickHouse/ClickHouse/pull/76681) ([Daniil Ivanik](https://github.com/divanik)). +* Исправлена ошибка `Not found column in block`, возникавшая после изменения таблицы, в которой подстолбец используется в первичном ключе. После [https://github.com/ClickHouse/ClickHouse/pull/72644](https://github.com/ClickHouse/ClickHouse/pull/72644) требуется [https://github.com/ClickHouse/ClickHouse/pull/74403](https://github.com/ClickHouse/ClickHouse/pull/74403). [#76686](https://github.com/ClickHouse/ClickHouse/pull/76686) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). +* Добавлены тесты производительности для короткого замыкания для `NULL` и исправлены ошибки. [#76708](https://github.com/ClickHouse/ClickHouse/pull/76708) ([李扬](https://github.com/taiyang-li)). +* Буферы записи вывода теперь сбрасываются перед их финализацией. Исправлено возникновение `LOGICAL_ERROR` во время финализации некоторых форматов вывода, например `JSONEachRowWithProgressRowOutputFormat`. [#76726](https://github.com/ClickHouse/ClickHouse/pull/76726) ([Antonio Andelic](https://github.com/antonio2368)). +* Добавлена поддержка двоичного UUID MongoDB ([#74452](https://github.com/ClickHouse/ClickHouse/issues/74452)) - Исправлено проталкивание условий WHERE в MongoDB при использовании табличной функции ([#72210](https://github.com/ClickHouse/ClickHouse/issues/72210)) - Изменено отображение типов MongoDB – ClickHouse таким образом, что двоичный UUID MongoDB может быть интерпретирован только как UUID ClickHouse. Это должно избежать двусмысленностей и неожиданных ситуаций в будущем. - Исправлено отображение OID с сохранением обратной совместимости. [#76762](https://github.com/ClickHouse/ClickHouse/pull/76762) ([Kirill Nikiforov](https://github.com/allmazz)). +* Исправлена обработка исключений при параллельной десериализации префиксов JSON-подколонок. [#76809](https://github.com/ClickHouse/ClickHouse/pull/76809) ([Pavel Kruglov](https://github.com/Avogar)). * Исправлено поведение функции lgamma для отрицательных целых чисел. [#76840](https://github.com/ClickHouse/ClickHouse/pull/76840) ([Ilya Kataev](https://github.com/IlyaKataev)). * Исправлен анализ обратного ключа для явно заданных первичных ключей. Аналогично [#76654](https://github.com/ClickHouse/ClickHouse/issues/76654). [#76846](https://github.com/ClickHouse/ClickHouse/pull/76846) ([Amos Bird](https://github.com/amosbird)). -* Исправлено красивое форматирование значений Bool в формате JSON. [#76905](https://github.com/ClickHouse/ClickHouse/pull/76905) ([Pavel Kruglov](https://github.com/Avogar)). -* Исправлено возможное аварийное завершение работы из-за некорректного отката JSON-столбца при ошибке во время асинхронной вставки данных. [#76908](https://github.com/ClickHouse/ClickHouse/pull/76908) ([Pavel Kruglov](https://github.com/Avogar)). -* Ранее `multiIf` мог возвращать разные типы столбцов на этапе планирования и во время основного выполнения. Это приводило к неопределённому поведению кода с точки зрения C++. [#76914](https://github.com/ClickHouse/ClickHouse/pull/76914) ([Nikita Taranov](https://github.com/nickitat)). -* Исправлена некорректная сериализация константных ключей Nullable в MergeTree. Тем самым исправлена [#76939](https://github.com/ClickHouse/ClickHouse/issues/76939). [#76985](https://github.com/ClickHouse/ClickHouse/pull/76985) ([Amos Bird](https://github.com/amosbird)). -* Исправлена сортировка значений `BFloat16`. Это исправление закрывает [#75487](https://github.com/ClickHouse/ClickHouse/issues/75487). Также закрывает [#75669](https://github.com/ClickHouse/ClickHouse/issues/75669). [#77000](https://github.com/ClickHouse/ClickHouse/pull/77000) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Исправлена ошибка в JSON с подколонкой Variant за счёт добавления проверки, пропускающей эфемерные подколонки при проверке целостности парта. [#72187](https://github.com/ClickHouse/ClickHouse/issues/72187). [#77034](https://github.com/ClickHouse/ClickHouse/pull/77034) ([Smita Kulkarni](https://github.com/SmitaRKulkarni)). -* Исправлена ошибка, приводившая к сбою при разборе шаблона формата Values в случае несовпадения типов. [#77071](https://github.com/ClickHouse/ClickHouse/pull/77071) ([Pavel Kruglov](https://github.com/Avogar)). -* Запрещено создавать таблицу EmbeddedRocksDB с подколонкой в первичном ключе. Ранее такую таблицу можно было создать, но запросы SELECT завершались с ошибкой. [#77074](https://github.com/ClickHouse/ClickHouse/pull/77074) ([Pavel Kruglov](https://github.com/Avogar)). -* Исправлено некорректное сравнение в распределённых запросах, поскольку при проталкивании предикатов на удалённые узлы не учитываются типы литералов. [#77093](https://github.com/ClickHouse/ClickHouse/pull/77093) ([Duc Canh Le](https://github.com/canhld94)). -* Исправлено падение при создании таблицы Kafka из-за исключения. [#77121](https://github.com/ClickHouse/ClickHouse/pull/77121) ([Pavel Kruglov](https://github.com/Avogar)). -* Поддержка JSON и подстолбцов в движках Kafka и RabbitMQ. [#77122](https://github.com/ClickHouse/ClickHouse/pull/77122) ([Pavel Kruglov](https://github.com/Avogar)). -* Исправлена раскрутка стека исключений в macOS. [#77126](https://github.com/ClickHouse/ClickHouse/pull/77126) ([Eduard Karacharov](https://github.com/korowa)). -* Исправлено чтение подстолбца 'null' функцией getSubcolumn. [#77163](https://github.com/ClickHouse/ClickHouse/pull/77163) ([Pavel Kruglov](https://github.com/Avogar)). -* Исправлена работа индекса фильтра Блума с Array и неподдерживаемыми функциями. [#77271](https://github.com/ClickHouse/ClickHouse/pull/77271) ([Pavel Kruglov](https://github.com/Avogar)). -* Проверять ограничение на число таблиц следует только при выполнении начального запроса CREATE. [#77274](https://github.com/ClickHouse/ClickHouse/pull/77274) ([Nikolay Degterinsky](https://github.com/evillique)). -* Это не ошибка: `SELECT toBFloat16(-0.0) == toBFloat16(0.0)` теперь корректно возвращает `true` (ранее — `false`). Это делает поведение согласованным с `Float32` и `Float64`. [#77290](https://github.com/ClickHouse/ClickHouse/pull/77290) ([Shankar Iyer](https://github.com/shankar-iyer)). -* Исправлена возможная некорректная ссылка на неинициализированную переменную key_index, которая может приводить к сбою в отладочных (debug) сборках (эта неинициализированная ссылка не вызывает проблем в релизных (release) сборках, потому что последующий код, скорее всего, приведёт к ошибке). ### запись в документации о пользовательских изменениях. [#77305](https://github.com/ClickHouse/ClickHouse/pull/77305) ([wxybear](https://github.com/wxybear)). -* Исправлено имя партиции с логическим значением (Bool). Ошибка была внесена в [https://github.com/ClickHouse/ClickHouse/pull/74533](https://github.com/ClickHouse/ClickHouse/pull/74533). [#77319](https://github.com/ClickHouse/ClickHouse/pull/77319) ([Pavel Kruglov](https://github.com/Avogar)). -* Исправлено сравнение между кортежами с элементами типа Nullable и строками. Например, до этого изменения сравнение кортежа `(1, null)` и строки `'(1,null)'` приводило к ошибке. Другой пример — сравнение кортежа `(1, a)`, где `a` — столбец типа Nullable, и строки `'(1, 2)'`. Это изменение устраняет эти проблемы. [#77323](https://github.com/ClickHouse/ClickHouse/pull/77323) ([Alexey Katsman](https://github.com/alexkats)). -* Исправлено падение в ObjectStorageQueueSource, возникшее в [https://github.com/ClickHouse/ClickHouse/pull/76358](https://github.com/ClickHouse/ClickHouse/pull/76358). [#77325](https://github.com/ClickHouse/ClickHouse/pull/77325) ([Pavel Kruglov](https://github.com/Avogar)). -* Исправлена проблема при использовании `async_insert` с `input`. [#77340](https://github.com/ClickHouse/ClickHouse/pull/77340) ([Azat Khuzhin](https://github.com/azat)). -* Исправление: `WITH FILL` может завершаться с ошибкой NOT_FOUND_COLUMN_IN_BLOCK, когда сортируемый столбец удаляется планировщиком запросов. Аналогичная проблема была связана с неконсистентным DAG, рассчитанным для выражения INTERPOLATE. [#77343](https://github.com/ClickHouse/ClickHouse/pull/77343) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* Исправлены несколько LOGICAL_ERROR'ов при назначении псевдонимов некорректным узлам AST. [#77445](https://github.com/ClickHouse/ClickHouse/pull/77445) ([Raúl Marín](https://github.com/Algunenano)). -* В реализации кэша файловой системы исправлена обработка ошибок при записи сегмента файла. [#77471](https://github.com/ClickHouse/ClickHouse/pull/77471) ([Kseniia Sumarokova](https://github.com/kssenii)). -* DatabaseIceberg теперь использует корректный файл метаданных, предоставляемый каталогом. Закрывает [#75187](https://github.com/ClickHouse/ClickHouse/issues/75187). [#77486](https://github.com/ClickHouse/ClickHouse/pull/77486) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Кэш запросов теперь предполагает, что UDF являются недетерминированными. Поэтому результаты запросов с UDF больше не кэшируются. Ранее пользователи могли определять недетерминированные UDF, результаты которых по ошибке кэшировались (issue [#77553](https://github.com/ClickHouse/ClickHouse/issues/77553)). [#77633](https://github.com/ClickHouse/ClickHouse/pull/77633) ([Jimmy Aguilar Mena](https://github.com/Ergus)). -* Исправлена проблема, из-за которой system.filesystem_cache_log работал только при включённой настройке `enable_filesystem_cache_log`. [#77650](https://github.com/ClickHouse/ClickHouse/pull/77650) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Исправлено форматирование (pretty print) значений типа Bool в формате JSON. [#76905](https://github.com/ClickHouse/ClickHouse/pull/76905) ([Pavel Kruglov](https://github.com/Avogar)). +* Исправлен возможный сбой из-за некорректного отката столбца JSON при ошибке во время асинхронных вставок. [#76908](https://github.com/ClickHouse/ClickHouse/pull/76908) ([Pavel Kruglov](https://github.com/Avogar)). +* Ранее `multiIf` мог возвращать разные типы столбцов на этапе планирования и при основном выполнении. Это приводило к тому, что код проявлял неопределённое поведение с точки зрения языка C++. [#76914](https://github.com/ClickHouse/ClickHouse/pull/76914) ([Nikita Taranov](https://github.com/nickitat)). +* Исправлена некорректная сериализация константных nullable-ключей в MergeTree. Это устраняет проблему [#76939](https://github.com/ClickHouse/ClickHouse/issues/76939). [#76985](https://github.com/ClickHouse/ClickHouse/pull/76985) ([Amos Bird](https://github.com/amosbird)). +* Исправлена сортировка значений типа `BFloat16`. Закрывает [#75487](https://github.com/ClickHouse/ClickHouse/issues/75487). Закрывает [#75669](https://github.com/ClickHouse/ClickHouse/issues/75669). [#77000](https://github.com/ClickHouse/ClickHouse/pull/77000) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Исправлена ошибка обработки JSON с подстолбцом типа Variant за счёт добавления проверки, пропускающей эфемерные подстолбцы при проверке согласованности парта. [#72187](https://github.com/ClickHouse/ClickHouse/issues/72187). [#77034](https://github.com/ClickHouse/ClickHouse/pull/77034) ([Smita Kulkarni](https://github.com/SmitaRKulkarni)). +* Исправлен сбой при разборе шаблона формата Values при несовпадении типов. [#77071](https://github.com/ClickHouse/ClickHouse/pull/77071) ([Pavel Kruglov](https://github.com/Avogar)). +* Теперь не допускается создание таблицы EmbeddedRocksDB с подстолбцом в первичном ключе. Ранее такую таблицу можно было создать, но запросы SELECT завершались с ошибкой. [#77074](https://github.com/ClickHouse/ClickHouse/pull/77074) ([Pavel Kruglov](https://github.com/Avogar)). +* Исправлено некорректное сравнение в распределённых запросах, потому что проталкивание предикатов на удалённые узлы не учитывает типы литералов. [#77093](https://github.com/ClickHouse/ClickHouse/pull/77093) ([Duc Canh Le](https://github.com/canhld94)). +* Исправлен сбой при создании таблицы Kafka, приводивший к выбросу исключения. [#77121](https://github.com/ClickHouse/ClickHouse/pull/77121) ([Pavel Kruglov](https://github.com/Avogar)). +* Добавлена поддержка JSON и подстолбцов в движках Kafka и RabbitMQ. [#77122](https://github.com/ClickHouse/ClickHouse/pull/77122) ([Pavel Kruglov](https://github.com/Avogar)). +* Исправлено развёртывание стека исключений в macOS. [#77126](https://github.com/ClickHouse/ClickHouse/pull/77126) ([Eduard Karacharov](https://github.com/korowa)). +* Исправлено чтение подстолбца 'null' в функции getSubcolumn. [#77163](https://github.com/ClickHouse/ClickHouse/pull/77163) ([Pavel Kruglov](https://github.com/Avogar)). +* Исправлена работа индекса Блума с `Array` и неподдерживаемыми функциями. [#77271](https://github.com/ClickHouse/ClickHouse/pull/77271) ([Pavel Kruglov](https://github.com/Avogar)). +* Следует проверять ограничение на количество таблиц только при выполнении исходного запроса CREATE. [#77274](https://github.com/ClickHouse/ClickHouse/pull/77274) ([Nikolay Degterinsky](https://github.com/evillique)). +* Не баг: `SELECT toBFloat16(-0.0) == toBFloat16(0.0)` теперь корректно возвращает `true` (ранее возвращал `false`). Это делает поведение единообразным с `Float32` и `Float64`. [#77290](https://github.com/ClickHouse/ClickHouse/pull/77290) ([Shankar Iyer](https://github.com/shankar-iyer)). +* Исправлено возможное некорректное обращение к неинициализированной переменной key_index, которое могло приводить к аварийному завершению в debug-сборках (это неинициализированное обращение не вызывает проблем в release-сборках, так как последующий код, скорее всего, выбрасывает ошибки). ### Запись в документации об изменениях, заметных пользователю. [#77305](https://github.com/ClickHouse/ClickHouse/pull/77305) ([wxybear](https://github.com/wxybear)). +* Исправлено имя партиции со значением типа Bool. Ранее оно было нарушено в [https://github.com/ClickHouse/ClickHouse/pull/74533](https://github.com/ClickHouse/ClickHouse/pull/74533). [#77319](https://github.com/ClickHouse/ClickHouse/pull/77319) ([Pavel Kruglov](https://github.com/Avogar)). +* Исправлено сравнение между кортежами с элементами типа Nullable и строками. Например, до изменения сравнение между кортежем `(1, null)` и строкой `'(1,null)'` приводило к ошибке. Другой пример — сравнение между кортежем `(1, a)`, где `a` — столбец типа Nullable, и строкой `'(1, 2)'`. Это изменение устраняет эти проблемы. [#77323](https://github.com/ClickHouse/ClickHouse/pull/77323) ([Alexey Katsman](https://github.com/alexkats)). +* Исправлен сбой в ObjectStorageQueueSource. Он был внесён в [https://github.com/ClickHouse/ClickHouse/pull/76358](https://github.com/ClickHouse/ClickHouse/pull/76358). [#77325](https://github.com/ClickHouse/ClickHouse/pull/77325) ([Pavel Kruglov](https://github.com/Avogar)). +* Исправлена проблема в работе `async_insert` с `input`. [#77340](https://github.com/ClickHouse/ClickHouse/pull/77340) ([Azat Khuzhin](https://github.com/azat)). +* Исправление: `WITH FILL` может завершаться с ошибкой NOT_FOUND_COLUMN_IN_BLOCK, если сортируемый столбец был удалён планировщиком. Аналогичная проблема была связана с несогласованным DAG, вычисленным для выражения INTERPOLATE. [#77343](https://github.com/ClickHouse/ClickHouse/pull/77343) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* Исправлено несколько ошибок `LOGICAL_ERROR` при задании алиасов для недопустимых узлов AST. [#77445](https://github.com/ClickHouse/ClickHouse/pull/77445) ([Raúl Marín](https://github.com/Algunenano)). +* В реализации кеша файловой системы исправлена обработка ошибок при записи сегмента файла. [#77471](https://github.com/ClickHouse/ClickHouse/pull/77471) ([Kseniia Sumarokova](https://github.com/kssenii)). +* DatabaseIceberg теперь использует правильный файл метаданных, предоставленный каталогом. Закрывает [#75187](https://github.com/ClickHouse/ClickHouse/issues/75187). [#77486](https://github.com/ClickHouse/ClickHouse/pull/77486) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Кэш запросов теперь исходит из того, что UDF являются недетерминированными. Соответственно, результаты запросов с UDF больше не кэшируются. Ранее пользователи могли определять недетерминированные UDF, результаты которых ошибочно кэшировались (issue [#77553](https://github.com/ClickHouse/ClickHouse/issues/77553)). [#77633](https://github.com/ClickHouse/ClickHouse/pull/77633) ([Jimmy Aguilar Mena](https://github.com/Ergus)). +* Исправлена проблема, из-за которой `system.filesystem_cache_log` работал только при включённой настройке `enable_filesystem_cache_log`. [#77650](https://github.com/ClickHouse/ClickHouse/pull/77650) ([Kseniia Sumarokova](https://github.com/kssenii)). * Исправлена логическая ошибка при вызове функции `defaultRoles` внутри проекции. Доработка по задаче [#76627](https://github.com/ClickHouse/ClickHouse/issues/76627). [#77667](https://github.com/ClickHouse/ClickHouse/pull/77667) ([pufit](https://github.com/pufit)). -* Использование второго аргумента типа `Nullable` для функции `arrayResize` теперь запрещено. Ранее при передаче `Nullable` в качестве второго аргумента могли возникать как ошибки, так и некорректные результаты (issue [#48398](https://github.com/ClickHouse/ClickHouse/issues/48398)). [#77724](https://github.com/ClickHouse/ClickHouse/pull/77724) ([Manish Gill](https://github.com/mgill25)). -* Регулярно проверяйте, были ли слияния и мутации отменены, даже в случае, когда операция не создает блоков для записи. [#77766](https://github.com/ClickHouse/ClickHouse/pull/77766) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). - +* Вторые аргументы типа `Nullable` для функции `arrayResize` теперь не допускаются. Ранее при использовании `Nullable` в качестве второго аргумента могли возникать как ошибки, так и некорректные результаты. (issue [#48398](https://github.com/ClickHouse/ClickHouse/issues/48398)). [#77724](https://github.com/ClickHouse/ClickHouse/pull/77724) ([Manish Gill](https://github.com/mgill25)). +* Регулярно проверяйте, не были ли слияния и мутации отменены, даже если операция не создает блоки для записи. [#77766](https://github.com/ClickHouse/ClickHouse/pull/77766) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). +#### Улучшения сборки/тестирования/упаковки -#### Улучшения сборки/тестирования/пакетирования * `clickhouse-odbc-bridge` и `clickhouse-library-bridge` перенесены в отдельный репозиторий: https://github.com/ClickHouse/odbc-bridge/. [#76225](https://github.com/ClickHouse/ClickHouse/pull/76225) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Исправлена кросс-компиляция на Rust и добавлена возможность полностью отключать Rust. [#76921](https://github.com/ClickHouse/ClickHouse/pull/76921) ([Raúl Marín](https://github.com/Algunenano)). - +* Исправлена кросс-компиляция Rust и добавлена возможность полностью отключать Rust. [#76921](https://github.com/ClickHouse/ClickHouse/pull/76921) ([Raúl Marín](https://github.com/Algunenano)). ### Релиз ClickHouse 25.2, 2025-02-27 {#252} -#### Обратное несовместимое изменение -* Полностью включён `async_load_databases` по умолчанию (даже для тех установок, для которых не был обновлён `config.xml`). [#74772](https://github.com/ClickHouse/ClickHouse/pull/74772) ([Azat Khuzhin](https://github.com/azat)). -* Добавлены форматы `JSONCompactEachRowWithProgress` и `JSONCompactStringsEachRowWithProgress`. Продолжение [#69989](https://github.com/ClickHouse/ClickHouse/issues/69989). `JSONCompactWithNames` и `JSONCompactWithNamesAndTypes` больше не выводят "totals" — по-видимому, это была ошибка в реализации. [#75037](https://github.com/ClickHouse/ClickHouse/pull/75037) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Значение по умолчанию для `format_alter_operations_with_parentheses` изменено на true, чтобы устранить неоднозначность списка команд ALTER (см. https://github.com/ClickHouse/ClickHouse/pull/59532). Это нарушает репликацию с кластерами версий до 24.3. Если вы обновляете кластер со старыми релизами, выключите этот параметр в конфигурации сервера или сначала обновитесь до 24.3. [#75302](https://github.com/ClickHouse/ClickHouse/pull/75302) ([Raúl Marín](https://github.com/Algunenano)). -* Удалена возможность фильтровать сообщения лога с использованием регулярных выражений. Реализация приводила к гонке данных, поэтому её пришлось удалить. [#75577](https://github.com/ClickHouse/ClickHouse/pull/75577) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). -* Настройка `min_chunk_bytes_for_parallel_parsing` больше не может быть нулевой. Это исправляет [#71110](https://github.com/ClickHouse/ClickHouse/issues/71110). [#75239](https://github.com/ClickHouse/ClickHouse/pull/75239) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). -* Добавлена проверка настроек в конфигурации кэша. Ранее несуществующие настройки игнорировались, теперь будет генерироваться ошибка, и такие настройки необходимо удалить. [#75452](https://github.com/ClickHouse/ClickHouse/pull/75452) ([Kseniia Sumarokova](https://github.com/kssenii)). - +#### Обратимо несовместимые изменения +* Полностью включён `async_load_databases` по умолчанию (даже для тех установок, где не обновлён `config.xml`). [#74772](https://github.com/ClickHouse/ClickHouse/pull/74772) ([Azat Khuzhin](https://github.com/azat)). +* Добавлены форматы `JSONCompactEachRowWithProgress` и `JSONCompactStringsEachRowWithProgress`. Продолжение [#69989](https://github.com/ClickHouse/ClickHouse/issues/69989). `JSONCompactWithNames` и `JSONCompactWithNamesAndTypes` больше не выводят "totals" — по‑видимому, это было ошибкой в реализации. [#75037](https://github.com/ClickHouse/ClickHouse/pull/75037) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Значение по умолчанию настройки `format_alter_operations_with_parentheses` изменено на true, чтобы устранить неоднозначность списка команд ALTER (см. https://github.com/ClickHouse/ClickHouse/pull/59532). Это нарушает репликацию с кластерами версий до 24.3. Если вы обновляете кластер, использующий более старые релизы, отключите эту настройку в конфигурации сервера или сначала обновитесь до 24.3. [#75302](https://github.com/ClickHouse/ClickHouse/pull/75302) ([Raúl Marín](https://github.com/Algunenano)). +* Удалена возможность фильтрации сообщений журнала с использованием регулярных выражений. Реализация приводила к гонке данных, поэтому её пришлось удалить. [#75577](https://github.com/ClickHouse/ClickHouse/pull/75577) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). +* Настройка `min_chunk_bytes_for_parallel_parsing` больше не может быть равна нулю. Это исправляет проблему: [#71110](https://github.com/ClickHouse/ClickHouse/issues/71110). [#75239](https://github.com/ClickHouse/ClickHouse/pull/75239) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). +* Добавлена проверка настроек в конфигурации кэша. Ранее несуществующие настройки игнорировались, теперь они будут приводить к ошибке и их следует удалить. [#75452](https://github.com/ClickHouse/ClickHouse/pull/75452) ([Kseniia Sumarokova](https://github.com/kssenii)). #### Новые возможности + * Поддержка типа `Nullable(JSON)`. [#73556](https://github.com/ClickHouse/ClickHouse/pull/73556) ([Pavel Kruglov](https://github.com/Avogar)). -* Поддержка подстолбцов в выражениях DEFAULT и MATERIALIZED. [#74403](https://github.com/ClickHouse/ClickHouse/pull/74403) ([Pavel Kruglov](https://github.com/Avogar)). -* Поддержка записи bloom-фильтров Parquet с использованием настройки `output_format_parquet_write_bloom_filter` (включена по умолчанию). [#71681](https://github.com/ClickHouse/ClickHouse/pull/71681) ([Michael Kolupaev](https://github.com/al13n321)). -* В Web UI теперь есть интерактивная навигация по базам данных. [#75777](https://github.com/ClickHouse/ClickHouse/pull/75777) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Разрешено комбинировать диски только для чтения и диски для чтения и записи в политике хранения (как несколько томов или несколько дисков). Это позволяет читать данные со всего тома, в то время как вставки будут выполняться в первую очередь на диск с возможностью записи (то есть политика хранения Copy-on-Write). [#75862](https://github.com/ClickHouse/ClickHouse/pull/75862) ([Azat Khuzhin](https://github.com/azat)). -* Добавлен новый движок базы данных `DatabaseBackup`, который позволяет мгновенно подключать таблицу/базу данных из бэкапа. [#75725](https://github.com/ClickHouse/ClickHouse/pull/75725) ([Maksim Kita](https://github.com/kitaisreal)). -* Добавлена поддержка подготовленных запросов (prepared statements) в протоколе Postgres wire. [#75035](https://github.com/ClickHouse/ClickHouse/pull/75035) ([scanhex12](https://github.com/scanhex12)). -* Добавлена возможность ATTACH таблиц без уровня базы данных, что полезно для таблиц MergeTree, расположенных в Web, S3 и подобных внешних виртуальных файловых системах. [#75788](https://github.com/ClickHouse/ClickHouse/pull/75788) ([Azat Khuzhin](https://github.com/azat)). -* Добавлена новая функция сравнения строк `compareSubstrings` для сравнения частей двух строк. Пример: `SELECT compareSubstrings('Saxony', 'Anglo-Saxon', 0, 6, 5) AS result` означает «лексикографически сравнить 6 байт строк 'Saxon' и 'Anglo-Saxon', начиная со смещения 0 в первой строке и смещения 5 во второй строке». [#74070](https://github.com/ClickHouse/ClickHouse/pull/74070) ([lgbo](https://github.com/lgbo-ustc)). -* Добавлена новая функция `initialQueryStartTime`. Она возвращает время начала текущего запроса. Это значение одинаково на всех шардах при распределённом запросе. [#75087](https://github.com/ClickHouse/ClickHouse/pull/75087) ([Roman Lomonosov](https://github.com/lomik)). -* Добавлена поддержка SSL-аутентификации с использованием именованных коллекций для MySQL. Закрывает [#59111](https://github.com/ClickHouse/ClickHouse/issues/59111). [#59452](https://github.com/ClickHouse/ClickHouse/pull/59452) ([Nikolay Degterinsky](https://github.com/evillique)). +* Поддержка подстолбцов (subcolumns) в выражениях DEFAULT и MATERIALIZED. [#74403](https://github.com/ClickHouse/ClickHouse/pull/74403) ([Pavel Kruglov](https://github.com/Avogar)). +* Поддержка записи bloom-фильтров Parquet с помощью настройки `output_format_parquet_write_bloom_filter` (включена по умолчанию). [#71681](https://github.com/ClickHouse/ClickHouse/pull/71681) ([Michael Kolupaev](https://github.com/al13n321)). +* В веб-интерфейсе появилась интерактивная навигация по базам данных. [#75777](https://github.com/ClickHouse/ClickHouse/pull/75777) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Разрешено комбинировать диски только для чтения и для чтения-записи в политике хранения (как несколько томов или несколько дисков). Это позволяет считывать данные со всего тома, в то время как вставка будет выполняться на доступный для записи диск (то есть политика хранения Copy-on-Write). [#75862](https://github.com/ClickHouse/ClickHouse/pull/75862) ([Azat Khuzhin](https://github.com/azat)). +* Добавлен новый движок базы данных `DatabaseBackup`, который позволяет мгновенно подключать таблицу/базу данных из резервной копии. [#75725](https://github.com/ClickHouse/ClickHouse/pull/75725) ([Maksim Kita](https://github.com/kitaisreal)). +* Добавлена поддержка подготовленных запросов (prepared statements) в протоколе обмена Postgres (Postgres wire protocol). [#75035](https://github.com/ClickHouse/ClickHouse/pull/75035) ([scanhex12](https://github.com/scanhex12)). +* Добавлена возможность ATTACH таблиц без уровня базы данных, что полезно для таблиц MergeTree, расположенных в Web, S3 и аналогичных внешних виртуальных файловых системах. [#75788](https://github.com/ClickHouse/ClickHouse/pull/75788) ([Azat Khuzhin](https://github.com/azat)). +* Добавлена новая функция сравнения строк `compareSubstrings` для сравнения частей двух строк. Пример: `SELECT compareSubstrings('Saxony', 'Anglo-Saxon', 0, 6, 5) AS result` означает «лексикографически сравнить 6 байт строк „Saxon“ и „Anglo-Saxon“, начиная со смещения 0 в первой строке и 5 во второй строке». [#74070](https://github.com/ClickHouse/ClickHouse/pull/74070) ([lgbo](https://github.com/lgbo-ustc)). +* Добавлена новая функция `initialQueryStartTime`. Она возвращает время начала текущего запроса. Значение одинаково на всех шардах при распределённом запросе. [#75087](https://github.com/ClickHouse/ClickHouse/pull/75087) ([Roman Lomonosov](https://github.com/lomik)). +* Добавлена поддержка SSL-аутентификации с именованными коллекциями для MySQL. Закрывает [#59111](https://github.com/ClickHouse/ClickHouse/issues/59111). [#59452](https://github.com/ClickHouse/ClickHouse/pull/59452) ([Nikolay Degterinsky](https://github.com/evillique)). #### Экспериментальные возможности -* Добавлена новая настройка `enable_adaptive_memory_spill_scheduler`, которая позволяет нескольким операциям Grace JOIN в одном запросе отслеживать их суммарное потребление памяти и адаптивно инициировать сброс (spilling) во внешнее хранилище, чтобы предотвратить MEMORY_LIMIT_EXCEEDED. [#72728](https://github.com/ClickHouse/ClickHouse/pull/72728) ([lgbo](https://github.com/lgbo-ustc)). -* Новый экспериментальный движок таблиц `Kafka` теперь полностью учитывает feature flags Keeper. [#76004](https://github.com/ClickHouse/ClickHouse/pull/76004) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). -* Восстановлен кодек (Intel) QPL, который был удалён в v24.10 из-за лицензионных ограничений. [#76021](https://github.com/ClickHouse/ClickHouse/pull/76021) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* Для интеграции с HDFS добавлена поддержка конфигурационной опции `dfs.client.use.datanode.hostname`. [#74635](https://github.com/ClickHouse/ClickHouse/pull/74635) ([Mikhail Tiukavkin](https://github.com/freshertm)). +* Добавлена новая настройка `enable_adaptive_memory_spill_scheduler`, которая позволяет нескольким операциям Grace JOIN в одном запросе отслеживать их совокупное потребление памяти и адаптивно инициировать сброс во внешнее хранилище для предотвращения MEMORY_LIMIT_EXCEEDED. [#72728](https://github.com/ClickHouse/ClickHouse/pull/72728) ([lgbo](https://github.com/lgbo-ustc)). +* Новый экспериментальный движок таблиц `Kafka` теперь в полной мере учитывает feature flags Keeper. [#76004](https://github.com/ClickHouse/ClickHouse/pull/76004) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). +* Восстановлен кодек (Intel) QPL, который был удалён в версии v24.10 из‑за лицензионных ограничений. [#76021](https://github.com/ClickHouse/ClickHouse/pull/76021) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* Для интеграции с HDFS добавлена поддержка опции конфигурации `dfs.client.use.datanode.hostname`. [#74635](https://github.com/ClickHouse/ClickHouse/pull/74635) ([Mikhail Tiukavkin](https://github.com/freshertm)). +#### Повышение производительности -#### Улучшение производительности -* Улучшена производительность чтения всего JSON-столбца в Wide-частях из S3. Это сделано за счёт добавления предварительной выборки для десериализации префиксов подстолбцов, кэша десериализованных префиксов и параллельной десериализации префиксов подстолбцов. В результате чтение JSON-столбца из S3 ускоряется в 4 раза для запросов вида `SELECT data FROM table` и примерно в 10 раз для запросов вида `SELECT data FROM table LIMIT 10`. [#74827](https://github.com/ClickHouse/ClickHouse/pull/74827) ([Pavel Kruglov](https://github.com/Avogar)). -* Исправлена ненужная конкуренция потоков (contention) в `parallel_hash`, когда `max_rows_in_join = max_bytes_in_join = 0`. [#75155](https://github.com/ClickHouse/ClickHouse/pull/75155) ([Nikita Taranov](https://github.com/nickitat)). -* Исправлено двойное предварительное выделение памяти в `ConcurrentHashJoin` в случае, когда стороны JOIN меняются местами оптимизатором. [#75149](https://github.com/ClickHouse/ClickHouse/pull/75149) ([Nikita Taranov](https://github.com/nickitat)). -* Незначительное улучшение в некоторых сценариях JOIN: предварительный расчёт количества выходных строк и резервирование под них памяти. [#75376](https://github.com/ClickHouse/ClickHouse/pull/75376) ([Alexander Gololobov](https://github.com/davenger)). -* Для запросов вида `WHERE a < b AND b < c AND c < 5` теперь можно выводить новые условия сравнения (`a < 5 AND b < 5`) для повышения эффективности фильтрации. [#73164](https://github.com/ClickHouse/ClickHouse/pull/73164) ([Shichao Jin](https://github.com/jsc0218)). -* Улучшение Keeper: отключён расчёт дайджеста при фиксации в хранилище в памяти для повышения производительности. Его можно включить с помощью настройки `keeper_server.digest_enabled_on_commit`. Дайджест по‑прежнему рассчитывается при предварительной обработке запросов. [#75490](https://github.com/ClickHouse/ClickHouse/pull/75490) ([Antonio Andelic](https://github.com/antonio2368)). -* По возможности выполняется проталкивание (push down) выражения фильтра из JOIN ON. [#75536](https://github.com/ClickHouse/ClickHouse/pull/75536) ([Vladimir Cherkasov](https://github.com/vdimir)). -* Ленивый расчёт размеров столбцов и индексов в MergeTree. [#75938](https://github.com/ClickHouse/ClickHouse/pull/75938) ([Pavel Kruglov](https://github.com/Avogar)). -* Повторно учтена настройка `ttl_only_drop_parts` при выполнении `MATERIALIZE TTL`; читаются только необходимые столбцы для перерасчёта TTL, а части удаляются путём замены их пустыми. [#72751](https://github.com/ClickHouse/ClickHouse/pull/72751) ([Andrey Zvonov](https://github.com/zvonand)). -* Уменьшён размер буфера записи для файлов метаданных plain_rewritable. [#75758](https://github.com/ClickHouse/ClickHouse/pull/75758) ([Julia Kartseva](https://github.com/jkartseva)). -* Снижено потребление памяти для некоторых оконных функций. [#65647](https://github.com/ClickHouse/ClickHouse/pull/65647) ([lgbo](https://github.com/lgbo-ustc)). -* Оценка Parquet bloom-фильтров и min/max-индексов теперь выполняется совместно. Это необходимо для корректной поддержки выражений вида: `x = 3 or x > 5`, где data = [1, 2, 4, 5]. [#71383](https://github.com/ClickHouse/ClickHouse/pull/71383) ([Arthur Passos](https://github.com/arthurpassos)). +* Улучшена производительность чтения всего JSON‑столбца в Wide‑частях из S3. Это сделано за счет добавления предварительной выборки (prefetch) для десериализации префиксов подстолбцов, кеширования десериализованных префиксов и параллельной десериализации префиксов подстолбцов. Это ускоряет чтение JSON‑столбца из S3 в 4 раза в запросах вида `SELECT data FROM table` и примерно в 10 раз в запросах вида `SELECT data FROM table LIMIT 10`. [#74827](https://github.com/ClickHouse/ClickHouse/pull/74827) ([Pavel Kruglov](https://github.com/Avogar)). +* Исправлен избыточный контеншн в `parallel_hash`, когда `max_rows_in_join = max_bytes_in_join = 0`. [#75155](https://github.com/ClickHouse/ClickHouse/pull/75155) ([Nikita Taranov](https://github.com/nickitat)). +* Исправлено двойное предварительное выделение памяти в `ConcurrentHashJoin` в случае, когда стороны соединения меняются местами оптимизатором. [#75149](https://github.com/ClickHouse/ClickHouse/pull/75149) ([Nikita Taranov](https://github.com/nickitat)). +* Небольшое улучшение в некоторых сценариях join: предварительный расчет числа выходных строк и резервирование памяти под них. [#75376](https://github.com/ClickHouse/ClickHouse/pull/75376) ([Alexander Gololobov](https://github.com/davenger)). +* Для запросов вида `WHERE a < b AND b < c AND c < 5` теперь можно выводить новые условия сравнения (`a < 5 AND b < 5`) для улучшения эффективности фильтрации. [#73164](https://github.com/ClickHouse/ClickHouse/pull/73164) ([Shichao Jin](https://github.com/jsc0218)). +* Улучшение в Keeper: отключено вычисление дайджеста при фиксации (commit) в in-memory хранилище для повышения производительности. Его можно включить с помощью настройки `keeper_server.digest_enabled_on_commit`. Дайджест по‑прежнему вычисляется при предварительной обработке запросов. [#75490](https://github.com/ClickHouse/ClickHouse/pull/75490) ([Antonio Andelic](https://github.com/antonio2368)). +* Оптимизация: по возможности проталкивать выражение фильтра из секции JOIN ON. [#75536](https://github.com/ClickHouse/ClickHouse/pull/75536) ([Vladimir Cherkasov](https://github.com/vdimir)). +* Ленивый расчет размеров столбцов и индексов в MergeTree. [#75938](https://github.com/ClickHouse/ClickHouse/pull/75938) ([Pavel Kruglov](https://github.com/Avogar)). +* Настройка `ttl_only_drop_parts` снова учитывается для `MATERIALIZE TTL`; считываются только необходимые столбцы для перерасчета TTL, а части удаляются путем замены их на пустые. [#72751](https://github.com/ClickHouse/ClickHouse/pull/72751) ([Andrey Zvonov](https://github.com/zvonand)). +* Уменьшен размер буфера записи для файлов метаданных plain_rewritable. [#75758](https://github.com/ClickHouse/ClickHouse/pull/75758) ([Julia Kartseva](https://github.com/jkartseva)). +* Снижено потребление памяти некоторыми оконными функциями. [#65647](https://github.com/ClickHouse/ClickHouse/pull/65647) ([lgbo](https://github.com/lgbo-ustc)). +* Оценка parquet bloom‑фильтров и min/max‑индексов выполняется совместно. Это необходимо для корректной поддержки запросов вида `x = 3 or x > 5`, где data = [1, 2, 4, 5]. [#71383](https://github.com/ClickHouse/ClickHouse/pull/71383) ([Arthur Passos](https://github.com/arthurpassos)). * Запросы, передаваемые в хранилище `Executable`, больше не ограничены однопоточным выполнением. [#70084](https://github.com/ClickHouse/ClickHouse/pull/70084) ([yawnt](https://github.com/yawnt)). -* Части в `ALTER TABLE FETCH PARTITION` загружаются (fetch) параллельно (размер пула потоков контролируется настройкой `max_fetch_partition_thread_pool_size`). [#74978](https://github.com/ClickHouse/ClickHouse/pull/74978) ([Azat Khuzhin](https://github.com/azat)). -* Разрешено перемещать предикаты с функцией `indexHint` в `PREWHERE`. [#74987](https://github.com/ClickHouse/ClickHouse/pull/74987) ([Anton Popov](https://github.com/CurtizJ)). - - +* Части в ALTER TABLE FETCH PARTITION загружаются параллельно (размер пула потоков задается настройкой `max_fetch_partition_thread_pool_size`). [#74978](https://github.com/ClickHouse/ClickHouse/pull/74978) ([Azat Khuzhin](https://github.com/azat)). +* Теперь можно перемещать предикаты с функцией `indexHint` в `PREWHERE`. [#74987](https://github.com/ClickHouse/ClickHouse/pull/74987) ([Anton Popov](https://github.com/CurtizJ)). -#### Улучшение +#### Улучшения -* Исправлен расчет размера, занимаемого в памяти, для столбцов `LowCardinality`. [#74688](https://github.com/ClickHouse/ClickHouse/pull/74688) ([Nikita Taranov](https://github.com/nickitat)). -* Теперь для таблицы `processors_profile_log` задана конфигурация по умолчанию с TTL 30 дней. [#66139](https://github.com/ClickHouse/ClickHouse/pull/66139) ([Ilya Yatsishin](https://github.com/qoega)). +* Исправлен расчет размера в памяти для столбцов `LowCardinality`. [#74688](https://github.com/ClickHouse/ClickHouse/pull/74688) ([Nikita Taranov](https://github.com/nickitat)). +* Таблица `processors_profile_log` теперь имеет конфигурацию по умолчанию с TTL в 30 дней. [#66139](https://github.com/ClickHouse/ClickHouse/pull/66139) ([Ilya Yatsishin](https://github.com/qoega)). * Добавлена возможность задавать имена шардов в конфигурации кластера. [#72276](https://github.com/ClickHouse/ClickHouse/pull/72276) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). -* Изменён код статуса успешного ответа Prometheus remote write с 200/OK на 204/NoContent. [#74170](https://github.com/ClickHouse/ClickHouse/pull/74170) ([Michael Dempsey](https://github.com/bluestealth)). -* Добавлена возможность перезагружать `max_remote_read_network_bandwidth_for_serve` и `max_remote_write_network_bandwidth_for_server` на лету без перезапуска сервера. [#74206](https://github.com/ClickHouse/ClickHouse/pull/74206) ([Kai Zhu](https://github.com/nauu)). -* Добавлена возможность использовать пути к blob-объектам для вычисления контрольных сумм при создании резервной копии. [#74729](https://github.com/ClickHouse/ClickHouse/pull/74729) ([Vitaly Baranov](https://github.com/vitlibar)). -* Добавлен столбец ID запроса в `system.query_cache` (закрывает [#68205](https://github.com/ClickHouse/ClickHouse/issues/68205)). [#74982](https://github.com/ClickHouse/ClickHouse/pull/74982) ([NamHoaiNguyen](https://github.com/NamHoaiNguyen)). -* Теперь разрешено отменять запросы `ALTER TABLE ... FREEZE ...` с помощью `KILL QUERY`, а также автоматически по истечении ограничения времени выполнения (`max_execution_time`). [#75016](https://github.com/ClickHouse/ClickHouse/pull/75016) ([Kirill](https://github.com/kirillgarbar)). +* Изменён статус успешного ответа для Prometheus remote write с 200 OK на 204 No Content. [#74170](https://github.com/ClickHouse/ClickHouse/pull/74170) ([Michael Dempsey](https://github.com/bluestealth)). +* Добавлена возможность изменять значения `max_remote_read_network_bandwidth_for_serve` и `max_remote_write_network_bandwidth_for_server` на лету, без перезапуска сервера. [#74206](https://github.com/ClickHouse/ClickHouse/pull/74206) ([Kai Zhu](https://github.com/nauu)). +* Добавлена возможность использовать пути к BLOB-объектам для вычисления контрольных сумм при создании резервной копии. [#74729](https://github.com/ClickHouse/ClickHouse/pull/74729) ([Vitaly Baranov](https://github.com/vitlibar)). +* В таблицу `system.query_cache` добавлен столбец ID запроса (закрывает [#68205](https://github.com/ClickHouse/ClickHouse/issues/68205)). [#74982](https://github.com/ClickHouse/ClickHouse/pull/74982) ([NamHoaiNguyen](https://github.com/NamHoaiNguyen)). +* Теперь можно отменять запросы `ALTER TABLE ... FREEZE ...` с помощью `KILL QUERY`, а также автоматически по тайм-ауту (`max_execution_time`). [#75016](https://github.com/ClickHouse/ClickHouse/pull/75016) ([Kirill](https://github.com/kirillgarbar)). * Добавлена поддержка `groupUniqArrayArrayMap` в качестве `SimpleAggregateFunction`. [#75034](https://github.com/ClickHouse/ClickHouse/pull/75034) ([Miel Donkers](https://github.com/mdonkers)). -* Скрыты параметры учётных данных каталога в движке базы данных `Iceberg`. Закрывает [#74559](https://github.com/ClickHouse/ClickHouse/issues/74559). [#75080](https://github.com/ClickHouse/ClickHouse/pull/75080) ([Kseniia Sumarokova](https://github.com/kssenii)). -* `intExp2` / `intExp10`: Определено поведение ранее неопределённых случаев: возвращать 0 для слишком малого аргумента, `18446744073709551615` для слишком большого аргумента, выбрасывать исключение, если `nan`. [#75312](https://github.com/ClickHouse/ClickHouse/pull/75312) ([Vitaly Baranov](https://github.com/vitlibar)). -* Добавлена нативная поддержка `s3.endpoint` из конфигурации каталога в `DatabaseIceberg`. Закрывает [#74558](https://github.com/ClickHouse/ClickHouse/issues/74558). [#75375](https://github.com/ClickHouse/ClickHouse/pull/75375) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Не завершать операцию молча, если у пользователя, выполняющего `SYSTEM DROP REPLICA`, недостаточно прав. [#75377](https://github.com/ClickHouse/ClickHouse/pull/75377) ([Bharat Nallan](https://github.com/bharatnc)). -* Добавлен ProfileEvent, фиксирующий количество неудачных попыток сброса любым из системных журналов. [#75466](https://github.com/ClickHouse/ClickHouse/pull/75466) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Скрыты параметры учетных данных каталога в движке базы данных `Iceberg`. Закрывает [#74559](https://github.com/ClickHouse/ClickHouse/issues/74559). [#75080](https://github.com/ClickHouse/ClickHouse/pull/75080) ([Kseniia Sumarokova](https://github.com/kssenii)). +* `intExp2` / `intExp10`: Определено поведение для ранее неопределённых случаев: возвращать 0 для слишком малого аргумента, `18446744073709551615` для слишком большого аргумента, выбрасывать исключение при значении `nan`. [#75312](https://github.com/ClickHouse/ClickHouse/pull/75312) ([Vitaly Baranov](https://github.com/vitlibar)). +* Добавлена прямая поддержка `s3.endpoint` из конфигурации каталога в `DatabaseIceberg`. Закрывает [#74558](https://github.com/ClickHouse/ClickHouse/issues/74558). [#75375](https://github.com/ClickHouse/ClickHouse/pull/75375) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Не завершать выполнение без сообщения об ошибке, если у пользователя, выполняющего `SYSTEM DROP REPLICA`, недостаточно прав. [#75377](https://github.com/ClickHouse/ClickHouse/pull/75377) ([Bharat Nallan](https://github.com/bharatnc)). +* Добавлен ProfileEvent, фиксирующий количество неудачных попыток сброса любого из системных логов. [#75466](https://github.com/ClickHouse/ClickHouse/pull/75466) ([Alexey Milovidov](https://github.com/alexey-milovidov)). * Добавлена проверка и дополнительное логирование при расшифровке и декомпрессии. [#75471](https://github.com/ClickHouse/ClickHouse/pull/75471) ([Vitaly Baranov](https://github.com/vitlibar)). -* Добавлена поддержка символа «микро» (U+00B5) в функции `parseTimeDelta`. Теперь и символ «микро» (U+00B5), и греческая буква мю (U+03BC) распознаются как корректные обозначения микросекунд, что приводит поведение ClickHouse в соответствие с реализацией Go ([см. time.go](https://github.com/golang/go/blob/ad7b46ee4ac1cee5095d64b01e8cf7fcda8bee5e/src/time/time.go#L983C19-L983C20) и [time/format.go](https://github.com/golang/go/blob/ad7b46ee4ac1cee5095d64b01e8cf7fcda8bee5e/src/time/format.go#L1608-L1609)). [#75472](https://github.com/ClickHouse/ClickHouse/pull/75472) ([Vitaly Orlov](https://github.com/orloffv)). -* Заменена серверная настройка (`send_settings_to_client`) на клиентскую (`apply_settings_from_server`), которая управляет тем, должен ли клиентский код (например, разбор данных INSERT и форматирование вывода запроса) использовать настройки из серверного `users.xml` и профиля пользователя. В противном случае используются только настройки из командной строки клиента, сессии и самого запроса. Обратите внимание, что это относится только к нативному клиенту (а не, например, к HTTP) и не применяется к большей части обработки запроса (которая выполняется на сервере). [#75478](https://github.com/ClickHouse/ClickHouse/pull/75478) ([Michael Kolupaev](https://github.com/al13n321)). -* Улучшены сообщения об ошибках синтаксиса. Ранее, если запрос был слишком большим, а токен, длина которого превышала ограничение, представлял собой очень длинный строковый литерал, сообщение о причине терялось посреди двух примеров этого очень длинного токена. Исправлена проблема, когда запрос в кодировке UTF-8 некорректно обрезался в сообщении об ошибке. Исправлено избыточное заключение фрагментов запроса в кавычки. Закрывает [#75473](https://github.com/ClickHouse/ClickHouse/issues/75473). [#75561](https://github.com/ClickHouse/ClickHouse/pull/75561) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Добавлена поддержка символа «micro» (U+00B5) в функции `parseTimeDelta`. Теперь и символ «micro» (U+00B5), и греческая буква «mu» (U+03BC) распознаются как корректные обозначения микросекунд, что приводит поведение ClickHouse в соответствие с реализацией Go ([см. time.go](https://github.com/golang/go/blob/ad7b46ee4ac1cee5095d64b01e8cf7fcda8bee5e/src/time/time.go#L983C19-L983C20) и [time/format.go](https://github.com/golang/go/blob/ad7b46ee4ac1cee5095d64b01e8cf7fcda8bee5e/src/time/format.go#L1608-L1609)). [#75472](https://github.com/ClickHouse/ClickHouse/pull/75472) ([Vitaly Orlov](https://github.com/orloffv)). +* Заменена серверная настройка (`send_settings_to_client`) на клиентскую (`apply_settings_from_server`), которая определяет, нужно ли коду на стороне клиента (например, при разборе данных INSERT и форматировании вывода запроса) использовать настройки из серверного `users.xml` и пользовательского профиля. В противном случае используются только настройки, заданные через командную строку клиента, сессию и сам запрос. Обратите внимание, что это относится только к нативному клиенту (а не, например, к HTTP) и не применяется к большей части обработки запросов (которая выполняется на сервере). [#75478](https://github.com/ClickHouse/ClickHouse/pull/75478) ([Michael Kolupaev](https://github.com/al13n321)). +* Улучшены сообщения об ошибках синтаксиса. Ранее, если запрос был слишком большим, а токен, длина которого превышала предел, представлял собой очень длинный строковый литерал, сообщение о причине терялось где‑то посередине между двумя примерами этого очень длинного токена. Исправлена проблема, из‑за которой запрос с UTF-8 некорректно обрезался в сообщении об ошибке. Исправлено избыточное взятие фрагментов запроса в кавычки. Закрывает [#75473](https://github.com/ClickHouse/ClickHouse/issues/75473). [#75561](https://github.com/ClickHouse/ClickHouse/pull/75561) ([Alexey Milovidov](https://github.com/alexey-milovidov)). * Добавлены события профилирования в хранилище `S3(Azure)Queue`. [#75618](https://github.com/ClickHouse/ClickHouse/pull/75618) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Отключена отправка настроек с сервера на клиент (`send_settings_to_client=false`) для обеспечения совместимости (эта функциональность позже будет реализована заново как клиентская настройка для повышения удобства использования). [#75648](https://github.com/ClickHouse/ClickHouse/pull/75648) ([Michael Kolupaev](https://github.com/al13n321)). -* Добавлен конфиг `memory_worker_correct_memory_tracker` для включения корректировки внутреннего трекера памяти на основе информации из различных источников, периодически читаемой в фоновом потоке. [#75714](https://github.com/ClickHouse/ClickHouse/pull/75714) ([Antonio Andelic](https://github.com/antonio2368)). -* Добавлен столбец `normalized_query_hash` в `system.processes`. Примечание: хотя его можно легко вычислить на лету с помощью функции `normalizedQueryHash`, это нужно для подготовки к последующим изменениям. [#75756](https://github.com/ClickHouse/ClickHouse/pull/75756) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Запрос к `system.tables` не будет вызывать исключение, даже если существует таблица типа `Merge`, созданная поверх базы данных, которая больше не существует. Из таблиц `Hive` удалён метод `getTotalRows`, поскольку мы не допускаем, чтобы он выполнял сложные операции. [#75772](https://github.com/ClickHouse/ClickHouse/pull/75772) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Хранить значения start_time/end_time для резервных копий с точностью до микросекунд. [#75929](https://github.com/ClickHouse/ClickHouse/pull/75929) ([Aleksandr Musorin](https://github.com/AVMusorin)). +* Отключена отправка настроек с сервера на клиент (`send_settings_to_client=false`) для обеспечения совместимости (позднее эта функция будет реализована заново как клиентская настройка, чтобы повысить удобство использования). [#75648](https://github.com/ClickHouse/ClickHouse/pull/75648) ([Michael Kolupaev](https://github.com/al13n321)). +* Добавлена настройка `memory_worker_correct_memory_tracker`, которая включает исправление внутреннего счётчика памяти на основе информации из различных источников, периодически считываемой фоновым потоком. [#75714](https://github.com/ClickHouse/ClickHouse/pull/75714) ([Antonio Andelic](https://github.com/antonio2368)). +* Добавлен столбец `normalized_query_hash` в `system.processes`. Примечание: хотя его можно легко вычислить на лету с помощью функции `normalizedQueryHash`, это необходимо для подготовки к последующим изменениям. [#75756](https://github.com/ClickHouse/ClickHouse/pull/75756) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Запрос к `system.tables` не будет приводить к ошибке, даже если существует таблица `Merge`, созданная поверх уже не существующей базы данных. Из таблиц `Hive` удалён метод `getTotalRows`, поскольку мы не допускаем выполнения ими сложных операций. [#75772](https://github.com/ClickHouse/ClickHouse/pull/75772) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Хранить start_time/end_time резервных копий с точностью до микросекунд. [#75929](https://github.com/ClickHouse/ClickHouse/pull/75929) ([Aleksandr Musorin](https://github.com/AVMusorin)). * Добавлена метрика `MemoryTrackingUncorrected`, показывающая значение внутреннего глобального трекера памяти, не скорректированное по RSS. [#75935](https://github.com/ClickHouse/ClickHouse/pull/75935) ([Antonio Andelic](https://github.com/antonio2368)). -* Разрешить разбор конечных точек вида `localhost:1234/handle` в табличных функциях `PostgreSQL` и `MySQL`. Исправляет регрессию, внесённую в [https://github.com/ClickHouse/ClickHouse/pull/52503](https://github.com/ClickHouse/ClickHouse/pull/52503). [#75944](https://github.com/ClickHouse/ClickHouse/pull/75944) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). -* Добавлена настройка сервера `throw_on_unknown_workload`, которая позволяет выбрать поведение при выполнении запроса с настройкой `workload` с неизвестным значением: либо разрешать неограниченный доступ (по умолчанию), либо выдавать ошибку `RESOURCE_ACCESS_DENIED`. Это полезно, чтобы принудительно использовать планирование рабочих нагрузок для всех запросов. [#75999](https://github.com/ClickHouse/ClickHouse/pull/75999) ([Sergei Trifonov](https://github.com/serxa)). -* Не переписывайте подколонки в `getSubcolumn` в `ARRAY JOIN`, если в этом нет необходимости. [#76018](https://github.com/ClickHouse/ClickHouse/pull/76018) ([Pavel Kruglov](https://github.com/Avogar)). -* Ошибки координации повторных попыток при загрузке таблиц. [#76020](https://github.com/ClickHouse/ClickHouse/pull/76020) ([Alexander Tokmakov](https://github.com/tavplubix)). -* Добавлена поддержка сброса отдельных логов в `SYSTEM FLUSH LOGS`. [#76132](https://github.com/ClickHouse/ClickHouse/pull/76132) ([Raúl Marín](https://github.com/Algunenano)). -* Улучшена страница сервера `/binary`. Вместо кривой Мортон используется кривая Гильберта. В квадрате отображается 512 МБ адресного пространства, что заполняет квадрат лучше (в предыдущих версиях адреса занимали только половину квадрата). Адреса окрашиваются в зависимости от близости к имени библиотеки, а не имени функции. Разрешена более широкая прокрутка за пределы области. [#76192](https://github.com/ClickHouse/ClickHouse/pull/76192) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Повтор выполнения запросов `ON CLUSTER` при ошибке `TOO_MANY_SIMULTANEOUS_QUERIES`. [#76352](https://github.com/ClickHouse/ClickHouse/pull/76352) ([Patrick Galbraith](https://github.com/CaptTofu)). -* Добавлена асинхронная метрика `CPUOverload`, которая вычисляет относительный дефицит CPU сервера. [#76404](https://github.com/ClickHouse/ClickHouse/pull/76404) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Изменено значение по умолчанию параметра `output_format_pretty_max_rows` с 10000 на 1000. Считаю, что так удобнее в использовании. [#76407](https://github.com/ClickHouse/ClickHouse/pull/76407) ([Alexey Milovidov](https://github.com/alexey-milovidov)). - - - - - -#### Исправление ошибки (видимая пользователю неисправность в официальном стабильном релизе) - -* Исправлено форматирование исключений: теперь используется пользовательский формат, если они возникают во время интерпретации запроса. В предыдущих версиях исключения форматировались с использованием формата по умолчанию, а не формата, указанного в запросе. Закрывает [#55422](https://github.com/ClickHouse/ClickHouse/issues/55422). [#74994](https://github.com/ClickHouse/ClickHouse/pull/74994) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Исправлено сопоставление типов данных для SQLite (целочисленные типы в `int64`, числа с плавающей запятой в `float64`). [#73853](https://github.com/ClickHouse/ClickHouse/pull/73853) ([Joanna Hulboj](https://github.com/jh0x)). -* Исправлено разрешение идентификаторов из родительских областей видимости. Разрешено использование псевдонимов для выражений в предложении WITH. Исправлено [#58994](https://github.com/ClickHouse/ClickHouse/issues/58994). Исправлено [#62946](https://github.com/ClickHouse/ClickHouse/issues/62946). Исправлено [#63239](https://github.com/ClickHouse/ClickHouse/issues/63239). Исправлено [#65233](https://github.com/ClickHouse/ClickHouse/issues/65233). Исправлено [#71659](https://github.com/ClickHouse/ClickHouse/issues/71659). Исправлено [#71828](https://github.com/ClickHouse/ClickHouse/issues/71828). Исправлено [#68749](https://github.com/ClickHouse/ClickHouse/issues/68749). [#66143](https://github.com/ClickHouse/ClickHouse/pull/66143) ([Dmitry Novik](https://github.com/novikd)). -* Исправлена монотонность функции negate. В предыдущих версиях запрос `select * from a where -x = -42;`, где `x` — первичный ключ, мог возвращать неверный результат. [#71440](https://github.com/ClickHouse/ClickHouse/pull/71440) ([Michael Kolupaev](https://github.com/al13n321)). -* Исправлена обработка пустых кортежей в arrayIntersect. Это исправляет проблему [#72578](https://github.com/ClickHouse/ClickHouse/issues/72578). [#72581](https://github.com/ClickHouse/ClickHouse/pull/72581) ([Amos Bird](https://github.com/amosbird)). -* Исправлено чтение подкoлонок подобъектов JSON с некорректным префиксом. [#73182](https://github.com/ClickHouse/ClickHouse/pull/73182) ([Pavel Kruglov](https://github.com/Avogar)). -* Корректно передавать настройки формата Native при взаимодействии клиент–сервер. [#73924](https://github.com/ClickHouse/ClickHouse/pull/73924) ([Pavel Kruglov](https://github.com/Avogar)). -* Добавлена проверка на неподдерживаемые типы для некоторых хранилищ. [#74218](https://github.com/ClickHouse/ClickHouse/pull/74218) ([Pavel Kruglov](https://github.com/Avogar)). -* Исправлено падение при выполнении запроса `INSERT INTO SELECT` через интерфейс PostgreSQL на macOS (issue [#72938](https://github.com/ClickHouse/ClickHouse/issues/72938)). [#74231](https://github.com/ClickHouse/ClickHouse/pull/74231) ([Artem Yurov](https://github.com/ArtemYurov)). -* Исправлено неинициализированное значение max_log_ptr в реплицируемой базе данных. [#74336](https://github.com/ClickHouse/ClickHouse/pull/74336) ([Konstantин Морозов](https://github.com/k-morozov)). -* Исправлен сбой при вставке интервала (issue [#74299](https://github.com/ClickHouse/ClickHouse/issues/74299)). [#74478](https://github.com/ClickHouse/ClickHouse/pull/74478) ([NamHoaiNguyen](https://github.com/NamHoaiNguyen)). -* Исправлено форматирование константных JSON-литералов. Ранее это могло приводить к синтаксическим ошибкам при отправке запроса на другой сервер. [#74533](https://github.com/ClickHouse/ClickHouse/pull/74533) ([Pavel Kruglov](https://github.com/Avogar)). -* Исправлен некорректный `CREATE`‑запрос при использовании константных выражений в секции `PARTITION` с включёнными неявными проекциями. Исправлена проблема [#74596](https://github.com/ClickHouse/ClickHouse/issues/74596). [#74634](https://github.com/ClickHouse/ClickHouse/pull/74634) ([Amos Bird](https://github.com/amosbird)). -* Не оставляем соединение в некорректном состоянии после завершения INSERT с исключением. [#74740](https://github.com/ClickHouse/ClickHouse/pull/74740) ([Azat Khuzhin](https://github.com/azat)). -* Не переиспользуйте соединения, оставленные в промежуточном состоянии. [#74749](https://github.com/ClickHouse/ClickHouse/pull/74749) ([Azat Khuzhin](https://github.com/azat)). -* Исправлено падение при разборе объявления типа JSON, если имя типа указано не прописными буквами. [#74784](https://github.com/ClickHouse/ClickHouse/pull/74784) ([Pavel Kruglov](https://github.com/Avogar)). -* Keeper: исправлена logical_error, возникавшая при разрыве соединения до его установления. [#74844](https://github.com/ClickHouse/ClickHouse/pull/74844) ([Michael Kolupaev](https://github.com/al13n321)). -* Исправлена проблема, из-за которой сервер не мог запуститься, если была таблица, использующая `AzureBlobStorage`. Таблицы загружаются без каких-либо запросов к Azure. [#74880](https://github.com/ClickHouse/ClickHouse/pull/74880) ([Alexey Katsman](https://github.com/alexkats)). -* Исправлено отсутствие полей `used_privileges` и `missing_privileges` в `query_log` для операций BACKUP и RESTORE. [#74887](https://github.com/ClickHouse/ClickHouse/pull/74887) ([Alexey Katsman](https://github.com/alexkats)). -* В HDFS теперь обновляется krb-билет при ошибке SASL во время запроса HDFS SELECT. [#74930](https://github.com/ClickHouse/ClickHouse/pull/74930) ([inv2004](https://github.com/inv2004)). -* Исправлены запросы к реплицируемой базе данных в startup_scripts. [#74942](https://github.com/ClickHouse/ClickHouse/pull/74942) ([Azat Khuzhin](https://github.com/azat)). -* Исправлены ошибки в выражениях с псевдонимами типов в предложении JOIN ON при использовании null-безопасного сравнения. [#74970](https://github.com/ClickHouse/ClickHouse/pull/74970) ([Vladimir Cherkasov](https://github.com/vdimir)). -* Возвращать состояние парта из `deleting` обратно в `outdated`, если операция удаления завершилась неуспешно. [#74985](https://github.com/ClickHouse/ClickHouse/pull/74985) ([Sema Checherinda](https://github.com/CheSema)). -* В предыдущих версиях при наличии скалярного подзапроса мы начинали записывать прогресс (накопленный при обработке подзапроса) во время инициализации формата данных, то есть до записи HTTP-заголовков. Это приводило к потере HTTP-заголовков, таких как X-ClickHouse-QueryId и X-ClickHouse-Format, а также Content-Type. [#74991](https://github.com/ClickHouse/ClickHouse/pull/74991) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Разрешить разбор адресов конечных точек вида `localhost:1234/handle` в табличных функциях `PostgreSQL` или `MySQL`. Это исправляет регрессию, внесённую в [https://github.com/ClickHouse/ClickHouse/pull/52503](https://github.com/ClickHouse/ClickHouse/pull/52503). [#75944](https://github.com/ClickHouse/ClickHouse/pull/75944) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). +* Добавлена серверная настройка `throw_on_unknown_workload`, которая позволяет выбрать поведение при выполнении запроса с параметром `workload` с неизвестным значением: либо разрешать неограниченный доступ (по умолчанию), либо выбрасывать ошибку `RESOURCE_ACCESS_DENIED`. Это полезно для принудительного использования планирования рабочих нагрузок всеми запросами. [#75999](https://github.com/ClickHouse/ClickHouse/pull/75999) ([Sergei Trifonov](https://github.com/serxa)). +* Не переписывать подколонки в вызовы `getSubcolumn` в `ARRAY JOIN`, если в этом нет необходимости. [#76018](https://github.com/ClickHouse/ClickHouse/pull/76018) ([Pavel Kruglov](https://github.com/Avogar)). +* Повторять операции при ошибках координации при загрузке таблиц. [#76020](https://github.com/ClickHouse/ClickHouse/pull/76020) ([Alexander Tokmakov](https://github.com/tavplubix)). +* Добавлена поддержка сброса отдельных логов с помощью команды `SYSTEM FLUSH LOGS`. [#76132](https://github.com/ClickHouse/ClickHouse/pull/76132) ([Raúl Marín](https://github.com/Algunenano)). +* Улучшена страница сервера `/binary`. Используется кривая Гильберта вместо кривой Мортона. В квадрате отображаются адреса объёмом до 512 МБ, что лучше заполняет квадрат (в предыдущих версиях адреса заполняли только половину квадрата). Адреса раскрашиваются в зависимости от имени библиотеки, а не имени функции. Разрешена прокрутка немного дальше за пределы области. [#76192](https://github.com/ClickHouse/ClickHouse/pull/76192) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Повтор выполнения запросов ON CLUSTER при ошибке TOO_MANY_SIMULTANEOUS_QUERIES. [#76352](https://github.com/ClickHouse/ClickHouse/pull/76352) ([Patrick Galbraith](https://github.com/CaptTofu)). +* Добавлена асинхронная метрика `CPUOverload`, которая вычисляет относительный дефицит CPU-ресурсов сервера. [#76404](https://github.com/ClickHouse/ClickHouse/pull/76404) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Изменено значение по умолчанию для `output_format_pretty_max_rows` с 10 000 на 1 000. Считаю, что так удобнее. [#76407](https://github.com/ClickHouse/ClickHouse/pull/76407) ([Alexey Milovidov](https://github.com/alexey-milovidov)). + +#### Исправление ошибки (некорректное поведение, заметное пользователю, в официальном стабильном релизе) + +* Исправлено форматирование исключений — теперь используется пользовательский формат, если они возникают во время интерпретации запроса. В предыдущих версиях исключения форматировались в формате по умолчанию, а не в формате, указанном в запросе. Исправлена ошибка [#55422](https://github.com/ClickHouse/ClickHouse/issues/55422). [#74994](https://github.com/ClickHouse/ClickHouse/pull/74994) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Исправлено сопоставление типов данных для SQLite (целочисленных типов в `int64`, типов с плавающей запятой в `float64`). [#73853](https://github.com/ClickHouse/ClickHouse/pull/73853) ([Joanna Hulboj](https://github.com/jh0x)). +* Исправлено разрешение идентификаторов из родительских областей видимости. Разрешено использование псевдонимов для выражений в предложении WITH. Исправляет [#58994](https://github.com/ClickHouse/ClickHouse/issues/58994). Исправляет [#62946](https://github.com/ClickHouse/ClickHouse/issues/62946). Исправляет [#63239](https://github.com/ClickHouse/ClickHouse/issues/63239). Исправляет [#65233](https://github.com/ClickHouse/ClickHouse/issues/65233). Исправляет [#71659](https://github.com/ClickHouse/ClickHouse/issues/71659). Исправляет [#71828](https://github.com/ClickHouse/ClickHouse/issues/71828). Исправляет [#68749](https://github.com/ClickHouse/ClickHouse/issues/68749). [#66143](https://github.com/ClickHouse/ClickHouse/pull/66143) ([Dmitry Novik](https://github.com/novikd)). +* Исправлена монотонность функции negate. В предыдущих версиях запрос `select * from a where -x = -42;`, где `x` является первичным ключом, мог возвращать неверный результат. [#71440](https://github.com/ClickHouse/ClickHouse/pull/71440) ([Michael Kolupaev](https://github.com/al13n321)). +* Исправлена обработка пустых кортежей в arrayIntersect, что исправляет [#72578](https://github.com/ClickHouse/ClickHouse/issues/72578). [#72581](https://github.com/ClickHouse/ClickHouse/pull/72581) ([Amos Bird](https://github.com/amosbird)). +* Исправлено чтение субстолбцов вложенных объектов JSON с некорректным префиксом. [#73182](https://github.com/ClickHouse/ClickHouse/pull/73182) ([Pavel Kruglov](https://github.com/Avogar)). +* Обеспечена корректная передача настроек формата Native при клиент-серверном взаимодействии. [#73924](https://github.com/ClickHouse/ClickHouse/pull/73924) ([Pavel Kruglov](https://github.com/Avogar)). +* Добавлена проверка неподдерживаемых типов для некоторых хранилищ. [#74218](https://github.com/ClickHouse/ClickHouse/pull/74218) ([Pavel Kruglov](https://github.com/Avogar)). +* Исправлен сбой при выполнении запроса `INSERT INTO SELECT` при использовании интерфейса PostgreSQL на macOS (issue [#72938](https://github.com/ClickHouse/ClickHouse/issues/72938)). [#74231](https://github.com/ClickHouse/ClickHouse/pull/74231) ([Artem Yurov](https://github.com/ArtemYurov)). +* Исправлена проблема с неинициализированной max_log_ptr в реплицируемой базе данных. [#74336](https://github.com/ClickHouse/ClickHouse/pull/74336) ([Konstantin Morozov](https://github.com/k-morozov)). +* Исправлен сбой при вставке `interval` (issue [#74299](https://github.com/ClickHouse/ClickHouse/issues/74299)). [#74478](https://github.com/ClickHouse/ClickHouse/pull/74478) ([NamHoaiNguyen](https://github.com/NamHoaiNguyen)). +* Исправлено форматирование констант JSON-литералов. Ранее это могло приводить к синтаксическим ошибкам при отправке запроса на другой сервер. [#74533](https://github.com/ClickHouse/ClickHouse/pull/74533) ([Pavel Kruglov](https://github.com/Avogar)). +* Исправлен некорректный запрос `CREATE` при использовании константных выражений секции (PARTITION) с включёнными неявными проекциями. Это исправляет [#74596](https://github.com/ClickHouse/ClickHouse/issues/74596). [#74634](https://github.com/ClickHouse/ClickHouse/pull/74634) ([Amos Bird](https://github.com/amosbird)). +* Не допускать, чтобы соединение оставалось в некорректном состоянии после завершения операции INSERT с исключением. [#74740](https://github.com/ClickHouse/ClickHouse/pull/74740) ([Azat Khузhin](https://github.com/azat)). +* Избегайте повторного использования соединений, оставленных в промежуточном состоянии. [#74749](https://github.com/ClickHouse/ClickHouse/pull/74749) ([Azat Khuzhin](https://github.com/azat)). +* Исправлено падение при разборе объявления типа JSON, если имя типа указано не в верхнем регистре. [#74784](https://github.com/ClickHouse/ClickHouse/pull/74784) ([Pavel Kruglov](https://github.com/Avogar)). +* Keeper: исправлена ошибка logical_error, возникавшая, если соединение разрывалось до его установления. [#74844](https://github.com/ClickHouse/ClickHouse/pull/74844) ([Michael Kolupaev](https://github.com/al13n321)). +* Исправлена ошибка, из-за которой сервер не мог запуститься, если существовала таблица, использующая `AzureBlobStorage`. Таблицы теперь загружаются без каких-либо запросов к Azure. [#74880](https://github.com/ClickHouse/ClickHouse/pull/74880) ([Alexey Katsman](https://github.com/alexkats)). +* Исправлены отсутствующие поля `used_privileges` и `missing_privileges` в `query_log` для операций BACKUP и RESTORE. [#74887](https://github.com/ClickHouse/ClickHouse/pull/74887) ([Alexey Katsman](https://github.com/alexkats)). +* В HDFS обновлять krb ticket при ошибке SASL во время запроса HDFS SELECT. [#74930](https://github.com/ClickHouse/ClickHouse/pull/74930) ([inv2004](https://github.com/inv2004)). +* Исправлены запросы к базе данных Replicated в startup_scripts. [#74942](https://github.com/ClickHouse/ClickHouse/pull/74942) ([Azat Khuzhin](https://github.com/azat)). +* Исправлены проблемы с выражениями, использующими псевдонимы типов, в условии JOIN ON при использовании null-safe-сравнения. [#74970](https://github.com/ClickHouse/ClickHouse/pull/74970) ([Vladimir Cherkasov](https://github.com/vdimir)). +* Возвращает состояние части из «удаляемая» обратно в «устаревшая», если операция удаления завершилась неудачей. [#74985](https://github.com/ClickHouse/ClickHouse/pull/74985) ([Sema Checherinda](https://github.com/CheSema)). +* В предыдущих версиях, когда использовался скалярный подзапрос, мы начинали записывать прогресс выполнения (накопленный при обработке подзапроса) уже на этапе инициализации формата данных, то есть до отправки HTTP-заголовков. Это приводило к потере HTTP-заголовков, таких как X-ClickHouse-QueryId и X-ClickHouse-Format, а также заголовка Content-Type. [#74991](https://github.com/ClickHouse/ClickHouse/pull/74991) ([Alexey Milovidov](https://github.com/alexey-milovidov)). * Исправлены запросы вида `CREATE TABLE AS...` для `database_replicated_allow_replicated_engine_arguments=0`. [#75000](https://github.com/ClickHouse/ClickHouse/pull/75000) ([Bharat Nallan](https://github.com/bharatnc)). -* Исправлена проблема, из-за которой после исключений при INSERT соединение клиента оставалось в некорректном состоянии. [#75030](https://github.com/ClickHouse/ClickHouse/pull/75030) ([Azat Khuzhin](https://github.com/azat)). -* Исправлен сбой, возникавший из‑за неперехваченного исключения при репликации PSQL. [#75062](https://github.com/ClickHouse/ClickHouse/pull/75062) ([Azat Khuzhin](https://github.com/azat)). -* SASL может завершиться с ошибкой при любом RPC‑вызове; это исправление позволяет повторить вызов, если истёк срок действия krb5‑тикета. [#75063](https://github.com/ClickHouse/ClickHouse/pull/75063) ([inv2004](https://github.com/inv2004)). +* Исправлена проблема, из-за которой после исключений при выполнении INSERT-запросов соединение клиента оставалось в некорректном состоянии. [#75030](https://github.com/ClickHouse/ClickHouse/pull/75030) ([Azat Khuzhin](https://github.com/azat)). +* Исправлена аварийная остановка из-за неперехваченного исключения при репликации PSQL. [#75062](https://github.com/ClickHouse/ClickHouse/pull/75062) ([Azat Khuzhin](https://github.com/azat)). +* SASL может приводить к сбою любого RPC-вызова; исправление позволяет повторить вызов в случае, если срок действия krb5-ticket истёк. [#75063](https://github.com/ClickHouse/ClickHouse/pull/75063) ([inv2004](https://github.com/inv2004)). * Исправлено использование индексов (первичных и вторичных) для столбцов `Array`, `Map` и `Nullable(..)` при включённой настройке `optimize_function_to_subcolumns`. Ранее индексы для этих столбцов могли быть проигнорированы. [#75081](https://github.com/ClickHouse/ClickHouse/pull/75081) ([Anton Popov](https://github.com/CurtizJ)). -* Отключайте `flatten_nested` при создании материализованных представлений на внутренних таблицах, поскольку использовать преобразованные таким образом столбцы будет невозможно. [#75085](https://github.com/ClickHouse/ClickHouse/pull/75085) ([Christoph Wurm](https://github.com/cwurm)). -* Исправлена некорректная интерпретация некоторых IPv6-адресов (например, ::ffff:1.1.1.1) в поле forwarded_for, приводившая к отключению клиента с исключением. [#75133](https://github.com/ClickHouse/ClickHouse/pull/75133) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* Исправлена обработка nullsafe JOIN для нуллируемого типа данных LowCardinality. Ранее условия JOIN ON с nullsafe-сравнением, таким как `IS NOT DISTINCT FROM`, `<=>` , `a IS NULL AND b IS NULL OR a == b`, работали некорректно со столбцами LowCardinality. [#75143](https://github.com/ClickHouse/ClickHouse/pull/75143) ([Vladimir Cherkasov](https://github.com/vdimir)). -* Проверяет, что при подсчёте total_number_of_rows для NumRowsCache не указывается key_condition. [#75164](https://github.com/ClickHouse/ClickHouse/pull/75164) ([Daniil Ivanik](https://github.com/divanik)). -* Исправлены запросы с неиспользуемой интерполяцией с помощью нового анализатора. [#75173](https://github.com/ClickHouse/ClickHouse/pull/75173) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). -* Исправлена ошибка, приводившая к падению при использовании CTE с INSERT. [#75188](https://github.com/ClickHouse/ClickHouse/pull/75188) ([Shichao Jin](https://github.com/jsc0218)). -* Исправление в Keeper: не записывать в повреждённые журналы изменений при откате логов. [#75197](https://github.com/ClickHouse/ClickHouse/pull/75197) ([Antonio Andelic](https://github.com/antonio2368)). -* Используйте `BFloat16` в качестве супертипа там, где это уместно. Это закрывает задачу [#74404](https://github.com/ClickHouse/ClickHouse/issues/74404). [#75236](https://github.com/ClickHouse/ClickHouse/pull/75236) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). -* Исправлены неожиданные значения по умолчанию в результате JOIN при использовании any_join_distinct_right_table_keys и OR в JOIN ON. [#75262](https://github.com/ClickHouse/ClickHouse/pull/75262) ([Vladimir Cherkasov](https://github.com/vdimir)). -* Маскировать учетные данные движка таблицы azureblobstorage. [#75319](https://github.com/ClickHouse/ClickHouse/pull/75319) ([Garrett Thomas](https://github.com/garrettthomaskth)). -* Исправлено поведение, при котором ClickHouse мог ошибочно выполнять проталкивание фильтра (filter pushdown) во внешнюю СУБД, такую как PostgreSQL, MySQL или SQLite. Это исправляет: [#71423](https://github.com/ClickHouse/ClickHouse/issues/71423). [#75320](https://github.com/ClickHouse/ClickHouse/pull/75320) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). +* Отключайте `flatten_nested` при создании материализованных представлений на внутренних таблицах, поскольку такие развёрнутые столбцы затем нельзя будет использовать. [#75085](https://github.com/ClickHouse/ClickHouse/pull/75085) ([Christoph Wurm](https://github.com/cwurm)). +* Исправлена ошибка, из-за которой некоторые IPv6-адреса (например, ::ffff:1.1.1.1) в поле forwarded_for неверно интерпретировались, что приводило к разрыву соединения с клиентом с выбросом исключения. [#75133](https://github.com/ClickHouse/ClickHouse/pull/75133) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* Исправлена обработка null-safe JOIN для допускающего значения NULL типа данных LowCardinality. Ранее JOIN ON с null-safe сравнением, таким как `IS NOT DISTINCT FROM`, `<=>`, `a IS NULL AND b IS NULL OR a == b`, работал некорректно с колонками LowCardinality. [#75143](https://github.com/ClickHouse/ClickHouse/pull/75143) ([Vladimir Cherkasov](https://github.com/vdimir)). +* Проверяет, что при подсчёте total_number_of_rows для NumRowsCache не задаётся key_condition. [#75164](https://github.com/ClickHouse/ClickHouse/pull/75164) ([Daniil Ivanik](https://github.com/divanik)). +* Исправлена обработка запросов с неиспользуемой интерполяцией с помощью нового анализатора. [#75173](https://github.com/ClickHouse/ClickHouse/pull/75173) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). +* Исправлена ошибка, приводившая к сбою при использовании CTE с Insert. [#75188](https://github.com/ClickHouse/ClickHouse/pull/75188) ([Shichao Jin](https://github.com/jsc0218)). +* Исправление Keeper: предотвращена запись в повреждённые журналы изменений при откате логов. [#75197](https://github.com/ClickHouse/ClickHouse/pull/75197) ([Antonio Andelic](https://github.com/antonio2368)). +* Использовать `BFloat16` в качестве супертипа там, где это уместно. Исправляет проблему: [#74404](https://github.com/ClickHouse/ClickHouse/issues/74404). [#75236](https://github.com/ClickHouse/ClickHouse/pull/75236) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). +* Исправлены неожиданные значения по умолчанию в результате JOIN при использовании `any_join_distinct_right_table_keys` и оператора OR в условии JOIN ON. [#75262](https://github.com/ClickHouse/ClickHouse/pull/75262) ([Vladimir Cherkasov](https://github.com/vdimir)). +* Маскирование учетных данных движка таблиц azureblobstorage. [#75319](https://github.com/ClickHouse/ClickHouse/pull/75319) ([Garrett Thomas](https://github.com/garrettthomaskth)). +* Исправлено поведение, при котором ClickHouse мог ошибочно выполнять проталкивание фильтра (filter pushdown) во внешнюю СУБД, такую как PostgreSQL, MySQL или SQLite. Это исправление закрывает: [#71423](https://github.com/ClickHouse/ClickHouse/issues/71423). [#75320](https://github.com/ClickHouse/ClickHouse/pull/75320) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). * Исправлен сбой в кэше схем Protobuf, который мог происходить во время вывода в формате Protobuf при параллельном выполнении запроса `SYSTEM DROP FORMAT SCHEMA CACHE`. [#75357](https://github.com/ClickHouse/ClickHouse/pull/75357) ([Pavel Kruglov](https://github.com/Avogar)). -* Исправлена возможная логическая ошибка или проблема с неинициализированной памятью при проталкивании фильтра из секции `HAVING` в режиме параллельных реплик. [#75363](https://github.com/ClickHouse/ClickHouse/pull/75363) ([Vladimir Cherkasov](https://github.com/vdimir)). -* Скрытие конфиденциальной информации в табличных функциях и табличных движках `icebergS3` и `icebergAzure`. [#75378](https://github.com/ClickHouse/ClickHouse/pull/75378) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Функция `TRIM` с вычисляемым пустым набором символов для обрезки теперь корректно обрабатывается. Пример: `SELECT TRIM(LEADING concat('') FROM 'foo')` (issue [#69922](https://github.com/ClickHouse/ClickHouse/issues/69922)). [#75399](https://github.com/ClickHouse/ClickHouse/pull/75399) ([Manish Gill](https://github.com/mgill25)). +* Исправлена возможная логическая ошибка или обращение к неинициализированной памяти при проталкивании фильтра из `HAVING` при использовании параллельных реплик. [#75363](https://github.com/ClickHouse/ClickHouse/pull/75363) ([Vladimir Cherkasov](https://github.com/vdimir)). +* Скрыта конфиденциальная информация в табличных функциях и движках таблиц `icebergS3` и `icebergAzure`. [#75378](https://github.com/ClickHouse/ClickHouse/pull/75378) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Функция `TRIM` с вычисляемым пустым набором символов для обрезки теперь обрабатывается корректно. Пример: `SELECT TRIM(LEADING concat('') FROM 'foo')` (Issue [#69922](https://github.com/ClickHouse/ClickHouse/issues/69922)). [#75399](https://github.com/ClickHouse/ClickHouse/pull/75399) ([Manish Gill](https://github.com/mgill25)). * Исправлена гонка данных в IOutputFormat. [#75448](https://github.com/ClickHouse/ClickHouse/pull/75448) ([Pavel Kruglov](https://github.com/Avogar)). -* Исправлена возможная ошибка `Elements ... and ... of Nested data structure ... (Array columns) have different array sizes` при использовании в JOIN по распределённым таблицам JSON-подстолбцов типа Array. [#75512](https://github.com/ClickHouse/ClickHouse/pull/75512) ([Pavel Kruglov](https://github.com/Avogar)). +* Исправлена возможная ошибка `Elements ... and ... of Nested data structure ... (Array columns) have different array sizes` при использовании JSON-подстолбцов типа Array в операциях JOIN с распределёнными таблицами. [#75512](https://github.com/ClickHouse/ClickHouse/pull/75512) ([Pavel Kruglov](https://github.com/Avogar)). * Исправлена порча данных при использовании `CODEC(ZSTD, DoubleDelta)`. Закрывает [#70031](https://github.com/ClickHouse/ClickHouse/issues/70031). [#75548](https://github.com/ClickHouse/ClickHouse/pull/75548) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* Исправлено взаимодействие между allow_feature_tier и настройкой совместимости движка MergeTree. [#75635](https://github.com/ClickHouse/ClickHouse/pull/75635) ([Raúl Marín](https://github.com/Algunenano)). -* Исправлено некорректное значение processed_rows в system.s3queue_log при повторной попытке обработки файла. [#75666](https://github.com/ClickHouse/ClickHouse/pull/75666) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Учитывать `materialized_views_ignore_errors`, когда материализованное представление записывает в движок URL при возникновении проблем с подключением. [#75679](https://github.com/ClickHouse/ClickHouse/pull/75679) ([Christoph Wurm](https://github.com/cwurm)). +* Исправлено взаимодействие между allow_feature_tier и настройкой MergeTree compatibility. [#75635](https://github.com/ClickHouse/ClickHouse/pull/75635) ([Raúl Marín](https://github.com/Algunenano)). +* Исправлено неверное значение processed_rows в system.s3queue_log в случае повторной обработки файла. [#75666](https://github.com/ClickHouse/ClickHouse/pull/75666) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Учитывать `materialized_views_ignore_errors` при записи материализованного представления в движок URL при возникновении проблем с подключением. [#75679](https://github.com/ClickHouse/ClickHouse/pull/75679) ([Christoph Wurm](https://github.com/cwurm)). * Исправлены редкие сбои при чтении из таблицы `MergeTree` после нескольких асинхронных запросов `RENAME` (с `alter_sync = 0`) между столбцами разных типов. [#75693](https://github.com/ClickHouse/ClickHouse/pull/75693) ([Anton Popov](https://github.com/CurtizJ)). -* Исправлена ошибка `Block structure mismatch in QueryPipeline stream` в некоторых запросах с `UNION ALL`. [#75715](https://github.com/ClickHouse/ClickHouse/pull/75715) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). -* Перестраивать проекцию при `ALTER MODIFY` столбца, входящего в её первичный ключ. Ранее это могло приводить к ошибкам `CANNOT_READ_ALL_DATA` при выполнении запросов `SELECT` после `ALTER MODIFY` столбца, использованного в первичном ключе проекции. [#75720](https://github.com/ClickHouse/ClickHouse/pull/75720) ([Pavel Kruglov](https://github.com/Avogar)). +* Исправлена ошибка `Block structure mismatch in QueryPipeline stream`, возникавшая при некоторых запросах с `UNION ALL`. [#75715](https://github.com/ClickHouse/ClickHouse/pull/75715) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). +* Теперь проекция перестраивается при `ALTER MODIFY` столбца её первичного ключа. Ранее это могло приводить к ошибкам `CANNOT_READ_ALL_DATA` при выполнении `SELECT` после `ALTER MODIFY` столбца, используемого в первичном ключе проекции. [#75720](https://github.com/ClickHouse/ClickHouse/pull/75720) ([Pavel Kruglov](https://github.com/Avogar)). * Исправлен некорректный результат `ARRAY JOIN` для скалярных подзапросов (с анализатором). [#75732](https://github.com/ClickHouse/ClickHouse/pull/75732) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). -* Исправлено разыменование нулевого указателя в `DistinctSortedStreamTransform`. [#75734](https://github.com/ClickHouse/ClickHouse/pull/75734) ([Nikita Taranov](https://github.com/nickitat)). -* Исправить поведение параметра `allow_suspicious_ttl_expressions`. [#75771](https://github.com/ClickHouse/ClickHouse/pull/75771) ([Aleksei Filatov](https://github.com/aalexfvk)). +* Исправлена ошибка разыменования нулевого указателя в `DistinctSortedStreamTransform`. [#75734](https://github.com/ClickHouse/ClickHouse/pull/75734) ([Nikita Taranov](https://github.com/nickitat)). +* Исправлено поведение `allow_suspicious_ttl_expressions`. [#75771](https://github.com/ClickHouse/ClickHouse/pull/75771) ([Aleksei Filatov](https://github.com/aalexfvk)). * Исправлено чтение из неинициализированной памяти в функции `translate`. Это закрывает [#75592](https://github.com/ClickHouse/ClickHouse/issues/75592). [#75794](https://github.com/ClickHouse/ClickHouse/pull/75794) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Передавать настройки формата в JSON как строковое форматирование в формате Native. [#75832](https://github.com/ClickHouse/ClickHouse/pull/75832) ([Pavel Kruglov](https://github.com/Avogar)). -* В истории изменений настроек зафиксировано включение по умолчанию параллельного хеш-алгоритма соединения в версии v24.12. Это означает, что ClickHouse будет и далее выполнять соединения, используя непараллельный хеш-алгоритм, если настроен уровень совместимости старше v24.12. [#75870](https://github.com/ClickHouse/ClickHouse/pull/75870) ([Robert Schulze](https://github.com/rschu1ze)). -* Исправлена ошибка, из-за которой таблицы с неявно добавленными индексами min-max невозможно было скопировать в новую таблицу (issue [#75677](https://github.com/ClickHouse/ClickHouse/issues/75677)). [#75877](https://github.com/ClickHouse/ClickHouse/pull/75877) ([Smita Kulkarni](https://github.com/SmitaRKulkarni)). -* `clickhouse-library-bridge` позволяет открывать произвольные библиотеки из файловой системы, поэтому безопасно запускать его только в изолированной среде. Чтобы предотвратить уязвимость при запуске в одной среде с clickhouse-server, мы ограничим допустимые пути к библиотекам каталогом, указанным в конфигурации. Эта уязвимость была обнаружена в рамках программы [ClickHouse Bug Bounty Program](https://github.com/ClickHouse/ClickHouse/issues/38986) **Арсением Дугиным**. [#75954](https://github.com/ClickHouse/ClickHouse/pull/75954) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Мы по ошибке использовали JSON-сериализацию для некоторых метаданных, потому что JSON не поддерживает двоичные данные внутри строковых литералов, включая нулевые байты. SQL-запросы могут содержать двоичные данные и некорректный UTF-8, поэтому мы должны поддерживать это и в наших файлах метаданных. В то же время форматы ClickHouse `JSONEachRow` и подобные обходят это ограничение, отходя от стандарта JSON ради идеального преобразования данных туда-обратно (roundtrip) для двоичных данных. См. обоснование здесь: [https://github.com/ClickHouse/ClickHouse/pull/73668#issuecomment-2560501790](https://github.com/ClickHouse/ClickHouse/pull/73668#issuecomment-2560501790). Решение состоит в том, чтобы согласовать библиотеку `Poco::JSON` с форматами сериализации JSON в ClickHouse. Это закрывает [#73668](https://github.com/ClickHouse/ClickHouse/issues/73668). [#75963](https://github.com/ClickHouse/ClickHouse/pull/75963) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Распространять настройки формата на JSON как строковое форматирование в формате Native. [#75832](https://github.com/ClickHouse/ClickHouse/pull/75832) ([Pavel Kruglov](https://github.com/Avogar)). +* Зафиксировано включение по умолчанию параллельного hash в качестве алгоритма соединения (JOIN) в версии v24.12 в истории изменений настроек. Это означает, что ClickHouse продолжит выполнять соединение с использованием непараллельного hash, если настроен уровень совместимости ниже v24.12. [#75870](https://github.com/ClickHouse/ClickHouse/pull/75870) ([Robert Schulze](https://github.com/rschu1ze)). +* Исправлена ошибка, из-за которой таблицы с неявно добавленными индексами min-max нельзя было скопировать в новую таблицу (issue [#75677](https://github.com/ClickHouse/ClickHouse/issues/75677)). [#75877](https://github.com/ClickHouse/ClickHouse/pull/75877) ([Smita Kulkarni](https://github.com/SmitaRKulkarni)). +* `clickhouse-library-bridge` позволяет загружать любые библиотеки из файловой системы, поэтому его безопасно запускать только в изолированной среде. Чтобы предотвратить уязвимость при запуске на одном хосте с clickhouse-server, мы ограничим допустимые пути к библиотекам каталогом, указанным в конфигурации. Эта уязвимость была обнаружена в рамках [ClickHouse Bug Bounty Program](https://github.com/ClickHouse/ClickHouse/issues/38986) **Арсением Дугиным**. [#75954](https://github.com/ClickHouse/ClickHouse/pull/75954) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Мы использовали JSON-сериализацию для части метаданных, что было ошибкой, потому что JSON не поддерживает двоичные данные внутри строковых литералов, включая нулевые байты. SQL-запросы могут содержать двоичные данные и некорректный UTF-8, поэтому мы должны поддерживать это и в наших файлах с метаданными. При этом форматы ClickHouse `JSONEachRow` и подобные обходят это ограничение, отходя от стандарта JSON в пользу идеального обратимого преобразования для двоичных данных. Обоснование см. здесь: [https://github.com/ClickHouse/ClickHouse/pull/73668#issuecomment-2560501790](https://github.com/ClickHouse/ClickHouse/pull/73668#issuecomment-2560501790). Решение состоит в том, чтобы привести библиотеку `Poco::JSON` в соответствие с реализацией сериализации формата JSON в ClickHouse. Это закрывает [#73668](https://github.com/ClickHouse/ClickHouse/issues/73668). [#75963](https://github.com/ClickHouse/ClickHouse/pull/75963) ([Alexey Milovidov](https://github.com/alexey-milovidov)). * Исправлена проверка ограничений на коммиты в хранилище `S3Queue`. [#76104](https://github.com/ClickHouse/ClickHouse/pull/76104) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Исправлено подключение таблиц MergeTree с автоматическими индексами (`add_minmax_index_for_numeric_columns`/`add_minmax_index_for_string_columns`). [#76139](https://github.com/ClickHouse/ClickHouse/pull/76139) ([Azat Khuzhin](https://github.com/azat)). -* Исправлена проблема, при которой стеки вызовов из родительских потоков задания (настройка `enable_job_stack_trace`) не выводились. Исправлена проблема, при которой настройка `enable_job_stack_trace` некорректно распространялась на потоки, из-за чего содержимое стека вызовов могло не соответствовать этой настройке. [#76191](https://github.com/ClickHouse/ClickHouse/pull/76191) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* Исправлена некорректная проверка прав, из-за которой для `ALTER RENAME` требовался грант `CREATE USER`. Закрывает [#74372](https://github.com/ClickHouse/ClickHouse/issues/74372). [#76241](https://github.com/ClickHouse/ClickHouse/pull/76241) ([pufit](https://github.com/pufit)). +* Исправлено присоединение таблиц MergeTree с автоматическими индексами (`add_minmax_index_for_numeric_columns`/`add_minmax_index_for_string_columns`). [#76139](https://github.com/ClickHouse/ClickHouse/pull/76139) ([Azat Khuzhin](https://github.com/azat)). +* Исправлена проблема, из‑за которой стек‑трейсы родительских потоков задания (настройка `enable_job_stack_trace`) не выводились. Также исправлена проблема, при которой значение настройки `enable_job_stack_trace` некорректно распространялось на потоки, из‑за чего содержимое стек‑трейсов не всегда учитывало эту настройку. [#76191](https://github.com/ClickHouse/ClickHouse/pull/76191) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* Исправлена ошибка в проверке прав, при которой для `ALTER RENAME` требовался грант `CREATE USER`. Закрывает [#74372](https://github.com/ClickHouse/ClickHouse/issues/74372). [#76241](https://github.com/ClickHouse/ClickHouse/pull/76241) ([pufit](https://github.com/pufit)). * Исправлена работа функции reinterpretAs с типом FixedString на архитектуре big-endian. [#76253](https://github.com/ClickHouse/ClickHouse/pull/76253) ([Azat Khuzhin](https://github.com/azat)). * Исправлена логическая ошибка в S3Queue: «Expected current processor {} to be equal to {} for bucket {}». [#76358](https://github.com/ClickHouse/ClickHouse/pull/76358) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Исправлена взаимоблокировка при операции ALTER в базе данных Memory. [#76359](https://github.com/ClickHouse/ClickHouse/pull/76359) ([Azat Khuzhin](https://github.com/azat)). -* Исправлена логическая ошибка при анализе индекса, если в условии `WHERE` используется функция `pointInPolygon`. [#76360](https://github.com/ClickHouse/ClickHouse/pull/76360) ([Anton Popov](https://github.com/CurtizJ)). -* Исправлен потенциально небезопасный вызов в обработчике сигналов. [#76549](https://github.com/ClickHouse/ClickHouse/pull/76549) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* Исправлена поддержка обратного ключа в PartsSplitter. Исправляет [#73400](https://github.com/ClickHouse/ClickHouse/issues/73400). [#73418](https://github.com/ClickHouse/ClickHouse/pull/73418) ([Amos Bird](https://github.com/amosbird)). - +* Устранена взаимная блокировка при выполнении `ALTER` в базе данных `Memory`. [#76359](https://github.com/ClickHouse/ClickHouse/pull/76359) ([Azat Khuzhin](https://github.com/azat)). +* Исправлена логическая ошибка в анализе индекса, если в условии `WHERE` используется функция `pointInPolygon`. [#76360](https://github.com/ClickHouse/ClickHouse/pull/76360) ([Anton Popov](https://github.com/CurtizJ)). +* Исправлен потенциально небезопасный вызов в обработчике сигнала. [#76549](https://github.com/ClickHouse/ClickHouse/pull/76549) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* Исправлена поддержка обратных ключей в PartsSplitter. Устраняет проблему [#73400](https://github.com/ClickHouse/ClickHouse/issues/73400). [#73418](https://github.com/ClickHouse/ClickHouse/pull/73418) ([Amos Bird](https://github.com/amosbird)). +#### Улучшения сборки/тестирования/упаковки -#### Улучшения в сборке/тестировании/упаковке -* Поддержка сборки HDFS на Mac с ARM и Intel. [#74244](https://github.com/ClickHouse/ClickHouse/pull/74244) ([Yan Xin](https://github.com/yxheartipp)). -* Включена поддержка ICU и GRPC при кросс-компиляции для Darwin. [#75922](https://github.com/ClickHouse/ClickHouse/pull/75922) ([Raúl Marín](https://github.com/Algunenano)). -* Обновление встроенного LLVM до версии 19. [#75148](https://github.com/ClickHouse/ClickHouse/pull/75148) ([Konstantin Bogdanов](https://github.com/thevar1able)). -* Отключён сетевой доступ для пользователя `default` в docker-образе. [#75259](https://github.com/ClickHouse/ClickHouse/pull/75259) ([Mikhail f. Shiryaev](https://github.com/Felixoid)). Все действия, связанные с clickhouse-server, вынесены в функцию и выполняются только при запуске бинарника по умолчанию в `entrypoint.sh`. Давнее улучшение было предложено в [#50724](https://github.com/ClickHouse/ClickHouse/issues/50724). Добавлен флаг `--users` к `clickhouse-extract-from-config` для получения значений из `users.xml`. [#75643](https://github.com/ClickHouse/ClickHouse/pull/75643) ([Mikhail f. Shiryaev](https://github.com/Felixoid)). +* Добавлена поддержка сборки HDFS как на Mac с ARM, так и на Mac с Intel. [#74244](https://github.com/ClickHouse/ClickHouse/pull/74244) ([Yan Xin](https://github.com/yxheartipp)). +* Включены ICU и GRPC при кросс-компиляции под Darwin. [#75922](https://github.com/ClickHouse/ClickHouse/pull/75922) ([Raúl Marín](https://github.com/Algunenano)). +* Обновлено встроенное LLVM до версии 19. [#75148](https://github.com/ClickHouse/ClickHouse/pull/75148) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* Отключён сетевой доступ для пользователя `default` в образе Docker. [#75259](https://github.com/ClickHouse/ClickHouse/pull/75259) ([Mikhail f. Shiryaev](https://github.com/Felixoid)). Все действия, связанные с clickhouse-server, оформлены в виде функции и выполняются только при запуске основного бинарника в `entrypoint.sh`. Давно откладываемое улучшение было предложено в [#50724](https://github.com/ClickHouse/ClickHouse/issues/50724). В `clickhouse-extract-from-config` добавлен флаг `--users` для получения значений из `users.xml`. [#75643](https://github.com/ClickHouse/ClickHouse/pull/75643) ([Mikhail f. Shiryaev](https://github.com/Felixoid)). * Удалено около 20 МБ мёртвого кода из бинарника. [#76226](https://github.com/ClickHouse/ClickHouse/pull/76226) ([Alexey Milovidov](https://github.com/alexey-milovidov)). ### Релиз ClickHouse 25.1, 2025-01-28 {#251} +#### Обратные несовместимые изменения - -#### Обратимо несовместимые изменения -* `JSONEachRowWithProgress` будет записывать прогресс при каждом его обновлении. В предыдущих версиях прогресс показывался только после каждого блока результата, из-за чего он был бесполезен. Изменён способ отображения прогресса: нулевые значения показываться не будут. Это закрывает [#70800](https://github.com/ClickHouse/ClickHouse/issues/70800). [#73834](https://github.com/ClickHouse/ClickHouse/pull/73834) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Таблицы `Merge` будут унифицировать структуру подчинённых таблиц, используя объединение их столбцов и выводя общие типы. Это закрывает [#64864](https://github.com/ClickHouse/ClickHouse/issues/64864). В некоторых случаях это изменение может быть несовместимым с предыдущими версиями. Один из примеров — когда между таблицами нет общего типа, но преобразование к типу первой таблицы всё ещё возможно, как в случае UInt64 и Int64 или любого числового типа и String. Если вы хотите вернуться к старому поведению, установите `merge_table_max_tables_to_look_for_schema_inference` равным `1` или установите `compatibility` в `24.12` или более раннее значение. [#73956](https://github.com/ClickHouse/ClickHouse/pull/73956) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Формат вывода Parquet преобразует столбцы Date и DateTime в типы даты/времени, поддерживаемые Parquet, вместо записи их как «сырых» чисел. `DateTime` становится `DateTime64(3)` (было: `UInt32`); установка `output_format_parquet_datetime_as_uint32` возвращает старое поведение. `Date` становится `Date32` (было: `UInt16`). [#70950](https://github.com/ClickHouse/ClickHouse/pull/70950) ([Michael Kolupaev](https://github.com/al13n321)). +* `JSONEachRowWithProgress` теперь будет выводить прогресс каждый раз, когда он обновляется. В предыдущих версиях прогресс показывался только после каждого блока результата, что делало его практически бесполезным. Изменён способ отображения прогресса: нулевые значения показываться не будут. Это закрывает [#70800](https://github.com/ClickHouse/ClickHouse/issues/70800). [#73834](https://github.com/ClickHouse/ClickHouse/pull/73834) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Таблицы `Merge` теперь унифицируют структуру базовых таблиц, используя объединение их столбцов и выводя общие типы. Это закрывает [#64864](https://github.com/ClickHouse/ClickHouse/issues/64864). В некоторых случаях это изменение может быть несовместимо с предыдущими версиями. Один из примеров — когда между таблицами нет общего типа, но преобразование к типу первой таблицы всё ещё возможно, как в случае `UInt64` и `Int64` или любого числового типа и `String`. Если вы хотите вернуться к старому поведению, установите `merge_table_max_tables_to_look_for_schema_inference` в `1` или установите `compatibility` на `24.12` или более раннюю версию. [#73956](https://github.com/ClickHouse/ClickHouse/pull/73956) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Формат вывода Parquet конвертирует столбцы `Date` и `DateTime` в типы даты/времени, поддерживаемые Parquet, вместо записи их как сырых чисел. `DateTime` становится `DateTime64(3)` (ранее: `UInt32`); установка `output_format_parquet_datetime_as_uint32` возвращает старое поведение. `Date` становится `Date32` (ранее: `UInt16`). [#70950](https://github.com/ClickHouse/ClickHouse/pull/70950) ([Michael Kolupaev](https://github.com/al13n321)). * По умолчанию не допускаются несравнимые типы (такие как `JSON`/`Object`/`AggregateFunction`) в `ORDER BY` и в функциях сравнения `less/greater/equal/etc`. [#73276](https://github.com/ClickHouse/ClickHouse/pull/73276) ([Pavel Kruglov](https://github.com/Avogar)). * Устаревший движок базы данных `MaterializedMySQL` удалён и больше недоступен. [#73879](https://github.com/ClickHouse/ClickHouse/pull/73879) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Источник словаря `mysql` больше не выполняет запрос `SHOW TABLE STATUS`, так как он не даёт никакой полезной информации для таблиц InnoDB, а также для любых современных версий MySQL в целом. Это закрывает [#72636](https://github.com/ClickHouse/ClickHouse/issues/72636). Это изменение обратно совместимо, но помещено в эту категорию, чтобы у вас была возможность его заметить. [#73914](https://github.com/ClickHouse/ClickHouse/pull/73914) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Запросы `CHECK TABLE` теперь требуют отдельного права `CHECK`. В предыдущих версиях для выполнения этих запросов было достаточно права `SHOW TABLES`. Но запрос `CHECK TABLE` может быть тяжёлым, и обычные лимиты сложности запроса для запросов `SELECT` к нему не применяются. Это создавало потенциальную возможность для DoS-атаки. [#74471](https://github.com/ClickHouse/ClickHouse/pull/74471) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Функция `h3ToGeo()` теперь возвращает результаты в порядке `(lat, lon)` (который является стандартным порядком для геометрических функций). Пользователи, которые хотят сохранить устаревший порядок результата `(lon, lat)`, могут установить настройку `h3togeo_lon_lat_result_order = true`. [#74719](https://github.com/ClickHouse/ClickHouse/pull/74719) ([Manish Gill](https://github.com/mgill25)). -* Новый драйвер MongoDB теперь используется по умолчанию. Пользователи, которые хотят продолжить использование устаревшего драйвера, могут установить серверную настройку `use_legacy_mongodb_integration` в значение true. [#73359](https://github.com/ClickHouse/ClickHouse/pull/73359) ([Robert Schulze](https://github.com/rschu1ze)). - - +* Источник словаря `mysql` больше не выполняет запрос `SHOW TABLE STATUS`, потому что он не даёт полезной информации ни для таблиц InnoDB, ни для каких-либо современных версий MySQL. Это закрывает [#72636](https://github.com/ClickHouse/ClickHouse/issues/72636). Это изменение обратно совместимо, но помещено в эту категорию, чтобы у вас была возможность его заметить. [#73914](https://github.com/ClickHouse/ClickHouse/pull/73914) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Запросы `CHECK TABLE` теперь требуют отдельной привилегии `CHECK`. В предыдущих версиях для запуска этих запросов было достаточно привилегии `SHOW TABLES`. Но запрос `CHECK TABLE` может быть ресурсоёмким, и обычные ограничения сложности запросов для запросов `SELECT` к нему не применяются. Это приводило к потенциальной возможности проведения DoS-атаки. [#74471](https://github.com/ClickHouse/ClickHouse/pull/74471) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Функция `h3ToGeo()` теперь возвращает результат в порядке `(lat, lon)` (что является стандартным порядком для геометрических функций). Пользователи, которые хотят сохранить прежний порядок результата `(lon, lat)`, могут установить настройку `h3togeo_lon_lat_result_order = true`. [#74719](https://github.com/ClickHouse/ClickHouse/pull/74719) ([Manish Gill](https://github.com/mgill25)). +* Новый драйвер MongoDB теперь используется по умолчанию. Пользователи, которые хотят продолжить использовать прежний драйвер, могут установить серверную настройку `use_legacy_mongodb_integration` в значение `true`. [#73359](https://github.com/ClickHouse/ClickHouse/pull/73359) ([Robert Schulze](https://github.com/rschu1ze)). #### Новая возможность -* Добавлена возможность применять незавершённые мутации (ещё не материализованные фоновым процессом) во время выполнения запросов `SELECT` сразу после отправки. Эту возможность можно включить, установив `apply_mutations_on_fly`. [#74877](https://github.com/ClickHouse/ClickHouse/pull/74877) ([Anton Popov](https://github.com/CurtizJ)). -* Реализовано отсечение партиций (`partition pruning`) для таблиц `Iceberg` при операциях партиционирования с временными преобразованиями. [#72044](https://github.com/ClickHouse/ClickHouse/pull/72044) ([Daniil Ivanik](https://github.com/divanik)). -* Добавлена поддержка подстолбцов в ключе сортировки движка MergeTree и пропускающих индексах. [#72644](https://github.com/ClickHouse/ClickHouse/pull/72644) ([Pavel Kruglov](https://github.com/Avogar)). -* Добавлена поддержка чтения значений `HALF_FLOAT` из `Apache Arrow`/`Parquet`/`ORC` (они считываются как `Float32`). Это закрывает [#72960](https://github.com/ClickHouse/ClickHouse/issues/72960). Имейте в виду, что формат IEEE-754 с половинной точностью — это не то же самое, что `BFloat16`. Закрывает [#73835](https://github.com/ClickHouse/ClickHouse/issues/73835). [#73836](https://github.com/ClickHouse/ClickHouse/pull/73836) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Таблица `system.trace_log` будет содержать два новых столбца — `symbols` и `lines`, в которых хранится символизированный стек вызовов. Это позволяет легко собирать и экспортировать информацию для профилирования. Работа механизма управляется параметром конфигурации сервера `symbolize` в секции `trace_log` и по умолчанию он включён. [#73896](https://github.com/ClickHouse/ClickHouse/pull/73896) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Добавлена новая функция `generateSerialID`, которую можно использовать для генерации автоинкрементных идентификаторов в таблицах. Продолжение [#64310](https://github.com/ClickHouse/ClickHouse/issues/64310) от [kazalika](https://github.com/kazalika). Закрывает [#62485](https://github.com/ClickHouse/ClickHouse/issues/62485). [#73950](https://github.com/ClickHouse/ClickHouse/pull/73950) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Добавлен синтаксис `query1 PARALLEL WITH query2 PARALLEL WITH query3 ... PARALLEL WITH queryN` для DDL-запросов. Это означает, что подзапросы `{query1, query2, ... queryN}` могут выполняться параллельно между собой (и это предпочтительно). [#73983](https://github.com/ClickHouse/ClickHouse/pull/73983) ([Vitaly Baranov](https://github.com/vitlibar)). -* Добавлен кэш в оперативной памяти для десериализованных гранул пропускающих индексов. Это должно ускорить повторные запросы, использующие пропускающие индексы. Размер нового кэша управляется настройками сервера `skipping_index_cache_size` и `skipping_index_cache_max_entries`. Основной мотивацией для добавления кэша были индексы векторного сходства, которые теперь работают значительно быстрее. [#70102](https://github.com/ClickHouse/ClickHouse/pull/70102) ([Robert Schulze](https://github.com/rschu1ze)). -* Теперь во встроенном веб-интерфейсе во время выполнения запроса отображается индикатор прогресса. Он позволяет отменять запросы. Отображается общее количество записей и расширенная информация о скорости. Таблица может отображаться по мере поступления данных. Включено HTTP-сжатие. Отрисовка таблицы стала быстрее. Заголовок таблицы стал фиксированным. Интерфейс позволяет выделять ячейки и перемещаться по ним с помощью клавиш со стрелками. Исправлена проблема, при которой контур выделенной ячейки делал её меньше. Ячейки больше не расширяются при наведении мыши, а только при выделении. Момент прекращения отрисовки поступающих данных теперь определяется на стороне клиента, а не сервера. Добавлена подсветка разрядных групп у чисел. Общий дизайн обновлён и стал более выразительным. Интерфейс проверяет доступность сервера и корректность учётных данных, а также отображает версию сервера и время его работы. Значок облака корректно отображается в виде контура во всех шрифтах, включая Safari. Большие целые числа внутри вложенных типов данных отображаются корректнее. Значения inf/nan отображаются корректно. Типы данных отображаются при наведении указателя мыши на заголовок столбца. [#74204](https://github.com/ClickHouse/ClickHouse/pull/74204) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Добавлена возможность по умолчанию создавать min-max (пропускающие, skipping) индексы для столбцов в таблицах MergeTree с помощью настроек `add_minmax_index_for_numeric_columns` (для числовых столбцов) и `add_minmax_index_for_string_columns` (для строковых столбцов). Пока обе настройки отключены, поэтому поведение системы пока не изменилось. [#74266](https://github.com/ClickHouse/ClickHouse/pull/74266) ([Smita Kulkarni](https://github.com/SmitaRKulkarni)). -* Добавлены поля `script_query_number` и `script_line_number` в `system.query_log`, в ClientInfo в нативном протоколе и в журналы сервера. Это закрывает задачу [#67542](https://github.com/ClickHouse/ClickHouse/issues/67542). Благодарим [pinsvin00](https://github.com/pinsvin00) за запуск этой функциональности ранее в [#68133](https://github.com/ClickHouse/ClickHouse/issues/68133). [#74477](https://github.com/ClickHouse/ClickHouse/pull/74477) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Добавлена агрегатная функция `sequenceMatchEvents`, которая возвращает временные метки соответствующих событий для самой длинной цепочки событий по шаблону. [#72349](https://github.com/ClickHouse/ClickHouse/pull/72349) ([UnamedRus](https://github.com/UnamedRus)). +* Добавлена возможность применять незавершённые мутации (ещё не материализованные фоновым процессом) во время выполнения запросов `SELECT` сразу после отправки. Это можно включить, установив `apply_mutations_on_fly`. [#74877](https://github.com/ClickHouse/ClickHouse/pull/74877) ([Anton Popov](https://github.com/CurtizJ)). +* Реализовано отсечение партиций таблиц `Iceberg` для операций партиционирования с временными преобразованиями. [#72044](https://github.com/ClickHouse/ClickHouse/pull/72044) ([Daniil Ivanik](https://github.com/divanik)). +* Поддержка подколонок в ключе сортировки MergeTree и пропускающих индексах. [#72644](https://github.com/ClickHouse/ClickHouse/pull/72644) ([Pavel Kruglov](https://github.com/Avogar)). +* Добавлена поддержка чтения значений типа `HALF_FLOAT` из `Apache Arrow`/`Parquet`/`ORC` (они считываются как `Float32`). Это закрывает [#72960](https://github.com/ClickHouse/ClickHouse/issues/72960). Имейте в виду, что формат половинной точности IEEE-754 (half float) — это не то же самое, что `BFloat16`. Закрывает [#73835](https://github.com/ClickHouse/ClickHouse/issues/73835). [#73836](https://github.com/ClickHouse/ClickHouse/pull/73836) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Таблица `system.trace_log` будет содержать два новых столбца — `symbols` и `lines`, в которых хранится символизированный стек вызовов. Это позволяет легко собирать и экспортировать профильную информацию. Это поведение управляется параметром конфигурации сервера `symbolize` в разделе `trace_log` и по умолчанию включено. [#73896](https://github.com/ClickHouse/ClickHouse/pull/73896) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Добавлена новая функция `generateSerialID`, которая может использоваться для генерации автоинкрементных значений в таблицах. Продолжение [#64310](https://github.com/ClickHouse/ClickHouse/issues/64310) от [kazalika](https://github.com/kazalika). Закрывает [#62485](https://github.com/ClickHouse/ClickHouse/issues/62485). [#73950](https://github.com/ClickHouse/ClickHouse/pull/73950) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Добавлен синтаксис `query1 PARALLEL WITH query2 PARALLEL WITH query3 ... PARALLEL WITH queryN` для DDL-запросов. Это означает, что запросы `{query1, query2, ... queryN}` могут выполняться параллельно друг с другом (что предпочтительно). [#73983](https://github.com/ClickHouse/ClickHouse/pull/73983) ([Vitaly Baranov](https://github.com/vitlibar)). +* Добавлен кэш в оперативной памяти для десериализованных гранул skipping‑индексов. Это должно ускорить повторные запросы, использующие skipping‑индексы. Размер нового кэша контролируется серверными настройками `skipping_index_cache_size` и `skipping_index_cache_max_entries`. Изначальной мотивацией для добавления кэша были индексы векторного сходства, которые теперь работают значительно быстрее. [#70102](https://github.com/ClickHouse/ClickHouse/pull/70102) ([Robert Schulze](https://github.com/rschu1ze)). +* Теперь встроенный веб‑интерфейс отображает индикатор прогресса во время выполнения запроса. Он позволяет отменять запросы. Он показывает общее количество записей и расширенную информацию о скорости. Таблица может отображаться постепенно по мере поступления данных. Включено HTTP‑сжатие. Отрисовка таблицы стала быстрее. Заголовок таблицы стал закреплённым. Он позволяет выделять ячейки и перемещаться по ним с помощью клавиш со стрелками. Исправлена проблема, при которой контур выделенной ячейки делал её меньше. Ячейки больше не расширяются при наведении мыши, а только при выборе. Момент прекращения отрисовки входящих данных теперь определяется на стороне клиента, а не сервера. Добавлена подсветка групп разрядов для чисел. Оформление интерфейса было обновлено и стало более выразительным. Интерфейс проверяет доступность сервера и корректность учётных данных и отображает версию сервера и время его работы. Значок облака теперь контурный во всех шрифтах, даже в Safari. Большие целые числа внутри вложенных типов данных отображаются лучше. Значения inf/nan отображаются корректно. Типы данных отображаются при наведении курсора на заголовок столбца. [#74204](https://github.com/ClickHouse/ClickHouse/pull/74204) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Добавлена возможность по умолчанию создавать min-max (skipping) индексы для столбцов в таблицах MergeTree с помощью настроек `add_minmax_index_for_numeric_columns` (для числовых столбцов) и `add_minmax_index_for_string_columns` (для строковых столбцов). Пока обе настройки отключены, поэтому поведение ещё не изменилось. [#74266](https://github.com/ClickHouse/ClickHouse/pull/74266) ([Smita Kulkarni](https://github.com/SmitaRKulkarni)). +* Добавлены поля `script_query_number` и `script_line_number` в `system.query_log`, в ClientInfo в нативном протоколе и в серверные логи. Это закрывает [#67542](https://github.com/ClickHouse/ClickHouse/issues/67542). Благодарность [pinsvin00](https://github.com/pinsvin00) за то, что ранее инициировал разработку этой функциональности в [#68133](https://github.com/ClickHouse/ClickHouse/issues/68133). [#74477](https://github.com/ClickHouse/ClickHouse/pull/74477) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Добавлена агрегатная функция `sequenceMatchEvents`, которая возвращает временные метки совпавших событий для самой длинной цепочки событий, удовлетворяющей шаблону. [#72349](https://github.com/ClickHouse/ClickHouse/pull/72349) ([UnamedRus](https://github.com/UnamedRus)). * Добавлена функция `arrayNormalizedGini`. [#72823](https://github.com/ClickHouse/ClickHouse/pull/72823) ([flynn](https://github.com/ucasfl)). -* Добавлена поддержка оператора вычитания для `DateTime64`, что позволяет выполнять вычитание между значениями `DateTime64`, а также `DateTime`. [#74482](https://github.com/ClickHouse/ClickHouse/pull/74482) ([Li Yin](https://github.com/liyinsg)). - - +* Добавлена поддержка оператора `-` для `DateTime64`, что позволяет вычитать друг из друга значения типов `DateTime64` и `DateTime`. [#74482](https://github.com/ClickHouse/ClickHouse/pull/74482) ([Li Yin](https://github.com/liyinsg)). #### Экспериментальные возможности -* Тип данных `BFloat16` готов к использованию в продуктивной среде. [#73840](https://github.com/ClickHouse/ClickHouse/pull/73840) ([Alexey Milovidov](https://github.com/alexey-milovidov)). - +* Тип данных `BFloat16` готов к промышленной эксплуатации. [#73840](https://github.com/ClickHouse/ClickHouse/pull/73840) ([Alexey Milovidov](https://github.com/alexey-milovidov)). #### Повышение производительности -* Оптимизирована функция `indexHint`. Теперь столбцы, которые используются только как аргументы функции `indexHint`, не читаются из таблицы. [#74314](https://github.com/ClickHouse/ClickHouse/pull/74314) ([Anton Popov](https://github.com/CurtizJ)). Если функция `indexHint` — ключевой элемент вашей корпоративной архитектуры данных, эта оптимизация спасёт вам жизнь. -* Более точный учет настройки `max_joined_block_size_rows` для JOIN-алгоритма `parallel_hash`. Помогает избежать повышенного потребления памяти по сравнению с алгоритмом `hash`. [#74630](https://github.com/ClickHouse/ClickHouse/pull/74630) ([Nikita Taranov](https://github.com/nickitat)). -* Поддерживается оптимизация проталкивания предикатов (predicate push down) на уровне плана запроса для шага `MergingAggregated`. Это повышает производительность некоторых запросов при использовании анализатора. [#74073](https://github.com/ClickHouse/ClickHouse/pull/74073) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). -* Разбиение блоков левой таблицы по хэшу было исключено из фазы probe алгоритма `parallel_hash` JOIN. [#73089](https://github.com/ClickHouse/ClickHouse/pull/73089) ([Nikita Taranov](https://github.com/nickitat)). -* Оптимизирован формат ввода RowBinary. Закрывает [#63805](https://github.com/ClickHouse/ClickHouse/issues/63805). [#65059](https://github.com/ClickHouse/ClickHouse/pull/65059) ([Pavel Kruglov](https://github.com/Avogar)). -* Записывайте части с уровнем 1, если включен `optimize_on_insert`. Это позволяет использовать несколько оптимизаций запросов с `FINAL` для только что записанных частей. [#73132](https://github.com/ClickHouse/ClickHouse/pull/73132) ([Anton Popov](https://github.com/CurtizJ)). +* Оптимизирована функция `indexHint`. Теперь столбцы, которые используются только как аргументы функции `indexHint`, не читаются из таблицы. [#74314](https://github.com/ClickHouse/ClickHouse/pull/74314) ([Anton Popov](https://github.com/CurtizJ)). Если функция `indexHint` — центральный элемент вашей корпоративной архитектуры данных, эта оптимизация спасёт вам жизнь. +* Более точный учет настройки `max_joined_block_size_rows` для алгоритма JOIN `parallel_hash`, что помогает избежать повышенного потребления памяти по сравнению с алгоритмом `hash`. [#74630](https://github.com/ClickHouse/ClickHouse/pull/74630) ([Nikita Taranov](https://github.com/nickitat)). +* Реализована оптимизация проталкивания предикатов на уровне плана запроса для шага `MergingAggregated`. Это повышает производительность некоторых запросов при использовании анализатора. [#74073](https://github.com/ClickHouse/ClickHouse/pull/74073) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). +* Разбиение блоков левой таблицы по хэшу больше не выполняется на фазе probe JOIN-алгоритма `parallel_hash`. [#73089](https://github.com/ClickHouse/ClickHouse/pull/73089) ([Nikita Taranov](https://github.com/nickitat)). +* Оптимизирован формат входных данных RowBinary. Закрывает [#63805](https://github.com/ClickHouse/ClickHouse/issues/63805). [#65059](https://github.com/ClickHouse/ClickHouse/pull/65059) ([Pavel Kruglov](https://github.com/Avogar)). +* Записывать части с уровнем 1, если `optimize_on_insert` включён. Это позволяет использовать ряд оптимизаций запросов с `FINAL` для только что записанных частей. [#73132](https://github.com/ClickHouse/ClickHouse/pull/73132) ([Anton Popov](https://github.com/CurtizJ)). * Ускорена десериализация строк за счёт некоторых низкоуровневых оптимизаций. [#65948](https://github.com/ClickHouse/ClickHouse/pull/65948) ([Nikita Taranov](https://github.com/nickitat)). -* При выполнении сравнения на равенство между записями, например при слияниях, начинайте сравнивать строки с тех столбцов, значения в которых с наибольшей вероятностью отличаются. [#63780](https://github.com/ClickHouse/ClickHouse/pull/63780) ([UnamedRus](https://github.com/UnamedRus)). -* Повышена производительность операции grace hash join за счет повторного упорядочения правой таблицы соединения по ключам. [#72237](https://github.com/ClickHouse/ClickHouse/pull/72237) ([kevinyhzou](https://github.com/KevinyhZou)). -* Разрешить `arrayROCAUC` и `arrayAUCPR` вычислять частичную площадь под всей кривой, чтобы их расчёт можно было распараллелить на огромных наборах данных. [#72904](https://github.com/ClickHouse/ClickHouse/pull/72904) ([Emmanuel](https://github.com/emmanuelsdias)). +* При выполнении сравнения на равенство между записями, например во время слияний, начинайте сравнивать строки с тех столбцов, значения которых с наибольшей вероятностью различаются. [#63780](https://github.com/ClickHouse/ClickHouse/pull/63780) ([UnamedRus](https://github.com/UnamedRus)). +* Улучшена производительность операции grace hash join за счёт переупорядочивания правой таблицы соединения по ключам. [#72237](https://github.com/ClickHouse/ClickHouse/pull/72237) ([kevinyhzou](https://github.com/KevinyhZou)). +* Разрешить `arrayROCAUC` и `arrayAUCPR` вычислять частичную площадь под всей кривой, что позволит распараллелить вычисления на больших наборах данных. [#72904](https://github.com/ClickHouse/ClickHouse/pull/72904) ([Emmanuel](https://github.com/emmanuelsdias)). * Избегайте создания слишком большого количества простаивающих потоков. [#72920](https://github.com/ClickHouse/ClickHouse/pull/72920) ([Guo Wangyang](https://github.com/guowangy)). -* Не перечислять ключи в blob-хранилище, если в табличной функции используется только раскрытие фигурных скобок. Закрывает [#73333](https://github.com/ClickHouse/ClickHouse/issues/73333). [#73518](https://github.com/ClickHouse/ClickHouse/pull/73518) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* Оптимизация вычислений по принципу короткого замыкания для функций, выполняемых над аргументами Nullable. [#73820](https://github.com/ClickHouse/ClickHouse/pull/73820) ([李扬](https://github.com/taiyang-li)). -* Не применять `maskedExecute` к столбцам, не являющимся функциями; улучшена производительность выполнения по принципу короткого замыкания. [#73965](https://github.com/ClickHouse/ClickHouse/pull/73965) ([lgbo](https://github.com/lgbo-ustc)). -* Отключите автоматическое определение заголовков во входных форматах для `Kafka`/`NATS`/`RabbitMQ`/`FileLog` для повышения производительности. [#74006](https://github.com/ClickHouse/ClickHouse/pull/74006) ([Azat Khuzhin](https://github.com/azat)). -* Выполнять конвейер с более высокой степенью параллелизма после агрегации с использованием GROUPING SETS. [#74082](https://github.com/ClickHouse/ClickHouse/pull/74082) ([Nikita Taranov](https://github.com/nickitat)). +* Не перечислять ключи blob-хранилища, если в табличной функции используется только расширение фигурных скобок. Закрывает [#73333](https://github.com/ClickHouse/ClickHouse/issues/73333). [#73518](https://github.com/ClickHouse/ClickHouse/pull/73518) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* Оптимизация вычислений с коротким замыканием для функций, выполняемых над аргументами Nullable. [#73820](https://github.com/ClickHouse/ClickHouse/pull/73820) ([李扬](https://github.com/taiyang-li)). +* Не применять `maskedExecute` к столбцам, не являющимся функциями, улучшена производительность укороченного (short-circuit) выполнения. [#73965](https://github.com/ClickHouse/ClickHouse/pull/73965) ([lgbo](https://github.com/lgbo-ustc)). +* Отключено автоматическое определение заголовков во входных форматах для `Kafka`/`NATS`/`RabbitMQ`/`FileLog` для повышения производительности. [#74006](https://github.com/ClickHouse/ClickHouse/pull/74006) ([Azat Khuzhin](https://github.com/azat)). +* Выполнять конвейер с большей степенью параллелизма после агрегации с GROUPING SETS. [#74082](https://github.com/ClickHouse/ClickHouse/pull/74082) ([Nikita Taranov](https://github.com/nickitat)). * Сокращена критическая секция в `MergeTreeReadPool`. [#74202](https://github.com/ClickHouse/ClickHouse/pull/74202) ([Guo Wangyang](https://github.com/guowangy)). -* Повышена производительность параллельных реплик. Десериализация пакетов на инициаторе запроса для пакетов, не относящихся к протоколу параллельных реплик, теперь всегда выполняется в потоке обработки конвейера. Ранее это могло происходить в потоке, отвечающем за диспетчеризацию конвейера, что могло снижать отзывчивость инициатора и задерживать выполнение конвейера. [#74398](https://github.com/ClickHouse/ClickHouse/pull/74398) ([Igor Nikonov](https://github.com/devcrafter)). -* Улучшена производительность крупных многокомандных запросов в Keeper. [#74849](https://github.com/ClickHouse/ClickHouse/pull/74849) ([Antonio Andelic](https://github.com/antonio2368)). -* Используйте обёртки для логирования по значению и не размещайте их в куче. [#74034](https://github.com/ClickHouse/ClickHouse/pull/74034) ([Mikhail Artemenko](https://github.com/Michicosun)). -* Повторно устанавливать соединения с репликами словарей MySQL и Postgres в фоновом режиме, чтобы это не приводило к задержкам запросов к соответствующим словарям. [#71101](https://github.com/ClickHouse/ClickHouse/pull/71101) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* Параллельные реплики использовали историческую информацию о доступности реплик для улучшения выбора реплики, но не обновляли счётчик ошибок реплики, когда подключение было недоступно. Этот PR обновляет счётчик ошибок реплики при её недоступности. [#72666](https://github.com/ClickHouse/ClickHouse/pull/72666) ([zoomxi](https://github.com/zoomxi)). -* Добавлена настройка MergeTree `materialize_skip_indexes_on_merge`, которая подавляет создание skip-индексов во время слияний. Это позволяет пользователям явно управлять тем, когда создаются skip-индексы (через `ALTER TABLE [..] MATERIALIZE INDEX [...]`). Это может быть полезно, если построение skip-индексов дорого обходится (например, индексов векторного сходства). [#74401](https://github.com/ClickHouse/ClickHouse/pull/74401) ([Robert Schulze](https://github.com/rschu1ze)). +* Улучшена производительность параллельных реплик. Десериализация пакетов на инициаторе запроса для пакетов, не связанных с протоколом параллельных реплик, теперь всегда выполняется в потоке конвейера. Ранее десериализация могла выполняться в потоке, отвечающем за планирование конвейера, что могло снижать отзывчивость инициатора и задерживать выполнение конвейера. [#74398](https://github.com/ClickHouse/ClickHouse/pull/74398) ([Igor Nikonov](https://github.com/devcrafter)). +* Повышена производительность крупных multi-запросов в Keeper. [#74849](https://github.com/ClickHouse/ClickHouse/pull/74849) ([Antonio Andelic](https://github.com/antonio2368)). +* Используйте обёртки для логов как значения и не выделяйте их в куче. [#74034](https://github.com/ClickHouse/ClickHouse/pull/74034) ([Mikhail Artemenko](https://github.com/Michicosun)). +* Восстанавливать подключения к репликам словарей MySQL и Postgres в фоновом режиме, чтобы не задерживать выполнение запросов к соответствующим словарям. [#71101](https://github.com/ClickHouse/ClickHouse/pull/71101) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* Параллельные реплики использовали исторические данные о доступности реплик для оптимизации выбора реплики, но не увеличивали счетчик ошибок, когда подключение было недоступно. В этом PR счетчик ошибок реплики обновляется при её недоступности. [#72666](https://github.com/ClickHouse/ClickHouse/pull/72666) ([zoomxi](https://github.com/zoomxi)). +* Добавлена настройка MergeTree `materialize_skip_indexes_on_merge`, которая отключает создание skip‑индексов во время слияний. Это позволяет пользователям явно управлять тем, когда создаются skip‑индексы (через `ALTER TABLE [..] MATERIALIZE INDEX [...]`). Это может быть полезно, если создание skip‑индексов дорого (например, для векторных индексов сходства). [#74401](https://github.com/ClickHouse/ClickHouse/pull/74401) ([Robert Schulze](https://github.com/rschu1ze)). * Оптимизированы запросы к Keeper в Storage(S3/Azure)Queue. [#74410](https://github.com/ClickHouse/ClickHouse/pull/74410) ([Kseniia Sumarokova](https://github.com/kssenii)). [#74538](https://github.com/ClickHouse/ClickHouse/pull/74538) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Теперь по умолчанию используется до `1000` параллельных реплик. [#74504](https://github.com/ClickHouse/ClickHouse/pull/74504) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* По умолчанию используется до `1000` параллельных реплик. [#74504](https://github.com/ClickHouse/ClickHouse/pull/74504) ([Konstantin Bogdanov](https://github.com/thevar1able)). * Улучшено повторное использование HTTP-сессий при чтении с диска S3 ([#72401](https://github.com/ClickHouse/ClickHouse/issues/72401)). [#74548](https://github.com/ClickHouse/ClickHouse/pull/74548) ([Julian Maicher](https://github.com/jmaicher)). +#### Улучшения - - - -#### Улучшение - -* Добавлена поддержка секции SETTINGS в запросе CREATE TABLE с неявно заданным ENGINE, а также возможность совместного использования настроек движка и настроек запроса. [#73120](https://github.com/ClickHouse/ClickHouse/pull/73120) ([Raúl Marín](https://github.com/Algunenano)). -* Включить `use_hive_partitioning` по умолчанию. [#71636](https://github.com/ClickHouse/ClickHouse/pull/71636) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* Реализована поддержка `CAST` и `ALTER` между типами `JSON` с разными параметрами. [#72303](https://github.com/ClickHouse/ClickHouse/pull/72303) ([Pavel Kruglov](https://github.com/Avogar)). -* Добавлена поддержка сравнения значений столбца JSON на равенство. [#72991](https://github.com/ClickHouse/ClickHouse/pull/72991) ([Pavel Kruglov](https://github.com/Avogar)). -* Улучшено форматирование идентификаторов с JSON-подстолбцами для избежания лишних обратных кавычек. [#73085](https://github.com/ClickHouse/ClickHouse/pull/73085) ([Pavel Kruglov](https://github.com/Avogar)). -* Улучшения интерактивных метрик. Исправлена проблема, из-за которой метрики из параллельных реплик отображались не полностью. Метрики отображаются сначала по времени последнего обновления, затем в лексикографическом порядке по имени. Устаревшие метрики не отображаются. [#71631](https://github.com/ClickHouse/ClickHouse/pull/71631) ([Julia Kartseva](https://github.com/jkartseva)). -* Формат вывода JSON по умолчанию сделан красиво отформатированным. Добавлена новая настройка `output_format_json_pretty_print` для управления этим поведением, она включена по умолчанию. [#72148](https://github.com/ClickHouse/ClickHouse/pull/72148) ([Pavel Kruglov](https://github.com/Avogar)). +* Добавлена поддержка использования SETTINGS в запросе CREATE TABLE с неявно указанным ENGINE и одновременного использования настроек движка и настроек запроса. [#73120](https://github.com/ClickHouse/ClickHouse/pull/73120) ([Raúl Marín](https://github.com/Algunenano)). +* По умолчанию включена опция `use_hive_partitioning`. [#71636](https://github.com/ClickHouse/ClickHouse/pull/71636) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* Добавлена поддержка операций CAST и ALTER между типами JSON с различными параметрами. [#72303](https://github.com/ClickHouse/ClickHouse/pull/72303) ([Pavel Kruglov](https://github.com/Avogar)). +* Добавлена поддержка сравнения на равенство для значений столбца JSON. [#72991](https://github.com/ClickHouse/ClickHouse/pull/72991) ([Pavel Kruglov](https://github.com/Avogar)). +* Улучшено форматирование идентификаторов с JSON-подстолбцами, чтобы избежать лишних обратных кавычек. [#73085](https://github.com/ClickHouse/ClickHouse/pull/73085) ([Pavel Kruglov](https://github.com/Avogar)). +* Улучшена интерактивная работа с метриками. Исправлено неполное отображение метрик от параллельных реплик. Метрики теперь отображаются в порядке самого недавнего обновления, затем в лексикографическом порядке по имени. Устаревшие метрики не отображаются. [#71631](https://github.com/ClickHouse/ClickHouse/pull/71631) ([Julia Kartseva](https://github.com/jkartseva)). +* Формат вывода JSON теперь по умолчанию удобочитаемый (pretty). Добавлена новая настройка `output_format_json_pretty_print` для управления этим поведением, по умолчанию она включена. [#72148](https://github.com/ClickHouse/ClickHouse/pull/72148) ([Pavel Kruglov](https://github.com/Avogar)). * Разрешить `LowCardinality(UUID)` по умолчанию. На практике это оказалось удобным для клиентов ClickHouse Cloud. [#73826](https://github.com/ClickHouse/ClickHouse/pull/73826) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Улучшено сообщение при установке. [#73827](https://github.com/ClickHouse/ClickHouse/pull/73827) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Улучшено сообщение о сбросе пароля в ClickHouse Cloud. [#73831](https://github.com/ClickHouse/ClickHouse/pull/73831) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Улучшено сообщение об ошибке для таблицы File, которая не поддерживает добавление данных в файл. [#73832](https://github.com/ClickHouse/ClickHouse/pull/73832) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Запрашивать подтверждение, когда пользователь по ошибке пытается вывести бинарный формат (такой как Native, Parquet, Avro) в терминал. Это закрывает [#59524](https://github.com/ClickHouse/ClickHouse/issues/59524). [#73833](https://github.com/ClickHouse/ClickHouse/pull/73833) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Подсвечивать пробелы в конце строк в форматах Pretty и Vertical в терминале для лучшей наглядности. Эта функция управляется настройкой `output_format_pretty_highlight_trailing_spaces`. Первоначальная реализация — [Braden Burns](https://github.com/bradenburns) из задачи [#72996](https://github.com/ClickHouse/ClickHouse/issues/72996). Закрывает задачу [#71590](https://github.com/ClickHouse/ClickHouse/issues/71590). [#73847](https://github.com/ClickHouse/ClickHouse/pull/73847) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* `clickhouse-client` и `clickhouse-local` теперь автоматически определяют сжатие стандартного ввода (stdin) при его перенаправлении из файла. Это закрывает [#70865](https://github.com/ClickHouse/ClickHouse/issues/70865). [#73848](https://github.com/ClickHouse/ClickHouse/pull/73848) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* По умолчанию в форматах вывода `pretty` слишком длинные имена столбцов обрезаются. Это поведение управляется настройками `output_format_pretty_max_column_name_width_cut_to` и `output_format_pretty_max_column_name_width_min_chars_to_cut`. Это продолжение работы [tanmaydatta](https://github.com/tanmaydatta) в [#66502](https://github.com/ClickHouse/ClickHouse/issues/66502). Тем самым закрывается [#65968](https://github.com/ClickHouse/ClickHouse/issues/65968). [#73851](https://github.com/ClickHouse/ClickHouse/pull/73851) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Сделать форматы `Pretty` более удобочитаемыми: объединять блоки, если с момента вывода предыдущего блока прошло немного времени. Поведение управляется новыми настройками `output_format_pretty_squash_consecutive_ms` (по умолчанию 50 мс) и `output_format_pretty_squash_max_wait_ms` (по умолчанию 1000 мс). Продолжение [#49537](https://github.com/ClickHouse/ClickHouse/issues/49537). Закрывает [#49153](https://github.com/ClickHouse/ClickHouse/issues/49153). [#73852](https://github.com/ClickHouse/ClickHouse/pull/73852) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Добавлена метрика числа исходных частей, которые в данный момент сливаются. Это закрывает [#70809](https://github.com/ClickHouse/ClickHouse/issues/70809). [#73868](https://github.com/ClickHouse/ClickHouse/pull/73868) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Улучшено сообщение, выводимое при установке. [#73827](https://github.com/ClickHouse/ClickHouse/pull/73827) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Улучшено сообщение при сбросе пароля для ClickHouse Cloud. [#73831](https://github.com/ClickHouse/ClickHouse/pull/73831) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Улучшено сообщение об ошибке для таблицы File, которая не поддерживает дозапись в файл. [#73832](https://github.com/ClickHouse/ClickHouse/pull/73832) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Запрашивать подтверждение, если пользователь случайно пытается вывести двоичный формат (например, Native, Parquet, Avro) в терминал. Это закрывает [#59524](https://github.com/ClickHouse/ClickHouse/issues/59524). [#73833](https://github.com/ClickHouse/ClickHouse/pull/73833) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Подсвечивать пробелы в конце строк в форматах Pretty и Vertical в терминале для лучшей наглядности. Это поведение управляется настройкой `output_format_pretty_highlight_trailing_spaces`. Первоначальную реализацию предложил [Braden Burns](https://github.com/bradenburns) в задаче [#72996](https://github.com/ClickHouse/ClickHouse/issues/72996). Закрывает [#71590](https://github.com/ClickHouse/ClickHouse/issues/71590). [#73847](https://github.com/ClickHouse/ClickHouse/pull/73847) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* `clickhouse-client` и `clickhouse-local` будут автоматически определять тип сжатия stdin, когда он перенаправлен из файла. Это устраняет проблему [#70865](https://github.com/ClickHouse/ClickHouse/issues/70865). [#73848](https://github.com/ClickHouse/ClickHouse/pull/73848) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* По умолчанию слишком длинные имена столбцов в pretty-форматах обрезаются. Это поведение настраивается параметрами `output_format_pretty_max_column_name_width_cut_to` и `output_format_pretty_max_column_name_width_min_chars_to_cut`. Продолжение работы [tanmaydatta](https://github.com/tanmaydatta) в [#66502](https://github.com/ClickHouse/ClickHouse/issues/66502). Закрывает [#65968](https://github.com/ClickHouse/ClickHouse/issues/65968). [#73851](https://github.com/ClickHouse/ClickHouse/pull/73851) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Форматы `Pretty` теперь отображаются более наглядно: блоки объединяются, если с момента вывода предыдущего блока прошло мало времени. Это контролируется новыми настройками `output_format_pretty_squash_consecutive_ms` (по умолчанию 50 мс) и `output_format_pretty_squash_max_wait_ms` (по умолчанию 1000 мс). Продолжение [#49537](https://github.com/ClickHouse/ClickHouse/issues/49537). Закрывает [#49153](https://github.com/ClickHouse/ClickHouse/issues/49153). [#73852](https://github.com/ClickHouse/ClickHouse/pull/73852) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Добавлена метрика числа исходных частей, которые в данный момент сливаются. Исправляет [#70809](https://github.com/ClickHouse/ClickHouse/issues/70809). [#73868](https://github.com/ClickHouse/ClickHouse/pull/73868) ([Alexey Milovidov](https://github.com/alexey-milovidov)). * Подсвечивать столбцы в формате `Vertical` при выводе в терминал. Это можно отключить с помощью настройки `output_format_pretty_color`. [#73898](https://github.com/ClickHouse/ClickHouse/pull/73898) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Улучшена совместимость с MySQL до уровня, при котором `mysqlsh` (функциональная CLI-консоль MySQL от Oracle) может подключаться к ClickHouse. Это необходимо для упрощения тестирования. [#73912](https://github.com/ClickHouse/ClickHouse/pull/73912) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Форматы pretty могут отображать многострочные значения в ячейке таблицы, что улучшает читаемость. Это поведение включено по умолчанию и управляется настройкой `output_format_pretty_multiline_fields`. Продолжение работы [Volodyachan](https://github.com/Volodyachan) в [#64094](https://github.com/ClickHouse/ClickHouse/issues/64094). Это закрывает [#56912](https://github.com/ClickHouse/ClickHouse/issues/56912). [#74032](https://github.com/ClickHouse/ClickHouse/pull/74032) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* HTTP-заголовки X-ClickHouse теперь доступны JavaScript в браузере. Это упрощает разработку приложений. [#74180](https://github.com/ClickHouse/ClickHouse/pull/74180) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Формат `JSONEachRowWithProgress` включает события с метаданными, а также totals и extremes. Он также включает `rows_before_limit_at_least` и `rows_before_aggregation`. Формат корректно выводит исключение, если оно возникает после частичных результатов. Теперь прогресс включает прошедшие наносекунды. В конце генерируется одно финальное событие прогресса. Прогресс во время выполнения запроса будет выводиться не чаще, чем задано параметром `interactive_delay`. [#74181](https://github.com/ClickHouse/ClickHouse/pull/74181) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Песочные часы в интерфейсе Play UI теперь будут плавно вращаться. [#74182](https://github.com/ClickHouse/ClickHouse/pull/74182) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Даже если HTTP-ответ сжат, отправляйте пакеты сразу, как только они приходят. Это позволяет браузеру получать пакеты прогресса и сжатые данные. [#74201](https://github.com/ClickHouse/ClickHouse/pull/74201) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Если число выходных записей больше N = `output_format_pretty_max_rows`, то вместо отображения только первых N строк таблица будет обрезана посередине: будут показаны N/2 первых строк и N/2 последних строк. Продолжение [#64200](https://github.com/ClickHouse/ClickHouse/issues/64200). Закрывает [#59502](https://github.com/ClickHouse/ClickHouse/issues/59502). [#73929](https://github.com/ClickHouse/ClickHouse/pull/73929) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Добавлена поддержка более общего алгоритма планирования соединений при включённом алгоритме хеш-соединения. [#71926](https://github.com/ClickHouse/ClickHouse/pull/71926) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). -* Добавлена возможность создавать индекс bloom_filter для столбцов с типом данных `DateTime64`. [#66416](https://github.com/ClickHouse/ClickHouse/pull/66416) ([Yutong Xiao](https://github.com/YutSean)). -* Когда одновременно включены параметры `min_age_to_force_merge_seconds` и `min_age_to_force_merge_on_partition_only`, слияние частей будет игнорировать ограничение по максимальному размеру в байтах. [#73656](https://github.com/ClickHouse/ClickHouse/pull/73656) ([Kai Zhu](https://github.com/nauu)). -* Добавлены HTTP-заголовки в таблицу логов спанов OpenTelemetry для повышения трассируемости. [#70516](https://github.com/ClickHouse/ClickHouse/pull/70516) ([jonymohajanGmail](https://github.com/jonymohajanGmail)). -* Поддержка записи файлов формата `orc` с использованием произвольного часового пояса, а не только часового пояса `GMT`. [#70615](https://github.com/ClickHouse/ClickHouse/pull/70615) ([kevinyhzou](https://github.com/KevinyhZou)). -* Учитывать настройки планировщика ввода-вывода при создании резервных копий между облаками. [#71093](https://github.com/ClickHouse/ClickHouse/pull/71093) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). -* Добавлен псевдоним столбца `metric` — `name` — в `system.asynchronous_metrics`. [#71164](https://github.com/ClickHouse/ClickHouse/pull/71164) ([megao](https://github.com/jetgm)). -* По историческим причинам запрос `ALTER TABLE MOVE PARTITION TO TABLE` проверял права `SELECT` и `ALTER DELETE` вместо отдельного типа доступа `ALTER_MOVE_PARTITION`. Этот PR начинает использовать этот тип доступа. Для совместимости это разрешение также будет неявно предоставляться, если выданы `SELECT` и `ALTER DELETE`, но такое поведение будет удалено в будущих релизах. Закрывает [#16403](https://github.com/ClickHouse/ClickHouse/issues/16403). [#71632](https://github.com/ClickHouse/ClickHouse/pull/71632) ([pufit](https://github.com/pufit)). +* Улучшена совместимость с MySQL до уровня, при котором `mysqlsh` (расширенный CLI для MySQL от Oracle) теперь может подключаться к ClickHouse. Это необходимо для упрощения тестирования. [#73912](https://github.com/ClickHouse/ClickHouse/pull/73912) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Форматы pretty могут отображать многострочные поля внутри ячейки таблицы, что повышает удобочитаемость. Это поведение включено по умолчанию и настраивается параметром `output_format_pretty_multiline_fields`. Продолжение работы [Volodyachan](https://github.com/Volodyachan) в [#64094](https://github.com/ClickHouse/ClickHouse/issues/64094). Закрывает [#56912](https://github.com/ClickHouse/ClickHouse/issues/56912). [#74032](https://github.com/ClickHouse/ClickHouse/pull/74032) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Сделать HTTP-заголовки X-ClickHouse доступными JavaScript в браузере. Это упрощает разработку приложений. [#74180](https://github.com/ClickHouse/ClickHouse/pull/74180) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Формат `JSONEachRowWithProgress` включает события с метаданными, а также блоки `totals` и `extremes`. Он также включает `rows_before_limit_at_least` и `rows_before_aggregation`. Формат корректно выводит исключение, если оно возникает после частичных результатов. В информацию о прогрессе теперь включается затраченное время в наносекундах. В конце генерируется одно финальное событие прогресса. Прогресс во время выполнения запроса будет выводиться не чаще, чем это задано значением настройки `interactive_delay`. [#74181](https://github.com/ClickHouse/ClickHouse/pull/74181) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Иконка песочных часов в Play UI теперь будет плавно вращаться. [#74182](https://github.com/ClickHouse/ClickHouse/pull/74182) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Даже если HTTP-ответ сжат, отправляйте пакеты, как только они поступают. Это позволяет браузеру получать пакеты прогресса и сжатые данные. [#74201](https://github.com/ClickHouse/ClickHouse/pull/74201) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Если число выводимых записей больше N = `output_format_pretty_max_rows`, вместо отображения только первых N строк мы обрежем результирующую таблицу посередине, показывая N/2 первых строк и N/2 последних строк. Продолжение [#64200](https://github.com/ClickHouse/ClickHouse/issues/64200). Это закрывает [#59502](https://github.com/ClickHouse/ClickHouse/issues/59502). [#73929](https://github.com/ClickHouse/ClickHouse/pull/73929) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Разрешено использование более общего алгоритма планирования соединений при включённом алгоритме hash join. [#71926](https://github.com/ClickHouse/ClickHouse/pull/71926) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). +* Добавлена возможность создавать индекс bloom_filter на столбцах с типом данных `DateTime64`. [#66416](https://github.com/ClickHouse/ClickHouse/pull/66416) ([Yutong Xiao](https://github.com/YutSean)). +* Когда одновременно включены `min_age_to_force_merge_seconds` и `min_age_to_force_merge_on_partition_only`, слияние частей будет игнорировать лимит на максимальный объём в байтах. [#73656](https://github.com/ClickHouse/ClickHouse/pull/73656) ([Kai Zhu](https://github.com/nauu)). +* Добавлены HTTP-заголовки в таблицу логов спанов OpenTelemetry для улучшения трассировки. [#70516](https://github.com/ClickHouse/ClickHouse/pull/70516) ([jonymohajanGmail](https://github.com/jonymohajanGmail)). +* Добавлена поддержка записи файлов `orc` в произвольном часовом поясе, а не только в часовом поясе `GMT`. [#70615](https://github.com/ClickHouse/ClickHouse/pull/70615) ([kevinyhzou](https://github.com/KevinyhZou)). +* Учитывать настройки планирования ввода-вывода при записи резервных копий в разных облаках. [#71093](https://github.com/ClickHouse/ClickHouse/pull/71093) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). +* Добавлен псевдоним `name` для столбца `metric` в `system.asynchronous_metrics`. [#71164](https://github.com/ClickHouse/ClickHouse/pull/71164) ([megao](https://github.com/jetgm)). +* Исторически по какой-то причине запрос `ALTER TABLE MOVE PARTITION TO TABLE` проверял права `SELECT` и `ALTER DELETE` вместо отдельного `ALTER_MOVE_PARTITION`. В этом PR используется именно этот тип доступа. Для совместимости это разрешение также будет неявно предоставляться, если предоставлены `SELECT` и `ALTER DELETE`, но в будущих релизах такое поведение будет отменено. Закрывает [#16403](https://github.com/ClickHouse/ClickHouse/issues/16403). [#71632](https://github.com/ClickHouse/ClickHouse/pull/71632) ([pufit](https://github.com/pufit)). * Выбрасывать исключение при попытке материализовать столбец, входящий в ключ сортировки, вместо того чтобы допускать нарушение порядка сортировки. [#71891](https://github.com/ClickHouse/ClickHouse/pull/71891) ([Peter Nguyen](https://github.com/petern48)). -* Скрывать секреты в выводе `EXPLAIN QUERY TREE`. [#72025](https://github.com/ClickHouse/ClickHouse/pull/72025) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* Реализована поддержка логических целочисленных типов Parquet в «native» reader. [#72105](https://github.com/ClickHouse/ClickHouse/pull/72105) ([Arthur Passos](https://github.com/arthurpassos)). -* Интерактивно запрашивать учетные данные через браузер, если для пользователя по умолчанию требуется пароль. В предыдущих версиях сервер возвращал HTTP 403; теперь он возвращает HTTP 401. [#72198](https://github.com/ClickHouse/ClickHouse/pull/72198) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Типы доступа `CREATE_USER`, `ALTER_USER`, `DROP_USER`, `CREATE_ROLE`, `ALTER_ROLE`, `DROP_ROLE` преобразованы из глобальных в параметризованные. Это означает, что пользователи теперь могут более точно выдавать привилегии на управление доступом. [#72246](https://github.com/ClickHouse/ClickHouse/pull/72246) ([pufit](https://github.com/pufit)). -* Добавлен столбец `latest_fail_error_code_name` в таблицу `system.mutations`. Этот столбец нужен для введения новой метрики по застрявшим мутациям и его использования для построения графиков ошибок, возникающих в облаке, а также, при необходимости, для добавления нового, менее шумного оповещения. [#72398](https://github.com/ClickHouse/ClickHouse/pull/72398) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). -* Уменьшено количество операций выделения памяти в запросе `ATTACH PARTITION`. [#72583](https://github.com/ClickHouse/ClickHouse/pull/72583) ([Константин Морозов](https://github.com/k-morozov)). -* Лимит `max_bytes_before_external_sort` теперь зависит от общего потребления памяти запросом (ранее он соответствовал количеству байт в сортируемом блоке для одного потока сортировки, теперь он имеет тот же смысл, что и `max_bytes_before_external_group_by` — это общий лимит памяти для всего запроса для всех потоков). Также добавлена ещё одна настройка для контроля размера блоков на диске — `min_external_sort_block_bytes`. [#72598](https://github.com/ClickHouse/ClickHouse/pull/72598) ([Azat Khuzhin](https://github.com/azat)). -* Игнорировать ограничения по памяти со стороны сборщика трассировок. [#72606](https://github.com/ClickHouse/ClickHouse/pull/72606) ([Azat Khuzhin](https://github.com/azat)). -* Добавлены параметры сервера `dictionaries_lazy_load` и `wait_dictionaries_load_at_startup` в `system.server_settings`. [#72664](https://github.com/ClickHouse/ClickHouse/pull/72664) ([Christoph Wurm](https://github.com/cwurm)). -* Добавляет настройку `max_backup_bandwidth` в список настроек, которые можно задавать в запросах `BACKUP`/`RESTORE`. [#72665](https://github.com/ClickHouse/ClickHouse/pull/72665) ([Christoph Wurm](https://github.com/cwurm)). -* Понижен уровень логирования для сообщений о появляющихся реплицированных частях в движке ReplicatedMergeTree, чтобы сократить объём логов, генерируемых в реплицированном кластере. [#72876](https://github.com/ClickHouse/ClickHouse/pull/72876) ([mor-akamai](https://github.com/morkalfon)). -* Улучшено выделение общих выражений в дизъюнкциях. Добавлена возможность упрощать результирующее фильтрующее выражение, даже если нет общего подвыражения для всех дизъюнктов. Продолжение [#71537](https://github.com/ClickHouse/ClickHouse/issues/71537). [#73271](https://github.com/ClickHouse/ClickHouse/pull/73271) ([Dmitry Novik](https://github.com/novikd)). -* В хранилищах `S3Queue`/`AzureQueue` теперь можно добавлять настройки для таблиц, которые были созданы без них. [#73283](https://github.com/ClickHouse/ClickHouse/pull/73283) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Скрытие секретов в `EXPLAIN QUERY TREE`. [#72025](https://github.com/ClickHouse/ClickHouse/pull/72025) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* Добавлена поддержка логических целочисленных типов Parquet в «нативном» ридере. [#72105](https://github.com/ClickHouse/ClickHouse/pull/72105) ([Arthur Passos](https://github.com/arthurpassos)). +* Теперь в браузере интерактивно запрашиваются учетные данные, если для пользователя по умолчанию требуется пароль. В предыдущих версиях сервер возвращал HTTP 403; теперь он возвращает HTTP 401. [#72198](https://github.com/ClickHouse/ClickHouse/pull/72198) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Преобразованы типы доступа `CREATE_USER`, `ALTER_USER`, `DROP_USER`, `CREATE_ROLE`, `ALTER_ROLE`, `DROP_ROLE` из глобальных в параметризованные. Теперь пользователи могут более точно выдавать права на управление доступом. [#72246](https://github.com/ClickHouse/ClickHouse/pull/72246) ([pufit](https://github.com/pufit)). +* Добавлен столбец `latest_fail_error_code_name` в `system.mutations`. Этот столбец необходим для введения новой метрики для «зависших» мутаций и использования ее при построении графиков ошибок, возникающих в облаке, а также, при необходимости, для добавления нового, менее «шумного» оповещения. [#72398](https://github.com/ClickHouse/ClickHouse/pull/72398) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). +* Уменьшено количество выделений памяти в запросе `ATTACH PARTITION`. [#72583](https://github.com/ClickHouse/ClickHouse/pull/72583) ([Konstantин Morozov](https://github.com/k-morozov)). +* Сделано так, что лимит `max_bytes_before_external_sort` теперь зависит от общего потребления памяти запросом (ранее он соответствовал количеству байт в блоке сортировки для одного потока сортировки, теперь он имеет тот же смысл, что и `max_bytes_before_external_group_by` — это общий лимит памяти для всего запроса для всех потоков). Также добавлена ещё одна настройка, управляющая размером блоков на диске — `min_external_sort_block_bytes`. [#72598](https://github.com/ClickHouse/ClickHouse/pull/72598) ([Azat Khuzhin](https://github.com/azat)). +* Игнорировать ограничения по памяти в коллекторе трассировок. [#72606](https://github.com/ClickHouse/ClickHouse/pull/72606) ([Azat Khuzhin](https://github.com/azat)). +* Добавлены серверные настройки `dictionaries_lazy_load` и `wait_dictionaries_load_at_startup` в `system.server_settings`. [#72664](https://github.com/ClickHouse/ClickHouse/pull/72664) ([Christoph Wurm](https://github.com/cwurm)). +* Добавлена возможность указывать настройку `max_backup_bandwidth` в запросах `BACKUP`/`RESTORE`. [#72665](https://github.com/ClickHouse/ClickHouse/pull/72665) ([Christoph Wurm](https://github.com/cwurm)). +* Понижен уровень логирования для сообщений о появляющихся реплицированных частях в движке ReplicatedMergeTree, чтобы уменьшить объем логов, генерируемых в реплицированном кластере. [#72876](https://github.com/ClickHouse/ClickHouse/pull/72876) ([mor-akamai](https://github.com/morkalfon)). +* Улучшено извлечение общих подвыражений в дизъюнкциях. Теперь можно упрощать результирующее фильтрующее выражение, даже если нет общего подвыражения для всех дизъюнктов. Продолжение [#71537](https://github.com/ClickHouse/ClickHouse/issues/71537). [#73271](https://github.com/ClickHouse/ClickHouse/pull/73271) ([Dmitry Novik](https://github.com/novikd)). +* В хранилищах `S3Queue`/`AzureQueue` добавлена возможность задавать настройки для таблиц, созданных без них. [#73283](https://github.com/ClickHouse/ClickHouse/pull/73283) ([Kseniia Sumarokova](https://github.com/kssenii)). * Добавлена настройка `least_greatest_legacy_null_behavior` (по умолчанию: `false`), которая определяет, должны ли функции `least` и `greatest` при наличии аргументов `NULL` безусловно возвращать `NULL` (если `true`) или игнорировать такие аргументы (если `false`). [#73344](https://github.com/ClickHouse/ClickHouse/pull/73344) ([Robert Schulze](https://github.com/rschu1ze)). -* Теперь в потоке очистки ObjectStorageQueueMetadata используются мультизапросы Keeper. [#73357](https://github.com/ClickHouse/ClickHouse/pull/73357) ([Antonio Andelic](https://github.com/antonio2368)). -* Когда ClickHouse работает в cgroup, мы по-прежнему собираем системные асинхронные метрики, связанные с нагрузкой на систему, планированием процессов, использованием памяти и т. д. Они могут давать полезные сигналы, когда ClickHouse — единственный процесс на хосте с высоким потреблением ресурсов. [#73369](https://github.com/ClickHouse/ClickHouse/pull/73369) ([Nikita Taranov](https://github.com/nickitat)). -* В хранилище `S3Queue` появилась возможность переноса старых упорядоченных таблиц, созданных до версии 24.6, в новую структуру с бакетами. [#73467](https://github.com/ClickHouse/ClickHouse/pull/73467) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Добавлена таблица `system.azure_queue`, аналогичная существующей `system.s3queue`. [#73477](https://github.com/ClickHouse/ClickHouse/pull/73477) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Функция `parseDateTime64` (и её варианты) теперь выдаёт корректные результаты для дат, относящихся к периодам до 1970 года и после 2106 года. Пример: `SELECT parseDateTime64InJodaSyntax('2200-01-01 00:00:00.000', 'yyyy-MM-dd HH:mm:ss.SSS')`. [#73594](https://github.com/ClickHouse/ClickHouse/pull/73594) ([zhanglistar](https://github.com/zhanglistar)). -* Устранены некоторые проблемы удобства использования `clickhouse-disks`, сообщённые пользователями. Закрывает [#67136](https://github.com/ClickHouse/ClickHouse/issues/67136). [#73616](https://github.com/ClickHouse/ClickHouse/pull/73616) ([Daniil Ivanik](https://github.com/divanik)). -* Добавлена возможность изменять настройки коммита в хранилище S3(Azure)Queue. (Настройки коммита: `max_processed_files_before_commit`, `max_processed_rows_before_commit`, `max_processed_bytes_before_commit`, `max_processing_time_sec_before_commit`). [#73635](https://github.com/ClickHouse/ClickHouse/pull/73635) ([Kseniia Sumarokova](https://github.com/kssenii)). -* В хранилище S3(Azure)Queue агрегируется прогресс по источникам для сравнения с настройками лимита коммита (commit limit). [#73641](https://github.com/ClickHouse/ClickHouse/pull/73641) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Добавлена поддержка базовых настроек в запросах `BACKUP` и `RESTORE`. [#73650](https://github.com/ClickHouse/ClickHouse/pull/73650) ([Vitaly Baranov](https://github.com/vitlibar)). -* Учитывайте `output_format_compression_level` при выводе в формате Parquet. [#73651](https://github.com/ClickHouse/ClickHouse/pull/73651) ([Arthur Passos](https://github.com/arthurpassos)). -* Добавлена поддержка чтения `fixed_size_list` из Apache Arrow как `Array` вместо того, чтобы считать его неподдерживаемым типом. [#73654](https://github.com/ClickHouse/ClickHouse/pull/73654) ([Julian Meyers](https://github.com/J-Meyers)). -* Добавлены два движка резервного копирования: `Memory` (хранит резервные копии в рамках текущей пользовательской сессии) и `Null` (не сохраняет резервные копии), предназначенных для тестирования. [#73690](https://github.com/ClickHouse/ClickHouse/pull/73690) ([Vitaly Baranov](https://github.com/vitlibar)). -* `concurrent_threads_soft_limit_num` и `concurrent_threads_soft_limit_num_ratio_to_cores` можно изменять без перезапуска сервера. [#73713](https://github.com/ClickHouse/ClickHouse/pull/73713) ([Sergei Trifonov](https://github.com/serxa)). +* Использовать мультизапросы Keeper в потоке очистки ObjectStorageQueueMetadata. [#73357](https://github.com/ClickHouse/ClickHouse/pull/73357) ([Antonio Andelic](https://github.com/antonio2368)). +* Когда ClickHouse выполняется внутри cgroup, мы по‑прежнему будем собирать асинхронные метрики по всей системе, связанные с нагрузкой на систему, планированием процессов, памятью и т. д. Они могут давать полезные сигналы, когда ClickHouse является единственным процессом на хосте с высоким потреблением ресурсов. [#73369](https://github.com/ClickHouse/ClickHouse/pull/73369) ([Nikita Taranov](https://github.com/nickitat)). +* В хранилище `S3Queue` добавлена возможность переноса старых упорядоченных таблиц, созданных до версии 24.6, в новую структуру с бакетами. [#73467](https://github.com/ClickHouse/ClickHouse/pull/73467) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Добавлена `system.azure_queue` по аналогии с существующей `system.s3queue`. [#73477](https://github.com/ClickHouse/ClickHouse/pull/73477) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Функция `parseDateTime64` (и её варианты) теперь выдаёт корректные результаты для входных дат до 1970 года и после 2106 года. Пример: `SELECT parseDateTime64InJodaSyntax('2200-01-01 00:00:00.000', 'yyyy-MM-dd HH:mm:ss.SSS')`. [#73594](https://github.com/ClickHouse/ClickHouse/pull/73594) ([zhanglistar](https://github.com/zhanglistar)). +* Исправлены некоторые проблемы удобства использования `clickhouse-disks`, отмеченные пользователями. Закрывает [#67136](https://github.com/ClickHouse/ClickHouse/issues/67136). [#73616](https://github.com/ClickHouse/ClickHouse/pull/73616) ([Daniil Ivanik](https://github.com/divanik)). +* Добавлена возможность изменять параметры коммита в хранилище S3(Azure)Queue: `max_processed_files_before_commit`, `max_processed_rows_before_commit`, `max_processed_bytes_before_commit`, `max_processing_time_sec_before_commit`. [#73635](https://github.com/ClickHouse/ClickHouse/pull/73635) ([Kseniia Sumarokova](https://github.com/kssenii)). +* В хранилище S3(Azure)Queue агрегирован прогресс между источниками для сопоставления с настройками ограничения количества коммитов. [#73641](https://github.com/ClickHouse/ClickHouse/pull/73641) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Поддержка базовых настроек в запросах `BACKUP` и `RESTORE`. [#73650](https://github.com/ClickHouse/ClickHouse/pull/73650) ([Vitaly Baranov](https://github.com/vitlibar)). +* Учитывать `output_format_compression_level` при выводе в Parquet. [#73651](https://github.com/ClickHouse/ClickHouse/pull/73651) ([Arthur Passos](https://github.com/arthurpassos)). +* Добавлено чтение Apache Arrow `fixed_size_list` как `Array` вместо обработки этого типа как неподдерживаемого. [#73654](https://github.com/ClickHouse/ClickHouse/pull/73654) ([Julian Meyers](https://github.com/J-Meyers)). +* Добавлены два движка резервного копирования: `Memory` (хранит резервные копии в пределах текущей пользовательской сессии) и `Null` (нигде не сохраняет резервные копии), предназначенные для тестирования. [#73690](https://github.com/ClickHouse/ClickHouse/pull/73690) ([Vitaly Baranov](https://github.com/vitlibar)). +* `concurrent_threads_soft_limit_num` и `concurrent_threads_soft_limit_num_ratio_to_cores` могут быть изменены без перезапуска сервера. [#73713](https://github.com/ClickHouse/ClickHouse/pull/73713) ([Sergei Trifonov](https://github.com/serxa)). * Добавлена поддержка расширенных числовых типов (`Decimal`, большие целые числа) в функциях `formatReadable`. [#73765](https://github.com/ClickHouse/ClickHouse/pull/73765) ([Raúl Marín](https://github.com/Algunenano)). -* Добавлена поддержка TLS для совместимости с сетевым протоколом PostgreSQL. [#73812](https://github.com/ClickHouse/ClickHouse/pull/73812) ([scanhex12](https://github.com/scanhex12)). -* Функция `isIPv4String` возвращала true, если за корректным IPv4-адресом следовал нулевой байт, тогда как в этом случае она должна возвращать false. Продолжение [#65387](https://github.com/ClickHouse/ClickHouse/issues/65387). [#73946](https://github.com/ClickHouse/ClickHouse/pull/73946) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Сделать код ошибки в сетевом протоколе MySQL совместимым с MySQL. Продолжение [#56831](https://github.com/ClickHouse/ClickHouse/issues/56831). Закрывает [#50957](https://github.com/ClickHouse/ClickHouse/issues/50957). [#73948](https://github.com/ClickHouse/ClickHouse/pull/73948) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Добавлена настройка `validate_enum_literals_in_opearators` для проверки литералов перечислений в операторах `IN`, `NOT IN` на соответствие типу перечисления и выброса исключения, если литерал не является допустимым значением этого перечисления. [#73985](https://github.com/ClickHouse/ClickHouse/pull/73985) ([Vladimir Cherkasov](https://github.com/vdimir)). -* В хранилище `S3(Azure)Queue` коммитить все файлы (в одном батче, задаваемом настройками коммита) в одной транзакции Keeper. [#73991](https://github.com/ClickHouse/ClickHouse/pull/73991) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Отключено определение заголовков для исполняемых UDF и словарей (это могло приводить к ошибке `Function 'X': wrong result, expected Y row(s), actual Y-1`). [#73992](https://github.com/ClickHouse/ClickHouse/pull/73992) ([Azat Khuzhin](https://github.com/azat)). -* Добавлена опция `distributed` для `EXPLAIN PLAN.` Теперь `EXPLAIN distributed=1 ... ` дописывает удалённый план к шагам `ReadFromParallelRemote*`. [#73994](https://github.com/ClickHouse/ClickHouse/pull/73994) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). -* Используется корректный тип возвращаемого значения для not/xor с аргументами Dynamic. [#74013](https://github.com/ClickHouse/ClickHouse/pull/74013) ([Pavel Kruglov](https://github.com/Avogar)). -* Добавлена возможность изменять `add_implicit_sign_column_constraint_for_collapsing_engine` после создания таблицы. [#74014](https://github.com/ClickHouse/ClickHouse/pull/74014) ([Christoph Wurm](https://github.com/cwurm)). -* Реализована поддержка подстолбцов в запросе SELECT для материализованного представления. [#74030](https://github.com/ClickHouse/ClickHouse/pull/74030) ([Pavel Kruglov](https://github.com/Avogar)). -* Теперь есть три простых способа задать пользовательскую строку приглашения (prompt) в `clickhouse-client`: 1. с помощью параметра командной строки `--prompt`, 2. в конфигурационном файле, с помощью настройки `[...]`, и 3. также в конфигурационном файле, с помощью настроек для отдельных подключений `[...]`. [#74168](https://github.com/ClickHouse/ClickHouse/pull/74168) ([Christoph Wurm](https://github.com/cwurm)). -* Автоматически определять защищённое соединение при подключении к порту 9440 клиентом ClickHouse. [#74212](https://github.com/ClickHouse/ClickHouse/pull/74212) ([Christoph Wurm](https://github.com/cwurm)). -* Аутентифицировать пользователей только по имени пользователя для http_handlers (ранее пользователю также требовалось указывать пароль). [#74221](https://github.com/ClickHouse/ClickHouse/pull/74221) ([Azat Khuzhin](https://github.com/azat)). -* Поддержка альтернативных языков запросов PRQL и KQL помечена как экспериментальная. Чтобы использовать их, укажите настройки `allow_experimental_prql_dialect = 1` и `allow_experimental_kusto_dialect = 1`. [#74224](https://github.com/ClickHouse/ClickHouse/pull/74224) ([Robert Schulze](https://github.com/rschu1ze)). -* Добавлена поддержка возврата типа Enum по умолчанию в большем количестве агрегатных функций. [#74272](https://github.com/ClickHouse/ClickHouse/pull/74272) ([Raúl Marín](https://github.com/Algunenano)). -* В операторе `OPTIMIZE TABLE` теперь можно указывать ключевое слово `FORCE` в качестве альтернативы существующему ключевому слову `FINAL`. [#74342](https://github.com/ClickHouse/ClickHouse/pull/74342) ([Robert Schulze](https://github.com/rschu1ze)). -* Добавлена метрика `IsServerShuttingDown`, необходимая для срабатывания оповещения, когда завершение работы сервера занимает слишком много времени. [#74429](https://github.com/ClickHouse/ClickHouse/pull/74429) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). -* Добавлены имена таблиц Iceberg в вывод EXPLAIN. [#74485](https://github.com/ClickHouse/ClickHouse/pull/74485) ([alekseev-maksim](https://github.com/alekseev-maksim)). -* Улучшено сообщение об ошибке при использовании RECURSIVE CTE со старым анализатором. [#74523](https://github.com/ClickHouse/ClickHouse/pull/74523) ([Raúl Marín](https://github.com/Algunenano)). -* Отображать подробные сообщения об ошибках в `system.errors`. [#74574](https://github.com/ClickHouse/ClickHouse/pull/74574) ([Vitaly Baranov](https://github.com/vitlibar)). -* Разрешает использование пароля для клиентского подключения к clickhouse-keeper. Эта возможность не очень полезна, если вы указываете корректную конфигурацию SSL для сервера и клиента, но всё же может пригодиться в некоторых случаях. Пароль не может быть длиннее 16 символов. Это не связано с моделью аутентификации Keeper. [#74673](https://github.com/ClickHouse/ClickHouse/pull/74673) ([alesapin](https://github.com/alesapin)). +* Добавлена поддержка TLS для совместимости с сетевым протоколом Postgres. [#73812](https://github.com/ClickHouse/ClickHouse/pull/73812) ([scanhex12](https://github.com/scanhex12)). +* Функция `isIPv4String` возвращала true, если за корректным IPv4-адресом следовал нулевой байт, хотя в этом случае она должна возвращать false. Продолжение [#65387](https://github.com/ClickHouse/ClickHouse/issues/65387). [#73946](https://github.com/ClickHouse/ClickHouse/pull/73946) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Код ошибки в протоколе MySQL wire приведён в соответствие с MySQL. Продолжение [#56831](https://github.com/ClickHouse/ClickHouse/issues/56831). Закрывает [#50957](https://github.com/ClickHouse/ClickHouse/issues/50957). [#73948](https://github.com/ClickHouse/ClickHouse/pull/73948) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Добавлена настройка `validate_enum_literals_in_opearators`, которая проверяет литералы enum в операторах `IN` и `NOT IN` на соответствие типу enum и выбрасывает исключение, если литерал не является допустимым значением enum. [#73985](https://github.com/ClickHouse/ClickHouse/pull/73985) ([Vladimir Cherkasov](https://github.com/vdimir)). +* В хранилище `S3(Azure)Queue` все файлы (в одном пакете, определённом настройками коммита) фиксируются в одной транзакции Keeper. [#73991](https://github.com/ClickHouse/ClickHouse/pull/73991) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Отключено определение заголовков для исполняемых UDF и словарей (это могло приводить к ошибке вида Function 'X': wrong result, expected Y row(s), actual Y-1). [#73992](https://github.com/ClickHouse/ClickHouse/pull/73992) ([Azat Khuzhin](https://github.com/azat)). +* Добавлена опция `distributed` для `EXPLAIN PLAN.` Теперь `EXPLAIN distributed=1 ... ` добавляет удалённый план к шагам `ReadFromParallelRemote*`. [#73994](https://github.com/ClickHouse/ClickHouse/pull/73994) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). +* Теперь используется корректный тип возвращаемого значения для not/xor с аргументами Dynamic. [#74013](https://github.com/ClickHouse/ClickHouse/pull/74013) ([Pavel Kruglov](https://github.com/Avogar)). +* Теперь можно изменять `add_implicit_sign_column_constraint_for_collapsing_engine` после создания таблицы. [#74014](https://github.com/ClickHouse/ClickHouse/pull/74014) ([Christoph Wurm](https://github.com/cwurm)). +* Поддержка подстолбцов в запросе SELECT для материализованного представления. [#74030](https://github.com/ClickHouse/ClickHouse/pull/74030) ([Pavel Kruglov](https://github.com/Avogar)). +* Теперь есть три простых способа задать пользовательскую строку приглашения в `clickhouse-client`: 1) через параметр командной строки `--prompt`, 2) в конфигурационном файле, через настройку `[...]`, и 3) также в конфигурационном файле, через настройки для отдельных подключений `[...]`. [#74168](https://github.com/ClickHouse/ClickHouse/pull/74168) ([Christoph Wurm](https://github.com/cwurm)). +* Автоматически определять необходимость защищённого соединения при подключении к порту 9440 в клиенте ClickHouse. [#74212](https://github.com/ClickHouse/ClickHouse/pull/74212) ([Christoph Wurm](https://github.com/cwurm)). +* Аутентификация пользователей только по имени пользователя для http_handlers (раньше пользователю нужно было также указывать пароль). [#74221](https://github.com/ClickHouse/ClickHouse/pull/74221) ([Azat Khuzhin](https://github.com/azat)). +* Поддержка альтернативных языков запросов PRQL и KQL была помечена как экспериментальная. Чтобы использовать их, задайте настройки `allow_experimental_prql_dialect = 1` и `allow_experimental_kusto_dialect = 1`. [#74224](https://github.com/ClickHouse/ClickHouse/pull/74224) ([Robert Schulze](https://github.com/rschu1ze)). +* Расширена поддержка возврата типа Enum по умолчанию в большем числе агрегатных функций. [#74272](https://github.com/ClickHouse/ClickHouse/pull/74272) ([Raúl Marín](https://github.com/Algunenano)). +* В `OPTIMIZE TABLE` теперь можно указывать ключевое слово `FORCE` как альтернативу существующему ключевому слову `FINAL`. [#74342](https://github.com/ClickHouse/ClickHouse/pull/74342) ([Robert Schulze](https://github.com/rschu1ze)). +* Добавлена метрика `IsServerShuttingDown`, которая нужна для срабатывания оповещения, если завершение работы сервера занимает слишком много времени. [#74429](https://github.com/ClickHouse/ClickHouse/pull/74429) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). +* В EXPLAIN добавлены имена таблиц Iceberg. [#74485](https://github.com/ClickHouse/ClickHouse/pull/74485) ([alekseev-maksim](https://github.com/alekseev-maksim)). +* Добавлено более понятное сообщение об ошибке при использовании RECURSIVE CTE со старым анализатором. [#74523](https://github.com/ClickHouse/ClickHouse/pull/74523) ([Raúl Marín](https://github.com/Algunenano)). +* Отображать расширенные сообщения об ошибках в `system.errors`. [#74574](https://github.com/ClickHouse/ClickHouse/pull/74574) ([Vitaly Baranov](https://github.com/vitlibar)). +* Добавлена возможность использования пароля для взаимодействия клиента с clickhouse-keeper. Эта функция не особенно полезна, если вы настроите корректную SSL-конфигурацию для сервера и клиента, но в некоторых случаях всё же может пригодиться. Длина пароля не может превышать 16 символов. Это не связано с моделью аутентификации Keeper. [#74673](https://github.com/ClickHouse/ClickHouse/pull/74673) ([alesapin](https://github.com/alesapin)). * Добавлен код ошибки для перезагрузчика конфигурации. [#74746](https://github.com/ClickHouse/ClickHouse/pull/74746) ([Garrett Thomas](https://github.com/garrettthomaskth)). -* Добавлена поддержка IPv6-адресов в табличных функциях и движках таблиц MySQL и PostgreSQL. [#74796](https://github.com/ClickHouse/ClickHouse/pull/74796) ([Mikhail Koviazin](https://github.com/mkmkme)). -* Реализована оптимизация по принципу короткого замыкания для `divideDecimal`. Исправляет [#74280](https://github.com/ClickHouse/ClickHouse/issues/74280). [#74843](https://github.com/ClickHouse/ClickHouse/pull/74843) ([Kevin Mingtarja](https://github.com/kevinmingtarja)). -* Теперь пользователей можно указывать в стартовых скриптах. [#74894](https://github.com/ClickHouse/ClickHouse/pull/74894) ([pufit](https://github.com/pufit)). -* Добавлена поддержка токенов SAS для Azure. [#72959](https://github.com/ClickHouse/ClickHouse/pull/72959) ([Azat Khuzhin](https://github.com/azat)). - - - - - -#### Исправление ошибки (видимая пользователю неисправность в официальном стабильном релизе) - -* Задавать уровень сжатия Parquet только в том случае, если кодек сжатия поддерживает эту настройку. [#74659](https://github.com/ClickHouse/ClickHouse/pull/74659) ([Arthur Passos](https://github.com/arthurpassos)). -* Исправлена регрессия, из-за которой при использовании локалей сортировки с модификаторами возникала ошибка. Например, теперь корректно работает запрос `SELECT arrayJoin(['kk 50', 'KK 01', ' KK 2', ' KK 3', 'kk 1', 'x9y99', 'x9y100']) item ORDER BY item ASC COLLATE 'tr-u-kn-true-ka-shifted`. [#73544](https://github.com/ClickHouse/ClickHouse/pull/73544) ([Robert Schulze](https://github.com/rschu1ze)). -* Исправлена ошибка, из-за которой не удавалось создать узел SEQUENTIAL с помощью keeper-client. [#64177](https://github.com/ClickHouse/ClickHouse/pull/64177) ([Duc Canh Le](https://github.com/canhld94)). -* Исправлен некорректный подсчёт количества символов в функциях position. [#71003](https://github.com/ClickHouse/ClickHouse/pull/71003) ([思维](https://github.com/heymind)). -* Операции `RESTORE` для сущностей доступа требовали больше прав, чем было необходимо, из-за необработанных частичных отзывов прав. Этот PR исправляет проблему. Закрывает [#71853](https://github.com/ClickHouse/ClickHouse/issues/71853). [#71958](https://github.com/ClickHouse/ClickHouse/pull/71958) ([pufit](https://github.com/pufit)). -* Исключена пауза после `ALTER TABLE REPLACE/MOVE PARTITION FROM/TO TABLE`. Обеспечено корректное получение настроек планирования фоновых задач. [#72024](https://github.com/ClickHouse/ClickHouse/pull/72024) ([Aleksei Filatov](https://github.com/aalexfvk)). +* Добавлена поддержка IPv6-адресов в табличных функциях и движках MySQL и PostgreSQL. [#74796](https://github.com/ClickHouse/ClickHouse/pull/74796) ([Mikhail Koviazin](https://github.com/mkmkme)). +* Реализована оптимизация укороченного вычисления для `divideDecimal`. Исправлена [#74280](https://github.com/ClickHouse/ClickHouse/issues/74280). [#74843](https://github.com/ClickHouse/ClickHouse/pull/74843) ([Kevin Mingtarja](https://github.com/kevinmingtarja)). +* Теперь пользователей можно задавать в скриптах запуска. [#74894](https://github.com/ClickHouse/ClickHouse/pull/74894) ([pufit](https://github.com/pufit)). +* Добавлена поддержка SAS-токенов Azure. [#72959](https://github.com/ClickHouse/ClickHouse/pull/72959) ([Azat Khuzhin](https://github.com/azat)). + +#### Исправление ошибки (некорректное поведение, заметное пользователям, в официальном стабильном релизе) + +* Устанавливать уровень сжатия Parquet только в том случае, если это поддерживается используемым кодеком сжатия. [#74659](https://github.com/ClickHouse/ClickHouse/pull/74659) ([Arthur Passos](https://github.com/arthurpassos)). +* Исправлена регрессия, из-за которой при использовании локалей сортировки с модификаторами возникала ошибка. Например, теперь запрос `SELECT arrayJoin(['kk 50', 'KK 01', ' KK 2', ' KK 3', 'kk 1', 'x9y99', 'x9y100']) item ORDER BY item ASC COLLATE 'tr-u-kn-true-ka-shifted` работает корректно. [#73544](https://github.com/ClickHouse/ClickHouse/pull/73544) ([Robert Schulze](https://github.com/rschu1ze)). +* Исправлена ошибка, из-за которой с помощью keeper-client было невозможно создать узел SEQUENTIAL. [#64177](https://github.com/ClickHouse/ClickHouse/pull/64177) ([Duc Canh Le](https://github.com/canhld94)). +* Исправлен некорректный подсчёт символов в функциях `position`. [#71003](https://github.com/ClickHouse/ClickHouse/pull/71003) ([思维](https://github.com/heymind)). +* Операции `RESTORE` для сущностей доступа требовали больше прав, чем было нужно, из‑за некорректной обработки частичных отзывов привилегий. Этот PR исправляет проблему. Закрывает [#71853](https://github.com/ClickHouse/ClickHouse/issues/71853). [#71958](https://github.com/ClickHouse/ClickHouse/pull/71958) ([pufit](https://github.com/pufit)). +* Исключена пауза после `ALTER TABLE REPLACE/MOVE PARTITION FROM/TO TABLE`. Теперь используются корректные настройки для планирования фоновых задач. [#72024](https://github.com/ClickHouse/ClickHouse/pull/72024) ([Aleksei Filatov](https://github.com/aalexfvk)). * Исправлена обработка пустых кортежей в некоторых форматах ввода и вывода (например, Parquet, Arrow). [#72616](https://github.com/ClickHouse/ClickHouse/pull/72616) ([Michael Kolupaev](https://github.com/al13n321)). -* Операторы GRANT SELECT/INSERT, заданные на уровне столбцов для баз данных/таблиц, указанных с подстановочными символами, теперь приводят к ошибке. [#72646](https://github.com/ClickHouse/ClickHouse/pull/72646) ([Johann Gan](https://github.com/johanngan)). -* Исправлена ситуация, когда пользователь не может выполнить `REVOKE ALL ON *.*` из-за неявно выданных прав в целевой сущности доступа. [#72872](https://github.com/ClickHouse/ClickHouse/pull/72872) ([pufit](https://github.com/pufit)). -* Исправлено форматирование положительных значений смещения часового пояса в скалярной функции formatDateTime. [#73091](https://github.com/ClickHouse/ClickHouse/pull/73091) ([ollidraese](https://github.com/ollidraese)). -* Исправление для корректного отражения исходного порта при установлении соединения через PROXYv1 и включённом параметре `auth_use_forwarded_address` — ранее некорректно использовался порт прокси. Добавлена функция `currentQueryID()`. [#73095](https://github.com/ClickHouse/ClickHouse/pull/73095) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* Передавать настройки формата в `NativeWriter` внутри `TCPHandler`, чтобы такие настройки, как `output_format_native_write_json_as_string`, применялись корректно. [#73179](https://github.com/ClickHouse/ClickHouse/pull/73179) ([Pavel Kruglov](https://github.com/Avogar)). -* Исправлена ошибка, вызывавшая аварийное завершение работы StorageObjectStorageQueue. [#73274](https://github.com/ClickHouse/ClickHouse/pull/73274) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Исправлено редкое падение сервера при завершении работы из‑за обновляемого материализованного представления. [#73323](https://github.com/ClickHouse/ClickHouse/pull/73323) ([Michael Kolupaev](https://github.com/al13n321)). -* Спецификатор `%f` функции `formatDateTime` теперь всегда генерирует шесть цифр для долей секунды. Это делает поведение совместимым с функцией MySQL `DATE_FORMAT`. Предыдущее поведение можно восстановить с помощью настройки `formatdatetime_f_prints_scale_number_of_digits = 1`. [#73324](https://github.com/ClickHouse/ClickHouse/pull/73324) ([ollidraese](https://github.com/ollidraese)). -* Исправлена фильтрация по столбцу `_etag` при чтении из хранилища `s3` и табличной функции `s3`. [#73353](https://github.com/ClickHouse/ClickHouse/pull/73353) ([Anton Popov](https://github.com/CurtizJ)). -* Исправлена ошибка `Not-ready Set is passed as the second argument for function 'in'`, возникавшая при использовании `IN (subquery)` в выражении `JOIN ON` со старым анализатором. [#73382](https://github.com/ClickHouse/ClickHouse/pull/73382) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). -* Исправлена подготовка к схлопыванию для Dynamic- и JSON-столбцов. Ранее в некоторых случаях новые типы могли быть вставлены в shared variant/shared data, даже если лимит на количество типов/путей не был достигнут. [#73388](https://github.com/ClickHouse/ClickHouse/pull/73388) ([Pavel Kruglov](https://github.com/Avogar)). -* Проверять размеры на повреждение при двоичном декодировании типов, чтобы избежать слишком больших выделений памяти. [#73390](https://github.com/ClickHouse/ClickHouse/pull/73390) ([Pavel Kruglov](https://github.com/Avogar)). -* Исправлена логическая ошибка при чтении из однорепликового кластера при включённом механизме параллельных реплик. [#73403](https://github.com/ClickHouse/ClickHouse/pull/73403) ([Michael Kolupaev](https://github.com/al13n321)). -* Исправлена работа очереди ObjectStorageQueue с ZooKeeper и более старыми версиями Keeper. [#73420](https://github.com/ClickHouse/ClickHouse/pull/73420) ([Antonio Andelic](https://github.com/antonio2368)). -* Выполнено исправление, необходимое для включения секционирования Hive по умолчанию. [#73479](https://github.com/ClickHouse/ClickHouse/pull/73479) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* Исправлена гонка данных при создании индекса сходства векторов. [#73517](https://github.com/ClickHouse/ClickHouse/pull/73517) ([Antonio Andelic](https://github.com/antonio2368)). -* Исправлена ошибка сегментации, возникающая, если источник словаря содержит функцию с некорректными данными. [#73535](https://github.com/ClickHouse/ClickHouse/pull/73535) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* Операторы GRANT SELECT/INSERT на уровне столбцов для баз данных и таблиц с подстановочными символами теперь вызывают ошибку. [#72646](https://github.com/ClickHouse/ClickHouse/pull/72646) ([Johann Gan](https://github.com/johanngan)). +* Исправлена проблема, из‑за которой пользователь не может выполнить `REVOKE ALL ON *.*` из‑за неявно выданных привилегий на целевой объект доступа. [#72872](https://github.com/ClickHouse/ClickHouse/pull/72872) ([pufit](https://github.com/pufit)). +* Исправлено форматирование положительных значений часового пояса в скалярной функции formatDateTime. [#73091](https://github.com/ClickHouse/ClickHouse/pull/73091) ([ollidraese](https://github.com/ollidraese)). +* Исправлено определение исходного порта при установлении соединения через PROXYv1 и включённом `auth_use_forwarded_address` — ранее ошибочно использовался порт прокси. Добавлена функция `currentQueryID()`. [#73095](https://github.com/ClickHouse/ClickHouse/pull/73095) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* Пробрасывать настройки формата в `NativeWriter` в `TCPHandler`, чтобы такие настройки, как `output_format_native_write_json_as_string`, применялись корректно. [#73179](https://github.com/ClickHouse/ClickHouse/pull/73179) ([Pavel Kruglov](https://github.com/Avogar)). +* Исправлено аварийное завершение работы StorageObjectStorageQueue. [#73274](https://github.com/ClickHouse/ClickHouse/pull/73274) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Исправлен редкий сбой в обновляемом материализованном представлении во время остановки сервера. [#73323](https://github.com/ClickHouse/ClickHouse/pull/73323) ([Michael Kolupaev](https://github.com/al13n321)). +* Теперь плейсхолдер `%f` функции `formatDateTime` всегда генерирует шесть цифр долей секунды. Это делает его поведение совместимым с функцией MySQL `DATE_FORMAT`. Предыдущее поведение можно восстановить с помощью настройки `formatdatetime_f_prints_scale_number_of_digits = 1`. [#73324](https://github.com/ClickHouse/ClickHouse/pull/73324) ([ollidraese](https://github.com/ollidraese)). +* Исправлена фильтрация по столбцу `_etag` при чтении из хранилища `s3` и при использовании табличной функции. [#73353](https://github.com/ClickHouse/ClickHouse/pull/73353) ([Anton Popov](https://github.com/CurtizJ)). +* Исправлена ошибка `Not-ready Set is passed as the second argument for function 'in'`, возникающая при использовании конструкции `IN (subquery)` в выражении `JOIN ON` со старым анализатором. [#73382](https://github.com/ClickHouse/ClickHouse/pull/73382) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). +* Исправлена подготовка к схлопыванию для столбцов Dynamic и JSON. Ранее в некоторых случаях новые типы могли быть записаны в shared variant/shared data, даже если ограничение по количеству типов/путей ещё не было достигнуто. [#73388](https://github.com/ClickHouse/ClickHouse/pull/73388) ([Pavel Kruglov](https://github.com/Avogar)). +* Проверяем размеры на некорректные значения во время двоичного декодирования типов, чтобы избежать чрезмерных выделений памяти. [#73390](https://github.com/ClickHouse/ClickHouse/pull/73390) ([Pavel Kruglov](https://github.com/Avogar)). +* Исправлена логическая ошибка при чтении из однорепликового кластера при включённых параллельных репликах. [#73403](https://github.com/ClickHouse/ClickHouse/pull/73403) ([Michael Kolupaev](https://github.com/al13n321)). +* Исправлена работа ObjectStorageQueue с ZooKeeper и старыми версиями Keeper. [#73420](https://github.com/ClickHouse/ClickHouse/pull/73420) ([Antonio Andelic](https://github.com/antonio2368)). +* Реализовано исправление, необходимое для включения hive-разбиения по умолчанию. [#73479](https://github.com/ClickHouse/ClickHouse/pull/73479) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* Исправлена гонка данных при создании индекса векторного сходства. [#73517](https://github.com/ClickHouse/ClickHouse/pull/73517) ([Antonio Andelic](https://github.com/antonio2368)). +* Исправлена ошибка сегментации (segfault), возникавшая, когда источник словаря содержал функцию с некорректными данными. [#73535](https://github.com/ClickHouse/ClickHouse/pull/73535) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). * Исправлена логика повторных попыток при неудачной вставке в хранилище S3(Azure)Queue. Закрывает [#70951](https://github.com/ClickHouse/ClickHouse/issues/70951). [#73546](https://github.com/ClickHouse/ClickHouse/pull/73546) ([Kseniia Sumarokova](https://github.com/kssenii)). * Исправлена ошибка в функции `tupleElement`, которая могла возникать в некоторых случаях для кортежей с элементами типа `LowCardinality` при включённой настройке `optimize_functions_to_subcolumns`. [#73548](https://github.com/ClickHouse/ClickHouse/pull/73548) ([Anton Popov](https://github.com/CurtizJ)). -* Исправлен разбор шаблона перечисления (enum glob), после которого следует диапазон. Это исправляет [#73473](https://github.com/ClickHouse/ClickHouse/issues/73473). [#73569](https://github.com/ClickHouse/ClickHouse/pull/73569) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* Исправлена проблема, из-за которой parallel_replicas_for_non_replicated_merge_tree игнорировался в подзапросах для нереплицируемых таблиц. [#73584](https://github.com/ClickHouse/ClickHouse/pull/73584) ([Igor Nikonov](https://github.com/devcrafter)). -* Исправление исключения `std::logical_error`, возникающего, когда задачу невозможно запланировать. Обнаружено в стресс-тестах. [#73629](https://github.com/ClickHouse/ClickHouse/pull/73629) ([Alexander Gololobov](https://github.com/davenger)). -* Не интерпретировать запросы в режиме `EXPLAIN SYNTAX`, чтобы избежать логических ошибок из-за некорректного этапа обработки распределённых запросов. Исправляет [#65205](https://github.com/ClickHouse/ClickHouse/issues/65205). [#73634](https://github.com/ClickHouse/ClickHouse/pull/73634) ([Dmitry Novik](https://github.com/novikd)). -* Исправлена возможная несогласованность данных в динамическом столбце. Устранена потенциальная логическая ошибка `Nested columns sizes are inconsistent with local_discriminators column size`. [#73644](https://github.com/ClickHouse/ClickHouse/pull/73644) ([Pavel Kruglov](https://github.com/Avogar)). -* Исправлена ошибка `NOT_FOUND_COLUMN_IN_BLOCK` в запросах с `FINAL` и `SAMPLE`. Исправлен некорректный результат в запросах SELECT с `FINAL` из `CollapsingMergeTree` и включены оптимизации `FINAL`. [#73682](https://github.com/ClickHouse/ClickHouse/pull/73682) ([Anton Popov](https://github.com/CurtizJ)). +* Исправлен разбор маски `enum`, после которой следует диапазон. Устраняет проблему [#73473](https://github.com/ClickHouse/ClickHouse/issues/73473). [#73569](https://github.com/ClickHouse/ClickHouse/pull/73569) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* Исправлена проблема, при которой параметр parallel_replicas_for_non_replicated_merge_tree игнорировался во вложенных запросах к нереплицируемым таблицам. [#73584](https://github.com/ClickHouse/ClickHouse/pull/73584) ([Igor Nikonov](https://github.com/devcrafter)). +* Исправлено исключение std::logical_error, выбрасываемое, когда задачу не удаётся запланировать. Обнаружено в стресс-тестах. [#73629](https://github.com/ClickHouse/ClickHouse/pull/73629) ([Alexander Gololobov](https://github.com/davenger)). +* Не интерпретировать запросы в `EXPLAIN SYNTAX`, чтобы избежать логических ошибок, связанных с некорректной стадией обработки распределённых запросов. Исправляет [#65205](https://github.com/ClickHouse/ClickHouse/issues/65205). [#73634](https://github.com/ClickHouse/ClickHouse/pull/73634) ([Dmitry Novik](https://github.com/novikd)). +* Исправлена возможная несогласованность данных в динамическом столбце Dynamic. Исправлена потенциальная логическая ошибка `Nested columns sizes are inconsistent with local_discriminators column size`. [#73644](https://github.com/ClickHouse/ClickHouse/pull/73644) ([Pavel Kruglov](https://github.com/Avogar)). +* Исправлена ошибка `NOT_FOUND_COLUMN_IN_BLOCK` в запросах с `FINAL` и `SAMPLE`. Исправлен некорректный результат в запросах SELECT с `FINAL` к таблицам `CollapsingMergeTree` и включены оптимизации для `FINAL`. [#73682](https://github.com/ClickHouse/ClickHouse/pull/73682) ([Anton Popov](https://github.com/CurtizJ)). * Исправлена ошибка, приводившая к сбою в LIMIT BY COLUMNS. [#73686](https://github.com/ClickHouse/ClickHouse/pull/73686) ([Raúl Marín](https://github.com/Algunenano)). -* Исправлена ошибка, когда при принудительном использовании обычной проекции и запросе, в точности совпадающем с определением проекции, сама проекция не выбиралась, из‑за чего возникала ошибка. [#73700](https://github.com/ClickHouse/ClickHouse/pull/73700) ([Shichao Jin](https://github.com/jsc0218)). -* Исправлена ошибка в десериализации структуры Dynamic/Object. Это могло приводить к возникновению исключений CANNOT_READ_ALL_DATA. [#73767](https://github.com/ClickHouse/ClickHouse/pull/73767) ([Pavel Kruglov](https://github.com/Avogar)). +* Исправлена ошибка, из-за которой при принудительном использовании обычной проекции и запросе, в точности совпадающем с определением проекции, эта проекция не выбиралась и в результате возникала ошибка. [#73700](https://github.com/ClickHouse/ClickHouse/pull/73700) ([Shichao Jin](https://github.com/jsc0218)). +* Исправлена десериализация структуры Dynamic/Object, что могло приводить к исключениям CANNOT_READ_ALL_DATA. [#73767](https://github.com/ClickHouse/ClickHouse/pull/73767) ([Pavel Kruglov](https://github.com/Avogar)). * Пропускать файл `metadata_version.txt` при восстановлении частей из резервной копии. [#73768](https://github.com/ClickHouse/ClickHouse/pull/73768) ([Vitaly Baranov](https://github.com/vitlibar)). -* Исправлена ошибка сегментации при приведении к Enum с использованием LIKE. [#73775](https://github.com/ClickHouse/ClickHouse/pull/73775) ([zhanglistar](https://github.com/zhanglistar)). -* Исправление проблемы, из-за которой корзина S3 Express не работала в качестве диска. [#73777](https://github.com/ClickHouse/ClickHouse/pull/73777) ([Sameer Tamsekar](https://github.com/stamsekar)). -* Разрешить слияние строк с недопустимыми значениями в столбце `sign` в таблицах CollapsingMergeTree. [#73864](https://github.com/ClickHouse/ClickHouse/pull/73864) ([Christoph Wurm](https://github.com/cwurm)). -* Исправлена ошибка, возникавшая при выполнении DDL-запроса с офлайн-репликой. [#73876](https://github.com/ClickHouse/ClickHouse/pull/73876) ([Tuan Pham Anh](https://github.com/tuanpach)). -* Исправлена периодически возникающая ошибка при сравнении типов `map()` из-за того, что можно создать `Map` без явного указания имён ('keys','values') для его вложенного кортежа. [#73878](https://github.com/ClickHouse/ClickHouse/pull/73878) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* Игнорировать оконные функции при обработке предложения GROUP BY ALL. Исправлена ошибка [#73501](https://github.com/ClickHouse/ClickHouse/issues/73501). [#73916](https://github.com/ClickHouse/ClickHouse/pull/73916) ([Dmitry Novik](https://github.com/novikd)). -* Исправлены неявные привилегии (раньше вели себя как подстановочный символ). [#73932](https://github.com/ClickHouse/ClickHouse/pull/73932) ([Azat Khuzhin](https://github.com/azat)). -* Исправлено повышенное потребление памяти при создании вложенных `Map`. [#73982](https://github.com/ClickHouse/ClickHouse/pull/73982) ([Pavel Kruglov](https://github.com/Avogar)). +* Исправлена ошибка сегментации при приведении к типу Enum с использованием LIKE. [#73775](https://github.com/ClickHouse/ClickHouse/pull/73775) ([zhanglistar](https://github.com/zhanglistar)). +* Исправлена проблема, из-за которой бакет S3 Express не использовался как диск. [#73777](https://github.com/ClickHouse/ClickHouse/pull/73777) ([Sameer Tamsekar](https://github.com/stamsekar)). +* Разрешено объединять строки с некорректными значениями столбца `sign` в таблицах CollapsingMergeTree. [#73864](https://github.com/ClickHouse/ClickHouse/pull/73864) ([Christoph Wurm](https://github.com/cwurm)). +* Исправлена ошибка, возникавшая при выполнении запроса `DDL` с отключенной репликой. [#73876](https://github.com/ClickHouse/ClickHouse/pull/73876) ([Tuan Pham Anh](https://github.com/tuanpach)). +* Исправлена редкая ошибка сравнения типов `map()`, возникавшая из-за возможности создания `Map` без явных имён ('keys','values') для вложенного кортежа. [#73878](https://github.com/ClickHouse/ClickHouse/pull/73878) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* Игнорировать оконные функции при разрешении предложения GROUP BY ALL. Исправляет [#73501](https://github.com/ClickHouse/ClickHouse/issues/73501). [#73916](https://github.com/ClickHouse/ClickHouse/pull/73916) ([Dmitry Novik](https://github.com/novikd)). +* Исправлено поведение неявных привилегий (ранее они работали как подстановочный шаблон). [#73932](https://github.com/ClickHouse/ClickHouse/pull/73932) ([Azat Khuzhin](https://github.com/azat)). +* Исправлено повышенное потребление памяти при создании вложенных Maps. [#73982](https://github.com/ClickHouse/ClickHouse/pull/73982) ([Pavel Kruglov](https://github.com/Avogar)). * Исправлена обработка вложенного JSON с пустыми ключами. [#73993](https://github.com/ClickHouse/ClickHouse/pull/73993) ([Pavel Kruglov](https://github.com/Avogar)). -* Исправление: устранена ошибка, из-за которой псевдоним мог не добавляться в проекцию, если на него ссылался другой псевдоним и он выбирался в обратном порядке. [#74033](https://github.com/ClickHouse/ClickHouse/pull/74033) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* Игнорировать ошибки «object not found» для Azure при инициализации диска plain_rewritable. [#74059](https://github.com/ClickHouse/ClickHouse/pull/74059) ([Julia Kartseva](https://github.com/jkartseva)). -* Исправлено поведение `any` и `anyLast` с типами Enum и пустой таблицей. [#74061](https://github.com/ClickHouse/ClickHouse/pull/74061) ([Joanna Hulboj](https://github.com/jh0x)). -* Исправлена ошибка, возникавшая при указании пользователем именованных аргументов в табличном движке Kafka. [#74064](https://github.com/ClickHouse/ClickHouse/pull/74064) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* Исправлена возможность изменения настроек хранилища `S3Queue` из варианта с префиксом «s3queue_» в вариант без префикса и наоборот. [#74075](https://github.com/ClickHouse/ClickHouse/pull/74075) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Добавлена настройка `allow_push_predicate_ast_for_distributed_subqueries`. Она добавляет проталкивание предикатов на уровне AST (predicate push-down) для распределённых запросов с анализатором. Это временное решение, которое мы используем до тех пор, пока не будет добавлена поддержка распределённых запросов с сериализацией плана запроса. Закрывает [#66878](https://github.com/ClickHouse/ClickHouse/issues/66878) [#69472](https://github.com/ClickHouse/ClickHouse/issues/69472) [#65638](https://github.com/ClickHouse/ClickHouse/issues/65638) [#68030](https://github.com/ClickHouse/ClickHouse/issues/68030) [#73718](https://github.com/ClickHouse/ClickHouse/issues/73718). [#74085](https://github.com/ClickHouse/ClickHouse/pull/74085) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). -* Исправляет проблему, когда после [#73095](https://github.com/ClickHouse/ClickHouse/issues/73095) в поле forwarded_for может присутствовать порт, из‑за чего становится невозможно разрешить имя хоста, если в нём указан порт. [#74116](https://github.com/ClickHouse/ClickHouse/pull/74116) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* Исправление: псевдоним мог не добавляться в проекцию, если на него ссылался другой псевдоним, а сами псевдонимы были выбраны в обратном порядке. [#74033](https://github.com/ClickHouse/ClickHouse/pull/74033) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* Теперь ошибки «object not found» в Azure игнорируются при инициализации диска plain_rewritable. [#74059](https://github.com/ClickHouse/ClickHouse/pull/74059) ([Julia Kartseva](https://github.com/jkartseva)). +* Исправлено поведение `any` и `anyLast` при работе с типами Enum и пустой таблицей. [#74061](https://github.com/ClickHouse/ClickHouse/pull/74061) ([Joanna Hulboj](https://github.com/jh0x)). +* Исправлена проблема, возникающая, когда пользователь указывает именованные параметры в табличном движке Kafka. [#74064](https://github.com/ClickHouse/ClickHouse/pull/74064) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* Исправлена работа изменения настроек хранилища `S3Queue` при смене префикса "s3queue_" на отсутствие префикса и наоборот. [#74075](https://github.com/ClickHouse/ClickHouse/pull/74075) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Добавлена настройка `allow_push_predicate_ast_for_distributed_subqueries`. Она включает проталкивание предикатов (predicate push-down) на основе AST для распределённых запросов с использованием анализатора. Это временное решение, которое будет использоваться до тех пор, пока не появится поддержка распределённых запросов с сериализацией плана запроса. Закрывает [#66878](https://github.com/ClickHouse/ClickHouse/issues/66878) [#69472](https://github.com/ClickHouse/ClickHouse/issues/69472) [#65638](https://github.com/ClickHouse/ClickHouse/issues/65638) [#68030](https://github.com/ClickHouse/ClickHouse/issues/68030) [#73718](https://github.com/ClickHouse/ClickHouse/issues/73718). [#74085](https://github.com/ClickHouse/ClickHouse/pull/74085) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). +* Исправляет проблему, при которой после [#73095](https://github.com/ClickHouse/ClickHouse/issues/73095) порт может присутствовать в поле forwarded_for, что приводит к невозможности разрешить имя хоста, если в него включён порт. [#74116](https://github.com/ClickHouse/ClickHouse/pull/74116) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). * Исправлено некорректное форматирование оператора `ALTER TABLE (DROP STATISTICS ...) (DROP STATISTICS ...)`. [#74126](https://github.com/ClickHouse/ClickHouse/pull/74126) ([Han Fei](https://github.com/hanfei1991)). -* Исправление ошибки [#66112](https://github.com/ClickHouse/ClickHouse/issues/66112). [#74128](https://github.com/ClickHouse/ClickHouse/pull/74128) ([Anton Ivashkin](https://github.com/ianton-ru)). -* Использовать `Loop` в качестве движка таблицы в `CREATE TABLE` больше нельзя. Ранее такая комбинация приводила к сегфолтам. [#74137](https://github.com/ClickHouse/ClickHouse/pull/74137) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* Устранена уязвимость, чтобы предотвратить SQL‑инъекции в табличных функциях postgresql и sqlite. [#74144](https://github.com/ClickHouse/ClickHouse/pull/74144) ([Pablo Marcos](https://github.com/pamarcos)). -* Исправлен сбой при чтении подстолбца из сжатой таблицы с движком Memory. Исправляет проблему [#74009](https://github.com/ClickHouse/ClickHouse/issues/74009). [#74161](https://github.com/ClickHouse/ClickHouse/pull/74161) ([Nikita Taranov](https://github.com/nickitat)). +* Исправление проблемы [#66112](https://github.com/ClickHouse/ClickHouse/issues/66112). [#74128](https://github.com/ClickHouse/ClickHouse/pull/74128) ([Anton Ivashkin](https://github.com/ianton-ru)). +* Больше нельзя использовать `Loop` в качестве движка таблицы в `CREATE TABLE`. Эта комбинация ранее приводила к сегфолтам. [#74137](https://github.com/ClickHouse/ClickHouse/pull/74137) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* Устранена уязвимость безопасности для предотвращения SQL-инъекций в табличных функциях PostgreSQL и SQLite. [#74144](https://github.com/ClickHouse/ClickHouse/pull/74144) ([Pablo Marcos](https://github.com/pamarcos)). +* Исправлена ошибка, приводившая к сбою при чтении подстолбца из сжатой таблицы движка Memory. Исправляет [#74009](https://github.com/ClickHouse/ClickHouse/issues/74009). [#74161](https://github.com/ClickHouse/ClickHouse/pull/74161) ([Nikita Taranov](https://github.com/nickitat)). * Исправлен бесконечный цикл, возникавший при запросах к system.detached_tables. [#74190](https://github.com/ClickHouse/ClickHouse/pull/74190) ([Konstantin Morozov](https://github.com/k-morozov)). -* Исправлена логическая ошибка в s3queue при пометке файла как ошибочного. [#74216](https://github.com/ClickHouse/ClickHouse/pull/74216) ([Kseniia Sumarokova](https://github.com/kssenii)). -* Исправлены настройки нативного копирования (`allow_s3_native_copy`/`allow_azure_native_copy`) для `RESTORE` из базового бэкапа. [#74286](https://github.com/ClickHouse/ClickHouse/pull/74286) ([Azat Khuzhin](https://github.com/azat)). -* Исправлена проблема, возникавшая, если количество отсоединённых таблиц в базе данных было кратно значению max_block_size. [#74289](https://github.com/ClickHouse/ClickHouse/pull/74289) ([Konstantin Morozov](https://github.com/k-morozov)). -* Исправлено копирование через ObjectStorage (т.е. S3), когда учетные данные для источника и назначения различаются. [#74331](https://github.com/ClickHouse/ClickHouse/pull/74331) ([Azat Khuzhin](https://github.com/azat)). -* Исправлено определение параметра «использовать метод Rewrite в JSON API» при нативном копировании в GCS. [#74338](https://github.com/ClickHouse/ClickHouse/pull/74338) ([Azat Khuzhin](https://github.com/azat)). -* Исправлен некорректный расчёт `BackgroundMergesAndMutationsPoolSize` (он был вдвое больше фактического значения). [#74509](https://github.com/ClickHouse/ClickHouse/pull/74509) ([alesapin](https://github.com/alesapin)). -* Исправлена ошибка утечки наблюдателей Keeper при включении функции Cluster Discovery. [#74521](https://github.com/ClickHouse/ClickHouse/pull/74521) ([RinChanNOW](https://github.com/RinChanNOWWW)). -* Исправлена ошибка выравнивания памяти, выявленная UBSan [#74512](https://github.com/ClickHouse/ClickHouse/issues/74512). [#74534](https://github.com/ClickHouse/ClickHouse/pull/74534) ([Arthur Passos](https://github.com/arthurpassos)). -* Исправлена проблема конкурентной очистки KeeperMap при создании таблицы. [#74568](https://github.com/ClickHouse/ClickHouse/pull/74568) ([Antonio Andelic](https://github.com/antonio2368)). +* Исправлена логическая ошибка в s3queue при пометке файла как завершившегося с ошибкой. [#74216](https://github.com/ClickHouse/ClickHouse/pull/74216) ([Kseniia Sumarokova](https://github.com/kssenii)). +* Исправлены настройки нативного копирования (`allow_s3_native_copy`/`allow_azure_native_copy`) при выполнении `RESTORE` из базовой резервной копии. [#74286](https://github.com/ClickHouse/ClickHouse/pull/74286) ([Azat Khuzhin](https://github.com/azat)). +* Исправлена ошибка, возникавшая, когда число отсоединённых таблиц в базе данных кратно max_block_size. [#74289](https://github.com/ClickHouse/ClickHouse/pull/74289) ([Konstantin Morozov](https://github.com/k-morozov)). +* Исправлено копирование через ObjectStorage (например, S3), если для источника и назначения используются разные учетные данные. [#74331](https://github.com/ClickHouse/ClickHouse/pull/74331) ([Azat Khuzhin](https://github.com/azat)). +* Исправлено определение опции «use the Rewrite method in the JSON API» для нативного копирования в GCS. [#74338](https://github.com/ClickHouse/ClickHouse/pull/74338) ([Azat Khuzhin](https://github.com/azat)). +* Исправлено некорректное вычисление `BackgroundMergesAndMutationsPoolSize` (оно в два раза превышало реальное значение). [#74509](https://github.com/ClickHouse/ClickHouse/pull/74509) ([alesapin](https://github.com/alesapin)). +* Исправлена ошибка утечки наблюдателей Keeper при включённой функции Cluster Discovery. [#74521](https://github.com/ClickHouse/ClickHouse/pull/74521) ([RinChanNOW](https://github.com/RinChanNOWWW)). +* Исправлена проблема с выравниванием памяти, обнаруженная UBSan [#74512](https://github.com/ClickHouse/ClickHouse/issues/74512). [#74534](https://github.com/ClickHouse/ClickHouse/pull/74534) ([Arthur Passos](https://github.com/arthurpassos)). +* Исправлена проблема параллельной очистки KeeperMap при создании таблицы. [#74568](https://github.com/ClickHouse/ClickHouse/pull/74568) ([Antonio Andelic](https://github.com/antonio2368)). * Не удалять неиспользуемые столбцы проекций в подзапросах при наличии `EXCEPT` или `INTERSECT` для сохранения корректного результата запроса. Исправляет [#73930](https://github.com/ClickHouse/ClickHouse/issues/73930). Исправляет [#66465](https://github.com/ClickHouse/ClickHouse/issues/66465). [#74577](https://github.com/ClickHouse/ClickHouse/pull/74577) ([Dmitry Novik](https://github.com/novikd)). * Исправлены запросы `INSERT SELECT` между таблицами со столбцами типа `Tuple` при включённой разрежённой сериализации. [#74698](https://github.com/ClickHouse/ClickHouse/pull/74698) ([Anton Popov](https://github.com/CurtizJ)). -* Функция `right` работает некорректно при константном отрицательном смещении. [#74701](https://github.com/ClickHouse/ClickHouse/pull/74701) ([Daniil Ivanik](https://github.com/divanik)). -* Исправлена проблема, из-за которой вставка gzip-сжатых данных иногда завершалась сбоем из-за некорректной декомпрессии на стороне клиента. [#74707](https://github.com/ClickHouse/ClickHouse/pull/74707) ([siyuan](https://github.com/linkwk7)). -* Частичный отзыв прав при грантах с шаблонами (wildcard) мог приводить к удалению большего количества привилегий, чем ожидалось. Закрывает [#74263](https://github.com/ClickHouse/ClickHouse/issues/74263). [#74751](https://github.com/ClickHouse/ClickHouse/pull/74751) ([pufit](https://github.com/pufit)). -* Keeper: исправлено чтение записей журнала с диска. [#74785](https://github.com/ClickHouse/ClickHouse/pull/74785) ([Antonio Andelic](https://github.com/antonio2368)). -* Исправлена проверка привилегий для SYSTEM REFRESH/START/STOP VIEW: теперь для выполнения запроса с конкретным представлением не требуется иметь эти привилегии на `*.*`, достаточно привилегий только на это представление. [#74789](https://github.com/ClickHouse/ClickHouse/pull/74789) ([Alexander Tokmakov](https://github.com/tavplubix)). -* Функция `hasColumnInTable` не учитывала алиасы столбцов. Исправлена, теперь она также работает с алиасами столбцов. [#74841](https://github.com/ClickHouse/ClickHouse/pull/74841) ([Bharat Nallan](https://github.com/bharatnc)). -* Исправлена ошибка FILE_DOESNT_EXIST, возникавшая при слиянии частей данных таблицы с пустым столбцом в Azure Blob Storage. [#74892](https://github.com/ClickHouse/ClickHouse/pull/74892) ([Julia Kartseva](https://github.com/jkartseva)). -* Исправлено имя столбца проекции при соединении временных таблиц, закрыта [#68872](https://github.com/ClickHouse/ClickHouse/issues/68872). [#74897](https://github.com/ClickHouse/ClickHouse/pull/74897) ([Vladimir Cherkasov](https://github.com/vdimir)). - +* Функция `right` работала некорректно для константного отрицательного смещения. [#74701](https://github.com/ClickHouse/ClickHouse/pull/74701) ([Daniil Ivanik](https://github.com/divanik)). +* Исправлена проблема, из‑за которой вставка gzip‑сжатых данных иногда завершалась сбоем из‑за некорректной распаковки на стороне клиента. [#74707](https://github.com/ClickHouse/ClickHouse/pull/74707) ([siyuan](https://github.com/linkwk7)). +* Частичные операции REVOKE при использовании грантов с подстановочными символами могли отзывать больше привилегий, чем ожидалось. Закрывает [#74263](https://github.com/ClickHouse/ClickHouse/issues/74263). [#74751](https://github.com/ClickHouse/ClickHouse/pull/74751) ([pufit](https://github.com/pufit)). +* Исправление в Keeper: устранена проблема с чтением записей журнала с диска. [#74785](https://github.com/ClickHouse/ClickHouse/pull/74785) ([Antonio Andelic](https://github.com/antonio2368)). +* Исправлена проверка прав для SYSTEM REFRESH/START/STOP VIEW: теперь для выполнения запроса к конкретному представлению не требуется иметь эти права на `*.*`, достаточно прав только на это представление. [#74789](https://github.com/ClickHouse/ClickHouse/pull/74789) ([Alexander Tokmakov](https://github.com/tavplubix)). +* Ранее функция `hasColumnInTable` не учитывала столбцы-алиасы. Исправлена, чтобы также работать со столбцами-алиасами. [#74841](https://github.com/ClickHouse/ClickHouse/pull/74841) ([Bharat Nallan](https://github.com/bharatnc)). +* Исправлена ошибка FILE_DOESNT_EXIST, возникающая при слиянии частей данных для таблицы с пустым столбцом в Azure Blob Storage. [#74892](https://github.com/ClickHouse/ClickHouse/pull/74892) ([Julia Kartseva](https://github.com/jkartseva)). +* Исправлено имя столбца проекции при соединении временных таблиц, закрыт [#68872](https://github.com/ClickHouse/ClickHouse/issues/68872). [#74897](https://github.com/ClickHouse/ClickHouse/pull/74897) ([Vladimir Cherkasov](https://github.com/vdimir)). +#### Улучшения сборки/тестирования/упаковки -#### Улучшения сборки, тестирования и упаковки -* Универсальный скрипт установки теперь будет предлагать установку даже на macOS. [#74339](https://github.com/ClickHouse/ClickHouse/pull/74339) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Универсальный скрипт установки теперь предлагает выполнить установку даже на macOS. [#74339](https://github.com/ClickHouse/ClickHouse/pull/74339) ([Alexey Milovidov](https://github.com/alexey-milovidov)). \ No newline at end of file diff --git a/i18n/zh/code.json b/i18n/zh/code.json index 57fde63180f..5f82d4d89ea 100644 --- a/i18n/zh/code.json +++ b/i18n/zh/code.json @@ -68,8 +68,8 @@ "description": "搜索页面上搜索框的 ARIA 标签" }, "theme.SearchPage.algoliaLabel": { - "message": "使用 Algolia 进行搜索", - "description": "Algolia 提及功能的 ARIA 标签" + "message": "搜索服务由 Algolia 提供", + "description": "Algolia 提及项的 ARIA 标签" }, "theme.SearchPage.noResultsText": { "message": "未找到结果", @@ -84,28 +84,28 @@ "description": "博客侧边栏中“最新文章”部分的 ARIA 标签" }, "theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel": { - "message": "切换“{label}”的展开/收起状态", - "description": "用于切换折叠侧边栏类别的 ARIA 标签" + "message": "切换侧边栏可折叠分类“{label}”", + "description": "用于切换可折叠侧边栏类别的 ARIA 标签" }, "theme.NavBar.navAriaLabel": { - "message": "导航", + "message": "主要", "description": "主导航栏的 ARIA 标签" }, "theme.navbar.mobileLanguageDropdown.label": { - "message": "其他语言", + "message": "语言", "description": "移动端语言切换下拉菜单标签" }, "theme.blog.post.readMore": { - "message": "查看更多", - "description": "显示在博客文章摘要中、用于链接到完整博客文章的标签" + "message": "阅读更多", + "description": "用于在博客文章摘要中链接到完整博客文章的标签" }, "theme.blog.post.readMoreLabel": { - "message": "进一步了解 {title}", - "description": "供从摘要跳转至完整博客文章的链接使用的 ARIA 标签" + "message": "阅读更多关于 {title} 的内容", + "description": "用于从摘要跳转到完整博客文章的链接的 ARIA 标签" }, "theme.blog.post.readingTime.plurals": { - "message": "阅读时间约 {readingTime} 分钟", - "description": "“{readingTime} 分钟阅读”的复数形式标签。请根据你的语言所支持的复数形式数量进行填写(使用“|”分隔各个形式);参见 https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html" + "message": "阅读时长 1 分钟|阅读时长 {readingTime} 分钟", + "description": "“{readingTime} 分钟阅读”的复数形式标签。请根据你的语言所支持的复数形式数量,尽可能提供多种复数形式(使用“|”分隔),详见:https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html" }, "theme.docs.breadcrumbs.home": { "message": "首页", @@ -113,31 +113,31 @@ }, "theme.docs.sidebar.navAriaLabel": { "message": "文档侧边栏", - "description": "侧边栏导航的 ARIA 无障碍标签" + "description": "侧边栏导航的 ARIA 标签" }, "theme.docs.sidebar.collapseButtonTitle": { "message": "收起侧边栏", - "description": "文档侧边栏收起按钮的标题属性" + "description": "文档侧边栏折叠按钮的 title 属性" }, "theme.docs.sidebar.collapseButtonAriaLabel": { "message": "收起侧边栏", - "description": "文档侧边栏折叠按钮的 title 属性" + "description": "文档侧边栏收起按钮的 title 属性" }, "theme.docs.sidebar.closeSidebarButtonAriaLabel": { - "message": "收起导航", - "description": "用于移动端侧边栏关闭按钮的 ARIA 标签" + "message": "关闭导航栏", + "description": "移动端侧边栏中关闭按钮的 ARIA 标签" }, "theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel": { "message": "← 返回主菜单", - "description": "用于返回主菜单的“返回”按钮标签,位于移动端导航栏侧边栏的次级菜单中(该菜单通常用于显示文档侧边栏)" + "description": "移动端导航栏侧边栏二级菜单中用于返回主菜单的后退按钮标签(特别是在显示文档侧边栏时使用)" }, "theme.ErrorPageContent.title": { - "message": "发生错误", - "description": "页面崩溃时显示的备用页面标题" + "message": "页面已崩溃。", + "description": "页面崩溃时显示的回退页面标题" }, "theme.BackToTopButton.buttonAriaLabel": { "message": "返回顶部", - "description": "“返回顶部”按钮的 ARIA 标签" + "description": "返回顶部按钮的 ARIA 标签" }, "theme.blog.title": { "message": "知识库", @@ -149,275 +149,274 @@ }, "theme.blog.archive.description": { "message": "归档", - "description": "博客归档页的页面与首屏横幅描述" + "description": "博客归档页的页面与首屏(Hero)描述" }, "theme.blog.paginator.navAriaLabel": { - "message": "博客文章列表导航", - "description": "博客分页导航的 ARIA 标签" + "message": "博客列表页导航", + "description": "博客分页的 ARIA 无障碍标签" }, "theme.blog.paginator.newerEntries": { - "message": "新建文章", - "description": "用于跳转到较新博客文章页面(上一页)的标签" + "message": "较新的记录", + "description": "用于跳转到较新的博客文章页面的标签(上一页)" }, "theme.blog.paginator.olderEntries": { - "message": "往期文章", - "description": "用于导航到较早博客文章的标签(下一页)" + "message": "更早的条目", + "description": "用于跳转到更早博客文章页面(下一页)的标签" }, "theme.blog.post.paginator.navAriaLabel": { - "message": "博文导航", - "description": "博客文章分页的 ARIA 无障碍标签" + "message": "博客文章页面导航", + "description": "博客文章分页组件的 ARIA 标签" }, "theme.blog.post.paginator.newerPost": { - "message": "新文章", - "description": "用于跳转到上一篇/下一篇博客文章的按钮标签" + "message": "较新的文章", + "description": "用于跳转到较新/较早博文的按钮标签" }, "theme.blog.post.paginator.olderPost": { - "message": "往期文章", - "description": "博客文章中用于跳转到上一篇/下一篇的导航按钮标签" + "message": "上一篇文章", + "description": "用于跳转到较早/下一篇博文的按钮标签" }, "theme.tags.tagsPageLink": { "message": "查看全部标签", - "description": "跳转到标签列表页的链接标签" + "description": "指向标签列表页的链接文本" }, "theme.colorToggle.ariaLabel": { - "message": "切换深色模式(当前模式:{mode})", - "description": "用于导航栏颜色模式切换的 ARIA 无障碍标签" + "message": "在深色模式和浅色模式之间切换(当前为 {mode})", + "description": "导航栏配色模式切换按钮的 ARIA 标签" }, "theme.colorToggle.ariaLabel.mode.dark": { "message": "深色模式", - "description": "深色模式名称" + "description": "深色模式的名称" }, "theme.colorToggle.ariaLabel.mode.light": { - "message": "亮色模式", - "description": "浅色模式名称" + "message": "浅色模式", + "description": "浅色模式的名称" }, "theme.docs.DocCard.categoryDescription.plurals": { - "message": "{count} 个条目", - "description": "在生成的索引中显示在类别卡片上的默认描述,用于指示其中包含的条目数量" + "message": "1 个项目|{count} 个项目", + "description": "在生成的索引中,用于显示该类别所含项目数量的类别卡片默认描述文本" }, "theme.docs.paginator.navAriaLabel": { - "message": "文档分页", - "description": "用于文档分页的 ARIA 标签" + "message": "文档页面", + "description": "文档分页的 ARIA 标签" }, "theme.docs.paginator.previous": { "message": "上一页", - "description": "用于返回上一文档的标签" + "description": "用于跳转到上一篇文档的标签" }, "theme.docs.paginator.next": { "message": "下一步", - "description": "用于跳转到下一篇文档的标签" + "description": "用于导航到下一篇文档的标签" }, "theme.docs.tagDocListPageTitle.nDocsTagged": { - "message": "{count} 个已标记的文档", - "description": "用于“{count} docs tagged”的复数形式标签。请根据你的语言所支持的复数类别,提供相应数量的复数形式(用“|”分隔)(参见 https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" + "message": "已标记1个文档|已标记{count}个文档", + "description": "“{count} 个文档已加标签”的复数形式标签文案。请根据您的语言所支持的复数形式数量,提供相应数量的形式(使用“|”分隔)。详见:https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html" }, "theme.docs.tagDocListPageTitle": { - "message": "标记为“{tagName}”的 {nDocsTagged} 篇文档", - "description": "文档标签页的标题" + "message": "{nDocsTagged} 个带有“{tagName}”标签的文档", + "description": "文档标签页面的标题" }, "theme.docs.versions.unreleasedVersionLabel": { - "message": "本文档适用于 {siteTitle} 的预发布版本 {versionLabel}。", - "description": "用于指示用户当前正在查看文档未发布版本的标签" + "message": "这是 {siteTitle} {versionLabel} 版本的未发布文档。", + "description": "用于提示用户当前正在浏览尚未发布文档版本的标签" }, "theme.docs.versions.unmaintainedVersionLabel": { - "message": "本说明文档适用于 {siteTitle} 的 {versionLabel} 版本,且已停止维护。", - "description": "当用户查看不再维护的文档版本时显示给他们的标签" + "message": "本页面为 {siteTitle} {versionLabel} 版本的文档,已不再维护。", + "description": "用于提示用户当前正在浏览不再维护的文档版本的标签" }, "theme.docs.versions.latestVersionSuggestionLabel": { - "message": "请参阅 {latestVersionLink} 上的最新文档({versionLabel})。", + "message": "如需最新版本的文档,请参阅 {latestVersionLink}({versionLabel})。", "description": "用于提示用户检查是否有最新版本的标签" }, "theme.docs.versions.latestVersionLinkLabel": { "message": "最新版本", - "description": "用于“建议使用最新版本”链接的标签" + "description": "用于“最新版本建议”链接的标签文本" }, "theme.docs.versionBadge.label": { - "message": "版本:{versionLabel}", - "description": "版本标签" + "message": "版本:{versionLabel}" }, "theme.common.editThisPage": { "message": "编辑本页", - "description": "用于“编辑当前页面”链接的标签文本" + "description": "用于编辑当前页面的链接文字" }, "theme.common.headingLinkTitle": { - "message": "指向“{heading}”的永久链接", - "description": "链接到该标题" + "message": "指向 {heading} 的直接链接", + "description": "标题链接的标题" }, "theme.lastUpdated.atDate": { - "message": "于 {date}", - "description": "用于显示页面最近一次更新日期的文本" + "message": " 于 {date}", + "description": "用于显示页面最近一次更新日期的文字" }, "theme.lastUpdated.byUser": { - "message": "{user}", - "description": "用于标识页面最后更新者的标签" + "message": " 作者:{user}", + "description": "用于描述该页面最近由谁更新的文字" }, "theme.lastUpdated.lastUpdatedAtBy": { - "message": "上次更新:{atDate}{byUser}", - "description": "用于显示页面最近一次更新时间及更新人的文本" + "message": "最后更新于{atDate}{byUser}", + "description": "用于显示页面最近一次更新时间以及更新者的句子" }, "theme.tags.tagsListLabel": { "message": "标签:", - "description": "显示在标签列表旁边的标签" + "description": "标签列表旁边的标签" }, "theme.AnnouncementBar.closeButtonAriaLabel": { "message": "关闭", - "description": "公告栏关闭按钮的 ARIA 标签" + "description": "用于公告栏关闭按钮的 ARIA 标签" }, "theme.admonition.warning": { "message": "警告", - "description": "警告提示(:::warning)的默认标签" + "description": "用于 Warning 警告块(:::warning)的默认标签" }, "theme.CodeBlock.copied": { - "message": "已复制!", - "description": "代码块中“复制”按钮的标签" + "message": "已复制", + "description": "代码块中复制按钮的标签" }, "theme.CodeBlock.copyButtonAriaLabel": { - "message": "复制代码", - "description": "复制代码按钮的 ARIA 标签" + "message": "复制代码到剪贴板", + "description": "用于“复制代码块”按钮的 ARIA 标签" }, "theme.CodeBlock.copy": { "message": "复制", - "description": "代码块复制按钮的标签" + "description": "代码块中“复制”按钮的标签" }, "theme.CodeBlock.wordWrapToggle": { "message": "切换自动换行", - "description": "代码块自动换行切换按钮的 title 属性" + "description": "用于切换代码块行换行按钮的 title 属性" }, "theme.DocSidebarItem.expandCategoryAriaLabel": { - "message": "打开“{label}”的目录", + "message": "展开侧边栏分类“{label}”", "description": "用于展开侧边栏分类的 ARIA 标签" }, "theme.DocSidebarItem.collapseCategoryAriaLabel": { - "message": "关闭“{label}”目录", - "description": "用于折叠侧边栏分类的 ARIA 标签" + "message": "收起侧边栏分类“{label}”", + "description": "用于收起侧边栏类别的 ARIA 标签" }, "theme.NotFound.p1": { - "message": "无法找到您要访问的页面", - "description": "404 页面上的第一段" + "message": "未找到您要查找的内容。", + "description": "404 页面第一段文字" }, "theme.NotFound.p2": { - "message": "请通知链接到本页的网站所有者,该链接已失效。", - "description": "404 页面上的第二段文字" + "message": "请联系将您引导到该原始 URL 的网站所有者,并告知他们该链接已失效。", + "description": "404 页面中的第二段" }, "theme.TOCCollapsible.toggleButtonLabel": { - "message": "本页目录", - "description": "用于折叠式目录(TOC)组件中按钮的标签文本" + "message": "本页内容", + "description": "可折叠目录(TOC)组件中按钮上使用的标签" }, "theme.docs.sidebar.toggleSidebarButtonAriaLabel": { - "message": "展开导航栏", - "description": "用于移动端导航中汉堡菜单按钮的 ARIA 无障碍标签" + "message": "切换导航栏", + "description": "移动端导航汉堡菜单按钮的 ARIA 无障碍标签" }, "theme.docs.sidebar.expandButtonTitle": { - "message": "打开侧边栏", - "description": "用于文档侧边栏展开按钮的 ARIA 标签和 title 属性" + "message": "展开侧边栏", + "description": "文档侧边栏展开按钮的 ARIA 标签和 title 属性" }, "theme.docs.sidebar.expandButtonAriaLabel": { - "message": "打开侧边栏", - "description": "文档侧边栏中用于“展开”按钮的 ARIA 标签和 title 属性" + "message": "展开侧边栏", + "description": "文档侧边栏“展开”按钮的 ARIA 标签和 title 属性" }, "theme.SearchBar.label": { "message": "搜索", "description": "搜索按钮的 ARIA 标签和占位文本" }, "theme.SearchModal.searchBox.resetButtonTitle": { - "message": "清除", - "description": "搜索框中重置按钮的标签和 ARIA 标签" + "message": "清除查询", + "description": "搜索框重置按钮的文本标签和 ARIA 无障碍标签" }, "theme.SearchModal.searchBox.cancelButtonText": { "message": "取消", - "description": "搜索框中取消按钮的标签和 ARIA 标签" + "description": "搜索框取消按钮的文本和 ARIA 标签" }, "theme.SearchModal.startScreen.recentSearchesTitle": { - "message": "最近搜索", + "message": "最新", "description": "最近搜索标题" }, "theme.SearchModal.startScreen.noRecentSearchesText": { "message": "暂无最近搜索", - "description": "无最近搜索时显示的文本" + "description": "当没有最近搜索时显示的文本" }, "theme.SearchModal.startScreen.saveRecentSearchButtonTitle": { "message": "保存当前搜索", - "description": "“保存最近搜索”按钮的标签文本" + "description": "“保存最近搜索”按钮的标签" }, "theme.SearchModal.startScreen.removeRecentSearchButtonTitle": { - "message": "从历史记录中删除该搜索", - "description": "“清除最近搜索”按钮标签" + "message": "从历史记录中删除此搜索", + "description": "“清除最近搜索”按钮的标签" }, "theme.SearchModal.startScreen.favoriteSearchesTitle": { - "message": "已保存的搜索", - "description": "收藏搜索的名称" + "message": "收藏", + "description": "已收藏搜索的标题" }, "theme.SearchModal.startScreen.removeFavoriteSearchButtonTitle": { - "message": "将此搜索从收藏中移除", - "description": "“移除已收藏搜索”按钮的标签" + "message": "从收藏中移除该搜索", + "description": "“取消收藏搜索”按钮的标签" }, "theme.SearchModal.errorScreen.titleText": { - "message": "无法获取搜索结果", - "description": "搜索模态框错误页面标题" + "message": "无法获取结果", + "description": "搜索模态框错误界面标题" }, "theme.SearchModal.errorScreen.helpText": { - "message": "请检查您的网络连接。", - "description": "搜索模态框错误状态下的帮助文本" + "message": "您可能需要检查一下网络连接。", + "description": "搜索弹窗错误界面的帮助文案" }, "theme.SearchModal.footer.selectText": { "message": "选择", - "description": "Enter 键操作说明" + "description": "Enter 键操作说明文本" }, "theme.SearchModal.footer.selectKeyAriaLabel": { "message": "回车键", - "description": "用于确认选择的 Enter 键按钮的 ARIA 标签" + "description": "用于执行选择操作的 Enter 键按钮的 ARIA 标签" }, "theme.SearchModal.footer.navigateText": { - "message": "前往", - "description": "用于描述上箭头键和下箭头键操作的说明文本" + "message": "导航", + "description": "用于解释上箭头键和下箭头键操作的说明文本" }, "theme.SearchModal.footer.navigateUpKeyAriaLabel": { - "message": "向上箭头键", + "message": "上箭头", "description": "用于导航的“向上箭头”键按钮的 ARIA 标签" }, "theme.SearchModal.footer.navigateDownKeyAriaLabel": { - "message": "下箭头键", - "description": "用于控制导航的下箭头键按钮的 ARIA 标签" + "message": "下箭头", + "description": "用于执行导航操作的“向下箭头”键按钮的 ARIA 标签" }, "theme.SearchModal.footer.closeText": { "message": "关闭", - "description": "Esc 键操作说明" + "description": "用于说明 Escape 键行为的文本" }, "theme.SearchModal.footer.closeKeyAriaLabel": { "message": "Esc 键", - "description": "用于关闭模态框的 Escape 键按钮的 ARIA 标签" + "description": "用于关闭模态窗口的 Escape 键按钮的 ARIA 标签" }, "theme.SearchModal.footer.searchByText": { - "message": "搜索", - "description": "本文说明搜索功能由 Algolia 驱动。" + "message": "搜索依据", + "description": "这段文字说明搜索功能由 Algolia 提供支持。" }, "theme.SearchModal.noResultsScreen.noResultsText": { - "message": "未找到任何结果", - "description": "此文本表示以下搜索未找到任何结果" + "message": "未找到匹配的结果", + "description": "本文说明,以下搜索没有任何结果" }, "theme.SearchModal.noResultsScreen.suggestedQueryText": { - "message": "试试以下搜索:", - "description": "当以下搜索没有结果时显示的建议查询文本" + "message": "试试搜索", + "description": "当以下搜索没有结果时显示的推荐查询文本" }, "theme.SearchModal.noResultsScreen.reportMissingResultsText": { - "message": "有没有更好的搜索结果?", - "description": "用于在用户认为有些结果缺失时显示的提示文本" + "message": "你认为这个查询应该返回结果吗?", + "description": "当用户认为结果缺失时所显示的问题文案" }, "theme.SearchModal.noResultsScreen.reportMissingResultsLinkText": { - "message": "报告", - "description": "用于报告结果缺失的链接标签" + "message": "请告知我们。", + "description": "“报告缺失结果”链接所使用的文本" }, "theme.SearchModal.placeholder": { "message": "搜索文档", - "description": "DocSearch 弹出式模态框中输入框的占位符文本" + "description": "DocSearch 弹出模态框中输入框的占位文本" }, "theme.blog.post.plurals": { - "message": "{count} 条目", - "description": "“{count} 篇帖子”的复数标签。请根据你的语言所支持的所有复数形式提供相应的写法(使用“|”分隔各个形式),详见:https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html" + "message": "一篇帖子|{count} 篇帖子", + "description": "“{count} posts”的复数标签。根据你的语言所支持的复数形式数量,尽可能提供多种复数形式(用“|”分隔)(参见 https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" }, "theme.blog.tagTitle": { - "message": "共有 {nPosts} 篇文章带有「{tagName}」标签", - "description": "博客标签页标题" + "message": "包含标签“{tagName}”的 {nPosts} 篇文章", + "description": "博客标签页的标题" }, "theme.blog.author.pageTitle": { "message": "{authorName} - {nPosts} 篇文章", @@ -425,39 +424,39 @@ }, "theme.blog.authorsList.pageTitle": { "message": "作者", - "description": "作者页面的标题" + "description": "作者页标题" }, "theme.blog.authorsList.viewAll": { "message": "查看全部作者", - "description": "博客作者页面链接标签" + "description": "用于跳转到博客作者页面的链接标签" }, "theme.blog.author.noPosts": { - "message": "该作者尚未发表任何内容。", - "description": "尚未发布博客文章的作者所显示的文本" + "message": "此作者尚未发布任何文章。", + "description": "用于尚无博客文章的作者的文案" }, "theme.contentVisibility.unlistedBanner.title": { - "message": "私有页面", + "message": "未列出页面", "description": "未公开内容横幅标题" }, "theme.contentVisibility.unlistedBanner.message": { - "message": "此页面是私有的。它不会出现在搜索结果中,只有持有此页面直接链接的用户才能查看。", - "description": "未列出内容横幅的消息文本" + "message": "此页面未列入公开列表。搜索引擎不会对其进行收录,只有持有直接链接的用户才能访问。", + "description": "未列出内容横幅提示" }, "theme.contentVisibility.draftBanner.title": { "message": "草稿页", - "description": "草稿内容横幅栏标题" + "description": "草稿内容横幅标题" }, "theme.contentVisibility.draftBanner.message": { - "message": "本页面为草稿,不会出现在公开环境中的正式内容里。", - "description": "草稿内容横幅提示" + "message": "此页面是草稿,仅在开发环境中可见,不会被纳入生产构建。", + "description": "草稿内容横幅提示信息" }, "theme.ErrorPageContent.tryAgain": { - "message": "请重试。", + "message": "重试", "description": "在 React 错误边界捕获错误后用于重试渲染的按钮标签" }, "theme.common.skipToMainContent": { "message": "跳到主要内容", - "description": "用于辅助功能的“跳转到内容”标签,使用户能够通过键盘 Tab/Enter 导航快速跳转到主要内容" + "description": "用于无障碍访问的“跳转到主内容”标签,允许用户通过键盘 Tab/Enter 导航快速跳转到主要内容区域" }, "theme.tags.tagsPageTitle": { "message": "标签", @@ -586,20 +585,16 @@ "description": "实用数据集与教程" }, "sidebar.dropdownCategories.category.Cloud": { - "message": "云", - "description": "云服务" + "message": "云" }, "sidebar.dropdownCategories.category.description.Cloud": { - "message": "最快的 ClickHouse 部署方式", - "description": "部署 ClickHouse 的最快途径" + "message": "最快的 ClickHouse 部署方式" }, "sidebar.dropdownCategories.category.Cloud.Get Started": { - "message": "简介", - "description": "快速开始" + "message": "快速开始" }, "sidebar.dropdownCategories.category.Cloud.Get Started.description": { - "message": "立即开始使用 ClickHouse Cloud", - "description": "快速上手 ClickHouse Cloud" + "message": "快速上手 ClickHouse Cloud" }, "sidebar.dropdownCategories.category.Cloud.Managing Cloud": { "message": "云管理", @@ -746,36 +741,28 @@ "description": "用于帮助你管理 ClickHouse 的元数据表" }, "sidebar.dropdownCategories.category.Reference": { - "message": "参考资料", - "description": "参考" + "message": "参考资料" }, "sidebar.dropdownCategories.category.description.Reference": { - "message": "ClickHouse 功能参考文档", - "description": "ClickHouse 功能参考文档" + "message": "ClickHouse 功能参考文档" }, "sidebar.dropdownCategories.category.Reference.Introduction": { - "message": "简介", - "description": "简介" + "message": "简介" }, "sidebar.dropdownCategories.category.Reference.Introduction.description": { - "message": "了解 ClickHouse 语法", - "description": "了解 ClickHouse 语法" + "message": "了解 ClickHouse 语法" }, "sidebar.dropdownCategories.category.Reference.Functions": { - "message": "函数", - "description": "函数" + "message": "函数" }, "sidebar.dropdownCategories.category.Reference.Functions.description": { - "message": "用于数据分析的数百个内置函数", - "description": "数百个内置函数,用于分析数据" + "message": "数百种内置函数,助您分析数据" }, "sidebar.dropdownCategories.category.Reference.Engines": { - "message": "引擎", - "description": "引擎" + "message": "引擎" }, "sidebar.dropdownCategories.category.Reference.Engines.description": { - "message": "为你的数据选择合适的表引擎和数据库引擎", - "description": "为您的数据选择合适的表引擎和数据库引擎" + "message": "为您的数据选用合适的表引擎和数据库引擎" }, "sidebar.dropdownCategories.category.Reference.Other Features": { "message": "其他功能", @@ -786,12 +773,10 @@ "description": "探索更多 ClickHouse 特性" }, "sidebar.dropdownCategories.category.Integrations": { - "message": "集成", - "description": "集成" + "message": "集成" }, "sidebar.dropdownCategories.category.description.Integrations": { - "message": "ClickHouse 的集成、客户端和驱动程序", - "description": "ClickHouse 的集成、客户端与驱动" + "message": "可与 ClickHouse 搭配使用的集成、客户端和驱动程序" }, "sidebar.dropdownCategories.category.Integrations.All Integrations": { "message": "全部集成", @@ -810,12 +795,10 @@ "description": "使用你常用的编程语言与 ClickHouse 交互" }, "sidebar.dropdownCategories.category.Integrations.ClickPipes": { - "message": "ClickPipes", - "description": "ClickPipes" + "message": "ClickPipes" }, "sidebar.dropdownCategories.category.Integrations.ClickPipes.description": { - "message": "将数据摄取到 ClickHouse 的最简便方式", - "description": "将数据摄取到 ClickHouse 的最简便方式" + "message": "将数据摄取到 ClickHouse 的最简便方式" }, "sidebar.dropdownCategories.category.Integrations.Native Clients & Interfaces": { "message": "原生客户端和接口", @@ -858,20 +841,16 @@ "description": "使用多种 ELT 工具向 ClickHouse 摄取数据" }, "sidebar.dropdownCategories.category.chDB": { - "message": "chDB", - "description": "chDB" + "message": "chDB" }, "sidebar.dropdownCategories.category.description.chDB": { - "message": "chDB 是 ClickHouse 的嵌入式版本。", - "description": "chDB 是一款嵌入式 ClickHouse 数据库" + "message": "chDB 是 ClickHouse 的嵌入式版本" }, "sidebar.dropdownCategories.category.chDB.Learn chDB": { - "message": "了解 chDB", - "description": "了解 chDB" + "message": "了解 chDB" }, "sidebar.dropdownCategories.category.chDB.Learn chDB.description": { - "message": "了解如何使用 chDB", - "description": "使用 chDB" + "message": "了解如何使用 chDB" }, "sidebar.dropdownCategories.category.chDB.Language Integrations": { "message": "语言集成", @@ -882,44 +861,34 @@ "description": "使用编程语言客户端库连接 chDB" }, "sidebar.dropdownCategories.category.chDB.Guides": { - "message": "指南", - "description": "指南" + "message": "指南" }, "sidebar.dropdownCategories.category.chDB.Guides.description": { - "message": "chDB 使用指南", - "description": "chDB 使用指南" + "message": "chDB 使用指南" }, "sidebar.dropdownCategories.category.About": { - "message": "概览", - "description": "简介" + "message": "关于" }, "sidebar.dropdownCategories.category.description.About": { - "message": "进一步了解 ClickHouse", - "description": "深入了解 ClickHouse" + "message": "进一步了解 ClickHouse" }, "sidebar.dropdownCategories.category.About.Adopters": { - "message": "实现示例", - "description": "采用方" + "message": "采用方" }, "sidebar.dropdownCategories.category.About.Adopters.description": { - "message": "使用 ClickHouse 的企业", - "description": "ClickHouse 用户" + "message": "ClickHouse 用户" }, "sidebar.dropdownCategories.category.About.Changelogs": { - "message": "更新日志", - "description": "更新日志" + "message": "更新日志" }, "sidebar.dropdownCategories.category.About.Changelogs.description": { - "message": "查看 ClickHouse 的最新更改", - "description": "查看 ClickHouse 中的最新变更" + "message": "查看 ClickHouse 的最新更改" }, "sidebar.dropdownCategories.category.About.Support": { - "message": "支持", - "description": "支持" + "message": "支持" }, "sidebar.dropdownCategories.category.About.Support.description": { - "message": "获得 ClickHouse 工程师的支持", - "description": "获取 ClickHouse 工程师支持" + "message": "获得 ClickHouse 工程师的支持" }, "sidebar.dropdownCategories.category.About.Development and Contributing": { "message": "开发与贡献", @@ -938,408 +907,29 @@ "Report an issue": { "message": "反馈问题" }, - "theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel": { - "message": "展开或折叠侧边栏类别“{label}”", - "description": "用于切换可折叠侧边栏分类的 ARIA 标签" - }, - "theme.NavBar.navAriaLabel": { - "message": "主要", - "description": "主导航栏的 ARIA 标签" - }, - "theme.navbar.mobileLanguageDropdown.label": { - "message": "语言", - "description": "移动端语言切换下拉菜单的标签" - }, - "theme.NotFound.p1": { - "message": "未找到您要查找的内容。", - "description": "404 页面中的第一段" - }, - "theme.NotFound.p2": { - "message": "请联系将你链接到原始 URL 的网站所有者,并告知他们该链接已失效。", - "description": "404 页面上的第二段" - }, - "theme.blog.post.readingTime.plurals": { - "message": "1 分钟阅读 | {readingTime} 分钟阅读", - "description": "“{readingTime} 分钟阅读”的复数形式标签。请根据你的语言所支持的复数形式数量,提供相应数量的复数形式(用“|”分隔)。详见:https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html" - }, - "theme.docs.breadcrumbs.home": { - "message": "首页", - "description": "面包屑导航中首页的 ARIA 标签" - }, - "theme.blog.post.readMore": { - "message": "了解更多", - "description": "用于在博客文章摘要中链接到完整博客文章的标签" - }, - "theme.blog.post.readMoreLabel": { - "message": "进一步了解 {title}", - "description": "从摘要跳转到完整博客文章的链接的 ARIA 标签" - }, - "theme.docs.sidebar.collapseButtonTitle": { - "message": "折叠侧边栏", - "description": "文档侧边栏折叠按钮的标题属性" - }, - "theme.docs.sidebar.collapseButtonAriaLabel": { - "message": "折叠侧边栏", - "description": "文档侧边栏收起按钮的 title 属性" - }, - "theme.docs.sidebar.navAriaLabel": { - "message": "文档侧边栏", - "description": "侧边栏导航的 ARIA 标签" - }, - "theme.docs.sidebar.closeSidebarButtonAriaLabel": { - "message": "收起导航栏", - "description": "移动端侧边栏“关闭”按钮的 ARIA 标签" - }, - "theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel": { - "message": "← 返回主菜单", - "description": "用于返回主菜单的后退按钮标签,位于移动端导航栏侧边栏的二级菜单中(主要用于显示文档侧边栏)" - }, - "theme.ErrorPageContent.title": { - "message": "页面已崩溃。", - "description": "页面崩溃时显示的回退页面标题" - }, - "theme.BackToTopButton.buttonAriaLabel": { - "message": "返回顶部", - "description": "返回顶部按钮的 ARIA 标签" - }, - "theme.blog.archive.title": { - "message": "归档", - "description": "博客归档页的页面标题和主视觉(Hero)标题" - }, - "theme.blog.archive.description": { - "message": "归档", - "description": "博客归档页的页面与首屏描述" - }, - "theme.blog.paginator.navAriaLabel": { - "message": "博客列表页导航", - "description": "博客分页控件的 ARIA 标签" - }, - "theme.blog.paginator.newerEntries": { - "message": "较新的条目", - "description": "用于跳转到较新博客文章页面(上一页)的标签" - }, - "theme.blog.paginator.olderEntries": { - "message": "更早的记录", - "description": "用于跳转到较早博客文章页面(下一页)的标签" - }, - "theme.blog.post.paginator.navAriaLabel": { - "message": "博客文章页导航", - "description": "博客文章分页的 ARIA 可访问性标签" - }, - "theme.blog.post.paginator.newerPost": { - "message": "较新的文章", - "description": "用于跳转到较新/较早博客文章的按钮标签" - }, - "theme.blog.post.paginator.olderPost": { - "message": "更早的文章", - "description": "博客文章中用于跳转到上一篇/下一篇文章的按钮标签" - }, - "theme.tags.tagsPageLink": { - "message": "查看全部标签", - "description": "指向标签列表页的链接的文本标签" - }, - "theme.colorToggle.ariaLabel": { - "message": "切换深色/浅色模式(当前:{mode})", - "description": "导航栏配色模式切换按钮的 ARIA 标签" - }, - "theme.colorToggle.ariaLabel.mode.dark": { - "message": "深色模式", - "description": "深色模式名称" - }, - "theme.colorToggle.ariaLabel.mode.light": { - "message": "浅色模式", - "description": "浅色模式的名称" - }, - "theme.docs.DocCard.categoryDescription.plurals": { - "message": "1 项|{count} 项", - "description": "在生成的索引中,类别卡片的默认描述文本,用于说明该类别包含的条目数量" - }, - "theme.docs.paginator.navAriaLabel": { - "message": "文档页面", - "description": "用于文档分页的 ARIA 无障碍标签" - }, - "theme.docs.paginator.previous": { - "message": "上一页", - "description": "用于跳转到上一篇文档的标签" - }, - "theme.docs.paginator.next": { - "message": "下一步", - "description": "用于跳转到下一篇文档的标签" - }, - "theme.docs.tagDocListPageTitle.nDocsTagged": { - "message": "已标记 1 个文档|已标记 {count} 个文档", - "description": "用于“{count} docs tagged”的复数形式标签。根据您的语言所支持的复数形式数量,提供相应数量的复数形式(使用“|”分隔)(参见 https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.docs.tagDocListPageTitle": { - "message": "{nDocsTagged} 篇带有「{tagName}」标签的文档", - "description": "文档标签页标题" - }, - "theme.docs.versionBadge.label": { - "message": "版本:{versionLabel}" - }, - "theme.docs.versions.unreleasedVersionLabel": { - "message": "这是针对 {siteTitle} {versionLabel} 版本的未发布文档。", - "description": "用于提示用户当前正在浏览尚未发布文档版本的标签" - }, - "theme.docs.versions.unmaintainedVersionLabel": { - "message": "这是 {siteTitle} {versionLabel} 的文档,该版本已不再主动维护。", - "description": "用于提示用户当前正在浏览已不再维护的文档版本的标签" - }, - "theme.docs.versions.latestVersionSuggestionLabel": { - "message": "如需最新版本的文档,请参阅 {latestVersionLink}({versionLabel})。", - "description": "用于提示用户查看最新版本的标签" - }, - "theme.docs.versions.latestVersionLinkLabel": { - "message": "最新版本", - "description": "用于“最新版本推荐”链接的标签文本" - }, - "theme.common.editThisPage": { - "message": "编辑本页", - "description": "用于编辑当前页面的链接文本" - }, - "theme.common.headingLinkTitle": { - "message": "直接链接到 {heading}", - "description": "指向标题链接的标题文本" - }, - "theme.lastUpdated.atDate": { - "message": " 于 {date}", - "description": "用于标注页面最后更新日期的文字" - }, - "theme.lastUpdated.byUser": { - "message": " 作者:{user}", - "description": "用于标示该页面最近由谁更新的文字" - }, - "theme.lastUpdated.lastUpdatedAtBy": { - "message": "上次更新:{atDate}{byUser}", - "description": "用于显示页面最近一次更新时间及更新者的文本" - }, - "theme.tags.tagsListLabel": { - "message": "标签:", - "description": "标签列表旁的标签" - }, - "theme.admonition.warning": { - "message": "警告", - "description": "用于 :::warning 警告块的默认标签" - }, - "theme.AnnouncementBar.closeButtonAriaLabel": { - "message": "关闭", - "description": "用于公告栏关闭按钮的 ARIA 标签" - }, - "theme.CodeBlock.copied": { - "message": "已复制", - "description": "代码块中“已复制”按钮的标签" - }, - "theme.CodeBlock.copyButtonAriaLabel": { - "message": "复制代码到剪贴板", - "description": "“复制代码块”按钮的 ARIA 标签" - }, - "theme.CodeBlock.copy": { - "message": "复制", - "description": "代码块中的“复制”按钮标签" - }, - "theme.CodeBlock.wordWrapToggle": { - "message": "切换自动换行", - "description": "代码块行中切换自动换行按钮的 title 属性" - }, - "theme.DocSidebarItem.expandCategoryAriaLabel": { - "message": "展开侧边栏中的“{label}”类别", - "description": "用于展开侧边栏分类的 ARIA 标签" - }, - "theme.DocSidebarItem.collapseCategoryAriaLabel": { - "message": "收起“{label}”侧边栏类别", - "description": "用于收起侧边栏分类的 ARIA 标签" - }, - "theme.TOCCollapsible.toggleButtonLabel": { - "message": "本页目录", - "description": "折叠式目录(TOC)组件中按钮上的标签文本" - }, - "theme.docs.sidebar.toggleSidebarButtonAriaLabel": { - "message": "切换导航栏", - "description": "移动端导航栏中汉堡菜单按钮的 ARIA 标签" - }, - "theme.docs.sidebar.expandButtonTitle": { - "message": "展开侧边栏", - "description": "用于文档侧边栏展开按钮的 ARIA 标签和 title 属性" - }, - "theme.docs.sidebar.expandButtonAriaLabel": { - "message": "展开侧边栏", - "description": "文档侧边栏展开按钮的 ARIA 标签和 title 属性" - }, - "theme.SearchPage.algoliaLabel": { - "message": "搜索服务由 Algolia 提供", - "description": "用于 Algolia 提及的 ARIA 标签" - }, - "theme.SearchBar.label": { - "message": "搜索", - "description": "搜索按钮的 ARIA 标签和占位文本" - }, - "theme.SearchModal.searchBox.resetButtonTitle": { - "message": "清除查询", - "description": "搜索框重置按钮的文本标签和 ARIA 标签" - }, - "theme.SearchModal.searchBox.cancelButtonText": { - "message": "取消", - "description": "搜索框中取消按钮的文本标签和 ARIA 标签" - }, - "theme.SearchModal.startScreen.recentSearchesTitle": { - "message": "最近", - "description": "“最近搜索”标题" - }, - "theme.SearchModal.startScreen.noRecentSearchesText": { - "message": "暂无最近搜索", - "description": "无最近搜索时显示的文本" - }, - "theme.SearchModal.startScreen.saveRecentSearchButtonTitle": { - "message": "保存当前搜索", - "description": "“保存最近搜索”按钮标签" - }, - "theme.SearchModal.startScreen.removeRecentSearchButtonTitle": { - "message": "从历史记录中删除此搜索", - "description": "“清除最近搜索”按钮的标签" - }, - "theme.SearchModal.startScreen.favoriteSearchesTitle": { - "message": "收藏", - "description": "已收藏搜索的标题" - }, - "theme.SearchModal.startScreen.removeFavoriteSearchButtonTitle": { - "message": "取消收藏此搜索", - "description": "“移除收藏搜索”按钮的标签" - }, - "theme.SearchModal.errorScreen.titleText": { - "message": "无法获取结果", - "description": "搜索模态框错误页面的标题" - }, - "theme.SearchModal.errorScreen.helpText": { - "message": "您可以先检查一下网络连接。", - "description": "搜索模态窗口错误界面的帮助文本" - }, - "theme.SearchModal.footer.selectText": { - "message": "选择", - "description": "Enter 键动作的说明文本" - }, - "theme.SearchModal.footer.selectKeyAriaLabel": { - "message": "回车键", - "description": "用于确认选择的 Enter 键按钮的 ARIA 标签" - }, - "theme.SearchModal.footer.navigateText": { - "message": "用于导航", - "description": "用于说明上箭头键和下箭头键操作的文本" - }, - "theme.SearchModal.footer.navigateUpKeyAriaLabel": { - "message": "上箭头", - "description": "用于导航的“向上箭头”键按钮的 ARIA 标签" - }, - "theme.SearchModal.footer.navigateDownKeyAriaLabel": { - "message": "下箭头", - "description": "用于控制导航的向下箭头键按钮的 ARIA 标签" - }, - "theme.SearchModal.footer.closeText": { - "message": "关闭", - "description": "Esc 键操作说明文本" - }, - "theme.SearchModal.footer.closeKeyAriaLabel": { - "message": "Esc 键", - "description": "用于关闭模态对话框的 Escape 键按钮的 ARIA 标签" - }, - "theme.SearchModal.footer.searchByText": { - "message": "搜索方式", - "description": "文中说明,搜索功能由 Algolia 提供支持" - }, - "theme.SearchModal.noResultsScreen.noResultsText": { - "message": "未找到结果", - "description": "该文本说明,以下搜索没有任何结果" - }, - "theme.SearchModal.noResultsScreen.suggestedQueryText": { - "message": "尝试搜索", - "description": "当以下搜索无结果时显示的推荐查询提示文本" - }, - "theme.SearchModal.noResultsScreen.reportMissingResultsText": { - "message": "觉得这个查询本该返回结果吗?", - "description": "当用户认为结果不完整时所使用的问题文案" - }, - "theme.SearchModal.noResultsScreen.reportMissingResultsLinkText": { - "message": "请告诉我们。", - "description": "用于“报告缺失结果”链接的链接文字" - }, - "theme.SearchModal.placeholder": { - "message": "搜索文档", - "description": "DocSearch 弹出模态框中输入框的占位文本" - }, - "theme.blog.post.plurals": { - "message": "一篇文章|{count}篇文章", - "description": "“{count} 篇文章”的复数形式标签。请根据目标语言所支持的复数形式数量,提供相应数量的形式(使用 \"|\" 分隔),详见:https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html" - }, - "theme.blog.tagTitle": { - "message": "{nPosts} 篇文章被标记为“{tagName}”", - "description": "博客标签页面的标题" - }, - "theme.blog.author.pageTitle": { - "message": "{authorName} - {nPosts} 篇文章", - "description": "博客作者页面标题" - }, - "theme.blog.authorsList.pageTitle": { - "message": "作者", - "description": "作者页标题" - }, - "theme.blog.authorsList.viewAll": { - "message": "查看全部作者", - "description": "指向博客作者页面的链接的标签" - }, - "theme.blog.author.noPosts": { - "message": "该作者尚未发布任何文章。", - "description": "适用于尚无博客文章作者的文本" - }, - "theme.contentVisibility.unlistedBanner.title": { - "message": "未列出页面", - "description": "未列出内容的横幅标题" - }, - "theme.contentVisibility.unlistedBanner.message": { - "message": "此页面未公开列出。搜索引擎不会对其进行收录,只有通过直接链接访问的用户才能打开它。", - "description": "未列出内容的横幅消息" - }, - "theme.contentVisibility.draftBanner.title": { - "message": "草稿页", - "description": "草稿内容横幅标题" - }, - "theme.contentVisibility.draftBanner.message": { - "message": "本页面为草稿,仅在开发环境中可见,不会包含在生产构建中。", - "description": "草稿内容横幅提示信息" - }, - "theme.ErrorPageContent.tryAgain": { - "message": "重试", - "description": "当 React 错误边界捕获到错误时,用于重新尝试渲染的按钮标签文本" - }, - "theme.common.skipToMainContent": { - "message": "跳到主要内容", - "description": "用于无障碍访问的“跳到内容”标签,允许用户通过键盘 Tab/Enter 导航快速跳转到主要内容" - }, - "theme.tags.tagsPageTitle": { - "message": "标签", - "description": "标签列表页标题" - }, "sidebar.dropdownCategories.category.Get started": { - "message": "快速入门" + "message": "快速开始" }, "sidebar.dropdownCategories.category.description.Get started": { - "message": "了解如何使用 ClickHouse" + "message": "学习如何使用 ClickHouse" }, "sidebar.dropdownCategories.category.Get started.Introduction": { "message": "简介" }, "sidebar.dropdownCategories.category.Get started.Introduction.description": { - "message": "ClickHouse 简介" + "message": "ClickHouse 介绍" }, "sidebar.dropdownCategories.category.Get started.Concepts": { "message": "概念" }, "sidebar.dropdownCategories.category.Get started.Concepts.description": { - "message": "核心概念" + "message": "核心概念概览" }, "sidebar.dropdownCategories.category.Get started.Starter guides": { - "message": "入门指南" + "message": "快速入门" }, "sidebar.dropdownCategories.category.Get started.Starter guides.description": { - "message": "学习 ClickHouse 从这里开始" + "message": "学习 ClickHouse,就从这里开始" }, "sidebar.dropdownCategories.category.Get started.Best practices": { "message": "最佳实践" @@ -1351,58 +941,46 @@ "message": "迁移指南" }, "sidebar.dropdownCategories.category.Get started.Migration guides.description": { - "message": "将您的数据库迁移到 ClickHouse" + "message": "将数据库迁移到 ClickHouse" }, "sidebar.dropdownCategories.category.Get started.Use case guides": { "message": "使用场景指南" }, "sidebar.dropdownCategories.category.Get started.Use case guides.description": { - "message": "ClickHouse 常见使用场景指南" + "message": "ClickHouse 常见用例指南" }, "sidebar.dropdownCategories.category.Get started.Example datasets": { "message": "示例数据集" }, "sidebar.dropdownCategories.category.Get started.Example datasets.description": { - "message": "有用的数据集和教程" + "message": "实用数据集和教程" }, "sidebar.dropdownCategories.category.Get started.Tips and community wisdom": { - "message": "技巧与社区智慧" + "message": "提示与社区经验" }, "sidebar.dropdownCategories.category.Get started.Tips and community wisdom.description": { - "message": "来自社区的技巧和窍门" - }, - "sidebar.dropdownCategories.category.Cloud": { - "message": "Cloud" - }, - "sidebar.dropdownCategories.category.description.Cloud": { - "message": "部署 ClickHouse 的最快方式" - }, - "sidebar.dropdownCategories.category.Cloud.Get Started": { - "message": "开始使用" - }, - "sidebar.dropdownCategories.category.Cloud.Get Started.description": { - "message": "快速开始使用 ClickHouse Cloud" + "message": "来自社区的技巧与经验" }, "sidebar.dropdownCategories.category.Cloud.Features": { "message": "功能" }, "sidebar.dropdownCategories.category.Cloud.Features.description": { - "message": "ClickHouse Cloud 提供的功能" + "message": "ClickHouse Cloud 的功能特性" }, "sidebar.dropdownCategories.category.Cloud.Guides": { "message": "指南" }, "sidebar.dropdownCategories.category.Cloud.Guides.description": { - "message": "ClickHouse Cloud 指南" + "message": "ClickHouse Cloud 使用指南" }, "sidebar.dropdownCategories.category.Cloud.Reference": { - "message": "参考" + "message": "参考资料" }, "sidebar.dropdownCategories.category.Cloud.Reference.description": { "message": "ClickHouse Cloud 参考文档" }, "sidebar.dropdownCategories.category.Manage data": { - "message": "数据管理" + "message": "管理数据" }, "sidebar.dropdownCategories.category.description.Manage data": { "message": "如何在 ClickHouse 中管理数据" @@ -1411,40 +989,40 @@ "message": "核心数据概念" }, "sidebar.dropdownCategories.category.Manage data.Core data concepts.description": { - "message": "了解 ClickHouse 内部概念" + "message": "了解 ClickHouse 的内部概念" }, "sidebar.dropdownCategories.category.Manage data.Updating data": { "message": "更新数据" }, "sidebar.dropdownCategories.category.Manage data.Updating data.description": { - "message": "在 ClickHouse 中更新和替换数据" + "message": "在 ClickHouse 中更新与替换数据" }, "sidebar.dropdownCategories.category.Manage data.Deleting data": { "message": "删除数据" }, "sidebar.dropdownCategories.category.Manage data.Deleting data.description": { - "message": "在 ClickHouse 中删除数据" + "message": "删除 ClickHouse 中的数据" }, "sidebar.dropdownCategories.category.Manage data.Data modeling": { "message": "数据建模" }, "sidebar.dropdownCategories.category.Manage data.Data modeling.description": { - "message": "优化您的架构和数据模型" + "message": "优化表结构和数据模型" }, "sidebar.dropdownCategories.category.Manage data.Performance and optimizations": { "message": "性能与优化" }, "sidebar.dropdownCategories.category.Manage data.Performance and optimizations.description": { - "message": "帮助您优化 ClickHouse 的指南" + "message": "优化 ClickHouse 的指南" }, "sidebar.dropdownCategories.category.Server admin": { - "message": "服务器管理" + "message": "服务器管理员" }, "sidebar.dropdownCategories.category.description.Server admin": { - "message": "管理和部署 ClickHouse" + "message": "管理与部署 ClickHouse" }, "sidebar.dropdownCategories.category.Server admin.Deployments and scaling": { - "message": "部署与扩展" + "message": "部署与伸缩" }, "sidebar.dropdownCategories.category.Server admin.Deployments and scaling.description": { "message": "如何部署 ClickHouse" @@ -1453,7 +1031,7 @@ "message": "安全与认证" }, "sidebar.dropdownCategories.category.Server admin.Security and authentication.description": { - "message": "保护您的 ClickHouse 部署" + "message": "保护 ClickHouse 部署安全" }, "sidebar.dropdownCategories.category.Server admin.Settings": { "message": "设置" @@ -1462,106 +1040,70 @@ "message": "配置 ClickHouse" }, "sidebar.dropdownCategories.category.Server admin.Tools and utilities": { - "message": "工具与实用程序" + "message": "工具和实用程序" }, "sidebar.dropdownCategories.category.Server admin.Tools and utilities.description": { - "message": "帮助您管理 ClickHouse 的工具" + "message": "用于管理 ClickHouse 的工具" }, "sidebar.dropdownCategories.category.Server admin.System tables": { "message": "系统表" }, "sidebar.dropdownCategories.category.Server admin.System tables.description": { - "message": "帮助您管理 ClickHouse 的元数据表" - }, - "sidebar.dropdownCategories.category.Reference": { - "message": "参考" - }, - "sidebar.dropdownCategories.category.description.Reference": { - "message": "ClickHouse 功能参考文档" - }, - "sidebar.dropdownCategories.category.Reference.Introduction": { - "message": "简介" - }, - "sidebar.dropdownCategories.category.Reference.Introduction.description": { - "message": "学习 ClickHouse 语法" - }, - "sidebar.dropdownCategories.category.Reference.Functions": { - "message": "函数" - }, - "sidebar.dropdownCategories.category.Reference.Functions.description": { - "message": "数百个内置函数帮助您分析数据" - }, - "sidebar.dropdownCategories.category.Reference.Engines": { - "message": "引擎" - }, - "sidebar.dropdownCategories.category.Reference.Engines.description": { - "message": "为您的数据使用正确的表和数据库引擎" - }, - "sidebar.dropdownCategories.category.Integrations": { - "message": "集成" - }, - "sidebar.dropdownCategories.category.description.Integrations": { - "message": "与 ClickHouse 配合使用的集成、客户端和驱动程序" + "message": "用于管理 ClickHouse 的元数据表" }, "sidebar.dropdownCategories.category.Integrations.All integrations": { - "message": "所有集成" + "message": "全部集成" }, "sidebar.dropdownCategories.category.Integrations.All integrations.description": { "message": "将 ClickHouse 与其他数据库和应用程序集成" }, "sidebar.dropdownCategories.category.Integrations.Language clients": { - "message": "语言客户端" + "message": "各语言客户端" }, "sidebar.dropdownCategories.category.Integrations.Language clients.description": { - "message": "使用您喜欢的语言与 ClickHouse 配合使用" - }, - "sidebar.dropdownCategories.category.Integrations.ClickPipes": { - "message": "ClickPipes" - }, - "sidebar.dropdownCategories.category.Integrations.ClickPipes.description": { - "message": "将数据导入 ClickHouse 的最简单方法" + "message": "使用你偏好的编程语言与 ClickHouse 交互" }, "sidebar.dropdownCategories.category.Integrations.Native clients & interfaces": { "message": "原生客户端与接口" }, "sidebar.dropdownCategories.category.Integrations.Native clients & interfaces.description": { - "message": "选择客户端和接口连接到 ClickHouse" + "message": "选择用于连接 ClickHouse 的客户端和接口" }, "sidebar.dropdownCategories.category.Integrations.Data sources": { "message": "数据源" }, "sidebar.dropdownCategories.category.Integrations.Data sources.description": { - "message": "从您首选的源将数据加载到 ClickHouse" + "message": "从首选数据源向 ClickHouse 加载数据" }, "sidebar.dropdownCategories.category.Integrations.Data visualization": { "message": "数据可视化" }, "sidebar.dropdownCategories.category.Integrations.Data visualization.description": { - "message": "将 ClickHouse 连接到您喜欢的可视化工具" + "message": "将 ClickHouse 连接到您偏好的可视化工具" }, "sidebar.dropdownCategories.category.Integrations.Data formats": { "message": "数据格式" }, "sidebar.dropdownCategories.category.Integrations.Data formats.description": { - "message": "探索 ClickHouse 支持的数据格式" + "message": "了解 ClickHouse 支持的各种数据格式" }, "sidebar.dropdownCategories.category.Integrations.Data ingestion": { "message": "数据摄取" }, "sidebar.dropdownCategories.category.Integrations.Data ingestion.description": { - "message": "使用各种 ELT 工具将数据导入 ClickHouse" + "message": "通过多种 ELT 工具将数据摄取到 ClickHouse 中" }, "sidebar.dropdownCategories.category.ClickStack": { "message": "ClickStack" }, "sidebar.dropdownCategories.category.description.ClickStack": { - "message": "ClickStack - ClickHouse 可观测性堆栈" + "message": "ClickStack - ClickHouse 可观测性技术栈" }, "sidebar.dropdownCategories.category.ClickStack.Getting started": { "message": "快速入门" }, "sidebar.dropdownCategories.category.ClickStack.Getting started.description": { - "message": "开始使用 ClickStack" + "message": "ClickStack 入门" }, "sidebar.dropdownCategories.category.ClickStack.Sample datasets": { "message": "示例数据集" @@ -1579,25 +1121,25 @@ "message": "部署" }, "sidebar.dropdownCategories.category.ClickStack.Deployment.description": { - "message": "选择 ClickStack 部署模式" + "message": "选择 ClickStack 的部署模式" }, "sidebar.dropdownCategories.category.ClickStack.Ingesting data": { - "message": "数据摄取" + "message": "摄取数据" }, "sidebar.dropdownCategories.category.ClickStack.Ingesting data.description": { - "message": "将数据导入 ClickStack" + "message": "向 ClickStack 摄取数据" }, "sidebar.dropdownCategories.category.ClickStack.Configuration options": { "message": "配置选项" }, "sidebar.dropdownCategories.category.ClickStack.Configuration options.description": { - "message": "在生产环境中部署 ClickStack" + "message": "在生产环境部署 ClickStack" }, "sidebar.dropdownCategories.category.ClickStack.Production": { "message": "生产环境" }, "sidebar.dropdownCategories.category.ClickStack.Production.description": { - "message": "在生产环境中部署 ClickStack" + "message": "在生产环境部署 ClickStack" }, "sidebar.dropdownCategories.category.ClickStack.Integration examples": { "message": "集成示例" @@ -1605,127 +1147,16 @@ "sidebar.dropdownCategories.category.ClickStack.Integration examples.description": { "message": "集成快速入门指南" }, - "sidebar.dropdownCategories.category.chDB": { - "message": "chDB" - }, - "sidebar.dropdownCategories.category.description.chDB": { - "message": "chDB 是 ClickHouse 的嵌入式版本" - }, - "sidebar.dropdownCategories.category.chDB.Learn chDB": { - "message": "学习 chDB" - }, - "sidebar.dropdownCategories.category.chDB.Learn chDB.description": { - "message": "了解如何使用 chDB" - }, "sidebar.dropdownCategories.category.chDB.Language integrations": { - "message": "语言集成" + "message": "编程语言集成" }, "sidebar.dropdownCategories.category.chDB.Language integrations.description": { - "message": "使用语言客户端连接到 chDB" - }, - "sidebar.dropdownCategories.category.chDB.Guides": { - "message": "指南" - }, - "sidebar.dropdownCategories.category.chDB.Guides.description": { - "message": "帮助您使用 chDB 的指南" - }, - "sidebar.dropdownCategories.category.About": { - "message": "关于" - }, - "sidebar.dropdownCategories.category.description.About": { - "message": "了解更多关于 ClickHouse" - }, - "sidebar.dropdownCategories.category.About.Adopters": { - "message": "采用者" - }, - "sidebar.dropdownCategories.category.About.Adopters.description": { - "message": "ClickHouse 采用者" - }, - "sidebar.dropdownCategories.category.About.Changelogs": { - "message": "更新日志" - }, - "sidebar.dropdownCategories.category.About.Changelogs.description": { - "message": "查看 ClickHouse 的最新更改" - }, - "sidebar.dropdownCategories.category.About.Support": { - "message": "支持" - }, - "sidebar.dropdownCategories.category.About.Support.description": { - "message": "获得 ClickHouse 工程师的支持" + "message": "使用语言客户端连接 chDB" }, "sidebar.dropdownCategories.category.About.Development and contributing": { "message": "开发与贡献" }, "sidebar.dropdownCategories.category.About.Development and contributing.description": { - "message": "了解如何为 ClickHouse 做贡献" - }, - "homepage.hero.description": { - "message": "通过指南、参考文档和视频学习如何使用 ClickHouse" - }, - "homepage.hero.quickStart": { - "message": "快速开始" - }, - "homepage.hero.getStartedCloud": { - "message": "开始使用 Cloud" - }, - "homepage.hero.installLocally": { - "message": "本地安装" - }, - "homepage.hero.getStartedOSS": { - "message": "开始使用开源版" - }, - "homepage.search.title": { - "message": "搜索文档" - }, - "homepage.connect.title": { - "message": "连接到 ClickHouse" - }, - "homepage.connect.description": { - "message": "在几分钟内将您的应用程序连接到 ClickHouse" - }, - "homepage.connect.viewAll": { - "message": "查看所有客户端和驱动程序" - }, - "homepage.connect.clickhouseCli": { - "message": "ClickHouse 命令行" - }, - "homepage.connect.cloudSqlConsole": { - "message": "Cloud SQL 控制台" - }, - "homepage.migrate.title": { - "message": "迁移到 ClickHouse" - }, - "homepage.migrate.description": { - "message": "从其他数据库、数据仓库和对象存储加载数据" - }, - "homepage.migrate.viewAll": { - "message": "查看所有集成" - }, - "homepage.deploy.title": { - "message": "部署 ClickHouse" - }, - "homepage.deploy.description": { - "message": "将 ClickHouse 部署到我们的云或您自己的基础设施" - }, - "homepage.deploy.cloud": { - "message": "Cloud" - }, - "homepage.deploy.nodeDeployment": { - "message": "节点部署" - }, - "homepage.deploy.clusterDeployment": { - "message": "集群部署" - }, - "homepage.resources.title": { - "message": "其他资源" - }, - "homepage.resources.contactSupport": { - "message": "联系支持" - }, - "homepage.resources.changelog": { - "message": "更新日志" - }, - "homepage.resources.sampleDatasets": { - "message": "示例数据集" + "message": "了解如何为 ClickHouse 做出贡献" } -} +} \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/best-practices/avoid_mutations.md b/i18n/zh/docusaurus-plugin-content-docs/current/best-practices/avoid_mutations.md index 543c172b352..6cbc97c0fb4 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/best-practices/avoid_mutations.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/best-practices/avoid_mutations.md @@ -8,6 +8,6 @@ keywords: ['mutations'] doc_type: 'guide' --- -import Content from '@site/i18n/zh/docusaurus-plugin-content-docs/current/best-practices/_snippets/_avoid_mutations.md'; +import Content from '@site/docs/best-practices/_snippets/_avoid_mutations.md'; diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/best-practices/avoid_optimize_final.md b/i18n/zh/docusaurus-plugin-content-docs/current/best-practices/avoid_optimize_final.md index 0aac2af6f3a..1b42e23f846 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/best-practices/avoid_optimize_final.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/best-practices/avoid_optimize_final.md @@ -11,6 +11,6 @@ doc_type: 'guide' # 避免使用 `OPTIMIZE FINAL` -import Content from '@site/i18n/zh/docusaurus-plugin-content-docs/current/best-practices/_snippets/_avoid_optimize_final.md'; +import Content from '@site/docs/best-practices/_snippets/_avoid_optimize_final.md'; diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/features/03_sql_console_features/01_sql-console.md b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/features/03_sql_console_features/01_sql-console.md index 5f965cd9f44..9dc0b30bb1f 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/features/03_sql_console_features/01_sql-console.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/features/03_sql_console_features/01_sql-console.md @@ -1,14 +1,12 @@ --- sidebar_title: 'SQL 控制台' - -title: 'SQL 控制台' slug: /cloud/get-started/sql-console -description: '了解 SQL 控制台' -doc_type: '指南' -keywords: ['SQL 控制台', '查询界面', 'Web UI', 'SQL 编辑器', '云控制台'] +description: '使用 SQL 控制台运行查询并创建可视化。' +keywords: ['SQL 控制台', 'SQL 客户端', '云控制台', '控制台'] +title: 'SQL 控制台' +doc_type: 'guide' --- -import ExperimentalBadge from '@theme/badges/ExperimentalBadge'; import Image from '@theme/IdealImage'; import table_list_and_schema from '@site/static/images/cloud/sqlconsole/table-list-and-schema.png'; import view_columns from '@site/static/images/cloud/sqlconsole/view-columns.png'; @@ -44,86 +42,85 @@ import change_from_bar_to_area from '@site/static/images/cloud/sqlconsole/change import update_query_name from '@site/static/images/cloud/sqlconsole/update-query-name.png'; import update_subtitle_etc from '@site/static/images/cloud/sqlconsole/update-subtitle-etc.png'; import adjust_axis_scale from '@site/static/images/cloud/sqlconsole/adjust-axis-scale.png'; -import give_a_query_a_name from '@site/static/images/cloud/sqlconsole/give-a-query-a-name.png' -import save_the_query from '@site/static/images/cloud/sqlconsole/save-the-query.png' # SQL 控制台 -SQL 控制台是在 ClickHouse Cloud 中探索和查询数据库的最快、最简便方式。您可以使用 SQL 控制台: +SQL 控制台是在 ClickHouse Cloud 中浏览和查询数据库的最快、最简便方式。您可以使用 SQL 控制台来: - 连接到 ClickHouse Cloud 服务 -- 查看、筛选和排序表数据 -- 只需几次点击即可执行查询并将结果数据可视化 -- 与团队成员共享查询,从而更高效地协作 - - +- 查看、过滤和排序表数据 +- 只需点击几下即可执行查询并可视化结果数据 +- 与团队成员共享查询并更高效地协作。 -## 浏览数据表 {#exploring-tables} +### 浏览数据表 {#exploring-tables} -### 查看数据表列表和表结构信息 {#viewing-table-list-and-schema-info} +### 查看数据表列表和 schema 信息 {#viewing-table-list-and-schema-info} -可以在左侧边栏区域查看 ClickHouse 实例中包含的数据表概览。使用左侧顶部的数据库选择器查看特定数据库中的数据表。 +左侧边栏区域展示了 ClickHouse 实例中包含的数据表概览。使用左侧栏顶部的数据库选择器可以查看特定数据库中的数据表。 - + +列表中的表还可以展开,以查看列及其类型。 -列表中的数据表也可以展开,以查看列及其数据类型。 - - + ### 浏览表数据 {#exploring-table-data} -单击列表中的某个数据表,会在新标签页中打开该表。在表视图中,可以方便地查看、选择和复制数据。注意,当复制并粘贴到 Microsoft Excel、Google Sheets 等电子表格应用程序时,其结构和格式会被保留。您可以使用页脚中的导航在表数据分页之间切换(每页 30 行)。 +单击列表中的某个表即可在新选项卡中打开它。在表视图中,可以轻松地查看、选择和复制数据。注意,当复制并粘贴到 Microsoft Excel 和 Google Sheets 等电子表格应用程序时,其结构和格式都会被保留。可以使用页脚中的导航在表数据各页之间切换(每页 30 行分页)。 - + ### 检查单元格数据 {#inspecting-cell-data} -可以使用单元格检查器工具查看单个单元格中包含的大量数据。要打开它,请右键单击某个单元格并选择“Inspect Cell”。可以通过单击检查器内容右上角的复制图标来复制单元格检查器中的内容。 +可以使用“单元格检查器”工具来查看单个单元格中包含的大量数据。要打开它,在单元格上单击鼠标右键并选择“Inspect Cell”。通过单击检查器内容右上角的复制图标即可复制单元格检查器中的内容。 - + -## 筛选和排序表格 {#filtering-and-sorting-tables} +## 过滤和排序表 {#filtering-and-sorting-tables} -### 排序表格 {#sorting-a-table} +### 对表进行排序 {#sorting-a-table} -要在 SQL 控制台中对表格进行排序,打开一个表并选择工具栏中的“Sort”按钮。此按钮会打开一个菜单,用于配置排序方式。你可以选择要按其排序的列,并配置排序顺序(升序或降序)。选择“Apply”或按 Enter 键即可对表格进行排序。 +要在 SQL 控制台中对表进行排序,打开表并选择工具栏中的“Sort”按钮。该按钮会打开一个菜单,用于配置排序条件。可以选择要排序的列,并配置排序顺序(升序或降序)。选择“Apply”或按 Enter 键即可对表进行排序。 - + -SQL 控制台还允许你为表格添加多个排序条件。再次单击“Sort”按钮可添加另一个排序条件。注意:排序条件会按它们在排序面板中出现的顺序(自上而下)依次应用。要移除某个排序条件,只需单击该排序条件旁边的“x”按钮。 +SQL 控制台还允许为同一张表添加多个排序条件。再次单击“Sort”按钮可以添加另一个排序条件。 -### 筛选表格 {#filtering-a-table} +:::note +排序会按照它们在排序面板中出现的顺序(从上到下)依次应用。要移除某个排序,只需单击该排序旁边的“x”按钮。 +::: -要在 SQL 控制台中对表格进行筛选,打开一个表并选择“Filter”按钮。与排序类似,此按钮会打开一个菜单,用于配置筛选条件。你可以选择要根据其进行筛选的列,并选择所需的条件。SQL 控制台会智能显示与该列中数据类型相对应的筛选选项。 +### 过滤表 {#filtering-a-table} - +要在 SQL 控制台中过滤表,打开表并选择“Filter”按钮。与排序类似,该按钮会打开一个菜单,用于配置过滤条件。可以选择要过滤的列并设置所需的条件。SQL 控制台会智能地显示与该列数据类型相匹配的过滤选项。 -当你对筛选条件满意后,可以选择“Apply”来应用筛选。你还可以像下面所示那样添加额外的筛选条件。 + - +在对过滤条件满意后,可以选择“Apply”来应用过滤。也可以像下面所示那样添加更多过滤条件。 -与排序功能类似,单击筛选条件旁边的“x”按钮即可将其移除。 + -### 同时进行筛选和排序 {#filtering-and-sorting-together} +与排序功能类似,单击过滤条件旁边的“x”按钮即可将其移除。 -SQL 控制台允许你同时对表格进行筛选和排序。要实现这一点,请使用上述步骤添加所有需要的筛选条件和排序条件,然后单击“Apply”按钮。 +### 同时过滤和排序 {#filtering-and-sorting-together} - +SQL 控制台允许在同一张表上同时进行过滤和排序。为此,请按照上述步骤添加所有需要的过滤条件和排序条件,然后单击“Apply”按钮。 -### 从筛选和排序创建查询 {#creating-a-query-from-filters-and-sorts} + -SQL 控制台可以一键将当前的排序和筛选条件转换为查询。只需在配置好所需排序和筛选参数后,从工具栏中选择“Create Query”按钮。单击“Create query”后,将打开一个新的查询选项卡,并预先填充与当前表视图中数据相对应的 SQL 命令。 +### 从过滤和排序创建查询 {#creating-a-query-from-filters-and-sorts} - +SQL 控制台可以一键将排序和过滤条件直接转换为查询。只需在工具栏中选择“Create Query”按钮,并使用所选的排序和过滤参数。单击“Create query”后,会打开一个新的查询选项卡,其中预填充了与当前表视图数据相对应的 SQL 命令。 + + :::note -在使用“Create Query”功能时,筛选和排序并不是必需的。 +使用“Create Query”功能时,并不要求必须先设置过滤或排序条件。 ::: -你可以通过阅读 (link) 查询文档来进一步了解如何在 SQL 控制台中编写查询。 +可以通过阅读 (link) 查询文档,进一步了解如何在 SQL 控制台中执行查询。 @@ -133,34 +130,34 @@ SQL 控制台可以一键将当前的排序和筛选条件转换为查询。只 在 SQL 控制台中有两种方式创建新查询: -- 点击标签栏中的 “+” 按钮 +- 点击选项卡栏中的 “+” 按钮 - 在左侧边栏的查询列表中选择 “New Query” 按钮 - + ### 运行查询 {#running-a-query} -要运行查询,在 SQL 编辑器中输入 SQL 命令,然后点击 “Run” 按钮,或使用快捷键 `cmd / ctrl + enter`。若要顺序编写并运行多个命令,请确保在每个命令后添加分号。 +要运行查询,请在 SQL 编辑器中输入 SQL 命令,然后点击 “Run” 按钮,或使用快捷键 `cmd / ctrl + enter`。要按顺序编写并运行多个命令,请确保在每条命令后添加分号。 查询执行选项 -默认情况下,点击 “Run” 按钮会运行 SQL 编辑器中包含的所有命令。SQL 控制台还支持另外两种查询执行选项: +默认情况下,点击运行按钮会运行 SQL 编辑器中包含的所有命令。SQL 控制台还支持另外两种查询执行选项: - 运行选中的命令 -- 运行光标所在的命令 +- 运行光标所在位置的命令 -要运行选中的命令,先选中所需的单个命令或一系列命令,然后点击 “Run” 按钮(或使用 `cmd / ctrl + enter` 快捷键)。当存在选中内容时,你也可以从 SQL 编辑器的上下文菜单中选择 “Run selected”(在编辑器任意位置右键打开菜单)。 +要运行选中的命令,高亮选中所需的命令或命令序列,然后点击 “Run” 按钮(或使用快捷键 `cmd / ctrl + enter`)。当存在选中内容时,你也可以在 SQL 编辑器中右键打开上下文菜单并选择 “Run selected”。 - + 在当前光标位置运行命令可以通过两种方式实现: -- 从扩展运行选项菜单中选择 “At Cursor”(或使用对应的 `cmd / ctrl + shift + enter` 键盘快捷键) +- 在扩展运行选项菜单中选择 “At Cursor”(或使用对应的 `cmd / ctrl + shift + enter` 键盘快捷键) - + - 在 SQL 编辑器的上下文菜单中选择 “Run at cursor” - + :::note 执行时,光标所在位置的命令会短暂闪烁为黄色。 @@ -168,182 +165,102 @@ SQL 控制台可以一键将当前的排序和筛选条件转换为查询。只 ### 取消查询 {#canceling-a-query} -当查询正在运行时,Query Editor 工具栏中的 “Run” 按钮会被 “Cancel” 按钮替换。只需点击此按钮或按下 `Esc` 即可取消查询。注意:任何已经返回的结果在取消后都会保留。 +在查询运行期间,查询编辑器工具栏中的 “Run” 按钮会被 “Cancel” 按钮替代。只需点击该按钮或按下 `Esc` 即可取消查询。注意:任何已经返回的结果在取消后仍会保留。 - + ### 保存查询 {#saving-a-query} -如果之前没有命名,你的查询名称会显示为 “Untitled Query”。点击该名称即可对其重命名。重命名查询会触发保存该查询。 - - - -你也可以使用保存按钮或 `cmd / ctrl + s` 键盘快捷键来保存查询。 - - - - - -## 使用 GenAI 管理查询 {#using-genai-to-manage-queries} - -此功能允许用户以自然语言问题的形式编写查询,由查询控制台根据可用数据表的上下文生成 SQL 查询。GenAI 还可以帮助用户调试查询。 - -有关 GenAI 的更多信息,请参阅博文:[Announcing GenAI powered query suggestions in ClickHouse Cloud](https://clickhouse.com/blog/announcing-genai-powered-query-suggestions-clickhouse-cloud)。 - -### 表准备 {#table-setup} - -我们来导入英国房价支付示例数据集,并用它来创建一些 GenAI 查询。 - -1. 打开一个 ClickHouse Cloud 服务。 -1. 点击 _+_ 图标创建一个新查询。 -1. 粘贴并运行以下代码: +保存查询可以帮助你在之后轻松找到它们,并与团队成员共享。SQL 控制台还允许你将查询组织到文件夹中。 - ```sql - CREATE TABLE uk_price_paid - ( - price UInt32, - date Date, - postcode1 LowCardinality(String), - postcode2 LowCardinality(String), - type Enum8('terraced' = 1, 'semi-detached' = 2, 'detached' = 3, 'flat' = 4, 'other' = 0), - is_new UInt8, - duration Enum8('freehold' = 1, 'leasehold' = 2, 'unknown' = 0), - addr1 String, - addr2 String, - street LowCardinality(String), - locality LowCardinality(String), - town LowCardinality(String), - district LowCardinality(String), - county LowCardinality(String) - ) - ENGINE = MergeTree - ORDER BY (postcode1, postcode2, addr1, addr2); - ``` +要保存查询,只需点击工具栏中紧挨着 “Run” 按钮的 “Save” 按钮。输入期望的名称并点击 “Save Query”。 - 此查询大约需要 1 秒完成。完成后,您应当会得到一个名为 `uk_price_paid` 的空表。 +:::note +使用快捷键 `cmd / ctrl` + s 也会保存当前查询选项卡中的所有工作内容。 +::: -1. 创建一个新查询并粘贴以下查询: + - ```sql - INSERT INTO uk_price_paid - WITH - splitByChar(' ', postcode) AS p - SELECT - toUInt32(price_string) AS price, - parseDateTimeBestEffortUS(time) AS date, - p[1] AS postcode1, - p[2] AS postcode2, - transform(a, ['T', 'S', 'D', 'F', 'O'], ['terraced', 'semi-detached', 'detached', 'flat', 'other']) AS type, - b = 'Y' AS is_new, - transform(c, ['F', 'L', 'U'], ['freehold', 'leasehold', 'unknown']) AS duration, - addr1, - addr2, - street, - locality, - town, - district, - county - FROM url( - 'http://prod.publicdata.landregistry.gov.uk.s3-website-eu-west-1.amazonaws.com/pp-complete.csv', - 'CSV', - 'uuid_string String, - price_string String, - time String, - postcode String, - a String, - b String, - c String, - addr1 String, - addr2 String, - street String, - locality String, - town String, - district String, - county String, - d String, - e String' - ) SETTINGS max_http_get_redirects=10; - ``` +或者,你也可以通过点击工具栏中的 “Untitled Query”,在命名的同时完成保存,修改名称后按 Enter 即可: -此查询会从 `gov.uk` 网站获取数据集。该文件大小约为 4GB,因此该查询将需要几分钟才能完成。ClickHouse 处理完查询后,您应该会在 `uk_price_paid` 表中获得整个数据集。 + -#### 查询创建 {#query-creation} +### 查询共享 {#query-sharing} -我们来使用自然语言创建一个查询。 +SQL 控制台允许你轻松将查询与团队成员共享。SQL 控制台支持四种访问级别,这些级别既可以全局调整,也可以按用户单独设置: -1. 选择 **uk_price_paid** 表,然后点击 **Create Query**。 -1. 点击 **Generate SQL**。系统可能会要求您接受将查询发送到 ChatGPT。您必须选择 **I agree** 才能继续。 -1. 现在您可以在此提示框中输入自然语言查询,并让 ChatGPT 将其转换为 SQL 查询。本示例中我们将输入: - - > Show me the total price and total number of all uk_price_paid transactions by year. - -1. 控制台会生成我们所需的查询,并将其展示在一个新标签页中。在我们的示例中,GenAI 生成了如下查询: - - ```sql - -- Show me the total price and total number of all uk_price_paid transactions by year. - SELECT year(date), sum(price) as total_price, Count(*) as total_transactions - FROM uk_price_paid - GROUP BY year(date) - ``` - -1. 在您确认查询正确后,点击 **Run** 执行它。 - -### 调试 {#debugging} - -现在,我们来测试 GenAI 的查询调试能力。 - -1. 点击 _+_ 图标创建一个新查询,并粘贴以下代码: +- Owner(可调整共享选项) +- 写入权限 +- 只读权限 +- 无访问权限 +保存查询后,点击工具栏中的 “Share” 按钮。此时会弹出带有共享选项的模态对话框: + -```sql - -- 按年份显示 uk_price_paid 表中所有交易的总价格和总交易数。 - SELECT year(date), sum(pricee) as total_price, Count(*) as total_transactions - FROM uk_price_paid - GROUP BY year(date) -``` +要为所有有权访问该服务的组织成员调整查询访问权限,只需调整顶行中的访问级别选择器: + + + +应用上述设置后,所有具有该服务 SQL 控制台访问权限的团队成员现在都可以查看(并执行)该查询。 + +要为特定成员调整查询访问权限,请在 “Add a team member” 选择器中选择目标团队成员: + + + +选择团队成员后,会出现一个带有访问级别选择器的新条目: + + -1. 点击 **Run**。查询会失败,因为我们尝试从 `pricee` 而不是 `price` 中获取值。 -2. 点击 **Fix Query**。 -3. GenAI 会尝试修复查询。在这个例子中,它将 `pricee` 修改为 `price`,并判断在这种场景下使用 `toYear` 是更合适的函数。 -4. 选择 **Apply** 将建议的更改应用到查询中,然后点击 **Run**。 +### 访问共享查询 {#accessing-shared-queries} + +如果有查询已与你共享,它会显示在 SQL 控制台左侧边栏的 “Queries” 选项卡中: + + + +### 链接到查询(永久链接) {#linking-to-a-query-permalinks} + + + +已保存的查询也会生成永久链接,这意味着你可以将共享查询的链接发送给他人或从他人处接收,并直接打开这些查询。 + +查询中可能存在的任何参数的取值都会自动作为查询参数添加到已保存查询的 URL 中。例如,如果查询包含 `{start_date: Date}` 和 `{end_date: Date}` 这两个参数,则永久链接可能如下所示:`https://console.clickhouse.cloud/services/:serviceId/console/query/:queryId?param_start_date=2015-01-01¶m_end_date=2016-01-01`。 -请注意,GenAI 是一项实验性功能。在对任何数据集运行由 GenAI 生成的查询时,请务必谨慎。 ## 高级查询功能 {#advanced-querying-features} ### 搜索查询结果 {#searching-query-results} -在查询执行完成后,可以使用结果面板中的搜索框快速检索返回的结果集。此功能有助于预览新增 `WHERE` 子句的结果,或简单检查结果集中是否包含特定数据。向搜索框中输入值后,结果面板会更新并返回包含与输入值匹配条目的记录。在此示例中,我们将在 `hackernews` 表中查找所有评论内容包含 `ClickHouse`(不区分大小写)且出现 `breakfast` 的记录: +查询执行完成后,你可以使用结果面板中的搜索框快速在返回的结果集中进行搜索。此功能有助于预览额外添加 `WHERE` 子句后的结果,或简单检查特定数据是否包含在结果集中。在搜索框中输入值后,结果面板会更新,并返回包含与输入值匹配条目的记录。在此示例中,我们将查找 `hackernews` 表中所有评论内容包含 `ClickHouse`(不区分大小写)且包含 `breakfast` 的实例: - + -注意:只要任意字段中匹配输入值,该记录都会被返回。例如,上方截图中的第三条记录在 `by` 字段中并不匹配 `breakfast`,但在 `text` 字段中匹配到了: +注意:任何字段只要匹配输入的值,就会被返回。例如,上方截图中的第三条记录在 `by` 字段中不匹配 `breakfast`,但在 `text` 字段中匹配: - + ### 调整分页设置 {#adjusting-pagination-settings} -默认情况下,查询结果面板会在单个页面上显示所有结果记录。对于较大的结果集,为了更便于查看,可能希望对结果进行分页。可以使用结果面板右下角的分页选择器来完成此操作: +默认情况下,查询结果面板会在单个页面上显示所有结果记录。对于较大的结果集,为了更易于查看,可以对结果进行分页。你可以使用结果面板右下角的分页选择器来完成此操作: - + -选择页面大小后,分页会立即应用到结果集,并且导航选项会显示在结果面板页脚的中间位置。 +选择页面大小后,会立即对结果集应用分页,并且导航选项会显示在结果面板页脚的中间位置。 - + ### 导出查询结果数据 {#exporting-query-result-data} -可以直接在 SQL 控制台中将查询结果集轻松导出为 CSV 格式。为此,在结果面板工具栏右侧打开 `•••` 菜单,然后选择“Download as CSV”。 +可以直接从 SQL 控制台将查询结果集轻松导出为 CSV 格式。要执行此操作,请打开结果面板工具栏右侧的 `•••` 菜单并选择“Download as CSV”。 - + ## 可视化查询数据 -某些数据以图表形式展示会更易于理解。你可以在 SQL 控制台中直接基于查询结果数据快速创建可视化,只需几次点击。作为示例,我们将使用一个查询来计算纽约市出租车行程的每周统计信息: +某些数据以图表形式呈现更便于理解。你可以在 SQL 控制台中,直接基于查询结果快速生成可视化图表,只需点击几下即可。作为示例,我们将使用一个计算纽约市出租车行程周度统计的查询: ```sql SELECT @@ -359,65 +276,44 @@ ORDER BY 1 ASC ``` - + -在没有可视化的情况下,这些结果很难理解和分析。我们将它们转换成图表。 +如果不进行可视化,这些结果很难理解。我们来把它们转换成图表。 ### 创建图表 -要开始构建可视化,请在查询结果面板的工具栏中选择 “Chart” 选项。此时会显示图表配置面板: +要开始构建可视化,请在查询结果面板的工具栏中选择 `Chart` 选项。此时会出现图表配置面板: - + -我们先创建一个按 `week` 跟踪 `trip_total` 的简单柱状图。为此,将 `week` 字段拖到 x 轴,将 `trip_total` 字段拖到 y 轴: +我们先创建一个简单的柱状图,用于按 `week` 跟踪 `trip_total`。为此,我们将 `week` 字段拖到 x 轴,将 `trip_total` 字段拖到 y 轴: - + -大多数图表类型都支持在数值轴上放置多个字段。为演示这一点,我们将 `fare_total` 字段再拖到 y 轴上: +大多数图表类型都支持在数值轴上使用多个字段。为演示这一点,我们将 `fare_total` 字段也拖到 y 轴上: - + ### 自定义图表 -SQL 控制台支持十种图表类型,可以在图表配置面板中的图表类型选择器中进行选择。例如,我们可以轻松地将前面的图表类型从柱状图 (Bar) 更改为面积图 (Area): +SQL 控制台支持十种图表类型,可以在图表配置面板中的图表类型选择器中进行选择。例如,我们可以轻松地将前一个图表的类型从柱状图切换为面积图: - + -图表标题与提供数据的查询名称一致。更新查询名称时,图表标题也会随之更新: +图表标题与提供数据的查询名称保持一致。更新查询名称后,图表标题也会随之更新: - + -在图表配置面板的 “Advanced” 部分中,还可以调整许多更高级的图表特性。首先,我们将调整以下设置: +还可以在图表配置面板的 `Advanced` 部分调整更多高级的图表属性。首先,我们来调整以下设置: * 副标题 -* 轴标题 -* x 轴的标签方向 - -图表会相应更新: - - - -在某些情况下,可能需要分别调整每个字段的坐标轴范围。这也可以在图表配置面板的 “Advanced” 部分中,通过为轴范围指定最小值和最大值来实现。比如,上面的图表已经不错,但为了更好地展示 `trip_total` 和 `fare_total` 字段之间的相关性,需要对轴范围稍作调整: - - - - -## 共享查询 {#sharing-queries} - -SQL 控制台支持你与团队共享查询。查询一旦共享,团队的所有成员都可以查看和编辑该查询。共享查询是与团队协作的有效方式。 - -要共享查询,请单击查询工具栏中的 “Share” 按钮。 - - - -此时会弹出一个对话框,你可以在其中将查询共享给某个团队的所有成员。如果你隶属于多个团队,可以选择要将查询共享给哪个团队。 - - +* 坐标轴标题 +* x 轴标签方向 - +图表会随之更新: - + -在某些情况下,可能需要分别调整每个字段的坐标轴刻度。你也可以在图表配置面板的 “Advanced” 部分,通过为坐标轴范围指定最小值和最大值来实现这一点。例如,上面的图表整体效果不错,但为了更好地展示 `trip_total` 和 `fare_total` 字段之间的相关性,需要对坐标轴范围进行一些调整: +在某些情况下,可能需要分别调整每个字段的坐标轴范围。你也可以在图表配置面板的 `Advanced` 部分,通过为坐标轴范围指定最小值和最大值来完成这一操作。比如,上面的图表看起来不错,但为了演示 `trip_total` 和 `fare_total` 字段之间的相关性,我们需要对坐标轴范围进行一些调整: - + diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/features/09_support.md b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/features/09_support.md index 8db93d1149c..0e2b3663197 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/features/09_support.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/features/09_support.md @@ -8,6 +8,6 @@ hide_title: true doc_type: 'guide' --- -import Content from '@site/i18n/zh/docusaurus-plugin-content-docs/current/about-us/support.md'; +import Content from '@site/docs/about-us/support.md'; diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/03_clickpipes/clickpipes_for_cdc.md b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/03_clickpipes/clickpipes_for_cdc.md index 340d796b08f..31801f12579 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/03_clickpipes/clickpipes_for_cdc.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/03_clickpipes/clickpipes_for_cdc.md @@ -63,15 +63,15 @@ Postgres CDC 连接器分为两个主要阶段运行: #### 月度费用明细 {#cost-breakdown} -**摄取数据(CDC)** +**摄取数据(CDC)**: -2 个管道 × 500 GB = 1,000 GB 每月 +$$ 2 \text{ 个管道} \times 500 \text{ GB} = 1,000 \text{ GB 每月} $$ -1,000 GB × $0.20/GB = $200 +$$ 1,000 \text{ GB} \times \$0.20/\text{GB} = \$200 $$ **计算资源**: -1 个计算单元 × $0.20/小时 × 730 小时(约一个月) = $146 +$$1 \text{ 个计算单元} \times \$0.20/\text{小时} \times 730 \text{ 小时(约一个月)} = \$146$$ :::note 计算资源在两个管道之间共享 @@ -79,7 +79,7 @@ Postgres CDC 连接器分为两个主要阶段运行: **月度总费用**: -$200 (摄取) + $146 (计算资源) = $346 +$$\$200 \text{ (摄取)} + \$146 \text{ (计算资源)} = \$346$$ ## Postgres CDC ClickPipes 常见问题解答 {#faq-postgres-cdc-clickpipe} diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/data-modeling/projections/1_projections.md b/i18n/zh/docusaurus-plugin-content-docs/current/data-modeling/projections/1_projections.md index 9cc8646d522..dd9a6f4e7e6 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/data-modeling/projections/1_projections.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/data-modeling/projections/1_projections.md @@ -1,7 +1,7 @@ --- slug: /data-modeling/projections title: '投影' -description: '本页介绍投影的概念、如何利用投影提升查询性能,以及它们与物化视图的区别。' +description: '本页介绍什么是投影、如何使用投影提升查询性能,以及它与物化视图的区别。' keywords: ['投影', '投影', '查询优化'] sidebar_order: 1 doc_type: 'guide' @@ -14,81 +14,78 @@ import Image from '@theme/IdealImage'; # 投影 +## 简介 {#introduction} +ClickHouse 为实时场景下的大规模数据分析查询提供了多种加速机制。其中一种是使用 _Projections(投影)_ 来加速查询。Projections 通过根据关注的属性对数据进行重新排序来帮助优化查询,具体可以是: -## 介绍 {#introduction} - -ClickHouse 为实时场景下的大规模数据分析查询提供了多种加速机制。其中一种用于加速查询的机制是使用 _Projections_。Projections 通过按关注的属性对数据进行重新排序来帮助优化查询。这种重新排序可以是: - -1. 完整的重新排序 -2. 按不同排序方式组织的原始表子集 -3. 预计算的聚合结果(类似于物化视图),但其排序方式与该聚合相匹配。 +1. 对整个数据进行完全重新排序 +2. 原始表的一个子集,但采用不同的排序方式 +3. 预计算的聚合结果(类似于物化视图),并且其排序方式 + 与聚合维度对齐。
- - + -## Projection 如何工作? {#how-do-projections-work} +## Projections 如何工作? {#how-do-projections-work} -在实际应用中,可以将 Projection 看作是原始表上的一个额外的、隐藏的表。Projection 可以具有与原始表不同的行排序,因此其主索引也可以不同,并且它可以自动、增量地预计算聚合值。因此,使用 Projection 为加速查询执行提供了两个“调优手段”: +在实践中,可以将 Projection 看作是原始表的一个额外的隐藏表。Projection 可以拥有与原始表不同的行顺序,因此也可以拥有不同的主索引,并且它可以自动、增量地预计算聚合值。因此,使用 Projections 可以通过两个“调优手段”来加速查询执行: - **正确使用主索引** - **预计算聚合** -Projection 在某些方面与 [物化视图](/materialized-views) 类似,它们同样允许你拥有多种行排序方式,并在插入时预计算聚合。 -Projection 会自动更新并与原始表保持同步,而物化视图则需要显式更新。当查询针对原始表时,ClickHouse 会自动采样主键并选择一个既能生成同样正确结果、又需要读取数据量最少的表,如下图所示: +Projections 在某些方面类似于 [物化视图](/materialized-views) +,它们同样允许你使用多种行顺序,并在插入时预计算聚合。 +Projections 会自动更新,并与原始表保持同步;这与物化视图(Materialized Views)不同,后者需要显式更新。当查询针对原始表时, +ClickHouse 会自动对主键进行采样,并选择一个既能生成相同正确结果、又需要读取数据量最少的表,如下图所示: -### 通过 `_part_offset` 实现更智能的存储 {#smarter_storage_with_part_offset} - -从 25.5 版本开始,ClickHouse 在 Projection 中支持虚拟列 `_part_offset`,它提供了一种定义 Projection 的新方式。 - -现在有两种定义 Projection 的方式: +### 使用 `_part_offset` 的更智能存储 {#smarter_storage_with_part_offset} -- **存储完整列(原有行为)**:Projection 包含完整数据,可以被直接读取,当过滤条件与 Projection 的排序顺序匹配时性能更高。 +从 25.5 版本开始,ClickHouse 在 projection 中支持虚拟列 `_part_offset`,这为定义 projection 提供了一种新的方式。 -- **仅存储排序键 + `_part_offset`**:Projection 的工作方式类似索引。 - ClickHouse 使用 Projection 的主索引定位匹配的行,但从基表中读取实际数据。这样可以降低存储开销,但在查询时会稍微增加 I/O。 +现在有两种定义 projection 的方式: -上述两种方式也可以混合使用,将部分列直接存储在 Projection 中,而其他列通过 `_part_offset` 间接访问。 +- **存储完整列(原有行为)**:projection 包含完整数据,可以被直接读取,当过滤条件与 projection 的排序顺序匹配时,可以获得更快的查询性能。 +- **仅存储排序键 + `_part_offset`**:projection 的工作方式类似索引。 + ClickHouse 使用 projection 的主索引来定位匹配的行,但从基表中读取实际数据。 + 这样可以减少存储开销,但在查询时会略微增加 I/O。 +上述方法也可以混合使用,在 projection 中直接存储部分列,而通过 `_part_offset` 间接存储其他列。 ## 何时使用 Projections? {#when-to-use-projections} -Projections 对新用户来说是一个颇具吸引力的功能,因为它会在数据插入时自动维护。此外,查询只需发送到单个表,查询优化器会在可能的情况下利用 Projections 来加快响应时间。 +Projections 对新用户而言非常有吸引力,因为它们会在数据插入时自动维护。并且,查询只需发送到单个表,并在可能时利用 projections 来加速响应时间。 -这与 Materialized Views 形成对比:使用后者时,用户必须根据过滤条件选择合适的已优化目标表,或重写查询。这会对用户应用提出更高要求,并增加客户端侧的复杂度。 +这与物化视图不同,后者要求用户根据过滤条件选择适当的已优化目标表,或者重写查询。这会对用户应用提出更高要求,并增加客户端的复杂度。 -尽管有这些优势,Projections 也存在一些固有的限制,用户应当了解,因此应谨慎、少量地部署。 +尽管有这些优点,projections 也存在一些固有限制,用户应当了解这些限制,因此应谨慎使用,避免过度依赖。 -- Projections 不允许为源表和(隐藏的)目标表使用不同的 TTL,而 Materialized Views 允许使用不同的 TTL。 -- 启用 Projections 的表不支持轻量级更新和删除。 -- Materialized Views 可以链式使用:一个 Materialized View 的目标表可以作为另一个 Materialized View 的源表,依此类推。而 Projections 不支持这种用法。 -- Projections 不支持 join,而 Materialized Views 支持。 -- Projections 不支持过滤(`WHERE` 子句),而 Materialized Views 支持。 +- Projections 不允许对源表和(隐藏的)目标表使用不同的 TTL,而物化视图允许使用不同的 TTL。 +- 对包含 projections 的表,不支持轻量级更新和删除。 +- 物化视图可以链式使用:一个物化视图的目标表可以作为另一个物化视图的源表,依此类推。而 projections 无法做到这一点。 +- Projection 定义不支持 join,但物化视图支持。不过,对包含 projections 的表进行的查询可以自由使用 join。 +- Projection 定义不支持过滤条件(`WHERE` 子句),但物化视图支持。不过,对包含 projections 的表进行的查询可以自由使用过滤条件。 -我们建议在以下场景中使用 Projections: +我们建议在以下场景使用 projections: -- 需要对数据进行完全重新排序时。虽然 Projection 中的表达式理论上可以使用 `GROUP BY`,但 Materialized Views 在维护聚合方面更高效。查询优化器也更有可能利用只进行简单重排的 Projections,即 `SELECT * ORDER BY x`。用户可以在该表达式中仅选择部分列,以降低存储占用。 -- 用户能够接受潜在的存储占用增加以及将数据写入两次所带来的开销。请测试对插入速度的影响,并[评估存储开销](/data-compression/compression-in-clickhouse)。 +- 需要对数据进行完全重新排序时。虽然理论上,projection 中的表达式可以使用 `GROUP BY`,但物化视图在维护聚合方面更有效。查询优化器也更有可能利用仅做简单重排的 projections,即 `SELECT * ORDER BY x`。用户可以在该表达式中选择列的子集,以减少存储占用。 +- 用户能够接受可能带来的存储占用增加,以及将数据写入两次的额外开销时。请测试其对插入速度的影响,并[评估存储开销](/data-compression/compression-in-clickhouse)。 +## 示例 {#examples} +### 在非主键列上进行过滤 -## 示例 +在这个示例中,我们将向你展示如何为表添加一个投影(projection)。 +我们还将了解如何利用该投影加速在非主键列上进行过滤的查询。 -### 在不属于主键的列上进行过滤 +在本示例中,我们将使用 New York Taxi Data +数据集(可在 [sql.clickhouse.com](https://sql.clickhouse.com/) 获取),该数据集按 `pickup_datetime` 排序。 -在这个示例中,我们将介绍如何为一张表添加一个 projection。 -同时,我们还将说明如何使用该 projection 来加速在不属于表主键的列上进行过滤的查询。 - -在本示例中,我们将使用可在 [sql.clickhouse.com](https://sql.clickhouse.com/) 获取的 New York Taxi Data -数据集,该数据集按 `pickup_datetime` 排序。 - -让我们编写一个简单的查询,找出所有乘客给司机小费 -大于 200 美元的行程 ID: +现在我们来编写一个简单的查询语句,找出所有乘客 +给司机小费超过 200 美元的行程 ID: ```sql runnable SELECT @@ -99,34 +96,35 @@ FROM nyc_taxi.trips WHERE tip_amount > 200 AND trip_duration_min > 0 ORDER BY tip_amount, trip_id ASC ``` -请注意,由于我们在过滤不在 `ORDER BY` 中的 `tip_amount`,ClickHouse 不得不执行全表扫描。下面我们来加快这个查询。 +请注意,由于我们正在对未包含在 `ORDER BY` 中的 `tip_amount` 进行过滤,ClickHouse +不得不执行一次全表扫描。我们来加速这个查询。 -为了保留原始表和查询结果,我们将创建一个新表,并使用 `INSERT INTO SELECT` 来复制数据: +为了保留原始表及其结果,我们将创建一个新表,并使用 `INSERT INTO SELECT` 来复制数据: ```sql CREATE TABLE nyc_taxi.trips_with_projection AS nyc_taxi.trips; INSERT INTO nyc_taxi.trips_with_projection SELECT * FROM nyc_taxi.trips; ``` -要添加一个 projection,我们使用 `ALTER TABLE` 语句结合 `ADD PROJECTION` 语句: +要添加投影,我们使用 `ALTER TABLE` 语句配合 `ADD PROJECTION` 语句: ```sql ALTER TABLE nyc_taxi.trips_with_projection -添加 投影 prj_tip_amount +ADD PROJECTION prj_tip_amount ( SELECT * ORDER BY tip_amount, dateDiff('minutes', pickup_datetime, dropoff_datetime) ) ``` -在添加 projection 之后,必须使用 `MATERIALIZE PROJECTION` -语句,这样其中的数据才会根据上面指定的查询进行物理排序并重写: +在添加 projection 之后,需要使用 `MATERIALIZE PROJECTION` +语句,使其中的数据根据上面指定的查询进行物理排序并重写: ```sql ALTER TABLE nyc.trips_with_projection MATERIALIZE PROJECTION prj_tip_amount ``` -现在我们已经添加了投影,让我们再运行一次这个查询: +现在我们已经添加了投影,再来运行一次该查询: ```sql runnable SELECT @@ -137,9 +135,9 @@ FROM nyc_taxi.trips_with_projection WHERE tip_amount > 200 AND trip_duration_min ORDER BY tip_amount, trip_id ASC ``` -请注意,我们显著减少了查询时间,并且需要扫描的行数也更少了。 +请注意,我们显著减少了查询时间,且需要扫描的行数也更少了。 -我们可以通过查询 `system.query_log` 表来确认上述查询确实使用了我们创建的投影: +我们可以通过查询 `system.query_log` 表来确认上面的查询确实使用了我们创建的投影: ```sql SELECT query, projections @@ -157,29 +155,30 @@ WHERE query_id='' └───────────────────────────────────────────────────────────────────────────────┴──────────────────────────────────┘ ``` -### 使用投影加速英国房价支付查询 -为了演示如何使用投影来提升查询性能,我们来看一个基于真实数据集的示例。在本示例中,我们将使用来自我们的 [UK Property Price Paid](https://clickhouse.com/docs/getting-started/example-datasets/uk-price-paid) -教程中的表,该表包含 3003 万行记录。该数据集同样可以在我们的 +### 使用投影加速英国房价已付数据查询 + +为了演示如何使用投影来加速查询性能,我们 +通过一个真实数据集的示例来说明。在本示例中,我们将 +使用 [UK Property Price Paid](https://clickhouse.com/docs/getting-started/example-datasets/uk-price-paid) +教程中的表,该表包含 3003 万行数据。此数据集也可在 [sql.clickhouse.com](https://sql.clickhouse.com/?query_id=6IDMHK3OMR1C97J6M9EUQS) -环境中使用。 +环境中获取。 -如果您希望了解该表是如何创建以及数据是如何插入的,可以参考《[The UK property prices dataset](/getting-started/example-datasets/uk-price-paid)》页面。 +如果您想了解表的创建方式和数据插入过程,可以参阅 ["英国房产价格数据集"](/getting-started/example-datasets/uk-price-paid) 页面。 -我们可以在该数据集上运行两个简单的查询。第一个查询列出伦敦房价最高的各郡, -第二个则计算各个郡的平均价格: +我们可以对此数据集运行两个简单的查询。第一个查询列出伦敦地区支付价格最高的郡县,第二个查询计算各郡县的平均价格: ```sql runnable SELECT county, price FROM uk.uk_price_paid -WHERE town = '伦敦' +WHERE town = 'LONDON' ORDER BY price DESC LIMIT 3 ``` - ```sql runnable SELECT county, @@ -190,8 +189,7 @@ ORDER BY avg(price) DESC LIMIT 3 ``` -请注意,尽管查询速度非常快,这两条查询仍然对整张表的 3003 万行数据进行了全表扫描, -这是因为在创建表时的 `ORDER BY` 子句中,既没有包含 `town` 列,也没有包含 `price` 列: +请注意,尽管查询速度很快,但两个查询都对全部 3003 万行进行了全表扫描,这是因为在创建表时,`town` 和 `price` 都不在 ORDER BY 语句中: ```sql CREATE TABLE uk.uk_price_paid @@ -203,18 +201,16 @@ ENGINE = MergeTree ORDER BY (postcode1, postcode2, addr1, addr2); ``` -让我们看看是否可以使用投影来加速这个查询。 +让我们看看能否使用投影来加速这个查询。 -为保留原始表及其结果,我们将创建一个新表,并使用 `INSERT INTO SELECT` 复制数据: +为了保留原始表和结果,我们将创建一个新表并使用 `INSERT INTO SELECT` 复制数据: ```sql CREATE TABLE uk.uk_price_paid_with_projections AS uk_price_paid; INSERT INTO uk.uk_price_paid_with_projections SELECT * FROM uk.uk_price_paid; ``` -我们创建并填充投影 `prj_oby_town_price`,它会生成一个附加的(隐藏的)表, -该表带有主索引,并按 town 和 price 排序,用于优化如下查询: -在指定 town 中列出最高价格对应的 counties。 +我们创建并填充投影 `prj_oby_town_price`,它会生成一个额外的(隐藏)表,该表具有主索引,按城镇和价格排序,用于优化查询特定城镇中最高成交价格的郡县列表: ```sql ALTER TABLE uk.uk_price_paid_with_projections @@ -233,10 +229,10 @@ ALTER TABLE uk.uk_price_paid_with_projections SETTINGS mutations_sync = 1 ``` -[`mutations_sync`](/operations/settings/settings#mutations_sync) 设置用于强制以同步方式执行。 +[`mutations_sync`](/operations/settings/settings#mutations_sync) 设置用于强制执行同步操作。 -我们创建并填充投影 `prj_gby_county` —— 一个额外的(隐藏的)表, -用于以增量方式预先计算所有现有的 130 个英国郡的 avg(price) 聚合值: +我们创建并填充投影 `prj_gby_county` —— 一个额外的(隐藏)表, +用于增量预计算所有现有 130 个英国郡的 avg(price) 聚合值: ```sql ALTER TABLE uk.uk_price_paid_with_projections @@ -256,14 +252,14 @@ SETTINGS mutations_sync = 1 ``` :::note -如果在如上面 `prj_gby_county` 投影那样的投影中使用了 `GROUP BY` 子句,那么(隐藏)表的底层存储引擎会变为 `AggregatingMergeTree`,并且所有聚合函数都会被转换为 `AggregateFunction`。这可以确保正确地进行增量数据聚合。 +如果在投影中使用了 `GROUP BY` 子句(例如上面的 `prj_gby_county` 投影),则(隐藏)表的底层存储引擎会变为 `AggregatingMergeTree`,所有聚合函数会被转换为 `AggregateFunction`。这可确保正确的增量数据聚合。 ::: -下图是主表 `uk_price_paid_with_projections` 及其两个投影的可视化示意图: +下图展示了主表 `uk_price_paid_with_projections` 及其两个投影的可视化: - + -如果现在再次运行查询,列出伦敦中成交价格最高的三个价格及其所属郡,我们就会看到查询性能有所提升: +如果现在再次运行查询以列出伦敦成交价格最高的三个区县,可以看到查询性能有所提升: ```sql runnable SELECT @@ -275,7 +271,7 @@ ORDER BY price DESC LIMIT 3 ``` -同样,对于列出平均支付价格最高的三个英国郡县的查询: +同样,对于列出英国平均房价最高的三个郡的查询: ```sql runnable SELECT @@ -287,19 +283,19 @@ ORDER BY avg(price) DESC LIMIT 3 ``` -请注意,这两个查询都是针对原始表执行的,并且在我们创建这两个 projection 之前,这两个查询都会进行一次全表扫描(从磁盘流式读取全部 3003 万行数据)。 +请注意,这两个查询都针对原始表,并且在创建这两个投影之前,两个查询都执行了全表扫描(从磁盘读取了全部 3003 万行数据)。 -另外请注意,用于列出伦敦中支付价格最高的前三个郡的查询,会流式读取 217 万行数据。而当我们直接使用一张专门为该查询优化的第二张表时,仅有 8.192 万行数据从磁盘被流式读取。 +另外请注意,用于列出伦敦中成交价最高的三个县(county)的查询正在流式处理 217 万行数据。而当我们直接使用为该查询优化的第二张表时,只从磁盘流式读取了 8.192 万行数据。 -造成这一差异的原因在于,目前上文提到的 `optimize_read_in_order` 优化尚不支持用于 projection。 +造成这一差异的原因是,目前上文提到的 `optimize_read_in_order` 优化尚不支持应用于投影(projection)。 -我们检查 `system.query_log` 表,以确认 ClickHouse 为上述两个查询自动使用了这两个 projection(见下方的 projections 列): +我们检查 `system.query_log` 表,可以看到 ClickHouse 在上面的两个查询中自动使用了两个投影(参见下面的 projections 列): ```sql SELECT tables, query, - query_duration_ms::String || ' 毫秒' AS query_duration, + query_duration_ms::String || ' ms' AS query_duration, formatReadableQuantity(read_rows) AS read_rows, projections FROM clusterAllReplicas(default, system.query_log) @@ -309,7 +305,6 @@ ORDER BY initial_query_start_time DESC FORMAT Vertical ``` - ```response 第 1 行: ────── @@ -343,20 +338,22 @@ projections: ['uk.uk_price_paid_with_projections.prj_obj_town_price'] 返回 2 行。耗时:0.006 秒。 ``` + ### 更多示例 -以下示例使用相同的英国价格数据集,对比使用和不使用投影的查询。 +以下示例继续使用相同的英国价格数据集,对比使用和不使用投影的查询。 -为了保持原始表(及其性能)不受影响,我们再次使用 `CREATE AS` 和 `INSERT INTO SELECT` 创建该表的副本。 +为了保持原始表及其性能不受影响,我们再次使用 `CREATE AS` 和 `INSERT INTO SELECT` 创建该表的副本。 ```sql CREATE TABLE uk.uk_price_paid_with_projections_v2 AS uk.uk_price_paid; INSERT INTO uk.uk_price_paid_with_projections_v2 SELECT * FROM uk.uk_price_paid; ``` + #### 构建 Projection -让我们基于维度 `toYear(date)`、`district` 和 `town` 创建一个聚合 Projection: +让我们基于 `toYear(date)`、`district` 和 `town` 这三个维度创建一个聚合 Projection: ```sql ALTER TABLE uk.uk_price_paid_with_projections_v2 @@ -376,7 +373,7 @@ ALTER TABLE uk.uk_price_paid_with_projections_v2 ) ``` -为现有数据填充该投影。(如果不进行物化,则该投影只会为之后新插入的数据创建): +为已有数据填充该 projection。(如果不进行物化,则该 projection 只会针对新插入的数据创建): ```sql ALTER TABLE uk.uk_price_paid_with_projections_v2 @@ -384,9 +381,10 @@ ALTER TABLE uk.uk_price_paid_with_projections_v2 SETTINGS mutations_sync = 1 ``` -下面的查询对比了启用和未启用投影(projection)时的性能。要禁用投影,我们使用设置项 [`optimize_use_projections`](/operations/settings/settings#optimize_use_projections),该设置默认开启。 +以下查询对比了启用和未启用投影时的性能。若要禁用投影功能,请使用设置 [`optimize_use_projections`](/operations/settings/settings#optimize_use_projections),该设置默认是启用的。 -#### 查询 1:每年平均价格 + +#### 查询 1:各年份的平均价格 ```sql runnable SELECT @@ -410,9 +408,10 @@ ORDER BY year ASC ``` -结果应该相同,但后一个示例的性能会更好! +结果应该是相同的,但后一个示例的性能会更优! + -#### 查询 2:伦敦每年的平均价格 +#### 查询 2:伦敦历年平均价格 ```sql runnable SELECT @@ -437,9 +436,10 @@ GROUP BY year ORDER BY year ASC ``` -#### 查询 3:最昂贵的社区 -需要将条件 (date >= '2020-01-01') 修改为与投影维度 (`toYear(date) >= 2020)` 一致: +#### 查询 3:最昂贵的街区 + +条件 (date >= '2020-01-01') 需要进行修改,以便与投影维度 (`toYear(date) >= 2020)` 保持一致: ```sql runnable SELECT @@ -459,7 +459,6 @@ LIMIT 100 SETTINGS optimize_use_projections=0 ``` - ```sql runnable SELECT town, @@ -477,17 +476,22 @@ ORDER BY price DESC LIMIT 100 ``` -同样,结果是相同的,但请注意第二个查询的性能有所提升。 +同样,结果相同,但请注意第二个查询的执行性能有所提升。 + -### 在一个查询中组合多个 projection +### 在单个查询中组合投影 -从 25.6 版本开始,在上一版本引入对 `_part_offset` 的支持基础上,ClickHouse 现在可以在带有多个过滤条件的单个查询中使用多个 projection 来加速查询。 +从 25.6 版本开始,在前一版本引入的 `_part_offset` 支持基础之上,ClickHouse +现在可以在带有多个过滤条件的单个查询中使用多个投影来加速查询。 -需要强调的是,ClickHouse 仍然只会从一个 projection(或基础表)中读取数据,但可以利用其他 projection 的主索引在读取前裁剪掉不必要的 part。对于在多个列上进行过滤、且每个过滤条件可能匹配到不同 projection 的查询,这一特性尤其有用。 +需要注意的是,ClickHouse 仍然只会从一个投影(或基础表)中读取数据, +但可以利用其他投影的主键索引在读取之前剪枝掉不必要的 part。 +这对于在多个列上进行过滤,且每一列可能分别匹配到不同投影的查询尤其有用。 -> 当前,该机制只能裁剪整个 part,尚不支持粒度级别的裁剪。 +> 当前,该机制只会剪枝整个 part。尚不支持粒度级(granule-level)的剪枝。 -为了演示这一点,我们定义了一个表(其 projection 使用 `_part_offset` 列),并插入了五行示例数据,以对应上面的示意图。 +为演示这一点,我们定义表(带有使用 `_part_offset` 列的投影), +并插入与上文图示相对应的五行示例数据。 ```sql CREATE TABLE page_views @@ -513,7 +517,7 @@ SETTINGS max_bytes_to_merge_at_max_space_in_pool = 1; -- 禁用合并 ``` -然后向该表中插入数据: +然后向表中插入数据: ```sql INSERT INTO page_views VALUES ( @@ -529,72 +533,71 @@ INSERT INTO page_views VALUES ( ``` :::note -注意:此表为了演示使用了自定义设置,例如单行 granule 和禁用 part 合并,这些设置不推荐用于生产环境。 +注意:该表为了演示使用了自定义设置,例如单行 granule(粒度单元)以及禁用 part 合并,这些设置不建议在生产环境中使用。 ::: 此设置会产生: * 五个独立的 part(每插入一行生成一个 part) -* 每行一个主键索引项(在基础表和每个 projection 中都是如此) -* 每个 part 中正好包含一行数据 +* 每行一个主键索引条目(在基础表和每个 projection 中) +* 每个 part 都只包含一行 -在此设置下,我们运行一个同时在 `region` 和 `user_id` 上过滤的查询。 +在此设置下,我们运行一个同时按 `region` 和 `user_id` 进行过滤的查询。 由于基础表的主键索引是基于 `event_date` 和 `id` 构建的, -在这里并没有帮助,因此 ClickHouse 会使用: +在这里帮不上忙,因此 ClickHouse 会改为使用: * `region_proj` 按 `region` 剪枝 part * `user_id_proj` 进一步按 `user_id` 剪枝 part -可以通过 `EXPLAIN projections = 1` 看到这一行为,它展示了 -ClickHouse 如何选择并应用 projection。 +可以使用 `EXPLAIN projections = 1` 观察这一行为,它会展示 ClickHouse 如何选择并应用 projection。 ```sql EXPLAIN projections=1 SELECT * FROM page_views WHERE region = 'us_west' AND user_id = 107; ``` - ```response ┌─explain────────────────────────────────────────────────────────────────────────────────┐ - 1. │ 表达式 ((投影名称 + 投影)) │ - 2. │ 表达式 │ - 3. │ 从 MergeTree 读取 (default.page_views) │ + 1. │ Expression ((投影名称 + 投影)) │ + 2. │ Expression │ + 3. │ ReadFromMergeTree (default.page_views) │ 4. │ 投影: │ 5. │ 名称: region_proj │ - 6. │ 描述: 投影已分析并用于数据分片级过滤 │ + 6. │ 描述: 投影已分析并用于数据分片级别过滤 │ 7. │ 条件: (region in ['us_west', 'us_west']) │ 8. │ 搜索算法: 二分查找 │ - 9. │ 数据分片数: 3 │ -10. │ 标记数: 3 │ -11. │ 范围数: 3 │ + 9. │ 数据分片: 3 │ +10. │ 标记: 3 │ +11. │ 范围: 3 │ 12. │ 行数: 3 │ -13. │ 已过滤数据分片数: 2 │ +13. │ 已过滤数据分片: 2 │ 14. │ 名称: user_id_proj │ -15. │ 描述: 投影已分析并用于数据分片级过滤 │ +15. │ 描述: 投影已分析并用于数据分片级别过滤 │ 16. │ 条件: (user_id in [107, 107]) │ 17. │ 搜索算法: 二分查找 │ -18. │ 数据分片数: 1 │ -19. │ 标记数: 1 │ -20. │ 范围数: 1 │ +18. │ 数据分片: 1 │ +19. │ 标记: 1 │ +20. │ 范围: 1 │ 21. │ 行数: 1 │ -22. │ 已过滤数据分片数: 2 │ +22. │ 已过滤数据分片: 2 │ └────────────────────────────────────────────────────────────────────────────────────────┘ ``` -`EXPLAIN` 的输出(如上所示)从上到下展示了逻辑查询计划: +`EXPLAIN` 的输出(如上所示)自上而下展示了逻辑查询计划: -| 行号 | 描述 | -| ----- | ----------------------------------------------------------------------------- | -| 3 | 计划从 `page_views` 基表读取数据 | -| 5-13 | 使用 `region_proj` 来定位满足 region = 'us_west' 的 3 个分片,剪枝掉 5 个分片中的 2 个 | -| 14-22 | 使用 `user_id_proj` 来定位满足 `user_id = 107` 的 1 个分片,进一步剪枝掉剩余 3 个分片中的 2 个 | -最终,基表中只读取了 **5 个分片中的 1 个**。 -通过结合多个投影的索引分析,ClickHouse 显著减少了扫描的数据量, -在保持较低存储开销的同时提升了性能。 +| 行号 | 描述 | +|------|---------------------------------------------------------------------------------------------------| +| 3 | 计划从 `page_views` 基表中读取数据 | +| 5-13 | 使用 `region_proj` 来定位 `region = 'us_west'` 的 3 个分片,从而在 5 个分片中裁剪掉 2 个 | +| 14-22| 使用 `user_id_proj` 来定位 `user_id = 107` 的 1 个分片,进一步从剩余的 3 个分片中再裁剪掉 2 个 | +最终,只需要从基表中读取 **5 个分片中的 1 个**。 +通过结合多个 projection 的索引分析结果,ClickHouse 能显著减少扫描的数据量, +在保持存储开销较低的同时提升性能。 ## 相关内容 {#related-content} -- [ClickHouse 主索引实用介绍](/guides/best-practices/sparse-primary-indexes#option-3-projections) + +- [ClickHouse 主键索引实用入门指南](/guides/best-practices/sparse-primary-indexes#option-3-projections) - [物化视图](/docs/materialized-views) -- [ALTER PROJECTION](/sql-reference/statements/alter/projection) +- [ALTER PROJECTION](/sql-reference/statements/alter/projection) \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/data-modeling/projections/2_materialized-views-versus-projections.md b/i18n/zh/docusaurus-plugin-content-docs/current/data-modeling/projections/2_materialized-views-versus-projections.md index 285e324dfef..1458736cce9 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/data-modeling/projections/2_materialized-views-versus-projections.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/data-modeling/projections/2_materialized-views-versus-projections.md @@ -3,80 +3,74 @@ slug: /managing-data/materialized-views-versus-projections sidebar_label: '物化视图 vs 投影' title: '物化视图与投影' hide_title: false -description: '本文比较 ClickHouse 中的物化视图与投影,包括它们的使用场景、性能以及局限性。' +description: '本文比较 ClickHouse 中的物化视图和投影,包括它们的使用场景、性能以及局限性。' doc_type: 'reference' keywords: ['物化视图', '投影', '差异'] --- -> 用户经常会问:在什么情况下应该使用物化视图,而不是投影?在本文中,我们将探讨二者之间的关键差异,以及在某些场景下为何更适合选择其中一种而非另一种。 +> 用户经常会问:在什么情况下应该使用物化视图,而什么时候应该使用投影?在本文中,我们将探讨二者之间的关键差异,以及在某些场景下为何可能更适合选择其中之一。 +## 关键差异概览 {#key-differences} +下表总结了在不同考量维度下,物化视图与投影之间的关键差异。 -## 关键差异总结 {#key-differences} +| Aspect | Materialized views | Projections | +|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Data storage and location | 将结果存储在一个**单独、显式的目标表**中,在向源表插入数据时充当 `INSERT` 触发器。 | 投影会创建经过优化的数据布局,这些数据在物理上**与主表数据一起存储**,并且对用户不可见。 | +| Update mechanism | 在对源表执行 `INSERT` 时(对于增量物化视图)**同步**运行。注意:也可以通过可刷新的物化视图按计划进行**调度**刷新。 | 在对主表执行 `INSERT` 时,在后台进行**异步**更新。 | +| Query interaction | 使用物化视图时需要**直接查询目标表**,这意味着在编写查询时,用户必须意识到物化视图的存在。 | 投影由 ClickHouse 查询优化器**自动选择**,对用户是透明的,用户无需为利用投影而修改针对该表的查询。从 25.6 版本开始,还可以基于多个投影进行过滤。 | +| Handling `UPDATE` / `DELETE` | 对源表上的 `UPDATE` 或 `DELETE` 操作**不会自动做出反应**,因为物化视图并不了解源表,仅作为对源表的 `INSERT` 触发器。这可能导致源表和目标表之间的数据陈旧,需要通过变通方案或定期全量刷新(通过可刷新的物化视图)来解决。 | 默认情况下,**与 `DELETED` 行不兼容**(尤其是轻量级删除)。可以通过 `lightweight_mutation_projection_mode`(v24.7+)启用兼容性。 | +| `JOIN` support | 支持。可刷新的物化视图可用于复杂的反规范化。增量物化视图仅在最左侧表插入时触发。 | 不支持。在投影定义中不支持使用 `JOIN` 操作来过滤物化后的数据。不过,查询在与包含投影的表进行 `JOIN` 时可以正常工作——投影会优化单个表的访问。 | +| `WHERE` clause in definition | 支持。可以包含 `WHERE` 子句以在物化之前过滤数据。 | 不支持。在投影定义中不支持使用 `WHERE` 子句来过滤物化后的数据。 | +| Chaining capabilities | 支持,一个物化视图的目标表可以作为另一个物化视图的源表,从而实现多阶段流水线。 | 不支持。投影不能进行链式组合。 | +| Applicable table engines | 可用于多种源表引擎,但目标表通常属于 `MergeTree` 家族。 | **仅可用于** `MergeTree` 家族表引擎。 | +| Failure handling | 在插入数据期间发生故障意味着目标表中的数据会丢失,从而导致潜在的不一致性。 | 故障在后台被**静默**处理。查询可以无缝混合已物化和未物化的数据分片。 | +| Operational overhead | 需要显式创建目标表,并且通常需要手动回填历史数据。使用 `UPDATE`/`DELETE` 保持一致性会增加复杂度。 | 投影自动维护并保持同步,通常具有更低的运维负担。 | +| `FINAL` query compatibility | 通常兼容,但往往需要在目标表上使用 `GROUP BY`。 | **无法与** `FINAL` 查询配合使用。 | +| Lazy materialization | 支持。 | 使用延迟物化特性时需要监控投影兼容性问题。可能需要设置 `query_plan_optimize_lazy_materialization = false`。 | +| Parallel replicas | 支持。 | 不支持。 | +| [`optimize_read_in_order`](/operations/settings/settings#optimize_read_in_order) | 支持。 | 支持。 | +| Lightweight updates and deletes | 支持。 | 不支持。 | -下表总结了在各个考量维度上,物化视图与投影之间的主要差异。 - -| 方面 | 物化视图 | 投影 | -|---------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| 数据存储与位置 | 将结果存储在一个**单独、显式的目标表**中,在向源表插入数据时充当插入触发器。 | 投影会创建经过优化的数据布局,这些数据在物理上**与主表数据一同存储**,并且对用户不可见。 | -| 更新机制 | 在对源表执行 `INSERT` 时(对于增量物化视图)**同步**运行。注意:也可以通过可刷新的物化视图将其设置为**按计划调度**。 | 在对主表执行 `INSERT` 后,于后台**异步**更新。 | -| 查询交互 | 使用物化视图时,需要**直接查询目标表**,这意味着用户在编写查询时需要了解物化视图的存在。 | 投影会由 ClickHouse 的查询优化器**自动选择**,对用户是透明的,用户无需为了使用投影而修改针对包含投影的表的查询。从 25.6 版本开始,也可以按照多个投影进行过滤。 | -| 处理 `UPDATE` / `DELETE` | 对源表上的 `UPDATE` 或 `DELETE` 操作**不会自动响应**,因为物化视图不了解源表,仅充当源表的插入触发器。这可能导致源表与目标表之间的数据陈旧,需要通过变通方案或定期全量刷新(通过可刷新物化视图)来解决。 | 默认情况下,与被标记为 **`DELETED` 的行不兼容**(尤其是轻量级删除)。可以通过启用 `lightweight_mutation_projection_mode`(v24.7+)来实现兼容性。 | -| `JOIN` 支持 | 支持。可刷新物化视图可用于复杂的反规范化场景。增量物化视图仅在最左侧表插入时触发。 | 不支持。投影定义中不支持 `JOIN` 操作来过滤物化后的数据。 | -| 定义中的 `WHERE` 子句 | 支持。可以在定义中包含 `WHERE` 子句,以在物化前过滤数据。 | 不支持。投影定义中不支持使用 `WHERE` 子句来过滤物化数据。 | -| 串联能力 | 支持。一个物化视图的目标表可以作为另一个物化视图的源表,从而实现多阶段流水线。 | 不支持。投影不能被串联使用。 | -| 适用的表引擎 | 可以与多种源表引擎配合使用,但目标表通常使用 `MergeTree` 系列表引擎。 | **仅适用于** `MergeTree` 系列表引擎。 | -| 失败处理 | 在插入数据期间发生失败时,目标表中的数据会丢失,从而可能导致不一致。 | 失败会在后台被**静默**处理。查询可以无缝混合使用已物化和未物化的数据片段。 | -| 运维开销 | 需要显式创建目标表,并且通常需要手动回填数据。使用 `UPDATE`/`DELETE` 维持一致性会增加复杂度。 | 投影会自动维护并保持同步,通常具有更低的运维负担。 | -| `FINAL` 查询兼容性 | 一般兼容,但通常需要在目标表上使用 `GROUP BY`。 | 与 `FINAL` 查询**不兼容**。 | -| 惰性物化 | 支持。 | 使用惰性物化特性时,需要监控投影兼容性问题。你可能需要设置 `query_plan_optimize_lazy_materialization = false`。 | -| 并行副本 | 支持。 | 不支持。 | -| [`optimize_read_in_order`](/operations/settings/settings#optimize_read_in_order) | 支持。 | 支持。 | -| 轻量级更新与删除 | 支持。 | 不支持。 | - - - -## 比较物化视图和投影 {#choose-between} +## 对比物化视图和投影 {#choose-between} ### 何时选择物化视图 {#choosing-materialized-views} -在以下情况下,你应考虑使用物化视图: - -- 处理 **实时 ETL 和多阶段数据管道**:你需要在数据到达时执行复杂转换、聚合或路由,并可能通过链式视图跨多个阶段处理数据。 -- 需要 **复杂反规范化**:你需要将来自多个来源(表、子查询或字典)的数据预先关联到一个单一、针对查询优化的表中,尤其是在可以接受使用可刷新的物化视图进行周期性全量刷新的情况下。 -- 希望 **显式控制模式(schema)**:你需要一个独立的目标表,用其自身的 schema 和引擎来存储预计算结果,为数据建模提供更大的灵活性。 -- 希望在 **摄取阶段进行过滤**:你需要在数据被物化之前进行过滤,从而减少写入目标表的数据量。 - -### 何时避免使用物化视图 {#avoid-materialized-views} +在以下情况下,应考虑使用物化视图: -在以下情况下,你应考虑避免使用物化视图: +- 处理 **实时 ETL 和多阶段数据管道**:需要在数据到达时执行复杂转换、聚合或路由分发,并且可能通过串联视图跨多个阶段处理。 +- 需要 **复杂的反规范化**:需要将来自多个源(表、子查询或字典)的数据预先关联(join)到单个、针对查询优化的表中,尤其是在可以接受使用可刷新的物化视图进行周期性全量刷新时。 +- 希望获得 **显式的 schema 控制**:需要一个具有自己 schema 和引擎的独立目标表来存放预计算结果,从而在数据建模上获得更大的灵活性。 +- 希望在 **摄取时进行过滤**:需要在数据被物化之前对其进行过滤,从而减少写入目标表的数据量。 -- **源数据经常被更新或删除**:如果没有额外策略来处理源表和目标表之间的一致性,增量物化视图可能会变得陈旧且不一致。 -- **更偏好简单性和自动优化**:例如你希望避免管理单独的目标表。 +### 何时应避免使用物化视图 {#avoid-materialized-views} -### 何时选择投影 {#choosing-projections} +在以下情况下,应考虑避免使用物化视图: -在以下情况下,你应考虑使用投影: +- **源数据经常被更新或删除**:如果没有额外的策略来处理源表和目标表之间的一致性,增量物化视图可能会变得过时且不一致。 +- **更倾向于保持简单并依赖自动优化**:例如你希望避免管理单独的目标表时。 -- **优化单表查询**:你的主要目标是通过提供备用排序顺序、优化对非主键列的过滤,或为单个表预计算聚合结果,以加速对单个基础表的查询。 -- 需要 **查询透明性**:你希望查询直接针对原始表而无需修改,并依赖 ClickHouse 为给定查询选择最优的数据布局。 +### 何时选择使用投影(projections){#choosing-projections} -### 何时避免使用投影 {#avoid-projections} +在以下情况下,应当考虑使用 projections: -在以下情况下,你应考虑避免使用投影: +- **为单个表优化查询**:你的主要目标是通过提供备用排序顺序、优化不属于主键的列上的过滤条件,或为单个表预先计算聚合,从而加速对单个基础表的查询。 +- 你希望实现**查询透明性(query transparency)**:你希望在不修改查询的情况下,始终针对原始表执行查询,并依赖 ClickHouse 为给定查询自动选择最优的数据布局。 -- **需要复杂数据转换或多阶段 ETL**:投影在其定义中不支持 `JOIN` 操作,无法调整为构建多步管道,并且无法处理某些 SQL 特性,如窗口函数或复杂的 `CASE` 表达式。因此,它们不适合复杂数据转换。 -- **需要对物化数据进行显式过滤**:投影在其定义中不支持 `WHERE` 子句来过滤要物化到投影本身的数据。 -- **使用非 MergeTree 表引擎**:投影仅适用于使用 `MergeTree` 系列表引擎的表。 -- **必须依赖 `FINAL` 查询**:投影无法与 `FINAL` 查询配合使用,而后者有时用于去重。 -- 你需要使用 [parallel replicas](/deployment-guides/parallel-replicas),而这在投影中不受支持。 +### 何时应避免使用 Projection {#avoid-projections} +在以下情况下,应考虑避免使用 Projection: +- **需要复杂数据转换或多阶段 ETL 时**:Projection 定义不支持 `JOIN` 操作,不能通过链式组合构建多步管道,也无法处理某些 SQL 特性,如窗口函数或复杂的 `CASE` 表达式。虽然针对带有 Projection 的表执行查询时可以自由使用 `JOIN`,但 Projection 本身并不适合承担复杂的数据转换逻辑。 +- **需要对物化数据进行显式过滤时**:Projection 在定义中不支持使用 `WHERE` 子句来过滤将被物化到该 Projection 中的数据。 +- **使用非 MergeTree 表引擎时**:Projection 仅适用于使用 `MergeTree` 系列表引擎的表。 +- **需要使用 `FINAL` 查询时**:Projection 无法与 `FINAL` 查询配合使用,而 `FINAL` 查询有时会用于去重。 +- **需要使用 [parallel replicas](/deployment-guides/parallel-replicas) 时**:Projection 不支持该特性。 ## 总结 {#summary} -物化视图和投影都是用于优化查询和转换数据的强大工具。总体来说,我们不建议将它们视为非此即彼的选择。相反,可以将它们以互补的方式一起使用,从而最大化查询性能。因此,在 ClickHouse 中选择物化视图还是投影,实际上取决于具体的使用场景和访问模式。 +物化视图和投影(projection)都是用于优化查询和转换数据的强大工具,我们并不建议把它们看作非此即彼的二选一方案。相反,你可以将二者组合、互补使用,以最大化查询性能。因此,在 ClickHouse 中选择物化视图还是投影,很大程度上取决于你的具体用例和访问模式。 -一般来说,当需要将一个或多个源表中的数据聚合到一个目标表中,或在大规模上执行复杂转换时,应考虑使用物化视图。物化视图非常适合将开销昂贵的聚合工作从查询时转移到写入时。它们非常适用于按日或按月的汇总、实时仪表盘或数据摘要。 +作为一个经验法则,当你需要将一个或多个源表中的数据聚合到目标表,或者需要在大规模数据上执行复杂转换时,应优先考虑使用物化视图。物化视图非常适合将代价高昂的聚合工作从查询时刻前移到写入时刻。它们非常适用于按日或按月的汇总(rollup)、实时看板以及数据概览或汇总等场景。 -另一方面,当需要优化那些在与表主键(主键决定了磁盘上数据的物理排序)不同的列上进行过滤的查询时,应使用投影。当无法再更改表的主键,或者访问模式比主键所能支持的更加多样化时,投影尤其有用。 +另一方面,当你需要优化的查询在过滤条件中使用的列,与表主键(决定数据在磁盘上物理排序的列)不同的时候,应考虑使用投影。尤其是在无法再更改表主键,或者你的访问模式比主键能够支持的情况更加多样化时,投影会格外有用。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/data-modeling/schema-design.md b/i18n/zh/docusaurus-plugin-content-docs/current/data-modeling/schema-design.md index 8e50d03e9a4..a3f1e0a1639 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/data-modeling/schema-design.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/data-modeling/schema-design.md @@ -89,13 +89,15 @@ SELECT * FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/stac ```sql SHOW CREATE TABLE posts +``` + CREATE TABLE posts ( `Id` Nullable(Int64), `PostTypeId` Nullable(Int64), `AcceptedAnswerId` Nullable(Int64), -`CreationDate` Nullable(DateTime64(3, 'UTC')), +`CreationDate` Nullable(DateTime64(3, 'UTC')), `Score` Nullable(Int64), `ViewCount` Nullable(Int64), `Body` Nullable(String), @@ -103,8 +105,8 @@ CREATE TABLE posts `OwnerDisplayName` Nullable(String), `LastEditorUserId` Nullable(Int64), `LastEditorDisplayName` Nullable(String), -`LastEditDate` Nullable(DateTime64(3, 'UTC')), -`LastActivityDate` Nullable(DateTime64(3, 'UTC')), +`LastEditDate` Nullable(DateTime64(3, 'UTC')), +`LastActivityDate` Nullable(DateTime64(3, 'UTC')), `Title` Nullable(String), `Tags` Nullable(String), `AnswerCount` Nullable(Int64), @@ -112,12 +114,13 @@ CREATE TABLE posts `FavoriteCount` Nullable(Int64), `ContentLicense` Nullable(String), `ParentId` Nullable(String), -`CommunityOwnedDate` Nullable(DateTime64(3, 'UTC')), -`ClosedDate` Nullable(DateTime64(3, 'UTC')) +`CommunityOwnedDate` Nullable(DateTime64(3, 'UTC')), +`ClosedDate` Nullable(DateTime64(3, 'UTC')) ) -ENGINE = MergeTree('/clickhouse/tables/{uuid}/{shard}', '{replica}') +ENGINE = MergeTree('/clickhouse/tables/{uuid}/{shard}', '{replica}') ORDER BY tuple() -``` + +```` 定义好初始架构后,我们可以使用 `INSERT INTO SELECT` 来填充数据,通过 S3 表函数读取数据。以下操作在 8 核 ClickHouse Cloud 实例上加载 `posts` 数据大约需要 2 分钟。 @@ -125,7 +128,7 @@ ORDER BY tuple() INSERT INTO posts SELECT * FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/parquet/posts/*.parquet') 0 rows in set. Elapsed: 148.140 sec. Processed 59.82 million rows, 38.07 GB (403.80 thousand rows/s., 257.00 MB/s.) -``` +```` > 上述查询会加载 6000 万行。对于 ClickHouse 来说这算小规模,但网络连接较慢的用户可能希望只加载一部分数据。可以通过使用 glob 通配模式指定要加载的年份来实现,例如 `https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/parquet/posts/2008.parquet` 或 `https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/parquet/posts/{2008, 2009}.parquet`。关于如何使用 glob 模式来筛选文件子集,请参阅[此处](/sql-reference/table-functions/file#globs-in-path)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/development/developer-instruction.md b/i18n/zh/docusaurus-plugin-content-docs/current/development/developer-instruction.md index ae1d412973e..9ec4d355583 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/development/developer-instruction.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/development/developer-instruction.md @@ -1,78 +1,74 @@ --- -description: 'ClickHouse 开发的前提条件和设置指南' +description: 'ClickHouse 开发的前提条件与设置指南' sidebar_label: '前提条件' sidebar_position: 5 slug: /development/developer-instruction -title: '开发前提条件' +title: '开发者前提条件' doc_type: 'guide' --- +# 前提条件 +ClickHouse 可以在 Linux、FreeBSD 和 macOS 上构建。 +如果你使用的是 Windows,仍然可以在运行 Linux 的虚拟机中构建 ClickHouse,例如在安装了 Ubuntu 的 [VirtualBox](https://www.virtualbox.org/) 中。 -# 前置条件 - -ClickHouse 可以在 Linux、FreeBSD 和 macOS 上编译构建。 -如果您使用 Windows,仍然可以在运行 Linux 的虚拟机中编译构建 ClickHouse,例如使用运行 Ubuntu 的 [VirtualBox](https://www.virtualbox.org/)。 - - - -## 在 GitHub 上创建代码仓库 +## 在 GitHub 上创建仓库 要开始为 ClickHouse 开发,你需要一个 [GitHub](https://www.github.com/) 账号。 -如果你还没有 SSH 密钥,请先在本地生成一个 SSH 密钥,并将公钥上传到 GitHub,这是提交补丁的前置条件。 +如果你还没有 SSH 密钥,请在本地生成一个 SSH 密钥,并将公钥上传到 GitHub,因为这是提交补丁的前置条件。 -接下来,在你的个人账号下 fork [ClickHouse 仓库](https://github.com/ClickHouse/ClickHouse/),点击右上角的 “fork” 按钮即可。 +接下来,在你的个人账号中 fork [ClickHouse 仓库](https://github.com/ClickHouse/ClickHouse/),方法是在右上角点击 “Fork” 按钮。 -要贡献更改(例如修复一个 issue 或添加一个功能),请先将你的更改提交到你 fork 中的某个分支,然后创建一个包含这些更改的 “Pull Request” 到主仓库。 +要贡献更改(例如修复 issue 或添加功能),请先将你的修改提交到 fork 后仓库中的某个分支,然后向主仓库创建一个包含这些更改的 Pull Request。 -要使用 Git 仓库,请先安装 Git。比如在 Ubuntu 中,运行: +若要操作 Git 仓库,请先安装 Git。例如,在 Ubuntu 中运行: ```sh sudo apt update sudo apt install git ``` -Git 速查表可在[这里](https://education.github.com/git-cheat-sheet-education.pdf)找到。 -详细的 Git 手册在[这里](https://git-scm.com/book/en/v2)。 +Git 速查表可在[此处](https://education.github.com/git-cheat-sheet-education.pdf)查阅。 +Git 详细手册在[此处](https://git-scm.com/book/en/v2)。 -## 将代码仓库克隆到你的开发机器上 +## 将仓库克隆到你的开发环境中 -首先,将源文件下载到你的本地开发环境,即克隆该代码仓库: +首先,将源文件下载到你的工作环境中,也就是克隆该仓库: ```sh -git clone git@github.com:your_github_username/ClickHouse.git # 将占位符替换为你的 GitHub 用户名 +git clone git@github.com:your_github_username/ClickHouse.git # 将占位符替换为您的 GitHub 用户名 cd ClickHouse ``` -此命令会创建一个名为 `ClickHouse/` 的目录,其中包含源代码、测试以及其他文件。 -你可以在 URL 后指定一个自定义目录用于检出,但务必确保该路径中不包含空格字符,否则后续的构建过程可能会失败。 +此命令会创建一个 `ClickHouse/` 目录,其中包含源代码、测试以及其他文件。 +你可以在 URL 之后指定一个自定义检出目录,但务必要确保该路径中不包含空格,否则可能会在后续构建过程中导致失败。 -ClickHouse 的 Git 仓库使用子模块来拉取第三方库代码。 -子模块默认不会被检出。 -你可以执行以下任一操作: +ClickHouse 的 Git 仓库使用子模块来拉取第三方库。 +默认情况下不会检出子模块。 +你可以: -* 使用带有 `--recurse-submodules` 选项的 `git clone` 命令; +* 使用带有 `--recurse-submodules` 选项的 `git clone`; -* 如果运行 `git clone` 时未使用 `--recurse-submodules`,则运行 `git submodule update --init --jobs <N>` 来显式检出所有子模块。(例如可以将 `<N>` 设置为 `12` 以并行下载。) +* 如果 `git clone` 未使用 `--recurse-submodules`,则运行 `git submodule update --init --jobs ` 显式检出所有子模块。(例如可以将 `` 设为 `12` 以并行下载。) -* 如果运行 `git clone` 时未使用 `--recurse-submodules`,并且你希望使用 [sparse](https://github.blog/2020-01-17-bring-your-monorepo-down-to-size-with-sparse-checkout/) 和 [shallow](https://github.blog/2020-12-21-get-up-to-speed-with-partial-clone-and-shallow-clone/) 子模块检出,以省略子模块中不需要的文件和历史、从而节省空间(约 5 GB 而不是约 15 GB),请运行 `./contrib/update-submodules.sh`。这种方式在 CI 中使用,但不推荐用于本地开发,因为它会让使用子模块变得不太方便且更慢。 +* 如果 `git clone` 未使用 `--recurse-submodules`,并且你希望使用 [shallow](https://github.blog/2020-12-21-get-up-to-speed-with-partial-clone-and-shallow-clone/) 子模块检出以省略子模块的历史记录从而节省空间,则运行 `./contrib/update-submodules.sh`。这种方式由 CI 使用,但不推荐用于本地开发,因为它会让使用子模块变得不太方便且更慢。 -要检查 Git 子模块的状态,请运行 `git submodule status`。 +要检查 Git 子模块的状态,运行 `git submodule status`。 如果你收到如下错误信息 ```bash -权限被拒绝(publickey)。 -致命错误:无法从远程仓库读取。 +权限被拒绝(publickey)。 +致命错误:无法从远程仓库读取。 -请确保您拥有正确的访问权限, +请确保您拥有正确的访问权限, 且该仓库存在。 ``` -缺少用于连接 GitHub 的 SSH 密钥。 +用于连接 GitHub 的 SSH 密钥不存在。 这些密钥通常位于 `~/.ssh`。 -要使 SSH 密钥生效,你需要在 GitHub 的设置中上传它们。 +要让 SSH 密钥被 GitHub 接受,你需要在 GitHub 的设置页面中上传它们。 你也可以通过 HTTPS 克隆该仓库: @@ -80,82 +76,76 @@ ClickHouse 的 Git 仓库使用子模块来拉取第三方库代码。 git clone https://github.com/ClickHouse/ClickHouse.git ``` -然而,这样做并不能让你将更改推送到服务器。 -你仍然可以暂时这样使用,并在之后添加 SSH 密钥,再通过 `git remote` 命令替换仓库的远程地址。 +不过,这样你还不能将更改推送到服务器。 +你仍然可以先暂时这样使用,之后再添加 SSH 密钥,并通过 `git remote` 命令替换仓库的远程地址。 -你也可以将原始 ClickHouse 仓库地址添加到本地仓库,以便从那里拉取更新: +你也可以在本地仓库中添加原始 ClickHouse 仓库地址,以便从那里拉取更新: ```sh git remote add upstream git@github.com:ClickHouse/ClickHouse.git ``` -成功运行此命令后,你就可以通过运行 `git pull upstream master` 从 ClickHouse 主仓库拉取更新。 +成功运行此命令后,你就可以通过执行 `git pull upstream master` 从 ClickHouse 主仓库拉取更新。 :::tip -请不要直接使用 `git push`,你可能会推送到错误的远程仓库和/或错误的分支。 -最好显式指定远程和分支的名称,例如 `git push origin my_branch_name`。 +请不要直接使用 `git push`,否则你可能会推送到错误的远程仓库或错误的分支。 +最好显式指定远程和分支名,例如 `git push origin my_branch_name`。 ::: ## 编写代码 {#writing-code} -下面是一些在为 ClickHouse 编写代码时可能有用的快速链接: +下面是一些在为 ClickHouse 编写代码时可能会用到的快速链接: -- [ClickHouse 架构](/development/architecture/). -- [代码风格指南](/development/style/). +- [ClickHouse 架构](/development/architecture/) +- [代码风格指南](/development/style/) - [第三方库](/development/contrib#adding-and-maintaining-third-party-libraries) - [编写测试](/development/tests/) -- [开放的 Issue](https://github.com/ClickHouse/ClickHouse/issues?q=is%3Aopen+is%3Aissue+label%3A%22easy+task%22) +- [开放的 issue](https://github.com/ClickHouse/ClickHouse/issues?q=is%3Aopen+is%3Aissue+label%3A%22easy+task%22) ### IDE {#ide} -[Visual Studio Code](https://code.visualstudio.com/) 和 [Neovim](https://neovim.io/) 是在开发 ClickHouse 时实践证明很好用的两个选项。如果你使用 VS Code,我们推荐使用 [clangd 扩展](https://marketplace.visualstudio.com/items?itemName=llvm-vs-code-extensions.vscode-clangd) 替代 IntelliSense,因为它的性能要高得多。 +[Visual Studio Code](https://code.visualstudio.com/) 和 [Neovim](https://neovim.io/) 在开发 ClickHouse 的实践中被证明是两个效果不错的选项。若你使用 VS Code,我们建议使用 [clangd 扩展](https://marketplace.visualstudio.com/items?itemName=llvm-vs-code-extensions.vscode-clangd) 来替换 IntelliSense,因为它的性能要高得多。 -[CLion](https://www.jetbrains.com/clion/) 是另一个很好的选择。不过,在像 ClickHouse 这样的大型项目上,它可能会比较慢。使用 CLion 时需要注意以下几点: +[CLion](https://www.jetbrains.com/clion/) 是另一个很好的选择。不过,在像 ClickHouse 这样的大型项目上,它可能会更慢。使用 CLion 时需要注意以下几点: - CLion 会自行创建一个 `build` 目录,并自动选择 `debug` 作为构建类型 -- 它使用的是在 CLion 中定义的 CMake 版本,而不是你自己安装的版本 +- 它使用的是在 CLion 中定义的 CMake 版本,而不是你自行安装的版本 - CLion 会使用 `make` 来运行构建任务,而不是 `ninja`(这是正常行为) 你也可以使用其他 IDE,例如 [Sublime Text](https://www.sublimetext.com/)、[Qt Creator](https://www.qt.io/product/development-tools) 或 [Kate](https://kate-editor.org/)。 +## 创建 Pull Request {#create-a-pull-request} - -## 创建拉取请求 {#create-a-pull-request} - -在 GitHub 的界面中进入你自己的 fork 仓库。 +在 GitHub 的 UI 中打开你 fork 出来的仓库。 如果你是在某个分支上开发的,需要先选择该分支。 -页面上会有一个 “Pull request” 按钮。 -本质上,这表示“创建一个请求,将我的更改合并到主仓库中”。 - -即使工作尚未完成,你也可以创建拉取请求。 -在这种情况下,请在标题开头加入 “WIP”(work in progress),之后可以再修改。 -这有助于协作进行评审和讨论更改,也便于运行所有可用的测试。 -请务必提供你所做更改的简要说明,之后会用它来生成发布版本的变更日志。 - -当 ClickHouse 员工为你的 PR 添加 “can be tested” 标签后,测试将开始执行。 -部分初始检查结果(例如代码风格)会在几分钟内完成。 -构建检查结果通常会在半小时内返回。 -主测试集的结果通常会在一小时内完成。 - -系统会为你的拉取请求单独准备 ClickHouse 二进制构建。 -要获取这些构建,请点击检查列表中 “Builds” 条目旁边的 “Details” 链接。 -在那里你会找到已构建的 ClickHouse .deb 软件包的直接链接,你甚至可以将其部署到生产服务器上(如果你不惧风险的话)。 - +界面上会有一个名为 “Pull request” 的按钮。 +本质上,这意味着“创建一个请求,将我的更改合并到主仓库中”。 +即使工作尚未完成,也可以创建 Pull Request。 +在这种情况下,请在标题开头加上 “WIP”(work in progress,进行中),之后可以再修改。 +这对于协同审阅和讨论更改,以及运行所有可用测试都非常有用。 +请务必对你的更改内容做一个简要说明,之后会用它来生成发布版本的变更日志。 -## 编写文档 {#write-documentation} +当 ClickHouse 员工给你的 PR 加上 “can be tested” 标签后,测试就会开始。 +部分初始检查结果(例如代码风格)会在几分钟内给出。 +构建检查结果会在半小时内完成。 +主要测试集的结果通常会在一小时内返回。 -每个添加新功能的 pull request 都必须附带相应文档。 -如果你希望预览文档修改内容,本地构建文档页面的步骤说明可在 README.md 文件中找到,链接在[这里](https://github.com/ClickHouse/clickhouse-docs)。 -在向 ClickHouse 添加新函数时,你可以参考以下模板来编写文档: +系统会为你的 Pull Request 单独准备 ClickHouse 二进制构建。 +要获取这些构建,点击检查列表中 “Builds” 条目旁边的 “Details” 链接。 +在那里你会找到已构建的 ClickHouse `.deb` 包的直接链接,你甚至可以将它们部署到生产环境服务器上(如果你不担心的话)。 +## 编写文档 +每个添加新功能的 pull request 都必须附带相应的文档。 +如果你想预览文档修改内容,如何在本地构建文档页面的说明请参见 README.md 文件:[链接](https://github.com/ClickHouse/clickhouse-docs)。 +在向 ClickHouse 添加新函数时,你可以参考下面的模板: ````markdown # newFunctionName -此处为该函数的简要说明,应简要描述其功能以及一个典型的使用场景。 +此处简要描述该函数。应简要说明其功能及典型使用场景。 **语法** @@ -165,31 +155,31 @@ newFunctionName(arg1, arg2[, arg3]) **参数** -- `arg1` — 参数说明。 [DataType](../data-types/float.md) -- `arg2` — 参数说明。 [DataType](../data-types/float.md) -- `arg3` — 可选参数说明(可选)。 [DataType](../data-types/float.md) +- `arg1` — 参数描述。 [DataType](../data-types/float.md) +- `arg2` — 参数描述。 [DataType](../data-types/float.md) +- `arg3` — 可选参数描述(可选)。 [DataType](../data-types/float.md) **实现细节** -如有需要,在此说明实现细节。 +如有必要,此处描述实现细节。 **返回值** -- 返回 {在此填写函数返回内容}。 [DataType](../data-types/float.md) +- 返回 {在此插入函数返回内容}。 [DataType](../data-types/float.md) **示例** 查询: \```sql -SELECT '在此编写示例查询'; +SELECT 'write your example query here'; \``` 响应: \```response ┌───────────────────────────────────┐ -│ 查询结果 │ +│ the result of the query │ └───────────────────────────────────┘ \``` ```` @@ -197,10 +187,10 @@ SELECT '在此编写示例查询'; ## 使用测试数据 -在开发 ClickHouse 时,经常需要加载贴近真实场景的数据集。 -这对于性能测试尤为重要。 -我们专门准备了一套经过匿名化处理的 Web 分析数据。 -它额外需要大约 3GB 的可用磁盘空间。 +在开发 ClickHouse 时,经常需要加载接近真实的数据集。 +这对性能测试尤为重要。 +我们准备了一套经过匿名化处理的网站分析数据。 +使用它大约需要额外 3GB 的可用磁盘空间。 ```sh sudo apt install wget xz-utils @@ -216,22 +206,18 @@ SELECT '在此编写示例查询'; 在 clickhouse-client 中: + ```sql CREATE DATABASE IF NOT EXISTS test; -``` - CREATE TABLE test.hits ( 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.Key1` Array(String), `ParsedParams.Key2` Array(String), `ParsedParams.Key3` Array(String), `ParsedParams.Key4` Array(String), `ParsedParams.Key5` Array(String), `ParsedParams.ValueDouble` Array(Float64), IslandID FixedString(16), RequestNum UInt32, RequestTry UInt8) ENGINE = MergeTree PARTITION BY toYYYYMM(EventDate) SAMPLE BY intHash32(UserID) ORDER BY (CounterID, EventDate, intHash32(UserID), EventTime); +CREATE TABLE test.visits ( CounterID UInt32, StartDate Date, Sign Int8, IsNew UInt8, VisitID UInt64, UserID UInt64, StartTime DateTime, Duration UInt32, UTCStartTime DateTime, PageViews Int32, Hits Int32, IsBounce UInt8, Referer String, StartURL String, RefererDomain String, StartURLDomain String, EndURL String, LinkURL String, IsDownload UInt8, TraficSourceID Int8, SearchEngineID UInt16, SearchPhrase String, AdvEngineID UInt8, PlaceID Int32, RefererCategories Array(UInt16), URLCategories Array(UInt16), URLRegions Array(UInt32), RefererRegions Array(UInt32), IsYandex UInt8, GoalReachesDepth Int32, GoalReachesURL Int32, GoalReachesAny Int32, SocialSourceNetworkID UInt8, SocialSourcePage String, MobilePhoneModel String, ClientEventTime DateTime, RegionID UInt32, ClientIP UInt32, ClientIP6 FixedString(16), RemoteIP UInt32, RemoteIP6 FixedString(16), IPNetworkID UInt32, SilverlightVersion3 UInt32, CodeVersion UInt32, ResolutionWidth UInt16, ResolutionHeight UInt16, UserAgentMajor UInt16, UserAgentMinor UInt16, WindowClientWidth UInt16, WindowClientHeight UInt16, SilverlightVersion2 UInt8, SilverlightVersion4 UInt16, FlashVersion3 UInt16, FlashVersion4 UInt16, ClientTimeZone Int16, OS UInt8, UserAgent UInt8, ResolutionDepth UInt8, FlashMajor UInt8, FlashMinor UInt8, NetMajor UInt8, NetMinor UInt8, MobilePhone UInt8, SilverlightVersion1 UInt8, Age UInt8, Sex UInt8, Income UInt8, JavaEnable UInt8, CookieEnable UInt8, JavascriptEnable UInt8, IsMobile UInt8, BrowserLanguage UInt16, BrowserCountry UInt16, Interests UInt16, Robotness UInt8, GeneralInterests Array(UInt16), Params Array(String), `Goals.ID` Array(UInt32), `Goals.Serial` Array(UInt32), `Goals.EventTime` Array(DateTime), `Goals.Price` Array(Int64), `Goals.OrderID` Array(String), `Goals.CurrencyID` Array(UInt32), WatchIDs Array(UInt64), ParamSumPrice Int64, ParamCurrency FixedString(3), ParamCurrencyID UInt16, ClickLogID UInt64, ClickEventID Int32, ClickGoodEvent Int32, ClickEventTime DateTime, ClickPriorityID Int32, ClickPhraseID Int32, ClickPageID Int32, ClickPlaceID Int32, ClickTypeID Int32, ClickResourceID Int32, ClickCost UInt32, ClickClientIP UInt32, ClickDomainID UInt32, ClickURL String, ClickAttempt UInt8, ClickOrderID UInt32, ClickBannerID UInt32, ClickMarketCategoryID UInt32, ClickMarketPP UInt32, ClickMarketCategoryName String, ClickMarketPPName String, ClickAWAPSCampaignName String, ClickPageName String, ClickTargetType UInt16, ClickTargetPhraseID UInt64, ClickContextType UInt8, ClickSelectType Int8, ClickOptions String, ClickGroupBannerID Int32, OpenstatServiceName String, OpenstatCampaignID String, OpenstatAdID String, OpenstatSourceID String, UTMSource String, UTMMedium String, UTMCampaign String, UTMContent String, UTMTerm String, FromTag String, HasGCLID UInt8, FirstVisit DateTime, PredLastVisit Date, LastVisit Date, TotalVisits UInt32, `TraficSource.ID` Array(Int8), `TraficSource.SearchEngineID` Array(UInt16), `TraficSource.AdvEngineID` Array(UInt8), `TraficSource.PlaceID` Array(UInt16), `TraficSource.SocialSourceNetworkID` Array(UInt8), `TraficSource.Domain` Array(String), `TraficSource.SearchPhrase` Array(String), `TraficSource.SocialSourcePage` Array(String), Attendance FixedString(16), CLID UInt32, YCLID UInt64, NormalizedRefererHash UInt64, SearchPhraseHash UInt64, RefererDomainHash UInt64, NormalizedStartURLHash UInt64, StartURLDomainHash UInt64, NormalizedEndURLHash UInt64, TopLevelDomain UInt64, URLScheme UInt64, OpenstatServiceNameHash UInt64, OpenstatCampaignIDHash UInt64, OpenstatAdIDHash UInt64, OpenstatSourceIDHash UInt64, UTMSourceHash UInt64, UTMMediumHash UInt64, UTMCampaignHash UInt64, UTMContentHash UInt64, UTMTermHash UInt64, FromHash UInt64, WebVisorEnabled UInt8, WebVisorActivity UInt32, `ParsedParams.Key1` Array(String), `ParsedParams.Key2` Array(String), `ParsedParams.Key3` Array(String), `ParsedParams.Key4` Array(String), `ParsedParams.Key5` Array(String), `ParsedParams.ValueDouble` Array(Float64), `Market.Type` Array(UInt8), `Market.GoalID` Array(UInt32), `Market.OrderID` Array(String), `Market.OrderPrice` Array(Int64), `Market.PP` Array(UInt32), `Market.DirectPlaceID` Array(UInt32), `Market.DirectOrderID` Array(UInt32), `Market.DirectBannerID` Array(UInt32), `Market.GoodID` Array(String), `Market.GoodName` Array(String), `Market.GoodQuantity` Array(Int32), `Market.GoodPrice` Array(Int64), IslandID FixedString(16)) ENGINE = CollapsingMergeTree(Sign) PARTITION BY toYYYYMM(StartDate) SAMPLE BY intHash32(UserID) ORDER BY (CounterID, StartDate, intHash32(UserID), VisitID); +``` - -CREATE TABLE test.visits ( CounterID UInt32, StartDate Date, Sign Int8, IsNew UInt8, VisitID UInt64, UserID UInt64, StartTime DateTime, Duration UInt32, UTCStartTime DateTime, PageViews Int32, Hits Int32, IsBounce UInt8, Referer String, StartURL String, RefererDomain String, StartURLDomain String, EndURL String, LinkURL String, IsDownload UInt8, TraficSourceID Int8, SearchEngineID UInt16, SearchPhrase String, AdvEngineID UInt8, PlaceID Int32, RefererCategories Array(UInt16), URLCategories Array(UInt16), URLRegions Array(UInt32), RefererRegions Array(UInt32), IsYandex UInt8, GoalReachesDepth Int32, GoalReachesURL Int32, GoalReachesAny Int32, SocialSourceNetworkID UInt8, SocialSourcePage String, MobilePhoneModel String, ClientEventTime DateTime, RegionID UInt32, ClientIP UInt32, ClientIP6 FixedString(16), RemoteIP UInt32, RemoteIP6 FixedString(16), IPNetworkID UInt32, SilverlightVersion3 UInt32, CodeVersion UInt32, ResolutionWidth UInt16, ResolutionHeight UInt16, UserAgentMajor UInt16, UserAgentMinor UInt16, WindowClientWidth UInt16, WindowClientHeight UInt16, SilverlightVersion2 UInt8, SilverlightVersion4 UInt16, FlashVersion3 UInt16, FlashVersion4 UInt16, ClientTimeZone Int16, OS UInt8, UserAgent UInt8, ResolutionDepth UInt8, FlashMajor UInt8, FlashMinor UInt8, NetMajor UInt8, NetMinor UInt8, MobilePhone UInt8, SilverlightVersion1 UInt8, Age UInt8, Sex UInt8, Income UInt8, JavaEnable UInt8, CookieEnable UInt8, JavascriptEnable UInt8, IsMobile UInt8, BrowserLanguage UInt16, BrowserCountry UInt16, Interests UInt16, Robotness UInt8, GeneralInterests Array(UInt16), Params Array(String), `Goals.ID` Array(UInt32), `Goals.Serial` Array(UInt32), `Goals.EventTime` Array(DateTime), `Goals.Price` Array(Int64), `Goals.OrderID` Array(String), `Goals.CurrencyID` Array(UInt32), WatchIDs Array(UInt64), ParamSumPrice Int64, ParamCurrency FixedString(3), ParamCurrencyID UInt16, ClickLogID UInt64, ClickEventID Int32, ClickGoodEvent Int32, ClickEventTime DateTime, ClickPriorityID Int32, ClickPhraseID Int32, ClickPageID Int32, ClickPlaceID Int32, ClickTypeID Int32, ClickResourceID Int32, ClickCost UInt32, ClickClientIP UInt32, ClickDomainID UInt32, ClickURL String, ClickAttempt UInt8, ClickOrderID UInt32, ClickBannerID UInt32, ClickMarketCategoryID UInt32, ClickMarketPP UInt32, ClickMarketCategoryName String, ClickMarketPPName String, ClickAWAPSCampaignName String, ClickPageName String, ClickTargetType UInt16, ClickTargetPhraseID UInt64, ClickContextType UInt8, ClickSelectType Int8, ClickOptions String, ClickGroupBannerID Int32, OpenstatServiceName String, OpenstatCampaignID String, OpenstatAdID String, OpenstatSourceID String, UTMSource String, UTMMedium String, UTMCampaign String, UTMContent String, UTMTerm String, FromTag String, HasGCLID UInt8, FirstVisit DateTime, PredLastVisit Date, LastVisit Date, TotalVisits UInt32, `TraficSource.ID` Array(Int8), `TraficSource.SearchEngineID` Array(UInt16), `TraficSource.AdvEngineID` Array(UInt8), `TraficSource.PlaceID` Array(UInt16), `TraficSource.SocialSourceNetworkID` Array(UInt8), `TraficSource.Domain` Array(String), `TraficSource.SearchPhrase` Array(String), `TraficSource.SocialSourcePage` Array(String), Attendance FixedString(16), CLID UInt32, YCLID UInt64, NormalizedRefererHash UInt64, SearchPhraseHash UInt64, RefererDomainHash UInt64, NormalizedStartURLHash UInt64, StartURLDomainHash UInt64, NormalizedEndURLHash UInt64, TopLevelDomain UInt64, URLScheme UInt64, OpenstatServiceNameHash UInt64, OpenstatCampaignIDHash UInt64, OpenstatAdIDHash UInt64, OpenstatSourceIDHash UInt64, UTMSourceHash UInt64, UTMMediumHash UInt64, UTMCampaignHash UInt64, UTMContentHash UInt64, UTMTermHash UInt64, FromHash UInt64, WebVisorEnabled UInt8, WebVisorActivity UInt32, `ParsedParams.Key1` Array(String), `ParsedParams.Key2` Array(String), `ParsedParams.Key3` Array(String), `ParsedParams.Key4` Array(String), `ParsedParams.Key5` Array(String), `ParsedParams.ValueDouble` Array(Float64), `Market.Type` Array(UInt8), `Market.GoalID` Array(UInt32), `Market.OrderID` Array(String), `Market.OrderPrice` Array(Int64), `Market.PP` Array(UInt32), `Market.DirectPlaceID` Array(UInt32), `Market.DirectOrderID` Array(UInt32), `Market.DirectBannerID` Array(UInt32), `Market.GoodID` Array(String), `Market.GoodName` Array(String), `Market.GoodQuantity` Array(Int32), `Market.GoodPrice` Array(Int64), IslandID FixedString(16)) ENGINE = CollapsingMergeTree(Sign) PARTITION BY toYYYYMM(StartDate) SAMPLE BY intHash32(UserID) ORDER BY (CounterID, StartDate, intHash32(UserID), VisitID); - -```` - -导入数据: +导入数据: ```bash clickhouse-client --max_insert_block_size 100000 --query "INSERT INTO test.hits FORMAT TSV" < hits_v1.tsv clickhouse-client --max_insert_block_size 100000 --query "INSERT INTO test.visits FORMAT TSV" < visits_v1.tsv -```` +``` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/development/index.md b/i18n/zh/docusaurus-plugin-content-docs/current/development/index.md index 6d821704281..ceeac3ff323 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/development/index.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/development/index.md @@ -1,39 +1,19 @@ --- -description: '开发与贡献索引页' +description: "开发与贡献索引页" slug: /development/ -title: '开发与贡献' -doc_type: 'landing-page' +title: "开发与贡献" +doc_type: "landing-page" --- -在本节文档中,您将找到以下页面: +本节文档包含以下页面: -{/* 下面的目录是由如下脚本根据 YAML - front matter 字段:title、description、slug 自动生成的: + -{/*AUTOGENERATED_START*/ } - -| Page | Description | -| ------------------------------------------------------------------------------------------- | ----------------------------------------------- | -| [Developer Prerequisites](/development/developer-instruction) | ClickHouse 开发的前提条件和环境配置说明 | -| [How to Build ClickHouse on Linux](/development/build) | 在 Linux 系统上从源码构建 ClickHouse 的分步指南 | -| [Build on macOS for macOS](/development/build-osx) | 在 macOS 系统上从源码构建 ClickHouse 的指南 | -| [Build on Linux for macOS](/development/build-cross-osx) | 在 Linux 上为 macOS 系统交叉编译 ClickHouse 的指南 | -| [How to Build ClickHouse on Linux for AARCH64](/development/build-cross-arm) | 在 Linux 上为 AARCH64 架构从源码构建 ClickHouse 的指南 | -| [How to Build ClickHouse on Linux for RISC-V 64](/development/build-cross-riscv) | 在 Linux 上为 RISC-V 64 架构从源码构建 ClickHouse 的指南 | -| [Build on Linux for s390x (zLinux)](/development/build-cross-s390x) | 在 Linux 上为 s390x 架构从源码构建 ClickHouse 的指南 | -| [Build on Linux for E2K](/development/build-e2k) | 在 Linux 上为 E2K 架构从源码构建 ClickHouse 的指南 | -| [Build on Linux for LoongArch64](/development/build-cross-loongarch) | 在 Linux 上为 LoongArch64 架构从源码构建 ClickHouse 的指南 | -| [Testing ClickHouse](/development/tests) | 关于测试 ClickHouse 并运行测试套件的指南 | -| [Architecture Overview](/development/architecture) | 对 ClickHouse 架构及其列式设计的全面概述 | -| [Continuous Integration (CI)](/development/continuous-integration) | ClickHouse 持续集成系统概览 | -| [Third-Party Libraries](/development/contrib) | 介绍 ClickHouse 第三方库使用方式以及如何添加和维护第三方库的页面 | -| [C++ Style Guide](/development/style) | ClickHouse C++ 开发的代码风格规范 | -| [Build Clickhouse with DEFLATE_QPL](/development/building_and_benchmarking_deflate_qpl) | 使用 DEFLATE_QPL 编解码器构建 ClickHouse 并运行基准测试的指南 | -| [Integrating Rust Libraries](/development/integrating_rust_libraries) | 将 Rust 库集成到 ClickHouse 的指南 | - -{/*AUTOGENERATED_END*/ } + + diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/database-engines/index.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/database-engines/index.md index 633141dd6ab..203baedcc9a 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/database-engines/index.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/database-engines/index.md @@ -12,30 +12,16 @@ doc_type: 'landing-page' # 数据库引擎 -数据库引擎用于操作表。默认情况下,ClickHouse 使用 [Atomic](../../engines/database-engines/atomic.md) 数据库引擎,它提供可配置的[表引擎](../../engines/table-engines/index.md)以及一种 [SQL 方言](../../sql-reference/syntax.md)。 +数据库引擎允许您使用表。默认情况下,ClickHouse 使用 [Atomic](../../engines/database-engines/atomic.md) 数据库引擎,该引擎提供可配置的[表引擎](../../engines/table-engines/index.md)和 [SQL 方言](../../sql-reference/syntax.md)。 -下面是可用数据库引擎的完整列表。请通过以下链接了解更多详细信息: +以下是可用数据库引擎的完整列表。点击链接了解更多详情: -{/* 本页面的目录由以下脚本自动生成: - https://github.com/ClickHouse/clickhouse-docs/blob/main/scripts/autogenerate-table-of-contents.sh - 基于 YAML front matter 字段:slug、description、title。 + -{/*AUTOGENERATED_START*/ } - -| 页面 | 描述 | -| --------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | -| [Shared](/engines/database-engines/shared) | 介绍 `Shared` 数据库引擎的页面,该引擎在 ClickHouse Cloud 中可用。 | -| [Atomic](/engines/database-engines/atomic) | `Atomic` 引擎支持非阻塞的 `DROP TABLE` 和 `RENAME TABLE` 查询,以及原子性的 `EXCHANGE TABLES` 查询。默认使用 `Atomic` 数据库引擎。 | -| [Lazy](/engines/database-engines/lazy) | 在最后一次访问后的 `expiration_time_in_seconds` 秒内,仅在内存(RAM)中保留这些表。只能用于 Log 类型表。 | -| [Replicated](/engines/database-engines/replicated) | 该引擎基于 Atomic 引擎构建。它通过将 DDL 日志写入 ZooKeeper,并在给定数据库的所有副本上执行,从而支持元数据复制。 | -| [PostgreSQL](/engines/database-engines/postgresql) | 允许连接到远程 PostgreSQL 服务器上的数据库。 | -| [MySQL](/engines/database-engines/mysql) | 允许连接到远程 MySQL 服务器上的数据库,并执行 `INSERT` 和 `SELECT` 查询,以在 ClickHouse 和 MySQL 之间交换数据。 | -| [SQLite](/engines/database-engines/sqlite) | 允许连接到 SQLite 数据库,并执行 `INSERT` 和 `SELECT` 查询,以在 ClickHouse 和 SQLite 之间交换数据。 | -| [MaterializedPostgreSQL](/engines/database-engines/materialized-postgresql) | 基于 PostgreSQL 数据库中的表创建一个 ClickHouse 数据库。 | -| [Backup](/engines/database-engines/backup) | 允许以只读模式从备份中立即挂载表或数据库。 | -| [DataLakeCatalog](/engines/database-engines/datalakecatalog) | DataLakeCatalog 数据库引擎使您能够将 ClickHouse 连接到外部数据目录,并查询开放表格式的数据。 | - -{/*AUTOGENERATED_END*/ } + + diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/database-engines/mysql.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/database-engines/mysql.md index ce1316cb981..d55d44db4a9 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/database-engines/mysql.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/database-engines/mysql.md @@ -1,6 +1,5 @@ --- -description: '允许连接到远程 MySQL 服务器上的数据库,并执行 - `INSERT` 和 `SELECT` 查询,用于在 ClickHouse 与 MySQL 之间交换数据。' +description: '用于连接到远程 MySQL 服务器上的数据库,并执行 `INSERT` 和 `SELECT` 查询,以在 ClickHouse 与 MySQL 之间交换数据。' sidebar_label: 'MySQL' sidebar_position: 50 slug: /engines/database-engines/mysql @@ -15,9 +14,9 @@ import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -用于连接远程 MySQL 服务器上的数据库,并执行 `INSERT` 和 `SELECT` 查询,在 ClickHouse 和 MySQL 之间交换数据。 +用于连接远程 MySQL 服务器上的数据库,并执行 `INSERT` 和 `SELECT` 查询,以在 ClickHouse 和 MySQL 之间交换数据。 -`MySQL` 数据库引擎会将查询转换后发送到 MySQL 服务器,因此可以执行诸如 `SHOW TABLES` 或 `SHOW CREATE TABLE` 等操作。 +`MySQL` 数据库引擎会将查询转换并转发到 MySQL 服务器,因此可以执行诸如 `SHOW TABLES` 或 `SHOW CREATE TABLE` 之类的操作。 无法执行以下查询: @@ -60,7 +59,7 @@ ENGINE = MySQL('host:port', ['database' | database], 'user', 'password') | DATETIME, TIMESTAMP | [DateTime](../../sql-reference/data-types/datetime.md) | | BINARY | [FixedString](../../sql-reference/data-types/fixedstring.md) | -所有其他 MySQL 数据类型都转换为 [String](../../sql-reference/data-types/string.md)。 +所有其他 MySQL 数据类型将被转换为 [String](../../sql-reference/data-types/string.md)。 支持 [Nullable](../../sql-reference/data-types/nullable.md)。 @@ -68,15 +67,15 @@ ENGINE = MySQL('host:port', ['database' | database], 'user', 'password') ## 全局变量支持 -为提高兼容性,可以使用 MySQL 风格来引用全局变量,即 `@@identifier`。 +为了获得更好的兼容性,可以使用 MySQL 风格来访问全局变量,即 `@@identifier`。 -当前支持以下变量: +当前支持的变量如下: * `version` * `max_allowed_packet` :::note -目前这些变量只是占位符,并未实际对应到任何内容。 +目前这些变量只是占位符,并不对应任何实际设置。 ::: 示例: @@ -92,16 +91,16 @@ SELECT @@version; ```text mysql> USE test; -数据库已更改 +数据库已切换 mysql> CREATE TABLE `mysql_table` ( -> `int_id` INT NOT NULL AUTO_INCREMENT, -> `float` FLOAT NOT NULL, -> PRIMARY KEY (`int_id`)); -查询成功,影响了 0 行 (0,09 秒) +查询成功,0 行受影响 (0,09 秒) mysql> insert into mysql_table (`int_id`, `float`) VALUES (1,2); -查询成功,影响了 1 行 (0,00 秒) +查询成功,1 行受影响 (0,00 秒) mysql> select * from mysql_table; +------+-----+ @@ -109,10 +108,10 @@ mysql> select * from mysql_table; +------+-----+ | 1 | 2 | +------+-----+ -结果集中有 1 行 (0,00 秒) +1 行结果集 (0,00 秒) ``` -位于 ClickHouse 中、与 MySQL 服务器进行数据交换的数据库: +位于 ClickHouse 中的数据库,与 MySQL 服务器进行数据交换: ```sql CREATE DATABASE mysql_db ENGINE = MySQL('localhost:3306', 'test', 'my_user', 'user_password') SETTINGS read_write_timeout=10000, connect_timeout=100; diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/azure-queue.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/azure-queue.md index 803385122f6..aa3c49a4ad9 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/azure-queue.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/azure-queue.md @@ -1,5 +1,5 @@ --- -description: '该引擎提供与 Azure Blob Storage 生态系统的集成,支持流式数据导入。' +description: '此引擎提供与 Azure Blob Storage 生态系统的集成,支持流式数据导入。' sidebar_label: 'AzureQueue' sidebar_position: 181 slug: /engines/table-engines/integrations/azure-queue @@ -7,15 +7,11 @@ title: 'AzureQueue 表引擎' doc_type: 'reference' --- - - # AzureQueue 表引擎 -此引擎提供与 [Azure Blob Storage](https://azure.microsoft.com/en-us/products/storage/blobs) 生态系统的集成,支持流式数据导入。 - - +该引擎实现了与 [Azure Blob Storage](https://azure.microsoft.com/en-us/products/storage/blobs) 生态系统的集成,支持以流式方式导入数据。 -## 创建表 {#creating-a-table} +## 创建表 ```sql CREATE TABLE test (name String, value UInt32) @@ -29,9 +25,9 @@ CREATE TABLE test (name String, value UInt32) **引擎参数** -`AzureQueue` 的参数与 `AzureBlobStorage` 表引擎支持的参数相同。参数说明请参见[此处](../../../engines/table-engines/integrations/azureBlobStorage.md)。 +`AzureQueue` 的参数与 `AzureBlobStorage` 表引擎支持的参数相同。请参阅[此处](../../../engines/table-engines/integrations/azureBlobStorage.md)中的参数部分。 -与 [AzureBlobStorage](/engines/table-engines/integrations/azureBlobStorage) 表引擎类似,用户可以使用 Azurite 模拟器进行本地 Azure Storage 开发。更多详细信息请参见[此处](https://learn.microsoft.com/en-us/azure/storage/common/storage-use-azurite?tabs=docker-hub%2Cblob-storage)。 +与 [AzureBlobStorage](/engines/table-engines/integrations/azureBlobStorage) 表引擎类似,用户可以使用 Azurite 模拟器在本地进行 Azure Storage 开发。更多详细信息请参见[此处](https://learn.microsoft.com/en-us/azure/storage/common/storage-use-azurite?tabs=docker-hub%2Cblob-storage)。 **示例** @@ -46,23 +42,61 @@ SETTINGS mode = 'unordered' ``` -## 设置 {#settings} +## Settings \{#settings\} + +支持的设置大多与 `S3Queue` 表引擎相同,只是没有 `s3queue_` 前缀。参见[完整的设置列表](../../../engines/table-engines/integrations/s3queue.md#settings)。 +要获取为该表配置的设置列表,请使用 `system.azure_queue_settings` 表。从 `24.10` 版本起可用。 + +下面是仅与 AzureQueue 兼容且不适用于 S3Queue 的设置。 + +### `after_processing_move_connection_string` \{#after_processing_move_connection_string\} + +当目标是另一个 Azure 容器时,用于将已成功处理的文件移动到该容器的 Azure Blob Storage 连接字符串。 + +可能的取值: + +- 字符串。 + +默认值:空字符串。 + +### `after_processing_move_container` + +当目标是另一个 Azure 容器时,用于指定成功处理后文件要移动到的容器名称。 -支持的设置集与 `S3Queue` 表引擎相同,但不带 `s3queue_` 前缀。请参阅[完整设置列表](../../../engines/table-engines/integrations/s3queue.md#settings)。 -要获取表的配置设置列表,请使用 `system.azure_queue_settings` 表。此功能从 `24.10` 版本开始提供。 +可能的取值: +* 字符串。 -## Description {#description} +默认值:空字符串。 -`SELECT` 对于流式导入并不特别有用(除了调试场景),因为每个文件只能导入一次。更实用的做法是使用[物化视图](../../../sql-reference/statements/create/view.md)创建实时处理流程。操作步骤如下: +示例: -1. 使用该引擎创建一个表,用于从 S3 指定路径消费数据,并将其视为数据流。 -2. 创建一个具有所需结构的目标表。 -3. 创建一个物化视图,将引擎中的数据进行转换并写入之前创建的表中。 +```sql +CREATE TABLE azure_queue_engine_table +( + `key` UInt64, + `data` String +) +ENGINE = AzureQueue('DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://azurite1:10000/devstoreaccount1/;', 'testcontainer', '*', 'CSV') +SETTINGS + mode = 'unordered', + after_processing = 'move', + after_processing_move_connection_string = 'DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://azurite1:10000/devstoreaccount1/;', + after_processing_move_container = 'dst-container'; +``` + + +## 描述 -当 `MATERIALIZED VIEW` 关联到引擎后,它会在后台开始收集数据。 +`SELECT` 对于流式导入并不是特别有用(除非用于调试),因为每个文件只能被导入一次。更实际的做法是使用[物化视图](../../../sql-reference/statements/create/view.md)来创建实时管道。为此: -示例: +1. 使用该引擎创建一个从 S3 中指定路径消费数据的表,并将其视为数据流。 +2. 创建一个具有所需结构的表。 +3. 创建一个物化视图,将数据从该引擎转换后写入先前创建的表中。 + +当 `MATERIALIZED VIEW` 与该引擎关联后,它会开始在后台收集数据。 + +示例: ```sql CREATE TABLE azure_queue_engine_table (key UInt64, data String) @@ -80,33 +114,32 @@ SELECT * FROM stats ORDER BY key; ``` -## 虚拟列 {#virtual-columns} +## 虚拟列 \{#virtual-columns\} -- `_path` — 文件的路径。 -- `_file` — 文件的名称。 +- `_path` — 文件路径。 +- `_file` — 文件名。 有关虚拟列的更多信息,请参阅[此处](../../../engines/table-engines/index.md#table_engines-virtual_columns)。 +## 自省 -## 内省 {#introspection} - -通过表设置 `enable_logging_to_queue_log=1` 为表启用日志记录。 +通过表设置 `enable_logging_to_queue_log=1` 为该表启用日志记录。 -内省功能与 [S3Queue 表引擎](/engines/table-engines/integrations/s3queue#introspection) 相同,但存在以下几个明显差异: +自省功能与 [S3Queue 表引擎](/engines/table-engines/integrations/s3queue#introspection) 相同,但有以下几个明显差异: -1. 对于服务器版本 >= 25.1,使用 `system.azure_queue` 查看队列的内存状态。对于旧版本,使用 `system.s3queue`(它也包含 `azure` 表的信息)。 -2. 通过 ClickHouse 主配置文件启用 `system.azure_queue_log`,例如: +1. 对于服务器版本 >= 25.1,使用 `system.azure_queue` 表示队列的内存状态。对于更早的版本,使用 `system.s3queue`(其中也会包含 `azure` 表的信息)。 +2. 在主 ClickHouse 配置中启用 `system.azure_queue_log`,例如: ```xml - - system -
azure_queue_log
- + + system + azure_queue_log
+
``` -此持久化表包含与 `system.s3queue` 相同的信息,但针对已处理和失败的文件。 +这个持久化表与 `system.s3queue` 表包含相同的信息,但记录的是已处理和失败的文件。 -该表具有以下结构: +该表具有以下结构: ```sql @@ -123,7 +156,7 @@ CREATE TABLE system.azure_queue_log `status` Enum8('Processed' = 0, 'Failed' = 1) COMMENT '文件处理状态', `processing_start_time` Nullable(DateTime) COMMENT '文件处理开始时间', `processing_end_time` Nullable(DateTime) COMMENT '文件处理结束时间', - `exception` String COMMENT '发生异常时的异常消息' + `exception` String COMMENT '异常消息(如有发生)' ) ENGINE = MergeTree PARTITION BY toYYYYMM(event_date) @@ -133,7 +166,7 @@ COMMENT '包含 S3Queue 引擎处理文件信息的日志条目。' ``` -示例: +示例: ```sql SELECT * @@ -141,7 +174,7 @@ FROM system.azure_queue_log LIMIT 1 FORMAT Vertical -Row 1: +第 1 行: ────── hostname: clickhouse event_date: 2024-12-16 @@ -156,6 +189,6 @@ processing_start_time: 2024-12-16 13:42:47 processing_end_time: 2024-12-16 13:42:47 exception: -1 row in set. Elapsed: 0.002 sec. +返回 1 行。用时:0.002 秒。 ``` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/index.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/index.md index 616ff87f55e..ecdf0c58ad4 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/index.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/index.md @@ -11,44 +11,14 @@ doc_type: 'reference' # 用于集成的表引擎 -ClickHouse 提供多种与外部系统集成的方式,其中包括表引擎。与所有其他表引擎一样,其配置是通过 `CREATE TABLE` 或 `ALTER TABLE` 语句完成的。随后,从用户的角度来看,已配置的集成与普通表无异,但对其发起的查询会被转发到外部系统。这种透明的查询特性是该方案相较于其他集成方法(如字典或表函数,需要在每次使用时采用自定义查询方式)的关键优势之一。 +ClickHouse 提供了多种与外部系统集成的方式,其中包括表引擎。与所有其他表引擎一样,配置通过 `CREATE TABLE` 或 `ALTER TABLE` 查询完成。从用户角度来看,配置好的集成看起来就像一个普通表,但对它的查询会被代理到外部系统。这种透明查询是该方法相比其他集成方法(如字典或表函数,每次使用时都需要使用自定义查询方法)的关键优势之一。 -{/* 本页的目录由以下脚本自动生成: - https://github.com/ClickHouse/clickhouse-docs/blob/main/scripts/autogenerate-table-of-contents.sh - 该脚本基于 YAML front matter 字段:slug、description、title。 + - -{/*AUTOGENERATED_START*/ } - -| 页面 | 描述 | -| ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | -| [AzureBlobStorage 表引擎](/engines/table-engines/integrations/azureBlobStorage) | 该引擎支持与 Azure Blob Storage 生态系统集成。 | -| [DeltaLake 表引擎](/engines/table-engines/integrations/deltalake) | 此引擎以只读方式集成位于 Amazon S3 上的现有 Delta Lake 表。 | -| [EmbeddedRocksDB 表引擎](/engines/table-engines/integrations/embedded-rocksdb) | 该引擎允许将 ClickHouse 与 RocksDB 集成 | -| [ExternalDistributed 表引擎](/engines/table-engines/integrations/ExternalDistributed) | `ExternalDistributed` 引擎允许对存储在远程 MySQL 或 PostgreSQL 服务器中的数据执行 `SELECT` 查询。它接收 MySQL 或 PostgreSQL 引擎作为参数,因此可以实现分片。 | -| [TimeSeries 表引擎](/engines/table-engines/special/time_series) | 用于存储时间序列的表引擎,即一组与时间戳和标签(或标记)关联的值。 | -| [HDFS 表引擎](/engines/table-engines/integrations/hdfs) | 该引擎支持通过 ClickHouse 管理 HDFS 上的数据,从而与 Apache Hadoop 生态系统集成。该引擎类似于 File 和 URL 引擎,但提供了 Hadoop 特有的功能。 | -| [Hive 表引擎](/engines/table-engines/integrations/hive) | Hive 引擎允许你对存储在 HDFS 上的 Hive 表执行 `SELECT` 查询。 | -| [Hudi 表引擎](/engines/table-engines/integrations/hudi) | 该引擎为位于 Amazon S3 中的现有 Apache Hudi 表提供只读集成。 | -| [Iceberg 表引擎](/engines/table-engines/integrations/iceberg) | 此引擎为现有的 Apache Iceberg 表提供只读集成,支持存储在 Amazon S3、Azure、HDFS 以及本地存储的表。 | -| [JDBC 表引擎](/engines/table-engines/integrations/jdbc) | 允许 ClickHouse 通过 JDBC 连接到外部数据库。 | -| [Kafka 表引擎](/engines/table-engines/integrations/kafka) | Kafka 表引擎可用于与 Apache Kafka 协同工作,并支持发布或订阅数据流、构建容错存储,以及在数据流可用时对其进行处理。 | -| [MaterializedPostgreSQL 表引擎](/engines/table-engines/integrations/materialized-postgresql) | 根据 PostgreSQL 表的初始数据转储创建一个 ClickHouse 表,并启动复制流程。 | -| [MongoDB 表引擎](/engines/table-engines/integrations/mongodb) | MongoDB 引擎是一种只读表引擎,可用于从远程集合中读取数据。 | -| [MySQL 表引擎](/engines/table-engines/integrations/mysql) | MySQL 表引擎文档 | -| [NATS 表引擎](/engines/table-engines/integrations/nats) | 此引擎可将 ClickHouse 与 NATS 集成,用于发布或订阅消息主题,并在有新消息时对其进行处理。 | -| [ODBC 表引擎](/engines/table-engines/integrations/odbc) | 使 ClickHouse 能够通过 ODBC 连接到外部数据库。 | -| [PostgreSQL 表引擎](/engines/table-engines/integrations/postgresql) | PostgreSQL 引擎允许对存储在远程 PostgreSQL 服务器上的数据进行 `SELECT` 和 `INSERT` 操作。 | -| [RabbitMQ 表引擎](/engines/table-engines/integrations/rabbitmq) | 该引擎支持将 ClickHouse 与 RabbitMQ 集成。 | -| [Redis 表引擎](/engines/table-engines/integrations/redis) | 该引擎允许将 ClickHouse 与 Redis 集成。 | -| [S3 表引擎](/engines/table-engines/integrations/s3) | 此引擎提供与 Amazon S3 生态系统的集成。类似于 HDFS 引擎,但提供 S3 特有的功能。 | -| [S3Queue 表引擎](/engines/table-engines/integrations/s3queue) | 该引擎提供与 Amazon S3 生态系统的集成,并支持流式导入。类似于 Kafka 和 RabbitMQ 引擎,但提供 S3 特有的功能。 | -| [AzureQueue 表引擎](/engines/table-engines/integrations/azure-queue) | 该引擎实现了与 Azure Blob Storage 生态系统的集成,从而支持流式数据导入。 | -| [YTsaurus 表引擎](/engines/table-engines/integrations/ytsaurus) | 一种表引擎,可从 YTsaurus 集群导入数据。 | -| [SQLite 表引擎](/engines/table-engines/integrations/sqlite) | 该引擎支持向 SQLite 导入数据、从 SQLite 导出数据,并支持在 ClickHouse 中直接查询 SQLite 表。 | -| [ArrowFlight 表引擎](/engines/table-engines/integrations/arrowflight) | 该引擎支持通过 Apache Arrow Flight 对远程数据集进行查询。 | - -{/*AUTOGENERATED_END*/ } + + diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/s3queue.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/s3queue.md index 569aa8e8a23..ab3ca4b354e 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/s3queue.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/s3queue.md @@ -1,5 +1,5 @@ --- -description: '此引擎提供与 Amazon S3 生态系统的集成,并支持流式导入。类似于 Kafka 和 RabbitMQ 引擎,但提供 S3 专有功能。' +description: '此引擎提供与 Amazon S3 生态系统的集成,并支持流式导入。类似于 Kafka 和 RabbitMQ 引擎,但提供 S3 专属特性。' sidebar_label: 'S3Queue' sidebar_position: 181 slug: /engines/table-engines/integrations/s3queue @@ -12,13 +12,11 @@ import ScalePlanFeatureBadge from '@theme/badges/ScalePlanFeatureBadge' # S3Queue 表引擎 -该引擎提供与 [Amazon S3](https://aws.amazon.com/s3/) 生态系统的集成能力,并支持流式导入。此引擎类似于 [Kafka](../../../engines/table-engines/integrations/kafka.md)、[RabbitMQ](../../../engines/table-engines/integrations/rabbitmq.md) 等表引擎,但提供了特定于 S3 的功能。 +该引擎提供与 [Amazon S3](https://aws.amazon.com/s3/) 生态系统的集成,并支持流式导入。该引擎类似于 [Kafka](../../../engines/table-engines/integrations/kafka.md)、[RabbitMQ](../../../engines/table-engines/integrations/rabbitmq.md) 引擎,但提供了 S3 特有的功能。 -需要注意 [S3Queue 实现的原始 PR](https://github.com/ClickHouse/ClickHouse/pull/49086/files#diff-e1106769c9c8fbe48dd84f18310ef1a250f2c248800fde97586b3104e9cd6af8R183) 中的这条说明:当 `MATERIALIZED VIEW` 与该引擎建立关联后,S3Queue 表引擎会在后台开始收集数据。 +需要特别注意 [S3Queue 实现的原始 PR](https://github.com/ClickHouse/ClickHouse/pull/49086/files#diff-e1106769c9c8fbe48dd84f18310ef1a250f2c248800fde97586b3104e9cd6af8R183) 中的这一说明:当有 `MATERIALIZED VIEW` 关联到该引擎时,S3Queue 表引擎会在后台开始收集数据。 - - -## 创建表 {#creating-a-table} +## 创建表 ```sql CREATE TABLE s3_queue_engine_table (name String, value UInt32) @@ -49,12 +47,12 @@ CREATE TABLE s3_queue_engine_table (name String, value UInt32) ``` :::warning -在 `24.7` 版本之前,除 `mode`、`after_processing` 和 `keeper_path` 外,所有设置都必须使用 `s3queue_` 前缀。 +在 `24.7` 版本之前,除 `mode`、`after_processing` 和 `keeper_path` 之外的所有配置项都必须使用 `s3queue_` 前缀。 ::: **引擎参数** -`S3Queue` 的参数与 `S3` 表引擎支持的参数相同。请参阅[此处](../../../engines/table-engines/integrations/s3.md#parameters)的参数部分。 +`S3Queue` 的参数与 `S3` 表引擎支持的参数相同。请参见[此处](../../../engines/table-engines/integrations/s3.md#parameters)的参数部分。 **示例** @@ -65,7 +63,7 @@ SETTINGS mode = 'unordered'; ``` -使用命名集合: +使用命名集合: ```xml @@ -87,163 +85,257 @@ SETTINGS ``` -## 设置 {#settings} +## 设置 \{#settings\} + +要获取为该表配置的设置列表,请查询 `system.s3_queue_settings` 系统表。自 `24.10` 版本起可用。 + +### Mode \{#mode\} + +可能的取值: + +- unordered — 在 `unordered` 模式下,所有已处理文件的集合会通过 ZooKeeper 中的持久节点进行跟踪和持久化。 +- ordered — 在 `ordered` 模式下,文件按照字典序进行处理。这意味着如果名为 `BBB` 的文件在某个时间点被处理了,之后又向 bucket 中添加了名为 `AA` 的文件,那么该文件将被忽略。ZooKeeper 中只会存储已成功消费文件中的最大文件名(按字典序),以及那些在加载失败后需要重试的文件名。 + +默认值:在 24.6 之前的版本中默认为 `ordered`。从 24.6 开始不再提供默认值,该设置必须手动指定。对于在更早版本中创建的表,为了兼容性其默认值仍为 `Ordered`。 + +### `after_processing` + +如何在文件成功处理后进行后续操作。 + +可能的取值: + +* keep。 +* delete。 +* move。 +* tag。 + +默认值:`keep`。 + +`move` 需要额外配置。若在同一 bucket 内移动,必须通过 `after_processing_move_prefix` 提供新的路径前缀。 + +移动到另一个 S3 bucket 时,需要通过 `after_processing_move_uri` 提供目标 bucket 的 URI,并通过 `after_processing_move_access_key_id` 和 `after_processing_move_secret_access_key` 提供 S3 凭证。 + +示例: + +```sql +CREATE TABLE s3queue_engine_table (name String, value UInt32) +ENGINE=S3Queue('https://clickhouse-public-datasets.s3.amazonaws.com/my-test-bucket-768/*', 'CSV', 'gzip') +SETTINGS + mode = 'unordered', + after_processing = 'move', + after_processing_retries = 20, + after_processing_move_prefix = 'dst_prefix', + after_processing_move_uri = 'https://clickhouse-public-datasets.s3.amazonaws.com/dst-bucket', + after_processing_move_access_key_id = 'test', + after_processing_move_secret_access_key = 'test'; +``` + +从一个 Azure 容器移动到另一个 Azure 容器时,需要提供 Blob Storage 连接字符串作为 `after_processing_move_connection_string`,以及容器名称作为 `after_processing_move_container`。参见 [AzureQueue 设置](../../../engines/table-engines/integrations/azure-queue.md#settings)。 + +标记操作需要提供标签键和值,分别通过 `after_processing_tag_key` 和 `after_processing_tag_value` 配置。 + -要获取表的配置设置列表,请使用 `system.s3_queue_settings` 表。从 `24.10` 版本开始可用。 +### `after_processing_retries` \{#after_processing_retries\} -### 模式 {#mode} +在放弃之前,对所请求的后处理操作进行重试的次数。 -可能的值: +可能的取值: -- unordered — 在无序模式下,所有已处理文件的集合通过 ZooKeeper 中的持久节点进行跟踪。 -- ordered — 在有序模式下,文件按字典序处理。这意味着如果名为 'BBB' 的文件在某个时刻被处理,之后又向存储桶添加了名为 'AA' 的文件,该文件将被忽略。ZooKeeper 中仅存储成功消费文件的最大名称(按字典序)以及加载失败后将重试的文件名称。 +- 非负整数。 -默认值:在 24.6 之前的版本中为 `ordered`。从 24.6 开始没有默认值,该设置需要手动指定。对于在早期版本上创建的表,为保持兼容性,默认值将保持为 `Ordered`。 +默认值:`10`。 -### `after_processing` {#after_processing} +### `after_processing_move_access_key_id` \{#after_processing_move_access_key_id\} -成功处理后删除或保留文件。 -可能的值: +如果目标是另一个 S3 bucket,则该选项为将成功处理的文件移动到目标 S3 bucket 所使用的 Access Key ID。 -- keep。 -- delete。 +可能的取值: -默认值:`keep`。 +- 字符串。 + +默认值:空字符串。 -### `keeper_path` {#keeper_path} +### `after_processing_move_prefix` \{#after_processing_move_prefix\} -ZooKeeper 中的路径可以指定为表引擎设置,或者可以从全局配置提供的路径和表 UUID 组成默认路径。 -可能的值: +成功处理后用于存放文件的路径前缀。适用于两种情况:在同一 bucket 内移动文件,或移动到另一个 bucket。 + +可能的值: - 字符串。 -默认值:`/`。 +默认值:空字符串。 -### `s3queue_loading_retries` {#loading_retries} +### `after_processing_move_secret_access_key` \{#after_processing_move_secret_access_key\} -重试文件加载最多指定次数。默认情况下不进行重试。 -可能的值: +当目标是另一个 S3 bucket 时,用于将成功处理的文件移动到该目标 bucket 的 Secret Access Key。 -- 正整数。 +可能的取值: -默认值:`0`。 +- 字符串。 -### `s3queue_processing_threads_num` {#processing_threads_num} +默认值:空字符串。 -执行处理的线程数。仅适用于 `Unordered` 模式。 +### `after_processing_move_uri` \{#after_processing_move_uri\} -默认值:CPU 数量或 16。 +当目标是另一个 S3 bucket 时,用于存放已成功处理文件的 S3 bucket 的 URI。 -### `s3queue_parallel_inserts` {#parallel_inserts} +可能的取值: -默认情况下,`processing_threads_num` 将产生一个 `INSERT`,因此它只会在多个线程中下载文件和解析。 -但这限制了并行性,因此为了获得更好的吞吐量,请使用 `parallel_inserts=true`,这将允许并行插入数据(但请注意,这将导致 MergeTree 系列生成更多的数据部分)。 +- 字符串。 -:::note -`INSERT` 将根据 `max_process*_before_commit` 设置生成。 -::: +默认值:空字符串。 -默认值:`false`。 +### `after_processing_tag_key` \{#after_processing_tag_key\} -### `s3queue_enable_logging_to_s3queue_log` {#enable_logging_to_s3queue_log} +当 `after_processing='tag'` 时,用于给成功处理的文件打标签的标签键。 -启用记录到 `system.s3queue_log`。 +可能的取值: -默认值:`0`。 +- 字符串。 + +默认值:空字符串。 + +### `after_processing_tag_value` \{#after_processing_tag_value\} + +当 `after_processing='tag'` 时,为成功处理的文件设置标签时使用的标签值。 + +可能的取值: + +- 字符串。 + +默认值:空字符串。 -### `s3queue_polling_min_timeout_ms` {#polling_min_timeout_ms} +### `keeper_path` \{#keeper_path\} -指定 ClickHouse 在进行下一次轮询尝试之前等待的最短时间(以毫秒为单位)。 +ZooKeeper 中的路径可以通过表引擎设置单独指定;如果未指定,则默认路径由全局配置中提供的路径和表的 UUID 组成。 +可能的取值: -可能的值: +- 字符串。 + +默认值:`/`。 + +### `s3queue_loading_retries` \{#loading_retries\} + +文件加载最多重试指定的次数。默认情况下,不进行重试。 +可能的取值: - 正整数。 -默认值:`1000`。 +默认值:`0`。 + +### `s3queue_processing_threads_num` \{#processing_threads_num\} + +用于执行处理的线程数。仅适用于 `Unordered` 模式。 + +默认值:CPU 数量或 16。 + +### `s3queue_parallel_inserts` \{#parallel_inserts\} -### `s3queue_polling_max_timeout_ms` {#polling_max_timeout_ms} +默认情况下,`processing_threads_num` 只会产生一个 `INSERT`,因此只是以多线程方式下载文件并进行解析。 +但这会限制并行度,因此为获得更高吞吐量,应使用 `parallel_inserts=true`,这将允许并行插入数据(但请注意,这会导致为 MergeTree 系列表引擎生成更多数据片段)。 -定义 ClickHouse 在启动下一次轮询尝试之前等待的最长时间(以毫秒为单位)。 +:::note +`INSERT` 的触发会受 `max_process*_before_commit` 相关设置约束。 +::: + +默认值:`false`。 + +### `s3queue_enable_logging_to_s3queue_log` \{#enable_logging_to_s3queue_log\} + +启用将日志记录写入 `system.s3queue_log`。 + +默认值:`0`。 + +### `s3queue_polling_min_timeout_ms` \{#polling_min_timeout_ms\} + +指定 ClickHouse 在进行下一次轮询尝试之前等待的最短时间(以毫秒为单位)。 -可能的值: +可能的取值: - 正整数。 -默认值:`10000`。 +默认值:`1000`。 -### `s3queue_polling_backoff_ms` {#polling_backoff_ms} +### `s3queue_polling_max_timeout_ms` \{#polling_max_timeout_ms\} -确定当未找到新文件时添加到上一次轮询间隔的额外等待时间。下一次轮询在上一次间隔与此退避值之和或最大间隔(以较小者为准)之后发生。 +定义 ClickHouse 在发起下一次轮询尝试之前的最大等待时间(以毫秒为单位)。 -可能的值: +可能的取值: - 正整数。 -默认值:`0`。 +默认值:`10000`。 -### `s3queue_tracked_files_limit` {#tracked_files_limit} +### `s3queue_polling_backoff_ms` \{#polling_backoff_ms\} -如果使用 'unordered' 模式,允许限制 Zookeeper 节点的数量,对 'ordered' 模式不起作用。 -如果达到限制,最旧的已处理文件将从 ZooKeeper 节点中删除并再次处理。 +确定在未发现新文件时,需要加到上一次轮询间隔上的额外等待时间。下一次轮询会在上一次间隔与该退避值之和或最大间隔(取二者中较小值)之后触发。 -可能的值: +可能的取值: - 正整数。 -默认值:`1000`。 +默认值:`0`。 -### `s3queue_tracked_file_ttl_sec` {#tracked_file_ttl_sec} +### `s3queue_tracked_files_limit` \{#tracked_files_limit\} -在 ZooKeeper 节点中存储已处理文件的最大秒数(默认永久存储),适用于 'unordered' 模式,对 'ordered' 模式不起作用。 -在指定的秒数后,文件将被重新导入。 +在使用 `unordered` 模式时,用于限制 ZooKeeper 节点的数量,对 `ordered` 模式不起作用。 +一旦达到该限制,最早已处理的文件会从 ZooKeeper 节点中删除,并再次被处理。 -可能的值: +可能的取值: - 正整数。 -默认值:`0`。 +默认值:`1000`。 -### `s3queue_cleanup_interval_min_ms` {#cleanup_interval_min_ms} +### `s3queue_tracked_file_ttl_sec` \{#tracked_file_ttl_sec\} -适用于 'Ordered' 模式。定义后台任务重新调度间隔的最小边界,该任务负责维护跟踪文件的 TTL 和最大跟踪文件集。 +在“unordered”模式下,在 ZooKeeper 节点中保留已处理文件的最长时间(以秒为单位,默认永久保存)。对“ordered”模式无效。 +在经过指定秒数后,该文件会被重新导入。 -默认值:`10000`。 +可能的取值: -### `s3queue_cleanup_interval_max_ms` {#cleanup_interval_max_ms} +- 正整数。 + +默认值:`0`。 +### `s3queue_cleanup_interval_min_ms` \{#cleanup_interval_min_ms\} -用于 'Ordered' 模式。定义后台任务重新调度间隔的最大边界值,该任务负责维护已跟踪文件的 TTL 和最大跟踪文件集合。 +用于 `Ordered` 模式。定义负责维护已跟踪文件 TTL 和最大已跟踪文件集合的后台任务在重新调度间隔上的最小值。 -默认值:`30000`。 +默认值:`10000`。 -### `s3queue_buckets` {#buckets} +### `s3queue_cleanup_interval_max_ms` \{#cleanup_interval_max_ms\} -用于 'Ordered' 模式。自 `24.6` 版本起可用。如果存在多个 S3Queue 表副本,且每个副本都使用 keeper 中的同一元数据目录,则 `s3queue_buckets` 的值至少需要等于副本数量。如果同时使用了 `s3queue_processing_threads` 设置,则进一步增加 `s3queue_buckets` 设置的值是合理的,因为它定义了 `S3Queue` 处理的实际并行度。 +用于 “Ordered” 模式。定义重新调度后台任务的时间间隔的最大上限,该后台任务负责维护已跟踪文件的 TTL,以及已跟踪文件集合的最大大小。 -### `use_persistent_processing_nodes` {#use_persistent_processing_nodes} +默认值:`30000`。 -默认情况下,S3Queue 表始终使用临时处理节点,这可能导致数据重复,即当 zookeeper 会话在 S3Queue 开始处理之后但在 zookeeper 中提交已处理文件之前过期时。此设置强制服务器在 keeper 会话过期的情况下消除数据重复的可能性。 +### `s3queue_buckets` \{#buckets\} -### `persistent_processing_nodes_ttl_seconds` {#persistent_processing_nodes_ttl_seconds} +用于 Ordered 模式。从 `24.6` 版本开始可用。如果存在多个 S3Queue 表副本,并且它们都使用 Keeper 中相同的元数据目录,那么 `s3queue_buckets` 的值至少要等于副本数量。如果同时使用了 `s3queue_processing_threads` 设置,那么进一步增大 `s3queue_buckets` 的值是合理的,因为它决定了 `S3Queue` 处理的实际并行度。 -在服务器非正常终止的情况下,如果启用了 `use_persistent_processing_nodes`,可能会存在未删除的处理节点。此设置定义了可以安全清理这些处理节点的时间周期。 +### `use_persistent_processing_nodes` \{#use_persistent_processing_nodes\} -默认值:`3600`(1 小时)。 +默认情况下,S3Queue 表始终使用临时处理节点。如果在 S3Queue 将已处理文件提交到 ZooKeeper 之前、但在其开始处理之后,ZooKeeper 会话过期,就可能导致数据重复。此设置会强制服务器在 Keeper 会话过期的情况下消除产生重复数据的可能性。 +### `persistent_processing_nodes_ttl_seconds` \{#persistent_processing_nodes_ttl_seconds\} -## S3 相关设置 {#s3-settings} +在服务器异常终止的情况下,如果启用了 `use_persistent_processing_nodes`,就有可能出现尚未被移除的处理节点(processing nodes)。此设置用于定义一个时间段,在该时间段内,这些处理节点可以被安全清理。 -引擎支持所有 S3 相关设置。有关 S3 设置的更多信息,请参阅[此处](../../../engines/table-engines/integrations/s3.md)。 +默认值:`3600`(1 小时)。 +## 与 S3 相关的设置 \{#s3-settings\} -## S3 基于角色的访问 {#s3-role-based-access} +该引擎支持所有 S3 相关设置。有关 S3 设置的更多信息,请参阅[此处](../../../engines/table-engines/integrations/s3.md)。 - +## 基于角色的 S3 访问 -s3Queue 表引擎支持基于角色的访问。 -有关配置角色以访问存储桶的步骤,请参阅[此处](/cloud/data-sources/secure-s3)的文档。 + -配置角色后,可以通过 `extra_credentials` 参数传递 `roleARN`,如下所示: +`s3Queue` 表引擎支持基于角色的访问控制。 +请参阅[此处](/cloud/data-sources/secure-s3)的文档,了解如何配置用于访问您的 bucket 的角色。 + +角色配置完成后,可以通过 `extra_credentials` 参数传递一个 `roleARN`,如下所示: ```sql CREATE TABLE s3_table @@ -260,27 +352,27 @@ SETTINGS ``` -## S3Queue 有序模式 {#ordered-mode} +## S3Queue 有序模式 \{#ordered-mode\} -`S3Queue` 处理模式允许在 ZooKeeper 中存储更少的元数据,但存在一个限制:后续添加的文件必须具有按字母数字顺序更大的名称。 +`S3Queue` 处理模式可以在 ZooKeeper 中存储更少的元数据,但有一个限制:按时间更晚添加的文件,其名称在字母数字顺序上必须更大。 -`S3Queue` 的 `ordered` 模式与 `unordered` 模式一样,支持 `(s3queue_)processing_threads_num` 设置(`s3queue_` 前缀可选),用于控制服务器本地处理 `S3` 文件的线程数量。 -此外,`ordered` 模式还引入了另一个名为 `(s3queue_)buckets` 的设置,表示"逻辑线程"。在分布式场景中,当存在多个具有 `S3Queue` 表副本的服务器时,此设置定义处理单元的数量。例如,每个 `S3Queue` 副本上的每个处理线程都会尝试锁定某个 `bucket` 进行处理,每个 `bucket` 通过文件名的哈希值关联到特定文件。因此,在分布式场景中,强烈建议将 `(s3queue_)buckets` 设置为至少等于副本数量或更大。bucket 数量大于副本数量是允许的。最优配置是将 `(s3queue_)buckets` 设置为 `number_of_replicas` 与 `(s3queue_)processing_threads_num` 的乘积。 -不建议在 `24.6` 版本之前使用 `(s3queue_)processing_threads_num` 设置。 -`(s3queue_)buckets` 设置从 `24.6` 版本开始提供。 +`S3Queue` 的 `ordered` 模式与 `unordered` 模式一样,支持 `(s3queue_)processing_threads_num` 设置(`s3queue_` 前缀是可选的),用于控制在服务器本地处理 `S3` 文件的线程数量。 +此外,`ordered` 模式还引入了另一个名为 `(s3queue_)buckets` 的设置,表示“逻辑线程”。在分布式场景中,当存在多个带有 `S3Queue` 表副本的服务器时,该设置定义了处理单元的数量。比如,每个 `S3Queue` 副本上的每个处理线程都会尝试锁定某个用于处理的 `bucket`,每个 `bucket` 通过文件名的哈希与特定文件关联。因此,在分布式场景下,强烈建议将 `(s3queue_)buckets` 设置为至少等于副本数量或更大。`buckets` 数量大于副本数量是可以的。最优的情况是将 `(s3queue_)buckets` 设置为 `number_of_replicas` 与 `(s3queue_)processing_threads_num` 的乘积。 +不建议在 `24.6` 版本之前使用 `(s3queue_)processing_threads_num` 设置。 +`(s3queue_)buckets` 设置从 `24.6` 版本开始可用。 -## Description {#description} +## 描述 -`SELECT` 对于流式导入并不特别有用(除了调试场景),因为每个文件只能导入一次。更实用的做法是使用[物化视图](../../../sql-reference/statements/create/view.md)创建实时数据流。操作步骤如下: +`SELECT` 对于流式导入并不是特别有用(除调试外),因为每个文件只能被导入一次。更实用的做法是使用[物化视图](../../../sql-reference/statements/create/view.md)来创建实时数据流。为此: -1. 使用该引擎创建一个表,从 S3 指定路径消费数据,并将其视为数据流。 -2. 创建一个具有所需结构的表。 -3. 创建一个物化视图,将引擎中的数据转换后写入之前创建的表中。 +1. 使用该引擎创建一张表,从 S3 中指定的路径消费数据,并将其视为数据流。 +2. 创建一张具有所需结构的表。 +3. 创建一个物化视图,将来自该引擎的数据转换后写入事先创建好的表中。 -当 `MATERIALIZED VIEW` 关联到引擎后,它会在后台开始收集数据。 +当 `MATERIALIZED VIEW` 与该引擎关联后,它会在后台开始收集数据。 -示例: +示例: ```sql CREATE TABLE s3queue_engine_table (name String, value UInt32) @@ -298,47 +390,44 @@ SETTINGS ``` -## 虚拟列 {#virtual-columns} - -- `_path` — 文件的路径。 -- `_file` — 文件的名称。 -- `_size` — 文件的大小。 -- `_time` — 文件的创建时间。 +## 虚拟列 \{#virtual-columns\} -有关虚拟列的更多信息,请参阅[此处](../../../engines/table-engines/index.md#table_engines-virtual_columns)。 +- `_path` — 文件路径。 +- `_file` — 文件名。 +- `_size` — 文件大小。 +- `_time` — 文件创建时间。 +有关虚拟列的更多信息,请参阅[此处](../../../engines/table-engines/index.md#table_engines-virtual_columns)。 -## 路径中的通配符 {#wildcards-in-path} +## 路径中的通配符 \{#wildcards-in-path\} -`path` 参数可以使用类似 bash 的通配符来指定多个文件。待处理的文件必须存在且匹配完整的路径模式。文件列表在执行 `SELECT` 时确定(而非在 `CREATE` 时)。 +`path` 参数可以使用类似 bash 的通配符来指定多个文件。要参与处理,文件必须存在并且与整个路径模式完全匹配。文件列表在执行 `SELECT` 时确定(而不是在 `CREATE` 时)。 -- `*` — 匹配除 `/` 之外的任意数量字符,包括空字符串。 -- `**` — 匹配任意数量字符,包括 `/`,也包括空字符串。 +- `*` — 匹配除 `/` 之外的任意数量任意字符,包括空字符串。 +- `**` — 匹配包括 `/` 在内的任意数量任意字符,包括空字符串。 - `?` — 匹配任意单个字符。 -- `{some_string,another_string,yet_another_one}` — 匹配字符串 `'some_string'`、`'another_string'`、`'yet_another_one'` 中的任意一个。 -- `{N..M}` — 匹配从 N 到 M 范围内的任意数字,包括两端边界。N 和 M 可以包含前导零,例如 `000..078`。 +- `{some_string,another_string,yet_another_one}` — 匹配字符串 `'some_string'、'another_string'、'yet_another_one'` 中的任意一个。 +- `{N..M}` — 匹配从 N 到 M(包含两端)范围内的任意数字。N 和 M 可以有前导零,例如 `000..078`。 -使用 `{}` 的语法与 [remote](../../../sql-reference/table-functions/remote.md) 表函数类似。 +带有 `{}` 的结构类似于 [remote](../../../sql-reference/table-functions/remote.md) 表函数。 +## 限制 \{#limitations\} -## 限制 {#limitations} +1. 出现重复行可能是由于以下原因导致: -1. 重复行可能由以下原因导致: +- 在文件处理中途解析时发生异常,并且通过 `s3queue_loading_retries` 启用了重试; -- 在文件处理过程中解析时发生异常,且通过 `s3queue_loading_retries` 启用了重试; - -- `S3Queue` 在多个服务器上配置并指向 ZooKeeper 中的同一路径,且在某个服务器成功提交已处理文件之前 Keeper 会话过期,这可能导致另一个服务器接管该文件的处理,而该文件可能已被第一个服务器部分或完全处理;但是,从 25.8 版本开始,如果设置 `use_persistent_processing_nodes = 1`,则不会出现此情况。 +- 在多个服务器上配置了 `S3Queue`,它们在 zookeeper 中指向同一路径,并且在某个服务器成功提交已处理文件之前 Keeper 会话过期,这可能导致另一台服务器接手处理该文件,而该文件可能已被第一台服务器部分或全部处理;然而,自 25.8 版本起,如果 `use_persistent_processing_nodes = 1`,则不会出现此问题。 - 服务器异常终止。 -2. 如果 `S3Queue` 在多个服务器上配置并指向 ZooKeeper 中的同一路径,且使用 `Ordered` 模式,则 `s3queue_loading_retries` 将不起作用。此问题将很快修复。 - +2. 在多个服务器上配置了 `S3Queue` 且它们在 zookeeper 中指向同一路径,并使用 `Ordered` 模式时,`s3queue_loading_retries` 将不起作用。该问题很快将得到修复。 -## 内省 {#introspection} +## 自省 -用于内省可使用 `system.s3queue` 无状态表和 `system.s3queue_log` 持久化表。 +要进行自省,请使用无状态表 `system.s3queue` 和持久化表 `system.s3queue_log`。 -1. `system.s3queue`。此表非持久化,显示 `S3Queue` 的内存状态:当前正在处理的文件、已处理或失败的文件。 +1. `system.s3queue`。此表为非持久化表,用于显示 `S3Queue` 的内存中状态:当前正在处理哪些文件、哪些文件已处理完成或处理失败。 ```sql ┌─statement──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ @@ -359,7 +448,7 @@ COMMENT '包含 S3Queue 元数据的内存状态以及每个文件当前处理 └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ ``` -示例: +示例: ```sql @@ -378,9 +467,9 @@ ProfileEvents: {'ZooKeeperTransactions':3,'ZooKeeperGet':2,'ZooKeeperMul exception: ``` -2. `system.s3queue_log`。持久化表。包含与 `system.s3queue` 相同的信息,但仅针对 `processed` 和 `failed` 状态的文件。 +2. `system.s3queue_log`。持久化表。包含与 `system.s3queue` 相同的信息,但记录的是 `processed` 和 `failed` 文件。 -该表具有以下结构: +该表具有以下结构: ```sql SHOW CREATE TABLE system.s3queue_log @@ -408,7 +497,7 @@ SETTINGS index_granularity = 8192 │ └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ ``` -要使用 `system.s3queue_log`,需在服务器配置文件中定义其配置: +要使用 `system.s3queue_log`,需要在服务器配置文件中为其添加相应配置: ```xml @@ -417,7 +506,7 @@ SETTINGS index_granularity = 8192 │ ``` -示例: +示例: ```sql SELECT * diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/index.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/index.md index 12217788d1f..d5dd31f5486 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/index.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/index.md @@ -1,48 +1,32 @@ --- -description: 'MergeTree 引擎系列文档' -sidebar_label: 'MergeTree 引擎系列' +description: 'MergeTree 引擎家族文档' +sidebar_label: 'MergeTree 引擎家族' sidebar_position: 10 slug: /engines/table-engines/mergetree-family/ -title: 'MergeTree 引擎系列' +title: 'MergeTree 引擎家族' doc_type: 'reference' --- -# MergeTree 引擎家族 +# MergeTree 引擎系列 -MergeTree 家族中的表引擎是 ClickHouse 数据存储能力的核心。它们提供了实现高可靠性和高性能数据检索的大部分特性:列式存储、自定义分区、稀疏主索引、二级数据跳过索引等。 +MergeTree 系列的表引擎是 ClickHouse 数据存储能力的核心。它们提供了弹性和高性能数据检索所需的大部分功能:列式存储、自定义分区、稀疏主索引、二级数据跳过索引等。 -基础的 [MergeTree](../../../engines/table-engines/mergetree-family/mergetree.md) 表引擎可以视为单节点 ClickHouse 实例的默认表引擎,因为它用途广泛且适用于多种场景。 +基础 [MergeTree](../../../engines/table-engines/mergetree-family/mergetree.md) 表引擎可以视为单节点 ClickHouse 实例的默认表引擎,因为它功能全面且适用于各种使用场景。 -在生产环境中,更推荐使用 [ReplicatedMergeTree](../../../engines/table-engines/mergetree-family/replication.md),因为它在常规 MergeTree 引擎的所有特性之上增加了高可用性。一个额外的优势是在数据摄取时自动去重,因此在插入期间如果发生网络问题,软件可以安全地重试。 +对于生产环境,[ReplicatedMergeTree](../../../engines/table-engines/mergetree-family/replication.md) 是推荐选择,因为它在常规 MergeTree 引擎的所有功能基础上增加了高可用性。另一个优势是在数据摄入时自动进行数据去重,因此如果在插入过程中出现网络问题,软件可以安全地重试。 -MergeTree 家族中的其他所有引擎都为某些特定用例增加了额外功能。通常,这是通过在后台执行附加的数据处理操作来实现的。 +MergeTree 系列的其他引擎都为特定使用场景添加了额外功能。通常,这些功能通过后台的额外数据操作来实现。 -MergeTree 引擎的主要缺点是相对较为“重量级”。因此,典型的模式是不要创建太多这类表。如果需要大量小表,例如用于临时数据,可以考虑使用 [Log 引擎家族](../../../engines/table-engines/log-family/index.md)。 +MergeTree 引擎的主要缺点是它们相对较重。因此典型做法是不要使用过多此类引擎。如果您需要许多小表,例如用于临时数据,请考虑使用 [Log 引擎系列](../../../engines/table-engines/log-family/index.md)。 -{/* 本页面的目录由以下脚本自动生成: - https://github.com/ClickHouse/clickhouse-docs/blob/main/scripts/autogenerate-table-of-contents.sh - 数据来源为 YAML front matter 字段:slug、description、title。 + -{/*AUTOGENERATED_START*/ } - -| Page | Description | -| ----------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -| [MergeTree table engine](/engines/table-engines/mergetree-family/mergetree) | `MergeTree` 系列表引擎专为高数据摄取速率和海量数据量而设计。 | -| [Replicated* table engines](/engines/table-engines/mergetree-family/replication) | 介绍 ClickHouse 中 Replicated* 系列表引擎的数据复制机制概览。 | -| [Custom Partitioning Key](/engines/table-engines/mergetree-family/custom-partitioning-key) | 了解如何为 MergeTree 表添加自定义分区键。 | -| [ReplacingMergeTree table engine](/engines/table-engines/mergetree-family/replacingmergetree) | 与 MergeTree 的区别在于,它会删除具有相同排序键值(`ORDER BY` 表子句,而非 `PRIMARY KEY`)的重复记录。 | -| [CoalescingMergeTree table engine](/engines/table-engines/mergetree-family/coalescingmergetree) | CoalescingMergeTree 继承自 MergeTree 引擎。其核心特性是在数据分片合并期间,能够自动存储每一列的最新非空值。 | -| [SummingMergeTree table engine](/engines/table-engines/mergetree-family/summingmergetree) | SummingMergeTree 继承自 MergeTree 引擎。其核心特性是在数据分片合并期间,能够自动对数值数据求和。 | -| [AggregatingMergeTree table engine](/engines/table-engines/mergetree-family/aggregatingmergetree) | 将所有具有相同主键(更准确地说,是相同[排序键](../../../engines/table-engines/mergetree-family/mergetree.md))的行,替换为单行(在同一数据分片内),该行存储聚合函数状态的组合结果。 | -| [CollapsingMergeTree table engine](/engines/table-engines/mergetree-family/collapsingmergetree) | 继承自 MergeTree,但在合并过程中增加了折叠行的逻辑。 | -| [VersionedCollapsingMergeTree table engine](/engines/table-engines/mergetree-family/versionedcollapsingmergetree) | 适用于对持续变化的对象状态进行快速写入,并在后台删除旧的对象状态。 | -| [GraphiteMergeTree table engine](/engines/table-engines/mergetree-family/graphitemergetree) | 专为对 Graphite 数据进行抽稀和聚合/平均(rollup)而设计。 | -| [Exact and Approximate Vector Search](/engines/table-engines/mergetree-family/annindexes) | 精确和近似向量搜索的文档。 | -| [Full-text Search using Text Indexes](/engines/table-engines/mergetree-family/invertedindexes) | 在文本中快速查找搜索词。 | - -{/*AUTOGENERATED_END*/ } + + diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/mergetree.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/mergetree.md index ab6e4bb2f86..c21f5becea5 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/mergetree.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/mergetree.md @@ -1,5 +1,5 @@ --- -description: '`MergeTree` 系列表引擎专为高写入速率和海量数据规模而设计。' +description: '`MergeTree` 系列表引擎专为高数据摄取速率和海量数据规模而设计。' sidebar_label: 'MergeTree' sidebar_position: 11 slug: /engines/table-engines/mergetree-family/mergetree @@ -13,28 +13,26 @@ import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; # MergeTree 表引擎 -`MergeTree` 引擎以及 `MergeTree` 系列表引擎(例如 `ReplacingMergeTree`、`AggregatingMergeTree`)是 ClickHouse 中最常用、最健壮的表引擎。 +`MergeTree` 引擎以及 `MergeTree` 家族中的其他引擎(例如 `ReplacingMergeTree`、`AggregatingMergeTree`)是 ClickHouse 中最常用、也最健壮的表引擎。 -`MergeTree` 系列表引擎专为高数据写入速率和海量数据规模而设计。 -插入操作会创建表数据部分(parts),这些数据部分会由后台进程与其他数据部分进行合并。 +`MergeTree` 家族表引擎专为高数据摄取速率和海量数据规模而设计。 +插入操作会创建表部件(part),这些部件会由后台进程与其他表部件进行合并。 -`MergeTree` 系列表引擎的主要特性如下: +`MergeTree` 家族表引擎的主要特性: -- 表的主键决定每个数据部分内部的排序顺序(聚簇索引)。主键同样不是引用单独的行,而是引用由 8192 行组成的数据块,这些数据块称为粒度(granule)。这样可以使海量数据集的主键足够小,从而始终保留在内存中,同时仍然能够快速访问磁盘上的数据。 +- 表的主键决定了每个表部件内部的排序顺序(聚簇索引)。主键并不引用单独的行,而是引用称为粒度(granule)的 8192 行数据块。这样可以使超大数据集的主键足够小,从而始终保留在主内存中,同时仍然能够快速访问磁盘上的数据。 -- 表可以使用任意分区表达式进行分区。当查询条件允许时,分区裁剪会确保在读取时跳过无关分区。 +- 表可以使用任意分区表达式进行分区。分区裁剪可以在查询条件允许的情况下跳过读取某些分区。 -- 数据可以在多个集群节点之间进行复制,以实现高可用、故障切换和零停机升级。参见 [数据复制](/engines/table-engines/mergetree-family/replication.md)。 +- 数据可以在多个集群节点之间进行复制,以实现高可用、故障切换以及零停机升级。参见 [Data replication](/engines/table-engines/mergetree-family/replication.md)。 -- `MergeTree` 表引擎支持多种统计信息和采样方法,以帮助进行查询优化。 +- `MergeTree` 表引擎支持多种统计信息种类和采样方法,以帮助进行查询优化。 :::note 尽管名称相似,[Merge](/engines/table-engines/special/merge) 引擎与 `*MergeTree` 引擎是不同的。 ::: - - -## 创建表 {#table_engine-mergetree-creating-a-table} +## 创建表 ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -59,198 +57,196 @@ ORDER BY expr [SETTINGS name = value, ...] ``` -有关参数的详细说明,请参阅 [CREATE TABLE](/sql-reference/statements/create/table.md) 语句。 +有关这些参数的详细说明,请参阅 [CREATE TABLE](/sql-reference/statements/create/table.md) 语句。 -### 查询子句 {#mergetree-query-clauses} -#### ENGINE {#engine} +### 查询子句 \{#mergetree-query-clauses\} -`ENGINE` — 引擎的名称和参数。`ENGINE = MergeTree()`。`MergeTree` 引擎没有参数。 +#### ENGINE \{#engine\} -#### ORDER BY {#order_by} +`ENGINE` — 引擎名称和参数。`ENGINE = MergeTree()`。`MergeTree` 引擎没有参数。 + +#### ORDER BY \{#order_by\} `ORDER BY` — 排序键。 -由列名或任意表达式组成的元组。示例:`ORDER BY (CounterID + 1, EventDate)`。 +由列名或任意表达式组成的元组(tuple)。示例:`ORDER BY (CounterID + 1, EventDate)`。 -如果未定义主键(即未指定 `PRIMARY KEY`),ClickHouse 将使用排序键作为主键。 +如果未定义主键(即未指定 `PRIMARY KEY`),ClickHouse 会将排序键用作主键。 -如果不需要排序,可以使用语法 `ORDER BY tuple()`。 -或者,如果启用了设置 `create_table_empty_primary_key_by_default`,则会隐式地将 `ORDER BY ()` 添加到 `CREATE TABLE` 语句中。请参阅[选择主键](#selecting-a-primary-key)。 +如果不需要排序,可以使用语法 `ORDER BY tuple()`。 +或者,如果启用了 `create_table_empty_primary_key_by_default` 设置,则会在 `CREATE TABLE` 语句中隐式添加 `ORDER BY ()`。参见 [选择主键](#selecting-a-primary-key)。 -#### PARTITION BY {#partition-by} +#### PARTITION BY \{#partition-by\} -`PARTITION BY` — [分区键](/engines/table-engines/mergetree-family/custom-partitioning-key.md)。可选。在大多数情况下,您不需要分区键,即使需要分区,通常也不需要比按月更细粒度的分区键。分区不会加速查询(与 ORDER BY 表达式相反)。您不应使用过于细粒度的分区。不要按客户端标识符或名称对数据进行分区(而应将客户端标识符或名称作为 ORDER BY 表达式中的第一列)。 +`PARTITION BY` — 即[分区键](/engines/table-engines/mergetree-family/custom-partitioning-key.md)。可选。在大多数情况下不需要分区键;即使需要分区,通常按月分区已经足够,无需使用比“按月”更细粒度的分区键。分区并不会加速查询(与 ORDER BY 表达式不同)。不要使用过于细粒度的分区。不要按客户端标识符或名称对数据进行分区(应将客户端标识符或名称作为 ORDER BY 表达式中的第一列)。 -对于按月分区,使用 `toYYYYMM(date_column)` 表达式,其中 `date_column` 是类型为 [Date](/sql-reference/data-types/date.md) 的日期列。此处的分区名称采用 `"YYYYMM"` 格式。 +要按月进行分区,使用 `toYYYYMM(date_column)` 表达式,其中 `date_column` 是一个类型为 [Date](/sql-reference/data-types/date.md) 的日期列。此处的分区名称采用 `"YYYYMM"` 格式。 -#### PRIMARY KEY {#primary-key} +#### PRIMARY KEY \{#primary-key\} -`PRIMARY KEY` — 主键,如果它[与排序键不同](#choosing-a-primary-key-that-differs-from-the-sorting-key)。可选。 +`PRIMARY KEY` — 主键,如果它[与排序键不同](#choosing-a-primary-key-that-differs-from-the-sorting-key)。可选。 -指定排序键(使用 `ORDER BY` 子句)会隐式指定主键。 -通常不需要在排序键之外额外指定主键。 +指定排序键(使用 `ORDER BY` 子句)会隐式地指定主键。 +通常无需在排序键之外再单独指定主键。 -#### SAMPLE BY {#sample-by} +#### SAMPLE BY \{#sample-by\} `SAMPLE BY` — 采样表达式。可选。 -如果指定,它必须包含在主键中。 -采样表达式必须返回无符号整数。 - -示例:`SAMPLE BY intHash32(UserID) ORDER BY (CounterID, EventDate, intHash32(UserID))`。 +如果指定该表达式,则它必须包含在主键中。 +采样表达式的结果必须为无符号整数。 -#### TTL {#ttl} +示例:`SAMPLE BY intHash32(UserID) ORDER BY (CounterID, EventDate, intHash32(UserID))`。 -`TTL` — 指定行的存储持续时间以及[磁盘和卷之间](#table_engine-mergetree-multiple-volumes)自动移动数据部分的逻辑的规则列表。可选。 +#### TTL \{#ttl\} -表达式必须返回 `Date` 或 `DateTime` 类型,例如 `TTL date + INTERVAL 1 DAY`。 +`TTL` — 一组规则,用于指定行的保留期限以及数据片在[磁盘与卷之间](#table_engine-mergetree-multiple-volumes)自动迁移的逻辑。可选。 +表达式的结果必须是 `Date` 或 `DateTime`,例如 `TTL date + INTERVAL 1 DAY`。 -规则类型 `DELETE|TO DISK 'xxx'|TO VOLUME 'xxx'|GROUP BY` 指定当表达式满足条件(达到当前时间)时对数据分区执行的操作:删除过期行、将数据分区移动到指定磁盘(`TO DISK 'xxx'`)或卷(`TO VOLUME 'xxx'`)(如果数据分区中的所有行都满足表达式条件),或聚合过期行中的值。规则的默认类型是删除(`DELETE`)。可以指定多个规则列表,但不应超过一个 `DELETE` 规则。 +规则类型 `DELETE|TO DISK 'xxx'|TO VOLUME 'xxx'|GROUP BY` 指定在表达式满足条件(达到当前时间)时,对该数据片执行的操作:删除过期行,将数据片(当该片中所有行的表达式都满足条件时)移动到指定磁盘(`TO DISK 'xxx'`)或卷(`TO VOLUME 'xxx'`),或对过期行中的值进行聚合。规则的默认类型为删除(`DELETE`)。可以指定多条规则,但 `DELETE` 规则不得超过一条。 -有关更多详细信息,请参阅 [列和表的 TTL](#table_engine-mergetree-ttl) +更多细节,参见 [列和表的 TTL](#table_engine-mergetree-ttl)。 -#### SETTINGS {#settings} +#### 设置 -请参阅 [MergeTree 设置](../../../operations/settings/merge-tree-settings.md)。 +参见 [MergeTree 设置](../../../operations/settings/merge-tree-settings.md)。 -**配置节示例** +**Sections 设置示例** ```sql ENGINE MergeTree() PARTITION BY toYYYYMM(EventDate) ORDER BY (CounterID, EventDate, intHash32(UserID)) SAMPLE BY intHash32(UserID) SETTINGS index_granularity=8192 ``` -在此示例中,我们按月设置分区。 +在示例中,我们按月份设置了分区。 -我们还设置了一个采样表达式,使用用户 ID 的哈希值。这允许您为每个 `CounterID` 和 `EventDate` 对表中的数据进行伪随机化。如果在查询数据时定义 [SAMPLE](/sql-reference/statements/select/sample) 子句,ClickHouse 将为用户子集返回均匀的伪随机数据样本。 +我们还将采样表达式设置为基于用户 ID 的哈希。这允许你针对每个 `CounterID` 和 `EventDate` 对表中的数据进行伪随机化。如果在查询数据时指定了 [SAMPLE](/sql-reference/statements/select/sample) 子句,ClickHouse 会为一部分用户返回均匀的伪随机数据样本。 -`index_granularity` 设置可以省略,因为 8192 是默认值。 +`index_granularity` 设置可以省略,因为 8192 是默认值。
+ 已弃用的建表方法 -已弃用的建表方法 - -:::note -请勿在新项目中使用此方法。如果可能,请将旧项目切换到上述方法。 -::: - -```sql -CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] -( - name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1], - name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2], - ... -) ENGINE [=] MergeTree(date-column [, sampling_expression], (primary, key), index_granularity) -``` + :::note + 不要在新项目中使用此方法。如有可能,请将旧项目切换到上面描述的方法。 + ::: -**MergeTree() 参数** + ```sql + CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] + ( + name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1], + name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2], + ... + ) ENGINE [=] MergeTree(date-column [, sampling_expression], (primary, key), index_granularity) + ``` -- `date-column` — [Date](/sql-reference/data-types/date.md) 类型列的名称。ClickHouse 会根据此列自动按月创建分区。分区名称采用 `"YYYYMM"` 格式。 -- `sampling_expression` — 采样表达式。 -- `(primary, key)` — 主键。类型:[Tuple()](/sql-reference/data-types/tuple.md) -- `index_granularity` — 索引粒度。索引"标记"之间的数据行数。值 8192 适用于大多数任务。 + **MergeTree() 参数** -**示例** + * `date-column` — [Date](/sql-reference/data-types/date.md) 类型的列名。ClickHouse 会基于该列按月自动创建分区。分区名称采用 `"YYYYMM"` 格式。 + * `sampling_expression` — 用于采样的表达式。 + * `(primary, key)` — 主键。类型:[Tuple()](/sql-reference/data-types/tuple.md) + * `index_granularity` — 索引粒度,即索引“marks”之间的数据行数。8192 这一数值适用于大多数任务。 -```sql -MergeTree(EventDate, intHash32(UserID), (CounterID, EventDate, intHash32(UserID)), 8192) -``` + **示例** -`MergeTree` 引擎的配置方式与上述主引擎配置方法示例中的方式相同。 + ```sql + MergeTree(EventDate, intHash32(UserID), (CounterID, EventDate, intHash32(UserID)), 8192) + ``` + `MergeTree` 引擎的配置方式与上面主要引擎配置方法中的示例相同。
-## 数据存储 {#mergetree-data-storage} - -表由按主键排序的数据部分(data part)组成。 +## 数据存储 \{#mergetree-data-storage\} -当数据插入表中时,会创建独立的数据部分,每个部分都按主键进行字典序排序。例如,如果主键是 `(CounterID, Date)`,则部分中的数据按 `CounterID` 排序,在每个 `CounterID` 内,再按 `Date` 排序。 +一张表由按主键排序的数据部分(data parts)组成。 -属于不同分区的数据被分离到不同的部分中。ClickHouse 会在后台合并数据部分以实现更高效的存储。属于不同分区的部分不会被合并。合并机制不保证具有相同主键的所有行都位于同一个数据部分中。 +当向表中插入数据时,会创建独立的数据部分,每个数据部分都会按主键进行字典序排序。比如,如果主键是 `(CounterID, Date)`,那么该数据部分中的数据首先按 `CounterID` 排序,并且在每个 `CounterID` 内部再按 `Date` 排序。 -数据部分可以以 `Wide` 或 `Compact` 格式存储。在 `Wide` 格式中,每列存储在文件系统中的单独文件中;在 `Compact` 格式中,所有列存储在一个文件中。`Compact` 格式可用于提高小规模频繁插入的性能。 +属于不同分区的数据会被存放到不同的数据部分中。在后台,ClickHouse 会合并数据部分以实现更高效的存储。属于不同分区的数据部分不会被合并。合并机制并不保证具有相同主键的所有行都会落在同一个数据部分中。 -数据存储格式由表引擎的 `min_bytes_for_wide_part` 和 `min_rows_for_wide_part` 设置控制。如果数据部分中的字节数或行数小于相应设置的值,则该部分以 `Compact` 格式存储;否则以 `Wide` 格式存储。如果未设置这些参数,则数据部分以 `Wide` 格式存储。 +数据部分可以以 `Wide` 或 `Compact` 格式存储。在 `Wide` 格式下,每一列都作为单独的文件存储在文件系统中;在 `Compact` 格式下,所有列都存储在同一个文件中。`Compact` 格式可用于提升小批量且频繁插入场景下的性能。 -每个数据部分在逻辑上被划分为多个颗粒(granule)。颗粒是 ClickHouse 在查询数据时读取的最小不可分割数据集。ClickHouse 不会拆分行或值,因此每个颗粒始终包含整数个行。颗粒的第一行用该行的主键值进行标记。对于每个数据部分,ClickHouse 会创建一个索引文件来存储这些标记(mark)。对于每一列,无论是否在主键中,ClickHouse 也会存储相同的标记。这些标记使您能够直接在列文件中定位数据。 +数据存储格式由表引擎的 `min_bytes_for_wide_part` 和 `min_rows_for_wide_part` 设置控制。如果某个数据部分中的字节数或行数小于对应设置的值,则该数据部分会以 `Compact` 格式存储;否则将以 `Wide` 格式存储。如果这两个设置都未配置,数据部分将以 `Wide` 格式存储。 -颗粒大小受表引擎的 `index_granularity` 和 `index_granularity_bytes` 设置限制。颗粒中的行数位于 `[1, index_granularity]` 范围内,具体取决于行的大小。如果单行的大小大于该设置的值,则颗粒的大小可以超过 `index_granularity_bytes`。在这种情况下,颗粒的大小等于该行的大小。 +每个数据部分在逻辑上被划分为多个粒度(granule)。粒度是 ClickHouse 在查询数据时读取的最小不可再分的数据集。ClickHouse 不会拆分行或单个值,因此每个粒度始终包含整数数量的行。粒度的第一行会用该行的主键值进行标记。对于每个数据部分,ClickHouse 会创建一个索引文件来存储这些标记(marks)。对于每一列(无论是否包含在主键中),ClickHouse 也会存储相同的标记。这些标记可以让系统直接在列文件中定位数据。 +粒度大小受表引擎的 `index_granularity` 和 `index_granularity_bytes` 设置限制。每个粒度中的行数位于 `[1, index_granularity]` 范围内,具体取决于每行数据的大小。如果单行数据的大小超过 `index_granularity_bytes` 的值,则粒度的大小可以超过 `index_granularity_bytes`。在这种情况下,粒度大小等于该行数据的大小。 -## 查询中的主键和索引 {#primary-keys-and-indexes-in-queries} +## 查询中的主键和索引 -以 `(CounterID, Date)` 主键为例。在这种情况下,排序和索引可以如下图所示: +以 `(CounterID, Date)` 主键为例。在这种情况下,排序和索引可以表示如下: ```text -完整数据: [---------------------------------------------] +全部数据: [---------------------------------------------] CounterID: [aaaaaaaaaaaaaaaaaabbbbcdeeeeeeeeeeeeefgggggggghhhhhhhhhiiiiiiiiikllllllll] Date: [1111111222222233331233211111222222333211111112122222223111112223311122333] -标记: | | | | | | | | | | | +标记点: | | | | | | | | | | | a,1 a,2 a,3 b,3 e,2 e,3 g,1 h,2 i,1 i,3 l,3 -标记编号: 0 1 2 3 4 5 6 7 8 9 10 +标记点编号: 0 1 2 3 4 5 6 7 8 9 10 ``` -如果数据查询指定: +如果数据查询包含以下条件: -- `CounterID in ('a', 'h')`,服务器读取标记范围 `[0, 3)` 和 `[6, 8)` 中的数据。 -- `CounterID IN ('a', 'h') AND Date = 3`,服务器读取标记范围 `[1, 3)` 和 `[7, 8)` 中的数据。 -- `Date = 3`,服务器读取标记范围 `[1, 10]` 中的数据。 +* `CounterID in ('a', 'h')`,服务器会读取标记区间 `[0, 3)` 和 `[6, 8)` 内的数据。 +* `CounterID IN ('a', 'h') AND Date = 3`,服务器会读取标记区间 `[1, 3)` 和 `[7, 8)` 内的数据。 +* `Date = 3`,服务器会读取标记区间 `[1, 10]` 内的数据。 -上述示例表明,使用索引总是比全表扫描更高效。 +上面的示例表明,使用索引总是比全表扫描更高效。 -稀疏索引允许读取额外的数据。当读取主键的单个范围时,每个数据块中最多可以读取 `index_granularity * 2` 个额外的行。 +稀疏索引会多读一些额外数据。在读取一个主键范围时,每个数据块中最多会额外读取 `index_granularity * 2` 行。 -稀疏索引允许您处理非常大量的表行,因为在大多数情况下,这些索引可以完全放入计算机的 RAM 中。 +稀疏索引允许你处理行数非常巨大的表,因为在大多数情况下,这类索引可以完全放入计算机内存中。 -ClickHouse 不要求主键唯一。您可以插入具有相同主键的多行数据。 +ClickHouse 不要求主键唯一。你可以插入多行具有相同主键的记录。 -您可以在 `PRIMARY KEY` 和 `ORDER BY` 子句中使用 `Nullable` 类型的表达式,但强烈不建议这样做。要启用此功能,请开启 [allow_nullable_key](/operations/settings/merge-tree-settings/#allow_nullable_key) 设置。在 `ORDER BY` 子句中,`NULL` 值遵循 [NULLS_LAST](/sql-reference/statements/select/order-by.md/#sorting-of-special-values) 原则。 +你可以在 `PRIMARY KEY` 和 `ORDER BY` 子句中使用 `Nullable` 类型的表达式,但强烈不建议这样做。要启用此功能,请开启 [allow_nullable_key](/operations/settings/merge-tree-settings/#allow_nullable_key) 设置。对于 `ORDER BY` 子句中的 `NULL` 值,适用 [NULLS_LAST](/sql-reference/statements/select/order-by.md/#sorting-of-special-values) 原则。 -### 选择主键 {#selecting-a-primary-key} -主键中的列数没有明确限制。根据数据结构,您可以在主键中包含更多或更少的列。这可能会: +### 选择主键 \{#selecting-a-primary-key\} + +主键中的列数没有显式限制。可以根据数据结构,在主键中包含更多或更少的列。这可能会: - 提高索引性能。 - 如果主键是 `(a, b)`,那么在满足以下条件时,添加另一列 `c` 将提高性能: - - 存在对列 `c` 有条件的查询。 - - 具有相同 `(a, b)` 值的长数据范围(比 `index_granularity` 长几倍)很常见。换句话说,当添加另一列可以让您跳过相当长的数据范围时。 + 如果主键是 `(a, b)`,那么在满足以下条件时,添加另一列 `c` 会提高性能: -- 提高数据压缩率。 + - 存在带有列 `c` 条件的查询。 + - 通常会出现较长的数据范围(长度是 `index_granularity` 的数倍)在 `(a, b)` 上具有相同的值。换句话说,添加另一列可以使系统跳过相当长的数据范围。 - ClickHouse 按主键对数据进行排序,因此一致性越高,压缩效果越好。 +- 改善数据压缩。 -- 在 [CollapsingMergeTree](/engines/table-engines/mergetree-family/collapsingmergetree) 和 [SummingMergeTree](/engines/table-engines/mergetree-family/summingmergetree.md) 引擎中合并数据部分时提供额外的逻辑。 + ClickHouse 会按主键对数据进行排序,因此数据按主键越集中、有序,压缩效果越好。 - 在这种情况下,指定与主键不同的_排序键_是有意义的。 +- 在 [CollapsingMergeTree](/engines/table-engines/mergetree-family/collapsingmergetree) 和 [SummingMergeTree](/engines/table-engines/mergetree-family/summingmergetree.md) 引擎中,为合并数据部分提供额外的逻辑。 -过长的主键会对插入性能和内存消耗产生负面影响,但主键中的额外列不会影响 ClickHouse 在 `SELECT` 查询时的性能。 + 在这种情况下,指定与主键不同的*排序键(sorting key)*是有意义的。 -您可以使用 `ORDER BY tuple()` 语法创建没有主键的表。在这种情况下,ClickHouse 按插入顺序存储数据。如果您希望在通过 `INSERT ... SELECT` 查询插入数据时保持数据顺序,请设置 [max_insert_threads = 1](/operations/settings/settings#max_insert_threads)。 +较长的主键会对插入性能和内存消耗产生负面影响,但在执行 `SELECT` 查询时,主键中的额外列不会影响 ClickHouse 的性能。 -要按初始顺序选择数据,请使用[单线程](/operations/settings/settings.md/#max_threads) `SELECT` 查询。 +可以使用 `ORDER BY tuple()` 语法创建没有主键的表。在这种情况下,ClickHouse 按插入顺序存储数据。如果希望在使用 `INSERT ... SELECT` 查询插入数据时保持数据顺序,请将 [max_insert_threads = 1](/operations/settings/settings#max_insert_threads) 设置为 1。 -### 选择与排序键不同的主键 {#choosing-a-primary-key-that-differs-from-the-sorting-key} +要按初始顺序选择数据,请使用[单线程](/operations/settings/settings.md/#max_threads)的 `SELECT` 查询。 +### 选择与排序键不同的主键 \{#choosing-a-primary-key-that-differs-from-the-sorting-key\} -可以指定与排序键(用于对数据部分中的行进行排序的表达式)不同的主键(其值会写入索引文件中每个标记的表达式)。在这种情况下,主键表达式元组必须是排序键表达式元组的前缀。 +可以指定一个与排序键不同的主键(一个表达式,其值会在每个标记的索引文件中写入)。在这种情况下,主键表达式元组必须是排序键表达式元组的前缀。 -此功能在使用 [SummingMergeTree](/engines/table-engines/mergetree-family/summingmergetree.md) 和 -[AggregatingMergeTree](/engines/table-engines/mergetree-family/aggregatingmergetree.md) 表引擎时非常有用。在使用这些引擎的常见场景中,表包含两种类型的列:_维度列_ 和 _度量列_。典型的查询会使用任意 `GROUP BY` 对度量列的值进行聚合,并按维度进行过滤。由于 SummingMergeTree 和 AggregatingMergeTree 会聚合具有相同排序键值的行,因此自然会将所有维度添加到排序键中。这样一来,键表达式就由一长串列组成,并且必须频繁更新此列表以包含新添加的维度。 +在使用 [SummingMergeTree](/engines/table-engines/mergetree-family/summingmergetree.md) 和 +[AggregatingMergeTree](/engines/table-engines/mergetree-family/aggregatingmergetree.md) 表引擎时,这一特性非常有用。在这些引擎的常见使用场景中,表通常有两类列:*维度(dimensions)* 和 *度量(measures)*。典型查询会对度量列的值在任意 `GROUP BY` 条件下进行聚合,并按维度进行过滤。由于 SummingMergeTree 和 AggregatingMergeTree 会对具有相同排序键值的行进行聚合,因此将所有维度都加入排序键是很自然的做法。结果是,键表达式会由一个很长的列列表组成,并且在新增维度时必须频繁更新该列表。 -在这种情况下,合理的做法是在主键中仅保留少数几列以提供高效的范围扫描,并将其余维度列添加到排序键元组中。 +在这种情况下,更合理的做法是只在主键中保留少数几列,以保证高效的范围扫描,并将其余维度列加入排序键元组中。 -排序键的 [ALTER](/sql-reference/statements/alter/index.md) 是一个轻量级操作,因为当新列同时添加到表和排序键时,现有数据部分无需更改。由于旧排序键是新排序键的前缀,并且新添加的列中没有数据,因此在表修改时,数据同时按旧排序键和新排序键排序。 +对排序键执行 [ALTER](/sql-reference/statements/alter/index.md) 是一项轻量级操作,因为当新列同时被添加到表和排序键中时,现有数据部分不需要被修改。由于旧排序键是新排序键的前缀,并且在新添加的列中还没有数据,因此在进行表修改时,数据在逻辑上同时满足按旧排序键和新排序键排序。 -### 在查询中使用索引和分区 {#use-of-indexes-and-partitions-in-queries} +### 在查询中使用索引和分区 -对于 `SELECT` 查询,ClickHouse 会分析是否可以使用索引。如果 `WHERE/PREWHERE` 子句包含表示相等或不等比较操作的表达式(作为合取元素之一或整体),或者在主键或分区键中的列或表达式上包含带固定前缀的 `IN` 或 `LIKE`,或者在这些列的某些部分重复函数上,或者这些表达式的逻辑关系上,则可以使用索引。 +对于 `SELECT` 查询,ClickHouse 会分析是否可以使用索引。若 `WHERE/PREWHERE` 子句中包含(作为某个合取项或整体)表示等值或不等比较运算的表达式,或者在主键或分区键中的列或表达式,或这些列上的某些特定函数,或这些表达式的逻辑组合上使用了带固定前缀的 `IN` 或 `LIKE`,则可以使用索引。 -因此,可以在主键的一个或多个范围上快速运行查询。在此示例中,针对特定跟踪标签、特定标签和日期范围、特定标签和日期、具有日期范围的多个标签等运行查询时,查询速度会很快。 +因此,可以对主键的一个或多个范围快速执行查询。在此示例中,当针对特定的跟踪标签、特定标签与日期范围、特定标签与日期、带日期范围的多个标签等进行查询时,查询都会很快。 -让我们看一下如下配置的引擎: +来看一个如下配置的引擎: ```sql ENGINE MergeTree() @@ -259,7 +255,7 @@ ORDER BY (CounterID, EventDate) SETTINGS index_granularity=8192 ``` -在这种情况下,在以下查询中: +在这种情况下,在查询时: ```sql SELECT count() FROM table @@ -277,42 +273,42 @@ AND CounterID IN (101500, 731962, 160656) AND (CounterID = 101500 OR EventDate != toDate('2014-05-01')) ``` -ClickHouse 将使用主键索引来修剪不相关的数据,并使用月度分区键来修剪不在适当日期范围内的分区。 +ClickHouse 将使用主键索引来跳过不符合条件的数据,并使用按月分区键来跳过处于不符合日期范围内的分区。 -上述查询表明,即使对于复杂表达式也会使用索引。从表中读取数据的组织方式确保使用索引不会比全表扫描慢。 +上面的查询展示了,即使是复杂表达式也会使用索引。表的数据读取经过组织,保证使用索引不会比全表扫描更慢。 -在下面的示例中,无法使用索引。 +在下面的示例中,将无法利用索引。 ```sql SELECT count() FROM table WHERE CounterID = 34 OR URL LIKE '%upyachka%' ``` -要检查 ClickHouse 在运行查询时是否可以使用索引,请使用设置 [force_index_by_date](/operations/settings/settings.md/#force_index_by_date) 和 [force_primary_key](/operations/settings/settings#force_primary_key)。 +要检查 ClickHouse 在运行查询时是否可以使用索引,请使用设置项 [force_index_by_date](/operations/settings/settings.md/#force_index_by_date) 和 [force_primary_key](/operations/settings/settings#force_primary_key)。 -按月分区的键允许仅读取包含适当范围内日期的数据块。在这种情况下,数据块可能包含多个日期的数据(最多整个月)。在块内,数据按主键排序,而主键可能不包含日期作为第一列。因此,使用仅包含日期条件且未指定主键前缀的查询将导致读取的数据多于单个日期所需的数据。 +按月分区的分区键可以使查询仅读取包含目标日期范围的数据块。在这种情况下,一个数据块可能包含多个日期的数据(最多可覆盖整个月)。在一个数据块内,数据按主键排序,而主键的首列不一定是日期。正因为如此,如果查询中只包含日期条件而未指定主键前缀,就会为获取某个单一日期而读取比实际需要更多的数据。 -### 对部分单调主键使用索引 {#use-of-index-for-partially-monotonic-primary-keys} +### 对部分单调主键使用索引 \{#use-of-index-for-partially-monotonic-primary-keys\} -例如,考虑月份中的日期。它们在一个月内形成[单调序列](https://en.wikipedia.org/wiki/Monotonic_function),但在更长的时间段内则不是单调的。这是一个部分单调序列。如果用户使用部分单调主键创建表,ClickHouse 会像往常一样创建稀疏索引。当用户从这种表中查询数据时,ClickHouse 会分析查询条件。如果用户想要获取索引的两个标记之间的数据,并且这两个标记都在同一个月内,ClickHouse 可以在这种特定情况下使用索引,因为它可以计算查询参数与索引标记之间的距离。 +以月份中的日期为例。在一个月内,它们构成一个[单调序列](https://en.wikipedia.org/wiki/Monotonic_function),但在更长的时间范围内则不是单调的。这就是一个部分单调序列。如果用户使用部分单调的主键创建表,ClickHouse 会像往常一样创建稀疏索引。当用户从这种类型的表中查询数据时,ClickHouse 会分析查询条件。如果用户希望获取索引中两个标记点之间的数据,并且这两个标记点都落在同一个月内,ClickHouse 就可以在这种特定情况下使用索引,因为它可以计算查询参数与索引标记之间的距离。 -如果查询参数范围内的主键值不构成单调序列,ClickHouse 无法使用索引。在这种情况下,ClickHouse 会使用全表扫描方法。 +如果查询参数范围内的主键值不构成单调序列,ClickHouse 无法使用索引。在这种情况下,ClickHouse 会使用全表扫描方法。 -ClickHouse 不仅对月份日期序列使用此逻辑,对任何表示部分单调序列的主键都使用此逻辑。 +ClickHouse 不仅对月份日期序列使用这一逻辑,也会对任何表示部分单调序列的主键使用这一逻辑。 -### 数据跳过索引 {#table_engine-mergetree-data_skipping-indexes} +### 数据跳过索引 -索引声明位于 `CREATE` 查询的列部分。 +索引声明在 `CREATE` 查询的 `columns` 部分中。 ```sql INDEX index_name expr TYPE type(...) [GRANULARITY granularity_value] ``` -对于 `*MergeTree` 系列的表,可以指定数据跳过索引。 +对于 `*MergeTree` 家族的表,可以指定数据跳过索引。 -这些索引在由 `granularity_value` 个颗粒组成的块上聚合指定表达式的某些信息(颗粒的大小使用表引擎中的 `index_granularity` 设置指定)。然后在 `SELECT` 查询中使用这些聚合信息,通过跳过 `where` 查询条件无法满足的大数据块来减少从磁盘读取的数据量。 +这些索引会在由 `granularity_value` 个粒度组成的数据块上聚合指定表达式的一些信息(粒度的大小通过表引擎中的 `index_granularity` 设置指定)。随后,这些聚合结果会在 `SELECT` 查询中用于减少从磁盘读取的数据量,通过跳过那些不可能满足 `where` 查询条件的大数据块来实现。 -`GRANULARITY` 子句可以省略,`granularity_value` 的默认值为 1。 +可以省略 `GRANULARITY` 子句,此时 `granularity_value` 的默认值为 1。 **示例** @@ -330,7 +326,7 @@ CREATE TABLE table_name ... ``` -ClickHouse 可以使用示例中的索引来减少以下查询中从磁盘读取的数据量: +示例中的索引可供 ClickHouse 在以下查询中使用,以减少从磁盘读取的数据量: ```sql SELECT count() FROM table WHERE u64 == 10; @@ -338,27 +334,28 @@ SELECT count() FROM table WHERE u64 * i32 >= 1234 SELECT count() FROM table WHERE u64 * length(s) == 1234 ``` -数据跳过索引也可以在复合列上创建: +数据跳过索引也可以建立在复合列上: ```sql --- 在 Map 类型的列上: +-- 在 Map 类型的列上: INDEX map_key_index mapKeys(map_column) TYPE bloom_filter INDEX map_value_index mapValues(map_column) TYPE bloom_filter --- 在 Tuple 类型的列上: +-- 在 Tuple 类型的列上: INDEX tuple_1_index tuple_column.1 TYPE bloom_filter INDEX tuple_2_index tuple_column.2 TYPE bloom_filter --- 在 Nested 类型的列上: +-- 在 Nested 类型的列上: INDEX nested_1_index col.nested_col1 TYPE bloom_filter INDEX nested_2_index col.nested_col2 TYPE bloom_filter ``` -### 跳过索引类型 {#skip-index-types} -`MergeTree` 表引擎支持以下类型的跳过索引。 -有关如何使用跳过索引进行性能优化的更多信息, -请参阅["理解 ClickHouse 数据跳过索引"](/optimize/skipping-indexes)。 +### 跳过索引类型 \{#skip-index-types\} + +`MergeTree` 表引擎支持以下几种跳过索引类型。 +有关如何使用跳过索引进行性能优化的更多信息, +请参阅[《理解 ClickHouse 数据跳过索引》](/optimize/skipping-indexes)。 - [`MinMax`](#minmax) 索引 - [`Set`](#set) 索引 @@ -366,78 +363,80 @@ INDEX nested_2_index col.nested_col2 TYPE bloom_filter - [`ngrambf_v1`](#n-gram-bloom-filter) 索引 - [`tokenbf_v1`](#token-bloom-filter) 索引 -#### MinMax 跳过索引 {#minmax} +#### MinMax 跳过索引 -对于每个索引颗粒,存储表达式的最小值和最大值。 -(如果表达式是 `tuple` 类型,则存储每个元组元素的最小值和最大值。) +对于每个索引粒度,会存储某个表达式的最小值和最大值。 +(如果表达式的类型是 `tuple`,则会为元组中的每个元素分别存储最小值和最大值。) -```text title="语法" +```text title="Syntax" minmax ``` -#### Set 索引 {#set} -对于每个索引颗粒,最多存储指定表达式的 `max_rows` 个唯一值。 -`max_rows = 0` 表示"存储所有唯一值"。 +#### Set + +对于每个索引粒度,最多会存储 `max_rows` 个指定表达式的唯一值。 +`max_rows = 0` 表示“存储所有唯一值”。 -```text title="语法" +```text title="Syntax" set(max_rows) ``` -#### Bloom filter 索引 {#bloom-filter} -对于每个索引颗粒,为指定的列存储一个 [bloom filter](https://en.wikipedia.org/wiki/Bloom_filter)。 +#### 布隆过滤器 -```text title="语法" +对于每个索引粒度,都会为指定列存储一个[布隆过滤器](https://en.wikipedia.org/wiki/Bloom_filter)。 + +```text title="Syntax" bloom_filter([false_positive_rate]) ``` -`false_positive_rate` 参数可以取 0 到 1 之间的值(默认值:`0.025`),用于指定产生假阳性的概率(这会增加需要读取的数据量)。 - - -支持以下数据类型: - -- `(U)Int*` -- `Float*` -- `Enum` -- `Date` -- `DateTime` -- `String` -- `FixedString` -- `Array` -- `LowCardinality` -- `Nullable` -- `UUID` -- `Map` - -:::note Map 数据类型:使用键或值指定索引创建 -对于 `Map` 数据类型,客户端可以使用 [`mapKeys`](/sql-reference/functions/tuple-map-functions.md/#mapkeys) 或 [`mapValues`](/sql-reference/functions/tuple-map-functions.md/#mapvalues) 函数指定为键或值创建索引。 +`false_positive_rate` 参数可以取 0 到 1 之间的值(默认值:`0.025`),用于指定产生假阳性(false positive)结果的概率(该值越大,需要读取的数据量越多)。 + +支持以下数据类型: + +* `(U)Int*` +* `Float*` +* `Enum` +* `Date` +* `DateTime` +* `String` +* `FixedString` +* `Array` +* `LowCardinality` +* `Nullable` +* `UUID` +* `Map` + +:::note Map 数据类型:使用键或值创建索引 +对于 `Map` 数据类型,客户端可以通过 [`mapKeys`](/sql-reference/functions/tuple-map-functions.md/#mapkeys) 或 [`mapValues`](/sql-reference/functions/tuple-map-functions.md/#mapvalues) 函数指定索引是针对键还是针对值创建。 ::: -#### N-gram 布隆过滤器 {#n-gram-bloom-filter} -为每个索引粒度存储指定列的 [n-grams](https://en.wikipedia.org/wiki/N-gram) 的[布隆过滤器](https://en.wikipedia.org/wiki/Bloom_filter)。 +#### N-gram 布隆过滤器 + +对于每个索引粒度,会为指定列的 [n-gram](https://en.wikipedia.org/wiki/N-gram) 存储一个 [布隆过滤器](https://en.wikipedia.org/wiki/Bloom_filter)。 -```text title="语法" +```text title="Syntax" ngrambf_v1(n, size_of_bloom_filter_in_bytes, number_of_hash_functions, random_seed) ``` -| 参数 | 描述 | -| ------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | -| `n` | ngram 大小 | -| `size_of_bloom_filter_in_bytes` | 布隆过滤器大小(以字节为单位)。可以使用较大的值,例如 `256` 或 `512`,因为它可以很好地压缩)。 | -| `number_of_hash_functions` | 布隆过滤器中使用的哈希函数数量。 | -| `random_seed` | 布隆过滤器哈希函数的随机种子。 | +| 参数 | 描述 | +| ------------------------------- | ---------------------------------------------------------------- | +| `n` | n-gram 大小 | +| `size_of_bloom_filter_in_bytes` | 布隆过滤器(Bloom filter)的字节大小。此处可以使用较大的值,例如 `256` 或 `512`,因为它可以很好地压缩。 | +| `number_of_hash_functions` | 布隆过滤器中使用的哈希函数数量。 | +| `random_seed` | 布隆过滤器哈希函数使用的随机种子。 | -此索引仅适用于以下数据类型: +此索引仅适用于以下数据类型: -- [`String`](/sql-reference/data-types/string.md) -- [`FixedString`](/sql-reference/data-types/fixedstring.md) -- [`Map`](/sql-reference/data-types/map.md) +* [`String`](/sql-reference/data-types/string.md) +* [`FixedString`](/sql-reference/data-types/fixedstring.md) +* [`Map`](/sql-reference/data-types/map.md) -要估算 `ngrambf_v1` 的参数,可以使用以下[用户定义函数 (UDF)](/sql-reference/statements/create/function.md)。 +要估算 `ngrambf_v1` 的参数,可以使用以下[用户自定义函数(UDF)](/sql-reference/statements/create/function.md)。 -```sql title="ngrambf_v1 的 UDF" +```sql title="UDFs for ngrambf_v1" CREATE FUNCTION bfEstimateFunctions [ON CLUSTER cluster] AS (total_number_of_all_grams, size_of_bloom_filter_in_bits) -> round((size_of_bloom_filter_in_bits / total_number_of_all_grams) * log(2)); @@ -455,13 +454,13 @@ AS (number_of_hash_functions, probability_of_false_positives, size_of_bloom_filter_in_bytes) -> ceil(size_of_bloom_filter_in_bytes / (-number_of_hash_functions / log(1 - exp(log(probability_of_false_positives) / number_of_hash_functions)))) ``` -要使用这些函数,需要至少指定两个参数: +要使用这些函数,您至少需要指定两个参数: -- `total_number_of_all_grams` -- `probability_of_false_positives` +* `total_number_of_all_grams` +* `probability_of_false_positives` -例如,粒度中有 `4300` 个 ngram,并且期望误报率低于 `0.0001`。 -然后可以通过执行以下查询来估算其他参数: +例如,在一个 granule 中有 `4300` 个 ngram,并且您预期误报率小于 `0.0001`。 +然后可以通过执行以下查询来估算其余参数: ```sql --- 估算过滤器中的位数 @@ -471,7 +470,7 @@ SELECT bfEstimateBmSize(4300, 0.0001) / 8 AS size_of_bloom_filter_in_bytes; │ 10304 │ └───────────────────────────────┘ ---- 估算哈希函数数量 +--- 估算哈希函数的数量 SELECT bfEstimateFunctions(4300, bfEstimateBmSize(4300, 0.0001)) as number_of_hash_functions ┌─number_of_hash_functions─┐ @@ -479,78 +478,77 @@ SELECT bfEstimateFunctions(4300, bfEstimateBmSize(4300, 0.0001)) as number_of_ha └──────────────────────────┘ ``` -当然,也可以使用这些函数来估算其他条件下的参数。 +当然,你也可以使用这些函数来估算其他条件下的参数。 上述函数参考了[此处](https://hur.st/bloomfilter)的布隆过滤器计算器。 -#### Token 布隆过滤器 {#token-bloom-filter} -Token 布隆过滤器与 `ngrambf_v1` 相同,但存储的是 token(由非字母数字字符分隔的序列)而不是 ngram。 +#### Token bloom filter -```text title="语法" -tokenbf_v1(size_of_bloom_filter_in_bytes, number_of_hash_functions, random_seed) +Token bloom filter 与 `ngrambf_v1` 相同,但存储的是 token(由非字母数字字符分隔的序列),而不是 ngram。 + +```text title="Syntax" +tokenbf_v1(布隆过滤器字节大小, 哈希函数数量, 随机种子) ``` -#### 稀疏 gram 布隆过滤器 {#sparse-grams-bloom-filter} +#### 稀疏 grams 布隆过滤器 -稀疏 gram 布隆过滤器与 `ngrambf_v1` 类似,但使用[稀疏 gram 标记](/sql-reference/functions/string-functions.md/#sparseGrams)代替 ngram。 +稀疏 grams 布隆过滤器与 `ngrambf_v1` 类似,但使用的是[稀疏 grams 标记](/sql-reference/functions/string-functions.md/#sparseGrams)而不是 ngrams。 -```text title="语法" +```text title="Syntax" sparse_grams(min_ngram_length, max_ngram_length, min_cutoff_length, size_of_bloom_filter_in_bytes, number_of_hash_functions, random_seed) ``` -### 文本索引 {#text} - -支持全文搜索,详情请参阅[此处](invertedindexes.md)。 -#### 向量相似度 {#vector-similarity} +### 文本索引 \{#text\} -支持近似最近邻搜索,详情请参阅[此处](annindexes.md)。 +支持全文搜索,详情见[这里](invertedindexes.md)。 -### 函数支持 {#functions-support} +#### 向量相似度 \{#vector-similarity\} -`WHERE` 子句中的条件包含对列进行操作的函数调用。如果列是索引的一部分,ClickHouse 在执行函数时会尝试使用该索引。ClickHouse 针对索引使用支持不同的函数子集。 +支持近似最近邻检索,详见[此处](annindexes.md)。 -`set` 类型的索引可被所有函数使用。其他索引类型的支持情况如下: +### 函数支持 \{#functions-support\} +`WHERE` 子句中的条件可能包含对作用于列的函数的调用。如果该列是索引的一部分,ClickHouse 会在执行这些函数时尝试使用该索引。ClickHouse 对可用于索引的函数提供了不同的支持子集。 -| 函数(运算符)/索引 | 主键 | minmax | ngrambf_v1 | tokenbf_v1 | bloom_filter | text | sparse_grams | -| ------------------------------------------------------------------------------------------------------------------------- | -- | ------ | -------------- | -------------- | ---------------- | ---- | ---------------- | -| [等于 (=, ==)](/sql-reference/functions/comparison-functions.md/#equals) | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | -| [notEquals(!=, <>)](/sql-reference/functions/comparison-functions.md/#notEquals) | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | -| [like](/sql-reference/functions/string-search-functions.md/#like) | ✔ | ✔ | ✔ | ✔ | ✗ | ✔ | ✔ | -| [notLike](/sql-reference/functions/string-search-functions.md/#notLike) | ✔ | ✔ | ✔ | ✔ | ✗ | ✔ | ✔ | -| [match](/sql-reference/functions/string-search-functions.md/#match) | ✗ | ✗ | ✔ | ✔ | ✗ | ✔ | ✔ | -| [startsWith](/sql-reference/functions/string-functions.md/#startsWith) | ✔ | ✔ | ✔ | ✔ | ✗ | ✔ | ✔ | -| [endsWith](/sql-reference/functions/string-functions.md/#endsWith) | ✗ | ✗ | ✔ | ✔ | ✗ | ✔ | ✔ | -| [multiSearchAny](/sql-reference/functions/string-search-functions.md/#multiSearchAny) | ✗ | ✗ | ✔ | ✗ | ✗ | ✗ | ✗ | -| [in](/sql-reference/functions/in-functions) | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | -| [notIn](/sql-reference/functions/in-functions) | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | -| [小于 (`<`)](/sql-reference/functions/comparison-functions.md/#less) | ✔ | ✔ | ✗ | ✗ | ✗ | ✗ | ✗ | -| [大于(`>`)](/sql-reference/functions/comparison-functions.md/#greater) | ✔ | ✔ | ✗ | ✗ | ✗ | ✗ | ✗ | -| [lessOrEquals(`<=`)](/sql-reference/functions/comparison-functions.md/#lessOrEquals) | ✔ | ✔ | ✗ | ✗ | ✗ | ✗ | ✗ | -| [greaterOrEquals(`>=`,大于等于)](/sql-reference/functions/comparison-functions.md/#greaterOrEquals) | ✔ | ✔ | ✗ | ✗ | ✗ | ✗ | ✗ | -| [empty](/sql-reference/functions/array-functions/#empty) | ✔ | ✔ | ✗ | ✗ | ✗ | ✗ | ✗ | -| [notEmpty](/sql-reference/functions/array-functions/#notEmpty) | ✗ | ✔ | ✗ | ✗ | ✗ | ✗ | ✔ | -| [has](/sql-reference/functions/array-functions#has) | ✗ | ✗ | ✔ | ✔ | ✔ | ✔ | ✔ | -| [hasAny](/sql-reference/functions/array-functions#hasAny) | ✗ | ✗ | ✔ | ✔ | ✔ | ✗ | ✔ | -| [hasAll](/sql-reference/functions/array-functions#hasAll) | ✗ | ✗ | ✔ | ✔ | ✔ | ✗ | ✔ | -| [hasToken](/sql-reference/functions/string-search-functions.md/#hasToken) | ✗ | ✗ | ✗ | ✔ | ✗ | ✔ | ✗ | -| [hasTokenOrNull](/sql-reference/functions/string-search-functions.md/#hasTokenOrNull) | ✗ | ✗ | ✗ | ✔ | ✗ | ✔ | ✗ | -| [hasTokenCaseInsensitive (`*`)](/sql-reference/functions/string-search-functions.md/#hasTokenCaseInsensitive) | ✗ | ✗ | ✗ | ✔ | ✗ | ✗ | ✗ | -| [hasTokenCaseInsensitiveOrNull (`*`)](/sql-reference/functions/string-search-functions.md/#hasTokenCaseInsensitiveOrNull) | ✗ | ✗ | ✗ | ✔ | ✗ | ✗ | ✗ | -| [hasAnyTokens](/sql-reference/functions/string-search-functions.md/#hasAnyTokens) | ✗ | ✗ | ✗ | ✗ | ✗ | ✔ | ✗ | -| [hasAllTokens](/sql-reference/functions/string-search-functions.md/#hasAllTokens) | ✗ | ✗ | ✗ | ✗ | ✗ | ✔ | ✗ | -| [mapContains](/sql-reference/functions/tuple-map-functions#mapcontains) | ✗ | ✗ | ✗ | ✗ | ✗ | ✔ | ✗ | +类型为 `set` 的索引可被所有函数使用。其他类型的索引支持情况如下: +| 函数(运算符)/ 索引 | 主键 | minmax | ngrambf_v1 | tokenbf_v1 | bloom_filter | sparse_grams | text | +| ------------------------------------------------------------------------------------------------------------------------- | -- | ------ | -------------- | -------------- | ---------------- | ---------------- | ---- | +| [equals(=,==)](/sql-reference/functions/comparison-functions.md/#equals) | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| [notEquals(!=, <>)](/sql-reference/functions/comparison-functions.md/#notEquals) | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| [like](/sql-reference/functions/string-search-functions.md/#like) | ✔ | ✔ | ✔ | ✔ | ✗ | ✔ | ✔ | +| [notLike](/sql-reference/functions/string-search-functions.md/#notLike) | ✔ | ✔ | ✔ | ✔ | ✗ | ✔ | ✔ | +| [match](/sql-reference/functions/string-search-functions.md/#match) | ✗ | ✗ | ✔ | ✔ | ✗ | ✔ | ✔ | +| [startsWith](/sql-reference/functions/string-functions.md/#startsWith) | ✔ | ✔ | ✔ | ✔ | ✗ | ✔ | ✔ | +| [endsWith](/sql-reference/functions/string-functions.md/#endsWith) | ✗ | ✗ | ✔ | ✔ | ✗ | ✔ | ✔ | +| [multiSearchAny](/sql-reference/functions/string-search-functions.md/#multiSearchAny) | ✗ | ✗ | ✔ | ✗ | ✗ | ✗ | ✗ | +| [in](/sql-reference/functions/in-functions) | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| [notIn](/sql-reference/functions/in-functions) | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| [小于(`<`)](/sql-reference/functions/comparison-functions.md/#less) | ✔ | ✔ | ✗ | ✗ | ✗ | ✗ | ✗ | +| [大于 (`>`)](/sql-reference/functions/comparison-functions.md/#greater) | ✔ | ✔ | ✗ | ✗ | ✗ | ✗ | ✗ | +| [lessOrEquals (`<=`)](/sql-reference/functions/comparison-functions.md/#lessOrEquals) | ✔ | ✔ | ✗ | ✗ | ✗ | ✗ | ✗ | +| [大于等于 (`>=`)](/sql-reference/functions/comparison-functions.md/#greaterOrEquals) | ✔ | ✔ | ✗ | ✗ | ✗ | ✗ | ✗ | +| [empty](/sql-reference/functions/array-functions/#empty) | ✔ | ✔ | ✗ | ✗ | ✗ | ✗ | ✗ | +| [notEmpty](/sql-reference/functions/array-functions/#notEmpty) | ✗ | ✔ | ✗ | ✗ | ✗ | ✔ | ✗ | +| [has](/sql-reference/functions/array-functions#has) | ✗ | ✗ | ✔ | ✔ | ✔ | ✔ | ✔ | +| [hasAny](/sql-reference/functions/array-functions#hasAny) | ✗ | ✗ | ✔ | ✔ | ✔ | ✔ | ✗ | +| [hasAll](/sql-reference/functions/array-functions#hasAll) | ✗ | ✗ | ✔ | ✔ | ✔ | ✔ | ✗ | +| [hasToken](/sql-reference/functions/string-search-functions.md/#hasToken) | ✗ | ✗ | ✗ | ✔ | ✗ | ✗ | ✔ | +| [hasTokenOrNull](/sql-reference/functions/string-search-functions.md/#hasTokenOrNull) | ✗ | ✗ | ✗ | ✔ | ✗ | ✗ | ✔ | +| [hasTokenCaseInsensitive(`*`)](/sql-reference/functions/string-search-functions.md/#hasTokenCaseInsensitive) | ✗ | ✗ | ✗ | ✔ | ✗ | ✗ | ✗ | +| [hasTokenCaseInsensitiveOrNull (`*`)](/sql-reference/functions/string-search-functions.md/#hasTokenCaseInsensitiveOrNull) | ✗ | ✗ | ✗ | ✔ | ✗ | ✗ | ✗ | +| [hasAnyTokens](/sql-reference/functions/string-search-functions.md/#hasAnyTokens) | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✔ | +| [hasAllTokens](/sql-reference/functions/string-search-functions.md/#hasAllTokens) | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✔ | +| [mapContains](/sql-reference/functions/tuple-map-functions#mapcontains) | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✔ | +对于常量参数小于 ngram 大小的函数,`ngrambf_v1` 不能用于查询优化。 -当函数的常量参数小于 ngram 大小时,`ngrambf_v1` 无法用于查询优化。 - -(*) 要使 `hasTokenCaseInsensitive` 和 `hasTokenCaseInsensitiveOrNull` 有效,必须在已转换为小写的数据上创建 `tokenbf_v1` 索引,例如:`INDEX idx (lower(str_col)) TYPE tokenbf_v1(512, 3, 0)`。 +(*) 要让 `hasTokenCaseInsensitive` 和 `hasTokenCaseInsensitiveOrNull` 生效,必须在转为小写的数据上创建 `tokenbf_v1` 索引,例如:`INDEX idx (lower(str_col)) TYPE tokenbf_v1(512, 3, 0)`。 :::note -Bloom filter 可能产生误报,因此 `ngrambf_v1`、`tokenbf_v1`、`sparse_grams` 和 `bloom_filter` 索引不能用于优化那些期望函数结果为 false 的查询。 +由于布隆过滤器可能产生假阳性匹配,因此在期望函数结果为 false 的查询中,`ngrambf_v1`、`tokenbf_v1`、`sparse_grams` 和 `bloom_filter` 索引不能用于查询优化。 例如: @@ -560,7 +558,7 @@ Bloom filter 可能产生误报,因此 `ngrambf_v1`、`tokenbf_v1`、`sparse_g - `s = 1` - `NOT s != 1` - `startsWith(s, 'test')` -- 不可以被优化: +- 不能被优化: - `NOT s LIKE '%test%'` - `s NOT LIKE '%test%'` - `NOT s = 1` @@ -568,22 +566,19 @@ Bloom filter 可能产生误报,因此 `ngrambf_v1`、`tokenbf_v1`、`sparse_g - `NOT startsWith(s, 'test')` ::: +## 投影 \{#projections\} - -## 投影 {#projections} - -投影类似于[物化视图](/sql-reference/statements/create/view),但在数据分区级别定义。它提供一致性保证,并在查询中自动使用。 +投影类似于[物化视图](/sql-reference/statements/create/view),但定义在数据片段(part)级别。它在提供一致性保证的同时,还能在查询中被自动使用。 :::note -在实现投影时,您还应考虑 [force_optimize_projection](/operations/settings/settings#force_optimize_projection) 设置。 +在使用投影时,你还应考虑 [force_optimize_projection](/operations/settings/settings#force_optimize_projection) 设置。 ::: -带有 [FINAL](/sql-reference/statements/select/from#final-modifier) 修饰符的 `SELECT` 语句不支持投影。 - -### 投影查询 {#projection-query} +在带有 [FINAL](/sql-reference/statements/select/from#final-modifier) 修饰符的 `SELECT` 语句中不支持投影。 -投影查询用于定义投影。它隐式地从父表中选择数据。 +### 投影查询 +投影查询用于定义一个投影。它会隐式地从父表中选取数据。 **语法** ```sql @@ -592,57 +587,57 @@ SELECT [GROUP BY] [ORDER BY] 可以使用 [ALTER](/sql-reference/statements/alter/projection.md) 语句修改或删除投影。 -### 投影存储 {#projection-storage} - -投影存储在数据分区目录内。它类似于索引,但包含一个子目录,用于存储匿名 `MergeTree` 表的数据分区。该表由投影的定义查询生成。如果存在 `GROUP BY` 子句,底层存储引擎将变为 [AggregatingMergeTree](aggregatingmergetree.md),并且所有聚合函数都会转换为 `AggregateFunction`。如果存在 `ORDER BY` 子句,`MergeTree` 表将其用作主键表达式。在合并过程中,投影分区通过其存储的合并例程进行合并。父表分区的校验和与投影分区的校验和合并。其他维护任务与跳数索引类似。 -### 查询分析 {#projection-query-analysis} +### 投影存储 \{#projection-storage\} -1. 检查投影是否可用于回答给定查询,即它是否生成与查询基表相同的结果。 -2. 选择最佳可行匹配,即需要读取最少颗粒数的匹配。 -3. 使用投影的查询管道将与使用原始分区的查询管道不同。如果某些分区中不存在投影,我们可以添加管道以即时"投影"它。 +投影存储在数据分片(part)目录中。它类似于索引,但包含一个子目录,用于存放一个匿名 `MergeTree` 表的分片。该表由投影的定义查询所派生。如果存在 `GROUP BY` 子句,则其底层存储引擎变为 [AggregatingMergeTree](aggregatingmergetree.md),并且所有聚合函数都会被转换为 `AggregateFunction`。如果存在 `ORDER BY` 子句,则该 `MergeTree` 表会将其作为主键表达式使用。在合并过程中,投影分片通过其存储引擎的合并流程进行合并。父表分片的校验和会与投影分片的校验和组合在一起。其他维护任务与跳过索引(skip index)类似。 +### 查询分析 \{#projection-query-analysis\} -## 并发数据访问 {#concurrent-data-access} +1. 检查投影是否可以用于回答给定查询,即它是否能生成与查询基表相同的结果。 +2. 选择最优的可行匹配方案,即需要读取的数据颗粒(granule)最少的那个。 +3. 使用投影的查询管道将不同于使用原始数据分片的管道。如果某些数据分片中缺少该投影,可以在查询管道中动态增加步骤以“实时投影”出来。 -对于并发表访问,ClickHouse 使用多版本控制机制。换句话说,当表被同时读取和更新时,数据从查询时刻的当前数据分片集合中读取。不存在长时间锁定。插入操作不会阻塞读取操作。 +## 并发数据访问 \{#concurrent-data-access\} -表的读取操作会自动并行化。 +对于对表的并发访问,我们使用多版本机制。换句话说,当一个表被同时读取和更新时,查询会从在查询时刻“当前”的那一组数据分片中读取数据。不会出现长时间持有的锁。插入操作不会阻塞读取操作。 +从表中读取会自动并行执行。 -## 列和表的 TTL {#table_engine-mergetree-ttl} +## 列和表的 TTL -确定数据值的生存时间。 +用于指定数据值的生命周期。 -`TTL` 子句可以为整个表和每个单独的列设置。表级 `TTL` 还可以指定在磁盘和卷之间自动移动数据的逻辑,或对所有数据已过期的部分进行重新压缩。 +可以为整张表以及每个单独的列设置 `TTL` 子句。表级 `TTL` 还可以指定在不同磁盘和卷之间自动迁移数据的逻辑,或者对数据已全部过期的部件进行重新压缩。 -表达式的求值结果必须为 [Date](/sql-reference/data-types/date.md)、[Date32](/sql-reference/data-types/date32.md)、[DateTime](/sql-reference/data-types/datetime.md) 或 [DateTime64](/sql-reference/data-types/datetime64.md) 数据类型。 +表达式的计算结果必须是 [Date](/sql-reference/data-types/date.md)、[Date32](/sql-reference/data-types/date32.md)、[DateTime](/sql-reference/data-types/datetime.md) 或 [DateTime64](/sql-reference/data-types/datetime64.md) 数据类型。 **语法** -为列设置生存时间: +为列设置 TTL(生存时间): ```sql TTL time_column TTL time_column + interval ``` -要定义 `interval`,请使用[时间间隔](/sql-reference/operators#operators-for-working-with-dates-and-times)运算符,例如: +要定义 `interval`,请使用 [时间间隔](/sql-reference/operators#operators-for-working-with-dates-and-times) 运算符,例如: ```sql TTL date_time + INTERVAL 1 MONTH TTL date_time + INTERVAL 15 HOUR ``` -### 列 TTL {#mergetree-column-ttl} -当列中的值过期时,ClickHouse 会将它们替换为该列数据类型的默认值。如果数据部分中某列的所有值都过期,ClickHouse 会从文件系统的数据部分中删除该列。 +### 列 TTL \{#mergetree-column-ttl\} + +当列中的值过期时,ClickHouse 会将其替换为该列数据类型的默认值。如果某个数据部分中该列的所有值都已过期,ClickHouse 会从文件系统中的该数据部分删除此列。 `TTL` 子句不能用于键列。 **示例** -#### 创建带有 `TTL` 的表: {#creating-a-table-with-ttl} +#### 创建带 `TTL` 的表: ```sql CREATE TABLE tab @@ -657,7 +652,8 @@ PARTITION BY toYYYYMM(d) ORDER BY d; ``` -#### 为现有表的列添加 TTL {#adding-ttl-to-a-column-of-an-existing-table} + +#### 向现有表的列添加 TTL ```sql ALTER TABLE tab @@ -665,7 +661,8 @@ ALTER TABLE tab c String TTL d + INTERVAL 1 DAY; ``` -#### 修改列的 TTL {#altering-ttl-of-the-column} + +#### 更改列的 TTL ```sql ALTER TABLE tab @@ -673,26 +670,27 @@ ALTER TABLE tab c String TTL d + INTERVAL 1 MONTH; ``` -### 表 TTL {#mergetree-table-ttl} -表可以有一个用于删除过期行的表达式,以及多个用于在[磁盘或卷](#table_engine-mergetree-multiple-volumes)之间自动移动部分的表达式。当表中的行过期时,ClickHouse 会删除所有相应的行。对于部分的移动或重新压缩,该部分的所有行都必须满足 `TTL` 表达式条件。 +### 表 TTL + +表可以定义一个用于删除过期行的表达式,以及多个用于在[磁盘或卷](#table_engine-mergetree-multiple-volumes)之间自动迁移分片的表达式。当表中的行过期时,ClickHouse 会删除所有对应的行。对于分片移动或重新压缩操作,某个分片中的所有行都必须满足 `TTL` 表达式所定义的条件。 ```sql -TTL expr - [DELETE|RECOMPRESS codec_name1|TO DISK 'xxx'|TO VOLUME 'xxx'][, DELETE|RECOMPRESS codec_name2|TO DISK 'aaa'|TO VOLUME 'bbb'] ... - [WHERE conditions] - [GROUP BY key_expr [SET v1 = aggr_func(v1) [, v2 = aggr_func(v2) ...]] ] +TTL 表达式 + [DELETE|RECOMPRESS 编解码器名称1|TO DISK 'xxx'|TO VOLUME 'xxx'][, DELETE|RECOMPRESS 编解码器名称2|TO DISK 'aaa'|TO VOLUME 'bbb'] ... + [WHERE 条件] + [GROUP BY 键表达式 [SET v1 = 聚合函数(v1) [, v2 = 聚合函数(v2) ...]] ] ``` -每个 TTL 表达式后面可以跟 TTL 规则的类型。它决定了当表达式满足条件(达到当前时间)时要执行的操作: +TTL 规则的类型可以紧跟在每个 TTL 表达式之后。它会影响在表达式满足条件(到达当前时间)时要执行的操作: -- `DELETE` - 删除过期行(默认操作); -- `RECOMPRESS codec_name` - 使用 `codec_name` 重新压缩数据部分; -- `TO DISK 'aaa'` - 将部分移动到磁盘 `aaa`; -- `TO VOLUME 'bbb'` - 将部分移动到卷 `bbb`; -- `GROUP BY` - 聚合过期行。 +* `DELETE` - 删除已过期的行(默认操作); +* `RECOMPRESS codec_name` - 使用 `codec_name` 重新压缩数据分片; +* `TO DISK 'aaa'` - 将分片移动到名为 `aaa` 的磁盘; +* `TO VOLUME 'bbb'` - 将分片移动到名为 `bbb` 的卷; +* `GROUP BY` - 聚合已过期的行。 -`DELETE` 操作可以与 `WHERE` 子句一起使用,根据过滤条件仅删除部分过期行: +`DELETE` 操作可以与 `WHERE` 子句一起使用,根据筛选条件只删除部分已过期的行: ```sql TTL time_column + INTERVAL 1 MONTH DELETE WHERE column = 'value' @@ -700,11 +698,12 @@ TTL time_column + INTERVAL 1 MONTH DELETE WHERE column = 'value' `GROUP BY` 表达式必须是表主键的前缀。 -如果某列不是 `GROUP BY` 表达式的一部分,且未在 `SET` 子句中显式设置,则结果行中该列将包含分组行中的任意值(就像对其应用了聚合函数 `any`)。 +如果某列既不是 `GROUP BY` 表达式的一部分,又没有在 `SET` 子句中显式设置,那么在结果行中,该列会包含分组行中的任意一个值(就像对该列应用了聚合函数 `any` 一样)。 **示例** -#### 创建带有 `TTL` 的表: {#creating-a-table-with-ttl-1} + +#### 创建带有 `TTL` 的表: ```sql CREATE TABLE tab @@ -720,15 +719,15 @@ TTL d + INTERVAL 1 MONTH DELETE, d + INTERVAL 2 WEEK TO DISK 'bbb'; ``` -#### 修改表的 `TTL`: {#altering-ttl-of-the-table} + +#### 修改表的 `TTL`: ```sql ALTER TABLE tab MODIFY TTL d + INTERVAL 1 DAY; ``` - -创建一个表,其中的行在一个月后过期。日期为星期一的过期行将被删除: +创建一个表,行在一个月后过期。对已过期的行,仅删除日期为星期一的记录: ```sql CREATE TABLE table_with_where @@ -742,7 +741,8 @@ ORDER BY d TTL d + INTERVAL 1 MONTH DELETE WHERE toDayOfWeek(d) = 1; ``` -#### 创建一个表,其中过期的行会被重新压缩: {#creating-a-table-where-expired-rows-are-recompressed} + +#### 创建对过期行重新压缩的表: ```sql CREATE TABLE table_for_recompression @@ -757,7 +757,7 @@ TTL d + INTERVAL 1 MONTH RECOMPRESS CODEC(ZSTD(17)), d + INTERVAL 1 YEAR RECOMPR SETTINGS min_rows_for_wide_part = 0, min_bytes_for_wide_part = 0; ``` -创建一个表,其中过期的行会被聚合。在结果行中,`x` 包含分组行中的最大值,`y` 包含最小值,`d` 包含分组行中的任意偶然值。 +创建一个用于聚合已过期行的表。最终结果行中,`x` 包含该分组内的最大值,`y` 为最小值,`d` 为该分组中的任意一个值。 ```sql CREATE TABLE table_for_aggregation @@ -773,57 +773,56 @@ ORDER BY (k1, k2) TTL d + INTERVAL 1 MONTH GROUP BY k1, k2 SET x = max(x), y = min(y); ``` -### 删除过期数据 {#mergetree-removing-expired-data} -当 ClickHouse 合并数据部分时,具有过期 `TTL` 的数据会被删除。 +### 删除过期数据 \{#mergetree-removing-expired-data\} + +TTL 已过期的数据会在 ClickHouse 合并数据部分时被删除。 -当 ClickHouse 检测到数据已过期时,它会执行计划外合并。要控制此类合并的频率,可以设置 `merge_with_ttl_timeout`。如果该值设置得过低,将执行大量计划外合并,可能会消耗大量资源。 +当 ClickHouse 检测到数据已过期时,会执行一次非计划合并。要控制此类合并的频率,可以设置 `merge_with_ttl_timeout`。如果该值过低,可能会触发大量非计划合并,消耗大量资源。 -如果在合并之间执行 `SELECT` 查询,可能会获取到过期数据。为避免这种情况,请在 `SELECT` 之前使用 [OPTIMIZE](/sql-reference/statements/optimize.md) 查询。 +在两次合并之间执行 `SELECT` 查询时,可能会读到已过期的数据。为避免这种情况,请在执行 `SELECT` 之前先执行 [OPTIMIZE](/sql-reference/statements/optimize.md) 查询。 **另请参阅** - [ttl_only_drop_parts](/operations/settings/merge-tree-settings#ttl_only_drop_parts) 设置 +## 磁盘类型 \{#disk-types\} -## 磁盘类型 {#disk-types} - -除本地块设备外,ClickHouse 还支持以下存储类型: +除了本地块设备之外,ClickHouse 还支持以下存储类型: - [`s3` 用于 S3 和 MinIO](#table_engine-mergetree-s3) - [`gcs` 用于 GCS](/integrations/data-ingestion/gcs/index.md/#creating-a-disk) - [`blob_storage_disk` 用于 Azure Blob Storage](/operations/storing-data#azure-blob-storage) - [`hdfs` 用于 HDFS](/engines/table-engines/integrations/hdfs) -- [`web` 用于 Web 只读访问](/operations/storing-data#web-storage) +- [`web` 用于从 Web 进行只读访问](/operations/storing-data#web-storage) - [`cache` 用于本地缓存](/operations/storing-data#using-local-cache) - [`s3_plain` 用于备份到 S3](/operations/backup#backuprestore-using-an-s3-disk) -- [`s3_plain_rewritable` 用于 S3 中的不可变非复制表](/operations/storing-data.md#s3-plain-rewritable-storage) - +- [`s3_plain_rewritable` 用于 S3 中的不可变且非复制的表](/operations/storing-data.md#s3-plain-rewritable-storage) -## 使用多个块设备存储数据 {#table_engine-mergetree-multiple-volumes} +## 使用多个块设备用于数据存储 \{#table_engine-mergetree-multiple-volumes\} -### 简介 {#introduction} +### 简介 \{#introduction\} -`MergeTree` 系列表引擎可以在多个块设备上存储数据。比如,当某个表的数据被隐式划分为“热数据”和“冷数据”时,这一特性就非常有用。最新数据会被频繁访问,但只占用少量空间;相反,长尾的历史数据很少被请求。如果有多块磁盘可用,“热数据”可以放在快速磁盘上(例如 NVMe SSD 或内存中),而“冷数据”则可以放在相对较慢的磁盘上(例如 HDD)。 +`MergeTree` 系列表引擎可以将数据存储在多个块设备上。举例来说,当某个表中的数据被隐式划分为「热数据」和「冷数据」时,这会非常有用。最新的数据会被频繁访问,但只占用很小的空间。相反,具有长尾特征的历史数据则很少被访问。如果有多块磁盘可用,可以将「热数据」放在高速磁盘上(例如 NVMe SSD 或内存中),而将「冷数据」放在相对较慢的磁盘上(例如 HDD)。 -数据部分(data part)是 `MergeTree` 引擎表中最小的可移动单元。属于同一数据部分的数据存储在同一块磁盘上。数据部分既可以根据用户设置在后台在磁盘之间移动,也可以通过 [ALTER](/sql-reference/statements/alter/partition) 查询进行移动。 +数据片段是 `MergeTree` 引擎表中可移动的最小单元。属于同一数据片段的数据存储在同一块磁盘上。数据片段既可以在后台根据用户设置在磁盘之间移动,也可以通过 [ALTER](/sql-reference/statements/alter/partition) 查询进行移动。 -### 术语 {#terms} +### 术语 \{#terms\} -- 磁盘(Disk)— 挂载到文件系统的块设备。 -- 默认磁盘(Default disk)— 存储 [path](/operations/server-configuration-parameters/settings.md/#path) 服务器设置中指定路径的磁盘。 -- 卷(Volume)— 一组同类磁盘的有序集合(类似于 [JBOD](https://en.wikipedia.org/wiki/Non-RAID_drive_architectures))。 -- 存储策略(Storage policy)— 一组卷及其之间数据迁移规则的组合。 +- Disk — 挂载到文件系统的块设备。 +- Default disk — 存储 [path](/operations/server-configuration-parameters/settings.md/#path) 服务器设置中所指定路径数据的磁盘。 +- Volume — 由一组相同磁盘按顺序组织而成的集合(类似于 [JBOD](https://en.wikipedia.org/wiki/Non-RAID_drive_architectures))。 +- Storage policy — 卷的集合以及在这些卷之间迁移数据的规则。 -上述实体的名称可以在系统表 [system.storage_policies](/operations/system-tables/storage_policies) 和 [system.disks](/operations/system-tables/disks) 中找到。要为某个表应用已配置的存储策略,请使用 `MergeTree` 系列表引擎的 `storage_policy` 设置。 +这些实体的名称可以在系统表 [system.storage_policies](/operations/system-tables/storage_policies) 和 [system.disks](/operations/system-tables/disks) 中找到。要为某个表应用已配置的存储策略之一,请在 `MergeTree` 引擎族表中使用 `storage_policy` 设置。 -### 配置 {#table_engine-mergetree-multiple-volumes_configure} +### 配置 -磁盘、卷和存储策略应在 `config.d` 目录中的文件里,在 `` 标签内进行声明。 +应在 `config.d` 目录下的配置文件中,通过 `` 标签声明磁盘、卷和存储策略。 :::tip -磁盘也可以在查询的 `SETTINGS` 部分中声明。这对于临时分析(ad-hoc)场景非常有用,比如临时挂载某个通过 URL 提供的磁盘。 -参见 [动态存储](/operations/storing-data#dynamic-configuration) 以了解更多细节。 +也可以在查询的 `SETTINGS` 部分声明磁盘。这对于临时分析时挂载磁盘(例如托管在某个 URL 上的磁盘)非常有用。 +更多详情参见[动态存储](/operations/storing-data#dynamic-configuration)。 ::: 配置结构: @@ -831,7 +830,7 @@ TTL d + INTERVAL 1 MONTH GROUP BY k1, k2 SET x = max(x), y = min(y); ```xml - + /mnt/fast_ssd/clickhouse/ @@ -852,11 +851,11 @@ TTL d + INTERVAL 1 MONTH GROUP BY k1, k2 SET x = max(x), y = min(y); 标签: -- `` — 磁盘名称。所有磁盘的名称必须各不相同。 -- `path` — 服务器用于存储数据(`data` 和 `shadow` 目录)的路径,应以 “/” 结尾。 -- `keep_free_space_bytes` — 需要预留的磁盘空闲空间大小。 +* `` — 磁盘名称。所有磁盘的名称必须互不相同。 +* `path` — 服务器用于存储数据(`data` 和 `shadow` 目录)的路径,必须以 '/' 结尾。 +* `keep_free_space_bytes` — 需要预留的空闲磁盘空间大小。 -磁盘定义的顺序并不重要。 +磁盘定义的顺序无关紧要。 存储策略配置标记: @@ -872,17 +871,17 @@ TTL d + INTERVAL 1 MONTH GROUP BY k1, k2 SET x = max(x), y = min(y); round_robin - + - + 0.2 - + - + ... @@ -892,18 +891,18 @@ TTL d + INTERVAL 1 MONTH GROUP BY k1, k2 SET x = max(x), y = min(y); * `policy_name_N` — 策略名称。策略名称必须唯一。 -* `volume_name_N` — 卷名称。卷名称必须唯一。 +* `volume_name_N` — 卷名。卷名必须唯一。 * `disk` — 卷中的一个磁盘。 -* `max_data_part_size_bytes` — 可以存储在该卷任意磁盘上的数据分片的最大大小。如果预估合并后的分片大小会大于 `max_data_part_size_bytes`,则该分片会被写入下一个卷。该功能基本上允许将新的/较小的分片保存在热点(SSD)卷上,并在它们变大时将其移动到冷存储(HDD)卷。对于仅包含一个卷的策略,不要使用此设置。 -* `move_factor` — 当可用空间比例低于该因子时,数据会自动开始移动到下一个卷(如果存在)(默认值为 0.1)。ClickHouse 会按大小将已有分片从大到小(降序)排序,并选择总大小足以满足 `move_factor` 条件的分片。如果所有分片的总大小仍不足,则会移动所有分片。 -* `perform_ttl_move_on_insert` — 是否在数据分片 INSERT 时执行 TTL 迁移。默认情况下(启用时),如果插入的数据分片已经满足 TTL 迁移规则而过期,则会立即被写入迁移规则中声明的卷/磁盘。如果目标卷/磁盘较慢(例如 S3),这会显著降低插入速度。如果禁用,则已过期的数据分片会先写入默认卷,然后再立即迁移到 TTL 卷。 -* `load_balancing` - 磁盘负载均衡策略,可选值为 `round_robin` 或 `least_used`。 -* `least_used_ttl_ms` - 配置所有磁盘可用空间信息的更新超时时间(毫秒)(`0` - 始终更新,`-1` - 从不更新,默认值为 `60000`)。注意,如果磁盘仅供 ClickHouse 使用,并且不会进行在线文件系统扩/缩容,则可以使用 `-1`;在其他所有情况下不推荐这样做,因为最终会导致空间分配不正确。 -* `prefer_not_to_merge` — 不应使用此设置。禁用该卷上的数据分片合并(这会有害并导致性能下降)。当启用该设置时(不要这么做),不允许在此卷上合并数据(这很糟糕)。这虽然允许(但你并不需要)控制(如果你想控制什么,那就是在犯错)ClickHouse 如何与慢磁盘交互(但 ClickHouse 更清楚,所以请不要使用此设置)。 -* `volume_priority` — 定义卷被填充的优先级(顺序)。数值越小优先级越高。参数值应为自然数,并整体覆盖从 1 到 N(最低优先级)之间的连续区间,中间不能跳过任何数字。 - * 如果 *所有* 卷都被打了标签,则按照给定顺序设定优先级。 - * 如果只有 *部分* 卷被打了标签,则未打标签的卷具有最低优先级,并按照它们在配置中定义的顺序确定优先级。 - * 如果 *没有* 卷被打标签,则其优先级按照它们在配置文件中的声明顺序确定。 +* `max_data_part_size_bytes` — 可以存储在任意卷磁盘上的数据分片的最大大小。如果预计合并后的分片大小会大于 `max_data_part_size_bytes`,那么该分片会被写入下一个卷。基本上,此功能允许将新的/较小的分片保存在“热”(SSD)卷上,并在它们变大时移动到“冷”(HDD)卷。如果你的策略只有一个卷,请不要使用此设置。 +* `move_factor` — 当可用空间比例低于该系数时,如果存在下一个卷,数据会自动开始移动到下一个卷(默认值为 0.1)。ClickHouse 会按从大到小(降序)对现有分片按大小排序,并选择其总大小足以满足 `move_factor` 条件的分片。如果所有分片的总大小仍不足,则会移动所有分片。 +* `perform_ttl_move_on_insert` — 禁用在插入数据分片(data part)时执行 TTL 移动。默认情况下(启用时),如果插入的分片根据 TTL 移动规则已经过期,它会立即被写入移动规则中指定的卷/磁盘。如果目标卷/磁盘较慢(例如 S3),这可能会显著减慢插入速度。如果禁用,则已过期的数据分片会先写入默认卷,然后紧接着再移动到 TTL 卷。 +* `load_balancing` - 磁盘负载均衡策略,`round_robin` 或 `least_used`。 +* `least_used_ttl_ms` - 配置在所有磁盘上更新可用空间的超时时间(毫秒)(`0` - 始终更新,`-1` - 从不更新,默认值为 `60000`)。注意,如果磁盘只能被 ClickHouse 使用,并且不会进行在线文件系统扩容/缩容,则可以使用 `-1`;在其他所有情况下都不推荐使用,因为最终会导致空间分布不正确。 +* `prefer_not_to_merge` — 你不应该使用此设置。禁用在该卷上合并数据分片(这有害并会导致性能下降)。当启用此设置时(不要这样做),不允许在该卷上进行数据合并(这很糟糕)。这允许你(但你并不需要)控制(如果你想控制什么,你就是在犯错)ClickHouse 如何与慢磁盘交互(但 ClickHouse 更了解情况,所以请不要使用此设置)。 +* `volume_priority` — 定义填充卷的优先级(顺序)。数值越小优先级越高。该参数的取值应为自然数,并且整体上从 1 到 N(给出的最低优先级)连续覆盖,中间不能缺少任何数字。 + * 如果 *所有* 卷都打了标签,则按给定顺序确定它们的优先级。 + * 如果只有 *部分* 卷打了标签,则未打标签的卷具有最低优先级,并按它们在配置中的定义顺序确定优先级。 + * 如果 *没有* 卷打标签,则它们的优先级对应于它们在配置中声明的顺序。 * 两个卷不能具有相同的优先级值。 配置示例: @@ -950,15 +949,15 @@ TTL d + INTERVAL 1 MONTH GROUP BY k1, k2 SET x = max(x), y = min(y); ``` -在给定的示例中,`hdd_in_order` 策略实现了[轮询](https://en.wikipedia.org/wiki/Round-robin_scheduling)方法。因此,该策略仅定义一个卷(`single`),数据部分按循环顺序存储在其所有磁盘上。如果系统挂载了多个相似的磁盘但未配置 RAID,这种策略会非常有用。请注意,每个单独的磁盘驱动器并不可靠,您可能需要使用 3 或更高的副本因子来补偿这一点。 +在给定的示例中,`hdd_in_order` 策略实现了 [round-robin](https://en.wikipedia.org/wiki/Round-robin_scheduling)(轮询)方式。因此,该策略仅定义了一个卷(`single`),数据 part 会以循环顺序存储在该卷的所有磁盘上。如果系统中挂载了多个相似的磁盘但没有配置 RAID,此类策略会非常有用。请记住,每个单独的磁盘驱动器都不够可靠,您可能需要通过将复制因子设置为 3 或更多来进行补偿。 -如果系统中有不同类型的磁盘可用,则可以使用 `moving_from_ssd_to_hdd` 策略。卷 `hot` 由一个 SSD 磁盘(`fast_ssd`)组成,可以存储在该卷上的数据部分的最大大小为 1GB。所有大于 1GB 的数据部分将直接存储在 `cold` 卷上,该卷包含一个 HDD 磁盘 `disk1`。 -此外,一旦磁盘 `fast_ssd` 的填充率超过 80%,数据将通过后台进程传输到 `disk1`。 +如果系统中存在不同类型的磁盘,可以使用 `moving_from_ssd_to_hdd` 策略。卷 `hot` 由一个 SSD 磁盘(`fast_ssd`)组成,可以存储在该卷上的单个 part 的最大大小为 1GB。所有大小超过 1GB 的 part 将直接存储在 `cold` 卷上,该卷包含一个 HDD 磁盘 `disk1`。 +另外,一旦磁盘 `fast_ssd` 的使用率超过 80%,后台进程会将数据迁移到 `disk1` 上。 -如果列出的卷中至少有一个没有明确的 `volume_priority` 参数,则存储策略中卷的枚举顺序很重要。 -一旦某个卷被填满,数据将移动到下一个卷。磁盘的枚举顺序同样重要,因为数据会轮流存储在这些磁盘上。 +在存储策略中,卷的列举顺序非常重要,尤其是在列出的卷中至少有一个未显式设置 `volume_priority` 参数时。 +一旦某个卷被写满,数据会被移动到下一个卷。磁盘的列举顺序同样重要,因为数据会依次存储到这些磁盘上。 -创建表时,可以对其应用已配置的存储策略之一: +在创建表时,可以为其应用一个已配置好的存储策略: ```sql CREATE TABLE table_with_non_default_policy ( @@ -972,49 +971,47 @@ PARTITION BY toYYYYMM(EventDate) SETTINGS storage_policy = 'moving_from_ssd_to_hdd' ``` -`default` 存储策略意味着仅使用一个卷,该卷仅包含 `` 中给定的一个磁盘。 -您可以在创建表后使用 [ALTER TABLE ... MODIFY SETTING] 查询更改存储策略,新策略应包含所有具有相同名称的旧磁盘和卷。 - -执行数据部分后台移动的线程数可以通过 [background_move_pool_size](/operations/server-configuration-parameters/settings.md/#background_move_pool_size) 设置进行更改。 +`default` 存储策略意味着只使用一个卷,该卷仅由 `` 中指定的一块磁盘组成。 +你可以在建表之后通过 [ALTER TABLE ... MODIFY SETTING] 查询更改存储策略,新策略必须包含所有原有的磁盘和卷,并使用相同的名称。 -### 详细信息 {#details} +用于在后台移动数据部分的线程数量可以通过 [background_move_pool_size](/operations/server-configuration-parameters/settings.md/#background_move_pool_size) 设置进行修改。 -对于 `MergeTree` 表,数据通过不同方式写入磁盘: -- 作为插入操作的结果(`INSERT` 查询)。 -- 在后台合并和[变更](/sql-reference/statements/alter#mutations)期间。 -- 从另一个副本下载时。 -- 作为分区冻结的结果 [ALTER TABLE ... FREEZE PARTITION](/sql-reference/statements/alter/partition#freeze-partition)。 +### 细节 \{#details\} -在除变更和分区冻结之外的所有这些情况下,数据部分根据给定的存储策略存储在卷和磁盘上: +对于 `MergeTree` 表,数据以不同的方式写入磁盘: -1. 选择第一个(按定义顺序)具有足够磁盘空间来存储数据部分(`unreserved_space > current_part_size`)并允许存储给定大小的数据部分(`max_data_part_size_bytes > current_part_size`)的卷。 -2. 在该卷内,选择紧随用于存储前一个数据块的磁盘之后的磁盘,并且该磁盘的可用空间大于数据部分大小(`unreserved_space - keep_free_space_bytes > current_part_size`)。 +- 作为插入操作(`INSERT` 查询)的结果。 +- 在执行后台合并和[变更](/sql-reference/statements/alter#mutations)时。 +- 从其他副本下载时。 +- 作为分区冻结 [ALTER TABLE ... FREEZE PARTITION](/sql-reference/statements/alter/partition#freeze-partition) 的结果。 -在底层,变更和分区冻结使用[硬链接](https://en.wikipedia.org/wiki/Hard_link)。不支持不同磁盘之间的硬链接,因此在这种情况下,生成的数据部分存储在与初始数据部分相同的磁盘上。 +在除变更和分区冻结之外的所有这些情况下,数据部件(part)会根据给定的存储策略被存储在某个卷和磁盘上: -在后台,数据部分根据可用空间量(`move_factor` 参数)按照配置文件中声明卷的顺序在卷之间移动。 -数据永远不会从最后一个卷传输到第一个卷。可以使用系统表 [system.part_log](/operations/system-tables/part_log)(字段 `type = MOVE_PART`)和 [system.parts](/operations/system-tables/parts.md)(字段 `path` 和 `disk`)来监控后台移动。此外,详细信息可以在服务器日志中找到。 +1. 选择第一个(按定义顺序)同时满足以下条件的卷:该卷拥有足够的磁盘空间来存储该部件(`unreserved_space > current_part_size`),并且允许存储该大小的部件(`max_data_part_size_bytes > current_part_size`)。 +2. 在该卷中,选择这样的磁盘:在上一次用于存储数据块的磁盘之后的那个磁盘,且其可用空间大于该部件的大小(`unreserved_space - keep_free_space_bytes > current_part_size`)。 -用户可以使用查询 [ALTER TABLE ... MOVE PART\|PARTITION ... TO VOLUME\|DISK ...](/sql-reference/statements/alter/partition) 强制将数据部分或分区从一个卷移动到另一个卷,所有后台操作的限制都会被考虑在内。该查询会自行启动移动操作,不会等待后台操作完成。如果可用空间不足或不满足任何必需条件,用户将收到错误消息。 +在底层实现中,变更和分区冻结会使用[硬链接](https://en.wikipedia.org/wiki/Hard_link)。不同磁盘之间不支持硬链接,因此在这些情况下,生成的部件会存储在与初始部件相同的磁盘上。 -移动数据不会干扰数据复制。因此,可以为不同副本上的同一张表指定不同的存储策略。 +在后台,部件会基于空闲空间的大小(`move_factor` 参数),按照配置文件中声明卷的顺序在卷之间移动。 +数据永远不会从最后一个卷迁出,也不会被迁移到第一个卷中。可以使用系统表 [system.part_log](/operations/system-tables/part_log)(字段 `type = MOVE_PART`)和 [system.parts](/operations/system-tables/parts.md)(字段 `path` 和 `disk`)来监控后台移动操作。更详细的信息可以在服务器日志中找到。 +用户可以通过查询 [ALTER TABLE ... MOVE PART\|PARTITION ... TO VOLUME\|DISK ...](/sql-reference/statements/alter/partition) 强制将某个部件或分区从一个卷移动到另一个卷,所有对后台操作的限制同样会被考虑在内。该查询会自行发起移动操作,而不会等待后台操作完成。如果没有足够的可用空间,或任一必需条件未满足,用户将收到一条错误信息。 -在后台合并和变更操作完成后,旧的数据块只有在经过一定时间(`old_parts_lifetime`)后才会被删除。 -在此期间,它们不会被移动到其他卷或磁盘。因此,在这些数据块被最终删除之前,评估已占用磁盘空间时仍会将其计算在内。 +数据移动不会影响数据复制。因此,可以在不同副本上的同一张表上指定不同的存储策略。 -用户可以使用 [min_bytes_to_rebalance_partition_over_jbod](/operations/settings/merge-tree-settings.md/#min_bytes_to_rebalance_partition_over_jbod) 设置,将新的大型数据块以均衡的方式分配到 [JBOD](https://en.wikipedia.org/wiki/Non-RAID_drive_architectures) 卷的不同磁盘上。 +在后台合并和变更完成后,旧部件只会在经过一定时间(`old_parts_lifetime`)后才会被删除。 +在此期间,它们不会被移动到其他卷或磁盘。因此,在这些部件被最终删除之前,它们仍然会被计入磁盘空间占用情况的计算中。 +用户可以使用 [min_bytes_to_rebalance_partition_over_jbod](/operations/settings/merge-tree-settings.md/#min_bytes_to_rebalance_partition_over_jbod) 设置,将新的大型部件在 [JBOD](https://en.wikipedia.org/wiki/Non-RAID_drive_architectures) 卷的不同磁盘上以均衡的方式进行分配。 +## 使用外部存储进行数据存储 -## 使用外部存储存储数据 {#table_engine-mergetree-s3} +[MergeTree](/engines/table-engines/mergetree-family/mergetree.md) 系列表引擎可以通过类型分别为 `s3`、`azure_blob_storage`、`hdfs` 的磁盘,将数据存储到 `S3`、`AzureBlobStorage`、`HDFS` 中。有关更多详细信息,请参见[配置外部存储选项](/operations/storing-data.md/#configuring-external-storage)。 -[MergeTree](/engines/table-engines/mergetree-family/mergetree.md) 系列表引擎可以通过类型为 `s3`、`azure_blob_storage`、`hdfs` 的磁盘将数据分别存储到 `S3`、`AzureBlobStorage`、`HDFS`。更多详情请参阅[配置外部存储选项](/operations/storing-data.md/#configuring-external-storage)。 +下面是使用类型为 `s3` 的磁盘,将 [S3](https://aws.amazon.com/s3/) 用作外部存储的示例。 -以下示例展示了如何使用类型为 `s3` 的磁盘将 [S3](https://aws.amazon.com/s3/) 作为外部存储。 - -配置标记: +配置示例: ```xml @@ -1058,33 +1055,33 @@ SETTINGS storage_policy = 'moving_from_ssd_to_hdd' 另请参阅[配置外部存储选项](/operations/storing-data.md/#configuring-external-storage)。 :::note 缓存配置 -ClickHouse 版本 22.3 至 22.7 使用不同的缓存配置,如果您使用的是这些版本,请参阅[使用本地缓存](/operations/storing-data.md/#using-local-cache)。 +ClickHouse 版本 22.3 至 22.7 使用了不同的缓存配置,如果你正在使用这些版本之一,请参阅[使用本地缓存](/operations/storing-data.md/#using-local-cache)。 ::: -## 虚拟列 {#virtual-columns} +## 虚拟列 \{#virtual-columns\} -- `_part` — 数据分片的名称。 -- `_part_index` — 数据分片在查询结果中的顺序索引。 -- `_part_starting_offset` — 数据分片在查询结果中的累计起始行号。 -- `_part_offset` — 数据分片中的行号。 -- `_part_granule_offset` — 数据分片中的颗粒编号。 +- `_part` — 数据部分(part)的名称。 +- `_part_index` — 该数据部分在查询结果中的顺序索引。 +- `_part_starting_offset` — 该数据部分在查询结果中的累计起始行号。 +- `_part_offset` — 该数据部分中的行号。 +- `_part_granule_offset` — 该数据部分中的 granule 编号。 - `_partition_id` — 分区的名称。 -- `_part_uuid` — 数据分片的唯一标识符(如果启用了 MergeTree 设置 `assign_part_uuids`)。 -- `_part_data_version` — 数据分片的数据版本(最小块编号或变更版本)。 -- `_partition_value` — `partition by` 表达式的值(元组)。 -- `_sample_factor` — 采样因子(来自查询)。 -- `_block_number` — 插入时为行分配的原始块编号,当启用设置 `enable_block_number_column` 时在合并操作中保留。 -- `_block_offset` — 插入时为行分配的块内原始行号,当启用设置 `enable_block_offset_column` 时在合并操作中保留。 +- `_part_uuid` — 数据部分的唯一标识符(如果启用了 MergeTree 设置 `assign_part_uuids`)。 +- `_part_data_version` — 数据部分的数据版本(最小块号或变更版本)。 +- `_partition_value` — `partition by` 表达式的值(一个元组)。 +- `_sample_factor` — 采样因子(来自查询)。 +- `_block_number` — 插入时为该行分配的原始块号;在启用设置 `enable_block_number_column` 时,在合并过程中会被保留。 +- `_block_offset` — 插入时为该行在块中的原始行号;在启用设置 `enable_block_offset_column` 时,在合并过程中会被保留。 - `_disk_name` — 用于存储的磁盘名称。 - -## 列统计信息 {#column-statistics} +## 列统计信息 + -在启用 `set allow_experimental_statistics = 1` 后,可以在 `*MergeTree*` 系列表的 `CREATE` 查询的列定义部分声明统计信息。 +在启用 `set allow_experimental_statistics = 1` 时,对于 `*MergeTree*` 系列表,可以在 `CREATE` 查询的列(columns)部分中声明统计信息。 ```sql CREATE TABLE tab @@ -1096,69 +1093,69 @@ ENGINE = MergeTree ORDER BY a ``` -也可以使用 `ALTER` 语句来操作统计信息。 +我们也可以使用 `ALTER` 语句来调整统计信息。 ```sql ALTER TABLE tab ADD STATISTICS b TYPE TDigest, Uniq; ALTER TABLE tab DROP STATISTICS a; ``` -这些轻量级统计信息汇总了列中值的分布信息。统计信息存储在每个数据部分中,并在每次插入数据时更新。 -只有在启用 `set allow_statistics_optimize = 1` 时,才能将其用于 prewhere 优化。 +这些轻量级统计信息汇总了列中值的分布情况。统计信息存储在每个数据片段中,并在每次插入时都会更新。 +只有在启用 `set allow_statistics_optimize = 1` 时,它们才会用于 `PREWHERE` 优化。 + -### 可用的列统计信息类型 {#available-types-of-column-statistics} +### 可用的列统计类型 \{#available-types-of-column-statistics\} - `MinMax` - 列的最小值和最大值,用于估算数值列上范围过滤器的选择性。 + 列的最小值和最大值,用于估计数值列上范围过滤条件的选择性。 - 语法:`minmax` + 语法:`minmax` - `TDigest` - [TDigest](https://github.com/tdunning/t-digest) 草图,用于计算数值列的近似百分位数(例如第 90 百分位数)。 + [TDigest](https://github.com/tdunning/t-digest) Sketch 数据结构,用于计算数值列的近似分位数(例如第 90 个百分位数)。 - 语法:`tdigest` + 语法:`tdigest` - `Uniq` - [HyperLogLog](https://en.wikipedia.org/wiki/HyperLogLog) 草图,用于估算列中不同值的数量。 + [HyperLogLog](https://en.wikipedia.org/wiki/HyperLogLog) Sketch 数据结构,用于估算某列中包含的不同值的数量。 - 语法:`uniq` + 语法:`uniq` - `CountMin` - [CountMin](https://en.wikipedia.org/wiki/Count%E2%80%93min_sketch) 草图,用于提供列中每个值出现频率的近似计数。 - - 语法:`countmin` + [CountMin](https://en.wikipedia.org/wiki/Count%E2%80%93min_sketch) Sketch 数据结构,用于对某列中每个值的出现频率进行近似计数。 -### 支持的数据类型 {#supported-data-types} + 语法:`countmin` -| | (U)Int*, Float*, Decimal(_), Date_, Boolean, Enum\* | String 或 FixedString | -| -------- | --------------------------------------------------- | --------------------- | -| CountMin | ✔ | ✔ | -| MinMax | ✔ | ✗ | -| TDigest | ✔ | ✗ | -| Uniq | ✔ | ✔ | +### 支持的数据类型 \{#supported-data-types\} -### 支持的操作 {#supported-operations} +| | (U)Int*, Float*, Decimal(*), Date*, Boolean, Enum* | String 或 FixedString | +|-----------|----------------------------------------------------|-----------------------| +| CountMin | ✔ | ✔ | +| MinMax | ✔ | ✗ | +| TDigest | ✔ | ✗ | +| Uniq | ✔ | ✔ | -| | 等值过滤器 (==) | 范围过滤器 (`>, >=, <, <=`) | -| -------- | --------------------- | ------------------------------ | -| CountMin | ✔ | ✗ | -| MinMax | ✗ | ✔ | -| TDigest | ✗ | ✔ | -| Uniq | ✔ | ✗ | +### 支持的操作 \{#supported-operations\} +| | 等值过滤 (==) | 范围过滤 (`>, >=, <, <=`) | +|-----------|----------------|---------------------------| +| CountMin | ✔ | ✗ | +| MinMax | ✗ | ✔ | +| TDigest | ✗ | ✔ | +| Uniq | ✔ | ✗ | -## 列级设置 {#column-level-settings} +## 列级别设置 -某些 MergeTree 设置可以在列级别覆盖: +某些 MergeTree 设置可以在列级别进行覆盖: -- `max_compress_block_size` — 写入表时压缩前未压缩数据块的最大大小。 -- `min_compress_block_size` — 写入下一个标记时压缩所需的未压缩数据块的最小大小。 +* `max_compress_block_size` — 在写入表之前,对未压缩数据块进行压缩时所允许的最大未压缩数据块大小。 +* `min_compress_block_size` — 在写入下一个标记时,为执行压缩所需的最小未压缩数据块大小。 -示例: +示例: ```sql CREATE TABLE tab @@ -1170,21 +1167,21 @@ ENGINE = MergeTree ORDER BY id ``` -列级设置可以使用 [ALTER MODIFY COLUMN](/sql-reference/statements/alter/column.md) 进行修改或删除,例如: +可以使用 [ALTER MODIFY COLUMN](/sql-reference/statements/alter/column.md) 修改或删除列级设置,例如: -- 从列声明中删除 `SETTINGS`: +* 从列定义中删除 `SETTINGS`: ```sql ALTER TABLE tab MODIFY COLUMN document REMOVE SETTINGS; ``` -- 修改设置: +* 修改某项设置: ```sql ALTER TABLE tab MODIFY COLUMN document MODIFY SETTING min_compress_block_size = 8192; ``` -- 重置一个或多个设置,同时从表的 CREATE 查询的列表达式中删除设置声明。 +* 重置一个或多个设置,同时会从该表的 `CREATE` 查询语句中的列表达式里删除相应的设置声明。 ```sql ALTER TABLE tab MODIFY COLUMN document RESET SETTING min_compress_block_size; diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/alias.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/alias.md index 51bd7bf315c..1a469714692 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/alias.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/alias.md @@ -1,5 +1,5 @@ --- -description: 'Alias 表引擎会创建到另一张表的透明代理。所有操作都会被转发到目标表,而别名表自身不存储任何数据。' +description: 'Alias 表引擎创建一个指向另一张表的透明代理。所有操作都会转发至目标表,而别名本身不存储任何数据。' sidebar_label: 'Alias' sidebar_position: 5 slug: /engines/table-engines/special/alias @@ -7,19 +7,26 @@ title: 'Alias 表引擎' doc_type: 'reference' --- +import ExperimentalBadge from '@theme/badges/ExperimentalBadge'; # Alias 表引擎 -`Alias` 引擎会创建一个指向另一张表的代理表。所有读写操作都会转发到目标表,而别名表本身不存储任何数据,只维护对目标表的引用。 + +`Alias` 引擎会创建指向另一张表的代理。所有读写操作都会被转发到目标表,而别名表本身不存储任何数据,只维护对目标表的引用。 +:::info +这是一个实验性特性,在未来版本中可能会以不向后兼容的方式发生变更。 +要启用 Alias 表引擎,请通过设置 [allow_experimental_alias_table_engine](/operations/settings/settings#allow_experimental_alias_table_engine)。 +输入命令 `set allow_experimental_alias_table_engine = 1`。 +::: ## 创建表 ```sql -CREATE TABLE [数据库名.]别名表名 -ENGINE = Alias(目标表) +CREATE TABLE [db_name.]alias_name +ENGINE = Alias(target_table) ``` 或者显式地指定数据库名称: @@ -30,20 +37,19 @@ ENGINE = Alias(target_db, target_table) ``` :::note -`Alias` 表不支持显式定义列。列会自动从目标表继承,这可以确保别名表始终与目标表的表结构保持一致。 +`Alias` 表不支持显式定义列。列会自动从目标表继承,从而确保该别名表始终与目标表的 schema 保持一致。 ::: ## 引擎参数 {#engine-parameters} -- **`target_db (optional)`** — 目标表所在数据库的名称。 -- **`target_table`** — 目标表名称。 - - +- **`target_db(可选)`** — 包含目标表的数据库名称。 +- **`target_table`** — 目标表的名称。 ## 支持的操作 {#supported-operations} `Alias` 表引擎支持所有主要操作。 + ### 目标表上的操作 {#operations-on-target} 这些操作会被转发到目标表: @@ -52,27 +58,25 @@ ENGINE = Alias(target_db, target_table) |-----------|---------|-------------| | `SELECT` | ✅ | 从目标表读取数据 | | `INSERT` | ✅ | 向目标表写入数据 | -| `INSERT SELECT` | ✅ | 向目标表执行批量插入 | +| `INSERT SELECT` | ✅ | 批量向目标表插入数据 | | `ALTER TABLE ADD COLUMN` | ✅ | 向目标表添加列 | -| `ALTER TABLE MODIFY SETTING` | ✅ | 修改目标表设置 | +| `ALTER TABLE MODIFY SETTING` | ✅ | 修改目标表的设置 | | `ALTER TABLE PARTITION` | ✅ | 在目标表上执行分区操作(DETACH/ATTACH/DROP) | -| `ALTER TABLE UPDATE` | ✅ | 更新目标表中的行(变更,mutation) | -| `ALTER TABLE DELETE` | ✅ | 从目标表删除行(变更,mutation) | -| `OPTIMIZE TABLE` | ✅ | 优化目标表(合并数据分片) | +| `ALTER TABLE UPDATE` | ✅ | 更新目标表中的行(mutation 变更) | +| `ALTER TABLE DELETE` | ✅ | 从目标表删除行(mutation 变更) | +| `OPTIMIZE TABLE` | ✅ | 优化目标表(合并数据片段) | | `TRUNCATE TABLE` | ✅ | 截断目标表 | ### 对别名本身的操作 {#operations-on-alias} -这些操作只影响别名,**不会**影响目标表: +这些操作只会影响别名,**不会**影响目标表: -| Operation | Support | Description | +| 操作 | 支持情况 | 描述 | |-----------|---------|-------------| | `DROP TABLE` | ✅ | 仅删除别名,目标表保持不变 | | `RENAME TABLE` | ✅ | 仅重命名别名,目标表保持不变 | - - -## 用法示例 +## 使用示例 {#usage-examples} ### 创建基本别名 @@ -104,9 +108,10 @@ SELECT * FROM data_alias; └────┴──────┴───────┘ ``` + ### 跨数据库别名 -创建一个指向其他数据库中某张表的别名: +创建一个指向不同数据库中某个表的别名: ```sql -- 创建数据库 @@ -121,20 +126,21 @@ CREATE TABLE db1.events ( ) ENGINE = MergeTree ORDER BY timestamp; --- 在 db2 中创建指向 db1.events 的别名 +-- 在 db2 中创建指向 db1.events 的别名表 CREATE TABLE db2.events_alias ENGINE = Alias('db1', 'events'); -- 或使用 database.table 格式 CREATE TABLE db2.events_alias2 ENGINE = Alias('db1.events'); --- 两个别名的工作方式相同 +-- 两个别名表的功能完全相同 INSERT INTO db2.events_alias VALUES (now(), 'click', 100); SELECT * FROM db2.events_alias2; ``` -### 通过别名进行写入操作 -所有写入操作都会转发到目标表: +### 通过别名执行写入操作 + +经由别名的所有写入操作都会被转发到其目标表: ```sql CREATE TABLE metrics ( @@ -146,25 +152,26 @@ ORDER BY ts; CREATE TABLE metrics_alias ENGINE = Alias('metrics'); --- 通过别名插入数据 +-- 通过别名插入 INSERT INTO metrics_alias VALUES (now(), 'cpu_usage', 45.2), (now(), 'memory_usage', 78.5); --- 使用 SELECT 语句插入数据 +-- 使用 SELECT 插入 INSERT INTO metrics_alias SELECT now(), 'disk_usage', number * 10 FROM system.numbers LIMIT 5; --- 验证数据已写入目标表 +-- 验证目标表中的数据 SELECT count() FROM metrics; -- 返回 7 SELECT count() FROM metrics_alias; -- 返回 7 ``` + ### 表结构修改 -`ALTER` 操作会修改目标表的表结构: +`ALTER` 操作用于修改目标表的表结构: ```sql CREATE TABLE users ( @@ -178,7 +185,7 @@ CREATE TABLE users_alias ENGINE = Alias('users'); -- 通过别名添加列 ALTER TABLE users_alias ADD COLUMN email String DEFAULT ''; --- 列被添加到目标表 +-- 列已添加至目标表 DESCRIBE users; ``` @@ -190,9 +197,10 @@ DESCRIBE users; └───────┴────────┴──────────────┴────────────────────┘ ``` + ### 数据变更 -支持 `UPDATE` 和 `DELETE` 操作: +支持 UPDATE 和 DELETE 操作: ```sql CREATE TABLE products ( @@ -216,7 +224,7 @@ ALTER TABLE products_alias UPDATE price = price * 1.1 WHERE status = 'active'; -- 通过别名进行删除 ALTER TABLE products_alias DELETE WHERE status = 'inactive'; --- 变更将应用到目标表 +-- 更改将应用到目标表 SELECT * FROM products ORDER BY id; ``` @@ -227,10 +235,10 @@ SELECT * FROM products ORDER BY id; └────┴──────────┴───────┴────────┘ ``` -### 分区操作 -对于分区表,分区操作会转发: +### 分区操作 +对于分区表,分区操作将被转发: ```sql CREATE TABLE logs ( @@ -259,9 +267,10 @@ ALTER TABLE logs_alias ATTACH PARTITION '202402'; SELECT count() FROM logs_alias; -- 返回 3 ``` + ### 表优化 -OPTIMIZE 操作会在目标表中合并数据分片: +对目标表中的分片执行合并优化操作: ```sql CREATE TABLE events ( @@ -272,27 +281,28 @@ ORDER BY id; CREATE TABLE events_alias ENGINE = Alias('events'); --- 多次插入创建多个数据部分 +-- 多次插入创建多个部分 INSERT INTO events_alias VALUES (1, 'data1'); INSERT INTO events_alias VALUES (2, 'data2'); INSERT INTO events_alias VALUES (3, 'data3'); --- 检查数据部分数量 +-- 检查部分数量 SELECT count() FROM system.parts WHERE database = currentDatabase() AND table = 'events' AND active; --- 通过别名表优化 +-- 通过别名优化 OPTIMIZE TABLE events_alias FINAL; --- 数据部分在目标表中合并 +-- 部分在目标表中合并 SELECT count() FROM system.parts WHERE database = currentDatabase() AND table = 'events' AND active; -- 返回 1 ``` + ### 别名管理 可以分别对别名进行重命名或删除: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/index.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/index.md index 52362661982..a3e8ccf17a0 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/index.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/index.md @@ -11,42 +11,20 @@ doc_type: 'reference' # 特殊表引擎 -表引擎主要分为三大类: - -* [MergeTree 引擎家族](../../../engines/table-engines/mergetree-family/index.md),用于主要的生产场景。 -* [Log 引擎家族](../../../engines/table-engines/log-family/index.md),用于小规模的临时数据。 -* [用于集成的表引擎](../../../engines/table-engines/integrations/index.md)。 - -其余引擎在用途上各不相同,目前尚未归入某个家族,因此被归类到这个「特殊」类别中。 - -{/* 本页的目录表由以下脚本自动生成: - https://github.com/ClickHouse/clickhouse-docs/blob/main/scripts/autogenerate-table-of-contents.sh - 该脚本会根据 YAML front matter 字段:slug、description、title 生成目录。 - - 如果发现错误,请直接编辑对应页面的 YAML front matter。 - */ } - - -{/*AUTOGENERATED_START*/ } - -| Page | Description | -| ---------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | -| [Alias table engine](/engines/table-engines/special/alias) | Alias 表引擎创建到另一张表的透明代理。所有操作都会被转发到目标表,而别名本身不存储任何数据。 | -| [Distributed table engine](/engines/table-engines/special/distributed) | 使用 Distributed 引擎的表本身不存储任何数据,但允许在多台服务器上进行分布式查询处理。读取会自动并行化。在读取期间,如果远程服务器上有表索引,则会使用这些索引。 | -| [Dictionary table engine](/engines/table-engines/special/dictionary) | `Dictionary` 引擎将字典数据展示为一张 ClickHouse 表。 | -| [Merge table engine](/engines/table-engines/special/merge) | `Merge` 引擎(不要与 `MergeTree` 混淆)本身不存储数据,但允许同时从任意数量的其他表中读取数据。 | -| [Executable and ExecutablePool table engines](/engines/table-engines/special/executable) | `Executable` 和 `ExecutablePool` 表引擎允许定义一张表,其行由你定义的脚本生成(通过向 **stdout** 写入行)。 | -| [File table engine](/engines/table-engines/special/file) | File 表引擎将数据保存在文件中,文件格式为支持的格式之一(`TabSeparated`、`Native` 等)。 | -| [Null table engine](/engines/table-engines/special/null) | 向 `Null` 表写入时,数据会被忽略。从 `Null` 表读取时,响应为空。 | -| [Set table engine](/engines/table-engines/special/set) | 始终存储在 RAM 中的数据集。它旨在用于 `IN` 运算符的右侧。 | -| [Join table engine](/engines/table-engines/special/join) | 用于 JOIN 操作的可选预构建数据结构。 | -| [URL table engine](/engines/table-engines/special/url) | 从远程 HTTP/HTTPS 服务器读取或写入数据。此引擎类似于 File 引擎。 | -| [View table engine](/engines/table-engines/special/view) | 用于实现视图(更多信息请参见 `CREATE VIEW query`)。它不存储数据,而只存储指定的 `SELECT` 查询。从该表读取时,会运行此查询(并从查询中删除所有不需要的列)。 | -| [Memory table engine](/engines/table-engines/special/memory) | Memory 引擎以未压缩形式将数据存储在 RAM 中。数据以读取时接收到的完全相同形式存储。换句话说,从此表中读取几乎不消耗资源。 | -| [Buffer table engine](/engines/table-engines/special/buffer) | 在 RAM 中对要写入的数据进行缓冲,并定期将其刷新到另一张表中。在读取操作期间,会同时从缓冲区和另一张表中读取数据。 | -| [External data for query processing](/engines/table-engines/special/external-data) | ClickHouse 允许在发送 `SELECT` 查询时,连同查询一起向服务器发送处理该查询所需的数据。此数据会被放入一张临时表中,并可在查询中使用(例如在 `IN` 运算符中)。 | -| [GenerateRandom table engine](/engines/table-engines/special/generate) | GenerateRandom 表引擎根据给定的表结构生成随机数据。 | -| [KeeperMap table engine](/engines/table-engines/special/keeper-map) | 此引擎允许将 Keeper/ZooKeeper 集群用作一致性的键值存储,提供线性化写入和顺序一致的读取。 | -| [FileLog table engine](/engines/table-engines/special/filelog) | 此引擎允许将应用程序日志文件作为记录流进行处理。 | - -{/*AUTOGENERATED_END*/ } +表引擎主要分为三大类: + +- [MergeTree 引擎系列](../../../engines/table-engines/mergetree-family/index.md) 用于主要生产环境。 +- [Log 引擎系列](../../../engines/table-engines/log-family/index.md) 用于小型临时数据。 +- [集成表引擎](../../../engines/table-engines/integrations/index.md)。 + +其余引擎在用途上各具特色,尚未归入任何系列,因此被归类到这个"特殊"类别中。 + + + + + diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_deb_install.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_deb_install.md index 397f2b6f8d9..b3e89847107 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_deb_install.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_deb_install.md @@ -19,18 +19,28 @@ import TabItem from '@theme/TabItem'; ```bash # 安装先决条件软件包 sudo apt-get install -y apt-transport-https ca-certificates curl gnupg +``` + # 下载 ClickHouse 的 GPG 密钥并将其存储到密钥环中 curl -fsSL 'https://packages.clickhouse.com/rpm/lts/repodata/repomd.xml.key' | sudo gpg --dearmor -o /usr/share/keyrings/clickhouse-keyring.gpg + + # 获取系统架构 ARCH=$(dpkg --print-architecture) + + # 将 ClickHouse 仓库添加到 APT 软件源列表 echo "deb [signed-by=/usr/share/keyrings/clickhouse-keyring.gpg arch=${ARCH}] https://packages.clickhouse.com/deb stable main" | sudo tee /etc/apt/sources.list.d/clickhouse.list + + # 更新 apt 软件包列表 + sudo apt-get update + ``` - 您可以将 `stable` 替换为 `lts`,以根据需要使用不同的[发布通道](/knowledgebase/production)。 @@ -38,32 +48,49 @@ sudo apt-get update
用于安装 deb 软件包的旧分发方式 +``` + ```bash # 安装前置依赖包 sudo apt-get install apt-transport-https ca-certificates dirmngr +``` + # 添加 ClickHouse GPG 密钥用于验证软件包 sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 8919F6BD2B48D754 + + # 将 ClickHouse 软件仓库添加到 apt 源列表 echo "deb https://packages.clickhouse.com/deb stable main" | sudo tee \ /etc/apt/sources.list.d/clickhouse.list + + # 更新 apt 软件包列表 sudo apt-get update + + # 安装 ClickHouse 服务端和客户端软件包 sudo apt-get install -y clickhouse-server clickhouse-client + + # 启动 ClickHouse 服务 sudo service clickhouse-server start + + # 启动 ClickHouse 命令行客户端 + clickhouse-client # 如果已设置密码,请使用 "clickhouse-client --password"。 + ```
+``` ## 安装 ClickHouse 服务端和客户端 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/install/debian_ubuntu.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/install/debian_ubuntu.md index 9f5e1f73f24..073feaeb65a 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/install/debian_ubuntu.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/install/debian_ubuntu.md @@ -10,4 +10,4 @@ doc_type: 'guide' import DebianProd from './_snippets/_deb_install.md' - + diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/asyncinserts.md b/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/asyncinserts.md index ee860eaf033..45e0eee39b9 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/asyncinserts.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/asyncinserts.md @@ -7,6 +7,6 @@ doc_type: 'guide' keywords: ['异步插入', 'async_insert', '最佳实践', '批量写入', '性能优化'] --- -import Content from '@site/i18n/zh/docusaurus-plugin-content-docs/current/best-practices/_snippets/_async_inserts.md'; +import Content from '@site/docs/best-practices/_snippets/_async_inserts.md'; diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/avoidmutations.md b/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/avoidmutations.md index ce6daf1e701..6c812a64cb9 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/avoidmutations.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/avoidmutations.md @@ -7,6 +7,6 @@ doc_type: 'guide' keywords: ['避免 mutations', 'ALTER 查询', '表数据修改', '最佳实践', '性能优化'] --- -import Content from '@site/i18n/zh/docusaurus-plugin-content-docs/current/best-practices/_snippets/_avoid_mutations.md'; +import Content from '@site/docs/best-practices/_snippets/_avoid_mutations.md'; diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/avoidnullablecolumns.md b/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/avoidnullablecolumns.md index 9edcb74f72d..318a8479b67 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/avoidnullablecolumns.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/avoidnullablecolumns.md @@ -7,6 +7,6 @@ doc_type: 'guide' keywords: ['避免 Nullable 列', 'Nullable 列', '数据类型', '最佳实践', '性能优化'] --- -import Content from '@site/i18n/zh/docusaurus-plugin-content-docs/current/best-practices/_snippets/_avoid_nullable_columns.md'; +import Content from '@site/docs/best-practices/_snippets/_avoid_nullable_columns.md'; diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/avoidoptimizefinal.md b/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/avoidoptimizefinal.md index fa1d99122f5..3dc48ed6ec4 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/avoidoptimizefinal.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/avoidoptimizefinal.md @@ -7,6 +7,6 @@ doc_type: 'guide' keywords: ['避免 optimize final', 'optimize table final', '最佳实践', '合并数据片段', '性能优化'] --- -import Content from '@site/i18n/zh/docusaurus-plugin-content-docs/current/best-practices/_snippets/_avoid_optimize_final.md'; +import Content from '@site/docs/best-practices/_snippets/_avoid_optimize_final.md'; diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/bulkinserts.md b/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/bulkinserts.md index a4184d06fce..7990bb7bd5a 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/bulkinserts.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/bulkinserts.md @@ -7,6 +7,6 @@ keywords: ['批量插入', '批处理插入', '插入优化'] doc_type: 'guide' --- -import Content from '@site/i18n/zh/docusaurus-plugin-content-docs/current/best-practices/_snippets/_bulk_inserts.md'; +import Content from '@site/docs/best-practices/_snippets/_bulk_inserts.md'; diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/partitioningkey.md b/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/partitioningkey.md index 27652114292..6e36058f9df 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/partitioningkey.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/partitioningkey.md @@ -7,6 +7,6 @@ doc_type: 'guide' keywords: ['分区', '分区键', '数据组织', '最佳实践', '性能'] --- -import Content from '@site/i18n/zh/docusaurus-plugin-content-docs/current/best-practices/partitioning_keys.mdx'; +import Content from '@site/docs/best-practices/partitioning_keys.mdx'; diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/guides/developer/lightweight-delete.md b/i18n/zh/docusaurus-plugin-content-docs/current/guides/developer/lightweight-delete.md index f38e8330322..fcc80324a71 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/guides/developer/lightweight-delete.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/guides/developer/lightweight-delete.md @@ -6,6 +6,6 @@ description: '概述 ClickHouse 中的轻量级删除功能' doc_type: 'reference' --- -import Content from '@site/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/statements/delete.md'; +import Content from '@site/docs/sql-reference/statements/delete.md'; diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/cli.mdx b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/cli.mdx index 8b921d65561..06bef4d3ead 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/cli.mdx +++ b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/cli.mdx @@ -13,6 +13,6 @@ integration: keywords: ['clickhouse-client', 'CLI', '命令行界面', 'SQL 客户端', '终端'] --- -import Content from '@site/i18n/zh/docusaurus-plugin-content-docs/current/interfaces/cli.md'; +import Content from '@site/docs/interfaces/cli.md'; diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/dbms/odbc-with-clickhouse.md b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/dbms/odbc-with-clickhouse.md index 4ab1417c8d1..2d696a106da 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/dbms/odbc-with-clickhouse.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/dbms/odbc-with-clickhouse.md @@ -9,6 +9,6 @@ hide_title: true keywords: ['odbc', '数据库连接', '集成', '外部数据', '驱动程序'] --- -import Content from '@site/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/odbc.md'; +import Content from '@site/docs/engines/table-engines/integrations/odbc.md'; diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/s3/index.md b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/s3/index.md index 958625c8d86..314c1938002 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/s3/index.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/s3/index.md @@ -1,452 +1,1386 @@ --- -description: '此引擎用于与 Amazon S3 生态系统集成。类似于 HDFS 引擎,但提供了 S3 特有的功能。' -sidebar_label: 'S3' -sidebar_position: 180 slug: /integrations/s3 -title: 'S3 表引擎' -doc_type: 'reference' +sidebar_position: 1 +sidebar_label: '将 S3 与 ClickHouse 集成' +title: '将 S3 与 ClickHouse 集成' +description: '本页介绍如何将 S3 与 ClickHouse 集成' +keywords: ['Amazon S3', '对象存储', '云存储', '数据湖', 'S3 集成'] +doc_type: 'guide' +integration: + - support_level: 'core' + - category: 'data_ingestion' --- +import BucketDetails from '@site/docs/_snippets/_S3_authentication_and_bucket.md'; +import S3J from '@site/static/images/integrations/data-ingestion/s3/s3-j.png'; +import Bucket1 from '@site/static/images/integrations/data-ingestion/s3/bucket1.png'; +import Bucket2 from '@site/static/images/integrations/data-ingestion/s3/bucket2.png'; +import Image from '@theme/IdealImage'; -# S3 表引擎 +# 将 S3 集成到 ClickHouse 中 -该引擎提供与 [Amazon S3](https://aws.amazon.com/s3/) 生态系统的集成能力。此引擎类似于 [HDFS](/engines/table-engines/integrations/hdfs) 引擎,但提供了 S3 专用功能。 +你可以将 S3 中的数据写入 ClickHouse,也可以将 S3 用作导出目标,从而与“数据湖”(Data Lake)架构进行集成。此外,S3 还可以作为“冷”存储层,并有助于实现存储与计算的分离。在下文中,我们使用纽约市出租车数据集演示在 S3 与 ClickHouse 之间迁移数据的过程,说明关键配置参数,并给出性能优化建议。 -## 示例 +## S3 表函数 + +`s3` 表函数允许从 S3 兼容的存储中读取文件并向其写入文件。该语法的大致结构如下: ```sql -CREATE TABLE s3_engine_table (name String, value UInt32) - ENGINE=S3('https://clickhouse-public-datasets.s3.amazonaws.com/my-test-bucket-768/test-data.csv.gz', 'CSV', 'gzip') - SETTINGS input_format_with_names_use_header = 0; +s3(path, [aws_access_key_id, aws_secret_access_key,] [format, [structure, [compression]]]) +``` + +其中: + +* path — 带有文件路径的 Bucket URL。仅在只读模式下支持以下通配符:`*`、`?`、`{abc,def}` 和 `{N..M}`,其中 `N`、`M` 为数字,`'abc'`、`'def'` 为字符串。更多信息,参见[在 path 中使用通配符](/engines/table-engines/integrations/s3/#wildcards-in-path)的文档。 +* format — 文件的[格式](/interfaces/formats#formats-overview)。 +* structure — 表的结构。格式为 `'column1_name column1_type, column2_name column2_type, ...'`。 +* compression — 可选参数。支持的参数值:`none`、`gzip/gz`、`brotli/br`、`xz/LZMA`、`zstd/zst`。默认情况下,会根据文件扩展名自动检测压缩类型。 + +在路径表达式中使用通配符可以引用多个文件,并为并行处理创造条件。 + +### Preparation + +在 ClickHouse 中创建表之前,可能需要先仔细查看 S3 bucket 中的数据。可以直接在 ClickHouse 中使用 `DESCRIBE` 语句来完成此操作: + +```sql +DESCRIBE TABLE s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi/trips_*.gz', 'TabSeparatedWithNames'); +``` + +`DESCRIBE TABLE` 语句的输出应显示 ClickHouse 将如何自动推断这些数据的表结构(以在 S3 存储桶中的视图为准)。注意,它还会自动识别并解压 gzip 压缩格式: + +```sql +DESCRIBE TABLE s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi/trips_*.gz', 'TabSeparatedWithNames') SETTINGS describe_compact_output=1 +``` + + +┌─name──────────────────┬─type───────────────┐ +│ trip_id │ Nullable(Int64) │ +│ vendor_id │ Nullable(Int64) │ +│ pickup_date │ Nullable(Date) │ +│ pickup_datetime │ Nullable(DateTime) │ +│ dropoff_date │ Nullable(Date) │ +│ dropoff_datetime │ Nullable(DateTime) │ +│ store_and_fwd_flag │ Nullable(Int64) │ +│ rate_code_id │ Nullable(Int64) │ +│ pickup_longitude │ Nullable(Float64) │ +│ pickup_latitude │ Nullable(Float64) │ +│ dropoff_longitude │ Nullable(Float64) │ +│ dropoff_latitude │ Nullable(Float64) │ +│ passenger_count │ Nullable(Int64) │ +│ trip_distance │ Nullable(String) │ +│ fare_amount │ Nullable(String) │ +│ extra │ Nullable(String) │ +│ mta_tax │ Nullable(String) │ +│ tip_amount │ Nullable(String) │ +│ tolls_amount │ Nullable(Float64) │ +│ ehail_fee │ Nullable(Int64) │ +│ improvement_surcharge │ Nullable(String) │ +│ total_amount │ Nullable(String) │ +│ payment_type │ Nullable(String) │ +│ trip_type │ Nullable(Int64) │ +│ pickup │ Nullable(String) │ +│ dropoff │ Nullable(String) │ +│ cab_type │ Nullable(String) │ +│ pickup_nyct2010_gid │ Nullable(Int64) │ +│ pickup_ctlabel │ Nullable(Float64) │ +│ pickup_borocode │ Nullable(Int64) │ +│ pickup_ct2010 │ Nullable(String) │ +│ pickup_boroct2010 │ Nullable(String) │ +│ pickup_cdeligibil │ Nullable(String) │ +│ pickup_ntacode │ Nullable(String) │ +│ pickup_ntaname │ Nullable(String) │ +│ pickup_puma │ Nullable(Int64) │ +│ dropoff_nyct2010_gid │ Nullable(Int64) │ +│ dropoff_ctlabel │ Nullable(Float64) │ +│ dropoff_borocode │ Nullable(Int64) │ +│ dropoff_ct2010 │ Nullable(String) │ +│ dropoff_boroct2010 │ Nullable(String) │ +│ dropoff_cdeligibil │ Nullable(String) │ +│ dropoff_ntacode │ Nullable(String) │ +│ dropoff_ntaname │ Nullable(String) │ +│ dropoff_puma │ Nullable(Int64) │ +└───────────────────────┴────────────────────┘ + +``` + +为了与基于 S3 的数据集进行交互,我们准备一个标准的 `MergeTree` 表作为目标表。以下语句在默认数据库中创建一个名为 `trips` 的表。请注意,我们选择修改了上面推断出的部分数据类型,特别是不使用 [`Nullable()`](/sql-reference/data-types/nullable) 数据类型修饰符,因为它可能会导致不必要的额外存储开销和性能损耗: +``` + + +```sql +CREATE TABLE trips +( + `trip_id` UInt32, + `vendor_id` Enum8('1' = 1, '2' = 2, '3' = 3, '4' = 4, 'CMT' = 5, 'VTS' = 6, 'DDS' = 7, 'B02512' = 10, 'B02598' = 11, 'B02617' = 12, 'B02682' = 13, 'B02764' = 14, '' = 15), + `pickup_date` Date, + `pickup_datetime` DateTime, + `dropoff_date` Date, + `dropoff_datetime` DateTime, + `store_and_fwd_flag` UInt8, + `rate_code_id` UInt8, + `pickup_longitude` Float64, + `pickup_latitude` Float64, + `dropoff_longitude` Float64, + `dropoff_latitude` Float64, + `passenger_count` UInt8, + `trip_distance` Float64, + `fare_amount` Float32, + `extra` Float32, + `mta_tax` Float32, + `tip_amount` Float32, + `tolls_amount` Float32, + `ehail_fee` Float32, + `improvement_surcharge` Float32, + `total_amount` Float32, + `payment_type` Enum8('UNK' = 0, 'CSH' = 1, 'CRE' = 2, 'NOC' = 3, 'DIS' = 4), + `trip_type` UInt8, + `pickup` FixedString(25), + `dropoff` FixedString(25), + `cab_type` Enum8('yellow' = 1, 'green' = 2, 'uber' = 3), + `pickup_nyct2010_gid` Int8, + `pickup_ctlabel` Float32, + `pickup_borocode` Int8, + `pickup_ct2010` String, + `pickup_boroct2010` String, + `pickup_cdeligibil` String, + `pickup_ntacode` FixedString(4), + `pickup_ntaname` String, + `pickup_puma` UInt16, + `dropoff_nyct2010_gid` UInt8, + `dropoff_ctlabel` Float32, + `dropoff_borocode` UInt8, + `dropoff_ct2010` String, + `dropoff_boroct2010` String, + `dropoff_cdeligibil` String, + `dropoff_ntacode` FixedString(4), + `dropoff_ntaname` String, + `dropoff_puma` UInt16 +) +ENGINE = MergeTree +PARTITION BY toYYYYMM(pickup_date) +ORDER BY pickup_datetime +``` + +请注意在 `pickup_date` 字段上使用了[分区](/engines/table-engines/mergetree-family/custom-partitioning-key)。通常分区键用于数据管理,但稍后我们将使用这个键来实现向 S3 的并行写入。 + +我们的出租车数据集中的每一条记录都对应一次出租车行程。该匿名化数据包含 2000 万条记录,压缩存储在 S3 bucket [https://datasets-documentation.s3.eu-west-3.amazonaws.com/](https://datasets-documentation.s3.eu-west-3.amazonaws.com/) 下的 **nyc-taxi** 目录中。数据为 TSV 格式,每个文件大约包含 100 万行。 + +### 从 S3 读取数据 + +我们可以将 S3 中的数据作为数据源直接查询,而无需先将其持久化到 ClickHouse 中。在下面的查询中,我们抽样 10 行数据。请注意这里没有配置任何凭据,因为该 bucket 是公开可访问的: + +```sql +SELECT * +FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi/trips_*.gz', 'TabSeparatedWithNames') +LIMIT 10; +``` + +请注意,我们不需要显式列出列名,因为 `TabSeparatedWithNames` 格式会在第一行中编码列名。其他格式,比如 `CSV` 或 `TSV`,会为该查询返回自动生成的列名,例如 `c1`、`c2`、`c3` 等。 + +查询还支持[虚拟列](../sql-reference/table-functions/s3#virtual-columns),例如 `_path` 和 `_file`,分别提供关于存储桶路径和文件名的信息。例如: + +```sql +SELECT _path, _file, trip_id +FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi/trips_0.gz', 'TabSeparatedWithNames') +LIMIT 5; +``` + + +```response +┌─_path──────────────────────────────────────┬─_file──────┬────trip_id─┐ +│ datasets-documentation/nyc-taxi/trips_0.gz │ trips_0.gz │ 1199999902 │ +│ datasets-documentation/nyc-taxi/trips_0.gz │ trips_0.gz │ 1199999919 │ +│ datasets-documentation/nyc-taxi/trips_0.gz │ trips_0.gz │ 1199999944 │ +│ datasets-documentation/nyc-taxi/trips_0.gz │ trips_0.gz │ 1199999969 │ +│ datasets-documentation/nyc-taxi/trips_0.gz │ trips_0.gz │ 1199999990 │ +└────────────────────────────────────────────┴────────────┴────────────┘ +``` + +确认此示例数据集中的行数。注意这里使用了通配符进行文件匹配,因此会包含全部二十个文件。此查询大约需要 10 秒,具体时间取决于 ClickHouse 实例上的 CPU 核心数量: + +```sql +SELECT count() AS count +FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi/trips_*.gz', 'TabSeparatedWithNames'); +``` + +```response +┌────count─┐ +│ 20000000 │ +└──────────┘ +``` + +虽然直接从 S3 读取数据在采样数据和执行临时的探索性查询时很有用,但并不适合经常这样做。当需要进行更正式、稳定的分析时,请将数据导入 ClickHouse 中的 `MergeTree` 表。 + +### 使用 clickhouse-local + +`clickhouse-local` 程序使您无需部署和配置 ClickHouse 服务器即可对本地文件进行快速处理。任何使用 `s3` 表函数的查询都可以通过该工具执行。例如: + +```sql +clickhouse-local --query "SELECT * FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi/trips_*.gz', 'TabSeparatedWithNames') LIMIT 10" +``` + +### 从 S3 插入数据 + +为了充分发挥 ClickHouse 的能力,接下来我们将在实例中读取并插入数据。 +我们将 `s3` 函数与一个简单的 `INSERT` 语句结合使用来完成此操作。请注意,我们不需要显式列出列名,因为目标表已经定义了所需的结构。这要求列的顺序与表的 DDL 语句中指定的顺序一致:列会根据它们在 `SELECT` 子句中的位置进行映射。插入全部 1000 万行数据可能需要几分钟,具体取决于 ClickHouse 实例的情况。下面的示例仅插入 100 万行,以确保能够快速得到响应。可根据需要调整 `LIMIT` 子句或列选择来导入数据子集: + +```sql +INSERT INTO trips + SELECT * + FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi/trips_*.gz', 'TabSeparatedWithNames') + LIMIT 1000000; +``` + +### 使用 ClickHouse Local 进行远程写入 + +如果网络安全策略阻止您的 ClickHouse 集群发起出站连接,您可以考虑使用 `clickhouse-local` 来写入 S3 中的数据。下面的示例中,我们从一个 S3 存储桶读取数据,并使用 `remote` 函数将其插入到 ClickHouse 中: + +```sql +clickhouse-local --query "INSERT INTO TABLE FUNCTION remote('localhost:9000', 'default.trips', 'username', 'password') (*) SELECT * FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi/trips_*.gz', 'TabSeparatedWithNames') LIMIT 10" +``` + +:::note +要通过安全的 SSL 连接执行此操作,请使用 `remoteSecure` 函数。 +::: + +### 导出数据 + +可以使用 `s3` 表函数向 S3 中的文件写入数据。这需要相应的权限。我们在请求中传递所需的凭据,但请参阅 [管理凭据](#managing-credentials) 页面了解更多选项。 + +在下面的简单示例中,我们将该表函数用作目标而不是源。这里我们从 `trips` 表向一个 bucket 流式写入 10,000 行数据,指定使用 `lz4` 压缩和 `CSV` 输出格式: + +```sql +INSERT INTO FUNCTION + s3( + 'https://datasets-documentation.s3.eu-west-3.amazonaws.com/csv/trips.csv.lz4', + 's3_key', + 's3_secret', + 'CSV' + ) +SELECT * +FROM trips +LIMIT 10000; +``` + + +请注意,这里文件的格式是根据扩展名推断出来的。我们也不需要在 `s3` 函数中显式指定列——这些可以从 `SELECT` 中推断。 -INSERT INTO s3_engine_table VALUES ('one', 1), ('two', 2), ('three', 3); +### 拆分大文件 -SELECT * FROM s3_engine_table LIMIT 2; +您通常不会希望将数据导出为单个文件。大多数工具(包括 ClickHouse)在读写多个文件时会获得更高的吞吐性能,因为可以利用并行处理。我们可以多次执行 `INSERT` 命令,每次只处理数据的一个子集。ClickHouse 提供了一种使用 `PARTITION` 键自动拆分文件的机制。 + +在下面的示例中,我们通过对 `rand()` 函数取模运算来创建十个文件。请注意生成的分区 ID 是如何体现在文件名中的。这样会生成十个带有数字后缀的文件,例如 `trips_0.csv.lz4`、`trips_1.csv.lz4` 等等: + +```sql +INSERT INTO FUNCTION + s3( + 'https://datasets-documentation.s3.eu-west-3.amazonaws.com/csv/trips_{_partition_id}.csv.lz4', + 's3_key', + 's3_secret', + 'CSV' + ) + PARTITION BY rand() % 10 +SELECT * +FROM trips +LIMIT 100000; ``` -```text -┌─name─┬─value─┐ -│ one │ 1 │ -│ two │ 2 │ -└──────┴───────┘ +或者,我们也可以使用数据中的某个字段。对于这个数据集,`payment_type` 是一个自然的分区键,其基数(cardinality)为 5。 + +```sql +INSERT INTO FUNCTION + s3( + 'https://datasets-documentation.s3.eu-west-3.amazonaws.com/csv/trips_{_partition_id}.csv.lz4', + 's3_key', + 's3_secret', + 'CSV' + ) + PARTITION BY payment_type +SELECT * +FROM trips +LIMIT 100000; ``` +### 利用集群 + +上述函数都仅限在单个节点上执行。读取速度会随 CPU 核心数线性提升,直到其他资源(通常是网络)达到饱和,从而支持用户进行纵向扩展。然而,这种方式存在局限性。尽管用户在执行 `INSERT INTO SELECT` 查询时,可以通过插入到分布式表来缓解部分资源压力,但仍然只由单个节点负责读取、解析和处理数据。为了解决这一问题并实现读取的横向扩展,我们提供了 [s3Cluster](/sql-reference/table-functions/s3Cluster.md) 函数。 -## 创建表 +接收查询的节点(称为发起者节点 initiator)会与集群中的每个节点建立连接。用于确定需要读取哪些文件的 glob 模式会被解析为一组文件。发起者节点将文件分发给集群中的节点,这些节点作为工作节点(workers)运行。工作节点在完成当前读取后,会请求更多文件进行处理。该过程确保我们可以对读取进行横向扩展。 + +`s3Cluster` 函数的格式与单节点版本相同,只是需要指定一个目标集群来标识工作节点: + +```sql +s3Cluster(cluster_name, source, [access_key_id, secret_access_key,] format, structure) +``` + +* `cluster_name` — 用于构建远程和本地服务器地址集合及连接参数的集群名称。 +* `source` — 指向单个文件或一组文件的 URL。仅在只读模式下支持以下通配符:`*`、`?`、`{'abc','def'}` 和 `{N..M}`,其中 N、M 为数字,abc、def 为字符串。更多信息参见 [路径中的通配符](/engines/table-engines/integrations/s3.md/#wildcards-in-path)。 +* `access_key_id` 和 `secret_access_key` — 指定在给定端点上使用的凭证密钥。可选。 +* `format` — 文件的[格式](/interfaces/formats#formats-overview)。 +* `structure` — 表的结构。格式为 'column1_name column1_type, column2_name column2_type, ...'。 + +与其他任意 `s3` 函数一样,如果 bucket 为非安全(公开)或通过环境(例如 IAM 角色)提供访问权限,则凭证为可选项。但与 `s3` 函数不同的是,自 22.3.1 起,必须在请求中显式指定 `structure`,即不会自动推断表结构(schema)。 + +在大多数情况下,该函数将作为 `INSERT INTO SELECT` 的一部分使用。在这种场景下,通常会向一个分布式表写入数据。下面通过一个简单示例进行说明,其中 trips_all 是一个分布式表。尽管此表使用 events 集群,但读写操作使用的节点之间无需保证一致性: + + +```sql +INSERT INTO default.trips_all + SELECT * + FROM s3Cluster( + 'events', + 'https://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi/trips_*.gz', + 'TabSeparatedWithNames' + ) +``` + +写入操作会在 initiator 节点上执行。这意味着,虽然每个节点都会进行读操作,但结果行会被路由回 initiator 节点进行分发。在高吞吐量场景下,这可能成为性能瓶颈。为了解决这一问题,请为 `s3cluster` 函数设置参数 [parallel_distributed_insert_select](/operations/settings/settings/#parallel_distributed_insert_select)。 + + +## S3 表引擎 + +虽然 `s3` 函数允许对存储在 S3 中的数据执行即席查询,但在语法上比较冗长。`S3` 表引擎让你无需反复指定 bucket 的 URL 和凭证。为此,ClickHouse 提供了 S3 表引擎。 ```sql CREATE TABLE s3_engine_table (name String, value UInt32) - ENGINE = S3(path [, NOSIGN | aws_access_key_id, aws_secret_access_key,] format, [compression], [partition_strategy], [partition_columns_in_data_file]) - [PARTITION BY expr] + ENGINE = S3(path, [aws_access_key_id, aws_secret_access_key,] format, [compression]) [SETTINGS ...] ``` -### 引擎参数 +* `path` — 带文件路径的 bucket URL。只读模式下支持以下通配符:`*`、`?`、`{abc,def}` 和 `{N..M}`,其中 N、M 为数字,'abc'、'def' 为字符串。更多信息请参阅[此处](/engines/table-engines/integrations/s3#wildcards-in-path)。 +* `format` — 文件的[格式](/interfaces/formats#formats-overview)。 +* `aws_access_key_id`, `aws_secret_access_key` - AWS 账号用户的长期凭证。可以使用这些凭证对请求进行身份验证。该参数为可选项。如果未指定凭证,则使用配置文件中的值。更多信息请参阅[管理凭证](#managing-credentials)。 +* `compression` — 压缩类型。支持的值:none、gzip/gz、brotli/br、xz/LZMA、zstd/zst。该参数为可选项。默认情况下,会根据文件扩展名自动检测压缩类型。 -* `path` — 带有文件路径的存储桶 URL。在只读模式下支持以下通配符:`*`、`**`、`?`、`{abc,def}` 和 `{N..M}`,其中 `N`、`M` 为数字,`'abc'`、`'def'` 为字符串。更多信息参见[下文](#wildcards-in-path)。 -* `NOSIGN` - 如果在凭证位置提供此关键字,所有请求都不会被签名。 -* `format` — 文件的[格式](/sql-reference/formats#formats-overview)。 -* `aws_access_key_id`, `aws_secret_access_key` - [AWS](https://aws.amazon.com/) 账号用户的长期凭证。可以使用它们对请求进行认证。该参数为可选。如果未指定凭证,则会从配置文件中读取。更多信息参见 [Using S3 for Data Storage](../mergetree-family/mergetree.md#table_engine-mergetree-s3)。 -* `compression` — 压缩类型。支持的值:`none`、`gzip/gz`、`brotli/br`、`xz/LZMA`、`zstd/zst`。该参数为可选。默认情况下,将根据文件扩展名自动检测压缩类型。 -* `partition_strategy` – 选项:`WILDCARD` 或 `HIVE`。`WILDCARD` 要求路径中包含 `{_partition_id}`,该占位符会被分区键替换。`HIVE` 不允许使用通配符,假定路径为表的根路径,并生成 Hive 风格的分区目录,使用 Snowflake ID 作为文件名,并以文件格式作为扩展名。默认值为 `WILDCARD`。 -* `partition_columns_in_data_file` - 仅在使用 `HIVE` 分区策略时使用。用于指示 ClickHouse 数据文件中是否包含分区列。默认值为 `false`。 -* `storage_class_name` - 选项:`STANDARD` 或 `INTELLIGENT_TIERING`,用于指定 [AWS S3 Intelligent Tiering](https://aws.amazon.com/s3/storage-classes/intelligent-tiering/) 存储类别。 +### 读取数据 -### 数据缓存 +在以下示例中,我们使用位于 `https://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi/` bucket 中的前十个 TSV 文件创建一个名为 `trips_raw` 的表。每个文件各包含 100 万行数据: -`S3` 表引擎支持在本地磁盘上进行数据缓存。 -有关文件系统缓存配置选项和使用方法,请参见本[节](/operations/storing-data.md/#using-local-cache)。 -缓存键基于存储对象的路径和 ETag,因此 ClickHouse 不会读取已过期的缓存版本。 -要启用缓存,请使用设置 `filesystem_cache_name = ''` 和 `enable_filesystem_cache = 1`。 +```sql +CREATE TABLE trips_raw +( + `trip_id` UInt32, + `vendor_id` Enum8('1' = 1, '2' = 2, '3' = 3, '4' = 4, 'CMT' = 5, 'VTS' = 6, 'DDS' = 7, 'B02512' = 10, 'B02598' = 11, 'B02617' = 12, 'B02682' = 13, 'B02764' = 14, '' = 15), + `pickup_date` Date, + `pickup_datetime` DateTime, + `dropoff_date` Date, + `dropoff_datetime` DateTime, + `store_and_fwd_flag` UInt8, + `rate_code_id` UInt8, + `pickup_longitude` Float64, + `pickup_latitude` Float64, + `dropoff_longitude` Float64, + `dropoff_latitude` Float64, + `passenger_count` UInt8, + `trip_distance` Float64, + `fare_amount` Float32, + `extra` Float32, + `mta_tax` Float32, + `tip_amount` Float32, + `tolls_amount` Float32, + `ehail_fee` Float32, + `improvement_surcharge` Float32, + `total_amount` Float32, + `payment_type_` Enum8('UNK' = 0, 'CSH' = 1, 'CRE' = 2, 'NOC' = 3, 'DIS' = 4), + `trip_type` UInt8, + `pickup` FixedString(25), + `dropoff` FixedString(25), + `cab_type` Enum8('yellow' = 1, 'green' = 2, 'uber' = 3), + `pickup_nyct2010_gid` Int8, + `pickup_ctlabel` Float32, + `pickup_borocode` Int8, + `pickup_ct2010` String, + `pickup_boroct2010` FixedString(7), + `pickup_cdeligibil` String, + `pickup_ntacode` FixedString(4), + `pickup_ntaname` String, + `pickup_puma` UInt16, + `dropoff_nyct2010_gid` UInt8, + `dropoff_ctlabel` Float32, + `dropoff_borocode` UInt8, + `dropoff_ct2010` String, + `dropoff_boroct2010` FixedString(7), + `dropoff_cdeligibil` String, + `dropoff_ntacode` FixedString(4), + `dropoff_ntaname` String, + `dropoff_puma` UInt16 +) ENGINE = S3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi/trips_{0..9}.gz', 'TabSeparatedWithNames', 'gzip'); +``` + +请注意使用 `{0..9}` 模式来仅匹配前十个文件。创建完成后,我们就可以像查询其他表一样查询此表: ```sql -SELECT * -FROM s3('http://minio:10000/clickhouse//test_3.csv', 'minioadmin', 'minioadminpassword', 'CSV') -SETTINGS filesystem_cache_name = 'cache_for_s3', enable_filesystem_cache = 1; +SELECT DISTINCT(pickup_ntaname) +FROM trips_raw +LIMIT 10; + +┌─pickup_ntaname───────────────────────────────────┐ +│ Lenox Hill-Roosevelt Island │ +│ Airport │ +│ SoHo-TriBeCa-Civic Center-Little Italy │ +│ West Village │ +│ Chinatown │ +│ Hudson Yards-Chelsea-Flatiron-Union Square │ +│ Turtle Bay-East Midtown │ +│ Upper West Side │ +│ Murray Hill-Kips Bay │ +│ DUMBO-Vinegar Hill-Downtown Brooklyn-Boerum Hill │ +└──────────────────────────────────────────────────┘ +``` + +### 插入数据 + +`S3` 表引擎支持并行读取。只有在表定义中不包含 glob 通配符模式时才支持写入。因此,上述表将无法进行写入操作。 + +为演示写入操作,创建一个指向可写 S3 存储桶的表: + +```sql +CREATE TABLE trips_dest +( + `trip_id` UInt32, + `pickup_date` Date, + `pickup_datetime` DateTime, + `dropoff_datetime` DateTime, + `tip_amount` Float32, + `total_amount` Float32 +) ENGINE = S3('/trips.bin', 'Native'); +``` + + +```sql +INSERT INTO trips_dest + SELECT + trip_id, + pickup_date, + pickup_datetime, + dropoff_datetime, + tip_amount, + total_amount + FROM trips + LIMIT 10; +``` + +```sql +SELECT * FROM trips_dest LIMIT 5; ``` -在配置文件中定义缓存有两种方式。 +```response +┌────trip_id─┬─pickup_date─┬─────pickup_datetime─┬────dropoff_datetime─┬─tip_amount─┬─total_amount─┐ +│ 1200018648 │ 2015-07-01 │ 2015-07-01 00:00:16 │ 2015-07-01 00:02:57 │ 0 │ 7.3 │ +│ 1201452450 │ 2015-07-01 │ 2015-07-01 00:00:20 │ 2015-07-01 00:11:07 │ 1.96 │ 11.76 │ +│ 1202368372 │ 2015-07-01 │ 2015-07-01 00:00:40 │ 2015-07-01 00:05:46 │ 0 │ 7.3 │ +│ 1200831168 │ 2015-07-01 │ 2015-07-01 00:01:06 │ 2015-07-01 00:09:23 │ 2 │ 12.3 │ +│ 1201362116 │ 2015-07-01 │ 2015-07-01 00:01:07 │ 2015-07-01 00:03:31 │ 0 │ 5.3 │ +└────────────┴─────────────┴─────────────────────┴─────────────────────┴────────────┴──────────────┘ +``` + +请注意,行只能插入到新文件中。不存在合并周期或文件拆分操作。一旦文件写入完成,后续插入将会失败。用户在此有两种选择: + +* 指定设置 `s3_create_new_file_on_insert=1`。这会在每次插入时创建一个新文件。每个文件名末尾都会追加一个数值后缀,并且该数值会随每次插入操作单调递增。对于上面的示例,后续插入将会创建一个 trips_1.bin 文件。 +* 指定设置 `s3_truncate_on_insert=1`。这会在插入时截断文件,即操作完成后,文件中只包含新插入的行。 + +这两个设置的默认值都是 0,因此会强制用户显式设置其中一个。当两者都被设置时,`s3_truncate_on_insert` 将优先生效。 + +关于 `S3` 表引擎的一些说明: + +* 与传统的 `MergeTree` 系列表不同,删除一个 `S3` 表不会删除其底层数据。 +* 此表类型的完整设置可以在[此处](/engines/table-engines/integrations/s3.md/#settings)找到。 +* 使用此引擎时需注意以下限制: + * 不支持 ALTER 查询 + * 不支持 SAMPLE 操作 + * 不存在索引的概念,即无主键索引或跳过索引。 + + +## 管理凭证 {#managing-credentials} + +在前面的示例中,我们在 `s3` 函数或 `S3` 表定义中传递了凭证。虽然这在偶尔使用时可能可以接受,但在生产环境中,用户需要不那么显式的认证机制。为此,ClickHouse 提供了多种选项: + +* 在 **config.xml** 或 **conf.d** 下的等效配置文件中指定连接详细信息。下面显示了一个示例文件的内容,假设是使用 debian 软件包进行安装。 + + ```xml + ubuntu@single-node-clickhouse:/etc/clickhouse-server/config.d$ cat s3.xml + + + + https://dalem-files.s3.amazonaws.com/test/ + key + secret + + + + + + ``` + + 对于任何请求,只要其 URL 以上述端点为精确前缀,就会使用这些凭证。另外,请注意,在此示例中可以声明 Authorization 请求头,作为访问密钥 ID 和秘密访问密钥的替代方案。支持的完整设置列表可在[此处](/engines/table-engines/integrations/s3.md/#settings)找到。 + +* 上面的示例强调了配置参数 `use_environment_credentials` 的可用性。此配置参数也可以在全局 `s3` 级别进行设置: + + ```xml + + + true + + + ``` + + 此设置会启用从环境中获取 S3 凭证的尝试,从而允许通过 IAM 角色进行访问。具体而言,将按以下顺序进行检索: + + * 查找环境变量 `AWS_ACCESS_KEY_ID`、`AWS_SECRET_ACCESS_KEY` 和 `AWS_SESSION_TOKEN` + * 在 **$HOME/.aws** 中进行检查 + * 通过 AWS Security Token Service 获取临时凭证,即通过 [`AssumeRole`](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) API + * 检查 ECS 环境变量 `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI` 或 `AWS_CONTAINER_CREDENTIALS_FULL_URI` 以及 `AWS_ECS_CONTAINER_AUTHORIZATION_TOKEN` 中的凭证。 + * 如果 [AWS_EC2_METADATA_DISABLED](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html#envvars-list-AWS_EC2_METADATA_DISABLED) 未设置为 true,则通过 [Amazon EC2 实例元数据](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-metadata.html) 获取凭证。 + * 对于特定端点,也可以使用相同的前缀匹配规则来设置这些相同的配置。 + + + +## 性能优化 {#s3-optimizing-performance} + +有关如何使用 S3 函数优化读取和写入操作,请参阅[专门的性能指南](./performance.md)。 + +### S3 存储调优 {#s3-storage-tuning} + +在内部实现中,ClickHouse MergeTree 使用两种主要的存储格式:[`Wide` 和 `Compact`](/engines/table-engines/mergetree-family/mergetree.md/#mergetree-data-storage)。当前实现采用 ClickHouse 的默认行为(通过设置 `min_bytes_for_wide_part` 和 `min_rows_for_wide_part` 进行控制),但我们预计在未来版本中,对于 S3 的行为会有所差异,例如提高 `min_bytes_for_wide_part` 的默认值,以鼓励更多采用 `Compact` 格式,从而减少文件数量。仅使用 S3 存储的用户现在可能希望调整这些设置。 + + + +## 基于 S3 的 MergeTree + +`s3` 函数及其相关的表引擎允许我们使用熟悉的 ClickHouse 语法查询 S3 中的数据。不过,在数据管理特性和性能方面,它们存在一定局限:不支持主索引、不支持缓存,而且文件写入需要由用户自行管理。 -1. 在 ClickHouse 配置文件中添加如下配置段: +ClickHouse 意识到,S3 是一种极具吸引力的存储方案,尤其适用于对“冷”数据查询性能要求不高、并且用户希望实现存储与计算分离的场景。为此,ClickHouse 支持将 S3 作为 MergeTree 引擎的底层存储。这使用户既能利用 S3 的扩展性和成本优势,又能获得 MergeTree 引擎在写入和查询方面的性能表现。 + +### 存储层级 + +ClickHouse 存储卷允许将物理磁盘从 MergeTree 表引擎中抽象出来。任一单个卷可以由按顺序排列的一组磁盘组成。除了主要用于将多个块设备统一用于数据存储之外,这种抽象还允许使用其他类型的存储,包括 S3。根据存储策略,可以在不同卷之间在不同占用率(fill rates)下迁移 ClickHouse 的数据部件,从而形成存储层级(storage tiers)的概念。 + +存储层级支持冷热分层架构:最新的数据通常也是查询最频繁的数据,只需要占用少量高性能存储空间,例如 NVMe SSD。随着数据变旧,针对查询时间的 SLA 要求会放宽,查询频率也会下降。这部分“长尾”数据可以存放在速度较慢、性能较低的存储上,例如 HDD,或对象存储(如 S3)。 + +### 创建磁盘 + +要将一个 S3 bucket 作为磁盘使用,首先必须在 ClickHouse 配置文件中声明它。可以扩展 config.xml,或者更推荐在 conf.d 目录下提供一个新文件。下面是一个 S3 磁盘声明的示例: ```xml - - - 缓存目录的路径 - 10Gi - - + + ... + + + s3 + https://sample-bucket.s3.us-east-2.amazonaws.com/tables/ + your_access_key_id + your_secret_access_key + + /var/lib/clickhouse/disks/s3/ + + + cache + s3 + /var/lib/clickhouse/disks/s3_cache/ + 10Gi + + + ... + + ``` -2. 复用 ClickHouse 中 `storage_configuration` 部分的缓存配置(以及相应的缓存存储),[如本节所述](/operations/storing-data.md/#using-local-cache) +与此磁盘定义相关的完整设置列表可以在[此处](/engines/table-engines/mergetree-family/mergetree.md/#table_engine-mergetree-s3)找到。请注意,可以使用[管理凭证](#managing-credentials)中描述的相同方法在此处管理凭证,即在上述设置块中将 `use_environment_credentials` 设置为 `true` 以使用 IAM 角色。 -### PARTITION BY +### 创建存储策略 -`PARTITION BY` — 可选。大多数情况下您不需要分区键,即便需要,一般也不需要比“按月”更细粒度的分区键。分区并不会加快查询速度(与 ORDER BY 表达式相反)。绝不要使用粒度过细的分区。不要按客户端标识符或名称对数据进行分区(而应将客户端标识符或名称设置为 ORDER BY 表达式中的第一列)。 +配置完成后,此“磁盘”可以被策略中声明的存储卷使用。对于下面的示例,我们假设 S3 是我们唯一的存储。这不考虑更复杂的冷热分层架构,在这些架构中,数据可以基于 TTL 规则和写满率进行迁移。 -对于按月分区,使用 `toYYYYMM(date_column)` 表达式,其中 `date_column` 是类型为 [Date](/sql-reference/data-types/date.md) 的日期列。此时的分区名称采用 `"YYYYMM"` 格式。 +```xml + + + + + ... + + + ... + + + + + +
+ s3 +
+
+
+
+
+
+``` -#### 分区策略 +### 创建表 -`WILDCARD`(默认):将文件路径中的 `{_partition_id}` 通配符替换为实际的分区键。不支持读取操作。 +假设你已将磁盘配置为使用具有写入权限的 bucket,现在就可以像下面的示例那样创建一张表。为简洁起见,我们仅使用 NYC 出租车数据集中的部分列,并将数据直接流式写入这个以 S3 为后端的表: -`HIVE` 实现了用于读写的 Hive 风格分区。读取通过递归的 glob 模式完成,等价于 `SELECT * FROM s3('table_root/**.parquet')`。 -写入会按如下格式生成文件:`//.`。 +```sql +CREATE TABLE trips_s3 +( + `trip_id` UInt32, + `pickup_date` Date, + `pickup_datetime` DateTime, + `dropoff_datetime` DateTime, + `pickup_longitude` Float64, + `pickup_latitude` Float64, + `dropoff_longitude` Float64, + `dropoff_latitude` Float64, + `passenger_count` UInt8, + `trip_distance` Float64, + `tip_amount` Float32, + `total_amount` Float32, + `payment_type` Enum8('UNK' = 0, 'CSH' = 1, 'CRE' = 2, 'NOC' = 3, 'DIS' = 4) +) +ENGINE = MergeTree +PARTITION BY toYYYYMM(pickup_date) +ORDER BY pickup_datetime +SETTINGS storage_policy='s3_main' +``` -注意:当使用 `HIVE` 分区策略时,`use_hive_partitioning` 设置不会生效。 +```sql +INSERT INTO trips_s3 SELECT trip_id, pickup_date, pickup_datetime, dropoff_datetime, pickup_longitude, pickup_latitude, dropoff_longitude, dropoff_latitude, passenger_count, trip_distance, tip_amount, total_amount, payment_type FROM s3('https://ch-nyc-taxi.s3.eu-west-3.amazonaws.com/tsv/trips_{0..9}.tsv.gz', 'TabSeparatedWithNames') LIMIT 1000000; +``` -`HIVE` 分区策略示例: +根据硬件情况,后一次插入 100 万行可能需要几分钟才能完成。你可以通过 `system.processes` 表来查看进度。你也可以在不超过 1000 万行的前提下自由调整行数,并运行一些示例查询进行探索。 ```sql -arthur :) CREATE TABLE t_03363_parquet (year UInt16, country String, counter UInt8) -ENGINE = S3(s3_conn, filename = 't_03363_parquet', format = Parquet, partition_strategy='hive') -PARTITION BY (year, country); +SELECT passenger_count, avg(tip_amount) AS avg_tip, avg(total_amount) AS avg_amount FROM trips_s3 GROUP BY passenger_count; +``` -arthur :) INSERT INTO t_03363_parquet VALUES - (2022, 'USA', 1), - (2022, 'Canada', 2), - (2023, 'USA', 3), - (2023, 'Mexico', 4), - (2024, 'France', 5), - (2024, 'Germany', 6), - (2024, 'Germany', 7), - (1999, 'Brazil', 8), - (2100, 'Japan', 9), - (2024, 'CN', 10), - (2025, '', 11); +### 修改表 -arthur :) select _path, * from t_03363_parquet; +有时用户可能需要修改某个特定表的存储策略。虽然可以这样做,但会有一定限制。新的目标策略必须包含先前策略中的所有磁盘和卷,也就是说,不会通过迁移数据来满足策略变更。在校验这些约束时,将通过名称来识别卷和磁盘,任何试图违反约束的操作都会导致错误。不过,如果你沿用前面示例中的配置,则可以进行如下变更。 - ┌─_path──────────────────────────────────────────────────────────────────────┬─year─┬─country─┬─counter─┐ - 1. │ test/t_03363_parquet/year=2100/country=Japan/7329604473272971264.parquet │ 2100 │ Japan │ 9 │ - 2. │ test/t_03363_parquet/year=2024/country=France/7329604473323302912.parquet │ 2024 │ France │ 5 │ - 3. │ test/t_03363_parquet/year=2022/country=Canada/7329604473314914304.parquet │ 2022 │ Canada │ 2 │ - 4. │ test/t_03363_parquet/year=1999/country=Brazil/7329604473289748480.parquet │ 1999 │ Brazil │ 8 │ - 5. │ test/t_03363_parquet/year=2023/country=Mexico/7329604473293942784.parquet │ 2023 │ Mexico │ 4 │ - 6. │ test/t_03363_parquet/year=2023/country=USA/7329604473319108608.parquet │ 2023 │ USA │ 3 │ - 7. │ test/t_03363_parquet/year=2025/country=/7329604473327497216.parquet │ 2025 │ │ 11 │ - 8. │ test/t_03363_parquet/year=2024/country=CN/7329604473310720000.parquet │ 2024 │ CN │ 10 │ - 9. │ test/t_03363_parquet/year=2022/country=USA/7329604473298137088.parquet │ 2022 │ USA │ 1 │ -10. │ test/t_03363_parquet/year=2024/country=Germany/7329604473306525696.parquet │ 2024 │ Germany │ 6 │ -11. │ test/t_03363_parquet/year=2024/country=Germany/7329604473306525696.parquet │ 2024 │ Germany │ 7 │ - └────────────────────────────────────────────────────────────────────────────┴──────┴─────────┴─────────┘ +```xml + + + +
+ s3 +
+
+
+ + + + default + +
+ s3 +
+
+ 0.2 +
+
``` -### 查询分区数据 +```sql +ALTER TABLE trips_s3 MODIFY SETTING storage_policy='s3_tiered' +``` + +在这里,我们在新的 s3_tiered 策略中复用主 volume,并引入一个新的热 volume。这里使用的是默认磁盘,该磁盘仅由一个通过参数 `` 配置的磁盘组成。请注意,我们的 volume 名称和磁盘并未改变。对表的新写入将会落在默认磁盘上,直到达到 move_factor * disk_size,此时数据将被迁移到 S3。 + +### 处理复制 + +使用 S3 磁盘进行复制可以通过 `ReplicatedMergeTree` 表引擎来完成。有关详细信息,请参阅[使用 S3 对象存储在两个 AWS 区域之间复制单个分片](#s3-multi-region)一文。 + +### 读写 + +以下说明涵盖了 ClickHouse 与 S3 交互的实现细节。虽然通常仅供参考,但在进行[性能优化](#s3-optimizing-performance)时可能会对读者有所帮助: + + +* 默认情况下,查询处理流水线任意阶段可使用的查询处理线程最大数量等于 CPU 核心数。某些阶段比其他阶段更易并行化,因此该值只是一个上限。由于数据是以流式方式从磁盘读取,多个查询阶段可能会同时执行,因此查询实际使用的线程数可能会超过该值。可通过设置 [max_threads](/operations/settings/settings#max_threads) 进行修改。 +* 默认情况下,对 S3 的读取是异步的。该行为由设置 `remote_filesystem_read_method` 决定,其默认值为 `threadpool`。在处理请求时,ClickHouse 会按条带(stripe)读取粒度(granule)。每个条带可能包含许多列。一个线程会逐个读取其粒度对应的列。与同步地逐列读取相比,系统会在等待数据之前,为所有列提前发起预取(prefetch)。与对每一列进行同步等待相比,这种方式能显著提升性能。在大多数情况下,用户无需更改该设置——参见 [Optimizing for Performance](#s3-optimizing-performance)。 +* 写入操作是并行执行的,最多使用 100 个并发文件写入线程。`max_insert_delayed_streams_for_parallel_write` 的默认值为 1000,用于控制并行写入的 S3 blob 数量。由于每个正在写入的文件都需要一个缓冲区(约 1MB),这在实际中限制了单次 INSERT 的内存消耗。在服务器内存较低的场景下,适当降低该值可能更为合适。 + -本示例使用了集成 ClickHouse 和 MinIO 的 [docker compose 配置示例](https://github.com/ClickHouse/examples/tree/5fdc6ff72f4e5137e23ea075c88d3f44b0202490/docker-compose-recipes/recipes/ch-and-minio-S3)。你只需替换 endpoint 和认证参数即可在 S3 上复现相同的查询。 -请注意,在 `ENGINE` 配置中,S3 endpoint 将参数占位符 `{_partition_id}` 用作 S3 对象(文件名)的一部分,而 SELECT 查询则是针对这些生成的对象名称进行查询(例如 `test_3.csv`)。 +## 将 S3 对象存储用作 ClickHouse 磁盘 +如果你需要关于创建 bucket 和 IAM 角色的分步指南,请展开 **Create S3 buckets and an IAM role** 并按照说明操作: + + + +### 配置 ClickHouse 使用 S3 bucket 作为磁盘 + +以下示例基于以服务方式安装的 Linux Deb 软件包,并使用默认的 ClickHouse 目录。 + +1. 在 ClickHouse 的 `config.d` 目录下创建一个新文件,用于保存存储配置。 + +```bash +vim /etc/clickhouse-server/config.d/storage_config.xml +``` + +2. 在存储配置中添加以下内容,并将其中的 bucket 路径、access key 和 secret keys 替换为前面步骤中获得的值 + +```xml + + + + + s3 + https://mars-doc-test.s3.amazonaws.com/clickhouse3/ + ABC123 + Abc+123 + /var/lib/clickhouse/disks/s3_disk/ + + + cache + s3_disk + /var/lib/clickhouse/disks/s3_cache/ + 10Gi + + + + + +
+ s3_disk +
+
+
+
+
+
+``` :::note -如示例所示,目前尚不支持直接从分区的 S3 表中进行查询, -但可以通过使用 S3 表函数分别查询各个分区来实现。 +`<disks>` 标签内的 `s3_disk` 和 `s3_cache` 是任意标签名称。它们可以设置为其他值,但在 `<policies>` 标签下的 `<disk>` 标签中引用该磁盘时,必须使用相同的标签名称。 +`<S3_main>` 标签同样是任意的,它是策略名称,在 ClickHouse 中创建资源时,将作为标识符所对应的存储目标使用。 -在 S3 中写入分区数据的主要用途,是为了将这些数据迁移到另一套 -ClickHouse 系统(例如,从本地部署系统迁移到 ClickHouse -Cloud)。由于 ClickHouse 数据集通常非常庞大,且网络可靠性有时并不理想, -因此将数据集拆分为多个子集进行传输是合理的做法,这也正是进行分区写入的原因。 +上面展示的配置适用于 ClickHouse 22.8 或更高版本,如果您使用的是更早的版本,请参阅 [storing data](/operations/storing-data.md/#using-local-cache) 文档。 + +有关使用 S3 的更多信息: +集成指南:[S3 Backed MergeTree](#s3-backed-mergetree) ::: -#### 创建表 +3. 将该文件的属主更新为 `clickhouse` 用户和用户组 -```sql -CREATE TABLE p -( - `column1` UInt32, - `column2` UInt32, - `column3` UInt32 -) -ENGINE = S3( --- highlight-next-line - 'http://minio:10000/clickhouse//test_{_partition_id}.csv', - 'minioadmin', - 'minioadminpassword', - 'CSV') -PARTITION BY column3 +```bash +chown clickhouse:clickhouse /etc/clickhouse-server/config.d/storage_config.xml ``` -#### 插入数据 +4. 重启 ClickHouse 实例以使更改生效。 -```sql -INSERT INTO p VALUES (1, 2, 3), (3, 2, 1), (78, 43, 45) +```bash +service clickhouse-server restart ``` -#### 查询分区 3 +### 测试 -:::tip -此查询使用 S3 表函数。 -::: +1. 使用 ClickHouse 客户端登录,例如执行以下命令 + +```bash +clickhouse-client --user default --password ClickHouse123! +``` + +2. 创建表并指定新的 S3 存储策略 ```sql -SELECT * -FROM s3('http://minio:10000/clickhouse//test_3.csv', 'minioadmin', 'minioadminpassword', 'CSV') +CREATE TABLE s3_table1 + ( + `id` UInt64, + `column1` String + ) + ENGINE = MergeTree + ORDER BY id + SETTINGS storage_policy = 's3_main'; +``` + +3. 确认该表是按照正确的策略创建的 + +```sql +SHOW CREATE TABLE s3_table1; ``` ```response -┌─c1─┬─c2─┬─c3─┐ -│ 1 │ 2 │ 3 │ -└────┴────┴────┘ +┌─statement──────────────────────────────────────────────────── +│ CREATE TABLE default.s3_table1 +( + `id` UInt64, + `column1` String +) +ENGINE = MergeTree +ORDER BY id +SETTINGS storage_policy = 's3_main', index_granularity = 8192 +└────────────────────────────────────────────────────────────── ``` -#### 从分区 1 查询数据 +4. 向表中插入测试数据 ```sql -SELECT * -FROM s3('http://minio:10000/clickhouse//test_1.csv', 'minioadmin', 'minioadminpassword', 'CSV') +INSERT INTO s3_table1 + (id, column1) + VALUES + (1, 'abc'), + (2, 'xyz'); ``` ```response -┌─c1─┬─c2─┬─c3─┐ -│ 3 │ 2 │ 1 │ -└────┴────┴────┘ +INSERT INTO s3_table1 (id, column1) FORMAT Values + +Query id: 0265dd92-3890-4d56-9d12-71d4038b85d5 + +Ok. + +2 rows in set. Elapsed: 0.337 sec. ``` -#### 从分区 45 中查询数据 +5. 查看数据行 ```sql -SELECT * -FROM s3('http://minio:10000/clickhouse//test_45.csv', 'minioadmin', 'minioadminpassword', 'CSV') +SELECT * FROM s3_table1; ``` ```response -┌─c1─┬─c2─┬─c3─┐ -│ 78 │ 43 │ 45 │ -└────┴────┴────┘ +┌─id─┬─column1─┐ +│ 1 │ abc │ +│ 2 │ xyz │ +└────┴─────────┘ ``` -#### 限制 -你可能很自然地会尝试执行 `Select * from p`,但如上所述,此查询会失败;请改用前面的查询。 +2 行结果。耗时:0.284 秒。 -```sql -SELECT * FROM p ``` +6. 在 AWS 控制台中,导航到存储桶,选择新创建的存储桶及其文件夹。 +您应该会看到类似以下的内容: -```response -服务器返回异常(版本 23.4.1): -代码:48. DB::Exception: 来自 localhost:9000。DB::Exception: 尚未实现从分区 S3 存储读取数据的功能。(NOT_IMPLEMENTED) +AWS 控制台中的 S3 存储桶视图,显示存储在 S3 中的 ClickHouse 数据文件 ``` -## 插入数据 {#inserting-data} +## 使用 S3 对象存储在两个 AWS 区域之间复制单个分片 + +:::tip +ClickHouse Cloud 默认使用对象存储,如果你在 ClickHouse Cloud 中运行,则无需执行本操作流程。 +::: -请注意,数据行只能插入到新文件中,不会执行合并周期或文件拆分操作。一旦文件写入完成,后续插入将会失败。为避免这种情况,可以使用 `s3_truncate_on_insert` 和 `s3_create_new_file_on_insert` 设置。更多详情请参见[此处](/integrations/s3#inserting-data)。 +### 规划部署 +本教程基于在 AWS EC2 中部署两个 ClickHouse Server 节点和三个 ClickHouse Keeper 节点。ClickHouse 服务器的数据存储使用 S3。在两个 AWS 区域中,每个区域部署一个 ClickHouse Server 和一个 S3 存储桶(S3 bucket),以支持灾难恢复。 +ClickHouse 表会在两个服务器之间复制,因此也会在两个区域之间复制。 -## 虚拟列 {#virtual-columns} +### 安装软件 -- `_path` — 文件的路径。类型:`LowCardinality(String)`。 -- `_file` — 文件名。类型:`LowCardinality(String)`。 -- `_size` — 文件大小(字节)。类型:`Nullable(UInt64)`。如果大小未知,则值为 `NULL`。 -- `_time` — 文件的最后修改时间。类型:`Nullable(DateTime)`。如果时间未知,则值为 `NULL`。 -- `_etag` — 文件的 ETag。类型:`LowCardinality(String)`。如果 ETag 未知,则值为 `NULL`。 -- `_tags` — 文件的标签。类型:`Map(String, String)`。如果没有标签,则值为空映射 `{}`。 +#### ClickHouse 服务器节点 -有关虚拟列的更多信息,请参阅[此处](../../../engines/table-engines/index.md#table_engines-virtual_columns){}`. +在 ClickHouse 服务器节点上执行部署步骤时,请参考[安装说明](/getting-started/install/install.mdx)。 +#### 部署 ClickHouse +在两台主机上部署 ClickHouse,在示例配置中,这两台主机命名为 `chnode1`、`chnode2`。 -## 实现细节 {#implementation-details} +将 `chnode1` 部署在一个 AWS 区域,将 `chnode2` 部署在第二个区域。 -- 读写操作可以并行进行 -- 不支持: - - `ALTER` 和 `SELECT...SAMPLE` 操作。 - - 索引。 - - [零拷贝](../../../operations/storing-data.md#zero-copy) 复制在技术上可行,但目前不受支持。 +#### 部署 ClickHouse Keeper - :::note 零拷贝复制尚未准备好用于生产环境 - 在 ClickHouse 22.8 及更高版本中,零拷贝复制默认被禁用。该特性不建议在生产环境中使用。 - ::: +在三台主机上部署 ClickHouse Keeper,在示例配置中,它们命名为 `keepernode1`、`keepernode2` 和 `keepernode3`。`keepernode1` 可以部署在与 `chnode1` 相同的区域,`keepernode2` 与 `chnode2` 在同一区域,而 `keepernode3` 可以部署在任一区域,但需位于该区域中与 ClickHouse 节点不同的可用区。 +在 ClickHouse Keeper 节点上执行部署步骤时,请参考[安装说明](/getting-started/install/install.mdx)。 +### 创建 S3 存储桶 -## 路径中的通配符 +创建两个 S3 存储桶,分别位于你部署 `chnode1` 和 `chnode2` 的两个区域中。 -`path` 参数可以使用类似 bash 的通配符来指定多个文件。要参与处理,文件必须实际存在,并且与整个路径模式完全匹配。文件列表在执行 `SELECT` 时确定(而不是在 `CREATE` 时)。 +如果你需要有关创建存储桶和 IAM 角色的分步说明,请展开 **Create S3 buckets and an IAM role** 并按照说明操作: -* `*` — 匹配任意数量的任意字符(不包括 `/`),可以为空字符串。 -* `**` — 匹配任意数量的任意字符(包括 `/`),可以为空字符串。 -* `?` — 匹配任意单个字符。 -* `{some_string,another_string,yet_another_one}` — 匹配字符串 `'some_string'、'another_string'、'yet_another_one'` 中的任意一个。 -* `{N..M}` — 匹配从 N 到 M 范围内(含两端)的任意数字。N 和 M 可以有前导零,例如 `000..078`。 + -带有 `{}` 的写法类似于 [remote](../../../sql-reference/table-functions/remote.md) 表函数。 +然后将配置文件放置在 `/etc/clickhouse-server/config.d/` 中。以下是其中一个存储桶的示例配置文件,另一个与其类似,只是其中高亮显示的三行不同: + +```xml title="/etc/clickhouse-server/config.d/storage_config.xml" + + + + + s3 + + https://docs-clickhouse-s3.s3.us-east-2.amazonaws.com/clickhouses3/ + ABCDEFGHIJKLMNOPQRST + Tjdm4kf5snfkj303nfljnev79wkjn2l3knr81007 + + /var/lib/clickhouse/disks/s3_disk/ + + + + cache + s3_disk + /var/lib/clickhouse/disks/s3_cache/ + 10Gi + + + + + +
+ s3_disk +
+
+
+
+
+
+``` :::note -如果文件列表中包含带前导零的数字范围,请对每一位数字分别使用带花括号的写法,或者使用 `?`。 +本指南中的许多步骤会要求你将配置文件放到 `/etc/clickhouse-server/config.d/` 中。该目录是 Linux 系统中用于放置配置覆盖文件的默认位置。将这些文件放入该目录后,ClickHouse 会使用其中的内容覆盖默认配置。通过将这些文件放在覆盖配置目录中,可避免在升级过程中丢失配置。 ::: -**通配符示例 1** +### 配置 ClickHouse Keeper -创建一个表,使用名为 `file-000.csv`、`file-001.csv`、...、`file-999.csv` 的文件: +当以独立模式运行 ClickHouse Keeper(与 ClickHouse server 分离)时,配置为单个 XML 文件。在本教程中,该文件为 `/etc/clickhouse-keeper/keeper_config.xml`。三个 Keeper 服务器都使用相同的配置,只有一个设置不同:``。 -```sql -CREATE TABLE big_table (name String, value UInt32) - ENGINE = S3('https://clickhouse-public-datasets.s3.amazonaws.com/my-bucket/my_folder/file-{000..999}.csv', 'CSV'); + +`server_id` 表示要分配给使用该配置文件的主机的 ID。 在下面的示例中,`server_id` 为 `3`,如果继续向下查看文件中的 `` 部分,你会看到服务器 3 的主机名是 `keepernode3`。ClickHouse Keeper 进程正是通过这种方式来确定在选举 leader 以及执行其他操作时需要连接的其他服务器。 + +```xml title="/etc/clickhouse-keeper/keeper_config.xml" + + + trace + /var/log/clickhouse-keeper/clickhouse-keeper.log + /var/log/clickhouse-keeper/clickhouse-keeper.err.log + 1000M + 3 + + 0.0.0.0 + + 9181 + + 3 + /var/lib/clickhouse/coordination/log + /var/lib/clickhouse/coordination/snapshots + + + 10000 + 30000 + warning + + + + + 1 + keepernode1 + 9234 + + + 2 + keepernode2 + 9234 + + + + 3 + keepernode3 + 9234 + + + + + ``` -**带有通配符的示例 2** +将 ClickHouse Keeper 的配置文件复制到相应位置(记得设置 ``): -假设我们有几个 CSV 格式的文件,其在 S3 上的 URI 如下: +```bash +sudo -u clickhouse \ + cp keeper.xml /etc/clickhouse-keeper/keeper.xml +``` -* '[https://clickhouse-public-datasets.s3.amazonaws.com/my-bucket/some_folder/some_file_1.csv](https://clickhouse-public-datasets.s3.amazonaws.com/my-bucket/some_folder/some_file_1.csv)' -* '[https://clickhouse-public-datasets.s3.amazonaws.com/my-bucket/some_folder/some_file_2.csv](https://clickhouse-public-datasets.s3.amazonaws.com/my-bucket/some_folder/some_file_2.csv)' -* '[https://clickhouse-public-datasets.s3.amazonaws.com/my-bucket/some_folder/some_file_3.csv](https://clickhouse-public-datasets.s3.amazonaws.com/my-bucket/some_folder/some_file_3.csv)' -* '[https://clickhouse-public-datasets.s3.amazonaws.com/my-bucket/another_folder/some_file_1.csv](https://clickhouse-public-datasets.s3.amazonaws.com/my-bucket/another_folder/some_file_1.csv)' -* '[https://clickhouse-public-datasets.s3.amazonaws.com/my-bucket/another_folder/some_file_2.csv](https://clickhouse-public-datasets.s3.amazonaws.com/my-bucket/another_folder/some_file_2.csv)' -* '[https://clickhouse-public-datasets.s3.amazonaws.com/my-bucket/another_folder/some_file_3.csv](https://clickhouse-public-datasets.s3.amazonaws.com/my-bucket/another_folder/some_file_3.csv)' +### 配置 ClickHouse 服务器 -有几种方法可以创建一个由这六个文件构成的表: +#### 定义集群 -1. 指定文件后缀的范围: +ClickHouse 集群在配置文件的 `` 部分中定义。在此示例中定义了一个名为 `cluster_1S_2R` 的集群,它由一个分片和两个副本组成。这两个副本位于主机 `chnode1` 和 `chnode2` 上。 -```sql -CREATE TABLE table_with_range (name String, value UInt32) - ENGINE = S3('https://clickhouse-public-datasets.s3.amazonaws.com/my-bucket/{some,another}_folder/some_file_{1..3}', 'CSV'); +```xml title="/etc/clickhouse-server/config.d/remote-servers.xml" + + + + + + chnode1 + 9000 + + + chnode2 + 9000 + + + + + ``` -2. 将所有带有 `some_file_` 前缀的文件取出(两个文件夹中都不应存在除此之外、带有该前缀的额外文件): +在使用集群时,定义宏来为 DDL 查询自动填充集群、分片(shard)和副本(replica)设置会非常方便。此示例允许你在未显式提供 `shard` 和 `replica` 相关信息的情况下使用复制表引擎。创建表之后,你可以通过查询 `system.tables` 查看 `shard` 和 `replica` 宏是如何被使用的。 -```sql -CREATE TABLE table_with_question_mark (name String, value UInt32) - ENGINE = S3('https://clickhouse-public-datasets.s3.amazonaws.com/my-bucket/{some,another}_folder/some_file_?', 'CSV'); +```xml title="/etc/clickhouse-server/config.d/macros.xml" + + + /clickhouse/task_queue/ddl + + + cluster_1S_2R + 1 + replica_1 + + ``` -3. 将这两个文件夹中的所有文件拿出来(所有文件都应符合查询中描述的格式和架构): +:::note +上述宏适用于 `chnode1`,在 `chnode2` 上需将 `replica` 设置为 `replica_2`。 +::: -```sql -CREATE TABLE table_with_asterisk (name String, value UInt32) - ENGINE = S3('https://clickhouse-public-datasets.s3.amazonaws.com/my-bucket/{some,another}_folder/*', 'CSV'); -``` +#### 禁用零拷贝复制 -## 存储设置 {#storage-settings} +在 ClickHouse 22.7 及更早版本中,对于 S3 和 HDFS 磁盘,`allow_remote_fs_zero_copy_replication` 的默认值为 `true`。在本文描述的灾难恢复场景中,应将该设置改为 `false`,而在 22.8 及更高版本中,该设置的默认值已经为 `false`。 -- [s3_truncate_on_insert](/operations/settings/settings.md#s3_truncate_on_insert) - 允许在插入前截断文件。默认禁用。 -- [s3_create_new_file_on_insert](/operations/settings/settings.md#s3_create_new_file_on_insert) - 当格式带有后缀时,允许在每次插入操作时创建一个新文件。默认禁用。 -- [s3_skip_empty_files](/operations/settings/settings.md#s3_skip_empty_files) - 允许在读取时跳过空文件。默认启用。 +该设置应为 `false` 的原因有两点:1)此功能尚未达到生产就绪;2)在灾难恢复场景下,数据和元数据都需要存储在多个地域。请将 `allow_remote_fs_zero_copy_replication` 设置为 `false`。 +```xml title="/etc/clickhouse-server/config.d/remote-servers.xml" + + + false + + +``` +ClickHouse Keeper 负责在各个 ClickHouse 节点之间协调数据复制。要让 ClickHouse 识别这些 ClickHouse Keeper 节点,需要在每个 ClickHouse 节点上添加一份配置文件。 -## 与 S3 相关的设置 {#settings} +```xml title="/etc/clickhouse-server/config.d/use_keeper.xml" + + + + keepernode1 + 9181 + + + keepernode2 + 9181 + + + keepernode3 + 9181 + + + +``` -以下设置可以在查询执行前进行配置,或写入配置文件。 +### 配置网络 -- `s3_max_single_part_upload_size` — 使用单部分上传到 S3 时,单个对象允许的最大大小。默认值为 `32Mb`。 -- `s3_min_upload_part_size` — 使用 [S3 多部分上传](https://docs.aws.amazon.com/AmazonS3/latest/dev/uploadobjusingmpu.html) 时,每个分片的最小大小。默认值为 `16Mb`。 -- `s3_max_redirects` — 允许的 S3 重定向跳转的最大次数。默认值为 `10`。 -- `s3_single_read_retries` — 单次读操作的最大重试次数。默认值为 `4`。 -- `s3_max_put_rps` — 在开始限流前,每秒允许的最大 PUT 请求数。默认值为 `0`(无限制)。 -- `s3_max_put_burst` — 在触及每秒请求数限制前,可以同时发起的最大请求数。默认值为 `0` 时,等同于 `s3_max_put_rps`。 -- `s3_max_get_rps` — 在开始限流前,每秒允许的最大 GET 请求数。默认值为 `0`(无限制)。 -- `s3_max_get_burst` — 在触及每秒请求数限制前,可以同时发起的最大请求数。默认值为 `0` 时,等同于 `s3_max_get_rps`。 -- `s3_upload_part_size_multiply_factor` - 每当在一次对 S3 的写入中上传了 `s3_multiply_parts_count_threshold` 个分片时,将 `s3_min_upload_part_size` 按该因子放大。默认值为 `2`。 -- `s3_upload_part_size_multiply_parts_count_threshold` - 每当向 S3 上传了该数量的分片时,会将 `s3_min_upload_part_size` 乘以 `s3_upload_part_size_multiply_factor`。默认值为 `500`。 -- `s3_max_inflight_parts_for_one_file` - 限制对同一对象可以并发执行的 PUT 请求数。该数量应被限制。值为 `0` 表示不限制。默认值为 `20`。每个进行中的分片(in-flight part)都会占用一个缓冲区,对于前 `s3_upload_part_size_multiply_factor` 个分片,缓冲区大小为 `s3_min_upload_part_size`;当文件足够大时,缓冲区会更大,详见 `upload_part_size_multiply_factor`。在默认设置下,对于小于 `8G` 的文件,单个上传文件占用的内存不超过 `320Mb`。对于更大的文件,占用会更高。 +在 AWS 中配置安全设置时,请参阅[网络端口](../../../guides/sre/network-ports.md)列表,以确保你的服务器之间以及你与服务器之间的通信正常。 -安全注意事项:如果恶意用户可以指定任意 S3 URL,应将 `s3_max_redirects` 设为 `0` 以避免 [SSRF](https://en.wikipedia.org/wiki/Server-side_request_forgery) 攻击;或者在服务器配置中指定 `remote_host_filter`。 +三台服务器都必须监听网络连接,以便它们能够彼此之间以及与 S3 通信。默认情况下,ClickHouse 仅在本机回环地址上监听,因此必须更改此设置。相关配置位于 `/etc/clickhouse-server/config.d/`。下面是一个示例,用于将 ClickHouse 和 ClickHouse Keeper 配置为在所有 IPv4 接口上监听。有关更多信息,请参阅文档或默认配置文件 `/etc/clickhouse/config.xml`。 +```xml title="/etc/clickhouse-server/config.d/networking.xml" + + 0.0.0.0 + +``` +### 启动服务器 -## 基于 endpoint 的设置 +#### 运行 ClickHouse Keeper -可以在配置文件中为指定的 endpoint 设置以下配置(通过 URL 的精确前缀进行匹配): +在每台 Keeper 服务器上,运行适用于所用操作系统的命令,例如: -* `endpoint` — 指定 endpoint 的前缀。必需项。 -* `access_key_id` 和 `secret_access_key` — 指定用于该 endpoint 的凭证。可选。 -* `use_environment_credentials` — 如果设置为 `true`,S3 客户端将尝试从环境变量和给定 endpoint 的 [Amazon EC2](https://en.wikipedia.org/wiki/Amazon_Elastic_Compute_Cloud) 元数据中获取凭证。可选,默认值为 `false`。 -* `region` — 指定 S3 区域名。可选。 -* `use_insecure_imds_request` — 如果设置为 `true`,S3 客户端在从 Amazon EC2 元数据获取凭证时将使用不安全的 IMDS 请求。可选,默认值为 `false`。 -* `expiration_window_seconds` — 用于检查基于过期时间的凭证是否已失效的宽限时间(秒)。可选,默认值为 `120`。 -* `no_sign_request` - 忽略所有凭证,使请求不进行签名。用于访问公共存储桶时非常有用。 -* `header` — 将指定的 HTTP 头添加到对给定 endpoint 的请求中。可选,可以指定多次。 -* `access_header` - 当不存在来自其他来源的凭证时,将指定的 HTTP 头添加到对给定 endpoint 的请求中。 -* `server_side_encryption_customer_key_base64` — 如果指定,将为访问使用 SSE-C 加密的 S3 对象设置所需的 HTTP 头。可选。 -* `server_side_encryption_kms_key_id` - 如果指定,将为访问使用 [SSE-KMS 加密](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html) 的 S3 对象设置所需的 HTTP 头。如果指定为空字符串,则使用 AWS 托管的 S3 密钥。可选。 -* `server_side_encryption_kms_encryption_context` - 如果与 `server_side_encryption_kms_key_id` 一起指定,将设置给定的 SSE-KMS 加密上下文 HTTP 头。可选。 -* `server_side_encryption_kms_bucket_key_enabled` - 如果与 `server_side_encryption_kms_key_id` 一起指定,将设置启用 SSE-KMS S3 bucket key 的 HTTP 头。可选,可以为 `true` 或 `false`,默认不设置(遵循 bucket 级别设置)。 -* `max_single_read_retries` — 单次读取时的最大重试次数。默认值为 `4`。可选。 -* `max_put_rps`、`max_put_burst`、`max_get_rps` 和 `max_get_burst` - 限流设置(参见上文说明),用于特定 endpoint,而不是按查询进行设置。可选。 +```bash +sudo systemctl enable clickhouse-keeper +sudo systemctl start clickhouse-keeper +sudo systemctl status clickhouse-keeper +``` -**示例:** +#### 检查 ClickHouse Keeper 状态 -```xml - - - https://clickhouse-public-datasets.s3.amazonaws.com/my-test-bucket-768/ - - - - - - - - - - - - - - - +使用 `netcat` 向 ClickHouse Keeper 发送命令。例如,`mntr` 命令会返回 ClickHouse Keeper 集群的状态。如果在每个 Keeper 节点上运行该命令,可以看到其中一个是 leader,另外两个是 follower: + + +```bash +echo mntr | nc localhost 9181 ``` +```response +zk_version v22.7.2.15-stable-f843089624e8dd3ff7927b8a125cf3a7a769c069 +zk_avg_latency 0 +zk_max_latency 11 +zk_min_latency 0 +zk_packets_received 1783 +zk_packets_sent 1783 +# highlight-start +zk_num_alive_connections 2 +zk_outstanding_requests 0 +zk_server_state leader +# highlight-end +zk_znode_count 135 +zk_watch_count 8 +zk_ephemerals_count 3 +zk_approximate_data_size 42533 +zk_key_arena_size 28672 +zk_latest_snapshot_size 0 +zk_open_file_descriptor_count 182 +zk_max_file_descriptor_count 18446744073709551615 +# highlight-start +zk_followers 2 +zk_synced_followers 2 +# highlight-end +``` -## 使用归档文件 +#### 运行 ClickHouse 服务器 -假设我们在 S3 上有若干归档文件,其 URI 如下: +在每台 ClickHouse 服务器上运行: -* '[https://s3-us-west-1.amazonaws.com/umbrella-static/top-1m-2018-01-10.csv.zip](https://s3-us-west-1.amazonaws.com/umbrella-static/top-1m-2018-01-10.csv.zip)' -* '[https://s3-us-west-1.amazonaws.com/umbrella-static/top-1m-2018-01-11.csv.zip](https://s3-us-west-1.amazonaws.com/umbrella-static/top-1m-2018-01-11.csv.zip)' -* '[https://s3-us-west-1.amazonaws.com/umbrella-static/top-1m-2018-01-12.csv.zip](https://s3-us-west-1.amazonaws.com/umbrella-static/top-1m-2018-01-12.csv.zip)' +```bash +sudo service clickhouse-server start +``` -可以使用 :: 从这些归档文件中提取数据。通配模式(glob)既可以用于 URL 的部分,也可以用于 :: 之后的部分(用于指定归档内部文件的名称)。 +#### 验证 ClickHouse 服务器 + +当你添加[集群配置](#define-a-cluster)时,定义了一个在两个 ClickHouse 节点上复制的单分片(shard)。在此验证步骤中,你将检查 ClickHouse 启动时是否成功构建了该集群,并使用该集群创建一个复制表。 + +* 验证集群是否存在: + ```sql + show clusters + ``` + ```response + ┌─cluster───────┐ + │ cluster_1S_2R │ + └───────────────┘ + + 1 row in set. Elapsed: 0.009 sec. ` + ``` + +* 使用 `ReplicatedMergeTree` 表引擎在集群中创建一张表: + ```sql + create table trips on cluster 'cluster_1S_2R' ( + `trip_id` UInt32, + `pickup_date` Date, + `pickup_datetime` DateTime, + `dropoff_datetime` DateTime, + `pickup_longitude` Float64, + `pickup_latitude` Float64, + `dropoff_longitude` Float64, + `dropoff_latitude` Float64, + `passenger_count` UInt8, + `trip_distance` Float64, + `tip_amount` Float32, + `total_amount` Float32, + `payment_type` Enum8('UNK' = 0, 'CSH' = 1, 'CRE' = 2, 'NOC' = 3, 'DIS' = 4)) + ENGINE = ReplicatedMergeTree + PARTITION BY toYYYYMM(pickup_date) + ORDER BY pickup_datetime + SETTINGS storage_policy='s3_main' + ``` + ```response + ┌─host────┬─port─┬─status─┬─error─┬─num_hosts_remaining─┬─num_hosts_active─┐ + │ chnode1 │ 9000 │ 0 │ │ 1 │ 0 │ + │ chnode2 │ 9000 │ 0 │ │ 0 │ 0 │ + └─────────┴──────┴────────┴───────┴─────────────────────┴──────────────────┘ + ``` + +* 理解前面定义的宏的用法 + + 宏 `shard` 和 `replica` 已在[前面定义](#define-a-cluster),在下面高亮的行中,你可以看到在每个 ClickHouse 节点上这些宏被替换后的实际取值。此外,还使用了 `uuid` 值;`uuid` 没有在宏中定义,因为它是由系统生成的。 + + ```sql + SELECT create_table_query + FROM system.tables + WHERE name = 'trips' + FORMAT Vertical + ``` + + ```response + Query id: 4d326b66-0402-4c14-9c2f-212bedd282c0 + ``` + + +第 1 行: +────── +create_table_query: CREATE TABLE default.trips (`trip_id` UInt32, `pickup_date` Date, `pickup_datetime` DateTime, `dropoff_datetime` DateTime, `pickup_longitude` Float64, `pickup_latitude` Float64, `dropoff_longitude` Float64, `dropoff_latitude` Float64, `passenger_count` UInt8, `trip_distance` Float64, `tip_amount` Float32, `total_amount` Float32, `payment_type` Enum8('UNK' = 0, 'CSH' = 1, 'CRE' = 2, 'NOC' = 3, 'DIS' = 4)) + +# highlight-next-line + +ENGINE = ReplicatedMergeTree('/clickhouse/tables/{uuid}/{shard}', '{replica}') +PARTITION BY toYYYYMM(pickup_date) ORDER BY pickup_datetime SETTINGS storage_policy = 's3_main' + +结果中有 1 行。耗时:0.012 秒。 + +```` +:::note +您可以通过设置 `default_replica_path` 和 `default_replica_name` 来自定义上述 ZooKeeper 路径 `'clickhouse/tables/{uuid}/{shard}`。相关文档请参见[此处](/operations/server-configuration-parameters/settings.md/#default_replica_path)。 +::: +### 测试 {#testing-1} + +这些测试将验证数据是否在两台服务器之间正确复制,以及数据是否存储在 S3 存储桶而非本地磁盘中。 + +- 从纽约市出租车数据集添加数据: ```sql -SELECT * -FROM s3( - 'https://s3-us-west-1.amazonaws.com/umbrella-static/top-1m-2018-01-1{0..2}.csv.zip :: *.csv' -); -``` +INSERT INTO trips +SELECT trip_id, + pickup_date, + pickup_datetime, + dropoff_datetime, + pickup_longitude, + pickup_latitude, + dropoff_longitude, + dropoff_latitude, + passenger_count, + trip_distance, + tip_amount, + total_amount, + payment_type + FROM s3('https://ch-nyc-taxi.s3.eu-west-3.amazonaws.com/tsv/trips_{0..9}.tsv.gz', 'TabSeparatedWithNames') LIMIT 1000000; +```` + +* 验证数据已存储在 S3 中。 + + 此查询显示磁盘上的数据大小,以及用于决定使用哪个磁盘的存储策略。 + + ```sql + SELECT + engine, + data_paths, + metadata_path, + storage_policy, + formatReadableSize(total_bytes) + FROM system.tables + WHERE name = 'trips' + FORMAT Vertical + ``` + + ```response + Query id: af7a3d1b-7730-49e0-9314-cc51c4cf053c + + Row 1: + ────── + engine: ReplicatedMergeTree + data_paths: ['/var/lib/clickhouse/disks/s3_disk/store/551/551a859d-ec2d-4512-9554-3a4e60782853/'] + metadata_path: /var/lib/clickhouse/store/e18/e18d3538-4c43-43d9-b083-4d8e0f390cf7/trips.sql + storage_policy: s3_main + formatReadableSize(total_bytes): 36.42 MiB + + 1 row in set. Elapsed: 0.009 sec. + ``` + + 检查本地磁盘上的数据大小。从上面的查询结果可以看到,存储的数百万行数据在磁盘上的大小为 36.42 MiB。这些数据应当位于 S3 上,而不是本地磁盘上。上述查询还告知我们数据和元数据在本地磁盘上的存储路径。检查本地数据: + + ```response + root@chnode1:~# du -sh /var/lib/clickhouse/disks/s3_disk/store/551 + 536K /var/lib/clickhouse/disks/s3_disk/store/551 + ``` + + 在每个 S3 Bucket 中检查 S3 数据(未显示合计值,但在插入完成后,两个 Bucket 中大约都存储了 36 MiB): + +第一个 S3 Bucket 中的数据大小以及存储使用情况指标 + +第二个 S3 Bucket 中的数据大小以及存储使用情况指标 + + +## S3Express + +[S3Express](https://aws.amazon.com/s3/storage-classes/express-one-zone/) 是 Amazon S3 中一种新的高性能、单可用区存储类别(storage class)。 + +你可以参考这篇 [博客](https://aws.amazon.com/blogs/storage/clickhouse-cloud-amazon-s3-express-one-zone-making-a-blazing-fast-analytical-database-even-faster/),了解我们在 ClickHouse 中测试 S3Express 的经验。 :::note -ClickHouse 支持三种归档格式: -ZIP -TAR -7Z -虽然可以从任意受支持的存储位置访问 ZIP 和 TAR 归档,但 7Z 归档只能从安装了 ClickHouse 的本地文件系统读取。 +S3Express 将数据存储在单个可用区(AZ)中。这意味着一旦该 AZ 宕机,数据将不可用。 ::: +### S3 磁盘 + +使用基于 S3Express bucket 的存储创建表,需要执行以下步骤: + +1. 创建一个 `Directory` 类型的 bucket +2. 配置合适的 bucket 策略,为你的 S3 用户授予所有所需权限(例如使用 `"Action": "s3express:*"` 来简单地允许不受限访问) +3. 在配置存储策略(storage policy)时,请提供 `region` 参数 + +存储配置与普通 S3 相同,例如可以如下所示: -## 访问公共 bucket +```sql + + + + s3 + https://my-test-bucket--eun1-az1--x-s3.s3express-eun1-az1.eu-north-1.amazonaws.com/store/ + eu-north-1 + ... + ... + + + + + +
+ s3_express +
+
+
+
+
+``` + +接下来在新的存储上创建一张表: + +```sql +CREATE TABLE t +( + a UInt64, + s String +) +ENGINE = MergeTree +ORDER BY a +SETTINGS storage_policy = 's3_express'; +``` + +### S3 存储 -ClickHouse 会尝试从多种不同类型的来源自动获取凭证。 -有时,在访问某些公共 bucket 时,这可能会导致问题,从而导致客户端返回 `403` 错误码。 -可以通过使用 `NOSIGN` 关键字来避免这一问题,该关键字会强制客户端忽略所有凭证,不对请求进行签名。 +同时也支持 S3 存储,但仅限于 `Object URL` 路径。例如: ```sql -CREATE TABLE big_table (name String, value UInt32) - ENGINE = S3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/aapl_stock.csv', NOSIGN, 'CSVWithNames'); +SELECT * FROM s3('https://test-bucket--eun1-az1--x-s3.s3express-eun1-az1.eu-north-1.amazonaws.com/file.csv', ...) ``` +还需要在配置中指定 bucket 所在的区域: -## 性能优化 {#optimizing-performance} +```xml + + + https://test-bucket--eun1-az1--x-s3.s3express-eun1-az1.eu-north-1.amazonaws.com + eu-north-1 + + +``` -如需了解如何优化 `s3` 函数的性能,请参阅[我们的详细指南](/integrations/s3/performance)。 +### 备份 +可以将备份存储在我们之前创建的磁盘上: +```sql +BACKUP TABLE t TO Disk('s3_express', 't.zip') -## 另请参阅 {#see-also} +┌─id───────────────────────────────────┬─status─────────┐ +│ c61f65ac-0d76-4390-8317-504a30ba7595 │ BACKUP_CREATED │ +└──────────────────────────────────────┴────────────────┘ +``` + +```sql +RESTORE TABLE t AS t_restored FROM Disk('s3_express', 't.zip') -- [S3 表函数](../../../sql-reference/table-functions/s3.md) -- [将 S3 与 ClickHouse 集成](/integrations/s3) +┌─id───────────────────────────────────┬─status───┐ +│ 4870e829-8d76-4171-ae59-cffaf58dea04 │ RESTORED │ +└──────────────────────────────────────┴──────────┘ +``` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/interfaces/cli.md b/i18n/zh/docusaurus-plugin-content-docs/current/interfaces/cli.md index 7b5141e2e8b..ccc963d9cbb 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/interfaces/cli.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/interfaces/cli.md @@ -860,19 +860,20 @@ ClickHouse 客户端会按以下顺序查找,并使用第一个存在的配置 | Option | Description | Default | |----------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------| | `--connection ` | 配置文件中预先配置的连接名称。参见 [连接凭证](#connection-credentials)。 | - | -| `-d [ --database ] ` | 选择此连接默认使用的数据库。 | 来自服务器设置的当前数据库(默认是 `default`) | -| `-h [ --host ] ` | 要连接的 ClickHouse 服务器的主机名。可以是主机名,也可以是 IPv4 或 IPv6 地址。可以通过多次传递该参数来指定多个主机。 | `localhost` | +| `-d [ --database ] ` | 选择此连接默认使用的数据库。 | 来自服务器设置的当前数据库(默认是 `default`) | +| `-h [ --host ] ` | 要连接的 ClickHouse 服务器的主机名。可以是主机名,也可以是 IPv4 或 IPv6 地址。可以通过多次传入该参数来指定多个主机。 | `localhost` | | `--jwt ` | 使用 JSON Web Token (JWT) 进行身份验证。

服务器端 JWT 授权仅在 ClickHouse Cloud 中可用。 | - | -| `--no-warnings` | 禁止在客户端连接到服务器时显示来自 `system.warnings` 的警告。 | - | -| `--password ` | 数据库用户的密码。你也可以在配置文件中为某个连接指定密码。如果未指定密码,客户端会提示你输入密码。 | - | -| `--port ` | 服务器用于接受连接的端口。默认端口为 9440(TLS)和 9000(无 TLS)。

注意:客户端使用的是原生协议,而不是 HTTP(S)。 | 如果指定了 `--secure`,则为 `9440`,否则为 `9000`。当主机名以 `.clickhouse.cloud` 结尾时始终默认为 `9440`。 | -| `-s [ --secure ]` | 是否使用 TLS。

在连接到端口 9440(默认安全端口)或 ClickHouse Cloud 时会自动启用。

你可能需要在[配置文件](#configuration_files)中配置 CA 证书。可用的配置设置与[服务器端 TLS 配置](../operations/server-configuration-parameters/settings.md#openssl)相同。 | 在连接到端口 9440 或 ClickHouse Cloud 时自动启用 | +| `--no-warnings` | 在客户端连接到服务器时,不显示来自 `system.warnings` 的警告。 | - | +| `--no-server-client-version-message` | 在客户端连接到服务器时,抑制服务器与客户端版本不匹配的提示信息。 | - | +| `--password ` | 数据库用户的密码。也可以在配置文件中为连接指定密码。如果未指定密码,客户端会提示输入。 | - | +| `--port ` | 服务器接受连接的端口。默认端口为 9440(TLS)和 9000(非 TLS)。

注意:客户端使用的是原生协议而不是 HTTP(S)。 | 如果指定了 `--secure`,则为 `9440`,否则为 `9000`。当主机名以 `.clickhouse.cloud` 结尾时,始终默认为 `9440`。 | +| `-s [ --secure ]` | 是否使用 TLS。

在连接到端口 9440(默认安全端口)或 ClickHouse Cloud 时会自动启用。

可能需要在[配置文件](#configuration_files)中配置 CA 证书。可用的配置项与[服务器端 TLS 配置](../operations/server-configuration-parameters/settings.md#openssl) 相同。 | 在连接到端口 9440 或 ClickHouse Cloud 时自动启用 | | `--ssh-key-file ` | 包含用于与服务器进行身份验证的 SSH 私钥的文件。 | - | -| `--ssh-key-passphrase ` | 为 `--ssh-key-file` 中指定的 SSH 私钥提供的密码短语。 | - | -| `-u [ --user ] ` | 要以其身份连接的数据库用户。 | `default` | +| `--ssh-key-passphrase ` | `--ssh-key-file` 中指定的 SSH 私钥的密码短语。 | - | +| `-u [ --user ] ` | 要用于连接的数据库用户。 | `default` | :::note -客户端还支持[连接字符串](#connection_string),可替代 `--host`、`--port`、`--user` 和 `--password` 选项。 +除了 `--host`、`--port`、`--user` 和 `--password` 选项外,客户端还支持[连接字符串](#connection_string)。 ::: ### 查询选项 {#command-line-options-query} diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/interfaces/formats/Prometheus.md b/i18n/zh/docusaurus-plugin-content-docs/current/interfaces/formats/Prometheus.md index 5527c6e7aa3..808ff77be75 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/interfaces/formats/Prometheus.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/interfaces/formats/Prometheus.md @@ -70,6 +70,8 @@ http_request_duration_seconds_bucket{le="1"} 133988 http_request_duration_seconds_bucket{le="+Inf"} 144320 http_request_duration_seconds_sum 53423 http_request_duration_seconds_count 144320 +``` + # HELP http_requests_total HTTP 请求总数 # TYPE http_requests_total counter @@ -78,17 +80,23 @@ http_requests_total{code="400",method="post"} 3 1395066363000 metric_without_timestamp_and_labels 12.47 -# HELP rpc_duration_seconds RPC 调用时长(秒)的概要。 -# TYPE rpc_duration_seconds summary -rpc_duration_seconds{quantile="0.01"} 3102 -rpc_duration_seconds{quantile="0.05"} 3272 -rpc_duration_seconds{quantile="0.5"} 4773 -rpc_duration_seconds{quantile="0.9"} 9001 -rpc_duration_seconds{quantile="0.99"} 76656 -rpc_duration_seconds_sum 17560473 -rpc_duration_seconds_count 2693 - -something_weird{problem="division by zero"} +Inf -3982045 + + +# HELP rpc_duration_seconds RPC 调用时长(秒)的概要。 + +# TYPE rpc_duration_seconds summary + +rpc_duration_seconds{quantile="0.01"} 3102 +rpc_duration_seconds{quantile="0.05"} 3272 +rpc_duration_seconds{quantile="0.5"} 4773 +rpc_duration_seconds{quantile="0.9"} 9001 +rpc_duration_seconds{quantile="0.99"} 76656 +rpc_duration_seconds_sum 17560473 +rpc_duration_seconds_count 2693 + +something_weird{problem="division by zero"} +Inf -3982045 + +``` ``` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/managing-data/core-concepts/primary-indexes.mdx b/i18n/zh/docusaurus-plugin-content-docs/current/managing-data/core-concepts/primary-indexes.mdx index cd98d19cf1e..e23d1e3cf72 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/managing-data/core-concepts/primary-indexes.mdx +++ b/i18n/zh/docusaurus-plugin-content-docs/current/managing-data/core-concepts/primary-indexes.mdx @@ -23,13 +23,13 @@ import Image from '@theme/IdealImage';
-ClickHouse 中的稀疏主键索引用于高效定位可能包含满足查询在表 ^^primary key^^ 列上条件的数据的[粒度(granule)](https://clickhouse.com/docs/guides/best-practices/sparse-primary-indexes#data-is-organized-into-granules-for-parallel-data-processing)——也就是一块块的行数据。下一节将解释该索引是如何根据这些列中的值构建出来的。 +ClickHouse 中的稀疏主键索引用于高效定位[粒度(granules)](/guides/best-practices/sparse-primary-indexes#data-is-organized-into-granules-for-parallel-data-processing)——由多行组成的数据块——这些数据块可能包含满足查询在表 ^^primary key^^ 列上条件的数据。下一节将说明该索引是如何根据这些列中的值构建的。 ### 稀疏主索引的创建 \{#sparse-primary-index-creation\} -为了展示稀疏主索引是如何构建的,我们使用 [uk_price_paid_simple](https://clickhouse.com/docs/parts) 表配合一些动画进行说明。 +为了演示稀疏主索引是如何构建的,我们会结合一些动画来说明 [uk_price_paid_simple](/parts) 表。 -作为[回顾](https://clickhouse.com/docs/parts),在我们的示例表 ① 中,^^primary key^^ 为 (town, street),② 插入的数据 ③ 存储在磁盘上,按照 ^^primary key^^ 列的值排序并压缩,每一列存放在单独的文件中: +作为[回顾](/parts),在我们的示例表①中,^^primary key^^ 为 (town, street),② 插入的数据会被③存储到磁盘上,根据 ^^primary key^^ 列的取值排序并压缩,每一列单独存储在各自的文件中: @@ -37,9 +37,9 @@ ClickHouse 中的稀疏主键索引用于高效定位可能包含满足查询在
-在处理时,每一列的数据会被 ④ 在逻辑上划分为若干 ^^granule^^——每个 ^^granule^^ 覆盖 8,192 行——它是 ClickHouse 数据处理机制操作的最小单元。 +在处理时,每一列的数据会被④在逻辑上划分为多个 granule——每个 granule 覆盖 8,192 行——这是 ClickHouse 数据处理机制所使用的最小单元。 -这种 ^^granule^^ 结构也是主索引之所以是**稀疏**的原因:ClickHouse 并不会为每一行建立索引,而是仅从每个 ^^granule^^ 中的一行——具体来说,是第一行——保存 ⑤ 该行的 ^^primary key^^ 值。这样,每个 ^^granule^^ 就对应一个索引条目: +这种 ^^granule^^ 结构也是主索引之所以是**稀疏的**:ClickHouse 并不会为每一行建立索引,而是只存储每个 ^^granule^^ 中一行的 ^^primary key^^ 值——具体来说,是第一行的值。这样每个 ^^granule^^ 就对应一个索引项: @@ -47,7 +47,7 @@ ClickHouse 中的稀疏主键索引用于高效定位可能包含满足查询在
-得益于其稀疏性,主索引足够小,可以完全放入内存,从而在包含 ^^primary key^^ 列谓词的查询中实现快速过滤。在下一节中,我们将展示它如何加速此类查询。 +得益于这种稀疏性,主索引足够小,可以完整地放入内存中,从而为在 ^^primary key^^ 列上带有谓词条件的查询提供快速过滤。在下一节中,我们将展示它如何帮助加速此类查询。 ### 主索引的使用 \{#primary-index-usage\} diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/query-cache.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/query-cache.md index a74277cfab0..0dfe2d10888 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/query-cache.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/query-cache.md @@ -1,5 +1,5 @@ --- -description: '关于在 ClickHouse 中使用和配置查询缓存功能的指南' +description: '使用和配置 ClickHouse 查询缓存功能的指南' sidebar_label: '查询缓存' sidebar_position: 65 slug: /operations/query-cache @@ -7,36 +7,37 @@ title: '查询缓存' doc_type: 'guide' --- - - # 查询缓存 -查询缓存可以让 `SELECT` 查询只需计算一次,并在后续执行相同查询时直接从缓存中返回结果。 +查询缓存允许某个 `SELECT` 查询只需计算一次,之后再次执行相同查询时可直接从缓存中返回结果。 根据查询类型的不同,这可以显著降低 ClickHouse 服务器的延迟和资源消耗。 +## 背景、设计和限制 \{#background-design-and-limitations\} +查询缓存通常可以被视为事务一致或事务不一致两类。 -## 背景、设计和限制 {#background-design-and-limitations} - -查询缓存通常可以分为事务一致性缓存和事务非一致性缓存两类。 - -- 在事务一致性缓存中,当 `SELECT` 查询的结果发生变化或可能发生变化时,数据库会使缓存的查询结果失效(丢弃)。在 ClickHouse 中,会改变数据的操作包括对表的插入/更新/删除操作或折叠合并。事务一致性缓存特别适用于 OLTP 数据库,例如 [MySQL](https://dev.mysql.com/doc/refman/5.6/en/query-cache.html)(在 v8.0 之后移除了查询缓存功能)和 [Oracle](https://docs.oracle.com/database/121/TGDBA/tune_result_cache.htm)。 -- 在事务非一致性缓存中,查询结果中的轻微不准确性是可以接受的,其前提假设是所有缓存条目都被分配了一个有效期,过期后会失效(例如 1 分钟),并且在此期间底层数据变化很小。这种方法总体上更适合 OLAP 数据库。举一个事务非一致性缓存足以满足需求的例子:考虑报表工具中的每小时销售报告,该报告被多个用户同时访问。销售数据的变化通常足够缓慢,因此数据库只需要计算一次报告(由第一个 `SELECT` 查询表示)。后续查询可以直接从查询缓存中获取结果。在此示例中,合理的有效期可以设置为 30 分钟。 - -事务非一致性缓存传统上由与数据库交互的客户端工具或代理包(例如 [chproxy](https://www.chproxy.org/configuration/caching/))提供。因此,相同的缓存逻辑和配置经常被重复实现。通过 ClickHouse 的查询缓存,缓存逻辑转移到服务器端。这减少了维护工作量并避免了冗余。 +- 在事务一致的缓存中,如果 `SELECT` 查询的结果发生变化或可能发生变化,数据库会使缓存的查询结果失效(丢弃)。 + 在 ClickHouse 中,更改数据的操作包括对表的插入 / 更新 / 删除操作,或者折叠合并(collapsing merges)。事务一致的缓存特别适用于 OLTP 数据库,例如 + [MySQL](https://dev.mysql.com/doc/refman/5.6/en/query-cache.html)(在 v8.0 之后移除了查询缓存)和 + [Oracle](https://docs.oracle.com/database/121/TGDBA/tune_result_cache.htm)。 +- 在事务不一致的缓存中,在假设所有缓存条目都被分配了一个有效期(例如 1 分钟),并且在此期间底层数据变化很少的前提下,可以接受查询结果存在轻微不准确。 + 这种方式总体上更适合 OLAP 数据库。作为一个事务不一致缓存已足够的示例,可以考虑报表工具中的每小时销售报表,该报表会被多个用户同时访问。销售数据通常变化得足够缓慢,因此数据库只需计算一次报表(由第一次 `SELECT` 查询表示),后续查询可以直接从查询缓存中返回。 + 在这个例子中,一个合理的有效期可以是 30 分钟。 +事务不一致缓存传统上由与数据库交互的客户端工具或代理程序(例如 +[chproxy](https://www.chproxy.org/configuration/caching/))提供。因此,相同的缓存逻辑和配置往往会被重复实现。通过 ClickHouse 的查询缓存,缓存逻辑被移动到了服务端,从而减少维护工作量并避免冗余。 -## 配置设置和使用 {#configuration-settings-and-usage} +## 配置与使用 :::note -在 ClickHouse Cloud 中,必须使用[查询级别设置](/operations/settings/query-level)来编辑查询缓存设置。目前不支持编辑[配置级别设置](/operations/configuration-files)。 +在 ClickHouse Cloud 中,必须使用[查询级别设置](/operations/settings/query-level)来编辑查询缓存设置。目前不支持编辑[配置级别设置](/operations/configuration-files)。 ::: :::note -[clickhouse-local](utilities/clickhouse-local.md) 一次只运行一个查询。由于查询结果缓存在此场景下没有意义,因此在 clickhouse-local 中禁用了查询结果缓存。 +[clickhouse-local](utilities/clickhouse-local.md) 一次只运行一个查询。由于查询结果缓存在这种场景下并不适用,因此在 clickhouse-local 中禁用了查询结果缓存。 ::: -设置 [use_query_cache](/operations/settings/settings#use_query_cache) 可用于控制特定查询或当前会话的所有查询是否应使用查询缓存。例如,首次执行以下查询 +可以使用 [use_query_cache](/operations/settings/settings#use_query_cache) 设置来控制特定查询或当前会话中的所有查询是否使用查询缓存。例如,第一次执行查询时 ```sql SELECT some_expensive_calculation(column_1, column_2) @@ -44,13 +45,17 @@ FROM table SETTINGS use_query_cache = true; ``` -将把查询结果存储在查询缓存中。后续执行相同的查询(同样使用参数 `use_query_cache = true`)将从缓存中读取计算结果并立即返回。 +会将查询结果存储到查询缓存中。随后再次执行相同的查询(同样将参数 `use_query_cache = true` 设置为启用)时, +会从缓存中读取已计算的结果并立即返回。 :::note -设置 `use_query_cache` 和所有其他与查询缓存相关的设置仅对独立的 `SELECT` 语句生效。特别是,通过 `CREATE VIEW AS SELECT [...] SETTINGS use_query_cache = true` 创建的视图的 `SELECT` 结果不会被缓存,除非 `SELECT` 语句使用 `SETTINGS use_query_cache = true` 运行。 +设置 `use_query_cache` 以及所有其他与查询缓存相关的设置仅对独立的 `SELECT` 语句生效。特别地, +通过 `CREATE VIEW AS SELECT [...] SETTINGS use_query_cache = true` 创建的视图,其中的 `SELECT` 结果并不会被缓存,除非该 `SELECT` +语句在运行时也使用 `SETTINGS use_query_cache = true`。 ::: -可以使用设置 [enable_writes_to_query_cache](/operations/settings/settings#enable_writes_to_query_cache) 和 [enable_reads_from_query_cache](/operations/settings/settings#enable_reads_from_query_cache)(两者默认均为 `true`)更详细地配置缓存的使用方式。前者控制查询结果是否存储到缓存中,而后者决定数据库是否应尝试从缓存中检索查询结果。例如,以下查询将仅被动使用缓存,即尝试从中读取但不将其结果存储到缓存中: +可以使用设置项 [enable_writes_to_query_cache](/operations/settings/settings#enable_writes_to_query_cache) +和 [enable_reads_from_query_cache](/operations/settings/settings#enable_reads_from_query_cache)(两者默认均为 `true`)来更细粒度地配置缓存的使用方式。前者控制查询结果是否会写入缓存,而后者决定数据库是否应尝试从缓存中读取查询结果。例如,下列查询仅被动地使用缓存,即尝试从缓存中读取结果,但不会将其结果写入缓存: ```sql SELECT some_expensive_calculation(column_1, column_2) @@ -58,17 +63,25 @@ FROM table SETTINGS use_query_cache = true, enable_writes_to_query_cache = false; ``` -为了实现最大控制,通常建议仅在特定查询中提供设置 `use_query_cache`、`enable_writes_to_query_cache` 和 `enable_reads_from_query_cache`。也可以在用户或配置文件级别启用缓存(例如通过 `SET use_query_cache = true`),但应注意,这样所有 `SELECT` 查询都可能返回缓存结果。 +为了实现最大程度的控制,一般建议仅在特定查询上设置 `use_query_cache`、`enable_writes_to_query_cache` 和 +`enable_reads_from_query_cache`。也可以在用户或配置文件级别启用缓存(例如通过 `SET +use_query_cache = true`),但需要注意,此时所有 `SELECT` 查询都可能返回缓存结果。 -可以使用语句 `SYSTEM DROP QUERY CACHE` 清除查询缓存。查询缓存的内容显示在系统表 [system.query_cache](system-tables/query_cache.md) 中。自数据库启动以来的查询缓存命中和未命中次数在系统表 [system.events](system-tables/events.md) 中显示为事件 "QueryCacheHits" 和 "QueryCacheMisses"。这两个计数器仅针对使用设置 `use_query_cache = true` 运行的 `SELECT` 查询更新,其他查询不影响 "QueryCacheMisses"。系统表 [system.query_log](system-tables/query_log.md) 中的字段 `query_cache_usage` 显示每个已执行查询的查询结果是否被写入或从查询缓存中读取。系统表 [system.metrics](system-tables/metrics.md) 中的指标 `QueryCacheEntries` 和 `QueryCacheBytes` 显示查询缓存当前包含的条目数/字节数。 +可以使用语句 `SYSTEM DROP QUERY CACHE` 来清空查询缓存。查询缓存的内容显示在系统表 +[system.query_cache](system-tables/query_cache.md) 中。自数据库启动以来的查询缓存命中和未命中次数,会分别作为事件 +“QueryCacheHits”和“QueryCacheMisses”显示在系统表 [system.events](system-tables/events.md) 中。两个计数器仅会在 +`SELECT` 查询在设置 `use_query_cache = true` 的情况下运行时更新,其他查询不会影响 “QueryCacheMisses”。系统表 +[system.query_log](system-tables/query_log.md) 中字段 `query_cache_usage` 会对每个已执行的查询指示其结果是写入了查询缓存还是从查询缓存中读取。系统表 +[system.metrics](system-tables/metrics.md) 中的指标 `QueryCacheEntries` 和 `QueryCacheBytes` 显示查询缓存当前包含的条目数量和字节数。 -每个 ClickHouse 服务器进程存在一个查询缓存。但是,默认情况下缓存结果不在用户之间共享。这可以更改(见下文),但出于安全原因不建议这样做。 +查询缓存在每个 ClickHouse 服务器进程中各自独立存在一份。然而,默认情况下缓存结果不会在用户之间共享。可以更改这种行为(参见下文),但出于安全原因不推荐这样做。 -查询结果在查询缓存中通过其查询的[抽象语法树 (AST)](https://en.wikipedia.org/wiki/Abstract_syntax_tree) 进行引用。这意味着缓存不区分大小写,例如 `SELECT 1` 和 `select 1` 被视为相同的查询。为了使匹配更自然,所有与查询缓存和[输出格式化](settings/settings-formats.md)相关的查询级别设置都会从 AST 中移除。 +查询结果在查询缓存中是通过其查询的[抽象语法树(AST)](https://en.wikipedia.org/wiki/Abstract_syntax_tree) 来引用的。这意味着缓存对大小写不敏感,例如 `SELECT 1` 和 `select 1` 被视为同一个查询。为了使匹配更加自然,所有与查询缓存和[输出格式](settings/settings-formats.md) 相关的查询级别设置都会从 AST 中移除。 -如果查询因异常或用户取消而中止,则不会向查询缓存写入任何条目。 +如果查询因异常或用户取消而中止,则不会向查询缓存写入任何条目。 -查询缓存的大小(以字节为单位)、缓存条目的最大数量以及单个缓存条目的最大大小(以字节和记录数为单位)可以使用不同的[服务器配置选项](/operations/server-configuration-parameters/settings#query_cache)进行配置。 +查询缓存的大小(字节数)、缓存条目的最大数量以及单个缓存条目的最大大小(按字节数和记录数)可以通过不同的 +[服务器配置选项](/operations/server-configuration-parameters/settings#query_cache) 进行配置。 ```xml @@ -80,18 +93,19 @@ SETTINGS use_query_cache = true, enable_writes_to_query_cache = false; ``` -还可以使用[settings profiles](settings/settings-profiles.md)和[settings -constraints](settings/constraints-on-settings.md)来限制单个用户的缓存使用。更具体地说,你可以限制用户在查询缓存中可分配的最大内存(以字节为单位)以及可存储的查询结果的最大数量。为此,首先在 `users.xml` 中的用户配置文件中设置[query_cache_max_size_in_bytes](/operations/settings/settings#query_cache_max_size_in_bytes)和 -[query_cache_max_entries](/operations/settings/settings#query_cache_max_entries),然后将这两个设置设为只读: +还可以使用 [settings profiles](settings/settings-profiles.md) 和 [settings +constraints](settings/constraints-on-settings.md) 来限制单个用户的缓存使用量。更具体地说,可以限制用户在查询缓存中可分配的最大内存(以字节为单位)以及可存储的查询结果的最大数量。为此,首先在 `users.xml` 中的用户配置文件中设置 +[query_cache_max_size_in_bytes](/operations/settings/settings#query_cache_max_size_in_bytes) 和 +[query_cache_max_entries](/operations/settings/settings#query_cache_max_entries) 这两个配置项,然后将这两个设置设为只读: ```xml 10000 - + 100 - + @@ -104,8 +118,8 @@ constraints](settings/constraints-on-settings.md)来限制单个用户的缓存 ``` -要定义查询结果可以被缓存所需的最小运行时间,可以使用设置 -[query_cache_min_query_duration](/operations/settings/settings#query_cache_min_query_duration)。例如,以下查询的结果 +要设置查询结果可被缓存所需的最小运行时长,可以使用参数 +[query_cache_min_query_duration](/operations/settings/settings#query_cache_min_query_duration)。例如,下面这个查询的结果 ```sql SELECT some_expensive_calculation(column_1, column_2) @@ -113,16 +127,17 @@ FROM table SETTINGS use_query_cache = true, query_cache_min_query_duration = 5000; ``` -只有当查询运行时间超过 5 秒时,其结果才会被缓存。也可以指定查询需要运行多少次之后其结果才会被缓存——为此请使用设置 [query_cache_min_query_runs](/operations/settings/settings#query_cache_min_query_runs)。 +仅当查询运行时间超过 5 秒时才会被缓存。也可以指定查询需要运行多少次其结果才会被缓存——为此请使用设置 [query_cache_min_query_runs](/operations/settings/settings#query_cache_min_query_runs)。 -查询缓存中的条目在经过一段时间后会变为过期状态(生存时间,time-to-live)。默认情况下,该时间为 60 秒,但可以在会话、配置文件或查询级别通过设置 [query_cache_ttl](/operations/settings/settings#query_cache_ttl) 来指定不同的值。查询缓存采用“惰性”淘汰策略,即当某个条目过期时,不会立即从缓存中移除它。相反,当需要向查询缓存中插入一个新条目时,数据库会检查缓存中是否有足够的空闲空间来容纳该新条目。如果没有,数据库会尝试移除所有过期条目。如果缓存仍然没有足够的空间,则不会插入该新条目。 +查询缓存中的条目在经过一段时间后会变为陈旧(time-to-live,TTL)。默认情况下,此时间为 60 秒,但可以在会话、配置文件或查询级别使用设置 [query_cache_ttl](/operations/settings/settings#query_cache_ttl) 指定不同的值。查询缓存会“惰性”地淘汰条目,即当一个条目变为陈旧时,并不会立刻从缓存中移除。相反,当要向查询缓存中插入一个新条目时,数据库会检查缓存中是否有足够的可用空间来存放新条目。如果没有,数据库会尝试移除所有陈旧条目。如果缓存仍然没有足够的可用空间,则不会插入新的条目。 -查询缓存中的条目默认会被压缩。这可以减少整体内存占用,但会以写入/读取查询缓存时的速度变慢为代价。要禁用压缩,请使用设置 [query_cache_compress_entries](/operations/settings/settings#query_cache_compress_entries)。 +如果通过 HTTP 运行查询,则 ClickHouse 会设置 `Age` 和 `Expires` 头部,其中包含缓存条目的存活时间(秒)和过期时间戳。 -有时,将同一查询的多个结果同时保存在缓存中是有用的。可以使用设置 -[query_cache_tag](/operations/settings/settings#query_cache_tag) 来实现,该设置充当查询缓存条目的标签(或命名空间)。查询缓存会将同一查询但具有不同标签的结果视为彼此不同。 +查询缓存中的条目默认会被压缩。这在一定程度上降低了总体内存占用,但会带来写入/读取查询缓存变慢的代价。要禁用压缩,请使用设置 [query_cache_compress_entries](/operations/settings/settings#query_cache_compress_entries)。 -为同一查询创建三个不同查询缓存条目的示例: +有时,为同一个查询保留多个缓存结果是有用的。可以使用设置 [query_cache_tag](/operations/settings/settings#query_cache_tag) 来实现,它充当查询缓存条目的标签(或命名空间)。查询缓存会将同一查询在不同标签下的结果视为不同的结果。 + +为同一个查询创建三个不同查询缓存条目的示例: ```sql SELECT 1 SETTINGS use_query_cache = true; -- query_cache_tag 隐式为 ''(空字符串) @@ -130,34 +145,42 @@ SELECT 1 SETTINGS use_query_cache = true, query_cache_tag = 'tag 1'; SELECT 1 SETTINGS use_query_cache = true, query_cache_tag = 'tag 2'; ``` -要仅移除查询缓存中带有标签 `tag` 的条目,可以使用语句 `SYSTEM DROP QUERY CACHE TAG 'tag'`。 +若只想从查询缓存中移除带有标签 `tag` 的条目,可以使用语句 `SYSTEM DROP QUERY CACHE TAG 'tag'`。 -ClickHouse 以块的形式读取表数据,每个块包含 [max_block_size](/operations/settings/settings#max_block_size) 行。由于过滤、聚合等原因,结果块通常远小于 `max_block_size`,但在某些情况下也可能远大于该值。通过设置 -[query_cache_squash_partial_results](/operations/settings/settings#query_cache_squash_partial_results)(默认启用),可以控制在将结果块插入查询结果缓存之前,对于非常小的结果块是否进行合并、对于较大的结果块是否拆分为大小为 `max_block_size` 的块。这样会降低向查询缓存写入时的性能,但可以提高缓存条目的压缩率,并在之后从查询缓存返回查询结果时,提供更自然的块粒度。 +ClickHouse 按 [max_block_size](/operations/settings/settings#max_block_size) 行数以块(block)的形式读取表数据。由于过滤、聚合等操作,结果块通常远小于 `max_block_size`,但也存在远大于该值的情况。设置 +[query_cache_squash_partial_results](/operations/settings/settings#query_cache_squash_partial_results)(默认启用)用于控制在将结果块插入查询结果缓存之前,如果块太小则进行压缩合并(squash),如果块太大则拆分为大小为 `max_block_size` 的块。这样会降低向查询缓存写入的性能,但可以提高缓存条目的压缩率,并在之后从查询缓存返回查询结果时提供更自然的块粒度。 -因此,查询缓存会为每个查询存储多个(部分)结果块。虽然这种行为通常是一个合理的默认行为,但可以通过设置 +因此,查询缓存会为每个查询存储多个(部分)结果块。虽然这种行为是一个合理的默认设置,但可以通过设置 [query_cache_squash_partial_results](/operations/settings/settings#query_cache_squash_partial_results) 来禁用。 -另外,默认情况下,包含非确定性函数的查询结果不会被缓存。此类函数包括: -- 用于访问字典的函数:[`dictGet()`](/sql-reference/functions/ext-dict-functions#dictget-dictgetordefault-dictgetornull) 等, -- 在其 XML 定义中没有 `true` 标签的 [用户自定义函数](../sql-reference/statements/create/function.md), -- 返回当前日期或时间的函数:[`now()`](../sql-reference/functions/date-time-functions.md#now)、[`today()`](../sql-reference/functions/date-time-functions.md#today)、[`yesterday()`](../sql-reference/functions/date-time-functions.md#yesterday) 等, -- 返回随机值的函数:[`randomString()`](../sql-reference/functions/random-functions.md#randomString)、[`fuzzBits()`](../sql-reference/functions/random-functions.md#fuzzBits) 等, -- 其结果依赖于用于查询处理的内部数据块大小和顺序的函数:[`nowInBlock()`](../sql-reference/functions/date-time-functions.md#nowInBlock) 等、[`rowNumberInBlock()`](../sql-reference/functions/other-functions.md#rowNumberInBlock)、[`runningDifference()`](../sql-reference/functions/other-functions.md#runningDifference)、[`blockSize()`](../sql-reference/functions/other-functions.md#blockSize) 等, -- 依赖环境的函数:[`currentUser()`](../sql-reference/functions/other-functions.md#currentUser)、[`queryID()`](/sql-reference/functions/other-functions#queryID)、[`getMacro()`](../sql-reference/functions/other-functions.md#getMacro) 等。 - -若要强制缓存包含非确定性函数的查询结果,请使用设置 +另外,包含非确定性函数的查询结果默认不会被缓存。这类函数包括: + +- 访问字典的函数:[`dictGet()`](/sql-reference/functions/ext-dict-functions#dictget-dictgetordefault-dictgetornull) 等; +- [用户自定义函数](../sql-reference/statements/create/function.md),其 XML 定义中不包含 `true` 标签; +- 返回当前日期或时间的函数:[`now()`](../sql-reference/functions/date-time-functions.md#now), + [`today()`](../sql-reference/functions/date-time-functions.md#today), + [`yesterday()`](../sql-reference/functions/date-time-functions.md#yesterday) 等; +- 返回随机值的函数:[`randomString()`](../sql-reference/functions/random-functions.md#randomString), + [`fuzzBits()`](../sql-reference/functions/random-functions.md#fuzzBits) 等; +- 其结果依赖于查询处理中使用的内部块大小和顺序的函数: + [`nowInBlock()`](../sql-reference/functions/date-time-functions.md#nowInBlock) 等, + [`rowNumberInBlock()`](../sql-reference/functions/other-functions.md#rowNumberInBlock), + [`runningDifference()`](../sql-reference/functions/other-functions.md#runningDifference), + [`blockSize()`](../sql-reference/functions/other-functions.md#blockSize) 等; +- 依赖环境的函数:[`currentUser()`](../sql-reference/functions/other-functions.md#currentUser), + [`queryID()`](/sql-reference/functions/other-functions#queryID), + [`getMacro()`](../sql-reference/functions/other-functions.md#getMacro) 等。 + +若希望无论如何都缓存包含非确定性函数的查询结果,请使用设置 [query_cache_nondeterministic_function_handling](/operations/settings/settings#query_cache_nondeterministic_function_handling)。 -涉及 system 表(例如 [system.processes](system-tables/processes.md) 或 -[information_schema.tables](system-tables/information_schema.md))的查询结果默认不会被缓存。若要强制缓存包含 system 表的查询结果,请使用设置 [query_cache_system_table_handling](/operations/settings/settings#query_cache_system_table_handling)。 +涉及 system 表的查询结果(例如 [system.processes](system-tables/processes.md) 或 +[information_schema.tables](system-tables/information_schema.md))默认不会被缓存。若希望无论如何都缓存包含 system 表的查询结果,请使用设置 [query_cache_system_table_handling](/operations/settings/settings#query_cache_system_table_handling)。 -最后,出于安全原因,查询缓存中的条目不会在用户之间共享。例如,用户 A 不应能够通过执行与另一位没有该行策略限制的用户 B 相同的查询来绕过对某个表的行策略。不过,如有需要,可以通过设置 +最后,出于安全原因,查询缓存中的条目不会在不同用户之间共享。例如,用户 A 不应当能够通过运行与另一位没有该行策略限制的用户 B 相同的查询,来绕过某个表上的行策略。不过,如有需要,可以通过设置 [query_cache_share_between_users](/operations/settings/settings#query_cache_share_between_users) 将缓存条目标记为可被其他用户访问(即共享)。 +## 相关内容 \{#related-content\} - -## 相关内容 {#related-content} - -- 博客:[ClickHouse 查询缓存简介](https://clickhouse.com/blog/introduction-to-the-clickhouse-query-cache-and-design) +- 博客文章:[ClickHouse 查询缓存简介](https://clickhouse.com/blog/introduction-to-the-clickhouse-query-cache-and-design) \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/server-configuration-parameters/settings.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/server-configuration-parameters/settings.md index 10d131bdd91..7598e7124c5 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/server-configuration-parameters/settings.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/server-configuration-parameters/settings.md @@ -1,5 +1,5 @@ --- -description: '本节包含服务器设置的描述,即无法在会话或查询级别更改的设置。' +description: '本节介绍服务器级设置,即那些不能在会话或查询级别修改的设置。' keywords: ['全局服务器设置'] sidebar_label: '服务器设置' sidebar_position: 57 @@ -8,5130 +8,6 @@ title: '服务器设置' doc_type: 'reference' --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; -import SystemLogParameters from '@site/docs/operations/server-configuration-parameters/_snippets/_system-log-parameters.md'; -import SettingsInfoBlock from '@theme/SettingsInfoBlock/SettingsInfoBlock'; - - -# 服务器设置 - -本节介绍服务器设置。这些设置无法在会话或查询级别进行更改。 - -有关 ClickHouse 中配置文件的更多信息,请参阅 [Configuration Files](/operations/configuration-files)。 - -其他设置在 [Settings](/operations/settings/overview) 一节中进行了说明。 -在学习这些设置之前,我们建议先阅读 [Configuration Files](/operations/configuration-files) -章节,并注意替换用法(`incl` 和 `optional` 属性)。 - - - -## abort_on_logical_error {#abort_on_logical_error} - -在遇到 LOGICAL_ERROR 异常时使服务器崩溃。仅供专家使用。 - - - -## 访问控制改进 - -访问控制系统可选改进项的设置。 - -| Setting | Description | Default | -| ----------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -| `users_without_row_policies_can_read_rows` | 设置在用户没有放行的行级策略时,是否仍然可以通过 `SELECT` 查询读取行。例如,如果有两个用户 A 和 B,只为 A 定义了行级策略,则当该设置为 true 时,用户 B 将看到所有行;当该设置为 false 时,用户 B 将看不到任何行。 | `true` | -| `on_cluster_queries_require_cluster_grant` | 设置 `ON CLUSTER` 查询是否需要 `CLUSTER` 权限。 | `true` | -| `select_from_system_db_requires_grant` | 设置 `SELECT * FROM system.` 是否需要任何权限,以及是否可以由任意用户执行。如果设置为 true,则该查询需要 `GRANT SELECT ON system.
`,与非 system 表相同。例外情况:少数 system 表(`tables`、`columns`、`databases` 以及某些常量表,如 `one`、`contributors`)对所有人仍然可访问;并且如果授予了某个 `SHOW` 权限(例如 `SHOW USERS`),则相应的 system 表(即 `system.users`)将可访问。 | `true` | -| `select_from_information_schema_requires_grant` | 设置 `SELECT * FROM information_schema.
` 是否需要任何权限,以及是否可以由任意用户执行。如果设置为 true,则该查询需要 `GRANT SELECT ON information_schema.
`,与普通表相同。 | `true` | -| `settings_constraints_replace_previous` | 设置 settings profile 中某个设置的约束,是否会覆盖此前为该设置定义在其他 profile 中的约束的效果,包括新约束未设置的字段。它还会启用 `changeable_in_readonly` 约束类型。 | `true` | -| `table_engines_require_grant` | 设置在使用特定表引擎创建表时,是否需要相应的权限。 | `false` | -| `role_cache_expiration_time_seconds` | 设置角色自上次访问后在角色缓存(Role Cache)中保留的秒数。 | `600` | - -示例: - -```xml - - true - true - true - true - true - false - 600 - -``` - - -## access_control_path {#access_control_path} - -ClickHouse 服务器用于存放通过 SQL 命令创建的用户和角色配置的目录路径。 - -**另请参阅** - -- [访问控制和账号管理](/operations/access-rights#access-control-usage) - - - -## aggregate_function_group_array_action_when_limit_is_reached {#aggregate_function_group_array_action_when_limit_is_reached} - -在 `groupArray` 中,当数组元素的最大数量被超出时要执行的操作:`throw` 抛出异常,或 `discard` 丢弃多余的值。 - - - -## aggregate_function_group_array_max_element_size {#aggregate_function_group_array_max_element_size} - -`groupArray` 函数中数组元素的最大字节数。该限制会在序列化时进行检查,以避免状态体积过大。 - - - -## allow_feature_tier {#allow_feature_tier} - - -控制用户是否可以更改与不同功能等级相关的设置。 - -- `0` - 允许更改任何设置(EXPERIMENTAL、BETA、PRODUCTION)。 -- `1` - 仅允许更改 BETA 和 PRODUCTION 功能设置。对 EXPERIMENTAL 设置的更改会被拒绝。 -- `2` - 仅允许更改 PRODUCTION 设置。对 EXPERIMENTAL 或 BETA 设置的更改会被拒绝。 - -这等同于对所有 `EXPERIMENTAL` / `BETA` 功能设置施加只读约束。 - -:::note -值为 `0` 时,表示所有设置都可以被更改。 -::: - - - - -## allow_impersonate_user {#allow_impersonate_user} - -启用/禁用 IMPERSONATE 功能(EXECUTE AS target_user)。 - - - -## allow_implicit_no_password - -除非显式指定 'IDENTIFIED WITH no_password',否则禁止创建无密码用户。 - -```xml -1 -``` - - -## allow_no_password - -设置是否允许使用不安全的 `no_password` 密码类型。 - -```xml -1 -``` - - -## allow_plaintext_password - -设置是否允许使用不安全的明文密码类型。 - -```xml -1 -``` - - -## allow_use_jemalloc_memory {#allow_use_jemalloc_memory} - -允许使用 jemalloc 进行内存分配。 - - - -## allowed_disks_for_table_engines {#allowed_disks_for_table_engines} - -可用于 Iceberg 的磁盘列表 - - - -## async_insert_queue_flush_on_shutdown {#async_insert_queue_flush_on_shutdown} - -如果为 true,则在优雅关闭时会刷新异步插入队列 - - - -## async_insert_threads {#async_insert_threads} - -在后台实际解析并插入数据的最大线程数。0 表示禁用异步模式。 - - - -## async_load_databases - - - -异步加载数据库和表。 - -* 如果为 `true`,在 ClickHouse 服务器启动完成后,所有使用 `Ordinary`、`Atomic` 和 `Replicated` 引擎的非系统数据库将会被异步加载。参见 `system.asynchronous_loader` 表,以及 `tables_loader_background_pool_size` 和 `tables_loader_foreground_pool_size` 服务器设置。任何尝试访问尚未加载的表的查询都会等待该表完成启动。如果加载任务失败,查询会重新抛出错误(而不是在 `async_load_databases = false` 的情况下导致整个服务器关闭)。至少有一个查询在等待的表将以更高优先级加载。针对某个数据库的 DDL 查询会等待该数据库完成启动。同时建议为等待中的查询总数设置限制 `max_waiting_queries`。 -* 如果为 `false`,所有数据库会在服务器启动时全部加载。 - -**示例** - -```xml -true -``` - - -## async_load_system_database - - - -`system` 数据库中系统表的异步加载。\ -当 `system` 数据库中存在大量日志表和数据分片(parts)时很有用。\ -与 `async_load_databases` 设置彼此独立。 - -* 如果设置为 `true`,在 ClickHouse 服务器启动后,所有使用 `Ordinary`、`Atomic` 和 `Replicated` 引擎的 `system` 数据库中的表都会被异步加载。请参阅 `system.asynchronous_loader` 表,以及服务器设置 `tables_loader_background_pool_size` 和 `tables_loader_foreground_pool_size`。任何尝试访问尚未加载的 `system` 表的查询,都会等待该表完成启动。至少有一个查询在等待的表将以更高优先级进行加载。同时考虑设置 `max_waiting_queries` 以限制正在等待的查询总数。 -* 如果设置为 `false`,`system` 数据库会在服务器启动之前完成加载。 - -**示例** - -```xml -true -``` - - -## asynchronous_heavy_metrics_update_period_s {#asynchronous_heavy_metrics_update_period_s} - -更新高开销异步指标的周期(秒)。 - - - -## asynchronous_insert_log - -[asynchronous_insert_log](/operations/system-tables/asynchronous_insert_log) 系统表的设置,用于记录异步插入。 - - - -**示例** - -```xml - - - system -
asynchronous_insert_log
- 7500 - toYYYYMM(event_date) - 1048576 - 8192 - 524288 - false - - -
-``` - - -## asynchronous_metric_log - -在 ClickHouse Cloud 部署中默认启用。 - -如果在你的环境中未默认启用该设置,视 ClickHouse 的安装方式而定,你可以按照以下说明启用或禁用它。 - -**启用** - -要手动开启异步指标日志历史记录的收集 [`system.asynchronous_metric_log`](../../operations/system-tables/asynchronous_metric_log.md),请创建 `/etc/clickhouse-server/config.d/asynchronous_metric_log.xml` 文件,并写入以下内容: - -```xml - - - system - asynchronous_metric_log
- 7500 - 1000 - 1048576 - 8192 - 524288 - false -
-
-``` - -**禁用** - -要禁用 `asynchronous_metric_log` 设置,应创建以下文件 `/etc/clickhouse-server/config.d/disable_asynchronous_metric_log.xml`,内容如下: - -```xml - -``` - - - - -## asynchronous_metrics_enable_heavy_metrics {#asynchronous_metrics_enable_heavy_metrics} - -启用对开销较大的异步指标的计算。 - - - -## asynchronous_metrics_update_period_s {#asynchronous_metrics_update_period_s} - -异步指标的更新周期(秒)。 - - - -## auth_use_forwarded_address {#auth_use_forwarded_address} - -对通过代理连接的客户端,在身份验证时使用其源地址。 - -:::note -此设置应格外谨慎使用,因为转发地址很容易被伪造——接受此类身份验证的服务器不应被直接访问,而应仅通过受信任的代理进行访问。 -::: - - - -## background_buffer_flush_schedule_pool_size {#background_buffer_flush_schedule_pool_size} - -在后台对 [Buffer 引擎表](/engines/table-engines/special/buffer) 执行刷新操作时可使用的最大线程数。 - - - -## background_common_pool_size {#background_common_pool_size} - -在后台对 [*MergeTree-engine](/engines/table-engines/mergetree-family) 表执行各种操作(主要是垃圾回收)时所使用的最大线程数。 - - - -## background_distributed_schedule_pool_size {#background_distributed_schedule_pool_size} - -用于执行分布式发送的最大线程数。 - - - -## background_fetches_pool_size {#background_fetches_pool_size} - -在后台为 [*MergeTree 引擎](/engines/table-engines/mergetree-family) 表从其他副本获取数据分片时使用的最大线程数。 - - - -## background_merges_mutations_concurrency_ratio {#background_merges_mutations_concurrency_ratio} - - -设置线程数量与可并发执行的后台合并和变更操作数量之间的比例。 - -例如,如果该比例等于 2,且 [`background_pool_size`](/operations/server-configuration-parameters/settings#background_pool_size) 设置为 16,那么 ClickHouse 可以并发执行 32 个后台合并操作。这之所以可行,是因为后台操作可以被挂起和推迟执行,从而使较小的合并操作获得更高的执行优先级。 - -:::note -您只能在运行时增加该比例。若要降低此值,必须重启服务器。 - -与 [`background_pool_size`](/operations/server-configuration-parameters/settings#background_pool_size) 设置类似,为了向后兼容,[`background_merges_mutations_concurrency_ratio`](/operations/server-configuration-parameters/settings#background_merges_mutations_concurrency_ratio) 也可以通过 `default` profile 应用。 -::: - - - - -## background_merges_mutations_scheduling_policy {#background_merges_mutations_scheduling_policy} - - -用于调度后台合并(merge)和变更(mutation)的策略。可能的取值为:`round_robin` 和 `shortest_task_first`。 - -用于选择下一个由后台线程池执行的合并或变更任务的算法。该策略可以在运行时更改,而无需重启服务器。 -可以从 `default` 配置集应用此设置以保持向后兼容性。 - -可能的取值: - -- `round_robin` — 所有并发的合并和变更任务按轮询顺序执行,以避免任务饥饿。较小的合并因为需要合并的块更少,所以会比大的合并更快完成。 -- `shortest_task_first` — 始终优先执行较小的合并或变更。合并和变更会根据其结果大小被分配优先级。结果较小的合并会被严格优先于较大的合并。该策略可以保证小数据片段以尽可能快的速度完成合并,但在被大量 `INSERT` 写入压力严重负载的分区中,可能会导致大型合并长期得不到执行(任务饥饿)。 - - - - -## background_message_broker_schedule_pool_size {#background_message_broker_schedule_pool_size} - -用于执行消息流式处理后台操作的最大线程数。 - - - -## background_move_pool_size {#background_move_pool_size} - -用于在后台将 *MergeTree 引擎表* 的数据部件移动到其他磁盘或卷时可使用的最大线程数。 - - - -## background_pool_size - - - -设置用于对使用 MergeTree 引擎的表执行后台合并与变更操作的线程数量。 - -:::note - -* 为了在 ClickHouse 服务器启动时保持向后兼容性,该设置也可以通过 `default` profile 的配置在服务器启动时应用。 -* 在运行时只能增加线程数量。 -* 若要减少线程数量,必须重启服务器。 -* 通过调整此设置,可以控制 CPU 和磁盘负载。 - ::: - -:::danger -较小的线程池大小会占用更少的 CPU 和磁盘资源,但后台进程推进得更慢,最终可能会影响查询性能。 -::: - -在更改该设置之前,请同时查看相关的 MergeTree 设置,例如: - -* [`number_of_free_entries_in_pool_to_lower_max_size_of_merge`](../../operations/settings/merge-tree-settings.md#number_of_free_entries_in_pool_to_lower_max_size_of_merge)。 -* [`number_of_free_entries_in_pool_to_execute_mutation`](../../operations/settings/merge-tree-settings.md#number_of_free_entries_in_pool_to_execute_mutation)。 -* [`number_of_free_entries_in_pool_to_execute_optimize_entire_partition`](/operations/settings/merge-tree-settings#number_of_free_entries_in_pool_to_execute_optimize_entire_partition) - -**示例** - -```xml -16 -``` - - -## background_schedule_pool_max_parallel_tasks_per_type_ratio {#background_schedule_pool_max_parallel_tasks_per_type_ratio} - -池中线程数中,可同时执行同一类型任务的最大比例。 - - - -## background_schedule_pool_size {#background_schedule_pool_size} - -用于持续执行轻量级周期性操作(如复制表、Kafka 流式处理以及 DNS 缓存更新)的线程数量上限。 - - - -## backup_log - -[backup_log](../../operations/system-tables/backup_log.md) 系统表的相关设置,该系统表用于记录 `BACKUP` 和 `RESTORE` 操作。 - - - -**示例** - -```xml - - - system - backup_log
- 1000 - toYYYYMM(event_date) - 1048576 - 8192 - 524288 - false - -
-
-``` - - -## backup_threads {#backup_threads} - -用于执行 `BACKUP` 请求的最大线程数。 - - - -## backups {#backups} - -用于执行 [`BACKUP` 和 `RESTORE`](../backup.md) 语句的备份相关设置。 - -可以通过以下子标签来配置这些设置: - - - -{/* SQL - WITH settings AS ( - SELECT arrayJoin([ - ('allow_concurrent_backups', 'Bool','确定是否允许在同一主机上并发运行多个备份操作。', 'true'), - ('allow_concurrent_restores', 'Bool', '确定是否允许在同一主机上并发运行多个恢复操作。', 'true'), - ('allowed_disk', 'String', '使用 `File()` 进行备份时要使用的磁盘。必须设置此项才能使用 `File`。', ''), - ('allowed_path', 'String', '使用 `File()` 进行备份时要备份到的路径。必须设置此项才能使用 `File`。', ''), - ('attempts_to_collect_metadata_before_sleep', 'UInt', '在比较收集到的元数据后如果发现不一致,在进入休眠前尝试收集元数据的次数。', '2'), - ('collect_metadata_timeout', 'UInt64', '在备份期间收集元数据的超时时间(毫秒)。', '600000'), - ('compare_collected_metadata', 'Bool', '如果为 true,则将收集到的元数据与现有元数据进行比较,以确保它们在备份期间未发生更改。', 'true'), - ('create_table_timeout', 'UInt64', '在恢复期间创建表的超时时间(毫秒)。', '300000'), - ('max_attempts_after_bad_version', 'UInt64', '在协调备份/恢复期间遇到 bad version 错误后重试的最大次数。', '3'), - ('max_sleep_before_next_attempt_to_collect_metadata', 'UInt64', '在下一次尝试收集元数据之前的最长休眠时间(毫秒)。', '100'), - ('min_sleep_before_next_attempt_to_collect_metadata', 'UInt64', '在下一次尝试收集元数据之前的最短休眠时间(毫秒)。', '5000'), - ('remove_backup_files_after_failure', 'Bool', '如果 `BACKUP` 命令失败,ClickHouse 将尝试删除在失败之前已复制到备份中的文件;否则,将保留已复制的文件不变。', 'true'), - ('sync_period_ms', 'UInt64', '协调备份/恢复的同步周期(毫秒)。', '5000'), - ('test_inject_sleep', 'Bool', '用于测试的休眠注入。', 'false'), - ('test_randomize_order', 'Bool', '如果为 true,为测试目的随机化某些操作的顺序。', 'false'), - ('zookeeper_path', 'String', '在使用 `ON CLUSTER` 子句时,用于存储备份和恢复元数据的 ZooKeeper 路径。', '/clickhouse/backups') - ]) AS t ) - SELECT concat('`', t.1, '`') AS Setting, t.2 AS Type, t.3 AS Description, concat('`', t.4, '`') AS Default FROM settings FORMAT Markdown +{/* 注意:本文件中的设置为自动生成 + 更多信息请参见:["从源代码生成文档"](https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md) */ } - -| 设置 | 类型 | 说明 | 默认 | -| :-------------------------------------------------- | :----- | :------------------------------------------------------------------ | :-------------------- | -| `allow_concurrent_backups` | Bool | 决定是否允许在同一主机上并发运行多个备份操作。 | `true` | -| `allow_concurrent_restores` | 布尔型 | 控制是否允许在同一主机上并发执行多个恢复操作。 | `true` | -| `allowed_disk` | 字符串 | 使用 `File()` 时用于备份的磁盘。必须配置此设置才能使用 `File()`。 | `` | -| `allowed_path` | 字符串 | 使用 `File()` 时用于备份的路径。必须先配置此项才能使用 `File()`。 | `` | -| `attempts_to_collect_metadata_before_sleep` | UInt | 在比较已收集的元数据后发现不一致时,在进入休眠前重试收集元数据的次数。 | `2` | -| `collect_metadata_timeout` | UInt64 | 在备份期间收集元数据的超时时间(以毫秒为单位)。 | `600000` | -| `compare_collected_metadata` | 布尔型 | 如果为 true,则会将收集到的元数据与现有元数据进行比较,以确保它们在备份期间未发生变更。 | `true` | -| `create_table_timeout` | UInt64 | 在恢复过程中创建表的超时时间(以毫秒为单位)。 | `300000` | -| `max_attempts_after_bad_version` | UInt64 | 在协同备份/恢复期间遇到版本错误时允许重试的最大次数。 | `3` | -| `max_sleep_before_next_attempt_to_collect_metadata` | UInt64 | 在下一次尝试收集元数据前的最大休眠时间(毫秒)。 | `100` | -| `min_sleep_before_next_attempt_to_collect_metadata` | UInt64 | 在下一次尝试收集元数据前的最小休眠时间(毫秒)。 | `5000` | -| `remove_backup_files_after_failure` | Bool | 如果 `BACKUP` 命令失败,ClickHouse 会尝试删除在失败之前已复制到备份中的文件,否则会保留这些已复制的文件原样不动。 | `true` | -| `sync_period_ms` | UInt64 | 用于协调备份/恢复的同步周期,单位为毫秒。 | `5000` | -| `test_inject_sleep` | Bool | 测试相关的休眠 | `false` | -| `test_randomize_order` | 布尔 | 如果为 true,则会出于测试目的随机打乱某些操作的执行顺序。 | `false` | -| `zookeeper_path` | 字符串 | 在使用 `ON CLUSTER` 子句时,用于存储备份和恢复操作元数据的 ZooKeeper 路径。 | `/clickhouse/backups` | - -默认情况下,此设置配置为: - -```xml - - .... - -``` - - -## backups_io_thread_pool_queue_size {#backups_io_thread_pool_queue_size} - - -Backups IO 线程池可调度的作业数上限。鉴于当前的 S3 备份逻辑,建议将此队列设置为无限制。 - -:::note -值为 `0`(默认)表示无限制。 -::: - - - - -## bcrypt_workfactor - -`bcrypt_password` 认证类型所使用的工作因子,该认证类型采用 [Bcrypt 算法](https://wildlyinaccurate.com/bcrypt-choosing-a-work-factor/)。\ -工作因子决定了计算哈希和验证密码所需的计算量和时间。 - -```xml -12 -``` - -:::warning -对于需要频繁进行身份验证的应用程序, -由于在较高工作因子设置下 bcrypt 的计算开销较大, -请考虑使用其他身份验证方法。 -::: - - -## blob_storage_log - -[`blob_storage_log`](../system-tables/blob_storage_log.md) 系统表的相关设置。 - - - -示例: - -```xml - - systemblob_storage_logtoYYYYMM(event_date) - 7500event_date + INTERVAL 30 DAY - -``` - - -## builtin_dictionaries_reload_interval - -以秒为单位指定重新加载内置字典的时间间隔。 - -ClickHouse 每隔 x 秒重新加载内置字典一次。这样就可以在不重启服务器的情况下“实时”编辑字典。 - -**示例** - -```xml -3600 -``` - - -## cache_size_to_ram_max_ratio {#cache_size_to_ram_max_ratio} - -将缓存大小设置为 RAM 最大值的比率。可在低内存系统上降低缓存大小。 - - - -## cannot_allocate_thread_fault_injection_probability {#cannot_allocate_thread_fault_injection_probability} - -仅用于测试。 - - - -## cgroups_memory_usage_observer_wait_time {#cgroups_memory_usage_observer_wait_time} - - -以秒为单位的时间间隔,在此期间服务器的最大允许内存使用量会根据 cgroups 中对应的阈值进行调整。 - -要禁用 cgroups 内存使用观察器,请将此值设置为 `0`。 - - - - -## compiled_expression_cache_elements_size {#compiled_expression_cache_elements_size} - -设置[已编译表达式](../../operations/caches.md)缓存中的元素数量上限。 - - - -## compiled_expression_cache_size {#compiled_expression_cache_size} - -设置[已编译表达式](../../operations/caches.md)的缓存大小(字节)。 - - - -## compression - -用于 [MergeTree](../../engines/table-engines/mergetree-family/mergetree.md) 引擎表的数据压缩设置。 - -:::note -如果您刚开始使用 ClickHouse,建议不要更改此项配置。 -::: - -**配置模板**: - -```xml - - - ... - ... - ... - ... - - ... - -``` - -**`` 字段**: - -* `min_part_size` – 数据分片的最小大小。 -* `min_part_size_ratio` – 数据分片大小与表大小的比例。 -* `method` – 压缩方法。可接受的值:`lz4`、`lz4hc`、`zstd`、`deflate_qpl`。 -* `level` – 压缩级别。参见 [Codecs](/sql-reference/statements/create/table#general-purpose-codecs)。 - -:::note -可以配置多个 `` 部分。 -::: - -**条件满足时的操作**: - -* 如果数据分片匹配某个条件集,ClickHouse 使用指定的压缩方法。 -* 如果数据分片匹配多个条件集,ClickHouse 使用第一个匹配到的条件集。 - -:::note -如果数据分片不满足任何条件,ClickHouse 使用 `lz4` 压缩。 -::: - -**示例** - -```xml - - - 10000000000 - 0.01 - zstd - 1 - - -``` - - -## concurrent_threads_scheduler {#concurrent_threads_scheduler} - - -用于对由 `concurrent_threads_soft_limit_num` 和 `concurrent_threads_soft_limit_ratio_to_cores` 所限定的 CPU 插槽进行调度的策略。该算法用于控制在有限数量的 CPU 插槽下,如何在并发查询之间进行分配。调度器可在运行时更改,而无需重启服务器。 - -可能的取值: - -- `round_robin` — 每个将 `use_concurrency_control` 设置为 1 的查询最多会分配 `max_threads` 个 CPU 插槽,每个线程对应一个插槽。当发生竞争时,CPU 插槽以轮询方式分配给各查询。注意,第一个插槽是无条件授予的,这可能导致在存在大量 `max_threads` = 1 的查询时,`max_threads` 较大的查询出现不公平和更高的延迟。 -- `fair_round_robin` — 每个将 `use_concurrency_control` 设置为 1 的查询最多会分配 `max_threads - 1` 个 CPU 插槽。这是 `round_robin` 的一种变体,不再为每个查询的第一个线程占用 CPU 插槽。这样一来,`max_threads` = 1 的查询不需要任何插槽,也就无法不公平地占用所有插槽。不会无条件授予任何插槽。 - - - - -## concurrent_threads_soft_limit_num {#concurrent_threads_soft_limit_num} - - -用于执行所有查询的最大查询处理线程数(不包括用于从远程服务器获取数据的线程)。这不是一个硬性上限。如果达到该限制,查询仍然至少会分配到一个线程来运行。如果在执行期间有更多线程变得可用,查询可以扩展到所需的线程数。 - -:::note -值为 `0`(默认)表示无限制。 -::: - - - - -## concurrent_threads_soft_limit_ratio_to_cores {#concurrent_threads_soft_limit_ratio_to_cores} - -与 [`concurrent_threads_soft_limit_num`](#concurrent_threads_soft_limit_num) 相同,只是按 CPU 核心数的比例来设置。 - - - -## config_reload_interval_ms {#config_reload_interval_ms} - - -ClickHouse 多久重新加载一次配置并检查是否有新的更改 - - - - -## core_dump - -配置 core dump 文件大小的软限制。 - -:::note -硬限制需通过系统工具进行配置。 -::: - -**示例** - -```xml - - 1073741824 - -``` - - -## cpu_slot_preemption - - - -定义如何为 CPU 资源(MASTER THREAD 和 WORKER THREAD)进行工作负载调度。 - -* 如果为 `true`(推荐),则根据实际消耗的 CPU 时间进行统计。会为彼此竞争的工作负载分配公平份额的 CPU 时间。Slot 会被分配有限的一段时间,到期后需要重新申请。在 CPU 资源过载的情况下,请求 slot 可能会阻塞线程执行,即可能发生抢占(preemption)。这样可以确保 CPU 时间使用的公平性。 -* 如果为 `false`(默认),则根据已分配的 CPU slot 数量进行统计。会为彼此竞争的工作负载分配公平数量的 CPU slot。线程启动时分配一个 slot,在整个执行期间持续持有该 slot,并在结束执行时释放。用于查询执行的线程数只能从 1 增加到 `max_threads`,且不会减少。这种方式对长时间运行的查询更有利,可能导致短查询出现 CPU 饥饿。 - -**示例** - -```xml -true -``` - -**另请参阅** - -* [工作负载调度](/operations/workload-scheduling.md) - - -## cpu_slot_preemption_timeout_ms - - - -定义在抢占期间(即等待授予另一个 CPU slot 的时间)工作线程最多可以等待的毫秒数。超时后,如果线程仍未能获取新的 CPU slot,它将退出,查询会被动态缩减为更少数量的并发执行线程。注意,master 线程永远不会被缩减,但可以被无限期抢占。仅当启用了 `cpu_slot_preemption` 且为 WORKER THREAD 定义了 CPU 资源时,该设置才有意义。 - -**示例** - -```xml -1000 -``` - -**另请参阅** - -* [工作负载调度](/operations/workload-scheduling.md) - - -## cpu_slot_quantum_ns - - - -定义线程在获取一个 CPU slot 之后、在需要再次申请 CPU slot 之前允许消耗的 CPU 纳秒数。只有在启用了 `cpu_slot_preemption` 且为 MASTER THREAD 或 WORKER THREAD 定义了 CPU 资源时,该设置才有效。 - -**示例** - -```xml -10000000 -``` - -**另请参阅** - -* [工作负载调度](/operations/workload-scheduling.md) - - -## crash_log - -[crash_log](../../operations/system-tables/crash_log.md) 系统表操作的相关设置。 - -可以通过子标签配置以下设置: - -| Setting | Description | Default | Note | -| ---------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ------------------- | ------------------------------------------------------------------- | -| `database` | 数据库名称。 | | | -| `table` | 系统表名称。 | | | -| `engine` | 系统表的 [MergeTree 引擎定义](/engines/table-engines/mergetree-family/mergetree#table_engine-mergetree-creating-a-table)。 | | 如果定义了 `partition_by` 或 `order_by`,则不能使用该设置。如果未指定,则默认选择 `MergeTree`。 | -| `partition_by` | 系统表的[自定义分区键](/engines/table-engines/mergetree-family/custom-partitioning-key.md)。 | | 如果为系统表指定了 `engine`,则必须在 `engine` 内部直接指定 `partition_by` 参数 | -| `ttl` | 指定表的 [TTL](/engines/table-engines/mergetree-family/mergetree#table_engine-mergetree-ttl)。 | | 如果为系统表指定了 `engine`,则必须在 `engine` 内部直接指定 `ttl` 参数 | -| `order_by` | 系统表的[自定义排序键](/engines/table-engines/mergetree-family/mergetree#order_by)。如果定义了 `engine`,则不能使用。 | | 如果为系统表指定了 `engine`,则必须在 `engine` 内部直接指定 `order_by` 参数 | -| `storage_policy` | 表使用的存储策略名称(可选)。 | | 如果为系统表指定了 `engine`,则必须在 `engine` 内部直接指定 `storage_policy` 参数 | -| `settings` | 控制 MergeTree 行为的[附加参数](/engines/table-engines/mergetree-family/mergetree/#settings)(可选)。 | | 如果为系统表指定了 `engine`,则必须在 `engine` 内部直接指定 `settings` 参数 | -| `flush_interval_milliseconds` | 将内存中缓冲区的数据刷新到表中的时间间隔。 | `7500` | | -| `max_size_rows` | 日志的最大行数。当未刷新的日志数量达到 `max_size_rows` 时,日志会被写入磁盘。 | `1024` | | -| `reserved_size_rows` | 为日志预分配的内存行数。 | `1024` | | -| `buffer_size_rows_flush_threshold` | 行数阈值。当达到该阈值时,会在后台触发将日志刷新到磁盘。 | `max_size_rows / 2` | | -| `flush_on_crash` | 设置在发生崩溃时是否应将日志写入磁盘。 | `false` | | - -默认的服务器配置文件 `config.xml` 包含以下设置部分: - -```xml - - system - crash_log
- toYYYYMM(event_date) - 7500 - 1024 - 1024 - 512 - false -
-``` - - -## custom_cached_disks_base_directory - -此设置用于为自定义(通过 SQL 创建的)缓存磁盘指定缓存路径。 -对于自定义磁盘,`custom_cached_disks_base_directory` 的优先级高于(在 `filesystem_caches_path.xml` 中配置的)`filesystem_caches_path`, -如果未设置前者,则会使用后者。 -文件系统缓存的路径必须位于该目录内部, -否则会抛出异常,阻止磁盘被创建。 - -:::note -这不会影响在旧版本中创建、且服务器已升级的磁盘。 -在这种情况下,将不会抛出异常,从而确保服务器能够成功启动。 -::: - -示例: - -```xml -/var/lib/clickhouse/caches/ -``` - - -## custom_settings_prefixes - -[自定义设置](/operations/settings/query-level#custom_settings)所使用的前缀列表。各前缀必须使用逗号进行分隔。 - -**示例** - -```xml -custom_ -``` - -**另请参阅** - -* [自定义设置](/operations/settings/query-level#custom_settings) - - -## database_atomic_delay_before_drop_table_sec {#database_atomic_delay_before_drop_table_sec} - - -在该延迟时间内,可以使用 [`UNDROP`](/sql-reference/statements/undrop.md) 语句恢复已被删除的表。如果 `DROP TABLE` 以 `SYNC` 修饰符执行,则此设置会被忽略。 -该设置的默认值为 `480`(8 分钟)。 - - - - -## database_catalog_drop_error_cooldown_sec {#database_catalog_drop_error_cooldown_sec} - -如果删除表失败,ClickHouse 会在此超时时间后重试该操作。 - - - -## database_catalog_drop_table_concurrency {#database_catalog_drop_table_concurrency} - -用于删除表操作的线程池大小。 - - - -## database_catalog_unused_dir_cleanup_period_sec {#database_catalog_unused_dir_cleanup_period_sec} - - -用于清理 `store/` 目录中无用数据的任务的参数。 -用于设置该任务的执行周期。 - -:::note -值为 `0` 表示“从不执行”。默认值对应 1 天。 -::: - - - - -## database_catalog_unused_dir_hide_timeout_sec {#database_catalog_unused_dir_hide_timeout_sec} - - -用于清理 `store/` 目录中无用内容的任务参数。 -如果某个子目录未被 clickhouse-server 使用,并且在过去 -[`database_catalog_unused_dir_hide_timeout_sec`](/operations/server-configuration-parameters/settings#database_catalog_unused_dir_hide_timeout_sec) 秒内一直未被修改,则该任务会通过 -移除所有访问权限来“隐藏”该目录。这同样适用于 clickhouse-server -不期望出现在 `store/` 中的目录。 - -:::note -值为 `0` 表示“立即”。 -::: - - - - -## database_catalog_unused_dir_rm_timeout_sec {#database_catalog_unused_dir_rm_timeout_sec} - - -用于清理 `store/` 目录中垃圾的任务参数。 -如果某个子目录未被 clickhouse-server 使用,并且之前被“隐藏” -(参见 [database_catalog_unused_dir_hide_timeout_sec](/operations/server-configuration-parameters/settings#database_catalog_unused_dir_hide_timeout_sec)), -且该目录在最近 -[`database_catalog_unused_dir_rm_timeout_sec`](/operations/server-configuration-parameters/settings#database_catalog_unused_dir_rm_timeout_sec) 秒内未被修改,则该任务会删除此目录。 -该参数同样适用于 clickhouse-server 不期望在 `store/` 中出现的目录。 - -:::note -值为 `0` 表示“永不”。默认值相当于 30 天。 -::: - - - - -## database_replicated_allow_detach_permanently {#database_replicated_allow_detach_permanently} - -允许在 Replicated 数据库中永久地分离表 - - - -## database_replicated_drop_broken_tables {#database_replicated_drop_broken_tables} - -从 Replicated 数据库中删除未预期的表,而不是将其移动到单独的本地数据库 - - - -## dead_letter_queue - -用于设置 `dead_letter_queue` 系统表的相关参数。 - - - -默认设置如下: - -```xml - - system - dead_letter
- toYYYYMM(event_date) - 7500 -
-``` - - -## default_database {#default_database} - -默认的数据库名称。 - - - -## default_password_type - -设置在类似 `CREATE USER u IDENTIFIED BY 'p'` 这样的查询中自动设置的密码类型。 - -可接受的值为: - -* `plaintext_password` -* `sha256_password` -* `double_sha1_password` -* `bcrypt_password` - -```xml -sha256_password -``` - - -## default_profile - -默认配置概要。各配置概要位于由 `user_config` 设置指定的文件中。 - -**示例** - -```xml -default -``` - - -## default_replica_name - - - -ZooKeeper 中的副本名称。 - -**示例** - -```xml -{replica} -``` - - -## default_replica_path - - - -表在 ZooKeeper 中的路径。 - -**示例** - -```xml -/clickhouse/tables/{uuid}/{shard} -``` - - -## default_session_timeout - -默认会话超时时长(单位:秒)。 - -```xml -60 -``` - - -## dictionaries_config - -字典配置文件的路径。 - -路径: - -* 指定绝对路径或相对于服务器配置文件的路径。 -* 路径可以包含通配符 * 和 ?。 - -另请参阅: - -* "[Dictionaries](../../sql-reference/dictionaries/index.md)"。 - -**示例** - -```xml -*_dictionary.xml -``` - - -## dictionaries_lazy_load - - - -字典的懒加载。 - -* 如果为 `true`,则每个字典在首次使用时才会被加载。如果加载失败,使用该字典的函数会抛出异常。 -* 如果为 `false`,则服务器会在启动时加载所有字典。 - -:::note -服务器在启动时会一直等待所有字典加载完成后,才会接受任何连接 -(例外:如果将 [`wait_dictionaries_load_at_startup`](/operations/server-configuration-parameters/settings#wait_dictionaries_load_at_startup) 设置为 `false`)。 -::: - -**示例** - -```xml -true -``` - - -## dictionary_background_reconnect_interval {#dictionary_background_reconnect_interval} - -启用 `background_reconnect` 的 MySQL 和 Postgres 字典在连接失败后重试的时间间隔(毫秒)。 - - - -## disable_insertion_and_mutation {#disable_insertion_and_mutation} - - -禁用 INSERT/ALTER/DELETE 查询。若需要只读节点以防止插入和变更操作影响读取性能时,可以启用此设置。即使启用了该设置,向外部引擎(S3、DataLake、MySQL、PostrgeSQL、Kafka 等)的插入操作仍然是允许的。 - - - - -## disable_internal_dns_cache {#disable_internal_dns_cache} - -禁用内部 DNS 缓存。建议在基础设施变动频繁的系统(如 Kubernetes)中运行 ClickHouse 时启用此选项。 - - - -## disable_tunneling_for_https_requests_over_http_proxy - -默认情况下,会使用隧道(即 `HTTP CONNECT`)通过 `HTTP` 代理发起 `HTTPS` 请求。可以通过此设置来禁用该行为。 - -**no_proxy** - -默认情况下,所有请求都会通过代理转发。若要对特定主机禁用代理,必须设置 `no_proxy` 变量。 -它可以在 list 和 remote 解析器的 `` 子句中设置,也可以作为 environment 解析器使用的环境变量来设置。 -它支持 IP 地址、域名、子域名以及用于完全跳过代理的 `'*'` 通配符。前导点会被去除,其行为与 curl 相同。 - -**Example** - -下面的配置会绕过对 `clickhouse.cloud` 及其所有子域(例如 `auth.clickhouse.cloud`)的代理请求。 -同样的行为也适用于 GitLab,即使它带有前导点。`gitlab.com` 和 `about.gitlab.com` 都会绕过代理。 - -```xml - - clickhouse.cloud,.gitlab.com - - http://proxy1 - http://proxy2:3128 - - - http://proxy1:3128 - - -``` - - -## disk_connections_soft_limit {#disk_connections_soft_limit} - -超过此限制的连接,其存活时间会大幅缩短。该限制适用于磁盘连接。 - - - -## disk_connections_store_limit {#disk_connections_store_limit} - -超过此限制的连接在使用后会被重置。将其设置为 0 可关闭连接缓存。该限制适用于磁盘连接。 - - - -## disk_connections_warn_limit {#disk_connections_warn_limit} - -如果正在使用的连接数超过该限制,会在日志中记录警告信息。该限制适用于磁盘连接。 - - - -## display_secrets_in_show_and_select {#display_secrets_in_show_and_select} - - -启用或禁用在 `SHOW` 和 `SELECT` 查询中显示与表、数据库、表函数以及字典相关的机密信息(secrets)。 - -要查看这些机密信息,用户还必须同时启用 -[`format_display_secrets_in_show_and_select` 格式设置](../settings/formats#format_display_secrets_in_show_and_select), -并具有 -[`displaySecretsInShowAndSelect`](/sql-reference/statements/grant#displaysecretsinshowandselect) 权限。 - -可能的取值: - -- `0` — 禁用。 -- `1` — 启用。 - - - - -## distributed_cache_apply_throttling_settings_from_client {#distributed_cache_apply_throttling_settings_from_client} - -缓存服务器是否应采用从客户端接收到的限流配置。 - - - -## distributed_cache_keep_up_free_connections_ratio {#distributed_cache_keep_up_free_connections_ratio} - -用于指定分布式缓存尝试维持的空闲连接数量的软限制。当空闲连接数低于 distributed_cache_keep_up_free_connections_ratio * max_connections 时,将关闭活动时间最早的连接,直到空闲连接数重新高于该限制。 - - - -## distributed_ddl - -在集群上管理执行[分布式 DDL 查询](../../sql-reference/distributed-ddl.md)(`CREATE`、`DROP`、`ALTER`、`RENAME`)。 -仅在启用 [ZooKeeper](/operations/server-configuration-parameters/settings#zookeeper) 时有效。 - -`` 中可配置的参数包括: - -| Setting | Description | Default Value | -| ---------------------- | ------------------------------------------------------- | ------------------------- | -| `path` | Keeper 中用于 DDL 查询 `task_queue` 的路径 | | -| `profile` | 用于执行 DDL 查询的配置 profile | | -| `pool_size` | 可以同时运行多少个 `ON CLUSTER` 查询 | | -| `max_tasks_in_queue` | 队列中任务的最大数量。 | `1,000` | -| `task_max_lifetime` | 如果节点存在时间大于该值,则删除该节点。 | `7 * 24 * 60 * 60`(一周的秒数) | -| `cleanup_delay_period` | 如果距离上一次清理已经过去至少 `cleanup_delay_period` 秒,在收到新节点事件时开始清理。 | `60` 秒 | - -**示例** - -```xml - - - /clickhouse/task_queue/ddl - - - default - - - 1 - - - - - 604800 - - - 60 - - - 1000 - -``` - - -## distributed_ddl_use_initial_user_and_roles {#distributed_ddl_use_initial_user_and_roles} - -如果启用,ON CLUSTER 查询将在远程分片上沿用并使用发起查询的用户和角色来执行。这样可确保整个集群中的访问控制保持一致,但要求该用户和角色在所有节点上都已存在。 - - - -## dns_allow_resolve_names_to_ipv4 {#dns_allow_resolve_names_to_ipv4} - -允许将域名解析为 IPv4 地址。 - - - -## dns_allow_resolve_names_to_ipv6 {#dns_allow_resolve_names_to_ipv6} - -允许将主机名解析为 IPv6 地址。 - - - -## dns_cache_max_entries {#dns_cache_max_entries} - -内部 DNS 缓存的最大条目数量。 - - - -## dns_cache_update_period {#dns_cache_update_period} - -内部 DNS 缓存的更新周期,单位为秒。 - - - -## dns_max_consecutive_failures {#dns_max_consecutive_failures} - -在将某主机名从 ClickHouse 的 DNS 缓存中移除之前,该主机名允许出现的连续 DNS 解析失败的最大次数。 - - - -## drop_distributed_cache_pool_size {#drop_distributed_cache_pool_size} - -用于清理分布式缓存的线程池大小。 - - - -## drop_distributed_cache_queue_size {#drop_distributed_cache_queue_size} - -用于清理分布式缓存的线程池的队列大小。 - - - -## enable_azure_sdk_logging {#enable_azure_sdk_logging} - -启用 Azure SDK 日志输出 - - - -## encryption - -配置用于获取密钥的命令,该密钥将被 [加密编解码器](/sql-reference/statements/create/table#encryption-codecs) 使用。密钥(或多个密钥)应通过环境变量提供或在配置文件中进行设置。 - -密钥可以是十六进制值,或长度为 16 字节的字符串。 - -**示例** - -从配置加载: - -```xml - - - 1234567812345678 - - -``` - -:::note -不建议在配置文件中存储密钥,这样做并不安全。你可以将密钥移动到受保护磁盘上的单独配置文件中,然后在 `config.d/` 文件夹中添加指向该配置文件的符号链接。 -::: - -当密钥以十六进制形式表示时,从配置中加载: - -```xml - - - 00112233445566778899aabbccddeeff - - -``` - -从环境变量中加载密钥: - -```xml - - - - - -``` - -这里,`current_key_id` 用于指定当前加密所使用的密钥,而所有指定的密钥都可以用于解密。 - -下面的每种方法都可以用于多个密钥: - -```xml - - - 00112233445566778899aabbccddeeff - - 1 - - -``` - -此处 `current_key_id` 表示当前用于加密的密钥。 - -另外,用户可以添加一个长度必须为 12 字节的 nonce(默认情况下,加密和解密过程使用由全零字节组成的 nonce): - -```xml - - - 012345678910 - - -``` - -或者可以将其设置为十六进制: - -```xml - - - abcdefabcdef - - -``` - -:::note -上述所有说明同样适用于 `aes_256_gcm_siv`(但密钥长度必须为 32 字节)。 -::: - - -## error_log - -默认情况下处于禁用状态。 - -**启用** - -要手动启用错误历史记录收集 [`system.error_log`](../../operations/system-tables/error_log.md),请创建 `/etc/clickhouse-server/config.d/error_log.xml`,内容如下: - -```xml - - - system - error_log
- 7500 - 1000 - 1048576 - 8192 - 524288 - false -
-
-``` - -**禁用** - -要禁用 `error_log` 设置,请创建文件 `/etc/clickhouse-server/config.d/disable_error_log.xml`,内容如下: - -```xml - - - -``` - - - - -## format_parsing_thread_pool_queue_size {#format_parsing_thread_pool_queue_size} - - -用于解析输入的线程池中可调度任务的最大数量。 - -:::note -值为 `0` 表示不限制。 -::: - - - - -## format_schema_path - -输入数据 schema 所在目录的路径,例如用于 [CapnProto](/interfaces/formats/CapnProto) 格式的 schema。 - -**示例** - -```xml - -format_schemas/ -``` - - -## global_profiler_cpu_time_period_ns {#global_profiler_cpu_time_period_ns} - -全局分析器的 CPU 时钟计时器周期(单位:纳秒)。将其设置为 0 可关闭 CPU 时钟全局分析器。对于单个查询,推荐值至少为 10000000(每秒 100 次);对于集群范围的分析,推荐值为 1000000000(每秒 1 次)。 - - - -## global_profiler_real_time_period_ns {#global_profiler_real_time_period_ns} - -全局分析器实时时钟计时器的周期(单位:纳秒)。将该值设置为 0 可关闭基于实时时钟的全局分析器。对于单个查询,推荐值至少为 10000000(每秒 100 次);对于集群范围的分析,推荐值为 1000000000(每秒 1 次)。 - - - -## google_protos_path - -指定一个包含用于 Protobuf 类型的 proto 文件的目录。 - -示例: - -```xml -/usr/share/clickhouse/protos/ -``` - - -## graphite - -向 [Graphite](https://github.com/graphite-project) 发送数据。 - -配置项: - -* `host` – Graphite 服务器。 -* `port` – Graphite 服务器上的端口。 -* `interval` – 发送间隔(秒)。 -* `timeout` – 发送数据的超时时间(秒)。 -* `root_path` – 键的前缀。 -* `metrics` – 从 [system.metrics](/operations/system-tables/metrics) 表发送数据。 -* `events` – 从 [system.events](/operations/system-tables/events) 表发送在指定时间段内累积的增量数据。 -* `events_cumulative` – 从 [system.events](/operations/system-tables/events) 表发送累计数据。 -* `asynchronous_metrics` – 从 [system.asynchronous_metrics](/operations/system-tables/asynchronous_metrics) 表发送数据。 - -可以配置多个 `` 子句。例如,可以用它来以不同的时间间隔发送不同的数据。 - -**示例** - -```xml - - localhost - 42000 - 0.1 - 60 - one_min - true - true - false - true - -``` - - -## graphite_rollup - -用于对 Graphite 数据进行精简(降采样)的设置。 - -更多详情参见 [GraphiteMergeTree](../../engines/table-engines/mergetree-family/graphitemergetree.md)。 - -**示例** - -```xml - - - max - - 0 - 60 - - - 3600 - 300 - - - 86400 - 3600 - - - -``` - - -## hsts_max_age - -HSTS 的有效时长(秒)。 - -:::note -值为 `0` 表示 ClickHouse 不启用 HSTS。若设置为正数,则会启用 HSTS,且 max-age 即为所设置的数值。 -::: - -**示例** - -```xml -600000 -``` - - -## http_connections_soft_limit {#http_connections_soft_limit} - -超过此限制的连接,其存活时间会显著缩短。该限制适用于不隶属于任何磁盘或存储的 HTTP 连接。 - - - -## http_connections_store_limit {#http_connections_store_limit} - -超过此限制的连接在使用后会被重置。将其设置为 0 可关闭连接缓存功能。该限制适用于不属于任何磁盘或存储的 HTTP 连接。 - - - -## http_connections_warn_limit {#http_connections_warn_limit} - -如果正在使用的连接数量超过此限制,警告消息会被写入日志。该限制适用于不属于任何磁盘或存储的 HTTP 连接。 - - - -## http_handlers - -用于配置自定义 HTTP 处理程序。 -要添加一个新的 http 处理程序,只需添加一个新的 ``。 -规则按定义顺序自上而下进行检查, -第一个匹配项会执行对应的处理程序。 - -可以通过子标签配置以下设置: - -| Sub-tags | Definition | -| -------------------- | ---------------------------------------------------------------------- | -| `url` | 用于匹配请求 URL,可使用前缀 'regex:' 进行正则匹配(可选) | -| `methods` | 用于匹配请求方法,可使用逗号分隔多个方法(可选) | -| `headers` | 用于匹配请求头,对每个子元素(子元素名称为 header 名称)进行匹配,可使用前缀 'regex:' 进行正则匹配(可选) | -| `handler` | 请求处理程序 | -| `empty_query_string` | 检查 URL 中是否不存在查询字符串 | - -`handler` 包含以下设置,可以通过子标签进行配置: - -| Sub-tags | Definition | -| ------------------ | ----------------------------------------------------------------------------------------------- | -| `url` | 重定向的目标地址 | -| `type` | 支持的类型:static、dynamic_query_handler、predefined_query_handler、redirect | -| `status` | 与 static 类型一起使用,响应状态码 | -| `query_param_name` | 与 dynamic_query_handler 类型一起使用,从 HTTP 请求参数中提取并执行与 `` 对应的参数值 | -| `query` | 与 predefined_query_handler 类型一起使用,在处理程序被调用时执行的查询 | -| `content_type` | 与 static 类型一起使用,响应的 content-type | -| `response_content` | 与 static 类型一起使用,发送给客户端的响应内容;当使用前缀 'file://' 或 'config://' 时,将从文件或配置中读取内容并发送给客户端 | - -除了规则列表外,还可以指定 ``,用于启用所有默认处理程序。 - -示例: - -```xml - - - / - POST,GET - no-cache - - dynamic_query_handler - query - - - - - /predefined_query - POST,GET - - predefined_query_handler - SELECT * FROM system.settings - - - - - - static - 200 - text/plain; charset=UTF-8 - config://http_server_default_response - - - -``` - - -## http_options_response - -用于在 `OPTIONS` HTTP 请求的响应中添加响应头。 -`OPTIONS` 方法用于发起 CORS 预检请求。 - -更多信息参见 [OPTIONS](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/OPTIONS)。 - -示例: - -```xml - -
- Access-Control-Allow-Origin - * -
-
- Access-Control-Allow-Headers - origin, x-requested-with, x-clickhouse-format, x-clickhouse-user, x-clickhouse-key, Authorization -
-
- Access-Control-Allow-Methods - POST, GET, OPTIONS -
-
- Access-Control-Max-Age - 86400 -
-
-``` - - -## http_server_default_response - -当你访问 ClickHouse HTTP(s) 服务器时默认显示的页面。 -默认值为 "Ok."(末尾带一个换行符) - -**示例** - -在访问 `http://localhost: http_port` 时打开 `https://tabix.io/`。 - -```xml - -
]]> -
-``` - - -## iceberg_catalog_threadpool_pool_size {#iceberg_catalog_threadpool_pool_size} - -Iceberg 目录后台线程池大小 - - - -## iceberg_catalog_threadpool_queue_size {#iceberg_catalog_threadpool_queue_size} - -iceberg catalog 线程池队列中可排队的最大任务数量 - - - -## iceberg_metadata_files_cache_max_entries {#iceberg_metadata_files_cache_max_entries} - -iceberg 元数据文件缓存的最大缓存条目数。设为 0 表示禁用。 - - - -## iceberg_metadata_files_cache_policy {#iceberg_metadata_files_cache_policy} - -Iceberg 元数据文件缓存策略名称。 - - - -## iceberg_metadata_files_cache_size {#iceberg_metadata_files_cache_size} - -Iceberg 元数据缓存的最大容量(字节)。设为 0 表示禁用。 - - - -## iceberg_metadata_files_cache_size_ratio {#iceberg_metadata_files_cache_size_ratio} - -iceberg 元数据缓存中(在使用 SLRU 策略时)受保护队列的大小相对于缓存总大小的比例。 - - - -## ignore_empty_sql_security_in_create_view_query {#ignore_empty_sql_security_in_create_view_query} - - -如果为 true,ClickHouse 在 `CREATE VIEW` 查询中不会为空的 SQL SECURITY 子句写入默认值。 - -:::note -此设置仅在迁移期间需要,并将在 24.4 中废弃。 -::: - - - - -## include_from - -包含替换内容的文件路径。支持 XML 和 YAML 两种格式。 - -有关更多信息,请参阅“[配置文件](/operations/configuration-files)”一节。 - -**示例** - -```xml -/etc/metrica.xml -``` - - -## index_mark_cache_policy {#index_mark_cache_policy} - -二级索引标记缓存策略的名称。 - - - -## index_mark_cache_size {#index_mark_cache_size} - - -索引标记缓存的最大容量。 - -:::note - -值为 `0` 表示禁用。 - -此设置可以在运行时修改,并会立即生效。 -::: - - - - -## index_mark_cache_size_ratio {#index_mark_cache_size_ratio} - -在采用 SLRU 策略时,二级索引标记缓存中受保护队列的大小,占该缓存总大小的比例。 - - - -## index_uncompressed_cache_policy {#index_uncompressed_cache_policy} - -二级索引未压缩缓存策略的名称。 - - - -## index_uncompressed_cache_size {#index_uncompressed_cache_size} - - -未压缩 `MergeTree` 索引块的缓存最大大小。 - -:::note -值为 `0` 表示禁用。 - -此设置可以在运行时修改,并会立即生效。 -::: - - - - -## index_uncompressed_cache_size_ratio {#index_uncompressed_cache_size_ratio} - -二级索引未压缩缓存中受保护队列(在采用 SLRU 策略时)的大小,占该缓存总大小的比例。 - - - -## interserver_http_credentials - -用于在[复制](../../engines/table-engines/mergetree-family/replication.md)期间连接到其他服务器的用户名和密码。此外,服务器也使用这些凭证对其他副本进行身份验证。 -因此,集群中所有副本的 `interserver_http_credentials` 必须保持一致。 - -:::note - -* 默认情况下,如果省略 `interserver_http_credentials` 部分,则在复制期间不使用身份验证。 -* `interserver_http_credentials` 设置与 ClickHouse 客户端凭证[配置](../../interfaces/cli.md#configuration_files)无关。 -* 这些凭证在通过 `HTTP` 和 `HTTPS` 进行复制时共用。 - ::: - -可以通过子标签配置以下设置: - -* `user` — 用户名。 -* `password` — 密码。 -* `allow_empty` — 如果为 `true`,即使配置了凭证,也允许其他副本在没有身份验证的情况下连接;如果为 `false`,则拒绝无身份验证的连接。默认值:`false`。 -* `old` — 包含在凭证轮换期间使用的旧 `user` 和 `password`。可以指定多个 `old` 部分。 - -**凭证轮换** - -ClickHouse 支持在无需同时停止所有副本来更新其配置的情况下,动态轮换 interserver 凭证。凭证可以分步骤进行更改。 - -要启用身份验证,请将 `interserver_http_credentials.allow_empty` 设置为 `true` 并添加凭证。这样既允许带身份验证的连接,也允许不带身份验证的连接。 - -```xml - - admin - 111 - true - -``` - -在配置完所有副本后,将 `allow_empty` 设置为 `false`,或删除此设置。这样会强制要求使用新凭证进行身份验证。 - -若要更改现有凭证,请将用户名和密码移动到 `interserver_http_credentials.old` 部分,并将 `user` 和 `password` 更新为新值。此时,服务器会使用新凭证连接到其他副本,并接受使用新旧任一凭证建立的连接。 - -```xml - - admin - 222 - - admin - 111 - - - temp - 000 - - -``` - -当新凭证已应用于所有副本后,即可删除旧凭证。 - - -## interserver_http_host - -可供其他服务器访问本服务器时使用的主机名。 - -如果省略,则与 `hostname -f` 命令的结果相同。 - -在摆脱对特定网络接口的依赖时非常有用。 - -**示例** - -```xml -example.clickhouse.com -``` - - -## interserver_http_port - -用于 ClickHouse 服务器之间数据交换的端口。 - -**示例** - -```xml -9009 -``` - - -## interserver_https_host - -与 [`interserver_http_host`](#interserver_http_host) 类似,只不过该主机名用于让其他服务器通过 `HTTPS` 访问本服务器。 - -**示例** - -```xml -example.clickhouse.com -``` - - -## interserver_https_port - -用于 ClickHouse 服务器之间通过 `HTTPS` 交换数据的端口。 - -**示例** - -```xml -9010 -``` - - -## interserver_listen_host - -限制可以在 ClickHouse 服务器之间交换数据的主机。 -如果使用 Keeper,相同的限制也会应用到不同 Keeper 实例之间的通信。 - -:::note -默认情况下,该值等于 [`listen_host`](#listen_host) 设置。 -::: - -**示例** - -```xml -::ffff:a00:1 -10.0.0.1 -``` - -类型: - -默认值: - - -## io_thread_pool_queue_size {#io_thread_pool_queue_size} - - -可加入 IO 线程池队列的任务最大数量。 - -:::note -值为 `0` 表示不作限制。 -::: - - - - -## jemalloc_collect_global_profile_samples_in_trace_log {#jemalloc_collect_global_profile_samples_in_trace_log} - -将 jemalloc 抽样得到的分配信息存储到 system.trace_log 中 - - - -## jemalloc_enable_background_threads {#jemalloc_enable_background_threads} - -启用 jemalloc 后台线程。jemalloc 使用后台线程来释放未使用的内存页。禁用它可能会导致性能下降。 - - - -## jemalloc_enable_global_profiler {#jemalloc_enable_global_profiler} - -为所有线程启用 jemalloc 的分配分析器。Jemalloc 将对内存分配进行采样,并对这些已采样分配的所有释放操作进行采样。 -可以使用 SYSTEM JEMALLOC FLUSH PROFILE 刷新分析概要,用于分配分析。 -样本也可以通过配置项 jemalloc_collect_global_profile_samples_in_trace_log 或查询设置 jemalloc_collect_profile_samples_in_trace_log 存储到 system.trace_log 表中。 -请参阅 [分配分析](/operations/allocation-profiling)。 - - - -## jemalloc_flush_profile_interval_bytes {#jemalloc_flush_profile_interval_bytes} - -当全局峰值内存使用量增加了 jemalloc_flush_profile_interval_bytes 后,将刷新 jemalloc 性能分析数据 - - - -## jemalloc_flush_profile_on_memory_exceeded {#jemalloc_flush_profile_on_memory_exceeded} - -在发生总内存超限错误时,将刷新 jemalloc 性能分析数据 - - - -## jemalloc_max_background_threads_num {#jemalloc_max_background_threads_num} - -要创建的 jemalloc 后台线程的最大数量,设置为 0 以使用 jemalloc 的默认值 - - - -## keep_alive_timeout - - - -ClickHouse 在关闭 HTTP 连接之前等待传入请求的时间(以秒为单位)。 - -**示例** - -```xml -10 -``` - - -## keeper_hosts {#keeper_hosts} - -动态设置。包含一组 ClickHouse 可以连接的 [Zoo]Keeper 主机。不会暴露 `` 中的信息。 - - - -## keeper_multiread_batch_size {#keeper_multiread_batch_size} - - -对支持批处理的 [Zoo]Keeper 发起 MultiRead 请求时允许的最大批处理大小。如果设置为 0,则禁用批处理。仅在 ClickHouse Cloud 中可用。 - - - - -## ldap_servers {#ldap_servers} - -在此列出 LDAP 服务器及其连接参数,以便: -- 将它们用作特定本地用户的身份验证服务,这些用户在身份验证机制中指定的是 `ldap` 而不是 `password` -- 将它们用作远程用户目录。 - -可以通过子标签配置以下设置: - -| Setting | Description | -|--------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `host` | LDAP 服务器的主机名或 IP,此参数为必填项且不能为空。 | -| `port` | LDAP 服务器端口,如果 `enable_tls` 设置为 true,默认值为 636,否则为 `389`。 | -| `bind_dn` | 用于构造要绑定 DN 的模板。生成的 DN 将在每次身份验证尝试期间,通过将模板中所有的 `\{user_name\}` 子串替换为实际用户名来构造。 | -| `user_dn_detection` | 用于检测已绑定用户的实际用户 DN 的 LDAP 搜索参数部分。主要在服务器为 Active Directory 时用于后续角色映射中的搜索过滤器。生成的用户 DN 将在允许的位置用于替换 `\{user_dn\}` 子串。默认情况下,用户 DN 被设置为等于 bind DN,但一旦执行搜索,它将更新为实际检测到的用户 DN 值。 | -| `verification_cooldown` | 在成功绑定尝试之后的一段时间(以秒为单位),在此期间将假定用户在所有连续请求中都已成功通过身份验证,而无需联系 LDAP 服务器。指定 `0`(默认)以禁用缓存,并强制对每个身份验证请求都联系 LDAP 服务器。 | -| `enable_tls` | 是否与 LDAP 服务器使用安全连接的标志。指定 `no` 以使用明文 (`ldap://`) 协议(不推荐)。指定 `yes` 以使用基于 SSL/TLS 的 LDAP (`ldaps://`) 协议(推荐,默认值)。指定 `starttls` 以使用旧版 StartTLS 协议(先使用明文 (`ldap://`) 协议,再升级为 TLS)。 | -| `tls_minimum_protocol_version` | SSL/TLS 的最小协议版本。可接受的值为:`ssl2`、`ssl3`、`tls1.0`、`tls1.1`、`tls1.2`(默认)。 | -| `tls_require_cert` | SSL/TLS 对端证书验证行为。可接受的值为:`never`、`allow`、`try`、`demand`(默认)。 | -| `tls_cert_file` | 证书文件路径。 | -| `tls_key_file` | 证书私钥文件路径。 | -| `tls_ca_cert_file` | CA 证书文件路径。 | -| `tls_ca_cert_dir` | 包含 CA 证书的目录路径。 | -| `tls_cipher_suite` | 允许的密码套件(OpenSSL 表示法)。 | - -可以通过子标签配置 `user_dn_detection` 设置: - -| Setting | Description | -|-----------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `base_dn` | 用于构造 LDAP 搜索基础 DN 的模板。生成的 DN 将在 LDAP 搜索期间,通过将模板中所有的 `\{user_name\}` 和 `\{bind_dn\}` 子串替换为实际用户名和 bind DN 来构造。 | -| `scope` | LDAP 搜索的范围。可接受的值为:`base`、`one_level`、`children`、`subtree`(默认)。 | -| `search_filter` | 用于构造 LDAP 搜索过滤器的模板。生成的过滤器将在 LDAP 搜索期间,通过将模板中所有的 `\{user_name\}`、`\{bind_dn\}` 和 `\{base_dn\}` 子串替换为实际用户名、bind DN 和 base DN 来构造。注意,在 XML 中必须正确转义特殊字符。 | - -示例: - - - -```xml - - localhost - 636 - uid={user_name},ou=users,dc=example,dc=com - 300 - yes - tls1.2 - demand - /path/to/tls_cert_file - /path/to/tls_key_file - /path/to/tls_ca_cert_file - /path/to/tls_ca_cert_dir - ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:AES256-GCM-SHA384 - -``` - -示例(典型的 Active Directory,已配置用户 DN 检测用于后续角色映射): - -```xml - - localhost - 389 - EXAMPLE\{user_name} - - CN=Users,DC=example,DC=com - (&(objectClass=user)(sAMAccountName={user_name})) - - no - -``` - - -## license_key {#license_key} - -ClickHouse 企业版的许可密钥 - - - -## listen_backlog - -监听套接字的积压队列(待处理连接的队列大小)。默认值 `4096` 与 Linux [5.4+](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=19f92a030ca6d772ab44b22ee6a01378a8cb32d4)) 的默认值相同。 - -通常不需要修改该值,因为: - -* 默认值已经足够大, -* 服务器会使用单独的线程来接受客户端连接。 - -因此,即使在 ClickHouse 服务器上看到 `TcpExtListenOverflows`(来自 `nstat`)为非零且该计数器在增长,也不代表必须增大该值,因为: - -* 通常如果 `4096` 都不够,说明存在某种 ClickHouse 内部的扩展性问题,更好的做法是提交 issue 进行反馈。 -* 这并不意味着服务器之后就能处理更多连接(即便可以,到那时客户端可能已经离开或断开连接)。 - -**示例** - -```xml -4096 -``` - - -## listen_host - -用于限制哪些主机可以向服务器发出请求。如果希望服务器响应来自所有主机的请求,请指定 `::`。 - -示例: - -```xml -::1 -127.0.0.1 -``` - - -## listen_reuse_port - -允许多个服务器监听同一地址和端口(address:port)。操作系统会将请求随机路由到某个服务器。不建议启用此设置。 - -**示例** - -```xml -0 -``` - -类型: - -默认值: - - -## listen_try - -在尝试监听时,即使 IPv6 或 IPv4 网络不可用,服务器也不会退出。 - -**示例** - -```xml -0 -``` - - -## load_marks_threadpool_pool_size {#load_marks_threadpool_pool_size} - -用于加载 marks 的后台线程池的大小 - - - -## load_marks_threadpool_queue_size {#load_marks_threadpool_queue_size} - -可加入预取池的最大任务数量 - - - -## logger {#logger} - -日志消息的位置和格式。 - -**键**: - -| Key | Description | -|------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `level` | 日志级别。可接受的值:`none`(关闭日志)、`fatal`、`critical`、`error`、`warning`、`notice`、`information`、`debug`、`trace`、`test` | -| `log` | 日志文件的路径。 | -| `errorlog` | 错误日志文件的路径。 | -| `size` | 轮转策略:日志文件的最大大小(字节数)。一旦日志文件大小超过该阈值,它会被重命名并归档,同时创建一个新的日志文件。 | -| `count` | 轮转策略:ClickHouse 最多保留的历史日志文件数量。 | -| `stream_compress` | 使用 LZ4 压缩日志消息。设置为 `1` 或 `true` 以启用。 | -| `console` | 启用控制台日志输出。设置为 `1` 或 `true` 以启用。如果 ClickHouse 不以守护进程模式运行,则默认值为 `1`,否则为 `0`。 | -| `console_log_level` | 控制台输出的日志级别。默认与 `level` 相同。 | -| `formatting.type` | 控制台输出的日志格式。目前仅支持 `json`。 | -| `use_syslog` | 同时将日志输出转发到 syslog。 | -| `syslog_level` | 写入 syslog 时使用的日志级别。 | -| `async` | 当为 `true`(默认)时,日志将异步写入(每个输出通道使用一个后台线程)。否则将在调用 LOG 的线程中同步写入。 | -| `async_queue_max_size` | 使用异步日志时,等待刷新的队列中最多保留的消息数量。超出的消息将被丢弃。 | -| `startup_level` | 启动级别用于在服务器启动时设置根 logger 的级别。启动完成后,日志级别会恢复为 `level` 配置。 | -| `shutdown_level` | 关闭级别用于在服务器关闭时设置根 logger 的级别。 | - -**日志格式说明符** - -`log` 和 `errorLog` 路径中的文件名支持下列格式说明符,用于生成最终文件名(目录部分不支持这些说明符)。 - -“Example” 列显示在 `2023-07-06 18:32:07` 时的输出。 - - - -| 说明符 | 说明 | 示例 | -| ---- | ----------------------------------------------------------------------------------------------------- | -------------------------- | -| `%%` | 字面 % 符号 | `%` | -| `%n` | 换行符 | | -| `%t` | 水平 Tab 字符 | | -| `%Y` | 年份(十进制数),例如 2017 | `2023` | -| `%y` | 年份最后两位,表示为十进制数(范围 [00,99]) | `23` | -| `%C` | 年份的前两位十进制数字(范围 [00,99]) | `20` | -| `%G` | 四位数的 [ISO 8601 周历年份](https://en.wikipedia.org/wiki/ISO_8601#Week_dates),即包含指定周的年份。通常仅在与 `%V` 一起使用时有用。 | `2023` | -| `%g` | [ISO 8601 周历年份](https://en.wikipedia.org/wiki/ISO_8601#Week_dates) 的最后 2 位数字,即包含所指定周的年份。 | `23` | -| `%b` | 缩写的月份名称,例如 Oct(取决于区域设置) | `7月` | -| `%h` | %b 的同义词 | `7月` | -| `%B` | 完整月份名称,例如 October(取决于语言环境) | `7月` | -| `%m` | 以十进制数字表示的月份(范围 [01,12]) | `07` | -| `%U` | 一年中的第几周,以十进制数表示(星期日为一周的第一天)(范围 [00,53]) | `27` | -| `%W` | 一年中的周数(以十进制数表示,星期一为一周的第一天)(范围 [00,53]) | `27` | -| `%V` | ISO 8601 周数(范围 [01,53]) | `27` | -| `%j` | 一年中的第几天,用十进制数表示(范围 [001,366]) | `187` | -| `%d` | 以零填充的十进制数表示的日期(日,范围 [01,31])。一位数前补零。 | `06` | -| `%e` | 以空格填充的十进制表示的日期(范围 [1,31])。一位数前补一个空格。 | `  6` | -| `%a` | 星期名称的缩写,例如 Fri(取决于区域设置) | `周四` | -| `%A` | 完整的星期名称,例如 Friday(取决于所使用的区域设置) | `星期四` | -| `%w` | 星期几,以整数表示,周日为 0(范围 [0-6]) | `4` | -| `%u` | 将星期几表示为十进制数,其中星期一为 1(ISO 8601 格式),取值范围为 [1-7] | `4` | -| `%H` | 24 小时制的小时,以十进制数表示(范围 [00-23]) | `18` | -| `%I` | 以十进制表示的小时数,12 小时制(范围 [01,12]) | `06` | -| `%M` | 以十进制表示的分钟数(范围 [00,59]) | `32` | -| `%S` | 以十进制表示的秒(范围 [00,60]) | `07` | -| `%c` | 标准日期和时间字符串,例如 Sun Oct 17 04:41:13 2010(取决于区域设置) | `Thu Jul 6 18:32:07 2023` | -| `%x` | 本地化的日期表示形式(因区域设置而异) | `2023 年 7 月 6 日` | -| `%X` | 本地化的时间表示形式,例如 18:40:20 或 6:40:20 PM(取决于区域设置) | `18:32:07` | -| `%D` | 短格式 MM/DD/YY 日期,等同于 %m/%d/%y | `2023-07-06` | -| `%F` | 简短格式的 YYYY-MM-DD 日期,与 %Y-%m-%d 等价 | `2023-07-06` | -| `%r` | 本地化 12 小时制时间(取决于区域设置) | `06:32:07 PM` | -| `%R` | 等价于 "%H:%M" | `18:32` | -| `%T` | 等同于 "%H:%M:%S"(ISO 8601 标准时间格式) | `18:32:07` | -| `%p` | 本地化的上午或下午标记(取决于语言环境) | `PM` | -| `%z` | 相对于 UTC 的偏移量,采用 ISO 8601 格式(例如 -0430);如果时区信息不可用,则留空 | `+0800` | -| `%Z` | 与区域设置相关的时区名称或缩写;如果时区信息不可用,则不包含任何字符 | `Z AWST ` | - -**示例** - -```xml - - trace - /var/log/clickhouse-server/clickhouse-server-%F-%T.log - /var/log/clickhouse-server/clickhouse-server-%F-%T.err.log - 1000M - 10 - true - -``` - -要只在控制台输出日志消息: - -```xml - - information - true - -``` - -**按级别重写** - -可以重写单个日志名称的日志级别。例如,要屏蔽日志记录器 “Backup” 和 “RBAC” 的所有消息。 - -```xml - - - - Backup - none - - - RBAC - none - - - -``` - -**syslog** - -要同时将日志消息写入 syslog: - -```xml - - 1 - -
syslog.remote:10514
- myhost.local - LOG_LOCAL6 - syslog -
-
-``` - -`<syslog>` 的键: - -| Key | Description | -| ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `address` | 以 `host\[:port\]` 格式表示的 syslog 地址。若省略,则使用本地 syslog 守护进程。 | -| `hostname` | 发送日志的主机名(可选)。 | -| `facility` | syslog 的 [facility 关键字](https://en.wikipedia.org/wiki/Syslog#Facility)。必须使用大写并带有 "LOG_" 前缀,例如 `LOG_USER`、`LOG_DAEMON`、`LOG_LOCAL3` 等。默认值:如果指定了 `address`,则为 `LOG_USER`,否则为 `LOG_DAEMON`。 | -| `format` | 日志消息格式。可选值:`bsd` 和 `syslog.` | - -**日志格式** - -可以指定输出到控制台日志中的日志格式。目前仅支持 JSON。 - -**示例** - -下面是一个输出 JSON 日志的示例: - -```json -{ - "date_time_utc": "2024-11-06T09:06:09Z", - "date_time": "1650918987.180175", - "thread_name": "#1", - "thread_id": "254545", - "level": "Trace", - "query_id": "", - "logger_name": "BaseDaemon", - "message": "已接收信号 2", - "source_file": "../base/daemon/BaseDaemon.cpp; virtual void SignalListener::run()", - "source_line": "192" -} -``` - -要启用 JSON 日志支持,请使用以下代码片段: - -```xml - - - json - - - - date_time - thread_name - thread_id - level - query_id - logger_name - message - source_file - source_line - - - -``` - -**为 JSON 日志重命名键** - -可以通过修改 `` 标签内的值来更改键名。例如,要将 `DATE_TIME` 改为 `MY_DATE_TIME`,可以使用 `MY_DATE_TIME`。 - -**在 JSON 日志中省略键** - -可以通过将属性注释掉来省略日志属性。例如,如果不希望日志输出 `query_id`,可以将 `` 标签注释掉。 - - -## macros - -用于复制表的参数替换。 - -如果不使用复制表,可以省略此部分。 - -更多信息,参见[创建复制表](../../engines/table-engines/mergetree-family/replication.md#creating-replicated-tables)一节。 - -**示例** - -```xml - -``` - - -## mark_cache_policy {#mark_cache_policy} - -标记缓存策略的名称。 - - - -## mark_cache_prewarm_ratio {#mark_cache_prewarm_ratio} - -预热时需要填充的标记缓存总大小占比。 - - - -## mark_cache_size {#mark_cache_size} - - -标记([`MergeTree`](/engines/table-engines/mergetree-family) 表引擎家族的索引)缓存的最大大小。 - -:::note -此设置可以在运行时修改,并会立即生效。 -::: - - - - -## mark_cache_size_ratio {#mark_cache_size_ratio} - -在标记缓存中,受保护队列(在采用 SLRU 策略时)的大小,占缓存总大小的比例。 - - - -## max_active_parts_loading_thread_pool_size {#max_active_parts_loading_thread_pool_size} - -在启动时用于加载活动数据片段集合的线程数。 - - - -## max_authentication_methods_per_user {#max_authentication_methods_per_user} - - -创建或修改用户时可配置的身份验证方式数量上限。 -更改此设置不会影响现有用户。如果与身份验证相关的 CREATE/ALTER 查询超过此设置中指定的限制,将会执行失败。 -与身份验证无关的 CREATE/ALTER 查询将会成功。 - -:::note -值为 `0` 表示不限制。 -::: - - - - -## max_backup_bandwidth_for_server {#max_backup_bandwidth_for_server} - -服务器上所有备份的最大读取速度(以每秒字节数计)。值为 0 表示不限速。 - - - -## max_backups_io_thread_pool_free_size {#max_backups_io_thread_pool_free_size} - -如果 Backups IO 线程池中**空闲**线程的数量超过 `max_backup_io_thread_pool_free_size`,ClickHouse 将释放空闲线程占用的资源并缩小线程池大小。如有需要,可以重新创建线程。 - - - -## max_backups_io_thread_pool_size {#max_backups_io_thread_pool_size} - -ClickHouse 使用来自 Backups IO 线程池的线程来执行 S3 备份 I/O 操作。`max_backups_io_thread_pool_size` 用于限制该线程池中的线程最大数量。 - - - -## max_build_vector_similarity_index_thread_pool_size {#max_build_vector_similarity_index_thread_pool_size} - - -用于构建向量索引的最大线程数。 - -:::note -当值为 `0` 时,表示使用所有 CPU 核心。 -::: - - - - -## max_concurrent_insert_queries {#max_concurrent_insert_queries} - - -限制同时执行的插入查询总数。 - -:::note - -值为 `0`(默认)表示不限制。 - -此设置可以在运行时修改,并会立即生效。已经在运行中的查询不会受到影响。 -::: - - - - -## max_concurrent_queries {#max_concurrent_queries} - - -对同时执行的查询总数进行限制。请注意,还需要同时考虑对 `INSERT` 和 `SELECT` 查询的限制,以及对每个用户最大查询数量的限制。 - -另请参阅: -- [`max_concurrent_insert_queries`](/operations/server-configuration-parameters/settings#max_concurrent_insert_queries) -- [`max_concurrent_select_queries`](/operations/server-configuration-parameters/settings#max_concurrent_select_queries) -- [`max_concurrent_queries_for_all_users`](/operations/settings/settings#max_concurrent_queries_for_all_users) - -:::note - -值为 `0`(默认)表示不限。 - -此设置可以在运行时修改,并会立即生效。已在运行的查询不会受到影响。 -::: - - - - -## max_concurrent_select_queries {#max_concurrent_select_queries} - - -限制同时执行的 `SELECT` 查询总数。 - -:::note - -值为 `0`(默认)表示无限制。 - -此设置可以在运行时修改,并会立即生效。已在运行中的查询不会受到影响。 -::: - - - - -## max_connections {#max_connections} - -服务器的最大连接数。 - - - -## max_database_num_to_throw {#max_database_num_to_throw} - -如果数据库数量超过该值,服务器将抛出异常。0 表示不限制。 - - - -## max_database_num_to_warn - - - -如果已附加的数据库数量超过指定值,ClickHouse 服务器会向 `system.warnings` 表添加警告信息。 - -**示例** - -```xml -50 -``` - - -## max_database_replicated_create_table_thread_pool_size {#max_database_replicated_create_table_thread_pool_size} - -在 DatabaseReplicated 中用于在副本恢复期间创建表的线程数。0 表示线程数等于 CPU 核心数。 - - - -## max_dictionary_num_to_throw - - - -如果字典数量大于该值,服务器将抛出异常。 - -仅统计以下数据库引擎中的表: - -* Atomic -* Ordinary -* Replicated -* Lazy - -:::note -值 `0` 表示不限制。 -::: - -**示例** - -```xml -400 -``` - - -## max_dictionary_num_to_warn - - - -如果已附加的字典数量超过指定的值,ClickHouse 服务器会在 `system.warnings` 表中添加警告信息。 - -**示例** - -```xml -400 -``` - - -## max_distributed_cache_read_bandwidth_for_server {#max_distributed_cache_read_bandwidth_for_server} - -服务器端从分布式缓存读取的最大总带宽(以字节/秒为单位)。零表示无限制。 - - - -## max_distributed_cache_write_bandwidth_for_server {#max_distributed_cache_write_bandwidth_for_server} - -服务器上分布式缓存的最大总写入带宽(以字节/秒为单位)。零表示不限制。 - - - -## max_entries_for_hash_table_stats {#max_entries_for_hash_table_stats} - -在聚合过程中允许收集的哈希表统计信息的最大条目数 - - - -## max_fetch_partition_thread_pool_size {#max_fetch_partition_thread_pool_size} - -用于 ALTER TABLE FETCH PARTITION 操作的线程数。 - - - -## max_format_parsing_thread_pool_free_size {#max_format_parsing_thread_pool_free_size} - - -在线程池中用于解析输入时保留的最大空闲备用线程数。 - - - - -## max_format_parsing_thread_pool_size {#max_format_parsing_thread_pool_size} - - -解析输入数据时可使用的线程总数上限。 - - - - -## max_io_thread_pool_free_size {#max_io_thread_pool_free_size} - - -如果 I/O 线程池中**空闲**线程的数量超过 `max_io_thread_pool_free_size`,ClickHouse 将释放空闲线程占用的资源并缩小线程池大小。如有需要,可以再次创建线程。 - - - - -## max_io_thread_pool_size {#max_io_thread_pool_size} - - -ClickHouse 使用 IO 线程池中的线程来执行某些 IO 操作(例如与 S3 进行交互)。`max_io_thread_pool_size` 用于限制线程池中的最大线程数量。 - - - - -## max_keep_alive_requests - - - -单个 keep-alive 连接在被 ClickHouse 服务器关闭前所能处理的最大请求数。 - -**示例** - -```xml -10 -``` - - -## max_local_read_bandwidth_for_server {#max_local_read_bandwidth_for_server} - - -本地读取的最大速度,以字节/秒为单位。 - -:::note -值为 `0` 表示不受限制。 -::: - - - - -## max_local_write_bandwidth_for_server {#max_local_write_bandwidth_for_server} - - -本地写入的最大速度,以字节/秒为单位。 - -:::note -值为 `0` 表示不受限制。 -::: - - - - -## max_materialized_views_count_for_table {#max_materialized_views_count_for_table} - - -用于限制附加到单个表的物化视图数量。 - -:::note -这里只计算直接依赖的视图,在一个视图之上再创建视图的情况不计入该限制。 -::: - - - - -## max_merges_bandwidth_for_server {#max_merges_bandwidth_for_server} - -服务器上所有合并操作的最大读取带宽(以字节/秒为单位)。零表示不限制。 - - - -## max_mutations_bandwidth_for_server {#max_mutations_bandwidth_for_server} - -服务器上所有 mutation 的最大读取带宽(以字节每秒为单位)。0 表示不限制。 - - - -## max_named_collection_num_to_throw - - - -如果命名集合的数量大于该值,服务器将抛出异常。 - -:::note -值 `0` 表示不限制。 -::: - -**示例** - -```xml -400 -``` - - -## max_named_collection_num_to_warn - - - -如果命名集合的数量超过指定值,ClickHouse 服务器会向 `system.warnings` 表中添加警告信息。 - -**示例** - -```xml -400 -``` - - -## max_open_files - -最大可打开文件数。 - -:::note -我们建议在 macOS 上使用此选项,因为 `getrlimit()` 函数返回的值不正确。 -::: - -**示例** - -```xml -262144 -``` - - -## max_os_cpu_wait_time_ratio_to_drop_connection {#max_os_cpu_wait_time_ratio_to_drop_connection} - - -用于决定是否断开连接时,操作系统 CPU 等待时间(`OSCPUWaitMicroseconds` 指标)与忙碌时间(`OSCPUVirtualTimeMicroseconds` 指标)之间的最大比值。通过在最小和最大比值之间进行线性插值来计算概率,在该最大比值处概率为 1。 -更多详情参见 [在服务器 CPU 过载时控制行为](/operations/settings/server-overload)。 - - - - -## max_outdated_parts_loading_thread_pool_size {#max_outdated_parts_loading_thread_pool_size} - -在启动时用于加载非活动数据部件集合(过期部件)的线程数。 - - - -## max_part_num_to_warn - - - -如果活动 part 的数量超过指定值,ClickHouse 服务器会在 `system.warnings` 表中添加警告信息。 - -**示例** - -```xml -400 -``` - - -## max_partition_size_to_drop - - - -删除分区的限制。 - -如果 [MergeTree](../../engines/table-engines/mergetree-family/mergetree.md) 表的大小超过 [`max_partition_size_to_drop`](#max_partition_size_to_drop)(以字节为单位),则不能使用 [DROP PARTITION](../../sql-reference/statements/alter/partition.md#drop-partitionpart) 查询删除分区。 -此设置无需重启 ClickHouse 服务器即可生效。禁用该限制的另一种方式是创建 `/flags/force_drop_table` 文件。 - -:::note -值 `0` 表示可以在没有任何限制的情况下删除分区。 - -此限制不适用于 DROP TABLE 和 TRUNCATE TABLE 操作,参见 [max_table_size_to_drop](/operations/settings/settings#max_table_size_to_drop) -::: - -**示例** - -```xml -0 -``` - - -## max_parts_cleaning_thread_pool_size {#max_parts_cleaning_thread_pool_size} - -用于并发删除非活跃数据部件的线程数。 - - - -## max_pending_mutations_execution_time_to_warn - - - -如果任意一条待处理 mutation 的执行时间(以秒为单位)超过该设置的值,ClickHouse 服务器会向 `system.warnings` 表中添加警告信息。 - -**示例** - -```xml -10000 -``` - - -## max_pending_mutations_to_warn - - - -如果待处理变更(pending mutations)的数量超过指定值,ClickHouse 服务器会在 `system.warnings` 表中添加警告信息。 - -**示例** - -```xml -400 -``` - - -## max_prefixes_deserialization_thread_pool_free_size {#max_prefixes_deserialization_thread_pool_free_size} - - -如果前缀反序列化线程池中**空闲**线程的数量超过 `max_prefixes_deserialization_thread_pool_free_size`,ClickHouse 会释放这些空闲线程占用的资源并缩减线程池大小。如有需要,可以重新创建线程。 - - - - -## max_prefixes_deserialization_thread_pool_size {#max_prefixes_deserialization_thread_pool_size} - - -ClickHouse 使用前缀反序列化线程池中的线程,并行读取 MergeTree 的 Wide part 中文件前缀里的列和子列元数据。`max_prefixes_deserialization_thread_pool_size` 限制该线程池中的最大线程数。 - - - - -## max_remote_read_network_bandwidth_for_server {#max_remote_read_network_bandwidth_for_server} - - -通过网络进行远程读取时的数据交换最大速度,单位为字节每秒。 - -:::note -值为 `0`(默认)表示无限制。 -::: - - - - -## max_remote_write_network_bandwidth_for_server {#max_remote_write_network_bandwidth_for_server} - - -服务器端写入时通过网络进行数据交换的最大速度(以字节/秒计)。 - -:::note -值为 `0`(默认)表示不受限制。 -::: - - - - -## max_replicated_fetches_network_bandwidth_for_server {#max_replicated_fetches_network_bandwidth_for_server} - -用于复制抓取请求在网络上传输数据的最大带宽(以每秒字节数计)。零表示不限制。 - - - -## max_replicated_sends_network_bandwidth_for_server {#max_replicated_sends_network_bandwidth_for_server} - -用于副本发送时网络数据交换的最大带宽(以字节/秒为单位)。0 表示无限制。 - - - -## max_replicated_table_num_to_throw - - - -如果复制表的数量大于该值,服务器将抛出异常。 - -仅统计以下数据库引擎的表: - -* Atomic -* Ordinary -* Replicated -* Lazy - -:::note -值为 `0` 表示不做限制。 -::: - -**示例** - -```xml -400 -``` - - -## max_server_memory_usage {#max_server_memory_usage} - - -服务器允许使用的最大内存量,以字节为单位。 - -:::note -服务器的最大内存使用量还会受到 `max_server_memory_usage_to_ram_ratio` 设置的进一步限制。 -::: - -作为特殊情况,值为 `0`(默认)表示服务器可以使用所有可用内存(但仍受 `max_server_memory_usage_to_ram_ratio` 施加的进一步限制)。 - - - - -## max_server_memory_usage_to_ram_ratio {#max_server_memory_usage_to_ram_ratio} - - -服务器允许使用的最大内存量,以可用总内存的比例表示。 - -例如,值为 `0.9`(默认)表示服务器可以使用 90% 的可用内存。 - -用于在低内存系统上降低内存占用。 -在 RAM 和交换空间都较少的主机上,您可能需要将 [`max_server_memory_usage_to_ram_ratio`](#max_server_memory_usage_to_ram_ratio) 设置为大于 1 的值。 - -:::note -服务器的最大内存使用量还会受到 `max_server_memory_usage` 设置的进一步限制。 -::: - - - - -## max_session_timeout - -会话的最大超时时间,单位为秒。 - -示例: - -```xml -3600 -``` - - -## max_table_num_to_throw - - - -如果表的数量大于该值,服务器将抛出异常。 - -以下类型的表不会被统计在内: - -* view -* remote -* dictionary -* system - -只统计以下数据库引擎的表: - -* Atomic -* Ordinary -* Replicated -* Lazy - -:::note -`0` 表示不进行限制。 -::: - -**示例** - -```xml -400 -``` - - -## max_table_num_to_warn - - - -如果已附加的表数量超过指定值,ClickHouse 服务器会向 `system.warnings` 表添加警告信息。 - -**示例** - -```xml -400 -``` - - -## max_table_size_to_drop - - - -删除表的限制。 - -如果 [MergeTree](../../engines/table-engines/mergetree-family/mergetree.md) 表的大小超过 `max_table_size_to_drop`(以字节为单位),则不能使用 [`DROP`](../../sql-reference/statements/drop.md) 或 [`TRUNCATE`](../../sql-reference/statements/truncate.md) 查询来删除该表。 - -:::note -值为 `0` 表示可以在没有任何限制的情况下删除所有表。 - -更改此设置生效时,无需重启 ClickHouse 服务器。禁用该限制的另一种方式是在 `/flags/force_drop_table` 路径下创建文件。 -::: - -**示例** - -```xml -0 -``` - - -## max_temporary_data_on_disk_size {#max_temporary_data_on_disk_size} - - -用于外部聚合、JOIN 或排序的临时磁盘空间上限。 -超出此限制的查询将抛出异常并失败。 - -:::note -值为 `0` 表示不受限制。 -::: - -另请参阅: -- [`max_temporary_data_on_disk_size_for_user`](/operations/settings/settings#max_temporary_data_on_disk_size_for_user) -- [`max_temporary_data_on_disk_size_for_query`](/operations/settings/settings#max_temporary_data_on_disk_size_for_query) - - - - -## max_thread_pool_free_size - - - -如果全局线程池中**空闲**线程的数量大于 [`max_thread_pool_free_size`](/operations/server-configuration-parameters/settings#max_thread_pool_free_size),则 ClickHouse 会释放部分线程占用的资源并减少线程池的大小。必要时可以重新创建线程。 - -**示例** - -```xml -1200 -``` - - -## max_thread_pool_size - - - -ClickHouse 使用全局线程池中的线程来处理查询。如果没有空闲线程可用于处理查询,则会在池中创建一个新线程。`max_thread_pool_size` 限制池中线程的最大数量。 - -**示例** - -```xml -12000 -``` - - -## max_unexpected_parts_loading_thread_pool_size {#max_unexpected_parts_loading_thread_pool_size} - -用于在启动时加载非活动的数据部件集合(unexpected parts)的线程数。 - - - -## max_view_num_to_throw - - - -如果视图数量超过该值,服务器会抛出异常。 - -仅统计以下数据库引擎中的表: - -* Atomic -* Ordinary -* Replicated -* Lazy - -:::note -值为 `0` 表示不作限制。 -::: - -**示例** - -```xml -400 -``` - - -## max_view_num_to_warn - - - -如果附加的视图数量超过指定值,ClickHouse 服务器会向 `system.warnings` 表中添加警告信息。 - -**示例** - -```xml -400 -``` - - -## max_waiting_queries {#max_waiting_queries} - - -对当前处于等待状态的查询总数的限制。 -当所需的表以异步方式加载时(参见 [`async_load_databases`](/operations/server-configuration-parameters/settings#async_load_databases)),等待查询的执行会被阻塞。 - -:::note -在检查由以下设置控制的限制时,处于等待状态的查询不会被计入: - -- [`max_concurrent_queries`](/operations/server-configuration-parameters/settings#max_concurrent_queries) -- [`max_concurrent_insert_queries`](/operations/server-configuration-parameters/settings#max_concurrent_insert_queries) -- [`max_concurrent_select_queries`](/operations/server-configuration-parameters/settings#max_concurrent_select_queries) -- [`max_concurrent_queries_for_user`](/operations/settings/settings#max_concurrent_queries_for_user) -- [`max_concurrent_queries_for_all_users`](/operations/settings/settings#max_concurrent_queries_for_all_users) - -这样处理是为了避免在服务器刚启动后就立即触及这些限制。 -::: - -:::note - -值为 `0`(默认)表示无限制。 - -此设置可以在运行时修改,并会立即生效。已在运行中的查询将保持不变。 -::: - - - - -## memory_worker_correct_memory_tracker {#memory_worker_correct_memory_tracker} - - -是否让后台内存工作线程根据 jemalloc、cgroups 等外部来源的信息来校正内部内存跟踪器 - - - - -## memory_worker_period_ms {#memory_worker_period_ms} - - -后台内存工作线程的运行周期,该线程在高内存使用期间修正内存跟踪器的内存使用量并清理未使用的页。如果设置为 0,则默认值将根据内存使用来源确定。 - - - - -## memory_worker_use_cgroup {#memory_worker_use_cgroup} - -基于当前 cgroup 的内存使用信息修正内存跟踪。 - - - -## merge_tree - -用于对 [MergeTree](../../engines/table-engines/mergetree-family/mergetree.md) 表进行细粒度配置。 - -有关更多详细信息,请参阅 MergeTreeSettings.h 头文件。 - -**示例** - -```xml - - 5 - -``` - - -## merge_workload {#merge_workload} - - -用于调节资源在合并任务与其他工作负载之间的使用和共享方式。指定的值会作为所有后台合并的 `workload` 设置值。可以通过 MergeTree 的设置进行覆盖。 - -**另请参阅** -- [工作负载调度](/operations/workload-scheduling.md) - - - - -## merges_mutations_memory_usage_soft_limit - - - -设置执行合并(merge)和变更(mutation)操作时可使用的 RAM 上限。 -如果 ClickHouse 达到该上限,将不会再调度任何新的后台合并或变更操作,但会继续执行已调度的任务。 - -:::note -值为 `0` 表示不限制。 -::: - -**示例** - -```xml -0 -``` - - -## merges_mutations_memory_usage_to_ram_ratio {#merges_mutations_memory_usage_to_ram_ratio} - - -`merges_mutations_memory_usage_soft_limit` 的默认值通过以下公式计算:`memory_amount * merges_mutations_memory_usage_to_ram_ratio`。 - -**另见:** - -- [max_memory_usage](/operations/settings/settings#max_memory_usage) -- [merges_mutations_memory_usage_soft_limit](/operations/server-configuration-parameters/settings#merges_mutations_memory_usage_soft_limit) - - - - -## metric_log - -默认情况下处于禁用状态。 - -**启用** - -要手动启用指标历史记录收集功能 [`system.metric_log`](../../operations/system-tables/metric_log.md),请创建 `/etc/clickhouse-server/config.d/metric_log.xml` 文件,并填入以下内容: - -```xml - - - system - metric_log
- 7500 - 1000 - 1048576 - 8192 - 524288 - false -
-
-``` - -**禁用** - -要禁用 `metric_log` 设置,请创建以下文件 `/etc/clickhouse-server/config.d/disable_metric_log.xml`,内容如下: - -```xml - - - -``` - - - - -## min_os_cpu_wait_time_ratio_to_drop_connection {#min_os_cpu_wait_time_ratio_to_drop_connection} - - -用于在决定是否断开连接时参考的 OS CPU 等待时间(`OSCPUWaitMicroseconds` 指标)与忙碌时间(`OSCPUVirtualTimeMicroseconds` 指标)之间的最小比值。丢弃连接的概率通过在最小比值和最大比值之间进行线性插值计算,在该最小比值时概率为 0。 -更多详情参见[在服务器 CPU 过载时控制行为](/operations/settings/server-overload)。 - - - - -## mlock_executable - -在启动后执行 `mlockall`,以降低首次查询的延迟,并防止在高 IO 负载下 ClickHouse 可执行文件被换出内存。 - -:::note -建议启用此选项,但这会导致启动时间最多增加数秒。 -请注意,如果没有 "CAP_IPC_LOCK" capability,此设置将不起作用。 -::: - -**示例** - -```xml -false -``` - - -## mmap_cache_size {#mmap_cache_size} - - -此设置用于避免频繁的 open/close 调用(由于随之产生的页面错误,这些调用的代价非常高),并允许在多个线程和查询之间复用映射。该设置的值为已映射区域的数量(通常等于已映射文件的数量)。 - -可以在下列系统表中通过对应指标监控已映射文件中的数据量: - -- 在 [`system.metrics`](/operations/system-tables/metrics)、[`system.metric_log`](/operations/system-tables/metric_log) 中的 `MMappedFiles`/`MMappedFileBytes`/`MMapCacheCells` -- 在 [`system.events`](/operations/system-tables/events)、[`system.processes`](/operations/system-tables/processes)、[`system.query_log`](/operations/system-tables/query_log)、[`system.query_thread_log`](/operations/system-tables/query_thread_log)、[`system.query_views_log`](/operations/system-tables/query_views_log) 中的 `CreatedReadBufferMMap`/`CreatedReadBufferMMapFailed`/`MMappedFileCacheHits`/`MMappedFileCacheMisses` - -:::note -已映射文件中的数据量不会直接占用内存,也不会计入查询或服务器的内存使用情况——因为这部分内存可以像操作系统页面缓存一样被丢弃。在 MergeTree 系列表引擎的表中删除旧数据分片时,缓存会自动被清理(文件会被关闭),也可以通过 `SYSTEM DROP MMAP CACHE` 查询手动清理。 - -此设置可以在运行时修改,并会立即生效。 -::: - - - - -## mutation_workload {#mutation_workload} - - -用于控制变更(mutation)与其他工作负载之间的资源使用和共享方式。指定的值会作为所有后台变更任务的 `workload` 设置值使用。可通过 MergeTree 设置进行覆盖。 - -**另请参阅** -- [工作负载调度](/operations/workload-scheduling.md) - - - - -## mysql_port - -用于通过 MySQL 协议与客户端通信的端口。 - -:::note - -* 正整数表示要监听的端口号 -* 留空用于禁用通过 MySQL 协议与客户端的通信。 - ::: - -**示例** - -```xml -9004 -``` - - -## mysql_require_secure_transport {#mysql_require_secure_transport} - -当设置为 true 时,要求通过 [mysql_port](#mysql_port) 与客户端进行安全通信。使用 `--ssl-mode=none` 选项的连接将被拒绝。应与 [OpenSSL](#openssl) 配置配合使用。 - - - -## openSSL {#openssl} - -SSL 客户端/服务器配置。 - -对 SSL 的支持由 `libpoco` 库提供。可用的配置选项详见 [SSLManager.h](https://github.com/ClickHouse-Extras/poco/blob/master/NetSSL_OpenSSL/include/Poco/Net/SSLManager.h)。默认值可在 [SSLManager.cpp](https://github.com/ClickHouse-Extras/poco/blob/master/NetSSL_OpenSSL/src/SSLManager.cpp) 中找到。 - -用于服务器/客户端设置的配置键: - - - -| 选项 | 说明 | 默认值 | -| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ | -| `privateKeyFile` | PEM 证书私钥所在文件的路径。该文件可以同时包含私钥和证书。 | | -| `certificateFile` | PEM 格式的客户端/服务器证书文件路径。如果 `privateKeyFile` 已包含证书,则可以省略本选项。 | | -| `caConfig` | 包含受信任 CA 证书的文件或目录的路径。若指向某个文件,该文件必须为 PEM 格式,并且可以包含多个 CA 证书。若指向某个目录,则该目录中必须为每个 CA 证书提供一个 .pem 文件。文件名将根据 CA 主题名的哈希值进行查找。详细信息请参见 [SSL_CTX_load_verify_locations](https://www.openssl.org/docs/man3.0/man3/SSL_CTX_load_verify_locations.html) 的 man 页面。 | | -| `verificationMode` | 用于检查节点的证书的方法。详情参见 [Context](https://github.com/ClickHouse-Extras/poco/blob/master/NetSSL_OpenSSL/include/Poco/Net/Context.h) 类的说明。可能的取值:`none`、`relaxed`、`strict`、`once`。 | `relaxed` | -| `verificationDepth` | 验证链的最大长度。如果证书链长度超过设定值,则验证失败。 | `9` | -| `loadDefaultCAFile` | 是否使用 OpenSSL 的内置 CA 证书。ClickHouse 假定内置 CA 证书存放在文件 `/etc/ssl/cert.pem`(或目录 `/etc/ssl/certs`)中,或者存放在由环境变量 `SSL_CERT_FILE`(或 `SSL_CERT_DIR`)指定的文件(或目录)中。 | `true` | -| `cipherList` | 受支持的 OpenSSL 加密算法。 | `ALL:!ADH:!LOW:!EXP:!MD5:!3DES:@STRENGTH` | -| `cacheSessions` | 启用或禁用会话缓存功能。必须配合 `sessionIdContext` 使用。允许的取值为:`true`、`false`。 | `false` | -| `sessionIdContext` | 服务器为每个生成的标识符追加的一组唯一随机字符。字符串长度不得超过 `SSL_MAX_SSL_SESSION_ID_LENGTH`。建议始终设置此参数,因为无论是服务器缓存会话还是客户端请求缓存,它都有助于避免问题。 | `$\{application.name\}` | -| `sessionCacheSize` | 服务器缓存的最大会话数。值为 `0` 表示会话数不受限制。 | [1024*20](https://github.com/ClickHouse/boringssl/blob/master/include/openssl/ssl.h#L1978) | -| `sessionTimeout` | 会话在服务器上的缓存时间(以小时为单位)。 | `2` | -| `extendedVerification` | 如果启用该选项,请验证证书的 CN 或 SAN 是否与对端主机名匹配。 | `false` | -| `requireTLSv1` | 是否要求使用 TLSv1 连接。可选值:`true`、`false`。 | `false` | -| `requireTLSv1_1` | 要求使用 TLSv1.1 连接。可接受的值:`true`、`false`。 | `false` | -| `requireTLSv1_2` | 是否要求使用 TLSv1.2 连接。可接受的取值:`true`、`false`。 | `false` | -| `fips` | 启用 OpenSSL FIPS 模式。只有在库所使用的 OpenSSL 版本支持 FIPS 时才受支持。 | `false` | -| `privateKeyPassphraseHandler` | 用于请求访问私钥口令的类(PrivateKeyPassphraseHandler 的子类)。例如:``, `KeyFileHandler`, `test`, ``。 | `KeyConsoleHandler` | -| `invalidCertificateHandler` | 用于验证无效证书的类(CertificateHandler 的子类)。例如:` RejectCertificateHandler `。 | `RejectCertificateHandler` | -| `disableProtocols` | 禁止使用的协议。 | | -| `preferServerCiphers` | 以客户端优先顺序选择的服务器端密码套件。 | `false` | - -**设置示例:** - -```xml - - - - /etc/clickhouse-server/server.crt - /etc/clickhouse-server/server.key - - /etc/clickhouse-server/dhparam.pem - none - true - true - sslv2,sslv3 - true - - - true - true - sslv2,sslv3 - true - - - - RejectCertificateHandler - - - -``` - - -## opentelemetry_span_log - -[`opentelemetry_span_log`](../system-tables/opentelemetry_span_log.md) 系统表的相关设置。 - - - -示例: - -```xml - - - engine MergeTree - partition by toYYYYMM(finish_date) - order by (finish_date, finish_time_us, trace_id) - - system - opentelemetry_span_log
- 7500 - 1048576 - 8192 - 524288 - false -
-``` - - -## os_cpu_busy_time_threshold {#os_cpu_busy_time_threshold} - -操作系统 CPU 忙碌时间(`OSCPUVirtualTimeMicroseconds` 指标,以微秒为单位)的阈值,用于判断 CPU 是否在执行有用工作;如果忙碌时间低于该值,则不会认为 CPU 处于过载状态。 - - - -## os_threads_nice_value_distributed_cache_tcp_handler {#os_threads_nice_value_distributed_cache_tcp_handler} - - -分布式缓存 TCP 处理器线程的 Linux nice 值。值越低,CPU 优先级越高。 - -需要 CAP_SYS_NICE 权限,否则不生效。 - -可选值范围:-20 至 19。 - - - - -## os_threads_nice_value_merge_mutate {#os_threads_nice_value_merge_mutate} - - -用于合并与变更(merge/mutation)线程的 Linux nice 值。数值越低,CPU 优先级越高。 - -需要 CAP_SYS_NICE 权限,否则该设置不会生效。 - -可选取值范围:-20 到 19。 - - - - -## os_threads_nice_value_zookeeper_client_send_receive {#os_threads_nice_value_zookeeper_client_send_receive} - - -ZooKeeper 客户端中发送和接收线程使用的 Linux nice 值。数值越低,CPU 优先级越高。 - -需要 CAP_SYS_NICE 权限,否则此设置不会生效。 - -可选值范围:-20 到 19。 - - - - -## page_cache_free_memory_ratio {#page_cache_free_memory_ratio} - -在内存限制中应为非用户空间页缓存预留的比例。类似于 Linux 的 `min_free_kbytes` 设置。 - - - -## page_cache_history_window_ms {#page_cache_history_window_ms} - -释放的内存在重新被用户空间页缓存使用前所需等待的延迟时间。 - - - -## page_cache_max_size {#page_cache_max_size} - -用户态页面缓存的最大容量。设置为 0 可禁用缓存。如果该值大于 page_cache_min_size,则缓存大小会在此范围内动态调整,在将总内存使用量保持在限制值(max_server_memory_usage[_to_ram_ratio])之下的前提下,尽可能多地利用可用内存。 - - - -## page_cache_min_size {#page_cache_min_size} - -用户态页面缓存的最小大小。 - - - -## page_cache_policy {#page_cache_policy} - -用户空间页缓存策略名称。 - - - -## page_cache_shards {#page_cache_shards} - -将用户态页缓存划分为这么多分片,以减少互斥锁竞争。为实验性功能,不太可能带来性能提升。 - - - -## page_cache_size_ratio {#page_cache_size_ratio} - -用户态页面缓存中受保护队列的大小,占该缓存总大小的比例。 - - - -## part_log - -记录与 [MergeTree](../../engines/table-engines/mergetree-family/mergetree.md) 相关的事件日志,例如添加或合并数据。可以使用该日志来模拟合并算法并比较它们的特性,也可以将合并过程可视化。 - -查询会记录在 [system.part_log](/operations/system-tables/part_log) 表中,而不是单独的文件中。可以通过 `table` 参数(见下文)配置该表的名称。 - - - -**示例** - -```xml - - system - part_log
- toMonday(event_date) - 7500 - 1048576 - 8192 - 524288 - false -
-``` - - -## parts_kill_delay_period {#parts_kill_delay_period} - - -用于彻底删除 SharedMergeTree 数据部分的时间间隔。仅在 ClickHouse Cloud 中可用。 - - - - -## parts_kill_delay_period_random_add {#parts_kill_delay_period_random_add} - - -为 `kill_delay_period` 额外增加一个在 0 到 x 秒之间均匀分布的随机值,以避免在表数量非常多时出现“惊群效应”,从而导致对 ZooKeeper 的拒绝服务(DoS)。仅在 ClickHouse Cloud 中可用。 - - - - -## parts_killer_pool_size {#parts_killer_pool_size} - - -用于清理共享 MergeTree 表中过期数据部分的线程数。仅在 ClickHouse Cloud 中可用。 - - - - -## path - -指向包含数据的目录的路径。 - -:::note -路径末尾必须带有斜杠。 -::: - -**示例** - -```xml -/var/lib/clickhouse/ -``` - - -## postgresql_port - -用于通过 PostgreSQL 协议与客户端通信的端口。 - -:::note - -* 正整数表示要监听的端口号 -* 留空则禁用通过 PostgreSQL 协议与客户端的通信 - ::: - -**示例** - -```xml -9005 -``` - - -## postgresql_require_secure_transport {#postgresql_require_secure_transport} - -如果设置为 true,则要求通过 [postgresql_port](#postgresql_port) 与客户端进行安全通信。使用选项 `sslmode=disable` 的连接将被拒绝。需配合 [OpenSSL](#openssl) 相关设置一起使用。 - - - -## prefetch_threadpool_pool_size {#prefetch_threadpool_pool_size} - -用于远程对象存储预取操作的后台线程池大小 - - - -## prefetch_threadpool_queue_size {#prefetch_threadpool_queue_size} - -预取线程池队列中可加入的最大任务数 - - - -## prefixes_deserialization_thread_pool_thread_pool_queue_size {#prefixes_deserialization_thread_pool_thread_pool_queue_size} - - -可在 prefixes 反序列化线程池中排队执行的最大任务数。 - -:::note -值为 `0` 表示无限制。 -::: - - - - -## prepare_system_log_tables_on_startup {#prepare_system_log_tables_on_startup} - - -如果设置为 true,ClickHouse 会在启动前预先创建所有已配置的 `system.*_log` 表。如果某些启动脚本依赖这些表,此选项会非常有用。 - - - - -## primary_index_cache_policy {#primary_index_cache_policy} - -主键索引缓存策略名称。 - - - -## primary_index_cache_prewarm_ratio {#primary_index_cache_prewarm_ratio} - -预热期间需要填充的标记缓存总大小所占的比例。 - - - -## primary_index_cache_size {#primary_index_cache_size} - -主索引缓存的最大容量(MergeTree 系列表的索引)。 - - - -## primary_index_cache_size_ratio {#primary_index_cache_size_ratio} - -在采用 SLRU 策略时,主键索引缓存中受保护队列的大小与缓存总大小的比例。 - - - -## process_query_plan_packet - - - -此设置允许读取 QueryPlan 数据包。启用 `serialize_query_plan` 时,对于分布式查询会发送该数据包。 -默认禁用,以避免由于查询计划二进制反序列化中的错误可能导致的安全问题。 - -**示例** - -```xml -true -``` - - -## processors_profile_log - -[`processors_profile_log`](../system-tables/processors_profile_log.md) 系统表的设置。 - - - -默认设置如下: - -```xml - - system - processors_profile_log
- toYYYYMM(event_date) - 7500 - 1048576 - 8192 - 524288 - false -
-``` - - -## prometheus - -通过 [Prometheus](https://prometheus.io) 暴露供抓取的指标数据。 - -设置: - -* `endpoint` – Prometheus 服务器用于抓取指标的 HTTP endpoint。以 '/' 开头。 -* `port` – `endpoint` 的端口。 -* `metrics` – 暴露 [system.metrics](/operations/system-tables/metrics) 表中的指标。 -* `events` – 暴露 [system.events](/operations/system-tables/events) 表中的指标。 -* `asynchronous_metrics` – 暴露 [system.asynchronous_metrics](/operations/system-tables/asynchronous_metrics) 表中的当前指标值。 -* `errors` - 暴露自上次服务器重启以来按错误码统计的错误数量。该信息也可以从 [system.errors](/operations/system-tables/errors) 表中获取。 - -**示例** - -```xml - - 0.0.0.0 - 8123 - 9000 - - - /metrics - 9363 - true - true - true - true - - - -``` - -检查(将 `127.0.0.1` 替换为 ClickHouse 服务器的 IP 地址或主机名): - -```bash -curl 127.0.0.1:9363/metrics -``` - - -## proxy - -为 HTTP 和 HTTPS 请求定义代理服务器,目前 S3 存储、S3 表函数和 URL 函数已支持该功能。 - -有三种方式定义代理服务器: - -* 环境变量 -* 代理列表 -* 远程代理解析器 - -也可以通过使用 `no_proxy` 为特定主机绕过代理服务器。 - -**环境变量** - -`http_proxy` 和 `https_proxy` 环境变量允许为给定协议指定 -代理服务器。如果已在系统上进行了设置,应该可以直接生效、无缝使用。 - -如果某个协议只有一个代理服务器,并且该代理服务器不会变化, -这是最简单的方式。 - -**代理列表** - -这种方式允许为某个协议指定一个或多个 -代理服务器。如果定义了多个代理服务器, -ClickHouse 会以轮询(round-robin)的方式使用不同的代理,在服务器之间平衡 -负载。如果某个协议有多个代理服务器,并且代理服务器列表不会变化, -这是最简单的方式。 - -**配置模板** - -```xml - - - http://proxy1 - http://proxy2:3128 - - - http://proxy1:3128 - - -``` - -在下面的选项卡中选择一个父字段以查看其子字段: - - - - | Field | Description | - | --------- | ----------------- | - | `` | 一个或多个 HTTP 代理的列表 | - | `` | 一个或多个 HTTPS 代理的列表 | - - - - | Field | Description | - | ------- | ----------- | - | `` | 代理的 URI | - - - -**远程代理解析器** - -代理服务器可能会动态变化。在这种情况下,您可以定义解析器的端点(endpoint)。ClickHouse 会向该端点发送一个空的 GET 请求,远程解析器应返回代理主机。 -ClickHouse 将使用以下模板来构造代理 URI:`\{proxy_scheme\}://\{proxy_host\}:{proxy_port}` - -**配置模板** - -```xml - - - - http://resolver:8080/hostname - http - 80 - 10 - - - - - - http://resolver:8080/hostname - http - 3128 - 10 - - - - -``` - -在下方选项卡中选择一个父字段以查看其子字段: - - - - | 字段 | 描述 | - | --------- | ---------------------- | - | `` | 一个或多个解析器(resolver)的列表* | - | `` | 一个或多个解析器(resolver)的列表* | - - - - | 字段 | 描述 | - | ------------ | ------------------------- | - | `` | 某个解析器(resolver)的端点及其他详细信息 | - - :::note - 可以定义多个 `` 元素,但对于给定协议,仅第一个 - `` 会被使用。该协议的其他任何 `` - 元素都会被忽略。这意味着(如果需要)负载均衡应由远程解析器来实现。 - ::: - - - - | 字段 | 描述 | - | -------------------- | ----------------------------------------------------------------------------------- | - | `` | 代理解析器的 URI | - | `` | 最终代理 URI 的协议。其值可以是 `http` 或 `https`。 | - | `` | 代理解析器的端口号 | - | `` | 来自解析器的值应由 ClickHouse 缓存的时间(秒)。将该值设置为 `0` 会导致 ClickHouse 在每个 HTTP 或 HTTPS 请求时都联系解析器。 | - - - -**优先级** - -代理设置按以下顺序确定: - - -| 顺序 | 设置 | -|------|--------------------------| -| 1. | 远程代理解析器 | -| 2. | 代理列表 | -| 3. | 环境变量 | - -ClickHouse 会根据请求协议检查优先级最高的解析器类型。如果未定义, -则会检查下一个优先级最高的解析器类型,直到检查环境变量解析器。 -这也意味着可以混合使用多种解析器类型。 - - - -## query_cache - -[查询缓存](../query-cache.md)的配置。 - -可用的设置如下: - -| Setting | 描述 | 默认值 | -| ------------------------- | ----------------------------- | ------------ | -| `max_size_in_bytes` | 缓存的最大字节数。`0` 表示查询缓存被禁用。 | `1073741824` | -| `max_entries` | 缓存中可存储的 `SELECT` 查询结果的最大数量。 | `1024` | -| `max_entry_size_in_bytes` | 可保存到缓存中的 `SELECT` 查询结果的最大字节数。 | `1048576` | -| `max_entry_size_in_rows` | 可保存到缓存中的 `SELECT` 查询结果的最大行数。 | `30000000` | - -:::note - -* 修改后的设置会立即生效。 -* 查询缓存的数据分配在 DRAM 中。如果内存紧张,请务必将 `max_size_in_bytes` 设置为较小的值,或直接禁用查询缓存。 - ::: - -**示例** - -```xml - - 1073741824 - 1024 - 1048576 - 30000000 - -``` - - -## query_condition_cache_policy {#query_condition_cache_policy} - -查询条件缓存策略的名称。 - - - -## query_condition_cache_size {#query_condition_cache_size} - - -查询条件缓存的最大容量。 -:::note -此设置可在运行时修改,并会立即生效。 -::: - - - - -## query_condition_cache_size_ratio {#query_condition_cache_size_ratio} - -在查询条件缓存中(采用 SLRU 策略时),受保护队列大小占缓存总大小的比例。 - - - -## query_log - -用于在启用 [log_queries=1](../../operations/settings/settings.md) 设置时记录接收到的查询。 - -查询会被写入 [system.query_log](/operations/system-tables/query_log) 表,而不是单独的文件。可以通过 `table` 参数(见下文)修改该表的名称。 - - - -如果该表不存在,ClickHouse 会自动创建。如果在升级 ClickHouse 服务器后 query log 的结构发生了变化,具有旧结构的表会被重命名,并自动创建一个新表。 - -**示例** - -```xml - - system - query_log
- Engine = MergeTree PARTITION BY event_date ORDER BY event_time TTL event_date + INTERVAL 30 day - 7500 - 1048576 - 8192 - 524288 - false -
-``` - - -## query_masking_rules - -基于正则表达式的规则,会在将查询以及所有日志消息写入服务器日志、[`system.query_log`](/operations/system-tables/query_log)、[`system.text_log`](/operations/system-tables/text_log)、[`system.processes`](/operations/system-tables/processes) 表,以及发送给客户端的日志之前应用到这些内容上。这样可以防止包含姓名、电子邮件、个人标识符或信用卡号等敏感数据的 SQL 查询泄漏到日志中。 - -**示例** - -```xml - - - 隐藏 SSN - (^|\D)\d{3}-\d{2}-\d{4}($|\D) - 000-00-0000 - - -``` - -**配置字段**: - -| Setting | Description | -| --------- | ------------------------ | -| `name` | 规则名称(可选) | -| `regexp` | RE2 兼容的正则表达式(必需) | -| `replace` | 用于替换敏感数据的字符串(可选,默认为六个星号) | - -掩码规则会应用到整个查询(以防止因格式错误 / 不可解析的查询导致敏感数据泄露)。 - -[`system.events`](/operations/system-tables/events) 表中有计数器 `QueryMaskingRulesMatch`,用于统计查询掩码规则匹配的总次数。 - -对于分布式查询,需要分别为每个服务器进行配置,否则传递到其他节点的子查询将以未掩码形式存储。 - - -## query_metric_log - -默认处于禁用状态。 - -**启用** - -要手动启用 [`system.query_metric_log`](../../operations/system-tables/query_metric_log.md) 的指标历史记录收集功能,请创建 `/etc/clickhouse-server/config.d/query_metric_log.xml` 文件,并写入以下内容: - -```xml - - - system - query_metric_log
- 7500 - 1000 - 1048576 - 8192 - 524288 - false -
-
-``` - -**禁用** - -要禁用 `query_metric_log` 设置,请创建以下文件 `/etc/clickhouse-server/config.d/disable_query_metric_log.xml`,内容如下: - -```xml - - - -``` - - - - -## query_thread_log - -用于在启用 [log_query_threads=1](/operations/settings/settings#log_query_threads) 时记录接收到的查询线程的设置项。 - -查询会被记录到 [system.query_thread_log](/operations/system-tables/query_thread_log) 表中,而不是单独的文件中。您可以通过 `table` 参数更改该表的名称(见下文)。 - - - -如果该表不存在,ClickHouse 会自动创建它。如果在更新 ClickHouse 服务器时查询线程日志的结构发生了变化,则具有旧结构的表会被重命名,并自动创建一个新表。 - -**示例** - -```xml - - system - query_thread_log
- toMonday(event_date) - 7500 - 1048576 - 8192 - 524288 - false -
-``` - - -## query_views_log - -用于记录视图(实时视图、物化视图等)日志的设置,受通过 [log_query_views=1](/operations/settings/settings#log_query_views) 接收到的查询所控制。 - -查询会被记录到 [system.query_views_log](/operations/system-tables/query_views_log) 表中,而不是单独的文件。可以通过 `table` 参数更改该表的名称(见下文)。 - - - -如果该表不存在,ClickHouse 会创建它。如果在更新 ClickHouse 服务器后查询视图日志的结构发生变化,旧结构的表会被重命名,并自动创建一个新表。 - -**示例** - -```xml - - system - query_views_log
- toYYYYMM(event_date) - 7500 - 1048576 - 8192 - 524288 - false -
-``` - - -## remap_executable - -用于使用 huge pages 重新映射可执行机器代码(“text”段)内存的设置。 - -:::note -此功能仍处于高度实验阶段。 -::: - -示例: - -```xml -false -``` - - -## remote_servers - -用于 [Distributed](../../engines/table-engines/special/distributed.md) 表引擎和 `cluster` 表函数的集群配置。 - -**示例** - -```xml - -``` - -有关 `incl` 属性值的信息,请参见“[Configuration files](/operations/configuration-files)”一节。 - -**另请参阅** - -* [skip_unavailable_shards](../../operations/settings/settings.md#skip_unavailable_shards) -* [Cluster Discovery](../../operations/cluster-discovery.md) -* [Replicated database engine](../../engines/database-engines/replicated.md) - - -## remote_url_allow_hosts - -允许在基于 URL 的存储引擎和表函数中使用的主机列表。 - -当使用 `\` XML 标签添加主机时: - -* 必须与 URL 中的写法完全一致,因为在 DNS 解析之前会先检查名称。例如:`clickhouse.com` -* 如果在 URL 中显式指定了端口,则会将 host:port 作为整体进行检查。例如:`clickhouse.com:80` -* 如果主机名未指定端口,则该主机的任意端口都被允许。例如:如果指定了 `clickhouse.com`,则 `clickhouse.com:20`(FTP)、`clickhouse.com:80`(HTTP)、`clickhouse.com:443`(HTTPS)等都被允许。 -* 如果主机以 IP 地址的形式指定,则会按 URL 中的写法进行检查。例如:`[2a02:6b8:a::a]`。 -* 如果存在重定向并且启用了重定向支持,则会检查每一次重定向(Location 字段)。 - -例如: - -```sql - - clickhouse.com - -``` - - -## replica_group_name - -Replicated 数据库的副本组名称。 - -由 Replicated 数据库创建的集群将由同一副本组中的副本组成。 -DDL 查询只会等待同一副本组中的副本。 - -默认为空。 - -**示例** - -```xml -备份 -``` - - -## replicated_fetches_http_connection_timeout {#replicated_fetches_http_connection_timeout} - -用于分片拉取请求的 HTTP 连接超时时间。若未显式设置,则继承默认配置文件中的 `http_connection_timeout` 值。 - - - -## replicated_fetches_http_receive_timeout {#replicated_fetches_http_receive_timeout} - -用于获取数据分片请求的 HTTP 接收超时时间。如果未显式设置,则继承默认 profile 中的 `http_receive_timeout`。 - - - -## replicated_fetches_http_send_timeout {#replicated_fetches_http_send_timeout} - -用于数据分片获取请求的 HTTP 发送超时时间。若未显式设置,则继承默认配置文件中的 `http_send_timeout` 设置。 - - - -## replicated_merge_tree - -针对 [ReplicatedMergeTree](../../engines/table-engines/mergetree-family/mergetree.md) 表的微调设置。此设置具有更高优先级。 - -有关更多信息,请参阅 MergeTreeSettings.h 头文件。 - -**示例** - -```xml - - 5 - -``` - - -## restore_threads {#restore_threads} - -用于执行 RESTORE 请求的最大线程数。 - - - -## s3_credentials_provider_max_cache_size {#s3_credentials_provider_max_cache_size} - -可缓存的 S3 凭证提供程序的最大数量 - - - -## s3_max_redirects {#s3_max_redirects} - -S3 允许的最大重定向跳数。 - - - -## s3_retry_attempts {#s3_retry_attempts} - -用于配置 Aws::Client::RetryStrategy。重试由 Aws::Client 自行完成,0 表示不重试。 - - - -## s3queue_disable_streaming {#s3queue_disable_streaming} - -在 S3Queue 中禁用流式处理,即使表已创建并附加了物化视图 - - - -## s3queue_log - -`s3queue_log` 系统表的相关设置。 - - - -默认设置如下: - -```xml - - system - s3queue_log
- toYYYYMM(event_date) - 7500 -
-``` - - -## send_crash_reports - -用于向 ClickHouse 核心开发团队发送崩溃报告的相关设置。 - -在预生产环境中启用该功能尤为推荐。 - -键: - -| Key | Description | -| --------------------- | ------------------------------------------------------------------------------- | -| `enabled` | 启用此功能的布尔标志,默认为 `true`。设置为 `false` 时将不会发送崩溃报告。 | -| `send_logical_errors` | `LOGICAL_ERROR` 类似于 `assert`,表示 ClickHouse 中的一个缺陷。此布尔标志用于启用发送此类异常报告(默认:`true`)。 | -| `endpoint` | 可以自定义用于发送崩溃报告的端点 URL。 | - -**推荐用法** - -```xml - - true - -``` - - -## series_keeper_path {#series_keeper_path} - - -Keeper 中带有自增编号的路径,由 `generateSerialID` 函数生成。每个序列都会作为该路径下的一个节点。 - - - - -## show_addresses_in_stack_traces {#show_addresses_in_stack_traces} - -设置为 true 时,会在堆栈跟踪中显示地址 - - - -## shutdown_wait_backups_and_restores {#shutdown_wait_backups_and_restores} - -如果设置为 true,ClickHouse 会在关闭前等待正在运行的备份和恢复操作完成。 - - - -## shutdown_wait_unfinished {#shutdown_wait_unfinished} - -等待未完成查询的时间(秒) - - - -## shutdown_wait_unfinished_queries {#shutdown_wait_unfinished_queries} - -如果设置为 true,ClickHouse 在关闭前会等待正在运行的查询完成。 - - - -## skip_binary_checksum_checks {#skip_binary_checksum_checks} - -跳过 ClickHouse 二进制文件校验和完整性检查 - - - -## ssh_server - -主机密钥的公钥部分将在首次连接时写入 SSH 客户端侧的 known_hosts 文件中。 - -主机密钥配置默认处于未启用状态。 -取消注释主机密钥配置,并提供对应 SSH 密钥的路径以启用它们: - -示例: - -```xml - - path_to_the_ssh_key - path_to_the_ssh_key - path_to_the_ssh_key - -``` - - -## startup_mv_delay_ms {#startup_mv_delay_ms} - -用于模拟物化视图创建延迟的调试用参数 - - - -## storage_configuration - -支持为存储配置多块磁盘。 - -存储配置遵循以下结构: - -```xml - - - - - - - - -``` - -### 磁盘配置 - -`disks` 的配置遵循如下所示的结构: - -```xml - - - - /mnt/fast_ssd/clickhouse/ - - - /mnt/hdd1/clickhouse/ - 10485760 - - - /mnt/hdd2/clickhouse/ - 10485760 - - ... - - -``` - -上面的子标签为 `disks` 定义了以下设置: - -| 设置 | 说明 | -| ----------------------- | --------------------------------------------- | -| `` | 磁盘名称,应当唯一。 | -| `path` | 用于存储服务器数据(`data` 和 `shadow` 目录)的路径。应以 `/` 结尾。 | -| `keep_free_space_bytes` | 磁盘上预留空闲空间的大小。 | - -:::note -磁盘的配置顺序无关紧要。 -::: - -### 策略配置 - -上面的子标签为 `policies` 定义了以下设置: - - -| Setting | Description | -|------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `policy_name_N` | 策略名称。策略名称必须唯一。 | -| `volume_name_N` | Volume 的名称。Volume 名称必须唯一。 | -| `disk` | 位于该 Volume 内部的 Disk。 | -| `max_data_part_size_bytes` | 可以存放在该 Volume 中任一 Disk 上的数据分片的最大大小。如果合并后得到的数据分片大小预计会大于 `max_data_part_size_bytes`,该分片将被写入下一个 Volume。基本上,此特性允许你将新的 / 较小的分片存储在热(SSD)Volume 上,并在它们达到较大尺寸时将其移动到冷(HDD)Volume。若策略中只有一个 Volume,请不要使用此选项。 | -| `move_factor` | Volume 上可用空闲空间的占比。当空闲空间少于该占比时,数据将开始转移到下一个 Volume(如果存在)。在转移时,分片按大小从大到小(降序)排序,并选择其总大小足以满足 `move_factor` 条件的分片;如果所有分片的总大小都不足,则会移动所有分片。 | -| `perform_ttl_move_on_insert` | 控制在插入时是否移动 TTL 已过期的数据。默认情况下(启用时),如果插入的数据根据按 TTL 移动规则已经过期,它会立即被移动到该规则中指定的 Volume/Disk。如果目标 Volume/Disk 很慢(例如 S3),这会显著减慢写入速度。如果禁用,则过期数据部分会先写入默认 Volume,然后立即根据过期 TTL 的规则移动到指定的 Volume。 | -| `load_balancing` | Disk 负载均衡策略,`round_robin` 或 `least_used`。 | -| `least_used_ttl_ms` | 设置更新所有 Disk 可用空间的超时时间(毫秒)(`0` - 始终更新,`-1` - 从不更新,默认值为 `60000`)。注意,如果该 Disk 仅由 ClickHouse 使用,且不会在运行时进行文件系统大小调整,你可以使用 `-1`。在其他所有情况下不推荐这样做,因为最终会导致空间分配不正确。 | -| `prefer_not_to_merge` | 禁用在该 Volume 上对数据分片的合并。注意:这可能有害并导致变慢。当启用此设置时(不建议这样做),禁止在该 Volume 上合并数据(这是不好的)。这允许控制 ClickHouse 如何与慢速 Disk 交互。我们建议完全不要使用此设置。 | -| `volume_priority` | 定义填充 Volume 的优先级(顺序)。值越小,优先级越高。参数值必须为自然数,并且在 1 到 N(N 为指定的最大参数值)的范围内连续覆盖,不允许有缺口。 | - -对于 `volume_priority`: -- 如果所有 Volume 都设置了该参数,则按指定顺序确定优先级。 -- 如果只有_部分_ Volume 设置了该参数,则未设置该参数的 Volume 优先级最低;已设置该参数的 Volume 按该参数值确定优先级,其余 Volume 的优先级由它们在配置文件中的描述顺序相互之间决定。 -- 如果_没有_任何 Volume 设置该参数,则它们的顺序由在配置文件中的描述顺序决定。 -- Volume 的优先级可以不相同。 - - - -## storage_connections_soft_limit {#storage_connections_soft_limit} - -超过此限制的连接其存活时间会显著缩短。该限制适用于存储连接。 - - - -## storage_connections_store_limit {#storage_connections_store_limit} - -超过此上限的连接在使用后会被重置。将其设置为 0 可关闭连接缓存。此上限适用于存储连接。 - - - -## storage_connections_warn_limit {#storage_connections_warn_limit} - -如果正在使用的连接数高于此限制,则会在日志中记录警告信息。该限制适用于存储连接。 - - - -## storage_metadata_write_full_object_key {#storage_metadata_write_full_object_key} - -以 VERSION_FULL_OBJECT_KEY 格式写入磁盘元数据文件。该设置默认启用。此设置已弃用。 - - - -## storage_shared_set_join_use_inner_uuid {#storage_shared_set_join_use_inner_uuid} - -启用该设置后,在创建 SharedSet 和 SharedJoin 时会生成内部 UUID。仅适用于 ClickHouse Cloud。 - - - -## table_engines_require_grant {#table_engines_require_grant} - -如果设置为 true,用户在使用特定引擎创建表时需要相应的授权,例如:`GRANT TABLE ENGINE ON TinyLog to user`。 - -:::note -默认情况下,为了向后兼容,使用特定表引擎创建表时会忽略授权要求,不过可以通过将该设置改为 true 来更改此行为。 -::: - - - -## tables_loader_background_pool_size {#tables_loader_background_pool_size} - - -设置在后台线程池中执行异步加载任务的线程数。后台线程池用于在服务器启动后、且当前没有查询等待访问该表时,对表进行异步加载。如果存在大量表,将后台线程池的线程数设置得较小可能更有利,可为并发查询执行预留 CPU 资源。 - -:::note -值为 `0` 表示将使用所有可用的 CPU。 -::: - - - - -## tables_loader_foreground_pool_size {#tables_loader_foreground_pool_size} - - -设置在前台线程池中执行加载任务的线程数。前台线程池用于在服务器开始监听端口之前同步加载表,以及加载需要同步等待完成的表。前台线程池的优先级高于后台线程池。这意味着只要前台线程池中仍有任务在运行,后台线程池中就不会启动新任务。 - -:::note -值为 `0` 表示将使用所有可用的 CPU。 -::: - - - - -## tcp_close_connection_after_queries_num {#tcp_close_connection_after_queries_num} - -在关闭 TCP 连接之前允许的最大查询次数。设置为 0 表示允许无限次查询。 - - - -## tcp_close_connection_after_queries_seconds {#tcp_close_connection_after_queries_seconds} - -TCP 连接在被关闭前的最长存活时间(以秒为单位)。设置为 0 表示连接存活时间不受限制。 - - - -## tcp_port - -用于通过 TCP 协议与客户端通信的端口。 - -**示例** - -```xml -9000 -``` - - -## tcp_port_secure - -用于与客户端进行安全通信的 TCP 端口。与 [OpenSSL](#openssl) 设置配合使用。 - -**默认值** - -```xml -9440 -``` - - -## tcp_ssh_port - -SSH 服务器使用的端口。用户可以通过该端口,使用嵌入式客户端在 PTY 上进行交互式连接并执行查询。 - -示例: - -```xml -9022 -``` - - -## temporary_data_in_cache - -使用此选项时,临时数据将存储在指定磁盘的缓存中。 -在本节中,您需要指定一个类型为 `cache` 的磁盘名称。 -在这种情况下,缓存和临时数据将共享同一存储空间,并且可以通过回收磁盘缓存来为临时数据腾出空间。 - -:::note -配置临时数据存储时,只能选择下列选项之一:`tmp_path`、`tmp_policy`、`temporary_data_in_cache`。 -::: - -**示例** - -`local_disk` 的缓存和临时数据都将存储在文件系统上的 `/tiny_local_cache` 中,由 `tiny_local_cache` 进行管理。 - -```xml - - - - -local -/local_disk/ - - - - -cache -local_disk -/tiny_local_cache/ -10M -1M -1 - - - - - - -tiny_local_cache - - -``` - - -## temporary_data_in_distributed_cache {#temporary_data_in_distributed_cache} - -是否将临时数据存储在分布式缓存中。 - - - -## text_index_dictionary_block_cache_max_entries {#text_index_dictionary_block_cache_max_entries} - -文本索引字典块缓存的大小(按条目数量计)。设置为零表示禁用。 - - - -## text_index_dictionary_block_cache_policy {#text_index_dictionary_block_cache_policy} - -文本索引的字典块缓存策略名称。 - - - -## text_index_dictionary_block_cache_size {#text_index_dictionary_block_cache_size} - -文本索引字典块缓存的大小。将其设置为 0 表示禁用缓存。 - -:::note -此设置可以在运行时修改,并会立即生效。 -::: - - - -## text_index_dictionary_block_cache_size_ratio {#text_index_dictionary_block_cache_size_ratio} - -在文本索引字典块缓存中,受保护队列的大小(在使用 SLRU 策略时)相对于整个缓存大小的比例。 - - - -## text_index_header_cache_max_entries {#text_index_header_cache_max_entries} - -文本索引头缓存的容量(按条目数计)。0 表示禁用。 - - - -## text_index_header_cache_policy {#text_index_header_cache_policy} - -文本索引头部缓存策略名称。 - - - -## text_index_header_cache_size {#text_index_header_cache_size} - -文本索引头部缓存的大小。0 表示禁用。 - -:::note -此设置可在运行时修改,并会立即生效。 -::: - - - -## text_index_header_cache_size_ratio {#text_index_header_cache_size_ratio} - -在使用 SLRU 策略时,文本索引头部缓存中受保护队列大小与整个缓存总大小的比例。 - - - -## text_index_postings_cache_max_entries {#text_index_postings_cache_max_entries} - -文本索引倒排列表缓存的大小(按条目数量计)。设置为 0 表示禁用该缓存。 - - - -## text_index_postings_cache_policy {#text_index_postings_cache_policy} - -文本索引倒排列表缓存策略的名称。 - - - -## text_index_postings_cache_size {#text_index_postings_cache_size} - -文本索引倒排列表缓存的大小。0 表示禁用。 - -:::note -此设置可在运行时修改,并会立即生效。 -::: - - - -## text_index_postings_cache_size_ratio {#text_index_postings_cache_size_ratio} - -文本索引倒排列表缓存中受保护队列(在使用 SLRU 策略时)的大小,相对于该缓存总大小的比例。 - - - -## text_log - -用于记录文本消息的 [text_log](/operations/system-tables/text_log) 系统表的相关设置。 - - - -此外: - -| Setting | Description | Default Value | -| ------- | -------------------------- | ------------- | -| `level` | 表中将存储的最大消息级别(默认为 `Trace`)。 | `Trace` | - -**示例** - -```xml - - - notice - system - text_log
- 7500 - 1048576 - 8192 - 524288 - false - - Engine = MergeTree PARTITION BY event_date ORDER BY event_time TTL event_date + INTERVAL 30 day -
-
-``` - - -## thread_pool_queue_size - - - -可调度到全局线程池中的任务数量上限。增大队列大小会增加内存占用。建议将该值设置为与 [`max_thread_pool_size`](/operations/server-configuration-parameters/settings#max_thread_pool_size) 相同。 - -:::note -值为 `0` 表示不限制。 -::: - -**示例** - -```xml -12000 -``` - - -## threadpool_local_fs_reader_pool_size {#threadpool_local_fs_reader_pool_size} - -当 `local_filesystem_read_method = 'pread_threadpool'` 时,用于从本地文件系统读取数据的线程池中的线程数。 - - - -## threadpool_local_fs_reader_queue_size {#threadpool_local_fs_reader_queue_size} - -用于从本地文件系统读取数据的线程池中可调度的最大任务数量。 - - - -## threadpool_remote_fs_reader_pool_size {#threadpool_remote_fs_reader_pool_size} - -当 `remote_filesystem_read_method = 'threadpool'` 时,用于从远程文件系统读取数据的线程池中的线程数量。 - - - -## threadpool_remote_fs_reader_queue_size {#threadpool_remote_fs_reader_queue_size} - -用于从远程文件系统读取数据的线程池中可调度的最大任务数。 - - - -## threadpool_writer_pool_size {#threadpool_writer_pool_size} - -用于处理对象存储写入请求的后台线程池大小 - - - -## threadpool_writer_queue_size {#threadpool_writer_queue_size} - -针对写入对象存储的请求,可推送到后台线程池中的最大任务数 - - - -## throw_on_unknown_workload - - - -定义在使用查询设置 'workload' 访问未知 WORKLOAD 时的行为。 - -* 如果为 `true`,则对尝试访问未知 WORKLOAD 的查询抛出 RESOURCE_ACCESS_DENIED 异常。在建立好 WORKLOAD 层级并已包含默认 WORKLOAD 之后,这有助于对所有查询强制执行资源调度。 -* 如果为 `false`(默认),则对其 'workload' 设置指向未知 WORKLOAD 的查询,在不进行资源调度的情况下提供无限制访问。这在设置 WORKLOAD 层级且尚未添加默认 WORKLOAD 时很重要。 - -**示例** - -```xml -true -``` - -**另请参阅** - -* [工作负载调度](/operations/workload-scheduling.md) - - -## timezone - -服务器的时区。 - -使用表示 UTC 时区或地理位置的 IANA 标识符进行指定(例如:Africa/Abidjan)。 - -在将 DateTime 字段以文本格式输出(打印到屏幕或写入文件)以及从字符串解析为 DateTime 时,时区是 String 与 DateTime 格式转换所必需的。此外,对于处理时间和日期的函数,如果其输入参数中未显式指定时区,也会使用此处配置的时区。 - -**示例** - -```xml -Asia/Istanbul -``` - -**另请参阅** - -* [session_timezone](../settings/settings.md#session_timezone) - - -## tmp_path - -本地文件系统中用于存储处理大查询时临时数据的路径。 - -:::note - -* 配置临时数据存储时只能使用以下选项之一:`tmp_path`、`tmp_policy`、`temporary_data_in_cache`。 -* 路径末尾必须带有斜杠。 - ::: - -**示例** - -```xml -/var/lib/clickhouse/tmp/ -``` - - -## tmp_policy - -用于存储临时数据的策略。所有带有 `tmp` 前缀的文件会在启动时被删除。 - -:::note -将对象存储用作 `tmp_policy` 时的建议如下: - -* 在每台服务器上使用单独的 `bucket:path` -* 使用 `metadata_type=plain` -* 也可以为该 bucket 设置 TTL - ::: - -:::note - -* 只能从以下选项中选择一个用于配置临时数据存储:`tmp_path`、`tmp_policy`、`temporary_data_in_cache`。 -* `move_factor`、`keep_free_space_bytes`、`max_data_part_size_bytes` 将被忽略。 -* 策略必须且只能包含 *一个卷(volume)* - -更多信息请参阅 [MergeTree Table Engine](/engines/table-engines/mergetree-family/mergetree) 文档。 -::: - -**示例** - -当 `/disk1` 已满时,临时数据将存储在 `/disk2` 上。 - -```xml - - - - -/disk1/ - - -/disk2/ - - - - - - - -
-disk1 -disk2 -
-
-
- -
-
- - -tmp_two_disks - -
-``` - - -## top_level_domains_list - -定义一个自定义顶级域名列表,其中每个条目的格式为 `/path/to/file`。 - -例如: - -```xml - - /path/to/public_suffix_list.dat - -``` - -另请参阅: - -* 函数 [`cutToFirstSignificantSubdomainCustom`](../../sql-reference/functions/url-functions.md/#cutToFirstSignificantSubdomainCustom) 及其变体, - 其接受一个自定义的 TLD 列表名称作为参数,并返回域名中包含顶级子域名直至第一个重要子域名的部分。 - - -## total_memory_profiler_sample_max_allocation_size {#total_memory_profiler_sample_max_allocation_size} - -以 `total_memory_profiler_sample_probability` 的概率收集大小小于或等于指定值的随机内存分配。0 表示禁用。可能需要将 `max_untracked_memory` 设置为 0,以便该阈值按预期生效。 - - - -## total_memory_profiler_sample_min_allocation_size {#total_memory_profiler_sample_min_allocation_size} - -以概率 `total_memory_profiler_sample_probability` 随机采样大小不小于指定值的内存分配。0 表示禁用。建议将 `max_untracked_memory` 设置为 0,以确保该阈值按预期生效。 - - - -## total_memory_profiler_step {#total_memory_profiler_step} - -每当服务器内存使用量(以字节为单位)超过下一个步长时,内存分析器都会采集当前分配操作的调用栈。零表示禁用内存分析器。将该值设置得低于数兆字节会降低服务器性能。 - - - -## total_memory_tracker_sample_probability {#total_memory_tracker_sample_probability} - - -用于收集随机的内存分配和释放操作,并以指定概率将其写入 [system.trace_log](../../operations/system-tables/trace_log.md) 系统表,其中 `trace_type` 为 `MemorySample`。该概率适用于每一次分配或释放操作,而不考虑分配大小。请注意,只有在未跟踪内存量超过未跟踪内存上限(默认值为 `4` MiB)时才会进行采样。如果降低 [total_memory_profiler_step](/operations/server-configuration-parameters/settings#total_memory_profiler_step),则该上限也会相应降低。可以将 `total_memory_profiler_step` 设置为 `1`,以实现更精细的采样。 - -可能的取值: - -- 正的 double。 -- `0` — 禁用在 `system.trace_log` 系统表中写入随机内存分配和释放记录。 - - - - -## trace_log - -[trace_log](/operations/system-tables/trace_log) 系统表操作的相关参数设置。 - - - -默认的服务器配置文件 `config.xml` 包含以下配置节: - -```xml - - system - trace_log
- toYYYYMM(event_date) - 7500 - 1048576 - 8192 - 524288 - false - false -
-``` - - -## uncompressed_cache_policy {#uncompressed_cache_policy} - -未压缩缓存的策略名称。 - - - -## uncompressed_cache_size {#uncompressed_cache_size} - - -MergeTree 系列表引擎使用的未压缩数据的最大大小(以字节为单位)。 - -服务器使用一个共享的缓存。内存在需要时分配。仅当启用了 `use_uncompressed_cache` 选项时才会使用该缓存。 - -在某些特定情况下,对于非常短的查询,未压缩数据缓存具有优势。 - -:::note -值为 `0` 表示禁用。 - -此设置可以在运行时修改,并会立即生效。 -::: - - - - -## uncompressed_cache_size_ratio {#uncompressed_cache_size_ratio} - -未压缩缓存中受保护队列的大小(在使用 SLRU 策略时),相对于整个缓存总大小的比例。 - - - -## url_scheme_mappers - -用于将缩写或符号形式的 URL 前缀映射为完整 URL 的配置。 - -示例: - -```xml - - - https://{bucket}.s3.amazonaws.com - - - https://storage.googleapis.com/{bucket} - - - https://{bucket}.oss.aliyuncs.com - - -``` - - -## use_minimalistic_part_header_in_zookeeper {#use_minimalistic_part_header_in_zookeeper} - -在 ZooKeeper 中存储数据分片头部(data part headers)的方法。此设置仅适用于 [`MergeTree`](/engines/table-engines/mergetree-family) 系列表引擎。可以通过以下方式进行配置: - -**在 `config.xml` 文件的 [merge_tree](#merge_tree) 部分中进行全局配置** - -ClickHouse 会对该服务器上的所有表使用此设置。您可以在任何时候更改此设置。现有表在设置变更后会随之改变其行为。 - -**针对每个表单独配置** - -在创建表时,指定相应的 [引擎设置](../../engines/table-engines/mergetree-family/mergetree.md#table_engine-mergetree-creating-a-table)。已经存在且在创建时指定了该设置的表,其行为不会因为全局设置的变化而改变。 - -**可选值** - -- `0` — 关闭该功能。 -- `1` — 开启该功能。 - -如果 [`use_minimalistic_part_header_in_zookeeper = 1`](#use_minimalistic_part_header_in_zookeeper),则[复制表](../../engines/table-engines/mergetree-family/replication.md)会使用单个 `znode` 以紧凑形式存储数据分片头部。如果表包含大量列,这种存储方式可以显著减少存储在 ZooKeeper 中的数据量。 - -:::note -在应用 `use_minimalistic_part_header_in_zookeeper = 1` 之后,您无法将 ClickHouse 服务器降级到不支持该设置的版本。在对集群中的服务器升级 ClickHouse 时要格外小心。不要一次性升级所有服务器。更安全的做法是在测试环境或集群中的少量服务器上先测试新的 ClickHouse 版本。 - -已经按此设置存储的数据分片头部无法恢复为之前的(非紧凑)表示形式。 -::: - - - -## user_defined_executable_functions_config - -用于可执行用户自定义函数的配置文件的路径。 - -路径: - -* 指定绝对路径,或相对于服务器配置文件的相对路径。 -* 路径中可以包含通配符 * 和 ?。 - -另请参阅: - -* "[可执行用户自定义函数](/sql-reference/functions/udf#executable-user-defined-functions)."。 - -**示例** - -```xml -*_function.xml -``` - - -## user_defined_path - -存放用户自定义文件的目录。用于 SQL 用户自定义函数([SQL User Defined Functions](/sql-reference/functions/udf))。 - -**示例** - -```xml -/var/lib/clickhouse/user_defined/ -``` - - -## user_directories - -配置文件中包含以下设置的部分: - -* 预定义用户配置文件的路径。 -* 通过 SQL 命令创建的用户所存储的文件夹路径。 -* 通过 SQL 命令创建并进行复制的用户在 ZooKeeper 中的节点路径。 - -如果指定了该部分,则不会使用 [users_config](/operations/server-configuration-parameters/settings#users_config) 和 [access_control_path](../../operations/server-configuration-parameters/settings.md#access_control_path) 中的路径。 - -`user_directories` 部分可以包含任意数量的条目,条目的顺序表示它们的优先级(条目越靠前,其优先级越高)。 - -**示例** - -```xml - - - /etc/clickhouse-server/users.xml - - - /var/lib/clickhouse/access/ - - -``` - -用户、角色、行策略、配额和配置文件也可以存储在 ZooKeeper 中: - -```xml - - - /etc/clickhouse-server/users.xml - - - /clickhouse/access/ - - -``` - -你也可以定义 `memory` 和 `ldap` 这两个部分:`memory` 表示仅在内存中存储信息,不写入磁盘;`ldap` 表示在 LDAP 服务器上存储信息。 - -要将 LDAP 服务器添加为本地未定义用户的远程用户目录,需要定义一个 `ldap` 部分,并包含以下设置: - -| Setting | Description | -| -------- | --------------------------------------------------------------------------------------------------------------------------- | -| `server` | 在 `ldap_servers` 配置部分中定义的 LDAP 服务器名称之一。此参数是必填项,不能为空。 | -| `roles` | 包含本地定义角色列表的部分,这些角色将被分配给从 LDAP 服务器检索到的每个用户。如果未指定任何角色,用户在完成身份验证后将无法执行任何操作。如果在身份验证时,列出的任一角色在本地尚未定义,则此次身份验证尝试将失败,其表现与提供了错误密码相同。 | - -**示例** - -```xml - - my_ldap_server - - - - - -``` - - -## user_files_path - -用户文件所在的目录。用于表函数 [file()](../../sql-reference/table-functions/file.md)、[fileCluster()](../../sql-reference/table-functions/fileCluster.md)。 - -**示例** - -```xml -/var/lib/clickhouse/user_files/ -``` - - -## user_scripts_path - -用户脚本文件所在的目录。供可执行用户自定义函数([Executable User Defined Functions](/sql-reference/functions/udf#executable-user-defined-functions))使用。 - -**示例** - -```xml -/var/lib/clickhouse/user_scripts/ -``` - -类型: - -默认值: - - -## users_config - -包含以下内容的文件的路径: - -* 用户配置。 -* 访问权限。 -* 设置配置文件。 -* 配额设置。 - -**示例** - -```xml -users.xml -``` - - -## validate_tcp_client_information - -确定在接收查询数据包时是否启用客户端信息验证。 - -默认情况下为 `false`: - -```xml -false -``` - - -## vector_similarity_index_cache_max_entries {#vector_similarity_index_cache_max_entries} - -向量相似度索引的缓存大小(按条目数计)。设置为 0 表示禁用。 - - - -## vector_similarity_index_cache_policy {#vector_similarity_index_cache_policy} - -向量相似索引缓存策略名称。 - - - -## vector_similarity_index_cache_size {#vector_similarity_index_cache_size} - -向量相似度索引缓存大小。设置为 0 表示禁用。 - -:::note -此设置可以在运行时修改,并会立即生效。 -::: - - - -## vector_similarity_index_cache_size_ratio {#vector_similarity_index_cache_size_ratio} - -向量相似度索引缓存中受保护队列(在采用 SLRU 策略时)的大小,相对于缓存总大小的比例。 - - - -## wait_dictionaries_load_at_startup - - - -该设置用于指定当 `dictionaries_lazy_load` 为 `false` 时的行为。 -(如果 `dictionaries_lazy_load` 为 `true`,则此设置不起任何作用。) - -如果 `wait_dictionaries_load_at_startup` 为 `false`,则服务器会在启动时开始加载所有字典, -并在加载的同时并行接受客户端连接。 -当某个字典第一次在查询中被使用时,如果该字典尚未加载完成,则该查询会一直等待,直到该字典加载完毕。 -将 `wait_dictionaries_load_at_startup` 设为 `false` 可以使 ClickHouse 启动得更快,但某些查询可能会执行得更慢 -(因为它们必须等待某些字典加载完成)。 - -如果 `wait_dictionaries_load_at_startup` 为 `true`,则服务器在启动时会等待所有字典完成加载(无论成功与否)之后, -才会接受任何连接。 - -**示例** - -```xml -true -``` - - -## workload_path - -用于保存所有 `CREATE WORKLOAD` 和 `CREATE RESOURCE` 查询的目录。默认情况下,使用服务器工作目录下的 `/workload/` 文件夹。 - -**示例** - -```xml -/var/lib/clickhouse/workload/ -``` - -**另请参阅** - -* [工作负载层次结构](/operations/workload-scheduling.md#workloads) -* [workload_zookeeper_path](#workload_zookeeper_path) - - -## workload_zookeeper_path - -ZooKeeper 节点的路径,用作所有 `CREATE WORKLOAD` 和 `CREATE RESOURCE` 查询的存储位置。为保证一致性,所有 SQL 定义都作为这个单一 znode 的值进行存储。默认情况下不使用 ZooKeeper,定义会存储在[磁盘](#workload_path)上。 - -**示例** - -```xml -/clickhouse/workload/definitions.sql -``` - -**另请参阅** - -* [工作负载层次结构](/operations/workload-scheduling.md#workloads) -* [workload_path](#workload_path) - - -## zookeeper - -包含允许 ClickHouse 与 [ZooKeeper](http://zookeeper.apache.org/) 集群交互的设置。ClickHouse 在使用复制表时,会使用 ZooKeeper 来存储副本的元数据。如果不使用复制表,则可以省略本节参数。 - -以下设置可以通过子标签进行配置: - -| Setting | Description | -| ------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------- | -| `node` | ZooKeeper 端点。可以设置多个端点。例如:`example_host2181`。`index` 属性指定在尝试连接 ZooKeeper 集群时节点的顺序。 | -| `session_timeout_ms` | 客户端会话的最大超时时间,单位为毫秒。 | -| `operation_timeout_ms` | 单次操作的最大超时时间,单位为毫秒。 | -| `root` (optional) | ClickHouse 服务器用于其 znodes 的根 znode。 | -| `fallback_session_lifetime.min` (optional) | 当主节点不可用(负载均衡)时,到备用节点的 ZooKeeper 会话生命周期的最小限制。单位为秒。默认值:3 小时。 | -| `fallback_session_lifetime.max` (optional) | 当主节点不可用(负载均衡)时,到备用节点的 ZooKeeper 会话生命周期的最大限制。单位为秒。默认值:6 小时。 | -| `identity` (optional) | ZooKeeper 访问所请求 znodes 时需要的用户和密码。 | -| `use_compression` (optional) | 若设置为 true,则在 Keeper 协议中启用压缩。 | - -还可以使用 `zookeeper_load_balancing` 设置(可选)来选择 ZooKeeper 节点选择算法: - -| Algorithm Name | Description | -| ------------------------------- | -------------------------------------------------- | -| `random` | 随机选择一个 ZooKeeper 节点。 | -| `in_order` | 选择第一个 ZooKeeper 节点,如果其不可用则选择第二个,以此类推。 | -| `nearest_hostname` | 选择主机名与服务器主机名最相似的 ZooKeeper 节点,主机名按名称前缀进行比较。 | -| `hostname_levenshtein_distance` | 与 `nearest_hostname` 类似,但使用 Levenshtein 距离方式比较主机名。 | -| `first_or_random` | 选择第一个 ZooKeeper 节点,如果其不可用则从剩余 ZooKeeper 节点中随机选择一个。 | -| `round_robin` | 选择第一个 ZooKeeper 节点,如果发生重连则选择下一个。 | - -**配置示例** - -```xml - - - example1 - 2181 - - - example2 - 2181 - - 30000 - 10000 - - /path/to/zookeeper/node - - user:password - - random - -``` - -**另请参阅** - -* [复制](../../engines/table-engines/mergetree-family/replication.md) -* [ZooKeeper 程序员指南](http://zookeeper.apache.org/doc/current/zookeeperProgrammers.html) -* [ClickHouse 与 ZooKeeper 之间的可选安全通信](/operations/ssl-zookeeper) - - -## zookeeper_log - -[`zookeeper_log`](/operations/system-tables/zookeeper_log) 系统表的设置。 - -以下设置可以通过子标签进行配置: - - - -**示例** - -```xml - - - system - zookeeper_log
- 7500 - event_date + INTERVAL 1 WEEK DELETE -
-
-``` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/settings/index.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/settings/index.md index 34cdd7972eb..c50b80d2914 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/settings/index.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/settings/index.md @@ -1,35 +1,17 @@ --- -description: '“设置”目录页' +description: "设置目录页" sidebar_position: 1 slug: /operations/settings/ -title: '设置' -doc_type: 'landing-page' +title: "设置" +doc_type: "landing-page" --- -{/* 本页的目录由下述脚本自动生成: - https://github.com/ClickHouse/clickhouse-docs/blob/main/scripts/autogenerate-table-of-contents.sh - 数据来源为 YAML front matter 中的字段:slug、description、title。 + -{/*AUTOGENERATED_START*/ } - -| Page | Description | -| ------------------------------------------------------------------------- | ------------------------------------------------------------------ | -| [Settings Overview](/operations/settings/overview) | 设置概览页面。 | -| [Permissions for queries](/operations/settings/permissions-for-queries) | 查询权限相关的设置。 | -| [Restrictions on query complexity](/operations/settings/query-complexity) | 限制查询复杂度的设置。 | -| [Settings profiles](/operations/settings/settings-profiles) | 在同一名称下分组的一组设置。 | -| [Constraints on settings](/operations/settings/constraints-on-settings) | 可以在 `user.xml` 配置文件的 `profiles` 部分中定义设置约束,用于禁止用户使用 `SET` 查询更改某些设置。 | -| [Users and roles settings](/operations/settings/settings-users) | 用于配置用户和角色的设置。 | -| [Composable protocols](/operations/settings/composable-protocols) | Composable protocols 功能允许更灵活地配置对 ClickHouse 服务器的 TCP 访问。 | -| [Format Settings](/operations/settings/formats) | 控制输入和输出格式的设置。 | -| [Memory overcommit](/operations/settings/memory-overcommit) | 一种实验性技术,旨在为查询设置更灵活的内存限制。 | -| [MergeTree tables settings](/operations/settings/merge-tree-settings) | 关于 MergeTree 的设置,这些设置位于 `system.merge_tree_settings` 中。 | -| [Query-level Session Settings](/operations/settings/query-level) | 查询级别的会话设置。 | -| [Server overload](/operations/settings/server-overload) | 控制服务器 CPU 过载时行为的设置。 | -| [Session Settings](/operations/settings/settings) | 位于 `system.settings` 表中的会话设置。 | -| [TCP connection limits](/operations/settings/tcp-connection-limits) | TCP 连接数限制。 | - -{/*AUTOGENERATED_END*/ } + + diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/settings/merge-tree-settings.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/settings/merge-tree-settings.md index f18790c5422..984993aa64e 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/settings/merge-tree-settings.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/settings/merge-tree-settings.md @@ -1,5 +1,5 @@ --- -description: '`system.merge_tree_settings` 中的 MergeTree 设置' +description: '用于 MergeTree 的设置,位于 `system.merge_tree_settings` 中' slug: /operations/settings/merge-tree-settings title: 'MergeTree 表的设置' doc_type: 'reference' @@ -12,11 +12,11 @@ import VersionHistory from '@theme/VersionHistory/VersionHistory'; 系统表 `system.merge_tree_settings` 显示全局生效的 MergeTree 设置。 -MergeTree 设置可以在服务器配置文件的 `merge_tree` 部分中进行配置,或者在 `CREATE TABLE` 语句的 `SETTINGS` 子句中为每个 `MergeTree` 表单独指定。 +MergeTree 设置可以在服务器配置文件的 `merge_tree` 部分中进行全局配置,或者在 `CREATE TABLE` 语句的 `SETTINGS` 子句中为每个 `MergeTree` 表单独指定。 自定义设置 `max_suspicious_broken_parts` 的示例: -在服务器配置文件中为所有 `MergeTree` 表配置该设置的默认值: +在服务器配置文件中为所有 `MergeTree` 表配置默认值: ```text @@ -24,7 +24,7 @@ MergeTree 设置可以在服务器配置文件的 `merge_tree` 部分中进行 ``` -针对特定表进行设置: +为特定表设置: ```sql CREATE TABLE tab @@ -36,7 +36,7 @@ ORDER BY tuple() SETTINGS max_suspicious_broken_parts = 500; ``` -通过 `ALTER TABLE ... MODIFY SETTING` 更改某个表的设置: +使用 `ALTER TABLE ... MODIFY SETTING` 命令更改某个表的设置: ```sql ALTER TABLE tab MODIFY SETTING max_suspicious_broken_parts = 100; @@ -48,3023 +48,6 @@ ALTER TABLE tab RESET SETTING max_suspicious_broken_parts; ## MergeTree 设置 -{/* 下列设置由位于 +{/* 以下设置由以下脚本自动生成: https://github.com/ClickHouse/clickhouse-docs/blob/main/scripts/settings/autogenerate-settings.sh - 的脚本自动生成。 */ } - -## adaptive_write_buffer_initial_size - - - -自适应写入缓冲区的初始大小 - - -## add_implicit_sign_column_constraint_for_collapsing_engine {#add_implicit_sign_column_constraint_for_collapsing_engine} - - -如果设置为 true,则为 CollapsingMergeTree 或 VersionedCollapsingMergeTree 表的 `sign` 列添加一个隐式约束,只允许有效值(`1` 和 `-1`)。 - - - -## add_minmax_index_for_numeric_columns {#add_minmax_index_for_numeric_columns} - - - - -启用后,将为表中所有数值列添加最小-最大(跳过)索引。 - - - -## add_minmax_index_for_string_columns {#add_minmax_index_for_string_columns} - - - - -启用后,会为表中所有字符串列添加最小-最大(跳过)索引。 - - - -## allow_coalescing_columns_in_partition_or_order_key {#allow_coalescing_columns_in_partition_or_order_key} - - - - -启用后,允许在 CoalescingMergeTree 表中将合并列用作分区键或排序键。 - - - -## allow_experimental_replacing_merge_with_cleanup {#allow_experimental_replacing_merge_with_cleanup} - - - - -允许针对带有 `is_deleted` 列的 ReplacingMergeTree 执行实验性的 CLEANUP 合并。启用后,可以使用 `OPTIMIZE ... FINAL CLEANUP` 手动 -将一个分区中的所有数据片段(part)合并为单个数据片段,并移除所有 -已标记为删除的行。 - -还允许通过设置 `min_age_to_force_merge_seconds`、 -`min_age_to_force_merge_on_partition_only` 和 -`enable_replacing_merge_with_cleanup_for_min_age_to_force_merge` -使此类合并在后台自动执行。 - - - -## allow_experimental_reverse_key - - - - - - - -启用在 MergeTree 排序键中使用降序排序的功能。此设置对于时间序列分析和 Top-N 查询特别有用,允许以时间倒序方式存储数据,从而优化查询性能。 - -在启用 `allow_experimental_reverse_key` 之后,可以在 MergeTree 表的 `ORDER BY` 子句中定义降序排序。这样可以在降序排序的查询中使用更高效的 `ReadInOrder` 优化,而不是 `ReadInReverseOrder`。 - -**示例** - -```sql -CREATE TABLE example -( -time DateTime, -key Int32, -value String -) ENGINE = MergeTree -ORDER BY (time DESC, key) -- time 字段按降序排列 -SETTINGS allow_experimental_reverse_key = 1; - -SELECT * FROM example WHERE key = 'xxx' ORDER BY time DESC LIMIT 10; -``` - -在查询中使用 `ORDER BY time DESC` 时,会应用 `ReadInOrder`。 - -**默认值:** false - - -## allow_floating_point_partition_key {#allow_floating_point_partition_key} - - -启用将浮点数用作分区键的功能。 - -可能的取值: -- `0` — 不允许使用浮点型分区键。 -- `1` — 允许使用浮点型分区键。 - - - -## allow_nullable_key {#allow_nullable_key} - - -允许将 Nullable 类型用作主键。 - - - -## allow_part_offset_column_in_projections {#allow_part_offset_column_in_projections} - - - - -允许在 projections 的 SELECT 查询中使用 `_part_offset` 列。 - - - -## allow_reduce_blocking_parts_task {#allow_reduce_blocking_parts_task} - - - - -用于减少共享 MergeTree 表中阻塞分片的后台任务。 -仅在 ClickHouse Cloud 中可用 - - - -## allow_remote_fs_zero_copy_replication {#allow_remote_fs_zero_copy_replication} - - - - -请勿在生产环境中使用此设置,因为它尚未准备好。 - - - -## allow_summing_columns_in_partition_or_order_key {#allow_summing_columns_in_partition_or_order_key} - - - - -启用后,允许在 SummingMergeTree 表中将参与汇总的列用作分区键或排序键。 - - - -## allow_suspicious_indices {#allow_suspicious_indices} - - -不允许主/次级索引和排序键使用相同的表达式 - - - -## allow_vertical_merges_from_compact_to_wide_parts {#allow_vertical_merges_from_compact_to_wide_parts} - - -允许从 compact 部分到 wide 部分进行纵向合并。该设置在所有副本上必须保持一致。 - - - -## alter_column_secondary_index_mode {#alter_column_secondary_index_mode} - - - - -配置是否允许对由二级索引覆盖的列执行 `ALTER` 命令,以及在允许时应采取的操作。默认情况下,允许此类 `ALTER` 命令,并会重建索引。 - -可能的取值: -- `rebuild`(默认):对 `ALTER` 命令中涉及的列所影响的所有二级索引进行重建。 -- `throw`:通过抛出异常阻止对由二级索引覆盖的列执行任何 `ALTER`。 -- `drop`:删除依赖的二级索引。新生成的数据分片将不包含这些索引,需要通过 `MATERIALIZE INDEX` 重新创建。 -- `compatibility`:与原始行为一致:对 `ALTER ... MODIFY COLUMN` 使用 `throw`,对 `ALTER ... UPDATE/DELETE` 使用 `rebuild`。 -- `ignore`:仅供专家使用。会使索引处于不一致状态,可能导致查询结果不正确。 - - - -## always_fetch_merged_part {#always_fetch_merged_part} - - -如果为 true,则该副本自身从不合并数据部分,而是始终从其他副本下载已合并的数据部分。 - -可能的取值: -- true, false - - - -## always_use_copy_instead_of_hardlinks {#always_use_copy_instead_of_hardlinks} - - -在执行变更/替换/分离等操作时,总是复制数据而不是创建硬链接。 - - - -## apply_patches_on_merge {#apply_patches_on_merge} - - - - -如果为 true,则在合并过程中应用补丁部分 - - - -## assign_part_uuids {#assign_part_uuids} - - -启用后,系统会为每个新建的 part 分配一个唯一的标识符。 -启用前,请确认所有副本均支持 UUID 第 4 版。 - - - -## async_block_ids_cache_update_wait_ms {#async_block_ids_cache_update_wait_ms} - - -每次插入迭代在等待 async_block_ids_cache 更新时的最长等待时间 - - - -## async_insert {#async_insert} - - -如果为 true,来自 INSERT 查询的数据会先存储在队列中,之后在后台刷新到表中。 - - - -## auto_statistics_types {#auto_statistics_types} - - - - -以逗号分隔的统计类型列表,会在所有适用的列上自动计算。 -支持的统计类型:tdigest、countmin、minmax、uniq。 - - - -## background_task_preferred_step_execution_time_ms {#background_task_preferred_step_execution_time_ms} - - -合并或变更操作中单个步骤的目标执行时间。如果某个步骤耗时更长,则可能超过该目标值。 - - - -## cache_populated_by_fetch {#cache_populated_by_fetch} - - -:::note -此设置仅适用于 ClickHouse Cloud。 -::: - -当 `cache_populated_by_fetch` 被禁用(默认设置)时,只有在执行需要这些 part 的查询时,新的数据 part 才会被加载到缓存中。 - -启用后,`cache_populated_by_fetch` 会使所有节点在出现新的数据 part 时,直接从存储将其加载到本地缓存中,而无需通过查询来触发此操作。 - -**另请参阅** - -- [ignore_cold_parts_seconds](/operations/settings/settings#ignore_cold_parts_seconds) -- [prefer_warmed_unmerged_parts_seconds](/operations/settings/settings#prefer_warmed_unmerged_parts_seconds) -- [cache_warmer_threads](/operations/settings/settings#cache_warmer_threads) - - - -## cache_populated_by_fetch_filename_regexp {#cache_populated_by_fetch_filename_regexp} - - - - -:::note -此设置仅适用于 ClickHouse Cloud。 -::: - -如果该值不为空,则在获取之后(且启用了 `cache_populated_by_fetch` 的情况下),只有与此正则表达式匹配的文件才会被预加载到缓存中。 - - - -## check_delay_period {#check_delay_period} - -已弃用的设置,不产生任何效果。 -## check_sample_column_is_correct {#check_sample_column_is_correct} - - -在创建表时启用检查,用于验证采样列或采样表达式对应列的数据类型是否正确。数据类型必须是无符号的[整数类型](/sql-reference/data-types/int-uint):`UInt8`、`UInt16`、`UInt32`、`UInt64`。 - -可能的取值: -- `true` — 启用该检查。 -- `false` — 在创建表时禁用该检查。 - -默认值:`true`。 - -默认情况下,ClickHouse 服务器会在创建表时检查用于采样或采样表达式的列的数据类型。如果已经存在包含不正确采样表达式的表,并且不希望服务器在启动时抛出异常,请将 `check_sample_column_is_correct` 设置为 `false`。 - - - -## clean_deleted_rows {#clean_deleted_rows} - -已废弃的设置,不会产生任何效果。 -## cleanup_delay_period {#cleanup_delay_period} - - -清理旧队列日志、数据块哈希和数据分片的最小时间间隔。 - - - -## cleanup_delay_period_random_add {#cleanup_delay_period_random_add} - - -向 `cleanup_delay_period` 添加一个在 0 到 x 秒之间均匀分布的随机值, -以避免在表数量非常多的情况下出现惊群效应,以及因此对 ZooKeeper 造成拒绝服务(DoS)。 - - - -## cleanup_thread_preferred_points_per_iteration {#cleanup_thread_preferred_points_per_iteration} - - -后台清理的推荐批大小(point 是抽象单位,但 1 个 point 大致相当于 1 个插入块)。 - - - -## cleanup_threads {#cleanup_threads} - -已废弃的配置项,不执行任何操作。 -## columns_and_secondary_indices_sizes_lazy_calculation {#columns_and_secondary_indices_sizes_lazy_calculation} - - - - -在首次请求时再延迟计算列和二级索引的大小,而不是在表初始化时计算。 - - - -## columns_to_prewarm_mark_cache {#columns_to_prewarm_mark_cache} - - -需要预热到标记缓存中的列列表(在启用时生效)。留空表示所有列 - - - -## compact_parts_max_bytes_to_buffer {#compact_parts_max_bytes_to_buffer} - - -仅在 ClickHouse Cloud 中可用。在 compact parts 中单个 stripe 可写入的最大字节数。 - - - -## compact_parts_max_granules_to_buffer {#compact_parts_max_granules_to_buffer} - - -仅在 ClickHouse Cloud 中可用。在 compact 部分中单个 stripe 内可写入的最大 granule 数量。 - - - -## compact_parts_merge_max_bytes_to_prefetch_part {#compact_parts_merge_max_bytes_to_prefetch_part} - - -仅在 ClickHouse Cloud 中可用。用于在合并期间将紧凑部分整体读入内存的最大部分大小。 - - - -## compatibility_allow_sampling_expression_not_in_primary_key {#compatibility_allow_sampling_expression_not_in_primary_key} - - -允许创建采样表达式未包含在主键中的表。仅在为了向后兼容而需要暂时使用定义不正确的表来运行服务器时才需要启用此项。 - - - -## compress_marks {#compress_marks} - - -标记文件支持压缩,可减小文件大小并加速网络传输。 - - - -## compress_primary_key {#compress_primary_key} - - -主键支持压缩,以减少主键文件大小并加快网络传输。 - - - -## concurrent_part_removal_threshold {#concurrent_part_removal_threshold} - - -仅当非活动数据部件的数量至少达到该值时,才启用并发部件删除(参见 `max_part_removal_threads`)。 - - - -## deduplicate_merge_projection_mode {#deduplicate_merge_projection_mode} - - - - -是否允许为非经典 MergeTree(即不是 (Replicated, Shared) MergeTree)的表创建 projection。`ignore` 选项仅用于兼容性,可能会导致错误的查询结果。否则,在允许的情况下,需要指定在合并 projection 时的行为,是丢弃还是重建。因此,经典 MergeTree 会忽略此设置。它同样也控制 `OPTIMIZE DEDUPLICATE`,并对所有 MergeTree 系列表引擎生效。与 `lightweight_mutation_projection_mode` 选项类似,该设置为 part 级别。 - -可能的取值: -- `ignore` -- `throw` -- `drop` -- `rebuild` - - - -## default_compression_codec {#default_compression_codec} - - - - -指定当在表定义中未为某个列设置压缩编解码器时要使用的默认压缩编解码器。 -列的压缩编解码器选择顺序如下: -1. 在表定义中为该列设置的压缩编解码器 -2. 在 `default_compression_codec`(本设置)中指定的压缩编解码器 -3. 在 `compression` 设置中定义的默认压缩编解码器 - -默认值:空字符串(未定义)。 - - - -## detach_not_byte_identical_parts {#detach_not_byte_identical_parts} - - -在某个副本上执行合并或变更操作(mutation)后,如果某个数据分片与其他副本上的数据分片在字节级不完全一致,此设置用于启用或禁用将该数据分片分离(detach)。如果禁用,则该数据分片会被删除。如果你希望之后分析这类分片,请启用此设置。 - -该设置适用于启用了 -[data replication](/engines/table-engines/mergetree-family/replacingmergetree) -的 `MergeTree` 表。 - -可能的取值: - -- `0` — 分片会被删除。 -- `1` — 分片会被分离(detach)。 - - - -## detach_old_local_parts_when_cloning_replica {#detach_old_local_parts_when_cloning_replica} - - -在修复丢失的副本时不要分离旧的本地分片。 - -可能的取值: -- `true` -- `false` - - - -## disable_detach_partition_for_zero_copy_replication {#disable_detach_partition_for_zero_copy_replication} - - -禁用用于零拷贝复制的 `DETACH PARTITION` 查询。 - - - -## disable_fetch_partition_for_zero_copy_replication {#disable_fetch_partition_for_zero_copy_replication} - - -禁用针对零拷贝复制的 FETCH PARTITION 查询。 - - - -## disable_freeze_partition_for_zero_copy_replication {#disable_freeze_partition_for_zero_copy_replication} - - -禁用零拷贝复制的 FREEZE PARTITION 查询。 - - - -## disk {#disk} - - -存储磁盘名称。可以作为存储策略的替代项进行指定。 - - - -## dynamic_serialization_version {#dynamic_serialization_version} - - - - -Dynamic 数据类型的序列化版本。用于保证兼容性。 - -可选值: -- `v1` -- `v2` -- `v3` - - - -## enable_block_number_column {#enable_block_number_column} - - -启用将每行的 _block_number 列持久化存储。 - - - -## enable_block_offset_column {#enable_block_offset_column} - - -在合并过程中持久化虚拟列 `_block_number`。 - - - -## enable_index_granularity_compression {#enable_index_granularity_compression} - - -在可能的情况下,对索引粒度的值进行内存压缩 - - - -## enable_max_bytes_limit_for_min_age_to_force_merge {#enable_max_bytes_limit_for_min_age_to_force_merge} - - - - -用于控制是否让设置 `min_age_to_force_merge_seconds` 和 -`min_age_to_force_merge_on_partition_only` 遵循设置 -`max_bytes_to_merge_at_max_space_in_pool`。 - -可能的取值: -- `true` -- `false` - - - -## enable_mixed_granularity_parts {#enable_mixed_granularity_parts} - - -启用或禁用向通过 `index_granularity_bytes` 设置控制粒度大小的模式过渡。在 19.11 版本之前,只能使用 `index_granularity` 设置来限制粒度大小。`index_granularity_bytes` 设置在从包含非常大行(数十到数百兆字节)的表中读取数据时,可以提升 ClickHouse 的性能。如果存在包含非常大行的表,可以为这些表启用此设置,以提高 `SELECT` 查询的效率。 - - - -## enable_replacing_merge_with_cleanup_for_min_age_to_force_merge {#enable_replacing_merge_with_cleanup_for_min_age_to_force_merge} - - - - - - -在将分区合并为单个 part 时,是否对 ReplacingMergeTree 使用 CLEANUP 合并。需要同时启用 `allow_experimental_replacing_merge_with_cleanup`、`min_age_to_force_merge_seconds` 和 `min_age_to_force_merge_on_partition_only`。 - -可能的取值: -- `true` -- `false` - - - -## enable_the_endpoint_id_with_zookeeper_name_prefix {#enable_the_endpoint_id_with_zookeeper_name_prefix} - - -为复制的 MergeTree 表启用带 ZooKeeper 名称前缀的端点 ID。 - - - -## enable_vertical_merge_algorithm {#enable_vertical_merge_algorithm} - - -启用垂直合并算法。 - - - -## enforce_index_structure_match_on_partition_manipulation {#enforce_index_structure_match_on_partition_manipulation} - - - - -如果为分区操作查询(`ATTACH/MOVE/REPLACE PARTITION`)的目标表启用此设置,则源表和目标表的索引与投影必须完全一致。否则,目标表可以包含比源表更多的索引和投影(即为源表索引和投影的超集)。 - - - -## escape_variant_subcolumn_filenames {#escape_variant_subcolumn_filenames} - - - - -为 MergeTree 表的 Wide 部分中 Variant 数据类型子列创建的文件名中的特殊字符进行转义。出于兼容性考虑。 - - - -## exclude_deleted_rows_for_part_size_in_merge {#exclude_deleted_rows_for_part_size_in_merge} - - -如果启用,在选择要合并的数据部分时,将使用数据部分的估算实际大小(即排除通过 `DELETE FROM` 已被删除的行)。请注意,该行为仅对在启用此设置之后执行的 `DELETE FROM` 所影响的数据部分生效。 - -可能的取值: -- `true` -- `false` - -**另请参阅** -- [load_existing_rows_count_for_old_parts](#load_existing_rows_count_for_old_parts) -设置 - - - -## exclude_materialize_skip_indexes_on_merge - - - -在合并过程中,排除指定的以逗号分隔的 `skip` 索引列表,使其不会被构建和存储。如果 -[materialize_skip_indexes_on_merge](#materialize_skip_indexes_on_merge) 为 false,则此设置不起作用。 - -被排除的 `skip` 索引仍然可以通过显式执行 -[MATERIALIZE INDEX](/sql-reference/statements/alter/skipping-index.md/#materialize-index) 查询进行构建和存储,或者在执行 INSERT 时根据 -[materialize_skip_indexes_on_insert](/operations/settings/settings.md/#materialize_skip_indexes_on_insert) -会话设置进行构建和存储。 - -示例: - -```sql -CREATE TABLE tab -( -a UInt64, -b UInt64, -INDEX idx_a a TYPE minmax, -INDEX idx_b b TYPE set(3) -) -ENGINE = MergeTree ORDER BY tuple() SETTINGS exclude_materialize_skip_indexes_on_merge = 'idx_a'; - -INSERT INTO tab SELECT number, number / 50 FROM numbers(100); -- 此设置对 INSERT 操作无影响 - --- 在后台合并或通过 OPTIMIZE TABLE FINAL 执行显式合并时,idx_a 将被排除在更新之外 - --- 可通过提供列表来排除多个索引 -ALTER TABLE tab MODIFY SETTING exclude_materialize_skip_indexes_on_merge = 'idx_a, idx_b'; - --- 默认设置,合并期间不排除任何索引更新 -ALTER TABLE tab MODIFY SETTING exclude_materialize_skip_indexes_on_merge = ''; -``` - - -## execute_merges_on_single_replica_time_threshold {#execute_merges_on_single_replica_time_threshold} - - -当此设置的值大于 0 时,仅有一个副本会立即开始执行合并,其他副本会在该时间内等待并下载该合并结果,而不是在本地执行合并。如果选定的副本未能在该时间内完成合并,则会回退到标准行为。 - -可能的取值: -- 任意正整数。 - - - -## fault_probability_after_part_commit {#fault_probability_after_part_commit} - - -仅用于测试。请勿更改。 - - - -## fault_probability_before_part_commit {#fault_probability_before_part_commit} - - -仅用于测试。请勿修改。 - - - -## finished_mutations_to_keep {#finished_mutations_to_keep} - - -要保留的已完成 mutation 记录的数量。如果为 0,则保留所有记录。 - - - -## force_read_through_cache_for_merges {#force_read_through_cache_for_merges} - - - - -在合并时强制通过文件系统缓存进行读取 - - - -## fsync_after_insert {#fsync_after_insert} - - -对每个插入的 part 执行 fsync。会显著降低插入性能,不建议与 wide parts 一起使用。 - - - -## fsync_part_directory {#fsync_part_directory} - - -在完成所有分片操作(写入、重命名等)后,对分片目录执行 fsync。 - - - -## in_memory_parts_enable_wal {#in_memory_parts_enable_wal} - -已废弃的设置,不产生任何效果。 -## in_memory_parts_insert_sync {#in_memory_parts_insert_sync} - -已废弃的设置,不产生任何效果。 -## inactive_parts_to_delay_insert {#inactive_parts_to_delay_insert} - - -如果表中单个分区内的非活动数据片段(part)数量超过 `inactive_parts_to_delay_insert` 的值,则 `INSERT` 会被人为减慢。 - -:::tip -当服务器无法足够快地清理数据片段(part)时,此设置会很有用。 -::: - -可能的取值: -- 任意正整数。 - - - -## inactive_parts_to_throw_insert {#inactive_parts_to_throw_insert} - - -如果单个分区中的非活动 part 数量超过 `inactive_parts_to_throw_insert` 的值,`INSERT` 会被中断,并返回如下错误: - -> "Too many inactive parts (N). Parts cleaning are processing significantly -slower than inserts" exception. - -可能的取值: -- 任意正整数。 - - - -## index_granularity {#index_granularity} - - -索引标记之间的最大数据行数。即有多少行对应一个主键值。 - - - -## index_granularity_bytes {#index_granularity_bytes} - - -数据粒度的最大尺寸(单位:字节)。 - -若仅希望按行数限制粒度大小,可将其设置为 `0`(不推荐)。 - - - -## initialization_retry_period {#initialization_retry_period} - - -表初始化的重试间隔(秒)。 - - - -## kill_delay_period {#kill_delay_period} - -已废弃的设置,无任何作用。 -## kill_delay_period_random_add {#kill_delay_period_random_add} - -已废弃的设置,无任何作用。 -## kill_threads {#kill_threads} - -已废弃的设置,无任何作用。 -## lightweight_mutation_projection_mode {#lightweight_mutation_projection_mode} - - -默认情况下,轻量级删除(`DELETE`)不适用于带有 projection 的表。这是因为 projection 中的行可能会受到 `DELETE` 操作的影响。因此默认值为 `throw`。不过,可以通过此选项改变该行为。当取值为 `drop` 或 `rebuild` 时,删除操作可以作用于带有 projection 的表。`drop` 会删除该 projection,因此当前查询可能会更快,因为 projection 被删除了,但后续查询可能会变慢,因为不再有 projection 可用。`rebuild` 会重建该 projection,这可能会影响当前查询的性能,但可能会加速后续查询。值得注意的是,这些选项只在 part 级别生效,这意味着未被触及的 part 中的 projection 会保持不变,而不会触发诸如 drop 或 rebuild 等操作。 - -可选值: -- `throw` -- `drop` -- `rebuild` - - - -## load_existing_rows_count_for_old_parts {#load_existing_rows_count_for_old_parts} - - -如果与 [exclude_deleted_rows_for_part_size_in_merge](#exclude_deleted_rows_for_part_size_in_merge) 一同启用, -将在表启动时为现有数据分片计算已删除行的数量。请注意,这可能会减慢表的启动加载过程。 - -可能的取值: -- `true` -- `false` - -**另请参阅** -- [exclude_deleted_rows_for_part_size_in_merge](#exclude_deleted_rows_for_part_size_in_merge) 设置 - - - -## lock_acquire_timeout_for_background_operations {#lock_acquire_timeout_for_background_operations} - - -对于合并、变更(mutations)等后台操作,在放弃获取表锁之前等待的秒数。 - - - -## marks_compress_block_size {#marks_compress_block_size} - - -标记压缩块大小,即实际进行压缩的数据块大小。 - - - -## marks_compression_codec {#marks_compression_codec} - - -用于 marks 的压缩编码格式。由于 marks 体积较小且会被缓存,因此默认使用 ZSTD(3) 压缩。 - - - -## materialize_skip_indexes_on_merge {#materialize_skip_indexes_on_merge} - - - - -启用该设置后,合并操作会为新的数据分片构建并存储 skip 索引。 -否则,它们可以通过显式的 [MATERIALIZE INDEX](/sql-reference/statements/alter/skipping-index.md/#materialize-index) -或[在 INSERT 时](/operations/settings/settings.md/#materialize_skip_indexes_on_insert)进行创建/存储。 - -另请参阅 [exclude_materialize_skip_indexes_on_merge](#exclude_materialize_skip_indexes_on_merge) 以实现更精细的控制。 - - - -## materialize_ttl_recalculate_only {#materialize_ttl_recalculate_only} - - -仅在执行 MATERIALIZE TTL 操作时重新计算 TTL 信息 - - - -## max_avg_part_size_for_too_many_parts {#max_avg_part_size_for_too_many_parts} - - -根据 `parts_to_delay_insert` 和 `parts_to_throw_insert` 进行“部分过多”检查时,只有在(相关分区中的)平均数据分片大小不超过指定阈值时才会启用该检查。如果平均数据分片大小大于该阈值,则 INSERT 既不会被延迟也不会被拒绝。只要数据分片能够成功合并为更大的分片,这就允许在单台服务器上的单张表中存储数百 TB 的数据。此设置不会影响针对非活跃分片或分片总数的阈值。 - - - -## max_bytes_to_merge_at_max_space_in_pool {#max_bytes_to_merge_at_max_space_in_pool} - - -在资源池空间充足的情况下,可被合并成单个 part 的所有源 part 的最大总大小(以字节为单位)。该值大致对应自动后台合并任务所能创建的最大 part 大小。(0 表示禁用合并) - -可能的取值: - -- 任意非负整数。 - -合并调度器会定期分析各分区中 part 的大小和数量,如果资源池中有足够的空闲资源,就会启动后台合并。合并会持续进行,直到源 part 的总大小大于 `max_bytes_to_merge_at_max_space_in_pool`。 - -由 [OPTIMIZE FINAL](/sql-reference/statements/optimize) 发起的合并会忽略 `max_bytes_to_merge_at_max_space_in_pool`(只考虑可用磁盘空间)。 - - - -## max_bytes_to_merge_at_min_space_in_pool {#max_bytes_to_merge_at_min_space_in_pool} - - -在后台池可用资源处于最小值时,可合并为一个分片的所有分片总大小上限(以字节为单位)。 - -可能的值: -- 任意正整数。 - -`max_bytes_to_merge_at_min_space_in_pool` 定义了即使池中可用磁盘空间不足时,仍然允许参与合并的分片总大小上限。 -这对于减少小分片的数量以及降低出现 `Too many parts` 错误的概率是必要的。 -合并会通过将被合并分片的总大小加倍的方式预先预留(占用)磁盘空间。 -因此,在可用磁盘空间较少时,可能会出现这样一种情况:虽然仍然有剩余空间,但这些空间已经被正在进行的大型合并预留,导致其他合并无法启动,从而使得小分片的数量在每次写入时持续增加。 - - - -## max_cleanup_delay_period {#max_cleanup_delay_period} - - -用于清理旧队列日志、块哈希和数据片段的最长时间间隔。 - - - -## max_compress_block_size {#max_compress_block_size} - - -在写入表之前进行压缩时,未压缩数据块在压缩前的最大大小。也可以在全局设置中指定此设置(参见 [max_compress_block_size](/operations/settings/merge-tree-settings#max_compress_block_size) 设置)。在创建表时指定的值会覆盖该设置的全局值。 - - - -## max_concurrent_queries - - - -与 MergeTree 表相关的可并发执行的查询的最大数量。 -查询仍然会受到其他 `max_concurrent_queries` 设置的限制。 - -可能的取值: - -* 正整数。 -* `0` — 不限制。 - -默认值:`0`(不限制)。 - -**示例** - -```xml -50 -``` - - -## max_delay_to_insert - - - -以秒为单位的数值,用于计算 `INSERT` 的延迟。当单个分区中的活动分片数量超过 -[parts_to_delay_insert](#parts_to_delay_insert) 的设置值时生效。 - -可能的取值: - -* 任意正整数。 - -`INSERT` 的延迟(以毫秒为单位)按照下列公式计算: - -```code -max_k = parts_to_throw_insert - parts_to_delay_insert -k = 1 + parts_count_in_partition - parts_to_delay_insert -delay_milliseconds = pow(max_delay_to_insert * 1000, k / max_k) -``` - -例如,如果某个分区有 299 个活动 part,并且 parts_to_throw_insert -= 300,parts_to_delay_insert = 150,max_delay_to_insert = 1,则 `INSERT` 会被延迟 -`pow( 1 * 1000, (1 + 299 - 150) / (300 - 150) ) = 1000` -毫秒。 - -从 23.1 版本开始,公式更改为: - -```code -allowed_parts_over_threshold = parts_to_throw_insert - parts_to_delay_insert -parts_over_threshold = parts_count_in_partition - parts_to_delay_insert + 1 -delay_milliseconds = max(min_delay_to_insert_ms, (max_delay_to_insert * 1000) -* parts_over_threshold / allowed_parts_over_threshold) -``` - -例如,如果某个分区有 224 个活动 part,且 parts_to_throw_insert -= 300,parts_to_delay_insert = 150,max_delay_to_insert = 1, -min_delay_to_insert_ms = 10,则 `INSERT` 将被延迟执行 `max( 10, 1 * 1000 * -(224 - 150 + 1) / (300 - 150) ) = 500` 毫秒。 - - -## max_delay_to_mutate_ms {#max_delay_to_mutate_ms} - - -在存在大量未完成 mutation 时,对 MergeTree 表执行变更操作的最大延迟时间(毫秒)。 - - - -## max_digestion_size_per_segment {#max_digestion_size_per_segment} - - - - - -此设置已废弃,目前不产生任何效果。 -## max_file_name_length {#max_file_name_length} - - -在不对文件名进行哈希处理、保持其原样时所允许的最大文件名长度。 -仅在启用 `replace_long_file_name_to_hash` 设置时生效。 -此设置的值不包含文件扩展名的长度。因此, -建议将其设置为低于最大文件名长度(通常为 255 字节),并预留一定余量,以避免文件系统错误。 - - - -## max_files_to_modify_in_alter_columns {#max_files_to_modify_in_alter_columns} - - -如果待修改(删除、添加)的文件数量大于此设置值,则不会执行 ALTER 操作。 - -可能的取值: - -- 任意正整数。 - -默认值:75 - - - -## max_files_to_remove_in_alter_columns {#max_files_to_remove_in_alter_columns} - - -如果待删除文件的数量大于此设置的值,则不执行 ALTER 操作。 - -可能的取值: -- 任意正整数。 - - - -## max_merge_delayed_streams_for_parallel_write {#max_merge_delayed_streams_for_parallel_write} - - - - -可以并行刷新(flush)的最大流(列)数量 -(在合并场景下,对应于 `max_insert_delayed_streams_for_parallel_write`)。仅对垂直合并(Vertical merge)生效。 - - - -## max_merge_selecting_sleep_ms {#max_merge_selecting_sleep_ms} - - -当一次未能选出任何数据片段进行合并时,在再次尝试选择要合并的数据片段前的最长等待时间。较低的配置值会更频繁地在 background_schedule_pool 中触发任务选择,这会在大规模集群中导致大量对 ZooKeeper 的请求。 - - - -## max_number_of_merges_with_ttl_in_pool {#max_number_of_merges_with_ttl_in_pool} - -当池中带有 TTL 条目的合并任务数量超过指定值时,不再分配新的带 TTL 的合并任务。这样可以为常规合并保留空闲线程,并避免出现 “Too many parts” 错误。 - - - -## max_number_of_mutations_for_replica {#max_number_of_mutations_for_replica} - - -将每个副本的分片变更次数限制为指定数量。 -0 表示对每个副本的变更次数不设上限(执行仍可能受其他设置约束)。 - - - -## max_part_loading_threads {#max_part_loading_threads} - -已废弃的设置,目前不起任何作用。 -## max_part_removal_threads {#max_part_removal_threads} - -已废弃的设置,目前不起任何作用。 -## max_partitions_to_read {#max_partitions_to_read} - - -限制单个查询中可访问的分区最大数量。 - -在创建表时指定的设置值,可以在查询级别的设置中进行覆盖。 - -可能的取值: -- 任意正整数。 - -你还可以在查询 / 会话 / 配置文件级别,指定查询复杂度设置 [max_partitions_to_read](/operations/settings/settings#max_partitions_to_read)。 - - - -## max_parts_in_total {#max_parts_in_total} - - -如果某个表所有分区中的活动数据片总数超过 -`max_parts_in_total` 的值,则会中断 `INSERT` 操作,并抛出 `Too many parts -(N)` 异常。 - -可能的取值: -- 任意正整数。 - -表中的数据片数量过多会降低 ClickHouse 查询性能, -并增加 ClickHouse 的启动时间。通常这是由设计不当造成的(例如在选择分区策略时出错,导致分区过小)。 - - - -## max_parts_to_merge_at_once {#max_parts_to_merge_at_once} - - -一次可以合并的最大数据分片数量(0 表示禁用)。不会影响 OPTIMIZE FINAL 查询。 - - - -## max_postpone_time_for_failed_mutations_ms {#max_postpone_time_for_failed_mutations_ms} - - -失败变更操作允许的最长延后时间。 - - - -## max_postpone_time_for_failed_replicated_fetches_ms {#max_postpone_time_for_failed_replicated_fetches_ms} - - - - -复制拉取任务失败后允许延后的最长时间。 - - - -## max_postpone_time_for_failed_replicated_merges_ms {#max_postpone_time_for_failed_replicated_merges_ms} - - - - -失败的复制合并操作可被延后的最长时间。 - - - -## max_postpone_time_for_failed_replicated_tasks_ms {#max_postpone_time_for_failed_replicated_tasks_ms} - - - - -失败复制任务的最长延后时间。当任务不是 fetch、merge 或 mutation 时使用该值。 - - - -## max_projections {#max_projections} - - -MergeTree 表投影的最大数量。 - - - -## max_replicated_fetches_network_bandwidth {#max_replicated_fetches_network_bandwidth} - - -限制 [replicated](../../engines/table-engines/mergetree-family/replication.md) 获取操作在网络上传输数据的最大速率(以字节每秒为单位)。此设置作用于某个特定表,不同于作用于整个服务器的 [`max_replicated_fetches_network_bandwidth_for_server`](/operations/settings/merge-tree-settings#max_replicated_fetches_network_bandwidth) 设置。 - -可以同时限制服务器网络带宽和特定表的网络带宽,但表级别设置的值必须小于服务器级别的值。否则,服务器只会考虑 `max_replicated_fetches_network_bandwidth_for_server` 设置。 - -该设置在实际执行时并非完全精确。 - -可能的取值: - -- 正整数。 -- `0` — 不受限制。 - -默认值:`0`。 - -**用法** - -可用于在向新节点复制数据(添加或替换节点)时对复制速度进行限流。 - - - -## max_replicated_logs_to_keep {#max_replicated_logs_to_keep} - - -如果存在非活动副本,ClickHouse Keeper 日志中最多可以保留多少条记录。 -当日志记录数超过该值时,非活动副本将被视为丢失。 - -可能的取值: -- 任意正整数。 - - - -## max_replicated_merges_in_queue {#max_replicated_merges_in_queue} - - -`ReplicatedMergeTree` 队列中允许同时存在的合并和变更分片任务数。 - - - -## max_replicated_merges_with_ttl_in_queue {#max_replicated_merges_with_ttl_in_queue} - - -在 ReplicatedMergeTree 队列中,允许同时执行多少个带有 TTL 的数据部分合并任务。 - - - -## max_replicated_mutations_in_queue {#max_replicated_mutations_in_queue} - - -在 ReplicatedMergeTree 队列中,允许同时存在多少个对数据部件进行变更的任务。 - - - -## max_replicated_sends_network_bandwidth {#max_replicated_sends_network_bandwidth} - - -限制通过网络进行副本数据交换的最大速度(以字节/秒为单位),适用于 -[replicated](/engines/table-engines/mergetree-family/replacingmergetree) -发送。该设置作用于特定表,不同于 -[`max_replicated_sends_network_bandwidth_for_server`](/operations/settings/merge-tree-settings#max_replicated_sends_network_bandwidth) -设置(作用于服务器级别)。 - -可以同时限制服务器整体网络带宽和某个特定表的网络带宽,但为此表级别设置的值 -必须小于服务器级别的设置值。否则,服务器只会采用 -`max_replicated_sends_network_bandwidth_for_server` 设置。 - -该限制并非严格精确地执行。 - -可能的取值: - -- 正整数。 -- `0` — 不限制。 - -**使用说明** - -可用于在复制数据以添加或替换新节点时对带宽进行限速(节流)。 - - - -## max_suspicious_broken_parts {#max_suspicious_broken_parts} - - -如果单个分区中的损坏数据片段数量超过 `max_suspicious_broken_parts` 的值,则不会执行自动删除。 - -可能的取值: -- 任意正整数。 - - - -## max_suspicious_broken_parts_bytes {#max_suspicious_broken_parts_bytes} - - -所有损坏分片的最大总大小,若超过此值,则禁止自动删除。 - -可能的取值: -- 任意正整数。 - - - -## max_uncompressed_bytes_in_patches {#max_uncompressed_bytes_in_patches} - - - - -所有补丁部分中未压缩数据的最大总大小(字节)。 -如果所有补丁部分中的数据量超过该值,将拒绝轻量级更新。 -0 - 无限制。 - - - -## merge_max_block_size {#merge_max_block_size} - - -从参与合并的各个数据部分中读取到内存中的行数。 - -可能的取值: -- 任意正整数。 - -合并操作会按每次 `merge_max_block_size` 行的块大小,从各个数据部分读取行, -然后将其合并并把结果写入一个新的数据部分。读取的块会放在 RAM 中, -因此 `merge_max_block_size` 会影响合并所需的 RAM 大小。 -因此,对于行非常宽的表,合并可能会消耗大量 RAM -(如果平均每行大小为 100KB,则在合并 10 个部分时, -(100KB * 10 * 8192) ≈ 8GB RAM)。通过减小 `merge_max_block_size`, -可以减少一次合并所需的 RAM,但会减慢合并速度。 - - - -## merge_max_block_size_bytes {#merge_max_block_size_bytes} - - -在合并操作中应形成的块的大小(字节数)。默认情况下, -其值与 `index_granularity_bytes` 相同。 - - - -## merge_max_bytes_to_prewarm_cache {#merge_max_bytes_to_prewarm_cache} - - - - -仅在 ClickHouse Cloud 中可用。在合并过程中用于预热缓存的单个分片(compact 或 packed 类型)的最大大小。 - - - -## merge_max_dynamic_subcolumns_in_wide_part {#merge_max_dynamic_subcolumns_in_wide_part} - - - - -在合并后,每个 Wide 数据部分中每一列允许创建的动态子列的最大数量。 -这可以在不考虑数据类型中指定的动态参数的情况下,减少 Wide 数据部分中创建的文件数量。 - -例如,如果表有一个类型为 `JSON(max_dynamic_paths=1024)` 的列,且将 `merge_max_dynamic_subcolumns_in_wide_part` 设置为 128, -那么在合并到 Wide 数据部分后,该部分中的动态路径数量将被减小到 128,并且只有 128 个路径会作为动态子列写入。 - - - -## merge_selecting_sleep_ms {#merge_selecting_sleep_ms} - - -在未选中任何数据片段用于合并后,再次尝试选择要合并的数据片段之前等待的最短时间。将该值设置得更低会更频繁地在 `background_schedule_pool` 中触发选择任务,这会在大型集群中导致向 ZooKeeper 发起大量请求。 - - - -## merge_selecting_sleep_slowdown_factor {#merge_selecting_sleep_slowdown_factor} - - -当没有可合并的数据时,合并选择任务的休眠时间会乘以该系数;当分配到合并任务时,则会除以该系数。 - - - -## merge_selector_algorithm {#merge_selector_algorithm} - - - - -用于选择要分配参与合并的数据部分的算法 - - - -## merge_selector_base {#merge_selector_base} - -影响已分配合并任务的写入放大(专家级设置,如果不理解其作用,请不要修改)。适用于 Simple 和 StochasticSimple 合并选择器 - - - -## merge_selector_blurry_base_scale_factor {#merge_selector_blurry_base_scale_factor} - - -控制该逻辑相对于分区中数据块数量在何时开始生效。系数越大,触发反应就越滞后。 - - - -## merge_selector_enable_heuristic_to_remove_small_parts_at_right {#merge_selector_enable_heuristic_to_remove_small_parts_at_right} - - -启用用于选择要合并分片的启发式算法:如果某些分片位于区间右侧,且其大小小于总大小 sum_size 的指定比例(0.01),则将其移除。 -适用于 `Simple` 和 `StochasticSimple` 合并选择器。 - - - -## merge_selector_window_size {#merge_selector_window_size} - - -一次要同时查看的分片数量。 - - - -## merge_total_max_bytes_to_prewarm_cache {#merge_total_max_bytes_to_prewarm_cache} - - - - -仅在 ClickHouse Cloud 中可用。合并期间为预热缓存而加载的所有数据分片的最大总大小。 - - - -## merge_tree_clear_old_broken_detached_parts_ttl_timeout_seconds {#merge_tree_clear_old_broken_detached_parts_ttl_timeout_seconds} - -已废弃的配置,不执行任何操作。 -## merge_tree_clear_old_parts_interval_seconds {#merge_tree_clear_old_parts_interval_seconds} - - -设置 ClickHouse 执行旧 parts、WAL 和 mutations 清理的时间间隔(以秒为单位)。 - -可能的取值: -- 任意正整数。 - - - -## merge_tree_clear_old_temporary_directories_interval_seconds {#merge_tree_clear_old_temporary_directories_interval_seconds} - - -以秒为单位设置 ClickHouse 清理旧临时目录的时间间隔。 - -可能的值: -- 任意正整数。 - - - -## merge_tree_enable_clear_old_broken_detached {#merge_tree_enable_clear_old_broken_detached} - -已废弃的设置,不再产生任何效果。 -## merge_with_recompression_ttl_timeout {#merge_with_recompression_ttl_timeout} - - -在再次执行带有重新压缩 TTL 的合并前的最小延迟时间(以秒为单位)。 - - - -## merge_with_ttl_timeout {#merge_with_ttl_timeout} - - -在重新执行带有 DELETE TTL 的合并操作前需要等待的最小时间(秒)。 - - - -## merge_workload {#merge_workload} - - -用于调节合并操作与其他工作负载之间的资源使用和共享方式。指定的值会作为此表后台合并的 `workload` 设置值。如果未指定(为空字符串),则使用服务器设置 `merge_workload` 的值。 - -**另请参阅** -- [工作负载调度](/operations/workload-scheduling.md) - - - -## min_absolute_delay_to_close {#min_absolute_delay_to_close} - - -在关闭前的最小绝对延迟时间;在此期间停止处理请求,并在状态检查时不返回 OK。 - - - -## min_age_to_force_merge_on_partition_only {#min_age_to_force_merge_on_partition_only} - - -`min_age_to_force_merge_seconds` 是否仅应用于整个分区,而不应用于分区内的部分数据。 - -默认情况下,将忽略设置 `max_bytes_to_merge_at_max_space_in_pool`(参见 -`enable_max_bytes_limit_for_min_age_to_force_merge`)。 - -可能的取值: -- true, false - - - -## min_age_to_force_merge_seconds {#min_age_to_force_merge_seconds} - - -如果范围内的每个数据部分的存在时间都超过 `min_age_to_force_merge_seconds` 的值,则对这些数据部分执行合并。 - -默认情况下,会忽略对 `max_bytes_to_merge_at_max_space_in_pool` 的设置 -(参见 `enable_max_bytes_limit_for_min_age_to_force_merge`)。 - -可能的取值: -- 正整数。 - - - -## min_bytes_for_compact_part {#min_bytes_for_compact_part} - -已弃用的设置,不产生任何效果。 -## min_bytes_for_full_part_storage {#min_bytes_for_full_part_storage} - - -仅在 ClickHouse Cloud 中可用。以字节为单位指定最小未压缩大小, -用于对数据部分使用完整类型的存储,而不是打包存储方式。 - - - -## min_bytes_for_wide_part {#min_bytes_for_wide_part} - - -以 `Wide` 格式存储的数据片段所需的最小字节数或行数。可以只设置其中一项、同时设置两项,或都不设置。 - - - -## min_bytes_to_prewarm_caches {#min_bytes_to_prewarm_caches} - - - - -为新数据部分预热标记缓存和主索引缓存所需的最小大小(未压缩字节数) - - - -## min_bytes_to_rebalance_partition_over_jbod {#min_bytes_to_rebalance_partition_over_jbod} - - -设置在将新的大数据片段(part)分布到卷中的磁盘([JBOD](https://en.wikipedia.org/wiki/Non-RAID_drive_architectures))时,启用重新平衡所需的最小字节数。 - -可能的取值: - -- 正整数。 -- `0` — 禁用重新平衡。 - -**使用说明** - -`min_bytes_to_rebalance_partition_over_jbod` 设置的值不应小于 -[max_bytes_to_merge_at_max_space_in_pool](/operations/settings/merge-tree-settings#max_bytes_to_merge_at_max_space_in_pool) -/ 1024 的值。否则,ClickHouse 会抛出异常。 - - - -## min_compress_block_size {#min_compress_block_size} - - -在写入下一个标记(mark)时触发压缩所需的未压缩数据块的最小大小。也可以在全局设置中指定该参数(参见 [min_compress_block_size](/operations/settings/merge-tree-settings#min_compress_block_size) 设置)。在创建表时为该参数指定的值会覆盖其全局设置值。 - - - -## min_compressed_bytes_to_fsync_after_fetch {#min_compressed_bytes_to_fsync_after_fetch} - - -在拉取后对数据片段执行 fsync 所需的最小压缩字节数(0 表示禁用) - - - -## min_compressed_bytes_to_fsync_after_merge {#min_compressed_bytes_to_fsync_after_merge} - - -在合并后对数据分片执行 fsync 的最小压缩字节数(0 表示禁用) - - - -## min_delay_to_insert_ms {#min_delay_to_insert_ms} - - -当单个分区中存在大量未合并的部分时,向 MergeTree 表插入数据的最小延迟(以毫秒为单位)。 - - - -## min_delay_to_mutate_ms {#min_delay_to_mutate_ms} - - -在存在大量未完成 mutation 的情况下,对 MergeTree 表执行 mutation 的最小延迟时间(毫秒)。 - - - -## min_free_disk_bytes_to_perform_insert {#min_free_disk_bytes_to_perform_insert} - - -为执行插入操作,磁盘上必须保持的最小空闲字节数。如果当前可用空闲字节数小于 -`min_free_disk_bytes_to_perform_insert`,则会抛出异常,并且不会执行插入操作。注意该设置: -- 会考虑 `keep_free_space_bytes` 设置。 -- 不会考虑此次 `INSERT` 操作将要写入的数据量。 -- 仅在将其设置为正数(非零)字节数时才会进行检查。 - -可能的取值: -- 任意正整数。 - -:::note -如果同时指定了 `min_free_disk_bytes_to_perform_insert` 和 `min_free_disk_ratio_to_perform_insert`, -ClickHouse 会采用其中要求可用空间更大的那个值。 -::: - - - -## min_free_disk_ratio_to_perform_insert {#min_free_disk_ratio_to_perform_insert} - - -执行 `INSERT` 时,磁盘可用空间与磁盘总空间的最小比例。必须是介于 0 和 1 之间的浮点值。注意,该设置: -- 会考虑 `keep_free_space_bytes` 设置。 -- 不会考虑此次 `INSERT` 操作将要写入的数据量。 -- 仅在指定了正的(非零)比例时才会进行检查。 - -可能的取值: -- Float,0.0 - 1.0 - -注意,如果同时指定了 `min_free_disk_ratio_to_perform_insert` 和 -`min_free_disk_bytes_to_perform_insert`,ClickHouse 将以其中要求可用磁盘空间更大的那个值为准。 - - - -## min_index_granularity_bytes {#min_index_granularity_bytes} - - -数据粒度单元允许的最小大小(字节)。 - -用于防止因 `index_granularity_bytes` 设置过低而意外创建表。 - - - -## min_level_for_full_part_storage {#min_level_for_full_part_storage} - - - - -仅在 ClickHouse Cloud 中可用。对数据 part 使用完整存储类型(而非打包存储)所需的最小 part 级别。 - - - -## min_level_for_wide_part {#min_level_for_wide_part} - - - - -将数据部件创建为 `Wide` 格式(而非 `Compact` 格式)所需的最小部件级别。 - - - -## min_marks_to_honor_max_concurrent_queries - - - -查询在应用 [max_concurrent_queries](#max_concurrent_queries) 设置前需要读取的最小 mark 数量。 - -:::note -查询仍然会受其他 `max_concurrent_queries` 设置的限制。 -::: - -可能的取值: - -* 正整数。 -* `0` — 禁用(`max_concurrent_queries` 限制不应用到任何查询)。 - -**示例** - -```xml -10 -``` - - -## min_merge_bytes_to_use_direct_io {#min_merge_bytes_to_use_direct_io} - - -在合并操作中启用对存储磁盘直接 I/O 访问所需的最小数据量。合并数据分片时,ClickHouse 会计算所有待合并数据的总数据量。如果该数据量超过 `min_merge_bytes_to_use_direct_io` 字节,ClickHouse 就会使用直接 I/O 接口(`O_DIRECT` 选项)从存储磁盘读取并向其写入数据。 -如果 `min_merge_bytes_to_use_direct_io = 0`,则禁用直接 I/O。 - - - -## min_parts_to_merge_at_once {#min_parts_to_merge_at_once} - - -合并选择器在一次合并中可以选择的最少数据分片数量 -(高级参数,如果不了解其作用,请不要修改)。 -0 - 表示禁用。适用于 Simple 和 StochasticSimple 合并选择器。 - - - -## min_relative_delay_to_close {#min_relative_delay_to_close} - - -与其他副本相比,在本副本关闭、停止处理请求并在状态检查中不再返回 Ok 之前所允许的最小延迟。 - - - -## min_relative_delay_to_measure {#min_relative_delay_to_measure} - - -仅在绝对延迟不小于该值时,才计算副本的相对延迟。 - - - -## min_relative_delay_to_yield_leadership {#min_relative_delay_to_yield_leadership} - -已弃用的设置,不产生任何效果。 -## min_replicated_logs_to_keep {#min_replicated_logs_to_keep} - - -在 ZooKeeper 日志中保留大约这么多条最近的记录,即使它们已经过时。 -这不会影响表的正常工作:仅用于在清理前对 ZooKeeper 日志进行诊断。 - -可能的取值: -- 任何正整数。 - - - -## min_rows_for_compact_part {#min_rows_for_compact_part} - -已废弃的设置,不再产生任何效果。 -## min_rows_for_full_part_storage {#min_rows_for_full_part_storage} - - -仅在 ClickHouse Cloud 中可用。将数据部分使用完整类型存储而非打包类型存储时所需的最小行数。 - - - -## min_rows_for_wide_part {#min_rows_for_wide_part} - - -将数据部分创建为 `Wide` 格式而非 `Compact` 格式时所需的最小行数。 - - - -## min_rows_to_fsync_after_merge {#min_rows_to_fsync_after_merge} - - -在合并后对数据分片执行 fsync 所需的最小行数(0 表示禁用) - - - -## mutation_workload {#mutation_workload} - -用于调节变更(mutation)与其他工作负载之间的资源使用和共享方式。指定的值会用作该表后台变更操作的 `workload` 设置值。如果未指定(空字符串),则会使用服务器级设置 `mutation_workload`。 - -**另请参阅** -- [工作负载调度](/operations/workload-scheduling.md) - - - -## non_replicated_deduplication_window {#non_replicated_deduplication_window} - - -在非副本 -[MergeTree](../../engines/table-engines/mergetree-family/mergetree.md) 表中,为检查重复数据而存储哈希和的最近插入数据块的数量。 - -可能的取值: -- 任意正整数。 -- `0`(禁用去重)。 - -使用的去重机制与副本表类似(参见 -[replicated_deduplication_window](#replicated_deduplication_window) 设置)。 -已创建数据部分的哈希和会写入磁盘上的本地文件。 - - - -## notify_newest_block_number {#notify_newest_block_number} - - - - - - -将最新块编号通知到 SharedJoin 或 SharedSet。仅在 ClickHouse Cloud 中可用。 - - - -## number_of_free_entries_in_pool_to_execute_mutation {#number_of_free_entries_in_pool_to_execute_mutation} - - -当池中空闲条目的数量小于指定值时,不执行数据分片变更(part mutation)。这样可以为常规合并保留空闲线程,并避免出现“Too many parts”错误。 - -可能的取值: -- 任意正整数。 - -**用法** - -`number_of_free_entries_in_pool_to_execute_mutation` 设置的值应小于 [background_pool_size](/operations/server-configuration-parameters/settings.md/#background_pool_size) -* [background_merges_mutations_concurrency_ratio](/operations/server-configuration-parameters/settings.md/#background_merges_mutations_concurrency_ratio) 的乘积。否则,ClickHouse 将抛出异常。 - - - -## number_of_free_entries_in_pool_to_execute_optimize_entire_partition {#number_of_free_entries_in_pool_to_execute_optimize_entire_partition} - - -当池中空闲条目的数量少于指定值时,将不会在后台执行整个分区的优化(此任务会在设置 `min_age_to_force_merge_seconds` 并启用 `min_age_to_force_merge_on_partition_only` 时生成)。这样可以为常规合并保留空闲线程,并避免出现"Too many parts"的情况。 - -可能的值: -- 正整数。 - -`number_of_free_entries_in_pool_to_execute_optimize_entire_partition` 设置的值应小于 -[background_pool_size](/operations/server-configuration-parameters/settings.md/#background_pool_size) -* [background_merges_mutations_concurrency_ratio](/operations/server-configuration-parameters/settings.md/#background_merges_mutations_concurrency_ratio) 的乘积。否则,ClickHouse 会抛出异常。 - - - -## number_of_free_entries_in_pool_to_lower_max_size_of_merge {#number_of_free_entries_in_pool_to_lower_max_size_of_merge} - - -当池(或复制队列)中的空闲条目数量小于指定值时,开始降低可处理的合并的最大大小(或放入队列的合并的最大大小)。 -这样可以让较小的合并任务得以及时执行,避免池被长时间运行的合并任务占满。 - -可能的值: -- 任意正整数。 - - - -## number_of_mutations_to_delay {#number_of_mutations_to_delay} - -如果表中未完成的 mutation 数量至少达到该值,则会人工减慢该表的 mutation 执行速度。 -设置为 0 时禁用。 - - - -## number_of_mutations_to_throw {#number_of_mutations_to_throw} - - -如果表中未完成的 mutation 数量至少达到该值,则抛出 “Too many mutations” 异常。设置为 0 时禁用。 - - - -## number_of_partitions_to_consider_for_merge {#number_of_partitions_to_consider_for_merge} - - - - -仅在 ClickHouse Cloud 中可用。最多会考虑前 N 个分区用于合并。分区的选择采用加权随机方式,其中权重为该分区中可合并的数据分片数量。 - - - -## object_serialization_version {#object_serialization_version} - - - - -用于 JSON 数据类型的序列化版本。用于保证兼容性。 - -可能的取值: -- `v1` -- `v2` -- `v3` - -只有版本 `v3` 支持更改共享数据的序列化版本。 - - - -## object_shared_data_buckets_for_compact_part {#object_shared_data_buckets_for_compact_part} - - - - -在 Compact 部分中用于 JSON 共享数据序列化的桶(bucket)数量。适用于 `map_with_buckets` 和 `advanced` 两种共享数据序列化方式。 - - - -## object_shared_data_buckets_for_wide_part {#object_shared_data_buckets_for_wide_part} - - - - -宽部件中用于 JSON 共享数据序列化的桶数量。适用于 `map_with_buckets` 和 `advanced` 类型的共享数据序列化方式。 - - - -## object_shared_data_serialization_version {#object_shared_data_serialization_version} - - - - -用于 JSON 数据类型中共享数据的序列化版本。 - -可选值: -- `map` - 将共享数据存储为 `Map(String, String)` -- `map_with_buckets` - 将共享数据存储为多个独立的 `Map(String, String)` 列。使用 bucket 可以提高从共享数据中读取单个路径的性能。 -- `advanced` - 专门为共享数据设计的高级序列化方式,旨在显著提升从共享数据中读取单个路径的效率。 -请注意,这种序列化会增加共享数据在磁盘上的存储大小,因为会存储大量额外信息。 - -`map_with_buckets` 和 `advanced` 序列化方式的 bucket 数量由以下设置确定: -[object_shared_data_buckets_for_compact_part](#object_shared_data_buckets_for_compact_part)/[object_shared_data_buckets_for_wide_part](#object_shared_data_buckets_for_wide_part)。 - - - -## object_shared_data_serialization_version_for_zero_level_parts {#object_shared_data_serialization_version_for_zero_level_parts} - - - - -此设置允许为在插入过程中创建的零级 part 的 JSON 类型中的共享数据指定不同的序列化版本。 -不建议对零级 part 使用 `advanced` 共享数据序列化,因为这可能会显著增加插入耗时。 - - - -## old_parts_lifetime {#old_parts_lifetime} - - -在服务器意外重启的情况下,为防止数据丢失而保留非活动数据片段的时间(以秒为单位)。 - -可能的取值: -- 任意正整数。 - -在将多个数据片段合并为一个新的数据片段后,ClickHouse 会将原始数据片段标记为非活动状态,并仅在经过 `old_parts_lifetime` 秒后才删除它们。只有当当前查询不再使用这些非活动数据片段时(即该数据片段的 `refcount` 为 1),它们才会被删除。 - -对于新的数据片段不会调用 `fsync`,因此在一段时间内,新数据片段只存在于服务器的 RAM(操作系统缓存)中。如果服务器意外重启,新数据片段可能会丢失或损坏。为保护数据,非活动数据片段不会被立即删除。 - -在启动时,ClickHouse 会检查数据片段的完整性。如果合并后的数据片段已损坏,ClickHouse 会将非活动数据片段重新加入到活动列表中,并在之后再次对其进行合并。随后,损坏的数据片段会被重命名(添加 `broken_` 前缀)并移动到 `detached` 目录。如果合并后的数据片段未损坏,则原始的非活动数据片段会被重命名(添加 `ignored_` 前缀)并移动到 `detached` 目录。 - -默认的 `dirty_expire_centisecs` 值(Linux 内核设置)为 30 秒(写入数据仅存储在 RAM 中的最长时间),但在磁盘系统负载较高的情况下,数据可能会更晚才被写入。通过实验,为 `old_parts_lifetime` 选择了 480 秒这个值,在该时间内可以保证新的数据片段被写入磁盘。 - - - -## optimize_row_order {#optimize_row_order} - - -控制在插入时是否优化行顺序,以提高新插入表分片的可压缩性。 - -仅对普通的 MergeTree 引擎表生效。对专用的 MergeTree 引擎表(例如 CollapsingMergeTree)不起作用。 - -MergeTree 表(可选地)会使用[压缩编解码器](/sql-reference/statements/create/table#column_compression_codec)进行压缩。 -像 LZ4 和 ZSTD 这样的通用压缩编解码器,如果数据呈现出明显模式,则可以实现最大压缩率。 -相同值的长连续区间通常压缩效果很好。 - -如果启用了此设置,ClickHouse 会尝试在新插入的分片中,以一种行顺序来存储数据,从而最小化新表分片各列中的相同值连续区间的数量。 -换句话说,相同值连续区间数量少意味着单个区间长度较长,因而更易压缩。 - -寻找最优行顺序在计算上是不可行的(NP 难问题)。 -因此,ClickHouse 使用启发式方法快速找到一种仍能较原始行顺序改善压缩率的行顺序。 - -
- -用于寻找行顺序的启发式方法 - -一般来说,可以任意重排表(或表分片)的行,因为在 SQL 中,不同行顺序的相同表(表分片)是等价的。 - -当为表定义了主键时,这种重排行的自由度会受到限制。 -在 ClickHouse 中,一个主键 `C1, C2, ..., CN` 强制要求表的行按列 `C1`、`C2`、...、`Cn` 排序([聚簇索引](https://en.wikipedia.org/wiki/Database_index#Clustered))。 -结果是,行只能在“等价类”内部重排,也就是说,只能在主键列取值相同的行之间重排。 -直观上,高基数主键(例如涉及 `DateTime64` 时间戳列的主键)会产生很多小的等价类。 -同样,低基数主键的表会产生较少且较大的等价类。 -没有主键的表代表极端情况:只有一个跨越所有行的等价类。 - -等价类越少、规模越大,在重新洗牌行时的自由度就越高。 - -在每个等价类中用于寻找最佳行顺序的启发式方法由 D. Lemire、O. Kaser 在 -[Reordering columns for smaller indexes](https://doi.org/10.1016/j.ins.2011.02.002) 中提出, -其基于按非主键列的基数升序对每个等价类内的行进行排序。 - -该方法包含三个步骤: -1. 基于主键列中的行值找到所有等价类。 -2. 对每个等价类,计算(通常是估算)非主键列的基数。 -3. 对每个等价类,按照非主键列基数的升序对行进行排序。 - -
- -如果启用此设置,插入操作会额外消耗 CPU 以分析并优化新数据的行顺序。 -根据数据特性,预计 INSERT 操作耗时会增加 30-50%。 -LZ4 或 ZSTD 的压缩率平均可提升 20-40%。 - -该设置最适用于没有主键或低基数主键的表,即只有少量不同主键值的表。 -高基数主键(例如涉及 `DateTime64` 类型时间戳列的主键)预计不会从该设置中获益。 - - - -## part_moves_between_shards_delay_seconds {#part_moves_between_shards_delay_seconds} - - - - -在分片之间移动数据部件前后需要等待的时间。 - - - -## part_moves_between_shards_enable {#part_moves_between_shards_enable} - - - - -用于在分片之间移动数据分片(parts)的实验性/尚未完善的功能。不会考虑分片表达式。 - - - -## parts_to_delay_insert {#parts_to_delay_insert} - - -如果单个分区中的活跃 part 数量超过 `parts_to_delay_insert` 的值,`INSERT` 操作会被有意放慢。 - -可能的取值: -- 任意正整数。 - -ClickHouse 会人为地延长执行 `INSERT` 的时间(添加 `sleep` 延时),以便后台合并进程可以以快于新 part 生成速度的节奏合并这些 part。 - - - -## parts_to_throw_insert {#parts_to_throw_insert} - - -如果单个分区中的活动 part 数量超过 -`parts_to_throw_insert` 的取值,`INSERT` 会被中断,并抛出 `Too many -parts (N). Merges are processing significantly slower than inserts` -异常。 - -可能的取值: -- 任意正整数。 - -为了在执行 `SELECT` 查询时获得最佳性能,需要尽量减少被处理的 part 数量,参见 [Merge Tree](/development/architecture#merge-tree)。 - -在 23.6 版本之前,该设置的默认值为 300。您可以将其设置为更高的值,以降低触发 `Too many parts` -错误的概率,但同时可能会降低 `SELECT` 的性能。此外,如果出现合并问题(例如由于磁盘空间不足),相比原先默认的 300,您会更晚察觉到该问题。 - - - - -## prefer_fetch_merged_part_size_threshold {#prefer_fetch_merged_part_size_threshold} - - -如果各个数据部分的大小之和超过该阈值,并且自复制日志条目创建以来的时间大于 `prefer_fetch_merged_part_time_threshold`,则优先从副本获取已合并的数据部分,而不是在本地执行合并。这样可以加速耗时较长的合并操作。 - -可能的取值: -- 任意正整数。 - - - -## prefer_fetch_merged_part_time_threshold {#prefer_fetch_merged_part_time_threshold} - - -如果从复制日志(ClickHouse Keeper 或 ZooKeeper)条目创建起经过的时间超过此阈值,并且这些 part 的大小总和大于 `prefer_fetch_merged_part_size_threshold`,则优先从副本拉取已合并的 part,而不是在本地执行合并。这样可以加速耗时很长的合并过程。 - -可能的取值: -- 任意正整数。 - - - -## prewarm_mark_cache {#prewarm_mark_cache} - -如果设置为 true,则会在插入、合并、拉取以及服务器启动时,通过将标记保存到标记缓存中来预热标记缓存。 - - - -## prewarm_primary_key_cache {#prewarm_primary_key_cache} - - - -如果为 true,则会在插入、合并、获取以及服务器启动时,将 marks 保存到 mark cache 中,以预热主键索引缓存。 - - - -## primary_key_compress_block_size {#primary_key_compress_block_size} - - -主压缩块的大小,即实际进行压缩的数据块大小。 - - - -## primary_key_compression_codec {#primary_key_compression_codec} - - -用于主键数据的压缩编解码器。由于主键通常足够小且会被缓存,因此默认压缩编解码器为 ZSTD(3)。 - - - -## primary_key_lazy_load {#primary_key_lazy_load} - -在首次使用时才将主键加载到内存中,而不是在表初始化期间加载。 -在存在大量表的情况下,这可以节省内存。 - - - -## primary_key_ratio_of_unique_prefix_values_to_skip_suffix_columns {#primary_key_ratio_of_unique_prefix_values_to_skip_suffix_columns} - - -如果在某个数据片段中,主键某一列的取值发生变化的次数占比至少达到该比例,则跳过在内存中加载其后续列。这样可以通过不加载主键中不必要的列来节省内存占用。 - - - -## ratio_of_defaults_for_sparse_serialization - - - -列中 *默认* 值数量与 *所有* 值数量的最小比率。将此值设置为特定数值后,该列将使用稀疏序列化方式进行存储。 - -如果一列是稀疏的(大部分值为零),ClickHouse 可以将其编码为稀疏格式并自动优化计算——在查询期间,无需对数据进行完全解压缩。要启用稀疏序列化,需要将 `ratio_of_defaults_for_sparse_serialization` -设置为小于 1.0。若该值大于或等于 1.0,则该列始终会以常规的完整序列化方式写入。 - -可能的取值范围: - -* 在 `0` 和 `1` 之间的浮点数,用于启用稀疏序列化 -* 如果不希望使用稀疏序列化,则设置为 `1.0`(或更大) - -**示例** - -注意下表中的 `s` 列在 95% 的行中都是空字符串。在 `my_regular_table` 中我们不使用稀疏序列化,而在 -`my_sparse_table` 中我们将 `ratio_of_defaults_for_sparse_serialization` 设置为 -0.95: - -```sql -CREATE TABLE my_regular_table -( -`id` UInt64, -`s` String -) -ENGINE = MergeTree -ORDER BY id; - -INSERT INTO my_regular_table -SELECT -number AS id, -number % 20 = 0 ? toString(number): '' AS s -FROM -numbers(10000000); - - -CREATE TABLE my_sparse_table -( -`id` UInt64, -`s` String -) -ENGINE = MergeTree -ORDER BY id -SETTINGS ratio_of_defaults_for_sparse_serialization = 0.95; - -INSERT INTO my_sparse_table -SELECT -number, -number % 20 = 0 ? toString(number): '' -FROM -numbers(10000000); -``` - -注意,`my_sparse_table` 中的 `s` 列占用的磁盘存储空间更少: - -```sql -SELECT table, name, data_compressed_bytes, data_uncompressed_bytes FROM system.columns -WHERE table LIKE 'my_%_table'; -``` - -```response -┌─table────────────┬─name─┬─data_compressed_bytes─┬─data_uncompressed_bytes─┐ -│ my_regular_table │ id │ 37790741 │ 75488328 │ -│ my_regular_table │ s │ 2451377 │ 12683106 │ -│ my_sparse_table │ id │ 37790741 │ 75488328 │ -│ my_sparse_table │ s │ 2283454 │ 9855751 │ -└──────────────────┴──────┴───────────────────────┴─────────────────────────┘ -``` - -您可以通过查看 `system.parts_columns` 表中的 `serialization_kind` 列,来验证某列是否使用稀疏编码: - -```sql -SELECT column, serialization_kind FROM system.parts_columns -WHERE table LIKE 'my_sparse_table'; -``` - -您可以通过稀疏序列化查看 `s` 中哪些部分被存储: - -```response -┌─column─┬─serialization_kind─┐ -│ id │ Default │ -│ s │ Default │ -│ id │ Default │ -│ s │ Default │ -│ id │ Default │ -│ s │ Sparse │ -│ id │ Default │ -│ s │ Sparse │ -│ id │ Default │ -│ s │ Sparse │ -│ id │ Default │ -│ s │ Sparse │ -│ id │ Default │ -│ s │ Sparse │ -│ id │ Default │ -│ s │ Sparse │ -│ id │ Default │ -│ s │ Sparse │ -│ id │ Default │ -│ s │ Sparse │ -│ id │ Default │ -│ s │ Sparse │ -└────────┴────────────────────┘ -``` - - -## reduce_blocking_parts_sleep_ms {#reduce_blocking_parts_sleep_ms} - - - - -仅在 ClickHouse Cloud 中可用。表示在没有任何范围被删除或替换的情况下,再次尝试减少阻塞部分之前需要等待的最短时间。较低的配置值会更频繁地触发 `background_schedule_pool` 中的任务,从而在大规模集群中产生大量发往 ZooKeeper 的请求。 - - - -## refresh_parts_interval {#refresh_parts_interval} - - - - -如果该值大于零,则会从底层文件系统刷新数据部件列表,以检查数据是否在后台已被更新。 -只有当表位于只读磁盘上时(这意味着这是一个只读副本,而数据由另一个副本写入)时,才能设置此参数。 - - - -## refresh_statistics_interval {#refresh_statistics_interval} - - - - -刷新统计信息缓存的时间间隔(以秒为单位)。若设置为 0,则将禁用缓存刷新。 - - - -## remote_fs_execute_merges_on_single_replica_time_threshold {#remote_fs_execute_merges_on_single_replica_time_threshold} - - -当该设置的值大于零时,如果合并后的数据部件位于共享存储上,则只有一个副本会立即执行该合并。 - -:::note -零拷贝复制尚未准备好用于生产环境。 -在 ClickHouse 版本 22.8 及更高版本中,零拷贝复制默认是禁用的。 - -不建议在生产环境中使用此功能。 -::: - -可能的取值: -- 任意正整数。 - - - -## remote_fs_zero_copy_path_compatible_mode {#remote_fs_zero_copy_path_compatible_mode} - - - - -在转换过程中以兼容模式运行零拷贝功能。 - - - -## remote_fs_zero_copy_zookeeper_path {#remote_fs_zero_copy_zookeeper_path} - - - - -用于存储与表无关的零拷贝信息的 ZooKeeper 路径。 - - - -## remove_empty_parts {#remove_empty_parts} - - -在通过 TTL、变更(mutation)或折叠合并(collapsing merge)算法清理后,删除空的分片(parts)。 - - - -## remove_rolled_back_parts_immediately {#remove_rolled_back_parts_immediately} - - - - -针对尚未完成的实验性功能的设置。 - - - -## remove_unused_patch_parts {#remove_unused_patch_parts} - - - - -在后台删除已应用到所有活动数据片段的补丁片段。 - - - -## replace_long_file_name_to_hash {#replace_long_file_name_to_hash} - - -如果列对应的文件名过长(超过 `max_file_name_length` 字节),则将其替换为 SipHash128。 - - - -## replicated_can_become_leader {#replicated_can_become_leader} - - -如果为 true,则此节点上的复制表副本会尝试竞争成为 leader。 - -可能的取值: -- `true` -- `false` - - - -## replicated_deduplication_window {#replicated_deduplication_window} - - - - -ClickHouse Keeper 为最近插入的若干数据块保存哈希值,用于检查是否存在重复。 - -可能的取值: -- 任意正整数。 -- 0(禁用去重) - -`Insert` 命令会创建一个或多个数据块(parts)。对于[插入去重](../../engines/table-engines/mergetree-family/replication.md),在写入复制表时,ClickHouse 会将创建的各个 part 的哈希值写入 ClickHouse Keeper。仅为最近的 `replicated_deduplication_window` 个数据块保存哈希值。最早的哈希值会从 ClickHouse Keeper 中移除。 - -将 `replicated_deduplication_window` 设置为较大的数值会减慢 `Insert` 操作,因为需要比较的条目更多。哈希值是根据字段名称与类型的组合以及插入的 part 数据(字节流)计算得到的。 - - - -## replicated_deduplication_window_for_async_inserts {#replicated_deduplication_window_for_async_inserts} - - -此设置指定 ClickHouse Keeper 为最近异步插入的多少个数据块保存哈希和,用于检查是否存在重复。 - -可能的取值: -- 任意正整数。 -- 0(对 `async_inserts` 禁用去重) - -[Async Insert](/operations/settings/settings#async_insert) 命令会被缓存在一个或多个数据块(part)中。对于[插入去重](/engines/table-engines/mergetree-family/replication),在写入复制表时,ClickHouse 会将每次插入的哈希和写入 ClickHouse Keeper。仅为最近的 `replicated_deduplication_window_for_async_inserts` 个数据块存储哈希和。较旧的哈希和会从 ClickHouse Keeper 中删除。 -较大的 `replicated_deduplication_window_for_async_inserts` 会减慢 `Async Inserts` 的速度,因为需要比较更多的条目。 -哈希和是根据字段名和类型的组合以及插入的数据本身(字节流)计算得到的。 - - - -## replicated_deduplication_window_seconds {#replicated_deduplication_window_seconds} - - - - -插入的数据块的哈希和在被从 ClickHouse Keeper 中移除之前所经过的秒数。 - -可能的取值: -- 任意正整数。 - -与 [replicated_deduplication_window](#replicated_deduplication_window) 类似, -`replicated_deduplication_window_seconds` 指定为插入去重而保存数据块哈希和的时间长度。早于 -`replicated_deduplication_window_seconds` 的哈希和会从 ClickHouse Keeper 中移除, -即使它们小于 `replicated_deduplication_window`。 - -该时间是相对于最新一条记录的时间,而不是物理时间(wall time)。如果这是唯一的一条记录,则会一直被保存。 - - - -## replicated_deduplication_window_seconds_for_async_inserts {#replicated_deduplication_window_seconds_for_async_inserts} - - -在经过指定秒数后,异步插入(async inserts)的哈希值将会从 ClickHouse Keeper 中移除。 - -可能的取值: -- 任意正整数。 - -与 [replicated_deduplication_window_for_async_inserts](#replicated_deduplication_window_for_async_inserts) 类似,`replicated_deduplication_window_seconds_for_async_inserts` 用于指定在异步插入去重中保存数据块哈希值的时间窗口。早于 `replicated_deduplication_window_seconds_for_async_inserts` 的哈希值会从 ClickHouse Keeper 中移除,即使当前保存的哈希值数量仍少于 `replicated_deduplication_window_for_async_inserts` 所配置的块数窗口。 - -该时间是相对于最新记录的时间,而不是实际墙上时间(wall time)。如果只有这一条记录,它将会被永久保留。 - - - -## replicated_fetches_http_connection_timeout {#replicated_fetches_http_connection_timeout} - -已废弃的设置,无任何效果。 -## replicated_fetches_http_receive_timeout {#replicated_fetches_http_receive_timeout} - -已废弃的设置,无任何效果。 -## replicated_fetches_http_send_timeout {#replicated_fetches_http_send_timeout} - -已废弃的设置,无任何效果。 -## replicated_max_mutations_in_one_entry {#replicated_max_mutations_in_one_entry} - - -在一个 MUTATE_PART 条目中可合并并一同执行的变更命令的最大数量(0 表示不限制) - - - -## replicated_max_parallel_fetches {#replicated_max_parallel_fetches} - -已废弃的设置,无任何作用。 -## replicated_max_parallel_fetches_for_host {#replicated_max_parallel_fetches_for_host} - -已废弃的设置,无任何作用。 -## replicated_max_parallel_fetches_for_table {#replicated_max_parallel_fetches_for_table} - -已废弃的设置,无任何作用。 -## replicated_max_parallel_sends {#replicated_max_parallel_sends} - -已废弃的设置,无任何作用。 -## replicated_max_parallel_sends_for_table {#replicated_max_parallel_sends_for_table} - -已废弃的设置,无任何作用。 -## replicated_max_ratio_of_wrong_parts {#replicated_max_ratio_of_wrong_parts} - - -如果错误 part 数量占 part 总数的比例小于该值,则允许启动。 - -可能的取值: -- Float,0.0 - 1.0 - - - -## search_orphaned_parts_disks {#search_orphaned_parts_disks} - - - - -ClickHouse 在执行任何 ATTACH 或 CREATE TABLE 操作时都会扫描所有磁盘上的孤立数据分片(orphaned parts), -以避免遗漏位于未定义(未包含在策略中的)磁盘上的数据分片。 -孤立数据分片通常源于潜在不安全的存储重配置操作,例如将某个磁盘从 storage policy 中移除。 -该设置通过磁盘特征来限定需要搜索的磁盘范围。 - -可能的取值: -- any - 范围不受限制。 -- local - 范围仅限本地磁盘。 -- none - 空范围,不进行搜索。 - - - -## serialization_info_version {#serialization_info_version} - - - - -写入 `serialization.json` 时使用的序列化信息版本。 -在集群升级期间,此设置是保持兼容性的必要条件。 - -可能的取值: -- `basic` - 基本格式。 -- `with_types` - 带有额外 `types_serialization_versions` 字段的格式,允许为每种类型设置单独的序列化版本。 -这使得诸如 `string_serialization_version` 之类的设置能够生效。 - -在滚动升级期间,将其设置为 `basic`,以便新服务器生成的 -数据分片与旧服务器兼容。升级完成后, -切换为 `with_types` 以启用逐类型的序列化版本。 - - - -## shared_merge_tree_activate_coordinated_merges_tasks {#shared_merge_tree_activate_coordinated_merges_tasks} - - - - - - -启用对协调合并任务的重新调度。即使在 `shared_merge_tree_enable_coordinated_merges=0` 时也依然有用,因为这会收集合并协调器的统计信息,并有助于缓解冷启动问题。 - - - -## shared_merge_tree_create_per_replica_metadata_nodes {#shared_merge_tree_create_per_replica_metadata_nodes} - - - - -允许在 ZooKeeper 中为每个副本单独创建 /metadata 和 /columns 节点。 -仅在 ClickHouse Cloud 中可用。 - - - -## shared_merge_tree_disable_merges_and_mutations_assignment {#shared_merge_tree_disable_merges_and_mutations_assignment} - - -停止为 shared merge tree 分配合并任务。仅在 ClickHouse Cloud 中可用。 - - - -## shared_merge_tree_empty_partition_lifetime {#shared_merge_tree_empty_partition_lifetime} - - - - -在 Keeper 中保留不包含任何数据部分(part)的分区的时间(秒)。 - - - -## shared_merge_tree_enable_automatic_empty_partitions_cleanup {#shared_merge_tree_enable_automatic_empty_partitions_cleanup} - - - - -启用自动清理空分区的 Keeper 条目。 - - - -## shared_merge_tree_enable_coordinated_merges {#shared_merge_tree_enable_coordinated_merges} - - - - - - -启用协调的合并策略 - - - -## shared_merge_tree_enable_keeper_parts_extra_data {#shared_merge_tree_enable_keeper_parts_extra_data} - - - - - - -启用将属性写入虚拟数据片段,并在 keeper 中提交数据块 - - - -## shared_merge_tree_enable_outdated_parts_check {#shared_merge_tree_enable_outdated_parts_check} - - - - -启用对过期分片的检查。仅在 ClickHouse Cloud 中可用。 - - - -## shared_merge_tree_idle_parts_update_seconds {#shared_merge_tree_idle_parts_update_seconds} - - - - -在共享 MergeTree 中未由 ZooKeeper 监视触发时,用于更新数据分片的时间间隔(以秒为单位)。仅在 ClickHouse Cloud 中可用。 - - - -## shared_merge_tree_initial_parts_update_backoff_ms {#shared_merge_tree_initial_parts_update_backoff_ms} - - - - -数据分片更新的初始退避时间。仅在 ClickHouse Cloud 中提供 - - - -## shared_merge_tree_interserver_http_connection_timeout_ms {#shared_merge_tree_interserver_http_connection_timeout_ms} - - - - -用于服务器间 HTTP 连接的超时设置。仅在 ClickHouse Cloud 中可用。 - - - -## shared_merge_tree_interserver_http_timeout_ms {#shared_merge_tree_interserver_http_timeout_ms} - - - - -用于服务器之间 HTTP 通信的超时设置。仅在 ClickHouse Cloud 中可用。 - - - -## shared_merge_tree_leader_update_period_random_add_seconds {#shared_merge_tree_leader_update_period_random_add_seconds} - - - - -在 0 到 x 秒之间均匀随机选取一个值,并将其加到 shared_merge_tree_leader_update_period 上,以避免惊群效应(thundering herd effect)。仅在 ClickHouse Cloud 中可用。 - - - -## shared_merge_tree_leader_update_period_seconds {#shared_merge_tree_leader_update_period_seconds} - - - - -用于重新检查负责数据片段更新的主节点的最长时间间隔。仅在 ClickHouse Cloud 中可用。 - - - -## shared_merge_tree_max_outdated_parts_to_process_at_once {#shared_merge_tree_max_outdated_parts_to_process_at_once} - - - - -leader 在一次 HTTP 请求中尝试确认可删除的过期部件的最大数量。仅在 ClickHouse Cloud 中可用。 - - - -## shared_merge_tree_max_parts_update_backoff_ms {#shared_merge_tree_max_parts_update_backoff_ms} - - - - -数据部分更新的最大退避时长。仅在 ClickHouse Cloud 中可用 - - - -## shared_merge_tree_max_parts_update_leaders_in_total {#shared_merge_tree_max_parts_update_leaders_in_total} - - - - -分片更新 leader 的数量上限。仅在 ClickHouse Cloud 中可用 - - - -## shared_merge_tree_max_parts_update_leaders_per_az {#shared_merge_tree_max_parts_update_leaders_per_az} - - - - -part 更新 leader 的最大数量。仅在 ClickHouse Cloud 中可用。 - - - -## shared_merge_tree_max_replicas_for_parts_deletion {#shared_merge_tree_max_replicas_for_parts_deletion} - - - - -参与数据 part 删除(清理线程)的最大副本数。仅在 ClickHouse Cloud 中可用。 - - - -## shared_merge_tree_max_replicas_to_merge_parts_for_each_parts_range {#shared_merge_tree_max_replicas_to_merge_parts_for_each_parts_range} - - - - -尝试分配可能存在冲突的合并任务的最大副本数(用于避免在合并任务分配中出现重复冲突)。0 表示禁用。仅在 ClickHouse Cloud 中可用 - - - -## shared_merge_tree_max_suspicious_broken_parts {#shared_merge_tree_max_suspicious_broken_parts} - - - - -SMT 中可疑损坏的数据部分数量上限,若超过该值则禁止自动分离。 - - - -## shared_merge_tree_max_suspicious_broken_parts_bytes {#shared_merge_tree_max_suspicious_broken_parts_bytes} - - - - -SMT 所有损坏数据部分的最大总大小;超过该值时,将禁止自动分离。 - - - -## shared_merge_tree_memo_ids_remove_timeout_seconds {#shared_merge_tree_memo_ids_remove_timeout_seconds} - - - - -插入记忆化 ID 的保留时长,用于在重试插入时避免出现不正确的操作。仅在 ClickHouse Cloud 中可用。 - - - -## shared_merge_tree_merge_coordinator_election_check_period_ms {#shared_merge_tree_merge_coordinator_election_check_period_ms} - - - - - - -合并协调器选举线程连续两次运行之间的时间间隔 - - - -## shared_merge_tree_merge_coordinator_factor {#shared_merge_tree_merge_coordinator_factor} - - - - - - -用于调整协调器线程延迟的时间因子 - - - -## shared_merge_tree_merge_coordinator_fetch_fresh_metadata_period_ms {#shared_merge_tree_merge_coordinator_fetch_fresh_metadata_period_ms} - - - - - - -合并协调器与 ZooKeeper 同步以获取最新元数据的时间间隔 - - - -## shared_merge_tree_merge_coordinator_max_merge_request_size {#shared_merge_tree_merge_coordinator_max_merge_request_size} - - - - - - -协调器一次可以向 MergerMutator 请求的合并操作数量 - - - -## shared_merge_tree_merge_coordinator_max_period_ms {#shared_merge_tree_merge_coordinator_max_period_ms} - - - - - - -合并协调器线程两次运行之间的最大时间间隔 - - - -## shared_merge_tree_merge_coordinator_merges_prepare_count {#shared_merge_tree_merge_coordinator_merges_prepare_count} - - - - - - -协调器需准备并分发到各 worker 的合并项数量 - - - -## shared_merge_tree_merge_coordinator_min_period_ms {#shared_merge_tree_merge_coordinator_min_period_ms} - - - - - - -合并协调器线程两次执行之间的最小时间间隔 - - - -## shared_merge_tree_merge_worker_fast_timeout_ms {#shared_merge_tree_merge_worker_fast_timeout_ms} - - - - - - -在执行立即操作后需要更新其状态时,merge worker 线程使用的超时时间。 - - - -## shared_merge_tree_merge_worker_regular_timeout_ms {#shared_merge_tree_merge_worker_regular_timeout_ms} - - - - - - -合并工作线程两次运行之间的时间间隔 - - - -## shared_merge_tree_outdated_parts_group_size {#shared_merge_tree_outdated_parts_group_size} - - - - -用于清理过期分片时,会将多少副本分配到同一个 Rendezvous 哈希分组中。 -仅在 ClickHouse Cloud 中可用。 - - - -## shared_merge_tree_partitions_hint_ratio_to_reload_merge_pred_for_mutations {#shared_merge_tree_partitions_hint_ratio_to_reload_merge_pred_for_mutations} - - -当 `/` 的比例高于该设置值时,将在合并/变更选择任务中重新加载合并谓词。仅在 ClickHouse Cloud 中可用。 - - - -## shared_merge_tree_parts_load_batch_size {#shared_merge_tree_parts_load_batch_size} - - -每次调度的获取分片元数据任务数量。仅在 ClickHouse Cloud 中可用 - - - -## shared_merge_tree_postpone_next_merge_for_locally_merged_parts_ms {#shared_merge_tree_postpone_next_merge_for_locally_merged_parts_ms} - - - - -在不启动包含该数据部分的新合并操作的前提下,保留本地已合并数据部分的时间。 -这会为其他副本提供时间来获取该数据部分并启动相应的合并操作。 -仅在 ClickHouse Cloud 中可用。 - - - -## shared_merge_tree_postpone_next_merge_for_locally_merged_parts_rows_threshold {#shared_merge_tree_postpone_next_merge_for_locally_merged_parts_rows_threshold} - - - - -在本地合并完成后,用于推迟立即为其分配下一次合并任务的数据部分最小大小(按行数计)。仅在 ClickHouse Cloud 中可用。 - - - -## shared_merge_tree_range_for_merge_window_size {#shared_merge_tree_range_for_merge_window_size} - - - - -在启动包含该数据片段的新合并之前,保留本地已合并数据片段的时间。这样可以让其他副本有机会拉取该数据片段并启动相同的合并操作。 -仅在 ClickHouse Cloud 中可用。 - - - -## shared_merge_tree_read_virtual_parts_from_leader {#shared_merge_tree_read_virtual_parts_from_leader} - - - - -在可能的情况下,从主节点读取虚拟数据分片。仅在 ClickHouse Cloud 中可用。 - - - -## shared_merge_tree_try_fetch_part_in_memory_data_from_replicas {#shared_merge_tree_try_fetch_part_in_memory_data_from_replicas} - - - - -如果启用,所有副本都会尝试从已存在相应数据的其他副本中获取数据片段的内存数据(例如主键、分区信息等)。 - - - -## shared_merge_tree_update_replica_flags_delay_ms {#shared_merge_tree_update_replica_flags_delay_ms} - - - - -副本根据后台计划任务尝试重新加载其标志的时间间隔。 - - - -## shared_merge_tree_use_metadata_hints_cache {#shared_merge_tree_use_metadata_hints_cache} - - - - -启用从其他副本的内存缓存中请求文件系统缓存提示。仅在 ClickHouse Cloud 中可用。 - - - -## shared_merge_tree_use_outdated_parts_compact_format {#shared_merge_tree_use_outdated_parts_compact_format} - - - - -对 outdated parts 使用紧凑格式:降低 Keeper 负载,改善 outdated parts 的处理。仅在 ClickHouse Cloud 中可用。 - - - -## shared_merge_tree_use_too_many_parts_count_from_virtual_parts {#shared_merge_tree_use_too_many_parts_count_from_virtual_parts} - - - - -启用后,“过多数据片段计数器”将依赖 Keeper 中的共享数据,而不是本地副本状态。仅在 ClickHouse Cloud 中可用。 - - - -## shared_merge_tree_virtual_parts_discovery_batch {#shared_merge_tree_virtual_parts_discovery_batch} - - - - - - -一次批处理中应包含多少个分区发现操作 - - - -## simultaneous_parts_removal_limit {#simultaneous_parts_removal_limit} - - -如果存在大量过期的数据片段,清理线程会在一次迭代中尝试最多删除 -`simultaneous_parts_removal_limit` 个数据片段。 -将 `simultaneous_parts_removal_limit` 设置为 `0` 表示不设上限。 - - - -## sleep_before_commit_local_part_in_replicated_table_ms {#sleep_before_commit_local_part_in_replicated_table_ms} - - -仅用于测试。请不要更改。 - - - -## sleep_before_loading_outdated_parts_ms {#sleep_before_loading_outdated_parts_ms} - - -仅用于测试。请勿修改。 - - - -## storage_policy {#storage_policy} - - -存储磁盘策略名称 - - - -## string_serialization_version {#string_serialization_version} - - - - -控制顶层 `String` 列的序列化格式。 - -此设置仅在 `serialization_info_version` 设置为 "with_types" 时生效。 -启用后,顶层 `String` 列会使用单独的 `.size` -子列来存储字符串长度,而不是内联存储。这样可以启用实际的 `.size` -子列,并有助于提升压缩效率。 - -嵌套的 `String` 类型(例如位于 `Nullable`、`LowCardinality`、`Array` 或 `Map` 内) -不会受到影响,除非它们出现在 `Tuple` 中。 - -可能的取值: - -- `single_stream` — 使用带内联长度信息的标准序列化格式。 -- `with_size_stream` — 为顶层 `String` 列使用单独的大小流(size stream)。 - - - -## table_disk {#table_disk} - - - - -这是表级磁盘,路径/端点应指向表数据,而不是数据库数据。只能用于 s3_plain/s3_plain_rewritable/web。 - - - -## temporary_directories_lifetime {#temporary_directories_lifetime} - - -保留以 `tmp_` 为前缀的目录的时间(以秒为单位)。不建议将此值设置得过低, -否则在该设置值过小时,合并(merge)和变更(mutation)操作可能无法正常工作。 - - - -## try_fetch_recompressed_part_timeout {#try_fetch_recompressed_part_timeout} - - -在开始执行带重新压缩的合并之前的超时时间(秒)。在此期间,ClickHouse 会尝试从被指派执行该带重新压缩合并任务的副本中获取已重新压缩的分片。 - -在大多数情况下,重新压缩较为耗时,因此在该超时时间结束前不会启动带重新压缩的合并,而是优先尝试从被指派执行此带重新压缩合并任务的副本中获取已重新压缩的分片。 - -可能的取值: -- 任意正整数。 - - - -## ttl_only_drop_parts {#ttl_only_drop_parts} - - -控制在 MergeTree 表中,当某个数据片段(part)中的所有行都根据其 `TTL` 设置过期时,该数据片段是否会被整体删除。 - -当 `ttl_only_drop_parts` 被禁用(默认)时,只会删除基于其 `TTL` 设置已过期的行。 - -当 `ttl_only_drop_parts` 被启用时,如果某个数据片段中的所有行都根据其 `TTL` 设置过期,则整个数据片段会被删除。 - - - -## use_adaptive_write_buffer_for_dynamic_subcolumns {#use_adaptive_write_buffer_for_dynamic_subcolumns} - - -允许在写入动态子列时使用自适应写缓冲区,以减少内存占用 - - - -## use_async_block_ids_cache {#use_async_block_ids_cache} - - -如果为 true,则会缓存异步插入的哈希和。 - -可能的取值: -- `true` -- `false` - -一个包含多个异步插入的块会生成多个哈希和。 -当部分插入是重复时,Keeper 在一次 RPC 中只会返回一个 -重复的哈希和,这会导致不必要的 RPC 重试。 -该缓存会监听 Keeper 中哈希和路径上的变更。如果在 Keeper 中检测到更新, -缓存会尽快更新,从而可以在内存中过滤掉重复的插入。 - - - -## use_compact_variant_discriminators_serialization {#use_compact_variant_discriminators_serialization} - - -为 `Variant` 数据类型中判别器的二进制序列化启用紧凑模式。 -当某个数据分片(part)中主要只有单一变体或包含大量 `NULL` 值时,此模式可以显著减少存储判别器所需的内存。 - - - -## use_const_adaptive_granularity {#use_const_adaptive_granularity} - - -始终对整个 part 使用固定 granularity。这样可以减少存储索引 granularity 所需的内存。在规模极大且表非常“窄”的工作负载下可能会有用。 - - - -## use_metadata_cache {#use_metadata_cache} - -已弃用的设置,对行为无任何影响。 -## use_minimalistic_checksums_in_zookeeper {#use_minimalistic_checksums_in_zookeeper} - - -在 ZooKeeper 中为数据分片校验和使用更精简的格式(几十字节),而不是普通格式(几十 KB)。在启用之前,请确认所有副本都支持新格式。 - - - -## use_minimalistic_part_header_in_zookeeper {#use_minimalistic_part_header_in_zookeeper} - - -在 ZooKeeper 中存储数据分片头信息的方式。启用后,ZooKeeper 将存储更少的数据。详细信息请参阅[此处](/operations/server-configuration-parameters/settings#use_minimalistic_part_header_in_zookeeper)。 - - - -## use_primary_key_cache {#use_primary_key_cache} - - - -对主键索引使用缓存, -而不是将所有索引都保存在内存中。对于非常大的表,这会很有用 - - - -## vertical_merge_algorithm_min_bytes_to_activate {#vertical_merge_algorithm_min_bytes_to_activate} - - -在合并数据片段时触发垂直合并算法所需的未压缩数据的大致最小大小(以字节为单位)。 - - - -## vertical_merge_algorithm_min_columns_to_activate {#vertical_merge_algorithm_min_columns_to_activate} - - -用于激活 Vertical 合并算法的最小非主键列数量。 - - - -## vertical_merge_algorithm_min_rows_to_activate {#vertical_merge_algorithm_min_rows_to_activate} - - -激活 Vertical 合并算法所需的合并数据部分中行数的(近似)最小总和。 - - - -## vertical_merge_optimize_lightweight_delete {#vertical_merge_optimize_lightweight_delete} - - - - -如果为 true,则会在垂直合并过程中对轻量级删除进行优化。 - - - -## vertical_merge_remote_filesystem_prefetch {#vertical_merge_remote_filesystem_prefetch} - - -如果为 true,则在合并过程中会为下一列预取来自远程文件系统的数据。 - - - -## wait_for_unique_parts_send_before_shutdown_ms {#wait_for_unique_parts_send_before_shutdown_ms} - - -在关闭前,表会等待指定的时间,以便其他副本从当前副本拉取其独有的数据分片(仅存在于当前副本的分片)(0 表示禁用该等待机制)。 - - - -## write_ahead_log_bytes_to_fsync {#write_ahead_log_bytes_to_fsync} - -已废弃的设置项,不执行任何操作。 -## write_ahead_log_interval_ms_to_fsync {#write_ahead_log_interval_ms_to_fsync} - -已废弃的设置项,不执行任何操作。 -## write_ahead_log_max_bytes {#write_ahead_log_max_bytes} - -已废弃的设置项,不执行任何操作。 -## write_final_mark {#write_final_mark} - -已废弃的设置项,不执行任何操作。 -## write_marks_for_substreams_in_compact_parts {#write_marks_for_substreams_in_compact_parts} - - - - -启用后,将在 Compact 部分中为每个子流写入标记,而不是为每个列写入标记。 -这使得可以高效地从数据部分中读取单独的子列。 - -例如,列 `t Tuple(a String, b UInt32, c Array(Nullable(UInt32)))` 会被序列化为如下子流: -- `t.a`:元组元素 `a` 的 String 数据 -- `t.b`:元组元素 `b` 的 UInt32 数据 -- `t.c.size0`:元组元素 `c` 的数组大小 -- `t.c.null`:元组元素 `c` 的嵌套数组元素的空值映射 -- `t.c`:元组元素 `c` 的嵌套数组元素的 UInt32 数据 - -当启用该设置时,我们会为这 5 个子流中的每一个写入标记,这意味着如果需要,我们就能够从粒度中分别读取每个独立子流的数据。例如,如果我们只想读取子列 `t.c`,则只会读取子流 `t.c.size0`、`t.c.null` 和 `t.c` 的数据,而不会读取子流 `t.a` 和 `t.b` 的数据。当禁用该设置时,我们只会为顶层列 `t` 写入一个标记,这意味着即使只需要某些子流的数据,也始终会从粒度中读取整个列的数据。 - - - -## zero_copy_concurrent_part_removal_max_postpone_ratio {#zero_copy_concurrent_part_removal_max_postpone_ratio} - - -为获得更小且相互独立的区间,允许推迟删除的顶层数据片段的最大百分比。通常不建议修改该设置。 - - - -## zero_copy_concurrent_part_removal_max_split_times {#zero_copy_concurrent_part_removal_max_split_times} - - -用于将彼此独立的过期 part 范围递归拆分为更小子范围的最大深度。建议不要修改。 - - - -## zero_copy_merge_mutation_min_parts_size_sleep_before_lock {#zero_copy_merge_mutation_min_parts_size_sleep_before_lock} - - -如果启用了零拷贝复制功能,则会在尝试加锁之前,根据参与合并或变更(mutation)的数据分片大小随机休眠一段时间。 - - - -## zero_copy_merge_mutation_min_parts_size_sleep_no_scale_before_lock {#zero_copy_merge_mutation_min_parts_size_sleep_no_scale_before_lock} - - - - -如果启用了零拷贝复制,在尝试获取合并或变更操作的锁之前,将随机休眠一段时间(最长 500 ms)。 - - - -## zookeeper_session_expiration_check_period {#zookeeper_session_expiration_check_period} - - -ZooKeeper 会话过期检查的时间间隔(秒)。 - -可能的取值: -- 任意正整数。 - diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/settings/settings-formats.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/settings/settings-formats.md index 28c8686259b..65097d36f1a 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/settings/settings-formats.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/settings/settings-formats.md @@ -1,2802 +1,10 @@ --- -title: '格式设置' +description: '与格式相关的设置' sidebar_label: '格式设置' slug: /operations/settings/formats +title: '格式设置' toc_max_heading_level: 2 -description: '控制输入和输出格式的设置。' doc_type: 'reference' --- -import ExperimentalBadge from '@theme/badges/ExperimentalBadge'; -import BetaBadge from '@theme/badges/BetaBadge'; -import SettingsInfoBlock from '@theme/SettingsInfoBlock/SettingsInfoBlock'; -import VersionHistory from '@theme/VersionHistory/VersionHistory'; - -{/* 自动生成的 */ } - -这些设置是从[源文件](https://github.com/ClickHouse/ClickHouse/blob/master/src/Core/FormatFactorySettings.h)自动生成的。 - - -## allow_special_bool_values_inside_variant {#allow_special_bool_values_inside_variant} - - - -允许在 Variant 类型中,将诸如 "on"、"off"、"enable"、"disable" 等特殊文本布尔值解析为 Bool 值。 - - - -## bool_false_representation {#bool_false_representation} - - - -用于在 TSV/CSV/Vertical/Pretty 格式中表示布尔值 false 的文本。 - - - -## bool_true_representation {#bool_true_representation} - - - -在 TSV/CSV/Vertical/Pretty 格式中用于表示 `true` 布尔值的文本。 - - - -## column_names_for_schema_inference {#column_names_for_schema_inference} - - - -在缺少列名的格式中用于模式推断的列名列表。格式:'column1,column2,column3,...' - - - -## cross_to_inner_join_rewrite {#cross_to_inner_join_rewrite} - - - -如果在 WHERE 子句中存在连接表达式,则使用 INNER JOIN 替代逗号连接/CROSS JOIN。取值:0 - 不重写,1 - 若可能则对逗号连接/CROSS JOIN 进行重写,2 - 强制重写所有逗号连接,对 CROSS JOIN 则在可行时重写。 - - - -## date_time_64_output_format_cut_trailing_zeros_align_to_groups_of_thousands {#date_time_64_output_format_cut_trailing_zeros_align_to_groups_of_thousands} - - - -动态去除 datetime64 值末尾的零,将输出精度动态调整为 [0, 3, 6], -分别对应 'seconds'、'milliseconds' 和 'microseconds' - - - -## date_time_input_format {#date_time_input_format} - - - -允许选择日期和时间文本表示形式的解析器。 - -该设置不适用于[日期和时间函数](../../sql-reference/functions/date-time-functions.md)。 - -可能的取值: - -- `'best_effort'` — 启用扩展解析。 - - ClickHouse 可以解析基本的 `YYYY-MM-DD HH:MM:SS` 格式以及所有 [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) 日期和时间格式。例如,`'2018-06-08T01:02:03.000Z'`。 - -- `'best_effort_us'` — 与 `best_effort` 类似(差异见 [parseDateTimeBestEffortUS](../../sql-reference/functions/type-conversion-functions#parsedatetimebesteffortus))。 - -- `'basic'` — 使用基本解析器。 - - ClickHouse 只能解析基本的 `YYYY-MM-DD HH:MM:SS` 或 `YYYY-MM-DD` 格式。例如,`2019-08-20 10:18:56` 或 `2019-08-20`。 - -Cloud 中的默认值:`'best_effort'`。 - -另请参阅: - -- [DateTime 数据类型。](../../sql-reference/data-types/datetime.md) -- [用于处理日期和时间的函数。](../../sql-reference/functions/date-time-functions.md) - - - -## date_time_output_format {#date_time_output_format} - - - -允许选择日期和时间文本表示的不同输出格式。 - -可能的取值: - -- `simple` - 简单输出格式。 - - ClickHouse 以 `YYYY-MM-DD hh:mm:ss` 格式输出日期和时间。例如:`2019-08-20 10:18:56`。时间计算基于该数据类型的时区(如果存在)或服务器时区。 - -- `iso` - ISO 输出格式。 - - ClickHouse 以 [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) `YYYY-MM-DDThh:mm:ssZ` 格式输出日期和时间。例如:`2019-08-20T10:18:56Z`。注意,输出为 UTC(`Z` 表示 UTC)。 - -- `unix_timestamp` - Unix 时间戳输出格式。 - - ClickHouse 以 [Unix 时间戳](https://en.wikipedia.org/wiki/Unix_time) 格式输出日期和时间。例如:`1566285536`。 - -另请参阅: - -- [DateTime 数据类型。](../../sql-reference/data-types/datetime.md) -- [用于处理日期和时间的函数。](../../sql-reference/functions/date-time-functions.md) - - - -## date_time_overflow_behavior {#date_time_overflow_behavior} - - - -定义在将 [Date](../../sql-reference/data-types/date.md)、[Date32](../../sql-reference/data-types/date32.md)、[DateTime](../../sql-reference/data-types/datetime.md)、[DateTime64](../../sql-reference/data-types/datetime64.md) 或整数转换为 Date、Date32、DateTime 或 DateTime64 时,当该值无法在结果类型中表示时的处理行为。 - -可能的取值: - -- `ignore` — 静默忽略溢出,结果未定义。 -- `throw` — 在发生溢出时抛出异常。 -- `saturate` — 对结果进行饱和处理。如果该值小于目标类型可表示的最小值,则结果取该类型可表示的最小值;如果该值大于目标类型可表示的最大值,则结果取该类型可表示的最大值。 - -默认值:`ignore`。 - - - -## dictionary_use_async_executor {#dictionary_use_async_executor} - - - -在多个线程中执行用于读取字典源的管道。仅适用于以本地 ClickHouse 为源的字典。 - - - -## errors_output_format {#errors_output_format} - - - -将错误写入文本输出时使用的格式。 - - - -## exact_rows_before_limit {#exact_rows_before_limit} - - - -启用后,ClickHouse 将会为 `rows_before_limit_at_least` 统计信息提供精确值,但这意味着必须完整读取 LIMIT 之前的所有数据。 - - - -## format_avro_schema_registry_url {#format_avro_schema_registry_url} - - - -对于 AvroConfluent 格式:Confluent Schema Registry 的 URL 地址。 - - - -## format_binary_max_array_size {#format_binary_max_array_size} - - - -在 RowBinary 格式中允许的数组的最大大小。该设置可防止在数据损坏时分配过多内存。0 表示不作限制。 - - - -## format_binary_max_string_size {#format_binary_max_string_size} - - - -RowBinary 格式中 `String` 类型允许的最大大小。用于在数据损坏时防止分配过多内存。`0` 表示不设限制。 - - - -## format_capn_proto_enum_comparising_mode {#format_capn_proto_enum_comparising_mode} - - - -如何在 ClickHouse Enum 和 CapnProto Enum 之间建立映射 - - - -## format_capn_proto_use_autogenerated_schema {#format_capn_proto_use_autogenerated_schema} - - - -在未设置 format_schema 时,使用自动生成的 CapnProto 模式 - - - -## format_csv_allow_double_quotes {#format_csv_allow_double_quotes} - - - -当该设置为 `true` 时,将允许使用双引号括起的字符串。 - - - -## format_csv_allow_single_quotes {#format_csv_allow_single_quotes} - - - -当设置为 true 时,允许使用单引号括起的字符串。 - - - -## format_csv_delimiter {#format_csv_delimiter} - - - -在 CSV 数据中被视为分隔符的字符。如果通过字符串进行设置,则该字符串的长度必须为 1。 - - - -## format_csv_null_representation {#format_csv_null_representation} - - - -自定义 CSV 格式中的 NULL 表示 - - - -## format_custom_escaping_rule {#format_custom_escaping_rule} - - - -字段转义规则(适用于 CustomSeparated 格式) - - - -## format_custom_field_delimiter {#format_custom_field_delimiter} - - - -字段分隔符(用于 CustomSeparated 格式) - - - -## format_custom_result_after_delimiter {#format_custom_result_after_delimiter} - - - -结果集结束后追加的后缀(用于 CustomSeparated 格式) - - - -## format_custom_result_before_delimiter {#format_custom_result_before_delimiter} - - - -结果集前的前缀(用于 CustomSeparated 格式) - - - -## format_custom_row_after_delimiter {#format_custom_row_after_delimiter} - - - -最后一列字段后的分隔符(用于 `CustomSeparated` 格式) - - - -## format_custom_row_before_delimiter {#format_custom_row_before_delimiter} - - - -第一列字段前使用的分隔符(用于 `CustomSeparated` 格式) - - - -## format_custom_row_between_delimiter {#format_custom_row_between_delimiter} - - - -行与行之间的分隔符(用于 CustomSeparated 格式) - - - -## format_display_secrets_in_show_and_select {#format_display_secrets_in_show_and_select} - - - -启用或禁用在针对表、数据库、表函数和字典的 `SHOW` 和 `SELECT` 查询中显示机密信息。 - -要查看机密信息的用户还必须在服务器端启用 -[`display_secrets_in_show_and_select` 设置](../server-configuration-parameters/settings#display_secrets_in_show_and_select), -并拥有 -[`displaySecretsInShowAndSelect`](/sql-reference/statements/grant#displaysecretsinshowandselect) 权限。 - -可能的取值: - -- 0 — 禁用。 -- 1 — 启用。 - - - -## format_json_object_each_row_column_for_object_name {#format_json_object_each_row_column_for_object_name} - - - -在 [JSONObjectEachRow](/interfaces/formats/JSONObjectEachRow) 格式中,用于存储或写入对象名的列名。 -列类型必须为 String 类型。若值为空,将使用默认名称 `row_{i}` 作为对象名。 - - - -## format_protobuf_use_autogenerated_schema {#format_protobuf_use_autogenerated_schema} - - - -当未设置 format_schema 时,使用自动生成的 Protobuf 架构 - - - -## format_regexp {#format_regexp} - - - -正则表达式(用于 Regexp 格式) - - - -## format_regexp_escaping_rule {#format_regexp_escaping_rule} - - - -字段转义规则(适用于 Regexp 格式) - - - -## format_regexp_skip_unmatched {#format_regexp_skip_unmatched} - - - -跳过正则表达式未匹配的行(用于 Regexp 格式) - - - -## format_schema {#format_schema} - - - -当你使用需要模式定义的格式(例如 [Cap'n Proto](https://capnproto.org/) 或 [Protobuf](https://developers.google.com/protocol-buffers/))时,此参数非常有用。其值取决于具体的格式。 - - - -## format_schema_message_name {#format_schema_message_name} - - - -指定在 `format_schema` 中定义的 schema 里所需消息的名称。 -为保持与旧版 format_schema 格式(`file_name:message_name`)的兼容性: -- 如果未指定 `format_schema_message_name`,则消息名称将从旧版 `format_schema` 值中的 `message_name` 部分推断。 -- 如果在使用旧版格式时指定了 `format_schema_message_name`,则会报错。 - - - -## format_schema_source {#format_schema_source} - - - -定义 `format_schema` 的来源。 -可选值: -- 'file'(默认):`format_schema` 是位于 `format_schemas` 目录中的一个 schema 文件名。 -- 'string':`format_schema` 是 schema 的字面内容。 -- 'query':`format_schema` 是一个用于获取 schema 的查询。 -当 `format_schema_source` 设置为 'query' 时,适用以下条件: -- 查询必须严格只返回一个值:一行且仅包含一个字符串列。 -- 查询结果被视为 schema 内容。 -- 该结果会在本地 `format_schemas` 目录中进行缓存。 -- 可以使用以下命令清除本地缓存:`SYSTEM DROP FORMAT SCHEMA CACHE FOR Files`。 -- 一旦被缓存,在缓存被显式清除之前,相同的查询不会再次执行以重新获取 schema。 -- 除了本地缓存文件,Protobuf 消息也会缓存在内存中。即使清除了本地缓存文件,也必须使用 `SYSTEM DROP FORMAT SCHEMA CACHE [FOR Protobuf]` 清除内存缓存,才能完全刷新 schema。 -- 运行查询 `SYSTEM DROP FORMAT SCHEMA CACHE` 可以一次性清除缓存文件和 Protobuf 消息 schema 的缓存。 - - - -## format_template_resultset {#format_template_resultset} - - - -包含结果集格式字符串的文件的路径(适用于 Template 格式) - - - -## format_template_resultset_format {#format_template_resultset_format} - - - -结果集格式字符串(用于 Template 格式) - - - -## format_template_row {#format_template_row} - - - -包含行的格式字符串的文件路径(用于 Template 格式) - - - -## format_template_row_format {#format_template_row_format} - - - -行格式字符串(用于 Template 格式) - - - -## format_template_rows_between_delimiter {#format_template_rows_between_delimiter} - - - -行与行之间的分隔符(用于 Template 格式) - - - -## format_tsv_null_representation {#format_tsv_null_representation} - - - -在 TSV 格式中自定义 NULL 的表示方式 - - - -## input_format_allow_errors_num {#input_format_allow_errors_num} - - - -设置从文本格式(CSV、TSV 等)读取时允许的最大错误数量。 - -默认值为 0。 - -始终将其与 `input_format_allow_errors_ratio` 搭配使用。 - -如果在读取行时发生错误,但错误计数器仍小于 `input_format_allow_errors_num`,ClickHouse 会忽略该行并继续处理下一行。 - -如果 `input_format_allow_errors_num` 和 `input_format_allow_errors_ratio` 都被超出,ClickHouse 会抛出异常。 - - - -## input_format_allow_errors_ratio {#input_format_allow_errors_ratio} - - - -设置从文本格式(CSV、TSV 等)读取数据时允许的最大错误比例。 -错误比例以 0 到 1 之间的浮点数形式设置。 - -默认值为 0。 - -应始终与 `input_format_allow_errors_num` 搭配使用。 - -如果在读取行时发生错误,但错误计数仍小于 `input_format_allow_errors_ratio`,ClickHouse 会忽略该行并继续处理下一行。 - -如果同时超过了 `input_format_allow_errors_num` 和 `input_format_allow_errors_ratio`,ClickHouse 会抛出异常。 - - - -## input_format_allow_seeks {#input_format_allow_seeks} - - - -允许在读取 ORC/Parquet/Arrow 输入格式时执行定位(seek)操作。 - -默认启用。 - - - -## input_format_arrow_allow_missing_columns {#input_format_arrow_allow_missing_columns} - - - -在读取 Arrow 输入格式时允许存在缺失列 - - - -## input_format_arrow_case_insensitive_column_matching {#input_format_arrow_case_insensitive_column_matching} - - - -在匹配 Arrow 列与 ClickHouse 列时忽略大小写。 - - - -## input_format_arrow_skip_columns_with_unsupported_types_in_schema_inference {#input_format_arrow_skip_columns_with_unsupported_types_in_schema_inference} - - - -在对 Arrow 格式进行模式推断时,跳过数据类型不受支持的列 - - - -## input_format_avro_allow_missing_fields {#input_format_avro_allow_missing_fields} - - - -对于 Avro/AvroConfluent 格式:当在模式中找不到字段时,使用默认值而不是抛出错误 - - - -## input_format_avro_null_as_default {#input_format_avro_null_as_default} - - - -对于 Avro/AvroConfluent 格式:当值为 `NULL` 且目标列为非 `Nullable` 时插入默认值 - - - -## input_format_binary_decode_types_in_binary_format {#input_format_binary_decode_types_in_binary_format} - - - -在 RowBinaryWithNamesAndTypes 输入格式中,以二进制格式读取数据类型,而非以类型名称的形式读取。 - - - -## input_format_binary_read_json_as_string {#input_format_binary_read_json_as_string} - - - -在 RowBinary 输入格式中,将 [JSON](../../sql-reference/data-types/newjson.md) 数据类型的值读取为 JSON [String](../../sql-reference/data-types/string.md) 类型的值。 - - - -## input_format_bson_skip_fields_with_unsupported_types_in_schema_inference {#input_format_bson_skip_fields_with_unsupported_types_in_schema_inference} - - - -在对 BSON 格式进行模式推断时,跳过类型不受支持的字段。 - - - -## input_format_capn_proto_skip_fields_with_unsupported_types_in_schema_inference {#input_format_capn_proto_skip_fields_with_unsupported_types_in_schema_inference} - - - -在对 CapnProto 格式进行模式推断时,跳过类型不受支持的列 - - - -## input_format_csv_allow_cr_end_of_line {#input_format_csv_allow_cr_end_of_line} - - - -如果设置为 true,则允许在行尾出现未被后续内容跟随的 \\r。 - - - -## input_format_csv_allow_variable_number_of_columns {#input_format_csv_allow_variable_number_of_columns} - - - -在 CSV 输入中忽略多余列(当文件的列数多于预期的列数时),并将 CSV 输入中缺失的字段按默认值处理 - - - -## input_format_csv_allow_whitespace_or_tab_as_delimiter {#input_format_csv_allow_whitespace_or_tab_as_delimiter} - - - -允许在 CSV 字符串中使用空格或制表符(\\t)作为字段分隔符 - - - -## input_format_csv_arrays_as_nested_csv {#input_format_csv_arrays_as_nested_csv} - - - -从 CSV 中读取 `Array` 时,假设其元素先以嵌套 CSV 的形式序列化,然后再封装为字符串。示例:\"[\"\"Hello\"\", \"\"world\"\", \"\"42\"\"\"\" TV\"\"]\"。数组外围的括号可以省略。 - - - -## input_format_csv_deserialize_separate_columns_into_tuple {#input_format_csv_deserialize_separate_columns_into_tuple} - - - -如果将其设置为 true,则以 CSV 格式写入的多个独立列可以反序列化为一个 Tuple 类型的列。 - - - -## input_format_csv_detect_header {#input_format_csv_detect_header} - - - -在 CSV 格式数据中自动检测包含列名和类型的表头 - - - -## input_format_csv_empty_as_default {#input_format_csv_empty_as_default} - - - -将 CSV 输入中的空字段按默认值处理。 - - - -## input_format_csv_enum_as_number {#input_format_csv_enum_as_number} - - - -在 CSV 格式中将插入的 enum 值视为其枚举索引 - - - -## input_format_csv_skip_first_lines {#input_format_csv_skip_first_lines} - - - -在 CSV 格式的数据中跳过开头指定数量的行 - - - -## input_format_csv_skip_trailing_empty_lines {#input_format_csv_skip_trailing_empty_lines} - - - -在 CSV 格式中忽略末尾的空行 - - - -## input_format_csv_trim_whitespaces {#input_format_csv_trim_whitespaces} - - - -去除 CSV 字符串开头和结尾的空格和制表符(\\t)字符 - - - -## input_format_csv_try_infer_numbers_from_strings {#input_format_csv_try_infer_numbers_from_strings} - - - -如果启用,在进行模式推断时,ClickHouse 会尝试从字符串字段中推断数值类型。 -当 CSV 数据包含用引号括起来的 `UInt64` 数值时,这会非常有用。 - -默认关闭。 - - - -## input_format_csv_try_infer_strings_from_quoted_tuples {#input_format_csv_try_infer_strings_from_quoted_tuples} - - - -将输入数据中带引号的元组视为 String 类型的值。 - - - -## input_format_csv_use_best_effort_in_schema_inference {#input_format_csv_use_best_effort_in_schema_inference} - - - -在推断 CSV 格式的表结构时使用一些优化和启发式策略 - - - -## input_format_csv_use_default_on_bad_values {#input_format_csv_use_default_on_bad_values} - - - -当 CSV 字段因包含非法值而反序列化失败时,允许为该列使用默认值 - - - -## input_format_custom_allow_variable_number_of_columns {#input_format_custom_allow_variable_number_of_columns} - - - -在 CustomSeparated 输入中忽略多余的列(如果文件中的列数多于预期),并使用默认值填充 CustomSeparated 输入中缺失的字段 - - - -## input_format_custom_detect_header {#input_format_custom_detect_header} - - - -在 CustomSeparated 格式中自动检测包含字段名和类型的标题行 - - - -## input_format_custom_skip_trailing_empty_lines {#input_format_custom_skip_trailing_empty_lines} - - - -在 CustomSeparated 格式中跳过末尾空行 - - - -## input_format_defaults_for_omitted_fields {#input_format_defaults_for_omitted_fields} - - - -在执行 `INSERT` 查询时,将输入中缺失的列值替换为对应列的默认值。此选项适用于 [JSONEachRow](/interfaces/formats/JSONEachRow)(以及其他 JSON 格式)、[CSV](/interfaces/formats/CSV)、[TabSeparated](/interfaces/formats/TabSeparated)、[TSKV](/interfaces/formats/TSKV)、[Parquet](/interfaces/formats/Parquet)、[Arrow](/interfaces/formats/Arrow)、[Avro](/interfaces/formats/Avro)、[ORC](/interfaces/formats/ORC)、[Native](/interfaces/formats/Native) 格式以及带有 `WithNames`/`WithNamesAndTypes` 后缀的格式。 - -:::note -启用此选项时,扩展的表元数据会从服务器发送到客户端。这会消耗服务器上的额外计算资源,并可能降低性能。 -::: - -可能的取值: - -- 0 — 禁用。 -- 1 — 启用。 - - - -## input_format_force_null_for_omitted_fields {#input_format_force_null_for_omitted_fields} - - - -强制将省略的字段初始化为 null 值 - - - -## input_format_hive_text_allow_variable_number_of_columns {#input_format_hive_text_allow_variable_number_of_columns} - - - -在 Hive Text 输入中忽略多余的列(当文件列数多于预期时),并将 Hive Text 输入中缺失的字段填充为默认值 - - - -## input_format_hive_text_collection_items_delimiter {#input_format_hive_text_collection_items_delimiter} - - - -Hive 文本文件中集合(array 或 map)项之间的分隔符 - - - -## input_format_hive_text_fields_delimiter {#input_format_hive_text_fields_delimiter} - - - -Hive 文本文件中的字段分隔符 - - - -## input_format_hive_text_map_keys_delimiter {#input_format_hive_text_map_keys_delimiter} - - - -Hive 文本文件中 map 键值对之间的分隔符 - - - -## input_format_import_nested_json {#input_format_import_nested_json} - - - -启用或禁用对包含嵌套对象的 JSON 数据的插入。 - -支持的格式: - -- [JSONEachRow](/interfaces/formats/JSONEachRow) - -可选值: - -- 0 — 禁用。 -- 1 — 启用。 - -另请参阅: - -- 在 `JSONEachRow` 格式下[使用嵌套结构](/integrations/data-formats/json/other-formats#accessing-nested-json-objects)。 - - - -## input_format_ipv4_default_on_conversion_error {#input_format_ipv4_default_on_conversion_error} - - - -在反序列化 IPv4 的过程中,如果发生转换错误,将使用默认值而不是抛出异常。 - -该设置默认关闭。 - - - -## input_format_ipv6_default_on_conversion_error {#input_format_ipv6_default_on_conversion_error} - - - -在反序列化 IPv6 时,如果发生转换错误,将使用默认值而不是抛出异常。 - -默认情况下禁用。 - - - -## input_format_json_compact_allow_variable_number_of_columns {#input_format_json_compact_allow_variable_number_of_columns} - - - -允许在 JSONCompact/JSONCompactEachRow 输入格式中,行的列数可变。 -对于列数多于预期的行,会忽略多余的列;对于缺失的列,则使用默认值。 - -默认禁用。 - - - -## input_format_json_defaults_for_missing_elements_in_named_tuple {#input_format_json_defaults_for_missing_elements_in_named_tuple} - - - -在解析命名元组时,为 JSON 对象中缺失的元素插入默认值。 -此设置仅在 `input_format_json_named_tuples_as_objects` 被启用时生效。 - -默认情况下为启用状态。 - - - -## input_format_json_empty_as_default {#input_format_json_empty_as_default} - - - -启用后,会将 JSON 中的空字段替换为默认值。对于复杂的默认表达式,还必须同时启用 `input_format_defaults_for_omitted_fields`。 - -可能的取值: - -+ 0 — 禁用。 -+ 1 — 启用。 - - - -## input_format_json_ignore_unknown_keys_in_named_tuple {#input_format_json_ignore_unknown_keys_in_named_tuple} - - - -在处理命名元组的 JSON 对象时忽略未知键。 - -默认启用。 - - - -## input_format_json_ignore_unnecessary_fields {#input_format_json_ignore_unnecessary_fields} - - - -忽略不必要的字段而不解析它们。启用此选项后,对于格式无效或包含重复字段的 JSON 字符串,可能不会抛出异常。 - - - -## input_format_json_infer_array_of_dynamic_from_array_of_different_types - - - -启用后,在进行 schema 推断时,ClickHouse 会将包含不同数据类型值的 JSON 数组推断为 Array(Dynamic) 类型。 - -示例: - -```sql -SET input_format_json_infer_array_of_dynamic_from_array_of_different_types=1; -DESC format(JSONEachRow, '{"a" : [42, "hello", [1, 2, 3]]}'); -``` - -```response -┌─name─┬─type───────────┐ -│ a │ Array(Dynamic) │ -└──────┴────────────────┘ -``` - -```sql -SET input_format_json_infer_array_of_dynamic_from_array_of_different_types=0; -DESC format(JSONEachRow, '{"a" : [42, "hello", [1, 2, 3]]}'); -``` - -```response -┌─name─┬─type─────────────────────────────────────────────────────────────┐ -│ a │ Tuple(Nullable(Int64), Nullable(String), Array(Nullable(Int64))) │ -└──────┴──────────────────────────────────────────────────────────────────┘ -``` - -默认已启用。 - - -## input_format_json_infer_incomplete_types_as_strings - - - -允许在模式推断期间,将在数据样本中仅包含 `Null`/`{}`/`[]` 的 JSON 键推断为 String 类型。 -在 JSON 格式中,任何值都可以按 String 类型读取。通过对类型未知的键使用 String 类型,我们可以在模式推断期间避免出现类似 `Cannot determine type for column 'column_name' by first 25000 rows of data, most likely this column contains only Nulls or empty Arrays/Maps` 的错误。 - -示例: - -```sql -SET input_format_json_infer_incomplete_types_as_strings = 1, input_format_json_try_infer_named_tuples_from_objects = 1; -DESCRIBE format(JSONEachRow, '{"obj" : {"a" : [1,2,3], "b" : "hello", "c" : null, "d" : {}, "e" : []}}'); -SELECT * FROM format(JSONEachRow, '{"obj" : {"a" : [1,2,3], "b" : "hello", "c" : null, "d" : {}, "e" : []}}'); -``` - -结果: - -``` -┌─name─┬─type───────────────────────────────────────────────────────────────────────────────────────────────────────────────────┬─default_type─┬─default_expression─┬─comment─┬─codec_expression─┬─ttl_expression─┐ -│ obj │ Tuple(a Array(Nullable(Int64)), b Nullable(String), c Nullable(String), d Nullable(String), e Array(Nullable(String))) │ │ │ │ │ │ -└──────┴────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴──────────────┴────────────────────┴─────────┴──────────────────┴────────────────┘ - -┌─obj────────────────────────────┐ -│ ([1,2,3],'hello',NULL,'{}',[]) │ -└────────────────────────────────┘ -``` - -默认已启用。 - - -## input_format_json_map_as_array_of_tuples {#input_format_json_map_as_array_of_tuples} - - - -将 Map 类型列反序列化为由元组组成的 JSON 数组。 - -默认关闭。 - - - -## input_format_json_max_depth {#input_format_json_max_depth} - - - -JSON 中字段的最大嵌套深度。这不是一个严格限制,无需精确遵守。 - - - -## input_format_json_named_tuples_as_objects {#input_format_json_named_tuples_as_objects} - - - -将命名元组列解析为 JSON 对象。 - -默认启用。 - - - -## input_format_json_read_arrays_as_strings - - - -允许在 JSON 输入格式中将 JSON 数组作为字符串进行解析。 - -示例: - -```sql -SET input_format_json_read_arrays_as_strings = 1; -SELECT arr, toTypeName(arr), JSONExtractArrayRaw(arr)[3] from format(JSONEachRow, 'arr String', '{"arr" : [1, "Hello", [1,2,3]]}'); -``` - -结果: - -``` -┌─arr───────────────────┬─toTypeName(arr)─┬─arrayElement(JSONExtractArrayRaw(arr), 3)─┐ -│ [1, "Hello", [1,2,3]] │ String │ [1,2,3] │ -└───────────────────────┴─────────────────┴───────────────────────────────────────────┘ -``` - -默认开启。 - - -## input_format_json_read_bools_as_numbers {#input_format_json_read_bools_as_numbers} - - - -允许在 JSON 输入格式中将布尔值解析为数值。 - -默认启用。 - - - -## input_format_json_read_bools_as_strings {#input_format_json_read_bools_as_strings} - - - -允许在 JSON 输入格式中将布尔值解析为字符串。 - -默认启用。 - - - -## input_format_json_read_numbers_as_strings {#input_format_json_read_numbers_as_strings} - - - -允许在 JSON 输入格式中将数字以字符串形式进行解析。 - -默认启用。 - - - -## input_format_json_read_objects_as_strings - - - -允许在 JSON 输入格式中将 JSON 对象解析为字符串值。 - -示例: - -```sql -SET input_format_json_read_objects_as_strings = 1; -CREATE TABLE test (id UInt64, obj String, date Date) ENGINE=Memory(); -INSERT INTO test FORMAT JSONEachRow {"id" : 1, "obj" : {"a" : 1, "b" : "Hello"}, "date" : "2020-01-01"}; -SELECT * FROM test; -``` - -结果: - -``` -┌─id─┬─obj──────────────────────┬───────date─┐ -│ 1 │ {"a" : 1, "b" : "Hello"} │ 2020-01-01 │ -└────┴──────────────────────────┴────────────┘ -``` - -默认已启用。 - - -## input_format_json_throw_on_bad_escape_sequence {#input_format_json_throw_on_bad_escape_sequence} - - - -如果在 JSON 输入格式中,JSON 字符串包含无效的转义序列,则抛出异常。若禁用该设置,无效的转义序列将在数据中保持原样。 - -默认启用。 - - - -## input_format_json_try_infer_named_tuples_from_objects - - - -启用后,在进行表结构推断时,ClickHouse 会尝试从 JSON 对象推断命名 `Tuple`。 -生成的命名 `Tuple` 将包含样本数据中所有对应 JSON 对象里的全部元素。 - -示例: - -```sql -SET input_format_json_try_infer_named_tuples_from_objects = 1; -DESC format(JSONEachRow, '{"obj" : {"a" : 42, "b" : "Hello"}}, {"obj" : {"a" : 43, "c" : [1, 2, 3]}}, {"obj" : {"d" : {"e" : 42}}}') -``` - -结果: - -``` -┌─name─┬─type───────────────────────────────────────────────────────────────────────────────────────────────┬─default_type─┬─default_expression─┬─comment─┬─codec_expression─┬─ttl_expression─┐ -│ obj │ Tuple(a Nullable(Int64), b Nullable(String), c Array(Nullable(Int64)), d Tuple(e Nullable(Int64))) │ │ │ │ │ │ -└──────┴────────────────────────────────────────────────────────────────────────────────────────────────────┴──────────────┴────────────────────┴─────────┴──────────────────┴────────────────┘ -``` - -默认已启用。 - - -## input_format_json_try_infer_numbers_from_strings {#input_format_json_try_infer_numbers_from_strings} - - - -如果启用,在进行 schema 推断时,ClickHouse 会尝试将字符串字段解析为数字。 -当 JSON 数据包含以引号括起的 UInt64 数值时,这会很有用。 - -默认情况下为禁用。 - - - -## input_format_json_use_string_type_for_ambiguous_paths_in_named_tuples_inference_from_objects {#input_format_json_use_string_type_for_ambiguous_paths_in_named_tuples_inference_from_objects} - - - -在从 JSON 对象推断 named tuple 时,如果路径存在歧义,则使用 String 类型而不是引发异常 - - - -## input_format_json_validate_types_from_metadata {#input_format_json_validate_types_from_metadata} - - - -对于 JSON/JSONCompact/JSONColumnsWithMetadata 输入格式,当此设置为 1 时, -输入数据中元数据指定的类型会与表中对应列的类型进行比较。 - -默认启用。 - - - -## input_format_max_block_size_bytes {#input_format_max_block_size_bytes} - - - -限制在解析输入数据格式时形成的数据块大小(以字节为单位)。在基于行的输入格式中,当由 ClickHouse 端形成数据块时使用。 -0 表示不限制字节大小。 - - - -## input_format_max_bytes_to_read_for_schema_inference {#input_format_max_bytes_to_read_for_schema_inference} - - - -自动推断表结构时最多读取的数据字节数。 - - - -## input_format_max_rows_to_read_for_schema_inference {#input_format_max_rows_to_read_for_schema_inference} - - - -用于自动推断表结构时可读取的最大行数。 - - - -## input_format_msgpack_number_of_columns {#input_format_msgpack_number_of_columns} - - - -插入的 MsgPack 数据中的列数。用于根据数据自动推断表结构。 - - - -## input_format_mysql_dump_map_column_names {#input_format_mysql_dump_map_column_names} - - - -根据列名将 MySQL 转储中的表列与 ClickHouse 表中的列进行匹配 - - - -## input_format_mysql_dump_table_name {#input_format_mysql_dump_table_name} - - - -要从中读取数据的 MySQL 转储文件中的表名 - - - -## input_format_native_allow_types_conversion {#input_format_native_allow_types_conversion} - - - -允许在 Native 输入格式中进行数据类型转换 - - - -## input_format_native_decode_types_in_binary_format {#input_format_native_decode_types_in_binary_format} - - - -在 Native 输入格式中,以二进制格式读取数据类型,而不是以类型名称的形式读取 - - - -## input_format_null_as_default {#input_format_null_as_default} - - - -启用或禁用在这些字段的数据类型不是 [Nullable](/sql-reference/data-types/nullable) 时,使用[默认值](/sql-reference/statements/create/table#default_values)初始化 [NULL](/sql-reference/syntax#literals) 字段。 -如果列类型不是 Nullable 且此设置被禁用,则插入 `NULL` 会导致异常。如果列类型是 Nullable,则无论此设置如何,`NULL` 值都会按原样插入。 - -此设置适用于大多数输入格式。 - -对于复杂的默认表达式,还必须启用 `input_format_defaults_for_omitted_fields`。 - -可能的取值: - -- 0 — 向非 Nullable 列插入 `NULL` 时会导致异常。 -- 1 — 将 `NULL` 字段初始化为列的默认值。 - - - -## input_format_orc_allow_missing_columns {#input_format_orc_allow_missing_columns} - - - -允许在读取 ORC 输入格式时缺失列 - - - -## input_format_orc_case_insensitive_column_matching {#input_format_orc_case_insensitive_column_matching} - - - -在将 ORC 列与 ClickHouse 列进行匹配时忽略大小写。 - - - -## input_format_orc_dictionary_as_low_cardinality {#input_format_orc_dictionary_as_low_cardinality} - - - -在读取 ORC 文件时,将使用字典编码的 ORC 列视为 LowCardinality 列。 - - - -## input_format_orc_filter_push_down {#input_format_orc_filter_push_down} - - - -在读取 ORC 文件时,根据 WHERE/PREWHERE 表达式,以及 ORC 元数据中的最小/最大值统计信息或布隆过滤器跳过整个 stripe 或行组。 - - - -## input_format_orc_reader_time_zone_name {#input_format_orc_reader_time_zone_name} - - - -ORC 行读取器所使用的时区名称,默认值为 GMT。 - - - -## input_format_orc_row_batch_size {#input_format_orc_row_batch_size} - - - -读取 ORC stripe 时的批量大小。 - - - -## input_format_orc_skip_columns_with_unsupported_types_in_schema_inference {#input_format_orc_skip_columns_with_unsupported_types_in_schema_inference} - - - -在对 ORC 格式进行模式推断时,跳过包含不支持类型的列 - - - -## input_format_orc_use_fast_decoder {#input_format_orc_use_fast_decoder} - - - -使用更快的 ORC 解码器实现。 - - - -## input_format_parquet_allow_geoparquet_parser {#input_format_parquet_allow_geoparquet_parser} - - - -使用 geo 列解析器,将 Array(UInt8) 转换为 Point/LineString/Polygon/MultiLineString/MultiPolygon 类型 - - - -## input_format_parquet_allow_missing_columns {#input_format_parquet_allow_missing_columns} - - - -允许在读取 Parquet 输入格式时存在缺失列 - - - -## input_format_parquet_bloom_filter_push_down {#input_format_parquet_bloom_filter_push_down} - - - -在读取 Parquet 文件时,根据 WHERE 表达式和 Parquet 元数据中的布隆过滤器跳过整个行组。 - - - -## input_format_parquet_case_insensitive_column_matching {#input_format_parquet_case_insensitive_column_matching} - - - -在将 Parquet 列与 ClickHouse 列进行匹配时忽略大小写。 - - - -## input_format_parquet_enable_json_parsing {#input_format_parquet_enable_json_parsing} - - - -在读取 Parquet 文件时,将 JSON 列解析为 ClickHouse JSON 列类型。 - - - -## input_format_parquet_enable_row_group_prefetch {#input_format_parquet_enable_row_group_prefetch} - - - -在解析 Parquet 时启用行组预取。目前仅支持在单线程解析时进行预取。 - - - -## input_format_parquet_filter_push_down {#input_format_parquet_filter_push_down} - - - -在读取 Parquet 文件时,基于 WHERE/PREWHERE 表达式以及 Parquet 元数据中的最小值/最大值统计信息跳过整个行组。 - - - -## input_format_parquet_local_file_min_bytes_for_seek {#input_format_parquet_local_file_min_bytes_for_seek} - - - -在 Parquet 输入格式中,本地读取(文件)时,为执行 seek 而不是读取并忽略数据所需的最小字节数 - - - -## input_format_parquet_local_time_as_utc {#input_format_parquet_local_time_as_utc} - - - -确定在对 `isAdjustedToUTC=false` 的 Parquet 时间戳进行 schema 推断时所使用的数据类型。若为 true:DateTime64(..., 'UTC'),若为 false:DateTime64(...)。两种行为都不完全正确,因为 ClickHouse 没有用于表示本地实际时间的数据类型。违背直觉的是,将其设为 'true' 可能是更不容易出错的选项,因为把带有 'UTC' 的时间戳格式化为 String 时,会得到正确本地时间的表示。 - - - -## input_format_parquet_max_block_size {#input_format_parquet_max_block_size} - - - -Parquet 读取器的最大块大小。 - - - -## input_format_parquet_memory_high_watermark {#input_format_parquet_memory_high_watermark} - - - -Parquet 读取器 v3 的近似内存限制。用于限制可并行读取的行组或列的数量。在单个查询中读取多个文件时,该限制作用于这些文件的总内存占用。 - - - -## input_format_parquet_memory_low_watermark {#input_format_parquet_memory_low_watermark} - - - -如果内存使用量低于该阈值,则更积极地调度预取。在需要通过网络读取大量小型 Bloom 过滤器时,这可能会很有用。 - - - -## input_format_parquet_page_filter_push_down {#input_format_parquet_page_filter_push_down} - - - -利用列索引中的最小值/最大值跳过数据页。 - - - -## input_format_parquet_prefer_block_bytes {#input_format_parquet_prefer_block_bytes} - - - -Parquet 读取器输出的平均块字节数 - - - -## input_format_parquet_preserve_order {#input_format_parquet_preserve_order} - - - -从 Parquet 文件读取数据时避免对行进行重新排序。一般不推荐启用此设置,因为行的顺序通常无法保证,而且查询管道的其他部分也可能打乱该顺序。请改用 `ORDER BY _row_number`。 - - - -## input_format_parquet_skip_columns_with_unsupported_types_in_schema_inference {#input_format_parquet_skip_columns_with_unsupported_types_in_schema_inference} - - - -在进行 Parquet 格式的模式推断时,跳过包含不支持类型的列 - - - -## input_format_parquet_use_native_reader {#input_format_parquet_use_native_reader} - - - -使用原生 Parquet 读取器 v1。速度相对较快,但功能尚不完善。已弃用。 - - - -## input_format_parquet_use_native_reader_v3 {#input_format_parquet_use_native_reader_v3} - - - -使用 Parquet 读取器 v3。 - - - -## input_format_parquet_use_offset_index {#input_format_parquet_use_offset_index} - - - -在未使用页过滤时,对从 Parquet 文件读取数据页的方式进行了小幅调整。 - - - -## input_format_parquet_verify_checksums {#input_format_parquet_verify_checksums} - - - -在读取 Parquet 文件时校验页校验和。 - - - -## input_format_protobuf_flatten_google_wrappers {#input_format_protobuf_flatten_google_wrappers} - - - -为常规的非嵌套列启用 Google wrapper 类型,例如对 String 列 `str` 使用 `google.protobuf.StringValue 'str'`。对于 Nullable 列,空的 wrapper 被识别为默认值,缺失则被识别为 null。 - - - -## input_format_protobuf_oneof_presence {#input_format_protobuf_oneof_presence} - - - -通过在专用列中设置枚举值,指示检测到 protobuf oneof 中的哪个字段。 - - - -## input_format_protobuf_skip_fields_with_unsupported_types_in_schema_inference {#input_format_protobuf_skip_fields_with_unsupported_types_in_schema_inference} - - - -在对 Protobuf 格式进行模式推断时,跳过所有包含不受支持数据类型的字段 - - - -## input_format_record_errors_file_path {#input_format_record_errors_file_path} - - - -用于在读取文本格式(CSV、TSV)数据时记录错误的文件路径。 - - - -## input_format_skip_unknown_fields {#input_format_skip_unknown_fields} - - - -启用或禁用在插入数据时跳过额外数据。 - -写入数据时,如果输入数据中包含目标表中不存在的列,ClickHouse 会抛出异常。若启用了跳过功能,ClickHouse 不会插入这些额外数据,也不会抛出异常。 - -支持的格式: - -- [JSONEachRow](/interfaces/formats/JSONEachRow)(以及其他 JSON 格式) -- [BSONEachRow](/interfaces/formats/BSONEachRow)(以及其他 JSON 格式) -- [TSKV](/interfaces/formats/TSKV) -- 所有带有后缀 WithNames/WithNamesAndTypes 的格式 -- [MySQLDump](/interfaces/formats/MySQLDump) -- [Native](/interfaces/formats/Native) - -可选值: - -- 0 — 禁用。 -- 1 — 启用。 - - - -## input_format_try_infer_dates {#input_format_try_infer_dates} - - - -如果启用,ClickHouse 会在文本格式的模式推断过程中尝试将字符串字段推断为 `Date` 类型。如果输入数据中某一列的所有值都能成功解析为日期,则结果类型为 `Date`;如果至少有一个值无法解析为日期,则结果类型为 `String`。 - -默认启用。 - - - -## input_format_try_infer_datetimes {#input_format_try_infer_datetimes} - - - -如果启用,ClickHouse 会在对文本格式进行模式推断时,尝试从字符串字段推断出 `DateTime64` 类型。若输入数据中某一列的所有值都成功解析为日期时间,则该列的结果类型为 `DateTime64`;如果至少有一个值未能解析为日期时间,则结果类型为 `String`。 - -默认启用。 - - - -## input_format_try_infer_datetimes_only_datetime64 {#input_format_try_infer_datetimes_only_datetime64} - - - -当启用 `input_format_try_infer_datetimes` 时,只推断 `DateTime64` 类型,而不推断 `DateTime` 类型。 - - - -## input_format_try_infer_exponent_floats {#input_format_try_infer_exponent_floats} - - - -在对文本格式进行模式推断时,尝试将以指数表示法表示的数值推断为浮点数(JSON 除外,在 JSON 中带指数的数字始终会被推断为浮点数) - - - -## input_format_try_infer_integers {#input_format_try_infer_integers} - - - -如果启用,ClickHouse 会在对文本格式进行模式推断时,尝试将数值推断为整数而不是浮点数。如果输入数据中该列的所有数字都是整数,则结果类型为 `Int64`;如果至少有一个数字是浮点数,则结果类型为 `Float64`。 - -默认启用。 - - - -## input_format_try_infer_variants {#input_format_try_infer_variants} - - - -如果启用,ClickHouse 会在文本格式的模式推断中,当某列或数组元素存在多个可能的类型时,尝试将其推断为 [`Variant`](../../sql-reference/data-types/variant.md) 类型。 - -可能的取值: - -- 0 — 禁用。 -- 1 — 启用。 - - - -## input_format_tsv_allow_variable_number_of_columns {#input_format_tsv_allow_variable_number_of_columns} - - - -在 TSV 输入中忽略多余的列(当文件的列数多于预期时),并将 TSV 输入中缺失的字段视为其默认值 - - - -## input_format_tsv_crlf_end_of_line {#input_format_tsv_crlf_end_of_line} - - - -将此项设置为 true 时,`file` 函数会读取使用 `\\r\\n` 而非 `\\n` 作为行结束符的 TSV 格式。 - - - -## input_format_tsv_detect_header {#input_format_tsv_detect_header} - - - -自动检测 TSV 格式中包含名称和类型的表头 - - - -## input_format_tsv_empty_as_default {#input_format_tsv_empty_as_default} - - - -将 TSV 输入中的空字段按默认值处理。 - - - -## input_format_tsv_enum_as_number {#input_format_tsv_enum_as_number} - - - -将 TSV 格式中插入的枚举值按枚举索引处理。 - - - -## input_format_tsv_skip_first_lines {#input_format_tsv_skip_first_lines} - - - -跳过 TSV 格式数据开头的指定行数 - - - -## input_format_tsv_skip_trailing_empty_lines {#input_format_tsv_skip_trailing_empty_lines} - - - -在 TSV 格式中跳过末尾的空行 - - - -## input_format_tsv_use_best_effort_in_schema_inference {#input_format_tsv_use_best_effort_in_schema_inference} - - - -在 TSV 格式下使用一定的优化和启发式方法来推断表结构 - - - -## input_format_values_accurate_types_of_literals {#input_format_values_accurate_types_of_literals} - - - -对于 Values 格式,在使用模板解析和评估表达式时,会检查字面量的实际类型,以避免可能的溢出和精度问题。 - - - -## input_format_values_deduce_templates_of_expressions {#input_format_values_deduce_templates_of_expressions} - - - -对于 Values 格式:如果字段无法被流式解析器解析,则运行 SQL 解析器,推断 SQL 表达式模板,尝试使用该模板解析所有行,然后对所有行进行表达式求值。 - - - -## input_format_values_interpret_expressions {#input_format_values_interpret_expressions} - - - -对于 Values 格式:如果流式解析器无法解析该字段,则运行 SQL 解析器并尝试将其解释为 SQL 表达式。 - - - -## input_format_with_names_use_header {#input_format_with_names_use_header} - - - -启用或禁用在插入数据时对列顺序的检查。 - -为提升插入性能,如果确信输入数据的列顺序与目标表一致,建议禁用此检查。 - -支持的格式: - -- [CSVWithNames](/interfaces/formats/CSVWithNames) -- [CSVWithNamesAndTypes](/interfaces/formats/CSVWithNamesAndTypes) -- [TabSeparatedWithNames](/interfaces/formats/TabSeparatedWithNames) -- [TabSeparatedWithNamesAndTypes](/interfaces/formats/TabSeparatedWithNamesAndTypes) -- [JSONCompactEachRowWithNames](/interfaces/formats/JSONCompactEachRowWithNames) -- [JSONCompactEachRowWithNamesAndTypes](/interfaces/formats/JSONCompactEachRowWithNamesAndTypes) -- [JSONCompactStringsEachRowWithNames](/interfaces/formats/JSONCompactStringsEachRowWithNames) -- [JSONCompactStringsEachRowWithNamesAndTypes](/interfaces/formats/JSONCompactStringsEachRowWithNamesAndTypes) -- [RowBinaryWithNames](/interfaces/formats/RowBinaryWithNames) -- [RowBinaryWithNamesAndTypes](/interfaces/formats/RowBinaryWithNamesAndTypes) -- [CustomSeparatedWithNames](/interfaces/formats/CustomSeparatedWithNames) -- [CustomSeparatedWithNamesAndTypes](/interfaces/formats/CustomSeparatedWithNamesAndTypes) - -可能的取值: - -- 0 — 禁用。 -- 1 — 启用。 - - - -## input_format_with_types_use_header {#input_format_with_types_use_header} - - - -控制是否让格式解析器检查输入数据中的数据类型是否与目标表中的数据类型匹配。 - -支持的格式: - -- [CSVWithNamesAndTypes](/interfaces/formats/CSVWithNamesAndTypes) -- [TabSeparatedWithNamesAndTypes](/interfaces/formats/TabSeparatedWithNamesAndTypes) -- [JSONCompactEachRowWithNamesAndTypes](/interfaces/formats/JSONCompactEachRowWithNamesAndTypes) -- [JSONCompactStringsEachRowWithNamesAndTypes](/interfaces/formats/JSONCompactStringsEachRowWithNamesAndTypes) -- [RowBinaryWithNamesAndTypes](/interfaces/formats/RowBinaryWithNamesAndTypes) -- [CustomSeparatedWithNamesAndTypes](/interfaces/formats/CustomSeparatedWithNamesAndTypes) - -可能的取值: - -- 0 — 禁用。 -- 1 — 启用。 - - - -## insert_distributed_one_random_shard {#insert_distributed_one_random_shard} - - - -在没有分布键时,控制是否向 [Distributed](/engines/table-engines/special/distributed) 表的某个分片随机插入数据。 - -默认情况下,当向具有多个分片的 `Distributed` 表插入数据且未指定分布键时,ClickHouse 服务器会拒绝任何插入请求。当 `insert_distributed_one_random_shard = 1` 时,允许插入,数据会随机转发到所有分片中的一个。 - -可能的取值: - -- 0 — 如果存在多个分片且未指定分布键,则拒绝插入。 -- 1 — 在未指定分布键时,从所有可用分片中随机选择一个进行插入。 - - - -## interval_output_format {#interval_output_format} - - - -允许为 `Interval` 类型的文本表示选择不同的输出格式。 - -可选值: - -- `kusto` - KQL 风格的输出格式。 - - ClickHouse 以 [KQL 格式](https://learn.microsoft.com/en-us/dotnet/standard/base-types/standard-timespan-format-strings#the-constant-c-format-specifier)输出 interval。例如,`toIntervalDay(2)` 会被格式化为 `2.00:00:00`。请注意,对于长度不固定的 interval 类型(例如 `IntervalMonth` 和 `IntervalYear`),会根据每个 interval 的平均秒数进行换算。 - -- `numeric` - 数值输出格式。 - - ClickHouse 会按 interval 底层的数值表示进行输出。例如,`toIntervalDay(2)` 会被格式化为 `2`。 - -另请参阅: - -- [Interval](../../sql-reference/data-types/special-data-types/interval.md) - - - -## into_outfile_create_parent_directories {#into_outfile_create_parent_directories} - - - -在使用 INTO OUTFILE 时,如果父目录不存在,则自动创建。 - - - -## json_type_escape_dots_in_keys {#json_type_escape_dots_in_keys} - - - -启用后,JSON 键中的点号在解析过程中将被转义。 - - - -## output_format_arrow_compression_method {#output_format_arrow_compression_method} - - - -用于 Arrow 输出格式的压缩算法。支持的压缩编解码器:lz4_frame、zstd、none(不压缩) - - - -## output_format_arrow_fixed_string_as_fixed_byte_array {#output_format_arrow_fixed_string_as_fixed_byte_array} - - - -对 `FixedString` 列使用 Arrow 的 `FIXED_SIZE_BINARY` 类型,而不是 `Binary` 类型。 - - - -## output_format_arrow_low_cardinality_as_dictionary {#output_format_arrow_low_cardinality_as_dictionary} - - - -启用将 LowCardinality 类型输出为 Arrow 的 Dictionary 类型 - - - -## output_format_arrow_string_as_string {#output_format_arrow_string_as_string} - - - -为 `String` 列使用 Arrow `String` 类型,而不是 `Binary` 类型 - - - -## output_format_arrow_use_64_bit_indexes_for_dictionary {#output_format_arrow_use_64_bit_indexes_for_dictionary} - - - -在 Arrow 格式中始终对字典索引使用 64 位整数 - - - -## output_format_arrow_use_signed_indexes_for_dictionary {#output_format_arrow_use_signed_indexes_for_dictionary} - - - -在 Arrow 格式中为字典索引使用有符号整数 - - - -## output_format_avro_codec {#output_format_avro_codec} - - - -输出时使用的压缩编解码器。可选值:'null'、'deflate'、'snappy'、'zstd'。 - - - -## output_format_avro_rows_in_file {#output_format_avro_rows_in_file} - - - -单个文件中的最大行数(在存储允许的情况下) - - - -## output_format_avro_string_column_pattern {#output_format_avro_string_column_pattern} - - - -对于 Avro 格式:用于匹配并选择作为 AVRO string 处理的 String 列的正则表达式。 - - - -## output_format_avro_sync_interval {#output_format_avro_sync_interval} - - - -同步间隔(以字节为单位)。 - - - -## output_format_binary_encode_types_in_binary_format {#output_format_binary_encode_types_in_binary_format} - - - -在 `RowBinaryWithNamesAndTypes` 输出格式中,将数据类型编码为二进制格式,而不是使用类型名称 - - - -## output_format_binary_write_json_as_string {#output_format_binary_write_json_as_string} - - - -在 RowBinary 输出格式中,将 [JSON](../../sql-reference/data-types/newjson.md) 数据类型的值以 JSON 文本形式写入为 [String](../../sql-reference/data-types/string.md) 类型的值。 - - - -## output_format_bson_string_as_string {#output_format_bson_string_as_string} - - - -对 `String` 列使用 BSON `String` 类型而不是 `Binary` 类型。 - - - -## output_format_csv_crlf_end_of_line {#output_format_csv_crlf_end_of_line} - - - -如果设置为 true,则 CSV 格式中的行结束符为 \\r\\n 而不是 \\n。 - - - -## output_format_csv_serialize_tuple_into_separate_columns {#output_format_csv_serialize_tuple_into_separate_columns} - - - -如果设置为 true,则 CSV 格式中的 Tuple 会被序列化为多个独立的列(也就是说,它们在 Tuple 中的嵌套结构会丢失)。 - - - -## output_format_decimal_trailing_zeros {#output_format_decimal_trailing_zeros} - - - -在输出 `Decimal` 值时保留末尾的零。例如显示 1.230000 而不是 1.23。 - -默认禁用。 - - - -## output_format_json_array_of_rows - - - -启用将所有行以 JSON 数组形式输出的功能,数组中每个元素使用 [JSONEachRow](/interfaces/formats/JSONEachRow) 格式。 - -可能的取值: - -* 1 — ClickHouse 将所有行作为一个数组输出,每一行都采用 `JSONEachRow` 格式。 -* 0 — ClickHouse 将每一行分别输出,格式为 `JSONEachRow`。 - -**启用该设置时的查询示例** - -查询: - -```sql -SET output_format_json_array_of_rows = 1; -SELECT number FROM numbers(3) FORMAT JSONEachRow; -``` - -结果: - -```text -[ -{"number":"0"}, -{"number":"1"}, -{"number":"2"} -] -``` - -**禁用此设置时的查询示例** - -查询: - -```sql -SET output_format_json_array_of_rows = 0; -SELECT number FROM numbers(3) FORMAT JSONEachRow; -``` - -结果: - -```text -{"number":"0"} -{"number":"1"} -{"number":"2"} -``` - - -## output_format_json_escape_forward_slashes {#output_format_json_escape_forward_slashes} - - - -控制在 JSON 输出格式中字符串中的正斜杠是否进行转义。此设置旨在与 JavaScript 保持兼容。不要与始终会被转义的反斜杠混淆。 - -默认启用。 - - - -## output_format_json_map_as_array_of_tuples {#output_format_json_map_as_array_of_tuples} - - - -将 `Map` 类型列序列化为由元组组成的 JSON 数组。 - -默认禁用。 - - - -## output_format_json_named_tuples_as_objects {#output_format_json_named_tuples_as_objects} - - - -将命名元组列序列化为 JSON 对象。 - -默认开启。 - - - -## output_format_json_pretty_print - - - -此设置用于控制在使用 JSON 输出格式时,`data` 数组中嵌套结构(如 Tuple、Map 和 Array)的显示方式。 - -例如,输出不会是下面这样: - -```json -"data": -[ - { - "tuple": {"a":1,"b":2,"c":3}, - "array": [1,2,3], - "map": {"a":1,"b":2,"c":3} - } -], -``` - -输出格式如下: - -```json -"data": -[ - { - "tuple": { - "a": 1, - "b": 2, - "c": 3 - }, - "array": [ - 1, - 2, - 3 - ], - "map": { - "a": 1, - "b": 2, - "c": 3 - } - } -], -``` - -默认已启用。 - - -## output_format_json_quote_64bit_floats {#output_format_json_quote_64bit_floats} - - - -控制在以 JSON* 格式输出时,是否对 64 位 [浮点数](../../sql-reference/data-types/float.md) 添加引号。 - -默认禁用。 - - - -## output_format_json_quote_64bit_integers {#output_format_json_quote_64bit_integers} - - - -控制在以 [JSON](/interfaces/formats/JSON) 格式输出时,是否对 64 位或更大[整数](../../sql-reference/data-types/int-uint.md)(例如 `UInt64` 或 `Int128`)加上引号。 -默认情况下,此类整数会被用引号括起来。此行为与大多数 JavaScript 实现兼容。 - -可能的取值: - -- 0 — 整数输出时不加引号。 -- 1 — 整数输出时加引号。 - - - -## output_format_json_quote_decimals {#output_format_json_quote_decimals} - - - -控制 JSON 输出格式中是否对 decimal 类型数值加引号。 - -默认禁用。 - - - -## output_format_json_quote_denormals - - - -允许在 [JSON](/interfaces/formats/JSON) 输出格式中输出 `+nan`、`-nan`、`+inf`、`-inf`。 - -可能取值: - -* 0 — 禁用。 -* 1 — 启用。 - -**示例** - -考虑如下表 `account_orders`: - -```text -┌─id─┬─name───┬─duration─┬─period─┬─area─┐ -│ 1 │ Andrew │ 20 │ 0 │ 400 │ -│ 2 │ John │ 40 │ 0 │ 0 │ -│ 3 │ Bob │ 15 │ 0 │ -100 │ -└────┴────────┴──────────┴────────┴──────┘ -``` - -当 `output_format_json_quote_denormals = 0` 时,查询会在结果中返回 `null` 值: - -```sql -SELECT area/period FROM account_orders FORMAT JSON; -``` - -```json -{ - "meta": - [ - { - "name": "divide(area, period)", - "type": "Float64" - } - ], - - "data": - [ - { - "divide(area, period)": null - }, - { - "divide(area, period)": null - }, - { - "divide(area, period)": null - } - ], - - "rows": 3, - - "statistics": - { - "elapsed": 0.003648093, - "rows_read": 3, - "bytes_read": 24 - } -} -``` - -当 `output_format_json_quote_denormals = 1` 时,查询返回: - -```json -{ - "meta": - [ - { - "name": "divide(area, period)", - "type": "Float64" - } - ], - - "data": - [ - { - "divide(area, period)": "inf" - }, - { - "divide(area, period)": "-nan" - }, - { - "divide(area, period)": "-inf" - } - ], - - "rows": 3, - - "statistics": - { - "elapsed": 0.000070241, - "rows_read": 3, - "bytes_read": 24 - } -} -``` - - -## output_format_json_skip_null_value_in_named_tuples {#output_format_json_skip_null_value_in_named_tuples} - - - -在将 named tuple 类型的列序列化为 JSON 对象时,跳过值为 null 的键值对。仅当 `output_format_json_named_tuples_as_objects` 设置为 true 时有效。 - - - -## output_format_json_validate_utf8 {#output_format_json_validate_utf8} - - - -控制是否在 JSON 输出格式中校验 UTF-8 序列。不影响 JSON/JSONCompact/JSONColumnsWithMetadata 格式,这些格式始终会进行 UTF-8 校验。 - -默认禁用。 - - - -## output_format_markdown_escape_special_characters - - - -启用后,会对 Markdown 中的特殊字符进行转义。 - -[CommonMark](https://spec.commonmark.org/0.30/#example-12) 定义了以下可以进行转义的特殊字符: - -``` -! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~ -``` - -可选值: - -* 0 — 禁用。 -* 1 — 启用。 - - -## output_format_msgpack_uuid_representation {#output_format_msgpack_uuid_representation} - - - -控制在 MsgPack 格式中输出 UUID 的方式。 - - - -## output_format_native_encode_types_in_binary_format {#output_format_native_encode_types_in_binary_format} - - - -在 Native 输出格式中,将数据类型写为二进制格式而不是类型名称 - - - -## output_format_native_use_flattened_dynamic_and_json_serialization {#output_format_native_use_flattened_dynamic_and_json_serialization} - - - -将 [JSON](../../sql-reference/data-types/newjson.md) 和 [Dynamic](../../sql-reference/data-types/dynamic.md) 列的数据以扁平化格式写入(将所有类型和路径作为单独的子列)。 - - - -## output_format_native_write_json_as_string {#output_format_native_write_json_as_string} - - - -将 [JSON](../../sql-reference/data-types/newjson.md) 列的数据写入为包含 JSON 字符串的 [String](../../sql-reference/data-types/string.md) 列,而不是使用默认的原生 JSON 序列化方式。 - - - -## output_format_orc_compression_block_size {#output_format_orc_compression_block_size} - - - -ORC 输出格式的压缩块大小,单位为字节。 - - - -## output_format_orc_compression_method {#output_format_orc_compression_method} - - - -用于 ORC 输出格式的压缩方式。支持的编解码器:lz4、snappy、zlib、zstd、none(无压缩) - - - -## output_format_orc_dictionary_key_size_threshold {#output_format_orc_dictionary_key_size_threshold} - - - -对于 ORC 输出格式中的字符串列,如果不同值的数量大于非空行总数的该比例,则关闭字典编码;否则启用字典编码。 - - - -## output_format_orc_row_index_stride {#output_format_orc_row_index_stride} - - - -ORC 输出格式中的目标行索引间隔 - - - -## output_format_orc_string_as_string {#output_format_orc_string_as_string} - - - -对 String 列使用 ORC 的 String 类型而不是 Binary 类型 - - - -## output_format_orc_writer_time_zone_name {#output_format_orc_writer_time_zone_name} - - - -ORC writer 使用的时区名称,默认值为 GMT。 - - - -## output_format_parquet_batch_size {#output_format_parquet_batch_size} - - - -每处理这么多行时检查一次页大小。如果某些列的平均值大小超过几 KB,建议适当减小该值。 - - - -## output_format_parquet_bloom_filter_bits_per_value {#output_format_parquet_bloom_filter_bits_per_value} - - - -在 Parquet 布隆过滤器中,每个唯一值所使用的近似位数。估计的误报率如下: - * 6 位 - 10% - * 10.5 位 - 1% - * 16.9 位 - 0.1% - * 26.4 位 - 0.01% - * 41 位 - 0.001% - - - -## output_format_parquet_bloom_filter_flush_threshold_bytes {#output_format_parquet_bloom_filter_flush_threshold_bytes} - - - -控制在 Parquet 文件中写入 Bloom 过滤器的位置。Bloom 过滤器会按大约该大小分组写入。具体而言: - * 如果为 0,则每个行组的 Bloom 过滤器会在该行组之后立即写入; - * 如果大于所有 Bloom 过滤器的总大小,则所有行组的 Bloom 过滤器会先在内存中累积,然后在文件末尾附近一次性写入; - * 否则,Bloom 过滤器会在内存中累积,并在其总大小超过该值时被写出。 - - - -## output_format_parquet_compliant_nested_types {#output_format_parquet_compliant_nested_types} - - - -在 Parquet 文件的 schema 中,将列表元素的名称使用 `element` 而不是 `item`。这是 Arrow 库实现上的历史遗留问题。通常可以提高兼容性,但某些旧版本的 Arrow 可能不是这样。 - - - -## output_format_parquet_compression_method {#output_format_parquet_compression_method} - - - -Parquet 输出格式所使用的压缩方式。支持的编解码器:snappy、lz4、brotli、zstd、gzip、none(不压缩) - - - -## output_format_parquet_data_page_size {#output_format_parquet_data_page_size} - - - -压缩前的目标页大小(字节)。 - - - -## output_format_parquet_date_as_uint16 {#output_format_parquet_date_as_uint16} - - - -将 Date 值写为普通的 16 位无符号整数(读取时为 UInt16),而不是将其转换为 32 位的 Parquet DATE 类型(读取时为 Date32)。 - - - -## output_format_parquet_datetime_as_uint32 {#output_format_parquet_datetime_as_uint32} - - - -以原始 Unix 时间戳形式写入 DateTime 值(读取时为 UInt32),而不是转换为毫秒(读取时为 DateTime64(3))。 - - - -## output_format_parquet_enum_as_byte_array {#output_format_parquet_enum_as_byte_array} - - - -使用 Parquet 物理类型 BYTE_ARRAY 和逻辑类型 ENUM 写出枚举值 - - - -## output_format_parquet_fixed_string_as_fixed_byte_array {#output_format_parquet_fixed_string_as_fixed_byte_array} - - - -对 `FixedString` 列,使用 Parquet 的 `FIXED_LEN_BYTE_ARRAY` 类型而非 `Binary` 类型。 - - - -## output_format_parquet_geometadata {#output_format_parquet_geometadata} - - - -允许在 Parquet 元数据中写入关于地理空间列的信息,并以 WKB 格式对这些列进行编码。 - - - -## output_format_parquet_max_dictionary_size {#output_format_parquet_max_dictionary_size} - - - -如果字典大小超过此字节数,则切换为非字典编码。将其设置为 0 可禁用字典编码。 - - - -## output_format_parquet_parallel_encoding {#output_format_parquet_parallel_encoding} - - - -使用多个线程执行 Parquet 编码。需要启用 output_format_parquet_use_custom_encoder。 - - - -## output_format_parquet_row_group_size {#output_format_parquet_row_group_size} - - - -目标行组大小(行数)。 - - - -## output_format_parquet_row_group_size_bytes {#output_format_parquet_row_group_size_bytes} - - - -压缩前的目标行组大小(字节)。 - - - -## output_format_parquet_string_as_string {#output_format_parquet_string_as_string} - - - -对 `String` 列使用 Parquet 的 `String` 类型而不是 `Binary` 类型。 - - - -## output_format_parquet_use_custom_encoder {#output_format_parquet_use_custom_encoder} - - - -使用更快的 Parquet 编码器实现。 - - - -## output_format_parquet_version {#output_format_parquet_version} - - - -输出格式所使用的 Parquet 版本。支持的版本:1.0、2.4、2.6 和 2.latest(默认) - - - -## output_format_parquet_write_bloom_filter {#output_format_parquet_write_bloom_filter} - - - -在 Parquet 文件中写入布隆过滤器。需要将 `output_format_parquet_use_custom_encoder` 设置为 `true`。 - - - -## output_format_parquet_write_checksums {#output_format_parquet_write_checksums} - - - -在 Parquet 数据页的页头写入 CRC32 校验和。 - - - -## output_format_parquet_write_page_index {#output_format_parquet_write_page_index} - - - -将列索引和偏移量索引(即每个数据页的统计信息,可在读取时用于过滤下推)写入 Parquet 文件。 - - - -## output_format_pretty_color {#output_format_pretty_color} - - - -在 Pretty 格式中使用 ANSI 转义序列。0 - 禁用,1 - 启用,'auto' - 在终端环境中启用。 - - - -## output_format_pretty_display_footer_column_names - - - -当表行数较多时,在页脚中显示列名。 - -可能的取值: - -* 0 — 在页脚中不显示列名。 -* 1 — 如果行数大于等于由 [output_format_pretty_display_footer_column_names_min_rows](#output_format_pretty_display_footer_column_names_min_rows) 设置的阈值(默认 50),则在页脚中显示列名。 - -**示例** - -查询: - -```sql -SELECT *, toTypeName(*) FROM (SELECT * FROM system.numbers LIMIT 1000); -``` - -结果: - -```response - ┌─number─┬─toTypeName(number)─┐ - 1. │ 0 │ UInt64 │ - 2. │ 1 │ UInt64 │ - 3. │ 2 │ UInt64 │ - ... - 999. │ 998 │ UInt64 │ -1000. │ 999 │ UInt64 │ - └─number─┴─toTypeName(number)─┘ -``` - - -## output_format_pretty_display_footer_column_names_min_rows {#output_format_pretty_display_footer_column_names_min_rows} - - - -设置在启用 [output_format_pretty_display_footer_column_names](#output_format_pretty_display_footer_column_names) 时,显示包含列名的页脚所需的最小行数。 - - - -## output_format_pretty_fallback_to_vertical {#output_format_pretty_fallback_to_vertical} - - - -如果启用,并且表比较宽但行数较少,`Pretty` 格式会像 `Vertical` 格式那样输出该表。 -有关此行为的精细调节,请参阅 `output_format_pretty_fallback_to_vertical_max_rows_per_chunk` 和 `output_format_pretty_fallback_to_vertical_min_table_width`。 - - - -## output_format_pretty_fallback_to_vertical_max_rows_per_chunk {#output_format_pretty_fallback_to_vertical_max_rows_per_chunk} - - - -仅当一个数据块中的记录数不超过指定值时,才会启用回退为 Vertical 格式(参见 `output_format_pretty_fallback_to_vertical`)。 - - - -## output_format_pretty_fallback_to_vertical_min_columns {#output_format_pretty_fallback_to_vertical_min_columns} - - - -仅当列数大于指定值时,才会启用回退到 Vertical 格式(参见 `output_format_pretty_fallback_to_vertical`)。 - - - -## output_format_pretty_fallback_to_vertical_min_table_width {#output_format_pretty_fallback_to_vertical_min_table_width} - - - -仅当表中各列长度之和至少达到指定值,或至少有一个值包含换行符时,才会启用回退到 Vertical 格式(参见 `output_format_pretty_fallback_to_vertical`)。 - - - -## output_format_pretty_glue_chunks {#output_format_pretty_glue_chunks} - - - -如果以 Pretty 格式渲染的数据是分成多个数据块到达的,即使中间有延迟,只要下一个数据块的列宽与前一个相同,就会使用 ANSI 转义序列将光标移回上一行,并覆盖前一个数据块的页脚,以便用新数据块继续输出。这样可以使结果在视觉上更美观。 - -0 - 禁用,1 - 启用,'auto' - 在终端中启用。 - - - -## output_format_pretty_grid_charset {#output_format_pretty_grid_charset} - - - -用于打印表格边框的字符集。可用字符集:ASCII、UTF-8(默认)。 - - - -## output_format_pretty_highlight_digit_groups {#output_format_pretty_highlight_digit_groups} - - - -如果启用且输出为终端,则会使用下划线高亮显示每个表示千位、百万位等的数字。 - - - -## output_format_pretty_highlight_trailing_spaces {#output_format_pretty_highlight_trailing_spaces} - - - -如果启用且输出为终端,则会使用灰色下划线高亮显示行尾空格。 - - - -## output_format_pretty_max_column_name_width_cut_to {#output_format_pretty_max_column_name_width_cut_to} - - - -如果列名过长,则会被截断为该长度。 -当列名长度大于 `output_format_pretty_max_column_name_width_cut_to` 加上 `output_format_pretty_max_column_name_width_min_chars_to_cut` 时,将会被截断。 - - - -## output_format_pretty_max_column_name_width_min_chars_to_cut {#output_format_pretty_max_column_name_width_min_chars_to_cut} - - - -当列名过长时,至少需要截断的字符数。 -当列名长度大于 `output_format_pretty_max_column_name_width_cut_to` 与 `output_format_pretty_max_column_name_width_min_chars_to_cut` 之和时,将会被截断。 - - - -## output_format_pretty_max_column_pad_width {#output_format_pretty_max_column_pad_width} - - - -在 Pretty 格式中,用于对列中所有值进行填充对齐的最大宽度。 - - - -## output_format_pretty_max_rows {#output_format_pretty_max_rows} - - - -Pretty 系列格式的行数上限。 - - - -## output_format_pretty_max_value_width {#output_format_pretty_max_value_width} - - - -用于 Pretty 格式显示的值的最大宽度。如果超过该宽度,显示内容将被截断。 -值为 0 表示不截断。 - - - -## output_format_pretty_max_value_width_apply_for_single_value {#output_format_pretty_max_value_width_apply_for_single_value} - - - -仅在数据块中不是单个值时才裁剪该值(参见 `output_format_pretty_max_value_width` 设置)。否则将其完整输出,这对于 `SHOW CREATE TABLE` 查询非常有用。 - - - -## output_format_pretty_multiline_fields {#output_format_pretty_multiline_fields} - - - -如果启用,Pretty 格式会将多行字段渲染在表格单元格内,从而保持表格的整体结构。 -如果禁用,则会按原样渲染它们,可能会导致表格变形(关闭该选项的一个好处是可以更方便地复制粘贴多行值)。 - - - -## output_format_pretty_row_numbers {#output_format_pretty_row_numbers} - - - -在 Pretty 输出格式中为每一行添加行号 - - - -## output_format_pretty_single_large_number_tip_threshold {#output_format_pretty_single_large_number_tip_threshold} - - - -如果数据块仅包含一个超过该值的数字(0 除外),则在表格右侧显示一条易读的数字提示。 - - - -## output_format_pretty_squash_consecutive_ms {#output_format_pretty_squash_consecutive_ms} - - - -在写入之前,最多等待指定毫秒数以获取下一个数据块,并将其与前一个数据块合并。 -这样可以避免频繁输出过小的数据块,同时仍然可以以流式方式显示数据。 - - - -## output_format_pretty_squash_max_wait_ms {#output_format_pretty_squash_max_wait_ms} - - - -如果自上次输出以来经过的毫秒数超过指定值,则以 pretty 格式输出当前待处理的数据块。 - - - -## output_format_protobuf_nullables_with_google_wrappers {#output_format_protobuf_nullables_with_google_wrappers} - - - -在使用 Google wrappers 序列化 `Nullable` 列时,将默认值序列化为空的 wrapper。若关闭此设置,则默认值和 null 值都不会被序列化。 - - - -## output_format_schema {#output_format_schema} - - - -自动生成的 schema 将以 [Cap'n Proto](/interfaces/formats/CapnProto) 或 [Protobuf](/interfaces/formats/Protobuf) 格式保存到该文件中时所使用的文件路径。 - - - -## output_format_sql_insert_include_column_names {#output_format_sql_insert_include_column_names} - - - -在 INSERT 查询中包含列名 - - - -## output_format_sql_insert_max_batch_size {#output_format_sql_insert_max_batch_size} - - - -单个 INSERT 语句中包含的最大行数。 - - - -## output_format_sql_insert_quote_names {#output_format_sql_insert_quote_names} - - - -使用 '`' 字符包裹列名 - - - -## output_format_sql_insert_table_name {#output_format_sql_insert_table_name} - - - -输出的 INSERT 查询中的表名 - - - -## output_format_sql_insert_use_replace {#output_format_sql_insert_use_replace} - - - -使用 REPLACE 语句而不是 INSERT - - - -## output_format_tsv_crlf_end_of_line {#output_format_tsv_crlf_end_of_line} - - - -如果将其设置为 true,TSV 格式的行结束符将使用 \\r\\n 而不是 \\n。 - - - -## output_format_values_escape_quote_with_quote {#output_format_values_escape_quote_with_quote} - - - -如果为 true,则将 ' 转义为 '',否则使用 \\' 将其括起来。 - - - -## output_format_write_statistics {#output_format_write_statistics} - - - -在支持的输出格式中写入关于读取行数、字节数和耗时的统计信息。 - -默认启用 - - - -## precise_float_parsing {#precise_float_parsing} - - - -首选更精确(但更慢)的浮点数解析算法 - - - -## regexp_dict_allow_hyperscan {#regexp_dict_allow_hyperscan} - - - -允许在 `regexp_tree` 字典中使用 Hyperscan 库。 - - - -## regexp_dict_flag_case_insensitive {#regexp_dict_flag_case_insensitive} - - - -对 `regexp_tree` 字典使用不区分大小写的匹配。可以在单个表达式中通过 `(?i)` 和 `(?-i)` 覆写此设置。 - - - -## regexp_dict_flag_dotall {#regexp_dict_flag_dotall} - - - -针对 `regexp_tree` 字典,允许 `.` 匹配换行符字符。 - - - -## rows_before_aggregation {#rows_before_aggregation} - - - -启用后,ClickHouse 会提供 `rows_before_aggregation` 指标的精确值,表示在聚合之前读取的行数。 - - - -## schema_inference_hints - -用于在对无模式的格式进行模式推断时作为提示的一组列名和类型列表。 - -示例: - -查询: - -```sql -desc format(JSONEachRow, '{"x" : 1, "y" : "String", "z" : "0.0.0.0" }') settings schema_inference_hints='x UInt8, z IPv4'; -``` - -结果: - -```sql -x UInt8 -y Nullable(String) -z IPv4 -``` - -:::note -如果 `schema_inference_hints` 的格式不正确,或者存在拼写错误、错误的数据类型等问题,整个 schema_inference_hints 都会被忽略。 -::: - - -## schema_inference_make_columns_nullable {#schema_inference_make_columns_nullable} - - - -控制在模式推断中是否将推断出的类型设为 `Nullable`。 -可能的取值: - * 0 - 推断出的类型永远不会是 `Nullable`(在这种情况下,请使用 `input_format_null_as_default` 控制如何处理 null 值), - * 1 - 所有推断出的类型都将是 `Nullable`, - * 2 或 `auto` - 只有当在模式推断期间解析的样本中该列包含 `NULL`,或文件元数据中包含该列是否可为空的信息时,推断出的类型才会是 `Nullable`, - * 3 - 如果格式包含文件元数据(例如 Parquet),则推断出的类型是否可为空将与文件元数据一致,否则(例如 CSV)一律为 Nullable。 - - - -## schema_inference_make_json_columns_nullable {#schema_inference_make_json_columns_nullable} - - - -控制在模式推断过程中是否将推断出的 JSON 类型设为 `Nullable`。 -如果此设置与 schema_inference_make_columns_nullable 同时启用,则推断出的 JSON 类型将为 `Nullable`。 - - - -## schema_inference_mode {#schema_inference_mode} - - - -schema 推断模式。`default` —— 假定所有文件具有相同的 schema,并且可以从任意一个文件推断出 schema;`union` —— 允许文件具有不同的 schema,最终的 schema 应为所有文件 schema 的并集。 - - - -## show_create_query_identifier_quoting_rule {#show_create_query_identifier_quoting_rule} - - - -设置 `SHOW CREATE` 查询中标识符的引用(加引号)规则 - - - -## show_create_query_identifier_quoting_style {#show_create_query_identifier_quoting_style} - - - -设置 `SHOW CREATE` 查询中标识符的引用风格 - - - -## type_json_skip_duplicated_paths {#type_json_skip_duplicated_paths} - - - -启用后,在将 JSON 对象解析为 JSON 类型时,会忽略重复的路径,仅插入首次出现的路径对应的值,而不会抛出异常。 - - - -## validate_experimental_and_suspicious_types_inside_nested_types {#validate_experimental_and_suspicious_types_inside_nested_types} - - - -验证在 Array/Map/Tuple 等嵌套类型中使用实验性和可疑数据类型 - - +{/*请勿编辑——此文件为自动生成的*/ } diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/settings/settings.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/settings/settings.md index 19c5f8d11ab..4ac5c1aa0b9 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/settings/settings.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/settings/settings.md @@ -1,11434 +1,10 @@ --- title: '会话设置' +description: '通过 system.settings 设置的会话参数' sidebar_label: '会话设置' slug: /operations/settings/settings toc_max_heading_level: 2 -description: '在 ``system.settings`` 表中可以找到的设置。' doc_type: 'reference' --- -import ExperimentalBadge from '@theme/badges/ExperimentalBadge'; -import BetaBadge from '@theme/badges/BetaBadge'; -import CloudOnlyBadge from '@theme/badges/CloudOnlyBadge'; -import SettingsInfoBlock from '@theme/SettingsInfoBlock/SettingsInfoBlock'; -import VersionHistory from '@theme/VersionHistory/VersionHistory'; - -{/* 自动生成 */ } - -下文列出的所有设置也可以在表 [system.settings](/docs/operations/system-tables/settings) 中查看。这些设置是从 [source](https://github.com/ClickHouse/ClickHouse/blob/master/src/Core/Settings.cpp) 源码自动生成的。 - - -## add_http_cors_header {#add_http_cors_header} - - - -添加 HTTP CORS 头。 - -## additional_result_filter - -用于对 `SELECT` 查询结果进行额外过滤的表达式。 -此设置不会应用于任何子查询。 - -**示例** - -```sql -INSERT INTO table_1 VALUES (1, 'a'), (2, 'bb'), (3, 'ccc'), (4, 'dddd'); -SElECT * FROM table_1; -``` - -```response -┌─x─┬─y────┐ -│ 1 │ a │ -│ 2 │ bb │ -│ 3 │ ccc │ -│ 4 │ dddd │ -└───┴──────┘ -``` - -```sql -SELECT * -FROM table_1 -SETTINGS additional_result_filter = 'x != 2' -``` - -```response -┌─x─┬─y────┐ -│ 1 │ a │ -│ 3 │ ccc │ -│ 4 │ dddd │ -└───┴──────┘ -``` - - -## additional_table_filters - - - -在从指定表读取数据之后应用的额外过滤表达式。 - -**示例** - -```sql -INSERT INTO table_1 VALUES (1, 'a'), (2, 'bb'), (3, 'ccc'), (4, 'dddd'); -SELECT * FROM table_1; -``` - -```response -┌─x─┬─y────┐ -│ 1 │ a │ -│ 2 │ bb │ -│ 3 │ ccc │ -│ 4 │ dddd │ -└───┴──────┘ -``` - -```sql -SELECT * -FROM table_1 -SETTINGS additional_table_filters = {'table_1': 'x != 2'} -``` - -```response -┌─x─┬─y────┐ -│ 1 │ a │ -│ 3 │ ccc │ -│ 4 │ dddd │ -└───┴──────┘ -``` - - -## aggregate_functions_null_for_empty - - - -启用或禁用对查询中的所有聚合函数进行重写,在它们后面添加 [-OrNull](/sql-reference/aggregate-functions/combinators#-ornull) 后缀。为与 SQL 标准兼容,可启用此设置。 -它通过查询重写实现(类似于 [count_distinct_implementation](#count_distinct_implementation) 设置),以在分布式查询中获得一致的结果。 - -可能的取值: - -* 0 — 禁用。 -* 1 — 启用。 - -**示例** - -考虑以下包含聚合函数的查询: - -```sql -SELECT SUM(-1), MAX(0) FROM system.one WHERE 0; -``` - -在将 `aggregate_functions_null_for_empty` 设为 0 时,将会得到: - -```text -┌─SUM(-1)─┬─MAX(0)─┐ -│ 0 │ 0 │ -└─────────┴────────┘ -``` - -当将 `aggregate_functions_null_for_empty` 设置为 1 时,结果为: - -```text -┌─SUMOrNull(-1)─┬─MAXOrNull(0)─┐ -│ NULL │ NULL │ -└───────────────┴──────────────┘ -``` - - -## aggregation_in_order_max_block_bytes {#aggregation_in_order_max_block_bytes} - - - -在按主键顺序进行聚合时,所累积数据块的最大大小(字节)。数据块越小,聚合的最终合并阶段就能获得越高的并行度。 - -## aggregation_memory_efficient_merge_threads {#aggregation_memory_efficient_merge_threads} - - - -在内存高效模式下,用于合并中间聚合结果的线程数。值越大,消耗的内存越多。0 表示与 `max_threads` 相同。 - -## allow_aggregate_partitions_independently {#allow_aggregate_partitions_independently} - - - -当分区键与 `GROUP BY` 键相匹配时,启用在独立线程上对各个分区进行独立聚合。当分区数量接近 CPU 核心数且各分区大小大致相同时,该设置更为有利。 - -## allow_archive_path_syntax {#allow_archive_path_syntax} - - - - - -File/S3 引擎和表函数在归档文件扩展名正确时,会将包含 `::` 的路径解析为 ` :: `。 - -## allow_asynchronous_read_from_io_pool_for_merge_tree {#allow_asynchronous_read_from_io_pool_for_merge_tree} - - - -使用后台 I/O 池从 MergeTree 表中读取数据。该设置可以提升 I/O 受限查询的性能。 - -## allow_changing_replica_until_first_data_packet {#allow_changing_replica_until_first_data_packet} - - - -如果启用此设置,在使用对冲请求时,即使我们已经取得了一些进展(但在 `receive_data_timeout` 超时时间内进度没有更新),在接收到第一个数据包之前仍然可以发起新的连接;否则,在我们第一次取得进展之后就会禁止切换副本。 - -## allow_create_index_without_type {#allow_create_index_without_type} - - - -允许在 `CREATE INDEX` 查询中不指定 `TYPE`。此类查询将被忽略。用于 SQL 兼容性测试。 - -## allow_custom_error_code_in_throwif {#allow_custom_error_code_in_throwif} - - - -在 throwIf() 函数中启用自定义错误码。若设置为 true,抛出的异常可能会带有意外的错误码。 - -## allow_ddl {#allow_ddl} - - - -当设置为 true 时,允许用户执行 DDL 查询。 - -## allow_deprecated_database_ordinary {#allow_deprecated_database_ordinary} - - - -允许创建基于已弃用 Ordinary 引擎的数据库 - -## allow_deprecated_error_prone_window_functions {#allow_deprecated_error_prone_window_functions} - - - - - -允许使用已弃用且容易导致错误的窗口函数(neighbor、runningAccumulate、runningDifferenceStartingWithFirstValue、runningDifference) - -## allow_deprecated_snowflake_conversion_functions {#allow_deprecated_snowflake_conversion_functions} - - - - - -函数 `snowflakeToDateTime`、`snowflakeToDateTime64`、`dateTimeToSnowflake` 和 `dateTime64ToSnowflake` 已被弃用,并默认被禁用。 -请改用函数 `snowflakeIDToDateTime`、`snowflakeIDToDateTime64`、`dateTimeToSnowflakeID` 和 `dateTime64ToSnowflakeID`。 - -若要重新启用这些已弃用的函数(例如在迁移过渡期间),请将此设置为 `true`。 - -## allow_deprecated_syntax_for_merge_tree {#allow_deprecated_syntax_for_merge_tree} - - - -允许使用已弃用的引擎定义语法来创建 *MergeTree 表 - -## allow_distributed_ddl {#allow_distributed_ddl} - - - -当该参数设置为 true 时,允许用户执行分布式 DDL 查询。 - -## allow_drop_detached {#allow_drop_detached} - - - -允许执行 ALTER TABLE ... DROP DETACHED PART[ITION] ... 语句 - -## allow_dynamic_type_in_join_keys {#allow_dynamic_type_in_join_keys} - - - - - -允许在 JOIN 键中使用 Dynamic 类型。该设置为兼容性而添加。不建议在 JOIN 键中使用 Dynamic 类型,因为与其他类型比较时可能会产生意外结果。 - -## allow_execute_multiif_columnar {#allow_execute_multiif_columnar} - - - -允许列式执行 multiIf 函数 - -## allow_experimental_alias_table_engine {#allow_experimental_alias_table_engine} - - - - - - - -允许创建使用 Alias 引擎的表。 - -## allow_experimental_analyzer {#allow_experimental_analyzer} - -**别名**: `enable_analyzer` - - - - - -允许使用新的查询分析器(analyzer)。 - -## allow_experimental_codecs {#allow_experimental_codecs} - - - - - -如果设置为 true,则允许指定实验性的压缩编解码器(但当前尚未提供此类编解码器,因此该选项目前没有任何实际效果)。 - -## allow_experimental_correlated_subqueries {#allow_experimental_correlated_subqueries} - - - - - - - -允许执行关联子查询。 - -## allow_experimental_database_glue_catalog {#allow_experimental_database_glue_catalog} - - - -**别名**: `allow_database_glue_catalog` - - - - - -允许使用 catalog_type = 'glue' 的实验性数据库引擎 DataLakeCatalog - -## allow_experimental_database_hms_catalog {#allow_experimental_database_hms_catalog} - - - - - - - -允许使用 catalog_type = 'hms' 的实验性数据库引擎 DataLakeCatalog - -## allow_experimental_database_iceberg {#allow_experimental_database_iceberg} - - - -**别名**: `allow_database_iceberg` - - - - - -允许使用实验性数据库引擎 DataLakeCatalog,当 catalog_type = 'iceberg' 时生效。 - -## allow_experimental_database_materialized_postgresql {#allow_experimental_database_materialized_postgresql} - - - - - -允许创建使用 Engine=MaterializedPostgreSQL(...) 的数据库。 - -## allow_experimental_database_unity_catalog {#allow_experimental_database_unity_catalog} - - - -**别名**: `allow_database_unity_catalog` - - - - - -允许以实验特性方式使用 catalog_type = 'unity' 的 DataLakeCatalog 数据库引擎 - -## allow_experimental_delta_kernel_rs {#allow_experimental_delta_kernel_rs} - - - - - - - -允许使用实验性的 delta-kernel-rs 实现。 - -## allow_experimental_delta_lake_writes {#allow_experimental_delta_lake_writes} - - - - - - - -启用 Delta Kernel 写入功能。 - -## allow_experimental_full_text_index {#allow_experimental_full_text_index} - - - - - - - -如果设置为 true,则允许使用实验性全文索引。 - -## allow_experimental_funnel_functions {#allow_experimental_funnel_functions} - - - - - -启用漏斗分析相关的实验性函数。 - -## allow_experimental_hash_functions {#allow_experimental_hash_functions} - - - - - -启用实验性哈希函数 - -## allow_experimental_iceberg_compaction {#allow_experimental_iceberg_compaction} - - - - - - - -允许在 Iceberg 表上显式使用 `OPTIMIZE` 命令。 - -## allow_experimental_insert_into_iceberg {#allow_experimental_insert_into_iceberg} - - - - - - - -允许执行 `INSERT` 查询向 Iceberg 表写入数据。 - -## allow_experimental_join_right_table_sorting {#allow_experimental_join_right_table_sorting} - - - - - - - -如果将其设置为 true,并且满足 `join_to_sort_minimum_perkey_rows` 和 `join_to_sort_maximum_table_rows` 的条件,则根据键对右表重新排序,以提升左或内哈希连接的性能。 - -## allow_experimental_kafka_offsets_storage_in_keeper {#allow_experimental_kafka_offsets_storage_in_keeper} - - - - - - - -允许启用实验功能,将 Kafka 相关的偏移量存储在 ClickHouse Keeper 中。启用后,可以在 Kafka 表引擎中指定 ClickHouse Keeper 的路径和副本名称。这样将会使用一种新的存储引擎类型替代常规的 Kafka 引擎,该引擎会将已提交的偏移量主要存储在 ClickHouse Keeper 中。 - -## allow_experimental_kusto_dialect {#allow_experimental_kusto_dialect} - - - - - - - -启用 Kusto Query Language (KQL),作为 SQL 的替代方案。 - -## allow_experimental_materialized_postgresql_table {#allow_experimental_materialized_postgresql_table} - - - - - -允许使用 `MaterializedPostgreSQL` 表引擎。默认禁用,因为该功能为实验性特性。 - -## allow_experimental_nlp_functions {#allow_experimental_nlp_functions} - - - - - -启用自然语言处理相关的实验性函数。 - -## allow_experimental_parallel_reading_from_replicas {#allow_experimental_parallel_reading_from_replicas} - - - -**别名**: `enable_parallel_replicas` - - - -在执行 SELECT 查询时,对每个分片最多使用 `max_parallel_replicas` 个副本。读取过程会被并行化并动态协调。0 - 禁用,1 - 启用,发生故障时静默禁用,2 - 启用,发生故障时抛出异常。 - -## allow_experimental_prql_dialect {#allow_experimental_prql_dialect} - - - - - - - -启用 PRQL——一种替代 SQL 的查询语言。 - -## allow_experimental_qbit_type {#allow_experimental_qbit_type} - - - - - - - -允许创建 [QBit](../../sql-reference/data-types/qbit.md) 数据类型。 - -## allow_experimental_query_deduplication {#allow_experimental_query_deduplication} - - - - - -用于基于 part UUID 的 SELECT 查询的实验性数据去重功能 - -## allow_experimental_statistics {#allow_experimental_statistics} - - - -**别名**: `allow_experimental_statistic` - - - - - -允许定义带有[统计信息](../../engines/table-engines/mergetree-family/mergetree.md/#table_engine-mergetree-creating-a-table)的列,并[对统计信息进行操作](../../engines/table-engines/mergetree-family/mergetree.md/#column-statistics)。 - -## allow_experimental_time_series_aggregate_functions {#allow_experimental_time_series_aggregate_functions} - - - -**别名**: `allow_experimental_ts_to_grid_aggregate_function` - - - - - -用于对类 Prometheus 时间序列进行重采样、速率和增量计算的实验性 timeSeries* 聚合函数。 - -## allow_experimental_time_series_table {#allow_experimental_time_series_table} - - - - - - - -允许创建使用 [TimeSeries](../../engines/table-engines/integrations/time-series.md) 表引擎的表。可能的取值为: - -- 0 — 禁用 [TimeSeries](../../engines/table-engines/integrations/time-series.md) 表引擎。 -- 1 — 启用 [TimeSeries](../../engines/table-engines/integrations/time-series.md) 表引擎。 - -## allow_experimental_time_time64_type {#allow_experimental_time_time64_type} - - - -**别名**: `enable_time_time64_type` - - - - - -允许创建 [Time](../../sql-reference/data-types/time.md) 和 [Time64](../../sql-reference/data-types/time64.md) 数据类型。 - -## allow_experimental_window_view {#allow_experimental_window_view} - - - - - -启用 WINDOW VIEW。功能尚不稳定。 - -## allow_experimental_ytsaurus_dictionary_source {#allow_experimental_ytsaurus_dictionary_source} - - - - - - - -用于与 YTsaurus 集成的实验性字典数据源。 - -## allow_experimental_ytsaurus_table_engine {#allow_experimental_ytsaurus_table_engine} - - - - - - - -用于与 YTsaurus 集成的实验性表引擎。 - -## allow_experimental_ytsaurus_table_function {#allow_experimental_ytsaurus_table_function} - - - - - - - -用于与 YTsaurus 集成的实验性表引擎。 - -## allow_general_join_planning {#allow_general_join_planning} - - - - - -允许使用一种更通用的 JOIN 规划算法,以处理更复杂的条件,此设置仅在启用哈希 JOIN 时生效。如果未启用哈希 JOIN,则无论该设置的值为何,都会使用常规的 JOIN 规划算法。 - -## allow_get_client_http_header {#allow_get_client_http_header} - - - - - -允许使用函数 `getClientHTTPHeader`,以获取当前 HTTP 请求中某个请求头的值。出于安全原因,该设置默认不启用,因为某些请求头(例如 `Cookie`)可能包含敏感信息。请注意,`X-ClickHouse-*` 和 `Authentication` 请求头始终受限,无法通过此函数获取。 - -## allow_hyperscan {#allow_hyperscan} - - - -允许使用 Hyperscan 库的函数。若要避免可能过长的编译时间和过度的资源占用,请将其禁用。 - -## allow_introspection_functions {#allow_introspection_functions} - - - -启用或禁用用于查询性能分析的[内省函数](../../sql-reference/functions/introspection.md)。 - -可能的取值: - -- 1 — 启用内省函数。 -- 0 — 禁用内省函数。 - -**另请参阅** - -- [采样查询分析器](../../operations/optimizing-performance/sampling-query-profiler.md) -- 系统表 [trace_log](/operations/system-tables/trace_log) - -## allow_materialized_view_with_bad_select {#allow_materialized_view_with_bad_select} - - - - - -允许在 CREATE MATERIALIZED VIEW 中使用引用不存在表或列的 SELECT 查询。该查询在语法上仍必须合法。不适用于可刷新的物化视图。不适用于需要根据 SELECT 查询推断物化视图表结构的情况(即 CREATE 语句中既没有列列表也没有 TO 表时)。可用于在其源表创建之前先创建物化视图。 - -## allow_named_collection_override_by_default {#allow_named_collection_override_by_default} - - - -默认允许覆盖命名集合中的字段。 - -## allow_non_metadata_alters {#allow_non_metadata_alters} - - - -允许执行不仅影响表元数据、还会更改磁盘上数据的 ALTER 操作 - -## allow_nonconst_timezone_arguments {#allow_nonconst_timezone_arguments} - - - - - -在某些与时间相关的函数中(如 `toTimeZone()`、`fromUnixTimestamp*()`、`snowflakeToDateTime*()`)允许使用非常量时区参数。 -该设置仅出于兼容性考虑而存在。在 ClickHouse 中,时区是数据类型(以及相应列)的一个属性。 -启用此设置会给人一种错误印象,即同一列中的不同值可以使用不同的时区。 -因此,请不要启用此设置。 - -## allow_nondeterministic_mutations - - - -用户级别设置,允许在复制表上执行的 mutation 使用诸如 `dictGet` 等非确定性函数。 - -由于例如字典在各节点之间可能不同步,从这些字典中获取值的 mutation 在复制表上默认不被允许。启用此设置后将允许此行为,由用户自行负责确保所使用的数据在所有节点之间保持同步。 - -**示例** - -```xml - - - 1 - - - - - - - -``` - - -## allow_nondeterministic_optimize_skip_unused_shards {#allow_nondeterministic_optimize_skip_unused_shards} - - - -允许在分片键中使用非确定性函数(例如 `rand` 或 `dictGet`,其中 `dictGet` 在更新时存在一些注意事项)。 - -可能的取值: - -- 0 — 不允许。 -- 1 — 允许。 - -## allow_not_comparable_types_in_comparison_functions {#allow_not_comparable_types_in_comparison_functions} - - - - - -允许或禁止在比较函数 `equal/less/greater/etc` 中使用不可比较的数据类型(例如 JSON、AggregateFunction 等)。 - -## allow_not_comparable_types_in_order_by {#allow_not_comparable_types_in_order_by} - - - - - -控制是否允许在 ORDER BY 键中使用不可比较的类型(例如 JSON/AggregateFunction)。 - -## allow_prefetched_read_pool_for_local_filesystem {#allow_prefetched_read_pool_for_local_filesystem} - - - -如果所有数据部分都位于本地文件系统上,则优先使用预取读取线程池 - -## allow_prefetched_read_pool_for_remote_filesystem {#allow_prefetched_read_pool_for_remote_filesystem} - - - -当所有分片都位于远程文件系统上时,优先使用预取线程池 - -## allow_push_predicate_ast_for_distributed_subqueries {#allow_push_predicate_ast_for_distributed_subqueries} - - - - - -允许在启用 analyzer 的情况下,为分布式子查询在 AST 层级进行谓词下推 - -## allow_push_predicate_when_subquery_contains_with {#allow_push_predicate_when_subquery_contains_with} - - - -允许在子查询包含 WITH 子句时进行谓词下推 - -## allow_reorder_prewhere_conditions {#allow_reorder_prewhere_conditions} - - - - - -在将条件从 WHERE 移动到 PREWHERE 时,允许对其重新排序以优化过滤效果 - -## allow_settings_after_format_in_insert - - - - - -控制是否允许在 `INSERT` 查询中在 `FORMAT` 之后使用 `SETTINGS`。不推荐使用此选项,因为这可能会将 `SETTINGS` 的一部分解释为值。 - -示例: - -```sql -INSERT INTO FUNCTION null('foo String') SETTINGS max_threads=1 VALUES ('bar'); -``` - -但如下查询只有在启用了 `allow_settings_after_format_in_insert` 时才能运行: - -```sql -SET allow_settings_after_format_in_insert=1; -INSERT INTO FUNCTION null('foo String') VALUES ('bar') SETTINGS max_threads=1; -``` - -可能的取值: - -* 0 — 不允许。 -* 1 — 允许。 - -:::note -仅当你的使用场景依赖旧语法并需要保持向后兼容性时,才使用该设置。 -::: - - -## allow_simdjson {#allow_simdjson} - - - -如果支持 AVX2 指令集,则允许在 `JSON*` 函数中使用 simdjson 库。禁用后将改用 rapidjson。 - -## allow_special_serialization_kinds_in_output_formats {#allow_special_serialization_kinds_in_output_formats} - - - - - -允许在输出时保留 Sparse、Replicated 等特殊序列化类型的列,而无需将其转换为完整列表示。 -这有助于在格式化过程中避免不必要的数据复制。 - -## allow_statistics_optimize {#allow_statistics_optimize} - - - -**别名**: `allow_statistic_optimize` - - - - - -允许使用统计信息优化查询 - -## allow_suspicious_codecs {#allow_suspicious_codecs} - - - - - -如果设置为 true,则允许指定无效的压缩编解码器。 - -## allow_suspicious_fixed_string_types {#allow_suspicious_fixed_string_types} - - - -在 CREATE TABLE 语句中,允许创建类型为 FixedString(n) 且 n > 256 的列。长度 >= 256 的 FixedString 类型较为可疑,很可能表示该类型被误用。 - -## allow_suspicious_indices {#allow_suspicious_indices} - - - - - -拒绝包含相同表达式的主/辅助索引和排序键 - -## allow_suspicious_low_cardinality_types {#allow_suspicious_low_cardinality_types} - - - -允许或限制对以下数据类型使用 [LowCardinality](../../sql-reference/data-types/lowcardinality.md),这些数据类型的固定大小为 8 字节或更小:数值数据类型以及 `FixedString(8_bytes_or_less)`。 - -对于这类较小的固定长度值,使用 `LowCardinality` 通常并不高效,因为 ClickHouse 会为每一行存储一个数值索引。因此: - -- 磁盘空间使用量可能增加。 -- 内存(RAM)消耗可能更高,取决于字典大小。 -- 由于额外的编码/解码操作,一些函数可能运行更慢。 - -在 [MergeTree](../../engines/table-engines/mergetree-family/mergetree.md) 引擎表中,合并时间也可能因为以上原因而增加。 - -可能的取值: - -- 1 — 不限制对 `LowCardinality` 的使用。 -- 0 — 限制对 `LowCardinality` 的使用。 - -## allow_suspicious_primary_key {#allow_suspicious_primary_key} - - - - - -允许为 MergeTree 使用可疑的 `PRIMARY KEY`/`ORDER BY`(例如 SimpleAggregateFunction)。 - -## allow_suspicious_ttl_expressions {#allow_suspicious_ttl_expressions} - - - - - -拒绝不依赖于表中任意列的 TTL 表达式。这在大多数情况下表示用户配置错误。 - -## allow_suspicious_types_in_group_by {#allow_suspicious_types_in_group_by} - - - - - -允许或禁止在 GROUP BY 键中使用 [Variant](../../sql-reference/data-types/variant.md) 和 [Dynamic](../../sql-reference/data-types/dynamic.md) 类型。 - -## allow_suspicious_types_in_order_by {#allow_suspicious_types_in_order_by} - - - - - -控制是否允许在 ORDER BY 键中使用 [Variant](../../sql-reference/data-types/variant.md) 和 [Dynamic](../../sql-reference/data-types/dynamic.md) 类型。 - -## allow_suspicious_variant_types {#allow_suspicious_variant_types} - - - - - -在 CREATE TABLE 语句中允许指定包含相近变体类型的 Variant 类型(例如,不同的数值或日期类型)。启用此设置后,在处理这些相近类型的值时可能会引入一定的歧义。 - -## allow_unrestricted_reads_from_keeper {#allow_unrestricted_reads_from_keeper} - - - -允许对 system.zookeeper 表进行不加路径限制的读取,在某些情况下可能很方便,但对 ZooKeeper 来说并不安全。 - -## alter_move_to_space_execute_async {#alter_move_to_space_execute_async} - - - -以异步方式执行 ALTER TABLE MOVE ... TO [DISK|VOLUME] - -## alter_partition_verbose_result - - - -启用或禁用显示在分区和数据片段上成功执行的操作所涉及的数据片段信息。 -适用于 [ATTACH PARTITION|PART](/sql-reference/statements/alter/partition#attach-partitionpart) 和 [FREEZE PARTITION](/sql-reference/statements/alter/partition#freeze-partition)。 - -可能的取值: - -* 0 — 禁用详细信息输出。 -* 1 — 启用详细信息输出。 - -**示例** - -```sql -CREATE TABLE test(a Int64, d Date, s String) ENGINE = MergeTree PARTITION BY toYYYYMDECLARE(d) ORDER BY a; -INSERT INTO test VALUES(1, '2021-01-01', ''); -INSERT INTO test VALUES(1, '2021-01-01', ''); -ALTER TABLE test DETACH PARTITION ID '202101'; - -ALTER TABLE test ATTACH PARTITION ID '202101' SETTINGS alter_partition_verbose_result = 1; - -┌─command_type─────┬─partition_id─┬─part_name────┬─old_part_name─┐ -│ ATTACH PARTITION │ 202101 │ 202101_7_7_0 │ 202101_5_5_0 │ -│ ATTACH PARTITION │ 202101 │ 202101_8_8_0 │ 202101_6_6_0 │ -└──────────────────┴──────────────┴──────────────┴───────────────┘ - -ALTER TABLE test FREEZE SETTINGS alter_partition_verbose_result = 1; - -┌─command_type─┬─partition_id─┬─part_name────┬─backup_name─┬─backup_path───────────────────┬─part_backup_path────────────────────────────────────────────┐ -│ FREEZE ALL │ 202101 │ 202101_7_7_0 │ 8 │ /var/lib/clickhouse/shadow/8/ │ /var/lib/clickhouse/shadow/8/data/default/test/202101_7_7_0 │ -│ FREEZE ALL │ 202101 │ 202101_8_8_0 │ 8 │ /var/lib/clickhouse/shadow/8/ │ /var/lib/clickhouse/shadow/8/data/default/test/202101_8_8_0 │ -└──────────────┴──────────────┴──────────────┴─────────────┴───────────────────────────────┴─────────────────────────────────────────────────────────────┘ -``` - - -## alter_sync {#alter_sync} - -**别名**: `replication_alter_partitions_sync` - - - -用于配置在执行 [ALTER](../../sql-reference/statements/alter/index.md)、[OPTIMIZE](../../sql-reference/statements/optimize.md) 或 [TRUNCATE](../../sql-reference/statements/truncate.md) 查询时,对副本上相应操作的等待方式。 - -可能的取值: - -- `0` — 不等待。 -- `1` — 等待本副本执行完成。 -- `2` — 等待所有副本执行完成。 - -Cloud 默认值:`1`。 - -:::note -`alter_sync` 仅适用于 `Replicated` 表,对非 `Replicated` 表的 ALTER 不产生任何影响。 -::: - -## alter_update_mode {#alter_update_mode} - - - - - -用于包含 `UPDATE` 命令的 `ALTER` 查询的模式。 - -可用的取值: - -- `heavy` - 运行常规变更(mutation)操作。 -- `lightweight` - 如果可能则运行轻量级更新,否则运行常规变更操作。 -- `lightweight_force` - 如果可能则运行轻量级更新,否则抛出异常。 - -## analyze_index_with_space_filling_curves {#analyze_index_with_space_filling_curves} - - - -如果一个表的索引使用了空间填充曲线,例如 `ORDER BY mortonEncode(x, y)` 或 `ORDER BY hilbertEncode(x, y)`,并且查询包含针对这些参数的条件,例如 `x >= 10 AND x <= 20 AND y >= 20 AND y <= 30`,则会使用该空间填充曲线进行索引分析。 - -## analyzer_compatibility_allow_compound_identifiers_in_unflatten_nested {#analyzer_compatibility_allow_compound_identifiers_in_unflatten_nested} - - - - - -允许在 Nested 列中使用复合标识符。这是一个兼容性设置,因为它会改变查询结果。禁用该设置后,`SELECT a.b.c FROM table ARRAY JOIN a` 将无法工作,并且在执行 `SELECT a FROM table` 时,结果中的 `Nested a` 列将不再包含 `a.b.c` 列。 - -## analyzer_compatibility_join_using_top_level_identifier {#analyzer_compatibility_join_using_top_level_identifier} - - - - - -在 JOIN USING 中强制根据投影解析标识符(例如,在 `SELECT a + 1 AS b FROM t1 JOIN t2 USING (b)` 中,JOIN 将通过 `t1.a + 1 = t2.b` 来执行,而不是 `t1.b = t2.b`)。 - -## any_join_distinct_right_table_keys {#any_join_distinct_right_table_keys} - - - - - -在 `ANY INNER|LEFT JOIN` 操作中启用 ClickHouse 的旧版服务器端行为。 - -:::note -仅当您的使用场景依赖旧版 `JOIN` 行为、需要保持向后兼容时才使用此设置。 -::: - -当启用旧版行为时: - -- `t1 ANY LEFT JOIN t2` 和 `t2 ANY RIGHT JOIN t1` 操作的结果不相等,因为 ClickHouse 使用从左到右的多对一表键映射逻辑。 -- `ANY INNER JOIN` 操作的结果包含左表中的所有行,其行为类似于 `SEMI LEFT JOIN` 操作。 - -当禁用旧版行为时: - -- `t1 ANY LEFT JOIN t2` 和 `t2 ANY RIGHT JOIN t1` 操作的结果相等,因为 ClickHouse 在 `ANY RIGHT JOIN` 操作中使用一对多键映射逻辑。 -- `ANY INNER JOIN` 操作的结果对于每个键,在左右两个表中总共只包含一行。 - -可能的取值: - -- 0 — 禁用旧版行为。 -- 1 — 启用旧版行为。 - -另请参阅: - -- [JOIN strictness](/sql-reference/statements/select/join#settings) - -## apply_deleted_mask {#apply_deleted_mask} - - - -启用对通过 lightweight DELETE 删除的行进行过滤。如果禁用该设置,查询仍然可以读取这些行。这对于调试和“undelete”(撤销删除)场景非常有用。 - -## apply_mutations_on_fly {#apply_mutations_on_fly} - - - -如果为 true,则会在 SELECT 时应用尚未在数据部分中物化的变更操作(UPDATE 和 DELETE)。 - -## apply_patch_parts {#apply_patch_parts} - - - - - -如果为 true,则在执行 SELECT 查询时会应用补丁分片(表示轻量级更新)。 - -## apply_patch_parts_join_cache_buckets {#apply_patch_parts_join_cache_buckets} - - - - - -在 Join 模式下应用补丁部分时,临时缓存中使用的桶数量。 - -## apply_settings_from_server {#apply_settings_from_server} - - - - - -客户端是否应接受来自服务端的设置。 - -这只影响在客户端执行的操作,特别是对 INSERT 输入数据的解析以及查询结果的格式化。大部分查询执行发生在服务端,因此不受此设置影响。 - -通常应在用户配置中设置该选项(`users.xml` 或通过 `ALTER USER` 之类的查询),而不是通过客户端进行设置(客户端命令行参数、`SET` 查询,或 `SELECT` 查询的 `SETTINGS` 子句)。通过客户端可以将其改为 `false`,但不能改为 `true`(因为如果用户配置中设置了 `apply_settings_from_server = false`,服务端就不会向客户端发送这些设置)。 - -请注意,最初(24.12)这是一个服务端设置(`send_settings_to_client`),但后来为了提高易用性,被这个客户端设置所替代。 - -## arrow_flight_request_descriptor_type {#arrow_flight_request_descriptor_type} - - - - - -用于 Arrow Flight 请求的描述符类型。'path' 将数据集名称作为路径描述符发送,'command' 将 SQL 查询作为命令描述符发送(Dremio 要求使用该类型)。 - -可能的取值: - -- 'path' — 使用 FlightDescriptor::Path(默认值,适用于大多数 Arrow Flight 服务器) -- 'command' — 使用 FlightDescriptor::Command,并携带 SELECT 查询(Dremio 要求使用该类型) - -## asterisk_include_alias_columns {#asterisk_include_alias_columns} - - - -在通配符查询(`SELECT *`)中是否包含 [ALIAS](../../sql-reference/statements/create/table.md/#alias) 列。 - -可能的取值: - -- 0 - 禁用 -- 1 - 启用 - -## asterisk_include_materialized_columns {#asterisk_include_materialized_columns} - - - -在通配符查询(`SELECT *`)中包含 [MATERIALIZED](/sql-reference/statements/create/view#materialized-view) 列。 - -可能的取值: - -- 0 - 禁用 -- 1 - 启用 - -## async_insert {#async_insert} - - - -如果为 true,来自 INSERT 查询的数据会先存入队列,然后在后台刷新到表中。 -如果 wait_for_async_insert 为 false,INSERT 查询几乎会立即完成;否则,客户端会一直等待,直到数据刷新到表中。 - -## async_insert_busy_timeout_decrease_rate {#async_insert_busy_timeout_decrease_rate} - - - - - -自适应异步插入超时缩短时的指数变化速率 - -## async_insert_busy_timeout_increase_rate {#async_insert_busy_timeout_increase_rate} - - - - - -自适应异步插入超时时间增加所采用的指数增长率 - -## async_insert_busy_timeout_max_ms {#async_insert_busy_timeout_max_ms} - -**别名**: `async_insert_busy_timeout_ms` - - - - - -自首次接收到该查询的数据起,在转储已收集数据前所等待的最长时间。 - -## async_insert_busy_timeout_min_ms {#async_insert_busy_timeout_min_ms} - - - - - -如果通过 async_insert_use_adaptive_busy_timeout 启用了自适应调整,则这是自首次收到数据起,在为每个查询将已收集的数据写出(刷出)前需要等待的最短时间。同时它也是自适应算法的初始值。 - -## async_insert_deduplicate {#async_insert_deduplicate} - - - -对于复制表中的异步 INSERT 查询,指定对插入的数据块执行去重。 - -## async_insert_max_data_size {#async_insert_max_data_size} - - - - - -在插入之前,每个查询可收集的未解析数据的最大字节数。 - -## async_insert_max_query_number {#async_insert_max_query_number} - - - -在执行异步插入之前允许累积的最大插入查询数量。 -仅当将设置 [`async_insert_deduplicate`](#async_insert_deduplicate) 置为 1 时生效。 - -## async_insert_poll_timeout_ms {#async_insert_poll_timeout_ms} - - - - - -从异步插入队列中轮询获取数据的超时时间 - -## async_insert_use_adaptive_busy_timeout {#async_insert_use_adaptive_busy_timeout} - - - - - -如果将其设置为 true,则对异步插入使用自适应繁忙超时时间。 - -## async_query_sending_for_remote {#async_query_sending_for_remote} - - - - - -在执行远程查询时,允许异步创建连接并发送查询。 - -默认开启。 - -## async_socket_for_remote {#async_socket_for_remote} - - - - - -在执行远程查询时启用从套接字进行异步读取。 - -默认启用。 - -## azure_allow_parallel_part_upload {#azure_allow_parallel_part_upload} - - - - - -在 Azure 多部分上传时使用多线程。 - -## azure_check_objects_after_upload {#azure_check_objects_after_upload} - - - - - -检查上传到 Azure Blob 存储的每个对象,确保上传成功 - -## azure_connect_timeout_ms {#azure_connect_timeout_ms} - - - - - -从 Azure 磁盘连接到主机时的连接超时时间。 - -## azure_create_new_file_on_insert {#azure_create_new_file_on_insert} - - - -启用或禁用在 Azure 引擎表中每次插入时创建新文件的功能 - -## azure_ignore_file_doesnt_exist {#azure_ignore_file_doesnt_exist} - - - - - -在读取特定键时,如果文件不存在则忽略该文件。 - -可能的取值: - -- 1 — `SELECT` 返回空结果。 -- 0 — `SELECT` 抛出异常。 - -## azure_list_object_keys_size {#azure_list_object_keys_size} - - - -ListObject 请求单次批量返回中可包含的最大文件数量 - -## azure_max_blocks_in_multipart_upload {#azure_max_blocks_in_multipart_upload} - - - - - -Azure 分块上传时允许的最大块数。 - -## azure_max_get_burst {#azure_max_get_burst} - - - - - -在触及每秒请求数限制之前,允许同时发起的最大请求数。默认值为 0,与 `azure_max_get_rps` 相同。 - -## azure_max_get_rps {#azure_max_get_rps} - - - - - -Azure 在触发限流前允许的每秒 GET 请求数上限。0 表示无限制。 - -## azure_max_inflight_parts_for_one_file {#azure_max_inflight_parts_for_one_file} - - - - - -多部分上传请求中允许并发上传的分片数量上限。0 表示不限制。 - -## azure_max_put_burst {#azure_max_put_burst} - - - - - -在达到每秒请求数上限之前,可以同时发出的最大请求数量。默认值为 0 时,与 `azure_max_put_rps` 相同。 - -## azure_max_put_rps {#azure_max_put_rps} - - - - - -在触发限流之前,Azure 每秒 PUT 请求数的上限。0 表示无限制。 - -## azure_max_redirects {#azure_max_redirects} - - - - - -Azure 重定向允许的最大跳转次数。 - -## azure_max_single_part_copy_size {#azure_max_single_part_copy_size} - - - - - -使用单部分复制到 Azure Blob 存储时可复制对象的最大大小。 - -## azure_max_single_part_upload_size {#azure_max_single_part_upload_size} - - - - - -使用单段上传(single-part upload)将对象上传到 Azure Blob Storage 时允许的最大对象大小。 - -## azure_max_single_read_retries {#azure_max_single_read_retries} - - - -单次从 Azure Blob 存储读取时的最大重试次数。 - -## azure_max_unexpected_write_error_retries {#azure_max_unexpected_write_error_retries} - - - - - -在向 Azure Blob 存储写入数据时发生意外错误时允许的最大重试次数 - -## azure_max_upload_part_size {#azure_max_upload_part_size} - - - - - -在对 Azure Blob 存储执行分块上传时,单个分块可上传的最大大小。 - -## azure_min_upload_part_size {#azure_min_upload_part_size} - - - - - -在向 Azure Blob 存储进行分片上传时,每个分片的最小大小。 - -## azure_request_timeout_ms {#azure_request_timeout_ms} - - - - - -向 Azure 发送数据或从 Azure 接收数据时的空闲超时时间。如果单次 TCP 读或写调用被阻塞达到该时长,则视为失败。 - -## azure_sdk_max_retries {#azure_sdk_max_retries} - - - - - -Azure SDK 中允许的最大重试次数 - -## azure_sdk_retry_initial_backoff_ms {#azure_sdk_retry_initial_backoff_ms} - - - - - -Azure SDK 重试的最小退避时间 - -## azure_sdk_retry_max_backoff_ms {#azure_sdk_retry_max_backoff_ms} - - - - - -Azure SDK 重试之间的最大退避时间 - -## azure_skip_empty_files {#azure_skip_empty_files} - - - - - -在 Azure 表引擎中启用或禁用跳过空文件。 - -可能的取值: - -- 0 — 如果空文件与请求的格式不兼容,`SELECT` 会抛出异常。 -- 1 — 对于空文件,`SELECT` 返回空结果。 - -## azure_strict_upload_part_size {#azure_strict_upload_part_size} - - - - - -在对 Azure Blob Storage 执行分块上传时,每个分块的精确大小。 - -## azure_throw_on_zero_files_match {#azure_throw_on_zero_files_match} - - - - - -如果根据通配符(glob)展开规则匹配到的文件数为零,则抛出错误。 - -可能的取值: - -- 1 — `SELECT` 抛出异常。 -- 0 — `SELECT` 返回空结果。 - -## azure_truncate_on_insert {#azure_truncate_on_insert} - - - -启用或禁用在向 Azure 引擎表执行插入操作前进行截断(truncate)。 - -## azure_upload_part_size_multiply_factor {#azure_upload_part_size_multiply_factor} - - - - - -每当在一次写入 Azure Blob Storage 的过程中上传的分片数达到 azure_multiply_parts_count_threshold 个时,就将 azure_min_upload_part_size 乘以该系数。 - -## azure_upload_part_size_multiply_parts_count_threshold {#azure_upload_part_size_multiply_parts_count_threshold} - - - - - -每当上传到 Azure Blob 存储的分块数量达到该值时,azure_min_upload_part_size 会乘以 azure_upload_part_size_multiply_factor。 - -## azure_use_adaptive_timeouts {#azure_use_adaptive_timeouts} - - - - - -当设置为 `true` 时,所有 Azure 请求的前两次尝试将使用较短的发送和接收超时时间。 -当设置为 `false` 时,所有尝试都使用相同的发送和接收超时时间。 - -## backup_restore_batch_size_for_keeper_multi {#backup_restore_batch_size_for_keeper_multi} - - - -在备份或恢复过程中,对 [Zoo]Keeper 发起 multi 请求时的最大批次大小 - -## backup_restore_batch_size_for_keeper_multiread {#backup_restore_batch_size_for_keeper_multiread} - - - -在备份或恢复期间,向 [Zoo]Keeper 发送 multiread 请求时的最大批量大小 - -## backup_restore_failure_after_host_disconnected_for_seconds {#backup_restore_failure_after_host_disconnected_for_seconds} - - - - - -如果在执行 `BACKUP ON CLUSTER` 或 `RESTORE ON CLUSTER` 操作期间,某个主机在该时间内未能在 ZooKeeper 中重新创建其临时的 `alive` 节点,则整个备份或恢复操作将被视为失败。 -该值应大于主机在发生故障后重新连接到 ZooKeeper 所需的任何合理时间。 -设置为零表示无限制。 - -## backup_restore_finish_timeout_after_error_sec {#backup_restore_finish_timeout_after_error_sec} - - - - - -在当前 BACKUP ON CLUSTER 或 RESTORE ON CLUSTER 操作中,发起端为等待其他主机对 `error` 节点作出反应并停止其工作而应等待的最长时间(秒)。 - -## backup_restore_keeper_fault_injection_probability {#backup_restore_keeper_fault_injection_probability} - - - -在备份或恢复期间,对 keeper 请求进行故障注入时的近似失败概率。有效取值区间为 [0.0f, 1.0f]。 - -## backup_restore_keeper_fault_injection_seed {#backup_restore_keeper_fault_injection_seed} - - - -0 - 使用随机种子,否则使用该设置值 - -## backup_restore_keeper_max_retries {#backup_restore_keeper_max_retries} - - - - - -在 BACKUP 或 RESTORE 操作过程中,[Zoo]Keeper 操作的最大重试次数。 -应设置得足够大,以避免整个操作因为临时的 [Zoo]Keeper 故障而失败。 - -## backup_restore_keeper_max_retries_while_handling_error {#backup_restore_keeper_max_retries_while_handling_error} - - - - - -在处理 BACKUP ON CLUSTER 或 RESTORE ON CLUSTER 操作过程中出现错误时,[Zoo]Keeper 操作的最大重试次数。 - -## backup_restore_keeper_max_retries_while_initializing {#backup_restore_keeper_max_retries_while_initializing} - - - - - -在 BACKUP ON CLUSTER 或 RESTORE ON CLUSTER 操作初始化期间,[Zoo]Keeper 操作的最大重试次数。 - -## backup_restore_keeper_retry_initial_backoff_ms {#backup_restore_keeper_retry_initial_backoff_ms} - - - -在备份或恢复过程中,[Zoo]Keeper 操作的初始退避超时时间 - -## backup_restore_keeper_retry_max_backoff_ms {#backup_restore_keeper_retry_max_backoff_ms} - - - -在备份或恢复期间,[Zoo]Keeper 操作的最大退避等待时间 - -## backup_restore_keeper_value_max_size {#backup_restore_keeper_value_max_size} - - - -备份时 [Zoo]Keeper 节点数据的最大大小 - -## backup_restore_s3_retry_attempts {#backup_restore_s3_retry_attempts} - - - - - -用于 Aws::Client::RetryStrategy 的设置。Aws::Client 会自行执行重试,0 表示不重试。该设置仅在备份/恢复时生效。 - -## backup_restore_s3_retry_initial_backoff_ms {#backup_restore_s3_retry_initial_backoff_ms} - - - - - -在备份和恢复期间,第一次重试前的初始退避时间(毫秒)。后续每次重试都会按指数方式增加退避时间,直至达到由 `backup_restore_s3_retry_max_backoff_ms` 指定的最大值。 - -## backup_restore_s3_retry_jitter_factor {#backup_restore_s3_retry_jitter_factor} - - - - - -在备份和恢复操作期间,用于 Aws::Client::RetryStrategy 中重试退避延迟的抖动因子。计算得到的退避延迟会乘以一个位于区间 [1.0, 1.0 + jitter] 内的随机因子,且不超过 `backup_restore_s3_retry_max_backoff_ms`。取值必须在区间 [0.0, 1.0] 内。 - -## backup_restore_s3_retry_max_backoff_ms {#backup_restore_s3_retry_max_backoff_ms} - - - - - -在备份和恢复操作期间,重试之间的最大延迟(毫秒)。 - -## backup_slow_all_threads_after_retryable_s3_error {#backup_slow_all_threads_after_retryable_s3_error} - - - - - -当设置为 `true` 时,一旦任意一个 S3 请求遇到可重试的 S3 错误(例如 “Slow Down”),所有向同一备份端点发起 S3 请求的线程都会被放慢。 -当设置为 `false` 时,每个线程都会独立于其他线程处理 S3 请求的退避逻辑。 - -## cache_warmer_threads {#cache_warmer_threads} - - - - - -仅在 ClickHouse Cloud 中生效。在启用 [cache_populated_by_fetch](merge-tree-settings.md/#cache_populated_by_fetch) 时,用于预先将新的数据片段下载到文件缓存中的后台线程数。设置为 0 表示禁用。 - -## calculate_text_stack_trace {#calculate_text_stack_trace} - - - -在查询执行过程中发生异常时,计算文本堆栈跟踪。这是默认行为。该功能需要进行符号查找,在模糊测试执行大量错误查询时可能会降低速度。在正常情况下,你不应禁用此选项。 - -## cancel_http_readonly_queries_on_client_close {#cancel_http_readonly_queries_on_client_close} - - - -如果客户端在未等待响应的情况下关闭连接,则取消 HTTP 只读查询(例如 `SELECT`)。 - -Cloud 默认值:`0`。 - -## cast_ipv4_ipv6_default_on_conversion_error {#cast_ipv4_ipv6_default_on_conversion_error} - - - - - -对 IPv4 类型的 CAST 运算符、对 IPv6 类型的 CAST 运算符,以及函数 toIPv4、toIPv6 在转换出错时将返回默认值,而不是抛出异常。 - -## cast_keep_nullable - - - -启用或禁用在 [CAST](/sql-reference/functions/type-conversion-functions#cast) 操作中保留 `Nullable` 数据类型。 - -启用该设置时,如果 `CAST` 函数的参数类型为 `Nullable`,则结果也会被转换为 `Nullable` 类型。禁用该设置时,结果始终精确为目标类型。 - -可能的取值: - -* 0 — `CAST` 的结果与指定的目标类型完全一致。 -* 1 — 如果参数类型为 `Nullable`,则 `CAST` 的结果会被转换为 `Nullable(DestinationDataType)`。 - -**示例** - -以下查询的结果数据类型与目标数据类型完全一致: - -```sql -SET cast_keep_nullable = 0; -SELECT CAST(toNullable(toInt32(0)) AS Int32) as x, toTypeName(x); -``` - -结果: - -```text -┌─x─┬─toTypeName(CAST(toNullable(toInt32(0)), 'Int32'))─┐ -│ 0 │ Int32 │ -└───┴───────────────────────────────────────────────────┘ -``` - -以下查询会导致目标数据类型被加上 `Nullable` 修饰符: - -```sql -SET cast_keep_nullable = 1; -SELECT CAST(toNullable(toInt32(0)) AS Int32) as x, toTypeName(x); -``` - -结果: - -```text -┌─x─┬─toTypeName(CAST(toNullable(toInt32(0)), 'Int32'))─┐ -│ 0 │ Nullable(Int32) │ -└───┴───────────────────────────────────────────────────┘ -``` - -**另请参阅** - -* [CAST](/sql-reference/functions/type-conversion-functions#cast) 函数 - - -## cast_string_to_date_time_mode {#cast_string_to_date_time_mode} - - - - - -允许在从 String 转换为日期和时间时选择用于解析其文本表示的解析器。 - -可选值: - -- `'best_effort'` — 启用扩展解析。 - - ClickHouse 可以解析基本的 `YYYY-MM-DD HH:MM:SS` 格式以及所有 [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) 日期和时间格式。例如,`'2018-06-08T01:02:03.000Z'`。 - -- `'best_effort_us'` — 与 `best_effort` 类似(差异见 [parseDateTimeBestEffortUS](../../sql-reference/functions/type-conversion-functions#parsedatetimebesteffortus)) - -- `'basic'` — 使用基础解析器。 - - ClickHouse 只能解析基础的 `YYYY-MM-DD HH:MM:SS` 或 `YYYY-MM-DD` 格式。例如,`2019-08-20 10:18:56` 或 `2019-08-20`。 - -另请参阅: - -- [DateTime 数据类型。](../../sql-reference/data-types/datetime.md) -- [用于处理日期和时间的函数。](../../sql-reference/functions/date-time-functions.md) - -## cast_string_to_dynamic_use_inference {#cast_string_to_dynamic_use_inference} - - - - - -在将 String 转换为 Dynamic 时使用类型推断 - -## cast_string_to_variant_use_inference {#cast_string_to_variant_use_inference} - - - - - -在从 String 转换为 Variant 的过程中使用类型推断。 - -## check_query_single_value_result {#check_query_single_value_result} - - - -定义针对 `MergeTree` 系列引擎的 [CHECK TABLE](/sql-reference/statements/check-table) 查询结果的详细程度。 - -可能的取值: - -- 0 — 查询会显示表中每个独立数据分片的检查状态。 -- 1 — 查询会显示整个表的总体检查状态。 - -## check_referential_table_dependencies {#check_referential_table_dependencies} - - - -检查 DDL 查询(例如 DROP TABLE 或 RENAME)是否会破坏引用依赖关系 - -## check_table_dependencies {#check_table_dependencies} - - - -检查 DDL 查询(例如 DROP TABLE 或 RENAME)是否会破坏依赖关系 - -## checksum_on_read {#checksum_on_read} - - - -在读取数据时验证校验和。该设置默认启用,并且在生产环境中应始终保持启用。请不要指望通过禁用此设置获得任何好处。它仅应用于实验和基准测试。该设置仅适用于 MergeTree 系列表。对于其他表引擎以及通过网络接收的数据,校验和始终会被验证。 - -## cloud_mode {#cloud_mode} - - - -云模式 - -## cloud_mode_database_engine {#cloud_mode_database_engine} - - - - - -在 ClickHouse Cloud 中允许使用的数据库引擎。1 - 将 DDL 重写为使用 Replicated 数据库,2 - 将 DDL 重写为使用 Shared 数据库 - -## cloud_mode_engine {#cloud_mode_engine} - - - -在 Cloud 中允许使用的引擎系列。 - -- 0 - 允许所有引擎 -- 1 - 将 DDL 重写为使用 *ReplicatedMergeTree -- 2 - 将 DDL 重写为使用 SharedMergeTree -- 3 - 将 DDL 重写为使用 SharedMergeTree,除非显式指定了 remote 磁盘 - -将其设为 UInt64,以尽量缩小公共部分的占用。 - -## cluster_for_parallel_replicas {#cluster_for_parallel_replicas} - - - -当前服务器所在分片对应的集群 - -## cluster_function_process_archive_on_multiple_nodes {#cluster_function_process_archive_on_multiple_nodes} - - - - - -如果设置为 `true`,将提高在集群函数中处理归档的性能。如果在较早版本中使用了对归档进行处理的集群函数,为了保持兼容性并避免在升级到 25.7 及更高版本时出现错误,应将其设置为 `false`。 - -## cluster_table_function_buckets_batch_size {#cluster_table_function_buckets_batch_size} - - - - - -定义在具有 `bucket` 级拆分粒度的 cluster 表函数中,用于分布式任务处理的批次近似大小(以字节为单位)。系统会累积数据,直到至少达到该数值。实际大小可能会略大一些,以便与数据边界对齐。 - -## cluster_table_function_split_granularity {#cluster_table_function_split_granularity} - - - - - -控制在执行 CLUSTER TABLE FUNCTION 时,如何将数据拆分为各个任务。 - -该设置定义了在整个集群中分发工作的粒度: - -- `file` — 每个任务处理一个完整文件。 -- `bucket` — 针对文件内部的每个数据块创建任务(例如 Parquet 的行组 row group)。 - -选择更细的粒度(如 `bucket`)可以在处理少量大文件时提升并行度。 -例如,如果一个 Parquet 文件包含多个行组(row group),启用 `bucket` 粒度后,每个行组可以由不同的工作节点独立处理。 - -## collect_hash_table_stats_during_aggregation {#collect_hash_table_stats_during_aggregation} - - - -启用哈希表统计信息收集,以优化内存分配。 - -## collect_hash_table_stats_during_joins {#collect_hash_table_stats_during_joins} - - - - - -启用哈希表统计信息收集功能,以优化内存分配。 - -## compatibility {#compatibility} - -`compatibility` 设置会让 ClickHouse 使用某个较早版本 ClickHouse 的默认设置,要使用的版本通过该设置指定。 - -如果某些设置被显式设为非默认值,则这些设置会被保留不变(只有那些尚未被修改的设置才会受到 `compatibility` 设置的影响)。 - -该设置接受一个 ClickHouse 版本号字符串,例如 `22.3`、`22.8`。空值表示此设置被禁用。 - -默认情况下处于禁用状态。 - -:::note -在 ClickHouse Cloud 中,服务级别的默认 `compatibility` 设置必须由 ClickHouse Cloud 支持团队进行配置。请[提交工单](https://clickhouse.cloud/support)以完成配置。 -不过,可以在用户、角色、配置文件(profile)、查询或会话级别,使用标准的 ClickHouse 设置机制覆盖 `compatibility` 设置,例如在会话中使用 `SET compatibility = '22.3'`,或在查询中使用 `SETTINGS compatibility = '22.3'`。 -::: - -## compatibility_ignore_auto_increment_in_create_table {#compatibility_ignore_auto_increment_in_create_table} - - - -如果为 true,则在列声明中忽略 AUTO_INCREMENT 关键字,否则返回错误。这有助于简化从 MySQL 的迁移。 - -## compatibility_ignore_collation_in_create_table {#compatibility_ignore_collation_in_create_table} - - - -兼容性:在 CREATE TABLE 中忽略排序规则 - -## compile_aggregate_expressions {#compile_aggregate_expressions} - - - -启用或禁用对聚合函数进行 JIT 编译以生成本机代码。启用此设置可以提升性能。 - -可能的值: - -- 0 — 聚合在未启用 JIT 编译的情况下执行。 -- 1 — 聚合通过 JIT 编译执行。 - -**另请参阅** - -- [min_count_to_compile_aggregate_expression](#min_count_to_compile_aggregate_expression) - -## compile_expressions {#compile_expressions} - - - - - -将部分标量函数和运算符编译为原生代码。 - -## compile_sort_description {#compile_sort_description} - - - -将排序描述编译为本机代码。 - -## connect_timeout {#connect_timeout} - - - -在没有副本时使用的连接超时时间。 - -## connect_timeout_with_failover_ms {#connect_timeout_with_failover_ms} - - - - - -在集群定义中使用 `shard` 和 `replica` 部分时,Distributed 表引擎连接到远程服务器的连接超时时间(毫秒)。 -如果连接不成功,系统会多次尝试连接到不同的副本。 - -## connect_timeout_with_failover_secure_ms {#connect_timeout_with_failover_secure_ms} - - - - - -用于在安全连接中选择第一个可用副本的连接超时时间。 - -## connection_pool_max_wait_ms {#connection_pool_max_wait_ms} - - - -当连接池已满时,等待可用连接的时间(以毫秒为单位)。 - -可能的取值: - -- 正整数。 -- 0 — 无限等待。 - -## connections_with_failover_max_tries {#connections_with_failover_max_tries} - - - -为 Distributed 表引擎中每个副本设置的最大连接尝试次数。 - -## convert_query_to_cnf - - - -当设置为 `true` 时,`SELECT` 查询将被转换为合取范式(CNF,conjunctive normal form)。在某些场景下,将查询重写为 CNF 可能会执行得更快(有关说明,请参见此 [GitHub issue](https://github.com/ClickHouse/ClickHouse/issues/11749))。 - -例如,请注意下面的 `SELECT` 查询在默认情况下不会被修改: - -```sql -EXPLAIN SYNTAX -SELECT * -FROM -( - SELECT number AS x - FROM numbers(20) -) AS a -WHERE ((x >= 1) AND (x <= 5)) OR ((x >= 10) AND (x <= 15)) -SETTINGS convert_query_to_cnf = false; -``` - -结果如下: - -```response -┌─explain────────────────────────────────────────────────────────┐ -│ SELECT x │ -│ FROM │ -│ ( │ -│ SELECT number AS x │ -│ FROM numbers(20) │ -│ WHERE ((x >= 1) AND (x <= 5)) OR ((x >= 10) AND (x <= 15)) │ -│ ) AS a │ -│ WHERE ((x >= 1) AND (x <= 5)) OR ((x >= 10) AND (x <= 15)) │ -│ SETTINGS convert_query_to_cnf = 0 │ -└────────────────────────────────────────────────────────────────┘ -``` - -让我们将 `convert_query_to_cnf` 设置为 `true`,看看会有什么变化: - -```sql -EXPLAIN SYNTAX -SELECT * -FROM -( - SELECT number AS x - FROM numbers(20) -) AS a -WHERE ((x >= 1) AND (x <= 5)) OR ((x >= 10) AND (x <= 15)) -SETTINGS convert_query_to_cnf = true; -``` - -请注意,`WHERE` 子句已被重写为 CNF 形式,但结果集保持不变——布尔逻辑没有改变: - -```response -┌─explain───────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ -│ SELECT x │ -│ FROM │ -│ ( │ -│ SELECT number AS x │ -│ FROM numbers(20) │ -│ WHERE ((x <= 15) OR (x <= 5)) AND ((x <= 15) OR (x >= 1)) AND ((x >= 10) OR (x <= 5)) AND ((x >= 10) OR (x >= 1)) │ -│ ) AS a │ -│ WHERE ((x >= 10) OR (x >= 1)) AND ((x >= 10) OR (x <= 5)) AND ((x <= 15) OR (x >= 1)) AND ((x <= 15) OR (x <= 5)) │ -│ SETTINGS convert_query_to_cnf = 1 │ -└───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ -``` - -可能的取值:true、false - - -## correlated_subqueries_default_join_kind {#correlated_subqueries_default_join_kind} - - - - - -控制去相关化查询计划中使用的 JOIN 类型。默认值为 `right`,这意味着去相关化后的计划将包含 RIGHT JOIN,且子查询输入位于右侧。 - -可能的取值: - -- `left` - 去相关化过程将生成 LEFT JOIN,输入表出现在左侧。 -- `right` - 去相关化过程将生成 RIGHT JOIN,输入表出现在右侧。 - -## correlated_subqueries_substitute_equivalent_expressions {#correlated_subqueries_substitute_equivalent_expressions} - - - - - -使用过滤表达式推断等价表达式,并用其替代创建 CROSS JOIN 的方式。 - -## count_distinct_implementation {#count_distinct_implementation} - - - -指定在实现 [COUNT(DISTINCT ...)](/sql-reference/aggregate-functions/reference/count) 语句时,应使用哪个 `uniq*` 函数。 - -可能的取值为: - -- [uniq](/sql-reference/aggregate-functions/reference/uniq) -- [uniqCombined](/sql-reference/aggregate-functions/reference/uniqcombined) -- [uniqCombined64](/sql-reference/aggregate-functions/reference/uniqcombined64) -- [uniqHLL12](/sql-reference/aggregate-functions/reference/uniqhll12) -- [uniqExact](/sql-reference/aggregate-functions/reference/uniqexact) - -## count_distinct_optimization {#count_distinct_optimization} - - - -将 `COUNT(DISTINCT ...)` 重写为 `GROUP BY` 的子查询 - -## count_matches_stop_at_empty_match {#count_matches_stop_at_empty_match} - - - - - -在 `countMatches` 函数中,一旦某个模式产生零长度匹配,就停止计数。 - -## create_if_not_exists {#create_if_not_exists} - - - - - -默认为 `CREATE` 语句启用 `IF NOT EXISTS`。如果启用了此设置或在语句中显式指定了 `IF NOT EXISTS`,且已存在同名表,则不会抛出异常。 - -## create_index_ignore_unique {#create_index_ignore_unique} - - - -在执行 `CREATE UNIQUE INDEX` 语句时忽略 `UNIQUE` 关键字。用于 SQL 兼容性测试。 - -## create_replicated_merge_tree_fault_injection_probability {#create_replicated_merge_tree_fault_injection_probability} - - - -在 ZooKeeper 中创建元数据之后,表创建期间发生故障注入的概率。 - -## create_table_empty_primary_key_by_default {#create_table_empty_primary_key_by_default} - - - - - -允许在未指定 ORDER BY 和 PRIMARY KEY 时创建主键为空的 *MergeTree 表 - -## cross_join_min_bytes_to_compress {#cross_join_min_bytes_to_compress} - - - - - -在 CROSS JOIN 中进行压缩的数据块的最小大小。零值表示禁用该阈值。当达到两个阈值之一(按行数或按字节数)时,将压缩此数据块。 - -## cross_join_min_rows_to_compress {#cross_join_min_rows_to_compress} - - - - - -在 CROSS JOIN 中触发数据块压缩所需的最小行数。值为 0 表示禁用此阈值。当达到任一阈值(按行数或按字节数)时,此数据块将被压缩。 - -## data_type_default_nullable {#data_type_default_nullable} - - - -指定在列定义中未显式添加修饰符 [NULL 或 NOT NULL](/sql-reference/statements/create/table#null-or-not-null-modifiers) 的数据类型是否默认为 [Nullable](/sql-reference/data-types/nullable)。 - -可能的值: - -- 1 — 列定义中的数据类型默认设置为 `Nullable`。 -- 0 — 列定义中的数据类型默认设置为非 `Nullable`。 - -## database_atomic_wait_for_drop_and_detach_synchronously {#database_atomic_wait_for_drop_and_detach_synchronously} - - - -为所有 `DROP` 和 `DETACH` 查询添加 `SYNC` 修饰符。 - -可能的取值: - -- 0 — 查询将会带有延迟地执行。 -- 1 — 查询将会无延迟地执行。 - -## database_replicated_allow_explicit_uuid {#database_replicated_allow_explicit_uuid} - - - - - -0 - 不允许在 Replicated 数据库中为表显式指定 UUID。1 - 允许。2 - 允许,但忽略指定的 UUID,而是生成一个随机的 UUID。 - -## database_replicated_allow_heavy_create {#database_replicated_allow_heavy_create} - - - - - -允许在 Replicated 数据库引擎中执行耗时较长的 DDL 查询(CREATE AS SELECT 和 POPULATE)。请注意,这可能会长时间阻塞 DDL 队列。 - -## database_replicated_allow_only_replicated_engine {#database_replicated_allow_only_replicated_engine} - - - -只允许在引擎为 Replicated 的数据库中创建 Replicated 表 - -## database_replicated_allow_replicated_engine_arguments {#database_replicated_allow_replicated_engine_arguments} - - - - - -0 - 不允许为 Replicated 数据库中的 *MergeTree 表显式指定 ZooKeeper 路径和副本名称。1 - 允许。2 - 允许,但忽略指定的路径并改用默认路径。3 - 允许且不记录任何警告。 - -## database_replicated_always_detach_permanently {#database_replicated_always_detach_permanently} - - - -如果数据库引擎是 Replicated,则在执行 `DETACH TABLE` 时按 `DETACH TABLE PERMANENTLY` 的语义执行 - -## database_replicated_enforce_synchronous_settings {#database_replicated_enforce_synchronous_settings} - - - -对某些查询强制启用同步等待(另请参见 `database_atomic_wait_for_drop_and_detach_synchronously`、`mutations_sync`、`alter_sync`)。不建议启用此设置。 - -## database_replicated_initial_query_timeout_sec {#database_replicated_initial_query_timeout_sec} - - - -设置初始 DDL 查询在等待 Replicated 数据库处理先前 DDL 队列条目时的最长等待时间(以秒为单位)。 - -可能的值: - -- 正整数。 -- 0 — 不限时。 - -## database_shared_drop_table_delay_seconds {#database_shared_drop_table_delay_seconds} - - - - - -从删除表到其实际从 Shared 数据库中移除之间的延迟时间(以秒为单位)。在此时间内,可以使用 `UNDROP TABLE` 语句恢复该表。 - -## decimal_check_overflow {#decimal_check_overflow} - - - -检查十进制算术/比较运算是否溢出 - -## deduplicate_blocks_in_dependent_materialized_views {#deduplicate_blocks_in_dependent_materialized_views} - - - -启用或禁用对从 Replicated\* 表接收数据的物化视图进行去重检查。 - -可选值: - -0 — 禁用。 - 1 — 启用。 - -启用后,ClickHouse 会对依赖 Replicated\* 表的物化视图中的数据块执行去重。 -在因故障而重试插入操作时,此设置可确保物化视图中不包含重复数据。 - -**另请参阅** - -- [IN 运算符中的 NULL 处理](/guides/developer/deduplicating-inserts-on-retries#insert-deduplication-with-materialized-views) - -## default_materialized_view_sql_security {#default_materialized_view_sql_security} - - - - - -用于在创建物化视图时为 SQL SECURITY 选项设置默认值。[有关 SQL 安全性的更多信息](../../sql-reference/statements/create/view.md/#sql_security)。 - -默认值为 `DEFINER`。 - -## default_max_bytes_in_join {#default_max_bytes_in_join} - - - -在需要设置限制但未配置 `max_bytes_in_join` 时,右侧表允许的最大大小。 - -## default_normal_view_sql_security {#default_normal_view_sql_security} - - - - - -允许在创建普通视图时设置默认的 `SQL SECURITY` 选项。[更多关于 SQL 安全性的内容](../../sql-reference/statements/create/view.md/#sql_security)。 - -默认值为 `INVOKER`。 - -## default_table_engine - - - - - -当在 `CREATE` 语句中未设置 `ENGINE` 时要使用的默认表引擎。 - -可能的取值: - -* 表示任意有效表引擎名称的字符串 - -云端默认值:`SharedMergeTree`。 - -**示例** - -查询: - -```sql -SET default_table_engine = 'Log'; - -SELECT name, value, changed FROM system.settings WHERE name = 'default_table_engine'; -``` - -结果: - -```response -┌─name─────────────────┬─value─┬─changed─┐ -│ default_table_engine │ Log │ 1 │ -└──────────────────────┴───────┴─────────┘ -``` - -在此示例中,所有未指定 `Engine` 的新表将默认使用 `Log` 表引擎: - -查询: - -```sql -CREATE TABLE my_table ( - x UInt32, - y UInt32 -); - -SHOW CREATE TABLE my_table; -``` - -结果: - -```response -┌─statement────────────────────────────────────────────────────────────────┐ -│ CREATE TABLE default.my_table -( - `x` UInt32, - `y` UInt32 -) -ENGINE = Log -└──────────────────────────────────────────────────────────────────────────┘ -``` - - -## default_temporary_table_engine - - - -与 [default_table_engine](#default_table_engine) 相同,只不过用于临时表。 - -在此示例中,任何未指定 `Engine` 的新临时表都将使用 `Log` 表引擎: - -查询: - -```sql -SET default_temporary_table_engine = 'Log'; - -CREATE TEMPORARY TABLE my_table ( - x UInt32, - y UInt32 -); - -SHOW CREATE TEMPORARY TABLE my_table; -``` - -结果: - -```response -┌─statement────────────────────────────────────────────────────────────────┐ -│ CREATE TEMPORARY TABLE default.my_table -( - `x` UInt32, - `y` UInt32 -) -ENGINE = Log -└──────────────────────────────────────────────────────────────────────────┘ -``` - - -## default_view_definer {#default_view_definer} - - - - - -允许在创建视图时设置默认的 `DEFINER` 选项。[了解更多 SQL 安全性相关信息](../../sql-reference/statements/create/view.md/#sql_security)。 - -默认值为 `CURRENT_USER`。 - -## delta_lake_enable_engine_predicate {#delta_lake_enable_engine_predicate} - - - - - -启用 delta-kernel 的内部数据剪枝机制。 - -## delta_lake_enable_expression_visitor_logging {#delta_lake_enable_expression_visitor_logging} - - - - - -启用 Delta Lake 表达式访问器的测试级别日志。这些日志可能过于冗长,即使在测试日志中也是如此。 - -## delta_lake_insert_max_bytes_in_data_file {#delta_lake_insert_max_bytes_in_data_file} - - - - - -定义 Delta Lake 中单个插入数据文件的字节大小上限。 - -## delta_lake_insert_max_rows_in_data_file {#delta_lake_insert_max_rows_in_data_file} - - - - - -定义在 Delta Lake 中单个插入的数据文件的最大行数限制。 - -## delta_lake_log_metadata {#delta_lake_log_metadata} - - - - - -启用将 Delta Lake 元数据文件记录到 `system` 表中。 - -## delta_lake_snapshot_version {#delta_lake_snapshot_version} - - - - - -要读取的 Delta Lake 快照版本号。值 -1 表示读取最新版本(0 也是有效的快照版本号)。 - -## delta_lake_throw_on_engine_predicate_error {#delta_lake_throw_on_engine_predicate_error} - - - - - -在 delta-kernel 中分析扫描谓词出错时抛出异常。 - -## describe_compact_output {#describe_compact_output} - - - -如果为 true,则 DESCRIBE 查询结果中仅包含列名和列类型 - -## describe_include_subcolumns {#describe_include_subcolumns} - - - -启用在 [DESCRIBE](../../sql-reference/statements/describe-table.md) 查询中显示子列。例如,[Tuple](../../sql-reference/data-types/tuple.md) 的成员,或 [Map](/sql-reference/data-types/map#reading-subcolumns-of-map)、[Nullable](../../sql-reference/data-types/nullable.md/#finding-null) 或 [Array](../../sql-reference/data-types/array.md/#array-size) 数据类型的子列。 - -可能的取值: - -- 0 — 在 `DESCRIBE` 查询中不包含子列。 -- 1 — 在 `DESCRIBE` 查询中包含子列。 - -**示例** - -参见 [DESCRIBE](../../sql-reference/statements/describe-table.md) 语句的示例。 - -## describe_include_virtual_columns {#describe_include_virtual_columns} - - - -如果设为 true,表的虚拟列将会包含在 DESCRIBE 查询的结果中 - -## 方言 {#dialect} - - - -用于解析查询的方言 - -## dictionary_validate_primary_key_type {#dictionary_validate_primary_key_type} - - - - - -验证字典的主键类型。对于简单布局,默认会将 id 类型隐式转换为 UInt64。 - -## distinct_overflow_mode {#distinct_overflow_mode} - - - -设置当数据量超过某个限制时系统应采取的行为。 - -可能的取值: - -- `throw`: 抛出异常(默认)。 -- `break`: 停止执行查询并返回部分结果,就好像源数据已经耗尽一样。 - -## distributed_aggregation_memory_efficient {#distributed_aggregation_memory_efficient} - - - -是否启用了分布式聚合的内存节省模式。 - -## distributed_background_insert_batch {#distributed_background_insert_batch} - -**别名**: `distributed_directory_monitor_batch_inserts` - - - -启用或禁用以批量方式发送插入数据。 - -当启用批量发送时,[Distributed](../../engines/table-engines/special/distributed.md) 表引擎会尝试在一次操作中发送多个插入数据文件,而不是分别发送。批量发送通过更好地利用服务器和网络资源来提升集群性能。 - -可能的取值: - -- 1 — 启用。 -- 0 — 禁用。 - -## distributed_background_insert_max_sleep_time_ms {#distributed_background_insert_max_sleep_time_ms} - -**别名**:`distributed_directory_monitor_max_sleep_time_ms` - - - -[Distributed](../../engines/table-engines/special/distributed.md) 表引擎发送数据的最大时间间隔。用于限制在 [distributed_background_insert_sleep_time_ms](#distributed_background_insert_sleep_time_ms) 设置中指定的时间间隔按指数方式增长。 - -可能的取值: - -- 正整数(毫秒)。 - -## distributed_background_insert_sleep_time_ms {#distributed_background_insert_sleep_time_ms} - -**别名**: `distributed_directory_monitor_sleep_time_ms` - - - -[Distributed](../../engines/table-engines/special/distributed.md) 表引擎发送数据的基础时间间隔。在发生错误时,实际间隔会呈指数级增长。 - -可能的取值: - -- 正整数(单位:毫秒)。 - -## distributed_background_insert_split_batch_on_failure {#distributed_background_insert_split_batch_on_failure} - -**别名**: `distributed_directory_monitor_split_batch_on_failure` - - - -启用/禁用在失败时对批次进行拆分。 - -有时将某个批次发送到远程分片可能会失败,这是由于后续存在较为复杂的处理流水线(例如带有 `GROUP BY` 的 `MATERIALIZED VIEW`),从而触发 `Memory limit exceeded` 或类似错误。在这种情况下,简单重试并不会有帮助(而且会导致该表的分布式发送卡住),但将该批次中的文件逐个发送则可能就能成功执行 INSERT 操作。 - -因此,将此设置为 `1` 会对这类批次禁用批处理(即对失败的批次临时禁用 `distributed_background_insert_batch`)。 - -可能的取值: - -- 1 — 启用。 -- 0 — 禁用。 - -:::note -该设置同样会影响损坏的批次(这类批次可能由于服务器(机器)异常终止且未对 [Distributed](../../engines/table-engines/special/distributed.md) 表引擎使用 `fsync_after_insert`/`fsync_directories` 而产生)。 -::: - -:::note -不应依赖自动批次拆分,因为这可能会影响性能。 -::: - -## distributed_background_insert_timeout {#distributed_background_insert_timeout} - -**别名**: `insert_distributed_timeout` - - - -对 Distributed 表执行插入查询的超时时长。该设置仅在启用 insert_distributed_sync 时生效。值为 0 表示没有超时限制。 - -## distributed_cache_alignment {#distributed_cache_alignment} - - - - - - - -仅在 ClickHouse Cloud 中生效。此设置仅用于测试用途,请勿修改。 - -## distributed_cache_bypass_connection_pool {#distributed_cache_bypass_connection_pool} - - - - - - - -仅在 ClickHouse Cloud 中生效。允许绕过分布式缓存连接池。 - -## distributed_cache_connect_backoff_max_ms {#distributed_cache_connect_backoff_max_ms} - - - - - - - -仅在 ClickHouse Cloud 中生效。创建分布式缓存连接时的最大退避时间(毫秒)。 - -## distributed_cache_connect_backoff_min_ms {#distributed_cache_connect_backoff_min_ms} - - - - - - - -仅在 ClickHouse Cloud 中生效。用于建立分布式缓存连接时的最小退避时间(毫秒)。 - -## distributed_cache_connect_max_tries {#distributed_cache_connect_max_tries} - - - - - - - -仅在 ClickHouse Cloud 中生效。连接分布式缓存失败时的最大重试次数。 - -## distributed_cache_connect_timeout_ms {#distributed_cache_connect_timeout_ms} - - - - - - - -仅在 ClickHouse Cloud 中有效。连接到分布式缓存服务器时的连接超时时间。 - -## distributed_cache_credentials_refresh_period_seconds {#distributed_cache_credentials_refresh_period_seconds} - - - - - - - -仅在 ClickHouse Cloud 中生效。凭证刷新的时间间隔。 - -## distributed_cache_data_packet_ack_window {#distributed_cache_data_packet_ack_window} - - - - - - - -仅在 ClickHouse Cloud 中有效。指定在单个分布式缓存读取请求中,对 DataPacket 序列发送 ACK 的窗口大小。 - -## distributed_cache_discard_connection_if_unread_data {#distributed_cache_discard_connection_if_unread_data} - - - - - - - -仅在 ClickHouse Cloud 中有效。如果存在未读取的数据,则丢弃该连接。 - -## distributed_cache_fetch_metrics_only_from_current_az {#distributed_cache_fetch_metrics_only_from_current_az} - - - - - - - -仅在 ClickHouse Cloud 中生效。在 system.distributed_cache_metrics 和 system.distributed_cache_events 中仅从当前可用区获取指标。 - -## distributed_cache_log_mode {#distributed_cache_log_mode} - - - - - - - -仅在 ClickHouse Cloud 中有效。用于控制写入 system.distributed_cache_log 的模式。 - -## distributed_cache_max_unacked_inflight_packets {#distributed_cache_max_unacked_inflight_packets} - - - - - - - -仅在 ClickHouse Cloud 中生效。在单个分布式缓存读取请求中,允许存在的未确认在途数据包的最大数量。 - -## distributed_cache_min_bytes_for_seek {#distributed_cache_min_bytes_for_seek} - - - - - - - -仅在 ClickHouse Cloud 中有效。用于在分布式缓存中执行查找(seek)操作时的最小字节数。 - -## distributed_cache_pool_behaviour_on_limit {#distributed_cache_pool_behaviour_on_limit} - - - - - - - -仅在 ClickHouse Cloud 中生效。用于指定在达到连接池限制时分布式缓存连接的行为。 - -## distributed_cache_prefer_bigger_buffer_size {#distributed_cache_prefer_bigger_buffer_size} - - - - - - - -仅在 ClickHouse Cloud 中生效。与 filesystem_cache_prefer_bigger_buffer_size 相同,但用于分布式缓存。 - -## distributed_cache_read_only_from_current_az {#distributed_cache_read_only_from_current_az} - - - - - - - -仅在 ClickHouse Cloud 中生效。仅允许从当前可用区的缓存服务器读取。如果禁用,将会从所有可用区中的所有缓存服务器读取。 - -## distributed_cache_read_request_max_tries {#distributed_cache_read_request_max_tries} - - - - - - - -仅在 ClickHouse Cloud 中生效。分布式缓存请求失败时的最大重试次数。 - -## distributed_cache_receive_response_wait_milliseconds {#distributed_cache_receive_response_wait_milliseconds} - - - - - - - -仅在 ClickHouse Cloud 中生效。以毫秒为单位,表示从分布式缓存接收请求返回数据的等待时间。 - -## distributed_cache_receive_timeout_milliseconds {#distributed_cache_receive_timeout_milliseconds} - - - - - - - -仅在 ClickHouse Cloud 中生效。以毫秒为单位,用于等待从分布式缓存接收任何类型响应的时间。 - -## distributed_cache_receive_timeout_ms {#distributed_cache_receive_timeout_ms} - - - - - - - -仅在 ClickHouse Cloud 中生效。用于从分布式缓存服务器接收数据的超时时间,单位为毫秒。如果在该时间间隔内未接收到任何字节数据,则会抛出异常。 - -## distributed_cache_send_timeout_ms {#distributed_cache_send_timeout_ms} - - - - - - - -仅在 ClickHouse Cloud 中生效。向分布式缓存服务器发送数据的超时时间,单位为毫秒。若客户端需要发送数据,但在该时间间隔内未能发送出任何字节,将抛出异常。 - -## distributed_cache_tcp_keep_alive_timeout_ms {#distributed_cache_tcp_keep_alive_timeout_ms} - - - - - - - -仅在 ClickHouse Cloud 中生效。以毫秒为单位,指在 TCP 开始发送 keepalive 保活探测之前,与分布式缓存服务器的连接需要保持空闲的时间。 - -## distributed_cache_throw_on_error {#distributed_cache_throw_on_error} - - - - - - - -仅在 ClickHouse Cloud 中生效。会重新抛出在与分布式缓存通信期间发生的异常,或从分布式缓存接收到的异常。否则,在出错时将退回为跳过分布式缓存。 - -## distributed_cache_wait_connection_from_pool_milliseconds {#distributed_cache_wait_connection_from_pool_milliseconds} - - - - - - - -仅在 ClickHouse Cloud 中生效。当 distributed_cache_pool_behaviour_on_limit 为 wait 时,从连接池获取连接的等待时间(以毫秒为单位)。 - -## distributed_connections_pool_size {#distributed_connections_pool_size} - - - -对单个 Distributed 表的所有查询进行分布式处理时,与远程服务器可同时建立的连接数上限。建议该值不要小于集群中的服务器数量。 - -## distributed_ddl_entry_format_version {#distributed_ddl_entry_format_version} - - - -分布式 DDL(ON CLUSTER)查询的兼容版本 - -## distributed_ddl_output_mode {#distributed_ddl_output_mode} - - - -设置分布式 DDL 查询结果的输出格式。 - -可能的取值: - -- `throw` — 返回一个结果集,其中包含已完成查询的所有主机的执行状态。如果查询在某些主机上失败,则会重新抛出第一个异常。如果在某些主机上查询尚未完成且已超过 [distributed_ddl_task_timeout](#distributed_ddl_task_timeout),则抛出 `TIMEOUT_EXCEEDED` 异常。 -- `none` — 与 `throw` 类似,但分布式 DDL 查询不返回结果集。 -- `null_status_on_timeout` — 当某些主机上的查询尚未完成时,在结果集的对应行中返回 `NULL` 作为执行状态,而不是抛出 `TIMEOUT_EXCEEDED`。 -- `never_throw` — 不抛出 `TIMEOUT_EXCEEDED`,并且当查询在某些主机上失败时也不重新抛出异常。 -- `none_only_active` - 类似于 `none`,但不会等待 `Replicated` 数据库中处于非活动状态的副本。注意:在此模式下,无法得知查询是否未在某些副本上执行,并且这些副本上的查询将会在后台执行。 -- `null_status_on_timeout_only_active` — 类似于 `null_status_on_timeout`,但不会等待 `Replicated` 数据库中处于非活动状态的副本。 -- `throw_only_active` — 类似于 `throw`,但不会等待 `Replicated` 数据库中处于非活动状态的副本。 - -Cloud 中的默认值:`throw`。 - -## distributed_ddl_task_timeout {#distributed_ddl_task_timeout} - - - -设置从集群中所有主机接收 DDL 查询响应的超时时间。如果某个 DDL 请求尚未在所有主机上执行完毕,则响应中会包含超时错误,并且该请求将以异步模式继续执行。负值表示无限超时时间。 - -可能的取值: - -- 正整数。 -- 0 — 异步模式。 -- 负整数 — 无限超时时间。 - -## distributed_foreground_insert {#distributed_foreground_insert} - -**别名**: `insert_distributed_sync` - - - -启用或禁用对 [Distributed](/engines/table-engines/special/distributed) 表的同步数据插入。 - -默认情况下,当向 `Distributed` 表插入数据时,ClickHouse 服务器会在后台模式向集群中的各个节点发送数据。当设置 `distributed_foreground_insert=1` 时,数据会以同步方式处理,并且只有当所有分片上的数据都已保存之后(如果 `internal_replication` 为 true,则每个分片至少有一个副本),`INSERT` 操作才会成功。 - -可能的取值: - -- `0` — 在后台模式插入数据。 -- `1` — 在同步模式插入数据。 - -Cloud 中的默认值:`0`。 - -**另请参阅** - -- [Distributed 表引擎](/engines/table-engines/special/distributed) -- [管理 Distributed 表](/sql-reference/statements/system#managing-distributed-tables) - -## distributed_group_by_no_merge - - - -在分布式查询处理中不合并来自不同服务器的聚合状态,当可以确定不同分片上的键互不相同时可以使用此设置。 - -可能的取值: - -* `0` — 禁用(最终查询处理在发起节点上完成)。 -* `1` - 在分布式查询处理中不合并来自不同服务器的聚合状态(查询在分片上完全处理,发起节点仅代理/转发数据),可在确定不同分片上存在不同键的情况下使用。 -* `2` - 与 `1` 相同,但在发起节点上应用 `ORDER BY` 和 `LIMIT`(在查询完全在远程节点上处理时这是不可能的,例如 `distributed_group_by_no_merge=1`)(可用于带有 `ORDER BY` 和/或 `LIMIT` 的查询)。 - -**示例** - -```sql -SELECT * -FROM remote('127.0.0.{2,3}', system.one) -GROUP BY dummy -LIMIT 1 -SETTINGS distributed_group_by_no_merge = 1 -FORMAT PrettyCompactMonoBlock - -┌─dummy─┐ -│ 0 │ -│ 0 │ -└───────┘ -``` - -```sql -SELECT * -FROM remote('127.0.0.{2,3}', system.one) -GROUP BY dummy -LIMIT 1 -SETTINGS distributed_group_by_no_merge = 2 -FORMAT PrettyCompactMonoBlock - -┌─dummy─┐ -│ 0 │ -└───────┘ -``` - - -## distributed_insert_skip_read_only_replicas {#distributed_insert_skip_read_only_replicas} - - - - - -启用在对 Distributed 执行 INSERT 查询时跳过只读副本。 - -可能的取值: - -- 0 — INSERT 行为与默认相同,如果数据被发送到只读副本,则会失败 -- 1 — 发起端在向各分片发送数据之前会跳过只读副本。 - -## distributed_plan_default_reader_bucket_count {#distributed_plan_default_reader_bucket_count} - - - - - - - -在分布式查询中进行并行读取时的默认任务数量。这些任务会在各个副本之间进行分配。 - -## distributed_plan_default_shuffle_join_bucket_count {#distributed_plan_default_shuffle_join_bucket_count} - - - - - - - -分布式 shuffle-hash join 的默认桶数。 - -## distributed_plan_execute_locally {#distributed_plan_execute_locally} - - - - - - - -在本地运行分布式查询计划的所有任务。可用于测试和调试。 - -## distributed_plan_force_exchange_kind {#distributed_plan_force_exchange_kind} - - - - - -在分布式查询的各阶段之间强制使用指定类型的 Exchange 算子。 - -可能的取值: - -- '':不对任何类型的 Exchange 算子做强制要求,由优化器自行选择; -- 'Persisted':在对象存储中使用临时文件; -- 'Streaming':通过网络以流式方式传输交换数据。 - -## distributed_plan_force_shuffle_aggregation {#distributed_plan_force_shuffle_aggregation} - - - - - - - -在分布式查询计划中,使用 Shuffle 聚合策略,而不是 PartialAggregation + Merge。 - -## distributed_plan_max_rows_to_broadcast {#distributed_plan_max_rows_to_broadcast} - - - - - - - -在分布式查询计划中,用于选择广播连接(broadcast join)而不是 shuffle 连接(shuffle join)的最大行数。 - -## distributed_plan_optimize_exchanges {#distributed_plan_optimize_exchanges} - - - - - -在分布式查询计划中移除不必要的数据交换(exchange)。如需调试,可将其禁用。 - -## distributed_product_mode {#distributed_product_mode} - - - -更改[分布式子查询](../../sql-reference/operators/in.md)的行为。 - -当查询中包含分布式表的笛卡尔积时会应用此设置,即当针对某个分布式表的查询中包含对该分布式表的非 GLOBAL 子查询时,会启用该设置。 - -限制条件: - -- 仅适用于 IN 和 JOIN 子查询。 -- 仅当 FROM 子句中使用的分布式表包含多个分片时。 -- 仅当子查询涉及的分布式表包含多个分片时。 -- 不适用于表值 [remote](../../sql-reference/table-functions/remote.md) 函数。 - -可能的取值: - -- `deny` — 默认值。禁止使用此类子查询(返回异常 "Double-distributed IN/JOIN subqueries is denied")。 -- `local` — 将子查询中的数据库和表替换为目标服务器(分片)上的本地数据库和表,同时保留常规的 `IN`/`JOIN`。 -- `global` — 将 `IN`/`JOIN` 查询替换为 `GLOBAL IN`/`GLOBAL JOIN`。 -- `allow` — 允许使用此类子查询。 - -## distributed_push_down_limit {#distributed_push_down_limit} - - - -启用或禁用在每个分片上单独应用 [LIMIT](#limit)。 - -这有助于避免: - -- 通过网络发送多余的行; -- 在发起端处理超过 LIMIT 之后的行。 - -从 21.9 版本开始,将不会再出现不精确的结果,因为只有在至少满足以下任一条件时,`distributed_push_down_limit` 才会改变查询执行方式: - -- [distributed_group_by_no_merge](#distributed_group_by_no_merge) > 0。 -- 查询**不包含** `GROUP BY`/`DISTINCT`/`LIMIT BY`,但包含 `ORDER BY`/`LIMIT`。 -- 查询**包含** `GROUP BY`/`DISTINCT`/`LIMIT BY`,并带有 `ORDER BY`/`LIMIT`,且: - - 已启用 [optimize_skip_unused_shards](#optimize_skip_unused_shards)。 - - 已启用 [optimize_distributed_group_by_sharding_key](#optimize_distributed_group_by_sharding_key)。 - -可选值: - -- 0 — 禁用。 -- 1 — 启用。 - -另请参阅: - -- [distributed_group_by_no_merge](#distributed_group_by_no_merge) -- [optimize_skip_unused_shards](#optimize_skip_unused_shards) -- [optimize_distributed_group_by_sharding_key](#optimize_distributed_group_by_sharding_key) - -## distributed_replica_error_cap {#distributed_replica_error_cap} - - - -- 类型:无符号整数(unsigned int) -- 默认值:1000 - -每个副本的错误计数会被限制在该数值以内,从而防止单个副本累计过多错误。 - -另请参阅: - -- [load_balancing](#load_balancing-round_robin) -- [表引擎 Distributed](../../engines/table-engines/special/distributed.md) -- [distributed_replica_error_half_life](#distributed_replica_error_half_life) -- [distributed_replica_max_ignored_errors](#distributed_replica_max_ignored_errors) - -## distributed_replica_error_half_life {#distributed_replica_error_half_life} - - - -- 类型:秒 -- 默认值:60 秒 - -控制分布式表中错误计数被清零的速度。如果某个副本在一段时间内不可用,累计了 5 个错误,并且将 distributed_replica_error_half_life 设置为 1 秒,那么在最后一个错误发生后 3 秒,该副本将被视为恢复正常。 - -另请参阅: - -- [load_balancing](#load_balancing-round_robin) -- [表引擎 Distributed](../../engines/table-engines/special/distributed.md) -- [distributed_replica_error_cap](#distributed_replica_error_cap) -- [distributed_replica_max_ignored_errors](#distributed_replica_max_ignored_errors) - -## distributed_replica_max_ignored_errors {#distributed_replica_max_ignored_errors} - - - -- 类型:无符号整数 -- 默认值:0 - -在根据 `load_balancing` 算法选择副本时,将被忽略的错误次数。 - -另请参阅: - -- [load_balancing](#load_balancing-round_robin) -- [表引擎 Distributed](../../engines/table-engines/special/distributed.md) -- [distributed_replica_error_cap](#distributed_replica_error_cap) -- [distributed_replica_error_half_life](#distributed_replica_error_half_life) - -## do_not_merge_across_partitions_select_final {#do_not_merge_across_partitions_select_final} - - - -在执行 `SELECT FINAL` 时,仅在同一分区内合并数据分片 - -## empty_result_for_aggregation_by_constant_keys_on_empty_set {#empty_result_for_aggregation_by_constant_keys_on_empty_set} - - - -当对空集合按常量键进行聚合时,返回空结果。 - -## empty_result_for_aggregation_by_empty_set {#empty_result_for_aggregation_by_empty_set} - - - -在对空集合执行无键聚合时,返回空结果。 - -## enable_adaptive_memory_spill_scheduler {#enable_adaptive_memory_spill_scheduler} - - - - - - - -启用后,将触发调度器自适应地将数据溢写到外部存储。目前仅支持 Grace JOIN。 - -## enable_add_distinct_to_in_subqueries {#enable_add_distinct_to_in_subqueries} - - - - - -在 `IN` 子查询中启用 `DISTINCT`。这是一个权衡设置:启用后,可以大幅减少为分布式 IN 子查询而传输的临时表大小,并通过仅发送唯一值显著加快分片之间的数据传输速度。 -但是,启用此设置会在每个节点上增加额外的合并工作量,因为必须执行去重操作(DISTINCT)。当网络传输成为瓶颈且可以接受额外的合并开销时,请使用此设置。 - -## enable_blob_storage_log {#enable_blob_storage_log} - - - - - -将 blob 存储操作相关信息写入 system.blob_storage_log 表中 - -## enable_deflate_qpl_codec {#enable_deflate_qpl_codec} - - - -启用后,可以使用 DEFLATE_QPL 编解码器压缩列。 - -## enable_early_constant_folding {#enable_early_constant_folding} - - - -启用一种查询优化:分析函数和子查询的结果,如果结果中包含常量,则对查询进行重写。 - -## enable_extended_results_for_datetime_functions {#enable_extended_results_for_datetime_functions} - - - -启用或禁用返回扩展范围的 `Date32` 类型结果(相对于 `Date` 类型) -或扩展范围的 `DateTime64` 类型结果(相对于 `DateTime` 类型)。 - -可能的取值: - -- `0` — 对所有类型的参数,函数返回 `Date` 或 `DateTime`。 -- `1` — 对 `Date32` 或 `DateTime64` 参数,函数返回 `Date32` 或 `DateTime64`,否则返回 `Date` 或 `DateTime`。 - -下表展示了此设置对各种日期时间函数的影响。 - -| 功能 | `enable_extended_results_for_datetime_functions = 0` | `enable_extended_results_for_datetime_functions = 1` | -| ------------------------- | -------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ | -| `toStartOfYear` | 返回 `Date` 或 `DateTime` 类型 | 对于 `Date`/`DateTime` 类型的输入返回 `Date`/`DateTime`
对于 `Date32`/`DateTime64` 类型的输入返回 `Date32`/`DateTime64` | -| `toStartOfISOYear` | 返回 `Date` 或 `DateTime` 类型 | 若输入为 `Date`/`DateTime`,则返回 `Date`/`DateTime`
若输入为 `Date32`/`DateTime64`,则返回 `Date32`/`DateTime64` | -| `toStartOfQuarter` | 返回 `Date` 或 `DateTime` 类型 | 对 `Date`/`DateTime` 输入返回 `Date`/`DateTime`
对 `Date32`/`DateTime64` 输入返回 `Date32`/`DateTime64` | -| `toStartOfMonth` | 返回 `Date` 或 `DateTime` 类型 | 对于 `Date`/`DateTime` 类型的输入,返回 `Date`/`DateTime`
对于 `Date32`/`DateTime64` 类型的输入,返回 `Date32`/`DateTime64` | -| `toStartOfWeek` | 返回 `Date` 或 `DateTime` 类型 | 对于 `Date`/`DateTime` 类型的输入,返回 `Date`/`DateTime` 类型
对于 `Date32`/`DateTime64` 类型的输入,返回 `Date32`/`DateTime64` 类型 | -| `toLastDayOfWeek` | 返回 `Date` 或 `DateTime` | 对 `Date`/`DateTime` 类型的输入返回 `Date`/`DateTime` 类型
对 `Date32`/`DateTime64` 类型的输入返回 `Date32`/`DateTime64` 类型 | -| `toLastDayOfMonth` | 返回 `Date` 或 `DateTime` 类型 | 对 `Date`/`DateTime` 类型的输入返回 `Date`/`DateTime`
对 `Date32`/`DateTime64` 类型的输入返回 `Date32`/`DateTime64` | -| `toMonday` | 返回 `Date` 或 `DateTime` | 对于 `Date`/`DateTime` 类型的输入返回 `Date`/`DateTime`
对于 `Date32`/`DateTime64` 类型的输入返回 `Date32`/`DateTime64` | -| `toStartOfDay` | 返回 `DateTime`
*注意:对于超出 1970-2149 年范围的值,结果可能不正确* | 对 `Date`/`DateTime` 输入返回 `DateTime`
对 `Date32`/`DateTime64` 输入返回 `DateTime64` | -| `toStartOfHour` | 返回 `DateTime`
*注意:对于超出 1970–2149 年范围的值,结果可能不正确* | 对 `Date`/`DateTime` 输入返回 `DateTime` 类型
对 `Date32`/`DateTime64` 输入返回 `DateTime64` 类型 | -| `toStartOfFifteenMinutes` | 返回 `DateTime`
*注意:对于超出 1970-2149 年范围的值会产生错误结果* | 对于 `Date`/`DateTime` 输入,返回 `DateTime` 类型
对于 `Date32`/`DateTime64` 输入,返回 `DateTime64` 类型 | -| `toStartOfTenMinutes` | 返回 `DateTime`
*注意:对于超出 1970-2149 范围的值会返回不正确的结果* | 对于 `Date`/`DateTime` 输入返回 `DateTime` 类型
对于 `Date32`/`DateTime64` 输入返回 `DateTime64` 类型 | -| `toStartOfFiveMinutes` | Returns `DateTime`
*注意:对于超出 1970-2149 年范围的值会返回错误结果* | 对于 `Date`/`DateTime` 输入返回 `DateTime`
对于 `Date32`/`DateTime64` 输入返回 `DateTime64` | -| `toStartOfMinute` | 返回 `DateTime`
*注意:对于超出 1970–2149 年范围的值,结果可能不正确* | 对于 `Date`/`DateTime` 输入,返回 `DateTime`
对于 `Date32`/`DateTime64` 输入,返回 `DateTime64` | -| `timeSlot` | 返回 `DateTime`
*注意:对于 1970-2149 年范围之外的值会产生错误结果* | 输入为 `Date`/`DateTime` 时返回 `DateTime`
输入为 `Date32`/`DateTime64` 时返回 `DateTime64` | - -## enable_filesystem_cache {#enable_filesystem_cache} - - - -为远程文件系统使用缓存。此设置不会开启或关闭磁盘缓存(这必须通过磁盘配置完成),但在需要时允许某些查询绕过缓存。 - -## enable_filesystem_cache_log {#enable_filesystem_cache_log} - - - -启用针对每个查询的文件系统缓存日志记录 - -## enable_filesystem_cache_on_write_operations {#enable_filesystem_cache_on_write_operations} - - - -启用或禁用 `write-through` 缓存。若设置为 `false`,则对写入操作禁用 `write-through` 缓存。若设置为 `true`,且在服务器配置的缓存磁盘配置部分中已开启 `cache_on_write_operations`,则启用 `write-through` 缓存。 -更多详情请参阅 ["使用本地缓存"](/operations/storing-data#using-local-cache)。 - -## enable_filesystem_read_prefetches_log {#enable_filesystem_read_prefetches_log} - - - -在查询期间将日志写入 system.filesystem_prefetch_log 表。仅应在测试或调试时使用,不建议默认启用。 - -## enable_global_with_statement {#enable_global_with_statement} - - - - - -将 WITH 子句传递到 UNION 查询和所有子查询 - -## enable_hdfs_pread {#enable_hdfs_pread} - - - - - -启用或禁用在 HDFS 文件上使用 `pread`。默认使用 `hdfsPread`。如果禁用,则会使用 `hdfsRead` 和 `hdfsSeek` 来读取 HDFS 文件。 - -## enable_http_compression {#enable_http_compression} - - - - - -启用或禁用对 HTTP 请求响应中的数据压缩。 - -有关更多信息,请参阅 [HTTP 接口说明](../../interfaces/http.md)。 - -可能的取值: - -- 0 — 禁用。 -- 1 — 启用。 - -## enable_job_stack_trace {#enable_job_stack_trace} - - - - - -当作业导致异常时,输出作业创建者的堆栈追踪信息。为避免性能开销,默认禁用。 - -## enable_join_runtime_filters {#enable_join_runtime_filters} - - - - - - - -在运行时根据从右表收集的一组 JOIN 键来过滤左表。 - -## enable_lazy_columns_replication {#enable_lazy_columns_replication} - - - - - -在 JOIN 和 ARRAY JOIN 中启用惰性列复制,从而避免在内存中对相同行进行多次不必要的拷贝。 - -## enable_lightweight_delete {#enable_lightweight_delete} - -**别名**: `allow_experimental_lightweight_delete` - - - -为 MergeTree 表启用轻量级 DELETE 变更。 - -## enable_lightweight_update {#enable_lightweight_update} - - - -**别名**: `allow_experimental_lightweight_update` - - - - - -允许使用轻量级更新功能。 - -## enable_memory_bound_merging_of_aggregation_results {#enable_memory_bound_merging_of_aggregation_results} - - - -启用聚合结果的内存受限合并策略。 - -## enable_multiple_prewhere_read_steps {#enable_multiple_prewhere_read_steps} - - - -在存在由 AND 连接的多个条件时,将更多条件从 WHERE 下推到 PREWHERE,并分多步执行磁盘读取和过滤。 - -## enable_named_columns_in_function_tuple {#enable_named_columns_in_function_tuple} - - - - - -当所有名称都唯一且可以作为未加引号的标识符处理时,在 tuple() 函数中生成具名元组。 - -## enable_optimize_predicate_expression {#enable_optimize_predicate_expression} - - - - - -在 `SELECT` 查询中启用谓词下推。 - -谓词下推可以显著减少分布式查询中的网络流量。 - -可能的取值: - -- 0 — 关闭。 -- 1 — 开启。 - -用法 - -考虑如下查询: - -1. `SELECT count() FROM test_table WHERE date = '2018-10-10'` -2. `SELECT count() FROM (SELECT * FROM test_table) WHERE date = '2018-10-10'` - -如果 `enable_optimize_predicate_expression = 1`,则这两个查询的执行时间相同,因为 ClickHouse 在处理子查询时会将 `WHERE` 条件下推到该子查询中。 - -如果 `enable_optimize_predicate_expression = 0`,则第二个查询的执行时间会长得多,因为只有在子查询完成后,`WHERE` 子句才会应用于所有数据。 - -## enable_optimize_predicate_expression_to_final_subquery {#enable_optimize_predicate_expression_to_final_subquery} - - - -允许将谓词下推到 `FINAL` 子查询中。 - -## enable_order_by_all - - - -启用或禁用使用 `ORDER BY ALL` 语法进行排序,参见 [ORDER BY](../../sql-reference/statements/select/order-by.md)。 - -可选值: - -* 0 — 禁用 ORDER BY ALL。 -* 1 — 启用 ORDER BY ALL。 - -**示例** - -查询: - -```sql -CREATE TABLE TAB(C1 Int, C2 Int, ALL Int) ENGINE=Memory(); - -INSERT INTO TAB VALUES (10, 20, 30), (20, 20, 10), (30, 10, 20); - -SELECT * FROM TAB ORDER BY ALL; -- 返回错误,ALL 是模糊的 - -SELECT * FROM TAB ORDER BY ALL SETTINGS enable_order_by_all = 0; -``` - -结果: - -```text -┌─C1─┬─C2─┬─ALL─┐ -│ 20 │ 20 │ 10 │ -│ 30 │ 10 │ 20 │ -│ 10 │ 20 │ 30 │ -└────┴────┴─────┘ -``` - - -## enable_parallel_blocks_marshalling {#enable_parallel_blocks_marshalling} - - - - - -仅影响分布式查询。启用后,数据块会在 pipeline 线程上进行(反)序列化和(解)压缩(即采用高于默认设置的并行度),并在发送给查询发起端之前/之后完成这些操作。 - -## enable_parsing_to_custom_serialization {#enable_parsing_to_custom_serialization} - - - - - -如果为 true,则可以根据从表中获得的序列化提示信息,将数据直接解析为使用自定义序列化(例如 Sparse)的列。 - -## enable_positional_arguments - - - - - -启用或禁用在 [GROUP BY](/sql-reference/statements/select/group-by)、[LIMIT BY](../../sql-reference/statements/select/limit-by.md)、[ORDER BY](../../sql-reference/statements/select/order-by.md) 语句中对位置参数的支持。 - -可能的取值: - -* 0 — 不支持位置参数。 -* 1 — 支持位置参数:可以使用列序号代替列名。 - -**示例** - -查询: - -```sql -CREATE TABLE positional_arguments(one Int, two Int, three Int) ENGINE=Memory(); - -INSERT INTO positional_arguments VALUES (10, 20, 30), (20, 20, 10), (30, 10, 20); - -SELECT * FROM positional_arguments ORDER BY 2,3; -``` - -结果: - -```text -┌─one─┬─two─┬─three─┐ -│ 30 │ 10 │ 20 │ -│ 20 │ 20 │ 10 │ -│ 10 │ 20 │ 30 │ -└─────┴─────┴───────┘ -``` - - -## enable_producing_buckets_out_of_order_in_aggregation {#enable_producing_buckets_out_of_order_in_aggregation} - - - - - -允许在内存高效聚合(参见 `distributed_aggregation_memory_efficient`)中乱序生成桶。 -当聚合桶大小分布不均时,这可以通过允许副本在发起端仍在处理一些较大的低 ID 桶时,先向其发送更高 ID 的桶,从而提升性能。 -缺点是可能会带来更高的内存占用。 - -## enable_reads_from_query_cache {#enable_reads_from_query_cache} - - - -开启该设置后,将从[查询缓存](../query-cache.md)中读取 `SELECT` 查询的结果。 - -可能的取值: - -- 0 - 禁用 -- 1 - 启用 - -## enable_s3_requests_logging {#enable_s3_requests_logging} - - - -启用对 S3 请求的极其详细日志记录。仅建议在调试时使用。 - -## enable_scalar_subquery_optimization {#enable_scalar_subquery_optimization} - - - - - -如果设置为 true,将防止标量子查询对大型标量值执行序列化/反序列化操作,并在可能的情况下避免多次执行同一子查询。 - -## enable_scopes_for_with_statement {#enable_scopes_for_with_statement} - - - - - -如果禁用,父级 WITH 子句中的声明其作用域将与在当前作用域中声明时相同。 - -请注意,这是针对新分析器的兼容性设置,用于允许运行某些在语义上无效、但旧分析器仍可执行的查询。 - -## enable_shared_storage_snapshot_in_query - - - - - -启用后,单个查询中的所有子查询会针对每个表共享同一个 `StorageSnapshot`。 -这可确保整个查询过程中所见的数据视图保持一致,即使同一个表被多次访问。 - -对于那些数据部分内部一致性非常重要的查询,这是必需的。例如: - -```sql -SELECT - count() -FROM events -WHERE (_part, _part_offset) IN ( - SELECT _part, _part_offset - FROM events - WHERE user_id = 42 -) -``` - -如果不启用此设置,外层和内层查询可能会基于不同的数据快照执行,从而导致结果不正确。 - -:::note -启用此设置会禁用一种优化机制,该机制会在查询规划阶段完成后,从快照中移除不必要的数据部分。 -因此,长时间运行的查询可能会在整个执行过程中始终持有这些已过期的部分,从而延迟数据部分清理并增加存储压力。 - -此设置目前仅适用于 MergeTree 系列表。 -::: - -可能的取值: - -* 0 - 禁用 -* 1 - 启用 - - -## enable_sharing_sets_for_mutations {#enable_sharing_sets_for_mutations} - - - -允许在同一 mutation 的不同任务之间共享为 IN 子查询构建的 set 对象,从而减少内存占用和 CPU 消耗。 - -## enable_software_prefetch_in_aggregation {#enable_software_prefetch_in_aggregation} - - - -启用聚合中的软件预取 - -## enable_unaligned_array_join {#enable_unaligned_array_join} - - - -允许在多个大小不同的数组上执行 ARRAY JOIN。启用此设置后,数组会被调整为与最长数组的长度一致。 - -## enable_url_encoding {#enable_url_encoding} - - - - - -允许在 [URL](../../engines/table-engines/special/url.md) 引擎表中启用或禁用对 URI 路径的编码和解码。 - -默认禁用。 - -## enable_vertical_final {#enable_vertical_final} - - - - - -如果启用,在执行 FINAL 时将重复行标记为已删除,并在之后通过过滤移除这些行,而不是通过合并行来去重 - -## enable_writes_to_query_cache {#enable_writes_to_query_cache} - - - -开启后,`SELECT` 查询的结果会存储到[查询缓存](../query-cache.md)中。 - -可能的取值: - -- 0 - 禁用 -- 1 - 启用 - -## enable_zstd_qat_codec {#enable_zstd_qat_codec} - - - - - -启用后,可以使用 `ZSTD_QAT` 编解码器对列进行压缩。 - -## enforce_strict_identifier_format {#enforce_strict_identifier_format} - - - - - -如果启用,则仅允许标识符包含字母、数字和下划线。 - -## engine_file_allow_create_multiple_files {#engine_file_allow_create_multiple_files} - - - -启用或禁用在使用带有后缀格式(`JSON`、`ORC`、`Parquet` 等)的 File 引擎表中,每次插入时创建一个新文件。若启用,则在每次插入时都会创建一个新文件,文件名遵循以下模式: - -`data.Parquet` -> `data.1.Parquet` -> `data.2.Parquet` 等。 - -可能的取值: - -- 0 — `INSERT` 查询将新数据追加到文件末尾。 -- 1 — `INSERT` 查询会创建一个新文件。 - -## engine_file_empty_if_not_exists {#engine_file_empty_if_not_exists} - - - -允许在文件不存在时从 `File` 引擎表中执行数据查询。 - -可能的取值: - -- 0 — `SELECT` 抛出异常。 -- 1 — `SELECT` 返回空结果。 - -## engine_file_skip_empty_files {#engine_file_skip_empty_files} - - - -启用或禁用在 [File](../../engines/table-engines/special/file.md) 引擎表中是否跳过空文件。 - -可能的取值: - -- 0 — 如果空文件与请求的格式不兼容,`SELECT` 会抛出异常。 -- 1 — 对于空文件,`SELECT` 返回空结果。 - -## engine_file_truncate_on_insert {#engine_file_truncate_on_insert} - - - -在 [File](../../engines/table-engines/special/file.md) 表引擎的表中,启用或禁用在插入前截断文件的行为。 - -可能的取值: - -- 0 — `INSERT` 查询会将新数据追加到文件末尾。 -- 1 — `INSERT` 查询会用新数据替换文件的现有内容。 - -## engine_url_skip_empty_files {#engine_url_skip_empty_files} - - - -启用或禁用在 [URL](../../engines/table-engines/special/url.md) 引擎表中跳过空文件的行为。 - -可能的取值: - -- 0 — 如果空文件与请求的格式不兼容,`SELECT` 会抛出异常。 -- 1 — 对于空文件,`SELECT` 返回空结果集。 - -## except_default_mode {#except_default_mode} - - - -设置 EXCEPT 查询的默认模式。可选值:空字符串、'ALL'、'DISTINCT'。若留空,未显式指定模式的查询将抛出异常。 - -## exclude_materialize_skip_indexes_on_insert - - - -在执行 INSERT 时,排除对指定 skip 索引的构建和存储。被排除的 skip 索引仍会在[合并期间](merge-tree-settings.md/#materialize_skip_indexes_on_merge)或通过显式 -[MATERIALIZE INDEX](/sql-reference/statements/alter/skipping-index.md/#materialize-index) 查询被构建和存储。 - -如果 [materialize_skip_indexes_on_insert](#materialize_skip_indexes_on_insert) 为 false,则此设置无效。 - -示例: - -```sql -CREATE TABLE tab -( - a UInt64, - b UInt64, - INDEX idx_a a TYPE minmax, - INDEX idx_b b TYPE set(3) -) -ENGINE = MergeTree ORDER BY tuple(); - -SET exclude_materialize_skip_indexes_on_insert='idx_a'; -- idx_a 在插入时不会更新 ---SET exclude_materialize_skip_indexes_on_insert='idx_a, idx_b'; -- 插入时两个索引都不会更新 - -INSERT INTO tab SELECT number, number / 50 FROM numbers(100); -- 仅更新 idx_b - --- 由于这是会话级设置,可以在单个查询级别设置 -INSERT INTO tab SELECT number, number / 50 FROM numbers(100, 100) SETTINGS exclude_materialize_skip_indexes_on_insert='idx_b'; - -ALTER TABLE tab MATERIALIZE INDEX idx_a; -- 可使用此查询显式物化索引 - -SET exclude_materialize_skip_indexes_on_insert = DEFAULT; -- 重置设置为默认值 -``` - - -## execute_exists_as_scalar_subquery {#execute_exists_as_scalar_subquery} - - - - - -将非关联 EXISTS 子查询作为标量子查询执行。与标量子查询一样,会使用缓存,并对结果进行常量折叠。 - -## external_storage_connect_timeout_sec {#external_storage_connect_timeout_sec} - - - -以秒为单位的连接超时时间。目前仅适用于 MySQL。 - -## external_storage_max_read_bytes {#external_storage_max_read_bytes} - - - -限制在具有 external 引擎的表刷新历史数据时可读取的最大字节数。当前仅支持 MySQL 表引擎、数据库引擎和字典。如果等于 0,则表示禁用此设置。 - -## external_storage_max_read_rows {#external_storage_max_read_rows} - - - -限制在使用 external 引擎的表刷新历史数据时可读取的最大行数。当前仅支持 MySQL 表引擎、数据库引擎和字典。如果该值为 0,则表示禁用此设置。 - -## external_storage_rw_timeout_sec {#external_storage_rw_timeout_sec} - - - -读写超时时间(单位:秒)。当前仅适用于 MySQL。 - -## external_table_functions_use_nulls {#external_table_functions_use_nulls} - - - -定义 [mysql](../../sql-reference/table-functions/mysql.md)、[postgresql](../../sql-reference/table-functions/postgresql.md) 和 [odbc](../../sql-reference/table-functions/odbc.md) 表函数如何使用 Nullable 列。 - -可能的取值: - -- 0 — 表函数显式使用 Nullable 列。 -- 1 — 表函数隐式使用 Nullable 列。 - -**用法** - -如果该设置为 `0`,表函数不会将列设为 Nullable 类型,而是插入默认值来代替 NULL。这同样适用于数组中的 NULL 值。 - -## external_table_strict_query {#external_table_strict_query} - - - -如果将其设置为 true,则禁止在针对外部表的查询中将表达式转换为本地过滤条件。 - -## extract_key_value_pairs_max_pairs_per_row {#extract_key_value_pairs_max_pairs_per_row} - -**别名**: `extract_kvp_max_pairs_per_row` - - - - - -由 `extractKeyValuePairs` 函数可生成的键值对的最大数量。作为防止占用过多内存的保护机制。 - -## extremes {#extremes} - - - -是否统计极值(查询结果各列中的最小值和最大值)。可接受 0 或 1。默认值为 0(禁用)。 -有关更多信息,请参阅“Extreme values”章节。 - -## fallback_to_stale_replicas_for_distributed_queries {#fallback_to_stale_replicas_for_distributed_queries} - - - -当更新后的数据不可用时,强制将查询路由到一个过时副本。参见 [Replication](../../engines/table-engines/mergetree-family/replication.md)。 - -ClickHouse 会从该表的过时副本中选择最合适的一个。 - -在对指向复制表的分布式表执行 `SELECT` 时使用。 - -默认值为 1(启用)。 - -## filesystem_cache_allow_background_download {#filesystem_cache_allow_background_download} - - - - - -允许文件系统缓存将从远程存储读取的数据下载任务加入后台队列。禁用此设置则会在当前查询/会话中以前台方式执行下载。 - -## filesystem_cache_boundary_alignment {#filesystem_cache_boundary_alignment} - - - - - -文件系统缓存边界对齐。此设置仅用于非磁盘读操作(例如远程表引擎 / 表函数的缓存,而不用于 MergeTree 表的存储配置)。值为 0 表示不进行对齐。 - -## filesystem_cache_enable_background_download_during_fetch {#filesystem_cache_enable_background_download_during_fetch} - - - - - - - -仅在 ClickHouse Cloud 中生效。为在文件系统缓存中预留空间而锁定缓存时的等待时间。 - -## filesystem_cache_enable_background_download_for_metadata_files_in_packed_storage {#filesystem_cache_enable_background_download_for_metadata_files_in_packed_storage} - - - - - - - -仅在 ClickHouse Cloud 中生效。用于在文件系统缓存中为空间预留而锁定缓存时的等待时间。 - -## filesystem_cache_max_download_size {#filesystem_cache_max_download_size} - - - -单个查询可从远程文件系统缓存中下载的数据的最大大小 - -## filesystem_cache_name {#filesystem_cache_name} - - - -为无状态表引擎或数据湖指定要使用的文件系统缓存名称 - -## filesystem_cache_prefer_bigger_buffer_size {#filesystem_cache_prefer_bigger_buffer_size} - - - - - -如果启用了文件系统缓存(filesystem cache),则优先使用更大的缓冲区大小,以避免写入过小的文件段,从而降低缓存性能。另一方面,启用该设置可能会增加内存占用。 - -## filesystem_cache_reserve_space_wait_lock_timeout_milliseconds {#filesystem_cache_reserve_space_wait_lock_timeout_milliseconds} - - - - - -在文件系统缓存中为预留空间获取锁的等待时间 - -## filesystem_cache_segments_batch_size {#filesystem_cache_segments_batch_size} - - - -限制单次从缓存中为一个读取缓冲区请求的文件段批次大小。值过小会导致对缓存的请求过于频繁,值过大则可能减慢缓存淘汰速度。 - -## filesystem_cache_skip_download_if_exceeds_per_query_cache_write_limit {#filesystem_cache_skip_download_if_exceeds_per_query_cache_write_limit} - -**别名**: `skip_download_if_exceeds_query_cache` - - - - - -当超过查询缓存大小时,跳过从远程文件系统下载文件 - -## filesystem_prefetch_max_memory_usage {#filesystem_prefetch_max_memory_usage} - - - -预取操作的最大内存占用。 - -## filesystem_prefetch_step_bytes {#filesystem_prefetch_step_bytes} - - - -预取步长(以字节为单位)。`0` 表示 `auto`——系统会自动推导出一个大致最优的预取步长,但可能并非绝对最优。由于 `filesystem_prefetch_min_bytes_for_single_read_task` 设置的影响,实际使用的值可能会有所不同。 - -## filesystem_prefetch_step_marks {#filesystem_prefetch_step_marks} - - - -标记预取的步长。零表示 `auto` —— 将自动推导出一个近似最优的预取步长,但可能不是 100% 最优。实际取值可能会不同,因为还会受到设置 filesystem_prefetch_min_bytes_for_single_read_task 的影响。 - -## filesystem_prefetches_limit {#filesystem_prefetches_limit} - - - -预取的最大次数。零表示不限制。如果你想限制预取的数量,建议优先使用设置 `filesystem_prefetches_max_memory_usage`。 - -## final - - - -自动对查询中的所有表(在 [FINAL](../../sql-reference/statements/select/from.md/#final-modifier) 适用的情况下)应用 [FINAL](../../sql-reference/statements/select/from.md/#final-modifier) 修饰符,包括参与 JOIN 的表、子查询中的表以及分布式表。 - -可能的取值: - -* 0 - 禁用 -* 1 - 启用 - -示例: - -```sql -CREATE TABLE test -( - key Int64, - some String -) -ENGINE = ReplacingMergeTree -ORDER BY key; - -INSERT INTO test FORMAT Values (1, 'first'); -INSERT INTO test FORMAT Values (1, 'second'); - -SELECT * FROM test; -┌─key─┬─some───┐ -│ 1 │ second │ -└─────┴────────┘ -┌─key─┬─some──┐ -│ 1 │ first │ -└─────┴───────┘ - -SELECT * FROM test SETTINGS final = 1; -┌─key─┬─some───┐ -│ 1 │ second │ -└─────┴────────┘ - -SET final = 1; -SELECT * FROM test; -┌─key─┬─some───┐ -│ 1 │ second │ -└─────┴────────┘ -``` - - -## flatten_nested - - - -设置 [nested](../../sql-reference/data-types/nested-data-structures/index.md) 列的数据格式。 - -可能的取值: - -* 1 — 嵌套列被展开为多个独立的数组。 -* 0 — 嵌套列保留为一个由元组构成的数组。 - -**用法** - -如果该设置为 `0`,则可以使用任意级别的嵌套。 - -**示例** - -查询: - -```sql -SET flatten_nested = 1; -CREATE TABLE t_nest (`n` Nested(a UInt32, b UInt32)) ENGINE = MergeTree ORDER BY tuple(); - -SHOW CREATE TABLE t_nest; -``` - -结果: - -```text -┌─statement───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ -│ CREATE TABLE default.t_nest -( - `n.a` Array(UInt32), - `n.b` Array(UInt32) -) -ENGINE = MergeTree -ORDER BY tuple() -SETTINGS index_granularity = 8192 │ -└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ -``` - -查询: - -```sql -SET flatten_nested = 0; - -CREATE TABLE t_nest (`n` Nested(a UInt32, b UInt32)) ENGINE = MergeTree ORDER BY tuple(); - -SHOW CREATE TABLE t_nest; -``` - -结果: - -```text -┌─statement──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ -│ CREATE TABLE default.t_nest -( - `n` Nested(a UInt32, b UInt32) -) -ENGINE = MergeTree -ORDER BY tuple() -SETTINGS index_granularity = 8192 │ -└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## force_aggregate_partitions_independently {#force_aggregate_partitions_independently} - - - -在适用时强制使用该优化,即使启发式规则决定不使用它 - -## force_aggregation_in_order {#force_aggregation_in_order} - - - -该设置由服务器内部用于支持分布式查询。请不要手动修改,否则会破坏正常运行。(在分布式聚合期间,强制远程节点按顺序执行聚合。) - -## force_data_skipping_indices - -如果查询未使用传入的数据跳过索引,则不执行该查询。 - -请看以下示例: - -```sql -CREATE TABLE data -( - key Int, - d1 Int, - d1_null Nullable(Int), - INDEX d1_idx d1 TYPE minmax GRANULARITY 1, - INDEX d1_null_idx assumeNotNull(d1_null) TYPE minmax GRANULARITY 1 -) -Engine=MergeTree() -ORDER BY key; - -SELECT * FROM data_01515; -SELECT * FROM data_01515 SETTINGS force_data_skipping_indices=''; -- 查询将产生 CANNOT_PARSE_TEXT 错误。 -SELECT * FROM data_01515 SETTINGS force_data_skipping_indices='d1_idx'; -- 查询将产生 INDEX_NOT_USED 错误。 -SELECT * FROM data_01515 WHERE d1 = 0 SETTINGS force_data_skipping_indices='d1_idx'; -- 正常。 -SELECT * FROM data_01515 WHERE d1 = 0 SETTINGS force_data_skipping_indices='`d1_idx`'; -- 正常(完整解析器示例)。 -SELECT * FROM data_01515 WHERE d1 = 0 SETTINGS force_data_skipping_indices='`d1_idx`, d1_null_idx'; -- 查询将产生 INDEX_NOT_USED 错误,因为 d1_null_idx 未被使用。 -SELECT * FROM data_01515 WHERE d1 = 0 AND assumeNotNull(d1_null) = 0 SETTINGS force_data_skipping_indices='`d1_idx`, d1_null_idx'; -- 正常。 -``` - - -## force_grouping_standard_compatibility {#force_grouping_standard_compatibility} - - - - - -使 GROUPING 函数在参数未被用作聚合键时返回 1 - -## force_index_by_date {#force_index_by_date} - - - -如果无法按日期使用索引,则禁止执行查询。 - -适用于 MergeTree 系列表引擎。 - -如果 `force_index_by_date=1`,ClickHouse 会检查查询中是否包含可用于限制数据范围的日期键条件。如果不存在合适的条件,则抛出异常。不过,它不会检查该条件是否实际减少了需要读取的数据量。例如,即使条件 `Date != ' 2000-01-01 '` 匹配了表中的全部数据(即执行查询需要全表扫描),该条件仍然是可接受的。有关 MergeTree 表中数据范围的更多信息,请参阅 [MergeTree](../../engines/table-engines/mergetree-family/mergetree.md)。 - -## force_optimize_projection {#force_optimize_projection} - - - -在启用了投影优化(参见 [optimize_use_projections](#optimize_use_projections) 设置)时,控制是否在 `SELECT` 查询中强制使用[投影](../../engines/table-engines/mergetree-family/mergetree.md/#projections)。 - -可能的取值: - -- 0 — 不强制使用投影优化。 -- 1 — 强制使用投影优化。 - -## force_optimize_projection_name {#force_optimize_projection_name} - -如果将其设置为非空字符串,则会检查该投影在查询中是否至少被使用一次。 - -可能的取值: - -- string:在查询中要使用的投影名称 - -## force_optimize_skip_unused_shards {#force_optimize_skip_unused_shards} - - - -当启用了 [optimize_skip_unused_shards](#optimize_skip_unused_shards) 且无法跳过未使用分片时,用于控制是否允许执行查询。如果无法跳过未使用分片且该设置已启用,则会抛出异常。 - -可能的取值: - -- 0 — 已禁用。ClickHouse 不会抛出异常。 -- 1 — 已启用。仅当表具有分片键时才会禁用查询执行。 -- 2 — 已启用。无论表是否定义了分片键,都会禁用查询执行。 - -## force_optimize_skip_unused_shards_nesting {#force_optimize_skip_unused_shards_nesting} - - - -控制 [`force_optimize_skip_unused_shards`](#force_optimize_skip_unused_shards) 的行为(因此仍然需要启用 [`force_optimize_skip_unused_shards`](#force_optimize_skip_unused_shards)),使其取决于分布式查询的嵌套层级(例如,当你有一个 `Distributed` 表再访问另一个 `Distributed` 表时)。 - -可能的取值: - -- 0 — 禁用,此时 `force_optimize_skip_unused_shards` 始终生效。 -- 1 — 仅在第一级启用 `force_optimize_skip_unused_shards`。 -- 2 — 在最多第二级启用 `force_optimize_skip_unused_shards`。 - -## force_primary_key {#force_primary_key} - - - -当无法利用主键索引时,将禁止执行查询。 - -适用于 MergeTree 系列表。 - -如果 `force_primary_key=1`,ClickHouse 会检查查询是否包含可用于限制数据范围的主键条件。如果未找到合适的条件,则抛出异常。不过,它不会检查该条件是否实际减少了需要读取的数据量。有关 MergeTree 表中数据范围的更多信息,请参见 [MergeTree](../../engines/table-engines/mergetree-family/mergetree.md)。 - -## force_remove_data_recursively_on_drop {#force_remove_data_recursively_on_drop} - - - -在执行 DROP 查询时递归删除数据。可避免出现 “Directory not empty” 错误,但可能会在无提示的情况下删除已分离(detached)的数据 - -## formatdatetime_e_with_space_padding {#formatdatetime_e_with_space_padding} - - - - - -函数 `formatDateTime` 中的格式说明符 `%e` 会以前导空格输出个位数的日期,例如输出 `' 2'` 而不是 `'2'`。 - -## formatdatetime_f_prints_scale_number_of_digits {#formatdatetime_f_prints_scale_number_of_digits} - - - - - -函数 `formatDateTime` 中的格式说明符 `%f` 对于 DateTime64,仅按照其小数精度打印相应位数的数字,而不是固定打印 6 位数字。 - -## formatdatetime_f_prints_single_zero {#formatdatetime_f_prints_single_zero} - - - - - -函数 `formatDateTime` 中的格式说明符 `%f` 在格式化后的值不包含小数秒部分时,会输出单个 0 而不是 6 个 0。 - -## formatdatetime_format_without_leading_zeros {#formatdatetime_format_without_leading_zeros} - - - -函数 `formatDateTime` 中的格式说明符 `'%c'`、`'%l'` 和 `'%k'` 会在输出月份和小时数时省略前导零。 - -## formatdatetime_parsedatetime_m_is_month_name {#formatdatetime_parsedatetime_m_is_month_name} - - - - - -在函数 `formatDateTime` 和 `parseDateTime` 中,格式符 `%M` 会输出/解析月份名称,而不是分钟。 - -## fsync_metadata {#fsync_metadata} - - - -在写入 `.sql` 文件时启用或禁用 [fsync](http://pubs.opengroup.org/onlinepubs/9699919799/functions/fsync.html)。默认启用。 - -如果服务器上有数百万个不断被创建和销毁的小表,那么禁用该设置是合理的。 - -## function_date_trunc_return_type_behavior {#function_date_trunc_return_type_behavior} - - - - - -用于控制 `dateTrunc` 函数返回类型的行为。 - -可能的取值: - -- 0 - 当第二个参数为 `DateTime64/Date32` 时,返回类型将是 `DateTime64/Date32`,与第一个参数中的时间单位无关。 -- 1 - 对于 `Date32`,结果始终为 `Date`。对于 `DateTime64`,当时间单位为 `second` 及更高粒度时,结果为 `DateTime`。 - -## function_implementation {#function_implementation} - -为特定目标或变体选择函数实现(实验性)。如果留空,则启用全部。 - -## function_json_value_return_type_allow_complex - - - -控制是否允许 `json_value` 函数返回复杂类型(例如:`struct`、`array`、`map`)。 - -```sql -SELECT JSON_VALUE('{"hello":{"world":"!"}}', '$.hello') settings function_json_value_return_type_allow_complex=true - -┌─JSON_VALUE('{"hello":{"world":"!"}}', '$.hello')─┐ -│ {"world":"!"} │ -└──────────────────────────────────────────────────┘ - -查询返回 1 行。用时:0.001 秒。 -``` - -可选值: - -* true — 允许。 -* false — 不允许。 - - -## function_json_value_return_type_allow_nullable - - - -控制在 JSON_VALUE 函数中,当值不存在时是否允许返回 `NULL`。 - -```sql -SELECT JSON_VALUE('{"hello":"world"}', '$.b') settings function_json_value_return_type_allow_nullable=true; - -┌─JSON_VALUE('{"hello":"world"}', '$.b')─┐ -│ ᴺᵁᴸᴸ │ -└────────────────────────────────────────┘ - -1 行结果。用时:0.001 秒。 -``` - -可能的取值: - -* true — 允许。 -* false — 不允许。 - - -## function_locate_has_mysql_compatible_argument_order {#function_locate_has_mysql_compatible_argument_order} - - - - - -控制函数 [locate](../../sql-reference/functions/string-search-functions.md/#locate) 的参数顺序。 - -可能的取值: - -- 0 — 函数 `locate` 接受参数 `(haystack, needle[, start_pos])`。 -- 1 — 函数 `locate` 接受参数 `(needle, haystack, [, start_pos])`(与 MySQL 的行为兼容)。 - -## function_range_max_elements_in_block {#function_range_max_elements_in_block} - - - -设置由函数 [range](/sql-reference/functions/array-functions#range) 生成的数据量安全阈值。定义该函数在每个数据块中可生成的最大元素数量(即该数据块内各行数组大小之和)。 - -可能的取值: - -- 正整数。 - -**另请参阅** - -- [`max_block_size`](#max_block_size) -- [`min_insert_block_size_rows`](#min_insert_block_size_rows) - -## function_sleep_max_microseconds_per_block {#function_sleep_max_microseconds_per_block} - - - - - -函数 `sleep` 在每个数据块上允许休眠的最大微秒数。如果用户传入更大的值,将抛出异常。此设置是一个安全阈值。 - -## function_visible_width_behavior {#function_visible_width_behavior} - - - - - -`visibleWidth` 行为的版本。0 - 仅统计代码点数量;1 - 正确统计零宽字符和组合字符,将全角字符视为两个字符,估算制表符宽度,并统计删除字符。 - -## 当参数为 Float64 时 geo_distance 返回 Float64 {#geo_distance_returns_float64_on_float64_arguments} - - - - - -如果传递给 `geoDistance`、`greatCircleDistance`、`greatCircleAngle` 函数的四个参数全部为 Float64,则返回 Float64,并在内部计算中使用双精度浮点数。在之前的 ClickHouse 版本中,这些函数始终返回 Float32。 - -## geotoh3_argument_order {#geotoh3_argument_order} - - - - - - - -当设置为 `lon_lat` 时,函数 `geoToH3` 接受参数顺序为 (lon, lat);当设置为 `lat_lon` 时,则接受参数顺序为 (lat, lon)。 - -## glob_expansion_max_elements {#glob_expansion_max_elements} - - - -通配符展开时允许的地址数量上限(适用于外部存储、表函数等)。 - -## grace_hash_join_initial_buckets {#grace_hash_join_initial_buckets} - - - - - -Grace 哈希连接的初始桶数量 - -## grace_hash_join_max_buckets {#grace_hash_join_max_buckets} - - - - - -限制 grace hash join 使用的桶数量上限 - -## group_by_overflow_mode {#group_by_overflow_mode} - - - -设置当用于聚合的唯一键数量超过限制时的处理方式: - -- `throw`:抛出异常 -- `break`:停止执行查询并返回部分结果 -- `any`:继续对已在集合中的键进行聚合,但不再向集合中添加新的键。 - -使用 `any` 值可以近似地执行 GROUP BY 操作。这种近似的效果取决于数据的统计特性。 - -## group_by_two_level_threshold {#group_by_two_level_threshold} - - - -从多少个键开始使用两级聚合。0 表示未设置阈值。 - -## group_by_two_level_threshold_bytes {#group_by_two_level_threshold_bytes} - - - -从聚合状态的大小(以字节为单位)达到多少开始,启用两级聚合。0 表示未设置阈值。当至少有一个阈值被触发时,将使用两级聚合。 - -## group_by_use_nulls {#group_by_use_nulls} - - - -更改 [GROUP BY 子句](/sql-reference/statements/select/group-by) 处理聚合键类型的方式。 -当使用 `ROLLUP`、`CUBE` 或 `GROUPING SETS` 修饰符时,在生成某些结果行时,部分聚合键可能不会被使用。 -对于这些键,对应行中的列会根据此设置被填充为默认值或 `NULL`。 - -可能的取值: - -- 0 — 使用聚合键类型的默认值来填充缺失值。 -- 1 — ClickHouse 按照 SQL 标准规定的方式执行 `GROUP BY`。聚合键的类型会被转换为 [Nullable](/sql-reference/data-types/nullable)。对于未使用该聚合键的行,其对应聚合键列会填充为 [NULL](/sql-reference/syntax#null)。 - -另请参阅: - -- [GROUP BY 子句](/sql-reference/statements/select/group-by) - -## h3togeo_lon_lat_result_order {#h3togeo_lon_lat_result_order} - - - - - -当该设置为 true 时,函数 `h3ToGeo` 返回 (lon, lat),否则返回 (lat, lon)。 - -## handshake_timeout_ms {#handshake_timeout_ms} - - - -在握手期间接收来自副本的 Hello 数据包的超时时间(毫秒)。 - -## hdfs_create_new_file_on_insert {#hdfs_create_new_file_on_insert} - - - -启用或禁用在 HDFS 引擎表中为每次插入创建新文件。若启用,每次插入都会创建一个新的 HDFS 文件,其名称类似于以下模式: - -初始:`data.Parquet.gz` -> `data.1.Parquet.gz` -> `data.2.Parquet.gz` 等。 - -可能的取值: - -- 0 — `INSERT` 查询将新数据追加到文件末尾。 -- 1 — `INSERT` 查询会创建一个新文件。 - -## hdfs_ignore_file_doesnt_exist {#hdfs_ignore_file_doesnt_exist} - - - - - -在读取某些键对应的文件时,如果文件不存在,则忽略该文件的缺失。 - -可能的值: - -- 1 — `SELECT` 返回空结果。 -- 0 — `SELECT` 抛出异常。 - -## hdfs_replication {#hdfs_replication} - - - -在创建 HDFS 文件时,可以指定该文件的实际副本数量。 - -## hdfs_skip_empty_files {#hdfs_skip_empty_files} - - - -启用或禁用在 [HDFS](../../engines/table-engines/integrations/hdfs.md) 引擎表中跳过空文件。 - -可能的值: - -- 0 — 如果空文件与请求的格式不兼容,`SELECT` 会抛出异常。 -- 1 — 对于空文件,`SELECT` 返回空结果集。 - -## hdfs_throw_on_zero_files_match {#hdfs_throw_on_zero_files_match} - - - - - -如果根据 glob 展开规则未匹配到任何文件,则抛出错误。 - -可能的值: - -- 1 — `SELECT` 抛出异常。 -- 0 — `SELECT` 返回空结果。 - -## hdfs_truncate_on_insert {#hdfs_truncate_on_insert} - - - -启用或禁用在向 HDFS 引擎表插入数据前对文件进行截断。如果禁用,当尝试插入数据而目标 HDFS 中对应文件已存在时,将抛出异常。 - -可能的取值: - -- 0 — `INSERT` 查询会将新数据追加到文件末尾。 -- 1 — `INSERT` 查询会用新数据替换文件中已存在的内容。 - -## hedged_connection_timeout_ms {#hedged_connection_timeout_ms} - - - - - -在 Hedged 请求中与副本建立连接的超时时间 - -## hnsw_candidate_list_size_for_search {#hnsw_candidate_list_size_for_search} - - - - - -在向量相似度索引中进行搜索时使用的动态候选列表大小,也称为 `ef_search`。 - -## hsts_max_age {#hsts_max_age} - - - -HSTS 的有效期。0 表示禁用 HSTS。 - -## http_connection_timeout {#http_connection_timeout} - - - -HTTP 连接超时时长(以秒为单位)。 - -可能的值: - -- 任意正整数。 -- 0 - 关闭(无限超时)。 - -## http_headers_progress_interval_ms {#http_headers_progress_interval_ms} - - - -发送 HTTP 头 `X-ClickHouse-Progress` 的时间间隔不得小于指定值。 - -## http_make_head_request {#http_make_head_request} - - - -`http_make_head_request` 设置允许在通过 HTTP 读取数据时执行 `HEAD` 请求,以获取将要读取的文件信息,例如其大小。由于该设置默认启用,当服务器不支持 `HEAD` 请求时,可能需要禁用此设置。 - -## http_max_field_name_size {#http_max_field_name_size} - - - -HTTP 头中字段名的最大长度 - -## http_max_field_value_size {#http_max_field_value_size} - - - -HTTP 头字段值的最大长度 - -## http_max_fields {#http_max_fields} - - - -HTTP 头部中允许的最大字段数 - -## http_max_multipart_form_data_size {#http_max_multipart_form_data_size} - - - -对 `multipart/form-data` 内容大小的限制。此设置无法通过 URL 参数解析,必须在用户配置文件中进行设置。注意,在查询执行开始之前,请求内容会被解析,且外部表会在内存中创建。这是在该阶段唯一生效的限制(在读取 HTTP 表单数据时,对最大内存使用量和最大执行时间的限制不起作用)。 - -## http_max_request_param_data_size {#http_max_request_param_data_size} - - - -限制在预定义 HTTP 请求中用作查询参数的请求数据大小。 - -## http_max_tries {#http_max_tries} - - - -通过 HTTP 读取时的最大尝试次数。 - -## http_max_uri_size {#http_max_uri_size} - - - -设置 HTTP 请求的最大 URI 长度。 - -可接受的取值: - -- 正整数。 - -## http_native_compression_disable_checksumming_on_decompress {#http_native_compression_disable_checksumming_on_decompress} - - - -启用或禁用在从客户端解压 HTTP POST 数据时进行校验和验证。仅用于 ClickHouse 原生压缩格式(不适用于 `gzip` 或 `deflate`)。 - -如需了解更多信息,请阅读 [HTTP 接口说明](../../interfaces/http.md)。 - -可选值: - -- 0 — 禁用。 -- 1 — 启用。 - -## http_receive_timeout {#http_receive_timeout} - - - - - -HTTP 接收超时时间(以秒为单位)。 - -可能的取值: - -- 任意正整数。 -- 0 - 禁用(无限超时)。 - -## http_response_buffer_size {#http_response_buffer_size} - - - -在向客户端发送 HTTP 响应之前,或(在启用 `http_wait_end_of_query` 时)在将数据刷新到磁盘之前,服务器内存中用于缓冲的字节数。 - -## http_response_headers {#http_response_headers} - - - - - -允许添加或覆盖服务器在成功返回查询结果时的 HTTP 响应头。 -这只会影响 HTTP 接口。 - -如果该头在默认情况下已经设置,则提供的值会将其覆盖。 -如果该头在默认情况下没有设置,则会被添加到响应头列表中。 -由服务器默认设置且未被此配置覆盖的头将会保留。 - -该配置允许你将某个头设置为常量值。目前没有办法将头设置为动态计算的值。 - -名称或值都不能包含 ASCII 控制字符。 - -如果你实现了一个 UI 应用程序,既允许用户修改设置,又会基于返回的头做出决策,建议将此设置设为只读。 - -示例:`SET http_response_headers = '{"Content-Type": "image/png"}'` - -## http_retry_initial_backoff_ms {#http_retry_initial_backoff_ms} - - - -通过 HTTP 重试读取时的初始退避时间下限(毫秒) - -## http_retry_max_backoff_ms {#http_retry_max_backoff_ms} - - - -通过 HTTP 重试读取时的最大退避时间(毫秒) - -## http_send_timeout {#http_send_timeout} - - - - - -HTTP 发送超时时间(以秒为单位)。 - -可能的取值: - -- 任意正整数。 -- 0 - 禁用(无限超时时间)。 - -:::note -仅适用于默认配置文件。更改需重启服务器后才会生效。 -::: - -## http_skip_not_found_url_for_globs {#http_skip_not_found_url_for_globs} - - - -跳过返回 HTTP_NOT_FOUND 错误的通配符匹配 URL - -## http_wait_end_of_query {#http_wait_end_of_query} - - - -启用服务器端 HTTP 响应缓冲。 - -## http_write_exception_in_output_format {#http_write_exception_in_output_format} - - - - - -以输出格式写出异常信息,以生成有效的输出。适用于 JSON 和 XML 格式。 - -## http_zlib_compression_level {#http_zlib_compression_level} - - - -当 [enable_http_compression = 1](#enable_http_compression) 时,设置 HTTP 请求响应数据的压缩级别。 - -可能的取值:1 到 9 之间的整数。 - -## iceberg_delete_data_on_drop {#iceberg_delete_data_on_drop} - - - - - -是否在执行 DROP 操作时删除所有 iceberg 文件。 - -## iceberg_insert_max_bytes_in_data_file {#iceberg_insert_max_bytes_in_data_file} - - - - - -插入操作时生成的 Iceberg Parquet 数据文件的最大大小(字节)。 - -## iceberg_insert_max_partitions {#iceberg_insert_max_partitions} - - - - - -Iceberg 表引擎中,每次插入操作允许的最大分区数量。 - -## iceberg_insert_max_rows_in_data_file {#iceberg_insert_max_rows_in_data_file} - - - - - -插入操作时生成的 Iceberg Parquet 数据文件的最大行数。 - -## iceberg_metadata_compression_method {#iceberg_metadata_compression_method} - - - - - -用于压缩 `.metadata.json` 文件的方法。 - -## iceberg_metadata_log_level {#iceberg_metadata_log_level} - - - - - -控制 Iceberg 表向 system.iceberg_metadata_log 写入元数据日志的级别。 -该设置通常仅在调试时修改。 - -可能的取值: - -- none - 不记录元数据日志。 -- metadata - 根 metadata.json 文件。 -- manifest_list_metadata - 上述所有内容 + 对应该快照的 avro manifest list 中的元数据。 -- manifest_list_entry - 上述所有内容 + avro manifest list 条目。 -- manifest_file_metadata - 上述所有内容 + 遍历到的 avro manifest 文件中的元数据。 -- manifest_file_entry - 上述所有内容 + 遍历到的 avro manifest 文件条目。 - -## iceberg_snapshot_id {#iceberg_snapshot_id} - - - - - -使用指定的快照 ID 查询 Iceberg 表。 - -## iceberg_timestamp_ms {#iceberg_timestamp_ms} - - - - - -使用在特定时间戳对应的快照查询 Iceberg 表。 - -## idle_connection_timeout {#idle_connection_timeout} - - - -在空闲 TCP 连接经过指定秒数后将其关闭的超时时间。 - -可能的值: - -- 非负整数(0 表示在 0 秒后立即关闭)。 - -## ignore_cold_parts_seconds {#ignore_cold_parts_seconds} - - - - - -只在 ClickHouse Cloud 中生效。在新数据分片被预热完成(参见 [cache_populated_by_fetch](merge-tree-settings.md/#cache_populated_by_fetch))或已存在达到指定秒数之前,将其从 SELECT 查询中排除。仅适用于 Replicated-/SharedMergeTree。 - -## ignore_data_skipping_indices - -如果查询会使用指定的数据跳过索引,则忽略这些索引。 - -请看以下示例: - -```sql -CREATE TABLE data -( - key Int, - x Int, - y Int, - INDEX x_idx x TYPE minmax GRANULARITY 1, - INDEX y_idx y TYPE minmax GRANULARITY 1, - INDEX xy_idx (x,y) TYPE minmax GRANULARITY 1 -) -Engine=MergeTree() -ORDER BY key; - -INSERT INTO data VALUES (1, 2, 3); - -SELECT * FROM data; -SELECT * FROM data SETTINGS ignore_data_skipping_indices=''; -- 查询将产生 CANNOT_PARSE_TEXT 错误。 -SELECT * FROM data SETTINGS ignore_data_skipping_indices='x_idx'; -- 正常。 -SELECT * FROM data SETTINGS ignore_data_skipping_indices='na_idx'; -- 正常。 - -SELECT * FROM data WHERE x = 1 AND y = 1 SETTINGS ignore_data_skipping_indices='xy_idx',force_data_skipping_indices='xy_idx' ; -- 查询将产生 INDEX_NOT_USED 错误,因为 xy_idx 被明确忽略。 -SELECT * FROM data WHERE x = 1 AND y = 2 SETTINGS ignore_data_skipping_indices='xy_idx'; -``` - -不忽略任何索引的查询: - -```sql -EXPLAIN indexes = 1 SELECT * FROM data WHERE x = 1 AND y = 2; - -表达式 ((投影 + ORDER BY 之前)) - 过滤 (WHERE) - 从 MergeTree 读取 (default.data) - 索引: - 主键 - 条件:true - 数据部分:1/1 - 颗粒:1/1 - 跳数索引 - 名称:x_idx - 描述:minmax GRANULARITY 1 - 数据部分:0/1 - 颗粒:0/1 - 跳数索引 - 名称:y_idx - 描述:minmax GRANULARITY 1 - 数据部分:0/0 - 颗粒:0/0 - 跳数索引 - 名称:xy_idx - 描述:minmax GRANULARITY 1 - 数据部分:0/0 - 颗粒:0/0 -``` - -忽略 `xy_idx` 索引: - -```sql -EXPLAIN indexes = 1 SELECT * FROM data WHERE x = 1 AND y = 2 SETTINGS ignore_data_skipping_indices='xy_idx'; - -Expression ((Projection + Before ORDER BY)) - Filter (WHERE) - ReadFromMergeTree (default.data) - Indexes: - PrimaryKey - Condition: true - Parts: 1/1 - Granules: 1/1 - Skip - Name: x_idx - Description: minmax GRANULARITY 1 - Parts: 0/1 - Granules: 0/1 - Skip - Name: y_idx - Description: minmax GRANULARITY 1 - Parts: 0/0 - Granules: 0/0 -``` - -适用于 MergeTree 系列的表。 - - -## ignore_drop_queries_probability {#ignore_drop_queries_probability} - - - - - -如果启用,服务器将按指定概率忽略所有 DROP TABLE 查询(对于 Memory 和 JOIN 引擎,会将 DROP 替换为 TRUNCATE)。主要用于测试。 - -## ignore_materialized_views_with_dropped_target_table {#ignore_materialized_views_with_dropped_target_table} - - - - - -在推送到视图时,忽略目标表已被删除的物化视图(MV) - -## ignore_on_cluster_for_replicated_access_entities_queries {#ignore_on_cluster_for_replicated_access_entities_queries} - - - -在处理复制访问实体管理相关查询时忽略 `ON CLUSTER` 子句。 - -## ignore_on_cluster_for_replicated_named_collections_queries {#ignore_on_cluster_for_replicated_named_collections_queries} - - - - - -对已复制命名集合的管理查询忽略 ON CLUSTER 子句。 - -## ignore_on_cluster_for_replicated_udf_queries {#ignore_on_cluster_for_replicated_udf_queries} - - - -在管理复制 UDF 的查询中忽略 ON CLUSTER 子句。 - -## implicit_select {#implicit_select} - - - - - -允许在不写前置 SELECT 关键字的情况下编写简单的 SELECT 查询,从而便于像计算器那样使用,例如 `1 + 2` 也会成为一个合法查询。 - -在 `clickhouse-local` 中该设置默认启用,也可以显式关闭。 - -## implicit_table_at_top_level {#implicit_table_at_top_level} - - - -如果不为空,那么在顶层没有 FROM 的查询将从此表中读取数据,而不是从 system.one 表中读取。 - -这在 clickhouse-local 中用于处理输入数据。 -该设置可以由用户显式设置,但并非为此类用法设计。 - -子查询不受此设置影响(无论是标量子查询、FROM 子查询还是 IN 子查询)。 -UNION、INTERSECT、EXCEPT 链中顶层的 SELECT 会被统一处理,并受此设置影响,而不考虑它们在括号中的分组方式。 -该设置如何影响视图和分布式查询尚未定义。 - -该设置接受一个表名(此时表会从当前数据库中解析),或者一个 'database.table' 形式的限定名称。 -database 和 table 名称都必须是未加引号的——只允许使用简单标识符。 - -## implicit_transaction {#implicit_transaction} - - - - - -如果启用且当前不在事务中,则会将查询封装在一个完整的事务中(BEGIN + COMMIT 或 ROLLBACK)。 - -## inject_random_order_for_select_without_order_by {#inject_random_order_for_select_without_order_by} - - - - - -如果启用,则会向没有 ORDER BY 子句的 SELECT 查询中注入 `ORDER BY rand()`。 -仅在子查询深度 = 0 时生效。子查询以及 INSERT INTO ... SELECT 不受影响。 -如果顶层语句是 UNION,则会分别向所有子查询中独立注入 `ORDER BY rand()`。 -此设置仅适用于测试和开发环境(缺少 ORDER BY 会导致查询结果不确定)。 - -## input_format_parallel_parsing {#input_format_parallel_parsing} - - - -启用或禁用在保留数据顺序的前提下对数据格式进行并行解析。仅支持 [TabSeparated (TSV)](/interfaces/formats/TabSeparated)、[TSKV](/interfaces/formats/TSKV)、[CSV](/interfaces/formats/CSV) 和 [JSONEachRow](/interfaces/formats/JSONEachRow) 格式。 - -可选值: - -- 1 — 启用。 -- 0 — 禁用。 - -## insert_allow_materialized_columns {#insert_allow_materialized_columns} - - - -如果启用该设置,则允许在 INSERT 语句中包含物化列。 - -## insert_deduplicate {#insert_deduplicate} - - - -启用或禁用对 `INSERT` 的数据块去重(适用于 Replicated\* 表)。 - -可选值: - -- 0 — 禁用。 -- 1 — 启用。 - -默认情况下,由 `INSERT` 语句插入到副本表(Replicated\* 表)中的数据块会被去重(参见 [Data Replication](../../engines/table-engines/mergetree-family/replication.md))。 -对于副本表,默认仅对每个分区中最近的 100 个数据块进行去重(参见 [replicated_deduplication_window](merge-tree-settings.md/#replicated_deduplication_window)、[replicated_deduplication_window_seconds](merge-tree-settings.md/#replicated_deduplication_window_seconds))。 -对于非副本表,参见 [non_replicated_deduplication_window](merge-tree-settings.md/#non_replicated_deduplication_window)。 - -## insert_deduplication_token - -该设置允许用户在 MergeTree/ReplicatedMergeTree 中自行定义去重语义。 -例如,通过在每条 INSERT 语句中为该设置提供一个唯一值, -用户可以避免相同的插入数据被视为重复并被去重。 - -可能的取值: - -* 任意字符串 - -只有在 `insert_deduplication_token` 非空时才会用于去重。 - -对于复制表,默认情况下,每个分区仅对最近的 100 次 INSERT 进行去重(参见 [replicated_deduplication_window](merge-tree-settings.md/#replicated_deduplication_window)、[replicated_deduplication_window_seconds](merge-tree-settings.md/#replicated_deduplication_window_seconds))。 -对于非复制表,参见 [non_replicated_deduplication_window](merge-tree-settings.md/#non_replicated_deduplication_window)。 - -:::note -`insert_deduplication_token` 在分区级别生效(与 `insert_deduplication` 校验和相同)。多个分区可以具有相同的 `insert_deduplication_token`。 -::: - -示例: - -```sql -CREATE TABLE test_table -( A Int64 ) -ENGINE = MergeTree -ORDER BY A -SETTINGS non_replicated_deduplication_window = 100; - -INSERT INTO test_table SETTINGS insert_deduplication_token = 'test' VALUES (1); - --- 下一次插入不会去重,因为 insert_deduplication_token 不同 -INSERT INTO test_table SETTINGS insert_deduplication_token = 'test1' VALUES (1); - --- 下一次插入会去重,因为 insert_deduplication_token --- 与之前的某次相同 -INSERT INTO test_table SETTINGS insert_deduplication_token = 'test' VALUES (2); - -SELECT * FROM test_table - -┌─A─┐ -│ 1 │ -└───┘ -┌─A─┐ -│ 1 │ -└───┘ -``` - - -## insert_keeper_fault_injection_probability {#insert_keeper_fault_injection_probability} - - - -在插入操作期间对 keeper 请求注入故障的大致概率。有效取值范围为 [0.0f, 1.0f] - -## insert_keeper_fault_injection_seed {#insert_keeper_fault_injection_seed} - - - -0 - 使用随机种子,否则使用此设置的值 - -## insert_keeper_max_retries - - - - - -此设置用于在向复制 MergeTree 表插入数据时,为 ClickHouse Keeper(或 ZooKeeper)请求设定最大重试次数。仅会对因网络错误、Keeper 会话超时或请求超时而失败的 Keeper 请求进行重试。 - -可能的取值: - -* 正整数。 -* 0 — 禁用重试。 - -云端默认值:`20`。 - -Keeper 请求的重试会在一定超时时间后执行。该超时时间由以下设置控制:`insert_keeper_retry_initial_backoff_ms`、`insert_keeper_retry_max_backoff_ms`。 -第一次重试会在 `insert_keeper_retry_initial_backoff_ms` 指定的超时时间后执行。后续的超时时间将按如下方式计算: - -``` -超时时间 = min(insert_keeper_retry_max_backoff_ms, 上次超时时间 * 2) -``` - -例如,如果 `insert_keeper_retry_initial_backoff_ms=100`、`insert_keeper_retry_max_backoff_ms=10000` 且 `insert_keeper_max_retries=8`,则超时时间将为 `100, 200, 400, 800, 1600, 3200, 6400, 10000`。 - -除了容错性之外,重试机制还旨在提供更好的用户体验——例如,在 Keeper 因升级而重启的情况下,它可以避免在执行 INSERT 时立刻返回错误。 - - -## insert_keeper_retry_initial_backoff_ms {#insert_keeper_retry_initial_backoff_ms} - - - -在执行 INSERT 查询时,重试失败的 Keeper 请求的初始退避时间(毫秒)。 - -可能的取值: - -- 正整数。 -- 0 — 无退避时间 - -## insert_keeper_retry_max_backoff_ms {#insert_keeper_retry_max_backoff_ms} - - - -在执行 INSERT 查询期间,对失败的 Keeper 请求进行重试的最大超时时间(毫秒)。 - -可能的取值: - -- 正整数。 -- 0 — 最大超时时间不受限制 - -## insert_null_as_default {#insert_null_as_default} - - - -启用或禁用在向非[Nullable](/sql-reference/data-types/nullable) 数据类型的列中插入值时,使用[默认值](/sql-reference/statements/create/table#default_values)替代[NULL](/sql-reference/syntax#null)。 -如果列类型为非 Nullable 且此设置被禁用,则插入 `NULL` 会引发异常。若列类型为 Nullable,则无论此设置为何值,`NULL` 值都会原样插入。 - -此设置适用于 [INSERT ... SELECT](../../sql-reference/statements/insert-into.md/#inserting-the-results-of-select) 查询。请注意,`SELECT` 子查询可以与 `UNION ALL` 子句进行拼接。 - -可能的取值: - -- 0 — 向非 Nullable 列插入 `NULL` 会引发异常。 -- 1 — 插入列的默认值来替代 `NULL`。 - -## insert_quorum {#insert_quorum} - - - -:::note -此设置不适用于 SharedMergeTree,更多信息参见 [SharedMergeTree consistency](/cloud/reference/shared-merge-tree#consistency)。 -::: - -启用 quorum 写入。 - -- 如果 `insert_quorum < 2`,则禁用 quorum 写入。 -- 如果 `insert_quorum >= 2`,则启用 quorum 写入。 -- 如果 `insert_quorum = 'auto'`,则使用多数副本数(`number_of_replicas / 2 + 1`)作为 quorum 大小。 - -Quorum 写入 - -仅当 ClickHouse 能够在 `insert_quorum_timeout` 超时时间内成功将数据写入 `insert_quorum` 个副本时,`INSERT` 才会成功。如果由于任何原因,成功写入的副本数量未达到 `insert_quorum`,则该写入被视为失败,ClickHouse 会从已写入数据的所有副本中删除已插入的数据块。 - -当 `insert_quorum_parallel` 被禁用时,quorum 中的所有副本都是一致的,即它们包含所有之前 `INSERT` 查询的数据(`INSERT` 序列被线性化)。在使用 `insert_quorum` 写入数据且 `insert_quorum_parallel` 被禁用时,可以通过 [select_sequential_consistency](#select_sequential_consistency) 为 `SELECT` 查询启用顺序一致性。 - -在以下情况下,ClickHouse 会抛出异常: - -- 查询执行时可用副本数量小于 `insert_quorum`。 -- 当 `insert_quorum_parallel` 被禁用,且在前一个数据块尚未在副本的 `insert_quorum` 上完成插入时尝试写入数据。如果用户在带有 `insert_quorum` 的上一个 `INSERT` 完成之前,就尝试对同一张表执行另一个 `INSERT` 查询,就可能出现这种情况。 - -另请参见: - -- [insert_quorum_timeout](#insert_quorum_timeout) -- [insert_quorum_parallel](#insert_quorum_parallel) -- [select_sequential_consistency](#select_sequential_consistency) - -## insert_quorum_parallel {#insert_quorum_parallel} - - - - - -:::note -此设置不适用于 SharedMergeTree,更多信息请参阅 [SharedMergeTree 一致性](/cloud/reference/shared-merge-tree#consistency)。 -::: - -启用或禁用仲裁 `INSERT` 查询的并行执行。启用时,在之前的查询尚未完成时可以发送新的 `INSERT` 查询。禁用时,对同一张表的额外写入将被拒绝。 - -可能的取值: - -- 0 — 禁用。 -- 1 — 启用。 - -另请参阅: - -- [insert_quorum](#insert_quorum) -- [insert_quorum_timeout](#insert_quorum_timeout) -- [select_sequential_consistency](#select_sequential_consistency) - -## insert_quorum_timeout {#insert_quorum_timeout} - - - -以毫秒为单位设置写入仲裁的超时时间。如果超过该超时时间且尚未完成写入,ClickHouse 将抛出异常,客户端必须重新执行查询,将相同的数据块写入同一副本或任意其他副本。 - -另请参阅: - -- [insert_quorum](#insert_quorum) -- [insert_quorum_parallel](#insert_quorum_parallel) -- [select_sequential_consistency](#select_sequential_consistency) - -## insert_shard_id - - - -如果不为 `0`,则指定要同步插入数据的 [Distributed](/engines/table-engines/special/distributed) 表的分片。 - -如果 `insert_shard_id` 的值不正确,服务器将抛出异常。 - -要获取 `requested_cluster` 上的分片数量,可以检查服务器配置,或使用如下查询语句: - -```sql -SELECT uniq(shard_num) FROM system.clusters WHERE cluster = 'requested_cluster'; -``` - -可能的取值: - -* 0 — 禁用。 -* 从 `1` 到对应 [Distributed](/engines/table-engines/special/distributed) 表的 `shards_num` 之间的任意数值。 - -**示例** - -查询: - -```sql -CREATE TABLE x AS system.numbers ENGINE = MergeTree ORDER BY number; -CREATE TABLE x_dist AS x ENGINE = Distributed('test_cluster_two_shards_localhost', currentDatabase(), x); -INSERT INTO x_dist SELECT * FROM numbers(5) SETTINGS insert_shard_id = 1; -SELECT * FROM x_dist ORDER BY number ASC; -``` - -结果: - -```text -┌─number─┐ -│ 0 │ -│ 0 │ -│ 1 │ -│ 1 │ -│ 2 │ -│ 2 │ -│ 3 │ -│ 3 │ -│ 4 │ -│ 4 │ -└────────┘ -``` - - -## interactive_delay {#interactive_delay} - - - -以微秒为单位的时间间隔,用于检查查询执行是否已被取消,并发送进度信息。 - -## intersect_default_mode {#intersect_default_mode} - - - -设置 INTERSECT 查询的默认模式。可选值:空字符串、'ALL'、'DISTINCT'。若留空,则未显式指定模式的查询会抛出异常。 - -## jemalloc_collect_profile_samples_in_trace_log {#jemalloc_collect_profile_samples_in_trace_log} - - - - - -在跟踪日志中收集 jemalloc 分配和释放操作的采样数据。 - -## jemalloc_enable_profiler {#jemalloc_enable_profiler} - - - - - -为查询启用 jemalloc 性能分析器。Jemalloc 将对内存分配进行采样,并记录被采样分配的所有释放操作。 -可以使用 SYSTEM JEMALLOC FLUSH PROFILE 刷新分析数据,以用于内存分配分析。 -采样数据也可以通过配置 jemalloc_collect_global_profile_samples_in_trace_log 或查询设置 jemalloc_collect_profile_samples_in_trace_log 存储到 system.trace_log 中。 -参见 [Allocation Profiling](/operations/allocation-profiling)。 - -## join_algorithm {#join_algorithm} - - - - - -指定使用哪种 [JOIN](../../sql-reference/statements/select/join.md) 算法。 - -可以指定多个算法,针对特定查询会根据 join 的种类/严格性以及表引擎,从中选择一个可用的算法。 - -可选值: - -- grace_hash - -使用 [Grace hash join](https://en.wikipedia.org/wiki/Hash_join#Grace_hash_join)。Grace hash 提供了一种在限制内存使用的同时,仍能高效执行复杂 join 的算法选项。 - -Grace join 的第一阶段会读取右表,并根据键列的哈希值将其拆分为 N 个 bucket(初始时 N 为 `grace_hash_join_initial_buckets`)。拆分方式可以确保每个 bucket 都能独立处理。来自第一个 bucket 的行会被加入内存中的哈希表,而其他 bucket 的数据会被写入磁盘。如果哈希表增长超过内存限制(例如由 [`max_bytes_in_join`](/operations/settings/settings#max_bytes_in_join) 设置的限制),则会增加 bucket 数量并重新分配每行所属的 bucket。任何不属于当前 bucket 的行都会被写出并重新分配。 - -支持 `INNER/LEFT/RIGHT/FULL ALL/ANY JOIN`。 - -- hash - -使用 [Hash join 算法](https://en.wikipedia.org/wiki/Hash_join)。这是最通用的实现,支持所有 join 种类与严格性的组合,以及在 `JOIN ON` 部分用 `OR` 连接的多个 join 键。 - -当使用 `hash` 算法时,`JOIN` 的右侧会被加载到 RAM 中。 - -- parallel_hash - -`hash` join 的一种变体,它将数据拆分为多个 bucket,并并发构建多个哈希表,而不是单个哈希表,以加速这一过程。 - -当使用 `parallel_hash` 算法时,`JOIN` 的右侧会被加载到 RAM 中。 - -- partial_merge - -[排序合并算法](https://en.wikipedia.org/wiki/Sort-merge_join) 的一种变体,其中只有右表被完全排序。 - -`RIGHT JOIN` 和 `FULL JOIN` 仅在 `ALL` 严格性下受支持(不支持 `SEMI`、`ANTI`、`ANY` 和 `ASOF`)。 - -当使用 `partial_merge` 算法时,ClickHouse 会对数据进行排序并写入磁盘。ClickHouse 中的 `partial_merge` 算法与经典实现略有不同。首先,ClickHouse 按 join 键以块为单位对右表进行排序,并为已排序的块创建 min-max 索引。然后,它按 `join key` 对左表的部分数据进行排序,并与右表进行 join。min-max 索引同样用于跳过不需要的右表数据块。 - -- direct - -当右表的存储支持键值请求时,可以使用该算法。 - -`direct` 算法会使用左表中的行作为键,在右表中执行查找。它仅由 [Dictionary](/engines/table-engines/special/dictionary) 或 [EmbeddedRocksDB](../../engines/table-engines/integrations/embedded-rocksdb.md) 等特殊存储支持,并且只支持 `LEFT` 和 `INNER` JOIN。 - -- auto - -当设置为 `auto` 时,会首先尝试 `hash` join,如果违反内存限制,则在运行时切换到其他算法。 - -- full_sorting_merge - -[排序合并算法](https://en.wikipedia.org/wiki/Sort-merge_join),在 join 之前对参与 join 的表进行完全排序。 - -- prefer_partial_merge - -ClickHouse 会在可能的情况下始终尝试使用 `partial_merge` join,否则使用 `hash`。*已弃用*,等价于 `partial_merge,hash`。 - -- default (deprecated) - -历史遗留值,请不要再使用。 -等价于 `direct,hash`,即按顺序尝试 direct join 和 hash join。 - -## join_any_take_last_row {#join_any_take_last_row} - - - -更改使用 `ANY` 严格度的 `JOIN` 操作的行为方式。 - -:::note -此设置仅适用于 [Join](../../engines/table-engines/special/join.md) 引擎表上的 `JOIN` 操作。 -::: - -可能的取值: - -- 0 — 如果右表中存在多行匹配记录,则只与找到的第一行进行关联。 -- 1 — 如果右表中存在多行匹配记录,则只与找到的最后一行进行关联。 - -另请参阅: - -- [JOIN 子句](/sql-reference/statements/select/join) -- [Join 表引擎](../../engines/table-engines/special/join.md) -- [join_default_strictness](#join_default_strictness) - -## join_default_strictness {#join_default_strictness} - - - -为 [JOIN 子句](/sql-reference/statements/select/join) 设置默认严格性。 - -可能的取值: - -- `ALL` — 如果右表中有多行匹配行,ClickHouse 会从这些匹配行中创建一个[笛卡尔积](https://en.wikipedia.org/wiki/Cartesian_product)。这是标准 SQL 中 `JOIN` 的常规行为。 -- `ANY` — 如果右表中有多行匹配行,则只连接找到的第一行。如果右表中只有一行匹配行,则 `ANY` 和 `ALL` 的结果相同。 -- `ASOF` — 用于在存在不确定匹配的序列之间进行连接。 -- `Empty string` — 如果在查询中未指定 `ALL` 或 `ANY`,ClickHouse 会抛出异常。 - -## join_on_disk_max_files_to_merge {#join_on_disk_max_files_to_merge} - - - -限制在磁盘上执行的 MergeJoin 操作中,并行排序时允许的文件数量。 - -此设置值越大,占用的 RAM 越多,但所需的磁盘 I/O 越少。 - -可能的取值: - -- 从 2 开始的任意正整数。 - -## join_output_by_rowlist_perkey_rows_threshold {#join_output_by_rowlist_perkey_rows_threshold} - - - - - -右表中每个键对应的平均行数下限,用于决定在哈希连接中是否按行列表方式输出。 - -## join_overflow_mode {#join_overflow_mode} - - - -定义 ClickHouse 在达到以下任一 JOIN 限制时所执行的操作: - -- [max_bytes_in_join](/operations/settings/settings#max_bytes_in_join) -- [max_rows_in_join](/operations/settings/settings#max_rows_in_join) - -可选值: - -- `THROW` — ClickHouse 抛出异常并中断操作。 -- `BREAK` — ClickHouse 中断操作但不抛出异常。 - -默认值:`THROW`。 - -**另请参阅** - -- [JOIN 子句](/sql-reference/statements/select/join) -- [JOIN 表引擎](/engines/table-engines/special/join) - -## join_runtime_bloom_filter_bytes {#join_runtime_bloom_filter_bytes} - - - - - - - -用作 JOIN 运行时过滤器的 Bloom 过滤器大小(以字节为单位)(参见 `enable_join_runtime_filters` 设置)。 - -## join_runtime_bloom_filter_hash_functions {#join_runtime_bloom_filter_hash_functions} - - - - - - - -作为 JOIN 运行时过滤器使用的 Bloom 过滤器中哈希函数的数量(参见 `enable_join_runtime_filters` 设置)。 - -## join_runtime_filter_exact_values_limit {#join_runtime_filter_exact_values_limit} - - - - - - - -运行时过滤器中按原样存储在集合中的元素最大数量。当超过该阈值时,将改为使用 Bloom 过滤器。 - -## join_to_sort_maximum_table_rows {#join_to_sort_maximum_table_rows} - - - - - - - -在 LEFT JOIN 或 INNER JOIN 中,用于决定是否按键对右表重新排序的右表最大行数。 - -## join_to_sort_minimum_perkey_rows {#join_to_sort_minimum_perkey_rows} - - - - - - - -用于确定在 LEFT 或 INNER JOIN 中是否按键对右表重新排序(rerange)的右表每个键对应的平均行数下限。该设置可确保不会对键较为稀疏的右表应用该优化。 - -## join_use_nulls {#join_use_nulls} - - - -设置 [JOIN](../../sql-reference/statements/select/join.md) 的行为类型。在合并表时,可能会出现空单元格。ClickHouse 会根据此设置以不同方式填充这些单元格。 - -可能的取值: - -- 0 — 使用对应字段类型的默认值填充空单元格。 -- 1 — `JOIN` 的行为与标准 SQL 相同。对应字段的类型会被转换为 [Nullable](/sql-reference/data-types/nullable),并使用 [NULL](/sql-reference/syntax) 填充空单元格。 - -## joined_block_split_single_row {#joined_block_split_single_row} - - - - - -允许按对应于左表单行的结果行对哈希连接结果进行分块。 -在左表存在在右表中有大量匹配的行时,这可以降低内存使用,但可能会增加 CPU 使用。 -请注意,`max_joined_block_size_rows != 0` 是此设置生效的前提条件。 -将 `max_joined_block_size_bytes` 与此设置结合使用,有助于在数据倾斜、存在某些在右表中具有大量匹配的大行时避免过度的内存使用。 - -## joined_subquery_requires_alias {#joined_subquery_requires_alias} - - - -要求 JOIN 中的子查询和表函数必须使用别名,以确保名称限定正确。 - -## kafka_disable_num_consumers_limit {#kafka_disable_num_consumers_limit} - - - -禁用依赖于可用 CPU 核心数量的 kafka_num_consumers 限制。 - -## kafka_max_wait_ms {#kafka_max_wait_ms} - - - -在重试前,从 [Kafka](/engines/table-engines/integrations/kafka) 读取消息所等待的时间(毫秒)。 - -可能的取值: - -- 正整数。 -- 0 — 无限超时时间。 - -另请参阅: - -- [Apache Kafka](https://kafka.apache.org/) - -## keeper_map_strict_mode {#keeper_map_strict_mode} - - - -在 KeeperMap 上执行操作时强制进行额外校验。例如,当插入已存在的键时抛出异常。 - -## keeper_max_retries {#keeper_max_retries} - - - - - -Keeper 常规操作的最大重试次数 - -## keeper_retry_initial_backoff_ms {#keeper_retry_initial_backoff_ms} - - - - - -通用 Keeper 操作的初始退避超时时间 - -## keeper_retry_max_backoff_ms {#keeper_retry_max_backoff_ms} - - - - - -通用 Keeper 操作的最大退避超时时间 - -## least_greatest_legacy_null_behavior {#least_greatest_legacy_null_behavior} - - - - - -启用后,当其任一参数为 NULL 时,`least` 和 `greatest` 函数将返回 NULL。 - -## legacy_column_name_of_tuple_literal {#legacy_column_name_of_tuple_literal} - - - - - -在列名中列出大型 tuple 字面量中各元素的名称,而不是使用哈希值。此设置仅出于兼容性原因而存在。在将集群从低于 21.7 的版本滚动升级到更高版本时,将其设置为 'true' 才有意义。 - -## lightweight_delete_mode {#lightweight_delete_mode} - - - - - -作为轻量级删除的一部分执行的内部更新查询模式。 - -可能的取值: - -- `alter_update` - 运行会创建重量级变更(mutation)的 `ALTER UPDATE` 查询。 -- `lightweight_update` - 如果可能则运行轻量级更新,否则运行 `ALTER UPDATE`。 -- `lightweight_update_force` - 如果可能则运行轻量级更新,否则抛出异常。 - -## lightweight_deletes_sync {#lightweight_deletes_sync} - - - - - -与 [`mutations_sync`](#mutations_sync) 相同,但仅控制轻量级删除的执行。 - -可能的取值: - -| Value | Description | -|-------|-------------------------------------------------------------------------------------------------------------------------------------------------------| -| `0` | 变更操作异步执行。 | -| `1` | 查询会等待当前服务器上的轻量级删除完成。 | -| `2` | 查询会等待所有副本(如果存在)上的轻量级删除完成。 | -| `3` | 查询只会等待活跃副本完成轻量级删除。仅在 `SharedMergeTree` 中受支持。对于 `ReplicatedMergeTree`,其行为与 `mutations_sync = 2` 相同。 | - -**另请参阅** - -- [ALTER 查询的同步性](../../sql-reference/statements/alter/index.md/#synchronicity-of-alter-queries) -- [变更(Mutations)](../../sql-reference/statements/alter/index.md/#mutations) - -## limit {#limit} - - - -设置从查询结果中返回的最大行数。它会调整 [LIMIT](/sql-reference/statements/select/limit) 子句所设置的值,从而保证查询中指定的 limit 不会超过此设置的值。 - -可能的取值: - -- 0 — 行数不受限制。 -- 正整数。 - -## load_balancing {#load_balancing} - - - -指定在分布式查询处理中用于选择副本的算法。 - -ClickHouse 支持以下副本选择算法: - -- [Random(随机)](#load_balancing-random)(默认) -- [Nearest hostname(最近主机名)](#load_balancing-nearest_hostname) -- [Hostname levenshtein distance(主机名 Levenshtein 距离)](#load_balancing-hostname_levenshtein_distance) -- [In order(按顺序)](#load_balancing-in_order) -- [First or random(首个或随机)](#load_balancing-first_or_random) -- [Round robin(轮询)](#load_balancing-round_robin) - -另请参阅: - -- [distributed_replica_max_ignored_errors](#distributed_replica_max_ignored_errors) - -### 随机(默认) - -```sql -load_balancing = random -``` - -每个副本都会统计自身的错误次数。查询会发送到错误次数最少的副本;如果有多个副本错误次数同为最少,则会发送到其中任意一个。 - -缺点:未考虑服务器之间的距离;如果各副本中的数据不同,你得到的结果数据也会不同。 - - -### 最近的主机名 - -```sql -load_balancing = nearest_hostname -``` - -每个副本都会统计其自身的错误数量。每 5 分钟,错误数量会被整体除以 2 并取整。由此,错误数量通过指数平滑的方式近似反映最近一段时间的情况。如果存在一个错误数量最小的副本(即其他副本上最近发生过错误),查询会被发送到该副本。如果有多个副本具有相同的最小错误数量,则查询会发送到与配置文件中服务器主机名最相似的那个副本(按在相同位置上字符不同的个数来比较,比较长度取两个主机名的最小值)。 - -例如,example01-01-1 和 example01-01-2 只在一个位置上不同,而 example01-01-1 和 example01-02-2 在两个位置上不同。 -这种方法看起来可能很原始,但它不需要任何关于网络拓扑的外部数据,也不需要比较 IP 地址,而对我们的 IPv6 地址来说,后者会很复杂。 - -因此,如果存在等价的副本,就会优先选择主机名上最接近的那个。 -我们还可以假设,在没有故障的情况下,当查询发送到同一台服务器时,分布式查询也会发送到相同的服务器。这样即使不同副本上存放了不同的数据,查询也会在大多数情况下返回相同的结果。 - - -### 主机名的 Levenshtein 距离 - -```sql -load_balancing = hostname_levenshtein_distance -``` - -与 `nearest_hostname` 类似,但它使用 [Levenshtein 距离](https://en.wikipedia.org/wiki/Levenshtein_distance) 来比较主机名。例如: - -```text -example-clickhouse-0-0 ample-clickhouse-0-0 -1 - -example-clickhouse-0-0 example-clickhouse-1-10 -2 - -example-clickhouse-0-0 example-clickhouse-12-0 -3 -``` - - -### 按顺序执行 - -```sql -load_balancing = in_order -``` - -具有相同错误次数的副本将按照它们在配置中指定的顺序进行访问。 -当你确切知道哪个副本是首选时,适合采用这种方法。 - - -### 第一个或随机 - -```sql -load_balancing = first_or_random -``` - -该算法会选择集合中的第一个副本,如果第一个副本不可用,则会随机选择一个副本。在跨副本拓扑结构中效果良好,但在其他配置中几乎没有用处。 - -`first_or_random` 算法解决了 `in_order` 算法的问题。使用 `in_order` 时,如果某个副本宕机,下一个副本会承受双倍负载,而其余副本仍然只处理正常水平的流量。使用 `first_or_random` 算法时,负载会在仍然可用的副本之间均匀分布。 - -可以通过设置 `load_balancing_first_offset` 显式指定哪个副本是第一个副本。这样可以在副本之间更灵活地重新平衡查询工作负载。 - - -### 轮询 - -```sql -load_balancing = round_robin -``` - -该算法对具有相同错误次数的副本使用轮询策略(只考虑使用 `round_robin` 策略的查询)。 - - -## load_balancing_first_offset {#load_balancing_first_offset} - - - -在使用 `FIRST_OR_RANDOM` 负载均衡策略时,优先发送查询的副本序号。 - -## load_marks_asynchronously {#load_marks_asynchronously} - - - -异步加载 MergeTree 索引标记 - -## local_filesystem_read_method {#local_filesystem_read_method} - - - -从本地文件系统读取数据的方法,可选值包括:read、pread、mmap、io_uring、pread_threadpool。 - -`io_uring` 方法目前为实验性质,在存在并发读写时,不适用于 Log、TinyLog、StripeLog、File、Set、Join 以及其他使用可追加文件的表。 -即使你在互联网上读到许多关于 `io_uring` 的文章,也不要被这些内容所误导。除非是在存在大量小 IO 请求的场景,否则它并不是更好的文件读取方式,而这并不是 ClickHouse 的典型使用场景。因此,没有任何理由启用 `io_uring`。 - -## local_filesystem_read_prefetch {#local_filesystem_read_prefetch} - - - -是否在从本地文件系统读取数据时使用预取。 - -## lock_acquire_timeout {#lock_acquire_timeout} - - - -定义锁定请求在失败前等待的秒数。 - -锁定超时时间用于在对表执行读/写操作时防止死锁。当超时时间到期且锁定请求失败时,ClickHouse 服务器会抛出异常 "Locking attempt timed out! Possible deadlock avoided. Client should retry.",错误码为 `DEADLOCK_AVOIDED`。 - -可能的取值: - -- 正整数(单位为秒)。 -- 0 — 不启用锁定超时时间。 - -## log_comment - -指定 [system.query_log](../system-tables/query_log.md) 表中 `log_comment` 字段的值,以及服务器日志中的注释文本。 - -可用于提高服务器日志的可读性。此外,还可以在运行 [clickhouse-test](../../development/tests.md) 之后,从 `system.query_log` 中筛选与测试相关的查询。 - -可能的取值: - -* 任意不超过 [max_query_size](#max_query_size) 的字符串。如果超过 max_query_size,服务器会抛出异常。 - -**示例** - -查询: - -```sql -SET log_comment = 'log_comment test', log_queries = 1; -SELECT 1; -SYSTEM FLUSH LOGS; -SELECT type, query FROM system.query_log WHERE log_comment = 'log_comment test' AND event_date >= yesterday() ORDER BY event_time DESC LIMIT 2; -``` - -结果: - -```text -┌─type────────┬─query─────┐ -│ QueryStart │ SELECT 1; │ -│ QueryFinish │ SELECT 1; │ -└─────────────┴───────────┘ -``` - - -## log_formatted_queries {#log_formatted_queries} - - - -允许将格式化后的查询写入 [system.query_log](../../operations/system-tables/query_log.md) 系统表(为 [system.query_log](../../operations/system-tables/query_log.md) 表中的 `formatted_query` 列赋值)。 - -可能的取值: - -- 0 — 不在系统表中记录格式化后的查询。 -- 1 — 在系统表中记录格式化后的查询。 - -## log_processors_profiles {#log_processors_profiles} - - - - - -将处理器在执行和等待数据期间消耗的时间写入 `system.processors_profile_log` 表。 - -另请参阅: - -- [`system.processors_profile_log`](../../operations/system-tables/processors_profile_log.md) -- [`EXPLAIN PIPELINE`](../../sql-reference/statements/explain.md/#explain-pipeline) - -## log_profile_events {#log_profile_events} - - - -将查询性能统计数据记录到 `query_log`、`query_thread_log` 和 `query_views_log` 中。 - -## log_queries - - - -配置查询日志记录。 - -使用此配置发送到 ClickHouse 的查询会根据 [query_log](../../operations/server-configuration-parameters/settings.md/#query_log) 服务器配置参数中的规则进行记录。 - -示例: - -```text -log_queries=1 -``` - - -## log_queries_cut_to_length {#log_queries_cut_to_length} - - - -如果查询长度(以字节为单位)大于指定阈值,则在将查询写入查询日志时对其进行截断。同时限制在普通文本日志中输出的查询长度。 - -## log_queries_min_query_duration_ms {#log_queries_min_query_duration_ms} - - - -如果启用(值非零),执行时间短于该设置值的查询将不会被记录到日志中(可以将其类比为 [MySQL 慢查询日志](https://dev.mysql.com/doc/refman/5.7/slow-query-log.html) 中的 `long_query_time`),这基本意味着你在以下表中找不到这些查询: - -- `system.query_log` -- `system.query_thread_log` - -只有以下类型的查询会被写入日志: - -- `QUERY_FINISH` -- `EXCEPTION_WHILE_PROCESSING` - -- 类型:毫秒 -- 默认值:0(记录任意查询) - -## log_queries_min_type - - - -写入 `query_log` 的最小记录类型。 - -可能的取值: - -* `QUERY_START` (`=1`) -* `QUERY_FINISH` (`=2`) -* `EXCEPTION_BEFORE_START` (`=3`) -* `EXCEPTION_WHILE_PROCESSING` (`=4`) - -可用于限制哪些记录会写入 `query_log`。例如,如果你只关心错误,则可以使用 `EXCEPTION_WHILE_PROCESSING`: - -```text -log_queries_min_type='EXCEPTION_WHILE_PROCESSING' -``` - - -## log_queries_probability {#log_queries_probability} - - - -允许仅按指定概率随机选取部分查询,并将其写入 [query_log](../../operations/system-tables/query_log.md)、[query_thread_log](../../operations/system-tables/query_thread_log.md) 和 [query_views_log](../../operations/system-tables/query_views_log.md) 系统表。这有助于在每秒查询量很大时降低负载。 - -可能的取值: - -- 0 — 查询不会记录到系统表中。 -- 区间 [0..1] 内的正浮点数。例如,如果设置值为 `0.5`,大约有一半的查询会记录到系统表中。 -- 1 — 所有查询都会记录到系统表中。 - -## log_query_settings {#log_query_settings} - - - -将查询设置记录到 `query_log` 表和 OpenTelemetry span 日志中。 - -## log_query_threads - - - -配置查询线程日志记录。 - -查询线程会记录到 [system.query_thread_log](../../operations/system-tables/query_thread_log.md) 表中。此设置仅在 [log_queries](#log_queries) 为 true 时生效。按此配置由 ClickHouse 运行的查询线程,将根据 [query_thread_log](/operations/server-configuration-parameters/settings#query_thread_log) 服务器配置参数中的规则进行记录。 - -可能的取值: - -* 0 — 禁用。 -* 1 — 启用。 - -**示例** - -```text -log_query_threads=1 -``` - - -## log_query_views - - - -启用查询视图日志记录。 - -当启用此设置时,ClickHouse 所运行的查询如果包含关联视图(物化视图或实时视图),则会将这些视图记录到 [query_views_log](/operations/server-configuration-parameters/settings#query_views_log) 服务器配置参数中。 - -示例: - -```text -log_query_views=1 -``` - - -## low_cardinality_allow_in_native_format {#low_cardinality_allow_in_native_format} - - - -允许或限制在 [Native](/interfaces/formats/Native) 格式中使用 [LowCardinality](../../sql-reference/data-types/lowcardinality.md) 数据类型。 - -如果限制使用 `LowCardinality`,ClickHouse 服务器会在执行 `SELECT` 查询时将 `LowCardinality` 类型的列转换为普通列,在执行 `INSERT` 查询时将普通列转换为 `LowCardinality` 类型的列。 - -此设置主要面向不支持 `LowCardinality` 数据类型的第三方客户端。 - -可能的取值: - -- 1 — 不限制使用 `LowCardinality`。 -- 0 — 限制使用 `LowCardinality`。 - -## low_cardinality_max_dictionary_size {#low_cardinality_max_dictionary_size} - - - -设置可写入存储文件系统的、用于 [LowCardinality](../../sql-reference/data-types/lowcardinality.md) 数据类型的共享全局字典的最大行数。该设置可防止在字典无限增长的情况下出现内存(RAM)问题。所有由于受最大字典大小限制而无法被编码的数据,ClickHouse 会以普通方式写入。 - -可能的取值: - -- 任意正整数。 - -## low_cardinality_use_single_dictionary_for_part {#low_cardinality_use_single_dictionary_for_part} - - - -开启或关闭为每个数据分片仅使用单个字典的功能。 - -默认情况下,ClickHouse 服务器会监控字典的大小,如果某个字典溢出,服务器会开始写入下一个字典。要禁止创建多个字典,请将 `low_cardinality_use_single_dictionary_for_part` 设置为 `1`。 - -可能的取值: - -- 1 — 禁止为数据分片创建多个字典。 -- 0 — 允许为数据分片创建多个字典。 - -## low_priority_query_wait_time_ms {#low_priority_query_wait_time_ms} - - - - - - - -当启用了查询优先级机制(参见设置 `priority`)时,低优先级查询会等待高优先级查询完成。本设置用于指定等待时长。 - -## make_distributed_plan {#make_distributed_plan} - - - - - - - -生成分布式查询计划。 - -## materialize_skip_indexes_on_insert {#materialize_skip_indexes_on_insert} - - - - - -启用此设置时,`INSERT` 语句会构建并存储跳过索引(skip index)。若禁用,则跳过索引只会在[合并期间](merge-tree-settings.md/#materialize_skip_indexes_on_merge)或通过显式执行 [MATERIALIZE INDEX](/sql-reference/statements/alter/skipping-index.md/#materialize-index) 时构建并存储。 - -另请参阅 [exclude_materialize_skip_indexes_on_insert](#exclude_materialize_skip_indexes_on_insert)。 - -## materialize_statistics_on_insert {#materialize_statistics_on_insert} - - - - - -启用该设置时,`INSERT` 语句会生成并写入统计信息。禁用时,统计信息会在合并过程中生成并存储,或通过显式执行 `MATERIALIZE STATISTICS` 来生成并存储。 - -## materialize_ttl_after_modify {#materialize_ttl_after_modify} - - - -在执行 ALTER MODIFY TTL 查询后,为旧数据应用 TTL。 - -## materialized_views_ignore_errors {#materialized_views_ignore_errors} - - - -允许在处理 MATERIALIZED VIEW 时忽略错误,并且无论物化视图如何,都将原始数据块写入表中 - -## materialized_views_squash_parallel_inserts {#materialized_views_squash_parallel_inserts} - - - - - -将单个 INSERT 查询写入物化视图目标表的并行插入合并为一个,以减少生成的数据片段数量。 -如果设置为 false 且启用了 `parallel_view_processing`,则该 INSERT 查询会在目标表中为每个 `max_insert_thread` 生成一个数据片段。 - -## max_analyze_depth {#max_analyze_depth} - - - -解释器执行分析的最大次数。 - -## max_ast_depth {#max_ast_depth} - - - -查询语法树允许的最大嵌套深度。如果超出该值,将抛出异常。 - -:::note -目前,这一限制不会在解析期间检查,而只会在完成查询解析后才进行检查。 -这意味着在解析过程中仍可能创建过深的语法树,但该查询最终会失败。 -::: - -## max_ast_elements {#max_ast_elements} - - - -查询抽象语法树中允许的最大元素数量。如果超出该值,将抛出异常。 - -:::note -目前,该限制不会在解析期间检查,而只会在查询解析完成后检查。 -这意味着在解析过程中仍然可能构建过深的语法树,但查询最终会失败。 -::: - -## max_autoincrement_series {#max_autoincrement_series} - - - - - -`generateSerialID` 函数可创建的序列数量上限。 - -由于每个序列都对应 Keeper 中的一个节点,建议它们的数量不要超过几百万个。 - -## max_backup_bandwidth {#max_backup_bandwidth} - - - -服务器上单个备份的最大读取速率(以每秒字节数计)。0 表示无限制。 - -## max_block_size {#max_block_size} - - - -在 ClickHouse 中,数据按块(block)进行处理,每个块由若干列的片段组成。对单个块的内部处理循环是高效的,但在处理每个块时仍然会产生不可忽略的开销。 - -`max_block_size` 设置表示从表中加载数据时,单个块中建议包含的最大行数。从表中并不总是会加载大小为 `max_block_size` 的块:如果 ClickHouse 确定需要读取的数据量更少,则会处理更小的块。 - -块大小不应过小,以避免在处理每个块时产生明显的开销;也不应过大,以保证带有 LIMIT 子句的查询在处理完第一个块后能够快速返回结果。在设置 `max_block_size` 时,应尽量在多线程读取大量列时避免消耗过多内存,并尽可能保留一定程度的缓存局部性。 - -## max_bytes_before_external_group_by {#max_bytes_before_external_group_by} - - - -云端默认值:每个副本可用内存的一半。 - -启用或禁用在外部存储中执行 `GROUP BY` 子句。 -(参见 [在外部存储中执行 GROUP BY](/sql-reference/statements/select/group-by#group-by-in-external-memory)) - -可能的取值: - -- 单个 [GROUP BY](/sql-reference/statements/select/group-by) 操作可使用的最大 RAM 大小(以字节为单位)。 -- `0` — 禁用在外部存储中执行 `GROUP BY`。 - -:::note -如果 GROUP BY 操作期间的内存使用量(以字节计)超过此阈值, -则会激活“外部聚合(external aggregation)”模式(将数据溢写到磁盘)。 - -推荐值为系统可用内存的一半。 -::: - -## max_bytes_before_external_sort {#max_bytes_before_external_sort} - - - -云默认值:每个副本可用内存的一半。 - -启用或禁用在外部内存中执行 `ORDER BY` 子句。参见 [ORDER BY Implementation Details](../../sql-reference/statements/select/order-by.md#implementation-details)。 -如果在执行 ORDER BY 操作时的内存使用量(以字节为单位)超过该阈值,则会激活“外部排序”模式(将数据溢写到磁盘)。 - -可选值: - -- 单个 [ORDER BY](../../sql-reference/statements/select/order-by.md) 操作可以使用的最大 RAM 容量(字节数)。 - 建议值为系统可用内存的一半 -- `0` — 禁用在外部内存中执行 `ORDER BY`。 - -## max_bytes_before_remerge_sort {#max_bytes_before_remerge_sort} - - - -在使用包含 LIMIT 的 ORDER BY 子句时,当内存使用量超过指定阈值时,将在最终合并前执行额外的块合并步骤,仅保留前 LIMIT 行。 - -## max_bytes_in_distinct {#max_bytes_in_distinct} - - - -在使用 DISTINCT 时,内存中哈希表状态(以未压缩字节计)的最大大小。 - -## max_bytes_in_join {#max_bytes_in_join} - - - -用于表连接时所使用哈希表的最大大小(以字节为单位)。 - -此设置适用于 [SELECT ... JOIN](/sql-reference/statements/select/join) -操作以及 [Join 表引擎](/engines/table-engines/special/join)。 - -如果查询包含 JOIN,ClickHouse 会针对每个中间结果检查此设置。 - -当达到限制时,ClickHouse 可以采取不同的操作。请使用 -[join_overflow_mode](/operations/settings/settings#join_overflow_mode) 设置来选择相应操作。 - -可能的取值: - -- 正整数。 -- 0 — 禁用内存控制。 - -## max_bytes_in_set {#max_bytes_in_set} - - - -在由子查询创建的 `IN` 子句中,集合可使用的未压缩数据的最大字节数。 - -## max_bytes_ratio_before_external_group_by {#max_bytes_ratio_before_external_group_by} - - - - - -允许 `GROUP BY` 使用的可用内存比例。一旦达到该比例,就会将聚合溢写到外部存储。 - -例如,如果设置为 `0.6`,`GROUP BY` 在执行开始时允许使用 60% 的可用内存 -(针对 server/user/merges),之后就会开始使用外部聚合。 - -## max_bytes_ratio_before_external_sort {#max_bytes_ratio_before_external_sort} - - - - - -允许 `ORDER BY` 使用的可用内存比例。一旦达到该比例,就会改用外部排序。 - -例如,如果设置为 `0.6`,在执行开始时,`ORDER BY` 将允许使用可用内存(分配给 server/user/merges 的内存)的 `60%`,之后将开始使用外部排序。 - -注意,`max_bytes_before_external_sort` 仍然会生效,只有当排序块大于 `max_bytes_before_external_sort` 时才会写入磁盘。 - -## max_bytes_to_read {#max_bytes_to_read} - - - -执行查询时,可从表中读取的未压缩数据的最大字节数。 -该限制会针对每个处理的数据块进行检查,仅对最内层的表表达式生效;在从远程服务器读取时,仅在远程服务器上进行检查。 - -## max_bytes_to_read_leaf {#max_bytes_to_read_leaf} - - - -在执行分布式查询时,从叶子节点本地表中可读取的未压缩数据的最大字节数。虽然分布式查询可以向每个分片(叶子节点)发起多个子查询,但此限制仅在叶子节点的读取阶段进行检查,在根节点的结果合并阶段则会被忽略。 - -例如,一个集群由 2 个分片组成,每个分片包含一个 100 字节数据的表。一个打算通过设置 `max_bytes_to_read=150` 从两个表读取所有数据的分布式查询将会失败,因为总共会读取 200 字节。而使用 `max_bytes_to_read_leaf=150` 的查询将会成功,因为叶子节点最多只会读取 100 字节。 - -该限制会针对每个已处理的数据块进行检查。 - -:::note -在 `prefer_localhost_replica=1` 时,此设置是不稳定的。 -::: - -## max_bytes_to_sort {#max_bytes_to_sort} - - - -在排序时允许处理的最大未压缩字节数。如果为了执行 ORDER BY 操作需要处理的未压缩字节数超过该值,则行为将由 `sort_overflow_mode` 决定,其默认值为 `throw`。 - -## max_bytes_to_transfer {#max_bytes_to_transfer} - - - -在执行 GLOBAL IN/JOIN 子句时,允许传递到远程服务器或保存到临时表中的未压缩数据的最大字节数。 - -## max_columns_to_read {#max_columns_to_read} - - - -在单个查询中最多可从表中读取的列数。 -如果查询需要读取的列数超过该限制,将抛出异常。 - -:::tip -此设置有助于防止查询过于复杂。 -::: - -`0` 表示不作限制。 - -## max_compress_block_size {#max_compress_block_size} - - - -在将数据压缩后写入表之前,未压缩数据块的最大大小。默认值为 1,048,576(1 MiB)。将块大小设置得更小通常会略微降低压缩比,但由于缓存局部性更好,压缩和解压缩速度会略有提升,同时内存占用会减少。 - -:::note -这是一个专家级设置,如果你刚开始使用 ClickHouse,建议不要更改该设置。 -::: - -不要将用于压缩的块(由字节组成的一段内存)与用于查询处理的块(来自表的一组行)混淆。 - -## max_concurrent_queries_for_all_users - - - -如果该设置的值小于或等于当前正在同时处理的查询数量,则会抛出异常。 - -例如:可以将所有用户的 `max_concurrent_queries_for_all_users` 设置为 99,而数据库管理员为自己设置为 100,这样即使服务器过载,仍然可以运行查询进行排查。 - -为单个查询或用户修改该设置不会影响其他查询。 - -可能的取值: - -* 正整数。 -* 0 — 不限制。 - -**示例** - -```xml -99 -``` - -**另请参阅** - -* [max_concurrent_queries](/operations/server-configuration-parameters/settings#max_concurrent_queries) - - -## max_concurrent_queries_for_user - - - -允许每个用户同时处理的最大查询数。 - -可能的取值: - -* 正整数。 -* 0 — 不限制。 - -**示例** - -```xml -5 -``` - - -## max_distributed_connections {#max_distributed_connections} - - - -对单个查询访问单个 Distributed 表进行分布式处理时,与远程服务器之间的最大并发连接数。建议将该值设置为不小于集群中服务器数量。 - -以下参数仅在创建 Distributed 表(以及启动服务器)时使用,因此无需在运行时修改它们。 - -## max_distributed_depth {#max_distributed_depth} - - - -限制针对 [Distributed](../../engines/table-engines/special/distributed.md) 表执行递归查询的最大深度。 - -如果超过该值,服务器会抛出异常。 - -可能的取值: - -- 正整数。 -- 0 — 深度不受限制。 - -## max_download_buffer_size {#max_download_buffer_size} - - - -每个线程在并行下载(例如使用 URL 引擎)时可使用的缓冲区最大大小。 - -## max_download_threads {#max_download_threads} - - - -下载数据时使用的最大线程数(例如 URL 引擎)。 - -## max_estimated_execution_time {#max_estimated_execution_time} - - - - - -以秒为单位的最大预估查询执行时间。每当 -[`timeout_before_checking_execution_speed`](/operations/settings/settings#timeout_before_checking_execution_speed) -超时时,会对每个数据块进行检查。 - -## max_execution_speed {#max_execution_speed} - - - -每秒允许处理的最大行数。在 -[`timeout_before_checking_execution_speed`](/operations/settings/settings#timeout_before_checking_execution_speed) -到期时,对每个数据块进行检查。如果执行速度过高,将降低执行速度。 - -## max_execution_speed_bytes {#max_execution_speed_bytes} - - - -每秒允许执行的最大字节数。每当 -[`timeout_before_checking_execution_speed`](/operations/settings/settings#timeout_before_checking_execution_speed) -达到超时时间时,会对每个数据块进行检查。如果执行速度过高,系统会降低执行速度。 - -## max_execution_time {#max_execution_time} - - - -以秒为单位的查询最大执行时间。 - -`max_execution_time` 参数的行为可能有些难以理解。 -它是根据当前查询执行速度进行插值估算的 -(此行为由 [`timeout_before_checking_execution_speed`](/operations/settings/settings#timeout_before_checking_execution_speed) 控制)。 - -如果预估的查询执行时间超过指定的 `max_execution_time`, -ClickHouse 将中断该查询。默认情况下,`timeout_before_checking_execution_speed` -被设为 10 秒。这意味着在查询运行 10 秒后,ClickHouse -会开始估算总执行时间。比如,如果 `max_execution_time` -被设置为 3600 秒(1 小时),当估算时间超过这一 3600 秒的上限时, -ClickHouse 会终止查询。如果将 `timeout_before_checking_execution_speed` -设置为 0,ClickHouse 将使用实际时钟时间作为 `max_execution_time` 的基准。 - -如果查询运行时间超过指定的秒数,其行为将由 `timeout_overflow_mode` 决定, -该设置的默认值为 `throw`。 - -:::note -超时时间只会在数据处理过程中的指定位置进行检查,查询也只能在这些位置停止。 -目前它无法在聚合状态合并或查询分析阶段中途终止, -因此实际运行时间会高于该设置指定的值。 -::: - -## max_execution_time_leaf - - - -在语义上与 [`max_execution_time`](#max_execution_time) 类似,但只应用于分布式或远程查询的叶节点。 - -例如,如果我们希望将叶节点上的执行时间限制为 `10s`,但对初始节点不设置限制,那么在嵌套子查询的设置中,不应使用 `max_execution_time`,而是这样配置: - -```sql -SELECT count() -FROM cluster(cluster, view(SELECT * FROM t SETTINGS max_execution_time = 10)); -``` - -我们可以将 `max_execution_time_leaf` 作为查询设置项使用: - -```sql -SELECT count() -FROM cluster(cluster, view(SELECT * FROM t)) SETTINGS max_execution_time_leaf = 10; -``` - - -## max_expanded_ast_elements {#max_expanded_ast_elements} - - - -在展开别名和星号(*)之后,查询语法树的最大节点数量。 - -## max_fetch_partition_retries_count {#max_fetch_partition_retries_count} - - - -从其他主机拉取分区时的最大重试次数。 - -## max_final_threads {#max_final_threads} - - - -设置带有 [FINAL](/sql-reference/statements/select/from#final-modifier) 修饰符的 `SELECT` 查询在数据读取阶段可使用的最大并行线程数。 - -可能的取值: - -- 正整数。 -- 0 或 1 — 表示禁用。`SELECT` 查询仅在单线程中执行。 - -## max_http_get_redirects {#max_http_get_redirects} - - - -允许的 HTTP GET 重定向最大跳转次数。该设置可确保采取额外的安全措施,防止恶意服务器将你的请求重定向到意料之外的服务。\n\n典型情况是:某个外部服务器将请求重定向到另一个地址,但该地址看起来属于公司内部基础设施。此时,通过向内部服务器发送 HTTP 请求,你可能会从内部网络中调用内部 API,从而绕过认证,甚至访问其他服务,例如 Redis 或 Memcached。如果你没有内部基础设施(包括运行在 localhost 上的任何服务),或者你信任该服务器,那么允许重定向是安全的。但请记住,如果 URL 使用的是 HTTP 而不是 HTTPS,那么你不仅需要信任远程服务器,还需要信任你的 ISP 以及中间经过的所有网络。 - -## max_hyperscan_regexp_length - - - -定义 [Hyperscan 多模式匹配函数](/sql-reference/functions/string-search-functions#multiMatchAny) 中每个正则表达式的最大长度。 - -可能的取值: - -* 正整数。 -* 0 — 长度不受限制。 - -**示例** - -查询: - -```sql -SELECT multiMatchAny('abcd', ['ab','bcd','c','d']) SETTINGS max_hyperscan_regexp_length = 3; -``` - -结果: - -```text -┌─multiMatchAny('abcd', ['ab', 'bcd', 'c', 'd'])─┐ -│ 1 │ -└────────────────────────────────────────────────┘ -``` - -查询语句: - -```sql -SELECT multiMatchAny('abcd', ['ab','bcd','c','d']) SETTINGS max_hyperscan_regexp_length = 2; -``` - -结果: - -```text -异常:正则表达式长度过大。 -``` - -**另请参阅** - -* [max_hyperscan_regexp_total_length](#max_hyperscan_regexp_total_length) - - -## max_hyperscan_regexp_total_length - - - -设置每个 [hyperscan multi-match function](/sql-reference/functions/string-search-functions#multiMatchAny) 中所有正则表达式的最大总长度。 - -可能的取值: - -* 正整数。 -* 0 - 表示不限制长度。 - -**示例** - -查询: - -```sql -SELECT multiMatchAny('abcd', ['a','b','c','d']) SETTINGS max_hyperscan_regexp_total_length = 5; -``` - -结果: - -```text -┌─multiMatchAny('abcd', ['a', 'b', 'c', 'd'])─┐ -│ 1 │ -└─────────────────────────────────────────────┘ -``` - -查询: - -```sql -SELECT multiMatchAny('abcd', ['ab','bc','c','d']) SETTINGS max_hyperscan_regexp_total_length = 5; -``` - -结果: - -```text -异常:正则表达式总长度过大。 -``` - -**另请参阅** - -* [max_hyperscan_regexp_length](#max_hyperscan_regexp_length) - - -## max_insert_block_size {#max_insert_block_size} - - - -用于向表中插入数据时要形成的数据块大小(以行数计)。 -该设置仅适用于由服务器负责形成数据块的场景。 -例如,对于通过 HTTP 接口执行的 INSERT,服务器会解析数据格式,并按指定大小形成数据块。 -但在使用 clickhouse-client 时,由客户端自行解析数据,服务器端的 `max_insert_block_size` 设置不会影响插入数据块的大小。 -在使用 INSERT SELECT 时,该设置同样没有作用,因为数据是以 SELECT 之后已经形成的那些数据块进行插入的。 - -默认值略大于 `max_block_size`。原因在于某些表引擎(`*MergeTree`)会为每个插入的数据块在磁盘上形成一个数据部分(data part),这本身是一个相当大的实体。同样地,`*MergeTree` 表在插入过程中会对数据进行排序,而足够大的块大小可以在内存(RAM)中对更多数据进行排序。 - -## max_insert_delayed_streams_for_parallel_write {#max_insert_delayed_streams_for_parallel_write} - - - -用于延迟最终数据部分刷新的最大流(列)数量。默认值为自动(当底层存储支持并行写入时为 100,例如 S3,否则为 0,表示禁用) - -## max_insert_threads {#max_insert_threads} - - - -执行 `INSERT SELECT` 查询时使用的最大线程数。 - -可能的取值: - -- 0(或 1)— `INSERT SELECT` 不会并行执行。 -- 正整数(大于 1)。 - -Cloud 中的默认值: - -- 具有 8 GiB 内存的节点为 `1` -- 具有 16 GiB 内存的节点为 `2` -- 内存更大的节点为 `4` - -并行的 `INSERT SELECT` 只有在 `SELECT` 部分也以并行方式执行时才会生效,参见 [`max_threads`](#max_threads) 设置。 -更高的取值会导致更高的内存占用。 - -## max_joined_block_size_bytes {#max_joined_block_size_bytes} - - - - - -JOIN 结果的数据块最大大小(以字节为单位,前提是所用 JOIN 算法支持)。0 表示无限制。 - -## max_joined_block_size_rows {#max_joined_block_size_rows} - - - -JOIN 结果的数据块最大行数(如果所用 JOIN 算法支持该设置)。0 表示不限制。 - -## max_limit_for_vector_search_queries {#max_limit_for_vector_search_queries} - - - - - -如果 `SELECT` 查询中的 `LIMIT` 值超过此设置,则无法使用向量相似度索引。此设置有助于防止向量相似度索引发生内存溢出。 - -## max_local_read_bandwidth {#max_local_read_bandwidth} - - - -本地读取的最大速度,以字节/秒为单位。 - -## max_local_write_bandwidth {#max_local_write_bandwidth} - - - -本地写入的最大速度,以每秒字节数计算。 - -## max_memory_usage {#max_memory_usage} - - - -Cloud 默认值:取决于副本上的 RAM 容量。 - -在单个服务器上执行单个查询时可使用的最大 RAM 容量。 -值为 `0` 表示不限制。 - -此设置不考虑可用内存的容量或机器上的内存总量。该限制仅适用于单个服务器上的单条查询。 - -可以使用 `SHOW PROCESSLIST` 查看每条查询当前的内存消耗。 -每条查询的峰值内存消耗都会被跟踪并写入日志。 - -对于以下以 `String` 和 `Array` 类型参数为输入的聚合函数的状态,内存使用不会被完全跟踪: - -- `min` -- `max` -- `any` -- `anyLast` -- `argMin` -- `argMax` - -内存消耗还受参数 [`max_memory_usage_for_user`](/operations/settings/settings#max_memory_usage_for_user) -和 [`max_server_memory_usage`](/operations/server-configuration-parameters/settings#max_server_memory_usage) 的限制。 - -## max_memory_usage_for_user - - - -在单个服务器上执行某个用户的查询时允许使用的最大 RAM 内存。0 表示不限制。 - -默认情况下,该值不受限制(`max_memory_usage_for_user = 0`)。 - -另请参阅 [`max_memory_usage`](/operations/settings/settings#max_memory_usage) 的说明。 - -例如,如果你想将名为 `clickhouse_read` 的用户的 `max_memory_usage_for_user` 设置为 1000 字节,可以使用如下语句: - -```sql -ALTER USER clickhouse_read SETTINGS max_memory_usage_for_user = 1000; -``` - -您可以先在客户端退出登录并重新登录,然后使用 `getSetting` 函数来验证是否生效: - -```sql -SELECT getSetting('max_memory_usage_for_user'); -``` - - -## max_network_bandwidth {#max_network_bandwidth} - - - -限制通过网络进行数据交换的速度,单位为字节/秒。此设置适用于每个查询。 - -可能的取值: - -- 正整数。 -- 0 — 禁用带宽控制。 - -## max_network_bandwidth_for_all_users {#max_network_bandwidth_for_all_users} - - - -限制通过网络进行数据交换的速度,单位为字节/秒。该设置适用于服务器上所有并发运行的查询。 - -可能的值: - -- 正整数。 -- 0 — 不限制数据传输速度。 - -## max_network_bandwidth_for_user {#max_network_bandwidth_for_user} - - - -限制通过网络进行数据交换的带宽,单位为字节/秒。该设置适用于同一用户发起的所有并发查询。 - -可能的取值: - -- 正整数。 -- 0 — 禁用带宽限制。 - -## max_network_bytes {#max_network_bytes} - - - -限制在执行查询时通过网络传输或接收的数据量(以字节为单位)。该设置作用于每个查询。 - -可能的取值: - -- 正整数。 -- 0 — 禁用数据量控制。 - -## max_number_of_partitions_for_independent_aggregation {#max_number_of_partitions_for_independent_aggregation} - - - -在表中可用于应用此优化的最大分区数 - -## max_os_cpu_wait_time_ratio_to_throw {#max_os_cpu_wait_time_ratio_to_throw} - - - - - -在考虑是否拒绝查询时,操作系统 CPU 等待时间(OSCPUWaitMicroseconds 指标)与忙碌时间(OSCPUVirtualTimeMicroseconds 指标)之间允许的最大比值。使用最小值与最大值之间的线性插值来计算概率,在该比值处概率为 1。 - -## max_parallel_replicas {#max_parallel_replicas} - - - - - -在执行查询时,每个分片可使用的最大副本数。 - -可能的值: - -- 正整数。 - -**附加信息** - -该设置在不同配置组合下可能会产生不同的结果。 - -:::note -当查询中涉及关联查询(join)或子查询,且所有表未满足特定要求时,此设置会产生不正确的结果。更多详情请参阅 [分布式子查询与 max_parallel_replicas](/operations/settings/settings#max_parallel_replicas)。 -::: - -### 使用 `SAMPLE` 键进行并行处理 - -如果在多个服务器上并行执行,查询可能处理得更快。但在以下情况下,查询性能可能会下降: - -- 采样键在分区键中的位置无法支持高效的范围扫描。 -- 向表中添加采样键会降低按其他列进行过滤的效率。 -- 采样键是一个计算开销较高的表达式。 -- 集群的延迟分布存在长尾,因此向更多服务器发起查询会增加查询的整体延迟。 - -### 使用 [parallel_replicas_custom_key](#parallel_replicas_custom_key) 进行并行处理 - -此设置适用于所有复制表。 - -## max_parser_backtracks {#max_parser_backtracks} - - - - - -最大解析器回溯次数(在递归下降解析过程中尝试不同备选分支的最大次数)。 - -## max_parser_depth {#max_parser_depth} - - - -限制递归下降解析器的最大递归深度,可用于控制栈大小。 - -可能的取值: - -- 正整数。 -- 0 — 递归深度不受限制。 - -## max_parsing_threads {#max_parsing_threads} - - - - - -在支持并行解析的输入格式中,用于解析数据的最大线程数。默认情况下,该值会自动确定。 - -## max_partition_size_to_drop {#max_partition_size_to_drop} - - - -在查询执行时对可删除分区大小的限制。值为 `0` 表示可以在没有任何限制的情况下删除分区。 - -云服务默认值:1 TB。 - -:::note -此查询级设置会覆盖其对应的服务器级设置,参见 [max_partition_size_to_drop](/operations/server-configuration-parameters/settings#max_partition_size_to_drop) -::: - -## max_partitions_per_insert_block {#max_partitions_per_insert_block} - - - - - -限制单个插入块中的最大分区数量,如果块包含的分区数量过多,则会抛出异常。 - -- 正整数。 -- `0` — 分区数量不受限制。 - -**详细信息** - -在插入数据时,ClickHouse 会计算插入块中的分区数量。 -如果分区数量大于 `max_partitions_per_insert_block`,ClickHouse 会根据 -`throw_on_max_partitions_per_insert_block` 的值记录一条警告日志或抛出异常。 -异常的文本如下: - -> "单个 INSERT 块中的分区过多(`partitions_count` 个分区,限制为 " + toString(max_partitions) + ")。 - 此限制由 'max_partitions_per_insert_block' 设置控制。 - 使用大量分区是一个常见的误区。这会带来严重的负面性能影响, - 包括服务器启动变慢、INSERT 查询变慢以及 SELECT 查询变慢。推荐的单个表总分区数 - 控制在 1000 到 10000 之内。请注意,分区并不是为了加速 SELECT 查询 - 而设计的(仅使用 ORDER BY 键就足以让范围查询很快)。 - 分区是为了便于数据操作(DROP PARTITION 等)而设计的。" - -:::note -此设置是一个安全阈值,因为使用大量分区是一个常见的误区。 -::: - -## max_partitions_to_read {#max_partitions_to_read} - - - -限制单个查询可以访问的最大分区数。 - -在建表时指定的该设置值可以通过查询级别的设置进行重写。 - -可能的取值: - -- 正整数 -- `-1` - 不限制(默认) - -:::note -还可以在表的 settings 中指定 MergeTree 设置 [`max_partitions_to_read`](/operations/settings/settings#max_partitions_to_read)。 -::: - -## max_parts_to_move {#max_parts_to_move} - - - - - -限制单个查询中可移动的数据分片(part)数量。设置为 0 表示不限制。 - -## max_projection_rows_to_use_projection_index {#max_projection_rows_to_use_projection_index} - - - - - -如果从 projection 索引读取的行数小于或等于此阈值,ClickHouse 会在查询执行期间尝试使用该 projection 索引。 - -## max_query_size {#max_query_size} - - - -SQL 解析器可处理的查询字符串的最大字节数。 -INSERT 查询中 VALUES 子句里的数据由单独的流式解析器处理(该解析器只消耗 O(1) 的 RAM),不受此限制的影响。 - -:::note -`max_query_size` 不能在 SQL 查询内部设置(例如,`SELECT now() SETTINGS max_query_size=10000`),因为 ClickHouse 需要预先分配一个缓冲区来解析该查询,而这个缓冲区的大小由 `max_query_size` 设置决定,因此必须在查询执行之前完成配置。 -::: - -## max_read_buffer_size {#max_read_buffer_size} - - - -用于从文件系统读取数据的最大缓冲区大小。 - -## max_read_buffer_size_local_fs {#max_read_buffer_size_local_fs} - - - -用于从本地文件系统读取数据的最大缓冲区大小。如果设置为 0,则会使用 max_read_buffer_size 的值。 - -## max_read_buffer_size_remote_fs {#max_read_buffer_size_remote_fs} - - - -从远程文件系统读取数据时的最大缓冲区大小。如果设置为 0,则会使用 `max_read_buffer_size`。 - -## max_recursive_cte_evaluation_depth {#max_recursive_cte_evaluation_depth} - - - - - -递归 CTE 求值深度的最大限制 - -## max_remote_read_network_bandwidth {#max_remote_read_network_bandwidth} - - - -用于读取操作时,网络数据交换的最大速度(以字节/秒计)。 - -## max_remote_write_network_bandwidth {#max_remote_write_network_bandwidth} - - - -通过网络进行写入时的最大数据传输速率(以字节每秒为单位)。 - -## max_replica_delay_for_distributed_queries {#max_replica_delay_for_distributed_queries} - - - -在执行分布式查询时禁用存在滞后的副本。参见 [Replication](../../engines/table-engines/mergetree-family/replication.md)。 - -以秒为单位设置时间。如果某个副本的滞后时间大于或等于该值,则不会使用该副本。 - -可能的取值: - -- 正整数。 -- 0 — 不检查副本滞后情况。 - -要避免使用任何具有非零滞后的副本,请将此参数设置为 1。 - -在对指向复制表的分布式表执行 `SELECT` 查询时使用。 - -## max_result_bytes {#max_result_bytes} - - - -限制结果集的大小(以字节计,未压缩)。如果在处理完某个数据块后达到了阈值,查询将会停止, -但不会截断结果中的最后一个数据块,因此结果的实际大小可能会大于阈值。 - -**注意事项** - -该阈值考虑的是结果在内存中的大小。 -即使结果集本身很小,它也可能引用内存中更大的数据结构, -例如 LowCardinality 列的字典和 AggregateFunction 列的 Arena, -因此即便结果较小,也可能会超出该阈值。 - -:::warning -该设置较为底层,应谨慎使用 -::: - -## max_result_rows {#max_result_rows} - - - -云端默认值:`0`。 - -限制结果中的行数。对子查询以及在远程服务器上执行分布式查询各个部分时同样生效。 -当该值为 `0` 时,不应用任何限制。 - -如果达到阈值,查询会在处理完一个数据块后停止,但 -不会截断结果的最后一个数据块,因此结果大小可能会 -大于阈值。 - -## max_reverse_dictionary_lookup_cache_size_bytes {#max_reverse_dictionary_lookup_cache_size_bytes} - - - - - -函数 `dictGetKeys` 使用的、按查询维护的反向字典查找缓存的最大大小(字节)。该缓存按属性值存储序列化后的键元组,以避免在同一查询中重复扫描字典。达到上限时,将按 LRU 策略逐出缓存条目。设置为 0 可禁用缓存。 - -## max_rows_in_distinct {#max_rows_in_distinct} - - - -使用 DISTINCT 时允许的最大不同行数。 - -## max_rows_in_join {#max_rows_in_join} - - - -限制用于表连接的哈希表中的最大行数。 - -该设置适用于 [SELECT ... JOIN](/sql-reference/statements/select/join) -操作和 [Join](/engines/table-engines/special/join) 表引擎。 - -如果查询包含多个 join,ClickHouse 会对每个中间结果检查该设置。 - -达到限制时,ClickHouse 可以执行不同的操作。使用 -[`join_overflow_mode`](/operations/settings/settings#join_overflow_mode) 设置来选择要执行的操作。 - -可能的取值包括: - -- 正整数。 -- `0` — 行数不受限制。 - -## max_rows_in_set {#max_rows_in_set} - - - -由子查询生成的 `IN` 子句中数据集的最大行数限制。 - -## max_rows_in_set_to_optimize_join {#max_rows_in_set_to_optimize_join} - - - - - -在执行 JOIN 之前,用于根据彼此的行集对被连接表进行预过滤的集合(set)的最大大小。 - -可能的取值: - -- 0 — 禁用。 -- 任意正整数。 - -## max_rows_to_group_by {#max_rows_to_group_by} - - - -聚合时接收到的唯一键的最大数量。该设置可用于在执行聚合时限制内存消耗。 - -如果在 `GROUP BY` 期间的聚合生成的行数(唯一的 `GROUP BY` 键)超过指定数量,其行为由 `group_by_overflow_mode` 决定。该设置的默认值为 `throw`,也可以切换为近似的 `GROUP BY` 模式。 - -## max_rows_to_read {#max_rows_to_read} - - - -在执行查询时,从单个表中可读取的最大行数。 -该限制会在每个处理的数据块上进行检查,仅应用于最深层的表表达式;当从远程服务器读取时,仅在远程服务器上进行检查。 - -## max_rows_to_read_leaf {#max_rows_to_read_leaf} - - - -在执行分布式查询时,从叶子节点上的本地表中可读取的最大行数。虽然分布式查询可以向每个分片(叶子)发出多个子查询,但该限制只会在叶子节点的读取阶段进行检查,在根节点的结果合并阶段则会被忽略。 - -例如,一个集群由 2 个分片组成,并且每个分片包含一个有 100 行的数据表。一个分布式查询需要从两个表中读取全部数据,并将设置 `max_rows_to_read=150`,将会失败,因为总行数为 200 行。使用设置 `max_rows_to_read_leaf=150` 的查询则会成功,因为每个叶子节点最多只会读取 100 行。 - -该限制会针对每个处理的数据块进行检查。 - -:::note -在 `prefer_localhost_replica=1` 时,该设置的行为不稳定。 -::: - -## max_rows_to_sort {#max_rows_to_sort} - - - -排序前可处理的最大行数。通过该设置可以在排序时限制内存消耗。 -如果在执行 ORDER BY 操作时需要处理的行数超过该值, -具体行为将由 `sort_overflow_mode` 决定,其默认值为 `throw`。 - -## max_rows_to_transfer {#max_rows_to_transfer} - - - -在执行 GLOBAL IN/JOIN 子句时,允许传递到远程服务器或写入临时表的最大行数。 - -## max_sessions_for_user - - - -每个已认证用户在 ClickHouse 服务器上的最大并发会话数。 - -示例: - -```xml - - - 1 - - - 2 - - - 0 - - - - - - single_session_user - - - - two_sessions_profile - - - - unlimited_sessions_profile - - -``` - -可能的取值: - -* 正整数 -* `0` - 同时会话数量无限(默认) - - -## max_size_to_preallocate_for_aggregation {#max_size_to_preallocate_for_aggregation} - - - - - -在聚合前,允许在所有哈希表中预分配空间的元素总数上限。 - -## max_size_to_preallocate_for_joins {#max_size_to_preallocate_for_joins} - - - - - -在执行 join 之前,允许为所有哈希表预先分配空间的元素总数上限。 - -## max_streams_for_merge_tree_reading {#max_streams_for_merge_tree_reading} - - - -如果该值不为 0,则会限制读取 MergeTree 表时的流数量。 - -## max_streams_multiplier_for_merge_tables {#max_streams_multiplier_for_merge_tables} - - - -在读取 Merge 表时请求更多的数据流(streams)。这些数据流会分配到 Merge 表所使用的各个基础表上。这样可以让工作负载在各线程之间分布得更加均匀,尤其在被合并的表大小不同时效果更为显著。 - -## max_streams_to_max_threads_ratio {#max_streams_to_max_threads_ratio} - - - -允许使用的数据源数量多于线程数,以便在各线程之间更均匀地分配工作。这被视为一种临时方案,因为未来可以实现让数据源数量与线程数相等,并由每个数据源动态选择自己可处理的工作。 - -## max_subquery_depth {#max_subquery_depth} - - - -如果一个查询中嵌套的子查询数量超过指定的值,将抛出异常。 - -:::tip -这可以作为一种安全检查机制,用于防止集群中的用户编写过于复杂的查询。 -::: - -## max_table_size_to_drop {#max_table_size_to_drop} - - - -在查询执行期间对删除表的限制。值为 `0` 表示可以在没有任何限制的情况下删除所有表。 - -云服务默认值:1 TB。 - -:::note -此查询设置会覆盖其对应的服务器设置,参见 [max_table_size_to_drop](/operations/server-configuration-parameters/settings#max_table_size_to_drop) -::: - -## max_temporary_columns {#max_temporary_columns} - - - -在执行查询时(包括常量列),要求同时保存在内存中的临时列的最大数量。 -如果某个查询在中间计算过程中在内存中生成的临时列数量超过该限制,则会抛出异常。 - -:::tip -此设置有助于防止查询过于复杂。 -::: - -将其设置为 `0` 表示不设限制。 - -## max_temporary_data_on_disk_size_for_query {#max_temporary_data_on_disk_size_for_query} - - - -所有并发运行的查询在磁盘上通过临时文件所消耗的数据总量上限(以字节为单位)。 - -可能的取值: - -- 正整数。 -- `0` — 不限制(默认) - -## max_temporary_data_on_disk_size_for_user {#max_temporary_data_on_disk_size_for_user} - - - -所有并发运行的用户查询在磁盘上临时文件消耗的数据最大允许总量(以字节为单位)。 - -可能的取值: - -- 正整数。 -- `0` — 不限制(默认) - -## max_temporary_non_const_columns {#max_temporary_non_const_columns} - - - -与 `max_temporary_columns` 类似,表示在执行查询时必须同时保存在 RAM 中的临时列的最大数量,但不计入常量列。 - -:::note -在执行查询时,常量列会相当频繁地被创建,但它们几乎不占用计算资源。 -::: - -## max_threads {#max_threads} - - - -查询处理线程数的上限,不包含用于从远程服务器获取数据的线程(参见 `max_distributed_connections` 参数)。 - -此参数适用于以并行方式执行查询处理流水线相同期阶段的线程。 -例如,在从表中读取数据时,如果可以使用至少 `max_threads` 个线程并行执行函数表达式计算、WHERE 过滤以及 GROUP BY 预聚合,则会使用 `max_threads` 个线程。 - -对于因 LIMIT 而能快速完成的查询,可以将 `max_threads` 设置得更小。例如,如果在每个数据块中都已经包含了满足所需数量的记录,并且 max_threads = 8,则会读取 8 个数据块,尽管只读取一个块就已足够。 - -`max_threads` 值越小,占用的内存越少。 - -Cloud 默认值:`auto(3)` - -## max_threads_for_indexes {#max_threads_for_indexes} - - - -处理索引时可用的最大线程数。 - -## max_untracked_memory {#max_untracked_memory} - - - -小规模的内存分配和释放会聚合到线程局部变量中,只有当其绝对值超过指定阈值时才会被跟踪或进行分析。如果该值大于 `memory_profiler_step`,则实际上会被降为 `memory_profiler_step`。 - -## memory_overcommit_ratio_denominator {#memory_overcommit_ratio_denominator} - - - - - -当在全局层面达到硬内存限制时,它表示软内存限制。 -该值用于计算查询的内存超量分配比率。 -为零表示跳过该查询。 -在[内存超量分配](memory-overcommit.md)中了解更多信息。 - -## memory_overcommit_ratio_denominator_for_user {#memory_overcommit_ratio_denominator_for_user} - - - - - -表示在用户级别达到硬内存限制时所对应的软内存限制。 -该值用于计算查询的内存超量使用比率。 -为零时表示跳过该查询。 -阅读更多关于 [memory overcommit](memory-overcommit.md) 的内容。 - -## memory_profiler_sample_max_allocation_size {#memory_profiler_sample_max_allocation_size} - - - -以 `memory_profiler_sample_probability` 的概率随机采样大小小于或等于指定值的内存分配。0 表示禁用。你可能需要将 `max_untracked_memory` 设置为 0,才能让该阈值按预期生效。 - -## memory_profiler_sample_min_allocation_size {#memory_profiler_sample_min_allocation_size} - - - -以 `memory_profiler_sample_probability` 的概率随机抽样收集大小大于或等于指定值的内存分配。0 表示禁用。你可能需要将 `max_untracked_memory` 设置为 0,才能使此阈值按预期生效。 - -## memory_profiler_sample_probability {#memory_profiler_sample_probability} - - - -随机采集内存分配和释放操作,并将其以 `trace_type` 为 `MemorySample` 的记录写入 `system.trace_log`。该概率作用于每一次分配/释放操作,而不考虑分配大小(可通过 `memory_profiler_sample_min_allocation_size` 和 `memory_profiler_sample_max_allocation_size` 进行调整)。请注意,仅当未跟踪的内存量超过 `max_untracked_memory` 时才会进行采样。若需要更细粒度的采样,可以将 `max_untracked_memory` 设置为 0。 - -## memory_profiler_step {#memory_profiler_step} - - - -设置内存分析器的步长。当查询的内存使用量每次超过下一个步长阈值(以字节数表示)时,内存分析器会收集当前的分配堆栈跟踪,并将其写入 [trace_log](/operations/system-tables/trace_log)。 - -可能的取值: - -- 一个正整数,表示字节数。 - -- 0 表示关闭内存分析器。 - -## memory_tracker_fault_probability {#memory_tracker_fault_probability} - - - -用于测试异常安全性——按照指定的概率在每次内存分配时抛出异常。 - -## memory_usage_overcommit_max_wait_microseconds {#memory_usage_overcommit_max_wait_microseconds} - - - -在用户级别发生内存 overcommit 时,线程为等待内存被释放所能等待的最长时间。 -如果在超时时间到达时内存仍未被释放,则会抛出异常。 -更多信息请参见[内存 overcommit](memory-overcommit.md)。 - -## merge_table_max_tables_to_look_for_schema_inference {#merge_table_max_tables_to_look_for_schema_inference} - - - - - -在创建未显式指定 schema 的 `Merge` 表或使用 `merge` 表函数时,会将匹配到的表的 schema 作为并集进行推断,但参与推断的匹配表数量不会超过指定的上限。 -若匹配表数量超过该上限,则 schema 仅基于前面指定数量的表进行推断。 - -## merge_tree_coarse_index_granularity {#merge_tree_coarse_index_granularity} - - - -在查找数据时,ClickHouse 会检查索引文件中的数据标记。如果 ClickHouse 发现所需键落在某个范围内,它会将该范围划分为 `merge_tree_coarse_index_granularity` 个子范围,并在这些子范围中递归查找所需键。 - -可能的取值: - -- 任意正偶整数。 - -## merge_tree_compact_parts_min_granules_to_multibuffer_read {#merge_tree_compact_parts_min_granules_to_multibuffer_read} - - - - - -仅在 ClickHouse Cloud 中生效。用于在 MergeTree 表紧凑部分的条带(stripe)中启用 multibuffer 读取器时所需的 granule 数量。multibuffer 读取器支持并行读取和预取。在从远程文件系统读取时,使用 multibuffer 读取器会增加读取请求的数量。 - -## merge_tree_determine_task_size_by_prewhere_columns {#merge_tree_determine_task_size_by_prewhere_columns} - - - -是否仅根据 PREWHERE 列的数据大小来确定读取任务的大小。 - -## merge_tree_max_bytes_to_use_cache {#merge_tree_max_bytes_to_use_cache} - - - -如果 ClickHouse 在单个查询中需要读取的数据量超过 `merge_tree_max_bytes_to_use_cache` 字节,则不会使用未压缩数据块缓存。 - -未压缩数据块缓存会存储为查询提取出的数据。ClickHouse 使用此缓存来加速对重复小查询的响应。此设置可防止读取大量数据的查询“污染”该缓存。[uncompressed_cache_size](/operations/server-configuration-parameters/settings#uncompressed_cache_size) 服务器设置定义了未压缩数据块缓存的大小。 - -可能的值: - -- 任意正整数。 - -## merge_tree_max_rows_to_use_cache {#merge_tree_max_rows_to_use_cache} - - - -如果 ClickHouse 在单个查询中需要读取的行数超过 `merge_tree_max_rows_to_use_cache`,则不会使用未压缩数据块缓存。 - -未压缩数据块缓存用于存储为查询提取的数据。ClickHouse 使用此缓存来加速对重复的小查询的响应。此设置可以防止读取大量数据的查询冲击缓存。[uncompressed_cache_size](/operations/server-configuration-parameters/settings#uncompressed_cache_size) 服务器设置定义了未压缩数据块缓存的大小。 - -可能的取值: - -- 任意正整数。 - -## merge_tree_min_bytes_for_concurrent_read {#merge_tree_min_bytes_for_concurrent_read} - - - -如果从一个 [MergeTree](../../engines/table-engines/mergetree-family/mergetree.md) 引擎表的某个文件中读取的字节数超过 `merge_tree_min_bytes_for_concurrent_read`,则 ClickHouse 会尝试使用多个线程并发读取该文件。 - -可能的取值: - -- 正整数。 - -## merge_tree_min_bytes_for_concurrent_read_for_remote_filesystem {#merge_tree_min_bytes_for_concurrent_read_for_remote_filesystem} - - - - - -在从远程文件系统读取数据时,[MergeTree](../../engines/table-engines/mergetree-family/mergetree.md) 引擎在可以并行读取之前,从单个文件中需要读取的最小字节数。我们不建议使用此设置。 - -可能的取值: - -- 正整数。 - -## merge_tree_min_bytes_for_seek {#merge_tree_min_bytes_for_seek} - - - -如果在同一个文件中需要读取的两个数据块之间的字节距离小于 `merge_tree_min_bytes_for_seek`,则 ClickHouse 会顺序读取涵盖这两个数据块的文件区间,从而避免额外的磁盘寻道。 - -可能的取值: - -- 任意正整数。 - -## merge_tree_min_bytes_per_task_for_remote_reading {#merge_tree_min_bytes_per_task_for_remote_reading} - -**别名**: `filesystem_prefetch_min_bytes_for_single_read_task` - - - - - -每个任务读取的最小字节数。 - -## merge_tree_min_read_task_size {#merge_tree_min_read_task_size} - - - - - -任务大小的严格下限(即使 granule 数量较少且可用线程数较多,也不会分配更小的任务) - -## merge_tree_min_rows_for_concurrent_read {#merge_tree_min_rows_for_concurrent_read} - - - -如果从 [MergeTree](../../engines/table-engines/mergetree-family/mergetree.md) 表的某个文件中要读取的行数超过 `merge_tree_min_rows_for_concurrent_read`,ClickHouse 会尝试使用多个线程并发读取该文件。 - -可能的取值: - -- 正整数。 - -## merge_tree_min_rows_for_concurrent_read_for_remote_filesystem {#merge_tree_min_rows_for_concurrent_read_for_remote_filesystem} - - - - - -在从远程文件系统读取数据时,[MergeTree](../../engines/table-engines/mergetree-family/mergetree.md) 引擎在启用并行读取前,需要从单个文件中读取的最小行数。我们不建议使用此设置。 - -可能的值: - -- 正整数。 - -## merge_tree_min_rows_for_seek {#merge_tree_min_rows_for_seek} - - - -如果在同一个文件中需要读取的两个数据块之间的行间隔小于 `merge_tree_min_rows_for_seek`,则 ClickHouse 不会在文件中执行查找(seek)操作,而是顺序读取数据。 - -可能的取值: - -- 任意正整数。 - -## merge_tree_read_split_ranges_into_intersecting_and_non_intersecting_injection_probability {#merge_tree_read_split_ranges_into_intersecting_and_non_intersecting_injection_probability} - - - - - -用于测试 `PartsSplitter` —— 在每次从 MergeTree 读取时,以指定的概率将读取范围拆分为相交和不相交的区间。 - -## merge_tree_storage_snapshot_sleep_ms {#merge_tree_storage_snapshot_sleep_ms} - - - - - -在为 MergeTree 表创建存储快照时注入人为延迟(单位:毫秒)。 -仅用于测试和调试目的。 - -可能的取值: - -- 0 - 无延迟(默认) -- N - 延迟的毫秒数 - -## merge_tree_use_const_size_tasks_for_remote_reading {#merge_tree_use_const_size_tasks_for_remote_reading} - - - -是否在从远程表读取数据时使用固定大小的任务。 - -## merge_tree_use_deserialization_prefixes_cache {#merge_tree_use_deserialization_prefixes_cache} - - - - - -在 MergeTree 中从远程磁盘读取时,启用对文件前缀中列元数据的缓存。 - -## merge_tree_use_prefixes_deserialization_thread_pool {#merge_tree_use_prefixes_deserialization_thread_pool} - - - - - -启用在 MergeTree 的 Wide 部分(Wide parts)中使用线程池并行反序列化前缀。该线程池的大小由服务器设置 `max_prefixes_deserialization_thread_pool_size` 控制。 - -## merge_tree_use_v1_object_and_dynamic_serialization {#merge_tree_use_v1_object_and_dynamic_serialization} - - - - - -启用后,MergeTree 中的 JSON 和 Dynamic 类型将使用 V1 序列化版本,而非 V2。对该设置的更改仅会在服务器重启后生效。 - -## metrics_perf_events_enabled {#metrics_perf_events_enabled} - - - -如果启用此设置,将在查询执行期间对部分 perf 事件进行测量。 - -## metrics_perf_events_list {#metrics_perf_events_list} - -以逗号分隔的 perf 指标列表,将在整个查询执行过程中进行测量。留空表示测量所有事件。可用事件参见源码中的 PerfEventInfo。 - -## min_bytes_to_use_direct_io {#min_bytes_to_use_direct_io} - - - -使用 direct I/O 访问存储磁盘所需的最小数据量。 - -ClickHouse 在从表中读取数据时使用该设置。如果要读取的数据总量超过 `min_bytes_to_use_direct_io` 字节,则 ClickHouse 会使用 `O_DIRECT` 选项从存储磁盘中读取数据。 - -可能的取值: - -- 0 — 禁用 direct I/O。 -- 正整数。 - -## min_bytes_to_use_mmap_io {#min_bytes_to_use_mmap_io} - - - -这是一个实验性设置。该参数用于设置在读取大文件时,为避免将数据从内核拷贝到用户态而使用 `mmap` 所需的最小内存阈值。推荐设置为约 64 MB,因为 [mmap/munmap](https://en.wikipedia.org/wiki/Mmap) 本身较慢。此设置仅对大文件有意义,并且只有在数据已经位于页缓存中时才会带来收益。 - -可能的取值: - -- 正整数。 -- 0 —— 读取大文件时始终通过将数据从内核拷贝到用户态的方式进行读取。 - -## min_chunk_bytes_for_parallel_parsing {#min_chunk_bytes_for_parallel_parsing} - - - -- 类型: unsigned int -- 默认值: 1 MiB - -以字节为单位的最小分片大小,每个线程在并行解析时会处理至少这么大的数据块。 - -## min_compress_block_size {#min_compress_block_size} - - - -适用于 [MergeTree](../../engines/table-engines/mergetree-family/mergetree.md) 表。为了在处理查询时降低延迟,当写入下一个标记时,如果当前块的大小至少为 `min_compress_block_size`,则会对该块进行压缩。默认值为 65,536。 - -如果未压缩数据小于 `max_compress_block_size`,则块的实际大小至少为该值,并且不少于单个标记对应的数据量。 - -来看一个示例。假设在创建表时将 `index_granularity` 设置为 8192。 - -我们写入一个 UInt32 类型的列(每个值 4 字节)。写入 8192 行时,总量将是 32 KB 的数据。由于 min_compress_block_size = 65,536,因此每两个标记会形成一个压缩块。 - -我们写入一个 String 类型的 URL 列(平均每个值 60 字节)。写入 8192 行时,平均将略低于 500 KB 的数据。由于这大于 65,536,因此每个标记都会形成一个压缩块。在这种情况下,从磁盘读取单个标记范围内的数据时,不会解压缩多余的数据。 - -:::note -这是一个面向专家的设置,如果刚开始使用 ClickHouse,不建议更改该设置。 -::: - -## min_count_to_compile_aggregate_expression {#min_count_to_compile_aggregate_expression} - - - -对相同聚合表达式开始进行 JIT 编译所需的最小数量。仅在启用 [compile_aggregate_expressions](#compile_aggregate_expressions) 设置时生效。 - -可能的取值: - -- 正整数。 -- 0 — 相同聚合表达式将始终进行 JIT 编译。 - -## min_count_to_compile_expression {#min_count_to_compile_expression} - - - -同一表达式在被编译前所需的最少执行次数。 - -## min_count_to_compile_sort_description {#min_count_to_compile_sort_description} - - - -相同的排序描述在被 JIT 编译前需要出现的次数 - -## min_execution_speed {#min_execution_speed} - - - -以每秒处理的行数表示的最小执行速度。会在每个数据块上进行检查,当 -[`timeout_before_checking_execution_speed`](/operations/settings/settings#timeout_before_checking_execution_speed) -到期时触发检查。如果执行速度低于该值,将抛出异常。 - -## min_execution_speed_bytes {#min_execution_speed_bytes} - - - -每秒的最小执行字节数。在 -[`timeout_before_checking_execution_speed`](/operations/settings/settings#timeout_before_checking_execution_speed) -到期时,对每个数据块进行检查。如果执行速度低于该值,则会抛出异常。 - -## min_external_table_block_size_bytes {#min_external_table_block_size_bytes} - - - - - -如果数据块不够大,则在传递给外部表时将其压缩合并到指定的字节大小。 - -## min_external_table_block_size_rows {#min_external_table_block_size_rows} - - - - - -如果传递给外部表的块不够大,则将其合并为指定行数的块。 - -## min_free_disk_bytes_to_perform_insert {#min_free_disk_bytes_to_perform_insert} - - - - - -执行插入操作所需的最小空闲磁盘空间(字节)数。 - -## min_free_disk_ratio_to_perform_insert {#min_free_disk_ratio_to_perform_insert} - - - - - -执行插入操作所需的最小空闲磁盘空间比例。 - -## min_free_disk_space_for_temporary_data {#min_free_disk_space_for_temporary_data} - - - -在将用于外部排序和聚合的临时数据写入磁盘时所需保留的最小磁盘空间。 - -## min_hit_rate_to_use_consecutive_keys_optimization {#min_hit_rate_to_use_consecutive_keys_optimization} - - - -用于在聚合中执行连续键优化的缓存保持启用所需的最低命中率 - -## min_insert_block_size_bytes {#min_insert_block_size_bytes} - - - -设置通过 `INSERT` 查询插入到表中的数据块的最小大小(字节数)。更小的数据块会被压缩合并成更大的数据块。 - -可能的取值: - -- 正整数。 -- 0 — 禁用压缩合并。 - -## min_insert_block_size_bytes_for_materialized_views {#min_insert_block_size_bytes_for_materialized_views} - - - -设置可通过 `INSERT` 查询插入到表中的数据块的最小字节数。更小的数据块会被合并成更大的数据块。此设置仅应用于插入到[物化视图](../../sql-reference/statements/create/view.md)中的数据块。通过调整该设置,可以在写入物化视图时控制数据块的合并行为,并避免过多的内存使用。 - -可能的取值: - -- 任意正整数。 -- 0 — 禁用合并。 - -**另请参阅** - -- [min_insert_block_size_bytes](#min_insert_block_size_bytes) - -## min_insert_block_size_rows {#min_insert_block_size_rows} - - - -设置通过 `INSERT` 查询插入到表中的数据块所允许的最小行数。行数更少的数据块会被合并成更大的块。 - -可能的取值: - -- 正整数。 -- 0 — 禁用合并。 - -## min_insert_block_size_rows_for_materialized_views {#min_insert_block_size_rows_for_materialized_views} - - - -设置通过 `INSERT` 查询插入到表中的数据块所允许的最小行数。更小的数据块会被压缩合并为更大的数据块。此设置仅适用于插入到[物化视图](../../sql-reference/statements/create/view.md)中的数据块。通过调整此设置,可以在写入物化视图时控制数据块的压缩合并行为,并避免占用过多内存。 - -可能的取值: - -- 任意正整数。 -- 0 — 禁用压缩合并。 - -**另请参阅** - -- [min_insert_block_size_rows](#min_insert_block_size_rows) - -## min_joined_block_size_bytes {#min_joined_block_size_bytes} - - - - - -JOIN 输入和输出数据块的最小大小(以字节为单位,前提是所用 JOIN 算法支持该设置)。小于该值的数据块会被合并。0 表示不限制。 - -## min_joined_block_size_rows {#min_joined_block_size_rows} - - - - - -JOIN 输入和输出数据块的最小行数(如果所用 JOIN 算法支持该设置)。更小的数据块将被合并压缩。0 表示不限制。 - -## min_os_cpu_wait_time_ratio_to_throw {#min_os_cpu_wait_time_ratio_to_throw} - - - - - -用于判定是否拒绝查询时,OS CPU 等待时间(`OSCPUWaitMicroseconds` 指标)与忙碌时间(`OSCPUVirtualTimeMicroseconds` 指标)之间的最小比率。通过在最小和最大比率之间进行线性插值来计算概率,在该比率处概率为 0。 - -## min_outstreams_per_resize_after_split {#min_outstreams_per_resize_after_split} - - - - - -指定在管道生成期间执行拆分后,`Resize` 或 `StrictResize` 处理器的输出流的最小数量。如果最终得到的流数量小于该值,则不会执行拆分操作。 - -### 什么是 Resize 节点 - -`Resize` 节点是查询流水线中的一个处理器,用于调整在流水线中流动的数据流数量。它可以增加或减少数据流的数量,以在多个线程或处理器之间平衡工作负载。例如,当查询需要更高的并行度时,`Resize` 节点可以将单个数据流拆分为多个数据流。相反,它也可以将多个数据流合并为较少的数据流,以集中进行数据处理。 - -`Resize` 节点确保数据在各个数据流之间均匀分布,同时保持数据块的结构不变。这有助于优化资源利用率并提升查询性能。 - -### 为什么需要拆分 Resize 节点 - -在流水线执行过程中,作为集中枢纽的 `Resize` 节点中的 ExecutingGraph::Node::status_mutex 在高核数环境下会出现严重竞争,这种竞争会导致: - -1. ExecutingGraph::updateNode 的延迟增加,直接影响查询性能。 -2. 大量 CPU 周期浪费在自旋锁竞争(native_queued_spin_lock_slowpath)上,导致效率下降。 -3. CPU 利用率下降,限制并行度和整体吞吐量。 - -### 如何拆分 Resize 节点 - -1. 检查输出流的数量以确保可以执行拆分:每个拆分处理器的输出流数量需要达到或超过 `min_outstreams_per_resize_after_split` 阈值。 -2. 将 `Resize` 节点划分为多个较小的 `Resize` 节点,这些节点具有相同数量的端口,每个节点处理一部分输入和输出流。 -3. 各分组独立处理,从而减少锁争用。 - -### 使用任意输入/输出拆分 Resize 节点 - -在某些情况下,当输入/输出的数量不能被拆分得到的 `Resize` 节点数量整除时,某些输入会连接到 `NullSource`,某些输出会连接到 `NullSink`。这使得可以在不影响整体数据流的情况下完成拆分。 - -### 设置的目的 - -`min_outstreams_per_resize_after_split` 设置用于确保对 `Resize` 节点的拆分具有实际意义,并避免生成过少的数据流,从而防止并行处理效率低下。通过对输出流数量设定最小下限,该设置有助于在并行度与开销之间保持平衡,从而在涉及数据流拆分与合并的场景下优化查询执行。 - -### 禁用该设置 - -要禁用对 `Resize` 节点的拆分,请将该设置的值设为 0。这样将在生成管道时阻止拆分 `Resize` 节点,使其保留原始结构,而不会被划分为更小的节点。 - -## min_table_rows_to_use_projection_index {#min_table_rows_to_use_projection_index} - - - - - -如果从表中读取的估算行数大于或等于该阈值,ClickHouse 将在执行查询时尝试使用投影索引。 - -## mongodb_throw_on_unsupported_query {#mongodb_throw_on_unsupported_query} - - - - - -启用后,当无法构建 MongoDB 查询时,MongoDB 表将返回错误。否则,ClickHouse 会读取整个表并在本地处理。该选项在 `allow_experimental_analyzer=0` 时不生效。 - -## move_all_conditions_to_prewhere {#move_all_conditions_to_prewhere} - - - -将 WHERE 子句中所有可下推的条件移至 PREWHERE 子句 - -## move_primary_key_columns_to_end_of_prewhere {#move_primary_key_columns_to_end_of_prewhere} - - - -将包含主键列的 PREWHERE 条件移动到 AND 链的末尾。这些条件很可能会在主键分析阶段就被考虑在内,因此对 PREWHERE 过滤本身的贡献不会很大。 - -## multiple_joins_try_to_keep_original_names {#multiple_joins_try_to_keep_original_names} - - - -在重写包含多个 `JOIN` 的查询时,不要向顶层表达式列表添加别名 - -## mutations_execute_nondeterministic_on_initiator {#mutations_execute_nondeterministic_on_initiator} - - - -如果为 true,常量型非确定性函数(例如函数 `now()`)会在发起节点上执行,并在 `UPDATE` 和 `DELETE` 查询中被替换为字面量。这样有助于在使用常量非确定性函数执行变更时,保持各副本之间的数据同步。默认值:`false`。 - -## mutations_execute_subqueries_on_initiator {#mutations_execute_subqueries_on_initiator} - - - -如果为 true,标量子查询会在发起方执行,并在 `UPDATE` 和 `DELETE` 查询中被替换为字面值。默认值:`false`。 - -## mutations_max_literal_size_to_replace {#mutations_max_literal_size_to_replace} - - - -在 `UPDATE` 和 `DELETE` 查询中可被替换的序列化字面量的最大大小(以字节为单位)。仅当上面提到的两个设置中至少有一个被启用时才生效。默认值:16384(16 KiB)。 - -## mutations_sync {#mutations_sync} - - - -允许同步执行 `ALTER TABLE ... UPDATE|DELETE|MATERIALIZE INDEX|MATERIALIZE PROJECTION|MATERIALIZE COLUMN|MATERIALIZE STATISTICS` 查询(统称为 [mutations](../../sql-reference/statements/alter/index.md/#mutations))。 - -可能的取值: - -| 值 | 描述 | -|----|----------------------------------------------------------------------------------------------------------------------------------------------------------| -| `0` | mutation 异步执行。 | -| `1` | 查询会等待当前服务器上的所有 mutation 完成。 | -| `2` | 查询会等待所有副本(如果存在)上的所有 mutation 完成。 | -| `3` | 查询只会等待活动副本。仅对 `SharedMergeTree` 支持。对于 `ReplicatedMergeTree`,其行为与 `mutations_sync = 2` 相同。 | - -## mysql_datatypes_support_level {#mysql_datatypes_support_level} - -定义如何将 MySQL 类型转换为对应的 ClickHouse 类型。该设置是一个用逗号分隔的列表,可以包含 `decimal`、`datetime64`、`date2Date32` 或 `date2String` 的任意组合。 - -- `decimal`:在精度允许时,将 `NUMERIC` 和 `DECIMAL` 类型转换为 `Decimal`。 -- `datetime64`:当精度不为 `0` 时,将 `DATETIME` 和 `TIMESTAMP` 类型转换为 `DateTime64`,而不是 `DateTime`。 -- `date2Date32`:将 `DATE` 转换为 `Date32`,而不是 `Date`。优先级高于 `date2String`。 -- `date2String`:将 `DATE` 转换为 `String`,而不是 `Date`。会被 `datetime64` 覆盖。 - -## mysql_map_fixed_string_to_text_in_show_columns {#mysql_map_fixed_string_to_text_in_show_columns} - - - - - -启用后,ClickHouse 的 [FixedString](../../sql-reference/data-types/fixedstring.md) 数据类型将在 [SHOW COLUMNS](../../sql-reference/statements/show.md/#show_columns) 中显示为 `TEXT`。 - -仅在通过 MySQL 线协议建立连接时生效。 - -- 0 - 使用 `BLOB`。 -- 1 - 使用 `TEXT`。 - -## mysql_map_string_to_text_in_show_columns {#mysql_map_string_to_text_in_show_columns} - - - - - -启用后,ClickHouse 的 [String](../../sql-reference/data-types/string.md) 数据类型将在 [SHOW COLUMNS](../../sql-reference/statements/show.md/#show_columns) 中显示为 `TEXT`。 - -仅在通过 MySQL wire protocol 建立连接时生效。 - -- 0 - 使用 `BLOB`。 -- 1 - 使用 `TEXT`。 - -## mysql_max_rows_to_insert {#mysql_max_rows_to_insert} - - - -使用 MySQL 存储引擎进行批量插入时允许的最大行数 - -## network_compression_method {#network_compression_method} - - - -用于压缩客户端/服务器以及服务器/服务器通信数据的编解码器。 - -可能的取值: - -- `NONE` — 不进行压缩。 -- `LZ4` — 使用 LZ4 编解码器。 -- `LZ4HC` — 使用 LZ4HC 编解码器。 -- `ZSTD` — 使用 ZSTD 编解码器。 - -**另请参阅** - -- [network_zstd_compression_level](#network_zstd_compression_level) - -## network_zstd_compression_level {#network_zstd_compression_level} - - - -调整 ZSTD 压缩级别。仅在 [network_compression_method](#network_compression_method) 设置为 `ZSTD` 时生效。 - -可选值: - -- 1 到 15 之间的正整数。 - -## normalize_function_names {#normalize_function_names} - - - - - -将函数名称规范化为其标准名称 - -## number_of_mutations_to_delay {#number_of_mutations_to_delay} - - - -如果待变更的表中存在至少这么多未完成的变更,则会人为放慢该表上变更操作的执行速度。0 表示禁用。 - -## number_of_mutations_to_throw {#number_of_mutations_to_throw} - - - -如果被变更的表中未完成的 mutation 数量至少达到该值,则抛出 `Too many mutations ...` 异常。0 表示禁用。 - -## odbc_bridge_connection_pool_size {#odbc_bridge_connection_pool_size} - - - -ODBC bridge 中每个连接配置字符串对应的连接池大小。 - -## odbc_bridge_use_connection_pooling {#odbc_bridge_use_connection_pooling} - - - -在 ODBC bridge 中启用连接池功能。若设置为 false,则每次都会新建一个连接。 - -## offset - - - -设置在开始从查询返回行之前要跳过的行数。它会在由 [OFFSET](/sql-reference/statements/select/offset) 子句设置的偏移量基础上进行调整,因此最终偏移量为这两个值之和。 - -可能的取值: - -* 0 — 不跳过任何行。 -* 正整数。 - -**示例** - -输入表: - -```sql -CREATE TABLE test (i UInt64) ENGINE = MergeTree() ORDER BY i; -INSERT INTO test SELECT number FROM numbers(500); -``` - -查询: - -```sql -SET limit = 5; -SET offset = 7; -SELECT * FROM test LIMIT 10 OFFSET 100; -``` - -结果: - -```text -┌───i─┐ -│ 107 │ -│ 108 │ -│ 109 │ -└─────┘ -``` - - -## opentelemetry_start_trace_probability {#opentelemetry_start_trace_probability} - - - -设置在执行查询时,如果未提供父级 [trace context](https://www.w3.org/TR/trace-context/),ClickHouse 可以开始一个 trace 的概率。 - -可能的取值: - -- 0 — 对所有执行的查询禁用 trace(在未提供父级 trace context 的情况下)。 -- 在区间 [0..1] 内的正浮点数。例如,如果设置值为 `0,5`,则 ClickHouse 平均可以为一半的查询开始一个 trace。 -- 1 — 对所有执行的查询启用 trace。 - -## opentelemetry_trace_cpu_scheduling {#opentelemetry_trace_cpu_scheduling} - - - - - -收集与工作负载抢占式 CPU 调度相关的 OpenTelemetry span。 - -## opentelemetry_trace_processors {#opentelemetry_trace_processors} - - - -为处理器采集 OpenTelemetry Span。 - -## optimize_aggregation_in_order {#optimize_aggregation_in_order} - - - -启用在 [MergeTree](../../engines/table-engines/mergetree-family/mergetree.md) 表中按对应顺序聚合数据时,对 [SELECT](../../sql-reference/statements/select/index.md) 查询中的 [GROUP BY](/sql-reference/statements/select/group-by) 的优化。 - -可能的取值: - -- 0 — 禁用 `GROUP BY` 优化。 -- 1 — 启用 `GROUP BY` 优化。 - -**另请参阅** - -- [GROUP BY 优化](/sql-reference/statements/select/group-by#group-by-optimization-depending-on-table-sorting-key) - -## optimize_aggregators_of_group_by_keys {#optimize_aggregators_of_group_by_keys} - - - -在 SELECT 子句中消除对 GROUP BY 键使用的 min/max/any/anyLast 聚合函数 - -## optimize_and_compare_chain {#optimize_and_compare_chain} - - - - - -在 AND 链中补充常量比较条件,以增强过滤能力。支持运算符 `<`, `<=`, `>`, `>=`, `=` 及其组合使用。例如,`(a < b) AND (b < c) AND (c < 5)` 会扩展为 `(a < b) AND (b < c) AND (c < 5) AND (b < 5) AND (a < 5)`。 - -## optimize_append_index {#optimize_append_index} - - - -使用[约束](../../sql-reference/statements/create/table.md/#constraints)来附加索引条件。默认值为 `false`。 - -可能的取值: - -- true, false - -## optimize_arithmetic_operations_in_aggregate_functions {#optimize_arithmetic_operations_in_aggregate_functions} - - - -将算术运算从聚合函数中移出 - -## optimize_const_name_size {#optimize_const_name_size} - - - - - -将常量替换为标量,并对大型常量使用其哈希值作为名称(大小根据名称长度进行估算)。 - -可能的取值: - -- 正整数 — 名称的最大长度, -- 0 — 始终进行替换, -- 负整数 — 从不进行替换。 - -## optimize_count_from_files {#optimize_count_from_files} - - - -启用或禁用对不同输入格式文件的行数统计优化。适用于表函数/引擎 `file`/`s3`/`url`/`hdfs`/`azureBlobStorage`。 - -可能的值: - -- 0 — 禁用优化。 -- 1 — 启用优化。 - -## optimize_distinct_in_order {#optimize_distinct_in_order} - - - -当 `DISTINCT` 子句中的某些列构成排序的前缀时,启用 DISTINCT 优化。例如,在 MergeTree 表中作为排序键的前缀,或在 `ORDER BY` 子句中作为前缀。 - -## optimize_distributed_group_by_sharding_key {#optimize_distributed_group_by_sharding_key} - - - -通过避免在发起查询的服务器上执行代价高昂的聚合,来优化 `GROUP BY sharding_key` 查询(这将降低在发起端服务器上执行该查询时的内存使用)。 - -支持如下类型的查询(以及它们之间的任意组合): - -- `SELECT DISTINCT [..., ]sharding_key[, ...] FROM dist` -- `SELECT ... FROM dist GROUP BY sharding_key[, ...]` -- `SELECT ... FROM dist GROUP BY sharding_key[, ...] ORDER BY x` -- `SELECT ... FROM dist GROUP BY sharding_key[, ...] LIMIT 1` -- `SELECT ... FROM dist GROUP BY sharding_key[, ...] LIMIT 1 BY x` - -不支持如下类型的查询(将来可能会支持其中的部分类型): - -- `SELECT ... GROUP BY sharding_key[, ...] WITH TOTALS` -- `SELECT ... GROUP BY sharding_key[, ...] WITH ROLLUP` -- `SELECT ... GROUP BY sharding_key[, ...] WITH CUBE` -- `SELECT ... GROUP BY sharding_key[, ...] SETTINGS extremes=1` - -可能的取值: - -- 0 — 禁用。 -- 1 — 启用。 - -另请参阅: - -- [distributed_group_by_no_merge](#distributed_group_by_no_merge) -- [distributed_push_down_limit](#distributed_push_down_limit) -- [optimize_skip_unused_shards](#optimize_skip_unused_shards) - -:::note -当前该设置依赖 `optimize_skip_unused_shards`(原因是将来它可能会默认启用,而只有当数据是通过 Distributed 表写入、即根据 sharding_key 进行分片分布时,它才能正确工作)。 -::: - -## optimize_empty_string_comparisons {#optimize_empty_string_comparisons} - - - - - -将类似 col = '' 或 '' = col 的表达式转换为 empty(col),将 col != '' 或 '' != col 的表达式转换为 notEmpty(col), -仅在 col 的类型为 String 或 FixedString 时生效。 - -## optimize_extract_common_expressions {#optimize_extract_common_expressions} - - - - - -允许从 WHERE、PREWHERE、ON、HAVING 和 QUALIFY 表达式中的析取式里提取公共子表达式。类似 `(A AND B) OR (A AND C)` 的逻辑表达式可以被改写为 `A AND (B OR C)`,这可能有助于利用: - -- 简单过滤表达式中的索引 -- 将 CROSS JOIN 转换为 INNER JOIN 的优化 - -## optimize_functions_to_subcolumns {#optimize_functions_to_subcolumns} - - - - - -启用或禁用一种优化:将某些函数改为通过读取子列来实现,从而减少需要读取的数据量。 - -可以进行转换的函数包括: - -- 将 [length](/sql-reference/functions/array-functions#length) 转换为读取 [size0](../../sql-reference/data-types/array.md/#array-size) 子列。 -- 将 [empty](/sql-reference/functions/array-functions#empty) 转换为读取 [size0](../../sql-reference/data-types/array.md/#array-size) 子列。 -- 将 [notEmpty](/sql-reference/functions/array-functions#notEmpty) 转换为读取 [size0](../../sql-reference/data-types/array.md/#array-size) 子列。 -- 将 [isNull](/sql-reference/functions/functions-for-nulls#isNull) 转换为读取 [null](../../sql-reference/data-types/nullable.md/#finding-null) 子列。 -- 将 [isNotNull](/sql-reference/functions/functions-for-nulls#isNotNull) 转换为读取 [null](../../sql-reference/data-types/nullable.md/#finding-null) 子列。 -- 将 [count](/sql-reference/aggregate-functions/reference/count) 转换为读取 [null](../../sql-reference/data-types/nullable.md/#finding-null) 子列。 -- 将 [mapKeys](/sql-reference/functions/tuple-map-functions#mapkeys) 转换为读取 [keys](/sql-reference/data-types/map#reading-subcolumns-of-map) 子列。 -- 将 [mapValues](/sql-reference/functions/tuple-map-functions#mapvalues) 转换为读取 [values](/sql-reference/data-types/map#reading-subcolumns-of-map) 子列。 - -可能的取值: - -- 0 — 禁用优化。 -- 1 — 启用优化。 - -## optimize_group_by_constant_keys {#optimize_group_by_constant_keys} - - - - - -当数据块中的所有分组键都是常量时,对 GROUP BY 进行优化 - -## optimize_group_by_function_keys {#optimize_group_by_function_keys} - - - -消除 GROUP BY 子句中对其他键的函数 - -## optimize_if_chain_to_multiif {#optimize_if_chain_to_multiif} - - - -将 if(cond1, then1, if(cond2, ...)) 链替换为 multiIf。当前对数值类型不具备性能优势。 - -## optimize_if_transform_strings_to_enum {#optimize_if_transform_strings_to_enum} - - - -将 `if` 和 `transform` 中的字符串类型参数替换为枚举。默认禁用,因为它可能会在分布式查询中引入不一致的更改,进而导致查询失败。 - -## optimize_injective_functions_in_group_by {#optimize_injective_functions_in_group_by} - - - - - -在 GROUP BY 部分用其参数替换单射函数 - -## optimize_injective_functions_inside_uniq {#optimize_injective_functions_inside_uniq} - - - -删除 `uniq*()` 函数内部的一元单射函数。 - -## optimize_min_equality_disjunction_chain_length {#optimize_min_equality_disjunction_chain_length} - - - -表达式 `expr = x1 OR ... expr = xN` 能够被执行优化时所需的最小长度 - -## optimize_min_inequality_conjunction_chain_length {#optimize_min_inequality_conjunction_chain_length} - - - -表达式 `expr <> x1 AND ... expr <> xN` 触发优化所需的最小长度。 - -## optimize_move_to_prewhere {#optimize_move_to_prewhere} - - - -启用或禁用在 [SELECT](../../sql-reference/statements/select/index.md) 查询中自动进行 [PREWHERE](../../sql-reference/statements/select/prewhere.md) 优化。 - -仅对 [*MergeTree](../../engines/table-engines/mergetree-family/index.md) 表生效。 - -可能的取值: - -- 0 — 禁用自动 `PREWHERE` 优化。 -- 1 — 启用自动 `PREWHERE` 优化。 - -## optimize_move_to_prewhere_if_final {#optimize_move_to_prewhere_if_final} - - - -在带有 [FINAL](/sql-reference/statements/select/from#final-modifier) 修饰符的 [SELECT](../../sql-reference/statements/select/index.md) 查询中启用或禁用自动 [PREWHERE](../../sql-reference/statements/select/prewhere.md) 优化。 - -仅适用于 [*MergeTree](../../engines/table-engines/mergetree-family/index.md) 表。 - -可能的取值: - -- 0 — 禁用在带有 `FINAL` 修饰符的 `SELECT` 查询中的自动 `PREWHERE` 优化。 -- 1 — 启用在带有 `FINAL` 修饰符的 `SELECT` 查询中的自动 `PREWHERE` 优化。 - -**另请参阅** - -- [optimize_move_to_prewhere](#optimize_move_to_prewhere) 设置 - -## optimize_multiif_to_if {#optimize_multiif_to_if} - - - -将只包含一个条件的 `multiIf` 替换为 `if`。 - -## optimize_normalize_count_variants {#optimize_normalize_count_variants} - - - - - -默认将语义等同于 count() 的聚合函数重写为 count()。 - -## optimize_on_insert - - - - - -在插入之前启用或禁用数据转换,就如同对该数据块已经执行了合并操作(依据表引擎)。 - -可选值: - -* 0 — 禁用。 -* 1 — 启用。 - -**示例** - -启用与禁用时的区别: - -查询: - -```sql -SET optimize_on_insert = 1; - -CREATE TABLE test1 (`FirstTable` UInt32) ENGINE = ReplacingMergeTree ORDER BY FirstTable; - -INSERT INTO test1 SELECT number % 2 FROM numbers(5); - -SELECT * FROM test1; - -SET optimize_on_insert = 0; - -CREATE TABLE test2 (`SecondTable` UInt32) ENGINE = ReplacingMergeTree ORDER BY SecondTable; - -INSERT INTO test2 SELECT number % 2 FROM numbers(5); - -SELECT * FROM test2; -``` - -结果: - -```text -┌─FirstTable─┐ -│ 0 │ -│ 1 │ -└────────────┘ - -┌─SecondTable─┐ -│ 0 │ -│ 0 │ -│ 0 │ -│ 1 │ -│ 1 │ -└─────────────┘ -``` - -请注意,此设置会影响[物化视图](/sql-reference/statements/create/view#materialized-view)的行为。 - - -## optimize_or_like_chain {#optimize_or_like_chain} - - - -将多个 OR LIKE 条件优化为 multiMatchAny。默认情况下不应启用此优化,因为在某些情况下它会影响索引分析。 - -## optimize_qbit_distance_function_reads {#optimize_qbit_distance_function_reads} - - - - - -将 `QBit` 数据类型的距离函数替换为等效函数,使其仅从存储中读取参与计算所需的列。 - -## optimize_read_in_order {#optimize_read_in_order} - - - -在对 [MergeTree](../../engines/table-engines/mergetree-family/mergetree.md) 表执行 [SELECT](../../sql-reference/statements/select/index.md) 查询读取数据时,启用 [ORDER BY](/sql-reference/statements/select/order-by#optimization-of-data-reading) 优化。 - -可选值: - -- 0 — 禁用 `ORDER BY` 优化。 -- 1 — 启用 `ORDER BY` 优化。 - -**另请参阅** - -- [ORDER BY 子句](/sql-reference/statements/select/order-by#optimization-of-data-reading) - -## optimize_read_in_window_order {#optimize_read_in_window_order} - - - -在窗口子句中启用基于 ORDER BY 的优化,以便从 MergeTree 表中按相应顺序读取数据。 - -## optimize_redundant_functions_in_order_by {#optimize_redundant_functions_in_order_by} - - - -当某个函数的参数也出现在 ORDER BY 中时,从 ORDER BY 中移除该函数 - -## optimize_respect_aliases {#optimize_respect_aliases} - - - -如果设置为 true,则在 WHERE/GROUP BY/ORDER BY 中会考虑别名,有助于分区裁剪、二级索引,以及 optimize_aggregation_in_order、optimize_read_in_order、optimize_trivial_count 的优化。 - -## optimize_rewrite_aggregate_function_with_if {#optimize_rewrite_aggregate_function_with_if} - - - -在逻辑等价的情况下,将以 if 表达式作为参数的聚合函数重写为其他形式。 -例如,`avg(if(cond, col, null))` 可以被重写为 `avgOrNullIf(cond, col)`。这可能提升性能。 - -:::note -仅在启用了 analyzer(`enable_analyzer = 1`)时才支持。 -::: - -## optimize_rewrite_array_exists_to_has {#optimize_rewrite_array_exists_to_has} - - - -在两者逻辑等价时,将 arrayExists() 函数重写为 has()。例如,arrayExists(x -> x = 1, arr) 可以重写为 has(arr, 1)。 - -## optimize_rewrite_like_perfect_affix {#optimize_rewrite_like_perfect_affix} - - - - - -将具有精确前缀或后缀匹配的 LIKE 表达式(例如 `col LIKE 'ClickHouse%'`)重写为 `startsWith` 或 `endsWith` 函数形式(例如 `startsWith(col, 'ClickHouse')`)。 - -## optimize_rewrite_regexp_functions {#optimize_rewrite_regexp_functions} - - - - - -将与正则表达式相关的函数改写为更简单、更高效的形式 - -## optimize_rewrite_sum_if_to_count_if {#optimize_rewrite_sum_if_to_count_if} - - - - - -在逻辑上等价时,将 sumIf() 和 sum(if()) 函数重写为 countIf() 函数 - -## optimize_skip_merged_partitions {#optimize_skip_merged_partitions} - - - -在仅存在一个 `level > 0` 且未触发过期 TTL 的数据片段(part)时,用于启用或禁用对 [OPTIMIZE TABLE ... FINAL](../../sql-reference/statements/optimize.md) 查询的优化。 - -- `OPTIMIZE TABLE ... FINAL SETTINGS optimize_skip_merged_partitions=1` - -默认情况下,即使只有单个数据片段,`OPTIMIZE TABLE ... FINAL` 查询也会重写该数据片段。 - -可能的取值: - -- 1 - 启用优化。 -- 0 - 禁用优化。 - -## optimize_skip_unused_shards {#optimize_skip_unused_shards} - - - -启用或禁用针对在 `WHERE/PREWHERE` 中包含分片键条件的 [SELECT](../../sql-reference/statements/select/index.md) 查询跳过无关分片的功能(假定数据按照分片键进行分布,否则查询会产生不正确的结果)。 - -可能的值: - -- 0 — 禁用。 -- 1 — 启用。 - -## optimize_skip_unused_shards_limit {#optimize_skip_unused_shards_limit} - - - -分片键值数量的限制,当达到该限制时,将关闭 `optimize_skip_unused_shards`。 - -过多的取值可能需要大量的处理资源,而收益却存疑,因为如果在 `IN (...)` 中存在海量取值,那么查询很可能无论如何都会被发送到所有分片上。 - -## optimize_skip_unused_shards_nesting {#optimize_skip_unused_shards_nesting} - - - -根据分布式查询的嵌套层级控制 [`optimize_skip_unused_shards`](#optimize_skip_unused_shards) 的行为(因此仍然需要启用 [`optimize_skip_unused_shards`](#optimize_skip_unused_shards)),适用于一个 `Distributed` 表再查询另一个 `Distributed` 表的情况。 - -可选值: - -- 0 — 禁用该限制,`optimize_skip_unused_shards` 在所有嵌套层级始终生效。 -- 1 — 仅在第 1 层启用 `optimize_skip_unused_shards`。 -- 2 — 在最多第 2 层启用 `optimize_skip_unused_shards`。 - -## optimize_skip_unused_shards_rewrite_in {#optimize_skip_unused_shards_rewrite_in} - - - -对远程分片的查询重写 IN 子句,排除不属于该分片的值(需要启用 optimize_skip_unused_shards)。 - -可能的取值: - -- 0 — 禁用。 -- 1 — 启用。 - -## optimize_sorting_by_input_stream_properties {#optimize_sorting_by_input_stream_properties} - - - -根据输入流的排序属性优化排序 - -## optimize_substitute_columns {#optimize_substitute_columns} - - - -是否使用[约束](../../sql-reference/statements/create/table.md/#constraints)进行列替换。默认值为 `false`。 - -可能的取值: - -- true, false - -## optimize_syntax_fuse_functions - - - -启用将具有相同参数的聚合函数进行合并。它会将包含至少两个参数相同且来自 [sum](/sql-reference/aggregate-functions/reference/sum)、[count](/sql-reference/aggregate-functions/reference/count) 或 [avg](/sql-reference/aggregate-functions/reference/avg) 的聚合函数的查询,重写为使用 [sumCount](/sql-reference/aggregate-functions/reference/sumcount)。 - -可能的取值: - -* 0 — 不合并参数相同的函数。 -* 1 — 合并参数相同的函数。 - -**示例** - -查询: - -```sql -CREATE TABLE fuse_tbl(a Int8, b Int8) Engine = Log; -SET optimize_syntax_fuse_functions = 1; -EXPLAIN SYNTAX SELECT sum(a), sum(b), count(b), avg(b) from fuse_tbl FORMAT TSV; -``` - -结果: - -```text -SELECT - sum(a), - sumCount(b).1, - sumCount(b).2, - (sumCount(b).1) / (sumCount(b).2) -FROM fuse_tbl -``` - - -## optimize_throw_if_noop {#optimize_throw_if_noop} - - - -启用或禁用在 [OPTIMIZE](../../sql-reference/statements/optimize.md) 查询未执行任何合并操作时抛出异常。 - -默认情况下,即使 `OPTIMIZE` 没有执行任何操作也会成功返回。通过此设置,您可以区分这两种情况,并在异常消息中获取原因。 - -可能的取值: - -- 1 — 启用抛出异常。 -- 0 — 禁用抛出异常。 - -## optimize_time_filter_with_preimage {#optimize_time_filter_with_preimage} - - - - col >= '2023-01-01' AND col <= '2023-12-31')"}]}]}/> - -通过将函数谓词改写为无需类型转换的等价比较来优化 Date 和 DateTime 谓词(例如 `toYear(col) = 2023 -> col >= '2023-01-01' AND col <= '2023-12-31'`) - -## optimize_trivial_approximate_count_query {#optimize_trivial_approximate_count_query} - - - -对支持此类估算的存储(例如 EmbeddedRocksDB)在简单 `count` 查询优化时使用近似值。 - -可能的取值: - -- 0 — 禁用优化。 - - 1 — 启用优化。 - -## optimize_trivial_count_query {#optimize_trivial_count_query} - - - -启用或禁用对简单查询 `SELECT count() FROM table` 的优化,该优化基于 MergeTree 的元数据。如果需要使用行级安全性(row-level security),请禁用此设置。 - -可能的取值: - -- 0 — 优化已禁用。 - - 1 — 优化已启用。 - - 2 — 仅在安全上下文外启用优化。 - -另请参阅: - -- [optimize_functions_to_subcolumns](#optimize_functions_to_subcolumns) - -## optimize_trivial_insert_select {#optimize_trivial_insert_select} - - - - - -优化简单形式的 `INSERT INTO table SELECT ... FROM TABLES` 查询 - -## optimize_uniq_to_count {#optimize_uniq_to_count} - - - -如果子查询包含 `distinct` 或 `group by` 子句,则将 `uniq` 及其变体函数(`uniqUpTo` 除外)重写为 `count`。 - -## optimize_use_implicit_projections {#optimize_use_implicit_projections} - - - -自动使用隐式投影来执行 SELECT 查询 - -## optimize_use_projection_filtering {#optimize_use_projection_filtering} - - - - - -即使未选择使用投影来执行 SELECT 查询,也允许使用投影过滤数据分片范围。 - -## optimize_use_projections {#optimize_use_projections} - -**别名**:`allow_experimental_projection_optimization` - - - -在处理 `SELECT` 查询时启用或禁用[投影(projection)](../../engines/table-engines/mergetree-family/mergetree.md/#projections)优化。 - -可选值: - -- 0 — 禁用投影优化。 -- 1 — 启用投影优化。 - -## optimize_using_constraints {#optimize_using_constraints} - - - -使用[约束](../../sql-reference/statements/create/table.md/#constraints)进行查询优化。默认值为 `false`。 - -可选值: - -- true, false - -## os_threads_nice_value_materialized_view {#os_threads_nice_value_materialized_view} - - - - - -用于物化视图线程的 Linux nice 值。数值越低,CPU 优先级越高。 - -需要 CAP_SYS_NICE 能力,否则该设置不会生效。 - -可能的取值范围:-20 到 19。 - -## os_threads_nice_value_query {#os_threads_nice_value_query} - -**别名**: `os_thread_priority` - - - - - -用于查询处理线程的 Linux nice 值。值越低表示 CPU 优先级越高。 - -需要 CAP_SYS_NICE 权限,否则不会生效(no-op)。 - -可能的取值范围:-20 到 19。 - -## output_format_compression_level {#output_format_compression_level} - - - - - -当查询输出被压缩时使用的默认压缩级别。该设置在 `SELECT` 查询使用 `INTO OUTFILE` 时,或在写入表函数 `file`、`url`、`hdfs`、`s3` 或 `azureBlobStorage` 时生效。 - -可选值:从 `1` 到 `22` - -## output_format_compression_zstd_window_log {#output_format_compression_zstd_window_log} - - - - - -可在输出压缩方式为 `zstd` 时使用。如果大于 `0`,此设置会显式指定压缩窗口大小(`2` 的幂),并为 zstd 压缩启用 long-range 模式。这有助于获得更好的压缩比。 - -可选值:非负数。请注意,如果该值过小或过大,`zstdlib` 会抛出异常。典型取值范围为从 `20`(窗口大小 = `1MB`)到 `30`(窗口大小 = `1GB`)。 - -## output_format_parallel_formatting {#output_format_parallel_formatting} - - - -启用或禁用数据格式的并行格式化。仅支持 [TSV](/interfaces/formats/TabSeparated)、[TSKV](/interfaces/formats/TSKV)、[CSV](/interfaces/formats/CSV) 和 [JSONEachRow](/interfaces/formats/JSONEachRow) 格式。 - -可选值: - -- 1 — 启用。 -- 0 — 禁用。 - -## page_cache_block_size {#page_cache_block_size} - - - - - -用于在用户空间页缓存中存储文件块的大小(以字节为单位)。所有通过缓存的读取都会向上取整为此大小的倍数。 - -此设置可以在单个查询级别进行调整,但使用不同块大小的缓存条目不能复用。更改此设置会使缓存中的现有条目实际失效。 - -较高的值(例如 1 MiB)适用于高吞吐量查询,而较低的值(例如 64 KiB)适用于低延迟的点查询。 - -## page_cache_inject_eviction {#page_cache_inject_eviction} - - - - - -用户态页面缓存有时会随机使部分页面失效。用于测试。 - -## page_cache_lookahead_blocks {#page_cache_lookahead_blocks} - - - - - -在用户态页面缓存未命中的情况下,如果这些块当前也不在缓存中,则一次性从底层存储中读取最多这么多连续的块。每个块的大小为 page_cache_block_size 字节。 - -更大的取值有利于高吞吐量查询,而低延迟的点查询在不进行预读(readahead)时效果会更好。 - -## parallel_distributed_insert_select {#parallel_distributed_insert_select} - - - - - -启用并行分布式的 `INSERT ... SELECT` 查询功能。 - -如果执行 `INSERT INTO distributed_table_a SELECT ... FROM distributed_table_b` 查询,且两个表使用相同的集群,并且要么都为[复制表](../../engines/table-engines/mergetree-family/replication.md),要么都为非复制表,则该查询会在每个分片上本地执行。 - -可能的取值: - -- `0` — 禁用。 -- `1` — `SELECT` 将在分布式引擎底层表的每个分片上执行。 -- `2` — `SELECT` 和 `INSERT` 将在分布式引擎底层表的每个分片上分别执行/写入。 - -使用此设置时,还需要将 `enable_parallel_replicas` 设置为 `1`。 - -## parallel_hash_join_threshold {#parallel_hash_join_threshold} - - - - - -当采用基于哈希的 join 算法时,此阈值用于在 `hash` 和 `parallel_hash` 之间进行选择(仅在能够估算右侧表大小时才会生效)。 -当我们知道右侧表大小低于该阈值时,将使用前者。 - -## parallel_replica_offset {#parallel_replica_offset} - - - - - -这是一个内部参数,不应被直接使用,用于体现“parallel replicas”模式的实现细节。对于参与并行副本查询处理的副本,其索引上的该参数会由分布式查询的发起端服务器自动设置。 - -## parallel_replicas_allow_in_with_subquery {#parallel_replicas_allow_in_with_subquery} - - - - - - - -如果为 true,则 `IN` 的子查询会在每个从副本上执行。 - -## parallel_replicas_connect_timeout_ms {#parallel_replicas_connect_timeout_ms} - - - - - - - -以毫秒为单位,指定在使用并行副本执行查询时连接到远程副本的超时时间。如果超时时间已到,相应的副本将不会用于执行该查询。 - -## parallel_replicas_count {#parallel_replicas_count} - - - - - -这是一个不应直接使用的内部参数,用于表示“parallel replicas”模式的实现细节。对于分布式查询,该参数会由发起查询的服务器自动设置为参与查询处理的并行副本数量。 - -## parallel_replicas_custom_key {#parallel_replicas_custom_key} - - - -一个任意的整数表达式,可用于在特定表的副本之间划分工作负载。 -该值可以是任意整数表达式。 - -更推荐使用基于主键的简单表达式。 - -如果在仅包含单个分片但该分片有多个副本的集群上使用此设置,这些副本将被转换为虚拟分片。 -否则,其行为与 `SAMPLE` 键相同,即会为每个分片使用多个副本。 - -## parallel_replicas_custom_key_range_lower {#parallel_replicas_custom_key_range_lower} - - - - - - - -允许过滤器类型 `range` 基于自定义范围 `[parallel_replicas_custom_key_range_lower, INT_MAX]` 在副本之间平均拆分工作负载。 - -与 [parallel_replicas_custom_key_range_upper](#parallel_replicas_custom_key_range_upper) 结合使用时,它允许过滤器在范围 `[parallel_replicas_custom_key_range_lower, parallel_replicas_custom_key_range_upper]` 上,将工作在副本之间平均拆分。 - -注意:此设置不会在查询处理期间导致额外的数据被过滤,而只是改变在进行并行处理时,范围过滤器将范围 `[0, INT_MAX]` 拆分的位置。 - -## parallel_replicas_custom_key_range_upper {#parallel_replicas_custom_key_range_upper} - - - - - - - -允许过滤器类型 `range` 基于自定义范围 `[0, parallel_replicas_custom_key_range_upper]` 在副本之间平均划分工作量。值为 0 时将禁用上界,此时会将自定义键表达式的最大值作为上界。 - -与 [parallel_replicas_custom_key_range_lower](#parallel_replicas_custom_key_range_lower) 一起使用时,可以使过滤器在范围 `[parallel_replicas_custom_key_range_lower, parallel_replicas_custom_key_range_upper]` 内,将工作均匀分配到各个副本上。 - -注意:此设置不会在查询处理期间额外过滤任何数据,而是仅改变在进行并行处理时,范围过滤器将区间 `[0, INT_MAX]` 拆分为多个子区间的位置。 - -## parallel_replicas_for_cluster_engines {#parallel_replicas_for_cluster_engines} - - - - - -将表函数引擎替换为其对应的 -Cluster 版本 - -## parallel_replicas_for_non_replicated_merge_tree {#parallel_replicas_for_non_replicated_merge_tree} - - - - - -如果为 true,ClickHouse 也会对非复制的 MergeTree 表使用并行副本算法 - -## parallel_replicas_index_analysis_only_on_coordinator {#parallel_replicas_index_analysis_only_on_coordinator} - - - - - - - -仅在副本协调器上执行索引分析,并跳过其他副本。仅在启用 parallel_replicas_local_plan 时生效 - -## parallel_replicas_insert_select_local_pipeline {#parallel_replicas_insert_select_local_pipeline} - - - - - - - -在使用并行副本的分布式 INSERT SELECT 中使用本地 pipeline - -## parallel_replicas_local_plan {#parallel_replicas_local_plan} - - - - - - - -为本地副本构建本地执行计划 - -## parallel_replicas_mark_segment_size {#parallel_replicas_mark_segment_size} - - - - - - - -将数据分片在逻辑上划分为若干段,以便在副本之间分配用于并行读取。此设置用于控制这些段的大小。除非完全明确其影响,否则不建议修改。取值范围应为 [128, 16384]。 - -## parallel_replicas_min_number_of_rows_per_replica {#parallel_replicas_min_number_of_rows_per_replica} - - - - - -将查询中可用的副本数量限制为(预估待读取的行数 / min_number_of_rows_per_replica)。但最大副本数仍受 `max_parallel_replicas` 的限制。 - -## parallel_replicas_mode {#parallel_replicas_mode} - - - - - - - -并行副本在使用自定义键时采用的过滤器类型。`default` —— 对自定义键使用取模运算;`range` —— 基于自定义键值类型的所有可能取值,对自定义键应用范围过滤。 - -## parallel_replicas_only_with_analyzer {#parallel_replicas_only_with_analyzer} - - - - - - - -必须启用 analyzer 才能使用并行副本功能。如果禁用 analyzer,即使启用了从副本并行读取,查询执行也会回退为本地执行。不支持在未启用 analyzer 的情况下使用并行副本。 - -## parallel_replicas_prefer_local_join {#parallel_replicas_prefer_local_join} - - - - - - - -如果为 true,且可以使用并行副本算法执行 JOIN,并且 JOIN 右侧部分的所有存储都是 *MergeTree,则会使用本地 JOIN 而不是 GLOBAL JOIN。 - -## parallel_replicas_support_projection {#parallel_replicas_support_projection} - - - - - - - -投影优化可应用于并行副本。仅在启用了 `parallel_replicas_local_plan` 且未启用 `aggregation_in_order` 时生效。 - -## parallel_view_processing {#parallel_view_processing} - - - -启用并发向已附加的视图推送数据,而非顺序推送。 - -## parallelize_output_from_storages {#parallelize_output_from_storages} - - - - - -为从存储读取的步骤启用输出并行化。如果可能,它允许在从存储读取之后立即对查询进行并行处理。 - -## parsedatetime_e_requires_space_padding {#parsedatetime_e_requires_space_padding} - - - - - -函数 `parseDateTime` 中的格式说明符 `%e` 要求一位数的日期使用空格填充,例如 `' 2'` 可以被接受,而 `'2'` 会报错。 - -## parsedatetime_parse_without_leading_zeros {#parsedatetime_parse_without_leading_zeros} - - - - - -在函数 `parseDateTime` 中,格式符 `%c`、`%l` 和 `%k` 用于解析不带前导零的月份和小时。 - -## partial_merge_join_left_table_buffer_bytes {#partial_merge_join_left_table_buffer_bytes} - - - -如果不为 0,则在部分合并连接(partial merge join)中会将左表的数据块合并为更大的数据块。每个执行连接的线程最多会使用指定内存的 2 倍。 - -## partial_merge_join_rows_in_right_blocks {#partial_merge_join_rows_in_right_blocks} - - - -在使用部分归并 JOIN 算法执行 [JOIN](../../sql-reference/statements/select/join.md) 查询时,限制右侧 JOIN 数据块的大小(行数)。 - -ClickHouse 服务器: - -1. 将右侧 JOIN 数据拆分为多个数据块,每个数据块最多包含指定数量的行。 -2. 使用每个数据块的最小值和最大值为其建立索引。 -3. 在可能的情况下,将已准备好的数据块卸载到磁盘。 - -可能的取值: - -- 任意正整数。推荐取值范围:\[1000, 100000\]。 - -## partial_result_on_first_cancel {#partial_result_on_first_cancel} - - - -允许在取消查询后返回部分结果。 - -## parts_to_delay_insert {#parts_to_delay_insert} - - - -如果目标表在某个分区中至少包含这么多处于活动状态的分片,则会人为地减慢对该表的插入操作。 - -## parts_to_throw_insert {#parts_to_throw_insert} - - - -如果目标表某个分区中的活动数据片段数量超过该值,则抛出 “Too many parts ...” 异常。 - -## per_part_index_stats {#per_part_index_stats} - - - - - -记录每个分片(part)的索引统计信息 - -## poll_interval {#poll_interval} - - - -在服务器端的查询等待循环中阻塞指定的秒数。 - -## postgresql_connection_attempt_timeout {#postgresql_connection_attempt_timeout} - - - - - -单次尝试连接 PostgreSQL 端点的超时时间(以秒为单位)。 -该值会作为连接 URL 中的 `connect_timeout` 参数传递。 - -## postgresql_connection_pool_auto_close_connection {#postgresql_connection_pool_auto_close_connection} - - - -在将连接归还到连接池之前关闭该连接。 - -## postgresql_connection_pool_retries {#postgresql_connection_pool_retries} - - - - - -PostgreSQL 表引擎和数据库引擎中连接池 push/pop 操作的重试次数。 - -## postgresql_connection_pool_size {#postgresql_connection_pool_size} - - - -PostgreSQL 表引擎和数据库引擎使用的连接池大小。 - -## postgresql_connection_pool_wait_timeout {#postgresql_connection_pool_wait_timeout} - - - -PostgreSQL 表引擎和数据库引擎在连接池为空时对 push/pop 操作的等待超时时间。默认情况下,在连接池为空时将一直阻塞等待。 - -## postgresql_fault_injection_probability {#postgresql_fault_injection_probability} - - - - - -内部(用于复制的)PostgreSQL 查询被故意注入故障而失败的近似概率。有效取值范围为 [0.0f, 1.0f]。 - -## prefer_column_name_to_alias - - - -启用或禁用是否在查询表达式和子句中使用原始列名而不是别名。此设置在别名与列名相同时尤为重要,参见 [Expression Aliases](/sql-reference/syntax#notes-on-usage)。启用该设置可以使 ClickHouse 中的别名语法规则与大多数其他数据库引擎更加兼容。 - -可能的取值: - -* 0 — 使用别名替换列名。 -* 1 — 不使用别名替换列名。 - -**示例** - -启用与禁用时的差异: - -查询: - -```sql -SET prefer_column_name_to_alias = 0; -SELECT avg(number) AS number, max(number) FROM numbers(10); -``` - -结果: - -```text -服务器返回异常(版本 21.5.1): -代码:184. DB::Exception: 来自 localhost:9000。DB::Exception: 查询中发现聚合函数 avg(number) 嵌套在另一个聚合函数内部:处理 avg(number) AS number 时发生错误。 -``` - -查询: - -```sql -SET prefer_column_name_to_alias = 1; -SELECT avg(number) AS number, max(number) FROM numbers(10); -``` - -结果: - -```text -┌─number─┬─max(number)─┐ -│ 4.5 │ 9 │ -└────────┴─────────────┘ -``` - - -## prefer_external_sort_block_bytes {#prefer_external_sort_block_bytes} - - - - - -在外部排序时优先使用最大数据块字节数,以在合并阶段降低内存使用。 - -## prefer_global_in_and_join {#prefer_global_in_and_join} - - - -用于将 `IN`/`JOIN` 运算符替换为 `GLOBAL IN`/`GLOBAL JOIN`。 - -可能的取值: - -- 0 — 禁用。`IN`/`JOIN` 运算符不会被替换为 `GLOBAL IN`/`GLOBAL JOIN`。 -- 1 — 启用。`IN`/`JOIN` 运算符会被替换为 `GLOBAL IN`/`GLOBAL JOIN`。 - -**用法** - -尽管 `SET distributed_product_mode=global` 可以更改分布式表上的查询行为,但它不适用于本地表或来自外部资源的表。此时就可以使用 `prefer_global_in_and_join` 设置。 - -例如,我们有一些查询服务节点,这些节点上包含不适合分布式的本地表。我们需要在分布式处理期间,使用 `GLOBAL` 关键字(`GLOBAL IN`/`GLOBAL JOIN`)按需在各节点间分发这些数据。 - -`prefer_global_in_and_join` 的另一个使用场景是访问由外部引擎创建的表。该设置可以在与此类表进行 JOIN 时减少对外部源的调用次数:每个查询只调用一次。 - -**另请参阅:** - -- [分布式子查询](/sql-reference/operators/in#distributed-subqueries),了解如何使用 `GLOBAL IN`/`GLOBAL JOIN` - -## prefer_localhost_replica {#prefer_localhost_replica} - - - -启用或禁用在处理分布式查询时优先使用本地主机副本。 - -可能的取值: - -- 1 — 如果存在本地主机副本,ClickHouse 始终将查询发送到本地主机副本。 -- 0 — ClickHouse 使用由 [load_balancing](#load_balancing) 设置指定的均衡策略。 - -:::note -如果在未使用 [parallel_replicas_custom_key](#parallel_replicas_custom_key) 的情况下启用 [max_parallel_replicas](#max_parallel_replicas),请禁用此设置。 -如果已设置 [parallel_replicas_custom_key](#parallel_replicas_custom_key),仅当其用于包含多个分片且每个分片有多个副本的集群时,才应禁用此设置。 -如果其用于仅有单个分片但包含多个副本的集群,禁用此设置会产生负面影响。 -::: - -## prefer_warmed_unmerged_parts_seconds {#prefer_warmed_unmerged_parts_seconds} - - - - - -仅在 ClickHouse Cloud 中生效。如果一个已合并的 part 创建时间少于指定的秒数且尚未被预热(参见 [cache_populated_by_fetch](merge-tree-settings.md/#cache_populated_by_fetch)),但它的所有源 part 都是可用且已预热的,那么 SELECT 查询将改为从这些源 part 读取数据。仅适用于 Replicated-/SharedMergeTree。请注意,此设置只检查该 part 是否已被 CacheWarmer 处理;如果该 part 是被其他组件拉取到缓存中的,在 CacheWarmer 处理到它之前,它仍被视为冷的;如果它曾被预热但随后从缓存中被逐出,它仍被视为热的。 - -## preferred_block_size_bytes {#preferred_block_size_bytes} - - - -此设置用于调整用于查询处理的数据块大小,是在较为粗粒度的 `max_block_size` 设置基础上的额外细粒度调优。如果列较宽,并且在包含 `max_block_size` 行时数据块的大小可能超过指定的字节数,系统会相应减小块大小,以提升 CPU 缓存局部性。 - -## preferred_max_column_in_block_size_bytes {#preferred_max_column_in_block_size_bytes} - - - -在读取时限制块中单个列的最大大小,有助于减少缓存未命中次数。应接近 L2 缓存大小。 - -## preferred_optimize_projection_name {#preferred_optimize_projection_name} - -如果将其设置为非空字符串,ClickHouse 会尝试在查询中应用指定的投影(projection)。 - -可能的取值: - -- string:首选投影(projection)的名称 - -## prefetch_buffer_size {#prefetch_buffer_size} - - - -从文件系统读取时的预取缓冲区最大大小。 - -## print_pretty_type_names - - - - - -允许在 `DESCRIBE` 查询和 `toTypeName()` 函数中,以带缩进的易读格式输出深度嵌套的类型名称。 - -示例: - -```sql -CREATE TABLE test (a Tuple(b String, c Tuple(d Nullable(UInt64), e Array(UInt32), f Array(Tuple(g String, h Map(String, Array(Tuple(i String, j UInt64))))), k Date), l Nullable(String))) ENGINE=Memory; -DESCRIBE TABLE test FORMAT TSVRaw SETTINGS print_pretty_type_names=1; -``` - -``` -a Tuple( - b String, - c Tuple( - d Nullable(UInt64), - e Array(UInt32), - f Array(Tuple( - g String, - h Map( - String, - Array(Tuple( - i String, - j UInt64 - )) - ) - )), - k Date - ), - l Nullable(String) -) -``` - - -## priority {#priority} - - - -查询的优先级。1 表示最高优先级,数值越大优先级越低;0 表示不使用优先级。 - -## promql_database {#promql_database} - - - - - -指定 `promql` 方言使用的数据库名称。空字符串表示当前数据库。 - -## promql_evaluation_time {#promql_evaluation_time} - - - -**别名**:`evaluation_time` - - - - - -设置用于 PromQL 方言的求值时间。`auto` 表示当前时间。 - -## promql_table {#promql_table} - - - - - -指定用于 `promql` 方言的 TimeSeries 表名称。 - -## push_external_roles_in_interserver_queries {#push_external_roles_in_interserver_queries} - - - - - -在执行查询时,启用将用户角色从源节点推送到其他节点。 - -## query_cache_compress_entries {#query_cache_compress_entries} - - - -对[查询缓存](../query-cache.md)中的条目进行压缩。可以减少查询缓存的内存占用,但会降低对其进行插入和读取时的性能。 - -可能的值: - -- 0 - 禁用 -- 1 - 启用 - -## query_cache_max_entries {#query_cache_max_entries} - - - -当前用户可以在[查询缓存](../query-cache.md)中存储的查询结果数量上限。0 表示无限制。 - -可能的取值: - -- 大于等于 0 的整数。 - -## query_cache_max_size_in_bytes {#query_cache_max_size_in_bytes} - - - -当前用户在[查询缓存](../query-cache.md)中允许使用的最大内存(字节数)。0 表示不限制。 - -可能的取值: - -- 大于等于 0 的整数。 - -## query_cache_min_query_duration {#query_cache_min_query_duration} - - - -查询结果要被存储到[查询缓存](../query-cache.md)中时,查询需要运行的最短时间(以毫秒为单位)。 - -可能的取值: - -- 大于等于 0 的整数。 - -## query_cache_min_query_runs {#query_cache_min_query_runs} - - - -`SELECT` 查询在其结果可以被存入[查询缓存](../query-cache.md)之前必须执行的最小次数。 - -可能的取值: - -- 大于等于 0 的整数。 - -## query_cache_nondeterministic_function_handling {#query_cache_nondeterministic_function_handling} - - - -控制 [查询缓存](../query-cache.md) 如何处理包含 `rand()`、`now()` 等非确定性函数的 `SELECT` 查询。 - -可用值: - -- `'throw'` - 抛出异常且不缓存查询结果。 -- `'save'` - 缓存查询结果。 -- `'ignore'` - 不缓存查询结果且不抛出异常。 - -## query_cache_share_between_users {#query_cache_share_between_users} - - - -如果启用,缓存在[查询缓存](../query-cache.md)中的 `SELECT` 查询结果可以被其他用户访问。 -出于安全原因,不建议开启此设置。 - -可能的取值: - -- 0 - 禁用 -- 1 - 启用 - -## query_cache_squash_partial_results {#query_cache_squash_partial_results} - - - -将部分结果数据块合并为大小为 [max_block_size](#max_block_size) 的数据块。会降低向 [查询缓存](../query-cache.md) 执行插入操作时的性能,但可以提高缓存条目的可压缩性(参见 [query_cache_compress-entries](#query_cache_compress_entries))。 - -可能的取值: - -- 0 - 禁用 -- 1 - 启用 - -## query_cache_system_table_handling {#query_cache_system_table_handling} - - - - - -控制[查询缓存](../query-cache.md)对系统表的 `SELECT` 查询的处理方式,即对数据库 `system.*` 和 `information_schema.*` 中表的查询。 - -可选值: - -- `'throw'` - 抛出异常且不缓存查询结果。 -- `'save'` - 缓存查询结果。 -- `'ignore'` - 不缓存查询结果且不抛出异常。 - -## query_cache_tag {#query_cache_tag} - - - -一个用作[查询缓存](../query-cache.md)条目标签的字符串。 -在查询缓存中,具有不同标签的同一查询会被视为不同的查询。 - -可能的取值: - -- 任意字符串 - -## query_cache_ttl {#query_cache_ttl} - - - -在经过此处指定的秒数后,[查询缓存](../query-cache.md)中的条目会被视为过期。 - -可能的取值: - -- 大于等于 0 的正整数。 - -## query_condition_cache_store_conditions_as_plaintext {#query_condition_cache_store_conditions_as_plaintext} - - - - - -以明文形式存储 [query condition cache](/operations/query-condition-cache) 的过滤条件。 -如果启用,system.query_condition_cache 会显示原样的过滤条件,这有助于调试与缓存相关的问题。 -默认禁用,因为明文过滤条件可能会暴露敏感信息。 - -可能的取值: - -- 0 - 禁用 -- 1 - 启用 - -## query_metric_log_interval {#query_metric_log_interval} - - - - - -以毫秒为单位指定为单个查询收集 [query_metric_log](../../operations/system-tables/query_metric_log.md) 的时间间隔。 - -如果设置为任意负值,则将使用 [query_metric_log setting](/operations/server-configuration-parameters/settings#query_metric_log) 中的 `collect_interval_milliseconds` 值;如果未设置该值,则默认为 1000。 - -若要禁用对单个查询的采集,将 `query_metric_log_interval` 设置为 0。 - -默认值:-1 - -## query_plan_aggregation_in_order {#query_plan_aggregation_in_order} - - - - - -控制是否启用“按顺序聚合”的查询计划级优化。 -仅当 [`query_plan_enable_optimizations`](#query_plan_enable_optimizations) 设置为 1 时生效。 - -:::note -这是一个专家级设置,仅供开发人员在调试时使用。该设置未来可能会以向后不兼容的方式更改或被移除。 -::: - -可能的取值: - -- 0 - 禁用 -- 1 - 启用 - -## query_plan_convert_any_join_to_semi_or_anti_join {#query_plan_convert_any_join_to_semi_or_anti_join} - - - - - -当 `JOIN` 之后的过滤条件对未匹配行或匹配行始终返回 `false` 时,允许将 `ANY JOIN` 转换为 `SEMI` 或 `ANTI JOIN`。 - -## query_plan_convert_join_to_in {#query_plan_convert_join_to_in} - - - - - -允许在输出列仅依赖左表时,将 `JOIN` 转换为带有 `IN` 的子查询。对于非 ANY 类型的 JOIN(例如默认的 ALL JOIN),此操作可能导致结果不正确。 - -## query_plan_convert_outer_join_to_inner_join {#query_plan_convert_outer_join_to_inner_join} - - - - - -当 `JOIN` 之后的过滤条件始终过滤掉默认值时,允许将 `OUTER JOIN` 转换为 `INNER JOIN` - -## query_plan_direct_read_from_text_index {#query_plan_direct_read_from_text_index} - - - - - -允许在查询计划中仅基于倒排索引执行全文搜索过滤。 - -## query_plan_display_internal_aliases {#query_plan_display_internal_aliases} - - - - - -在 EXPLAIN PLAN 中显示内部别名(如 __table1),而不是使用原始查询中指定的别名。 - -## query_plan_enable_multithreading_after_window_functions {#query_plan_enable_multithreading_after_window_functions} - - - -在完成窗口函数计算后启用多线程,以支持并行流处理 - -## query_plan_enable_optimizations {#query_plan_enable_optimizations} - - - -在查询计划级别控制是否启用查询优化。 - -:::note -这是一个仅应由开发人员在调试时使用的高级设置。该设置未来可能会以不兼容的方式更改或被移除。 -::: - -可能的取值: - -- 0 - 在查询计划级别禁用所有优化 -- 1 - 在查询计划级别启用优化(但各个优化仍可以通过其对应的设置单独禁用) - -## query_plan_execute_functions_after_sorting {#query_plan_execute_functions_after_sorting} - - - -控制是否启用一种查询计划级别的优化,该优化会将表达式的执行移动到排序步骤之后。 -仅当设置 [`query_plan_enable_optimizations`](#query_plan_enable_optimizations) 为 1 时生效。 - -:::note -这是一个面向专家的设置,只应由开发人员在调试时使用。该设置将来可能会以不向后兼容的方式更改或被移除。 -::: - -可能的取值: - -- 0 - 禁用 -- 1 - 启用 - -## query_plan_filter_push_down {#query_plan_filter_push_down} - - - -启用或关闭一种查询计划级别的优化,将过滤条件在执行计划中尽可能下推到更靠后的阶段。 -仅当 [query_plan_enable_optimizations](#query_plan_enable_optimizations) 设置为 1 时生效。 - -:::note -这是一个仅供开发人员在调试时使用的高级设置。该设置将来可能会以向后不兼容的方式更改或被移除。 -::: - -可能的取值: - -- 0 - 禁用 -- 1 - 启用 - -## query_plan_join_shard_by_pk_ranges {#query_plan_join_shard_by_pk_ranges} - - - - - -如果两个表的 JOIN 键都包含各自 `PRIMARY KEY` 的前缀,则对 JOIN 操作应用分片。支持 `hash`、`parallel_hash` 和 `full_sorting_merge` 算法。通常不会提升查询性能,但可能会降低内存占用。 - -## query_plan_join_swap_table {#query_plan_join_swap_table} - - - - - -确定在查询计划中连接的哪一侧应作为构建表(也称为 inner 表,即在哈希连接中被插入到哈希表中的那一侧)。此设置仅适用于连接严格性为 `ALL` 且使用 `JOIN ON` 子句的情况。可能的取值为: - -- 'auto':由查询规划器决定使用哪张表作为构建表。 - - 'false':从不交换表(右表为构建表)。 - - 'true':始终交换表(左表为构建表)。 - -## query_plan_lift_up_array_join {#query_plan_lift_up_array_join} - - - -控制是否启用一种查询计划级别的优化,该优化会在执行计划中将 ARRAY JOIN 上推。 -仅当 [query_plan_enable_optimizations](#query_plan_enable_optimizations) 设置为 1 时才生效。 - -:::note -这是一个仅供开发人员在调试时使用的专家级设置。该设置将来可能会以向后不兼容的方式更改或被移除。 -::: - -可能的值: - -- 0 - 禁用 -- 1 - 启用 - -## query_plan_lift_up_union {#query_plan_lift_up_union} - - - -控制是否启用一种查询计划级别的优化,该优化会将查询计划中较大的子树提升到 `union` 中,以便执行进一步优化。 -仅当设置 [`query_plan_enable_optimizations`](#query_plan_enable_optimizations) 为 1 时生效。 - -:::note -这是一个仅供开发人员在调试时使用的高级专家设置。该设置未来可能会以不兼容的方式更改或被移除。 -::: - -可能的取值: - -- 0 - 禁用 -- 1 - 启用 - -## query_plan_max_limit_for_lazy_materialization {#query_plan_max_limit_for_lazy_materialization} - - - - - -控制允许使用查询计划进行惰性物化优化时的最大阈值。若为零,则不设限制。 - -## query_plan_max_optimizations_to_apply {#query_plan_max_optimizations_to_apply} - - - -限制对查询计划应用的优化总数,参见设置 [query_plan_enable_optimizations](#query_plan_enable_optimizations)。 -用于避免对复杂查询进行耗时过长的优化。 -在 EXPLAIN PLAN 查询中,当达到该限制时,停止继续应用优化,并按当时的状态返回计划。 -对于常规查询的执行过程,如果实际应用的优化次数超过该设置,将抛出异常。 - -:::note -这是一个专家级设置,仅应由开发人员在调试时使用。该设置在未来可能会以不向后兼容的方式更改或被移除。 -::: - -## query_plan_max_step_description_length {#query_plan_max_step_description_length} - - - - - -EXPLAIN PLAN 中步骤描述的最大长度。 - -## query_plan_merge_expressions {#query_plan_merge_expressions} - - - -切换一项在查询计划级别生效的优化,用于合并连续的过滤条件。 -仅当 [query_plan_enable_optimizations](#query_plan_enable_optimizations) 设置为 1 时生效。 - -:::note -这是一个仅供开发人员在调试时使用的高级设置。该设置未来可能以不向后兼容的方式更改或被移除。 -::: - -可能的取值: - -- 0 - 禁用 -- 1 - 启用 - -## query_plan_merge_filter_into_join_condition {#query_plan_merge_filter_into_join_condition} - - - - - -允许将过滤条件合并进 `JOIN` 条件中,并将 `CROSS JOIN` 转换为 `INNER JOIN`。 - -## query_plan_merge_filters {#query_plan_merge_filters} - - - - - -允许在查询计划中合并过滤条件。 - -## query_plan_optimize_join_order_limit {#query_plan_optimize_join_order_limit} - - - - - -在同一子查询中优化 JOIN 的执行顺序。目前仅在极少数场景下受支持。 - 该值表示可参与优化的表的最大数量。 - -## query_plan_optimize_lazy_materialization {#query_plan_optimize_lazy_materialization} - - - - - -使用查询计划执行延迟物化优化。 - -## query_plan_optimize_prewhere {#query_plan_optimize_prewhere} - - - - - -允许将过滤条件下推至受支持存储引擎的 PREWHERE 表达式中 - -## query_plan_push_down_limit {#query_plan_push_down_limit} - - - -控制一项查询计划级别的优化,该优化会将 LIMIT 下推到执行计划的更底层阶段。 -只有在 [query_plan_enable_optimizations](#query_plan_enable_optimizations) 设置为 1 时才生效。 - -:::note -这是一个仅供开发人员用于调试的专家级设置。该设置将来可能以不向后兼容的方式更改或被移除。 -::: - -可能的取值: - -- 0 - 禁用 -- 1 - 启用 - -## query_plan_read_in_order {#query_plan_read_in_order} - - - -控制是否在查询计划级别启用按顺序读取优化。 -仅当设置 [`query_plan_enable_optimizations`](#query_plan_enable_optimizations) 为 1 时生效。 - -:::note -这是一个仅供开发人员在调试时使用的高级设置。该设置在未来可能以向后不兼容的方式更改或被移除。 -::: - -可能的取值: - -- 0 - 禁用 -- 1 - 启用 - -## query_plan_remove_redundant_distinct {#query_plan_remove_redundant_distinct} - - - - - -用于开启或关闭一项在查询计划级别进行的优化,该优化会移除冗余的 DISTINCT 步骤。 -仅当 [`query_plan_enable_optimizations`](#query_plan_enable_optimizations) 设置为 1 时生效。 - -:::note -这是一个仅供开发人员在调试时使用的高级/专家级设置。该设置今后可能以不向后兼容的方式发生变更,或者被移除。 -::: - -可能的取值: - -- 0 - 禁用 -- 1 - 启用 - -## query_plan_remove_redundant_sorting {#query_plan_remove_redundant_sorting} - - - - - -控制是否启用查询计划层面的优化,用于移除冗余的排序步骤,例如出现在子查询中的排序。 -仅当设置 [`query_plan_enable_optimizations`](#query_plan_enable_optimizations) 为 1 时生效。 - -:::note -这是一个面向专家的设置,仅供开发人员在调试时使用。该设置将来可能会以不向后兼容的方式变更或被移除。 -::: - -可能的取值: - -- 0 - 禁用 -- 1 - 启用 - -## query_plan_remove_unused_columns {#query_plan_remove_unused_columns} - - - - - -控制是否启用一项查询计划级别的优化,该优化尝试从查询计划步骤中移除未使用的列(包括输入列和输出列)。 -仅当 [query_plan_enable_optimizations](#query_plan_enable_optimizations) 设置为 1 时才生效。 - -:::note -这是一个面向专家的设置,仅应由开发人员在调试时使用。该设置将来可能会以不向后兼容的方式变更或被移除。 -::: - -可能的取值: - -- 0 - 禁用 -- 1 - 启用 - -## query_plan_reuse_storage_ordering_for_window_functions {#query_plan_reuse_storage_ordering_for_window_functions} - - - -控制一项查询计划级别的优化,该优化在为窗口函数排序时复用存储层的排序。 -仅当 [`query_plan_enable_optimizations`](#query_plan_enable_optimizations) 设置为 1 时生效。 - -:::note -这是一个仅供开发人员在调试时使用的高级设置。该设置将来可能会以向后不兼容的方式变更或被移除。 -::: - -可能的取值: - -- 0 - 禁用 -- 1 - 启用 - -## query_plan_split_filter {#query_plan_split_filter} - - - -:::note -这是一个仅应由开发人员在调试时使用的专家级设置。该设置将来可能会以不向后兼容的方式更改或被移除。 -::: - -用于启用或禁用一种查询计划级别的优化,该优化会将过滤条件拆分为表达式。 -仅当设置 [query_plan_enable_optimizations](#query_plan_enable_optimizations) 为 1 时生效。 - -可能的取值: - -- 0 - 禁用 -- 1 - 启用 - -## query_plan_try_use_vector_search {#query_plan_try_use_vector_search} - - - - - -启用或禁用一项查询计划级别的优化,用于尝试使用向量相似度索引。 -仅当设置 [`query_plan_enable_optimizations`](#query_plan_enable_optimizations) 为 1 时生效。 - -:::note -这是面向专家级用户的设置,仅应由开发人员在调试时使用。该设置将来可能会以向后不兼容的方式变更或被移除。 -::: - -可能的取值: - -- 0 - 禁用 -- 1 - 启用 - -## query_plan_use_new_logical_join_step {#query_plan_use_new_logical_join_step} - -**别名**: `query_plan_use_logical_join_step` - - - - - -在查询计划中使用逻辑 JOIN 步骤。 -注意:设置 `query_plan_use_new_logical_join_step` 已被弃用,请改用 `query_plan_use_logical_join_step`。 - -## query_profiler_cpu_time_period_ns {#query_profiler_cpu_time_period_ns} - - - -设置 [query profiler](../../operations/optimizing-performance/sampling-query-profiler.md) 的 CPU 时钟计时器周期。此计时器仅统计 CPU 时间。 - -可能的取值: - -- 正整数形式的纳秒数。 - - 推荐取值: - - - 10000000 纳秒(每秒 100 次)及以上用于单个查询。 - - 1000000000 纳秒(每秒 1 次)用于集群范围的分析。 - -- 0 表示关闭定时器。 - -**在 ClickHouse Cloud 中暂时禁用。** - -另请参阅: - -- 系统表 [trace_log](/operations/system-tables/trace_log) - -## query_profiler_real_time_period_ns {#query_profiler_real_time_period_ns} - - - -设置 [query profiler](../../operations/optimizing-performance/sampling-query-profiler.md) 的实时时钟定时周期。实时时钟按墙钟时间计时。 - -可能的取值: - -- 正整数,单位为纳秒。 - - 推荐取值: - - - 10000000(每秒 100 次)纳秒及以下用于单个查询。 - - 1000000000(每秒 1 次)用于集群范围的分析。 - -- 0 表示关闭计时器。 - -**在 ClickHouse Cloud 中暂时禁用。** - -另请参阅: - -- 系统表 [trace_log](/operations/system-tables/trace_log) - -## queue_max_wait_ms {#queue_max_wait_ms} - - - -当并发请求数超过上限时,请求在队列中的等待时间。 - -## rabbitmq_max_wait_ms {#rabbitmq_max_wait_ms} - - - -在重试前从 RabbitMQ 读取数据时的最长等待时间。 - -## read_backoff_max_throughput {#read_backoff_max_throughput} - - - -用于在读取速度较慢时减少线程数量的设置。当读取带宽低于该值(字节/秒)时统计事件。 - -## read_backoff_min_concurrency {#read_backoff_min_concurrency} - - - -在读取变慢时,用于尝试维持的最小线程数的设置。 - -## read_backoff_min_events {#read_backoff_min_events} - - - -用于在读取速度较慢时减少线程数量的设置。发生指定次数的事件后,将减少使用的线程数。 - -## read_backoff_min_interval_between_events_ms {#read_backoff_min_interval_between_events_ms} - - - -在读取速度较慢时用于减少线程数量的设置。如果距离上一次事件发生的时间少于指定时间间隔,则忽略当前事件。 - -## read_backoff_min_latency_ms {#read_backoff_min_latency_ms} - - - -在读取变慢时用于减少线程数量的设置。仅考虑耗时至少达到该值的读取操作。 - -## read_from_distributed_cache_if_exists_otherwise_bypass_cache {#read_from_distributed_cache_if_exists_otherwise_bypass_cache} - - - - - - - -仅在 ClickHouse Cloud 中生效。与 read_from_filesystem_cache_if_exists_otherwise_bypass_cache 相同,但作用于分布式缓存(distributed cache)。 - -## read_from_filesystem_cache_if_exists_otherwise_bypass_cache {#read_from_filesystem_cache_if_exists_otherwise_bypass_cache} - - - -允许以被动模式使用文件系统缓存——利用已有的缓存条目,但不再向缓存中写入新的条目。若将此设置用于高负载的临时查询,而对短时的实时查询保持禁用状态,则可以避免重量级查询导致的缓存抖动,从而提升整体系统效率。 - -## read_from_page_cache_if_exists_otherwise_bypass_cache {#read_from_page_cache_if_exists_otherwise_bypass_cache} - - - - - -在被动模式下使用用户态页缓存,与 read_from_filesystem_cache_if_exists_otherwise_bypass_cache 类似。 - -## read_in_order_two_level_merge_threshold {#read_in_order_two_level_merge_threshold} - - - -在按主键顺序进行多线程读取时,为触发预合并步骤所需读取的数据分片的最小数量。 - -## read_in_order_use_buffering {#read_in_order_use_buffering} - - - - - -在按主键顺序读取数据时,在合并前使用缓冲。这可以提高查询执行的并行度。 - -## read_in_order_use_virtual_row {#read_in_order_use_virtual_row} - - - - - -在按主键或其单调函数的顺序读取时使用虚拟行。这样在跨多个数据部分进行搜索时,只会访问相关的数据部分。 - -## read_overflow_mode {#read_overflow_mode} - - - -当超出限制时的处理方式。 - -## read_overflow_mode_leaf {#read_overflow_mode_leaf} - - - -设置在读取的数据量超出某个叶子节点的限制时应采取的行为。 - -可选值: - -- `throw`: 抛出异常(默认)。 -- `break`: 停止执行查询并返回部分结果。 - -## read_priority {#read_priority} - - - -控制从本地文件系统或远程文件系统读取数据的优先级。仅在本地文件系统使用 `pread_threadpool` 方法以及远程文件系统使用 `threadpool` 方法时受支持。 - -## read_through_distributed_cache {#read_through_distributed_cache} - - - - - - - -仅在 ClickHouse Cloud 中生效。允许从分布式缓存读取 - -## readonly {#readonly} - - - -0 - 不启用只读限制。1 - 只允许读请求,以及修改被显式允许的设置。2 - 只允许读请求,以及修改除 `readonly` 设置之外的其他设置。 - -## receive_data_timeout_ms {#receive_data_timeout_ms} - - - -在从副本接收首个数据包或带有正向进度的数据包时的连接超时时间 - -## receive_timeout {#receive_timeout} - - - -从网络接收数据的超时时间(秒)。如果在此时间间隔内未接收到任何字节,将抛出异常。如果在客户端设置此参数,服务器端对应连接的套接字也会设置 `send_timeout`。 - -## regexp_max_matches_per_row {#regexp_max_matches_per_row} - - - -设置单个正则表达式在每行中的最大匹配次数。使用该设置可以在使用贪婪正则表达式调用 [extractAllGroupsHorizontal](/sql-reference/functions/string-search-functions#extractAllGroupsHorizontal) 函数时防止内存占用过高。 - -可能的取值: - -- 正整数。 - -## reject_expensive_hyperscan_regexps {#reject_expensive_hyperscan_regexps} - - - -拒绝那些在使用 Hyperscan 进行评估时代价可能很高的模式(由于 NFA 状态爆炸) - -## remerge_sort_lowered_memory_bytes_ratio {#remerge_sort_lowered_memory_bytes_ratio} - - - -如果重新合并后的内存使用量未按该比例降低,将禁用重新合并。 - -## remote_filesystem_read_method {#remote_filesystem_read_method} - - - -用于从远程文件系统读取数据的方法,可设置为 read 或 threadpool。 - -## remote_filesystem_read_prefetch {#remote_filesystem_read_prefetch} - - - -是否在从远程文件系统读取数据时启用预取。 - -## remote_fs_read_backoff_max_tries {#remote_fs_read_backoff_max_tries} - - - -使用退避机制的最大读取重试次数 - -## remote_fs_read_max_backoff_ms {#remote_fs_read_max_backoff_ms} - - - -在尝试从远程磁盘读取数据时的最大等待时间 - -## remote_read_min_bytes_for_seek {#remote_read_min_bytes_for_seek} - - - -执行远程读取(URL、S3)时,为使用 seek 操作(而非带 ignore 标志的读取)所需的最小字节数。 - -## rename_files_after_processing {#rename_files_after_processing} - -- **类型:** String - -- **默认值:** 空字符串 - -此设置用于为由 `file` 表函数处理的文件指定重命名模式。当设置该选项后,所有由 `file` 表函数读取的文件,仅在处理成功的情况下,才会根据指定的(包含占位符的)模式进行重命名。 - -### 占位符 - -- `%a` — 原始文件的完整文件名(例如:"sample.csv")。 -- `%f` — 原始文件名(不含扩展名)(例如:"sample")。 -- `%e` — 原始文件扩展名(包含点号)(例如:".csv")。 -- `%t` — 时间戳(单位:微秒)。 -- `%%` — 百分号("%")。 - -### 示例 - -- 选项:`--rename_files_after_processing="processed_%f_%t%e"` - -- 查询:`SELECT * FROM file('sample.csv')` - -如果成功读取 `sample.csv` 文件,该文件将被重命名为 `processed_sample_1683473210851438.csv` - -## replace_running_query {#replace_running_query} - - - -在使用 HTTP 接口时,可以传递 `query_id` 参数。它是用作查询标识符的任意字符串。 -如果此时已存在来自同一用户且具有相同 `query_id` 的查询,则具体行为取决于 `replace_running_query` 参数。 - -`0`(默认)– 抛出异常(如果具有相同 `query_id` 的查询已在运行,则不允许新的查询运行)。 - -`1` – 取消旧查询并开始运行新查询。 - -将此参数设置为 1 可用于实现分段条件的提示/建议功能。输入下一个字符后,如果旧查询尚未完成,则应将其取消。 - -## replace_running_query_max_wait_ms {#replace_running_query_max_wait_ms} - - - -在启用 [replace_running_query](#replace_running_query) 设置时,为等待具有相同 `query_id` 的正在运行查询完成所保留的时间。 - -可能的取值: - -- 正整数。 -- 0 — 如果服务器已经在执行具有相同 `query_id` 的查询,则抛出异常,并且不允许运行新的查询。 - -## replication_wait_for_inactive_replica_timeout {#replication_wait_for_inactive_replica_timeout} - - - -指定在等待非活动副本执行 [`ALTER`](../../sql-reference/statements/alter/index.md)、[`OPTIMIZE`](../../sql-reference/statements/optimize.md) 或 [`TRUNCATE`](../../sql-reference/statements/truncate.md) 查询时的最长等待时间(以秒为单位)。 - -可能的取值: - -- `0` — 不等待。 -- 负整数 — 无限期等待。 -- 正整数 — 要等待的秒数。 - -## restore_replace_external_dictionary_source_to_null {#restore_replace_external_dictionary_source_to_null} - - - - - -在恢复时将外部字典源替换为 Null。适用于测试用途。 - -## restore_replace_external_engines_to_null {#restore_replace_external_engines_to_null} - - - - - -仅用于测试。将所有外部引擎替换为 Null,以避免发起外部连接。 - -## restore_replace_external_table_functions_to_null {#restore_replace_external_table_functions_to_null} - - - - - -仅用于测试。将所有外部表函数替换为 Null,以避免发起外部连接。 - -## restore_replicated_merge_tree_to_shared_merge_tree {#restore_replicated_merge_tree_to_shared_merge_tree} - - - - - -在执行 RESTORE 时,将表引擎从 Replicated*MergeTree 更改为 Shared*MergeTree。 - -## result_overflow_mode - - - -云端默认值:`throw` - -设置当结果大小超过某个限制时应执行的操作。 - -可能的取值: - -* `throw`:抛出异常(默认)。 -* `break`:停止执行查询并返回部分结果,就好像 - 源数据已经耗尽一样。 - -使用 'break' 类似于使用 LIMIT。`break` 只会在块级别中断执行。 -这意味着返回的行数大于 -[`max_result_rows`](/operations/settings/settings#max_result_rows)、且为 [`max_block_size`](/operations/settings/settings#max_block_size) 的倍数, -并且还取决于 [`max_threads`](/operations/settings/settings#max_threads)。 - -**示例** - -```sql title="Query" -SET max_threads = 3, max_block_size = 3333; -SET max_result_rows = 3334, result_overflow_mode = 'break'; - -SELECT * -FROM numbers_mt(100000) -FORMAT Null; -``` - -```text title="Result" -6666 rows in set. ... -``` - - -## rewrite_count_distinct_if_with_count_distinct_implementation {#rewrite_count_distinct_if_with_count_distinct_implementation} - - - - - -允许你使用 [count_distinct_implementation](#count_distinct_implementation) 设置来重写 `countDistcintIf`。 - -可选值: - -- true — 允许。 -- false — 不允许。 - -## rewrite_in_to_join {#rewrite_in_to_join} - - - - - - - -将类似 `x IN 子查询` 的表达式重写为 JOIN。这样可能有助于通过 JOIN 重排来优化整个查询。 - -## s3_allow_multipart_copy {#s3_allow_multipart_copy} - - - - - -允许在 S3 中进行分段复制。 - -## s3_allow_parallel_part_upload {#s3_allow_parallel_part_upload} - - - -为 S3 多部分上传使用多线程。这可能会略微增加内存占用。 - -## s3_check_objects_after_upload {#s3_check_objects_after_upload} - - - -使用 HEAD 请求检查上传到 S3 的每个对象,以确保上传成功。 - -## s3_connect_timeout_ms {#s3_connect_timeout_ms} - - - - - -S3 磁盘连接到主机时的连接超时时间。 - -## s3_create_new_file_on_insert {#s3_create_new_file_on_insert} - - - -启用或禁用在 S3 引擎表中每次插入时创建新文件。若启用,每次插入都会创建一个新的 S3 对象,其 key 模式类似如下: - -initial: `data.Parquet.gz` -> `data.1.Parquet.gz` -> `data.2.Parquet.gz` 等。 - -可能的取值: - -- 0 — 若未设置 s3_truncate_on_insert,则 `INSERT` 查询会创建一个新文件,否则在文件已存在时执行失败。 -- 1 — 若未设置 s3_truncate_on_insert,则 `INSERT` 查询在每次插入时都会创建一个新文件,并(从第二个文件开始)使用后缀。 - -更多详情参见[此处](/integrations/s3#inserting-data)。 - -## s3_disable_checksum {#s3_disable_checksum} - - - -在将文件发送到 S3 时不计算校验和。通过避免对文件进行额外的处理遍历,这可以加快写入速度。在大多数情况下这是安全的,因为 MergeTree 表的数据无论如何都会由 ClickHouse 计算校验和,并且当通过 HTTPS 访问 S3 时,TLS 层在网络传输过程中已经提供了完整性保证。不过,在 S3 端启用额外的校验和可以作为纵深防御措施。 - -## s3_ignore_file_doesnt_exist {#s3_ignore_file_doesnt_exist} - - - - - -在读取某些 key 时,如果请求的文件不存在,则忽略该文件的缺失。 - -可能的取值: - -- 1 — `SELECT` 返回空结果。 -- 0 — `SELECT` 抛出异常。 - -## s3_list_object_keys_size {#s3_list_object_keys_size} - - - -单次批量 ListObject 请求可返回的最大文件数量 - -## s3_max_connections {#s3_max_connections} - - - -每个服务器的最大连接数。 - -## s3_max_get_burst {#s3_max_get_burst} - - - -在达到每秒请求数限制之前,可以同时发起的最大请求数量。默认值(0)等同于 `s3_max_get_rps`。 - -## s3_max_get_rps {#s3_max_get_rps} - - - -在触发限流前,每秒允许的 S3 GET 请求数上限。0 表示不限制。 - -## s3_max_inflight_parts_for_one_file {#s3_max_inflight_parts_for_one_file} - - - -在一次分片上传请求中可并发上传的最大分片数量。0 表示不做限制。 - -## s3_max_part_number {#s3_max_part_number} - - - - - -S3 分片上传的最大分片编号。 - -## s3_max_put_burst {#s3_max_put_burst} - - - -在达到每秒请求数限制之前,可以同时发出的最大请求数。默认值为 0 时,其效果等同于 `s3_max_put_rps`。 - -## s3_max_put_rps {#s3_max_put_rps} - - - -在触发限速之前,每秒允许的 S3 PUT 请求数上限。0 表示不限制。 - -## s3_max_single_operation_copy_size {#s3_max_single_operation_copy_size} - - - - - -在 S3 中单次复制操作所允许的最大数据量。仅当 `s3_allow_multipart_copy` 为 true 时才会使用此设置。 - -## s3_max_single_part_upload_size {#s3_max_single_part_upload_size} - - - -使用单段上传(single-part upload)到 S3 时,单个对象的最大允许大小。 - -## s3_max_single_read_retries {#s3_max_single_read_retries} - - - -单次 S3 读取操作期间的最大重试次数。 - -## s3_max_unexpected_write_error_retries {#s3_max_unexpected_write_error_retries} - - - -在向 S3 写入时出现意外错误时的最大重试次数。 - -## s3_max_upload_part_size {#s3_max_upload_part_size} - - - -在对 S3 执行分片上传时,单个分片的最大大小。 - -## s3_min_upload_part_size {#s3_min_upload_part_size} - - - -在对 S3 进行分片上传(multipart upload)时,每个分片的最小上传大小。 - -## s3_request_timeout_ms {#s3_request_timeout_ms} - - - -在向 S3 发送或从 S3 接收数据时的空闲超时时间。如果单次 TCP 读或写调用的阻塞时间超过该值,则视为失败。 - -## s3_skip_empty_files {#s3_skip_empty_files} - - - - - -启用或禁用在 [S3](../../engines/table-engines/integrations/s3.md) 引擎表中跳过空文件的行为。 - -可能的取值: - -- 0 — 如果空文件与请求的格式不兼容,`SELECT` 会抛出异常。 -- 1 — 对于空文件,`SELECT` 返回空结果集。 - -## s3_slow_all_threads_after_network_error {#s3_slow_all_threads_after_network_error} - - - - - -当设置为 `true` 时,在任意一次 S3 请求遇到可重试的网络错误(例如 socket 超时)之后,向同一备份端点发起 S3 请求的所有线程都会被放慢。 -当设置为 `false` 时,每个线程会独立于其他线程处理 S3 请求的退避。 - -## s3_strict_upload_part_size {#s3_strict_upload_part_size} - - - -在向 S3 进行分片上传时,每个分片要上传的精确大小(某些实现不支持可变大小的分片)。 - -## s3_throw_on_zero_files_match {#s3_throw_on_zero_files_match} - - - -在 ListObjects 请求无法匹配到任何文件时抛出错误 - -## s3_truncate_on_insert {#s3_truncate_on_insert} - - - -启用或禁用在向 S3 引擎表插入数据前执行截断操作。若禁用,当尝试插入且对应的 S3 对象已存在时,将抛出异常。 - -可能的取值: - -- 0 — 如果文件不存在,`INSERT` 查询将创建一个新文件;如果文件已存在且未设置 s3_create_new_file_on_insert,则插入失败。 -- 1 — `INSERT` 查询会用新数据替换该文件的现有内容。 - -更多详情参见[此处](/integrations/s3#inserting-data)。 - -## s3_upload_part_size_multiply_factor {#s3_upload_part_size_multiply_factor} - - - -每当在单次写入 S3 的过程中,已上传的分片数量达到 `s3_multiply_parts_count_threshold` 时,就将 `s3_min_upload_part_size` 按此系数放大。 - -## s3_upload_part_size_multiply_parts_count_threshold {#s3_upload_part_size_multiply_parts_count_threshold} - - - -每当向 S3 上传的分片数量达到该值时,`s3_min_upload_part_size` 就会乘以 `s3_upload_part_size_multiply_factor`。 - -## s3_use_adaptive_timeouts {#s3_use_adaptive_timeouts} - - - -当设置为 `true` 时,对所有 S3 请求的前两次尝试会使用较低的发送和接收超时时间。 -当设置为 `false` 时,所有尝试都会使用相同的超时时间。 - -## s3_validate_request_settings {#s3_validate_request_settings} - - - - - -启用对 S3 请求设置的验证。 -可选值: - -- 1 — 验证设置。 -- 0 — 不验证设置。 - -## s3queue_default_zookeeper_path {#s3queue_default_zookeeper_path} - - - -S3Queue 引擎的默认 ZooKeeper 路径前缀 - -## s3queue_enable_logging_to_s3queue_log {#s3queue_enable_logging_to_s3queue_log} - - - -启用向 system.s3queue_log 的写入。该值可以在每个表上通过表级设置进行覆盖 - -## s3queue_keeper_fault_injection_probability {#s3queue_keeper_fault_injection_probability} - - - - - -S3Queue 的 Keeper 故障注入的概率。 - -## s3queue_migrate_old_metadata_to_buckets {#s3queue_migrate_old_metadata_to_buckets} - - - - - -将 S3Queue 表的旧元数据结构迁移为新的结构。 - -## schema_inference_cache_require_modification_time_for_url {#schema_inference_cache_require_modification_time_for_url} - - - -在校验 URL 的最后修改时间时使用缓存中的 schema(适用于带有 Last-Modified 头的 URL) - -## schema_inference_use_cache_for_azure {#schema_inference_use_cache_for_azure} - - - -在使用 azure 表函数进行模式推断时使用缓存 - -## schema_inference_use_cache_for_file {#schema_inference_use_cache_for_file} - - - -在使用 file 表函数进行模式推断时使用缓存 - -## schema_inference_use_cache_for_hdfs {#schema_inference_use_cache_for_hdfs} - - - -在使用 HDFS 表函数进行模式推断时使用缓存。 - -## schema_inference_use_cache_for_s3 {#schema_inference_use_cache_for_s3} - - - -在对 S3 表函数进行模式推断时使用缓存 - -## schema_inference_use_cache_for_url {#schema_inference_use_cache_for_url} - - - -在使用 URL 表函数进行模式推断时使用缓存 - -## secondary_indices_enable_bulk_filtering {#secondary_indices_enable_bulk_filtering} - - - - - -启用索引的批量过滤算法。预计该算法在各种情况下都更优,但仍保留此设置以满足兼容性和控制需求。 - -## select_sequential_consistency {#select_sequential_consistency} - - - -:::note -此设置在 SharedMergeTree 和 ReplicatedMergeTree 中的行为不同。有关 SharedMergeTree 中 `select_sequential_consistency` 行为的更多信息,请参阅 [SharedMergeTree consistency](/cloud/reference/shared-merge-tree#consistency)。 -::: - -启用或禁用 `SELECT` 查询的顺序一致性。需要先禁用 `insert_quorum_parallel`(该设置默认启用)。 - -可能的取值: - -- 0 — 禁用。 -- 1 — 启用。 - -用法 - -当启用顺序一致性时,ClickHouse 只允许客户端在包含所有先前使用 `insert_quorum` 执行的 `INSERT` 查询数据的副本上执行 `SELECT` 查询。如果客户端访问的是一个不完整副本,ClickHouse 会抛出异常。该 `SELECT` 查询不会包含尚未写入到副本仲裁中的任何数据。 - -当启用(默认)`insert_quorum_parallel` 时,`select_sequential_consistency` 不起作用。这是因为并行的 `INSERT` 查询可能会写入不同集合的仲裁副本,因此无法保证单个副本已经接收到所有写入。 - -另请参阅: - -- [insert_quorum](#insert_quorum) -- [insert_quorum_timeout](#insert_quorum_timeout) -- [insert_quorum_parallel](#insert_quorum_parallel) - -## send_logs_level {#send_logs_level} - - - -将服务器文本日志中达到指定最小级别的条目发送到客户端。有效取值:'trace'、'debug'、'information'、'warning'、'error'、'fatal'、'none' - -## send_logs_source_regexp {#send_logs_source_regexp} - -发送服务器文本日志,使用指定的正则表达式匹配日志源名称。留空表示匹配所有日志源。 - -## send_profile_events {#send_profile_events} - - - - - -启用或禁用向客户端发送 [ProfileEvents](/native-protocol/server.md#profile-events) 数据包。 - -可以将其禁用,以减少不需要 ProfileEvents 事件的客户端的网络流量。 - -可能的取值: - -- 0 — 禁用。 -- 1 — 启用。 - -## send_progress_in_http_headers {#send_progress_in_http_headers} - - - -启用或禁用 `clickhouse-server` 响应中的 `X-ClickHouse-Progress` HTTP 响应头。 - -有关更多信息,请参阅 [HTTP 接口说明](../../interfaces/http.md)。 - -可能的值: - -- 0 — 禁用。 -- 1 — 启用。 - -## send_timeout {#send_timeout} - - - -向网络发送数据的超时时间(单位:秒)。如果客户端需要发送数据,但在该时间间隔内无法发送出任何字节,将抛出异常。如果在客户端设置此配置,则服务器端对应连接上的套接字也会设置 `receive_timeout`。 - -## serialize_query_plan {#serialize_query_plan} - - - - - -将查询计划序列化以用于分布式处理 - -## session_timezone - - - -设置当前会话或查询的隐式时区。 -隐式时区是应用于未显式指定时区的 DateTime/DateTime64 类型值的时区。 -该设置优先于全局配置的(服务器级)隐式时区生效。 -取值为 ''(空字符串)表示当前会话或查询的隐式时区等于[服务器时区](../server-configuration-parameters/settings.md/#timezone)。 - -可以使用函数 `timeZone()` 和 `serverTimeZone()` 获取会话时区和服务器时区。 - -可能的取值: - -* 来自 `system.time_zones` 的任意时区名称,例如 `Europe/Berlin`、`UTC` 或 `Zulu` - -示例: - -```sql -SELECT timeZone(), serverTimeZone() FORMAT CSV - -"Europe/Berlin","Europe/Berlin" -``` - -```sql -SELECT timeZone(), serverTimeZone() SETTINGS session_timezone = 'Asia/Novosibirsk' FORMAT CSV - -"Asia/Novosibirsk","Europe/Berlin" -``` - -为未显式指定时区的内部 DateTime 指定会话时区 'America/Denver': - -```sql -SELECT toDateTime64(toDateTime64('1999-12-12 23:23:23.123', 3), 3, 'Europe/Zurich') SETTINGS session_timezone = 'America/Denver' FORMAT TSV - -1999-12-13 07:23:23.123 -``` - -:::warning -并非所有解析 DateTime/DateTime64 的函数都会遵从 `session_timezone`。这可能会导致一些细微且难以察觉的错误。 -请参阅以下示例和说明。 -::: - -```sql -CREATE TABLE test_tz (`d` DateTime('UTC')) ENGINE = Memory AS SELECT toDateTime('2000-01-01 00:00:00', 'UTC'); - -SELECT *, timeZone() FROM test_tz WHERE d = toDateTime('2000-01-01 00:00:00') SETTINGS session_timezone = 'Asia/Novosibirsk' -0 rows in set. - -SELECT *, timeZone() FROM test_tz WHERE d = '2000-01-01 00:00:00' SETTINGS session_timezone = 'Asia/Novosibirsk' -┌───────────────────d─┬─timeZone()───────┐ -│ 2000-01-01 00:00:00 │ Asia/Novosibirsk │ -└─────────────────────┴──────────────────┘ -``` - -这是由于使用了不同的解析流程: - -* 在第一个 `SELECT` 查询中,未显式指定时区的 `toDateTime()` 会遵循 `session_timezone` 和全局时区设置。 -* 在第二个查询中,DateTime 是从字符串解析得到的,并继承了已有列 `d` 的类型和时区。因此,`session_timezone` 和全局时区设置不会生效。 - -**另请参阅** - -* [timezone](../server-configuration-parameters/settings.md/#timezone) - - -## set_overflow_mode {#set_overflow_mode} - - - -设置当数据量超过某项限制时的处理方式。 - -可能的取值: - -- `throw`:抛出异常(默认)。 -- `break`:停止执行查询并返回部分结果,就好像 -源数据已经耗尽一样。 - -## shared_merge_tree_sync_parts_on_partition_operations {#shared_merge_tree_sync_parts_on_partition_operations} - - - - - -在 SMT 表中,在执行 MOVE|REPLACE|ATTACH 分区操作后自动同步数据部件集合。仅限 Cloud 环境 - -## short_circuit_function_evaluation {#short_circuit_function_evaluation} - - - -允许按照[短路求值](https://en.wikipedia.org/wiki/Short-circuit_evaluation)方式计算 [if](../../sql-reference/functions/conditional-functions.md/#if)、[multiIf](../../sql-reference/functions/conditional-functions.md/#multiIf)、[and](/sql-reference/functions/logical-functions#and) 和 [or](/sql-reference/functions/logical-functions#or) 函数。这有助于优化这些函数中复杂表达式的执行,并防止可能出现的异常(例如在非预期情况下发生的除以零)。 - -可能的取值: - -- `enable` — 为适合使用短路求值的函数启用短路求值(可能抛出异常或计算开销较大)。 -- `force_enable` — 为所有函数启用短路求值。 -- `disable` — 禁用短路求值。 - -## short_circuit_function_evaluation_for_nulls {#short_circuit_function_evaluation_for_nulls} - - - - - -对在任一参数为 NULL 时返回 NULL 的函数进行求值优化。当函数参数中 NULL 值的比例超过 `short_circuit_function_evaluation_for_nulls_threshold` 时,系统将跳过对该函数的逐行求值,而是直接为所有行返回 NULL,从而避免不必要的计算。 - -## short_circuit_function_evaluation_for_nulls_threshold {#short_circuit_function_evaluation_for_nulls_threshold} - - - - - -在启用设置 `short_circuit_function_evaluation_for_nulls` 时,用于仅在所有参数均为非 NULL 的行上执行带 Nullable 参数函数的 NULL 值占比阈值。 -当包含 NULL 值的行数与总行数的比例超过此阈值时,这些包含 NULL 值的行将不会被执行计算。 - -## show_data_lake_catalogs_in_system_tables {#show_data_lake_catalogs_in_system_tables} - - - - - -允许在 system 表中显示数据湖目录。 - -## show_processlist_include_internal {#show_processlist_include_internal} - - - - - -在 `SHOW PROCESSLIST` 查询输出中显示内部辅助进程。 - -内部进程包括字典重载、可刷新物化视图的重载、在 `SHOW ...` 查询中执行的辅助 `SELECT`,以及为处理损坏的表而在内部执行的辅助 `CREATE DATABASE ...` 查询等。 - -## show_table_uuid_in_table_create_query_if_not_nil {#show_table_uuid_in_table_create_query_if_not_nil} - - - - - -配置 `SHOW TABLE` 查询的显示内容。 - -可能的取值: - -- 0 — 查询结果中不显示表的 UUID。 -- 1 — 查询结果中显示表的 UUID。 - -## single_join_prefer_left_table {#single_join_prefer_left_table} - - - -在单个 JOIN 的情况下,当标识符存在歧义时优先使用左表。 - -## skip_redundant_aliases_in_udf - - - - - -在用户定义函数中不会使用(替换)冗余别名,从而简化其使用方式。 - -可选值: - -* 1 — 在 UDF 中跳过(替换)别名。 -* 0 — 在 UDF 中不跳过(不替换)别名。 - -**示例** - -启用和禁用之间的差异: - -查询: - -```sql -SET skip_redundant_aliases_in_udf = 0; -CREATE FUNCTION IF NOT EXISTS test_03274 AS ( x ) -> ((x + 1 as y, y + 2)); - -EXPLAIN SYNTAX SELECT test_03274(4 + 2); -``` - -结果: - -```text -SELECT ((4 + 2) + 1 AS y, y + 2) -``` - -查询: - -```sql -SET skip_redundant_aliases_in_udf = 1; -CREATE FUNCTION IF NOT EXISTS test_03274 AS ( x ) -> ((x + 1 as y, y + 2)); - -EXPLAIN SYNTAX SELECT test_03274(4 + 2); -``` - -结果: - -```text -SELECT ((4 + 2) + 1, ((4 + 2) + 1) + 2) -``` - - -## skip_unavailable_shards {#skip_unavailable_shards} - - - -启用或禁用对不可用分片的静默跳过。 - -如果某个分片的所有副本都不可用,则认为该分片不可用。在以下情况下,副本被视为不可用: - -- ClickHouse 由于某种原因无法连接到副本。 - - 在连接副本时,ClickHouse 会进行多次重试。如果所有尝试都失败,则该副本被视为不可用。 - -- 无法通过 DNS 解析副本。 - - 如果副本的主机名无法通过 DNS 解析,则可能表示以下情况: - - - 副本所在主机没有 DNS 记录。在具有动态 DNS 的系统(例如 [Kubernetes](https://kubernetes.io))中可能会发生这种情况,在这些系统中,节点在停机期间可能不可解析,这并不视为错误。 - - - 配置错误。ClickHouse 配置文件中包含错误的主机名。 - -可能的取值: - -- 1 — 启用跳过。 - - 如果某个分片不可用,ClickHouse 会基于部分数据返回结果,并且不会报告节点可用性问题。 - -- 0 — 禁用跳过。 - - 如果某个分片不可用,ClickHouse 会抛出异常。 - -## sleep_after_receiving_query_ms {#sleep_after_receiving_query_ms} - - - -在 `TCPHandler` 中接收到查询后等待的时间 - -## sleep_in_send_data_ms {#sleep_in_send_data_ms} - - - -TCPHandler 发送数据时的等待时间 - -## sleep_in_send_tables_status_ms {#sleep_in_send_tables_status_ms} - - - -在 TCPHandler 中发送表状态响应时等待的时间 - -## sort_overflow_mode {#sort_overflow_mode} - - - -设置当在排序前接收到的行数超出任一限制时应执行的操作。 - -可能的取值: - -- `throw`: 抛出异常。 -- `break`: 停止执行查询并返回部分结果。 - -## split_intersecting_parts_ranges_into_layers_final {#split_intersecting_parts_ranges_into_layers_final} - - - - - -在 FINAL 优化期间将相交的 part 范围拆分为若干层 - -## split_parts_ranges_into_intersecting_and_non_intersecting_final {#split_parts_ranges_into_intersecting_and_non_intersecting_final} - - - - - -在 FINAL 优化期间将数据片段范围拆分为相交和不相交两类 - -## splitby_max_substrings_includes_remaining_string {#splitby_max_substrings_includes_remaining_string} - - - -控制当函数 [splitBy*()](../../sql-reference/functions/splitting-merging-functions.md) 的参数 `max_substrings` > 0 时,是否在结果数组的最后一个元素中包含剩余字符串。 - -可能的取值: - -- `0` - 在结果数组的最后一个元素中不包含剩余字符串。 -- `1` - 在结果数组的最后一个元素中包含剩余字符串。这与 Spark 的 [`split()`](https://spark.apache.org/docs/3.1.2/api/python/reference/api/pyspark.sql.functions.split.html) 函数和 Python 的 ['string.split()'](https://docs.python.org/3/library/stdtypes.html#str.split) 方法的行为一致。 - -## stop_refreshable_materialized_views_on_startup {#stop_refreshable_materialized_views_on_startup} - - - - - -在服务器启动时,阻止调度可刷新物化视图,效果等同于执行 `SYSTEM STOP VIEWS`。之后可以通过 `SYSTEM START VIEWS` 或 `SYSTEM START VIEW ` 手动启动它们。此设置同样适用于新创建的视图。对不可刷新的物化视图无任何影响。 - -## storage_file_read_method {#storage_file_read_method} - - - -从存储文件读取数据的方法,可选值包括:`read`、`pread`、`mmap`。`mmap` 方法不适用于 clickhouse-server(仅适用于 clickhouse-local)。 - -## storage_system_stack_trace_pipe_read_timeout_ms {#storage_system_stack_trace_pipe_read_timeout_ms} - - - -在查询 `system.stack_trace` 表时,从管道读取线程信息的最长等待时间。此设置仅用于测试目的,不面向用户修改。 - -## stream_flush_interval_ms {#stream_flush_interval_ms} - - - -适用于启用流式写入的表,在发生超时或某个线程生成了 [max_insert_block_size](#max_insert_block_size) 行时触发生效。 - -默认值为 7500。 - -该值越小,数据刷入表中的频率越高。但如果设置得过小,会导致性能下降。 - -## stream_like_engine_allow_direct_select {#stream_like_engine_allow_direct_select} - - - - - -允许对 Kafka、RabbitMQ、FileLog、Redis Streams 和 NATS 引擎直接执行 SELECT 查询。如果存在已关联的物化视图,即使启用了此设置,仍不允许执行 SELECT 查询。 - -## stream_like_engine_insert_queue {#stream_like_engine_insert_queue} - -当类流式引擎从多个队列中读取数据时,用户在写入时必须选择一个具体的队列进行插入。被 Redis Streams 和 NATS 使用。 - -## stream_poll_timeout_ms {#stream_poll_timeout_ms} - - - -用于从/向流式存储轮询数据的超时时间。 - -## system_events_show_zero_values - - - -允许从 [`system.events`](../../operations/system-tables/events.md) 中选取取值为零的事件。 - -某些监控系统要求在每个检查点传递所有指标的数值,即使该指标的值为零。 - -可能的取值: - -* 0 — 禁用。 -* 1 — 启用。 - -**示例** - -查询 - -```sql -SELECT * FROM system.events WHERE event='QueryMemoryLimitExceeded'; -``` - -结果 - -```text -确认。 -``` - -查询 - -```sql -SET system_events_show_zero_values = 1; -SELECT * FROM system.events WHERE event='QueryMemoryLimitExceeded'; -``` - -结果 - -```text -┌─event────────────────────┬─value─┬─description───────────────────────────────────────────┐ -│ QueryMemoryLimitExceeded │ 0 │ 查询超出内存限制的次数。 │ -└──────────────────────────┴───────┴───────────────────────────────────────────────────────┘ -``` - - -## table_engine_read_through_distributed_cache {#table_engine_read_through_distributed_cache} - - - - - - - -仅在 ClickHouse Cloud 中生效。允许通过表引擎 / 表函数(S3、Azure 等)从分布式缓存读取数据。 - -## table_function_remote_max_addresses {#table_function_remote_max_addresses} - - - -为 [remote](../../sql-reference/table-functions/remote.md) 函数设置通过模式生成的地址的最大数量。 - -可能的取值: - -- 正整数。 - -## tcp_keep_alive_timeout {#tcp_keep_alive_timeout} - - - -在 TCP 开始发送 keepalive 保活探测报文之前,连接需要保持空闲的时长(以秒为单位) - -## temporary_data_in_cache_reserve_space_wait_lock_timeout_milliseconds {#temporary_data_in_cache_reserve_space_wait_lock_timeout_milliseconds} - - - - - -在文件系统缓存中为临时数据预留空间时,等待锁定缓存的时间 - -## temporary_files_buffer_size {#temporary_files_buffer_size} - - - - - -临时文件写入器所使用的缓冲区大小。缓冲区越大,系统调用次数越少,但占用的内存越多。 - -## temporary_files_codec {#temporary_files_codec} - - - -设置在磁盘上执行排序和连接操作时所使用临时文件的压缩编码格式。 - -可选值: - -- LZ4 — 使用 [LZ4](https://en.wikipedia.org/wiki/LZ4_(compression_algorithm)) 压缩。 -- NONE — 不进行压缩。 - -## text_index_use_bloom_filter {#text_index_use_bloom_filter} - - - - - -用于测试,控制是否在文本索引中使用布隆过滤器。 - -## throw_if_deduplication_in_dependent_materialized_views_enabled_with_async_insert {#throw_if_deduplication_in_dependent_materialized_views_enabled_with_async_insert} - - - - - -当 `deduplicate_blocks_in_dependent_materialized_views` 与 `async_insert` 同时启用时,在执行 INSERT 查询时抛出异常。这样可以保证结果的正确性,因为这两个特性不能一起工作。 - -## throw_if_no_data_to_insert {#throw_if_no_data_to_insert} - - - -允许或禁止空 INSERT 操作,默认启用(在空 INSERT 时会抛出错误)。仅对通过 [`clickhouse-client`](/interfaces/cli) 或 [gRPC 接口](/interfaces/grpc) 执行的 INSERT 生效。 - -## throw_on_error_from_cache_on_write_operations {#throw_on_error_from_cache_on_write_operations} - - - -在对写入操作(INSERT、合并)进行缓存时,忽略来自缓存的错误 - -## throw_on_max_partitions_per_insert_block {#throw_on_max_partitions_per_insert_block} - - - -用于控制在达到 `max_partitions_per_insert_block` 时的行为。 - -可能的取值: - -- `true` - 当插入数据块达到 `max_partitions_per_insert_block` 时,抛出异常。 -- `false` - 当达到 `max_partitions_per_insert_block` 时,仅记录一条警告日志。 - -:::tip -如果你想了解在更改 [`max_partitions_per_insert_block`](/operations/settings/settings#max_partitions_per_insert_block) 时对用户的影响,此设置会很有帮助。 -::: - -## throw_on_unsupported_query_inside_transaction {#throw_on_unsupported_query_inside_transaction} - - - - - -在事务中使用不支持的查询时抛出异常 - -## timeout_before_checking_execution_speed {#timeout_before_checking_execution_speed} - - - -在指定的秒数过去后,检查执行速度是否不低于 `min_execution_speed`,以确保执行速度不会过慢。 - -## timeout_overflow_mode {#timeout_overflow_mode} - - - -设置当查询运行时间超过 `max_execution_time`,或预计运行时间超过 `max_estimated_execution_time` 时的处理方式。 - -可能的取值: - -- `throw`:抛出异常(默认)。 -- `break`:停止执行查询并返回部分结果,就像源数据已经耗尽一样。 - -## timeout_overflow_mode_leaf {#timeout_overflow_mode_leaf} - - - -设置当叶子节点上的查询运行时间超过 `max_execution_time_leaf` 时的处理方式。 - -可能的取值: - -- `throw`:抛出异常(默认)。 -- `break`:停止执行查询并返回部分结果,就像 -源数据已经耗尽一样。 - -## totals_auto_threshold {#totals_auto_threshold} - - - -当 `totals_mode = 'auto'` 时使用的阈值。 -请参阅 “WITH TOTALS 修饰符” 一节。 - -## totals_mode {#totals_mode} - - - -说明在存在 HAVING 子句时,以及在设置了 max_rows_to_group_by 且 group_by_overflow_mode = 'any' 时,如何计算 TOTALS。 -参见“WITH TOTALS 修饰符”部分。 - -## trace_profile_events {#trace_profile_events} - - - -启用或禁用在每次更新 profile events 时收集堆栈跟踪(同时包含 profile event 的名称以及增量值),并将这些信息写入 [trace_log](/operations/system-tables/trace_log)。 - -可能的值: - -- 1 — 启用 profile events 的跟踪。 -- 0 — 禁用 profile events 的跟踪。 - -## transfer_overflow_mode {#transfer_overflow_mode} - - - -设置当数据量超过设定的某个限制时的处理方式。 - -可能的取值: - -- `throw`:抛出异常(默认)。 -- `break`:停止执行查询并返回部分结果,就像源数据已经耗尽一样。 - -## transform_null_in - - - -使 [IN](../../sql-reference/operators/in.md) 运算符对 [NULL](/sql-reference/syntax#null) 值执行相等比较。 - -默认情况下,`NULL` 值无法比较,因为 `NULL` 表示未定义的值。因此,比较 `expr = NULL` 必须始终返回 `false`。启用此设置后,对于 `IN` 运算符,`NULL = NULL` 将返回 `true`。 - -可能的取值: - -* 0 — 在 `IN` 运算符中比较 `NULL` 值时返回 `false`。 -* 1 — 在 `IN` 运算符中比较 `NULL` 值时返回 `true`。 - -**示例** - -考虑表 `null_in`: - -```text -┌──idx─┬─────i─┐ -│ 1 │ 1 │ -│ 2 │ NULL │ -│ 3 │ 3 │ -└──────┴───────┘ -``` - -查询: - -```sql -SELECT idx, i FROM null_in WHERE i IN (1, NULL) SETTINGS transform_null_in = 0; -``` - -结果: - -```text -┌──idx─┬────i─┐ -│ 1 │ 1 │ -└──────┴──────┘ -``` - -查询: - -```sql -SELECT idx, i FROM null_in WHERE i IN (1, NULL) SETTINGS transform_null_in = 1; -``` - -结果: - -```text -┌──idx─┬─────i─┐ -│ 1 │ 1 │ -│ 2 │ NULL │ -└──────┴───────┘ -``` - -**另请参阅** - -* [在 IN 运算符中的 NULL 处理](/sql-reference/operators/in#null-processing) - - -## traverse_shadow_remote_data_paths {#traverse_shadow_remote_data_paths} - - - - - -在查询 system.remote_data_paths 时,除实际表数据外,还遍历冻结数据(shadow 目录)。 - -## union_default_mode {#union_default_mode} - -为合并 `SELECT` 查询结果设置模式。该设置仅在与 [UNION](../../sql-reference/statements/select/union.md) 一起使用且未显式指定 `UNION ALL` 或 `UNION DISTINCT` 时才会生效。 - -可能的取值: - -- `'DISTINCT'` — ClickHouse 在合并查询结果时输出去重后的行。 -- `'ALL'` — ClickHouse 在合并查询结果时输出所有行,包括重复行。 -- `''` — 当与 `UNION` 一起使用时,ClickHouse 将抛出异常。 - -示例参见 [UNION](../../sql-reference/statements/select/union.md)。 - -## unknown_packet_in_send_data {#unknown_packet_in_send_data} - - - -在发送数据时,将第 N 个数据包替换为未知数据包 - -## update_parallel_mode {#update_parallel_mode} - - - - - -控制并发 `UPDATE` 查询的行为。 - -可能的取值: - -- `sync` - 依次(顺序)运行所有 `UPDATE` 查询。 -- `auto` - 仅对存在依赖关系的 `UPDATE` 查询顺序运行:即一个查询中被更新的列与另一查询表达式中使用的列之间存在依赖关系。 -- `async` - 不对 `UPDATE` 查询进行同步。 - -## update_sequential_consistency {#update_sequential_consistency} - - - - - -如果为 true,则会在执行 update 之前先将部件集合更新到最新版本。 - -## use_async_executor_for_materialized_views {#use_async_executor_for_materialized_views} - - - - - -对物化视图查询使用异步(可能为多线程)执行方式,可以在 INSERT 操作期间加快视图处理速度,但也会占用更多内存。 - -## use_cache_for_count_from_files {#use_cache_for_count_from_files} - - - -在使用表函数 `file`/`s3`/`url`/`hdfs`/`azureBlobStorage` 从文件执行 `count` 操作时启用行数缓存。 - -默认启用。 - -## use_client_time_zone {#use_client_time_zone} - - - -使用客户端时区来解析 DateTime 字符串值,而不是使用服务器时区。 - -## use_compact_format_in_distributed_parts_names {#use_compact_format_in_distributed_parts_names} - - - - - -对使用 `Distributed` 引擎的表,在后台(`distributed_foreground_insert`)执行 INSERT 时,使用紧凑格式来存储数据块。 - -可选值: - -- 0 — 使用 `user[:password]@host:port#default_database` 目录格式。 -- 1 — 使用 `[shard{shard_index}[_replica{replica_index}]]` 目录格式。 - -:::note - -- 当 `use_compact_format_in_distributed_parts_names=0` 时,集群定义中的更改不会对后台 INSERT 生效。 -- 当 `use_compact_format_in_distributed_parts_names=1` 时,更改集群定义中节点的顺序会导致 `shard_index`/`replica_index` 发生变化,需要注意。 -::: - -## use_concurrency_control {#use_concurrency_control} - - - - - -遵从服务器的并发控制机制(参见全局服务器设置 `concurrent_threads_soft_limit_num` 和 `concurrent_threads_soft_limit_ratio_to_cores`)。如果禁用该设置,即使服务器已过载也允许使用更多线程(不建议在正常使用中这样配置,主要用于测试场景)。 - -## use_hedged_requests {#use_hedged_requests} - - - - - -为远程查询启用 Hedged Requests 逻辑。它允许针对一次查询与多个不同副本建立多个连接。 -如果在 `hedged_connection_timeout` 内未能与副本成功建立现有连接, -或在 `receive_data_timeout` 内未接收到数据,则会建立新连接。查询将使用第一个发送非空进度数据包的连接(或者,如果设置了 `allow_changing_replica_until_first_data_packet`,则使用第一个发送数据包的连接); -其他连接会被取消。支持 `max_parallel_replicas > 1` 的查询。 - -默认启用。 - -云服务默认值:`1` - -## use_hive_partitioning {#use_hive_partitioning} - - - - - -启用后,ClickHouse 会在类文件表引擎 [File](/sql-reference/table-functions/file#hive-style-partitioning)/[S3](/sql-reference/table-functions/s3#hive-style-partitioning)/[URL](/sql-reference/table-functions/url#hive-style-partitioning)/[HDFS](/sql-reference/table-functions/hdfs#hive-style-partitioning)/[AzureBlobStorage](/sql-reference/table-functions/azureBlobStorage#hive-style-partitioning) 的路径中检测 Hive 风格的分区(`/name=value/`),并允许在查询中将分区列作为虚拟列使用。这些虚拟列的名称与分区路径中的名称相同,但会以 `_` 开头。 - -## use_iceberg_metadata_files_cache {#use_iceberg_metadata_files_cache} - - - - - -开启后,iceberg 表函数和 iceberg 存储可以使用 iceberg 元数据文件缓存。 - -可能的取值: - -- 0 - 禁用 -- 1 - 启用 - -## use_iceberg_partition_pruning {#use_iceberg_partition_pruning} - - - - - -对 Iceberg 表使用分区裁剪 - -## use_index_for_in_with_subqueries {#use_index_for_in_with_subqueries} - - - -当 `IN` 运算符右侧存在子查询或表表达式时,尝试使用索引。 - -## use_index_for_in_with_subqueries_max_values {#use_index_for_in_with_subqueries_max_values} - - - -在使用表索引进行过滤时,`IN` 运算符右侧集合的最大大小上限。此设置可以避免在大查询中为准备额外数据结构而导致的性能下降和更高的内存占用。零表示不限制。 - -## use_join_disjunctions_push_down {#use_join_disjunctions_push_down} - - - - - -启用将 `JOIN` 条件中由 `OR` 连接的部分下推到各自的输入侧(“部分下推”)。 -这使得存储引擎可以更早进行过滤,从而减少读入的数据量。 -该优化保持语义不变,仅在每个顶层 `OR` 分支都为目标侧提供至少一个确定性谓词时才会应用。 - -## use_legacy_to_time {#use_legacy_to_time} - - - - - -启用时,允许使用旧版的 `toTime` 函数,该函数在保留时间部分的情况下,将带时间的日期转换为某个固定日期上的时间值。 -否则,将使用新的 `toTime` 函数,该函数会将不同类型的数据转换为 `Time` 类型。 -旧版函数也始终可以通过 `toTimeWithFixedDate` 无条件使用。 - -## use_page_cache_for_disks_without_file_cache {#use_page_cache_for_disks_without_file_cache} - - - - - -对未启用文件系统缓存的远程磁盘使用用户空间页缓存。 - -## use_page_cache_with_distributed_cache {#use_page_cache_with_distributed_cache} - - - - - -在使用分布式缓存时使用用户态页面缓存。 - -## use_paimon_partition_pruning {#use_paimon_partition_pruning} - - - - - - - -对 Paimon 表函数启用 Paimon 分区剪枝 - -## use_query_cache {#use_query_cache} - - - -开启后,`SELECT` 查询可以使用[查询缓存](../query-cache.md)。参数 [enable_reads_from_query_cache](#enable_reads_from_query_cache) -和 [enable_writes_to_query_cache](#enable_writes_to_query_cache) 可以以更细粒度控制缓存的使用方式。 - -可能的取值: - -- 0 - 禁用 -- 1 - 启用 - -## use_query_condition_cache {#use_query_condition_cache} - - - - - -启用 [查询条件缓存(query condition cache)](/operations/query-condition-cache)。该缓存会存储数据片段中不满足 `WHERE` 子句条件的 granule(数据粒度单元)范围, -并在后续查询中将这些信息复用为临时索引。 - -可选值: - -- 0 - 禁用 -- 1 - 启用 - -## use_roaring_bitmap_iceberg_positional_deletes {#use_roaring_bitmap_iceberg_positional_deletes} - - - - - -在 Iceberg 位置删除中使用 Roaring Bitmap。 - -## use_skip_indexes {#use_skip_indexes} - - - -在查询执行时使用数据跳过索引。 - -可能的取值: - -- 0 — 禁用。 -- 1 — 启用。 - -## use_skip_indexes_if_final {#use_skip_indexes_if_final} - - - - - -控制在执行带有 FINAL 修饰符的查询时,是否使用跳过索引。 - -跳过索引可能会排除包含最新数据的行(粒度),这可能导致带有 FINAL 修饰符的查询返回不正确的结果。启用该设置时,即使使用 FINAL 修饰符也会应用跳过索引,有可能提升性能,但存在遗漏最近更新的风险。此设置应与 use_skip_indexes_if_final_exact_mode 设置保持同步启用(默认已启用)。 - -可能的取值: - -- 0 — 禁用。 -- 1 — 启用。 - -## use_skip_indexes_if_final_exact_mode {#use_skip_indexes_if_final_exact_mode} - - - - - -控制在执行带有 FINAL 修饰符的查询时,是否在较新的数据片段中展开由跳过索引(skip index)返回的颗粒(granule),以返回正确的结果。 - -使用跳过索引可能会排除包含最新数据的行(颗粒),从而导致结果不正确。通过该设置,可以确保扫描与跳过索引返回范围有重叠的较新数据片段,从而返回正确结果。只有在应用可以接受基于跳过索引查找得到的近似结果时,才应禁用该设置。 - -可能的取值: - -- 0 — 禁用。 -- 1 — 启用。 - -## use_skip_indexes_on_data_read {#use_skip_indexes_on_data_read} - - - - - -启用在读取数据时使用数据跳过索引的功能。 - -启用后,在读取每个数据粒度时,会动态评估跳过索引,而不是在查询执行开始前进行预先分析。这样可以减少查询启动延迟。 - -可选值: - -- 0 — 禁用。 -- 1 — 启用。 - -## use_statistics_cache {#use_statistics_cache} - - - - - - - -在查询中使用统计缓存,以避免为每个数据分片单独加载统计信息的开销 - -## use_structure_from_insertion_table_in_table_functions {#use_structure_from_insertion_table_in_table_functions} - - - - - -使用插入表的结构,而不是根据数据推断表结构。可选值:0 - 禁用,1 - 启用,2 - 自动 - -## use_text_index_dictionary_cache {#use_text_index_dictionary_cache} - - - - - -是否使用已反序列化的文本索引字典块缓存。 -在处理大量文本索引查询时,使用文本索引字典块缓存可以显著降低延迟并提高吞吐量。 - -## use_text_index_header_cache {#use_text_index_header_cache} - - - - - -是否使用反序列化的文本索引头缓存。 -在处理大量文本索引查询时,使用文本索引头缓存可以显著降低延迟并提高吞吐量。 - -## use_text_index_postings_cache {#use_text_index_postings_cache} - - - - - -是否使用反序列化后的文本索引倒排列表缓存。 -在处理大量文本索引查询时,使用文本索引倒排列表缓存可以显著降低延迟并提高吞吐量。 - -## use_uncompressed_cache {#use_uncompressed_cache} - - - -是否使用未压缩数据块缓存。可取值为 0 或 1。默认值为 0(禁用)。 -使用未压缩缓存(仅适用于 MergeTree 系列表)在处理大量短查询时可以显著降低延迟并提高吞吐量。为那些频繁发送短请求的用户启用此设置。同时需要关注 [uncompressed_cache_size](/operations/server-configuration-parameters/settings#uncompressed_cache_size) 配置参数(只能在配置文件中设置)——未压缩缓存块的大小。默认值为 8 GiB。未压缩缓存按需填充,使用最少的数据会被自动删除。 - -对于读取数据量相对较大的查询(例如一百万行或更多),未压缩缓存会被自动禁用,以将空间留给真正的小查询。这意味着你可以始终将 `use_uncompressed_cache` 设置为 1。 - -## use_variant_as_common_type - - - - - -允许在参数类型没有通用类型时,将 `Variant` 类型作为 [if](../../sql-reference/functions/conditional-functions.md/#if)/[multiIf](../../sql-reference/functions/conditional-functions.md/#multiIf)/[array](../../sql-reference/functions/array-functions.md)/[map](../../sql-reference/functions/tuple-map-functions.md) 函数的结果类型。 - -示例: - -```sql -SET use_variant_as_common_type = 1; -SELECT toTypeName(if(number % 2, number, range(number))) as variant_type FROM numbers(1); -SELECT if(number % 2, number, range(number)) as variant FROM numbers(5); -``` - -```text -┌─variant_type───────────────────┐ -│ Variant(Array(UInt64), UInt64) │ -└────────────────────────────────┘ -┌─variant───┐ -│ [] │ -│ 1 │ -│ [0,1] │ -│ 3 │ -│ [0,1,2,3] │ -└───────────┘ -``` - -```sql -SET use_variant_as_common_type = 1; -SELECT toTypeName(multiIf((number % 4) = 0, 42, (number % 4) = 1, [1, 2, 3], (number % 4) = 2, 'Hello, World!', NULL)) AS variant_type FROM numbers(1); -SELECT multiIf((number % 4) = 0, 42, (number % 4) = 1, [1, 2, 3], (number % 4) = 2, 'Hello, World!', NULL) AS variant FROM numbers(4); -``` - -```text -─variant_type─────────────────────────┐ -│ Variant(Array(UInt8), String, UInt8) │ -└──────────────────────────────────────┘ - -┌─variant───────┐ -│ 42 │ -│ [1,2,3] │ -│ Hello, World! │ -│ ᴺᵁᴸᴸ │ -└───────────────┘ -``` - -```sql -SET use_variant_as_common_type = 1; -SELECT toTypeName(array(range(number), number, 'str_' || toString(number))) as array_of_variants_type from numbers(1); -SELECT array(range(number), number, 'str_' || toString(number)) as array_of_variants FROM numbers(3); -``` - -```text -┌─array_of_variants_type────────────────────────┐ -│ Array(Variant(Array(UInt64), String, UInt64)) │ -└───────────────────────────────────────────────┘ - -┌─array_of_variants─┐ -│ [[],0,'str_0'] │ -│ [[0],1,'str_1'] │ -│ [[0,1],2,'str_2'] │ -└───────────────────┘ -``` - -```sql -SET use_variant_as_common_type = 1; -SELECT toTypeName(map('a', range(number), 'b', number, 'c', 'str_' || toString(number))) as map_of_variants_type from numbers(1); -SELECT map('a', range(number), 'b', number, 'c', 'str_' || toString(number)) as map_of_variants FROM numbers(3); -``` - -```text -┌─map_of_variants_type────────────────────────────────┐ -│ Map(String, Variant(Array(UInt64), String, UInt64)) │ -└─────────────────────────────────────────────────────┘ - -┌─map_of_variants───────────────┐ -│ {'a':[],'b':0,'c':'str_0'} │ -│ {'a':[0],'b':1,'c':'str_1'} │ -│ {'a':[0,1],'b':2,'c':'str_2'} │ -└───────────────────────────────┘ -``` - - -## use_with_fill_by_sorting_prefix {#use_with_fill_by_sorting_prefix} - - - - - -在 ORDER BY 子句中位于 WITH FILL 列之前的列构成排序前缀。具有不同排序前缀值的行会分别填充 - -## validate_enum_literals_in_operators {#validate_enum_literals_in_operators} - - - - - -如果启用,则会在 `IN`、`NOT IN`、`==`、`!=` 等运算符中,按照对应的枚举类型验证枚举字面量;如果字面量不是有效的枚举值,则抛出异常。 - -## validate_mutation_query {#validate_mutation_query} - - - - - -在接受变更查询之前对其进行验证。变更在后台执行,如果运行无效查询,会导致变更任务卡住,并且需要手动干预。 - -仅在遇到不向后兼容的 Bug 时才修改此设置。 - -## validate_polygons {#validate_polygons} - - - - - -启用或禁用在 [pointInPolygon](/sql-reference/functions/geo/coordinates#pointinpolygon) 函数中,当多边形自相交或自相切时抛出异常。 - -可能的值: - -- 0 — 禁用抛出异常。`pointInPolygon` 接受无效多边形,并为其返回可能不正确的结果。 -- 1 — 启用抛出异常。 - -## vector_search_filter_strategy {#vector_search_filter_strategy} - - - - - -如果向量搜索查询包含 WHERE 子句,此设置决定是先评估 WHERE 子句(预过滤),还是先通过向量相似度索引检索(后过滤)。可选值: - -- `auto` — 后过滤(其精确语义未来可能会发生变化)。 -- `postfilter` — 使用向量相似度索引先查找最近邻,然后再应用其他过滤条件。 -- `prefilter` — 先评估其他过滤条件,然后执行穷举搜索以查找最近邻。 - -## vector_search_index_fetch_multiplier {#vector_search_index_fetch_multiplier} - -**别名**: `vector_search_postfilter_multiplier` - - - - - -将从向量相似度索引中获取的最近邻个数乘以该数值。仅在与其他谓词一起进行后过滤(post-filtering)时,或当设置 `vector_search_with_rescoring = 1` 时才会生效。 - -## vector_search_with_rescoring {#vector_search_with_rescoring} - - - - - -是否让 ClickHouse 为使用向量相似度索引的查询执行重新评分。 -在不进行重新评分的情况下,向量相似度索引会直接返回包含最佳匹配的行。 -启用重新评分后,这些行会被扩展到 granule 级别,并对该 granule 中的所有行重新进行检查。 -在大多数情况下,重新评分只会对准确性带来轻微提升,但会显著降低向量搜索查询的性能。 -注意:在未启用重新评分但启用了并行副本的情况下运行的查询,可能会退回到需要重新评分的执行路径。 - -## wait_changes_become_visible_after_commit_mode {#wait_changes_become_visible_after_commit_mode} - - - - - -等待已提交的更改在最新快照中实际可见 - -## wait_for_async_insert {#wait_for_async_insert} - - - -如果为 true,则会等待异步插入操作处理完成。 - -## wait_for_async_insert_timeout {#wait_for_async_insert_timeout} - - - -等待异步插入处理完成的超时时间 - -## wait_for_window_view_fire_signal_timeout {#wait_for_window_view_fire_signal_timeout} - - - - - -用于在事件时间处理过程中等待 window view 触发信号的超时时间 - -## window_view_clean_interval {#window_view_clean_interval} - - - - - -窗口视图的清理时间间隔(以秒为单位),用于清理过期数据。 - -## window_view_heartbeat_interval {#window_view_heartbeat_interval} - - - - - -用于表明 watch 查询仍在运行的心跳间隔(以秒为单位)。 - -## workload {#workload} - - - -用于访问资源的工作负载名称 - -## write_full_path_in_iceberg_metadata {#write_full_path_in_iceberg_metadata} - - - - - - - -将完整路径(包括 S3://)写入 Iceberg 元数据文件。 - -## write_through_distributed_cache {#write_through_distributed_cache} - - - - - - - -仅在 ClickHouse Cloud 中生效。允许通过分布式缓存执行写入(对 S3 的写入也将由分布式缓存完成) - -## write_through_distributed_cache_buffer_size {#write_through_distributed_cache_buffer_size} - - - - - - - -仅在 ClickHouse Cloud 中生效。用于设置直写分布式缓存的缓冲区大小。如果设置为 0,则使用在没有分布式缓存时会使用的缓冲区大小。 - -## zstd_window_log_max {#zstd_window_log_max} - - - -允许您设置 ZSTD 的最大 window_log 参数值(不适用于 MergeTree 系列引擎) \ No newline at end of file +{/*请勿编辑 – 此文件为自动生成文件*/ } diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/asynchronous_inserts.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/asynchronous_inserts.md index f7dcfb3a9f9..c7d2930792e 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/asynchronous_inserts.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/asynchronous_inserts.md @@ -1,6 +1,6 @@ --- description: '包含队列中待处理异步插入信息的系统表。' -keywords: ['system 表', 'asynchronous_inserts'] +keywords: ['系统表', 'asynchronous_inserts'] slug: /operations/system-tables/asynchronous_inserts title: 'system.asynchronous_inserts' doc_type: 'reference' @@ -10,21 +10,12 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -包含队列中待处理异步插入的相关信息。 +包含关于队列中待处理异步插入的相关信息。 列: {/*AUTOGENERATED_START*/ } -* `query` ([String](../../sql-reference/data-types/)) — 查询文本。 -* `database` ([String](../../sql-reference/data-types/)) — 数据库名称。 -* `table` ([String](../../sql-reference/data-types/)) — 表名。 -* `format` ([String](../../sql-reference/data-types/)) — 格式名称。 -* `first_update` ([DateTime64(6)](../../sql-reference/data-types/)) — 首次插入时间,精确到微秒。 -* `total_bytes` ([UInt64](../../sql-reference/data-types/)) — 队列中等待的数据总字节数。 -* `entries.query_id` ([Array(String)](../../sql-reference/data-types/)) — 队列中等待的各插入查询的查询 ID 数组。 -* `entries.bytes` ([Array(UInt64)](../../sql-reference/data-types/)) — 队列中等待的每个插入查询对应的字节数数组。 - {/*AUTOGENERATED_END*/ } **示例** @@ -52,5 +43,5 @@ entries.bytes: [133223] **另请参阅** -* [system.query_log](/operations/system-tables/query_log) — `query_log` 系统表的介绍,该表包含查询执行的常规信息。 -* [system.asynchronous_insert_log](/operations/system-tables/asynchronous_insert_log) — 此表包含异步插入操作的相关信息。 +* [system.query_log](/operations/system-tables/query_log) — `query_log` 系统表的描述,其中包含有关查询执行的一般信息。 +* [system.asynchronous_insert_log](/operations/system-tables/asynchronous_insert_log) — 此表包含已执行异步插入操作的信息。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/asynchronous_loader.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/asynchronous_loader.md index 771905a6db1..50cfffb55a0 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/asynchronous_loader.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/asynchronous_loader.md @@ -1,5 +1,5 @@ --- -description: '包含最近异步作业(例如正在加载的表)的信息和状态的系统表。表中每个作业对应一行。' +description: '包含关于最近异步作业(例如正在加载的表)的信息和状态的系统表。该表中每个作业对应一行记录。' keywords: ['系统表', 'asynchronous_loader'] slug: /operations/system-tables/asynchronous_loader title: 'system.asynchronous_loader' @@ -13,7 +13,7 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -包含最近异步作业(例如表加载)的信息和状态。该表为每个作业包含一行。可以使用工具 `utils/async_loader_graph` 对该表中的信息进行可视化。 +包含近期异步任务的信息和状态(例如表加载任务)。该表中每个任务对应一行记录。可以使用工具 `utils/async_loader_graph` 对该表中的信息进行可视化。 示例: @@ -28,53 +28,38 @@ FORMAT Vertical {/*AUTOGENERATED_START*/ } -* `job` ([String](../../sql-reference/data-types/)) — 任务名称(不一定唯一)。 -* `job_id` ([UInt64](../../sql-reference/data-types/)) — 任务的唯一 ID。 -* `dependencies` ([Array(UInt64)](../../sql-reference/data-types/)) — 在此任务之前必须完成的任务 ID 列表。 -* `dependencies_left` ([UInt64](../../sql-reference/data-types/)) — 当前尚未完成的依赖数量。 -* `status` ([Enum8('PENDING' = 0, 'OK' = 1, 'FAILED' = 2, 'CANCELED' = 3)](../../sql-reference/data-types/)) — 任务当前的加载状态:PENDING:加载任务尚未开始。OK:加载任务已执行并成功完成。FAILED:加载任务已执行但失败。CANCELED:由于任务被移除或其依赖失败而不会被执行。 -* `is_executing` ([UInt8](../../sql-reference/data-types/)) — 该任务当前正由某个 worker 执行。 -* `is_blocked` ([UInt8](../../sql-reference/data-types/)) — 该任务正在等待其依赖完成。 -* `is_ready` ([UInt8](../../sql-reference/data-types/)) — 该任务已准备好执行并正在等待 worker。 -* `elapsed` ([Float64](../../sql-reference/data-types/)) — 自开始执行以来经过的秒数。如果任务尚未开始则为零;如果任务已结束则为总执行时间。 -* `pool_id` ([UInt64](../../sql-reference/data-types/)) — 当前分配给该任务的 pool 的 ID。 -* `pool` ([String](../../sql-reference/data-types/)) — `pool_id` 对应的 pool 名称。 -* `priority` ([Int64](../../sql-reference/data-types/)) — `pool_id` 对应的 pool 优先级。 -* `execution_pool_id` ([UInt64](../../sql-reference/data-types/)) — 实际执行该任务的 pool 的 ID。在执行开始之前等于最初分配的 pool。 -* `execution_pool` ([String](../../sql-reference/data-types/)) — `execution_pool_id` 对应的 pool 名称。 -* `execution_priority` ([Int64](../../sql-reference/data-types/)) — `execution_pool_id` 对应的 pool 优先级。 -* `ready_seqno` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 对于就绪任务为非空。worker 会从其 pool 的就绪队列中拉取下一个待执行任务。如果有多个就绪任务,则选择 `ready_seqno` 值最小的任务。 -* `waiters` ([UInt64](../../sql-reference/data-types/)) — 等待该任务的线程数。 -* `exception` ([Nullable(String)](../../sql-reference/data-types/)) — 对于失败和被取消的任务为非空。保存查询执行期间抛出的错误消息,或者导致该任务被取消的错误消息,以及依赖失败的任务名称链。 -* `schedule_time` ([DateTime64(6)](../../sql-reference/data-types/)) — 任务被创建并计划执行的时间(通常包括其所有依赖)。 -* `enqueue_time` ([Nullable(DateTime64(6))](../../sql-reference/data-types/)) — 任务变为就绪并被入队到其 pool 的就绪队列中的时间。如果任务尚未就绪则为 NULL。 -* `start_time` ([Nullable(DateTime64(6))](../../sql-reference/data-types/)) — worker 从就绪队列中将任务出队并开始执行的时间。如果任务尚未开始则为 NULL。 -* `finish_time` ([Nullable(DateTime64(6))](../../sql-reference/data-types/)) — 任务执行完成的时间。如果任务尚未结束则为 NULL。 - {/*AUTOGENERATED_END*/ } -挂起的作业可能处于以下任一状态: +挂起的作业可能处于以下状态之一: -* `is_executing` (`UInt8`) - 该作业当前正由某个 worker 执行。 +* `is_executing` (`UInt8`) - 当前有 worker 正在执行该作业。 * `is_blocked` (`UInt8`) - 该作业正在等待其依赖完成。 -* `is_ready` (`UInt8`) - 该作业已准备好执行,正在等待 worker。 -* `elapsed` (`Float64`) - 自开始执行以来经过的秒数。如果作业尚未开始,则为 0;如果作业已完成,则为总执行时间。 +* `is_ready` (`UInt8`) - 该作业已准备好执行并在等待 worker。 +* `elapsed` (`Float64`) - 自开始执行以来经过的秒数。如果作业尚未启动则为 0;如果作业已完成则为总执行时间。 + +每个作业都有一个与之关联的池,并在该池中启动。每个池都有一个固定的优先级,以及一个可变的最大 worker 数量。优先级越高(`priority` 值越小)的作业越先运行。当至少有一个高优先级作业处于就绪或执行状态时,不会启动低优先级作业。可以提升作业的优先级(但不能降低)。例如,如果某个查询需要某张表,那么该表的加载和启动作业将被优先处理。可以在作业执行期间提升其优先级,但作业不会从其 `execution_pool` 迁移到新分配的 `pool`。该作业在创建新作业时使用其 `pool`,以避免优先级反转。已经启动的作业不会被更高优先级的作业抢占,并且一旦开始就会始终运行至完成。 + +* `pool_id` (`UInt64`) - 当前分配给该作业的池的 ID。 + +* `pool` (`String`) - `pool_id` 对应池的名称。 + +* `priority` (`Int64`) - `pool_id` 对应池的优先级。 +* `execution_pool_id` (`UInt64`) - 实际执行该作业的池的 ID。执行开始前等于最初分配的池。 -每个作业都有一个关联的池,并在该池中启动。每个池都有固定的优先级以及可变的最大 worker 数量。优先级更高(`priority` 值更小)的作业会先运行。当至少存在一个更高优先级的就绪或正在执行的作业时,不会启动更低优先级的作业。可以提升作业优先级(但不能降低)。例如,如果传入查询需要某个表,则用于加载该表及启动流程的作业会被优先处理。在作业执行期间也可以提升其优先级,但作业不会从其 `execution_pool` 移动到新分配的 `pool`。该作业使用 `pool` 来创建新作业,以避免优先级反转问题。已启动的作业不会被更高优先级的作业抢占,并且在启动后总是会运行至完成。 -- `pool_id` (`UInt64`) - 当前分配给该作业的池的 ID。 -- `pool` (`String`) - `pool_id` 对应池的名称。 -- `priority` (`Int64`) - `pool_id` 对应池的优先级。 -- `execution_pool_id` (`UInt64`) - 执行该作业的池的 ID。在执行开始前等于最初分配的池。 -- `execution_pool` (`String`) - `execution_pool_id` 对应池的名称。 -- `execution_priority` (`Int64`) - `execution_pool_id` 对应池的优先级。 +* `execution_pool` (`String`) - `execution_pool_id` 对应池的名称。 -- `ready_seqno` (`Nullable(UInt64)`) - 对于就绪作业为非空。worker 会从其池的就绪队列中拉取下一个要执行的作业。如果有多个就绪作业,则选择 `ready_seqno` 值最小的作业。 -- `waiters` (`UInt64`) - 正在等待该作业的线程数量。 -- `exception` (`Nullable(String)`) - 对于失败和被取消的作业为非空。包含在查询执行期间抛出的错误消息,或导致取消该作业的错误,以及因依赖失败而形成的作业名称链。 +* `execution_priority` (`Int64`) - `execution_pool_id` 对应池的优先级。 + +* `ready_seqno` (`Nullable(UInt64)`) - 对就绪作业为非空。worker 会从其池的就绪队列中拉取下一个将要执行的作业。如果存在多个就绪作业,则选择 `ready_seqno` 值最小的作业。 + +* `waiters` (`UInt64`) - 等待该作业的线程数量。 + +* `exception` (`Nullable(String)`) - 对失败和被取消的作业为非空。保存查询执行期间抛出的错误消息,或导致该作业被取消的错误,以及因依赖失败产生的作业名称链。 作业生命周期中的时间点: -- `schedule_time` (`DateTime64`) - 作业被创建并被调度执行的时间(通常包括其所有依赖)。 -- `enqueue_time` (`Nullable(DateTime64)`) - 作业变为就绪并被加入其池的就绪队列的时间。如果作业尚未就绪,则为 Null。 -- `start_time` (`Nullable(DateTime64)`) - worker 从就绪队列中取出作业并开始执行的时间。如果作业尚未开始,则为 Null。 -- `finish_time` (`Nullable(DateTime64)`) - 作业执行结束的时间。如果作业尚未完成,则为 Null。 + +* `schedule_time` (`DateTime64`) - 作业被创建并调度执行的时间(通常包括其所有依赖)。 +* `enqueue_time` (`Nullable(DateTime64)`) - 作业变为就绪并被加入其池的就绪队列的时间。如果作业尚未就绪则为 Null。 +* `start_time` (`Nullable(DateTime64)`) - worker 从就绪队列中取出该作业并开始执行的时间。如果作业尚未开始则为 Null。 +* `finish_time` (`Nullable(DateTime64)`) - 作业执行完成的时间。如果作业尚未完成则为 Null。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/azure_queue_settings.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/azure_queue_settings.md index 10f453e277f..658b44b9a72 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/azure_queue_settings.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/azure_queue_settings.md @@ -1,26 +1,17 @@ --- -description: '包含 AzureQueue 表设置相关的信息。 - 自服务器版本 `24.10` 起可用。' +description: '包含 AzureQueue 表设置相关信息的系统表。 + 从服务器版本 `24.10` 起可用。' keywords: ['system table', 'azure_queue_settings'] slug: /operations/system-tables/azure_queue_settings title: 'system.azure_queue_settings' doc_type: 'reference' --- -包含 [AzureQueue](../../engines/table-engines/integrations/azure-queue.md) 表设置相关的信息。 -自服务器版本 `24.10` 起可用。 +包含有关 [AzureQueue](../../engines/table-engines/integrations/azure-queue.md) 表设置的信息。 +从服务器版本 `24.10` 起可用。 列: {/*AUTOGENERATED_START*/ } -* `database` ([String](../../sql-reference/data-types/)) — 使用 S3Queue Engine 的表所在的数据库。 -* `table` ([String](../../sql-reference/data-types/)) — 使用 S3Queue Engine 的表名。 -* `name` ([String](../../sql-reference/data-types/)) — 设置名称。 -* `value` ([String](../../sql-reference/data-types/)) — 设置值。 -* `type` ([String](../../sql-reference/data-types/)) — 设置类型(具体实现相关的字符串值)。 -* `changed` ([UInt8](../../sql-reference/data-types/)) — 如果该设置在配置中被显式定义或被显式修改,则为 1。 -* `description` ([String](../../sql-reference/data-types/)) — 设置描述。 -* `alterable` ([UInt8](../../sql-reference/data-types/)) — 指示当前用户是否可以通过 ALTER TABLE MODIFY SETTING 更改该设置:0 — 当前用户可以更改该设置,1 — 当前用户不能更改该设置。 - {/*AUTOGENERATED_END*/ } diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/build_options.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/build_options.md index 5c73c2eca06..5e130315192 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/build_options.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/build_options.md @@ -1,20 +1,17 @@ --- -description: '包含 ClickHouse 服务器构建选项相关信息。' +description: '包含有关 ClickHouse 服务器构建选项的信息。' slug: /operations/system-tables/build_options title: 'system.build_options' -keywords: ['system table', 'build_options'] +keywords: ['系统表', 'build_options'] doc_type: 'reference' --- -包含 ClickHouse 服务器构建选项相关信息。 +包含有关 ClickHouse 服务器构建选项的信息。 -Columns: +列: {/*AUTOGENERATED_START*/ } -* `name` ([String](../../sql-reference/data-types/)) — 构建选项的名称。 -* `value` ([String](../../sql-reference/data-types/)) — 构建选项的值。 - {/*AUTOGENERATED_END*/ } **示例** diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/clusters.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/clusters.md index 40b8b897244..f61977af03e 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/clusters.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/clusters.md @@ -1,40 +1,17 @@ --- -description: '包含关于配置文件中已配置集群及其服务器的信息。' +description: '包含配置文件中可用集群及其服务器信息的系统表。' keywords: ['system table', 'clusters'] slug: /operations/system-tables/clusters title: 'system.clusters' doc_type: 'reference' --- -包含关于配置文件中已配置集群及其服务器的信息。 +包含配置文件中可用集群及这些集群中服务器信息的系统表。 列: {/*AUTOGENERATED_START*/ } -* `cluster` ([String](../../sql-reference/data-types/)) — 集群名称。 -* `shard_num` ([UInt32](../../sql-reference/data-types/)) — 集群内的分片编号,从 1 开始。 -* `shard_name` ([String](../../sql-reference/data-types/)) — 集群中该分片的名称。 -* `shard_weight` ([UInt32](../../sql-reference/data-types/)) — 写入数据时该分片的相对权重。 -* `internal_replication` ([UInt8](../../sql-reference/data-types/)) — 标志,指示此主机是否属于可以自行完成数据复制的副本集合。 -* `replica_num` ([UInt32](../../sql-reference/data-types/)) — 分片内的副本编号,从 1 开始。 -* `host_name` ([String](../../sql-reference/data-types/)) — 主机名,与配置中指定的一致。 -* `host_address` ([String](../../sql-reference/data-types/)) — 从 DNS 获取的主机 IP 地址。 -* `port` ([UInt16](../../sql-reference/data-types/)) — 用于连接到服务器的端口。 -* `is_local` ([UInt8](../../sql-reference/data-types/)) — 标志,指示该主机是否为本地主机。 -* `user` ([String](../../sql-reference/data-types/)) — 用于连接到服务器的用户名。 -* `default_database` ([String](../../sql-reference/data-types/)) — 默认数据库名称。 -* `errors_count` ([UInt32](../../sql-reference/data-types/)) — 此主机访问副本失败的次数。 -* `slowdowns_count` ([UInt32](../../sql-reference/data-types/)) — 使用对冲请求建立连接时,因变慢而导致切换副本的次数。 -* `estimated_recovery_time` ([UInt32](../../sql-reference/data-types/)) — 副本错误计数清零并被视为恢复正常前预计剩余的秒数。 -* `database_shard_name` ([String](../../sql-reference/data-types/)) — `Replicated` 数据库分片名称(适用于属于 `Replicated` 数据库的集群)。 -* `database_replica_name` ([String](../../sql-reference/data-types/)) — `Replicated` 数据库副本名称(适用于属于 `Replicated` 数据库的集群)。 -* `is_shared_catalog_cluster` ([UInt8](../../sql-reference/data-types/)) — 布尔值,指示集群是否属于共享目录。 -* `is_active` ([Nullable(UInt8)](../../sql-reference/data-types/)) — `Replicated` 数据库副本的状态(适用于属于 `Replicated` 数据库的集群):1 表示 “replica is online”,0 表示 “replica is offline”,NULL 表示 “unknown”。 -* `unsynced_after_recovery` ([Nullable(UInt8)](../../sql-reference/data-types/)) — 指示 `Replicated` 数据库副本在创建或恢复之后,其复制延迟是否超过 max_replication_lag_to_enqueue。 -* `replication_lag` ([Nullable(UInt32)](../../sql-reference/data-types/)) — `Replicated` 数据库副本的复制延迟(适用于属于 `Replicated` 数据库的集群)。 -* `recovery_time` ([Nullable(UInt64)](../../sql-reference/data-types/)) — `Replicated` 数据库副本的恢复时间(适用于属于 `Replicated` 数据库的集群),单位为毫秒。 - {/*AUTOGENERATED_END*/ } **示例** @@ -67,34 +44,30 @@ estimated_recovery_time: 0 database_shard_name: database_replica_name: is_active: NULL -``` - -第 2 行: +Row 2: ────── -cluster: test_cluster_two_shards -shard_num: 2 -shard_name: shard_02 -shard_weight: 1 -replica_num: 1 -host_name: 127.0.0.2 -host_address: 127.0.0.2 +cluster: test_cluster_two_shards +shard_num: 2 +shard_name: shard_02 +shard_weight: 1 +replica_num: 1 +host_name: 127.0.0.2 +host_address: 127.0.0.2 port: 9000 -is_local: 0 +is_local: 0 user: default -default_database: -errors_count: 0 -slowdowns_count: 0 -estimated_recovery_time: 0 -database_shard_name: -database_replica_name: -is_active: NULL - +default_database: +errors_count: 0 +slowdowns_count: 0 +estimated_recovery_time: 0 +database_shard_name: +database_replica_name: +is_active: NULL ``` **另请参阅** -- [Distributed 表引擎](../../engines/table-engines/special/distributed.md) -- [distributed_replica_error_cap 设置](../../operations/settings/settings.md#distributed_replica_error_cap) -- [distributed_replica_error_half_life 设置](../../operations/settings/settings.md#distributed_replica_error_half_life) -``` +* [Distributed 表引擎](../../engines/table-engines/special/distributed.md) +* [distributed_replica_error_cap 设置](../../operations/settings/settings.md#distributed_replica_error_cap) +* [distributed_replica_error_half_life 设置](../../operations/settings/settings.md#distributed_replica_error_half_life) diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/codecs.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/codecs.md index b9941eb0f3c..8f2f054cd68 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/codecs.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/codecs.md @@ -1,28 +1,19 @@ --- -description: '包含队列中编解码器的信息。' -keywords: ['系统表', '编解码器', '压缩'] +description: '包含队列中编解码器信息的系统表。' +keywords: ['system table', 'codecs', 'compression'] slug: /operations/system-tables/codecs title: 'system.codecs' doc_type: 'reference' --- -包含压缩和加密编解码器的信息。 +包含有关压缩和加密编解码器的信息。 -你可以使用此表获取可用的压缩和加密编解码器的信息。 +您可以使用该表获取可用压缩和加密编解码器的信息。 -`system.codecs` 表包含以下列(列类型在括号中显示): +`system.codecs` 表包含以下列(括号中为列类型): {/*AUTOGENERATED_START*/ } -* `name` ([String](../../sql-reference/data-types/)) — 编解码器名称。 -* `method_byte` ([UInt8](../../sql-reference/data-types/)) — 在压缩文件中用于指示编解码器的字节。 -* `is_compression` ([UInt8](../../sql-reference/data-types/)) — 如果该编解码器执行压缩则为 true,否则它可能只是有助于压缩的转换。 -* `is_generic_compression` ([UInt8](../../sql-reference/data-types/)) — 该编解码器是通用压缩算法,例如 lz4、zstd。 -* `is_encryption` ([UInt8](../../sql-reference/data-types/)) — 该编解码器执行加密。 -* `is_timeseries_codec` ([UInt8](../../sql-reference/data-types/)) — 该编解码器用于浮点型时间序列数据。 -* `is_experimental` ([UInt8](../../sql-reference/data-types/)) — 该编解码器为实验性功能。 -* `description` ([String](../../sql-reference/data-types/)) — 对该编解码器的概要描述。 - {/*AUTOGENERATED_END*/ } **示例** @@ -45,5 +36,5 @@ is_generic_compression: 1 is_encryption: 0 is_timeseries_codec: 0 is_experimental: 0 -description: 极快;压缩效果好;兼顾速度与效率。 +description: 极快;压缩效果好;速度与效率兼顾。 ``` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/columns.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/columns.md index 792459d1862..5e8b4c82516 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/columns.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/columns.md @@ -8,39 +8,15 @@ doc_type: 'reference' 包含所有表中列的信息。 -你可以使用该表获取类似于 [DESCRIBE TABLE](../../sql-reference/statements/describe-table.md) 查询返回的信息,但可以一次性针对多个表。 +你可以使用此表获取类似 [DESCRIBE TABLE](../../sql-reference/statements/describe-table.md) 查询返回的信息,但可以一次性针对多个表进行查询。 -来自[临时表](../../sql-reference/statements/create/table.md#temporary-tables)的列,仅在创建它们的会话中才能在 `system.columns` 中看到。此时,它们的 `database` 字段为空。 +来自[临时表](../../sql-reference/statements/create/table.md#temporary-tables)的列仅在创建它们的会话中在 `system.columns` 中可见。此时这些列的 `database` 字段为空。 `system.columns` 表包含以下列(括号中为列类型): {/*AUTOGENERATED_START*/ } -* `database` ([String](../../sql-reference/data-types/)) — 数据库名称。 -* `table` ([String](../../sql-reference/data-types/)) — 表名。 -* `name` ([String](../../sql-reference/data-types/)) — 列名。 -* `type` ([String](../../sql-reference/data-types/)) — 列类型。 -* `position` ([UInt64](../../sql-reference/data-types/)) — 列在表中的序号位置,从 1 开始。 -* `default_kind` ([String](../../sql-reference/data-types/)) — 默认值的表达式类型(DEFAULT、MATERIALIZED、ALIAS),如果未定义则为空字符串。 -* `default_expression` ([String](../../sql-reference/data-types/)) — 默认值的表达式,如果未定义则为空字符串。 -* `data_compressed_bytes` ([UInt64](../../sql-reference/data-types/)) — 压缩数据的大小(字节)。 -* `data_uncompressed_bytes` ([UInt64](../../sql-reference/data-types/)) — 解压后数据的大小(字节)。 -* `marks_bytes` ([UInt64](../../sql-reference/data-types/)) — 标记的大小(字节)。 -* `comment` ([String](../../sql-reference/data-types/)) — 列的注释,如果未定义则为空字符串。 -* `is_in_partition_key` ([UInt8](../../sql-reference/data-types/)) — 指示该列是否在分区表达式中的标记位。 -* `is_in_sorting_key` ([UInt8](../../sql-reference/data-types/)) — 指示该列是否在排序键表达式中的标记位。 -* `is_in_primary_key` ([UInt8](../../sql-reference/data-types/)) — 指示该列是否在主键表达式中的标记位。 -* `is_in_sampling_key` ([UInt8](../../sql-reference/data-types/)) — 指示该列是否在采样键表达式中的标记位。 -* `compression_codec` ([String](../../sql-reference/data-types/)) — 压缩编解码器名称。 -* `character_octet_length` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 二进制数据、字符数据、文本数据和图像的最大字节长度。在 ClickHouse 中仅对 FixedString 数据类型有意义,否则返回 NULL 值。 -* `numeric_precision` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 近似数值数据、精确数值数据、整数数据或货币数据的精度。在 ClickHouse 中,对整数类型表示位宽,对 Decimal 类型表示小数精度;否则返回 NULL 值。 -* `numeric_precision_radix` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 上述近似数值、精确数值、整数或货币数据的精度所基于的数制基数。在 ClickHouse 中,整数类型为 2,Decimal 类型为 10;否则返回 NULL 值。 -* `numeric_scale` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 近似数值数据、精确数值数据、整数数据或货币数据的小数位数。在 ClickHouse 中仅对 Decimal 类型有意义,否则返回 NULL 值。 -* `datetime_precision` ([Nullable(UInt64)](../../sql-reference/data-types/)) — DateTime64 数据类型的小数精度。对于其他数据类型,返回 NULL 值。 -* `serialization_hint` ([Nullable(String)](../../sql-reference/data-types/)) — 用于在插入时根据统计信息为该列选择序列化方式的提示。 -* `statistics` ([String](../../sql-reference/data-types/)) — 在该列上创建的统计信息类型。 - -{/*AUTOGENERGED_END*/ } +{/*AUTOGENERATED_END*/ } **示例** @@ -48,7 +24,6 @@ doc_type: 'reference' SELECT * FROM system.columns LIMIT 2 FORMAT Vertical; ``` - ```text Row 1: ────── diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/contributors.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/contributors.md index eb5f31ca5a1..6a0e7dcfeec 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/contributors.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/contributors.md @@ -1,20 +1,18 @@ --- description: '包含贡献者信息的系统表。' -keywords: ['系统表', '贡献者'] +keywords: ['system table', 'contributors'] slug: /operations/system-tables/contributors title: 'system.contributors' doc_type: 'reference' --- -包含贡献者信息。在执行查询时,行的顺序是随机的。 +包含贡献者的信息。在每次查询执行时,行的顺序是随机的。 列: {/*AUTOGENERATED_START*/ } -* `name` ([String](../../sql-reference/data-types/)) — 来自 git 日志的贡献者(作者)姓名。 - -{/*AUTOGENERATED_END*/ } +{/*AUTOGENERGED_END*/ } **示例** @@ -37,7 +35,7 @@ SELECT * FROM system.contributors LIMIT 10 └──────────────────┘ ``` -要在表中查找您自己的记录,请使用以下查询: +要在表中查找你自己的记录,请使用如下查询: ```sql SELECT * FROM system.contributors WHERE name = 'Olga Khvostikova' diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/dashboards.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/dashboards.md index d58c83d25a0..ae091f6a3e8 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/dashboards.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/dashboards.md @@ -1,17 +1,17 @@ --- -description: '包含通过 HTTP 接口访问的 `/dashboard` 页面所使用的查询。可用于监控和故障排查。' +description: '包含可通过 HTTP 接口访问的 `/dashboard` 页面所使用的查询,对监控和故障排查很有用。' keywords: ['system table', 'dashboards', 'monitoring', 'troubleshooting'] slug: /operations/system-tables/dashboards title: 'system.dashboards' doc_type: 'reference' --- -包含通过 [HTTP 接口](/interfaces/http.md) 访问的 `/dashboard` 页面所使用的查询。 -此表可用于监控和故障排查。表中每个仪表盘图表对应一行记录。 +包含 `/dashboard` 页面(可通过 [`HTTP 接口`](/interfaces/http.md) 访问)所使用的查询。 +该表对于监控和故障排查非常有用。表中每一行对应仪表盘中的一个图表。 :::note -`/dashboard` 页面不仅可以渲染来自 `system.dashboards` 的查询,还可以渲染来自任意具有相同表结构的表中的查询。 -这对于创建自定义仪表盘很有用。 +`/dashboard` 页面不仅可以渲染来自 `system.dashboards` 的查询,还可以渲染来自任意具有相同表结构的表的查询。 +这对于创建自定义仪表盘很有帮助。 ::: 示例: @@ -26,7 +26,7 @@ WHERE title ILIKE '%CPU%' Row 1: ────── dashboard: overview -title: CPU 使用量(核心) +title: CPU 使用量(核心) query: SELECT toStartOfInterval(event_time, INTERVAL {rounding:UInt32} SECOND)::INT AS t, avg(ProfileEvent_OSCPUVirtualTimeMicroseconds) / 1000000 FROM system.metric_log WHERE event_date >= toDate(now() - {seconds:UInt32}) AND event_time >= now() - {seconds:UInt32} @@ -46,7 +46,7 @@ ORDER BY t WITH FILL STEP {rounding:UInt32} Row 3: ────── dashboard: overview -title: 操作系统 CPU 使用量(用户态) +title: 操作系统 CPU 使用量(用户空间) query: SELECT toStartOfInterval(event_time, INTERVAL {rounding:UInt32} SECOND)::INT AS t, avg(value) FROM system.asynchronous_metric_log WHERE event_date >= toDate(now() - {seconds:UInt32}) AND event_time >= now() - {seconds:UInt32} AND metric = 'OSUserTimeNormalized' @@ -56,7 +56,7 @@ ORDER BY t WITH FILL STEP {rounding:UInt32} Row 4: ────── dashboard: overview -title: 操作系统 CPU 使用量(内核态) +title: 操作系统 CPU 使用量(内核) query: SELECT toStartOfInterval(event_time, INTERVAL {rounding:UInt32} SECOND)::INT AS t, avg(value) FROM system.asynchronous_metric_log WHERE event_date >= toDate(now() - {seconds:UInt32}) AND event_time >= now() - {seconds:UInt32} AND metric = 'OSSystemTimeNormalized' @@ -68,8 +68,4 @@ ORDER BY t WITH FILL STEP {rounding:UInt32} {/*AUTOGENERATED_START*/ } -* `dashboard` ([String](../../sql-reference/data-types/)) — 仪表板名称。 -* `title` ([String](../../sql-reference/data-types/)) — 图表标题。 -* `query` ([String](../../sql-reference/data-types/)) — 用于获取要显示的数据的查询。 - {/*AUTOGENERATED_END*/ } diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/data_skipping_indices.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/data_skipping_indices.md index 3dc2c689866..3e2572126ba 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/data_skipping_indices.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/data_skipping_indices.md @@ -1,28 +1,17 @@ --- -description: '包含所有表中已存在的数据跳过索引的信息。' +description: '包含所有表中现有的数据跳过索引的信息。' keywords: ['system table', 'data_skipping_indices'] slug: /operations/system-tables/data_skipping_indices title: 'system.data_skipping_indices' doc_type: 'reference' --- -包含所有表中已存在的数据跳过索引的信息。 +包含所有表中现有的数据跳过索引的信息。 列: {/*AUTOGENERATED_START*/ } -* `database` ([String](../../sql-reference/data-types/)) — 数据库名称。 -* `table` ([String](../../sql-reference/data-types/)) — 表名。 -* `name` ([String](../../sql-reference/data-types/)) — 索引名称。 -* `type` ([String](../../sql-reference/data-types/)) — 索引类型。 -* `type_full` ([String](../../sql-reference/data-types/)) — CREATE 语句中的索引类型表达式。 -* `expr` ([String](../../sql-reference/data-types/)) — 用于索引计算的表达式。 -* `granularity` ([UInt64](../../sql-reference/data-types/)) — 数据块中的粒度数量。 -* `data_compressed_bytes` ([UInt64](../../sql-reference/data-types/)) — 压缩数据的大小(字节)。 -* `data_uncompressed_bytes` ([UInt64](../../sql-reference/data-types/)) — 解压后数据的大小(字节)。 -* `marks_bytes` ([UInt64](../../sql-reference/data-types/)) — 标记的大小(字节)。 - {/*AUTOGENERATED_END*/ } **示例** diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/data_type_families.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/data_type_families.md index 0bde4a76066..ed61dd7d258 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/data_type_families.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/data_type_families.md @@ -1,21 +1,17 @@ --- -description: '包含支持的数据类型信息的系统表' -keywords: ['系统表', 'data_type_families'] +description: '包含已支持数据类型信息的系统表' +keywords: ['system table', 'data_type_families'] slug: /operations/system-tables/data_type_families title: 'system.data_type_families' doc_type: 'reference' --- -包含支持的[数据类型](../../sql-reference/data-types/index.md)的信息。 +包含受支持[数据类型](../../sql-reference/data-types/index.md)的信息。 列: {/*AUTOGENERATED_START*/ } -* `name` ([String](../../sql-reference/data-types/)) — 数据类型名称。 -* `case_insensitive` ([UInt8](../../sql-reference/data-types/)) — 指示在查询中是否可以不区分大小写地使用数据类型名称的属性。例如,`Date` 和 `date` 都是有效的。 -* `alias_to` ([String](../../sql-reference/data-types/)) — `name` 所别名指向的数据类型名称。 - {/*AUTOGENERATED_END*/ } **示例** @@ -41,4 +37,4 @@ SELECT * FROM system.data_type_families WHERE alias_to = 'String' **另请参阅** -* [Syntax](../../sql-reference/syntax.md) — 关于受支持语法的信息。 +* [Syntax](../../sql-reference/syntax.md) — 关于支持的语法的信息。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/database_engines.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/database_engines.md index c38bdcb25ce..6977a1facc0 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/database_engines.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/database_engines.md @@ -1,19 +1,17 @@ --- -description: '包含服务器支持的数据库引擎列表的系统表。' +description: '包含服务器所支持的数据库引擎列表的系统表。' keywords: ['system table', 'database_engines'] slug: /operations/system-tables/database_engines title: 'system.database_engines' doc_type: 'reference' --- -包含服务器支持的数据库引擎列表。 +包含服务器所支持的数据库引擎列表。 -该表包含以下列(列类型见括号): +该表包含以下列(列类型在括号中注明): {/*AUTOGENERATED_START*/ } -* `name` ([String](../../sql-reference/data-types/)) — 数据库引擎名称。 - {/*AUTOGENERATED_END*/ } 示例: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/database_replicas.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/database_replicas.md index 40d9b30a343..173f3779d65 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/database_replicas.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/database_replicas.md @@ -1,28 +1,16 @@ --- -description: '包含关于复制数据库及其状态信息的系统表。' -keywords: ['system table', 'database_replicas'] +description: '包含 Replicated 数据库副本信息及状态的系统表。' +keywords: ['系统表', 'database_replicas'] slug: /operations/system-tables/database_replicas title: 'system.database_replicas' doc_type: 'reference' --- -包含每个 `Replicated` 数据库副本的信息。 +包含各个 Replicated 数据库副本的信息。 列: -{/*AUTOGENERATED_START*/ } - -* `database` ([String](../../sql-reference/data-types/)) — Replicated 数据库的名称。 -* `is_readonly` ([UInt8](../../sql-reference/data-types/)) — 数据库副本是否处于只读模式。 -* `max_log_ptr` ([Int32](../../sql-reference/data-types/)) — 通用活动日志中的最大条目编号。 -* `replica_name` ([String](../../sql-reference/data-types/)) — ClickHouse Keeper 中的副本名称。 -* `replica_path` ([String](../../sql-reference/data-types/)) — ClickHouse Keeper 中副本数据的路径。 -* `zookeeper_path` ([String](../../sql-reference/data-types/)) — ClickHouse Keeper 中数据库数据的路径。 -* `shard_name` ([String](../../sql-reference/data-types/)) — 集群中分片的名称。 -* `log_ptr` ([Int32](../../sql-reference/data-types/)) — 副本已复制到其执行队列中的通用活动日志的最大条目编号加一。 -* `total_replicas` ([UInt32](../../sql-reference/data-types/)) — 此数据库已知的副本总数。 -* `zookeeper_exception` ([String](../../sql-reference/data-types/)) — 在从 ClickHouse Keeper 获取信息时发生错误时得到的最后一条异常消息。 -* `is_session_expired` ([UInt8](../../sql-reference/data-types/)) — 与 ClickHouse Keeper 的会话是否已过期。基本上与 `is_readonly` 含义相同。 +{/*AUTOGENERGED_START*/ } {/*AUTOGENERATED_END*/ } @@ -33,7 +21,7 @@ SELECT * FROM system.database_replicas FORMAT Vertical; ``` ```text -第 1 行: +Row 1: ────── database: db_2 is_readonly: 0 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/databases.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/databases.md index fef32950ce1..c62cc7d1461 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/databases.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/databases.md @@ -1,29 +1,20 @@ --- -description: '包含当前用户可用数据库信息的系统表。' +description: '系统表,包含当前用户可用数据库的信息。' keywords: ['system table', 'databases'] slug: /operations/system-tables/databases title: 'system.databases' doc_type: 'reference' --- -该表包含当前用户可用的数据库信息。 +系统表,包含当前用户可用数据库的信息。 列: {/*AUTOGENERATED_START*/ } -* `name` ([String](../../sql-reference/data-types/)) — 数据库名称。 -* `engine` ([String](../../sql-reference/data-types/)) — 数据库引擎。 -* `data_path` ([String](../../sql-reference/data-types/)) — 数据路径。 -* `metadata_path` ([String](../../sql-reference/data-types/)) — 元数据路径。 -* `uuid` ([UUID](../../sql-reference/data-types/)) — 数据库 UUID。 -* `engine_full` ([String](../../sql-reference/data-types/)) — 数据库引擎参数。 -* `comment` ([String](../../sql-reference/data-types/)) — 数据库备注。 -* `is_external` ([UInt8](../../sql-reference/data-types/)) — 是否为外部数据库(例如 PostgreSQL/DataLakeCatalog)。 - {/*AUTOGENERATED_END*/ } -此系统表中的 `name` 列用于实现 `SHOW DATABASES` 查询。 +此系统表的 `name` 列用于实现 `SHOW DATABASES` 查询。 **示例** @@ -33,7 +24,7 @@ doc_type: 'reference' CREATE DATABASE test; ``` -列出该用户可访问的所有数据库。 +查看当前用户可访问的所有数据库。 ```sql SELECT * FROM system.databases; diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/detached_tables.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/detached_tables.md index 05934d62469..25afdd3e6bf 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/detached_tables.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/detached_tables.md @@ -12,12 +12,6 @@ doc_type: 'reference' {/*AUTOGENERATED_START*/ } -* `database` ([String](../../sql-reference/data-types/)) — 表所在数据库的名称。 -* `table` ([String](../../sql-reference/data-types/)) — 表名。 -* `uuid` ([UUID](../../sql-reference/data-types/)) — 表的 UUID(Atomic 类型数据库)。 -* `metadata_path` ([String](../../sql-reference/data-types/)) — 文件系统中表元数据的路径。 -* `is_permanently` ([UInt8](../../sql-reference/data-types/)) — 表已被永久分离。 - {/*AUTOGENERATED_END*/ } **示例** @@ -27,7 +21,7 @@ SELECT * FROM system.detached_tables FORMAT Vertical; ``` ```text -第 1 行: +第 1 行: ────── database: base table: t1 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/dictionaries.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/dictionaries.md index 71b54f46d00..f15cd370597 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/dictionaries.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/dictionaries.md @@ -1,6 +1,6 @@ --- description: '包含字典相关信息的系统表' -keywords: ['系统表', '字典'] +keywords: ['system table', 'dictionaries'] slug: /operations/system-tables/dictionaries title: 'system.dictionaries' doc_type: 'reference' @@ -10,56 +10,18 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -包含有关 [dictionaries](../../sql-reference/dictionaries/index.md) 的信息。 +包含有关 [字典](../../sql-reference/dictionaries/index.md) 的信息。 列: +{/*自动生成_开始*/ } -{/*AUTOGENERATED_START*/ } - -* `database` ([String](../../sql-reference/data-types/)) — 包含由 DDL 查询创建的字典的数据库名称。对于其他字典为空字符串。 -* `name` ([String](../../sql-reference/data-types/)) — 字典名称。 -* `uuid` ([UUID](../../sql-reference/data-types/)) — 字典的 UUID。 -* `status` ([Enum8('NOT_LOADED' = 0, 'LOADED' = 1, 'FAILED' = 2, 'LOADING' = 3, 'FAILED_AND_RELOADING' = 4, 'LOADED_AND_RELOADING' = 5, 'NOT_EXIST' = 6)](../../sql-reference/data-types/)) — 字典状态。可能的取值: - * **NOT_LOADED** — 字典未被加载,因为尚未使用 - * **LOADED** — 字典已成功加载 - * **FAILED** — 由于错误无法加载字典 - * **LOADING** — 字典当前正在加载 - * **LOADED_AND_RELOADING** — 字典已成功加载,且当前正在重新加载(常见原因包括:执行 `SYSTEM RELOAD DICTIONARY` 查询、超时、字典配置发生变更) - * **and is being reloaded right now (frequent reasons: SYSTEM RELOAD DICTIONARY query** — 以及当前正在重新加载(常见原因:执行 `SYSTEM RELOAD DICTIONARY` 查询 - * **timeout** — 超时 - * **dictionary config has changed)** — 字典配置已更改) - * **FAILED_AND_RELOADING** — 由于错误无法加载字典,当前正在加载。 -* `origin` ([String](../../sql-reference/data-types/)) — 描述该字典的配置文件路径。 -* `type` ([String](../../sql-reference/data-types/)) — 字典的内存分配类型。关于在内存中存储字典。 -* `key.names` ([Array(String)](../../sql-reference/data-types/)) — 字典提供的键名称数组。 -* `key.types` ([Array(String)](../../sql-reference/data-types/)) — 字典提供的对应键类型数组。 -* `attribute.names` ([Array(String)](../../sql-reference/data-types/)) — 字典提供的属性名称数组。 -* `attribute.types` ([Array(String)](../../sql-reference/data-types/)) — 字典提供的对应属性类型数组。 -* `bytes_allocated` ([UInt64](../../sql-reference/data-types/)) — 为字典分配的 RAM 大小。 -* `hierarchical_index_bytes_allocated` ([UInt64](../../sql-reference/data-types/)) — 为层次索引分配的 RAM 大小。 -* `query_count` ([UInt64](../../sql-reference/data-types/)) — 自字典加载或上次成功重新加载以来的查询次数。 -* `hit_rate` ([Float64](../../sql-reference/data-types/)) — 对于缓存字典,命中缓存的使用占比。 -* `found_rate` ([Float64](../../sql-reference/data-types/)) — 找到值的使用占比。 -* `element_count` ([UInt64](../../sql-reference/data-types/)) — 字典中存储的元素数量。 -* `load_factor` ([Float64](../../sql-reference/data-types/)) — 字典的填充百分比(对于哈希字典,为哈希表的填充百分比)。 -* `source` ([String](../../sql-reference/data-types/)) — 描述字典数据源的文本。 -* `lifetime_min` ([UInt64](../../sql-reference/data-types/)) — 字典在内存中的最小生存时间,超过该时间后 ClickHouse 会尝试重新加载字典(如果设置了 `invalidate_query`,则仅在其已更改的情况下)。单位为秒。 -* `lifetime_max` ([UInt64](../../sql-reference/data-types/)) — 字典在内存中的最大生存时间,超过该时间后 ClickHouse 会尝试重新加载字典(如果设置了 `invalidate_query`,则仅在其已更改的情况下)。单位为秒。 -* `loading_start_time` ([DateTime](../../sql-reference/data-types/)) — 加载字典的开始时间。 -* `last_successful_update_time` ([DateTime](../../sql-reference/data-types/)) — 加载或更新字典的结束时间。用于监控字典源的一些问题并排查原因。 -* `error_count` ([UInt64](../../sql-reference/data-types/)) — 自上次成功加载以来的错误次数。用于监控字典源的一些问题并排查原因。 -* `loading_duration` ([Float32](../../sql-reference/data-types/)) — 字典加载的持续时间。 -* `last_exception` ([String](../../sql-reference/data-types/)) — 在创建或重新加载字典时发生的错误信息文本,如果无法创建字典则会记录该错误。 -* `comment` ([String](../../sql-reference/data-types/)) — 字典的注释文本。 - -{/*自动生成_结束*/ } +{/*AUTOGENERATED_END*/ } **示例** 配置字典: - ```sql CREATE DICTIONARY dictionary_with_comment ( @@ -73,7 +35,7 @@ LIFETIME(MIN 0 MAX 1000) COMMENT '临时字典'; ``` -请确保字典已加载。 +确保字典已加载。 ```sql SELECT * FROM system.dictionaries LIMIT 1 FORMAT Vertical; diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/disks.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/disks.md index 3dbd519def5..d158bf6cd41 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/disks.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/disks.md @@ -1,6 +1,6 @@ --- -description: '在服务器配置中定义的磁盘信息所对应的系统表' -keywords: ['system table', '磁盘'] +description: '包含服务器配置中定义磁盘信息的系统表' +keywords: ['system table', 'disks'] slug: /operations/system-tables/disks title: 'system.disks' doc_type: 'reference' @@ -10,27 +10,11 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -包含有关在[服务器配置](../../engines/table-engines/mergetree-family/mergetree.md#table_engine-mergetree-multiple-volumes_configure)中定义的磁盘的信息。 +包含在[服务器配置](../../engines/table-engines/mergetree-family/mergetree.md#table_engine-mergetree-multiple-volumes_configure)中定义的磁盘的相关信息。 列: -{/*AUTOGENERATED_START*/ } - -* `name` ([String](../../sql-reference/data-types/)) — 服务器配置中磁盘的名称。 -* `path` ([String](../../sql-reference/data-types/)) — 文件系统中挂载点的路径。 -* `free_space` ([UInt64](../../sql-reference/data-types/)) — 磁盘上的空闲空间(字节数)。 -* `total_space` ([UInt64](../../sql-reference/data-types/)) — 磁盘容量(字节数)。 -* `unreserved_space` ([UInt64](../../sql-reference/data-types/)) — 未被预留占用的空闲空间(`free_space` 减去当前运行的合并、插入以及其他磁盘写入操作所占用的预留空间大小)。 -* `keep_free_space` ([UInt64](../../sql-reference/data-types/)) — 需要在磁盘上保持空闲的空间量(字节数)。在磁盘配置的 `keep_free_space_bytes` 参数中定义。 -* `type` ([String](../../sql-reference/data-types/)) — 磁盘类型,用于指示该磁盘将数据存储在何处——RAM、本地磁盘或远程存储。 -* `object_storage_type` ([String](../../sql-reference/data-types/)) — 若磁盘类型为 `object_storage`,则表示对象存储的类型。 -* `metadata_type` ([String](../../sql-reference/data-types/)) — 若磁盘类型为 `object_storage`,则表示元数据存储的类型。 -* `is_encrypted` ([UInt8](../../sql-reference/data-types/)) — 标志位,用于指示该磁盘是否对底层数据进行加密。 -* `is_read_only` ([UInt8](../../sql-reference/data-types/)) — 标志位,用于指示该磁盘是否只能执行读取操作。 -* `is_write_once` ([UInt8](../../sql-reference/data-types/)) — 标志位,用于指示该磁盘是否为一次写入(write-once)。这意味着它支持对该磁盘执行 `BACKUP`,但不支持向该磁盘上的 `MergeTree` 表执行 `INSERT`。 -* `is_remote` ([UInt8](../../sql-reference/data-types/)) — 标志位,用于指示对该磁盘的操作是否涉及网络交互。 -* `is_broken` ([UInt8](../../sql-reference/data-types/)) — 标志位,用于指示该磁盘是否已损坏。损坏的磁盘其空间为 0,且无法使用。 -* `cache_path` ([String](../../sql-reference/data-types/)) — 当磁盘支持缓存时,本地磁盘上的缓存目录路径。 +{/*AUTOGENERGED_START*/ } {/*AUTOGENERATED_END*/ } diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/distributed_ddl_queue.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/distributed_ddl_queue.md index 8a0e8dbc967..33199209419 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/distributed_ddl_queue.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/distributed_ddl_queue.md @@ -1,33 +1,17 @@ --- -description: '系统表,包含在集群上执行的分布式 DDL 查询(使用 ON CLUSTER 子句)的信息。' +description: '包含在集群上执行的分布式 DDL 查询(带有 ON CLUSTER 子句的查询)信息的系统表。' keywords: ['system table', 'distributed_ddl_queue'] slug: /operations/system-tables/distributed_ddl_queue title: 'system.distributed_ddl_queue' doc_type: 'reference' --- -包含在集群上执行的[分布式 DDL 查询(ON CLUSTER 子句)](../../sql-reference/distributed-ddl.md)的信息。 +包含在集群上执行的[分布式 DDL 查询(带有 ON CLUSTER 子句)](../../sql-reference/distributed-ddl.md)的信息。 列: {/*AUTOGENERATED_START*/ } -* `entry` ([String](../../sql-reference/data-types/)) — 查询 ID。 -* `entry_version` ([Nullable(UInt8)](../../sql-reference/data-types/)) — 条目版本。 -* `initiator_host` ([Nullable(String)](../../sql-reference/data-types/)) — 发起该 DDL 操作的主机。 -* `initiator_port` ([Nullable(UInt16)](../../sql-reference/data-types/)) — 发起方使用的端口。 -* `cluster` ([String](../../sql-reference/data-types/)) — 集群名称,若未确定则为空。 -* `query` ([String](../../sql-reference/data-types/)) — 执行的查询。 -* `settings` ([Map(String, String)](../../sql-reference/data-types/)) — 在 DDL 操作中使用的设置。 -* `query_create_time` ([DateTime](../../sql-reference/data-types/)) — 查询创建时间。 -* `host` ([Nullable(String)](../../sql-reference/data-types/)) — 主机名。 -* `port` ([Nullable(UInt16)](../../sql-reference/data-types/)) — 主机端口。 -* `status` ([Nullable(Enum8('Inactive' = 0, 'Active' = 1, 'Finished' = 2, 'Removing' = 3, 'Unknown' = 4))](../../sql-reference/data-types/)) — 查询状态。 -* `exception_code` ([Nullable(UInt16)](../../sql-reference/data-types/)) — 异常代码。 -* `exception_text` ([Nullable(String)](../../sql-reference/data-types/)) — 异常信息。 -* `query_finish_time` ([Nullable(DateTime)](../../sql-reference/data-types/)) — 查询结束时间。 -* `query_duration_ms` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 查询执行时长(毫秒)。 - {/*AUTOGENERATED_END*/ } **示例** @@ -39,9 +23,9 @@ WHERE cluster = 'test_cluster' LIMIT 2 FORMAT Vertical -Query id: f544e72a-6641-43f1-836b-24baa1c9632a +查询 id: f544e72a-6641-43f1-836b-24baa1c9632a -Row 1: +第 1 行: ────── entry: query-0000000000 entry_version: 5 @@ -53,13 +37,13 @@ settings: {'max_threads':'16','use_uncompressed_cache':'0'} query_create_time: 2023-09-01 16:15:14 host: clickhouse-01 port: 9000 -status: Finished +status: 已完成 exception_code: 0 exception_text: query_finish_time: 2023-09-01 16:15:14 query_duration_ms: 154 -Row 2: +第 2 行: ────── entry: query-0000000001 entry_version: 5 @@ -71,11 +55,11 @@ settings: {'max_threads':'16','use_uncompressed_cache':'0'} query_create_time: 2023-09-01 16:15:14 host: clickhouse-01 port: 9000 -status: Finished +status: 已完成 exception_code: 630 -exception_text: Code: 630. DB::Exception: 无法删除或重命名 test_db,因为有些表依赖于它: +exception_text: Code: 630. DB::Exception: 无法删除或重命名 test_db,因为某些表依赖于它: query_finish_time: 2023-09-01 16:15:14 query_duration_ms: 154 -返回 2 行。耗时: 0.025 秒。 +结果集包含 2 行。耗时:0.025 秒。 ``` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/distribution_queue.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/distribution_queue.md index c5a8d0f118a..e14124a1f24 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/distribution_queue.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/distribution_queue.md @@ -1,29 +1,17 @@ --- -description: '包含队列中待发送到分片的本地文件的信息。' +description: '包含队列中待发送到各分片的本地文件的信息。' keywords: ['system table', 'distribution_queue'] slug: /operations/system-tables/distribution_queue title: 'system.distribution_queue' doc_type: 'reference' --- -包含队列中待发送到分片的本地文件的信息。这些本地文件包含在异步模式下向 Distributed 表插入新数据时创建的新数据片段(parts)。 +包含队列中待发送到各分片的本地文件的信息。这些本地文件包含通过以异步模式向 Distributed 表插入新数据而创建的新数据分片(parts)。 列: {/*AUTOGENERATED_START*/ } -* `database` ([String](../../sql-reference/data-types/)) — 数据库名称。 -* `table` ([String](../../sql-reference/data-types/)) — 表名。 -* `data_path` ([String](../../sql-reference/data-types/)) — 本地文件所在文件夹的路径。 -* `is_blocked` ([UInt8](../../sql-reference/data-types/)) — 标志,表示是否已阻止将本地文件发送到服务器。 -* `error_count` ([UInt64](../../sql-reference/data-types/)) — 错误次数。 -* `data_files` ([UInt64](../../sql-reference/data-types/)) — 文件夹中的本地文件数量。 -* `data_compressed_bytes` ([UInt64](../../sql-reference/data-types/)) — 本地文件中压缩数据的大小(字节)。 -* `broken_data_files` ([UInt64](../../sql-reference/data-types/)) — 因错误被标记为损坏的文件数量。 -* `broken_data_compressed_bytes` ([UInt64](../../sql-reference/data-types/)) — 损坏文件中压缩数据的大小(字节)。 -* `last_exception` ([String](../../sql-reference/data-types/)) — 关于上一次错误的文本信息(如果有)。 -* `last_exception_time` ([DateTime](../../sql-reference/data-types/)) — 上一次异常发生的时间。 - {/*AUTOGENERATED_END*/ } **示例** diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/dns_cache.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/dns_cache.md index 1f534517f88..d25cca9ea91 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/dns_cache.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/dns_cache.md @@ -1,6 +1,6 @@ --- description: '包含已缓存 DNS 记录信息的系统表。' -keywords: ['system table', 'dns_cache'] +keywords: ['系统表', 'dns_cache'] slug: /operations/system-tables/dns_cache title: 'system.dns_cache' doc_type: 'reference' @@ -10,17 +10,12 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -包含已缓存的 DNS 记录信息。 +包含缓存的 DNS 记录的信息。 列: {/*AUTOGENERATED_START*/ } -* `hostname` ([String](../../sql-reference/data-types/)) — 主机名。 -* `ip_address` ([String](../../sql-reference/data-types/)) — IP 地址。 -* `ip_family` ([Enum8('IPv4' = 0, 'IPv6' = 1, 'UNIX_LOCAL' = 2)](../../sql-reference/data-types/)) — IP 地址族。 -* `cached_at` ([DateTime](../../sql-reference/data-types/)) — 记录被缓存时的时间戳。 - {/*AUTOGENERATED_END*/ } **示例** @@ -40,7 +35,7 @@ SELECT * FROM system.dns_cache; **另请参阅** -* [disable_internal_dns_cache 设置项](../../operations/server-configuration-parameters/settings.md#disable_internal_dns_cache) -* [dns_cache_max_entries 设置项](../../operations/server-configuration-parameters/settings.md#dns_cache_max_entries) -* [dns_cache_update_period 设置项](../../operations/server-configuration-parameters/settings.md#dns_cache_update_period) -* [dns_max_consecutive_failures 设置项](../../operations/server-configuration-parameters/settings.md#dns_max_consecutive_failures) +* [disable_internal_dns_cache 设置](../../operations/server-configuration-parameters/settings.md#disable_internal_dns_cache) +* [dns_cache_max_entries 设置](../../operations/server-configuration-parameters/settings.md#dns_cache_max_entries) +* [dns_cache_update_period 设置](../../operations/server-configuration-parameters/settings.md#dns_cache_update_period) +* [dns_max_consecutive_failures 设置](../../operations/server-configuration-parameters/settings.md#dns_max_consecutive_failures) diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/dropped_tables.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/dropped_tables.md index 2503b3749f8..d9d135f6e29 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/dropped_tables.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/dropped_tables.md @@ -1,30 +1,22 @@ --- -description: '包含已执行 drop table 操作但尚未完成数据清理的表的相关信息' +description: '包含已执行 DROP TABLE 语句但尚未完成数据清理的表的信息' keywords: ['system table', 'dropped_tables'] slug: /operations/system-tables/dropped_tables title: 'system.dropped_tables' doc_type: 'reference' --- -包含已执行 drop table 操作但尚未完成数据清理的表的相关信息。 +包含已执行 DROP TABLE 语句但尚未完成数据清理的表的信息。 列: {/*AUTOGENERATED_START*/ } -* `index` ([UInt32](../../sql-reference/data-types/)) — 在 `marked_dropped_tables` 队列中的索引。 -* `database` ([String](../../sql-reference/data-types/)) — 数据库名称。 -* `table` ([String](../../sql-reference/data-types/)) — 表名。 -* `uuid` ([UUID](../../sql-reference/data-types/)) — 表的 UUID。 -* `engine` ([String](../../sql-reference/data-types/)) — 表引擎名称。 -* `metadata_dropped_path` ([String](../../sql-reference/data-types/)) — 表的元数据文件在 `metadata_dropped` 目录中的路径。 -* `table_dropped_time` ([DateTime](../../sql-reference/data-types/)) — 下次尝试删除表数据的预定时间。通常为表被删除时间加上 `database_atomic_delay_before_drop_table_sec`。 - {/*AUTOGENERATED_END*/ } **示例** -下面的示例展示了如何获取 `dropped_tables` 的相关信息。 +以下示例演示如何获取关于 `dropped_tables` 的信息。 ```sql SELECT * @@ -32,7 +24,7 @@ FROM system.dropped_tables\G ``` ```text -第 1 行: +Row 1: ────── index: 0 database: default diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/error_log.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/error_log.md index dcc9b1873b7..713225a85d8 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/error_log.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/error_log.md @@ -1,6 +1,6 @@ --- description: '系统表,包含表 `system.errors` 中错误值的历史记录,并定期刷新到磁盘。' -keywords: ['system table', 'error_log'] +keywords: ['系统表', 'error_log'] slug: /operations/system-tables/system-error-log title: 'system.error_log' doc_type: 'reference' @@ -10,17 +10,21 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -包含来自表 `system.errors` 的错误统计历史记录,这些数据会定期写入磁盘。 +包含来自表 `system.errors` 的错误值历史记录,这些数据会定期写入磁盘。 列: * `hostname` ([LowCardinality(String)](../../sql-reference/data-types/string.md)) — 执行查询的服务器主机名。 * `event_date` ([Date](../../sql-reference/data-types/date.md)) — 事件日期。 * `event_time` ([DateTime](../../sql-reference/data-types/datetime.md)) — 事件时间。 -* `code` ([Int32](../../sql-reference/data-types/int-uint.md)) — 错误代码编号。 -* `error` ([LowCardinality(String)](../../sql-reference/data-types/string.md)) — 错误名称。 +* `code` ([Int32](../../sql-reference/data-types/int-uint.md)) — 错误代码。 +* `error` ([LowCardinality(String)](../../sql-reference/data-types/string.md)) - 错误名称。 * `value` ([UInt64](../../sql-reference/data-types/int-uint.md)) — 该错误发生的次数。 -* `remote` ([UInt8](../../sql-reference/data-types/int-uint.md)) — 远程异常(即在某个分布式查询期间收到的异常)。 +* `remote` ([UInt8](../../sql-reference/data-types/int-uint.md)) — 远程异常(即在某个分布式查询期间接收到的异常)。 +* `last_error_time` ([DateTime](../../sql-reference/data-types/datetime.md)) — 最近一次错误发生的时间。 +* `last_error_message` ([String](../../sql-reference/data-types/string.md)) — 最近一次错误的消息内容。 +* `last_error_query_id` ([String](../../sql-reference/data-types/string.md)) — 导致最近一次错误的查询 ID(如果可用)。 +* `last_error_trace` ([Array(UInt64)](../../sql-reference/data-types/array.md)) — 堆栈跟踪信息,表示被调用方法存储所在物理地址的列表。 **示例** @@ -29,19 +33,23 @@ SELECT * FROM system.error_log LIMIT 1 FORMAT Vertical; ``` ```text -Row 1: +第 1 行: ────── -hostname: clickhouse.eu-central1.internal -event_date: 2024-06-18 -event_time: 2024-06-18 07:32:39 -code: 999 -error: KEEPER_EXCEPTION -value: 2 -remote: 0 +hostname: clickhouse.testing.internal +event_date: 2025-11-11 +event_time: 2025-11-11 11:35:28 +code: 60 +error: UNKNOWN_TABLE +value: 1 +remote: 0 +last_error_time: 2025-11-11 11:35:28 +last_error_message: 在 SELECT * FROM system.table_not_exist 的作用域中,表表达式标识符 'system.table_not_exist' 未知 +last_error_query_id: 77ad9ece-3db7-4236-9b5a-f789bce4aa2e +last_error_trace: [100506790044914,100506534488542,100506409937998,100506409936517,100506425182891,100506618154123,100506617994473,100506617990486,100506617988112,100506618341386,100506630272160,100506630266232,100506630276900,100506629795243,100506633519500,100506633495783,100506692143858,100506692248921,100506790779783,100506790781278,100506790390399,100506790380047,123814948752036,123814949330028] ``` **另请参阅** -* [error_log 设置](../../operations/server-configuration-parameters/settings.md#error_log) — 控制该设置的启用和禁用。 -* [system.errors](../../operations/system-tables/errors.md) — 包含错误代码及其被触发次数。 -* [监控](../../operations/monitoring.md) — ClickHouse 监控的基础概念。 +* [error_log 设置](../../operations/server-configuration-parameters/settings.md#error_log) — 启用和禁用该设置。 +* [system.errors](../../operations/system-tables/errors.md) — 包含错误代码及其触发次数。 +* [Monitoring](../../operations/monitoring.md) — ClickHouse 监控的基本概念。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/errors.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/errors.md index 13797f275f0..666dbeb401f 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/errors.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/errors.md @@ -1,6 +1,6 @@ --- description: '包含错误代码及其触发次数的系统表。' -keywords: ['系统表', '错误'] +keywords: ['system table', '错误'] slug: /operations/system-tables/errors title: 'system.errors' doc_type: 'reference' @@ -10,28 +10,18 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -包含错误代码及其触发次数。 +包含错误代码及其被触发的次数。 -要显示全部错误代码(包括尚未被触发的),请将设置 [system_events_show_zero_values](../settings/settings.md#system_events_show_zero_values) 设置为 1。 +要显示所有可能的错误代码(包括那些未被触发的),请将设置 [system_events_show_zero_values](../settings/settings.md#system_events_show_zero_values) 设为 1。 列: {/*AUTOGENERATED_START*/ } -* `name` ([String](../../sql-reference/data-types/)) — 错误名称(errorCodeToName)。 -* `code` ([Int32](../../sql-reference/data-types/)) — 错误代码。 -* `value` ([UInt64](../../sql-reference/data-types/)) — 此错误发生的次数。 -* `last_error_time` ([DateTime](../../sql-reference/data-types/)) — 最近一次错误发生的时间。 -* `last_error_message` ([String](../../sql-reference/data-types/)) — 最近一次错误的消息内容。 -* `last_error_format_string` ([String](../../sql-reference/data-types/)) — 最近一次错误的格式字符串。 -* `last_error_trace` ([Array(UInt64)](../../sql-reference/data-types/)) — 以物理地址列表形式表示已调用方法存储位置的堆栈跟踪。 -* `remote` ([UInt8](../../sql-reference/data-types/)) — 远程异常(即在某个分布式查询期间接收到的异常)。 -* `query_id` ([String](../../sql-reference/data-types/)) — 导致该错误的查询 ID(如果有)。 - {/*AUTOGENERATED_END*/ } :::note -在查询成功执行期间,某些错误计数器仍可能增加。除非您能够确定相应错误绝不可能是误报,否则不建议将此表用于服务器监控。 +在成功执行查询时,某些错误计数器可能仍会增加。除非您能确定对应错误绝不可能是误报,否则不建议将此表用于服务器监控。 ::: **示例** diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/events.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/events.md index 75d339f524a..f0e91c34a7a 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/events.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/events.md @@ -1,5 +1,5 @@ --- -description: '记录系统中已发生事件数量信息的系统表。' +description: '包含有关系统中已发生事件数量信息的系统表。' keywords: ['系统表', '事件'] slug: /operations/system-tables/events title: 'system.events' @@ -10,19 +10,15 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -包含系统中已发生事件数量的信息。例如,在该表中,你可以查看自 ClickHouse 服务器启动以来处理了多少条 `SELECT` 查询。 +包含系统中发生的事件数量等信息。例如,在该表中,你可以查看自 ClickHouse 服务器启动以来已处理的 `SELECT` 查询数量。 列: {/*AUTOGENERATED_START*/ } -* `event` ([String](../../sql-reference/data-types/)) — 事件名称。 -* `value` ([UInt64](../../sql-reference/data-types/)) — 事件发生次数。 -* `description` ([String](../../sql-reference/data-types/)) — 事件描述。 - {/*AUTOGENERATED_END*/ } -可以在源文件 [src/Common/ProfileEvents.cpp](https://github.com/ClickHouse/ClickHouse/blob/master/src/Common/ProfileEvents.cpp) 中找到所有支持的事件。 +你可以在源码文件 [src/Common/ProfileEvents.cpp](https://github.com/ClickHouse/ClickHouse/blob/master/src/Common/ProfileEvents.cpp) 中找到所有支持的事件。 **示例** @@ -44,5 +40,5 @@ SELECT * FROM system.events LIMIT 5 * [system.asynchronous_metrics](/operations/system-tables/asynchronous_metrics) — 包含周期性计算的指标。 * [system.metrics](/operations/system-tables/metrics) — 包含即时计算的指标。 -* [system.metric_log](/operations/system-tables/metric_log) — 包含来自 `system.metrics` 和 `system.events` 表的指标值历史记录。 +* [system.metric_log](/operations/system-tables/metric_log) — 包含 `system.metrics` 和 `system.events` 两个表中的指标值历史记录。 * [Monitoring](../../operations/monitoring.md) — ClickHouse 监控的基础概念。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/functions.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/functions.md index e2c3b2cd52d..7b0924bf9f2 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/functions.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/functions.md @@ -1,6 +1,6 @@ --- description: '包含普通函数和聚合函数信息的系统表。' -keywords: ['system table', 'functions'] +keywords: ['系统表', '函数'] slug: /operations/system-tables/functions title: 'system.functions' doc_type: 'reference' @@ -12,21 +12,6 @@ doc_type: 'reference' {/*AUTOGENERATED_START*/ } -* `name` ([String](../../sql-reference/data-types/)) — 函数名称。 -* `is_aggregate` ([UInt8](../../sql-reference/data-types/)) — 该函数是否为聚合函数。 -* `case_insensitive` ([UInt8](../../sql-reference/data-types/)) — 函数名是否可以不区分大小写使用。 -* `alias_to` ([String](../../sql-reference/data-types/)) — 若函数名是别名,则为原始函数名。 -* `create_query` ([String](../../sql-reference/data-types/)) — 已弃用。 -* `origin` ([Enum8('System' = 0, 'SQLUserDefined' = 1, 'ExecutableUserDefined' = 2)](../../sql-reference/data-types/)) — 已弃用。 -* `description` ([String](../../sql-reference/data-types/)) — 对函数作用的概要性描述。 -* `syntax` ([String](../../sql-reference/data-types/)) — 函数签名。 -* `arguments` ([String](../../sql-reference/data-types/)) — 函数参数。 -* `parameters` ([String](../../sql-reference/data-types/)) — 函数参数(仅对聚合函数)。 -* `returned_value` ([String](../../sql-reference/data-types/)) — 函数返回的内容。 -* `examples` ([String](../../sql-reference/data-types/)) — 使用示例。 -* `introduced_in` ([String](../../sql-reference/data-types/)) — 首次引入该函数的 ClickHouse 版本。 -* `categories` ([String](../../sql-reference/data-types/)) — 函数所属分类。 - {/*AUTOGENERATED_END*/ } **示例** @@ -44,5 +29,5 @@ doc_type: 'reference' │ mapPartialSort │ 0 │ 1 │ 0 │ │ └──────────────────────────┴──────────────┴──────────────────┴──────────────────┴──────────┘ -5 行结果集。用时:0.002 秒。 +5 行在集合中。耗时: 0.002 秒。 ``` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/graphite_retentions.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/graphite_retentions.md index 6beaed764a4..79b044ec28c 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/graphite_retentions.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/graphite_retentions.md @@ -1,26 +1,15 @@ --- -description: '包含参数 `graphite_rollup` 的信息,这些参数用于使用 `GraphiteMergeTree` 类型引擎的表。' +description: '包含 `graphite_rollup` 参数的信息,这些参数用于使用 `GraphiteMergeTree` 类型引擎的表。' keywords: ['system table', 'graphite_retentions'] slug: /operations/system-tables/graphite_retentions title: 'system.graphite_retentions' doc_type: 'reference' --- -包含参数 [graphite_rollup](../../operations/server-configuration-parameters/settings.md#graphite) 的信息,这些参数用于使用 [*GraphiteMergeTree](../../engines/table-engines/mergetree-family/graphitemergetree.md) 引擎的表。 +包含 [graphite_rollup](../../operations/server-configuration-parameters/settings.md#graphite) 参数的信息,这些参数用于使用 [*GraphiteMergeTree](../../engines/table-engines/mergetree-family/graphitemergetree.md) 引擎的表。 列: {/*AUTOGENERATED_START*/ } -* `config_name` ([String](../../sql-reference/data-types/)) — graphite_rollup 参数的名称。 -* `rule_type` ([String](../../sql-reference/data-types/)) — 规则类型。可选值:RuleTypeAll = 0 - 默认,带正则表达式,与旧方案兼容;RuleTypePlain = 1 - 普通指标,带正则表达式,与旧方案兼容;RuleTypeTagged = 2 - 带标签的指标,带正则表达式,与旧方案兼容;RuleTypeTagList = 3 - 带标签的指标,带正则表达式(从类似 'retention=10min ; env=(staging|prod)' 的字符串转换为 RuleTypeTagged)。 -* `regexp` ([String](../../sql-reference/data-types/)) — 用于匹配指标名称的模式。 -* `function` ([String](../../sql-reference/data-types/)) — 聚合函数名称。 -* `age` ([UInt64](../../sql-reference/data-types/)) — 数据的最小存在时间(秒)。 -* `precision` ([UInt64](../../sql-reference/data-types/)) — 用于定义数据存在时间精度的秒数。 -* `priority` ([UInt16](../../sql-reference/data-types/)) — 模式优先级。 -* `is_default` ([UInt8](../../sql-reference/data-types/)) — 该模式是否为默认模式。 -* `Tables.database` ([Array(String)](../../sql-reference/data-types/)) — 使用 `config_name` 参数的表所在数据库名称数组。 -* `Tables.table` ([Array(String)](../../sql-reference/data-types/)) — 使用 `config_name` 参数的表名称数组。 - {/*AUTOGENERATED_END*/ } diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/histogram_metrics.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/histogram_metrics.md index b149436da0d..6851956da53 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/histogram_metrics.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/histogram_metrics.md @@ -1,6 +1,6 @@ --- -description: '此表包含可即时计算并以 Prometheus 格式导出的直方图指标,且始终保持最新。' -keywords: ['系统表', 'histogram_metrics'] +description: '此表包含可即时计算并以 Prometheus 格式导出的直方图指标,始终保持最新状态。' +keywords: ['system table', 'histogram_metrics'] slug: /operations/system-tables/histogram_metrics title: 'system.histogram_metrics' doc_type: 'reference' @@ -13,22 +13,17 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -此表包含可即时计算并以 Prometheus 格式导出的直方图指标,其内容始终保持最新,用于替代已弃用的 `system.latency_log`。 +该表包含可即时计算并以 Prometheus 格式导出的直方图指标,其数据始终为最新。用于取代已弃用的 `system.latency_log`。 列: {/*AUTOGENERATED_START*/ } -* `metric` ([String](../../sql-reference/data-types/)) — 指标名称。 -* `value` ([Int64](../../sql-reference/data-types/)) — 指标值。 -* `description` ([String](../../sql-reference/data-types/)) — 指标描述。 -* `labels` ([Map(String, String)](../../sql-reference/data-types/)) — 指标标签。 - -{/* 自动生成结束 */ } +{/*AUTOGENERATED_END*/ } **示例** -你可以使用如下所示的查询,将所有直方图指标以 Prometheus 格式导出。 +可以使用如下所示的查询,将所有直方图指标以 Prometheus 格式导出。 ```sql SELECT @@ -45,10 +40,12 @@ FORMAT Prometheus ## 指标说明 {#metric_descriptions} ### keeper_response_time_ms_bucket {#keeper_response_time_ms_bucket} -Keeper 的响应时间(毫秒)。 + +Keeper 的响应时间(单位:毫秒)。 **另请参阅** + - [system.asynchronous_metrics](/operations/system-tables/asynchronous_metrics) — 包含周期性计算的指标。 -- [system.events](/operations/system-tables/events) — 包含发生的各类事件。 +- [system.events](/operations/system-tables/events) — 包含发生的各类事件的数量。 - [system.metric_log](/operations/system-tables/metric_log) — 包含来自 `system.metrics` 和 `system.events` 表的指标值历史记录。 -- [Monitoring](../../operations/monitoring.md) — ClickHouse 监控的基本概念。 +- [Monitoring](../../operations/monitoring.md) — ClickHouse 监控的基本概念。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/iceberg_history.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/iceberg_history.md index 297eeeb3288..7c6c7bbae54 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/iceberg_history.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/iceberg_history.md @@ -1,26 +1,17 @@ --- -description: 'system.iceberg 快照历史记录' +description: 'system 表 Iceberg 快照历史记录' keywords: ['system iceberg_history'] slug: /operations/system-tables/iceberg_history title: 'system.iceberg_history' doc_type: 'reference' --- - - # system.iceberg_history -此 system 表包含 ClickHouse 中 Iceberg 表的快照历史。如果 ClickHouse 中不存在任何 Iceberg 表,则该表为空。 +此 system 表包含 ClickHouse 中 Iceberg 表的快照历史记录。如果 ClickHouse 中没有任何 Iceberg 表,则该表将为空。 列: {/*AUTOGENERATED_START*/ } -* `database` ([String](../../sql-reference/data-types/)) — 数据库名称。 -* `table` ([String](../../sql-reference/data-types/)) — 表名。 -* `made_current_at` ([Nullable(DateTime64(3))](../../sql-reference/data-types/)) — 此快照被设为当前快照的日期和时间。 -* `snapshot_id` ([UInt64](../../sql-reference/data-types/)) — 用于标识快照的快照 ID。 -* `parent_id` ([UInt64](../../sql-reference/data-types/)) — 此快照的父快照 ID。 -* `is_current_ancestor` ([UInt8](../../sql-reference/data-types/)) — 标志位,指示此快照是否为当前快照的祖先。 - {/*AUTOGENERATED_END*/ } diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/index.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/index.md index 780edb77359..17432f377e3 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/index.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/index.md @@ -1,136 +1,20 @@ --- -description: '系统表的概念及其作用概览。' -keywords: ['system tables', 'overview'] +description: "系统表概述及其用途。" +keywords: ["系统表", "概述"] pagination_next: operations/system-tables/asynchronous_metric_log -sidebar_label: '概览' +sidebar_label: "概述" sidebar_position: 52 slug: /operations/system-tables/ -title: '系统表' -doc_type: 'reference' +title: "系统表" +doc_type: "reference" --- -{/* 本页面的目录由以下脚本自动生成: - https://github.com/ClickHouse/clickhouse-docs/blob/main/scripts/autogenerate-table-of-contents.sh - 根据 YAML front matter 字段:slug、description、title。 + - -{/*AUTOGENERATED_START*/ } - -| 页面 | 说明 | -| ----------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | -| [系统表概览](/operations/system-tables/overview) | 系统表是什么以及它们为何有用的概述。 | -| [INFORMATION_SCHEMA](/operations/system-tables/information_schema) | 提供几乎标准化且与 DBMS 无关的数据库对象元数据视图的系统数据库。 | -| [system.asynchronous_insert_log](/operations/system-tables/asynchronous_insert_log) | 包含异步插入相关信息的系统表。每条记录对应一个已缓冲到异步插入队列中的插入查询。 | -| [system.asynchronous_loader](/operations/system-tables/asynchronous_loader) | 包含最近异步作业(例如正在加载的表)的信息和状态的系统表。表中每一行代表一个作业。 | -| [system.asynchronous_metric_log](/operations/system-tables/asynchronous_metric_log) | 包含 `system.asynchronous_metrics` 历史值的系统表,这些值会按时间间隔保存(默认每秒一次) | -| [system.asynchronous_inserts](/operations/system-tables/asynchronous_inserts) | 包含有关队列中待处理异步插入的信息的系统表。 | -| [system.asynchronous_metrics](/operations/system-tables/asynchronous_metrics) | 包含在后台周期性计算得到的度量指标的系统表。例如,当前正在使用的 RAM 大小。 | -| [system.azure_queue_settings](/operations/system-tables/azure_queue_settings) | 包含 AzureQueue 表设置相关信息的系统表。从服务器版本 `24.10` 起可用。 | -| [system.backup_log](/operations/system-tables/backup_log) | 包含有关 `BACKUP` 和 `RESTORE` 操作的日志条目的系统表。 | -| [system.backups](/operations/system-tables/backups) | 包含 `BACKUP` 和 `RESTORE` 操作相关日志记录的系统表。 | -| [system.blob_storage_log](/operations/system-tables/blob_storage_log) | 包含日志记录的系统表,这些日志记录包含有关各种 blob 存储操作(例如上传和删除)的信息。 | -| [system.build_options](/operations/system-tables/build_options) | 包含 ClickHouse 服务器构建选项相关信息的系统表。 | -| [system.clusters](/operations/system-tables/clusters) | 包含配置文件中可用集群及其中定义的服务器信息的系统表。 | -| [system.codecs](/operations/system-tables/codecs) | 包含队列中编解码器相关信息的系统表。 | -| [system.columns](/operations/system-tables/columns) | 包含所有表的列信息的系统表 | -| [system.contributors](/operations/system-tables/contributors) | 包含贡献者相关信息的系统表。 | -| [system.crash_log](/operations/system-tables/crash_log) | 包含致命错误的堆栈跟踪信息的系统表。 | -| [system.current_roles](/operations/system-tables/current_roles) | 包含当前用户已启用角色的系统表。 | -| [system.dashboards](/operations/system-tables/dashboards) | 包含通过 HTTP 接口访问的 `/dashboard` 页面所使用的查询,对监控和故障排查非常有用。 | -| [system.data_skipping_indices](/operations/system-tables/data_skipping_indices) | 包含所有表中现有数据跳过索引信息的系统表。 | -| [system.data_type_families](/operations/system-tables/data_type_families) | 包含受支持数据类型信息的系统表 | -| [system.database_engines](/operations/system-tables/database_engines) | 包含服务器支持的数据库引擎列表的系统表。 | -| [system.database_replicas](/operations/system-tables/database_replicas) | 包含复制数据库相关信息和状态的系统表。 | -| [system.databases](/operations/system-tables/databases) | 包含当前用户可访问数据库信息的系统表。 | -| [system.dead_letter_queue](/operations/system-tables/dead_letter_queue) | 包含通过流式引擎接收且在解析时发生错误的消息信息的系统表。 | -| [system.delta_lake_metadata_log](/operations/system-tables/delta_lake_metadata_log) | 用于存储从 Delta Lake 表中读取的元数据文件信息的系统表。每条记录表示一个根元数据 JSON 文件。 | -| [system.detached_parts](/operations/system-tables/detached_parts) | 包含 MergeTree 表中已分离数据部分信息的系统表 | -| [system.detached_tables](/operations/system-tables/detached_tables) | 包含每个已分离表相关信息的系统表。 | -| [system.dictionaries](/operations/system-tables/dictionaries) | 包含字典信息的系统表 | -| [system.dimensional_metrics](/operations/system-tables/dimensional_metrics) | 此表包含可实时计算并以 Prometheus 格式导出的维度指标,其内容始终保持最新。 | -| [system.disks](/operations/system-tables/disks) | 包含在服务器配置中定义的磁盘信息的系统表 | -| [system.distributed_ddl_queue](/operations/system-tables/distributed_ddl_queue) | 包含在集群上执行的分布式 DDL 查询(即使用 ON CLUSTER 子句的查询)相关信息的系统表。 | -| [system.distribution_queue](/operations/system-tables/distribution_queue) | 包含关于队列中待发送到各分片的本地文件信息的系统表。 | -| [system.dns_cache](/operations/system-tables/dns_cache) | 包含缓存的 DNS 记录信息的系统表。 | -| [system.dropped_tables](/operations/system-tables/dropped_tables) | 包含那些已执行 `DROP TABLE` 操作但尚未完成数据清理的表信息的系统表 | -| [system.dropped_tables_parts](/operations/system-tables/dropped_tables_parts) | 包含来自 `system.dropped_tables` 的 MergeTree 已删除表各个数据分片信息的系统表 | -| [system.enabled_roles](/operations/system-tables/enabled_roles) | 包含当前所有活跃角色的系统表,包括当前用户的当前角色,以及授予当前角色的其他角色 | -| [system.error_log](/operations/system-tables/system-error-log) | 系统表,用于保存来自 `system.errors` 表的错误值历史记录,并定期写入磁盘。 | -| [system.errors](/operations/system-tables/errors) | 包含错误代码及其触发次数的系统表。 | -| [system.events](/operations/system-tables/events) | 记录系统中已发生事件数量的系统表。 | -| [system.functions](/operations/system-tables/functions) | 包含普通函数和聚合函数相关信息的系统表。 | -| [system.grants](/operations/system-tables/grants) | 用于显示授予 ClickHouse 用户账户的权限的系统表。 | -| [system.graphite_retentions](/operations/system-tables/graphite_retentions) | 包含 `graphite_rollup` 参数信息的系统表,这些参数用于使用 `GraphiteMergeTree` 引擎的表。 | -| [system.histogram_metrics](/operations/system-tables/histogram_metrics) | 该表包含可即时计算并以 Prometheus 格式导出的直方图指标,始终保持最新状态。 | -| [system.iceberg_history](/operations/system-tables/iceberg_history) | 系统 Iceberg 快照历史记录 | -| [system.iceberg_metadata_log](/operations/system-tables/iceberg_metadata_log) | 包含从 Iceberg 表中读取的元数据文件信息的系统表。每条记录对应一个根元数据文件、从 Avro 文件中提取的元数据,或某个 Avro 文件中的一条记录。 | -| [system.jemalloc_bins](/operations/system-tables/jemalloc_bins) | 包含通过 jemalloc 分配器在不同大小类别(bins)中进行的内存分配信息的系统表,这些信息汇总自所有 arena。 | -| [system.kafka_consumers](/operations/system-tables/kafka_consumers) | 包含 Kafka 消费者相关信息的系统表。 | -| [system.licenses](/operations/system-tables/licenses) | 包含 ClickHouse 源码中 contrib 目录下第三方库许可证信息的系统表。 | -| [system.merge_tree_settings](/operations/system-tables/merge_tree_settings) | 存储 MergeTree 表设置信息的系统表。 | -| [system.merges](/operations/system-tables/merges) | 用于记录 MergeTree 系列表当前正在执行的合并和数据部件变更信息的系统表。 | -| [system.metric_log](/operations/system-tables/metric_log) | 一个系统表,包含来自 `system.metrics` 和 `system.events` 表的指标值历史记录,并定期写入磁盘。 | -| [system.metrics](/operations/system-tables/metrics) | 包含可即时计算或具有当前值的指标的系统表。 | -| [system.moves](/operations/system-tables/moves) | 包含 MergeTree 表正在进行的数据部分迁移信息的系统表。每次数据部分迁移对应一行记录。 | -| [system.mutations](/operations/system-tables/mutations) | 包含 MergeTree 表变更及其进度信息的系统表。每条变更命令对应一行记录。 | -| [system.numbers_mt](/operations/system-tables/numbers_mt) | 与 `system.numbers` 类似的系统表,但读取是并行进行的,返回的数字可以是任意顺序。 | -| [system.numbers](/operations/system-tables/numbers) | 包含一个仅有名为 `number` 的 UInt64 列的系统表,该列存储从零开始的几乎所有自然数。 | -| [system.one](/operations/system-tables/one) | 系统表,仅包含一行数据,且只有一个名为 `dummy` 的 UInt8 列,列值为 0。类似于其他数据库管理系统中的 `DUAL` 表。 | -| [system.opentelemetry_span_log](/operations/system-tables/opentelemetry_span_log) | 包含已执行查询的 trace span 信息的系统表。 | -| [system.part_log](/operations/system-tables/part_log) | 包含 MergeTree 系列表中数据部件相关事件信息的系统表,例如数据部件的新增或合并。 | -| [system.parts](/operations/system-tables/parts) | 包含 MergeTree 表数据片段信息的系统表 | -| [system.parts_columns](/operations/system-tables/parts_columns) | 包含 MergeTree 表各个数据片段及其列信息的系统表。 | -| [system.processes](/operations/system-tables/processes) | 用于实现 `SHOW PROCESSLIST` 查询的系统表。 | -| [system.processors_profile_log](/operations/system-tables/processors_profile_log) | 包含处理器级性能分析信息的系统表(可在 `EXPLAIN PIPELINE` 中查看) | -| [system.projection_parts_columns](/operations/system-tables/projection_parts_columns) | 存储 MergeTree 系列表中投影部件列信息的系统表 | -| [system.projection_parts](/operations/system-tables/projection_parts) | 包含 MergeTree 系列表的投影部件信息的系统表。 | -| [system.projections](/operations/system-tables/projections) | 包含所有表中已有投影信息的系统表。 | -| [system.query_views_log](/operations/system-tables/query_views_log) | 记录在执行查询时被执行的依赖视图信息的系统表,例如视图类型或执行时间。 | -| [system.query_condition_cache](/operations/system-tables/query_condition_cache) | 用于显示查询条件缓存内容的系统表。 | -| [system.query_thread_log](/operations/system-tables/query_thread_log) | 包含执行查询的线程信息的系统表,例如线程名称、线程启动时间以及查询处理耗时。 | -| [system.query_metric_log](/operations/system-tables/query_metric_log) | 包含来自 `system.events` 表的单个查询的内存和指标值历史记录的系统表,数据会定期写入磁盘。 | -| [system.query_log](/operations/system-tables/query_log) | 包含已执行查询信息的系统表,例如开始时间、处理时长、错误消息。 | -| [system.query_cache](/operations/system-tables/query_cache) | 用于显示查询缓存内容的系统表。 | -| [system.quota_usage](/operations/system-tables/quota_usage) | 包含当前用户配额使用情况信息的系统表,例如已使用的配额以及剩余的配额。 | -| [system.quota_limits](/operations/system-tables/quota_limits) | 包含所有配额在各个时间区间上的最大值信息的系统表。一个配额可以对应任意数量(包括零)行。 | -| [system.quotas_usage](/operations/system-tables/quotas_usage) | 包含所有用户配额使用情况信息的系统表。 | -| [system.quotas](/operations/system-tables/quotas) | 用于存储配额信息的系统表。 | -| [system.replicas](/operations/system-tables/replicas) | 包含本地服务器上复制表相关信息和状态的系统表,可用于监控。 | -| [system.replicated_fetches](/operations/system-tables/replicated_fetches) | 包含当前正在执行的后台拉取操作信息的系统表。 | -| [system.replication_queue](/operations/system-tables/replication_queue) | 包含关于存储在 ClickHouse Keeper 或 ZooKeeper 中、针对 `ReplicatedMergeTree` 系列表的复制队列任务信息的系统表。 | -| [system.resources](/operations/system-tables/resources) | 包含本地服务器上各资源信息的系统表,每个资源对应一行记录。 | -| [system.role_grants](/operations/system-tables/role_grants) | 包含授予用户和角色的角色信息的系统表。 | -| [system.roles](/operations/system-tables/roles) | 包含已配置的角色信息的系统表。 | -| [system.row_policies](/operations/system-tables/row_policies) | 包含针对某个特定表的过滤条件的系统表,以及应当使用此行策略的角色和/或用户列表。 | -| [system.s3_queue_settings](/operations/system-tables/s3_queue_settings) | 包含 S3Queue 表配置信息的系统表。自服务器 24.10 版本起可用。 | -| [system.scheduler](/operations/system-tables/scheduler) | 包含本地服务器上调度节点相关信息和状态的系统表。 | -| [system.schema_inference_cache](/operations/system-tables/schema_inference_cache) | 包含所有已缓存文件架构信息的系统表。 | -| [system.server_settings](/operations/system-tables/server_settings) | 包含在 `config.xml` 中指定的服务器全局设置信息的系统表。 | -| [system.session_log](/operations/system-tables/session_log) | 包含所有成功和失败的登录、登出事件信息的系统表。 | -| [system.settings](/operations/system-tables/settings) | 包含当前用户会话设置相关信息的系统表。 | -| [system.settings_profile_elements](/operations/system-tables/settings_profile_elements) | 用于描述设置配置文件内容的系统表:约束、设置适用的角色和用户,以及父级设置配置文件。 | -| [system.settings_changes](/operations/system-tables/settings_changes) | 包含历史 ClickHouse 版本中设置变更信息的系统表。 | -| [system.settings_profiles](/operations/system-tables/settings_profiles) | 包含已配置设置配置文件各项属性的系统表。 | -| [system.stack_trace](/operations/system-tables/stack_trace) | 包含所有服务器线程堆栈跟踪的系统表。用于帮助开发人员查看服务器状态。 | -| [system.storage_policies](/operations/system-tables/storage_policies) | 包含在服务器配置中定义的存储策略和卷信息的系统表。 | -| [system.symbols](/operations/system-tables/symbols) | 对 C++ 专家和 ClickHouse 工程师有用的系统表,其中包含用于对 `clickhouse` 二进制文件进行自省的信息。 | -| [system.table_engines](/operations/system-tables/table_engines) | 包含服务器所支持的表引擎及其支持特性描述的系统表。 | -| [system.tables](/operations/system-tables/tables) | 包含服务器已知的每个表的元数据的系统表。 | -| [system.text_log](/operations/system-tables/text_log) | 用于存储日志记录的系统表。 | -| [system.time_zones](/operations/system-tables/time_zones) | 包含 ClickHouse 服务器所支持的时区列表的系统表。 | -| [system.trace_log](/operations/system-tables/trace_log) | 包含采样查询分析器收集的堆栈跟踪信息的系统表。 | -| [system.unicode](/operations/system-tables/unicode) | 包含 Unicode 字符及其属性的系统表。 | -| [system.user_processes](/operations/system-tables/user_processes) | 用于概览用户内存使用情况和 ProfileEvents 的系统表。 | -| [system.users](/operations/system-tables/users) | 用于存储服务器上已配置用户账号列表的系统表。 | -| [system.view_refreshes](/operations/system-tables/view_refreshes) | 包含可刷新物化视图相关信息的系统表。 | -| [system.warnings](/operations/system-tables/system_warnings) | 此表包含有关 ClickHouse 服务器的告警信息。 | -| [system.workloads](/operations/system-tables/workloads) | 包含本地服务器上工作负载信息的系统表。 | -| [system.zookeeper_log](/operations/system-tables/zookeeper_log) | 包含 ZooKeeper 服务器请求参数及响应信息的系统表。 | -| [system.zookeeper_connection](/operations/system-tables/zookeeper_connection) | 仅在配置了 ZooKeeper 时才存在的系统表。显示当前与 ZooKeeper 的连接(包括辅助 ZooKeeper 实例)。 | -| [system.zookeeper_connection_log](/operations/system-tables/zookeeper_connection_log) | 显示 ZooKeeper 连接的历史记录(包括辅助 ZooKeeper 实例)。 | -| [system.zookeeper](/operations/system-tables/zookeeper) | 仅在配置了 ClickHouse Keeper 或 ZooKeeper 时才存在的系统表。它暴露来自配置中定义的 Keeper 集群的数据。 | - -{/*AUTOGENERATED_END*/ } + + diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/jemalloc_bins.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/jemalloc_bins.md index 4e372f9ca6b..da393852871 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/jemalloc_bins.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/jemalloc_bins.md @@ -1,6 +1,6 @@ --- -description: '系统表,包含通过 jemalloc 分配器在不同大小类别(bin)中进行的内存分配信息,这些信息汇总自所有 arena。' -keywords: ['系统表', 'jemalloc_bins'] +description: '系统表,包含通过 jemalloc 分配器在不同大小类别(bins)中的内存分配信息,这些信息汇总自所有 arena。' +keywords: ['system table', 'jemalloc_bins'] slug: /operations/system-tables/jemalloc_bins title: 'system.jemalloc_bins' doc_type: 'reference' @@ -10,24 +10,18 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -包含通过 jemalloc 分配器在不同大小类(bin)中的内存分配信息,这些信息是从所有 arena 聚合而来的。 -由于 jemalloc 中的线程本地缓存,这些统计数据可能并非绝对精确。 +包含由 `jemalloc` 分配器在不同大小类(bin)中完成的内存分配信息,这些信息是从所有 arena 聚合而来的。 +由于 `jemalloc` 中的线程本地缓存,这些统计数据可能并非绝对精确。 列: {/*AUTOGENERATED_START*/ } -* `index` ([UInt16](../../sql-reference/data-types/)) — 按大小排序的 bin 的索引。 -* `large` ([UInt8](../../sql-reference/data-types/)) — 大块分配为 True,小块分配为 False。 -* `size` ([UInt64](../../sql-reference/data-types/)) — 此 bin 中分配的大小。 -* `allocations` ([Int64](../../sql-reference/data-types/)) — 分配次数。 -* `deallocations` ([Int64](../../sql-reference/data-types/)) — 释放次数。 - {/*AUTOGENERATED_END*/ } **示例** -查找对当前整体内存使用量贡献最大的分配大小。 +找出对当前整体内存使用量贡献最大的内存分配大小。 ```sql SELECT @@ -41,7 +35,7 @@ LIMIT 10 ``` ```text -┌─index─┬─large─┬─────size─┬─allocactions─┬─deallocations─┬─active_allocations─┬─allocated_bytes─┐ +┌─索引─┬─大型─┬─────大小─┬─分配次数─┬─释放次数─┬─活跃分配数─┬─已分配字节─┐ │ 82 │ 1 │ 50331648 │ 1 │ 0 │ 1 │ 50331648 │ │ 10 │ 0 │ 192 │ 512336 │ 370710 │ 141626 │ 27192192 │ │ 69 │ 1 │ 5242880 │ 6 │ 2 │ 4 │ 20971520 │ diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/kafka_consumers.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/kafka_consumers.md index ac7ad4f2927..f2ee53a3713 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/kafka_consumers.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/kafka_consumers.md @@ -1,5 +1,5 @@ --- -description: '包含 Kafka 消费者相关信息的系统表。' +description: '包含 Kafka 消费者信息的系统表。' keywords: ['system table', 'kafka_consumers'] slug: /operations/system-tables/kafka_consumers title: 'system.kafka_consumers' @@ -17,26 +17,6 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; {/*AUTOGENERATED_START*/ } -* `database` ([String](../../sql-reference/data-types/)) — 使用 Kafka 引擎的表所属的数据库。 -* `table` ([String](../../sql-reference/data-types/)) — 使用 Kafka 引擎的表名。 -* `consumer_id` ([String](../../sql-reference/data-types/)) — Kafka 消费者标识符。注意,一个表可以有多个消费者。由 `kafka_num_consumers` 参数指定。 -* `assignments.topic` ([Array(String)](../../sql-reference/data-types/)) — Kafka 主题。 -* `assignments.partition_id` ([Array(Int32)](../../sql-reference/data-types/)) — Kafka 分区 ID。注意,一个分区只能被一个消费者分配。 -* `assignments.current_offset` ([Array(Int64)](../../sql-reference/data-types/)) — 当前 offset。 -* `assignments.intent_size` ([Array(Nullable(Int64))](../../sql-reference/data-types/)) — 在新的 StorageKafka 中,已推送但尚未提交的消息数量。 -* `exceptions.time` ([Array(DateTime)](../../sql-reference/data-types/)) — 最近 10 条异常产生时的时间戳。 -* `exceptions.text` ([Array(String)](../../sql-reference/data-types/)) — 最近 10 条异常的文本内容。 -* `last_poll_time` ([DateTime](../../sql-reference/data-types/)) — 最近一次轮询的时间戳。 -* `num_messages_read` ([UInt64](../../sql-reference/data-types/)) — 消费者读取的消息数量。 -* `last_commit_time` ([DateTime](../../sql-reference/data-types/)) — 最近一次提交的时间戳。 -* `num_commits` ([UInt64](../../sql-reference/data-types/)) — 该消费者的提交总次数。 -* `last_rebalance_time` ([DateTime](../../sql-reference/data-types/)) — 最近一次 Kafka 再均衡的时间戳。 -* `num_rebalance_revocations` ([UInt64](../../sql-reference/data-types/)) — 该消费者被撤销分区的次数。 -* `num_rebalance_assignments` ([UInt64](../../sql-reference/data-types/)) — 该消费者被分配到 Kafka 集群的次数。 -* `is_currently_used` ([UInt8](../../sql-reference/data-types/)) — 指示该消费者当前是否正在使用的标志。 -* `last_used` ([DateTime64(6)](../../sql-reference/data-types/)) — 该消费者上次被使用的时间。 -* `rdkafka_stat` ([String](../../sql-reference/data-types/)) — 库的内部统计信息。将 statistics_interval_ms 设为 0 可禁用,默认值为 3000(每三秒一次)。 - {/*AUTOGENERATED_END*/ } 示例: @@ -48,7 +28,7 @@ FORMAT Vertical ``` ```text -第 1 行: +第 1 行: ────── database: test table: kafka diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/licenses.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/licenses.md index 6a63d6e8339..3525545e7e7 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/licenses.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/licenses.md @@ -1,26 +1,19 @@ --- -description: '系统表,包含位于 ClickHouse 源码 contrib 目录中的第三方库的许可证信息。' +description: '包含位于 ClickHouse 源码的 contrib 目录中的第三方库的许可证的系统表。' keywords: ['系统表', '许可证'] slug: /operations/system-tables/licenses title: 'system.licenses' doc_type: 'reference' --- - - # system.licenses -包含 ClickHouse 源码中 [contrib](https://github.com/ClickHouse/ClickHouse/tree/master/contrib) 目录下第三方库的许可证信息。 +包含位于 ClickHouse 源码中 [contrib](https://github.com/ClickHouse/ClickHouse/tree/master/contrib) 目录内第三方库的许可证信息。 列: {/*AUTOGENERATED_START*/ } -* `library_name` ([String](../../sql-reference/data-types/)) — 库名。 -* `license_type` ([String](../../sql-reference/data-types/)) — 许可证类型,例如 Apache、MIT。 -* `license_path` ([String](../../sql-reference/data-types/)) — 许可证文本文件的路径。 -* `license_text` ([String](../../sql-reference/data-types/)) — 许可证文本。 - {/*AUTOGENERATED_END*/ } **示例** diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/merge_tree_settings.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/merge_tree_settings.md index 30955427804..e0a0328b60b 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/merge_tree_settings.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/merge_tree_settings.md @@ -1,40 +1,19 @@ --- -description: '包含 MergeTree 表设置相关信息的系统表。' -keywords: ['系统表', 'merge_tree_settings'] +description: '包含 MergeTree 表设置信息的系统表。' +keywords: ['system table', 'merge_tree_settings'] slug: /operations/system-tables/merge_tree_settings title: 'system.merge_tree_settings' doc_type: 'reference' --- - - # system.merge_tree_settings -包含有关 `MergeTree` 表设置的信息。 +包含 `MergeTree` 表相关设置的信息。 列: {/*AUTOGENERATED_START*/ } -* `name` ([String](../../sql-reference/data-types/)) — 设置名称。 -* `value` ([String](../../sql-reference/data-types/)) — 设置值。 -* `default` ([String](../../sql-reference/data-types/)) — 设置的默认值。 -* `changed` ([UInt8](../../sql-reference/data-types/)) — 如果在配置中显式定义了该设置或显式修改过该设置,则为 1。 -* `description` ([String](../../sql-reference/data-types/)) — 设置描述。 -* `min` ([Nullable(String)](../../sql-reference/data-types/)) — 通过约束为该设置指定的最小值(如果有)。如果设置没有最小值,则为 NULL。 -* `max` ([Nullable(String)](../../sql-reference/data-types/)) — 通过约束为该设置指定的最大值(如果有)。如果设置没有最大值,则为 NULL。 -* `disallowed_values` ([Array(String)](../../sql-reference/data-types/)) — 不允许的值列表。 -* `readonly` ([UInt8](../../sql-reference/data-types/)) — 表示当前用户是否可以更改该设置:0 — 当前用户可以更改该设置,1 — 当前用户不能更改该设置。 -* `type` ([String](../../sql-reference/data-types/)) — 设置类型(与具体实现相关的字符串值)。 -* `is_obsolete` ([UInt8](../../sql-reference/data-types/)) — 表示该设置是否已废弃。 -* `tier` ([Enum8('Production' = 0, 'Obsolete' = 4, 'Experimental' = 8, 'Beta' = 12)](../../sql-reference/data-types/)) — - 此功能的支持级别。ClickHouse 功能按照不同层级组织,层级会根据功能当前的开发状态以及在使用时对其的预期而变化: - -- PRODUCTION:该功能稳定、可安全使用,并且与其他 PRODUCTION 功能交互时没有问题。 -- BETA:该功能稳定且安全。与其他功能组合使用时的结果未知,不保证正确性。欢迎测试和反馈。 -- EXPERIMENTAL:该功能仍在开发中。仅面向开发人员和 ClickHouse 爱好者。该功能可能可用也可能不可用,并且随时可能被移除。 -- OBSOLETE:不再受支持。要么已经被移除,要么将在未来版本中被移除。 - {/*AUTOGENERATED_END*/ } **示例** @@ -57,7 +36,7 @@ name: min_compress_block_size value: 0 default: 0 changed: 0 -description: 写入数据粒度时,如果缓冲区中待压缩数据的大小大于或等于指定阈值,则压缩缓冲区中的数据。如果未设置此参数,则使用相应的全局设置。 +description: 写入颗粒时,如果缓冲区中待压缩数据的大小大于或等于指定阈值,则对缓冲区中的数据进行压缩。如果未设置此项,则使用相应的全局设置。 min: ᴺᵁᴸᴸ max: ᴺᵁᴸᴸ readonly: 0 @@ -71,7 +50,7 @@ name: max_compress_block_size value: 0 default: 0 changed: 0 -description: 如果缓冲区中待压缩数据的大小大于或等于指定阈值,则压缩缓冲区中的待压缩数据。即使当前数据粒度未完成,数据块也会被压缩。如果未设置此参数,则使用相应的全局设置。 +description: 如果缓冲区中待压缩数据的大小大于或等于指定阈值,则对其进行压缩。即使当前颗粒尚未完成,数据块也会被压缩。如果未设置此项,则使用相应的全局设置。 min: ᴺᵁᴸᴸ max: ᴺᵁᴸᴸ readonly: 0 @@ -93,5 +72,5 @@ type: UInt64 is_obsolete: 0 tier: Production -返回 3 行。用时:0.001 秒。 +3 rows in set. Elapsed: 0.001 sec. ``` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/merges.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/merges.md index b620e76dbaa..7b8ac2c7cba 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/merges.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/merges.md @@ -1,6 +1,6 @@ --- -description: '包含当前正在为 MergeTree 系列表执行的合并和数据片段变更(mutation)信息的 system 表。' -keywords: ['system 表', '合并'] +description: '包含当前正在对 MergeTree 系列表执行的合并和部件变更信息的系统表。' +keywords: ['系统表', '合并'] slug: /operations/system-tables/merges title: 'system.merges' doc_type: 'reference' @@ -13,35 +13,10 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -包含当前对 MergeTree 系列表正在进行的合并(merge)和分片变更(mutation)的信息。 +包含关于 MergeTree 引擎系列表当前正在执行的合并(merge)和数据分片变更(part mutation)的信息。 列: {/*AUTOGENERATED_START*/ } -* `database` ([String](../../sql-reference/data-types/)) — 表所在数据库的名称。 -* `table` ([String](../../sql-reference/data-types/)) — 表名。 -* `elapsed` ([Float64](../../sql-reference/data-types/)) — 自合并开始以来经过的时间(秒)。 -* `progress` ([Float64](../../sql-reference/data-types/)) — 已完成工作的百分比,取值范围为 0 到 1。 -* `num_parts` ([UInt64](../../sql-reference/data-types/)) — 需要被合并的 part 数量。 -* `source_part_names` ([Array(String)](../../sql-reference/data-types/)) — 源 part 名称列表。 -* `result_part_name` ([String](../../sql-reference/data-types/)) — 合并后生成的 part 名称。 -* `source_part_paths` ([Array(String)](../../sql-reference/data-types/)) — 每个源 part 的路径列表。 -* `result_part_path` ([String](../../sql-reference/data-types/)) — 合并后生成的 part 路径。 -* `partition_id` ([String](../../sql-reference/data-types/)) — 正在进行合并的分区标识符。 -* `partition` ([String](../../sql-reference/data-types/)) — 分区名称。 -* `is_mutation` ([UInt8](../../sql-reference/data-types/)) — 如果该过程是一次 mutation,则为 1。 -* `total_size_bytes_compressed` ([UInt64](../../sql-reference/data-types/)) — 已合并数据块中压缩数据的总大小(字节)。 -* `total_size_bytes_uncompressed` ([UInt64](../../sql-reference/data-types/)) — 已合并数据块中未压缩数据的总大小(字节)。 -* `total_size_marks` ([UInt64](../../sql-reference/data-types/)) — 已合并 part 中的标记总数。 -* `bytes_read_uncompressed` ([UInt64](../../sql-reference/data-types/)) — 已读取的未压缩字节数。 -* `rows_read` ([UInt64](../../sql-reference/data-types/)) — 已读取的行数。 -* `bytes_written_uncompressed` ([UInt64](../../sql-reference/data-types/)) — 已写入的未压缩字节数。 -* `rows_written` ([UInt64](../../sql-reference/data-types/)) — 已写入的行数。 -* `columns_written` ([UInt64](../../sql-reference/data-types/)) — 已写入的列数(对于 Vertical 合并算法)。 -* `memory_usage` ([UInt64](../../sql-reference/data-types/)) — 合并过程的内存使用量。 -* `thread_id` ([UInt64](../../sql-reference/data-types/)) — 合并过程的线程 ID。 -* `merge_type` ([String](../../sql-reference/data-types/)) — 当前合并的类型。如果是 mutation,则为空。 -* `merge_algorithm` ([String](../../sql-reference/data-types/)) — 当前合并使用的算法。如果是 mutation,则为空。 - {/*AUTOGENERATED_END*/ } diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/metrics.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/metrics.md index a8224076a93..c78565a3d0e 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/metrics.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/metrics.md @@ -1,5 +1,5 @@ --- -description: '包含可即时计算或具有当前值的度量指标的系统表。' +description: '系统表,包含可即时计算或表示当前值的指标。' keywords: ['系统表', '指标'] slug: /operations/system-tables/metrics title: 'system.metrics' @@ -13,19 +13,15 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -包含可即时计算或具有当前值的指标。例如,同时处理的查询数量或当前副本延迟时间。该表中的数据始终是最新的。 +包含可以实时计算或具有当前值的指标。例如,同时处理的查询数量或当前副本延迟。此表始终保持最新。 列: {/*AUTOGENERATED_START*/ } -* `metric` ([String](../../sql-reference/data-types/)) — 指标名称。 -* `value` ([Int64](../../sql-reference/data-types/)) — 指标值。 -* `description` ([String](../../sql-reference/data-types/)) — 指标描述。 - {/*AUTOGENERATED_END*/ } -你可以在源文件 [src/Common/CurrentMetrics.cpp](https://github.com/ClickHouse/ClickHouse/blob/master/src/Common/CurrentMetrics.cpp) 中找到所有支持的指标。 +可以在源文件 [src/Common/CurrentMetrics.cpp](https://github.com/ClickHouse/ClickHouse/blob/master/src/Common/CurrentMetrics.cpp) 中查阅所有受支持的指标。 **示例** @@ -37,12 +33,12 @@ SELECT * FROM system.metrics LIMIT 10 ┌─metric───────────────────────────────┬─value─┬─description────────────────────────────────────────────────────────────┐ │ Query │ 1 │ 正在执行的查询数量 │ │ Merge │ 0 │ 正在执行的后台合并数量 │ -│ PartMutation │ 0 │ 变更操作数量 (ALTER DELETE/UPDATE) │ -│ ReplicatedFetch │ 0 │ 正在从副本拉取的数据分片数量 │ -│ ReplicatedSend │ 0 │ 正在发送至副本的数据分片数量 │ +│ PartMutation │ 0 │ 变更操作数量(ALTER DELETE/UPDATE) │ +│ ReplicatedFetch │ 0 │ 正在从副本获取的数据分片数量 │ +│ ReplicatedSend │ 0 │ 正在发送到副本的数据分片数量 │ │ ReplicatedChecks │ 0 │ 正在进行一致性检查的数据分片数量 │ │ BackgroundMergesAndMutationsPoolTask │ 0 │ 关联后台池中活跃的合并和变更任务数量 │ -│ BackgroundFetchesPoolTask │ 0 │ 关联后台池中活跃的拉取任务数量 │ +│ BackgroundFetchesPoolTask │ 0 │ 关联后台池中活跃的获取任务数量 │ │ BackgroundCommonPoolTask │ 0 │ 关联后台池中活跃的任务数量 │ │ BackgroundMovePoolTask │ 0 │ BackgroundProcessingPool 中用于移动操作的活跃任务数量 │ └──────────────────────────────────────┴───────┴────────────────────────────────────────────────────────────────────────┘ @@ -57,151 +53,147 @@ Aggregator 线程池中的线程数量。 ### AggregatorThreadsActive {#aggregatorthreadsactive} -在 Aggregator 线程池中正在运行任务的线程数量。 +正在执行任务的 Aggregator 线程池中的线程数量。 ### TablesLoaderForegroundThreads {#tablesloaderforegroundthreads} -异步加载器前台线程池中的线程数量。 +异步加载器前台线程池的线程数。 ### TablesLoaderForegroundThreadsActive {#tablesloaderforegroundthreadsactive} -在异步加载器前台线程池中正在运行任务的线程数量。 +异步加载器前台线程池中正在执行任务的线程数量。 ### TablesLoaderBackgroundThreads {#tablesloaderbackgroundthreads} -异步加载器后台线程池中的线程数量。 +异步加载器后台线程池中的线程数。 ### TablesLoaderBackgroundThreadsActive {#tablesloaderbackgroundthreadsactive} -在异步加载器后台线程池中正在运行任务的线程数量。 +异步加载器后台线程池中正在执行任务的线程数量。 ### AsyncInsertCacheSize {#asyncinsertcachesize} -缓存中异步插入哈希 ID 的数量。 +缓存中异步插入哈希 ID 的数量 ### AsynchronousInsertThreads {#asynchronousinsertthreads} -AsynchronousInsert 线程池中的线程数量。 +`AsynchronousInsert` 线程池中的线程数。 ### AsynchronousInsertThreadsActive {#asynchronousinsertthreadsactive} -在 AsynchronousInsert 线程池中正在运行任务的线程数量。 +AsynchronousInsert 线程池中正在执行任务的线程数量。 ### AsynchronousReadWait {#asynchronousreadwait} -正在等待异步读取的线程数量。 +等待异步读取的线程数量。 ### BackgroundBufferFlushSchedulePoolSize {#backgroundbufferflushschedulepoolsize} -BackgroundBufferFlushSchedulePool 中任务数量的上限。 +BackgroundBufferFlushSchedulePool 中任务数的上限 ### BackgroundBufferFlushSchedulePoolTask {#backgroundbufferflushschedulepooltask} -BackgroundBufferFlushSchedulePool 中活动任务的数量。该线程池用于定期刷新 Buffer。 +BackgroundBufferFlushSchedulePool 中正在运行的任务数。该池用于定期刷新 Buffer 数据。 ### BackgroundCommonPoolSize {#backgroundcommonpoolsize} -关联的后台线程池中任务数量的上限。 +关联后台线程池中任务数量的上限 ### BackgroundCommonPoolTask {#backgroundcommonpooltask} -关联的后台线程池中活动任务的数量。 +关联的后台池中当前活动任务的数量 ### BackgroundDistributedSchedulePoolSize {#backgrounddistributedschedulepoolsize} -BackgroundDistributedSchedulePool 中任务数量的上限。 +限制 BackgroundDistributedSchedulePool 中的任务数量 ### BackgroundDistributedSchedulePoolTask {#backgrounddistributedschedulepooltask} -BackgroundDistributedSchedulePool 中活动任务的数量。该线程池用于在后台执行分布式发送。 +BackgroundDistributedSchedulePool 中当前活动任务的数量。该池用于在后台执行分布式发送操作。 ### BackgroundFetchesPoolSize {#backgroundfetchespoolsize} -关联的后台线程池中并发抓取操作数量的上限。 +关联的后台池中可同时进行的获取操作数量上限 ### BackgroundFetchesPoolTask {#backgroundfetchespooltask} -关联的后台线程池中活动抓取操作的数量。 +关联后台池中的活动获取任务数量 ### BackgroundMergesAndMutationsPoolSize {#backgroundmergesandmutationspoolsize} -关联的后台线程池中活动合并和变更操作数量的上限。 +限制关联后台池中可同时进行的合并和变更任务数量 ### BackgroundMergesAndMutationsPoolTask {#backgroundmergesandmutationspooltask} -关联的后台线程池中活动合并和变更操作的数量。 +对应后台池中正在执行的合并与变更任务数量 ### BackgroundMessageBrokerSchedulePoolSize {#backgroundmessagebrokerschedulepoolsize} -用于消息流的 BackgroundProcessingPool 中任务数量的上限。 +用于消息流的 BackgroundProcessingPool 中任务数量的上限 ### BackgroundMessageBrokerSchedulePoolTask {#backgroundmessagebrokerschedulepooltask} -用于消息流的 BackgroundProcessingPool 中活动任务的数量。 +用于消息流的 BackgroundProcessingPool 中活动任务的数量 ### BackgroundMovePoolSize {#backgroundmovepoolsize} -用于移动操作的 BackgroundProcessingPool 中任务数量的上限。 +限制 BackgroundProcessingPool 中用于 `move` 操作的任务数量 ### BackgroundMovePoolTask {#backgroundmovepooltask} -用于移动操作的 BackgroundProcessingPool 中活动任务的数量。 +BackgroundProcessingPool 中用于执行 move 操作的活动任务数 ### BackgroundSchedulePoolSize {#backgroundschedulepoolsize} -BackgroundSchedulePool 中任务数量的上限。该线程池用于定期执行 ReplicatedMergeTree 任务,例如清理旧数据分片、修改数据分片、副本重新初始化等。 +BackgroundSchedulePool 中任务数量的上限。该池用于定期执行 ReplicatedMergeTree 相关任务,例如清理旧数据部件、变更数据部件、副本重新初始化等。 ### BackgroundSchedulePoolTask {#backgroundschedulepooltask} -BackgroundSchedulePool 中活动任务的数量。该线程池用于定期执行 ReplicatedMergeTree 任务,例如清理旧数据分片、修改数据分片、副本重新初始化等。 +BackgroundSchedulePool 中的活动任务数。该池用于周期性执行 ReplicatedMergeTree 相关任务,例如清理旧数据部件、变更数据部件、重新初始化副本等。 ### BackupsIOThreads {#backupsiothreads} -BackupsIO 线程池中的线程数量。 +BackupsIO 线程池中的线程数。 ### BackupsIOThreadsActive {#backupsiothreadsactive} -在 BackupsIO 线程池中正在运行任务的线程数量。 +BackupsIO 线程池中正在运行任务的线程数量。 ### BackupsThreads {#backupsthreads} -BACKUP 线程池中的线程数量。 +用于执行 BACKUP 操作的线程池线程数量。 ### BackupsThreadsActive {#backupsthreadsactive} -在 BACKUP 线程池中正在运行任务的线程数量。 +用于执行 BACKUP 任务的线程池中正在运行任务的线程数量。 ### BrokenDistributedFilesToInsert {#brokendistributedfilestoinsert} -用于异步插入到 Distributed 表且已标记为损坏的文件数量。该指标在启动时从 0 开始计数。各分片上的文件数量会被求和。 +已被标记为损坏的、用于异步写入到 `Distributed` 表的文件数量。该指标在启动时从 0 开始计数。各分片中的文件数量会被汇总。 ### CacheDetachedFileSegments {#cachedetachedfilesegments} -当前存在的已分离缓存文件分段数量。 +当前已分离的缓存文件段数量 ### CacheDictionaryThreads {#cachedictionarythreads} -CacheDictionary 线程池中的线程数量。 +`CacheDictionary` 线程池的线程数。 ### CacheDictionaryThreadsActive {#cachedictionarythreadsactive} -在 CacheDictionary 线程池中正在运行任务的线程数量。 - - - -正在 CacheDictionary 线程池中运行任务的线程数量。 +CacheDictionary 线程池中正在运行任务的线程数量。 ### CacheDictionaryUpdateQueueBatches {#cachedictionaryupdatequeuebatches} -CacheDictionaries 中更新队列里“批次”(一组键)的数量。 +CacheDictionaries 中更新队列中的“批次”(一组键)的数量。 ### CacheDictionaryUpdateQueueKeys {#cachedictionaryupdatequeuekeys} -CacheDictionaries 中更新队列里键的精确数量。 +CacheDictionary 更新队列中键的确切数量。 ### CacheFileSegments {#cachefilesegments} -现有缓存文件分段的数量。 +现有缓存文件段的数量 ### ContextLockWait {#contextlockwait} @@ -209,11 +201,11 @@ CacheDictionaries 中更新队列里键的精确数量。 ### DDLWorkerThreads {#ddlworkerthreads} -用于 ON CLUSTER 查询的 DDLWorker 线程池中的线程数量。 +用于处理 `ON CLUSTER` 查询的 DDLWorker 线程池线程数量。 ### DDLWorkerThreadsActive {#ddlworkerthreadsactive} -用于 ON CLUSTER 查询并正在运行任务的 DDLWorker 线程池中的线程数量。 +当前在为 ON CLUSTER 查询执行任务的 DDLWORKER 线程池中的线程数量。 ### DatabaseCatalogThreads {#databasecatalogthreads} @@ -221,7 +213,7 @@ DatabaseCatalog 线程池中的线程数量。 ### DatabaseCatalogThreadsActive {#databasecatalogthreadsactive} -DatabaseCatalog 线程池中正在运行任务的线程数量。 +DatabaseCatalog 线程池中正在执行任务的线程数量。 ### DatabaseOnDiskThreads {#databaseondiskthreads} @@ -229,117 +221,113 @@ DatabaseOnDisk 线程池中的线程数量。 ### DatabaseOnDiskThreadsActive {#databaseondiskthreadsactive} -DatabaseOnDisk 线程池中正在运行任务的线程数量。 +DatabaseOnDisk 线程池中正在运行任务的线程数。 ### DelayedInserts {#delayedinserts} -由于某个 MergeTree 表分区的活动数据分片数量过多而被限流的 INSERT 查询数量。 +由于 MergeTree 表某个分区的活动数据 part 数量过多而被限流的 INSERT 查询次数。 ### DestroyAggregatesThreads {#destroyaggregatesthreads} -用于销毁聚合状态的线程池中的线程数量。 +用于销毁聚合状态的线程池中的线程数。 ### DestroyAggregatesThreadsActive {#destroyaggregatesthreadsactive} -用于销毁聚合状态并正在运行任务的线程池中的线程数量。 +用于销毁聚合状态的线程池中正在运行任务的线程数。 ### DictCacheRequests {#dictcacherequests} -正在发送到缓存类型字典数据源的请求数量。 +正在发送到缓存类型字典的数据源的请求数量。 ### DiskObjectStorageAsyncThreads {#diskobjectstorageasyncthreads} -DiskObjectStorage 异步线程池中的线程数量。 +用于 DiskObjectStorage 的异步线程池中的线程数量。 ### DiskObjectStorageAsyncThreadsActive {#diskobjectstorageasyncthreadsactive} -DiskObjectStorage 异步线程池中正在运行任务的线程数量。 +DiskObjectStorage 的异步线程池中正在执行任务的线程数量。 ### DiskSpaceReservedForMerge {#diskspacereservedformerge} -为当前正在运行的后台合并保留的磁盘空间。该值略大于当前正在合并的分片总大小。 +为当前正在运行的后台合并操作预留的磁盘空间。该值略大于当前参与合并的各个 part 的总大小。 ### DistributedFilesToInsert {#distributedfilestoinsert} -用于异步插入到 Distributed 表的待处理文件数量。每个分片的文件数会被汇总。 +用于异步插入到 Distributed 表的待处理文件数量。会对每个分片上的文件数量求和。 ### DistributedSend {#distributedsend} -向远程服务器发送已 INSERT 到 Distributed 表的数据的连接数量。包括同步和异步模式。 +向远程服务器发送插入到 Distributed 表中的数据时所建立的连接数量。适用于同步和异步两种模式。 ### EphemeralNode {#ephemeralnode} -在 ZooKeeper 中持有的临时节点数量。 +当前在 ZooKeeper 中的临时节点数量。 ### FilesystemCacheElements {#filesystemcacheelements} -文件系统缓存元素(文件分段) +文件系统缓存元素(文件片段) ### FilesystemCacheReadBuffers {#filesystemcachereadbuffers} -活动缓存缓冲区的数量。 +活动缓存缓冲区数量 ### FilesystemCacheSize {#filesystemcachesize} -文件系统缓存大小(字节)。 +文件系统缓存大小(以字节为单位) ### QueryCacheBytes {#querycachebytes} -查询缓存的总大小(字节)。 +查询缓存的总大小,单位为字节。 ### QueryCacheEntries {#querycacheentries} -查询缓存中的条目总数。 +查询缓存中的总条目数。 ### UncompressedCacheBytes {#uncompressedcachebytes} -未压缩缓存的总大小(字节)。未压缩缓存通常不会提升性能,应尽量避免使用。 +未压缩缓存的总大小(以字节为单位)。未压缩缓存通常不会带来性能提升,应尽量避免使用。 ### UncompressedCacheCells {#uncompressedcachecells} ### CompiledExpressionCacheBytes {#compiledexpressioncachebytes} -JIT 编译代码缓存所使用的总字节数。 +JIT 编译代码缓存占用的总字节数。 ### CompiledExpressionCacheCount {#compiledexpressioncachecount} -JIT 编译代码缓存中的条目总数。 +JIT 编译代码缓存中的总条目数。 ### MMapCacheCells {#mmapcachecells} -使用 `mmap`(映射到内存)打开的文件数量。该指标用于将 `local_filesystem_read_method` 设置为 `mmap` 的查询。使用 `mmap` 打开的文件会保留在缓存中,以避免代价高昂的 TLB 刷新。 +使用 `mmap`(内存映射)打开的文件数量。该指标适用于将 `local_filesystem_read_method` 设置为 `mmap` 的查询。使用 `mmap` 打开的文件会保留在缓存中,以避免代价高昂的 TLB 刷新。 ### MarkCacheBytes {#markcachebytes} -标记缓存的总大小(字节)。 +标记缓存总大小(字节) ### MarkCacheFiles {#markcachefiles} -缓存在标记缓存中的标记文件总数。 +标记缓存中已缓存的标记文件的总数 ### GlobalThread {#globalthread} -全局线程池中的线程数量。 +全局线程池中的线程数。 ### GlobalThreadActive {#globalthreadactive} -全局线程池中正在运行任务的线程数量。 +当前在全局线程池中执行任务的线程数。 ### HTTPConnection {#httpconnection} -到 HTTP 服务器的连接数量。 - -### HashedDictionaryThreads {#hasheddictionarythreads} - - +HTTP 服务器连接数 ### HashedDictionaryThreads {#hasheddictionarythreads} -HashedDictionary 线程池中的线程数量。 +HashedDictionary 线程池的线程数量。 ### HashedDictionaryThreadsActive {#hasheddictionarythreadsactive} -HashedDictionary 线程池中正在运行任务的线程数量。 +HashedDictionary 线程池中正在运行任务的线程数。 ### IOPrefetchThreads {#ioprefetchthreads} @@ -351,23 +339,23 @@ IO 预取线程池中正在运行任务的线程数量。 ### IOThreads {#iothreads} -IO 线程池中的线程数量。 +IO 线程池中的线程数。 ### IOThreadsActive {#iothreadsactive} -IO 线程池中正在运行任务的线程数量。 +IO 线程池中正在运行任务的线程数。 ### IOUringInFlightEvents {#iouringinflightevents} -当前正在处理中的 io_uring SQE 数量。 +正在进行的 io_uring SQE 数量 ### IOUringPendingEvents {#iouringpendingevents} -等待提交的 io_uring SQE 数量。 +尚未提交的 io_uring SQE 数量 ### IOWriterThreads {#iowriterthreads} -IO 写入线程池中的线程数量。 +I/O 写入线程池中的线程数。 ### IOWriterThreadsActive {#iowriterthreadsactive} @@ -375,99 +363,99 @@ IO 写入线程池中正在运行任务的线程数量。 ### InterserverConnection {#interserverconnection} -用于从其他副本获取数据分片的连接数量。 +来自其他副本用于获取数据片段的连接数 ### KafkaAssignedPartitions {#kafkaassignedpartitions} -Kafka 表当前被分配到的分区数量。 +当前分配给 Kafka 表的分区数量 ### KafkaBackgroundReads {#kafkabackgroundreads} -当前正在运行的后台读取数量(用于从 Kafka 填充物化视图)。 +当前正在执行的后台读取操作数量(用于从 Kafka 填充物化视图) ### KafkaConsumers {#kafkaconsumers} -活动的 Kafka 消费者数量。 +活动 Kafka 消费者数量 ### KafkaConsumersInUse {#kafkaconsumersinuse} -当前被直接或后台读取使用的 Kafka 消费者数量。 +当前用于直接读取或后台读取的消费者数量 ### KafkaConsumersWithAssignment {#kafkaconsumerswithassignment} -已分配到某些分区的活动 Kafka 消费者数量。 +具有分区分配的活动 Kafka 消费者数量。 ### KafkaLibrdkafkaThreads {#kafkalibrdkafkathreads} -活动的 librdkafka 线程数量。 +当前活动的 librdkafka 线程数 ### KafkaProducers {#kafkaproducers} -已创建的活动 Kafka 生产者数量。 +已创建的活跃 Kafka 生产者数量 ### KafkaWrites {#kafkawrites} -当前正在向 Kafka 执行的 INSERT 操作数量。 +当前正在执行的写入 Kafka 的插入操作数 ### KeeperAliveConnections {#keeperaliveconnections} -存活的连接数量。 +活动连接数 ### KeeperOutstandingRequests {#keeperoutstandingrequests} -未完成请求的数量。 +未处理请求数 ### LocalThread {#localthread} -本地线程池中的线程数量。本地线程池中的线程来自全局线程池。 +本地线程池中的线程数量。本地线程池中的线程从全局线程池中获取。 ### LocalThreadActive {#localthreadactive} -本地线程池中正在运行任务的线程数量。 +本地线程池中正在执行任务的线程数量。 ### MMappedAllocBytes {#mmappedallocbytes} -所有 mmapped 分配的字节总和。 +通过 mmap 分配的字节总数 ### MMappedAllocs {#mmappedallocs} -mmapped 分配的总次数。 +通过 mmap 进行映射分配的总次数 ### MMappedFileBytes {#mmappedfilebytes} -mmapped 文件区域的大小总和。 +所有内存映射文件区域大小的总和。 ### MMappedFiles {#mmappedfiles} -mmapped 文件的总数量。 +内存映射文件(mmapped files)的总数。 ### MarksLoaderThreads {#marksloaderthreads} -用于加载标记(marks)的线程池中的线程数量。 +用于加载标记的线程池线程数量。 ### MarksLoaderThreadsActive {#marksloaderthreadsactive} -用于加载标记(marks)的线程池中正在运行任务的线程数量。 +用于加载标记的线程池中当前正在执行任务的线程数量。 ### MaxDDLEntryID {#maxddlentryid} -DDLWorker 已处理的最大 DDL 记录 ID。 +DDLWorker 已处理的最大 DDL 条目 ID。 ### MaxPushedDDLEntryID {#maxpushedddlentryid} -DDLWorker 已推送到 ZooKeeper 的最大 DDL 记录 ID。 +DDLWorker 推送到 ZooKeeper 的最大 DDL 条目 ID。 ### MemoryTracking {#memorytracking} 服务器已分配的内存总量(字节)。 -### Merge {#merge} +### 合并 {#merge} -正在执行的后台合并数量。 +正在执行的后台合并操作数量 ### MergeTreeAllRangesAnnouncementsSent {#mergetreeallrangesannouncementssent} -从远程服务器向发起服务器发送的、关于数据分片集合(针对 MergeTree 表)的正在进行中的通知数量。该指标在远程服务器端进行度量。 +当前从远程服务器发送到发起服务器、关于数据部件集合(适用于 MergeTree 表)的正在发送中的公告数量。该指标在远程服务器端进行统计。 ### MergeTreeBackgroundExecutorThreads {#mergetreebackgroundexecutorthreads} @@ -479,129 +467,127 @@ MergeTreeBackgroundExecutor 线程池中正在运行任务的线程数量。 ### MergeTreeDataSelectExecutorThreads {#mergetreedataselectexecutorthreads} -MergeTreeDataSelectExecutor 线程池中的线程数量。 +MergeTreeDataSelectExecutor 线程池中的线程数。 ### MergeTreeDataSelectExecutorThreadsActive {#mergetreedataselectexecutorthreadsactive} -MergeTreeDataSelectExecutor 线程池中正在运行任务的线程数量。 +MergeTreeDataSelectExecutor 线程池中正在执行任务的线程数。 ### MergeTreePartsCleanerThreads {#mergetreepartscleanerthreads} -MergeTree 分片清理线程池中的线程数量。 - - +MergeTree 数据部分清理线程池中的线程数量。 ### MergeTreePartsCleanerThreadsActive {#mergetreepartscleanerthreadsactive} -MergeTree 分片清理线程池中正在运行任务的线程数量。 +MergeTree 数据片段清理线程池中当前正在执行任务的线程数。 ### MergeTreePartsLoaderThreads {#mergetreepartsloaderthreads} -MergeTree 分片加载线程池中的线程数量。 +MergeTree 部件加载器线程池中的线程数。 ### MergeTreePartsLoaderThreadsActive {#mergetreepartsloaderthreadsactive} -MergeTree 分片加载线程池中正在运行任务的线程数量。 +在 MergeTree 数据部分加载器线程池中正在执行任务的线程数。 ### MergeTreeReadTaskRequestsSent {#mergetreereadtaskrequestssent} -从远程服务器发往发起服务器、用于选择读取任务(针对 MergeTree 表)的正在进行中的回调请求数量。该指标在远程服务器端进行统计。 +当前从远程服务器发回到发起服务器、用于选择读取任务(针对 MergeTree 表)的回调请求的数量(即正在进行中的请求数)。该指标在远程服务器端进行统计。 ### Move {#move} -当前正在执行的 move 操作数量。 +当前正在执行的移动操作数 ### MySQLConnection {#mysqlconnection} -使用 MySQL 协议的客户端连接数量。 +使用 MySQL 协议的客户端连接数量 ### NetworkReceive {#networkreceive} -从网络接收数据的线程数量。仅包含与 ClickHouse 相关的网络交互,不包括由第三方库产生的交互。 +从网络接收数据的线程数。仅包含与 ClickHouse 相关的网络交互,不包括由第三方库发起的网络交互。 ### NetworkSend {#networksend} -向网络发送数据的线程数量。仅包含与 ClickHouse 相关的网络交互,不包括由第三方库产生的交互。 +向网络发送数据的线程数。只统计与 ClickHouse 相关的网络交互,不包括由第三方库发起的网络交互。 ### OpenFileForRead {#openfileforread} -当前为读取而打开的文件数量。 +用于读取的已打开文件数量 ### OpenFileForWrite {#openfileforwrite} -当前为写入而打开的文件数量。 +打开用于写入的文件数量 ### ParallelFormattingOutputFormatThreads {#parallelformattingoutputformatthreads} -ParallelFormattingOutputFormatThreads 线程池中的线程数量。 +ParallelFormattingOutputFormatThreads 线程池中的线程数。 ### ParallelFormattingOutputFormatThreadsActive {#parallelformattingoutputformatthreadsactive} -ParallelFormattingOutputFormatThreads 线程池中正在运行任务的线程数量。 +ParallelFormattingOutputFormatThreads 线程池中正在执行任务的线程数。 ### PartMutation {#partmutation} -变更(ALTER DELETE/UPDATE)的数量。 +变更次数(ALTER DELETE/UPDATE) -### PartsActive {#partsactive} +### 活跃数据部分 {#partsactive} -处于活动状态的数据分片,被当前和即将进行的 SELECT 使用。 +当前和后续 SELECT 查询会使用的活跃数据部分。 ### PartsCommitted {#partscommitted} -已弃用。参见 PartsActive。 +已弃用。请参阅 PartsActive。 ### PartsCompact {#partscompact} -紧凑分片。 +紧凑部件。 ### PartsDeleteOnDestroy {#partsdeleteondestroy} -分片已被移动到其他磁盘,应在其自身析构函数中删除。 +数据分片已被移动到另一个磁盘,并应在其析构函数中自行删除。 ### PartsDeleting {#partsdeleting} -非活动数据分片,引用计数为 1,当前正由清理器删除。 +具有标识 `refcounter` 的非活动数据分片,当前正由清理器删除。 ### PartsOutdated {#partsoutdated} -非活动数据分片,仅可能被当前的 SELECT 使用,在这些 SELECT 结束后即可删除。 +不是活跃的数据分片,但可能仍在被当前的 `SELECT` 查询使用,待这些 `SELECT` 查询结束后即可删除。 ### PartsPreActive {#partspreactive} -分片已在 data_parts 中,但尚未被 SELECT 使用。 +该 part 位于 `data_parts` 中,但不会被 `SELECT` 查询使用。 ### PartsPreCommitted {#partsprecommitted} -已弃用。参见 PartsPreActive。 +已弃用。请参阅 PartsPreActive。 ### PartsTemporary {#partstemporary} -分片当前正在生成中,还不在 data_parts 列表中。 +该 part 正在生成中,尚未出现在 data_parts 列表中。 ### PartsWide {#partswide} -宽分片。 +宽格式数据片段。 ### PendingAsyncInsert {#pendingasyncinsert} -正在等待刷盘的异步插入数量。 +正在等待刷新的异步插入数量。 ### PostgreSQLConnection {#postgresqlconnection} -使用 PostgreSQL 协议的客户端连接数量。 +客户端通过 PostgreSQL 协议建立的连接数 -### Query {#query} +### 查询 {#query} -正在执行的查询数量。 +正在执行的查询数量 ### QueryPreempted {#querypreempted} -由于 `priority` 设置而被停止并处于等待状态的查询数量。 +因 `priority` 设置而被中止并进入等待状态的查询数量。 ### QueryThread {#querythread} -用于处理查询的线程数量。 +查询处理线程的数量 ### RWLockActiveReaders {#rwlockactivereaders} @@ -609,45 +595,43 @@ ParallelFormattingOutputFormatThreads 线程池中正在运行任务的线程数 ### RWLockActiveWriters {#rwlockactivewriters} -在表的 RWLock 上持有写锁的线程数量。 +持有表上 RWLock 写锁的线程数量。 ### RWLockWaitingReaders {#rwlockwaitingreaders} -在表的 RWLock 上等待获取读锁的线程数量。 +等待获取表级 RWLock 读锁的线程数量。 ### RWLockWaitingWriters {#rwlockwaitingwriters} -在表的 RWLock 上等待获取写锁的线程数量。 +在表的 RWLock 上等待写入的线程数量。 ### Read {#read} -正在进行中的读(read、pread、io_getevents 等)系统调用数量。 +正在进行的 read(read、pread、io_getevents 等)系统调用数量 ### ReadTaskRequestsSent {#readtaskrequestssent} -从远程服务器发往发起服务器、用于选择读取任务(针对 s3Cluster 表函数及类似场景)的正在进行中的回调请求数量。该指标在远程服务器端进行统计。 +从远程服务器返回到发起端服务器、用于选择读取任务的在途回调请求的当前数量(适用于 `s3Cluster` 表函数及类似场景)。在远程服务器端进行度量。 ### ReadonlyReplica {#readonlyreplica} -由于 ZooKeeper 会话丢失后重新初始化,或在未配置 ZooKeeper 的情况下启动,而当前处于只读状态的 Replicated 表数量。 +由于在 ZooKeeper 会话丢失后重新初始化或在未配置 ZooKeeper 的情况下启动而处于只读状态的 Replicated 表的当前数量。 ### RemoteRead {#remoteread} -正在进行中的远程读取操作数量。 +进行中的远程读取操作数量 ### ReplicatedChecks {#replicatedchecks} -正在进行一致性检查的数据分片数量。 +用于一致性检查的数据分片数量 ### ReplicatedFetch {#replicatedfetch} -正在从副本拉取的数据分片数量。 +正在从副本拉取的数据分片数量 ### ReplicatedSend {#replicatedsend} -正在发送到副本的数据分片数量。 - - +当前正在发送到副本的数据分片数量 ### RestartReplicaThreads {#restartreplicathreads} @@ -655,47 +639,47 @@ RESTART REPLICA 线程池中的线程数。 ### RestartReplicaThreadsActive {#restartreplicathreadsactive} -在 RESTART REPLICA 线程池中正在运行任务的线程数。 +RESTART REPLICA 线程池中正在执行任务的线程数量。 ### RestoreThreads {#restorethreads} -用于 RESTORE 的线程池中的线程数。 +用于 RESTORE 操作的线程池中的线程数量。 ### RestoreThreadsActive {#restorethreadsactive} -用于 RESTORE 的线程池中正在运行任务的线程数。 +用于执行 RESTORE 任务的线程池中的线程数。 -### Revision {#revision} +### 修订号 {#revision} -服务器的修订版本。对于每个发布版或候选发布版(补丁版本除外),该数字都会递增。 +服务器的修订号。该数字在每次正式发行版或候选发行版发布时递增,补丁发行版除外。 ### S3Requests {#s3requests} -S3 请求次数。 +S3 请求 ### SendExternalTables {#sendexternaltables} -向远程服务器发送外部表数据的连接数。外部表用于实现带有分布式子查询的 GLOBAL IN 和 GLOBAL JOIN 运算符。 +向远程服务器发送外部表数据的连接数。外部表用于实现带有分布式子查询的 `GLOBAL IN` 和 `GLOBAL JOIN` 运算符。 ### SendScalars {#sendscalars} -向远程服务器发送标量数据的连接数。 +正在向远程服务器发送标量数据的连接数。 ### StorageBufferBytes {#storagebufferbytes} -Buffer 表缓冲区中的字节数。 +Buffer 表缓冲区中存储的字节数 ### StorageBufferRows {#storagebufferrows} -Buffer 表缓冲区中的行数。 +Buffer 表缓冲区中的行数 ### StorageDistributedThreads {#storagedistributedthreads} -StorageDistributed 线程池中的线程数。 +StorageDistributed 线程池中的线程数量。 ### StorageDistributedThreadsActive {#storagedistributedthreadsactive} -在 StorageDistributed 线程池中正在运行任务的线程数。 +正在执行任务的 StorageDistributed 线程池中的线程数量。 ### StorageHiveThreads {#storagehivethreads} @@ -703,98 +687,96 @@ StorageHive 线程池中的线程数。 ### StorageHiveThreadsActive {#storagehivethreadsactive} -在 StorageHive 线程池中正在运行任务的线程数。 +StorageHive 线程池中正在执行任务的线程数。 ### StorageS3Threads {#storages3threads} -StorageS3 线程池中的线程数。 +StorageS3 线程池的线程数量。 ### StorageS3ThreadsActive {#storages3threadsactive} -在 StorageS3 线程池中正在运行任务的线程数。 +StorageS3 线程池中当前正在执行任务的线程数量。 ### SystemReplicasThreads {#systemreplicasthreads} -system.replicas 线程池中的线程数。 +`system.replicas` 线程池中的线程数。 ### SystemReplicasThreadsActive {#systemreplicasthreadsactive} -在 system.replicas 线程池中正在运行任务的线程数。 +`system.replicas` 线程池中正在运行任务的线程数量。 ### TCPConnection {#tcpconnection} -到 TCP 服务器的连接数(使用原生接口的客户端),还包括服务器之间用于分布式查询的连接。 +到 TCP 服务器的连接数(使用原生接口的客户端),也包括服务器之间的分布式查询连接 ### TablesToDropQueueSize {#tablestodropqueuesize} -已被删除但正在等待后台数据清理的表的数量。 +已删除但仍在等待后台删除其数据的表的数量。 ### TemporaryFilesForAggregation {#temporaryfilesforaggregation} -为外部聚合创建的临时文件数量。 +外部聚合过程中创建的临时文件数量 ### TemporaryFilesForJoin {#temporaryfilesforjoin} -为 JOIN 创建的临时文件数量。 +在 JOIN 过程中创建的临时文件数量 ### TemporaryFilesForSort {#temporaryfilesforsort} -为外部排序创建的临时文件数量。 +外部排序过程中创建的临时文件数量 ### TemporaryFilesUnknown {#temporaryfilesunknown} -为未知用途创建的临时文件数量。 +用途不明的临时文件数量 ### ThreadPoolFSReaderThreads {#threadpoolfsreaderthreads} -用于 local_filesystem_read_method=threadpool 的线程池中的线程数。 +线程池中用于 `local_filesystem_read_method=threadpool` 的线程数量。 ### ThreadPoolFSReaderThreadsActive {#threadpoolfsreaderthreadsactive} -用于 local_filesystem_read_method=threadpool 的线程池中正在运行任务的线程数。 +`local_filesystem_read_method=threadpool` 的线程池中正在执行任务的线程数量。 ### ThreadPoolRemoteFSReaderThreads {#threadpoolremotefsreaderthreads} -用于 remote_filesystem_read_method=threadpool 的线程池中的线程数。 +`remote_filesystem_read_method=threadpool` 所使用的线程池中的线程数量。 ### ThreadPoolRemoteFSReaderThreadsActive {#threadpoolremotefsreaderthreadsactive} -用于 remote_filesystem_read_method=threadpool 的线程池中正在运行任务的线程数。 +在 `remote_filesystem_read_method=threadpool` 模式下线程池中正在执行任务的线程数。 ### ThreadsInOvercommitTracker {#threadsinovercommittracker} -在 OvercommitTracker 内处于等待状态的线程数。 +在 OvercommitTracker 中等待的线程数 ### TotalTemporaryFiles {#totaltemporaryfiles} -创建的临时文件总数。 +已创建的临时文件数量 ### VersionInteger {#versioninteger} -以 base-1000 的单个整数形式表示的服务器版本。例如,版本 11.22.33 被转换为 11022033。 +以 1000 进制表示的服务器版本号,使用单个整数值。例如,版本 11.22.33 会被转换为 11022033。 ### Write {#write} -正在执行的写入(write、pwrite、io_getevents 等)系统调用数量。 +处于进行中的 write(write、pwrite、io_getevents 等)系统调用数量 ### ZooKeeperRequest {#zookeeperrequest} -正在执行的对 ZooKeeper 的请求数量。 +当前正在处理的 ZooKeeper 请求数量。 ### ZooKeeperSession {#zookeepersession} -到 ZooKeeper 的会话(连接)数量。不应超过一个,因为使用多个到 ZooKeeper 的连接可能会由于 ZooKeeper 一致性模型允许缺乏线性化(过期读取)而导致错误。 +到 ZooKeeper 的会话(连接)数量。不应超过一个,因为使用多个到 ZooKeeper 的连接可能会由于缺乏线性一致性(可能出现陈旧读),这是 ZooKeeper 一致性模型所允许的,而导致错误。 ### ZooKeeperWatch {#zookeeperwatch} -在 ZooKeeper 中的 watch(事件订阅)数量。 +ZooKeeper 中的 watch(事件订阅)总数。 ### ConcurrencyControlAcquired {#concurrencycontrolacquired} 已获取的 CPU 槽位总数。 - - ### ConcurrencyControlSoftLimit {#concurrencycontrolsoftlimit} CPU 插槽数量的软限制值。 @@ -802,6 +784,6 @@ CPU 插槽数量的软限制值。 **另请参阅** - [system.asynchronous_metrics](/operations/system-tables/asynchronous_metrics) — 包含周期性计算的指标。 -- [system.events](/operations/system-tables/events) — 包含已发生事件的计数信息。 +- [system.events](/operations/system-tables/events) — 包含已发生的各类事件。 - [system.metric_log](/operations/system-tables/metric_log) — 包含来自 `system.metrics` 和 `system.events` 表的指标值历史记录。 -- [Monitoring](../../operations/monitoring.md) — ClickHouse 监控的基本概念。 +- [Monitoring](../../operations/monitoring.md) — ClickHouse 监控的基本概念。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/moves.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/moves.md index f1fe84a82d6..b40799da5a1 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/moves.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/moves.md @@ -1,30 +1,19 @@ --- -description: '包含 MergeTree 表中正在进行的数据部件移动信息的系统表。每次数据部件移动对应一行记录。' -keywords: ['system table', 'moves'] +description: '包含有关 MergeTree 表中正在进行的数据分片迁移的信息的 system 表。每个数据分片的移动对应一行记录。' +keywords: ['system 表', '移动'] slug: /operations/system-tables/moves title: 'system.moves' doc_type: 'reference' --- - - # system.moves -该表包含 [MergeTree](/engines/table-engines/mergetree-family/mergetree.md) 表中正在进行的 [数据部分移动](/sql-reference/statements/alter/partition#move-partitionpart) 的相关信息。每个数据部分移动对应一行记录。 +该表包含 [MergeTree](/engines/table-engines/mergetree-family/mergetree.md) 表中正在进行的 [数据分片移动](/sql-reference/statements/alter/partition#move-partitionpart) 的信息。每个数据分片移动对应一行。 列: {/*AUTOGENERATED_START*/ } -* `database` ([String](../../sql-reference/data-types/)) — 数据库名称。 -* `table` ([String](../../sql-reference/data-types/)) — 包含正在迁移的数据分片的表名称。 -* `elapsed` ([Float64](../../sql-reference/data-types/)) — 从数据分片开始移动起已经经过的时间(秒)。 -* `target_disk_name` ([String](../../sql-reference/data-types/)) — 数据分片的目标磁盘名称。 -* `target_disk_path` ([String](../../sql-reference/data-types/)) — 磁盘在文件系统中的挂载点路径。 -* `part_name` ([String](../../sql-reference/data-types/)) — 正在移动的数据分片名称。 -* `part_size` ([UInt64](../../sql-reference/data-types/)) — 数据分片大小。 -* `thread_id` ([UInt64](../../sql-reference/data-types/)) — 执行移动操作的线程标识符。 - {/*AUTOGENERATED_END*/ } **示例** @@ -42,5 +31,5 @@ SELECT * FROM system.moves **另请参阅** * [MergeTree](/engines/table-engines/mergetree-family/mergetree.md) 表引擎 -* [用于数据存储的多个块设备](/engines/table-engines/mergetree-family/mergetree#table_engine-mergetree-multiple-volumes) +* [在数据存储中使用多个块设备](/engines/table-engines/mergetree-family/mergetree#table_engine-mergetree-multiple-volumes) * [ALTER TABLE ... MOVE PART](/sql-reference/statements/alter/partition#move-partitionpart) 命令 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/mutations.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/mutations.md index c4e8163bdff..d1da8e4d495 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/mutations.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/mutations.md @@ -1,54 +1,50 @@ --- -description: '包含 MergeTree 表变更(mutation)及其进度信息的系统表。每条变更命令对应一行。' -keywords: ['system table', 'mutations'] +description: '包含 MergeTree 表变更及其执行进度信息的系统表。每条变更命令对应一行记录。' +keywords: ['系统表', '变更'] slug: /operations/system-tables/mutations title: 'system.mutations' doc_type: 'reference' --- - - # system.mutations -该表包含 [MergeTree](/engines/table-engines/mergetree-family/mergetree.md) 表的[变更](/sql-reference/statements/alter/index.md#mutations)及其执行进度的信息。每条变更命令在该表中对应一行记录。 - +该表包含 [MergeTree](/engines/table-engines/mergetree-family/mergetree.md) 表的 [变更(mutation)](/sql-reference/statements/alter/index.md#mutations) 及其执行进度的相关信息。每条变更命令在表中对应一行记录。 - -## 列 {#columns} +## 列:\{#columns\} - `database` ([String](/sql-reference/data-types/string.md)) — 应用变更操作的数据库名称。 - `table` ([String](/sql-reference/data-types/string.md)) — 应用变更操作的表名称。 -- `mutation_id` ([String](/sql-reference/data-types/string.md)) — 变更操作的 ID。对于复制表,这些 ID 对应于 ClickHouse Keeper 中 `/mutations/` 目录下的 znode 名称。对于非复制表,这些 ID 对应于表数据目录中的文件名。 -- `command` ([String](/sql-reference/data-types/string.md)) — 变更命令字符串(`ALTER TABLE [db.]table` 之后的查询部分)。 -- `create_time` ([DateTime](/sql-reference/data-types/datetime.md)) — 提交变更命令执行的日期和时间。 -- `block_numbers.partition_id` ([Array](/sql-reference/data-types/array.md)([String](/sql-reference/data-types/string.md))) — 对于复制表的变更操作,该数组包含分区的 ID(每个分区一条记录)。对于非复制表的变更操作,该数组为空。 -- `block_numbers.number` ([Array](/sql-reference/data-types/array.md)([Int64](/sql-reference/data-types/int-uint.md))) — 对于复制表的变更操作,该数组为每个分区包含一条记录,其中包含变更操作获取的块编号。分区中只有包含编号小于此编号的块的数据部分才会被变更。在非复制表中,所有分区的块编号形成单一序列。这意味着对于非复制表的变更操作,该列将包含一条记录,其中包含变更操作获取的单个块编号。 -- `parts_to_do_names` ([Array](/sql-reference/data-types/array.md)([String](/sql-reference/data-types/string.md))) — 需要变更才能完成变更操作的数据部分名称数组。 -- `parts_to_do` ([Int64](/sql-reference/data-types/int-uint.md)) — 需要变更才能完成变更操作的数据部分数量。 +- `mutation_id` ([String](/sql-reference/data-types/string.md)) — 变更操作的 ID。对于复制表,这些 ID 对应于 ClickHouse Keeper 中 `/mutations/` 目录下的 znode 名称。对于非复制表,这些 ID 对应于该表数据目录中的文件名。 +- `command` ([String](/sql-reference/data-types/string.md)) — 变更命令字符串(查询中 `ALTER TABLE [db.]table` 之后的部分)。 +- `create_time` ([DateTime](/sql-reference/data-types/datetime.md)) — 提交变更命令进行执行的日期和时间。 +- `block_numbers.partition_id` ([Array](/sql-reference/data-types/array.md)([String](/sql-reference/data-types/string.md))) — 对于复制表的变更,此数组包含各分区的 ID(每个分区一条记录)。对于非复制表的变更,此数组为空。 +- `block_numbers.number` ([Array](/sql-reference/data-types/array.md)([Int64](/sql-reference/data-types/int-uint.md))) — 对于复制表的变更,此数组对每个分区包含一条记录,其中为该变更获取到的块号。在该分区中,仅包含块号小于该值的块的数据部分会被变更。在非复制表中,所有分区的块号构成一个单一序列。这意味着对于非复制表的变更,该列只会包含一条记录,其中为该变更获取到的单个块号。 +- `parts_in_progress_names` ([Array](/sql-reference/data-types/array.md)([String](/sql-reference/data-types/string.md))) — 正在被变更的数据部分名称数组。 +- `parts_to_do_names` ([Array](/sql-reference/data-types/array.md)([String](/sql-reference/data-types/string.md))) — 为完成该变更仍需变更的数据部分名称数组。 +- `parts_to_do` ([Int64](/sql-reference/data-types/int-uint.md)) — 为完成该变更仍需变更的数据部分数量。 - `is_killed` ([UInt8](/sql-reference/data-types/int-uint.md)) — 指示变更操作是否已被终止。**仅在 ClickHouse Cloud 中可用。** -:::note -`is_killed=1` 并不一定意味着变更操作已完全结束。变更操作可能会在较长时间内保持 `is_killed=1` 和 `is_done=0` 的状态。如果另一个长时间运行的变更操作阻塞了已终止的变更操作,就会发生这种情况。这是正常情况。 +:::note +`is_killed=1` 并不一定意味着变更已完全结束。变更有可能在较长时间内保持 `is_killed=1` 且 `is_done=0` 的状态。如果有另一个长时间运行的变更阻塞了已终止的变更,就可能出现这种情况。这属于正常情况。 ::: -- `is_done` ([UInt8](/sql-reference/data-types/int-uint.md)) — 指示变更操作是否完成的标志。可能的值: - - `1` 表示变更操作已完成, - - `0` 表示变更操作仍在进行中。 +- `is_done` ([UInt8](/sql-reference/data-types/int-uint.md)) — 指示变更操作是否已完成的标志。可能的取值: + - `1` 表示变更已完成, + - `0` 表示变更仍在进行中。 :::note -即使 `parts_to_do = 0`,复制表的变更操作也可能尚未完成,因为长时间运行的 `INSERT` 查询会创建需要变更的新数据部分。 +即使 `parts_to_do = 0`,对于复制表的变更,也有可能尚未完成,这是因为可能存在一个长时间运行的 `INSERT` 查询,它将创建一个新的、需要被变更的数据部分。 ::: -如果在变更某些数据部分时出现问题,以下列包含附加信息: +如果在变更某些数据部分时出现问题,下列列会包含附加信息: -- `latest_failed_part` ([String](/sql-reference/data-types/string.md)) — 无法变更的最新数据部分的名称。 +- `latest_failed_part` ([String](/sql-reference/data-types/string.md)) — 最近一次无法被变更的数据部分名称。 - `latest_fail_time` ([DateTime](/sql-reference/data-types/datetime.md)) — 最近一次数据部分变更失败的日期和时间。 - `latest_fail_reason` ([String](/sql-reference/data-types/string.md)) — 导致最近一次数据部分变更失败的异常消息。 +## 监控变更(Mutations) -## 监控 Mutation {#monitoring-mutations} - -要跟踪 `system.mutations` 表中的进度,请使用以下查询: +要跟踪 `system.mutations` 表中的执行进度,请使用以下查询: ```sql SELECT * FROM clusterAllReplicas('cluster_name', 'system', 'mutations') @@ -60,14 +56,14 @@ SELECT * FROM clusterAllReplicas('cluster_name', 'system.mutations') WHERE is_done = 0 AND table = 'tmp'; ``` -注意:这需要对 `system.*` 表具有读取权限。 +注意:这需要对 `system.*` 表具有读取权限。 -:::tip Cloud 使用说明 -在 ClickHouse Cloud 中,每个节点上的 `system.mutations` 表都包含集群中的所有 mutation,因此无需使用 `clusterAllReplicas`。 +:::tip 云环境使用说明 +在 ClickHouse Cloud 中,每个节点上的 `system.mutations` 表都包含集群中的所有 mutation,因此不需要使用 `clusterAllReplicas`。 ::: **另请参阅** -- [Mutation](/sql-reference/statements/alter/index.md#mutations) -- [MergeTree](/engines/table-engines/mergetree-family/mergetree.md) 表引擎 -- [ReplicatedMergeTree](/engines/table-engines/mergetree-family/replication.md) 系列 +* [Mutations](/sql-reference/statements/alter/index.md#mutations) +* [MergeTree](/engines/table-engines/mergetree-family/mergetree.md) 表引擎 +* [ReplicatedMergeTree](/engines/table-engines/mergetree-family/replication.md) 系列表引擎 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/processes.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/processes.md index 4f2dc7d87ed..b7f92478e09 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/processes.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/processes.md @@ -11,59 +11,14 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; # system.processes - + -该系统表用于实现 `SHOW PROCESSLIST` 查询。 +此系统表用于实现 `SHOW PROCESSLIST` 查询。 列: - - {/*AUTOGENERATED_START*/ } -* `is_initial_query` ([UInt8](../../sql-reference/data-types/)) — 指示该查询是直接来自用户,还是在分布式查询执行过程中由 ClickHouse 服务器发起。 -* `user` ([String](../../sql-reference/data-types/)) — 发出该查询的用户。请注意,在分布式处理场景下,查询会以默认用户身份发送到远程服务器。该字段包含的是此特定查询的用户名,而不是由此查询所发起的其他查询的用户名。 -* `query_id` ([String](../../sql-reference/data-types/)) — 查询 ID(如果已定义)。 -* `address` ([IPv6](../../sql-reference/data-types/)) — 发出该查询的 IP 地址。在分布式处理时也是该地址。要跟踪分布式查询最初是从哪里发出的,请查看查询请求方服务器上的 system.processes。 -* `port` ([UInt16](../../sql-reference/data-types/)) — 执行查询的客户端所使用的端口。 -* `initial_user` ([String](../../sql-reference/data-types/)) — 执行初始查询的用户名称(用于分布式查询执行)。 -* `initial_query_id` ([String](../../sql-reference/data-types/)) — 初始查询 ID(用于分布式查询执行)。 -* `initial_address` ([IPv6](../../sql-reference/data-types/)) — 父查询的发起 IP 地址。 -* `initial_port` ([UInt16](../../sql-reference/data-types/)) — 发起父查询时客户端使用的端口。 -* `interface` ([UInt8](../../sql-reference/data-types/)) — 用于发送查询的接口类型。TCP = 1,HTTP = 2,GRPC = 3,MYSQL = 4,POSTGRESQL = 5,LOCAL = 6,TCP_INTERSERVER = 7。 -* `os_user` ([String](../../sql-reference/data-types/)) — 在操作系统中运行 clickhouse-client 的用户名。 -* `client_hostname` ([String](../../sql-reference/data-types/)) — 运行 clickhouse-client 或其他 TCP 客户端的客户端所在机器的主机名。 -* `client_name` ([String](../../sql-reference/data-types/)) — clickhouse-client 或其他 TCP 客户端的名称。 -* `client_revision` ([UInt64](../../sql-reference/data-types/)) — clickhouse-client 或其他 TCP 客户端的修订号。 -* `client_version_major` ([UInt64](../../sql-reference/data-types/)) — clickhouse-client 或其他 TCP 客户端的主版本号。 -* `client_version_minor` ([UInt64](../../sql-reference/data-types/)) — clickhouse-client 或其他 TCP 客户端的次版本号。 -* `client_version_patch` ([UInt64](../../sql-reference/data-types/)) — ClickHouse 客户端(clickhouse-client)或其他 TCP 客户端版本的补丁号部分。 -* `http_method` ([UInt8](../../sql-reference/data-types/)) — 发起查询的 HTTP 方法。可能的取值:0 — 查询是从 TCP 接口发起的。1 — 使用 GET 方法。2 — 使用 POST 方法。 -* `http_user_agent` ([String](../../sql-reference/data-types/)) — 在 HTTP 查询中传递的 HTTP 请求头 `User-Agent`。 -* `http_referer` ([String](../../sql-reference/data-types/)) — 在 HTTP 请求中传递的 Referer HTTP 头(包含发出该请求的页面的完整或部分地址)。 -* `forwarded_for` ([String](../../sql-reference/data-types/)) — HTTP 请求中传递的 HTTP 头部字段 X-Forwarded-For。 -* `quota_key` ([String](../../sql-reference/data-types/)) — 在配额设置中指定的配额键(参见 `keyed`)。 -* `distributed_depth` ([UInt64](../../sql-reference/data-types/)) — 查询在服务器各节点之间内部重传的次数。 -* `elapsed` ([Float64](../../sql-reference/data-types/)) — 从请求开始执行起经过的时间,单位为秒。 -* `is_cancelled` ([UInt8](../../sql-reference/data-types/)) — 查询是否已被取消。 -* `is_all_data_sent` ([UInt8](../../sql-reference/data-types/)) — 是否已将所有数据发送给客户端(即查询已在服务器端完成)。 -* `read_rows` ([UInt64](../../sql-reference/data-types/)) — 从表中读取的行数。对于分布式处理,在发起请求的服务器上,该值是所有远程服务器的总和。 -* `read_bytes` ([UInt64](../../sql-reference/data-types/)) — 从表中读取的未压缩字节数。对于分布式处理,在发起请求的服务器上,此值是所有远程服务器的总和。 -* `total_rows_approx` ([UInt64](../../sql-reference/data-types/)) — 需要读取的行数的近似总数。对于分布式处理,在请求端服务器上,该值表示所有远程服务器的总和。在请求处理过程中,当发现新的待处理数据源时,该值可能会被更新。 -* `written_rows` ([UInt64](../../sql-reference/data-types/)) — 写入到存储的行数。 -* `written_bytes` ([UInt64](../../sql-reference/data-types/)) — 写入存储的字节数。 -* `memory_usage` ([Int64](../../sql-reference/data-types/)) — 查询使用的 RAM 内存量。可能不包括某些类型的专用内存 -* `peak_memory_usage` ([Int64](../../sql-reference/data-types/)) — 当前内存使用量的峰值。 -* `query` ([String](../../sql-reference/data-types/)) — 查询语句文本。对于 INSERT 语句,不包括要插入的数据。 -* `normalized_query_hash` ([UInt64](../../sql-reference/data-types/)) — 一个数值型哈希值,对于仅在字面量取值上不同的查询,该值是相同的。 -* `query_kind` ([String](../../sql-reference/data-types/)) — 查询类型,如 SELECT、INSERT 等。 -* `thread_ids` ([Array(UInt64)](../../sql-reference/data-types/)) — 所有参与此查询的线程的标识符列表。 -* `peak_threads_usage` ([UInt64](../../sql-reference/data-types/)) — 执行该查询时并发线程的最大数量。 -* `ProfileEvents`([Map(String, UInt64)](../../sql-reference/data-types/))— 此查询对应的 ProfileEvents 统计信息。 -* `Settings` ([Map(String, String)](../../sql-reference/data-types/)) — 已修改的用户级别设置列表。 -* `current_database` ([String](../../sql-reference/data-types/)) — 当前数据库的名称。 -* `is_internal` ([UInt8](../../sql-reference/data-types/)) — 表示该查询是否为内部执行的辅助查询。` - {/*AUTOGENERATED_END*/ } ```sql @@ -71,7 +26,7 @@ SELECT * FROM system.processes LIMIT 10 FORMAT Vertical; ``` ```response -第 1 行: +第 1 行: ────── is_initial_query: 1 user: default @@ -108,5 +63,5 @@ thread_ids: [67] ProfileEvents: {'Query':1,'SelectQuery':1,'ReadCompressedBytes':36,'CompressedReadBufferBlocks':1,'CompressedReadBufferBytes':10,'IOBufferAllocs':1,'IOBufferAllocBytes':89,'ContextLock':15,'RWLockAcquiredReadLocks':1} Settings: {'background_pool_size':'32','load_balancing':'random','allow_suspicious_low_cardinality_types':'1','distributed_aggregation_memory_efficient':'1','skip_unavailable_shards':'1','log_queries':'1','max_bytes_before_external_group_by':'20000000000','max_bytes_before_external_sort':'20000000000','allow_introspection_functions':'1'} -共有 1 行。耗时:0.002 秒。 +结果集包含 1 行。用时:0.002 秒。 ``` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/projection_parts.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/projection_parts.md index 4db3df184bc..d9e3d60387d 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/projection_parts.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/projection_parts.md @@ -1,84 +1,17 @@ --- description: '包含 MergeTree 系列表投影部件信息的系统表。' -keywords: ['系统表', 'projection_parts'] +keywords: ['system table', 'projection_parts'] slug: /operations/system-tables/projection_parts title: 'system.projection_parts' doc_type: 'reference' --- - - # system.projection_parts -此表包含 MergeTree 系列引擎表的投影部件信息。 - - - -## 列 {#columns} - +此表包含 MergeTree 系列表的投影数据片段信息。 +## 列 {/*AUTOGENERATED_START*/ } -* `partition` ([String](../../sql-reference/data-types/)) — 分区名称。 -* `name` ([String](../../sql-reference/data-types/)) — 数据部分的名称。 -* `part_type` ([String](../../sql-reference/data-types/)) — 数据 part 的存储格式。可能的取值为:Wide(每列一个文件)和 Compact(所有列共用一个文件)。 -* `parent_name` ([String](../../sql-reference/data-types/)) — 源(父)数据部分的名称。 -* `parent_uuid` ([UUID](../../sql-reference/data-types/)) — 源(父)数据分片的 UUID。` -* `parent_part_type` ([String](../../sql-reference/data-types/)) — 源(父)数据部分所使用的存储格式。 -* `active` ([UInt8](../../sql-reference/data-types/)) — 标志,用于指示该数据片段是否处于活动状态。若数据片段为活动状态,则会被表实际使用;否则即将被删除。非活动数据片段会在执行合并和变更操作后出现。 -* `marks` ([UInt64](../../sql-reference/data-types/)) — 标记数量。要估算某个数据部分中的行数,将标记数量乘以索引粒度(通常为 8192)(对于自适应粒度,此提示不适用)。 -* `rows` ([UInt64](../../sql-reference/data-types/)) — 行数。 -* `bytes_on_disk` ([UInt64](../../sql-reference/data-types/)) — 所有数据部分文件的总大小(字节)。 -* `data_compressed_bytes` ([UInt64](../../sql-reference/data-types/)) — 数据部分中压缩数据的总大小。不包括辅助文件(例如标记文件)。 -* `data_uncompressed_bytes` ([UInt64](../../sql-reference/data-types/)) — 数据分片中未压缩数据的总大小。不包括所有辅助文件(例如标记文件)。 -* `marks_bytes` ([UInt64](../../sql-reference/data-types/)) — 标记文件的字节大小。 -* `parent_marks` ([UInt64](../../sql-reference/data-types/)) — 源(父)分片中的标记数量。 -* `parent_rows` ([UInt64](../../sql-reference/data-types/)) — 源(父)数据部分中的行数。 -* `parent_bytes_on_disk` ([UInt64](../../sql-reference/data-types/)) — 所有源(父)数据分片文件以字节计的总大小。 -* `parent_data_compressed_bytes` ([UInt64](../../sql-reference/data-types/)) — 源(父)数据部分中压缩数据的总大小。 -* `parent_data_uncompressed_bytes` ([UInt64](../../sql-reference/data-types/)) — 源(父)数据部分中未压缩数据的总大小。 -* `parent_marks_bytes` ([UInt64](../../sql-reference/data-types/)) — 源(父)数据部分中标记文件的大小。 -* `modification_time` ([DateTime](../../sql-reference/data-types/)) — 存放该数据部分的目录的修改时间。通常对应于该数据部分的创建时间。 -* `remove_time` ([DateTime](../../sql-reference/data-types/)) — 数据部分变为非活动状态的时间。 -* `refcount` ([UInt32](../../sql-reference/data-types/)) — 该数据部分被引用的次数。大于 2 的值表示该数据部分正被查询或合并操作使用。 -* `min_date`([Date](../../sql-reference/data-types/))— 数据部分中日期键的最小值。 -* `max_date` ([Date](../../sql-reference/data-types/)) — 数据部分中日期键的最大值。 -* `min_time` ([DateTime](../../sql-reference/data-types/)) — 数据部分中日期时间键的最小值。 -* `max_time`([DateTime](../../sql-reference/data-types/)) — 数据分片中日期和时间键的最大值。 -* `partition_id` ([String](../../sql-reference/data-types/)) — 分区 ID。 -* `min_block_number` ([Int64](../../sql-reference/data-types/)) — 合并生成当前数据部分时所包含的数据分片的最小编号。 -* `max_block_number` ([Int64](../../sql-reference/data-types/)) — 合并后组成当前数据分片的源数据分片数量上限。 -* `level` ([UInt32](../../sql-reference/data-types/)) — 合并树的深度。0 表示当前 part 是通过插入创建的,而不是通过合并其他 part 创建的。 -* `data_version` ([UInt64](../../sql-reference/data-types/)) — 用于确定应对数据部分应用哪些变更操作的数值(会应用版本号高于 data_version 的变更)。 -* `primary_key_bytes_in_memory` ([UInt64](../../sql-reference/data-types/)) — 主键值在内存中占用的字节数。 -* `primary_key_bytes_in_memory_allocated` ([UInt64](../../sql-reference/data-types/)) — 为主键值保留的内存(以字节计)。 -* `is_frozen` ([UInt8](../../sql-reference/data-types/)) — 指示分区数据备份是否存在的标志。1 表示备份存在,0 表示备份不存在。 -* `database` ([String](../../sql-reference/data-types/)) — 数据库名称。 -* `table` ([String](../../sql-reference/data-types/)) — 表名。 -* `engine` ([String](../../sql-reference/data-types/)) — 表引擎的名称(不含参数)。 -* `disk_name` ([String](../../sql-reference/data-types/)) — 存储该数据部分的数据盘名称。 -* `path` ([String](../../sql-reference/data-types/)) — 数据部件文件所在目录的绝对路径。 -* `hash_of_all_files` ([String](../../sql-reference/data-types/)) — 压缩后文件的 sipHash128 值。 -* `hash_of_uncompressed_files` ([String](../../sql-reference/data-types/)) — 未压缩文件(带标记的文件、索引文件等)的 sipHash128 哈希值。 -* `uncompressed_hash_of_compressed_files` ([String](../../sql-reference/data-types/)) — 将压缩文件内容视为未压缩数据时计算得到的 sipHash128 哈希值。 -* `delete_ttl_info_min` ([DateTime](../../sql-reference/data-types/)) — TTL DELETE 规则中日期时间键的最小值。 -* `delete_ttl_info_max` ([DateTime](../../sql-reference/data-types/)) — TTL DELETE 规则中日期和时间键的最大值。 -* `move_ttl_info.expression` ([Array(String)](../../sql-reference/data-types/)) — 由表达式组成的数组。每个表达式定义一个 TTL MOVE 规则。 -* `move_ttl_info.min` ([Array(DateTime)](../../sql-reference/data-types/)) — 日期和时间值的数组。每个元素表示某条 TTL MOVE 规则对应的键的最小值。 -* `move_ttl_info.max` ([Array(DateTime)](../../sql-reference/data-types/)) — 日期和时间值的数组。每个元素表示某个 TTL MOVE 规则的最大键值。 -* `default_compression_codec` ([String](../../sql-reference/data-types/)) — 用于压缩该数据部分的编解码器名称(在列未显式指定编解码器时使用)。 -* `recompression_ttl_info.expression` ([Array(String)](../../sql-reference/data-types/)) — TTL 表达式。 -* `recompression_ttl_info.min` ([Array(DateTime)](../../sql-reference/data-types/)) — 在该分片中计算得到的 TTL 表达式的最小值。用于判断是否至少存在一行 TTL 已过期的记录。 -* `recompression_ttl_info.max` ([Array(DateTime)](../../sql-reference/data-types/)) — 此数据分片中计算得到的 TTL 表达式的最大值。用于判断是否已包含所有 TTL 已过期的行。 -* `group_by_ttl_info.expression` ([Array(String)](../../sql-reference/data-types/)) — TTL 表达式。 -* `group_by_ttl_info.min` ([Array(DateTime)](../../sql-reference/data-types/)) — 此数据片段内计算得到的 TTL 表达式的最小值。用于判断是否至少存在一行已过期 TTL 的数据。 -* `group_by_ttl_info.max` ([Array(DateTime)](../../sql-reference/data-types/)) — 此数据部分中计算得到的 TTL 表达式的最大值。用于判断是否已包含所有 TTL 已过期的行。 -* `rows_where_ttl_info.expression`([Array(String)](../../sql-reference/data-types/)) — TTL 表达式。 -* `rows_where_ttl_info.min` ([Array(DateTime)](../../sql-reference/data-types/)) — 此数据部分中计算得到的 TTL 表达式的最小值。用于判断是否存在至少一行已过期 TTL 的记录。 -* `rows_where_ttl_info.max` ([Array(DateTime)](../../sql-reference/data-types/)) — 此数据片段中计算得到的 TTL 表达式的最大值。用于判断是否已包含所有 TTL 已过期的行。 -* `is_broken` ([UInt8](../../sql-reference/data-types/)) — 投影分片是否损坏 -* `exception_code` ([Int32](../../sql-reference/data-types/)) — 说明投影部件损坏状态的异常消息 -* `exception` ([String](../../sql-reference/data-types/)) — 用于说明投影部件损坏状态的异常代码 - {/*AUTOGENERATED_END*/ } diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/projection_parts_columns.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/projection_parts_columns.md index f567eb49307..cb9c97655d8 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/projection_parts_columns.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/projection_parts_columns.md @@ -1,72 +1,17 @@ --- -description: '包含 MergeTree 系列表投影部件列信息的系统表' -keywords: ['system 表', 'projection_parts_columns'] +description: '包含 MergeTree 家族表的投影数据片段中列信息的系统表' +keywords: ['系统表', 'projection_parts_columns'] slug: /operations/system-tables/projection_parts_columns title: 'system.projection_parts_columns' doc_type: 'reference' --- - - # system.projection_parts_columns -此表包含 MergeTree 系列表中投影部件的列信息。 - - - -## 列 {#columns} - +此表包含 MergeTree 系列表的投影部件中各列的信息。 +## 列 {/*AUTOGENERATED_START*/ } -* `partition` ([String](../../sql-reference/data-types/)) — 分区名称。 -* `name` ([String](../../sql-reference/data-types/)) — 数据部分的名称。 -* `part_type` ([String](../../sql-reference/data-types/)) — 数据分片所使用的存储格式。 -* `parent_name` ([String](../../sql-reference/data-types/)) — 源(父)数据分片的名称。 -* `parent_uuid` ([UUID](../../sql-reference/data-types/)) — 源(父)数据部件的 UUID。 -* `parent_part_type` ([String](../../sql-reference/data-types/)) — 源(父)数据部件的存储格式。 -* `active` ([UInt8](../../sql-reference/data-types/)) — 用于指示数据部分是否处于活动状态的标志 -* `marks` ([UInt64](../../sql-reference/data-types/)) — 标记数。 -* `rows` ([UInt64](../../sql-reference/data-types/)) — 行数。 -* `bytes_on_disk` ([UInt64](../../sql-reference/data-types/)) — 所有数据片段文件的总大小(字节)。 -* `data_compressed_bytes` ([UInt64](../../sql-reference/data-types/)) — 数据部分中压缩数据的总大小。不包括所有辅助文件(例如标记文件)。 -* `data_uncompressed_bytes`([UInt64](../../sql-reference/data-types/))— 数据部件中未压缩数据的总大小。不包括所有辅助文件(例如标记文件)。 -* `marks_bytes` ([UInt64](../../sql-reference/data-types/)) — 标记文件的大小。 -* `parent_marks` ([UInt64](../../sql-reference/data-types/)) — 源(父)数据部分中的标记数量。 -* `parent_rows` ([UInt64](../../sql-reference/data-types/)) — 源(父)分片中的行数。 -* `parent_bytes_on_disk` ([UInt64](../../sql-reference/data-types/)) — 所有源(父)数据部分文件的总大小(字节)。 -* `parent_data_compressed_bytes` ([UInt64](../../sql-reference/data-types/)) — 源(父)数据部分中压缩数据的总大小。 -* `parent_data_uncompressed_bytes` ([UInt64](../../sql-reference/data-types/)) — 源(父)数据片段中未压缩数据的总大小。 -* `parent_marks_bytes` ([UInt64](../../sql-reference/data-types/)) — 源(父)数据部分中标记文件的大小。 -* `modification_time` ([DateTime](../../sql-reference/data-types/)) — 包含该数据部分的目录的修改时间。通常对应于该数据部分的创建时间。 -* `remove_time` ([DateTime](../../sql-reference/data-types/)) — 数据部分变为非活动状态的时间。 -* `refcount` ([UInt32](../../sql-reference/data-types/)) — 该数据部分被引用的次数。大于 2 的值表示该数据部分正在被查询或合并操作使用。 -* `min_date` ([Date](../../sql-reference/data-types/)) — 如果分区键中包含 Date 列,则为该列的最小日期值。 -* `max_date` ([Date](../../sql-reference/data-types/)) — 如果该列包含在分区键中,则为该 Date 列的最大值。 -* `min_time` ([DateTime](../../sql-reference/data-types/)) — 如果分区键中包含该列,则为该 DateTime 列的最小值。 -* `max_time` ([DateTime](../../sql-reference/data-types/)) — 如果该 DateTime 列包含在分区键中,则表示其最大值。 -* `partition_id` ([String](../../sql-reference/data-types/)) — 分区 ID。 -* `min_block_number` ([Int64](../../sql-reference/data-types/)) — 合并后组成当前数据部分的所有数据部分中最小的编号。 -* `max_block_number` ([Int64](../../sql-reference/data-types/)) — 合并后构成当前部分的所有数据部分中的最大编号。 -* `level` ([UInt32](../../sql-reference/data-types/)) — 合并树的深度。0 表示当前数据分片是通过插入创建的,而不是通过合并其他分片创建的。 -* `data_version` ([UInt64](../../sql-reference/data-types/)) — 用于确定应将哪些变更应用于数据分片的数值(会应用版本号高于 `data_version` 的变更)。 -* `primary_key_bytes_in_memory` ([UInt64](../../sql-reference/data-types/)) — 主键值在内存中占用的字节数。 -* `primary_key_bytes_in_memory_allocated` ([UInt64](../../sql-reference/data-types/)) — 用于主键值的已分配内存字节数。 -* `database` ([String](../../sql-reference/data-types/)) — 数据库名称。 -* `table` ([String](../../sql-reference/data-types/)) — 表名。 -* `engine` ([String](../../sql-reference/data-types/)) — 表引擎的名称(不含参数)。 -* `disk_name` ([String](../../sql-reference/data-types/)) — 用于存储该数据部分的磁盘名称。 -* `path` ([String](../../sql-reference/data-types/)) — 指向包含数据分片文件的文件夹的绝对路径。 -* `column` ([String](../../sql-reference/data-types/)) — 列名。 -* `type` ([String](../../sql-reference/data-types/)) — 列的数据类型。 -* `column_position` ([UInt64](../../sql-reference/data-types/)) — 表中列的序号,从 1 开始。 -* `default_kind` ([String](../../sql-reference/data-types/)) — 默认值所使用的表达式类型(DEFAULT、MATERIALIZED、ALIAS),如果未定义则为空字符串。 -* `default_expression` ([String](../../sql-reference/data-types/)) — 默认值表达式;如果未定义,则为空字符串。 -* `column_bytes_on_disk` ([UInt64](../../sql-reference/data-types/)) — 列在磁盘上的总大小(以字节计)。 -* `column_data_compressed_bytes` ([UInt64](../../sql-reference/data-types/)) — 列中压缩数据的总大小,以字节为单位。 -* `column_data_uncompressed_bytes` ([UInt64](../../sql-reference/data-types/)) — 列中解压缩后数据的总大小(以字节为单位)。 -* `column_marks_bytes` ([UInt64](../../sql-reference/data-types/)) — 带标记列的大小,单位为字节。 -* `column_modification_time` ([Nullable(DateTime)](../../sql-reference/data-types/)) — 最后一次修改该列的时间。 - {/*AUTOGENERATED_END*/ } diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/projections.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/projections.md index 0b36bb4039f..627afbe1263 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/projections.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/projections.md @@ -1,28 +1,19 @@ --- -description: '包含所有表中现有投影信息的系统表。' -keywords: ['system table', 'projections'] +description: '包含所有表中已存在投影信息的系统表。' +keywords: ['系统表', '投影'] slug: /operations/system-tables/projections title: 'system.projections' doc_type: 'reference' --- - - # system.projections -包含所有表中现有投影的信息。 +包含所有表中已存在的投影信息。 列: {/*AUTOGENERATED_START*/ } -* `database` ([String](../../sql-reference/data-types/)) — 数据库名称。 -* `table` ([String](../../sql-reference/data-types/)) — 表名。 -* `name` ([String](../../sql-reference/data-types/)) — 投影名称。 -* `type` ([Enum8('Normal' = 0, 'Aggregate' = 1)](../../sql-reference/data-types/)) — 投影类型。 -* `sorting_key` ([Array(String)](../../sql-reference/data-types/)) — 投影排序键。 -* `query` ([String](../../sql-reference/data-types/)) — 投影查询。 - {/*AUTOGENERATED_END*/ } **示例** diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/query_cache.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/query_cache.md index e32899d5674..35f33d03f20 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/query_cache.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/query_cache.md @@ -13,22 +13,12 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -显示[查询缓存](../query-cache.md)的内容。 +显示 [查询缓存](../query-cache.md) 的内容。 列: {/*AUTOGENERATED_START*/ } -* `query` ([String](../../sql-reference/data-types/)) — 查询字符串。 -* `query_id` ([String](../../sql-reference/data-types/)) — 查询的 ID。 -* `result_size` ([UInt64](../../sql-reference/data-types/)) — 查询缓存条目大小。 -* `tag` ([LowCardinality(String)](../../sql-reference/data-types/)) — 查询缓存条目的标签。 -* `stale` ([UInt8](../../sql-reference/data-types/)) — 查询缓存条目是否已失效。 -* `shared` ([UInt8](../../sql-reference/data-types/)) — 查询缓存条目是否在多个用户之间共享。 -* `compressed` ([UInt8](../../sql-reference/data-types/)) — 查询缓存条目是否已压缩。 -* `expires_at` ([DateTime](../../sql-reference/data-types/)) — 查询缓存条目变为失效的时间。 -* `key_hash` ([UInt64](../../sql-reference/data-types/)) — 查询字符串的哈希,用作查找查询缓存条目的键。 - {/*AUTOGENERATED_END*/ } **示例** @@ -38,7 +28,7 @@ SELECT * FROM system.query_cache FORMAT Vertical; ``` ```text -第 1 行: +第 1 行: ────── query: SELECT 1 SETTINGS use_query_cache = 1 query_id: 7c28bbbb-753b-4eba-98b1-efcbe2b9bdf6 @@ -50,5 +40,5 @@ compressed: 1 expires_at: 2023-10-13 13:35:45 key_hash: 12188185624808016954 -共 1 行。耗时:0.004 秒。 +返回 1 行。用时:0.004 秒。 ``` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/query_condition_cache.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/query_condition_cache.md index d56487cde09..c023b420169 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/query_condition_cache.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/query_condition_cache.md @@ -19,13 +19,6 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; {/*AUTOGENERATED_START*/ } -* `table_uuid` ([UUID](../../sql-reference/data-types/)) — 表的 UUID。 -* `part_name` ([String](../../sql-reference/data-types/)) — 数据片段名称。 -* `condition` ([String](../../sql-reference/data-types/)) — 过滤条件的哈希文本。仅在将 query_condition_cache_store_conditions_as_plaintext 设置为 true 时才会设置。 -* `condition_hash` ([UInt64](../../sql-reference/data-types/)) — 过滤条件的哈希值。 -* `entry_size` ([UInt64](../../sql-reference/data-types/)) — 条目的大小(以字节为单位)。 -* `matching_marks` ([String](../../sql-reference/data-types/)) — 匹配的标记。 - {/*AUTOGENERATED_END*/ } **示例** diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/quota_usage.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/quota_usage.md index 35a17c3577a..3d5a58d9608 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/quota_usage.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/quota_usage.md @@ -1,6 +1,6 @@ --- -description: '系统表,包含当前用户配额使用情况的信息,例如已用配额和剩余配额。' -keywords: ['system table', 'quota_usage'] +description: '系统表,包含当前用户配额使用情况的信息,例如已使用多少配额以及剩余多少配额。' +keywords: ['系统表', 'quota_usage'] slug: /operations/system-tables/quota_usage title: 'system.quota_usage' doc_type: 'reference' @@ -10,44 +10,15 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -当前用户的配额使用:已用额度及剩余额度。 - +当前用户的配额使用情况:已用额度及剩余额度。 列: {/*AUTOGENERATED_START*/ } -* `quota_name` ([String](../../sql-reference/data-types/)) — 配额名称。 -* `quota_key` ([String](../../sql-reference/data-types/)) — 键值。 -* `start_time` ([Nullable(DateTime)](../../sql-reference/data-types/)) — 计算资源消耗的开始时间。 -* `end_time` ([Nullable(DateTime)](../../sql-reference/data-types/)) — 计算资源消耗的结束时间。 -* `duration` ([Nullable(UInt32)](../../sql-reference/data-types/)) — 用于计算资源消耗的时间区间长度,单位为秒。 -* `queries` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 当前已执行的查询总数。 -* `max_queries` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 允许执行的所有类型查询的最大数量。 -* `query_selects` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 当前已执行的 SELECT 查询数量。 -* `max_query_selects` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 允许执行的 SELECT 查询的最大数量。 -* `query_inserts` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 当前已执行的 INSERT 查询数量。 -* `max_query_inserts` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 允许执行的 INSERT 查询的最大数量。 -* `errors` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 当前产生错误的查询数量。 -* `max_errors` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 在指定时间段内允许产生错误的查询的最大数量。 -* `result_rows` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 当前时间段内所有查询结果集中的总行数。 -* `max_result_rows` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 在指定时间段内允许的所有查询结果集中的最大总行数。 -* `result_bytes` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 当前时间段内所有查询结果集中的总字节数。 -* `max_result_bytes` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 在指定时间段内允许的所有查询结果集中的最大总字节数。 -* `read_rows` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 当前时间段内执行所有查询时读取的总行数。 -* `max_read_rows` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 在指定时间段内执行所有查询时允许读取的最大行数。 -* `read_bytes` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 当前时间段内执行所有查询时读取的总字节数。 -* `max_read_bytes` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 在指定时间段内执行所有查询时允许读取的最大字节数。 -* `execution_time` ([Nullable(Float64)](../../sql-reference/data-types/)) — 当前时间段内执行查询所花费的总时间(纳秒)。 -* `max_execution_time` ([Nullable(Float64)](../../sql-reference/data-types/)) — 在指定时间段内允许所有查询执行所花费的最大时间(纳秒)。 -* `written_bytes` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 当前时间段内执行所有查询时写入的总字节数。 -* `max_written_bytes` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 在指定时间段内执行所有查询时允许写入的最大字节数。 -* `failed_sequential_authentications` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 当前时间段内连续认证失败的次数。 -* `max_failed_sequential_authentications` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 在指定时间段内允许的连续认证失败的最大次数。 - {/*AUTOGENERATED_END*/ } ## 另请参阅 {#see-also} -- [SHOW QUOTA](/sql-reference/statements/show#show-quota)) +- [SHOW QUOTA](/sql-reference/statements/show#show-quota)) \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/quotas_usage.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/quotas_usage.md index f20ae5f73a3..d8c1dea24b0 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/quotas_usage.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/quotas_usage.md @@ -1,5 +1,5 @@ --- -description: '包含所有用户配额使用情况信息的系统表。' +description: '包含所有用户配额使用情况的系统表。' keywords: ['system table', 'quotas_usage', 'quota'] slug: /operations/system-tables/quotas_usage title: 'system.quotas_usage' @@ -13,44 +13,15 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -所有用户的配额使用情况。 +所有用户的配额使用信息。 列: {/*AUTOGENERATED_START*/ } -* `quota_name` ([String](../../sql-reference/data-types/)) — 配额名称。 -* `quota_key` ([String](../../sql-reference/data-types/)) — 配额键值。 -* `is_current` ([UInt8](../../sql-reference/data-types/)) — 当前用户的配额使用情况。 -* `start_time` ([Nullable(DateTime)](../../sql-reference/data-types/)) — 计算资源消耗的开始时间。 -* `end_time` ([Nullable(DateTime)](../../sql-reference/data-types/)) — 计算资源消耗的结束时间。 -* `duration` ([Nullable(UInt32)](../../sql-reference/data-types/)) — 计算资源消耗的时间区间长度,单位为秒。 -* `queries` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 当前已执行的查询数量。 -* `max_queries` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 允许执行的各类查询的最大数量。 -* `query_selects` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 当前已执行的 `SELECT` 查询数量。 -* `max_query_selects` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 允许执行的 `SELECT` 查询的最大数量。 -* `query_inserts` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 当前已执行的 `INSERT` 查询数量。 -* `max_query_inserts` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 允许执行的 `INSERT` 查询的最大数量。 -* `errors` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 当前产生错误的查询数量。 -* `max_errors` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 在指定时间段内允许产生错误的查询最大数量。 -* `result_rows` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 当前时间段内所有查询结果集中行的总数。 -* `max_result_rows` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 在指定时间段内允许的所有查询结果集中行的最大总数。 -* `result_bytes` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 当前时间段内所有查询结果集的总字节数。 -* `max_result_bytes` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 在指定时间段内允许的所有查询结果集的最大总字节数。 -* `read_rows` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 当前时间段内执行所有查询时读取的行总数。 -* `max_read_rows` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 在指定时间段内允许在执行所有查询时读取的最大行数。 -* `read_bytes` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 当前时间段内执行所有查询时读取的总字节数。 -* `max_read_bytes` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 在指定时间段内允许在执行所有查询时读取的最大字节数。 -* `execution_time` ([Nullable(Float64)](../../sql-reference/data-types/)) — 当前时间段内执行查询所花费的总时间(纳秒)。 -* `max_execution_time` ([Nullable(Float64)](../../sql-reference/data-types/)) — 在指定时间段内允许执行所有查询的最大总时间(纳秒)。 -* `written_bytes` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 当前时间段内执行所有查询时写入的总字节数。 -* `max_written_bytes` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 在指定时间段内允许在执行所有查询时写入的最大字节数。 -* `failed_sequential_authentications` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 当前时间段内连续认证失败的次数。 -* `max_failed_sequential_authentications` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 在指定时间段内允许的连续认证失败最大次数。 - {/*AUTOGENERATED_END*/ } ## 另请参阅 {#see-also} -- [SHOW QUOTA](/sql-reference/statements/show#show-quota)) +- [SHOW QUOTA](/sql-reference/statements/show#show-quota)) \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/replicated_fetches.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/replicated_fetches.md index 383730d58c5..ec5b95f8c6a 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/replicated_fetches.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/replicated_fetches.md @@ -1,6 +1,6 @@ --- -description: '包含当前正在运行的后台拉取任务信息的系统表。' -keywords: ['系统表', 'replicated_fetches'] +description: '包含当前正在运行的后台数据拉取信息的系统表。' +keywords: ['system table', 'replicated_fetches'] slug: /operations/system-tables/replicated_fetches title: 'system.replicated_fetches' doc_type: 'reference' @@ -19,24 +19,7 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; {/*AUTOGENERATED_START*/ } -* `database` ([String](../../sql-reference/data-types/)) — 数据库名称。 -* `table` ([String](../../sql-reference/data-types/)) — 表名。 -* `elapsed` ([Float64](../../sql-reference/data-types/)) — 自开始显示当前正在运行的后台获取任务以来经过的时间(秒)。 -* `progress` ([Float64](../../sql-reference/data-types/)) — 已完成工作的比例,范围为 0 到 1。 -* `result_part_name` ([String](../../sql-reference/data-types/)) — 作为当前正在运行的后台获取任务结果将生成的分片名称。 -* `result_part_path` ([String](../../sql-reference/data-types/)) — 作为当前正在运行的后台获取任务结果将生成的分片的绝对路径。 -* `partition_id` ([String](../../sql-reference/data-types/)) — 分区 ID。 -* `total_size_bytes_compressed` ([UInt64](../../sql-reference/data-types/)) — 结果分片中压缩数据的总大小(字节)。 -* `bytes_read_compressed` ([UInt64](../../sql-reference/data-types/)) — 已从结果分片读取的压缩字节数。 -* `source_replica_path` ([String](../../sql-reference/data-types/)) — 源副本的绝对路径。 -* `source_replica_hostname` ([String](../../sql-reference/data-types/)) — 源副本的主机名。 -* `source_replica_port` ([UInt16](../../sql-reference/data-types/)) — 源副本的端口号。 -* `interserver_scheme` ([String](../../sql-reference/data-types/)) — 服务器间通信协议名称。 -* `URI` ([String](../../sql-reference/data-types/)) — 统一资源标识符(URI)。 -* `to_detached` ([UInt8](../../sql-reference/data-types/)) — 标志,表示当前正在运行的后台获取任务是否使用 `TO DETACHED` 表达式执行。 -* `thread_id` ([UInt64](../../sql-reference/data-types/)) — 线程标识符。 - -{/* 自动生成结束 */ } +{/*AUTOGENERATED_END*/ } **示例** diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/resources.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/resources.md index 6fbdf80379c..64fe235f30b 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/resources.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/resources.md @@ -1,16 +1,14 @@ --- description: '包含本地服务器上各资源信息的系统表,每个资源对应一行。' -keywords: ['系统表', '资源'] +keywords: ['system table', 'resources'] slug: /operations/system-tables/resources title: 'system.resources' doc_type: 'reference' --- - - # system.resources -包含位于本地服务器上的[资源](/operations/workload-scheduling.md#workload_entity_storage)的信息。该表中每个资源对应一行。 +包含本地服务器上[资源](/operations/workload-scheduling.md#workload_entity_storage)的信息。该表中每个资源对应一行记录。 示例: @@ -21,14 +19,14 @@ FORMAT Vertical ``` ```text -第 1 行: +行 1: ────── name: io_read read_disks: ['s3'] write_disks: [] create_query: CREATE RESOURCE io_read (READ DISK s3) -第 2 行: +行 2: ────── name: io_write read_disks: [] @@ -40,10 +38,4 @@ create_query: CREATE RESOURCE io_write (WRITE DISK s3) {/*AUTOGENERATED_START*/ } -* `name` ([String](../../sql-reference/data-types/)) — 资源名称。 -* `read_disks` ([Array(String)](../../sql-reference/data-types/)) — 使用此资源执行读操作的磁盘名称列表。 -* `write_disks` ([Array(String)](../../sql-reference/data-types/)) — 使用此资源执行写操作的磁盘名称列表。 -* `unit` ([String](../../sql-reference/data-types/)) — 用于成本计量的资源单位。 -* `create_query` ([String](../../sql-reference/data-types/)) — 该资源的 CREATE 查询语句。 - {/*AUTOGENERATED_END*/ } diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/roles.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/roles.md index efb1c3fc690..b0df64996ae 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/roles.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/roles.md @@ -1,28 +1,22 @@ --- -description: '包含已配置角色信息的系统表。' +description: '包含已配置角色相关信息的系统表。' keywords: ['系统表', '角色'] slug: /operations/system-tables/roles title: 'system.roles' doc_type: 'reference' --- - - # system.roles -包含关于已配置[角色](../../guides/sre/user-management/index.md#role-management)的信息。 +包含已配置[角色](../../guides/sre/user-management/index.md#role-management)的信息。 -列: +列包括: {/*AUTOGENERATED_START*/ } -* `name` ([String](../../sql-reference/data-types/)) — 角色名称。 -* `id` ([UUID](../../sql-reference/data-types/)) — 角色 ID。 -* `storage` ([String](../../sql-reference/data-types/)) — 角色存储路径。通过 `access_control_path` 参数进行配置。 - {/*AUTOGENERATED_END*/ } ## 另请参阅 {#see-also} -- [SHOW ROLES](/sql-reference/statements/show#show-roles) +- [SHOW ROLES](/sql-reference/statements/show#show-roles) \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/row_policies.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/row_policies.md index e98deba7426..a539e955bb9 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/row_policies.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/row_policies.md @@ -1,36 +1,22 @@ --- -description: '包含针对某个特定表的过滤器,以及应使用该行策略的角色和/或用户列表的 system 表。' -keywords: ['system 表', 'row_policies'] +description: '包含针对特定表的过滤条件,以及应使用该行级策略的角色和/或用户列表的系统表。' +keywords: ['系统表', 'row_policies'] slug: /operations/system-tables/row_policies title: 'system.row_policies' doc_type: 'reference' --- - - # system.row_policies -包含针对某个特定表的过滤条件,以及需要应用此行级策略的角色和/或用户列表。 +包含针对某个特定表的过滤器,以及应使用此行策略的角色和/或用户列表。 列: {/*AUTOGENERATED_START*/ } -* `name` ([String](../../sql-reference/data-types/)) — 行策略名称。 -* `short_name` ([String](../../sql-reference/data-types/)) — 行策略的短名称。行策略名称是复合名称,例如:myfilter ON mydb.mytable。这里 `myfilter ON mydb.mytable` 是行策略的名称,`myfilter` 是其短名称。 -* `database` ([String](../../sql-reference/data-types/)) — 数据库名称。 -* `table` ([String](../../sql-reference/data-types/)) — 表名。如果策略是针对数据库的,则为空。 -* `id` ([UUID](../../sql-reference/data-types/)) — 行策略 ID。 -* `storage` ([String](../../sql-reference/data-types/)) — 存储该行策略的目录名称。 -* `select_filter` ([Nullable(String)](../../sql-reference/data-types/)) — 在 SELECT 查询中过滤时使用的表达式。 -* `is_restrictive` ([UInt8](../../sql-reference/data-types/)) — 指示行策略是否限制对行的访问。取值:• 0 — 行策略使用 `AS PERMISSIVE` 子句定义,• 1 — 行策略使用 `AS RESTRICTIVE` 子句定义。 -* `apply_to_all` ([UInt8](../../sql-reference/data-types/)) — 指示行策略是否对所有角色和(或)用户生效。 -* `apply_to_list` ([Array(String)](../../sql-reference/data-types/)) — 应用该行策略的角色和(或)用户列表。 -* `apply_to_except` ([Array(String)](../../sql-reference/data-types/)) — 行策略应用于除列出的角色和(或)用户之外的所有角色和(或)用户。 - {/*AUTOGENERATED_END*/ } ## 另请参阅 {#see-also} -- [SHOW POLICIES](/sql-reference/statements/show#show-policies) +- [SHOW POLICIES](/sql-reference/statements/show#show-policies) \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/s3_queue_settings.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/s3_queue_settings.md index 93a0c172e86..db61172c783 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/s3_queue_settings.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/s3_queue_settings.md @@ -1,29 +1,17 @@ --- -description: '包含 S3Queue 表设置相关信息的系统表。 - 自服务器版本 `24.10` 起提供。' +description: '包含 S3Queue 表设置信息的系统表。自服务器版本 `24.10` 起可用。' keywords: ['system table', 's3_queue_settings'] slug: /operations/system-tables/s3_queue_settings title: 'system.s3_queue_settings' doc_type: 'reference' --- - - # system.s3_queue_settings -包含有关 [S3Queue](../../engines/table-engines/integrations/s3queue.md) 表设置的信息。从服务器 24.10 版本起可用。 +包含 [S3Queue](../../engines/table-engines/integrations/s3queue.md) 表设置的信息。自服务器版本 `24.10` 起可用。 列: {/*AUTOGENERATED_START*/ } -* `database` ([String](../../sql-reference/data-types/)) — 使用 S3Queue 引擎的表所在的数据库。 -* `table` ([String](../../sql-reference/data-types/)) — 使用 S3Queue 引擎的表名。 -* `name` ([String](../../sql-reference/data-types/)) — 设置名称。 -* `value` ([String](../../sql-reference/data-types/)) — 设置值。 -* `type` ([String](../../sql-reference/data-types/)) — 设置类型(与实现相关的字符串值)。 -* `changed` ([UInt8](../../sql-reference/data-types/)) — 如果在配置中显式定义或被显式修改,则为 1。 -* `description` ([String](../../sql-reference/data-types/)) — 设置描述。 -* `alterable` ([UInt8](../../sql-reference/data-types/)) — 指示当前用户是否可以通过 ALTER TABLE MODIFY SETTING 修改该设置:0 — 当前用户可以修改该设置,1 — 当前用户不可以修改该设置。 - {/*AUTOGENERATED_END*/ } diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/scheduler.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/scheduler.md index bf9b17044d9..fd4b3bdfd66 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/scheduler.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/scheduler.md @@ -1,5 +1,5 @@ --- -description: '包含驻留在本地服务器上的调度节点相关信息和状态的系统表。' +description: '包含本地服务器上调度节点的信息和状态的系统表。' keywords: ['系统表', '调度器'] slug: /operations/system-tables/scheduler title: 'system.scheduler' @@ -13,8 +13,8 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -包含位于本地服务器上的[调度节点](/operations/workload-scheduling.md/#hierarchy)的信息和状态。 -此表可用于监控。表中每个调度节点对应一行记录。 +包含位于本地服务器上的[调度节点](/operations/workload-scheduling.md/#hierarchy)的相关信息和状态。 +此表可用于监控。表中每个调度节点对应一行。 示例: @@ -58,35 +58,6 @@ tokens: ᴺᵁᴸᴸ 列: - {/*AUTOGENERATED_START*/ } -* `resource` ([String](../../sql-reference/data-types/)) — 资源名称 -* `path` ([String](../../sql-reference/data-types/)) — 此资源调度层级中某个调度节点的路径 -* `type` ([String](../../sql-reference/data-types/)) — 调度节点的类型。 -* `weight` ([Float64](../../sql-reference/data-types/)) — 节点的权重,被类型为 `fair` 的父节点使用。 -* `priority` ([Int64](../../sql-reference/data-types/)) — 节点的优先级,由类型为 'priority' 的父节点使用(数值越小,优先级越高)。 -* `is_active` ([UInt8](../../sql-reference/data-types/)) — 此节点当前是否处于活动状态——即是否存在等待出队且其约束条件已满足的资源请求。 -* `active_children` ([UInt64](../../sql-reference/data-types/)) — 处于活动状态的子任务数量。 -* `dequeued_requests` ([UInt64](../../sql-reference/data-types/)) — 从该节点出队的资源请求总数。 -* `canceled_requests` ([UInt64](../../sql-reference/data-types/)) — 此节点上被取消的资源请求总数。 -* `dequeued_cost` ([Int64](../../sql-reference/data-types/)) — 从此节点出队的所有请求的开销总和(例如以字节为单位的大小)。 -* `throughput` ([Float64](../../sql-reference/data-types/)) — 当前平均吞吐量(每秒出队代价)。 -* `canceled_cost` ([Int64](../../sql-reference/data-types/)) — 在该节点上被取消的所有请求的开销总和(例如以字节数表示的大小)。 -* `busy_periods` ([UInt64](../../sql-reference/data-types/)) — 该节点被停用的总次数。 -* `vruntime` ([Nullable(Float64)](../../sql-reference/data-types/)) — 仅用于 `fair` 节点的子节点。由 SFQ 算法使用的节点虚拟运行时间,用于以最大-最小公平方式选择下一个待处理的子节点。 -* `system_vruntime` ([Nullable(Float64)](../../sql-reference/data-types/)) — 仅适用于 `fair` 节点。虚拟运行时间,表示最近一次已处理资源请求的 `vruntime` 值。在子节点激活时作为 `vruntime` 的新值使用。 -* `queue_length` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 仅适用于 `fifo` 节点。当前队列中的资源请求数量。 -* `queue_cost` ([Nullable(Int64)](../../sql-reference/data-types/)) — 仅适用于 FIFO 节点。队列中所有请求的开销总和(例如以字节为单位的大小)。 -* `budget` ([Nullable(Int64)](../../sql-reference/data-types/)) — 仅用于 FIFO 节点。表示可用于新资源请求的“成本单元”数量。在资源请求的预估成本与实际成本不一致时(例如在读/写失败之后),该字段可能会出现。 -* `is_satisfied` ([Nullable(UInt8)](../../sql-reference/data-types/)) — 仅适用于约束节点(例如 `inflight_limit`)。当该节点的所有约束均满足时,其值为 `1`。 -* `inflight_requests` ([Nullable(Int64)](../../sql-reference/data-types/)) — 仅适用于 `inflight_limit` 节点。当前处于消费状态、已从该节点出队的资源请求数量。 -* `inflight_cost` ([Nullable(Int64)](../../sql-reference/data-types/)) — 仅适用于 `inflight_limit` 节点。从该节点出队且当前处于消耗状态的所有资源请求的开销总和(例如按字节计)。 -* `max_requests` ([Nullable(Int64)](../../sql-reference/data-types/)) — 仅用于 `inflight_limit` 节点。inflight_requests 的上限,超过该值将触发约束违规。 -* `max_cost` ([Nullable(Int64)](../../sql-reference/data-types/)) — 仅适用于 `inflight_limit` 节点。inflight_cost 的上限,超过该值将触发约束违规。 -* `max_speed` ([Nullable(Float64)](../../sql-reference/data-types/)) — 仅适用于 `bandwidth_limit` 节点。以每秒令牌数表示的带宽上限。` -* `max_burst` ([Nullable(Float64)](../../sql-reference/data-types/)) — 仅适用于 `bandwidth_limit` 节点。令牌桶限流机制中可用令牌数量的上限。 -* `throttling_us` ([Nullable(Int64)](../../sql-reference/data-types/)) — 仅用于 `bandwidth_limit` 节点。该节点处于限流状态的总时长(微秒)。 -* `tokens` ([Nullable(Float64)](../../sql-reference/data-types/)) — 仅适用于 `bandwidth_limit` 节点。当前在令牌桶限流器中可用的令牌数量。 - {/*AUTOGENERATED_END*/ } diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/schema_inference_cache.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/schema_inference_cache.md index f540af99c37..fb947de5873 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/schema_inference_cache.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/schema_inference_cache.md @@ -1,5 +1,5 @@ --- -description: '包含所有已缓存文件的 schema 信息的系统表。' +description: '包含所有已缓存文件模式信息的系统表。' keywords: ['system table', 'schema_inference_cache'] slug: /operations/system-tables/schema_inference_cache title: 'system.schema_inference_cache' @@ -19,15 +19,6 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; {/*AUTOGENERATED_START*/ } -* `storage` ([String](../../sql-reference/data-types/)) — 存储名称:File、URL、S3 或 HDFS。 -* `source` ([String](../../sql-reference/data-types/)) — 文件来源。 -* `format` ([String](../../sql-reference/data-types/)) — 格式名称。 -* `additional_format_info` ([String](../../sql-reference/data-types/)) — 标识 schema 所需的附加信息,例如特定于格式的设置。 -* `registration_time` ([DateTime](../../sql-reference/data-types/)) — 将 schema 添加到缓存时的时间戳。 -* `schema` ([Nullable(String)](../../sql-reference/data-types/)) — 已缓存的 schema。 -* `number_of_rows` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 文件在给定格式下的行数。用于缓存来自数据文件的简单 count() 结果,以及在 schema 推断期间缓存从元数据获得的行数。 -* `schema_inference_mode` ([Nullable(String)](../../sql-reference/data-types/)) — schema 推断方式。 - {/*AUTOGENERATED_END*/ } **示例** @@ -42,7 +33,8 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; ``` :::tip -请将 `data.jsonl` 放置在 `user_files_path` 目录中。可通过查看 ClickHouse 配置文件来找到该目录。默认值为: +将 `data.jsonl` 放在 `user_files_path` 目录中。你可以通过查看 +ClickHouse 的配置文件来找到该目录。默认值为: ```sql /var/lib/clickhouse/user_files/ @@ -50,7 +42,7 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; ::: -打开 `clickhouse-client`,运行 `DESCRIBE` 查询: +打开 `clickhouse-client` 并执行 `DESCRIBE` 查询: ```sql DESCRIBE file('data.jsonl') SETTINGS input_format_try_infer_integers=0; @@ -74,16 +66,16 @@ FORMAT Vertical ``` ```response -行 1: +第 1 行: ────── -存储: File -来源: /home/droscigno/user_files/data.jsonl -格式: JSONEachRow -附加格式信息: schema_inference_hints=, max_rows_to_read_for_schema_inference=25000, schema_inference_make_columns_nullable=true, try_infer_integers=false, try_infer_dates=true, try_infer_datetimes=true, try_infer_numbers_from_strings=true, read_bools_as_numbers=true, try_infer_objects=false -注册时间: 2022-12-29 17:49:52 -模式: id Nullable(Float64), age Nullable(Float64), name Nullable(String), hobbies Array(Nullable(String)) +storage: File +source: /home/droscigno/user_files/data.jsonl +format: JSONEachRow +additional_format_info: schema_inference_hints=, max_rows_to_read_for_schema_inference=25000, schema_inference_make_columns_nullable=true, try_infer_integers=false, try_infer_dates=true, try_infer_datetimes=true, try_infer_numbers_from_strings=true, read_bools_as_numbers=true, try_infer_objects=false +registration_time: 2022-12-29 17:49:52 +schema: id Nullable(Float64), age Nullable(Float64), name Nullable(String), hobbies Array(Nullable(String)) ``` **另请参阅** -* [从输入数据自动推断表结构](/interfaces/schema-inference.md) +* [基于输入数据的自动模式推断](/interfaces/schema-inference.md) diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/settings_changes.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/settings_changes.md index 115975a6481..4a7f26402ec 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/settings_changes.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/settings_changes.md @@ -1,25 +1,19 @@ --- -description: '包含以往 ClickHouse 版本中设置更改信息的 system 表。' +description: '用于记录历史 ClickHouse 版本中设置变更信息的系统表。' keywords: ['system table', 'settings_changes'] slug: /operations/system-tables/settings_changes title: 'system.settings_changes' doc_type: 'reference' --- - - # system.settings_changes -包含以前 ClickHouse 版本中设置更改的信息。 +包含 ClickHouse 历史版本中设置变更的信息。 列: {/*AUTOGENERATED_START*/ } -* `type` ([Enum8('Session' = 0, 'MergeTree' = 1)](../../sql-reference/data-types/)) — 设置分组(Session、MergeTree 等)。 -* `version` ([String](../../sql-reference/data-types/)) — ClickHouse 服务器版本。 -* `changes` ([Array(Tuple(name String, previous_value String, new_value String, reason String))](../../sql-reference/data-types/)) — 会改变 ClickHouse 行为的设置更改列表。 - {/*AUTOGENERATED_END*/ } **示例** @@ -36,7 +30,7 @@ Row 1: ────── type: Core version: 23.5 -changes: [('input_format_parquet_preserve_order','1','0','允许 Parquet 读取器对行重新排序以提升并行性能。'),('parallelize_output_from_storages','0','1','允许在执行从 file/url/S3 等读取数据的查询时启用并行处理。这可能导致行顺序发生变化。'),('use_with_fill_by_sorting_prefix','0','1','ORDER BY 子句中 WITH FILL 列之前的列构成排序前缀。具有不同排序前缀值的行将独立填充'),('output_format_parquet_compliant_nested_types','0','1','更改输出 Parquet 文件架构中的内部字段名称。')] +changes: [('input_format_parquet_preserve_order','1','0','允许 Parquet 读取器对行重新排序以提升并行处理性能。'),('parallelize_output_from_storages','0','1','允许在执行从 file/url/S3 等读取数据的查询时进行并行处理。这可能导致行重新排序。'),('use_with_fill_by_sorting_prefix','0','1','ORDER BY 子句中 WITH FILL 列之前的列构成排序前缀。排序前缀值不同的行将独立填充'),('output_format_parquet_compliant_nested_types','0','1','更改输出 Parquet 文件架构中的内部字段名称。')] ``` **另请参阅** diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/settings_profile_elements.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/settings_profile_elements.md index 334ae0ba146..4076b801eda 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/settings_profile_elements.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/settings_profile_elements.md @@ -1,18 +1,16 @@ --- -description: '描述设置配置文件内容的系统表,包括:约束条件、适用的角色和用户,以及父级设置配置文件。' -keywords: ['系统表', 'settings_profile_elements'] +description: '用于描述 SETTINGS PROFILE 内容的系统表:该设置所适用的约束、角色和用户,以及父 SETTINGS PROFILE。' +keywords: ['system table', 'settings_profile_elements'] slug: /operations/system-tables/settings_profile_elements title: 'system.settings_profile_elements' doc_type: 'reference' --- - - # system.settings_profile_elements 描述设置配置文件的内容: -* 约束条件。 +* 约束。 * 该设置适用的角色和用户。 * 父级设置配置文件。 @@ -20,15 +18,4 @@ doc_type: 'reference' {/*AUTOGENERATED_START*/ } -* `profile_name` ([Nullable(String)](../../sql-reference/data-types/)) — 设置配置文件的名称。 -* `user_name` ([Nullable(String)](../../sql-reference/data-types/)) — 用户名。 -* `role_name` ([Nullable(String)](../../sql-reference/data-types/)) — 角色名称。 -* `index` ([UInt64](../../sql-reference/data-types/)) — 设置配置文件元素的序号。 -* `setting_name` ([Nullable(String)](../../sql-reference/data-types/)) — 设置名称。 -* `value` ([Nullable(String)](../../sql-reference/data-types/)) — 设置值。 -* `min` ([Nullable(String)](../../sql-reference/data-types/)) — 该设置的最小值。未设置时为 NULL。 -* `max` ([Nullable(String)](../../sql-reference/data-types/)) — 该设置的最大值。未设置时为 NULL。 -* `writability` ([Nullable(Enum8('WRITABLE' = 0, 'CONST' = 1, 'CHANGEABLE_IN_READONLY' = 2))](../../sql-reference/data-types/)) — 表示某个设置是否可以被修改的属性。 -* `inherit_profile` ([Nullable(String)](../../sql-reference/data-types/)) — 此设置配置文件的父配置文件。未设置时为 NULL。该设置配置文件将从其父配置文件继承所有设置的值和约束(min、max、readonly)。 - {/*AUTOGENERATED_END*/ } diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/settings_profiles.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/settings_profiles.md index 4f09b3a2213..831ab15fcf1 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/settings_profiles.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/settings_profiles.md @@ -1,13 +1,11 @@ --- -description: '包含已配置的设置配置文件属性的系统表。' +description: '包含已配置设置配置集属性的系统表。' keywords: ['system table', 'settings_profiles'] slug: /operations/system-tables/settings_profiles title: 'system.settings_profiles' doc_type: 'reference' --- - - # system.settings_profiles 包含已配置的设置配置文件的属性。 @@ -16,17 +14,9 @@ doc_type: 'reference' {/*AUTOGENERATED_START*/ } -* `name` ([String](../../sql-reference/data-types/)) — 设置配置文件的名称。 -* `id` ([UUID](../../sql-reference/data-types/)) — 设置配置文件的 ID。 -* `storage` ([String](../../sql-reference/data-types/)) — 设置配置文件存储的路径。通过 `access_control_path` 参数进行配置。 -* `num_elements` ([UInt64](../../sql-reference/data-types/)) — 此配置文件在 `system.settings_profile_elements` 表中的元素数量。 -* `apply_to_all` ([UInt8](../../sql-reference/data-types/)) — 表示该设置配置文件应用于所有角色和/或用户。 -* `apply_to_list` ([Array(String)](../../sql-reference/data-types/)) — 应用该设置配置文件的角色和/或用户列表。 -* `apply_to_except` ([Array(String)](../../sql-reference/data-types/)) — 该设置配置文件应用于除列表中列出的角色和/或用户之外的所有角色和/或用户。 - {/*AUTOGENERATED_END*/ } ## 另请参阅 {#see-also} -- [SHOW PROFILES](/sql-reference/statements/show#show-profiles) +- [SHOW PROFILES](/sql-reference/statements/show#show-profiles) \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/table_engines.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/table_engines.md index e232879e58f..07a1807894e 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/table_engines.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/table_engines.md @@ -1,31 +1,19 @@ --- -description: '包含服务器所支持的表引擎及其支持特性说明的 system 表。' -keywords: ['system 表', 'table_engines'] +description: '包含服务器支持的表引擎及其所支持特性说明的系统表。' +keywords: ['system table', 'table_engines'] slug: /operations/system-tables/table_engines title: 'system.table_engines' doc_type: 'reference' --- - - # system.table_engines -描述服务器所支持的表引擎及其功能支持情况。 +包含服务器支持的表引擎及其功能支持情况的描述。 -该表包含以下列(列的类型在括号中注明): +该表包含以下列(括号中为列类型): {/*AUTOGENERATED_START*/ } -* `name` ([String](../../sql-reference/data-types/)) — 表引擎的名称。 -* `supports_settings` ([UInt8](../../sql-reference/data-types/)) — 用于指示表引擎是否支持 `SETTINGS` 子句的标志。 -* `supports_skipping_indices` ([UInt8](../../sql-reference/data-types/)) — 用于指示表引擎是否支持跳过索引(skipping indices)的标志。 -* `supports_projections` ([UInt8](../../sql-reference/data-types/)) — 用于指示表引擎是否支持投影(projections)的标志。 -* `supports_sort_order` ([UInt8](../../sql-reference/data-types/)) — 用于指示表引擎是否支持 `PARTITION_BY`、`PRIMARY_KEY`、`ORDER_BY` 和 `SAMPLE_BY` 子句的标志。 -* `supports_ttl` ([UInt8](../../sql-reference/data-types/)) — 用于指示表引擎是否支持 TTL 的标志。 -* `supports_replication` ([UInt8](../../sql-reference/data-types/)) — 用于指示表引擎是否支持数据复制的标志。 -* `supports_deduplication` ([UInt8](../../sql-reference/data-types/)) — 用于指示表引擎是否支持数据去重的标志。 -* `supports_parallel_insert` ([UInt8](../../sql-reference/data-types/)) — 用于指示表引擎是否支持并行插入(参见 `max_insert_threads` 设置)的标志。 - {/*AUTOGENERATED_END*/ } 示例: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/time_zones.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/time_zones.md index 22f0dffda1a..a66005a9a06 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/time_zones.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/time_zones.md @@ -1,23 +1,19 @@ --- -description: '包含 ClickHouse 服务器支持的时区列表的系统表。' -keywords: ['系统表', 'time_zones'] +description: '包含 ClickHouse 服务器所支持的时区列表的 system 表。' +keywords: ['system 表', 'time_zones'] slug: /operations/system-tables/time_zones title: 'system.time_zones' doc_type: 'reference' --- - - # system.time_zones -包含 ClickHouse 服务器支持的时区列表。该列表可能会因 ClickHouse 版本不同而有所变化。 +包含 ClickHouse 服务器所支持的时区列表。该时区列表可能会因 ClickHouse 版本不同而有所变化。 列: {/*AUTOGENERATED_START*/ } -* `time_zone` ([String](../../sql-reference/data-types/)) — 受支持的时区列表。 - {/*AUTOGENERATED_END*/ } **示例** diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/user_processes.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/user_processes.md index 1a4ad800b2d..438f317052b 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/user_processes.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/user_processes.md @@ -1,6 +1,6 @@ --- -description: '包含有助于总体了解用户内存使用情况和 ProfileEvents 的信息的系统表。' -keywords: ['系统表', 'user_processes'] +description: '包含用于概览用户内存使用情况和 ProfileEvents 的系统表。' +keywords: ['system table', 'user_processes'] slug: /operations/system-tables/user_processes title: 'system.user_processes' doc_type: 'reference' @@ -13,17 +13,12 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -此系统表可用于查看用户的内存使用情况和 ProfileEvents 信息。 +此系统表可用于查看用户的内存使用情况和 ProfileEvents 的整体概况。 列: {/*AUTOGENERATED_START*/ } -* `user` ([String](../../sql-reference/data-types/)) — 用户名。 -* `memory_usage` ([Int64](../../sql-reference/data-types/)) — 该用户所有进程所使用内存(RAM)的总量。可能不包含某些类型的专用内存。参见 `max_memory_usage` 设置。 -* `peak_memory_usage` ([Int64](../../sql-reference/data-types/)) — 该用户内存使用的峰值。当该用户没有正在运行的查询时,可能会被重置。 -* `ProfileEvents` ([Map(String, UInt64)](../../sql-reference/data-types/)) — 用于该用户各类指标的 `ProfileEvents` 汇总信息。其说明可在 `system.events` 表中找到。 - {/*AUTOGENERATED_END*/ } ```sql diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/users.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/users.md index 6ccd5305086..3f209f5476a 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/users.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/users.md @@ -1,41 +1,22 @@ --- -description: '包含已在服务器上配置的用户账号列表的系统表。' -keywords: ['系统表', '用户'] +description: '包含服务器上已配置用户账户列表的 system 表。' +keywords: ['system 表', 'users'] slug: /operations/system-tables/users title: 'system.users' doc_type: 'reference' --- - - # system.users -包含服务器上已配置的[用户帐户](../../guides/sre/user-management/index.md#user-account-management)列表。 +包含在服务器上配置的[用户账户](../../guides/sre/user-management/index.md#user-account-management)列表。 列: {/*AUTOGENERATED_START*/ } -* `name` ([String](../../sql-reference/data-types/)) — 用户名。 -* `id` ([UUID](../../sql-reference/data-types/)) — 用户 ID。 -* `storage` ([String](../../sql-reference/data-types/)) — 用户存储路径。在 `access_control_path` 参数中配置。 -* `auth_type` ([Array(Enum8('no_password' = 0, 'plaintext_password' = 1, 'sha256_password' = 2, 'double_sha1_password' = 3, 'ldap' = 4, 'kerberos' = 5, 'ssl_certificate' = 6, 'bcrypt_password' = 7, 'ssh_key' = 8, 'http' = 9, 'jwt' = 10, 'scram_sha256_password' = 11, 'no_authentication' = 12))](../../sql-reference/data-types/)) — 显示身份验证类型。用户身份验证可以有多种方式:无密码、明文密码、SHA256 编码密码、双重 SHA-1 编码密码或 bcrypt 编码密码。 -* `auth_params` ([Array(String)](../../sql-reference/data-types/)) — 取决于 `auth_type` 的 JSON 格式身份验证参数。 -* `host_ip` ([Array(String)](../../sql-reference/data-types/)) — 允许连接到 ClickHouse 服务器的主机 IP 地址。 -* `host_names` ([Array(String)](../../sql-reference/data-types/)) — 允许连接到 ClickHouse 服务器的主机名。 -* `host_names_regexp` ([Array(String)](../../sql-reference/data-types/)) — 匹配允许连接到 ClickHouse 服务器的主机名的正则表达式。 -* `host_names_like` ([Array(String)](../../sql-reference/data-types/)) — 使用 LIKE 谓词设置的、允许连接到 ClickHouse 服务器的主机名。 -* `default_roles_all` ([UInt8](../../sql-reference/data-types/)) — 显示是否将所有已授予的角色默认分配给该用户。 -* `default_roles_list` ([Array(String)](../../sql-reference/data-types/)) — 默认授予的角色列表。 -* `default_roles_except` ([Array(String)](../../sql-reference/data-types/)) — 除列出的角色外,所有已授予的角色都被设置为默认角色。 -* `grantees_any` ([UInt8](../../sql-reference/data-types/)) — 指示是否允许拥有任意 GRANT 选项的用户将其授予任意对象的标志。 -* `grantees_list` ([Array(String)](../../sql-reference/data-types/)) — 该用户被允许将授权选项授予的用户或角色列表。 -* `grantees_except` ([Array(String)](../../sql-reference/data-types/)) — 该用户被禁止将授权选项授予的用户或角色列表。 -* `default_database` ([String](../../sql-reference/data-types/)) — 此用户的默认数据库名称。 - {/*AUTOGENERATED_END*/ } ## 另请参阅 {#see-also} -- [SHOW USERS](/sql-reference/statements/show#show-users) +- [SHOW USERS](/sql-reference/statements/show#show-users) \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/view_refreshes.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/view_refreshes.md index 07e7cd7a73d..5faaa28b676 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/view_refreshes.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/view_refreshes.md @@ -1,6 +1,6 @@ --- -description: '包含可刷新物化视图信息的系统表。' -keywords: ['系统表', 'view_refreshes'] +description: '用于存储可刷新物化视图相关信息的系统表。' +keywords: ['system table', 'view_refreshes'] slug: /operations/system-tables/view_refreshes title: 'system.view_refreshes' doc_type: 'reference' @@ -13,30 +13,12 @@ import SystemTableCloud from '@site/docs/_snippets/_system_table_cloud.md'; -关于[可刷新物化视图](../../sql-reference/statements/create/view.md#refreshable-materialized-view)的信息。包含所有可刷新的物化视图,无论当前是否正在刷新。 +关于[可刷新物化视图(Refreshable Materialized Views)](../../sql-reference/statements/create/view.md#refreshable-materialized-view)的信息。包含所有可刷新物化视图,无论当前是否有刷新在进行。 列: {/*AUTOGENERATED_START*/ } -* `database` ([String](../../sql-reference/data-types/)) — 表所在数据库的名称。 -* `view` ([String](../../sql-reference/data-types/)) — 表名。 -* `uuid` ([UUID](../../sql-reference/data-types/)) — 表的 UUID(Atomic 数据库)。 -* `status` ([String](../../sql-reference/data-types/)) — 刷新的当前状态。 -* `last_success_time` ([Nullable(DateTime)](../../sql-reference/data-types/)) — 最近一次成功刷新开始的时间。如果自服务器启动或表创建以来没有成功刷新,则为 NULL。 -* `last_success_duration_ms` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 最近一次成功刷新所耗时间(毫秒)。 -* `last_refresh_time` ([Nullable(DateTime)](../../sql-reference/data-types/)) — 最近一次刷新尝试完成(如果已知)或开始(如果结束时间未知或仍在运行)的时间。如果自服务器启动或表创建以来没有发生刷新尝试,则为 NULL。 -* `last_refresh_replica` ([String](../../sql-reference/data-types/)) — 如果启用了协调,则为执行当前(如果正在运行)或上一次(如果未在运行)刷新尝试的副本名称。 -* `next_refresh_time` ([Nullable(DateTime)](../../sql-reference/data-types/)) — 下一次计划开始刷新的时间,当 `status = Scheduled` 时有效。 -* `exception` ([String](../../sql-reference/data-types/)) — 上一次尝试失败时的错误消息。 -* `retry` ([UInt64](../../sql-reference/data-types/)) — 当前刷新到目前为止的失败尝试次数。如果 `status` 为 `RunningOnAnotherReplica`,则不可用。 -* `progress` ([Nullable(Float64)](../../sql-reference/data-types/)) — 在指定副本上,当前正在运行或最近一次完成的刷新的进度,范围为 0 到 1。如果 `status` 为 `RunningOnAnotherReplica` 或刷新未在运行,则为 NULL。 -* `read_rows` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 在指定副本上,当前正在运行或最近一次完成的刷新读取的行数。如果 `status` 为 `RunningOnAnotherReplica`,则为 NULL。 -* `read_bytes` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 在指定副本上,当前正在运行或最近一次完成的刷新读取的字节数。如果 `status` 为 `RunningOnAnotherReplica`,则为 NULL。 -* `total_rows` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 在指定副本上,当前正在运行或最近一次完成的刷新需要读取的预估总行数。如果 `status` 为 `RunningOnAnotherReplica`,则为 NULL。 -* `written_rows` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 在指定副本上,当前正在运行或最近一次完成的刷新写入的行数。如果 `status` 为 `RunningOnAnotherReplica`,则为 NULL。 -* `written_bytes` ([Nullable(UInt64)](../../sql-reference/data-types/)) — 在指定副本上,当前正在运行或最近一次完成的刷新写入的字节数。如果 `status` 为 `RunningOnAnotherReplica`,则为 NULL。 - {/*AUTOGENERATED_END*/ } **示例** diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/workloads.md b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/workloads.md index 83b4eee16be..58a6a04a009 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/workloads.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/operations/system-tables/workloads.md @@ -1,16 +1,14 @@ --- -description: '包含驻留在本地服务器上的工作负载信息的系统表。' -keywords: ['系统表', '工作负载'] +description: '包含本地服务器工作负载信息的系统表。' +keywords: ['system table', 'workloads'] slug: /operations/system-tables/workloads title: 'system.workloads' doc_type: 'reference' --- - - # system.workloads -包含本地服务器上[工作负载](/operations/workload-scheduling.md#workload_entity_storage)的信息。该表中每个工作负载对应一行记录。 +包含本地服务器上各个 [workload](/operations/workload-scheduling.md#workload_entity_storage) 的信息。该表中每一行对应一个 workload。 示例: @@ -21,19 +19,19 @@ FORMAT Vertical ``` ```text -第 1 行: +第 1 行: ────── name: production parent: all create_query: CREATE WORKLOAD production IN `all` SETTINGS weight = 9 -第 2 行: +第 2 行: ────── name: development parent: all create_query: CREATE WORKLOAD development IN `all` -第 3 行: +第 3 行: ────── name: all parent: @@ -44,8 +42,4 @@ create_query: CREATE WORKLOAD `all` {/*AUTOGENERATED_START*/ } -* `name` ([String](../../sql-reference/data-types/)) — 工作负载名称。 -* `parent` ([String](../../sql-reference/data-types/)) — 父工作负载名称。 -* `create_query` ([String](../../sql-reference/data-types/)) — 用于创建该工作负载的 CREATE 查询。 - {/*AUTOGENERATED_END*/ } diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/aggregate-functions/reference/index.md b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/aggregate-functions/reference/index.md index 64bd8e06492..acbcd55fbf1 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/aggregate-functions/reference/index.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/aggregate-functions/reference/index.md @@ -1,5 +1,5 @@ --- -description: '聚合函数总览页面,包含完整的聚合函数列表' +description: '聚合函数文档首页,包含所有聚合函数的完整列表' sidebar_position: 36 slug: /sql-reference/aggregate-functions/reference/ title: '聚合函数' @@ -12,153 +12,14 @@ doc_type: 'landing-page' # 聚合函数 -ClickHouse 支持所有标准 SQL 聚合函数([sum](../reference/sum.md)、[avg](../reference/avg.md)、[min](../reference/min.md)、[max](../reference/max.md)、[count](../reference/count.md)),以及丰富的其他聚合函数。 +ClickHouse 支持所有标准 SQL 聚合函数([sum](../reference/sum.md)、[avg](../reference/avg.md)、[min](../reference/min.md)、[max](../reference/max.md)、[count](../reference/count.md)),以及多种其他聚合函数。 -{/* 本页面的目录由以下脚本自动生成: - https://github.com/ClickHouse/clickhouse-docs/blob/main/scripts/autogenerate-table-of-contents.sh - 它会根据 YAML front matter 字段:slug、description、title 生成。 + - -{/*AUTOGENERATED_START*/ } - -| 页面 | 说明 | -| --------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | -| [aggThrow](/sql-reference/aggregate-functions/reference/aggthrow) | 此函数可用于测试异常安全性。它会在创建时按照指定的概率抛出异常。 | -| [analysisOfVariance](/sql-reference/aggregate-functions/reference/analysis_of_variance) | 提供用于单因素方差分析(ANOVA)的统计检验。它对多个服从正态分布的观测值分组进行检验,以判断各分组的均值是否相同。 | -| [any](/sql-reference/aggregate-functions/reference/any) | 返回某列中首次出现的值。 | -| [anyHeavy](/sql-reference/aggregate-functions/reference/anyheavy) | 使用 heavy hitters 算法选择一个高频出现的值。如果在每个查询执行线程中,都存在某个值在超过一半的情况中出现,则返回该值。通常情况下,结果是非确定性的。 | -| [anyLast](/sql-reference/aggregate-functions/reference/anylast) | 返回列中最后出现的值。 | -| [approx_top_k](/sql-reference/aggregate-functions/reference/approxtopk) | 返回一个数组,其中包含指定列中近似最频繁出现的值及其计数。 | -| [approx_top_sum](/sql-reference/aggregate-functions/reference/approxtopsum) | 返回一个数组,其中包含指定列中近似最常见的值及其各自的出现次数。 | -| [argMax](/sql-reference/aggregate-functions/reference/argmax) | 计算使 `val` 取得最大值时的 `arg` 值。 | -| [argMin](/sql-reference/aggregate-functions/reference/argmin) | 计算最小 `val` 值对应的 `arg` 值。如果有多行的 `val` 相同且为最小值,则返回哪个关联的 `arg` 是不确定的。 | -| [argAndMin](/sql-reference/aggregate-functions/reference/argandmin) | 计算最小 `val` 值对应的 `arg` 和 `val`。如果存在多行记录的 `val` 相同且都是最小值,那么返回哪一行对应的 `arg` 和 `val` 是不确定的。 | -| [argAndMax](/sql-reference/aggregate-functions/reference/argandmax) | 计算最大 `val` 值对应的 `arg` 和 `val`。如果有多行记录的 `val` 相同且都是最大值,则返回哪一行对应的 `arg` 和 `val` 是不确定的。 | -| [groupArrayArray](/sql-reference/aggregate-functions/reference/grouparrayarray) | 将多个数组聚合为一个包含这些数组的更大数组。 | -| [avg](/sql-reference/aggregate-functions/reference/avg) | 计算算术平均值。 | -| [avgWeighted](/sql-reference/aggregate-functions/reference/avgweighted) | 计算加权算术平均值。 | -| [boundingRatio](/sql-reference/aggregate-functions/reference/boundingRatio) | 计算一组数值中最左端点和最右端点之间斜率的聚合函数。 | -| [categoricalInformationValue](/sql-reference/aggregate-functions/reference/categoricalinformationvalue) | 对每个类别计算 `(P(tag = 1) - P(tag = 0))(log(P(tag = 1)) - log(P(tag = 0)))` 的值。 | -| [contingency](/sql-reference/aggregate-functions/reference/contingency) | `contingency` 函数计算列联系系数(contingency coefficient),用于度量表中两列之间的关联程度。其计算方式与 `cramersV` 函数类似,但在求平方根时分母不同。 | -| [corr](/sql-reference/aggregate-functions/reference/corr) | 计算皮尔逊相关系数。 | -| [corrMatrix](/sql-reference/aggregate-functions/reference/corrmatrix) | 对 N 个变量计算相关系数矩阵。 | -| [corrStable](/sql-reference/aggregate-functions/reference/corrstable) | 计算皮尔逊相关系数,但采用数值更稳定的算法。 | -| [count](/sql-reference/aggregate-functions/reference/count) | 计算行数或非 NULL 值的个数。 | -| [covarPop](/sql-reference/aggregate-functions/reference/covarpop) | 计算总体协方差 | -| [covarPopMatrix](/sql-reference/aggregate-functions/reference/covarpopmatrix) | 返回 N 个变量的总体协方差矩阵。 | -| [covarPopStable](/sql-reference/aggregate-functions/reference/covarpopstable) | 计算总体协方差值 | -| [covarSamp](/sql-reference/aggregate-functions/reference/covarsamp) | 计算 `Σ((x - x̅)(y - y̅)) / (n - 1)` 的值 | -| [covarSampMatrix](/sql-reference/aggregate-functions/reference/covarsampmatrix) | 返回 N 个变量的样本协方差矩阵。 | -| [covarSampStable](/sql-reference/aggregate-functions/reference/covarsampstable) | 类似于 covarSamp,但计算速度更慢,数值误差更小。 | -| [cramersV](/sql-reference/aggregate-functions/reference/cramersv) | `cramersV` 函数的结果范围为 0(表示变量之间没有关联)到 1,且只有在每个取值都完全由另一个变量决定时才会达到 1。它可以被看作两个变量之间的关联程度,相对于其最大可能变异程度的百分比。 | -| [cramersVBiasCorrected](/sql-reference/aggregate-functions/reference/cramersvbiascorrected) | 计算 Cramer's V,但采用偏差校正。 | -| [deltaSum](/sql-reference/aggregate-functions/reference/deltasum) | 对相邻行的算术差求和。 | -| [deltaSumTimestamp](/sql-reference/aggregate-functions/reference/deltasumtimestamp) | 将相邻行之间的差值相加。若差值为负,则忽略该差值。 | -| [entropy](/sql-reference/aggregate-functions/reference/entropy) | 计算一列数据的香农熵。 | -| [estimateCompressionRatio](/sql-reference/aggregate-functions/reference/estimateCompressionRatio) | 在不实际压缩给定列的情况下估算其压缩比。 | -| [exponentialMovingAverage](/sql-reference/aggregate-functions/reference/exponentialMovingAverage) | 计算在指定时间段内各数值的指数移动平均值。 | -| [exponentialTimeDecayedAvg](/sql-reference/aggregate-functions/reference/exponentialTimeDecayedAvg) | 返回时间序列在时刻 `t` 的数值的指数平滑加权移动平均值。 | -| [exponentialTimeDecayedCount](/sql-reference/aggregate-functions/reference/exponentialTimeDecayedCount) | 返回时间序列在时间点 `t` 处的累积指数衰减值。 | -| [exponentialTimeDecayedMax](/sql-reference/aggregate-functions/reference/exponentialTimeDecayedMax) | 返回时间索引为 `t` 和 `t-1` 时已计算的指数平滑移动平均值中的较大者。 | -| [exponentialTimeDecayedSum](/sql-reference/aggregate-functions/reference/exponentialTimeDecayedSum) | 返回时间序列在时间索引 `t` 处的指数平滑移动平均值之和。 | -| [first_value](/sql-reference/aggregate-functions/reference/first_value) | 它是 `any` 的别名,引入它是为了兼容窗口函数,因为在使用窗口函数时,有时需要处理 `NULL` 值(默认情况下,所有 ClickHouse 聚合函数都会忽略 `NULL` 值)。 | -| [flameGraph](/sql-reference/aggregate-functions/reference/flame_graph) | 基于堆栈跟踪列表构建火焰图的聚合函数。 | -| [groupArray](/sql-reference/aggregate-functions/reference/grouparray) | 创建一个由参数值组成的数组。可以以任意顺序将值添加到数组中(顺序不确定)。 | -| [groupArrayInsertAt](/sql-reference/aggregate-functions/reference/grouparrayinsertat) | 在数组的指定位置插入一个值。 | -| [groupArrayIntersect](/sql-reference/aggregate-functions/reference/grouparrayintersect) | 返回给定数组的交集(即所有在每个给定数组中都存在的元素)。 | -| [groupArrayLast](/sql-reference/aggregate-functions/reference/grouparraylast) | 创建由最后一个参数各个取值组成的数组。 | -| [groupArrayMovingSum](/sql-reference/aggregate-functions/reference/grouparraymovingsum) | 计算输入值的移动求和。 | -| [groupArrayMovingAvg](/sql-reference/aggregate-functions/reference/grouparraymovingavg) | 计算输入数据的移动平均值。 | -| [groupArraySample](/sql-reference/aggregate-functions/reference/grouparraysample) | 创建一个包含参数值样本的数组。结果数组的大小最多为 `max_size` 个元素。参数值会被随机选取并添加到数组中。 | -| [timeSeriesGroupArray](/sql-reference/aggregate-functions/reference/timeSeriesGroupArray) | 按时间戳对时间序列进行升序排列。 | -| [groupArraySorted](/sql-reference/aggregate-functions/reference/grouparraysorted) | 返回一个包含按升序排列的前 N 个元素的数组。 | -| [groupBitAnd](/sql-reference/aggregate-functions/reference/groupbitand) | 对一系列数值执行按位 `AND` 运算。 | -| [groupBitmap](/sql-reference/aggregate-functions/reference/groupbitmap) | 对无符号整数列执行 Bitmap 或聚合计算时,返回 UInt64 类型的基数;如果添加后缀 -State,则返回 bitmap 对象 | -| [groupBitmapAnd](/sql-reference/aggregate-functions/reference/groupbitmapand) | 在位图列上执行 AND 运算,返回 UInt64 类型的基数;如果添加后缀 -State,则返回位图对象。 | -| [groupBitmapOr](/sql-reference/aggregate-functions/reference/groupbitmapor) | 对位图列执行 OR 运算,返回类型为 UInt64 的基数;如果添加后缀 -State,则返回位图对象。等价于 `groupBitmapMerge`。 | -| [groupBitmapXor](/sql-reference/aggregate-functions/reference/groupbitmapxor) | 计算位图列的按位异或,并以 UInt64 类型返回其基数;如果使用后缀 -State,则返回一个位图对象 | -| [groupBitOr](/sql-reference/aggregate-functions/reference/groupbitor) | 对一系列数字执行按位 `OR` 运算。 | -| [groupBitXor](/sql-reference/aggregate-functions/reference/groupbitxor) | 对一系列数值执行按位 `XOR` 运算。 | -| [groupUniqArray](/sql-reference/aggregate-functions/reference/groupuniqarray) | 根据各个参数值创建一个数组。 | -| [intervalLengthSum](/sql-reference/aggregate-functions/reference/intervalLengthSum) | 计算所有区间(数轴上的线段)并集的总长度。 | -| [kolmogorovSmirnovTest](/sql-reference/aggregate-functions/reference/kolmogorovsmirnovtest) | 对来自两个总体的样本进行 Kolmogorov-Smirnov 检验。 | -| [kurtPop](/sql-reference/aggregate-functions/reference/kurtpop) | 计算一个序列的峰度。 | -| [kurtSamp](/sql-reference/aggregate-functions/reference/kurtsamp) | 计算序列的样本峰度。 | -| [largestTriangleThreeBuckets](/sql-reference/aggregate-functions/reference/largestTriangleThreeBuckets) | 对输入数据应用 Largest-Triangle-Three-Buckets 算法。 | -| [last_value](/sql-reference/aggregate-functions/reference/last_value) | 选择最后遇到的值,类似于 `anyLast`,但允许为 NULL。 | -| [mannWhitneyUTest](/sql-reference/aggregate-functions/reference/mannwhitneyutest) | 对来自两个总体的样本进行 Mann-Whitney 秩检验。 | -| [max](/sql-reference/aggregate-functions/reference/max) | 用于计算一组值中最大值的聚合函数。 | -| [maxIntersections](/sql-reference/aggregate-functions/reference/maxintersections) | 聚合函数,用于在所有区间至少有一次共同相交的前提下,计算一组区间的最大同时相交数量。 | -| [maxIntersectionsPosition](/sql-reference/aggregate-functions/reference/maxintersectionsposition) | 用于计算 maxIntersections 函数各次出现位置的聚合函数。 | -| [maxMap](/sql-reference/aggregate-functions/reference/maxmap) | 根据 `key` 数组中指定的键,计算 `value` 数组中的最大值。 | -| [meanZTest](/sql-reference/aggregate-functions/reference/meanztest) | 对来自两个总体的样本进行均值z检验。 | -| [median](/sql-reference/aggregate-functions/reference/median) | `median*` 函数是对应 `quantile*` 函数的别名。这些函数用于计算数值数据样本的中位数。 | -| [min](/sql-reference/aggregate-functions/reference/min) | 用于计算一组值中最小值的聚合函数。 | -| [minMap](/sql-reference/aggregate-functions/reference/minmap) | 按 `key` 数组中指定的键,对 `value` 数组求最小值。 | -| [quantile](/sql-reference/aggregate-functions/reference/quantile) | 计算数值序列的近似分位数。 | -| [quantileDD](/sql-reference/aggregate-functions/reference/quantileddsketch) | 计算样本的近似分位数,并对相对误差提供保证。 | -| [quantileBFloat16](/sql-reference/aggregate-functions/reference/quantilebfloat16) | 计算由 bfloat16 数值组成的样本的近似分位数。 | -| [quantileDeterministic](/sql-reference/aggregate-functions/reference/quantiledeterministic) | 计算数值数据序列的近似分位数。 | -| [quantileExact 函数](/sql-reference/aggregate-functions/reference/quantileexact) | quantileExact、quantileExactLow、quantileExactHigh、quantileExactExclusive、quantileExactInclusive 函数 | -| [quantileExactWeighted](/sql-reference/aggregate-functions/reference/quantileexactweighted) | 精确计算数值数据序列的分位数,并考虑每个元素的权重。 | -| [quantileGK](/sql-reference/aggregate-functions/reference/quantileGK) | 使用 Greenwald-Khanna 算法计算数值序列的分位数。 | -| [quantileExactWeightedInterpolated](/sql-reference/aggregate-functions/reference/quantileExactWeightedInterpolated) | 使用线性插值,在考虑每个元素权重的情况下计算数值序列的分位数。 | -| [quantileInterpolatedWeighted](/sql-reference/aggregate-functions/reference/quantileInterpolatedWeighted) | 使用线性插值计算数值数据序列的分位数,并考虑各元素的权重。 | -| [quantiles 聚合函数](/sql-reference/aggregate-functions/reference/quantiles) | quantiles, quantilesExactExclusive, quantilesExactInclusive, quantilesGK | -| [quantileTDigest](/sql-reference/aggregate-functions/reference/quantiletdigest) | 使用 t-digest 算法计算数值序列的近似分位数。 | -| [quantileTDigestWeighted](/sql-reference/aggregate-functions/reference/quantiletdigestweighted) | 使用 t-digest 算法对数值数据序列计算近似分位数。 | -| [quantileTiming](/sql-reference/aggregate-functions/reference/quantiletiming) | 按照指定精度计算数值数据序列的分位数。 | -| [quantileTimingWeighted](/sql-reference/aggregate-functions/reference/quantiletimingweighted) | 在确定的精度下,按每个序列成员的权重计算数值数据序列的分位数。 | -| [rankCorr](/sql-reference/aggregate-functions/reference/rankCorr) | 计算秩相关系数。 | -| [simpleLinearRegression](/sql-reference/aggregate-functions/reference/simplelinearregression) | 执行简单(单变量)线性回归。 | -| [singleValueOrNull](/sql-reference/aggregate-functions/reference/singlevalueornull) | 聚合函数 `singleValueOrNull` 用于实现诸如 `x = ALL (SELECT ...)` 之类的子查询运算符。它会检查数据中是否存在且仅存在一个唯一的非 NULL 值。 | -| [skewPop](/sql-reference/aggregate-functions/reference/skewpop) | 计算序列的偏度值。 | -| [skewSamp](/sql-reference/aggregate-functions/reference/skewsamp) | 计算序列的样本偏度。 | -| [sparkbar](/sql-reference/aggregate-functions/reference/sparkbar) | 该函数在区间 `[min_x, max_x]` 上,根据数值 `x` 及其出现频率(或重复次数)`y` 绘制频率直方图。 | -| [stddevPop](/sql-reference/aggregate-functions/reference/stddevpop) | 结果等于 varPop 的平方根。 | -| [stddevPopStable](/sql-reference/aggregate-functions/reference/stddevpopstable) | 其结果等于 varPop 的平方根。与 stddevPop 不同,该函数采用数值稳定的算法。 | -| [stddevSamp](/sql-reference/aggregate-functions/reference/stddevsamp) | 结果等于 varSamp 的平方根。 | -| [stddevSampStable](/sql-reference/aggregate-functions/reference/stddevsampstable) | 结果等于 varSamp 的平方根。与 varSamp 不同,该函数使用数值稳定的算法。 | -| [stochasticLinearRegression](/sql-reference/aggregate-functions/reference/stochasticlinearregression) | 此函数实现随机线性回归。它支持自定义学习率、L2 正则化系数、小批量大小等参数,并提供多种权重更新算法(Adam、简单 SGD、Momentum、Nesterov)。 | -| [stochasticLogisticRegression](/sql-reference/aggregate-functions/reference/stochasticlogisticregression) | 该函数实现了随机逻辑回归,可用于二元分类问题,支持与 stochasticLinearRegression 相同的自定义参数,且工作方式一致。 | -| [studentTTest](/sql-reference/aggregate-functions/reference/studentttest) | 对来自两个总体的样本进行 Student t 检验。 | -| [sum](/sql-reference/aggregate-functions/reference/sum) | 计算总和。仅适用于数值类型。 | -| [studentTTestOneSample](/sql-reference/aggregate-functions/reference/studentttestonesample) | 对样本与已知总体均值进行单样本 Student t 检验。 | -| [sumCount](/sql-reference/aggregate-functions/reference/sumcount) | 计算数值的总和并同时统计行数。该函数由 ClickHouse 查询优化器使用:如果查询中包含多个 `sum`、`count` 或 `avg` 函数,它们可以被替换为单个 `sumCount` 函数,以复用计算。通常不需要显式使用该函数。 | -| [sumKahan](/sql-reference/aggregate-functions/reference/sumkahan) | 使用 Kahan 补偿求和算法计算一组数的和 | -| [sumMap](/sql-reference/aggregate-functions/reference/summap) | 根据 `key` 数组中指定的键,对一个或多个 `value` 数组进行求和。返回一个数组元组:按排序顺序排列的键数组,以及对应键的求和值数组,并且在求和过程中不会发生溢出。 | -| [sumMapWithOverflow](/sql-reference/aggregate-functions/reference/summapwithoverflow) | 根据 `key` 数组中指定的键汇总一个 `value` 数组。返回一个由两个数组组成的元组:排序后的键数组,以及为相应键求和得到的值数组。与 sumMap 函数不同,它执行允许溢出的求和运算。 | -| [sumWithOverflow](/sql-reference/aggregate-functions/reference/sumwithoverflow) | 计算数值的总和,结果使用与输入参数相同的数据类型。如果总和超过该数据类型的最大值,则按溢出处理进行计算。 | -| [theilsU](/sql-reference/aggregate-functions/reference/theilsu) | `theilsU` 函数用于计算 Theils' U 不确定性系数,该值用于度量表中两列之间的关联程度。 | -| [topK](/sql-reference/aggregate-functions/reference/topk) | 返回一个数组,其中包含指定列中近似出现频率最高的值。结果数组按照这些值的近似出现频率降序排序(而不是按照值本身排序)。 | -| [topKWeighted](/sql-reference/aggregate-functions/reference/topkweighted) | 返回指定列中近似出现频率最高的各个值组成的数组。结果数组按照这些值的近似出现频率降序排序(而不是按值本身排序)。此外,还会考虑值的权重。 | -| [uniq](/sql-reference/aggregate-functions/reference/uniq) | 计算参数不同值的大致数量。 | -| [uniqCombined](/sql-reference/aggregate-functions/reference/uniqcombined) | 计算不同参数取值的近似数量。 | -| [uniqCombined64](/sql-reference/aggregate-functions/reference/uniqcombined64) | 计算不同参数值的近似个数。它与 uniqCombined 相同,但对所有数据类型都使用 64 位哈希,而不是仅对 String 数据类型使用。 | -| [uniqExact](/sql-reference/aggregate-functions/reference/uniqexact) | 精确计算不同参数值的数量。 | -| [uniqHLL12](/sql-reference/aggregate-functions/reference/uniqhll12) | 使用 HyperLogLog 算法近似计算不同参数值的数量。 | -| [uniqTheta](/sql-reference/aggregate-functions/reference/uniqthetasketch) | 使用 Theta Sketch 框架近似计算不同参数取值的数量。 | -| [varPop](/sql-reference/aggregate-functions/reference/varPop) | 计算总体方差。 | -| [varPopStable](/sql-reference/aggregate-functions/reference/varpopstable) | 返回总体方差。与 `varPop` 不同,此函数使用数值上更稳定的算法。它的运行速度较慢,但计算误差更小。 | -| [varSamp](/sql-reference/aggregate-functions/reference/varSamp) | 计算一组数据的样本方差。 | -| [varSampStable](/sql-reference/aggregate-functions/reference/varsampstable) | 计算数据集的样本方差。与 `varSamp` 不同,此函数使用数值更稳定的算法。虽然运行速度较慢,但计算误差更小。 | -| [welchTTest](/sql-reference/aggregate-functions/reference/welchttest) | 对来自两个总体的样本进行 Welch t 检验。 | -| [distinctDynamicTypes](/sql-reference/aggregate-functions/reference/distinctdynamictypes) | 计算 Dynamic 列中存储的不同数据类型的列表。 | -| [distinctJSONPaths](/sql-reference/aggregate-functions/reference/distinctjsonpaths) | 计算存储在 JSON 列中的唯一路径列表。 | -| [timeSeriesDeltaToGrid](/sql-reference/aggregate-functions/reference/timeSeriesDeltaToGrid) | 在指定网格上对时间序列数据执行类似 PromQL `delta` 计算的聚合函数。 | -| [timeSeriesInstantDeltaToGrid](/sql-reference/aggregate-functions/reference/timeSeriesInstantDeltaToGrid) | 在指定网格上对时间序列数据执行类似 PromQL `idelta` 计算的聚合函数。 | -| [timeSeriesInstantRateToGrid](/sql-reference/aggregate-functions/reference/timeSeriesInstantRateToGrid) | 在指定网格上对时间序列数据计算 PromQL 风格 irate 的聚合函数。 | -| [timeSeriesLastTwoSamples](/sql-reference/aggregate-functions/reference/timeSeriesLastTwoSamples) | 用于对时间序列数据进行重采样,以实现类似 PromQL 的 irate 和 idelta 计算的聚合函数 | -| [timeSeriesRateToGrid](/sql-reference/aggregate-functions/reference/timeSeriesRateToGrid) | 在指定网格上对时间序列数据计算类似 PromQL 中 rate() 速率的聚合函数。 | -| [timeSeriesResampleToGridWithStaleness](/sql-reference/aggregate-functions/reference/timeSeriesResampleToGridWithStaleness) | 按指定网格对时间序列数据进行重采样的聚合函数。 | -| [timeSeriesDerivToGrid](/sql-reference/aggregate-functions/reference/timeSeriesDerivToGrid) | 一种聚合函数,用于在指定网格上对时间序列数据计算类似 PromQL 的导数。 | -| [timeSeriesPredictLinearToGrid](/sql-reference/aggregate-functions/reference/timeSeriesPredictLinearToGrid) | 用于在指定网格上对时间序列数据进行类似 PromQL 的线性预测的聚合函数。 | -| [timeSeriesChangesToGrid](/sql-reference/aggregate-functions/reference/timeSeriesChangesToGrid) | 用于在指定网格上对时间序列数据计算类似 PromQL 风格变化的聚合函数。 | -| [timeSeriesResetsToGrid](/sql-reference/aggregate-functions/reference/timeSeriesResetsToGrid) | 用于在指定网格上对时间序列数据计算类似 PromQL 的重置次数的聚合函数。 | -| [groupConcat](/sql-reference/aggregate-functions/reference/groupconcat) | 从一组字符串生成一个拼接后的字符串,可选地使用分隔符分隔,并可选地限制参与拼接的元素数量上限。 | -| [quantilePrometheusHistogram](/sql-reference/aggregate-functions/reference/quantilePrometheusHistogram) | 使用线性插值计算直方图的分位数。 | - -{/*AUTOGENERATED_END*/ } + + diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/data-types/aggregatefunction.md b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/data-types/aggregatefunction.md index 130e943e9bf..8411c68a9cc 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/data-types/aggregatefunction.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/data-types/aggregatefunction.md @@ -1,5 +1,5 @@ --- -description: '关于 ClickHouse 中 AggregateFunction 数据类型的文档,该类型用于存储聚合函数的中间计算状态' +description: 'ClickHouse 中 AggregateFunction 数据类型的文档,其用于存储聚合函数的中间状态' keywords: ['AggregateFunction', 'Type'] sidebar_label: 'AggregateFunction' sidebar_position: 46 @@ -8,35 +8,28 @@ title: 'AggregateFunction 类型' doc_type: 'reference' --- - - # AggregateFunction 数据类型 - - ## 描述 {#description} -ClickHouse 中的所有[聚合函数](/sql-reference/aggregate-functions)都有 -一个特定于实现的中间状态,该状态可以被序列化为 -`AggregateFunction` 数据类型并存储在表中。通常通过 -[物化视图](../../sql-reference/statements/create/view.md)来实现这一点。 +ClickHouse 中的所有[聚合函数](/sql-reference/aggregate-functions)都有一个特定于实现的中间状态,可以序列化为 +`AggregateFunction` 数据类型并存储在表中。这通常通过 +[物化视图](../../sql-reference/statements/create/view.md) 来实现。 -有两个与 `AggregateFunction` 类型常用的聚合函数[组合器](/sql-reference/aggregate-functions/combinators): +有两个常与 `AggregateFunction` 类型搭配使用的聚合函数[组合器](/sql-reference/aggregate-functions/combinators): -- [`-State`](/sql-reference/aggregate-functions/combinators#-state) 聚合函数组合器,当将其作为后缀添加到聚合函数名称后时,会生成 `AggregateFunction` 的中间状态。 +- [`-State`](/sql-reference/aggregate-functions/combinators#-state) 聚合函数组合器,将其附加到聚合函数名后时,会生成 `AggregateFunction` 的中间状态。 - [`-Merge`](/sql-reference/aggregate-functions/combinators#-merge) 聚合函数组合器,用于从中间状态中获取聚合的最终结果。 - - ## 语法 ```sql -AggregateFunction(聚合函数名, 参数类型...) +AggregateFunction(aggregate_function_name, types_of_arguments...) ``` **参数** -* `aggregate_function_name` - 聚合函数的名称。如果该函数是参数化聚合函数,则还需要同时指定其参数。 +* `aggregate_function_name` - 聚合函数的名称。如果该函数是参数化的,则还需要指定其参数。 * `types_of_arguments` - 聚合函数参数的类型。 例如: @@ -51,15 +44,15 @@ CREATE TABLE t ``` -## 使用方法 +## 使用方法 {#usage} ### 数据插入 -要向包含 `AggregateFunction` 类型列的表中插入数据,可以使用 `INSERT SELECT` 语句,并结合聚合函数以及 +要向包含 `AggregateFunction` 类型列的表中插入数据,可以使用 `INSERT SELECT` 语句,结合聚合函数以及 [`-State`](/sql-reference/aggregate-functions/combinators#-state) 聚合函数组合器。 -例如,要向类型为 `AggregateFunction(uniq, UInt64)` 和 -`AggregateFunction(quantiles(0.5, 0.9), UInt64)` 的列中插入数据,可以使用如下带有该组合器的聚合函数。 +例如,如果要向类型为 `AggregateFunction(uniq, UInt64)` 和 +`AggregateFunction(quantiles(0.5, 0.9), UInt64)` 的列中插入数据,则需要使用以下带有组合器的聚合函数。 ```sql uniqState(UserID) @@ -67,25 +60,32 @@ quantilesState(0.5, 0.9)(SendTiming) ``` 与函数 `uniq` 和 `quantiles` 相比,`uniqState` 和 `quantilesState` -(附加了 `-State` 组合器)返回的是状态而不是最终值。 +(追加了 `-State` 组合器)返回的是状态,而不是最终值。 换句话说,它们返回的是 `AggregateFunction` 类型的值。 -在 `SELECT` 查询的结果中,`AggregateFunction` 类型的值在所有 ClickHouse 输出 -格式中都具有特定于实现的二进制表示。 +在 `SELECT` 查询的结果中,`AggregateFunction` 类型的值在所有 ClickHouse 输出格式中 +都有与具体实现相关的二进制表示。 + +有一个特殊的会话级别设置 `aggregate_function_input_format`,允许从输入值构建状态。 +它支持以下格式: + +* `state` - 带有序列化状态的二进制字符串(默认)。 + 如果你使用 `SELECT` 查询将数据导出成例如 `TabSeparated` 格式, + 那么这个导出结果可以通过 `INSERT` 查询重新加载回去。 +* `value` - 该格式要求聚合函数参数的单个值,或者在参数为多个时,一个包含这些值的元组;这些值会被反序列化以构造相应的状态 +* `array` - 该格式要求一个值的 Array,如上面 `value` 选项所述;数组中的所有元素会被聚合以形成状态 -如果您通过 `SELECT` 查询将数据导出为例如 `TabSeparated` 格式, -则可以使用 `INSERT` 查询将该导出结果重新导入。 -### 数据查询 +### 数据选择 从 `AggregatingMergeTree` 表中查询数据时,使用 `GROUP BY` 子句, 并使用与插入数据时相同的聚合函数,但要使用 [`-Merge`](/sql-reference/aggregate-functions/combinators#-merge) 组合器。 -附加了 `-Merge` 组合器的聚合函数接收一组状态,将它们合并, +在聚合函数后附加 `-Merge` 组合器时,该函数会接收一组状态值,对其进行合并, 并返回完整数据聚合的结果。 -例如,下面两个查询返回相同的结果: +例如,下面这两个查询将返回相同的结果: ```sql SELECT uniq(UserID) FROM table @@ -98,11 +98,9 @@ SELECT uniqMerge(state) FROM (SELECT uniqState(UserID) AS state FROM table GROUP 参见 [AggregatingMergeTree](../../engines/table-engines/mergetree-family/aggregatingmergetree.md) 引擎描述。 - - ## 相关内容 {#related-content} -- 博客:[在 ClickHouse 中使用聚合函数组合器](https://clickhouse.com/blog/aggregate-functions-combinators-in-clickhouse-for-arrays-maps-and-states) +- 博客:[在 ClickHouse 中使用聚合组合器](https://clickhouse.com/blog/aggregate-functions-combinators-in-clickhouse-for-arrays-maps-and-states) - [MergeState](/sql-reference/aggregate-functions/combinators#-mergestate) 组合器。 -- [State](/sql-reference/aggregate-functions/combinators#-state) 组合器。 +- [State](/sql-reference/aggregate-functions/combinators#-state) 组合器。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/data-types/data-types-binary-encoding.md b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/data-types/data-types-binary-encoding.md index 8e16556bcb8..493edae868c 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/data-types/data-types-binary-encoding.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/data-types/data-types-binary-encoding.md @@ -1,5 +1,5 @@ --- -description: '数据类型二进制编码规范说明文档' +description: '数据类型二进制编码规范文档' sidebar_label: '数据类型二进制编码规范' sidebar_position: 56 slug: /sql-reference/data-types/data-types-binary-encoding @@ -7,16 +7,12 @@ title: '数据类型二进制编码规范' doc_type: 'reference' --- - - # 数据类型二进制编码规范 -本规范描述了一种用于对 ClickHouse 数据类型进行二进制编解码的格式。该格式用于 `Dynamic` 列的[二进制序列化](dynamic.md#binary-output-format),并且在相应设置下,可用于输入/输出格式 [RowBinaryWithNamesAndTypes](/interfaces/formats/RowBinaryWithNamesAndTypes) 和 [Native](/interfaces/formats/Native)。 - -下表描述了每种数据类型在二进制格式中的表示方式。每种数据类型的编码由 1 个字节的类型标识以及一些可选的附加信息组成。 -在二进制编码中,`var_uint` 表示长度使用可变长度数量(Variable-Length Quantity)压缩方式进行编码。 - +本规范描述了一种用于对 ClickHouse 数据类型进行二进制编码和解码的二进制格式。该格式用于 `Dynamic` 列的[二进制序列化](dynamic.md#binary-output-format),并且在相应设置下可用于输入/输出格式 [RowBinaryWithNamesAndTypes](/interfaces/formats/RowBinaryWithNamesAndTypes) 和 [Native](/interfaces/formats/Native)。 +下表描述了每种数据类型在二进制格式中的表示方式。每种数据类型的编码由 1 个字节的类型标识和一些可选的附加信息组成。 +二进制编码中的 `var_uint` 表示大小使用可变长度整数(Variable-Length Quantity)压缩方式进行编码。 | ClickHouse 数据类型 | 二进制编码 | | --------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -74,42 +70,40 @@ doc_type: 'reference' | `Time64(P)` | `0x34` | | `QBit(T, N)` | `0x36` | +对于类型 `JSON`,字节 `uint8_serialization_version` 表示序列化版本。当前版本固定为 0,但如果将来为 `JSON` 类型引入新的参数,该值可能会发生变化。 +### Interval 间隔种类的二进制编码 {#interval-kind-binary-encoding} -对于 `JSON` 类型,字节 `uint8_serialization_version` 用于指示序列化版本。目前该版本始终为 0,但如果将来为 `JSON` 类型引入新的参数,则该值可能会发生变化。 - -### Interval 种类的二进制编码 {#interval-kind-binary-encoding} - -下表描述了 `Interval` 数据类型中不同 Interval 种类的编码方式。 +下表说明了 `Interval` 数据类型中不同间隔种类的二进制编码方式。 -| Interval kind | Binary encoding | -|---------------|-----------------| -| `Nanosecond` | `0x00` | -| `Microsecond` | `0x01` | -| `Millisecond` | `0x02` | -| `Second` | `0x03` | -| `Minute` | `0x04` | -| `Hour` | `0x05` | -| `Day` | `0x06` | -| `Week` | `0x07` | -| `Month` | `0x08` | -| `Quarter` | `0x09` | -| `Year` | `0x1A` | +| 间隔种类 (Interval kind) | 二进制编码 (Binary encoding) | +|--------------------------|------------------------------| +| `Nanosecond` | `0x00` | +| `Microsecond` | `0x01` | +| `Millisecond` | `0x02` | +| `Second` | `0x03` | +| `Minute` | `0x04` | +| `Hour` | `0x05` | +| `Day` | `0x06` | +| `Week` | `0x07` | +| `Month` | `0x08` | +| `Quarter` | `0x09` | +| `Year` | `0x1A` | ### 聚合函数参数的二进制编码 {#aggregate-function-parameter-binary-encoding} -下表描述了 `AggregateFunction` 和 `SimpleAggregateFunction` 的参数是如何编码的。 -参数的编码由 1 个字节的参数类型标识符和参数值本身组成。 +下表描述了 `AggregateFunction` 和 `SimpleAggregateFunction` 的参数是如何进行编码的。 +每个参数的编码由 1 个用于指示参数类型的字节和参数值本身组成。 -| Parameter type | Binary encoding | +| 参数类型 | 二进制编码 | |--------------------------|--------------------------------------------------------------------------------------------------------------------------------| | `Null` | `0x00` | | `UInt64` | `0x01` | | `Int64` | `0x02` | | `UInt128` | `0x03` | | `Int128` | `0x04` | -| `UInt128` | `0x05` | -| `Int128` | `0x06` | +| `UInt256` | `0x05` | +| `Int256` | `0x06` | | `Float64` | `0x07` | | `Decimal32` | `0x08` | | `Decimal64` | `0x09` | @@ -126,4 +120,4 @@ doc_type: 'reference' | `Object` | `0x14...` | | `AggregateFunctionState` | `0x15` | | `Negative infinity` | `0xFE` | -| `Positive infinity` | `0xFF` | +| `Positive infinity` | `0xFF` | \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/arithmetic-functions.md b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/arithmetic-functions.md index 37c16a6d803..3634cc8c4c8 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/arithmetic-functions.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/arithmetic-functions.md @@ -1,28 +1,24 @@ --- -description: '算术函数参考文档' +description: '算术函数说明文档' sidebar_label: '算术' slug: /sql-reference/functions/arithmetic-functions title: '算术函数' doc_type: 'reference' --- - - # 算术函数 - - ## 概览 -算术函数适用于任意两个操作数,其类型为 `UInt8`、`UInt16`、`UInt32`、`UInt64`、`Int8`、`Int16`、`Int32`、`Int64`、`Float32` 或 `Float64`。 +算术函数适用于任意两个操作数,其类型可以是 `UInt8`、`UInt16`、`UInt32`、`UInt64`、`Int8`、`Int16`、`Int32`、`Int64`、`Float32` 或 `Float64`。 -在执行运算之前,两个操作数都会被转换为结果类型。结果类型按如下规则确定(除非在下面的函数文档中另有说明): +在执行运算之前,两个操作数都会被转换为结果类型。结果类型按如下规则确定(除非下面函数文档中另有说明): -* 如果两个操作数的宽度都不超过 32 位,则结果类型的大小为这两个操作数中较大类型的下一个更大类型(整数位宽提升)。例如,`UInt8 + UInt16 = UInt32` 或 `Float32 * Float32 = Float64`。 -* 如果其中一个操作数的宽度为 64 位或以上,则结果类型的大小与这两个操作数中较大的那个相同。例如,`UInt32 + UInt128 = UInt128` 或 `Float32 * Float64 = Float64`。 -* 如果其中一个操作数是有符号类型,则结果类型也将是有符号类型,否则为无符号类型。例如,`UInt32 * Int32 = Int64`。 +* 如果两个操作数的宽度都不超过 32 位,则结果类型的大小为两者中较大类型之后的下一个更大类型的大小(整数大小提升)。例如,`UInt8 + UInt16 = UInt32` 或 `Float32 * Float32 = Float64`。 +* 如果其中一个操作数为 64 位或更多位宽,则结果类型的大小与两者中较大的操作数类型相同。例如,`UInt32 + UInt128 = UInt128` 或 `Float32 * Float64 = Float64`。 +* 如果其中一个操作数是有符号类型,则结果类型也将是有符号类型,否则它将是无符号类型。例如,`UInt32 * Int32 = Int64`。 -这些规则确保结果类型是在所有可能结果中仍然能够完整表示的最小类型。虽然这在数值范围边界附近存在发生溢出的风险,但它确保计算可以在最多 64 位的原生整数宽度下高效执行。这种行为还保证了与许多将 64 位整数(BIGINT)作为最大整数类型的数据库之间的兼容性。 +这些规则确保结果类型将是能够表示所有可能结果的最小类型。虽然这在数值范围边界附近引入了溢出的风险,但它确保了可以使用最大本机 64 位整数宽度进行快速计算。这种行为还保证了与许多将 64 位整数(BIGINT)作为最大整数类型的其他数据库之间的兼容性。 示例: @@ -36,1278 +32,14 @@ SELECT toTypeName(0), toTypeName(0 + 0), toTypeName(0 + 0 + 0), toTypeName(0 + 0 └───────────────┴────────────────────────┴─────────────────────────────────┴──────────────────────────────────────────┘ ``` -溢出发生的方式与 C++ 相同。 +溢出的产生方式与 C++ 相同。 {/* - 下面标签内的内容会在文档框架构建期间被 - 由 system.functions 生成的文档替换。请不要修改或移除这些标签。 + 下面标签内的内容会在文档框架构建时被替换为 + 由 system.functions 生成的文档。请不要修改或移除这些标签。 参见:https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## abs - -引入版本:v1.1 - -计算 `x` 的绝对值。如果 `x` 是无符号类型,则结果与原值相同(无变化)。如果 `x` 是有符号类型,则返回一个无符号数。 - -**语法** - -```sql -abs(x) -``` - -**参数** - -* `x` — 要取绝对值的数值 - -**返回值** - -`x` 的绝对值 - -**示例** - -**使用示例** - -```sql title=Query -SELECT abs(-0.5) -``` - -```response title=Response -0.5 -``` - - -## avg2 - -自 v25.11 起引入 - -计算并返回提供的参数的平均值。 -支持数值类型和时间类型。 - -**语法** - -```sql -avg2(x1, x2]) -``` - -**参数** - -* `x1, x2` — 接受两个用于求平均值的参数。 - -**返回值** - -返回所提供参数的平均值,并将结果提升为兼容的最大数据类型。 - -**示例** - -**数值类型** - -```sql title=Query -SELECT avg2(toUInt8(3), 1.0) AS result, toTypeName(result) AS type; --- 返回的类型为 Float64,因为 UInt8 必须提升至 64 位以进行比较。 -``` - -```response title=Response -┌─result─┬─type────┐ -│ 2 │ Float64 │ -└────────┴─────────┘ -``` - -**Decimal 类型** - -```sql title=Query -SELECT avg2(toDecimal32(1, 2), 2) AS result, toTypeName(result) AS type; -``` - -```response title=Response -┌─result─┬─type──────────┐ -│ 1.5 │ Decimal(9, 2) │ -└────────┴───────────────┘ -``` - -**日期类型** - -```sql title=Query -SELECT avg2(toDate('2025-01-01'), toDate('2025-01-05')) AS result, toTypeName(result) AS type; -``` - -```response title=Response -┌─────result─┬─type─┐ -│ 2025-01-03 │ Date │ -└────────────┴──────┘ -``` - -**DateTime 类型** - -```sql title=Query -SELECT avg2(toDateTime('2025-01-01 00:00:00'), toDateTime('2025-01-03 12:00:00')) AS result, toTypeName(result) AS type; -``` - -```response title=Response -┌──────────────result─┬─type─────┐ -│ 2025-01-02 06:00:00 │ DateTime │ -└─────────────────────┴──────────┘ -``` - -**Time64 类型** - -```sql title=Query -SELECT avg2(toTime64('12:00:00', 0), toTime64('14:00:00', 0)) AS result, toTypeName(result) AS type; -``` - -```response title=Response -┌───result─┬─type──────┐ -│ 13:00:00 │ Time64(0) │ -└──────────┴───────────┘ -``` - - -## byteSwap - -首次引入于:v23.10 - -反转整数的字节顺序,即改变其[字节序](https://en.wikipedia.org/wiki/Endianness)。 - -下面的示例可以按如下方式理解: - -1. 将十进制整数转换为其在大端字节序下的十六进制表示,例如:3351772109 -> C7 C7 FB CD(4 个字节) -2. 反转字节顺序,例如:C7 C7 FB CD -> CD FB C7 C7 -3. 在假定为大端字节序的情况下,将结果转换回整数,例如:CD FB C7 C7 -> 3455829959 - 此函数的一个用例是对 IPv4 地址进行字节反转: - -```result -┌─toIPv4(byteSwap(toUInt32(toIPv4('205.251.199.199'))))─┐ -│ 199.199.251.205 │ -└───────────────────────────────────────────────────────┘ -``` - -**语法** - -```sql -byteSwap(x) -``` - -**参数** - -* `x` — 一个整数值。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回字节顺序被反转后的 `x`。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT byteSwap(3351772109) -``` - -```response title=Response -3455829959 -``` - -**8 位** - -```sql title=Query -SELECT byteSwap(54) -``` - -```response title=Response -54 -``` - -**16 位** - -```sql title=Query -SELECT byteSwap(4135) -``` - -```response title=Response -10000 -``` - -**32 位** - -```sql title=Query -SELECT byteSwap(3351772109) -``` - -```response title=Response -3455829959 -``` - -**64 位** - -```sql title=Query -SELECT byteSwap(123294967295) -``` - -```response title=Response -18439412204227788800 -``` - - -## divide - -自 v1.1 版本引入 - -计算两个值 `a` 和 `b` 的商。结果类型始终为 [Float64](/sql-reference/data-types/float)。 -整数除法由 `intDiv` 函数实现。 - -:::note -除以 `0` 会返回 `inf`、`-inf` 或 `nan`。 -::: - -**语法** - -```sql -divide(x, y) -``` - -**参数** - -* `x` — 被除数;`y` — 除数 - -**返回值** - -x 除以 y 的商 - -**示例** - -**两个数相除** - -```sql title=Query -SELECT divide(25,5) AS quotient, toTypeName(quotient) -``` - -```response title=Response -5 Float64 -``` - -**除以零** - -```sql title=Query -SELECT divide(25,0) -``` - -```response title=Response -inf -``` - - -## divideDecimal - -引入版本:v22.12 - -对两个 Decimal 数执行除法运算。结果值类型为 [Decimal256](/sql-reference/data-types/decimal)。 -结果小数位数可以通过 `result_scale` 参数显式指定(取值范围为 `[0, 76]` 的常量整型)。如果未指定,则结果的小数位数为给定参数中最⼤的小数位数。 - -:::note -该函数的运行速度明显慢于常规的 `divide`。 -如果并不需要精确控制小数位数,或更需要快速计算,请考虑使用 [divide](#divide)。 -::: - -**语法** - -```sql -divideDecimal(x, y[, result_scale]) -``` - -**参数** - -* `x` — 第一个值:[Decimal](/sql-reference/data-types/decimal). - `y` — 第二个值:[Decimal](/sql-reference/data-types/decimal). - `result_scale` — 结果的小数位数。类型为 [Int/UInt](/sql-reference/data-types/int-uint). - -**返回值** - -按指定小数位数进行除法运算的结果。[`Decimal256`](/sql-reference/data-types/decimal) - -**示例** - -**示例 1** - -```sql title=Query -divideDecimal(toDecimal256(-12, 0), toDecimal32(2.1, 1), 10) -``` - -```response title=Response -┌─divideDecimal(toDecimal256(-12, 0), toDecimal32(2.1, 1), 10)─┐ -│ -5.7142857142 │ -└──────────────────────────────────────────────────────────────┘ -``` - -**示例 2** - -```sql title=Query -SELECT toDecimal64(-12, 1) / toDecimal32(2.1, 1); -SELECT toDecimal64(-12, 1) as a, toDecimal32(2.1, 1) as b, divideDecimal(a, b, 1), divideDecimal(a, b, 5); -``` - -```response title=Response -┌─divide(toDecimal64(-12, 1), toDecimal32(2.1, 1))─┐ -│ -5.7 │ -└──────────────────────────────────────────────────┘ -┌───a─┬───b─┬─divideDecimal(toDecimal64(-12, 1), toDecimal32(2.1, 1), 1)─┬─divideDecimal(toDecimal64(-12, 1), toDecimal32(2.1, 1), 5)─┐ -│ -12 │ 2.1 │ -5.7 │ -5.71428 │ -└─────┴─────┴────────────────────────────────────────────────────────────┴────────────────────────────────────────────────────────────┘ -``` - - -## divideOrNull - -引入版本:v25.5 - -与 `divide` 相同,但在除数为零时返回 NULL。 - -**语法** - -```sql -divideOrNull(x, y) -``` - -**参数** - -* `x` — 被除数;`y` — 除数 - -**返回值** - -x 除以 y 的商,或 NULL。 - -**示例** - -**除以零** - -```sql title=Query -SELECT divideOrNull(25, 0) -``` - -```response title=Response -\N -``` - - -## gcd - -自 v1.1 起引入 - -返回两个值 a 和 b 的最大公约数。 - -当发生除以零或将最小负数除以负一的情况时会抛出异常。 - -**语法** - -```sql -gcd(x, y) -``` - -**参数** - -* `x` — 第一个整数;`y` — 第二个整数 - -**返回值** - -`x` 和 `y` 的最大公约数。 - -**示例** - -**使用示例** - -```sql title=Query -SELECT gcd(12, 18) -``` - -```response title=Response -6 -``` - - -## ifNotFinite - -引入于:v20.3 - -用于检查浮点数值是否为有限值。 - -你也可以使用[三元运算符](/sql-reference/functions/conditional-functions#if)实现类似的结果:`isFinite(x) ? x : y`。 - -**语法** - -```sql -ifNotFinite(x,y) -``` - -**参数** - -* `x` — 用于检查是否为无穷大的值。[`Float*`](/sql-reference/data-types/float) -* `y` — 备用值。[`Float*`](/sql-reference/data-types/float) - -**返回值** - -* 当 `x` 为有限值时,返回 `x`。 -* 当 `x` 为非有限值时,返回 `y`。 - -**示例** - -**用法示例** - -```sql title=Query -SELECT 1/0 AS infimum, ifNotFinite(infimum,42) -``` - -```response title=Response -inf 42 -``` - - -## intDiv - -引入于:v1.1 - -对两个值 `x` 和 `y` 执行整数除法 `x / y`。换句话说,它计算向下取整到不大于真实结果的最大整数的商。 - -结果与被除数(第一个参数)具有相同的位宽。 - -当除数为零、商超出被除数类型的取值范围,或将最小负数除以 -1 时,会抛出异常。 - -**语法** - -```sql -intDiv(x, y) -``` - -**参数** - -* `x` — 左操作数。 - `y` — 右操作数。 - -**返回值** - -`x` 除以 `y` 的整数除法结果 - -**示例** - -**两个浮点数之间的整数除法** - -```sql title=Query -SELECT intDiv(toFloat64(1), 0.001) AS res, toTypeName(res) -``` - -```response title=Response -┌──res─┬─toTypeName(intDiv(toFloat64(1), 0.001))─┐ -│ 1000 │ Int64 │ -└──────┴─────────────────────────────────────────┘ -``` - -**商超出被除数的取值范围** - -```sql title=Query -SELECT -intDiv(1, 0.001) AS res, -toTypeName(res) -``` - -```response title=Response -服务器返回异常(版本 23.2.1): -代码: 153. DB::Exception: 来自 localhost:9000。DB::Exception: -无法执行整数除法,因为会产生无穷大或过大的数值: -处理 intDiv(1, 0.001) AS res, toTypeName(res) 时发生错误。 -(ILLEGAL_DIVISION) -``` - - -## intDivOrNull - -引入于:v25.5 - -与 `intDiv` 相同,但在除数为零或将最小负整数除以负一时返回 NULL。 - -**语法** - -```sql -intDivOrNull(x, y) -``` - -**参数** - -* `x` — 左侧操作数。[`(U)Int*`](/sql-reference/data-types/int-uint) -* `y` — 右侧操作数。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -`x` 除以 `y` 的整数除法结果,或 NULL。 - -**示例** - -**整数除以零** - -```sql title=Query -SELECT intDivOrNull(1, 0) -``` - -```response title=Response -\N -``` - -**最小负数除以 -1** - -```sql title=Query -SELECT intDivOrNull(-9223372036854775808, -1) -``` - -```response title=Response -\N -``` - - -## intDivOrZero - -引入版本:v1.1 - -与 `intDiv` 相同,但在除数为零或将最小负整数除以负一时返回零。 - -**语法** - -```sql -intDivOrZero(a, b) -``` - -**参数** - -* `a` — 左侧运算数。[`(U)Int*`](/sql-reference/data-types/int-uint) -* `b` — 右侧运算数。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -`a` 和 `b` 的整数除法结果,或零。 - -**示例** - -**整数除以零** - -```sql title=Query -SELECT intDivOrZero(1, 0) -``` - -```response title=Response -0 -``` - -**将最小负数除以 −1** - -```sql title=Query -SELECT intDivOrZero(0.05, -1) -``` - -```response title=Response -0 -``` - - -## isFinite - -自 v1.1 起引入 - -如果 Float32 或 Float64 参数既不是无穷大也不是 `NaN`,则返回 `1`,否则返回 `0`。 - -**语法** - -```sql -isFinite(x) -``` - -**参数** - -* `x` — 要检查其是否为有限数的数字。[`Float*`](/sql-reference/data-types/float) - -**返回值** - -如果 x 既不是无穷大也不是 `NaN`,则返回 `1`,否则返回 `0`。 - -**示例** - -**测试一个数是否为有限数** - -```sql title=Query -SELECT isFinite(inf) -``` - -```response title=Response -0 -``` - - -## isInfinite - -在 v1.1 中引入 - -如果 Float32 或 Float64 参数为无穷大,则返回 `1`,否则函数返回 `0`。 -请注意,对于 `NaN` 会返回 `0`。 - -**语法** - -```sql -isInfinite(x) -``` - -**参数** - -* `x` — 要检查是否为无穷大的数值。[`Float*`](/sql-reference/data-types/float) - -**返回值** - -如果 x 是无穷大则为 `1`,否则为 `0`(包括 `NaN` 在内)。 - -**示例** - -**测试一个数是否为无穷大** - -```sql title=Query -SELECT isInfinite(inf), isInfinite(NaN), isInfinite(10)) -``` - -```response title=Response -1 0 0 -``` - - -## isNaN - -引入版本:v1.1 - -如果 Float32 或 Float64 类型的参数为 `NaN`,则返回 `1`,否则返回 `0`。 - -**语法** - -```sql -isNaN(x) -``` - -**参数** - -* `x` — 要判断是否为 `NaN` 的参数。[`Float*`](/sql-reference/data-types/float) - -**返回值** - -若为 `NaN`,则返回 `1`,否则返回 `0` - -**示例** - -**使用示例** - -```sql title=Query -SELECT isNaN(NaN) -``` - -```response title=Response -1 -``` - - -## lcm - -引入版本:v1.1 - -返回两个值 `x` 和 `y` 的最小公倍数。 - -在发生除以零或将最小负值除以负一时会抛出异常。 - -**语法** - -```sql -lcm(x, y) -``` - -**参数** - -* `x` — 第一个整数。[`(U)Int*`](/sql-reference/data-types/int-uint) -* `y` — 第二个整数。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回 `x` 和 `y` 的最小公倍数。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT lcm(6, 8) -``` - -```response title=Response -24 -``` - - -## max2 - -在 v21.11 版本中引入 - -返回两个数值 `x` 和 `y` 中较大的一个。 - -**语法** - -```sql -max2(x, y) -``` - -**参数** - -* `x` — 第一个值 [`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) -* `y` — 第二个值 [`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) - -**返回值** - -返回 `x` 和 `y` 中较大的值。[`Float64`](/sql-reference/data-types/float) - -**示例** - -**用法示例** - -```sql title=Query -SELECT max2(-1, 2) -``` - -```response title=Response -2 -``` - - -## midpoint - -引入版本:v25.11 - -计算并返回所提供参数的平均值。 -支持数值类型和时间类型。 - -**语法** - -```sql -midpoint(x1[, x2, ...]) -``` - -**参数** - -* `x1[, x2, ...]` — 接受一个或多个用于求平均值的值。 - -**返回值** - -返回所提供参数的平均值,并将类型提升为兼容的最高等级类型。 - -**示例** - -**数值类型** - -```sql title=Query -SELECT midpoint(1, toUInt8(3), 0.5) AS result, toTypeName(result) AS type; --- 返回的类型为 Float64,因为 UInt8 必须提升至 64 位以进行比较。 -``` - -```response title=Response -┌─result─┬─type────┐ -│ 1.5 │ Float64 │ -└────────┴─────────┘ -``` - -**Decimal 类型** - -```sql title=Query -SELECT midpoint(toDecimal32(1.5, 2), toDecimal32(1, 1), 2) AS result, toTypeName(result) AS type; -``` - -```response title=Response -┌─result─┬─type──────────┐ -│ 1.5 │ Decimal(9, 2) │ -└────────┴───────────────┘ -``` - -**日期类型** - -```sql title=Query -SELECT midpoint(toDate('2025-01-01'), toDate('2025-01-05')) AS result, toTypeName(result) AS type; -``` - -```response title=Response -┌─────result─┬─type─┐ -│ 2025-01-03 │ Date │ -└────────────┴──────┘ -``` - -**DateTime 类型** - -```sql title=Query -SELECT midpoint(toDateTime('2025-01-01 00:00:00'), toDateTime('2025-01-03 12:00:00')) AS result, toTypeName(result) AS type; -``` - -```response title=Response -┌──────────────result─┬─type─────┐ -│ 2025-01-02 06:00:00 │ DateTime │ -└─────────────────────┴──────────┘ -``` - -**Time64 类型** - -```sql title=Query -SELECT midpoint(toTime64('12:00:00', 0), toTime64('14:00:00', 0)) AS result, toTypeName(result) AS type; -``` - -```response title=Response -┌───result─┬─type──────┐ -│ 13:00:00 │ Time64(0) │ -└──────────┴───────────┘ -``` - - -## min2 - -引入于:v21.11 - -返回两个数值 `x` 和 `y` 中较小的一个。 - -**语法** - -```sql -min2(x, y) -``` - -**参数** - -* `x` — 第一个值 [`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) -* `y` — 第二个值 [`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) - -**返回值** - -返回 `x` 和 `y` 中较小的值,类型为 [`Float64`](/sql-reference/data-types/float)。 - -**示例** - -**使用示例** - -```sql title=Query -SELECT min2(-1, 2) -``` - -```response title=Response --1 -``` - - -## minus - -引入自:v1.1 - -计算两个值 `a` 和 `b` 的差。结果始终为有符号数。 -与 `plus` 类似,可以从日期或日期时间值中减去一个整数。 -此外,支持日期时间值之间的减法运算,结果为它们之间的时间差。 - -**语法** - -```sql -minus(x, y) -``` - -**参数** - -* `x` — 被减数。 -* `y` — 减数。 - -**返回值** - -x 减 y - -**示例** - -**两数相减** - -```sql title=Query -SELECT minus(10, 5) -``` - -```response title=Response -5 -``` - -**整数与日期相减** - -```sql title=Query -SELECT minus(toDate('2025-01-01'),5) -``` - -```response title=Response -2024-12-27 -``` - - -## modulo - -引入版本:v1.1 - -计算两个值 a 被 b 相除所得的余数。 - -如果两个输入都是整数,结果类型为整数。如果其中一个输入是浮点数,结果类型为 Float64。 - -余数的计算方式与 C++ 相同。对负数使用截断除法。 - -当除以零或将最小可表示的负数除以负一时,会抛出异常。 - -**语法** - -```sql -modulo(a, b) -``` - -**别名**: `mod` - -**参数** - -* `a` — 被除数;`b` — 除数(模数) - -**返回值** - -`a % b` 的余数 - -**示例** - -**用法示例** - -```sql title=Query -SELECT modulo(5, 2) -``` - -```response title=Response -1 -``` - - -## moduloOrNull - -引入版本:v25.5 - -计算 `a` 除以 `b` 时的余数。与函数 `modulo` 类似,不同之处在于当右侧参数为 0 时,`moduloOrNull` 将返回 NULL。 - -**语法** - -```sql -moduloOrNull(x, y) -``` - -**别名**: `modOrNull` - -**参数** - -* `x` — 被除数。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) -* `y` — 除数(模数)。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) - -**返回值** - -返回 `x` 除以 `y` 的余数;如果除数为零,则返回 null。 - -**示例** - -**除数为零时的 moduloOrNull** - -```sql title=Query -SELECT moduloOrNull(5, 0) -``` - -```response title=Response -\N -``` - - -## moduloOrZero - -自 v20.3 起引入 - -与 `modulo` 类似,但当除数为零时返回零,而不是像 `modulo` 函数那样抛出异常。 - -**语法** - -```sql -moduloOrZero(a, b) -``` - -**参数** - -* `a` — 被除数。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) -* `b` — 除数(模数)。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) - -**返回值** - -返回 a % b 的余数,当除数为 `0` 时返回 `0`。 - -**示例** - -**用法示例** - -```sql title=Query -SELECT moduloOrZero(5, 0) -``` - -```response title=Response -0 -``` - - -## multiply - -自 v1.1 起提供 - -计算两个值 `x` 和 `y` 的乘积。 - -**语法** - -```sql -multiply(x, y) -``` - -**参数** - -* `x` — 因数。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) -* `y` — 因数。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) - -**返回值** - -返回 x 和 y 的乘积。 - -**示例** - -**两个数相乘** - -```sql title=Query -SELECT multiply(5,5) -``` - -```response title=Response -25 -``` - - -## multiplyDecimal - -引入于:v22.12 - -对两个十进制数执行乘法运算。结果值的类型为 [Decimal256](/sql-reference/data-types/decimal)。 -可以通过 `result_scale` 参数(取值范围为 `[0, 76]` 的常量整数)显式指定结果的小数位(scale)。如果未指定,结果的小数位将采用传入参数中较大的那个小数位。 - -:::note -这些函数的运行速度明显慢于常规的 `multiply`。 -如果你并不真正需要严格控制精度且/或需要快速计算,请考虑使用 [multiply](#multiply) -::: - -**语法** - -```sql -multiplyDecimal(a, b[, result_scale]) -``` - -**参数** - -* `a` — 第一个值。[`Decimal`](/sql-reference/data-types/decimal) -* `b` — 第二个值。[`Decimal`](/sql-reference/data-types/decimal) -* `result_scale` — 结果的小数位数。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -按指定小数位数进行乘法运算的结果。类型:[`Decimal256`](/sql-reference/data-types/decimal) - -**示例** - -**用法示例** - -```sql title=Query -SELECT multiplyDecimal(toDecimal256(-12, 0), toDecimal32(-2.1, 1), 1) -``` - -```response title=Response -25.2 -``` - -**与普通乘法的区别** - -```sql title=Query -SELECT multiplyDecimal(toDecimal256(-12, 0), toDecimal32(-2.1, 1), 1) -``` - -```response title=Response -┌─multiply(toDecimal64(-12.647, 3), toDecimal32(2.1239, 4))─┐ -│ -26.8609633 │ -└───────────────────────────────────────────────────────────┘ -┌─multiplyDecimal(toDecimal64(-12.647, 3), toDecimal32(2.1239, 4))─┐ -│ -26.8609 │ -└──────────────────────────────────────────────────────────────────┘ -``` - -**Decimal 类型溢出** - -```sql title=Query -SELECT - toDecimal64(-12.647987876, 9) AS a, - toDecimal64(123.967645643, 9) AS b, - multiplyDecimal(a, b); -SELECT - toDecimal64(-12.647987876, 9) AS a, - toDecimal64(123.967645643, 9) AS b, - a * b; -``` - -```response title=Response -┌─────────────a─┬─────────────b─┬─multiplyDecimal(toDecimal64(-12.647987876, 9), toDecimal64(123.967645643, 9))─┐ -│ -12.647987876 │ 123.967645643 │ -1567.941279108 │ -└───────────────┴───────────────┴───────────────────────────────────────────────────────────────────────────────┘ -服务器返回异常(版本 22.11.1): -代码: 407. DB::Exception: 来自 localhost:9000。DB::Exception: 十进制运算溢出: -处理 toDecimal64(-12.647987876, 9) AS a, toDecimal64(123.967645643, 9) AS b, a * b 时发生错误。(DECIMAL_OVERFLOW) -``` - - -## negate - -自 v1.1 起引入 - -对参数 `x` 取相反数。结果始终为带符号数。 - -**语法** - -```sql -negate(x) -``` - -**参数** - -* `x` — 要取相反数的值。 - -**返回值** - -返回 -x - -**示例** - -**使用示例** - -```sql title=Query -SELECT negate(10) -``` - -```response title=Response --10 -``` - - -## plus - -引入于:v1.1 - -计算两个值 `x` 和 `y` 的和。别名:`x + y`(运算符)。 -可以将整数与日期或日期时间相加。前一种运算会增加日期中的天数,后一种运算会增加日期时间中的秒数。 - -**语法** - -```sql -plus(x, y) -``` - -**参数** - -* `x` — 左侧操作数。 - `y` — 右侧操作数。 - -**返回值** - -返回 x 和 y 相加的结果。 - -**示例** - -**两数相加** - -```sql title=Query -SELECT plus(5,5) -``` - -```response title=Response -10 -``` - -**将整数与日期相加** - -```sql title=Query -SELECT plus(toDate('2025-01-01'),5) -``` - -```response title=Response -2025-01-06 -``` - - -## positiveModulo - -引入版本:v22.11 - -计算 `x` 除以 `y` 的余数。与函数 `modulo` 类似,但 `positiveModulo` 始终返回非负数。 - -**语法** - -```sql -positiveModulo(x, y) -``` - -**别名**: `positive_modulo`, `pmod` - -**参数** - -* `x` — 被除数。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) -* `y` — 除数(模数)。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) - -**返回值** - -返回 `x` 与不大于 `x` 且能被 `y` 整除的最近整数之差。 - -**示例** - -**用法示例** - -```sql title=Query -SELECT positiveModulo(-1, 10) -``` - -```response title=Response -9 -``` - - -## positiveModuloOrNull - -引入于:v25.5 - -计算 `a` 除以 `b` 的余数。与函数 `positiveModulo` 类似,但如果右侧参数为 0,`positiveModuloOrNull` 将返回 NULL。 - -**语法** - -```sql -positiveModuloOrNull(x, y) -``` - -**别名**: `positive_modulo_or_null`, `pmodOrNull` - -**参数** - -* `x` — 被除数。[`(U)Int*`](/sql-reference/data-types/int-uint)/[`Float32/64`](/sql-reference/data-types/float)。 -* `y` — 除数(模数)。[`(U)Int*`](/sql-reference/data-types/int-uint)/[`Float32/64`](/sql-reference/data-types/float)。 - -**返回值** - -返回 `x` 与不大于 `x` 且能被 `y` 整除的最近整数之间的差值;当除数为零时返回 `null`。 - -**示例** - -**positiveModuloOrNull** - -```sql title=Query -SELECT positiveModuloOrNull(5, 0) -``` - -```response title=Response -\N -``` - -{/*AUTOGENERATED_END*/ } +{/*AUTOGENERGED_END*/ } diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/array-functions.md b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/array-functions.md index ccbcb43070f..41c759faca5 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/array-functions.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/array-functions.md @@ -6,5006 +6,19 @@ title: '数组函数' doc_type: 'reference' --- - - # 数组函数 {/* - 下方标签中的内容会在文档框架构建时被替换为 - 由 system.functions 生成的文档。 - 请勿修改或删除这些标签。 + 下面标签的内部内容会在文档框架构建时 + 被从 system.functions 生成的文档所替换。请不要修改或删除这些标签。 参见:https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## array - -引入于:v1.1 - -根据函数参数创建一个数组。 - -参数必须是常量,并且其类型必须具有一个共同的超类型。 -必须至少传入一个参数,否则无法确定要创建哪种类型的数组。 -这意味着不能使用此函数来创建空数组。若要创建空数组,请使用 `emptyArray*` 函数。 - -可以使用 `[ ]` 运算符实现相同的功能。 - -**语法** - -```sql -array(x1 [, x2, ..., xN]) -``` - -**参数** - -* `x1` — 任意类型 T 的常量值。如果只提供此参数,则数组类型为 T。- `[, x2, ..., xN]` — 额外的 N 个常量值,与 `x1` 具有共同的超类型 - -**返回值** - -返回一个数组,其中 'T' 是所有传入参数的最小公共类型。[`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**有效用法** - -```sql title=Query -SELECT array(toInt32(1), toUInt16(2), toInt8(3)) AS a, toTypeName(a) -``` - -```response title=Response -┌─a───────┬─toTypeName(a)─┐ -│ [1,2,3] │ Array(Int32) │ -└─────────┴───────────────┘ -``` - -**用法无效** - -```sql title=Query -SELECT array(toInt32(5), toDateTime('1998-06-16'), toInt8(5)) AS a, toTypeName(a) -``` - -```response title=Response -从服务器收到异常(版本 25.4.3): -代码: 386. DB::Exception: 从 localhost:9000 收到。DB::Exception: -类型 Int32、DateTime、Int8 不存在超类型 ... -``` - - -## arrayAUCPR - -引入版本:v20.4 - -计算精确率-召回率(PR)曲线下面积。 -精确率-召回率曲线是通过在所有阈值下,将精确率绘制在 y 轴、召回率绘制在 x 轴而得到的。 -结果值范围为 0 到 1,值越高表示模型性能越好。 -在处理类别分布不平衡的数据集时,PR AUC 尤其有用,相比 ROC AUC 能在这类场景下提供更清晰的性能对比。 -更多细节请参见[此处](https://developers.google.com/machine-learning/glossary#pr-auc-area-under-the-pr-curve)、[此处](https://developers.google.com/machine-learning/crash-course/classification/roc-and-auc#expandable-1)和[此处](https://en.wikipedia.org/wiki/Receiver_operating_characteristic#Area_under_the_curve)。 - -**语法** - -```sql -arrayAUCPR(scores, labels[, partial_offsets]) -``` - -**别名**: `arrayPRAUC` - -**参数** - -* `cores` — 预测模型输出的分数。[`Array((U)Int*)`](/sql-reference/data-types/array) 或 [`Array(Float*)`](/sql-reference/data-types/array) -* `labels` — 样本标签,通常正样本为 1,负样本为 0。[`Array((U)Int*)`](/sql-reference/data-types/array) 或 [`Array(Enum)`](/sql-reference/data-types/array) -* `partial_offsets` — -* 可选。一个由三个非负整数组成的 [`Array(T)`](/sql-reference/data-types/array),用于计算 PR 曲线下的部分面积(等价于 PR 空间中的一个垂直带状区域),而不是整个 AUC。此选项对于分布式计算 PR AUC 很有用。该数组必须包含以下元素 [`higher_partitions_tp`, `higher_partitions_fp`, `total_positives`]。 - * `higher_partitions_tp`:得分更高的各分区中正标签的数量。 - * `higher_partitions_fp`:得分更高的各分区中负标签的数量。 - * `total_positives`:整个数据集中正样本的总数。 - -:::note -当使用 `arr_partial_offsets` 时,`arr_scores` 和 `arr_labels` 应仅对应整个数据集中的一个分区,并且该分区只包含某一分数区间内的样本。 -数据集应被划分为一系列相邻的连续分区,其中每个分区包含分数落在某个特定范围内的数据子集。 -例如: - -* 一个分区可以包含所有位于区间 [0, 0.5) 内的分数。 -* 另一个分区可以包含位于区间 [0.5, 1.0] 内的分数。 - ::: - -**返回值** - -返回精确率-召回率(PR)曲线下的面积。[`Float64`](/sql-reference/data-types/float) - -**示例** - -**用法示例** - -```sql title=Query -SELECT arrayAUCPR([0.1, 0.4, 0.35, 0.8], [0, 0, 1, 1]); -``` - -```response title=Response -┌─arrayAUCPR([0.1, 0.4, 0.35, 0.8], [0, 0, 1, 1])─┐ -│ 0.8333333333333333 │ -└─────────────────────────────────────────────────┘ -``` - - -## arrayAll - -引入版本:v1.1 - -如果 lambda `func(x [, y1, y2, ... yN])` 对所有元素的返回值都为 true,则返回 `1`;否则,返回 `0`。 - -**语法** - -```sql -arrayAll(func(x[, y1, ..., yN]), source_arr[, cond1_arr, ... , condN_arr]) -``` - -**参数** - -* `func(x[, y1, ..., yN])` — 一个对源数组(`x`)和条件数组(`y`)的元素进行操作的 Lambda 函数。[`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `source_arr` — 要处理的源数组。[`Array(T)`](/sql-reference/data-types/array) -* `cond1_arr, ...` — 可选。N 个条件数组,为 Lambda 函数提供额外参数。[`Array(T)`](/sql-reference/data-types/array) - -**返回值** - -如果 Lambda 函数对所有元素都返回 true,则返回 `1`,否则返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**所有元素都满足条件** - -```sql title=Query -SELECT arrayAll(x, y -> x=y, [1, 2, 3], [1, 2, 3]) -``` - -```response title=Response -1 -``` - -**并非所有元素都相匹配** - -```sql title=Query -SELECT arrayAll(x, y -> x=y, [1, 2, 3], [1, 1, 1]) -``` - -```response title=Response -0 -``` - - -## arrayAvg - -引入于:v21.1 - -返回源数组中元素的平均值。 - -如果指定了 lambda 函数 `func`,则返回对元素应用该 lambda 函数后所得结果的平均值。 - -**语法** - -```sql -arrayAvg([func(x[, y1, ..., yN])], source_arr[, cond1_arr, ... , condN_arr]) -``` - -**参数** - -* `func(x[, y1, ..., yN])` — 可选。作用于源数组(`x`)及条件数组(`y`)元素的 Lambda 函数。[`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `source_arr` — 要处理的源数组。[`Array(T)`](/sql-reference/data-types/array) -* `[, cond1_arr, ... , condN_arr]` — 可选。提供给 Lambda 函数的 N 个条件数组,作为附加参数。[`Array(T)`](/sql-reference/data-types/array) - -**返回值** - -返回源数组中元素的平均值;如果提供了 Lambda 函数,则返回其结果元素的平均值。[`Float64`](/sql-reference/data-types/float) - -**示例** - -**基础示例** - -```sql title=Query -SELECT arrayAvg([1, 2, 3, 4]); -``` - -```response title=Response -2.5 -``` - -**在 Lambda 函数中的用法** - -```sql title=Query -SELECT arrayAvg(x, y -> x*y, [2, 3], [2, 3]) AS res; -``` - -```response title=Response -6.5 -``` - - -## arrayCompact - -自 v20.1 版本引入 - -从数组中移除连续的重复元素,包括 `null` 值。结果数组中各值的顺序与源数组中的顺序一致。 - -**语法** - -```sql -arrayCompact(arr) -``` - -**参数** - -* `arr` — 需要去重的数组。[`Array(T)`](/sql-reference/data-types/array) - -**返回值** - -返回一个不包含重复值的数组。[`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**用法示例** - -```sql title=Query -SELECT arrayCompact([1, 1, nan, nan, 2, 3, 3, 3]); -``` - -```response title=Response -[1,nan,2,3] -``` - - -## arrayConcat - -自 v1.1 版本引入 - -合并作为参数传入的数组。 - -**语法** - -```sql -arrayConcat(arr1 [, arr2, ... , arrN]) -``` - -**参数** - -* `arr1 [, arr2, ... , arrN]` — 要拼接的 N 个数组。[`Array(T)`](/sql-reference/data-types/array) - -**返回值** - -返回一个由提供的数组参数合并而成的单个数组。[`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**用法示例** - -```sql title=Query -SELECT arrayConcat([1, 2], [3, 4], [5, 6]) AS res -``` - -```response title=Response -[1, 2, 3, 4, 5, 6] -``` - - -## arrayCount - -引入版本:v1.1 - -返回使 `func(arr1[i], ..., arrN[i])` 的结果为 true 的元素数量。 -如果未指定 `func`,则返回数组中非零元素的数量。 - -`arrayCount` 是一个[高阶函数](/sql-reference/functions/overview#higher-order-functions)。 - -**语法** - -```sql -arrayCount([func, ] arr1, ...) -``` - -**参数** - -* `func` — 可选。应用到每个数组元素上的函数。[`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `arr1, ..., arrN` — N 个数组。[`Array(T)`](/sql-reference/data-types/array) - -**返回值** - -返回使 `func` 返回 true 的元素个数。否则,返回数组中非零元素的个数。[`UInt32`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT arrayCount(x -> (x % 2), groupArray(number)) FROM numbers(10) -``` - -```response title=Response -5 -``` - - -## arrayCumSum - -首次引入于:v1.1 - -返回一个数组,其中每个元素是源数组对应位置的前缀和(累计和)。如果指定了 lambda 函数,则在每个位置先对数组元素应用该 lambda,再对结果进行累计求和。 - -**语法** - -```sql -arrayCumSum([func,] arr1[, arr2, ... , arrN]) -``` - -**参数** - -* `func` — 可选。应用于数组各位置元素的 lambda 函数。[`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `arr1` — 源数值数组。[`Array(T)`](/sql-reference/data-types/array) -* `[arr2, ..., arrN]` — 可选。与 `arr1` 长度相同的附加数组,如果指定了 lambda 函数,这些数组会作为参数传递给该函数。[`Array(T)`](/sql-reference/data-types/array) - -**返回值** - -返回一个数组,其中包含源数组元素的部分和(前缀和)。结果类型与输入数组的数值类型相同。[`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**基本用法** - -```sql title=Query -SELECT arrayCumSum([1, 1, 1, 1]) AS res -``` - -```response title=Response -[1, 2, 3, 4] -``` - -**使用 lambda 表达式** - -```sql title=Query -SELECT arrayCumSum(x -> x * 2, [1, 2, 3]) AS res -``` - -```response title=Response -[2, 6, 12] -``` - - -## arrayCumSumNonNegative - -引入版本:v18.12 - -返回一个数组,其中包含源数组元素的部分(逐步)累计和,并将任何为负的累计和替换为零。如果指定了 lambda 函数,则在每个位置先对数组元素应用该 lambda,再对结果进行累计求和。 - -**语法** - -```sql -arrayCumSumNonNegative([func,] arr1[, arr2, ... , arrN]) -``` - -**参数** - -* `func` — 可选。一个应用于数组中各位置元素的 lambda 函数。[`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `arr1` — 数值类型的源数组。[`Array(T)`](/sql-reference/data-types/array) -* `[arr2, ..., arrN]` — 可选。与 `arr1` 大小相同的其他数组,如果指定了 lambda 函数,这些数组会作为参数传递给该函数。[`Array(T)`](/sql-reference/data-types/array) - -**返回值** - -返回源数组元素的部分和数组,其中任何为负的累积和都会被替换为零。结果类型与输入数组的数值类型一致。[`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**基本用法** - -```sql title=Query -SELECT arrayCumSumNonNegative([1, 1, -4, 1]) AS res -``` - -```response title=Response -[1, 2, 0, 1] -``` - -**使用 Lambda** - -```sql title=Query -SELECT arrayCumSumNonNegative(x -> x * 2, [1, -2, 3]) AS res -``` - -```response title=Response -[2, 0, 6] -``` - - -## arrayDifference - -引入版本:v1.1 - -计算一个数组,其元素为原数组中相邻元素之间的差值。 -结果数组的第一个元素为 0,第二个元素为 `arr[1] - arr[0]`,第三个元素为 `arr[2] - arr[1]`,以此类推。 -结果数组中元素的类型由减法的类型推断规则决定(例如 `UInt8` - `UInt8` = `Int16`)。 - -**语法** - -```sql -arrayDifference(arr) -``` - -**参数** - -* `arr` — 要计算相邻元素差值的数组。[`Array(T)`](/sql-reference/data-types/array) - -**返回值** - -返回一个由相邻数组元素之间的差值组成的数组 [`UInt*`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT arrayDifference([1, 2, 3, 4]); -``` - -```response title=Response -[0,1,1,1] -``` - -**结果类型为 Int64 时发生溢出的示例** - -```sql title=Query -SELECT arrayDifference([0, 10000000000000000000]); -``` - -```response title=Response -┌─arrayDifference([0, 10000000000000000000])─┐ -│ [0,-8446744073709551616] │ -└────────────────────────────────────────────┘ -``` - - -## arrayDistinct - -引入于:v1.1 - -返回一个仅包含数组中各不相同(去重后)元素的数组。 - -**语法** - -```sql -arrayDistinct(arr) -``` - -**参数** - -* `arr` — 要从中提取不同元素的数组。[`Array(T)`](/sql-reference/data-types/array) - -**返回值** - -返回一个包含不同元素的数组 [`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**使用示例** - -```sql title=Query -SELECT arrayDistinct([1, 2, 2, 3, 1]); -``` - -```response title=Response -[1,2,3] -``` - - -## arrayDotProduct - -自 v23.5 引入 - -返回两个数组的点积。 - -:::note -两个向量的长度必须相等。`Array` 和 `Tuple` 中的元素类型也可以是混合的。 -::: - -**语法** - -```sql -arrayDotProduct(v1, v2) -``` - -**参数** - -* `v1` — 第一个向量。[`Array((U)Int* | Float* | Decimal)`](/sql-reference/data-types/array) 或 [`Tuple((U)Int* | Float* | Decimal)`](/sql-reference/data-types/tuple) -* `v2` — 第二个向量。[`Array((U)Int* | Float* | Decimal)`](/sql-reference/data-types/array) 或 [`Tuple((U)Int* | Float* | Decimal)`](/sql-reference/data-types/tuple) - -**返回值** - -两个向量的点积。 - -:::note -返回类型由参数的类型确定。如果 Array 或 Tuple 中包含不同类型的元素,则结果类型为它们的超类型。 -::: - -[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) - -**示例** - -**Array 示例** - -```sql title=Query -SELECT arrayDotProduct([1, 2, 3], [4, 5, 6]) AS res, toTypeName(res); -``` - -```response title=Response -32 UInt16 -``` - -**元组示例** - -```sql title=Query -SELECT dotProduct((1::UInt16, 2::UInt8, 3::Float32),(4::Int16, 5::Float32, 6::UInt8)) AS res, toTypeName(res); -``` - -```response title=Response -32 Float64 -``` - - -## arrayElement - -引入于:v1.1 - -获取给定数组中索引为 `n` 的元素,其中 `n` 可以是任意整数类型。 -如果索引超出数组边界,则返回默认值(数字为 0,字符串为空字符串等), -当数组参数为非常量且索引为常量 0 时除外。在这种情况下会报错 `Array indices are 1-based`。 - -:::note -ClickHouse 中的数组索引从 1 开始。 -::: - -支持负索引。在这种情况下,将从末尾开始计数,选取对应元素。例如,`arr[-1]` 是数组中的最后一个元素。 - -运算符 `[n]` 提供相同的功能。 - -**语法** - -```sql -arrayElement(arr, n) -``` - -**参数** - -* `arr` — 要检索的数组。[`Array(T)`](/sql-reference/data-types/array)。- `n` — 要获取的元素位置。[`(U)Int*`](/sql-reference/data-types/int-uint)。 - -**返回值** - -返回由给定数组参数合并得到的单个数组 [`Array(T)`](/sql-reference/data-types/array)。 - -**示例** - -**使用示例** - -```sql title=Query -SELECT arrayElement(arr, 2) FROM (SELECT [1, 2, 3] AS arr) -``` - -```response title=Response -2 -``` - -**负索引** - -```sql title=Query -SELECT arrayElement(arr, -1) FROM (SELECT [1, 2, 3] AS arr) -``` - -```response title=Response -3 -``` - -**使用 [n] 记法** - -```sql title=Query -SELECT arr[2] FROM (SELECT [1, 2, 3] AS arr) -``` - -```response title=Response -2 -``` - -**数组下标越界** - -```sql title=Query -SELECT arrayElement(arr, 4) FROM (SELECT [1, 2, 3] AS arr) -``` - -```response title=Response -0 -``` - - -## arrayElementOrNull - -引入于:v1.1 - -获取给定数组中索引为 `n` 的元素,其中 `n` 可以是任意整数类型。 -如果索引超出了数组的范围,则返回 `NULL`,而不是默认值。 - -:::note -ClickHouse 中的数组索引从 1 开始。 -::: - -支持负索引。这时会从数组末尾开始计数来选择对应的元素。例如,`arr[-1]` 是数组中的最后一个元素。 - -**语法** - -```sql -arrayElementOrNull(arrays) -``` - -**参数** - -* `arrays` — 任意数量的数组参数。[`Array`](/sql-reference/data-types/array) - -**返回值** - -返回由提供的数组参数合并得到的单个数组。[`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**使用示例** - -```sql title=Query -SELECT arrayElementOrNull(arr, 2) FROM (SELECT [1, 2, 3] AS arr) -``` - -```response title=Response -2 -``` - -**负索引** - -```sql title=Query -SELECT arrayElementOrNull(arr, -1) FROM (SELECT [1, 2, 3] AS arr) -``` - -```response title=Response -3 -``` - -**数组索引越界** - -```sql title=Query -SELECT arrayElementOrNull(arr, 4) FROM (SELECT [1, 2, 3] AS arr) -``` - -```response title=Response -NULL -``` - - -## arrayEnumerate - -引入版本:v1.1 - -返回数组 `[1, 2, 3, ..., length(arr)]` - -此函数通常与 [`ARRAY JOIN`](/sql-reference/statements/select/array-join) 子句一起使用。它允许在应用 `ARRAY JOIN` 之后,对每个数组只统计一次。 -此函数也可以用于高阶函数。例如,你可以使用它来获取满足某个条件的元素在数组中的索引。 - -**语法** - -```sql -arrayEnumerate(arr) -``` - -**参数** - -* `arr` — 要枚举的数组。[`Array`](/sql-reference/data-types/array) - -**返回值** - -返回数组 `[1, 2, 3, ..., length (arr)]`。[`Array(UInt32)`](/sql-reference/data-types/array) - -**示例** - -**使用 ARRAY JOIN 的基本示例** - -```sql title=Query -CREATE TABLE test -( - `id` UInt8, - `tag` Array(String), - `version` Array(String) -) -ENGINE = MergeTree -ORDER BY id; - -INSERT INTO test VALUES (1, ['release-stable', 'dev', 'security'], ['2.4.0', '2.6.0-alpha', '2.4.0-sec1']); - -SELECT - id, - tag, - version, - seq -FROM test -ARRAY JOIN - tag, - version, - arrayEnumerate(tag) AS seq -``` - -```response title=Response -┌─id─┬─tag────────────┬─version─────┬─seq─┐ -│ 1 │ release-stable │ 2.4.0 │ 1 │ -│ 1 │ dev │ 2.6.0-alpha │ 2 │ -│ 1 │ security │ 2.4.0-sec1 │ 3 │ -└────┴────────────────┴─────────────┴─────┘ -``` - - -## arrayEnumerateDense - -自 v18.12 版本引入 - -返回一个与源数组大小相同的数组,用于标记每个元素在源数组中首次出现的位置。 - -**语法** - -```sql -arrayEnumerateDense(arr) -``` - -**参数** - -* `arr` — 要枚举的数组。[`Array(T)`](/sql-reference/data-types/array) - -**返回值** - -返回一个与 `arr` 大小相同的数组,其中每个元素表示对应元素在源数组 [`Array(T)`](/sql-reference/data-types/array) 中首次出现的位置。 - -**示例** - -**用法示例** - -```sql title=Query -SELECT arrayEnumerateDense([10, 20, 10, 30]) -``` - -```response title=Response -[1,2,1,3] -``` - - -## arrayEnumerateDenseRanked - -自 v20.1 引入 - -返回一个与源数组大小相同的数组,用于标示每个元素在源数组中首次出现的索引位置。它支持对多维数组进行枚举,并且可以指定在数组中向内遍历的深度。 - -**语法** - -```sql -arrayEnumerateDenseRanked(clear_depth, arr, max_array_depth) -``` - -**参数** - -* `clear_depth` — 在指定层级分别枚举元素。必须小于或等于 `max_arr_depth`。[`UInt*`](/sql-reference/data-types/int-uint) -* `arr` — 要枚举的 N 维数组。[`Array(T)`](/sql-reference/data-types/array) -* `max_array_depth` — 最大有效深度。必须小于或等于 `arr` 的深度。[`UInt*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回一个数组,用于表示每个元素在源数组中首次出现的位置。[`Array`](/sql-reference/data-types/array) - -**示例** - -**基本用法** - -```sql title=Query --- 当 clear_depth=1 且 max_array_depth=1 时,结果与 arrayEnumerateDense 给出的结果相同。 - -SELECT arrayEnumerateDenseRanked(1,[10, 20, 10, 30],1); -``` - -```response title=Response -[1,2,1,3] -``` - -**与多维数组一起使用** - -```sql title=Query --- 在此示例中,arrayEnumerateDenseRanked 用于获取一个数组,该数组指示多维数组中每个元素在具有相同值的元素中的排名位置。 --- 对于传入数组的第一行 [10, 10, 30, 20],结果的对应第一行是 [1, 1, 2, 3], --- 表示 10 是第一个遇到的数字,出现在位置 1 和 2,30 是第二个遇到的数字,出现在位置 3, --- 20 是第三个遇到的数字,出现在位置 4。 --- 对于第二行 [40, 50, 10, 30],结果的对应第二行是 [4,5,1,2],表示 40 --- 和 50 是第四个和第五个遇到的数字,分别出现在该行的位置 1 和 2,另一个 10 --- (第一个遇到的数字)出现在位置 3,30(第二个遇到的数字)出现在最后位置。 - -SELECT arrayEnumerateDenseRanked(1,[[10,10,30,20],[40,50,10,30]],2); -``` - -```response title=Response -[[1,1,2,3],[4,5,1,2]] -``` - -**使用更大 clear_depth 的示例** - -```sql title=Query --- 将 clear_depth 设置为 2 会导致每行的枚举单独重新开始。 - -SELECT arrayEnumerateDenseRanked(2,[[10,10,30,20],[40,50,10,30]],2); -``` - -```response title=Response -[[1, 1, 2, 3], [1, 2, 3, 4]] -``` - - -## arrayEnumerateUniq - -自 v1.1 起提供 - -返回一个与源数组大小相同的数组,其中每个元素表示源数组中对应元素在所有相同值元素中的位置。 - -在使用 `ARRAY JOIN` 和对数组元素进行聚合时,此函数非常有用。 - -该函数可以接受多个大小相同的数组作为参数。在这种情况下,唯一性是基于所有数组中相同位置元素所组成的元组来确定的。 - -**语法** - -```sql -arrayEnumerateUniq(arr1[, arr2, ... , arrN]) -``` - -**参数** - -* `arr1` — 要处理的第一个数组。[`Array(T)`](/sql-reference/data-types/array) -* `arr2, ...` — 可选。用于确定元组唯一性的、与 `arr1` 具有相同大小的其他数组。[`Array(UInt32)`](/sql-reference/data-types/array) - -**返回值** - -返回一个数组,其中每个元素表示其在所有具有相同值或元组的元素中的位置。[`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**基本用法** - -```sql title=Query -SELECT arrayEnumerateUniq([10, 20, 10, 30]); -``` - -```response title=Response -[1, 1, 2, 1] -``` - -**多个数组** - -```sql title=Query -SELECT arrayEnumerateUniq([1, 1, 1, 2, 2, 2], [1, 1, 2, 1, 1, 2]); -``` - -```response title=Response -[1,2,1,1,2,1] -``` - -**ARRAY JOIN 聚合** - -```sql title=Query --- 每个目标 ID 计算了转化次数(Goals 嵌套数据结构中的每个元素代表一个已达成的目标,我们称之为转化) --- 以及会话数。如果不使用 ARRAY JOIN,会话数将按 sum(Sign) 计算。但在此特定场景下, --- 由于嵌套的 Goals 结构导致行数倍增,为了确保每个会话仅计数一次,我们对 --- arrayEnumerateUniq(Goals.ID) 函数的值应用条件进行过滤。 - -SELECT - Goals.ID AS GoalID, - sum(Sign) AS Reaches, - sumIf(Sign, num = 1) AS Visits -FROM test.visits -ARRAY JOIN - Goals, - arrayEnumerateUniq(Goals.ID) AS num -WHERE CounterID = 160656 -GROUP BY GoalID -ORDER BY Reaches DESC -LIMIT 10 -``` - -```response title=Response -┌──GoalID─┬─Reaches─┬─Visits─┐ -│ 53225 │ 3214 │ 1097 │ -│ 2825062 │ 3188 │ 1097 │ -│ 56600 │ 2803 │ 488 │ -│ 1989037 │ 2401 │ 365 │ -│ 2830064 │ 2396 │ 910 │ -│ 1113562 │ 2372 │ 373 │ -│ 3270895 │ 2262 │ 812 │ -│ 1084657 │ 2262 │ 345 │ -│ 56599 │ 2260 │ 799 │ -│ 3271094 │ 2256 │ 812 │ -└─────────┴─────────┴────────┘ -``` - - -## arrayEnumerateUniqRanked - -自 v20.1 引入 - -返回一个与源数组具有相同维度的一维或多维数组, -对每个元素给出其在所有相同值元素中的位置。 -它支持对多维数组进行枚举,并且可以指定在数组中枚举的深度。 - -**语法** - -```sql -arrayEnumerateUniqRanked(clear_depth, arr, max_array_depth) -``` - -**参数** - -* `clear_depth` — 在指定层级分别枚举元素。为不大于 `max_arr_depth` 的正整数。[`UInt*`](/sql-reference/data-types/int-uint) -* `arr` — 要枚举的 N 维数组。[`Array(T)`](/sql-reference/data-types/array) -* `max_array_depth` — 最大生效深度。为不大于 `arr` 深度的正整数。[`UInt*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回一个与 `arr` 具有相同大小的 N 维数组,其中每个元素表示该元素在所有相同值元素中的位置。[`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**示例 1** - -```sql title=Query --- 当 clear_depth=1 且 max_array_depth=1 时,arrayEnumerateUniqRanked 的结果 --- 与 arrayEnumerateUniq 对同一数组给出的结果相同。 - -SELECT arrayEnumerateUniqRanked(1, [1, 2, 1], 1); -``` - -```response title=Response -[1, 1, 2] -``` - -**示例 2** - -```sql title=Query --- 当 clear_depth=1 且 max_array_depth=1 时,arrayEnumerateUniqRanked 的结果 --- 与 arrayEnumerateUniq 对相同数组给出的结果一致。 - -SELECT arrayEnumerateUniqRanked(1, [[1, 2, 3], [2, 2, 1], [3]], 2);", "[[1, 1, 1], [2, 3, 2], [2]] -``` - -```response title=Response -[1, 1, 2] -``` - -**示例 3** - -```sql title=Query --- 在此示例中,arrayEnumerateUniqRanked 用于获取一个数组,该数组指示 --- 多维数组中每个元素在具有相同值的元素中的位置。对于传入数组的第一行 [1, 2, 3],对应的 --- 结果是 [1, 1, 1],表示这是首次遇到 1、2 和 3。 --- 对于传入数组的第二行 [2, 2, 1],对应的结果是 [2, 3, 3], --- 表示 2 是第二次和第三次遇到,1 是第二次遇到。 --- 同样,对于传入数组的第三行 [3], --- 对应的结果是 [2],表示 3 是第二次遇到。 - -SELECT arrayEnumerateUniqRanked(1, [[1, 2, 3], [2, 2, 1], [3]], 2); -``` - -```response title=Response -[[1, 1, 1], [2, 3, 2], [2]] -``` - -**示例 4** - -```sql title=Query --- 将 clear_depth 设置为 2,会使每行的元素被分别枚举。 -SELECT arrayEnumerateUniqRanked(2,[[1, 2, 3],[2, 2, 1],[3]], 2); -``` - -```response title=Response -[[1, 1, 1], [1, 2, 1], [1]] -``` - - -## arrayExcept - -自 v25.9 版本引入 - -返回一个数组,其中包含 `source` 中在 `except` 中不存在的元素,并保留其原始顺序。 - -该函数对两个数组执行差集运算。对于 `source` 中的每个元素,会检查该元素是否存在于 `except` 中(使用精确比较)。如果不存在,则该元素会被包含在结果中。 - -该操作具有以下特性: - -1. 保留 `source` 中元素的顺序 -2. 如果 `source` 中的重复元素在 `except` 中不存在,则这些重复元素会被保留 -3. 将 NULL 作为一个独立的值进行处理 - -**语法** - -```sql -arrayExcept(source, except) -``` - -**参数** - -* `source` — 包含要过滤元素的源数组。[`Array(T)`](/sql-reference/data-types/array) -* `except` — 包含需要从结果中排除元素的数组。[`Array(T)`](/sql-reference/data-types/array) - -**返回值** - -返回与输入数组类型相同的数组,包含在 `source` 中但未在 `except` 中找到的元素。[`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**基本示例** - -```sql title=Query -SELECT arrayExcept([1, 2, 3, 2, 4], [3, 5]) -``` - -```response title=Response -[1, 2, 2, 4] -``` - -**with_nulls1** - -```sql title=Query -SELECT arrayExcept([1, NULL, 2, NULL], [2]) -``` - -```response title=Response -[1, NULL, NULL] -``` - -**with_nulls2** - -```sql title=Query -SELECT arrayExcept([1, NULL, 2, NULL], [NULL, 2, NULL]) -``` - -```response title=Response -[1] -``` - -**字符串** - -```sql title=Query -SELECT arrayExcept(['apple', 'banana', 'cherry'], ['banana', 'date']) -``` - -```response title=Response -['apple', 'cherry'] -``` - - -## arrayExists - -自 v1.1 起引入 - -如果在源数组中至少存在一个元素,使得 `func(x[, y1, y2, ... yN])` 返回 true,则返回 `1`;否则返回 `0`。 - -**语法** - -```sql -arrayExists(func(x[, y1, ..., yN]), source_arr[, cond1_arr, ... , condN_arr]) -``` - -**参数** - -* `func(x[, y1, ..., yN])` — 一个作用于源数组 (`x`) 和条件数组 (`y`) 元素的 lambda 函数。[`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `source_arr` — 要处理的源数组。[`Array(T)`](/sql-reference/data-types/array) -* `[, cond1_arr, ... , condN_arr]` — 可选。N 个条件数组,为 lambda 函数提供附加参数。[`Array(T)`](/sql-reference/data-types/array) - -**返回值** - -如果 lambda 函数对至少一个元素返回 true,则返回 `1`,否则返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT arrayExists(x, y -> x=y, [1, 2, 3], [0, 0, 0]) -``` - -```response title=Response -0 -``` - - -## arrayFill - -引入版本:v20.1 - -`arrayFill` 函数会从源数组的第一个元素开始,按顺序处理到最后一个元素,并在每个位置上使用源数组和条件数组中的元素,对一个 lambda 条件进行求值。当在位置 i 上该 lambda 函数的结果为 false 时,函数会将该元素替换为当前数组状态中位置 i-1 的元素。第一个元素始终会被保留,与任何条件无关。 - -**语法** - -```sql -arrayFill(func(x [, y1, ..., yN]), source_arr[, cond1_arr, ... , condN_arr]) -``` - -**参数** - -* `func(x [, y1, ..., yN])` — 一个 Lambda 函数 `func(x [, y1, y2, ... yN]) → F(x [, y1, y2, ... yN])`,作用于源数组 `x` 和条件数组 `y` 的元素。[`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `source_arr` — 要处理的源数组。[`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `[, cond1_arr, ... , condN_arr]` — 可选。作为额外参数传递给 Lambda 函数的 N 个条件数组。[`Array(T)`](/sql-reference/data-types/array) - -**返回值** - -返回一个数组 [`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**单个数组示例** - -```sql title=Query -SELECT arrayFill(x -> not isNull(x), [1, null, 2, null]) AS res -``` - -```response title=Response -[1, 1, 2, 2] -``` - -**包含两个数组的示例** - -```sql title=Query -SELECT arrayFill(x, y, z -> x > y AND x < z, [5, 3, 6, 2], [4, 7, 1, 3], [10, 2, 8, 5]) AS res -``` - -```response title=Response -[5, 5, 6, 6] -``` - - -## arrayFilter - -自 v1.1 引入 - -返回一个数组,其中仅包含源数组中使 lambda 函数返回 true 的元素。 - -**语法** - -```sql -arrayFilter(func(x[, y1, ..., yN]), source_arr[, cond1_arr, ... , condN_arr])] -``` - -**参数** - -* `func(x[, y1, ..., yN])` — 一个对源数组 (`x`) 和条件数组 (`y`) 的元素进行操作的 Lambda 函数。[`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `source_arr` — 要处理的源数组。[`Array(T)`](/sql-reference/data-types/array) -* `[, cond1_arr, ... , condN_arr]` — 可选。为 Lambda 函数提供额外参数的 N 个条件数组。[`Array(T)`](/sql-reference/data-types/array) - -**返回值** - -返回源数组的一个子集,类型为 [`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**示例 1** - -```sql title=Query -SELECT arrayFilter(x -> x LIKE '%World%', ['Hello', 'abc World']) AS res -``` - -```response title=Response -['abc World'] -``` - -**示例 2** - -```sql title=Query -SELECT - arrayFilter( - (i, x) -> x LIKE '%World%', - arrayEnumerate(arr), - ['Hello', 'abc World'] AS arr) - AS res -``` - -```response title=Response -[2] -``` - - -## arrayFirst - -自 v1.1 起引入 - -返回源数组中第一个使 `func(x[, y1, y2, ... yN])` 返回 `true` 的元素,否则返回默认值。 - -**语法** - -```sql -arrayFirst(func(x[, y1, ..., yN]), source_arr[, cond1_arr, ... , condN_arr]) -``` - -**参数** - -* `func(x[, y1, ..., yN])` — 对源数组(`x`)和条件数组(`y`)的元素进行操作的 Lambda 函数。[Lambda 函数](/sql-reference/functions/overview#arrow-operator-and-lambda)。- `source_arr` — 要处理的源数组。[`Array(T)`](/sql-reference/data-types/array)。- `[, cond1_arr, ... , condN_arr]` — 可选。作为附加参数传递给 Lambda 函数的 N 个条件数组。[`Array(T)`](/sql-reference/data-types/array)。 - -**返回值** - -返回源数组中使 `λ` 结果为 true 的第一个元素,否则返回类型 `T` 的默认值。 - -**示例** - -**用法示例** - -```sql title=Query -SELECT arrayFirst(x, y -> x=y, ['a', 'b', 'c'], ['c', 'b', 'a']) -``` - -```response title=Response -b -``` - -**无匹配结果** - -```sql title=Query -SELECT arrayFirst(x, y -> x=y, [0, 1, 2], [3, 3, 3]) AS res, toTypeName(res) -``` - -```response title=Response -0 UInt8 -``` - - -## arrayFirstIndex - -自 v1.1 引入 - -返回源数组中第一个使 `func(x[, y1, y2, ... yN])` 返回 true 的元素的索引;如果不存在,则返回 '0'。 - -**语法** - -```sql -arrayFirstIndex(func(x[, y1, ..., yN]), source_arr[, cond1_arr, ... , condN_arr]) -``` - -**参数** - -* `func(x[, y1, ..., yN])` — 作用于源数组 (`x`) 及条件数组 (`y`) 元素的 lambda 函数。[Lambda function](/sql-reference/functions/overview#arrow-operator-and-lambda)。- `source_arr` — 要处理的源数组。[`Array(T)`](/sql-reference/data-types/array)。- `[, cond1_arr, ... , condN_arr]` — 可选。作为附加参数传递给 lambda 函数的 N 个条件数组。[`Array(T)`](/sql-reference/data-types/array)。 - -**返回值** - -返回使 `func` 为 true 的源数组第一个元素的索引,否则返回 `0`。[`UInt32`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT arrayFirstIndex(x, y -> x=y, ['a', 'b', 'c'], ['c', 'b', 'a']) -``` - -```response title=Response -2 -``` - -**无匹配结果** - -```sql title=Query -SELECT arrayFirstIndex(x, y -> x=y, ['a', 'b', 'c'], ['d', 'e', 'f']) -``` - -```response title=Response -0 -``` - - -## arrayFirstOrNull - -自 v1.1 引入 - -返回源数组中第一个使 `func(x[, y1, y2, ... yN])` 返回 true 的元素,否则返回 `NULL`。 - -**语法** - -```sql -arrayFirstOrNull(func(x[, y1, ..., yN]), source_arr[, cond1_arr, ... , condN_arr]) -``` - -**参数** - -* `func(x[, y1, ..., yN])` — 一个用于对源数组 (`x`) 和条件数组 (`y`) 的元素进行操作的 lambda 函数。[`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `source_arr` — 要处理的源数组。[`Array(T)`](/sql-reference/data-types/array) -* `[, cond1_arr, ... , condN_arr]` — 可选。提供给 lambda 函数的 N 个条件数组,作为附加参数。[`Array(T)`](/sql-reference/data-types/array) - -**返回值** - -返回使 `func` 为 `true` 的源数组中的第一个元素,否则返回 `NULL`。 - -**示例** - -**用法示例** - -```sql title=Query -SELECT arrayFirstOrNull(x, y -> x=y, ['a', 'b', 'c'], ['c', 'b', 'a']) -``` - -```response title=Response -b -``` - -**无匹配结果** - -```sql title=Query -SELECT arrayFirstOrNull(x, y -> x=y, [0, 1, 2], [3, 3, 3]) AS res, toTypeName(res) -``` - -```response title=Response -NULL Nullable(UInt8) -``` - - -## arrayFlatten - -自 v20.1 引入 - -将嵌套数组转换为扁平数组(一维数组)。 - -函数: - -* 适用于任意深度的嵌套数组。 -* 不会改变已经是扁平结构的数组。 - -扁平化后的数组包含所有源数组中的全部元素。 - -**语法** - -```sql -arrayFlatten(arr) -``` - -**别名**: `flatten` - -**参数** - -* `arr` — 多维数组。[`Array(Array(T))`](/sql-reference/data-types/array) - -**返回值** - -将多维数组扁平化后返回一维数组 [`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**用法示例** - -```sql title=Query -SELECT arrayFlatten([[[1]], [[2], [3]]]); -``` - -```response title=Response -[1, 2, 3] -``` - - -## arrayFold - -自 v23.10 引入 - -将一个 lambda 函数应用于一个或多个等长数组,并将结果累积到一个累加器中。 - -**语法** - -```sql -arrayFold(λ(acc, x1 [, x2, x3, ... xN]), arr1 [, arr2, arr3, ... arrN], acc) -``` - -**参数** - -* `λ(x, x1 [, x2, x3, ... xN])` — 形式为 `λ(acc, x1 [, x2, x3, ... xN]) → F(acc, x1 [, x2, x3, ... xN])` 的 lambda 函数,其中 `F` 是应用于 `acc` 和来自 `x` 的数组值的操作,其结果会再次作为 `acc` 参与后续计算。[`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `arr1 [, arr2, arr3, ... arrN]` — 要进行运算的 N 个数组。[`Array(T)`](/sql-reference/data-types/array) -* `acc` — 累加器值,其类型与该 Lambda 函数的返回类型相同。 - -**返回值** - -返回最终的 `acc` 值。 - -**示例** - -**用法示例** - -```sql title=Query -SELECT arrayFold(acc,x -> acc + x*2, [1, 2, 3, 4], 3::Int64) AS res; -``` - -```response title=Response -23 -``` - -**斐波那契数列** - -```sql title=Query -SELECT arrayFold(acc, x -> (acc.2, acc.2 + acc.1),range(number),(1::Int64, 0::Int64)).1 AS fibonacci FROM numbers(1,10); -``` - -```response title=Response -┌─fibonacci─┐ -│ 0 │ -│ 1 │ -│ 1 │ -│ 2 │ -│ 3 │ -│ 5 │ -│ 8 │ -│ 13 │ -│ 21 │ -│ 34 │ -└───────────┘ -``` - -**多数组示例** - -```sql title=Query -SELECT arrayFold( -(acc, x, y) -> acc + (x * y), -[1, 2, 3, 4], -[10, 20, 30, 40], -0::Int64 -) AS res; -``` - -```response title=Response -300 -``` - - -## arrayIntersect - -自 v1.1 起引入 - -接收多个数组,并返回一个数组,其中包含在所有源数组中都出现的元素。结果仅包含唯一值。 - -**语法** - -```sql -arrayIntersect(arr, arr1, ..., arrN) -``` - -**参数** - -* `arrN` — 用于构造新数组的 N 个数组。[`Array(T)`](/sql-reference/data-types/array)。 - -**返回值** - -返回一个数组,包含所有 N 个数组中共有的不重复元素。[`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**使用示例** - -```sql title=Query -SELECT -arrayIntersect([1, 2], [1, 3], [2, 3]) AS empty_intersection, -arrayIntersect([1, 2], [1, 3], [1, 4]) AS non_empty_intersection -``` - -```response title=Response -┌─non_empty_intersection─┬─empty_intersection─┐ -│ [] │ [1] │ -└────────────────────────┴────────────────────┘ -``` - - -## arrayJaccardIndex - -引入于:v23.7 - -返回两个数组的 [Jaccard 指数](https://en.wikipedia.org/wiki/Jaccard_index)。 - -**语法** - -```sql -arrayJaccardIndex(arr_x, arr_y) -``` - -**参数** - -* `arr_x` — 第一个数组。[`Array(T)`](/sql-reference/data-types/array) -* `arr_y` — 第二个数组。[`Array(T)`](/sql-reference/data-types/array) - -**返回值** - -返回 `arr_x` 和 `arr_y` 的 Jaccard 指数。[`Float64`](/sql-reference/data-types/float) - -**示例** - -**使用示例** - -```sql title=Query -SELECT arrayJaccardIndex([1, 2], [2, 3]) AS res -``` - -```response title=Response -0.3333333333333333 -``` - - -## arrayJoin - -引入版本:v1.1 - -`arrayJoin` 函数接收一行包含数组的记录,并将该数组展开,为数组中的每个元素生成一行。 -这与 ClickHouse 中的常规函数不同,常规函数是在同一行内将输入值映射为输出值, -而聚合函数则对一组行进行“压缩”或“归约”,将其变为单个汇总行 -(或在与 `GROUP BY` 一起使用时变为汇总行中的单个值)。 - -除了应用此函数的列以外,所有列中的值都会被原样复制; -在该列中,这些值会被对应的数组元素所替换。 - -**语法** - -```sql -arrayJoin(arr) -``` - -**参数** - -* `arr` — 要展开的数组。[`Array(T)`](/sql-reference/data-types/array) - -**返回值** - -返回由 `arr` 展开的行集。 - -**示例** - -**基本用法** - -```sql title=Query -SELECT arrayJoin([1, 2, 3] AS src) AS dst, 'Hello', src -``` - -```response title=Response -┌─dst─┬─\'Hello\'─┬─src─────┐ -│ 1 │ Hello │ [1,2,3] │ -│ 2 │ Hello │ [1,2,3] │ -│ 3 │ Hello │ [1,2,3] │ -└─────┴───────────┴─────────┘ -``` - -**arrayJoin 会影响查询的所有部分** - -```sql title=Query --- arrayJoin 函数会影响查询的所有部分,包括 WHERE 子句。请注意结果为 2,即使子查询仅返回了 1 行。 - -SELECT sum(1) AS impressions -FROM -( - SELECT ['Istanbul', 'Berlin', 'Bobruisk'] AS cities -) -WHERE arrayJoin(cities) IN ['Istanbul', 'Berlin']; -``` - -```response title=Response -┌─impressions─┐ -│ 2 │ -└─────────────┘ -``` - -**同时使用多个 arrayJoin 函数** - -```sql title=Query -- 查询可以使用多个 arrayJoin 函数。在这种情况下,转换将执行多次,行数会成倍增加。 - -SELECT - sum(1) AS impressions, - arrayJoin(cities) AS city, - arrayJoin(browsers) AS browser -FROM -( - SELECT - ['Istanbul', 'Berlin', 'Bobruisk'] AS cities, - ['Firefox', 'Chrome', 'Chrome'] AS browsers -) -GROUP BY - 2, - 3 -``` - -```response title=Response -┌─impressions─┬─city─────┬─browser─┐ -│ 2 │ Istanbul │ Chrome │ -│ 1 │ Istanbul │ Firefox │ -│ 2 │ Berlin │ Chrome │ -│ 1 │ Berlin │ Firefox │ -│ 2 │ Bobruisk │ Chrome │ -│ 1 │ Bobruisk │ Firefox │ -└─────────────┴──────────┴─────────┘ -``` - -**优化导致的意外结果** - -```sql title=Query --- 对同一表达式使用多个 arrayJoin 可能因优化而无法产生预期结果。 --- 对于这些情况,请考虑通过不影响连接结果的额外操作来修改重复的数组表达式。 -- 例如:arrayJoin(arraySort(arr)), arrayJoin(arrayConcat(arr, [])) - -SELECT - arrayJoin(dice) as first_throw, - /* arrayJoin(dice) as second_throw */ -- 技术上正确,但会导致结果集为空 - arrayJoin(arrayConcat(dice, [])) as second_throw -- 有意更改表达式以强制重新计算 -FROM ( - SELECT [1, 2, 3, 4, 5, 6] as dice -); -``` - - -```response title=Response -┌─第一次投掷─┬─第二次投掷─┐ -│ 1 │ 1 │ -│ 1 │ 2 │ -│ 1 │ 3 │ -│ 1 │ 4 │ -│ 1 │ 5 │ -│ 1 │ 6 │ -│ 2 │ 1 │ -│ 2 │ 2 │ -│ 2 │ 3 │ -│ 2 │ 4 │ -│ 2 │ 5 │ -│ 2 │ 6 │ -│ 3 │ 1 │ -│ 3 │ 2 │ -│ 3 │ 3 │ -│ 3 │ 4 │ -│ 3 │ 5 │ -│ 3 │ 6 │ -│ 4 │ 1 │ -│ 4 │ 2 │ -│ 4 │ 3 │ -│ 4 │ 4 │ -│ 4 │ 5 │ -│ 4 │ 6 │ -│ 5 │ 1 │ -│ 5 │ 2 │ -│ 5 │ 3 │ -│ 5 │ 4 │ -│ 5 │ 5 │ -│ 5 │ 6 │ -│ 6 │ 1 │ -│ 6 │ 2 │ -│ 6 │ 3 │ -│ 6 │ 4 │ -│ 6 │ 5 │ -│ 6 │ 6 │ -└─────────────┴──────────────┘ -``` - -**使用 ARRAY JOIN 语法** - -```sql title=Query --- 注意下面 `SELECT` 查询中的 ARRAY JOIN 语法,它提供了更强大的功能。 --- ARRAY JOIN 允许您同时展开具有相同元素数量的多个数组。 - -SELECT - sum(1) AS impressions, - city, - browser -FROM -( - SELECT - ['Istanbul', 'Berlin', 'Bobruisk'] AS cities, - ['Firefox', 'Chrome', 'Chrome'] AS browsers -) -ARRAY JOIN - cities AS city, - browsers AS browser -GROUP BY - 2, - 3 -``` - -```response title=Response -┌─impressions─┬─city─────┬─browser─┐ -│ 1 │ Istanbul │ Firefox │ -│ 1 │ Berlin │ Chrome │ -│ 1 │ Bobruisk │ Chrome │ -└─────────────┴──────────┴─────────┘ -``` - -**使用元组** - -```sql title=Query --- 也可以使用元组(Tuple) - -SELECT - sum(1) AS impressions, - (arrayJoin(arrayZip(cities, browsers)) AS t).1 AS city, - t.2 AS browser -FROM -( - SELECT - ['Istanbul', 'Berlin', 'Bobruisk'] AS cities, - ['Firefox', 'Chrome', 'Chrome'] AS browsers -) -GROUP BY - 2, - 3 -``` - -```response title=Response -┌─impressions─┬─city─────┬─browser─┐ -│ 1 │ Istanbul │ Firefox │ -│ 1 │ Berlin │ Chrome │ -│ 1 │ Bobruisk │ Chrome │ -└─────────────┴──────────┴─────────┘ -``` - - -## arrayLast - -自 v1.1 引入 - -返回源数组中最后一个使 lambda `func(x [, y1, y2, ... yN])` 返回 true 的元素,否则返回默认值。 - -**语法** - -```sql -arrayLast(func(x[, y1, ..., yN]), source[, cond1, ... , condN_arr]) -``` - -**参数** - -* `func(x[, y1, ..., yN])` — 一个作用于源数组 (`x`) 及条件数组 (`y`) 元素的 Lambda 函数。[Lambda 函数](/sql-reference/functions/overview#arrow-operator-and-lambda)。- `source` — 要处理的源数组。[`Array(T)`](/sql-reference/data-types/array)。- `[, cond1, ... , condN]` — 可选。提供给 Lambda 函数的 N 个条件数组,作为附加参数。[`Array(T)`](/sql-reference/data-types/array)。 - -**返回值** - -返回源数组中使 `func` 为 true 的最后一个元素,否则返回类型 `T` 的默认值。 - -**示例** - -**使用示例** - -```sql title=Query -SELECT arrayLast(x, y -> x=y, ['a', 'b', 'c'], ['a', 'b', 'c']) -``` - -```response title=Response -c -``` - -**未找到匹配项** - -```sql title=Query -SELECT arrayFirst(x, y -> x=y, [0, 1, 2], [3, 3, 3]) AS res, toTypeName(res) -``` - -```response title=Response -0 UInt8 -``` - - -## arrayLastIndex - -自 v1.1 引入 - -返回源数组中最后一个使 `func(x[, y1, y2, ... yN])` 返回 true 的元素的索引,否则返回 0。 - -**语法** - -```sql -arrayLastIndex(func(x[, y1, ..., yN]), source_arr[, cond1_arr, ... , condN_arr]) -``` - -**参数** - -* `func(x[, y1, ..., yN])` — 一个作用于源数组 (`x`) 和条件数组 (`y`) 元素的 lambda 函数。[`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `source_arr` — 要处理的源数组。[`Array(T)`](/sql-reference/data-types/array) -* `[, cond1_arr, ... , condN_arr]` — 可选。N 个条件数组,作为传递给 lambda 函数的附加参数。[`Array(T)`](/sql-reference/data-types/array) - -**返回值** - -返回使 `func` 返回 true 的源数组中最后一个元素的索引,否则返回 `0` [`UInt32`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT arrayLastIndex(x, y -> x=y, ['a', 'b', 'c'], ['a', 'b', 'c']); -``` - -```response title=Response -3 -``` - -**无匹配结果** - -```sql title=Query -SELECT arrayLastIndex(x, y -> x=y, ['a', 'b', 'c'], ['d', 'e', 'f']); -``` - -```response title=Response -0 -``` - - -## arrayLastOrNull - -引入版本:v1.1 - -返回源数组中最后一个使得 lambda `func(x [, y1, y2, ... yN])` 返回 true 的元素,如果不存在这样的元素,则返回 `NULL`。 - -**语法** - -```sql -arrayLastOrNull(func(x[, y1, ..., yN]), source_arr[, cond1_arr, ... , condN_arr]) -``` - -**参数** - -* `func(x [, y1, ..., yN])` — 作用于源数组 (`x`) 和条件数组 (`y`) 元素的 lambda 函数。[Lambda 函数](/sql-reference/functions/overview#arrow-operator-and-lambda)。 -* `source_arr` — 要处理的源数组。[`Array(T)`](/sql-reference/data-types/array)。 -* `[, cond1_arr, ... , condN_arr]` — 可选。提供给 lambda 函数的 N 个条件数组,作为额外参数。[`Array(T)`](/sql-reference/data-types/array)。 - -**返回值** - -返回源数组中最后一个不满足 `λ` 条件的元素,否则返回 `NULL`。 - -**示例** - -**用法示例** - -```sql title=Query -SELECT arrayLastOrNull(x, y -> x=y, ['a', 'b', 'c'], ['a', 'b', 'c']) -``` - -```response title=Response -c -``` - -**无匹配结果** - -```sql title=Query -SELECT arrayLastOrNull(x, y -> x=y, [0, 1, 2], [3, 3, 3]) AS res, toTypeName(res) -``` - -```response title=Response -NULL Nullable(UInt8) -``` - - -## arrayLevenshteinDistance - -自 v25.4 引入 - -计算两个数组之间的 Levenshtein 距离。 - -**语法** - -```sql -arrayLevenshteinDistance(from, to) -``` - -**参数** - -* `from` — 第一个数组。[`Array(T)`](/sql-reference/data-types/array)。- `to` — 第二个数组。[`Array(T)`](/sql-reference/data-types/array)。 - -**返回值** - -第一个数组与第二个数组之间的 Levenshtein 距离。[`Float64`](/sql-reference/data-types/float) - -**示例** - -**使用示例** - -```sql title=Query -SELECT arrayLevenshteinDistance([1, 2, 4], [1, 2, 3]) -``` - -```response title=Response -1 -``` - - -## arrayLevenshteinDistanceWeighted - -自 v25.4 版本引入 - -计算两个数组的 Levenshtein 距离,并为每个元素使用自定义权重。 -数组的元素数量应与其对应的权重数量一致。 - -**语法** - -```sql -arrayLevenshteinDistanceWeighted(from, to, from_weights, to_weights) -``` - -**参数** - -* `from` — 第一个数组。[`Array(T)`](/sql-reference/data-types/array)。 - `to` — 第二个数组。[`Array(T)`](/sql-reference/data-types/array)。 - `from_weights` — 第一个数组中各元素的权重。[`Array((U)Int*|Float*)`](/sql-reference/data-types/array) -* `to_weights` — 第二个数组中各元素的权重。[`Array((U)Int*|Float*)`](/sql-reference/data-types/array) - -**返回值** - -第一个数组和第二个数组之间的 Levenshtein 距离,并对每个元素应用自定义权重。[`Float64`](/sql-reference/data-types/float) - -**示例** - -**用法示例** - -```sql title=Query -SELECT arrayLevenshteinDistanceWeighted(['A', 'B', 'C'], ['A', 'K', 'L'], [1.0, 2, 3], [3.0, 4, 5]) -``` - -```response title=Response -14 -``` - - -## arrayMap - -自 v1.1 引入 - -通过对原始数组中的每个元素应用 lambda 函数,返回得到的新数组。 - -**语法** - -```sql -arrayMap(func, arr) -``` - -**参数** - -* `func` — 一个对源数组 (`x`) 和条件数组 (`y`) 的元素进行操作的 Lambda 函数。[`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `arr` — 要处理的 N 个数组。[`Array(T)`](/sql-reference/data-types/array) - -**返回值** - -返回由 Lambda 函数结果组成的数组。[`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**用法示例** - -```sql title=Query -SELECT arrayMap(x -> (x + 2), [1, 2, 3]) as res; -``` - -```response title=Response -[3, 4, 5] -``` - -**从不同数组的元素创建元组** - -```sql title=Query -SELECT arrayMap((x, y) -> (x, y), [1, 2, 3], [4, 5, 6]) AS res -``` - -```response title=Response -[(1, 4),(2, 5),(3, 6)] -``` - - -## arrayMax - -自 v21.1 引入 - -返回源数组中的最大元素。 - -如果指定了 lambda 函数 `func`,则返回该 lambda 函数结果中的最大元素。 - -**语法** - -```sql -arrayMax([func(x[, y1, ..., yN])], source_arr[, cond1_arr, ... , condN_arr]) -``` - -**参数** - -* `func(x[, y1, ..., yN])` — 可选。对源数组 (`x`) 和条件数组 (`y`) 的元素进行操作的 Lambda 函数。[`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `source_arr` — 要处理的源数组。[`Array(T)`](/sql-reference/data-types/array) -* `[, cond1_arr, ... , condN_arr]` — 可选。作为附加参数传递给 Lambda 函数的 N 个条件数组。[`Array(T)`](/sql-reference/data-types/array) - -**返回值** - -返回源数组中的最大元素;如果提供了 Lambda 函数,则返回其结果中的最大元素。 - -**示例** - -**基本示例** - -```sql title=Query -SELECT arrayMax([5, 3, 2, 7]); -``` - -```response title=Response -7 -``` - -**与 Lambda 函数配合使用** - -```sql title=Query -SELECT arrayMax(x, y -> x/y, [4, 8, 12, 16], [1, 2, 1, 2]); -``` - -```response title=Response -12 -``` - - -## arrayMin - -自 v21.1 引入 - -返回源数组中的最小元素。 - -如果指定了 lambda 函数 `func`,则返回该 lambda 函数结果中的最小元素。 - -**语法** - -```sql -arrayMin([func(x[, y1, ..., yN])], source_arr[, cond1_arr, ... , condN_arr]) -``` - -**参数** - -* `func(x[, y1, ..., yN])` — 可选。对源数组 (`x`) 和条件数组 (`y`) 的元素进行操作的 Lambda 函数。[`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `source_arr` — 要处理的源数组。[`Array(T)`](/sql-reference/data-types/array) -* `cond1_arr, ...` — 可选。N 个条件数组,为 Lambda 函数提供额外参数。[`Array(T)`](/sql-reference/data-types/array) - -**返回值** - -返回源数组中的最小元素;如果提供了 Lambda 函数,则返回其结果中的最小元素。 - -**示例** - -**基本示例** - -```sql title=Query -SELECT arrayMin([5, 3, 2, 7]); -``` - -```response title=Response -2 -``` - -**与 Lambda 函数配合使用** - -```sql title=Query -SELECT arrayMin(x, y -> x/y, [4, 8, 12, 16], [1, 2, 1, 2]); -``` - -```response title=Response -4 -``` - - -## arrayNormalizedGini - -引入自:v25.1 - -计算归一化 Gini 系数。 - -**语法** - -```sql -arrayNormalizedGini(predicted, label) -``` - -**参数** - -* `predicted` — 预测值。[`Array(T)`](/sql-reference/data-types/array) -* `label` — 实际值。[`Array(T)`](/sql-reference/data-types/array) - -**返回值** - -返回一个元组,包含预测值的 Gini 系数、归一化值的 Gini 系数,以及归一化 Gini 系数(= 前两个 Gini 系数的比值)。[`Tuple(Float64, Float64, Float64)`](/sql-reference/data-types/tuple) - -**示例** - -**用法示例** - -```sql title=Query -SELECT arrayNormalizedGini([0.9, 0.3, 0.8, 0.7],[6, 1, 0, 2]); -``` - -```response title=Response -(0.18055555555555558, 0.2638888888888889, 0.6842105263157896) -``` - - -## arrayPartialReverseSort - -自 v23.2 版本引入 - -此函数与 `arrayReverseSort` 相同,只是额外接受一个 `limit` 参数,用于进行部分排序。 - -:::tip -若只需保留排序后的元素,请使用 `arrayResize`。 -::: - -**语法** - -```sql -arrayPartialReverseSort([f,] arr [, arr1, ... ,arrN], limit) -``` - -**参数** - -* `f(arr[, arr1, ... ,arrN])` — 应用于数组 `x` 各元素的 Lambda 函数。[`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `arr` — 要排序的数组。[`Array(T)`](/sql-reference/data-types/array) -* `arr1, ... ,arrN` — 当 `f` 接受多个参数时使用的 N 个额外数组。[`Array(T)`](/sql-reference/data-types/array) -* `limit` — 执行排序的索引上限值。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回一个与原数组大小相同的数组,其中区间 `[1..limit]` 内的元素按降序排序。 -其余元素(区间 `(limit..N]`)的顺序未指定。 - -**示例** - -**simple_int** - -```sql title=Query -SELECT arrayPartialReverseSort(2, [5, 9, 1, 3]) -``` - -```response title=Response -[9, 5, 1, 3] -``` - -**simple_string** - -```sql title=Query -SELECT arrayPartialReverseSort(2, ['expenses','lasso','embolism','gladly']) -``` - -```response title=Response -['lasso','gladly','expenses','embolism'] -``` - -**retain_sorted** - -```sql title=Query -SELECT arrayResize(arrayPartialReverseSort(2, [5, 9, 1, 3]), 2) -``` - -```response title=Response -[9, 5] -``` - -**lambda_simple** - -```sql title=Query -SELECT arrayPartialReverseSort((x) -> -x, 2, [5, 9, 1, 3]) -``` - -```response title=Response -[1, 3, 5, 9] -``` - -**lambda_complex** - -```sql title=Query -SELECT arrayPartialReverseSort((x, y) -> -y, 1, [0, 1, 2], [1, 2, 3]) as res -``` - -```response title=Response -[0, 1, 2] -``` - - -## arrayPartialShuffle - -引入于:v23.2 - -返回一个与原数组长度相同的数组,其中区间 `[1..limit]` 内的元素是从原数组中随机选取的一个子集。剩余的 `(limit..n]` 区间将以未定义的顺序包含不在 `[1..limit]` 区间内的其他元素。 -`limit` 的取值范围为 `[1..n]`。超出该范围的取值等价于执行完整的 `arrayShuffle`: - -:::note -此函数不会物化常量。 - -`limit` 的取值范围应为 `[1..N]`。超出该范围的取值等价于执行完整的 [`arrayShuffle`](#arrayShuffle)。 -::: - -**语法** - -```sql -arrayPartialShuffle(arr [, limit[, seed]]) -``` - -**参数** - -* `arr` — 要进行洗牌的数组。[`Array(T)`](/sql-reference/data-types/array) -* `seed` — 可选。用于随机数生成的种子。如果未提供,则会使用一个随机种子。[`(U)Int*`](/sql-reference/data-types/int-uint) -* `limit` — 可选。用于限制元素交换次数的数值,范围为 `[1..N]`。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -元素被部分打乱顺序的数组。[`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**no_limit1** - -```sql title=Query -SELECT arrayPartialShuffle([1, 2, 3, 4], 0) -``` - -```response title=Response -[2, 4, 3, 1] -``` - -**no_limit2** - -```sql title=Query -SELECT arrayPartialShuffle([1, 2, 3, 4]) -``` - -```response title=Response -[4, 1, 3, 2] -``` - -**random_seed** - -```sql title=Query -SELECT arrayPartialShuffle([1, 2, 3, 4], 2) -``` - -```response title=Response -[3, 4, 1, 2] -``` - -**explicit_seed** - -```sql title=Query -SELECT arrayPartialShuffle([1, 2, 3, 4], 2, 41) -``` - -```response title=Response -[3, 2, 1, 4] -``` - -**物化** - -```sql title=Query -SELECT arrayPartialShuffle(materialize([1, 2, 3, 4]), 2, 42), arrayPartialShuffle([1, 2, 3], 2, 42) FROM numbers(10) -``` - -```response title=Response -┌─arrayPartial⋯4]), 2, 42)─┬─arrayPartial⋯ 3], 2, 42)─┐ -│ [3,2,1,4] │ [3,2,1] │ -│ [3,2,1,4] │ [3,2,1] │ -│ [4,3,2,1] │ [3,2,1] │ -│ [1,4,3,2] │ [3,2,1] │ -│ [3,4,1,2] │ [3,2,1] │ -│ [1,2,3,4] │ [3,2,1] │ -│ [1,4,3,2] │ [3,2,1] │ -│ [1,4,3,2] │ [3,2,1] │ -│ [3,1,2,4] │ [3,2,1] │ -│ [1,3,2,4] │ [3,2,1] │ -└──────────────────────────┴──────────────────────────┘ -``` - - -## arrayPartialSort - -引入版本:v23.2 - -此函数与 `arraySort` 相同,但增加了一个 `limit` 参数,用于只对部分元素进行排序。 - -:::tip -若只想保留排序后的元素,请使用 `arrayResize`。 -::: - -**语法** - -```sql -arrayPartialSort([f,] arr [, arr1, ... ,arrN], limit) -``` - -**参数** - -* `f(arr[, arr1, ... ,arrN])` — 应用于数组 `x` 各元素的 Lambda 函数。[`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `arr` — 要排序的数组。[`Array(T)`](/sql-reference/data-types/array) -* `arr1, ... ,arrN` — 当 `f` 接受多个参数时使用的 N 个附加数组。[`Array(T)`](/sql-reference/data-types/array) -* `limit` — 进行排序的索引上限值。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回一个与原数组大小相同的数组,其中区间 `[1..limit]` 中的元素按升序排序。其余索引在区间 `(limit..N]` 内的元素顺序不保证。 - -**示例** - -**simple_int** - -```sql title=Query -SELECT arrayPartialSort(2, [5, 9, 1, 3]) -``` - -```response title=Response -[1, 3, 5, 9] -``` - -**simple_string** - -```sql title=Query -SELECT arrayPartialSort(2, ['expenses', 'lasso', 'embolism', 'gladly']) -``` - -```response title=Response -['embolism', 'expenses', 'gladly', 'lasso'] -``` - -**retain_sorted** - -```sql title=Query -SELECT arrayResize(arrayPartialSort(2, [5, 9, 1, 3]), 2) -``` - -```response title=Response -[1, 3] -``` - -**lambda_simple** - -```sql title=Query -SELECT arrayPartialSort((x) -> -x, 2, [5, 9, 1, 3]) -``` - -```response title=Response -[9, 5, 1, 3] -``` - -**lambda_complex** - -```sql title=Query -SELECT arrayPartialSort((x, y) -> -y, 1, [0, 1, 2], [1, 2, 3]) as res -``` - -```response title=Response -[2, 1, 0] -``` - - -## arrayPopBack - -自 v1.1 起引入 - -从数组中移除最后一个元素。 - -**语法** - -```sql -arrayPopBack(arr) -``` - -**参数** - -* `arr` — 要从中移除最后一个元素的数组。[`Array(T)`](/sql-reference/data-types/array) - -**返回值** - -返回一个与 `arr` 相同的数组,但不包含其最后一个元素。[`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**用法示例** - -```sql title=Query -SELECT arrayPopBack([1, 2, 3]) AS res; -``` - -```response title=Response -[1, 2] -``` - - -## arrayPopFront - -自 v1.1 版本引入 - -从数组中移除第一个元素。 - -**语法** - -```sql -arrayPopFront(arr) -``` - -**参数** - -* `arr` — 要删除第一个元素的数组。[`Array(T)`](/sql-reference/data-types/array) - -**返回值** - -返回一个与 `arr` 相同的数组,但不包含其第一个元素。[`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**用法示例** - -```sql title=Query -SELECT arrayPopFront([1, 2, 3]) AS res; -``` - -```response title=Response -[2, 3] -``` - - -## arrayProduct - -引入版本:v21.1 - -返回源数组中各元素的乘积。 - -如果指定了 lambda 函数 `func`,则返回该 lambda 函数结果数组中各元素的乘积。 - -**语法** - -```sql -arrayProduct([func(x[, y1, ..., yN])], source_arr[, cond1_arr, ... , condN_arr]) -``` - -**参数** - -* `func(x[, y1, ..., yN])` — 可选。对源数组 (`x`) 及条件数组 (`y`) 的元素进行操作的 lambda 函数。[`Lambda 函数`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `source_arr` — 要处理的源数组。[`Array(T)`](/sql-reference/data-types/array) -* `[, cond1_arr, ... , condN_arr]` — 可选。传递给 lambda 函数的 N 个条件数组,用作额外参数。[`Array(T)`](/sql-reference/data-types/array) - -**返回值** - -返回源数组中各元素的乘积;如果提供了 lambda 函数,则返回其结果各元素的乘积。[`Float64`](/sql-reference/data-types/float) - -**示例** - -**基础示例** - -```sql title=Query -SELECT arrayProduct([1, 2, 3, 4]); -``` - -```response title=Response -24 -``` - -**与 Lambda 函数配合使用** - -```sql title=Query -SELECT arrayProduct(x, y -> x+y, [2, 2], [2, 2]) AS res; -``` - -```response title=Response -16 -``` - - -## arrayPushBack - -引入版本:v1.1 - -在数组末尾追加一个元素。 - -**语法** - -```sql -arrayPushBack(arr, x) -``` - -**参数** - -* `arr` — 要在其末尾添加值 `x` 的数组。[`Array(T)`](/sql-reference/data-types/array) -* `x` — -* 要添加到数组末尾的单个值。[`Array(T)`](/sql-reference/data-types/array)。 - -:::note - -* 只能向数值数组中添加数值,且只能向字符串数组中添加字符串。 -* 在添加数值时,ClickHouse 会根据数组的数据类型自动设置 `x` 的类型。 -* 可以为 `NULL`。函数会向数组中添加一个 `NULL` 元素,并将数组元素的类型转换为 `Nullable`。 - -有关 ClickHouse 中数据类型的更多信息,请参阅 [数据类型](/sql-reference/data-types)。 -::: - -**返回值** - -返回一个与 `arr` 相同的数组,但在数组末尾追加了一个值 `x` [`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**用法示例** - -```sql title=Query -SELECT arrayPushBack(['a'], 'b') AS res; -``` - -```response title=Response -['a','b'] -``` - - -## arrayPushFront - -自 v1.1 引入 - -在数组开头添加一个元素。 - -**语法** - -```sql -arrayPushFront(arr, x) -``` - -**参数** - -* `arr` — 要在其末尾添加值 `x` 的数组。[`Array(T)`](/sql-reference/data-types/array)。 -* `x` — 要添加到数组开头的单个值。[`Array(T)`](/sql-reference/data-types/array)。 - -:::note - -* 只能向数值数组中添加数值,且只能向字符串数组中添加字符串。 -* 添加数值时,ClickHouse 会自动将 `x` 的类型设置为该数组的数据类型。 -* 可以为 `NULL`。该函数会向数组添加一个 `NULL` 元素,并将数组元素类型转换为 `Nullable`。 - -有关 ClickHouse 中数据类型的更多信息,参见[数据类型](/sql-reference/data-types)。 -::: - -**返回值** - -返回一个与 `arr` 相同的数组,但在数组开头额外多了一个值 `x`。[`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**用法示例** - -```sql title=Query -SELECT arrayPushFront(['b'], 'a') AS res; -``` - -```response title=Response -['a','b'] -``` - - -## arrayROCAUC - -引入版本:v20.4 - -计算接收者操作特征(ROC)曲线下面积。 -ROC 曲线是通过在所有阈值下,以真正例率(TPR)为纵轴、假正例率(FPR)为横轴绘制得到的。 -结果数值范围为 0 到 1,数值越高表示模型性能越好。 - -ROC AUC(也常被简称为 AUC)是机器学习中的一个概念。 -更多详情请参阅[此处](https://developers.google.com/machine-learning/glossary#pr-auc-area-under-the-pr-curve)、[此处](https://developers.google.com/machine-learning/crash-course/classification/roc-and-auc#expandable-1)以及[此处](https://en.wikipedia.org/wiki/Receiver_operating_characteristic#Area_under_the_curve)。 - -**语法** - -```sql -arrayROCAUC(scores, labels[, scale[, partial_offsets]]) -``` - -**别名**: `arrayAUC` - -**参数** - -* `scores` — 预测模型给出的得分。[`Array((U)Int*)`](/sql-reference/data-types/array) 或 [`Array(Float*)`](/sql-reference/data-types/array) -* `labels` — 样本的标签,通常正样本为 1,负样本为 0。[`Array((U)Int*)`](/sql-reference/data-types/array) 或 [`Enum`](/sql-reference/data-types/enum) -* `scale` — 可选。决定是否返回归一化后的面积。如果为 false,则返回 TP(真阳性)- FP(假阳性)曲线下的面积。默认值:true。[`Bool`](/sql-reference/data-types/boolean) -* `partial_offsets` — -* 一个由四个非负整数组成的数组,用于计算 ROC 曲线下的局部面积(等价于 ROC 空间中的一条垂直带),而不是整个 AUC。此选项对 ROC AUC 的分布式计算非常有用。该数组必须包含以下元素 [`higher_partitions_tp`, `higher_partitions_fp`, `total_positives`, `total_negatives`]。非负 [整数](../data-types/int-uint.md) 的 [Array](/sql-reference/data-types/array)。可选。 - * `higher_partitions_tp`: 高得分分区中正标签的数量。 - * `higher_partitions_fp`: 高得分分区中负标签的数量。 - * `total_positives`: 整个数据集中正样本的总数。 - * `total_negatives`: 整个数据集中负样本的总数。 - -:::note -当使用 `arr_partial_offsets` 时,`arr_scores` 和 `arr_labels` 应仅为整个数据集的一个分区,且包含某一得分区间内的数据。 -数据集应被划分为连续的分区,每个分区包含得分落在特定范围内的数据子集。 -例如: - -* 一个分区可以包含区间 [0, 0.5) 内的所有得分。 -* 另一个分区可以包含区间 [0.5, 1.0] 内的得分。 - ::: - -**返回值** - -返回 ROC(受试者工作特征)曲线下的面积。[`Float64`](/sql-reference/data-types/float) - -**示例** - -**使用示例** - -```sql title=Query -SELECT arrayROCAUC([0.1, 0.4, 0.35, 0.8], [0, 0, 1, 1]); -``` - -```response title=Response -0.75 -``` - - -## arrayRandomSample - -自 v23.10 版本引入 - -返回由输入数组中 `samples` 个随机元素组成的子集。如果 `samples` 大于输入数组的大小,则样本大小会被限制为数组大小,即会返回数组中的所有元素,但不保证其顺序。该函数既可以处理一维数组,也可以处理嵌套数组。 - -**语法** - -```sql -arrayRandomSample(arr, samples) -``` - -**参数** - -* `arr` — 要从中抽取元素的输入数组或多维数组。[`Array(T)`](/sql-reference/data-types/array) -* `samples` — 随机样本中包含的元素数量(样本大小)。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -一个数组,包含从输入数组中随机抽取的元素样本。[`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**用法示例** - -```sql title=Query -SELECT arrayRandomSample(['apple', 'banana', 'cherry', 'date'], 2) as res; -``` - -```response title=Response -['cherry','apple'] -``` - -**使用多维数组** - -```sql title=Query -SELECT arrayRandomSample([[1, 2], [3, 4], [5, 6]], 2) as res; -``` - -```response title=Response -[[3,4],[5,6]] -``` - - -## arrayReduce - -自 v1.1 引入 - -对数组元素执行聚合函数计算,并返回结果。 -聚合函数的名称以单引号括起来的字符串形式传入,例如 `'max'`、`'sum'`。 -使用参数化聚合函数时,在函数名后通过括号指定参数,例如 `'uniqUpTo(6)'`。 - -**语法** - -```sql -arrayReduce(agg_f, arr1 [, arr2, ... , arrN)]) -``` - -**参数** - -* `agg_f` — 聚合函数的名称,必须为常量。[`String`](/sql-reference/data-types/string) -* `arr1 [, arr2, ... , arrN)]` — 与 `agg_f` 的参数相对应的 N 个数组。[`Array(T)`](/sql-reference/data-types/array) - -**返回值** - -返回聚合函数的结果。 - -**示例** - -**使用示例** - -```sql title=Query -SELECT arrayReduce('max', [1, 2, 3]); -``` - -```response title=Response -┌─arrayReduce('max', [1, 2, 3])─┐ -│ 3 │ -└───────────────────────────────┘ -``` - -**使用多参数聚合函数的示例** - -```sql title=Query ---如果聚合函数接受多个参数,则必须将该函数应用于大小相同的多个数组。 - -SELECT arrayReduce('maxIf', [3, 5], [1, 0]); -``` - -```response title=Response -┌─arrayReduce('maxIf', [3, 5], [1, 0])─┐ -│ 3 │ -└──────────────────────────────────────┘ -``` - -**参数化聚合函数示例** - -```sql title=Query -SELECT arrayReduce('uniqUpTo(3)', [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -``` - -```response title=Response -┌─arrayReduce('uniqUpTo(3)', [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])─┐ -│ 4 │ -└─────────────────────────────────────────────────────────────┘ -``` - - -## arrayReduceInRanges - -自 v20.4 引入 - -对给定区间内的数组元素应用聚合函数,并返回一个数组,其中包含每个区间对应的结果。 -该函数返回的结果与对每个区间分别调用多次 `arrayReduce(agg_func, arraySlice(arr1, index, length), ...)` 所得到的结果相同。 - -**语法** - -```sql -arrayReduceInRanges(agg_f, ranges, arr1 [, arr2, ... ,arrN)]) -``` - -**参数** - -* `agg_f` — 要使用的聚合函数名称。[`String`](/sql-reference/data-types/string) -* `ranges` — 要执行聚合的范围。为一个由元组 `(i, r)` 组成的数组,其中 `i` 为开始聚合的索引,`r` 为要聚合的范围。[`Array(T)`](/sql-reference/data-types/array) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) -* `arr1 [, arr2, ... ,arrN)]` — 作为聚合函数参数的 N 个数组。[`Array(T)`](/sql-reference/data-types/array) - -**返回值** - -返回一个数组,其中包含在指定范围内执行聚合函数所得的结果。[`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**用法示例** - -```sql title=Query -SELECT arrayReduceInRanges( - 'sum', - [(1, 5), (2, 3), (3, 4), (4, 4)], - [1000000, 200000, 30000, 4000, 500, 60, 7] -) AS res -``` - -```response title=Response -┌─res─────────────────────────┐ -│ [1234500,234000,34560,4567] │ -└─────────────────────────────┘ -``` - - -## arrayRemove - -自 v25.11 引入 - -从数组中删除所有与给定值相等的元素。 -NULL 也被视为相等。 - -**语法** - -```sql -arrayRemove(arr, elem) -``` - -**别名**: `array_remove` - -**参数** - -* `arr` — Array(T),`elem` — T - -**返回值** - -返回源数组 [`Array(T)`](/sql-reference/data-types/array) 的子集 - -**示例** - -**示例 1** - -```sql title=Query -SELECT arrayRemove([1, 2, 2, 3], 2) -``` - -```response title=Response -[1, 3] -``` - -**示例 2** - -```sql title=Query -SELECT arrayRemove(['a', NULL, 'b', NULL], NULL) -``` - -```response title=Response -['a', 'b'] -``` - - -## arrayResize - -在 v1.1 中引入 - -修改数组长度。 - -**语法** - -```sql -arrayResize(arr, size[, extender]) -``` - -**参数** - -* `arr` — 要调整大小的数组。[`Array(T)`](/sql-reference/data-types/array) -* `size` — - 数组的新长度。 - 如果 `size` 小于数组的原始长度,则从右侧截断数组。 - 如果 `size` 大于数组的原始长度,则从右侧使用 `extender` 值或数组元素数据类型的默认值进行扩展。 -* `extender` — 用于扩展数组的值。可以为 `NULL`。 - -**返回值** - -长度为 `size` 的数组。[`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**示例 1** - -```sql title=Query -SELECT arrayResize([1], 3); -``` - -```response title=Response -[1,0,0] -``` - -**示例 2** - -```sql title=Query -SELECT arrayResize([1], 3, NULL); -``` - -```response title=Response -[1,NULL,NULL] -``` - - -## arrayReverse - -自 v1.1 引入 - -将给定数组中的元素顺序反转。 - -:::note -函数 `reverse(arr)` 具有相同的功能,但除了数组之外,还适用于其他数据类型。 -::: - -**语法** - -```sql -arrayReverse(arr) -``` - -**参数** - -* `arr` — 要反转顺序的数组。[`Array(T)`](/sql-reference/data-types/array) - -**返回值** - -返回一个与原数组大小相同的数组,其中元素顺序被反转。[`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**用法示例** - -```sql title=Query -SELECT arrayReverse([1, 2, 3]) -``` - -```response title=Response -[3,2,1] -``` - - -## arrayReverseFill - -引入版本:v20.1 - -`arrayReverseFill` 函数从源数组的最后一个元素开始依次处理到第一个元素,在每个位置上使用源数组和条件数组中的元素来对一个 lambda 表达式进行求值。当该条件在位置 i 上的结果为 false 时,函数会将该元素替换为当前数组状态下位置 i+1 的元素。无论条件如何,最后一个元素始终会被保留。 - -**语法** - -```sql -arrayReverseFill(func(x[, y1, ..., yN]), source_arr[, cond1_arr, ... , condN_arr]) -``` - -**参数** - -* `func(x[, y1, ..., yN])` — 一个对源数组 (`x`) 和条件数组 (`y`) 的元素进行操作的 lambda 函数。[`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `source_arr` — 要处理的源数组。[`Array(T)`](/sql-reference/data-types/array) -* `[, cond1_arr, ... , condN_arr]` — 可选。提供给 lambda 函数作为额外参数的 N 个条件数组。[`Array(T)`](/sql-reference/data-types/array) - -**返回值** - -返回一个数组,其中源数组的元素被 lambda 函数的结果替换。[`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**使用单个数组的示例** - -```sql title=Query -SELECT arrayReverseFill(x -> not isNull(x), [1, null, 2, null]) AS res -``` - -```response title=Response -[1, 2, 2, NULL] -``` - -**两个数组示例** - -```sql title=Query -SELECT arrayReverseFill(x, y, z -> x > y AND x < z, [5, 3, 6, 2], [4, 7, 1, 3], [10, 2, 8, 5]) AS res; -``` - -```response title=Response -[5, 6, 6, 2] -``` - - -## arrayReverseSort - -引入版本:v1.1 - -按降序对数组元素进行排序。 -如果指定了函数 `f`,则会根据该函数应用于数组元素的结果对输入数组进行排序,然后再将排序后的数组反转。 -如果 `f` 接受多个参数,则会向 `arrayReverseSort` 函数传入多个数组,这些数组将分别对应 `func` 的各个参数。 - -如果待排序的数组包含 `-Inf`、`NULL`、`NaN` 或 `Inf`,它们将按以下顺序排序: - -1. `-Inf` -2. `Inf` -3. `NaN` -4. `NULL` - -`arrayReverseSort` 是一个[高阶函数](/sql-reference/functions/overview#higher-order-functions)。 - -**语法** - -```sql -arrayReverseSort([f,] arr [, arr1, ... ,arrN) -``` - -**参数** - -* `f(y1[, y2 ... yN])` — 要应用于数组 `x` 元素的 lambda 函数。 -* `arr` — 要排序的数组。[`Array(T)`](/sql-reference/data-types/array) -* `arr1, ..., yN` — 可选。当 `f` 接受多个参数时传入的 N 个附加数组。 - -**返回值** - -如果未提供 lambda 函数,则返回按降序排序的数组 `x`;否则,先根据所提供的 lambda 函数的逻辑进行排序,然后将结果反转后的数组。[`Array(T)`](/sql-reference/data-types/array)。 - -**示例** - -**示例 1** - -```sql title=Query -SELECT arrayReverseSort((x, y) -> y, [4, 3, 5], ['a', 'b', 'c']) AS res; -``` - -```response title=Response -[5,3,4] -``` - -**示例 2** - -```sql title=Query -SELECT arrayReverseSort((x, y) -> -y, [4, 3, 5], [1, 2, 3]) AS res; -``` - -```response title=Response -[4,3,5] -``` - - -## arrayReverseSplit - -引入版本:v20.1 - -将源数组拆分为多个数组。当 `func(x[, y1, ..., yN])` 返回非零值时,数组会在该元素的右侧进行拆分。数组不会在最后一个元素之后被拆分。 - -**语法** - -```sql -arrayReverseSplit(func(x[, y1, ..., yN]), source_arr[, cond1_arr, ... , condN_arr]) -``` - -**参数** - -* `func(x[, y1, ..., yN])` — 对源数组 (`x`) 和条件数组 (`y`) 的元素进行操作的 lambda 函数。[`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `source_arr` — 要处理的源数组。[`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `[, cond1_arr, ... , condN_arr]` — 可选。N 个条件数组,为 lambda 函数提供额外参数。[`Array(T)`](/sql-reference/data-types/array) - -**返回值** - -返回一个数组的数组。[`Array(Array(T))`](/sql-reference/data-types/array) - -**示例** - -**用法示例** - -```sql title=Query -SELECT arrayReverseSplit((x, y) -> y, [1, 2, 3, 4, 5], [1, 0, 0, 1, 0]) AS res -``` - -```response title=Response -[[1], [2, 3, 4], [5]] -``` - - -## arrayRotateLeft - -引入版本:v23.8 - -将数组按指定的元素个数向左旋转。`n` 为负值时,等价于按其绝对值向右旋转。 - -**语法** - -```sql -arrayRotateLeft(arr, n) -``` - -**参数** - -* `arr` — 要进行元素旋转的数组。[`Array(T)`](/sql-reference/data-types/array)。- `n` — 要旋转的元素个数。[`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint)。 - -**返回值** - -向左旋转指定数量元素后得到的数组 [`Array(T)`](/sql-reference/data-types/array)。 - -**示例** - -**用法示例** - -```sql title=Query -SELECT arrayRotateLeft([1,2,3,4,5,6], 2) as res; -``` - -```response title=Response -[3,4,5,6,1,2] -``` - -**n 的负值** - -```sql title=Query -SELECT arrayRotateLeft([1,2,3,4,5,6], -2) as res; -``` - -```response title=Response -[5,6,1,2,3,4] -``` - - -## arrayRotateRight - -引入于:v23.8 - -将数组向右旋转指定数量的元素。`n` 的负值被视为按其绝对值个元素向左旋转。 - -**语法** - -```sql -arrayRotateRight(arr, n) -``` - -**参数** - -* `arr` — 要进行元素旋转的数组。[`Array(T)`](/sql-reference/data-types/array)。 - `n` — 需要旋转的元素个数。[`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint)。 - -**返回值** - -向右旋转指定数量元素后的数组 [`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**用法示例** - -```sql title=Query -SELECT arrayRotateRight([1,2,3,4,5,6], 2) as res; -``` - -```response title=Response -[5,6,1,2,3,4] -``` - -**n 的负值** - -```sql title=Query -SELECT arrayRotateRight([1,2,3,4,5,6], -2) as res; -``` - -```response title=Response -[3,4,5,6,1,2] -``` - - -## arrayShiftLeft - -自 v23.8 起引入 - -将数组左移指定数量的元素。 -新填充的元素使用提供的参数或数组元素类型的默认值。 -如果该数量为负数,则将数组右移。 - -**语法** - -```sql -arrayShiftLeft(arr, n[, default]) -``` - -**参数** - -* `arr` — 要进行元素移位的数组。[`Array(T)`](/sql-reference/data-types/array) -* `n` — 要移位的元素数量。[`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) -* `default` — 可选。新元素的默认值。 - -**返回值** - -一个向左移位指定数量元素的数组 [`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**使用示例** - -```sql title=Query -SELECT arrayShiftLeft([1,2,3,4,5,6], 2) as res; -``` - -```response title=Response -[3,4,5,6,0,0] -``` - -**n 为负数** - -```sql title=Query -SELECT arrayShiftLeft([1,2,3,4,5,6], -2) as res; -``` - -```response title=Response -[0,0,1,2,3,4] -``` - -**使用默认值** - -```sql title=Query -SELECT arrayShiftLeft([1,2,3,4,5,6], 2, 42) as res; -``` - -```response title=Response -[3,4,5,6,42,42] -``` - - -## arrayShiftRight - -引入自:v23.8 - -将数组向右移位指定数量的元素。 -新元素使用提供的参数或数组元素类型的默认值进行填充。 -如果元素数量为负值,数组将向左移位。 - -**语法** - -```sql -arrayShiftRight(arr, n[, default]) -``` - -**参数** - -* `arr` — 要进行元素移位的数组。[`Array(T)`](/sql-reference/data-types/array) -* `n` — 向右移位的元素个数。[`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) -* `default` — 可选。新元素的默认值。 - -**返回值** - -一个按指定元素个数向右移位后的数组 [`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**使用示例** - -```sql title=Query -SELECT arrayShiftRight([1, 2, 3, 4, 5, 6], 2) as res; -``` - -```response title=Response -[0, 0, 1, 2, 3, 4] -``` - -**n 的负值** - -```sql title=Query -SELECT arrayShiftRight([1, 2, 3, 4, 5, 6], -2) as res; -``` - -```response title=Response -[3, 4, 5, 6, 0, 0] -``` - -**使用默认值** - -```sql title=Query -SELECT arrayShiftRight([1, 2, 3, 4, 5, 6], 2, 42) as res; -``` - -```response title=Response -[42, 42, 1, 2, 3, 4] -``` - - -## arrayShingles - -引入版本:v24.1 - -生成一个由 shingle 组成的数组(类似于字符串的 n-grams),即从输入数组中按指定长度提取的连续子数组。 - -**语法** - -```sql -arrayShingles(arr, l) -``` - -**参数** - -* `arr` — 要从中生成 shingle 数组的数组。[`Array(T)`](/sql-reference/data-types/array) -* `l` — 每个 shingle 的长度。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -生成的 shingle 数组。[`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**用法示例** - -```sql title=Query -SELECT arrayShingles([1, 2, 3, 4], 3) as res; -``` - -```response title=Response -[[1, 2, 3], [2, 3, 4]] -``` - - -## arrayShuffle - -自 v23.2 起引入 - -返回一个与原数组大小相同的数组,其元素顺序被打乱。 -元素会以一种方式重新排列,使得这些元素的每一种可能排列出现的概率都相同。 - -:::note -此函数不会将常量物化。 -::: - -**语法** - -```sql -arrayShuffle(arr [, seed]) -``` - -**参数** - -* `arr` — 要打乱的数组。[`Array(T)`](/sql-reference/data-types/array) -* `seed (optional)` — 可选。用于随机数生成的种子。如果未指定,则会使用随机种子。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -元素顺序被打乱的数组 [`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**未指定 seed 的示例(结果不稳定)** - -```sql title=Query -SELECT arrayShuffle([1, 2, 3, 4]); -``` - -```response title=Response -[1,4,2,3] -``` - -**未使用种子的示例(稳定结果)** - -```sql title=Query -SELECT arrayShuffle([1, 2, 3, 4], 41); -``` - -```response title=Response -[3,2,1,4] -``` - - -## arraySimilarity - -引入版本:v25.4 - -基于加权 Levenshtein 距离计算两个数组的相似度,取值范围为 `0` 到 `1`。 - -**语法** - -```sql -arraySimilarity(from, to, from_weights, to_weights) -``` - -**参数** - -* `from` — 第一个数组 [`Array(T)`](/sql-reference/data-types/array) -* `to` — 第二个数组 [`Array(T)`](/sql-reference/data-types/array) -* `from_weights` — 第一个数组的权重 [`Array((U)Int*|Float*)`](/sql-reference/data-types/array) -* `to_weights` — 第二个数组的权重 [`Array((U)Int*|Float*)`](/sql-reference/data-types/array) - -**返回值** - -返回两个数组之间的相似度(基于加权 Levenshtein 距离),取值范围为 `0` 到 `1`,类型为 [`Float64`](/sql-reference/data-types/float) - -**示例** - -**使用示例** - -```sql title=Query -SELECT arraySimilarity(['A', 'B', 'C'], ['A', 'K', 'L'], [1.0, 2, 3], [3.0, 4, 5]); -``` - -```response title=Response -0.2222222222222222 -``` - - -## arraySlice - -自 v1.1 起引入 - -返回数组的一个切片,其中包含 `NULL` 元素。 - -**语法** - -```sql -arraySlice(arr, offset [, length]) -``` - -**参数** - -* `arr` — 要进行切片的数组。[`Array(T)`](/sql-reference/data-types/array) -* `offset` — 从数组边界起算的偏移量。正值表示从左侧开始的偏移,负值表示从右侧开始的偏移。数组元素的编号从 `1` 开始。[`(U)Int*`](/sql-reference/data-types/int-uint) -* `length` — 所需切片的长度。如果指定为负值,函数返回切片 `[offset, array_length - length]`。如果省略该值,函数返回切片 `[offset, 数组末尾]`。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回从指定 `offset` 开始、长度为 `length` 的数组切片 [`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**用法示例** - -```sql title=Query -SELECT arraySlice([1, 2, NULL, 4, 5], 2, 3) AS res; -``` - -```response title=Response -[2, NULL, 4] -``` - - -## arraySort - -引入于:v1.1 - -对给定数组的元素按升序排序。 -如果指定了 lambda 函数 `f`,则排序顺序由对数组中每个元素应用该 lambda 后得到的结果决定。 -如果该 lambda 接受多个参数,则会向 `arraySort` 函数传入多个数组,这些数组将与 `f` 的各个参数一一对应。 - -如果要排序的数组包含 `-Inf`、`NULL`、`NaN` 或 `Inf`,它们将按照以下顺序排列: - -1. `-Inf` -2. `Inf` -3. `NaN` -4. `NULL` - -`arraySort` 是一个[高阶函数](/sql-reference/functions/overview#higher-order-functions)。 - -**语法** - -```sql -arraySort([f,] arr [, arr1, ... ,arrN]) -``` - -**参数** - -* `f(y1[, y2 ... yN])` — 应用于数组 `x` 元素的 lambda 函数。- `arr` — 要排序的数组。[`Array(T)`](/sql-reference/data-types/array) - `arr1, ..., yN` — 可选。当 `f` 接受多个参数时使用的 N 个附加数组。 - -**返回值** - -如果未提供 lambda 函数,则返回按升序排序的数组 `arr`,否则返回根据所提供 lambda 函数逻辑排序的数组。[`Array(T)`](/sql-reference/data-types/array)。 - -**示例** - -**示例 1** - -```sql title=Query -SELECT arraySort([1, 3, 3, 0]); -``` - -```response title=Response -[0,1,3,3] -``` - -**示例 2** - -```sql title=Query -SELECT arraySort(['hello', 'world', '!']); -``` - -```response title=Response -['!','hello','world'] -``` - -**示例 3** - -```sql title=Query -SELECT arraySort([1, nan, 2, NULL, 3, nan, -4, NULL, inf, -inf]); -``` - -```response title=Response -[-inf,-4,1,2,3,inf,nan,nan,NULL,NULL] -``` - - -## arraySplit - -引入版本:v20.1 - -将源数组拆分为多个数组。当 `func(x [, y1, ..., yN])` 返回非零值时,数组会在该元素的左侧进行拆分。数组不会在第一个元素之前进行拆分。 - -**语法** - -```sql -arraySplit(func(x[, y1, ..., yN]), source_arr[, cond1_arr, ... , condN_arr]) -``` - -**参数** - -* `func(x[, y1, ..., yN])` — 一个用于处理源数组 (`x`) 和条件数组 (`y`) 元素的 Lambda 函数。[Lambda 函数](/sql-reference/functions/overview#arrow-operator-and-lambda)。 - `source_arr` — 要拆分的源数组 [`Array(T)`](/sql-reference/data-types/array)。 - `[, cond1_arr, ... , condN_arr]` — 可选。作为传递给 Lambda 函数的附加参数的 N 个条件数组。[`Array(T)`](/sql-reference/data-types/array)。 - -**返回值** - -返回一个由数组组成的数组 [`Array(Array(T))`](/sql-reference/data-types/array) - -**示例** - -**用法示例** - -```sql title=Query -SELECT arraySplit((x, y) -> y, [1, 2, 3, 4, 5], [1, 0, 0, 1, 0]) AS res -``` - -```response title=Response -[[1, 2, 3], [4, 5]] -``` - - -## arraySum - -自 v21.1 引入 - -返回源数组中各元素的总和。 - -如果指定了 lambda 函数 `func`,则返回对数组元素应用该 lambda 后所得结果的总和。 - -**语法** - -```sql -arrayMax([func(x[, y1, ..., yN])], source_arr[, cond1_arr, ... , condN_arr]) -``` - -**参数** - -* `func(x[, y1, ..., yN])` — 可选。一个对源数组 (`x`) 及条件数组 (`y`) 的元素进行操作的 Lambda 函数。[`Lambda function`](/sql-reference/functions/overview#arrow-operator-and-lambda) -* `source_arr` — 要处理的源数组。[`Array(T)`](/sql-reference/data-types/array) -* `, cond1_arr, ... , condN_arr]` — 可选。N 个条件数组,为 Lambda 函数提供额外参数。[`Array(T)`](/sql-reference/data-types/array) - -**返回值** - -返回源数组中元素的总和;如果提供了 Lambda 函数,则返回该函数结果中各元素的总和。 - -**示例** - -**基本示例** - -```sql title=Query -SELECT arraySum([1, 2, 3, 4]); -``` - -```response title=Response -10 -``` - -**与 Lambda 函数配合使用** - -```sql title=Query -SELECT arraySum(x, y -> x+y, [1, 1, 1, 1], [1, 1, 1, 1]); -``` - -```response title=Response -8 -``` - - -## arraySymmetricDifference - -引入版本:v25.4 - -接受多个数组作为输入,并返回一个数组,其中包含未同时出现在所有源数组中的元素。结果仅包含不重复的值。 - -:::note -*多于两个集合* 的对称差 [在数学上的定义](https://en.wikipedia.org/wiki/Symmetric_difference#n-ary_symmetric_difference) -是由所有在奇数个输入集合中出现的输入元素构成的集合。 -相比之下,函数 `arraySymmetricDifference` 仅返回所有未在所有输入集合中同时出现的输入元素构成的集合。 -::: - -**语法** - -```sql -arraySymmetricDifference(arr1, arr2, ... , arrN) -``` - -**参数** - -* `arrN` — 用于构造新数组的 N 个数组。[`Array(T)`](/sql-reference/data-types/array)。 - -**返回值** - -返回一个数组,包含未在所有源数组中同时出现的唯一元素。[`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**使用示例** - -```sql title=Query -SELECT -arraySymmetricDifference([1, 2], [1, 2], [1, 2]) AS empty_symmetric_difference, -arraySymmetricDifference([1, 2], [1, 2], [1, 3]) AS non_empty_symmetric_difference; -``` - -```response title=Response -┌─empty_symmetric_difference─┬─non_empty_symmetric_difference─┐ -│ [] │ [3] │ -└────────────────────────────┴────────────────────────────────┘ -``` - - -## arrayUnion - -自 v24.10 引入 - -接收多个数组作为参数,并返回一个数组,该数组包含所有源数组中出现过的元素。结果中仅包含不重复的元素。 - -**语法** - -```sql -arrayUnion(arr1, arr2, ..., arrN) -``` - -**参数** - -* `arrN` — 用于构造新数组的 N 个数组。[`Array(T)`](/sql-reference/data-types/array) - -**返回值** - -返回一个由源数组中所有不重复元素组成的新数组([`Array(T)`](/sql-reference/data-types/array))。 - -**示例** - -**用法示例** - -```sql title=Query -SELECT -arrayUnion([-2, 1], [10, 1], [-2], []) as num_example, -arrayUnion(['hi'], [], ['hello', 'hi']) as str_example, -arrayUnion([1, 3, NULL], [2, 3, NULL]) as null_example -``` - -```response title=Response -┌─num_example─┬─str_example────┬─null_example─┐ -│ [10,-2,1] │ ['hello','hi'] │ [3,2,1,NULL] │ -└─────────────┴────────────────┴──────────────┘ -``` - - -## arrayUniq - -引入版本:v1.1 - -对于传入的单个参数,统计数组中不同元素的数量。 -对于传入的多个参数,它会统计由多个数组中相同位置元素组成的不同**元组**的数量。 - -例如,`SELECT arrayUniq([1,2], [3,4], [5,6])` 会形成如下元组: - -* 位置 1: (1,3,5) -* 位置 2: (2,4,6) - -然后会统计唯一元组的数量。本例中为 `2`。 - -所有传入的数组必须具有相同的长度。 - -:::tip -如果需要获得数组中唯一元素的列表,可以使用 `arrayReduce('groupUniqArray', arr)`。 -::: - -**语法** - -```sql -arrayUniq(arr1[, arr2, ..., arrN]) -``` - -**参数** - -* `arr1` — 要统计其唯一元素数量的数组。[`Array(T)`](/sql-reference/data-types/array) -* `[, arr2, ..., arrN]` — 可选。用于统计多个数组中对应位置元素组成的唯一元组数量的附加数组。[`Array(T)`](/sql-reference/data-types/array) - -**返回值** - -对于单个参数,返回唯一元素的数量。对于多个参数,返回由多个数组中对应位置元素组成的唯一元组的数量。 -[`UInt32`](/sql-reference/data-types/int-uint) - -**示例** - -**单个参数** - -```sql title=Query -SELECT arrayUniq([1, 1, 2, 2]) -``` - -```response title=Response -2 -``` - -**多个参数** - -```sql title=Query -SELECT arrayUniq([1, 2, 3, 1], [4, 5, 6, 4]) -``` - -```response title=Response -3 -``` - - -## arrayWithConstant - -在 v20.1 版本中引入 - -创建一个长度为 `length`,且所有元素都为常量 `x` 的数组。 - -**语法** - -```sql -arrayWithConstant(N, x) -``` - -**参数** - -* `length` — 数组中的元素个数。[`(U)Int*`](/sql-reference/data-types/int-uint) -* `x` — 数组中 `N` 个元素的值,可以是任意类型。 - -**返回值** - -返回一个包含 `N` 个元素、且每个元素的值为 `x` 的数组。[`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**用法示例** - -```sql title=Query -SELECT arrayWithConstant(3, 1) -``` - -```response title=Response -[1, 1, 1] -``` - - -## arrayZip - -自 v20.1 引入 - -将多个数组组合为单个数组。结果数组包含源数组中对应位置的元素,这些元素按照参数列出的顺序被分组为元组。 - -**语法** - -```sql -arrayZip(arr1, arr2, ... , arrN) -``` - -**参数** - -* `arr1, arr2, ... , arrN` — 要合并成单个数组的 N 个数组。[`Array(T)`](/sql-reference/data-types/array) - -**返回值** - -返回一个数组,其中的元素是由源数组按位置组合成的元组。元组中的数据类型与输入数组的类型相同,且顺序与数组的传入顺序一致。[`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**用法示例** - -```sql title=Query -SELECT arrayZip(['a', 'b', 'c'], [5, 2, 1]); -``` - -```response title=Response -[('a', 5), ('b', 2), ('c', 1)] -``` - - -## arrayZipUnaligned - -自 v20.1 引入 - -将多个数组组合为一个数组,支持未对齐的数组(长度不同的数组)。结果数组包含源数组中对应位置的元素,并按参数列出的顺序将这些元素分组为元组。 - -**语法** - -```sql -arrayZipUnaligned(arr1, arr2, ..., arrN) -``` - -**参数** - -* `arr1, arr2, ..., arrN` — 要合并成一个数组的 N 个数组。[`Array(T)`](/sql-reference/data-types/array) - -**返回值** - -返回一个数组,其元素为将源数组的元素分组后得到的元组。元组中的数据类型与输入数组的数据类型相同,且顺序与传入数组的顺序一致。[`Array(T)`](/sql-reference/data-types/array) 或 [`Tuple(T1, T2, ...)`](/sql-reference/data-types/tuple) - -**示例** - -**使用示例** - -```sql title=Query -SELECT arrayZipUnaligned(['a'], [1, 2, 3]); -``` - -```response title=Response -[('a', 1),(NULL, 2),(NULL, 3)] -``` - - -## countEqual - -自 v1.1 引入 - -返回数组中等于 `x` 的元素数量。等价于 `arrayCount(elem -> elem = x, arr)`。 - -将 `NULL` 元素视为独立的值进行处理。 - -**语法** - -```sql -countEqual(arr, x) -``` - -**参数** - -* `arr` — 要搜索的数组。[`Array(T)`](/sql-reference/data-types/array) -* `x` — 要在数组中统计的值。任意类型。 - -**返回值** - -返回数组中等于 `x` 的元素数量。类型为 [`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT countEqual([1, 2, NULL, NULL], NULL) -``` - -```response title=Response -2 -``` - - -## empty - -引入于:v1.1 - -检查输入数组是否为空。 - -如果数组不包含任何元素,则被视为空数组。 - -:::note -可以通过启用 [`optimize_functions_to_subcolumns` 设置](/operations/settings/settings#optimize_functions_to_subcolumns)来优化。将 `optimize_functions_to_subcolumns` 设置为 `1` 时,该函数只读取 [size0](/sql-reference/data-types/array#array-size) 子列,而无需读取并处理整个数组列。查询 `SELECT empty(arr) FROM TABLE;` 会被转换为 `SELECT arr.size0 = 0 FROM TABLE;`。 -::: - -该函数同样适用于 String 或 UUID 类型。 - -**语法** - -```sql -empty(arr) -``` - -**参数** - -* `arr` — 输入数组。[`Array(T)`](/sql-reference/data-types/array) - -**返回值** - -如果数组为空则返回 `1`,如果数组非空则返回 `0`,类型为 [`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT empty([]); -``` - -```response title=Response -1 -``` - - -## emptyArrayDate - -引入版本:v1.1 - -返回空的 Date 数组 - -**语法** - -```sql -emptyArrayDate() -``` - -**参数** - -* 无。 - -**返回值** - -空的 Date 数组。[`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**使用示例** - -```sql title=Query -SELECT emptyArrayDate -``` - -```response title=Response -[] -``` - - -## emptyArrayDateTime - -自 v1.1 引入 - -返回一个空的 DateTime 数组 - -**语法** - -```sql -emptyArrayDateTime() -``` - -**参数** - -* 无。 - -**返回值** - -空 DateTime 数组。[`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**用法示例** - -```sql title=Query -SELECT emptyArrayDateTime -``` - -```response title=Response -[] -``` - - -## emptyArrayFloat32 - -在 v1.1 中引入 - -返回一个空的 Float32 数组 - -**语法** - -```sql -emptyArrayFloat32() -``` - -**参数** - -* 无。 - -**返回值** - -空的 Float32 数组。[`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**使用示例** - -```sql title=Query -SELECT emptyArrayFloat32 -``` - -```response title=Response -[] -``` - - -## emptyArrayFloat64 - -自 v1.1 起提供 - -返回一个空的 Float64 数组 - -**语法** - -```sql -emptyArrayFloat64() -``` - -**参数** - -* 无。 - -**返回值** - -空的 Float64 数组。[`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**用法示例** - -```sql title=Query -SELECT emptyArrayFloat64 -``` - -```response title=Response -[] -``` - - -## emptyArrayInt16 - -自 v1.1 引入 - -返回一个空的 Int16 数组 - -**语法** - -```sql -emptyArrayInt16() -``` - -**参数** - -* 无。 - -**返回值** - -空的 Int16 数组。[`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**使用示例** - -```sql title=Query -SELECT emptyArrayInt16 -``` - -```response title=Response -[] -``` - - -## emptyArrayInt32 - -引入于:v1.1 - -返回一个空的 Int32 数组 - -**语法** - -```sql -emptyArrayInt32() -``` - -**参数** - -* 无。 - -**返回值** - -空的 Int32 数组。[`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**使用示例** - -```sql title=Query -SELECT emptyArrayInt32 -``` - -```response title=Response -[] -``` - - -## emptyArrayInt64 - -自 v1.1 版本引入 - -返回一个空的 Int64 数组。 - -**语法** - -```sql -emptyArrayInt64() -``` - -**参数** - -* 无。 - -**返回值** - -一个 Int64 类型的空数组。[`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**使用示例** - -```sql title=Query -SELECT emptyArrayInt64 -``` - -```response title=Response -[] -``` - - -## emptyArrayInt8 - -引入于:v1.1 - -返回一个空的 Int8 数组 - -**语法** - -```sql -emptyArrayInt8() -``` - -**参数** - -* 无。 - -**返回值** - -返回一个空的 Int8 数组。[`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**使用示例** - -```sql title=Query -SELECT emptyArrayInt8 -``` - -```response title=Response -[] -``` - - -## emptyArrayString - -自 v1.1 起引入 - -返回一个空字符串数组 - -**语法** - -```sql -emptyArrayString() -``` - -**参数** - -* 无。 - -**返回值** - -一个空的 String 数组。[`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**使用示例** - -```sql title=Query -SELECT emptyArrayString -``` - -```response title=Response -[] -``` - - -## emptyArrayToSingle - -自 v1.1 引入 - -接受一个空数组,并返回一个仅包含一个元素的数组,该元素等于默认值。 - -**语法** - -```sql -emptyArrayToSingle(arr) -``` - -**参数** - -* `arr` — 一个空数组。[`Array(T)`](/sql-reference/data-types/array) - -**返回值** - -一个仅包含单个元素的数组,其元素为该数组元素类型的默认值。[`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**基本示例** - -```sql title=Query -CREATE TABLE test ( - a Array(Int32), - b Array(String), - c Array(DateTime) -) -ENGINE = MergeTree -ORDER BY tuple(); - -INSERT INTO test VALUES ([], [], []); - -SELECT emptyArrayToSingle(a), emptyArrayToSingle(b), emptyArrayToSingle(c) FROM test; -``` - -```response title=Response -┌─emptyArrayToSingle(a)─┬─emptyArrayToSingle(b)─┬─emptyArrayToSingle(c)───┐ -│ [0] │ [''] │ ['1970-01-01 01:00:00'] │ -└───────────────────────┴───────────────────────┴─────────────────────────┘ -``` - - -## emptyArrayUInt16 - -引入于:v1.1 - -返回一个空的 UInt16 数组 - -**语法** - -```sql -emptyArrayUInt16() -``` - -**参数** - -* 无。 - -**返回值** - -一个空的 UInt16 数组。[`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**使用示例** - -```sql title=Query -SELECT emptyArrayUInt16 -``` - -```response title=Response -[] -``` - - -## emptyArrayUInt32 - -首次引入于:v1.1 - -返回一个空的 UInt32 类型数组 - -**语法** - -```sql -emptyArrayUInt32() -``` - -**参数** - -* 无。 - -**返回值** - -空的 UInt32 数组。[`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**用法示例** - -```sql title=Query -SELECT emptyArrayUInt32 -``` - -```response title=Response -[] -``` - - -## emptyArrayUInt64 - -引入版本:v1.1 - -返回一个空的 UInt64 数组 - -**语法** - -```sql -emptyArrayUInt64() -``` - -**参数** - -* 无。 - -**返回值** - -空的 UInt64 数组。[`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**使用示例** - -```sql title=Query -SELECT emptyArrayUInt64 -``` - -```response title=Response -[] -``` - - -## emptyArrayUInt8 - -自 v1.1 版本起引入 - -返回一个空的 UInt8 数组 - -**语法** - -```sql -emptyArrayUInt8() -``` - -**参数** - -* 无。 - -**返回值** - -空的 UInt8 数组。[`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**使用示例** - -```sql title=Query -SELECT emptyArrayUInt8 -``` - -```response title=Response -[] -``` - - -## has - -引入版本:v1.1 - -返回数组是否包含指定的元素。 - -**语法** - -```sql -has(arr, x) -``` - -**参数** - -* `arr` — 源数组。[`Array(T)`](/sql-reference/data-types/array) -* `x` — 要在数组中搜索的值。 - -**返回值** - -如果数组包含指定元素则返回 `1`,否则返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**基本用法** - -```sql title=Query -SELECT has([1, 2, 3], 2) -``` - -```response title=Response -1 -``` - -**未找到** - -```sql title=Query -SELECT has([1, 2, 3], 4) -``` - -```response title=Response -0 -``` - - -## hasAll - -自 v1.1 引入 - -检查一个数组是否为另一个数组的子集。 - -* 空数组是任何数组的子集。 -* `Null` 会作为普通值进行处理。 -* 两个数组中元素的顺序无关紧要。 - -**语法** - -```sql -hasAll(set, subset) -``` - -**参数** - -* `set` — 由任意类型元素组成的数组。[`Array(T)`](/sql-reference/data-types/array) -* `subset` — 由任意类型元素组成的数组,与 `set` 具有共同的超类型,包含需要检测是否为 `set` 子集的元素。[`Array(T)`](/sql-reference/data-types/array) - -**返回值** - -* 如果 `set` 包含 `subset` 的所有元素,则返回 `1`。 -* 否则返回 `0`。 - -如果 `set` 与 `subset` 中的元素没有共同的超类型,则抛出 `NO_COMMON_TYPE` 异常。 - -**示例** - -**空数组** - -```sql title=Query -SELECT hasAll([], []) -``` - -```response title=Response -1 -``` - -**含有 NULL 值的数组** - -```sql title=Query -SELECT hasAll([1, Null], [Null]) -``` - -```response title=Response -1 -``` - -**包含不同类型元素的数组** - -```sql title=Query -SELECT hasAll([1.0, 2, 3, 4], [1, 3]) -``` - -```response title=Response -1 -``` - -**包含 String 类型值的数组** - -```sql title=Query -SELECT hasAll(['a', 'b'], ['a']) -``` - -```response title=Response -1 -``` - -**没有共同类型的数组** - -```sql title=Query -SELECT hasAll([1], ['a']) -``` - -```response title=Response -抛出 NO_COMMON_TYPE 异常 -``` - -**数组的数组(嵌套数组)** - -```sql title=Query -SELECT hasAll([[1, 2], [3, 4]], [[1, 2], [3, 5]]) -``` - -```response title=Response -0 -``` - - -## hasAny - -引入于:v1.1 - -检查两个数组是否存在相同元素(是否有交集)。 - -* `Null` 会被当作普通值处理。 -* 两个数组中元素的顺序不会影响结果。 - -**语法** - -```sql -hasAny(arr_x, arr_y) -``` - -**参数** - -* `arr_x` — 包含一组元素的任意类型数组。[`Array(T)`](/sql-reference/data-types/array) -* `arr_y` — 与数组 `arr_x` 具有共同超类型的任意类型数组。[`Array(T)`](/sql-reference/data-types/array) - -**返回值** - -* 如果 `arr_x` 和 `arr_y` 至少有一个相同元素,则为 `1`。 -* 否则为 `0`。 - -如果两个数组中存在元素对之间不具有共同超类型,则会抛出 `NO_COMMON_TYPE` 异常。 - -**示例** - -**一个数组为空** - -```sql title=Query -SELECT hasAny([1], []) -``` - -```response title=Response -0 -``` - -**包含 NULL 值的数组** - -```sql title=Query -SELECT hasAny([Null], [Null, 1]) -``` - -```response title=Response -1 -``` - -**包含不同类型元素的数组** - -```sql title=Query -SELECT hasAny([-128, 1., 512], [1]) -``` - -```response title=Response -1 -``` - -**没有共同类型的数组** - -```sql title=Query -SELECT hasAny([[1, 2], [3, 4]], ['a', 'c']) -``` - -```response title=Response -抛出 `NO_COMMON_TYPE` 异常 -``` - -**数组的数组** - -```sql title=Query -SELECT hasAll([[1, 2], [3, 4]], [[1, 2], [1, 2]]) -``` - -```response title=Response -1 -``` - - -## hasSubstr - -引入于:v20.6 - -检查 `array2` 的所有元素是否以完全相同的顺序出现在 `array1` 中。 -因此,当且仅当 `array1 = prefix + array2 + suffix` 时,该函数返回 `1`。 - -换句话说,该函数会像 `hasAll` 函数一样检查 `array1` 中是否包含 `array2` 的所有元素。 -此外,它还会检查 `array1` 和 `array2` 中元素出现的顺序是否一致。 - -* 如果 `array2` 为空,函数返回 `1`。 -* `Null` 会作为一个值进行处理。换句话说,`hasSubstr([1, 2, NULL, 3, 4], [2,3])` 将返回 `0`。然而,`hasSubstr([1, 2, NULL, 3, 4], [2,NULL,3])` 将返回 `1`。 -* 两个数组中值的顺序会影响结果。 - -如果两个数组中的任意元素没有共享公共超类型,则抛出 `NO_COMMON_TYPE` 异常。 - -**语法** - -```sql -hasSubstr(arr1, arr2) -``` - -**参数** - -* `arr1` — 任意类型的数组,由一组元素组成。[`Array(T)`](/sql-reference/data-types/array) -* `arr2` — 任意类型的数组,由一组元素组成。[`Array(T)`](/sql-reference/data-types/array) - -**返回值** - -如果数组 `arr1` 包含数组 `arr2`,则返回 `1`,否则返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**两个数组都为空** - -```sql title=Query -SELECT hasSubstr([], []) -``` - -```response title=Response -1 -``` - -**包含 NULL 值的数组** - -```sql title=Query -SELECT hasSubstr([1, Null], [Null]) -``` - -```response title=Response -1 -``` - -**包含不同类型值的数组** - -```sql title=Query -SELECT hasSubstr([1.0, 2, 3, 4], [1, 3]) -``` - -```response title=Response -0 -``` - -**字符串数组** - -```sql title=Query -SELECT hasSubstr(['a', 'b'], ['a']) -``` - -```response title=Response -1 -``` - -**可有效排序的数组** - -```sql title=Query -SELECT hasSubstr(['a', 'b' , 'c'], ['a', 'b']) -``` - -```response title=Response -1 -``` - -**具有无效排序的数组** - -```sql title=Query -SELECT hasSubstr(['a', 'b' , 'c'], ['a', 'c']) -``` - -```response title=Response -0 -``` - -**数组的数组** - -```sql title=Query -SELECT hasSubstr([[1, 2], [3, 4], [5, 6]], [[1, 2], [3, 4]]) -``` - -```response title=Response -1 -``` - -**没有共同类型的数组** - -```sql title=Query -SELECT hasSubstr([1, 2, NULL, 3, 4], ['a']) -``` - -```response title=Response -抛出 `NO_COMMON_TYPE` 异常 -``` - - -## indexOf - -引入版本:v1.1 - -如果数组中存在值为 'x' 的元素,则返回第一个等于 'x' 的元素的索引(从 1 开始)。 -如果数组不包含要查找的值,函数返回 `0`。 - -设置为 `NULL` 的元素会被当作普通值处理。 - -**语法** - -```sql -indexOf(arr, x) -``` - -**参数** - -* `arr` — 要在其中搜索 `x` 的数组。[`Array(T)`](/sql-reference/data-types/array) -* `x` — `arr` 中第一个匹配元素的值,将返回该元素的索引。[`UInt64`](/sql-reference/data-types/int-uint) - -**返回值** - -如果存在,返回 `arr` 中第一个 `x` 的索引(从 1 开始编号)。否则返回 `0`。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**基础示例** - -```sql title=Query -SELECT indexOf([5, 4, 1, 3], 3) -``` - -```response title=Response -4 -``` - -**包含 NULL 值的数组** - -```sql title=Query -SELECT indexOf([1, 3, NULL, NULL], NULL) -``` - -```response title=Response -3 -``` - - -## indexOfAssumeSorted - -引入于:v24.12 - -如果数组中存在值为 'x' 的元素,则返回该元素第一次出现时的索引(从 `1` 开始计数)。\ -如果数组不包含要查找的值,则函数返回 `0`。 - -:::note -与 `indexOf` 函数不同,此函数假定数组按升序排序。\ -如果数组未排序,则结果未定义。 -::: - -**语法** - -```sql -indexOfAssumeSorted(arr, x) -``` - -**参数** - -* `arr` — 要搜索的已排序数组。[`Array(T)`](/sql-reference/data-types/array) -* `x` — 要匹配的值,函数将返回已排序 `arr` 中第一个等于该值的元素的索引。[`UInt64`](/sql-reference/data-types/int-uint) - -**返回值** - -如果 `arr` 中存在 `x`,则返回第一个 `x` 的索引(从 1 开始编号)。否则,返回 `0`。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**基础示例** - -```sql title=Query -SELECT indexOfAssumeSorted([1, 3, 3, 3, 4, 4, 5], 4) -``` - -```response title=Response -5 -``` - - -## length - -引入版本:v1.1 - -计算字符串或数组的长度。 - -* 对于 String 或 FixedString 参数:计算字符串中的字节数。 -* 对于 Array 参数:计算数组中的元素个数。 -* 如果应用于 FixedString 参数,该函数是一个常量表达式。 - -请注意,字符串中的字节数不同于 Unicode “code points”的数量,也不同于 Unicode “grapheme clusters”(通常所说的“字符”)的数量,也不同于字符串的可见宽度。 - -字符串中允许包含 ASCII 的 NULL 字节,这些字节也会被计入长度。 - -**语法** - -```sql -length(x) -``` - -**别名**: `OCTET_LENGTH` - -**参数** - -* `x` — 要计算其字节数(对于 String/FixedString)或元素个数(对于 Array)的值。类型为 [`String`](/sql-reference/data-types/string)、[`FixedString`](/sql-reference/data-types/fixedstring) 或 [`Array(T)`](/sql-reference/data-types/array) - -**返回值** - -返回一个 [`UInt64`](/sql-reference/data-types/int-uint) 值,表示 String/FixedString `x` 中的字节数或数组 `x` 中的元素个数。 - -**示例** - -**String 示例** - -```sql title=Query -SELECT length('Hello, world!') -``` - -```response title=Response -13 -``` - -**数组示例** - -```sql title=Query -SELECT length(['Hello', 'world']) -``` - -```response title=Response -2 -``` - -**constexpr 示例** - -```sql title=Query -WITH 'hello' || toString(number) AS str -SELECT str, -isConstant(length(str)) AS str_length_is_constant, -isConstant(length(str::FixedString(6))) AS fixed_str_length_is_constant -FROM numbers(3) -``` - -```response title=Response -┌─str────┬─str_length_is_constant─┬─fixed_str_length_is_constant─┐ -│ hello0 │ 0 │ 1 │ -│ hello1 │ 0 │ 1 │ -│ hello2 │ 0 │ 1 │ -└────────┴────────────────────────┴──────────────────────────────┘ -``` - -**Unicode 示例** - -```sql title=Query -SELECT 'ёлка' AS str1, length(str1), lengthUTF8(str1), normalizeUTF8NFKD(str1) AS str2, length(str2), lengthUTF8(str2) -``` - -```response title=Response -┌─str1─┬─length(str1)─┬─lengthUTF8(str1)─┬─str2─┬─length(str2)─┬─lengthUTF8(str2)─┐ -│ ёлка │ 8 │ 4 │ ёлка │ 10 │ 5 │ -└──────┴──────────────┴──────────────────┴──────┴──────────────┴──────────────────┘ -``` - -**ASCII_vs_UTF-8 示例** - -```sql title=Query -SELECT 'ábc' AS str, length(str), lengthUTF8(str) -``` - -```response title=Response -┌─str─┬─length(str)──┬─lengthUTF8(str)─┐ -│ ábc │ 4 │ 3 │ -└─────┴──────────────┴─────────────────┘ -``` - - -## notEmpty - -引入于:v1.1 - -检查输入数组是否非空。 - -如果数组至少包含一个元素,则被视为非空。 - -:::note -可以通过启用 [`optimize_functions_to_subcolumns`](/operations/settings/settings#optimize_functions_to_subcolumns) 设置进行优化。设置 `optimize_functions_to_subcolumns = 1` 时,该函数只读取 [size0](/sql-reference/data-types/array#array-size) 子列,而不是读取并处理整个数组列。查询 `SELECT notEmpty(arr) FROM table` 会被转换为 `SELECT arr.size0 != 0 FROM TABLE`。 -::: - -该函数同样适用于字符串(String)或 UUID 类型。 - -**语法** - -```sql -notEmpty(arr) -``` - -**参数** - -* `arr` — 输入数组。[`Array(T)`](/sql-reference/data-types/array) - -**返回值** - -当数组非空时返回 `1`,当数组为空时返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT notEmpty([1,2]); -``` - -```response title=Response -1 -``` - - -## range - -引入于:v1.1 - -按 `step` 返回一个从 `start` 到 `end - 1` 的数字数组。 - -支持的类型为: - -* `UInt8/16/32/64` - -* `Int8/16/32/64` - -* 所有参数 `start`、`end`、`step` 必须是上述支持类型之一。返回数组的元素类型将是这些参数类型的超类型。 - -* 如果函数返回的数组总长度超过由设置 [`function_range_max_elements_in_block`](../../operations/settings/settings.md#function_range_max_elements_in_block) 指定的元素数量,则抛出异常。 - -* 如果任一参数的类型为 Nullable(nothing),则返回 `NULL`。如果任一参数的值为 `NULL`(Nullable(T) 类型),则抛出异常。 - -**语法** - -```sql -range([start, ] end [, step]) -``` - -**参数** - -* `start` — 可选。数组的第一个元素。如果使用了 `step`,则必填。默认值:`0`。 - `end` — 必填。构造数组时的上界(不包含该值)。 - `step` — 可选。指定数组中相邻元素之间的递增步长。默认值:`1`。 - -**返回值** - -从 `start` 到 `end - 1`,按 `step` 递增的数字数组。[`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**用法示例** - -```sql title=Query -SELECT range(5), range(1, 5), range(1, 5, 2), range(-1, 5, 2); -``` - -```response title=Response -┌─range(5)────┬─range(1, 5)─┬─range(1, 5, 2)─┬─range(-1, 5, 2)─┐ -│ [0,1,2,3,4] │ [1,2,3,4] │ [1,3] │ [-1,1,3] │ -└─────────────┴─────────────┴────────────────┴─────────────────┘ -``` - - -## replicate - -自 v1.1 起引入 - -创建仅包含单个值的数组。 - -**语法** - -```sql -replicate(x, arr) -``` - -**参数** - -* `x` — 用于填充结果数组的值。[`Any`](/sql-reference/data-types) -* `arr` — 一个数组。[`Array(T)`](/sql-reference/data-types/array) - -**返回值** - -返回一个与 `arr` 长度相同、全部由值 `x` 填充的数组。[`Array(T)`](/sql-reference/data-types/array) - -**示例** - -**用法示例** - -```sql title=Query -SELECT replicate(1, ['a', 'b', 'c']); -``` - -```response title=Response -┌─replicate(1, ['a', 'b', 'c'])───┐ -│ [1, 1, 1] │ -└─────────────────────────────────┘ -``` - - -## reverse - -引入版本:v1.1 - -将输入数组的元素顺序或输入字符串的字符顺序反转。 - -**语法** - -```sql -reverse(arr | str) -``` - -**参数** - -* `arr | str` — 源数组或字符串。[`Array(T)`](/sql-reference/data-types/array) 或 [`String`](/sql-reference/data-types/string) - -**返回值** - -返回一个数组或字符串,其元素或字符的顺序被反转。 - -**示例** - -**反转数组** - -```sql title=Query -SELECT reverse([1, 2, 3, 4]); -``` - -```response title=Response -[4, 3, 2, 1] -``` - -**字符串反转** - -```sql title=Query -SELECT reverse('abcd'); -``` - -```response title=Response -'dcba' -``` - {/*AUTOGENERATED_END*/ } ## 距离函数 {#distance-functions} -所有受支持的函数均在[距离函数文档](../../sql-reference/functions/distance-functions.md)中有详细说明。 +所有受支持的函数详见[距离函数文档](../../sql-reference/functions/distance-functions.md)。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/bit-functions.md b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/bit-functions.md index cfc3e07962e..e01128620ee 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/bit-functions.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/bit-functions.md @@ -1,698 +1,23 @@ --- -description: '位运算函数文档' +description: '位运算函数的文档' sidebar_label: '位运算' slug: /sql-reference/functions/bit-functions title: '位运算函数' doc_type: 'reference' --- +# 位运算函数 +位运算函数适用于以下任意两种类型的组合:`UInt8`、`UInt16`、`UInt32`、`UInt64`、`Int8`、`Int16`、`Int32`、`Int64`、`Float32` 或 `Float64`。部分函数还支持 `String` 和 `FixedString` 类型。 -# 位函数 - -位函数适用于任意由 `UInt8`、`UInt16`、`UInt32`、`UInt64`、`Int8`、`Int16`、`Int32`、`Int64`、`Float32` 或 `Float64` 组成的类型对。部分函数还支持 `String` 和 `FixedString` 类型。 - -结果类型为一个整数,其位宽等于所有参数中最大的位宽。如果至少有一个参数是有符号类型,则结果为有符号数。如果某个参数是浮点数,则会被强制转换为 Int64。 +结果类型是一个整数,其位数等于所有参数中最大位数的类型。如果至少有一个参数是有符号类型,则结果为有符号数。如果某个参数是浮点数,则会被转换为 Int64 类型。 {/* - 下面标签中的内容会在文档框架构建时 - 被从 system.functions 生成的文档所替换。请不要修改或删除这些标签。 + 下面这些标签的内部内容会在文档框架构建期间被替换为 + 由 system.functions 生成的文档。请不要修改或移除这些标签。 参见:https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## bitAnd - -自 v1.1 版本引入 - -对两个值执行按位与运算。 - -**语法** - -```sql -bitAnd(a, b) -``` - -**参数** - -* `a` — 第一个值。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) -* `b` — 第二个值。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) - -**返回值** - -返回按位与运算 `a AND b` 的结果。 - -**示例** - -**用法示例** - -```sql title=Query -CREATE TABLE bits -( - `a` UInt8, - `b` UInt8 -) -ENGINE = Memory; - -INSERT INTO bits VALUES (0, 0), (0, 1), (1, 0), (1, 1); - -SELECT - a, - b, - bitAnd(a, b) -FROM bits -``` - -```response title=Response -┌─a─┬─b─┬─bitAnd(a, b)─┐ -│ 0 │ 0 │ 0 │ -│ 0 │ 1 │ 0 │ -│ 1 │ 0 │ 0 │ -│ 1 │ 1 │ 1 │ -└───┴───┴──────────────┘ -``` - - -## bitCount - -引入版本:v20.3 - -计算一个数在二进制表示中为 1 的比特数量。 - -**语法** - -```sql -bitCount(x) -``` - -**参数** - -* `x` — 整数或浮点数值。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) - -**返回值** - -返回 `x` 中值为 1 的比特位数量。[`UInt8`](../data-types/int-uint.md)。 - -:::note -该函数不会通过符号扩展将输入值转换为更大类型([符号扩展](https://en.wikipedia.org/wiki/Sign_extension))。 -例如:`bitCount(toUInt8(-1)) = 8`。 -::: - -**示例** - -**用法示例** - -```sql title=Query -SELECT bin(333), bitCount(333); -``` - -```response title=Response -┌─bin(333)─────────┬─bitCount(333)─┐ -│ 0000000101001101 │ 5 │ -└──────────────────┴───────────────┘ -``` - - -## bitHammingDistance - -引入于:v21.1 - -返回两个数字二进制位表示之间的[汉明距离](https://en.wikipedia.org/wiki/Hamming_distance)。 -可与 [`SimHash`](../../sql-reference/functions/hash-functions.md#ngramSimHash) 函数一起用于检测近似重复的字符串。 -距离越小,字符串越相似。 - -**语法** - -```sql -bitHammingDistance(x, y) -``` - -**参数** - -* `x` — 用于计算汉明距离的第一个数值。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) -* `y` — 用于计算汉明距离的第二个数值。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) - -**返回值** - -返回 `x` 和 `y` 之间的汉明距离,类型为 [`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT bitHammingDistance(111, 121); -``` - -```response title=Response -┌─bitHammingDistance(111, 121)─┐ -│ 3 │ -└──────────────────────────────┘ -``` - - -## bitNot - -自 v1.1 起引入 - -执行按位取反运算。 - -**语法** - -```sql -bitNot(a) -``` - -**参数** - -* `a` — 要对其执行按位 NOT 运算的值。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`String`](/sql-reference/data-types/string) - -**返回值** - -返回 `~a` 的结果,即对 `a` 的各比特位取反。 - -**示例** - -**用法示例** - -```sql title=Query -SELECT - CAST('5', 'UInt8') AS original, - bin(original) AS original_binary, - bitNot(original) AS result, - bin(bitNot(original)) AS result_binary; -``` - -```response title=Response -┌─original─┬─original_binary─┬─result─┬─result_binary─┐ -│ 5 │ 00000101 │ 250 │ 11111010 │ -└──────────┴─────────────────┴────────┴───────────────┘ -``` - - -## bitOr - -自 v1.1 起引入 - -对两个值执行按位或运算。 - -**语法** - -```sql -bitOr(a, b) -``` - -**参数** - -* `a` — 第一个值。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) -* `b` — 第二个值。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) - -**返回值** - -返回按位或运算 `a OR b` 的结果。 - -**示例** - -**使用示例** - -```sql title=Query -CREATE TABLE bits -( - `a` UInt8, - `b` UInt8 -) -ENGINE = Memory; - -INSERT INTO bits VALUES (0, 0), (0, 1), (1, 0), (1, 1); - -SELECT - a, - b, - bitOr(a, b) -FROM bits; -``` - -```response title=Response -┌─a─┬─b─┬─bitOr(a, b)─┐ -│ 0 │ 0 │ 0 │ -│ 0 │ 1 │ 1 │ -│ 1 │ 0 │ 1 │ -│ 1 │ 1 │ 1 │ -└───┴───┴─────────────┘ -``` - - -## bitRotateLeft - -引入于:v1.1 - -将位向左旋转指定的位数。移出的位会从右侧回绕。 - -**语法** - -```sql -bitRotateLeft(a, N) -``` - -**参数** - -* `a` — 要进行旋转的值。[`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) -* `N` — 向左旋转的位数。[`UInt8/16/32/64`](/sql-reference/data-types/int-uint) - -**返回值** - -返回旋转后的值,其类型与 `a` 相同。[`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT 99 AS a, bin(a), bitRotateLeft(a, 2) AS a_rotated, bin(a_rotated); -``` - -```response title=Response -┌──a─┬─bin(a)───┬─a_rotated─┬─bin(a_rotated)─┐ -│ 99 │ 01100011 │ 141 │ 10001101 │ -└────┴──────────┴───────────┴────────────────┘ -``` - - -## bitRotateRight - -自 v1.1 引入 - -按指定的位数将位向右旋转。右侧移出的位会从左侧补回。 - -**语法** - -```sql -bitRotateRight(a, N) -``` - -**参数** - -* `a` — 要旋转的值。[`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) -* `N` — 向右旋转的位数。[`UInt8/16/32/64`](/sql-reference/data-types/int-uint) - -**返回值** - -返回旋转后的值,类型与 `a` 相同。[`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT 99 AS a, bin(a), bitRotateRight(a, 2) AS a_rotated, bin(a_rotated); -``` - -```response title=Response -┌──a─┬─bin(a)───┬─a_rotated─┬─bin(a_rotated)─┐ -│ 99 │ 01100011 │ 216 │ 11011000 │ -└────┴──────────┴───────────┴────────────────┘ -``` - - -## bitShiftLeft - -引入于:v1.1 - -将一个值的二进制表示按指定的位数向左移位。 - -`FixedString` 或 `String` 被视为一个多字节值。 - -`FixedString` 值在移位过程中被移出的位会丢失。 -相反,`String` 值会通过追加额外字节进行扩展,因此不会丢失任何位。 - -**语法** - -```sql -bitShiftLeft(a, N) -``` - -**参数** - -* `a` — 要移位的值。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`String`](/sql-reference/data-types/string) 或 [`FixedString`](/sql-reference/data-types/fixedstring) -* `N` — 要移位的位数。[`UInt8/16/32/64`](/sql-reference/data-types/int-uint) - -**返回值** - -返回移位后的值,其类型与 `a` 相同。 - -**示例** - -**二进制编码用法示例** - -```sql title=Query -SELECT 99 AS a, bin(a), bitShiftLeft(a, 2) AS a_shifted, bin(a_shifted); -``` - -```response title=Response -┌──a─┬─bin(99)──┬─a_shifted─┬─bin(bitShiftLeft(99, 2))─┐ -│ 99 │ 01100011 │ 140 │ 10001100 │ -└────┴──────────┴───────────┴──────────────────────────┘ -``` - -**十六进制编码的使用示例** - -```sql title=Query -SELECT 'abc' AS a, hex(a), bitShiftLeft(a, 4) AS a_shifted, hex(a_shifted); -``` - -```response title=Response -┌─a───┬─hex('abc')─┬─a_shifted─┬─hex(bitShiftLeft('abc', 4))─┐ -│ abc │ 616263 │ &0 │ 06162630 │ -└─────┴────────────┴───────────┴─────────────────────────────┘ -``` - -**使用 FixedString 编码的示例用法** - -```sql title=Query -SELECT toFixedString('abc', 3) AS a, hex(a), bitShiftLeft(a, 4) AS a_shifted, hex(a_shifted); -``` - -```response title=Response -┌─a───┬─hex(toFixedString('abc', 3))─┬─a_shifted─┬─hex(bitShiftLeft(toFixedString('abc', 3), 4))─┐ -│ abc │ 616263 │ &0 │ 162630 │ -└─────┴──────────────────────────────┴───────────┴───────────────────────────────────────────────┘ -``` - - -## bitShiftRight - -引入于:v1.1 - -将一个值的二进制表示向右移动指定位数。 - -`FixedString` 或 `String` 被视为一个多字节值。 - -`FixedString` 值在移出时会丢失位。 -相反,`String` 值会通过附加字节进行扩展,因此不会丢失任何位。 - -**语法** - -```sql -bitShiftRight(a, N) -``` - -**参数** - -* `a` — 要移位的值。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`String`](/sql-reference/data-types/string) 或 [`FixedString`](/sql-reference/data-types/fixedstring) -* `N` — 要移位的位数。[`UInt8/16/32/64`](/sql-reference/data-types/int-uint) - -**返回值** - -返回移位后的值,类型与 `a` 相同。 - -**示例** - -**使用二进制编码的示例用法** - -```sql title=Query -SELECT 101 AS a, bin(a), bitShiftRight(a, 2) AS a_shifted, bin(a_shifted); -``` - -```response title=Response -┌───a─┬─bin(101)─┬─a_shifted─┬─bin(bitShiftRight(101, 2))─┐ -│ 101 │ 01100101 │ 25 │ 00011001 │ -└─────┴──────────┴───────────┴────────────────────────────┘ -``` - -**十六进制编码用法示例** - -```sql title=Query -SELECT 'abc' AS a, hex(a), bitShiftLeft(a, 4) AS a_shifted, hex(a_shifted); -``` - -```response title=Response -┌─a───┬─hex('abc')─┬─a_shifted─┬─hex(bitShiftRight('abc', 12))─┐ -│ abc │ 616263 │ │ 0616 │ -└─────┴────────────┴───────────┴───────────────────────────────┘ -``` - -**FixedString 编码的使用示例** - -```sql title=Query -SELECT toFixedString('abc', 3) AS a, hex(a), bitShiftRight(a, 12) AS a_shifted, hex(a_shifted); -``` - -```response title=Response -┌─a───┬─hex(toFixedString('abc', 3))─┬─a_shifted─┬─hex(bitShiftRight(toFixedString('abc', 3), 12))─┐ -│ abc │ 616263 │ │ 000616 │ -└─────┴──────────────────────────────┴───────────┴─────────────────────────────────────────────────┘ -``` - - -## bitSlice - -自 v22.2 引入 - -返回一个子字符串,从位索引 'offset' 开始,长度为 'length' 位。 - -**语法** - -```sql -bitSlice(s, offset[, length]) -``` - -**参数** - -* `s` — 要进行切片的 String 或 Fixed String。[`String`](/sql-reference/data-types/string) 或 [`FixedString`](/sql-reference/data-types/fixedstring) -* `offset` — - 起始位位置(从 1 开始计数)。 -* 正值:从字符串开头开始计数。 -* 负值:从字符串末尾开始计数。 - - [`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) -* `length` — - 可选。要提取的位数。 -* 正值:提取 `length` 位。 -* 负值:从偏移位置提取到 `(string_length - |length|)` 位。 -* 省略:从偏移位置提取到字符串末尾。 -* 如果 length 不是 8 的倍数,则结果在右侧用 0 填充。 - [`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) - -**返回值** - -返回一个包含提取位的字符串,以二进制序列表示。结果始终补齐到字节边界(8 位的倍数)[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT bin('Hello'), bin(bitSlice('Hello', 1, 8)); -SELECT bin('Hello'), bin(bitSlice('Hello', 1, 2)); -SELECT bin('Hello'), bin(bitSlice('Hello', 1, 9)); -SELECT bin('Hello'), bin(bitSlice('Hello', -4, 8)); -``` - -```response title=Response -┌─bin('Hello')─────────────────────────────┬─bin(bitSlice('Hello', 1, 8))─┐ -│ 0100100001100101011011000110110001101111 │ 01001000 │ -└──────────────────────────────────────────┴──────────────────────────────┘ -┌─bin('Hello')─────────────────────────────┬─bin(bitSlice('Hello', 1, 2))─┐ -│ 0100100001100101011011000110110001101111 │ 01000000 │ -└──────────────────────────────────────────┴──────────────────────────────┘ -┌─bin('Hello')─────────────────────────────┬─bin(bitSlice('Hello', 1, 9))─┐ -│ 0100100001100101011011000110110001101111 │ 0100100000000000 │ -└──────────────────────────────────────────┴──────────────────────────────┘ -┌─bin('Hello')─────────────────────────────┬─bin(bitSlice('Hello', -4, 8))─┐ -│ 0100100001100101011011000110110001101111 │ 11110000 │ -└──────────────────────────────────────────┴───────────────────────────────┘ -``` - - -## bitTest - -引入版本:v1.1 - -接受任意数值并将其转换为[二进制形式](https://en.wikipedia.org/wiki/Binary_number),然后返回指定位置处的比特位值。计数从右向左进行,从 0 开始。 - -**语法** - -```sql -bitTest(a, i) -``` - -**参数** - -* `a` — 要转换的数值。[`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) -* `i` — 要返回的比特位位置。[`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) - -**返回值** - -返回 `a` 的二进制表示中第 `i` 个比特位的值,类型为 [`UInt8`](/sql-reference/data-types/int-uint)。 - -**示例** - -**用法示例** - -```sql title=Query -SELECT bin(2), bitTest(2, 1); -``` - -```response title=Response -┌─bin(2)───┬─bitTest(2, 1)─┐ -│ 00000010 │ 1 │ -└──────────┴───────────────┘ -``` - - -## bitTestAll - -引入于:v1.1 - -返回给定位置上所有位的[逻辑与](https://en.wikipedia.org/wiki/Logical_conjunction)(AND 运算符)结果。 -从右到左计数,起始索引为 0。 - -两个位之间的逻辑与仅当两个输入位都为真时结果为真。 - -**语法** - -```sql -bitTestAll(a, index1[, index2, ... , indexN]) -``` - -**参数** - -* `a` — 整数值。[`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) -* `index1, ...` — 一个或多个比特位的位置。[`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) - -**返回值** - -返回逻辑与运算结果,类型为 [`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例 1** - -```sql title=Query -SELECT bitTestAll(43, 0, 1, 3, 5); -``` - -```response title=Response -┌─bin(43)──┬─bitTestAll(43, 0, 1, 3, 5)─┐ -│ 00101011 │ 1 │ -└──────────┴────────────────────────────┘ -``` - -**使用示例 2** - -```sql title=Query -SELECT bitTestAll(43, 0, 1, 3, 5, 2); -``` - -```response title=Response -┌─bin(43)──┬─bitTestAll(4⋯1, 3, 5, 2)─┐ -│ 00101011 │ 0 │ -└──────────┴──────────────────────────┘ -``` - - -## bitTestAny - -自 v1.1 引入 - -返回对给定数字中指定位置上所有位执行[逻辑析取](https://en.wikipedia.org/wiki/Logical_disjunction)(OR 运算符)的结果。 -从右向左计数,起始索引为 0。 - -两个位之间的逻辑 OR 只要至少有一个输入位为 true,结果就为 true。 - -**语法** - -```sql -bitTestAny(a, index1[, index2, ... , indexN]) -``` - -**参数** - -* `a` — 一个整数值。[`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) -* `index1, ...` — 一个或多个位的位置。[`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) - -**返回值** - -返回逻辑或运算的结果 [`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例 1** - -```sql title=Query -SELECT bitTestAny(43, 0, 2); -``` - -```response title=Response -┌─bin(43)──┬─bitTestAny(43, 0, 2)─┐ -│ 00101011 │ 1 │ -└──────────┴──────────────────────┘ -``` - -**使用示例 2** - -```sql title=Query -SELECT bitTestAny(43, 4, 2); -``` - -```response title=Response -┌─bin(43)──┬─bitTestAny(43, 4, 2)─┐ -│ 00101011 │ 0 │ -└──────────┴──────────────────────┘ -``` - - -## bitXor - -自 v1.1 引入 - -对两个值执行按位异或(XOR)运算。 - -**语法** - -```sql -bitXor(a, b) -``` - -**参数** - -* `a` — 第一个值。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) -* `b` — 第二个值。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) - -**返回值** - -返回按位异或运算 `a XOR b` 的结果。 - -**示例** - -**用法示例** - -```sql title=Query -CREATE TABLE bits -( - `a` UInt8, - `b` UInt8 -) -ENGINE = Memory; - -INSERT INTO bits VALUES (0, 0), (0, 1), (1, 0), (1, 1); - -SELECT - a, - b, - bitXor(a, b) -FROM bits; -``` - -```response title=Response -┌─a─┬─b─┬─bitXor(a, b)─┐ -│ 0 │ 0 │ 0 │ -│ 0 │ 1 │ 1 │ -│ 1 │ 0 │ 1 │ -│ 1 │ 1 │ 0 │ -└───┴───┴──────────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/bitmap-functions.md b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/bitmap-functions.md index 02433f65c38..960870d9566 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/bitmap-functions.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/bitmap-functions.md @@ -1,728 +1,21 @@ --- -description: '位图函数参考文档' +description: '位图函数文档' sidebar_label: '位图' slug: /sql-reference/functions/bitmap-functions title: '位图函数' doc_type: 'reference' --- - - # 位图函数 位图可以通过两种方式构造。第一种方式是使用带有 `-State` 的聚合函数 groupBitmap 来构造,另一种方式是从 Array 对象构造位图。 {/* - 下面标签内的内容会在文档框架构建时, - 被替换为由 system.functions 生成的文档。 - 请不要修改或删除这些标签。 + 下面标签内的内容会在文档框架构建期间, + 被 system.functions 自动生成的文档所替换。请不要修改或移除这些标签。 参见:https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## bitmapAnd - -引入版本:v20.1 - -计算两个位图的逻辑与(AND)。 - -**语法** - -```sql -bitmapAnd(bitmap1, bitmap2) -``` - -**参数** - -* `bitmap1` — 第一个 bitmap 对象。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction) -* `bitmap2` — 第二个 bitmap 对象。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction) - -**返回值** - -返回一个 bitmap,其中包含在两个输入 bitmap 中都存在的位。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction) - -**示例** - -**用法示例** - -```sql title=Query -SELECT bitmapToArray(bitmapAnd(bitmapBuild([1, 2, 3]), bitmapBuild([3, 4, 5]))) AS res; -``` - -```response title=Response -┌─res─┐ -│ [3] │ -└─────┘ -``` - - -## bitmapAndCardinality - -自 v20.1 引入 - -返回两个位图进行逻辑与(AND)运算结果的基数。 - -**语法** - -```sql -bitmapAndCardinality(bitmap1, bitmap2) -``` - -**参数** - -* `bitmap1` — 第一个 bitmap 对象。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction)。- `bitmap2` — 第二个 bitmap 对象。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction)。 - -**返回值** - -返回两个 bitmap 交集中被置位的位数。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT bitmapAndCardinality(bitmapBuild([1,2,3]), bitmapBuild([3,4,5])) AS res; -``` - -```response title=Response -┌─res─┐ -│ 1 │ -└─────┘ -``` - - -## bitmapAndnot - -引入于:v20.1 - -计算两个位图的集合差 A AND-NOT B。 - -**语法** - -```sql -bitmapAndnot(bitmap1, bitmap2) -``` - -**参数** - -* `bitmap1` — 第一个位图对象。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - `bitmap2` — 第二个位图对象。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - -**返回值** - -返回一个位图对象,其中包含在第一个位图中出现但在第二个位图中不存在的已设置位。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction) - -**示例** - -**使用示例** - -```sql title=Query -SELECT bitmapToArray(bitmapAndnot(bitmapBuild([1, 2, 3]), bitmapBuild([3, 4, 5]))) AS res; -``` - -```response title=Response -┌─res────┐ -│ [1, 2] │ -└────────┘ -``` - - -## bitmapAndnotCardinality - -引入版本:v20.1 - -返回对两个 bitmap 执行 AND-NOT 运算结果的基数。 - -**语法** - -```sql -bitmapAndnotCardinality(bitmap1, bitmap2) -``` - -**参数** - -* `bitmap1` — 第一个 bitmap 对象,类型为 [`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - `bitmap2` — 第二个 bitmap 对象,类型为 [`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - -**返回值** - -返回表达式 `bitmap1 AND-NOT bitmap2` 结果中已设置位(为 1 的位)的数量,类型为 [`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT bitmapAndnotCardinality(bitmapBuild([1,2,3]), bitmapBuild([3,4,5])) AS res; -``` - -```response title=Response -┌─res─┐ -│ 2 │ -└─────┘ -``` - - -## bitmapBuild - -自 v20.1 引入 - -根据无符号整数数组构建位图。它与函数 [`bitmapToArray`](/sql-reference/functions/bitmap-functions#bitmapToArray) 的作用相反。 - -**语法** - -```sql -bitmapBuild(array) -``` - -**参数** - -* `array` — 无符号整数数组。[`Array(UInt*)`](/sql-reference/data-types/array) - -**返回值** - -从提供的数组生成并返回一个位图。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction) - -**示例** - -**使用示例** - -```sql title=Query -SELECT bitmapBuild([1, 2, 3, 4, 5]) AS res, toTypeName(res); -``` - -```response title=Response -┌─res─┬─toTypeName(bitmapBuild([1, 2, 3, 4, 5]))─────┐ -│ │ AggregateFunction(groupBitmap, UInt8) │ -└─────┴──────────────────────────────────────────────┘ -``` - - -## bitmapCardinality - -自 v20.1 起引入 - -返回位图中已设置位的数量(基数)。 - -**语法** - -```sql -bitmapCardinality(bitmap) -``` - -**参数** - -* `bitmap` — Bitmap 对象。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction)。 - -**返回值** - -返回 bitmap 中已置位的位数,类型为 [`UInt64`](/sql-reference/data-types/int-uint)。 - -**示例** - -**使用示例** - -```sql title=Query -SELECT bitmapCardinality(bitmapBuild([1, 3, 3, 5, 7, 7])) AS res -``` - -```response title=Response -┌─res─┐ -│ 4 │ -└─────┘ -``` - - -## bitmapContains - -自 v20.1 版本引入 - -检查位图中是否包含特定元素。 - -**语法** - -```sql -bitmapContains(bitmap, value) -``` - -**参数** - -* `bitmap` — 位图对象。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction)。- `value` — 待检查的元素。[(U)Int8/16/32/64](/sql-reference/data-types/int-uint/) - -**返回值** - -如果位图包含指定的值,则返回 `1`,否则返回 `0`,返回类型为 [`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT bitmapContains(bitmapBuild([1, 2, 3]), 2) AS res; -``` - -```response title=Response -┌─res─┐ -│ 1 │ -└─────┘ -``` - - -## bitmapHasAll - -自 v20.1 起引入 - -检查第一个位图是否包含第二个位图中所有已设置的位。 - -**语法** - -```sql -bitmapHasAll(bitmap1, bitmap2) -``` - -**参数** - -* `bitmap1` — 第一个位图对象。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction)。- `bitmap2` — 第二个位图对象。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction)。 - -**返回值** - -如果第二个位图中所有已设置的位都存在于第一个位图中,则返回 `1`,否则返回 `0`,返回类型为 [`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT bitmapHasAll(bitmapBuild([1, 2, 3]), bitmapBuild([2, 3])) AS res; -``` - -```response title=Response -┌─res─┐ -│ 1 │ -└─────┘ -``` - - -## bitmapHasAny - -引入版本:v20.1 - -检查第一个 bitmap 是否包含第二个 bitmap 中设置的任意一位。 - -**语法** - -```sql -bitmapHasAny(bitmap1, bitmap2) -``` - -**参数** - -* `bitmap1` — 第一个位图对象。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction) - `bitmap2` — 第二个位图对象。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - -**返回值** - -如果第二个位图中的任意位在第一个位图中存在,则返回 `1`,否则返回 `0` [`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT bitmapHasAny(bitmapBuild([1, 2, 3]), bitmapBuild([3, 4, 5])) AS res; -``` - -```response title=Response -┌─res─┐ -│ 1 │ -└─────┘ -``` - - -## bitmapMax - -引入版本:v20.1 - -返回位图中被置位的最高位的位置,如果位图为空则返回 `0`。 - -**语法** - -```sql -bitmapMax(bitmap) -``` - -**参数** - -* `bitmap` — 位图对象。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction)。 - -**返回值** - -返回位图中最高被置位的位的位置,否则返回 `0`,类型为 [`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT bitmapMax(bitmapBuild([1, 2, 3, 4, 5])) AS res; -``` - -```response title=Response -┌─res─┐ -│ 5 │ -└─────┘ -``` - - -## bitmapMin - -引入于:v20.1 - -返回位图中第一个被设置为 1 的位的位置。如果所有位都未设置,则返回 `UINT32_MAX`(如果位图包含超过 `2^64` 位,则返回 `UINT64_MAX`)。 - -**语法** - -```sql -bitmapMin(bitmap) -``` - -**参数** - -* `bitmap` — Bitmap 对象。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction)。 - -**返回值** - -返回 bitmap 中被置位的最小位的位置,如果不存在则返回 `UINT32_MAX`/`UINT64_MAX` [`UInt64`](/sql-reference/data-types/int-uint)。 - -**示例** - -**使用示例** - -```sql title=Query -SELECT bitmapMin(bitmapBuild([3, 5, 2, 6])) AS res; -``` - -```response title=Response -┌─res─┐ -│ 2 │ -└─────┘ -``` - - -## bitmapOr - -引入版本:v20.1 - -计算两个 bitmap 的逻辑或(OR)。 - -**语法** - -```sql -bitmapOr(bitmap1, bitmap2) -``` - -**参数** - -* `bitmap1` — 第一个 bitmap 对象。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - `bitmap2` — 第二个 bitmap 对象。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - -**返回值** - -返回一个 bitmap,其中包含在任一输入 bitmap 中被置位的比特。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction) - -**示例** - -**使用示例** - -```sql title=Query -SELECT bitmapToArray(bitmapOr(bitmapBuild([1, 2, 3]), bitmapBuild([3, 4, 5]))) AS res; -``` - -```response title=Response -┌─res─────────────┐ -│ [1, 2, 3, 4, 5] │ -└─────────────────┘ -``` - - -## bitmapOrCardinality - -自 v20.1 引入 - -返回两个位图进行逻辑或(OR)运算后的基数。 - -**语法** - -```sql -bitmapOrCardinality(bitmap1, bitmap2) -``` - -**参数** - -* `bitmap1` — 第一个位图对象。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - `bitmap2` — 第二个位图对象。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - -**返回值** - -返回两个位图并集中的已置位位数,类型为 [`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT bitmapOrCardinality(bitmapBuild([1,2,3]), bitmapBuild([3,4,5])) AS res; -``` - -```response title=Response -┌─res─┐ -│ 5 │ -└─────┘ -``` - - -## bitmapSubsetInRange - -自 v20.1 起引入 - -返回位图在指定范围 [start, end) 内的一个子集,仅包含该范围内已置位的比特。索引从 1 开始计数。 - -**语法** - -```sql -bitmapSubsetInRange(bitmap, start, end) -``` - -**参数** - -* `bitmap` — 要从中提取子集的位图。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction)。 - `start` — 范围起始位置(包含)。[`UInt*`](/sql-reference/data-types/int-uint) - `end` — 范围结束位置(不包含)。[`UInt*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回一个仅包含指定范围内已设置位的位图。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction) - -**示例** - -**用法示例** - -```sql title=Query -SELECT bitmapToArray(bitmapSubsetInRange(bitmapBuild([1, 2, 3, 4, 5]), 2, 5)) AS res; -``` - -```response title=Response -┌─res───────┐ -│ [2, 3, 4] │ -└───────────┘ -``` - - -## bitmapSubsetLimit - -自 v20.1 引入 - -返回位图中从位置 `range_start` 开始的一个子集,其中最多包含 `cardinality_limit` 个已置位的位。索引从 1 开始计数。 - -**语法** - -```sql -bitmapSubsetLimit(bitmap, range_start, cardinality_limit) -``` - -**参数** - -* `bitmap` — Bitmap 对象。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction) -* `range_start` — 范围起始值(含)。[`UInt32`](/sql-reference/data-types/int-uint) -* `cardinality_limit` — 子集的最大基数。[`UInt32`](/sql-reference/data-types/int-uint) - -**返回值** - -返回一个 bitmap,其中从 `range_start` 开始,至多包含 `cardinality_limit` 个已设置的位。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction) - -**示例** - -**使用示例** - -```sql title=Query -SELECT bitmapToArray(bitmapSubsetLimit(bitmapBuild([1, 5, 3, 2, 8]), 3, 2)) AS res; -``` - -```response title=Response -┌─res────┐ -│ [5, 3] │ -└────────┘ -``` - - -## bitmapToArray - -自 v20.1 起引入 - -将 bitmap 转换为无符号整数数组。它与函数 [`bitmapBuild`](/sql-reference/functions/bitmap-functions#bitmapBuild) 的作用相反。 - -**语法** - -```sql -bitmapToArray(bitmap) -``` - -**参数** - -* `bitmap` — 要转换的位图。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction)。 - -**返回值** - -返回一个由位图中包含的无符号整数组成的数组 [`Array(UInt*)`](/sql-reference/data-types/array)。 - -**示例** - -**使用示例** - -```sql title=Query -SELECT bitmapToArray(bitmapBuild([1, 2, 3, 4, 5])) AS res; -``` - -```response title=Response -┌─res─────────────┐ -│ [1, 2, 3, 4, 5] │ -└─────────────────┘ -``` - - -## bitmapTransform - -自 v20.1 引入 - -通过将 `from_array` 中指定的位值替换为 `to_array` 中对应的位值,最多可以修改位图中的 N 个比特位。 - -**语法** - -```sql -bitmapTransform(bitmap, from_array, to_array) -``` - -**参数** - -* `bitmap` — Bitmap 对象。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction)。 - `from_array` — 包含要被替换的原始置位比特的数组。[`Array(T)`](/sql-reference/data-types/array)。 - `to_array` — 包含用于替换的新置位比特的数组。[`Array(T)`](/sql-reference/data-types/array)。 - -**返回值** - -返回一个根据给定映射关系完成元素转换的 bitmap。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction) - -**示例** - -**用法示例** - -```sql title=Query -SELECT bitmapToArray(bitmapTransform(bitmapBuild([1, 2, 3, 4, 5]), [2, 4], [20, 40])) AS res; -``` - -```response title=Response -┌─res───────────────┐ -│ [1, 3, 5, 20, 40] │ -└───────────────────┘ -``` - - -## bitmapXor - -自 v20.1 版本引入 - -计算两个位图的对称差(异或)。 - -**语法** - -```sql -bitmapXor(bitmap1, bitmap2) -``` - -**参数** - -* `bitmap1` — 第一个 bitmap 对象。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - `bitmap2` — 第二个 bitmap 对象。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction). - -**返回值** - -返回一个 bitmap,其中包含在任一输入 bitmap 中、但不同时出现在两个 bitmap 中的已置位比特。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction) - -**示例** - -**用法示例** - -```sql title=Query -SELECT bitmapToArray(bitmapXor(bitmapBuild([1, 2, 3]), bitmapBuild([3, 4, 5]))) AS res; -``` - -```response title=Response -┌─res──────────┐ -│ [1, 2, 4, 5] │ -└──────────────┘ -``` - - -## bitmapXorCardinality - -引入版本:v20.1 - -返回两个 bitmap 的 XOR(对称差)运算结果的基数。 - -**语法** - -```sql -bitmapXorCardinality(bitmap1, bitmap2) -``` - -**参数** - -* `bitmap1` — 第一个位图对象。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction) -* `bitmap2` — 第二个位图对象。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction) - -**返回值** - -返回两个位图对称差中被置位的比特数,[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT bitmapXorCardinality(bitmapBuild([1,2,3]), bitmapBuild([3,4,5])) AS res; -``` - -```response title=Response -┌─res─┐ -│ 4 │ -└─────┘ -``` - - -## subBitmap - -自 v21.9 起引入 - -返回一个从位置 `offset` 开始的位图子集。返回位图的最大基数为 `cardinality_limit`。 - -**语法** - -```sql -subBitmap(bitmap, offset, cardinality_limit) -``` - -**参数** - -* `bitmap` — 位图对象。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction)。- `offset` — 从起始位置开始需要跳过的已置位位的数量(从零开始计数)。[`UInt32`](/sql-reference/data-types/int-uint) - `cardinality_limit` — 要包含在子集中的已置位位的最大数量。[`UInt32`](/sql-reference/data-types/int-uint) - -**返回值** - -返回一个位图,在按升序跳过 `offset` 个已置位位之后,最多包含 `limit` 个已置位位。[`AggregateFunction(groupBitmap, T)`](/sql-reference/data-types/aggregatefunction) - -**示例** - -**使用示例** - -```sql title=Query -SELECT bitmapToArray(subBitmap(bitmapBuild([1, 2, 3, 4, 5]), 2, 2)) AS res; -``` - -```response title=Response -┌─res────┐ -│ [3, 4] │ -└────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/comparison-functions.md b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/comparison-functions.md index 5a1f375d14e..c8d47c0c9dd 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/comparison-functions.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/comparison-functions.md @@ -1,354 +1,39 @@ --- -description: '比较函数相关文档' +description: '比较函数说明' sidebar_label: '比较' slug: /sql-reference/functions/comparison-functions title: '比较函数' doc_type: 'reference' --- - - # 比较函数 - - ## 比较规则 -下面的比较函数会返回 `0` 或 `1`,类型为 [UInt8](/sql-reference/data-types/int-uint)。只有同一组内的值可以相互比较(例如 `UInt16` 和 `UInt64`),不同组之间不能比较(例如 `UInt16` 和 `DateTime`)。 -可以对数字和字符串进行比较,也可以比较字符串与日期、日期与时间。 -对于元组和数组,比较方式为字典序比较,也就是说会依次比较左侧和右侧元组/数组中的每个对应元素。 +下面的比较函数返回类型为 [UInt8](/sql-reference/data-types/int-uint) 的 `0` 或 `1`。只有同一组内的值可以进行比较(例如 `UInt16` 和 `UInt64`),不同组之间的值不能相互比较(例如 `UInt16` 和 `DateTime`)。 +可以比较数字和字符串,也可以比较字符串与日期、日期与时间。 +对于元组和数组,比较是按字典序进行的,这意味着会依次比较左侧和右侧元组/数组中对应位置的元素。 可以进行比较的类型包括: -* 数值和十进制数(numbers 和 decimals) -* 字符串和定长字符串(strings 和 fixed strings) -* 日期(dates) -* 日期时间(dates with times) -* 元组(字典序比较,tuples) -* 数组(字典序比较,arrays) +* 数值和小数 +* 字符串和定长字符串 +* 日期 +* 日期时间 +* 元组(按字典序比较) +* 数组(按字典序比较) :::note 字符串按字节逐个比较。如果某个字符串包含 UTF-8 编码的多字节字符,这可能会导致意外结果。 -如果字符串 S1 以另一个字符串 S2 作为前缀,则在比较时认为 S1 大于 S2。 +如果字符串 S1 以字符串 S2 为前缀,则认为 S1 比 S2 长。 ::: {/* - 下面标签中的内容会在文档框架构建期间, - 被 system.functions 生成的文档所替换。 - 请不要修改或删除这些标签。 + 下面这些标签的内部内容会在文档框架构建时 + 被 system.functions 自动生成的文档替换。请不要修改或删除这些标签。 参见:https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## equals - -在 v1.1 中引入 - -比较两个值是否相等。 - -**语法** - -```sql -equals(a, b) - -- a = b - -- a == b -``` - -**参数** - -* `a` — 第一个值。[*](#comparison-rules) - `b` — 第二个值。[*](#comparison-rules) - -**返回值** - -如果 `a` 等于 `b`,则返回 `1`,否则返回 `0`(类型为 [`UInt8`](/sql-reference/data-types/int-uint))。 - -**示例** - -**使用示例** - -```sql title=Query -SELECT 1 = 1, 1 = 2; -``` - -```response title=Response -┌─equals(1, 1)─┬─equals(1, 2)─┐ -│ 1 │ 0 │ -└──────────────┴──────────────┘ -``` - - -## greater - -引入版本:v1.1 - -比较两个值是否满足大于关系。 - -**语法** - -```sql -greater(a, b) - -- a > b -``` - -**参数** - -* `a` — 第一个值。[*](#comparison-rules) - `b` — 第二个值。[*](#comparison-rules) - -**返回值** - -如果 `a` 大于 `b`,则返回 `1`,否则返回 `0`,类型为 [`UInt8`](/sql-reference/data-types/int-uint)。 - -**示例** - -**用法示例** - -```sql title=Query -SELECT 2 > 1, 1 > 2; -``` - -```response title=Response -┌─greater(2, 1)─┬─greater(1, 2)─┐ -│ 1 │ 0 │ -└───────────────┴───────────────┘ -``` - - -## greaterOrEquals - -自 v1.1 引入 - -比较两个值是否满足“大于等于”关系。 - -**语法** - -```sql -greaterOrEquals(a, b) - -- a >= b(a 大于等于 b) -``` - -**参数** - -* `a` — 第一个值。[*](#comparison-rules) - `b` — 第二个值。[*](#comparison-rules) - -**返回值** - -返回值类型为 [`UInt8`](/sql-reference/data-types/int-uint):如果 `a` 大于或等于 `b`,则返回 `1`,否则返回 `0`。 - -**示例** - -**用法示例** - -```sql title=Query -SELECT 2 >= 1, 2 >= 2, 1 >= 2; -``` - -```response title=Response -┌─greaterOrEquals(2, 1)─┬─greaterOrEquals(2, 2)─┬─greaterOrEquals(1, 2)─┐ -│ 1 │ 1 │ 0 │ -└───────────────────────┴───────────────────────┴───────────────────────┘ -``` - - -## isDistinctFrom - -引入于:v25.9 - -对两个值执行空值安全的“不等于”比较。 -如果两个值彼此不同(不相等),包括其中一个为 NULL 而另一个不是,则返回 `true`。 -如果两个值相等,或二者均为 NULL,则返回 `false`。 - -**语法** - -```sql -isDistinctFrom(x, y) -``` - -**参数** - -* `x` — 要比较的第一个值。可以是任意 ClickHouse 数据类型。[`Any`](/sql-reference/data-types) -* `y` — 要比较的第二个值。可以是任意 ClickHouse 数据类型。[`Any`](/sql-reference/data-types) - -**返回值** - -如果两个值不同,则返回 `true`,并将 NULL 视为可比较的值: - -* 如果 x != y,则返回 `true`。 -* 如果 x 或 y 中恰好有一个为 NULL,则返回 `true`。 -* 如果 x = y,或 x 和 y 都为 NULL,则返回 `false`。[`Bool`](/sql-reference/data-types/boolean) - -**示例** - -**针对数字和 NULL 的基本用法** - -```sql title=Query -SELECT - isDistinctFrom(1, 2) AS result_1, - isDistinctFrom(1, 1) AS result_2, - isDistinctFrom(NULL, 1) AS result_3, - isDistinctFrom(NULL, NULL) AS result_4 -``` - -```response title=Response -┌─result_1─┬─result_2─┬─result_3─┬─result_4─┐ -│ 1 │ 0 │ 1 │ 0 │ -└──────────┴──────────┴──────────┴──────────┘ -``` - - -## isNotDistinctFrom - -引入于:v25.9 - -对两个值执行空安全(NULL-safe)的“等于”比较。 -如果两个值相等,则返回 `true`,包括两者都为 NULL 的情况。 -如果两个值不相等,或者只有其中一个为 NULL,则返回 `false`。 - -**语法** - -```sql -isNotDistinctFrom(x, y) -``` - -**参数** - -* `x` — 要比较的第一个值。可以是任意 ClickHouse 数据类型。[`Any`](/sql-reference/data-types) -* `y` — 要比较的第二个值。可以是任意 ClickHouse 数据类型。[`Any`](/sql-reference/data-types) - -**返回值** - -在将 NULL 视为可比较值的前提下,如果两个值相等则返回 `true`: - -* 如果 x = y,则返回 `true`。 -* 如果 x 和 y 都为 NULL,则返回 `true`。 -* 如果 x != y,或者 x 和 y 中只有一个为 NULL,则返回 `false`。[`Bool`](/sql-reference/data-types/boolean) - -**示例** - -**在数字和 NULL 上的基本用法** - -```sql title=Query -SELECT - isNotDistinctFrom(1, 1) AS result_1, - isNotDistinctFrom(1, 2) AS result_2, - isNotDistinctFrom(NULL, NULL) AS result_3, - isNotDistinctFrom(NULL, 1) AS result_4 -``` - -```response title=Response -┌─result_1─┬─result_2─┬─result_3─┬─result_4─┐ -│ 1 │ 0 │ 1 │ 0 │ -└──────────┴──────────┴──────────┴──────────┘ -``` - - -## less - -引入版本:v1.1 - -用于比较两个值是否满足“小于”关系。 - -**语法** - -```sql -less(a, b) - -- a < b -``` - -**参数** - -* `a` — 第一个值。[*](#comparison-rules) - `b` — 第二个值。[*](#comparison-rules) - -**返回值** - -当 `a` 小于 `b` 时返回 `1`,否则返回 `0`,类型为 [`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT 1 < 2, 2 < 1; -``` - -```response title=Response -┌─less(1, 2)─┬─less(2, 1)─┐ -│ 1 │ 0 │ -└────────────┴────────────┘ -``` - - -## lessOrEquals - -自 v1.1 起引入 - -用于比较两个值是否满足小于等于关系。 - -**语法** - -```sql -lessOrEquals(a, b) --- a <= b -``` - -**参数** - -* `a` — 第一个值。[*](#comparison-rules) - `b` — 第二个值。[*](#comparison-rules) - -**返回值** - -如果 `a` 小于或等于 `b`,则返回 `1`,否则返回 `0`([`UInt8`](/sql-reference/data-types/int-uint)) - -**示例** - -**使用示例** - -```sql title=Query -SELECT 1 <= 2, 2 <= 2, 3 <= 2; -``` - -```response title=Response -┌─lessOrEquals(1, 2)─┬─lessOrEquals(2, 2)─┬─lessOrEquals(3, 2)─┐ -│ 1 │ 1 │ 0 │ -└────────────────────┴────────────────────┴────────────────────┘ -``` - - -## notEquals - -自 v1.1 版本引入 - -用于比较两个值是否不相等。 - -**语法** - -```sql -notEquals(a, b) - -- a != b - -- a <> b -``` - -**参数** - -* `a` — 第一个值。[*](#comparison-rules) - `b` — 第二个值。[*](#comparison-rules) - -**返回值** - -当 `a` 不等于 `b` 时返回 `1`,否则返回 `0`。返回类型为 [`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT 1 != 2, 1 != 1; -``` - -```response title=Response -┌─notEquals(1, 2)─┬─notEquals(1, 1)─┐ -│ 1 │ 0 │ -└─────────────────┴─────────────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/conditional-functions.md b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/conditional-functions.md index 1944add698b..c6f66ad2e8e 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/conditional-functions.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/conditional-functions.md @@ -1,22 +1,18 @@ --- -description: '条件函数相关文档' -sidebar_label: '条件函数' +description: '条件函数文档' +sidebar_label: '条件' slug: /sql-reference/functions/conditional-functions title: '条件函数' -doc_type: '参考文档' +doc_type: 'reference' --- - - # 条件函数 - - -## 概述 +## 概述 {#overview} ### 直接使用条件表达式结果 -条件表达式始终返回 `0`、`1` 或 `NULL`。因此,你可以直接使用条件表达式的结果,例如: +条件表达式的结果始终为 `0`、`1` 或 `NULL`。因此你可以像下面这样直接使用条件表达式的结果: ```sql SELECT left < right AS is_small @@ -31,9 +27,10 @@ FROM LEFT_RIGHT └──────────┘ ``` -### 条件表达式中的 NULL 值 -当条件表达式中涉及 `NULL` 值时,结果也将为 `NULL`。 +### 条件语句中的 NULL 值 + +当条件中出现 `NULL` 值时,结果也会是 `NULL`。 ```sql SELECT @@ -47,35 +44,36 @@ SELECT └───────────────┴───────────────┴──────────────────┴────────────────────┘ ``` -因此,当类型为 `Nullable` 时,你应当格外谨慎地构造查询。 +因此,如果类型是 `Nullable`,你在构造查询时应格外谨慎。 -下面的示例通过未能为 `multiIf` 添加等值条件而导致失败,从而演示了这一点。 +下面的示例通过在 `multiIf` 中遗漏等值条件而导致失败来演示这一点。 ```sql SELECT left, right, - multiIf(left < right, 'left 更小', left > right, 'right 更小', '两者相等') AS faulty_result + multiIf(left < right, '左边更小', left > right, '右边更小', '两者相等') AS faulty_result FROM LEFT_RIGHT ┌─left─┬─right─┬─faulty_result────┐ │ ᴺᵁᴸᴸ │ 4 │ 两者相等 │ -│ 1 │ 3 │ left 更小 │ +│ 1 │ 3 │ 左边更小 │ │ 2 │ 2 │ 两者相等 │ -│ 3 │ 1 │ right 更小 │ +│ 3 │ 1 │ 右边更小 │ │ 4 │ ᴺᵁᴸᴸ │ 两者相等 │ └──────┴───────┴──────────────────┘ ``` + ### CASE 语句 -ClickHouse 中的 CASE 表达式提供了与 SQL CASE 运算符类似的条件逻辑。它会对条件进行求值,并根据第一个满足的条件返回相应的值。 +ClickHouse 中的 CASE 表达式提供了与 SQL 中 CASE 运算符类似的条件逻辑。它会对条件进行求值,并根据第一个匹配的条件返回对应的值。 -ClickHouse 支持两种形式的 CASE: +ClickHouse 支持两种 CASE 形式: 1. `CASE WHEN ... THEN ... ELSE ... END`
- 这种形式提供了充分的灵活性,并在内部通过 [multiIf](/sql-reference/functions/conditional-functions#multiIf) 函数实现。每个条件都会被独立求值,表达式中可以包含非常量值。 + 此形式提供最大程度的灵活性,并在内部通过 [multiIf](/sql-reference/functions/conditional-functions#multiIf) 函数实现。每个条件都会被独立求值,表达式可以包含非常量的值。 ```sql SELECT @@ -103,12 +101,12 @@ WHERE number < 5 │ 4 │ 5 │ └────────┴────────┘ -返回 5 行。用时:0.002 秒。 +返回 5 行。用时:0.002 秒。 ``` 2. `CASE WHEN THEN ... WHEN THEN ... ELSE ... END`
- 这种更紧凑的形式针对常量值匹配进行了优化,并在内部使用 `caseWithExpression()`。 + 这种更紧凑的形式针对常量值匹配进行了优化,并在内部调用 `caseWithExpression()` 实现。 例如,下面的写法是有效的: @@ -130,8 +128,6 @@ SELECT caseWithExpression(number, 0, 100, 1, 200, 0) AS result FROM system.numbers WHERE number < 3 -``` - ┌─number─┬─result─┐ │ 0 │ 100 │ @@ -139,11 +135,10 @@ WHERE number < 3 │ 2 │ 0 │ └────────┴────────┘ -3 行结果,耗时:0.002 秒。 - -```` +返回 3 行。用时:0.002 秒。 +``` -此形式同样不要求返回表达式必须为常量。 +这种形式也不要求返回表达式必须是常量。 ```sql SELECT @@ -171,17 +166,18 @@ WHERE number < 3 └────────┴──────────────────────────┘ 返回 3 行。用时:0.001 秒。 -```` +``` + #### 注意事项 -ClickHouse 会在评估任何条件之前,先确定 CASE 表达式(或其内部等价形式,例如 `multiIf`)的结果类型。当各分支返回的表达式类型不同(例如不同时区或不同数值类型)时,这一点尤为重要。 +ClickHouse 会在计算任何条件之前,先确定 CASE 表达式(或其内部等价形式,例如 `multiIf`)的结果类型。当各个分支的返回表达式类型不同时(例如不同时区或不同数值类型),这一点尤为重要。 -* 结果类型会基于所有分支中“最大”的兼容类型来选择。 -* 一旦选定了该类型,其他所有分支都会被隐式转换为此类型——即使这些分支在运行时逻辑上永远不会被执行。 -* 对于像 DateTime64 这类将时区作为类型签名一部分的类型,这会导致一些出乎意料的行为:第一个遇到的时区可能会被用于所有分支,即便其他分支指定了不同的时区。 +* 结果类型会根据所有分支中“最大”的兼容类型来选择。 +* 一旦选定了该类型,其他所有分支都会被隐式转换为该类型——即使这些分支在运行时永远不会被执行。 +* 对于像 DateTime64 这类类型,由于时区是类型签名的一部分,这可能导致出人意料的行为:第一个遇到的时区可能会被用于所有分支,即使其他分支指定了不同的时区。 -例如,在下面的示例中,所有行都会以第一个匹配分支的时区返回时间戳,即 `Asia/Kolkata`。 +例如,在下面的例子中,所有行都会返回第一个匹配分支时区下的时间戳,即 `Asia/Kolkata`。 ```sql SELECT @@ -211,9 +207,9 @@ WHERE number < 3 返回 3 行。用时:0.011 秒。 ``` -在这里,ClickHouse 遇到了多个 `DateTime64(3, <timezone>)` 返回类型。它将首先遇到的 `DateTime64(3, 'Asia/Kolkata'` 推断为通用类型,并将其他分支隐式转换为该类型。 +在这里,ClickHouse 检测到多个 `DateTime64(3, )` 返回类型。它将首次检测到的类型 `DateTime64(3, 'Asia/Kolkata'` 推断为公共类型,并将其他分支隐式转换为该类型。 -可以通过先转换为字符串来解决这一问题,从而保留预期的时区格式: +可以通过先转换为字符串来解决该问题,从而保留预期的时区格式: ```sql SELECT @@ -226,15 +222,13 @@ SELECT FROM system.numbers WHERE number < 3; --- is translated to +-- 转换为 SELECT number, multiIf(number = 0, formatDateTime(fromUnixTimestamp64Milli(0), '%F %T', 'Asia/Kolkata'), number = 1, formatDateTime(fromUnixTimestamp64Milli(0), '%F %T', 'America/Los_Angeles'), formatDateTime(fromUnixTimestamp64Milli(0), '%F %T', 'UTC')) AS tz FROM system.numbers WHERE number < 3 -``` - ┌─number─┬─tz──────────────────┐ │ 0 │ 1970-01-01 05:30:00 │ @@ -242,335 +236,15 @@ WHERE number < 3 │ 2 │ 1970-01-01 00:00:00 │ └────────┴─────────────────────┘ -3 行结果,耗时 0.002 秒。 - -``` - - +返回 3 行。用时:0.002 秒。 ``` +{/* + 以下标签内的内容会在文档框架构建时被替换为 + 由 system.functions 生成的文档。请不要修改或删除这些标签。 + 参见:https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md + */ } {/*AUTOGENERATED_START*/ } -## clamp - -引入于:v24.5 - -将一个值限制在指定的最小值和最大值范围之内。 - -如果该值小于最小值,则返回最小值;如果该值大于最大值,则返回最大值;否则,返回该值本身。 - -所有参数必须是可相互比较的类型。结果类型为所有参数中兼容类型里范围最大的类型。 - -**语法** - -```sql -clamp(value, min, max) -``` - -**参数** - -* `value` — 要进行限制的值。 - `min` — 最小边界。 - `max` — 最大边界。 - -**返回值** - -返回限制在 [min, max] 范围内的值。 - -**示例** - -**基本用法** - -```sql title=Query -SELECT clamp(5, 1, 10) AS result; -``` - -```response title=Response -┌─result─┐ -│ 5 │ -└────────┘ -``` - -**数值低于最小值** - -```sql title=Query -SELECT clamp(-3, 0, 7) AS result; -``` - -```response title=Response -┌─result─┐ -│ 0 │ -└────────┘ -``` - -**值超过最大值** - -```sql title=Query -SELECT clamp(15, 0, 7) AS result; -``` - -```response title=Response -┌─result─┐ -│ 7 │ -└────────┘ -``` - - -## greatest - -引入于:v1.1 - -返回参数中最大的值。 -会忽略 `NULL` 参数。 - -* 对于数组,返回按字典序比较中最大的数组。 -* 对于 `DateTime` 类型,结果类型会提升为参与比较的最大类型(例如,与 `DateTime32` 混用时会提升为 `DateTime64`)。 - -:::note 使用设置项 `least_greatest_legacy_null_behavior` 更改 `NULL` 行为 -版本 [24.12](/whats-new/changelog/2024#a-id2412a-clickhouse-release-2412-2024-12-19) 引入了一个向后不兼容的变更:`NULL` 值会被忽略,而之前当任一参数为 `NULL` 时会返回 `NULL`。 -若要保留之前的行为,请将设置项 `least_greatest_legacy_null_behavior`(默认:`false`)设为 `true`。 -::: - -**语法** - -```sql -greatest(x1[, x2, ...]) -``` - -**参数** - -* `x1[, x2, ...]` — 要比较的一个或多个值。所有参数必须是彼此可比较的类型。[`Any`](/sql-reference/data-types) - -**返回值** - -返回参数中最大的值,并自动提升为最大兼容类型。[`Any`](/sql-reference/data-types) - -**示例** - -**数值类型** - -```sql title=Query -SELECT greatest(1, 2, toUInt8(3), 3.) AS result, toTypeName(result) AS type; --- 返回的类型为 Float64,因为 UInt8 必须提升至 64 位以进行比较。 -``` - -```response title=Response -┌─result─┬─type────┐ -│ 3 │ Float64 │ -└────────┴─────────┘ -``` - -**数组** - -```sql title=Query -SELECT greatest(['hello'], ['there'], ['world']); -``` - -```response title=Response -┌─greatest(['hello'], ['there'], ['world'])─┐ -│ ['world'] │ -└───────────────────────────────────────────┘ -``` - -**DateTime 类型** - -```sql title=Query -SELECT greatest(toDateTime32(now() + toIntervalDay(1)), toDateTime64(now(), 3)); --- 返回类型为 DateTime64,因为 DateTime32 必须提升至 64 位以进行比较。 -``` - -```response title=Response -┌─greatest(toD⋯(now(), 3))─┐ -│ 2025-05-28 15:50:53.000 │ -└──────────────────────────┘ -``` - - -## if - -引入版本:v1.1 - -执行条件分支。 - -* 如果条件 `cond` 的计算结果为非零值,函数返回表达式 `then` 的结果。 -* 如果 `cond` 的计算结果为零或 NULL,则返回 `else` 表达式的结果。 - -设置项 [`short_circuit_function_evaluation`](/operations/settings/settings#short_circuit_function_evaluation) 用于控制是否启用短路求值。 - -如果启用,只有在 `cond` 为 true 的行上才会计算 `then` 表达式,在 `cond` 为 false 的行上才会计算 `else` 表达式。 - -例如,在启用短路求值的情况下,执行以下查询时不会抛出除零异常: - -```sql -SELECT if(number = 0, 0, intDiv(42, number)) FROM numbers(10) -``` - -`then` 和 `else` 必须为相同或兼容的类型。 - -**语法** - -```sql -if(cond, then, else) -``` - -**参数** - -* `cond` — 要计算的条件。[`UInt8`](/sql-reference/data-types/int-uint) 或 [`Nullable(UInt8)`](/sql-reference/data-types/nullable) 或 [`NULL`](/sql-reference/syntax#null) -* `then` — 当 `cond` 为 true 时返回的表达式。 -* `else` — 当 `cond` 为 false 或 `NULL` 时返回的表达式。 - -**返回值** - -根据条件 `cond`,返回 `then` 或 `else` 表达式的结果。 - -**示例** - -**示例用法** - -```sql title=Query -SELECT if(1, 2 + 2, 2 + 6) AS res; -``` - -```response title=Response -┌─res─┐ -│ 4 │ -└─────┘ -``` - - -## least - -引入于:v1.1 - -返回参数中最小的值。 -`NULL` 参数会被忽略。 - -* 对于数组,返回按字典序最小的数组。 -* 对于 DateTime 类型,结果类型会提升为最大的类型(例如,与 DateTime32 混合时为 DateTime64)。 - -:::note 使用设置项 `least_greatest_legacy_null_behavior` 来更改 `NULL` 行为 -版本 [24.12](/whats-new/changelog/2024#a-id2412a-clickhouse-release-2412-2024-12-19) 引入了一个向后不兼容的变更:现在会忽略 `NULL` 值,而之前只要任一参数为 `NULL` 就返回 `NULL`。 -若要保留之前的行为,请将设置项 `least_greatest_legacy_null_behavior`(默认值:`false`)设为 `true`。 -::: - -**语法** - -```sql -least(x1[, x2, ...]) -``` - -**参数** - -* `x1[, x2, ...]` — 要比较的一个或多个值。所有参数必须为可相互比较的类型。[`Any`](/sql-reference/data-types) - -**返回值** - -返回参数中最小的值,并提升到最高的兼容类型。[`Any`](/sql-reference/data-types) - -**示例** - -**数值类型** - -```sql title=Query -SELECT least(1, 2, toUInt8(3), 3.) AS result, toTypeName(result) AS type; --- 返回类型为 Float64,因为 UInt8 必须提升至 64 位以进行比较。 -``` - -```response title=Response -┌─result─┬─type────┐ -│ 1 │ Float64 │ -└────────┴─────────┘ -``` - -**数组** - -```sql title=Query -SELECT least(['hello'], ['there'], ['world']); -``` - -```response title=Response -┌─least(['hell⋯ ['world'])─┐ -│ ['hello'] │ -└──────────────────────────┘ -``` - -**DateTime 类型** - -```sql title=Query -SELECT least(toDateTime32(now() + toIntervalDay(1)), toDateTime64(now(), 3)); --- 返回类型为 DateTime64,因为 DateTime32 必须提升至 64 位以进行比较。 -``` - -```response title=Response -┌─least(toDate⋯(now(), 3))─┐ -│ 2025-05-27 15:55:20.000 │ -└──────────────────────────┘ -``` - - -## multiIf - -引入版本:v1.1 - -允许在查询中以更简洁的方式编写 [`CASE`](/sql-reference/operators#conditional-expression) 运算符。 -按顺序依次计算每个条件。对于第一个为真(非零且非 `NULL`)的条件,返回对应分支的值。 -如果所有条件都不为真,则返回 `else` 值。 - -[`short_circuit_function_evaluation`](/operations/settings/settings#short_circuit_function_evaluation) 设置控制 -是否启用短路求值。如果启用,则 `then_i` 表达式只会在满足 -`((NOT cond_1) AND ... AND (NOT cond_{i-1}) AND cond_i)` 为真的行上进行计算。 - -例如,在启用短路求值的情况下,执行以下查询时不会抛出除零异常: - -```sql -SELECT multiIf(number = 2, intDiv(1, number), number = 5) FROM numbers(10) -``` - -所有分支表达式和 `else` 表达式必须具有相同的公共超类型。`NULL` 条件视为 `false`。 - -**语法** - -```sql -multiIf(cond_1, then_1, cond_2, then_2, ..., else) -``` - -**别名**: `caseWithoutExpression`, `caseWithoutExpr` - -**参数** - -* `cond_N` — 第 N 个被求值的条件,用于控制是否返回 `then_N`。类型为 [`UInt8`](/sql-reference/data-types/int-uint) 或 [`Nullable(UInt8)`](/sql-reference/data-types/nullable) 或 [`NULL`](/sql-reference/syntax#null) -* `then_N` — 当 `cond_N` 为真时的函数结果。- `else` — 当所有条件都不为真时的函数结果。 - -**返回值** - -对于匹配的 `cond_N`,返回对应的 `then_N` 结果,否则返回 `else` 的结果。 - -**示例** - -**用法示例** - -```sql title=Query -CREATE TABLE LEFT_RIGHT (left Nullable(UInt8), right Nullable(UInt8)) ENGINE = Memory; -INSERT INTO LEFT_RIGHT VALUES (NULL, 4), (1, 3), (2, 2), (3, 1), (4, NULL); - -SELECT - left, - right, - multiIf(left < right, 'left 较小', left > right, 'left 较大', left = right, '两者相等', '空值') AS result -FROM LEFT_RIGHT; -``` - -```response title=Response -┌─left─┬─right─┬─result──────────┐ -│ ᴺᵁᴸᴸ │ 4 │ 空值 │ -│ 1 │ 3 │ 左值较小 │ -│ 2 │ 2 │ 两者相等 │ -│ 3 │ 1 │ 左值较大 │ -│ 4 │ ᴺᵁᴸᴸ │ 空值 │ -└──────┴───────┴─────────────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/date-time-functions.md b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/date-time-functions.md index 8b7e349fc9a..19223fe828d 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/date-time-functions.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/date-time-functions.md @@ -1,16 +1,14 @@ --- -description: '日期和时间处理函数文档' -sidebar_label: '日期和时间' +description: '用于处理日期和时间的函数文档' +sidebar_label: '日期与时间' slug: /sql-reference/functions/date-time-functions -title: '日期和时间处理函数' +title: '用于处理日期和时间的函数' doc_type: 'reference' --- - - # 用于处理日期和时间的函数 -本节中的大多数函数支持可选的时区参数,例如 `Europe/Amsterdam`。在这种情况下,将使用指定的时区,而不是本地时区(默认时区)。 +本节中的大多数函数都接受一个可选的时区参数,例如 `Europe/Amsterdam`。在这种情况下,将使用指定的时区,而不是默认的本地时区。 **示例** @@ -29,5652 +27,11 @@ SELECT ``` {/* - 下面这些标签的内部内容会在文档框架构建时, - 被由 system.functions 生成的文档替换。请不要修改或删除这些标签。 + 下方标签内的内容会在文档框架构建时 + 被从 system.functions 生成的文档所替换。请不要修改或移除这些标签。 参见:https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## UTCTimestamp - -新增于:v22.11 - -返回在查询解析时的当前日期和时间。该函数是一个常量表达式。 - -此函数返回的结果与 `now('UTC')` 相同。它仅为兼容 MySQL 而添加。推荐优先使用 [`now`](#now)。 - -**语法** - -```sql -UTCTimestamp() -``` - -**别名**: `UTC_timestamp` - -**参数** - -* 无。 - -**返回值** - -在查询分析时返回当前的日期和时间。[`DateTime`](/sql-reference/data-types/datetime) - -**示例** - -**获取当前 UTC 时间戳** - -```sql title=Query -SELECT UTCTimestamp() -``` - -```response title=Response -┌──────UTCTimestamp()─┐ -│ 2024-05-28 08:32:09 │ -└─────────────────────┘ -``` - - -## YYYYMMDDToDate - -引入于:v23.9 - -将包含年月日的数值转换为 `Date`。 -该函数与 [`toYYYYMMDD()`](/sql-reference/functions/date-time-functions#toYYYYMMDD) 函数执行相反的转换。 -如果输入不表示一个有效的 `Date` 值,则输出未定义。 - -**语法** - -```sql -YYYYMMDDToDate(YYYYMMDD) -``` - -**参数** - -* `YYYYMMDD` — 表示年份、月份和日期的数值。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) - -**返回值** - -根据提供的参数返回一个 `Date` 值 [`Date`](/sql-reference/data-types/date) - -**示例** - -**示例** - -```sql title=Query -SELECT YYYYMMDDToDate(20230911); -``` - -```response title=Response -┌─toYYYYMMDD(20230911)─┐ -│ 2023-09-11 │ -└──────────────────────┘ -``` - - -## YYYYMMDDToDate32 - -引入于:v23.9 - -将一个表示年、月和日的数字转换为 `Date32`。 -该函数与函数 [`toYYYYMMDD()`](/sql-reference/functions/date-time-functions#toYYYYMMDD) 的作用相反。 -如果输入不表示有效的 `Date32` 值,则输出未定义。 - -**语法** - -```sql -YYYYMMDDToDate32(YYYYMMDD) -``` - -**参数** - -* `YYYYMMDD` — 形如 YYYYMMDD、包含年、月、日的数字。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) - -**返回值** - -根据提供的参数构造并返回一个 `Date32` 值。详见 [`Date32`](/sql-reference/data-types/date32) - -**示例** - -**示例** - -```sql title=Query -SELECT YYYYMMDDToDate32(20000507); -``` - -```response title=Response -┌─YYYYMMDDToDate32(20000507)─┐ -│ 2000-05-07 │ -└────────────────────────────┘ -``` - - -## YYYYMMDDhhmmssToDateTime - -自 v23.9 起引入 - -将包含年、月、日、时、分和秒的数字转换为 `DateTime`。 -此函数是函数 [`toYYYYMMDDhhmmss()`](/sql-reference/functions/date-time-functions#toYYYYMMDDhhmmss) 的逆函数。 -如果输入不表示一个有效的 `DateTime` 值,则输出未定义。 - -**语法** - -```sql -YYYYMMDDhhmmssToDateTime(YYYYMMDDhhmmss[, timezone]) -``` - -**参数** - -* `YYYYMMDDhhmmss` — 包含年、月、日、时、分、秒的数字。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) -* `timezone` — 时区名称。[`String`](/sql-reference/data-types/string) - -**返回值** - -从提供的参数返回一个 `DateTime` 值。[`DateTime`](/sql-reference/data-types/datetime) - -**示例** - -**示例** - -```sql title=Query -SELECT YYYYMMDDToDateTime(20230911131415); -``` - -```response title=Response -┌──────YYYYMMDDhhmmssToDateTime(20230911131415)─┐ -│ 2023-09-11 13:14:15 │ -└───────────────────────────────────────────────┘ -``` - - -## YYYYMMDDhhmmssToDateTime64 - -自 v23.9 版本引入 - -将一个包含年、月、日、时、分和秒的数字转换为 `DateTime64`。 -此函数是函数 [`toYYYYMMDDhhmmss()`](/sql-reference/functions/date-time-functions#toYYYYMMDDhhmmss) 的反向操作。 -如果输入不能表示有效的 `DateTime64` 值,则结果未定义。 - -**语法** - -```sql -YYYYMMDDhhmmssToDateTime64(YYYYMMDDhhmmss[, precision[, timezone]]) -``` - -**参数** - -* `YYYYMMDDhhmmss` — 包含年、月、日、时、分、秒的数字。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) -* `precision` — 小数部分的精度(0-9)。[`UInt8`](/sql-reference/data-types/int-uint) -* `timezone` — 时区名称。[`String`](/sql-reference/data-types/string) - -**返回值** - -根据提供的参数构造并返回一个 `DateTime64` 值 [`DateTime64`](/sql-reference/data-types/datetime64) - -**示例** - -**示例** - -```sql title=Query -SELECT YYYYMMDDhhmmssToDateTime64(20230911131415, 3, 'Asia/Istanbul'); -``` - -```response title=Response -┌─YYYYMMDDhhmm⋯/Istanbul')─┐ -│ 2023-09-11 13:14:15.000 │ -└──────────────────────────┘ -``` - - -## addDate - -引入版本:v23.9 - -将时间间隔加到指定的 `date`、`date with time`,或其字符串编码形式上。 -如果相加结果超出该数据类型的取值范围,则结果未定义。 - -**语法** - -```sql -addDate(datetime, interval) -``` - -**参数** - -* `datetime` — 将要加上 `interval` 的日期或带时间的日期。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) 或 [`String`](/sql-reference/data-types/string) -* `interval` — 要添加的时间间隔。[`Interval`](/sql-reference/data-types/int-uint) - -**返回值** - -返回通过将 `interval` 加到 `datetime` 后得到的日期或带时间的日期。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**示例** - -**为日期添加时间间隔** - -```sql title=Query -SELECT addDate(toDate('2018-01-01'), INTERVAL 3 YEAR) -``` - -```response title=Response -┌─addDate(toDa⋯valYear(3))─┐ -│ 2021-01-01 │ -└──────────────────────────┘ -``` - - -## addDays - -引入版本:v1.1 - -将指定的天数添加到日期、日期时间,或其字符串表示形式。 - -**语法** - -```sql -addDays(datetime, num) -``` - -**参数** - -* `datetime` — 要添加指定天数的日期或日期时间值。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) 或 [`String`](/sql-reference/data-types/string) -* `num` — 要添加的天数。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) - -**返回值** - -返回 `datetime` 加上 `num` 天后的结果。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**示例** - -**对不同日期类型添加天数** - -```sql title=Query -WITH - toDate('2024-01-01') AS date, - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - addDays(date, 5) AS add_days_with_date, - addDays(date_time, 5) AS add_days_with_date_time, - addDays(date_time_string, 5) AS add_days_with_date_time_string -``` - -```response title=Response -┌─add_days_with_date─┬─add_days_with_date_time─┬─add_days_with_date_time_string─┐ -│ 2024-01-06 │ 2024-01-06 00:00:00 │ 2024-01-06 00:00:00.000 │ -└────────────────────┴─────────────────────────┴────────────────────────────────┘ -``` - -**使用另一种 INTERVAL 语法** - -```sql title=Query -SELECT dateAdd('1998-06-16'::Date, INTERVAL 10 day) -``` - -```response title=Response -┌─plus(CAST('1⋯valDay(10))─┐ -│ 1998-06-26 │ -└──────────────────────────┘ -``` - - -## addHours - -自 v1.1 起引入 - -将指定的小时数添加到日期、日期时间或其字符串编码形式上。 - -**语法** - -```sql -addHours(datetime, num) -``` - -**参数** - -* `datetime` — 要加上指定小时数的日期或日期时间值。类型为 [`Date`](/sql-reference/data-types/date)、[`Date32`](/sql-reference/data-types/date32)、[`DateTime`](/sql-reference/data-types/datetime)、[`DateTime64`](/sql-reference/data-types/datetime64) 或 [`String`](/sql-reference/data-types/string) -* `num` — 要添加的小时数。类型为 [`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) - -**返回值** - -返回 `datetime` 加上 `num` 小时后的结果,类型为 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64(3)`](/sql-reference/data-types/datetime64) - -**示例** - -**为不同的日期类型添加小时数** - -```sql title=Query -WITH - toDate('2024-01-01') AS date, - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - addHours(date, 12) AS add_hours_with_date, - addHours(date_time, 12) AS add_hours_with_date_time, - addHours(date_time_string, 12) AS add_hours_with_date_time_string -``` - -```response title=Response -┌─add_hours_with_date─┬─add_hours_with_date_time─┬─add_hours_with_date_time_string─┐ -│ 2024-01-01 12:00:00 │ 2024-01-01 12:00:00 │ 2024-01-01 12:00:00.000 │ -└─────────────────────┴──────────────────────────┴─────────────────────────────────┘ -``` - -**使用另一种 INTERVAL 语法** - -```sql title=Query -SELECT dateAdd('1998-06-16'::Date, INTERVAL 10 hour) -``` - -```response title=Response -┌─plus(CAST('1⋯alHour(10))─┐ -│ 1998-06-16 10:00:00 │ -└──────────────────────────┘ -``` - - -## addInterval - -自 v22.11 引入 - -将一个间隔加到另一个间隔或间隔元组上。 - -:::note -相同类型的间隔会合并为单个间隔。例如,如果传入 `toIntervalDay(1)` 和 `toIntervalDay(2)`,则结果为 `(3)` 而不是 `(1,1)`。 -::: - -**语法** - -```sql -addInterval(interval_1, interval_2) -``` - -**参数** - -* `interval_1` — 第一个区间或区间元组。[`Interval`](/sql-reference/data-types/int-uint) 或 [`Tuple(Interval)`](/sql-reference/data-types/tuple) -* `interval_2` — 第二个要相加的区间。[`Interval`](/sql-reference/data-types/int-uint) - -**返回值** - -返回一个区间元组 [`Tuple(Interval)`](/sql-reference/data-types/tuple) - -**示例** - -**区间相加** - -```sql title=Query -SELECT addInterval(INTERVAL 1 DAY, INTERVAL 1 MONTH); -SELECT addInterval((INTERVAL 1 DAY, INTERVAL 1 YEAR), INTERVAL 1 MONTH); -SELECT addInterval(INTERVAL 2 DAY, INTERVAL 1 DAY) -``` - -```response title=Response -┌─addInterval(toIntervalDay(1), toIntervalMonth(1))─┐ -│ (1,1) │ -└───────────────────────────────────────────────────┘ -┌─addInterval((toIntervalDay(1), toIntervalYear(1)), toIntervalMonth(1))─┐ -│ (1,1,1) │ -└────────────────────────────────────────────────────────────────────────┘ -┌─addInterval(toIntervalDay(2), toIntervalDay(1))─┐ -│ (3) │ -└─────────────────────────────────────────────────┘ -``` - - -## addMicroseconds - -自 v22.6 引入 - -将指定数量的微秒加到日期时间值,或其字符串编码形式的日期时间值上。 - -**语法** - -```sql -addMicroseconds(datetime, num) -``` - -**参数** - -* `datetime` — 需要在其上添加指定数量微秒的日期时间值。类型为 [`DateTime`](/sql-reference/data-types/datetime)、[`DateTime64`](/sql-reference/data-types/datetime64) 或 [`String`](/sql-reference/data-types/string) -* `num` — 要添加的微秒数。类型为 [`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) - -**返回值** - -返回 `date_time` 加上 `num` 微秒后的值,类型为 [`DateTime64`](/sql-reference/data-types/datetime64) - -**示例** - -**为不同的日期时间类型添加微秒** - -```sql title=Query -WITH - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - addMicroseconds(date_time, 1000000) AS add_microseconds_with_date_time, - addMicroseconds(date_time_string, 1000000) AS add_microseconds_with_date_time_string -``` - -```response title=Response -┌─add_microseconds_with_date_time─┬─add_microseconds_with_date_time_string─┐ -│ 2024-01-01 00:00:01.000000 │ 2024-01-01 00:00:01.000000 │ -└─────────────────────────────────┴────────────────────────────────────────┘ -``` - -**使用替代的 INTERVAL 语法** - -```sql title=Query -SELECT dateAdd('1998-06-16'::DateTime, INTERVAL 10 microsecond) -``` - -```response title=Response -┌─plus(CAST('19⋯osecond(10))─┐ -│ 1998-06-16 00:00:00.000010 │ -└────────────────────────────┘ -``` - - -## addMilliseconds - -引入版本:v22.6 - -将指定的毫秒数添加到带时间的日期或字符串形式的带时间日期上。 - -**语法** - -```sql -addMilliseconds(datetime, num) -``` - -**参数** - -* `datetime` — 要添加指定毫秒数的日期和时间值。类型为 [`DateTime`](/sql-reference/data-types/datetime)、[`DateTime64`](/sql-reference/data-types/datetime64) 或 [`String`](/sql-reference/data-types/string) -* `num` — 要添加的毫秒数。类型为 [`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) - -**返回值** - -返回值为 `datetime` 加上 `num` 毫秒后的结果,类型为 [`DateTime64`](/sql-reference/data-types/datetime64) - -**示例** - -**为不同的日期时间类型添加毫秒** - -```sql title=Query -WITH - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - addMilliseconds(date_time, 1000) AS add_milliseconds_with_date_time, - addMilliseconds(date_time_string, 1000) AS add_milliseconds_with_date_time_string -``` - -```response title=Response -┌─add_milliseconds_with_date_time─┬─add_milliseconds_with_date_time_string─┐ -│ 2024-01-01 00:00:01.000 │ 2024-01-01 00:00:01.000 │ -└─────────────────────────────────┴────────────────────────────────────────┘ -``` - -**使用另一种 INTERVAL 语法** - -```sql title=Query -SELECT dateAdd('1998-06-16'::DateTime, INTERVAL 10 millisecond) -``` - -```response title=Response -┌─plus(CAST('1⋯second(10))─┐ -│ 1998-06-16 00:00:00.010 │ -└──────────────────────────┘ -``` - - -## addMinutes - -自 v1.1 起引入 - -将指定的分钟数加到日期、日期时间,或其字符串表示形式上。 - -**语法** - -```sql -addMinutes(datetime, num) -``` - -**参数** - -* `datetime` — 要在其上添加指定分钟数的日期或日期时间类型值。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) 或 [`String`](/sql-reference/data-types/string) -* `num` — 要添加的分钟数。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) - -**返回值** - -返回在 `datetime` 基础上加上 `num` 分钟后的结果,类型为 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64(3)`](/sql-reference/data-types/datetime64) - -**示例** - -**为不同的日期类型增加分钟数** - -```sql title=Query -WITH - toDate('2024-01-01') AS date, - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - addMinutes(date, 20) AS add_minutes_with_date, - addMinutes(date_time, 20) AS add_minutes_with_date_time, - addMinutes(date_time_string, 20) AS add_minutes_with_date_time_string -``` - -```response title=Response -┌─add_minutes_with_date─┬─add_minutes_with_date_time─┬─add_minutes_with_date_time_string─┐ -│ 2024-01-01 00:20:00 │ 2024-01-01 00:20:00 │ 2024-01-01 00:20:00.000 │ -└───────────────────────┴────────────────────────────┴───────────────────────────────────┘ -``` - -**使用替代的 INTERVAL 语法** - -```sql title=Query -SELECT dateAdd('1998-06-16'::Date, INTERVAL 10 minute) -``` - -```response title=Response -┌─plus(CAST('1⋯Minute(10))─┐ -│ 1998-06-16 00:10:00 │ -└──────────────────────────┘ -``` - - -## addMonths - -自 v1.1 起引入 - -为日期、日期时间或以字符串编码的日期或日期时间添加指定数量的月份。 - -**语法** - -```sql -addMonths(datetime, num) -``` - -**参数** - -* `datetime` — 要在其基础上增加指定月份数的日期或日期时间。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) 或 [`String`](/sql-reference/data-types/string) -* `num` — 要增加的月份数。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) - -**返回值** - -返回 `datetime` 加上 `num` 个月后的结果。类型为 [`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**示例** - -**为不同日期类型添加月份** - -```sql title=Query -WITH - toDate('2024-01-01') AS date, - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - addMonths(date, 6) AS add_months_with_date, - addMonths(date_time, 6) AS add_months_with_date_time, - addMonths(date_time_string, 6) AS add_months_with_date_time_string -``` - -```response title=Response -┌─add_months_with_date─┬─add_months_with_date_time─┬─add_months_with_date_time_string─┐ -│ 2024-07-01 │ 2024-07-01 00:00:00 │ 2024-07-01 00:00:00.000 │ -└──────────────────────┴───────────────────────────┴──────────────────────────────────┘ -``` - -**使用另一种 INTERVAL 语法** - -```sql title=Query -SELECT dateAdd('1998-06-16'::Date, INTERVAL 10 month) -``` - -```response title=Response -┌─plus(CAST('1⋯lMonth(10))─┐ -│ 1999-04-16 │ -└──────────────────────────┘ -``` - - -## addNanoseconds - -自 v22.6 引入 - -将指定数量的纳秒添加到日期时间值,或字符串编码的日期时间值。 - -**语法** - -```sql -addNanoseconds(datetime, num) -``` - -**参数** - -* `datetime` — 需要增加指定纳秒数的日期时间。[`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) 或 [`String`](/sql-reference/data-types/string) -* `num` — 要增加的纳秒数。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) - -**返回值** - -返回 `datetime` 加上 `num` 个纳秒后的值,类型为 [`DateTime64`](/sql-reference/data-types/datetime64) - -**示例** - -**为不同的日期时间类型添加纳秒数** - -```sql title=Query -WITH - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - addNanoseconds(date_time, 1000) AS add_nanoseconds_with_date_time, - addNanoseconds(date_time_string, 1000) AS add_nanoseconds_with_date_time_string -``` - -```response title=Response -┌─add_nanoseconds_with_date_time─┬─add_nanoseconds_with_date_time_string─┐ -│ 2024-01-01 00:00:00.000001000 │ 2024-01-01 00:00:00.000001000 │ -└────────────────────────────────┴───────────────────────────────────────┘ -``` - -**使用另一种 INTERVAL 语法** - -```sql title=Query -SELECT dateAdd('1998-06-16'::DateTime, INTERVAL 1000 nanosecond) -``` - -```response title=Response -┌─plus(CAST('199⋯osecond(1000))─┐ -│ 1998-06-16 00:00:00.000001000 │ -└───────────────────────────────┘ -``` - - -## addQuarters - -新增于:v20.1 - -在日期、日期时间或其字符串形式上增加指定数量的季度。 - -**语法** - -```sql -addQuarters(datetime, num) -``` - -**参数** - -* `datetime` — 要向其添加指定数量季度的日期或带时间的日期值。类型为 [`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) 或 [`String`](/sql-reference/data-types/string) -* `num` — 要添加的季度数。类型为 [`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) - -**返回值** - -返回在 `datetime` 上加上 `num` 个季度后的结果,类型为 [`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**示例** - -**为不同日期类型添加季度** - -```sql title=Query -WITH - toDate('2024-01-01') AS date, - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - addQuarters(date, 1) AS add_quarters_with_date, - addQuarters(date_time, 1) AS add_quarters_with_date_time, - addQuarters(date_time_string, 1) AS add_quarters_with_date_time_string -``` - -```response title=Response -┌─add_quarters_with_date─┬─add_quarters_with_date_time─┬─add_quarters_with_date_time_string─┐ -│ 2024-04-01 │ 2024-04-01 00:00:00 │ 2024-04-01 00:00:00.000 │ -└────────────────────────┴─────────────────────────────┴────────────────────────────────────┘ -``` - -**使用另一种 INTERVAL 语法** - -```sql title=Query -SELECT dateAdd('1998-06-16'::Date, INTERVAL 10 quarter) -``` - -```response title=Response -┌─plus(CAST('1⋯uarter(10))─┐ -│ 2000-12-16 │ -└──────────────────────────┘ -``` - - -## addSeconds - -自 v1.1 起引入 - -将指定数量的秒数加到日期、日期时间,或其字符串表示形式的日期/日期时间上。 - -**语法** - -```sql -addSeconds(datetime, num) -``` - -**参数** - -* `datetime` — 需要增加指定秒数的日期或日期时间。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) 或 [`String`](/sql-reference/data-types/string) -* `num` — 要增加的秒数。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) - -**返回值** - -返回在 `datetime` 的基础上增加 `num` 秒后的值,类型为 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64(3)`](/sql-reference/data-types/datetime64) - -**示例** - -**为不同日期类型增加秒数** - -```sql title=Query -WITH - toDate('2024-01-01') AS date, - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - addSeconds(date, 30) AS add_seconds_with_date, - addSeconds(date_time, 30) AS add_seconds_with_date_time, - addSeconds(date_time_string, 30) AS add_seconds_with_date_time_string -``` - -```response title=Response -┌─add_seconds_with_date─┬─add_seconds_with_date_time─┬─add_seconds_with_date_time_string─┐ -│ 2024-01-01 00:00:30 │ 2024-01-01 00:00:30 │ 2024-01-01 00:00:30.000 │ -└───────────────────────┴────────────────────────────┴───────────────────────────────────┘ -``` - -**使用另一种 INTERVAL 语法** - -```sql title=Query -SELECT dateAdd('1998-06-16'::Date, INTERVAL 10 second) -``` - -```response title=Response -┌─dateAdd('1998-06-16'::Date, INTERVAL 10 second)─┐ -│ 1998-06-16 00:00:10 │ -└─────────────────────────────────────────────────┘ -``` - - -## addTupleOfIntervals - -引入于:v22.11 - -按顺序将一个时间间隔元组加到日期或日期时间上。 - -**语法** - -```sql -addTupleOfIntervals(datetime, intervals) -``` - -**参数** - -* `datetime` — 要添加时间间隔的日期或带时间的日期。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) -* `intervals` — 要添加到 `datetime` 的时间间隔元组。[`Tuple(Interval)`](/sql-reference/data-types/tuple) - -**返回值** - -返回加上 `intervals` 后的 `date` 值,类型为 [`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**示例** - -**向日期添加时间间隔元组** - -```sql title=Query -WITH toDate('2018-01-01') AS date -SELECT addTupleOfIntervals(date, (INTERVAL 1 DAY, INTERVAL 1 MONTH, INTERVAL 1 YEAR)) -``` - -```response title=Response -┌─addTupleOfIntervals(date, (toIntervalDay(1), toIntervalMonth(1), toIntervalYear(1)))─┐ -│ 2019-02-02 │ -└──────────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## addWeeks - -引入版本:v1.1 - -向日期、日期时间或其字符串表示形式添加指定的周数。 - -**语法** - -```sql -addWeeks(datetime, num) -``` - -**参数** - -* `datetime` — 要增加指定周数的日期或日期时间。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) 或 [`String`](/sql-reference/data-types/string) -* `num` — 要增加的周数。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) - -**返回值** - -返回 `datetime` 加上 `num` 周后的结果。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**示例** - -**为不同日期类型增加周数** - -```sql title=Query -WITH - toDate('2024-01-01') AS date, - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - addWeeks(date, 5) AS add_weeks_with_date, - addWeeks(date_time, 5) AS add_weeks_with_date_time, - addWeeks(date_time_string, 5) AS add_weeks_with_date_time_string -``` - -```response title=Response -┌─add_weeks_with_date─┬─add_weeks_with_date_time─┬─add_weeks_with_date_time_string─┐ -│ 2024-02-05 │ 2024-02-05 00:00:00 │ 2024-02-05 00:00:00.000 │ -└─────────────────────┴──────────────────────────┴─────────────────────────────────┘ -``` - -**使用其他 INTERVAL 语法** - -```sql title=Query -SELECT dateAdd('1998-06-16'::Date, INTERVAL 10 week) -``` - -```response title=Response -┌─plus(CAST('1⋯alWeek(10))─┐ -│ 1998-08-25 │ -└──────────────────────────┘ -``` - - -## addYears - -自 v1.1 版本引入 - -为日期、日期时间或其字符串表示形式增加指定的年数。 - -**语法** - -```sql -addYears(datetime, num) -``` - -**参数** - -* `datetime` — 要在其基础上增加指定年数的日期或带时间的日期。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) 或 [`String`](/sql-reference/data-types/string) -* `num` — 要增加的年数。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) - -**返回值** - -返回 `datetime` 加上 `num` 年后的值,类型为 [`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**示例** - -**为不同日期类型增加年份** - -```sql title=Query -WITH - toDate('2024-01-01') AS date, - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - addYears(date, 1) AS add_years_with_date, - addYears(date_time, 1) AS add_years_with_date_time, - addYears(date_time_string, 1) AS add_years_with_date_time_string -``` - -```response title=Response -┌─add_years_with_date─┬─add_years_with_date_time─┬─add_years_with_date_time_string─┐ -│ 2025-01-01 │ 2025-01-01 00:00:00 │ 2025-01-01 00:00:00.000 │ -└─────────────────────┴──────────────────────────┴─────────────────────────────────┘ -``` - -**使用另一种 INTERVAL 语法** - -```sql title=Query -SELECT dateAdd('1998-06-16'::Date, INTERVAL 10 year) -``` - -```response title=Response -┌─plus(CAST('1⋯alYear(10))─┐ -│ 2008-06-16 │ -└──────────────────────────┘ -``` - - -## age - -引入版本:v23.1 - -返回 `startdate` 和 `enddate` 之差在指定单位下的数值部分。 -该差值以 1 纳秒的精度进行计算。 - -例如,2021-12-29 与 2022-01-01 之间的差值,对天数单位为 3 天, -对月份单位为 0 个月,对年份单位为 0 年。 - -作为 `age` 的替代方案,参见函数 [`dateDiff`](#dateDiff)。 - -**语法** - -```sql -age('unit', startdate, enddate[, timezone]) -``` - -**参数** - -* `unit` — 结果的时间间隔单位类型。 - -| Unit | Possible values | -| ----------- | ---------------------------------------- | -| nanosecond | `nanosecond`, `nanoseconds`, `ns` | -| microsecond | `microsecond`, `microseconds`, `us`, `u` | -| millisecond | `millisecond`, `milliseconds`, `ms` | -| second | `second`, `seconds`, `ss`, `s` | -| minute | `minute`, `minutes`, `mi`, `n` | -| hour | `hour`, `hours`, `hh`, `h` | -| day | `day`, `days`, `dd`, `d` | -| week | `week`, `weeks`, `wk`, `ww` | -| month | `month`, `months`, `mm`, `m` | -| quarter | `quarter`, `quarters`, `qq`, `q` | -| year | `year`, `years`, `yyyy`, `yy` | - -* `startdate` — 要减去的第一个时间值(减数)。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) -* `enddate` — 要从中减去的第二个时间值(被减数)。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) -* `timezone` — 可选。时区名称。如果指定,则同时应用于 `startdate` 和 `enddate`。如果未指定,则使用 `startdate` 和 `enddate` 自身的时区。如果二者不相同,则结果未定义。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回用 `unit` 表示的 `enddate` 和 `startdate` 之间的差值。[`Int32`](/sql-reference/data-types/int-uint) - -**示例** - -**按小时计算年龄** - -```sql title=Query -SELECT age('hour', toDateTime('2018-01-01 22:30:00'), toDateTime('2018-01-02 23:00:00')) -``` - -```response title=Response -┌─age('hour', toDateTime('2018-01-01 22:30:00'), toDateTime('2018-01-02 23:00:00'))─┐ -│ 24 │ -└───────────────────────────────────────────────────────────────────────────────────┘ -``` - -**按不同单位计算年龄** - -```sql title=Query -SELECT - toDate('2022-01-01') AS e, - toDate('2021-12-29') AS s, - age('day', s, e) AS day_age, - age('month', s, e) AS month_age, - age('year', s, e) AS year_age -``` - -```response title=Response -┌──────────e─┬──────────s─┬─day_age─┬─month_age─┬─year_age─┐ -│ 2022-01-01 │ 2021-12-29 │ 3 │ 0 │ 0 │ -└────────────┴────────────┴─────────┴───────────┴──────────┘ -``` - - -## changeDay - -自 v24.7 引入 - -更改日期或日期时间值中的“日”部分。 - -**语法** - -```sql -changeDay(date_or_datetime, value) -``` - -**参数** - -* `date_or_datetime` — 要修改的值。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) -* `value` — 新的值。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回与 `date_or_datetime` 类型相同、且其日期中的“日”部分已被修改的值。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**示例** - -**用法示例** - -```sql title=Query -SELECT changeDay('2024-01-31'::DateTime, 15) -``` - -```response title=Response -2024-01-15 00:00:00 -``` - - -## changeHour - -自 v24.7 起引入 - -更改日期或日期时间值的小时部分。 - -**语法** - -```sql -changeHour(date_or_datetime, value) -``` - -**参数** - -* `date_or_datetime` — 要修改的值。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) -* `value` — 新值。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回与 `date_or_datetime` 类型相同、但已修改小时部分的值。[`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**示例** - -**用法示例** - -```sql title=Query -SELECT changeHour('2024-01-01 12:00:00'::DateTime, 5) -``` - -```response title=Response -2024-01-01 05:00:00 -``` - - -## changeMinute - -引入于:v24.7 - -更改 `date` 或 `date time` 的分钟部分。 - -**语法** - -```sql -changeMinute(date_or_datetime, value) -``` - -**参数** - -* `date_or_datetime` — 要更改的值。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) -* `value` — 新值。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回与 `date_or_datetime` 类型相同、但分钟部分已被修改的值。[`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**示例** - -**使用示例** - -```sql title=Query -SELECT changeMinute('2024-01-01 12:30:00'::DateTime, 45) -``` - -```response title=Response -2024-01-01 12:45:00 -``` - - -## changeMonth - -引入版本:v24.7 - -更改日期或日期时间的月份部分。 - -**语法** - -```sql -changeMonth(date_or_datetime, value) -``` - -**参数** - -* `date_or_datetime` — 要修改的值。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) -* `value` — 新的数值。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回与 `date_or_datetime` 类型相同、但月份部分已被修改的值。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**示例** - -**使用示例** - -```sql title=Query -SELECT changeMonth('2024-01-01'::DateTime, 12) -``` - -```response title=Response -2024-12-01 00:00:00 -``` - - -## changeSecond - -自 v24.7 版本引入 - -更改日期或日期时间的秒部分。 - -**语法** - -```sql -changeSecond(date_or_datetime, value) -``` - -**参数** - -* `date_or_datetime` — 要修改的值。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) -* `value` — 新的值。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回一个与 `date_or_datetime` 类型相同但秒部分已被修改的值。[`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**示例** - -**用法示例** - -```sql title=Query -SELECT changeSecond('2024-01-01 12:30:45'::DateTime, 15) -``` - -```response title=Response -2024-01-01 12:30:15 -``` - - -## changeYear - -自 v24.7 起引入 - -修改日期或日期时间的年份部分。 - -**语法** - -```sql -changeYear(date_or_datetime, value) -``` - -**参数** - -* `date_or_datetime` — 要更改的值。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) -* `value` — 新的值。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回与 `date_or_datetime` 类型相同、但年份部分已修改的值。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**示例** - -**用法示例** - -```sql title=Query -SELECT changeYear('2024-01-01'::DateTime, 2023) -``` - -```response title=Response -2023-01-01 00:00:00 -``` - - -## dateDiff - -自 v23.4 引入 - -返回在 `startdate` 和 `enddate` 之间跨越的指定 `unit` 边界的数量。 -差值是使用相对单位计算的。例如,2021-12-29 和 2022-01-01 之间的差值,在单位为 day 时是 3 天 -(参见 [`toRelativeDayNum`](#toRelativeDayNum)),在单位为 month 时是 1 个月(参见 [`toRelativeMonthNum`](#toRelativeMonthNum)),在单位为 year 时是 1 年 -(参见 [`toRelativeYearNum`](#toRelativeYearNum))。 - -如果指定的单位是 `week`,则 `dateDiff` 认为一周从星期一开始。 -请注意,此行为不同于函数 `toWeek()`,后者默认一周从星期日开始。 - -如需 `dateDiff` 的替代函数,请参见 [`age`](#age)。 - -**语法** - -```sql -dateDiff(unit, startdate, enddate[, timezone]) -``` - -**别名**: `timestampDiff`, `TIMESTAMP_DIFF`, `DATE_DIFF`, `date_diff`, `timestamp_diff` - -**参数** - -* `unit` — 结果所使用的时间间隔单位类型。 - -| 单位 | 可选值 | -| ----------- | ---------------------------------------- | -| nanosecond | `nanosecond`, `nanoseconds`, `ns` | -| microsecond | `microsecond`, `microseconds`, `us`, `u` | -| millisecond | `millisecond`, `milliseconds`, `ms` | -| second | `second`, `seconds`, `ss`, `s` | -| minute | `minute`, `minutes`, `mi`, `n` | -| hour | `hour`, `hours`, `hh`, `h` | -| day | `day`, `days`, `dd`, `d` | -| week | `week`, `weeks`, `wk`, `ww` | -| month | `month`, `months`, `mm`, `m` | -| quarter | `quarter`, `quarters`, `qq`, `q` | -| year | `year`, `years`, `yyyy`, `yy` | - -* `startdate` — 被减去的第一个时间值(减数)。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) -* `enddate` — 用来进行减法运算的第二个时间值(被减数)。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) -* `timezone` — 可选。时区名称。如果指定,则同时应用于 `startdate` 和 `enddate`。如果未指定,则使用 `startdate` 和 `enddate` 自身的时区。如果二者时区不同,则结果未定义。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回用 `unit` 表达的 `enddate` 与 `startdate` 之间的差值。[`Int64`](/sql-reference/data-types/int-uint) - -**示例** - -**按小时计算日期差** - -```sql title=Query -SELECT dateDiff('hour', toDateTime('2018-01-01 22:00:00'), toDateTime('2018-01-02 23:00:00')) AS res -``` - -```response title=Response -┌─res─┐ -│ 25 │ -└─────┘ -``` - -**以不同单位计算日期间隔** - -```sql title=Query -SELECT - toDate('2022-01-01') AS e, - toDate('2021-12-29') AS s, - dateDiff('day', s, e) AS day_diff, - dateDiff('month', s, e) AS month_diff, - dateDiff('year', s, e) AS year_diff -``` - -```response title=Response -┌──────────e─┬──────────s─┬─day_diff─┬─month_diff─┬─year_diff─┐ -│ 2022-01-01 │ 2021-12-29 │ 3 │ 1 │ 1 │ -└────────────┴────────────┴──────────┴────────────┴───────────┘ -``` - - -## dateName - -自 v21.7 起引入 - -返回日期的指定部分。 - -可选值: - -* 'year' -* 'quarter' -* 'month' -* 'week' -* 'dayofyear' -* 'day' -* 'weekday' -* 'hour' -* 'minute' -* 'second' - -**语法** - -```sql -dateName(date_part, date[, timezone]) -``` - -**参数** - -* `date_part` — 要提取的日期部分。[`String`](/sql-reference/data-types/string) -* `datetime` — 日期或日期时间值。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) -* `timezone` — 可选。时区。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回指定的日期部分。[`String`](/sql-reference/data-types/string) - -**示例** - -**提取不同的日期部分** - -```sql title=Query -WITH toDateTime('2021-04-14 11:22:33') AS date_value -SELECT - dateName('year', date_value), - dateName('month', date_value), - dateName('day', date_value) -``` - -```response title=Response -┌─dateName('year', date_value)─┬─dateName('month', date_value)─┬─dateName('day', date_value)─┐ -│ 2021 │ April │ 14 │ -└──────────────────────────────┴───────────────────────────────┴─────────────────────────────┘ -``` - - -## dateTrunc - -自 v20.8 版本引入 - -将日期和时间值截断到指定的日期部分。 - -**语法** - -```sql -dateTrunc(unit, datetime[, timezone]) -``` - -**别名**: `DATE_TRUNC` - -**参数** - -* `unit` — - 截断结果所使用的时间间隔类型。`unit` 参数不区分大小写。 - | Unit | 兼容性 | - | -------------------------------------------- | ---------------- | - | `nanosecond` | 仅与 DateTime64 兼容 | - | `microsecond` | 仅与 DateTime64 兼容 | - | `millisecond` | 仅与 DateTime64 兼容 | - | `second` | | - | `minute` | | - | `hour` | | - | `day` | | - | `week` | | - | `month` | | - | `quarter` | | - | `year` | | - | [`String`](/sql-reference/data-types/string) | | -* `datetime` — 日期和时间。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) -* `timezone` — 可选。返回值使用的时区名称。如果未指定,则函数使用 `datetime` 参数的时区。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回截断后的日期时间值。 - -| Unit 参数 | `datetime` 参数 | 返回类型 | -| -------------------------- | ------------------------------------------------ | ------------------------------------------------------------------------------------- | -| Year, Quarter, Month, Week | `Date32` or `DateTime64` or `Date` or `DateTime` | [`Date32`](../data-types/date32.md) 或 [`Date`](../data-types/date.md) | -| Day, Hour, Minute, Second | `Date32`, `DateTime64`, `Date`, or `DateTime` | [`DateTime64`](../data-types/datetime64.md) 或 [`DateTime`](../data-types/datetime.md) | -| Millisecond, Microsecond, | Any | [`DateTime64`](../data-types/datetime64.md) | -| Nanosecond | | 精度(scale)为 3、6 或 9 | - -**示例** - -**不带时区的截断** - -```sql title=Query -SELECT now(), dateTrunc('hour', now()); -``` - -```response title=Response -┌───────────────now()─┬─dateTrunc('hour', now())──┐ -│ 2020-09-28 10:40:45 │ 2020-09-28 10:00:00 │ -└─────────────────────┴───────────────────────────┘ -``` - -**按指定时区进行截断** - -```sql title=Query -SELECT now(), dateTrunc('hour', now(), 'Asia/Istanbul'); -``` - -```response title=Response -┌───────────────now()─┬─dateTrunc('hour', now(), 'Asia/Istanbul')──┐ -│ 2020-09-28 10:46:26 │ 2020-09-28 13:00:00 │ -└─────────────────────┴────────────────────────────────────────────┘ -``` - - -## formatDateTime - -引入于:v1.1 - -根据给定的格式字符串格式化日期或日期时间。`format` 必须是常量表达式,因此同一个结果列中不能使用多种不同的格式。 - -`formatDateTime` 使用 MySQL 的日期时间格式样式,参见 [MySQL 文档](https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_date-format)。 - -该函数的反向操作是 [`parseDateTime`](/sql-reference/functions/type-conversion-functions#parsedatetime)。 - -通过占位符,你可以为输出字符串定义格式模板。 -下表中的示例列展示了对 `2018-01-02 22:33:44` 的格式化结果。 - -**占位符说明:** - -| Placeholder | 描述 | 示例 | -| ----------- | ------------------------------------ | ---------- | -| %a | 缩写的星期名称(Mon-Sun) | Mon | -| %b | 缩写的月份名称(Jan-Dec) | Jan | -| %c | 以整数表示的月份(01-12) | 01 | -| %C | 年份除以 100 并向下取整为整数(00-99) | 20 | -| %d | 月中的日期,零填充(01-31) | 02 | -| %D | 短格式 MM/DD/YY 日期,等价于 %m/%d/%y | 01/02/18 | -| %e | 月中的日期,空格填充(1-31) | 2 | -| %f | 小数秒 | 123456 | -| %F | 短格式 YYYY-MM-DD 日期,等价于 %Y-%m-%d | 2018-01-02 | -| %g | 与 ISO 8601 对齐的两位数年份格式 | 18 | -| %G | ISO 周序号使用的四位数年份格式 | 2018 | -| %h | 12 小时制的小时(01-12) | 09 | -| %H | 24 小时制的小时(00-23) | 22 | -| %i | 分钟(00-59) | 33 | -| %I | 12 小时制的小时(01-12) | 10 | -| %j | 一年中的第几天(001-366) | 002 | -| %k | 24 小时制的小时(00-23) | 14 | -| %l | 12 小时制的小时(01-12) | 09 | -| %m | 以整数表示的月份(01-12) | 01 | -| %M | 完整的月份名称(January-December) | January | -| %n | 换行符 | | -| %p | AM 或 PM 标识 | PM | -| %Q | 季度(1-4) | 1 | -| %r | 12 小时制 HH:MM AM/PM 时间,等价于 %h:%i %p | 10:30 PM | -| %R | 24 小时制 HH:MM 时间,等价于 %H:%i | 22:33 | -| %s | 秒(00-59) | 44 | -| %S | 秒(00-59) | 44 | -| %t | 水平制表符 | | -| %T | ISO 8601 时间格式(HH:MM:SS),等价于 %H:%i:%S | 22:33:44 | -| %u | ISO 8601 星期几编号,星期一为 1(1-7) | 2 | -| %V | ISO 8601 周序号(01-53) | 01 | -| %w | 星期几的整数编号,星期日为 0(0-6) | 2 | -| %W | 完整的星期名称(Monday-Sunday) | Monday | -| %y | 年份的后两位数字(00-99) | 18 | -| %Y | 年份 | 2018 | -| %z | 与 UTC 的时差,格式为 +HHMM 或 -HHMM | -0500 | -| %% | 字符 % | % | - -* 在 ClickHouse 早于 v23.4 的版本中,如果被格式化的值是 Date、Date32 或 DateTime(不含小数秒),或精度为 0 的 DateTime64,则 `%f` 输出单个零(0)。 -* 在 ClickHouse 早于 v25.1 的版本中,`%f` 输出的位数等于 DateTime64 的小数精度,而不是固定的 6 位。 -* 在 ClickHouse 早于 v23.4 的版本中,`%M` 输出的是分钟(00-59),而不是完整的月份名称(January-December)。 - -**语法** - -```sql -formatDateTime(datetime, format[, timezone]) -``` - -**别名**:`DATE_FORMAT` - -**参数** - - -* `datetime` — 要格式化的日期或日期时间。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) -* `format` — 带有占位字段的格式字符串。[`String`](/sql-reference/data-types/string) -* `timezone` — 可选。用于格式化时间的时区名称。[`String`](/sql-reference/data-types/string) - -**返回值** - -按照指定的格式返回日期和时间值。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用年份占位符格式化日期** - -```sql title=Query -SELECT formatDateTime(toDate('2010-01-04'), '%g') -``` - -```response title=Response -┌─formatDateTime(toDate('2010-01-04'), '%g')─┐ -│ 10 │ -└────────────────────────────────────────────┘ -``` - -**格式化带小数秒的 DateTime64** - -```sql title=Query -SELECT formatDateTime(toDateTime64('2010-01-04 12:34:56.123456', 7), '%f') -``` - -```response title=Response -┌─formatDateTime(toDateTime64('2010-01-04 12:34:56.123456', 7), '%f')─┐ -│ 1234560 │ -└─────────────────────────────────────────────────────────────────────┘ -``` - -**按时区格式化** - -```sql title=Query -SELECT - now() AS ts, - time_zone, - formatDateTime(ts, '%T', time_zone) AS str_tz_time -FROM system.time_zones -WHERE time_zone LIKE 'Europe%' -LIMIT 10 -``` - -```response title=Response -┌──────────────────ts─┬─time_zone─────────┬─str_tz_time─┐ -│ 2023-09-08 19:13:40 │ Europe/Amsterdam │ 21:13:40 │ -│ 2023-09-08 19:13:40 │ Europe/Andorra │ 21:13:40 │ -│ 2023-09-08 19:13:40 │ Europe/Astrakhan │ 23:13:40 │ -│ 2023-09-08 19:13:40 │ Europe/Athens │ 22:13:40 │ -│ 2023-09-08 19:13:40 │ Europe/Belfast │ 20:13:40 │ -│ 2023-09-08 19:13:40 │ Europe/Belgrade │ 21:13:40 │ -│ 2023-09-08 19:13:40 │ Europe/Berlin │ 21:13:40 │ -│ 2023-09-08 19:13:40 │ Europe/Bratislava │ 21:13:40 │ -│ 2023-09-08 19:13:40 │ Europe/Brussels │ 21:13:40 │ -│ 2023-09-08 19:13:40 │ Europe/Bucharest │ 22:13:40 │ -└─────────────────────┴───────────────────┴─────────────┘ -``` - - -## formatDateTimeInJodaSyntax - -引入版本:v20.1 - -与 `formatDateTime` 类似,但会使用 Joda 风格而不是 MySQL 风格格式化日期时间。请参考 [Joda Time 文档](https://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormat.html)。 - -此函数的反向操作为 [`parseDateTimeInJodaSyntax`](/sql-reference/functions/type-conversion-functions#parsedatetimeinjodasyntax)。 - -通过使用替换字段,你可以为结果字符串定义一个模式。 - -**替换字段:** - -| 占位符 | 描述 | 展示形式 | 示例 | -| ---------- | ----------------- | ---- | -------------------------- | -| G | 纪元 | 文本 | AD | -| C | 纪元的世纪 (>=0) | 数字 | 20 | -| Y | 纪元年份 (>=0) | 年 | 1996 | -| x | weekyear(尚不支持) | 年 | 1996 | -| w | weekyear 的周(尚不支持) | 数字 | 27 | -| e | 一周中的第几天 | 数字 | 2 | -| E | 一周中的星期 | 文本 | Tuesday; Tue | -| y | 年 | 年 | 1996 | -| D | 一年中的第几天 | 数字 | 189 | -| M | 一年中的月份 | 月 | July; Jul; 07 | -| d | 一个月中的第几天 | 数字 | 10 | -| a | 上下午 | 文本 | PM | -| K | 上下午中的小时 (0~11) | 数字 | 0 | -| h | 上下午中的时钟小时 (1~12) | 数字 | 12 | -| H | 一天中的小时 (0~23) | 数字 | 0 | -| k | 一天中的时钟小时 (1~24) | 数字 | 24 | -| m | 一小时中的分钟 | 数字 | 30 | -| s | 一分钟中的秒 | 数字 | 55 | -| S | 秒的小数部分 | 数字 | 978 | -| z | 时区 | 文本 | Eastern Standard Time; EST | -| Z | 时区偏移量 | 偏移量 | -0800; -0812 | -| ' | 文本转义 | 分隔符 | | -| '' | 单引号 | 字面量 | ' | - -**语法** - -```sql -formatDateTimeInJodaSyntax(datetime, format[, timezone]) -``` - -**参数** - -* `datetime` — 要格式化的日期或日期时间值。[`DateTime`](/sql-reference/data-types/datetime) 或 [`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime64`](/sql-reference/data-types/datetime64) -* `format` — 含有 Joda 风格占位符的格式字符串。[`String`](/sql-reference/data-types/string) -* `timezone` — 可选。用于格式化时间的时区名称。[`String`](/sql-reference/data-types/string) - -**返回值** - -根据指定的格式返回时间和日期值。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用 Joda 语法格式化日期时间** - -```sql title=Query -SELECT formatDateTimeInJodaSyntax(toDateTime('2010-01-04 12:34:56'), 'yyyy-MM-dd HH:mm:ss') -``` - -```response title=Response -┌─formatDateTimeInJodaSyntax(toDateTime('2010-01-04 12:34:56'), 'yyyy-MM-dd HH:mm:ss')─┐ -│ 2010-01-04 12:34:56 │ -└─────────────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## fromDaysSinceYearZero - -引入于:v23.11 - -对于给定的自[公元 0000 年 1 月 1 日](https://en.wikipedia.org/wiki/Year_zero)以来经过的天数,返回在 [ISO 8601 定义的推前公历(proleptic Gregorian calendar)](https://en.wikipedia.org/wiki/Gregorian_calendar#Proleptic_Gregorian_calendar)中的对应日期。 - -该计算方式与 MySQL 的 `FROM_DAYS()` 函数相同。如果结果无法用 [Date](../data-types/date.md) 类型的取值范围表示,则行为未定义。 - -**语法** - -```sql -fromDaysSinceYearZero(days) -``` - -**别名**:`FROM_DAYS` - -**参数** - -* `days` — 自第 0 年起经过的天数。[`UInt32`](/sql-reference/data-types/int-uint) - -**返回值** - -返回自第 0 年起经过指定天数所对应的日期。[`Date`](/sql-reference/data-types/date) - -**示例** - -**将自第 0 年起的天数转换为日期** - -```sql title=Query -SELECT -fromDaysSinceYearZero(739136) AS date1, -fromDaysSinceYearZero(toDaysSinceYearZero(toDate('2023-09-08'))) AS date2 -``` - -```response title=Response -┌──────date1─┬──────date2─┐ -│ 2023-09-08 │ 2023-09-08 │ -└────────────┴────────────┘ -``` - - -## fromDaysSinceYearZero32 - -引入于:v23.11 - -对于自公元[0000 年 1 月 1 日](https://en.wikipedia.org/wiki/Year_zero)起经过的给定天数,返回在 [ISO 8601 定义的前推公历](https://en.wikipedia.org/wiki/Gregorian_calendar#Proleptic_Gregorian_calendar)中的对应日期。 -该计算方式与 MySQL 中的 `FROM_DAYS()` 函数相同。如果结果无法在 [`Date32`](../data-types/date32.md) 类型的取值范围内表示,则其行为未定义。 - -**语法** - -```sql -fromDaysSinceYearZero32(days) -``` - -**参数** - -* `days` — 自公元 0 年以来经过的天数。[`UInt32`](/sql-reference/data-types/int-uint) - -**返回值** - -返回与自公元 0 年以来经过的天数相对应的日期。[`Date32`](/sql-reference/data-types/date32) - -**示例** - -**将自公元 0 年以来的天数转换为日期** - -```sql title=Query -SELECT -fromDaysSinceYearZero32(739136) AS date1, -fromDaysSinceYearZero32(toDaysSinceYearZero(toDate('2023-09-08'))) AS date2 -``` - -```response title=Response -┌──────date1─┬──────date2─┐ -│ 2023-09-08 │ 2023-09-08 │ -└────────────┴────────────┘ -``` - - -## fromModifiedJulianDay - -自 v21.1 起引入 - -将一个[修正儒略日](https://en.wikipedia.org/wiki/Julian_day#Variants)日数转换为[前推格里高利历](https://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar)中的文本日期,格式为 `YYYY-MM-DD`。该函数支持的日数范围为 `-678941` 到 `2973483`(分别表示 0000-01-01 和 9999-12-31)。如果日数超出该范围,将抛出异常。 - -**语法** - -```sql -fromModifiedJulianDay(day) -``` - -**参数** - -* `day` — 修正儒略日(Modified Julian Day)数值。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回日期的文本表示形式。[`String`](/sql-reference/data-types/string) - -**示例** - -**将修正儒略日转换为日期** - -```sql title=Query -SELECT fromModifiedJulianDay(58849) -``` - -```response title=Response -┌─fromModifiedJulianDay(58849)─┐ -│ 2020-01-01 │ -└──────────────────────────────┘ -``` - - -## fromModifiedJulianDayOrNull - -引入于:v21.1 - -类似于 [`fromModifiedJulianDay()`](#fromModifiedJulianDay),但不会抛出异常,而是返回 `NULL`。 - -**语法** - -```sql -fromModifiedJulianDayOrNull(day) -``` - -**参数** - -* `day` — 修正儒略日数值。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -当 `day` 参数有效时,返回日期的文本形式,否则返回 `null`。[`Nullable(String)`](/sql-reference/data-types/nullable) - -**示例** - -**将修正儒略日转换为日期并处理空值** - -```sql title=Query -SELECT fromModifiedJulianDayOrNull(58849); -SELECT fromModifiedJulianDayOrNull(60000000); -- 无效参数,返回 NULL -``` - -```response title=Response -┌─fromModified⋯Null(58849)─┐ -│ 2020-01-01 │ -└──────────────────────────┘ -┌─fromModified⋯l(60000000)─┐ -│ ᴺᵁᴸᴸ │ -└──────────────────────────┘ -``` - - -## fromUTCTimestamp - -自 v22.1 起提供 - -将 UTC 时区的日期或日期时间值转换为指定时区的日期或日期时间值。此函数主要用于与 Apache Spark 和类似框架的兼容性。 - -**语法** - -```sql -fromUTCTimestamp(datetime, time_zone) -``` - -**别名**: `from_utc_timestamp` - -**参数** - -* `datetime` — 一个日期或日期时间的常量值或表达式。[`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) -* `time_zone` — 表示时区的 `String` 类型常量值或表达式。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回指定时区下的 DateTime/DateTime64 值。[`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**示例** - -**将 UTC 时间转换为指定时区的时间** - -```sql title=Query -SELECT fromUTCTimestamp(toDateTime64('2023-03-16 10:00:00', 3), 'Asia/Shanghai') -``` - -```response title=Response -┌─fromUTCTimestamp(toDateTime64('2023-03-16 10:00:00',3), 'Asia/Shanghai')─┐ -│ 2023-03-16 18:00:00.000 │ -└─────────────────────────────────────────────────────────────────────────┘ -``` - - -## fromUnixTimestamp - -引入版本:v20.8 - -此函数将 Unix 时间戳转换为日历日期和一天中的时间。 - -可以以两种方式调用: - -* 当传入一个类型为 [`Integer`](../data-types/int-uint.md) 的单个参数时,它返回类型为 [`DateTime`](../data-types/datetime.md) 的值,其行为类似于 [`toDateTime`](../../sql-reference/functions/type-conversion-functions.md#todatetime)。 -* 当传入两个或三个参数时,其中第一个参数是类型为 [`Integer`](../data-types/int-uint.md)、[`Date`](../data-types/date.md)、[`Date32`](../data-types/date32.md)、[`DateTime`](../data-types/datetime.md) 或 [`DateTime64`](../data-types/datetime64.md) 的值,第二个参数是常量格式字符串,第三个参数是可选的常量时区字符串,函数返回类型为 [`String`](../data-types/string.md) 的值,其行为类似于 [`formatDateTime`](#formatDateTime)。 - 在这种情况下,使用 [MySQL 的 datetime 格式](https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_date-format)。 - -**语法** - -```sql -fromUnixTimestamp(timestamp) -fromUnixTimestamp(timestamp[, format[, timezone]]) -``` - -**别名**:`FROM_UNIXTIME` - -**参数** - -* `timestamp` — Unix 时间戳或日期/日期时间值。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) -* `format` — 可选。用于控制输出格式的常量格式字符串。[`String`](/sql-reference/data-types/string) -* `timezone` — 可选。表示时区的常量字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -当以一个参数调用时,返回该时间戳对应的 `DateTime`;当以两个或三个参数调用时,返回 `String`。[`DateTime`](/sql-reference/data-types/datetime) 或 [`String`](/sql-reference/data-types/string) - -**示例** - -**将 Unix 时间戳转换为 DateTime** - -```sql title=Query -SELECT fromUnixTimestamp(423543535) -``` - -```response title=Response -┌─fromUnixTimestamp(423543535)─┐ -│ 1983-06-04 10:58:55 │ -└──────────────────────────────┘ -``` - -**按格式转换 Unix 时间戳** - -```sql title=Query -SELECT fromUnixTimestamp(1234334543, '%Y-%m-%d %R:%S') AS DateTime -``` - -```response title=Response -┌─DateTime────────────┐ -│ 2009-02-11 14:42:23 │ -└─────────────────────┘ -``` - - -## fromUnixTimestampInJodaSyntax - -自 v23.1 引入 - -此函数将 Unix 时间戳转换为日历日期和一天中的时间。 - -它可以通过两种方式调用: - -当只传入一个 [`Integer`](../data-types/int-uint.md) 类型的参数时,函数返回 [`DateTime`](../data-types/datetime.md) 类型的值,其行为等同于 [`toDateTime`](../../sql-reference/functions/type-conversion-functions.md#todatetime)。 - -当传入两个或三个参数时,其中第一个参数为 [`Integer`](../data-types/int-uint.md)、[`Date`](../data-types/date.md)、[`Date32`](../data-types/date32.md)、[`DateTime`](../data-types/datetime.md) 或 [`DateTime64`](../data-types/datetime64.md) 类型的值,第二个参数为常量格式字符串,第三个参数为可选的常量时区字符串,函数返回 [`String`](../data-types/string.md) 类型的值,其行为等同于 [`formatDateTimeInJodaSyntax`](#formatDateTimeInJodaSyntax)。在这种情况下,使用的是 [Joda 日期时间格式样式](https://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormat.html)。 - -**语法** - -```sql -fromUnixTimestampInJodaSyntax(timestamp) -fromUnixTimestampInJodaSyntax(timestamp, format[, timezone]) -``` - -**参数** - -* `timestamp` — Unix 时间戳或日期/时间值。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) -* `format` — 可选。使用 Joda 语法的常量格式字符串,用于控制输出格式。[`String`](/sql-reference/data-types/string) -* `timezone` — 可选。表示时区的常量字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -使用一个参数调用时返回带时间的日期类型,使用两个或三个参数调用时返回字符串类型。[`DateTime`](/sql-reference/data-types/datetime) 或 [`String`](/sql-reference/data-types/string) - -**示例** - -**使用 Joda 格式转换 Unix 时间戳** - -```sql title=Query -SELECT fromUnixTimestampInJodaSyntax(1234334543, 'yyyy-MM-dd HH:mm:ss', 'UTC') AS DateTime -``` - -```response title=Response -┌─DateTime────────────┐ -│ 2009-02-11 06:42:23 │ -└─────────────────────┘ -``` - - -## makeDate - -引入版本:v22.6 - -根据以下两种方式之一创建一个 `Date`: - -* 年、月和日 -* 年和一年中的第几天 - -**语法** - -```sql -makeDate(年, 月, 日) -makeDate(年, 年积日) -``` - -**参数** - -* `year` — 年份。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) -* `month` — 月份 (1-12)。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) -* `day` — 日期 (1-31)。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) -* `day_of_year` — 一年中的第几天 (1-365)。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) - -**返回值** - -返回由给定参数构造的 `Date` 类型值 [`Date`](/sql-reference/data-types/date) - -**示例** - -**根据 year、month、day 构造日期** - -```sql title=Query -SELECT makeDate(2023, 2, 28) AS date; -``` - -```response title=Response -┌───────date─┐ -│ 2023-02-28 │ -└────────────┘ -``` - -**由年份和一年中的第几天计算日期** - -```sql title=Query -SELECT makeDate(2023, 42) AS date; -``` - -```response title=Response -┌───────date─┐ -│ 2023-02-11 │ -└────────────┘ -``` - - -## makeDate32 - -自 v22.6 起引入 - -通过以下任一方式创建一个 `Date32` 值: - -* 年、月和日 -* 年和一年中的第几天 - -**语法** - -```sql -makeDate32(year, month, day) -makeDate32(year, day_of_year) -``` - -**参数** - -* `year` — 年份。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) -* `month` — 月份 (1-12)。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) -* `day` — 月中的日期 (1-31)。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) -* `day_of_year` — 一年中的第几天 (1-365)。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) - -**返回值** - -返回由提供的参数构造的 [`Date32`](/sql-reference/data-types/date32) 值。 - -**示例** - -**根据年、月、日构造 Date32** - -```sql title=Query -SELECT makeDate(2023, 2, 28) AS date; -``` - -```response title=Response -┌───────date─┐ -│ 2023-02-28 │ -└────────────┘ -``` - -**根据年份和一年中的第几天生成 Date32** - -```sql title=Query -SELECT makeDate(2023, 42) AS date; -``` - -```response title=Response -┌───────date─┐ -│ 2023-02-11 │ -└────────────┘ -``` - - -## makeDateTime - -自 v22.6 引入 - -根据年份、月份、日期、小时、分钟和秒创建一个 `DateTime`,可选指定时区。 - -**语法** - -```sql -makeDateTime(year, month, day, hour, minute, second[, timezone]) -``` - -**参数** - -* `year` — 年份。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) -* `month` — 月份(1-12)。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) -* `day` — 日期(1-31)。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) -* `hour` — 小时(0-23)。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) -* `minute` — 分钟(0-59)。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) -* `second` — 秒(0-59)。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) -* `timezone` — 时区名称。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回一个由给定参数构造的 `DateTime` 值,[`DateTime`](/sql-reference/data-types/datetime) - -**示例** - -**根据 year、month、day、hour、minute、second 构造 `DateTime`** - -```sql title=Query -SELECT makeDateTime(2023, 2, 28, 17, 12, 33) AS DateTime; -``` - -```response title=Response -┌────────────DateTime─┐ -│ 2023-02-28 17:12:33 │ -└─────────────────────┘ -``` - - -## makeDateTime64 - -自 v22.6 引入 - -根据 year、month、day、hour、minute、second 创建一个 `DateTime64` 值,可选指定小数部分、精度和时区。 - -**语法** - -```sql -makeDateTime64(年, 月, 日, 时, 分, 秒[, 小数部分[, 精度[, 时区]]]) -``` - -**参数** - -* `year` — 年。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) -* `month` — 月份(1-12)。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) -* `day` — 日(1-31)。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) -* `hour` — 小时(0-23)。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) -* `minute` — 分钟(0-59)。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) -* `second` — 秒(0-59)。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) -* `fraction` — 秒的小数部分。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) -* `precision` — 小数部分的精度(0-9)。[`UInt8`](/sql-reference/data-types/int-uint) -* `timezone` — 时区名称。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回由提供的参数构造的 `DateTime64` 值。[`DateTime64`](/sql-reference/data-types/datetime64) - -**示例** - -**从 year、month、day、hour、minute、second 构造 DateTime64** - -```sql title=Query -SELECT makeDateTime64(2023, 5, 15, 10, 30, 45, 779, 5); -``` - -```response title=Response -┌─makeDateTime64(2023, 5, 15, 10, 30, 45, 779, 5)─┐ -│ 2023-05-15 10:30:45.00779 │ -└─────────────────────────────────────────────────┘ -``` - - -## monthName - -引入版本:v22.1 - -从日期或日期时间值中返回对应的月份名称字符串。 - -**语法** - -```sql -monthName(datetime) -``` - -**参数** - -* `datetime` — 日期或日期时间。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**返回值** - -返回月份名称。[`String`](/sql-reference/data-types/string) - -**示例** - -**从日期获取月份名称** - -```sql title=Query -WITH toDateTime('2021-04-14 11:22:33') AS date_value -SELECT monthName(date_value) -``` - -```response title=Response -┌─monthName(date_value)─┐ -│ April │ -└───────────────────────┘ -``` - - -## now - -引入于:v1.1 - -返回在查询分析阶段的当前日期和时间。该函数为常量表达式。 - -**语法** - -```sql -now([timezone]) -``` - -**别名**: `current_timestamp` - -**参数** - -* `timezone` — 可选。返回值使用的时区名称。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回当前日期和时间。[`DateTime`](/sql-reference/data-types/datetime) - -**示例** - -**不指定时区的查询** - -```sql title=Query -SELECT now() -``` - -```response title=Response -┌───────────────now()─┐ -│ 2020-10-17 07:42:09 │ -└─────────────────────┘ -``` - -**按指定时区查询** - -```sql title=Query -SELECT now('Asia/Istanbul') -``` - -```response title=Response -┌─now('Asia/Istanbul')─┐ -│ 2020-10-17 10:42:23 │ -└──────────────────────┘ -``` - - -## now64 - -自 v20.1 起引入 - -返回在查询分析时刻的当前日期和时间,精度可达到秒的小数部分。该函数是一个常量表达式。 - -**语法** - -```sql -now64([scale[, timezone]]) -``` - -**参数** - -* `scale` — 可选。刻度(精度):10^-scale 秒。有效范围:[0 : 9]。通常使用:3(默认,毫秒)、6(微秒)、9(纳秒)。[`UInt8`](/sql-reference/data-types/int-uint) -* `timezone` — 可选。返回值的时区名称。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回精确到亚秒级的当前日期和时间。[`DateTime64`](/sql-reference/data-types/datetime64) - -**示例** - -**带默认精度和自定义精度的查询** - -```sql title=Query -SELECT now64(), now64(9, 'Asia/Istanbul') -``` - -```response title=Response -┌─────────────────now64()─┬─────now64(9, 'Asia/Istanbul')─┐ -│ 2022-08-21 19:34:26.196 │ 2022-08-21 22:34:26.196542766 │ -└─────────────────────────┴───────────────────────────────┘ -``` - - -## nowInBlock - -引入于:v22.8 - -返回在处理每个数据块时的当前日期和时间。与函数 [`now`](#now) 相比,它不是常量表达式,对于长时间运行的查询,不同数据块中返回的值会不同。 - -在长时间运行的 `INSERT SELECT` 查询中使用此函数来生成当前时间是合理的。 - -**语法** - -```sql -nowInBlock([timezone]) -``` - -**参数** - -* `timezone` — 可选。返回值使用的时区名称。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回在处理每个数据块时的当前日期和时间。[`DateTime`](/sql-reference/data-types/datetime) - -**示例** - -**与 now() 函数的区别** - -```sql title=Query -SELECT - now(), - nowInBlock(), - sleep(1) -FROM numbers(3) -SETTINGS max_block_size = 1 -FORMAT PrettyCompactMonoBlock -``` - -```response title=Response -┌───────────────now()─┬────────nowInBlock()─┬─sleep(1)─┐ -│ 2022-08-21 19:41:19 │ 2022-08-21 19:41:19 │ 0 │ -│ 2022-08-21 19:41:19 │ 2022-08-21 19:41:20 │ 0 │ -│ 2022-08-21 19:41:19 │ 2022-08-21 19:41:21 │ 0 │ -└─────────────────────┴─────────────────────┴──────────┘ -``` - - -## nowInBlock64 - -引入于:v25.8 - -以毫秒为单位返回在处理每个数据块时的当前日期和时间。与函数 [now64](#now64) 不同,它不是常量表达式,对于运行时间较长的查询,在不同数据块中返回的值会有所不同。 - -在运行时间较长的 INSERT SELECT 查询中,可以使用此函数生成当前时间。 - -**语法** - -```sql -nowInBlock([scale[, timezone]]) -``` - -**参数** - -* `scale` — 可选。刻度(精度):10^-precision 秒。有效范围:[0 : 9]。通常使用的值为 3(默认,毫秒)、6(微秒)、9(纳秒)。[`UInt8`](/sql-reference/data-types/int-uint) -* `timezone` — 可选。返回值所使用的时区名称。[`String`](/sql-reference/data-types/string) - -**返回值** - -以亚秒级精度返回在处理每个数据块时的当前日期和时间。[`DateTime64`](/sql-reference/data-types/datetime64) - -**示例** - -**与 now64() 函数的区别** - -```sql title=Query -SELECT - now64(), - nowInBlock64(), - sleep(1) -FROM numbers(3) -SETTINGS max_block_size = 1 -FORMAT PrettyCompactMonoBlock -``` - -```response title=Response -┌─────────────────now64()─┬──────────nowInBlock64()─┬─sleep(1)─┐ -│ 2025-07-29 17:07:29.526 │ 2025-07-29 17:07:29.534 │ 0 │ -│ 2025-07-29 17:07:29.526 │ 2025-07-29 17:07:30.535 │ 0 │ -│ 2025-07-29 17:07:29.526 │ 2025-07-29 17:07:31.535 │ 0 │ -└─────────────────────────┴─────────────────────────┴──────────┘ -``` - - -## serverTimezone - -引入于:v23.6 - -返回服务器的时区,即 [`timezone`](/operations/server-configuration-parameters/settings#timezone) 设置的值。 -如果在分布式表的上下文中执行该函数,则会生成一个普通列,其值分别对应各个分片。否则,它会返回一个常量值。 - -**语法** - -```sql -serverTimeZone() -``` - -**别名**: `serverTimeZone` - -**参数** - -* 无 - -**返回值** - -返回服务器所在的时区,类型为 [`String`](/sql-reference/data-types/string)。 - -**示例** - -**使用示例** - -```sql title=Query -SELECT serverTimeZone() -``` - -```response title=Response -┌─serverTimeZone()─┐ -│ UTC │ -└──────────────────┘ -``` - - -## subDate - -自 v23.9 版本引入 - -从给定的日期、日期时间或字符串形式的日期或日期时间中减去时间间隔。 -如果减法结果超出该数据类型的取值范围,则结果未定义。 - -**语法** - -```sql -subDate(datetime, interval) -``` - -**参数** - -* `datetime` — 从中减去 `interval` 的日期或日期时间值。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) -* `interval` — 要减去的时间间隔值。[`Interval`](/sql-reference/data-types/int-uint) - -**返回值** - -返回通过从 `datetime` 中减去 `interval` 得到的日期或日期时间值。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**示例** - -**从日期中减去时间间隔** - -```sql title=Query -SELECT subDate(toDate('2018-01-01'), INTERVAL 3 YEAR) -``` - -```response title=Response -┌─subDate(toDate('2018-01-01'), toIntervalYear(3))─┐ -│ 2015-01-01 │ -└──────────────────────────────────────────────────┘ -``` - - -## subtractDays - -引入版本:v1.1 - -从日期、日期时间值或其字符串表示中减去指定的天数。 - -**语法** - -```sql -subtractDays(datetime, num) -``` - -**参数** - -* `datetime` — 要从中减去指定天数的日期或日期时间值。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) 或 [`String`](/sql-reference/data-types/string) -* `num` — 要减去的天数。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) - -**返回值** - -返回 `datetime` 减去 `num` 天后的值。类型为 [`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**示例** - -**对不同日期类型减去天数** - -```sql title=Query -WITH - toDate('2024-01-01') AS date, - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - subtractDays(date, 31) AS subtract_days_with_date, - subtractDays(date_time, 31) AS subtract_days_with_date_time, - subtractDays(date_time_string, 31) AS subtract_days_with_date_time_string -``` - -```response title=Response -┌─subtract_days_with_date─┬─subtract_days_with_date_time─┬─subtract_days_with_date_time_string─┐ -│ 2023-12-01 │ 2023-12-01 00:00:00 │ 2023-12-01 00:00:00.000 │ -└─────────────────────────┴──────────────────────────────┴─────────────────────────────────────┘ -``` - -**使用另一种 INTERVAL 语法** - -```sql title=Query -SELECT dateSub('1998-06-16'::Date, INTERVAL 10 day) -``` - -```response title=Response -┌─minus(CAST('⋯valDay(10))─┐ -│ 1998-06-06 │ -└──────────────────────────┘ -``` - - -## subtractHours - -引入版本:v1.1 - -从日期、日期时间或字符串形式的日期/日期时间中减去指定的小时数。 - -**语法** - -```sql -subtractHours(datetime, num) -``` - -**参数** - -* `datetime` — 要从中减去指定小时数的日期或日期时间。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) 或 [`String`](/sql-reference/data-types/string) -* `num` — 要减去的小时数数值。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) - -**返回值** - -返回 `datetime` 减去 `num` 小时后的结果,类型为 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64(3)`](/sql-reference/data-types/datetime64) - -**示例** - -**从不同日期类型中减去小时数** - -```sql title=Query -WITH - toDate('2024-01-01') AS date, - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - subtractHours(date, 12) AS subtract_hours_with_date, - subtractHours(date_time, 12) AS subtract_hours_with_date_time, - subtractHours(date_time_string, 12) AS subtract_hours_with_date_time_string -``` - -```response title=Response -┌─subtract_hours_with_date─┬─subtract_hours_with_date_time─┬─subtract_hours_with_date_time_string─┐ -│ 2023-12-31 12:00:00 │ 2023-12-31 12:00:00 │ 2023-12-31 12:00:00.000 │ -└──────────────────────────┴───────────────────────────────┴──────────────────────────────────────┘ -``` - -**使用其他 INTERVAL 语法** - -```sql title=Query -SELECT dateSub('1998-06-16'::Date, INTERVAL 10 hour) -``` - -```response title=Response -┌─minus(CAST('⋯alHour(10))─┐ -│ 1998-06-15 14:00:00 │ -└──────────────────────────┘ -``` - - -## subtractInterval - -自 v22.11 引入 - -将一个取反的间隔值加到另一个间隔或间隔元组中。 - -注意:相同类型的间隔会被合并为单个间隔。例如,如果传入 `toIntervalDay(2)` 和 `toIntervalDay(1)`,则结果为 `(1)` 而不是 `(2,1)`。 - -**语法** - -```sql -subtractInterval(interval_1, interval_2) -``` - -**参数** - -* `interval_1` — 第一个时间间隔,或由时间间隔组成的元组。[`Interval`](/sql-reference/data-types/int-uint) 或 [`Tuple(Interval)`](/sql-reference/data-types/tuple) -* `interval_2` — 要取负的第二个时间间隔。[`Interval`](/sql-reference/data-types/int-uint) - -**返回值** - -返回由时间间隔组成的元组 [`Tuple(T)`](/sql-reference/data-types/tuple) - -**示例** - -**时间间隔相减** - -```sql title=Query -SELECT subtractInterval(INTERVAL 1 DAY, INTERVAL 1 MONTH); -SELECT subtractInterval((INTERVAL 1 DAY, INTERVAL 1 YEAR), INTERVAL 1 MONTH); -SELECT subtractInterval(INTERVAL 2 DAY, INTERVAL 1 DAY); -``` - -```response title=Response -┌─subtractInterval(toIntervalDay(1), toIntervalMonth(1))─┐ -│ (1,-1) │ -└────────────────────────────────────────────────────────┘ -┌─subtractInterval((toIntervalDay(1), toIntervalYear(1)), toIntervalMonth(1))─┐ -│ (1,1,-1) │ -└─────────────────────────────────────────────────────────────────────────────┘ -┌─subtractInterval(toIntervalDay(2), toIntervalDay(1))─┐ -│ (1) │ -└──────────────────────────────────────────────────────┘ -``` - - -## subtractMicroseconds - -自 v22.6 起引入 - -从日期时间值或字符串形式的日期时间值中减去指定数量的微秒。 - -**语法** - -```sql -subtractMicroseconds(datetime, num) -``` - -**参数** - -* `datetime` — 要从中减去指定数量的微秒的日期时间值。[`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) 或 [`String`](/sql-reference/data-types/string) -* `num` — 要减去的微秒数。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) - -**返回值** - -返回 `datetime` 减去 `num` 微秒后的结果,类型为 [`DateTime64`](/sql-reference/data-types/datetime64) - -**示例** - -**从不同的日期时间类型中减去微秒** - -```sql title=Query -WITH - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - subtractMicroseconds(date_time, 1000000) AS subtract_microseconds_with_date_time, - subtractMicroseconds(date_time_string, 1000000) AS subtract_microseconds_with_date_time_string -``` - -```response title=Response -┌─subtract_microseconds_with_date_time─┬─subtract_microseconds_with_date_time_string─┐ -│ 2023-12-31 23:59:59.000000 │ 2023-12-31 23:59:59.000000 │ -└──────────────────────────────────────┴─────────────────────────────────────────────┘ -``` - -**使用另一种 INTERVAL 语法** - -```sql title=Query -SELECT dateSub('1998-06-16'::DateTime, INTERVAL 10 microsecond) -``` - -```response title=Response -┌─minus(CAST('1⋯osecond(10))─┐ -│ 1998-06-15 23:59:59.999990 │ -└────────────────────────────┘ -``` - - -## subtractMilliseconds - -自 v22.6 起引入 - -从日期时间值或其字符串形式中减去指定的毫秒数。 - -**语法** - -```sql -subtractMilliseconds(datetime, num) -``` - -**参数** - -* `datetime` — 要从中减去指定毫秒数的日期时间值。[`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) 或 [`String`](/sql-reference/data-types/string) -* `num` — 要减去的毫秒数。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) - -**返回值** - -返回 `datetime` 减去 `num` 毫秒后的结果,类型为 [`DateTime64`](/sql-reference/data-types/datetime64) - -**示例** - -**从不同类型的日期时间值中减去毫秒数** - -```sql title=Query -WITH - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - subtractMilliseconds(date_time, 1000) AS subtract_milliseconds_with_date_time, - subtractMilliseconds(date_time_string, 1000) AS subtract_milliseconds_with_date_time_string -``` - -```response title=Response -┌─subtract_milliseconds_with_date_time─┬─subtract_milliseconds_with_date_time_string─┐ -│ 2023-12-31 23:59:59.000 │ 2023-12-31 23:59:59.000 │ -└──────────────────────────────────────┴─────────────────────────────────────────────┘ -``` - -**使用另一种 INTERVAL 语法** - -```sql title=Query -SELECT dateSub('1998-06-16'::DateTime, INTERVAL 10 millisecond) -``` - -```response title=Response -┌─minus(CAST('⋯second(10))─┐ -│ 1998-06-15 23:59:59.990 │ -└──────────────────────────┘ -``` - - -## subtractMinutes - -引入版本:v1.1 - -从日期、日期时间或其字符串表示中减去指定的分钟数。 - -**语法** - -```sql -subtractMinutes(datetime, num) -``` - -**参数** - -* `datetime` — 要从中减去指定分钟数的日期或日期时间。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) 或 [`String`](/sql-reference/data-types/string) -* `num` — 要减去的分钟数。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) - -**返回值** - -返回 `datetime` 减去 `num` 分钟后的结果,类型为 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64(3)`](/sql-reference/data-types/datetime64) - -**示例** - -**从不同日期类型中减去分钟数** - -```sql title=Query -WITH - toDate('2024-01-01') AS date, - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - subtractMinutes(date, 30) AS subtract_minutes_with_date, - subtractMinutes(date_time, 30) AS subtract_minutes_with_date_time, - subtractMinutes(date_time_string, 30) AS subtract_minutes_with_date_time_string -``` - -```response title=Response -┌─subtract_minutes_with_date─┬─subtract_minutes_with_date_time─┬─subtract_minutes_with_date_time_string─┐ -│ 2023-12-31 23:30:00 │ 2023-12-31 23:30:00 │ 2023-12-31 23:30:00.000 │ -└────────────────────────────┴─────────────────────────────────┴────────────────────────────────────────┘ -``` - -**使用另一种 INTERVAL 语法** - -```sql title=Query -SELECT dateSub('1998-06-16'::Date, INTERVAL 10 minute) -``` - -```response title=Response -┌─minus(CAST('⋯Minute(10))─┐ -│ 1998-06-15 23:50:00 │ -└──────────────────────────┘ -``` - - -## subtractMonths - -引入于:v1.1 - -从日期、日期时间或字符串编码的日期或日期时间中减去指定的月数。 - -**语法** - -```sql -subtractMonths(datetime, num) -``` - -**参数** - -* `datetime` — 要从中减去指定月数的日期或日期时间值。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) 或 [`String`](/sql-reference/data-types/string) -* `num` — 要减去的月份数。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) - -**返回值** - -返回 `datetime` 减去 `num` 个月后的结果。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**示例** - -**对不同日期类型减去月份** - -```sql title=Query -WITH - toDate('2024-01-01') AS date, - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - subtractMonths(date, 1) AS subtract_months_with_date, - subtractMonths(date_time, 1) AS subtract_months_with_date_time, - subtractMonths(date_time_string, 1) AS subtract_months_with_date_time_string -``` - -```response title=Response -┌─subtract_months_with_date─┬─subtract_months_with_date_time─┬─subtract_months_with_date_time_string─┐ -│ 2023-12-01 │ 2023-12-01 00:00:00 │ 2023-12-01 00:00:00.000 │ -└───────────────────────────┴────────────────────────────────┴───────────────────────────────────────┘ -``` - -**使用另一种 INTERVAL 语法** - -```sql title=Query -SELECT dateSub('1998-06-16'::Date, INTERVAL 10 month) -``` - -```response title=Response -┌─minus(CAST('⋯lMonth(10))─┐ -│ 1997-08-16 │ -└──────────────────────────┘ -``` - - -## subtractNanoseconds - -自 v20.1 版本引入 - -从带时间的日期或其字符串表示中减去指定数量的纳秒。 - -**语法** - -```sql -subtractNanoseconds(datetime, num) -``` - -**参数** - -* `datetime` — 要从中减去指定纳秒数的日期时间。[`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) 或 [`String`](/sql-reference/data-types/string) -* `num` — 要减去的纳秒数。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) - -**返回值** - -返回 `datetime` 减去 `num` 纳秒后的结果,类型为 [`DateTime64`](/sql-reference/data-types/datetime64) - -**示例** - -**从不同的日期时间类型中减去纳秒数** - -```sql title=Query -WITH - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - subtractNanoseconds(date_time, 1000) AS subtract_nanoseconds_with_date_time, - subtractNanoseconds(date_time_string, 1000) AS subtract_nanoseconds_with_date_time_string -``` - -```response title=Response -┌─subtract_nanoseconds_with_date_time─┬─subtract_nanoseconds_with_date_time_string─┐ -│ 2023-12-31 23:59:59.999999000 │ 2023-12-31 23:59:59.999999000 │ -└─────────────────────────────────────┴────────────────────────────────────────────┘ -``` - -**使用另一种 INTERVAL 语法** - -```sql title=Query -SELECT dateSub('1998-06-16'::DateTime, INTERVAL 10 nanosecond) -``` - -```response title=Response -┌─minus(CAST('19⋯anosecond(10))─┐ -│ 1998-06-15 23:59:59.999999990 │ -└───────────────────────────────┘ -``` - - -## subtractQuarters - -引入于:v20.1 - -从日期、日期时间或其字符串表示中减去指定数量的季度。 - -**语法** - -```sql -subtractQuarters(datetime, num) -``` - -**参数** - -* `datetime` — 要从中减去指定季度数的日期或日期时间。类型为 [`Date`](/sql-reference/data-types/date)、[`Date32`](/sql-reference/data-types/date32)、[`DateTime`](/sql-reference/data-types/datetime)、[`DateTime64`](/sql-reference/data-types/datetime64) 或 [`String`](/sql-reference/data-types/string) -* `num` — 要减去的季度数。类型为 [`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) - -**返回值** - -返回 `datetime` 减去 `num` 个季度后的结果,类型为 [`Date`](/sql-reference/data-types/date)、[`Date32`](/sql-reference/data-types/date32)、[`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**示例** - -**对不同日期类型减去季度数** - -```sql title=Query -WITH - toDate('2024-01-01') AS date, - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - subtractQuarters(date, 1) AS subtract_quarters_with_date, - subtractQuarters(date_time, 1) AS subtract_quarters_with_date_time, - subtractQuarters(date_time_string, 1) AS subtract_quarters_with_date_time_string -``` - -```response title=Response -┌─subtract_quarters_with_date─┬─subtract_quarters_with_date_time─┬─subtract_quarters_with_date_time_string─┐ -│ 2023-10-01 │ 2023-10-01 00:00:00 │ 2023-10-01 00:00:00.000 │ -└─────────────────────────────┴──────────────────────────────────┴─────────────────────────────────────────┘ -``` - -**使用另一种 INTERVAL 语法** - -```sql title=Query -SELECT dateSub('1998-06-16'::Date, INTERVAL 10 quarter) -``` - -```response title=Response -┌─minus(CAST('1⋯Quarter(10))─┐ -│ 1996-09-16 │ -└───────────────────────────┘ -``` - - -## subtractSeconds - -自 v1.1 起引入 - -从日期、日期时间或字符串编码的日期/日期时间中减去指定的秒数。 - -**语法** - -```sql -subtractSeconds(datetime, num) -``` - -**参数** - -* `datetime` — 要从中减去指定秒数的日期或日期时间。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) 或 [`String`](/sql-reference/data-types/string) -* `num` — 要减去的秒数。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) - -**返回值** - -返回 `datetime` 减去 `num` 秒后的结果,类型为 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64(3)`](/sql-reference/data-types/datetime64)。 - -**示例** - -**从不同日期/时间类型中减去秒数** - -```sql title=Query -WITH - toDate('2024-01-01') AS date, - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - subtractSeconds(date, 60) AS subtract_seconds_with_date, - subtractSeconds(date_time, 60) AS subtract_seconds_with_date_time, - subtractSeconds(date_time_string, 60) AS subtract_seconds_with_date_time_string -``` - -```response title=Response -┌─subtract_seconds_with_date─┬─subtract_seconds_with_date_time─┬─subtract_seconds_with_date_time_string─┐ -│ 2023-12-31 23:59:00 │ 2023-12-31 23:59:00 │ 2023-12-31 23:59:00.000 │ -└────────────────────────────┴─────────────────────────────────┴────────────────────────────────────────┘ -``` - -**使用另一种 INTERVAL 语法** - -```sql title=Query -SELECT dateSub('1998-06-16'::Date, INTERVAL 10 second) -``` - -```response title=Response -┌─minus(CAST('⋯Second(10))─┐ -│ 1998-06-15 23:59:50 │ -└──────────────────────────┘ -``` - - -## subtractTupleOfIntervals - -自 v22.11 引入 - -从日期或日期时间值中依次减去一个时间间隔元组中的各个间隔。 - -**语法** - -```sql -subtractTupleOfIntervals(datetime, intervals) -``` - -**参数** - -* `datetime` — 要从中减去时间间隔的日期或日期时间值。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) -* `intervals` — 要从 `datetime` 中减去的时间间隔元组。[`Tuple(Interval)`](/sql-reference/data-types/tuple) - -**返回值** - -返回已减去 `intervals` 的 `date` 值,类型为 [`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**示例** - -**从日期中减去时间间隔元组** - -```sql title=Query -WITH toDate('2018-01-01') AS date SELECT subtractTupleOfIntervals(date, (INTERVAL 1 DAY, INTERVAL 1 YEAR)) -``` - -```response title=Response -┌─subtractTupl⋯alYear(1)))─┐ -│ 2016-12-31 │ -└──────────────────────────┘ -``` - - -## subtractWeeks - -自 v1.1 起提供 - -从日期、日期时间,或字符串编码的日期/日期时间中减去指定的周数。 - -**语法** - -```sql -subtractWeeks(datetime, num) -``` - -**参数** - -* `datetime` — 要从中减去指定周数的日期或日期时间值。类型为 [`Date`](/sql-reference/data-types/date)、[`Date32`](/sql-reference/data-types/date32)、[`DateTime`](/sql-reference/data-types/datetime)、[`DateTime64`](/sql-reference/data-types/datetime64) 或 [`String`](/sql-reference/data-types/string) -* `num` — 要减去的周数。类型为 [`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) - -**返回值** - -返回 `datetime` 减去 `num` 周后的结果,类型为 [`Date`](/sql-reference/data-types/date)、[`Date32`](/sql-reference/data-types/date32)、[`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**示例** - -**对不同日期类型减去周数** - -````sql title=Query -```sql title=查询 -WITH - toDate('2024-01-01') AS date, - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - subtractWeeks(date, 1) AS subtract_weeks_with_date, - subtractWeeks(date_time, 1) AS subtract_weeks_with_date_time, - subtractWeeks(date_time_string, 1) AS subtract_weeks_with_date_time_string -``` - -```response title=响应 -``` -```` - -```response title=Response -┌─subtract_weeks_with_date─┬─subtract_weeks_with_date_time─┬─subtract_weeks_with_date_time_string─┐ -│ 2023-12-25 │ 2023-12-25 00:00:00 │ 2023-12-25 00:00:00.000 │ -└──────────────────────────┴───────────────────────────────┴──────────────────────────────────────┘ -``` - -**使用另一种 INTERVAL 语法** - -```sql title=Query -SELECT dateSub('1998-06-16'::Date, INTERVAL 10 week) -``` - -```response title=Response -┌─minus(CAST('⋯alWeek(10))─┐ -│ 1998-04-07 │ -└──────────────────────────┘ -``` - - -## subtractYears - -引入版本:v1.1 - -从日期、日期时间或其字符串表示中减去指定的年数。 - -**语法** - -```sql -subtractYears(datetime, num) -``` - -**参数** - -* `datetime` — 要从中减去指定年数的日期或日期时间值。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) 或 [`String`](/sql-reference/data-types/string) -* `num` — 要减去的年数。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) - -**返回值** - -返回 `datetime` 减去 `num` 年后的值,类型为 [`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**示例** - -**对不同日期类型减去年份** - -```sql title=Query -WITH - toDate('2024-01-01') AS date, - toDateTime('2024-01-01 00:00:00') AS date_time, - '2024-01-01 00:00:00' AS date_time_string -SELECT - subtractYears(date, 1) AS subtract_years_with_date, - subtractYears(date_time, 1) AS subtract_years_with_date_time, - subtractYears(date_time_string, 1) AS subtract_years_with_date_time_string -``` - -```response title=Response -┌─subtract_years_with_date─┬─subtract_years_with_date_time─┬─subtract_years_with_date_time_string─┐ -│ 2023-01-01 │ 2023-01-01 00:00:00 │ 2023-01-01 00:00:00.000 │ -└──────────────────────────┴───────────────────────────────┴──────────────────────────────────────┘ -``` - -**使用另一种 INTERVAL 语法** - -```sql title=Query -SELECT dateSub('1998-06-16'::Date, INTERVAL 10 year) -``` - -```response title=Response -┌─minus(CAST('⋯alYear(10))─┐ -│ 1988-06-16 │ -└──────────────────────────┘ -``` - - -## timeDiff - -引入于:v23.4 - -返回两个日期或日期时间值之间的差值(以秒为单位)。 -差值计算方式为 `enddate` - `startdate`。 - -此函数等价于 `dateDiff('second', startdate, enddate)`。 - -若要按其他单位(小时、天、月等)计算时间差,请改用 [`dateDiff`](#dateDiff) 函数。 - -**语法** - -```sql -timeDiff(startdate, enddate) -``` - -**参数** - -* `startdate` — 要减去的第一个时间值(减数)。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) -* `enddate` — 用来执行减法运算的第二个时间值(被减数)。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**返回值** - -返回 `enddate` 与 `startdate` 之间以秒为单位的差值。[`Int64`](/sql-reference/data-types/int-uint) - -**示例** - -**以秒计算时间差** - -```sql title=Query -SELECT timeDiff(toDateTime('2018-01-01 22:00:00'), toDateTime('2018-01-02 23:00:00')) AS res -``` - -```response title=Response -┌───res─┐ -│ 90000 │ -└───────┘ -``` - -**计算时间差并换算为小时** - -```sql title=Query -SELECT timeDiff(toDateTime('2018-01-01 22:00:00'), toDateTime('2018-01-02 23:00:00')) / 3600 AS hours -``` - -```response title=Response -┌─hours─┐ -│ 25 │ -└───────┘ -``` - -**等价于按秒计算的 dateDiff** - -```sql title=Query -SELECT - timeDiff(toDateTime('2021-12-29'), toDateTime('2022-01-01')) AS time_diff_result, - dateDiff('second', toDateTime('2021-12-29'), toDateTime('2022-01-01')) AS date_diff_result -``` - -```response title=Response -┌─time_diff_result─┬─date_diff_result─┐ -│ 259200 │ 259200 │ -└──────────────────┴──────────────────┘ -``` - - -## timeSlot - -引入于:v1.1 - -将时间舍入到以 30 分钟为长度的时间区间的起始时刻。 - -:::note -尽管此函数可以接受扩展类型 `Date32` 和 `DateTime64` 的值作为参数, -但如果传入超出正常范围(`Date` 为 1970 年到 2149 年 / `DateTime` 为 1970 年到 2106 年)的时间,将会产生错误结果。 -::: - -**语法** - -```sql -timeSlot(time[, time_zone]) -``` - -**参数** - -* `time` — 要舍入到半小时间隔起始时刻的时间。[`DateTime`](/sql-reference/data-types/datetime) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime64`](/sql-reference/data-types/datetime64) -* `time_zone` — 可选。表示时区的 String 类型常量值或表达式。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回按半小时间隔起始时刻舍入后的时间。[`DateTime`](/sql-reference/data-types/datetime) - -**示例** - -**将时间舍入到半小时间隔** - -```sql title=Query -SELECT timeSlot(toDateTime('2000-01-02 03:04:05', 'UTC')) -``` - -```response title=Response -┌─timeSlot(toDateTime('2000-01-02 03:04:05', 'UTC'))─┐ -│ 2000-01-02 03:00:00 │ -└────────────────────────────────────────────────────┘ -``` - - -## timeSlots - -引入于:v1.1 - -对于从 `StartTime` 开始、持续 `Duration` 秒的时间区间,该函数返回一个时间点数组,由该区间内按秒为单位、向下取整到步长为 `Size` 的时间点组成。`Size` 是可选参数,默认值为 1800(30 分钟)。 - -例如,在查找对应会话中的页面浏览记录时会用到该函数。 - -当类型为 `DateTime64` 时,返回值的小数精度(scale)可能与 `StartTime` 的精度不同,将采用所有传入参数中最高的精度。 - -**语法** - -```sql -timeSlots(StartTime, Duration[, Size]) -``` - -**参数** - -* `StartTime` — 区间的起始时间。[`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) -* `Duration` — 区间的持续时间,单位为秒。[`UInt32`](/sql-reference/data-types/int-uint) 或 [`DateTime64`](/sql-reference/data-types/datetime64) -* `Size` — 可选。时间片段的长度,单位为秒。默认值为 1800(30 分钟)。[`UInt32`](/sql-reference/data-types/int-uint) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**返回值** - -返回一个由 DateTime/DateTime64 组成的数组(返回类型与 `StartTime` 的类型一致)。对于 DateTime64,返回值的精度可能与 `StartTime` 的精度不同——会采用所有传入参数中最高的精度。[`Array(DateTime)`](/sql-reference/data-types/array) 或 [`Array(DateTime64)`](/sql-reference/data-types/array) - -**示例** - -**为一个时间区间生成时间片段** - -```sql title=Query -SELECT timeSlots(toDateTime('2012-01-01 12:20:00'), toUInt32(600)); -SELECT timeSlots(toDateTime('1980-12-12 21:01:02', 'UTC'), toUInt32(600), 299); -SELECT timeSlots(toDateTime64('1980-12-12 21:01:02.1234', 4, 'UTC'), toDecimal64(600.1, 1), toDecimal64(299, 0)) -``` - -```response title=Response -┌─timeSlots(toDateTime('2012-01-01 12:20:00'), toUInt32(600))─┐ -│ ['2012-01-01 12:00:00','2012-01-01 12:30:00'] │ -└─────────────────────────────────────────────────────────────┘ -┌─timeSlots(toDateTime('1980-12-12 21:01:02', 'UTC'), toUInt32(600), 299)─┐ -│ ['1980-12-12 20:56:13','1980-12-12 21:01:12','1980-12-12 21:06:11'] │ -└─────────────────────────────────────────────────────────────────────────┘ -┌─timeSlots(toDateTime64('1980-12-12 21:01:02.1234', 4, 'UTC'), toDecimal64(600.1, 1), toDecimal64(299, 0))─┐ -│ ['1980-12-12 20:56:13.0000','1980-12-12 21:01:12.0000','1980-12-12 21:06:11.0000'] │ -└───────────────────────────────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## timestamp - -引入于:v23.9 - -将第一个参数 `expr` 转换为类型 [`DateTime64(6)`](/sql-reference/data-types/datetime64)。 -如果提供了第二个参数 `expr_time`,则会在转换后的值上加上指定的时间。 - -**语法** - -```sql -timestamp(expr[, expr_time]) -``` - -**参数** - -* `expr` — 日期或日期时间值。[`String`](/sql-reference/data-types/string) -* `expr_time` — 可选。要加到转换结果上的时间。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回 `expr` 转换后的值,或在其基础上加上时间后的结果。[`DateTime64(6)`](/sql-reference/data-types/datetime64) - -**示例** - -**将日期字符串转换为 DateTime64(6)** - -```sql title=Query -SELECT timestamp('2023-12-31') AS ts; -``` - -```response title=Response -┌─────────────────────────ts─┐ -│ 2023-12-31 00:00:00.000000 │ -└────────────────────────────┘ -``` - -**在日期字符串中添加时间** - -```sql title=Query -SELECT timestamp('2023-12-31 12:00:00', '12:00:00.11') AS ts; -``` - -```response title=Response -┌─────────────────────────ts─┐ -│ 2024-01-01 00:00:00.110000 │ -└────────────────────────────┘ -``` - - -## timezone - -自 v21.4 起引入 - -返回当前会话的时区名称,或将时区偏移量或名称转换为规范的时区名称。 - -**语法** - -```sql -timezone() -``` - -**别名**: `timeZone` - -**参数** - -* 无。 - -**返回值** - -返回规范的时区名称,类型为 [`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT timezone() -``` - -```response title=Response -┌─timezone()───────┐ -│ Europe/Amsterdam │ -└──────────────────┘ -``` - - -## timezoneOf - -在 v21.4 中引入 - -返回 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) 值的时区名称。 - -**语法** - -```sql -timeZoneOf(datetime) -``` - -**别名**: `timeZoneOf` - -**参数** - -* `datetime` — 类型为 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) 的值。 -* `timezone` — 可选。将 `datetime` 的时区转换到的目标时区名称,类型为 [`String`](/sql-reference/data-types/string)。 - -**返回值** - -返回 `datetime` 对应的时区名称,类型为 [`String`](/sql-reference/data-types/string)。 - -**示例** - -**用法示例** - -```sql title=Query -SELECT timezoneOf(now()); -``` - -```response title=Response -┌─timezoneOf(now())─┐ -│ Europe/Amsterdam │ -└───────────────────┘ -``` - - -## timezoneOffset - -自 v21.6 引入 - -返回在指定日期和时间下,相对于 [UTC](https://en.wikipedia.org/wiki/Coordinated_Universal_Time) 的时区偏移量(以秒为单位)。\ -该函数会考虑夏令时以及历史时区变更。 - -**语法** - -```sql -timeZoneOffset(datetime) -``` - -**别名**:`timeZoneOffset` - -**参数** - -* `datetime` — 需要获取其时区偏移量的日期时间值,类型为 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**返回值** - -返回相对于 UTC 的偏移量(以秒为单位),类型为 [`Int32`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT toDateTime('2021-04-21 10:20:30', 'America/New_York') AS Time, -toTypeName(Time) AS Type, -timeZoneOffset(Time) AS Offset_in_seconds, -(Offset_in_seconds / 3600) AS Offset_in_hours; -``` - -```response title=Response -┌────────────────Time─┬─Type─────────────────────────┬─Offset_in_seconds─┬─Offset_in_hours─┐ -│ 2021-04-21 10:20:30 │ DateTime('America/New_York') │ -14400 │ -4 │ -└─────────────────────┴──────────────────────────────┴───────────────────┴─────────────────┘ -``` - - -## toDayOfMonth - -引入版本:v1.1 - -返回 `Date` 或 `DateTime` 的当月中的日(1-31)。 - -**语法** - -```sql -toDayOfMonth(datetime) -``` - -**别名**: `DAY`, `DAYOFMONTH` - -**参数** - -* `datetime` — 要从中获取“日”的日期或日期时间值。类型可以是 [`Date`](/sql-reference/data-types/date)、[`Date32`](/sql-reference/data-types/date32)、[`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**返回值** - -返回给定日期/时间的“日”(当月中的第几天),类型为 [`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT toDayOfMonth(toDateTime('2023-04-21 10:20:30')) -``` - -```response title=Response -┌─toDayOfMonth(toDateTime('2023-04-21 10:20:30'))─┐ -│ 21 │ -└─────────────────────────────────────────────────┘ -``` - - -## toDayOfWeek - -自 v1.1 起引入 - -返回 `Date` 或 `DateTime` 值在一周中的星期编号。 - -带两个参数的 `toDayOfWeek()` 形式允许指定一周是从周一还是周日开始, -以及返回值是在 0 到 6 还是 1 到 7 的范围内。 - -| 模式 | 一周的第一天 | 范围 | -| -- | ------ | -------------------------- | -| 0 | 周一 | 1-7:周一 = 1,周二 = 2,…,周日 = 7 | -| 1 | 周一 | 0-6:周一 = 0,周二 = 1,…,周日 = 6 | -| 2 | 周日 | 0-6:周日 = 0,周一 = 1,…,周六 = 6 | -| 3 | 周日 | 1-7:周日 = 1,周一 = 2,…,周六 = 7 | - -**语法** - -```sql -toDayOfWeek(datetime[, mode[, timezone]]) -``` - -**别名**: `DAYOFWEEK` - -**参数** - -* `datetime` — 要获取星期几的日期或日期时间值。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) -* `mode` — 可选。指定星期模式的整数(0-3)。如果省略,默认为 0。[`UInt8`](/sql-reference/data-types/int-uint) -* `timezone` — 可选。用于转换的时区。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回给定 `Date` 或 `DateTime` 的星期几,类型为 [`UInt8`](/sql-reference/data-types/int-uint)。 - -**示例** - -**用法示例** - -```sql title=Query --- 以下日期为 2023 年 4 月 21 日,这是一个星期五: -SELECT - toDayOfWeek(toDateTime('2023-04-21')), - toDayOfWeek(toDateTime('2023-04-21'), 1) -``` - -```response title=Response -┌─toDayOfWeek(toDateTime('2023-04-21'))─┬─toDayOfWeek(toDateTime('2023-04-21'), 1)─┐ -│ 5 │ 4 │ -└───────────────────────────────────────┴──────────────────────────────────────────┘ -``` - - -## toDayOfYear - -自 v18.4 引入 - -返回 `Date` 或 `DateTime` 值在一年中的第几天(1-366)。 - -**语法** - -```sql -toDayOfYear(datetime) -``` - -**别名**: `DAYOFYEAR` - -**参数** - -* `datetime` — 要获取其在一年中是第几天的日期或日期时间值。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**返回值** - -返回给定 Date 或 DateTime 值在一年中的第几天,返回类型为 [`UInt16`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT toDayOfYear(toDateTime('2023-04-21 10:20:30')) -``` - -```response title=Response -┌─toDayOfYear(toDateTime('2023-04-21 10:20:30'))─┐ -│ 111 │ -└────────────────────────────────────────────────┘ -``` - - -## toDaysSinceYearZero - -引入版本:v23.9 - -对于给定日期,返回自 [0000 年 1 月 1 日](https://en.wikipedia.org/wiki/Year_zero) 起经过的天数,基于 -[ISO 8601 定义的前推格里高利历(proleptic Gregorian calendar)](https://en.wikipedia.org/wiki/Gregorian_calendar#Proleptic_Gregorian_calendar)。 - -其计算方式与 MySQL 的 [`TO_DAYS`](https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_to-days) 函数相同。 - -**语法** - -```sql -toDaysSinceYearZero(date[, time_zone]) -``` - -**别名**: `TO_DAYS` - -**参数** - -* `date` — 要计算自公元 0 年起经过天数的日期或带时间的日期。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) -* `time_zone` — 时区。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回自日期 `0000-01-01` 起已经过去的天数。[`UInt32`](/sql-reference/data-types/int-uint) - -**示例** - -**计算自公元 0 年起经过的天数** - -```sql title=Query -SELECT toDaysSinceYearZero(toDate('2023-09-08')) -``` - -```response title=Response -┌─toDaysSinceYearZero(toDate('2023-09-08')))─┐ -│ 713569 │ -└────────────────────────────────────────────┘ -``` - - -## toHour - -引入于:v1.1 - -返回 `DateTime` 或 `DateTime64` 值的小时部分(0-23)。 - -**语法** - -```sql -toHour(datetime) -``` - -**别名**:`HOUR` - -**参数** - -* `datetime` — 要从中获取小时数的日期时间值。[`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**返回值** - -返回 `datetime` 的小时数(0-23)。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT toHour(toDateTime('2023-04-21 10:20:30')) -``` - -```response title=Response -┌─toHour(toDateTime('2023-04-21 10:20:30'))─┐ -│ 10 │ -└───────────────────────────────────────────┘ -``` - - -## toISOYear - -自 v18.4 起引入 - -将日期或带时间的日期转换为 ISO 年序号。 - -**语法** - -```sql -toISOYear(datetime) -``` - -**参数** - -* `datetime` — 日期或日期时间类型的值。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**返回值** - -返回将输入值转换得到的 ISO 年份。[`UInt16`](/sql-reference/data-types/int-uint) - -**示例** - -**从日期值中获取 ISO 年份** - -```sql title=Query -SELECT -toISOYear(toDate('2024/10/02')) as year1, -toISOYear(toDateTime('2024-10-02 01:30:00')) as year2 -``` - -```response title=Response -┌─week1─┬─week2─┐ -│ 40 │ 40 │ -└───────┴───────┘ -``` - - -## toLastDayOfMonth - -引入版本:v1.1 - -将日期或带时间的日期向上取整为该月的最后一天。 - -:::note -可以通过设置 [`enable_extended_results_for_datetime_functions`](/operations/settings/settings#enable_extended_results_for_datetime_functions) 来配置返回类型。 -::: - -**语法** - -```sql -toLastDayOfMonth(value) -``` - -**别名**: `LAST_DAY` - -**参数** - -* `value` — 将被向上取整到所在月份最后一天的日期或日期时间值。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**返回值** - -返回给定日期或日期时间值所在月份的最后一天的日期。[`Date`](/sql-reference/data-types/date) - -**示例** - -**向上取整到所在月份的最后一天** - -```sql title=Query -SELECT toLastDayOfMonth(toDateTime('2023-04-21 10:20:30')) -``` - -```response title=Response -┌─toLastDayOfMonth(toDateTime('2023-04-21 10:20:30'))─┐ -│ 2023-04-30 │ -└─────────────────────────────────────────────────────┘ -``` - - -## toLastDayOfWeek - -引入版本:v23.5 - -将日期或带时间的日期向上取整到最近的星期六或星期日。 - -:::note -可以通过设置 [`enable_extended_results_for_datetime_functions`](/operations/settings/settings#enable_extended_results_for_datetime_functions) 来配置返回类型。 -::: - -**语法** - -```sql -toLastDayOfWeek(datetime[, mode[, timezone]]) -``` - -**参数** - -* `datetime` — 要转换的日期或日期时间值。[`Date`](/sql-reference/data-types/date) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime64`](/sql-reference/data-types/datetime64) -* `mode` — 按照 `toWeek()` 函数中的说明确定一周的第一天。默认值为 `0`。[`UInt8`](/sql-reference/data-types/int-uint) -* `timezone` — 可选。用于转换的时区。如果未指定,则使用服务器时区。[`String`](/sql-reference/data-types/string) - -**返回值** - -根据 `mode` 参数,返回给定日期当天或之后、距离最近的周六或周日的日期。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**示例** - -**向上取整到最近的周六或周日** - -```sql title=Query -SELECT - toLastDayOfWeek(toDateTime('2023-04-21 10:20:30')), /* 星期五 */ - toLastDayOfWeek(toDateTime('2023-04-21 10:20:30'), 1), /* 星期五 */ - toLastDayOfWeek(toDate('2023-04-23')), /* 星期日 */ - toLastDayOfWeek(toDate('2023-04-23'), 1) /* 星期日 */ -FORMAT Vertical -``` - -```response title=Response -Row 1: -────── -toLastDayOfWeek(toDateTime('2023-04-21 10:20:30')): 2023-04-23 -toLastDayOfWeek(toDateTime('2023-04-21 10:20:30'), 1): 2023-04-22 -toLastDayOfWeek(toDate('2023-04-23')): 2023-04-23 -toLastDayOfWeek(toDate('2023-04-23'), 1): 2023-04-23 -``` - - -## toMillisecond - -自 v24.2 起引入 - -返回 `DateTime` 或 `DateTime64` 值的毫秒部分(0-999)。 - -**语法** - -```sql -toMillisecond(datetime) -``` - -**别名**: `MILLISECOND` - -**参数** - -* `datetime` — 要从中提取毫秒的日期时间值。[`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**返回值** - -返回 `datetime` 所在分钟中的毫秒数(0 - 59)。[`UInt16`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT toMillisecond(toDateTime64('2023-04-21 10:20:30.456', 3)); -``` - -```response title=Response -┌──toMillisecond(toDateTime64('2023-04-21 10:20:30.456', 3))─┐ -│ 456 │ -└────────────────────────────────────────────────────────────┘ -``` - - -## toMinute - -引入于:v1.1 - -返回 `Date` 或 `DateTime` 值的分钟部分(0-59)。 - -**语法** - -```sql -toMinute(datetime) -``` - -**别名**:`MINUTE` - -**参数** - -* `datetime` — 要获取分钟值的日期时间。[`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**返回值** - -返回 `datetime` 所在小时中的分钟数(0 - 59)。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT toMinute(toDateTime('2023-04-21 10:20:30')) -``` - -```response title=Response -┌─toMinute(toDateTime('2023-04-21 10:20:30'))─┐ -│ 20 │ -└─────────────────────────────────────────────┘ -``` - - -## toModifiedJulianDay - -引入于:v21.1 - -将文本形式为 `YYYY-MM-DD` 的[前推格里高利历](https://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar)日期转换为 `Int32` 类型的[修正儒略日](https://en.wikipedia.org/wiki/Julian_day#Variants)数值。该函数支持的日期范围为 `0000-01-01` 至 `9999-12-31`。如果参数无法解析为日期或日期无效,则会抛出异常。 - -**语法** - -```sql -toModifiedJulianDay(date) -``` - -**参数** - -* `date` — 字符串格式的日期。[`String`](/sql-reference/data-types/string) 或 [`FixedString`](/sql-reference/data-types/fixedstring) - -**返回值** - -返回修正儒略日数。[`Int32`](/sql-reference/data-types/int-uint) - -**示例** - -**将日期转换为修正儒略日数** - -```sql title=Query -SELECT toModifiedJulianDay('2020-01-01') -``` - -```response title=Response -┌─toModifiedJulianDay('2020-01-01')─┐ -│ 58849 │ -└───────────────────────────────────┘ -``` - - -## toModifiedJulianDayOrNull - -自 v21.1 起引入 - -类似于 [`toModifiedJulianDay()`](#toModifiedJulianDay),但不会抛出异常,而是返回 `NULL`。 - -**语法** - -```sql -toModifiedJulianDayOrNull(date) -``` - -**参数** - -* `date` — 文本形式的日期。[`String`](/sql-reference/data-types/string) 或 [`FixedString`](/sql-reference/data-types/fixedstring) - -**返回值** - -对于有效的 `date`,返回修正儒略日编号,否则返回 `null`。[`Nullable(Int32)`](/sql-reference/data-types/nullable) - -**示例** - -**将日期转换为修正儒略日并处理 null 值** - -```sql title=Query -SELECT toModifiedJulianDayOrNull('2020-01-01'); -SELECT toModifiedJulianDayOrNull('0000-00-00'); -- 无效日期,返回 NULL -``` - -```response title=Response -┌─toModifiedJu⋯020-01-01')─┐ -│ 58849 │ -└──────────────────────────┘ -┌─toModifiedJu⋯000-00-00')─┐ -│ ᴺᵁᴸᴸ │ -└──────────────────────────┘ -``` - - -## toMonday - -自 v1.1 起引入 - -将日期或带时间的日期向下取整到同一周的星期一。返回对应日期。 - -:::note -可以通过设置 [`enable_extended_results_for_datetime_functions`](/operations/settings/settings#enable_extended_results_for_datetime_functions) 来配置返回类型。 -::: - -**语法** - -```sql -toMonday(value) -``` - -**参数** - -* `value` — 要向下取整到其所在周周一的日期或带时间的日期。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**返回值** - -返回给定日期或带时间的日期所在周周一的日期。[`Date`](/sql-reference/data-types/date) - -**示例** - -**向下取整到所在周的周一** - -```sql title=Query -SELECT -toMonday(toDateTime('2023-04-21 10:20:30')), -- 星期五 -toMonday(toDate('2023-04-24')); -- 已经是星期一 -``` - -```response title=Response -┌─toMonday(toDateTime('2023-04-21 10:20:30'))─┬─toMonday(toDate('2023-04-24'))─┐ -│ 2023-04-17 │ 2023-04-24 │ -└─────────────────────────────────────────────┴────────────────────────────────┘ -``` - - -## toMonth - -引入于:v1.1 - -返回 `Date` 或 `DateTime` 值的月份部分(1-12)。 - -**语法** - -```sql -toMonth(datetime) -``` - -**别名**:`MONTH` - -**参数** - -* `datetime` — 要获取月份的日期或日期时间值。类型为 [`Date`](/sql-reference/data-types/date)、[`Date32`](/sql-reference/data-types/date32)、[`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**返回值** - -返回给定日期/时间的月份,类型为 [`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT toMonth(toDateTime('2023-04-21 10:20:30')) -``` - -```response title=Response -┌─toMonth(toDateTime('2023-04-21 10:20:30'))─┐ -│ 4 │ -└────────────────────────────────────────────┘ -``` - - -## toMonthNumSinceEpoch - -引入版本:v25.3 - -返回自 1970 年起经过的月份数 - -**语法** - -```sql -toMonthNumSinceEpoch(date) -``` - -**参数** - -* `date` — 日期或日期时间。[`Date`](/sql-reference/data-types/date) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**返回值** - -正整数 - -**示例** - -**示例** - -```sql title=Query -SELECT toMonthNumSinceEpoch(toDate('2024-10-01')) -``` - -```response title=Response -657 -``` - - -## toQuarter - -引入版本:v1.1 - -对于给定的 `Date` 或 `DateTime` 值,返回其所在年的季度(1-4)。 - -**语法** - -```sql -toQuarter(datetime) -``` - -**别名**: `QUARTER` - -**参数** - -* `datetime` — 要获取其所属季度的日期或日期时间值。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**返回值** - -返回给定日期/时间所属的季度,类型为 [`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT toQuarter(toDateTime('2023-04-21 10:20:30')) -``` - -```response title=Response -┌─toQuarter(toDateTime('2023-04-21 10:20:30'))─┐ -│ 2 │ -└──────────────────────────────────────────────┘ -``` - - -## toRelativeDayNum - -引入于:v1.1 - -将日期或日期时间转换为自过去某个固定时间点以来经过的天数。 -这一具体时间点属于实现细节,因此不建议单独使用此函数。 -该函数的主要用途是计算两个日期或日期时间之间的天数差,例如:`toRelativeDayNum(dt1) - toRelativeDayNum(dt2)`。 - -**语法** - -```sql -toRelativeDayNum(date) -``` - -**参数** - -* `date` — 日期或带时间的日期。[`Date`](/sql-reference/data-types/date) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**返回值** - -返回自某个固定参考起点以来经过的天数。[`UInt32`](/sql-reference/data-types/int-uint) - -**示例** - -**获取相对天数编号** - -```sql title=Query -SELECT toRelativeDayNum(toDate('2023-04-01')) - toRelativeDayNum(toDate('2023-01-01')) -``` - -```response title=Response -┌─minus(toRela⋯3-01-01')))─┐ -│ 90 │ -└──────────────────────────┘ -``` - - -## toRelativeHourNum - -引入版本:v1.1 - -将日期或日期时间转换为自过去某个固定时间点以来经过的小时数。 -该具体时间点属于实现细节,因此不建议单独使用此函数。 -此函数的主要用途是计算两个日期或日期时间之间的小时差,例如:`toRelativeHourNum(dt1) - toRelativeHourNum(dt2)`。 - -**语法** - -```sql -toRelativeHourNum(date) -``` - -**参数** - -* `date` — 日期或带时间的日期。[`Date`](/sql-reference/data-types/date) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**返回值** - -返回自过去某一固定参考点起算的小时数。[`UInt32`](/sql-reference/data-types/int-uint) - -**示例** - -**获取相对小时数** - -```sql title=Query -SELECT toRelativeHourNum(toDateTime('2023-01-01 12:00:00')) - toRelativeHourNum(toDateTime('2023-01-01 00:00:00')) AS hours_difference -``` - -```response title=Response -┌─hours_difference─┐ -│ 12 │ -└──────────────────┘ -``` - - -## toRelativeMinuteNum - -引入于:v1.1 - -将日期或带时间的日期转换为自某个固定的过去时间点以来经过的分钟数。 -该具体时间点属于实现细节,因此此函数并不打算作为独立函数单独使用。 -该函数的主要用途是计算两个日期或带时间的日期之间相差的分钟数,例如:`toRelativeMinuteNum(dt1) - toRelativeMinuteNum(dt2)`。 - -**语法** - -```sql -toRelativeMinuteNum(date) -``` - -**参数** - -* `date` — 日期或带时间的日期。[`Date`](/sql-reference/data-types/date) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**返回值** - -返回自过去某个固定参考点以来的分钟数。[`UInt32`](/sql-reference/data-types/int-uint) - -**示例** - -**获取相对分钟数** - -```sql title=Query -SELECT toRelativeMinuteNum(toDateTime('2023-01-01 00:30:00')) - toRelativeMinuteNum(toDateTime('2023-01-01 00:00:00')) AS minutes_difference -``` - -```response title=Response -┌─minutes_difference─┐ -│ 30 │ -└────────────────────┘ -``` - - -## toRelativeMonthNum - -自 v1.1 版本引入 - -将日期或带时间的日期转换为自过去某个固定时间点以来经过的月份数。 -这个具体时间点属于实现细节,因此不建议单独使用此函数。 -该函数的主要用途是计算两个日期或带时间的日期之间相差的月份数,例如:`toRelativeMonthNum(dt1) - toRelativeMonthNum(dt2)`。 - -**语法** - -```sql -toRelativeMonthNum(date) -``` - -**参数** - -* `date` — 日期或带时间的日期。[`Date`](/sql-reference/data-types/date) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**返回值** - -返回从过去某个固定参考点起算的月数。[`UInt32`](/sql-reference/data-types/int-uint) - -**示例** - -**获取相对月份数** - -```sql title=Query -SELECT toRelativeMonthNum(toDate('2023-04-01')) - toRelativeMonthNum(toDate('2023-01-01')) AS months_difference -``` - -```response title=Response -┌─months_difference─┐ -│ 3 │ -└───────────────────┘ -``` - - -## toRelativeQuarterNum - -引入于:v1.1 - -将日期或带时间的日期转换为自过去某个固定时间点以来经过的季度数。 -该时间点的具体取值属于实现细节,因此不建议单独使用此函数。 -该函数的主要用途是计算两个日期或带时间的日期之间相差的季度数,例如:`toRelativeQuarterNum(dt1) - toRelativeQuarterNum(dt2)`。 - -**语法** - -```sql -toRelativeQuarterNum(date) -``` - -**参数** - -* `date` — 日期或带时间的日期。[`Date`](/sql-reference/data-types/date) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**返回值** - -返回自过去某个固定参考点起算的季度数。[`UInt32`](/sql-reference/data-types/int-uint) - -**示例** - -**获取相对季度序号** - -```sql title=Query -SELECT toRelativeQuarterNum(toDate('2023-04-01')) - toRelativeQuarterNum(toDate('2023-01-01')) AS quarters_difference -``` - -```response title=Response -┌─quarters_difference─┐ -│ 1 │ -└─────────────────────┘ -``` - - -## toRelativeSecondNum - -引入版本:v1.1 - -将日期或日期时间转换为自某个固定过去时刻起已过去的秒数。 -该精确时间点属于实现细节,因此不建议单独使用此函数。 -该函数的主要用途是计算两个日期或日期时间之间的秒数差,例如:`toRelativeSecondNum(dt1) - toRelativeSecondNum(dt2)`。 - -**语法** - -```sql -toRelativeSecondNum(date) -``` - -**参数** - -* `date` — 日期或带时间的日期。[`Date`](/sql-reference/data-types/date) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**返回值** - -返回自过去某个固定参考点起算的秒数。[`UInt32`](/sql-reference/data-types/int-uint) - -**示例** - -**获取相对秒数** - -```sql title=Query -SELECT toRelativeSecondNum(toDateTime('2023-01-01 00:01:00')) - toRelativeSecondNum(toDateTime('2023-01-01 00:00:00')) AS seconds_difference -``` - -```response title=Response -┌─seconds_difference─┐ -│ 60 │ -└────────────────────┘ -``` - - -## toRelativeWeekNum - -自 v1.1 版本引入 - -将日期或带时间的日期转换为自某个固定过去时间点以来经过的周数。 -该具体时间点属于实现细节,因此不建议将此函数单独使用。 -此函数的主要用途是计算两个日期或日期时间值之间相差的周数,例如:`toRelativeWeekNum(dt1) - toRelativeWeekNum(dt2)`。 - -**语法** - -```sql -toRelativeWeekNum(date) -``` - -**参数** - -* `date` — 日期或带时间的日期。[`Date`](/sql-reference/data-types/date) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**返回值** - -返回自过去某个固定参考点起算的周数。[`UInt32`](/sql-reference/data-types/int-uint) - -**示例** - -**获取相对周数** - -```sql title=Query -SELECT toRelativeWeekNum(toDate('2023-01-08')) - toRelativeWeekNum(toDate('2023-01-01')) AS weeks_difference -``` - -```response title=Response -┌─weeks_difference─┐ -│ 1 │ -└──────────────────┘ -``` - - -## toRelativeYearNum - -自 v1.1 起引入 - -将日期或带时间的日期转换为自过去某个固定时间点以来经过的年数。 -这个具体时间点属于实现细节,因此不建议单独使用此函数。 -此函数的主要用途是计算两个日期或带时间的日期之间相差的年数,例如:`toRelativeYearNum(dt1) - toRelativeYearNum(dt2)`。 - -**语法** - -```sql -toRelativeYearNum(date) -``` - -**参数** - -* `date` — 日期或日期时间值。[`Date`](/sql-reference/data-types/date) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**返回值** - -返回从过去某个固定参考点开始计算的年份数。[`UInt16`](/sql-reference/data-types/int-uint) - -**示例** - -**获取相对年份值** - -```sql title=Query -SELECT toRelativeYearNum('2010-10-01'::DateTime) - toRelativeYearNum('2000-01-01'::DateTime) -``` - -```response title=Response -┌─minus(toRela⋯ateTime')))─┐ -│ 10 │ -└──────────────────────────┘ -``` - - -## toSecond - -自 v1.1 引入 - -返回 `DateTime` 或 `DateTime64` 值的秒部分(0-59)。 - -**语法** - -```sql -toSecond(datetime) -``` - -**别名**: `SECOND` - -**参数** - -* `datetime` — 要从中获取秒数的日期时间值。[`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**返回值** - -返回 `datetime` 中所在分钟内的秒数 (0 - 59)。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT toSecond(toDateTime('2023-04-21 10:20:30')) -``` - -```response title=Response -┌─toSecond(toDateTime('2023-04-21 10:20:30'))─┐ -│ 30 │ -└─────────────────────────────────────────────┘ -``` - - -## toStartOfDay - -自 v1.1 引入 - -将日期时间向下取整到当天的起始时刻。 - -:::note -可以通过设置 [`enable_extended_results_for_datetime_functions`](/operations/settings/settings#enable_extended_results_for_datetime_functions) 来配置返回类型。 -::: - -**语法** - -```sql -toStartOfDay(datetime) -``` - -**参数** - -* `datetime` — 要进行取整的日期或日期时间。[`Date`](/sql-reference/data-types/date) 或 [`DateTime`](/sql-reference/data-types/datetime) - -**返回值** - -返回向下取整到一天起始时刻的日期时间值。[`Date`](/sql-reference/data-types/date) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**示例** - -**向下取整到一天起始时刻** - -```sql title=Query -SELECT toStartOfDay(toDateTime('2023-04-21 10:20:30')) -``` - -```response title=Response -┌─toStartOfDay(toDateTime('2023-04-21 10:20:30'))─┐ -│ 2023-04-21 00:00:00 │ -└─────────────────────────────────────────────────┘ -``` - - -## toStartOfFifteenMinutes - -自 v1.1 起引入 - -将带时间的日期向下取整到所在十五分钟区间的起始时刻。 - -:::note -可以通过设置 [`enable_extended_results_for_datetime_functions`](/operations/settings/settings#enable_extended_results_for_datetime_functions) 来配置返回类型。 -::: - -**语法** - -```sql -toStartOfFifteenMinutes(datetime) -``` - -**参数** - -* `datetime` — 要进行取整的日期或日期时间。[`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**返回值** - -返回向最近的 15 分钟区间起始时刻取整后的日期时间。类型为 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**示例** - -**示例** - -```sql title=Query -SELECT - toStartOfFifteenMinutes(toDateTime('2023-04-21 10:17:00')), - toStartOfFifteenMinutes(toDateTime('2023-04-21 10:20:00')), - toStartOfFifteenMinutes(toDateTime('2023-04-21 10:23:00')) -FORMAT Vertical -``` - -```response title=Response -Row 1: -────── -toStartOfFifteenMinutes(toDateTime('2023-04-21 10:17:00')): 2023-04-21 10:15:00 -toStartOfFifteenMinutes(toDateTime('2023-04-21 10:20:00')): 2023-04-21 10:15:00 -toStartOfFifteenMinutes(toDateTime('2023-04-21 10:23:00')): 2023-04-21 10:15:00 -``` - - -## toStartOfFiveMinutes - -引入于:v22.6 - -将包含时间的日期向下舍入到最近的 5 分钟区间的起始时间。 - -:::note -可以通过设置 [`enable_extended_results_for_datetime_functions`](/operations/settings/settings#enable_extended_results_for_datetime_functions) 来配置返回类型。 -::: - -**语法** - -```sql -toStartOfFiveMinutes(datetime) -``` - -**别名**: `toStartOfFiveMinute` - -**参数** - -* `datetime` — 需要取整的日期时间值。[`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**返回值** - -返回将日期时间取整到最近五分钟区间起始时刻的值,类型为 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**示例** - -**示例** - -```sql title=Query -SELECT - toStartOfFiveMinutes(toDateTime('2023-04-21 10:17:00')), - toStartOfFiveMinutes(toDateTime('2023-04-21 10:20:00')), - toStartOfFiveMinutes(toDateTime('2023-04-21 10:23:00')) -FORMAT Vertical -``` - -```response title=Response -Row 1: -────── -toStartOfFiveMinutes(toDateTime('2023-04-21 10:17:00')): 2023-04-21 10:15:00 -toStartOfFiveMinutes(toDateTime('2023-04-21 10:20:00')): 2023-04-21 10:20:00 -toStartOfFiveMinutes(toDateTime('2023-04-21 10:23:00')): 2023-04-21 10:20:00 -``` - - -## toStartOfHour - -自 v1.1 起引入 - -将带时间的日期向下取整到所在小时的起始时刻(整点)。 - -:::note -可以通过设置 [`enable_extended_results_for_datetime_functions`](/operations/settings/settings#enable_extended_results_for_datetime_functions) 来配置返回类型。 -::: - -**语法** - -```sql -toStartOfHour(datetime) -``` - -**参数** - -* `datetime` — 要进行舍入的日期时间值。[`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**返回值** - -返回向下取整到整点起始时间的日期时间值。[`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**示例** - -**向下取整到整点** - -```sql title=Query -SELECT - toStartOfHour(toDateTime('2023-04-21 10:20:30')); -``` - -```response title=Response -┌─────────────────res─┬─toTypeName(res)─┐ -│ 2023-04-21 10:00:00 │ DateTime │ -└─────────────────────┴─────────────────┘ -``` - - -## toStartOfISOYear - -引入版本:v1.1 - -将日期或日期时间向下取整到该 ISO 年的第一天,这可能与公历年份不同。参见 [ISO 周日期](https://en.wikipedia.org/wiki/ISO_week_date)。 - -:::note -可以通过设置 [`enable_extended_results_for_datetime_functions`](/operations/settings/settings#enable_extended_results_for_datetime_functions) 来配置返回类型。 -::: - -**语法** - -```sql -toStartOfISOYear(value) -``` - -**参数** - -* `value` — 要向下取整到其 ISO 年第一天的日期或日期时间值。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**返回值** - -返回给定日期或日期时间值所在 ISO 年的第一天。[`Date`](/sql-reference/data-types/date) - -**示例** - -**向下取整到 ISO 年的第一天** - -```sql title=Query -SELECT toStartOfISOYear(toDateTime('2023-04-21 10:20:30')) -``` - -```response title=Response -┌─toStartOfISOYear(toDateTime('2023-04-21 10:20:30'))─┐ -│ 2023-01-02 │ -└─────────────────────────────────────────────────────┘ -``` - - -## toStartOfInterval - -引入于:v20.1 - -此函数使用 `toStartOfInterval(date_or_date_with_time, INTERVAL x unit [, time_zone])` 语法,对其它 `toStartOf*()` 函数进行了泛化。 - -例如: - -* `toStartOfInterval(t, INTERVAL 1 YEAR)` 的返回值与 `toStartOfYear(t)` 相同, -* `toStartOfInterval(t, INTERVAL 1 MONTH)` 的返回值与 `toStartOfMonth(t)` 相同, -* `toStartOfInterval(t, INTERVAL 1 DAY)` 的返回值与 `toStartOfDay(t)` 相同, -* `toStartOfInterval(t, INTERVAL 15 MINUTE)` 的返回值与 `toStartOfFifteenMinutes(t)` 相同。 - -计算是相对于特定时间点进行的: - -| Interval | Start | -| ---------------------------------------- | ---------------------- | -| YEAR | year 0 | -| QUARTER | 1900 Q1 | -| MONTH | 1900 January | -| WEEK | 1970, 1st week (01-05) | -| DAY | 1970-01-01 | -| HOUR | (*) | -| MINUTE | 1970-01-01 00:00:00 | -| SECOND | 1970-01-01 00:00:00 | -| MILLISECOND | 1970-01-01 00:00:00 | -| MICROSECOND | 1970-01-01 00:00:00 | -| NANOSECOND | 1970-01-01 00:00:00 | -| (*) 小时间隔是特殊的:计算始终是相对于当日 00:00:00(午夜)进行的。 | | -| | | - -如果指定了 `WEEK` 单位,`toStartOfInterval` 认为一周从周一开始。注意,这一行为不同于 `toStartOfWeek` 函数,其默认是一周从周日开始。 - -第二个重载分别模拟了 TimescaleDB 的 `time_bucket()` 函数以及 PostgreSQL 的 `date_bin()` 函数。 - -**语法** - -```sql -toStartOfInterval(value, INTERVAL x unit[, time_zone]) -toStartOfInterval(value, INTERVAL x unit[, origin[, time_zone]]) -``` - -**别名**: `date_bin`, `time_bucket` - -**参数** - -* `value` — 要向下取整的日期或日期时间值。[`Date`](/sql-reference/data-types/date) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) -* `x` — 时间间隔长度的数值。- `unit` — 时间间隔单位:YEAR、QUARTER、MONTH、WEEK、DAY、HOUR、MINUTE、SECOND、MILLISECOND、MICROSECOND、NANOSECOND。- `time_zone` — 可选。表示时区名称的字符串。- `origin` — 可选。用于计算的起点(仅适用于第二种重载)。 - -**返回值** - -返回包含输入值的时间间隔的起始时间。[`DateTime`](/sql-reference/data-types/datetime) - -**示例** - -**基本时间间隔舍入** - -```sql title=Query -SELECT toStartOfInterval(toDateTime('2023-01-15 14:30:00'), INTERVAL 1 MONTH) -``` - -```response title=Response -┌─toStartOfInt⋯alMonth(1))─┐ -│ 2023-01-01 │ -└──────────────────────────┘ -``` - -**使用原点** - -```sql title=Query -SELECT toStartOfInterval(toDateTime('2023-01-01 14:45:00'), INTERVAL 1 MINUTE, toDateTime('2023-01-01 14:35:30')) -``` - -```response title=Response -┌─toStartOfInt⋯14:35:30'))─┐ -│ 2023-01-01 14:44:30 │ -└──────────────────────────┘ -``` - - -## toStartOfMicrosecond - -引入版本:v22.6 - -将日期时间向下舍入(截断)到该微秒的起始时刻。 - -**语法** - -```sql -toStartOfMicrosecond(datetime[, timezone]) -``` - -**参数** - -* `datetime` — 日期和时间。[`DateTime64`](/sql-reference/data-types/datetime64) -* `timezone` — 可选。返回值所使用的时区。如果未指定,则函数使用 `value` 参数的时区。[`String`](/sql-reference/data-types/string) - -**返回值** - -保留亚微秒的输入值 [`DateTime64`](/sql-reference/data-types/datetime64) - -**示例** - -**不带时区的查询** - -```sql title=Query -WITH toDateTime64('2020-01-01 10:20:30.999999999', 9) AS dt64 -SELECT toStartOfMicrosecond(dt64); -``` - -```response title=Response -┌────toStartOfMicrosecond(dt64)─┐ -│ 2020-01-01 10:20:30.999999000 │ -└───────────────────────────────┘ -``` - -**带时区的查询** - -```sql title=Query -WITH toDateTime64('2020-01-01 10:20:30.999999999', 9) AS dt64 -SELECT toStartOfMicrosecond(dt64, 'Asia/Istanbul'); -``` - -```response title=Response -┌─toStartOfMicrosecond(dt64, 'Asia/Istanbul')─┐ -│ 2020-01-01 12:20:30.999999000 │ -└─────────────────────────────────────────────┘ -``` - - -## toStartOfMillisecond - -引入版本:v22.6 - -将日期时间向下取整到该毫秒的起始时刻。 - -**语法** - -```sql -toStartOfMillisecond(datetime[, timezone]) -``` - -**参数** - -* `datetime` — 日期和时间。[`DateTime64`](/sql-reference/data-types/datetime64) -* `timezone` — 可选。返回值所使用的时区。如果未指定,函数会使用 `value` 参数的时区。[`String`](/sql-reference/data-types/string) - -**返回值** - -包含子毫秒部分的输入值。[`DateTime64`](/sql-reference/data-types/datetime64) - -**示例** - -**不带时区的查询** - -```sql title=Query -WITH toDateTime64('2020-01-01 10:20:30.999999999', 9) AS dt64 -SELECT toStartOfMillisecond(dt64); -``` - -```response title=Response -┌────toStartOfMillisecond(dt64)─┐ -│ 2020-01-01 10:20:30.999000000 │ -└───────────────────────────────┘ -``` - -**按时区查询** - -```sql title=Query -WITH toDateTime64('2020-01-01 10:20:30.999999999', 9) AS dt64 -SELECT toStartOfMillisecond(dt64, 'Asia/Istanbul'); -``` - -```response title=Response -┌─toStartOfMillisecond(dt64, 'Asia/Istanbul')─┐ -│ 2020-01-01 12:20:30.999000000 │ -└─────────────────────────────────────────────┘ -``` - - -## toStartOfMinute - -引入于:v1.1 - -将带时间的日期向下取整到所属分钟的起始时刻。 - -:::note -可以通过设置 [`enable_extended_results_for_datetime_functions`](/operations/settings/settings#enable_extended_results_for_datetime_functions) 来配置返回类型。 -::: - -**语法** - -```sql -toStartOfMinute(datetime) -``` - -**参数** - -* `datetime` — 要进行取整的日期时间。[`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**返回值** - -返回向下取整到该分钟起始时刻的日期时间。[`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**示例** - -**向下取整到该分钟的起始时刻** - -```sql title=Query -SELECT - toStartOfMinute(toDateTime('2023-04-21 10:20:30')), - toStartOfMinute(toDateTime64('2023-04-21 10:20:30.5300', 8)) -FORMAT Vertical -``` - -```response title=Response -第 1 行: -────── -toStartOfMinute(toDateTime('2023-04-21 10:20:30')): 2023-04-21 10:20:00 -toStartOfMinute(toDateTime64('2023-04-21 10:20:30.5300', 8)): 2023-04-21 10:20:00 -``` - - -## toStartOfMonth - -自 v1.1 起引入 - -将日期或日期时间向下取整到所在月份的第一天。 - -:::note -可以通过设置 [`enable_extended_results_for_datetime_functions`](/operations/settings/settings#enable_extended_results_for_datetime_functions) 来配置返回类型。 -::: - -**语法** - -```sql -toStartOfMonth(value) -``` - -**参数** - -* `value` — 要向下舍入到所在月份第一天的日期或带时间的日期。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**返回值** - -返回给定日期或带时间的日期所在月份的第一天。[`Date`](/sql-reference/data-types/date) - -**示例** - -**向下舍入到所在月份的第一天** - -```sql title=Query -SELECT toStartOfMonth(toDateTime('2023-04-21 10:20:30')) -``` - -```response title=Response -┌─toStartOfMonth(toDateTime('2023-04-21 10:20:30'))─┐ -│ 2023-04-01 │ -└───────────────────────────────────────────────────┘ -``` - - -## toStartOfNanosecond - -引入版本:v22.6 - -将带时间的日期向下取整到纳秒。 - -**语法** - -```sql -toStartOfNanosecond(datetime[, timezone]) -``` - -**参数** - -* `datetime` — 日期和时间。[`DateTime64`](/sql-reference/data-types/datetime64) -* `timezone` — 可选。返回值使用的时区。如果未指定,函数会使用 `value` 参数的时区。[`String`](/sql-reference/data-types/string) - -**返回值** - -带纳秒精度的输入值。[`DateTime64`](/sql-reference/data-types/datetime64) - -**示例** - -**不带时区的查询** - -```sql title=Query -WITH toDateTime64('2020-01-01 10:20:30.999999999', 9) AS dt64 -SELECT toStartOfNanosecond(dt64); -``` - -```response title=Response -┌─────toStartOfNanosecond(dt64)─┐ -│ 2020-01-01 10:20:30.999999999 │ -└───────────────────────────────┘ -``` - -**按时区查询** - -```sql title=Query -WITH toDateTime64('2020-01-01 10:20:30.999999999', 9) AS dt64 -SELECT toStartOfNanosecond(dt64, 'Asia/Istanbul'); -``` - -```response title=Response -┌─toStartOfNanosecond(dt64, 'Asia/Istanbul')─┐ -│ 2020-01-01 12:20:30.999999999 │ -└────────────────────────────────────────────┘ -``` - - -## toStartOfQuarter - -引入版本:v1.1 - -将日期或带时间的日期向下取整到该季度的第一天。季度的第一天分别为 1 月 1 日、4 月 1 日、7 月 1 日或 10 月 1 日。 - -:::note -可以通过设置 [`enable_extended_results_for_datetime_functions`](/operations/settings/settings#enable_extended_results_for_datetime_functions) 来配置返回类型。 -::: - -**语法** - -```sql -toStartOfQuarter(value) -``` - -**参数** - -* `value` — 要向下取整到所在季度第一天的日期或日期时间值。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**返回值** - -返回给定日期或日期时间值所在季度的第一天。[`Date`](/sql-reference/data-types/date) - -**示例** - -**向下取整到所在季度的第一天** - -```sql title=Query -SELECT toStartOfQuarter(toDateTime('2023-04-21 10:20:30')) -``` - -```response title=Response -┌─toStartOfQuarter(toDateTime('2023-04-21 10:20:30'))─┐ -│ 2023-04-01 │ -└─────────────────────────────────────────────────────┘ -``` - - -## toStartOfSecond - -自 v20.5 版本引入 - -将日期时间值向下取整到所在秒的起始时刻。 - -**语法** - -```sql -toStartOfSecond(datetime[, timezone]) -``` - -**参数** - -* `datetime` — 要截断小数秒部分的日期时间值。[`DateTime64`](/sql-reference/data-types/datetime64) -* `timezone` — 可选。用于返回值的时区。如果未指定,函数将使用 `value` 参数的时区。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回不含小数秒部分的输入值。[`DateTime64`](/sql-reference/data-types/datetime64) - -**示例** - -**不带时区的查询** - -```sql title=Query -WITH toDateTime64('2020-01-01 10:20:30.999', 3) AS dt64 -SELECT toStartOfSecond(dt64); -``` - -```response title=Response -┌───toStartOfSecond(dt64)─┐ -│ 2020-01-01 10:20:30.000 │ -└─────────────────────────┘ -``` - -**使用时区进行查询** - -```sql title=Query -WITH toDateTime64('2020-01-01 10:20:30.999', 3) AS dt64 -SELECT toStartOfSecond(dt64, 'Asia/Istanbul'); -``` - -```response title=Response -┌─toStartOfSecond(dt64, 'Asia/Istanbul')─┐ -│ 2020-01-01 13:20:30.000 │ -└────────────────────────────────────────┘ -``` - - -## toStartOfTenMinutes - -引入版本:v20.1 - -将带时间的日期向下取整到最近 10 分钟区间的起始时间点。 - -:::note -可以通过设置 [`enable_extended_results_for_datetime_functions`](/operations/settings/settings#enable_extended_results_for_datetime_functions) 来配置返回类型。 -::: - -**语法** - -```sql -toStartOfTenMinutes(datetime) -``` - -**参数** - -* `datetime` — 含时间的日期值。[`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**返回值** - -返回将时间舍入到最近 10 分钟区间起始时刻的日期时间值,类型为 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**示例** - -**示例** - -```sql title=Query -SELECT - toStartOfTenMinutes(toDateTime('2023-04-21 10:17:00')), - toStartOfTenMinutes(toDateTime('2023-04-21 10:20:00')), - toStartOfTenMinutes(toDateTime('2023-04-21 10:23:00')) -FORMAT Vertical -``` - -```response title=Response -Row 1: -────── -toStartOfTenMinutes(toDateTime('2023-04-21 10:17:00')): 2023-04-21 10:10:00 -toStartOfTenMinutes(toDateTime('2023-04-21 10:20:00')): 2023-04-21 10:20:00 -toStartOfTenMinutes(toDateTime('2023-04-21 10:23:00')): 2023-04-21 10:20:00 -``` - - -## toStartOfWeek - -自 v20.1 引入 - -将日期或日期时间向下取整到最近的星期日或星期一的起始时刻。 - -:::note -可以通过设置 [`enable_extended_results_for_datetime_functions`](/operations/settings/settings#enable_extended_results_for_datetime_functions) 来配置返回类型。 -::: - -**语法** - -```sql -toStartOfWeek(datetime[, mode[, timezone]]) -``` - -**参数** - -* `datetime` — 要转换的日期或日期时间值。[`Date`](/sql-reference/data-types/date) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime64`](/sql-reference/data-types/datetime64) -* `mode` — 按照 `toWeek()` 函数中的说明确定一周的第一天。默认值为 `0`。[`UInt8`](/sql-reference/data-types/int-uint) -* `timezone` — 用于转换的时区。如果未指定,则使用服务器的时区。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回给定日期当日或之前、最接近的周日或周一的日期,具体取决于 `mode` 参数。返回类型为 [`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**示例** - -**向下取整到最近的周日或周一** - -```sql title=Query -SELECT - toStartOfWeek(toDateTime('2023-04-21 10:20:30')), /* 星期五 */ - toStartOfWeek(toDateTime('2023-04-21 10:20:30'), 1), /* 星期五 */ - toStartOfWeek(toDate('2023-04-24')), /* 星期一 */ - toStartOfWeek(toDate('2023-04-24'), 1) /* 星期一 */ - FORMAT Vertical -``` - -```response title=Response -Row 1: - ────── - toStartOfWeek(toDateTime('2023-04-21 10:20:30')): 2023-04-17 - toStartOfWeek(toDateTime('2023-04-21 10:20:30'), 1): 2023-04-17 - toStartOfWeek(toDate('2023-04-24')): 2023-04-24 - toStartOfWeek(toDate('2023-04-24'), 1): 2023-04-24 -``` - - -## toStartOfYear - -自 v1.1 起提供 - -将日期或带时间的日期向下取整到该年的第一天。返回值为 `Date` 对象。 - -:::note -可以通过设置 [`enable_extended_results_for_datetime_functions`](/operations/settings/settings#enable_extended_results_for_datetime_functions) 来配置返回类型。 -::: - -**语法** - -```sql -toStartOfYear(value) -``` - -**参数** - -* `value` — 要向下取整的日期或带时间的日期。类型为 [`Date`](/sql-reference/data-types/date)、[`Date32`](/sql-reference/data-types/date32)、[`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**返回值** - -返回给定日期/时间所在年份的第一天,类型为 [`Date`](/sql-reference/data-types/date) - -**示例** - -**向下取整到所在年份的第一天** - -```sql title=Query -SELECT toStartOfYear(toDateTime('2023-04-21 10:20:30')) -``` - -```response title=Response -┌─toStartOfYear(toDateTime('2023-04-21 10:20:30'))─┐ -│ 2023-01-01 │ -└──────────────────────────────────────────────────┘ -``` - - -## toTimeWithFixedDate - -引入版本:v1.1 - -提取日期或日期时间值中的时间部分。 -返回结果表示到某个固定时间点的偏移量,目前为 `1970-01-02`, -但该时间点的具体取值属于实现细节,将来可能会发生变化。 - -因此,不应单独使用 `toTime`。 -该函数的主要用途是计算两个日期或日期时间之间的时间差,例如:`toTime(dt1) - toTime(dt2)`。 - -**语法** - -```sql -toTime(date[, timezone]) -``` - -**参数** - -* `date` — 要转换为时间的日期。[`Date`](/sql-reference/data-types/date) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) -* `timezone` — 可选。返回值所使用的时区。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回日期或带时间的日期的时间部分,以相对于一个固定时间点(当前选定为 1970-01-02)的偏移量形式表示。[`DateTime`](/sql-reference/data-types/datetime) - -**示例** - -**计算两个日期之间的时间差** - -```sql title=Query -SELECT toTime('2025-06-15 12:00:00'::DateTime) - toTime('2024-05-10 11:00:00'::DateTime) AS result, toTypeName(result) -``` - -```response title=Response -┌─result─┬─toTypeName(result)─┐ -│ 3600 │ Int32 │ -└────────┴────────────────────┘ -``` - - -## toTimezone - -引入于:v1.1 - -将 `DateTime` 或 `DateTime64` 转换为指定的时区。 -数据的内部值(Unix 时间戳秒数)不会改变。 -只有该值的时区属性和字符串表示会发生改变。 - -**语法** - -```sql -toTimeZone(datetime, timezone) -``` - -**别名**: `toTimeZone` - -**参数** - -* `date` — 要转换的值。[`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) -* `timezone` — 目标时区名称。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回一个与输入时间戳相同,但使用指定时区的值,类型为 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**示例** - -**用法示例** - -```sql title=Query -SELECT toDateTime('2019-01-01 00:00:00', 'UTC') AS time_utc, -toTypeName(time_utc) AS type_utc, -toInt32(time_utc) AS int32utc, -toTimeZone(time_utc, 'Asia/Yekaterinburg') AS time_yekat, -toTypeName(time_yekat) AS type_yekat, -toInt32(time_yekat) AS int32yekat, -toTimeZone(time_utc, 'US/Samoa') AS time_samoa, -toTypeName(time_samoa) AS type_samoa, -toInt32(time_samoa) AS int32samoa -FORMAT Vertical; -``` - -```response title=Response -第 1 行: -────── -time_utc: 2019-01-01 00:00:00 -type_utc: DateTime('UTC') -int32utc: 1546300800 -time_yekat: 2019-01-01 05:00:00 -type_yekat: DateTime('Asia/Yekaterinburg') -int32yekat: 1546300800 -time_samoa: 2018-12-31 13:00:00 -type_samoa: DateTime('US/Samoa') -int32samoa: 1546300800 -``` - - -## toUTCTimestamp - -引入版本:v23.8 - -将某一时区的 `date` 或带时间的日期值转换为 UTC 时区对应的时间戳。此函数主要用于与 Apache Spark 及类似框架的兼容性。 - -**语法** - -```sql -toUTCTimestamp(datetime, time_zone) -``` - -**别名**: `to_utc_timestamp` - -**参数** - -* `datetime` — `Date` 或带时间的类型的常量值或表达式。[`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) -* `time_zone` — 表示时区的 `String` 类型常量值或表达式。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回处于 UTC 时区的日期或日期时间值。[`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**示例** - -**将时区转换为 UTC 时间** - -```sql title=Query -SELECT toUTCTimestamp(toDateTime('2023-03-16'), 'Asia/Shanghai') -``` - -```response title=Response -┌─toUTCTimestamp(toDateTime('2023-03-16'), 'Asia/Shanghai')─┐ -│ 2023-03-15 16:00:00 │ -└─────────────────────────────────────────────────────────┘ -``` - - -## toUnixTimestamp - -引入版本:v1.1 - -将 `String`、`Date` 或 `DateTime` 转换为 Unix 时间戳(自 `1970-01-01 00:00:00 UTC` 以来的秒数),类型为 `UInt32`。 - -**语法** - -```sql -toUnixTimestamp(date[, timezone]) -``` - -**参数** - -* `date` — 要转换的值。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) 或 [`String`](/sql-reference/data-types/string) -* `timezone` — 可选。用于转换的时区。如果未指定,则使用服务器的时区。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回 Unix 时间戳。[`UInt32`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT -'2017-11-05 08:07:47' AS dt_str, -toUnixTimestamp(dt_str) AS from_str, -toUnixTimestamp(dt_str, 'Asia/Tokyo') AS from_str_tokyo, -toUnixTimestamp(toDateTime(dt_str)) AS from_datetime, -toUnixTimestamp(toDateTime64(dt_str, 0)) AS from_datetime64, -toUnixTimestamp(toDate(dt_str)) AS from_date, -toUnixTimestamp(toDate32(dt_str)) AS from_date32 -FORMAT Vertical; -``` - -```response title=Response -Row 1: -────── -dt_str: 2017-11-05 08:07:47 -from_str: 1509869267 -from_str_tokyo: 1509836867 -from_datetime: 1509869267 -from_datetime64: 1509869267 -from_date: 1509840000 -from_date32: 1509840000 -``` - - -## toWeek - -引入于:v20.1 - -此函数返回 `date` 或 `datetime` 的周序号。`toWeek()` 的双参数形式允许你指定一周从星期日还是星期一开始,以及返回值是在 `0` 到 `53` 范围内还是在 `1` 到 `53` 范围内。 - -[`toISOWeek()`](#toWeek) 是一个兼容性函数,等价于 `toWeek(date,3)`。 - -下表说明了 `mode` 参数的工作方式。 - -| Mode | First day of week | Range | Week 1 is the first week ... | -| ---- | ----------------- | ----- | ----------------------------- | -| 0 | Sunday | 0-53 | with a Sunday in this year | -| 1 | Monday | 0-53 | with 4 or more days this year | -| 2 | Sunday | 1-53 | with a Sunday in this year | -| 3 | Monday | 1-53 | with 4 or more days this year | -| 4 | Sunday | 0-53 | with 4 or more days this year | -| 5 | Monday | 0-53 | with a Monday in this year | -| 6 | Sunday | 1-53 | with 4 or more days this year | -| 7 | Monday | 1-53 | with a Monday in this year | -| 8 | Sunday | 1-53 | contains January 1 | -| 9 | Monday | 1-53 | contains January 1 | - -对于含义为“在本年度中包含 4 天或以上”的 mode 取值,周序号按照 ISO 8601:1988 编号: - -* 如果包含 1 月 1 日的那一周,在新的一年中有 4 天或以上,则它是第 1 周。 -* 否则,它是上一年的最后一周,而下一周才是第 1 周。 - -对于含义为“包含 1 月 1 日”的 mode 取值,包含 1 月 1 日的那一周即为第 1 周。 -该周在新的一年中包含多少天并不重要,即使只包含 1 天也一样。 -也就是说,如果 12 月的最后一周包含下一年的 1 月 1 日,那么它将是下一年的第 1 周。 - -第一个参数也可以以 [`String`](../data-types/string.md) 的形式指定,格式须为 [`parseDateTime64BestEffort()`](type-conversion-functions.md#parsedatetime64besteffort) 所支持的格式。对字符串参数的支持仅是为了与某些第三方工具所期望的 MySQL 保持兼容。由于将来字符串参数的支持可能会依赖新的 MySQL 兼容性设置,并且字符串解析通常较慢,因此不建议使用它。 - -**语法** - -```sql -toWeek(datetime[, mode[, time_zone]]) -``` - -**别名**: `week` - -**参数** - -* `datetime` — 要获取周数的日期或日期时间值。[`Date`](/sql-reference/data-types/date) 或 [`DateTime`](/sql-reference/data-types/datetime) -* `mode` — 可选。`0` 到 `9` 的模式,用于确定每周的第一天以及周数的取值范围。默认值为 `0`。 -* `time_zone` — 可选。时区。[`String`](/sql-reference/data-types/string) - -**返回值** - -根据指定模式返回周数。[`UInt32`](/sql-reference/data-types/int-uint) - -**示例** - -**使用不同模式获取周数** - -```sql title=Query -SELECT toDate('2016-12-27') AS date, toWeek(date) AS week0, toWeek(date,1) AS week1, toWeek(date,9) AS week9 -``` - -```response title=Response -┌───────date─┬─week0─┬─week1─┬─week9─┐ -│ 2016-12-27 │ 52 │ 52 │ 1 │ -└────────────┴───────┴───────┴───────┘ -``` - - -## toYYYYMM - -引入版本:v1.1 - -将日期或带时间的日期转换为一个 `UInt32` 数值,表示年份和月份(YYYY * 100 + MM)。 -接受第二个可选的时区参数。如果提供,该时区必须是字符串常量。 - -此函数与函数 `YYYYMMDDToDate()` 互为逆函数。 - -**语法** - -```sql -toYYYYMM(datetime[, timezone]) -``` - -**参数** - -* `datetime` — 要转换的日期或带时间的日期类型。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) -* `timezone` — 可选。用于转换的时区。如果提供,则该时区必须是字符串常量。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回一个 UInt32 值,表示年份和月份(YYYY * 100 + MM)。[`UInt32`](/sql-reference/data-types/int-uint) - -**示例** - -**将当前日期转换为 YYYYMM 格式** - -```sql title=Query -SELECT toYYYYMM(now(), 'US/Eastern') -``` - -```response title=Response -┌─toYYYYMM(now(), 'US/Eastern')─┐ -│ 202303 │ -└───────────────────────────────┘ -``` - - -## toYYYYMMDD - -引入版本:v1.1 - -将日期或带时间的日期转换为一个 `UInt32` 数值,其中包含年份、月份和日期数字(YYYY * 10000 + MM * 100 + DD)。接受第二个可选的时区参数。如果提供,该时区必须是字符串常量。 - -**语法** - -```sql -toYYYYMMDD(datetime[, timezone]) -``` - -**参数** - -* `datetime` — 要转换的日期或日期时间值。可以是 [`Date`](/sql-reference/data-types/date)、[`Date32`](/sql-reference/data-types/date32)、[`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) 类型。 -* `timezone` — 可选。用于转换的时区。如果提供该参数,则时区必须是字符串常量,对应 [`String`](/sql-reference/data-types/string) 类型。 - -**返回值** - -返回一个 `UInt32` 整数,包含年、月和日,编码格式为 `YYYY * 10000 + MM * 100 + DD`。[`UInt32`](/sql-reference/data-types/int-uint) - -**示例** - -**将当前日期转换为 YYYYMMDD 格式** - -```sql title=Query -SELECT toYYYYMMDD(now(), 'US/Eastern') -``` - -```response title=Response -┌─toYYYYMMDD(now(), 'US/Eastern')─┐ -│ 20230302 │ -└─────────────────────────────────┘ -``` - - -## toYYYYMMDDhhmmss - -引入版本:v1.1 - -将日期或带时间的日期转换为 `UInt64` 数值,格式为 YYYYMMDDhhmmss(YYYY * 10000000000 + MM * 100000000 + DD * 1000000 + hh * 10000 + mm * 100 + ss)。 -接受第二个可选的时区参数。如果提供,该时区必须为字符串常量。 - -**语法** - -```sql -toYYYYMMDDhhmmss(datetime[, timezone]) -``` - -**参数** - -* `datetime` — 要转换的日期或日期时间值。[`Date`](/sql-reference/data-types/date) 或 [`Date32`](/sql-reference/data-types/date32) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) -* `timezone` — 可选。用于转换的时区。如果指定,时区必须是字符串常量。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回一个 `UInt64` 整数,包含年、月、日、时、分和秒(YYYY * 10000000000 + MM * 100000000 + DD * 1000000 + hh * 10000 + mm * 100 + ss)。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**将当前日期和时间转换为 YYYYMMDDhhmmss 格式** - -```sql title=Query -SELECT toYYYYMMDDhhmmss(now(), 'US/Eastern') -``` - -```response title=Response -┌─toYYYYMMDDhhmmss(now(), 'US/Eastern')─┐ -│ 20230302112209 │ -└───────────────────────────────────────┘ -``` - - -## toYear - -引入版本:v1.1 - -返回 `Date` 或 `DateTime` 值中的年份部分(公元年)。 - -**语法** - -```sql -toYear(datetime) -``` - -**别名**: `YEAR` - -**参数** - -* `datetime` — 要从中获取年份的日期或日期时间值。类型为 [`Date`](/sql-reference/data-types/date)、[`Date32`](/sql-reference/data-types/date32)、[`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**返回值** - -返回给定 Date 或 DateTime 的年份,返回类型为 [`UInt16`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT toYear(toDateTime('2023-04-21 10:20:30')) -``` - -```response title=Response -┌─toYear(toDateTime('2023-04-21 10:20:30'))─┐ -│ 2023 │ -└───────────────────────────────────────────┘ -``` - - -## toYearNumSinceEpoch - -引入于:v25.3 - -返回自 1970 年起经过的年份数 - -**语法** - -```sql -toYearNumSinceEpoch(date) -``` - -**参数** - -* `date` — 要转换的日期或日期时间值。[`Date`](/sql-reference/data-types/date) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**返回值** - -正整数 - -**示例** - -**示例** - -```sql title=Query -SELECT toYearNumSinceEpoch(toDate('2024-10-01')) -``` - -```response title=Response -54 -``` - - -## toYearWeek - -引入版本:v20.1 - -返回指定日期对应的年份和周数。对于一年中的第一周和最后一周,结果中的年份可能与该日期所在的年份不同。 - -`mode` 参数的行为与 [`toWeek()`](/sql-reference/functions/date-time-functions#toWeek) 的 `mode` 参数相同。 - -警告:`toYearWeek()` 返回的周数可能与 `toWeek()` 返回的不同。`toWeek()` 始终在给定年份的上下文中返回周数,如果 `toWeek()` 返回 `0`,则 `toYearWeek()` 会返回上一年最后一周对应的值。参见下面示例中的 `prev_yearWeek`。 - -第一个参数也可以以 [`String`](../data-types/string.md) 形式指定,其格式需为 [`parseDateTime64BestEffort()`](type-conversion-functions.md#parsedatetime64besteffort) 所支持的格式。对字符串参数的支持仅出于与 MySQL 的兼容性考虑,因为某些第三方工具依赖于此。由于将来字符串参数支持可能会依赖新的 MySQL 兼容性设置,并且字符串解析通常较慢,建议不要使用字符串参数。 - -**语法** - -```sql -toYearWeek(datetime[, mode[, timezone]]) -``` - -**别名**:`yearweek` - -**参数** - -* `datetime` — 要获取其年份和周数的日期或日期时间值。[`Date`](/sql-reference/data-types/date) 或 [`DateTime`](/sql-reference/data-types/datetime) -* `mode` — 可选。取值 `0` 到 `9`,用于决定一周的第一天以及周序号的范围。默认值为 `0`。 -* `timezone` — 可选。时区。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回由年份和周序号组合而成的整数值。[`UInt32`](/sql-reference/data-types/int-uint) - -**示例** - -**在不同 mode 下获取年-周组合** - -```sql title=Query -SELECT toDate('2016-12-27') AS date, toYearWeek(date) AS yearWeek0, toYearWeek(date,1) AS yearWeek1, toYearWeek(date,9) AS yearWeek9, toYearWeek(toDate('2022-01-01')) AS prev_yearWeek -``` - -```response title=Response -┌───────date─┬─yearWeek0─┬─yearWeek1─┬─yearWeek9─┬─prev_yearWeek─┐ -│ 2016-12-27 │ 201652 │ 201652 │ 201701 │ 202152 │ -└────────────┴───────────┴───────────┴───────────┴───────────────┘ -``` - - -## today - -首次引入于:v1.1 - -在查询分析阶段返回当前日期。等同于 `toDate(now())`。 - -**语法** - -```sql -today() -``` - -**别名**: `curdate`, `current_date` - -**参数** - -* 无。 - -**返回值** - -返回当前日期,类型为 [`Date`](/sql-reference/data-types/date)。 - -**示例** - -**使用示例** - -```sql title=Query -SELECT today() AS today, curdate() AS curdate, current_date() AS current_date FORMAT Pretty -``` - -```response title=Response -┏━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━━━┓ -┃ today ┃ curdate ┃ current_date ┃ -┡━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━┩ -│ 2025-03-03 │ 2025-03-03 │ 2025-03-03 │ -└────────────┴────────────┴──────────────┘ -``` - - -## yesterday - -引入于:v1.1 - -不接受任何参数,并在查询分析期间的某个时间点返回昨天的日期。 - -**语法** - -```sql -yesterday() -``` - -**参数** - -* 无。 - -**返回值** - -返回昨天的日期。[`Date`](/sql-reference/data-types/date) - -**示例** - -**获取昨天的日期** - -```sql title=Query -SELECT yesterday(); -SELECT today() - 1; -``` - -```response title=Response -┌─yesterday()─┐ -│ 2025-06-09 │ -└─────────────┘ -┌─minus(today(), 1)─┐ -│ 2025-06-09 │ -└───────────────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/distance-functions.md b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/distance-functions.md index c66db8f2313..e84fd33ce32 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/distance-functions.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/distance-functions.md @@ -7,625 +7,14 @@ keywords: ['距离函数', '范数', '距离', '向量'] doc_type: 'reference' --- - - # 距离函数 {/* - 下面标签的内部内容会在文档框架构建时,被 system.functions 自动生成的文档所替换。 - 请不要修改或删除这些标签。 + 以下标签内部的内容会在文档框架构建时被替换为 + 由 system.functions 生成的文档。请不要修改或移除这些标签。 参见:https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - -{/*AUTOGENERATED_START*/ } - -## L1Distance - -自 v21.11 引入 - -在 `L1` 空间(1-范数([出租车几何](https://en.wikipedia.org/wiki/Taxicab_geometry) 距离))中计算两点之间的距离(向量的元素作为坐标)。 - -**语法** - -```sql -L1Distance(vector1, vector2) -``` - -**别名**: `distanceL1` - -**参数** - -* `vector1` — 第一个向量。[`Tuple(T)`](/sql-reference/data-types/tuple) 或 [`Array(T)`](/sql-reference/data-types/array) -* `vector2` — 第二个向量。[`Tuple(T)`](/sql-reference/data-types/tuple) 或 [`Array(T)`](/sql-reference/data-types/array) - -**返回值** - -返回 1 范数距离。[`UInt32`](/sql-reference/data-types/int-uint) 或 [`Float64`](/sql-reference/data-types/float) - -**示例** - -**基本用法** - -```sql title=Query -SELECT L1Distance((1, 2), (2, 3)) -``` - -```response title=Response -┌─L1Distance((1, 2), (2, 3))─┐ -│ 2 │ -└────────────────────────────┘ -``` - - -## L1Norm - -引入版本:v21.11 - -计算向量中所有元素绝对值的和。 - -**语法** - -```sql -L1Norm(vector) -``` - -**别名**: `normL1` - -**参数** - -* `vector` — 由数值组成的向量或元组。[`Array(T)`](/sql-reference/data-types/array) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) - -**返回值** - -返回 L1 范数或 [taxicab geometry](https://en.wikipedia.org/wiki/Taxicab_geometry)(出租车几何)距离。[`UInt*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) - -**示例** - -**基本用法** - -```sql title=Query -SELECT L1Norm((1, 2)) -``` - -```response title=Response -┌─L1Norm((1, 2))─┐ -│ 3 │ -└────────────────┘ -``` - - -## L1Normalize - -自 v21.11 引入 - -在 `L1` 空间([出租车几何](https://en.wikipedia.org/wiki/Taxicab_geometry))中,计算给定向量(元组的元素为坐标)的单位向量。 - -**语法** - -```sql -L1Normalize(tuple) -``` - -**别名**: `normalizeL1` - -**参数** - -* `tuple` — 数值构成的元组。[`Tuple(T)`](/sql-reference/data-types/tuple) - -**返回值** - -返回单位向量。[`Tuple(Float64)`](/sql-reference/data-types/tuple) - -**示例** - -**基本用法** - -```sql title=Query -SELECT L1Normalize((1, 2)) -``` - -```response title=Response -┌─L1Normalize((1, 2))─────────────────────┐ -│ (0.3333333333333333,0.6666666666666666) │ -└─────────────────────────────────────────┘ -``` - - -## L2Distance - -引入版本:v21.11 - -计算欧几里得空间中两个点之间的距离(即[欧几里得距离](https://en.wikipedia.org/wiki/Euclidean_distance),向量的各元素为坐标)。 - -**语法** - -```sql -L2Distance(vector1, vector2) -``` - -**别名**: `distanceL2` - -**参数** - -* `vector1` — 第一个向量。[`Tuple(T)`](/sql-reference/data-types/tuple) 或 [`Array(T)`](/sql-reference/data-types/array) -* `vector2` — 第二个向量。[`Tuple(T)`](/sql-reference/data-types/array) 或 [`Array(T)`](/sql-reference/data-types/array) - -**返回值** - -返回 L2 范数距离。[`Float64`](/sql-reference/data-types/float) - -**示例** - -**基本用法** - -```sql title=Query -SELECT L2Distance((1, 2), (2, 3)) -``` - -```response title=Response -┌─L2Distance((1, 2), (2, 3))─┐ -│ 1.4142135623730951 │ -└────────────────────────────┘ -``` - - -## L2DistanceTransposed - -引入版本:v25.10 - -计算欧几里得空间中两点之间的近似欧几里得距离(向量的各分量表示点的坐标)([欧几里得距离](https://en.wikipedia.org/wiki/Euclidean_distance))。 - -**语法** - -```sql -L2DistanceTransposed(vector1, vector2, p) -``` - -**别名**: `distanceL2Transposed` - -**参数** - -* `vectors` — 向量。[`QBit(T, UInt64)`](/sql-reference/data-types/qbit) -* `reference` — 参考向量。[`Array(T)`](/sql-reference/data-types/array) -* `p` — 在距离计算中,从每个向量元素中使用的位数(1 到元素的位宽)。量化级别控制精度与速度之间的权衡。使用更少的位可加快 I/O 和计算速度,但精度会降低;使用更多的位则会提高精度,但以性能为代价。[`UInt`](/sql-reference/data-types/int-uint) - -**返回值** - -返回近似的 2-范数距离。[`Float64`](/sql-reference/data-types/float) - -**示例** - -**基本用法** - -```sql title=Query -CREATE TABLE qbit (id UInt32, vec QBit(Float64, 2)) ENGINE = Memory; -INSERT INTO qbit VALUES (1, [0, 1]); -SELECT L2DistanceTransposed(vec, array(1.0, 2.0), 16) FROM qbit;" -``` - -```response title=Response -┌─L2DistanceTransposed([0, 1], [1.0, 2.0], 16)─┐ -│ 1.4142135623730951 │ -└──────────────────────────────────────────────┘ -``` - - -## L2Norm - -自 v21.11 起引入 - -计算向量各元素平方和的平方根。 - -**语法** - -```sql -L2Norm(vector) -``` - -**别名**: `normL2` - -**参数** - -* `vector` — 数值向量或元组。[`Tuple(T)`](/sql-reference/data-types/tuple) 或 [`Array(T)`](/sql-reference/data-types/array) - -**返回值** - -返回 L2 范数或[欧几里得距离](https://en.wikipedia.org/wiki/Euclidean_distance)。[`UInt*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) - -**示例** - -**基础用法** - -```sql title=Query -SELECT L2Norm((1, 2)) -``` - -```response title=Response -┌───L2Norm((1, 2))─┐ -│ 2.23606797749979 │ -└──────────────────┘ -``` - - -## L2Normalize - -自 v21.11 引入 - -在欧几里得空间中(使用[欧几里得距离](https://en.wikipedia.org/wiki/Euclidean_distance))计算给定向量(元组各元素为其坐标)的单位向量。 - -**语法** - -```sql -L2Normalize(tuple) -``` - -**别名**: `normalizeL2` - -**参数** - -* `tuple` — 数值元组。[`Tuple(T)`](/sql-reference/data-types/tuple) - -**返回值** - -返回单位向量。[`Tuple(Float64)`](/sql-reference/data-types/tuple) - -**示例** - -**基本用法** - -```sql title=Query -SELECT L2Normalize((3, 4)) -``` - -```response title=Response -┌─L2Normalize((3, 4))─┐ -│ (0.6,0.8) │ -└─────────────────────┘ -``` - - -## L2SquaredDistance - -引入于:v22.7 - -计算两个向量对应元素之差的平方和。 - -**语法** - -```sql -L2SquaredDistance(vector1, vector2) -``` - -**别名**:`distanceL2Squared` - -**参数** - -* `vector1` — 第一个向量。[`Tuple(T)`](/sql-reference/data-types/tuple) 或 [`Array(T)`](/sql-reference/data-types/array) -* `vector2` — 第二个向量。[`Tuple(T)`](/sql-reference/data-types/array) 或 [`Array(T)`](/sql-reference/data-types/array) - -**返回值** - -返回两个向量对应元素之差的平方和。[`Float64`](/sql-reference/data-types/float) - -**示例** - -**基础用法** - -```sql title=Query -SELECT L2SquaredDistance([1, 2, 3], [0, 0, 0]) -``` - -```response title=Response -┌─L2SquaredDis⋯ [0, 0, 0])─┐ -│ 14 │ -└──────────────────────────┘ -``` - - -## L2SquaredNorm - -引入版本:v22.7 - -计算向量各元素平方和的平方根(即 [`L2Norm`](#L2Norm))的平方。 - -**语法** - -```sql -L2SquaredNorm(vector) -``` - -**别名**:`normL2Squared` - -**参数** - -* `vector` — 数值向量或元组。[`Array(T)`](/sql-reference/data-types/array) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) - -**返回值** - -返回 L2 范数的平方。[`UInt*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) - -**示例** - -**基本用法** - -```sql title=Query -SELECT L2SquaredNorm((1, 2)) -``` - -```response title=Response -┌─L2SquaredNorm((1, 2))─┐ -│ 5 │ -└───────────────────────┘ -``` - - -## LinfDistance - -引入于:v21.11 - -计算两个点在 `L_{inf}` 空间([最大范数]([https://en.wikipedia.org/wiki/Norm_(mathematics)#Maximum_norm_(special_case_of:_infinity_norm,_uniform_norm,_or_supremum_norm)))下的距离(向量的元素为坐标)。](https://en.wikipedia.org/wiki/Norm_\(mathematics\)#Maximum_norm_\(special_case_of:_infinity_norm,_uniform_norm,_or_supremum_norm\)))下的距离(向量的元素为坐标)。) - -**语法** - -```sql -LinfDistance(vector1, vector2) -``` - -**别名**: `distanceLinf` - -**参数** - -* `vector1` — 第一个向量。[`Tuple(T)`](/sql-reference/data-types/tuple) 或 [`Array(T)`](/sql-reference/data-types/array) -* `vector2` — 第二个向量。[`Tuple(T)`](/sql-reference/data-types/array) 或 [`Array(T)`](/sql-reference/data-types/array) - -**返回值** - -返回无穷范数距离。[`Float64`](/sql-reference/data-types/float) - -**示例** - -**基本用法** - -```sql title=Query -SELECT LinfDistance((1, 2), (2, 3)) -``` - -```response title=Response -┌─LinfDistance((1, 2), (2, 3))─┐ -│ 1 │ -└──────────────────────────────┘ -``` - - -## LinfNorm - -首次引入版本:v21.11 - -计算向量中各元素绝对值的最大值。 - -**语法** - -```sql -LinfNorm(vector) -``` - -**别名**: `normLinf` - -**参数** - -* `vector` — 数值向量或数值元组。[`Array(T)`](/sql-reference/data-types/array) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) - -**返回值** - -返回 Linf 范数或最大绝对值。[`Float64`](/sql-reference/data-types/float) - -**示例** - -**基本用法** - -```sql title=Query -SELECT LinfNorm((1, -2)) -``` - -```response title=Response -┌─LinfNorm((1, -2))─┐ -│ 2 │ -└───────────────────┘ -``` - - -## LinfNormalize - -引入版本:v21.11 - -在 `L_{inf}` 空间下,使用[最大范数](https://en.wikipedia.org/wiki/Norm_\(mathematics\)#Maximum_norm_\(special_case_of:_infinity_norm,_uniform_norm,_or_supremum_norm\)),计算给定向量(元组的各元素作为坐标)的单位向量。 - -**语法** - -```sql -LinfNormalize(tuple) -``` - -**别名**: `normalizeLinf` - -**参数** - -* `tuple` — 数值元组。[`Tuple(T)`](/sql-reference/data-types/tuple) - -**返回值** - -返回单位向量。[`Tuple(Float64)`](/sql-reference/data-types/tuple) - -**示例** - -**基本用法** - -```sql title=Query -SELECT LinfNormalize((3, 4)) -``` - -```response title=Response -┌─LinfNormalize((3, 4))─┐ -│ (0.75,1) │ -└───────────────────────┘ -``` - - -## LpDistance - -引入于:v21.11 - -在 `Lp` 空间中计算两点之间的距离(其中向量的元素为坐标,即 [p-范数距离](https://en.wikipedia.org/wiki/Norm_\(mathematics\)#p-norm))。 - -**语法** - -```sql -LpDistance(vector1, vector2, p) -``` - -**别名**: `distanceLp` - -**参数** - -* `vector1` — 第一个向量。[`Tuple(T)`](/sql-reference/data-types/tuple) 或 [`Array(T)`](/sql-reference/data-types/array) -* `vector2` — 第二个向量。[`Tuple(T)`](/sql-reference/data-types/tuple) 或 [`Array(T)`](/sql-reference/data-types/array) -* `p` — 幂指数。可选值:区间 `[1; inf)` 内的实数。[`UInt*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) - -**返回值** - -返回 p 范数距离。[`Float64`](/sql-reference/data-types/float) - -**示例** - -**基础用法** - -```sql title=Query -SELECT LpDistance((1, 2), (2, 3), 3) -``` - -```response title=Response -┌─LpDistance((1, 2), (2, 3), 3)─┐ -│ 1.2599210498948732 │ -└───────────────────────────────┘ -``` - - -## LpNorm - -自 v21.11 起提供 - -计算向量的 p 范数,即各元素绝对值的 p 次幂之和的 p 次方根。 - -特殊情况: - -* 当 p = 1 时,等价于 L1Norm(曼哈顿距离)。 -* 当 p = 2 时,等价于 L2Norm(欧氏距离)。 -* 当 p = ∞ 时,等价于 LinfNorm(最大范数)。 - -**语法** - -```sql -LpNorm(vector, p) -``` - -**别名**: `normLp` - -**参数** - -* `vector` — 数值向量或元组。[`Tuple(T)`](/sql-reference/data-types/tuple) 或 [`Array(T)`](/sql-reference/data-types/array) -* `p` — 幂指数。可以是区间 `[1; inf)` 内的任意实数。[`UInt*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) - -**返回值** - -返回 [Lp 范数](https://en.wikipedia.org/wiki/Norm_\(mathematics\)#p-norm)。[`Float64`](/sql-reference/data-types/float) - -**示例** - -**基本用法** - -```sql title=Query -SELECT LpNorm((1, -2), 2) -``` - -```response title=Response -┌─LpNorm((1, -2), 2)─┐ -│ 2.23606797749979 │ -└────────────────────┘ -``` - - -## LpNormalize - -引入自:v21.11 - -在 `Lp` 空间中使用 [p-范数](https://en.wikipedia.org/wiki/Norm_\(mathematics\)#p-norm),计算给定向量(元组的元素为各坐标)的单位向量。 - -**语法** - -```sql -LpNormalize(tuple, p) -``` - -**别名**:`normalizeLp` - -**参数** - -* `tuple` — 数值元组。[`Tuple(T)`](/sql-reference/data-types/tuple) -* `p` — 幂次。取值为区间 `[1; inf)` 内的任意数值。[`UInt*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) - -**返回值** - -返回单位向量。[`Tuple(Float64)`](/sql-reference/data-types/tuple) - -**示例** - -**用法示例** - -```sql title=Query -SELECT LpNormalize((3, 4), 5) -``` - -```response title=Response -┌─LpNormalize((3, 4), 5)──────────────────┐ -│ (0.7187302630182624,0.9583070173576831) │ -└─────────────────────────────────────────┘ -``` - - -## cosineDistance - -自 v1.1 起引入 - -计算两个向量之间的余弦距离(元组中的元素为坐标)。返回值越小,向量越相似。 - -**语法** - -```sql -cosineDistance(vector1, vector2) -``` - -**参数** - -* `vector1` — 第一个元组。[`Tuple(T)`](/sql-reference/data-types/tuple) 或 [`Array(T)`](/sql-reference/data-types/array) -* `vector2` — 第二个元组。[`Tuple(T)`](/sql-reference/data-types/tuple) 或 [`Array(T)`](/sql-reference/data-types/array) - -**返回值** - -返回 1 减去两个向量夹角余弦的结果值。[`Float64`](/sql-reference/data-types/float) - -**示例** - -**基本用法** - -```sql title=Query -SELECT cosineDistance((1, 2), (2, 3)); -``` - -```response title=Response -┌─cosineDistance((1, 2), (2, 3))─┐ -│ 0.007722123286332261 │ -└────────────────────────────────┘ -``` +{/*AUTOGENERGED_START*/ } {/*AUTOGENERATED_END*/ } diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/encoding-functions.md b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/encoding-functions.md index 24a4e696d88..58fa5eaf53b 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/encoding-functions.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/encoding-functions.md @@ -3,1098 +3,18 @@ description: '编码函数相关文档' sidebar_label: '编码' slug: /sql-reference/functions/encoding-functions title: '编码函数' -keywords: ['编码', '常规函数', 'encode', 'decode'] +keywords: ['编码', '常规函数', '编码', '解码'] doc_type: 'reference' --- - - # 编码函数 {/* - 以下标签中的内容会在文档框架构建时替换为 - 根据 system.functions 生成的文档。请不要修改或删除这些标签。 - 参见: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md + 下方标签中的内容会在文档框架构建期间替换为 + 从 system.functions 生成的文档。请不要修改或删除这些标签。 + 参见:https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## bech32Decode - -引入版本:v25.6 - -对由 bech32 或 bech32m 算法生成的 Bech32 地址字符串进行解码。 - -:::note -与编码函数不同,`Bech32Decode` 会自动处理带填充的 FixedString。 -::: - -**语法** - -```sql -bech32Decode(address) -``` - -**参数** - -* `address` — 要解码的 Bech32 字符串。[`String`](/sql-reference/data-types/string) 或 [`FixedString`](/sql-reference/data-types/fixedstring) - -**返回值** - -返回一个元组 `(hrp, data)`,其中包含用于编码该字符串的值。`data` 为二进制格式。[`Tuple(String, String)`](/sql-reference/data-types/tuple) - -**示例** - -**解码地址** - -```sql title=Query -SELECT tup.1 AS hrp, hex(tup.2) AS data FROM (SELECT bech32Decode('bc1w508d6qejxtdg4y5r3zarvary0c5xw7kj7gz7z') AS tup) -``` - -```response title=Response -bc 751E76E8199196D454941C45D1B3A323F1433BD6 -``` - -**测试网地址** - -```sql title=Query -SELECT tup.1 AS hrp, hex(tup.2) AS data FROM (SELECT bech32Decode('tb1w508d6qejxtdg4y5r3zarvary0c5xw7kzp034v') AS tup) -``` - -```response title=Response -tb 751E76E8199196D454941C45D1B3A323F1433BD6 -``` - - -## bech32Encode - -自 v25.6 起引入 - -使用 [Bech32 或 Bech32m](https://en.bitcoin.it/wiki/Bech32) 算法对二进制数据字符串及其人类可读部分(HRP)进行编码。 - -:::note -在使用 [`FixedString`](../data-types/fixedstring.md) 数据类型时,如果某个值没有完全填满其定义的长度,将会用空字符(null 字符)进行填充。 -对于 `hrp` 参数,`bech32Encode` 函数会自动处理这种情况,但对于 `data` 参数,值不能包含这些填充字符。 -因此,不建议对数据值使用 [`FixedString`](../data-types/fixedstring.md) 数据类型,除非能够确保它们的长度完全相同,并相应地将 `FixedString` 列的长度设置为该值。 -::: - -**语法** - -```sql -bech32Encode(hrp, data[, witver]) -``` - -**参数** - -* `hrp` — 一个由 `1 - 83` 个小写字符组成的字符串,用于指定代码的“human-readable part(人类可读部分)”。通常为 'bc' 或 'tb'。[`String`](/sql-reference/data-types/string) 或 [`FixedString`](/sql-reference/data-types/fixedstring) -* `data` — 要编码的二进制数据字符串。[`String`](/sql-reference/data-types/string) 或 [`FixedString`](/sql-reference/data-types/fixedstring) -* `witver` — 可选。见证版本(默认 = 1)。一个 `UInt*`,用于指定要运行的算法版本。`0` 对应 Bech32,`1` 或更大对应 Bech32m。[`UInt*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回一个 Bech32 地址字符串,由 human-readable part、一个始终为 '1' 的分隔符字符,以及数据部分组成。该字符串的长度不会超过 90 个字符。如果算法无法从输入中生成有效地址,则返回空字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**默认 Bech32m** - -```sql title=Query --- 当未提供见证版本时,默认为 1,即更新后的 Bech32m 算法。 -SELECT bech32Encode('bc', unhex('751e76e8199196d454941c45d1b3a323f1433bd6')) -``` - -```response title=Response -bc1w508d6qejxtdg4y5r3zarvary0c5xw7k8zcwmq -``` - -**Bech32 算法** - -```sql title=Query --- 见证版本为 0 将生成不同的地址字符串。 -SELECT bech32Encode('bc', unhex('751e76e8199196d454941c45d1b3a323f1433bd6'), 0) -``` - -```response title=Response -bc1w508d6qejxtdg4y5r3zarvary0c5xw7kj7gz7z -``` - -**自定义 HRP** - -```sql title=Query --- 虽然在 SegWit 地址格式中,只有 'bc'(主网)和 'tb'(测试网)是允许的 hrp 值, --- 但 Bech32 允许使用任何满足上述要求的 hrp。 -SELECT bech32Encode('abcdefg', unhex('751e76e8199196d454941c45d1b3a323f1433bd6'), 10) -``` - -```response title=Response -abcdefg1w508d6qejxtdg4y5r3zarvary0c5xw7k9rp8r4 -``` - - -## bin - -引入于:v21.8 - -根据不同类型,按照以下逻辑返回一个包含参数二进制表示形式的字符串: - -| Type | Description | -| -------------------------- | --------------------------------------------------------------------------------------------- | -| `(U)Int*` | 以从最高有效位到最低有效位(大端序或“人类可读”顺序)输出二进制位。输出时从最高有效的非零字节开始(省略前导零字节),但如果该字节的最高位为零,仍然为该字节输出完整的 8 位二进制数字。 | -| `Date` and `DateTime` | 格式化为对应的整数(`Date` 为自纪元(epoch)起的天数,`DateTime` 为 Unix 时间戳的值)。 | -| `String` and `FixedString` | 所有字节都直接编码为 8 位二进制数字。零字节不会被省略。 | -| `Float*` and `Decimal` | 按其在内存中的表示进行编码。由于我们使用的是小端序架构,因此按小端序进行编码。前导或尾随的零字节不会被省略。 | -| `UUID` | 按大端序顺序编码为字符串。 | - -**语法** - -```sql -bin(arg) -``` - -**参数** - -* `arg` — 要转换为二进制的值。[`String`](/sql-reference/data-types/string) 或 [`FixedString`](/sql-reference/data-types/fixedstring) 或 [`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) 或 [`Date`](/sql-reference/data-types/date) 或 [`DateTime`](/sql-reference/data-types/datetime) - -**返回值** - -返回参数二进制表示形式的字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**简单的整数** - -```sql title=Query -SELECT bin(14) -``` - -```response title=Response -┌─bin(14)──┐ -│ 00001110 │ -└──────────┘ -``` - -**Float32 浮点数** - -```sql title=Query -SELECT bin(toFloat32(number)) AS bin_presentation FROM numbers(15, 2) -``` - -```response title=Response -┌─bin_presentation─────────────────┐ -│ 00000000000000000111000001000001 │ -│ 00000000000000001000000001000001 │ -└──────────────────────────────────┘ -``` - -**Float64 浮点数** - -```sql title=Query -SELECT bin(toFloat64(number)) AS bin_presentation FROM numbers(15, 2) -``` - -```response title=Response -┌─bin_presentation─────────────────────────────────────────────────┐ -│ 0000000000000000000000000000000000000000000000000010111001000000 │ -│ 0000000000000000000000000000000000000000000000000011000001000000 │ -└──────────────────────────────────────────────────────────────────┘ -``` - -**UUID 转换** - -```sql title=Query -SELECT bin(toUUID('61f0c404-5cb3-11e7-907b-a6006ad3dba0')) AS bin_uuid -``` - -```response title=Response -┌─bin_uuid─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ -│ 01100001111100001100010000000100010111001011001100010001111001111001000001111011101001100000000001101010110100111101101110100000 │ -└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## bitPositionsToArray - -自 v21.7 引入 - -该函数返回无符号整数二进制表示中所有值为 1 的位的位置(按升序排列)。 -带符号的输入整数会先被转换为无符号整数。 - -**语法** - -```sql -bitPositionsToArray(arg) -``` - -**参数** - -* `arg` — 一个整数值。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回一个数组,数组元素为输入值二进制表示中所有为 1 的位的位置,按升序排列。[`Array(UInt64)`](/sql-reference/data-types/array) - -**示例** - -**单个位被设置为 1** - -```sql title=Query -SELECT bitPositionsToArray(toInt8(1)) AS bit_positions -``` - -```response title=Response -┌─bit_positions─┐ -│ [0] │ -└───────────────┘ -``` - -**所有比特位已置 1** - -```sql title=Query -SELECT bitPositionsToArray(toInt8(-1)) AS bit_positions -``` - -```response title=Response -┌─bit_positions─────────────┐ -│ [0, 1, 2, 3, 4, 5, 6, 7] │ -└───────────────────────────┘ -``` - - -## bitmaskToArray - -引入版本:v1.1 - -此函数将一个整数分解为若干个 2 的幂之和。 -这些 2 的幂以升序排列的数组形式返回。 - -**语法** - -```sql -bitmaskToArray(数字) -``` - -**参数** - -* `num` — 一个整数值。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回一个数组,其中包含按升序排列的 2 的幂,其和等于输入值。[`Array(UInt64)`](/sql-reference/data-types/array) - -**示例** - -**基础示例** - -```sql title=Query -SELECT bitmaskToArray(50) AS powers_of_two -``` - -```response title=Response -┌─powers_of_two───┐ -│ [2, 16, 32] │ -└─────────────────┘ -``` - -**单一 2 的幂值** - -```sql title=Query -SELECT bitmaskToArray(8) AS powers_of_two -``` - -```response title=Response -┌─powers_of_two─┐ -│ [8] │ -└───────────────┘ -``` - - -## bitmaskToList - -引入版本:v1.1 - -类似 bitmaskToArray,但返回的是由 2 的幂值组成、以逗号分隔的字符串。 - -**语法** - -```sql -bitmaskToList(数字) -``` - -**参数** - -* `num` — 整数。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回一个包含用逗号分隔的 2 的幂的字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**基本示例** - -```sql title=Query -SELECT bitmaskToList(50) AS powers_list -``` - -```response title=Response -┌─powers_list───┐ -│ 2, 16, 32 │ -└───────────────┘ -``` - - -## char - -引入版本:v20.1 - -返回一个长度等于传入参数个数的字符串,其中每个字节的值等于对应参数的值。接受多个数值类型的参数。 - -如果参数的值超出了 `UInt8` 数据类型的范围,则会被转换为 `UInt8`,在此过程中可能发生舍入和溢出。 - -**语法** - -```sql -char(num1[, num2[, ...]]) -``` - -**参数** - -* `num1[, num2[, num3 ...]]` — 按整数处理的数值参数。[`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) - -**返回值** - -返回由给定字节组成的字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**基本示例** - -```sql title=Query -SELECT char(104.1, 101, 108.9, 108.9, 111) AS hello; -``` - -```response title=Response -┌─hello─┐ -│ hello │ -└───────┘ -``` - -**构建任意编码** - -```sql title=Query --- 您可以通过传递相应的字节来构造任意编码的字符串。 --- 例如 UTF-8 -SELECT char(0xD0, 0xBF, 0xD1, 0x80, 0xD0, 0xB8, 0xD0, 0xB2, 0xD0, 0xB5, 0xD1, 0x82) AS hello; -``` - -```response title=Response -┌─hello──┐ -│ привет │ -└────────┘ -``` - - -## hex - -引入于:v1.1 - -根据不同类型,按以下逻辑返回一个包含参数十六进制表示形式的字符串: - -| Type | Description | -| -------------------------- | ------------------------------------------------------------------------------------------------------ | -| `(U)Int*` | 按从最高有效位到最低有效位的顺序(大端或“人类可读”顺序)输出十六进制数字(“半字节 / nibbles”)。从最高有效的非零字节开始(会省略前导零字节),但始终输出每个字节的两个数字,即使高位数字为零。 | -| `Date` and `DateTime` | 格式化为对应的整数(对于 `Date`,是自纪元起的天数;对于 `DateTime`,是 Unix 时间戳的值)。 | -| `String` and `FixedString` | 所有字节都直接编码为两个十六进制数字。零字节不会被省略。 | -| `Float*` and `Decimal` | 按其在内存中的表示进行编码。ClickHouse 在内部始终以小端格式表示这些值,因此也按小端方式进行编码。前导或尾随的零字节不会被省略。 | -| `UUID` | 按大端顺序编码为字符串。 | - -该函数使用大写字母 `A-F`,且不使用任何前缀(如 `0x`)或后缀(如 `h`)。 - -**语法** - -```sql -hex(arg) -``` - -**参数** - -* `arg` — 要转换为十六进制的值。[`String`](/sql-reference/data-types/string) 或 [`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) 或 [`Date`](/sql-reference/data-types/date) 或 [`DateTime`](/sql-reference/data-types/datetime) - -**返回值** - -返回一个以十六进制表示该参数的字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**简单整数** - -```sql title=Query -SELECT hex(1) -``` - -```response title=Response -01 -``` - -**Float32 浮点数** - -```sql title=Query -SELECT hex(toFloat32(number)) AS hex_presentation FROM numbers(15, 2) -``` - -```response title=Response -┌─hex_presentation─┐ -│ 00007041 │ -│ 00008041 │ -└──────────────────┘ -``` - -**Float64 浮点数** - -```sql title=Query -SELECT hex(toFloat64(number)) AS hex_presentation FROM numbers(15, 2) -``` - -```response title=Response -┌─hex_presentation─┐ -│ 0000000000002E40 │ -│ 0000000000003040 │ -└──────────────────┘ -``` - -**UUID 转换** - -```sql title=Query -SELECT lower(hex(toUUID('61f0c404-5cb3-11e7-907b-a6006ad3dba0'))) AS uuid_hex -``` - -```response title=Response -┌─uuid_hex─────────────────────────┐ -│ 61f0c4045cb311e7907ba6006ad3dba0 │ -└──────────────────────────────────┘ -``` - - -## hilbertDecode - -引入版本:v24.6 - -将 Hilbert 曲线索引解码回由无符号整数组成的元组,表示多维空间中的坐标。 - -与 `hilbertEncode` 函数一样,此函数有两种运行模式: - -* **简单** -* **扩展** - -**简单模式** - -接受最多 2 个无符号整数作为参数,并生成一个 `UInt64` 代码。 - -**扩展模式** - -接受一个范围掩码(元组)作为第一个参数,以及最多 2 个无符号整数作为 -其他参数。掩码中的每个数字用于配置对应参数左移的位数,从而在其范围内对参数进行 -有效缩放。 - -当你需要对范围(或基数)差异巨大的参数获得相似分布时,范围扩展会很有用。 -例如:'IP Address' `(0...FFFFFFFF)` 和 'Country code' `(0...FF)`。 -与编码函数相同,此模式最多支持 8 个数字。 - -**语法** - -```sql -hilbertDecode(tuple_size, code) -``` - -**参数** - -* `tuple_size` — 不大于 `2` 的整数值。[`UInt8/16/32/64`](/sql-reference/data-types/int-uint) 或 [`Tuple(UInt8/16/32/64)`](/sql-reference/data-types/tuple) -* `code` — `UInt64` 类型的编码值。[`UInt64`](/sql-reference/data-types/int-uint) - -**返回值** - -返回一个指定大小的元组。[`Tuple(UInt64)`](/sql-reference/data-types/tuple) - -**示例** - -**简单模式** - -```sql title=Query -SELECT hilbertDecode(2, 31) -``` - -```response title=Response -["3", "4"] -``` - -**单一参数** - -```sql title=Query --- 当只有一个参数时,其 Hilbert 编码始终就是该参数本身(作为元组)。 -SELECT hilbertDecode(1, 1) -``` - -```response title=Response -["1"] -``` - -**展开模式** - -```sql title=Query --- 当以单个参数传入一个指定位移位数的元组时,将按该元组指定的位数进行右移。 -SELECT hilbertDecode(tuple(2), 32768) -``` - -```response title=Response -["128"] -``` - -**列使用情况** - -```sql title=Query --- 首先创建表并插入数据 -CREATE TABLE hilbert_numbers( - n1 UInt32, - n2 UInt32 -) -ENGINE=MergeTree() -ORDER BY n1 SETTINGS index_granularity = 8192, index_granularity_bytes = '10Mi'; -insert into hilbert_numbers (*) values(1,2); - --- 使用列名而非常量作为函数参数 -SELECT untuple(hilbertDecode(2, hilbertEncode(n1, n2))) FROM hilbert_numbers; -``` - -```response title=Response -1 2 -``` - - -## hilbertEncode - -引入版本:v24.6 - -为一组无符号整数计算 Hilbert 曲线编码。 - -该函数有两种工作模式: - -* **简单模式** -* **扩展模式** - -**简单模式** - -接受最多 2 个无符号整数作为参数,并生成一个 UInt64 编码。 - -**扩展模式** - -接受一个范围掩码([Tuple](../../sql-reference/data-types/tuple.md))作为 -第一个参数,并将最多 2 个[无符号整数](../../sql-reference/data-types/int-uint.md) -作为其余参数。 - -掩码中的每个数字用于配置对应参数左移的位数,从而在其范围内按比例缩放该参数。 - -**语法** - -```sql --- 简化模式 -hilbertEncode(args) - --- 扩展模式 -hilbertEncode(range_mask, args) -``` - -**参数** - -* `args` — 至多两个 `UInt` 值或 `UInt` 类型的列。[`UInt8/16/32/64`](/sql-reference/data-types/int-uint) -* `range_mask` — 在扩展模式下,至多两个 `UInt` 值或 `UInt` 类型的列。[`UInt8/16/32/64`](/sql-reference/data-types/int-uint) - -**返回值** - -返回一个 `UInt64` 值。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**简单模式** - -```sql title=Query -SELECT hilbertEncode(3, 4) -``` - -```response title=Response -31 -``` - -**展开模式** - -```sql title=Query --- 当需要为范围(或基数)差异极大的参数实现相似的分布时,范围扩展会很有用。 --- 例如:'IP 地址'(0...FFFFFFFF)和'国家代码'(0...FF)。 --- 注意:元组大小必须等于其他参数的数量。 -SELECT hilbertEncode((10, 6), 1024, 16) -``` - -```response title=Response -4031541586602 -``` - -**单个参数** - -```sql title=Query --- 当仅传入一个非元组的单个参数时,函数会将该参数本身作为 Hilbert 索引返回, --- 因为不需要进行维度映射。 -SELECT hilbertEncode(1) -``` - -```response title=Response -1 -``` - -**展开的单参数形式** - -```sql title=Query --- 如果只提供一个参数,并使用元组指定位移位数,函数会 --- 按指定的位数将该参数左移。 -SELECT hilbertEncode(tuple(2), 128) -``` - -```response title=Response -512 -``` - -**列用法** - -```sql title=Query --- 首先创建表并插入一些数据 -CREATE TABLE hilbert_numbers( - n1 UInt32, - n2 UInt32 -) -ENGINE=MergeTree() -ORDER BY n1; -insert into hilbert_numbers (*) values(1, 2); - --- 使用列名而非常量作为函数参数 -SELECT hilbertEncode(n1, n2) FROM hilbert_numbers; -``` - -```response title=Response -13 -``` - - -## mortonDecode - -引入于:v24.6 - -将 Morton 编码(Z 曲线)解码为对应的无符号整数元组。 - -与 `mortonEncode` 函数一样,此函数有两种运行模式: - -* **简单** -* **扩展** - -**简单模式** - -第一个参数为结果元组的大小,第二个参数为编码值。 - -**扩展模式** - -第一个参数为范围掩码(元组),第二个参数为编码值。 -掩码中的每个数字用于配置范围收缩的倍数: - -* `1` - 不收缩 -* `2` - 2 倍收缩 -* `3` - 3 倍收缩 - ⋮ -* 最多到 8 倍收缩。 - -当参数的取值范围(或基数)差异很大,但仍希望它们具有相近的分布时,范围扩展会很有用。 -例如:“IP Address” `(0...FFFFFFFF)` 和 “Country code” `(0...FF)`。 -与编码函数一样,此功能最多只能处理 8 个数字。 - -**语法** - -```sql --- 简单模式 -mortonDecode(tuple_size, code) - --- 扩展模式 -mortonDecode(range_mask, code) -``` - -**参数** - -* `tuple_size` — 不大于 8 的整数值。[`UInt8/16/32/64`](/sql-reference/data-types/int-uint) -* `range_mask` — 在扩展模式下,用于配置每个参数的掩码。该掩码是一个无符号整数的元组。掩码中的每个数值用于配置区间收缩的程度。[`Tuple(UInt8/16/32/64)`](/sql-reference/data-types/tuple) -* `code` — UInt64 代码值。[`UInt64`](/sql-reference/data-types/int-uint) - -**返回值** - -返回一个指定大小的元组。[`Tuple(UInt64)`](/sql-reference/data-types/tuple) - -**示例** - -**简单模式** - -```sql title=Query -SELECT mortonDecode(3, 53) -``` - -```response title=Response -["1", "2", "3"] -``` - -**单个参数** - -```sql title=Query -SELECT mortonDecode(1, 1) -``` - -```response title=Response -["1"] -``` - -**扩展模式:缩减一个参数** - -```sql title=Query -SELECT mortonDecode(tuple(2), 32768) -``` - -```response title=Response -["128"] -``` - -**列使用情况** - -```sql title=Query --- 首先创建表并写入一些数据 -CREATE TABLE morton_numbers( - n1 UInt32, - n2 UInt32, - n3 UInt16, - n4 UInt16, - n5 UInt8, - n6 UInt8, - n7 UInt8, - n8 UInt8 -) -ENGINE=MergeTree() -ORDER BY n1; -INSERT INTO morton_numbers (*) values(1, 2, 3, 4, 5, 6, 7, 8); - --- 将列名用作函数参数,而不是使用常量 -SELECT untuple(mortonDecode(8, mortonEncode(n1, n2, n3, n4, n5, n6, n7, n8))) FROM morton_numbers; -``` - -```response title=Response -1 2 3 4 5 6 7 8 -``` - - -## mortonEncode - -引入于:v24.6 - -为一组无符号整数计算 Morton 编码(Z 曲线,ZCurve)。 - -该函数有两种运行模式: - -* **简单模式** -* *扩展模式** - -**简单模式** - -最多接受 8 个无符号整数作为参数,并生成一个 `UInt64` 编码。 - -**扩展模式** - -接受一个范围掩码([Tuple](../data-types/tuple.md))作为第一个参数,以及最多 8 个[无符号整数](../data-types/int-uint.md)作为其余参数。 - -掩码中的每个数字用于配置对应维度的范围扩展倍数: - -* 1 - 不扩展 -* 2 - 2 倍扩展 -* 3 - 3 倍扩展 - ⋮ -* 最多 8 倍扩展。 - -**语法** - -```sql --- 简化模式 -mortonEncode(args) - --- 扩展模式 -mortonEncode(range_mask, args) -``` - -**参数** - -* `args` — 最多包含 8 个无符号整数或上述类型的列。[`UInt8/16/32/64`](/sql-reference/data-types/int-uint) -* `range_mask` — 在扩展模式下,用于指定每个参数的掩码。该掩码是由 `1` - `8` 的无符号整数组成的元组。掩码中的每个数字用于配置区间收缩的程度。[`Tuple(UInt8/16/32/64)`](/sql-reference/data-types/tuple) - -**返回值** - -返回一个 `UInt64` 编码值。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**简单模式** - -```sql title=Query -SELECT mortonEncode(1, 2, 3) -``` - -```response title=Response -53 -``` - -**展开模式** - -```sql title=Query --- 当你需要让取值范围(或基数)差异巨大的参数获得相似分布时,范围扩展会很有帮助 --- 例如:'IP Address' (0...FFFFFFFF) 和 'Country code' (0...FF)。 --- 注意:元组(Tuple)的大小必须等于其他参数的数量。 -SELECT mortonEncode((1,2), 1024, 16) -``` - -```response title=Response -1572864 -``` - -**单个参数** - -```sql title=Query --- 单个参数的 Morton 编码始终是参数本身 -SELECT mortonEncode(1) -``` - -```response title=Response -1 -``` - -**单参数扩展形式** - -```sql title=Query -SELECT mortonEncode(tuple(2), 128) -``` - -```response title=Response -32768 -``` - -**列使用情况** - -```sql title=Query --- 首先创建表并插入一些数据 -CREATE TABLE morton_numbers( - n1 UInt32, - n2 UInt32, - n3 UInt16, - n4 UInt16, - n5 UInt8, - n6 UInt8, - n7 UInt8, - n8 UInt8 -) -ENGINE=MergeTree() -ORDER BY n1; -INSERT INTO morton_numbers (*) values(1, 2, 3, 4, 5, 6, 7, 8); - --- 使用列名而不是常量作为函数参数 -SELECT mortonEncode(n1, n2, n3, n4, n5, n6, n7, n8) FROM morton_numbers; -``` - -```response title=Response -2155374165 -``` - - -## sqidDecode - -首次引入于:v24.1 - -将一个 [sqid](https://sqids.org/) 解码还原为数字数组。 - -**语法** - -```sql -sqidDecode(sqid) -``` - -**参数** - -* `sqid` — 要解码的 sqid。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回由 `sqid` 解码得到的数字数组。[`Array(UInt64)`](/sql-reference/data-types/array) - -**示例** - -**使用示例** - -```sql title=Query -SELECT sqidDecode('gXHfJ1C6dN'); -``` - -```response title=Response -┌─sqidDecode('gXHfJ1C6dN')─────┐ -│ [1, 2, 3, 4, 5] │ -└──────────────────────────────┘ -``` - - -## sqidEncode - -自 v24.1 起引入 - -将数字转换为 [sqid](https://sqids.org/),一种类似 YouTube 的 ID 字符串。 - -**语法** - -```sql -sqidEncode(n1[, n2, ...]) -``` - -**别名**:`sqid` - -**参数** - -* `n1[, n2, ...]` — 任意数量的数字。[`UInt8/16/32/64`](/sql-reference/data-types/int-uint) - -**返回值** - -返回一个哈希 ID 字符串 [`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT sqidEncode(1, 2, 3, 4, 5); -``` - -```response title=Response -┌─sqidEncode(1, 2, 3, 4, 5)─┐ -│ gXHfJ1C6dN │ -└───────────────────────────┘ -``` - - -## unbin - -引入于:v21.8 - -将参数中的每一对二进制数字解释为一个数值,并将其转换为该数值所表示的字节。该函数执行与 `bin` 相反的操作。 - -对于数值型参数,`unbin()` 不会返回 `bin()` 的逆结果。如果你希望将结果转换为数值,可以使用 `reverse` 和 `reinterpretAs` 函数。 - -:::note -如果在 `clickhouse-client` 中调用 `unbin`,二进制字符串将以 UTF-8 方式显示。 -::: - -支持二进制数字 `0` 和 `1`。二进制数字的位数不必是 8 的倍数。如果参数字符串包含二进制数字以外的任何内容,其结果未定义(不会抛出异常)。 - -**语法** - -```sql -unbin(arg) -``` - -**参数** - -* `arg` — 一个由任意数量二进制位组成的字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回一个二进制字符串(BLOB)。[`String`](/sql-reference/data-types/string) - -**示例** - -**基本用法** - -```sql title=Query -SELECT UNBIN('001100000011000100110010'), UNBIN('0100110101111001010100110101000101001100') -``` - -```response title=Response -┌─unbin('001100000011000100110010')─┬─unbin('0100110101111001010100110101000101001100')─┐ -│ 012 │ MySQL │ -└───────────────────────────────────┴───────────────────────────────────────────────────┘ -``` - -**转换为数值** - -```sql title=Query -SELECT reinterpretAsUInt64(reverse(unbin('1110'))) AS num -``` - -```response title=Response -┌─num─┐ -│ 14 │ -└─────┘ -``` - - -## unhex - -引入版本:v1.1 - -执行与 [`hex`](#hex) 相反的操作。它将参数中的每一对十六进制数字解释为一个数值,并将其转换为该数值所表示的字节。返回值是一个二进制字符串(BLOB)。 - -如果你希望将结果转换为数值,可以使用 `reverse` 和 `reinterpretAs` 函数。 - -:::note -`clickhouse-client` 将字符串解释为 UTF-8。 -这可能会导致 `hex` 返回的值在显示时与预期不符。 -::: - -同时支持大写和小写字母 `A-F`。 -十六进制数字的数量不必为偶数。 -如果是奇数,最后一个数字会被解释为 `00-0F` 字节中最低有效的半字节。 -如果参数字符串包含十六进制数字以外的任何内容,将返回某种依赖实现的结果(不会抛出异常)。 -对于数值类型参数,unhex() 不会执行 hex(N) 的逆运算。 - -**语法** - -```sql -unhex(arg) -``` - -**参数** - -* `arg` — 一个包含任意数量的十六进制数字的字符串。[`String`](/sql-reference/data-types/string) 或 [`FixedString`](/sql-reference/data-types/fixedstring) - -**返回值** - -返回一个二进制字符串(BLOB)。[`String`](/sql-reference/data-types/string) - -**示例** - -**基本用法** - -```sql title=Query -SELECT unhex('303132'), UNHEX('4D7953514C') -``` - -```response title=Response -┌─unhex('303132')─┬─unhex('4D7953514C')─┐ -│ 012 │ MySQL │ -└─────────────────┴─────────────────────┘ -``` - -**转换为数值** - -```sql title=Query -SELECT reinterpretAsUInt64(reverse(unhex('FFF'))) AS num -``` - -```response title=Response -┌──num─┐ -│ 4095 │ -└──────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/encryption-functions.md b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/encryption-functions.md index 125694029a6..89c5d85d7cc 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/encryption-functions.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/encryption-functions.md @@ -1,395 +1,26 @@ --- -description: '加密函数参考文档' +description: '加密函数文档' sidebar_label: '加密' slug: /sql-reference/functions/encryption-functions title: '加密函数' -keywords: ['encryption', 'regular functions', 'encrypt', 'decrypt'] +keywords: ['加密', '常规函数', '加密', '解密'] doc_type: 'reference' --- - - # 加密函数 -这些函数使用 AES(高级加密标准)算法对数据进行加密和解密。 +这些函数使用 AES(Advanced Encryption Standard,高级加密标准)算法对数据进行加解密。 -密钥长度取决于加密模式:在 `-128-`、`-196-` 和 `-256-` 模式下,分别为 `16`、`24` 和 `32` 字节。 +密钥长度取决于所选加密模式:对于 `-128-`、`-196-` 和 `-256-` 模式,长度分别为 `16`、`24` 和 `32` 字节。 -初始化向量的长度始终为 16 字节(超过 16 字节的部分会被忽略)。 +初始化向量(IV)的长度始终为 16 字节(超出 16 字节的部分会被忽略)。 {/* - 以下标签内的内容会在文档框架构建时被替换为 + 下面标签内的内容会在文档框架构建期间被替换为 由 system.functions 生成的文档。请不要修改或删除这些标签。 - 参见:https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md + 请参阅: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## aes_decrypt_mysql - -自 v20.12 版本引入 - -解密由 MySQL 的 [`AES_ENCRYPT`](https://dev.mysql.com/doc/refman/8.0/en/encryption-functions.html#function_aes-encrypt) 函数加密的数据。 - -对于相同的输入,生成的明文与 [`decrypt`](#decrypt) 相同。 -当 `key` 或 `iv` 长于正常长度时,`aes_decrypt_mysql` 的行为与 MySQL 的 `aes_decrypt` 保持一致,即对 `key` 进行“折叠”处理,并忽略 `iv` 多出的比特位。 - -支持以下解密模式: - -* aes-128-ecb, aes-192-ecb, aes-256-ecb -* aes-128-cbc, aes-192-cbc, aes-256-cbc -* aes-128-cfb128 -* aes-128-ofb, aes-192-ofb, aes-256-ofb - -**语法** - -```sql -aes_decrypt_mysql(mode, ciphertext, key[, iv]) -``` - -**参数** - -* `mode` — 解密模式。[`String`](/sql-reference/data-types/string) -* `ciphertext` — 需要解密的密文。[`String`](/sql-reference/data-types/string) -* `key` — 解密密钥。[`String`](/sql-reference/data-types/string) -* `iv` — 可选。初始化向量。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回解密后的字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**解密 MySQL 数据** - -```sql title=Query --- 解密之前使用 MySQL 加密的数据: -mysql> SET block_encryption_mode='aes-256-ofb'; -查询成功,0 行受影响 (0.00 秒) - -mysql> SELECT aes_encrypt('Secret', '123456789101213141516171819202122', 'iviviviviviviviv123456') as ciphertext; -+------------------------+ -| ciphertext | -+------------------------+ -| 0x24E9E4966469 | -+------------------------+ -1 行结果 (0.00 秒) - -SELECT aes_decrypt_mysql('aes-256-ofb', unhex('24E9E4966469'), '123456789101213141516171819202122', 'iviviviviviviviv123456') AS plaintext -``` - -```response title=Response -┌─plaintext─┐ -│ 秘密 │ -└───────────┘ -``` - - -## aes_encrypt_mysql - -引入版本:v20.12 - -以与 MySQL 的 `AES_ENCRYPT` 函数相同的方式对文本进行加密。 -生成的密文可以通过 MySQL 的 `AES_DECRYPT` 函数解密。 -在相同输入下,生成与 `encrypt` 函数相同的密文。 -当 `key` 或 `iv` 长度超过通常长度时,`aes_encrypt_mysql` 的行为将与 MySQL 的 `aes_encrypt` 保持一致,即对 `key` 进行“折叠”处理,并忽略 `iv` 多余的比特。 - -支持的加密模式有: - -* aes-128-ecb, aes-192-ecb, aes-256-ecb -* aes-128-cbc, aes-192-cbc, aes-256-cbc -* aes-128-ofb, aes-192-ofb, aes-256-ofb - -**语法** - -```sql -aes_encrypt_mysql(mode, plaintext, key[, iv]) -``` - -**参数** - -* `mode` — 加密模式。[`String`](/sql-reference/data-types/string) -* `plaintext` — 需要加密的文本。[`String`](/sql-reference/data-types/string) -* `key` — 加密密钥。如果密钥长度超过 `mode` 要求,将执行 MySQL 特有的密钥折叠处理。[`String`](/sql-reference/data-types/string) -* `iv` — 可选。初始化向量。仅前 16 个字节会被使用。[`String`](/sql-reference/data-types/string) - -**返回值** - -密文的二进制字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**等值输入比较** - -```sql title=Query --- 给定相同的输入,encrypt 和 aes_encrypt_mysql 生成相同的密文: -SELECT encrypt('aes-256-ofb', 'Secret', '12345678910121314151617181920212', 'iviviviviviviviv') = aes_encrypt_mysql('aes-256-ofb', 'Secret', '12345678910121314151617181920212', 'iviviviviviviviv') AS ciphertexts_equal; -``` - -```response title=Response -┌─ciphertexts_equal─┐ -│ 1 │ -└───────────────────┘ -``` - -**使用过长密钥时加密失败** - -```sql title=Query --- 但当密钥或初始化向量长度超过预期时,encrypt 会失败: -SELECT encrypt('aes-256-ofb', 'Secret', '123456789101213141516171819202122', 'iviviviviviviviv123'); -``` - -```response title=Response -从服务器收到异常(版本 22.6.1): -代码:36. DB::Exception: 从 localhost:9000 收到。DB::Exception: 密钥大小无效:实际为 33,期望为 32:处理 encrypt('aes-256-ofb', 'Secret', '123456789101213141516171819202122', 'iviviviviviviviv123') 时发生错误。 -``` - -**MySQL 兼容性** - -```sql title=Query --- aes_encrypt_mysql 生成与 MySQL 兼容的输出: -SELECT hex(aes_encrypt_mysql('aes-256-ofb', 'Secret', '123456789101213141516171819202122', 'iviviviviviviviv123')) AS ciphertext; -``` - -```response title=Response -┌─密文───┐ -│ 24E9E4966469 │ -└──────────────┘ -``` - -**更长的 IV 也会产生相同的结果** - -```sql title=Query --- 注意即使提供更长的 IV 也会产生相同的结果 -SELECT hex(aes_encrypt_mysql('aes-256-ofb', 'Secret', '123456789101213141516171819202122', 'iviviviviviviviv123456')) AS ciphertext -``` - -```response title=Response -┌─密文───┐ -│ 24E9E4966469 │ -└──────────────┘ -``` - - -## decrypt - -自 v20.12 引入 - -此函数使用以下模式对经 AES 加密的二进制字符串进行解密: - -* aes-128-ecb, aes-192-ecb, aes-256-ecb -* aes-128-cbc, aes-192-cbc, aes-256-cbc -* aes-128-ofb, aes-192-ofb, aes-256-ofb -* aes-128-gcm, aes-192-gcm, aes-256-gcm -* aes-128-ctr, aes-192-ctr, aes-256-ctr -* aes-128-cfb, aes-128-cfb1, aes-128-cfb8 - -**语法** - -```sql -decrypt(mode, ciphertext, key[, iv, aad]) -``` - -**参数** - -* `mode` — 解密模式。[`String`](/sql-reference/data-types/string) -* `ciphertext` — 待解密的密文。[`String`](/sql-reference/data-types/string) -* `key` — 解密密钥。[`String`](/sql-reference/data-types/string) -* `iv` — 初始化向量。对 `-gcm` 模式必需,对其他模式可选。[`String`](/sql-reference/data-types/string) -* `aad` — 附加认证数据。如果该值不正确,将无法解密。仅在 `-gcm` 模式下生效,在其他模式下会抛出异常。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回解密后的明文。[`String`](/sql-reference/data-types/string) - -**示例** - -**正确解密已加密的数据** - -```sql title=Query --- 重用加密函数示例中的表 -SELECT comment, hex(secret) FROM encryption_test; -``` - -```response title=Response -┌─comment──────────────┬─hex(secret)──────────────────────────────────┐ -│ aes-256-gcm │ A8A3CCBC6426CFEEB60E4EAE03D3E94204C1B09E0254 │ -│ aes-256-gcm 带 AAD │ A8A3CCBC6426D9A1017A0A932322F1852260A4AD6837 │ -└──────────────────────┴──────────────────────────────────────────────┘ -┌─comment──────────────────────────┬─hex(secret)──────────────────────┐ -│ aes-256-ofb 不带 IV │ B4972BDC4459 │ -│ aes-256-ofb 不带 IV,使用不同密钥 │ 2FF57C092DC9 │ -│ aes-256-ofb 带 IV │ 5E6CB398F653 │ -│ aes-256-cbc 不带 IV │ 1BC0629A92450D9E73A00E7D02CF4142 │ -└──────────────────────────────────┴──────────────────────────────────┘ -``` - -**对加密数据进行错误解密** - -```sql title=Query -SELECT comment, decrypt('aes-256-cfb128', secret, '12345678910121314151617181920212') AS plaintext FROM encryption_test -``` - -```response title=Response --- 注意,只有部分数据被正确解密,其余部分显示为乱码,这是因为加密时使用的 `mode`、`key` 或 `iv` 参数不同所致。 -┌─comment──────────────┬─plaintext──┐ -│ aes-256-gcm │ OQ�E - �t�7T�\���\� │ -│ aes-256-gcm with AAD │ OQ�E - �\��si����;�o�� │ -└──────────────────────┴────────────┘ -┌─comment──────────────────────────┬─plaintext─┐ -│ aes-256-ofb no IV │ Secret │ -│ aes-256-ofb no IV, different key │ �4� - � │ -│ aes-256-ofb with IV │ ���6�~ │ -│aes-256-cbc no IV │ �2*4�h3c�4w��@ -└──────────────────────────────────┴───────────┘ -``` - - -## encrypt - -自 v20.12 起引入 - -使用 AES 按以下任一模式将明文加密为密文: - -* aes-128-ecb, aes-192-ecb, aes-256-ecb -* aes-128-cbc, aes-192-cbc, aes-256-cbc -* aes-128-ofb, aes-192-ofb, aes-256-ofb -* aes-128-gcm, aes-192-gcm, aes-256-gcm -* aes-128-ctr, aes-192-ctr, aes-256-ctr -* aes-128-cfb, aes-128-cfb1, aes-128-cfb8 - -**语法** - -```sql -encrypt(mode, plaintext, key[, iv, aad]) -``` - -**参数** - -* `mode` — 加密模式。[`String`](/sql-reference/data-types/string) -* `plaintext` — 需要加密的文本。[`String`](/sql-reference/data-types/string) -* `key` — 加密密钥。[`String`](/sql-reference/data-types/string) -* `iv` — 初始化向量。对于 `-gcm` 模式必需,其他模式可选。[`String`](/sql-reference/data-types/string) -* `aad` — 附加认证数据。它本身不会被加密,但会影响解密。仅在 `-gcm` 模式下生效,其他模式下会抛出异常。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回二进制字符串形式的密文。[`String`](/sql-reference/data-types/string) - -**示例** - -**加密示例** - -```sql title=Query -CREATE TABLE encryption_test -( - `comment` String, - `secret` String -) -ENGINE = MergeTree; - -INSERT INTO encryption_test VALUES -('aes-256-ofb 无 IV', encrypt('aes-256-ofb', 'Secret', '12345678910121314151617181920212')), -('aes-256-ofb 无 IV,使用不同密钥', encrypt('aes-256-ofb', 'Secret', 'keykeykeykeykeykeykeykeykeykeyke')), -('aes-256-ofb 带 IV', encrypt('aes-256-ofb', 'Secret', '12345678910121314151617181920212', 'iviviviviviviviv')), -('aes-256-cbc 无 IV', encrypt('aes-256-cbc', 'Secret', '12345678910121314151617181920212')); - -SELECT comment, hex(secret) FROM encryption_test; -``` - -```response title=Response -┌─comment──────────────────────────┬─hex(secret)──────────────────────┐ -│ aes-256-ofb 无初始化向量 │ B4972BDC4459 │ -│ aes-256-ofb 无初始化向量,使用不同密钥 │ 2FF57C092DC9 │ -│ aes-256-ofb 带初始化向量 │ 5E6CB398F653 │ -│ aes-256-cbc 无初始化向量 │ 1BC0629A92450D9E73A00E7D02CF4142 │ -└──────────────────────────────────┴──────────────────────────────────┘ -``` - -**GCM 模式示例** - -```sql title=Query -INSERT INTO encryption_test VALUES -('aes-256-gcm', encrypt('aes-256-gcm', 'Secret', '12345678910121314151617181920212', 'iviviviviviviviv')), - -('aes-256-gcm 附加认证数据', encrypt('aes-256-gcm', 'Secret', '12345678910121314151617181920212', 'iviviviviviviviv', 'aad')); - -SELECT comment, hex(secret) FROM encryption_test WHERE comment LIKE '%gcm%'; -``` - -```response title=Response -┌─comment──────────────┬─hex(secret)──────────────────────────────────┐ -│ aes-256-gcm │ A8A3CCBC6426CFEEB60E4EAE03D3E94204C1B09E0254 │ -│ aes-256-gcm 带 AAD │ A8A3CCBC6426D9A1017A0A932322F1852260A4AD6837 │ -└──────────────────────┴──────────────────────────────────────────────┘ -``` - - -## tryDecrypt - -自 v22.10 起引入 - -与 `decrypt` 函数类似,但在使用错误的密钥导致解密失败时返回 `NULL`。 - -**语法** - -```sql -tryDecrypt(mode, ciphertext, key[, iv, aad]) -``` - -**参数** - -* `mode` — 解密模式。[`String`](/sql-reference/data-types/string) -* `ciphertext` — 待解密的密文。[`String`](/sql-reference/data-types/string) -* `key` — 解密密钥。[`String`](/sql-reference/data-types/string) -* `iv` — 可选。初始化向量。在 `-gcm` 模式下必需,在其他模式下可选。[`String`](/sql-reference/data-types/string) -* `aad` — 可选。附加的认证数据。如果该值不正确,将无法完成解密。仅在 `-gcm` 模式下生效,在其他模式下会抛出异常。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回解密后的字符串,如果解密失败则返回 `NULL`。[`Nullable(String)`](/sql-reference/data-types/nullable) - -**示例** - -**创建表并插入数据** - -```sql title=Query --- 创建一个表,其中 user_id 是唯一用户 ID,encrypted 是加密字符串字段,iv 是解密/加密的初始向量。 --- 假设用户知道自己的 ID 和解密该加密字段的密钥: -CREATE TABLE decrypt_null -( - dt DateTime, - user_id UInt32, - encrypted String, - iv String -) -ENGINE = MergeTree; - --- 插入一些数据: -INSERT INTO decrypt_null VALUES -('2022-08-02 00:00:00', 1, encrypt('aes-256-gcm', 'value1', 'keykeykeykeykeykeykeykeykeykey01', 'iv1'), 'iv1'), -('2022-09-02 00:00:00', 2, encrypt('aes-256-gcm', 'value2', 'keykeykeykeykeykeykeykeykeykey02', 'iv2'), 'iv2'), -('2022-09-02 00:00:01', 3, encrypt('aes-256-gcm', 'value3', 'keykeykeykeykeykeykeykeykeykey03', 'iv3'), 'iv3'); - --- 尝试使用单个密钥解密 -SELECT - dt, - user_id, - tryDecrypt('aes-256-gcm', encrypted, 'keykeykeykeykeykeykeykeykeykey02', iv) AS value -FROM decrypt_null -ORDER BY user_id ASC -``` - -```response title=Response -┌──────────────────dt─┬─user_id─┬─value──┐ -│ 2022-08-02 00:00:00 │ 1 │ ᴺᵁᴸᴸ │ -│ 2022-09-02 00:00:00 │ 2 │ value2 │ -│ 2022-09-02 00:00:01 │ 3 │ ᴺᵁᴸᴸ │ -└─────────────────────┴─────────┴────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/ext-dict-functions.md b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/ext-dict-functions.md index 7dd7f16b0fb..bea268f7d0b 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/ext-dict-functions.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/ext-dict-functions.md @@ -1,26 +1,22 @@ --- -description: '字典函数文档' +description: '字典相关函数文档' sidebar_label: '字典' slug: /sql-reference/functions/ext-dict-functions -title: '用于处理字典的函数' +title: '字典相关函数' doc_type: 'reference' --- - - -# 用于操作字典的函数 +# 用于处理字典的函数 :::note -对于通过 [DDL 查询](../../sql-reference/statements/create/dictionary.md) 创建的字典,`dict_name` 参数必须完整写成 `.`。否则,将使用当前数据库。 +对于使用 [DDL 查询](../../sql-reference/statements/create/dictionary.md) 创建的字典,`dict_name` 参数必须完整写为 `.`。否则,将使用当前数据库。 ::: -有关连接和配置字典的信息,请参阅 [字典](../../sql-reference/dictionaries/index.md)。 - - +有关连接和配置字典的更多信息,请参阅 [Dictionaries](../../sql-reference/dictionaries/index.md)。 -## dictGet, dictGetOrDefault, dictGetOrNull +## dictGet、dictGetOrDefault、dictGetOrNull -用于从字典中获取值。 +从字典中检索值。 ```sql dictGet('dict_name', attr_names, id_expr) @@ -30,35 +26,35 @@ dictGetOrNull('dict_name', attr_name, id_expr) **参数** -* `dict_name` — 字典名称。[String literal](/sql-reference/syntax#string)。 -* `attr_names` — 字典中列的名称,[String literal](/sql-reference/syntax#string),或列名组成的元组,[Tuple](/sql-reference/data-types/tuple)([String literal](/sql-reference/syntax#string)。 -* `id_expr` — 键值表达式。[Expression](/sql-reference/syntax#expressions),返回字典键类型的值,或根据字典配置返回 [Tuple](../data-types/tuple.md) 类型的值。 -* `default_value_expr` — 当字典中不包含键为 `id_expr` 的行时返回的值。[Expression](/sql-reference/syntax#expressions) 或 [Tuple](../data-types/tuple.md)([Expression](/sql-reference/syntax#expressions)),返回使用为 `attr_names` 属性配置的数据类型的值(或多个值)。 +* `dict_name` — 字典名称。[字符串字面量](/sql-reference/syntax#string)。 +* `attr_names` — 字典列的名称([字符串字面量](/sql-reference/syntax#string)),或由列名组成的元组 [Tuple](/sql-reference/data-types/tuple)([字符串字面量](/sql-reference/syntax#string))。 +* `id_expr` — 键值。[Expression](/sql-reference/syntax#expressions) 返回与字典键类型相同的值,或返回 [Tuple](../data-types/tuple.md) 类型的值,视字典配置而定。 +* `default_value_expr` — 当字典中不包含具有 `id_expr` 键的行时返回的值。[Expression](/sql-reference/syntax#expressions) 或 [Tuple](../data-types/tuple.md)([Expression](/sql-reference/syntax#expressions)),返回值(或一组值)的数据类型与为 `attr_names` 属性配置的数据类型一致。 **返回值** -* 如果 ClickHouse 按[属性的数据类型](/sql-reference/dictionaries#dictionary-key-and-fields)成功解析属性值,函数会返回与 `id_expr` 对应的字典属性的值。 +* 如果 ClickHouse 能按[该属性的数据类型](/sql-reference/dictionaries#dictionary-key-and-fields)成功解析该属性,这些函数会返回与 `id_expr` 对应的字典属性值。 -* 如果字典中不存在与 `id_expr` 对应的键,则: +* 如果在字典中找不到与 `id_expr` 对应的键,则: - * `dictGet` 返回在字典配置中为该属性指定的 `` 元素的内容。 + * `dictGet` 返回字典配置中为该属性指定的 `` 元素的内容。 * `dictGetOrDefault` 返回作为 `default_value_expr` 参数传入的值。 - * `dictGetOrNull` 在未在字典中找到键时返回 `NULL`。 + * `dictGetOrNull` 在字典中未找到键时返回 `NULL`。 -如果 ClickHouse 无法解析属性值,或该值与属性数据类型不匹配,则会抛出异常。 +如果 ClickHouse 无法解析属性值或属性值与属性数据类型不匹配,ClickHouse 将抛出异常。 **简单键字典示例** -创建一个名为 `ext-dict-test.csv` 的文本文件,内容如下: +创建一个文本文件 `ext-dict-test.csv`,包含以下内容: ```text 1,1 2,2 ``` -第一列是 `id`,第二列是 `c1`。 +第一列是 `id`,第二列是 `c1`。 -配置该字典: +配置字典: ```xml @@ -88,7 +84,7 @@ dictGetOrNull('dict_name', attr_name, id_expr) ``` -执行以下查询: +执行查询: ```sql SELECT @@ -108,7 +104,7 @@ LIMIT 3; **复合键字典示例** -创建一个文本文件 `ext-dict-mult.csv`,内容如下: +创建一个文本文件 `ext-dict-mult.csv`,包含以下内容: ```text 1,1,'1' @@ -120,7 +116,6 @@ LIMIT 3; 配置字典: - ```xml @@ -154,7 +149,7 @@ LIMIT 3; ``` -执行以下查询: +执行查询: ```sql SELECT @@ -192,7 +187,7 @@ INSERT INTO range_key_dictionary_source_table VALUES(2, toDate('2019-05-20'), to INSERT INTO range_key_dictionary_source_table VALUES(3, toDate('2019-05-20'), toDate('2019-05-20'), 'Third', 'Third'); ``` -创建该字典: +创建字典: ```sql CREATE DICTIONARY range_key_dictionary @@ -210,7 +205,7 @@ LAYOUT(RANGE_HASHED()) RANGE(MIN start_date MAX end_date); ``` -执行以下查询: +执行查询: ```sql SELECT @@ -226,20 +221,20 @@ FROM system.numbers LIMIT 5 FORMAT TabSeparated; ```text (0,'2019-05-20') 0 \N \N (NULL,NULL) -(1,'2019-05-20') 1 第一 第一 ('第一','第一') -(2,'2019-05-20') 1 第二 \N ('第二',NULL) -(3,'2019-05-20') 1 第三 第三 ('第三','第三') +(1,'2019-05-20') 1 First First ('First','First') +(2,'2019-05-20') 1 Second \N ('Second',NULL) +(3,'2019-05-20') 1 Third Third ('Third','Third') (4,'2019-05-20') 0 \N \N (NULL,NULL) ``` **另请参阅** -* [字典](../../sql-reference/dictionaries/index.md) +* [字典(Dictionaries)](../../sql-reference/dictionaries/index.md) ## dictHas -检查字典中是否存在指定键。 +检查字典中是否存在某个键。 ```sql dictHas('dict_name', id_expr) @@ -247,18 +242,18 @@ dictHas('dict_name', id_expr) **参数** -* `dict_name` — 字典名称。[字符串字面量](/sql-reference/syntax#string)。 -* `id_expr` — 键的值。[表达式](/sql-reference/syntax#expressions),返回字典键类型的值,或根据字典配置返回 [Tuple](../data-types/tuple.md) 类型的值。 +* `dict_name` — 字典的名称。[字符串字面量](/sql-reference/syntax#string)。 +* `id_expr` — 键值。[表达式](/sql-reference/syntax#expressions),返回字典键类型的值,或根据字典配置返回 [Tuple](../data-types/tuple.md) 类型的值。 **返回值** -* 0,如果键不存在。[UInt8](../data-types/int-uint.md)。 -* 1,如果键存在。[UInt8](../data-types/int-uint.md)。 +* 键不存在时为 0。[UInt8](../data-types/int-uint.md)。 +* 键存在时为 1。[UInt8](../data-types/int-uint.md)。 ## dictGetHierarchy -创建一个数组,其中包含[分层字典](../../sql-reference/dictionaries/index.md#hierarchical-dictionaries)中某个键的所有父项。 +创建一个数组,包含[层级字典](../../sql-reference/dictionaries/index.md#hierarchical-dictionaries)中某个键的所有父项。 **语法** @@ -268,17 +263,17 @@ dictGetHierarchy('dict_name', key) **参数** -* `dict_name` — 字典名。[字符串字面量](/sql-reference/syntax#string)。 -* `key` — 键。[表达式](/sql-reference/syntax#expressions),返回 [UInt64](../data-types/int-uint.md) 类型的值。 +* `dict_name` — 字典名。[String literal](/sql-reference/syntax#string)。 +* `key` — 键值。返回 [UInt64](../data-types/int-uint.md) 类型值的[表达式](/sql-reference/syntax#expressions)。 **返回值** -* 该键的父项。[Array(UInt64)](../data-types/array.md)。 +* 该键对应的父键。[Array(UInt64)](../data-types/array.md)。 ## dictIsIn -在字典的整个层级链中检查某个键的祖先。 +在字典的完整层级链中检查某个键的祖先。 ```sql dictIsIn('dict_name', child_id_expr, ancestor_id_expr) @@ -293,12 +288,12 @@ dictIsIn('dict_name', child_id_expr, ancestor_id_expr) **返回值** * 若 `child_id_expr` 不是 `ancestor_id_expr` 的子节点,则返回 0。[UInt8](../data-types/int-uint.md)。 -* 若 `child_id_expr` 是 `ancestor_id_expr` 的子节点,或者 `child_id_expr` 本身就是 `ancestor_id_expr`,则返回 1。[UInt8](../data-types/int-uint.md)。 +* 若 `child_id_expr` 是 `ancestor_id_expr` 的子节点,或 `child_id_expr` 即为 `ancestor_id_expr`,则返回 1。[UInt8](../data-types/int-uint.md)。 ## dictGetChildren -返回第一层子节点索引的数组。它是 [dictGetHierarchy](#dictgethierarchy) 的逆变换。 +返回第一层子节点的索引数组。它是 [dictGetHierarchy](#dictgethierarchy) 的逆向变换。 **语法** @@ -309,11 +304,11 @@ dictGetChildren(dict_name, key) **参数** * `dict_name` — 字典名称。[字符串字面量](/sql-reference/syntax#string)。 -* `key` — 键。[表达式](/sql-reference/syntax#expressions),返回 [UInt64](../data-types/int-uint.md) 类型的值。 +* `key` — 键值。[表达式](/sql-reference/syntax#expressions),返回 [UInt64](../data-types/int-uint.md) 类型的值。 **返回值** -* 指定键的第一层子节点。[Array](../data-types/array.md)([UInt64](../data-types/int-uint.md))。 +* 该键的第一层子节点。[Array](../data-types/array.md)([UInt64](../data-types/int-uint.md))。 **示例** @@ -328,7 +323,7 @@ dictGetChildren(dict_name, key) └────┴───────────┘ ``` -第一层子节点: +一级子节点: ```sql SELECT dictGetChildren('hierarchy_flat_dictionary', number) FROM system.numbers LIMIT 4; @@ -346,7 +341,7 @@ SELECT dictGetChildren('hierarchy_flat_dictionary', number) FROM system.numbers ## dictGetDescendant -返回所有后代,效果等同于将 [dictGetChildren](#dictgetchildren) 函数递归应用 `level` 次。 +返回所有后代,相当于对 [dictGetChildren](#dictgetchildren) 函数递归调用 `level` 次的结果。 **语法** @@ -358,15 +353,15 @@ dictGetDescendants(dict_name, key, level) * `dict_name` — 字典名称。[字符串字面量](/sql-reference/syntax#string)。 * `key` — 键值。[表达式](/sql-reference/syntax#expressions),返回 [UInt64](../data-types/int-uint.md) 类型的值。 -* `level` — 层级。如果 `level = 0`,则返回直到最底层的所有后代节点。[UInt8](../data-types/int-uint.md)。 +* `level` — 层级。如果 `level = 0`,则返回该键直到最底层的所有后代。[UInt8](../data-types/int-uint.md)。 **返回值** -* 给定键的所有后代节点。[Array](../data-types/array.md)([UInt64](../data-types/int-uint.md))。 +* 指定键的所有后代。[Array](../data-types/array.md)([UInt64](../data-types/int-uint.md))。 **示例** -考虑如下分层字典: +考虑如下层级字典: ```text ┌─id─┬─parent_id─┐ @@ -377,7 +372,7 @@ dictGetDescendants(dict_name, key, level) └────┴───────────┘ ``` -所有子级: +所有子节点: ```sql SELECT dictGetDescendants('hierarchy_flat_dictionary', number) FROM system.numbers LIMIT 4; @@ -392,7 +387,7 @@ SELECT dictGetDescendants('hierarchy_flat_dictionary', number) FROM system.numbe └─────────────────────────────────────────────────────────┘ ``` -第一层级子节点: +第一层子节点: ```sql SELECT dictGetDescendants('hierarchy_flat_dictionary', number, 1) FROM system.numbers LIMIT 4; @@ -410,9 +405,9 @@ SELECT dictGetDescendants('hierarchy_flat_dictionary', number, 1) FROM system.nu ## dictGetAll -从[正则表达式树字典](../../sql-reference/dictionaries/index.md#regexp-tree-dictionary)中检索所有匹配每个键的节点的属性值。 +对于每个键,从[正则表达式树字典](../../sql-reference/dictionaries/index.md#regexp-tree-dictionary)中获取与之匹配的所有节点的属性值。 -除了返回类型为 `Array(T)` 而不是 `T` 之外,此函数的行为与 [`dictGet`](#dictget-dictgetordefault-dictgetornull) 类似。 +除返回 `Array(T)` 类型而非 `T` 之外,此函数的行为与 [`dictGet`](#dictget-dictgetordefault-dictgetornull) 相同。 **语法** @@ -423,21 +418,21 @@ dictGetAll('dict_name', attr_names, id_expr[, limit]) **参数** * `dict_name` — 字典名称。[String literal](/sql-reference/syntax#string)。 -* `attr_names` — 字典列名,[String literal](/sql-reference/syntax#string),或列名的元组,[Tuple](/sql-reference/data-types/tuple)(元素为 [String literal](/sql-reference/syntax#string))。 -* `id_expr` — 键值。[Expression](/sql-reference/syntax#expressions),根据字典配置返回字典键类型值的数组,或 [Tuple](/sql-reference/data-types/tuple) 类型的值。 -* `limit` - 返回的每个值数组的最大长度。截断时,子节点优先于父节点;否则遵循为 regexp tree 字典定义的列表顺序。如果未指定,则数组长度不受限制。 +* `attr_names` — 字典中列的名称,[String literal](/sql-reference/syntax#string),或列名的元组,[Tuple](/sql-reference/data-types/tuple)([String literal](/sql-reference/syntax#string))。 +* `id_expr` — 键的值。[Expression](/sql-reference/syntax#expressions),返回字典键类型值的数组,或者根据字典配置返回 [Tuple](/sql-reference/data-types/tuple) 类型的值。 +* `limit` - 每个返回数组中值的最大数量。发生截断时,子节点优先于父节点;在其他情况下,会遵循为 regexp 树字典定义的列表顺序。如果未指定,则数组长度不受限制。 **返回值** -* 如果 ClickHouse 能够按照字典中为该属性定义的数据类型成功解析该属性,则返回一个字典属性值的数组,该数组对 `attr_names` 指定的每个属性,给出与 `id_expr` 对应的值。 +* 如果 ClickHouse 能够按照字典中为该属性定义的数据类型成功解析该属性,则返回一个数组,数组中包含字典属性值,这些值对应于由 `attr_names` 指定的每个属性的 `id_expr`。 * 如果字典中没有与 `id_expr` 对应的键,则返回空数组。 -如果 ClickHouse 无法解析属性的值,或该值与属性数据类型不匹配,则会抛出异常。 +如果 ClickHouse 无法解析该属性的值,或者该值与属性的数据类型不匹配,则会抛出异常。 **示例** -考虑以下 regexp tree 字典: +考虑以下 regexp 树字典: ```sql CREATE DICTIONARY regexp_dict @@ -451,7 +446,6 @@ LAYOUT(regexp_tree) ... ``` - ```yaml # /var/lib/clickhouse/user_files/regexp_tree.yaml - regexp: 'foo' @@ -474,7 +468,7 @@ SELECT dictGetAll('regexp_dict', 'tag', 'foobarbaz'); └───────────────────────────────────────────────┘ ``` -最多获取 2 个匹配值: +获取最多 2 个匹配的值: ```sql SELECT dictGetAll('regexp_dict', 'tag', 'foobarbaz', 2); @@ -489,7 +483,7 @@ SELECT dictGetAll('regexp_dict', 'tag', 'foobarbaz', 2); ## dictGetKeys -返回其属性等于指定值的一个或多个字典键。对于单个属性,该函数是 [`dictGet`](#dictget-dictgetordefault-dictgetornull) 的反向操作。 +返回其属性等于指定值的字典键。对于单个属性,这是 [`dictGet`](#dictget-dictgetordefault-dictgetornull) 的逆向操作。 **语法** @@ -501,32 +495,32 @@ dictGetKeys('dict_name', 'attr_name', value_expr); * `dict_name` — 字典名称。[字符串字面量](/sql-reference/syntax#string)。 * `attr_name` — 字典属性列名称。[字符串字面量](/sql-reference/syntax#string)。 -* `value_expr` — 用于与属性匹配的值。[表达式](/sql-reference/syntax#expressions),需可转换为该属性的数据类型。 +* `value_expr` — 用于与属性进行匹配的值。[表达式](/sql-reference/syntax#expressions),必须可以转换为该属性的数据类型。 **返回值** * 对于单键字典:返回属性等于 `value_expr` 的键组成的数组。[Array(T)](../data-types/array.md),其中 `T` 为字典键的数据类型。 -* 对于多键字典:返回属性等于 `value_expr` 的键元组组成的数组。[Array](../data-types/array.md)([Tuple(T1, T2, ...)](../data-types/tuple.md)),其中每个 `Tuple` 按顺序包含字典键列。 +* 对于多键字典:返回属性等于 `value_expr` 的键元组数组。[Array](../data-types/array.md)([Tuple(T1, T2, ...)](../data-types/tuple.md)),其中每个 `Tuple` 按顺序包含字典的键列。 -* 如果字典中不存在属性值为 `value_expr` 的条目,则返回空数组。 +* 如果在字典中找不到与 `value_expr` 对应的属性值,则返回空数组。 -如果 ClickHouse 无法解析该属性的值,或者该值无法转换为属性的数据类型,将抛出异常。 +如果 ClickHouse 无法解析属性的值,或者该值无法转换为属性的数据类型,则会抛出异常。 **示例** -考虑如下字典: +考虑以下字典: ```txt ┌─id─┬─level──┐ - │ 1 │ 低 │ - │ 2 │ 高 │ - │ 3 │ 中 │ - │ 4 │ 高 │ + │ 1 │ low │ + │ 2 │ high │ + │ 3 │ medium │ + │ 4 │ high │ └────┴────────┘ ``` -现在来获取所有等级为 `high` 的 ID: +现在来获取所有级别为 `high` 的 ID: ```sql SELECT dictGetKeys('levels', 'level', 'high') AS ids; @@ -539,15 +533,15 @@ SELECT dictGetKeys('levels', 'level', 'high') AS ids; ``` :::note -使用 `max_reverse_dictionary_lookup_cache_size_bytes` 设置来限制 `dictGetKeys` 在每个查询中使用的反向查找缓存大小。该缓存为每个属性值存储序列化的键元组,以避免在同一查询内重复扫描字典。该缓存不会在不同查询之间持久化。当达到限制时,条目将按 LRU 策略淘汰。对于大型字典、输入基数较低且工作集可以放入缓存的场景,该设置最为有效。将其设置为 `0` 可禁用缓存。 +使用 `max_reverse_dictionary_lookup_cache_size_bytes` 设置来限制 `dictGetKeys` 在每个查询中使用的反向查找缓存大小。该缓存为每个属性值存储序列化的键元组,以避免在同一查询内重复扫描字典。缓存不会在查询之间持久化。当达到限制时,条目将按 LRU 策略进行淘汰。对于大型字典、输入基数较低且工作集可以被缓存完全容纳的场景,此设置最为有效。将其设置为 `0` 可禁用缓存。 -另外,如果 `attr_name` 列中的唯一值可以完全放入缓存,那么在大多数情况下,该函数的执行时间应该与输入行数呈线性关系,并且仅需进行少量的字典扫描。 +另外,如果 `attr_name` 列的所有唯一值都可以被缓存完全容纳,那么在大多数情况下,函数的执行时间应当与输入行数呈线性关系,只需额外进行少量的字典扫描。 ::: ## 其他函数 -ClickHouse 支持一些特殊函数,可以在不考虑字典配置的情况下,将字典属性值转换为特定的数据类型。 +ClickHouse 支持一些专用函数,这些函数可以在不受字典配置影响的情况下,将字典属性值转换为特定数据类型。 函数: @@ -560,7 +554,7 @@ ClickHouse 支持一些特殊函数,可以在不考虑字典配置的情况下 * `dictGetString` * `dictGetIPv4`, `dictGetIPv6` -所有这些函数都有带 `OrDefault` 后缀的版本。例如,`dictGetDateOrDefault`。 +所有这些函数都有带 `OrDefault` 后缀的变体。例如,`dictGetDateOrDefault`。 语法: @@ -573,66 +567,65 @@ dictGet[Type]OrDefault('dict_name', 'attr_name', id_expr, default_value_expr) * `dict_name` — 字典名称。[字符串字面量](/sql-reference/syntax#string)。 * `attr_name` — 字典中列的名称。[字符串字面量](/sql-reference/syntax#string)。 -* `id_expr` — 键值。[表达式](/sql-reference/syntax#expressions),根据字典配置返回 [UInt64](../data-types/int-uint.md) 或 [Tuple](../data-types/tuple.md) 类型的值。 -* `default_value_expr` — 当字典中不包含键为 `id_expr` 的行时返回的值。[表达式](/sql-reference/syntax#expressions),其返回值的数据类型与为 `attr_name` 属性配置的数据类型一致。 +* `id_expr` — 键的值。[表达式](/sql-reference/syntax#expressions),根据字典配置返回 [UInt64](../data-types/int-uint.md) 或 [Tuple](../data-types/tuple.md) 类型的值。 +* `default_value_expr` — 当字典中不包含键为 `id_expr` 的行时返回的值。[表达式](/sql-reference/syntax#expressions),返回的数据类型为 `attr_name` 属性所配置的数据类型。 **返回值** -* 如果 ClickHouse 能够按照[属性的数据类型](/sql-reference/dictionaries#dictionary-key-and-fields)成功解析该属性,则函数返回与 `id_expr` 对应的字典属性值。 +* 如果 ClickHouse 能够按照[属性的数据类型](/sql-reference/dictionaries#dictionary-key-and-fields)成功解析该属性,函数将返回与 `id_expr` 对应的字典属性值。 * 如果字典中不存在请求的 `id_expr`,则: * `dictGet[Type]` 返回在字典配置中为该属性指定的 `` 元素的内容。 * `dictGet[Type]OrDefault` 返回作为 `default_value_expr` 参数传入的值。 -如果 ClickHouse 无法解析属性的值,或者该值与属性的数据类型不匹配,则会抛出异常。 +如果 ClickHouse 无法解析该属性的值,或该值与属性的数据类型不匹配,则会抛出异常。 ## 示例字典 {#example-dictionary} -本节示例会使用以下字典。可以在 ClickHouse 中创建它们,以运行下文所述函数的示例。 +本节中的示例使用以下字典。您可以在 ClickHouse 中创建这些字典,以便运行后文所述函数的示例。
-用于 dictGet\ 和 dictGet\OrDefault 函数的示例字典 +用于 dictGet<T> 和 dictGet<T>OrDefault 函数的示例字典 ```sql -- 创建包含所有所需数据类型的表 CREATE TABLE all_types_test ( `id` UInt32, - + -- String 类型 `String_value` String, - + -- 无符号整数类型 `UInt8_value` UInt8, `UInt16_value` UInt16, `UInt32_value` UInt32, `UInt64_value` UInt64, - + -- 有符号整数类型 `Int8_value` Int8, `Int16_value` Int16, `Int32_value` Int32, `Int64_value` Int64, - - -- 浮点数类型 + + -- 浮点类型 `Float32_value` Float32, `Float64_value` Float64, - + -- 日期/时间类型 `Date_value` Date, `DateTime_value` DateTime, - + -- 网络类型 `IPv4_value` IPv4, `IPv6_value` IPv6, - + -- UUID 类型 `UUID_value` UUID -) ENGINE = MergeTree() +) ENGINE = MergeTree() ORDER BY id; ``` - ```sql -- 插入测试数据 INSERT INTO all_types_test VALUES @@ -684,7 +677,6 @@ SOURCE(CLICKHOUSE(HOST 'localhost' PORT 9000 USER 'default' TABLE 'all_types_tes LAYOUT(HASHED()) LIFETIME(MIN 300 MAX 600); ``` -
@@ -703,10 +695,10 @@ CREATE TABLE regexp_os( ENGINE = Memory; ``` -向该表插入数据: +向表中插入数据: ```sql -INSERT INTO regexp_os +INSERT INTO regexp_os SELECT * FROM s3( 'https://datasets-documentation.s3.eu-west-3.amazonaws.com/' || @@ -731,2055 +723,149 @@ SOURCE(CLICKHOUSE(TABLE 'regexp_os')) LIFETIME(MIN 0 MAX 0) LAYOUT(REGEXP_TREE); ``` -
-范围键字典示例 - -创建输入表: - -```sql -CREATE TABLE range_key_dictionary_source_table -( - key UInt64, - start_date Date, - end_date Date, - value String, - value_nullable Nullable(String) -) -ENGINE = TinyLog(); -``` - -将数据插入输入表: - - -```sql -INSERT INTO range_key_dictionary_source_table VALUES(1, toDate('2019-05-20'), toDate('2019-05-20'), 'First', 'First'); -INSERT INTO range_key_dictionary_source_table VALUES(2, toDate('2019-05-20'), toDate('2019-05-20'), 'Second', NULL); -INSERT INTO range_key_dictionary_source_table VALUES(3, toDate('2019-05-20'), toDate('2019-05-20'), 'Third', 'Third'); -``` - -创建字典: - -```sql -CREATE DICTIONARY range_key_dictionary -( - key UInt64, - start_date Date, - end_date Date, - value String, - value_nullable Nullable(String) -) -PRIMARY KEY key -SOURCE(CLICKHOUSE(HOST 'localhost' PORT tcpPort() TABLE 'range_key_dictionary_source_table')) -LIFETIME(MIN 1 MAX 1000) -LAYOUT(RANGE_HASHED()) -RANGE(MIN start_date MAX end_date); -``` - + 范围键字典示例 + + 创建输入表: + + ```sql + CREATE TABLE range_key_dictionary_source_table + ( + key UInt64, + start_date Date, + end_date Date, + value String, + value_nullable Nullable(String) + ) + ENGINE = TinyLog(); + ``` + + 向输入表插入数据: + + ```sql + INSERT INTO range_key_dictionary_source_table VALUES(1, toDate('2019-05-20'), toDate('2019-05-20'), 'First', 'First'); + INSERT INTO range_key_dictionary_source_table VALUES(2, toDate('2019-05-20'), toDate('2019-05-20'), 'Second', NULL); + INSERT INTO range_key_dictionary_source_table VALUES(3, toDate('2019-05-20'), toDate('2019-05-20'), 'Third', 'Third'); + ``` + + 创建字典: + + ```sql + CREATE DICTIONARY range_key_dictionary + ( + key UInt64, + start_date Date, + end_date Date, + value String, + value_nullable Nullable(String) + ) + PRIMARY KEY key + SOURCE(CLICKHOUSE(HOST 'localhost' PORT tcpPort() TABLE 'range_key_dictionary_source_table')) + LIFETIME(MIN 1 MAX 1000) + LAYOUT(RANGE_HASHED()) + RANGE(MIN start_date MAX end_date); + ```
-复合键字典示例 - -创建源表: - -```sql -CREATE TABLE dict_mult_source -( -id UInt32, -c1 UInt32, -c2 String -) ENGINE = Memory; -``` - -向源表插入数据: - -```sql -INSERT INTO dict_mult_source VALUES -(1, 1, '1'), -(2, 2, '2'), -(3, 3, '3'); -``` - -创建字典: - -```sql -CREATE DICTIONARY ext_dict_mult -( - id UInt32, - c1 UInt32, - c2 String -) -PRIMARY KEY id -SOURCE(CLICKHOUSE(HOST 'localhost' PORT 9000 USER 'default' TABLE 'dict_mult_source' DB 'default')) -LAYOUT(FLAT()) -LIFETIME(MIN 0 MAX 0); -``` - + 复合键字典示例 + + 创建源表: + + ```sql + CREATE TABLE dict_mult_source + ( + id UInt32, + c1 UInt32, + c2 String + ) ENGINE = Memory; + ``` + + 向源表插入数据: + + ```sql + INSERT INTO dict_mult_source VALUES + (1, 1, '1'), + (2, 2, '2'), + (3, 3, '3'); + ``` + + 创建字典: + + ```sql + CREATE DICTIONARY ext_dict_mult + ( + id UInt32, + c1 UInt32, + c2 String + ) + PRIMARY KEY id + SOURCE(CLICKHOUSE(HOST 'localhost' PORT 9000 USER 'default' TABLE 'dict_mult_source' DB 'default')) + LAYOUT(FLAT()) + LIFETIME(MIN 0 MAX 0); + ```
-层级字典示例 - -创建源表: - -```sql -CREATE TABLE hierarchy_source -( - id UInt64, - parent_id UInt64, - name String -) ENGINE = Memory; -``` - -向源表插入数据: - -```sql -INSERT INTO hierarchy_source VALUES -(0, 0, 'Root'), -(1, 0, 'Level 1 - Node 1'), -(2, 1, 'Level 2 - Node 2'), -(3, 1, 'Level 2 - Node 3'), -(4, 2, 'Level 3 - Node 4'), -(5, 2, 'Level 3 - Node 5'), -(6, 3, 'Level 3 - Node 6'); - --- 0 (Root) --- └── 1 (Level 1 - Node 1) --- ├── 2 (Level 2 - Node 2) --- │ ├── 4 (Level 3 - Node 4) --- │ └── 5 (Level 3 - Node 5) --- └── 3 (Level 2 - Node 3) --- └── 6 (Level 3 - Node 6) -``` + 分层字典示例 -创建字典: + 创建源表: -```sql -CREATE DICTIONARY hierarchical_dictionary -( + ```sql + CREATE TABLE hierarchy_source + ( id UInt64, - parent_id UInt64 HIERARCHICAL, + parent_id UInt64, name String -) -PRIMARY KEY id -SOURCE(CLICKHOUSE(HOST 'localhost' PORT 9000 USER 'default' TABLE 'hierarchy_source' DB 'default')) -LAYOUT(HASHED()) -LIFETIME(MIN 300 MAX 600); -``` - + ) ENGINE = Memory; + ``` + + 向源表插入数据: + + ```sql + INSERT INTO hierarchy_source VALUES + (0, 0, 'Root'), + (1, 0, 'Level 1 - Node 1'), + (2, 1, 'Level 2 - Node 2'), + (3, 1, 'Level 2 - Node 3'), + (4, 2, 'Level 3 - Node 4'), + (5, 2, 'Level 3 - Node 5'), + (6, 3, 'Level 3 - Node 6'); + + -- 0(根) + -- └── 1(第 1 层 - 节点 1) + -- ├── 2(第 2 层 - 节点 2) + -- │ ├── 4(第 3 层 - 节点 4) + -- │ └── 5(第 3 层 - 节点 5) + -- └── 3(第 2 层 - 节点 3) + -- └── 6(第 3 层 - 节点 6) + ``` + + 创建字典: + + ```sql + CREATE DICTIONARY hierarchical_dictionary + ( + id UInt64, + parent_id UInt64 HIERARCHICAL, + name String + ) + PRIMARY KEY id + SOURCE(CLICKHOUSE(HOST 'localhost' PORT 9000 USER 'default' TABLE 'hierarchy_source' DB 'default')) + LAYOUT(HASHED()) + LIFETIME(MIN 300 MAX 600); + ```
- - +{/* + 下列标签内的内容会在文档框架构建过程中, + 被 system.functions 生成的文档所替换。 + 请不要修改或删除这些标签。 + 参见:https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md + */ } {/*AUTOGENERATED_START*/ } -## dictGet - -自 v18.16 引入 - -从字典中检索值。 - -**语法** - -```sql -dictGet('dict_name', attr_names, id_expr) -``` - -**参数** - -* `dict_name` — 字典名称。[`String`](/sql-reference/data-types/string) -* `attr_names` — 字典中列的名称,或列名的元组。[`String`](/sql-reference/data-types/string) 或 [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — 键值。一个返回 UInt64/Tuple(T) 的表达式。[`UInt64`](/sql-reference/data-types/int-uint) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) - -**返回值** - -如果找到该键,则返回与 `id_expr` 对应的字典属性值。 -如果未找到该键,则返回在字典配置中为该属性指定的 `` 元素的内容。 - -**示例** - -**获取单个属性** - -```sql title=Query -SELECT dictGet('ext_dict_test', 'c1', toUInt64(1)) AS val -``` - -```response title=Response -1 -``` - -**多个属性** - -```sql title=Query -SELECT - dictGet('ext_dict_mult', ('c1','c2'), number + 1) AS val, - toTypeName(val) AS type -FROM system.numbers -LIMIT 3; -``` - -```response title=Response -┌─val─────┬─type───────────┐ -│ (1,'1') │ 元组( ↴│ -│ │↳ c1 无符号32位整数,↴│ -│ │↳ c2 字符串) │ -│ (2,'2') │ 元组( ↴│ -│ │↳ c1 无符号32位整数,↴│ -│ │↳ c2 字符串) │ -│ (3,'3') │ 元组( ↴│ -│ │↳ c1 无符号32位整数,↴│ -│ │↳ c2 字符串) │ -└─────────┴────────────────┘ -``` - - -## dictGetAll - -引入版本:v23.5 - -将字典属性的值转换为 `All` 数据类型,忽略字典的配置。 - -**语法** - -```sql -dictGetAll(dict_name, attr_name, id_expr) -``` - -**参数** - -* `dict_name` — 字典名称。[`String`](/sql-reference/data-types/string) -* `attr_name` — 字典中列的名称。[`String`](/sql-reference/data-types/string) 或 [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — 键的值。一个返回字典键类型值或元组值(取决于字典配置)的表达式。[`Expression`](/sql-reference/data-types/special-data-types/expression) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) - -**返回值** - -返回与 `id_expr` 对应的字典属性值; -否则返回在字典配置中为该属性指定的 `` 元素的内容。 - -:::note -如果 ClickHouse 无法解析属性的值,或者该值与属性的数据类型不匹配,则会抛出异常。 -::: - -**示例** - -**用法示例** - -```sql title=Query -SELECT - 'Mozilla/5.0 (Linux; Android 12; SM-G998B) Mobile Safari/537.36' AS user_agent, - - -- 将匹配所有符合条件的模式 - dictGetAll('regexp_tree', 'os_replacement', 'Mozilla/5.0 (Linux; Android 12; SM-G998B) Mobile Safari/537.36') AS all_matches, - - -- 仅返回第一个匹配结果 - dictGet('regexp_tree', 'os_replacement', 'Mozilla/5.0 (Linux; Android 12; SM-G998B) Mobile Safari/537.36') AS first_match; -``` - -```response title=Response -┌─user_agent─────────────────────────────────────────────────────┬─all_matches─────────────────────────────┬─first_match─┐ -│ Mozilla/5.0 (Linux; Android 12; SM-G998B) Mobile Safari/537.36 │ ['Android','Android','Android','Linux'] │ Android │ -└────────────────────────────────────────────────────────────────┴─────────────────────────────────────────┴─────────────┘ -``` - - -## dictGetChildren - -自 v21.4 引入 - -以索引数组的形式返回第一层子节点。它是 [dictGetHierarchy](#dictgethierarchy) 的逆向变换。 - -**语法** - -```sql -dictGetChildren(dict_name, key) -``` - -**参数** - -* `dict_name` — 字典的名称。[`String`](/sql-reference/data-types/string) -* `key` — 要检查的键。[`const String`](/sql-reference/data-types/string) - -**返回值** - -返回该键的第一层子节点。[`Array(UInt64)`](/sql-reference/data-types/array) - -**示例** - -**获取字典的第一层子节点** - -```sql title=Query -SELECT dictGetChildren('hierarchical_dictionary', 2); -``` - -```response title=Response -┌─dictGetChild⋯ionary', 2)─┐ -│ [4,5] │ -└──────────────────────────┘ -``` - - -## dictGetDate - -自 v1.1 版本引入 - -将字典属性值转换为 `Date` 数据类型,而不受字典配置方式的影响。 - -**语法** - -```sql -dictGetDate(dict_name, attr_name, id_expr) -``` - -**参数** - -* `dict_name` — 字典名称。[`String`](/sql-reference/data-types/string) -* `attr_name` — 字典列名。[`String`](/sql-reference/data-types/string) 或 [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — 键的值。返回字典键类型的值或元组值的表达式(取决于字典配置)。[`Expression`](/sql-reference/data-types/special-data-types/expression) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) - -**返回值** - -返回与 `id_expr` 对应的字典属性值, -否则返回在字典配置中为该属性指定的 `` 元素的内容。 - -:::note -如果 ClickHouse 无法解析属性的值,或该值与属性的数据类型不匹配,则会抛出异常。 -::: - -**示例** - -**用法示例** - -```sql title=Query -SELECT dictGetDate('all_types_dict', 'Date_value', 1) -``` - -```response title=Response -┌─dictGetDate(⋯_value', 1)─┐ -│ 2020-01-01 │ -└──────────────────────────┘ -``` - - -## dictGetDateOrDefault - -引入自:v1.1 - -将字典属性值转换为 `Date` 数据类型,而不考虑字典配置;如果未找到键,则返回提供的默认值。 - -**语法** - -```sql -dictGetDateOrDefault(dict_name, attr_name, id_expr, default_value_expr) -``` - -**参数** - -* `dict_name` — 字典名称。[`String`](/sql-reference/data-types/string) -* `attr_name` — 字典列名。[`String`](/sql-reference/data-types/string) 或 [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — 键的值。返回字典键类型值或元组值的表达式(取决于字典配置)。[`Expression`](/sql-reference/data-types/special-data-types/expression) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value_expr` — 当字典不包含 `id_expr` 键对应的行时返回的值。[`Expression`](/sql-reference/data-types/special-data-types/expression) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) - -**返回值** - -返回与 `id_expr` 对应的字典属性值, -否则返回作为 `default_value_expr` 参数传入的值。 - -:::note -如果 ClickHouse 无法解析属性的值,或者该值与属性的数据类型不匹配,则会抛出异常。 -::: - -**示例** - -**使用示例** - -```sql title=Query --- 对于存在的键 -SELECT dictGetDate('all_types_dict', 'Date_value', 1); - --- 对于不存在的键,返回提供的默认值 -SELECT dictGetDateOrDefault('all_types_dict', 'Date_value', 999, toDate('1970-01-01')); -``` - -```response title=Response -┌─dictGetDate(⋯_value', 1)─┐ -│ 2024-01-15 │ -└──────────────────────────┘ -┌─dictGetDateO⋯70-01-01'))─┐ -│ 1970-01-01 │ -└──────────────────────────┘ -``` - - -## dictGetDateTime - -引入版本:v1.1 - -将字典属性值转换为 `DateTime` 数据类型,不受字典配置影响。 - -**语法** - -```sql -dictGetDateTime(字典名, 属性名, id表达式) -``` - -**参数** - -* `dict_name` — 字典名称。[`String`](/sql-reference/data-types/string) -* `attr_name` — 字典列名。[`String`](/sql-reference/data-types/string) 或 [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — 键的值。返回字典键类型值或元组值的表达式(取决于字典配置)。[`Expression`](/sql-reference/data-types/special-data-types/expression) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) - -**返回值** - -返回与 `id_expr` 对应的字典属性值, -否则返回在字典配置中为该属性指定的 `` 元素的内容。 - -:::note -如果 ClickHouse 无法解析属性值或该值与属性的数据类型不匹配,则会抛出异常。 -::: - -**示例** - -**用法示例** - -```sql title=Query -SELECT dictGetDateTime('all_types_dict', 'DateTime_value', 1) -``` - -```response title=Response -┌─dictGetDateT⋯_value', 1)─┐ -│ 2024-01-15 10:30:00 │ -└──────────────────────────┘ -``` - - -## dictGetDateTimeOrDefault - -自 v1.1 起引入 - -将字典属性的值转换为 `DateTime` 数据类型,而不受字典配置的影响;如果未找到该键,则返回提供的默认值。 - -**语法** - -```sql -dictGetDateTimeOrDefault(dict_name, attr_name, id_expr, default_value_expr) -``` - -**参数** - -* `dict_name` — 字典名称。[`String`](/sql-reference/data-types/string) -* `attr_name` — 字典中列的名称。[`String`](/sql-reference/data-types/string) 或 [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — 键的值。返回字典键类型的值或元组值的表达式(取决于字典配置)。[`Expression`](/sql-reference/data-types/special-data-types/expression) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value_expr` — 当字典中不存在键为 `id_expr` 的行时返回的值。[`Expression`](/sql-reference/data-types/special-data-types/expression) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) - -**返回值** - -返回与 `id_expr` 对应的字典属性值, -否则返回作为 `default_value_expr` 参数传入的值。 - -:::note -如果 ClickHouse 无法解析属性的值,或者该值与属性的数据类型不匹配,则会抛出异常。 -::: - -**示例** - -**用法示例** - -```sql title=Query --- 对于存在的键 -SELECT dictGetDateTime('all_types_dict', 'DateTime_value', 1); - --- 对于不存在的键,返回提供的默认值 -SELECT dictGetDateTimeOrDefault('all_types_dict', 'DateTime_value', 999, toDateTime('1970-01-01 00:00:00')); -``` - -```response title=Response -┌─dictGetDateT⋯_value', 1)─┐ -│ 2024-01-15 10:30:00 │ -└──────────────────────────┘ -┌─dictGetDateT⋯0:00:00'))──┐ -│ 1970-01-01 00:00:00 │ -└──────────────────────────┘ -``` - - -## dictGetDescendants - -引入版本:v21.4 - -返回所有后代,相当于对 [`dictGetChildren`](#dictGetChildren) 函数递归调用 `level` 次。 - -**语法** - -```sql -dictGetDescendants(dict_name, key, level) -``` - -**参数** - -* `dict_name` — 字典名称。[`String`](/sql-reference/data-types/string) -* `key` — 要检查的键。[`const String`](/sql-reference/data-types/string) -* `level` — 要检查的键所在的层级(深度)。如果 `level = 0`,则返回从该键开始直到最底层的所有后代。[`UInt8`](/sql-reference/data-types/int-uint) - -**返回值** - -返回该键的所有后代。[`Array(UInt64)`](/sql-reference/data-types/array) - -**示例** - -**获取字典的第一层子节点** - -```sql title=Query --- 考虑以下分层字典: --- 0 (根节点) --- └── 1 (第 1 级 - 节点 1) --- ├── 2 (第 2 级 - 节点 2) --- │ ├── 4 (第 3 级 - 节点 4) --- │ └── 5 (第 3 级 - 节点 5) --- └── 3 (第 2 级 - 节点 3) --- └── 6 (第 3 级 - 节点 6) - -SELECT dictGetDescendants('hierarchical_dictionary', 0, 2) -``` - -```response title=Response -┌─dictGetDesce⋯ary', 0, 2)─┐ -│ [3,2] │ -└──────────────────────────┘ -``` - - -## dictGetFloat32 - -自 v1.1 引入 - -将字典属性值转换为 `Float32` 数据类型,不受字典配置的影响。 - -**语法** - -```sql -dictGetFloat32(dict_name, attr_name, id_expr) -``` - -**参数** - -* `dict_name` — 字典名称。[`String`](/sql-reference/data-types/string) -* `attr_name` — 字典的列名。[`String`](/sql-reference/data-types/string) 或 [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — 键值。一个返回字典键类型值或元组值的表达式(取决于字典配置)。[`Expression`](/sql-reference/data-types/special-data-types/expression) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) - -**返回值** - -返回与 `id_expr` 对应的字典属性的值, -否则返回在字典配置中为该属性指定的 `` 元素的内容。 - -:::note -如果 ClickHouse 无法解析属性值,或该值与属性的数据类型不匹配,则会抛出异常。 -::: - -**示例** - -**使用示例** - -```sql title=Query -SELECT dictGetFloat32('all_types_dict', 'Float32_value', 1) -``` - -```response title=Response -┌─dictGetFloat⋯_value', 1)─┐ -│ -123.123 │ -└──────────────────────────┘ -``` - - -## dictGetFloat32OrDefault - -自 v1.1 版本引入 - -将字典属性值转换为 `Float32` 数据类型,而不受字典配置影响;如果未找到键,则返回提供的默认值。 - -**语法** - -```sql -dictGetFloat32OrDefault(dict_name, attr_name, id_expr, default_value_expr) -``` - -**参数** - -* `dict_name` — 字典名称。[`String`](/sql-reference/data-types/string) -* `attr_name` — 字典列(属性)名称。[`String`](/sql-reference/data-types/string) 或 [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — 键值。返回字典键类型的值或元组值的表达式(取决于字典配置)。[`Expression`](/sql-reference/data-types/special-data-types/expression) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value_expr` — 当字典中不包含键为 `id_expr` 的行时返回的值。[`Expression`](/sql-reference/data-types/special-data-types/expression) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) - -**返回值** - -返回与 `id_expr` 对应的字典属性值, -否则返回通过参数 `default_value_expr` 传入的值。 - -:::note -如果 ClickHouse 无法解析属性的值,或者该值与属性的数据类型不匹配,则会抛出异常。 -::: - -**示例** - -**使用示例** - -```sql title=Query --- 对于已存在的键 -SELECT dictGetFloat32('all_types_dict', 'Float32_value', 1); - --- 对于不存在的键,返回指定的默认值 (-1.0) -SELECT dictGetFloat32OrDefault('all_types_dict', 'Float32_value', 999, -1.0); -``` - -```response title=Response -┌─dictGetFloat⋯_value', 1)─┐ -│ 123.45 │ -└──────────────────────────┘ -┌─dictGetFloat⋯e', 999, -1)─┐ -│ -1 │ -└───────────────────────────┘ -``` - - -## dictGetFloat64 - -自 v1.1 版本引入 - -将字典属性值转换为 `Float64` 数据类型,而不受字典配置的影响。 - -**语法** - -```sql -dictGetFloat64(dict_name, attr_name, id_expr) -``` - -**参数** - -* `dict_name` — 字典名称。[`String`](/sql-reference/data-types/string) -* `attr_name` — 字典列名。[`String`](/sql-reference/data-types/string) 或 [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — 键值。一个返回字典键类型值或元组值的表达式(取决于字典配置)。[`Expression`](/sql-reference/data-types/special-data-types/expression) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) - -**返回值** - -返回与 `id_expr` 对应的字典属性值, -否则返回在字典配置中为该属性指定的 `` 元素内容。 - -:::note -如果无法解析属性值,或者该值与属性的数据类型不匹配,ClickHouse 会抛出异常。 -::: - -**示例** - -**用法示例** - -```sql title=Query -SELECT dictGetFloat64('all_types_dict', 'Float64_value', 1) -``` - -```response title=Response -┌─dictGetFloat⋯_value', 1)─┐ -│ -123.123 │ -└──────────────────────────┘ -``` - - -## dictGetFloat64OrDefault - -自 v1.1 引入 - -将字典属性值转换为 `Float64` 数据类型,而不受字典配置影响;如果未找到键,则返回提供的默认值。 - -**语法** - -```sql -dictGetFloat64OrDefault(dict_name, attr_name, id_expr, default_value_expr) -``` - -**参数** - -* `dict_name` — 字典名。[`String`](/sql-reference/data-types/string) -* `attr_name` — 字典中列的名称。[`String`](/sql-reference/data-types/string) 或 [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — 键值。返回字典键类型值或元组值的表达式(取决于字典配置)。[`Expression`](/sql-reference/data-types/special-data-types/expression) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value_expr` — 当字典中不存在以 `id_expr` 为键的行时返回的值。[`Expression`](/sql-reference/data-types/special-data-types/expression) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) - -**返回值** - -返回与 `id_expr` 对应的字典属性值, -否则返回 `default_value_expr` 参数传入的值。 - -:::note -如果 ClickHouse 无法解析属性值,或该值与属性的数据类型不匹配,则会抛出异常。 -::: - -**示例** - -**使用示例** - -```sql title=Query --- 对于存在的键 -SELECT dictGetFloat64('all_types_dict', 'Float64_value', 1); - --- 对于不存在的键,返回提供的默认值(nan) -SELECT dictGetFloat64OrDefault('all_types_dict', 'Float64_value', 999, nan); -``` - -```response title=Response -┌─dictGetFloat⋯_value', 1)─┐ -│ 987654.123456 │ -└──────────────────────────┘ -┌─dictGetFloat⋯, 999, nan)─┐ -│ nan │ -└──────────────────────────┘ -``` - - -## dictGetHierarchy - -引入版本:v1.1 - -在[分层字典](../../sql-reference/dictionaries/index.md#hierarchical-dictionaries)中返回一个数组,其中包含某个键的所有父节点。 - -**语法** - -```sql -dictGetHierarchy(dict_name, key) -``` - -**参数** - -* `dict_name` — 字典名称。[`String`](/sql-reference/data-types/string) -* `key` — 键。[`const String`](/sql-reference/data-types/string) - -**返回值** - -返回该键对应的所有父项。[`Array(UInt64)`](/sql-reference/data-types/array) - -**示例** - -**获取某个键的层级结构** - -```sql title=Query -SELECT dictGetHierarchy('hierarchical_dictionary', 5) -``` - -```response title=Response -┌─dictGetHiera⋯ionary', 5)─┐ -│ [5,2,1] │ -└──────────────────────────┘ -``` - - -## dictGetIPv4 - -自 v1.1 起引入 - -将字典属性值转换为 `IPv4` 数据类型,而不受字典配置的影响。 - -**语法** - -```sql -dictGetIPv4(dict_name, attr_name, id_expr) -``` - -**参数** - -* `dict_name` — 字典名称。[`String`](/sql-reference/data-types/string) -* `attr_name` — 字典中列的名称。[`String`](/sql-reference/data-types/string) 或 [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — 键的值。返回字典键类型的值或元组值的表达式(取决于字典配置)。[`Expression`](/sql-reference/data-types/special-data-types/expression) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) - -**返回值** - -返回与 `id_expr` 对应的字典属性的值, -否则返回在字典配置中为该属性指定的 `` 元素的内容。 - -:::note -如果 ClickHouse 无法解析属性值,或者该值与属性的数据类型不匹配,则会抛出异常。 -::: - -**示例** - -**用法示例** - -```sql title=Query -SELECT dictGetIPv4('all_types_dict', 'IPv4_value', 1) -``` - -```response title=Response -┌─dictGetIPv4('all_⋯ 'IPv4_value', 1)─┐ -│ 192.168.0.1 │ -└─────────────────────────────────────┘ -``` - - -## dictGetIPv4OrDefault - -自 v23.1 引入 - -将字典属性值转换为 `IPv4` 数据类型,而不受字典配置影响;如果未找到该键,则返回提供的默认值。 - -**语法** - -```sql -dictGetIPv4OrDefault(dict_name, attr_name, id_expr, default_value_expr) -``` - -**参数** - -* `dict_name` — 字典名称。[`String`](/sql-reference/data-types/string) -* `attr_name` — 字典列名。[`String`](/sql-reference/data-types/string) 或 [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — 键值。返回字典键类型的值或元组值的表达式(取决于字典配置)。[`Expression`](/sql-reference/data-types/special-data-types/expression) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value_expr` — 当字典中不包含键为 `id_expr` 的行时返回的值。[`Expression`](/sql-reference/data-types/special-data-types/expression) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) - -**返回值** - -返回与 `id_expr` 对应的字典属性值, -否则返回作为 `default_value_expr` 参数传入的值。 - -:::note -如果 ClickHouse 无法解析属性值,或该值与属性的数据类型不匹配,则会抛出异常。 -::: - -**示例** - -**用法示例** - -```sql title=Query --- 对于已存在的键 -SELECT dictGetIPv4('all_types_dict', 'IPv4_value', 1); - --- 对于不存在的键,返回给定的默认值 -SELECT dictGetIPv4OrDefault('all_types_dict', 'IPv4_value', 999, toIPv4('0.0.0.0')); -``` - -```response title=Response -┌─dictGetIPv4('all_⋯ 'IPv4_value', 1)─┐ -│ 192.168.0.1 │ -└─────────────────────────────────────┘ -┌─dictGetIPv4OrDefa⋯0.0.0.0'))─┐ -│ 0.0.0.0 │ -└──────────────────────────────┘ -``` - - -## dictGetIPv6 - -引入版本:v23.1 - -将字典属性值转换为 `IPv6` 数据类型,无论字典如何配置。 - -**语法** - -```sql -dictGetIPv6(dict_name, attr_name, id_expr) -``` - -**参数** - -* `dict_name` — 字典名称。[`String`](/sql-reference/data-types/string) -* `attr_name` — 字典中列(属性)的名称。[`String`](/sql-reference/data-types/string) 或 [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — 键值。返回字典键类型值或元组值的表达式(依赖于字典配置)。[`Expression`](/sql-reference/data-types/special-data-types/expression) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) - -**返回值** - -返回与 `id_expr` 对应的字典属性值, -否则返回在字典配置中为该属性指定的 `` 元素的内容。 - -:::note -如果 ClickHouse 无法解析属性的值,或该值与属性的数据类型不匹配,则会抛出异常。 -::: - -**示例** - -**用法示例** - -```sql title=Query -SELECT dictGetIPv6('all_types_dict', 'IPv6_value', 1) -``` - -```response title=Response -┌─dictGetIPv6('all_⋯ 'IPv6_value', 1)─┐ -│ 2001:db8:85a3::8a2e:370:7334 │ -└─────────────────────────────────────┘ -``` - - -## dictGetIPv6OrDefault - -自 v23.1 版本引入 - -无论字典如何配置,都将字典属性值转换为 `IPv6` 数据类型;如果未找到该键,则返回指定的默认值。 - -**语法** - -```sql -dictGetIPv6OrDefault(dict_name, attr_name, id_expr, default_value_expr) -``` - -**参数** - -* `dict_name` — 字典名称。[`String`](/sql-reference/data-types/string) -* `attr_name` — 字典中列的名称。[`String`](/sql-reference/data-types/string) 或 [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — 键值。返回字典键类型值或元组值的表达式(取决于字典配置)。[`Expression`](/sql-reference/data-types/special-data-types/expression) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value_expr` — 当在字典中找不到键为 `id_expr` 的行时返回的值。[`Expression`](/sql-reference/data-types/special-data-types/expression) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) - -**返回值** - -返回与 `id_expr` 对应的字典属性值, -否则返回在 `default_value_expr` 参数中传入的值。 - -:::note -如果 ClickHouse 无法解析属性的值,或者该值与属性的数据类型不匹配,则会抛出异常。 -::: - -**示例** - -**用法示例** - -```sql title=Query --- 对于已存在的键 -SELECT dictGetIPv6('all_types_dict', 'IPv6_value', 1); - --- 对于不存在的键,返回指定的默认值 -SELECT dictGetIPv6OrDefault('all_types_dict', 'IPv6_value', 999, '::1'::IPv6); -``` - -```response title=Response -┌─dictGetIPv6('all_⋯ 'IPv6_value', 1)─┐ -│ 2001:db8:85a3::8a2e:370:7334 │ -└─────────────────────────────────────┘ -┌─dictGetIPv6OrDefa⋯:1'::IPv6)─┐ -│ ::1 │ -└──────────────────────────────┘ -``` - - -## dictGetInt16 - -自 v1.1 引入 - -将字典属性的值转换为 `Int16` 数据类型,而不受字典配置的影响。 - -**语法** - -```sql -dictGetInt16(dict_name, attr_name, id_expr) -``` - -**参数** - -* `dict_name` — 字典名称。[`String`](/sql-reference/data-types/string) -* `attr_name` — 字典中列的名称。[`String`](/sql-reference/data-types/string) 或 [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — 键值。返回字典键类型值或元组值的表达式(取决于字典配置)。[`Expression`](/sql-reference/data-types/special-data-types/expression) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) - -**返回值** - -返回与 `id_expr` 对应的字典属性值, -否则返回在字典配置中为该属性指定的 `` 元素的内容。 - -:::note -如果 ClickHouse 无法解析该属性的值,或者该值的数据类型与属性不匹配,则会抛出异常。 -::: - -**示例** - -**用法示例** - -```sql title=Query -SELECT dictGetInt16('all_types_dict', 'Int16_value', 1) -``` - -```response title=Response -┌─dictGetInt16⋯_value', 1)─┐ -│ -5000 │ -└──────────────────────────┘ -``` - - -## dictGetInt16OrDefault - -自 v1.1 版本引入 - -将字典属性值转换为 `Int16` 数据类型,不受字典配置影响;如果未找到键,则返回指定的默认值。 - -**语法** - -```sql -dictGetInt16OrDefault(dict_name, attr_name, id_expr, default_value_expr) -``` - -**参数** - -* `dict_name` — 字典名称。[`String`](/sql-reference/data-types/string) -* `attr_name` — 字典列名。[`String`](/sql-reference/data-types/string) 或 [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — 键的值。返回字典键类型值或元组值的表达式(取决于字典配置)。[`Expression`](/sql-reference/data-types/special-data-types/expression) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value_expr` — 当字典中不包含键为 `id_expr` 的行时返回的值。[`Expression`](/sql-reference/data-types/special-data-types/expression) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) - -**返回值** - -返回与 `id_expr` 对应的字典属性值, -否则返回作为 `default_value_expr` 参数传入的值。 - -:::note -如果 ClickHouse 无法解析该属性的值,或该值与属性的数据类型不匹配,则会抛出异常。 -::: - -**示例** - -**使用示例** - -```sql title=Query --- 对于已存在的键 -SELECT dictGetInt16('all_types_dict', 'Int16_value', 1); - --- 若键不存在,则返回提供的默认值 (-1) -SELECT dictGetInt16OrDefault('all_types_dict', 'Int16_value', 999, -1); -``` - -```response title=Response -┌─dictGetInt16⋯_value', 1)─┐ -│ -5000 │ -└──────────────────────────┘ -┌─dictGetInt16⋯', 999, -1)─┐ -│ -1 │ -└──────────────────────────┘ -``` - - -## dictGetInt32 - -引入自:v1.1 - -将字典的属性值转换为 `Int32` 数据类型,而不受字典配置影响。 - -**语法** - -```sql -dictGetInt32(dict_name, attr_name, id_expr) -``` - -**参数** - -* `dict_name` — 字典名称。[`String`](/sql-reference/data-types/string) -* `attr_name` — 字典中列的名称。[`String`](/sql-reference/data-types/string) 或 [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — 键的值。返回字典键类型值或元组值的表达式(取决于字典配置)。[`Expression`](/sql-reference/data-types/special-data-types/expression) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) - -**返回值** - -返回与 `id_expr` 对应的字典属性值, -否则返回在字典配置中为该属性指定的 `` 元素的内容。 - -:::note -如果 ClickHouse 无法解析属性值,或者该值与属性的数据类型不匹配,则会抛出异常。 -::: - -**示例** - -**用法示例** - -```sql title=Query -SELECT dictGetInt32('all_types_dict', 'Int32_value', 1) -``` - -```response title=Response -┌─dictGetInt32⋯_value', 1)─┐ -│ -1000000 │ -└──────────────────────────┘ -``` - - -## dictGetInt32OrDefault - -自 v1.1 版本引入 - -将字典属性值转换为 `Int32` 数据类型,而不受字典配置影响;如果未找到键,则返回提供的默认值。 - -**语法** - -```sql -dictGetInt32OrDefault(dict_name, attr_name, id_expr, default_value_expr) -``` - -**参数** - -* `dict_name` — 字典名称。[`String`](/sql-reference/data-types/string) -* `attr_name` — 字典列名称。[`String`](/sql-reference/data-types/string) 或 [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — 键值。返回字典键类型值或元组值的表达式(取决于字典配置)。[`Expression`](/sql-reference/data-types/special-data-types/expression) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value_expr` — 当字典中不包含键为 `id_expr` 的行时返回的值。[`Expression`](/sql-reference/data-types/special-data-types/expression) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) - -**返回值** - -返回与 `id_expr` 对应的字典属性的值, -否则返回作为 `default_value_expr` 参数传入的值。 - -:::note -如果 ClickHouse 无法解析属性的值,或者该值与属性的数据类型不匹配,则会抛出异常。 -::: - -**示例** - -**用法示例** - -```sql title=Query --- 对已存在的键 -SELECT dictGetInt32('all_types_dict', 'Int32_value', 1); - --- 对于不存在的键,返回指定的默认值 (-1) -SELECT dictGetInt32OrDefault('all_types_dict', 'Int32_value', 999, -1); -``` - -```response title=Response -┌─dictGetInt32⋯_value', 1)─┐ -│ -1000000 │ -└──────────────────────────┘ -┌─dictGetInt32⋯', 999, -1)─┐ -│ -1 │ -└──────────────────────────┘ -``` - - -## dictGetInt64 - -自 v1.1 版本起提供 - -将字典属性值转换为 `Int64` 数据类型,与字典配置无关。 - -**语法** - -```sql -dictGetInt64(dict_name, attr_name, id_expr) -``` - -**参数** - -* `dict_name` — 字典名称。[`String`](/sql-reference/data-types/string) -* `attr_name` — 字典列名。[`String`](/sql-reference/data-types/string) 或 [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — 键的值。返回字典键类型的值或元组值的表达式(取决于字典配置)。[`Expression`](/sql-reference/data-types/special-data-types/expression) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) - -**返回值** - -返回与 `id_expr` 对应的字典属性值, -否则返回该属性在字典配置中指定的 `` 元素的内容。 - -:::note -如果 ClickHouse 无法解析属性值,或该值与属性的数据类型不匹配,则会抛出异常。 -::: - -**示例** - -**使用示例** - -```sql title=Query -SELECT dictGetInt64('all_types_dict', 'Int64_value', 1) -``` - -```response title=Response -┌─dictGetInt64⋯_value', 1)───┐ -│ -9223372036854775807 │ -└────────────────────────────┘ -``` - - -## dictGetInt64OrDefault - -引入版本:v1.1 - -将字典属性值转换为 `Int64` 数据类型(无论字典如何配置),如果未找到键,则返回提供的默认值。 - -**语法** - -```sql -dictGetInt64OrDefault(dict_name, attr_name, id_expr, default_value_expr) -``` - -**参数** - -* `dict_name` — 字典名称。[`String`](/sql-reference/data-types/string) -* `attr_name` — 字典列的名称。[`String`](/sql-reference/data-types/string) 或 [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — 键值。返回字典键类型的值或元组值的表达式(取决于字典配置)。[`Expression`](/sql-reference/data-types/special-data-types/expression) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value_expr` — 当字典中不存在键为 `id_expr` 的行时返回的值。[`Expression`](/sql-reference/data-types/special-data-types/expression) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) - -**返回值** - -返回与 `id_expr` 对应的字典属性值, -否则返回作为 `default_value_expr` 参数传入的值。 - -:::note -如果 ClickHouse 无法解析属性的值,或该值与属性的数据类型不匹配,则会抛出异常。 -::: - -**示例** - -**使用示例** - -```sql title=Query --- 对于已存在的键 -SELECT dictGetInt64('all_types_dict', 'Int64_value', 1); - --- 对于不存在的键,返回指定的默认值 (-1) -SELECT dictGetInt64OrDefault('all_types_dict', 'Int64_value', 999, -1); -``` - -```response title=Response -┌─dictGetInt64⋯_value', 1)─┐ -│ -9223372036854775808 │ -└──────────────────────────┘ -┌─dictGetInt64⋯', 999, -1)─┐ -│ -1 │ -└──────────────────────────┘ -``` - - -## dictGetInt8 - -自 v1.1 起引入 - -将字典属性值转换为 `Int8` 数据类型,不受字典配置影响。 - -**语法** - -```sql -dictGetInt8(dict_name, attr_name, id_expr) -``` - -**参数** - -* `dict_name` — 字典名称。[`String`](/sql-reference/data-types/string) -* `attr_name` — 字典中列的名称。[`String`](/sql-reference/data-types/string) 或 [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — 键值。一个返回字典键类型值或元组值的表达式(取决于字典配置)。[`Expression`](/sql-reference/data-types/special-data-types/expression) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) - -**返回值** - -返回与 `id_expr` 对应的字典属性值, -否则返回在字典配置中为该属性指定的 `` 元素的内容。 - -:::note -如果 ClickHouse 无法解析属性值,或者该值与属性的数据类型不匹配,则会抛出异常。 -::: - -**示例** - -**用法示例** - -```sql title=Query -SELECT dictGetInt8('all_types_dict', 'Int8_value', 1) -``` - -```response title=Response -┌─dictGetInt8(⋯_value', 1)─┐ -│ -100 │ -└──────────────────────────┘ -``` - - -## dictGetInt8OrDefault - -自 v1.1 版本引入 - -将字典的属性值转换为 `Int8` 数据类型,而不受字典配置影响;如果未找到键,则返回指定的默认值。 - -**语法** - -```sql -dictGetInt8OrDefault(dict_name, attr_name, id_expr, default_value_expr) -``` - -**参数** - -* `dict_name` — 字典名称。[`String`](/sql-reference/data-types/string) -* `attr_name` — 字典的列名。[`String`](/sql-reference/data-types/string) 或 [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — 键的值。返回字典键类型的值或元组值的表达式(取决于字典配置)。[`Expression`](/sql-reference/data-types/special-data-types/expression) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value_expr` — 当字典中不存在键为 `id_expr` 的行时返回的值。[`Expression`](/sql-reference/data-types/special-data-types/expression) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) - -**返回值** - -返回与 `id_expr` 对应的字典属性值, -否则返回作为 `default_value_expr` 参数传入的值。 - -:::note -如果 ClickHouse 无法解析该属性的值,或者该值与属性的数据类型不匹配,则会抛出异常。 -::: - -**示例** - -**用法示例** - -```sql title=Query --- 对于已存在的键 -SELECT dictGetInt8('all_types_dict', 'Int8_value', 1); - --- 对于不存在的键,返回指定的默认值 (-1) -SELECT dictGetInt8OrDefault('all_types_dict', 'Int8_value', 999, -1); -``` - -```response title=Response -┌─dictGetInt8(⋯_value', 1)─┐ -│ -100 │ -└──────────────────────────┘ -┌─dictGetInt8O⋯', 999, -1)─┐ -│ -1 │ -└──────────────────────────┘ -``` - - -## dictGetKeys - -引入于:v25.11 - -返回其属性等于指定值的字典键(或键集合)。这是在单个属性上的 `dictGet` 函数的逆操作。 - -使用设置 `max_reverse_dictionary_lookup_cache_size_bytes` 来限制 `dictGetKeys` 在每个查询中使用的反向查找缓存大小。 -该缓存为每个属性值存储序列化的键元组,以避免在同一查询中重复扫描字典。 -该缓存不会在查询之间持久化。当达到限制时,会按 LRU 策略逐出条目。 -对于大型字典,当输入的基数较低且工作集可以装入缓存时,该机制最为有效。将其设为 `0` 可禁用缓存。 - -**语法** - -```sql -dictGetKeys('dict_name', 'attr_name', value_expr) -``` - -**参数** - -* `dict_name` — 字典名称。[`String`](/sql-reference/data-types/string) -* `attr_name` — 要匹配的属性名。[`String`](/sql-reference/data-types/string) -* `value_expr` — 用于与该属性值进行匹配的值。[`Expression`](/sql-reference/data-types/special-data-types/expression) - -**返回值** - -对于单键字典:返回所有其属性值等于 `value_expr` 的键组成的数组。对于多键字典:返回所有其属性值等于 `value_expr` 的键元组组成的数组。如果字典中不存在属性值为 `value_expr` 的条目,则返回空数组。如果 ClickHouse 无法解析该属性的值,或者该值无法转换为属性的数据类型,则会抛出异常。 - -**示例** - - -## dictGetOrDefault - -引入自:v18.16 - -从字典中获取值,如果未找到键则返回默认值。 - -**语法** - -```sql -dictGetOrDefault('dict_name', attr_names, id_expr, default_value) -``` - -**参数** - -* `dict_name` — 字典名称。[`String`](/sql-reference/data-types/string) -* `attr_names` — 字典的列名,或列名组成的元组。[`String`](/sql-reference/data-types/string) 或 [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — 键值。一个返回 UInt64/Tuple(T) 的表达式。[`UInt64`](/sql-reference/data-types/int-uint) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value` — 当未找到对应键时返回的默认值。其类型必须与该属性的数据类型匹配。 - -**返回值** - -如果找到了该键,则返回与 `id_expr` 对应的字典属性值。 -如果未找到键,则返回提供的 `default_value`。 - -**示例** - -**获取带默认值的值** - -```sql title=Query -SELECT dictGetOrDefault('ext_dict_mult', 'c1', toUInt64(999), 0) AS val -``` - -```response title=Response -0 -``` - - -## dictGetOrNull - -自 v21.4 引入 - -从字典中获取值,如果未找到键则返回 NULL。 - -**语法** - -```sql -dictGetOrNull('dict_name', 'attr_name', id_expr) -``` - -**参数** - -* `dict_name` — 字典名称。字符串字面量。 -* `attr_name` — 要获取的列名。字符串字面量。 -* `id_expr` — 键值。返回字典键类型的值的表达式。 - -**返回值** - -如果找到键,则返回与 `id_expr` 对应的字典属性值。 -如果未找到键,则返回 `NULL`。 - -**示例** - -**使用范围键字典的示例** - -```sql title=Query -SELECT - (number, toDate('2019-05-20')), - dictGetOrNull('range_key_dictionary', 'value', number, toDate('2019-05-20')), -FROM system.numbers LIMIT 5 FORMAT TabSeparated; -``` - -```response title=Response -(0,'2019-05-20') \N -(1,'2019-05-20') 第一 -(2,'2019-05-20') 第二 -(3,'2019-05-20') 第三 -(4,'2019-05-20') \N -``` - - -## dictGetString - -自 v1.1 起引入 - -将字典属性值转换为 `String` 数据类型,而不受字典配置方式的影响。 - -**语法** - -```sql -dictGetString(dict_name, attr_name, id_expr) -``` - -**参数** - -* `dict_name` — 字典的名称。[`String`](/sql-reference/data-types/string) -* `attr_name` — 字典中列的名称。[`String`](/sql-reference/data-types/string) 或 [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — 键值。返回字典键类型的值或元组值的表达式(取决于字典配置)。[`Expression`](/sql-reference/data-types/special-data-types/expression) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) - -**返回值** - -返回与 `id_expr` 对应的字典属性值, -否则返回在字典配置中为该属性指定的 `` 元素的内容。 - -:::note -如果 ClickHouse 无法解析属性的值,或者该值与属性的数据类型不匹配,会抛出异常。 -::: - -**示例** - -**用法示例** - -```sql title=Query -SELECT dictGetString('all_types_dict', 'String_value', 1) -``` - -```response title=Response -┌─dictGetString(⋯_value', 1)─┐ -│ 测试字符串 │ -└────────────────────────────┘ -``` - - -## dictGetStringOrDefault - -自 v1.1 起引入 - -将字典属性值转换为 `String` 类型,而不受字典配置影响;如果未找到键,则返回提供的默认值。 - -**语法** - -```sql -dictGetStringOrDefault(dict_name, attr_name, id_expr, default_value_expr) -``` - -**参数** - -* `dict_name` — 字典名称。[`String`](/sql-reference/data-types/string) -* `attr_name` — 字典列名。[`String`](/sql-reference/data-types/string) 或 [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — 键值。返回字典键类型值或元组值的表达式(取决于字典配置)。[`Expression`](/sql-reference/data-types/special-data-types/expression) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value_expr` — 当字典中不存在具有 `id_expr` 键的行时返回的值。[`Expression`](/sql-reference/data-types/special-data-types/expression) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) - -**返回值** - -返回与 `id_expr` 对应的字典属性值, -否则返回作为 `default_value_expr` 参数传入的值。 - -:::note -如果 ClickHouse 无法解析该属性的值,或者该值与属性的数据类型不匹配,则会抛出异常。 -::: - -**示例** - -**用法示例** - -```sql title=Query --- 对于已存在的键 -SELECT dictGetString('all_types_dict', 'String_value', 1); - --- 对于不存在的键,返回指定的默认值 -SELECT dictGetStringOrDefault('all_types_dict', 'String_value', 999, 'default'); -``` - -```response title=Response -┌─dictGetString(⋯_value', 1)─┐ -│ 测试字符串 │ -└────────────────────────────┘ -┌─dictGetStringO⋯ 999, 'default')─┐ -│ 默认值 │ -└─────────────────────────────────┘ -``` - - -## dictGetUInt16 - -自 v1.1 起提供 - -将字典属性值转换为 `UInt16` 数据类型,而不受字典配置的影响。 - -**语法** - -```sql -dictGetUInt16(dict_name, attr_name, id_expr) -``` - -**参数** - -* `dict_name` — 字典的名称。[`String`](/sql-reference/data-types/string) -* `attr_name` — 字典列的名称。[`String`](/sql-reference/data-types/string) 或 [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — 键值。一个返回字典键类型值或元组值的表达式(取决于字典配置)。[`Expression`](/sql-reference/data-types/special-data-types/expression) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) - -**返回值** - -返回与 `id_expr` 对应的字典属性的值, -否则返回在字典配置中为该属性指定的 `` 元素的内容。 - -:::note -如果 ClickHouse 无法解析属性值,或者该值与属性的数据类型不匹配,则会抛出异常。 -::: - -**示例** - -**用法示例** - -```sql title=Query -SELECT dictGetUInt16('all_types_dict', 'UInt16_value', 1) -``` - -```response title=Response -┌─dictGetUInt1⋯_value', 1)─┐ -│ 5000 │ -└──────────────────────────┘ -``` - - -## dictGetUInt16OrDefault - -自 v1.1 版本引入 - -将字典属性值转换为 `UInt16` 数据类型,而不受字典配置的影响;如果未找到键,则返回提供的默认值。 - -**语法** - -```sql -dictGetUInt16OrDefault(dict_name, attr_name, id_expr, default_value_expr) -``` - -**参数** - -* `dict_name` — 字典名称。[`String`](/sql-reference/data-types/string) -* `attr_name` — 字典列名称。[`String`](/sql-reference/data-types/string) 或 [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — 键的值。返回字典键类型的值或元组值的表达式(取决于字典配置)。[`Expression`](/sql-reference/data-types/special-data-types/expression) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value_expr` — 当字典中不包含键为 `id_expr` 的行时返回的值。[`Expression`](/sql-reference/data-types/special-data-types/expression) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) - -**返回值** - -返回与 `id_expr` 对应的字典属性值; -否则返回传入 `default_value_expr` 参数的值。 - -:::note -如果 ClickHouse 无法解析属性的值,或者该值与属性的数据类型不匹配,将抛出异常。 -::: - -**示例** - -**使用示例** - -```sql title=Query --- 对于已存在的键 -SELECT dictGetUInt16('all_types_dict', 'UInt16_value', 1); - --- 对于不存在的键,将返回指定的默认值 0 -SELECT dictGetUInt16OrDefault('all_types_dict', 'UInt16_value', 999, 0); -``` - -```response title=Response -┌─dictGetUInt1⋯_value', 1)─┐ -│ 5000 │ -└──────────────────────────┘ -┌─dictGetUInt1⋯e', 999, 0)─┐ -│ 0 │ -└──────────────────────────┘ -``` - - -## dictGetUInt32 - -自 v1.1 引入 - -将字典属性的值转换为 `UInt32` 数据类型,与字典配置无关。 - -**语法** - -```sql -dictGetUInt32(dict_name, attr_name, id_expr) -``` - -**参数** - -* `dict_name` — 字典名称。[`String`](/sql-reference/data-types/string) -* `attr_name` — 字典列名。[`String`](/sql-reference/data-types/string) 或 [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — 键的值。返回字典键类型值或元组值的表达式(取决于字典配置)。[`Expression`](/sql-reference/data-types/special-data-types/expression) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) - -**返回值** - -返回与 `id_expr` 对应的字典属性值, -否则返回在字典配置中为该属性指定的 `` 元素内容。 - -:::note -如果 ClickHouse 无法解析属性值,或该值与属性的数据类型不匹配,则会抛出异常。 -::: - -**示例** - -**用法示例** - -```sql title=Query -SELECT dictGetUInt32('all_types_dict', 'UInt32_value', 1) -``` - -```response title=Response -┌─dictGetUInt3⋯_value', 1)─┐ -│ 1000000 │ -└──────────────────────────┘ -``` - - -## dictGetUInt32OrDefault - -自 v1.1 版本引入 - -将字典属性值转换为 `UInt32` 数据类型,而不受字典配置影响;如果未找到键,则返回提供的默认值。 - -**语法** - -```sql -dictGetUInt32OrDefault(dict_name, attr_name, id_expr, default_value_expr) -``` - -**参数** - -* `dict_name` — 字典名称。[`String`](/sql-reference/data-types/string) -* `attr_name` — 字典列名。[`String`](/sql-reference/data-types/string) 或 [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — 键值。返回字典键类型值或元组值的表达式(取决于字典配置)。[`Expression`](/sql-reference/data-types/special-data-types/expression) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value_expr` — 当字典中不存在带有键 `id_expr` 的行时返回的值。[`Expression`](/sql-reference/data-types/special-data-types/expression) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) - -**返回值** - -返回与 `id_expr` 对应的字典属性值; -否则返回作为 `default_value_expr` 参数传入的值。 - -:::note -如果 ClickHouse 无法解析属性的值,或者该值与属性的数据类型不匹配,则会抛出异常。 -::: - -**示例** - -**用法示例** - -```sql title=Query --- 对于已存在的键 -SELECT dictGetUInt32('all_types_dict', 'UInt32_value', 1); - --- 对于不存在的键,如果键不存在则返回提供的默认值 (0) -SELECT dictGetUInt32OrDefault('all_types_dict', 'UInt32_value', 999, 0); -``` - -```response title=Response -┌─dictGetUInt3⋯_value', 1)─┐ -│ 1000000 │ -└──────────────────────────┘ -┌─dictGetUInt3⋯e', 999, 0)─┐ -│ 0 │ -└──────────────────────────┘ -``` - - -## dictGetUInt64 - -在 v1.1 中引入 - -将字典属性值转换为 `UInt64` 数据类型,而不受字典配置的影响。 - -**语法** - -```sql -dictGetUInt64(dict_name, attr_name, id_expr) -``` - -**参数** - -* `dict_name` — 字典名称。[`String`](/sql-reference/data-types/string) -* `attr_name` — 字典中列的名称。[`String`](/sql-reference/data-types/string) 或 [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — 键值。返回字典键类型值或元组值的表达式(取决于字典配置)。[`Expression`](/sql-reference/data-types/special-data-types/expression) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) - -**返回值** - -返回与 `id_expr` 对应的字典属性值; -否则返回在字典配置中为该属性指定的 `` 元素的内容。 - -:::note -如果 ClickHouse 无法解析该属性的值,或该值与属性的数据类型不匹配,则会抛出异常。 -::: - -**示例** - -**用法示例** - -```sql title=Query -SELECT dictGetUInt64('all_types_dict', 'UInt64_value', 1) -``` - -```response title=Response -┌─dictGetUInt6⋯_value', 1)─┐ -│ 9223372036854775807 │ -└──────────────────────────┘ -``` - - -## dictGetUInt64OrDefault - -自 v1.1 起引入 - -将字典属性值转换为 `UInt64` 数据类型,而不受字典配置影响;如果未找到键,则返回提供的默认值。 - -**语法** - -```sql -dictGetUInt64OrDefault(dict_name, attr_name, id_expr, default_value_expr) -``` - -**参数** - -* `dict_name` — 字典名称。[`String`](/sql-reference/data-types/string) -* `attr_name` — 字典中列的名称。[`String`](/sql-reference/data-types/string) 或 [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — 键的值。返回字典键类型的值或元组值的表达式(取决于字典配置)。[`Expression`](/sql-reference/data-types/special-data-types/expression) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value_expr` — 当字典中不包含键为 `id_expr` 的行时返回的值(或一组值)。[`Expression`](/sql-reference/data-types/special-data-types/expression) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) - -**返回值** - -返回与 `id_expr` 对应的字典属性值, -否则返回作为 `default_value_expr` 参数传入的值。 - -:::note -如果 ClickHouse 无法解析属性的值,或者该值与属性的数据类型不匹配,则会抛出异常。 -::: - -**示例** - -**用法示例** - -```sql title=Query --- 对于存在的键 -SELECT dictGetUInt64('all_types_dict', 'UInt64_value', 1); - --- 对于不存在的键,返回给定的默认值 (0) -SELECT dictGetUInt64OrDefault('all_types_dict', 'UInt64_value', 999, 0); -``` - -```response title=Response -┌─dictGetUInt6⋯_value', 1)─┐ -│ 9223372036854775807 │ -└──────────────────────────┘ -┌─dictGetUInt6⋯e', 999, 0)─┐ -│ 0 │ -└──────────────────────────┘ -``` - - -## dictGetUInt8 - -自 v1.1 起引入 - -将字典属性值转换为 `UInt8` 数据类型,不受字典配置影响。 - -**语法** - -```sql -dictGetUInt8(dict_name, attr_name, id_expr) -``` - -**参数** - -* `dict_name` — 字典名称。[`String`](/sql-reference/data-types/string) -* `attr_name` — 字典列名。[`String`](/sql-reference/data-types/string) 或 [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — 键值。返回字典键类型值或元组值的表达式(取决于字典配置)。[`Expression`](/sql-reference/data-types/special-data-types/expression) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) - -**返回值** - -返回与 `id_expr` 对应的字典属性的值, -否则返回在字典配置中为该属性指定的 `` 元素内容。 - -:::note -如果无法解析属性的值,或该值与属性的数据类型不匹配,ClickHouse 会抛出异常。 -::: - -**示例** - -**使用示例** - -```sql title=Query -SELECT dictGetUInt8('all_types_dict', 'UInt8_value', 1) -``` - -```response title=Response -┌─dictGetUInt8⋯_value', 1)─┐ -│ 100 │ -└──────────────────────────┘ -``` - - -## dictGetUInt8OrDefault - -自 v1.1 起引入 - -将字典属性值转换为 `UInt8` 数据类型,而不受字典配置影响;如果未找到键,则返回提供的默认值。 - -**语法** - -```sql -dictGetUInt8OrDefault(dict_name, attr_name, id_expr, default_value_expr) -``` - -**参数** - -* `dict_name` — 字典名称。[`String`](/sql-reference/data-types/string) -* `attr_name` — 字典列名称。[`String`](/sql-reference/data-types/string) 或 [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — 键值。返回字典键类型值或元组值的表达式(取决于字典配置)。[`Expression`](/sql-reference/data-types/special-data-types/expression) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value_expr` — 当字典中不包含键为 `id_expr` 的行时返回的值。[`Expression`](/sql-reference/data-types/special-data-types/expression) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) - -**返回值** - -返回与 `id_expr` 对应的字典属性值, -否则返回作为 `default_value_expr` 参数传入的值。 - -:::note -如果 ClickHouse 无法解析属性的值,或该值与属性的数据类型不匹配,则会抛出异常。 -::: - -**示例** - -**用法示例** - -```sql title=Query --- 对于已存在的键 -SELECT dictGetUInt8('all_types_dict', 'UInt8_value', 1); - --- 对于不存在的键,返回指定的默认值 (0) -SELECT dictGetUInt8OrDefault('all_types_dict', 'UInt8_value', 999, 0); -``` - -```response title=Response -┌─dictGetUInt8⋯_value', 1)─┐ -│ 100 │ -└──────────────────────────┘ -┌─dictGetUInt8⋯e', 999, 0)─┐ -│ 0 │ -└──────────────────────────┘ -``` - - -## dictGetUUID - -引入版本:v1.1 - -将字典属性值转换为 `UUID` 数据类型,而不受字典配置影响。 - -**语法** - -```sql -dictGetUUID(dict_name, attr_name, id_expr) -``` - -**参数** - -* `dict_name` — 字典名称。[`String`](/sql-reference/data-types/string) -* `attr_name` — 字典中列(属性)的名称。[`String`](/sql-reference/data-types/string) 或 [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — 键值。返回字典键类型值或元组值的表达式(取决于字典配置)。[`Expression`](/sql-reference/data-types/special-data-types/expression) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) - -**返回值** - -返回与 `id_expr` 对应的字典属性值, -否则返回在字典配置中为该属性指定的 `` 元素内容。 - -:::note -如果 ClickHouse 无法解析属性的值,或该值与属性的数据类型不匹配,则会抛出异常。 -::: - -**示例** - -**用法示例** - -```sql title=Query -SELECT dictGetUUID('all_types_dict', 'UUID_value', 1) -``` - -```response title=Response -┌─dictGetUUID(⋯_value', 1)─────────────┐ -│ 123e4567-e89b-12d3-a456-426614174000 │ -└──────────────────────────────────────┘ -``` - - -## dictGetUUIDOrDefault - -自 v1.1 引入 - -将字典属性值转换为 `UUID` 数据类型,而不受字典配置影响;如果未找到该键,则返回提供的默认值。 - -**语法** - -```sql -dictGetUUIDOrDefault(dict_name, attr_name, id_expr, default_value_expr) -``` - -**参数** - -* `dict_name` — 字典名称。[`String`](/sql-reference/data-types/string) -* `attr_name` — 字典中列(属性)的名称。[`String`](/sql-reference/data-types/string) 或 [`Tuple(String)`](/sql-reference/data-types/tuple) -* `id_expr` — 键值。返回字典键类型值或元组值的表达式(取决于字典配置)。[`Expression`](/sql-reference/data-types/special-data-types/expression) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) -* `default_value_expr` — 当字典中不包含以 `id_expr` 为键的行时返回的值。[`Expression`](/sql-reference/data-types/special-data-types/expression) 或 [`Tuple(T)`](/sql-reference/data-types/tuple) - -**返回值** - -返回与 `id_expr` 对应的字典属性值, -否则返回作为 `default_value_expr` 参数传入的值。 - -:::note -如果 ClickHouse 无法解析属性的值,或者该值与属性的数据类型不匹配,则会抛出异常。 -::: - -**示例** - -**使用示例** - -```sql title=Query --- 对于已存在的键 -SELECT dictGetUUID('all_types_dict', 'UUID_value', 1); - --- 对于不存在的键,返回指定的默认值 -SELECT dictGetUUIDOrDefault('all_types_dict', 'UUID_value', 999, '00000000-0000-0000-0000-000000000000'::UUID); -``` - -```response title=Response -┌─dictGetUUID('all_t⋯ 'UUID_value', 1)─┐ -│ 550e8400-e29b-41d4-a716-446655440000 │ -└──────────────────────────────────────┘ -┌─dictGetUUIDOrDefa⋯000000000000'::UUID)─┐ -│ 00000000-0000-0000-0000-000000000000 │ -└────────────────────────────────────────┘ -``` - - -## dictHas - -自 v1.1 起引入 - -检查字典中是否包含指定键。 - -**语法** - -```sql -dictHas('dict_name', id_expr) -``` - -**参数** - -* `dict_name` — 字典名称。[`String`](/sql-reference/data-types/string) -* `id_expr` — 键值。[`const String`](/sql-reference/data-types/string) - -**返回值** - -如果键存在则返回 `1`,否则返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**检查字典中某个键是否存在** - -```sql title=Query --- 考虑以下分层字典: --- 0 (根) --- └── 1 (层级 1 - 节点 1) --- ├── 2 (层级 2 - 节点 2) --- │ ├── 4 (层级 3 - 节点 4) --- │ └── 5 (层级 3 - 节点 5) --- └── 3 (层级 2 - 节点 3) --- └── 6 (层级 3 - 节点 6) - -SELECT dictHas('hierarchical_dictionary', 2); -SELECT dictHas('hierarchical_dictionary', 7); -``` - -```response title=Response -┌─dictHas('hie⋯ionary', 2)─┐ -│ 1 │ -└──────────────────────────┘ -┌─dictHas('hie⋯ionary', 7)─┐ -│ 0 │ -└──────────────────────────┘ -``` - - -## dictIsIn - -引入于:v1.1 - -在字典中沿完整层级链检查某个键的祖先。 - -**语法** - -```sql -dictIsIn(dict_name, child_id_expr, ancestor_id_expr) -``` - -**参数** - -* `dict_name` — 字典名称。[`String`](/sql-reference/data-types/string) -* `child_id_expr` — 要检查的键。[`String`](/sql-reference/data-types/string) -* `ancestor_id_expr` — `child_id_expr` 键的预期祖先。[`const String`](/sql-reference/data-types/string) - -**返回值** - -如果 `child_id_expr` 不是 `ancestor_id_expr` 的子节点则返回 `0`;如果 `child_id_expr` 是 `ancestor_id_expr` 的子节点,或 `child_id_expr` 本身就是 `ancestor_id_expr`,则返回 `1`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**检查层次关系** - -```sql title=Query --- 有效的层级关系 -SELECT dictIsIn('hierarchical_dictionary', 6, 3) - --- 无效的层级关系 -SELECT dictIsIn('hierarchical_dictionary', 3, 5) -``` - -```response title=Response -┌─dictIsIn('hi⋯ary', 6, 3)─┐ -│ 1 │ -└──────────────────────────┘ -┌─dictIsIn('hi⋯ary', 3, 5)─┐ -│ 0 │ -└──────────────────────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/financial-functions.md b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/financial-functions.md index 5d98994c231..3c09274a01c 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/financial-functions.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/financial-functions.md @@ -1,5 +1,5 @@ --- -description: '财务函数文档' +description: '财务函数相关文档' sidebar_label: '财务' slug: /sql-reference/functions/financial-functions title: '财务函数' @@ -7,255 +7,23 @@ keywords: ['财务', '收益率', '净现值'] doc_type: 'reference' --- - - # 财务函数 :::note -以下文档是基于 `system.functions` 系统表生成的 +以下文档内容由 `system.functions` 系统表自动生成 ::: {/* - 在文档框架构建时,下面这些标签内的内容 - 会被由 system.functions 生成的文档替换。请不要修改或删除这些标签。 + 下面标签内的内容会在文档框架构建期间,自动替换为从 system.functions 生成的文档。 + 请不要修改或删除这些标签。 参见:https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } +{/*AUTOGENERGED_START*/ } -{/*AUTOGENERATED_START*/ } - -## financialInternalRateOfReturn - -自 v25.7 引入 - -计算在固定时间间隔发生的一系列现金流的内部收益率(IRR)。 -IRR 是使净现值(NPV)等于零的折现率。 - -IRR 通过求解下列方程得到: - -$$ -\sum_{i=0}^n \frac{cashflow_i}{(1 + irr)^i} = 0 -$$ - -**语法** - -```sql -financialInternalRateOfReturn(现金流[, 估计值]) -``` - -**参数** - -* `cashflows` — 现金流数组。每个值表示一笔付款(负值)或收入(正值)。[`Array(Int8/16/32/64)`](/sql-reference/data-types/array) 或 [`Array(Float*)`](/sql-reference/data-types/array) -* `[, guess]` — 可选的内部收益率初始猜测值(常量,默认 0.1)。[`Float*`](/sql-reference/data-types/float) - -**返回值** - -返回内部收益率。如果计算无法收敛、输入数组为空或只有一个元素、所有现金流为零,或出现其他计算错误,则返回 `NaN`。[`Float64`](/sql-reference/data-types/float) - -**示例** - -**simple_example** - -```sql title=Query -SELECT financialInternalRateOfReturn([-100, 39, 59, 55, 20]) -``` - -```response title=Response -0.2809484211599611 -``` - -**simple_example_with_guess** - -```sql title=Query -SELECT financialInternalRateOfReturn([-100, 39, 59, 55, 20], 0.1) -``` - -```response title=Response -0.2809484211599611 -``` - - -## financialInternalRateOfReturnExtended {#financialInternalRateOfReturnExtended} - -引入版本:v25.7 - -计算不规则时间间隔发生的一系列现金流的扩展内部收益率(XIRR)。XIRR 是使所有现金流的净现值(NPV)等于零的贴现率。 - -XIRR 尝试求解以下方程(以 `ACT_365F` 为例): - -$$ -\sum_{i=0}^n \frac{cashflow_i}{(1 + rate)^{(date_i - date_0)/365}} = 0 -$$ - -数组应按日期升序排序。日期必须唯一。 - -**语法** - -```sql -financialInternalRateOfReturnExtended(cashflow, date [, guess, daycount]) -``` - -**参数** - -- `cashflow` — 与第二个参数中的日期相对应的现金流数组。[`Array(Int8/16/32/64)`](/sql-reference/data-types/array) 或 [`Array(Float*)`](/sql-reference/data-types/array) -- `date` — 与现金流相对应的唯一日期的有序数组。[`Array(Date)`](/sql-reference/data-types/array) 或 [`Array(Date32)`](/sql-reference/data-types/array) -- `[, guess]` — 可选。XIRR 计算的初始猜测值(常量值)。[`Float*`](/sql-reference/data-types/float) -- `[, daycount]` — - 可选的日计数惯例(默认为 'ACT_365F')。支持的值: -- 'ACT_365F' - 实际天数/365 固定:使用日期之间的实际天数除以 365 -- 'ACT_365_25' - 实际天数/365.25:使用日期之间的实际天数除以 365.25 - [`String`](/sql-reference/data-types/string) - -**返回值** - -返回 XIRR 值。如果无法执行计算,则返回 NaN。[`Float64`](/sql-reference/data-types/float) - -**示例** - -**简单示例** - -```sql title=查询 -SELECT financialInternalRateOfReturnExtended([-10000, 5750, 4250, 3250], [toDate('2020-01-01'), toDate('2020-03-01'), toDate('2020-10-30'), toDate('2021-02-15')]) -``` - -```response title=响应 -0.6342972615260243 -``` - -**带猜测值的简单示例** - -```sql title=查询 -SELECT financialInternalRateOfReturnExtended([-10000, 5750, 4250, 3250], [toDate('2020-01-01'), toDate('2020-03-01'), toDate('2020-10-30'), toDate('2021-02-15')], 0.5) -``` - -```response title=响应 -0.6342972615260243 -``` - -**日计数简单示例** - -```sql title=查询 -SELECT round(financialInternalRateOfReturnExtended([100000, -110000], [toDate('2020-01-01'), toDate('2021-01-01')], 0.1, 'ACT_365_25'), 6) AS xirr_365_25 -``` - -```response title=响应 -0.099785 -``` - - -## financialNetPresentValue - -引入于:v25.7 - -在假设各期现金流之间时间间隔相等的前提下,计算一系列现金流的净现值(NPV)。 - -默认变体(`start_from_zero` = true): - -$$ -\sum_{i=0}^{N-1} \frac{values_i}{(1 + rate)^i} -$$ - -与 Excel 兼容的变体(`start_from_zero` = false): - -$$ -\sum_{i=1}^{N} \frac{values_i}{(1 + rate)^i} -$$ - -**语法** - -```sql -financialNetPresentValue(rate, cashflows[, start_from_zero]) -``` - -**参数** - -* `rate` — 要应用的折现率。[`Float*`](/sql-reference/data-types/float) -* `cashflows` — 现金流数组。每个值表示一笔支出(负值)或收入(正值)。[`Array(Int8/16/32/64)`](/sql-reference/data-types/array) 或 [`Array(Float*)`](/sql-reference/data-types/array) -* `[, start_from_zero]` — 可选的布尔参数,指示净现值(NPV)计算从第 `0` 期(true)还是第 `1` 期(false,与 Excel 兼容)开始。默认值:true。[`Bool`](/sql-reference/data-types/boolean) - -**返回值** - -返回一个 Float64 类型的净现值。[`Float64`](/sql-reference/data-types/float) - -**示例** - -**default_calculation** - -```sql title=Query -SELECT financialNetPresentValue(0.08, [-40000., 5000., 8000., 12000., 30000.]) -``` - -```response title=Response -3065.2226681795255 -``` - -**excel_compatible_calculation** - -```sql title=Query -SELECT financialNetPresentValue(0.08, [-40000., 5000., 8000., 12000., 30000.], false) -``` - -```response title=Response -2838.1691372032656 -``` - - -## financialNetPresentValueExtended {#financialNetPresentValueExtended} - -引入版本:v25.7 - -计算在不规则时间间隔发生的一系列现金流的扩展净现值(XNPV)。XNPV 在计算现值时会考虑每笔现金流的具体时间点。 - -`ACT_365F` 的 XNPV 公式: - -$$ -XNPV=\sum_{i=1}^n \frac{cashflow_i}{(1 + rate)^{(date_i - date_0)/365}} -$$ - -数组应按日期升序排序。日期必须唯一。 - -**语法** - -```sql -financialNetPresentValueExtended(rate, cashflows, dates[, daycount]) -``` - -**参数** - -- `rate` — 应用的贴现率。[`Float*`](/sql-reference/data-types/float) -- `cashflows` — 现金流数组。每个值表示一笔支付(负值)或收入(正值)。必须至少包含一个正值和一个负值。[`Array(Int8/16/32/64)`](/sql-reference/data-types/array) 或 [`Array(Float*)`](/sql-reference/data-types/array) -- `dates` — 与每笔现金流对应的日期数组。必须与 cashflows 数组大小相同。[`Array(Date)`](/sql-reference/data-types/array) 或 [`Array(Date32)`](/sql-reference/data-types/array) -- `[, daycount]` — 可选的日计数惯例。支持的值:`'ACT_365F'`(默认)— 实际天数/365 固定法,`'ACT_365_25'` — 实际天数/365.25。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回 Float64 类型的净现值。[`Float64`](/sql-reference/data-types/float) - -**示例** - -**基本用法** - -```sql title=查询 -SELECT financialNetPresentValueExtended(0.1, [-10000., 5750., 4250., 3250.], [toDate('2020-01-01'), toDate('2020-03-01'), toDate('2020-10-30'), toDate('2021-02-15')]) -``` - -```response title=响应 -2506.579458169746 -``` - -**使用不同的日计数惯例** - -```sql title=查询 -SELECT financialNetPresentValueExtended(0.1, [-10000., 5750., 4250., 3250.], [toDate('2020-01-01'), toDate('2020-03-01'), toDate('2020-10-30'), toDate('2021-02-15')], 'ACT_365_25') -``` - -```response title=响应 -2507.067268742502 -``` - - +{/*AUTOGENERATED_END*/ } ## 相关资源 {#related-resources} -- [ClickHouse 中的财务函数视频](https://www.youtube.com/watch?v=BePLPVa0w_o) +- [ClickHouse 中的财务函数视频](https://www.youtube.com/watch?v=BePLPVa0w_o) \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/functions-for-nulls.md b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/functions-for-nulls.md index 5c3a78c09d1..a39ce81ca3b 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/functions-for-nulls.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/functions-for-nulls.md @@ -1,479 +1,20 @@ --- -description: '用于处理 Nullable 值的函数文档' -sidebar_label: 'Nullable' +description: '用于处理可空(Nullable)值的函数文档' +sidebar_label: 'Nullable(可空)' slug: /sql-reference/functions/functions-for-nulls -title: '用于处理 Nullable 值的函数' -keywords: ['Nullable', '函数'] +title: '用于处理可空值的函数' +keywords: ['nullable', '可空', '函数'] doc_type: 'reference' --- - - -# 用于处理可空值的函数 +# 用于处理 Nullable 值的函数 {/* - 下面标签内的内容会在文档框架构建期间被替换为 - 由 system.functions 生成的文档。请不要修改或移除这些标签。 - 请参见:https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md + 以下标签的内容会在文档框架构建时 + 被 system.functions 生成的文档替换。请不要修改或删除这些标签。 + 参见:https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## assumeNotNull - -自 v1.1 起引入 - -对于 [`Nullable`](../data-types/nullable.md) 类型的值,返回其对应的非 `Nullable` 类型值。 -如果原始值为 `NULL`,则可能返回任意结果。 - -另请参阅:函数 [`ifNull`](#ifNull) 和 [`coalesce`](#coalesce)。 - -**语法** - -```sql -assumeNotNull(x) -``` - -**参数** - -* `x` — 任意可空类型的原始值。[`Nullable(T)`](/sql-reference/data-types/nullable) - -**返回值** - -如果原始值不是 `NULL`,则返回非可空值;如果输入值为 `NULL`,则返回一个任意值。[`Any`](/sql-reference/data-types) - -**示例** - -**用法示例** - -```sql title=Query -CREATE TABLE t_null (x Int8, y Nullable(Int8)) -ENGINE=MergeTree() -ORDER BY x; - -INSERT INTO t_null VALUES (1, NULL), (2, 3); - -SELECT assumeNotNull(y) FROM table; -SELECT toTypeName(assumeNotNull(y)) FROM t_null; -``` - -```response title=Response -┌─assumeNotNull(y)─┐ -│ 0 │ -│ 3 │ -└──────────────────┘ -┌─toTypeName(assumeNotNull(y))─┐ -│ Int8 │ -│ Int8 │ -└──────────────────────────────┘ -``` - - -## coalesce - -引入版本:v1.1 - -返回从左到右第一个非 `NULL` 的参数。 - -**语法** - -```sql -coalesce(x[, y, ...]) -``` - -**参数** - -* `x[, y, ...]` — 任意数量的非复合类型参数。所有参数的数据类型必须彼此兼容。[`Any`](/sql-reference/data-types) - -**返回值** - -返回第一个非 `NULL` 的参数;如果所有参数均为 `NULL`,则返回 `NULL`。[`Any`](/sql-reference/data-types) 或 [`NULL`](/sql-reference/syntax#null) - -**示例** - -**用法示例** - -```sql title=Query --- 假设有一个联系人列表,其中可能包含联系客户的多种方式。 - -CREATE TABLE aBook -( - name String, - mail Nullable(String), - phone Nullable(String), - telegram Nullable(UInt32) -) -ENGINE = MergeTree -ORDER BY tuple(); - -INSERT INTO aBook VALUES ('client 1', NULL, '123-45-67', 123), ('client 2', NULL, NULL, NULL); - --- mail 和 phone 字段为 String 类型,但 telegram 字段为 UInt32 类型,因此需要转换为 String。 - --- 从联系人列表中获取客户的第一个可用联系方式 - -SELECT name, coalesce(mail, phone, CAST(telegram,'Nullable(String)')) FROM aBook; -``` - -```response title=Response -┌─name─────┬─coalesce(mail, phone, CAST(telegram, 'Nullable(String)'))─┐ -│ client 1 │ 123-45-67 │ -│ client 2 │ ᴺᵁᴸᴸ │ -└──────────┴───────────────────────────────────────────────────────────┘ -``` - - -## firstNonDefault - -自 v25.9 起引入 - -从一组参数中返回第一个非默认值 - -**语法** - -```sql -``` - -**参数** - -* `arg1` — 要检查的第一个参数 - `arg2` — 要检查的第二个参数 - `...` — 要检查的其他参数 - -**返回值** - -返回类型为所有参数的公共超类型 - -**示例** - -**整数** - -```sql title=Query -SELECT firstNonDefault(0, 1, 2) -``` - -```response title=Response -1 -``` - -**字符串** - -```sql title=Query -SELECT firstNonDefault('', 'hello', 'world') -``` - -```response title=Response -'你好' -``` - -**空值** - -```sql title=Query -SELECT firstNonDefault(NULL, 0 :: UInt8, 1 :: UInt8) -``` - -```response title=Response -1 -``` - -**可为空的零** - -```sql title=Query -SELECT firstNonDefault(NULL, 0 :: Nullable(UInt8), 1 :: Nullable(UInt8)) -``` - -```response title=Response -0 -``` - - -## ifNull - -自 v1.1 起引入。 - -当第一个参数为 `NULL` 时,返回一个替代值。 - -**语法** - -```sql -ifNull(x, alt) -``` - -**参数** - -* `x` — 要检查是否为 `NULL` 的值。[`Any`](/sql-reference/data-types) -* `alt` — 当 `x` 为 `NULL` 时函数返回的值。[`Any`](/sql-reference/data-types) - -**返回值** - -如果 `x` 不为 `NULL`,则返回 `x` 的值,否则返回 `alt`。[`Any`](/sql-reference/data-types) - -**示例** - -**用法示例** - -```sql title=Query -SELECT ifNull('a', 'b'), ifNull(NULL, 'b'); -``` - -```response title=Response -┌─ifNull('a', 'b')─┬─ifNull(NULL, 'b')─┐ -│ a │ b │ -└──────────────────┴───────────────────┘ -``` - - -## isNotNull - -自 v1.1 版本引入 - -检查参数是否为非 `NULL`。 - -另请参阅:运算符 [`IS NOT NULL`](/sql-reference/operators#is_not_null)。 - -**语法** - -```sql -isNotNull(x) -``` - -**参数** - -* `x` — 非复合数据类型的值。[`Any`](/sql-reference/data-types) - -**返回值** - -如果 `x` 不为 `NULL`,则返回 `1`,否则返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -CREATE TABLE t_null -( - x Int32, - y Nullable(Int32) -) -ENGINE = MergeTree -ORDER BY tuple(); - -INSERT INTO t_null VALUES (1, NULL), (2, 3); - -SELECT x FROM t_null WHERE isNotNull(y); -``` - -```response title=Response -┌─x─┐ -│ 2 │ -└───┘ -``` - - -## isNull - -自 v1.1 版本引入 - -检查参数是否为 `NULL`。 - -另请参阅:运算符 [`IS NULL`](/sql-reference/operators#is_null)。 - -**语法** - -```sql -isNull(x) -``` - -**参数** - -* `x` — 一个非复合类型的值。[`Any`](/sql-reference/data-types) - -**返回值** - -当 `x` 为 `NULL` 时返回 `1`,否则返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -CREATE TABLE t_null -( - x Int32, - y Nullable(Int32) -) -ENGINE = MergeTree -ORDER BY tuple(); - -INSERT INTO t_null VALUES (1, NULL), (2, 3); - -SELECT x FROM t_null WHERE isNull(y); -``` - -```response title=Response -┌─x─┐ -│ 1 │ -└───┘ -``` - - -## isNullable - -自 v22.7 起引入 - -检查参数的数据类型是否为 `Nullable`(即是否允许 `NULL` 值)。 - -**语法** - -```sql -isNullable(x) -``` - -**参数** - -* `x` — 任意数据类型的值。[`Any`](/sql-reference/data-types) - -**返回值** - -当 `x` 是 `Nullable` 数据类型时返回 `1`,否则返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -CREATE TABLE tab ( - ordinary_col UInt32, - nullable_col Nullable(UInt32) -) -ENGINE = MergeTree -ORDER BY tuple(); -INSERT INTO tab (ordinary_col, nullable_col) VALUES (1,1), (2, 2), (3,3); -SELECT isNullable(ordinary_col), isNullable(nullable_col) FROM tab; -``` - -```response title=Response -┌───isNullable(ordinary_col)──┬───isNullable(nullable_col)──┐ -│ 0 │ 1 │ -│ 0 │ 1 │ -│ 0 │ 1 │ -└─────────────────────────────┴─────────────────────────────┘ -``` - - -## isZeroOrNull - -自 v20.3 版本引入 - -检查参数是否为零(`0`)或 `NULL`。 - -**语法** - -```sql -isZeroOrNull(x) -``` - -**参数** - -* `x` — 数值。[`UInt`](/sql-reference/data-types/int-uint) - -**返回值** - -如果 `x` 为 `NULL` 或等于零,则返回 `1`,否则返回 `0`。[`UInt8/16/32/64`](/sql-reference/data-types/int-uint) 或 [`Float32/Float64`](/sql-reference/data-types/float) - -**示例** - -**用法示例** - -```sql title=Query -CREATE TABLE t_null -( - x Int32, - y Nullable(Int32) -) -ENGINE = MergeTree -ORDER BY tuple(); - -INSERT INTO t_null VALUES (1, NULL), (2, 0), (3, 3); - -SELECT x FROM t_null WHERE isZeroOrNull(y); -``` - -```response title=Response -┌─x─┐ -│ 1 │ -│ 2 │ -└───┘ -``` - - -## nullIf - -自 v1.1 版本引入 - -如果两个参数相等,则返回 `NULL`。 - -**语法** - -```sql -nullIf(x, y) -``` - -**参数** - -* `x` — 第一个值。[`Any`](/sql-reference/data-types) -* `y` — 第二个值。[`Any`](/sql-reference/data-types) - -**返回值** - -如果两个参数相等,则返回 `NULL`,否则返回第一个参数。[`NULL`](/sql-reference/syntax#null) 或 [`Nullable(x)`](/sql-reference/data-types/nullable) - -**示例** - -**使用示例** - -```sql title=Query -SELECT nullIf(1, 1), nullIf(1, 2); -``` - -```response title=Response -┌─nullIf(1, 1)─┬─nullIf(1, 2)─┐ -│ ᴺᵁᴸᴸ │ 1 │ -└──────────────┴──────────────┘ -``` - - -## toNullable - -自 v1.1 起引入 - -将传入参数的类型转换为 `Nullable` 类型。 - -**语法** - -```sql -toNullable(x) -``` - -**参数** - -* `x` — 任意非复合数据类型的值。[`Any`](/sql-reference/data-types) - -**返回值** - -返回与输入值相同的值,但其类型为 `Nullable`。[`Nullable(Any)`](/sql-reference/data-types/nullable) - -**示例** - -**使用示例** - -```sql title=Query -SELECT toTypeName(10), toTypeName(toNullable(10)); -``` - -```response title=Response -┌─toTypeName(10)─┬─toTypeName(toNullable(10))─┐ -│ UInt8 │ Nullable(UInt8) │ -└────────────────┴────────────────────────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/hash-functions.md b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/hash-functions.md index 8c045157ee5..5c8da1ed0e1 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/hash-functions.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/hash-functions.md @@ -6,18 +6,16 @@ title: '哈希函数' doc_type: 'reference' --- - - # 哈希函数 -哈希函数可用于以确定性的伪随机方式打乱元素顺序(洗牌)。 +哈希函数可用于对元素进行确定性的伪随机重排。 -Simhash 是一种哈希函数,对于相近(相似)的参数会返回相近的哈希值。 +Simhash 是一种哈希函数,对于接近(相似)的参数会返回接近的哈希值。 大多数哈希函数可以接受任意数量、任意类型的参数。 :::note -NULL 的哈希值为 NULL。要对 Nullable 列获取非 NULL 的哈希值,请将其包装在一个元组(tuple)中: +`NULL` 的哈希值是 `NULL`。要获取 Nullable 列的非 `NULL` 哈希值,请将其包裹在一个元组(tuple)中: ```sql SELECT cityHash64(tuple(NULL)) @@ -26,2637 +24,16 @@ SELECT cityHash64(tuple(NULL)) ::: :::note -要计算整张表全部内容的哈希,可以使用 `sum(cityHash64(tuple(*)))`(或其他哈希函数)。`tuple` 确保包含 NULL 值的行不会被忽略,`sum` 确保行的顺序不会影响结果。 +要计算整张表全部内容的哈希值,请使用 `sum(cityHash64(tuple(*)))`(或其他哈希函数)。`tuple` 确保包含 NULL 值的行不会被跳过,`sum` 确保行的顺序不会影响结果。 ::: {/* - 下面标签内的内容会在文档框架构建期间被替换为 - 从 system.functions 生成的文档。请不要修改或删除这些标签。 - 请参见: https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md + 下面标签内的内容会在文档框架构建时, + 被 system.functions 生成的文档替换。 + 请不要修改或删除这些标签。 + 参见:https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## BLAKE3 - -引入版本:v22.10 - -计算 BLAKE3 哈希值,并将得到的字节数组作为 FixedString 返回。 -该密码学哈希函数通过 BLAKE3 Rust 库集成到 ClickHouse 中。 -该函数速度相当快,与 SHA-2 相比性能大约快两倍,同时生成的哈希长度与 SHA-256 相同。 -它返回一个类型为 FixedString(32) 的字节数组形式的 BLAKE3 哈希值。 - -**语法** - -```sql -BLAKE3(message) -``` - -**参数** - -* `message` — 要进行哈希计算的输入字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回输入字符串的 32 字节长 BLAKE3 哈希值,类型为定长字符串。[`FixedString(32)`](/sql-reference/data-types/fixedstring) - -**示例** - -**hash** - -```sql title=Query -SELECT hex(BLAKE3('ABC')) -``` - -```response title=Response -┌─hex(BLAKE3('ABC'))───────────────────────────────────────────────┐ -│ D1717274597CF0289694F75D96D444B992A096F1AFD8E7BBFA6EBB1D360FEDFC │ -└──────────────────────────────────────────────────────────────────┘ -``` - - -## MD4 - -在 v21.11 中引入 - -计算给定字符串的 MD4 哈希值。 - -**语法** - -```sql -MD4(s) -``` - -**参数** - -* `s` — 要进行哈希计算的输入字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回给定输入字符串的 MD4 哈希值,结果为定长字符串。[`FixedString(16)`](/sql-reference/data-types/fixedstring) - -**示例** - -**使用示例** - -```sql title=Query -SELECT HEX(MD4('abc')); -``` - -```response title=Response -┌─hex(MD4('abc'))──────────────────┐ -│ A448017AAF21D8525FC10AE87AA6729D │ -└──────────────────────────────────┘ -``` - - -## MD5 - -自 v1.1 起提供 - -计算给定字符串的 MD5 哈希值。 - -**语法** - -```sql -MD5(s) -``` - -**参数** - -* `s` — 用于计算哈希的输入字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回给定输入字符串的 MD5 哈希值,作为定长字符串。[`FixedString(16)`](/sql-reference/data-types/fixedstring) - -**示例** - -**用法示例** - -```sql title=Query -SELECT HEX(MD5('abc')); -``` - -```response title=Response -┌─hex(MD5('abc'))──────────────────┐ -│ 900150983CD24FB0D6963F7D28E17F72 │ -└──────────────────────────────────┘ -``` - - -## RIPEMD160 - -自 v24.10 起引入 - -计算给定字符串的 RIPEMD-160 哈希值。 - -**语法** - -```sql -RIPEMD160(s) -``` - -**参数** - -* `s` — 要计算哈希值的输入字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回给定输入字符串的 RIPEMD160 哈希值,作为定长字符串。[`FixedString(20)`](/sql-reference/data-types/fixedstring) - -**示例** - -**用法示例** - -```sql title=Query -SELECT HEX(RIPEMD160('敏捷的棕色狐狸跳过了懒狗')); -``` - -```response title=Response -┌─HEX(RIPEMD160('The quick brown fox jumps over the lazy dog'))─┐ -│ 37F332F68DB77BD9D7EDD4969571AD671CF9DD3B │ -└───────────────────────────────────────────────────────────────┘ -``` - - -## SHA1 - -引入版本:v1.1 - -计算给定字符串的 SHA1 哈希值。 - -**语法** - -```sql -SHA1(s) -``` - -**参数** - -* `s` — 要进行哈希运算的输入字符串 [`String`](/sql-reference/data-types/string) - -**返回值** - -返回给定输入字符串的 SHA1 哈希值,类型为定长字符串。[`FixedString(20)`](/sql-reference/data-types/fixedstring) - -**示例** - -**用法示例** - -```sql title=Query -SELECT HEX(SHA1('abc')); -``` - -```response title=Response -┌─hex(SHA1('abc'))─────────────────────────┐ -│ A9993E364706816ABA3E25717850C26C9CD0D89D │ -└──────────────────────────────────────────┘ -``` - - -## SHA224 - -引入版本:v1.1 - -计算给定字符串的 SHA224 哈希值。 - -**语法** - -```sql -SHA224(串) -``` - -**参数** - -* `s` — 要计算哈希值的输入字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回给定输入字符串的 SHA224 哈希值,以定长字符串形式表示。[`FixedString(28)`](/sql-reference/data-types/fixedstring) - -**示例** - -**用法示例** - -```sql title=Query -SELECT HEX(SHA224('abc')); -``` - -```response title=Response -┌─hex(SHA224('abc'))───────────────────────────────────────┐ -│ 23097D223405D8228642A477BDA255B32AADBCE4BDA0B3F7E36C9DA7 │ -└──────────────────────────────────────────────────────────┘ -``` - - -## SHA256 - -自 v1.1 引入 - -计算给定字符串的 SHA256 哈希值。 - -**语法** - -```sql -SHA256(s) -``` - -**参数** - -* `s` — 要进行哈希计算的输入字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回给定输入字符串的 SHA-256 哈希值,作为定长字符串。[`FixedString(32)`](/sql-reference/data-types/fixedstring) - -**示例** - -**用法示例** - -```sql title=Query -SELECT HEX(SHA256('abc')); -``` - -```response title=Response -┌─hex(SHA256('abc'))───────────────────────────────────────────────┐ -│ BA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61F20015AD │ -└──────────────────────────────────────────────────────────────────┘ -``` - - -## SHA384 - -引入版本:v1.1 - -计算给定字符串的 SHA384 哈希值。 - -**语法** - -```sql -SHA384(字节) -``` - -**参数** - -* `s` — 要进行哈希的输入字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回给定输入字符串的 SHA384 哈希值,结果为定长字符串。[`FixedString(48)`](/sql-reference/data-types/fixedstring) - -**示例** - -**用法示例** - -```sql title=Query -SELECT HEX(SHA384('abc')); -``` - -```response title=Response -┌─hex(SHA384('abc'))───────────────────────────────────────────────────────────────────────────────┐ -│ CB00753F45A35E8BB5A03D699AC65007272C32AB0EDED1631A8B605A43FF5BED8086072BA1E7CC2358BAECA134C825A7 │ -└──────────────────────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## SHA512 - -自 v1.1 起引入 - -计算给定字符串的 SHA512 哈希值。 - -**语法** - -```sql -SHA512(s) -``` - -**参数** - -* `s` — 要进行哈希计算的输入字符串 [`String`](/sql-reference/data-types/string) - -**返回值** - -返回给定输入字符串的 SHA512 哈希,结果为定长字符串类型 [`FixedString(64)`](/sql-reference/data-types/fixedstring)。 - -**示例** - -**用法示例** - -```sql title=Query -SELECT HEX(SHA512('abc')); -``` - -```response title=Response -┌─hex(SHA512('abc'))───────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ -│ DDAF35A193617ABACC417349AE20413112E6FA4E89A97EA20A9EEEE64B55D39A2192992A274FC1A836BA3C23A3FEEBBD454D4423643CE80E2A9AC94FA54CA49F │ -└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## SHA512_256 - -在 v1.1 中引入 - -计算给定字符串的 SHA512_256 哈希值。 - -**语法** - -```sql -SHA512_256(s) -``` - -**参数** - -* `s` — 要进行哈希计算的输入字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回给定输入字符串的 SHA512_256 哈希值,作为固定长度字符串。[`FixedString(32)`](/sql-reference/data-types/fixedstring) - -**示例** - -**用法示例** - -```sql title=Query -SELECT HEX(SHA512_256('abc')); -``` - -```response title=Response -┌─hex(SHA512_256('abc'))───────────────────────────────────────────┐ -│ 53048E2681941EF99B2E29B76B4C7DABE4C2D0C634FC6D46E0E2F13107E7AF23 │ -└──────────────────────────────────────────────────────────────────┘ -``` - - -## URLHash - -引入于:v1.1 - -一种针对通过某种归一化方式从 URL 获取的字符串的快速、质量良好的非加密哈希函数。 - -此哈希函数有两种模式: - -| 模式 | 描述 | -| ----------------- | --------------------------------------------------------------------------------------------- | -| `URLHash(url)` | 从字符串计算哈希值,如果末尾存在 `/`、`?` 或 `#` 中的一个符号,则会先去掉该符号。 | -| `URLHash(url, N)` | 从字符串计算哈希值,计算到 URL 层级中的第 N 级为止;如果末尾存在 `/`、`?` 或 `#` 中的一个符号,则会先去掉该符号。层级的定义与 `URLHierarchy` 中相同。 | - -**语法** - -```sql -URLHash(url[, N]) -``` - -**参数** - -* `url` — 要进行哈希计算的 URL 字符串。[`String`](/sql-reference/data-types/string) -* `N` — 可选。URL 层级中的深度级别。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回对 `url` 计算得到的哈希值。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT URLHash('https://www.clickhouse.com') -``` - -```response title=Response -┌─URLHash('htt⋯house.com')─┐ -│ 13614512636072854701 │ -└──────────────────────────┘ -``` - -**按指定级别计算的 URL 哈希值** - -```sql title=Query -SELECT URLHash('https://www.clickhouse.com/docs', 0); -SELECT URLHash('https://www.clickhouse.com/docs', 1); -``` - -```response title=Response --- https://www.clickhouse.com 的哈希值 -┌─URLHash('htt⋯m/docs', 0)─┐ -│ 13614512636072854701 │ -└──────────────────────────┘ --- https://www.clickhouse.com/docs 的哈希值 -┌─URLHash('htt⋯m/docs', 1)─┐ -│ 13167253331440520598 │ -└──────────────────────────┘ -``` - - -## cityHash64 - -引入于:v1.1 - -生成 64 位的 [CityHash](https://github.com/google/cityhash) 哈希值。 - -这是一种快速的非加密哈希函数。 -它对字符串参数使用 CityHash 算法,对其他数据类型的参数使用依赖具体实现的快速非加密哈希函数。 -该函数使用 CityHash 组合函数来得到最终结果。 - -:::info -在 CityHash 被集成进 ClickHouse 之后,Google 更改了 CityHash 的算法。 -换句话说,ClickHouse 的 cityHash64 与 Google 上游的 CityHash 现在会产生不同的结果。 -ClickHouse 的 cityHash64 对应 CityHash v1.0.2。 -::: - -:::note -对于相同输入值但参数类型不同的情况,计算得到的哈希值可能相同。 -例如,这会影响不同大小的整数类型、具有相同数据的具名和未具名 `Tuple`,以及具有相同数据的 `Map` 和对应的 `Array(Tuple(key, value))` 类型。 -::: - -**语法** - -```sql -cityHash64(arg1[, arg2, ...]) -``` - -**参数** - -* `arg1[, arg2, ...]` — 用于计算哈希值的可变数量的输入参数。[`Any`](/sql-reference/data-types) - -**返回值** - -返回对输入参数计算得到的哈希值。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**调用示例** - -```sql title=Query -SELECT cityHash64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS CityHash, toTypeName(CityHash) AS type; -``` - -```response title=Response -┌─────────────CityHash─┬─type───┐ -│ 12072650598913549138 │ UInt64 │ -└──────────────────────┴────────┘ -``` - -**计算整张表的校验和(精确到行顺序)** - -```sql title=Query -CREATE TABLE users ( - id UInt32, - name String, - age UInt8, - city String -) -ENGINE = MergeTree -ORDER BY tuple(); - -INSERT INTO users VALUES -(1, 'Alice', 25, 'New York'), -(2, 'Bob', 30, 'London'), -(3, 'Charlie', 35, 'Tokyo'); - -SELECT groupBitXor(cityHash64(*)) FROM users; -``` - -```response title=Response -┌─groupBitXor(⋯age, city))─┐ -│ 11639977218258521182 │ -└──────────────────────────┘ -``` - - -## farmFingerprint64 - -引入版本:v20.12 - -使用 `Fingerprint64` 方法生成一个 64 位的 [FarmHash](https://github.com/google/farmhash) 值。 - -:::tip -与 [`farmHash64`](#farmHash64) 相比,`farmFingerprint64` 更适合用于生成稳定且可移植的值。 -::: - -:::note -对于不同参数类型但输入值相同的情况,计算得到的哈希值可能相同。 -例如,这会影响不同大小的整数类型、具有相同数据的具名和未具名 `Tuple`,以及具有相同数据的 `Map` 类型和对应的 `Array(Tuple(key, value))` 类型。 -::: - -**语法** - -```sql -farmFingerprint64(arg1[, arg2, ...]) -``` - -**参数** - -* `arg1[, arg2, ...]` — 数量可变的输入参数,用于计算其哈希值。[`Any`](/sql-reference/data-types) - -**返回值** - -返回对输入参数计算得到的哈希值。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT farmFingerprint64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS FarmFingerprint, toTypeName(FarmFingerprint) AS type; -``` - -```response title=Response -┌─────FarmFingerprint─┬─类型───┐ -│ 5752020380710916328 │ UInt64 │ -└─────────────────────┴────────┘ -``` - - -## farmHash64 - -引入版本:v1.1 - -使用 `Hash64` 方法生成 64 位的 [FarmHash](https://github.com/google/farmhash)。 - -:::tip -如需稳定且可移植的值,推荐使用 [`farmFingerprint64`](#farmFingerprint64)。 -::: - -:::note -对于不同参数类型但输入值相同的情况,计算得到的哈希值可能会相同。 -例如,不同大小的整数类型、具有相同数据的已命名和未命名 `Tuple`,以及具有相同数据的 `Map` 与对应的 `Array(Tuple(key, value))` 类型,都会受到影响。 -::: - -**语法** - -```sql -farmHash64(arg1[, arg2, ...]) -``` - -**参数** - -* `arg1[, arg2, ...]` — 需要计算哈希值的数量可变的输入参数。[`Any`](/sql-reference/data-types) - -**返回值** - -返回输入参数计算得到的哈希值。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT farmHash64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS FarmHash, toTypeName(FarmHash) AS type; -``` - -```response title=Response -┌─────────────FarmHash─┬─type───┐ -│ 18125596431186471178 │ UInt64 │ -└──────────────────────┴────────┘ -``` - - -## gccMurmurHash - -自 v20.1 引入 - -使用与 [GCC](https://github.com/gcc-mirror/gcc/blob/41d6b10e96a1de98e90a7c0378437c3255814b16/libstdc%2B%2B-v3/include/bits/functional_hash.h#L191) 相同的种子,计算输入值的 64 位 [MurmurHash2](https://github.com/aappleby/smhasher) 哈希值。 - -在使用 Clang 和 GCC 构建的程序之间具有可移植性。 - -**语法** - -```sql -gccMurmurHash(arg1[, arg2, ...]) -``` - -**参数** - -* `arg1[, arg2, ...]` — 数量可变的参数,用于计算哈希值。[`Any`](/sql-reference/data-types) - -**返回值** - -返回对输入参数计算所得的哈希值。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT - gccMurmurHash(1, 2, 3) AS res1, - gccMurmurHash(('a', [1, 2, 3], 4, (4, ['foo', 'bar'], 1, (1, 2)))) AS res2 -``` - -```response title=Response -┌─────────────────res1─┬────────────────res2─┐ -│ 12384823029245979431 │ 1188926775431157506 │ -└──────────────────────┴─────────────────────┘ -``` - - -## halfMD5 - -引入于:v1.1 - -将所有输入参数[重新解释](/sql-reference/functions/type-conversion-functions#reinterpretasstring)为字符串,并为每个参数计算 MD5 哈希值。然后将这些哈希值组合起来,对所得字符串计算哈希,取其前 8 个字节,并按大端字节序将其解释为 [UInt64](/sql-reference/data-types/int-uint)。该函数相对较慢(每个处理器核心每秒约 500 万个短字符串)。 - -建议改用 [`sipHash64`](#sipHash64) 函数。 - -该函数接收可变数量的输入参数。 -参数可以是任意受支持的数据类型。 -对于某些数据类型,即使参数类型不同(不同大小的整数、具有相同数据的具名和未具名 Tuple、以及具有相同数据的 Map 与对应的 Array(Tuple(key, value)) 类型),在相同取值时计算得到的哈希值也可能相同。 - -**语法** - -```sql -halfMD5(arg1[, arg2, ..., argN]) -``` - -**参数** - -* `arg1[, arg2, ..., argN]` — 要计算哈希值的可变数量的参数。[`Any`](/sql-reference/data-types) - -**返回值** - -返回对给定输入参数计算得到的半 MD5 哈希值,结果以大端字节序的 `UInt64` 类型返回。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT HEX(halfMD5('abc', 'cde', 'fgh')); -``` - -```response title=Response -┌─hex(halfMD5('abc', 'cde', 'fgh'))─┐ -│ 2C9506B7374CFAF4 │ -└───────────────────────────────────┘ -``` - - -## hiveHash - -引入于:v20.1 - -从字符串计算一个 “HiveHash” 值。 -它只是将符号位清零的 [`JavaHash`](#javaHash)。 -此函数用于 3.0 之前版本的 [Apache Hive](https://en.wikipedia.org/wiki/Apache_Hive)。 - -:::caution -此哈希函数性能较差。 -仅在其他系统已使用该算法且你需要计算相同结果时才使用它。 -::: - -**语法** - -```sql -hiveHash(arg) -``` - -**参数** - -* `arg` — 要进行哈希计算的输入字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回输入字符串计算得到的 “Hive 哈希值”。[`Int32`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT hiveHash('Hello, world!'); -``` - -```response title=Response -┌─hiveHash('Hello, world!')─┐ -│ 267439093 │ -└───────────────────────────┘ -``` - - -## icebergHash - -自 v25.5 版本引入 - -实现 iceberg [哈希变换](https://iceberg.apache.org/spec/#appendix-b-32-bit-hash-requirements) 的逻辑 - -**语法** - -```sql -icebergHash(值) -``` - -**参数** - -* `value` — 要计算哈希值的源值,类型可以是 [`Integer`](/sql-reference/data-types/int-uint)、[`Bool`](/sql-reference/data-types/boolean)、[`Decimal`](/sql-reference/data-types/decimal)、[`Float*`](/sql-reference/data-types/float)、[`String`](/sql-reference/data-types/string)、[`FixedString`](/sql-reference/data-types/fixedstring)、[`UUID`](/sql-reference/data-types/uuid)、[`Date`](/sql-reference/data-types/date)、[`Time`](/sql-reference/data-types/time) 或 [`DateTime`](/sql-reference/data-types/datetime) - -**返回值** - -返回一个 32 位的 Murmur3 哈希值,x86 变体,种子为 0,类型为 [`Int32`](/sql-reference/data-types/int-uint) - -**示例** - -**示例** - -```sql title=Query -SELECT icebergHash(1.0 :: Float32) -``` - -```response title=Response --142385009 -``` - - -## intHash32 - -在 v1.1 中引入 - -计算整数的 32 位哈希值。 - -该哈希函数速度较快,但并非密码学哈希函数。 - -**语法** - -```sql -intHash32(arg) -``` - -**参数** - -* `arg` — 要进行哈希的整数。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回输入整数计算得到的 32 位哈希码 [`UInt32`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT intHash32(42); -``` - -```response title=Response -┌─intHash32(42)─┐ -│ 1228623923 │ -└───────────────┘ -``` - - -## intHash64 - -自 v1.1 起引入。 - -计算整数的 64 位哈希值。 - -该哈希函数相对较快(甚至比 [`intHash32`](#intHash32) 还要快),但不是加密哈希函数。 - -**语法** - -```sql -intHash64(int) -``` - -**参数** - -* `int` — 用于哈希的整数。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -64 位哈希值。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT intHash64(42); -``` - -```response title=Response -┌────────intHash64(42)─┐ -│ 11490350930367293593 │ -└──────────────────────┘ -``` - - -## javaHash - -引入版本:v20.1 - -从以下类型计算 JavaHash 值: - -* [string](http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/478a4add975b/src/share/classes/java/lang/String.java#l1452), -* [Byte](https://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/478a4add975b/src/share/classes/java/lang/Byte.java#l405), -* [Short](https://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/478a4add975b/src/share/classes/java/lang/Short.java#l410), -* [Integer](https://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/478a4add975b/src/share/classes/java/lang/Integer.java#l959), -* [Long](https://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/478a4add975b/src/share/classes/java/lang/Long.java#l1060)。 - -:::caution -此哈希函数性能不佳。 -仅当该算法已在其他系统中使用且你需要计算相同结果时才使用它。 -::: - -:::note -Java 仅支持对有符号整数计算哈希, -因此如果你想对无符号整数计算哈希,必须先将它们转换为 ClickHouse 中对应的有符号类型。 -::: - -**语法** - -```sql -javaHash(arg) -``` - -**参数** - -* `arg` — 用于哈希计算的输入值。[`Any`](/sql-reference/data-types) - -**返回值** - -返回 `arg` 的哈希值。[`Int32`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例 1** - -```sql title=Query -SELECT javaHash(toInt32(123)); -``` - -```response title=Response -┌─javaHash(toInt32(123))─┐ -│ 123 │ -└────────────────────────┘ -``` - -**使用示例 2** - -```sql title=Query -SELECT javaHash('Hello, world!'); -``` - -```response title=Response -┌─javaHash('Hello, world!')─┐ -│ -1880044555 │ -└───────────────────────────┘ -``` - - -## javaHashUTF16LE - -引入于:v20.1 - -在假定字符串的字节表示为 UTF-16LE 编码的前提下,从字符串计算 [JavaHash](http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/478a4add975b/src/share/classes/java/lang/String.java#l1452)。 - -**语法** - -```sql -javaHashUTF16LE(arg) -``` - -**参数** - -* `arg` — 使用 UTF-16LE 编码的字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回对 UTF-16LE 编码字符串计算得到的哈希值。[`Int32`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT javaHashUTF16LE(convertCharset('test', 'utf-8', 'utf-16le')); -``` - -```response title=Response -┌─javaHashUTF16LE(convertCharset('test', 'utf-8', 'utf-16le'))─┐ -│ 3556498 │ -└──────────────────────────────────────────────────────────────┘ -``` - - -## jumpConsistentHash - -自 v1.1 版本引入 - -为一个整数计算其 [jump consistent hash](https://arxiv.org/pdf/1406.2294.pdf)。 - -**语法** - -```sql -jumpConsistentHash(键, 桶) -``` - -**参数** - -* `key` — 输入键值。[`UInt64`](/sql-reference/data-types/int-uint) -* `buckets` — 桶数。[`Int32`](/sql-reference/data-types/int-uint) - -**返回值** - -返回计算得到的哈希值。[`Int32`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT jumpConsistentHash(256, 4) -``` - -```response title=Response -┌─jumpConsistentHash(256, 4)─┐ -│ 3 │ -└────────────────────────────┘ -``` - - -## kafkaMurmurHash - -自 v23.4 起引入 - -使用与 [Kafka](https://github.com/apache/kafka/blob/461c5cfe056db0951d9b74f5adc45973670404d7/clients/src/main/java/org/apache/kafka/common/utils/Utils.java#L482) 相同的种子,对输入值计算 32 位 [MurmurHash2](https://github.com/aappleby/smhasher) 哈希值,并清除最高位,以便与 [Default Partitioner](https://github.com/apache/kafka/blob/139f7709bd3f5926901a21e55043388728ccca78/clients/src/main/java/org/apache/kafka/clients/producer/internals/BuiltInPartitioner.java#L328) 兼容。 - -**语法** - -```sql -kafkaMurmurHash(arg1[, arg2, ...]) -``` - -**参数** - -* `arg1[, arg2, ...]` — 需要计算哈希值的数量可变的参数。[`Any`](/sql-reference/data-types) - -**返回值** - -返回基于输入参数计算得到的哈希值。[`UInt32`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT - kafkaMurmurHash('foobar') AS res1, - kafkaMurmurHash(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS res2 -``` - -```response title=Response -┌───────res1─┬─────res2─┐ -│ 1357151166 │ 85479775 │ -└────────────┴──────────┘ -``` - - -## keccak256 - -引入版本:v25.4 - -计算给定字符串的 Keccak-256 密码学哈希值。 -此哈希函数广泛应用于区块链场景,尤其是以太坊(Ethereum)。 - -**语法** - -```sql -keccak256(message) -``` - -**参数** - -* `message` — 要进行哈希计算的输入字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回输入字符串的 32 字节 Keccak-256 哈希值,作为固定长度字符串。[`FixedString(32)`](/sql-reference/data-types/fixedstring) - -**示例** - -**用法示例** - -```sql title=Query -SELECT hex(keccak256('hello')) -``` - -```response title=Response -┌─hex(keccak256('hello'))──────────────────────────────────────────┐ -│ 1C8AFF950685C2ED4BC3174F3472287B56D9517B9C948127319A09A7A36DEAC8 │ -└──────────────────────────────────────────────────────────────────┘ -``` - - -## kostikConsistentHash - -引入版本:v22.6 - -由 Konstantin 'Kostik' Oblakov 设计的 O(1) 时间和空间复杂度的一致性哈希算法。 -仅在 `n <= 32768` 时效率较高。 - -**语法** - -```sql -kostikConsistentHash(input, n) -``` - -**别名**:`yandexConsistentHash` - -**参数** - -* `input` — 整数键。[`UInt64`](/sql-reference/data-types/int-uint) -* `n` — 桶的数量。[`UInt16`](/sql-reference/data-types/int-uint) - -**返回值** - -返回计算得到的哈希值。[`UInt16`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT kostikConsistentHash(16045690984833335023, 2); -``` - -```response title=Response -┌─kostikConsistentHash(16045690984833335023, 2)─┐ -│ 1 │ -└───────────────────────────────────────────────┘ -``` - - -## metroHash64 - -自 v1.1 引入 - -生成一个 64 位的 [MetroHash](http://www.jandrewrogers.com/2015/05/27/metrohash/) 哈希值。 - -:::note -对于不同参数类型但输入值相同的情况,计算得到的哈希值可能相同。 -例如,这会影响不同大小的整数类型、包含相同数据的具名和非具名 `Tuple`,以及具有相同数据的 `Map` 与其对应的 `Array(Tuple(key, value))` 类型。 -::: - -**语法** - -```sql -metroHash64(arg1[, arg2, ...]) -``` - -**参数** - -* `arg1[, arg2, ...]` — 数量可变的一组输入参数,用于计算哈希值。[`Any`](/sql-reference/data-types) - -**返回值** - -返回对输入参数计算得到的哈希值。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT metroHash64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS MetroHash, toTypeName(MetroHash) AS type; -``` - -```response title=Response -┌────────────MetroHash─┬─类型───┐ -│ 14235658766382344533 │ UInt64 │ -└──────────────────────┴────────┘ -``` - - -## murmurHash2_32 - -自 v18.5 版本引入 - -计算输入值的 [MurmurHash2](https://github.com/aappleby/smhasher) 哈希值。 - -:::note -对于不同参数类型但具有相同输入值的情况,计算得到的哈希值可能相同。 -例如,这会影响不同长度的整数类型、包含相同数据的具名和非具名 `Tuple`,以及包含相同数据的 `Map` 与其对应的 `Array(Tuple(key, value))` 类型。 -::: - -**语法** - -```sql -murmurHash2_32(arg1[, arg2, ...]) -``` - -**参数** - -* `arg1[, arg2, ...]` — 要计算哈希的数量可变的输入参数。[`Any`](/sql-reference/data-types) - -**返回值** - -返回对输入参数计算得到的哈希值。[`UInt32`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT murmurHash2_32(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS MurmurHash2, toTypeName(MurmurHash2) AS type; -``` - -```response title=Response -┌─MurmurHash2─┬─type───┐ -│ 3681770635 │ UInt32 │ -└─────────────┴────────┘ -``` - - -## murmurHash2_64 - -引入版本:v18.10 - -计算输入值的 [MurmurHash2](https://github.com/aappleby/smhasher) 散列值。 - -:::note -对于不同参数类型的相同输入值,计算得到的散列值可能会相同。 -例如,这会影响不同大小的整数类型、具有相同数据的具名和非具名 `Tuple`,以及具有相同数据的 `Map` 与对应的 `Array(Tuple(key, value))` 类型。 -::: - -**语法** - -```sql -murmurHash2_64(arg1[, arg2, ...]) -``` - -**参数** - -* `arg1[, arg2, ...]` — 需要计算哈希值的一组数量可变的输入参数。[`Any`](/sql-reference/data-types) - -**返回值** - -返回根据输入参数计算得到的哈希值。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT murmurHash2_64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS MurmurHash2, toTypeName(MurmurHash2) AS type; -``` - -```response title=Response -┌──────────MurmurHash2─┬─类型───┐ -│ 11832096901709403633 │ UInt64 │ -└──────────────────────┴────────┘ -``` - - -## murmurHash3_128 - -在 v18.10 中引入 - -计算输入值的 128 位 [MurmurHash3](https://github.com/aappleby/smhasher) 哈希值。 - -**语法** - -```sql -murmurHash3_128(arg1[, arg2, ...]) -``` - -**参数** - -* `arg1[, arg2, ...]` — 要计算哈希值的数量可变的输入参数。[`Any`](/sql-reference/data-types) - -**返回值** - -返回输入参数计算得到的 128 位 `MurmurHash3` 哈希值。[`FixedString(16)`](/sql-reference/data-types/fixedstring) - -**示例** - -**使用示例** - -```sql title=Query -SELECT hex(murmurHash3_128('foo', 'foo', 'foo')); -``` - -```response title=Response -┌─hex(murmurHash3_128('foo', 'foo', 'foo'))─┐ -│ F8F7AD9B6CD4CF117A71E277E2EC2931 │ -└───────────────────────────────────────────┘ -``` - - -## murmurHash3_32 - -自 v18.10 引入 - -生成一个 [MurmurHash3](https://github.com/aappleby/smhasher) 哈希值。 - -:::note -对于参数类型不同但输入值相同的情况,计算得到的哈希值可能会相同。 -例如,这会影响不同大小的整数类型、具有相同数据的命名和未命名 `Tuple`,以及具有相同数据的 `Map` 与对应的 `Array(Tuple(key, value))` 类型。 -::: - -**语法** - -```sql -murmurHash3_32(arg1[, arg2, ...]) -``` - -**参数** - -* `arg1[, arg2, ...]` — 用于计算哈希值的数量不定的输入参数。[`Any`](/sql-reference/data-types) - -**返回值** - -返回对输入参数计算得到的哈希值。[`UInt32`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT murmurHash3_32(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS MurmurHash3, toTypeName(MurmurHash3) AS type; -``` - -```response title=Response -┌─MurmurHash3─┬─type───┐ -│ 2152717 │ UInt32 │ -└─────────────┴────────┘ -``` - - -## murmurHash3_64 - -引入于:v18.10 - -计算输入值的 [MurmurHash3](https://github.com/aappleby/smhasher) 哈希值。 - -:::note -对于不同参数类型但输入值相同的情况,计算得到的哈希值可能会相同。 -例如,这会影响不同大小的整数类型、具有相同数据的具名和非具名 `Tuple`,以及具有相同数据的 `Map` 和对应的 `Array(Tuple(key, value))` 类型。 -::: - -**语法** - -```sql -murmurHash3_64(arg1[, arg2, ...]) -``` - -**参数** - -* `arg1[, arg2, ...]` — 需要计算哈希值的可变数量的输入参数。[`Any`](/sql-reference/data-types) - -**返回值** - -返回输入参数的计算哈希值。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT murmurHash3_64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS MurmurHash3, toTypeName(MurmurHash3) AS type; -``` - -```response title=Response -┌──────────MurmurHash3─┬─类型───┐ -│ 11832096901709403633 │ UInt64 │ -└──────────────────────┴────────┘ -``` - - -## ngramMinHash - -引入自:v21.1 - -将一个 ASCII 字符串按 `ngramsize` 个字符拆分为 n-gram,并为每个 n-gram 计算哈希值,返回包含这些哈希值的元组。 -使用 `hashnum` 个最小哈希值来计算最小哈希,使用 `hashnum` 个最大哈希值来计算最大哈希。 -区分大小写。 - -可与 [`tupleHammingDistance`](../functions/tuple-functions.md#tupleHammingDistance) 一起使用来检测近似重复字符串。 -对于两个字符串,如果返回的哈希值完全相同,则认为这两个字符串相同。 - -**语法** - -```sql -ngramMinHash(string[, ngramsize, hashnum]) -``` - -**参数** - -* `string` — 要计算哈希值的字符串。[`String`](/sql-reference/data-types/string) -* `ngramsize` — 可选。n-gram 的大小,取值范围为 `1` 到 `25`,默认值为 `3`。[`UInt8`](/sql-reference/data-types/int-uint) -* `hashnum` — 可选。用于计算结果的最小和最大哈希数量,取值范围为 `1` 到 `25`,默认值为 `6`。[`UInt8`](/sql-reference/data-types/int-uint) - -**返回值** - -返回一个包含两个哈希值(最小值和最大值)的元组。[`Tuple`](/sql-reference/data-types/tuple) - -**示例** - -**用法示例** - -```sql title=Query -SELECT ngramMinHash('ClickHouse') AS Tuple; -``` - -```response title=Response -┌─Tuple──────────────────────────────────────┐ -│ (18333312859352735453,9054248444481805918) │ -└────────────────────────────────────────────┘ -``` - - -## ngramMinHashArg - -引入于:v21.1 - -将 ASCII 字符串拆分成由 `ngramsize` 个符号组成的 n-gram,并返回哈希值最小和最大的 n-gram,这些哈希值由使用相同输入的 [`ngramMinHash`](#ngramMinHash) 函数计算得到。 -区分大小写。 - -**语法** - -```sql -ngramMinHashArg(string[, ngramsize, hashnum]) -``` - -**参数** - -* `string` — 需要计算哈希的字符串。[`String`](/sql-reference/data-types/string) -* `ngramsize` — 可选。n-gram 的大小,取值为 `1` 到 `25` 之间的任意整数,默认值为 `3`。[`UInt8`](/sql-reference/data-types/int-uint) -* `hashnum` — 可选。用于计算结果的最小和最大哈希值的数量,取值为 `1` 到 `25` 之间的任意整数,默认值为 `6`。[`UInt8`](/sql-reference/data-types/int-uint) - -**返回值** - -返回一个包含两个元组的元组,每个元组中包含 `hashnum` 个 n-gram。[`Tuple(String)`](/sql-reference/data-types/tuple) - -**示例** - -**使用示例** - -```sql title=Query -SELECT ngramMinHashArg('ClickHouse') AS 元组; -``` - -```response title=Response -┌─Tuple─────────────────────────────────────────────────────────────────────────┐ -│ (('ous','ick','lic','Hou','kHo','use'),('Hou','lic','ick','ous','ckH','Cli')) │ -└───────────────────────────────────────────────────────────────────────────────┘ -``` - - -## ngramMinHashArgCaseInsensitive - -引入版本:v21.1 - -将一个 ASCII 字符串拆分成由 `ngramsize` 个符号组成的 n-gram 片段,并返回哈希值最小和最大的 n-gram,这些哈希值由使用相同输入的 [`ngramMinHashCaseInsensitive`](#ngramMinHashCaseInsensitive) 函数计算得出。 -该函数对大小写不敏感。 - -**语法** - -```sql -ngramMinHashArgCaseInsensitive(string[, ngramsize, hashnum]) -``` - -**参数** - -* `string` — 需要计算哈希的字符串。[`String`](/sql-reference/data-types/string) -* `ngramsize` — 可选。n-gram 的长度,取值范围为 `1` 到 `25`。默认值为 `3`。[`UInt8`](/sql-reference/data-types/int-uint) -* `hashnum` — 可选。用于计算结果的最小和最大哈希数量,取值范围为 `1` 到 `25`。默认值为 `6`。[`UInt8`](/sql-reference/data-types/int-uint) - -**返回值** - -返回一个包含两个元组的元组,每个元组各包含 `hashnum` 个 n-gram。[`Tuple(Tuple(String))`](/sql-reference/data-types/tuple) - -**示例** - -**使用示例** - -```sql title=Query -SELECT ngramMinHashArgCaseInsensitive('ClickHouse') AS Tuple; -``` - -```response title=Response -┌─Tuple─────────────────────────────────────────────────────────────────────────┐ -│ (('ous','ick','lic','kHo','use','Cli'),('kHo','lic','ick','ous','ckH','Hou')) │ -└───────────────────────────────────────────────────────────────────────────────┘ -``` - - -## ngramMinHashArgCaseInsensitiveUTF8 - -引入版本:v21.1 - -将 UTF-8 字符串按 `ngramsize` 个符号划分为若干 n-gram,并返回哈希值最小和最大的 n-gram,这些哈希值由使用相同输入的 ngramMinHashCaseInsensitiveUTF8 函数计算得出。 -该函数不区分大小写。 - -**语法** - -```sql -ngramMinHashArgCaseInsensitiveUTF8(string[, ngramsize, hashnum]) -``` - -**参数** - -* `string` — 要计算哈希值的字符串。[`String`](/sql-reference/data-types/string) -* `ngramsize` — 可选。n-gram 的大小,取值为 `1` 到 `25` 之间的任意数值。默认值为 `3`。[`UInt8`](/sql-reference/data-types/int-uint) -* `hashnum` — 可选。用于计算结果的最小和最大哈希值的数量,取值为 `1` 到 `25` 之间的任意数值。默认值为 `6`。[`UInt8`](/sql-reference/data-types/int-uint) - -**返回值** - -返回一个元组,其中包含两个元组,每个元组中有 `hashnum` 个 n-gram。[`Tuple(Tuple(String))`](/sql-reference/data-types/tuple) - -**示例** - -**使用示例** - -```sql title=Query -SELECT ngramMinHashArgCaseInsensitiveUTF8('ClickHouse') AS Tuple; -``` - -```response title=Response -┌─Tuple─────────────────────────────────────────────────────────────────────────┐ -│ (('ckH','ous','ick','lic','kHo','use'),('kHo','lic','ick','ous','ckH','Hou')) │ -└───────────────────────────────────────────────────────────────────────────────┘ -``` - - -## ngramMinHashArgUTF8 - -引入版本:v21.1 - -将 UTF-8 字符串拆分为由 `ngramsize` 个符号组成的 n-gram,并返回哈希值最小和最大的 n-gram,这些哈希值由使用相同输入的 `ngramMinHashUTF8` 函数计算。 -区分大小写。 - -**语法** - -```sql -ngramMinHashArgUTF8(string[, ngramsize, hashnum]) -``` - -**参数** - -* `string` — 要计算哈希值的字符串。[`String`](/sql-reference/data-types/string) -* `ngramsize` — 可选。n-gram 的大小,取值为 `1` 到 `25` 之间的任意值。默认值为 `3`。[`UInt8`](/sql-reference/data-types/int-uint) -* `hashnum` — 可选。用于计算结果的最小哈希值和最大哈希值的数量,取值为 `1` 到 `25` 之间的任意值。默认值为 `6`。[`UInt8`](/sql-reference/data-types/int-uint) - -**返回值** - -返回一个元组,其中包含两个元组,每个元组包含 `hashnum` 个 n-gram。[`Tuple(Tuple(String))`](/sql-reference/data-types/tuple) - -**示例** - -**用法示例** - -```sql title=Query -SELECT ngramMinHashArgUTF8('ClickHouse') AS Tuple; -``` - -```response title=Response -┌─Tuple─────────────────────────────────────────────────────────────────────────┐ -│ (('ous','ick','lic','Hou','kHo','use'),('kHo','Hou','lic','ick','ous','ckH')) │ -└───────────────────────────────────────────────────────────────────────────────┘ -``` - - -## ngramMinHashCaseInsensitive - -引入于:v21.1 - -将一个 ASCII 字符串按长度为 `ngramsize` 的 n-gram 片段拆分,并计算每个 n-gram 的哈希值,返回包含这些哈希值的元组。 -使用 `hashnum` 个最小哈希值来计算最小哈希,并使用 `hashnum` 个最大哈希值来计算最大哈希。 -该函数不区分大小写。 - -可以配合 [`tupleHammingDistance`](../functions/tuple-functions.md#tupleHammingDistance) 用于检测近似重复的字符串。 -对于两个字符串,如果返回的哈希在两者之间完全相同,则这两个字符串相同。 - -**语法** - -```sql -ngramMinHashCaseInsensitive(字符串[, n-gram大小, 哈希数]) -``` - -**参数** - -* `string` — 字符串。[String](../data-types/string.md)。- `ngramsize` — n-gram 的大小。可选。可取值:从 `1` 到 `25` 的任意数。默认值:`3`。[UInt8](../data-types/int-uint.md)。- `hashnum` — 用于计算结果的最小和最大哈希值的数量。可选。可取值:从 `1` 到 `25` 的任意数。默认值:`6`。[UInt8](../data-types/int-uint.md)。 - -**返回值** - -包含两个哈希值(最小值和最大值)的 Tuple。[Tuple](../data-types/tuple.md)([UInt64](../data-types/int-uint.md), [UInt64](../data-types/int-uint.md)). [`Tuple`](/sql-reference/data-types/tuple) - -**示例** - -**使用示例** - -```sql title=Query -SELECT ngramMinHashCaseInsensitive('ClickHouse') AS Tuple; -``` - -```response title=Response -┌─元组──────────────────────────────────────┐ -│ (2106263556442004574,13203602793651726206) │ -└────────────────────────────────────────────┘ -``` - - -## ngramMinHashCaseInsensitiveUTF8 - -引入版本:v21.1 - -将 UTF-8 字符串按 `ngramsize` 个字符拆分为 n-gram,并为每个 n-gram 计算哈希值,返回一个包含这些哈希值的元组。 -使用 `hashnum` 个最小哈希值来计算最小哈希,并使用 `hashnum` 个最大哈希值来计算最大哈希。 -对大小写不敏感。 - -可以与 [`tupleHammingDistance`](../functions/tuple-functions.md#tupleHammingDistance) 结合使用以检测近似重复字符串。 -对于两个字符串,如果返回的哈希在两者中完全相同,则这两个字符串被视为相同。 - -**语法** - -```sql -ngramMinHashCaseInsensitiveUTF8(字符串 [, ngram大小, 哈希数]) -``` - -**参数** - -* `string` — 要计算哈希值的字符串。[`String`](/sql-reference/data-types/string) -* `ngramsize` — 可选。n-gram 的长度,取值为 `1` 到 `25` 之间的任意数。默认值为 `3`。[`UInt8`](/sql-reference/data-types/int-uint) -* `hashnum` — 可选。用于计算结果的最小和最大哈希值的个数,取值为 `1` 到 `25` 之间的任意数。默认值为 `6`。[`UInt8`](/sql-reference/data-types/int-uint) - -**返回值** - -返回一个包含两个哈希值(最小值和最大值)的元组。[`Tuple`](/sql-reference/data-types/tuple) - -**示例** - -**用法示例** - -```sql title=Query -SELECT ngramMinHashCaseInsensitiveUTF8('ClickHouse') AS Tuple; -``` - -```response title=Response -┌─元组───────────────────────────────────────┐ -│ (12493625717655877135,13203602793651726206) │ -└─────────────────────────────────────────────┘ -``` - - -## ngramMinHashUTF8 - -引入于:v21.1 - -将一个 UTF-8 字符串划分为由 `ngramsize` 个符号组成的 n-gram,并为每个 n-gram 计算哈希值,然后返回包含这些哈希值的元组。 -使用 `hashnum` 个最小哈希来计算最小哈希,并使用 `hashnum` 个最大哈希来计算最大哈希。 -区分大小写。 - -可与 [`tupleHammingDistance`](../functions/tuple-functions.md#tupleHammingDistance) 一起用于检测近似重复字符串。 -对于两个字符串,如果两者返回的哈希完全相同,则认为这两个字符串相同。 - -**语法** - -```sql -ngramMinHashUTF8(string[, ngramsize, hashnum]) -``` - -**参数** - -* `string` — 要计算哈希的字符串。[`String`](/sql-reference/data-types/string) -* `ngramsize` — 可选。n-gram 的大小,取值为 `1` 到 `25` 的任意数值。默认值为 `3`。[`UInt8`](/sql-reference/data-types/int-uint) -* `hashnum` — 可选。用于计算结果的最小和最大哈希数量,取值为 `1` 到 `25` 的任意数值。默认值为 `6`。[`UInt8`](/sql-reference/data-types/int-uint) - -**返回值** - -返回一个包含两个哈希值(最小值和最大值)的元组。[`Tuple`](/sql-reference/data-types/tuple) - -**示例** - -**用法示例** - -```sql title=Query -SELECT ngramMinHashUTF8('ClickHouse') AS Tuple; -``` - -```response title=Response -┌─元组──────────────────────────────────────┐ -│ (18333312859352735453,6742163577938632877) │ -└────────────────────────────────────────────┘ -``` - - -## ngramSimHash - -在 v21.1 中引入 - -将一个 ASCII 字符串拆分为由 `ngramsize` 个字符组成的 n-gram,并返回其 n-gram 的 `simhash` 值。 - -可与 [`bitHammingDistance`](../functions/bit-functions.md/#bitHammingDistance) 一起用于检测近似重复字符串。两个字符串计算得到的 `simhash` 之间的 [汉明距离](https://en.wikipedia.org/wiki/Hamming_distance) 越小,这两个字符串越有可能相同。 - -**语法** - -```sql -ngramSimHash(string[, ngramsize]) -``` - -**参数** - -* `string` — 要计算区分大小写 `simhash` 的字符串。[`String`](/sql-reference/data-types/string) -* `ngramsize` — 可选。n-gram 的长度,取值范围为 `1` 到 `25`,默认值为 `3`。[`UInt8`](/sql-reference/data-types/int-uint) - -**返回值** - -返回输入字符串的计算哈希值。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT ngramSimHash('ClickHouse') AS Hash; -``` - -```response title=Response -┌───────Hash─┐ -│ 1627567969 │ -└────────────┘ -``` - - -## ngramSimHashCaseInsensitive - -引入于:v21.1 - -将一个 ASCII 字符串按 `ngramsize` 个符号拆分为 n-gram,并返回这些 n-gram 的 `simhash`。 -不区分大小写。 - -可与 [`bitHammingDistance`](/sql-reference/functions/bit-functions#bitHammingDistance) 一起用于检测近似重复的字符串。 -两个字符串计算得到的 `simhash` 之间的 [汉明距离](https://en.wikipedia.org/wiki/Hamming_distance) 越小,这两个字符串相同的可能性就越大。 - -**语法** - -```sql -ngramSimHashCaseInsensitive(字符串[, n元大小]) -``` - -**参数** - -* `string` — 要计算不区分大小写的 `simhash` 的字符串。[`String`](/sql-reference/data-types/string) -* `ngramsize` — 可选。n-gram 的大小,取值范围为 `1` 到 `25`。默认值为 `3`。[`UInt8`](/sql-reference/data-types/int-uint) - -**返回值** - -哈希值。[UInt64](../data-types/int-uint.md)。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT ngramSimHashCaseInsensitive('ClickHouse') AS Hash; -``` - -```response title=Response -┌──────哈希─┐ -│ 562180645 │ -└───────────┘ -``` - - -## ngramSimHashCaseInsensitiveUTF8 - -引入于:v21.1 - -将一个 UTF-8 字符串拆分为由 `ngramsize` 个符号组成的 n-gram,并返回这些 n-gram 的 `simhash` 值。\ -此函数不区分大小写。 - -可与 [bitHammingDistance](../functions/bit-functions.md/#bitHammingDistance) 一起用于检测近似重复字符串。两个字符串计算得到的 `simhashes` 之间的 [Hamming Distance](https://en.wikipedia.org/wiki/Hamming_distance) 越小,这两个字符串相同的可能性就越大。 - -**语法** - -```sql -ngramSimHashCaseInsensitiveUTF8(字符串[, n元语法大小]) -``` - -**参数** - -* `string` — 要计算哈希值的字符串。[`String`](/sql-reference/data-types/string) -* `ngramsize` — 可选。n-gram 的大小,取值范围为 `1` 到 `25` 的任意数值。默认值为 `3`。[`UInt8`](/sql-reference/data-types/int-uint) - -**返回值** - -返回计算得到的哈希值。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT ngramSimHashCaseInsensitiveUTF8('ClickHouse') AS 哈希值; -``` - -```response title=Response -┌───────哈希─┐ -│ 1636742693 │ -└────────────┘ -``` - - -## ngramSimHashUTF8 - -引入于:v21.1 - -将一个 UTF-8 编码的字符串按 `ngramsize` 个字符拆分为 n-gram,并返回对应的 n-gram `simhash` 值。 -该函数区分大小写。 - -可与 [`bitHammingDistance`](../functions/bit-functions.md/#bitHammingDistance) 搭配使用,以检测近似重复的字符串。 -两个字符串计算得到的 `simhashes` 的[汉明距离](https://en.wikipedia.org/wiki/Hamming_distance)越小,这两个字符串相同的可能性就越大。 - -**语法** - -```sql -ngramSimHashUTF8(string[, ngramsize]) -``` - -**参数** - -* `string` — 要计算哈希值的字符串。[`String`](/sql-reference/data-types/string) -* `ngramsize` — 可选。n-gram 的大小,取值范围为 `1` 到 `25`。默认值为 `3`。[`UInt8`](/sql-reference/data-types/int-uint) - -**返回值** - -返回计算得到的哈希值。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT ngramSimHashUTF8('ClickHouse') AS Hash; -``` - -```response title=Response -┌───────Hash─┐ -│ 1628157797 │ -└────────────┘ -``` - - -## sipHash128 - -引入版本:v1.1 - -与 [`sipHash64`](#sipHash64) 类似,但会生成 128 位哈希值,即最终的异或折叠状态保留到 128 位。 - -:::tip 新项目请使用 sipHash128Reference -这个 128 位变体与参考实现不同,且更弱。 -之所以存在该版本,是因为在编写它时,SipHash 还没有官方的 128 位扩展。 -建议新项目使用 [`sipHash128Reference`](#sipHash128Reference)。 -::: - -**语法** - -```sql -sipHash128(arg1[, arg2, ...]) -``` - -**参数** - -* `arg1[, arg2, ...]` — 要计算哈希值的可变数量的输入参数。[`Any`](/sql-reference/data-types) - -**返回值** - -返回一个 128 位的 `SipHash` 哈希值。[`FixedString(16)`](/sql-reference/data-types/fixedstring) - -**示例** - -**用法示例** - -```sql title=Query -SELECT hex(sipHash128('foo', '\x01', 3)); -``` - -```response title=Response -┌─hex(sipHash128('foo', '', 3))────┐ -│ 9DE516A64A414D4B1B609415E4523F24 │ -└──────────────────────────────────┘ -``` - - -## sipHash128Keyed - -引入于:v23.2 - -与 [`sipHash128`](#sipHash128) 相同,但额外接受一个显式的密钥参数,而不是使用固定的密钥。 - -:::tip 新项目请使用 sipHash128ReferenceKeyed -这个 128 位变体与参考实现不同,安全性也更弱。 -该版本之所以存在,是因为在其编写时,SipHash 还没有官方的 128 位扩展。 -新项目应当优先使用 [`sipHash128ReferenceKeyed`](#sipHash128ReferenceKeyed)。 -::: - -**语法** - -```sql -sipHash128Keyed((k0, k1), [arg1, arg2, ...]) -``` - -**参数** - -* `(k0, k1)` — 表示键的两个 UInt64 值构成的元组。[`Tuple(UInt64, UInt64)`](/sql-reference/data-types/tuple) -* `arg1[, arg2, ...]` — 需要计算哈希的数量可变的输入参数。[`Any`](/sql-reference/data-types) - -**返回值** - -类型为 [FixedString(16)](../data-types/fixedstring.md) 的 128 位 `SipHash` 哈希值。[`FixedString(16)`](/sql-reference/data-types/fixedstring) - -**示例** - -**使用示例** - -```sql title=Query -SELECT hex(sipHash128Keyed((506097522914230528, 1084818905618843912),'foo', '\x01', 3)); -``` - -```response title=Response -┌─hex(sipHash128Keyed((506097522914230528, 1084818905618843912), 'foo', '', 3))─┐ -│ B8467F65C8B4CFD9A5F8BD733917D9BF │ -└───────────────────────────────────────────────────────────────────────────────┘ -``` - - -## sipHash128Reference - -在 v23.2 中引入 - -与 [`sipHash128`](/sql-reference/functions/hash-functions#sipHash128) 类似,但实现的是 SipHash 原作者提出的 128 位算法。 - -**语法** - -```sql -sipHash128Reference(arg1[, arg2, ...]) -``` - -**参数** - -* `arg1[, arg2, ...]` — 个数不定的输入参数,用于计算哈希值。[`Any`](/sql-reference/data-types) - -**返回值** - -返回对输入参数计算得到的 128 位 `SipHash` 哈希值。[`FixedString(16)`](/sql-reference/data-types/fixedstring) - -**示例** - -**用法示例** - -```sql title=Query -SELECT hex(sipHash128Reference('foo', '', 3)); -``` - -```response title=Response -┌─hex(sipHash128Reference('foo', '', 3))─┐ -│ 4D1BE1A22D7F5933C0873E1698426260 │ -└────────────────────────────────────────┘ -``` - - -## sipHash128ReferenceKeyed - -自 v23.2 引入 - -与 [`sipHash128Reference`](#sipHash128Reference) 相同,但多接受一个显式的密钥参数,而不是使用固定密钥。 - -**语法** - -```sql -sipHash128ReferenceKeyed((k0, k1), arg1[, arg2, ...]) -``` - -**参数** - -* `(k0, k1)` — 由两个值组成、表示键的元组 [`Tuple(UInt64, UInt64)`](/sql-reference/data-types/tuple) -* `arg1[, arg2, ...]` — 需要计算哈希的一组可变数量的输入参数。[`Any`](/sql-reference/data-types) - -**返回值** - -返回对输入参数计算得到的 128 位 `SipHash` 哈希值。[`FixedString(16)`](/sql-reference/data-types/fixedstring) - -**示例** - -**使用示例** - -```sql title=Query -SELECT hex(sipHash128Reference('foo', '', 3)); -``` - -```response title=Response -┌─hex(sipHash128Reference('foo', '', 3))─┐ -│ 4D1BE1A22D7F5933C0873E1698426260 │ -└────────────────────────────────────────┘ -``` - - -## sipHash64 - -引入版本:v1.1 - -生成一个 64 位的 [SipHash](https://en.wikipedia.org/wiki/SipHash) 哈希值。 - -这是一个密码学哈希函数。其运行速度至少是 [`MD5`](#MD5) 哈希函数的三倍。 - -该函数会将所有输入参数都[按字符串解释](/sql-reference/functions/type-conversion-functions#reinterpretasstring),并为每个参数计算哈希值。 -然后通过以下算法组合这些哈希值: - -1. 将第一个和第二个哈希值拼接成一个数组并对其进行哈希。 -2. 将前一步计算出的哈希值与第三个输入参数的哈希值以类似方式进行哈希。 -3. 对原始输入剩余的所有哈希值重复此计算。 - -:::note -对于参数类型不同但输入值相同的情况,计算得到的哈希值可能会相同。 -这会影响例如不同大小的整数类型、具有相同数据的已命名和未命名 `Tuple`、以及具有相同数据的 `Map` 与对应的 `Array(Tuple(key, value))` 类型。 -::: - -**语法** - -```sql -sipHash64(arg1[, arg2, ...]) -``` - -**参数** - -* `arg1[, arg2, ...]` — 不定数量的输入参数。[`Any`](/sql-reference/data-types) - -**返回值** - -返回根据输入参数计算得到的哈希值。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT sipHash64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS SipHash, toTypeName(SipHash) AS type; -``` - -```response title=Response -┌──────────────SipHash─┬─类型───┐ -│ 11400366955626497465 │ UInt64 │ -└──────────────────────┴────────┘ -``` - - -## sipHash64Keyed - -自 v23.2 起引入 - -与 [`sipHash64`](#sipHash64) 类似,但多了一个显式密钥参数,而不是使用固定密钥。 - -**语法** - -```sql -sipHash64Keyed((k0, k1), arg1[,arg2, ...]) -``` - -**参数** - -* `(k0, k1)` — 表示键的、由两个值组成的元组。[`Tuple(UInt64, UInt64)`](/sql-reference/data-types/tuple) -* `arg1[,arg2, ...]` — 可变数量的输入参数。[`Any`](/sql-reference/data-types) - -**返回值** - -返回对输入值计算得到的哈希值。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT sipHash64Keyed((506097522914230528, 1084818905618843912), array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS SipHash, toTypeName(SipHash) AS type; -``` - -```response title=Response -┌─────────────SipHash─┬─类型───┐ -│ 8017656310194184311 │ UInt64 │ -└─────────────────────┴────────┘ -``` - - -## wordShingleMinHash - -引入于:v21.1 - -将一个 ASCII 字符串按 `shinglesize` 个单词划分成若干片段(shingle),计算每个单词片段的哈希值,并返回包含这些哈希值的元组。 -使用 `hashnum` 个最小哈希来计算最小哈希值,使用 `hashnum` 个最大哈希来计算最大哈希值。 -该函数区分大小写。 - -可结合 [`tupleHammingDistance`](../functions/tuple-functions.md#tupleHammingDistance) 用于检测部分重复的字符串。 -对于两个字符串,如果返回的哈希值完全相同,则认为这两个字符串相同。 - -**语法** - -```sql -wordShingleMinHash(string[, shinglesize, hashnum]) -``` - -**参数** - -* `string` — 要计算哈希的字符串。[`String`](/sql-reference/data-types/string) -* `shinglesize` — 可选。词 shingle 的长度,取值范围为 `1` 到 `25` 的任意整数,默认值为 `3`。[`UInt8`](/sql-reference/data-types/int-uint) -* `hashnum` — 可选。用于计算结果的最小和最大哈希值数量,取值范围为 `1` 到 `25` 的任意整数,默认值为 `6`。[`UInt8`](/sql-reference/data-types/int-uint) - -**返回值** - -返回一个包含两个哈希值(最小值和最大值)的元组。[`Tuple(UInt64, UInt64)`](/sql-reference/data-types/tuple) - -**示例** - -**使用示例** - -```sql title=Query -SELECT wordShingleMinHash('ClickHouse® 是用于联机分析处理(OLAP)查询的列式数据库管理系统(DBMS)。') AS Tuple; -``` - -```response title=Response -┌─Tuple──────────────────────────────────────┐ -│ (16452112859864147620,5844417301642981317) │ -└────────────────────────────────────────────┘ -``` - - -## wordShingleMinHashArg - -引入版本:v1.1 - -将一个 ASCII 字符串按每 `shinglesize` 个单词拆分为若干部分(shingle),并返回其中单词哈希值最小和最大的这些 shingle,这些哈希值是通过在相同输入上调用 wordShingleMinHash 函数计算得到的。 -区分大小写。 - -**语法** - -```sql -wordShingleMinHashArg(string[, shinglesize, hashnum]) -``` - -**参数** - -* `string` — 要计算哈希值的字符串。[`String`](/sql-reference/data-types/string) -* `shinglesize` — 可选。单词 shingle 的大小,取值范围为 `1` 到 `25` 的任意数字,默认值为 `3`。[`UInt8`](/sql-reference/data-types/int-uint) -* `hashnum` — 可选。用于计算结果的最小和最大哈希值的数量,取值范围为 `1` 到 `25` 的任意数字,默认值为 `6`。[`UInt8`](/sql-reference/data-types/int-uint) - -**返回值** - -返回一个包含两个元组的元组,每个元组包含 `hashnum` 个单词 shingle。[`Tuple(Tuple(String))`](/sql-reference/data-types/tuple) - -**示例** - -**使用示例** - -```sql title=Query -SELECT wordShingleMinHashArg('ClickHouse® 是一款列式数据库管理系统 (DBMS),用于联机分析处理 (OLAP) 查询。', 1, 3) AS Tuple; -``` - -```response title=Response -┌─Tuple─────────────────────────────────────────────────────────────────┐ -│ (('OLAP','数据库','分析型'),('在线','面向','处理')) │ -└───────────────────────────────────────────────────────────────────────┘ -``` - - -## wordShingleMinHashArgCaseInsensitive - -引入版本:v21.1 - -将一个 ASCII 字符串按每 `shinglesize` 个单词拆分为若干部分(shingles),并返回其中单词哈希值最小和最大的 shingles,这些哈希值是通过使用相同输入的 [`wordShingleMinHashCaseInsensitive`](#wordShingleMinHashCaseInsensitive) 函数计算得到的。 -该函数不区分大小写。 - -**语法** - -```sql -wordShingleMinHashArgCaseInsensitive(string[, shinglesize, hashnum]) -``` - -**参数** - -* `string` — 要计算哈希的字符串。[`String`](/sql-reference/data-types/string) -* `shinglesize` — 可选。词 shingle 的长度,取值范围为 `1` 到 `25`。默认值为 `3`。[`UInt8`](/sql-reference/data-types/int-uint) -* `hashnum` — 可选。用于计算结果的最小和最大哈希的数量,取值范围为 `1` 到 `25`。默认值为 `6`。[`UInt8`](/sql-reference/data-types/int-uint) - -**返回值** - -返回一个包含两个元组的元组,每个元组中包含 `hashnum` 个词 shingle。[`Tuple(Tuple(String))`](/sql-reference/data-types/tuple) - -**示例** - -**用法示例** - -```sql title=Query -SELECT wordShingleMinHashArgCaseInsensitive('ClickHouse® 是一款列式数据库管理系统(DBMS),用于对查询进行联机分析处理(OLAP)。', 1, 3) AS Tuple; -``` - -```response title=Response -┌─Tuple──────────────────────────────────────────────────────────────────┐ -│ (('查询','数据库','分析型'),('面向','处理','数据库管理系统')) │ -└────────────────────────────────────────────────────────────────────────┘ -``` - - -## wordShingleMinHashArgCaseInsensitiveUTF8 - -引入版本:v21.1 - -将一个 UTF-8 字符串按每段包含 `shinglesize` 个单词拆分为多个部分(shingle),并返回按单词哈希值计算出的最小和最大的 shingle。这些哈希值由在相同输入下调用的 [`wordShingleMinHashCaseInsensitiveUTF8`](#wordShingleMinHashCaseInsensitiveUTF8) 函数计算。 -该函数对大小写不敏感。 - -**语法** - -```sql -wordShingleMinHashArgCaseInsensitiveUTF8(string[, shinglesize, hashnum]) -``` - -**参数** - -* `string` — 要计算哈希的字符串。[`String`](/sql-reference/data-types/string) -* `shinglesize` — 可选。词 shingle 的长度,取值范围为 `1` 到 `25`。默认值为 `3`。[`UInt8`](/sql-reference/data-types/int-uint) -* `hashnum` — 可选。用于计算结果的最小哈希和最小哈希数量,取值范围为 `1` 到 `25`。默认值为 `6`。[`UInt8`](/sql-reference/data-types/int-uint) - -**返回值** - -返回一个包含两个元组的元组,每个元组包含 `hashnum` 个词 shingle。[`Tuple(Tuple(String))`](/sql-reference/data-types/tuple) - -**示例** - -**使用示例** - -```sql title=Query -SELECT wordShingleMinHashArgCaseInsensitiveUTF8('ClickHouse® 是一款面向联机分析处理 (OLAP) 查询的列式数据库管理系统 (DBMS)。', 1, 3) AS Tuple; -``` - -```response title=Response -┌─Tuple──────────────────────────────────────────────────────────────────┐ -│ (('查询','数据库','分析型'),('面向','处理','数据库管理系统')) │ -└────────────────────────────────────────────────────────────────────────┘ -``` - - -## wordShingleMinHashArgUTF8 - -引入版本:v21.1 - -将一个 UTF-8 字符串按每 `shinglesize` 个单词拆分为若干部分(shingles),并返回其中具有最小和最大单词哈希值的 shingles,这些哈希值由使用相同输入的 [`wordShingleMinHashUTF8`](#wordShingleMinHashUTF8) 函数计算得到。 -区分大小写。 - -**语法** - -```sql -wordShingleMinHashArgUTF8(string[, shinglesize, hashnum]) -``` - -**参数** - -* `string` — 要计算哈希值的字符串。[`String`](/sql-reference/data-types/string) -* `shinglesize` — 可选。单词 shingle 的大小,取值为 `1` 到 `25` 之间的任意数值。默认值为 `3`。[`UInt8`](/sql-reference/data-types/int-uint) -* `hashnum` — 可选。用于计算结果的最小和最大哈希数量,取值为 `1` 到 `25` 之间的任意数值。默认值为 `6`。[`UInt8`](/sql-reference/data-types/int-uint) - -**返回值** - -返回一个包含两个元组的元组,每个元组中有 `hashnum` 个单词 shingle。[`Tuple(Tuple(String))`](/sql-reference/data-types/tuple) - -**示例** - -**使用示例** - -```sql title=Query -SELECT wordShingleMinHashArgUTF8('ClickHouse® 是一款用于联机分析处理 (OLAP) 查询的列式数据库管理系统 (DBMS)。', 1, 3) AS Tuple; -``` - -```response title=Response -┌─Tuple─────────────────────────────────────────────────────────────────┐ -│ (('OLAP','数据库','分析型'),('联机','面向','处理')) │ -└───────────────────────────────────────────────────────────────────────┘ -``` - - -## wordShingleMinHashCaseInsensitive - -引入于:v21.1 - -将一个 ASCII 字符串按 `shinglesize` 个单词切分成若干部分(shingle),为每个单词 shingle 计算哈希值,并返回包含这些哈希值的元组。 -使用 `hashnum` 个最小哈希来计算最小哈希,使用 `hashnum` 个最大哈希来计算最大哈希。 -该函数不区分大小写。 - -可与 [`tupleHammingDistance`](../functions/tuple-functions.md#tupleHammingDistance) 一起用于检测部分重复(近似重复)字符串。 -对于两个字符串,如果二者返回的哈希值完全相同,则这两个字符串相同。 - -**语法** - -```sql -wordShingleMinHashCaseInsensitive(字符串[, 片段大小, 哈希数量]) -``` - -**参数** - -* `string` — 要计算哈希值的字符串。[`String`](/sql-reference/data-types/string) -* `shinglesize` — 可选。单词 shingle 的大小,取值为 `1` 到 `25` 之间的任意整数。默认值为 `3`。[`UInt8`](/sql-reference/data-types/int-uint) -* `hashnum` — 可选。用于计算结果的最小和最大哈希值的数量,取值为 `1` 到 `25` 之间的任意整数。默认值为 `6`。[`UInt8`](/sql-reference/data-types/int-uint) - -**返回值** - -返回一个包含两个哈希值(最小值和最大值)的元组。[`Tuple(UInt64, UInt64)`](/sql-reference/data-types/tuple) - -**示例** - -**用法示例** - -```sql title=Query -SELECT wordShingleMinHashCaseInsensitive('ClickHouse® 是一款列式数据库管理系统 (DBMS),用于对查询执行联机分析处理 (OLAP)。') AS Tuple; -``` - -```response title=Response -┌─Tuple─────────────────────────────────────┐ -│ (3065874883688416519,1634050779997673240) │ -└───────────────────────────────────────────┘ -``` - - -## wordShingleMinHashCaseInsensitiveUTF8 - -引入版本:v21.1 - -将 UTF-8 字符串按 `shinglesize` 个单词拆分为若干单词片段(shingles),对每个单词 shingle 计算哈希值,并返回一个包含这些哈希值的元组。 -使用 `hashnum` 个最小哈希来计算最小哈希值,使用 `hashnum` 个最大哈希来计算最大哈希值。 -该函数大小写不敏感。 - -可与 [`tupleHammingDistance`](../functions/tuple-functions.md#tupleHammingDistance) 搭配使用,用于检测近似重复的字符串。 -对于两个字符串,如果它们返回的哈希完全一致,则认为这两个字符串相同。 - -**语法** - -```sql -wordShingleMinHashCaseInsensitiveUTF8(string[, shinglesize, hashnum]) -``` - -**参数** - -* `string` — 要计算哈希的字符串。[`String`](/sql-reference/data-types/string) -* `shinglesize` — 可选。词 shingle 的大小,取值范围为 `1` 到 `25`。默认值为 `3`。[`UInt8`](/sql-reference/data-types/int-uint) -* `hashnum` — 可选。用于计算结果的最小和最大哈希数量,取值范围为 `1` 到 `25`。默认值为 `6`。[`UInt8`](/sql-reference/data-types/int-uint) - -**返回值** - -返回一个包含两个哈希的元组——最小值和最大值。[`Tuple(UInt64, UInt64)`](/sql-reference/data-types/tuple) - -**示例** - -**用法示例** - -```sql title=Query -SELECT wordShingleMinHashCaseInsensitiveUTF8('ClickHouse® 是一款面向列的数据库管理系统(DBMS),用于执行查询的联机分析处理(OLAP)。') AS Tuple; -``` - -```response title=Response -┌─Tuple─────────────────────────────────────┐ -│ (3065874883688416519,1634050779997673240) │ -└───────────────────────────────────────────┘ -``` - - -## wordShingleMinHashUTF8 - -引入自:v21.1 - -将一个 UTF-8 字符串按 `shinglesize` 个单词拆分为若干片段(shingle),为每个单词 shingle 计算哈希值,并返回包含这些哈希值的元组。 -使用 `hashnum` 个最小哈希值来计算最小哈希,并使用 `hashnum` 个最大哈希值来计算最大哈希。 -区分大小写。 - -可与 [`tupleHammingDistance`](../functions/tuple-functions.md#tupleHammingDistance) 一起用于检测近似重复的字符串。 -对于两个字符串,如果二者返回的哈希值完全相同,则这两个字符串相同。 - -**语法** - -```sql -wordShingleMinHashUTF8(string[, shinglesize, hashnum]) -``` - -**参数** - -* `string` — 需要计算哈希值的字符串。[`String`](/sql-reference/data-types/string) -* `shinglesize` — 可选。词 shingle 的长度,取值范围为 `1` 到 `25`,默认值为 `3`。[`UInt8`](/sql-reference/data-types/int-uint) -* `hashnum` — 可选。用于计算结果的最小和最大哈希值的数量,取值范围为 `1` 到 `25`,默认值为 `6`。[`UInt8`](/sql-reference/data-types/int-uint) - -**返回值** - -返回一个包含两个哈希值(最小值和最大值)的元组。[`Tuple(UInt64, UInt64)`](/sql-reference/data-types/tuple) - -**示例** - -**使用示例** - -```sql title=Query -SELECT wordShingleMinHashUTF8('ClickHouse® 是一款面向联机分析处理 (OLAP) 查询的列式数据库管理系统 (DBMS)。') AS Tuple; -``` - -```response title=Response -┌─Tuple──────────────────────────────────────┐ -│ (16452112859864147620,5844417301642981317) │ -└────────────────────────────────────────────┘ -``` - - -## wordShingleSimHash - -自 v21.1 起引入 - -将 ASCII 字符串按每 `shinglesize` 个单词切分为若干片段(shingle),并返回这些单词 shingle 的 `simhash` 值。 -区分大小写。 - -可与 [`bitHammingDistance`](../functions/bit-functions.md/#bitHammingDistance) 一起用于检测近似重复字符串。 -两个字符串计算得到的 `simhash` 值之间的 [Hamming 距离](https://en.wikipedia.org/wiki/Hamming_distance) 越小,这两个字符串越有可能相同。 - -**语法** - -```sql -wordShingleSimHash(string[, shinglesize]) -``` - -**参数** - -* `string` — 要计算哈希值的字符串。[`String`](/sql-reference/data-types/string) -* `shinglesize` — 可选。单词 shingle 的大小,取值范围为 `1` 到 `25`。默认值为 `3`。[`UInt8`](/sql-reference/data-types/int-uint) - -**返回值** - -返回计算得到的哈希值。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT wordShingleSimHash('ClickHouse® 是一款列式数据库管理系统(DBMS),用于联机分析处理(OLAP)查询。') AS Hash; -``` - -```response title=Response -┌───────Hash─┐ -│ 2328277067 │ -└────────────┘ -``` - - -## wordShingleSimHashCaseInsensitive - -引入版本:v21.1 - -将一个 ASCII 字符串按 `shinglesize` 个单词拆分成若干部分(shingle),并返回这些单词 shingle 的 `simhash`。 -该函数不区分大小写。 - -可与 [`bitHammingDistance`](../functions/bit-functions.md/#bitHammingDistance) 一起用于检测近似重复字符串。 -两个字符串计算得到的 `simhashes` 之间的[汉明距离](https://en.wikipedia.org/wiki/Hamming_distance)越小,这两个字符串越有可能相同。 - -**语法** - -```sql -wordShingleSimHashCaseInsensitive(string[, shinglesize]) -``` - -**参数** - -* `string` — 要计算哈希的字符串。[`String`](/sql-reference/data-types/string) -* `shinglesize` — 可选。词组(shingle)的长度,取值范围为 `1` 到 `25`,默认值为 `3`。[`UInt8`](/sql-reference/data-types/int-uint) - -**返回值** - -返回计算得到的哈希值。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT wordShingleSimHashCaseInsensitive('ClickHouse® 是用于联机分析处理(OLAP)查询的列式数据库管理系统(DBMS)。') AS Hash; -``` - -```response title=Response -┌───────Hash─┐ -│ 2194812424 │ -└────────────┘ -``` - - -## wordShingleSimHashCaseInsensitiveUTF8 - -引入版本:v1.1 - -将 UTF-8 编码的字符串按 `shinglesize` 个单词拆分成多个部分(shingles),并返回这些单词 shingle 的 `simhash`。 -该函数不区分大小写。 - -可与 [`bitHammingDistance`](../functions/bit-functions.md/#bitHammingDistance) 一起用于检测部分重复的字符串。 -两个字符串计算得到的 `simhashes` 之间的[汉明距离](https://en.wikipedia.org/wiki/Hamming_distance)越小,这两个字符串越有可能相同。 - -**语法** - -```sql -wordShingleSimHashCaseInsensitiveUTF8(字符串[, shingle大小]) -``` - -**参数** - -* `string` — 要计算哈希值的字符串。[`String`](/sql-reference/data-types/string) -* `shinglesize` — 可选。词 shingle 的长度,取值范围为 `1` 到 `25` 的任意数值。默认值为 `3`。[`UInt8`](/sql-reference/data-types/int-uint) - -**返回值** - -返回计算得到的哈希值。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT wordShingleSimHashCaseInsensitiveUTF8('ClickHouse® 是一款列式数据库管理系统 (DBMS),用于联机分析处理 (OLAP) 查询。') AS Hash; -``` - -```response title=Response -┌───────Hash─┐ -│ 2194812424 │ -└────────────┘ -``` - - -## wordShingleSimHashUTF8 - -引入于:v21.1 - -将一个 UTF-8 字符串按 `shinglesize` 个单词划分为若干部分(shingle),并返回这些词片段的 `simhash`。 -区分大小写。 - -可与 [`bitHammingDistance`](../functions/bit-functions.md/#bitHammingDistance) 结合使用,用于检测近似重复字符串。 -两个字符串计算得到的 `simhash` 值之间的[汉明距离](https://en.wikipedia.org/wiki/Hamming_distance)越小,这两个字符串越有可能相同。 - -**语法** - -```sql -wordShingleSimHashUTF8(string[, shinglesize]) -``` - -**参数** - -* `string` — 需要计算哈希值的字符串。[`String`](/sql-reference/data-types/string) -* `shinglesize` — 可选参数。单词 shingle 的长度,取值范围为 `1` 到 `25`,默认值为 `3`。[`UInt8`](/sql-reference/data-types/int-uint) - -**返回值** - -返回计算得到的哈希值。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT wordShingleSimHashUTF8('ClickHouse® 是用于对查询进行联机分析处理 (OLAP) 的列式数据库管理系统 (DBMS)。') AS Hash; -``` - -```response title=Response -┌───────Hash─┐ -│ 2328277067 │ -└────────────┘ -``` - - -## wyHash64 - -自 v22.7 引入 - -计算 64 位 [wyHash64](https://github.com/wangyi-fudan/wyhash) 哈希值。 - -**语法** - -```sql -wyHash64(arg) -``` - -**参数** - -* `arg` — 要计算哈希值的字符串参数。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回计算得到的 64 位哈希值 [`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT wyHash64('ClickHouse') AS 哈希; -``` - -```response title=Response -12336419557878201794 -``` - - -## xxHash32 - -引入版本:v20.1 - -计算字符串的 [xxHash](http://cyan4973.github.io/xxHash/) 哈希值。 - -64 位版本请参见 [`xxHash64`](#xxHash64) - -**语法** - -```sql -xxHash32(arg) -``` - -**参数** - -* `arg` — 用于计算哈希值的输入字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回输入字符串计算得到的 32 位哈希值。[`UInt32`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT xxHash32('Hello, world!'); -``` - -```response title=Response -┌─xxHash32('Hello, world!')─┐ -│ 834093149 │ -└───────────────────────────┘ -``` - - -## xxHash64 - -自 v20.1 起提供 - -根据字符串计算一个 [xxHash](http://cyan4973.github.io/xxHash/)。 - -32 位版本请参阅 [`xxHash32`](#xxHash32) - -**语法** - -```sql -xxHash64(arg) -``` - -**参数** - -* `arg` — 要进行哈希计算的输入字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回对输入字符串计算得到的 64 位哈希值。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT xxHash64('Hello, world!'); -``` - -```response title=Response -┌─xxHash64('Hello, world!')─┐ -│ 17691043854468224118 │ -└───────────────────────────┘ -``` - - -## xxh3 - -自 v22.12 引入 - -计算一个 [XXH3](https://github.com/Cyan4973/xxHash) 64 位哈希值。 - -**语法** - -```sql -xxh3(expr) -``` - -**参数** - -* `expr` — 任意数据类型的表达式列表。[`Any`](/sql-reference/data-types) - -**返回值** - -返回计算得到的 64 位 `xxh3` 哈希值 [`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT xxh3('ClickHouse') -``` - -```response title=Response -18009318874338624809 -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/introspection.md b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/introspection.md index 70ac85ae626..3aacf15096e 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/introspection.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/introspection.md @@ -1,19 +1,17 @@ --- -description: '自省函数参考文档' -sidebar_label: '自省' +description: '内省函数参考文档' +sidebar_label: '内省' slug: /sql-reference/functions/introspection -title: '自省函数' +title: '内省函数' doc_type: 'reference' --- - - # 自省函数 -您可以使用本章介绍的函数对 [ELF](https://en.wikipedia.org/wiki/Executable_and_Linkable_Format) 和 [DWARF](https://en.wikipedia.org/wiki/DWARF) 进行自省,用于查询分析。 +可以使用本章中描述的函数,对 [ELF](https://en.wikipedia.org/wiki/Executable_and_Linkable_Format) 和 [DWARF](https://en.wikipedia.org/wiki/DWARF) 进行自省,用于查询剖析(profiling)。 :::note -这些函数较慢,并且可能带来安全风险。 +这些函数较慢,并且可能带来安全方面的风险。 ::: 要使自省函数正常工作: @@ -24,253 +22,14 @@ doc_type: 'reference' 出于安全原因,自省函数默认是禁用的。 -ClickHouse 会将分析器生成的报告保存到 [trace_log](/operations/system-tables/trace_log) 系统表中。请确保该表和分析器已正确配置。 +ClickHouse 将分析器报告保存到 [trace_log](/operations/system-tables/trace_log) 系统表中。请确保该表和分析器已正确配置。 {/* - 下面标签内的内容会在文档框架构建期间 - 被基于 system.functions 自动生成的文档替换。请不要修改或删除这些标签。 + 下面标签内的内容会在文档框架构建期间, + 被 system.functions 生成的文档替换。请不要修改或删除这些标签。 参见:https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## demangle - -自 v20.1 引入 - -将符号解码为 C++ 函数名。 -该符号通常由 `addressToSymbol` 函数返回。 - -**语法** - -```sql -demangle(符号) -``` - -**参数** - -* `symbol` — 来自目标文件的符号。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回 C++ 函数的名称,如果符号无效则返回空字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**从 `trace_log` 系统表中选取第一条字符串** - -```sql title=Query -SELECT * FROM system.trace_log LIMIT 1 \G; -``` - -```response title=Response --- `trace` 字段包含采样时刻的堆栈跟踪信息。 -第 1 行: -────── -event_date: 2019-11-20 -event_time: 2019-11-20 16:57:59 -revision: 54429 -timer_type: Real -thread_number: 48 -query_id: 724028bf-f550-45aa-910d-2af6212b94ac -trace: [94138803686098,94138815010911,94138815096522,94138815101224,94138815102091,94138814222988,94138806823642,94138814457211,94138806823642,94138814457211,94138806823642,94138806795179,94138806796144,94138753770094,94138753771646,94138753760572,94138852407232,140399185266395,140399178045583] -``` - -**获取单个地址对应的函数名** - -```sql title=Query -SET allow_introspection_functions=1; -SELECT demangle(addressToSymbol(94138803686098)) \G; -``` - -```response title=Response -第 1 行: -────── -demangle(addressToSymbol(94138803686098)): DB::IAggregateFunctionHelper > >::addBatchSinglePlace(unsigned long, char*, DB::IColumn const**, DB::Arena*) const -``` - -**将函数应用于整个调用栈** - -```sql title=Query -SET allow_introspection_functions=1; - --- arrayMap 函数允许使用 demangle 函数处理 trace 数组中的每个元素。 --- 处理结果将显示在输出的 trace_functions 列中。 - -SELECT - arrayStringConcat(arrayMap(x -> demangle(addressToSymbol(x)), trace), '\n') AS trace_functions -FROM system.trace_log -LIMIT 1 -\G -``` - - -```response title=Response -第 1 行: -────── -trace_functions: DB::IAggregateFunctionHelper > >::addBatchSinglePlace(unsigned long, char*, DB::IColumn const**, DB::Arena*) const -DB::Aggregator::executeWithoutKeyImpl(char*&, unsigned long, DB::Aggregator::AggregateFunctionInstruction*, DB::Arena*) const -DB::Aggregator::executeOnBlock(std::vector::immutable_ptr, std::allocator::immutable_ptr > >, unsigned long, DB::AggregatedDataVariants&, std::vector >&, std::vector >, std::allocator > > >&, bool&) -DB::Aggregator::executeOnBlock(DB::Block const&, DB::AggregatedDataVariants&, std::vector >&, std::vector >, std::allocator > > >&, bool&) -DB::Aggregator::execute(std::shared_ptr const&, DB::AggregatedDataVariants&) -DB::AggregatingBlockInputStream::readImpl() -DB::IBlockInputStream::read() -DB::ExpressionBlockInputStream::readImpl() -DB::IBlockInputStream::read() -DB::ExpressionBlockInputStream::readImpl() -DB::IBlockInputStream::read() -DB::AsynchronousBlockInputStream::calculate() -std::_Function_handler::_M_invoke(std::_Any_data const&) -ThreadPoolImpl::worker(std::_List_iterator) -ThreadFromGlobalPool::ThreadFromGlobalPool::scheduleImpl(std::function, int, std::optional)::{lambda()#3}>(ThreadPoolImpl::scheduleImpl(std::function, int, std::optional)::{lambda()#3}&&)::{lambda()#1}::operator()() const -ThreadPoolImpl::worker(std::_List_iterator) -execute_native_thread_routine -start_thread -clone -``` - - -## isMergeTreePartCoveredBy - -引入版本:v25.6 - -用于检查第一个参数中的数据部分是否被第二个参数中的数据部分所覆盖的函数。 - -**语法** - -```sql -isMergeTreePartCoveredBy(nested_part, covering_part) -``` - -**参数** - -* `nested_part` — 预期嵌套部分的名称。[`String`](/sql-reference/data-types/string) -* `covering_part` — 预期覆盖部分的名称。[`String`](/sql-reference/data-types/string) - -**返回值** - -如果满足覆盖关系则返回 `1`,否则返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**基本示例** - -```sql title=Query -WITH 'all_12_25_7_4' AS lhs, 'all_7_100_10_20' AS rhs -SELECT isMergeTreePartCoveredBy(rhs, lhs), isMergeTreePartCoveredBy(lhs, rhs); -``` - -```response title=Response -┌─isMergeTreePartCoveredBy(rhs, lhs)─┬─isMergeTreePartCoveredBy(lhs, rhs)─┐ -│ 0 │ 1 │ -└────────────────────────────────────┴────────────────────────────────────┘ -``` - - -## logTrace - -自 v20.12 起引入 - -为每个 [Block](/development/architecture/#block) 向服务器日志输出一条跟踪日志消息。 - -**语法** - -```sql -logTrace(message) -``` - -**参数** - -* `message` — 写入服务器日志的消息。[`const String`](/sql-reference/data-types/string) - -**返回值** - -始终返回值为 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**基本示例** - -```sql title=Query -SELECT logTrace('logTrace 消息'); -``` - -```response title=Response -┌─logTrace('logTrace message')─┐ -│ 0 │ -└──────────────────────────────┘ -``` - - -## mergeTreePartInfo - -引入版本:v25.6 - -用于从 `MergeTree` 分片名称中提取有用值的函数。 - -**语法** - -```sql -mergeTreePartInfo(part_name) -``` - -**参数** - -* `part_name` — 要解包的 part 的名称。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回一个包含以下子列的 Tuple:`partition_id`、`min_block`、`max_block`、`level`、`mutation`。[`Tuple`](/sql-reference/data-types/tuple) - -**示例** - -**基本示例** - -```sql title=Query -WITH mergeTreePartInfo('all_12_25_7_4') AS info -SELECT info.partition_id, info.min_block, info.max_block, info.level, info.mutation; -``` - -```response title=Response -┌─info.partition_id─┬─info.min_block─┬─info.max_block─┬─info.level─┬─info.mutation─┐ -│ all │ 12 │ 25 │ 7 │ 4 │ -└───────────────────┴────────────────┴────────────────┴────────────┴───────────────┘ -``` - - -## tid - -引入自:v20.12 - -返回正在处理当前 [Block](/development/architecture/#block) 的线程 ID。 - -**语法** - -```sql -tid() -``` - -**参数** - -* 无。 - -**返回值** - -返回当前线程 ID。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT tid(); -``` - -```response title=Response -┌─tid()─┐ -│ 3878 │ -└───────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/ip-address-functions.md b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/ip-address-functions.md index 5c85376163d..f6a442c81e1 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/ip-address-functions.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/ip-address-functions.md @@ -1,1131 +1,19 @@ --- -description: '关于用于处理 IPv4 和 IPv6 地址的函数的文档。' +description: '用于处理 IPv4 和 IPv6 地址的函数参考文档。' sidebar_label: 'IP 地址' slug: /sql-reference/functions/ip-address-functions -title: '用于处理 IPv4 和 IPv6 地址的函数' +title: '处理 IPv4 和 IPv6 地址的函数' doc_type: 'reference' --- - - -# 处理 IPv4 和 IPv6 地址的函数 +# IPv4 和 IPv6 地址处理函数 {/* - 下面这些标签的内部内容会在文档框架构建时 - 被从 system.functions 自动生成的文档替换。请勿修改或删除这些标签。 + 下面标签的内部内容会在文档框架构建时被替换为 + 由 system.functions 生成的文档。请不要修改或删除这些标签。 参见:https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## IPv4CIDRToRange - -引入版本:v20.1 - -接收一个带有无类别域间路由(Classless Inter-Domain Routing,CIDR)前缀长度的 IPv4 地址,并返回该子网的地址范围,形式为一个包含两个 IPv4 值的元组:该子网中的第一个地址和最后一个地址。 -IPv6 版本请参见 [`IPv6CIDRToRange`](#IPv4CIDRToRange)。 - -**语法** - -```sql -IPv4CIDRToRange(ipv4, cidr) -``` - -**参数** - -* `ipv4` — IPv4 地址。[`IPv4`](/sql-reference/data-types/ipv4) 或 [`String`](/sql-reference/data-types/string) -* `cidr` — CIDR 值。[`UInt8`](/sql-reference/data-types/int-uint) - -**返回值** - -返回一个包含两个 IPv4 地址的元组,用于表示子网范围。[`Tuple(IPv4, IPv4)`](/sql-reference/data-types/tuple) - -**示例** - -**使用示例** - -```sql title=Query -SELECT IPv4CIDRToRange(toIPv4('192.168.5.2'), 16); -``` - -```response title=Response -┌─IPv4CIDRToRange(toIPv4('192.168.5.2'), 16)─┐ -│ ('192.168.0.0','192.168.255.255') │ -└────────────────────────────────────────────┘ -``` - - -## IPv4NumToString - -自 v1.1 版本引入 - -将一个 32 位整数转换为其点分十进制表示形式的 IPv4 地址字符串(A.B.C.D 格式)。 -采用大端字节序来解析输入值。 - -**语法** - -```sql -IPv4NumToString(num) -``` - -**别名**:`INET_NTOA` - -**参数** - -* `num` — 以 UInt32 数字表示的 IPv4 地址。[`UInt32`](/sql-reference/data-types/int-uint) - -**返回值** - -返回一个表示 IPv4 地址的字符串;如果格式无效则返回 `0`。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -IPv4NumToString(3232235521) -``` - -```response title=Response -192.168.0.1 -``` - - -## IPv4NumToStringClassC - -自 v1.1 起提供 - -将一个 32 位整数转换为以点分十进制表示法(A.B.C.D 格式)的 IPv4 地址字符串, -类似于 [`IPv4NumToString`](#IPv4NumToString),但使用 `xxx` 替代最后一个八位组。 - -**语法** - -```sql -IPv4NumToStringClassC(num) -``` - -**参数** - -* `num` — 以 UInt32 无符号整数表示的 IPv4 地址。[`UInt32`](/sql-reference/data-types/int-uint) - -**返回值** - -返回将最后一个八位组替换为 `xxx` 的 IPv4 地址字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**包含聚合的基本示例** - -```sql title=Query -SELECT - IPv4NumToStringClassC(ClientIP) AS k, - count() AS c -FROM test.hits -GROUP BY k -ORDER BY c DESC -LIMIT 10 -``` - -```response title=Response -┌─k──────────────┬─────c─┐ -│ 83.149.9.xxx │ 26238 │ -│ 217.118.81.xxx │ 26074 │ -│ 213.87.129.xxx │ 25481 │ -│ 83.149.8.xxx │ 24984 │ -│ 217.118.83.xxx │ 22797 │ -│ 78.25.120.xxx │ 22354 │ -│ 213.87.131.xxx │ 21285 │ -│ 78.25.121.xxx │ 20887 │ -│ 188.162.65.xxx │ 19694 │ -│ 83.149.48.xxx │ 17406 │ -└────────────────┴───────┘ -``` - - -## IPv4StringToNum - -引入于:v1.1 - -将点分十进制表示(A.B.C.D 格式)的 IPv4 地址字符串转换为对应的 32 位整数表示。(是 [`IPv4NumToString`](#IPv4NumToString) 的逆操作)。 -如果 IPv4 地址格式无效,将抛出异常。 - -**语法** - -```sql -IPv4StringToNum(string) -``` - -**别名**:`INET_ATON` - -**参数** - -* `string` — IPv4 地址字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回 IPv4 地址的数值表示。[`UInt32`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -IPv4StringToNum('192.168.0.1') -``` - -```response title=Response -3232235521 -``` - - -## IPv4StringToNumOrDefault - -引入于:v22.3 - -将点分十进制表示法(A.B.C.D 格式)的 IPv4 地址字符串转换为对应的 32 位整数表示形式。如果 IPv4 地址格式无效,则返回 `0`。 - -**语法** - -```sql -IPv4StringToNumOrDefault(string) -``` - -**参数** - -* `string` — IPv4 地址的字符串形式。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回 IPv4 地址,如果无效则返回 `0`。[`UInt32`](/sql-reference/data-types/int-uint) - -**示例** - -**无效地址示例** - -```sql title=Query -SELECT - IPv4StringToNumOrDefault('127.0.0.1') AS valid, - IPv4StringToNumOrDefault('invalid') AS invalid; -``` - -```response title=Response -┌──────valid─┬─invalid─┐ -│ 2130706433 │ 0 │ -└────────────┴─────────┘ -``` - - -## IPv4StringToNumOrNull - -引入于:v22.3 - -将 32 位整数转换为其 IPv4 地址的点分十进制字符串表示(A.B.C.D 格式),但如果 IPv4 地址格式无效,则返回 `NULL`。 - -**语法** - -```sql -IPv4StringToNumOrNull(string) -``` - -**参数** - -* `string` — IPv4 地址字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回 IPv4 地址,如果无效则返回 `NULL`。[`Nullable(UInt32)`](/sql-reference/data-types/nullable) - -**示例** - -**无效地址示例** - -```sql title=Query -SELECT -IPv4StringToNumOrNull('127.0.0.1') AS valid, -IPv4StringToNumOrNull('invalid') AS invalid; -``` - -```response title=Response -┌──────有效─┬─无效────┐ -│ 2130706433 │ ᴺᵁᴸᴸ │ -└────────────┴─────────┘ -``` - - -## IPv4ToIPv6 - -自 v1.1 引入 - -将(大端序)32 位整数解释为 IPv4 地址,然后再将其转换为对应的 IPv6 地址,并以 `FixedString(16)` 格式表示。 - -**语法** - -```sql -IPv4 转 IPv6(x) -``` - -**参数** - -* `x` — IPv4 地址。[`UInt32`](/sql-reference/data-types/int-uint) - -**返回值** - -以二进制格式返回 IPv6 地址。[`FixedString(16)`](/sql-reference/data-types/fixedstring) - -**示例** - -**使用示例** - -```sql title=Query -SELECT IPv6NumToString(IPv4ToIPv6(IPv4StringToNum('192.168.0.1'))) AS addr; -``` - -```response title=Response -┌─addr───────────────┐ -│ ::ffff:192.168.0.1 │ -└────────────────────┘ -``` - - -## IPv6CIDRToRange - -自 v20.1 版本引入。 - -接受一个 IPv6 地址及其无类别域间路由(Classless Inter-Domain Routing,CIDR)前缀长度,并返回该子网的地址范围,形式为包含两个 IPv6 值的元组:该子网中的最小地址和最大地址。 -有关 IPv4 版本,请参见 [`IPv4CIDRToRange`](#IPv4CIDRToRange)。 - -**语法** - -```sql -IPv6CIDRToRange(ipv6, cidr) -``` - -**参数** - -* `ipv6` — IPv6 地址。[`IPv6`](/sql-reference/data-types/ipv6) 或 [`String`](/sql-reference/data-types/string) -* `cidr` — CIDR 值。[`UInt8`](/sql-reference/data-types/int-uint) - -**返回值** - -返回一个由两个 IPv6 地址组成的元组,表示子网的地址范围。[`Tuple(IPv6, IPv6)`](/sql-reference/data-types/tuple) - -**示例** - -**使用示例** - -```sql title=Query -SELECT IPv6CIDRToRange(toIPv6('2001:0db8:0000:85a3:0000:0000:ac1f:8001'), 32); -``` - -```response title=Response -┌─IPv6CIDRToRange(toIPv6('2001:0db8:0000:85a3:0000:0000:ac1f:8001'), 32)─┐ -│ ('2001:db8::','2001:db8:ffff:ffff:ffff:ffff:ffff:ffff') │ -└────────────────────────────────────────────────────────────────────────┘ -``` - - -## IPv6NumToString - -自 v1.1 引入 - -将 IPv6 地址从二进制格式(FixedString(16))转换为其标准文本表示法。 -IPv4 映射的 IPv6 地址以 `::ffff:111.222.33.44` 的格式显示。 - -**语法** - -```sql -IPv6NumToString(x) -``` - -**别名**:`INET6_NTOA` - -**参数** - -* `x` — 二进制格式的 IPv6 地址。[`FixedString(16)`](/sql-reference/data-types/fixedstring) 或 [`IPv6`](/sql-reference/data-types/ipv6) - -**返回值** - -返回文本格式的 IPv6 地址字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT IPv6NumToString(toFixedString(unhex('2A0206B8000000000000000000000011'), 16)) AS addr; -``` - -```response title=Response -┌─addr─────────┐ -│ 2a02:6b8::11 │ -└──────────────┘ -``` - -**基于 IPv6 的 hits 分析** - -```sql title=Query -SELECT - IPv6NumToString(ClientIP6 AS k), - count() AS c -FROM hits_all -WHERE EventDate = today() AND substring(ClientIP6, 1, 12) != unhex('00000000000000000000FFFF') -GROUP BY k -ORDER BY c DESC -LIMIT 10 -``` - -```response title=Response -┌─IPv6NumToString(ClientIP6)──────────────┬─────c─┐ -│ 2a02:2168:aaa:bbbb::2 │ 24695 │ -│ 2a02:2698:abcd:abcd:abcd:abcd:8888:5555 │ 22408 │ -│ 2a02:6b8:0:fff::ff │ 16389 │ -│ 2a01:4f8:111:6666::2 │ 16016 │ -│ 2a02:2168:888:222::1 │ 15896 │ -│ 2a01:7e00::ffff:ffff:ffff:222 │ 14774 │ -│ 2a02:8109:eee:ee:eeee:eeee:eeee:eeee │ 14443 │ -│ 2a02:810b:8888:888:8888:8888:8888:8888 │ 14345 │ -│ 2a02:6b8:0:444:4444:4444:4444:4444 │ 14279 │ -│ 2a01:7e00::ffff:ffff:ffff:ffff │ 13880 │ -└─────────────────────────────────────────┴───────┘ -``` - -**IPv6 映射的 IPv4 地址** - -```sql title=Query -SELECT - IPv6NumToString(ClientIP6 AS k), - count() AS c -FROM hits_all -WHERE EventDate = today() -GROUP BY k -ORDER BY c DESC -LIMIT 10 -``` - -```response title=Response -┌─IPv6NumToString(ClientIP6)─┬──────c─┐ -│ ::ffff:94.26.111.111 │ 747440 │ -│ ::ffff:37.143.222.4 │ 529483 │ -│ ::ffff:5.166.111.99 │ 317707 │ -│ ::ffff:46.38.11.77 │ 263086 │ -│ ::ffff:79.105.111.111 │ 186611 │ -│ ::ffff:93.92.111.88 │ 176773 │ -│ ::ffff:84.53.111.33 │ 158709 │ -│ ::ffff:217.118.11.22 │ 154004 │ -│ ::ffff:217.118.11.33 │ 148449 │ -│ ::ffff:217.118.11.44 │ 148243 │ -└────────────────────────────┴────────┘ -``` - - -## IPv6StringToNum - -引入版本:v1.1 - -将 IPv6 地址从其标准文本表示形式转换为二进制格式(`FixedString(16)`)。 -接受格式为 `::ffff:111.222.33.44.` 的 IPv4 映射 IPv6 地址。 -如果 IPv6 地址格式无效,则会抛出异常。 - -如果输入字符串包含有效的 IPv4 地址,则返回其对应的 IPv6 表示。 -十六进制字符可以是大写或小写。 - -**语法** - -```sql -IPv6StringToNum(字符串) -``` - -**别名**: `INET6_ATON` - -**参数** - -* `string` — IPv6 地址字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回以二进制格式表示的 IPv6 地址。[`FixedString(16)`](/sql-reference/data-types/fixedstring) - -**示例** - -**基础示例** - -```sql title=Query -SELECT addr, cutIPv6(IPv6StringToNum(addr), 0, 0) FROM (SELECT ['notaddress', '127.0.0.1', '1111::ffff'] AS addr) ARRAY JOIN addr; -``` - -```response title=Response -┌─addr───────┬─cutIPv6(IPv6StringToNum(addr), 0, 0)─┐ -│ notaddress │ :: │ -│ 127.0.0.1 │ ::ffff:127.0.0.1 │ -│ 1111::ffff │ 1111::ffff │ -└────────────┴──────────────────────────────────────┘ -``` - - -## IPv6StringToNumOrDefault - -自 v22.3 引入 - -将 IPv6 地址从其标准文本表示转换为二进制格式(`FixedString(16)`)。 -接受 IPv4 映射的 IPv6 地址,格式为 `::ffff:111.222.33.44.`。 -如果 IPv6 地址格式无效,则返回默认值 `::`。 - -**语法** - -```sql -IPv6StringToNumOrDefault(string) -``` - -**参数** - -* `string` — IPv6 地址字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -二进制格式的 IPv6 地址;若无效则返回全零的 FixedString(16)。[`FixedString(16)`](/sql-reference/data-types/fixedstring) - -**示例** - -**包含无效地址的基本示例** - -```sql title=Query -SELECT - IPv6NumToString(IPv6StringToNumOrDefault('2001:db8::1')) AS valid, - IPv6NumToString(IPv6StringToNumOrDefault('invalid')) AS invalid; -``` - -```response title=Response -┌─valid───────┬─invalid─┐ -│ 2001:db8::1 │ :: │ -└─────────────┴─────────┘ -``` - - -## IPv6StringToNumOrNull - -引入于:v22.3 - -将 IPv6 地址从其标准文本表示形式转换为二进制格式(`FixedString(16)`)。 -接受以 `::ffff:111.222.33.44.` 形式表示的 IPv4 映射 IPv6 地址。 -如果 IPv6 地址格式无效,则返回 `NULL`。 - -**语法** - -```sql -IPv6StringToNumOrNull(string) -``` - -**参数** - -* `string` — IPv6 地址字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回 IPv6 地址的二进制表示形式,如果地址无效则返回 `NULL`。[`Nullable(FixedString(16))`](/sql-reference/data-types/nullable) - -**示例** - -**包含无效地址的基本示例** - -```sql title=Query -SELECT - IPv6NumToString(IPv6StringToNumOrNull('2001:db8::1')) AS valid, - IPv6StringToNumOrNull('invalid') AS invalid; -``` - -```response title=Response -┌─valid───────┬─invalid─┐ -│ 2001:db8::1 │ ᴺᵁᴸᴸ │ -└─────────────┴─────────┘ -``` - - -## cutIPv6 - -引入版本:v1.1 - -接受一个以二进制格式存储 IPv6 地址的 `FixedString(16)` 值。 -返回一个字符串,其中包含删除指定字节数后的地址(文本格式)。 - -**语法** - -```sql -cutIPv6(x, bytesToCutForIPv6, bytesToCutForIPv4) -``` - -**参数** - -* `x` — 二进制格式的 IPv6 地址。[`FixedString(16)`](/sql-reference/data-types/fixedstring) 或 [`IPv6`](/sql-reference/data-types/ipv6) -* `bytesToCutForIPv6` — 要从 IPv6 地址中截去的字节数。[`UInt8`](/sql-reference/data-types/int-uint) -* `bytesToCutForIPv4` — 要从 IPv4 地址中截去的字节数。[`UInt8`](/sql-reference/data-types/int-uint) - -**返回值** - -返回一个字符串,其中包含以文本格式表示的 IPv6 地址,且已移除指定的字节。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -WITH - IPv6StringToNum('2001:0DB8:AC10:FE01:FEED:BABE:CAFE:F00D') AS ipv6, - IPv4ToIPv6(IPv4StringToNum('192.168.0.1')) AS ipv4 -SELECT - cutIPv6(ipv6, 2, 0), - cutIPv6(ipv4, 0, 2) -``` - -```response title=Response -┌─cutIPv6(ipv6, 2, 0)─────────────────┬─cutIPv6(ipv4, 0, 2)─┐ -│ 2001:db8:ac10:fe01:feed:babe:cafe:0 │ ::ffff:192.168.0.0 │ -└─────────────────────────────────────┴─────────────────────┘ -``` - - -## isIPAddressInRange - -引入版本:v21.4 - -判断某个 IP 地址是否属于使用 [无类别域间路由(CIDR)](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing) 表示法表示的网络。 - -此函数接受以字符串形式表示的 IPv4 和 IPv6 地址及网络。如果地址与 CIDR 的 IP 版本不匹配,则返回 `0`。 - -**语法** - -```sql -isIPAddressInRange(address, prefix) -``` - -**参数** - -* `address` — 一个 IPv4 或 IPv6 地址。[`String`](/sql-reference/data-types/string) -* `prefix` — 采用 CIDR 表示法的 IPv4 或 IPv6 网络前缀。[`String`](/sql-reference/data-types/string) - -**返回值** - -如果地址的 IP 版本与 CIDR 匹配,则返回 `1`,否则返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**位于范围内的 IPv4 地址** - -```sql title=Query -SELECT isIPAddressInRange('127.0.0.1', '127.0.0.0/8') -``` - -```response title=Response -1 -``` - -**IPv4 地址超出范围** - -```sql title=Query -SELECT isIPAddressInRange('127.0.0.1', 'ffff::/16') -``` - -```response title=Response -0 -``` - -**IPv6 地址不在有效范围内** - -```sql title=Query -SELECT isIPAddressInRange('::ffff:192.168.0.1', '::ffff:192.168.0.4/128') -``` - -```response title=Response -0 -``` - - -## isIPv4String - -自 v21.1 起提供 - -判断输入字符串是否为 IPv4 地址。 -IPv6 版本请参见 [`isIPv6String`](#isIPv6String)。 - -**语法** - -```sql -isIPv4String(string) -``` - -**参数** - -* `string` — 要检查的 IP 地址字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -若 `string` 为 IPv4 地址,则返回 `1`,否则返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT addr, isIPv4String(addr) -FROM( -SELECT ['0.0.0.0', '127.0.0.1', '::ffff:127.0.0.1'] AS addr -) -ARRAY JOIN addr; -``` - -```response title=Response -┌─addr─────────────┬─isIPv4String(addr)─┐ -│ 0.0.0.0 │ 1 │ -│ 127.0.0.1 │ 1 │ -│ ::ffff:127.0.0.1 │ 0 │ -└──────────────────┴────────────────────┘ -``` - - -## isIPv6String - -引入自:v21.1 - -用于判断输入字符串是否为 IPv6 地址。 -关于 IPv4 版本,请参阅 [`isIPv4String`](#isIPv4String)。 - -**语法** - -```sql -isIPv6String(string) -``` - -**参数** - -* `string` — 要检查的 IP 地址字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -如果 `string` 是 IPv6 地址则返回 `1`,否则返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT addr, isIPv6String(addr) -FROM(SELECT ['::', '1111::ffff', '::ffff:127.0.0.1', '127.0.0.1'] AS addr) -ARRAY JOIN addr; -``` - -```response title=Response -┌─addr─────────────┬─isIPv6String(addr)─┐ -│ :: │ 1 │ -│ 1111::ffff │ 1 │ -│ ::ffff:127.0.0.1 │ 1 │ -│ 127.0.0.1 │ 0 │ -└──────────────────┴────────────────────┘ -``` - - -## toIPv4 - -引入版本:v20.1 - -将 IPv4 地址的字符串形式或 `UInt32` 形式转换为 `IPv4` 类型。 -该函数类似于 [`IPv4StringToNum`](/sql-reference/functions/ip-address-functions#IPv4StringToNum) 和 [`IPv4NumToString`](/sql-reference/functions/ip-address-functions#IPv4NumToString),但它同时支持字符串和无符号整数数据类型作为输入参数。 - -**语法** - -```sql -toIPv4(x) -``` - -**参数** - -* `x` — 一个 IPv4 地址,类型为 [`String`](/sql-reference/data-types/string) 或 [`UInt8/16/32`](/sql-reference/data-types/int-uint) - -**返回值** - -返回一个 IPv4 地址。[`IPv4`](/sql-reference/data-types/ipv4) - -**示例** - -**用法示例** - -```sql title=Query -SELECT toIPv4('171.225.130.45'); -``` - -```response title=Response -┌─toIPv4('171.225.130.45')─┐ -│ 171.225.130.45 │ -└──────────────────────────┘ -``` - -**与 IPv4StringToNum 和 IPv4NumToString 函数的对比** - -```sql title=Query -WITH - '171.225.130.45' AS IPv4_string -SELECT - hex(IPv4StringToNum(IPv4_string)), - hex(toIPv4(IPv4_string)) -``` - -```response title=Response -┌─hex(IPv4StringToNum(IPv4_string))─┬─hex(toIPv4(IPv4_string))─┐ -│ ABE1822D │ ABE1822D │ -└───────────────────────────────────┴──────────────────────────┘ -``` - -**从整数进行转换** - -```sql title=Query -SELECT toIPv4(2130706433); -``` - -```response title=Response -┌─toIPv4(2130706433)─┐ -│ 127.0.0.1 │ -└────────────────────┘ -``` - - -## toIPv4OrDefault - -自 v22.3 引入 - -将 IPv4 地址的字符串或 `UInt32` 形式转换为 [`IPv4`](../data-types/ipv4.md) 类型。 -如果 IPv4 地址格式无效,则返回 `0.0.0.0`(IPv4 0),或返回提供的 IPv4 默认值。 - -**语法** - -```sql -toIPv4OrDefault(string[, default]) -``` - -**参数** - -* `string` — 要转换的 IPv4 地址字符串。[`String`](/sql-reference/data-types/string) -* `default` — 可选。如果 `string` 不是有效的 IPv4 地址,则返回该值。[`IPv4`](/sql-reference/data-types/ipv4) - -**返回值** - -返回由字符串转换得到的 IPv4 地址;如果转换失败,则返回默认值。[`IPv4`](/sql-reference/data-types/ipv4) - -**示例** - -**有效和无效的 IPv4 字符串** - -```sql title=Query -WITH - '192.168.1.1' AS valid_IPv4_string, - '999.999.999.999' AS invalid_IPv4_string, - 'not_an_ip' AS malformed_string -SELECT - toIPv4OrDefault(valid_IPv4_string) AS valid, - toIPv4OrDefault(invalid_IPv4_string) AS default_value, - toIPv4OrDefault(malformed_string, toIPv4('8.8.8.8')) AS provided_default; -``` - -```response title=Response -┌─valid─────────┬─default_value─┬─provided_default─┐ -│ 192.168.1.1 │ 0.0.0.0 │ 8.8.8.8 │ -└───────────────┴───────────────┴──────────────────┘ -``` - - -## toIPv4OrNull - -自 v22.3 引入 - -将输入值转换为 `IPv4` 类型的值,但在发生错误时返回 `NULL`。 -类似于 [`toIPv4`](#toIPv4),但在转换出错时返回 `NULL`,而不是抛出异常。 - -支持的参数: - -* 以点分十进制表示的 IPv4 地址字符串。 -* IPv4 地址的整数表示。 - -不支持的参数(返回 `NULL`): - -* 无效的 IP 地址格式。 -* IPv6 地址。 -* 超出范围的值。 -* 格式错误的地址。 - -**语法** - -```sql -toIPv4OrNull(x) -``` - -**参数** - -* `x` — IPv4 地址的字符串或整数表示形式。[`String`](/sql-reference/data-types/string) 或 [`Integer`](/sql-reference/data-types/int-uint) - -**返回值** - -成功时返回 IPv4 地址,否则返回 `NULL`。[`IPv4`](/sql-reference/data-types/ipv4) 或 [`NULL`](/sql-reference/syntax#null) - -**示例** - -**使用示例** - -```sql title=Query -SELECT - toIPv4OrNull('192.168.1.1') AS valid_ip, - toIPv4OrNull('invalid.ip') AS invalid_ip -``` - -```response title=Response -┌─valid_ip────┬─invalid_ip─┐ -│ 192.168.1.1 │ ᴺᵁᴸᴸ │ -└─────────────┴────────────┘ -``` - - -## toIPv4OrZero - -引入版本:v23.1 - -将输入值转换为 [IPv4](../data-types/ipv4.md) 类型的值,但在出错时返回全零 IPv4 地址。 -类似于 [`toIPv4`](#toIPv4),但在转换出错时不会抛出异常,而是返回全零 IPv4 地址(`0.0.0.0`)。 - -支持的参数: - -* 点分十进制表示的 IPv4 地址字符串。 -* IPv4 地址的整数表示。 - -不支持的参数(返回全零 IPv4 地址): - -* 无效的 IP 地址格式。 -* IPv6 地址。 -* 超出范围的值。 - -**语法** - -```sql -toIPv4OrZero(x) -``` - -**参数** - -* `x` — IPv4 地址的字符串或整数形式。[`String`](/sql-reference/data-types/string) 或 [`Integer`](/sql-reference/data-types/int-uint) - -**返回值** - -成功时返回 IPv4 地址,否则返回全零 IPv4 地址(`0.0.0.0`)。[`IPv4`](/sql-reference/data-types/ipv4) - -**示例** - -**使用示例** - -```sql title=Query -SELECT - toIPv4OrZero('192.168.1.1') AS valid_ip, - toIPv4OrZero('invalid.ip') AS invalid_ip -``` - -```response title=Response -┌─valid_ip────┬─invalid_ip─┐ -│ 192.168.1.1 │ 0.0.0.0 │ -└─────────────┴────────────┘ -``` - - -## toIPv6 - -引入于:v20.1 - -将字符串或 `UInt128` 形式的 IPv6 地址转换为 [`IPv6`](../data-types/ipv6.md) 类型。 -对于字符串,如果 IPv6 地址格式无效,则返回空结果。 -类似于 [`IPv6StringToNum`](/sql-reference/functions/ip-address-functions#IPv6StringToNum) 和 [`IPv6NumToString`](/sql-reference/functions/ip-address-functions#IPv6NumToString) 函数,它们在 IPv6 地址与二进制格式(即 `FixedString(16)`)之间进行转换。 - -如果输入字符串中包含有效的 IPv4 地址,则返回对应的 IPv6 等价地址。 - -**语法** - -```sql -toIPv6(x) -``` - -**参数** - -* `x` — IP 地址。[`String`](/sql-reference/data-types/string) 或 [`UInt128`](/sql-reference/data-types/int-uint) - -**返回值** - -返回一个 IPv6 地址。[`IPv6`](/sql-reference/data-types/ipv6) - -**示例** - -**使用示例** - -```sql title=Query -WITH '2001:438:ffff::407d:1bc1' AS IPv6_string -SELECT - hex(IPv6StringToNum(IPv6_string)), - hex(toIPv6(IPv6_string)); -``` - -```response title=Response -┌─hex(IPv6StringToNum(IPv6_string))─┬─hex(toIPv6(IPv6_string))─────────┐ -│ 20010438FFFF000000000000407D1BC1 │ 20010438FFFF000000000000407D1BC1 │ -└───────────────────────────────────┴──────────────────────────────────┘ -``` - -**IPv4 到 IPv6 的映射** - -```sql title=Query -SELECT toIPv6('127.0.0.1'); -``` - -```response title=Response -┌─toIPv6('127.0.0.1')─┐ -│ ::ffff:127.0.0.1 │ -└─────────────────────┘ -``` - - -## toIPv6OrDefault - -引入版本:v22.3 - -将 IPv6 地址的字符串形式或 UInt128 形式转换为 [`IPv6`](../data-types/ipv6.md) 类型。 -如果 IPv6 地址格式无效,则返回 `::`(全零 IPv6 地址)或指定的 IPv6 默认值。 - -**语法** - -```sql -toIPv6OrDefault(string[, default]) -``` - -**参数** - -* `string` — 要转换的 IP 地址字符串。 -* `default` — 可选。当 `string` 格式无效时返回的值。 - -**返回值** - -返回 IPv6 地址;如果 `string` 参数格式无效,则返回 `::` 或提供的可选默认值。[`IPv6`](/sql-reference/data-types/ipv6) - -**示例** - -**有效和无效的 IPv6 字符串** - -```sql title=Query -WITH - '2001:0db8:85a3:0000:0000:8a2e:0370:7334' AS valid_IPv6_string, - '2001:0db8:85a3::8a2e:370g:7334' AS invalid_IPv6_string, - 'not_an_ipv6' AS malformed_string -SELECT - toIPv6OrDefault(valid_IPv6_string) AS valid, - toIPv6OrDefault(invalid_IPv6_string) AS default_value, - toIPv6OrDefault(malformed_string, toIPv6('::1')) AS provided_default; -``` - -```response title=Response -┌─valid──────────────────────────────────┬─default_value─┬─provided_default─┐ -│ 2001:db8:85a3::8a2e:370:7334 │ :: │ ::1 │ -└────────────────────────────────────────┴───────────────┴──────────────────┘ -``` - - -## toIPv6OrNull - -引入于:v22.3 - -将输入值转换为 `IPv6` 类型的值,但在发生错误时返回 `NULL`。 -与 [`toIPv6`](#toIPv6) 类似,但在转换出错时返回 `NULL`,而不是抛出异常。 - -支持的参数: - -* 标准表示法的 IPv6 地址字符串。 -* IPv4 地址的字符串表示(转换为 IPv4 映射的 IPv6 地址)。 -* IPv6 地址的二进制表示。 - -不支持的参数(返回 `NULL`): - -* 无效的 IP 地址格式。 -* 格式错误的 IPv6 地址。 -* 超出取值范围的值。 -* 无效的表示法。 - -**语法** - -```sql -toIPv6OrNull(x) -``` - -**参数** - -* `x` — IPv6 或 IPv4 地址的字符串表示形式。[`String`](/sql-reference/data-types/string) - -**返回值** - -成功时返回 IPv6 地址,否则返回 `NULL`。[`IPv6`](/sql-reference/data-types/ipv6) 或 [`NULL`](/sql-reference/syntax#null) - -**示例** - -**使用示例** - -```sql title=Query -SELECT - toIPv6OrNull('2001:0db8:85a3:0000:0000:8a2e:0370:7334') AS valid_ipv6, - toIPv6OrNull('invalid::ip') AS invalid_ipv6 -``` - -```response title=Response -┌─valid_ipv6──────────────────────────┬─invalid_ipv6─┐ -│ 2001:db8:85a3::8a2e:370:7334 │ ᴺᵁᴸᴸ │ -└─────────────────────────────────────┴──────────────┘ -``` - - -## toIPv6OrZero - -引入于:v23.1 - -将输入值转换为 [IPv6](../data-types/ipv6.md) 类型的值,但在出错时返回全零 IPv6 地址。 -类似于 [`toIPv6`](#toIPv6),但在转换出错时返回全零 IPv6 地址(`::`),而不是抛出异常。 - -支持的参数: - -* 标准表示法的 IPv6 地址字符串。 -* IPv4 地址的字符串表示(会转换为 IPv4 映射的 IPv6 地址)。 -* IPv6 地址的二进制表示。 - -不支持的参数(将返回全零 IPv6 地址): - -* 无效的 IP 地址格式。 -* 格式错误的 IPv6 地址。 -* 超出范围的值。 - -**语法** - -```sql -toIPv6OrZero(x) -``` - -**参数** - -* `x` — IPv6 或 IPv4 地址的字符串形式。[`String`](/sql-reference/data-types/string) - -**返回值** - -成功时返回一个 IPv6 地址,否则返回全零 IPv6 地址 (`::`)。[`IPv6`](/sql-reference/data-types/ipv6) - -**示例** - -**使用示例** - -```sql title=Query -SELECT - toIPv6OrZero('2001:0db8:85a3:0000:0000:8a2e:0370:7334') AS valid_ipv6, - toIPv6OrZero('invalid::ip') AS invalid_ipv6 -``` - -```response title=Response -┌─valid_ipv6──────────────────────────┬─invalid_ipv6─┐ -│ 2001:db8:85a3::8a2e:370:7334 │ :: │ -└─────────────────────────────────────┴──────────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/json-functions.md b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/json-functions.md index 884cbb6595c..ba9652d48da 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/json-functions.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/json-functions.md @@ -6,2028 +6,44 @@ title: 'JSON 函数' doc_type: 'reference' --- +## JSON 函数类型 {#types-of-functions} +用于解析 JSON 的函数分为两类: -## JSON 函数的类型 {#types-of-functions} - -有两组函数用于解析 JSON: - -- [`simpleJSON*` (`visitParam*`)](#simplejson-visitparam-functions) 用于极快地解析 JSON 的有限子集。 -- [`JSONExtract*`](#jsonextract-functions) 用于解析普通 JSON。 +- [`simpleJSON*` (`visitParam*`)](#simplejson-visitparam-functions),用于以极高速度解析受限的 JSON 子集。 +- [`JSONExtract*`](#jsonextract-functions),用于解析普通 JSON。 ### simpleJSON (visitParam) 函数 {#simplejson-visitparam-functions} -ClickHouse 提供了用于处理简化 JSON 的特殊函数。所有这些 JSON 函数都基于对 JSON 格式的强假设。它们尽可能减少操作以最快速度完成任务。 +ClickHouse 提供了一组用于处理简化 JSON 的特殊函数。所有这些 JSON 函数都基于对 JSON 结构的若干严格假设设计,它们尽量只做完成任务所需的最少工作,以获得尽可能高的执行速度。 -做出以下假设: +这些函数基于以下假设: 1. 字段名称(函数参数)必须是常量。 -2. 字段名称在 JSON 中以规范方式编码。例如:`simpleJSONHas('{"abc":"def"}', 'abc') = 1`,但 `simpleJSONHas('{"\\u0061\\u0062\\u0063":"def"}', 'abc') = 0` -3. 在任何嵌套级别上无差别地搜索字段。如果有多个匹配字段,则使用第一次出现的字段。 +2. 字段名称在 JSON 中以某种规范形式进行编码。例如:`simpleJSONHas('{"abc":"def"}', 'abc') = 1`,但 `simpleJSONHas('{"\\u0061\\u0062\\u0063":"def"}', 'abc') = 0` +3. 字段会在任意嵌套层级被无差别地查找。如果存在多个匹配字段,将使用第一个出现的字段。 4. JSON 在字符串字面量之外不包含空格字符。 ### JSONExtract 函数 {#jsonextract-functions} 这些函数基于 [simdjson](https://github.com/lemire/simdjson),专为更复杂的 JSON 解析需求而设计。 -### 不区分大小写的 JSONExtract 函数 {#case-insensitive-jsonextract-functions} +### 不区分大小写的 JSONExtract 函数 这些函数在从 JSON 对象中提取值时执行 ASCII 不区分大小写的键匹配。 -它们的工作方式与区分大小写的对应函数相同,只是对象键的匹配不区分大小写。 -当多个键以不同大小写匹配时,返回第一个匹配项。 +它们的行为与其区分大小写的对应函数完全相同,只是匹配对象键时不区分大小写。 +当存在多个仅大小写不同但名称相同的键时,将返回第一个匹配项。 :::note 这些函数的性能可能低于其区分大小写的对应函数,因此如果可能,请使用常规 JSONExtract 函数。 ::: - - - - - -## JSONAllPaths {#JSONAllPaths} - -引入版本:v24.8 - -返回 JSON 列中每行存储的所有路径列表。 - -**语法** - -```sql -JSONAllPaths(json) -``` - -**参数** - -- `json` — JSON 列。[`JSON`](/sql-reference/data-types/newjson) - -**返回值** - -返回 JSON 列中所有路径的数组。[`Array(String)`](/sql-reference/data-types/array) - -**示例** - -**使用示例** - -```sql title=查询 -CREATE TABLE test (json JSON(max_dynamic_paths=1)) ENGINE = Memory; -INSERT INTO test FORMAT JSONEachRow {"json" : {"a" : 42}}, {"json" : {"b" : "Hello"}}, {"json" : {"a" : [1, 2, 3], "c" : "2020-01-01"}} -SELECT json, JSONAllPaths(json) FROM test; -``` - -```response title=响应 -┌─json─────────────────────────────────┬─JSONAllPaths(json)─┐ -│ {"a":"42"} │ ['a'] │ -│ {"b":"Hello"} │ ['b'] │ -│ {"a":["1","2","3"],"c":"2020-01-01"} │ ['a','c'] │ -└──────────────────────────────────────┴────────────────────┘ -``` - - -## JSONAllPathsWithTypes {#JSONAllPathsWithTypes} - -引入版本:v24.8 - -返回 JSON 列中每行存储的所有路径及其数据类型列表。 - -**语法** - -```sql -JSONAllPathsWithTypes(json) -``` - -**参数** - -- `json` — JSON 列。[`JSON`](/sql-reference/data-types/newjson) - -**返回值** - -返回 JSON 列中所有路径及其数据类型的映射。[`Map(String, String)`](/sql-reference/data-types/map) - -**示例** - -**使用示例** - -```sql title=Query -CREATE TABLE test (json JSON(max_dynamic_paths=1)) ENGINE = Memory; -INSERT INTO test FORMAT JSONEachRow {"json" : {"a" : 42}}, {"json" : {"b" : "Hello"}}, {"json" : {"a" : [1, 2, 3], "c" : "2020-01-01"}} -SELECT json, JSONAllPathsWithTypes(json) FROM test; -``` - -```response title=Response -┌─json─────────────────────────────────┬─JSONAllPathsWithTypes(json)───────────────┐ -│ {"a":"42"} │ {'a':'Int64'} │ -│ {"b":"Hello"} │ {'b':'String'} │ -│ {"a":["1","2","3"],"c":"2020-01-01"} │ {'a':'Array(Nullable(Int64))','c':'Date'} │ -└──────────────────────────────────────┴───────────────────────────────────────────┘ -``` - - -## JSONArrayLength {#JSONArrayLength} - -引入版本:v23.2 - -返回最外层 JSON 数组中的元素数量。 -如果输入的 JSON 字符串无效,该函数返回 `NULL`。 - -**语法** - -```sql -JSONArrayLength(json) -``` - -**别名**:`JSON_ARRAY_LENGTH` - -**参数** - -- `json` — 有效的 JSON 字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -如果 `json` 是有效的 JSON 数组字符串,则返回数组元素的数量,否则返回 `NULL`。[`Nullable(UInt64)`](/sql-reference/data-types/nullable) - -**示例** - -**使用示例** - -```sql title=查询 -SELECT - JSONArrayLength(''), - JSONArrayLength('[1,2,3]'); -``` - -```response title=响应 -┌─JSONArrayLength('')─┬─JSONArrayLength('[1,2,3]')─┐ -│ ᴺᵁᴸᴸ │ 3 │ -└─────────────────────┴────────────────────────────┘ -``` - - -## JSONDynamicPaths {#JSONDynamicPaths} - -引入版本:v24.8 - -返回 JSON 列中作为独立子列存储的动态路径列表。 - -**语法** - -```sql -JSONDynamicPaths(json) -``` - -**参数** - -- `json` — JSON 列。[`JSON`](/sql-reference/data-types/newjson) - -**返回值** - -返回 JSON 列中动态路径的数组。[`Array(String)`](/sql-reference/data-types/array) - -**示例** - -**使用示例** - -```sql title=查询 -CREATE TABLE test (json JSON(max_dynamic_paths=1)) ENGINE = Memory; -INSERT INTO test FORMAT JSONEachRow {"json" : {"a" : 42}}, {"json" : {"b" : "Hello"}}, {"json" : {"a" : [1, 2, 3], "c" : "2020-01-01"}} -SELECT json, JSONDynamicPaths(json) FROM test; -``` - -```response title=响应 -┌─json─────────────────────────────────┬─JSONDynamicPaths(json)─┐ -│ {"a":"42"} │ ['a'] │ -│ {"b":"Hello"} │ [] │ -│ {"a":["1","2","3"],"c":"2020-01-01"} │ ['a'] │ -└──────────────────────────────────────┴────────────────────────┘ -``` - - -## JSONDynamicPathsWithTypes {#JSONDynamicPathsWithTypes} - -引入版本:v24.8 - -返回 JSON 列中每行作为独立子列存储的动态路径及其类型列表。 - -**语法** - -```sql -JSONDynamicPathsWithTypes(json) -``` - -**参数** - -- `json` — JSON 列。[`JSON`](/sql-reference/data-types/newjson) - -**返回值** - -返回 JSON 列中动态路径及其数据类型的映射。[`Map(String, String)`](/sql-reference/data-types/map) - -**示例** - -**使用示例** - -```sql title=查询 -CREATE TABLE test (json JSON(max_dynamic_paths=1)) ENGINE = Memory; -INSERT INTO test FORMAT JSONEachRow {"json" : {"a" : 42}}, {"json" : {"b" : "Hello"}}, {"json" : {"a" : [1, 2, 3], "c" : "2020-01-01"}} -SELECT json, JSONDynamicPathsWithTypes(json) FROM test; -``` - -```response title=响应 -┌─json─────────────────────────────────┬─JSONDynamicPathsWithTypes(json)─┐ -│ {"a":"42"} │ {'a':'Int64'} │ -│ {"b":"Hello"} │ {} │ -│ {"a":["1","2","3"],"c":"2020-01-01"} │ {'a':'Array(Nullable(Int64))'} │ -└──────────────────────────────────────┴─────────────────────────────────┘ -``` - - -## JSONExtract {#JSONExtract} - -引入版本:v19.14 - -解析 JSON 并提取指定 ClickHouse 数据类型的值。 - -**语法** - -```sql -JSONExtract(json, return_type[, indices_or_keys, ...]) -``` - -**参数** - -- `json` — 待解析的 JSON 字符串。[`String`](/sql-reference/data-types/string) -- `return_type` — 返回的 ClickHouse 数据类型。[`String`](/sql-reference/data-types/string) -- `indices_or_keys` — 零个或多个参数的列表,每个参数可以是字符串或整数。[`String`](/sql-reference/data-types/string) 或 [`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -如果可能,返回指定 ClickHouse 数据类型的值,否则返回该类型的默认值。 - -**示例** - -**使用示例** - -```sql title=查询 -SELECT JSONExtract('{"a": "hello", "b": [-100, 200.0, 300]}', 'Tuple(String, Array(Float64))') AS res; -``` - -```response title=响应 -┌─res──────────────────────────────┐ -│ ('hello',[-100,200,300]) │ -└──────────────────────────────────┘ -``` - - -## JSONExtractArrayRaw {#JSONExtractArrayRaw} - -引入版本:v20.1 - -返回一个数组,其中包含 JSON 数组的元素,每个元素以未解析的字符串形式表示。 - -**语法** - -```sql -JSONExtractArrayRaw(json[, indices_or_keys, ...]) -``` - -**参数** - -- `json` — 要解析的 JSON 字符串。[`String`](/sql-reference/data-types/string) -- `indices_or_keys` — 零个或多个参数的列表,每个参数可以是字符串或整数。[`String`](/sql-reference/data-types/string) 或 [`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回一个包含 JSON 数组元素的字符串数组。如果指定部分不是数组或不存在,则返回空数组。[`Array(String)`](/sql-reference/data-types/array) - -**示例** - -**使用示例** - -```sql title=查询 -SELECT JSONExtractArrayRaw('{"a": "hello", "b": [-100, 200.0, "hello"]}', 'b') AS res; -``` - -```response title=响应 -┌─res──────────────────────────┐ -│ ['-100','200.0','"hello"'] │ -└──────────────────────────────┘ -``` - - -## JSONExtractArrayRawCaseInsensitive {#JSONExtractArrayRawCaseInsensitive} - -引入版本:v25.8 - -返回一个数组,包含 JSON 数组的各个元素,每个元素以未解析的字符串形式表示,使用不区分大小写的键匹配方式。此函数类似于 [`JSONExtractArrayRaw`](#JSONExtractArrayRaw)。 - -**语法** - -```sql -JSONExtractArrayRawCaseInsensitive(json [, indices_or_keys]...) -``` - -**参数** - -- `json` — 待解析的 JSON 字符串 [`String`](/sql-reference/data-types/string) -- `indices_or_keys` — 可选参数。用于导航到目标数组的索引或键。键采用不区分大小写的匹配方式 [`String`](/sql-reference/data-types/string) 或 [`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回原始 JSON 字符串数组。[`Array(String)`](/sql-reference/data-types/array) - -**示例** - -**基础示例** - -```sql title=查询 -SELECT JSONExtractArrayRawCaseInsensitive('{"Items": [1, 2, 3]}', 'ITEMS') -``` - -```response title=响应 -['1','2','3'] -``` - - -## JSONExtractBool {#JSONExtractBool} - -引入版本:v20.1 - -解析 JSON 并提取布尔类型的值。 - -**语法** - -```sql -JSONExtractBool(json[, indices_or_keys, ...]) -``` - -**参数** - -- `json` — 要解析的 JSON 字符串。[`String`](/sql-reference/data-types/string) -- `indices_or_keys` — 零个或多个参数列表,每个参数可以是字符串或整数。[`String`](/sql-reference/data-types/string) 或 [`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -如果值存在则返回布尔值,否则返回 `0`。[`Bool`](/sql-reference/data-types/boolean) - -**示例** - -**使用示例** - -```sql title=查询 -SELECT JSONExtractBool('{"passed": true}', 'passed') AS res; -``` - -```response title=响应 -┌─res─┐ -│ 1 │ -└─────┘ -``` - - -## JSONExtractBoolCaseInsensitive {#JSONExtractBoolCaseInsensitive} - -引入版本:v25.8 - -解析 JSON 并使用不区分大小写的键匹配方式提取布尔值。此函数与 [`JSONExtractBool`](#JSONExtractBool) 类似。 - -**语法** - -```sql -JSONExtractBoolCaseInsensitive(json [, indices_or_keys]...) -``` - -**参数** - -- `json` — 待解析的 JSON 字符串 [`String`](/sql-reference/data-types/string) -- `indices_or_keys` — 可选参数。用于导航到目标字段的索引或键。键采用不区分大小写的匹配方式 [`String`](/sql-reference/data-types/string) 或 [`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回提取的布尔值(true 为 1,false 为 0),未找到时返回 0。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**基础示例** - -```sql title=查询 -SELECT JSONExtractBoolCaseInsensitive('{"IsActive": true}', 'isactive') -``` - -```response title=响应 -1 -``` - - -## JSONExtractCaseInsensitive {#JSONExtractCaseInsensitive} - -引入版本:v25.8 - -解析 JSON 并使用不区分大小写的键匹配方式提取指定 ClickHouse 数据类型的值。此函数类似于 [`JSONExtract`](#JSONExtract)。 - -**语法** - -```sql -JSONExtractCaseInsensitive(json [, indices_or_keys...], return_type) -``` - -**参数** - -- `json` — 待解析的 JSON 字符串 [`String`](/sql-reference/data-types/string) -- `indices_or_keys` — 可选。用于定位字段的索引或键。键采用不区分大小写的匹配方式 [`String`](/sql-reference/data-types/string) 或 [`(U)Int*`](/sql-reference/data-types/int-uint) -- `return_type` — 提取结果的 ClickHouse 数据类型 [`String`](/sql-reference/data-types/string) - -**返回值** - -返回指定数据类型的提取值。[`Any`](/sql-reference/data-types) - -**示例** - -**整数类型** - -```sql title=Query -SELECT JSONExtractCaseInsensitive('{"Number": 123}', 'number', 'Int32') -``` - -```response title=Response -123 -``` - -**数组类型** - -```sql title=Query -SELECT JSONExtractCaseInsensitive('{"List": [1, 2, 3]}', 'list', 'Array(Int32)') -``` - -```response title=Response -[1,2,3] -``` - - -## JSONExtractFloat {#JSONExtractFloat} - -引入版本:v20.1 - -解析 JSON 并提取浮点类型的值。 - -**语法** - -```sql -JSONExtractFloat(json[, indices_or_keys, ...]) -``` - -**参数** - -- `json` — 要解析的 JSON 字符串。[`String`](/sql-reference/data-types/string) -- `indices_or_keys` — 零个或多个参数的列表,每个参数可以是字符串或整数。[`String`](/sql-reference/data-types/string) 或 [`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -如果值存在则返回浮点值,否则返回 `0`。[`Float64`](/sql-reference/data-types/float) - -**示例** - -**使用示例** - -```sql title=Query -SELECT JSONExtractFloat('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', 2) AS res; -``` - -```response title=Response -┌─res─┐ -│ 200 │ -└─────┘ -``` - - -## JSONExtractFloatCaseInsensitive {#JSONExtractFloatCaseInsensitive} - -引入版本:v25.8 - -解析 JSON 并使用不区分大小写的键匹配方式提取 Float 类型的值。该函数类似于 [`JSONExtractFloat`](#JSONExtractFloat)。 - -**语法** - -```sql -JSONExtractFloatCaseInsensitive(json [, indices_or_keys]...) -``` - -**参数** - -- `json` — 待解析的 JSON 字符串 [`String`](/sql-reference/data-types/string) -- `indices_or_keys` — 可选参数。用于导航到目标字段的索引或键。键采用不区分大小写的匹配方式 [`String`](/sql-reference/data-types/string) 或 [`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回提取的 Float 值,若未找到或无法转换则返回 0。[`Float64`](/sql-reference/data-types/float) - -**示例** - -**基础示例** - -```sql title=查询 -SELECT JSONExtractFloatCaseInsensitive('{"Price": 12.34}', 'PRICE') -``` - -```response title=响应 -12.34 -``` - - -## JSONExtractInt {#JSONExtractInt} - -引入版本:v20.1 - -解析 JSON 并提取 Int 类型的值。 - -**语法** - -```sql -JSONExtractInt(json[, indices_or_keys, ...]) -``` - -**参数** - -- `json` — 要解析的 JSON 字符串。[`String`](/sql-reference/data-types/string) -- `indices_or_keys` — 零个或多个参数的列表,每个参数可以是字符串或整数。[`String`](/sql-reference/data-types/string) 或 [`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -如果值存在则返回 Int 值,否则返回 `0`。[`Int64`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=查询 -SELECT JSONExtractInt('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', 1) AS res; -``` - -```response title=响应 -┌─res─┐ -│ 200 │ -└─────┘ -``` - - -## JSONExtractIntCaseInsensitive {#JSONExtractIntCaseInsensitive} - -引入版本:v25.8 - -解析 JSON 并使用不区分大小写的键匹配方式提取 Int 类型的值。此函数与 [`JSONExtractInt`](#JSONExtractInt) 类似。 - -**语法** - -```sql -JSONExtractIntCaseInsensitive(json [, indices_or_keys]...) -``` - -**参数** - -- `json` — 待解析的 JSON 字符串 [`String`](/sql-reference/data-types/string) -- `indices_or_keys` — 可选参数。用于导航到目标字段的索引或键。键采用不区分大小写的匹配方式 [`String`](/sql-reference/data-types/string) 或 [`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回提取的 Int 值,若未找到或无法转换则返回 0。[`Int64`](/sql-reference/data-types/int-uint) - -**示例** - -**基础用法** - -```sql title=查询 -SELECT JSONExtractIntCaseInsensitive('{"Value": 123}', 'value') -``` - -```response title=响应 -123 -``` - -**嵌套结构** - -```sql title=查询 -SELECT JSONExtractIntCaseInsensitive('{"DATA": {"COUNT": 42}}', 'data', 'Count') -``` - -```response title=响应 -42 -``` - - -## JSONExtractKeys {#JSONExtractKeys} - -引入版本:v21.11 - -解析 JSON 字符串并提取键。 - -**语法** - -```sql -JSONExtractKeys(json[, indices_or_keys, ...]) -``` - -**参数** - -- `json` — 要解析的 JSON 字符串。[`String`](/sql-reference/data-types/string) -- `indices_or_keys` — 零个或多个参数的列表,每个参数可以是字符串或整数。[`String`](/sql-reference/data-types/string) 或 [`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回包含 JSON 对象所有键的数组。[`Array(String)`](/sql-reference/data-types/array) - -**示例** - -**使用示例** - -```sql title=查询 -SELECT JSONExtractKeys('{"a": "hello", "b": [-100, 200.0, 300]}') AS res; -``` - -```response title=响应 -┌─res─────────┐ -│ ['a','b'] │ -└─────────────┘ -``` - - -## JSONExtractKeysAndValues {#JSONExtractKeysAndValues} - -引入版本:v20.1 - -从 JSON 中解析键值对,其中值的类型为指定的 ClickHouse 数据类型。 - -**语法** - -```sql -JSONExtractKeysAndValues(json, value_type[, indices_or_keys, ...]) -``` - -**参数** - -- `json` — 要解析的 JSON 字符串。[`String`](/sql-reference/data-types/string) -- `value_type` — 值的 ClickHouse 数据类型。[`String`](/sql-reference/data-types/string) -- `indices_or_keys` — 零个或多个参数的列表,每个参数可以是字符串或整数。[`String`](/sql-reference/data-types/string) 或 [`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回包含已解析键值对的元组数组。[`Array(Tuple(String, value_type))`](/sql-reference/data-types/array) - -**示例** - -**使用示例** - -```sql title=Query -SELECT JSONExtractKeysAndValues('{"x": {"a": 5, "b": 7, "c": 11}}', 'Int8', 'x') AS res; -``` - -```response title=Response -┌─res────────────────────┐ -│ [('a',5),('b',7),('c',11)] │ -└────────────────────────┘ -``` - - -## JSONExtractKeysAndValuesCaseInsensitive {#JSONExtractKeysAndValuesCaseInsensitive} - -引入版本:v25.8 - -从 JSON 中解析键值对,使用不区分大小写的键匹配方式。此函数类似于 [`JSONExtractKeysAndValues`](#JSONExtractKeysAndValues)。 - -**语法** - -```sql -JSONExtractKeysAndValuesCaseInsensitive(json [, indices_or_keys...], value_type) -``` - -**参数** - -- `json` — 要解析的 JSON 字符串 [`String`](/sql-reference/data-types/string) -- `indices_or_keys` — 可选参数。用于导航到对象的索引或键。键使用不区分大小写的匹配方式 [`String`](/sql-reference/data-types/string) 或 [`(U)Int*`](/sql-reference/data-types/int-uint) -- `value_type` — 值的 ClickHouse 数据类型 [`String`](/sql-reference/data-types/string) - -**返回值** - -返回包含键值对的元组数组。[`Array(Tuple(String, T))`](/sql-reference/data-types/array) - -**示例** - -**基础示例** - -```sql title=查询 -SELECT JSONExtractKeysAndValuesCaseInsensitive('{"Name": "Alice", "AGE": 30}', 'String') -``` - -```response title=响应 -[('Name','Alice'),('AGE','30')] -``` - - -## JSONExtractKeysAndValuesRaw {#JSONExtractKeysAndValuesRaw} - -引入版本:v20.4 - -从 JSON 对象中返回包含键和值的元组数组。所有值均以未解析的字符串形式表示。 - -**语法** - -```sql -JSONExtractKeysAndValuesRaw(json[, indices_or_keys, ...]) -``` - -**参数** - -- `json` — 要解析的 JSON 字符串。[`String`](/sql-reference/data-types/string) -- `indices_or_keys` — 零个或多个参数列表,每个参数可以是字符串或整数。[`String`](/sql-reference/data-types/string) 或 [`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回包含已解析键值对的元组数组,其中值为未解析的字符串。[`Array(Tuple(String, String))`](/sql-reference/data-types/array) - -**示例** - -**使用示例** - -```sql title=查询 -SELECT JSONExtractKeysAndValuesRaw('{"a": [-100, 200.0], "b": "hello"}') AS res; -``` - -```response title=响应 -┌─res──────────────────────────────────┐ -│ [('a','[-100,200.0]'),('b','"hello"')] │ -└──────────────────────────────────────┘ -``` - - -## JSONExtractKeysAndValuesRawCaseInsensitive {#JSONExtractKeysAndValuesRawCaseInsensitive} - -引入版本:v25.8 - -从 JSON 中提取原始键值对,使用不区分大小写的键匹配。此函数类似于 [`JSONExtractKeysAndValuesRaw`](#JSONExtractKeysAndValuesRaw)。 - -**语法** - -```sql -JSONExtractKeysAndValuesRawCaseInsensitive(json [, indices_or_keys]...) -``` - -**参数** - -- `json` — 要解析的 JSON 字符串 [`String`](/sql-reference/data-types/string) -- `indices_or_keys` — 可选参数。用于导航到对象的索引或键。键使用不区分大小写的匹配方式 [`String`](/sql-reference/data-types/string) 或 [`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回包含键值对的元组数组,键值对以原始字符串形式表示。[`Array(Tuple(String, String))`](/sql-reference/data-types/array) - -**示例** - -**基础示例** - -```sql title=Query -SELECT JSONExtractKeysAndValuesRawCaseInsensitive('{"Name": "Alice", "AGE": 30}') -``` - -```response title=Response -[('Name','"Alice"'),('AGE','30')] -``` - - -## JSONExtractKeysCaseInsensitive {#JSONExtractKeysCaseInsensitive} - -引入版本:v25.8 - -解析 JSON 字符串并使用不区分大小写的键匹配提取键,以导航到嵌套对象。此函数类似于 [`JSONExtractKeys`](#JSONExtractKeys)。 - -**语法** - -```sql -JSONExtractKeysCaseInsensitive(json [, indices_or_keys]...) -``` - -**参数** - -- `json` — 要解析的 JSON 字符串 [`String`](/sql-reference/data-types/string) -- `indices_or_keys` — 可选。用于导航到对象的索引或键。键使用不区分大小写匹配 [`String`](/sql-reference/data-types/string) 或 [`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回 JSON 对象的键数组。[`Array(String)`](/sql-reference/data-types/array) - -**示例** - -**基础示例** - -```sql title=查询 -SELECT JSONExtractKeysCaseInsensitive('{"Name": "Alice", "AGE": 30}') -``` - -```response title=响应 -['Name','AGE'] -``` - -**嵌套示例** - -```sql title=查询 -SELECT JSONExtractKeysCaseInsensitive('{"User": {"name": "John", "AGE": 25}}', 'user') -``` - -```response title=响应 -['name','AGE'] -``` - - -## JSONExtractRaw {#JSONExtractRaw} - -引入版本:v20.1 - -以未解析的字符串形式返回 JSON 的一部分。 - -**语法** - -```sql -JSONExtractRaw(json[, indices_or_keys, ...]) -``` - -**参数** - -- `json` — 要解析的 JSON 字符串。[`String`](/sql-reference/data-types/string) -- `indices_or_keys` — 零个或多个参数的列表,每个参数可以是字符串或整数。[`String`](/sql-reference/data-types/string) 或 [`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -以未解析的字符串形式返回 JSON 的部分内容。如果该部分不存在或类型错误,将返回空字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT JSONExtractRaw('{"a": "hello", "b": [-100, 200.0, 300]}', 'b') AS res; -``` - -```response title=Response -┌─res──────────────┐ -│ [-100,200.0,300] │ -└──────────────────┘ -``` - - -## JSONExtractRawCaseInsensitive {#JSONExtractRawCaseInsensitive} - -引入版本:v25.8 - -使用不区分大小写的键匹配方式返回 JSON 的一部分作为未解析的字符串。此函数类似于 [`JSONExtractRaw`](#JSONExtractRaw)。 - -**语法** - -```sql -JSONExtractRawCaseInsensitive(json [, indices_or_keys]...) -``` - -**参数** - -- `json` — 要解析的 JSON 字符串 [`String`](/sql-reference/data-types/string) -- `indices_or_keys` — 可选参数。用于导航到目标字段的索引或键。键采用不区分大小写的匹配方式 [`String`](/sql-reference/data-types/string) 或 [`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回提取元素的原始 JSON 字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**对象** - -```sql title=查询 -SELECT JSONExtractRawCaseInsensitive('{"Object": {"key": "value"}}', 'OBJECT') -``` - -```response title=响应 -{"key":"value"} -``` - - -## JSONExtractString {#JSONExtractString} - -引入版本:v20.1 - -解析 JSON 并提取字符串类型的值。 - -**语法** - -```sql -JSONExtractString(json[, indices_or_keys, ...]) -``` - -**参数** - -- `json` — 待解析的 JSON 字符串。[`String`](/sql-reference/data-types/string) -- `indices_or_keys` — 零个或多个参数组成的列表,每个参数可以是字符串或整数。[`String`](/sql-reference/data-types/string) 或 [`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -如果值存在,则返回字符串值;否则返回空字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT JSONExtractString('{"a": "hello", "b": [-100, 200.0, 300]}', 'a') AS res; -``` - -```response title=Response -┌─res───┐ -│ hello │ -└───────┘ -``` - - -## JSONExtractStringCaseInsensitive {#JSONExtractStringCaseInsensitive} - -引入版本:v25.8 - -解析 JSON 并使用不区分大小写的键匹配方式提取字符串。此函数与 [`JSONExtractString`](#JSONExtractString) 类似。 - -**语法** - -```sql -JSONExtractStringCaseInsensitive(json [, indices_or_keys]...) -``` - -**参数** - -- `json` — 待解析的 JSON 字符串 [`String`](/sql-reference/data-types/string) -- `indices_or_keys` — 可选参数。用于导航到目标字段的索引或键。键采用不区分大小写的匹配方式 [`String`](/sql-reference/data-types/string) 或 [`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回提取的字符串值,若未找到则返回空字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**基础用法** - -```sql title=Query -SELECT JSONExtractStringCaseInsensitive('{"ABC": "def"}', 'abc') -``` - -```response title=Response -def -``` - -**嵌套结构** - -```sql title=Query -SELECT JSONExtractStringCaseInsensitive('{"User": {"Name": "John"}}', 'user', 'name') -``` - -```response title=Response -John -``` - - -## JSONExtractUInt {#JSONExtractUInt} - -引入版本:v20.1 - -解析 JSON 并提取 UInt 类型的值。 - -**语法** - -```sql -JSONExtractUInt(json [, indices_or_keys, ...]) -``` - -**参数** - -- `json` — 要解析的 JSON 字符串。[`String`](/sql-reference/data-types/string) -- `indices_or_keys` — 零个或多个参数的列表,每个参数可以是字符串或整数。[`String`](/sql-reference/data-types/string) 或 [`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -如果值存在则返回 UInt 值,否则返回 `0`。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT JSONExtractUInt('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', -1) AS res; -``` - -```response title=Response -┌─res─┐ -│ 300 │ -└─────┘ -``` - - -## JSONExtractUIntCaseInsensitive {#JSONExtractUIntCaseInsensitive} - -引入版本:v25.8 - -解析 JSON 并使用不区分大小写的键匹配方式提取 UInt 类型的值。此函数类似于 [`JSONExtractUInt`](#JSONExtractUInt)。 - -**语法** - -```sql -JSONExtractUIntCaseInsensitive(json [, indices_or_keys]...) -``` - -**参数** - -- `json` — 待解析的 JSON 字符串 [`String`](/sql-reference/data-types/string) -- `indices_or_keys` — 可选参数。用于导航到目标字段的索引或键。键采用不区分大小写的匹配方式 [`String`](/sql-reference/data-types/string) 或 [`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回提取的 UInt 值,如果未找到或无法转换则返回 0。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**基础用法** - -```sql title=Query -SELECT JSONExtractUIntCaseInsensitive('{"COUNT": 789}', 'count') -``` - -```response title=Response -789 -``` - - -## JSONHas {#JSONHas} - -引入版本:v20.1 - -检查 JSON 文档中是否存在指定的值。 - -**语法** - -```sql -JSONHas(json[ ,indices_or_keys, ...]) -``` - -**参数** - -- `json` — 要解析的 JSON 字符串 [`String`](/sql-reference/data-types/string) -- `[ ,indices_or_keys, ...]` — 零个或多个参数列表。[`String`](/sql-reference/data-types/string) 或 [`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -如果值存在于 `json` 中则返回 `1`,否则返回 `0` [`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=查询 -SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', 'b') = 1; -SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', 4) = 0; -``` - -```response title=响应 -1 -0 -``` - - -## JSONLength {#JSONLength} - -引入版本:v20.1 - -返回 JSON 数组或 JSON 对象的长度。 -如果值不存在或类型错误,将返回 `0`。 - -**语法** - -```sql -JSONLength(json [, indices_or_keys, ...]) -``` - -**参数** - -- `json` — 待解析的 JSON 字符串 [`String`](/sql-reference/data-types/string) -- `[, indices_or_keys, ...]` — 可选参数。零个或多个参数列表。[`String`](/sql-reference/data-types/string) 或 [`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) - -**返回值** - -返回 JSON 数组或 JSON 对象的长度,如果值不存在或类型错误则返回 `0`。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=查询 -SELECT JSONLength('{"a": "hello", "b": [-100, 200.0, 300]}', 'b') = 3; -SELECT JSONLength('{"a": "hello", "b": [-100, 200.0, 300]}') = 2; -``` - -```response title=响应 -1 -1 -``` - - -## JSONMergePatch {#JSONMergePatch} - -引入版本:v23.10 - -返回由多个 JSON 对象合并而成的 JSON 对象字符串。 - -**语法** - -```sql -jsonMergePatch(json1[, json2, ...]) -``` - -**别名**:`jsonMergePatch` - -**参数** - -- `json1[, json2, ...]` — 一个或多个包含有效 JSON 的字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -如果 JSON 对象字符串有效,则返回合并后的 JSON 对象字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT jsonMergePatch('{"a":1}', '{"name": "joey"}', '{"name": "tom"}', '{"name": "zoey"}') AS res; -``` - -```response title=Response -┌─res───────────────────┐ -│ {"a":1,"name":"zoey"} │ -└───────────────────────┘ -``` - - -## JSONSharedDataPaths {#JSONSharedDataPaths} - -引入版本:v24.8 - -返回 JSON 列中存储在共享数据结构中的路径列表。 - -**语法** - -```sql -JSONSharedDataPaths(json) -``` - -**参数** - -- `json` — JSON 列。[`JSON`](/sql-reference/data-types/newjson) - -**返回值** - -返回 JSON 列中存储在共享数据结构中的路径数组。[`Array(String)`](/sql-reference/data-types/array) - -**示例** - -**使用示例** - -```sql title=查询 -CREATE TABLE test (json JSON(max_dynamic_paths=1)) ENGINE = Memory; -INSERT INTO test FORMAT JSONEachRow {"json" : {"a" : 42}}, {"json" : {"b" : "Hello"}}, {"json" : {"a" : [1, 2, 3], "c" : "2020-01-01"}} -SELECT json, JSONSharedDataPaths(json) FROM test; -``` - -```response title=响应 -┌─json─────────────────────────────────┬─JSONSharedDataPaths(json)─┐ -│ {"a":"42"} │ [] │ -│ {"b":"Hello"} │ ['b'] │ -│ {"a":["1","2","3"],"c":"2020-01-01"} │ ['c'] │ -└──────────────────────────────────────┴───────────────────────────┘ -``` - - -## JSONSharedDataPathsWithTypes {#JSONSharedDataPathsWithTypes} - -引入版本:v24.8 - -返回 JSON 列中每一行存储在共享数据结构中的路径列表及其类型。 - -**语法** - -```sql -JSONSharedDataPathsWithTypes(json) -``` - -**参数** - -- `json` — JSON 列。[`JSON`](/sql-reference/data-types/newjson) - -**返回值** - -返回 JSON 列中存储在共享数据结构中的路径及其数据类型的映射。[`Map(String, String)`](/sql-reference/data-types/map) - -**示例** - -**使用示例** - -```sql title=查询 -CREATE TABLE test (json JSON(max_dynamic_paths=1)) ENGINE = Memory; -INSERT INTO test FORMAT JSONEachRow {"json" : {"a" : 42}}, {"json" : {"b" : "Hello"}}, {"json" : {"a" : [1, 2, 3], "c" : "2020-01-01"}} -SELECT json, JSONSharedDataPathsWithTypes(json) FROM test; -``` - -```response title=响应 -┌─json─────────────────────────────────┬─JSONSharedDataPathsWithTypes(json)─┐ -│ {"a":"42"} │ {} │ -│ {"b":"Hello"} │ {'b':'String'} │ -│ {"a":["1","2","3"],"c":"2020-01-01"} │ {'c':'Date'} │ -└──────────────────────────────────────┴─────────────────────────────────────┘ -``` - - -## JSONType {#JSONType} - -引入版本:v20.1 - -返回 JSON 值的类型。如果值不存在,则返回 `Null=0`。 - -**语法** - -```sql -JSONType(json[, indices_or_keys, ...]) -``` - -**参数** - -- `json` — 要解析的 JSON 字符串 [`String`](/sql-reference/data-types/string) -- `json[, indices_or_keys, ...]` — 零个或多个参数列表,每个参数可以是字符串或整数。[`String`](/sql-reference/data-types/string) 或 [`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) - -**返回值** - -以字符串形式返回 JSON 值的类型,如果值不存在则返回 `Null=0` [`Enum`](/sql-reference/data-types/enum) - -**示例** - -**使用示例** - -```sql title=查询 -SELECT JSONType('{"a": "hello", "b": [-100, 200.0, 300]}') = 'Object'; -SELECT JSONType('{"a": "hello", "b": [-100, 200.0, 300]}', 'a') = 'String'; -SELECT JSONType('{"a": "hello", "b": [-100, 200.0, 300]}', 'b') = 'Array'; -``` - -```response title=响应 -1 -1 -1 -``` - - -## JSON_EXISTS {#JSON_EXISTS} - -引入版本:v21.8 - -如果 JSON 文档中存在该值,则返回 `1`。 -如果该值不存在,则返回 `0`。 - -**语法** - -```sql -JSON_EXISTS(json, path) -``` - -**参数** - -- `json` — 有效的 JSON 字符串。[`String`](/sql-reference/data-types/string) -- `path` — 表示路径的字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -如果 JSON 文档中存在该值则返回 `1`,否则返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=查询 -SELECT JSON_EXISTS('{"hello":1}', '$.hello'); -SELECT JSON_EXISTS('{"hello":{"world":1}}', '$.hello.world'); -SELECT JSON_EXISTS('{"hello":["world"]}', '$.hello[*]'); -SELECT JSON_EXISTS('{"hello":["world"]}', '$.hello[0]'); -``` - -```response title=响应 -┌─JSON_EXISTS(⋯ '$.hello')─┐ -│ 1 │ -└──────────────────────────┘ -┌─JSON_EXISTS(⋯llo.world')─┐ -│ 1 │ -└──────────────────────────┘ -┌─JSON_EXISTS(⋯.hello[*]')─┐ -│ 1 │ -└──────────────────────────┘ -┌─JSON_EXISTS(⋯.hello[0]')─┐ -│ 1 │ -└──────────────────────────┘ -``` - - -## JSON_QUERY {#JSON_QUERY} - -引入版本:v21.8 - -解析 JSON 并将值提取为 JSON 数组或 JSON 对象。 -如果值不存在,则返回空字符串。 - -**语法** - -```sql -JSON_QUERY(json, path) -``` - -**参数** - -- `json` — 包含有效 JSON 的字符串。[`String`](/sql-reference/data-types/string) -- `path` — 表示路径的字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -以字符串形式返回提取的 JSON 数组或 JSON 对象,如果值不存在则返回空字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=查询 -SELECT JSON_QUERY('{"hello":"world"}', '$.hello'); -SELECT JSON_QUERY('{"array":[[0, 1, 2, 3, 4, 5], [0, -1, -2, -3, -4, -5]]}', '$.array[*][0 to 2, 4]'); -SELECT JSON_QUERY('{"hello":2}', '$.hello'); -SELECT toTypeName(JSON_QUERY('{"hello":2}', '$.hello')); -``` - -```response title=响应 -["world"] -[0, 1, 4, 0, -1, -4] -[2] -String -``` - - -## JSON_VALUE {#JSON_VALUE} - -引入版本:v21.11 - -解析 JSON 并将值提取为 JSON 标量。如果值不存在,默认返回空字符串。 - -此函数受以下设置控制: - -- 设置 `function_json_value_return_type_allow_nullable` = `true` 时,将返回 `NULL`。如果值为复杂类型(如:struct、array、map),默认返回空字符串。 -- 设置 `function_json_value_return_type_allow_complex` = `true` 时,将返回复杂值。 - -**语法** - -```sql -JSON_VALUE(json, path) -``` - -**参数** - -- `json` — 包含有效 JSON 的字符串。[`String`](/sql-reference/data-types/string) -- `path` — 表示路径的字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -以字符串形式返回提取的 JSON 标量,如果值不存在则返回空字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT JSON_VALUE('{"hello":"world"}', '$.hello'); -SELECT JSON_VALUE('{"array":[[0, 1, 2, 3, 4, 5], [0, -1, -2, -3, -4, -5]]}', '$.array[*][0 to 2, 4]'); -SELECT JSON_VALUE('{"hello":2}', '$.hello'); -SELECT JSON_VALUE('{"hello":"world"}', '$.b') settings function_json_value_return_type_allow_nullable=true; -``` - -```response title=Response -world -0 -2 -ᴺᵁᴸᴸ -``` - - -## dynamicElement {#dynamicElement} - -引入版本:v24.1 - -从 `Dynamic` 列中提取指定类型的列。 - -此函数用于从 Dynamic 列中提取特定类型的值。如果某行包含所请求类型的值,则返回该值。如果该行包含不同类型或 NULL,则对标量类型返回 NULL,对数组类型返回空数组。 - -**语法** - -```sql -dynamicElement(dynamic, type_name) -``` - -**参数** - -- `dynamic` — 要提取的 Dynamic 列。[`Dynamic`](/sql-reference/data-types/dynamic) -- `type_name` — 要提取的变体类型名称(例如,'String'、'Int64'、'Array(Int64)')。 - -**返回值** - -从 Dynamic 列中返回指定类型的值。对于不匹配的类型返回 NULL(对于数组类型返回空数组)。[`Any`](/sql-reference/data-types) - -**示例** - -**从 Dynamic 列中提取不同类型** - -```sql title=Query -CREATE TABLE test (d Dynamic) ENGINE = Memory; -INSERT INTO test VALUES (NULL), (42), ('Hello, World!'), ([1, 2, 3]); -SELECT d, dynamicType(d), dynamicElement(d, 'String'), dynamicElement(d, 'Int64'), dynamicElement(d, 'Array(Int64)'), dynamicElement(d, 'Date'), dynamicElement(d, 'Array(String)') FROM test -``` - -```response title=Response -┌─d─────────────┬─dynamicType(d)─┬─dynamicElement(d, 'String')─┬─dynamicElement(d, 'Int64')─┬─dynamicElement(d, 'Array(Int64)')─┬─dynamicElement(d, 'Date')─┬─dynamicElement(d, 'Array(String)')─┐ -│ ᴺᵁᴸᴸ │ None │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ [] │ ᴺᵁᴸᴸ │ [] │ -│ 42 │ Int64 │ ᴺᵁᴸᴸ │ 42 │ [] │ ᴺᵁᴸᴸ │ [] │ -│ Hello, World! │ String │ Hello, World! │ ᴺᵁᴸᴸ │ [] │ ᴺᵁᴸᴸ │ [] │ -│ [1,2,3] │ Array(Int64) │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ [1,2,3] │ ᴺᵁᴸᴸ │ [] │ -└───────────────┴────────────────┴─────────────────────────────┴────────────────────────────┴───────────────────────────────────┴───────────────────────────┴────────────────────────────────────┘ -``` - - -## dynamicType {#dynamicType} - -引入版本:v24.1 - -返回 `Dynamic` 列中每一行的变体类型名称。 - -对于包含 NULL 的行,该函数返回 'None'。对于所有其他行,返回存储在 Dynamic 列该行中的实际数据类型(例如 'Int64'、'String'、'Array(Int64)')。 - -**语法** - -```sql -dynamicType(dynamic) -``` - -**参数** - -- `dynamic` — 要检查的 Dynamic 列。[`Dynamic`](/sql-reference/data-types/dynamic) - -**返回值** - -返回每一行中存储值的类型名称,NULL 值返回 'None'。[`String`](/sql-reference/data-types/string) - -**示例** - -**检查 Dynamic 列中的类型** - -```sql title=查询 -CREATE TABLE test (d Dynamic) ENGINE = Memory; -INSERT INTO test VALUES (NULL), (42), ('Hello, World!'), ([1, 2, 3]); -SELECT d, dynamicType(d) FROM test; -``` - -```response title=响应 -┌─d─────────────┬─dynamicType(d)─┐ -│ ᴺᵁᴸᴸ │ None │ -│ 42 │ Int64 │ -│ Hello, World! │ String │ -│ [1,2,3] │ Array(Int64) │ -└───────────────┴────────────────┘ -``` - - -## isDynamicElementInSharedData {#isDynamicElementInSharedData} - -引入版本:v24.1 - -对于 Dynamic 列中以共享变体格式存储(而非作为独立子列存储)的行,返回 true。 - -当 Dynamic 列设置了 `max_types` 限制时,超出该限制的值会以共享二进制格式存储,而不会被分离为独立的类型化子列。此函数用于识别哪些行以共享格式存储。 - -**语法** - -```sql -isDynamicElementInSharedData(dynamic) -``` - -**参数** - -- `dynamic` — 要检查的 Dynamic 列。[`Dynamic`](/sql-reference/data-types/dynamic) - -**返回值** - -如果值以共享变体格式存储则返回 true,如果以独立子列存储或为 NULL 则返回 false。[`Bool`](/sql-reference/data-types/boolean) - -**示例** - -**检查具有 max_types 限制的 Dynamic 列的存储格式** - -```sql title=Query -CREATE TABLE test (d Dynamic(max_types=2)) ENGINE = Memory; -INSERT INTO test VALUES (NULL), (42), ('Hello, World!'), ([1, 2, 3]); -SELECT d, isDynamicElementInSharedData(d) FROM test; -``` - -```response title=Response -┌─d─────────────┬─isDynamicElementInSharedData(d)─┐ -│ ᴺᵁᴸᴸ │ false │ -│ 42 │ false │ -│ Hello, World! │ true │ -│ [1,2,3] │ true │ -└───────────────┴─────────────────────────────────┘ -``` - - -## isValidJSON {#isValidJSON} - -引入版本:v20.1 - -检查传入的字符串是否为有效 JSON。 - -**语法** - -```sql -isValidJSON(json) -``` - -**参数** - -- `json` — 待验证的 JSON 字符串 [`String`](/sql-reference/data-types/string) - -**返回值** - -如果字符串为有效 JSON 则返回 `1`,否则返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=查询 -SELECT isValidJSON('{"a": "hello", "b": [-100, 200.0, 300]}') = 1; -SELECT isValidJSON('not JSON') = 0; -``` - -```response title=响应 -1 -0 -``` - -**使用整数访问 JSON 数组和 JSON 对象** - -```sql title=查询 -SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', 0); -SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', 1); -SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', 2); -SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', -1); -SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', -2); -SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', 3); -``` - -```response title=响应 -0 -1 -1 -1 -1 -1 -0 -``` - - -## simpleJSONExtractBool {#simpleJSONExtractBool} - -引入版本:v21.4 - -从名为 `field_name` 的字段值中解析 true/false 值。 -返回结果为 `UInt8` 类型。 - -**语法** - -```sql -simpleJSONExtractBool(json, field_name) -``` - -**别名**:`visitParamExtractBool` - -**参数** - -- `json` — 要搜索字段的 JSON。[`String`](/sql-reference/data-types/string) -- `field_name` — 要搜索的字段名称。[`const String`](/sql-reference/data-types/string) - -**返回值** - -如果字段的值为 `true`,则返回 `1`,否则返回 `0`。这意味着该函数在以下情况下(包括但不限于)将返回 `0`: - -- 字段不存在。 -- 字段包含字符串形式的 `true`,例如:`{"field":"true"}`。 -- 字段包含数值 `1`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=查询 -CREATE TABLE jsons -( - `json` String -) -ENGINE = MergeTree -ORDER BY tuple(); - -INSERT INTO jsons VALUES ('{"foo":false,"bar":true}'); -INSERT INTO jsons VALUES ('{"foo":"true","qux":1}'); - -SELECT simpleJSONExtractBool(json, 'bar') FROM jsons ORDER BY json; -SELECT simpleJSONExtractBool(json, 'foo') FROM jsons ORDER BY json; -``` - -```response title=响应 -0 -1 -0 -0 -``` - - -## simpleJSONExtractFloat {#simpleJSONExtractFloat} - -引入版本:v21.4 - -从名为 `field_name` 的字段值中解析 `Float64`。 -如果 `field_name` 是字符串字段,则尝试从字符串开头解析数字。 -如果该字段不存在,或虽然存在但不包含数字,则返回 `0`。 - -**语法** - -```sql -simpleJSONExtractFloat(json, field_name) -``` - -**别名**:`visitParamExtractFloat` - -**参数** - -- `json` — 要搜索字段的 JSON。[`String`](/sql-reference/data-types/string) -- `field_name` — 要搜索的字段名称。[`const String`](/sql-reference/data-types/string) - -**返回值** - -如果字段存在且包含数字,则返回从该字段解析出的数字,否则返回 `0`。[`Float64`](/sql-reference/data-types/float) - -**示例** - -**使用示例** - -```sql title=查询 -CREATE TABLE jsons -( - `json` String -) -ENGINE = MergeTree -ORDER BY tuple(); - -INSERT INTO jsons VALUES ('{"foo":"-4e3"}'); -INSERT INTO jsons VALUES ('{"foo":-3.4}'); -INSERT INTO jsons VALUES ('{"foo":5}'); -INSERT INTO jsons VALUES ('{"foo":"not1number"}'); -INSERT INTO jsons VALUES ('{"baz":2}'); - -SELECT simpleJSONExtractFloat(json, 'foo') FROM jsons ORDER BY json; -``` - -```response title=响应 -0 --4000 -0 --3.4 -5 -``` - - -## simpleJSONExtractInt {#simpleJSONExtractInt} - -引入版本:v21.4 - -从名为 `field_name` 的字段值中解析 `Int64`。 -如果 `field_name` 是字符串字段,则尝试从字符串开头解析数字。 -如果该字段不存在,或者存在但不包含数字,则返回 `0`。 - -**语法** - -```sql -simpleJSONExtractInt(json, field_name) -``` - -**别名**:`visitParamExtractInt` - -**参数** - -- `json` — 要搜索字段的 JSON。[`String`](/sql-reference/data-types/string) -- `field_name` — 要搜索的字段名称。[`const String`](/sql-reference/data-types/string) - -**返回值** - -如果字段存在且包含数字,则返回从该字段解析出的数字,否则返回 `0`。[`Int64`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=查询 -CREATE TABLE jsons -( - `json` String -) -ENGINE = MergeTree -ORDER BY tuple(); - -INSERT INTO jsons VALUES ('{"foo":"-4e3"}'); -INSERT INTO jsons VALUES ('{"foo":-3.4}'); -INSERT INTO jsons VALUES ('{"foo":5}'); -INSERT INTO jsons VALUES ('{"foo":"not1number"}'); -INSERT INTO jsons VALUES ('{"baz":2}'); - -SELECT simpleJSONExtractInt(json, 'foo') FROM jsons ORDER BY json; -``` - -```response title=响应 -0 --4 -0 --3 -5 -``` - - -## simpleJSONExtractRaw {#simpleJSONExtractRaw} - -引入版本:v21.4 - -返回名为 `field_name` 的字段值,以 `String` 类型返回,包括分隔符。 - -**语法** - -```sql -simpleJSONExtractRaw(json, field_name) -``` - -**别名**:`visitParamExtractRaw` - -**参数** - -- `json` — 要搜索字段的 JSON。[`String`](/sql-reference/data-types/string) -- `field_name` — 要搜索的字段名称。[`const String`](/sql-reference/data-types/string) - -**返回值** - -如果字段存在,返回该字段的字符串值(包括分隔符),否则返回空字符串 [`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=查询 -CREATE TABLE jsons -( - `json` String -) -ENGINE = MergeTree -ORDER BY tuple(); - -INSERT INTO jsons VALUES ('{"foo":"-4e3"}'); -INSERT INTO jsons VALUES ('{"foo":-3.4}'); -INSERT INTO jsons VALUES ('{"foo":5}'); -INSERT INTO jsons VALUES ('{"foo":{"def":[1,2,3]}}'); -INSERT INTO jsons VALUES ('{"baz":2}'); - -SELECT simpleJSONExtractRaw(json, 'foo') FROM jsons ORDER BY json; -``` - -```response title=响应 -"-4e3" --3.4 -5 -{"def":[1,2,3]} -``` - - -## simpleJSONExtractString {#simpleJSONExtractString} - -引入版本:v21.4 - -从名为 `field_name` 的字段值中解析双引号内的 `String`。 - -**实现细节** - -目前不支持非基本多文种平面的 `\uXXXX\uYYYY` 格式码点(它们会被转换为 CESU-8 而非 UTF-8)。 - -**语法** - -```sql -simpleJSONExtractString(json, field_name) -``` - -**别名**:`visitParamExtractString` - -**参数** - -- `json` — 要在其中搜索字段的 JSON。[`String`](/sql-reference/data-types/string) -- `field_name` — 要搜索的字段名称。[`const String`](/sql-reference/data-types/string) - -**返回值** - -返回字段的未转义值(字符串类型),包括分隔符。如果字段不包含双引号字符串、反转义失败或字段不存在,则返回空字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=查询 -CREATE TABLE jsons -( - `json` String -) -ENGINE = MergeTree -ORDER BY tuple(); - -INSERT INTO jsons VALUES ('{"foo":"\\n\\u0000"}'); -INSERT INTO jsons VALUES ('{"foo":"\\u263"}'); -INSERT INTO jsons VALUES ('{"foo":"\\u263a"}'); -INSERT INTO jsons VALUES ('{"foo":"hello}'); - -SELECT simpleJSONExtractString(json, 'foo') FROM jsons ORDER BY json; -``` - -```response title=响应 -\n\0 - -☺ -``` - - -## simpleJSONExtractUInt {#simpleJSONExtractUInt} - -引入版本:v21.4 - -从名为 `field_name` 的字段值中解析 `UInt64`。 -如果 `field_name` 是字符串字段,则尝试从字符串开头解析数字。 -如果该字段不存在,或虽然存在但不包含数字,则返回 `0`。 - -**语法** - -```sql -simpleJSONExtractUInt(json, field_name) -``` - -**别名**: `visitParamExtractUInt` - -**参数** - -- `json` — 要搜索字段的 JSON。[`String`](/sql-reference/data-types/string) -- `field_name` — 要搜索的字段名称。[`const String`](/sql-reference/data-types/string) - -**返回值** - -如果字段存在且包含数字,则返回从该字段解析出的数字,否则返回 `0` [`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -CREATE TABLE jsons -( - `json` String -) -ENGINE = MergeTree -ORDER BY tuple(); - -INSERT INTO jsons VALUES ('{"foo":"4e3"}'); -INSERT INTO jsons VALUES ('{"foo":3.4}'); -INSERT INTO jsons VALUES ('{"foo":5}'); -INSERT INTO jsons VALUES ('{"foo":"not1number"}'); -INSERT INTO jsons VALUES ('{"baz":2}'); - -SELECT simpleJSONExtractUInt(json, 'foo') FROM jsons ORDER BY json; -``` - -```response title=Response -0 -4 -0 -3 -5 -``` - - -## simpleJSONHas {#simpleJSONHas} - -引入版本:v21.4 - -检查是否存在名为 `field_name` 的字段。 - -**语法** - -```sql -simpleJSONHas(json, field_name) -``` - -**别名**:`visitParamHas` - -**参数** - -- `json` — 要搜索字段的 JSON。[`String`](/sql-reference/data-types/string) -- `field_name` — 要搜索的字段名称。[`const String`](/sql-reference/data-types/string) - -**返回值** - -如果字段存在则返回 `1`,否则返回 `0` [`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -CREATE TABLE jsons -( - `json` String -) -ENGINE = MergeTree -ORDER BY tuple(); - -INSERT INTO jsons VALUES ('{"foo":"true","qux":1}'); - -SELECT simpleJSONHas(json, 'foo') FROM jsons; -SELECT simpleJSONHas(json, 'bar') FROM jsons; -``` - -```response title=Response -1 -0 -``` - - -## toJSONString {#toJSONString} - -引入版本:v21.7 - -将值序列化为 JSON 表示形式。支持各种数据类型和嵌套结构。 -默认情况下,64 位[整数](../data-types/int-uint.md)或更大的整数(如 `UInt64` 或 `Int128`)会用引号括起来。[output_format_json_quote_64bit_integers](/operations/settings/formats#output_format_json_quote_64bit_integers) 控制此行为。 -特殊值 `NaN` 和 `inf` 会被替换为 `null`。启用 [output_format_json_quote_denormals](/operations/settings/formats#output_format_json_quote_denormals) 设置可显示它们。 -在序列化 [Enum](../data-types/enum.md) 值时,该函数输出其名称。 - -另请参阅: - -- [output_format_json_quote_64bit_integers](/operations/settings/formats#output_format_json_quote_64bit_integers) -- [output_format_json_quote_denormals](/operations/settings/formats#output_format_json_quote_denormals) - -**语法** - -```sql -toJSONString(value) -``` - -**参数** - -- `value` — 要序列化的值。值可以是任何数据类型。[`Any`](/sql-reference/data-types) - -**返回值** - -返回值的 JSON 表示形式。[`String`](/sql-reference/data-types/string) - -**示例** - -**Map 序列化** - -```sql title=查询 -SELECT toJSONString(map('key1', 1, 'key2', 2)); -``` - -```response title=响应 -┌─toJSONString(map('key1', 1, 'key2', 2))─┐ -│ {"key1":1,"key2":2} │ -└─────────────────────────────────────────┘ -``` - -**特殊值** - -```sql title=查询 -SELECT toJSONString(tuple(1.25, NULL, NaN, +inf, -inf, [])) SETTINGS output_format_json_quote_denormals = 1; -``` +{/* + 下面这些标签内部的内容会在文档框架构建时被替换为 + 由 system.functions 生成的文档。请不要修改或移除这些标签。 + 参见:https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md + */ } -```response title=响应 -┌─toJSONString(tuple(1.25, NULL, NaN, plus(inf), minus(inf), []))─┐ -│ [1.25,null,"nan","inf","-inf",[]] │ -└─────────────────────────────────────────────────────────────────┘ -``` +{/*AUTOGENERATED_START*/ } - +{/*AUTOGENERATED_END*/ } diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/logical-functions.md b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/logical-functions.md index 485779ba99b..28069f61a9e 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/logical-functions.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/logical-functions.md @@ -1,213 +1,24 @@ --- -description: '逻辑函数参考文档' +description: '逻辑函数相关文档' sidebar_label: '逻辑' slug: /sql-reference/functions/logical-functions title: '逻辑函数' doc_type: 'reference' --- - - # 逻辑函数 -下列函数对任意数值类型的参数执行逻辑运算。 +下面的函数对任意数值类型参数执行逻辑运算。 它们返回 [`UInt8`](../data-types/int-uint.md) 类型的 `0` 或 `1`,在某些情况下返回 `NULL`。 -将值为零的参数视为 `false`,非零值视为 `true`。 +当参数为零时视为 `false`,非零值视为 `true`。 {/* - 下面标签中的内容会在文档框架构建时被替换为 - 从 system.functions 生成的文档。请不要修改或删除这些标签。 + 下面标签的内部内容会在文档框架构建期间, + 被从 system.functions 生成的文档所替换。请不要修改或删除这些标签。 参见:https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## and - -自 v1.1 版本引入 - -计算两个或多个值的逻辑与。 - -通过设置 [`short_circuit_function_evaluation`](/operations/settings/settings#short_circuit_function_evaluation) 控制是否启用短路求值。 -如果启用,仅当 `(val_1 AND val_2 AND ... AND val_{i-1})` 为 `true` 时才会对 `val_i` 求值。 - -例如,在启用短路求值时,执行查询 `SELECT and(number = 2, intDiv(1, number)) FROM numbers(5)` 不会抛出除零异常。 -将参数为零的值视为 `false`,非零值视为 `true`。 - -**Syntax** - -```sql -and(val1, val2[, ...]) -``` - -**参数** - -* `val1, val2[, ...]` — 至少包含两个值的列表。[`Nullable((U)Int*)`](/sql-reference/data-types/nullable) 或 [`Nullable(Float*)`](/sql-reference/data-types/nullable) - -**返回值** - -返回: - -* `0`,如果至少有一个参数求值为 `false` -* `NULL`,如果没有任何参数求值为 `false`,且至少有一个参数为 `NULL` -* `1`,否则\ - [`Nullable(UInt8)`](/sql-reference/data-types/nullable) - -**示例** - -**基本用法** - -```sql title=Query -SELECT and(0, 1, -2); -``` - -```response title=Response -0 -``` - -**包含 NULL** - -```sql title=Query -SELECT and(NULL, 1, 10, -2); -``` - -```response title=Response -ᴺᵁᴸᴸ -``` - - -## not - -引入版本:v1.1 - -对一个值进行逻辑取反运算。 -将参数为零视为 `false`,非零值视为 `true`。 - -**语法** - -```sql -not(val) -``` - -**参数** - -* `val` — 值。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) - -**返回值** - -返回: - -* 当 `val` 求值结果为 `false` 时,返回 `1` -* 当 `val` 求值结果为 `true` 时,返回 `0` -* 当 `val` 为 `NULL` 时,返回 `NULL`。 - [`Nullable(UInt8)`](/sql-reference/data-types/nullable) - -**示例** - -**基本用法** - -```sql title=Query -SELECT NOT(1); -``` - -```response title=Response -0 -``` - - -## or - -自 v1.1 起引入 - -计算两个或多个值的逻辑析取(逻辑“或”)。 - -设置 [`short_circuit_function_evaluation`](https://clickhouse.com/docs/operations/settings/settings#short_circuit_function_evaluation) 用于控制是否使用短路求值。 -如果启用该设置,仅当 `((NOT val_1) AND (NOT val_2) AND ... AND (NOT val_{i-1}))` 为 `true` 时才会计算 `val_i`。 - -例如,在启用短路求值时,执行查询 `SELECT or(number = 0, intDiv(1, number) != 0) FROM numbers(5)` 时不会抛出除以零异常。 -作为参数时,零被视为 `false`,非零值被视为 `true`。 - -**语法** - -```sql -or(val1, val2[, ...]) -``` - -**参数** - -* `val1, val2[, ...]` — 至少包含两个值的列表。类型为 [`Nullable((U)Int*)`](/sql-reference/data-types/nullable) 或 [`Nullable(Float*)`](/sql-reference/data-types/nullable) - -**返回值** - -返回: - -* `1`,如果至少有一个参数的求值结果为 `true` -* `0`,如果所有参数的求值结果都为 `false` -* `NULL`,如果所有参数的求值结果都为 `false` 且至少有一个参数为 `NULL`\ - [`Nullable(UInt8)`](/sql-reference/data-types/nullable) - -**示例** - -**基本用法** - -```sql title=Query -SELECT or(1, 0, 0, 2, NULL); -``` - -```response title=Response -1 -``` - -**包含 NULL** - -```sql title=Query -SELECT or(0, NULL); -``` - -```response title=Response -ᴺᵁᴸᴸ -``` - - -## xor - -引入于:v1.1 - -计算两个或多个值的逻辑异或。 -对于多于两个的输入值,函数先对前两个值执行 xor 运算,然后将结果与第三个值进行 xor 运算,依此类推。 -作为参数的零被视为 `false`,非零值被视为 `true`。 - -**语法** - -```sql -xor(val1, val2[, ...]) -``` - -**参数** - -* `val1, val2[, ...]` — 至少包含两个值的列表。[`Nullable((U)Int*)`](/sql-reference/data-types/nullable) 或 [`Nullable(Float*)`](/sql-reference/data-types/nullable) - -**返回值** - -返回: - -* `1`:对于两个参数的情况,当其中一个值求值为 `false` 且另一个不为 `false` 时 -* `0`:对于两个参数的情况,当两个值都求值为 `false` 或都为 `true` 时 -* `NULL`:当至少一个输入值为 `NULL` 时。 - [`Nullable(UInt8)`](/sql-reference/data-types/nullable) - -**示例** - -**基本用法** - -```sql title=Query -SELECT xor(0, 1, 1); -``` - -```response title=Response -0 -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/math-functions.md b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/math-functions.md index e0bababbd60..9adea512392 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/math-functions.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/math-functions.md @@ -6,1299 +6,14 @@ title: '数学函数' doc_type: 'reference' --- - - # 数学函数 {/* - 下方标签的内部内容会在文档框架构建期间,被 system.functions 生成的文档所替换。 - 请不要修改或删除这些标签。 - 请参见:https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md + 下面标签内部的内容会在文档框架构建时被 + 根据 system.functions 生成的文档所替换。请不要修改或删除这些标签。 + 参见:https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## acos - -自 v1.1 版本引入 - -返回参数的反余弦值。 - -**语法** - -```sql -acos(x) -``` - -**参数** - -* `x` — 要计算其反余弦的值,其类型可以是 [`(U)Int*`](/sql-reference/data-types/int-uint)、[`Float*`](/sql-reference/data-types/float) 或 [`Decimal*`](/sql-reference/data-types/decimal) - -**返回值** - -返回 x 的反余弦,类型为 [`Float*`](/sql-reference/data-types/float) - -**示例** - -**用法示例** - -```sql title=Query -SELECT acos(0.5); -``` - -```response title=Response -1.0471975511965979 -``` - - -## acosh - -自 v20.12 版本引入 - -返回反双曲余弦值。 - -**语法** - -```sql -反双双曲余弧函数 acosh(x) -``` - -**参数** - -* `x` — 角度的双曲余弦值。取值范围:`1 ≤ x < +∞`。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal*`](/sql-reference/data-types/decimal) - -**返回值** - -返回以弧度表示的角度。取值范围:`0 ≤ acosh(x) < +∞`。[`Float64`](/sql-reference/data-types/float) - -**示例** - -**使用示例** - -```sql title=Query -SELECT acosh(1) -``` - -```response title=Response -0 -``` - - -## asin - -自 v1.1 引入 - -计算给定参数的反正弦值。 -对于范围在 `[-1, 1]` 内的参数,返回值位于 `[-pi() / 2, pi() / 2]` 范围内。 - -**语法** - -```sql -asin(x) -``` - -**参数** - -* `x` — 要求反正弦的参数。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) - -**返回值** - -返回给定参数 `x` 的反正弦值 [`Float64`](/sql-reference/data-types/float) - -**示例** - -**反函数** - -```sql title=Query -SELECT asin(1.0) = pi() / 2, sin(asin(1)), asin(sin(1)) -``` - -```response title=Response -1 1 1 -``` - -**float32** - -```sql title=Query -SELECT toTypeName(asin(1.0::Float32)) -``` - -```response title=Response -Float64 -``` - -**NaN(非数字)** - -```sql title=Query -SELECT asin(1.1), asin(-2), asin(inf), asin(nan) -``` - -```response title=Response -nan nan nan nan -``` - - -## asinh - -引入版本:v20.12 - -返回反双曲正弦函数的值。 - -**语法** - -```sql -asinh(x) -``` - -**参数** - -* `x` — 某一角度的双曲正弦值。取值范围:`-∞ < x < +∞`。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal*`](/sql-reference/data-types/decimal) - -**返回值** - -返回以弧度表示的角度。取值范围:`-∞ < asinh(x) < +∞`。[`Float64`](/sql-reference/data-types/float) - -**示例** - -**基本用法** - -```sql title=Query -SELECT asinh(0) -``` - -```response title=Response -0 -``` - - -## atan - -自 v1.1 起引入 - -返回参数的反正切值。 - -**语法** - -```sql -atan(x) -``` - -**参数** - -* `x` — 要计算反正切的值。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal*`](/sql-reference/data-types/decimal) - -**返回值** - -返回 `x` 的反正切。[`Float*`](/sql-reference/data-types/float) - -**示例** - -**用法示例** - -```sql title=Query -SELECT atan(1); -``` - -```response title=Response -0.7853981633974483 -``` - - -## atan2 - -引入于:v20.12 - -返回欧几里得平面中,从正 x 轴到指向点 `(x, y) ≠ (0, 0)` 的射线的夹角,结果以弧度表示。 - -**语法** - -```sql -atan2(y, x) -``` - -**参数** - -* `y` — 射线经过的点的 y 坐标。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal*`](/sql-reference/data-types/decimal) -* `x` — 射线经过的点的 x 坐标。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal*`](/sql-reference/data-types/decimal) - -**返回值** - -返回一个弧度制角度 `θ`,满足 `-π < θ ≤ π`,类型为 [`Float64`](/sql-reference/data-types/float) - -**示例** - -**使用示例** - -```sql title=Query -SELECT atan2(1, 1) -``` - -```response title=Response -0.7853981633974483 -``` - - -## atanh - -引入版本:v20.12 - -返回反双曲正切函数的值。 - -**语法** - -```sql -atanh(x) -``` - -**参数** - -* `x` — 角度的双曲正切值。取值区间:-1 < x < 1。`(U)Int*`、`Float*` 或 `Decimal*` 类型。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal*`](/sql-reference/data-types/decimal) - -**返回值** - -返回以弧度表示的角度值。取值区间:-∞ < atanh(x) < +∞。[`Float64`](/sql-reference/data-types/float) - -**示例** - -**使用示例** - -```sql title=Query -SELECT atanh(0) -``` - -```response title=Response -0 -``` - - -## cbrt - -自 v1.1 引入 - -返回参数的立方根。 - -**语法** - -```sql -cbrt(x) -``` - -**参数** - -* `x` — 要计算其立方根的值。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal*`](/sql-reference/data-types/decimal) - -**返回值** - -返回 `x` 的立方根。[`Float*`](/sql-reference/data-types/float) - -**示例** - -**用法示例** - -```sql title=Query -SELECT cbrt(8); -``` - -```response title=Response -2 -``` - - -## cos - -自 v1.1 起引入 - -返回参数的余弦值。 - -**语法** - -```sql -cos(x) -``` - -**参数** - -* `x` — 以弧度表示的角度。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal*`](/sql-reference/data-types/decimal) - -**返回值** - -返回 `x` 的余弦值。[`Float*`](/sql-reference/data-types/float) - -**示例** - -**用法示例** - -```sql title=Query -SELECT cos(0); -``` - -```response title=Response -1 -``` - - -## cosh - -自 v20.12 版本引入 - -返回参数的双曲余弦值。 - -**语法** - -```sql -cosh(x) -``` - -**参数** - -* `x` — 以弧度表示的角度。取值范围:`-∞ < x < +∞`。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal*`](/sql-reference/data-types/decimal) - -**返回值** - -返回取值范围:`1 ≤ cosh(x) < +∞` [`Float64`](/sql-reference/data-types/float) - -**示例** - -**基础用法** - -```sql title=Query -SELECT cosh(0) -``` - -```response title=Response -1 -``` - - -## degrees - -引入版本:v22.2 - -将弧度值转换为角度(度)。 - -**语法** - -```sql -degrees(x) -``` - -**参数** - -* `x` — 以弧度为单位的输入。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal*`](/sql-reference/data-types/decimal) - -**返回值** - -返回将 `x` 转换为角度(度)的值。[`Float64`](/sql-reference/data-types/float) - -**示例** - -**基本用法** - -```sql title=Query -SELECT degrees(3.141592653589793) -``` - -```response title=Response -180 -``` - - -## e - -引入版本:v1.1 - -返回自然常数 (e)。 - -**语法** - -```sql -e() -``` - -**参数** - -* 无。 - -**返回值** - -返回欧拉常数,类型为 [`Float64`](/sql-reference/data-types/float)。 - -**示例** - -**使用示例** - -```sql title=Query -SELECT e(); -``` - -```response title=Response -2.718281828459045 -``` - - -## erf - -自 v1.1 起引入 - -如果 `x` 为非负数,则 `erf(x/(σ√2))` 表示:具有标准差 `σ` 的正态分布随机变量,其取值与期望值相差超过 `x` 的概率。 - -**语法** - -```sql -erf(x) -``` - -**参数** - -* `x` — 需要计算其误差函数值的数值。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal*`](/sql-reference/data-types/decimal) - -**返回值** - -返回误差函数的值 [`Float*`](/sql-reference/data-types/float) - -**示例** - -**三西格玛法则** - -```sql title=Query -SELECT erf(3 / sqrt(2)) -``` - -```response title=Response -┌─erf(divide(3, sqrt(2)))─┐ -│ 0.9973002039367398 │ -└─────────────────────────┘ -``` - - -## erfc - -在 v1.1 中引入 - -返回在 `x` 较大时仍能精确逼近 `1 - erf(x)` 的数值。 - -**语法** - -```sql -erfc(x) -``` - -**参数** - -* `x` — 要计算误差函数值的输入值。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal*`](/sql-reference/data-types/decimal) - -**返回值** - -返回余误差函数值 [`Float*`](/sql-reference/data-types/float) - -**示例** - -**用法示例** - -```sql title=Query -SELECT erfc(0); -``` - -```response title=Response -1 -``` - - -## exp - -引入于:v1.1 - -返回 `e` 的 `x` 次幂,其中 `x` 是传递给该函数的参数。 - -**语法** - -```sql -exp(x) -``` - -**参数** - -* `x` — 指数。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal*`](/sql-reference/data-types/decimal) - -**返回值** - -返回值为 `e^x`,类型为 [`Float*`](/sql-reference/data-types/float) - -**示例** - -**基本用法** - -```sql title=Query -SELECT round(exp(-1), 4) -``` - -```response title=Response -┌─round(exp(-1), 4)─┐ -│ 0.3679 │ -└───────────────────┘ -``` - - -## exp10 - -引入版本:v1.1 - -返回 10 的给定参数次幂。 - -**语法** - -```sql -exp10(x) -``` - -**参数** - -* `x` — 指数。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal*`](/sql-reference/data-types/decimal) - -**返回值** - -返回 10^x,类型为 [`Float*`](/sql-reference/data-types/float) - -**示例** - -**用法示例** - -```sql title=Query -SELECT exp10(2); -``` - -```response title=Response -100 -``` - - -## exp2 - -引入版本:v1.1 - -返回以 2 为底、给定参数为指数的幂。 - -**语法** - -```sql -exp2(x) -``` - -**参数** - -* `x` — 指数。[`(U)Int*`](/sql-reference/data-types/int-uint)、[`Float*`](/sql-reference/data-types/float) 或 [`Decimal*`](/sql-reference/data-types/decimal) - -**返回值** - -返回 2^x,类型为 [`Float*`](/sql-reference/data-types/float) - -**示例** - -**用法示例** - -```sql title=Query -SELECT exp2(3); -``` - -```response title=Response -8 -``` - - -## factorial - -自 v22.11 起引入 - -计算一个整数值的阶乘。 -0 的阶乘为 1。同样,`factorial()` 函数对任何负值也返回 `1`。 -输入参数的最大正值为 `20`,取值为 `21` 或更大时会抛出异常。 - -**语法** - -```sql -阶乘(n) -``` - -**参数** - -* `n` — 需要计算阶乘的整数值。最大值为 20。[`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) - -**返回值** - -返回输入值的阶乘,类型为 UInt64。当输入为 0 或任何负数时,返回 1。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -factorial(10) -``` - -```response title=Response -3628800 -``` - - -## hypot - -引入版本:v20.12 - -返回直角三角形斜边的长度。 -hypot 函数可以避免在对非常大或非常小的数进行平方运算时出现的问题。 - -**语法** - -```sql -hypot(x, y) -``` - -**参数** - -* `x` — 直角三角形的第一条直角边。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal*`](/sql-reference/data-types/decimal) -* `y` — 直角三角形的第二条直角边。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal*`](/sql-reference/data-types/decimal) - -**返回值** - -返回直角三角形斜边的长度。[`Float64`](/sql-reference/data-types/float) - -**示例** - -**基本用法** - -```sql title=Query -SELECT hypot(1, 1) -``` - -```response title=Response -1.4142135623730951 -``` - - -## intExp10 - -引入版本:v1.1 - -类似于 [exp10](#exp10),但返回一个 `UInt64` 类型的数值。 - -**语法** - -```sql -intExp10(x) -``` - -**参数** - -* `x` — 指数。[`Int*`](/sql-reference/data-types/int-uint) 或 [`UInt*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) - -**返回值** - -返回 10^x。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT intExp10(2); -``` - -```response title=Response -100 -``` - - -## intExp2 - -引入自:v1.1 - -与 [exp2](#exp2) 类似,但返回一个 `UInt64` 类型的数值。 - -**语法** - -```sql -intExp2(x) -``` - -**参数** - -* `x` — 指数。[`Int*`](/sql-reference/data-types/int-uint) 或 [`UInt*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) - -**返回值** - -返回 2 的 x 次方。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT intExp2(3); -``` - -```response title=Response -8 -``` - - -## lgamma - -自 v1.1 版本引入 - -返回伽马函数的对数。 - -**语法** - -```sql -lgamma(x) -``` - -**参数** - -* `x` — 用于计算其伽马函数对数的数值。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal*`](/sql-reference/data-types/decimal) - -**返回值** - -返回 `x` 的伽马函数的对数值。[`Float*`](/sql-reference/data-types/float) - -**示例** - -**使用示例** - -```sql title=Query -SELECT lgamma(5); -``` - -```response title=Response -3.1780538303479458 -``` - - -## log - -自 v1.1 版本引入 - -返回参数的自然对数。 - -**语法** - -```sql -log(x) -``` - -**别名**: `ln` - -**参数** - -* `x` — 要计算自然对数的数值。[`(U)Int*`](/sql-reference/data-types/int-uint)、[`Float*`](/sql-reference/data-types/float) 或 [`Decimal*`](/sql-reference/data-types/decimal) - -**返回值** - -返回 `x` 的自然对数。[`Float*`](/sql-reference/data-types/float) - -**示例** - -**用法示例** - -```sql title=Query -SELECT log(10); -``` - -```response title=Response -2.302585092994046 -``` - - -## log10 - -自 v1.1 起可用。 - -返回参数的十进制对数。 - -**语法** - -```sql -log10(x) -``` - -**参数** - -* `x` — 要计算其常用对数的数值。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal*`](/sql-reference/data-types/decimal) - -**返回值** - -返回 `x` 的常用对数。[`Float*`](/sql-reference/data-types/float) - -**示例** - -**用法示例** - -```sql title=Query -SELECT log10(100); -``` - -```response title=Response -2 -``` - - -## log1p - -自 v20.12 引入 - -计算 log(1+x)。 -对于较小的 `x` 值,log1p(x) 比直接计算 log(1+x) 更精确。 - -**语法** - -```sql -log1p(x) -``` - -**参数** - -* `x` — 取值范围:`-1 < x < +∞`。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal*`](/sql-reference/data-types/decimal) - -**返回值** - -返回值取自区间:-∞ < log1p(x) < +∞,类型为 [`Float64`](/sql-reference/data-types/float) - -**示例** - -**使用示例** - -```sql title=Query -SELECT log1p(0) -``` - -```response title=Response -0 -``` - - -## log2 - -首次引入于:v1.1 - -返回其参数的二进制对数。 - -**语法** - -```sql -log2(x) -``` - -**参数** - -* `x` — 需要计算二进制对数的数值。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal*`](/sql-reference/data-types/decimal) - -**返回值** - -返回 `x` 的二进制对数。[`Float*`](/sql-reference/data-types/float) - -**示例** - -**用法示例** - -```sql title=Query -SELECT log2(8); -``` - -```response title=Response -3 -``` - - -## pi - -自 v1.1 起引入 - -返回数学常数 π。 - -**语法** - -```sql -pi() -``` - -**参数** - -* 无。 - -**返回值** - -返回圆周率 π,类型为 [`Float64`](/sql-reference/data-types/float) - -**示例** - -**使用示例** - -```sql title=Query -SELECT pi(); -``` - -```response title=Response -3.141592653589793 -``` - - -## pow - -自 v1.1 引入 - -返回 x 的 y 次幂。 - -**语法** - -```sql -pow(x, y) -``` - -**别名**: `power` - -**参数** - -* `x` — 底数。[`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal*`](/sql-reference/data-types/decimal) -* `y` — 指数。[`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal*`](/sql-reference/data-types/decimal) - -**返回值** - -返回 x^y,类型为 [`Float64`](/sql-reference/data-types/float) - -**示例** - -**用法示例** - -```sql title=Query -SELECT pow(2, 3); -``` - -```response title=Response -8 -``` - - -## radians - -引入版本:v22.2 - -将角度转换为弧度。 - -**语法** - -```sql -弧度(x) -``` - -**参数** - -* `x` — 以度为单位的输入。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal*`](/sql-reference/data-types/decimal) - -**返回值** - -返回以弧度为单位的值,类型为 [`Float64`](/sql-reference/data-types/float) - -**示例** - -**用法示例** - -```sql title=Query -SELECT radians(180) -``` - -```response title=Response -3.141592653589793 -``` - - -## sign - -自 v21.2 版本引入。 - -返回实数的符号。 - -**语法** - -```sql -符号(x) -``` - -**参数** - -* `x` — 取值范围为 -∞ 到 +∞。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Decimal*`](/sql-reference/data-types/decimal) 或 [`Float*`](/sql-reference/data-types/float) - -**返回值** - -返回值类型为 [`Int8`](/sql-reference/data-types/int-uint):`x < 0` 返回 `-1`,`x = 0` 返回 `0`,`x > 0` 返回 `1`。 - -**示例** - -**零的符号** - -```sql title=Query -SELECT sign(0) -``` - -```response title=Response -0 -``` - -**正号** - -```sql title=Query -SELECT sign(1) -``` - -```response title=Response -1 -``` - -**负号** - -```sql title=Query -SELECT sign(-1) -``` - -```response title=Response --1 -``` - - -## sin - -自版本 v 引入。 - -返回参数的正弦值。 - -**语法** - -```sql -sin(x) -``` - -**参数** - -* `x` — 要计算正弦值的数值。类型为 [`(U)Int*`](/sql-reference/data-types/int-uint)、[`Float*`](/sql-reference/data-types/float) 或 [`Decimal*`](/sql-reference/data-types/decimal) - -**返回值** - -返回 x 的正弦值。 - -**示例** - -**基本示例** - -```sql title=Query -SELECT sin(1.23) -``` - -```response title=Response -0.9424888019316975 -``` - - -## sinh - -引入于:v20.12 - -返回双曲正弦值。 - -**语法** - -```sql -sinh(x) -``` - -**参数** - -* `x` — 以弧度表示的角度。取值范围:-∞ < x < +∞。类型为 [`(U)Int*`](/sql-reference/data-types/int-uint)、[`Float*`](/sql-reference/data-types/float) 或 [`Decimal*`](/sql-reference/data-types/decimal) - -**返回值** - -返回值取值范围:-∞ < sinh(x) < +∞,类型为 [`Float64`](/sql-reference/data-types/float) - -**示例** - -**使用示例** - -```sql title=Query -SELECT sinh(0) -``` - -```response title=Response -0 -``` - - -## sqrt - -自 v1.1 起引入 - -返回参数的平方根。 - -**语法** - -```sql -sqrt(x) -``` - -**参数** - -* `x` — 要求平方根的数值。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal*`](/sql-reference/data-types/decimal) - -**返回值** - -返回 x 的平方根 [`Float*`](/sql-reference/data-types/float) - -**示例** - -**用法示例** - -```sql title=Query -SELECT sqrt(16); -``` - -```response title=Response -4 -``` - - -## tan - -自 v1.1 起引入 - -返回参数的正切值。 - -**语法** - -```sql -tan(x) -``` - -**参数** - -* `x` — 弧度制角度。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal*`](/sql-reference/data-types/decimal) - -**返回值** - -返回 `x` 的正切值。[`Float*`](/sql-reference/data-types/float) - -**示例** - -**用法示例** - -```sql title=Query -SELECT tan(0); -``` - -```response title=Response -0 -``` - - -## tanh - -首次引入于:v20.1 - -返回双曲正切函数值。 - -**语法** - -```sql -tanh(x) -``` - -**参数** - -* `x` — 以弧度表示的角度。取值范围:-∞ < x < +∞。类型为 [`(U)Int*`](/sql-reference/data-types/int-uint)、[`Float*`](/sql-reference/data-types/float) 或 [`Decimal*`](/sql-reference/data-types/decimal)。 - -**返回值** - -返回值范围:-1 < tanh(x) < 1,类型为 [`Float*`](/sql-reference/data-types/float)。 - -**示例** - -**使用示例** - -```sql title=Query -SELECT tanh(0) -``` - -```response title=Response -0 -``` - - -## tgamma - -引入版本:v1.1 - -返回伽马函数值。 - -**语法** - -```sql -tgamma(x) -``` - -**参数** - -* `x` — 要计算伽马函数的数值。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal*`](/sql-reference/data-types/decimal) - -**返回值** - -返回 `x` 的伽马函数值,类型为 [`Float*`](/sql-reference/data-types/float) - -**示例** - -**使用示例** - -```sql title=Query -SELECT tgamma(5); -``` - -```response title=Response -24 -``` - - -## widthBucket - -引入于:v23.3 - -在一个具有 `count` 个等宽桶、覆盖范围从 `low` 到 `high` 的直方图中,返回参数 `operand` 所落入的桶的编号。如果 `operand` 小于 `low`,则返回 0;如果 `operand` 大于或等于 `high`,则返回 `count`+1。 -同时还提供了一个不区分大小写的别名 `WIDTH_BUCKET`,用于与其他数据库保持兼容性。 - -**语法** - -```sql -widthBucket(operand, low, high, count) -``` - -**别名**: `width_bucket` - -**参数** - -* `operand` — 需要确定其所属桶的值。[`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) -* `low` — 直方图范围的下界。[`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) -* `high` — 直方图范围的上界。[`(U)Int8/16/32/64`](/sql-reference/data-types/int-uint) -* `count` — 等宽桶的数量。不能为零。[`UInt8/16/32/64`](/sql-reference/data-types/int-uint) - -**返回值** - -返回桶编号,类型为整数。若 `operand` < `low`,返回 0;若 `operand` >= `high`,返回 `count` + 1。[`UInt8/16/32/64`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -widthBucket(10.15, -8.6, 23, 18) -``` - -```response title=Response -11 -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/nlp-functions.md b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/nlp-functions.md index b6bac9a7d59..84e69a25dfd 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/nlp-functions.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/nlp-functions.md @@ -4,7 +4,7 @@ sidebar_label: 'NLP' slug: /sql-reference/functions/nlp-functions title: '自然语言处理(NLP)函数' doc_type: 'reference' -keywords: ['NLP', 'Natural Language Processing', '自然语言处理'] +keywords: ['NLP', '自然语言处理'] --- import ExperimentalBadge from '@theme/badges/ExperimentalBadge'; @@ -18,339 +18,16 @@ import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; :::warning -这是一个仍在开发中的实验性特性,目前尚未准备好供广泛使用。在未来的版本中,它可能会以不可预期且不向后兼容的方式发生变化。请将 `allow_experimental_nlp_functions` 设为 1 以启用该功能。 +这是仍在开发中的实验性功能,尚未准备好广泛使用。在未来的版本中,它可能会以不可预测且向后不兼容的方式发生变化。请将 `allow_experimental_nlp_functions` 设置为 `1` 以启用该功能。 ::: {/* - 以下标签的内部内容会在文档框架构建期间 - 被从 system.functions 生成的文档所替换。请不要修改或删除这些标签。 + 下面这些标签内部的内容会在构建文档框架时, + 被 system.functions 生成的文档替换。 + 请不要修改或删除这些标签。 参见:https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## detectCharset - -自 v22.2 起引入 - -检测非 UTF-8 编码输入字符串的字符集。 - -**语法** - -```sql -detectCharset(s) -``` - -**参数** - -* `s` — 要分析的文本。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回一个表示检测到的字符集编码的字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**基本用法** - -```sql title=Query -SELECT detectCharset('我会待几天。') -``` - -```response title=Response -WINDOWS-1252 -``` - - -## detectLanguage - -引入版本:v22.2 - -检测 UTF-8 编码输入字符串的语言。 -该函数使用 [CLD2 库](https://github.com/CLD2Owners/cld2) 进行检测,并返回两个字母的 ISO 语言代码。 - -输入越长,语言检测的精度越高。 - -**语法** - -```sql -detectLanguage(s) -``` - -**参数** - -* `text_to_be_analyzed` — 要分析的文本。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回检测到的语言的 2 个字母的 ISO 代码。其他可能的结果:`un` = 未知,无法检测到任何语言;`other` = 检测到的语言不具有 2 个字母的代码。[`String`](/sql-reference/data-types/string) - -**示例** - -**混合语言文本** - -```sql title=Query -SELECT detectLanguage('我觉得我永远无法像母语者那样说法语。有志者事竟成。') -``` - -```response title=Response -fr -``` - - -## detectLanguageMixed - -引入版本:v22.2 - -与 [`detectLanguage`](#detectLanguage) 函数类似,但 `detectLanguageMixed` 返回一个 `Map`,其中键为 2 字母语言代码,值为该语言在文本中所占的百分比。 - -**语法** - -```sql -detectLanguageMixed(s) -``` - -**参数** - -* `s` — 要分析的文本 [`String`](/sql-reference/data-types/string) - -**返回值** - -返回一个 `Map`,键是 2 个字母的 ISO 语言代码,对应的值是该语言在文本中所占的百分比 [`Map(String, Float32)`](/sql-reference/data-types/map) - -**示例** - -**混合语言** - -```sql title=Query -SELECT detectLanguageMixed('二兎を追う者は一兎をも得ず二兎を追う者は一兎をも得ず A vaincre sans peril, on triomphe sans gloire.') -``` - -```response title=Response -{'ja':0.62,'fr':0.36} -``` - - -## detectLanguageUnknown - -自 v22.2 起引入 - -与 [`detectLanguage`](#detectLanguage) 函数类似,不同之处在于 detectLanguageUnknown 函数可处理非 UTF-8 编码的字符串。 -当字符集为 UTF-16 或 UTF-32 时,建议优先使用此版本。 - -**语法** - -```sql -detectLanguageUnknown('s') -``` - -**参数** - -* `s` — 要分析的文本。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回检测到的语言的 2 个字母的 ISO 代码。其他可能的结果:`un` = 未知,无法检测到任何语言;`other` = 检测到的语言没有对应的 2 字母代码。[`String`](/sql-reference/data-types/string) - -**示例** - -**基本用法** - -```sql title=Query -SELECT detectLanguageUnknown('Ich bleibe für ein paar Tage.') -``` - -```response title=Response -de -``` - - -## detectProgrammingLanguage - -自 v22.2 起提供 - -根据给定的源代码片段确定其编程语言。 - -**语法** - -```sql -detectProgrammingLanguage('source_code') -``` - -**参数** - -* `source_code` — 要分析的源代码的字符串形式。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回表示编程语言的 [`String`](/sql-reference/data-types/string) - -**示例** - -**C++ 代码检测** - -```sql title=Query -SELECT detectProgrammingLanguage('#include ') -``` - -```response title=Response -C++ -``` - - -## detectTonality - -引入于:v22.2 - -用于判断提供的文本数据的情感倾向。 - -:::note 限制 -该函数目前存在如下限制:它使用内置的情感词典,并且仅适用于俄语。 -::: - -**语法** - -```sql -detectTonality(s) -``` - -**参数** - -* `s` — 要分析的文本。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回文本中各个单词情感值的平均值 [`Float32`](/sql-reference/data-types/float) - -**示例** - -**俄语情感分析** - -```sql title=Query -SELECT - detectTonality('Шарик - хороший пёс'), - detectTonality('Шарик - пёс'), - detectTonality('Шарик - плохой пёс') -``` - -```response title=Response -0.44445, 0, -0.3 -``` - - -## lemmatize - -引入于:v21.9 - -对给定单词执行词形还原(lemmatization)。 -此函数运行时需要依赖词典,可以从 [GitHub](https://github.com/vpodpecan/lemmagen3/tree/master/src/lemmagen3/models) 获取。关于如何从本地文件加载词典的更多详情,请参阅页面 [“Defining Dictionaries”](/sql-reference/dictionaries#local-file)。 - -**语法** - -```sql -lemmatize(lang, word) -``` - -**参数** - -* `lang` — 应用规则所针对的语言。[`String`](/sql-reference/data-types/string) -* `word` — 需要进行词形还原的小写单词。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回该单词词形还原后的形式 [`String`](/sql-reference/data-types/string) - -**示例** - -**英文词形还原** - -```sql title=Query -SELECT lemmatize('en', 'wolves') -``` - -```response title=Response -wolf -``` - - -## stem - -引入于:v21.9 - -对给定单词执行词干提取。 - -**语法** - -```sql -stem(lang, word) -``` - -**参数** - -* `lang` — 应用规则所基于的语言。使用两个字母的 ISO 639-1 代码。[`String`](/sql-reference/data-types/string) -* `word` — 需要进行词干提取的小写单词。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回该单词的词干形式 [`String`](/sql-reference/data-types/string) - -**示例** - -**英文词干提取** - -```sql title=Query -SELECT arrayMap(x -> stem('en', x), -['I', 'think', 'it', 'is', 'a', 'blessing', 'in', 'disguise']) AS res -``` - -```response title=Response -['I','think','it','is','a','bless','in','disguis'] -``` - - -## synonyms - -自 v21.9 引入 - -查找给定单词的同义词。 - -有两种类型的同义词扩展: - -* `plain` -* `wordnet` - -使用 `plain` 扩展类型时,需要提供一个纯文本文件的路径,其中每一行对应一个同义词集。 -该行中的单词必须以空格或制表符分隔。 - -使用 `wordnet` 扩展类型时,需要提供一个包含 WordNet 同义词库的目录路径。 -该词库必须包含 WordNet 词义索引。 - -**语法** - -```sql -synonyms(ext_name, word) -``` - -**参数** - -* `ext_name` — 要在其中执行搜索的扩展的名称。[`String`](/sql-reference/data-types/string) -* `word` — 要在扩展中搜索的词语。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回指定词语的同义词数组。[`Array(String)`](/sql-reference/data-types/array) - -**示例** - -**查找同义词** - -```sql title=Query -SELECT synonyms('list', 'important') -``` - -```response title=Response -['important','big','critical','crucial'] -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/numeric-indexed-vector-functions.md b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/numeric-indexed-vector-functions.md index 3163e9b41e6..4ee0735dca7 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/numeric-indexed-vector-functions.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/numeric-indexed-vector-functions.md @@ -1,47 +1,39 @@ --- -description: 'NumericIndexedVector 及其相关函数文档' +description: 'NumericIndexedVector 及其函数的文档' sidebar_label: 'NumericIndexedVector' slug: /sql-reference/functions/numeric-indexed-vector-functions title: 'NumericIndexedVector 函数' doc_type: 'reference' --- - - # NumericIndexedVector -NumericIndexedVector 是一种抽象数据结构,用于封装向量并实现向量聚合和逐元素运算。其存储方式为位切片索引(Bit-Sliced Index)。关于其理论基础和使用场景,请参考论文 [Large-Scale Metric Computation in Online Controlled Experiment Platform](https://arxiv.org/pdf/2405.08411)。 - - +NumericIndexedVector 是一种抽象数据结构,它封装了向量,并实现向量聚合和按元素运算。Bit-Sliced Index 是其存储方式。关于理论基础和使用场景,请参考论文 [Large-Scale Metric Computation in Online Controlled Experiment Platform](https://arxiv.org/pdf/2405.08411)。 ## BSI {#bit-sliced-index} -在 BSI(Bit-Sliced Index,比特切片索引)存储方式中,数据首先以 [Bit-Sliced Index](https://dl.acm.org/doi/abs/10.1145/253260.253268) 形式存储,然后再使用 [Roaring Bitmap](https://github.com/RoaringBitmap/RoaringBitmap) 进行压缩。聚合运算和逐点运算直接在压缩数据上进行,这可以显著提升存储和查询效率。 +在 BSI(Bit-Sliced Index,位切片索引)存储方式中,数据首先以 [Bit-Sliced Index](https://dl.acm.org/doi/abs/10.1145/253260.253268) 形式存储,然后再使用 [Roaring Bitmap](https://github.com/RoaringBitmap/RoaringBitmap) 进行压缩。聚合运算和逐点运算可以直接在压缩数据上执行,从而显著提升存储与查询效率。 -一个向量包含索引及其对应的值。以下是该数据结构在 BSI 存储模式下的一些特性和约束: +一个向量包含索引及其对应的值。以下是该数据结构在 BSI 存储模式下的一些特性与约束: -- 索引类型可以是 `UInt8`、`UInt16` 或 `UInt32` 之一。**注意:** 鉴于 Roaring Bitmap 在 64 位实现上的性能,BSI 格式不支持 `UInt64`/`Int64`。 -- 值类型可以是 `Int8`、`Int16`、`Int32`、`Int64`、`UInt8`、`UInt16`、`UInt32`、`UInt64`、`Float32` 或 `Float64` 之一。**注意:** 值类型不会自动扩展。例如,如果你使用 `UInt8` 作为值类型,那么任何超过 `UInt8` 容量的求和都会发生溢出,而不会提升为更高类型;同样,对整数的运算会产生整数结果(例如,除法不会自动转换为浮点结果)。因此,提前规划和设计值类型非常重要。在实际场景中,常用的是浮点类型(`Float32`/`Float64`)。 +- 索引类型可以是 `UInt8`、`UInt16` 或 `UInt32` 之一。**注意:** 考虑到 Roaring Bitmap 的 64 位实现性能,BSI 格式不支持 `UInt64`/`Int64`。 +- 值类型可以是 `Int8`、`Int16`、`Int32`、`Int64`、`UInt8`、`UInt16`、`UInt32`、`UInt64`、`Float32` 或 `Float64` 之一。**注意:** 值类型不会自动提升。例如,如果你使用 `UInt8` 作为值类型,任何超过 `UInt8` 容量的求和结果都会发生溢出,而不会自动提升为更高精度类型;同样,整数运算将产生整数结果(例如除法不会自动转换为浮点结果)。因此,提前规划和设计值类型非常重要。在实际场景中,通常使用浮点类型(`Float32`/`Float64`)。 - 只有索引类型和值类型都相同的两个向量才能进行运算。 -- 底层存储使用 Bit-Sliced Index,其中索引用位图存储。Roaring Bitmap 用作位图的具体实现。最佳实践是尽可能将索引集中在少数几个 Roaring Bitmap 容器中,以最大化压缩率和查询性能。 -- Bit-Sliced Index 机制会将值转换为二进制。对于浮点类型,转换采用定点数表示,这可能会带来精度损失。可以通过自定义小数部分所使用的比特数来调整精度,默认是 24 位,这在大多数场景下已经足够。在使用带有 `-State` 的聚合函数 groupNumericIndexedVector 构造 NumericIndexedVector 时,可以自定义整数位和小数位的位数。 -- 索引有三种情况:非零值、零值和不存在。在 NumericIndexedVector 中,仅存储非零值和零值。此外,在两个 NumericIndexedVector 之间进行逐点运算时,不存在的索引值会被视为 0。在除法场景中,当除数为零时,结果为零。 - - +- 底层存储使用 Bit-Sliced Index,其中位图用于存储索引。Roaring Bitmap 被用作位图的具体实现。最佳实践是尽可能将索引集中到少数几个 Roaring Bitmap 容器中,以最大化压缩率和查询性能。 +- Bit-Sliced Index 机制会将值转换为二进制。对于浮点类型,会使用定点表示进行转换,这可能导致精度损失。可以通过自定义用于小数部分的位数来调整精度,默认是 24 位,这在大多数场景下已经足够。在使用带有 `-State` 的聚合函数 groupNumericIndexedVector 构建 NumericIndexedVector 时,可以自定义整数位数和小数位数。 +- 索引的取值情况有三种:非零值、零值和不存在。在 NumericIndexedVector 中,只会存储非零值和零值。此外,在两个 NumericIndexedVector 之间进行逐点运算时,不存在的索引的值会被视为 0。在除法场景下,当除数为 0 时结果为 0。 ## 创建 numericIndexedVector 对象 {#create-numeric-indexed-vector-object} -有两种方式可以创建这种结构:一种是使用带有 `-State` 的聚合函数 `groupNumericIndexedVector`。 -你可以添加后缀 `-if` 来接受一个额外的条件。 +有两种方式可以创建这种结构:一种是使用聚合函数 `groupNumericIndexedVector` 的 `-State` 变体。 +你可以添加后缀 `-if` 以接收一个额外的条件。 聚合函数只会处理满足该条件的行。 -另一种方式是使用 `numericIndexedVectorBuild` 从一个 map 构建该结构。 -`groupNumericIndexedVectorState` 函数允许通过参数自定义整数位和小数位的位数,而 `numericIndexedVectorBuild` 则不支持这一点。 - - +另一种方式是使用 `numericIndexedVectorBuild` 从一个 map 构建它。 +`groupNumericIndexedVectorState` 函数允许通过参数自定义整数位和小数位的数量,而 `numericIndexedVectorBuild` 则不支持。 ## groupNumericIndexedVector -从两个数据列构造一个 NumericIndexedVector,并以 `Float64` 类型返回所有值的和。如果添加后缀 `State`,则返回一个 NumericIndexedVector 对象。 +从两列数据构造一个 NumericIndexedVector,并以 `Float64` 类型返回所有值之和。如果添加后缀 `State`,则返回一个 NumericIndexedVector 对象。 **语法** @@ -52,10 +44,10 @@ groupNumericIndexedVectorState(type, integer_bit_num, fraction_bit_num)(col1, co **参数** -* `type`:字符串类型,可选。指定存储格式。目前仅支持 `'BSI'`。 -* `integer_bit_num`:`UInt32`,可选。在 `'BSI'` 存储格式下生效,该参数表示用于整数部分的位数。当索引类型为整数类型时,默认值为存储该索引所用的位数。例如,当索引类型为 UInt16 时,默认的 `integer_bit_num` 为 16。对于 Float32 和 Float64 索引类型,`integer_bit_num` 的默认值为 40,因此可表示的数据整数部分范围为 `[-2^39, 2^39 - 1]`。合法范围为 `[0, 64]`。 -* `fraction_bit_num`:`UInt32`,可选。在 `'BSI'` 存储格式下生效,该参数表示用于小数部分的位数。当值类型为整数时,默认值为 0;当值类型为 Float32 或 Float64 时,默认值为 24。合法范围为 `[0, 24]`。 -* 还存在一个约束条件:integer_bit_num + fraction_bit_num 的合法范围为 [0, 64]。 +* `type`:字符串,可选。指定存储格式。目前仅支持 `'BSI'`。 +* `integer_bit_num`:`UInt32`,可选。在 `'BSI'` 存储格式下生效,该参数表示整数部分使用的位数。当索引类型为整数类型时,默认值对应于存储该索引类型所需的位数。例如,如果索引类型为 UInt16,则默认的 `integer_bit_num` 为 16。对于 Float32 和 Float64 索引类型,`integer_bit_num` 的默认值为 40,因此可表示的数据整数部分范围为 `[-2^39, 2^39 - 1]`。合法范围为 `[0, 64]`。 +* `fraction_bit_num`:`UInt32`,可选。在 `'BSI'` 存储格式下生效,该参数表示小数部分使用的位数。当值类型为整数时,默认值为 0;当值类型为 Float32 或 Float64 时,默认值为 24。合法范围为 `[0, 24]`。 +* 另有约束:`integer_bit_num + fraction_bit_num` 的有效范围为 `[0, 64]`。 * `col1`:索引列。支持的类型:`UInt8`/`UInt16`/`UInt32`/`Int8`/`Int16`/`Int32`。 * `col2`:数值列。支持的类型:`Int8`/`Int16`/`Int32`/`Int64`/`UInt8`/`UInt16`/`UInt32`/`UInt64`/`Float32`/`Float64`。 @@ -68,7 +60,7 @@ groupNumericIndexedVectorState(type, integer_bit_num, fraction_bit_num)(col1, co 测试数据: ```text -UserID 游戏时长 +用户ID 游戏时长 1 10 2 20 3 30 @@ -99,642 +91,14 @@ SELECT groupNumericIndexedVectorStateIf('BSI', 32, 0)(UserID, PlayTime, day = '2 ``` :::note -以下文档是从 `system.functions` 系统表生成的。 +以下文档内容由 `system.functions` 系统表生成。 ::: {/* - 下面的标签用于根据 system 数据库中的系统表生成文档,请勿删除。 + 下面的标签用于从 system 表生成文档,不应删除。 更多详细信息请参见 https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## numericIndexedVectorAllValueSum - -自 v25.7 起引入 - -返回 numericIndexedVector 中所有值的总和。 - -**语法** - -```sql -numericIndexedVectorAllValueSum(v) -``` - -**参数** - -* `v` — [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**返回值** - -返回总和。[`Float64`](/sql-reference/data-types/float) - -**示例** - -**用法示例** - -```sql title=Query -SELECT numericIndexedVectorAllValueSum(numericIndexedVectorBuild(mapFromArrays([1, 2, 3], [10, 20, 30]))) AS res; -``` - -```response title=Response -┌─res─┐ -│ 60 │ -└─────┘ -``` - - -## numericIndexedVectorBuild - -引入版本:v25.7 - -从 `map` 创建一个 `NumericIndexedVector`。`map` 的键表示向量的索引,`map` 的值表示向量的元素值。 - -**语法** - -```sql -numericIndexedVectorBuild(map) -``` - -**参数** - -* `map` — 从索引到值的映射。[`Map`](/sql-reference/data-types/map) - -**返回值** - -返回一个 NumericIndexedVector 对象。[`AggregateFunction`](/sql-reference/data-types/aggregatefunction) - -**示例** - -**使用示例** - -```sql title=Query -SELECT numericIndexedVectorBuild(mapFromArrays([1, 2, 3], [10, 20, 30])) AS res, toTypeName(res); -``` - -```response title=Response -┌─res─┬─toTypeName(res)────────────────────────────────────────────┐ -│ │ AggregateFunction(groupNumericIndexedVector, UInt8, UInt8) │ -└─────┴────────────────────────────────────────────────────────────┘ -``` - - -## numericIndexedVectorCardinality - -首次引入于:v25.7 - -返回 `numericIndexedVector` 的基数(唯一索引数量)。 - -**语法** - -```sql -numericIndexedVectorCardinality(v) -``` - -**参数** - -* `v` — [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**返回值** - -返回唯一索引的数量,类型为 [`UInt64`](/sql-reference/data-types/int-uint)。 - -**示例** - -**用法示例** - -```sql title=Query -SELECT numericIndexedVectorCardinality(numericIndexedVectorBuild(mapFromArrays([1, 2, 3], [10, 20, 30]))) AS res; -``` - -```response title=Response -┌─res─┐ -│ 3 │ -└─────┘ -``` - - -## numericIndexedVectorGetValue - -自 v25.7 版本引入 - -从 `numericIndexedVector` 中检索指定索引对应的值。 - -**语法** - -```sql -numericIndexedVectorGetValue(v, i) -``` - -**参数** - -* `v` — [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) -* `i` — 要读取其对应值的索引。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -一个数值,其类型与 NumericIndexedVector 的值类型相同。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) - -**示例** - -**使用示例** - -```sql title=Query -SELECT numericIndexedVectorGetValue(numericIndexedVectorBuild(mapFromArrays([1, 2, 3], [10, 20, 30])), 3) AS res; -``` - -```response title=Response -┌─res─┐ -│ 30 │ -└─────┘ -``` - - -## numericIndexedVectorPointwiseAdd - -引入版本:v25.7 - -对一个 `numericIndexedVector` 与另一个 `numericIndexedVector` 或数值常量执行逐元素加法运算。 - -**语法** - -```sql -numericIndexedVector逐点相加(v1, v2) -``` - -**参数** - -* `v1` — [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) -* `v2` — 一个数值型常量或 `numericIndexedVector` 对象。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**返回值** - -返回一个新的 `numericIndexedVector` 对象。[`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**示例** - -**用法示例** - -```sql title=Query -WITH - numericIndexedVectorBuild(mapFromArrays([1, 2, 3], arrayMap(x -> toInt32(x), [10, 20, 30]))) AS vec1, - numericIndexedVectorBuild(mapFromArrays([2, 3, 4], arrayMap(x -> toInt32(x), [10, 20, 30]))) AS vec2 -SELECT - numericIndexedVectorToMap(numericIndexedVectorPointwiseAdd(vec1, vec2)) AS res1, - numericIndexedVectorToMap(numericIndexedVectorPointwiseAdd(vec1, 2)) AS res2; -``` - -```response title=Response -┌─res1──────────────────┬─res2─────────────┐ -│ {1:10,2:30,3:50,4:30} │ {1:12,2:22,3:32} │ -└───────────────────────┴──────────────────┘ -``` - - -## numericIndexedVectorPointwiseDivide - -引入于:v25.7 - -对一个 `numericIndexedVector` 与另一个 `numericIndexedVector` 或数值常量执行逐元素除法运算。 - -**语法** - -```sql -numericIndexedVectorPointwiseDivide(v1, v2) -``` - -**参数** - -* `v1` — [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) -* `v2` — 一个数值常量或 numericIndexedVector 对象。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**返回值** - -返回一个新的 numericIndexedVector 对象。[`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**示例** - -**用法示例** - -```sql title=Query -with - numericIndexedVectorBuild(mapFromArrays([1, 2, 3], arrayMap(x -> toFloat64(x), [10, 20, 30]))) as vec1, - numericIndexedVectorBuild(mapFromArrays([2, 3, 4], arrayMap(x -> toFloat64(x), [10, 20, 30]))) as vec2 -SELECT - numericIndexedVectorToMap(numericIndexedVectorPointwiseDivide(vec1, vec2)) AS res1, - numericIndexedVectorToMap(numericIndexedVectorPointwiseDivide(vec1, 2)) AS res2; -``` - -```response title=Response -┌─res1────────┬─res2────────────┐ -│ {2:2,3:1.5} │ {1:5,2:10,3:15} │ -└─────────────┴─────────────────┘ -``` - - -## numericIndexedVectorPointwiseEqual - -引入于:v25.7 - -对一个 `numericIndexedVector` 与另一个 `numericIndexedVector` 或一个数值常量进行逐元素比较。 -结果是一个 `numericIndexedVector`,其中包含值相等位置的索引,所有对应的值都被设为 1。 - -**语法** - -```sql -numericIndexedVectorPointwiseEqual(v1, v2) -``` - -**参数** - -* `v1` — [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) -* `v2` — 一个数值常量或 `numericIndexedVector` 对象。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**返回值** - -返回一个新的 [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) 对象。 - -**示例** - -*** - -```sql title=Query -with - numericIndexedVectorBuild(mapFromArrays([1, 2, 3], arrayMap(x -> toFloat64(x), [10, 20, 30]))) as vec1, - numericIndexedVectorBuild(mapFromArrays([2, 3, 4], arrayMap(x -> toFloat64(x), [20, 20, 30]))) as vec2 -SELECT - numericIndexedVectorToMap(numericIndexedVectorPointwiseEqual(vec1, vec2)) AS res1, - numericIndexedVectorToMap(numericIndexedVectorPointwiseEqual(vec1, 20)) AS res2; -``` - -```response title=Response -┌─res1──┬─res2──┐ -│ {2:1} │ {2:1} │ -└───────┴───────┘ -``` - - -## numericIndexedVectorPointwiseGreater - -引入版本:v25.7 - -对一个 numericIndexedVector 与另一个 numericIndexedVector 或数值常量进行逐元素比较。 -结果是一个 numericIndexedVector,其中包含第一个向量的值大于第二个向量的值的索引位置,且所有这些位置上的值均被设置为 1。 - -**语法** - -```sql -numericIndexedVectorPointwiseGreater(v1, v2) -``` - -**参数** - -* `v1` — [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) -* `v2` — 数值常量或 `numericIndexedVector` 对象。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**返回值** - -返回一个新的 `numericIndexedVector` 对象。[`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**示例** - -**使用示例** - -```sql title=Query -with - numericIndexedVectorBuild(mapFromArrays([1, 2, 3], arrayMap(x -> toFloat64(x), [10, 20, 50]))) as vec1, - numericIndexedVectorBuild(mapFromArrays([2, 3, 4], arrayMap(x -> toFloat64(x), [20, 40, 30]))) as vec2 -SELECT - numericIndexedVectorToMap(numericIndexedVectorPointwiseGreater(vec1, vec2)) AS res1, - numericIndexedVectorToMap(numericIndexedVectorPointwiseGreater(vec1, 20)) AS res2; -``` - -```response title=Response -┌─res1──────┬─res2──┐ -│ {1:1,3:1} │ {3:1} │ -└───────────┴───────┘ -``` - - -## numericIndexedVectorPointwiseGreaterEqual - -引入版本:v25.7 - -对一个 `numericIndexedVector` 与另一个 `numericIndexedVector` 或一个数值常量进行逐元素比较。 -结果是一个 `numericIndexedVector`,其中包含第一个向量中值大于或等于第二个向量中对应值的索引,且这些索引上的所有值都被设置为 1。 - -**语法** - -```sql -numericIndexedVectorPointwiseGreaterEqual(v1, v2) -``` - -**参数** - -* `v1` — [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) -* `v2` — 数值常量或 `numericIndexedVector` 对象。类型为 [`(U)Int*`](/sql-reference/data-types/int-uint)、[`Float*`](/sql-reference/data-types/float) 或 [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**返回值** - -返回一个新的 `numericIndexedVector` 对象。[`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**示例** - -**使用示例** - -```sql title=Query -with - numericIndexedVectorBuild(mapFromArrays([1, 2, 3], arrayMap(x -> toFloat64(x), [10, 20, 50]))) as vec1, - numericIndexedVectorBuild(mapFromArrays([2, 3, 4], arrayMap(x -> toFloat64(x), [20, 40, 30]))) as vec2 -SELECT - numericIndexedVectorToMap(numericIndexedVectorPointwiseGreaterEqual(vec1, vec2)) AS res1, - numericIndexedVectorToMap(numericIndexedVectorPointwiseGreaterEqual(vec1, 20)) AS res2; -``` - -```response title=Response -┌─res1──────────┬─res2──────┐ -│ {1:1,2:1,3:1} │ {2:1,3:1} │ -└───────────────┴───────────┘ -``` - - -## numericIndexedVectorPointwiseLess - -引入于:v25.7 - -对一个 `numericIndexedVector` 与另一个 `numericIndexedVector` 或一个数值常量进行逐元素比较。 -结果是一个 `numericIndexedVector`,包含第一个向量中那些值小于第二个向量对应值的索引位置,并将这些索引位置上的值全部设为 1。 - -**语法** - -```sql -numericIndexedVectorPointwiseLess(v1, v2) -``` - -**参数** - -* `v1` — [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) -* `v2` — 一个数值型常量或 numericIndexedVector 对象。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**返回值** - -返回一个新的 numericIndexedVector 对象。[`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**示例** - -**使用示例** - -```sql title=Query -with - numericIndexedVectorBuild(mapFromArrays([1, 2, 3], arrayMap(x -> toFloat64(x), [10, 20, 30]))) as vec1, - numericIndexedVectorBuild(mapFromArrays([2, 3, 4], arrayMap(x -> toFloat64(x), [20, 40, 30]))) as vec2 -SELECT - numericIndexedVectorToMap(numericIndexedVectorPointwiseLess(vec1, vec2)) AS res1, - numericIndexedVectorToMap(numericIndexedVectorPointwiseLess(vec1, 20)) AS res2; -``` - -```response title=Response -┌─res1──────┬─res2──┐ -│ {3:1,4:1} │ {1:1} │ -└───────────┴───────┘ -``` - - -## numericIndexedVectorPointwiseLessEqual - -引入版本:v25.7 - -对一个 `numericIndexedVector` 与另一个 `numericIndexedVector` 或数值常量执行逐元素比较。 -结果是一个 `numericIndexedVector`,其中包含第一个向量中值小于或等于第二个向量值的位置索引,且这些位置上的值均被设为 1。 - -**语法** - -```sql -numericIndexedVectorPointwiseLessEqual(v1, v2) -``` - -**参数** - -* `v1` — [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) -* `v2` — 一个数值常量([`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float))或一个 [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) 对象 - -**返回值** - -返回一个新的 [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) 对象。 - -**示例** - -**使用示例** - -```sql title=Query -with - numericIndexedVectorBuild(mapFromArrays([1, 2, 3], arrayMap(x -> toFloat64(x), [10, 20, 30]))) 作为 vec1, - numericIndexedVectorBuild(mapFromArrays([2, 3, 4], arrayMap(x -> toFloat64(x), [20, 40, 30]))) 作为 vec2 -SELECT - numericIndexedVectorToMap(numericIndexedVectorPointwiseLessEqual(vec1, vec2)) AS res1, - numericIndexedVectorToMap(numericIndexedVectorPointwiseLessEqual(vec1, 20)) AS res2; -``` - -```response title=Response -┌─res1──────────┬─res2──────┐ -│ {2:1,3:1,4:1} │ {1:1,2:1} │ -└───────────────┴───────────┘ -``` - - -## numericIndexedVectorPointwiseMultiply - -在 v25.7 中引入 - -对一个 numericIndexedVector 与另一个 numericIndexedVector 或数值常量执行逐元素乘法。 - -**语法** - -```sql -numericIndexedVectorPointwiseMultiply(v1, v2) -``` - -**参数** - -* `v1` — [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) -* `v2` — 一个数值常量或 `numericIndexedVector` 对象。类型为 [`(U)Int*`](/sql-reference/data-types/int-uint)、[`Float*`](/sql-reference/data-types/float) 或 [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**返回值** - -返回一个新的 `numericIndexedVector` 对象。[`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**示例** - -*** - -```sql title=Query -with - numericIndexedVectorBuild(mapFromArrays([1, 2, 3], arrayMap(x -> toInt32(x), [10, 20, 30]))) as vec1, - numericIndexedVectorBuild(mapFromArrays([2, 3, 4], arrayMap(x -> toInt32(x), [10, 20, 30]))) as vec2 -SELECT - numericIndexedVectorToMap(numericIndexedVectorPointwiseMultiply(vec1, vec2)) AS res1, - numericIndexedVectorToMap(numericIndexedVectorPointwiseMultiply(vec1, 2)) AS res2; -``` - -```response title=Response -┌─res1──────────┬─res2─────────────┐ -│ {2:200,3:600} │ {1:20,2:40,3:60} │ -└───────────────┴──────────────────┘ -``` - - -## numericIndexedVectorPointwiseNotEqual - -引入版本:v25.7 - -对一个 `numericIndexedVector` 与另一个 `numericIndexedVector` 或一个数值常量执行逐元素比较。 -返回一个 `numericIndexedVector`,其中包含值不相等的索引,且所有对应的值都被设置为 1。 - -**语法** - -```sql -numericIndexedVectorPointwiseNotEqual(v1, v2) -``` - -**参数** - -* `v1` — [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) -* `v2` — 一个数值常量或 `numericIndexedVector` 对象。类型为 [`(U)Int*`](/sql-reference/data-types/int-uint)、[`Float*`](/sql-reference/data-types/float) 或 [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**返回值** - -返回一个新的 `numericIndexedVector` 对象。[`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**示例** - -**用法示例** - -```sql title=Query -with - numericIndexedVectorBuild(mapFromArrays([1, 2, 3], arrayMap(x -> toFloat64(x), [10, 20, 30]))) as vec1, - numericIndexedVectorBuild(mapFromArrays([2, 3, 4], arrayMap(x -> toFloat64(x), [20, 20, 30]))) as vec2 -SELECT - numericIndexedVectorToMap(numericIndexedVectorPointwiseNotEqual(vec1, vec2)) AS res1, - numericIndexedVectorToMap(numericIndexedVectorPointwiseNotEqual(vec1, 20)) AS res2; -``` - -```response title=Response -┌─res1──────────┬─res2──────┐ -│ {1:1,3:1,4:1} │ {1:1,3:1} │ -└───────────────┴───────────┘ -``` - - -## numericIndexedVectorPointwiseSubtract - -自 v25.7 起引入 - -对一个 numericIndexedVector 与另一个 numericIndexedVector 或一个数值常量执行按元素减法运算。 - -**语法** - -```sql -numericIndexedVectorPointwiseSubtract(v1, v2) -``` - -**参数** - -* `v1` — [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) -* `v2` — 数值型常量或 `numericIndexedVector` 对象。[`(U)Int*`](/sql-reference/data-types/int-uint)、[`Float*`](/sql-reference/data-types/float) 或 [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**返回值** - -返回新的 `numericIndexedVector` 对象。[`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**示例** - -**使用示例** - -```sql title=Query -WITH - numericIndexedVectorBuild(mapFromArrays([1, 2, 3], arrayMap(x -> toInt32(x), [10, 20, 30]))) AS vec1, - numericIndexedVectorBuild(mapFromArrays([2, 3, 4], arrayMap(x -> toInt32(x), [10, 20, 30]))) AS vec2 -SELECT - numericIndexedVectorToMap(numericIndexedVectorPointwiseSubtract(vec1, vec2)) AS res1, - numericIndexedVectorToMap(numericIndexedVectorPointwiseSubtract(vec1, 2)) AS res2; -``` - -```response title=Response -┌─res1───────────────────┬─res2────────────┐ -│ {1:10,2:10,3:10,4:-30} │ {1:8,2:18,3:28} │ -└────────────────────────┴─────────────────┘ -``` - - -## numericIndexedVectorShortDebugString - -自 v25.7 引入 - -以 JSON 格式返回 numericIndexedVector 的内部信息。 -此函数主要用于调试。 - -**语法** - -```sql -numericIndexedVectorShortDebugString(v) -``` - -**参数** - -* `v` — [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**返回值** - -返回一个包含调试信息的 JSON 字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT numericIndexedVectorShortDebugString(numericIndexedVectorBuild(mapFromArrays([1, 2, 3], [10, 20, 30]))) AS res\G; -``` - -```response title=Response -第 1 行: -────── -res: {"vector_type":"BSI","index_type":"char8_t","value_type":"char8_t","integer_bit_num":8,"fraction_bit_num":0,"zero_indexes_info":{"cardinality":"0"},"non_zero_indexes_info":{"total_cardinality":"3","all_value_sum":60,"number_of_bitmaps":"8","bitmap_info":{"cardinality":{"0":"0","1":"2","2":"2","3":"2","4":"2","5":"0","6":"0","7":"0"}}}} -``` - - -## numericIndexedVectorToMap - -自 v25.7 引入 - -将 `numericIndexedVector` 转换为 `map`。 - -**语法** - -```sql -numericIndexedVectorToMap(v) -``` - -**参数** - -* `v` — [`numericIndexedVector`](/sql-reference/functions/numeric-indexed-vector-functions#create-numeric-indexed-vector-object) - -**返回值** - -返回一个包含索引-值对的映射(`Map`)。[`Map`](/sql-reference/data-types/map) - -**示例** - -**使用示例** - -```sql title=Query -SELECT numericIndexedVectorToMap(numericIndexedVectorBuild(mapFromArrays([1, 2, 3], [10, 20, 30]))) AS res; -``` - -```response title=Response -┌─res──────────────┐ -│ {1:10,2:20,3:30} │ -└──────────────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/other-functions.md b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/other-functions.md index dec8481e5b9..f815527a528 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/other-functions.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/other-functions.md @@ -1,5 +1,5 @@ --- -description: '"其他" 类函数的文档' +description: '“其他”函数分类文档' sidebar_label: '其他' slug: /sql-reference/functions/other-functions title: '其他函数' @@ -14,5457 +14,15 @@ import DeprecatedBadge from '@theme/badges/DeprecatedBadge'; # 其他函数 :::note -以下函数文档是根据 `system.functions` 系统表生成的。 +以下函数文档由 `system.functions` 系统表生成。 ::: {/* - 下面标签中的内容会在文档框架构建时被替换为 - 由 system.functions 生成的文档。请不要修改或删除这些标签。 + 下面标签内的内容会在文档框架构建时被替换为 + 由 system.functions 自动生成的文档。请不要修改或删除这些标签。 参见:https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## FQDN - -自 v20.1 起引入 - -返回 ClickHouse 服务器的完全限定域名(FQDN)。 - -**语法** - -```sql -fqdn() -``` - -**别名**: `fullHostName` - -**参数** - -* 无。 - -**返回值** - -返回 ClickHouse 服务器的完全限定域名。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT fqdn() -``` - -```response title=Response -┌─FQDN()──────────────────────────┐ -│ clickhouse.us-east-2.internal │ -└─────────────────────────────────┘ -``` - - -## MACNumToString - -引入版本:v1.1 - -将一个 [`UInt64`](/sql-reference/data-types/int-uint) 数值按大端格式解释为 MAC 地址。 -以字符串形式返回对应的 MAC 地址,格式为 `AA:BB:CC:DD:EE:FF`(使用冒号分隔的十六进制数)。 - -**语法** - -```sql -MACNumToString(num) -``` - -**参数** - -* `num` — UInt64 整数。[`UInt64`](/sql-reference/data-types/int-uint) - -**返回值** - -返回格式为 AA:BB:CC:DD:EE:FF 的 MAC 地址。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT MACNumToString(149809441867716) AS mac_address; -``` - -```response title=Response -┌─mac_address───────┐ -│ 88:00:11:22:33:44 │ -└───────────────────┘ -``` - - -## MACStringToNum - -自 v1.1 起引入 - -`MACNumToString` 的反函数。如果 MAC 地址格式无效,则返回 0。 - -**语法** - -```sql -MACStringToNum(s) -``` - -**参数** - -* `s` — MAC 地址字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回一个 UInt64 类型的数值。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT MACStringToNum('01:02:03:04:05:06') AS mac_numeric; -``` - -```response title=Response -1108152157446 -``` - - -## MACStringToOUI - -自 v1.1 引入 - -给定一个格式为 AA:BB:CC:DD:EE:FF(以冒号分隔的十六进制数)的 MAC 地址,返回其前三个八位组组成的 UInt64 整数值。如果 MAC 地址格式无效,则返回 0。 - -**语法** - -```sql -MACStringToOUI(s) -``` - -**参数** - -* `s` — MAC 地址字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -前三个八位字节,作为 UInt64 类型的数值。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT MACStringToOUI('00:50:56:12:34:56') AS oui; -``` - -```response title=Response -20566 -``` - - -## __filterContains - -在 v25.10 中引入 - -用于 JOIN 的运行时过滤的特殊函数。 - -**语法** - -```sql -__filterContains(filter_name, key) -``` - -**参数** - -* `filter_name` — 运行时过滤器的内部名称,由 BuildRuntimeFilterStep 构建。[`String`](/sql-reference/data-types/string) -* `key` — 任意类型的值,用于检查其是否存在于过滤器中 - -**返回值** - -如果在过滤器中找到了该键,则返回 True。[`Bool`](/sql-reference/data-types/boolean) - -**示例** - -**示例** - -```sql title=Query -此函数不应在用户查询中使用。在优化过程中,它可能会被添加到查询计划中。 -``` - -```response title=Response -``` - - -## __patchPartitionID - -引入自:v25.5 - -内部函数。接收一个分片名称以及补丁分片列名的哈希值。返回该补丁分片所属分区的名称。参数必须是一个合法的分片名称,否则行为未定义。 - -**语法** - -```sql -``` - -**参数** - -* 无。 - -**返回值** - -**示例** - - -## authenticatedUser - -自 v25.11 起引入 - -如果通过 `EXECUTE AS` 命令切换了会话用户,该函数会返回最初用于认证并创建此会话的原始用户名。 -别名:authUser() - -**语法** - -```sql -authenticatedUser() -``` - -**别名**: `authUser` - -**参数** - -* 无。 - -**返回值** - -已通过身份验证的用户名称。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -EXECUTE as u1; - SELECT currentUser(), authenticatedUser(); -``` - -```response title=Response -┌─currentUser()─┬─authenticatedUser()─┐ -│ u1 │ default │ -└───────────────┴─────────────────────┘ -``` - - -## bar - -自 v1.1 起引入 - -构建条形图。 -绘制一条带状区域,其宽度与 (x - min) 成正比,当 x = max 时宽度为 width 个字符。 -该带状区域的绘制精度可达到字符宽度的八分之一。 - -**语法** - -```sql -bar(x, min, max[, width]) -``` - -**参数** - -* `x` — 要显示的数值大小。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) -* `min` — 最小值。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) -* `max` — 最大值。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) -* `width` — 可选。条形图在字符上的宽度。默认值为 `80`。[`const (U)Int*`](/sql-reference/data-types/int-uint) 或 [`const Float*`](/sql-reference/data-types/float) 或 [`const Decimal`](/sql-reference/data-types/decimal) - -**返回值** - -返回一个基于 Unicode 的条形图字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT -toHour(EventTime) AS h, -count() AS c, -bar(c, 0, 600000, 20) AS bar -FROM test.hits -GROUP BY h -ORDER BY h ASC -``` - -```response title=Response -┌──h─┬──────c─┬─bar────────────────┐ -│ 0 │ 292907 │ █████████▋ │ -│ 1 │ 180563 │ ██████ │ -│ 2 │ 114861 │ ███▋ │ -│ 3 │ 85069 │ ██▋ │ -│ 4 │ 68543 │ ██▎ │ -│ 5 │ 78116 │ ██▌ │ -│ 6 │ 113474 │ ███▋ │ -│ 7 │ 170678 │ █████▋ │ -│ 8 │ 278380 │ █████████▎ │ -│ 9 │ 391053 │ █████████████ │ -│ 10 │ 457681 │ ███████████████▎ │ -│ 11 │ 493667 │ ████████████████▍ │ -│ 12 │ 509641 │ ████████████████▊ │ -│ 13 │ 522947 │ █████████████████▍ │ -│ 14 │ 539954 │ █████████████████▊ │ -│ 15 │ 528460 │ █████████████████▌ │ -│ 16 │ 539201 │ █████████████████▊ │ -│ 17 │ 523539 │ █████████████████▍ │ -│ 18 │ 506467 │ ████████████████▊ │ -│ 19 │ 520915 │ █████████████████▎ │ -│ 20 │ 521665 │ █████████████████▍ │ -│ 21 │ 542078 │ ██████████████████ │ -│ 22 │ 493642 │ ████████████████▍ │ -│ 23 │ 400397 │ █████████████▎ │ -└────┴────────┴────────────────────┘ -``` - - -## blockNumber - -自 v1.1 引入 - -返回包含该行的[块](../../development/architecture.md#block)的单调递增序列号。 -返回的块编号按尽力而为的原则进行更新,因此可能并非完全准确。 - -**语法** - -```sql -blockNumber() -``` - -**参数** - -* 无。 - -**返回值** - -该行所在数据块的序列号。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**基本用法** - -```sql title=Query -SELECT blockNumber() -FROM -( - SELECT * - FROM system.numbers - LIMIT 10 -) SETTINGS max_block_size = 2 -``` - -```response title=Response -┌─blockNumber()─┐ -│ 7 │ -│ 7 │ -└───────────────┘ -┌─blockNumber()─┐ -│ 8 │ -│ 8 │ -└───────────────┘ -┌─blockNumber()─┐ -│ 9 │ -│ 9 │ -└───────────────┘ -┌─blockNumber()─┐ -│ 10 │ -│ 10 │ -└───────────────┘ -┌─blockNumber()─┐ -│ 11 │ -│ 11 │ -└───────────────┘ -``` - - -## blockSerializedSize - -自 v20.3 起引入 - -返回磁盘上一个值块的未压缩大小(以字节为单位)。 - -**语法** - -```sql -blockSerializedSize(x1[, x2[, ...]]) -``` - -**参数** - -* `x1[, x2, ...]` — 任意数量的值,用于获取其所在数据块在未压缩情况下的大小。[`Any`](/sql-reference/data-types) - -**返回值** - -返回在不压缩的情况下,包含这些值的数据块写入磁盘时所占用的字节数。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT blockSerializedSize(maxState(1)) AS x; -``` - -```response title=Response -┌─x─┐ -│ 2 │ -└───┘ -``` - - -## blockSize - -引入版本:v1.1 - -在 ClickHouse 中,查询是按[数据块](/development/architecture#block)(chunk)进行处理的。 -该函数返回其所在数据块的大小(行数)。 - -**语法** - -```sql -blockSize() -``` - -**参数** - -* 无。 - -**返回值** - -返回当前数据块中的行数。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT blockSize() -FROM system.numbers LIMIT 5 -``` - -```response title=Response -┌─blockSize()─┐ -│ 5 │ -│ 5 │ -│ 5 │ -│ 5 │ -│ 5 │ -└─────────────┘ -``` - - -## byteSize - -自 v21.1 起引入 - -返回其参数在内存中未压缩字节大小的估计值。 -对于 `String` 参数,该函数返回字符串长度 + 8(长度)。 -如果函数有多个参数,则会累加它们的字节大小。 - -**语法** - -```sql -byteSize(arg1[, arg2, ...]) -``` - -**参数** - -* `arg1[, arg2, ...]` — 任意数据类型的值,用于估算其未压缩状态下的字节大小。[`Any`](/sql-reference/data-types) - -**返回值** - -返回对参数在内存中所占字节大小的估算值。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT byteSize('string') -``` - -```response title=Response -┌─byteSize('string')─┐ -│ 15 │ -└────────────────────┘ -``` - -**多个参数** - -```sql title=Query -SELECT byteSize(NULL, 1, 0.3, '') -``` - -```response title=Response -┌─byteSize(NULL, 1, 0.3, '')─┐ -│ 19 │ -└────────────────────────────┘ -``` - - -## catboostEvaluate - -引入版本:v22.9 - -用于评估外部 CatBoost 模型。[CatBoost](https://catboost.ai) 是由 Yandex 为机器学习开发的开源梯度提升库。 -接受 CatBoost 模型的路径以及模型参数(特征)。 - -**前提条件** - -1. 构建 CatBoost 评估库 - -在评估 CatBoost 模型之前,必须先准备好 `libcatboostmodel.` 库。有关如何编译该库,请参阅 [CatBoost 文档](https://catboost.ai/docs/concepts/c-plus-plus-api_dynamic-c-pluplus-wrapper.html)。 - -接下来,在 ClickHouse 配置中指定 `libcatboostmodel.` 的路径: - -```xml - -... - /path/to/libcatboostmodel.so -... - -``` - -出于安全和隔离方面的考虑,模型评估并不是在服务器进程中运行,而是在 `clickhouse-library-bridge` 进程中运行。 -在第一次执行 `catboostEvaluate()` 时,如果 library bridge 进程尚未运行,服务器会启动该进程。两个进程 -通过 HTTP 接口进行通信。默认使用端口 `9012`。可以按如下方式指定其他端口——当端口 -`9012` 已经被其他服务占用时,这将非常有用。 - -```xml - - 9019 - -``` - -2. 使用 libcatboost 训练 catboost 模型 - -有关如何使用训练数据集来训练 catboost 模型,请参阅 [Training and applying models](https://catboost.ai/docs/features/training.html#training)。 - -**语法** - -```sql -catboostEvaluate(模型路径, 特征_1[, 特征_2, ..., 特征_n]) -``` - -**参数** - -* `path_to_model` — CatBoost 模型路径。[`const String`](/sql-reference/data-types/string) -* `feature` — 一个或多个模型特征/输入参数。[`Float*`](/sql-reference/data-types/float) - -**返回值** - -返回模型评估结果。[`Float64`](/sql-reference/data-types/float) - -**示例** - -**catboostEvaluate** - -```sql title=Query -SELECT catboostEvaluate('/root/occupy.bin', Temperature, Humidity, Light, CO2, HumidityRatio) AS prediction FROM occupancy LIMIT 1 -``` - -```response title=Response -4.695691092573497 -``` - - -## colorOKLCHToSRGB - -引入版本:v25.7 - -将 **OKLCH** 知觉色彩空间中的颜色转换为常用的 **sRGB** 色彩空间。 - -如果 `L` 超出 `[0...1]` 范围、`C` 为负数,或 `H` 超出 `[0...360]` 范围,则结果由实现自行定义。 - -:::note -**OKLCH** 是 OKLab 色彩空间的圆柱坐标形式。 -它的三个坐标分别是 `L`(明度,范围为 `[0...1]`)、`C`(色度,`>= 0`)以及 `H`(色相,角度,范围为 `[0...360]`)。 -OKLab/OKLCH 的设计目标是在保持感知均匀的同时降低计算成本。 -::: - -该转换是 [`colorSRGBToOKLCH`](#colorSRGBToOKLCH) 的逆变换: - -1. OKLCH 到 OKLab。 -2. OKLab 到线性 sRGB。 -3. 线性 sRGB 到 sRGB。 - -第二个参数 gamma 会在最后一个阶段使用。 - -关于 OKLCH 空间中的颜色示例及其与 sRGB 颜色的对应关系,请参阅 [https://oklch.com/](https://oklch.com/)。 - -**语法** - -```sql -colorOKLCHToSRGB(tuple [, gamma]) -``` - -**参数** - -* `tuple` — 一个包含三个数值分量 `L`、`C`、`H` 的元组,其中 `L` 的取值范围为 `[0...1]`,`C >= 0`,`H` 的取值范围为 `[0...360]`。[`Tuple(Float64, Float64, Float64)`](/sql-reference/data-types/tuple) -* `gamma` — 可选。用于将线性 sRGB 转换回 sRGB 的指数,对每个通道 `x` 应用 `(x ^ (1 / gamma)) * 255`。默认值为 `2.2`。[`Float64`](/sql-reference/data-types/float) - -**返回值** - -返回一个元组 (R, G, B),表示 sRGB 颜色值。[`Tuple(Float64, Float64, Float64)`](/sql-reference/data-types/tuple) - -**示例** - -**将 OKLCH 转换为 sRGB** - -```sql title=Query -SELECT colorOKLCHToSRGB((0.4466, 0.0991, 45.44), 2.2) AS rgb -WITH colorOKLCHToSRGB((0.7, 0.1, 54)) as t SELECT tuple(toUInt8(t.1), toUInt8(t.2), toUInt8(t.3)) AS RGB -``` - -```response title=Response -┌─rgb──────────────────────────────────────────────────────┐ -│ (127.03349738778945,66.06672044472008,37.11802592155851) │ -└──────────────────────────────────────────────────────────┘ -┌─RGB──────────┐ -│ (205,139,97) │ -└──────────────┘ -``` - - -## colorSRGBToOKLCH - -自 v25.7 引入 - -将以 **sRGB** 颜色空间编码的颜色转换为感知均匀的 **OKLCH** 颜色空间。 - -如果任一输入通道超出 `[0...255]` 范围,或 gamma 值为非正数,其行为由具体实现决定。 - -:::note -**OKLCH** 是 OKLab 颜色空间的圆柱坐标形式。 -它的三个坐标分别为 `L`(亮度,范围为 `[0...1]`)、`C`(色度,`>= 0`)和 `H`(色相,单位为度,范围为 `[0...360]`)。 -OKLab/OKLCH 在保持计算开销较低的同时,旨在实现感知上的均匀性。 -::: - -该转换由三个阶段组成: - -1. sRGB 到线性 sRGB -2. 线性 sRGB 到 OKLab -3. OKLab 到 OKLCH。 - -有关 OKLCH 空间中的颜色参考,以及它们与 sRGB 颜色的对应关系,请参见 [https://OKLCH.com/](https://OKLCH.com/)。 - -**语法** - -```sql -colorSRGBToOKLCH(tuple[, gamma]) -``` - -**参数** - -* `tuple` — 由 R、G、B 三个值组成的元组,取值范围为 `[0...255]`。[`Tuple(UInt8, UInt8, UInt8)`](/sql-reference/data-types/tuple) -* `gamma` — 可选。用于通过对每个通道 `x` 应用 `(x / 255)^gamma` 来将 sRGB 线性化的指数。默认值为 `2.2`。[`Float64`](/sql-reference/data-types/float) - -**返回值** - -返回一个元组 (L, C, H),表示 OKLCH 颜色空间的取值。[`Tuple(Float64, Float64, Float64)`](/sql-reference/data-types/tuple) - -**示例** - -**将 sRGB 转换为 OKLCH** - -```sql title=Query -SELECT colorSRGBToOKLCH((128, 64, 32), 2.2) AS lch -``` - -```response title=Response -┌─lch─────────────────────────────────────────────────────────┐ -│ (0.4436238384931984,0.10442699545678624,45.907345481930236) │ -└─────────────────────────────────────────────────────────────┘ -``` - - -## connectionId - -自 v21.3 引入 - -返回提交当前查询的客户端的连接 ID。 -此函数在调试场景中最为有用。 -它是为兼容 MySQL 的 `CONNECTION_ID` 函数而创建的。 -在生产环境的查询中通常不会使用该函数。 - -**语法** - -```sql -connectionId() -``` - -**参数** - -* 无。 - -**返回值** - -返回当前客户端的连接 ID。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT connectionId(); -``` - -```response title=Response -┌─connectionId()─┐ -│ 0 │ -└────────────────┘ -``` - - -## countDigits - -引入于:v20.8 - -返回表示某个值所需的十进制数字个数。 - -:::note -此函数会考虑十进制值的 `scale`,也就是说,它是在底层整数类型 `(value * scale)` 上计算结果。 - -例如: - -* `countDigits(42) = 2` -* `countDigits(42.000) = 5` -* `countDigits(0.04200) = 4` - ::: - -:::tip -你可以使用 `countDigits(x) > 18` 来检查 `Decimal64` 是否发生溢出, -尽管它比 [`isDecimalOverflow`](#isDecimalOverflow) 更慢。 -::: - -**语法** - -```sql -countDigits(x) -``` - -**参数** - -* `x` — 一个整数或十进制数值。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Decimal`](/sql-reference/data-types/decimal) - -**返回值** - -返回表示 `x` 所需的数字位数。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT countDigits(toDecimal32(1, 9)), countDigits(toDecimal32(-1, 9)), - countDigits(toDecimal64(1, 18)), countDigits(toDecimal64(-1, 18)), - countDigits(toDecimal128(1, 38)), countDigits(toDecimal128(-1, 38)); -``` - -```response title=Response -┌─countDigits(toDecimal32(1, 9))─┬─countDigits(toDecimal32(-1, 9))─┬─countDigits(toDecimal64(1, 18))─┬─countDigits(toDecimal64(-1, 18))─┬─countDigits(toDecimal128(1, 38))─┬─countDigits(toDecimal128(-1, 38))─┐ -│ 10 │ 10 │ 19 │ 19 │ 39 │ 39 │ -└────────────────────────────────┴─────────────────────────────────┴─────────────────────────────────┴──────────────────────────────────┴──────────────────────────────────┴───────────────────────────────────┘ -``` - - -## currentDatabase - -自 v1.1 起提供 - -返回当前数据库的名称。 -在 `CREATE TABLE` 查询的表引擎参数中,当需要指定数据库时非常有用。 - -另请参阅 [`SET` 语句](/sql-reference/statements/use)。 - -**语法** - -```sql -currentDatabase() -``` - -**别名**: `current_database`, `SCHEMA`, `DATABASE` - -**参数** - -* 无。 - -**返回值** - -返回当前数据库的名称。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT currentDatabase() -``` - -```response title=Response -┌─currentDatabase()─┐ -│ default │ -└───────────────────┘ -``` - - -## currentProfiles - -引入于:v21.9 - -返回当前用户的设置配置文件列表。 - -**语法** - -```sql -currentProfiles() -``` - -**参数** - -* 无。 - -**返回值** - -返回当前用户的设置配置集数组。[`Array(String)`](/sql-reference/data-types/array) - -**示例** - -**使用示例** - -```sql title=Query -SELECT currentProfiles(); -``` - -```response title=Response -┌─currentProfiles()─────────────────────────────┐ -│ ['default', 'readonly_user', 'web_analytics'] │ -└───────────────────────────────────────────────┘ -``` - - -## currentQueryID - -引入于:v - -返回当前查询 ID。 - -**语法** - -```sql -currentQueryID() -``` - -**别名**: `current_query_id` - -**参数** - -* 无。 - -**返回值** - -**示例** - -**示例** - -```sql title=Query -SELECT currentQueryID(); -``` - -```response title=Response -┌─currentQueryID()─────────────────────┐ -│ 1280d0e8-1a08-4524-be6e-77975bb68e7d │ -└──────────────────────────────────────┘ -``` - - -## currentRoles - -在 v21.9 中引入 - -返回一个数组,包含分配给当前用户的角色。 - -**语法** - -```sql -currentRoles() -``` - -**参数** - -* 无。 - -**返回值** - -返回当前用户被授予的角色数组。[`Array(String)`](/sql-reference/data-types/array) - -**示例** - -**使用示例** - -```sql title=Query -SELECT currentRoles(); -``` - -```response title=Response -┌─currentRoles()─────────────────────────────────┐ -│ ['sql-console-role:jane.smith@clickhouse.com'] │ -└────────────────────────────────────────────────┘ -``` - - -## currentSchemas - -引入版本:v23.7 - -与函数 [`currentDatabase`](#currentDatabase) 相同,但: - -* 接受一个会被忽略的布尔参数 -* 以仅包含一个值的数组形式返回数据库名称。 - -函数 `currentSchemas` 仅为与 PostgreSQL 的兼容性而提供。 -请改用 `currentDatabase`。 - -另请参阅 [`SET` 语句](/sql-reference/statements/use)。 - -**语法** - -```sql -currentSchemas(bool) -``` - -**别名**:`current_schemas` - -**参数** - -* `bool` — 一个布尔值,会被忽略。[`Bool`](/sql-reference/data-types/boolean) - -**返回值** - -返回一个只包含当前数据库名称的单元素数组。[`Array(String)`](/sql-reference/data-types/array) - -**示例** - -**使用示例** - -```sql title=Query -SELECT currentSchemas(true) -``` - -```response title=Response -┌─currentSchemas(true)─┐ -│ ['default'] │ -└──────────────────────┘ -``` - - -## currentUser - -自 v20.1 起引入 - -返回当前用户的用户名。 -在分布式查询的情况下,返回发起该查询的用户名。 - -**语法** - -```sql -currentUser() -``` - -**别名**:`current_user`, `user` - -**参数** - -* 无。 - -**返回值** - -返回当前用户的名称,否则返回发起该查询的用户的登录名。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT currentUser() -``` - -```response title=Response -┌─currentUser()─┐ -│ default │ -└───────────────┘ -``` - - -## defaultProfiles - -引入版本:v21.9 - -返回当前用户默认设置配置文件名的数组。 - -**语法** - -```sql -defaultProfiles() -``` - -**参数** - -* 无。 - -**返回值** - -返回当前用户的默认设置配置文件名称数组。[`Array(String)`](/sql-reference/data-types/array) - -**示例** - -**用法示例** - -```sql title=Query -SELECT defaultProfiles(); -``` - -```response title=Response -┌─defaultProfiles()─┐ -│ ['default'] │ -└───────────────────┘ -``` - - -## defaultRoles - -自 v21.9 版本引入 - -返回当前用户的默认角色数组。 - -**语法** - -```sql -defaultRoles() -``` - -**参数** - -* 无。 - -**返回值** - -返回当前用户的默认角色的数组。[`Array(String)`](/sql-reference/data-types/array) - -**示例** - -**使用示例** - -```sql title=Query -SELECT defaultRoles(); -``` - -```response title=Response -┌─defaultRoles()─────────────────────────────────┐ -│ ['sql-console-role:jane.smith@clickhouse.com'] │ -└────────────────────────────────────────────────┘ -``` - - -## defaultValueOfArgumentType - -自 v1.1 起引入 - -返回给定数据类型的默认值。 -不包括用户为自定义列设置的默认值。 - -**语法** - -```sql -defaultValueOfArgumentType(表达式) -``` - -**参数** - -* `expression` — 任意数据类型的值,或计算结果为任意数据类型值的表达式。[`Any`](/sql-reference/data-types) - -**返回值** - -对于数值类型返回 `0`,对于字符串类型返回空字符串,对于 Nullable 类型返回 `NULL`。返回类型为 [`UInt8`](/sql-reference/data-types/int-uint)、[`String`](/sql-reference/data-types/string) 或 [`NULL`](/sql-reference/syntax#null)。 - -**示例** - -**用法示例** - -```sql title=Query -SELECT defaultValueOfArgumentType(CAST(1 AS Int8)); -``` - -```response title=Response -┌─defaultValueOfArgumentType(CAST(1, 'Int8'))─┐ -│ 0 │ -└─────────────────────────────────────────────┘ -``` - -**“Nullable” 示例** - -```sql title=Query -SELECT defaultValueOfArgumentType(CAST(1 AS Nullable(Int8))); -``` - -```response title=Response -┌─defaultValueOfArgumentType(CAST(1, 'Nullable(Int8)'))─┐ -│ ᴺᵁᴸᴸ │ -└───────────────────────────────────────────────────────┘ -``` - - -## defaultValueOfTypeName - -自 v1.1 引入 - -返回给定类型名称的默认值。 - -**语法** - -```sql -defaultValueOfTypeName(type) -``` - -**参数** - -* `type` — 表示类型名称的字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回给定类型名称的默认值:数字类型返回 `0`,字符串类型返回空字符串,`Nullable` 的 [`UInt8`](/sql-reference/data-types/int-uint)、[`String`](/sql-reference/data-types/string) 或 [`NULL`](/sql-reference/syntax#null) 类型返回 `NULL`。 - -**示例** - -**用法示例** - -```sql title=Query -SELECT defaultValueOfTypeName('Int8'); -``` - -```response title=Response -┌─defaultValueOfTypeName('Int8')─┐ -│ 0 │ -└────────────────────────────────┘ -``` - -**Nullable 类型示例** - -```sql title=Query -SELECT defaultValueOfTypeName('Nullable(Int8)'); -``` - -```response title=Response -┌─defaultValueOfTypeName('Nullable(Int8)')─┐ -│ ᴺᵁᴸᴸ │ -└──────────────────────────────────────────┘ -``` - - -## displayName - -自 v22.11 引入 - -返回 [config](/operations/configuration-files) 中的 `display_name` 值;如果未设置该值,则返回服务器的完全限定域名(FQDN)。 - -**语法** - -```sql -displayName() -``` - -**参数** - -* 无。 - -**返回值** - -返回配置中的 `display_name` 值,如果未设置,则返回服务器的 FQDN。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT displayName(); -``` - -```response title=Response -┌─displayName()─┐ -│ production │ -└───────────────┘ -``` - - -## dumpColumnStructure - -自 v1.1 引入 - -输出列及其数据类型内部结构的详细说明。 - -**语法** - -```sql -dumpColumnStructure(x) -``` - -**参数** - -* `x` — 要获取其描述的值。[`Any`](/sql-reference/data-types) - -**返回值** - -返回用于表示该值的列结构的描述。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT dumpColumnStructure(CAST('2018-01-01 01:02:03', 'DateTime')); -``` - -```response title=Response -┌─dumpColumnStructure(CAST('2018-01-01 01:02:03', 'DateTime'))─┐ -│ DateTime, Const(size = 1, UInt32(size = 1)) │ -└──────────────────────────────────────────────────────────────┘ -``` - - -## enabledProfiles - -引入于:v21.9 - -返回一个数组,包含已为当前用户启用的设置配置文件的名称。 - -**语法** - -```sql -enabledProfiles() -``` - -**参数** - -* 无。 - -**返回值** - -返回一个包含对当前用户已启用的设置配置文件名称的数组。[`Array(String)`](/sql-reference/data-types/array) - -**示例** - -**用法示例** - -```sql title=Query -SELECT enabledProfiles(); -``` - -```response title=Response -┌─enabledProfiles()─────────────────────────────────────────────────┐ -│ ['default', 'readonly_user', 'web_analytics', 'batch_processing'] │ -└───────────────────────────────────────────────────────────────────┘ -``` - - -## enabledRoles - -自 v21.9 起引入 - -返回一个数组,其中包含当前用户已启用的角色。 - -**语法** - -```sql -enabledRoles() -``` - -**参数** - -* 无。 - -**返回值** - -返回一个当前用户已启用的角色名称数组。[`Array(String)`](/sql-reference/data-types/array) - -**示例** - -**用法示例** - -```sql title=Query -SELECT enabledRoles(); -``` - -```response title=Response -┌─enabledRoles()─────────────────────────────────────────────────┐ -│ ['general_data', 'sql-console-role:jane.smith@clickhouse.com'] │ -└────────────────────────────────────────────────────────────────┘ -``` - - -## errorCodeToName - -自 v20.12 起提供 - -返回数值型 ClickHouse 错误码对应的文本名称。 -数值错误码与错误名称之间的映射可在[此处](https://github.com/ClickHouse/ClickHouse/blob/master/src/Common/ErrorCodes.cpp)查看。 - -**语法** - -```sql -errorCodeToName(error_code) -``` - -**参数** - -* `error_code` — ClickHouse 错误代码。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) - -**返回值** - -返回 `error_code` 对应的文本名称。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT errorCodeToName(252); -``` - -```response title=Response -┌─errorCodeToName(252)─┐ -│ TOO_MANY_PARTS │ -└──────────────────────┘ -``` - - -## file - -自 v21.3 起提供 - -将文件内容作为字符串读取,并将数据加载到指定列中。 -不会对文件内容进行解析。 - -另请参阅 [`file`](../table-functions/file.md) 表函数。 - -**语法** - -```sql -file(path[, default]) -``` - -**参数** - -* `path` — 相对于 `user_files_path` 的文件路径。支持通配符 `*`、`**`、`?`、`{abc,def}` 和 `{N..M}`,其中 `N`、`M` 为数字,`'abc', 'def'` 为字符串。[`String`](/sql-reference/data-types/string) -* `default` — 当文件不存在或无法访问时返回的值。[`String`](/sql-reference/data-types/string) 或 [`NULL`](/sql-reference/syntax#null) - -**返回值** - -以字符串形式返回文件内容。[`String`](/sql-reference/data-types/string) - -**示例** - -**将文件插入到表中** - -```sql title=Query -INSERT INTO table SELECT file('a.txt'), file('b.txt'); -``` - -```response title=Response -``` - - -## filesystemAvailable - -引入版本:v20.1 - -返回用于持久化存储数据库数据的文件系统中可用空间的大小。 -返回值始终小于文件系统的总空闲空间([`filesystemUnreserved`](../../sql-reference/functions/other-functions.md#filesystemUnreserved)),因为操作系统会预留一部分空间。 - -**语法** - -```sql -filesystemAvailable([disk_name]) -``` - -**参数** - -* `disk_name` — 可选。要查询可用空间的磁盘名称。如果省略,则使用默认磁盘。[`String`](/sql-reference/data-types/string) 或 [`FixedString`](/sql-reference/data-types/fixedstring) - -**返回值** - -返回剩余可用空间的大小(字节数)。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT formatReadableSize(filesystemAvailable()) AS "可用空间"; -``` - -```response title=Response -┌─可用空间─┐ -│ 30.75 GiB │ -└─────────────────┘ -``` - - -## filesystemCapacity - -自 v20.1 版本引入 - -返回文件系统的容量(以字节为单位)。 -需要配置指向数据目录的 [path](../../operations/server-configuration-parameters/settings.md#path)。 - -**语法** - -```sql -filesystemCapacity([disk_name]) -``` - -**参数** - -* `disk_name` — 可选。要获取容量的磁盘名称。如果省略,则使用默认磁盘。[`String`](/sql-reference/data-types/string) 或 [`FixedString`](/sql-reference/data-types/fixedstring) - -**返回值** - -以字节表示的文件系统容量。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT formatReadableSize(filesystemCapacity()) AS "容量"; -``` - -```response title=Response -┌─容量──────┐ -│ 39.32 GiB │ -└───────────┘ -``` - - -## filesystemUnreserved - -引入于:v22.12 - -返回存放数据库持久化数据的文件系统上的可用空闲空间总量(此前为 `filesystemFree`)。 -另请参见 [`filesystemAvailable`](#filesystemAvailable)。 - -**语法** - -```sql -filesystemUnreserved([disk_name]) -``` - -**参数** - -* `disk_name` — 可选。要查询其空闲空间总量的磁盘名称。若省略,则使用默认磁盘。[`String`](/sql-reference/data-types/string) 或 [`FixedString`](/sql-reference/data-types/fixedstring) - -**返回值** - -返回以字节为单位的空闲空间字节数。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT formatReadableSize(filesystemUnreserved()) AS "可用空间"; -``` - -```response title=Response -┌─可用空间─┐ -│ 32.39 GiB │ -└────────────┘ -``` - - -## finalizeAggregation - -引入于:v1.1 - -在给定聚合状态的情况下,此函数返回聚合结果(或在使用 [-State](../../sql-reference/aggregate-functions/combinators.md#-state) 组合器时返回最终状态)。 - -**语法** - -```sql -finalizeAggregation(state) -``` - -**参数** - -* `state` — 聚合状态。[`AggregateFunction`](/sql-reference/data-types/aggregatefunction) - -**返回值** - -返回最终的聚合结果。[`Any`](/sql-reference/data-types) - -**示例** - -**使用示例** - -```sql title=Query -SELECT finalizeAggregation(arrayReduce('maxState', [1, 2, 3])); -``` - -```response title=Response -┌─finalizeAggregation(arrayReduce('maxState', [1, 2, 3]))─┐ -│ 3 │ -└─────────────────────────────────────────────────────────┘ -``` - -**与 initializeAggregation 一起使用** - -```sql title=Query -WITH initializeAggregation('sumState', number) AS one_row_sum_state -SELECT - number, - finalizeAggregation(one_row_sum_state) AS one_row_sum, - runningAccumulate(one_row_sum_state) AS cumulative_sum -FROM numbers(5); -``` - -```response title=Response -┌─number─┬─one_row_sum─┬─cumulative_sum─┐ -│ 0 │ 0 │ 0 │ -│ 1 │ 1 │ 1 │ -│ 2 │ 2 │ 3 │ -│ 3 │ 3 │ 6 │ -│ 4 │ 4 │ 10 │ -└────────┴─────────────┴────────────────┘ -``` - - -## flipCoordinates - -引入版本:v25.10 - -对 Point、Ring、Polygon 或 MultiPolygon 的坐标进行翻转。对于 Point,会交换其坐标。对于数组,会递归地对每个坐标对应用相同的变换。 - -**语法** - -```sql -flipCoordinates(geometry) -``` - -**参数** - -* `geometry` — 要进行坐标翻转的几何对象。支持的类型:Point (Tuple(Float64, Float64))、Ring (Array(Point))、Polygon (Array(Ring))、MultiPolygon (Array(Polygon))。 - -**返回值** - -坐标翻转后的几何对象。类型与输入相同。[`Point`](/sql-reference/data-types/geo#point) 或 [`Ring`](/sql-reference/data-types/geo#ring) 或 [`Polygon`](/sql-reference/data-types/geo#polygon) 或 [`MultiPolygon`](/sql-reference/data-types/geo#multipolygon) - -**示例** - -**basic_point** - -```sql title=Query -SELECT flipCoordinates((1.0, 2.0)); -``` - -```response title=Response -(2.0, 1.0) -``` - -**环** - -```sql title=Query -SELECT flipCoordinates([(1.0, 2.0), (3.0, 4.0)]); -``` - -```response title=Response -[(2.0, 1.0), (4.0, 3.0)] -``` - -**多边形** - -```sql title=Query -SELECT flipCoordinates([[(1.0, 2.0), (3.0, 4.0)], [(5.0, 6.0), (7.0, 8.0)]]); -``` - -```response title=Response -[[(2.0, 1.0), (4.0, 3.0)], [(6.0, 5.0), (8.0, 7.0)]] -``` - - -## formatQuery - -引入于:v - -返回给定 SQL 查询的格式化版本,可能为多行。若解析出错则抛出异常。 -[example:multiline] - -**语法** - -```sql -formatQuery(query) -``` - -**参数** - -* `query` — 要进行格式化的 SQL 查询语句。[String](../../sql-reference/data-types/string.md) - -**返回值** - -格式化后的查询语句 [`String`](/sql-reference/data-types/string) - -**示例** - -**多行** - -```sql title=Query -SELECT formatQuery('select a, b FRom tab WHERE a > 3 and b < 3'); -``` - -```response title=Response -SELECT - a, - b -FROM tab -WHERE (a > 3) AND (b < 3) -``` - - -## formatQueryOrNull - -引入自:v - -返回给定 SQL 查询格式化后的版本,可能为多行。如果解析出错,则返回 NULL。 -[example:multiline] - -**语法** - -```sql -formatQueryOrNull(query) -``` - -**参数** - -* `query` — 要格式化的 SQL 查询。[String](../../sql-reference/data-types/string.md) - -**返回值** - -格式化后的查询字符串 [`String`](/sql-reference/data-types/string) - -**示例** - -**multiline(多行)** - -```sql title=Query -SELECT formatQuery('select a, b FRom tab WHERE a > 3 and b < 3'); -``` - -```response title=Response -SELECT - a, - b -FROM tab -WHERE (a > 3) AND (b < 3) -``` - - -## formatQuerySingleLine - -引入于:v - -与 formatQuery() 类似,但返回的格式化字符串不包含换行符。如果解析出错则抛出异常。 -[example:multiline] - -**语法** - -```sql -formatQuerySingleLine(query) -``` - -**参数** - -* `query` — 要格式化的 SQL 查询语句。[String](../../sql-reference/data-types/string.md) - -**返回值** - -格式化后的查询字符串 [`String`](/sql-reference/data-types/string) - -**示例** - -**多行(multiline)** - -```sql title=Query -SELECT formatQuerySingleLine('select a, b FRom tab WHERE a > 3 and b < 3'); -``` - -```response title=Response -SELECT a, b FROM tab WHERE (a > 3) AND (b < 3) -``` - - -## formatQuerySingleLineOrNull - -自版本 v 引入 - -类似于 formatQuery(),但返回的格式化字符串不包含换行符。若解析出错则返回 NULL。 -[example:multiline] - -**语法** - -```sql -formatQuerySingleLineOrNull(query) -``` - -**参数** - -* `query` — 要格式化的 SQL 查询。[`String`](/sql-reference/data-types/string) - -**返回值** - -格式化后的查询字符串 [`String`](/sql-reference/data-types/string) - -**示例** - -**多行** - -```sql title=Query -SELECT formatQuerySingleLine('select a, b FRom tab WHERE a > 3 and b < 3'); -``` - -```response title=Response -SELECT a, b FROM tab WHERE (a > 3) AND (b < 3) -``` - - -## formatReadableDecimalSize - -自 v22.11 起引入 - -给定一个大小(字节数),此函数返回带有后缀(KB、MB 等)的、可读的四舍五入后大小字符串。 - -此函数的反向操作为 [`parseReadableSize`](#parseReadableSize)。 - -**语法** - -```sql -formatReadableDecimalSize(x) -``` - -**参数** - -* `x` — 以字节为单位的大小。[`UInt64`](/sql-reference/data-types/int-uint) - -**返回值** - -返回一个包含单位后缀的、易读且已四舍五入的大小字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**格式化文件大小** - -```sql title=Query -SELECT - arrayJoin([1, 1024, 1024*1024, 192851925]) AS filesize_bytes, - formatReadableDecimalSize(filesize_bytes) AS filesize -``` - -```response title=Response -┌─filesize_bytes─┬─filesize───┐ -│ 1 │ 1.00 B │ -│ 1024 │ 1.02 KB │ -│ 1048576 │ 1.05 MB │ -│ 192851925 │ 192.85 MB │ -└────────────────┴────────────┘ -``` - - -## formatReadableQuantity - -引入于:v20.10 - -给定一个数字,此函数返回四舍五入后的数值,并附带后缀(千、百万、十亿等),以字符串形式表示。 - -此函数接受任意数值类型作为输入,但在内部会将其转换为 `Float64`。 -对于非常大的数值,结果可能不够理想。 - -**语法** - -```sql -formatReadableQuantity(x) -``` - -**参数** - -* `x` — 要格式化的数字。[`UInt64`](/sql-reference/data-types/int-uint) - -**返回值** - -返回四舍五入后带后缀的数字字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用后缀格式化数字** - -```sql title=Query -SELECT - arrayJoin([1024, 1234 * 1000, (4567 * 1000) * 1000, 98765432101234]) AS number, - formatReadableQuantity(number) AS number_for_humans -``` - -```response title=Response -┌─────────number─┬─number_for_humans─┐ -│ 1024 │ 1.02 千 │ -│ 1234000 │ 1.23 百万 │ -│ 4567000000 │ 4.57 十亿 │ -│ 98765432101234 │ 98.77 万亿 │ -└────────────────┴───────────────────┘ -``` - - -## formatReadableSize - -引入于:v1.1 - -给定一个大小(字节数),此函数返回一个经过四舍五入并带有后缀(KiB、MiB 等)的可读大小字符串。 - -此函数的反向操作是 [`parseReadableSize`](#parseReadableSize)、[`parseReadableSizeOrZero`](#parseReadableSizeOrZero) 和 [`parseReadableSizeOrNull`](#parseReadableSizeOrNull)。 -此函数接受任意数值类型作为输入,但在内部会将其转换为 `Float64`。对于非常大的数值,结果可能不够理想。 - -**语法** - -```sql -formatReadableSize(x) -``` - -**别名**:`FORMAT_BYTES` - -**参数** - -* `x` — 以字节为单位的大小。[`UInt64`](/sql-reference/data-types/int-uint) - -**返回值** - -返回一个经过取整、带有后缀的人类可读大小字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**格式化文件大小** - -```sql title=Query -SELECT - arrayJoin([1, 1024, 1024*1024, 192851925]) AS filesize_bytes, - formatReadableSize(filesize_bytes) AS filesize -``` - -```response title=Response -┌─filesize_bytes─┬─filesize───┐ -│ 1 │ 1.00 B │ -│ 1024 │ 1.00 KiB │ -│ 1048576 │ 1.00 MiB │ -│ 192851925 │ 183.92 MiB │ -└────────────────┴────────────┘ -``` - - -## formatReadableTimeDelta - -引入版本:v20.12 - -给定一个以秒为单位的时间间隔(delta),该函数返回包含年/月/日/时/分/秒/毫秒/微秒/纳秒的可读时间间隔字符串。 - -此函数接受任意数值类型作为输入,但在内部会将其转换为 `Float64`。对于较大的数值,结果可能不够理想。 - -**语法** - -```sql -formatReadableTimeDelta(column[, maximum_unit, minimum_unit]) -``` - -**参数** - -* `column` — 包含数值时间差的列。[`Float64`](/sql-reference/data-types/float) -* `maximum_unit` — 可选。要显示的最大时间单位。可接受的值:`nanoseconds`、`microseconds`、`milliseconds`、`seconds`、`minutes`、`hours`、`days`、`months`、`years`。默认值:`years`。[`const String`](/sql-reference/data-types/string) -* `minimum_unit` — 可选。要显示的最小时间单位。所有更小的单位都会被截断。可接受的值:`nanoseconds`、`microseconds`、`milliseconds`、`seconds`、`minutes`、`hours`、`days`、`months`、`years`。如果显式指定的值大于 `maximum_unit`,将抛出异常。默认值:当 `maximum_unit` 为 `seconds` 或更大时为 `seconds`,否则为 `nanoseconds`。[`const String`](/sql-reference/data-types/string) - -**返回值** - -以字符串形式返回时间差。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT - arrayJoin([100, 12345, 432546534]) AS elapsed, - formatReadableTimeDelta(elapsed) AS time_delta -``` - -```response title=Response -┌────elapsed─┬─time_delta─────────────────────────────────────────────────────┐ -│ 100 │ 1分钟40秒 │ -│ 12345 │ 3小时25分钟45秒 │ -│ 432546534 │ 13年8个月17天7小时48分钟54秒│ -└────────────┴────────────────────────────────────────────────────────────────┘ -``` - -**使用最大单位** - -```sql title=Query -SELECT - arrayJoin([100, 12345, 432546534]) AS elapsed, - formatReadableTimeDelta(elapsed, 'minutes') AS time_delta -``` - -```response title=Response -┌────elapsed─┬─time_delta─────────────────────────────────────────────────────┐ -│ 100 │ 1分40秒 │ -│ 12345 │ 205分45秒 │ -│ 432546534 │ 7209108分54秒 │ -└────────────┴─────────────────────────────────────────────────────────────────┘ -``` - - -## generateRandomStructure - -自 v23.5 引入。 - -以 `column1_name column1_type, column2_name column2_type, ...` 的格式生成随机表结构。 - -**语法** - -```sql -generateRandomStructure([number_of_columns, seed]) -``` - -**参数** - -* `number_of_columns` — 结果表的预期列数。若设置为 0 或 `Null`,则列数将在 1 到 128 之间随机生成。默认值:`Null`。[`UInt64`](/sql-reference/data-types/int-uint) -* `seed` — 用于生成稳定结果的随机种子。如果未指定 `seed` 或将其设置为 `Null`,则会随机生成种子。[`UInt64`](/sql-reference/data-types/int-uint) - -**返回值** - -随机生成的表结构。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT generateRandomStructure() -``` - -```response title=Response -c1 Decimal32(5), c2 Date, c3 Tuple(LowCardinality(String), Int128, UInt64, UInt16, UInt8, IPv6), c4 Array(UInt128), c5 UInt32, c6 IPv4, c7 Decimal256(64), c8 Decimal128(3), c9 UInt256, c10 UInt64, c11 DateTime -``` - -**使用指定列数** - -```sql title=Query -SELECT generateRandomStructure(1) -``` - -```response title=Response -c1 Map(UInt256, UInt16) -``` - -**使用指定的随机种子** - -```sql title=Query -SELECT generateRandomStructure(NULL, 33) -``` - -```response title=Response -c1 DateTime, c2 Enum8('c2V0' = 0, 'c2V1' = 1, 'c2V2' = 2, 'c2V3' = 3), c3 LowCardinality(Nullable(FixedString(30))), c4 Int16, c5 Enum8('c5V0' = 0, 'c5V1' = 1, 'c5V2' = 2, 'c5V3' = 3), c6 Nullable(UInt8), c7 String, c8 Nested(e1 IPv4, e2 UInt8, e3 UInt16, e4 UInt16, e5 Int32, e6 Map(Date, Decimal256(70))) -``` - - -## generateSerialID - -自 v25.1 起引入 - -生成并返回从上一个计数器值开始的连续数字。 -该函数接受一个字符串参数(序列标识符),以及一个可选的起始值。 -服务器需要配置 Keeper。 -序列保存在 Keeper 节点下的路径中,该路径可以在服务器配置中的 [`series_keeper_path`](/operations/server-configuration-parameters/settings#series_keeper_path) 进行配置。 - -**语法** - -```sql -generateSerialID(series_identifier[, start_value]) -``` - -**参数** - -* `series_identifier` — 序列标识符 [`const String`](/sql-reference/data-types/string) -* `start_value` — 可选。计数器的起始值,默认为 0。注意:此值仅在创建新序列时使用,如果序列已存在则会被忽略 [`UInt*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回从上一个计数器值开始递增的连续数字。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**首次调用** - -```sql title=Query -SELECT generateSerialID('id1') -``` - -```response title=Response -┌─generateSerialID('id1')──┐ -│ 1 │ -└──────────────────────────┘ -``` - -**第二次调用** - -```sql title=Query -SELECT generateSerialID('id1') -``` - -```response title=Response -┌─generateSerialID('id1')──┐ -│ 2 │ -└──────────────────────────┘ -``` - -**列引用** - -```sql title=Query -SELECT *, generateSerialID('id1') FROM test_table -``` - -```response title=Response -┌─CounterID─┬─UserID─┬─ver─┬─generateSerialID('id1')──┐ -│ 1 │ 3 │ 3 │ 3 │ -│ 1 │ 1 │ 1 │ 4 │ -│ 1 │ 2 │ 2 │ 5 │ -│ 1 │ 5 │ 5 │ 6 │ -│ 1 │ 4 │ 4 │ 7 │ -└───────────┴────────┴─────┴──────────────────────────┘ -``` - -**包含起始值** - -```sql title=Query -SELECT generateSerialID('id2', 100) -``` - -```response title=Response -┌─generateSerialID('id2', 100)──┐ -│ 100 │ -└───────────────────────────────┘ -``` - -**使用起始值时的第二次调用** - -```sql title=Query -SELECT generateSerialID('id2', 100) -``` - -```response title=Response -┌─generateSerialID('id2', 100)──┐ -│ 101 │ -└───────────────────────────────┘ -``` - - -## getClientHTTPHeader - -引入版本:v24.5 - -获取某个 HTTP 头的值。 -如果没有该头,或者当前请求不是通过 HTTP 接口执行的,函数会返回空字符串。 -某些 HTTP 头(例如 `Authentication` 和 `X-ClickHouse-*`)是受限制的。 - -:::note 需要设置 `allow_get_client_http_header` -该函数要求启用 `allow_get_client_http_header` 设置项。 -出于安全原因,该设置默认未启用,因为某些头(例如 `Cookie`)可能包含敏感信息。 -::: - -对于该函数,HTTP 头名是区分大小写的。 -如果在分布式查询的上下文中使用该函数,它仅在发起节点上返回非空结果。 - -**语法** - -```sql -getClientHTTPHeader(name) -``` - -**参数** - -* `name` — HTTP 头部名称。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回该头部对应的值。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT getClientHTTPHeader('Content-Type'); -``` - -```response title=Response -┌─getClientHTTPHeader('Content-Type')─┐ -│ application/x-www-form-urlencoded │ -└─────────────────────────────────────┘ -``` - - -## getMacro - -自 v20.1 引入 - -返回服务器配置文件中某个宏的值。 -宏在配置文件的 [``](/operations/server-configuration-parameters/settings#macros) 部分中定义,可用于在主机名较为复杂的情况下,通过便捷的名称区分不同服务器。 -如果在分布式表的上下文中执行该函数,它会生成一个常规列,其中包含对应每个分片的值。 - -**语法** - -```sql -getMacro(name) -``` - -**参数** - -* `name` — 要检索的宏名称。[`const String`](/sql-reference/data-types/string) - -**返回值** - -返回指定宏的值。[`String`](/sql-reference/data-types/string) - -**示例** - -**基本用法** - -```sql title=Query -SELECT getMacro('test'); -``` - -```response title=Response -┌─getMacro('test')─┐ -│ Value │ -└──────────────────┘ -``` - - -## getMaxTableNameLengthForDatabase - -自 v 版起引入。 - -返回指定数据库中表名的最大长度。 - -**语法** - -```sql -getMaxTableNameLengthForDatabase(database_name) -``` - -**参数** - -* `database_name` — 指定数据库的名称。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回最大表名长度,类型为 Integer。 - -**示例** - -**典型示例** - -```sql title=Query -SELECT getMaxTableNameLengthForDatabase('default'); -``` - -```response title=Response -┌─getMaxTableNameLengthForDatabase('default')─┐ - │ 206 │ - └─────────────────────────────────────────────┘ -``` - - -## getMergeTreeSetting - -自 v25.6 起引入 - -返回当前 MergeTree 设置的值。 - -**语法** - -```sql -getMergeTreeSetting(setting_name) -``` - -**参数** - -* `setting_name` — 设置名。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回该 MergeTree 设置的当前值。 - -**示例** - -**用法示例** - -```sql title=Query -SELECT getMergeTreeSetting('index_granularity'); -``` - -```response title=Response -┌─getMergeTreeSetting('index_granularity')─┐ -│ 8192 │ -└──────────────────────────────────────────┘ -``` - - -## getOSKernelVersion - -自 v21.11 引入 - -返回一个包含操作系统内核版本的字符串。 - -**语法** - -```sql -getOSKernelVersion() -``` - -**参数** - -* 无。 - -**返回值** - -返回当前操作系统内核版本。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT getOSKernelVersion(); -``` - -```response title=Response -┌─getOSKernelVersion()────┐ -│ Linux 4.15.0-55-generic │ -└─────────────────────────┘ -``` - - -## getServerPort - -自 v21.10 起引入 - -返回给定协议对应的服务器的端口号。 - -**语法** - -```sql -getServerPort(port_name) -``` - -**参数** - -* `port_name` — 端口名称。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回服务器端口号。[`UInt16`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT getServerPort('tcp_port'); -``` - -```response title=Response -┌─getServerPort('tcp_port')─┐ -│ 9000 │ -└───────────────────────────┘ -``` - - -## getServerSetting - -自 v25.6 起引入 - -返回给定服务器设置名称对应的当前值。 - -**语法** - -```sql -getServerSetting(setting_name') -``` - -**参数** - -* `setting_name` — 服务器设置的名称。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回该服务器设置的当前值。[`Any`](/sql-reference/data-types) - -**示例** - -**用法示例** - -```sql title=Query -SELECT getServerSetting('allow_use_jemalloc_memory'); -``` - -```response title=Response -┌─getServerSetting('allow_use_jemalloc_memory')─┐ -│ true │ -└───────────────────────────────────────────────┘ -``` - - -## getSetting - -引入于:v20.7 - -返回当前设置的值。 - -**语法** - -```sql -getSetting(setting_name) -``` - -**参数** - -* `setting_Name` — 设置名称。[`const String`](/sql-reference/data-types/string) - -**返回值** - -返回该设置的当前值。[`Any`](/sql-reference/data-types) - -**示例** - -**使用示例** - -```sql title=Query -SELECT getSetting('enable_analyzer'); -SET enable_analyzer = false; -SELECT getSetting('enable_analyzer'); -``` - -```response title=Response -┌─getSetting('⋯_analyzer')─┐ -│ true │ -└──────────────────────────┘ -┌─getSetting('⋯_analyzer')─┐ -│ false │ -└──────────────────────────┘ -``` - - -## getSettingOrDefault - -自 v24.10 起引入 - -返回某个设置的当前值;如果在当前配置文件中未设置该参数,则返回第二个参数中指定的默认值。 - -**语法** - -```sql -getSettingOrDefault(setting_name, default_value) -``` - -**参数** - -* `setting_name` — 设置名称。[`String`](/sql-reference/data-types/string) -* `default_value` — 当未设置 `custom_setting` 时返回的值。该值可以是任意数据类型的值或 Null。 - -**返回值** - -返回指定设置的当前值;如果未设置该设置,则返回 `default_value`。 - -**示例** - -**用法示例** - -```sql title=Query -SELECT getSettingOrDefault('custom_undef1', 'my_value'); -SELECT getSettingOrDefault('custom_undef2', 100); -SELECT getSettingOrDefault('custom_undef3', NULL); -``` - -```response title=Response -my_value -100 -NULL -``` - - -## getSizeOfEnumType - -自 v1.1 起引入 - -返回给定 [`Enum`](../../sql-reference/data-types/enum.md) 中字段的数量。 - -**语法** - -```sql -getSizeOfEnumType(x) -``` - -**参数** - -* `x` — `Enum` 类型的值。[`Enum`](/sql-reference/data-types/enum) - -**返回值** - -返回 `Enum` 类型输入值的字段数量。[`UInt8/16`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT getSizeOfEnumType(CAST('a' AS Enum8('a' = 1, 'b' = 2))) AS x; -``` - -```response title=Response -┌─x─┐ -│ 2 │ -└───┘ -``` - - -## getSubcolumn - -引入版本:v - -接收表达式或标识符,以及一个指定子列名称的常量字符串。 - -返回从该表达式中提取的指定子列。 - -**语法** - -```sql -``` - -**参数** - -* 无。 - -**返回值** - -**示例** - -**getSubcolumn** - -```sql title=Query -SELECT getSubcolumn(array_col, 'size0'), getSubcolumn(tuple_col, 'elem_name') -``` - -```response title=Response -``` - - -## getTypeSerializationStreams - -自 v22.6 起引入 - -枚举某个数据类型的流路径。 -该函数主要用于开发场景。 - -**语法** - -```sql -getTypeSerializationStreams(col) -``` - -**参数** - -* `col` — 列,或用于从中确定数据类型的数据类型字符串表示形式。[`Any`](/sql-reference/data-types) - -**返回值** - -返回一个包含所有序列化子流路径的数组。[`Array(String)`](/sql-reference/data-types/array) - -**示例** - -**tuple** - -```sql title=Query -SELECT getTypeSerializationStreams(tuple('a', 1, 'b', 2)) -``` - -```response title=Response -['{TupleElement(1), Regular}','{TupleElement(2), Regular}','{TupleElement(3), Regular}','{TupleElement(4), Regular}'] -``` - -**映射** - -```sql title=Query -SELECT getTypeSerializationStreams('Map(String, Int64)') -``` - -```response title=Response -['{ArraySizes}','{ArrayElements, TupleElement(keys), Regular}','{ArrayElements, TupleElement(values), Regular}'] -``` - - -## globalVariable - -引入自:v20.5 - -接受一个常量字符串参数,并返回具有该名称的全局变量的值。此函数仅用于与 MySQL 的兼容性,对 ClickHouse 的正常运行既非必需,也无实际用途。仅定义了少量占位用的全局变量。 - -**语法** - -```sql -globalVariable(name) -``` - -**参数** - -* `name` — 全局变量名称。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回名为 `name` 的全局变量的值。[`Any`](/sql-reference/data-types) - -**示例** - -**globalVariable** - -```sql title=Query -SELECT globalVariable('max_allowed_packet') -``` - -```response title=Response -67108864 -``` - - -## hasColumnInTable - -自 v1.1 引入 - -检查数据库表中是否存在指定列。 -对于嵌套数据结构中的元素,函数会检查相应列是否存在。 -如果传入的是嵌套数据结构本身,函数返回 `0`。 - -**语法** - -```sql -hasColumnInTable([hostname[, username[, password]],]database, table, column) -``` - -**参数** - -* `database` — 数据库名称。[`const String`](/sql-reference/data-types/string) -* `table` — 表名。[`const String`](/sql-reference/data-types/string) -* `column` — 列名。[`const String`](/sql-reference/data-types/string) -* `hostname` — 可选。要在其上执行检查的远程服务器名称。[`const String`](/sql-reference/data-types/string) -* `username` — 可选。远程服务器的用户名。[`const String`](/sql-reference/data-types/string) -* `password` — 可选。远程服务器的密码。[`const String`](/sql-reference/data-types/string) - -**返回值** - -如果指定列存在则返回 `1`,否则返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**检查已存在的列** - -```sql title=Query -SELECT hasColumnInTable('system','metrics','metric') -``` - -```response title=Response -1 -``` - -**检查不存在的列** - -```sql title=Query -SELECT hasColumnInTable('system','metrics','non-existing_column') -``` - -```response title=Response -0 -``` - - -## hasThreadFuzzer - -引入版本:v20.6 - -返回是否启用了线程模糊测试(thread fuzzer)。 -此函数仅用于测试和调试。 - -**语法** - -```sql -hasThreadFuzzer() -``` - -**参数** - -* 无。 - -**返回值** - -返回 Thread Fuzzer 是否有效。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**检查 Thread Fuzzer 状态** - -```sql title=Query -SELECT hasThreadFuzzer() -``` - -```response title=Response -┌─hasThreadFuzzer()─┐ -│ 0 │ -└───────────────────┘ -``` - - -## hostName - -自 v20.5 起引入 - -返回执行该函数的主机名称。 -如果函数在远程服务器上执行(分布式处理),则返回远程服务器的名称。 -如果函数在分布式表的上下文中执行,则会生成一个普通列,其中的值对应各个分片。 -否则,它会返回一个常量值。 - -**语法** - -```sql -hostName() -``` - -**别名**: `hostname` - -**参数** - -* 无 - -**返回值** - -返回主机名。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT hostName() -``` - -```response title=Response -┌─hostName()─┐ -│ clickhouse │ -└────────────┘ -``` - - -## icebergBucket - -自 v25.5 起引入。 - -实现了 [iceberg bucket transform](https://iceberg.apache.org/spec/#bucket-transform-details.) 的逻辑。 - -**语法** - -```sql -icebergBucket(N, value) -``` - -**参数** - -* `N` — 桶的数量(模数)。[`const (U)Int*`](/sql-reference/data-types/int-uint) -* `value` — 要转换的源值。可以是 [`(U)Int*`](/sql-reference/data-types/int-uint)、[`Bool`](/sql-reference/data-types/boolean)、[`Decimal`](/sql-reference/data-types/decimal)、[`Float*`](/sql-reference/data-types/float)、[`String`](/sql-reference/data-types/string)、[`FixedString`](/sql-reference/data-types/fixedstring)、[`UUID`](/sql-reference/data-types/uuid)、[`Date`](/sql-reference/data-types/date)、[`Time`](/sql-reference/data-types/time) 或 [`DateTime`](/sql-reference/data-types/datetime) - -**返回值** - -返回源值的 32 位哈希值。[`Int32`](/sql-reference/data-types/int-uint) - -**示例** - -**示例** - -```sql title=Query -SELECT icebergBucket(5, 1.0 :: Float32) -``` - -```response title=Response -4 -``` - - -## icebergTruncate - -自 v25.3 引入 - -实现 Iceberg 截断转换(truncate transform)的逻辑:[https://iceberg.apache.org/spec/#truncate-transform-details](https://iceberg.apache.org/spec/#truncate-transform-details)。 - -**语法** - -```sql -icebergTruncate(N, value) -``` - -**参数** - -* `value` — 要进行转换的值。[`String`](/sql-reference/data-types/string) 或 [`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Decimal`](/sql-reference/data-types/decimal) - -**返回值** - -返回与参数相同的类型 - -**示例** - -**示例** - -```sql title=Query -SELECT icebergTruncate(3, 'iceberg') -``` - -```response title=Response -ice -``` - - -## identity - -Introduced in: v1.1 - -此函数返回传入的参数,对调试和测试很有用。通过它,你可以绕过索引的使用,从而观察全表扫描时的性能。查询分析器在查找可用索引时会忽略 `identity` 函数内部的所有内容,并且还会禁用常量折叠优化。 - -**Syntax** - -```sql -identity(x) -``` - -**参数** - -* `x` — 输入值。[`Any`](/sql-reference/data-types) - -**返回值** - -返回输入值本身。[`Any`](/sql-reference/data-types) - -**示例** - -**用法示例** - -```sql title=Query -SELECT identity(42) -``` - -```response title=Response -42 -``` - - -## ignore - -在 v1.1 中引入 - -接受任意参数并无条件返回 `0`。 - -**语法** - -```sql -ignore(x) -``` - -**参数** - -* `x` — 一个输入值,不会被实际使用,仅用于避免语法错误。[`Any`](/sql-reference/data-types) - -**返回值** - -始终返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT ignore(0, 'ClickHouse', NULL) -``` - -```response title=Response -┌─ignore(0, 'ClickHouse', NULL)─┐ -│ 0 │ -└───────────────────────────────┘ -``` - - -## indexHint - -引入版本:v1.1 - -此函数用于调试和内部分析。 -它会忽略其参数并始终返回 1。 -这些参数不会被求值。 - -但在索引分析期间,系统会假定此函数的参数并未被 `indexHint` 包裹。 -这使得可以根据相应条件在索引范围内选取数据,但之后不再按照该条件进行进一步过滤。 -由于 ClickHouse 中的索引是稀疏索引,使用 `indexHint` 将会返回比直接指定相同条件更多的数据。 - -**语法** - -```sql -indexHint(表达式) -``` - -**参数** - -* `expression` — 用于索引范围选择的任意表达式。[`Expression`](/sql-reference/data-types/special-data-types/expression) - -**返回值** - -在所有情况下均返回 `1`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**带日期过滤的用法示例** - -```sql title=Query -SELECT FlightDate AS k, count() FROM ontime WHERE indexHint(k = '2025-09-15') GROUP BY k ORDER BY k ASC; -``` - -```response title=Response -┌──────────k─┬─count()─┐ -│ 2025-09-14 │ 7071 │ -│ 2025-09-15 │ 16428 │ -│ 2025-09-16 │ 1077 │ -│ 2025-09-30 │ 8167 │ -└────────────┴─────────┘ -``` - - -## initialQueryID - -引入于:v1.1 - -返回当前初始查询的 ID。 -查询的其他参数可以从 [`system.query_log`](../../operations/system-tables/query_log.md) 表中的 `initial_query_id` 字段中获取。 - -不同于 [`queryID`](/sql-reference/functions/other-functions#queryID) 函数,`initialQueryID` 在不同分片上返回相同的结果。 - -**语法** - -```sql -initialQueryID() -``` - -**别名**: `initial_query_id` - -**参数** - -* 无。 - -**返回值** - -返回当前查询的初始 ID。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -CREATE TABLE tmp (str String) ENGINE = Log; -INSERT INTO tmp (*) VALUES ('a'); -SELECT count(DISTINCT t) FROM (SELECT initialQueryID() AS t FROM remote('127.0.0.{1..3}', currentDatabase(), 'tmp') GROUP BY queryID()); -``` - -```response title=Response -┌─count(DISTINCT t)─┐ -│ 1 │ -└───────────────────┘ -``` - - -## initialQueryStartTime - -引入于:v25.4 - -返回当前初始查询的开始时间。 -`initialQueryStartTime` 在不同分片上返回相同的结果。 - -**语法** - -```sql -initialQueryStartTime() -``` - -**别名**:`initial_query_start_time` - -**参数** - -* 无。 - -**返回值** - -返回当前查询的初始开始时间。[`DateTime`](/sql-reference/data-types/datetime) - -**示例** - -**用法示例** - -```sql title=Query -CREATE TABLE tmp (str String) ENGINE = Log; -INSERT INTO tmp (*) VALUES ('a'); -SELECT count(DISTINCT t) FROM (SELECT initialQueryStartTime() AS t FROM remote('127.0.0.{1..3}', currentDatabase(), 'tmp') GROUP BY queryID()); -``` - -```response title=Response -┌─count(DISTINCT t)─┐ -│ 1 │ -└───────────────────┘ -``` - - -## initializeAggregation - -引入自:v20.6 - -基于单个值计算聚合函数的结果。 -此函数可用于初始化带有组合器 [-State](../../sql-reference/aggregate-functions/combinators.md#-state) 的聚合函数。 -你可以创建聚合函数的状态并将其插入到 [`AggregateFunction`](../../sql-reference/data-types/aggregatefunction.md) 类型的列中,或将已初始化的聚合值用作默认值。 - -**语法** - -```sql -initializeAggregation(aggregate_function, arg1[, arg2, ...]) -``` - -**参数** - -* `aggregate_function` — 要初始化的聚合函数的名称。[`String`](/sql-reference/data-types/string) -* `arg1[, arg2, ...]` — 聚合函数的参数。[`Any`](/sql-reference/data-types) - -**返回值** - -对传递给函数的每一行返回其聚合结果。返回类型与 `initializeAggregation` 的第一个参数所指定函数的返回类型相同。[`Any`](/sql-reference/data-types) - -**示例** - -**uniqState 的基本用法** - -```sql title=Query -SELECT uniqMerge(state) FROM (SELECT initializeAggregation('uniqState', number % 3) AS state FROM numbers(10000)); -``` - -```response title=Response -┌─uniqMerge(state)─┐ -│ 3 │ -└──────────────────┘ -``` - -**与 sumState 和 finalizeAggregation 搭配使用** - -```sql title=Query -SELECT finalizeAggregation(state), toTypeName(state) FROM (SELECT initializeAggregation('sumState', number % 3) AS state FROM numbers(5)); -``` - -```response title=Response -┌─finalizeAggregation(state)─┬─toTypeName(state)─────────────┐ -│ 0 │ AggregateFunction(sum, UInt8) │ -│ 1 │ AggregateFunction(sum, UInt8) │ -│ 2 │ AggregateFunction(sum, UInt8) │ -│ 0 │ AggregateFunction(sum, UInt8) │ -│ 1 │ AggregateFunction(sum, UInt8) │ -└────────────────────────────┴───────────────────────────────┘ -``` - - -## isConstant - -引入版本:v20.3 - -返回其参数是否为常量表达式。 -常量表达式是在查询分析阶段(即执行之前)其结果已知的表达式。 -例如,仅由 [字面量](/sql-reference/syntax#literals) 组成的表达式就是常量表达式。 -此函数主要用于开发、调试和演示。 - -**语法** - -```sql -isConstant(x) -``` - -**参数** - -* `x` — 待检查的表达式。[`Any`](/sql-reference/data-types) - -**返回值** - -如果 `x` 为常量,则返回 `1`;如果 `x` 为非常量,则返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**常量表达式** - -```sql title=Query -SELECT isConstant(x + 1) -FROM (SELECT 43 AS x) -``` - -```response title=Response -┌─isConstant(plus(x, 1))─┐ -│ 1 │ -└────────────────────────┘ -``` - -**包含函数的常量** - -```sql title=Query -WITH 3.14 AS pi -SELECT isConstant(cos(pi)) -``` - -```response title=Response -┌─isConstant(cos(pi))─┐ -│ 1 │ -└─────────────────────┘ -``` - -**非常量表达式** - -```sql title=Query -SELECT isConstant(number) -FROM numbers(1) -``` - -```response title=Response -┌─isConstant(number)─┐ -│ 0 │ -└────────────────────┘ -``` - -**now() 函数的行为** - -```sql title=Query -SELECT isConstant(now()) -``` - -```response title=Response -┌─isConstant(now())─┐ -│ 1 │ -└───────────────────┘ -``` - - -## isDecimalOverflow - -引入版本:v20.8 - -检查一个十进制数的位数是否超出限制,从而无法在指定精度的 `Decimal` 数据类型中正确容纳。 - -**语法** - -```sql -isDecimalOverflow(value[, precision]) -``` - -**参数** - -* `value` — 要检查的十进制数值。[`Decimal`](/sql-reference/data-types/decimal) -* `precision` — 可选。Decimal 类型的精度。如果省略,则使用第一个参数的初始精度。[`UInt8`](/sql-reference/data-types/int-uint) - -**返回值** - -如果十进制数值的位数超过其精度允许的范围,则返回 `1`;如果十进制数值满足指定精度,则返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT isDecimalOverflow(toDecimal32(1000000000, 0), 9), - isDecimalOverflow(toDecimal32(1000000000, 0)), - isDecimalOverflow(toDecimal32(-1000000000, 0), 9), - isDecimalOverflow(toDecimal32(-1000000000, 0)); -``` - -```response title=Response -┌─isDecimalOverflow(toDecimal32(1000000000, 0), 9)─┬─isDecimalOverflow(toDecimal32(1000000000, 0))─┬─isDecimalOverflow(toDecimal32(-1000000000, 0), 9)─┬─isDecimalOverflow(toDecimal32(-1000000000, 0))─┐ -│ 1 │ 1 │ 1 │ 1 │ -└──────────────────────────────────────────────────┴───────────────────────────────────────────────┴───────────────────────────────────────────────────┴────────────────────────────────────────────────┘ -``` - - -## joinGet - -自 v18.16 起引入 - -允许以与使用字典相同的方式从表中提取数据。 -使用指定的 join 键从 Join 引擎表中获取数据。 - -:::note -仅支持使用 `ENGINE = Join(ANY, LEFT, )` [语句](/engines/table-engines/special/join) 创建的表。 -::: - -**语法** - -```sql -joinGet(join_storage_table_name, value_column, join_keys) -``` - -**参数** - -* `join_storage_table_name` — 指示在何处执行查找的标识符。该标识符会在默认数据库中查找(参见配置文件中的 `default_database` 参数)。如需覆盖默认数据库,请使用 `USE database_name` 查询,或者通过点号同时指定数据库和表,例如 `database_name.table_name`。[`String`](/sql-reference/data-types/string) -* `value_column` — 包含所需数据的表列名。[`const String`](/sql-reference/data-types/string) -* `join_keys` — join 键列表。[`Any`](/sql-reference/data-types) - -**返回值** - -返回与键列表对应的值列表。[`Any`](/sql-reference/data-types) - -**示例** - -**用法示例** - -```sql title=Query -CREATE TABLE db_test.id_val(`id` UInt32, `val` UInt32) ENGINE = Join(ANY, LEFT, id); -INSERT INTO db_test.id_val VALUES (1,11)(2,12)(4,13); - -SELECT joinGet(db_test.id_val, 'val', toUInt32(1)); -``` - -```response title=Response -┌─joinGet(db_test.id_val, 'val', toUInt32(1))─┐ -│ 11 │ -└─────────────────────────────────────────────┘ -``` - -**在当前数据库中表的用法** - -```sql title=Query -USE db_test; -SELECT joinGet(id_val, 'val', toUInt32(2)); -``` - -```response title=Response -┌─joinGet(id_val, 'val', toUInt32(2))─┐ -│ 12 │ -└─────────────────────────────────────┘ -``` - -**将数组用作 JOIN 键** - -```sql title=Query -CREATE TABLE some_table (id1 UInt32, id2 UInt32, name String) ENGINE = Join(ANY, LEFT, id1, id2); -INSERT INTO some_table VALUES (1, 11, 'a') (2, 12, 'b') (3, 13, 'c'); - -SELECT joinGet(some_table, 'name', 1, 11); -``` - -```response title=Response -┌─joinGet(some_table, 'name', 1, 11)─┐ -│ a │ -└────────────────────────────────────┘ -``` - - -## joinGetOrNull - -自 v20.4 版本引入 - -允许以与字典相同的方式从表中提取数据。 -使用指定的连接键从 Join 表中获取数据。 -与 [`joinGet`](#joinGet) 不同,当键不存在时返回 `NULL`。 - -:::note -仅支持使用 `ENGINE = Join(ANY, LEFT, )` [语句](/engines/table-engines/special/join) 创建的表。 -::: - -**语法** - -```sql -joinGetOrNull(join_storage_table_name, value_column, join_keys) -``` - -**参数** - -* `join_storage_table_name` — 指示在哪个位置执行查找的标识符。该标识符会在默认数据库中进行查找(参见配置文件中的参数 `default_database`)。若要覆盖默认数据库设置,请使用 `USE database_name` 查询,或者通过点号指定数据库和表,例如 `database_name.table_name`。[`String`](/sql-reference/data-types/string) -* `value_column` — 表中包含所需数据的列名。[`const String`](/sql-reference/data-types/string) -* `join_keys` — 连接键列表。[`Any`](/sql-reference/data-types) - -**返回值** - -返回与键列表相对应的值列表,如果未找到某个键则返回 `NULL`。[`Any`](/sql-reference/data-types) - -**示例** - -**使用示例** - -```sql title=Query -CREATE TABLE db_test.id_val(`id` UInt32, `val` UInt32) ENGINE = Join(ANY, LEFT, id); -INSERT INTO db_test.id_val VALUES (1,11)(2,12)(4,13); - -SELECT joinGetOrNull(db_test.id_val, 'val', toUInt32(1)), joinGetOrNull(db_test.id_val, 'val', toUInt32(999)); -``` - -```response title=Response -┌─joinGetOrNull(db_test.id_val, 'val', toUInt32(1))─┬─joinGetOrNull(db_test.id_val, 'val', toUInt32(999))─┐ -│ 11 │ ᴺᵁᴸᴸ │ -└───────────────────────────────────────────────────┴─────────────────────────────────────────────────────┘ -``` - - -## lowCardinalityIndices - -引入版本:v18.12 - -返回 [LowCardinality](../data-types/lowcardinality.md) 列中某个值在字典中的位置。位置从 1 开始计数。由于 LowCardinality 列为每个数据部分(part)维护独立字典,因此对于相同的值,此函数在不同数据部分中可能返回不同的位置。 - -**语法** - -```sql -lowCardinalityIndices(col) -``` - -**参数** - -* `col` — 一个低基数列。[`LowCardinality`](/sql-reference/data-types/lowcardinality) - -**返回值** - -该值在当前数据部分字典中的位置。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -DROP TABLE IF EXISTS test; -CREATE TABLE test (s LowCardinality(String)) ENGINE = Memory; - --- 创建两个部分: - -INSERT INTO test VALUES ('ab'), ('cd'), ('ab'), ('ab'), ('df'); -INSERT INTO test VALUES ('ef'), ('cd'), ('ab'), ('cd'), ('ef'); - -SELECT s, lowCardinalityIndices(s) FROM test; -``` - -```response title=Response -┌─s──┬─lowCardinalityIndices(s)─┐ -│ ab │ 1 │ -│ cd │ 2 │ -│ ab │ 1 │ -│ ab │ 1 │ -│ df │ 3 │ -└────┴──────────────────────────┘ -┌─s──┬─lowCardinalityIndices(s)─┐ -│ ef │ 1 │ -│ cd │ 2 │ -│ ab │ 3 │ -│ cd │ 2 │ -│ ef │ 1 │ -└────┴──────────────────────────┘ -``` - - -## lowCardinalityKeys - -引入版本:v18.12 - -返回 [LowCardinality](../data-types/lowcardinality.md) 列的字典中的值。 -如果数据块大小小于或大于字典大小,结果将会被截断或使用默认值进行扩展。 -由于 LowCardinality 为每个数据部分维护独立的字典,此函数在不同数据部分中可能返回不同的字典值。 - -**语法** - -```sql -lowCardinalityKeys(col) -``` - -**参数** - -* `col` — 低基数列。[`LowCardinality`](/sql-reference/data-types/lowcardinality) - -**返回值** - -返回字典键。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**lowCardinalityKeys** - -```sql title=Query -DROP TABLE IF EXISTS test; -CREATE TABLE test (s LowCardinality(String)) ENGINE = Memory; - --- 创建两个部分: - -INSERT INTO test VALUES ('ab'), ('cd'), ('ab'), ('ab'), ('df'); -INSERT INTO test VALUES ('ef'), ('cd'), ('ab'), ('cd'), ('ef'); - -SELECT s, lowCardinalityKeys(s) FROM test; -``` - -```response title=Response -┌─s──┬─lowCardinalityKeys(s)─┐ -│ ef │ │ -│ cd │ ef │ -│ ab │ cd │ -│ cd │ ab │ -│ ef │ │ -└────┴───────────────────────┘ -┌─s──┬─lowCardinalityKeys(s)─┐ -│ ab │ │ -│ cd │ ab │ -│ ab │ cd │ -│ ab │ df │ -│ df │ │ -└────┴───────────────────────┘ -``` - - -## materialize - -引入版本:v1.1 - -将常量转换为包含单个值的完整列。 -完整列和常量在内存中的表示方式不同。 -函数通常会针对普通(非常量)参数和常量参数执行不同的代码,尽管结果通常应当相同。 -此函数可用于调试此类行为。 - -**语法** - -```sql -materialize(x) -``` - -**参数** - -* `x` — 常量。[`Any`](/sql-reference/data-types) - -**返回值** - -返回一整列都为该常量值的列。[`Any`](/sql-reference/data-types) - -**示例** - -**用法示例** - -```sql title=Query --- 在下面的示例中,`countMatches` 函数要求第二个参数必须为常量。 --- 可以通过使用 `materialize` 函数将常量转换为完整列来调试此行为, --- 以验证该函数在接收非常量参数时会抛出错误。 - -SELECT countMatches('foobarfoo', 'foo'); -SELECT countMatches('foobarfoo', materialize('foo')); -``` - -```response title=Response -2 -代码: 44. DB::Exception: 从 localhost:9000 接收。DB::Exception: 函数 countMatches 的第 2 个参数 'pattern' 类型非法,期望常量字符串,实际得到字符串 -``` - - -## minSampleSizeContinuous - -自 v23.10 版本引入 - -用于在 A/B 测试中,当比较两个样本之间某个连续型指标的均值时,计算所需的最小样本量。 - -使用[这篇文章](https://towardsdatascience.com/required-sample-size-for-a-b-testing-6f6608dd330a)中描述的公式。 -假设实验组和对照组的样本量相同。 -返回单个组所需的样本量(即整个实验所需的总样本量为返回值的两倍)。 -同时假设该指标在实验组和对照组中的方差相同。 - -**语法** - -```sql -minSampleSizeContinuous(baseline, sigma, mde, power, alpha) -``` - -**别名**: `minSampleSizeContinous` - -**参数** - -* `baseline` — 指标的基线值。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) -* `sigma` — 指标的基线标准差。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) -* `mde` — 相对于基线值的最小可检出效应(MDE),以百分比表示(例如,对于基线值 112.25,MDE 为 0.03 时表示期望变化为 112.25 ± 112.25*0.03)。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) -* `power` — 检验所需的统计功效(1 - II 型错误概率)。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) -* `alpha` — 检验所需的显著性水平(I 型错误概率)。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) - -**返回值** - -返回一个包含 3 个元素的命名 Tuple:`minimum_sample_size`、`detect_range_lower` 和 `detect_range_upper`。它们分别表示:所需的样本量;在该样本量下不可检测的取值范围的下界,计算为 `baseline * (1 - mde)`;以及在该样本量下不可检测的取值范围的上界,计算为 `baseline * (1 + mde)`(Float64)。[`Tuple(Float64, Float64, Float64)`](/sql-reference/data-types/tuple) - -**示例** - -**minSampleSizeContinuous** - -```sql title=Query -SELECT minSampleSizeContinuous(112.25, 21.1, 0.03, 0.80, 0.05) AS sample_size -``` - -```response title=Response -(616.2931945826209,108.8825,115.6175) -``` - - -## minSampleSizeConversion - -自 v22.6 引入 - -计算在 A/B 测试中比较两个样本转化率(比例)时所需的最小样本量。 - -使用[这篇文章](https://towardsdatascience.com/required-sample-size-for-a-b-testing-6f6608dd330a)中描述的公式。假设实验组和对照组的样本量相等。返回的是单个组别所需的样本量(即整个实验所需的总样本量是返回值的两倍)。 - -**语法** - -```sql -minSampleSizeConversion(baseline, mde, power, alpha) -``` - -**参数** - -* `baseline` — 基线转化率。[`Float*`](/sql-reference/data-types/float) -* `mde` — 最小可检测效应(MDE),以百分点表示(例如,对于基线转化率 0.25,MDE 为 0.03 表示预期变化为 0.25 ± 0.03)。[`Float*`](/sql-reference/data-types/float) -* `power` — 检验所需的统计功效(1 - Ⅱ类错误的概率)。[`Float*`](/sql-reference/data-types/float) -* `alpha` — 检验所需的显著性水平(Ⅰ类错误的概率)。[`Float*`](/sql-reference/data-types/float) - -**返回值** - -返回一个包含 3 个元素的具名 Tuple:`minimum_sample_size`、`detect_range_lower`、`detect_range_upper`。它们分别表示:所需的样本量;在该样本量下无法检测到的取值范围的下界,计算公式为 `baseline - mde`;在该样本量下无法检测到的取值范围的上界,计算公式为 `baseline + mde`。[`Tuple(Float64, Float64, Float64)`](/sql-reference/data-types/tuple) - -**示例** - -**minSampleSizeConversion** - -```sql title=Query -SELECT minSampleSizeConversion(0.25, 0.03, 0.80, 0.05) AS sample_size -``` - -```response title=Response -(3396.077603219163,0.22,0.28) -``` - - -## neighbor - -引入于:v20.1 - -从当前行所在列中按指定偏移量返回一个值。 -该函数已被弃用且容易出错,因为它基于数据块的物理顺序进行操作,而这可能与用户期望的逻辑顺序不一致。 -建议改用标准的窗口函数。 - -可以通过设置 `allow_deprecated_error_prone_window_functions = 1` 来启用该函数。 - -**语法** - -```sql -neighbor(column, offset[, default_value]) -``` - -**参数** - -* `column` — 源数据列。[`Any`](/sql-reference/data-types) -* `offset` — 相对于当前行的偏移量。正值向前偏移,负值向后偏移。[`Integer`](/sql-reference/data-types/int-uint) -* `default_value` — 可选。当偏移超出数据范围时返回的值。如果未指定,则使用该列类型的默认值。[`Any`](/sql-reference/data-types) - -**返回值** - -从指定偏移位置返回一个值;若超出范围则返回默认值。[`Any`](/sql-reference/data-types) - -**示例** - -**用法示例** - -```sql title=Query -SELECT number, neighbor(number, 2) FROM system.numbers LIMIT 10; -``` - -```response title=Response -┌─number─┬─neighbor(number, 2)─┐ -│ 0 │ 2 │ -│ 1 │ 3 │ -│ 2 │ 4 │ -│ 3 │ 5 │ -│ 4 │ 6 │ -│ 5 │ 7 │ -│ 6 │ 8 │ -│ 7 │ 9 │ -│ 8 │ 0 │ -│ 9 │ 0 │ -└────────┴─────────────────────┘ -``` - -**带有默认值** - -```sql title=Query -SELECT number, neighbor(number, 2, 999) FROM system.numbers LIMIT 10; -``` - -```response title=Response -┌─number─┬─neighbor(number, 2, 999)─┐ -│ 0 │ 2 │ -│ 1 │ 3 │ -│ 2 │ 4 │ -│ 3 │ 5 │ -│ 4 │ 6 │ -│ 5 │ 7 │ -│ 6 │ 8 │ -│ 7 │ 9 │ -│ 8 │ 999 │ -│ 9 │ 999 │ -└────────┴──────────────────────────┘ -``` - - -## nested - -引入版本:v - -这是 ClickHouse 引擎内部使用的函数,不用于直接调用。 - -返回由多个数组组合而成的元组数组。 - -第一个参数必须是一个 `String` 类型的常量数组,用于指定结果 `Tuple` 的名称。 -其余参数必须是大小相同的数组。 - -**语法** - -```sql -``` - -**参数** - -* 无 - -**返回值** - -**示例** - -**nested** - -```sql title=Query -SELECT nested(['keys', 'values'], ['key_1', 'key_2'], ['value_1','value_2']) -``` - -```response title=Response -``` - - -## normalizeQuery - -自 v20.8 起引入 - -将字面量、字面量序列以及复杂别名(包含空格、包含多于两位的数字,或长度至少为 36 字节(例如 UUID))替换为占位符 `?`。 - -**语法** - -```sql -normalizeQuery(x) -``` - -**参数** - -* `x` — 字符序列。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回包含占位符的给定字符序列。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT normalizeQuery('[1, 2, 3, x]') AS query -``` - -```response title=Response -┌─query────┐ -│ [?.., x] │ -└──────────┘ -``` - - -## normalizeQueryKeepNames - -自 v21.2 引入 - -将字面量及其序列替换为占位符 `?`,但不会替换复杂别名(例如包含空格、包含超过两位数字,或长度至少为 36 字节的值,如 UUID)。 -这有助于更好地分析复杂的查询日志。 - -**语法** - -```sql -normalizeQueryKeepNames(x) -``` - -**参数** - -* `x` — 字符序列。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回带有占位符的给定字符序列。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT normalizeQuery('SELECT 1 AS aComplexName123'), normalizeQueryKeepNames('SELECT 1 AS aComplexName123') -``` - -```response title=Response -┌─normalizeQuery('SELECT 1 AS aComplexName123')─┬─normalizeQueryKeepNames('SELECT 1 AS aComplexName123')─┐ -│ SELECT ? AS `?` │ SELECT ? AS aComplexName123 │ -└───────────────────────────────────────────────┴────────────────────────────────────────────────────────┘ -``` - - -## normalizedQueryHash - -自 v20.8 起提供 - -对相似的查询,在忽略字面量取值的情况下返回相同的 64 位哈希值。 -可用于分析查询日志。 - -**语法** - -```sql -normalizedQueryHash(x) -``` - -**参数** - -* `x` — 字符序列。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回一个 64 位哈希值。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT normalizedQueryHash('SELECT 1 AS `xyz`') != normalizedQueryHash('SELECT 1 AS `abc`') AS res -``` - -```response title=Response -┌─res─┐ -│ 1 │ -└─────┘ -``` - - -## normalizedQueryHashKeepNames - -引入于:v21.2 - -与 [`normalizedQueryHash`](#normalizedQueryHash) 类似,它在不考虑字面量具体取值的情况下,为相似查询返回相同的 64 位哈希值,但不同的是,在哈希计算前,它不会将复杂别名(包含空白字符、超过两位数字,或长度至少为 36 字节(例如 UUID))替换为占位符。 -可用于分析查询日志。 - -**语法** - -```sql -normalizedQueryHashKeepNames(x) -``` - -**参数** - -* `x` — 字符序列。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回一个 64 位哈希值。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT normalizedQueryHash('SELECT 1 AS `xyz123`') != normalizedQueryHash('SELECT 1 AS `abc123`') AS normalizedQueryHash; -SELECT normalizedQueryHashKeepNames('SELECT 1 AS `xyz123`') != normalizedQueryHashKeepNames('SELECT 1 AS `abc123`') AS normalizedQueryHashKeepNames; -``` - -```response title=Response -┌─normalizedQueryHash─┐ -│ 0 │ -└─────────────────────┘ -┌─normalizedQueryHashKeepNames─┐ -│ 1 │ -└──────────────────────────────┘ -``` - - -## parseReadableSize - -自 v24.6 起可用 - -给定一个包含字节大小及其单位(如 `B`、`KiB`、`KB`、`MiB`、`MB` 等,即符合 [ISO/IEC 80000-13](https://en.wikipedia.org/wiki/ISO/IEC_80000) 的二进制或十进制字节单位)的字符串,此函数返回对应的字节数。 -如果函数无法解析输入值,则会抛出异常。 - -此函数的逆操作为 [`formatReadableSize`](#formatReadableSize) 和 [`formatReadableDecimalSize`](#formatReadableDecimalSize)。 - -**语法** - -```sql -parseReadableSize(x) -``` - -**参数** - -* `x` — 使用 ISO/IEC 80000-13 或十进制字节单位表示的可读大小。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回字节数,向上取整为整数。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT arrayJoin(['1 B', '1 KiB', '3 MB', '5.314 KiB']) AS readable_sizes, parseReadableSize(readable_sizes) AS sizes; -``` - -```response title=Response -┌─readable_sizes─┬───sizes─┐ -│ 1 B │ 1 │ -│ 1 KiB │ 1024 │ -│ 3 MB │ 3000000 │ -│ 5.314 KiB │ 5442 │ -└────────────────┴─────────┘ -``` - - -## parseReadableSizeOrNull - -引入于:v24.6 - -给定一个包含字节大小和单位(如 `B`、`KiB`、`KB`、`MiB`、`MB` 等)的字符串(即符合 [ISO/IEC 80000-13](https://en.wikipedia.org/wiki/ISO/IEC_80000) 的或十进制的字节单位),该函数返回对应的字节数。 -如果函数无法解析输入值,则返回 `NULL`。 - -该函数的反向操作是 [`formatReadableSize`](#formatReadableSize) 和 [`formatReadableDecimalSize`](#formatReadableDecimalSize)。 - -**语法** - -```sql -parseReadableSizeOrNull(x) -``` - -**参数** - -* `x` — 使用 ISO/IEC 80000-13 或十进制字节单位表示的可读大小。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回字节数,向上取整到最近的整数;如果无法解析输入,则返回 `NULL`。[`Nullable(UInt64)`](/sql-reference/data-types/nullable) - -**示例** - -**使用示例** - -```sql title=Query -SELECT arrayJoin(['1 B', '1 KiB', '3 MB', '5.314 KiB', 'invalid']) AS readable_sizes, parseReadableSizeOrNull(readable_sizes) AS sizes; -``` - -```response title=Response -┌─readable_sizes─┬───sizes─┐ -│ 1 B │ 1 │ -│ 1 KiB │ 1024 │ -│ 3 MB │ 3000000 │ -│ 5.314 KiB │ 5442 │ -│ invalid │ ᴺᵁᴸᴸ │ -└────────────────┴─────────┘ -``` - - -## parseReadableSizeOrZero - -自 v24.6 引入 - -给定一个包含字节大小及其单位(如 `B`、`KiB`、`KB`、`MiB`、`MB` 等,即 [ISO/IEC 80000-13](https://en.wikipedia.org/wiki/ISO/IEC_80000) 或十进制字节单位)的字符串,此函数返回对应的字节数。 -如果函数无法解析输入值,则返回 `0`。 - -此函数的逆操作为 [`formatReadableSize`](#formatReadableSize) 和 [`formatReadableDecimalSize`](#formatReadableDecimalSize)。 - -**语法** - -```sql -parseReadableSizeOrZero(x) -``` - -**参数** - -* `x` — 使用 ISO/IEC 80000-13 或十进制字节单位表示的人类可读大小。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回按字节计的大小,向上取整到最接近的整数;如果无法解析输入则返回 `0`。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT arrayJoin(['1 B', '1 KiB', '3 MB', '5.314 KiB', 'invalid']) AS readable_sizes, parseReadableSizeOrZero(readable_sizes) AS sizes; -``` - -```response title=Response -┌─readable_sizes─┬───sizes─┐ -│ 1 B │ 1 │ -│ 1 KiB │ 1024 │ -│ 3 MB │ 3000000 │ -│ 5.314 KiB │ 5442 │ -│ invalid │ 0 │ -└────────────────┴─────────┘ -``` - - -## parseTimeDelta - -引入版本:v22.7 - -解析由一串数字后跟类似时间单位的标记组成的字符串。 - -时间间隔字符串使用以下时间单位表示: - -* `years`, `year`, `yr`, `y` -* `months`, `month`, `mo` -* `weeks`, `week`, `w` -* `days`, `day`, `d` -* `hours`, `hour`, `hr`, `h` -* `minutes`, `minute`, `min`, `m` -* `seconds`, `second`, `sec`, `s` -* `milliseconds`, `millisecond`, `millisec`, `ms` -* `microseconds`, `microsecond`, `microsec`, `μs`, `µs`, `us` -* `nanoseconds`, `nanosecond`, `nanosec`, `ns` - -可以使用分隔符(空格、`;`、`-`、`+`、`,`、`:`)组合多个时间单位。 - -年份和月份的长度为近似值:1 年为 365 天,1 个月为 30.5 天。 - -**语法** - -```sql -parseTimeDelta(timestr) -``` - -**参数** - -* `timestr` — 一串数字,后面跟着类似时间单位的标记。[`String`](/sql-reference/data-types/string) - -**返回值** - -以秒为单位的数值。[`Float64`](/sql-reference/data-types/float) - -**示例** - -**用法示例** - -```sql title=Query -SELECT parseTimeDelta('11s+22min') -``` - -```response title=Response -┌─parseTimeDelta('11s+22min')─┐ -│ 1331 │ -└─────────────────────────────┘ -``` - -**复合时间单位** - -```sql title=Query -SELECT parseTimeDelta('1yr2mo') -``` - -```response title=Response -┌─parseTimeDelta('1yr2mo')─┐ -│ 36806400 │ -└──────────────────────────┘ -``` - - -## partitionId - -自 v21.4 引入 - -计算[分区 ID](../../engines/table-engines/mergetree-family/custom-partitioning-key.md)。 - -:::note -此函数较慢,不应在大量行上调用。 -::: - -**语法** - -```sql -partitionId(column1[, column2, ...]) -``` - -**别名**: `partitionID` - -**参数** - -* `column1, column2, ...` — 要返回其分区 ID 的列。 - -**返回值** - -返回该行所属分区的 ID,类型为 [`String`](/sql-reference/data-types/string)。 - -**示例** - -**使用示例** - -```sql title=Query -DROP TABLE IF EXISTS tab; - -CREATE TABLE tab -( - i int, - j int -) -ENGINE = MergeTree -PARTITION BY i -ORDER BY tuple(); - -INSERT INTO tab VALUES (1, 1), (1, 2), (1, 3), (2, 4), (2, 5), (2, 6); - -SELECT i, j, partitionId(i), _partition_id FROM tab ORDER BY i, j; -``` - -```response title=Response -┌─i─┬─j─┬─partitionId(i)─┬─_partition_id─┐ -│ 1 │ 1 │ 1 │ 1 │ -│ 1 │ 2 │ 1 │ 1 │ -│ 1 │ 3 │ 1 │ 1 │ -│ 2 │ 4 │ 2 │ 2 │ -│ 2 │ 5 │ 2 │ 2 │ -│ 2 │ 6 │ 2 │ 2 │ -└───┴───┴────────────────┴───────────────┘ -``` - - -## queryID - -引入于:v21.9 - -返回当前查询的 ID。 -查询的其他参数可以从 [`system.query_log`](../../operations/system-tables/query_log.md) 表中的 `query_id` 字段中提取。 - -与 [`initialQueryID`](#initialQueryID) 函数不同,`queryID` 在不同分片上可能返回不同的结果。 - -**语法** - -```sql -queryID() -``` - -**别名**:`query_id` - -**参数** - -* 无。 - -**返回值** - -返回当前查询的 ID。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -CREATE TABLE tmp (str String) ENGINE = Log; -INSERT INTO tmp (*) VALUES ('a'); -SELECT count(DISTINCT t) FROM (SELECT queryID() AS t FROM remote('127.0.0.{1..3}', currentDatabase(), 'tmp') GROUP BY queryID()); -``` - -```response title=Response -┌─count(DISTINCT t)─┐ -│ 3 │ -└───────────────────┘ -``` - - -## revision - -引入版本:v22.7 - -返回当前 ClickHouse 服务器的修订版本号。 - -**语法** - -```sql -revision() -``` - -**参数** - -* 无。 - -**返回值** - -返回当前 ClickHouse 服务器的版本号。[`UInt32`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT revision() -``` - -```response title=Response -┌─revision()─┐ -│ 54485 │ -└────────────┘ -``` - - -## rowNumberInAllBlocks - -自 v1.1 版本引入 - -返回处理过程中每一行的唯一行号。 - -**语法** - -```sql -rowNumberInAllBlocks() -``` - -**参数** - -* 无。 - -**返回值** - -返回数据块中行的序号(从 `0` 开始)。类型为 [`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT rowNumberInAllBlocks() -FROM -( - SELECT * - FROM system.numbers_mt - LIMIT 10 -) -SETTINGS max_block_size = 2 -``` - -```response title=Response -┌─rowNumberInAllBlocks()─┐ -│ 0 │ -│ 1 │ -└────────────────────────┘ -┌─rowNumberInAllBlocks()─┐ -│ 4 │ -│ 5 │ -└────────────────────────┘ -┌─rowNumberInAllBlocks()─┐ -│ 2 │ -│ 3 │ -└────────────────────────┘ -┌─rowNumberInAllBlocks()─┐ -│ 6 │ -│ 7 │ -└────────────────────────┘ -┌─rowNumberInAllBlocks()─┐ -│ 8 │ -│ 9 │ -└────────────────────────┘ -``` - - -## rowNumberInBlock - -引入于:v1.1 - -在 `rowNumberInBlock` 处理的每个[块](../../development/architecture.md#block)中,返回当前行的行号。 - -在每个块中,返回的行号从 0 开始计数。 - -**语法** - -```sql -rowNumberInBlock() -``` - -**参数** - -* 无。 - -**返回值** - -返回数据块内行的序号,从 `0` 开始计数。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT rowNumberInBlock() -FROM -( - SELECT * - FROM system.numbers_mt - LIMIT 10 -) SETTINGS max_block_size = 2 -``` - -```response title=Response -┌─rowNumberInBlock()─┐ -│ 0 │ -│ 1 │ -└────────────────────┘ -┌─rowNumberInBlock()─┐ -│ 0 │ -│ 1 │ -└────────────────────┘ -┌─rowNumberInBlock()─┐ -│ 0 │ -│ 1 │ -└────────────────────┘ -┌─rowNumberInBlock()─┐ -│ 0 │ -│ 1 │ -└────────────────────┘ -┌─rowNumberInBlock()─┐ -│ 0 │ -│ 1 │ -└────────────────────┘ -``` - - -## runningAccumulate - -自 v1.1 起提供 - -对数据块中每一行累积计算聚合函数的状态。 - -:::warning 已弃用 -对于每个新的数据块,状态都会被重置。 -由于这种容易出错的行为,该函数已被弃用,建议改用[窗口函数](/sql-reference/window-functions)。 -可以通过设置 [`allow_deprecated_error_prone_window_functions`](/operations/settings/settings#allow_deprecated_error_prone_window_functions) 来允许继续使用该函数。 -::: - -**语法** - -```sql -runningAccumulate(agg_state[, grouping]) -``` - -**参数** - -* `agg_state` — 聚合函数的状态。[`AggregateFunction`](/sql-reference/data-types/aggregatefunction) -* `grouping` — 可选。分组键。当 `grouping` 的值发生变化时,函数状态会被重置。可以是任何已定义相等运算符的受支持数据类型。[`Any`](/sql-reference/data-types) - -**返回值** - -为每一行返回累计结果。[`Any`](/sql-reference/data-types) - -**示例** - -**initializeAggregation 使用示例** - -```sql title=Query -WITH initializeAggregation('sumState', number) AS one_row_sum_state -SELECT - number, - finalizeAggregation(one_row_sum_state) AS one_row_sum, - runningAccumulate(one_row_sum_state) AS cumulative_sum -FROM numbers(5); -``` - -```response title=Response -┌─number─┬─one_row_sum─┬─cumulative_sum─┐ -│ 0 │ 0 │ 0 │ -│ 1 │ 1 │ 1 │ -│ 2 │ 2 │ 3 │ -│ 3 │ 3 │ 6 │ -│ 4 │ 4 │ 10 │ -└────────┴─────────────┴────────────────┘ -``` - - -## runningConcurrency - -引入于:v21.3 - -计算并发事件的数量。 -每个事件都有开始时间和结束时间。 -开始时间包含在事件区间内,而结束时间不包含在事件区间内。 -具有开始时间和结束时间的列必须具有相同的数据类型。 -该函数会针对每个事件的开始时间计算当时处于活动状态(并发)的事件总数。 - -:::tip Requirements -事件必须按开始时间升序排序。 -如果不满足此要求,函数会抛出异常。 -每个数据块会被单独处理。 -如果来自不同数据块的事件存在重叠,则无法被正确处理。 -::: - -:::warning Deprecated -建议改用 [window functions](/sql-reference/window-functions)。 -::: - -**语法** - -```sql -runningConcurrency(start, end) -``` - -**参数** - -* `start` — 事件开始时间列,类型为 [`Date`](/sql-reference/data-types/date)、[`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) -* `end` — 事件结束时间列,类型为 [`Date`](/sql-reference/data-types/date)、[`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) - -**返回值** - -返回在每个事件开始时的并发事件数。[`UInt32`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT start, runningConcurrency(start, end) FROM example_table; -``` - -```response title=Response -┌──────start─┬─runningConcurrency(start, end)─┐ -│ 2025-03-03 │ 1 │ -│ 2025-03-06 │ 2 │ -│ 2025-03-07 │ 3 │ -│ 2025-03-11 │ 2 │ -└────────────┴────────────────────────────────┘ -``` - - -## runningDifference - -首次引入于:v1.1 - -计算数据块中相邻两行值之间的差值。 -对第一行返回 `0`,对后续每一行返回当前行与前一行的差值。 - -:::warning Deprecated -仅返回当前正在处理的数据块内部的差值。 -由于这种容易出错的行为,该函数已被弃用。 -建议改用 [window functions](/sql-reference/window-functions)。 - -你可以通过设置 [`allow_deprecated_error_prone_window_functions`](/operations/settings/settings#allow_deprecated_error_prone_window_functions) 来允许使用此函数。 -::: - -函数的结果取决于所涉及的数据块以及块内数据的顺序。 -计算 `runningDifference()` 时使用的行顺序可能与最终返回给用户的行顺序不同。 -为避免这种情况,你可以先创建带有 [`ORDER BY`](../../sql-reference/statements/select/order-by.md) 的子查询,然后在子查询外部调用该函数。 -请注意,数据块大小会影响结果。 -`runningDifference` 的内部状态在处理每个新数据块时都会被重置。 - -**语法** - -```sql -runningDifference(x) -``` - -**参数** - -* `x` — 要计算逐行差值的列。[`Any`](/sql-reference/data-types) - -**返回值** - -返回相邻行值之间的差值,首行返回 0。 - -**示例** - -**使用示例** - -```sql title=Query -SELECT - EventID, - EventTime, - runningDifference(EventTime) AS delta -FROM -( - SELECT - EventID, - EventTime - FROM events - WHERE EventDate = '2025-11-24' - ORDER BY EventTime ASC - LIMIT 5 -); -``` - -```response title=Response -┌─EventID─┬───────────EventTime─┬─delta─┐ -│ 1106 │ 2025-11-24 00:00:04 │ 0 │ -│ 1107 │ 2025-11-24 00:00:05 │ 1 │ -│ 1108 │ 2025-11-24 00:00:05 │ 0 │ -│ 1109 │ 2025-11-24 00:00:09 │ 4 │ -│ 1110 │ 2025-11-24 00:00:10 │ 1 │ -└─────────┴─────────────────────┴───────┘ -``` - -**块大小影响的示例** - -```sql title=Query -SELECT - number, - runningDifference(number + 1) AS diff -FROM numbers(100000) -WHERE diff != 1; -``` - -```response title=Response -┌─number─┬─diff─┐ -│ 0 │ 0 │ -└────────┴──────┘ -┌─number─┬─diff─┐ -│ 65536 │ 0 │ -└────────┴──────┘ -``` - - -## runningDifferenceStartingWithFirstValue - -引入于:v1.1 - -计算数据块中相邻行数值之间的差值,但与 [`runningDifference`](#runningDifference) 不同的是,它返回第一行的实际值,而不是 `0`。 - -:::warning 已弃用 -仅在当前正在处理的数据块内返回差值。 -由于这种易出错的行为,该函数已被弃用。 -建议改为使用 [窗口函数](/sql-reference/window-functions)。 - -你可以通过设置 `allow_deprecated_error_prone_window_functions` 来允许使用此函数。 -::: - -**语法** - -```sql -runningDifferenceStartingWithFirstValue(x) -``` - -**参数** - -* `x` — 要计算逐行差分的列。[`Any`](/sql-reference/data-types) - -**返回值** - -返回相邻值之间的差值,第一行返回第一行自身的值。[`Any`](/sql-reference/data-types) - -**示例** - -**用法示例** - -```sql title=Query -SELECT - number, - runningDifferenceStartingWithFirstValue(number) AS diff -FROM numbers(5); -``` - -```response title=Response -┌─number─┬─diff─┐ -│ 0 │ 0 │ -│ 1 │ 1 │ -│ 2 │ 1 │ -│ 3 │ 1 │ -│ 4 │ 1 │ -└────────┴──────┘ -``` - - -## serverUUID - -自 v20.1 版本引入 - -返回在服务器首次启动时生成的随机且唯一的 UUID(v4)。 -该 UUID 会被持久化,因此在第二次、第三次等后续服务器启动时会返回相同的 UUID。 - -**语法** - -```sql -serverUUID() -``` - -**参数** - -* 无。 - -**返回值** - -返回服务器的随机 UUID。[`UUID`](/sql-reference/data-types/uuid) - -**示例** - -**使用示例** - -```sql title=Query -SELECT serverUUID(); -``` - -```response title=Response -┌─serverUUID()─────────────────────────────┐ -│ 7ccc9260-000d-4d5c-a843-5459abaabb5f │ -└──────────────────────────────────────────┘ -``` - - -## shardCount - -自 v21.9 版本引入 - -返回分布式查询的分片总数。 -如果查询不是分布式的,则返回常量值 `0`。 - -**语法** - -```sql -shardCount() -``` - -**参数** - -* 无。 - -**返回值** - -返回分片总数或 `0`。[`UInt32`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query --- 请参阅上面的 shardNum() 示例,该示例同时演示了 shardCount() -CREATE TABLE shard_count_example (dummy UInt8) -ENGINE=Distributed(test_cluster_two_shards_localhost, system, one, dummy); -SELECT shardCount() FROM shard_count_example; -``` - -```response title=Response -┌─shardCount()─┐ -│ 2 │ -│ 2 │ -└──────────────┘ -``` - - -## shardNum - -自 v21.9 引入 - -返回在分布式查询中处理该部分数据的分片索引。 -索引从 `1` 开始。 -如果查询不是分布式的,则返回常量值 `0`。 - -**语法** - -```sql -shardNum() -``` - -**参数** - -* 无。 - -**返回值** - -返回分片索引或常量 `0`。[`UInt32`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -CREATE TABLE shard_num_example (dummy UInt8) -ENGINE=Distributed(test_cluster_two_shards_localhost, system, one, dummy); -SELECT dummy, shardNum(), shardCount() FROM shard_num_example; -``` - -```response title=Response -┌─dummy─┬─shardNum()─┬─shardCount()─┐ -│ 0 │ 1 │ 2 │ -│ 0 │ 2 │ 2 │ -└───────┴────────────┴──────────────┘ -``` - - -## showCertificate - -引入于:v22.6 - -如果已配置,显示当前服务器的安全套接字层(SSL)证书信息。 -有关如何配置 ClickHouse 使用 OpenSSL 证书来验证连接的更多信息,请参阅[配置 SSL-TLS](/guides/sre/configuring-ssl)。 - -**语法** - -```sql -showCertificate() -``` - -**参数** - -* 无。 - -**返回值** - -返回一个与已配置 SSL 证书相关的键值对映射,类型为 [`Map(String, String)`](/sql-reference/data-types/map)。 - -**示例** - -**使用示例** - -```sql title=Query -SELECT showCertificate() FORMAT LineAsString; -``` - -```response title=Response -{'version':'1','serial_number':'2D9071D64530052D48308473922C7ADAFA85D6C5','signature_algo':'sha256WithRSAEncryption','issuer':'/CN=marsnet.local CA','not_before':'May 7 17:01:21 2024 GMT','not_after':'May 7 17:01:21 2025 GMT','subject':'/CN=chnode1','pkey_algo':'rsaEncryption'} -``` - - -## sleep - -引入版本:v1.1 - -按指定的秒数暂停查询的执行。 -该函数主要用于测试和调试。 - -通常不应在生产环境中使用 `sleep()` 函数,因为它会对查询性能和系统响应能力产生负面影响。 -但是,在以下场景中它可能会很有用: - -1. **测试(Testing)**:在对 ClickHouse 进行测试或基准测试时,可能希望模拟延迟或引入暂停,以观察系统在特定条件下的行为。 -2. **调试(Debugging)**:如果需要在某个特定时间点检查系统状态或查询执行情况,可以使用 `sleep()` 引入暂停,从而便于检查或收集相关信息。 -3. **模拟(Simulation)**:在某些情况下,可能希望模拟真实场景中发生的延迟或暂停,例如网络延迟或对外部系统的依赖。 - -:::warning -务必谨慎且仅在必要时使用 `sleep()` 函数,因为它可能会影响 ClickHouse 系统的整体性能和响应能力。 -::: - -出于安全原因,该函数只能在默认用户配置文件中执行(且需启用 `allow_sleep`)。 - -**语法** - -```sql -sleep(seconds) -``` - -**参数** - -* `seconds` — 使查询执行暂停的秒数,最大为 3 秒。可以为浮点数以指定小数秒。[`const UInt*`](/sql-reference/data-types/int-uint) 或 [`const Float*`](/sql-reference/data-types/float) - -**返回值** - -返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query --- 此查询将在完成前暂停 2 秒。 --- 在此期间不会返回任何结果,查询将呈现挂起或无响应状态。 -SELECT sleep(2); -``` - -```response title=Response -┌─sleep(2)─┐ -│ 0 │ -└──────────┘ -1 row in set. Elapsed: 2.012 sec. -``` - - -## sleepEachRow - -引入版本:v1.1 - -使查询在处理结果集中每一行时暂停指定的秒数。 - -`sleepEachRow()` 函数主要用于测试和调试目的,与 [`sleep()`](#sleep) 函数类似。 -它允许你在处理每一行时模拟延迟或引入暂停,在以下场景中非常有用: - -1. **测试**:在特定条件下测试或基准测试 ClickHouse 的性能时,可以使用 `sleepEachRow()` 为每一行的处理模拟延迟或引入暂停。 -2. **调试**:如果需要在处理每一行时检查系统状态或查询执行情况,可以使用 `sleepEachRow()` 引入暂停,从而让你检查或收集相关信息。 -3. **模拟**:在某些情况下,你可能希望模拟真实场景中每一行处理都会产生延迟或暂停的情况,例如在与外部系统交互或存在网络延迟时。 - -:::warning -与 `sleep()` 函数类似,务必谨慎且仅在必要时使用 `sleepEachRow()`,因为它可能会显著影响 ClickHouse 系统的整体性能和响应能力,尤其是在处理大型结果集时。 -::: - -**语法** - -```sql -sleepEachRow(秒) -``` - -**参数** - -* `seconds` — 在结果集的每一行暂停查询执行的时间(单位为秒),最大为 3 秒。可以是浮点数值以指定小数秒。[`const UInt*`](/sql-reference/data-types/int-uint) 或 [`const Float*`](/sql-reference/data-types/float) - -**返回值** - -对每一行返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query --- 输出将延迟,每行之间暂停 0.5 秒。 -SELECT number, sleepEachRow(0.5) FROM system.numbers LIMIT 5; -``` - -```response title=Response -┌─number─┬─sleepEachRow(0.5)─┐ -│ 0 │ 0 │ -│ 1 │ 0 │ -│ 2 │ 0 │ -│ 3 │ 0 │ -│ 4 │ 0 │ -└────────┴───────────────────┘ -``` - - -## structureToCapnProtoSchema - -引入版本:v - -用于将 ClickHouse 表结构转换为 CapnProto 格式 schema 的函数 - -**语法** - -```sql -``` - -**参数** - -* 无。 - -**返回值** - -**示例** - -**random** - -```sql title=Query -SELECT structureToCapnProtoSchema('s String, x UInt32', 'MessageName') format TSVRaw -``` - -```response title=Response -struct MessageName -{ - s @0 : Data; - x @1 : UInt32; -} -``` - - -## structureToProtobufSchema - -引入自:v23.8 - -将 ClickHouse 表结构转换为 Protobuf 模式(schema)。 - -此函数接收一个 ClickHouse 表结构定义,并将其转换为使用 proto3 语法的 Protocol Buffers(Protobuf) -模式定义。这样可以方便地生成与 ClickHouse 表结构相匹配的 Protobuf 模式,用于数据交换。 - -**语法** - -```sql -structureToProtobufSchema(structure, message_name) -``` - -**参数** - -* `structure` — ClickHouse 表结构定义的字符串(例如,'column1 Type1, column2 Type2')。[`String`](/sql-reference/data-types/string) -* `message_name` — 在生成的 schema 中用于 Protobuf 消息类型的名称。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回一个使用 proto3 语法、与输入 ClickHouse 结构相对应的 Protobuf schema 定义。[`String`](/sql-reference/data-types/string) - -**示例** - -**将 ClickHouse 结构转换为 Protobuf schema** - -```sql title=Query -SELECT structureToProtobufSchema('s String, x UInt32', 'MessageName') FORMAT TSVRaw; -``` - -```response title=Response -syntax = "proto3"; - -message MessageName -{ - bytes s = 1; - uint32 x = 2; -} -``` - - -## tcpPort - -自 v20.12 引入 - -返回服务器监听的 [原生接口](../../interfaces/tcp.md) 的 TCP 端口号。 -如果在分布式表的上下文中执行,该函数会生成一个普通列,列值对应每个分片。 -否则,它会返回一个常量值。 - -**语法** - -```sql -tcpPort() -``` - -**参数** - -* 无。 - -**返回值** - -返回 TCP 端口号。[`UInt16`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT tcpPort() -``` - -```response title=Response -┌─tcpPort()─┐ -│ 9000 │ -└───────────┘ -``` - - -## throwIf - -自 v1.1 起引入 - -当参数 x 为 true 时抛出异常。 -要使用 `error_code` 参数,必须启用配置参数 `allow_custom_error_code_in_throw`。 - -**语法** - -```sql -throwIf(x[, message[, error_code]]) -``` - -**参数** - -* `x` — 要检查的条件。[`Any`](/sql-reference/data-types) -* `message` — 可选。自定义错误消息。[`const String`](/sql-reference/data-types/string) -* `error_code` — 可选。自定义错误代码。[`const Int8/16/32`](/sql-reference/data-types/int-uint) - -**返回值** - -当条件为假时返回 `0`;当条件为真时抛出异常。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT throwIf(number = 3, 'Too many') FROM numbers(10); -``` - -```response title=Response -↙ Progress: 0.00 rows, 0.00 B (0.00 rows/s., 0.00 B/s.) 从服务器收到异常(版本 19.14.1): -Code: 395. DB::Exception: Received from localhost:9000. DB::Exception: Too many. -``` - - -## toColumnTypeName - -自 v1.1 版本引入 - -返回给定值的数据类型的内部名称。 -与函数 [`toTypeName`](#toTypeName) 不同,返回的数据类型可能包含内部包装列,例如 `Const` 和 `LowCardinality`。 - -**语法** - -```sql -toColumnTypeName(value) -``` - -**参数** - -* `value` — 需要返回其对应内部数据类型的值。[`Any`](/sql-reference/data-types) - -**返回值** - -返回用于表示该值的内部数据类型。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT toColumnTypeName(CAST('2025-01-01 01:02:03' AS DateTime)); -``` - -```response title=Response -┌─toColumnTypeName(CAST('2025-01-01 01:02:03', 'DateTime'))─┐ -│ Const(UInt32) │ -└───────────────────────────────────────────────────────────┘ -``` - - -## toTypeName - -自 v1.1 引入 - -返回传入参数的类型名称。 -如果传入 `NULL`,函数返回类型 `Nullable(Nothing)`,它对应于 ClickHouse 内部的 `NULL` 表示形式。 - -**语法** - -```sql -toTypeName(x) -``` - -**参数** - -* `x` — 任意数据类型的值。[`Any`](/sql-reference/data-types) - -**返回值** - -返回输入值的数据类型名称。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT toTypeName(123) -``` - -```response title=Response -┌─toTypeName(123)─┐ -│ UInt8 │ -└─────────────────┘ -``` - - -## transactionID - -在 v22.6 中引入 - - - - - -返回事务的 ID。 - -:::note -此函数属于实验性功能集的一部分。 -在[配置](/operations/configuration-files)中添加以下设置即可启用实验性事务支持: - -```xml - - 1 - -``` - -更多信息请参阅[事务(ACID)支持](/guides/developer/transactional#transactions-commit-and-rollback)页面。 -::: - -**语法** - -```sql -transactionID() -``` - -**参数** - -* 无。 - -**返回值** - -返回一个由 `start_csn`、`local_tid` 和 `host_id` 组成的元组。 - -* `start_csn`:全局顺序号,即该事务开始时所见到的最新提交时间戳。 -* `local_tid`:本地主机上的顺序号,在特定 `start_csn` 下由该主机发起的每个事务中都是唯一的。 -* `host_id`:启动此事务的主机的 UUID。 - [`Tuple(UInt64, UInt64, UUID)`](/sql-reference/data-types/tuple) - -**示例** - -**用法示例** - -```sql title=Query -BEGIN TRANSACTION; -SELECT transactionID(); -ROLLBACK; -``` - -```response title=Response -┌─transactionID()────────────────────────────────┐ -│ (32,34,'0ee8b069-f2bb-4748-9eae-069c85b5252b') │ -└────────────────────────────────────────────────┘ -``` - - -## transactionLatestSnapshot - -引入版本:v22.6 - - - - - -返回某个可读取[事务](/guides/developer/transactional#transactions-commit-and-rollback)的最新快照(提交序列号,Commit Sequence Number)。 - -:::note -此函数属于一组实验性特性。可通过在配置中添加以下设置来启用实验性事务支持: - -```xml - - 1 - -``` - -如需了解更多信息,请参阅[事务(ACID)支持](/guides/developer/transactional#transactions-commit-and-rollback)页面。 -::: - -**语法** - -```sql -transactionLatestSnapshot() -``` - -**参数** - -* 无。 - -**返回值** - -返回事务的最新快照(CSN)。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -BEGIN TRANSACTION; -SELECT transactionLatestSnapshot(); -ROLLBACK; -``` - -```response title=Response -┌─transactionLatestSnapshot()─┐ -│ 32 │ -└─────────────────────────────┘ -``` - - -## transactionOldestSnapshot - -引入于:v22.6 - - - - - -返回对某个正在运行的[事务](/guides/developer/transactional#transactions-commit-and-rollback)可见的最早快照(提交序列号,Commit Sequence Number)。 - -:::note -此函数属于实验性功能集的一部分。通过在配置中添加以下设置来启用实验性事务支持: - -```xml - - 1 - -``` - -如需更多信息,请参阅[事务(ACID)支持](/guides/developer/transactional#transactions-commit-and-rollback)页面。 -::: - -**语法** - -```sql -transactionOldestSnapshot() -``` - -**参数** - -* 无。 - -**返回值** - -返回事务的最早快照(CSN)。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -BEGIN TRANSACTION; -SELECT transactionOldestSnapshot(); -ROLLBACK; -``` - -```response title=Response -┌─transactionOldestSnapshot()─┐ -│ 32 │ -└─────────────────────────────┘ -``` - - -## transform - -引入于:v1.1 - -根据显式定义的元素映射关系,将一个值转换为另一个值。 - -该函数有两个变体: - -* `transform(x, array_from, array_to, default)` - 使用映射数组转换 `x`,并为未匹配的元素提供默认值 -* `transform(x, array_from, array_to)` - 执行相同的转换,但在未找到匹配项时返回原始的 `x` - -该函数在 `array_from` 中查找 `x`,并返回 `array_to` 中相同索引位置上的对应元素。 -如果在 `array_from` 中未找到 `x`,则返回 `default` 值(4 参数版本)或原始的 `x`(3 参数版本)。 -如果 `array_from` 中存在多个匹配元素,则返回第一个匹配项对应的元素。 - -要求: - -* `array_from` 和 `array_to` 必须具有相同数量的元素 -* 对于 4 参数版本:`transform(T, Array(T), Array(U), U) -> U`,其中 `T` 和 `U` 可以是不同但兼容的类型 -* 对于 3 参数版本:`transform(T, Array(T), Array(T)) -> T`,其中所有类型必须相同 - -**语法** - -```sql -transform(x, array_from, array_to[, default]) -``` - -**参数** - -* `x` — 要转换的值。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Decimal`](/sql-reference/data-types/decimal) 或 [`Float*`](/sql-reference/data-types/float) 或 [`String`](/sql-reference/data-types/string) 或 [`Date`](/sql-reference/data-types/date) 或 [`DateTime`](/sql-reference/data-types/datetime) -* `array_from` — 用于查找匹配项的常量数组。[`Array((U)Int*)`](/sql-reference/data-types/array) 或 [`Array(Decimal)`](/sql-reference/data-types/array) 或 [`Array(Float*)`](/sql-reference/data-types/array) 或 [`Array(String)`](/sql-reference/data-types/array) 或 [`Array(Date)`](/sql-reference/data-types/array) 或 [`Array(DateTime)`](/sql-reference/data-types/array) -* `array_to` — 在 `array_from` 中找到对应匹配项时要返回的常量数组。[`Array((U)Int*)`](/sql-reference/data-types/array) 或 [`Array(Decimal)`](/sql-reference/data-types/array) 或 [`Array(Float*)`](/sql-reference/data-types/array) 或 [`Array(String)`](/sql-reference/data-types/array) 或 [`Array(Date)`](/sql-reference/data-types/array) 或 [`Array(DateTime)`](/sql-reference/data-types/array) -* `default` — 可选。如果在 `array_from` 中未找到 `x`,则返回该值。如果省略该参数,则返回未改变的 `x`。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Decimal`](/sql-reference/data-types/decimal) 或 [`Float*`](/sql-reference/data-types/float) 或 [`String`](/sql-reference/data-types/string) 或 [`Date`](/sql-reference/data-types/date) 或 [`DateTime`](/sql-reference/data-types/datetime) - -**返回值** - -如果 `x` 与 `array_from` 中的某个元素匹配,则返回 `array_to` 中对应的值;否则返回 `default`(如果提供)或 `x`(如果未提供 `default`)。[`Any`](/sql-reference/data-types) - -**示例** - -**transform(T, Array(T), Array(U), U) -> U** - -```sql title=Query -SELECT -transform(SearchEngineID, [2, 3], ['Yandex', 'Google'], '其他') AS title, -count() AS c -FROM test.hits -WHERE SearchEngineID != 0 -GROUP BY title -ORDER BY c DESC -``` - -```response title=Response -┌─title─────┬──────c─┐ -│ Yandex │ 498635 │ -│ Google │ 229872 │ -│ Other │ 104472 │ -└───────────┴────────┘ -``` - -**transform(T, Array(T), Array(T)) -> T** - -```sql title=Query -SELECT -transform(domain(Referer), ['yandex.ru', 'google.ru', 'vkontakte.ru'], ['www.yandex', 'example.com', 'vk.com']) AS s, count() AS c -FROM test.hits -GROUP BY domain(Referer) -ORDER BY count() DESC -LIMIT 10 -``` - - -```response title=Response -┌─s──────────────┬───────c─┐ -│ │ 2906259 │ -│ www.yandex │ 867767 │ -│ ███████.ru │ 313599 │ -│ mail.yandex.ru │ 107147 │ -│ ██████.ru │ 100355 │ -│ █████████.ru │ 65040 │ -│ news.yandex.ru │ 64515 │ -│ ██████.net │ 59141 │ -│ example.com │ 57316 │ -└────────────────┴─────────┘ -``` - - -## uniqThetaIntersect - -自 v22.9 起引入 - -对两个 uniqThetaSketch 对象执行交集计算(集合运算 ∩),结果为一个新的 uniqThetaSketch。 - -**语法** - -```sql -uniqThetaIntersect(uniqThetaSketch,uniqThetaSketch) -``` - -**参数** - -* `uniqThetaSketch` — uniqThetaSketch 对象。[`Tuple`](/sql-reference/data-types/tuple) 或 [`Array`](/sql-reference/data-types/array) 或 [`Date`](/sql-reference/data-types/date) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`String`](/sql-reference/data-types/string) 或 [`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) - -**返回值** - -包含交集结果的新 uniqThetaSketch。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT finalizeAggregation(uniqThetaIntersect(a, b)) AS a_intersect_b, finalizeAggregation(a) AS a_cardinality, finalizeAggregation(b) AS b_cardinality -FROM -(SELECT arrayReduce('uniqThetaState', [1, 2]) AS a, arrayReduce('uniqThetaState', [2, 3, 4]) AS b); -``` - -```response title=Response -┌─a_intersect_b─┬─a_cardinality─┬─b_cardinality─┐ -│ 1 │ 2 │ 3 │ -└───────────────┴───────────────┴───────────────┘ -``` - - -## uniqThetaNot - -自 v22.9 引入 - -对两个 uniqThetaSketch 对象执行 a_not_b 运算(集合运算 ×),返回一个新的 uniqThetaSketch。 - -**语法** - -```sql -uniqThetaNot(uniqThetaSketch,uniqThetaSketch) -``` - -**参数** - -* `uniqThetaSketch` — uniqThetaSketch 对象。类型可以是 [`Tuple`](/sql-reference/data-types/tuple)、[`Array`](/sql-reference/data-types/array)、[`Date`](/sql-reference/data-types/date)、[`DateTime`](/sql-reference/data-types/datetime)、[`String`](/sql-reference/data-types/string)、[`(U)Int*`](/sql-reference/data-types/int-uint)、[`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) - -**返回值** - -返回一个新的 uniqThetaSketch,其中包含 a_not_b 的计算结果。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT finalizeAggregation(uniqThetaNot(a, b)) AS a_not_b, finalizeAggregation(a) AS a_cardinality, finalizeAggregation(b) AS b_cardinality -FROM -(SELECT arrayReduce('uniqThetaState', [2, 3, 4]) AS a, arrayReduce('uniqThetaState', [1, 2]) AS b); -``` - -```response title=Response -┌─a_not_b─┬─a_cardinality─┬─b_cardinality─┐ -│ 2 │ 3 │ 2 │ -└─────────┴───────────────┴───────────────┘ -``` - - -## uniqThetaUnion - -自 v22.9 引入 - -对两个 uniqThetaSketch 对象执行并集计算(集合运算 ∪),结果是一个新的 uniqThetaSketch。 - -**语法** - -```sql -uniqThetaUnion(uniqThetaSketch,uniqThetaSketch) -``` - -**参数** - -* `uniqThetaSketch` — uniqThetaSketch 对象。[`Tuple`](/sql-reference/data-types/tuple) 或 [`Array`](/sql-reference/data-types/array) 或 [`Date`](/sql-reference/data-types/date) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`String`](/sql-reference/data-types/string) 或 [`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) - -**返回值** - -返回一个新的 uniqThetaSketch,其中包含并集结果。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT finalizeAggregation(uniqThetaUnion(a, b)) AS a_union_b, finalizeAggregation(a) AS a_cardinality, finalizeAggregation(b) AS b_cardinality -FROM -(SELECT arrayReduce('uniqThetaState', [1, 2]) AS a, arrayReduce('uniqThetaState', [2, 3, 4]) AS b); -``` - -```response title=Response -┌─a_union_b─┬─a_cardinality─┬─b_cardinality─┐ -│ 4 │ 2 │ 3 │ -└───────────┴───────────────┴───────────────┘ -``` - - -## uptime - -引入版本:v1.1 - -返回服务器的运行时长(以秒为单位)。 -如果在分布式表的上下文中执行,该函数会生成一个普通列,其中每个分片都有其对应的值。 -否则它会返回一个常量值。 - -**语法** - -```sql -uptime() -``` - -**参数** - -* 无。 - -**返回值** - -返回服务器的运行时间(以秒为单位)。[`UInt32`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT uptime() AS Uptime -``` - -```response title=Response -┌─Uptime─┐ -│ 55867 │ -└────────┘ -``` - - -## variantElement - -在以下版本中引入:v25.2 - -从 `Variant` 列中提取具有指定类型的列。 - -**语法** - -```sql -variantElement(variant, type_name[, default_value]) -``` - -**参数** - -* `variant` — Variant 列。[`Variant`](/sql-reference/data-types/variant) -* `type_name` — 要提取的 Variant 类型名称。[`String`](/sql-reference/data-types/string) -* `default_value` — 当 Variant 列中不存在指定类型的 Variant 时使用的默认值。可以是任意类型。可选。[`Any`](/sql-reference/data-types) - -**返回值** - -返回一列数据,其中包含从 Variant 列中提取出的指定 Variant 类型的值。[`Any`](/sql-reference/data-types) - -**示例** - -**用法示例** - -```sql title=Query -CREATE TABLE test (v Variant(UInt64, String, Array(UInt64))) ENGINE = Memory; -INSERT INTO test VALUES (NULL), (42), ('Hello, World!'), ([1, 2, 3]); -SELECT v, variantElement(v, 'String'), variantElement(v, 'UInt64'), variantElement(v, 'Array(UInt64)') FROM test; -``` - -```response title=Response -┌─v─────────────┬─variantElement(v, 'String')─┬─variantElement(v, 'UInt64')─┬─variantElement(v, 'Array(UInt64)')─┐ -│ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ [] │ -│ 42 │ ᴺᵁᴸᴸ │ 42 │ [] │ -│ Hello, World! │ Hello, World! │ ᴺᵁᴸᴸ │ [] │ -│ [1,2,3] │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ [1,2,3] │ -└───────────────┴─────────────────────────────┴─────────────────────────────┴────────────────────────────────────┘ -``` - - -## variantType - -引入于:v24.2 - -返回 `Variant` 列中每一行的变体类型名称。如果某行包含 NULL,则为该行返回 `'None'`。 - -**语法** - -```sql -variantType(variant) -``` - -**参数** - -* `variant` — Variant 类型列。[`Variant`](/sql-reference/data-types/variant) - -**返回值** - -返回一个 Enum 类型的列,其中每一行包含对应的变体类型名称。[`Enum`](/sql-reference/data-types/enum) - -**示例** - -**使用示例** - -```sql title=Query -CREATE TABLE test (v Variant(UInt64, String, Array(UInt64))) ENGINE = Memory; -INSERT INTO test VALUES (NULL), (42), ('Hello, World!'), ([1, 2, 3]); -SELECT variantType(v) FROM test; -``` - -```response title=Response -┌─variantType(v)─┐ -│ None │ -│ UInt64 │ -│ String │ -│ Array(UInt64) │ -└────────────────┘ -``` - - -## version - -引入于:v1.1 - -以字符串形式返回当前 ClickHouse 版本,格式为:`major_version.minor_version.patch_version.number_of_commits_since_the_previous_stable_release`。 -如果在分布式表的上下文中执行,此函数会生成一个普通列,其中的值对应每个分片。 -否则,它会生成一个常量值。 - -**语法** - -```sql -version() -``` - -**参数** - -* 无。 - -**返回值** - -返回当前 ClickHouse 版本。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT version() -``` - -```response title=Response -┌─version()─┐ -│ 24.2.1.1 │ -└───────────┘ -``` - - -## visibleWidth - -引入版本:v1.1 - -计算以文本格式(制表符分隔)在控制台输出值时的近似显示宽度。 -系统使用此函数来实现 Pretty 格式。 -在 Pretty 格式中,`NULL` 会被表示为字符串 `NULL`。 - -**语法** - -```sql -visibleWidth(x) -``` - -**参数** - -* `x` — 任意数据类型的值。[`Any`](/sql-reference/data-types) - -**返回值** - -返回该值以文本格式显示时的近似宽度。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**计算 NULL 的可见宽度** - -```sql title=Query -SELECT visibleWidth(NULL) -``` - -```response title=Response -┌─visibleWidth(NULL)─┐ -│ 4 │ -└────────────────────┘ -``` - - -## zookeeperSessionUptime - -引入版本:v21.11 - -以秒为单位返回当前 ZooKeeper 会话的持续时间。 - -**语法** - -```sql -zookeeperSessionUptime() -``` - -**参数** - -* 无。 - -**返回值** - -以秒为单位返回当前 ZooKeeper 会话的运行时长。[`UInt32`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT zookeeperSessionUptime(); -``` - -```response title=Response -┌─zookeeperSessionUptime()─┐ -│ 286 │ -└──────────────────────────┘ -``` - -{/*AUTOGENERATED_END*/ } +{/*AUTOGENERGED_END*/ } diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/random-functions.md b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/random-functions.md index 56af03cf42d..564ae407855 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/random-functions.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/random-functions.md @@ -1,16 +1,14 @@ --- -description: '生成随机数函数的文档' +description: '随机数生成函数文档' sidebar_label: '随机数' slug: /sql-reference/functions/random-functions -title: '生成随机数的函数' +title: '随机数生成函数' doc_type: 'reference' --- - - # 用于生成随机数的函数 -本节中的所有函数都接受零个或一个参数。参数(如果提供)的唯一用途是防止[公共子表达式消除](/sql-reference/functions/overview#common-subexpression-elimination),从而保证在同一行内对同一个随机函数的两次不同执行返回不同的随机值。 +本节中的所有函数只接受 0 个或 1 个参数。提供参数(如果有)的唯一作用是用于防止[公共子表达式消除](/sql-reference/functions/overview#common-subexpression-elimination),从而保证在同一行内对同一个随机函数的多次执行会返回不同的随机值。 相关内容 @@ -18,814 +16,19 @@ doc_type: 'reference' * 博客:[在 ClickHouse 中生成随机数据](https://clickhouse.com/blog/generating-random-test-distribution-data-for-clickhouse) :::note -随机数由非密码学算法生成。 +随机数由非加密算法生成。 ::: :::note -以下文档是由 `system.functions` 系统表生成的。 +以下文档内容是从 `system.functions` 系统表生成的。 ::: {/* - 下述标签内的内容会在文档框架构建时被替换为 - 从 system.functions 自动生成的文档。请不要修改或删除这些标签。 + 下列标签的内部内容会在文档框架构建时 + 被根据 system.functions 生成的文档所替换。请不要修改或删除这些标签。 参见:https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## fuzzBits - -引入版本:v20.5 - -在输入字符串 `s` 中,以概率 `p` 翻转每一位比特。 - -**语法** - -```sql -fuzzBits(s, p) -``` - -**参数** - -* `s` — 要执行按位模糊处理的字符串,类型为 [`String`](/sql-reference/data-types/string) 或 [`FixedString`](/sql-reference/data-types/fixedstring) -* `p` — 对每个位进行翻转的概率,取值范围为 `0.0` 到 `1.0` 的数值 [`Float*`](/sql-reference/data-types/float) - -**返回值** - -返回与 `s` 类型相同的经模糊处理的字符串,即 [`String`](/sql-reference/data-types/string) 或 [`FixedString`](/sql-reference/data-types/fixedstring)。 - -**示例** - -**使用示例** - -```sql title=Query -SELECT fuzzBits(materialize('abacaba'), 0.1) -FROM numbers(3) -``` - -```response title=Response -┌─fuzzBits(materialize('abacaba'), 0.1)─┐ -│ abaaaja │ -│ a*cjab+ │ -│ aeca2A │ -└───────────────────────────────────────┘ -``` - - -## rand - -引入于:v1.1 - -返回一个服从均匀分布的随机 `UInt32` 数值。 - -使用线性同余生成器,并从系统获取初始状态。这意味着尽管它看起来是随机的,但并不是真正意义上的随机,如果已知初始状态,其结果是可以预测的。 -在对真正随机性要求较高的场景中,建议使用诸如系统级调用或集成外部库等替代方法。 - -**语法** - -```sql -rand([x]) -``` - -**别名**: `rand32` - -**参数** - -* `x` — 可选且会被忽略。该参数的唯一用途是在同一个查询中多次使用相同函数调用时,防止[公共子表达式消除](/sql-reference/functions/overview#common-subexpression-elimination)。[`Any`](/sql-reference/data-types) - -**返回值** - -返回一个 `UInt32` 类型的随机数。[`UInt32`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT rand(); -``` - -```response title=Response -1569354847 -``` - - -## rand64 - -自 v1.1 起提供 - -返回一个服从均匀分布的随机生成 `UInt64` 数值。 - -使用线性同余生成器,其初始状态由系统获取。这意味着虽然其表现为随机,但并非真正的随机;如果初始状态已知,则可能被预测。 -在对真正随机性要求较高的场景中,请考虑使用其他方法,例如系统级调用或集成外部库。 - -**语法** - -```sql -rand64([x]) -``` - -**参数** - -* `x` — 可选且会被忽略。该参数唯一的作用是,当在查询中多次使用相同的函数调用时,防止发生[公共子表达式消除](/sql-reference/functions/overview#common-subexpression-elimination)。[`Any`](/sql-reference/data-types) - -**返回值** - -返回一个服从均匀分布的随机 `UInt64` 数值。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT rand64(); -``` - -```response title=Response -15030268859237645412 -``` - - -## randBernoulli - -引入版本:v22.10 - -返回一个服从 [Bernoulli 分布](https://en.wikipedia.org/wiki/Bernoulli_distribution) 的随机 Float64 数值。 - -**语法** - -```sql -randBernoulli(probability[, x]) -``` - -**参数** - -* `probability` — 成功的概率,取值范围为 `0` 到 `1`。[`Float64`](/sql-reference/data-types/float) -* `x` — 可选且会被忽略。该参数唯一的作用是在同一个查询中多次使用相同函数调用时,用于防止[公共子表达式消除](/sql-reference/functions/overview#common-subexpression-elimination)。[`Any`](/sql-reference/data-types) - -**返回值** - -返回一个服从指定 Bernoulli 分布的随机 Float64 数值。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT randBernoulli(.75) FROM numbers(5) -``` - -```response title=Response -┌─randBernoulli(0.75)─┐ -│ 1 │ -│ 1 │ -│ 0 │ -│ 1 │ -│ 1 │ -└─────────────────────┘ -``` - - -## randBinomial - -自 v22.10 起提供 - -返回一个从 [二项分布](https://en.wikipedia.org/wiki/Binomial_distribution) 中抽取的随机 Float64 类型数值。 - -**语法** - -```sql -randBinomial(experiments, probability[, x]) -``` - -**参数** - -* `experiments` — 试验次数 [`UInt64`](/sql-reference/data-types/int-uint) -* `probability` — 每次试验成功的概率,取值范围在 `0` 到 `1` 之间 [`Float64`](/sql-reference/data-types/float) -* `x` — 可选且会被忽略。该参数唯一的用途是在查询中多次使用相同的函数调用时,防止执行[公共子表达式消除](/sql-reference/functions/overview#common-subexpression-elimination)。[`Any`](/sql-reference/data-types) - -**返回值** - -返回一个从指定二项分布中采样得到的随机 Float64 数值。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT randBinomial(100, .75) FROM numbers(5) -``` - -```response title=Response -┌─randBinomial(100, 0.75)─┐ -│ 74 │ -│ 78 │ -│ 76 │ -│ 77 │ -│ 80 │ -└─────────────────────────┘ -``` - - -## randCanonical - -自 v22.11 起引入 - -返回一个服从均匀分布的 `Float64` 随机数,范围在 `0`(包含)和 `1`(不包含)之间。 - -**语法** - -```sql -randCanonical([x]) -``` - -**参数** - -* `x` — 可选参数,其值会被忽略。该参数的唯一目的是在同一函数调用在查询中被多次使用时,防止[公共子表达式消除](/sql-reference/functions/overview#common-subexpression-elimination)。[`Any`](/sql-reference/data-types) - -**返回值** - -返回一个随机的 Float64 数值。[`Float64`](/sql-reference/data-types/float) - -**示例** - -**使用示例** - -```sql title=Query -SELECT randCanonical(); -``` - -```response title=Response -0.345217890123456 -``` - - -## randChiSquared - -自 v22.10 引入 - -返回一个从 [卡方分布](https://en.wikipedia.org/wiki/Chi-squared_distribution) 中抽取的随机 Float64 数值。 - -**语法** - -```sql -randChiSquared(degree_of_freedom[, x]) -``` - -**参数** - -* `degree_of_freedom` — 自由度。[`Float64`](/sql-reference/data-types/float) -* `x` — 可选且会被忽略。此参数唯一的作用是在同一个查询中多次使用相同函数调用时,防止触发[公共子表达式消除](/sql-reference/functions/overview#common-subexpression-elimination)。[`Any`](/sql-reference/data-types) - -**返回值** - -返回一个从指定卡方分布中抽取的随机 Float64 类型数值。[`Float64`](/sql-reference/data-types/float) - -**示例** - -**用法示例** - -```sql title=Query -SELECT randChiSquared(10) FROM numbers(5) -``` - -```response title=Response -┌─randChiSquared(10)─┐ -│ 10.015463656521543 │ -│ 9.621799919882768 │ -│ 2.71785015634699 │ -│ 11.128188665931908 │ -│ 4.902063104425469 │ -└────────────────────┘ -``` - - -## randConstant - -引入版本:v1.1 - -生成一个在当前查询执行过程中对所有行都保持不变的随机值。 - -该函数: - -* 在单个查询中为每一行返回相同的随机值 -* 在不同次查询执行中产生不同的值 - -这对于在数据集的所有行中应用一致的随机种子或标识符非常有用。 - -**语法** - -```sql -randConstant([x]) -``` - -**参数** - -* `x` — 可选且会被忽略。该参数唯一的作用,是在查询中多次使用同一函数调用时,防止发生[公共子表达式消除](/sql-reference/functions/overview#common-subexpression-elimination)。[`Any`](/sql-reference/data-types) - -**返回值** - -返回一个类型为 `UInt32` 的列,每一行都包含相同的随机值。[`UInt32`](/sql-reference/data-types/int-uint) - -**示例** - -**基本用法** - -```sql title=Query -SELECT randConstant() AS random_value; -``` - -```response title=Response -| random_value | -|--------------| -| 1234567890 | -``` - -**参数化用法** - -```sql title=Query -SELECT randConstant(10) AS random_value; -``` - -```response title=Response -| random_value | -|--------------| -| 9876543210 | -``` - - -## randExponential - -自 v22.10 起提供 - -返回一个从[指数分布](https://en.wikipedia.org/wiki/Exponential_distribution)中采样得到的随机 Float64 数值。 - -**语法** - -```sql -randExponential(lambda[, x]) -``` - -**参数** - -* `lambda` — 分布的速率参数或 lambda 值。[`Float64`](/sql-reference/data-types/float) -* `x` — 可选且会被忽略。该参数的唯一作用是在查询中多次使用相同函数调用时,防止[公共子表达式消除](/sql-reference/functions/overview#common-subexpression-elimination)。[`Any`](/sql-reference/data-types) - -**返回值** - -返回一个从指定指数分布中抽样得到的随机 Float64 数值。[`Float64`](/sql-reference/data-types/float) - -**示例** - -**用法示例** - -```sql title=Query -SELECT randExponential(1/10) FROM numbers(5) -``` - -```response title=Response -┌─randExponential(divide(1, 10))─┐ -│ 44.71628934340778 │ -│ 4.211013337903262 │ -│ 10.809402553207766 │ -│ 15.63959406553284 │ -│ 1.8148392319860158 │ -└────────────────────────────────┘ -``` - - -## randFisherF - -引入版本:v22.10 - -返回一个从 [F 分布](https://en.wikipedia.org/wiki/F-distribution) 中抽取的随机 Float64 浮点数。 - -**语法** - -```sql -randFisherF(d1, d2[, x]) -``` - -**参数** - -* `d1` — `X = (S1 / d1) / (S2 / d2)` 中自由度为 d1。[`Float64`](/sql-reference/data-types/float) -* `d2` — `X = (S1 / d1) / (S2 / d2)` 中自由度为 d2。[`Float64`](/sql-reference/data-types/float) -* `x` — 可选参数,调用时会被忽略。该参数唯一的用途是在同一查询中多次使用相同函数调用时,防止[公共子表达式消除](/sql-reference/functions/overview#common-subexpression-elimination)。[`Any`](/sql-reference/data-types) - -**返回值** - -返回一个从指定 F 分布中生成的随机 Float64 值。[`Float64`](/sql-reference/data-types/float) - -**示例** - -**用法示例** - -```sql title=Query -SELECT randFisherF(10, 3) FROM numbers(5) -``` - -```response title=Response -┌─randFisherF(10, 20)─┐ -│ 0.7204609609506184 │ -│ 0.9926258472572916 │ -│ 1.4010752726735863 │ -│ 0.34928401507025556 │ -│ 1.8216216009473598 │ -└─────────────────────┘ -``` - - -## randLogNormal - -自 v22.10 起引入 - -返回一个从[对数正态分布](https://en.wikipedia.org/wiki/Log-normal_distribution)中采样得到的随机 Float64 数值。 - -**语法** - -```sql -randLogNormal(mean, stddev[, x]) -``` - -**参数** - -* `mean` — 分布的均值。[`Float64`](/sql-reference/data-types/float) -* `stddev` — 分布的标准差。[`Float64`](/sql-reference/data-types/float) -* `x` — 可选且将被忽略。该参数的唯一目的,是在同一查询中多次使用相同函数调用时,防止[公共子表达式消除](/sql-reference/functions/overview#common-subexpression-elimination)。[`Any`](/sql-reference/data-types) - -**返回值** - -返回一个从指定对数正态分布中抽取的随机 `Float64` 类型数值。[`Float64`](/sql-reference/data-types/float) - -**示例** - -**用法示例** - -```sql title=Query -SELECT randLogNormal(100, 5) FROM numbers(5) -``` - -```response title=Response -┌─randLogNormal(100, 5)─┐ -│ 1.295699673937363e48 │ -│ 9.719869109186684e39 │ -│ 6.110868203189557e42 │ -│ 9.912675872925529e39 │ -│ 2.3564708490552458e42 │ -└───────────────────────┘ -``` - - -## randNegativeBinomial - -引入于:v22.10 - -返回一个从 [负二项分布](https://en.wikipedia.org/wiki/Negative_binomial_distribution) 中抽取的 Float64 类型随机数。 - -**语法** - -```sql -randNegativeBinomial(experiments, probability[, x]) -``` - -**参数** - -* `experiments` — 实验次数。[`UInt64`](/sql-reference/data-types/int-uint) -* `probability` — 每次实验失败的概率,取值在 `0` 与 `1` 之间。[`Float64`](/sql-reference/data-types/float) -* `x` — 可选且会被忽略。该参数唯一的作用是在查询中多次使用相同函数调用时,防止[公共子表达式消除](/sql-reference/functions/overview#common-subexpression-elimination)。[`Any`](/sql-reference/data-types) - -**返回值** - -返回一个从指定负二项分布中抽取的随机 `UInt64` 数值。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT randNegativeBinomial(100, .75) FROM numbers(5) -``` - -```response title=Response -┌─randNegativeBinomial(100, 0.75)─┐ -│ 33 │ -│ 32 │ -│ 39 │ -│ 40 │ -│ 50 │ -└─────────────────────────────────┘ -``` - - -## randNormal - -自 v22.10 起提供 - -返回一个从[正态分布](https://en.wikipedia.org/wiki/Normal_distribution)中抽取的随机 Float64 数值。 - -**语法** - -```sql -randNormal(mean, stddev[, x]) -``` - -**参数** - -* `mean` — 分布的均值 [`Float64`](/sql-reference/data-types/float) -* `stddev` — 分布的标准差 [`Float64`](/sql-reference/data-types/float) -* `x` — 可选且会被忽略。该参数的唯一作用是在同一个查询中多次使用相同的函数调用时,防止发生[公共子表达式消除](/sql-reference/functions/overview#common-subexpression-elimination)。[`Any`](/sql-reference/data-types) - -**返回值** - -返回从指定正态分布中抽取的随机 Float64 数。[`Float64`](/sql-reference/data-types/float) - -**示例** - -**用法示例** - -```sql title=Query -SELECT randNormal(10, 2) FROM numbers(5) -``` - -```response title=Response -┌──randNormal(10, 2)─┐ -│ 13.389228911709653 │ -│ 8.622949707401295 │ -│ 10.801887062682981 │ -│ 4.5220192605895315 │ -│ 10.901239123982567 │ -└────────────────────┘ -``` - - -## randPoisson - -自 v22.10 引入 - -返回一个从 [泊松分布](https://en.wikipedia.org/wiki/Poisson_distribution) 中抽取的随机 Float64 类型数值。 - -**语法** - -```sql -randPoisson(n[, x]) -``` - -**参数** - -* `n` — 平均发生次数。[`UInt64`](/sql-reference/data-types/int-uint) -* `x` — 可选且会被忽略。此参数唯一的用途是在查询中多次使用相同函数调用时,防止[公共子表达式消除](/sql-reference/functions/overview#common-subexpression-elimination)。[`Any`](/sql-reference/data-types) - -**返回值** - -返回一个从指定泊松分布中抽取的随机 Float64 数值。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT randPoisson(10) FROM numbers(5) -``` - -```response title=Response -┌─randPoisson(10)─┐ -│ 8 │ -│ 8 │ -│ 7 │ -│ 10 │ -│ 6 │ -└─────────────────┘ -``` - - -## randStudentT - -自 v22.10 起引入 - -返回一个从 [学生 t 分布](https://en.wikipedia.org/wiki/Student%27s_t-distribution) 中抽取的随机 Float64 数值。 - -**语法** - -```sql -randStudentT(degree_of_freedom[, x]) -``` - -**参数** - -* `degree_of_freedom` — 自由度。[`Float64`](/sql-reference/data-types/float) -* `x` — 可选且将被忽略。此参数唯一的用途是在同一查询中多次使用相同函数调用时,防止发生[公共子表达式消除](/sql-reference/functions/overview#common-subexpression-elimination)。[`Any`](/sql-reference/data-types) - -**返回值** - -返回一个从指定 Student's t 分布中抽取的随机 Float64 数值。[`Float64`](/sql-reference/data-types/float) - -**示例** - -**用法示例** - -```sql title=Query -SELECT randStudentT(10) FROM numbers(5) -``` - -```response title=Response -┌─────randStudentT(10)─┐ -│ 1.2217309938538725 │ -│ 1.7941971681200541 │ -│ -0.28192176076784664 │ -│ 0.2508897721303792 │ -│ -2.7858432909761186 │ -└──────────────────────┘ -``` - - -## randUniform - -在 v22.10 中引入 - -返回在区间 $[\min, \max]$ 上服从均匀分布的 Float64 类型随机数。 - -**语法** - -```sql -randUniform(min, max[, x]) -``` - -**参数** - -* `min` — 区间左边界(包含)。[`Float64`](/sql-reference/data-types/float) -* `max` — 区间右边界(包含)。[`Float64`](/sql-reference/data-types/float) -* `x` — 可选且会被忽略。该参数唯一的作用是在同一个查询中多次使用相同函数调用时,防止[公共子表达式消除](/sql-reference/functions/overview#common-subexpression-elimination)。[`Any`](/sql-reference/data-types) - -**返回值** - -返回从由 `min` 和 `max` 形成的区间中均匀抽取的随机数(服从均匀分布)。[`Float64`](/sql-reference/data-types/float) - -**示例** - -**使用示例** - -```sql title=Query -SELECT randUniform(5.5, 10) FROM numbers(5) -``` - -```response title=Response -┌─randUniform(5.5, 10)─┐ -│ 8.094978491443102 │ -│ 7.3181248914450885 │ -│ 7.177741903868262 │ -│ 6.483347380953762 │ -│ 6.122286382885112 │ -└──────────────────────┘ -``` - - -## randomFixedString - -引入版本:v20.5 - -生成一个指定长度(字符数)的随机定长字符串。 -返回的字符不一定是 ASCII 字符,即它们可能是不可打印字符。 - -**语法** - -```sql -随机固定字符串(长度) -``` - -**参数** - -* `length` — 字符串的长度(以字节为单位)。[`UInt*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回一个由随机字节填充的字符串。[`FixedString`](/sql-reference/data-types/fixedstring) - -**示例** - -**用法示例** - -```sql title=Query -SELECT randomFixedString(13) AS rnd, toTypeName(rnd) -``` - -```response title=Response -┌─rnd──────┬─toTypeName(randomFixedString(13))─┐ -│ j▒h㋖HɨZ'▒ │ FixedString(13) │ -└──────────┴───────────────────────────────────┘ -``` - - -## randomPrintableASCII - -自 v20.1 引入 - -生成具有指定字符数的随机[ASCII](https://en.wikipedia.org/wiki/ASCII#Printable_characters)字符串。 - -如果传入的 `length < 0`,则该函数的行为未定义。 - -**语法** - -```sql -randomPrintableASCII(length[, x]) -``` - -**参数** - -* `length` — 字符串的字节长度。[`(U)Int*`](/sql-reference/data-types/int-uint) -* `x` — 可选且会被忽略。该参数的唯一用途,是在同一个查询中多次使用相同的函数调用时,防止[公共子表达式消除](/sql-reference/functions/overview#common-subexpression-elimination)。[`Any`](/sql-reference/data-types) - -**返回值** - -返回一个由随机 ASCII 可打印字符组成的字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT number, randomPrintableASCII(30) AS str, length(str) FROM system.numbers LIMIT 3 -``` - -```response title=Response -┌─number─┬─str────────────────────────────┬─length(randomPrintableASCII(30))─┐ -│ 0 │ SuiCOSTvC0csfABSw=UcSzp2.`rv8x │ 30 │ -│ 1 │ 1Ag NlJ &RCN:*>HVPG;PE-nO"SUFD │ 30 │ -│ 2 │ /"+<"with:=LjJ Vm!c&hI*m#XTfzz │ 30 │ -└────────┴────────────────────────────────┴──────────────────────────────────┘ -``` - - -## randomString - -自 v20.5 版本起引入。 - -生成一个具有指定长度的随机字符串。 -返回的字符不一定是 ASCII 字符,即它们可能是不可打印字符。 - -**语法** - -```sql -randomString(length[, x]) -``` - -**参数** - -* `length` — 字符串的长度(以字节为单位)。[`(U)Int*`](/sql-reference/data-types/int-uint) -* `x` — 可选且会被忽略。该参数唯一的作用是在同一查询中多次使用相同的函数调用时,用于阻止[公共子表达式消除](/sql-reference/functions/overview#common-subexpression-elimination)优化。[`Any`](/sql-reference/data-types) - -**返回值** - -返回一个由随机字节填充的字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT randomString(5) AS str FROM numbers(2) -``` - -```response title=Response -��� -�v6B� -``` - - -## randomStringUTF8 - -自 v20.5 起引入 - -生成一个具有指定码点数量的随机 [UTF-8](https://en.wikipedia.org/wiki/UTF-8) 字符串。 -不会返回来自未分配的 [平面](https://en.wikipedia.org/wiki/Plane_\(Unicode\))(4 到 13 号平面)的码点。 -与 ClickHouse 服务器交互的客户端仍有可能无法正确显示生成的 UTF-8 字符串。 - -**语法** - -```sql -randomStringUTF8(length) -``` - -**参数** - -* `length` — 字符串的长度(以码点为单位)。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回一个由随机 UTF-8 码点组成的字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT randomStringUTF8(13) -``` - -```response title=Response -┌─randomStringUTF8(13)─┐ -│ 𘤗𙉝д兠庇󡅴󱱎󦐪􂕌𔊹𓰛 │ -└──────────────────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/rounding-functions.md b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/rounding-functions.md index 1ec6b67a7f1..25e061e3880 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/rounding-functions.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/rounding-functions.md @@ -1,480 +1,23 @@ --- -description: '舍入函数文档' -sidebar_label: '舍入' +description: '取整函数文档' +sidebar_label: '取整' slug: /sql-reference/functions/rounding-functions -title: '舍入函数' +title: '取整函数' doc_type: 'reference' --- - - -# 舍入函数 +# 取整函数 :::note 以下文档由 `system.functions` 系统表生成 ::: {/* - 以下标签内的内容会在文档框架构建期间 - 被替换为由 system.functions 生成的文档。请不要修改或删除这些标签。 + 下方标签的内容会在文档框架构建期间被替换为 + 由 system.functions 生成的文档。请不要修改或删除这些标签。 参见:https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## ceil - -引入版本:v1.1 - -类似于 [`floor`](#floor),但返回大于或等于 `x` 的最小舍入值。 -如果舍入导致溢出(例如 `ceiling(255, -1)`),结果未定义。 - -**语法** - -```sql -ceiling(x[, N]) -``` - -**别名**: `ceiling` - -**参数** - -* `x` — 要进行舍入的值。[`Float*`](/sql-reference/data-types/float) 或 [`Decimal*`](/sql-reference/data-types/decimal) 或 [`(U)Int*`](/sql-reference/data-types/int-uint) -* `N` — 可选。要舍入到的小数位数。默认值为 0,表示舍入为整数。可以为负数。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回与 `x` 类型相同的舍入结果。[`Float*`](/sql-reference/data-types/float) 或 [`Decimal*`](/sql-reference/data-types/decimal) 或 [`(U)Int*`](/sql-reference/data-types/int-uint) - -**示例** - -**基本用法** - -```sql title=Query -SELECT ceiling(123.45, 1) AS rounded -``` - -```response title=Response -┌─rounded─┐ -│ 123.5 │ -└─────────┘ -``` - -**负精度** - -```sql title=Query -SELECT ceiling(123.45, -1) -``` - -```response title=Response -┌─ceiling(123.45, -1)─┐ -│ 130 │ -└─────────────────────┘ -``` - - -## floor - -引入于:v1.1 - -返回小于或等于 `x` 的最大舍入值,其中该值是 `1 / 10 * N` 的倍数;如果 `1 / 10 * N` 不是精确值,则返回该数据类型中与其最接近的数值。 - -当 `N` 为负数时,整数参数也会被舍入。 -当 `N` 为非负数时,函数返回 `x` 本身。 - -如果舍入导致溢出(例如,`floor(-128, -1)`),结果未定义。 - -**语法** - -```sql -floor(x[, N]) -``` - -**参数** - -* `x` — 要进行取整的值。[`Float*`](/sql-reference/data-types/float) 或 [`Decimal*`](/sql-reference/data-types/decimal) 或 [`(U)Int*`](/sql-reference/data-types/int-uint) -* `N` — 可选。要舍入到的小数位数。默认为 0,即舍入为整数。可以为负数。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回与 `x` 类型相同的舍入后的数值。[`Float*`](/sql-reference/data-types/float) 或 [`Decimal*`](/sql-reference/data-types/decimal) 或 [`(U)Int*`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT floor(123.45, 1) AS rounded -``` - -```response title=Response -┌─rounded─┐ -│ 123.4 │ -└─────────┘ -``` - -**负精度** - -```sql title=Query -SELECT floor(123.45, -1) -``` - -```response title=Response -┌─floor(123.45, -1)─┐ -│ 120 │ -└───────────────────┘ -``` - - -## round - -引入自:v1.1 - -将一个值四舍五入到指定的小数位数 `N`。 - -* 如果 `N > 0`,函数在小数点右侧进行舍入。 -* 如果 `N < 0`,函数在小数点左侧进行舍入。 -* 如果 `N = 0`,函数舍入到最接近的整数。 - -该函数返回在指定数量级上最接近的数。 -如果输入值与两个相邻数的距离相等,对于 `Float*` 输入,函数使用银行家舍入法,对于其他数值类型(`Decimal*`)则采用远离零方向的舍入方式。 - -如果舍入导致溢出(例如 `round(255, -1)`),结果未定义。 - -**语法** - -```sql -round(x[, N]) -``` - -**参数** - -* `x` — 要进行舍入的数值。[`Float*`](/sql-reference/data-types/float) 或 [`Decimal*`](/sql-reference/data-types/decimal) 或 [`(U)Int*`](/sql-reference/data-types/int-uint) -* `N` — 可选。要舍入到的小数位数,默认为 `0`。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回一个与 `x` 类型相同的舍入后数值。[`Float*`](/sql-reference/data-types/float) 或 [`Decimal*`](/sql-reference/data-types/decimal) 或 [`(U)Int*`](/sql-reference/data-types/int-uint) - -**示例** - -**浮点类型输入** - -```sql title=Query -SELECT number / 2 AS x, round(x) FROM system.numbers LIMIT 3; -``` - -```response title=Response -┌───x─┬─round(x)─┐ -│ 0 │ 0 │ -│ 0.5 │ 0 │ -│ 1 │ 1 │ -└─────┴──────────┘ -``` - -**十进制输入** - -```sql title=Query -SELECT cast(number / 2 AS Decimal(10,4)) AS x, round(x) FROM system.numbers LIMIT 3; -``` - -```response title=Response -┌───x─┬─round(x)─┐ -│ 0 │ 0 │ -│ 0.5 │ 1 │ -│ 1 │ 1 │ -└─────┴──────────┘ -``` - - -## roundAge - -引入版本:v1.1 - -接收一个表示人的年龄的数字,将其与标准年龄区间进行比较,并返回该数字所在区间的最小值或最大值。 - -* 当 `age < 1` 时,返回 `0`。 -* 当 `1 ≤ age ≤ 17` 时,返回 `17`。 -* 当 `18 ≤ age ≤ 24` 时,返回 `18`。 -* 当 `25 ≤ age ≤ 34` 时,返回 `25`。 -* 当 `35 ≤ age ≤ 44` 时,返回 `35`。 -* 当 `45 ≤ age ≤ 54` 时,返回 `45`。 -* 当 `age ≥ 55` 时,返回 `55`。 - -**语法** - -```sql -roundAge(num) -``` - -**参数** - -* `age` — 以年为单位的年龄值。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) - -**返回值** - -返回 `age` 所在区间的上限或下限年龄值。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT *, roundAge(*) FROM system.numbers WHERE number IN (0, 5, 20, 31, 37, 54, 72); -``` - -```response title=Response -┌─number─┬─roundAge(number)─┐ -│ 0 │ 0 │ -│ 5 │ 17 │ -│ 20 │ 18 │ -│ 31 │ 25 │ -│ 37 │ 35 │ -│ 54 │ 45 │ -│ 72 │ 55 │ -└────────┴──────────────────┘ -``` - - -## roundBankers - -引入版本:v20.1 - -将一个数舍入到指定的小数位数 `N`。 -如果要舍入的数正好位于两个数的中间,则函数使用一种称为银行家舍入(banker's rounding)的方法,这是 IEEE 754 中为浮点数规定的默认舍入方式。 - -* 如果 `N > 0`,函数会在小数点右侧进行舍入 -* 如果 `N < 0`,函数会在小数点左侧进行舍入 -* 如果 `N = 0`,函数会舍入到最接近的整数 - -:::info Notes - -* 当要舍入的数正好位于两个数的中间时,会在指定的小数位舍入到最近的偶数字。 - 例如:`3.5` 舍入为 `4`,`2.5` 舍入为 `2`。 -* `round` 函数对浮点数执行相同的舍入方式。 -* `roundBankers` 函数对整数也采用相同的舍入方式,例如,`roundBankers(45, -1) = 40`。 -* 在其他情况下,函数将数字舍入到最近的整数。 - ::: - -:::tip Use banker's rounding for summation or subtraction of numbers -使用银行家舍入可以减小对这些数字进行舍入时对求和或求差结果的影响。 - -例如,对数字 `1.5, 2.5, 3.5, 4.5` 使用不同的舍入方式求和: - -* 不舍入:`1.5 + 2.5 + 3.5 + 4.5 = 12`。 -* 银行家舍入:`2 + 2 + 4 + 4 = 12`。 -* 舍入到最近整数:`2 + 3 + 4 + 5 = 14`。 - ::: - -**语法** - -```sql -roundBankers(x[, N]) -``` - -**参数** - -* `x` — 要进行舍入的数值。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Decimal*`](/sql-reference/data-types/decimal) 或 [`Float*`](/sql-reference/data-types/float) -* `[, N]` — 可选。要舍入到的小数位数,默认为 `0`。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回按银行家舍入法得到的舍入结果。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Decimal*`](/sql-reference/data-types/decimal) 或 [`Float*`](/sql-reference/data-types/float) - -**示例** - -**基本用法** - -```sql title=Query -SELECT number / 2 AS x, roundBankers(x, 0) AS b FROM system.numbers LIMIT 10 -``` - -```response title=Response -┌───x─┬─b─┐ -│ 0 │ 0 │ -│ 0.5 │ 0 │ -│ 1 │ 1 │ -│ 1.5 │ 2 │ -│ 2 │ 2 │ -│ 2.5 │ 2 │ -│ 3 │ 3 │ -│ 3.5 │ 4 │ -│ 4 │ 4 │ -│ 4.5 │ 4 │ -└─────┴───┘ -``` - - -## roundDown - -自 v20.1 引入 - -将数字向下取整到指定数组中的某个元素。 -如果该值小于下限,则返回下限。 - -**语法** - -```sql -roundDown(num, arr) -``` - -**参数** - -* `num` — 要向下取整的数字。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Decimal*`](/sql-reference/data-types/decimal) 或 [`Float*`](/sql-reference/data-types/float) -* `arr` — 用于将 `num` 向下取整到其中某个值的元素数组。[`Array((U)Int*)`](/sql-reference/data-types/array) 或 [`Array(Float*)`](/sql-reference/data-types/array) - -**返回值** - -返回向下取整后与 `arr` 中某个元素对齐的数值。如果该值小于最小边界,则返回最小边界值。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) - -**示例** - -**使用示例** - -```sql title=Query -SELECT *, roundDown(*, [3, 4, 5]) FROM system.numbers WHERE number IN (0, 1, 2, 3, 4, 5) -``` - -```response title=Response -┌─number─┬─roundDown(number, [3, 4, 5])─┐ -│ 0 │ 3 │ -│ 1 │ 3 │ -│ 2 │ 3 │ -│ 3 │ 3 │ -│ 4 │ 4 │ -│ 5 │ 5 │ -└────────┴──────────────────────────────┘ -``` - - -## roundDuration - -自 v1.1 起引入 - -将一个数字向下取整为下列常用时长中最接近的值:`1, 10, 30, 60, 120, 180, 240, 300, 600, 1200, 1800, 3600, 7200, 18000, 36000`。 -如果数字小于 1,则返回 `0`。 - -**语法** - -```sql -roundDuration(num) -``` - -**参数** - -* `num` — 要舍入到常用持续时间集合中某个值的数值。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) - -**返回值** - -当 `num` < 1 时返回 `0`。否则返回下列值之一:`1, 10, 30, 60, 120, 180, 240, 300, 600, 1200, 1800, 3600, 7200, 18000, 36000`。[`UInt16`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT *, roundDuration(*) FROM system.numbers WHERE number IN (0, 9, 19, 47, 101, 149, 205, 271, 421, 789, 1423, 2345, 4567, 9876, 24680, 42573) -``` - -```response title=Response -┌─number─┬─roundDuration(number)─┐ -│ 0 │ 0 │ -│ 9 │ 1 │ -│ 19 │ 10 │ -│ 47 │ 30 │ -│ 101 │ 60 │ -│ 149 │ 120 │ -│ 205 │ 180 │ -│ 271 │ 240 │ -│ 421 │ 300 │ -│ 789 │ 600 │ -│ 1423 │ 1200 │ -│ 2345 │ 1800 │ -│ 4567 │ 3600 │ -│ 9876 │ 7200 │ -│ 24680 │ 18000 │ -│ 42573 │ 36000 │ -└────────┴───────────────────────┘ -``` - - -## roundToExp2 - -引入于:v1.1 - -将数字向下舍入到最近的(非负整数)2 的整数次幂。 -如果数字小于 1,则返回 `0`。 - -**语法** - -```sql -roundToExp2(num) -``` - -**参数** - -* `num` — 要取整的数字。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) - -**返回值** - -返回将 `num` 向下取为距离它最近的(非负的)2 的整数次幂;对于 `num < 1`,返回 `0`。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) - -**示例** - -**使用示例** - -```sql title=Query -SELECT *, roundToExp2(*) FROM system.numbers WHERE number IN (0, 2, 5, 10, 19, 50) -``` - -```response title=Response -┌─number─┬─roundToExp2(number)─┐ -│ 0 │ 0 │ -│ 2 │ 2 │ -│ 5 │ 4 │ -│ 10 │ 8 │ -│ 19 │ 16 │ -│ 50 │ 32 │ -└────────┴─────────────────────┘ -``` - - -## trunc - -引入版本:v1.1 - -类似于 [`floor`](#floor),但返回的是绝对值不大于 `x` 的绝对值、且绝对值最大的取整值。 - -**语法** - -```sql -truncate(x[, N]) -``` - -**别名**: `truncate` - -**参数** - -* `x` — 要进行舍入的数值。[`Float*`](/sql-reference/data-types/float) 或 [`Decimal*`](/sql-reference/data-types/decimal) 或 [`(U)Int*`](/sql-reference/data-types/int-uint) -* `N` — 可选。要舍入到的小数位数。默认值为 0,表示舍入为整数。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回一个与 `x` 类型相同的舍入后数值。[`Float*`](/sql-reference/data-types/float) 或 [`Decimal*`](/sql-reference/data-types/decimal) 或 [`(U)Int*`](/sql-reference/data-types/int-uint) - -**示例** - -**基本用法** - -```sql title=Query -SELECT truncate(123.499, 1) AS res; -``` - -```response title=Response -┌───res─┐ -│ 123.4 │ -└───────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/splitting-merging-functions.md b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/splitting-merging-functions.md index 05b7004bb90..ffe2fcdb32a 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/splitting-merging-functions.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/splitting-merging-functions.md @@ -8,464 +8,18 @@ doc_type: 'reference' import DeprecatedBadge from '@theme/badges/DeprecatedBadge'; - # 字符串分割函数 :::note -以下文档由 `system.functions` 系统表自动生成。 -::: - - - - - - -## alphaTokens {#alphaTokens} - -引入版本:v1.1 - -从 `a-z` 和 `A-Z` 范围中选择连续字节的子字符串,并返回所选子字符串的数组。 - -**语法** - -```sql -alphaTokens(s[, max_substrings]) -``` - -**别名**:`splitByAlpha` - -**参数** - -- `s` — 要分割的字符串。[`String`](/sql-reference/data-types/string) -- `max_substrings` — 可选。当 `max_substrings > 0` 时,返回的子字符串数量不超过 `max_substrings`,否则函数将返回尽可能多的子字符串。[`Int64`](/sql-reference/data-types/int-uint) - -**返回值** - -返回 `s` 的所选子字符串数组。[`Array(String)`](/sql-reference/data-types/array) - -**示例** - -**使用示例** - -```sql title=Query -SELECT alphaTokens('abca1abc'); -``` - -```response title=Response -┌─alphaTokens('abca1abc')─┐ -│ ['abca','abc'] │ -└─────────────────────────┘ -``` - - -## arrayStringConcat {#arrayStringConcat} - -引入版本:v1.1 - -将数组中各元素的字符串表示形式使用指定的分隔符连接起来。分隔符为可选参数,默认为空字符串。 - -**语法** - -```sql -arrayStringConcat(arr[, separator]) -``` - -**参数** - -- `arr` — 要连接的数组。[`Array(T)`](/sql-reference/data-types/array) -- `separator` — 可选参数。分隔符字符串。默认为空字符串。[`const String`](/sql-reference/data-types/string) - -**返回值** - -返回连接后的字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT arrayStringConcat(['12/05/2021', '12:50:00'], ' ') AS DateString; -``` - -```response title=Response -┌─DateString──────────┐ -│ 12/05/2021 12:50:00 │ -└─────────────────────┘ -``` - - -## extractAllGroupsVertical {#extractAllGroupsVertical} - -引入版本:v20.5 - -使用正则表达式匹配字符串中的所有分组,返回一个二维数组,其中每个数组包含一次匹配中所有捕获分组的内容,按照匹配在输入字符串中出现的顺序排列。 - -**语法** - -```sql -extractAllGroupsVertical(s, regexp) -``` - -**别名**:`extractAllGroups` - -**参数** - -- `s` — 待提取的输入字符串。[`String`](/sql-reference/data-types/string) 或 [`FixedString`](/sql-reference/data-types/fixedstring) -- `regexp` — 用于匹配的正则表达式。[`const String`](/sql-reference/data-types/string) 或 [`const FixedString`](/sql-reference/data-types/fixedstring) - -**返回值** - -返回一个二维数组,其中每个内部数组包含一次匹配中的所有捕获分组。每次匹配生成一个数组,其元素按顺序对应正则表达式中的捕获分组(分组 1、分组 2 等)。如果未找到匹配项,则返回空数组。[`Array(Array(String))`](/sql-reference/data-types/array) - -**示例** - -**使用示例** - -```sql title=查询 -WITH '< Server: nginx -< Date: Tue, 22 Jan 2019 00:26:14 GMT -< Content-Type: text/html; charset=UTF-8 -< Connection: keep-alive -' AS s -SELECT extractAllGroupsVertical(s, '< ([\\w\\-]+): ([^\\r\\n]+)'); -``` - -```response title=响应 -[['Server','nginx'],['Date','Tue, 22 Jan 2019 00:26:14 GMT'],['Content-Type','text/html; charset=UTF-8'],['Connection','keep-alive']] -``` - - -## ngrams {#ngrams} - -引入版本:v21.11 - -将 UTF-8 字符串拆分为包含 `ngramsize` 个符号的 n-gram。 - -**语法** - -```sql -ngrams(s, ngram_size) -``` - -**参数** - -- `s` — 输入字符串。[`String`](/sql-reference/data-types/string) 或 [`FixedString`](/sql-reference/data-types/fixedstring) -- `ngram_size` — n-gram 的大小。[`const UInt8/16/32/64`](/sql-reference/data-types/int-uint) - -**返回值** - -返回包含 n-gram 的数组。[`Array(String)`](/sql-reference/data-types/array) - -**示例** - -**使用示例** - -```sql title=查询 -SELECT ngrams('ClickHouse', 3); -``` - -```response title=响应 -['Cli','lic','ick','ckH','kHo','Hou','ous','use'] -``` - - -## splitByChar {#splitByChar} - -引入版本:v1.1 - -将由指定的单字符常量字符串 `separator` 分隔的字符串拆分为子字符串数组。 -如果分隔符出现在字符串的开头或结尾,或者存在多个连续的分隔符,则可能会产生空子字符串。 - -:::note -设置 [`splitby_max_substrings_includes_remaining_string`](../../operations/settings/settings.md#splitby_max_substrings_includes_remaining_string)(默认值:`0`)用于控制当参数 `max_substrings > 0` 时,是否将剩余字符串包含在结果数组的最后一个元素中。 -::: - -在以下情况下可能会产生空子字符串: - -- 分隔符出现在字符串的开头或结尾 -- 存在多个连续的分隔符 -- 原始字符串 `s` 为空 - -**语法** - -```sql -splitByChar(separator, s[, max_substrings]) -``` - -**参数** - -- `separator` — 分隔符,必须是单字节字符。[`String`](/sql-reference/data-types/string) -- `s` — 要拆分的字符串。[`String`](/sql-reference/data-types/string) -- `max_substrings` — 可选参数。如果 `max_substrings > 0`,返回的数组最多包含 `max_substrings` 个子字符串,否则函数将返回尽可能多的子字符串。默认值为 `0`。[`Int64`](/sql-reference/data-types/int-uint) - -**返回值** - -返回由选定子字符串组成的数组。[`Array(String)`](/sql-reference/data-types/array) - -**示例** - -**使用示例** - -```sql title=Query -SELECT splitByChar(',', '1,2,3,abcde'); -``` - -```response title=Response -┌─splitByChar(⋯2,3,abcde')─┐ -│ ['1','2','3','abcde'] │ -└──────────────────────────┘ -``` - - -## splitByNonAlpha {#splitByNonAlpha} - -引入版本:v21.9 - -将字符串按空格和标点符号分隔并拆分为子字符串数组。 - -:::note -设置 [`splitby_max_substrings_includes_remaining_string`](../../operations/settings/settings.md#splitby_max_substrings_includes_remaining_string)(默认值:`0`)用于控制当参数 `max_substrings > 0` 时,是否将剩余字符串包含在结果数组的最后一个元素中。 +以下文档根据 `system.functions` 系统表自动生成。 ::: -**语法** - -```sql -splitByNonAlpha(s[, max_substrings]) -``` - -**参数** - -- `s` — 要拆分的字符串。[`String`](/sql-reference/data-types/string) -- `max_substrings` — 可选参数。当 `max_substrings > 0` 时,返回的子字符串数量不超过 `max_substrings`,否则函数将返回尽可能多的子字符串。默认值:`0`。[`Int64`](/sql-reference/data-types/int-uint) - -**返回值** - -返回 `s` 拆分后的子字符串数组。[`Array(String)`](/sql-reference/data-types/array) - -**示例** - -**使用示例** - -```sql title=Query -SELECT splitByNonAlpha('user@domain.com'); -``` - -```response title=Response -['user','domain','com'] -``` - - -## splitByRegexp {#splitByRegexp} - -引入版本:v21.6 - -根据提供的正则表达式将字符串拆分为子字符串数组。 -如果提供的正则表达式为空,则将字符串拆分为单个字符的数组。 -如果正则表达式未找到匹配项,则字符串不会被拆分。 - -在以下情况下可能会产生空子字符串: - -- 非空正则表达式在字符串的开头或结尾匹配 -- 存在多个连续的非空正则表达式匹配 -- 原始字符串为空而正则表达式不为空。 - -:::note -设置 [`splitby_max_substrings_includes_remaining_string`](../../operations/settings/settings.md#splitby_max_substrings_includes_remaining_string)(默认值:`0`)控制当参数 `max_substrings > 0` 时,剩余字符串是否包含在结果数组的最后一个元素中。 -::: - -**语法** - -```sql -splitByRegexp(regexp, s[, max_substrings]) -``` - -**参数** - -- `regexp` — 正则表达式。常量。[`String`](/sql-reference/data-types/string) 或 [`FixedString`](/sql-reference/data-types/fixedstring) -- `s` — 要拆分的字符串。[`String`](/sql-reference/data-types/string) -- `max_substrings` — 可选。当 `max_substrings > 0` 时,返回的子字符串数量不超过 `max_substrings`,否则函数将返回尽可能多的子字符串。默认值:`0`。[`Int64`](/sql-reference/data-types/int-uint) - -**返回值** - -返回 `s` 的子字符串数组。[`Array(String)`](/sql-reference/data-types/array) - -**示例** - -**使用示例** - -```sql title=查询 -SELECT splitByRegexp('\\d+', 'a12bc23de345f'); -``` - -```response title=响应 -┌─splitByRegex⋯c23de345f')─┐ -│ ['a12bc23de345f'] │ -└──────────────────────────┘ -``` - -**空正则表达式** - -```sql title=查询 -SELECT splitByRegexp('', 'abcde'); -``` - -```response title=响应 -┌─splitByRegexp('', 'abcde')─┐ -│ ['a','b','c','d','e'] │ -└────────────────────────────┘ -``` - - -## splitByString {#splitByString} - -引入版本:v1.1 - -使用由多个字符组成的常量 `separator` 将字符串分割为子字符串数组。 -如果 `separator` 为空字符串,则将字符串 `s` 分割为单个字符的数组。 - -在以下情况下可能会产生空子字符串: - -- 非空分隔符出现在字符串的开头或结尾 -- 存在多个连续的非空分隔符 -- 原始字符串 `s` 为空而分隔符不为空 - -:::note -设置 [`splitby_max_substrings_includes_remaining_string`](../../operations/settings/settings.md#splitby_max_substrings_includes_remaining_string)(默认值:`0`)用于控制当参数 `max_substrings > 0` 时,是否将剩余字符串包含在结果数组的最后一个元素中。 -::: - -**语法** - -```sql -splitByString(separator, s[, max_substrings]) -``` - -**参数** - -- `separator` — 分隔符。[`String`](/sql-reference/data-types/string) -- `s` — 要分割的字符串。[`String`](/sql-reference/data-types/string) -- `max_substrings` — 可选参数。当 `max_substrings > 0` 时,返回的子字符串数量不超过 `max_substrings`,否则函数将返回尽可能多的子字符串。默认值:`0`。[`Int64`](/sql-reference/data-types/int-uint) - -**返回值** - -返回 `s` 的子字符串数组 [`Array(String)`](/sql-reference/data-types/array) - -**示例** - -**使用示例** - -```sql title=Query -SELECT splitByString(', ', '1, 2 3, 4,5, abcde'); -``` - -```response title=Response -┌─splitByStrin⋯4,5, abcde')─┐ -│ ['1','2 3','4,5','abcde'] │ -└───────────────────────────┘ -``` - -**空分隔符** - -```sql title=Query -SELECT splitByString('', 'abcde'); -``` - -```response title=Response -┌─splitByString('', 'abcde')─┐ -│ ['a','b','c','d','e'] │ -└────────────────────────────┘ -``` - - -## splitByWhitespace {#splitByWhitespace} - -引入版本:v21.9 - -将由空白字符分隔的字符串拆分为子字符串数组。 - -:::note -设置 [`splitby_max_substrings_includes_remaining_string`](../../operations/settings/settings.md#splitby_max_substrings_includes_remaining_string)(默认值:`0`)用于控制当参数 `max_substrings > 0` 时,是否将剩余字符串包含在结果数组的最后一个元素中。 -::: - -**语法** - -```sql -splitByWhitespace(s[, max_substrings]) -``` - -**参数** - -- `s` — 要拆分的字符串。[`String`](/sql-reference/data-types/string) -- `max_substrings` — 可选参数。当 `max_substrings > 0` 时,返回的子字符串数量不超过 `max_substrings`,否则函数将返回尽可能多的子字符串。默认值:`0`。[`Int64`](/sql-reference/data-types/int-uint) - -**返回值** - -返回 `s` 拆分后的子字符串数组。[`Array(String)`](/sql-reference/data-types/array) - -**示例** - -**使用示例** - -```sql title=Query -SELECT splitByWhitespace(' 1! a, b. '); -``` - -```response title=Response -['1!','a,','b.'] -``` - - -## tokens {#tokens} - -引入版本:v21.11 - -使用指定的分词器将字符串拆分为标记(token)。 -默认分词器使用非字母数字的 ASCII 字符作为分隔符。 - -对于 `split` 分词器,如果标记不构成[前缀码](https://en.wikipedia.org/wiki/Prefix_code),您可能希望匹配时优先使用较长的分隔符。 -为此,请按长度降序传递分隔符。 -例如,使用 separators = `['%21', '%']` 时,字符串 `%21abc` 将被分词为 `['abc']`,而使用 separators = `['%', '%21']` 则会分词为 `['21ac']`(这可能不是您想要的结果)。 - -**语法** - -```sql -tokens(value[, tokenizer[, ngrams[, separators]]]) -``` - -**参数** - -- `value` — 输入字符串。[`String`](/sql-reference/data-types/string) 或 [`FixedString`](/sql-reference/data-types/fixedstring) -- `tokenizer` — 要使用的分词器。有效参数为 `splitByNonAlpha`、`ngrams`、`splitByString`、`array` 和 `sparseGrams`。可选参数,如果未显式设置,默认为 `splitByNonAlpha`。[`const String`](/sql-reference/data-types/string) -- `ngrams` — 仅当参数 `tokenizer` 为 `ngrams` 时相关:定义 n-gram 长度的可选参数。如果未显式设置,默认为 `3`。[`const UInt8`](/sql-reference/data-types/int-uint) -- `separators` — 仅当参数 `tokenizer` 为 `split` 时相关:定义分隔符字符串的可选参数。如果未显式设置,默认为 `[' ']`。[`const Array(String)`](/sql-reference/data-types/array) - -**返回值** - -返回从输入字符串生成的标记数组。[`Array`](/sql-reference/data-types/array) - -**示例** - -**默认分词器** - -```sql title=查询 -SELECT tokens('test1,;\\\\ test2,;\\\\ test3,;\\\\ test4') AS tokens; -``` - -```response title=响应 -['test1','test2','test3','test4'] -``` - -**N-gram 分词器** - -```sql title=查询 -SELECT tokens('abc def', 'ngrams', 3) AS tokens; -``` +{/* + 下面标签内部的内容会在文档框架构建期间被替换为 + 从 system.functions 生成的文档。请不要修改或移除这些标签。 + 参见:https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md + */ } -```response title=响应 -['abc','bc ','c d',' de','def'] -``` +{/*AUTOGENERATED_START*/ } - +{/*AUTOGENERATED_END*/ } diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/string-functions.md b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/string-functions.md index 7d229fc240a..44431c4a88b 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/string-functions.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/string-functions.md @@ -9,3610 +9,20 @@ doc_type: 'reference' import VersionBadge from '@theme/badges/VersionBadge'; -# 字符串处理函数 +# 用于处理字符串的函数 -用于在字符串中进行[搜索](string-search-functions.md)和[替换](string-replace-functions.md)的函数在单独的文档中说明。 +用于在字符串中[搜索](string-search-functions.md)和[替换](string-replace-functions.md)的函数在单独的文档中说明。 :::note -下文文档是由 `system.functions` 系统表自动生成的。 +下文文档是从 `system.functions` 系统表生成的。 ::: {/* - 下面标签中的内容会在文档框架构建时 - 被由 system.functions 生成的文档替换。请不要修改或删除这些标签。 + 下面标签中的内容会在构建文档框架时被替换为 + 从 system.functions 生成的文档。请勿修改或删除这些标签。 参见:https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## CRC32 - -自 v20.1 引入 - -使用 CRC-32-IEEE 802.3 多项式和初始值 `0xffffffff`(zlib 实现)计算字符串的 CRC32 校验和。 - -**语法** - -```sql -CRC32(s) -``` - -**参数** - -* `s` — 用于计算 CRC32 的字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回该字符串的 CRC32 校验值。[`UInt32`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT CRC32('ClickHouse') -``` - -```response title=Response -┌─CRC32('ClickHouse')─┐ -│ 1538217360 │ -└─────────────────────┘ -``` - - -## CRC32IEEE - -首次引入于:v20.1 - -使用 CRC-32-IEEE 802.3 多项式计算字符串的 CRC32 校验和。 - -**语法** - -```sql -CRC32IEEE(s) -``` - -**参数** - -* `s` — 要计算 CRC32 的字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回该字符串的 CRC32 校验和。[`UInt32`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT CRC32IEEE('ClickHouse'); -``` - -```response title=Response -┌─CRC32IEEE('ClickHouse')─┐ -│ 3089448422 │ -└─────────────────────────┘ -``` - - -## CRC64 - -首次引入于:v20.1 - -使用 CRC-64-ECMA 多项式计算字符串的 CRC64 校验和。 - -**语法** - -```sql -CRC64(s) -``` - -**参数** - -* `s` — 需要计算 CRC64 的字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回该字符串的 CRC64 校验和。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT CRC64('ClickHouse'); -``` - -```response title=Response -┌──CRC64('ClickHouse')─┐ -│ 12126588151325169346 │ -└──────────────────────┘ -``` - - -## appendTrailingCharIfAbsent - -自 v1.1 起引入 - -如果字符串 `s` 非空且末尾不是字符 `c`,则在字符串 `s` 末尾追加字符 `c`。 - -**语法** - -```sql -appendTrailingCharIfAbsent(s, c) -``` - -**参数** - -* `s` — 输入字符串。[`String`](/sql-reference/data-types/string) -* `c` — 若不存在结尾时要追加的字符。[`String`](/sql-reference/data-types/string) - -**返回值** - -如果字符串 `s` 不以字符 `c` 结尾,则返回在末尾追加字符 `c` 后的字符串 `s`。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT appendTrailingCharIfAbsent('https://example.com', '/'); -``` - -```response title=Response -┌─appendTraili⋯.com', '/')─┐ -│ https://example.com/ │ -└──────────────────────────┘ -``` - - -## ascii - -引入于:v22.11 - -以 `Int32` 的形式返回字符串 `s` 第一个字符的 ASCII 码点。 - -**语法** - -```sql -ascii(s) -``` - -**参数** - -* `s` — 字符串类型的输入。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回第一个字符的 ASCII 码点。如果 `s` 为空,则结果为 `0`。如果第一个字符不是 ASCII 字符或不属于 UTF-16 的 Latin-1 补充块,则结果未定义。[`Int32`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT ascii('234') -``` - -```response title=Response -┌─ascii('234')─┐ -│ 50 │ -└──────────────┘ -``` - - -## base32Decode - -自 v25.6 起引入 - -对 [Base32](https://datatracker.ietf.org/doc/html/rfc4648#section-6)(RFC 4648)字符串进行解码。 -如果字符串不是有效的 Base32 编码格式,则会抛出异常。 - -**语法** - -```sql -base32Decode(encoded) -``` - -**参数** - -* `encoded` — 字符串列或常量。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回一个包含解码后参数值的字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT base32Decode('IVXGG33EMVSA===='); -``` - -```response title=Response -┌─base32Decode('IVXGG33EMVSA====')─┐ -│ 编码后 │ -└──────────────────────────────────┘ -``` - - -## base32Encode - -自 v25.6 引入 - -使用 [Base32](https://datatracker.ietf.org/doc/html/rfc4648#section-6) 对字符串进行编码。 - -**语法** - -```sql -base32Encode(plaintext) -``` - -**参数** - -* `plaintext` — 要编码的明文。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回一个包含该参数编码结果的字符串。[`String`](/sql-reference/data-types/string) 或 [`FixedString`](/sql-reference/data-types/fixedstring) - -**示例** - -**使用示例** - -```sql title=Query -SELECT base32Encode('Encoded') -``` - -```response title=Response -┌─base32Encode('Encoded')─┐ -│ IVXGG33EMVSA==== │ -└─────────────────────────┘ -``` - - -## base58Decode - -自 v22.7 引入 - -对 [Base58](https://datatracker.ietf.org/doc/html/draft-msporny-base58-03#section-3) 字符串进行解码。 -如果字符串不是有效的 Base58 编码字符串,则会抛出异常。 - -**语法** - -```sql -base58Decode(encoded) -``` - -**参数** - -* `encoded` — 要解码的字符串列或常量。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回一个包含该参数解码结果的字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT base58Decode('JxF12TrwUP45BMd'); -``` - -```response title=Response -┌─base58Decode⋯rwUP45BMd')─┐ -│ Hello World │ -└──────────────────────────┘ -``` - - -## base58Encode - -引入版本:v22.7 - -使用 [Base58](https://tools.ietf.org/id/draft-msporny-base58-01.html) 对字符串进行编码。 - -**语法** - -```sql -base58Encode(plaintext) -``` - -**参数** - -* `plaintext` — 要编码的明文。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回一个包含该参数编码值的字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT base58Encode('ClickHouse'); -``` - -```response title=Response -┌─base58Encode('ClickHouse')─┐ -│ 4nhk8K7GHXf6zx │ -└────────────────────────────┘ -``` - - -## base64Decode - -自 v18.16 引入 - -根据 RFC 4648,将字符串从 [Base64](https://en.wikipedia.org/wiki/Base64) 表示形式解码。 -在发生错误时抛出异常。 - -**语法** - -```sql -base64Decode(encoded) -``` - -**别名**:`FROM_BASE64` - -**参数** - -* `encoded` — 要解码的字符串列或常量。如果字符串不是有效的 Base64 编码,将抛出异常。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回解码后的字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT base64Decode('Y2xpY2tob3VzZQ==') -``` - -```response title=Response -┌─base64Decode('Y2xpY2tob3VzZQ==')─┐ -│ clickhouse │ -└──────────────────────────────────┘ -``` - - -## base64Encode - -自 v18.16 版本引入 - -按照 [Base64](https://en.wikipedia.org/wiki/Base64) 表示对字符串进行编码,遵循 RFC 4648 标准。 - -**语法** - -```sql -base64Encode(明文) -``` - -**别名**: `TO_BASE64` - -**参数** - -* `plaintext` — 要编码的明文列或常量。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回一个包含该参数编码后值的字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT base64Encode('clickhouse') -``` - -```response title=Response -┌─base64Encode('clickhouse')─┐ -│ Y2xpY2tob3VzZQ== │ -└────────────────────────────┘ -``` - - -## base64URLDecode - -自 v24.6 引入 - -根据 RFC 4648,使用 URL 安全的字母表对 [Base64](https://en.wikipedia.org/wiki/Base64) 表示的字符串进行解码。\ -发生错误时会抛出异常。 - -**语法** - -```sql -base64URLDecode(encoded) -``` - -**参数** - -* `encoded` — 要进行解码的字符串列或常量。如果字符串不是有效的 Base64 编码字符串,则会抛出异常。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回一个包含参数解码后值的字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT base64URLDecode('aHR0cHM6Ly9jbGlja2hvdXNlLmNvbQ') -``` - -```response title=Response -┌─base64URLDecode('aHR0cHM6Ly9jbGlja2hvdXNlLmNvbQ')─┐ -│ https://clickhouse.com │ -└───────────────────────────────────────────────────┘ -``` - - -## base64URLEncode - -自 v18.16 引入 - -使用 URL 安全字母表,将字符串编码为 [Base64](https://datatracker.ietf.org/doc/html/rfc4648#section-4)(RFC 4648)编码表示。 - -**语法** - -```sql -base64URLEncode(plaintext) -``` - -**参数** - -* `plaintext` — 要进行编码的明文列或常量。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回一个包含该参数编码结果的字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT base64URLEncode('https://clickhouse.com') -``` - -```response title=Response -┌─base64URLEncode('https://clickhouse.com')─┐ -│ aHR0cHM6Ly9jbGlja2hvdXNlLmNvbQ │ -└───────────────────────────────────────────┘ -``` - - -## basename - -自 v20.1 版本引入 - -提取字符串中最后一个正斜杠或反斜杠之后的末尾部分。 -该函数通常用于从路径中提取文件名。 - -**语法** - -```sql -basename(expr) -``` - -**参数** - -* `expr` — 字符串表达式。反斜杠必须转义。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回输入字符串中最后一个斜杠或反斜杠之后的部分。如果输入字符串以斜杠或反斜杠结尾,则函数返回空字符串。如果不存在斜杠或反斜杠,则返回原始字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**从 Unix 路径中提取文件名** - -```sql title=Query -SELECT 'some/long/path/to/file' AS a, basename(a) -``` - -```response title=Response -┌─a──────────────────────┬─basename('some/long/path/to/file')─┐ -│ some/long/path/to/file │ file │ -└────────────────────────┴────────────────────────────────────┘ -``` - -**从 Windows 路径中提取文件名** - -```sql title=Query -SELECT 'some\\long\\path\\to\\file' AS a, basename(a) -``` - -```response title=Response -┌─a──────────────────────┬─basename('some\\long\\path\\to\\file')─┐ -│ some\long\path\to\file │ file │ -└────────────────────────┴────────────────────────────────────────┘ -``` - -**不含路径分隔符的字符串** - -```sql title=Query -SELECT 'some-file-name' AS a, basename(a) -``` - -```response title=Response -┌─a──────────────┬─basename('some-file-name')─┐ -│ some-file-name │ some-file-name │ -└────────────────┴────────────────────────────┘ -``` - - -## byteHammingDistance - -在 v23.9 中引入 - -计算两个字节串之间的 [汉明距离](https://en.wikipedia.org/wiki/Hamming_distance)。 - -**语法** - -```sql -byteHammingDistance(s1, s2) -``` - -**别名**:`mismatches` - -**参数** - -* `s1` — 第一个输入字符串。[`String`](/sql-reference/data-types/string) -* `s2` — 第二个输入字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回两个字符串之间的汉明距离。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT byteHammingDistance('karolin', 'kathrin') -``` - -```response title=Response -┌─byteHammingDistance('karolin', 'kathrin')─┐ -│ 3 │ -└───────────────────────────────────────────┘ -``` - - -## compareSubstrings - -在 v25.2 中引入 - -按字典序比较两个字符串。 - -**语法** - -```sql -compareSubstrings(s1, s2, s1_offset, s2_offset, num_bytes) -``` - -**参数** - -* `s1` — 要比较的第一个字符串。[`String`](/sql-reference/data-types/string) -* `s2` — 要比较的第二个字符串。[`String`](/sql-reference/data-types/string) -* `s1_offset` — 在 `s1` 中开始比较的起始位置(从 0 开始计数)。[`UInt*`](/sql-reference/data-types/int-uint) -* `s2_offset` — 在 `s2` 中开始比较的起始位置(从 0 开始计数的索引)。[`UInt*`](/sql-reference/data-types/int-uint) -* `num_bytes` — 在两个字符串中最多比较的字节数。如果 `s1_offset`(或 `s2_offset`)+ `num_bytes` 超过输入字符串的末尾,则 `num_bytes` 会相应减小。[`UInt*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回: - -* 如果 `s1`[`s1_offset` : `s1_offset` + `num_bytes`] < `s2`[`s2_offset` : `s2_offset` + `num_bytes`],则返回 `-1`。 -* 如果 `s1`[`s1_offset` : `s1_offset` + `num_bytes`] = `s2`[`s2_offset` : `s2_offset` + `num_bytes`],则返回 `0`。 -* 如果 `s1`[`s1_offset` : `s1_offset` + `num_bytes`] > `s2`[`s2_offset` : `s2_offset` + `num_bytes`],则返回 `1`。 - [`Int8`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT compareSubstrings('Saxony', 'Anglo-Saxon', 0, 6, 5) AS result -``` - -```response title=Response -┌─result─┐ -│ 0 │ -└────────┘ -``` - - -## concat - -自 v1.1 引入 - -将给定的参数拼接在一起。 - -非 [`String`](../data-types/string.md) 或 [`FixedString`](../data-types/fixedstring.md) 类型的参数会使用其默认序列化方式转换为字符串。 -由于这会降低性能,因此不建议使用非 `String`/`FixedString` 类型的参数。 - -**语法** - -```sql -concat([s1, s2, ...]) -``` - -**参数** - -* `s1, s2, ...` — 任意数量的任意类型的值。[`Any`](/sql-reference/data-types) - -**返回值** - -返回由参数拼接而成的字符串(String 类型)。若任一参数为 `NULL`,则函数返回 `NULL`。如果没有参数,则返回空字符串。[`Nullable(String)`](/sql-reference/data-types/nullable) - -**示例** - -**字符串拼接** - -```sql title=Query -SELECT concat('你好,', '世界!') -``` - -```response title=Response -┌─concat('Hello, ', 'World!')─┐ -│ Hello, World! │ -└─────────────────────────────┘ -``` - -**数字连接** - -```sql title=Query -SELECT concat(42, 144) -``` - -```response title=Response -┌─concat(42, 144)─┐ -│ 42144 │ -└─────────────────┘ -``` - - -## concatAssumeInjective - -引入版本:v1.1 - -与 [`concat`](#concat) 类似,但假设 `concat(s1, s2, ...) → sn` 是单射, -即对不同的参数会返回不同的结果。 - -可用于优化 `GROUP BY`。 - -**语法** - -```sql -concatAssumeInjective([s1, s2, ...]) -``` - -**参数** - -* `s1, s2, ...` — 任意数量、任意类型的值。[`String`](/sql-reference/data-types/string) 或 [`FixedString`](/sql-reference/data-types/fixedstring) - -**返回值** - -返回通过连接各参数生成的字符串。若任意一个参数值为 `NULL`,则函数返回 `NULL`。如果未传入任何参数,则返回空字符串。类型为 [`String`](/sql-reference/data-types/string) - -**示例** - -**GROUP BY 优化** - -```sql title=Query -SELECT concat(key1, key2), sum(value) FROM key_val GROUP BY concatAssumeInjective(key1, key2) -``` - -```response title=Response -┌─concat(key1, key2)─┬─sum(value)─┐ -│ Hello, World! │ 3 │ -│ Hello, World! │ 2 │ -│ Hello, World │ 3 │ -└────────────────────┴────────────┘ -``` - - -## concatWithSeparator - -自 v22.12 版本引入 - -将提供的字符串用指定的分隔符连接起来。 - -**语法** - -```sql -concatWithSeparator(sep[, exp1, exp2, ...]) -``` - -**别名**: `concat_ws` - -**参数** - -* `sep` — 要使用的分隔符。[`const String`](/sql-reference/data-types/string) 或 [`const FixedString`](/sql-reference/data-types/fixedstring) -* `exp1, exp2, ...` — 要拼接的表达式。非 `String` 或 `FixedString` 类型的参数会使用其默认序列化方式转换为字符串。由于这会降低性能,建议避免使用非 `String`/`FixedString` 类型的参数。[`Any`](/sql-reference/data-types) - -**返回值** - -返回由各参数拼接得到的字符串。如果任一参数值为 `NULL`,函数返回 `NULL`。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT concatWithSeparator('a', '1', '2', '3', '4') -``` - -```response title=Response -┌─concatWithSeparator('a', '1', '2', '3', '4')─┐ -│ 1a2a3a4 │ -└──────────────────────────────────────────────┘ -``` - - -## concatWithSeparatorAssumeInjective - -引入版本:v22.12 - -与 [`concatWithSeparator`](#concatWithSeparator) 类似,但假设 `concatWithSeparator(sep[,exp1, exp2, ... ]) → result` 是单射。 -如果一个函数对不同的参数返回不同的结果,则称该函数为单射。 - -可用于 `GROUP BY` 优化。 - -**语法** - -```sql -concatWithSeparatorAssumeInjective(sep[, exp1, exp2, ... ]) -``` - -**参数** - -* `sep` — 要使用的分隔符。[`const String`](/sql-reference/data-types/string) 或 [`const FixedString`](/sql-reference/data-types/fixedstring) -* `exp1, exp2, ...` — 要进行拼接的表达式。非 `String` 或 `FixedString` 类型的参数会通过其默认序列化方式转换为字符串。由于这会降低性能,不建议使用非 `String`/`FixedString` 类型的参数。参数类型:[`String`](/sql-reference/data-types/string) 或 [`FixedString`](/sql-reference/data-types/fixedstring) - -**返回值** - -返回通过拼接各参数生成的字符串(`String`)。如果任意参数值为 `NULL`,函数返回 `NULL`。返回类型:[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -CREATE TABLE user_data ( -user_id UInt32, -first_name String, -last_name String, -score UInt32 -) -ENGINE = MergeTree -ORDER BY tuple(); - -INSERT INTO user_data VALUES -(1, 'John', 'Doe', 100), -(2, 'Jane', 'Smith', 150), -(3, 'John', 'Wilson', 120), -(4, 'Jane', 'Smith', 90); - -SELECT - concatWithSeparatorAssumeInjective('-', first_name, last_name) as full_name, - sum(score) as total_score -FROM user_data -GROUP BY concatWithSeparatorAssumeInjective('-', first_name, last_name); -``` - -```response title=Response -┌─full_name───┬─total_score─┐ -│ Jane-Smith │ 240 │ -│ John-Doe │ 100 │ -│ John-Wilson │ 120 │ -└─────────────┴─────────────┘ -``` - - -## conv - -引入版本:v1.1 - -在不同进制之间转换数字。 - -此函数将数字从一个进制转换为另一个进制。它支持 2 到 36 进制。 -对于大于 10 的进制,使用字母 A-Z(不区分大小写)表示数字 10-35。 - -此函数兼容 MySQL 的 CONV() 函数。 - -**语法** - -```sql -conv(number, from_base, to_base) -``` - -**参数** - -* `number` — 要转换的数值。可以是字符串或数值类型。 - `from_base` — 源进制(2-36)。必须是整数。 - `to_base` — 目标进制(2-36)。必须是整数。 - -**返回值** - -该数值在目标进制下的字符串表示形式。 - -**示例** - -**将十进制转换为二进制** - -```sql title=Query -SELECT conv('10', 10, 2) -``` - -```response title=Response -1010 -``` - -**将十六进制转换为十进制** - -```sql title=Query -SELECT conv('FF', 16, 10) -``` - -```response title=Response -255 -``` - -**包含负数的转换** - -```sql title=Query -SELECT conv('-1', 10, 16) -``` - -```response title=Response -FFFFFFFFFFFFFFFF -``` - -**将二进制转换为八进制** - -```sql title=Query -SELECT conv('1010', 2, 8) -``` - -```response title=Response -12 -``` - - -## convertCharset - -自 v1.1 起引入 - -返回将字符串 `s` 从编码 `from` 转换为编码 `to` 后的结果。 - -**语法** - -```sql -convertCharset(s, from, to) -``` - -**参数** - -* `s` — 输入字符串。[`String`](/sql-reference/data-types/string) -* `from` — 源编码。[`String`](/sql-reference/data-types/string) -* `to` — 目标编码。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回将字符串 `s` 从 `from` 编码转换为 `to` 编码后的结果。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT convertCharset('Café', 'UTF-8', 'ISO-8859-1'); -``` - -```response title=Response -┌─convertChars⋯SO-8859-1')─┐ -│ Caf� │ -└──────────────────────────┘ -``` - - -## damerauLevenshteinDistance - -在 v24.1 中引入 - -计算两个字节字符串之间的 [Damerau-Levenshtein 距离](https://en.wikipedia.org/wiki/Damerau%E2%80%93Levenshtein_distance)。 - -**语法** - -```sql -damerauLevenshteinDistance(s1, s2) -``` - -**参数** - -* `s1` — 第一个输入字符串。[`String`](/sql-reference/data-types/string) -* `s2` — 第二个输入字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回两个字符串的 Damerau-Levenshtein 距离。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT damerauLevenshteinDistance('clickhouse', 'mouse') -``` - -```response title=Response -┌─damerauLevenshteinDistance('clickhouse', 'mouse')─┐ -│ 6 │ -└───────────────────────────────────────────────────┘ -``` - - -## decodeHTMLComponent - -最初引入于:v23.9 - -将字符串中的 HTML 实体解码为对应的字符。 - -**语法** - -```sql -decodeHTMLComponent(s) -``` - -**参数** - -* `s` — 包含要解码的 HTML 实体的字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回将 HTML 实体解码后的字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT decodeHTMLComponent('<div>你好 & "世界"</div>') -``` - -```response title=Response -┌─decodeHTMLComponent('<div>你好 & "世界"</div>')─┐ -│
你好 & "世界"
│ -└─────────────────────────────────────────────────────────────────────────────┘ -``` - - -## decodeXMLComponent - -首次引入:v21.2 - -将字符串中的 XML 实体解码为其对应的字符。 - -**语法** - -```sql -decodeXMLComponent(s) -``` - -**参数** - -* `s` — 包含要解码 XML 实体的字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回对其中 XML 实体解码后的字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT decodeXMLComponent('<tag>Hello & World</tag>') -``` - -```response title=Response -┌─decodeXMLCom⋯;/tag>')─┐ -│ 你好,世界 │ -└──────────────────────────┘ -``` - - -## editDistance - -自 v23.9 引入 - -计算两个字节串之间的[编辑距离](https://en.wikipedia.org/wiki/Edit_distance)。 - -**语法** - -```sql -编辑距离(s1, s2) -``` - -**别名**: `levenshteinDistance` - -**参数** - -* `s1` — 第一个输入字符串。[`String`](/sql-reference/data-types/string) -* `s2` — 第二个输入字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回两个字符串之间的编辑距离。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT editDistance('clickhouse', 'mouse') -``` - -```response title=Response -┌─editDistance('clickhouse', 'mouse')─┐ -│ 6 │ -└─────────────────────────────────────┘ -``` - - -## editDistanceUTF8 - -自 v24.6 起引入 - -计算两个 UTF8 字符串之间的[编辑距离](https://en.wikipedia.org/wiki/Edit_distance)。 - -**语法** - -```sql -editDistanceUTF8(s1, s2) -``` - -**别名**: `levenshteinDistanceUTF8` - -**参数** - -* `s1` — 第一个输入字符串。[`String`](/sql-reference/data-types/string) -* `s2` — 第二个输入字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回两个 UTF-8 字符串的编辑距离。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT editDistanceUTF8('我是谁', '我是我') -``` - -```response title=Response -┌─editDistanceUTF8('我是谁', '我是我')──┐ -│ 1 │ -└─────────────────────────────────────┘ -``` - - -## encodeXMLComponent - -首次引入版本:v21.1 - -对字符串中的字符进行转义,使其可以安全地用于 XML 文本节点或属性中。 - -**语法** - -```sql -encodeXMLComponent(s) -``` - -**参数** - -* `s` — 要转义的字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回转义后的字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT - '<tag>Hello & "World"</tag>' AS original, - encodeXMLComponent('<tag>Hello & "World"</tag>') AS xml_encoded; -``` - -```response title=Response -┌─原文───────────────────────┬─XML 编码────────────────────────────────────────────┐ -│ Hello & "World" │ <tag>Hello & "World"</tag> │ -└────────────────────────────┴──────────────────────────────────────────────────────┘ -``` - - -## endsWith - -自 v1.1 起引入 - -检查字符串是否以指定的后缀结尾。 - -**语法** - -```sql -endsWith(s, suffix) -``` - -**参数** - -* `s` — 要检查的字符串。[`String`](/sql-reference/data-types/string) -* `suffix` — 要检查的后缀字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -如果 `s` 以 `suffix` 结尾,则返回 `1`,否则返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT endsWith('ClickHouse', 'House'); -``` - -```response title=Response -┌─endsWith('Cl⋯', 'House')─┐ -│ 1 │ -└──────────────────────────┘ -``` - - -## endsWithCaseInsensitive - -在 v25.9 中引入 - -检查字符串是否以给定的、大小写不敏感的后缀结尾。 - -**语法** - -```sql -不区分大小写地以指定后缀结尾(s,suffix) -``` - -**参数** - -* `s` — 要检查的字符串。[`String`](/sql-reference/data-types/string) -* `suffix` — 要检查的后缀(不区分大小写)。[`String`](/sql-reference/data-types/string) - -**返回值** - -如果 `s` 以不区分大小写的 `suffix` 结尾,则返回 `1`,否则返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT endsWithCaseInsensitive('ClickHouse', 'HOUSE'); -``` - -```response title=Response -┌─endsWithCaseInsensitive('Cl⋯', 'HOUSE')─┐ -│ 1 │ -└─────────────────────────────────────────┘ -``` - - -## endsWithCaseInsensitiveUTF8 - -引入版本:v25.9 - -返回字符串 `s` 是否以不区分大小写的 `suffix` 结尾。 -假定该字符串包含有效的 UTF-8 编码文本。 -如果该假设不成立,不会抛出异常,其结果未定义。 - -**语法** - -```sql -endsWithCaseInsensitiveUTF8(s, suffix) -``` - -**参数** - -* `s` — 要检查的字符串。[`String`](/sql-reference/data-types/string) -* `suffix` — 要检查的、不区分大小写的后缀。[`String`](/sql-reference/data-types/string) - -**返回值** - -如果在不区分大小写的情况下,`s` 以 `suffix` 结尾,则返回 `1`,否则返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT endsWithCaseInsensitiveUTF8('данных', 'ых'); -``` - -```response title=Response -┌─endsWithCaseInsensitiveUTF8('данных', 'ых')─┐ -│ 1 │ -└─────────────────────────────────────────────┘ -``` - - -## endsWithUTF8 - -引入于:v23.8 - -返回字符串 `s` 是否以 `suffix` 结尾。 -假定该字符串包含有效的 UTF-8 编码文本。 -如果这一假设不成立,不会抛出异常,结果是未定义的。 - -**语法** - -```sql -以 UTF-8 结尾吗(s, suffix) -``` - -**参数** - -* `s` — 要检查的字符串。[`String`](/sql-reference/data-types/string) -* `suffix` — 要检查的后缀。[`String`](/sql-reference/data-types/string) - -**返回值** - -如果 `s` 以 `suffix` 结尾,则返回 `1`,否则返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT endsWithUTF8('данных', 'ых'); -``` - -```response title=Response -┌─endsWithUTF8('данных', 'ых')─┐ -│ 1 │ -└──────────────────────────────┘ -``` - - -## extractTextFromHTML - -自 v21.3 起引入 - -从 HTML 或 XHTML 中提取文本内容。 - -该函数会移除 HTML 标签、注释以及 script/style 元素,只保留文本内容。具体包括: - -* 移除所有 HTML/XML 标签 -* 移除注释(``) -* 移除 script 和 style 元素及其内容 -* 处理 CDATA 区段(原样复制) -* 正确处理和规范化空白字符 - -注意:HTML 实体不会被解码,如有需要应使用单独的函数进行处理。 - -**语法** - -```sql -extractTextFromHTML(html) -``` - -**参数** - -* `html` — 包含要从中提取文本的 HTML 内容的字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回提取出的文本内容,并对空白字符进行规范化处理。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT extractTextFromHTML(' - - 页面标题 - -

你好,世界

- - - - -'); -``` - -```response title=Response -┌─extractTextFromHTML('...')─┐ -│ 页面标题:你好,世界! │ -└────────────────────────────────────────┘ -``` - - -## firstLine - -自 v23.7 起引入 - -返回多行字符串的第一行。 - -**语法** - -```sql -首行 -``` - -**参数** - -* `s` — 输入字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回输入字符串的第一行;如果没有换行符,则返回整个字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT firstLine('foo\\nbar\\nbaz') -``` - -```response title=Response -┌─firstLine('foo\nbar\nbaz')─┐ -│ foo │ -└────────────────────────────┘ -``` - - -## idnaDecode - -引入版本:v24.1 - -根据 [Internationalized Domain Names in Applications](https://en.wikipedia.org/wiki/Internationalized_domain_name#Internationalizing_Domain_Names_in_Applications)(IDNA)机制,返回域名的 Unicode(UTF-8)表示(ToUnicode 算法)。 -如发生错误(例如输入无效),则原样返回输入字符串。 -请注意,由于大小写规范化,反复调用 [`idnaEncode()`](#idnaEncode) 和 [`idnaDecode()`](#idnaDecode) 不一定会返回原始字符串。 - -**语法** - -```sql -idnaDecode(s) -``` - -**参数** - -* `s` — 输入字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -按照输入值的 IDNA 规则,返回该输入字符串的 Unicode(UTF-8)表示形式。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT idnaDecode('xn--strae-oqa.xn--mnchen-3ya.de') -``` - -```response title=Response -┌─idnaDecode('xn--strae-oqa.xn--mnchen-3ya.de')─┐ -│ straße.münchen.de │ -└───────────────────────────────────────────────┘ -``` - - -## idnaEncode - -引入版本:v24.1 - -根据 [Internationalized Domain Names in Applications](https://en.wikipedia.org/wiki/Internationalized_domain_name#Internationalizing_Domain_Names_in_Applications)(IDNA)机制,返回域名的 ASCII 表示形式(ToASCII 算法)。 -输入字符串必须是 UTF 编码且可转换为 ASCII 字符串,否则会抛出异常。 - -:::note -不会执行百分号解码,也不会去除制表符、空格或控制字符。 -::: - -**语法** - -```sql -idnaEncode(s) -``` - -**参数** - -* `s` — 输入字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -根据 IDNA 机制返回输入字符串的 ASCII 表示形式。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT idnaEncode('straße.münchen.de') -``` - -```response title=Response -┌─idnaEncode('straße.münchen.de')─────┐ -│ xn--strae-oqa.xn--mnchen-3ya.de │ -└─────────────────────────────────────┘ -``` - - -## initcap - -引入版本:v23.7 - -将每个单词的首字母转换为大写,其余字母转换为小写。 -单词是由字母数字字符组成,并由非字母数字字符分隔的序列。 - -:::note -由于 `initcap` 只将每个单词的首字母转换为大写,对于包含撇号或本身带有大写字母的单词,您可能会遇到一些出乎意料的行为。 -这是已知的行为,目前没有修复计划。 -::: - -**语法** - -```sql -首字母大写(s) -``` - -**参数** - -* `s` — 输入字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回将 `s` 中每个单词的首字母转换为大写后的结果。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT initcap('为速度而构建') -``` - -```response title=Response -┌─initcap('building for fast')─┐ -│ 为速度而构建 │ -└──────────────────────────────┘ -``` - -**含有撇号或大写字母的单词的已知行为示例** - -```sql title=Query -SELECT initcap('John''s Cat Won''t Eat.'); -``` - -```response title=Response -┌─initcap('Joh⋯n\'t eat.')─┐ -│ John'S Cat Won'T Eat. │ -└──────────────────────────┘ -``` - - -## initcapUTF8 - -引入于:v23.7 - -与 [`initcap`](#initcap) 类似,`initcapUTF8` 将每个单词的首字母转换为大写,其余字母转换为小写。 -假设字符串包含有效的 UTF-8 编码文本。 -如果这一假设不成立,则不会抛出异常,且结果未定义。 - -:::note -该函数不会检测语言,例如对于土耳其语,结果可能不完全正确(i/İ 与 i/I)。 -如果某个码位的大写和小写形式对应的 UTF-8 字节序列长度不同,则该码位的结果可能不正确。 -::: - -**语法** - -```sql -initcapUTF8(s) -``` - -**参数** - -* `s` — 输入字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回将 `s` 中每个单词的首字母转换为大写后的结果。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT initcapUTF8('不卡顿') -``` - -```response title=Response -┌─initcapUTF8('не тормозит')─┐ -│ 不 тормозит │ -└────────────────────────────┘ -``` - - -## isValidASCII - -在 v25.9 中引入 - -如果输入的 String 或 FixedString 仅包含 ASCII 字节(0x00–0x7F),则返回 1,否则返回 0。 - -**语法** - -```sql -``` - -**别名**:`isASCII` - -**参数** - -* 无。 - -**返回值** - -**示例** - -**isValidASCII** - -```sql title=Query -SELECT isValidASCII('hello') AS is_ascii, isValidASCII('你好') AS is_not_ascii -``` - -```response title=Response -``` - - -## isValidUTF8 - -自 v20.1 版本引入 - -检查一组字节是否构成有效的 UTF-8 编码文本。 - -**语法** - -```sql -isValidUTF8(s) -``` - -**参数** - -* `s` — 要检查其 UTF-8 编码是否有效的字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -若该字节序列构成有效的 UTF-8 编码文本,则返回 `1`,否则返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT isValidUTF8('\\xc3\\xb1') AS 有效, isValidUTF8('\\xc3\\x28') AS 无效 -``` - -```response title=Response -┌─有效─┬─无效─┐ -│ 1 │ 0 │ -└───────┴─────────┘ -``` - - -## jaroSimilarity - -在 v24.1 中引入 - -计算两个字节字符串之间的 [Jaro 相似度](https://en.wikipedia.org/wiki/Jaro%E2%80%93Winkler_distance#Jaro_similarity)。 - -**语法** - -```sql -jaroSimilarity(s1, s2) -``` - -**参数** - -* `s1` — 第一个输入字符串。[`String`](/sql-reference/data-types/string) -* `s2` — 第二个输入字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回两个字符串的 Jaro 相似度。[`Float64`](/sql-reference/data-types/float) - -**示例** - -**用法示例** - -```sql title=Query -SELECT jaroSimilarity('clickhouse', 'click') -``` - -```response title=Response -┌─jaroSimilarity('clickhouse', 'click')─┐ -│ 0.8333333333333333 │ -└───────────────────────────────────────┘ -``` - - -## jaroWinklerSimilarity - -自 v24.1 起提供 - -计算两个字节串之间的 [Jaro-Winkler 相似度](https://en.wikipedia.org/wiki/Jaro%E2%80%93Winkler_distance)。 - -**语法** - -```sql -jaroWinklerSimilarity(s1, s2) -``` - -**参数** - -* `s1` — 第一个输入字符串。[`String`](/sql-reference/data-types/string) -* `s2` — 第二个输入字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回两个字符串之间的 Jaro-Winkler 相似度。[`Float64`](/sql-reference/data-types/float) - -**示例** - -**用法示例** - -```sql title=Query -SELECT jaroWinklerSimilarity('clickhouse', 'click') -``` - -```response title=Response -┌─jaroWinklerSimilarity('clickhouse', 'click')─┐ -│ 0.8999999999999999 │ -└──────────────────────────────────────────────┘ -``` - - -## left - -引入版本:v22.1 - -返回字符串 `s` 中从左侧偏移量 `offset` 处开始的子字符串。 - -**语法** - -```sql -left(s, offset) -``` - -**参数** - -* `s` — 要从中计算子字符串的字符串。[`String`](/sql-reference/data-types/string) 或 [`FixedString`](/sql-reference/data-types/fixedstring) -* `offset` — 偏移量的字节数。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回值: - -* 对于正的 `offset`,返回从字符串左侧开始、长度为 `offset` 字节的 `s` 的子字符串。 -* 对于负的 `offset`,返回从字符串左侧开始、长度为 `length(s) - |offset|` 字节的 `s` 的子字符串。 -* 如果 `length` 为 `0`,则返回空字符串。 - [`String`](/sql-reference/data-types/string) - -**示例** - -**正偏移量** - -```sql title=Query -SELECT left('Hello World', 5) -``` - -```response title=Response -你好 -``` - -**负偏移** - -```sql title=Query -SELECT left('Hello World', -6) -``` - -```response title=Response -你好 -``` - - -## leftPad - -自 v21.8 起引入 - -从左侧使用空格或指定字符串(如有需要可重复多次)对字符串进行填充,直到结果字符串达到指定的 `length`。 - -**语法** - -```sql -leftPad(字符串, 长度[, 填充字符串]) -``` - -**别名**: `lpad` - -**参数** - -* `string` — 需要进行填充的输入字符串。[`String`](/sql-reference/data-types/string) -* `length` — 结果字符串的长度。如果该值小于输入字符串的长度,则输入字符串会被截断为 `length` 个字符。[`(U)Int*`](/sql-reference/data-types/int-uint) -* `pad_string` — 可选。用于填充输入字符串的字符串。如果未指定,则使用空格对输入字符串进行填充。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回指定长度的左侧填充后的字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT leftPad('abc', 7, '*'), leftPad('def', 7) -``` - -```response title=Response -┌─leftPad('abc', 7, '*')─┬─leftPad('def', 7)─┐ -│ ****abc │ def │ -└────────────────────────┴───────────────────┘ -``` - - -## leftPadUTF8 - -自 v21.8 引入 - -从左侧使用空格或指定字符串(如有必要可多次重复)填充 UTF-8 字符串,直到结果字符串达到给定长度。 -与按字节度量字符串长度的 [`leftPad`](#leftPad) 不同,这里的字符串长度按 Unicode 码点计算。 - -**语法** - -```sql -leftPadUTF8(字符串, 长度[, 填充字符串]) -``` - -**参数** - -* `string` — 需要填充的输入字符串。[`String`](/sql-reference/data-types/string) -* `length` — 结果字符串的长度。如果该值小于输入字符串的长度,则输入字符串会被截断为 `length` 个字符。[`(U)Int*`](/sql-reference/data-types/int-uint) -* `pad_string` — 可选。用于填充输入字符串的字符串。如果未指定,则使用空格对输入字符串进行填充。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回指定长度的左侧填充后的字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT leftPadUTF8('абвг', 7, '*'), leftPadUTF8('дежз', 7) -``` - -```response title=Response -┌─leftPadUTF8('абвг', 7, '*')─┬─leftPadUTF8('дежз', 7)─┐ -│ ***абвг │ дежз │ -└─────────────────────────────┴────────────────────────┘ -``` - - -## leftUTF8 - -引入于:v22.1 - -返回 UTF-8 编码字符串 `s` 中从左侧偏移量 `offset` 位置开始的子字符串。 - -**语法** - -```sql -leftUTF8(s, offset) -``` - -**参数** - -* `s` — 要从中截取子字符串的 UTF-8 编码字符串。[`String`](/sql-reference/data-types/string) 或 [`FixedString`](/sql-reference/data-types/fixedstring) -* `offset` — 偏移量的字节数。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回: - -* 当 `offset` 为正数时,返回从字符串左侧开始、长度为 `offset` 字节的 `s` 的子字符串。 -* 当 `offset` 为负数时,返回从字符串左侧开始、长度为 `length(s) - |offset|` 字节的 `s` 的子字符串。 -* 当 `length` 为 0 时,返回空字符串。 - [`String`](/sql-reference/data-types/string) - -**示例** - -**正偏移量** - -```sql title=Query -SELECT leftUTF8('Привет', 4) -``` - -```response title=Response -嗨 -``` - -**负偏移** - -```sql title=Query -SELECT leftUTF8('Привет', -4) -``` - -```response title=Response -Пр -``` - - -## lengthUTF8 - -自 v1.1 版本引入 - -返回字符串的长度(以 Unicode 码位为单位),而不是以字节或字符为单位。 -该函数假定字符串包含有效的 UTF-8 编码文本。 -如果该假设不成立,则不会抛出异常,且结果未定义。 - -**语法** - -```sql -lengthUTF8(s) -``` - -**别名**:`CHAR_LENGTH`, `CHARACTER_LENGTH` - -**参数** - -* `s` — 包含有效 UTF-8 编码文本的字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -字符串 `s` 的长度,按 Unicode 码点计。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT lengthUTF8('你好,世界!') -``` - -```response title=Response -┌─lengthUTF8('Здравствуй, мир!')─┐ -│ 16 │ -└────────────────────────────────┘ -``` - - -## lower - -首次引入于:v1.1 - -将 ASCII 字符串转换为小写。 - -**语法** - -```sql -小写(们) -``` - -**别名**: `lcase` - -**参数** - -* `s` — 要转换为小写的字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回由 `s` 转换得到的小写字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT lower('CLICKHOUSE') -``` - -```response title=Response -┌─lower('CLICKHOUSE')─┐ -│ clickhouse │ -└─────────────────────┘ -``` - - -## lowerUTF8 - -引入版本:v1.1 - -在假定字符串包含有效 UTF-8 编码文本的前提下,将字符串转换为小写。如果该假设不成立,则不会抛出异常,且结果未定义。 - -**语法** - -```sql -lowerUTF8(input) -``` - -**参数** - -* `input` — 要转换为小写的输入字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回小写字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**第一个** - -```sql title=Query -SELECT lowerUTF8('München') as Lowerutf8; -``` - -```response title=Response -慕尼黑 -``` - - -## normalizeUTF8NFC - -引入版本:v21.11 - -根据 [NFC 规范化形式](https://en.wikipedia.org/wiki/Unicode_equivalence#Normal_forms)对 UTF-8 字符串进行规范化。 - -**语法** - -```sql -normalizeUTF8NFC(str) -``` - -**参数** - -* `str` — 使用 UTF-8 编码的输入字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回该 UTF-8 字符串的 NFC 标准化形式。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT -'é' AS original, -- e + 组合急重音 (U+0065 + U+0301) -length(original), -normalizeUTF8NFC('é') AS nfc_normalized, -- é (U+00E9) -length(nfc_normalized); -``` - -```response title=Response -┌─original─┬─length(original)─┬─nfc_normalized─┬─length(nfc_normalized)─┐ -│ é │ 2 │ é │ 2 │ -└──────────┴──────────────────┴────────────────┴────────────────────────┘ -``` - - -## normalizeUTF8NFD - -引入版本:v21.11 - -按照 [NFD 规范化形式](https://en.wikipedia.org/wiki/Unicode_equivalence#Normal_forms)对 UTF-8 字符串进行规范化。 - -**语法** - -```sql -normalizeUTF8NFD(str) -``` - -**参数** - -* `str` — UTF-8 编码的输入字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回该 UTF-8 字符串的 NFD 规范化形式。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT - 'é' AS original, -- é(U+00E9) - length(original), - normalizeUTF8NFD('é') AS nfd_normalized, -- e + 组合尖音符(U+0065 + U+0301) - length(nfd_normalized); -``` - -```response title=Response -┌─original─┬─length(original)─┬─nfd_normalized─┬─length(nfd_normalized)─┐ -│ é │ 2 │ é │ 3 │ -└──────────┴──────────────────┴────────────────┴────────────────────────┘ -``` - - -## normalizeUTF8NFKC - -引入版本:v21.11 - -根据 [NFKC 规范化形式](https://en.wikipedia.org/wiki/Unicode_equivalence#Normal_forms)对 UTF-8 字符串进行规范化处理。 - -**语法** - -```sql -normalizeUTF8NFKC(str) -``` - -**参数** - -* `str` — 以 UTF-8 编码的输入字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回 UTF-8 字符串的 NFKC 规范化形式。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT - '① ② ③' AS original, -- 带圈数字字符 - normalizeUTF8NFKC('① ② ③') AS nfkc_normalized; -- 规范化为 1 2 3 -``` - -```response title=Response -┌─原始──────┬─NFKC 归一化────┐ -│ ① ② ③ │ 1 2 3 │ -└──────────┴─────────────────┘ -``` - - -## normalizeUTF8NFKD - -自 v21.11 引入 - -根据 [NFKD 规范化形式](https://en.wikipedia.org/wiki/Unicode_equivalence#Normal_forms)对 UTF-8 字符串进行规范化。 - -**语法** - -```sql -normalizeUTF8NFKD(str) -``` - -**参数** - -* `str` — UTF-8 编码的输入字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回该 UTF-8 字符串的 NFKD 规范化形式。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT - 'H₂O²' AS original, -- H + 下标 2 + O + 上标 2 - normalizeUTF8NFKD('H₂O²') AS nfkd_normalized; -- 将其转换为 H 2 O 2 -``` - -```response title=Response -┌─original─┬─nfkd_normalized─┐ -│ H₂O² │ H2O2 │ -└──────────┴─────────────────┘ -``` - - -## punycodeDecode - -引入于:v24.1 - -返回 [Punycode](https://en.wikipedia.org/wiki/Punycode) 编码字符串对应的 UTF-8 编码明文。 -如果未提供有效的 Punycode 编码字符串,则会抛出异常。 - -**语法** - -```sql -punycode 解码(s) -``` - -**参数** - -* `s` — 经过 Punycode 编码的字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回输入值对应的明文字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT punycodeDecode('Mnchen-3ya') -``` - -```response title=Response -┌─punycodeDecode('Mnchen-3ya')─┐ -│ 慕尼黑 │ -└──────────────────────────────┘ -``` - - -## punycodeEncode - -自 v24.1 起引入 - -返回字符串的 [Punycode](https://en.wikipedia.org/wiki/Punycode) 表示形式。 -字符串必须为 UTF-8 编码,否则其行为未定义。 - -**语法** - -```sql -punycodeEncode(s) -``` - -**参数** - -* `s` — 输入值。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回输入值的 Punycode 表示。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT punycodeEncode('München') -``` - -```response title=Response -┌─punycodeEncode('München')─┐ -│ Mnchen-3ya │ -└───────────────────────────┘ -``` - - -## regexpExtract - -自 v23.2 起引入 - -从 `haystack` 中提取第一个与正则表达式模式匹配且对应指定正则表达式分组索引的字符串。 - -**语法** - -```sql -regexpExtract(haystack, pattern[, index]) -``` - -**别名**: `REGEXP_EXTRACT` - -**参数** - -* `haystack` — 进行正则表达式模式匹配的目标字符串。[`String`](/sql-reference/data-types/string) -* `pattern` — 正则表达式字符串。`pattern` 可以包含多个正则捕获组,`index` 指示要提取哪个捕获组。索引为 0 表示匹配整个正则表达式。[`const String`](/sql-reference/data-types/string) -* `index` — 可选。大于等于 0 的整数,默认值为 1。表示要提取的正则捕获组索引。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回匹配到的字符串 [`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT - regexpExtract('100-200', '(\\d+)-(\\d+)', 1), - regexpExtract('100-200', '(\\d+)-(\\d+)', 2), - regexpExtract('100-200', '(\\d+)-(\\d+)', 0), - regexpExtract('100-200', '(\\d+)-(\\d+)'); -``` - -```response title=Response -┌─regexpExtract('100-200', '(\\d+)-(\\d+)', 1)─┬─regexpExtract('100-200', '(\\d+)-(\\d+)', 2)─┬─regexpExtract('100-200', '(\\d+)-(\\d+)', 0)─┬─regexpExtract('100-200', '(\\d+)-(\\d+)')─┐ -│ 100 │ 200 │ 100-200 │ 100 │ -└──────────────────────────────────────────────┴──────────────────────────────────────────────┴──────────────────────────────────────────────┴───────────────────────────────────────────┘ -``` - - -## repeat - -引入版本:v20.1 - -按照指定次数,将字符串与其自身重复拼接。 - -**语法** - -```sql -重复(s, n) -``` - -**参数** - -* `s` — 要重复的字符串。[`String`](/sql-reference/data-types/string) -* `n` — 字符串重复的次数。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -由将字符串 `s` 重复 `n` 次得到的字符串。如果 `n` 为负数,则函数返回空字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT repeat('abc', 10) -``` - -```response title=Response -┌─repeat('abc', 10)──────────────┐ -│ abcabcabcabcabcabcabcabcabcabc │ -└────────────────────────────────┘ -``` - - -## reverseUTF8 - -引入版本:v1.1 - -反转字符串中的一系列 Unicode 码点。 -假定字符串包含有效的 UTF-8 编码文本。 -如果该假设不成立,不会抛出异常,结果未定义。 - -**语法** - -```sql -reverseUTF8(s) -``` - -**参数** - -* `s` — 包含有效 UTF-8 编码的文本的字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回一个字符串,其中的 Unicode 码点序列顺序被反转。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT reverseUTF8('ClickHouse') -``` - -```response title=Response -esuoHkcilC -``` - - -## right - -引入版本:v22.1 - -返回字符串 `s` 自右侧起按指定 `offset` 开始的子字符串。 - -**语法** - -```sql -right(s, offset) -``` - -**参数** - -* `s` — 要从中计算子字符串的字符串。[`String`](/sql-reference/data-types/string) 或 [`FixedString`](/sql-reference/data-types/fixedstring) -* `offset` — 偏移量的字节数。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回: - -* 当 `offset` 为正数时,从字符串右侧开始,返回 `s` 的子字符串,长度为 `offset` 个字节。 -* 当 `offset` 为负数时,从字符串右侧开始,返回 `s` 的子字符串,长度为 `length(s) - |offset|` 个字节。 -* 当 `length` 为 `0` 时,返回空字符串。 - [`String`](/sql-reference/data-types/string) - -**示例** - -**正偏移** - -```sql title=Query -SELECT right('Hello', 3) -``` - -```response title=Response -嗨 -``` - -**负偏移量** - -```sql title=Query -SELECT right('Hello', -3) -``` - -```response title=Response -嗨 -``` - - -## rightPad - -引入版本:v21.8 - -在字符串右侧使用空格或指定字符串(必要时可重复多次)进行填充,直到结果字符串达到指定的 `length`。 - -**语法** - -```sql -rightPad(string, length[, pad_string]) -``` - -**别名**: `rpad` - -**参数** - -* `string` — 需要填充的输入字符串。[`String`](/sql-reference/data-types/string) -* `length` — 结果字符串的长度。如果该值小于输入字符串的长度,则输入字符串会被截断为 `length` 个字符。[`(U)Int*`](/sql-reference/data-types/int-uint) -* `pad_string` — 可选。用于填充输入字符串的字符串。如果未指定,则使用空格对输入字符串进行填充。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回一个给定长度的右填充字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT rightPad('abc', 7, '*'), rightPad('abc', 7) -``` - -```response title=Response -┌─rightPad('abc', 7, '*')─┬─rightPad('abc', 7)─┐ -│ abc**** │ abc │ -└─────────────────────────┴────────────────────┘ -``` - - -## rightPadUTF8 - -自 v21.8 起引入 - -从右侧使用空格或指定字符串(必要时可多次重复)对字符串进行填充,直到结果字符串达到给定长度。 -与按字节数计算字符串长度的 [`rightPad`](#rightPad) 不同,这里的字符串长度是按码点数计算的。 - -**语法** - -```sql -rightPadUTF8(string, length[, pad_string]) -``` - -**参数** - -* `string` — 需要填充的输入字符串。[`String`](/sql-reference/data-types/string) -* `length` — 结果字符串的长度。如果该值小于输入字符串的长度,则输入字符串会被截断为 `length` 个字符。[`(U)Int*`](/sql-reference/data-types/int-uint) -* `pad_string` — 可选。用于填充输入字符串的字符串。如果未指定,则使用空格对输入字符串进行填充。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回一个按指定长度在右侧填充后的字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT rightPadUTF8('абвг', 7, '*'), rightPadUTF8('абвг', 7) -``` - -```response title=Response -┌─rightPadUTF8('абвг', 7, '*')─┬─rightPadUTF8('абвг', 7)─┐ -│ абвг*** │ абвг │ -└──────────────────────────────┴─────────────────────────┘ -``` - - -## rightUTF8 - -自 v22.1 起引入 - -返回 UTF-8 编码字符串 `s` 中,从右侧起按指定 `offset` 偏移后得到的子字符串。 - -**语法** - -```sql -rightUTF8(s, offset) -``` - -**参数** - -* `s` — 用于截取子串的 UTF-8 编码字符串。[`String`](/sql-reference/data-types/string) 或 [`FixedString`](/sql-reference/data-types/fixedstring) -* `offset` — 偏移的字节数。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回: - -* 当 `offset` 为正数时,返回从字符串右端开始计数、长度为 `offset` 字节的 `s` 的子串。 -* 当 `offset` 为负数时,返回从字符串右端开始计数、长度为 `length(s) - |offset|` 字节的 `s` 的子串。 -* 当 `length` 为 `0` 时,返回空字符串。 - [`String`](/sql-reference/data-types/string) - -**示例** - -**正偏移量** - -```sql title=Query -SELECT rightUTF8('Привет', 4) -``` - -```response title=Response -ивет -``` - -**负偏移** - -```sql title=Query -SELECT rightUTF8('Привет', -4) -``` - -```response title=Response -ет -``` - - -## soundex - -在 v23.4 中引入 - -返回字符串的 [Soundex 代码](https://en.wikipedia.org/wiki/Soundex)。 - -**语法** - -```sql -soundex(s) -``` - -**参数** - -* `s` — 输入字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回输入字符串的 Soundex 编码。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT soundex('aksel') -``` - -```response title=Response -┌─soundex('aksel')─┐ -│ A240 │ -└──────────────────┘ -``` - - -## space - -引入版本:v23.5 - -将空格字符(` `)按指定次数重复拼接。 - -**语法** - -```sql -space(n) -``` - -**参数** - -* `n` — 空格重复的次数。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回一个由重复 `n` 次空格组成的字符串。如果 `n <= 0`,函数返回空字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT space(3) AS res, length(res); -``` - -```response title=Response -┌─res─┬─length(res)─┐ -│ │ 3 │ -└─────┴─────────────┘ -``` - - -## sparseGrams - -首次在 v25.5 版本中引入 - -查找给定字符串中所有长度至少为 `n` 的子串, -其中该子串两端边界上的 (n-1)-gram 的哈希值 -都严格大于该子串内部任意 (n-1)-gram 的哈希值。 -使用 `CRC32` 作为哈希函数。 - -**语法** - -```sql -sparseGrams(s[, min_ngram_length, max_ngram_length]) -``` - -**参数** - -* `s` — 输入字符串。[`String`](/sql-reference/data-types/string) -* `min_ngram_length` — 可选。要提取的 ngram 的最小长度。默认值(且允许的最小值)为 3。[`UInt*`](/sql-reference/data-types/int-uint) -* `max_ngram_length` — 可选。要提取的 ngram 的最大长度。默认值为 100,且不得小于 `min_ngram_length`。[`UInt*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回一个由选定的子字符串组成的数组。[`Array(String)`](/sql-reference/data-types/array) - -**示例** - -**用法示例** - -```sql title=Query -SELECT sparseGrams('alice', 3) -``` - -```response title=Response -┌─sparseGrams('alice', 3)────────────┐ -│ ['ali','lic','lice','ice'] │ -└────────────────────────────────────┘ -``` - - -## sparseGramsHashes - -自 v25.5 起引入 - -查找给定字符串中所有长度至少为 `n` 的子串的哈希值, -其中该子串两端的 (n-1)-gram 的哈希值 -都严格大于子串内部任意 (n-1)-gram 的哈希值。 -使用 `CRC32` 作为哈希函数。 - -**语法** - -```sql -sparseGramsHashes(s[, min_ngram_length, max_ngram_length]) -``` - -**参数** - -* `s` — 输入字符串。[`String`](/sql-reference/data-types/string) -* `min_ngram_length` — 可选。提取的 n-gram 的最小长度。默认值和最小值为 3。[`UInt*`](/sql-reference/data-types/int-uint) -* `max_ngram_length` — 可选。提取的 n-gram 的最大长度。默认值为 100。必须不小于 `min_ngram_length`。[`UInt*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回所选子字符串的 CRC32 哈希值数组。[`Array(UInt32)`](/sql-reference/data-types/array) - -**示例** - -**使用示例** - -```sql title=Query -SELECT sparseGramsHashes('alice', 3) -``` - -```response title=Response -┌─sparseGramsHashes('alice', 3)──────────────────────┐ -│ [1481062250,2450405249,4012725991,1918774096] │ -└────────────────────────────────────────────────────┘ -``` - - -## sparseGramsHashesUTF8 - -引入于:v25.5 - -查找给定 UTF-8 字符串中所有长度至少为 `n` 的子串的哈希值,这些子串需满足:子串边界处的 (n-1)-gram 的哈希值严格大于该子串内部任意 (n-1)-gram 的哈希值。 -参数必须是 UTF-8 字符串,遇到无效的 UTF-8 序列时会抛出异常。 -使用 `CRC32` 作为哈希函数。 - -**语法** - -```sql -sparseGramsHashesUTF8(s[, min_ngram_length, max_ngram_length]) -``` - -**参数** - -* `s` — 输入字符串。[`String`](/sql-reference/data-types/string) -* `min_ngram_length` — 可选。提取的 n‑gram 的最小长度。默认值且最小值为 3。[`UInt*`](/sql-reference/data-types/int-uint) -* `max_ngram_length` — 可选。提取的 n‑gram 的最大长度。默认值为 100。不得小于 `min_ngram_length`。[`UInt*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回一个数组,其中包含所选 UTF-8 子字符串的 CRC32 哈希值。[`Array(UInt32)`](/sql-reference/data-types/array) - -**示例** - -**使用示例** - -```sql title=Query -SELECT sparseGramsHashesUTF8('алиса', 3) -``` - -```response title=Response -┌─sparseGramsHashesUTF8('алиса', 3)─┐ -│ [4178533925,3855635300,561830861] │ -└───────────────────────────────────┘ -``` - - -## sparseGramsUTF8 - -引入版本:v25.5 - -从给定的 UTF-8 字符串中查找所有长度至少为 `n` 的子字符串,这些子字符串需满足:其边界处的 (n-1)-gram 的哈希值严格大于该子字符串内部任意 (n-1)-gram 的哈希值。 -该函数要求输入为 UTF-8 字符串,如遇到无效的 UTF-8 序列则抛出异常。 -使用 `CRC32` 作为哈希函数。 - -**语法** - -```sql -sparseGramsUTF8(s[, min_ngram_length, max_ngram_length]) -``` - -**参数** - -* `s` — 输入字符串。[`String`](/sql-reference/data-types/string) -* `min_ngram_length` — 可选。提取 n-gram 的最小长度。默认值和最小值均为 3。[`UInt*`](/sql-reference/data-types/int-uint) -* `max_ngram_length` — 可选。提取 n-gram 的最大长度。默认值为 100。其值不得小于 `min_ngram_length`。[`UInt*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回选取的 UTF-8 子串数组。[`Array(String)`](/sql-reference/data-types/array) - -**示例** - -**用法示例** - -```sql title=Query -SELECT sparseGramsUTF8('алиса', 3) -``` - -```response title=Response -┌─sparseGramsUTF8('алиса', 3)─┐ -│ ['али','лис','иса'] │ -└─────────────────────────────┘ -``` - - -## startsWith - -自 v1.1 起引入 - -检查字符串是否以指定字符串开头。 - -**语法** - -```sql -startsWith(s, prefix) -``` - -**参数** - -* `s` — 要检查的字符串。[`String`](/sql-reference/data-types/string) -* `prefix` — 要检查的前缀。[`String`](/sql-reference/data-types/string) - -**返回值** - -如果 `s` 以 `prefix` 开头则返回 `1`,否则返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT startsWith('ClickHouse', 'Click'); -``` - -```response title=Response -┌─startsWith('⋯', 'Click')─┐ -│ 1 │ -└──────────────────────────┘ -``` - - -## startsWithCaseInsensitive - -自 v25.9 起引入 - -检查字符串是否以指定字符串(不区分大小写)开头。 - -**语法** - -```sql -startsWithCaseInsensitive(s, prefix) -``` - -**参数** - -* `s` — 要检查的字符串。[`String`](/sql-reference/data-types/string) -* `prefix` — 要检查的前缀(不区分大小写)。[`String`](/sql-reference/data-types/string) - -**返回值** - -如果 `s` 以不区分大小写的 `prefix` 开头,则返回 `1`,否则返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT startsWithCaseInsensitive('ClickHouse', 'CLICK'); -``` - -```response title=Response -┌─startsWithCaseInsensitive('⋯', 'CLICK')─┐ -│ 1 │ -└─────────────────────────────────────────┘ -``` - - -## startsWithCaseInsensitiveUTF8 - -自 v25.9 起引入 - -检查字符串在忽略大小写的情况下,是否以给定前缀开头。 -假定字符串包含有效的 UTF-8 编码文本。 -如果该假设不成立,则不会抛出异常,结果未定义。 - -**语法** - -```sql -startsWithCaseInsensitiveUTF8(s, prefix) -``` - -**参数** - -* `s` — 要检查的字符串。[`String`](/sql-reference/data-types/string) -* `prefix` — 要检查的前缀(不区分大小写)。[`String`](/sql-reference/data-types/string) - -**返回值** - -如果 `s` 以不区分大小写的 `prefix` 开头,则返回 `1`,否则返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT startsWithCaseInsensitiveUTF8('приставка', 'при') -``` - -```response title=Response -┌─startsWithUT⋯ка', 'при')─┐ -│ 1 │ -└──────────────────────────┘ -``` - - -## startsWithUTF8 - -自 v23.8 起引入 - -检查字符串是否以指定前缀开头。 -假定字符串包含有效的 UTF-8 编码文本。 -如果该假设不成立,则不会抛出异常,结果未定义。 - -**语法** - -```sql -startsWithUTF8(s, prefix) -``` - -**参数** - -* `s` — 要检查的字符串。[`String`](/sql-reference/data-types/string) -* `prefix` — 要检查的前缀。[`String`](/sql-reference/data-types/string) - -**返回值** - -如果 `s` 以 `prefix` 开头,则返回 `1`,否则返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT startsWithUTF8('приставка', 'при') -``` - -```response title=Response -┌─startsWithUT⋯ка', 'при')─┐ -│ 1 │ -└──────────────────────────┘ -``` - - -## stringBytesEntropy - -在 v25.6 版本中引入 - -计算字符串中字节分布的香农熵值。 - -**语法** - -```sql -stringBytesEntropy(s) -``` - -**参数** - -* `s` — 要分析的字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回字符串中字节分布的香农熵值。[`Float64`](/sql-reference/data-types/float) - -**示例** - -**用法示例** - -```sql title=Query -SELECT stringBytesEntropy('Hello, world!') -``` - -```response title=Response -┌─stringBytesEntropy('Hello, world!')─┐ -│ 3.07049960 │ -└─────────────────────────────────────┘ -``` - - -## stringBytesUniq - -引入版本:v25.6 - -统计字符串中不同字节的数量。 - -**语法** - -```sql -stringBytesUniq(s) -``` - -**参数** - -* `s` — 要分析的字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回字符串中不同的字节数。[`UInt16`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT stringBytesUniq('Hello') -``` - -```response title=Response -┌─stringBytesUniq('Hello')─┐ -│ 4 │ -└──────────────────────────┘ -``` - - -## stringJaccardIndex - -自 v23.11 引入 - -计算两个字节串之间的 [Jaccard 相似系数](https://en.wikipedia.org/wiki/Jaccard_index)。 - -**语法** - -```sql -stringJaccardIndex(s1, s2) -``` - -**参数** - -* `s1` — 第一个输入字符串。[`String`](/sql-reference/data-types/string) -* `s2` — 第二个输入字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回两个字符串之间的 Jaccard 相似系数。[`Float64`](/sql-reference/data-types/float) - -**示例** - -**使用示例** - -```sql title=Query -SELECT stringJaccardIndex('clickhouse', 'mouse') -``` - -```response title=Response -┌─stringJaccardIndex('clickhouse', 'mouse')─┐ -│ 0.4 │ -└───────────────────────────────────────────┘ -``` - - -## stringJaccardIndexUTF8 - -自 v23.11 引入 - -与 [`stringJaccardIndex`](#stringJaccardIndex) 类似,但用于 UTF-8 编码的字符串。 - -**语法** - -```sql -stringJaccardIndexUTF8(s1, s2) -``` - -**参数** - -* `s1` — 第一个输入 UTF8 字符串。[`String`](/sql-reference/data-types/string) -* `s2` — 第二个输入 UTF8 字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回这两个 UTF8 字符串之间的 Jaccard 相似系数。[`Float64`](/sql-reference/data-types/float) - -**示例** - -**用法示例** - -```sql title=Query -SELECT stringJaccardIndexUTF8('我爱你', '我也爱你') -``` - -```response title=Response -┌─stringJaccardIndexUTF8('我爱你', '我也爱你')─┐ -│ 0.75 │ -└─────────────────────────────────────────────┘ -``` - - -## substring - -引入于:v1.1 - -返回字符串 `s` 的子字符串,子字符串从指定的字节索引 `offset` 开始。 -字节索引从 1 开始计数,并遵循以下规则: - -* 如果 `offset` 为 `0`,则返回空字符串。 -* 如果 `offset` 为负值,则子字符串从字符串末尾向前数第 `pos` 个字符开始,而不是从开头开始。 - -可选参数 `length` 用于指定返回子字符串所能包含的最大字节数。 - -**语法** - -```sql -substring(s, offset[, length]) -``` - -**别名**: `byteSlice`, `mid`, `substr` - -**参数** - -* `s` — 要从中截取子串的字符串。[`String`](/sql-reference/data-types/string) 或 [`FixedString`](/sql-reference/data-types/fixedstring) 或 [`Enum`](/sql-reference/data-types/enum) -* `offset` — 子串在 `s` 中的起始位置。[`(U)Int*`](/sql-reference/data-types/int-uint) -* `length` — 可选。子串的最大长度(字节数)。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回从索引 `offset` 开始、长度为 `length` 字节的 `s` 的子串。[`String`](/sql-reference/data-types/string) - -**示例** - -**基本用法** - -```sql title=Query -SELECT 'database' AS db, substr(db, 5), substr(db, 5, 1) -``` - -```response title=Response -┌─db───────┬─substring('database', 5)─┬─substring('database', 5, 1)─┐ -│ database │ base │ b │ -└──────────┴──────────────────────────┴─────────────────────────────┘ -``` - - -## substringIndex - -引入版本:v23.7 - -返回字符串 `s` 中在分隔符 `delim` 第 `count` 次出现之前的子串,与 Spark 或 MySQL 中的行为类似。 - -**语法** - -```sql -substringIndex(s, delim, count) -``` - -**别名**: `SUBSTRING_INDEX` - -**参数** - -* `s` — 要从中提取子串的字符串。[`String`](/sql-reference/data-types/string) -* `delim` — 用于分割的字符。[`String`](/sql-reference/data-types/string) -* `count` — 在提取子串之前要统计的分隔符出现次数。如果 `count` 为正数,则返回从左侧数起第 `count` 个分隔符左侧的所有内容。如果 `count` 为负数,则返回从右侧数起第 `|count|` 个分隔符右侧的所有内容。[`UInt`](/sql-reference/data-types/int-uint) 或 [`Int`](/sql-reference/data-types/int-uint) - -**返回值** - -返回 `s` 在 `delim` 第 `count` 次出现位置处分割得到的子串。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT substringIndex('www.clickhouse.com', '.', 2) -``` - -```response title=Response -┌─substringIndex('www.clickhouse.com', '.', 2)─┐ -│ www.clickhouse │ -└──────────────────────────────────────────────┘ -``` - - -## substringIndexUTF8 - -引入于:v23.7 - -返回字符串 `s` 中在分隔符 `delim` 出现第 `count` 次之前的子串,专门针对 Unicode 码点进行处理。 -假设该字符串包含有效的 UTF-8 编码文本。 -如果该假设不成立,不会抛出异常,且结果未定义。 - -**语法** - -```sql -substringIndexUTF8(s, delim, count) -``` - -**参数** - -* `s` — 要从中提取子字符串的源字符串。[`String`](/sql-reference/data-types/string) -* `delim` — 用于分割的分隔符字符。[`String`](/sql-reference/data-types/string) -* `count` — 在提取子字符串之前要计数的分隔符出现次数。如果 `count` 为正数,则返回从左边数最后一个分隔符左侧的全部内容。如果 `count` 为负数,则返回从右边数最后一个分隔符右侧的全部内容。[`UInt`](/sql-reference/data-types/int-uint) 或 [`Int`](/sql-reference/data-types/int-uint) - -**返回值** - -返回 `s` 中在第 `count` 次出现 `delim` 之前的子字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**UTF8 示例** - -```sql title=Query -SELECT substringIndexUTF8('www.straßen-in-europa.de', '.', 2) -``` - -```response title=Response -www.straßen-in-europa -``` - - -## substringUTF8 - -引入版本:v1.1 - -返回字符串 `s` 中从指定字节索引 `offset` 开始的子串,按 Unicode 码点进行处理。 -字节计数从 `1` 开始,遵循以下逻辑: - -* 如果 `offset` 为 `0`,则返回空字符串。 -* 如果 `offset` 为负数,则子串从字符串末尾向前数第 `pos` 个字符开始,而不是从开头开始。 - -可选参数 `length` 用于指定返回子串最多可以包含的字节数。 - -:::note -此函数假定字符串包含有效的 UTF-8 编码文本。 -如果该假设不成立,不会抛出异常,且结果是未定义的。 -::: - -**语法** - -```sql -substringUTF8(s, offset[, length]) -``` - -**参数** - -* `s` — 要从中截取子串的字符串。[`String`](/sql-reference/data-types/string) 或 [`FixedString`](/sql-reference/data-types/fixedstring) 或 [`Enum`](/sql-reference/data-types/enum) -* `offset` — 子串在 `s` 中的起始位置。[`Int`](/sql-reference/data-types/int-uint) 或 [`UInt`](/sql-reference/data-types/int-uint) -* `length` — 子串的最大长度,可选。[`Int`](/sql-reference/data-types/int-uint) 或 [`UInt`](/sql-reference/data-types/int-uint) - -**返回值** - -返回从索引 `offset` 开始、长度为 `length` 字节的 `s` 的子串。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT 'Täglich grüßt das Murmeltier.' AS str, substringUTF8(str, 9), substringUTF8(str, 9, 5) -``` - -```response title=Response -土拨鼠每天都来报到。 土拨鼠又来报到。 又来了 -``` - - -## toValidUTF8 - -自 v20.1 起引入 - -通过将任何无效的 UTF-8 字符替换为替换字符 `�`(U+FFFD),将字符串转换为有效的 UTF-8 编码。 -当发现多个连续的无效字符时,它们会被合并为单个替换字符。 - -**语法** - -```sql -toValidUTF8(s) -``` - -**参数** - -* `s` — 任意由 String 数据类型对象表示的字节序列。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回一个有效的 UTF-8 字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT toValidUTF8('\\x61\\xF0\\x80\\x80\\x80b') -``` - -```response title=Response -c -┌─toValidUTF8('a����b')─┐ -│ a�b │ -└───────────────────────┘ -``` - - -## trimBoth - -自 v20.1 引入 - -从字符串的开头和结尾移除指定字符。 -默认情况下,会移除常见的空白(ASCII)字符。 - -**语法** - -```sql -trimBoth(s[, trim_characters]) -``` - -**别名**: `trim` - -**参数** - -* `s` — 要去除首尾字符的字符串。[`String`](/sql-reference/data-types/string) -* `trim_characters` — 可选。要去除的字符。如果未指定,则会删除常见空白字符。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回从两端去除指定字符后的字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT trimBoth('$$ClickHouse$$', '$') -``` - -```response title=Response -┌─trimBoth('$$⋯se$$', '$')─┐ -│ ClickHouse │ -└──────────────────────────┘ -``` - - -## trimLeft - -自 v20.1 版本引入 - -从字符串开头删除指定字符。 -默认情况下,会删除常见的空白(ASCII)字符。 - -**语法** - -```sql -trimLeft(input[, trim_characters]) -``` - -**别名**: `ltrim` - -**参数** - -* `input` — 要去除字符的字符串。[`String`](/sql-reference/data-types/string) -* `trim_characters` — 可选。要去除的字符。如果未指定,则会移除常见空白字符。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回从左侧去除了指定字符的字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT trimLeft('ClickHouse', 'Click'); -``` - -```response title=Response -┌─trimLeft('Cl⋯', 'Click')─┐ -│ 房屋 │ -└──────────────────────────┘ -``` - - -## trimRight - -自 v20.1 引入 - -从字符串结尾移除指定字符。 -默认情况下,会移除常见的空白(ASCII)字符。 - -**语法** - -```sql -trimRight(s[, trim_characters]) -``` - -**别名**: `rtrim` - -**参数** - -* `s` — 要去除字符的字符串。[`String`](/sql-reference/data-types/string) -* `trim_characters` — 可选,要去除的字符。如果未指定,则会移除常见的空白字符。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回从右侧去除了指定字符的字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT trimRight('ClickHouse','House'); -``` - -```response title=Response -┌─trimRight('C⋯', 'House')─┐ -│ Click │ -└──────────────────────────┘ -``` - - -## tryBase32Decode - -自 v25.6 起引入 - -接受一个字符串,并按照 [Base32](https://datatracker.ietf.org/doc/html/rfc4648#section-6) 编码方案对其进行解码。 - -**语法** - -```sql -tryBase32Decode(encoded) -``` - -**参数** - -* `encoded` — 要解码的字符串列或常量。如果字符串不是有效的 Base32 编码,解码出错时返回空字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回一个包含参数解码后值的字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT tryBase32Decode('IVXGG33EMVSA===='); -``` - -```response title=Response -┌─tryBase32Decode('IVXGG33EMVSA====')─┐ -│ 已编码 │ -└─────────────────────────────────────┘ -``` - - -## tryBase58Decode - -自 v22.10 起引入 - -类似于 [`base58Decode`](#base58Decode),但在出错时返回空字符串。 - -**语法** - -```sql -尝试Base58解码(encoded) -``` - -**参数** - -* `encoded` — 字符串列或常量。如果该字符串不是有效的 Base58 编码,则在出错时返回空字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回一个包含参数解码结果的字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT tryBase58Decode('3dc8KtHrwM') AS res, tryBase58Decode('invalid') AS res_invalid; -``` - -```response title=Response -┌─res─────┬─res_invalid─┐ -│ 编码结果 │ │ -└─────────┴─────────────┘ -``` - - -## tryBase64Decode - -引入版本:v18.16 - -与 [`base64Decode`](#base64Decode) 类似,但在发生错误时返回空字符串。 - -**语法** - -```sql -tryBase64Decode(encoded) -``` - -**参数** - -* `encoded` — 要解码的字符串列或常量。如果字符串不是有效的 Base64 编码字符串,发生错误时返回空字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回一个包含参数解码后值的字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT tryBase64Decode('Y2xpY2tob3VzZQ==') -``` - -```response title=Response -┌─tryBase64Decode('Y2xpY2tob3VzZQ==')─┐ -│ clickhouse │ -└─────────────────────────────────────┘ -``` - - -## tryBase64URLDecode - -自 v18.16 起引入 - -类似于 [`base64URLDecode`](#base64URLDecode),但在出错时返回空字符串。 - -**语法** - -```sql -tryBase64URLDecode(encoded) -``` - -**参数** - -* `encoded` — 要解码的字符串列或常量。如果字符串不是有效的 Base64 编码,出错时返回空字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回一个字符串,其中包含参数的解码值。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT tryBase64URLDecode('aHR0cHM6Ly9jbGlja2hvdXNlLmNvbQ') -``` - -```response title=Response -┌─tryBase64URLDecode('aHR0cHM6Ly9jbGlja2hvdXNlLmNvbQ')─┐ -│ https://clickhouse.com │ -└──────────────────────────────────────────────────────┘ -``` - - -## tryIdnaEncode - -引入于:v24.1 - -根据 [应用中的国际化域名](https://en.wikipedia.org/wiki/Internationalized_domain_name#Internationalizing_Domain_Names_in_Applications)(IDNA)机制,使用 ToUnicode 算法返回域名的 Unicode(UTF-8)形式。 -如果发生错误,则返回空字符串,而不是抛出异常。 - -**语法** - -```sql -tryIdnaEncode(s) -``` - -**参数** - -* `s` — 输入字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -根据输入值的 IDNA 规则,返回输入字符串的 ASCII 表示形式;如果输入无效,则返回空字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT tryIdnaEncode('straße.münchen.de') -``` - -```response title=Response -┌─tryIdnaEncode('straße.münchen.de')──┐ -│ xn--strae-oqa.xn--mnchen-3ya.de │ -└─────────────────────────────────────┘ -``` - - -## tryPunycodeDecode - -自 v24.1 版本引入 - -类似于 `punycodeDecode`,但如果传入的字符串不是有效的 Punycode 编码,则返回空字符串。 - -**语法** - -```sql -tryPunycodeDecode(s) -``` - -**参数** - -* `s` — Punycode 编码的字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回输入值解码后的文本;如果输入无效,则返回空字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT tryPunycodeDecode('Mnchen-3ya') -``` - -```response title=Response -┌─tryPunycodeDecode('Mnchen-3ya')─┐ -│ 慕尼黑 │ -└─────────────────────────────────┘ -``` - - -## upper - -首次引入于:v1.1 - -将字符串中的 ASCII 拉丁字符转换为大写。 - -**语法** - -```sql -upper(s) -``` - -**别名**: `ucase` - -**参数** - -* `s` — 要转换为大写的字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回 `s` 的大写形式字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT upper('clickhouse') -``` - -```response title=Response -┌─upper('clickhouse')─┐ -│ CLICKHOUSE │ -└─────────────────────┘ -``` - - -## upperUTF8 - -引入版本:v1.1 - -将字符串转换为大写,假定该字符串包含合法的 UTF-8 编码文本。 -如果该假设不成立,不会抛出异常,且结果未定义。 - -:::note -该函数不会根据具体语言进行处理,例如对于土耳其语,结果可能并不完全正确(i/İ 与 i/I)。 -如果某个码点的大写和小写形式的 UTF-8 字节序列长度不同(例如 `ẞ` 和 `ß`),则该码点的结果可能不正确。 -::: - -**语法** - -```sql -upperUTF8(s) -``` - -**参数** - -* `s` — 字符串类型。[`String`](/sql-reference/data-types/string) - -**返回值** - -一个 `String` 数据类型的值。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT upperUTF8('München') AS Upperutf8 -``` - -```response title=Response -┌─Upperutf8─┐ -│ MÜNCHEN │ -└───────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/string-replace-functions.md b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/string-replace-functions.md index db83eb69bfa..dea67ba7a56 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/string-replace-functions.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/string-replace-functions.md @@ -1,5 +1,5 @@ --- -description: '字符串替换函数文档' +description: '字符串替换函数参考文档' sidebar_label: '字符串替换' slug: /sql-reference/functions/string-replace-functions title: '字符串替换函数' @@ -7,520 +7,20 @@ doc_type: 'reference' keywords: ['字符串替换'] --- +# 字符串替换函数 - -# 用于字符串替换的函数 - -[通用字符串函数](string-functions.md) 和 [字符串搜索函数](string-search-functions.md) 将分别进行说明。 +[通用字符串函数](string-functions.md)和[字符串搜索函数](string-search-functions.md)在单独的文档中说明。 :::note -下面的文档是从 `system.functions` 系统表生成的。 +以下文档内容是基于 `system.functions` 系统表自动生成的。 ::: {/* - 以下标签内的内容会在文档框架构建过程中被替换为 - 由 system.functions 生成的文档。请勿修改或删除这些标签。 + 以下标签内部的内容会在文档框架构建期间被替换为 + 由 system.functions 生成的文档。请不要修改或删除这些标签。 参见:https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## format - -引入版本:v20.1 - -使用参数中给出的值(字符串、整数等)对 `pattern` 字符串进行格式化,类似于 Python 中的格式化方式。 -`pattern` 字符串可以包含由花括号 `{}` 包围的替换字段。 -不在花括号中的任何内容都被视为字面文本内容,并按原样复制到输出中。 -字面量花括号字符可以通过两个花括号来转义:`{{` 和 `}}`。 -字段名称可以是数字(从 0 开始)或者为空(此时会隐式地按从 0 开始依次递增的编号进行标记)。 - -**语法** - -```sql -format(pattern, s0[, s1, ...]) -``` - -**参数** - -* `pattern` — 包含占位符的格式字符串。[`String`](/sql-reference/data-types/string) -* `s0[, s1, ...]` — 用于替换 `pattern` 中占位符的一个或多个值。[`Any`](/sql-reference/data-types) - -**返回值** - -返回一个格式化的字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**编号占位符** - -```sql title=Query -SELECT format('{1} {0} {1}', 'World', 'Hello') -``` - -```response title=Response -┌─format('{1} {0} {1}', 'World', 'Hello')─┐ -│ Hello World Hello │ -└─────────────────────────────────────────┘ -``` - -**隐式编号** - -```sql title=Query -SELECT format('{} {}', '你好', '世界') -``` - -```response title=Response -┌─format('{} {}', 'Hello', 'World')─┐ -│ 你好,世界 │ -└───────────────────────────────────┘ -``` - - -## overlay - -引入版本:v24.9 - -从以 1 为起点的索引 `offset` 开始,将字符串 `input` 的一部分替换为另一个字符串 `replace`。 - -**语法** - -```sql -overlay(s, replace, offset[, length]) -``` - -**参数** - -* `s` — 输入字符串。[`String`](/sql-reference/data-types/string) -* `replace` — 用于替换的字符串。[`const String`](/sql-reference/data-types/string) -* `offset` — 整数类型 `Int`(从 1 开始计数)。如果 `offset` 为负数,则从字符串 `s` 的末尾开始计数。[`Int`](/sql-reference/data-types/int-uint) -* `length` — 可选。整数类型 `Int`。`length` 指定在输入字符串 `s` 中要替换的片段长度。如果未指定 `length`,则从 `s` 中移除的字节数等于 `replace` 的长度;否则移除 `length` 个字节。[`Int`](/sql-reference/data-types/int-uint) - -**返回值** - -返回替换后的字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**基本替换** - -```sql title=Query -SELECT overlay('我的父亲来自墨西哥。', '母亲', 4) AS res; -``` - -```response title=Response -┌─res──────────────────────┐ -│ 我妈妈来自墨西哥。 │ -└──────────────────────────┘ -``` - -**保留长度的替换** - -```sql title=Query -SELECT overlay('My dad is from Mexico.', 'dad', 4, 6) AS res; -``` - -```response title=Response -┌─res───────────────────┐ -│ 我爸爸来自墨西哥。│ -└───────────────────────┘ -``` - - -## overlayUTF8 - -自 v24.9 引入 - -从以 1 为起始的索引 `offset` 位置开始,将字符串 `s` 的一部分替换为另一个字符串 `replace`。 -假定该字符串包含有效的 UTF-8 编码文本。 -如果该假设不成立,则不会抛出异常,结果未定义。 - -**语法** - -```sql -overlayUTF8(s, replace, offset[, length]) -``` - -**参数** - -* `s` — 输入字符串。[`String`](/sql-reference/data-types/string) -* `replace` — 用于替换的字符串。[`const String`](/sql-reference/data-types/string) -* `offset` — 整数类型 `Int`(从 1 开始计数)。如果 `offset` 为负数,则从输入字符串 `s` 的末尾开始计数。[`(U)Int*`](/sql-reference/data-types/int-uint) -* `length` — 可选。指定在输入字符串 `s` 中要被替换的片段长度。如果未指定 `length`,则从 `s` 中移除的字符数等于 `replace` 的长度,否则移除 `length` 个字符。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回替换后的字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**UTF-8 替换** - -```sql title=Query -SELECT overlayUTF8('Mein Vater ist aus Österreich.', 'der Türkei', 20) AS res; -``` - -```response title=Response -┌─res───────────────────────────┐ -│ Mein Vater ist aus der Türkei.│ -└───────────────────────────────┘ -``` - - -## printf - -引入版本:v24.8 - -`printf` 函数会使用参数中提供的值(字符串、整数、浮点数等)来格式化给定的字符串,类似于 C++ 中的 `printf` 函数。 -格式字符串可以包含以 `%` 字符开头的格式说明符。 -不属于 `%` 及其后续格式说明符的任何内容都被视为字面文本,并原样复制到输出中。 -要输出字面意义上的 `%` 字符,可以使用 `%%` 进行转义。 - -**语法** - -```sql -printf(format[, sub1, sub2, ...]) -``` - -**参数** - -* `format` — 带有 `%` 说明符的格式字符串。[`String`](/sql-reference/data-types/string) -* `sub1, sub2, ...` — 可选。要替换到格式字符串中的零个或多个值。[`Any`](/sql-reference/data-types) - -**返回值** - -返回一个格式化后的字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**C++ 风格的格式化** - -```sql title=Query -SELECT printf('%%%s %s %d', 'Hello', 'World', 2024); -``` - -```response title=Response -┌─printf('%%%s %s %d', 'Hello', 'World', 2024)─┐ -│ %Hello World 2024 │ -└──────────────────────────────────────────────┘ -``` - - -## regexpQuoteMeta - -自 v20.1 起引入 - -为在正则表达式中具有特殊含义的这些字符添加反斜杠:`\0`、`\\`、`|`、`(`、`)`、`^`、`$`、`.`、`[`、`]`、`?`、`*`、`+`、`{`、`:`、`-`。 -该实现与 `re2::RE2::QuoteMeta` 略有不同。 -它将空字节转义为 `\0` 而不是 `\x00`,并且只转义必要的字符。 - -**语法** - -```sql -regexpQuoteMeta(s) -``` - -**参数** - -* `s` — 输入字符串,其中包含需要在正则表达式中转义的字符。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回一个字符串,其中的正则表达式特殊字符已被转义。[`String`](/sql-reference/data-types/string) - -**示例** - -**对正则表达式的特殊字符进行转义** - -```sql title=Query -SELECT regexpQuoteMeta('Hello. [World]? (Yes)*') AS res -``` - -```response title=Response -┌─res───────────────────────────┐ -│ Hello\. \[World\]\? \(Yes\)\* │ -└───────────────────────────────┘ -``` - - -## replaceAll - -自 v1.1 版本引入 - -将 `haystack` 中所有出现的子字符串 `pattern` 替换为字符串 `replacement`。 - -**语法** - -```sql -replaceAll(haystack, pattern, replacement) -``` - -**别名**: `replace` - -**参数** - -* `haystack` — 输入的待搜索字符串。[`String`](/sql-reference/data-types/string) -* `pattern` — 要查找并替换的子字符串(模式)。[`const String`](/sql-reference/data-types/string) -* `replacement` — 用于替换该子字符串(模式)的字符串。[`const String`](/sql-reference/data-types/string) - -**返回值** - -返回一个字符串,其中所有出现的模式都会被替换。[`String`](/sql-reference/data-types/string) - -**示例** - -**替换所有出现的模式** - -```sql title=Query -SELECT replaceAll('Hello, Hello world', 'Hello', 'Hi') AS res; -``` - -```response title=Response -┌─res──────────┐ -│ 你好,你好世界 │ -└──────────────┘ -``` - - -## replaceOne - -在 v1.1 中引入 - -将 `haystack` 中第一次出现的子字符串 `pattern` 替换为字符串 `replacement`。 - -**语法** - -```sql -replaceOne(haystack, pattern, replacement) -``` - -**参数** - -* `haystack` — 要在其中进行搜索的输入字符串。[`String`](/sql-reference/data-types/string) -* `pattern` — 要查找并替换的子字符串。[`const String`](/sql-reference/data-types/string) -* `replacement` — 用于替换该子字符串的字符串。[`const String`](/sql-reference/data-types/string) - -**返回值** - -返回一个字符串,其中第一个匹配到的子字符串已被替换。[`String`](/sql-reference/data-types/string) - -**示例** - -**替换首次出现的子字符串** - -```sql title=Query -SELECT replaceOne('Hello, Hello world', 'Hello', 'Hi') AS res; -``` - -```response title=Response -┌─res─────────────┐ -│ 嗨,世界,你好 │ -└─────────────────┘ -``` - - -## replaceRegexpAll - -自 v1.1 引入 - -与 `replaceRegexpOne` 类似,但会替换模式的所有匹配项。 -作为例外,如果正则表达式在空子串上匹配,则替换最多只执行一次。 - -**语法** - -```sql -replaceRegexpAll(haystack, pattern, replacement) -``` - -**别名**: `REGEXP_REPLACE` - -**参数** - -* `haystack` — 要在其中搜索的输入字符串。[`String`](/sql-reference/data-types/string) -* `pattern` — 要查找的正则表达式模式。[`const String`](/sql-reference/data-types/string) -* `replacement` — 用于替换匹配模式的字符串,可以包含替换占位符。[`const String`](/sql-reference/data-types/string) - -**返回值** - -返回一个字符串,其中所有正则匹配项都已被替换。[`String`](/sql-reference/data-types/string) - -**示例** - -**将所有字符替换为双写形式** - -```sql title=Query -SELECT replaceRegexpAll('Hello123', '.', '\\\\0\\\\0') AS res -``` - -```response title=Response -┌─res──────────────────┐ -│ HHeelllloo112233 │ -└──────────────────────┘ -``` - -**空字符串替换示例** - -```sql title=Query -SELECT replaceRegexpAll('Hello, World!', '^', 'here: ') AS res -``` - -```response title=Response -┌─res─────────────────┐ -│ here: Hello, World! │ -└─────────────────────┘ -``` - - -## replaceRegexpOne - -引入版本:v1.1 - -将 `haystack` 中第一个与正则表达式 `pattern`(re2 语法)匹配的子串替换为字符串 `replacement`。 -`replacement` 可以包含替换序列 `\0-\9`。 -替换序列 `\1-\9` 对应第 1 到第 9 个捕获组(子匹配),替换序列 `\0` 对应整个匹配结果。 -如果要在 `pattern` 或 `replacement` 字符串中使用字面量 `\` 字符,需要将其写作 `\\` 进行转义。 -同时请注意,字符串字面量本身还需要额外的转义。 - -**语法** - -```sql -replaceRegexpOne(haystack, pattern, replacement) -``` - -**参数** - -* `haystack` — 要在其中进行搜索的输入字符串。[`String`](/sql-reference/data-types/string) -* `pattern` — 要匹配的正则表达式模式。[`const String`](/sql-reference/data-types/string) -* `replacement` — 用于替换匹配结果的字符串,可包含替换引用。[`const String`](/sql-reference/data-types/string) - -**返回值** - -返回一个字符串,其中第一个正则表达式匹配项已被替换。[`String`](/sql-reference/data-types/string) - -**示例** - -**将 ISO 日期转换为美国日期格式** - -```sql title=Query -SELECT DISTINCT - EventDate, - replaceRegexpOne(toString(EventDate), '(\\d{4})-(\\d{2})-(\\d{2})', '\\2/\\3/\\1') AS res -FROM test.hits -LIMIT 7 -FORMAT TabSeparated -``` - -```response title=Response -2014-03-17 03/17/2014 -2014-03-18 03/18/2014 -2014-03-19 03/19/2014 -2014-03-20 03/20/2014 -2014-03-21 03/21/2014 -2014-03-22 03/22/2014 -2014-03-23 03/23/2014 -``` - -**将字符串复制 10 次** - -```sql title=Query -SELECT replaceRegexpOne('Hello, World!', '.*', '\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0\\\\0') AS res -``` - -```response title=Response -┌─res────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ -│ Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!你好,世界! │ -└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## translate - -引入于:v22.7 - -使用由字符串 `from` 和 `to` 定义的一对一字符映射,替换字符串 `s` 中的字符。 -`from` 和 `to` 必须是常量 ASCII 字符串。 -如果 `from` 和 `to` 的长度相同,则 `s` 中每个出现的 `from` 的第一个字符都会被替换为 `to` 的第一个字符,`from` 的第二个字符在 `s` 中的每次出现都会被替换为 `to` 的第二个字符,依此类推。 -如果 `from` 中包含的字符多于 `to`,那么 `from` 末尾中在 `to` 中没有对应字符的所有字符在 `s` 中的所有出现都会被删除。 -函数不会修改 `s` 中的非 ASCII 字符。 - -**语法** - -```sql -translate(s, from, to) -``` - -**参数** - -* `s` — 要进行转换的输入字符串。[`String`](/sql-reference/data-types/string) -* `from` — 包含要替换字符的常量 ASCII 字符串。[`const String`](/sql-reference/data-types/string) -* `to` — 包含替换后字符的常量 ASCII 字符串。[`const String`](/sql-reference/data-types/string) - -**返回值** - -返回应用了字符替换后的字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**字符映射** - -```sql title=Query -SELECT translate('Hello, World!', 'delor', 'DELOR') AS res -``` - -```response title=Response -┌─res───────────┐ -│ HELLO, WORLD! │ -└───────────────┘ -``` - -**不同长度** - -```sql title=Query -SELECT translate('clickhouse', 'clickhouse', 'CLICK') AS res -``` - -```response title=Response -┌─res───┐ -│ 点击 │ -└───────┘ -``` - - -## translateUTF8 - -自 v22.7 起提供 - -与 [`translate`](#translate) 类似,但假定 `s`、`from` 和 `to` 是 UTF-8 编码的字符串。 - -**语法** - -```sql -translateUTF8(s, from, to) -``` - -**参数** - -* `s` — 要进行字符替换的 UTF-8 输入字符串。[`String`](/sql-reference/data-types/string) -* `from` — 包含要被替换字符的常量 UTF-8 字符串。[`const String`](/sql-reference/data-types/string) -* `to` — 包含替换后字符的常量 UTF-8 字符串。[`const String`](/sql-reference/data-types/string) - -**返回值** - -返回一个 `String` 数据类型的值。[`String`](/sql-reference/data-types/string) - -**示例** - -**UTF-8 字符替换** - -```sql title=Query -SELECT translateUTF8('Münchener Straße', 'üß', 'us') AS res; -``` - -```response title=Response -┌─res──────────────┐ -│ Munchener Strase │ -└──────────────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/string-search-functions.md b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/string-search-functions.md index ad95fa25659..9f07527452a 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/string-search-functions.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/string-search-functions.md @@ -1,2707 +1,34 @@ --- -description: '用于在字符串中搜索的函数文档' -sidebar_label: '字符串搜索函数' +description: '字符串搜索函数文档' +sidebar_label: '字符串搜索' slug: /sql-reference/functions/string-search-functions title: '字符串搜索函数' doc_type: 'reference' --- - - # 在字符串中搜索的函数 本节中的所有函数默认执行区分大小写的搜索。不区分大小写的搜索通常通过单独的函数变体提供。 :::note -不区分大小写的搜索遵循英语的大小写规则。例如,英语中小写字母 `i` 的大写形式是 `I`,而在土耳其语中则是 `İ` —— 因此对于非英语语言,结果可能与预期不符。 +不区分大小写的搜索遵循英语的小写与大写规则。例如,在英语中,小写 `i` 的大写形式是 `I`,而在土耳其语中则是 `İ` —— 因此对于英语以外的语言,结果可能不符合预期。 ::: -本节中的函数还假定被搜索的字符串(在本节中称为 `haystack`)和搜索字符串(在本节中称为 `needle`)是单字节编码文本。如果不满足这一假设,将不会抛出异常,且结果未定义。对 UTF-8 编码字符串的搜索通常通过单独的函数变体提供。同样地,如果使用了 UTF-8 函数变体而输入字符串不是 UTF-8 编码文本,也不会抛出异常,且结果未定义。请注意,不会执行自动的 Unicode 规范化,不过您可以使用 [normalizeUTF8*()](https://clickhouse.com../functions/string-functions/) 函数来实现这一点。 +本节中的函数还假定被搜索的字符串(在本节中称为 `haystack`)和搜索字符串(在本节中称为 `needle`)是单字节编码文本。如果不满足这一假设,将不会抛出异常,且结果未定义。对 UTF-8 编码字符串的搜索通常通过单独的函数变体提供。同样地,如果使用的是 UTF-8 函数变体,而输入字符串不是 UTF-8 编码文本,也不会抛出异常,结果未定义。请注意,不会自动执行 Unicode 规范化,不过可以使用 +[normalizeUTF8*()](https://clickhouse.com../functions/string-functions/) 函数来执行该操作。 -[通用字符串函数](string-functions.md) 和 [字符串替换函数](string-replace-functions.md) 在单独的文档中进行说明。 +[通用字符串函数](string-functions.md)和[字符串替换函数](string-replace-functions.md)在单独的章节中介绍。 :::note -下面的文档是从 `system.functions` 系统表生成的。 +下文的文档是从 `system.functions` 系统表生成的。 ::: {/* - 下面标签的内部内容会在文档框架构建时, - 被 system.functions 生成的文档所替换。 - 请不要修改或删除这些标签。 + 下面标签内的内容会在文档框架构建时被替换为 + 从 system.functions 生成的文档。请不要修改或移除这些标签。 参见:https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## countMatches - -引入于:v21.1 - -返回正则表达式在字符串中的匹配次数。 - -:::note Version dependent behavior -该函数的行为依赖于 ClickHouse 版本: - -* 在 < v25.6 的版本中,即使模式允许,函数在遇到第一个空匹配时就会停止计数。 -* 在 >= 25.6 的版本中,函数在出现空匹配时会继续执行。可以通过设置 `count_matches_stop_at_empty_match = true` 恢复旧行为。 - ::: - -**语法** - -```sql -countMatches(haystack, pattern) -``` - -**参数** - -* `haystack` — 要搜索的字符串。[`String`](/sql-reference/data-types/string) -* `pattern` — 正则表达式模式。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回匹配到的次数。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**统计数字序列** - -```sql title=Query -SELECT countMatches('hello 123 world 456 test', '[0-9]+') -``` - -```response title=Response -┌─countMatches('hello 123 world 456 test', '[0-9]+')─┐ -│ 2 │ -└─────────────────────────────────────────────────────┘ -``` - - -## countMatchesCaseInsensitive - -自 v21.1 引入 - -类似于 [`countMatches`](#countMatches),但进行不区分大小写的匹配。 - -**语法** - -```sql -countMatchesCaseInsensitive(haystack, pattern) -``` - -**参数** - -* `haystack` — 要在其中搜索的字符串。[`String`](/sql-reference/data-types/string) -* `pattern` — 正则表达式模式。[`const String`](/sql-reference/data-types/string) - -**返回值** - -返回找到的匹配次数。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**不区分大小写的计数** - -```sql title=Query -SELECT countMatchesCaseInsensitive('Hello HELLO world', 'hello') -``` - -```response title=Response -┌─countMatchesCaseInsensitive('Hello HELLO world', 'hello')─┐ -│ 2 │ -└───────────────────────────────────────────────────────────┘ -``` - - -## countSubstrings - -引入于:v21.1 - -返回子字符串 `needle` 在字符串 `haystack` 中出现的次数。 - -**语法** - -```sql -countSubstrings(干草堆, 针[, 起始位置]) -``` - -**参数** - -* `haystack` — 进行搜索的字符串。[String](../../sql-reference/data-types/string.md) 或 [Enum](../../sql-reference/data-types/enum.md)。 - `needle` — 要搜索的子字符串。[String](../../sql-reference/data-types/string.md)。 - `start_pos` — 在 `haystack` 中开始搜索的位置(从 1 开始计数)。[UInt](../../sql-reference/data-types/int-uint.md)。可选。 - -**返回值** - -匹配出现的次数。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT countSubstrings('aaaa', 'aa'); -``` - -```response title=Response -┌─countSubstrings('aaaa', 'aa')─┐ -│ 2 │ -└───────────────────────────────┘ -``` - -**使用 start_pos 参数** - -```sql title=Query -SELECT countSubstrings('abc___abc', 'abc', 4); -``` - -```response title=Response -┌─countSubstrings('abc___abc', 'abc', 4)─┐ -│ 1 │ -└────────────────────────────────────────┘ -``` - - -## countSubstringsCaseInsensitive - -引入版本:v21.1 - -与 [`countSubstrings`](#countSubstrings) 类似,但以不区分大小写的方式计数。 - -**语法** - -```sql -countSubstringsCaseInsensitive(haystack, needle[, start_pos]) -``` - -**参数** - -* `haystack` — 要在其中执行搜索的字符串。[`String`](/sql-reference/data-types/string) 或 [`Enum`](/sql-reference/data-types/enum) -* `needle` — 要搜索的子字符串。[`String`](/sql-reference/data-types/string) -* `start_pos` — 可选。在 `haystack` 中开始搜索的位置(从 1 开始计数)。[`UInt*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回 `needle` 在 `haystack` 中出现的次数。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT countSubstringsCaseInsensitive('AAAA', 'aa'); -``` - -```response title=Response -┌─countSubstri⋯AAA', 'aa')─┐ -│ 2 │ -└──────────────────────────┘ -``` - -**使用 start_pos 参数** - -```sql title=Query -SELECT countSubstringsCaseInsensitive('abc___ABC___abc', 'abc', 4); -``` - -```response title=Response -┌─countSubstri⋯, 'abc', 4)─┐ -│ 2 │ -└──────────────────────────┘ -``` - - -## countSubstringsCaseInsensitiveUTF8 - -自 v21.1 起引入 - -类似于 [`countSubstrings`](#countSubstrings),但按不区分大小写的方式计数,并假定 haystack 为 UTF-8 字符串。 - -**语法** - -```sql -countSubstringsCaseInsensitiveUTF8(haystack, needle[, start_pos]) -``` - -**参数** - -* `haystack` — 要在其中执行搜索的 UTF-8 字符串。[`String`](/sql-reference/data-types/string) 或 [`Enum`](/sql-reference/data-types/enum) -* `needle` — 要搜索的子串。[`String`](/sql-reference/data-types/string) -* `start_pos` — 可选。在 `haystack` 中开始搜索的位置(从 1 开始)。[`UInt*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回 `needle` 在 `haystack` 中出现的次数。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT countSubstringsCaseInsensitiveUTF8('ложка, кошка, картошка', 'КА'); -``` - -```response title=Response -┌─countSubstri⋯шка', 'КА')─┐ -│ 4 │ -└──────────────────────────┘ -``` - -**使用 start_pos 参数** - -```sql title=Query -SELECT countSubstringsCaseInsensitiveUTF8('ложка, кошка, картошка', 'КА', 13); -``` - -```response title=Response -┌─countSubstri⋯, 'КА', 13)─┐ -│ 2 │ -└──────────────────────────┘ -``` - - -## extract - -引入于:v1.1 - -从字符串中提取与正则表达式匹配的第一个结果。 -如果 'haystack' 不匹配 'pattern',则返回空字符串。 - -此函数使用 RE2 正则表达式库。有关支持的语法,请参阅 [re2](https://github.com/google/re2/wiki/Syntax)。 - -如果正则表达式包含捕获组(子模式),函数会基于第一个捕获组对输入字符串进行匹配。 - -**语法** - -```sql -extract(haystack, pattern) -``` - -**参数** - -* `haystack` — 要从中提取内容的源字符串。[`String`](/sql-reference/data-types/string) -* `pattern` — 正则表达式,通常包含一个捕获组。[`const String`](/sql-reference/data-types/string) - -**返回值** - -返回提取出的片段,类型为字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**从电子邮箱地址中提取域名** - -```sql title=Query -SELECT extract('test@clickhouse.com', '.*@(.*)$') -``` - -```response title=Response -┌─extract('test@clickhouse.com', '.*@(.*)$')─┐ -│ clickhouse.com │ -└───────────────────────────────────────────┘ -``` - -**无匹配时返回空字符串** - -```sql title=Query -SELECT extract('test@clickhouse.com', 'no_match') -``` - -```response title=Response -┌─extract('test@clickhouse.com', 'no_match')─┐ -│ │ -└────────────────────────────────────────────┘ -``` - - -## extractAll - -引入版本:v1.1 - -与 [`extract`](#extract) 类似,但会返回字符串中正则表达式所有匹配结果构成的数组。 -如果 'haystack' 不匹配 'pattern' 正则表达式,则返回空数组。 - -如果正则表达式包含捕获组(子模式),该函数会返回第一个捕获组的匹配结果。 - -**语法** - -```sql -extractAll(haystack, pattern) -``` - -**参数** - -* `haystack` — 要从中提取片段的字符串。[`String`](/sql-reference/data-types/string) -* `pattern` — 正则表达式,可以包含捕获组。[`const String`](/sql-reference/data-types/string) - -**返回值** - -返回包含提取片段的数组。[`Array(String)`](/sql-reference/data-types/array) - -**示例** - -**提取所有数字** - -```sql title=Query -SELECT extractAll('hello 123 world 456', '[0-9]+') -``` - -```response title=Response -┌─extractAll('hello 123 world 456', '[0-9]+')─┐ -│ ['123','456'] │ -└─────────────────────────────────────────────┘ -``` - -**使用捕获组提取** - -```sql title=Query -SELECT extractAll('test@example.com, user@domain.org', '([a-zA-Z0-9]+)@') -``` - -```response title=Response -┌─extractAll('test@example.com, user@domain.org', '([a-zA-Z0-9]+)@')─┐ -│ ['test','user'] │ -└────────────────────────────────────────────────────────────────────┘ -``` - - -## extractAllGroupsHorizontal - -自 v20.5 引入 - -使用提供的正则表达式匹配字符串中的所有捕获组,并返回一个数组的数组,其中每个数组按组号组织,包含同一捕获组的所有捕获结果。 - -**语法** - -```sql -extractAllGroupsHorizontal(s, regexp) -``` - -**参数** - -* `s` — 要从中提取的输入字符串。[`String`](/sql-reference/data-types/string) 或 [`FixedString`](/sql-reference/data-types/fixedstring) -* `regexp` — 用于匹配的正则表达式。[`const String`](/sql-reference/data-types/string) 或 [`const FixedString`](/sql-reference/data-types/fixedstring) - -**返回值** - -返回一个数组的数组,其中每个内部数组包含某一捕获组在所有匹配结果中的全部捕获内容。第一个内部数组包含第 1 组的所有捕获,第二个内部数组包含第 2 组的所有捕获,依此类推。如果未找到任何匹配,则返回空数组。[`Array(Array(String))`](/sql-reference/data-types/array) - -**示例** - -**使用示例** - -```sql title=Query -WITH '< Server: nginx -< Date: Tue, 22 Jan 2019 00:26:14 GMT -< Content-Type: text/html; charset=UTF-8 -< Connection: keep-alive -' AS s -SELECT extractAllGroupsHorizontal(s, '< ([\\w\\-]+): ([^\\r\\n]+)'); -``` - -```response title=Response -[['Server','Date','Content-Type','Connection'],['nginx','Tue, 22 Jan 2019 00:26:14 GMT','text/html; charset=UTF-8','keep-alive']] -``` - - -## extractGroups - -自 v20.5 起引入 - -从正则表达式匹配到的互不重叠子串中提取所有捕获组。 - -**语法** - -```sql -extractAllGroups(s, regexp) -``` - -**参数** - -* `s` — 要从中提取的输入字符串。[`String`](/sql-reference/data-types/string) 或 [`FixedString`](/sql-reference/data-types/fixedstring) -* `regexp` — 正则表达式常量。[`const String`](/sql-reference/data-types/string) 或 [`const FixedString`](/sql-reference/data-types/fixedstring) - -**返回值** - -如果函数找到至少一个匹配的捕获组,则返回类型为 `Array(Array(String))` 的列,按 group_id(`1` 到 `N`,其中 `N` 是 regexp 中捕获组的数量)组织。如果没有匹配的捕获组,则返回空数组。[`Array(Array(String))`](/sql-reference/data-types/array) - -**示例** - -**用法示例** - -```sql title=Query -WITH '< Server: nginx -< Date: Tue, 22 Jan 2019 00:26:14 GMT -< Content-Type: text/html; charset=UTF-8 -< Connection: keep-alive -' AS s -SELECT extractAllGroups(s, '< ([\\w\\-]+): ([^\\r\\n]+)'); -``` - -```response title=Response -[['服务器','nginx'],['日期','Tue, 22 Jan 2019 00:26:14 GMT'],['内容类型','text/html; charset=UTF-8'],['连接方式','keep-alive']] -``` - - -## hasAllTokens - -引入版本:v25.10 - -类似于 [`hasAnyTokens`](#hasAnyTokens),但当 `needle` 字符串或数组中的所有 token 都能匹配 `input` 字符串时返回 1,否则返回 0。如果 `input` 是一列,则返回所有满足该条件的行。 - -:::note -为获得最佳性能,应为列 `input` 定义 [text index](../../engines/table-engines/mergetree-family/invertedindexes)。 -如果未定义 text index,该函数将对整列执行穷举扫描,其速度比使用索引查询慢几个数量级。 -::: - -在搜索之前,函数会对以下内容进行分词(tokenize): - -* `input` 参数(始终如此),以及 -* `needle` 参数(如果以 [String](../../sql-reference/data-types/string.md) 形式给出), - 使用为 text index 指定的 tokenizer。 - 如果该列未定义 text index,则改用 `splitByNonAlpha` tokenizer。 - 如果 `needle` 参数的类型为 [Array(String)](../../sql-reference/data-types/array.md),则数组中的每个元素都被视为一个 token,不再进行额外的分词。 - -重复的 token 会被忽略。 -例如,needles = ['ClickHouse', 'ClickHouse'] 与 ['ClickHouse'] 被视为相同。 - -**语法** - -```sql -hasAllTokens(input, needles) -``` - -**别名**: `hasAllToken` - -**参数** - -* `input` — 输入列。[`String`](/sql-reference/data-types/string) 或 [`FixedString`](/sql-reference/data-types/fixedstring) 或 [`Array(String)`](/sql-reference/data-types/array) 或 [`Array(FixedString)`](/sql-reference/data-types/array) -* `needles` — 要查找的标记(token)。最多支持 64 个标记。[`String`](/sql-reference/data-types/string) 或 [`Array(String)`](/sql-reference/data-types/array) - -**返回值** - -如果所有标记都匹配,则返回 1,否则返回 0。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**字符串列的使用示例** - -```sql title=Query -CREATE TABLE table ( - id UInt32, - msg String, - INDEX idx(msg) TYPE text(tokenizer = splitByString(['()', '\\'])) -) -ENGINE = MergeTree -ORDER BY id; - -INSERT INTO table VALUES (1, '()a,\\bc()d'), (2, '()\\a()bc\\d'), (3, ',()a\\,bc,(),d,'); - -SELECT count() FROM table WHERE hasAllTokens(msg, 'a\\d()'); -``` - -```response title=Response -┌─count()─┐ -│ 1 │ -└─────────┘ -``` - -**指定在数组中按原样(不分词)搜索的字符串** - -```sql title=Query -SELECT count() FROM table WHERE hasAllTokens(msg, ['a', 'd']); -``` - -```response title=Response -┌─count()─┐ -│ 1 │ -└─────────┘ -``` - -**使用 `tokens` 函数生成 needle** - -```sql title=Query -SELECT count() FROM table WHERE hasAllTokens(msg, tokens('a()d', 'splitByString', ['()', '\\'])); -``` - -```response title=Response -┌─count()─┐ -│ 1 │ -└─────────┘ -``` - -**数组列和 Map 列的使用示例** - -```sql title=Query -CREATE TABLE log ( - id UInt32, - tags Array(String), - attributes Map(String, String), - INDEX idx_tags (tags) TYPE text(tokenizer = splitByNonAlpha), - INDEX idx_attributes_keys mapKeys(attributes) TYPE text(tokenizer = array), - INDEX idx_attributes_vals mapValues(attributes) TYPE text(tokenizer = array) -) -ENGINE = MergeTree -ORDER BY id; - -INSERT INTO log VALUES - (1, ['clickhouse', 'clickhouse cloud'], {'address': '192.0.0.1', 'log_level': 'INFO'}), - (2, ['chdb'], {'embedded': 'true', 'log_level': 'DEBUG'}); -``` - -```response title=Response -``` - -**包含数组列的示例** - -```sql title=Query -SELECT count() FROM log WHERE hasAllTokens(tags, 'clickhouse'); -``` - -```response title=Response -┌─count()─┐ -│ 1 │ -└─────────┘ -``` - -**mapKeys 示例** - -```sql title=Query -SELECT count() FROM log WHERE hasAllTokens(mapKeys(attributes), ['address', 'log_level']); -``` - - -```response title=Response -┌─count()─┐ -│ 1 │ -└─────────┘ -``` - -**mapValues 示例** - -```sql title=Query -SELECT count() FROM log WHERE hasAllTokens(mapValues(attributes), ['192.0.0.1', 'DEBUG']); -``` - -```response title=Response -┌─count()─┐ -│ 0 │ -└─────────┘ -``` - - -## hasAnyTokens - -引入于:v25.10 - -如果 `needle` 字符串或数组中至少有一个 token 与 `input` 字符串匹配,则返回 1,否则返回 0。若 `input` 是一列,则返回满足该条件的所有行。 - -:::note -为了获得最佳性能,应为列 `input` 定义[文本索引](../../engines/table-engines/mergetree-family/invertedindexes)。 -如果未定义文本索引,该函数将对整列执行暴力扫描,其速度相比索引查询会慢几个数量级。 -::: - -在执行搜索之前,函数会对以下内容进行 token 化(分词): - -* `input` 参数(始终如此),以及 -* `needle` 参数(如果以 [String](../../sql-reference/data-types/string.md) 形式给出), - 使用为该文本索引指定的 tokenizer。 - 如果该列未定义文本索引,则会改用 `splitByNonAlpha` tokenizer。 - 如果 `needle` 参数的类型为 [Array(String)](../../sql-reference/data-types/array.md),则数组中的每个元素都被视为一个 token——不会再进行额外的 token 化处理。 - -重复的 token 会被忽略。 -例如,['ClickHouse', 'ClickHouse'] 与 ['ClickHouse'] 被视为相同。 - -**语法** - -```sql -hasAnyTokens(input, needles) -``` - -**别名**: `hasAnyToken` - -**参数** - -* `input` — 输入列。[`String`](/sql-reference/data-types/string) 或 [`FixedString`](/sql-reference/data-types/fixedstring) 或 [`Array(String)`](/sql-reference/data-types/array) 或 [`Array(FixedString)`](/sql-reference/data-types/array) -* `needles` — 要搜索的 token。最多支持 64 个 token。[`String`](/sql-reference/data-types/string) 或 [`Array(String)`](/sql-reference/data-types/array) - -**返回值** - -如果至少存在一个匹配,则返回 `1`,否则返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**字符串列的用法示例** - -```sql title=Query -CREATE TABLE table ( - id UInt32, - msg String, - INDEX idx(msg) TYPE text(tokenizer = splitByString(['()', '\\'])) -) -ENGINE = MergeTree -ORDER BY id; - -INSERT INTO table VALUES (1, '()a,\\bc()d'), (2, '()\\a()bc\\d'), (3, ',()a\\,bc,(),d,'); - -SELECT count() FROM table WHERE hasAnyTokens(msg, 'a\\d()'); -``` - -```response title=Response -┌─count()─┐ -│ 3 │ -└─────────┘ -``` - -**在数组中按原样(不进行分词)指定要搜索的字符串集合** - -```sql title=Query -SELECT count() FROM table WHERE hasAnyTokens(msg, ['a', 'd']); -``` - -```response title=Response -┌─count()─┐ -│ 3 │ -└─────────┘ -``` - -**使用 `tokens` 函数生成 needle** - -```sql title=Query -SELECT count() FROM table WHERE hasAnyTokens(msg, tokens('a()d', 'splitByString', ['()', '\\'])); -``` - -```response title=Response -┌─count()─┐ -│ 3 │ -└─────────┘ -``` - -**Array 和 Map 列的用法示例** - -```sql title=Query -CREATE TABLE log ( - id UInt32, - tags Array(String), - attributes Map(String, String), - INDEX idx_tags (tags) TYPE text(tokenizer = splitByNonAlpha), - INDEX idx_attributes_keys mapKeys(attributes) TYPE text(tokenizer = array), - INDEX idx_attributes_vals mapValues(attributes) TYPE text(tokenizer = array) -) -ENGINE = MergeTree -ORDER BY id; - -INSERT INTO log VALUES - (1, ['clickhouse', 'clickhouse cloud'], {'address': '192.0.0.1', 'log_level': 'INFO'}), - (2, ['chdb'], {'embedded': 'true', 'log_level': 'DEBUG'}); -``` - -```response title=Response -``` - -**数组列示例** - -```sql title=Query -SELECT count() FROM log WHERE hasAnyTokens(tags, 'clickhouse'); -``` - -```response title=Response -┌─count()─┐ -│ 1 │ -└─────────┘ -``` - -**mapKeys 示例** - -```sql title=Query -SELECT count() FROM log WHERE hasAnyTokens(mapKeys(attributes), ['address', 'log_level']); -``` - - -```response title=Response -┌─count()─┐ -│ 2 │ -└─────────┘ -``` - -**`mapValues` 示例** - -```sql title=Query -SELECT count() FROM log WHERE hasAnyTokens(mapValues(attributes), ['192.0.0.1', 'DEBUG']); -``` - -```response title=Response -┌─count()─┐ -│ 2 │ -└─────────┘ -``` - - -## hasSubsequence - -引入于:v23.7 - -检查 needle 是否是 haystack 的子序列。 -字符串的子序列是指:通过从另一个字符串中删除某些或不删除字符,且不改变剩余字符顺序而得到的序列。 - -**语法** - -```sql -hasSubsequence(haystack, needle) -``` - -**参数** - -* `haystack` — 要在其中搜索子序列的字符串。[`String`](/sql-reference/data-types/string) -* `needle` — 要搜索的子序列。[`String`](/sql-reference/data-types/string) - -**返回值** - -如果 `needle` 是 `haystack` 的子序列,则返回 `1`,否则返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**基本子序列检查** - -```sql title=Query -SELECT hasSubsequence('Hello World', 'HlWrd') -``` - -```response title=Response -┌─hasSubsequence('Hello World', 'HlWrd')─┐ -│ 1 │ -└────────────────────────────────────────┘ -``` - -**未找到子序列** - -```sql title=Query -SELECT hasSubsequence('Hello World', 'xyz') -``` - -```response title=Response -┌─hasSubsequence('Hello World', 'xyz')─┐ -│ 0 │ -└──────────────────────────────────────┘ -``` - - -## hasSubsequenceCaseInsensitive - -自 v23.7 引入 - -与 [`hasSubsequence`](#hasSubsequence) 类似,但执行不区分大小写的搜索。 - -**语法** - -```sql -hasSubsequenceCaseInsensitive(haystack, needle) -``` - -**参数** - -* `haystack` — 执行搜索的字符串。[`String`](/sql-reference/data-types/string) -* `needle` — 要搜索的子序列。[`String`](/sql-reference/data-types/string) - -**返回值** - -如果 `needle` 是 `haystack` 的子序列,则返回 1,否则返回 0。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT hasSubsequenceCaseInsensitive('garbage', 'ARG'); -``` - -```response title=Response -┌─hasSubsequenceCaseInsensitive('garbage', 'ARG')─┐ -│ 1 │ -└─────────────────────────────────────────────────┘ -``` - - -## hasSubsequenceCaseInsensitiveUTF8 - -引入版本:v23.7 - -与 [`hasSubsequenceUTF8`](#hasSubsequenceUTF8) 类似,但进行不区分大小写的搜索。 - -**语法** - -```sql -hasSubsequenceCaseInsensitiveUTF8(haystack, needle) -``` - -**参数** - -* `haystack` — 执行搜索的 UTF-8 编码字符串。[`String`](/sql-reference/data-types/string) -* `needle` — 要搜索的 UTF-8 编码子序列字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -如果 needle 是 haystack 的子序列,则返回 1,否则返回 0。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT hasSubsequenceCaseInsensitiveUTF8('ClickHouse - столбцовая система управления базами данных', 'СИСТЕМА'); -``` - -```response title=Response -┌─hasSubsequen⋯ 'СИСТЕМА')─┐ -│ 1 │ -└──────────────────────────┘ -``` - - -## hasSubsequenceUTF8 - -自 v23.7 起引入 - -类似于 [`hasSubsequence`](/sql-reference/functions/string-search-functions#hasSubsequence),但假设 haystack 和 needle 是 UTF-8 编码的字符串。 - -**语法** - -```sql -hasSubsequenceUTF8(主串, 子串) -``` - -**参数** - -* `haystack` — 要在其中搜索的字符串。[`String`](/sql-reference/data-types/string) -* `needle` — 要搜索的子序列。[`String`](/sql-reference/data-types/string) - -**返回值** - -如果 `needle` 是 `haystack` 的子序列,则返回 `1`,否则返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT hasSubsequenceUTF8('картошка', 'кошка'); -``` - -```response title=Response -┌─hasSubsequen⋯', 'кошка')─┐ -│ 1 │ -└──────────────────────────┘ -``` - -**不匹配子序列** - -```sql title=Query -SELECT hasSubsequenceUTF8('картошка', 'апельсин'); -``` - -```response title=Response -┌─hasSubsequen⋯'апельсин')─┐ -│ 0 │ -└──────────────────────────┘ -``` - - -## hasToken - -引入于:v20.1 - -检查给定的 token 是否存在于目标字符串中。 - -token 定义为由连续字符 `[0-9A-Za-z_]` 组成的最长子序列,即数字、ASCII 字母和下划线。 - -**语法** - -```sql -hasToken(haystack, token) -``` - -**参数** - -* `haystack` — 被搜索的字符串。[`String`](/sql-reference/data-types/string) -* `token` — 要查找的令牌。[`const String`](/sql-reference/data-types/string) - -**返回值** - -如果找到令牌则返回 `1`,否则返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**令牌搜索** - -```sql title=Query -SELECT hasToken('clickhouse test', 'test') -``` - -```response title=Response -┌─hasToken('clickhouse test', 'test')─┐ -│ 1 │ -└─────────────────────────────────────┘ -``` - - -## hasTokenCaseInsensitive - -引入版本:v - -在 haystack 中使用 tokenbf_v1 索引对 needle 执行不区分大小写的查找。 - -**语法** - -```sql -``` - -**参数** - -* 无。 - -**返回值** - -**示例** - - -## hasTokenCaseInsensitiveOrNull - -引入版本:v - -使用 `tokenbf_v1` 索引在 haystack 中对 needle 执行不区分大小写的查找。如果 needle 格式不正确,则返回 null。 - -**语法** - -```sql -``` - -**参数** - -* 无。 - -**返回值** - -**示例** - - -## hasTokenOrNull - -引入版本:v20.1 - -类似于 [`hasToken`](#hasToken),但在 token 非法时返回 null。 - -**语法** - -```sql -hasTokenOrNull(haystack, token) -``` - -**参数** - -* `haystack` — 要搜索的字符串。必须是常量字符串。[`String`](/sql-reference/data-types/string) -* `token` — 要搜索的标记。[`const String`](/sql-reference/data-types/string) - -**返回值** - -如果找到标记则返回 `1`,否则返回 `0`,若标记格式不正确则返回 null。[`Nullable(UInt8)`](/sql-reference/data-types/nullable) - -**示例** - -**使用示例** - -```sql title=Query -SELECT hasTokenOrNull('apple banana cherry', 'ban ana'); -``` - -```response title=Response -┌─hasTokenOrNu⋯ 'ban ana')─┐ -│ ᴺᵁᴸᴸ │ -└──────────────────────────┘ -``` - - -## ilike - -自 v20.6 版本引入 - -类似于 [`like`](#like),但执行不区分大小写的匹配。 - -**语法** - -```sql -ilike(haystack, pattern) --- haystack ILIKE pattern -``` - -**参数** - -* `haystack` — 执行搜索的字符串。[`String`](/sql-reference/data-types/string) 或 [`FixedString`](/sql-reference/data-types/fixedstring) -* `pattern` — 要匹配的 LIKE 模式。[`String`](/sql-reference/data-types/string) - -**返回值** - -如果字符串符合 LIKE 模式(不区分大小写),则返回 `1`,否则返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT ilike('ClickHouse', '%house%'); -``` - -```response title=Response -┌─ilike('ClickHouse', '%house%')─┐ -│ 1 │ -└────────────────────────────────┘ -``` - - -## like - -Introduced in: v1.1 - -返回字符串 `haystack` 是否匹配 `LIKE` 表达式 `pattern`。 - -一个 `LIKE` 表达式可以包含普通字符以及以下元符号: - -* `%` 表示任意数量的任意字符(包括零个字符)。 -* `_` 表示单个任意字符。 -* `\` 用于转义字面量 `%`、`_` 和 `\`。 - -匹配基于 UTF-8 编码,例如 `_` 可以匹配 Unicode 码位 `¥`,其在 UTF-8 中由两个字节表示。 - -如果 haystack 或 `LIKE` 表达式不是合法的 UTF-8,行为未定义。 - -不会自动执行 Unicode 归一化,你可以使用 `normalizeUTF8*` 函数来完成这一操作。 - -要匹配字面量 `%`、`_` 和 `\`(它们是 `LIKE` 元字符),请在前面加上反斜杠:`\%`、`\_` 和 `\\`。 -当前缀的字符不是 `%`、`_` 或 `\` 时,反斜杠会失去其特殊含义(即被按字面量解释)。 - -:::note -ClickHouse 要求字符串中的反斜杠[也需要被转义](../syntax.md#string),因此实际上你需要写成 `\\%`、`\\_` 和 `\\\\`。 -::: - -对于形如 `%needle%` 的 `LIKE` 表达式,该函数的速度与 `position` 函数相同。 -所有其他 LIKE 表达式在内部都会被转换为正则表达式,并以与函数 `match` 类似的性能执行。 - -**Syntax** - -```sql -like(haystack, pattern) --- haystack LIKE 模式字符串 -``` - -**参数** - -* `haystack` — 进行搜索的字符串。[`String`](/sql-reference/data-types/string) 或 [`FixedString`](/sql-reference/data-types/fixedstring) -* `pattern` — 要匹配的 `LIKE` 模式。可以包含 `%`(匹配任意数量的字符)、`_`(匹配单个字符)以及用于转义的 `\`。[`String`](/sql-reference/data-types/string) - -**返回值** - -如果字符串与 `LIKE` 模式匹配,则返回 `1`,否则返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT like('ClickHouse', '%House'); -``` - -```response title=Response -┌─like('ClickHouse', '%House')─┐ -│ 1 │ -└──────────────────────────────┘ -``` - -**单个字符通配符** - -```sql title=Query -SELECT like('ClickHouse', 'Click_ouse'); -``` - -```response title=Response -┌─like('ClickH⋯lick_ouse')─┐ -│ 1 │ -└──────────────────────────┘ -``` - -**非匹配模式** - -```sql title=Query -SELECT like('ClickHouse', '%SQL%'); -``` - -```response title=Response -┌─like('ClickHouse', '%SQL%')─┐ -│ 0 │ -└─────────────────────────────┘ -``` - - -## locate - -引入版本:v18.16 - -与 [`position`](#position) 相似,但参数 `haystack` 和 `needle` 的顺序相反。 - -:::note 与版本相关的行为 -此函数的行为取决于 ClickHouse 的版本: - -* 在 v24.3 之前的版本中,`locate` 是函数 `position` 的别名,并接受参数 `(haystack, needle[, start_pos])`。 -* 在 v24.3 及之后的版本中,`locate` 是一个独立函数(用于更好地兼容 MySQL),并接受参数 `(needle, haystack[, start_pos])`。 - 可以通过设置 `function_locate_has_mysql_compatible_argument_order = false` 来恢复之前的行为。 - ::: - -**语法** - -```sql -locate(needle, haystack[, start_pos]) -``` - -**参数** - -* `needle` — 要搜索的子字符串。[`String`](/sql-reference/data-types/string) -* `haystack` — 执行搜索的字符串。[`String`](/sql-reference/data-types/string) 或 [`Enum`](/sql-reference/data-types/enum) -* `start_pos` — 可选。在 `haystack` 中开始搜索的起始位置(从 1 开始计数)。[`UInt`](/sql-reference/data-types/int-uint) - -**返回值** - -如果找到子字符串,则返回其起始位置(按字节计算,从 1 开始计数);如果未找到子字符串,则返回 `0`。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**基本用法** - -```sql title=Query -SELECT locate('ca', 'abcabc') -``` - -```response title=Response -┌─locate('ca', 'abcabc')─┐ -│ 3 │ -└────────────────────────┘ -``` - - -## match - -引入版本:v1.1 - -检查给定字符串是否与提供的正则表达式模式匹配。 - -此函数使用 RE2 正则表达式库。有关支持的语法,请参阅 [re2](https://github.com/google/re2/wiki/Syntax)。 - -匹配在假定 UTF-8 编码的前提下进行,例如 `¥` 在内部使用两个字节,但在匹配时会被视为单个码点。 -正则表达式中不得包含 NULL 字节。 -如果待匹配字符串或模式不是有效的 UTF-8,行为未定义。 - -与 RE2 的默认行为不同,`.` 会匹配换行符。要禁用此行为,请在模式前加上 `(?-s)`。 - -模式在两端会自动加上锚点(就好像模式以 `^` 开头并以 `$` 结尾)。 - -如果你只想查找子串,可以使用函数 [`like`](#like) 或 [`position`](#position) —— 它们的执行效率比本函数高得多。 - -替代运算符语法:`haystack REGEXP pattern`。 - -**语法** - -```sql -match(haystack, pattern) -``` - -**别名**: `REGEXP_MATCHES` - -**参数** - -* `haystack` — 要在其中搜索模式的字符串。[`String`](/sql-reference/data-types/string) -* `pattern` — 正则表达式模式。[`const String`](/sql-reference/data-types/string) - -**返回值** - -当模式匹配时返回 `1`,否则返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**基本模式匹配** - -```sql title=Query -SELECT match('Hello World', 'Hello.*') -``` - -```response title=Response -┌─match('Hello World', 'Hello.*')─┐ -│ 1 │ -└─────────────────────────────────┘ -``` - -**模式不匹配** - -```sql title=Query -SELECT match('Hello World', 'goodbye.*') -``` - -```response title=Response -┌─match('Hello World', 'goodbye.*')─┐ -│ 0 │ -└───────────────────────────────────┘ -``` - - -## multiFuzzyMatchAllIndices - -引入版本:v20.1 - -类似于 [`multiFuzzyMatchAny`](#multiFuzzyMatchAny),但返回一个数组,包含所有在固定[编辑距离](https://en.wikipedia.org/wiki/Edit_distance)内与被搜索字符串匹配的索引,顺序不定。 - -**语法** - -```sql -multiFuzzyMatchAllIndices(干草堆, 距离, [模式1, 模式2, ..., 模式N]) -``` - -**参数** - -* `haystack` — 执行搜索的字符串。[`String`](/sql-reference/data-types/string) -* `distance` — 模糊匹配所允许的最大编辑距离。[`UInt8`](/sql-reference/data-types/int-uint) -* `pattern` — 要匹配的模式数组。[`Array(String)`](/sql-reference/data-types/array) - -**返回值** - -返回一个数组,包含所有在指定编辑距离内与 `haystack` 匹配的索引(从 1 开始),顺序不固定。如果未找到匹配项,则返回空数组。[`Array(UInt64)`](/sql-reference/data-types/array) - -**示例** - -**使用示例** - -```sql title=Query -SELECT multiFuzzyMatchAllIndices('ClickHouse', 2, ['ClickHouse', 'ClckHouse', 'ClickHose', 'House']); -``` - -```response title=Response -┌─multiFuzzyMa⋯, 'House'])─┐ -│ [3,1,4,2] │ -└──────────────────────────┘ -``` - - -## multiFuzzyMatchAny - -引入自:v20.1 - -与 [`multiMatchAny`](#multiMatchAny) 类似,但如果任意模式在给定的常量[编辑距离](https://en.wikipedia.org/wiki/Edit_distance)内与目标字符串匹配成功,则返回 1。 -该函数依赖于 [hyperscan](https://intel.github.io/hyperscan/dev-reference/compilation.html#approximate-matching) 库中的实验性功能,在某些极端情况下可能较慢。 -其性能取决于编辑距离的取值以及所使用的模式,但始终比非模糊版本开销更大。 - -:::note -由于 hyperscan 的限制,`multiFuzzyMatch*()` 函数系列不支持 UTF-8 正则表达式(它将其视为字节序列)。 -::: - -**语法** - -```sql -multiFuzzyMatchAny(草堆, 距离, [模式1, 模式2, ..., 模式N]) -``` - -**参数** - -* `haystack` — 执行搜索的字符串。[`String`](/sql-reference/data-types/string) -* `distance` — 模糊匹配允许的最大编辑距离。[`UInt8`](/sql-reference/data-types/int-uint) -* `pattern` — 可选。由要匹配的模式组成的数组。[`Array(String)`](/sql-reference/data-types/array) - -**返回值** - -如果任一模式在指定编辑距离内与 `haystack` 匹配,则返回 `1`,否则返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT multiFuzzyMatchAny('ClickHouse', 2, ['ClickHouse', 'ClckHouse', 'ClickHose']); -``` - -```response title=Response -┌─multiFuzzyMa⋯lickHose'])─┐ -│ 1 │ -└──────────────────────────┘ -``` - - -## multiFuzzyMatchAnyIndex - -引入于:v20.1 - -与 [`multiFuzzyMatchAny`](#multiFuzzyMatchAny) 类似,但返回在给定固定[编辑距离](https://en.wikipedia.org/wiki/Edit_distance)内与 `haystack` 匹配的任意索引。 - -**语法** - -```sql -multiFuzzyMatchAnyIndex(haystack, distance, [pattern1, pattern2, ..., patternn]) -``` - -**参数** - -* `haystack` — 进行搜索的字符串。[`String`](/sql-reference/data-types/string) -* `distance` — 用于模糊匹配的最大编辑距离。[`UInt8`](/sql-reference/data-types/int-uint) -* `pattern` — 用于匹配的模式数组。[`Array(String)`](/sql-reference/data-types/array) - -**返回值** - -返回在指定编辑距离内,与 `haystack` 匹配的任意一个模式的索引(从 1 开始),否则返回 `0`。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT multiFuzzyMatchAnyIndex('ClickHouse', 2, ['ClckHouse', 'ClickHose', 'ClickHouse']); -``` - -```response title=Response -┌─multiFuzzyMa⋯ickHouse'])─┐ -│ 2 │ -└──────────────────────────┘ -``` - - -## multiMatchAllIndices - -引入于:v20.1 - -类似于 [`multiMatchAny`](#multiMatchAny),但返回在 haystack 中匹配的所有索引(顺序任意)组成的数组。 - -**语法** - -```sql -multiMatchAllIndices(干草堆, [模式1, 模式2, ..., 模式n]) -``` - -**参数** - -* `haystack` — 要在其中执行搜索的字符串。[`String`](/sql-reference/data-types/string) -* `pattern` — 用于匹配的正则表达式模式。[`String`](/sql-reference/data-types/string) - -**返回值** - -一个数组,包含在 `haystack` 中与 `pattern` 匹配的所有索引位置(从 1 开始,顺序任意)。如果没有匹配项,则返回空数组。[`Array(UInt64)`](/sql-reference/data-types/array) - -**示例** - -**使用示例** - -```sql title=Query -SELECT multiMatchAllIndices('ClickHouse', ['[0-9]', 'House', 'Click', 'ouse']); -``` - -```response title=Response -┌─multiMatchAl⋯', 'ouse'])─┐ -│ [3, 2, 4] │ -└──────────────────────────┘ -``` - - -## multiMatchAny - -引入版本:v20.1 - -用于检查在多个正则表达式模式中,是否至少有一个与目标字符串匹配。 - -如果你只想在字符串中搜索多个子串,可以改用函数 [`multiSearchAny`](#multiSearchAny) —— 它的运行速度比本函数快得多。 - -**语法** - -```sql -multiMatchAny(干草堆, 模式1[, 模式2, ...]) -``` - -**参数** - -* `haystack` — 用于搜索模式的字符串。[`String`](/sql-reference/data-types/string) -* `pattern1[, pattern2, ...]` — 由一个或多个正则表达式模式组成的数组。[`Array(String)`](/sql-reference/data-types/array) - -**返回值** - -如果任意一个模式匹配则返回 `1`,否则返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**多模式匹配** - -```sql title=Query -SELECT multiMatchAny('Hello World', ['Hello.*', 'foo.*']) -``` - -```response title=Response -┌─multiMatchAny('Hello World', ['Hello.*', 'foo.*'])─┐ -│ 1 │ -└────────────────────────────────────────────────────┘ -``` - -**没有匹配的模式** - -```sql title=Query -SELECT multiMatchAny('Hello World', ['goodbye.*', 'foo.*']) -``` - -```response title=Response -┌─multiMatchAny('Hello World', ['goodbye.*', 'foo.*'])─┐ -│ 0 │ -└──────────────────────────────────────────────────────┘ -``` - - -## multiMatchAnyIndex - -自 v20.1 引入 - -与 [`multiMatchAny`](#multiMatchAny) 类似,但返回在 haystack 中匹配到的任意索引。 - -**语法** - -```sql -multiMatchAnyIndex(haystack, [pattern1, pattern2, ..., patternn]) -``` - -**参数** - -* `haystack` — 执行查找的字符串。[`String`](/sql-reference/data-types/string) -* `pattern` — 要进行匹配的正则表达式数组。[`Array(String)`](/sql-reference/data-types/array) - -**返回值** - -返回第一个发生匹配的模式的索引(从 1 开始),如果未找到匹配则返回 0。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT multiMatchAnyIndex('ClickHouse', ['[0-9]', 'House', 'Click']); -``` - -```response title=Response -┌─multiMatchAn⋯, 'Click'])─┐ -│ 3 │ -└──────────────────────────┘ -``` - - -## multiSearchAllPositions - -引入版本:v20.1 - -类似于 [`position`](#position),但会返回一个位置数组(以字节为单位,从 1 开始),用于表示多个 `needle` 子串在 `haystack` 字符串中的所有位置。 - -所有 `multiSearch*()` 函数最多只支持 2^8 个 `needle`。 - -**语法** - -```sql -multiSearchAllPositions(主串, 针1[, 针2, ...]) -``` - -**参数** - -* `haystack` — 执行搜索的字符串。[`String`](/sql-reference/data-types/string) -* `needle1[, needle2, ...]` — 要搜索的一个或多个子字符串组成的数组。[`Array(String)`](/sql-reference/data-types/array) - -**返回值** - -返回一个数组:如果找到子字符串,对应元素为从 1 开始计数的以字节为单位的起始位置;如果未找到子字符串,对应元素为 `0`。[`Array(UInt64)`](/sql-reference/data-types/array) - -**示例** - -**多子串搜索** - -```sql title=Query -SELECT multiSearchAllPositions('你好,世界!', ['你好', '!', '世界']) -``` - -```response title=Response -┌─multiSearchAllPositions('Hello, World!', ['hello', '!', 'world'])─┐ -│ [0,13,0] │ -└───────────────────────────────────────────────────────────────────┘ -``` - - -## multiSearchAllPositionsCaseInsensitive - -自 v20.1 引入 - -类似于 [`multiSearchAllPositions`](#multiSearchAllPositions),但会忽略大小写。 - -**语法** - -```sql -multiSearchAllPositionsCaseInsensitive(haystack, needle1[, needle2, ...]) -``` - -**参数** - -* `haystack` — 执行搜索的字符串。[`String`](/sql-reference/data-types/string) -* `needle1[, needle2, ...]` — 要搜索的一个或多个子字符串组成的数组。[`Array(String)`](/sql-reference/data-types/array) - -**返回值** - -返回一个数组,元素为子字符串的起始位置(以字节为单位,从 1 开始计数);如果未找到子字符串,则为 `0`。[`Array(UInt64)`](/sql-reference/data-types/array) - -**示例** - -**不区分大小写的多模式搜索** - -```sql title=Query -SELECT multiSearchAllPositionsCaseInsensitive('ClickHouse',['c','h']) -``` - -```response title=Response -┌─multiSearchA⋯['c', 'h'])─┐ -│ [1,6] │ -└──────────────────────────┘ -``` - - -## multiSearchAllPositionsCaseInsensitiveUTF8 - -引入于:v20.1 - -与 [`multiSearchAllPositionsUTF8`](#multiSearchAllPositionsUTF8) 类似,但忽略大小写。 - -**语法** - -```sql -multiSearchAllPositionsCaseInsensitiveUTF8(主串, [子串1, 子串2, ..., 子串N]) -``` - -**参数** - -* `haystack` — 执行搜索操作的 UTF-8 编码的字符串。[`String`](/sql-reference/data-types/string) -* `needle` — 要搜索的 UTF-8 编码子字符串数组。[`Array(String)`](/sql-reference/data-types/array) - -**返回值** - -返回一个数组,元素为子字符串的起始位置(按字节计算,从 1 开始计数)。如果未找到子字符串,则返回 0。[`Array`](/sql-reference/data-types/array) - -**示例** - -**不区分大小写的 UTF-8 搜索** - -```sql title=Query -SELECT multiSearchAllPositionsCaseInsensitiveUTF8('Здравствуй, мир!', ['здравствуй', 'МИР']); -``` - -```response title=Response -┌─multiSearchA⋯й', 'МИР'])─┐ -│ [1, 13] │ -└──────────────────────────┘ -``` - - -## multiSearchAllPositionsUTF8 - -引入版本:v20.1 - -与 [`multiSearchAllPositions`](#multiSearchAllPositions) 类似,但假设 `haystack` 和 `needle` 子串是 UTF-8 编码的字符串。 - -**语法** - -```sql -multiSearchAllPositionsUTF8(主串, 模式1[, 模式2, ...]) -``` - -**参数** - -* `haystack` — 执行搜索的 UTF-8 编码字符串。[`String`](/sql-reference/data-types/string) -* `needle1[, needle2, ...]` — UTF-8 编码的待搜索子字符串数组。[`Array(String)`](/sql-reference/data-types/array) - -**返回值** - -返回一个数组:如果找到子字符串,元素为从 1 开始按字节计数的起始位置;如果未找到子字符串,则为 `0`。[`Array`](/sql-reference/data-types/array) - -**示例** - -**UTF-8 多重搜索** - -```sql title=Query -SELECT multiSearchAllPositionsUTF8('ClickHouse',['C','H']) -``` - -```response title=Response -┌─multiSearchAllPositionsUTF8('ClickHouse', ['C', 'H'])─┐ -│ [1,6] │ -└───────────────────────────────────────────────────────┘ -``` - - -## multiSearchAny - -自 v20.1 引入 - -检查在多个 needle 字符串中,是否至少有一个与 haystack 字符串匹配。 - -函数 [`multiSearchAnyCaseInsensitive`](#multiSearchAnyCaseInsensitive)、[`multiSearchAnyUTF8`](#multiSearchAnyUTF8) 和 [`multiSearchAnyCaseInsensitiveUTF8`](#multiSearchAnyCaseInsensitiveUTF8) 提供该函数的不区分大小写和/或 UTF-8 变体。 - -**语法** - -```sql -multiSearchAny(干草堆, needle1[, needle2, ...]) -``` - -**参数** - -* `haystack` — 要执行搜索的字符串。[`String`](/sql-reference/data-types/string) -* `needle1[, needle2, ...]` — 由要搜索的子字符串组成的数组。[`Array(String)`](/sql-reference/data-types/array) - -**返回值** - -如果至少有一个匹配,则返回 `1`,否则返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**任意匹配搜索** - -```sql title=Query -SELECT multiSearchAny('ClickHouse',['C','H']) -``` - -```response title=Response -┌─multiSearchAny('ClickHouse', ['C', 'H'])─┐ -│ 1 │ -└──────────────────────────────────────────┘ -``` - - -## multiSearchAnyCaseInsensitive - -自 v20.1 起引入。 - -与 [multiSearchAny](#multiSearchAny) 类似,但忽略大小写。 - -**语法** - -```sql -multiSearchAnyCaseInsensitive(haystack, [needle1, needle2, ..., needleN]) -``` - -**参数** - -* `haystack` — 要在其中执行搜索的字符串。[`String`](/sql-reference/data-types/string) -* `needle` — 要搜索的子字符串。[`Array(String)`](/sql-reference/data-types/array) - -**返回值** - -如果存在至少一个不区分大小写的匹配,则返回 `1`,否则返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**不区分大小写的搜索** - -```sql title=Query -SELECT multiSearchAnyCaseInsensitive('ClickHouse',['c','h']) -``` - -```response title=Response -┌─multiSearchAnyCaseInsensitive('ClickHouse', ['c', 'h'])─┐ -│ 1 │ -└─────────────────────────────────────────────────────────┘ -``` - - -## multiSearchAnyCaseInsensitiveUTF8 - -自 v20.1 版本引入 - -与 [multiSearchAnyUTF8](#multiSearchAnyUTF8) 类似,但忽略大小写。 - -**语法** - -```sql -multiSearchAnyCaseInsensitiveUTF8(haystack, [needle1, needle2, ..., needleN]) -``` - -**参数** - -* `haystack` — 执行搜索的 UTF-8 编码字符串。[`String`](/sql-reference/data-types/string) -* `needle` — 要搜索的 UTF-8 编码子字符串数组。[`Array(String)`](/sql-reference/data-types/array) - -**返回值** - -如果存在至少一个不区分大小写的匹配,则返回 `1`;如果不存在这样的匹配,则返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**给定 UTF-8 字符串 'Здравствуйте',检查字符 'з'(小写)是否存在** - -```sql title=Query -SELECT multiSearchAnyCaseInsensitiveUTF8('Здравствуйте',['з']) -``` - -```response title=Response -┌─multiSearchA⋯те', ['з'])─┐ -│ 1 │ -└──────────────────────────┘ -``` - - -## multiSearchAnyUTF8 - -自 v20.1 引入 - -与 [multiSearchAny](#multiSearchAny) 类似,但假定 `haystack` 和 `needle` 这两个子串是 UTF-8 编码的字符串。 - -**语法** - -```sql -multiSearchAnyUTF8(haystack, [needle1, needle2, ..., needleN]) -``` - -**参数** - -* `haystack` — 执行搜索的 UTF-8 字符串。[`String`](/sql-reference/data-types/string) -* `needle` — 要搜索的 UTF-8 子字符串组成的数组。[`Array(String)`](/sql-reference/data-types/array) - -**返回值** - -如果至少存在一个匹配,则返回 `1`;否则(不存在任何匹配)返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**给定 “你好,世界”(“Hello, world”)这一 UTF-8 字符串,检查字符串中是否包含字符“你”或“界”** - -```sql title=Query -SELECT multiSearchAnyUTF8('你好,世界', ['你', '界']) -``` - -```response title=Response -┌─multiSearchA⋯你', '界'])─┐ -│ 1 │ -└──────────────────────────┘ -``` - - -## multiSearchFirstIndex - -引入版本:v20.1 - -在目标字符串中搜索多个子串(区分大小写),并返回首次匹配子串的从 1 开始的索引。 - -**语法** - -```sql -multiSearchFirstIndex(haystack, [needle1, needle2, ..., needleN]) -``` - -**参数** - -* `haystack` — 要在其中进行搜索的字符串。[`String`](/sql-reference/data-types/string) -* `needles` — 要搜索的字符串组成的数组。[`Array(String)`](/sql-reference/data-types/array) - -**返回值** - -返回在 `haystack` 中找到的、来自 `needles` 数组的第一个字符串在该数组中的索引(从 1 开始计数)。如果未找到任何字符串,则返回 0。搜索区分大小写。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT multiSearchFirstIndex('ClickHouse Database', ['Click', 'Database', 'Server']); -``` - -```response title=Response -┌─multiSearchF⋯ 'Server'])─┐ -│ 1 │ -└──────────────────────────┘ -``` - -**大小写敏感行为** - -```sql title=Query -SELECT multiSearchFirstIndex('ClickHouse Database', ['CLICK', 'Database', 'Server']); -``` - -```response title=Response -┌─multiSearchF⋯ 'Server'])─┐ -│ 2 │ -└──────────────────────────┘ -``` - -**未找到匹配结果** - -```sql title=Query -SELECT multiSearchFirstIndex('Hello World', ['goodbye', 'test']); -``` - -```response title=Response -┌─multiSearchF⋯', 'test'])─┐ -│ 0 │ -└──────────────────────────┘ -``` - - -## multiSearchFirstIndexCaseInsensitive - -引入于:v20.1 - -返回在字符串 `haystack` 中找到的最左侧 needle_i 的索引 `i`(从 1 开始),否则返回 0。 -不区分大小写。 - -**语法** - -```sql -multiSearchFirstIndexCaseInsensitive(主串, [子串1, 子串2, ..., 子串N] -``` - -**参数** - -* `haystack` — 执行搜索的字符串。[`String`](/sql-reference/data-types/string) -* `needle` — 要搜索的子字符串数组。[`Array(String)`](/sql-reference/data-types/array) - -**返回值** - -返回最左侧找到的 `needle` 的索引(从 1 开始)。如果没有匹配则返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT multiSearchFirstIndexCaseInsensitive('hElLo WoRlD', ['World', 'Hello']); -``` - -```response title=Response -┌─multiSearchF⋯, 'Hello'])─┐ -│ 1 │ -└──────────────────────────┘ -``` - - -## multiSearchFirstIndexCaseInsensitiveUTF8 - -引入版本:v20.1 - -在一个字符串中,以支持 UTF-8 编码的大小写不敏感方式搜索多个子串,并返回首次匹配子串的从 1 开始计数的索引。 - -**语法** - -```sql -multiSearchFirstIndexCaseInsensitiveUTF8(haystack, [needle1, needle2, ..., needleN]) -``` - -**参数** - -* `haystack` — 要在其中搜索的字符串。[`String`](/sql-reference/data-types/string) -* `needles` — 要搜索的字符串数组。[`Array(String)`](/sql-reference/data-types/array) - -**返回值** - -返回在 `haystack` 中找到的第一个 `needle` 在 `needles` 数组中的从 1 开始的索引位置。如果未找到任何 `needle`,则返回 0。搜索不区分大小写,并按 UTF-8 字符编码进行。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT multiSearchFirstIndexCaseInsensitiveUTF8('ClickHouse Database', ['CLICK', 'data', 'server']); -``` - -```response title=Response -┌─multiSearchF⋯ 'server'])─┐ -│ 1 │ -└──────────────────────────┘ -``` - -**UTF-8 字符大小写处理** - -```sql title=Query -SELECT multiSearchFirstIndexCaseInsensitiveUTF8('Привет Мир', ['мир', 'ПРИВЕТ']); -``` - -```response title=Response -┌─multiSearchF⋯ 'ПРИВЕТ'])─┐ -│ 1 │ -└──────────────────────────┘ -``` - -**未找到匹配结果** - -```sql title=Query -SELECT multiSearchFirstIndexCaseInsensitiveUTF8('Hello World', ['goodbye', 'test']); -``` - -```response title=Response -┌─multiSearchF⋯', 'test'])─┐ -│ 0 │ -└──────────────────────────┘ -``` - - -## multiSearchFirstIndexUTF8 - -引入版本:v20.1 - -返回在字符串 `haystack` 中最左侧被找到的 needle_i 对应的索引 `i`(从 1 开始),否则返回 0。 -假设 `haystack` 和 `needle` 为 UTF-8 编码的字符串。 - -**语法** - -```sql -multiSearchFirstIndexUTF8(主串, [子串1, 子串2, ..., 子串N]) -``` - -**参数** - -* `haystack` — 被搜索的 UTF-8 字符串。[`String`](/sql-reference/data-types/string) -* `needle` — 要搜索的 UTF-8 子字符串数组。[`Array(String)`](/sql-reference/data-types/array) - -**返回值** - -返回最左边匹配到的 `needle` 的索引(从 1 开始计数)。如果没有匹配,则返回 0。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT multiSearchFirstIndexUTF8('Здравствуйте мир', ['мир', 'здравствуйте']); -``` - -```response title=Response -┌─multiSearchF⋯вствуйте'])─┐ -│ 1 │ -└──────────────────────────┘ -``` - - -## multiSearchFirstPosition - -自 v20.1 引入 - -类似于 [`position`](#position),但返回 `haystack` 字符串中与多个 `needle` 字符串中任意一个匹配的最左侧偏移量。 - -函数 [`multiSearchFirstPositionCaseInsensitive`](#multiSearchFirstPositionCaseInsensitive)、[`multiSearchFirstPositionUTF8`](#multiSearchFirstPositionUTF8) 和 [`multiSearchFirstPositionCaseInsensitiveUTF8`](#multiSearchFirstPositionCaseInsensitiveUTF8) 提供该函数的不区分大小写和/或 UTF-8 版本。 - -**语法** - -```sql -multiSearchFirstPosition(haystack, needle1[, needle2, ...]) -``` - -**参数** - -* `haystack` — 执行搜索的字符串。[`String`](/sql-reference/data-types/string) -* `needle1[, needle2, ...]` — 由一个或多个要搜索的子字符串组成的数组。[`Array(String)`](/sql-reference/data-types/array) - -**返回值** - -返回在 `haystack` 字符串中,与任一 `needle` 字符串匹配的最左侧偏移量;如果没有匹配,则返回 `0`。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**从首个位置开始搜索** - -```sql title=Query -SELECT multiSearchFirstPosition('Hello World',['llo', 'Wor', 'ld']) -``` - -```response title=Response -┌─multiSearchFirstPosition('Hello World', ['llo', 'Wor', 'ld'])─┐ -│ 3 │ -└───────────────────────────────────────────────────────────────┘ -``` - - -## multiSearchFirstPositionCaseInsensitive - -自 v20.1 起引入 - -与 [multiSearchFirstPosition](#multiSearchFirstPosition) 类似,但不区分大小写。 - -**语法** - -```sql -multiSearchFirstPositionCaseInsensitive(haystack, [needle1, needle2, ..., needleN]) -``` - -**参数** - -* `haystack` — 执行搜索的字符串。[`String`](/sql-reference/data-types/string) -* `needle` — 要搜索的子串数组。[`Array(String)`](/sql-reference/data-types/array) - -**返回值** - -返回 `haystack` 字符串中与任一 `needle` 字符串匹配的最左侧偏移量。如果没有匹配,则返回 `0`。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**首个匹配位置(不区分大小写)** - -```sql title=Query -SELECT multiSearchFirstPositionCaseInsensitive('HELLO WORLD',['wor', 'ld', 'ello']) -``` - -```response title=Response -┌─multiSearchFirstPositionCaseInsensitive('HELLO WORLD', ['wor', 'ld', 'ello'])─┐ -│ 2 │ -└───────────────────────────────────────────────────────────────────────────────┘ -``` - - -## multiSearchFirstPositionCaseInsensitiveUTF8 - -引入版本:v20.1 - -与 [multiSearchFirstPosition](#multiSearchFirstPosition) 类似,但假定 `haystack` 和 `needle` 为 UTF-8 字符串,并进行不区分大小写的匹配。 - -**语法** - -```sql -multiSearchFirstPositionCaseInsensitiveUTF8(haystack, [needle1, needle2, ..., needleN]) -``` - -**参数** - -* `haystack` — 执行搜索的 UTF-8 字符串。[`String`](/sql-reference/data-types/string) -* `needle` — 要搜索的 UTF-8 子字符串数组。[`Array(String)`](/sql-reference/data-types/array) - -**返回值** - -返回在 `haystack` 字符串中,与多个 `needle` 字符串中任意一个匹配的最左侧偏移量,忽略大小写。如果没有匹配则返回 `0`。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**在 UTF-8 字符串 'Здравствуй, мир'('Hello, world')中查找与给定任一 `needle` 匹配的最左侧偏移量** - -```sql title=Query -SELECT multiSearchFirstPositionCaseInsensitiveUTF8('Здравствуй, мир', ['МИР', 'вст', 'Здра']) -``` - -```response title=Response -┌─multiSearchFirstPositionCaseInsensitiveUTF8('Здравствуй, мир', ['мир', 'вст', 'Здра'])─┐ -│ 3 │ -└────────────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## multiSearchFirstPositionUTF8 - -引入于:v20.1 - -与 [multiSearchFirstPosition](#multiSearchFirstPosition) 类似,但假定 `haystack` 和 `needle` 均为 UTF-8 编码的字符串。 - -**语法** - -```sql -multiSearchFirstPositionUTF8(大串, [模式1, 模式2, ..., 模式N]) -``` - -**参数** - -* `haystack` — 要在其中执行搜索的 UTF-8 编码字符串。[`String`](/sql-reference/data-types/string) -* `needle` — 要搜索的 UTF-8 子字符串数组。[`Array(String)`](/sql-reference/data-types/array) - -**返回值** - -`haystack` 字符串中,与多个 `needle` 字符串中任意一个匹配的最左侧偏移量。如果没有匹配,则返回 `0`。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**在 UTF-8 字符串 'Здравствуй, мир'('Hello, world')中查找与任意给定 needle 字符串匹配的最左侧偏移量** - -```sql title=Query -SELECT multiSearchFirstPositionUTF8('Здравствуй, мир',['мир', 'вст', 'авст']) -``` - -```response title=Response -┌─multiSearchFirstPositionUTF8('Здравствуй, мир', ['мир', 'вст', 'авст'])─┐ -│ 3 │ -└─────────────────────────────────────────────────────────────────────────┘ -``` - - -## ngramDistance - -引入版本:v20.1 - -计算两个字符串之间的 4-gram 距离。 -具体而言,它会统计两个 4-gram 多重集之间的对称差,并用它们基数之和进行归一化。 -返回值越小,字符串越相似。 - -对于不区分大小写的搜索和/或 UTF-8 格式,请使用函数 [`ngramDistanceCaseInsensitive`](#ngramDistanceCaseInsensitive)、[`ngramDistanceUTF8`](#ngramDistanceUTF8)、[`ngramDistanceCaseInsensitiveUTF8`](#ngramDistanceCaseInsensitiveUTF8)。 - -**语法** - -```sql -ngramDistance(大海, 针) -``` - -**参数** - -* `haystack` — 用于参与比较的字符串。[`String`](/sql-reference/data-types/string) -* `needle` — 用于参与比较的字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回一个介于 `0` 和 `1` 之间的 Float32 类型数值。返回值越小,字符串越相似。[`Float32`](/sql-reference/data-types/float) - -**示例** - -**计算 4-gram 距离** - -```sql title=Query -SELECT ngramDistance('ClickHouse', 'ClickHouses') -``` - -```response title=Response -┌─ngramDistance('ClickHouse', 'ClickHouses')─┐ -│ 0.1 │ -└────────────────────────────────────────────┘ -``` - - -## ngramDistanceCaseInsensitive - -引入于:v20.1 - -提供 [`ngramDistance`](#ngramDistance) 的不区分大小写变体。 -计算两个字符串在忽略大小写情况下的 4-gram 距离。 -返回值越小,字符串越相似。 - -**语法** - -```sql -ngramDistanceCaseInsensitive(大海, 针) -``` - -**参数** - -* `haystack` — 第一个用于比较的字符串。[`String`](/sql-reference/data-types/string) -* `needle` — 第二个用于比较的字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回一个介于 `0` 和 `1` 之间的 `Float32` 类型数值。[`Float32`](/sql-reference/data-types/float) - -**示例** - -**不区分大小写的 4-gram 距离** - -```sql title=Query -SELECT ngramDistanceCaseInsensitive('ClickHouse','clickhouse') -``` - -```response title=Response -┌─ngramDistanceCaseInsensitive('ClickHouse','clickhouse')─┐ -│ 0 │ -└─────────────────────────────────────────────────────────┘ -``` - - -## ngramDistanceCaseInsensitiveUTF8 - -自 v20.1 引入 - -提供 [`ngramDistance`](#ngramDistance) 的不区分大小写 UTF-8 变体。 -假定 `needle` 和 `haystack` 为 UTF-8 编码的字符串,并忽略大小写。 -计算两个 UTF-8 字符串之间的 3-gram 距离(忽略大小写)。 -返回值越小,字符串越相似。 - -**语法** - -```sql -ngramDistanceCaseInsensitiveUTF8(haystack, needle) -``` - -**参数** - -* `haystack` — 第一个采用 UTF-8 编码的比较字符串。[`String`](/sql-reference/data-types/string) -* `needle` — 第二个采用 UTF-8 编码的比较字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回一个介于 `0` 和 `1` 之间的 Float32 数值。[`Float32`](/sql-reference/data-types/float) - -**示例** - -**不区分大小写的 UTF-8 3-gram 距离** - -```sql title=Query -SELECT ngramDistanceCaseInsensitiveUTF8('abcde','CDE') -``` - -```response title=Response -┌─ngramDistanceCaseInsensitiveUTF8('abcde','CDE')─┐ -│ 0.5 │ -└─────────────────────────────────────────────────┘ -``` - - -## ngramDistanceUTF8 - -引入于:v20.1 - -提供 [`ngramDistance`](#ngramDistance) 的 UTF-8 版本。 -假设 `needle` 和 `haystack` 字符串为 UTF-8 编码。 -计算两个 UTF-8 字符串之间的 3-gram 距离。 -返回值越小,字符串越相似。 - -**语法** - -```sql -ngramDistanceUTF8(haystack, needle) -``` - -**参数** - -* `haystack` — 第一个 UTF-8 编码的比较字符串。[`String`](/sql-reference/data-types/string) -* `needle` — 第二个 UTF-8 编码的比较字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回一个介于 `0` 到 `1` 之间的 Float32 数值。[`Float32`](/sql-reference/data-types/float) - -**示例** - -**UTF-8 三元语法距离(3-gram distance)** - -```sql title=Query -SELECT ngramDistanceUTF8('abcde','cde') -``` - -```response title=Response -┌─ngramDistanceUTF8('abcde','cde')─┐ -│ 0.5 │ -└───────────────────────────────────┘ -``` - - -## ngramSearch - -引入版本:v20.1 - -检查两个字符串之间的 4-gram 距离是否小于或等于给定的阈值。 - -对于不区分大小写和(或)UTF8 格式的搜索,请使用函数 `ngramSearchCaseInsensitive`、`ngramSearchUTF8`、`ngramSearchCaseInsensitiveUTF8`。 - -**语法** - -```sql -ngramSearch(干草堆, 针) -``` - -**参数** - -* `haystack` — 用于比较的字符串。[`String`](/sql-reference/data-types/string) -* `needle` — 用于比较的字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -如果两个字符串的 4-gram 距离小于等于阈值(默认 `1.0`),则返回 `1`,否则返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**使用 4-gram 搜索** - -```sql title=Query -SELECT ngramSearch('ClickHouse', 'Click') -``` - -```response title=Response -┌─ngramSearch('ClickHouse', 'Click')─┐ -│ 1 │ -└────────────────────────────────────┘ -``` - - -## ngramSearchCaseInsensitive - -引入版本:v20.1 - -提供 [`ngramSearch`](#ngramSearch) 的不区分大小写变体。 -计算一个“针”字符串与“草堆”字符串之间的非对称差值,即针中的 n-gram 数量减去公共的 n-gram 数量,再除以针中 n-gram 数量进行归一化。 -在忽略大小写的情况下,检查两个字符串之间的 4-gram 距离是否小于或等于给定阈值。 - -**语法** - -```sql -ngramSearchCaseInsensitive(haystack, needle) -``` - -**参数** - -* `haystack` — 用于比较的字符串。[`String`](/sql-reference/data-types/string) -* `needle` — 用于比较的字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -如果两个字符串之间的 4-gram 距离小于或等于阈值(默认值为 `1.0`),则返回 `1`,否则返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**基于 4-gram 的不区分大小写搜索** - -```sql title=Query -SELECT ngramSearchCaseInsensitive('Hello World','hello') -``` - -```response title=Response -┌─ngramSearchCaseInsensitive('Hello World','hello')─┐ -│ 1 │ -└────────────────────────────────────────────────────┘ -``` - - -## ngramSearchCaseInsensitiveUTF8 - -引入版本:v20.1 - -提供 [`ngramSearch`](#ngramSearch) 的不区分大小写 UTF-8 版本。 -假定 `haystack` 和 `needle` 为 UTF-8 字符串,并忽略大小写。 -在忽略大小写的情况下,检查两个 UTF-8 字符串之间的 3-gram 距离是否小于或等于给定阈值。 - -**语法** - -```sql -ngramSearchCaseInsensitiveUTF8(haystack, needle) -``` - -**参数** - -* `haystack` — 用于比较的 UTF-8 字符串。[`String`](/sql-reference/data-types/string) -* `needle` — 用于比较的 UTF-8 字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -如果字符串之间的 3-gram 距离小于或等于阈值(默认值为 `1.0`),返回 `1`,否则返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**使用 3-gram 的不区分大小写 UTF-8 搜索** - -```sql title=Query -SELECT ngramSearchCaseInsensitiveUTF8('абвГДЕёжз', 'АбвгдЕЁжз') -``` - -```response title=Response -┌─ngramSearchCaseInsensitiveUTF8('абвГДЕёжз', 'АбвгдЕЁжз')─┐ -│ 1 │ -└──────────────────────────────────────────────────────────┘ -``` - - -## ngramSearchUTF8 - -自 v20.1 引入。 - -提供 `ngramSearch` 的 UTF-8 变体。 -假定 `haystack` 和 `needle` 为 UTF-8 字符串。 -检查两个 UTF-8 字符串之间的 3-gram 距离是否小于或等于给定的阈值。 - -**语法** - -```sql -ngramSearchUTF8(haystack, needle) -``` - -**参数** - -* `haystack` — 用于比较的 UTF-8 字符串。[`String`](/sql-reference/data-types/string) -* `needle` — 用于比较的 UTF-8 字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -如果两个字符串之间的 3-gram 距离小于或等于阈值(默认 `1.0`),则返回 `1`,否则返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**基于 3-gram 的 UTF-8 搜索** - -```sql title=Query -SELECT ngramSearchUTF8('абвгдеёжз', 'гдеёзд') -``` - -```response title=Response -┌─ngramSearchUTF8('абвгдеёжз', 'гдеёзд')─┐ -│ 1 │ -└────────────────────────────────────────┘ -``` - - -## notILike - -自 v20.6 引入 - -检查字符串在不区分大小写的情况下是否与某个模式不匹配。该模式可以包含用于 SQL LIKE 匹配的特殊字符 `%` 和 `_`。 - -**语法** - -```sql -notILike(大串, 模式) -``` - -**参数** - -* `haystack` — 要在其中进行搜索的输入字符串。[`String`](/sql-reference/data-types/string) 或 [`FixedString`](/sql-reference/data-types/fixedstring) -* `pattern` — 要匹配的 SQL LIKE 模式。`%` 匹配任意数量的字符(包括 0 个),`_` 精确匹配 1 个字符。[`String`](/sql-reference/data-types/string) - -**返回值** - -如果字符串与模式不匹配(不区分大小写),则返回 `1`,否则返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT notILike('ClickHouse', '%house%'); -``` - -```response title=Response -┌─notILike('Cl⋯ '%house%')─┐ -│ 0 │ -└──────────────────────────┘ -``` - - -## notLike - -自 v1.1 引入 - -类似于 [`like`](#like),但返回相反的结果。 - -**语法** - -```sql -notLike(haystack, pattern) --- haystack 不匹配 LIKE 模式 pattern -``` - -**参数** - -* `haystack` — 要在其中执行搜索的字符串。[`String`](/sql-reference/data-types/string) 或 [`FixedString`](/sql-reference/data-types/fixedstring) -* `pattern` — 用于匹配的 `LIKE` 模式。[`String`](/sql-reference/data-types/string) - -**返回值** - -如果字符串不匹配 `LIKE` 模式则返回 `1`,否则返回 `0`。[`UInt8`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT notLike('ClickHouse', '%House%'); -``` - -```response title=Response -┌─notLike('Cli⋯ '%House%')─┐ -│ 0 │ -└──────────────────────────┘ -``` - -**不匹配的模式** - -```sql title=Query -SELECT notLike('ClickHouse', '%SQL%'); -``` - -```response title=Response -┌─notLike('Cli⋯', '%SQL%')─┐ -│ 1 │ -└──────────────────────────┘ -``` - - -## position - -引入于:v1.1 - -返回子字符串 `needle` 在字符串 `haystack` 中的位置(以字节为单位,从 1 开始计数)。 - -如果子字符串 `needle` 为空,适用以下规则: - -* 如果未指定 `start_pos`:返回 `1` -* 如果 `start_pos = 0`:返回 `1` -* 如果 `start_pos >= 1` 且 `start_pos <= length(haystack) + 1`:返回 `start_pos` -* 否则:返回 `0` - -上述规则同样适用于函数 [`locate`](#locate)、[`positionCaseInsensitive`](#positionCaseInsensitive)、[`positionUTF8`](#positionUTF8) 和 [`positionCaseInsensitiveUTF8`](#positionCaseInsensitiveUTF8)。 - -**语法** - -```sql -position(haystack, needle[, start_pos]) -``` - -**参数** - -* `haystack` — 执行搜索的字符串。[`String`](/sql-reference/data-types/string) 或 [`Enum`](/sql-reference/data-types/enum) -* `needle` — 要搜索的子串。[`String`](/sql-reference/data-types/string) -* `start_pos` — 在 `haystack` 中开始搜索的位置(从 1 开始计数)。可选。[`UInt`](/sql-reference/data-types/int-uint) - -**返回值** - -如果找到子串,则返回起始位置(按字节、从 1 开始计数);如果未找到子串,则返回 `0`。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**基本用法** - -```sql title=Query -SELECT position('Hello, world!', '!') -``` - -```response title=Response -┌─position('Hello, world!', '!')─┐ -│ 13 │ -└────────────────────────────────┘ -``` - -**使用 start_pos 参数** - -```sql title=Query -SELECT position('Hello, world!', 'o', 1), position('Hello, world!', 'o', 7) -``` - -```response title=Response -┌─position('Hello, world!', 'o', 1)─┬─position('Hello, world!', 'o', 7)─┐ -│ 5 │ 9 │ -└───────────────────────────────────┴───────────────────────────────────┘ -``` - -**Needle IN haystack(大海捞针)语法** - -```sql title=Query -SELECT 6 = position('/' IN s) FROM (SELECT 'Hello/World' AS s) -``` - -```response title=Response -┌─equals(6, position(s, '/'))─┐ -│ 1 │ -└─────────────────────────────┘ -``` - -**空模式子串** - -```sql title=Query -SELECT position('abc', ''), position('abc', '', 0), position('abc', '', 1), position('abc', '', 2), position('abc', '', 3), position('abc', '', 4), position('abc', '', 5) -``` - -```response title=Response -┌─position('abc', '')─┬─position('abc', '', 0)─┬─position('abc', '', 1)─┬─position('abc', '', 2)─┬─position('abc', '', 3)─┬─position('abc', '', 4)─┬─position('abc', '', 5)─┐ -│ 1 │ 1 │ 1 │ 2 │ 3 │ 4 │ 0 │ -└─────────────────────┴────────────────────────┴────────────────────────┴────────────────────────┴────────────────────────┴────────────────────────┴────────────────────────┘ -``` - - -## positionCaseInsensitive - -在 v1.1 中引入 - -与 [`position`](#position) 类似,但不区分大小写。 - -**语法** - -```sql -positionCaseInsensitive(haystack, needle[, start_pos]) -``` - -**别名**: `instr` - -**参数** - -* `haystack` — 要在其中执行搜索的字符串。[`String`](/sql-reference/data-types/string) 或 [`Enum`](/sql-reference/data-types/enum) -* `needle` — 要搜索的子字符串。[`String`](/sql-reference/data-types/string) -* `start_pos` — 可选。在 `haystack` 中开始搜索的位置(从 1 开始计数)。[`UInt*`](/sql-reference/data-types/int-uint) - -**返回值** - -如果找到子字符串,则返回其起始位置(按字节,从 1 开始计数);如果未找到子字符串,则返回 `0`。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**不区分大小写的搜索** - -```sql title=Query -SELECT positionCaseInsensitive('Hello, world!', 'hello') -``` - -```response title=Response -┌─positionCaseInsensitive('Hello, world!', 'hello')─┐ -│ 1 │ -└───────────────────────────────────────────────────┘ -``` - - -## positionCaseInsensitiveUTF8 - -自 v1.1 起引入 - -类似于 [`positionUTF8`](#positionUTF8),但进行不区分大小写的搜索。 - -**语法** - -```sql -positionCaseInsensitiveUTF8(主串, 子串[, 起始位置]) -``` - -**参数** - -* `haystack` — 进行搜索的字符串。[`String`](/sql-reference/data-types/string) 或 [`Enum`](/sql-reference/data-types/enum) -* `needle` — 要查找的子字符串。[`String`](/sql-reference/data-types/string) -* `start_pos` — 可选。在 `haystack` 中开始搜索的位置(从 1 开始计数)。[`UInt*`](/sql-reference/data-types/int-uint) - -**返回值** - -如果找到子字符串,则返回以字节为单位、从 1 开始计数的起始位置;如果未找到子字符串,则返回 `0`。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**大小写不敏感的 UTF-8 搜索** - -```sql title=Query -SELECT positionCaseInsensitiveUTF8('Привет мир', 'МИР') -``` - -```response title=Response -┌─positionCaseInsensitiveUTF8('Привет мир', 'МИР')─┐ -│ 8 │ -└──────────────────────────────────────────────────┘ -``` - - -## positionUTF8 - -首次引入于:v1.1 - -与 [`position`](#position) 类似,但假定 `haystack` 和 `needle` 为 UTF-8 编码的字符串。 - -**语法** - -```sql -positionUTF8(haystack, needle[, start_pos]) -``` - -**参数** - -* `haystack` — 要进行搜索的字符串。[`String`](/sql-reference/data-types/string) 或 [`Enum`](/sql-reference/data-types/enum) -* `needle` — 要搜索的子字符串。[`String`](/sql-reference/data-types/string) -* `start_pos` — 可选。在 `haystack` 中开始搜索的位置(从 1 开始计数)。[`UInt*`](/sql-reference/data-types/int-uint) - -**返回值** - -如果找到子字符串,则返回起始位置(以字节为单位,从 1 开始计数);如果未找到子字符串,则返回 `0`。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**UTF-8 字符计数** - -```sql title=Query -SELECT positionUTF8('Motörhead', 'r') -``` - -```response title=Response -┌─position('Motörhead', 'r')─┐ -│ 5 │ -└────────────────────────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/time-series-functions.md b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/time-series-functions.md index a49dc8ab61e..9d5d405961a 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/time-series-functions.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/time-series-functions.md @@ -1,19 +1,17 @@ --- -description: '用于处理时间序列的函数文档' +description: '时间序列处理函数文档' sidebar_label: 'TimeSeries' slug: /sql-reference/functions/time-series-functions -title: '用于处理时间序列的函数' +title: '时间序列处理函数' doc_type: 'reference' --- - - # 时间序列函数 -以下函数专为与 `timeSeries*()` 聚合函数配合使用而设计,例如 -[timeSeriesInstantRateToGrid](../aggregate-functions/reference/timeSeriesInstantRateToGrid.md)、[timeSeriesLastToGrid](../aggregate-functions/reference/timeSeriesResampleToGridWithStaleness.md) 等。 - - +以下函数旨在与 `timeSeries*()` 聚合函数一起使用,例如 +[timeSeriesInstantRateToGrid](../aggregate-functions/reference/timeSeriesInstantRateToGrid.md)、 +[timeSeriesLastToGrid](../aggregate-functions/reference/timeSeriesResampleToGridWithStaleness.md) +等。 ## timeSeriesRange @@ -27,13 +25,13 @@ timeSeriesRange(start_timestamp, end_timestamp, step) **参数** -* `start_timestamp` - 范围的起始时间戳。 -* `end_timestamp` - 范围的结束时间戳。 +* `start_timestamp` - 范围的起始时间。 +* `end_timestamp` - 范围的结束时间。 * `step` - 范围的步长(单位:秒)。 **返回值** -* 返回一组时间戳序列 `[start_timestamp, start_timestamp + step, start_timestamp + 2 * step, ..., end_timestamp]`。 +* 返回一个时间戳序列 `[start_timestamp, start_timestamp + step, start_timestamp + 2 * step, ..., end_timestamp]`。 **示例** @@ -53,11 +51,11 @@ SELECT timeSeriesRange('2025-06-01 00:00:00'::DateTime64(3), '2025-06-01 00:01:0 **注意** -* 如果调用函数 `timeSeriesRange()` 时,`start_timestamp` 等于 `end_timestamp`, - 则它会返回一个仅包含该时间戳的单元素数组:`[start_timestamp]` +* 如果在调用函数 `timeSeriesRange()` 时,`start_timestamp` 等于 `end_timestamp`, + 则会返回一个只包含该时间戳的、只有 1 个元素的数组:`[start_timestamp]` * 函数 `timeSeriesRange()` 类似于函数 [range](../functions/array-functions.md#range)。 - 例如,如果时间戳类型为 `DateTime64(3)` 且 `start_timestamp < end_timestamp`,则 - `timeSeriesRange(start_timestamp, end_timestamp, step)` 返回的结果与以下表达式相同: + 例如,如果时间戳类型为 `DateTime64(3)` 且 `start_timestamp < end_timestamp`,那么 + `timeSeriesRange(start_timestamp, end_timestamp, step)` 会返回与下列表达式相同的结果: ```sql range(start_timestamp::Int64, end_timestamp::Int64 + 1, step::Int64)::Array(DateTime64(3)) @@ -69,12 +67,12 @@ range(start_timestamp::Int64, end_timestamp::Int64 + 1, step::Int64)::Array(Date 将数值数组 `[value1, value2, value3, ..., valueN]` 转换为元组数组 `[(start_timestamp, value1), (start_timestamp + step, value2), (start_timestamp + 2 * step, value3), ..., (end_timestamp, valueN)]`。 -如果数组 `[value1, value2, value3, ...]` 中有一些值为 `NULL`,则函数不会将这些 `NULL` 值复制到结果数组中, -但仍然会增加当前时间戳。例如,对于 `[value1, NULL, value2]`,函数将返回 +如果数组 `[value1, value2, value3, ...]` 中的某些值为 `NULL`,则函数不会将这些 NULL 值复制到结果数组中, +但仍会递增当前时间戳。例如,对于 `[value1, NULL, value2]`,函数将返回 `[(start_timestamp, value1), (start_timestamp + 2 * step, value2)]`。 -当前时间戳按步长递增,直到其大于 `end_timestamp`,每个时间戳都会与指定值数组中的一个值配对。 -如果值的数量与时间戳的数量不匹配,函数将抛出异常。 +当前时间戳按步长递增,直到其大于 `end_timestamp`,每个时间戳都会与指定数值数组中的一个值组合。 +如果数值的数量与时间戳的数量不匹配,函数将抛出异常。 **语法** @@ -87,11 +85,11 @@ timeSeriesFromGrid(start_timestamp, end_timestamp, step, values); * `start_timestamp` - 网格的起始时间。 * `end_timestamp` - 网格的结束时间。 * `step` - 网格的步长(以秒为单位)。 -* `values` - 值数组 `[value1, value2, ..., valueN]`。 +* `values` - 数值数组 `[value1, value2, ..., valueN]`。 **返回值** -* 返回在由 `start_timestamp` 和 `step` 定义的等间隔时间网格上,将时间戳与源值数组中的值对齐组合后的结果。 +* 返回源数组中的数值,并将其与时间戳结合,映射到由 `start_timestamp` 和 `step` 定义的等间隔时间网格上。 **示例** @@ -110,390 +108,18 @@ SELECT timeSeriesFromGrid('2025-06-01 00:00:00'::DateTime64(3), '2025-06-01 00:0 ``` **注意** -函数 `timeSeriesFromGrid(start_timestamp, end_timestamp, step, values)` 返回的结果与下列表达式等价: +函数 `timeSeriesFromGrid(start_timestamp, end_timestamp, step, values)` 返回的结果与以下表达式相同: ```sql arrayFilter(x -> x.2 IS NOT NULL, arrayZip(timeSeriesRange(start_timestamp, end_timestamp, step), values)) ``` {/* - 下面这些标签的内部内容会在文档框架构建期间, - 被由 system.functions 生成的文档所替换。 - 请不要修改或删除这些标签。 - 参见:https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md + 下面标签内的内容会在文档框架构建时替换为 + 由 system.functions 自动生成的文档。请不要修改或删除这些标签。 + 详见:https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## seriesDecomposeSTL - -引入版本:v24.1 - -使用 STL(基于 Loess 的季节-趋势分解方法 [(Seasonal-Trend Decomposition Procedure Based on Loess)](https://www.wessa.net/download/stl.pdf))将时间序列数据分解为季节性、趋势和残差分量。 - -**语法** - -```sql -seriesDecomposeSTL(series, period) -``` - -**参数** - -* `series` — 数值数组 [`Array((U)Int8/16/32/64)`](/sql-reference/data-types/array) 或 [`Array(Float*)`](/sql-reference/data-types/array) -* `period` — 正整数 [`UInt8/16/32/64`](/sql-reference/data-types/int-uint) - -**返回值** - -返回由四个数组组成的数组:第一个数组为季节性分量,第二个数组为趋势分量,第三个数组为残差分量,第四个数组为基线分量(季节性 + 趋势)。[`Array(Array(Float32), Array(Float32), Array(Float32), Array(Float32))`](/sql-reference/data-types/array) - -**示例** - -**使用 STL 对时间序列数据进行分解** - -```sql title=Query -SELECT seriesDecomposeSTL([10.1, 20.45, 40.34, 10.1, 20.45, 40.34, 10.1, 20.45, 40.34, 10.1, 20.45, 40.34, 10.1, 20.45, 40.34, 10.1, 20.45, 40.34, 10.1, 20.45, 40.34, 10.1, 20.45, 40.34], 3) AS print_0 -``` - -```response title=Response -┌───────────print_0──────────────────────────────────────────────────────────────────────────────────────────────────────┐ -│ [[ - -13.529999, -3.1799996, 16.71, -13.53, -3.1799996, 16.71, -13.53, -3.1799996, - 16.71, -13.530001, -3.18, 16.710001, -13.530001, -3.1800003, 16.710001, -13.530001, - -3.1800003, 16.710001, -13.530001, -3.1799994, 16.71, -13.529999, -3.1799994, 16.709997 - ], - [ - 23.63, 23.63, 23.630003, 23.630001, 23.630001, 23.630001, 23.630001, 23.630001, - 23.630001, 23.630001, 23.630001, 23.63, 23.630001, 23.630001, 23.63, 23.630001, - 23.630001, 23.63, 23.630001, 23.630001, 23.630001, 23.630001, 23.630001, 23.630003 - ], - [ - 0, 0.0000019073486, -0.0000019073486, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.0000019073486, 0, - 0 - ], - [ - 10.1, 20.449999, 40.340004, 10.100001, 20.45, 40.34, 10.100001, 20.45, 40.34, 10.1, 20.45, 40.34, - 10.1, 20.45, 40.34, 10.1, 20.45, 40.34, 10.1, 20.45, 40.34, 10.100002, 20.45, 40.34 - ]] │ -└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## seriesOutliersDetectTukey - -引入于:v24.2 - -使用 [Tukey Fences](https://en.wikipedia.org/wiki/Outlier#Tukey%27s_fences) 检测序列数据中的离群点。 - -**语法** - -```sql -seriesOutliersDetectTukey(series[, min_percentile, max_percentile, K]) -``` - -**参数** - -* `series` — 数值数组。[`Array((UInt8/16/32/64))`](/sql-reference/data-types/array) 或 [`Array(Float*)`](/sql-reference/data-types/array) -* `min_percentile` — 可选。用于计算四分位距 [(IQR)](https://en.wikipedia.org/wiki/Interquartile_range) 的最小分位点。取值范围必须在 [0.02,0.98] 之间,默认值为 0.25。[`Float*`](/sql-reference/data-types/float) -* `max_percentile` — 可选。用于计算四分位距 (IQR) 的最大分位点。取值范围必须在 [0.02,0.98] 之间,默认值为 0.75。[`Float*`](/sql-reference/data-types/float) -* `K` — 可选。用于检测轻微或更强异常值的非负常数。默认值为 1.5。[`Float*`](/sql-reference/data-types/float) - -**返回值** - -返回一个与输入数组长度相同的数组,其中每个值表示序列中对应元素的可能异常评分。非零评分表示存在潜在异常。[`Array(Float32)`](/sql-reference/data-types/array) - -**示例** - -**基础异常值检测** - -```sql title=Query -SELECT seriesOutliersDetectTukey([-3, 2, 15, 3, 5, 6, 4, 5, 12, 45, 12, 3, 3, 4, 5, 6]) AS print_0 -``` - -```response title=Response -┌───────────print_0─────────────────┐ -│[0,0,0,0,0,0,0,0,0,27,0,0,0,0,0,0] │ -└───────────────────────────────────┘ -``` - -**自定义参数离群值检测** - -```sql title=Query -SELECT seriesOutliersDetectTukey([-3, 2, 15, 3, 5, 6, 4.50, 5, 12, 45, 12, 3.40, 3, 4, 5, 6], 0.2, 0.8, 1.5) AS print_0 -``` - -```response title=Response -┌─print_0──────────────────────────────┐ -│ [0,0,0,0,0,0,0,0,0,19.5,0,0,0,0,0,0] │ -└──────────────────────────────────────┘ -``` - - -## seriesPeriodDetectFFT - -引入版本:v23.12 - -使用 FFT([快速傅里叶变换](https://en.wikipedia.org/wiki/Fast_Fourier_transform))来检测给定序列数据的周期。 - -**语法** - -```sql -seriesPeriodDetectFFT(series) -``` - -**参数** - -* `series` — 数值数组。[`Array((U)Int8/16/32/64)`](/sql-reference/data-types/array) 或 [`Array(Float*)`](/sql-reference/data-types/array) - -**返回值** - -返回一个实数值,等于序列数据的周期长度。当数据点数量少于四个时返回 NaN。[`Float64`](/sql-reference/data-types/float) - -**示例** - -**使用简单模式的周期检测** - -```sql title=Query -SELECT seriesPeriodDetectFFT([1, 4, 6, 1, 4, 6, 1, 4, 6, 1, 4, 6, 1, 4, 6, 1, 4, 6, 1, 4, 6]) AS print_0 -``` - -```response title=Response -┌───────────print_0──────┐ -│ 3 │ -└────────────────────────┘ -``` - -**基于复杂模式的周期检测** - -```sql title=Query -SELECT seriesPeriodDetectFFT(arrayMap(x -> abs((x % 6) - 3), range(1000))) AS print_0 -``` - -```response title=Response -┌─print_0─┐ -│ 6 │ -└─────────┘ -``` - - -## timeSeriesFromGrid - -引入于:v25.8 - -将数值数组 `[x1, x2, x3, ...]` 转换为元组数组 -`[(start_timestamp, x1), (start_timestamp + step, x2), (start_timestamp + 2 * step, x3), ...]`。 - -当前时间戳按 `step` 递增,直到其大于 `end_timestamp`。 -如果数值个数与时间戳个数不匹配,函数会抛出异常。 - -`[x1, x2, x3, ...]` 中的 NULL 值会被忽略,但当前时间戳仍会递增。 -例如,对于 `[value1, NULL, x2]`,函数返回 `[(start_timestamp, x1), (start_timestamp + 2 * step, x2)]`。 - -**语法** - -```sql -timeSeriesFromGrid(开始时间戳, 结束时间戳, 步长, 值) -``` - -**参数** - -* `start_timestamp` — 时间网格的起始时间。[`DateTime64`](/sql-reference/data-types/datetime64) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`UInt32`](/sql-reference/data-types/int-uint) -* `end_timestamp` — 时间网格的结束时间。[`DateTime64`](/sql-reference/data-types/datetime64) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`UInt32`](/sql-reference/data-types/int-uint) -* `step` — 时间网格的步长(单位:秒)。[`Decimal64`](/sql-reference/data-types/decimal) 或 [`Decimal32`](/sql-reference/data-types/decimal) 或 [`UInt32/64`](/sql-reference/data-types/int-uint) -* `values` — 值的数组。[`Array(Float*)`](/sql-reference/data-types/array) 或 [`Array(Nullable(Float*))`](/sql-reference/data-types/array) - -**返回值** - -返回源数组中的值,这些值与基于 `start_timestamp` 和 `step` 定义的等间隔时间网格上的时间戳组合在一起。[`Array(Tuple(DateTime64, Float64))`](/sql-reference/data-types/array) - -**示例** - -**用法示例** - -```sql title=Query -SELECT timeSeriesFromGrid('2025-06-01 00:00:00'::DateTime64(3), '2025-06-01 00:01:30.000'::DateTime64(3), 30, [10, 20, NULL, 30]) AS result; -``` - -```response title=Response -┌─────────────────────────────────────────────result─────────────────────────────────────────────┐ -│ [('2025-06-01 00:00:00.000',10),('2025-06-01 00:00:30.000',20),('2025-06-01 00:01:30.000',30)] │ -└────────────────────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## timeSeriesIdToTags - -引入于:v25.8 - -查找指定时间序列标识符对应的标签。 - -**语法** - -```sql -timeSeriesIdToTags(id) -``` - -**参数** - -* `id` — 时间序列的标识符。[`UInt64`](/sql-reference/data-types/int-uint) 或 [`UInt128`](/sql-reference/data-types/int-uint) 或 [`UUID`](/sql-reference/data-types/uuid) 或 [`FixedString(16)`](/sql-reference/data-types/fixedstring) - -**返回值** - -返回由 (tag_name, tag_value) 对组成的数组。[`Array(Tuple(String, String))`](/sql-reference/data-types/array) - -**示例** - -**示例** - -```sql title=Query -SELECT timeSeriesStoreTags(8374283493092, [('region', 'eu'), ('env', 'dev')], '__name__', 'http_requests_count') AS id, timeSeriesIdToTags(id) -``` - -```response title=Response -8374283493092 [('__name__', ''http_requests_count''), ('env', 'dev'), ('region', 'eu')] -``` - - -## timeSeriesIdToTagsGroup - -自 v25.8 起引入 - -将指定的时间序列标识符转换为其所属的分组索引。分组索引是在当前执行查询的上下文中,与每个唯一标签集合关联的数字(例如 0、1、2、3)。 - -**语法** - -```sql -timeSeriesIdToTagsGroup(id) -``` - -**参数** - -* `id` — 时间序列标识符。[`UInt64`](/sql-reference/data-types/int-uint) 或 [`UInt128`](/sql-reference/data-types/int-uint) 或 [`UUID`](/sql-reference/data-types/uuid) 或 [`FixedString(16)`](/sql-reference/data-types/fixedstring) - -**返回值** - -返回与此标签集关联的组索引。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**示例** - -```sql title=Query -SELECT timeSeriesStoreTags(8374283493092, [('region', 'eu'), ('env', 'dev')], '__name__', 'http_requests_count') AS id, timeSeriesIdToTagsGroup(id) -``` - -```response title=Response -8374283493092 0 -``` - - -## timeSeriesRange - -自 v25.8 引入 - -生成一个时间戳范围 `[start_timestamp, start_timestamp + step, start_timestamp + 2 * step, ..., end_timestamp]`。 - -如果 `start_timestamp` 等于 `end_timestamp`,函数返回一个仅包含 `[start_timestamp]` 的单元素数组。 - -函数 `timeSeriesRange()` 类似于函数 [range](../functions/array-functions.md#range)。 - -**语法** - -```sql -timeSeriesRange(start_timestamp, end_timestamp, step) -``` - -**参数** - -* `start_timestamp` — 范围的开始时间。[`DateTime64`](/sql-reference/data-types/datetime64) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`UInt32`](/sql-reference/data-types/int-uint) -* `end_timestamp` — 范围的结束时间。[`DateTime64`](/sql-reference/data-types/datetime64) 或 [`DateTime`](/sql-reference/data-types/datetime) 或 [`UInt32`](/sql-reference/data-types/int-uint) -* `step` — 范围的步长(以秒为单位)。[`UInt32/64`](/sql-reference/data-types/int-uint) 或 [`Decimal32/64`](/sql-reference/data-types/decimal) - -**返回值** - -返回一个时间戳数组。[`Array(DateTime64)`](/sql-reference/data-types/array) - -**示例** - -**用法示例** - -```sql title=Query -SELECT timeSeriesRange('2025-06-01 00:00:00'::DateTime64(3), '2025-06-01 00:01:00'::DateTime64(3), 30) -``` - -```response title=Response -┌────────────────────────────────────result─────────────────────────────────────────┐ -│ ['2025-06-01 00:00:00.000', '2025-06-01 00:00:30.000', '2025-06-01 00:01:00.000'] │ -└───────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## timeSeriesStoreTags - -自 v25.8 起引入 - -在查询上下文中存储时间序列标识符与其标签之间的映射,以便 timeSeriesIdToTags() 函数之后可以提取这些标签。 - -**语法** - -```sql -timeSeriesStoreTags(id, tags_array, separate_tag_name_1, separate_tag_value_1, ...) -``` - -**参数** - -* `id` — 时间序列的标识符。[`UInt64`](/sql-reference/data-types/int-uint) 或 [`UInt128`](/sql-reference/data-types/int-uint) 或 [`UUID`](/sql-reference/data-types/uuid) 或 [`FixedString(16)`](/sql-reference/data-types/fixedstring) -* `tags_array` — 标签名/值对的数组 (tag_name, tag_value)。[`Array(Tuple(String, String))`](/sql-reference/data-types/array) 或 [`NULL`](/sql-reference/syntax#null) -* `separate_tag_name_i` — 标签名。[`String`](/sql-reference/data-types/string) 或 [`FixedString`](/sql-reference/data-types/fixedstring) -* `separate_tag_value_i` — 标签值。[`String`](/sql-reference/data-types/string) 或 [`FixedString`](/sql-reference/data-types/fixedstring) 或 [`Nullable(String)`](/sql-reference/data-types/nullable) - -**返回值** - -返回第一个参数,即时间序列的标识符。 - -**示例** - -**示例** - -```sql title=Query -SELECT timeSeriesStoreTags(8374283493092, [('region', 'eu'), ('env', 'dev')], '__name__', 'http_requests_count') -``` - -```response title=Response -8374283493092 -``` - - -## timeSeriesTagsGroupToTags - -引入于:v25.8 - -查找与某个组索引关联的标签。组索引是数字 0、1、2、3,在当前执行的查询上下文中与每个唯一的标签集相关联。 - -**语法** - -```sql -timeSeriesTagsGroupToTags(group) -``` - -**参数** - -* `group` — 与时间序列关联的组索引。[`UInt64`](/sql-reference/data-types/int-uint) - -**返回值** - -由 (tag_name, tag_value) 对组成的数组。[`Array(Tuple(String, String))`](/sql-reference/data-types/array) - -**示例** - -**示例** - -```sql title=Query -SELECT timeSeriesStoreTags(8374283493092, [('region', 'eu'), ('env', 'dev')], '__name__', 'http_requests_count') AS id, timeSeriesIdToTagsGroup(id) AS group, timeSeriesTagsGroupToTags(group) -``` - -```response title=Response -8374283493092 0 [('__name__', ''http_requests_count''), ('env', 'dev'), ('region', 'eu')] -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/time-window-functions.md b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/time-window-functions.md index 67dbb23477d..abd12f76204 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/time-window-functions.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/time-window-functions.md @@ -17,239 +17,20 @@ import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -时间窗口函数返回对应窗口的下界(包含)和上界(不包含)。 -用于处理 [WindowView](/sql-reference/statements/create/view#window-view) 的函数如下所示: +时间窗口函数返回对应窗口的左闭右开区间边界。 +用于 [WindowView](/sql-reference/statements/create/view#window-view) 的函数如下所示: {/* - 下面标签内的内容会在文档框架构建过程中, - 被从 system.functions 生成的文档替换。请不要修改或移除这些标签。 + 下面标签内的内容会在文档框架构建期间被替换为 + 由 system.functions 生成的文档。请不要修改或移除这些标签。 参见:https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## hop - -引入于:v21.12 - -跳跃时间窗口具有固定的窗口长度(`window_interval`),并按指定的跳跃间隔(`hop_interval`)向前滑动。如果 `hop_interval` 小于 `window_interval`,则跳跃窗口会发生重叠,因此一条记录可以被分配到多个窗口中。 - -由于一条记录可以被分配到多个跳跃窗口,当在不使用 `WINDOW VIEW` 的情况下使用 `hop` 函数时,该函数只会返回第一个窗口的边界。 - -**语法** - -```sql -hop(time_attr, hop_interval, window_interval[, timezone]) -``` - -**参数** - -* `time_attr` — 日期和时间。[`DateTime`](/sql-reference/data-types/datetime) -* `hop_interval` — 正数的 Hop 间隔。[`Interval`](/sql-reference/data-types/int-uint) -* `window_interval` — 正数的窗口(Window)间隔。[`Interval`](/sql-reference/data-types/int-uint) -* `timezone` — 可选。时区名称。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回对应跳跃窗口(hopping window)的左闭右开区间边界。[`Tuple(DateTime, DateTime)`](/sql-reference/data-types/tuple) - -**示例** - -**跳跃窗口(Hopping window)** - -```sql title=Query -SELECT hop(now(), INTERVAL '1' DAY, INTERVAL '2' DAY) -``` - -```response title=Response -('2024-07-03 00:00:00','2024-07-05 00:00:00') -``` - - -## hopEnd - -引入版本:v22.1 - -返回相应跳跃窗口的不包含自身的上界。 - -由于一条记录可以被分配到多个跳跃窗口,当在未使用 `WINDOW VIEW` 的情况下调用 `hop` 函数时,该函数仅返回第一个窗口的上界。 - -**语法** - -```sql -hopEnd(time_attr, hop_interval, window_interval[, timezone]) -``` - -**参数** - -* `time_attr` — 日期和时间。[`DateTime`](/sql-reference/data-types/datetime) -* `hop_interval` — 正数 Hop 间隔。[`Interval`](/sql-reference/data-types/int-uint) -* `window_interval` — 正数窗口间隔。[`Interval`](/sql-reference/data-types/int-uint) -* `timezone` — 可选。时区名称。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回对应 hopping 窗口的上界(不含)。[`DateTime`](/sql-reference/data-types/datetime) - -**示例** - -**Hopping 窗口结束** - -```sql title=Query -SELECT hopEnd(now(), INTERVAL '1' DAY, INTERVAL '2' DAY) -``` - -```response title=Response -2024-07-05 00:00:00 -``` - - -## hopStart - -引入版本:v22.1 - -返回对应跳跃窗口的包含下界。 - -由于一条记录可以被分配到多个跳跃窗口,在未使用 `WINDOW VIEW` 的情况下调用 hop 函数时,该函数只返回第一个窗口的下界。 - -**语法** - -```sql -hopStart(time_attr, hop_interval, window_interval[, timezone]) -``` - -**参数** - -* `time_attr` — 日期和时间。[`DateTime`](/sql-reference/data-types/datetime) -* `hop_interval` — 正的 hop 间隔。[`Interval`](/sql-reference/data-types/int-uint) -* `window_interval` — 正的窗口间隔。[`Interval`](/sql-reference/data-types/int-uint) -* `timezone` — 可选。时区名称。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回对应跳跃窗口的包含性下界。[`DateTime`](/sql-reference/data-types/datetime) - -**示例** - -**跳跃窗口起始时间** - -```sql title=Query -SELECT hopStart(now(), INTERVAL '1' DAY, INTERVAL '2' DAY) -``` - -```response title=Response -2024-07-03 00:00:00 -``` - - -## tumble - -引入自:v21.12 - -tumble 时间窗口会将记录分配到固定持续时间(`interval`)、不重叠且连续的时间窗口中。 - -**语法** - -```sql -tumble(time_attr, interval[, timezone]) -``` - -**参数** - -* `time_attr` — 日期和时间。[`DateTime`](/sql-reference/data-types/datetime) -* `interval` — `Interval` 类型的窗口间隔。[`Interval`](/sql-reference/data-types/int-uint) -* `timezone` — 可选。时区名称。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回对应滚动窗口包含的下界和不包含的上界。[`Tuple(DateTime, DateTime)`](/sql-reference/data-types/tuple) - -**示例** - -**滚动窗口(Tumbling window)** - -```sql title=Query -SELECT tumble(now(), toIntervalDay('1')) -``` - -```response title=Response -('2024-07-04 00:00:00','2024-07-05 00:00:00') -``` - - -## tumbleEnd - -引入于:v22.1 - -返回相应滚动窗口的右开区间上界值。 - -**语法** - -```sql -tumbleEnd(time_attr, interval[, timezone]) -``` - -**参数** - -* `time_attr` — 日期和时间。[`DateTime`](/sql-reference/data-types/datetime) -* `interval` — 窗口区间,类型为 Interval。[`Interval`](/sql-reference/data-types/int-uint) -* `timezone` — 可选。时区名称。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回对应翻转窗口的开区间上界。[`DateTime`](/sql-reference/data-types/datetime) - -**示例** - -**翻转窗口结束时间** - -```sql title=Query -SELECT tumbleEnd(now(), toIntervalDay('1')) -``` - -```response title=Response -2024-07-05 00:00:00 -``` - - -## tumbleStart - -引入于:v22.1 - -返回对应翻转窗口(tumbling window)的左闭边界。 - -**语法** - -```sql -tumbleStart(time_attr, interval[, timezone]) -``` - -**参数** - -* `time_attr` — 日期和时间。[`DateTime`](/sql-reference/data-types/datetime) -* `interval` — `Interval` 类型的窗口间隔。[`Interval`](/sql-reference/data-types/int-uint) -* `timezone` — 可选。时区名称。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回对应滚动窗口(tumbling window)的包含型下界。[`DateTime`](/sql-reference/data-types/datetime) - -**示例** - -**滚动窗口起始时间** - -```sql title=Query -SELECT tumbleStart(now(), toIntervalDay('1')) -``` - -```response title=Response -2024-07-04 00:00:00 -``` - -{/* 自动生成结束 */ } +{/*AUTOGENERATED_END*/ } ## 相关内容 {#related-content} -- [时间序列用例指南](/use-cases/time-series) +- [时间序列用例指南](/use-cases/time-series) \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/tuple-functions.md b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/tuple-functions.md index ea142b8d31c..10fa302b75f 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/tuple-functions.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/tuple-functions.md @@ -7,838 +7,25 @@ doc_type: 'reference' --- :::note -以下文档是根据 `system.functions` 系统表生成的。 +下述文档内容是根据 `system.functions` 系统表生成的。 ::: {/* - 下面标签内的内容会在构建文档框架时,被替换为根据 system.functions 生成的文档。 - 请不要修改或移除这些标签。 + 下面这些标签的内容会在文档框架构建期间, + 被从 system.functions 生成的文档所替换。请不要修改或移除这些标签。 参见:https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## flattenTuple - -引入于:v22.6 - -将具名的嵌套 `tuple` 扁平化。 -返回的 `tuple` 中的每个元素表示输入 `tuple` 中对应元素的路径。 - -**语法** - -```sql -flattenTuple(input) -``` - -**参数** - -* `input` — 要展平的具名嵌套 `Tuple`。[`Tuple(n1 T1[, n2 T2, ... ])`](/sql-reference/data-types/tuple) - -**返回值** - -返回一个输出 `Tuple`,其元素为原始输入中的路径。[`Tuple(T)`](/sql-reference/data-types/tuple) - -**示例** - -**用法示例** - -```sql title=Query -CREATE TABLE tab(t Tuple(a UInt32, b Tuple(c String, d UInt32))) ENGINE = MergeTree ORDER BY tuple(); -INSERT INTO tab VALUES ((3, ('c', 4))); - -SELECT flattenTuple(t) FROM tab; -``` - -```response title=Response -┌─flattenTuple(t)┐ -│ (3, 'c', 4) │ -└────────────────┘ -``` - - -## tuple - -引入版本:v - -通过对输入参数进行分组来返回一个 tuple。 - -对于类型分别为 T1、T2、... 的列 C1、C2、...,如果这些列名是唯一的并且可以视为未带引号的标识符,则返回一个命名的 `Tuple(C1 T1, C2 T2, ...)` 类型的 tuple,包含这些列;否则返回 `Tuple(T1, T2, ...)`。执行该函数没有额外开销。 -tuple 通常用作 IN 运算符参数的中间值,或用于创建 lambda 函数的形式参数列表。tuple 不能写入表中。 - -该函数实现了运算符 `(x, y, ...)`。 - -**语法** - -```sql -``` - -**参数** - -* 无。 - -**返回值** - -**示例** - -**典型示例** - -```sql title=Query -SELECT tuple(1, 2) -``` - -```response title=Response -(1,2) -``` - - -## tupleConcat - -自 v23.8 起引入 - -将作为参数传入的 `tuple` 合并为一个元组。 - -**语法** - -```sql -tupleConcat(tuple1[, tuple2, [...]]) -``` - -**参数** - -* `tupleN` — 任意数量的 `Tuple` 类型参数。[`Tuple(T)`](/sql-reference/data-types/tuple) - -**返回值** - -返回一个元组,包含所有输入元组中的所有元素。[`Tuple(T)`](/sql-reference/data-types/tuple) - -**示例** - -**使用示例** - -```sql title=Query -SELECT tupleConcat((1, 2), ('a',), (true, false)) -``` - -```response title=Response -(1, 2, 'a', true, false) -``` - - -## tupleDivide - -引入版本:v21.11 - -计算两个相同长度元组(tuple)中对应元素的商。 - -:::note -当除数为零时,将返回 `inf`。 -::: - -**语法** - -```sql -tupleDivide(t1, t2) -``` - -**参数** - -* `t1` — 第一个元组。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Float*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Decimal)`](/sql-reference/data-types/tuple) -* `t2` — 第二个元组。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Float*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**返回值** - -返回一个包含除法结果的元组。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Float*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**示例** - -**基本用法** - -```sql title=Query -SELECT tupleDivide((1, 2), (2, 3)) -``` - -```response title=Response -(0.5, 0.6666666666666666) -``` - - -## tupleDivideByNumber - -自 v21.11 引入 - -返回一个元组,其中所有元素都除以指定的数。 - -:::note -除以零将返回 `inf`。 -::: - -**语法** - -```sql -tupleDivideByNumber(tuple, number) -``` - -**参数** - -* `tuple` — 要进行除法运算的元组。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Float*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Decimal)`](/sql-reference/data-types/tuple) -* `number` — 除数。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) - -**返回值** - -返回一个其各元素均已被给定除数除以后的元组。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Float*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**示例** - -**基本用法** - -```sql title=Query -SELECT tupleDivideByNumber((1, 2), 0.5) -``` - -```response title=Response -(2, 4) -``` - - -## tupleElement - -引入版本:v1.1 - -按索引或名称从元组中提取元素。 - -按索引访问时,索引从 1 开始计数。 -按名称访问时,可以将元素名称以字符串形式提供(仅适用于具名元组)。 - -可选的第三个参数用于指定一个默认值,当访问的元素不存在时,将返回该默认值而不是抛出异常。 -所有参数必须是常量。 - -该函数在运行时没有任何开销,并实现了运算符 `x.index` 和 `x.name`。 - -**语法** - -```sql -tupleElement(tuple, index|name[, default_value]) -``` - -**参数** - -* `tuple` — 一个元组或元组数组。[`Tuple(T)`](/sql-reference/data-types/tuple) 或 [`Array(Tuple(T))`](/sql-reference/data-types/array) -* `index` — 列索引,从 1 开始计数。[`const UInt8/16/32/64`](/sql-reference/data-types/int-uint) -* `name` — 元素名称。[`const String`](/sql-reference/data-types/string) -* `default_value` — 当索引越界或元素不存在时返回的默认值。[`Any`](/sql-reference/data-types) - -**返回值** - -返回指定索引或名称对应的元素。[`Any`](/sql-reference/data-types) - -**示例** - -**按索引访问** - -```sql title=Query -SELECT tupleElement((1, 'hello'), 2) -``` - -```response title=Response -你好 -``` - -**包含表的命名元组** - -```sql title=Query -CREATE TABLE example (values Tuple(name String, age UInt32)) ENGINE = Memory; -INSERT INTO example VALUES (('Alice', 30)); -SELECT tupleElement(values, 'name') FROM example; -``` - -```response title=Response -Alice -``` - -**使用默认值** - -```sql title=Query -SELECT tupleElement((1, 2), 5, 'not_found') -``` - -```response title=Response -not_found -``` - -**运算符语法** - -```sql title=Query -SELECT (1, 'hello').2 -``` - -```response title=Response -你好 -``` - - -## tupleHammingDistance - -引入于:v21.1 - -返回两个长度相同的元组之间的[汉明距离](https://en.wikipedia.org/wiki/Hamming_distance)。 - -:::note -结果类型的确定方式与[算术函数](../../sql-reference/functions/arithmetic-functions.md)相同,取决于输入元组中的元素数量。 - -```sql -SELECT - toTypeName(tupleHammingDistance(tuple(0), tuple(0))) AS t1, - toTypeName(tupleHammingDistance((0, 0), (0, 0))) AS t2, - toTypeName(tupleHammingDistance((0, 0, 0), (0, 0, 0))) AS t3, - toTypeName(tupleHammingDistance((0, 0, 0, 0), (0, 0, 0, 0))) AS t4, - toTypeName(tupleHammingDistance((0, 0, 0, 0, 0), (0, 0, 0, 0, 0))) AS t5 -``` - -```text -┌─t1────┬─t2─────┬─t3─────┬─t4─────┬─t5─────┐ -│ UInt8 │ UInt16 │ UInt32 │ UInt64 │ UInt64 │ -└───────┴────────┴────────┴────────┴────────┘ -``` - -::: - -**语法** - -```sql -tupleHammingDistance(t1, t2) -``` - -**参数** - -* `t1` — 第一个元组。[`Tuple(*)`](/sql-reference/data-types/tuple) -* `t2` — 第二个元组。[`Tuple(*)`](/sql-reference/data-types/tuple) - -**返回值** - -返回汉明距离。[`UInt8/16/32/64`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT tupleHammingDistance((1, 2, 3), (3, 2, 1)) -``` - -```response title=Response -2 -``` - -**使用 MinHash 检测近似重复字符串** - -```sql title=Query -SELECT tupleHammingDistance(wordShingleMinHash(string), wordShingleMinHashCaseInsensitive(string)) FROM (SELECT 'ClickHouse 是一个列式数据库管理系统,用于在线分析处理查询。' AS string) -``` - -```response title=Response -2 -``` - - -## tupleIntDiv - -引入版本:v23.8 - -对一个分子元组和一个分母元组执行整数除法。返回商的元组。 -如果任一元组包含非整数元素,则会先将每个非整数分子或除数四舍五入到最接近的整数,再计算结果。 -以 0 为除数会抛出错误。 - -**语法** - -```sql -tupleIntDiv(tuple_num, tuple_div) -``` - -**参数** - -* `tuple_num` — 分子值的元组。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Float*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Decimal)`](/sql-reference/data-types/tuple) -* `tuple_div` — 分母值的元组。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Float*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**返回值** - -返回一个包含商的元组。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Float*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**示例** - -**基本用法** - -```sql title=Query -SELECT tupleIntDiv((15, 10, 5), (5, 5, 5)) -``` - -```response title=Response -(3, 2, 1) -``` - -**含小数** - -```sql title=Query -SELECT tupleIntDiv((15, 10, 5), (5.5, 5.5, 5.5)) -``` - -```response title=Response -(2, 1, 0) -``` - - -## tupleIntDivByNumber - -引入版本:v23.8 - -对一个由分子组成的 `tuple` 按给定的分母执行整数除法,并返回由商组成的 `tuple`。 -如果任一输入参数中包含非整数元素,则会先将每个非整数分子或分母四舍五入到最接近的整数,再计算结果。 -当除数为 0 时会抛出错误。 - -**语法** - -```sql -tupleIntDivByNumber(tuple_num, div) -``` - -**参数** - -* `tuple_num` — 分子值的元组。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Float*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Decimal)`](/sql-reference/data-types/tuple) -* `div` — 除数值。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) - -**返回值** - -返回商的元组。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Float*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**示例** - -**基本用法** - -```sql title=Query -SELECT tupleIntDivByNumber((15, 10, 5), 5) -``` - -```response title=Response -(3, 2, 1) -``` - -**包含小数位** - -```sql title=Query -SELECT tupleIntDivByNumber((15.2, 10.7, 5.5), 5.8) -``` - -```response title=Response -(2, 1, 0) -``` - - -## tupleIntDivOrZero - -引入版本:v23.8 - -与 [`tupleIntDiv`](#tupleIntDiv) 类似,对一个分子元组和一个分母元组执行整数除法,并返回商的元组。 -当除数为 0 时,会将对应的商返回为 0,而不是抛出异常。 -如果任一元组包含非整数元素,则会先将每个非整数分子或除数四舍五入到最接近的整数,然后再计算结果。 - -**语法** - -```sql -tupleIntDivOrZero(tuple_num, tuple_div) -``` - -**参数** - -* `tuple_num` — 分子值的元组。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Float*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Decimal)`](/sql-reference/data-types/tuple) -* `tuple_div` — 除数的元组。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Float*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**返回值** - -返回商的元组。对于除数为 0 的情况返回商 0。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Float*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**示例** - -**包含零除数的情况** - -```sql title=Query -SELECT tupleIntDivOrZero((5, 10, 15), (0, 0, 0)) -``` - -```response title=Response -(0, 0, 0) -``` - - -## tupleIntDivOrZeroByNumber - -首次引入于:v23.8 - -与 [`tupleIntDivByNumber`](#tupleIntDivByNumber) 类似,该函数对一个由被除数组成的 `tuple` 与给定除数执行整数除法,并返回由商组成的 `tuple`。 -它不会因除数为零而抛出错误,而是将对应位置的商返回为零。 -如果 `tuple` 或除数中包含非整数元素,则会先将每个非整数的被除数或除数四舍五入到最接近的整数,再计算结果。 - -**语法** - -```sql -tupleIntDivOrZeroByNumber(tuple_num, div) -``` - -**参数** - -* `tuple_num` — 分子值的元组。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Float*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Decimal)`](/sql-reference/data-types/tuple) -* `div` — 除数的值。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) - -**返回值** - -返回一个由各个商组成的元组,对于除数为 `0` 的位置,其商为 `0`。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Float*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**示例** - -**基本用法** - -```sql title=Query -SELECT tupleIntDivOrZeroByNumber((15, 10, 5), 5) -``` - -```response title=Response -(3, 2, 1) -``` - -**除数为零时** - -```sql title=Query -SELECT tupleIntDivOrZeroByNumber((15, 10, 5), 0) -``` - -```response title=Response -(0, 0, 0) -``` - - -## tupleMinus - -自 v21.11 版本引入 - -计算两个大小相同的元组中对应元素的差值。 - -**语法** - -```sql -tupleMinus(t1, t2) -``` - -**别名**: `vectorDifference` - -**参数** - -* `t1` — 第一个元组。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Float*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Decimal)`](/sql-reference/data-types/tuple) -* `t2` — 第二个元组。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Float*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**返回值** - -返回一个包含各项差值结果的元组。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Float*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**示例** - -**基本用法** - -```sql title=Query -SELECT tupleMinus((1, 2), (2, 3)) -``` - -```response title=Response -(-1, -1) -``` - - -## tupleModulo - -引入自:v23.8 - -返回一个元组,其中包含两个元组对应元素相除所得的余数(模)。 - -**语法** - -```sql -tupleModulo(tuple_num, tuple_mod) -``` - -**参数** - -* `tuple_num` — 分子值的元组。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Float*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Decimal)`](/sql-reference/data-types/tuple) -* `tuple_mod` — 模数值的元组。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Float*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**返回值** - -返回一个包含各次除法余数的元组。除以零会抛出错误。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Float*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**示例** - -**基本用法** - -```sql title=Query -SELECT tupleModulo((15, 10, 5), (5, 3, 2)) -``` - -```response title=Response -(0, 1, 1) -``` - - -## tupleModuloByNumber - -自 v23.8 起引入 - -返回一个元组,其中包含将输入元组各元素分别对给定除数取模(求余)得到的结果。 - -**语法** - -```sql -tupleModuloByNumber(tuple_num, div) -``` - -**参数** - -* `tuple_num` — 被除数元素构成的元组。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Float*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Decimal)`](/sql-reference/data-types/tuple) -* `div` — 除数的数值。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) - -**返回值** - -返回由各元素除法余数构成的元组。当除数为零时会抛出错误。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Float*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**示例** - -**基本用法** - -```sql title=Query -SELECT tupleModuloByNumber((15, 10, 5), 2) -``` - -```response title=Response -(1, 0, 1) -``` - - -## tupleMultiply - -自 v21.11 引入 - -计算两个长度相同的元组中对应元素的乘积。 - -**语法** - -```sql -tupleMultiply(t1, t2) -``` - -**参数** - -* `t1` — 第一个元组。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Float*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Decimal)`](/sql-reference/data-types/tuple) -* `t2` — 第二个元组。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Float*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**返回值** - -返回包含乘积结果的元组。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Float*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**示例** - -**基本用法** - -```sql title=Query -SELECT tupleMultiply((1, 2), (2, 3)) -``` - -```response title=Response -(2, 6) -``` - - -## tupleMultiplyByNumber - -自 v21.11 起提供 - -返回一个 tuple,其中所有元素都乘以指定数字。 - -**语法** - -```sql -tupleMultiplyByNumber(tuple, number) -``` - -**参数** - -* `tuple` — 要进行乘法运算的元组。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Float*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Decimal)`](/sql-reference/data-types/tuple) -* `number` — 乘数。[`(U)Int*`](/sql-reference/data-types/int-uint) 或 [`Float*`](/sql-reference/data-types/float) 或 [`Decimal`](/sql-reference/data-types/decimal) - -**返回值** - -返回一个其各元素均已相乘的元组。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Float*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**示例** - -**基本用法** - -```sql title=Query -SELECT tupleMultiplyByNumber((1, 2), -2.1) -``` - -```response title=Response -(-2.1, -4.2) -``` - - -## tupleNames - -引入版本:v - -将 tuple 转换为列名数组。对于形如 `Tuple(a T, b T, ...)` 的 tuple,它返回一个字符串数组,表示该 tuple 中具名列的名称。如果 tuple 元素没有显式名称,则会使用它们的索引作为列名。 - -**语法** - -```sql -``` - -**参数** - -* 无。 - -**返回值** - -**示例** - -**典型示例** - -```sql title=Query -SELECT tupleNames(tuple(1 as a, 2 as b)) -``` - -```response title=Response -['a','b'] -``` - - -## tupleNegate - -引入版本:v21.11 - -计算元组中各元素的相反数。 - -**语法** - -```sql -tupleNegate(t) -``` - -**参数** - -* `t` — 要取负的元组。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Float*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**返回值** - -返回一个取负结果的元组。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Float*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**示例** - -**基本用法** - -```sql title=Query -SELECT tupleNegate((1, 2)) -``` - -```response title=Response -(-1, -2) -``` - - -## tuplePlus - -自 v21.11 引入 - -计算两个相同长度元组中对应元素之和。 - -**语法** - -```sql -tuplePlus(t1, t2) -``` - -**别名**: `vectorSum` - -**参数** - -* `t1` — 第一个元组。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Float*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Decimal)`](/sql-reference/data-types/tuple) -* `t2` — 第二个元组。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Float*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**返回值** - -返回一个元组,包含各输入元组对应元素之和。[`Tuple((U)Int*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Float*)`](/sql-reference/data-types/tuple) 或 [`Tuple(Decimal)`](/sql-reference/data-types/tuple) - -**示例** - -**基本用法** - -```sql title=Query -SELECT tuplePlus((1, 2), (2, 3)) -``` - -```response title=Response -(3, 5) -``` - - -## tupleToNameValuePairs - -引入于:v21.9 - -将一个 tuple 转换为由 `(name, value)` 对组成的数组。 -例如,tuple `Tuple(n1 T1, n2 T2, ...)` 会被转换为 `Array(Tuple('n1', T1), Tuple('n2', T2), ...)`。 -tuple 中的所有值必须是相同类型。 - -**语法** - -```sql -tupleToNameValuePairs(tuple) -``` - -**参数** - -* `tuple` — 具有任意类型的值的命名元组。[`Tuple(n1 T1[, n2 T2, ...])`](/sql-reference/data-types/tuple) - -**返回值** - -返回包含 `(name, value)` 对的数组。[`Array(Tuple(String, T))`](/sql-reference/data-types/array) - -**示例** - -**命名元组** - -```sql title=Query -SELECT tupleToNameValuePairs(tuple(1593 AS user_ID, 2502 AS session_ID)) -``` - -```response title=Response -[('1', 1593), ('2', 2502)] -``` - -**未命名元组** - -```sql title=Query -SELECT tupleToNameValuePairs(tuple(3, 2, 1)) -``` - -```response title=Response -[('1', 3), ('2', 2), ('3', 1)] -``` - {/*AUTOGENERATED_END*/ } ## untuple -在调用处对 [tuple](/sql-reference/data-types/tuple) 元素执行语法替换。 +在调用处对 [tuple](/sql-reference/data-types/tuple) 元素执行句法替换。 -结果列的名称取决于具体实现,可能会发生变化。请不要对 `untuple` 的结果列名做任何假设。 +结果列的名称由具体实现决定,并且可能发生变化。请不要在使用 `untuple` 后依赖任何特定的列名。 **语法** @@ -850,7 +37,7 @@ untuple(x) **参数** -* `x` — 一个 `tuple` 函数、列,或由元素组成的元组。参见 [Tuple](../data-types/tuple.md)。 +* `x` — 一个 `tuple` 函数、列或元素构成的元组。参见 [Tuple](../data-types/tuple.md)。 **返回值** @@ -870,7 +57,7 @@ untuple(x) └─────┴────┴────┴────┴────┴────┴───────────┘ ``` -使用 `Tuple` 类型列作为 `untuple` 函数参数的示例: +将 `Tuple` 类型列用作 `untuple` 函数参数的示例: 查询: @@ -890,7 +77,7 @@ SELECT untuple(v6) FROM kv; └───────┴───────┘ ``` -`EXCEPT` 表达式使用示例: +使用 `EXCEPT` 表达式的示例: 查询: @@ -913,4 +100,4 @@ SELECT untuple((* EXCEPT (v2, v3),)) FROM kv; ## 距离函数 {#distance-functions} -所有受支持的函数都在[距离函数文档](../../sql-reference/functions/distance-functions.md)中进行了说明。 +所有受支持的函数在[距离函数文档](../../sql-reference/functions/distance-functions.md)中都有说明。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/ulid-functions.md b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/ulid-functions.md index 54387356d4b..1d1bf432a5d 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/ulid-functions.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/ulid-functions.md @@ -6,109 +6,23 @@ title: '用于处理 ULID 的函数' doc_type: 'reference' --- - - -# 用于处理 ULID 的函数 +# ULID 的处理函数 :::note -以下文档内容是从 `system.functions` 系统表生成的。 +下面的文档是从 `system.functions` 系统表生成的。 ::: {/* - 下方标签内的内容会在文档框架构建期间被替换为 - 由 system.functions 自动生成的文档。请不要修改或删除这些标签。 - 请参见:https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md + 下方标签内部的内容会在文档框架构建时 + 被替换为从 system.functions 生成的文档。请不要修改或删除这些标签。 + 参见:https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## ULIDStringToDateTime - -引入版本:v23.3 - -该函数用于从 [ULID](https://github.com/ulid/spec) 中提取时间戳。 - -**语法** - -```sql -ULIDStringToDateTime(ulid[, timezone]) -``` - -**参数** - -* `ulid` — 输入的 ULID。[`String`](/sql-reference/data-types/string) 或 [`FixedString(26)`](/sql-reference/data-types/fixedstring) -* `timezone` — 可选参数。返回值所使用的时区名称。[`String`](/sql-reference/data-types/string) - -**返回值** - -精确到毫秒的时间戳。[`DateTime64(3)`](/sql-reference/data-types/datetime64) - -**示例** - -**用法示例** - -```sql title=Query -SELECT ULIDStringToDateTime('01GNB2S2FGN2P93QPXDNB4EN2R') -``` - -```response title=Response -┌─ULIDStringToDateTime('01GNB2S2FGN2P93QPXDNB4EN2R')─┐ -│ 2022-12-28 00:40:37.616 │ -└────────────────────────────────────────────────────┘ -``` - - -## generateULID - -自 v23.2 起引入。 - -生成一个[通用唯一按字典序可排序标识符(ULID)](https://github.com/ulid/spec)。 - -**语法** - -```sql -generateULID([x]) -``` - -**参数** - -* `x` — 可选。一个其结果为任意受支持数据类型的表达式。其结果值会被丢弃,但表达式本身可用于在一次查询中多次调用该函数时绕过[公共子表达式消除](/sql-reference/functions/overview#common-subexpression-elimination)。[`Any`](/sql-reference/data-types) - -**返回值** - -返回一个 ULID。[`FixedString(26)`](/sql-reference/data-types/fixedstring) - -**示例** - -**用法示例** - -```sql title=Query -SELECT generateULID() -``` - -```response title=Response -┌─generateULID()─────────────┐ -│ 01GNB2S2FGN2P93QPXDNB4EN2R │ -└────────────────────────────┘ -``` - -**在需要在同一行生成多个值时的用法示例** - -```sql title=Query -SELECT generateULID(1), generateULID(2) -``` - -```response title=Response -┌─generateULID(1)────────────┬─generateULID(2)────────────┐ -│ 01GNB2SGG4RHKVNT9ZGA4FFMNP │ 01GNB2SGG4V0HMQVH4VBVPSSRB │ -└────────────────────────────┴────────────────────────────┘ -``` - {/*AUTOGENERATED_END*/ } ## 另请参阅 {#see-also} -- [UUID](../../sql-reference/functions/uuid-functions.md) - +- [UUID](../../sql-reference/functions/uuid-functions.md) \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/url-functions.md b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/url-functions.md index 769b10c25f6..3fb094a1d25 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/url-functions.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/url-functions.md @@ -1,26 +1,22 @@ --- -description: 'URL 函数文档' -sidebar_label: 'URL' +description: '用于处理 URL 的函数的文档' +sidebar_label: 'URL 函数' slug: /sql-reference/functions/url-functions -title: 'URL 相关函数' +title: '处理 URL 的函数' doc_type: 'reference' --- +# 用于处理 URL 的函数 - -# 用于操作 URL 的函数 - - - -## 概览 +## 概述 :::note -本节中提到的函数为获得最高性能进行了优化,大多数情况下并不遵循 RFC-3986 标准。 -实现 RFC-3986 的函数在函数名后附加 `RFC`,且通常会较慢。 +本节中提到的函数为了获得尽可能高的性能而进行了优化,因此在大多数情况下不遵循 RFC 3986 标准。 +实现 RFC 3986 的函数会在函数名后附加 `RFC`,通常性能会较低。 ::: -在处理既不包含用户信息字符串也不包含 `@` 符号的公开注册域名时,一般可以使用非 `RFC` 变体函数。 -下表详细说明了 URL 中的各个符号在 `RFC` 与非 `RFC` 变体中可以(`✔`)或不可以(`✗`)被解析的情况: +在处理不包含用户信息字符串或 `@` 符号的公共注册域名时,一般可以使用非 `RFC` 版本的函数。 +下表详细说明了 URL 中的哪些符号可以(`✔`)或不可以(`✗`)被对应的 `RFC` 和非 `RFC` 版本解析: | Symbol | non-`RFC` | `RFC` | | | ----------- | --------- | ----- | - | @@ -41,1399 +37,23 @@ doc_type: 'reference' | = | ✗ | ✔* | | | & | ✗ | ✔* | | -标记为 `*` 的符号在 RFC 3986 中属于子分隔符(sub-delimiters),在 `@` 符号后的用户信息中是允许使用的。 +带有 `*` 标记的符号是 RFC 3986 中的子分隔符,并且在 `@` 符号之后的用户信息中是允许的。 URL 函数分为两类: -* 从 URL 中提取部分内容的函数。如果 URL 中不存在相关部分,则返回空字符串。 -* 从 URL 中移除部分内容的函数。如果 URL 中没有类似内容,则 URL 保持不变。 +* 提取 URL 某一部分的函数。若 URL 中不存在相关部分,则返回空字符串。 +* 移除 URL 某一部分的函数。若 URL 中不存在类似部分,则 URL 保持不变。 :::note -下面的函数是根据 `system.functions` 系统表生成的。 +下面列出的函数是从 `system.functions` 系统表中生成的。 ::: {/* - 下方标签内部的内容会在文档框架构建期间替换为 - 由 system.functions 生成的文档。请不要修改或移除这些标签。 - 详见:https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md + 下方标签的内部内容会在文档框架构建期间被替换为 + 从 system.functions 生成的文档。请不要修改或删除这些标签。 + 参见:https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## cutFragment - -自 v1.1 版本引入 - -从 URL 中移除片段标识符(包括 # 号)。 - -**语法** - -```sql -cutFragment(url) -``` - -**参数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回移除片段标识符后的 URL。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT cutFragment('http://example.com/path?query=value#fragment123'); -``` - -```response title=Response -┌─cutFragment('http://example.com/path?query=value#fragment123')─┐ -│ http://example.com/path?query=value │ -└────────────────────────────────────────────────────────────────┘ -``` - - -## cutQueryString - -引入版本:v1.1 - -从 URL 中移除查询字符串(包括问号)。 - -**语法** - -```sql -cutQueryString(url) -``` - -**参数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回去除查询字符串后的 URL。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT cutQueryString('http://example.com/path?query=value¶m=123#fragment'); -``` - -```response title=Response -┌─cutQueryString('http://example.com/path?query=value¶m=123#fragment')─┐ -│ http://example.com/path#fragment │ -└──────────────────────────────────────────────────────────────────────────┘ -``` - - -## cutQueryStringAndFragment - -自 v1.1 引入 - -从 URL 中移除查询字符串和片段标识符,连同问号(?)和井号(#)一并删除。 - -**语法** - -```sql -cutQueryStringAndFragment(url) -``` - -**参数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回去掉查询字符串和片段标识符的 URL。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT cutQueryStringAndFragment('http://example.com/path?query=value¶m=123#fragment'); -``` - -```response title=Response -┌─cutQueryStringAndFragment('http://example.com/path?query=value¶m=123#fragment')─┐ -│ http://example.com/path │ -└─────────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## cutToFirstSignificantSubdomain - -自 v1.1 版本引入 - -返回域名中,自顶级子域名起直到[第一个重要子域名](/sql-reference/functions/url-functions#firstSignificantSubdomain)的这部分。 - -**语法** - -```sql -cutToFirstSignificantSubdomain(url) -``` - -**参数** - -* `url` — 要处理的 URL 或域名字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回域名中从最高层子域到第一个重要子域的那一部分(如果可能),否则返回空字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT - cutToFirstSignificantSubdomain('https://news.clickhouse.com.tr/'), - cutToFirstSignificantSubdomain('www.tr'), - cutToFirstSignificantSubdomain('tr'); -``` - -```response title=Response -┌─cutToFirstSignificantSubdomain('https://news.clickhouse.com.tr/')─┬─cutToFirstSignificantSubdomain('www.tr')─┬─cutToFirstSignificantSubdomain('tr')─┐ -│ clickhouse.com.tr │ tr │ │ -└───────────────────────────────────────────────────────────────────┴──────────────────────────────────────────┴──────────────────────────────────────┘ -``` - - -## cutToFirstSignificantSubdomainCustom - -引入于:v21.1 - -返回域名中从顶级域及其子域开始直到第一个重要子域的部分。接受自定义的 [TLD 列表](https://en.wikipedia.org/wiki/List_of_Internet_top-level_domains) 名称。如果你需要一份最新的 TLD 列表或有自定义列表,此函数会很有用。 - -**配置示例** - -```yaml - - - - public_suffix_list.dat - - -``` - -**语法** - -```sql -cutToFirstSignificantSubdomainCustom(url, tld_list_name) -``` - -**参数** - -* `url` — 要处理的 URL 或域名字符串。[`String`](/sql-reference/data-types/string) -* `tld_list_name` — 在 ClickHouse 中配置的自定义 TLD 列表的名称。[`const String`](/sql-reference/data-types/string) - -**返回值** - -返回从顶级子域名开始直至第一个重要子域名的这部分域名字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**在非标准域名上使用自定义 TLD 列表** - -```sql title=Query -SELECT cutToFirstSignificantSubdomainCustom('bar.foo.there-is-no-such-domain', 'public_suffix_list') -``` - -```response title=Response -foo.there-is-no-such-domain -``` - - -## cutToFirstSignificantSubdomainCustomRFC - -引入版本:v22.10 - -返回域名中包含顶级子域名直到第一个关键子域名的部分。 -接受自定义的 [TLD 列表](https://en.wikipedia.org/wiki/List_of_Internet_top-level_domains)名称作为参数。 -如果你需要更新的 TLD 列表或有自定义列表时,此函数会很有用。 -类似于 [cutToFirstSignificantSubdomainCustom](#cutToFirstSignificantSubdomainCustom),但符合 RFC 3986。 - -**配置示例** - -```xml - - - - public_suffix_list.dat - - -``` - -**语法** - -```sql -cutToFirstSignificantSubdomainCustomRFC(url, tld_list_name) -``` - -**参数** - -* `url` — 按照 RFC 3986 规范处理的 URL 或域名字符串。- `tld_list_name` — 在 ClickHouse 中配置的自定义 TLD 列表名称。 - -**返回值** - -返回域名中从顶级子域开始,包含直到第一个重要子域在内的部分。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT cutToFirstSignificantSubdomainCustomRFC('www.foo', 'public_suffix_list'); -``` - -```response title=Response -┌─cutToFirstSignificantSubdomainCustomRFC('www.foo', 'public_suffix_list')─────┐ -│ www.foo │ -└──────────────────────────────────────────────────────────────────────────────┘ -``` - - -## cutToFirstSignificantSubdomainCustomWithWWW - -引入版本:v21.1 - -返回域名中包含顶级子域名、直至第一个重要子域名的部分,并且不会去掉 'www'。支持传入自定义 TLD 列表名称。如果你需要最新的 TLD 列表,或维护了自己的自定义列表,可以使用该参数。 - -**配置示例** - -````yaml - - - - public_suffix_list.dat - - - - -**语法** - -```sql -cutToFirstSignificantSubdomainCustomWithWWW(url, tld_list_name) -```` - -**参数** - -* `url` — 要处理的 URL 或域名字符串。 -* `tld_list_name` — 在 ClickHouse 中配置的自定义 TLD 列表名称。 - -**返回值** - -域名的一部分,包含顶层子域名,直到第一个有意义的子域名为止,并且不会去除 `www` 前缀。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT cutToFirstSignificantSubdomainCustomWithWWW('www.foo', 'public_suffix_list'); -``` - -```response title=Response -┌─cutToFirstSignificantSubdomainCustomWithWWW('www.foo', 'public_suffix_list')─┐ -│ www.foo │ -└──────────────────────────────────────────────────────────────────────────────┘ -``` - - -## cutToFirstSignificantSubdomainCustomWithWWWRFC - -引入版本:v22.10 - -返回域名中从包含顶级子域名开始,到第一个关键子域名为止的那一部分,但不会去掉 `www`。 -支持自定义 TLD 列表名称。 -在需要最新 TLD 列表或使用自定义列表时,这会很有用。 -类似于 [cutToFirstSignificantSubdomainCustomWithWWW](#cutToFirstSignificantSubdomainCustomWithWWW),但符合 [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986)。 - -**配置示例** - -````xml - - - - public_suffix_list.dat - - - - -**语法** - -```sql -cutToFirstSignificantSubdomainCustomWithWWWRFC(url, tld_list_name) -```` - -**参数** - -* `url` — 按 RFC 3986 进行解析的 URL 或域名字符串。 -* `tld_list_name` — 在 ClickHouse 中配置的自定义 TLD 列表名称。 - -**返回值** - -返回域名中包含顶层子域在内、直到第一个重要子域为止的部分,并且不会移除 `www`。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用自定义 TLD 列表并保留 www 的 RFC 3986 解析** - -```sql title=Query -SELECT cutToFirstSignificantSubdomainCustomWithWWWRFC('https://www.subdomain.example.custom', 'public_suffix_list') -``` - -```response title=Response -www.example.custom -``` - - -## cutToFirstSignificantSubdomainRFC - -引入版本:v22.10 - -返回域名中从顶级子域起、包含至[“首个重要子域”](/sql-reference/functions/url-functions#firstSignificantSubdomain)的部分。类似于 [`cutToFirstSignificantSubdomain`](#cutToFirstSignificantSubdomain),但符合 [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986)。 - -**语法** - -```sql -cutToFirstSignificantSubdomainRFC(url) -``` - -**参数** - -* `url` — 按照 RFC 3986 规范处理的 URL 或域名字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回包含顶级子域名直至第一个重要子域名的那一部分域名;如果无法提取,则返回空字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT - cutToFirstSignificantSubdomain('http://user:password@example.com:8080'), - cutToFirstSignificantSubdomainRFC('http://user:password@example.com:8080'); -``` - -```response title=Response -┌─cutToFirstSignificantSubdomain('http://user:password@example.com:8080')─┬─cutToFirstSignificantSubdomainRFC('http://user:password@example.com:8080')─┐ -│ │ example.com │ -└─────────────────────────────────────────────────────────────────────────┴────────────────────────────────────────────────────────────────────────────┘ -``` - - -## cutToFirstSignificantSubdomainWithWWW - -引入版本:v20.12 - -返回域名中从顶级子域开始直到“第一个重要子域”的那一部分,且不会去除 '[www](http://www).'。 - -与 [`cutToFirstSignificantSubdomain`](#cutToFirstSignificantSubdomain) 类似,但如果存在,则保留 '[www](http://www).' 前缀。 - -**语法** - -```sql -cutToFirstSignificantSubdomainWithWWW(url) -``` - -**参数** - -* `url` — 要处理的 URL 或域名字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回域名中从顶级子域到第一个重要子域(包含 www)的部分(如果可能),否则返回空字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT - cutToFirstSignificantSubdomainWithWWW('https://news.clickhouse.com.tr/'), - cutToFirstSignificantSubdomainWithWWW('www.tr'), - cutToFirstSignificantSubdomainWithWWW('tr'); -``` - -```response title=Response -┌─cutToFirstSignificantSubdomainWithWWW('https://news.clickhouse.com.tr/')─┬─cutToFirstSignificantSubdomainWithWWW('www.tr')─┬─cutToFirstSignificantSubdomainWithWWW('tr')─┐ -│ clickhouse.com.tr │ www.tr │ │ -└──────────────────────────────────────────────────────────────────────────┴─────────────────────────────────────────────────┴─────────────────────────────────────────────┘ -``` - - -## cutToFirstSignificantSubdomainWithWWWRFC - -引入版本:v22.10 - -返回域名中从顶级子域到“第一个重要子域”为止的部分,且不去除 'www'。类似于 [`cutToFirstSignificantSubdomainWithWWW`](#cutToFirstSignificantSubdomainWithWWW),但符合 [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986) 规范。 - -**语法** - -```sql -cutToFirstSignificantSubdomainWithWWWRFC(url) -``` - -**参数** - -* `url` — 按照 RFC 3986 规范处理的 URL 或域名字符串。 - -**返回值** - -返回域名中包含自顶级域起直到第一个重要子域(如有则包含 'www')的部分,否则返回空字符串 [`String`](/sql-reference/data-types/string)。 - -**示例** - -**用法示例** - -```sql title=Query -SELECT - cutToFirstSignificantSubdomainWithWWW('http:%2F%2Fwwwww.nova@mail.ru/economicheskiy'), - cutToFirstSignificantSubdomainWithWWWRFC('http:%2F%2Fwwwww.nova@mail.ru/economicheskiy'); -``` - -```response title=Response -┌─cutToFirstSignificantSubdomainWithWWW('http:%2F%2Fwwwww.nova@mail.ru/economicheskiy')─┬─cutToFirstSignificantSubdomainWithWWWRFC('http:%2F%2Fwwwww.nova@mail.ru/economicheskiy')─┐ -│ │ mail.ru │ -└───────────────────────────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## cutURLParameter - -引入版本:v1.1 - -从 URL 中移除名为 `name` 的参数(如果存在)。 -此函数不会对参数名中的字符进行编码或解码,例如,`Client ID` 和 `Client%20ID` 会被视为不同的参数名。 - -**语法** - -```sql -cutURLParameter(url, name) -``` - -**参数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) -* `name` — URL 参数的名称。[`String`](/sql-reference/data-types/string) 或 [`Array(String)`](/sql-reference/data-types/array) - -**返回值** - -删除了名为 `name` 的 URL 参数后的 URL。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT - cutURLParameter('http://bigmir.net/?a=b&c=d&e=f#g', 'a') AS url_without_a, - cutURLParameter('http://bigmir.net/?a=b&c=d&e=f#g', ['c', 'e']) AS url_without_c_and_e; -``` - -```response title=Response -┌─url_without_a────────────────┬─url_without_c_and_e──────┐ -│ http://bigmir.net/?c=d&e=f#g │ http://bigmir.net/?a=b#g │ -└──────────────────────────────┴──────────────────────────┘ -``` - - -## cutWWW - -在 v1.1 中引入 - -从 URL 的域名中移除开头的 `www.`(如果存在)。 - -**语法** - -```sql -cutWWW(url) -``` - -**参数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回将域名开头的 `www.` 移除后的 URL。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT cutWWW('http://www.example.com/path?query=value#fragment'); -``` - -```response title=Response -┌─cutWWW('http://www.example.com/path?query=value#fragment')─┐ -│ http://example.com/path?query=value#fragment │ -└────────────────────────────────────────────────────────────┘ -``` - - -## decodeURLComponent - -自 v1.1 起引入 - -接受一个经过 URL 编码的字符串作为输入,并将其解码为原始的可读形式。 - -**语法** - -```sql -decodeURLComponent(url) -``` - -**参数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回解码后的 URL。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT decodeURLComponent('http://127.0.0.1:8123/?query=SELECT%201%3B') AS DecodedURL; -``` - -```response title=Response -┌─DecodedURL─────────────────────────────┐ -│ http://127.0.0.1:8123/?query=SELECT 1; │ -└────────────────────────────────────────┘ -``` - - -## decodeURLFormComponent - -自 v1.1 起引入 - -使用表单编码规则([RFC-1866](https://www.rfc-editor.org/rfc/rfc1866.html))对 URL 编码的字符串进行解码,其中 `+` 号会被转换为空格,百分号编码的字符会被解码。 - -**语法** - -```sql -decodeURLFormComponent(url) -``` - -**参数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回解码后的 URL。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT decodeURLFormComponent('http://127.0.0.1:8123/?query=SELECT%201+2%2B3') AS DecodedURL; -``` - -```response title=Response -┌─DecodedURL────────────────────────────────┐ -│ http://127.0.0.1:8123/?query=SELECT 1 2+3 │ -└───────────────────────────────────────────┘ -``` - - -## domain - -自 v1.1 起引入 - -从 URL 中提取主机名。 - -URL 可以带协议或不带协议。 - -**语法** - -```sql -domain(url) -``` - -**参数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) - -**返回值** - -如果输入字符串可以解析为 URL,则返回主机名,否则返回空字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT domain('svn+ssh://some.svn-hosting.com:80/repo/trunk'); -``` - -```response title=Response -┌─domain('svn+ssh://some.svn-hosting.com:80/repo/trunk')─┐ -│ some.svn-hosting.com │ -└────────────────────────────────────────────────────────┘ -``` - - -## domainRFC - -自 v22.10 版本引入 - -从 URL 中提取主机名。 -类似于 [`domain`](#domain),但符合 [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986) 规范。 - -**语法** - -```sql -domainRFC(url) -``` - -**参数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) - -**返回值** - -若输入字符串可以解析为 URL,则返回主机名;否则返回空字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT - domain('http://user:password@example.com:8080/path?query=value#fragment'), - domainRFC('http://user:password@example.com:8080/path?query=value#fragment'); -``` - -```response title=Response -┌─domain('http://user:password@example.com:8080/path?query=value#fragment')─┬─domainRFC('http://user:password@example.com:8080/path?query=value#fragment')─┐ -│ │ example.com │ -└───────────────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────────────────────────┘ -``` - - -## domainWithoutWWW - -引入于:v1.1 - -返回 URL 的域名,如果存在前缀 `www.`,则去除该前缀。 - -**语法** - -```sql -domainWithoutWWW(url) -``` - -**参数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) - -**返回值** - -如果输入字符串可以解析为 URL,则返回其域名(不带前缀 `www.`),否则返回空字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT domainWithoutWWW('http://paul@www.example.com:80/'); -``` - -```response title=Response -┌─domainWithoutWWW('http://paul@www.example.com:80/')─┐ -│ example.com │ -└─────────────────────────────────────────────────────┘ -``` - - -## domainWithoutWWWRFC - -自 v1.1 引入 - -返回去掉前缀 `www.` 的域名(若存在)。类似于 [`domainWithoutWWW`](#domainWithoutWWW),但符合 [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986)。 - -**语法** - -```sql -domainWithoutWWWRFC(url) -``` - -**参数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) - -**返回值** - -如果输入字符串可以解析为 URL,则返回域名(不包含前缀 `www.`),否则返回空字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT - domainWithoutWWW('http://user:password@www.example.com:8080/path?query=value#fragment'), - domainWithoutWWWRFC('http://user:password@www.example.com:8080/path?query=value#fragment'); -``` - -```response title=Response -┌─domainWithoutWWW('http://user:password@www.example.com:8080/path?query=value#fragment')─┬─domainWithoutWWWRFC('http://user:password@www.example.com:8080/path?query=value#fragment')─┐ -│ │ example.com │ -└─────────────────────────────────────────────────────────────────────────────────────────┴────────────────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## encodeURLComponent - -引入版本:v22.3 - -接收一个常规字符串并将其转换为 URL 编码(百分号编码)格式,其中特殊字符会被替换为对应的百分号编码。 - -**语法** - -```sql -encodeURLComponent(url) -``` - -**参数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回编码后的 URL。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT encodeURLComponent('http://127.0.0.1:8123/?query=SELECT 1;') AS EncodedURL; -``` - -```response title=Response -┌─EncodedURL───────────────────────────────────────────────┐ -│ http%3A%2F%2F127.0.0.1%3A8123%2F%3Fquery%3DSELECT%201%3B │ -└──────────────────────────────────────────────────────────┘ -``` - - -## encodeURLFormComponent - -引入版本:v22.3 - -使用表单编码规则([RFC-1866](https://www.rfc-editor.org/rfc/rfc1866.html))对字符串进行编码,其中空格会被转换为加号 (+),特殊字符会被百分号编码。 - -**语法** - -```sql -encodeURLFormComponent(url) -``` - -**参数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回编码后的 URL。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT encodeURLFormComponent('http://127.0.0.1:8123/?query=SELECT 1 2+3') AS EncodedURL; -``` - -```response title=Response -┌─编码后的 URL──────────────────────────────────────────────┐ -│ http%3A%2F%2F127.0.0.1%3A8123%2F%3Fquery%3DSELECT+1+2%2B3 │ -└───────────────────────────────────────────────────────────┘ -``` - - -## extractURLParameter - -引入于:v1.1 - -返回 URL 中名为 `name` 的参数的值(如果存在),否则返回空字符串。\ -如果存在多个同名参数,则返回首次出现的值。\ -该函数假定 `url` 参数中的参数编码方式与传入 `name` 参数时使用的编码方式相同。 - -**语法** - -```sql -extractURLParameter(url, name) -``` - -**参数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) -* `name` — 参数名称。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回 URL 中指定名称参数的值。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT extractURLParameter('http://example.com/?param1=value1¶m2=value2', 'param1'); -``` - -```response title=Response -┌─extractURLPa⋯, 'param1')─┐ -│ value1 │ -└──────────────────────────┘ -``` - - -## extractURLParameterNames - -自 v1.1 起引入 - -返回一个字符串数组,其中的每个字符串是一个 URL 参数的名称。 -这些值不会被解码。 - -**语法** - -```sql -extractURLParameterNames(url) -``` - -**参数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回一个字符串数组,包含 URL 参数的名称。[`Array(String)`](/sql-reference/data-types/array) - -**示例** - -**用法示例** - -```sql title=Query -SELECT extractURLParameterNames('http://example.com/?param1=value1¶m2=value2'); -``` - -```response title=Response -┌─extractURLPa⋯m2=value2')─┐ -│ ['param1','param2'] │ -└──────────────────────────┘ -``` - - -## extractURLParameters - -自 v1.1 起可用 - -返回一个字符串数组,每个元素为对应 URL 参数的 `name=value` 形式。 -参数值不会被解码。 - -**语法** - -```sql -extractURLParameters(url) -``` - -**参数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回一个数组,其中每个元素都是与 URL 参数对应的 `name=value` 字符串。[`Array(String)`](/sql-reference/data-types/array) - -**示例** - -**用法示例** - -```sql title=Query -SELECT extractURLParameters('http://example.com/?param1=value1¶m2=value2'); -``` - -```response title=Response -┌─extractURLParame⋯¶m2=value2')─┐ -│ ['param1=value1','param2=value2'] │ -└───────────────────────────────────┘ -``` - - -## firstSignificantSubdomain - -引入版本:v - -返回“首个重要子域名”。 - -如果二级域名是 'com'、'net'、'org' 或 'co',则首个重要子域名是对应的三级域名。 -否则,首个重要子域名就是二级域名。 - -例如,firstSignificantSubdomain('[https://news.clickhouse.com/](https://news.clickhouse.com/)') = 'clickhouse',firstSignificantSubdomain('[https://news.clickhouse.com.tr/](https://news.clickhouse.com.tr/)') = 'clickhouse'。 - -“不重要”的二级域名列表及其他实现细节在未来可能会发生变化。 - -**语法** - -```sql -``` - -**参数** - -* 无。 - -**返回值** - -**示例** - -**firstSignificantSubdomain** - -```sql title=Query -SELECT firstSignificantSubdomain('https://news.clickhouse.com/') -``` - -```response title=Response -``` - - -## firstSignificantSubdomainRFC - -自 v 版本引入。 - -根据 RFC 1034 返回“第一个重要子域名”。 - -**语法** - -```sql -``` - -**参数** - -* 无 - -**返回值** - -**示例** - - -## fragment - -引入版本:v1.1 - -返回不带开头 `#` 号的片段标识符。 - -**语法** - -```sql -片段(url) -``` - -**参数** - -* `url` — URL 地址。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回不包含开头井号符号(#)的片段标识符。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT fragment('https://clickhouse.com/docs/getting-started/quick-start/cloud#1-create-a-clickhouse-service'); -``` - -```response title=Response -┌─fragment('http⋯ouse-service')─┐ -│ 1-创建-ClickHouse-服务 │ -└───────────────────────────────┘ -``` - - -## netloc - -自 v20.5 引入 - -从 URL 中提取网络定位部分(`username:password@host:port`)。 - -**语法** - -```sql -netloc(url) -``` - -**参数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) - -**返回值** - -从给定的 URL 中返回 `username:password@host:port`。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT netloc('http://paul@www.example.com:80/'); -``` - -```response title=Response -┌─netloc('http⋯e.com:80/')─┐ -│ paul@www.example.com:80 │ -└──────────────────────────┘ -``` - - -## path - -自 v1.1 版本引入 - -返回 URL 中不包含查询字符串的路径。 - -**语法** - -```sql -路径(网址) -``` - -**参数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回不包含查询字符串的 URL 路径部分。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT path('https://clickhouse.com/docs/sql-reference/functions/url-functions/?query=value'); -``` - -```response title=Response -┌─path('https://clickhouse.com/en/sql-reference/functions/url-functions/?query=value')─┐ -│ /docs/sql-reference/functions/url-functions/ │ -└──────────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## pathFull - -自 v1.1 引入 - -与 [`path`](#path) 相同,但还包括 URL 的查询字符串和片段。 - -**语法** - -```sql -pathFull(url) -``` - -**参数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回 URL 的路径(包含查询字符串和片段)。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT pathFull('https://clickhouse.com/docs/sql-reference/functions/url-functions/?query=value#section'); -``` - -```response title=Response -┌─pathFull('https://clickhouse.com⋯unctions/?query=value#section')─┐ -│ /docs/sql-reference/functions/url-functions/?query=value#section │ -└──────────────────────────────────────────────────────────────────┘ -``` - - -## port - -自 v20.5 起引入 - -返回 URL 的端口号;如果 URL 不包含端口或无法解析,则返回 `default_port`。 - -**语法** - -```sql -port(url[, default_port]) -``` - -**参数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) -* `default_port` — 可选。要返回的默认端口号。默认值为 `0`。[`UInt16`](/sql-reference/data-types/int-uint) - -**返回值** - -返回 URL 的端口;如果 URL 中没有端口或发生校验错误,则返回默认端口。[`UInt16`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT port('https://clickhouse.com:8443/docs'), port('https://clickhouse.com/docs', 443); -``` - -```response title=Response -┌─port('https://clickhouse.com:8443/docs')─┬─port('https://clickhouse.com/docs', 443)─┐ -│ 8443 │ 443 │ -└──────────────────────────────────────────┴──────────────────────────────────────────┘ -``` - - -## portRFC - -引入版本:v22.10 - -返回 URL 中的端口号;如果 URL 不包含端口或无法解析,则返回 `default_port`。 -类似于 [`port`](#port),但符合 [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986) 规范。 - -**语法** - -```sql -portRFC(url[, default_port]) -``` - -**参数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) -* `default_port` — 可选。要返回的默认端口号,默认为 `0`。[`UInt16`](/sql-reference/data-types/int-uint) - -**返回值** - -返回端口号;如果 URL 中没有端口或发生验证错误,则返回默认端口。[`UInt16`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -SELECT port('http://user:password@example.com:8080/'), portRFC('http://user:password@example.com:8080/'); -``` - -```response title=Response -┌─port('http:/⋯com:8080/')─┬─portRFC('htt⋯com:8080/')─┐ -│ 0 │ 8080 │ -└──────────────────────────┴──────────────────────────┘ -``` - - -## protocol - -自 v1.1 版本引入 - -从 URL 中提取协议。 - -典型返回值示例:http、https、ftp、mailto、tel、magnet。 - -**语法** - -```sql -协议(url) -``` - -**参数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回 URL 的协议;如果无法确定,则返回空字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT protocol('https://clickhouse.com/'); -``` - -```response title=Response -┌─protocol('https://clickhouse.com/')─┐ -│ https │ -└─────────────────────────────────────┘ -``` - - -## queryString - -引入于:v1.1 - -返回 URL 的查询字符串,不包括开头的问号,以及 `#` 字符及其后所有内容。 - -**语法** - -```sql -queryString(url) -``` - -**参数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回去掉开头问号和片段标识符后的 URL 查询字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT queryString('https://clickhouse.com/docs?query=value¶m=123#section'); -``` - -```response title=Response -┌─queryString(⋯3#section')─┐ -│ query=value¶m=123 │ -└──────────────────────────┘ -``` - - -## queryStringAndFragment - -自 v1.1 引入 - -返回 URL 的查询字符串和片段标识符。 - -**语法** - -```sql -queryStringAndFragment(url) -``` - -**参数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回 URL 的查询字符串和片段标识符。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT queryStringAndFragment('https://clickhouse.com/docs?query=value¶m=123#section'); -``` - -```response title=Response -┌─queryStringAnd⋯=123#section')─┐ -│ query=value¶m=123#section │ -└───────────────────────────────┘ -``` - - -## topLevelDomain - -自 v1.1 起引入 - -从 URL 中提取顶级域名。 - -:::note -URL 可以带协议或不带协议。 -例如: - -```text -svn+ssh://some.svn-hosting.com:80/repo/trunk -some.svn-hosting.com:80/repo/trunk -https://clickhouse.com/time/ -``` - -::: - -**语法** - -```sql -顶级域名(url) -``` - -**参数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) - -**返回值** - -如果输入字符串可以解析为 URL,则返回域名;否则返回空字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**用法示例** - -```sql title=Query -SELECT topLevelDomain('svn+ssh://www.some.svn-hosting.com:80/repo/trunk'); -``` - -```response title=Response -┌─topLevelDomain('svn+ssh://www.some.svn-hosting.com:80/repo/trunk')─┐ -│ com │ -└────────────────────────────────────────────────────────────────────┘ -``` - - -## topLevelDomainRFC - -自 v22.10 版本引入 - -从 URL 中提取顶级域名部分。 -类似于 [`topLevelDomain`](#topLevelDomain),但符合 [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986)。 - -**语法** - -```sql -topLevelDomainRFC(url) -``` - -**参数** - -* `url` — URL。[`String`](/sql-reference/data-types/string) - -**返回值** - -如果输入字符串可以解析为 URL,则返回该 URL 的域名,否则返回空字符串。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT topLevelDomain('http://foo:foo%41bar@foo.com'), topLevelDomainRFC('http://foo:foo%41bar@foo.com'); -``` - -```response title=Response -┌─topLevelDomain('http://foo:foo%41bar@foo.com')─┬─topLevelDomainRFC('http://foo:foo%41bar@foo.com')─┐ -│ │ com │ -└────────────────────────────────────────────────┴───────────────────────────────────────────────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/uuid-functions.md b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/uuid-functions.md index 57fe1c4ffdf..65e5ba1f331 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/uuid-functions.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/functions/uuid-functions.md @@ -1,8 +1,8 @@ --- -description: 'UUID 函数文档' +description: '用于处理 UUID 的函数文档' sidebar_label: 'UUID' slug: /sql-reference/functions/uuid-functions -title: 'UUID 函数' +title: '用于处理 UUID 的函数' doc_type: 'reference' --- @@ -11,13 +11,11 @@ import DeprecatedBadge from '@theme/badges/DeprecatedBadge'; # 用于处理 UUID 的函数 - - ## UUIDv7 生成 -生成的 UUID 包含一个以 Unix 毫秒表示的 48 位时间戳,接着是版本号“7”(4 位)、用于区分同一毫秒内不同 UUID 的计数器(42 位,其中包含变体字段“2”,2 位),以及一个随机字段(32 位)。 -对于任意给定的时间戳(`unix_ts_ms`),计数器从一个随机值开始,对每个新 UUID 增加 1,直到时间戳发生变化。如果计数器溢出,则将时间戳字段加 1,并将计数器重置为新的随机起始值。 -UUID 生成函数保证:在并发运行的线程和查询中,对于相同时间戳的所有函数调用,其计数器字段都是单调递增的。 +生成的 UUID 包含一个以毫秒为单位的 Unix 48 位时间戳,随后是版本号 "7"(4 位)、用于区分同一毫秒内 UUID 的计数器(42 位,其中包括变体字段值为 "2" 的 2 位),以及一个随机字段(32 位)。 +对于任意给定的时间戳(`unix_ts_ms`),计数器从一个随机值开始,对每个新的 UUID 加 1,直到时间戳发生变化为止。如果计数器溢出,则将时间戳字段加 1,并将计数器重置为新的随机起始值。 +UUID 生成函数保证,在并发运行的线程和查询中,对于同一时间戳的所有函数调用,计数器字段都是单调递增的。 ```text 0 1 2 3 @@ -36,10 +34,10 @@ UUID 生成函数保证:在并发运行的线程和查询中,对于相同时 ## Snowflake ID 生成 -生成的 Snowflake ID 由当前的 Unix 毫秒级时间戳(41 位加 1 位最高位的 0)组成,其后是机器 ID(10 位)以及计数器(12 位,用于区分同一毫秒内生成的多个 ID)。对于任意给定的时间戳(`unix_ts_ms`),计数器从 0 开始,对每个新的 Snowflake ID 递增 1,直到时间戳发生变化为止。如果计数器溢出,则将时间戳字段加 1,并将计数器重置为 0。 +生成的 Snowflake ID 包含当前以毫秒为单位的 Unix 时间戳(41 位时间戳位 + 1 位最高为 0 的比特),随后是机器 ID(10 位)以及用于在同一毫秒内区分 ID 的计数器(12 位)。对于任意给定的时间戳(`unix_ts_ms`),计数器从 0 开始,每生成一个新的 Snowflake ID 就加 1,直到时间戳发生变化。如果计数器溢出,则将时间戳字段加 1,并将计数器重置为 0。 :::note -生成的 Snowflake ID 基于 UNIX 纪元 1970-01-01。尽管目前没有关于 Snowflake ID 纪元选择的标准或建议,但其他系统中的实现可能使用不同的纪元,例如 Twitter/X(2010-11-04)或 Mastodon(2015-01-01)。 +生成的 Snowflake ID 是基于 UNIX 纪元 1970-01-01 的。由于 Snowflake ID 的纪元没有统一的标准或推荐方案,不同系统中的实现可能会使用不同的纪元,例如 Twitter/X(2010-11-04)或 Mastodon(2015-01-01)。 ::: ```text @@ -60,12 +58,12 @@ UUID 生成函数保证:在并发运行的线程和查询中,对于相同时 **语法** ```sql -生成UUIDv4([expr]) +generateUUIDv4([expr]) ``` **参数** -* `expr` — 任意[表达式](/sql-reference/syntax#expressions),在查询中多次调用该函数时用于绕过[公共子表达式消除](/sql-reference/functions/overview#common-subexpression-elimination)机制。该表达式的值不会影响返回的 UUID。可选。 +* `expr` — 任意[表达式](/sql-reference/syntax#expressions),在查询中多次调用该函数时,用于绕过[公共子表达式消除](/sql-reference/functions/overview#common-subexpression-elimination)。该表达式的取值不会影响返回的 UUID。可选。 **返回值** @@ -73,7 +71,7 @@ UUIDv4 类型的值。 **示例** -首先,创建一个包含 UUID 类型列的表,然后向该表中插入生成的 UUIDv4 值。 +首先,创建一个包含 UUID 类型列的表,然后向该表插入一个生成的 UUIDv4。 ```sql CREATE TABLE tab (uuid UUID) ENGINE = Memory; @@ -91,7 +89,7 @@ SELECT * FROM tab; └──────────────────────────────────────┘ ``` -**每行生成多个 UUID 的示例** +**示例:为每行生成多个 UUID** ```sql SELECT generateUUIDv4(1), generateUUIDv4(2); @@ -104,18 +102,18 @@ SELECT generateUUIDv4(1), generateUUIDv4(2); ## generateUUIDv7 -生成 [版本 7](https://datatracker.ietf.org/doc/html/draft-peabody-dispatch-new-uuid-format-04) 的 [UUID](../data-types/uuid.md)。 +生成[版本 7](https://datatracker.ietf.org/doc/html/draft-peabody-dispatch-new-uuid-format-04) 的 [UUID](../data-types/uuid.md)。 -有关 UUID 结构、计数器管理和并发保证的详细信息,请参阅[“UUIDv7 generation”](#uuidv7-generation)一节。 +有关 UUID 结构、计数器管理和并发保证的详细信息,详见 ["UUIDv7 generation"](#uuidv7-generation) 一节。 :::note -截至 2024 年 4 月,版本 7 UUID 仍处于草案阶段,其布局在未来可能会发生变化。 +截至 2024 年 4 月,版本 7 的 UUID 仍处于草案状态,其布局未来可能会发生变化。 ::: **语法** ```sql -生成 UUID v7([expr]) +generateUUIDv7([expr]) ``` **参数** @@ -124,11 +122,11 @@ SELECT generateUUIDv4(1), generateUUIDv4(2); **返回值** -UUIDv7 类型的值。 +类型为 UUIDv7 的值。 **示例** -首先,创建一个包含 UUID 类型列的表,然后向该表插入一个生成的 UUIDv7。 +首先,创建一个包含 UUID 类型列的表,然后将生成的 UUIDv7 插入到该表中。 ```sql CREATE TABLE tab (uuid UUID) ENGINE = Memory; @@ -159,12 +157,12 @@ SELECT generateUUIDv7(1), generateUUIDv7(2); ## dateTimeToUUIDv7 -将给定时间的 [DateTime](../data-types/datetime.md) 值转换为对应的 [UUIDv7](https://en.wikipedia.org/wiki/UUID#Version_7)。 +将给定时间的 [DateTime](../data-types/datetime.md) 值转换为 [UUIDv7](https://en.wikipedia.org/wiki/UUID#Version_7)。 -有关 UUID 结构、计数器管理以及并发保证的详细信息,请参阅 ["UUIDv7 generation"](#uuidv7-generation) 一节。 +有关 UUID 结构、计数器管理以及并发保证的详细信息,请参阅 ["UUIDv7 generation"](#uuidv7-generation) 部分。 :::note -截至 2024 年 4 月,版本 7 的 UUID 仍处于草案状态,其结构布局在未来可能会发生变化。 +截至 2024 年 4 月,UUID 第 7 版仍处于草案状态,其布局未来可能会发生变化。 ::: **语法** @@ -179,7 +177,7 @@ dateTimeToUUIDv7(value) **返回值** -类型为 UUIDv7 的值。 +UUIDv7 类型的值。 **示例** @@ -195,7 +193,7 @@ SELECT dateTimeToUUIDv7(toDateTime('2021-08-15 18:57:56', 'Asia/Shanghai')); └─────────────────────────────────────────────────────────────────────────┘ ``` -**同一时间戳对应多个 UUID 的示例** +**针对同一时间戳的多个 UUID 示例** ```sql SELECT dateTimeToUUIDv7(toDateTime('2021-08-15 18:57:56')); @@ -214,12 +212,12 @@ SELECT dateTimeToUUIDv7(toDateTime('2021-08-15 18:57:56')); └──────────────────────────────────────┘ ``` -该函数确保对同一时间戳进行多次调用时,生成的 UUID 唯一且单调递增。 +该函数确保在以相同时间戳多次调用时,仍能生成唯一且单调递增的 UUID。 ## empty -检查输入的 UUID 是否为空。 +检查输入的 UUID 是否为空值。 **语法** @@ -227,9 +225,9 @@ SELECT dateTimeToUUIDv7(toDateTime('2021-08-15 18:57:56')); empty(UUID) ``` -如果 UUID 的各位全部为 0(零 UUID),则被视为空。 +如果一个 UUID 中所有位都是零(零 UUID),则被视为空。 -该函数同样适用于 `Array` 和 `String`。 +该函数同样适用于数组和字符串。 **参数** @@ -278,7 +276,7 @@ notEmpty(UUID) **返回值** -* 对于非空 UUID 返回 `1`,对于空 UUID 返回 `0`。参见 [UInt8](../data-types/int-uint.md)。 +* 非空 UUID 返回 `1`,空 UUID 返回 `0`。参见 [UInt8](../data-types/int-uint.md)。 **示例** @@ -304,7 +302,7 @@ SELECT notEmpty(generateUUIDv4()); 将 String 类型的值转换为 UUID。 ```sql -toUUID(字符串) +toUUID(string) ``` **返回值** @@ -330,8 +328,8 @@ SELECT toUUID('61f0c404-5cb3-11e7-907b-a6006ad3dba0') AS uuid **参数** -* `string` — 长度为 36 个字符的 String 或 FixedString(36)。[String](../syntax.md#string)。 -* `default` — 当第一个参数无法转换为 UUID 类型时用作默认值的 UUID。[UUID](../data-types/uuid.md)。 +* `string` — 由 36 个字符组成的字符串,或 FixedString(36)。[String](../syntax.md#string)。 +* `default` — 当第一个参数无法转换为 UUID 类型时使用的默认 UUID。[UUID](../data-types/uuid.md)。 **返回值** @@ -347,7 +345,7 @@ UUID 类型的值。 **使用示例** -第一个示例在第一个参数可被转换时,返回将其转换为 UUID 类型的结果: +第一个示例会在第一个参数可被转换时,将其转换为 UUID 类型并返回: ```sql SELECT toUUIDOrDefault('61f0c404-5cb3-11e7-907b-a6006ad3dba0', cast('59f0c404-5cb3-11e7-907b-a6006ad3dba0' AS UUID)); @@ -361,7 +359,7 @@ SELECT toUUIDOrDefault('61f0c404-5cb3-11e7-907b-a6006ad3dba0', cast('59f0c404-5c └───────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ ``` -第二个示例会返回第二个参数(提供的默认 UUID),因为第一个参数无法转换为 UUID 类型: +第二个示例返回第二个参数(提供的默认 UUID),因为第一个参数无法转换为 UUID 类型: ```sql SELECT toUUIDOrDefault('-----61f0c404-5cb3-11e7-907b-a6006ad3dba0', cast('59f0c404-5cb3-11e7-907b-a6006ad3dba0' AS UUID)); @@ -378,7 +376,7 @@ SELECT toUUIDOrDefault('-----61f0c404-5cb3-11e7-907b-a6006ad3dba0', cast('59f0c4 ## toUUIDOrNull -接受一个 `String` 类型的参数,并尝试将其解析为 UUID。若解析失败,则返回 NULL。 +接收一个 String 类型的参数,并尝试将其解析为 UUID。若解析失败,则返回 NULL。 ```sql toUUIDOrNull(string) @@ -386,7 +384,7 @@ toUUIDOrNull(string) **返回值** -Nullable(UUID) 类型的值。 +`Nullable(UUID)` 类型的值。 **使用示例** @@ -405,10 +403,10 @@ SELECT toUUIDOrNull('61f0c404-5cb3-11e7-907b-a6006ad3dba0T') AS uuid ## toUUIDOrZero -它接受一个 `String` 类型的参数,并尝试将其解析为 `UUID`。如果解析失败,则返回全为 0 的 UUID。 +它接受一个 `String` 类型的参数,并尝试将其解析为 UUID。若解析失败,则返回全零 UUID 值。 ```sql -toUUIDOrZero(字符串) +toUUIDOrZero(string) ``` **返回值** @@ -432,7 +430,7 @@ SELECT toUUIDOrZero('61f0c404-5cb3-11e7-907b-a6006ad3dba0T') AS uuid ## UUIDStringToNum -接受一个包含 36 个字符、格式为 `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx` 的 `string`,并返回其二进制表示形式的 [FixedString(16)](../data-types/fixedstring.md)。其格式可通过可选参数 `variant` 指定(默认使用 `Big-endian`)。 +接受一个包含 36 个字符、格式为 `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx` 的 `string`,并返回一个以其二进制形式表示的 [FixedString(16)](../data-types/fixedstring.md),其格式可以通过可选参数 `variant` 指定(默认使用 `Big-endian`)。 **语法** @@ -443,7 +441,7 @@ UUIDStringToNum(string[, variant = 1]) **参数** * `string` — 长度为 36 个字符的 [String](/sql-reference/data-types/string) 或 [FixedString](/sql-reference/data-types/string) -* `variant` — 整型值,表示 [RFC4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.1) 中定义的变体。1 = `Big-endian`(默认),2 = `Microsoft`。 +* `variant` — 整数,用于表示 [RFC4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.1) 中定义的变体。1 = `Big-endian`(默认),2 = `Microsoft`。 **返回值** @@ -482,7 +480,7 @@ SELECT ## UUIDNumToString -接受一个包含 UUID 二进制表示的 `binary` 值,其格式可以通过 `variant`(默认为 `Big-endian`)进行可选指定,并返回一个文本格式的、长度为 36 个字符的字符串。 +接受包含 UUID 二进制表示的 `binary`,其格式可以通过 `variant` 指定(默认为 `Big-endian`),并返回一个包含 36 个字符的文本格式字符串。 **语法** @@ -492,8 +490,8 @@ UUIDNumToString(binary[, variant = 1]) **参数** -* `binary` — [FixedString(16)](../data-types/fixedstring.md),UUID 的二进制形式表示。 -* `variant` — 整数,表示 [RFC4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.1) 中指定的变体。1 = `Big-endian`(默认),2 = `Microsoft`。 +* `binary` — [FixedString(16)](../data-types/fixedstring.md),表示 UUID 的二进制形式。 +* `variant` — 整数类型,对应 [RFC4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.1) 中定义的变体。1 = `Big-endian`(默认),2 = `Microsoft`。 **返回值** @@ -532,7 +530,7 @@ SELECT ## UUIDToNum -接受一个 [UUID](../data-types/uuid.md),并返回其作为 [FixedString(16)](../data-types/fixedstring.md) 的二进制表示形式,其字节序格式可通过可选参数 `variant` 指定(默认为 `Big-endian`)。此函数用于替代将 `UUIDStringToNum(toString(uuid))` 这两个函数组合调用的用法,因此在从 UUID 中提取字节时,无需先将 UUID 转换为字符串作为中间步骤。 +接受一个 [UUID](../data-types/uuid.md),并返回其以 [FixedString(16)](../data-types/fixedstring.md) 表示的二进制形式,其格式可通过 `variant` 参数进行指定(默认为 `Big-endian`)。此函数用于替代对两个独立函数 `UUIDStringToNum(toString(uuid))` 的调用,因此在从 UUID 中提取字节时不再需要先将 UUID 中间转换为字符串。 **语法** @@ -543,11 +541,11 @@ UUIDToNum(uuid[, variant = 1]) **参数** * `uuid` — [UUID](../data-types/uuid.md)。 -* `variant` — 一个整数,用于表示 [RFC4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.1) 中指定的变体。1 = `Big-endian`(默认),2 = `Microsoft`。 +* `variant` — 整型值,表示 [RFC4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.1) 中定义的变体类型。1 = `Big-endian`(默认),2 = `Microsoft`。 **返回值** -UUID 的二进制形式。 +UUID 的二进制表示形式。 **使用示例** @@ -582,7 +580,7 @@ SELECT ## UUIDv7ToDateTime -返回第 7 版 UUID 的时间戳部分。 +返回版本 7 UUID 的时间戳部分。 **语法** @@ -593,11 +591,11 @@ UUIDv7ToDateTime(uuid[, timezone]) **参数** * `uuid` — 版本 7 的 [UUID](../data-types/uuid.md)。 -* `timezone` — 返回值的[时区名称](../../operations/server-configuration-parameters/settings.md#timezone)(可选)。[String](../data-types/string.md)。 +* `timezone` — 返回值使用的[时区名称](../../operations/server-configuration-parameters/settings.md#timezone)(可选)。[String](../data-types/string.md)。 **返回值** -* 精确到毫秒的时间戳。如果 UUID 不是有效的版本 7 UUID,则返回 1970-01-01 00:00:00.000。[DateTime64(3)](../data-types/datetime64.md)。 +* 毫秒精度的时间戳。如果 UUID 不是有效的版本 7 UUID,则返回 1970-01-01 00:00:00.000。[DateTime64(3)](../data-types/datetime64.md)。 **使用示例** @@ -628,7 +626,7 @@ SELECT UUIDv7ToDateTime(toUUID('018f05c9-4ab8-7b86-b64e-c9f03fbd45d1'), 'America ## serverUUID -返回在首次启动 ClickHouse 服务器时生成的随机 UUID。该 UUID 存储在 ClickHouse 服务器目录中的 `uuid` 文件中(例如 `/var/lib/clickhouse/`),并在服务器重启期间保持不变。 +返回在首次启动 ClickHouse 服务器时生成的随机 UUID。该 UUID 保存在 ClickHouse 服务器目录中的 `uuid` 文件中(例如 `/var/lib/clickhouse/`),并在服务器重启后仍会保留不变。 **语法** @@ -638,15 +636,15 @@ serverUUID() **返回值** -* 服务器的 UUID。[UUID](../data-types/uuid.md) +* 服务器的 UUID。[UUID](../data-types/uuid.md)。 ## generateSnowflakeID -生成 [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID)。 -该函数保证在并发运行的线程和查询中,对该函数的所有调用,其时间戳中的计数字段都单调递增。 +生成一个 [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID)。 +此函数保证在并发运行的线程和查询中,所有函数调用的时间戳内计数字段都按单调递增顺序增长。 -实现细节参见[“Snowflake ID generation”](#snowflake-id-generation)一节。 +实现细节参见“[Snowflake ID generation](#snowflake-id-generation)”一节。 **语法** @@ -656,8 +654,8 @@ generateSnowflakeID([expr, [machine_id]]) **参数** -* `expr` — 任意[表达式](/sql-reference/syntax#expressions),在查询中多次调用该函数时,用于绕过[公共子表达式消除](/sql-reference/functions/overview#common-subexpression-elimination)。该表达式的值不会影响返回的 Snowflake ID。可选。 -* `machine_id` — 机器 ID,将使用其最低的 10 位。[Int64](../data-types/int-uint.md)。可选。 +* `expr` — 任意[表达式](/sql-reference/syntax#expressions),当在查询中多次调用该函数时,用于绕过[公共子表达式消除](/sql-reference/functions/overview#common-subexpression-elimination)优化。该表达式的取值不会影响返回的 Snowflake ID 值。可选。 +* `machine_id` — 机器标识,仅使用其最低 10 位。[Int64](../data-types/int-uint.md)。可选。 **返回值** @@ -665,7 +663,7 @@ generateSnowflakeID([expr, [machine_id]]) **示例** -首先,创建一个包含 UInt64 类型列的表,然后向该表插入生成的 Snowflake ID。 +首先,创建一个包含 UInt64 类型列的表,然后将生成的 Snowflake ID 插入到该表中。 ```sql CREATE TABLE tab (id UInt64) ENGINE = Memory; @@ -683,7 +681,7 @@ SELECT * FROM tab; └─────────────────────┘ ``` -**在每行生成多个 Snowflake ID 的示例** +**每行生成多个 Snowflake ID 的示例** ```sql SELECT generateSnowflakeID(1), generateSnowflakeID(2); @@ -693,7 +691,7 @@ SELECT generateSnowflakeID(1), generateSnowflakeID(2); └────────────────────────┴────────────────────────┘ ``` -**带有表达式和机器 ID 的示例** +**包含表达式和机器 ID 的示例** ```sql SELECT generateSnowflakeID('expr', 1); @@ -709,8 +707,8 @@ SELECT generateSnowflakeID('expr', 1); :::warning -此函数已弃用,只有在启用设置 [allow_deprecated_snowflake_conversion_functions](../../operations/settings/settings.md#allow_deprecated_snowflake_conversion_functions) 后才能使用。 -该函数将在未来的某个时间移除。 +此函数已弃用,仅在启用了 [allow_deprecated_snowflake_conversion_functions](../../operations/settings/settings.md#allow_deprecated_snowflake_conversion_functions) 设置时才能使用。 +该函数将在未来的某个时间点移除。 请改用函数 [snowflakeIDToDateTime](#snowflakeidtodatetime)。 ::: @@ -726,11 +724,11 @@ snowflakeToDateTime(value[, time_zone]) **参数** * `value` — Snowflake ID。[Int64](../data-types/int-uint.md)。 -* `time_zone` — [时区](/operations/server-configuration-parameters/settings.md#timezone)。函数会根据该时区解析 `time_string`。可选。[String](../data-types/string.md)。 +* `time_zone` — [Timezone](/operations/server-configuration-parameters/settings.md#timezone)。函数会根据该时区解析参数 `time_string`。可选。[String](../data-types/string.md)。 **返回值** -* `value` 中的时间戳部分,类型为 [DateTime](../data-types/datetime.md)。 +* `value` 的时间戳部分,作为 [DateTime](../data-types/datetime.md) 类型的值返回。 **示例** @@ -755,8 +753,8 @@ SELECT snowflakeToDateTime(CAST('1426860702823350272', 'Int64'), 'UTC'); :::warning -此函数已弃用,且只有在启用 [allow_deprecated_snowflake_conversion_functions](../../operations/settings/settings.md#allow_deprecated_snowflake_conversion_functions) 设置时才能使用。 -该函数将在未来的某个时间点被移除。 +此函数已弃用,仅当启用了 [allow_deprecated_snowflake_conversion_functions](../../operations/settings/settings.md#allow_deprecated_snowflake_conversion_functions) 设置时才可使用。 +该函数将在未来的某个时间被移除。 请改用函数 [snowflakeIDToDateTime64](#snowflakeidtodatetime64)。 ::: @@ -801,13 +799,13 @@ SELECT snowflakeToDateTime64(CAST('1426860802823350272', 'Int64'), 'UTC'); :::warning -此函数已弃用,只有在启用了 [allow_deprecated_snowflake_conversion_functions](../../operations/settings/settings.md#allow_deprecated_snowflake_conversion_functions) 设置时才可使用。 +此函数已弃用,且只有在启用 [allow_deprecated_snowflake_conversion_functions](../../operations/settings/settings.md#allow_deprecated_snowflake_conversion_functions) 设置时才能使用。 该函数将在未来的某个时间被移除。 请改用函数 [dateTimeToSnowflakeID](#datetimetosnowflakeid)。 ::: -将 [DateTime](../data-types/datetime.md) 值转换为给定时间点上的第一个 [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID)。 +将一个 [DateTime](../data-types/datetime.md) 值转换为对应时间点的第一个 [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID)。 **语法** @@ -817,11 +815,11 @@ dateTimeToSnowflake(value) **参数** -* `value` — 日期时间值。[DateTime](../data-types/datetime.md)。 +* `value` — 日期时间。[DateTime](../data-types/datetime.md)。 **返回值** -* 将输入值转换为 [Int64](../data-types/int-uint.md) 数据类型,即该时间点对应的第一个 Snowflake ID。 +* 输入值被转换为 [Int64](../data-types/int-uint.md) 数据类型,对应于该时间点的第一个 Snowflake ID。 **示例** @@ -845,13 +843,13 @@ WITH toDateTime('2021-08-15 18:57:56', 'Asia/Shanghai') AS dt SELECT dateTimeToS :::warning -此函数已弃用,且仅当启用了设置 [allow_deprecated_snowflake_conversion_functions](../../operations/settings/settings.md#allow_deprecated_snowflake_conversion_functions) 时才可以使用。 -该函数将在未来的某个时间点被移除。 +此函数已弃用,仅当启用了设置 [allow_deprecated_snowflake_conversion_functions](../../operations/settings/settings.md#allow_deprecated_snowflake_conversion_functions) 时才能使用。 +该函数将在未来的某个时间被移除。 请改用函数 [dateTime64ToSnowflakeID](#datetime64tosnowflakeid)。 ::: -将 [DateTime64](../data-types/datetime64.md) 转换为对应时间点的第一个 [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID)。 +将 [DateTime64](../data-types/datetime64.md) 转换为给定时间点对应的第一个 [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID)。 **语法** @@ -865,7 +863,7 @@ dateTime64ToSnowflake(value) **返回值** -* 将输入值转换为 [Int64](../data-types/int-uint.md) 数据类型,表示在该时刻的第一个 Snowflake ID。 +* 将输入值转换为 [Int64](../data-types/int-uint.md) 数据类型,作为该时刻的第一个 Snowflake ID。 **示例** @@ -886,7 +884,7 @@ WITH toDateTime64('2021-08-15 18:57:56.492', 3, 'Asia/Shanghai') AS dt64 SELECT ## snowflakeIDToDateTime -将 [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) 中的时间戳部分作为 [DateTime](../data-types/datetime.md) 类型的值返回。 +返回 [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) 的时间戳部分,并以 [DateTime](../data-types/datetime.md) 类型的值表示。 **语法** @@ -897,12 +895,12 @@ snowflakeIDToDateTime(value[, epoch[, time_zone]]) **参数** * `value` — Snowflake ID。[UInt64](../data-types/int-uint.md)。 -* `epoch` - Snowflake ID 的纪元时间,从 1970-01-01 起按毫秒计算。默认值为 0(1970-01-01)。对于 Twitter/X 的纪元时间(2015-01-01),请使用 1288834974657。可选。[UInt*](../data-types/int-uint.md)。 -* `time_zone` — [时区](/operations/server-configuration-parameters/settings.md#timezone)。函数会根据该时区解析 `time_string`。可选。[String](../data-types/string.md)。 +* `epoch` - Snowflake ID 的纪元(epoch),以自 1970-01-01 起的毫秒数表示。默认为 0(1970-01-01)。对于 Twitter/X 纪元(2015-01-01),请使用 1288834974657。可选。[UInt*](../data-types/int-uint.md)。 +* `time_zone` — [Timezone](/operations/server-configuration-parameters/settings.md#timezone)。函数会根据该时区解析 `time_string`。可选。[String](../data-types/string.md)。 **返回值** -* `value` 中时间戳部分,对应的 [DateTime](../data-types/datetime.md) 值。 +* `value` 的时间戳部分,类型为 [DateTime](../data-types/datetime.md) 值。 **示例** @@ -923,7 +921,7 @@ SELECT snowflakeIDToDateTime(7204436857747984384) AS res ## snowflakeIDToDateTime64 -返回 [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) 的时间戳部分,结果类型为 [DateTime64](../data-types/datetime64.md)。 +返回 [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) 的时间戳部分,并以 [DateTime64](../data-types/datetime64.md) 类型的值表示。 **语法** @@ -934,12 +932,12 @@ snowflakeIDToDateTime64(value[, epoch[, time_zone]]) **参数** * `value` — Snowflake ID。[UInt64](../data-types/int-uint.md)。 -* `epoch` — Snowflake ID 的纪元时间,即自 1970-01-01 起的毫秒数。默认值为 0(1970-01-01)。对于 Twitter/X 纪元(2015-01-01),请使用 1288834974657。可选。[UInt*](../data-types/int-uint.md)。 -* `time_zone` — [时区](/operations/server-configuration-parameters/settings.md#timezone)。函数会根据该时区解析 `time_string`。可选。[String](../data-types/string.md)。 +* `epoch` — Snowflake ID 的纪元(epoch),自 1970-01-01 起以毫秒为单位。默认为 0(1970-01-01)。对于 Twitter/X 的纪元(2015-01-01),请提供 1288834974657。可选。[UInt*](../data-types/int-uint.md)。 +* `time_zone` — [Timezone](/operations/server-configuration-parameters/settings.md#timezone)。函数会根据该时区解析 `time_string`。可选。[String](../data-types/string.md)。 **返回值** -* `value` 中的时间戳部分,类型为 [DateTime64](../data-types/datetime64.md),scale = 3,即毫秒精度。 +* `value` 的时间戳部分,类型为 [DateTime64](../data-types/datetime64.md),scale = 3,即毫秒级精度。 **示例** @@ -960,7 +958,7 @@ SELECT snowflakeIDToDateTime64(7204436857747984384) AS res ## dateTimeToSnowflakeID -将 [DateTime](../data-types/datetime.md) 值转换为给定时间点对应的第一个 [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID)。 +将一个 [DateTime](../data-types/datetime.md) 值转换为给定时间点对应的第一个 [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID)。 **语法** @@ -971,11 +969,11 @@ dateTimeToSnowflakeID(value[, epoch]) **参数** * `value` — 日期时间值。[DateTime](../data-types/datetime.md)。 -* `epoch` - Snowflake ID 的纪元时间,自 1970-01-01 起按毫秒计。默认值为 0(1970-01-01)。对于 Twitter/X 的纪元时间(2015-01-01),请提供 1288834974657。可选。[UInt*](../data-types/int-uint.md)。 +* `epoch` - Snowflake ID 所使用的纪元时间(自 1970-01-01 起的毫秒数)。默认为 0(1970-01-01)。对于 Twitter/X 的纪元(2015-01-01),使用 1288834974657。可选。[UInt*](../data-types/int-uint.md)。 **返回值** -* 将输入值转换为在该时间点的第一个 Snowflake ID,并以 [UInt64](../data-types/int-uint.md) 表示。 +* 将输入值转换为对应时间点的第一个 Snowflake ID,类型为 [UInt64](../data-types/int-uint.md)。 **示例** @@ -996,7 +994,7 @@ SELECT toDateTime('2021-08-15 18:57:56', 'Asia/Shanghai') AS dt, dateTimeToSnowf ## dateTime64ToSnowflakeID -将 [DateTime64](../data-types/datetime64.md) 转换为对应时间点上的第一个 [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID)。 +将 [DateTime64](../data-types/datetime64.md) 转换为给定时间点对应的第一个 [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID)。 **语法** @@ -1006,12 +1004,12 @@ dateTime64ToSnowflakeID(value[, epoch]) **参数** -* `value` — 带时间的日期值。[DateTime64](../data-types/datetime64.md)。 -* `epoch` - Snowflake ID 的纪元时间,自 1970-01-01 起按毫秒计。默认为 0(1970-01-01)。对于 Twitter/X 的纪元时间(2015-01-01),请提供 1288834974657。可选。[UInt*](../data-types/int-uint.md)。 +* `value` — 日期时间值。[DateTime64](../data-types/datetime64.md)。 +* `epoch` - Snowflake ID 的纪元时间,单位为自 1970-01-01 起的毫秒数。默认为 0(1970-01-01)。对于 Twitter/X 纪元(2015-01-01),请输入 1288834974657。可选。[UInt*](../data-types/int-uint.md)。 **返回值** -* 将输入值转换为 [UInt64](../data-types/int-uint.md) 类型,表示在该时间点生成的首个 Snowflake ID。 +* 将输入值转换为 [UInt64](../data-types/int-uint.md),表示在该时间点上的第一个 Snowflake ID。 **示例** @@ -1035,919 +1033,11 @@ SELECT toDateTime('2021-08-15 18:57:56.493', 3, 'Asia/Shanghai') AS dt, dateTime * [dictGetUUID](/sql-reference/functions/ext-dict-functions#other-functions) {/* - 以下标签的内部内容会在文档框架构建时被替换为 - 从 system.functions 生成的文档。请不要修改或移除这些标签。 + 下方标签内部的内容会在文档框架构建时 + 被从 system.functions 生成的文档所替换。请不要修改或移除这些标签。 参见:https://github.com/ClickHouse/clickhouse-docs/blob/main/contribute/autogenerated-documentation-from-source.md */ } - {/*AUTOGENERATED_START*/ } -## UUIDNumToString - -引入于:v1.1 - -接受一个 UUID 的二进制表示形式,其格式可以通过可选参数 `variant` 指定(默认是 `Big-endian`),并返回一个长度为 36 的文本格式字符串。 - -**语法** - -```sql -UUIDNumToString(二进制[, 变体]) -``` - -**参数** - -* `binary` — UUID 的二进制表示形式。[`FixedString(16)`](/sql-reference/data-types/fixedstring) -* `variant` — 按照 [RFC4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.1) 指定的变体。1 = `Big-endian`(默认),2 = `Microsoft`。[`(U)Int*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回 UUID 的字符串表示形式。[`String`](/sql-reference/data-types/string) - -**示例** - -**使用示例** - -```sql title=Query -SELECT - 'a/<@];!~p{jTj={)' AS bytes, - UUIDNumToString(toFixedString(bytes, 16)) AS uuid -``` - -```response title=Response -┌─bytes────────────┬─uuid─────────────────────────────────┐ -│ a/<@];!~p{jTj={) │ 612f3c40-5d3b-217e-707b-6a546a3d7b29 │ -└──────────────────┴──────────────────────────────────────┘ -``` - -**Microsoft 版本** - -```sql title=Query -SELECT - '@ - -:::warning -此函数已被弃用,且仅当设置 [`allow_deprecated_snowflake_conversion_functions`](../../operations/settings/settings.md#allow_deprecated_snowflake_conversion_functions) 已启用时才能使用。 -该函数将在未来的某个时间点被移除。 - -请改用函数 [dateTime64ToSnowflakeID](#dateTime64ToSnowflakeID)。 -::: - -将 [DateTime64](../data-types/datetime64.md) 转换为给定时间点的第一个 [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID)。 - -**语法** - -```sql -dateTime64ToSnowflake(value) -``` - -**参数** - -* `value` — 日期时间值。[`DateTime64`](/sql-reference/data-types/datetime64) - -**返回值** - -返回将输入值转换为该时间点第一个 Snowflake ID 的结果。[`Int64`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -WITH toDateTime64('2021-08-15 18:57:56.492', 3, 'Asia/Shanghai') AS dt64 SELECT dateTime64ToSnowflake(dt64); -``` - -```response title=Response -┌─dateTime64ToSnowflake(dt64)─┐ -│ 1426860704886947840 │ -└─────────────────────────────┘ -``` - - -## dateTime64ToSnowflakeID - -引入于:v24.6 - -将 [`DateTime64`](../data-types/datetime64.md) 转换为给定时间点上的第一个 [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID)。 - -实现细节请参见“[Snowflake ID generation](#snowflake-id-generation)”一节。 - -**语法** - -```sql -dateTime64ToSnowflakeID(value[, epoch]) -``` - -**参数** - -* `value` — 包含时间的日期值。[`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) -* `epoch` — Snowflake ID 的纪元时间(自 1970-01-01 起的毫秒数)。默认为 0(1970-01-01)。对于 Twitter/X 的纪元(2015-01-01),请使用 1288834974657。[`UInt*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回输入值在该时间点对应的第一个 Snowflake ID。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT toDateTime64('2025-08-15 18:57:56.493', 3, 'Asia/Shanghai') AS dt, dateTime64ToSnowflakeID(dt) AS res; -``` - -```response title=Response -┌──────────────────────dt─┬─────────────────res─┐ -│ 2025-08-15 18:57:56.493 │ 7362075066076495872 │ -└─────────────────────────┴─────────────────────┘ -``` - - -## dateTimeToSnowflake - -引入版本:v21.10 - - - -:::warning -此函数已弃用,且仅当启用设置 [`allow_deprecated_snowflake_conversion_functions`](../../operations/settings/settings.md#allow_deprecated_snowflake_conversion_functions) 时才能使用。 -该函数将在未来的某个时间点被移除。 - -请改用函数 [dateTimeToSnowflakeID](#dateTimeToSnowflakeID)。 -::: - -将一个 [DateTime](../data-types/datetime.md) 值转换为给定时间点对应的第一个 [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID)。 - -**语法** - -```sql -dateTimeToSnowflake(value) -``` - -**参数** - -* `value` — 带时间的日期时间值。[`DateTime`](/sql-reference/data-types/datetime) - -**返回值** - -返回对应时间点的第一个 Snowflake ID。[`Int64`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -WITH toDateTime('2021-08-15 18:57:56', 'Asia/Shanghai') AS dt SELECT dateTimeToSnowflake(dt); -``` - -```response title=Response -┌─dateTimeToSnowflake(dt)─┐ -│ 1426860702823350272 │ -└─────────────────────────┘ -``` - - -## dateTimeToSnowflakeID - -引入版本:v24.6 - -将一个 [DateTime](../data-types/datetime.md) 值转换为给定时间对应的第一个 [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID)。 - -**语法** - -```sql -dateTimeToSnowflakeID(value[, epoch]) -``` - -**参数** - -* `value` — 包含时间的日期值。[`DateTime`](/sql-reference/data-types/datetime) 或 [`DateTime64`](/sql-reference/data-types/datetime64) -* `epoch` — 可选。Snowflake ID 的纪元起点,以自 1970-01-01 起的毫秒数表示。默认值为 0(1970-01-01)。对于 Twitter/X 的纪元(2015-01-01),请使用 1288834974657。[`UInt*`](/sql-reference/data-types/int-uint) - -**返回值** - -返回在该时间点对应的第一个 Snowflake ID(由输入值计算)。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**使用示例** - -```sql title=Query -SELECT toDateTime('2021-08-15 18:57:56', 'Asia/Shanghai') AS dt, dateTimeToSnowflakeID(dt) AS res; -``` - -```response title=Response -┌──────────────────dt─┬─────────────────res─┐ -│ 2021-08-15 18:57:56 │ 6832626392367104000 │ -└─────────────────────┴─────────────────────┘ -``` - - -## dateTimeToUUIDv7 - -引入版本:v25.9 - -将给定时间点的 [DateTime](../data-types/datetime.md) 值转换为 [UUIDv7](https://en.wikipedia.org/wiki/UUID#Version_7)。 - -有关 UUID 结构、计数器管理和并发保证的详细信息,请参阅 “[UUIDv7 generation](#uuidv7-generation)” 一节。 - -:::note -截至 2025 年 9 月,版本 7 的 UUID 仍处于草案状态,其布局在未来可能会发生变化。 -::: - -**语法** - -```sql -dateTimeToUUIDv7(value) -``` - -**参数** - -* `value` — 日期时间值。[`DateTime`](/sql-reference/data-types/datetime) - -**返回值** - -返回 UUIDv7。[`UUID`](/sql-reference/data-types/uuid) - -**示例** - -**用法示例** - -```sql title=Query -SELECT dateTimeToUUIDv7(toDateTime('2021-08-15 18:57:56', 'Asia/Shanghai')); -``` - -```response title=Response -┌─dateTimeToUUIDv7(toDateTime('2021-08-15 18:57:56', 'Asia/Shanghai'))─┐ -│ 018f05af-f4a8-778f-beee-1bedbc95c93b │ -└─────────────────────────────────────────────────────────────────────────┘ -``` - -**同一时间戳存在多个 UUID** - -```sql title=Query -SELECT dateTimeToUUIDv7(toDateTime('2021-08-15 18:57:56')); -SELECT dateTimeToUUIDv7(toDateTime('2021-08-15 18:57:56')); -``` - -```response title=Response -┌─dateTimeToUUIDv7(t⋯08-15 18:57:56'))─┐ -│ 017b4b2d-7720-76ed-ae44-bbcc23a8c550 │ -└──────────────────────────────────────┘ -┌─dateTimeToUUIDv7(t⋯08-15 18:57:56'))─┐ -│ 017b4b2d-7720-76ed-ae44-bbcf71ed0fd3 │ -└──────────────────────────────────────┘ -``` - - -## generateSnowflakeID - -自 v24.6 起提供 - -生成一个 [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID)。 - -函数 `generateSnowflakeID` 保证在并发运行的线程和查询中,对于给定时间戳,其计数器字段在所有函数调用中都会单调递增。 - -有关实现细节,请参阅[“Snowflake ID 生成”](#snowflake-id-generation)一节。 - -**语法** - -```sql -generateSnowflakeID([expr, [machine_id]]) -``` - -**参数** - -* `expr` — 任意[表达式](/sql-reference/syntax#expressions),在查询中多次调用该函数时,用于绕过[公共子表达式消除](/sql-reference/functions/overview#common-subexpression-elimination)机制。表达式的值不会影响返回的 Snowflake ID。可选。 -* `machine_id` — 机器 ID,将使用其最低的 10 位。[Int64](../data-types/int-uint.md)。可选。 - -**返回值** - -返回 Snowflake ID。[`UInt64`](/sql-reference/data-types/int-uint) - -**示例** - -**用法示例** - -```sql title=Query -CREATE TABLE tab (id UInt64) -ENGINE = MergeTree() -ORDER BY tuple(); - -INSERT INTO tab SELECT generateSnowflakeID(); - -SELECT * FROM tab; -``` - -```response title=Response -┌──────────────────id─┐ -│ 7199081390080409600 │ -└─────────────────────┘ -``` - -**每行生成多个 Snowflake ID** - -```sql title=Query -SELECT generateSnowflakeID(1), generateSnowflakeID(2); -``` - -```response title=Response -┌─generateSnowflakeID(1)─┬─generateSnowflakeID(2)─┐ -│ 7199081609652224000 │ 7199081609652224001 │ -└────────────────────────┴────────────────────────┘ -``` - -**结合表达式和机器 ID** - -```sql title=Query -SELECT generateSnowflakeID('expr', 1); -``` - -```response title=Response -┌─generateSnowflakeID('expr', 1)─┐ -│ 7201148511606784002 │ -└────────────────────────────────┘ -``` - - -## generateUUIDv4 - -自 v1.1 版本引入。 - -生成一个[第 4 版](https://tools.ietf.org/html/rfc4122#section-4.4)的 [UUID](../data-types/uuid.md)。 - -**语法** - -```sql -generateUUIDv4([expr]) -``` - -**参数** - -* `expr` — 可选。任意表达式,用于在查询中多次调用该函数时绕过[公共子表达式消除](/sql-reference/functions/overview#common-subexpression-elimination)。该表达式的值不会影响返回的 UUID。 - -**返回值** - -返回一个 UUIDv4。[`UUID`](/sql-reference/data-types/uuid) - -**示例** - -**用法示例** - -```sql title=Query -SELECT generateUUIDv4(number) FROM numbers(3); -``` - -```response title=Response -┌─generateUUIDv4(number)───────────────┐ -│ fcf19b77-a610-42c5-b3f5-a13c122f65b6 │ -│ 07700d36-cb6b-4189-af1d-0972f23dc3bc │ -│ 68838947-1583-48b0-b9b7-cf8268dd343d │ -└──────────────────────────────────────┘ -``` - -**公共子表达式消除** - -```sql title=Query -SELECT generateUUIDv4(1), generateUUIDv4(1); -``` - -```response title=Response -┌─generateUUIDv4(1)────────────────────┬─generateUUIDv4(2)────────────────────┐ -│ 2d49dc6e-ddce-4cd0-afb8-790956df54c1 │ 2d49dc6e-ddce-4cd0-afb8-790956df54c1 │ -└──────────────────────────────────────┴──────────────────────────────────────┘ -``` - - -## generateUUIDv7 - -引入于:v24.5 - -生成一个[第 7 版](https://datatracker.ietf.org/doc/html/draft-peabody-dispatch-new-uuid-format-04) [UUID](../data-types/uuid.md)。 - -有关 UUID 结构、计数器管理和并发保证的详细信息,请参阅“UUIDv7 生成”一节([#uuidv7-generation](#uuidv7-generation))。 - -:::note -截至 2025 年 9 月,第 7 版 UUID 仍处于草案状态,其布局在未来可能会发生变化。 -::: - -**语法** - -```sql -生成 UUIDv7([expr]) -``` - -**参数** - -* `expr` — 可选。任意表达式,当在查询中多次调用该函数时,用于绕过[公共子表达式消除](/sql-reference/functions/overview#common-subexpression-elimination)。该表达式的取值不会影响返回的 UUID。[`Any`](/sql-reference/data-types) - -**返回值** - -返回一个 UUIDv7。[`UUID`](/sql-reference/data-types/uuid) - -**示例** - -**用法示例** - -```sql title=Query -SELECT generateUUIDv7(number) FROM numbers(3); -``` - -```response title=Response -┌─generateUUIDv7(number)───────────────┐ -│ 019947fb-5766-7ed0-b021-d906f8f7cebb │ -│ 019947fb-5766-7ed0-b021-d9072d0d1e07 │ -│ 019947fb-5766-7ed0-b021-d908dca2cf63 │ -└──────────────────────────────────────┘ -``` - -**公共子表达式消除** - -```sql title=Query -SELECT generateUUIDv7(1), generateUUIDv7(1); -``` - -```response title=Response -┌─generateUUIDv7(1)────────────────────┬─generateUUIDv7(1)────────────────────┐ -│ 019947ff-0f87-7d88-ace0-8b5b3a66e0c1 │ 019947ff-0f87-7d88-ace0-8b5b3a66e0c1 │ -└──────────────────────────────────────┴──────────────────────────────────────┘ -``` - - -## readWKTLineString - -自版本 v 起引入。 - -解析 LineString 几何对象的 Well-Known Text (WKT) 表示形式,并以 ClickHouse 的内部格式返回。 - -**语法** - -```sql -readWKTLineString(wkt_string) -``` - -**参数** - -* `wkt_string` — 表示 LineString 几何对象的输入 WKT 字符串。[`String`](/sql-reference/data-types/string) - -**返回值** - -该函数返回 ClickHouse 中 LineString 几何对象的内部表示形式。 - -**示例** - -**首次调用** - -```sql title=Query -SELECT readWKTLineString('LINESTRING (1 1, 2 2, 3 3, 1 1)'); -``` - -```response title=Response -┌─readWKTLineString('LINESTRING (1 1, 2 2, 3 3, 1 1)')─┐ -│ [(1,1),(2,2),(3,3),(1,1)] │ -└──────────────────────────────────────────────────────┘ -``` - -**第二次调用** - -```sql title=Query -SELECT toTypeName(readWKTLineString('LINESTRING (1 1, 2 2, 3 3, 1 1)')); -``` - -```response title=Response -┌─toTypeName(readWKTLineString('LINESTRING (1 1, 2 2, 3 3, 1 1)'))─┐ -│ LineString │ -└──────────────────────────────────────────────────────────────────┘ -``` - - -## snowflakeIDToDateTime - -引入版本:v24.6 - -返回 [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) 中的时间戳部分,类型为 [DateTime](../data-types/datetime.md)。 - -**语法** - -```sql -snowflakeIDToDateTime(value[, epoch[, time_zone]]) -``` - -**参数** - -* `value` — Snowflake ID。[`UInt64`](/sql-reference/data-types/int-uint) -* `epoch` — 可选。以毫秒为单位、自 1970-01-01 起算的 Snowflake ID 纪元起点。默认值为 0(1970-01-01)。对于 Twitter/X 的纪元(2015-01-01),请使用 1288834974657。[`UInt*`](/sql-reference/data-types/int-uint) -* `time_zone` — 可选。[时区](/operations/server-configuration-parameters/settings.md#timezone)。函数会根据该时区解析 `time_string`。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回 `value` 的时间戳部分。[`DateTime`](/sql-reference/data-types/datetime) - -**示例** - -**使用示例** - -```sql title=Query -SELECT snowflakeIDToDateTime(7204436857747984384) AS res -``` - -```response title=Response -┌─────────────────res─┐ -│ 2024-06-06 10:59:58 │ -└─────────────────────┘ -``` - - -## snowflakeIDToDateTime64 - -引入于:v24.6 - -将 [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) 的时间戳部分返回为 [DateTime64](../data-types/datetime64.md) 类型的值。 - -**语法** - -```sql -snowflakeIDToDateTime64(value[, epoch[, time_zone]]) -``` - -**参数** - -* `value` — Snowflake ID。[`UInt64`](/sql-reference/data-types/int-uint) -* `epoch` — 可选。Snowflake ID 的纪元时间,单位为自 1970-01-01 起的毫秒。默认为 0(1970-01-01)。对于 Twitter/X 的纪元(2015-01-01),请使用 1288834974657。[`UInt*`](/sql-reference/data-types/int-uint) -* `time_zone` — 可选。[时区](/operations/server-configuration-parameters/settings.md#timezone)。函数将根据该时区解析 `time_string`。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回 `value` 的时间戳部分,类型为 `DateTime64`,scale = 3,即毫秒精度。[`DateTime64`](/sql-reference/data-types/datetime64) - -**示例** - -**用法示例** - -```sql title=Query -SELECT snowflakeIDToDateTime64(7204436857747984384) AS res -``` - -```response title=Response -┌─────────────────res─┐ -│ 2024-06-06 10:59:58 │ -└─────────────────────┘ -``` - - -## snowflakeToDateTime - -引入版本:v21.10 - - - -:::warning -此函数已弃用,仅在启用了设置 [`allow_deprecated_snowflake_conversion_functions`](../../operations/settings/settings.md#allow_deprecated_snowflake_conversion_functions) 时才能使用。 -该函数将在未来的某个时间点被移除。 - -请改用函数 [`snowflakeIDToDateTime`](#snowflakeIDToDateTime)。 -::: - -从 [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) 中提取时间戳部分,并以 [DateTime](../data-types/datetime.md) 格式返回。 - -**语法** - -```sql -snowflakeToDateTime(value[, time_zone]) -``` - -**参数** - -* `value` — Snowflake ID。[`Int64`](/sql-reference/data-types/int-uint) -* `time_zone` — 可选。[Timezone](/operations/server-configuration-parameters/settings.md#timezone)。函数会按照 `time_zone` 指定的时区解析 `time_string`。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回 `value` 的时间戳部分。[`DateTime`](/sql-reference/data-types/datetime) - -**示例** - -**使用示例** - -```sql title=Query -SELECT snowflakeToDateTime(CAST('1426860702823350272', 'Int64'), 'UTC'); -``` - -```response title=Response -┌─snowflakeToDateTime(CAST('1426860702823350272', 'Int64'), 'UTC')─┐ -│ 2021-08-15 10:57:56 │ -└──────────────────────────────────────────────────────────────────┘ -``` - - -## snowflakeToDateTime64 - -自 v21.10 引入 - - - -:::warning -此函数已弃用,仅在启用设置 [`allow_deprecated_snowflake_conversion_functions`](../../operations/settings/settings.md#allow_deprecated_snowflake_conversion_functions) 时才可使用。 -该函数将在未来的版本中移除。 - -请改用函数 [`snowflakeIDToDateTime64`](#snowflakeIDToDateTime64)。 -::: - -提取 [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) 的时间戳部分,并以 [DateTime64](../data-types/datetime64.md) 格式返回。 - -**语法** - -```sql -snowflakeToDateTime64(value[, time_zone]) -``` - -**参数** - -* `value` — Snowflake ID。[`Int64`](/sql-reference/data-types/int-uint) -* `time_zone` — 可选。[Timezone](/operations/server-configuration-parameters/settings.md#timezone)。函数会根据该时区解析 `time_string`。[`String`](/sql-reference/data-types/string) - -**返回值** - -返回 `value` 的时间戳部分。[`DateTime64(3)`](/sql-reference/data-types/datetime64) - -**示例** - -**使用示例** - -```sql title=Query -SELECT snowflakeToDateTime64(CAST('1426860802823350272', 'Int64'), 'UTC'); -``` - -```response title=Response -┌─snowflakeToDateTime64(CAST('1426860802823350272', 'Int64'), 'UTC')─┐ -│ 2021-08-15 10:58:19.841 │ -└────────────────────────────────────────────────────────────────────┘ -``` - - -## toUUIDOrDefault - -自 v21.1 起引入 - -将 String 值转换为 UUID 类型。如果转换失败,则返回一个默认的 UUID 值,而不是抛出错误。 - -该函数尝试解析长度为 36 个字符、采用标准 UUID 格式(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)的字符串。 -如果字符串无法转换为有效的 UUID,函数会返回提供的默认 UUID 值。 - -**语法** - -```sql -toUUIDOrDefault(字符串, 默认值) -``` - -**参数** - -* `string` — 长度为 36 的字符串或 FixedString(36),将被转换为 UUID。- `default` — 当第一个参数无法转换为 UUID 类型时返回的 UUID 值。 - -**返回值** - -如果转换成功,则返回转换后的 UUID;如果转换失败,则返回默认的 UUID。[`UUID`](/sql-reference/data-types/uuid) - -**示例** - -**转换成功时返回解析后的 UUID** - -```sql title=Query -SELECT toUUIDOrDefault('61f0c404-5cb3-11e7-907b-a6006ad3dba0', toUUID('59f0c404-5cb3-11e7-907b-a6006ad3dba0')); -``` - -```response title=Response -┌─toUUIDOrDefault('61f0c404-5cb3-11e7-907b-a6006ad3dba0', toUUID('59f0c404-5cb3-11e7-907b-a6006ad3dba0'))─┐ -│ 61f0c404-5cb3-11e7-907b-a6006ad3dba0 │ -└──────────────────────────────────────────────────────────────────────────────────────────────────────────┘ -``` - -**转换失败时返回默认的 UUID** - -```sql title=Query -SELECT toUUIDOrDefault('-----61f0c404-5cb3-11e7-907b-a6006ad3dba0', toUUID('59f0c404-5cb3-11e7-907b-a6006ad3dba0')); -``` - -```response title=Response -┌─toUUIDOrDefault('-----61f0c404-5cb3-11e7-907b-a6006ad3dba0', toUUID('59f0c404-5cb3-11e7-907b-a6006ad3dba0'))─┐ -│ 59f0c404-5cb3-11e7-907b-a6006ad3dba0 │ -└───────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ -``` - - -## toUUIDOrNull - -引入版本:v20.12 - -将输入值转换为 `UUID` 类型的值,但在发生错误时返回 `NULL`。 -类似于 [`toUUID`](#touuid),但在转换出错时返回 `NULL` 而不是抛出异常。 - -支持的参数: - -* 标准格式的 UUID 字符串表示(8-4-4-4-12 个十六进制数字)。 -* 不带连字符的 UUID 字符串表示(32 个十六进制数字)。 - -不支持的参数(返回 `NULL`): - -* 无效的字符串格式。 -* 非字符串类型。 -* 非法的 UUID。 - -**语法** - -```sql -toUUIDOrNull(x) -``` - -**参数** - -* `x` — UUID 的字符串形式。[`String`](/sql-reference/data-types/string) - -**返回值** - -如果成功,返回 UUID 值,否则返回 `NULL`。[`UUID`](/sql-reference/data-types/uuid) 或 [`NULL`](/sql-reference/syntax#null) - -**示例** - -**使用示例** - -```sql title=Query -SELECT - toUUIDOrNull('550e8400-e29b-41d4-a716-446655440000') AS valid_uuid, - toUUIDOrNull('invalid-uuid') AS invalid_uuid -``` - -```response title=Response -┌─valid_uuid───────────────────────────┬─invalid_uuid─┐ -│ 550e8400-e29b-41d4-a716-446655440000 │ ᴺᵁᴸᴸ │ -└──────────────────────────────────────┴──────────────┘ -``` - {/*AUTOGENERATED_END*/ } diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/operators/distributed-ddl.md b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/operators/distributed-ddl.md index b5a3175498e..87690ccd393 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/operators/distributed-ddl.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/operators/distributed-ddl.md @@ -6,6 +6,6 @@ title: '分布式 DDL 页面' doc_type: 'reference' --- -import Content from '@site/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/distributed-ddl.md'; +import Content from '@site/docs/sql-reference/distributed-ddl.md'; diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/operators/index.md b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/operators/index.md index 5917e0fb312..106c77b73b8 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/operators/index.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/operators/index.md @@ -1,6 +1,5 @@ --- description: '运算符文档' -displayed_sidebar: 'sqlreference' sidebar_label: '运算符' sidebar_position: 38 slug: /sql-reference/operators/ @@ -8,146 +7,137 @@ title: '运算符' doc_type: 'reference' --- - - # 运算符 -在查询解析阶段,ClickHouse 会根据运算符的优先级、先后次序和结合性,将其转换为相应的函数。 - - - -## 访问操作符 {#access-operators} - -`a[N]` – 访问数组元素。对应 `arrayElement(a, N)` 函数。 +ClickHouse 会在解析查询时,根据运算符的优先级、结合性等规则,将运算符转换为对应的函数。 -`a.N` – 访问元组元素。对应 `tupleElement(a, N)` 函数。 +## 访问运算符 \{#access-operators\} +`a[N]` – 访问数组的某个元素。对应的函数是 `arrayElement(a, N)`。 -## 数值取反运算符 {#numeric-negation-operator} +`a.N` – 访问元组的某个元素。对应的函数是 `tupleElement(a, N)`。 -`-a` – `negate (a)` 函数。 +## 数值取负运算符 \{#numeric-negation-operator\} -元组取反请参见:[tupleNegate](../../sql-reference/functions/tuple-functions.md#tupleNegate)。 +`-a` – `negate(a)` 函数。 +对于元组取负: [tupleNegate](../../sql-reference/functions/tuple-functions.md#tupleNegate)。 -## 乘法和除法运算符 {#multiplication-and-division-operators} +## 乘法和除法运算符 \{#multiplication-and-division-operators\} -`a * b` – `multiply (a, b)` 函数。 +`a * b` – `multiply(a, b)` 函数。 -元组乘以数字:[tupleMultiplyByNumber](../../sql-reference/functions/tuple-functions.md#tupleMultiplyByNumber),标量积:[dotProduct](/sql-reference/functions/array-functions#arrayDotProduct)。 +将元组与数字相乘时:参见 [tupleMultiplyByNumber](../../sql-reference/functions/tuple-functions.md#tupleMultiplyByNumber),计算标量积时:参见 [dotProduct](/sql-reference/functions/array-functions#arrayDotProduct)。 `a / b` – `divide(a, b)` 函数。 -元组除以数字:[tupleDivideByNumber](../../sql-reference/functions/tuple-functions.md#tupleDivideByNumber)。 +将元组除以数字时:参见 [tupleDivideByNumber](../../sql-reference/functions/tuple-functions.md#tupleDivideByNumber)。 `a % b` – `modulo(a, b)` 函数。 - -## 加法和减法运算符 {#addition-and-subtraction-operators} +## 加法和减法运算符 \{#addition-and-subtraction-operators\} `a + b` – `plus(a, b)` 函数。 -元组加法请参见:[tuplePlus](../../sql-reference/functions/tuple-functions.md#tuplePlus)。 +元组加法运算: [tuplePlus](../../sql-reference/functions/tuple-functions.md#tuplePlus)。 `a - b` – `minus(a, b)` 函数。 -元组减法请参见:[tupleMinus](../../sql-reference/functions/tuple-functions.md#tupleMinus)。 - +元组减法运算: [tupleMinus](../../sql-reference/functions/tuple-functions.md#tupleMinus)。 -## 比较运算符 {#comparison-operators} +## 比较运算符 \{#comparison-operators\} -### equals 函数 {#equals-function} +### equals 函数 \{#equals-function\} -`a = b` – 等同于 `equals(a, b)` 函数。 +`a = b` – `equals(a, b)` 函数。 -`a == b` – 等同于 `equals(a, b)` 函数。 +`a == b` – `equals(a, b)` 函数。 -### notEquals 函数 {#notequals-function} +### notEquals 函数 \{#notequals-function\} -`a != b` – 等同于 `notEquals(a, b)` 函数。 +`a != b` – 等价于 `notEquals(a, b)` 函数。 -`a <> b` – 等同于 `notEquals(a, b)` 函数。 +`a <> b` – 等价于 `notEquals(a, b)` 函数。 -### lessOrEquals 函数 {#lessorequals-function} +### lessOrEquals 函数 \{#lessorequals-function\} -`a <= b` – 等同于 `lessOrEquals(a, b)` 函数。 +`a <= b` – 即 `lessOrEquals(a, b)` 函数。 -### greaterOrEquals 函数 {#greaterorequals-function} +### greaterOrEquals 函数 \{#greaterorequals-function\} -`a >= b` – 等同于 `greaterOrEquals(a, b)` 函数。 +`a >= b` – 即 `greaterOrEquals(a, b)` 函数。 -### less 函数 {#less-function} +### less 函数 \{#less-function\} `a < b` – 等同于 `less(a, b)` 函数。 -### greater 函数 {#greater-function} - -`a > b` – 等同于 `greater(a, b)` 函数。 +### greater 函数 \{#greater-function\} -### like 函数 {#like-function} +`a > b` – `greater(a, b)` 函数。 -`a LIKE b` – 等同于 `like(a, b)` 函数。 +### like 函数 \{#like-function\} -### notLike 函数 {#notlike-function} +`a LIKE b` – `like(a, b)` 函数。 -`a NOT LIKE b` – 等同于 `notLike(a, b)` 函数。 +### notLike 函数 \{#notlike-function\} -### ilike 函数 {#ilike-function} +`a NOT LIKE b` – `notLike(a, b)` 函数。 -`a ILIKE b` – 等同于 `ilike(a, b)` 函数。 +### ilike 函数 \{#ilike-function\} -### BETWEEN 函数 {#between-function} +`a ILIKE b` – 等价于 `ilike(a, b)` 函数。 -`a BETWEEN b AND c` – 等同于 `a >= b AND a <= c`。 +### BETWEEN 函数 \{#between-function\} -`a NOT BETWEEN b AND c` – 等同于 `a < b OR a > c`。 +`a BETWEEN b AND c` – 等价于 `a >= b AND a <= c`。 +`a NOT BETWEEN b AND c` – 等价于 `a < b OR a > c`。 -## 用于处理数据集的运算符 {#operators-for-working-with-data-sets} +## 用于处理数据集的运算符 \{#operators-for-working-with-data-sets\} -参见 [IN 运算符](../../sql-reference/operators/in.md) 和 [EXISTS](../../sql-reference/operators/exists.md) 运算符。 +参见 [IN 运算符](../../sql-reference/operators/in.md) 和 [EXISTS 运算符](../../sql-reference/operators/exists.md)。 -### in 函数 {#in-function} +### in 函数 \{#in-function\} -`a IN ...` – `in(a, b)` 函数。 +`a IN ...` – 等价于 `in(a, b)` 函数。 -### notIn 函数 {#notin-function} +### notIn 函数 \{#notin-function\} -`a NOT IN ...` – `notIn(a, b)` 函数。 +`a NOT IN ...` – 对应 `notIn(a, b)` 函数。 -### globalIn 函数 {#globalin-function} +### globalIn 函数 \{#globalin-function\} -`a GLOBAL IN ...` – `globalIn(a, b)` 函数。 +`a GLOBAL IN ...` —— 对应的函数为 `globalIn(a, b)`。 -### globalNotIn 函数 {#globalnotin-function} +### globalNotIn 函数 \{#globalnotin-function\} `a GLOBAL NOT IN ...` – `globalNotIn(a, b)` 函数。 -### in 子查询函数 {#in-subquery-function} +### in 子查询函数 \{#in-subquery-function\} -`a = ANY (subquery)` – `in(a, subquery)` 函数。 +`a = ANY (subquery)` – 等价于 `in(a, subquery)` 函数。 -### notIn 子查询函数 {#notin-subquery-function} +### notIn 子查询函数 \{#notin-subquery-function\} `a != ANY (subquery)` – 等同于 `a NOT IN (SELECT singleValueOrNull(*) FROM subquery)`。 -### in 子查询函数 {#in-subquery-function-1} +### in subquery 函数 \{#in-subquery-function-1\} -`a = ALL (subquery)` – 等同于 `a IN (SELECT singleValueOrNull(*) FROM subquery)`。 +`a = ALL (subquery)` – 等价于 `a IN (SELECT singleValueOrNull(*) FROM subquery)`。 -### notIn 子查询函数 {#notin-subquery-function-1} +### notIn 子查询函数 `a != ALL (subquery)` – `notIn(a, subquery)` 函数。 **示例** -使用 ALL 的查询: +包含 ALL 的查询: ```sql SELECT number AS a FROM numbers(10) WHERE a > ALL (SELECT number FROM numbers(3, 3)); ``` -结果: +结果: ```text ┌─a─┐ @@ -158,13 +148,13 @@ SELECT number AS a FROM numbers(10) WHERE a > ALL (SELECT number FROM numbers(3, └───┘ ``` -使用 ANY 的查询: +使用 ANY 查询: ```sql SELECT number AS a FROM numbers(10) WHERE a > ANY (SELECT number FROM numbers(3, 3)); ``` -结果: +结果: ```text ┌─a─┐ @@ -178,30 +168,30 @@ SELECT number AS a FROM numbers(10) WHERE a > ANY (SELECT number FROM numbers(3, ``` -## 日期和时间运算符 {#operators-for-working-with-dates-and-times} +## 日期和时间运算符 \{#operators-for-working-with-dates-and-times\} -### EXTRACT {#extract} +### EXTRACT ```sql EXTRACT(part FROM date); ``` -从给定日期中提取部分信息。例如,可以从给定日期中提取月份,或从时间中提取秒数。 +从给定日期中提取某个部分。例如,你可以从日期中获取月份,或从时间中获取秒数。 -`part` 参数指定要提取日期的哪个部分。可用值如下: +参数 `part` 指定要从日期中提取的部分。可取值如下: -- `DAY` — 月份中的天数。可能的值:1–31。 -- `MONTH` — 月份编号。可能的值:1–12。 -- `YEAR` — 年份。 -- `SECOND` — 秒数。可能的值:0–59。 -- `MINUTE` — 分钟数。可能的值:0–59。 -- `HOUR` — 小时数。可能的值:0–23。 +* `DAY` — 月中的某一天。可能的取值范围:1–31。 +* `MONTH` — 月份序号。可能的取值范围:1–12。 +* `YEAR` — 年。 +* `SECOND` — 秒。可能的取值范围:0–59。 +* `MINUTE` — 分钟。可能的取值范围:0–59。 +* `HOUR` — 小时。可能的取值范围:0–23。 -`part` 参数不区分大小写。 +参数 `part` 不区分大小写。 -`date` 参数指定要处理的日期或时间。支持 [Date](../../sql-reference/data-types/date.md) 或 [DateTime](../../sql-reference/data-types/datetime.md) 类型。 +参数 `date` 指定要处理的日期或时间。支持 [Date](../../sql-reference/data-types/date.md) 或 [DateTime](../../sql-reference/data-types/datetime.md) 类型。 -示例: +示例: ```sql SELECT EXTRACT(DAY FROM toDate('2017-06-15')); @@ -209,7 +199,7 @@ SELECT EXTRACT(MONTH FROM toDate('2017-06-15')); SELECT EXTRACT(YEAR FROM toDate('2017-06-15')); ``` -在以下示例中,我们创建一个表并向其中插入一个 `DateTime` 类型的值。 +在下面的示例中,我们创建一张表,并向其中插入一条 `DateTime` 类型的数据。 ```sql CREATE TABLE test.Orders @@ -222,7 +212,7 @@ ENGINE = Log; ``` ```sql -INSERT INTO test.Orders VALUES (1, 'Jarlsberg Cheese', toDateTime('2008-10-11 13:23:44')); +INSERT INTO test.Orders VALUES (1, 'Jarlsberg 奶酪', toDateTime('2008-10-11 13:23:44')); ``` ```sql @@ -242,30 +232,31 @@ FROM test.Orders; └───────────┴────────────┴──────────┴───────────┴─────────────┴─────────────┘ ``` -更多示例请参见[测试用例](https://github.com/ClickHouse/ClickHouse/blob/master/tests/queries/0_stateless/00619_extract.sql)。 +可以在 [tests](https://github.com/ClickHouse/ClickHouse/blob/master/tests/queries/0_stateless/00619_extract.sql) 中查看更多示例。 + -### INTERVAL {#interval} +### INTERVAL -创建一个 [Interval](../../sql-reference/data-types/special-data-types/interval.md) 类型的值,用于与 [Date](../../sql-reference/data-types/date.md) 和 [DateTime](../../sql-reference/data-types/datetime.md) 类型值进行算术运算。 +创建一个 [Interval](../../sql-reference/data-types/special-data-types/interval.md) 类型的值,用于与 [Date](../../sql-reference/data-types/date.md) 和 [DateTime](../../sql-reference/data-types/datetime.md) 类型的值进行算术运算。 -间隔类型: +可用的时间间隔类型: -- `SECOND` -- `MINUTE` -- `HOUR` -- `DAY` -- `WEEK` -- `MONTH` -- `QUARTER` -- `YEAR` +* `SECOND` +* `MINUTE` +* `HOUR` +* `DAY` +* `WEEK` +* `MONTH` +* `QUARTER` +* `YEAR` -设置 `INTERVAL` 值时,也可以使用字符串字面量。例如,`INTERVAL 1 HOUR` 与 `INTERVAL '1 hour'` 或 `INTERVAL '1' hour` 等效。 +在设置 `INTERVAL` 值时,也可以使用字符串字面量。例如,`INTERVAL 1 HOUR` 等同于 `INTERVAL '1 hour'` 或 `INTERVAL '1' hour`。 -:::tip -不同类型的间隔不能组合使用。不能使用类似 `INTERVAL 4 DAY 1 HOUR` 的表达式。应使用小于或等于间隔最小单位的单位来指定间隔,例如 `INTERVAL 25 HOUR`。可以使用连续操作,如下面的示例所示。 +:::tip\ +不同类型的时间间隔不能组合使用。不能使用类似 `INTERVAL 4 DAY 1 HOUR` 的表达式。请使用不大于该间隔中最小时间单位的单位来指定间隔,例如 `INTERVAL 25 HOUR`。也可以像下面示例中那样通过多次连续运算来实现。 ::: -示例: +示例: ```sql SELECT now() AS current_date_time, current_date_time + INTERVAL 4 DAY + INTERVAL 3 HOUR; @@ -281,7 +272,6 @@ SELECT now() AS current_date_time, current_date_time + INTERVAL 4 DAY + INTERVAL SELECT now() AS current_date_time, current_date_time + INTERVAL '4 day' + INTERVAL '3 hour'; ``` - ```text ┌───current_date_time─┬─plus(plus(now(), toIntervalDay(4)), toIntervalHour(3))─┐ │ 2020-11-03 22:12:10 │ 2020-11-08 01:12:10 │ @@ -299,7 +289,7 @@ SELECT now() AS current_date_time, current_date_time + INTERVAL '4' day + INTERV ``` :::note\ -始终优先使用 `INTERVAL` 语法或 `addDays` 函数。简单的加减运算(例如 `now() + ...` 这样的语法)不会考虑时间设置,比如夏令时等。 +应始终优先使用 `INTERVAL` 语法或 `addDays` 函数。简单的加减运算(例如 `now() + ...` 这样的语法)不会考虑时区等时间设置,比如夏令时。 ::: 示例: @@ -320,31 +310,27 @@ SELECT toDateTime('2014-10-26 00:00:00', 'Asia/Istanbul') AS time, time + 60 * 6 * [toInterval](/sql-reference/functions/type-conversion-functions#tointervalyear) 类型转换函数 -## 逻辑 AND 运算符 {#logical-and-operator} - -语法 `SELECT a AND b` — 使用 [and](/sql-reference/functions/logical-functions#and) 函数计算 `a` 和 `b` 的逻辑与运算。 - +## 逻辑与运算符 \{#logical-and-operator\} -## 逻辑 OR 运算符 {#logical-or-operator} +语法 `SELECT a AND b` —— 使用函数 [and](/sql-reference/functions/logical-functions#and) 计算 `a` 和 `b` 的逻辑与结果。 -语法 `SELECT a OR b` — 使用 [or](/sql-reference/functions/logical-functions#or) 函数计算 `a` 和 `b` 的逻辑或运算。 +## 逻辑 OR 运算符 \{#logical-or-operator\} +语法 `SELECT a OR b` — 使用函数 [or](/sql-reference/functions/logical-functions#or) 计算 `a` 和 `b` 的逻辑或。 -## 逻辑非运算符 {#logical-negation-operator} +## 逻辑非运算符 \{#logical-negation-operator\} -语法 `SELECT NOT a` — 通过函数 [not](/sql-reference/functions/logical-functions#not) 计算 `a` 的逻辑非。 +语法 `SELECT NOT a`——使用函数 [not](/sql-reference/functions/logical-functions#not) 计算 `a` 的逻辑非。 - -## 条件运算符 {#conditional-operator} +## 条件运算符 \{#conditional-operator\} `a ? b : c` – `if(a, b, c)` 函数。 -注意: - -条件运算符会先计算 b 和 c 的值,然后检查条件 a 是否满足,最后返回相应的值。如果 `b` 或 `c` 是 [arrayJoin()](/sql-reference/functions/array-join) 函数,则无论条件 "a" 如何,每一行都会被复制。 +注意: +条件运算符会先计算表达式 b 和 c 的值,然后检查条件 a 是否满足,并返回相应的结果。如果 `b` 或 `c` 是 [arrayJoin()](/sql-reference/functions/array-join) 函数,每一行都会被复制,与条件 a 是否成立无关。 -## 条件表达式 {#conditional-expression} +## 条件表达式 ```sql CASE [x] @@ -354,57 +340,52 @@ CASE [x] END ``` -如果指定了 `x`,则使用 `transform(x, [a, ...], [b, ...], c)` 函数。否则使用 `multiIf(a, b, ..., c)` 函数。 - -如果表达式中没有 `ELSE c` 子句,默认值为 `NULL`。 +如果指定了 `x`,则使用函数 `transform(x, [a, ...], [b, ...], c)`;否则使用 `multiIf(a, b, ..., c)`。 -`transform` 函数不支持 `NULL` 值。 +如果表达式中没有 `ELSE c` 子句,则默认值为 `NULL`。 +`transform` 函数不支持 `NULL`。 -## 连接运算符 {#concatenation-operator} -`s1 || s2` – `concat(s1, s2)` 函数。 +## 连接运算符 \{#concatenation-operator\} +`s1 || s2` – 表示 `concat(s1, s2)` 函数。 -## Lambda 创建运算符 {#lambda-creation-operator} +## Lambda 创建运算符 \{#lambda-creation-operator\} `x -> expr` – `lambda(x, expr)` 函数。 -以下运算符由于是括号,因此没有优先级: +以下运算符不区分优先级,因为它们起到括号的作用: +## 数组创建运算符 \{#array-creation-operator\} -## 数组创建运算符 {#array-creation-operator} +`[x1, ...]` – 对应 `array(x1, ...)` 函数。 -`[x1, ...]` – `array(x1, ...)` 函数。 +## 元组创建运算符 \{#tuple-creation-operator\} +`(x1, x2, ...)` – 等价于调用 `tuple(x1, x2, ...)` 函数。 -## 元组创建运算符 {#tuple-creation-operator} +## 结合性 \{#associativity\} -`(x1, x2, ...)` – `tuple(x2, x2, ...)` 函数。 +所有二元运算符都是左结合的。例如,`1 + 2 + 3` 会被转换为 `plus(plus(1, 2), 3)`。 +有时其行为可能与预期不符。例如,`SELECT 4 > 2 > 3` 的结果为 0。 +为了提高效率,`and` 和 `or` 函数可以接受任意数量的参数。相应的 `AND` 和 `OR` 运算符链会被转换为对这些函数的一次调用。 -## 结合性 {#associativity} - -所有二元运算符都具有左结合性。例如,`1 + 2 + 3` 会被转换为 `plus(plus(1, 2), 3)`。 -有时这可能不会按预期方式工作。例如,`SELECT 4 > 2 > 3` 的结果将为 0。 - -为了提高效率,`and` 和 `or` 函数接受任意数量的参数。相应的 `AND` 和 `OR` 运算符链会被转换为对这些函数的单次调用。 - - -## 检查 `NULL` 值 {#checking-for-null} +## 检查 `NULL` 值 \{#checking-for-null\} ClickHouse 支持 `IS NULL` 和 `IS NOT NULL` 运算符。 -### IS NULL {#is_null} +### IS NULL \ -- 对于 [Nullable](../../sql-reference/data-types/nullable.md) 类型的值,`IS NULL` 运算符返回: - - `1`,如果值为 `NULL`。 - - `0`,否则。 -- 对于其他值,`IS NULL` 运算符始终返回 `0`。 +* 对于 [Nullable](../../sql-reference/data-types/nullable.md) 类型的值,`IS NULL` 运算符返回: + * 如果值为 `NULL`,则返回 `1`。 + * 否则返回 `0`。 +* 对于其他值,`IS NULL` 运算符始终返回 `0`。 -可以通过启用 [optimize_functions_to_subcolumns](/operations/settings/settings#optimize_functions_to_subcolumns) 设置来优化。当 `optimize_functions_to_subcolumns = 1` 时,该函数仅读取 [null](../../sql-reference/data-types/nullable.md#finding-null) 子列,而不读取和处理整个列的数据。查询 `SELECT n IS NULL FROM table` 会转换为 `SELECT n.null FROM TABLE`。 +可以通过启用 [optimize_functions_to_subcolumns](/operations/settings/settings#optimize_functions_to_subcolumns) 设置进行优化。将 `optimize_functions_to_subcolumns` 设为 `1` 后,函数只会读取 [null](../../sql-reference/data-types/nullable.md#finding-null) 子列,而不是读取并处理整个列的数据。查询 `SELECT n IS NULL FROM table` 会被转换为 `SELECT n.null FROM TABLE`。 - +{/* */ } ```sql SELECT x+100 FROM t_null WHERE y IS NULL @@ -416,14 +397,15 @@ SELECT x+100 FROM t_null WHERE y IS NULL └──────────────┘ ``` -### IS NOT NULL {#is_not_null} -- 对于 [Nullable](../../sql-reference/data-types/nullable.md) 类型的值,`IS NOT NULL` 运算符返回: - - `0`,如果值为 `NULL`。 - - `1`,否则。 -- 对于其他值,`IS NOT NULL` 运算符始终返回 `1`。 +### IS NOT NULL \ + +* 对于 [Nullable](../../sql-reference/data-types/nullable.md) 类型的值,`IS NOT NULL` 运算符返回: + * 当值为 `NULL` 时返回 `0`。 + * 否则返回 `1`。 +* 对于其他值,`IS NOT NULL` 运算符始终返回 `1`。 - +{/* */ } ```sql SELECT * FROM t_null WHERE y IS NOT NULL @@ -435,4 +417,4 @@ SELECT * FROM t_null WHERE y IS NOT NULL └───┴───┘ ``` -可以通过启用 [optimize_functions_to_subcolumns](/operations/settings/settings#optimize_functions_to_subcolumns) 设置来优化。当 `optimize_functions_to_subcolumns = 1` 时,该函数仅读取 [null](../../sql-reference/data-types/nullable.md#finding-null) 子列,而不读取和处理整个列的数据。查询 `SELECT n IS NOT NULL FROM table` 会转换为 `SELECT NOT n.null FROM TABLE`。 +可以通过启用 [optimize_functions_to_subcolumns](/operations/settings/settings#optimize_functions_to_subcolumns) 设置来进行优化。将 `optimize_functions_to_subcolumns` 设为 `1` 时,函数只读取 [null](../../sql-reference/data-types/nullable.md#finding-null) 子列,而不是读取和处理整列数据。查询 `SELECT n IS NOT NULL FROM table` 会被转换为 `SELECT NOT n.null FROM TABLE`。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/sql-reference-links.json b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/sql-reference-links.json index 9ae5ffb67dd..5f195c09b6d 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/sql-reference-links.json +++ b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/sql-reference-links.json @@ -1,12 +1,12 @@ [ { - "title": "运算符", - "description": "ClickHouse 支持的 SQL 运算符列表", + "title": "语句", + "description": "ClickHouse 中可用的 SQL 语句列表", "url": "/docs/sql-reference/statements/" }, { "title": "数据库与表引擎", - "description": "引擎决定数据的存储位置和方式", + "description": "引擎决定你的数据存储在哪里以及如何存储", "url": "/docs/engines/table-engines" } ] \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/statements/create/function.md b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/statements/create/function.md index 124bbc84aa6..a775ca89a8b 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/statements/create/function.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/statements/create/function.md @@ -1,29 +1,29 @@ --- description: '函数文档' -sidebar_label: '函数' +sidebar_label: 'FUNCTION' sidebar_position: 38 slug: /sql-reference/statements/create/function -title: 'CREATE FUNCTION - 用户自定义函数 (UDF)' +title: 'CREATE FUNCTION - 用户定义函数 (UDF)' doc_type: 'reference' --- -从 Lambda 表达式创建用户自定义函数 (UDF)。该表达式只能由函数参数、常量、运算符或其他函数调用组成。 +基于 lambda 表达式创建用户定义函数 (UDF)。该表达式必须由函数参数、常量、运算符或其他函数调用组成。 **语法** ```sql -创建 函数 name [在 集群 cluster 上] 为 (parameter0, ...) -> 表达式 +CREATE FUNCTION name [ON CLUSTER cluster] AS (parameter0, ...) -> expression ``` -函数可以具有任意数量的参数。 +一个函数可以有任意数量的参数。 -有以下几个限制: +有以下几点限制: -* 函数名在用户自定义函数和系统函数中必须是唯一的。 -* 不允许使用递归函数。 -* 函数使用的所有变量必须在其参数列表中指定。 +* 函数名称在用户自定义函数和系统函数中必须是唯一的。 +* 不允许递归函数。 +* 函数使用的所有变量都必须在其参数列表中明确指定。 -如果违反任一限制,将抛出异常。 +如果违反任何限制,将抛出异常。 **示例** @@ -44,26 +44,26 @@ SELECT number, linear_equation(number, 2, 1) FROM numbers(3); └────────┴──────────────────────────────┘ ``` -下面这个查询在用户自定义函数中调用了一个[条件函数](../../../sql-reference/functions/conditional-functions.md): +在以下查询中,在用户自定义函数中调用了一个[条件函数](../../../sql-reference/functions/conditional-functions.md): ```sql -CREATE FUNCTION parity_str AS (n) -> if(n % 2, '奇数', '偶数'); +CREATE FUNCTION parity_str AS (n) -> if(n % 2, 'odd', 'even'); SELECT number, parity_str(number) FROM numbers(3); ``` 结果: ```text -┌─number─┬─if(modulo(number, 2), '奇数', '偶数')─┐ -│ 0 │ 偶数 │ -│ 1 │ 奇数 │ -│ 2 │ 偶数 │ +┌─number─┬─if(modulo(number, 2), 'odd', 'even')─┐ +│ 0 │ even │ +│ 1 │ odd │ +│ 2 │ even │ └────────┴──────────────────────────────────────┘ ``` ## 相关内容 {#related-content} -### [可执行 UDF(用户自定义函数)](/sql-reference/functions/udf.md) {#executable-udfs} +### [可执行 UDF](/sql-reference/functions/udf.md). {#executable-udfs} ### [ClickHouse Cloud 中的用户自定义函数](https://clickhouse.com/blog/user-defined-functions-clickhouse-udfs) {#user-defined-functions-in-clickhouse-cloud} diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/statements/create/quota.md b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/statements/create/quota.md index 8ba211b5ead..13c3d3d3892 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/statements/create/quota.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/statements/create/quota.md @@ -1,13 +1,13 @@ --- -description: '配额文档' -sidebar_label: '配额' +description: 'QUOTA 文档' +sidebar_label: 'QUOTA' sidebar_position: 42 slug: /sql-reference/statements/create/quota title: 'CREATE QUOTA' doc_type: 'reference' --- -创建[配额](../../../guides/sre/user-management/index.md#quotas-management),并将其分配给用户或角色。 +创建一个 [QUOTA](../../../guides/sre/user-management/index.md#quotas-management),可分配给用户或角色。 语法: @@ -29,21 +29,21 @@ CREATE QUOTA [IF NOT EXISTS | OR REPLACE] name [ON CLUSTER cluster_name] **示例** -在 15 个月内,将当前用户的最大查询次数限制为 123 次: +在 15 个月的限制条件下,将当前用户的查询次数限制为最多 123 次: ```sql CREATE QUOTA qA FOR INTERVAL 15 month MAX queries = 123 TO CURRENT_USER; ``` -对于默认用户,将最大执行时间限制为在 30 分钟内不超过 0.5 秒,并在 5 个季度内将最大查询次数限制为 321、最大错误次数限制为 10: +对于默认用户,将 30 分钟内的最大执行时间限制为 0.5 秒,并在 5 个季度内将最大查询次数限制为 321 次、最大错误次数限制为 10 次: ```sql CREATE QUOTA qB FOR INTERVAL 30 minute MAX execution_time = 0.5, FOR INTERVAL 5 quarter MAX queries = 321, errors = 10 TO default; ``` -更多使用 XML 配置(ClickHouse Cloud 不支持)的示例可在[配额指南](/operations/quotas)中找到。 +更多关于 xml 配置(在 ClickHouse Cloud 中不支持)的示例,请参见[配额指南](/operations/quotas)。 ## 相关内容 {#related-content} -- 博客文章:[使用 ClickHouse 构建单页应用程序](https://clickhouse.com/blog/building-single-page-applications-with-clickhouse-and-http) +- 博客:[使用 ClickHouse 构建单页应用](https://clickhouse.com/blog/building-single-page-applications-with-clickhouse-and-http) diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/statements/create/row-policy.md b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/statements/create/row-policy.md index 1644ce507e9..411c0707dfc 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/statements/create/row-policy.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/statements/create/row-policy.md @@ -1,16 +1,16 @@ --- -description: '行策略相关文档' -sidebar_label: '行策略' +description: 'ROW POLICY 文档' +sidebar_label: 'ROW POLICY' sidebar_position: 41 slug: /sql-reference/statements/create/row-policy title: 'CREATE ROW POLICY' doc_type: 'reference' --- -创建一个[行策略](../../../guides/sre/user-management/index.md#row-policy-management),即用于确定用户可以从表中读取哪些行的筛选条件。 +创建一个 [row policy](../../../guides/sre/user-management/index.md#row-policy-management),即用于确定用户可以从表中读取哪些行的过滤器。 :::tip -行策略仅对仅具备只读权限的用户有意义。如果用户可以修改表或在表之间复制分区,行策略施加的限制就会失去作用。 +Row policy 仅对只读访问的用户有意义。如果某个用户可以修改表或在表之间复制分区,那么 row policy 的限制将会失效。 ::: 语法: @@ -27,24 +27,24 @@ CREATE [ROW] POLICY [IF NOT EXISTS | OR REPLACE] policy_name1 [ON CLUSTER cluste ## USING 子句 {#using-clause} -用于指定条件以筛选行。对于某一行,当该条件对该行的计算结果为非零值时,用户可以看到该行。 +允许指定条件来过滤行。只有当对某行计算该条件的结果为非零值时,用户才能看到该行。 ## TO 子句 {#to-clause} -在 `TO` 部分,可以指定此策略适用的用户和角色列表。例如:`CREATE ROW POLICY ... TO accountant, john@localhost`。 +在 `TO` 部分中,可以提供该策略适用的用户和角色列表。例如:`CREATE ROW POLICY ... TO accountant, john@localhost`。 -关键字 `ALL` 表示所有 ClickHouse 用户,包括当前用户。关键字 `ALL EXCEPT` 允许从所有用户列表中排除某些用户,例如:`CREATE ROW POLICY ... TO ALL EXCEPT accountant, john@localhost` +关键字 `ALL` 表示所有 ClickHouse 用户,包括当前用户。关键字 `ALL EXCEPT` 允许从全部用户列表中排除某些用户,例如:`CREATE ROW POLICY ... TO ALL EXCEPT accountant, john@localhost` :::note -如果没有为某个表定义任何行策略(row policy),则任意用户都可以对该表执行 `SELECT` 并读取所有行。一旦为该表定义了一条或多条行策略,对该表的访问就会依赖这些行策略,而与这些行策略是否是为当前用户定义的无关。例如,下面的策略: +如果没有为某个表定义任何行策略,那么任意用户都可以对该表执行 `SELECT` 以读取所有行。为该表定义一个或多个行策略后,对该表的访问将依赖这些行策略,而不管这些行策略是否是为当前用户定义的。例如,下面的策略: `CREATE ROW POLICY pol1 ON mydb.table1 USING b=1 TO mira, peter` -会禁止用户 `mira` 和 `peter` 查看满足 `b != 1` 的行,而任何未被提及的用户(例如用户 `paul`)将完全看不到 `mydb.table1` 中的任何行。 +禁止用户 `mira` 和 `peter` 查看满足 `b != 1` 的行,且任何未被提及的用户(例如用户 `paul`)将完全看不到 `mydb.table1` 中的任何行。 -如果这不是期望的行为,可以通过再添加一条类似下面的行策略来修正: +如果这不是期望的行为,可以通过再添加一个行策略来修正,例如: `CREATE ROW POLICY pol2 ON mydb.table1 USING 1 TO ALL EXCEPT mira, peter` ::: @@ -53,53 +53,53 @@ CREATE [ROW] POLICY [IF NOT EXISTS | OR REPLACE] policy_name1 [ON CLUSTER cluste ## AS 子句 -允许在同一张表上针对同一用户同时启用多个策略。所以我们需要一种方式来组合多个策略中的条件。 +允许在同一张表上针对同一用户同时启用多个策略。因此,我们需要一种方法将多个策略中的条件组合起来。 默认情况下,策略会使用布尔运算符 `OR` 进行组合。例如,以下策略: ```sql -在 mydb.table1 上创建行策略 pol1 使用 b=1 适用于 mira, peter -在 mydb.table1 上创建行策略 pol2 使用 c=2 适用于 peter, antonio +CREATE ROW POLICY pol1 ON mydb.table1 USING b=1 TO mira, peter +CREATE ROW POLICY pol2 ON mydb.table1 USING c=2 TO peter, antonio ``` 使用户 `peter` 能够看到满足 `b=1` 或 `c=2` 的行。 -`AS` 子句指定策略应如何与其他策略组合。策略可以是宽松型(permissive)或限制型(restrictive)。默认情况下,策略是宽松型的,这意味着它们使用布尔运算符 `OR` 进行组合。 +`AS` 子句指定策略应如何与其他策略组合。策略可以是宽松型(permissive)或严格型(restrictive)。默认情况下,策略是宽松型的,这意味着它们使用布尔运算符 `OR` 进行组合。 -策略也可以被定义为限制型。限制型策略使用布尔运算符 `AND` 进行组合。 +也可以将策略定义为严格型。严格型策略使用布尔运算符 `AND` 进行组合。 通用公式如下: ```text -row_is_visible = (至少有一个宽松策略的条件非零) AND - (所有严格策略的条件均为非零) +row_is_visible = (一个或多个宽松策略的条件为非零) AND + (所有限制性策略的条件均为非零) ``` -例如,以下这些策略: +例如,下面的策略: ```sql CREATE ROW POLICY pol1 ON mydb.table1 USING b=1 TO mira, peter CREATE ROW POLICY pol2 ON mydb.table1 USING c=2 AS RESTRICTIVE TO peter, antonio ``` -使用户 `peter` 只能在同时满足 `b=1` 且 `c=2` 时看到行。 +使用户 `peter` 仅当同时满足 `b=1` 且 `c=2` 时才能查看行。 -数据库级策略会与表级策略叠加生效。 +数据库策略会与表策略组合应用。 例如,以下策略: ```sql -创建行策略 pol1 在 mydb.* 上 使用 b=1 适用于 mira, peter -创建行策略 pol2 在 mydb.table1 上 使用 c=2 作为限制性 适用于 peter, antonio +CREATE ROW POLICY pol1 ON mydb.* USING b=1 TO mira, peter +CREATE ROW POLICY pol2 ON mydb.table1 USING c=2 AS RESTRICTIVE TO peter, antonio ``` -使用户 `peter` 只能在同时满足 `b=1` 且 `c=2` 时查看 table1 表中的行, -而在 mydb 中的其他任何表上,对该用户则只应用 `b=1` 策略。 +使用户 `peter` 只能在 `b=1` 且 `c=2` 时查看 table1 的行,尽管 +mydb 中的其他任何表对该用户只会应用 `b=1` 的策略。 ## ON CLUSTER 子句 {#on-cluster-clause} -允许在集群范围内创建行策略,参见 [分布式 DDL](../../../sql-reference/distributed-ddl.md)。 +允许在集群中创建行策略,参见 [Distributed DDL](../../../sql-reference/distributed-ddl.md)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/statements/create/settings-profile.md b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/statements/create/settings-profile.md index 369de366866..8a2adbfe935 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/statements/create/settings-profile.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/statements/create/settings-profile.md @@ -1,13 +1,13 @@ --- -description: '设置配置文件的文档' -sidebar_label: '设置配置文件' +description: 'SETTINGS PROFILE 文档' +sidebar_label: 'SETTINGS PROFILE' sidebar_position: 43 slug: /sql-reference/statements/create/settings-profile -title: 'CREATE SETTINGS PROFILE' +title: '创建 SETTINGS PROFILE' doc_type: 'reference' --- -创建[设置配置文件](../../../guides/sre/user-management/index.md#settings-profiles-management),并可将其分配给用户或角色。 +创建可以分配给用户或角色的 [settings profile](../../../guides/sre/user-management/index.md#settings-profiles-management)。 语法: @@ -19,7 +19,7 @@ CREATE SETTINGS PROFILE [IF NOT EXISTS | OR REPLACE] name1 [, name2 [,...]] [TO {{role1 | user1 [, role2 | user2 ...]} | NONE | ALL | ALL EXCEPT {role1 | user1 [, role2 | user2 ...]}}] ``` -`ON CLUSTER` 子句用于在集群范围内创建设置概要文件,参见 [分布式 DDL](../../../sql-reference/distributed-ddl.md)。 +`ON CLUSTER` 子句允许在集群上创建 SETTINGS PROFILE,参见 [Distributed DDL](../../../sql-reference/distributed-ddl.md)。 ## 示例 @@ -30,7 +30,7 @@ CREATE SETTINGS PROFILE [IF NOT EXISTS | OR REPLACE] name1 [, name2 [,...]] CREATE USER robin IDENTIFIED BY 'password'; ``` -创建 `max_memory_usage_profile` 设置配置文件,为 `max_memory_usage` 设置指定数值和约束条件,并将其分配给用户 `robin`: +创建 `max_memory_usage_profile` SETTINGS PROFILE,为 `max_memory_usage` 设置指定取值和约束,并将其分配给用户 `robin`: ```sql CREATE diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/statements/select/index.md b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/statements/select/index.md index 0cfee804aea..7a9bd92ab5f 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/statements/select/index.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/statements/select/index.md @@ -7,14 +7,10 @@ title: 'SELECT 查询语句' doc_type: 'reference' --- - - # SELECT 查询 `SELECT` 查询用于执行数据检索。默认情况下,请求的数据会返回给客户端,而与 [INSERT INTO](../../../sql-reference/statements/insert-into.md) 结合使用时,可以将其转发到另一张表中。 - - ## 语法 {#syntax} ```sql @@ -64,7 +60,6 @@ SELECT [DISTINCT [ON (column1, column2, ...)]] expr_list - [INTO OUTFILE 子句](../../../sql-reference/statements/select/into-outfile.md) - [FORMAT 子句](../../../sql-reference/statements/select/format.md) - ## SELECT 子句 {#select-clause} `SELECT` 子句中指定的[表达式](/sql-reference/syntax#expressions)会在上述所有子句的操作完成后进行计算。这些表达式的作用相当于应用于结果中的各个独立行。如果 `SELECT` 子句中的表达式包含聚合函数,ClickHouse 会在 [GROUP BY](/sql-reference/statements/select/group-by) 聚合过程中处理聚合函数及其参数中使用的表达式。 @@ -159,7 +154,6 @@ Code: 42. DB::Exception: Received from localhost:9000. DB::Exception: Number of `GROUP BY`、`ORDER BY` 和 `LIMIT BY` 子句支持位置参数。要启用此功能,请开启 [enable_positional_arguments](/operations/settings/settings#enable_positional_arguments) 设置。例如,`ORDER BY 1,2` 将按表中的第一列和第二列对行进行排序。 - ## 实现细节 {#implementation-details} 如果查询中省略了 `DISTINCT`、`GROUP BY` 和 `ORDER BY` 子句,以及 `IN` 和 `JOIN` 子查询,则查询将完全采用流式处理,仅使用 O(1) 级别的 RAM。否则,如果未指定适当的限制条件,查询可能会消耗大量 RAM: @@ -180,7 +174,6 @@ Code: 42. DB::Exception: Received from localhost:9000. DB::Exception: Number of 更多信息请参阅"设置"章节。可以使用外部排序(将临时表保存到磁盘)和外部聚合。 - ## SELECT 修饰符 {#select-modifiers} 您可以在 `SELECT` 查询中使用以下修饰符。 @@ -221,7 +214,6 @@ SELECT * REPLACE(i + 1 AS i) EXCEPT (j) APPLY(sum) from columns_transformers; └─────────────────┴────────┘ ``` - ## SELECT 查询中的 SETTINGS {#settings-in-select-query} 您可以直接在 `SELECT` 查询中指定所需的设置。设置值仅应用于此查询,并在查询执行后重置为默认值或之前的值。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/statements/system.md b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/statements/system.md index 128531e14ad..c765d7513f1 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/statements/system.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/statements/system.md @@ -12,20 +12,16 @@ import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; # SYSTEM 语句 - - -## SYSTEM RELOAD EMBEDDED DICTIONARIES {#reload-embedded-dictionaries} +## SYSTEM RELOAD EMBEDDED DICTIONARIES \{#reload-embedded-dictionaries\} 重新加载所有[内部字典](../../sql-reference/dictionaries/index.md)。 默认情况下,内部字典处于禁用状态。 无论内部字典更新结果如何,始终返回 `Ok.`。 +## SYSTEM RELOAD DICTIONARIES -## SYSTEM RELOAD DICTIONARIES {#reload-dictionaries} - -重新加载所有之前已成功加载的字典。 -默认情况下,字典采用延迟加载方式(参见 [dictionaries_lazy_load](../../operations/server-configuration-parameters/settings.md#dictionaries_lazy_load)),因此不会在启动时自动加载,而是在首次通过 dictGet 函数访问或从 ENGINE = Dictionary 的表中执行 SELECT 查询时才进行初始化。`SYSTEM RELOAD DICTIONARIES` 查询会重新加载这些已加载的字典(LOADED)。 -无论字典更新结果如何,始终返回 `Ok.`。 +`SYSTEM RELOAD DICTIONARIES` 查询会重新加载状态为 `LOADED` 的字典(参见 [`system.dictionaries`](/operations/system-tables/dictionaries) 的 `status` 列),即已成功加载过的字典。 +默认情况下,字典采用懒加载方式(参见 [dictionaries_lazy_load](../../operations/server-configuration-parameters/settings.md#dictionaries_lazy_load)),因此它们不会在启动时自动加载,而是在首次访问时才会初始化,例如通过 [`dictGet`](/sql-reference/functions/ext-dict-functions#dictGet) 函数,或在对 `ENGINE = Dictionary` 的表执行 `SELECT` 时进行初始化。 **语法** @@ -34,26 +30,27 @@ SYSTEM RELOAD DICTIONARIES [ON CLUSTER cluster_name] ``` -## SYSTEM RELOAD DICTIONARY {#reload-dictionary} +## SYSTEM RELOAD DICTIONARY -完全重新加载字典 `dictionary_name`,无论字典处于何种状态(LOADED / NOT_LOADED / FAILED)。 -无论字典更新结果如何,始终返回 `Ok.`。 +强制重新加载字典 `dictionary_name`,不论该字典当前处于何种状态(LOADED / NOT_LOADED / FAILED)。 +无论字典更新结果如何,始终返回 `Ok.`。 ```sql SYSTEM RELOAD DICTIONARY [ON CLUSTER cluster_name] dictionary_name ``` -可以通过查询 `system.dictionaries` 表来检查字典的状态。 +可以通过查询 `system.dictionaries` 表来查看字典状态。 ```sql SELECT name, status FROM system.dictionaries; ``` -## SYSTEM RELOAD MODELS {#reload-models} +## SYSTEM RELOAD MODELS :::note -此语句和 `SYSTEM RELOAD MODEL` 仅从 clickhouse-library-bridge 中卸载 CatBoost 模型。如果模型尚未加载,函数 `catboostEvaluate()` 会在首次访问时加载该模型。 +此语句以及 `SYSTEM RELOAD MODEL` 仅从 clickhouse-library-bridge 中卸载 CatBoost 模型。函数 `catboostEvaluate()` +会在首次访问且模型尚未加载时再加载模型。 ::: 卸载所有 CatBoost 模型。 @@ -65,9 +62,9 @@ SYSTEM RELOAD MODELS [ON CLUSTER cluster_name] ``` -## SYSTEM RELOAD MODEL {#reload-model} +## SYSTEM RELOAD MODEL -重新加载位于 `model_path` 的 CatBoost 模型。 +从 `model_path` 卸载 CatBoost 模型。 **语法** @@ -76,9 +73,9 @@ SYSTEM RELOAD MODEL [ON CLUSTER cluster_name] ``` -## SYSTEM RELOAD FUNCTIONS {#reload-functions} +## SYSTEM RELOAD FUNCTIONS -从配置文件中重新加载所有已注册的[可执行用户定义函数](/sql-reference/functions/udf#executable-user-defined-functions)或其中某一个函数。 +从配置文件中重新加载所有已注册的[可执行用户自定义函数](/sql-reference/functions/udf#executable-user-defined-functions),或仅重新加载其中一个。 **语法** @@ -88,55 +85,48 @@ SYSTEM RELOAD FUNCTION [ON CLUSTER cluster_name] function_name ``` -## SYSTEM RELOAD ASYNCHRONOUS METRICS {#reload-asynchronous-metrics} +## SYSTEM RELOAD ASYNCHRONOUS METRICS -重新计算所有[异步指标](../../operations/system-tables/asynchronous_metrics.md)。由于异步指标会基于配置项 [asynchronous_metrics_update_period_s](../../operations/server-configuration-parameters/settings.md) 定期更新,通常无需使用此语句手动更新。 +重新计算所有[异步指标](../../operations/system-tables/asynchronous_metrics.md)。由于异步指标会根据设置项 [asynchronous_metrics_update_period_s](../../operations/server-configuration-parameters/settings.md) 定期更新,通常不需要通过此语句手动更新它们。 ```sql SYSTEM RELOAD ASYNCHRONOUS METRICS [ON CLUSTER cluster_name] ``` -## SYSTEM DROP DNS CACHE {#drop-dns-cache} +## SYSTEM DROP DNS CACHE \{#drop-dns-cache\} -清除 ClickHouse 的内部 DNS 缓存。在更改基础设施时(例如更改另一个 ClickHouse 服务器的 IP 地址或字典所使用的服务器),有时需要使用此命令(适用于旧版本的 ClickHouse)。 +清除 ClickHouse 的内部 DNS 缓存。有时(在某些较旧版本的 ClickHouse 中),在变更基础设施时(例如更改另一台 ClickHouse 服务器的 IP 地址,或更改字典所使用的服务器)需要使用此命令。 -如需更便捷的(自动)缓存管理,请参阅 `disable_internal_dns_cache`、`dns_cache_max_entries`、`dns_cache_update_period` 参数。 +如需更方便(自动)的缓存管理,请参阅 `disable_internal_dns_cache`、`dns_cache_max_entries`、`dns_cache_update_period` 参数。 +## SYSTEM DROP MARK CACHE \{#drop-mark-cache\} -## SYSTEM DROP MARK CACHE {#drop-mark-cache} +清空标记缓存。 -清除标记缓存。 - - -## SYSTEM DROP ICEBERG METADATA CACHE {#drop-iceberg-metadata-cache} +## SYSTEM DROP ICEBERG METADATA CACHE \{#drop-iceberg-metadata-cache\} 清除 Iceberg 元数据缓存。 +## SYSTEM DROP TEXT INDEX DICTIONARY CACHE \{#drop-text-index-dictionary-cache\} -## SYSTEM DROP TEXT INDEX DICTIONARY CACHE {#drop-text-index-dictionary-cache} - -清空文本索引字典缓存。 +清除文本索引词典缓存。 - -## SYSTEM DROP TEXT INDEX HEADER CACHE {#drop-text-index-header-cache} +## SYSTEM DROP TEXT INDEX HEADER CACHE \{#drop-text-index-header-cache\} 清除文本索引头部缓存。 +## SYSTEM DROP TEXT INDEX POSTINGS CACHE \{#drop-text-index-postings-cache\} -## SYSTEM DROP TEXT INDEX POSTINGS CACHE {#drop-text-index-postings-cache} - -清除文本索引倒排缓存。 - +清除文本索引 postings 缓存。 -## SYSTEM DROP TEXT INDEX CACHES {#drop-text-index-caches} +## SYSTEM DROP TEXT INDEX CACHES \{#drop-text-index-caches\} -清除文本索引头缓存、字典缓存和倒排索引缓存。 +清除文本索引头部缓存、字典缓存以及倒排索引缓存。 +## SYSTEM DROP REPLICA -## SYSTEM DROP REPLICA {#drop-replica} - -可以使用以下语法删除 `ReplicatedMergeTree` 表的失效副本: +可以使用以下语法来删除 `ReplicatedMergeTree` 表的失效副本: ```sql SYSTEM DROP REPLICA 'replica_name' FROM TABLE database.table; @@ -145,17 +135,17 @@ SYSTEM DROP REPLICA 'replica_name'; SYSTEM DROP REPLICA 'replica_name' FROM ZKPATH '/path/to/table/in/zk'; ``` -这些查询将删除 ZooKeeper 中的 `ReplicatedMergeTree` 副本路径。当副本已失效且其元数据无法通过 `DROP TABLE` 从 ZooKeeper 中删除时(因为该表已不存在),此操作非常有用。它只会删除非活动/过期的副本,不能删除本地副本,删除本地副本请使用 `DROP TABLE`。`DROP REPLICA` 不会删除任何表,也不会从磁盘中删除任何数据或元数据。 +这些查询会删除 ZooKeeper 中 `ReplicatedMergeTree` 副本的路径。当某个副本已失效且由于表已不存在而无法通过 `DROP TABLE` 从 ZooKeeper 中移除其元数据时,这个功能非常有用。它只会删除不活动/陈旧的副本,不能删除本地副本;若要删除本地副本,请使用 `DROP TABLE`。`DROP REPLICA` 不会删除任何表,也不会从磁盘删除任何数据或元数据。 -第一种语法删除 `database.table` 表的 `'replica_name'` 副本的元数据。 -第二种语法对数据库中的所有复制表执行相同操作。 -第三种语法对本地服务器上的所有复制表执行相同操作。 -第四种语法用于在表的所有其他副本都已删除时删除失效副本的元数据。它需要显式指定表路径。该路径必须与创建表时传递给 `ReplicatedMergeTree` 引擎第一个参数的路径相同。 +第一个语句会移除 `database.table` 表中 `'replica_name'` 副本的元数据。 +第二个语句会对该数据库中所有复制表执行相同操作。 +第三个语句会对本地服务器上的所有复制表执行相同操作。 +第四个语句可用于在同一张表的其他所有副本都已被删除时,移除失效副本的元数据。它要求显式指定表路径,该路径必须与在建表时传递给 `ReplicatedMergeTree` 引擎第一个参数的路径完全相同。 -## SYSTEM DROP DATABASE REPLICA {#drop-database-replica} +## SYSTEM DROP DATABASE REPLICA -可以使用以下语法删除 `Replicated` 数据库的失效副本: +可以使用以下语法删除 `Replicated` 类型数据库的失效副本: ```sql SYSTEM DROP DATABASE REPLICA 'replica_name' [FROM SHARD 'shard_name'] FROM DATABASE database; @@ -163,338 +153,352 @@ SYSTEM DROP DATABASE REPLICA 'replica_name' [FROM SHARD 'shard_name']; SYSTEM DROP DATABASE REPLICA 'replica_name' [FROM SHARD 'shard_name'] FROM ZKPATH '/path/to/table/in/zk'; ``` -与 `SYSTEM DROP REPLICA` 类似,但用于在无法运行 `DROP DATABASE` 的情况下从 ZooKeeper 中删除 `Replicated` 数据库副本路径。请注意,该命令不会删除 `ReplicatedMergeTree` 副本(因此您可能还需要使用 `SYSTEM DROP REPLICA`)。分片名称和副本名称是创建数据库时在 `Replicated` 引擎参数中指定的名称。这些名称也可以从 `system.clusters` 表的 `database_shard_name` 和 `database_replica_name` 列中获取。如果省略 `FROM SHARD` 子句,则 `replica_name` 必须是 `shard_name|replica_name` 格式的完整副本名称。 +与 `SYSTEM DROP REPLICA` 类似,但在没有数据库可执行 `DROP DATABASE` 时,从 ZooKeeper 中移除 `Replicated` 数据库副本路径。请注意,它不会移除 `ReplicatedMergeTree` 副本(因此可能还需要执行 `SYSTEM DROP REPLICA`)。分片名和副本名是创建数据库时在 `Replicated` 引擎参数中指定的名称。此外,这些名称可以从 `system.clusters` 中的 `database_shard_name` 和 `database_replica_name` 列中获取。如果缺少 `FROM SHARD` 子句,则 `replica_name` 必须是 `shard_name|replica_name` 格式的完整副本名。 -## SYSTEM DROP UNCOMPRESSED CACHE {#drop-uncompressed-cache} +## SYSTEM DROP UNCOMPRESSED CACHE \{#drop-uncompressed-cache\} 清除未压缩数据缓存。 -未压缩数据缓存通过查询/用户/配置文件级别的设置 [`use_uncompressed_cache`](../../operations/settings/settings.md#use_uncompressed_cache) 启用或禁用。 -其大小可通过服务器级别的设置 [`uncompressed_cache_size`](../../operations/server-configuration-parameters/settings.md#uncompressed_cache_size) 配置。 - +未压缩数据缓存可通过查询级 / 用户级 / 配置文件级设置 [`use_uncompressed_cache`](../../operations/settings/settings.md#use_uncompressed_cache) 启用或禁用。 +其大小可以通过服务器级设置 [`uncompressed_cache_size`](../../operations/server-configuration-parameters/settings.md#uncompressed_cache_size) 进行配置。 -## SYSTEM DROP COMPILED EXPRESSION CACHE {#drop-compiled-expression-cache} +## SYSTEM DROP COMPILED EXPRESSION CACHE \{#drop-compiled-expression-cache\} -清除已编译的表达式缓存。 -已编译的表达式缓存通过查询/用户/配置文件级别的设置 [`compile_expressions`](../../operations/settings/settings.md#compile_expressions) 启用或禁用。 +清空已编译表达式缓存。 +可通过查询 / 用户 / 配置文件级别的设置 [`compile_expressions`](../../operations/settings/settings.md#compile_expressions) 来启用或禁用已编译表达式缓存。 +## SYSTEM DROP QUERY CONDITION CACHE \{#drop-query-condition-cache\} -## SYSTEM DROP QUERY CONDITION CACHE {#drop-query-condition-cache} +清除查询条件缓存。 -清空查询条件缓存。 - - -## SYSTEM DROP QUERY CACHE {#drop-query-cache} +## SYSTEM DROP QUERY CACHE ```sql SYSTEM DROP QUERY CACHE; SYSTEM DROP QUERY CACHE TAG '' ``` -清空[查询缓存](../../operations/query-cache.md)。 -如果指定了标签,则仅删除带有指定标签的查询缓存条目。 +清除[查询缓存](../../operations/query-cache.md)。 +如果指定了标签,则仅删除带有该标签的查询缓存项。 -## SYSTEM DROP FORMAT SCHEMA CACHE {#system-drop-schema-format} +## SYSTEM DROP FORMAT SCHEMA CACHE -清除从 [`format_schema_path`](../../operations/server-configuration-parameters/settings.md#format_schema_path) 加载的架构缓存。 +清除从 [`format_schema_path`](../../operations/server-configuration-parameters/settings.md#format_schema_path) 加载的模式缓存。 -支持的目标: +支持的目标: -- Protobuf: 从内存中移除已导入的 Protobuf 消息定义。 -- Files: 删除本地存储在 [`format_schema_path`](../../operations/server-configuration-parameters/settings.md#format_schema_path) 中的缓存架构文件,这些文件在 `format_schema_source` 设置为 `query` 时生成。 - 注意:如果未指定目标,则清除两个缓存。 +* Protobuf:从内存中移除导入的 Protobuf 消息定义。 +* Files:删除本地存储在 [`format_schema_path`](../../operations/server-configuration-parameters/settings.md#format_schema_path) 中的缓存模式文件,这些文件是在 `format_schema_source` 设置为 `query` 时生成的。\ + 注意:如果未指定目标,将清除这两个缓存。 ```sql SYSTEM DROP FORMAT SCHEMA CACHE [FOR Protobuf/Files] ``` -## SYSTEM FLUSH LOGS {#flush-logs} +## SYSTEM FLUSH LOGS -将缓冲的日志消息刷新到系统表中,例如 system.query_log。主要用于调试,因为大多数系统表的默认刷新间隔为 7.5 秒。 -即使消息队列为空,该命令也会创建系统表。 +将缓冲的日志消息刷新到 system 表,例如 system.query_log。此功能主要用于调试,因为大多数 system 表的默认刷新间隔为 7.5 秒。 +即使消息队列为空,此操作也会创建 system 表。 ```sql SYSTEM FLUSH LOGS [ON CLUSTER cluster_name] [log_name|[database.table]] [, ...] ``` -如果不想刷新所有日志,可以通过指定日志名称或目标表来刷新一个或多个特定的日志: +如果你不想刷新全部日志,可以通过传递日志名称或目标表来刷新一个或多个日志: ```sql SYSTEM FLUSH LOGS query_log, system.query_views_log; ``` -## SYSTEM RELOAD CONFIG {#reload-config} +## SYSTEM RELOAD CONFIG -重新加载 ClickHouse 配置。用于配置存储在 ZooKeeper 中的场景。注意:`SYSTEM RELOAD CONFIG` 不会重新加载存储在 ZooKeeper 中的 `USER` 配置,仅会重新加载存储在 `users.xml` 中的 `USER` 配置。若要重新加载所有 `USER` 配置,请使用 `SYSTEM RELOAD USERS` +重新加载 ClickHouse 配置。通常在配置存储于 ZooKeeper 时使用。注意,`SYSTEM RELOAD CONFIG` 不会重新加载存储在 ZooKeeper 中的 `USER` 配置,它只会重新加载存储在 `users.xml` 中的 `USER` 配置。要重新加载所有 `USER` 配置,请使用 `SYSTEM RELOAD USERS`。 ```sql SYSTEM RELOAD CONFIG [ON CLUSTER cluster_name] ``` -## SYSTEM RELOAD USERS {#reload-users} +## SYSTEM RELOAD USERS -重新加载所有访问存储,包括:users.xml、本地磁盘访问存储、复制访问存储(位于 ZooKeeper 中)。 +重新加载所有访问控制存储,包括:users.xml、本地磁盘访问控制存储、基于 ZooKeeper 的复制访问控制存储。 ```sql SYSTEM RELOAD USERS [ON CLUSTER cluster_name] ``` -## SYSTEM SHUTDOWN {#shutdown} - - - -正常关闭 ClickHouse(类似 `service clickhouse-server stop` / `kill {$pid_clickhouse-server}`) +## SYSTEM SHUTDOWN \{#shutdown\} + -## SYSTEM KILL {#kill} +以正常方式关闭 ClickHouse(类似执行 `service clickhouse-server stop` / `kill {$pid_clickhouse-server}`) -中止 ClickHouse 进程(类似 `kill -9 {$ pid_clickhouse-server}`) +## SYSTEM KILL \{#kill\} +终止 ClickHouse 进程(例如 `kill -9 {$ pid_clickhouse-server}`) -## 管理分布式表 {#managing-distributed-tables} +## 管理分布式表 \{#managing-distributed-tables\} -ClickHouse 可以管理[分布式](../../engines/table-engines/special/distributed.md)表。当用户向这些表插入数据时,ClickHouse 首先创建一个待发送到集群节点的数据队列,然后异步发送。您可以使用 [`STOP DISTRIBUTED SENDS`](#stop-distributed-sends)、[FLUSH DISTRIBUTED](#flush-distributed) 和 [`START DISTRIBUTED SENDS`](#start-distributed-sends) 查询来管理队列处理。您还可以通过 [`distributed_foreground_insert`](../../operations/settings/settings.md#distributed_foreground_insert) 设置来同步插入分布式数据。 +ClickHouse 可以管理[分布式](../../engines/table-engines/special/distributed.md)表。当用户向这些表插入数据时,ClickHouse 首先创建一个队列,其中包含需要发送到集群节点的数据,然后异步发送这些数据。可以使用 [`STOP DISTRIBUTED SENDS`](#stop-distributed-sends)、[FLUSH DISTRIBUTED](#flush-distributed) 和 [`START DISTRIBUTED SENDS`](#start-distributed-sends) 查询来管理队列的处理。也可以通过 [`distributed_foreground_insert`](../../operations/settings/settings.md#distributed_foreground_insert) 设置同步插入分布式数据。 -### SYSTEM STOP DISTRIBUTED SENDS {#stop-distributed-sends} +### SYSTEM STOP DISTRIBUTED SENDS -在向分布式表插入数据时禁用后台数据分发。 +在向分布式表插入数据时,停止后台数据分发。 ```sql SYSTEM STOP DISTRIBUTED SENDS [db.] [ON CLUSTER cluster_name] ``` :::note -如果启用了 [`prefer_localhost_replica`](../../operations/settings/settings.md#prefer_localhost_replica)(默认启用),数据仍会插入到本地分片。 +如果启用了 [`prefer_localhost_replica`](../../operations/settings/settings.md#prefer_localhost_replica)(默认启用),写入本地分片的数据仍会照常插入。 ::: -### SYSTEM FLUSH DISTRIBUTED {#flush-distributed} -强制 ClickHouse 同步向集群节点发送数据。如果任何节点不可用,ClickHouse 会抛出异常并停止查询执行。您可以重试查询直到成功,当所有节点恢复在线时查询将会成功。 +### SYSTEM FLUSH DISTRIBUTED + +强制 ClickHouse 以同步方式将数据发送到集群节点。如果有任何节点不可用,ClickHouse 会抛出异常并停止查询执行。可以反复重试该查询,直到执行成功,即所有节点都已重新上线。 -您还可以通过 `SETTINGS` 子句覆盖某些设置,这对于规避某些临时限制(如 `max_concurrent_queries_for_all_users` 或 `max_memory_usage`)很有用。 +你还可以通过 `SETTINGS` 子句覆盖某些设置,这在需要绕过一些临时限制(例如 `max_concurrent_queries_for_all_users` 或 `max_memory_usage`)时很有用。 ```sql -SYSTEM FLUSH DISTRIBUTED [db.] [ON CLUSTER cluster_name] [SETTINGS ...] +SYSTEM FLUSH DISTRIBUTED [db.]<分布式表名称> [ON CLUSTER 集群名称] [SETTINGS ...] ``` :::note -每个待处理的数据块都使用初始 INSERT 查询的设置存储在磁盘上,因此有时您可能需要覆盖这些设置。 +每个待处理的块都会按照最初 INSERT 查询中的设置存储到磁盘上,因此有时可能需要覆盖这些设置。 ::: -### SYSTEM START DISTRIBUTED SENDS {#start-distributed-sends} -在向分布式表插入数据时启用后台数据分发。 +### SYSTEM START DISTRIBUTED SENDS + +在向分布式表插入数据时,启用后台数据分发功能。 ```sql SYSTEM START DISTRIBUTED SENDS [db.] [ON CLUSTER cluster_name] ``` -### SYSTEM STOP LISTEN {#stop-listen} -关闭套接字并优雅地终止指定端口上使用指定协议与服务器的现有连接。 +### SYSTEM STOP LISTEN + +关闭套接字,并优雅地终止在指定端口上、使用指定协议与服务器建立的现有连接。 -但是,如果在 clickhouse-server 配置中未指定相应的协议设置,此命令将不起作用。 +但是,如果在 clickhouse-server 配置中未指定相应的协议设置,则该命令不会起任何作用。 ```sql SYSTEM STOP LISTEN [ON CLUSTER cluster_name] [QUERIES ALL | QUERIES DEFAULT | QUERIES CUSTOM | TCP | TCP WITH PROXY | TCP SECURE | HTTP | HTTPS | MYSQL | GRPC | POSTGRESQL | PROMETHEUS | CUSTOM 'protocol'] ``` -- 如果指定了 `CUSTOM 'protocol'` 修饰符,将停止服务器配置的协议部分中定义的具有指定名称的自定义协议。 -- 如果指定了 `QUERIES ALL [EXCEPT .. [,..]]` 修饰符,将停止所有协议,除非在 `EXCEPT` 子句中指定例外。 -- 如果指定了 `QUERIES DEFAULT [EXCEPT .. [,..]]` 修饰符,将停止所有默认协议,除非在 `EXCEPT` 子句中指定例外。 -- 如果指定了 `QUERIES CUSTOM [EXCEPT .. [,..]]` 修饰符,将停止所有自定义协议,除非在 `EXCEPT` 子句中指定例外。 +* 如果指定了 `CUSTOM 'protocol'` 修饰符,则会停止服务器配置中 `protocols` 部分定义的、名称为 `'protocol'` 的自定义协议。 +* 如果指定了 `QUERIES ALL [EXCEPT .. [,..]]` 修饰符,则会停止所有协议,除非在 `EXCEPT` 子句中将其排除。 +* 如果指定了 `QUERIES DEFAULT [EXCEPT .. [,..]]` 修饰符,则会停止所有默认协议,除非在 `EXCEPT` 子句中将其排除。 +* 如果指定了 `QUERIES CUSTOM [EXCEPT .. [,..]]` 修饰符,则会停止所有自定义协议,除非在 `EXCEPT` 子句中将其排除。 + -### SYSTEM START LISTEN {#start-listen} +### SYSTEM START LISTEN -允许在指定协议上建立新连接。 +允许在指定协议上建立新的连接。 -但是,如果未使用 SYSTEM STOP LISTEN 命令停止指定端口和协议上的服务器,此命令将不起作用。 +但是,如果指定端口和协议上的服务器不是通过 SYSTEM STOP LISTEN 命令停止的,则此命令将不会生效。 ```sql SYSTEM START LISTEN [ON CLUSTER cluster_name] [QUERIES ALL | QUERIES DEFAULT | QUERIES CUSTOM | TCP | TCP WITH PROXY | TCP SECURE | HTTP | HTTPS | MYSQL | GRPC | POSTGRESQL | PROMETHEUS | CUSTOM 'protocol'] ``` -## 管理 MergeTree 表 {#managing-mergetree-tables} +## 管理 MergeTree 表 \{#managing-mergetree-tables\} -ClickHouse 可以管理 [MergeTree](../../engines/table-engines/mergetree-family/mergetree.md) 表中的后台进程。 +ClickHouse 可以对 [MergeTree](../../engines/table-engines/mergetree-family/mergetree.md) 表中的后台进程进行管理。 -### SYSTEM STOP MERGES {#stop-merges} +### SYSTEM STOP MERGES -停止 MergeTree 系列表的后台合并: +用于停止 MergeTree 系列表的后台合并操作: ```sql -SYSTEM STOP MERGES [ON CLUSTER cluster_name] [ON VOLUME | [db.]merge_tree_family_table_name] +SYSTEM STOP MERGES [ON CLUSTER 集群名称] [ON VOLUME <卷名称> | [数据库名.]MergeTree系列表名] ``` :::note -即使之前已为所有 MergeTree 表停止了合并,`DETACH / ATTACH` 表操作也会启动该表的后台合并。 +即使之前已为所有 MergeTree 表停止了合并,执行 `DETACH / ATTACH` 表操作仍会为该表启动后台合并。 ::: -### SYSTEM START MERGES {#start-merges} + +### SYSTEM START MERGES -启动 MergeTree 系列表的后台合并: +用于为 MergeTree 系列表启动后台合并: ```sql SYSTEM START MERGES [ON CLUSTER cluster_name] [ON VOLUME | [db.]merge_tree_family_table_name] ``` -### SYSTEM STOP TTL MERGES {#stop-ttl-merges} -根据 [TTL 表达式](../../engines/table-engines/mergetree-family/mergetree.md#table_engine-mergetree-ttl) 停止 MergeTree 系列表的后台删除旧数据操作: -即使表不存在或表不是 MergeTree 引擎,也会返回 `Ok.`。当数据库不存在时返回错误: +### SYSTEM STOP TTL MERGES + +提供了一种机制,可以为 MergeTree 系列表停止根据 [TTL 表达式](../../engines/table-engines/mergetree-family/mergetree.md#table_engine-mergetree-ttl) 在后台删除旧数据。 +即使表不存在或该表不是 MergeTree 引擎,也会返回 `Ok.`。当数据库不存在时会返回错误: ```sql -SYSTEM STOP TTL MERGES [ON CLUSTER cluster_name] [[db.]merge_tree_family_table_name] +SYSTEM STOP TTL MERGES [ON CLUSTER 集群名称] [[库名.]MergeTree系列表名] ``` -### SYSTEM START TTL MERGES {#start-ttl-merges} -根据 [TTL 表达式](../../engines/table-engines/mergetree-family/mergetree.md#table_engine-mergetree-ttl) 启动 MergeTree 系列表的后台删除旧数据操作: -即使表不存在也会返回 `Ok.`。当数据库不存在时返回错误: +### SYSTEM START TTL MERGES + +为 MergeTree 系列表根据 [TTL 表达式](../../engines/table-engines/mergetree-family/mergetree.md#table_engine-mergetree-ttl) 启动后台删除旧数据的操作: +即使表不存在也会返回 `Ok.`。当数据库不存在时会返回错误: ```sql -SYSTEM START TTL MERGES [ON CLUSTER cluster_name] [[db.]merge_tree_family_table_name] +SYSTEM START TTL MERGES [ON CLUSTER 集群名称] [[数据库.]合并树系列表名] ``` -### SYSTEM STOP MOVES {#stop-moves} -根据 [带有 TO VOLUME 或 TO DISK 子句的 TTL 表达式](../../engines/table-engines/mergetree-family/mergetree.md#mergetree-table-ttl) 停止 MergeTree 系列表的后台数据移动操作: -即使表不存在也会返回 `Ok.`。当数据库不存在时返回错误: +### SYSTEM STOP MOVES + +用于根据 [带有 TO VOLUME 或 TO DISK 子句的 TTL 表达式](../../engines/table-engines/mergetree-family/mergetree.md#mergetree-table-ttl) 停止 MergeTree 系列表的后台数据迁移操作。 +即使表不存在也会返回 `Ok.`。当数据库不存在时会返回错误: ```sql SYSTEM STOP MOVES [ON CLUSTER cluster_name] [[db.]merge_tree_family_table_name] ``` -### SYSTEM START MOVES {#start-moves} -根据 [带有 TO VOLUME 和 TO DISK 子句的 TTL 表达式](../../engines/table-engines/mergetree-family/mergetree.md#mergetree-table-ttl) 启动 MergeTree 系列表的后台数据移动操作: -即使表不存在也会返回 `Ok.`。当数据库不存在时返回错误: +### SYSTEM START MOVES + +为 MergeTree 系列表提供根据[带有 TO VOLUME 和 TO DISK 子句的 TTL 表表达式](../../engines/table-engines/mergetree-family/mergetree.md#mergetree-table-ttl)启动后台数据移动的能力: +即使表不存在也会返回 `Ok.`,当数据库不存在时则返回错误: ```sql SYSTEM START MOVES [ON CLUSTER cluster_name] [[db.]merge_tree_family_table_name] ``` -### SYSTEM SYSTEM UNFREEZE {#query_language-system-unfreeze} -从所有磁盘中清除具有指定名称的冻结备份。有关解冻单独分区的更多信息,请参阅 [ALTER TABLE table_name UNFREEZE WITH NAME ](/sql-reference/statements/alter/partition#unfreeze-partition) +### SYSTEM SYSTEM UNFREEZE + +从所有磁盘中删除具有指定名称的冻结备份。关于解冻单独部分,参见 [ALTER TABLE table_name UNFREEZE WITH NAME ](/sql-reference/statements/alter/partition#unfreeze-partition) ```sql -SYSTEM UNFREEZE WITH NAME +系统解冻,名称为 ``` -### SYSTEM WAIT LOADING PARTS {#wait-loading-parts} -等待表的所有异步加载数据分区(过时的数据分区)完成加载。 +### SYSTEM WAIT LOADING PARTS + +等待表中所有异步加载的数据分片(过时数据分片)都已加载完成。 ```sql -SYSTEM WAIT LOADING PARTS [ON CLUSTER cluster_name] [db.]merge_tree_family_table_name +SYSTEM WAIT LOADING PARTS [ON CLUSTER 集群名称] [数据库名.]merge_tree_family_表名 ``` -## 管理 ReplicatedMergeTree 表 {#managing-replicatedmergetree-tables} +## 管理 ReplicatedMergeTree 表 \{#managing-replicatedmergetree-tables\} -ClickHouse 可以管理 [ReplicatedMergeTree](/engines/table-engines/mergetree-family/replication) 表中与后台复制相关的进程。 +ClickHouse 可以管理 [ReplicatedMergeTree](/engines/table-engines/mergetree-family/replication) 表中与复制相关的后台进程。 -### SYSTEM STOP FETCHES {#stop-fetches} +### SYSTEM STOP FETCHES -提供停止 `ReplicatedMergeTree` 系列表中已插入数据分片的后台拉取功能: -无论表引擎如何,即使表或数据库不存在,也始终返回 `Ok.`。 +用于停止对 `ReplicatedMergeTree` 系列表中已插入数据分片的后台拉取操作: +无论表引擎类型如何,即使表或数据库不存在,也始终返回 `Ok.`。 ```sql -SYSTEM STOP FETCHES [ON CLUSTER cluster_name] [[db.]replicated_merge_tree_family_table_name] +SYSTEM STOP FETCHES [ON CLUSTER 集群名称] [[库名.]复制合并树表族表名] ``` -### SYSTEM START FETCHES {#start-fetches} + +### SYSTEM START FETCHES -提供启动 `ReplicatedMergeTree` 系列表中已插入数据分片的后台拉取功能: -无论表引擎如何,即使表或数据库不存在,也始终返回 `Ok.`。 +用于为 `ReplicatedMergeTree` 系列表中已插入的分片启动后台拉取操作。 +无论表引擎类型如何,即使表或数据库不存在,也始终返回 `Ok.`。 ```sql SYSTEM START FETCHES [ON CLUSTER cluster_name] [[db.]replicated_merge_tree_family_table_name] ``` -### SYSTEM STOP REPLICATED SENDS {#stop-replicated-sends} -提供停止向集群中其他副本发送 `ReplicatedMergeTree` 系列表中新插入数据分片的后台发送功能: +### SYSTEM STOP REPLICATED SENDS + +提供了一种功能,可针对 `ReplicatedMergeTree` 系列表中新插入的数据部分,停止在集群中将其后台发送到其他副本: ```sql SYSTEM STOP REPLICATED SENDS [ON CLUSTER cluster_name] [[db.]replicated_merge_tree_family_table_name] ``` -### SYSTEM START REPLICATED SENDS {#start-replicated-sends} -提供启动向集群中其他副本发送 `ReplicatedMergeTree` 系列表中新插入数据分片的后台发送功能: +### SYSTEM START REPLICATED SENDS + +为 `ReplicatedMergeTree` 系列表中新插入的分片,提供在集群中向其他副本启动后台发送操作的能力: ```sql -SYSTEM START REPLICATED SENDS [ON CLUSTER cluster_name] [[db.]replicated_merge_tree_family_table_name] +SYSTEM START REPLICATED SENDS [ON CLUSTER 集群名称] [[数据库.]复制表族表名] ``` -### SYSTEM STOP REPLICATION QUEUES {#stop-replication-queues} -提供停止从存储在 Zookeeper 中的复制队列执行 `ReplicatedMergeTree` 系列表的后台任务的功能。可能的后台任务类型包括:合并、拉取、变更、带有 ON CLUSTER 子句的 DDL 语句: +### SYSTEM STOP REPLICATION QUEUES + +用于停止 `ReplicatedMergeTree` 家族表在 Zookeeper 中存储的复制队列里的后台拉取任务。可能的后台任务类型包括:合并(merges)、拉取(fetches)、变更(mutation)、带有 ON CLUSTER 子句的 DDL 语句。 ```sql -SYSTEM STOP REPLICATION QUEUES [ON CLUSTER cluster_name] [[db.]replicated_merge_tree_family_table_name] +SYSTEM STOP REPLICATION QUEUES [ON CLUSTER 集群名称] [[数据库.]复制表族表名] ``` -### SYSTEM START REPLICATION QUEUES {#start-replication-queues} -提供启动从存储在 Zookeeper 中的复制队列执行 `ReplicatedMergeTree` 系列表的后台任务的功能。可能的后台任务类型包括:合并、拉取、变更、带有 ON CLUSTER 子句的 DDL 语句: +### SYSTEM START REPLICATION QUEUES + +用于从存储在 Zookeeper 中、适用于 `ReplicatedMergeTree` 系列表的复制队列中启动后台拉取任务。可能的后台任务类型包括:合并(merges)、拉取(fetches)、变更(mutation)、带有 ON CLUSTER 子句的 DDL 语句: ```sql -SYSTEM START REPLICATION QUEUES [ON CLUSTER cluster_name] [[db.]replicated_merge_tree_family_table_name] +SYSTEM START REPLICATION QUEUES [ON CLUSTER 集群名称] [[数据库.]复制表族表名] ``` -### SYSTEM STOP PULLING REPLICATION LOG {#stop-pulling-replication-log} -停止将新条目从复制日志加载到 `ReplicatedMergeTree` 表的复制队列中。 +### SYSTEM STOP PULLING REPLICATION LOG + +停止从复制日志向 `ReplicatedMergeTree` 表的复制队列加载新条目。 ```sql SYSTEM STOP PULLING REPLICATION LOG [ON CLUSTER cluster_name] [[db.]replicated_merge_tree_family_table_name] ``` -### SYSTEM START PULLING REPLICATION LOG {#start-pulling-replication-log} -取消 `SYSTEM STOP PULLING REPLICATION LOG`。 +### SYSTEM START PULLING REPLICATION LOG + +撤销 `SYSTEM STOP PULLING REPLICATION LOG` 命令的效果。 ```sql SYSTEM START PULLING REPLICATION LOG [ON CLUSTER cluster_name] [[db.]replicated_merge_tree_family_table_name] ``` -### SYSTEM SYNC REPLICA {#sync-replica} -等待 `ReplicatedMergeTree` 表与集群中的其他副本同步,但不超过 `receive_timeout` 秒。 +### SYSTEM SYNC REPLICA + +等待 `ReplicatedMergeTree` 表与集群中的其他副本完成同步,但等待时间不会超过 `receive_timeout` 秒。 ```sql SYSTEM SYNC REPLICA [ON CLUSTER cluster_name] [db.]replicated_merge_tree_family_table_name [IF EXISTS] [STRICT | LIGHTWEIGHT [FROM 'srcReplica1'[, 'srcReplica2'[, ...]]] | PULL] ``` -运行此语句后,`[db.]replicated_merge_tree_family_table_name` 从公共复制日志中拉取命令到其自己的复制队列,然后查询等待副本处理所有已拉取的命令。支持以下修饰符: +执行此语句后,`[db.]replicated_merge_tree_family_table_name` 会从公共复制日志中获取命令写入其自身的复制队列,然后查询会等待该副本处理所有已获取的命令。支持以下修饰符: +* 使用 `IF EXISTS`(自 25.6 起可用)时,如果表不存在,查询不会抛出错误。这在向集群中添加新副本时非常有用:该副本已经在集群配置中,但仍处于创建和同步该表的过程中。 +* 如果指定了 `STRICT` 修饰符,则查询会一直等待,直到复制队列变为空。若复制队列中持续有新条目出现,`STRICT` 版本的查询可能永远不会成功。 +* 如果指定了 `LIGHTWEIGHT` 修饰符,则查询只会等待 `GET_PART`、`ATTACH_PART`、`DROP_RANGE`、`REPLACE_RANGE` 和 `DROP_PART` 条目被处理。 + 此外,`LIGHTWEIGHT` 修饰符支持可选的 `FROM 'srcReplicas'` 子句,其中 `'srcReplicas'` 是以逗号分隔的源副本名称列表。此扩展通过仅关注源自指定源副本的复制任务,实现更有针对性的同步。 +* 如果指定了 `PULL` 修饰符,则查询会从 ZooKeeper 中拉取新的复制队列条目,但不会等待任何条目被处理。 -- 使用 `IF EXISTS`(自 25.6 版本起可用),如果表不存在,查询不会抛出错误。这在向集群添加新副本时很有用,此时副本已是集群配置的一部分,但仍在创建和同步表的过程中。 -- 如果指定了 `STRICT` 修饰符,则查询会等待复制队列变为空。如果复制队列中不断出现新条目,`STRICT` 版本可能永远无法成功。 -- 如果指定了 `LIGHTWEIGHT` 修饰符,则查询仅等待 `GET_PART`、`ATTACH_PART`、`DROP_RANGE`、`REPLACE_RANGE` 和 `DROP_PART` 条目被处理。 - 此外,LIGHTWEIGHT 修饰符支持可选的 FROM 'srcReplicas' 子句,其中 'srcReplicas' 是以逗号分隔的源副本名称列表。此扩展通过仅关注来自指定源副本的复制任务,实现更有针对性的同步。 -- 如果指定了 `PULL` 修饰符,则查询从 ZooKeeper 拉取新的复制队列条目,但不等待任何条目被处理。 -### SYNC DATABASE REPLICA {#sync-database-replica} +### SYNC DATABASE REPLICA -等待指定的[复制数据库](/engines/database-engines/replicated)应用该数据库 DDL 队列中的所有模式变更。 +等待直到指定的[复制数据库](/engines/database-engines/replicated)从其 DDL 队列中应用完所有模式更改。 **语法** @@ -502,37 +506,39 @@ SYSTEM SYNC REPLICA [ON CLUSTER cluster_name] [db.]replicated_merge_tree_family_ SYSTEM SYNC DATABASE REPLICA replicated_database_name; ``` -### SYSTEM RESTART REPLICA {#restart-replica} -提供为 `ReplicatedMergeTree` 表重新初始化 Zookeeper 会话状态的功能,将当前状态与作为权威来源的 Zookeeper 进行比较,并在需要时向 Zookeeper 队列添加任务。 -基于 ZooKeeper 数据的复制队列初始化方式与 `ATTACH TABLE` 语句相同。在短时间内,该表将无法进行任何操作。 +### SYSTEM RESTART REPLICA + +允许重新初始化 `ReplicatedMergeTree` 表的 ZooKeeper 会话状态,会将当前状态与作为权威数据源的 ZooKeeper 进行比较,并在需要时向 ZooKeeper 队列中添加任务。 +基于 ZooKeeper 数据初始化复制队列的过程与执行 `ATTACH TABLE` 语句时相同。在短时间内,该表将无法执行任何操作。 ```sql SYSTEM RESTART REPLICA [ON CLUSTER cluster_name] [db.]replicated_merge_tree_family_table_name ``` -### SYSTEM RESTORE REPLICA {#restore-replica} -如果数据[可能]存在但 Zookeeper 元数据丢失,则恢复副本。 +### SYSTEM RESTORE REPLICA \{#restore-replica\} + +在数据(可能)仍然存在但 ZooKeeper 元数据丢失的情况下恢复副本。 仅适用于只读的 `ReplicatedMergeTree` 表。 -可以在以下情况后执行查询: +可以在以下情况下执行该查询: - ZooKeeper 根路径 `/` 丢失。 - 副本路径 `/replicas` 丢失。 - 单个副本路径 `/replicas/replica_name/` 丢失。 -副本会附加本地找到的数据分片并将相关信息发送到 Zookeeper。 -如果元数据丢失前副本上存在的数据分片未过时,则不会从其他副本重新获取(因此副本恢复不意味着通过网络重新下载所有数据)。 +副本会附加在本地发现的分片(parts),并将这些分片的信息发送到 ZooKeeper。 +在元数据丢失之前就已存在于副本上的分片,如果未过期,则不会从其他副本重新获取(因此,恢复副本并不意味着需要通过网络重新下载所有数据)。 :::note -所有状态的数据分片都会移动到 `detached/` 文件夹。数据丢失前处于活动状态(已提交)的数据分片会被附加。 +所有状态下的分片都会被移动到 `detached/` 目录。数据丢失前处于活动状态(已提交)的分片会被重新附加。 ::: -### SYSTEM RESTORE DATABASE REPLICA {#restore-database-replica} +### SYSTEM RESTORE DATABASE REPLICA -如果数据[可能]存在但 Zookeeper 元数据丢失,则恢复副本。 +在数据(可能)仍然存在但 ZooKeeper 元数据已丢失的情况下恢复副本。 **语法** @@ -561,7 +567,7 @@ SYSTEM RESTORE DATABASE REPLICA repl_db; SYSTEM RESTORE REPLICA [db.]replicated_merge_tree_family_table_name [ON CLUSTER cluster_name] ``` -替代语法: +可选语法: ```sql SYSTEM RESTORE REPLICA [ON CLUSTER cluster_name] [db.]replicated_merge_tree_family_table_name @@ -569,7 +575,7 @@ SYSTEM RESTORE REPLICA [ON CLUSTER cluster_name] [db.]replicated_merge_tree_fami **示例** -在多个服务器上创建表。在 ZooKeeper 中副本的元数据丢失后,由于元数据缺失,该表将以只读方式附加。最后一个查询需要在每个副本上执行。 +在多台服务器上创建表。当 ZooKeeper 中的副本元数据丢失后,由于缺少元数据,表会被以只读方式挂载。最后一个查询需要在每个副本上执行。 ```sql CREATE TABLE test(n UInt32) @@ -584,40 +590,42 @@ SYSTEM RESTART REPLICA test; SYSTEM RESTORE REPLICA test; ``` -另一种方式: +另一种方法: ```sql SYSTEM RESTORE REPLICA test ON CLUSTER cluster; ``` -### SYSTEM RESTART REPLICAS {#restart-replicas} -提供为所有 `ReplicatedMergeTree` 表重新初始化 Zookeeper 会话状态的功能,将当前状态与作为权威来源的 Zookeeper 进行比较,并在需要时向 Zookeeper 队列添加任务 +### SYSTEM RESTART REPLICAS \{#restart-replicas\} +提供了一种为所有 `ReplicatedMergeTree` 表重新初始化 ZooKeeper 会话状态的机制,会将当前状态与作为权威来源的 ZooKeeper 中的状态进行比较,并在需要时向 ZooKeeper 队列中添加任务。 -### SYSTEM DROP FILESYSTEM CACHE {#drop-filesystem-cache} +### SYSTEM DROP FILESYSTEM CACHE -删除文件系统缓存。 +用于释放文件系统缓存。 ```sql SYSTEM DROP FILESYSTEM CACHE [ON CLUSTER cluster_name] ``` -### SYSTEM SYNC FILE CACHE {#sync-file-cache} + +### SYSTEM SYNC FILE CACHE :::note -此操作开销较大,存在被误用的风险。 +开销过大,并且有被误用的潜在风险。 ::: -将执行 sync 系统调用。 +将执行同步系统调用(syscall)。 ```sql SYSTEM SYNC FILE CACHE [ON CLUSTER cluster_name] ``` -### SYSTEM LOAD PRIMARY KEY {#load-primary-key} -加载指定表或所有表的主键。 +### SYSTEM LOAD PRIMARY KEY + +为指定表或所有表加载主键。 ```sql SYSTEM LOAD PRIMARY KEY [db.]name @@ -627,7 +635,8 @@ SYSTEM LOAD PRIMARY KEY [db.]name SYSTEM LOAD PRIMARY KEY ``` -### SYSTEM UNLOAD PRIMARY KEY {#unload-primary-key} + +### SYSTEM UNLOAD PRIMARY KEY 卸载指定表或所有表的主键。 @@ -636,71 +645,75 @@ SYSTEM UNLOAD PRIMARY KEY [db.]name ``` ```sql -SYSTEM UNLOAD PRIMARY KEY +SYSTEM UNLOAD PRIMARY KEY(卸载主键) ``` -## 管理可刷新物化视图 {#refreshable-materialized-views} +## 管理可刷新物化视图 \{#refreshable-materialized-views\} -用于控制[可刷新物化视图](../../sql-reference/statements/create/view.md#refreshable-materialized-view)执行的后台任务的命令 +用于控制[可刷新物化视图](../../sql-reference/statements/create/view.md#refreshable-materialized-view)所执行后台任务的命令。 -使用这些命令时,请留意 [`system.view_refreshes`](../../operations/system-tables/view_refreshes.md) 表。 +在使用这些视图时,请关注 [`system.view_refreshes`](../../operations/system-tables/view_refreshes.md)。 -### SYSTEM REFRESH VIEW {#refresh-view} +### SYSTEM REFRESH VIEW -触发指定视图的即时非计划刷新。 +触发指定视图的一次计划外立即刷新。 ```sql SYSTEM REFRESH VIEW [db.]name ``` -### SYSTEM WAIT VIEW {#wait-view} -等待当前正在运行的刷新完成。如果刷新失败,则抛出异常。如果没有刷新正在运行,则立即完成;如果上一次刷新失败,则抛出异常。 +### SYSTEM WAIT VIEW \{#wait-view\} + +等待当前正在运行的刷新操作完成。如果刷新失败,则抛出异常。如果当前没有刷新在运行,则立即完成;如果之前的刷新失败,则抛出异常。 -### SYSTEM STOP [REPLICATED] VIEW, STOP VIEWS {#stop-view-stop-views} +### SYSTEM STOP [REPLICATED] VIEW, STOP VIEWS -禁用指定视图或所有可刷新视图的定期刷新。如果刷新正在进行中,也会将其取消。 +停止指定视图或所有可刷新视图的周期性刷新。如果刷新正在进行中,则一并取消。 -如果视图位于 Replicated 或 Shared 数据库中,`STOP VIEW` 仅影响当前副本,而 `STOP REPLICATED VIEW` 影响所有副本。 +如果视图位于 Replicated 或 Shared 数据库中,`STOP VIEW` 只影响当前副本,而 `STOP REPLICATED VIEW` 会影响所有副本。 ```sql SYSTEM STOP VIEW [db.]name ``` ```sql -SYSTEM STOP VIEWS +系统停止视图 ``` -### SYSTEM START [REPLICATED] VIEW, START VIEWS {#start-view-start-views} -启用指定视图或所有可刷新视图的定期刷新。不会触发即时刷新。 +### SYSTEM START [REPLICATED] VIEW, START VIEWS + +为指定视图或所有可刷新视图开启周期性刷新。不会触发立即刷新。 -如果视图位于 Replicated 或 Shared 数据库中,`START VIEW` 撤销 `STOP VIEW` 的效果,而 `START REPLICATED VIEW` 撤销 `STOP REPLICATED VIEW` 的效果。 +如果视图位于 Replicated 或 Shared 数据库中,`START VIEW` 会撤销 `STOP VIEW` 的效果,而 `START REPLICATED VIEW` 会撤销 `STOP REPLICATED VIEW` 的效果。 ```sql SYSTEM START VIEW [db.]name ``` ```sql -SYSTEM START VIEWS +系统启动视图 ``` -### SYSTEM CANCEL VIEW {#cancel-view} -如果当前副本上指定视图的刷新正在进行中,则中断并取消该刷新。否则不执行任何操作。 +### SYSTEM CANCEL VIEW + +如果当前副本上的指定视图正在刷新,则中断并取消该刷新;否则不执行任何操作。 ```sql SYSTEM CANCEL VIEW [db.]name ``` -### SYSTEM WAIT VIEW {#system-wait-view} -等待正在运行的刷新完成。如果没有刷新正在运行,则立即返回。如果最近一次刷新尝试失败,则报告错误。 +### SYSTEM WAIT VIEW + +等待正在运行的刷新操作完成。如果当前没有刷新在运行,则立即返回。如果最近一次刷新尝试失败,则返回错误。 -可以在创建新的可刷新物化视图(不使用 EMPTY 关键字)后立即使用此命令,以等待初始刷新完成。 +可以在创建新的可刷新物化视图(未使用 `EMPTY` 关键字)后立即使用,以等待初始刷新完成。 -如果视图位于 Replicated 或 Shared 数据库中,且刷新正在另一个副本上运行,则等待该刷新完成。 +如果该视图位于 Replicated 或 Shared 数据库中,且刷新在其他副本上运行,则会等待该刷新完成。 ```sql SYSTEM WAIT VIEW [db.]name diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/syntax.md b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/syntax.md index f30b9265010..7f48fa9f111 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/syntax.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/syntax.md @@ -1,6 +1,5 @@ --- -description: '语法文档' -displayed_sidebar: 'sqlreference' +description: '语法说明' sidebar_label: '语法' sidebar_position: 2 slug: /sql-reference/syntax @@ -9,194 +8,187 @@ doc_type: 'reference' --- 在本节中,我们将介绍 ClickHouse 的 SQL 语法。 -ClickHouse 采用基于 SQL 的语法,并在此基础上提供了多种扩展和优化。 +ClickHouse 使用基于 SQL 的语法,但提供了许多扩展和优化。 +## 查询解析 +ClickHouse 中有两种类型的解析器: -## 查询解析 {#query-parsing} +* *完整 SQL 解析器*(递归下降解析器)。 +* *数据格式解析器*(快速流式解析器)。 -ClickHouse 中有两种类型的解析器: +除 `INSERT` 查询以外的所有情况都使用完整 SQL 解析器,而 `INSERT` 查询会同时使用两种解析器。 -- _完整 SQL 解析器_(递归下降解析器)。 -- _数据格式解析器_(快速流解析器)。 - -除了 `INSERT` 查询会同时使用两种解析器外,完整 SQL 解析器用于所有其他情况。 - -让我们看看下面的查询: +下面我们来看这个查询: ```sql INSERT INTO t VALUES (1, 'Hello, world'), (2, 'abc'), (3, 'def') ``` -如前所述,`INSERT` 查询会同时使用两种解析器。 -`INSERT INTO t VALUES` 部分由完整解析器解析, -而数据 `(1, 'Hello, world'), (2, 'abc'), (3, 'def')` 则由数据格式解析器(即快速流解析器)解析。 +如前所述,`INSERT` 查询会同时使用两类解析器。 +`INSERT INTO t VALUES` 片段由完整解析器解析, +而数据 `(1, 'Hello, world'), (2, 'abc'), (3, 'def')` 则由数据格式解析器(或快速流式解析器)进行解析。
-启用完整解析器 - -您也可以通过 [`input_format_values_interpret_expressions`](../operations/settings/settings-formats.md#input_format_values_interpret_expressions) 设置来为数据启用完整解析器。 + 启用完整解析器 -当该设置设为 `1` 时, -ClickHouse 会首先尝试使用快速流解析器解析值。 -如果失败,ClickHouse 会尝试对数据使用完整解析器,将其视为 SQL [表达式](#expressions)。 + 也可以通过 [`input_format_values_interpret_expressions`](../operations/settings/settings-formats.md#input_format_values_interpret_expressions) 设置为数据启用完整解析器。 + 当将上述设置设为 `1` 时, + ClickHouse 首先尝试使用快速流式解析器解析这些值。 + 如果失败,ClickHouse 会尝试对数据使用完整解析器,将其视为 SQL [表达式](#expressions)。
-数据可以是任何格式。 -当接收到查询时,服务器会在 RAM 中计算不超过 [max_query_size](../operations/settings/settings.md#max_query_size) 字节的请求内容 -(默认为 1 MB),其余部分采用流式解析。 -这样可以避免大型 `INSERT` 查询出现问题,这也是在 ClickHouse 中插入数据的推荐方式。 +数据可以具有任意格式。 +当接收到查询时,服务器在 RAM 中最多保留 [max_query_size](../operations/settings/settings.md#max_query_size) 字节的请求数据 +(默认 1 MB),其余部分则通过流式解析完成。 +这样做是为了避免大型 `INSERT` 查询导致的问题,而这也是在 ClickHouse 中写入数据的推荐方式。 -在 `INSERT` 查询中使用 [`Values`](/interfaces/formats/Values) 格式时, -数据的解析可能看起来与 `SELECT` 查询中的表达式解析相同,但实际上并非如此。 -`Values` 格式的限制要多得多。 +在 `INSERT` 查询中使用 [`Values`](/interfaces/formats/Values) 格式时, +看起来数据的解析方式与 `SELECT` 查询中表达式的解析相同,但实际上并非如此。 +`Values` 格式的功能要受更多限制。 -本节的其余部分将介绍完整解析器。 +本节的其余内容将介绍完整解析器。 :::note -有关格式解析器的更多信息,请参阅 [格式](../interfaces/formats.md) 部分。 +有关格式解析器的更多信息,请参阅 [Formats](../interfaces/formats.md) 章节。 ::: -## 空格 {#spaces} - -- 语法结构之间(包括查询的开头和结尾)可以包含任意数量的空格字符。 -- 空格字符包括空格、制表符、换行符、回车符和换页符。 - +## 空格 \{#spaces\} -## 注释 {#comments} +- 在语法结构之间(包括查询的开头和结尾)可以存在任意数量的空白字符。 +- 空白字符包括空格、制表符、换行符、回车符和换页符。 -ClickHouse 支持 SQL 风格和 C 风格的注释: +## 注释 \{#comments\} -- SQL 风格的注释以 `--`、`#!` 或 `# ` 开头,一直延续到行尾。`--` 和 `#!` 后面的空格可以省略。 -- C 风格的注释从 `/*` 开始到 `*/` 结束,可以跨多行。同样不需要空格。 +ClickHouse 支持 SQL 风格和 C 风格的注释: +- SQL 风格的注释以 `--`、`#!` 或 `# ` 开头,并一直到行尾结束。`--` 和 `#!` 之后的空格可以省略。 +- C 风格的注释从 `/*` 开始到 `*/` 结束,可以跨多行。同样不需要空格。 -## 关键字 {#keywords} +## 关键字 -ClickHouse 中的关键字可以是 _区分大小写_ 或 _不区分大小写_,具体取决于上下文。 +在 ClickHouse 中,关键字是否区分大小写(*case-sensitive* 或 *case-insensitive*)取决于上下文。 -关键字在以下情况下 **不区分大小写**: +当关键字满足以下条件时,它们是 **不区分大小写(case-insensitive)** 的: -- SQL 标准。例如,`SELECT`、`select` 和 `SeLeCt` 都是有效的。 -- 某些流行数据库管理系统(MySQL 或 Postgres)的实现。例如,`DateTime` 与 `datetime` 相同。 +* SQL 标准中的关键字。例如,`SELECT`、`select` 和 `SeLeCt` 都是有效的。 +* 一些流行 DBMS(如 MySQL 或 Postgres)的实现。例如,`DateTime` 与 `datetime` 等价。 :::note -您可以在 [system.data_type_families](/operations/system-tables/data_type_families) 表中检查数据类型名称是否区分大小写。 +可以在 [system.data_type_families](/operations/system-tables/data_type_families) 表中检查某个数据类型名称是否区分大小写。 ::: -与标准 SQL 不同,所有其他关键字(包括函数名称)都 **区分大小写**。 +与标准 SQL 相比,其他所有关键字(包括函数名)都是 **区分大小写(case-sensitive)** 的。 -此外,关键字不是保留字。 -它们仅在相应的上下文中被视为关键字。 -如果使用与关键字同名的[标识符](#identifiers),请将其用双引号或反引号括起来。 +此外,关键字不是保留字。 +只有在对应的上下文中才会被视为关键字。 +如果使用与关键字同名的[标识符](#identifiers),请使用双引号或反引号将其括起来。 -例如,如果表 `table_name` 有一个名为 `"FROM"` 的列,则以下查询是有效的: +例如,如果表 `table_name` 中存在一个名为 `"FROM"` 的列,则下面的查询是有效的: ```sql SELECT "FROM" FROM table_name ``` -## 标识符 {#identifiers} +## 标识符 \{#identifiers\} -标识符包括: +标识符包括: -- 集群、数据库、表、分区和列名称。 +- 集群、数据库、表、分区和列名。 - [函数](#functions)。 - [数据类型](../sql-reference/data-types/index.md)。 - [表达式别名](#expression-aliases)。 -标识符可以带引号或不带引号,但推荐使用不带引号的形式。 +标识符可以带引号或不带引号,但推荐使用不带引号的形式。 -不带引号的标识符必须匹配正则表达式 `^[a-zA-Z_][0-9a-zA-Z_]*$`,且不能与[关键字](#keywords)相同。 +未带引号的标识符必须匹配正则表达式 `^[a-zA-Z_][0-9a-zA-Z_]*$`,且不能与[关键字](#keywords)相同。 +参见下表,了解有效和无效标识符示例: -下表列出了有效和无效标识符的示例: - -| 有效标识符 | 无效标识符 | -| ---------------------------------------------- | -------------------------------------- | +| 有效标识符 | 无效标识符 | +|------------------------------------------------|-----------------------------------| | `xyz`, `_internal`, `Id_with_underscores_123_` | `1x`, `tom@gmail.com`, `äußerst_schön` | -如果要使用与关键字相同的标识符,或在标识符中使用其他符号,请使用双引号或反引号将其括起来,例如 `"id"`、`` `id` ``。 +如果需要使用与关键字相同的标识符,或者想在标识符中使用其他符号,请使用双引号或反引号将其括起来,例如 `"id"`、`` `id` ``。 :::note -带引号标识符的转义规则同样适用于字符串字面量。详情请参阅[字符串](#string)。 +对带引号标识符进行转义的规则同样适用于字符串字面量。有关更多信息,请参阅 [String](#string)。 ::: +## 字面量 \{#literals\} -## 字面量 {#literals} - -在 ClickHouse 中,字面量是直接在查询中表示的值。 -换句话说,它是在查询执行期间不会改变的固定值。 +在 ClickHouse 中,字面量是指在查询中直接出现的值。 +换句话说,它是在查询执行期间不会改变的固定值。 -字面量可以是: +字面量可以是: - [字符串](#string) - [数值](#numeric) -- [复合](#compound) +- [复合字面量](#compound) - [`NULL`](#null) -- [Heredocs](#heredoc)(自定义字符串字面量) +- [Heredocs](#heredoc)(自定义字符串字面量) -我们将在下面的章节中更详细地介绍每一种类型。 +我们将在下文的章节中对每一类进行更详细的介绍。 -### 字符串 {#string} +### String \{#string\} -字符串字面量必须用单引号括起来。不支持双引号。 +字符串字面量必须用单引号包裹。不支持双引号。 -转义可以通过以下方式实现: +转义可以通过以下任一方式实现: -- 使用前置单引号,其中单引号字符 `'`(且仅此字符)可以转义为 `''`,或 -- 使用前置反斜杠,配合下表中列出的支持的转义序列。 +- 使用重复单引号,其中单引号字符 `'`(且仅此字符)可以通过 `''` 进行转义,或 +- 使用前置反斜杠以及下表中列出的受支持转义序列。 :::note -反斜杠会失去其特殊含义,即如果它位于下面列出的字符以外的字符之前,则会被按字面意义解释。 +如果反斜杠出现在下表未列出的字符前面,则反斜杠会失去其特殊含义,即会被按字面值解释。 ::: -| 支持的转义 | 描述 | -| -------------------------------------- | ----------------------------------------------------------------------- | -| `\xHH` | 8 位字符规范,后跟任意数量的十六进制数字(H)。 | -| `\N` | 保留,不执行任何操作(例如 `SELECT 'a\Nb'` 返回 `ab`) | -| `\a` | 警报 | -| `\b` | 退格 | -| `\e` | 转义字符 | -| `\f` | 换页 | -| `\n` | 换行 | -| `\r` | 回车 | -| `\t` | 水平制表符 | -| `\v` | 垂直制表符 | -| `\0` | 空字符 | -| `\\` | 反斜杠 | -| `\'`(或 `''`) | 单引号 | -| `\"` | 双引号 | -| `` ` `` | 反引号 | -| `\/` | 正斜杠 | -| `\=` | 等号 | -| ASCII 控制字符(c <= 31)。 | | +| Supported Escape | Description | +|-------------------------------------|-------------------------------------------------------------------------| +| `\xHH` | 8 位字符表示形式,后接任意数量的十六进制数字 (H)。 | +| `\N` | 保留,不执行任何操作(例如 `SELECT 'a\Nb'` 返回 `ab`) | +| `\a` | 提示音(警报) | +| `\b` | 退格 | +| `\e` | 转义字符 | +| `\f` | 换页 | +| `\n` | 换行 | +| `\r` | 回车 | +| `\t` | 水平制表符 | +| `\v` | 垂直制表符 | +| `\0` | 空字符 | +| `\\` | 反斜杠 | +| `\'` (or ` '' `) | 单引号 | +| `\"` | 双引号 | +| `` ` `` | 反引号 | +| `\/` | 正斜杠 | +| `\=` | 等号 | +| ASCII control characters (c <= 31). | ASCII 控制字符(c <= 31)。 | :::note -在字符串字面量中,您至少需要使用转义码 `\'`(或:`''`)和 `\\` 来转义 `'` 和 `\`。 +在字符串字面量中,至少需要使用转义码 `\'`(或:`''`)和 `\\` 来转义 `'` 和 `\`。 ::: -### 数值 {#numeric} +### Numeric -数值字面量按以下方式解析: +数值字面量按如下方式解析: -- 如果字面量以减号 `-` 为前缀,则跳过该标记,并在解析后对结果取反。 -- 数值字面量首先使用 [strtoull](https://en.cppreference.com/w/cpp/string/byte/strtoul) 函数解析为 64 位无符号整数。 - - 如果值以 `0b` 或 `0x`/`0X` 为前缀,则该数字分别解析为二进制或十六进制。 - - 如果值为负且绝对值大于 263,则返回错误。 -- 如果不成功,则接下来使用 [strtod](https://en.cppreference.com/w/cpp/string/byte/strtof) 函数将该值解析为浮点数。 -- 否则,返回错误。 +* 如果字面量前有减号 `-`,则会先跳过该符号,在完成解析后对结果取相反数。 +* 数值字面量首先会使用 [strtoull](https://en.cppreference.com/w/cpp/string/byte/strtoul) 函数按 64 位无符号整数进行解析。 + * 如果值以 `0b` 或 `0x`/`0X` 为前缀,则分别解析为二进制或十六进制数。 + * 如果值为负数且其绝对值大于 263,则会返回错误。 +* 如果上述解析失败,则会使用 [strtod](https://en.cppreference.com/w/cpp/string/byte/strtof) 函数将该值解析为浮点数。 +* 否则,返回错误。 -字面量值会被转换为该值适合的最小类型。 -例如: +字面量值会被转换为可容纳该值的最小类型。 +例如: -- `1` 被解析为 `UInt8` -- `256` 被解析为 `UInt16`。 +* `1` 会被解析为 `UInt8` +* `256` 会被解析为 `UInt16`。 :::note 重要 -宽度超过 64 位的整数值(`UInt128`、`Int128`、`UInt256`、`Int256`)必须转换为更大的类型才能正确解析: +位宽大于 64 位的整数类型(`UInt128`、`Int128`、`UInt256`、`Int256`)必须显式转换为更大的类型才能被正确解析: ```sql -170141183460469231731687303715884105728::Int128 @@ -205,63 +197,63 @@ SELECT "FROM" FROM table_name 115792089237316195423570985008687907853269984665640564039457584007913129639935::UInt256 ``` -这会绕过上述算法,并使用支持任意精度的例程来解析整数。 +这会绕过上述算法,改用支持任意精度的函数来解析整数。 -否则,字面量将被解析为浮点数,因此会因截断而导致精度损失。 +否则,该字面量将被解析为浮点数,因此会因为截断而导致精度损失。 ::: -有关更多信息,请参阅[数据类型](../sql-reference/data-types/index.md)。 +更多信息,请参阅[数据类型](../sql-reference/data-types/index.md)。 -数值字面量中的下划线 `_` 会被忽略,可用于提高可读性。 +数字字面量中的下划线 `_` 会被忽略,可以用于提高可读性。 -支持以下数值字面量: +支持以下数值字面量: - -| 数值字面量 | 示例 | -| ----------------------------------------- | ----------------------------------------------- | -| **整数** | `1`, `10_000_000`, `18446744073709551615`, `01` | -| **小数** | `0.1` | -| **指数表示法** | `1e100`, `-1e-100` | -| **浮点数** | `123.456`, `inf`, `nan` | -| **十六进制** | `0xc0fe` | -| **SQL 标准兼容的十六进制字符串** | `x'c0fe'` | -| **二进制** | `0b1101` | -| **SQL 标准兼容的二进制字符串** | `b'1101'` | +| 数值字面量 | 示例 | +| --------------------- | ----------------------------------------------- | +| **整数** | `1`, `10_000_000`, `18446744073709551615`, `01` | +| **小数** | `0.1` | +| **指数表示法** | `1e100`, `-1e-100` | +| **浮点数** | `123.456`, `inf`, `nan` | +| **十六进制** | `0xc0fe` | +| **兼容 SQL 标准的十六进制字符串** | `x'c0fe'` | +| **二进制** | `0b1101` | +| **兼容 SQL 标准的二进制字符串** | `b'1101'` | :::note -不支持八进制字面量,以避免解释时出现意外错误。 +不支持八进制字面量,以避免在解释时出现意外错误。 ::: -### 复合类型 {#compound} + +### 复合类型 \{#compound\} 数组使用方括号构造 `[1, 2, 3]`。元组使用圆括号构造 `(1, 'Hello, world!', 2)`。 -从技术上讲,这些不是字面量,而是分别使用数组创建运算符和元组创建运算符的表达式。 -数组必须至少包含一个元素,元组必须至少包含两个元素。 +从技术上讲,这些并不是字面量,而是分别带有数组创建运算符和元组创建运算符的表达式。 +数组必须至少包含一个元素,元组必须至少包含两个元素。 :::note -当元组出现在 `SELECT` 查询的 `IN` 子句中时,属于特殊情况。 -查询结果可以包含元组,但元组不能保存到数据库中(使用 [Memory](../engines/table-engines/special/memory.md) 引擎的表除外)。 +当元组出现在 `SELECT` 查询的 `IN` 子句中时,属于另一种情况。 +查询结果中可以包含元组,但元组不能保存到数据库中(使用 [Memory](../engines/table-engines/special/memory.md) 引擎的表除外)。 ::: -### NULL {#null} +### NULL \{#null\} -`NULL` 用于表示值缺失。 -要在表字段中存储 `NULL`,该字段必须是 [Nullable](../sql-reference/data-types/nullable.md) 类型。 +`NULL` 用于表示某个值缺失。 +要在表字段中存储 `NULL`,该字段的数据类型必须是 [Nullable](../sql-reference/data-types/nullable.md)。 :::note -关于 `NULL` 需要注意以下几点: +关于 `NULL`,需要注意以下几点: -- 根据数据格式(输入或输出)的不同,`NULL` 可能有不同的表示形式。有关更多信息,请参阅[数据格式](/interfaces/formats)。 -- `NULL` 的处理较为复杂。例如,如果比较操作的至少一个参数是 `NULL`,则该操作的结果也是 `NULL`。乘法、加法和其他操作同样如此。建议阅读每个操作的相关文档。 -- 在查询中,可以使用 [`IS NULL`](/sql-reference/functions/functions-for-nulls#isNull) 和 [`IS NOT NULL`](/sql-reference/functions/functions-for-nulls#isNotNull) 运算符以及相关函数 `isNull` 和 `isNotNull` 来检查 `NULL`。 - ::: +- 根据数据格式(输入或输出)的不同,`NULL` 可能有不同的表示形式。更多信息请参阅 [数据格式](/interfaces/formats)。 +- `NULL` 的处理较为复杂。例如,如果比较运算中的任一参数为 `NULL`,则该运算的结果也为 `NULL`。乘法、加法和其他运算同样如此。建议查阅各个运算的文档说明。 +- 在查询中,可以使用 [`IS NULL`](/sql-reference/functions/functions-for-nulls#isNull) 和 [`IS NOT NULL`](/sql-reference/functions/functions-for-nulls#isNotNull) 运算符,以及相关函数 `isNull` 和 `isNotNull` 来检查 `NULL`。 +::: -### Heredoc {#heredoc} +### Heredoc -[heredoc](https://en.wikipedia.org/wiki/Here_document) 是一种定义字符串(通常是多行)的方法,同时保持原始格式。 -heredoc 被定义为自定义字符串字面量,放置在两个 `$` 符号之间。 +[Heredoc](https://en.wikipedia.org/wiki/Here_document) 是一种用于定义字符串(通常为多行字符串)的方法,并且能够保留其原始格式。 +Heredoc 被定义为一种自定义字符串字面量,置于两个 `$` 符号之间。 -例如: +例如: ```sql SELECT $heredoc$SHOW CREATE VIEW my_view$heredoc$; @@ -273,37 +265,37 @@ SELECT $heredoc$SHOW CREATE VIEW my_view$heredoc$; :::note -- 两个 heredoc 之间的值按"原样"处理。 +* 两个 heredoc 之间的值会被按原样(as-is)处理。 ::: :::tip -- 可以使用 heredoc 嵌入 SQL、HTML 或 XML 代码片段等。 +* 你可以使用 heredoc 来嵌入 SQL、HTML、XML 等代码片段。 ::: -## 定义和使用查询参数 {#defining-and-using-query-parameters} +## 定义和使用查询参数 \{#defining-and-using-query-parameters\} -查询参数允许您编写包含抽象占位符而非具体标识符的通用查询。 -当执行带有查询参数的查询时, +查询参数允许编写包含抽象占位符而不是具体标识符的通用查询。 +当执行带有查询参数的查询时, 所有占位符都会被解析并替换为实际的查询参数值。 -定义查询参数有两种方式: +有两种方式定义查询参数: - `SET param_=` - `--param_=''` -使用第二种方式时,它作为参数在命令行中传递给 `clickhouse-client`,其中: +使用第二种方式时,它作为参数在命令行中传递给 `clickhouse-client`,其中: - `` 是查询参数的名称。 - `` 是其值。 -查询参数可以在查询中使用 `{: }` 进行引用,其中 `` 是查询参数名称,`` 是其要转换到的数据类型。 +可以在查询中使用 `{: }` 来引用查询参数,其中 `` 是查询参数名,`` 是其要转换成的数据类型。
使用 SET 命令的示例 -例如,以下 SQL 定义了名为 `a`、`b`、`c` 和 `d` 的参数——每个参数具有不同的数据类型: +例如,下面的 SQL 定义了名为 `a`、`b`、`c` 和 `d` 的参数——每个都有不同的数据类型: ```sql SET param_a = 13; @@ -319,13 +311,12 @@ SELECT 13 str 2022-08-04 18:30:53 {'10':[11,12],'13':[14,15]} ``` -
使用 clickhouse-client 的示例 -如果您使用 `clickhouse-client`,参数以 `--param_name=value` 的形式指定。例如,以下参数名为 `message`,并以 `String` 类型获取: +如果使用 `clickhouse-client`,参数以 `--param_name=value` 的形式指定。例如,下面的参数名为 `message`,并以 `String` 类型获取: ```bash clickhouse-client --param_message='hello' --query="SELECT {message: String}" @@ -333,55 +324,53 @@ clickhouse-client --param_message='hello' --query="SELECT {message: String}" hello ``` -如果查询参数表示数据库、表、函数或其他标识符的名称,请使用 `Identifier` 作为其类型。例如,以下查询从名为 `uk_price_paid` 的表中返回行: +如果查询参数表示数据库、表、函数或其他标识符的名称,请将其类型设置为 `Identifier`。例如,下面的查询会返回名为 `uk_price_paid` 的表中的行: ```sql SET param_mytablename = "uk_price_paid"; SELECT * FROM {mytablename:Identifier}; ``` -
:::note -查询参数不是可以在任意 SQL 查询的任意位置使用的通用文本替换。 -它们主要设计用于在 `SELECT` 语句中代替标识符或字面量。 +查询参数并不是一种可以在任意 SQL 查询中任意位置使用的通用文本替换机制。 +它们主要用于在 `SELECT` 语句中替代标识符或字面量。 ::: +## 函数 -## 函数 {#functions} - -函数调用的写法是一个标识符后跟圆括号中的参数列表(参数列表可以为空)。 -与标准 SQL 不同的是,即使参数列表为空,圆括号也是必需的。 -例如: +函数调用的写法是:在标识符后面加上一对圆括号,其中包含参数列表(可以为空)。 +与标准 SQL 不同,括号是必需的,即使参数列表为空也是如此。 +例如: ```sql now() ``` -函数还包括: +还有: -- [常规函数](/sql-reference/functions/overview)。 -- [聚合函数](/sql-reference/aggregate-functions)。 +* [常规函数](/sql-reference/functions/overview)。 +* [聚合函数](/sql-reference/aggregate-functions)。 -某些聚合函数可以包含两个用括号括起来的参数列表。例如: +某些聚合函数在括号中可以包含两个参数列表。例如: ```sql -quantile (0.9)(x) +quantile (0.9)(x) ``` -这些聚合函数称为"参数化"函数, -第一个列表中的参数称为"参数"。 +这些聚合函数称为“参数化”函数, +第一个参数列表中的实参称为“参数”。 :::note -无参数的聚合函数语法与常规函数相同。 +不带参数的聚合函数的语法与常规函数相同。 ::: -## 运算符 {#operators} +## 运算符 -在查询解析过程中,运算符会根据其优先级和结合性转换为相应的函数。 +在查询解析阶段,运算符会根据其优先级和结合性被转换为对应的函数。 -例如,表达式 +例如,表达式 ```text 1 + 2 * 3 + 4 @@ -394,76 +383,75 @@ plus(plus(1, multiply(2, 3)), 4)` ``` -## 数据类型和数据库表引擎 {#data-types-and-database-table-engines} +## 数据类型和数据库表引擎 \{#data-types-and-database-table-engines\} -在 `CREATE` 查询中,数据类型和表引擎的写法与标识符或函数相同。 -换句话说,它们可以包含括号中的参数列表,也可以不包含。 +`CREATE` 查询中的数据类型和表引擎的写法与标识符或函数相同。 +换句话说,它们可以带或不带括号中的参数列表。 -更多信息请参阅以下章节: +更多信息,请参阅以下部分: - [数据类型](/sql-reference/data-types/index.md) - [表引擎](/engines/table-engines/index.md) -- [CREATE](/sql-reference/statements/create/index.md)。 - +- [CREATE](/sql-reference/statements/create/index.md) -## 表达式 {#expressions} +## 表达式 \{#expressions\} -表达式可以是以下任意一种: +表达式可以是以下任意一种: - 函数 - 标识符 - 字面量 -- 运算符的应用 -- 括号中的表达式 +- 运算符的使用 +- 用括号括起来的表达式 - 子查询 - 星号 -表达式还可以包含[别名](#expression-aliases)。 +它也可以包含一个[别名](#expression-aliases)。 -表达式列表是由逗号分隔的一个或多个表达式。 -函数和运算符可以将表达式作为参数。 +表达式列表是由一个或多个用逗号分隔的表达式构成。 +函数和运算符则可以将表达式作为参数。 -常量表达式是指其结果在查询分析阶段(即执行之前)就已确定的表达式。 -例如,对字面量进行运算的表达式就是常量表达式。 +常量表达式是指其结果在查询分析期间(即执行之前)就已知的表达式。 +例如,基于字面量的表达式就是常量表达式。 +## 表达式别名 -## 表达式别名 {#expression-aliases} - -别名是查询中为[表达式](#expressions)定义的用户自定义名称。 +别名是在查询中为一个[表达式](#expressions)指定的用户自定义名称。 ```sql expr AS alias ``` -上述语法的各部分说明如下。 +上面语法各个部分的说明如下。 + +| 语法部分 | 描述 | 示例 | 备注 | +| ------- | -------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | +| `AS` | 用于定义别名的关键字。在 `SELECT` 子句中,可以在不使用 `AS` 关键字的情况下为表名或列名定义别名。 | `SELECT table_name_alias.column_name FROM table_name table_name_alias`. | 在 [CAST](/sql-reference/functions/type-conversion-functions#cast) 函数中,`AS` 关键字有另一层含义。请参见该函数的说明。 | +| `expr` | 任意 ClickHouse 支持的表达式。 | `SELECT column_name * 2 AS double FROM some_table` | | +| `alias` | `expr` 的名称。别名必须符合 [标识符](#identifiers) 语法规则。 | `SELECT "table t".column_name FROM table_name AS "table t"`. | | -| 语法部分 | 描述 | 示例 | 注释 | -| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `AS` | 用于定义别名的关键字。在 `SELECT` 子句中,您可以不使用 `AS` 关键字为表名或列名定义别名。 | `SELECT table_name_alias.column_name FROM table_name table_name_alias`. | 在 [CAST](/sql-reference/functions/type-conversion-functions#cast) 函数中,`AS` 关键字具有不同的含义。请参阅该函数的说明。 | -| `expr` | ClickHouse 支持的任意表达式。 | `SELECT column_name * 2 AS double FROM some_table` | | -| `alias` | `expr` 的名称。别名应符合[标识符](#identifiers)语法规范。 | `SELECT "table t".column_name FROM table_name AS "table t"`. | | -### 使用说明 {#notes-on-usage} +### 使用说明 -- 别名在查询或子查询中是全局的,您可以在查询的任意位置为任意表达式定义别名。例如: +* 在一个查询或子查询中,别名是全局有效的,你可以在查询的任意部分为任意表达式定义别名。例如: ```sql -SELECT (1 AS n) + 2, n +SELECT (1 AS n) + 2, n`. ``` -- 别名在子查询内部和子查询之间不可见。例如,执行以下查询时,ClickHouse 会生成异常 `Unknown identifier: num`: +* 别名在子查询内部以及子查询之间是不可见的。例如,在执行下面的查询时,ClickHouse 会抛出异常 `Unknown identifier: num`: ```sql -SELECT (SELECT sum(b.a) + num FROM b) - a.a AS num FROM a +`SELECT (SELECT sum(b.a) + num FROM b) - a.a AS num FROM a` ``` -- 如果在子查询的 `SELECT` 子句中为结果列定义了别名,这些列在外层查询中可见。例如: +* 如果在子查询的 `SELECT` 子句中为结果列定义了别名,这些列在外部查询中是可见的。例如: ```sql -SELECT n + m FROM (SELECT 1 AS n, 2 AS m) +SELECT n + m FROM (SELECT 1 AS n, 2 AS m)`. ``` -- 请注意与列名或表名相同的别名。考虑以下示例: +* 在使用与列名或表名相同的别名时要小心。来看下面的示例: ```sql CREATE TABLE t @@ -478,22 +466,22 @@ SELECT sum(b) AS b FROM t; -Received exception from server (version 18.14.17): -Code: 184. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception: Aggregate function sum(b) is found inside another aggregate function in query. +从服务器收到异常(版本 18.14.17): +Code: 184. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception: 在查询中发现聚合函数 sum(b) 位于另一个聚合函数内部。 ``` -在上述示例中,我们声明了包含列 `b` 的表 `t`。 -然后,在选择数据时,我们定义了 `sum(b) AS b` 别名。 -由于别名是全局的, -ClickHouse 将表达式 `argMax(a, b)` 中的字面量 `b` 替换为表达式 `sum(b)`。 +在前面的示例中,我们声明了一个包含列 `b` 的表 `t`。 +然后,在查询数据时,我们定义了别名 `sum(b) AS b`。 +由于别名是全局的, +ClickHouse 将表达式 `argMax(a, b)` 中的标识符 `b` 替换为了表达式 `sum(b)`。 这种替换导致了异常。 :::note -您可以通过将 [prefer_column_name_to_alias](/operations/settings/settings#prefer_column_name_to_alias) 设置为 `1` 来更改此默认行为。 +你可以通过将 [prefer_column_name_to_alias](/operations/settings/settings#prefer_column_name_to_alias) 设置为 `1` 来更改这一默认行为。 ::: -## 星号 {#asterisk} +## Asterisk \{#asterisk\} -在 `SELECT` 查询中,星号可以替代表达式。 -有关更多信息,请参阅 [SELECT](/sql-reference/statements/select/index.md#asterisk) 章节。 +在 `SELECT` 查询中,可以使用星号代替表达式。 +有关更多信息,请参阅 [SELECT](/sql-reference/statements/select/index.md#asterisk) 一节。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/table-functions/index.md b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/table-functions/index.md index a275823deb9..7faf30f5b47 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/table-functions/index.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/sql-reference/table-functions/index.md @@ -11,78 +11,15 @@ doc_type: 'reference' # 表函数 -表函数是一种用于构造表的方式。 - - - -{/*AUTOGENERATED_START*/ } - -| 页面 | 说明 | -| -------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | -| [azureBlobStorage](/sql-reference/table-functions/azureBlobStorage) | 提供类似数据表的接口,可用于在 Azure Blob Storage 中选择和插入文件,其行为类似于 `s3` 函数。 | -| [azureBlobStorageCluster](/sql-reference/table-functions/azureBlobStorageCluster) | 支持在指定集群的多个节点上并行处理来自 Azure Blob 存储的文件。 | -| [clusterAllReplicas](/sql-reference/table-functions/cluster) | 允许在不创建 Distributed 表的前提下,访问集群中在 `remote_servers` 部分配置的所有分片。 | -| [deltaLake](/sql-reference/table-functions/deltalake) | 为 Amazon S3 中的 Delta Lake 表提供只读的类表访问接口。 | -| [deltaLakeCluster](/sql-reference/table-functions/deltalakeCluster) | 这是 DeltaLake 表函数的扩展功能。 | -| [dictionary](/sql-reference/table-functions/dictionary) | 将字典数据以 ClickHouse 表的形式展示。其工作方式与 Dictionary 引擎相同。 | -| [executable](/engines/table-functions/executable) | `executable` 表函数基于用户自定义函数(UDF)的输出创建一个表,该函数由你在脚本中定义,而脚本会将行输出到 **stdout**。 | -| [file](/sql-reference/table-functions/file) | 一种表引擎,提供类似于表的接口,用于对文件执行 SELECT 和 INSERT 操作,与 s3 表函数类似。处理本地文件时使用 `file()`,处理对象存储(如 S3、GCS 或 MinIO)中的 bucket(存储桶)时使用 `s3()`。 | -| [fileCluster](/sql-reference/table-functions/fileCluster) | 启用在集群内的多个节点上并行处理匹配指定路径的文件。发起节点会与工作节点建立连接,展开文件路径中的通配符(glob),并将读文件任务分派给工作节点。每个工作节点都会向发起节点请求下一个要处理的文件,如此往复,直到所有任务完成(所有文件都已读取)。 | -| [format](/sql-reference/table-functions/format) | 按照指定的输入格式从参数中解析数据。若未指定 structure 参数,则会从数据中自动推断其结构。 | -| [gcs](/sql-reference/table-functions/gcs) | 提供类似表格的接口,用于对来自 Google Cloud Storage 的数据执行 `SELECT` 和 `INSERT` 操作。需要 `Storage Object User` IAM 角色。 | -| [fuzzQuery](/sql-reference/table-functions/fuzzQuery) | 对给定的查询字符串进行随机扰动。 | -| [fuzzJSON](/sql-reference/table-functions/fuzzJSON) | 对 JSON 字符串进行随机扰动处理。 | -| [generateRandom](/sql-reference/table-functions/generate) | 根据给定的 schema 生成随机数据。可用于为测试表填充数据。并非所有类型都受支持。 | -| [mergeTreeProjection](/sql-reference/table-functions/mergeTreeProjection) | 表示某个 MergeTree 表投影的内容,可用于自省。 | -| [mergeTreeIndex](/sql-reference/table-functions/mergeTreeIndex) | 表示 MergeTree 表中索引和标记文件的内容。可用于内部检查。 | -| [hdfs](/sql-reference/table-functions/hdfs) | 基于 HDFS 中的文件创建一张表。该表函数与 `url` 和 `file` 表函数类似。 | -| [hdfsCluster](/sql-reference/table-functions/hdfsCluster) | 允许在指定集群内的多个节点上并行处理 HDFS 文件。 | -| [hudi](/sql-reference/table-functions/hudi) | 为存储在 Amazon S3 中的 Apache Hudi 表提供只读的表格接口。 | -| [ytsaurus](/sql-reference/table-functions/ytsaurus) | 该表函数可用于从 YTsaurus 集群读取数据。 | -| [hudiCluster 表函数](/sql-reference/table-functions/hudiCluster) | 是 Hudi 表函数的扩展。可以在指定的集群中利用多个节点,并行处理位于 Amazon S3 上的 Apache Hudi 表文件。 | -| [iceberg](/sql-reference/table-functions/iceberg) | 为存储在 Amazon S3、Azure、HDFS 或本地的 Apache Iceberg 表提供只读的表式接口。 | -| [paimon](/sql-reference/table-functions/paimon) | 提供一个类似表的只读接口,用于访问存储在 Amazon S3、Azure、HDFS 或本地的 Apache Paimon 表。 | -| [icebergCluster](/sql-reference/table-functions/icebergCluster) | `iceberg` 表函数的扩展,允许在指定集群的多个节点上并行处理 Apache Iceberg 文件。 | -| [paimonCluster](/sql-reference/table-functions/paimonCluster) | 对 paimon 表函数的扩展,用于在指定集群的多个节点上并行处理 Apache Paimon 文件。 | -| [input](/sql-reference/table-functions/input) | 一种表函数,用于将按给定结构发送到服务器的数据高效转换后插入到具有另一结构的表中。 | -| [jdbc](/sql-reference/table-functions/jdbc) | 返回一个通过 JDBC 驱动连接的数据表。 | -| [merge](/sql-reference/table-functions/merge) | 创建一个临时 Merge 表。其结构通过对底层表的列取并集并推导出公共类型来确定。 | -| [mongodb](/sql-reference/table-functions/mongodb) | 允许对存储在远程 MongoDB 服务器上的数据执行 `SELECT` 查询。 | -| [mysql](/sql-reference/table-functions/mysql) | 允许对存储在远程 MySQL 服务器上的数据进行 `SELECT` 和 `INSERT` 查询操作。 | -| [null](/sql-reference/table-functions/null) | 使用 Null 表引擎创建具有指定结构的临时表。该函数用于方便编写测试和进行演示。 | -| [timeSeriesMetrics](/sql-reference/table-functions/timeSeriesMetrics) | timeSeriesMetrics 返回表 `db_name.time_series_table` 所使用的指标表,该表的引擎为 TimeSeries 引擎。 | -| [timeSeriesSelector](/sql-reference/table-functions/timeSeriesSelector) | 从 TimeSeries 表中读取时间序列数据,根据选择器进行过滤,并且时间戳位于指定的时间区间内。 | -| [timeSeriesTags](/sql-reference/table-functions/timeSeriesTags) | timeSeriesTags 表函数会返回表 `db_name.time_series_table`(其表引擎为 TimeSeries)的标签表。 | -| [prometheusQueryRange](/sql-reference/table-functions/prometheusQueryRange) | 使用 TimeSeries 表中的数据评估 Prometheus 查询。 | -| [zeros](/sql-reference/table-functions/zeros) | 用于测试目的,是快速生成大量行数据的最快方法。类似于 `system.zeros` 和 `system.zeros_mt` 系统表。 | -| [timeSeriesData](/sql-reference/table-functions/timeSeriesData) | timeSeriesData 返回表引擎为 TimeSeries 的表 `db_name.time_series_table` 所使用的数据表。 | -| [numbers](/sql-reference/table-functions/numbers) | 返回仅有一个 `number` 列的表,该列包含可指定的整数。 | -| [prometheusQuery](/sql-reference/table-functions/prometheusQuery) | 使用 TimeSeries 表中的数据评估 Prometheus 查询。 | -| [generate_series (generateSeries)](/sql-reference/table-functions/generate_series) | 返回一张仅包含一个 `generate_series` 列(UInt64)的表,该列包含从 start 到 stop 的所有整数(含端点)。 | -| [odbc](/sql-reference/table-functions/odbc) | 返回通过 ODBC 访问的表。 | -| [postgresql](/sql-reference/table-functions/postgresql) | 允许对存储在远程 PostgreSQL 服务器上的数据执行 `SELECT` 和 `INSERT` 查询。 | -| [redis](/sql-reference/table-functions/redis) | 该表函数用于将 ClickHouse 与 Redis 集成。 | -| [remote, remoteSecure](/sql-reference/table-functions/remote) | 表函数 `remote` 允许在无需创建分布式表的情况下按需访问远程服务器。表函数 `remoteSecure` 与 `remote` 类似,但通过安全连接进行访问。 | -| [S3 表函数](/sql-reference/table-functions/s3) | 提供类似于表的接口,可在 Amazon S3 和 Google Cloud Storage 中对文件执行 SELECT/INSERT 操作。此表函数类似于 `hdfs` 函数,但提供了 S3 特有的功能。 | -| [s3Cluster](/sql-reference/table-functions/s3Cluster) | `s3` 表函数的扩展,支持在指定集群内的多个节点上并行处理来自 Amazon S3 和 Google Cloud Storage 的文件。 | -| [sqlite](/sql-reference/table-functions/sqlite) | 允许对存储在 SQLite 数据库中的数据进行查询。 | -| [arrowFlight](/sql-reference/table-functions/arrowflight) | 允许对由 Apache Arrow Flight 服务器提供的数据执行查询。 | -| [url](/sql-reference/table-functions/url) | 根据指定的 `format` 和 `structure`,从 `URL` 创建表 | -| [urlCluster](/sql-reference/table-functions/urlCluster) | 允许在指定集群内的多个节点上并行处理来自 URL 的文件。 | -| [view](/sql-reference/table-functions/view) | 将子查询转换为一张表。该函数可用于实现视图。 | -| [values](/sql-reference/table-functions/values) | 创建一个临时存储,并为各列填充值。 | -| [loop](/sql-reference/table-functions/loop) | ClickHouse 中的 `loop` 表函数用于在无限循环中返回查询结果。 | - -{/*AUTOGENERATED_END*/ } - - - - - -## 用法 - -表函数可以在 `SELECT` 查询的 [`FROM`](../../sql-reference/statements/select/from.md) 子句中使用。\ -例如,您可以使用 `file` 表函数从本地计算机上的文件中 `SELECT` 数据。 +表函数是构造表的方法。 + + + + + +## 用法 {#usage} + +表函数可以在 `SELECT` 查询的 [`FROM`](../../sql-reference/statements/select/from.md) 子句中使用。例如,您可以使用 `file` 表函数从本地机器上的文件中 `SELECT` 数据。 ```bash echo "1, 2, 3" > example.csv @@ -96,13 +33,13 @@ echo "1, 2, 3" > example.csv └────┴────┴────┘ ``` -你还可以使用表函数创建仅在当前查询中可用的临时表。例如: +您还可以使用表函数创建仅在当前查询中可用的临时表。例如: -```sql title="Query" +```sql title="查询" SELECT * FROM generateSeries(1,5); ``` -```response title="Response" +```response title="响应" ┌─generate_series─┐ │ 1 │ │ 2 │ @@ -112,17 +49,17 @@ SELECT * FROM generateSeries(1,5); └─────────────────┘ ``` -当查询结束时,该表将被删除。 +查询完成后,该表将被删除。 -可以使用表函数来创建表,其语法如下: +表函数可以用作创建表的一种方式,使用以下语法: ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name AS table_function() ``` -例如: +例如: -```sql title="Query" +```sql title="查询" CREATE TABLE series AS generateSeries(1, 5); SELECT * FROM series; ``` @@ -137,9 +74,7 @@ SELECT * FROM series; └─────────────────┘ ``` -最后,表函数还可以用于向表中执行 `INSERT` 操作。例如, -我们可以再次使用 `file` 表函数,将之前示例中创建的表的内容 -写入磁盘上的一个文件中: +最后,表函数可以用于向表中 `INSERT` 数据。例如,我们可以使用 `file` 表函数再次将前面示例中创建的表的内容写入磁盘上的文件: ```sql INSERT INTO FUNCTION file('numbers.csv', 'CSV') SELECT * FROM series; @@ -155,5 +90,5 @@ cat numbers.csv ``` :::note -如果禁用了 [allow_ddl](/operations/settings/settings#allow_ddl) 设置,则不能使用表函数。 +如果 [allow_ddl](/operations/settings/settings#allow_ddl) 设置被禁用,则无法使用表函数。 ::: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/use-cases/AI_ML/data-exploration/marimo-notebook.md b/i18n/zh/docusaurus-plugin-content-docs/current/use-cases/AI_ML/data-exploration/marimo-notebook.md index fc9f5b11b49..f2f24d23f02 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/use-cases/AI_ML/data-exploration/marimo-notebook.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/use-cases/AI_ML/data-exploration/marimo-notebook.md @@ -303,37 +303,41 @@ WHERE town = 'LONDON' """ df_distribution = chdb.query(query_distribution, "DataFrame") +``` + # 创建交互式箱线图。 -fig_box = go.Figure() - -fig_box.add_trace( - go.Box( - y=df_distribution['price'], - name=f'London {year_slider.value}', - boxmean='sd', # 显示平均值和标准差 - marker_color='lightblue', - boxpoints='outliers' # 显示离群点 - ) + +fig_box = go.Figure() + +fig_box.add_trace( +go.Box( +y=df_distribution['price'], +name=f'London {year_slider.value}', +boxmean='sd', # 显示平均值和标准差 +marker_color='lightblue', +boxpoints='outliers' # 显示离群点 +) ) -fig_box.update_layout( - title=f'{year_slider.value} 年伦敦房价分布', - yaxis=dict( - title='价格 (£)', - tickformat=',.0f' - ), - showlegend=False, - height=600 +fig_box.update_layout( +title=f'{year_slider.value} 年伦敦房价分布', +yaxis=dict( +title='价格 (£)', +tickformat=',.0f' +), +showlegend=False, +height=600 ) -fig_box -``` +fig_box +``` 如果您选择单元格右上角的选项按钮,即可隐藏代码。 移动滑块时,图表会自动更新,这得益于 Marimo 的响应式执行机制: Marimo 动态图表 +``` ## 总结 {#summary} diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/use-cases/observability/clickstack/api-reference.md b/i18n/zh/docusaurus-plugin-content-docs/current/use-cases/observability/clickstack/api-reference.md new file mode 100644 index 00000000000..6116e19e5bf --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs/current/use-cases/observability/clickstack/api-reference.md @@ -0,0 +1,15 @@ +--- +slug: /use-cases/observability/clickstack/api-reference +title: 'API 参考文档' +pagination_prev: null +pagination_next: null +description: 'ClickStack API 参考文档主页' +doc_type: 'landing-page' +--- + +import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; +import {Button} from "@clickhouse/click-ui/bundled"; + + + +有关 API 参考文档,请访问[本页面](https://www.clickhouse.com/docs/clickstack/api-reference)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/whats-new/changelog/index.md b/i18n/zh/docusaurus-plugin-content-docs/current/whats-new/changelog/index.md index 1b883d7138a..7fe6fcee380 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/whats-new/changelog/index.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/whats-new/changelog/index.md @@ -1,24 +1,26 @@ --- -description: '2025 年更新日志' -note: '此文件由 yarn build 生成' +description: '2025 年变更日志' +note: '此文件通过 yarn build 生成' slug: /whats-new/changelog/ sidebar_position: 2 sidebar_label: '2025' -title: '2025 年更新日志' +title: '2025 年变更日志' doc_type: 'changelog' --- ### 目录 -**[ClickHouse v25.10 版本,2025-10-30](#2510)**
-**[ClickHouse v25.9 版本,2025-09-25](#259)**
-**[ClickHouse v25.8 LTS 版本,2025-08-28](#258)**
-**[ClickHouse v25.7 版本,2025-07-24](#257)**
-**[ClickHouse v25.6 版本,2025-06-26](#256)**
-**[ClickHouse v25.5 版本,2025-05-22](#255)**
-**[ClickHouse v25.4 版本,2025-04-22](#254)**
-**[ClickHouse v25.3 LTS 版本,2025-03-20](#253)**
-**[ClickHouse v25.2 版本,2025-02-27](#252)**
-**[ClickHouse v25.1 版本,2025-01-28](#251)**
+ +**[ClickHouse 发行版 v25.11,2025-11-25](#2511)**
+**[ClickHouse 发行版 v25.10,2025-10-30](#2510)**
+**[ClickHouse 发行版 v25.9,2025-09-25](#259)**
+**[ClickHouse 发行版 v25.8 LTS,2025-08-28](#258)**
+**[ClickHouse 发行版 v25.7,2025-07-24](#257)**
+**[ClickHouse 发行版 v25.6,2025-06-26](#256)**
+**[ClickHouse 发行版 v25.5,2025-05-22](#255)**
+**[ClickHouse 发行版 v25.4,2025-04-22](#254)**
+**[ClickHouse 发行版 v25.3 LTS,2025-03-20](#253)**
+**[ClickHouse 发行版 v25.2,2025-02-27](#252)**
+**[ClickHouse 发行版 v25.1,2025-01-28](#251)**
**[2024 年更新日志](https://clickhouse.com/docs/whats-new/changelog/2024/)**
**[2023 年更新日志](https://clickhouse.com/docs/whats-new/changelog/2023/)**
**[2022 年更新日志](https://clickhouse.com/docs/whats-new/changelog/2022/)**
@@ -28,705 +30,909 @@ doc_type: 'changelog' **[2018 年更新日志](https://clickhouse.com/docs/whats-new/changelog/2018/)**
**[2017 年更新日志](https://clickhouse.com/docs/whats-new/changelog/2017/)**
+### ClickHouse 25.11 版本,2025-11-25 {#2511} -### ClickHouse 25.10 版本,2025-10-31 {#2510} - +#### 不向后兼容的变更 +* 移除已弃用的 `Object` 类型。[#85718](https://github.com/ClickHouse/ClickHouse/pull/85718) ([Pavel Kruglov](https://github.com/Avogar))。 +* 移除已弃用的 `LIVE VIEW` 功能。如果你正在使用 `LIVE VIEW`,则无法升级到该新版本。[#88706](https://github.com/ClickHouse/ClickHouse/pull/88706) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 在之前的版本中,`Geometry` 类型只是 `String` 的别名,但现在它已经成为一个功能完备的类型。[#83344](https://github.com/ClickHouse/ClickHouse/pull/83344)([scanhex12](https://github.com/scanhex12))。 +* 对 MergeTree 表的 Wide 数据部分中为 `Variant` 类型子列创建的文件名进行转义。此更改会导致与包含 Variant/Dynamic/JSON 数据类型的旧表不兼容。它修复了在 Variant 内部存储包含特殊字符的类型的问题(例如包含 `\` 的特定时区的 DateTime)。可以通过修改 MergeTree 设置 `escape_variant_subcolumn_filenames` 来禁用转义(如需保持兼容性,请在 MergeTree 的配置中禁用此设置,或在升级前将 `compatibility` 设置为之前的版本)。解决了 [#69590](https://github.com/ClickHouse/ClickHouse/issues/69590)。[#87300](https://github.com/ClickHouse/ClickHouse/pull/87300)([Pavel Kruglov](https://github.com/Avogar))。 +* 默认对 `String` 数据类型启用 `with_size_stream` 序列化格式。此更改是向后兼容的,但新序列化格式仅从 25.10 版本开始支持,这意味着无法降级到 25.10 之前的版本。如果希望保留降级到 25.9 及更早版本的可能性,请在服务器配置的 `merge_tree` 部分中,将 `serialization_info_version` 设置为 `basic`,并将 `string_serialization_version` 设置为 `single_stream`。[#89329](https://github.com/ClickHouse/ClickHouse/pull/89329)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 为 HTTP 响应结果增加异常标记支持,以便客户端能够更可靠地解析异常。解决了 [#75175](https://github.com/ClickHouse/ClickHouse/issues/75175)。为了在各种格式之间保持一致性,设置 `http_write_exception_in_output_format` 默认处于禁用状态。[#88818](https://github.com/ClickHouse/ClickHouse/pull/88818)([Kaviraj Kanagaraj](https://github.com/kavirajk))。虽然它本不应破坏任何现有行为(最糟情况也只是向异常消息中附加一个有些奇怪的字符串),但出于提示/提醒的目的,仍然有必要将其纳入 "Backward Incompatible Change" 这一变更日志类别中(因为谁知道某些乱写的脚本是如何解析异常消息的)。 +* TODO,@Michicosun - 需要澄清或删除。`PlainRewritable` 磁盘会将其文件系统树存储在内存中。如果另一个磁盘更改了对象存储结构,内存中的结构将不会被更新,这会导致无效的文件系统操作,并可能出现 `no such key` 错误。[#89038](https://github.com/ClickHouse/ClickHouse/pull/89038) ([Mikhail Artemenko](https://github.com/Michicosun))。 +* 修复了 Kafka 存储中 SASL 设置的优先级处理问题。现在,在 CREATE TABLE 查询中指定的表级 SASL 设置会正确覆盖配置文件中为消费者/生产者指定的设置。[#89401](https://github.com/ClickHouse/ClickHouse/pull/89401)([János Benjamin Antal](https://github.com/antaljanosbenjamin))。 +* 现在会将不带时区的 Parquet `timestamp`(`isAdjustedToUTC=false`)读取为 `DateTime64(..., 'UTC')`,而不是 `DateTime64(...)`。这样虽仍不完全正确,但在将此类 UTC `timestamp` 转换为字符串时,会得到正确的本地时间表示。使用 `input_format_parquet_local_time_as_utc = 0` 可以恢复旧的行为。修复了 [#87469](https://github.com/ClickHouse/ClickHouse/issues/87469)。[#87872](https://github.com/ClickHouse/ClickHouse/pull/87872)([Michael Kolupaev](https://github.com/al13n321))。 +* 对 `T64` codec 做了一个小改进:它不再接受与压缩元素大小未对齐的数据类型,否则会触发一个 bug。修复了 [#89282](https://github.com/ClickHouse/ClickHouse/issues/89282)。[#89432](https://github.com/ClickHouse/ClickHouse/pull/89432)([yanglongwei](https://github.com/ylw510))。 -#### 不向后兼容的变更 +#### 新功能 -* 将默认的 `schema_inference_make_columns_nullable` 设置修改为根据 Parquet/ORC/Arrow 元数据中的列 `Nullable` 信息来决定是否可为空,而不是将所有列都设为 Nullable。文本格式不受影响。[#71499](https://github.com/ClickHouse/ClickHouse/pull/71499) ([Michael Kolupaev](https://github.com/al13n321))。 -* 查询结果缓存现在会忽略 `log_comment` 设置,因此仅更改查询中的 `log_comment` 将不再强制触发缓存未命中。在少数情况下,用户可能通过改变 `log_comment` 有意对缓存进行分片。本次变更修改了这种行为,因此存在向后不兼容之处。对于这一用途,请改用 `query_cache_tag` 设置。[#79878](https://github.com/ClickHouse/ClickHouse/pull/79878)([filimonov](https://github.com/filimonov))。 -* 在之前的版本中,包含与运算符实现函数同名的表函数的查询,其格式化结果并不一致。修复了 [#81601](https://github.com/ClickHouse/ClickHouse/issues/81601)。修复了 [#81977](https://github.com/ClickHouse/ClickHouse/issues/81977)。修复了 [#82834](https://github.com/ClickHouse/ClickHouse/issues/82834)。修复了 [#82835](https://github.com/ClickHouse/ClickHouse/issues/82835)。EXPLAIN SYNTAX 查询现在不会总是对运算符进行格式化——新的行为更好地体现了“解释语法”这一操作的目的。`clickhouse-format`、`formatQuery` 以及类似工具,如果查询中以函数形式使用这些函数,将不会再把它们格式化为运算符。[#82825](https://github.com/ClickHouse/ClickHouse/pull/82825)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 禁止在 `JOIN` 键中使用 `Dynamic` 类型。当 `Dynamic` 类型的值与非 `Dynamic` 类型比较时,可能会产生意外结果。最好将 `Dynamic` 列转换为所需的类型。[#86358](https://github.com/ClickHouse/ClickHouse/pull/86358) ([Pavel Kruglov](https://github.com/Avogar))。 -* `storage_metadata_write_full_object_key` 服务器选项默认开启,当前无法关闭。这是一次向后兼容的更改,仅供注意。此更改仅与 25.x 版本向前兼容。这意味着,如果你需要回滚新版本,只能降级到任意 25.x 版本。[#87335](https://github.com/ClickHouse/ClickHouse/pull/87335) ([Sema Checherinda](https://github.com/CheSema))。 -* 将 `replicated_deduplication_window_seconds` 从一周缩短到一小时,以便在插入速率较低时减少在 ZooKeeper 上存储的 znode 数量。[#87414](https://github.com/ClickHouse/ClickHouse/pull/87414) ([Sema Checherinda](https://github.com/CheSema))。 -* 将设置 `query_plan_use_new_logical_join_step` 重命名为 `query_plan_use_logical_join_step`。 [#87679](https://github.com/ClickHouse/ClickHouse/pull/87679) ([Vladimir Cherkasov](https://github.com/vdimir)). -* 新的语法使文本索引的 tokenizer 参数表达能力更强。 [#87997](https://github.com/ClickHouse/ClickHouse/pull/87997) ([Elmi Ahmadov](https://github.com/ahmadov)). -* 将函数 `searchAny` 和 `searchAll` 重命名为 `hasAnyTokens` 和 `hasAllTokens`,使其与现有函数 `hasToken` 保持更好的一致性。[#88109](https://github.com/ClickHouse/ClickHouse/pull/88109) ([Robert Schulze](https://github.com/rschu1ze))。 -* 从文件系统缓存中移除 `cache_hits_threshold`。该功能是在我们引入 SLRU 缓存策略之前由一位外部贡献者添加的,而现在我们已经有了 SLRU 缓存策略,因此没有必要同时支持二者。[#88344](https://github.com/ClickHouse/ClickHouse/pull/88344)([Kseniia Sumarokova](https://github.com/kssenii))。 -* 对 `min_free_disk_ratio_to_perform_insert` 和 `min_free_disk_bytes_to_perform_insert` 设置的工作方式进行了两项小改动:- 使用“未预留”(unreserved)而不是“可用”(available)字节数来决定是否应拒绝一次插入操作。如果为后台合并和变更(mutations)预留的空间相对于已配置阈值来说很小,这一点可能并不关键,但看起来更为合理。- 不再将这些设置应用于 system 表。这样做的原因是我们仍然希望像 `query_log` 这样的表能够继续更新,这对调试非常有帮助。写入 system 表的数据通常相对于实际数据来说很小,因此在合理的 `min_free_disk_ratio_to_perform_insert` 阈值下,它们应该可以在磁盘更接近满容量时仍然继续工作更长时间。[#88468](https://github.com/ClickHouse/ClickHouse/pull/88468) ([c-end](https://github.com/c-end))。 -* 为 Keeper 的内部复制启用异步模式。Keeper 将在保持与之前相同行为的前提下,可能带来性能提升。如果你是从早于 23.9 的版本升级,需要先升级到 23.9+,然后再升级到 25.10+。你也可以在升级前将 `keeper_server.coordination_settings.async_replication` 设置为 0,并在升级完成后再将其重新启用。[#88515](https://github.com/ClickHouse/ClickHouse/pull/88515)([Antonio Andelic](https://github.com/antonio2368))。 +* 引入 `Geometry` 类型,并支持读取其 `WKB` 和 `WKT` 格式。在之前的版本中,`Geometry` 类型只是 `String` 的别名,但现在它已成为一个功能完整的类型。[#83344](https://github.com/ClickHouse/ClickHouse/pull/83344)([scanhex12](https://github.com/scanhex12))。 +* 新增 SQL 语句 `EXECUTE AS` 以支持用户身份模拟。修复 [#39048](https://github.com/ClickHouse/ClickHouse/issues/39048)。[#70775](https://github.com/ClickHouse/ClickHouse/pull/70775) ([Shankar](https://github.com/shiyer7474))。 +* 添加 `naiveBayesClassifier` 函数,用于基于 n-gram 的朴素贝叶斯方法对文本进行分类。 [#88677](https://github.com/ClickHouse/ClickHouse/pull/88677) ([Nihal Z. Miaji](https://github.com/nihalzp)). +* 为 `LIMIT` 和 `OFFSET` 添加对小数值的支持,以便选取表的一部分。解决 [#81892](https://github.com/ClickHouse/ClickHouse/issues/81892)。[#88755](https://github.com/ClickHouse/ClickHouse/pull/88755)([Ahmed Gouda](https://github.com/0xgouda))。 +* 用于 Microsoft OneLake 目录的 ClickHouse 子系统。[#89366](https://github.com/ClickHouse/ClickHouse/pull/89366) ([scanhex12](https://github.com/scanhex12))。 +* 添加 `flipCoordinates` 函数,用于在数组中展开指定数量的维度,并在 Tuple 列内交换指针。修复 [#79469](https://github.com/ClickHouse/ClickHouse/issues/79469)。[#79634](https://github.com/ClickHouse/ClickHouse/pull/79634)([Sachin Kumar Singh](https://github.com/sachinkumarsingh092))。 +* 添加 `system.unicode` 表,其中包含 Unicode 字符及其属性的列表。解决了 [#80055](https://github.com/ClickHouse/ClickHouse/issues/80055)。[#80857](https://github.com/ClickHouse/ClickHouse/pull/80857)([wxybear](https://github.com/wxybear))。 +* 新增一个 MergeTree 设置项 `merge_max_dynamic_subcolumns_in_wide_part`,用于在合并后限制 Wide part 中动态子列的数量,而不受数据类型中指定参数的影响。[#87646](https://github.com/ClickHouse/ClickHouse/pull/87646) ([Pavel Kruglov](https://github.com/Avogar))。 +* 新增对 `cume_dist` 窗口函数的支持。修复了 [#86920](https://github.com/ClickHouse/ClickHouse/issues/86920)。[#88102](https://github.com/ClickHouse/ClickHouse/pull/88102)([Manuel](https://github.com/raimannma))。 +* 用户现在可以在构建文本索引时添加一个新的参数 `preprocessor`。该参数是一个任意表达式,用于在分词之前对每个文档进行转换。[#88272](https://github.com/ClickHouse/ClickHouse/pull/88272)([Jimmy Aguilar Mena](https://github.com/Ergus))。 +* 为 `X-ClickHouse-Progress` 和 `X-ClickHouse-Summary` 新增 `memory_usage` 字段。可用于在客户端实时收集查询的内存使用情况。[#88393](https://github.com/ClickHouse/ClickHouse/pull/88393) ([Christoph Wurm](https://github.com/cwurm))。 +* 添加 `into_outfile_create_parent_directories` 设置,在使用 `INTO OUTFILE` 时自动创建父目录,以避免在输出路径不存在时出错。这简化了查询将结果写入多级目录时的工作流。修复 [#88610](https://github.com/ClickHouse/ClickHouse/issues/88610)。[#88795](https://github.com/ClickHouse/ClickHouse/pull/88795)([Saksham](https://github.com/Saksham10-11))。 +* 支持临时表的 `CREATE OR REPLACE` 语法。解决了 [#35888](https://github.com/ClickHouse/ClickHouse/issues/35888)。[#89450](https://github.com/ClickHouse/ClickHouse/pull/89450)([Aleksandr Musorin](https://github.com/AVMusorin))。 +* 增加对 `arrayRemove` 的支持,用于从数组 `arr` 中移除所有等于 `elem` 的元素。此功能仅出于与 Postgres 的兼容性考虑,因为 ClickHouse 已经提供了更加强大的 `arrayFilter` 函数。解决 [#52099](https://github.com/ClickHouse/ClickHouse/issues/52099)。[#89585](https://github.com/ClickHouse/ClickHouse/pull/89585)([tiwarysaurav](https://github.com/tiwarysaurav))。 +* 新增用于计算平均值的 `midpoint` 标量函数。修复了 [#89029](https://github.com/ClickHouse/ClickHouse/issues/89029)。[#89679](https://github.com/ClickHouse/ClickHouse/pull/89679)([simonmichal](https://github.com/simonmichal))。 +* Web UI 现在提供了下载按钮。即使界面只显示部分结果,也会下载全部结果。[#89768](https://github.com/ClickHouse/ClickHouse/pull/89768) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 添加 `arrow_flight_request_descriptor_type` 设置项,以支持 Dremio 和其他要求使用 command 风格 descriptor 的 Arrow Flight 服务器。实现了 [#89523](https://github.com/ClickHouse/ClickHouse/issues/89523)。[#89826](https://github.com/ClickHouse/ClickHouse/pull/89826)([Shreyas Ganesh](https://github.com/shreyasganesh0))。 +* 新增聚合函数 `argAndMin` 和 `argAndMax`,用于返回参数值及其对应的极值。在之前的版本中,也可以通过将元组作为参数来实现同样的效果。 [#89884](https://github.com/ClickHouse/ClickHouse/pull/89884) ([AbdAlRahman Gad](https://github.com/AbdAlRahmanGad))。 +* 用于写入和验证 Parquet 校验和的设置。 [#79012](https://github.com/ClickHouse/ClickHouse/pull/79012) ([Michael Kolupaev](https://github.com/al13n321)). +* 在 Kafka 表引擎中新增 `kafka_schema_registry_skip_bytes` 配置项,用于在解析消息负载之前跳过封套头部字节(例如 AWS Glue Schema Registry 的 19 字节前缀)。这使得 ClickHouse 能够从在消息前添加元数据头的 Schema 注册中心消费消息。[#89621](https://github.com/ClickHouse/ClickHouse/pull/89621)([Taras Polishchuk](https://github.com/wake-up-neo))。 +* 添加 `h3PolygonToCells` 函数,用于将几何区域填充为 h3 六边形。解决了 [#33991](https://github.com/ClickHouse/ClickHouse/issues/33991)。[#66262](https://github.com/ClickHouse/ClickHouse/pull/66262)([Zacharias Knudsen](https://github.com/zachasme))。 +* 添加新的虚拟列 `_tags`(`Map(String, String)`),其中包含在 S3 中与该 blob 关联的所有标签(注意,如果 blob 没有任何标签,将不会发出额外的请求)。解决 [#72945](https://github.com/ClickHouse/ClickHouse/issues/72945)。[#77773](https://github.com/ClickHouse/ClickHouse/pull/77773)([Zicong Qu](https://github.com/zicongleoqu))。 +* TODO,@vdimir —— 说明其中的差异并移到其他类别。添加对 `NULL` 安全的比较运算符 `<=>`(别名 `IS NOT DISTINCT FROM`)和 `IS DISTINCT FROM`,以便在相等性判断中正确处理 `NULL` 值。修复 [#86763](https://github.com/ClickHouse/ClickHouse/issues/86763)。[#87581](https://github.com/ClickHouse/ClickHouse/pull/87581)([yanglongwei](https://github.com/ylw510))。 +#### 实验性功能 +* 支持从 ACME 提供商(如 Let's Encrypt)获取 TLS 证书,参见 [RFC 8555](https://datatracker.ietf.org/doc/html/rfc8555)。这使得可以在分布式集群上自动配置 TLS。[#66315](https://github.com/ClickHouse/ClickHouse/pull/66315) ([Konstantin Bogdanov](https://github.com/thevar1able))。 +* 支持部分 Prometheus HTTP Query API。要启用它,请在配置文件的 `` 部分添加一个类型为 `query_api` 的规则。支持的处理器为 `/api/v1/query_range` 和 `/api/v1/query`。[#86132](https://github.com/ClickHouse/ClickHouse/pull/86132) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 +* 全文搜索现已进入 beta 阶段(此前为实验阶段)。[#88928](https://github.com/ClickHouse/ClickHouse/pull/88928) ([Robert Schulze](https://github.com/rschu1ze))。 +* 将 `Alias` 标记为实验特性,可通过设置 `allow_experimental_alias_table_engine = 1` 启用。[#89712](https://github.com/ClickHouse/ClickHouse/pull/89712) ([Kai Zhu](https://github.com/nauu))。 +#### 性能优化 +* Parquet 读取器 v3 已默认启用。[#88827](https://github.com/ClickHouse/ClickHouse/pull/88827)([Michael Kolupaev](https://github.com/al13n321))。 +* 分布式执行:最好按行组 ID 而不是按文件来拆分任务。[#87508](https://github.com/ClickHouse/ClickHouse/pull/87508) ([scanhex12](https://github.com/scanhex12))。 +* `RIGHT` 和 `FULL` JOIN 现在使用 ConcurrentHashJoin;这意味着这些类型的 JOIN 现在可以以更高的并行度运行。在多种 `RIGHT` 和 `FULL` JOIN 场景下,性能最高可提升两倍。修复 [#78027](https://github.com/ClickHouse/ClickHouse/issues/78027)。[#78462](https://github.com/ClickHouse/ClickHouse/pull/78462)([Yarik Briukhovetskyi](https://github.com/yariks5s))。 +* 针对查询中包含大常量值的表达式进行了优化。修复了 [#72880](https://github.com/ClickHouse/ClickHouse/issues/72880)。[#81104](https://github.com/ClickHouse/ClickHouse/pull/81104)([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy))。 +* 在包含 1 万个以上 part 的表上,借助大量分区裁剪,`SELECT` 查询性能可提升至 8 倍。[#85535](https://github.com/ClickHouse/ClickHouse/pull/85535)([James Morrison](https://github.com/jawm))。 +* 当查询在聚合状态中使用固定哈希表(按小整数分组)时,ClickHouse 会并行合并聚合状态,以提升查询性能。[#87366](https://github.com/ClickHouse/ClickHouse/pull/87366)([Jianfei Hu](https://github.com/incfly))。 +* 允许将使用 `_part_offset` 的 SELECT 且具有不同 ORDER BY 的 projection 用作二级索引。启用后,某些查询谓词可以通过读取 projection 分片生成位图,用于在 PREWHERE 阶段高效过滤行。这是实现 projection 索引的第三步,前两步见 [#80343](https://github.com/ClickHouse/ClickHouse/issues/80343)。[#81021](https://github.com/ClickHouse/ClickHouse/pull/81021)([Amos Bird](https://github.com/amosbird))。 +* 修复在极少数 Aarch64 系统和可能的其他架构/内核组合上出现的 VDSO 问题。[#86096](https://github.com/ClickHouse/ClickHouse/pull/86096) ([Tomas Hulata](https://github.com/tombokombo)). +* 通过简化代码并微调[选择算法](https://clickhouse.com/blog/lz4-compression-in-clickhouse#how-to-choose-the-best-algorithm),提高 LZ4 解压缩速度。[#88360](https://github.com/ClickHouse/ClickHouse/pull/88360)([Raúl Marín](https://github.com/Algunenano))。 +* S3 会根据键名前缀在内部对对象进行分区,并可自动扩展以支持每个分区上的高请求速率。此更改引入了两个新的 BACKUP 设置:`data_file_name_generator` 和 `data_file_name_prefix_length`。当 `data_file_name_generator=checksum` 时,备份数据文件将使用其内容的哈希值来命名。示例:对于 checksum = `abcd1234ef567890abcd1234ef567890` 且 `data_file_name_prefix_length = 3`,生成的路径将为:`abc/d1234ef567890abcd1234ef567890`。这样生成的对象键分布可增强跨 S3 分区的负载均衡,并降低被限流的风险。[#88418](https://github.com/ClickHouse/ClickHouse/pull/88418)([Julia Kartseva](https://github.com/jkartseva))。 +* 通过缓存字典块并使用哈希表而非二分查找来进行 token 查找,提升了文本索引的性能。[#88786](https://github.com/ClickHouse/ClickHouse/pull/88786) ([Elmi Ahmadov](https://github.com/ahmadov)). +* 查询现在可以同时利用 `optimize_read_in_order` 和 `query_plan_optimize_lazy_materialization`。解决了 [#88767](https://github.com/ClickHouse/ClickHouse/issues/88767)。[#88866](https://github.com/ClickHouse/ClickHouse/pull/88866)([Manuel](https://github.com/raimannma))。 +* 对包含 `DISTINCT` 的查询使用聚合投影。修复 [#86925](https://github.com/ClickHouse/ClickHouse/issues/86925)。[#88894](https://github.com/ClickHouse/ClickHouse/pull/88894)([Nihal Z. Miaji](https://github.com/nihalzp))。 +* 缓存倒排列表,以提升连续运行时的性能。[#88912](https://github.com/ClickHouse/ClickHouse/pull/88912) ([Elmi Ahmadov](https://github.com/ahmadov)). +* 当输入的排序顺序与 LIMIT BY 键一致时运行流式 LIMIT BY 转换。[#88969](https://github.com/ClickHouse/ClickHouse/pull/88969) ([Eduard Karacharov](https://github.com/korowa)). +* 在某些情况下,允许将 `ANY LEFT JOIN` 或 `ANY RIGHT JOIN` 重写为 `ALL INNER JOIN`。 [#89403](https://github.com/ClickHouse/ClickHouse/pull/89403) ([Dmitry Novik](https://github.com/novikd))。 +* 降低日志开销:为每条日志使用更少的原子操作。[#89651](https://github.com/ClickHouse/ClickHouse/pull/89651) ([Sergei Trifonov](https://github.com/serxa)). +* 当在包含多个 join 的查询中启用了 runtime filter 并添加了多个 runtime filter 时,实现将新添加的过滤步骤优先于其他过滤步骤进行下推。 [#89725](https://github.com/ClickHouse/ClickHouse/pull/89725) ([Alexander Gololobov](https://github.com/davenger)). +* 通过减少合并哈希表的开销,略微加速某些 `uniqExact` 操作。[#89727](https://github.com/ClickHouse/ClickHouse/pull/89727)([Raúl Marín](https://github.com/Algunenano))。 +* 将延迟物化的行数限制从 10 提高到 100。[#89772](https://github.com/ClickHouse/ClickHouse/pull/89772) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 默认启用 `allow_special_serialization_kinds_in_output_formats` 设置。这将在某些行输出格式中,对稀疏列/复制列的输出减少内存使用并提升查询速度。[#89402](https://github.com/ClickHouse/ClickHouse/pull/89402) ([Pavel Kruglov](https://github.com/Avogar))。 +* 为 `ALTER TABLE ... FREEZE` 查询增加了并行执行能力。[#71743](https://github.com/ClickHouse/ClickHouse/pull/71743) ([Kirill](https://github.com/kirillgarbar))。 +* 为 bcrypt 身份验证添加缓存。[#87115](https://github.com/ClickHouse/ClickHouse/pull/87115) ([Nikolay Degterinsky](https://github.com/evillique))。 +* 如果在带有 `FINAL` 的查询中,所使用的 skip index 作用在主键列上,那么在其他部分检查主键交集的额外步骤是多余的,因此现在不再执行。修复了 [#85897](https://github.com/ClickHouse/ClickHouse/issues/85897)。[#88368](https://github.com/ClickHouse/ClickHouse/pull/88368)([Shankar Iyer](https://github.com/shankar-iyer))。 +* 优化项 `enable_lazy_columns_replication` 现在已成为默认设置,这将在执行 join 操作时减少内存占用。[#89316](https://github.com/ClickHouse/ClickHouse/pull/89316)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 为各数据片段引入按表级的 `ColumnsDescription` 缓存,当表包含大量数据片段和列时可减少内存占用。[#89352](https://github.com/ClickHouse/ClickHouse/pull/89352) ([Azat Khuzhin](https://github.com/azat))。 +* 为文本索引的反序列化后 header 引入了缓存,以减少 I/O 并提升查询性能。可以通过以下新的服务器设置进行配置:- `text_index_header_cache_policy` - `text_index_header_cache_size` - `text_index_header_cache_max_entries` - `text_index_header_cache_size_ratio`。[#89513](https://github.com/ClickHouse/ClickHouse/pull/89513)([Elmi Ahmadov](https://github.com/ahmadov))。 -#### 新功能 +#### 改进 -* 添加对负数 `LIMIT` 和 `OFFSET` 的支持。关闭 [#28913](https://github.com/ClickHouse/ClickHouse/issues/28913)。[#88411](https://github.com/ClickHouse/ClickHouse/pull/88411)([Nihal Z. Miaji](https://github.com/nihalzp))。 -* `Alias` 引擎会创建指向另一张表的代理。所有读写操作都会被转发到目标表,而别名本身不存储任何数据,只维护对目标表的引用。[#87965](https://github.com/ClickHouse/ClickHouse/pull/87965) ([Kai Zhu](https://github.com/nauu))。 -* 已完整支持运算符 `IS NOT DISTINCT FROM` (`<=>`)。[#88155](https://github.com/ClickHouse/ClickHouse/pull/88155) ([simonmichal](https://github.com/simonmichal))。 -* 新增支持在 `MergeTree` 表中为所有合适的列自动创建统计信息。新增表级设置 `auto_statistics_types`,用于存储要创建的统计信息类型的逗号分隔列表(例如:`auto_statistics_types = 'minmax, uniq, countmin'`)。[#87241](https://github.com/ClickHouse/ClickHouse/pull/87241) ([Anton Popov](https://github.com/CurtizJ))。 -* 新增用于文本的布隆过滤器索引 `sparse_gram`。[#79985](https://github.com/ClickHouse/ClickHouse/pull/79985)([scanhex12](https://github.com/scanhex12))。 -* 一个用于在不同进制之间进行数值转换的全新 `conv` 函数,目前支持 `2-36` 进制。[#83058](https://github.com/ClickHouse/ClickHouse/pull/83058) ([hp](https://github.com/hp77-creator))。 -* 添加了对 `LIMIT BY ALL` 语法的支持。与 `GROUP BY ALL` 和 `ORDER BY ALL` 类似,`LIMIT BY ALL` 会自动展开为将 SELECT 子句中的所有非聚合表达式用作 LIMIT BY 键。例如,`SELECT id, name, count(*) FROM table GROUP BY id LIMIT 1 BY ALL` 等价于 `SELECT id, name, count(*) FROM table GROUP BY id LIMIT 1 BY id, name`。当需要按所有已选的非聚合列进行限制且不想显式列出它们时,此功能可以简化查询。修复了 [#59152](https://github.com/ClickHouse/ClickHouse/issues/59152)。[#84079](https://github.com/ClickHouse/ClickHouse/pull/84079)([Surya Kant Ranjan](https://github.com/iit2009046))。 -* 为 ClickHouse 新增对 Apache Paimon 查询的支持。此集成将使 ClickHouse 用户能够直接读取和查询 Paimon 的数据湖存储。[#84423](https://github.com/ClickHouse/ClickHouse/pull/84423) ([JIaQi](https://github.com/JiaQiTang98))。 -* 新增 `studentTTestOneSample` 聚合函数。[#85436](https://github.com/ClickHouse/ClickHouse/pull/85436) ([Dylan](https://github.com/DylanBlakemore))。 -* 聚合函数 `quantilePrometheusHistogram`,其参数为直方图桶的上界以及对应的累积值,并在找到分位数所在位置的桶内,在该桶的下界和上界之间进行线性插值。其行为类似于 PromQL 在经典直方图上的 `histogram_quantile` 函数。 [#86294](https://github.com/ClickHouse/ClickHouse/pull/86294) ([Stephen Chi](https://github.com/stephchi0)). -* 新增用于 Delta Lake 元数据文件的系统表。[#87263](https://github.com/ClickHouse/ClickHouse/pull/87263) ([scanhex12](https://github.com/scanhex12)). -* 添加 `ALTER TABLE REWRITE PARTS` —— 使用所有新的设置,从头开始重写表的数据片段(因为有些设置,例如 `use_const_adaptive_granularity`,只会应用于新的数据片段)。 [#87774](https://github.com/ClickHouse/ClickHouse/pull/87774) ([Azat Khuzhin](https://github.com/azat))。 -* 添加 `SYSTEM RECONNECT ZOOKEEPER` 命令,用于强制断开并重新连接到 ZooKeeper([https://github.com/ClickHouse/ClickHouse/issues/87317](https://github.com/ClickHouse/ClickHouse/issues/87317))。[#87318](https://github.com/ClickHouse/ClickHouse/pull/87318)([Pradeep Chhetri](https://github.com/chhetripradeep))。 -* 通过设置 `max_named_collection_num_to_warn` 和 `max_named_collection_num_to_throw` 来限制命名集合的数量。新增指标 `NamedCollection` 和错误 `TOO_MANY_NAMED_COLLECTIONS`。 [#87343](https://github.com/ClickHouse/ClickHouse/pull/87343) ([Pablo Marcos](https://github.com/pamarcos)). -* 新增了优化后的不区分大小写 `startsWith` 和 `endsWith` 函数版本:`startsWithCaseInsensitive`、`endsWithCaseInsensitive`、`startsWithCaseInsensitiveUTF8` 和 `endsWithCaseInsensitiveUTF8`。[#87374](https://github.com/ClickHouse/ClickHouse/pull/87374)([Guang Zhao](https://github.com/zheguang))。 -* 添加了一种方式,可通过服务器配置中的 "resources_and_workloads" 部分在 SQL 中提供 `WORKLOAD` 和 `RESOURCE` 定义。[#87430](https://github.com/ClickHouse/ClickHouse/pull/87430) ([Sergei Trifonov](https://github.com/serxa))。 -* 添加新的表设置项 `min_level_for_wide_part`,用于指定将分片创建为宽分片的最小层级。 [#88179](https://github.com/ClickHouse/ClickHouse/pull/88179) ([Christoph Wurm](https://github.com/cwurm))。 -* 在 Keeper 客户端中添加 `cp`-`cpr` 和 `mv`-`mvr` 命令的递归版本。[#88570](https://github.com/ClickHouse/ClickHouse/pull/88570) ([Mikhail Artemenko](https://github.com/Michicosun))。 -* 添加了会话级设置,用于指定在插入时不进行物化的 skip 索引列表(`exclude_materialize_skip_indexes_on_insert`)。添加了 MergeTree 表设置,用于指定在合并期间不进行物化的 skip 索引列表(`exclude_materialize_skip_indexes_on_merge`)。[#87252](https://github.com/ClickHouse/ClickHouse/pull/87252)([George Larionov](https://github.com/george-larionov))。 +* 当启用 `use_variant_as_common_type` 时,UNION 如有需要会将类型统一为 `Variant`。修复了 [#82772](https://github.com/ClickHouse/ClickHouse/issues/82772)。[#83246](https://github.com/ClickHouse/ClickHouse/pull/83246)([Mithun p](https://github.com/mithunputhusseri))。 +* 在 SQL 中定义的角色现在可以授予在 `users.xml` 中定义的用户。[#88139](https://github.com/ClickHouse/ClickHouse/pull/88139) ([c-end](https://github.com/c-end))。 +* 将内部查询(由字典、可刷新物化视图等在内部执行的查询)记录到日志中,并在 `system.query_log` 中新增 `is_internal` 列。 [#83277](https://github.com/ClickHouse/ClickHouse/pull/83277) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). +* 交互模式下的 `clickhouse-client` 和 `clickhouse-local` 会在命令行中高亮显示与当前光标下标识符同名的所有标识符。 [#89689](https://github.com/ClickHouse/ClickHouse/pull/89689) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* 现在,输出格式相关设置不再影响查询缓存。此外,查询缓存会忽略 `http_response_headers` 设置。这样可以支持在 Web UI 中实现从缓存中下载查询结果等功能。[#89756](https://github.com/ClickHouse/ClickHouse/pull/89756)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 当启用了查询结果缓存时,HTTP 接口会提供 `Age` 和 `Expires` 头部。`Age` 头部的存在用于指示结果是否来自缓存,而 `Expires` 头部则会在首次写入时设置。引入新的 profile events:`QueryCacheAgeSeconds`、`QueryCacheReadRows`、`QueryCacheReadBytes`、`QueryCacheWrittenRows`、`QueryCacheWrittenBytes`。[#89759](https://github.com/ClickHouse/ClickHouse/pull/89759) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 在启用 `disable_insertion_and_mutation` 时,允许向远程表和数据湖表插入数据(这意味着 ClickHouse Cloud 中的只读仓库)。[#88549](https://github.com/ClickHouse/ClickHouse/pull/88549) ([Alexander Tokmakov](https://github.com/tavplubix)). +* 新增查询语句 `SYSTEM DROP TEXT INDEX CACHES`。 [#90287](https://github.com/ClickHouse/ClickHouse/pull/90287) ([Anton Popov](https://github.com/CurtizJ)). +* 默认启用 `enable_shared_storage_snapshot_in_query`,以获得更好的一致性保证。预计不会有任何负面影响。[#82634](https://github.com/ClickHouse/ClickHouse/pull/82634) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* 新增了 `send_profile_events` 设置,使客户端在未使用 profile events 时可以减少网络流量。[#89588](https://github.com/ClickHouse/ClickHouse/pull/89588) ([Kaviraj Kanagaraj](https://github.com/kavirajk))。 +* 支持在单个查询级别禁用邻近分段的后台下载。修复 [#89524](https://github.com/ClickHouse/ClickHouse/issues/89524)。[#89668](https://github.com/ClickHouse/ClickHouse/pull/89668)([tanner-bruce](https://github.com/tanner-bruce))。 +* 当复制 MergeTree 表中存在损坏磁盘时,允许执行 `FETCH PARTITION`。 [#58663](https://github.com/ClickHouse/ClickHouse/pull/58663) ([Duc Canh Le](https://github.com/canhld94)). +* 修复在 MySQL 数据库引擎中获取 MySQL 表结构时的未捕获异常。[#69358](https://github.com/ClickHouse/ClickHouse/pull/69358)([Duc Canh Le](https://github.com/canhld94))。 +* 现在所有 DDL `ON CLUSTER` 查询都会在原始发起查询的用户上下文中执行,以改进访问权限校验。[#71334](https://github.com/ClickHouse/ClickHouse/pull/71334) ([pufit](https://github.com/pufit)). +* 在 `Parquet` 中新增对 `UUID` 的支持,当其以逻辑类型为 `UUID` 的 `FixedString(16)` 形式表示时。[#74484](https://github.com/ClickHouse/ClickHouse/pull/74484) ([alekseev-maksim](https://github.com/alekseev-maksim))。 +* 默认在非服务器端二进制文件中禁用 ThreadFuzzer。 [#89115](https://github.com/ClickHouse/ClickHouse/pull/89115) ([Raúl Marín](https://github.com/Algunenano)). +* 通过推迟其物化,使相关子查询的输入子计划能够看到查询计划优化。属于 [#79890](https://github.com/ClickHouse/ClickHouse/issues/79890) 的一部分。[#85455](https://github.com/ClickHouse/ClickHouse/pull/85455)([Dmitry Novik](https://github.com/novikd))。 +* 在 clickhouse-client 中,对于包含 `SELECT` 的 `CREATE OR REPLACE TABLE` 查询,你可以看到进度条、日志和性能统计。即使 `SELECT` 非常耗时,该查询也不会再导致超时。解决了 [#38416](https://github.com/ClickHouse/ClickHouse/issues/38416)。[#87247](https://github.com/ClickHouse/ClickHouse/pull/87247)([Diskein](https://github.com/Diskein))。 +* 为哈希函数添加对 `JSON` 和 `Dynamic` 类型的支持。解决了 [#87734](https://github.com/ClickHouse/ClickHouse/issues/87734)。[#87791](https://github.com/ClickHouse/ClickHouse/pull/87791)([Pavel Kruglov](https://github.com/Avogar))。 +* 补全 ArrowFlight 服务器中缺失的部分。[#88013](https://github.com/ClickHouse/ClickHouse/pull/88013) ([Vitaly Baranov](https://github.com/vitlibar))。 +* 为 server 和 keeper 添加多种直方图指标,用于观测 keeper 请求各个执行阶段的耗时。将向 server 添加以下指标:`keeper_client_queue_duration_milliseconds`、`keeper_client_send_duration_milliseconds`、`keeper_client_roundtrip_duration_milliseconds`。将向 keeper 添加以下指标:`keeper_server_preprocess_request_duration_milliseconds`、`keeper_server_process_request_duration_milliseconds`、`keeper_server_queue_duration_milliseconds`、`keeper_server_send_duration_milliseconds`。[#88158](https://github.com/ClickHouse/ClickHouse/pull/88158)([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 +* 在 `EXPLAIN` 查询中新增 `input_headers` 选项,用于在各个步骤中附加输入头部信息。 [#88311](https://github.com/ClickHouse/ClickHouse/pull/88311) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). +* 新增 profile events,用于统计被限流器延迟的 S3 和 AzureBlobStorage 请求数量。修复了磁盘相关与非磁盘相关的 ThrottlerCount profile events 之间的不一致问题。现在 AzureBlobStorage 的 HTTP DELETE 请求不再被限流。[#88535](https://github.com/ClickHouse/ClickHouse/pull/88535) ([Sergei Trifonov](https://github.com/serxa)). +* 为表级统计信息增加缓存功能,新增两个设置:MergeTree 表引擎设置 `refresh_statistics_interval` 表示刷新统计信息缓存的时间间隔,0 表示不创建缓存。会话级设置 `use_statistics_cache` 表示在查询中是否使用表级统计信息。有时我们希望得到更精确的统计,就会选择不使用该缓存。[#88670](https://github.com/ClickHouse/ClickHouse/pull/88670) ([Han Fei](https://github.com/hanfei1991))。 +* 修复了 `Array` 和 `Map` 的二进制反序列化,在验证大小限制时改为使用 `max_binary_array_size` 设置,而不是 `max_binary_string_size`。这样可以确保在读取 `RowBinary` 格式时应用正确的限制。[#88744](https://github.com/ClickHouse/ClickHouse/pull/88744)([Raufs Dunamalijevs](https://github.com/rienath))。 +* 引入了一个 `LockGuardWithStopWatch` 类,并在后台线程池中用于执行合并操作。当某个互斥量被持有超过一秒,或某个线程在一秒内一直尝试获取该互斥量时,会打印一条警告信息。将 `MergeMutateSelectedEntry` 析构函数中的开销较大的代码移动到了 `finalize` 方法中,以避免在 `MergeTreeBackground` 执行器中持有锁的时间过长。 [#88898](https://github.com/ClickHouse/ClickHouse/pull/88898) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). +* 当在 endpoint 中未指定 region 时,自动启用对 S3 使用需显式开通的 AWS 区域。参考文档:[opt-in AWS regions](https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html)。[#88930](https://github.com/ClickHouse/ClickHouse/pull/88930)([Andrey Zvonov](https://github.com/zvonand))。 +* 当分页器正在运行时,用户现在可以在 clickhouse-client 中按 Ctrl-C 取消查询。解决了 [#80778](https://github.com/ClickHouse/ClickHouse/issues/80778)。[#88935](https://github.com/ClickHouse/ClickHouse/pull/88935)([Grigorii](https://github.com/GSokol))。 +* Web UI 即使在数值为负时也会在表格中显示条形。因此,它可以显示正负两侧使用不同颜色条形的双向条形图。 [#89016](https://github.com/ClickHouse/ClickHouse/pull/89016) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 禁用 `shared_merge_tree_create_per_replica_metadata_nodes`,以减少 `SharedMergeTree` 在 Keeper 中存储的元数据数量。 [#89036](https://github.com/ClickHouse/ClickHouse/pull/89036) ([Alexander Tokmakov](https://github.com/tavplubix))。 +* 使 `S3Queue` 遵守服务器设置 `disable_insertion_and_mutation`。[#89048](https://github.com/ClickHouse/ClickHouse/pull/89048)([Raúl Marín](https://github.com/Algunenano))。 +* 将 25.6 版本中的默认 `s3_retry_attempts` 设置为 500,以确保在发生 S3 重新分区且 S3 持续超过 10 分钟返回 SlowDown 错误响应时,备份仍然可以成功完成。[#89051](https://github.com/ClickHouse/ClickHouse/pull/89051) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 +* 现在可以使用 `kafka_compression_codec` 和 `kafka_compression_level` 设置来为两个 Kafka 引擎中的 Kafka 生产者指定压缩算法。[#89073](https://github.com/ClickHouse/ClickHouse/pull/89073)([János Benjamin Antal](https://github.com/antaljanosbenjamin))。 +* 在 `system.columns` 中新增一列 `statistics`,用于表示在该表上构建的统计信息类型。如果某种统计信息是自动创建的,其后缀将显示为 (auto)。[#89086](https://github.com/ClickHouse/ClickHouse/pull/89086) ([Han Fei](https://github.com/hanfei1991))。 +* 当向 `*Cluster` 表函数传递通用展开(generic expansion)而非集群名称时,改进错误提示。 [#89093](https://github.com/ClickHouse/ClickHouse/pull/89093) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* YTsaurus:允许将 `replicated_table` 用作数据源。[#89107](https://github.com/ClickHouse/ClickHouse/pull/89107) ([MikhailBurdukov](https://github.com/MikhailBurdukov))。 +* 在 CLI 中,以空白字符开头的查询将不再保存到历史记录中。[#89116](https://github.com/ClickHouse/ClickHouse/pull/89116)([Konstantin Bogdanov](https://github.com/thevar1able))。 +* 支持将字符串数组作为 `hasAnyTokens` 或 `hasAllTokens` 函数的输入。[#89124](https://github.com/ClickHouse/ClickHouse/pull/89124) ([Elmi Ahmadov](https://github.com/ahmadov)). +* 修改 plain-rewritable 磁盘在内存中存放元数据的方式,修复了大量与目录嵌套等相关的错误。[#89125](https://github.com/ClickHouse/ClickHouse/pull/89125) ([Mikhail Artemenko](https://github.com/Michicosun))。 +* 在查询 Iceberg 表时,`IN` 表达式中的子查询会在分区裁剪分析之前被正确地预计算。 [#89177](https://github.com/ClickHouse/ClickHouse/pull/89177) ([Daniil Ivanik](https://github.com/divanik)). +* 默认启用 `create_table_empty_primary_key_by_default`。这有利于提升易用性。[#89333](https://github.com/ClickHouse/ClickHouse/pull/89333) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 修复 `Backup` 数据库引擎中的错误实现,避免在执行 `SHOW CREATE DATABASE` 或从 `system.databases` 查询 `engine_full` 时生成无效查询。修复 [#89477](https://github.com/ClickHouse/ClickHouse/issues/89477)。[#89341](https://github.com/ClickHouse/ClickHouse/pull/89341)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 在早期版本中,当在 CREATE TABLE 查询中未指定表引擎时,设置 `create_table_empty_primary_key_by_default` 不会生效。 [#89342](https://github.com/ClickHouse/ClickHouse/pull/89342) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 将 `chdig` 更新至 v25.11.1 —— 包含对日志的重大改进以及其他多项增强([25.11 版本说明](https://github.com/azat/chdig/releases/tag/v25.11.1))。[#89957](https://github.com/ClickHouse/ClickHouse/pull/89957)([Azat Khuzhin](https://github.com/azat))。 ([25.10 版本说明](https://github.com/azat/chdig/releases/tag/v25.10.1))。[#89452](https://github.com/ClickHouse/ClickHouse/pull/89452)([Azat Khuzhin](https://github.com/azat))。 +* 将 Web UI 中查询文本区域的调整控件改为全宽,使其使用起来稍微更方便一些。另外,此前在 iPad 上的 Safari 中无法使用浏览器原生的调整控件,在此变更之后,至少可以通过拖动文本区域的底部来调整大小。[#89457](https://github.com/ClickHouse/ClickHouse/pull/89457)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 改进了哈希 JOIN 结果生成过程中的内存跟踪。之前,在生成 JOIN 结果时的临时内存分配没有被正确跟踪,这可能会导致内存超限。[#89560](https://github.com/ClickHouse/ClickHouse/pull/89560)([Azat Khuzhin](https://github.com/azat))。 +* 异步服务器日志:提前刷新并增大默认队列容量。[#89597](https://github.com/ClickHouse/ClickHouse/pull/89597) ([Raúl Marín](https://github.com/Algunenano)). +* 修复 `system.asynchronous_metrics` 中错误的 `FilesystemCacheBytes`(以及其他相关指标)。仅对文件系统缓存执行一次 `SYSTEM` 查询。为缓存提供一个指向 `system.filesystem_caches` 中相同路径的原子视图。 [#89640](https://github.com/ClickHouse/ClickHouse/pull/89640) ([Azat Khuzhin](https://github.com/azat)). +* 对 `system.view_refreshes` 中部分列的描述进行了澄清。[#89701](https://github.com/ClickHouse/ClickHouse/pull/89701) ([Tuan Pham Anh](https://github.com/tuanpach))。 +* 与 STS 端点交互时缓存 S3 凭证,以便可在不同的函数调用中复用。可使用 `s3_credentials_provider_max_cache_size` 控制缓存凭证的数量。[#89734](https://github.com/ClickHouse/ClickHouse/pull/89734) ([Antonio Andelic](https://github.com/antonio2368))。 +* 修复在其下方存在多个表达式步骤时的运行时过滤器下推问题。[#89741](https://github.com/ClickHouse/ClickHouse/pull/89741) ([Alexander Gololobov](https://github.com/davenger)). +* 如果系统内存低于 5GB,则默认不要对可执行文件使用 mlock。 [#89751](https://github.com/ClickHouse/ClickHouse/pull/89751) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Web UI 中的类型提示信息不再溢出到表头区域。同时修复了工具提示的显示——它们不再被表头遮挡。 [#89753](https://github.com/ClickHouse/ClickHouse/pull/89753) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* 在 Web UI 中显示表的属性。点击行数或字节数会打开一条从 `system.tables` 生成的查询。点击表引擎会打开 `SHOW TABLES`。[#89771](https://github.com/ClickHouse/ClickHouse/pull/89771) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 为使用不支持追加写入的磁盘的表增加对 `non_replicated_deduplication_window` 的支持。修复 [#87281](https://github.com/ClickHouse/ClickHouse/issues/87281)。[#89796](https://github.com/ClickHouse/ClickHouse/pull/89796)([Tuan Pham Anh](https://github.com/tuanpach))。 +* 在命令 `SYSTEM FLUSH ASYNC INSERT QUEUE` 中新增了可以指定要刷新的表列表的功能。[#89915](https://github.com/ClickHouse/ClickHouse/pull/89915) ([Sema Checherinda](https://github.com/CheSema))。 +* 在 `system.part_log` 中存储去重块的 ID。[#89928](https://github.com/ClickHouse/ClickHouse/pull/89928) ([Sema Checherinda](https://github.com/CheSema))。 +* 将文件系统缓存设置 `keep_free_space_remove_batch` 的默认值从 10 更改为 100,因为这样更为优化。 [#90030](https://github.com/ClickHouse/ClickHouse/pull/90030) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 引入 TTL DROP 合并类型,并在此类合并后不再更新下一次删除 TTL 合并调度。 [#90077](https://github.com/ClickHouse/ClickHouse/pull/90077) ([Mikhail Artemenko](https://github.com/Michicosun)). +* 在清理 S3Queue 时,对 RemoveRecursive Keeper 请求使用更低的节点数上限。 [#90201](https://github.com/ClickHouse/ClickHouse/pull/90201) ([Antonio Andelic](https://github.com/antonio2368)). +* 使 `SYSTEM FLUSH LOGS` 查询即使在日志为空时也会等待表创建完成。 [#89408](https://github.com/ClickHouse/ClickHouse/pull/89408) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). +* 修复在分布式合并聚合中涉及多个远程分片,或存在子查询 IN 时 `rows_before_limit_at_least` 值不正确的问题。修复了 [#63280](https://github.com/ClickHouse/ClickHouse/issues/63280)。[#63511](https://github.com/ClickHouse/ClickHouse/pull/63511)([Amos Bird](https://github.com/amosbird))。 +* 修复了在执行 `INSERT INTO ... SELECT` 查询后错误显示 `0 rows in set` 的问题,并关闭了 [#47800](https://github.com/ClickHouse/ClickHouse/issues/47800)。[#79462](https://github.com/ClickHouse/ClickHouse/pull/79462)([Engel Danila](https://github.com/aaaengel))。 + +#### 缺陷修复(官方稳定版中对用户可见的异常行为) + +* 修复 `multiIf` 在使用常量参数时的短路求值问题。解决 [#72714](https://github.com/ClickHouse/ClickHouse/issues/72714)。[#84546](https://github.com/ClickHouse/ClickHouse/pull/84546)([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy))。 +* 修复了在从带有子查询约束的表中查询时出现的逻辑错误。解决了 [#84190](https://github.com/ClickHouse/ClickHouse/issues/84190)。[#85575](https://github.com/ClickHouse/ClickHouse/pull/85575)([Pervakov Grigorii](https://github.com/GrigoryPervakov))。 +* 修复了在使用包含问号的 URI 执行特殊查询时出现的错误。 [#85663](https://github.com/ClickHouse/ClickHouse/pull/85663) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* 修复了 `EXPLAIN indexes = 1` 输出中有时会缺失某些列的问题。解决了 [#86696](https://github.com/ClickHouse/ClickHouse/issues/86696)。[#87083](https://github.com/ClickHouse/ClickHouse/pull/87083)([Michael Kolupaev](https://github.com/al13n321))。 +* 修复可能出现的 `Cannot add subcolumn with parallel replicas` 错误。关闭 [#84888](https://github.com/ClickHouse/ClickHouse/issues/84888)。[#87514](https://github.com/ClickHouse/ClickHouse/pull/87514)([Pavel Kruglov](https://github.com/Avogar))。 +* 在 Parquet writer 中,以正确的格式输出 `created_by` 字符串,例如使用 `ClickHouse version 25.10.1 (build 5b1dfb14925db8901a4e9202cd5d63c11ecfbb9f)`,而不是 `ClickHouse v25.9.1.1-testing`。修复 Parquet reader 与由旧版 parquet-mr 写出的不规范文件之间的兼容性问题。[#87735](https://github.com/ClickHouse/ClickHouse/pull/87735) ([Michael Kolupaev](https://github.com/al13n321))。 +* 修复 `cramersV`、`cramersVBiasCorrected`、`theilsU` 和 `contingency` 中 φ² 计算错误导致结果不正确的问题。[#87831](https://github.com/ClickHouse/ClickHouse/pull/87831)([Nihal Z. Miaji](https://github.com/nihalzp))。 +* 修复 JSON 中读取同时包含浮点数和布尔值的混合数组时的问题。之前插入此类数据会导致异常。[#88008](https://github.com/ClickHouse/ClickHouse/pull/88008)([Pavel Kruglov](https://github.com/Avogar))。 +* 在 `TCPHandler` 中为 `QueryState` 使用 `shared_ptr`,以便在 `setProgressCallback`、`setFileProgressCallback` 和 `setBlockMarshallingCallback` 中检测状态是否无效。 [#88201](https://github.com/ClickHouse/ClickHouse/pull/88201) ([Tuan Pham Anh](https://github.com/tuanpach)). +* 修复在 `query_plan_optimize_join_order_limit` > 1 时对 CROSS JOIN 重排的逻辑错误,关闭 [#89409](https://github.com/ClickHouse/ClickHouse/issues/89409)。[#88286](https://github.com/ClickHouse/ClickHouse/pull/88286)([Vladimir Cherkasov](https://github.com/vdimir))。 +* 修复 [#88426](https://github.com/ClickHouse/ClickHouse/issues/88426):1. 禁止在 Alias 中显式定义列,列将自动从目标表中加载。这确保别名始终与目标表的模式保持一致。2. 通过 IStorage 代理更多方法。[#88552](https://github.com/ClickHouse/ClickHouse/pull/88552)([Kai Zhu](https://github.com/nauu))。 +* 在恢复后,Replicated 数据库的副本可能会长时间卡住,并不断打印类似 `Failed to marked query-0004647339 as finished (finished=No node, synced=No node)` 的消息,此问题已修复。[#88671](https://github.com/ClickHouse/ClickHouse/pull/88671) ([Alexander Tokmakov](https://github.com/tavplubix))。 +* 修复新分析器在处理子查询时可能出现的“Context has expired”问题。 [#88694](https://github.com/ClickHouse/ClickHouse/pull/88694) ([Azat Khuzhin](https://github.com/azat)). +* 修复了在将 input_format_parquet_local_file_min_bytes_for_seek 设置为 0 时,Parquet 读取器发生段错误的问题。解决了 [#78456](https://github.com/ClickHouse/ClickHouse/issues/78456)。[#88784](https://github.com/ClickHouse/ClickHouse/pull/88784)([Animesh](https://github.com/anibilthare))。 +* 修复当主键(PK)以逆序排列时 `min(PK)`/`max(PK)` 结果不正确的问题。此修复对应 [#83619](https://github.com/ClickHouse/ClickHouse/issues/83619)。[#88796](https://github.com/ClickHouse/ClickHouse/pull/88796)([Amos Bird](https://github.com/amosbird))。 +* 修复在对内部表执行 `DROP` 时,`max_table_size_to_drop` 和 `max_partition_size_to_drop` 设置的大小限制未正确生效的问题。[#88812](https://github.com/ClickHouse/ClickHouse/pull/88812) ([Nikolay Degterinsky](https://github.com/evillique))。 +* 修复了在仅以单个参数调用时 `top_k` 未遵循 threshold 参数的问题。关闭 [#88757](https://github.com/ClickHouse/ClickHouse/issues/88757)。[#88867](https://github.com/ClickHouse/ClickHouse/pull/88867)([Manuel](https://github.com/raimannma))。 +* 现在,需要使用 SSL 连接的 ArrowFlight 端点数据源(例如位于 AWS ALB 后面的端点)现已能够正确请求特定数据集。[#88868](https://github.com/ClickHouse/ClickHouse/pull/88868) ([alex-shchetkov](https://github.com/alex-shchetkov))。 +* 修复对通过 ALTER 添加的未物化 Nested(Tuple(...)) 的处理逻辑。修复了 [#83133](https://github.com/ClickHouse/ClickHouse/issues/83133)。[#88879](https://github.com/ClickHouse/ClickHouse/pull/88879)([Azat Khuzhin](https://github.com/azat))。 +* 修复函数 `reverseUTF8` 中的错误。在之前的版本中,该函数错误地反转了长度为 4 的 UTF-8 码点的字节顺序。本次修复关闭了 [#88913](https://github.com/ClickHouse/ClickHouse/issues/88913)。[#88914](https://github.com/ClickHouse/ClickHouse/pull/88914)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 修复 icebergS3Cluster 协议。iceberg 集群函数现已支持模式演进、位置删除和等值删除。解决 [#88287](https://github.com/ClickHouse/ClickHouse/issues/88287)。[#88919](https://github.com/ClickHouse/ClickHouse/pull/88919)([Yang Jiang](https://github.com/Ted-Jiang))。 +* 对在分布式表上使用并行副本的查询禁用 `parallel_replicas_support_projection`。修复 [#88899](https://github.com/ClickHouse/ClickHouse/issues/88899)。[#88922](https://github.com/ClickHouse/ClickHouse/pull/88922)([zoomxi](https://github.com/zoomxi))。 +* 在内部 `cast` 操作中传播上下文。修复了多个未能传播 `cast` 设置的问题。已关闭 [#88873](https://github.com/ClickHouse/ClickHouse/issues/88873)。已关闭 [#78025](https://github.com/ClickHouse/ClickHouse/issues/78025)。[#88929](https://github.com/ClickHouse/ClickHouse/pull/88929)([Manuel](https://github.com/raimannma))。 +* 修复在 `file()` 函数中通过 glob 模式获取文件格式的问题。解决了 [#88920](https://github.com/ClickHouse/ClickHouse/issues/88920)。[#88947](https://github.com/ClickHouse/ClickHouse/pull/88947)([Vitaly Baranov](https://github.com/vitlibar))。 +* 在使用 SQL SECURITY DEFINER 创建视图时,不再检查对 `SET DEFINER :definer` 的访问权限。[#88968](https://github.com/ClickHouse/ClickHouse/pull/88968) ([pufit](https://github.com/pufit))。 +* 修复了 `L2DistanceTransposed(vec1, vec2, p)` 中的 `LOGICAL_ERROR`,该错误出现在针对部分 `QBit` 读取的优化中:当 `p` 为 `Nullable` 时,错误地从返回类型中移除了 `Nullable`。[#88974](https://github.com/ClickHouse/ClickHouse/pull/88974) ([Raufs Dunamalijevs](https://github.com/rienath))。 +* 修复在未知目录类型时发生的崩溃。解决了 [#88819](https://github.com/ClickHouse/ClickHouse/issues/88819)。[#88987](https://github.com/ClickHouse/ClickHouse/pull/88987)([scanhex12](https://github.com/scanhex12))。 +* 已关闭 [#88081](https://github.com/ClickHouse/ClickHouse/issues/88081)。[#88988](https://github.com/ClickHouse/ClickHouse/pull/88988)([scanhex12](https://github.com/scanhex12))。 +* 修复了在分析 skipping 索引时出现的性能下降问题。[#89004](https://github.com/ClickHouse/ClickHouse/pull/89004) ([Anton Popov](https://github.com/CurtizJ)). +* 修复使用具有不存在角色的用户执行 clusterAllReplicas 时出现的 ACCESS_ENTITY_NOT_FOUND 错误。解决了 [#87670](https://github.com/ClickHouse/ClickHouse/issues/87670)。[#89068](https://github.com/ClickHouse/ClickHouse/pull/89068) ([pufit](https://github.com/pufit))。 +* 通过 `CHECK` 约束修复稀疏列的处理逻辑。Closes [#88637](https://github.com/ClickHouse/ClickHouse/issues/88637)。[#89076](https://github.com/ClickHouse/ClickHouse/pull/89076) ([Eduard Karacharov](https://github.com/korowa))。 +* 修复在 MergeTreeReaderTextIndex 中填充虚拟列时行数统计错误,导致触发 LOGICAL_ERROR 并引发崩溃的问题。[#89095](https://github.com/ClickHouse/ClickHouse/pull/89095) ([Peng Jian](https://github.com/fastio)). +* 在合并准备阶段发生异常时,防止 TTL 合并计数器泄漏。解决 [#89019](https://github.com/ClickHouse/ClickHouse/issues/89019)。[#89127](https://github.com/ClickHouse/ClickHouse/pull/89127)([save-my-heart](https://github.com/save-my-heart))。 +* 修正 base32/base58 编码和解码操作所需缓冲区大小的计算。[#89133](https://github.com/ClickHouse/ClickHouse/pull/89133)([Antonio Andelic](https://github.com/antonio2368))。 +* 修复 Distributed 中由于关闭过程与后台 INSERT 操作之间的竞争条件导致的释放后再次使用(use-after-free)问题。解决了 [#88640](https://github.com/ClickHouse/ClickHouse/issues/88640)。[#89136](https://github.com/ClickHouse/ClickHouse/pull/89136)([Azat Khuzhin](https://github.com/azat))。 +* 在解析 Parquet 时避免由可变异常引起的潜在数据竞态问题。修复 [#88385](https://github.com/ClickHouse/ClickHouse/issues/88385)。[#89174](https://github.com/ClickHouse/ClickHouse/pull/89174)([Azat Khuzhin](https://github.com/azat))。 +* 可刷新物化视图:修复了在刷新期间如果源表被完全删除时会导致的罕见服务器崩溃问题。 [#89203](https://github.com/ClickHouse/ClickHouse/pull/89203) ([Michael Kolupaev](https://github.com/al13n321)). +* 在通过 HTTP 接口传输的压缩流中途发送错误时刷新缓冲区。 [#89256](https://github.com/ClickHouse/ClickHouse/pull/89256) ([Alexander Tokmakov](https://github.com/tavplubix)). +* 防止查询掩码规则被错误地应用到 DDL 语句上。[#89272](https://github.com/ClickHouse/ClickHouse/pull/89272) ([MikhailBurdukov](https://github.com/MikhailBurdukov))。 +* 修复了在 MergeTreeReaderTextIndex 中填充虚拟列时行数统计错误导致触发 LOGICAL_ERROR 崩溃的问题。重新打开 [#89095](https://github.com/ClickHouse/ClickHouse/issues/89095)。[#89303](https://github.com/ClickHouse/ClickHouse/pull/89303)([Jimmy Aguilar Mena](https://github.com/Ergus))。 +* 修复 Statistics 的 countmin 对 LowCardinality(Nullable(String)) 的 estimate 数据类型不支持而导致的 LOGICAL_ERROR。 [#89343](https://github.com/ClickHouse/ClickHouse/pull/89343) ([Han Fei](https://github.com/hanfei1991)). +* 在 IN 函数中,如果主键列的类型与 IN 函数右侧的列类型不同,可能会发生崩溃或出现未定义行为。示例:SELECT string_column, int_column FROM test_table WHERE (string_column, int_column) IN (SELECT '5', 'not a number')。当选出的行很多且其中包含类型不兼容的行时会出现该问题。[#89367](https://github.com/ClickHouse/ClickHouse/pull/89367) ([Ilya Golshtein](https://github.com/ilejn)). +* 修复 `countIf(*)` 的参数被截断的问题。关闭 [#89372](https://github.com/ClickHouse/ClickHouse/issues/89372)。[#89373](https://github.com/ClickHouse/ClickHouse/pull/89373)([Manuel](https://github.com/raimannma))。 +* 避免在变更操作统计信息中丢失未压缩的校验和。[#89381](https://github.com/ClickHouse/ClickHouse/pull/89381) ([Azat Khuzhin](https://github.com/azat)). +* 修复 `L2DistanceTransposed(vec1, vec2, p)` 中的 `LOGICAL_ERROR`,此前针对部分 QBit 读取的优化在 `p` 为 `LowCardinality(Nullable(T))` 时错误地从返回类型中移除了 `Nullable`。解决了 [#88362](https://github.com/ClickHouse/ClickHouse/issues/88362)。[#89397](https://github.com/ClickHouse/ClickHouse/pull/89397)([Raufs Dunamalijevs](https://github.com/rienath))。 +* 修复加载由较早版本的 ClickHouse 写入、在元组本身上采用不正确稀疏序列化的表时的问题。 [#89405](https://github.com/ClickHouse/ClickHouse/pull/89405) ([Azat Khuzhin](https://github.com/azat)). +* 修复了在使用 `deduplicate_merge_projection_mode='ignore'` 时,对被 TTL 清空但仍包含非空投影的 part 的合并处理不正确的问题。解决了 [#89430](https://github.com/ClickHouse/ClickHouse/issues/89430)。[#89458](https://github.com/ClickHouse/ClickHouse/pull/89458)([Amos Bird](https://github.com/amosbird))。 +* 修复在存在重复列时 `full_sorting_merge` 连接中的逻辑错误。解决了 [#86957](https://github.com/ClickHouse/ClickHouse/issues/86957)。[#89495](https://github.com/ClickHouse/ClickHouse/pull/89495)([Vladimir Cherkasov](https://github.com/vdimir))。 +* 修复 Keeper 在启动时读取变更日志的逻辑,以处理在轮换过程中某个变更日志未被正确重命名的情况。[#89496](https://github.com/ClickHouse/ClickHouse/pull/89496) ([Antonio Andelic](https://github.com/antonio2368))。 +* 修复在使用 OR 条件且右表键唯一时产生的错误 JOIN 结果。解决 [#89391](https://github.com/ClickHouse/ClickHouse/issues/89391)。[#89512](https://github.com/ClickHouse/ClickHouse/pull/89512)([Vladimir Cherkasov](https://github.com/vdimir))。 +* 修复在使用 analyzer 且 PK IN (subquery) (v2) 时可能出现的 “Context has expired” 错误。修复 [#89433](https://github.com/ClickHouse/ClickHouse/issues/89433)。[#89527](https://github.com/ClickHouse/ClickHouse/pull/89527)([Azat Khuzhin](https://github.com/azat))。 +* 修复 MaterializedPostgreSQL 在包含大写列名的表上的复制问题。解决了 [#72363](https://github.com/ClickHouse/ClickHouse/issues/72363)。[#89530](https://github.com/ClickHouse/ClickHouse/pull/89530)([Danylo Osipchuk](https://github.com/Lenivaya))。 +* 修复当聚合函数的状态中包含 `LowCardinality(String)` 列的序列化值时可能发生的崩溃。[#89550](https://github.com/ClickHouse/ClickHouse/pull/89550) ([Pavel Kruglov](https://github.com/Avogar))。 +* 修复在启用 `enable_lazy_columns_replication` 设置时,在 JOIN 右侧使用 `ARRAY JOIN` 会导致崩溃的问题。[#89551](https://github.com/ClickHouse/ClickHouse/pull/89551) ([Pavel Kruglov](https://github.com/Avogar))。 +* 修复 `query_plan_convert_join_to_in` 的逻辑错误。解决了 [#89066](https://github.com/ClickHouse/ClickHouse/issues/89066)。[#89554](https://github.com/ClickHouse/ClickHouse/pull/89554)([Vladimir Cherkasov](https://github.com/vdimir))。 +* 修复了统计估算器在尝试估算包含列与常量类型不匹配且无法转换的条件时抛出的异常。 [#89596](https://github.com/ClickHouse/ClickHouse/pull/89596) ([Han Fei](https://github.com/hanfei1991)). +* 仅针对当前受支持的连接算法(即哈希连接)添加运行时过滤器。只有当连接算法先完整读取右侧,再读取左侧时,才能构建过滤器,但例如 FullSortingMergeJoin 会同时读取两侧。修复 [#89220](https://github.com/ClickHouse/ClickHouse/issues/89220)。[#89652](https://github.com/ClickHouse/ClickHouse/pull/89652)([Alexander Gololobov](https://github.com/davenger))。 +* 修复在使用 `sparseGrams` 分词器时并发执行 `hasAnyTokens`、`hasAllTokens` 和 `tokens` 函数所导致的问题。解决了 [#89605](https://github.com/ClickHouse/ClickHouse/issues/89605)。[#89665](https://github.com/ClickHouse/ClickHouse/pull/89665) ([Elmi Ahmadov](https://github.com/ahmadov))。 +* 修复了在某些情况下使用 JOIN 运行时过滤器时出现的逻辑错误/崩溃问题。修复了 [#89062](https://github.com/ClickHouse/ClickHouse/issues/89062)。[#89666](https://github.com/ClickHouse/ClickHouse/pull/89666)([Alexander Gololobov](https://github.com/davenger))。 +* 修复在启用 `enable_lazy_columns_replication` 时,对 Map 列执行 ARRAY JOIN 时可能出现的逻辑错误。修复 [#89705](https://github.com/ClickHouse/ClickHouse/issues/89705)。[#89717](https://github.com/ClickHouse/ClickHouse/pull/89717)([Pavel Kruglov](https://github.com/Avogar))。 +* 在取消远程查询时,避免在断开连接后继续从远程服务器读取而导致崩溃。修复了 [#89468](https://github.com/ClickHouse/ClickHouse/issues/89468)。[#89740](https://github.com/ClickHouse/ClickHouse/pull/89740)([Azat Khuzhin](https://github.com/azat))。 +* 修复投影索引读取路径中的竞态条件。解决 [#89497](https://github.com/ClickHouse/ClickHouse/issues/89497)。[#89762](https://github.com/ClickHouse/ClickHouse/pull/89762)([Peng Jian](https://github.com/fastio))。 +* 修复在读取 projection 索引时可能导致竞态条件的 bug。解决了 [#89497](https://github.com/ClickHouse/ClickHouse/issues/89497)。[#89775](https://github.com/ClickHouse/ClickHouse/pull/89775)([Amos Bird](https://github.com/amosbird))。 +* 修复了对无分区表使用 Paimon 表函数时的处理逻辑。解决了 [#89690](https://github.com/ClickHouse/ClickHouse/issues/89690)。[#89793](https://github.com/ClickHouse/ClickHouse/pull/89793)([JIaQi](https://github.com/JiaQiTang98))。 +* 修复在高级 JSON 共享数据序列化中读取路径及其子列时可能出现的逻辑错误。解决 [#89805](https://github.com/ClickHouse/ClickHouse/issues/89805)。[#89819](https://github.com/ClickHouse/ClickHouse/pull/89819)([Pavel Kruglov](https://github.com/Avogar))。 +* 修复了数据类型在二进制反序列化过程中的潜在栈溢出问题。关闭了 [#88710](https://github.com/ClickHouse/ClickHouse/issues/88710)。[#89822](https://github.com/ClickHouse/ClickHouse/pull/89822)([Pavel Kruglov](https://github.com/Avogar))。 +* 修复 `IN` 函数在处理空元组时的逻辑错误。关闭 [#88343](https://github.com/ClickHouse/ClickHouse/issues/88343)。[#89850](https://github.com/ClickHouse/ClickHouse/pull/89850)([Nihal Z. Miaji](https://github.com/nihalzp))。 +* 在旧版解析器中,为了兼容性,无论 `optimize_injective_functions_in_group_by` 设置为何值,都移除 `GROUP BY` 中的单射函数。解决 [#89854](https://github.com/ClickHouse/ClickHouse/issues/89854)。[#89870](https://github.com/ClickHouse/ClickHouse/pull/89870)([Raufs Dunamalijevs](https://github.com/rienath))。 +* 如果合并因某些原因中断,例如触发了内存限制,`merge mutate background executor` 会在未加锁的情况下对合并任务调用 `cancel`,但在这种情况下,部分生成的结果分片不会被删除(因为它尚未完成,并且在该阶段不可见)。之后,合并任务会被销毁,从而触发结果分片的销毁。这样会回滚磁盘事务,并导致数据从 S3 中被删除。最终,这一垃圾清理过程是在持有 `merge mutate background executor` 锁的情况下执行的。 [#89875](https://github.com/ClickHouse/ClickHouse/pull/89875) ([Mikhail Artemenko](https://github.com/Michicosun))。 +* 修复了在 `reverse` 和 `CAST` 函数中处理空元组时的逻辑错误,并关闭了 [#89137](https://github.com/ClickHouse/ClickHouse/issues/89137)。[#89908](https://github.com/ClickHouse/ClickHouse/pull/89908)([Nihal Z. Miaji](https://github.com/nihalzp))。 +* 现在 ClickHouse 在默认情况下会在 `SHOW DATABASES` 查询中显示数据湖目录数据库。[#89914](https://github.com/ClickHouse/ClickHouse/pull/89914) ([alesapin](https://github.com/alesapin)). +* 修复在 GCS 上进行备份时使用原生复制的问题。由于客户端克隆实现不正确,GCS 原生复制总是失败,并降级为通过手动读写数据的次优方式。[#89923](https://github.com/ClickHouse/ClickHouse/pull/89923) ([Antonio Andelic](https://github.com/antonio2368))。 +* 修复 `base32Encode` 的缓冲区大小计算。对长度小于 5 的字符串列计算 `base32Encode` 时可能会导致崩溃。修复了 [#89911](https://github.com/ClickHouse/ClickHouse/issues/89911)。[#89929](https://github.com/ClickHouse/ClickHouse/pull/89929)([Antonio Andelic](https://github.com/antonio2368))。 +* 修复 `SHOW COLUMNS` 和 `SHOW FUNCTIONS` 查询中的错误转义。[#89942](https://github.com/ClickHouse/ClickHouse/pull/89942) ([alesapin](https://github.com/alesapin)). +* 修复 MongoDB 引擎中当用户名包含 '@' 字符时的 URL 验证问题。此前,由于编码不当,包含 '@' 的用户名会导致错误。[#89970](https://github.com/ClickHouse/ClickHouse/pull/89970) ([Kai Zhu](https://github.com/nauu))。 +* 已在 [#90592](https://github.com/ClickHouse/ClickHouse/issues/90592) 中回溯:修复在远程查询中,当在 `IN` 内部使用 `ARRAY JOIN` 且启用了 `enable_lazy_columns_replication` 设置时可能发生的崩溃问题。解决了 [#90361](https://github.com/ClickHouse/ClickHouse/issues/90361)。[#89997](https://github.com/ClickHouse/ClickHouse/pull/89997)([Pavel Kruglov](https://github.com/Avogar))。 +* 已在 [#90448](https://github.com/ClickHouse/ClickHouse/issues/90448) 中回溯移植:在某些情况下修复了从文本格式的字符串推断出错误 DateTime64 值的问题。解决了 [#89368](https://github.com/ClickHouse/ClickHouse/issues/89368)。[#90013](https://github.com/ClickHouse/ClickHouse/pull/90013)([Pavel Kruglov](https://github.com/Avogar))。 +* 修复在 `BSONEachRow` 和 `MsgPack` 中由空 tuple 列引起的逻辑错误。关闭 [#89814](https://github.com/ClickHouse/ClickHouse/issues/89814)。关闭 [#71536](https://github.com/ClickHouse/ClickHouse/issues/71536)。[#90018](https://github.com/ClickHouse/ClickHouse/pull/90018)([Nihal Z. Miaji](https://github.com/nihalzp))。 +* 已在 [#90457](https://github.com/ClickHouse/ClickHouse/issues/90457) 中回溯移植:在从聚合状态和其他来源反序列化数据时进行大小检查。[#90031](https://github.com/ClickHouse/ClickHouse/pull/90031)([Raúl Marín](https://github.com/Algunenano))。 +* 修复在包含重复列的 JOIN 中可能出现的 “Invalid number of rows in Chunk” 错误。解决了 [#89411](https://github.com/ClickHouse/ClickHouse/issues/89411)。[#90053](https://github.com/ClickHouse/ClickHouse/pull/90053) ([Vladimir Cherkasov](https://github.com/vdimir))。 +* 已在 [#90588](https://github.com/ClickHouse/ClickHouse/issues/90588) 中回溯:修复了在启用 `enable_lazy_columns_replication` 设置并使用 `ARRAY JOIN` 进行插入时可能出现的错误 `Column with Array type is not represented by ColumnArray column: Replicated`。[#90066](https://github.com/ClickHouse/ClickHouse/pull/90066)([Pavel Kruglov](https://github.com/Avogar))。 +* 允许 user_files 中的文件以点开头。修复 [#89662](https://github.com/ClickHouse/ClickHouse/issues/89662)。[#90079](https://github.com/ClickHouse/ClickHouse/pull/90079)([Raúl Marín](https://github.com/Algunenano))。 +* 已在 [#90647](https://github.com/ClickHouse/ClickHouse/issues/90647) 中完成回溯移植:修复在使用较大步长时,`numbers` 系统表中的逻辑错误和取模错误,并关闭 [#83398](https://github.com/ClickHouse/ClickHouse/issues/83398)。[#90123](https://github.com/ClickHouse/ClickHouse/pull/90123)([Nihal Z. Miaji](https://github.com/nihalzp))。 +* 修复了字典参数解析中的整数溢出问题。关闭 [#78506](https://github.com/ClickHouse/ClickHouse/issues/78506)。[#90171](https://github.com/ClickHouse/ClickHouse/pull/90171)([Raúl Marín](https://github.com/Algunenano))。 +* 已在 [#90468](https://github.com/ClickHouse/ClickHouse/issues/90468) 中回溯集成:修复 Hive 分区不兼容问题,避免在 25.8 版本升级时出现问题(修复升级过程中出现的 `All hive partitioning columns must be present in the schema` 错误)。[#90202](https://github.com/ClickHouse/ClickHouse/pull/90202)([Kseniia Sumarokova](https://github.com/kssenii))。 +* 修复了在启用查询条件缓存时,`SELECT` 查询在轻量级更新之后可能返回错误查询结果的问题。修复了 [#90176](https://github.com/ClickHouse/ClickHouse/issues/90176)。修复了 [#90054](https://github.com/ClickHouse/ClickHouse/issues/90054)。[#90204](https://github.com/ClickHouse/ClickHouse/pull/90204)([Anton Popov](https://github.com/CurtizJ))。 +* 修复在解析格式错误的分片目录名称时导致 StorageDistributed 崩溃的问题。 [#90243](https://github.com/ClickHouse/ClickHouse/pull/90243) ([Aleksandr Musorin](https://github.com/AVMusorin)). +* 在 `LogicalExpressionOptimizerPass` 中处理字符串向整数或布尔值的隐式转换。修复 [#89803](https://github.com/ClickHouse/ClickHouse/issues/89803)。[#90245](https://github.com/ClickHouse/ClickHouse/pull/90245)([Elmi Ahmadov](https://github.com/ahmadov))。 +* 修复表定义中某些 skip 索引格式不正确的问题,该问题会导致 `METADATA_MISMATCH`,并阻止在 Replicated Database 中创建新副本。[#90251](https://github.com/ClickHouse/ClickHouse/pull/90251)([Nikolay Degterinsky](https://github.com/evillique))。 +* 已在 [#90381](https://github.com/ClickHouse/ClickHouse/issues/90381) 中回溯修复:修复当某个 part 中的行数少于 `index_granularity` 时,`MergeTreeReaderIndex` 中行数不匹配的问题。解决 [#89691](https://github.com/ClickHouse/ClickHouse/issues/89691)。[#90254](https://github.com/ClickHouse/ClickHouse/pull/90254)([Peng Jian](https://github.com/fastio))。 +* 在 [#90608](https://github.com/ClickHouse/ClickHouse/issues/90608) 中进行了回溯移植:修复了在 compact 部分中从 JSON 读取子列时可能导致 `CANNOT_READ_ALL_DATA` 错误的 bug。解决 [#90264](https://github.com/ClickHouse/ClickHouse/issues/90264)。[#90302](https://github.com/ClickHouse/ClickHouse/pull/90302)([Pavel Kruglov](https://github.com/Avogar))。 +* 修复 `trim`、`ltrim`、`rtrim` 函数在使用两个参数时不起作用的问题。修复了 [#90170](https://github.com/ClickHouse/ClickHouse/issues/90170)。[#90305](https://github.com/ClickHouse/ClickHouse/pull/90305)([Nihal Z. Miaji](https://github.com/nihalzp))。 +* 已在 [#90625](https://github.com/ClickHouse/ClickHouse/issues/90625) 中回溯:修正 `index_granularity_bytes=0` 时,`prewhere` 中针对不存在的 JSON 路径可能出现的逻辑错误。解决 [#86924](https://github.com/ClickHouse/ClickHouse/issues/86924)。[#90375](https://github.com/ClickHouse/ClickHouse/pull/90375)([Pavel Kruglov](https://github.com/Avogar))。 +* 已在 [#90484](https://github.com/ClickHouse/ClickHouse/issues/90484) 中回溯:修复了 `L2DistanceTransposed` 中的一个 bug,当 `precision` 参数超出有效范围时会导致崩溃。已关闭 [#90401](https://github.com/ClickHouse/ClickHouse/issues/90401)。[#90405](https://github.com/ClickHouse/ClickHouse/pull/90405)([Raufs Dunamalijevs](https://github.com/rienath))。 +* 已在 [#90577](https://github.com/ClickHouse/ClickHouse/issues/90577) 中回溯:修正了在 `L2DistanceTransposed` 中,当使用数组引用向量(默认类型为 `Array(Float64))`)与元素类型为非 `Float64`(如 `Float32`、`BFloat16`)的 `QBit` 列一起使用时的距离计算错误。该函数现在会自动将引用向量转换为与 `QBit` 的元素类型一致。解决了 [#89976](https://github.com/ClickHouse/ClickHouse/issues/89976)。[#90485](https://github.com/ClickHouse/ClickHouse/pull/90485)([Raufs Dunamalijevs](https://github.com/rienath))。 +* 已在 [#90601](https://github.com/ClickHouse/ClickHouse/issues/90601) 中回溯移植:修复 `equals` 函数在极少数情况下导致的逻辑错误。关闭 [#88142](https://github.com/ClickHouse/ClickHouse/issues/88142)。[#90557](https://github.com/ClickHouse/ClickHouse/pull/90557)([Nihal Z. Miaji](https://github.com/nihalzp))。 +* 修复针对 `Tuple` 类型的 `CoalescingMergeTree`。 [#88828](https://github.com/ClickHouse/ClickHouse/pull/88828) ([scanhex12](https://github.com/scanhex12)). +#### 构建/测试/打包改进 +* 修复在 Docker 中运行带有 initdb SQL 脚本且重写了 TCP 端口的 ClickHouse 时出现的 “Connection refused” 错误。[#88042](https://github.com/ClickHouse/ClickHouse/pull/88042) ([Grigorii](https://github.com/GSokol)). +* 试验性支持 e2k 作为 ClickHouse 的新平台。[#90159](https://github.com/ClickHouse/ClickHouse/pull/90159) ([Ramil Sattarov](https://github.com/r-a-sattarov)). +* 从 CMake 中移除剩余的 `FindPackage` 用法。构建过程不应依赖系统软件包。[#89380](https://github.com/ClickHouse/ClickHouse/pull/89380) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* 在 CMake 配置阶段的构建中使用编译器缓存(例如用于 `protoc`)。[#89613](https://github.com/ClickHouse/ClickHouse/pull/89613) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* 使用 FreeBSD 13.4 sysroot。[#89617](https://github.com/ClickHouse/ClickHouse/pull/89617) ([Konstantin Bogdanov](https://github.com/thevar1able)). -#### 实验性特性 -* 实现了以位切片格式存储向量的 `QBit` 数据类型,以及 `L2DistanceTransposed` 函数,该函数支持近似向量搜索,并可通过参数控制精度与速度之间的权衡。[#87922](https://github.com/ClickHouse/ClickHouse/pull/87922) ([Raufs Dunamalijevs](https://github.com/rienath)). -* 现在,函数 `searchAll` 和 `searchAny` 也可以在不包含文本列的列上工作。在这些情况下,它们会使用默认分词器。[#87722](https://github.com/ClickHouse/ClickHouse/pull/87722) ([Jimmy Aguilar Mena](https://github.com/Ergus)). +### ClickHouse 25.10 发行版,2025-10-31 {#2510} +#### 不向后兼容的变更 +* 将默认的 `schema_inference_make_columns_nullable` 设置修改为根据 Parquet/ORC/Arrow 元数据中的列 `Nullable` 信息来决定是否可为空,而不是将所有列都设为 Nullable。对文本格式无变化。[#71499](https://github.com/ClickHouse/ClickHouse/pull/71499) ([Michael Kolupaev](https://github.com/al13n321)). +* 查询结果缓存现在会忽略 `log_comment` 设置,因此仅在查询中更改 `log_comment` 将不再被视为强制缓存未命中。存在一种小概率情况,即用户可能有意通过改变 `log_comment` 来对缓存进行分段。此更改会改变该行为,因此与之前版本不兼容。请使用 `query_cache_tag` 设置来实现这一目的。 [#79878](https://github.com/ClickHouse/ClickHouse/pull/79878) ([filimonov](https://github.com/filimonov)). +* 在之前的版本中,对包含与运算符实现函数同名的表函数的查询,其格式化结果不一致。修复了 [#81601](https://github.com/ClickHouse/ClickHouse/issues/81601)。修复了 [#81977](https://github.com/ClickHouse/ClickHouse/issues/81977)。修复了 [#82834](https://github.com/ClickHouse/ClickHouse/issues/82834)。修复了 [#82835](https://github.com/ClickHouse/ClickHouse/issues/82835)。EXPLAIN SYNTAX 查询将不会总是对运算符进行格式化——新的行为更好地体现了“解释语法”这一目的。`clickhouse-format`、`formatQuery` 及类似工具在查询中以函数调用形式使用这些运算符实现函数时,将不会再把它们格式化为运算符。[#82825](https://github.com/ClickHouse/ClickHouse/pull/82825)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 禁止在 `JOIN` 键中使用 `Dynamic` 类型。当 `Dynamic` 类型的值与非 `Dynamic` 类型的值进行比较时,可能会导致意外结果。最好将 `Dynamic` 列转换为所需的类型。[#86358](https://github.com/ClickHouse/ClickHouse/pull/86358) ([Pavel Kruglov](https://github.com/Avogar)). +* `storage_metadata_write_full_object_key` 服务器选项默认开启,目前无法关闭。这是一个向后兼容的变更,仅供注意。此变更仅与 25.x 版本向前兼容。这意味着,如果你需要回滚到旧版本,只能降级到 25.x 系列中的任意版本。[#87335](https://github.com/ClickHouse/ClickHouse/pull/87335) ([Sema Checherinda](https://github.com/CheSema))。 +* 将 `replicated_deduplication_window_seconds` 从一周降低到一小时,以便在插入速率较低时减少在 ZooKeeper 上存储的 znode 数量。[#87414](https://github.com/ClickHouse/ClickHouse/pull/87414) ([Sema Checherinda](https://github.com/CheSema))。 +* 将设置 `query_plan_use_new_logical_join_step` 重命名为 `query_plan_use_logical_join_step`。[#87679](https://github.com/ClickHouse/ClickHouse/pull/87679)([Vladimir Cherkasov](https://github.com/vdimir))。 +* 新的语法使文本索引的 tokenizer 参数配置更加灵活。[#87997](https://github.com/ClickHouse/ClickHouse/pull/87997)([Elmi Ahmadov](https://github.com/ahmadov))。 +* 将函数 `searchAny` 和 `searchAll` 重命名为 `hasAnyTokens` 和 `hasAllTokens`,以更好地与现有函数 `hasToken` 保持一致。[#88109](https://github.com/ClickHouse/ClickHouse/pull/88109) ([Robert Schulze](https://github.com/rschu1ze))。 +* 从文件系统缓存中移除 `cache_hits_threshold`。该特性是在我们引入 SLRU 缓存策略之前由一位外部贡献者添加的,而现在我们已经有了 SLRU 缓存策略,再同时支持这两者就没有意义了。[#88344](https://github.com/ClickHouse/ClickHouse/pull/88344)([Kseniia Sumarokova](https://github.com/kssenii))。 +* 对 `min_free_disk_ratio_to_perform_insert` 和 `min_free_disk_bytes_to_perform_insert` 设置的行为做了两处小改动:- 使用未预留(unreserved)字节而不是可用(available)字节来决定是否应拒绝一次插入。如果针对后台合并(background merges)和变更(mutations)的预留空间相对于配置的阈值来说很小,这一点可能并不关键,但这样更为准确。- 不再将这些设置应用于 system 表。这样做的原因是我们仍然希望像 `query_log` 这样的表能够被更新,这对调试非常有帮助。写入 system 表的数据通常相对于实际数据来说很小,因此在合理的 `min_free_disk_ratio_to_perform_insert` 阈值下,它们应该能够在更长时间内继续写入。[#88468](https://github.com/ClickHouse/ClickHouse/pull/88468) ([c-end](https://github.com/c-end)). +* 为 Keeper 的内部复制启用异步模式。Keeper 在保持原有行为不变的同时,有望带来性能提升。如果你是从 23.9 之前的版本升级,则需要先升级到 23.9+,然后再升级到 25.10+。你也可以在升级前将 `keeper_server.coordination_settings.async_replication` 设置为 0,并在升级完成后再将其启用。[#88515](https://github.com/ClickHouse/ClickHouse/pull/88515) ([Antonio Andelic](https://github.com/antonio2368))。 -#### 性能优化 +#### 新功能 -* 在 `JOIN` 和 `ARRAY JOIN` 中实现惰性列复制。在某些输出格式中,避免将 `Sparse` 和 `Replicated` 等特殊列表示形式转换为完整列,从而避免不必要的内存数据拷贝。[#88752](https://github.com/ClickHouse/ClickHouse/pull/88752)([Pavel Kruglov](https://github.com/Avogar))。 -* 为 MergeTree 表中的顶级 String 列添加可选的 `.size` 子列序列化,以提高压缩率并实现高效的子列访问。引入新的 MergeTree 设置,用于控制序列化版本并优化空字符串相关表达式。[#82850](https://github.com/ClickHouse/ClickHouse/pull/82850) ([Amos Bird](https://github.com/amosbird))。 -* 为 Iceberg 提供有序读取支持。 [#88454](https://github.com/ClickHouse/ClickHouse/pull/88454) ([scanhex12](https://github.com/scanhex12)). -* 通过在运行时从右子树构建布隆过滤器,并将该过滤器传递给左子树中的扫描,可以加速部分 JOIN 查询。这对如下查询会有收益:`SELECT avg(o_totalprice) FROM orders, customer, nation WHERE c_custkey = o_custkey AND c_nationkey=n_nationkey AND n_name = 'FRANCE'`。[#84772](https://github.com/ClickHouse/ClickHouse/pull/84772) ([Alexander Gololobov](https://github.com/davenger)). -* 通过重构查询条件缓存(Query Condition Cache,QCC)与索引分析的顺序和集成方式,提升了查询性能。现在会在主键和跳过索引分析之前先应用 QCC 过滤,从而减少不必要的索引计算。索引分析现已扩展为支持多个范围过滤条件,其过滤结果也会回写到 QCC。这显著加速了索引分析在执行时间中占主导地位的查询——尤其是依赖跳过索引(例如向量索引或倒排索引)的查询。[#82380](https://github.com/ClickHouse/ClickHouse/pull/82380)([Amos Bird](https://github.com/amosbird))。 -* 用于加速小查询的一系列微优化。 [#83096](https://github.com/ClickHouse/ClickHouse/pull/83096) ([Raúl Marín](https://github.com/Algunenano)). -* 在原生协议中压缩日志和 profile 事件。在拥有 100+ 副本的集群上,未压缩的 profile 事件会占用 1..10 MB/秒,并且在网络连接较慢时进度条会变得很卡顿。这解决了 [#82533](https://github.com/ClickHouse/ClickHouse/issues/82533)。[#83586](https://github.com/ClickHouse/ClickHouse/pull/83586)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 通过使用 [StringZilla](https://github.com/ashvardanian/StringZilla) 库(在可用时利用 SIMD CPU 指令),提升区分大小写的字符串搜索操作(例如过滤条件 `WHERE URL LIKE '%google%'`)的性能。[#84161](https://github.com/ClickHouse/ClickHouse/pull/84161)([Raúl Marín](https://github.com/Algunenano))。 -* 在对具有 `SimpleAggregateFunction(anyLast)` 类型列的 AggregatingMergeTree 表使用 FINAL 进行查询时,减少内存分配和内存拷贝。[#84428](https://github.com/ClickHouse/ClickHouse/pull/84428) ([Duc Canh Le](https://github.com/canhld94))。 -* 提供了关于下推含析取条件的 JOIN 谓词的逻辑。例如:在 TPC-H Q7 中,对于两个表 n1 和 n2 的条件 `(n1.n_name = 'FRANCE' AND n2.n_name = 'GERMANY') OR (n1.n_name = 'GERMANY' AND n2.n_name = 'FRANCE')`,我们为每个表分别提取独立的部分过滤条件:对 n1 提取 `n1.n_name = 'FRANCE' OR n1.n_name = 'GERMANY'`,对 n2 提取 `n2.n_name = 'GERMANY' OR n2.n_name = 'FRANCE'`。 [#84735](https://github.com/ClickHouse/ClickHouse/pull/84735) ([Yarik Briukhovetskyi](https://github.com/yariks5s))。 -* 通过使用新的默认设置 `optimize_rewrite_like_perfect_affix`,提升带前缀或后缀匹配的 `LIKE` 的性能。[#85920](https://github.com/ClickHouse/ClickHouse/pull/85920) ([Guang Zhao](https://github.com/zheguang))。 -* 修复在按多个字符串/数字列进行分组时,由较大序列化键导致的性能下降问题。这是 [#83884](https://github.com/ClickHouse/ClickHouse/pull/83884) 的后续改进。[#85924](https://github.com/ClickHouse/ClickHouse/pull/85924)([李扬](https://github.com/taiyang-li))。 -* 添加新的 `joined_block_split_single_row` 设置项,以降低在每个键存在大量匹配项时哈希连接的内存使用。该设置允许哈希连接结果甚至可以在左表单行的匹配结果内部进行分块,这在左表的一行匹配右表成千上万甚至数百万行时尤为有用。此前,所有匹配结果必须一次性在内存中物化。此更改可以降低峰值内存使用,但可能会增加 CPU 使用率。[#87913](https://github.com/ClickHouse/ClickHouse/pull/87913)([Vladimir Cherkasov](https://github.com/vdimir))。 -* 改进了 SharedMutex(提升大量并发查询场景下的性能)。[#87491](https://github.com/ClickHouse/ClickHouse/pull/87491)([Raúl Marín](https://github.com/Algunenano))。 -* 改进了为大多由低频词元组成的文档构建文本索引的性能。[#87546](https://github.com/ClickHouse/ClickHouse/pull/87546) ([Anton Popov](https://github.com/CurtizJ))。 -* 加速 `Field` 析构函数在常见场景下的执行(提升大量小查询场景下的性能)。[#87631](https://github.com/ClickHouse/ClickHouse/pull/87631) ([Raúl Marín](https://github.com/Algunenano)). -* 在 JOIN 优化过程中跳过对运行时哈希表统计信息的重新计算(提升所有包含 JOIN 的查询的性能)。新增 profile 事件 `JoinOptimizeMicroseconds` 和 `QueryPlanOptimizeMicroseconds`。[#87683](https://github.com/ClickHouse/ClickHouse/pull/87683) ([Vladimir Cherkasov](https://github.com/vdimir))。 -* 在 `MergeTreeLazy` 读取器中启用在缓存中保存 marks,并避免直接 I/O。这样可以提升带有 ORDER BY 且 LIMIT 值较小的查询性能。[#87989](https://github.com/ClickHouse/ClickHouse/pull/87989)([Nikita Taranov](https://github.com/nickitat))。 -* 在包含 `is_deleted` 列的 `ReplacingMergeTree` 表上执行带有 `FINAL` 子句的 SELECT 查询现在运行得更快,这是通过增强以下两项现有优化的并行化实现的:1. 针对仅包含单个 `part` 的分区的 `do_not_merge_across_partitions_select_final` 优化;2. 将表中其他被选中的范围拆分为 `intersecting / non-intersecting`,并且只有相交范围需要经过 FINAL 合并转换。[#88090](https://github.com/ClickHouse/ClickHouse/pull/88090)([Shankar Iyer](https://github.com/shankar-iyer))。 -* 减少在未使用 fail points 时的影响(即调试未启用时的默认代码路径)。 [#88196](https://github.com/ClickHouse/ClickHouse/pull/88196) ([Raúl Marín](https://github.com/Algunenano)). -* 在按 `uuid` 过滤 `system.tables` 时避免执行全表扫描(当你只有来自日志或 ZooKeeper 路径的 UUID 时会很有用)。[#88379](https://github.com/ClickHouse/ClickHouse/pull/88379) ([Azat Khuzhin](https://github.com/azat)). -* 优化了函数 `tokens`、`hasAllTokens`、`hasAnyTokens` 的性能。 [#88416](https://github.com/ClickHouse/ClickHouse/pull/88416) ([Anton Popov](https://github.com/CurtizJ)). -* 内联 `AddedColumns::appendFromBlock`,在某些情况下可略微提升 JOIN 性能。[#88455](https://github.com/ClickHouse/ClickHouse/pull/88455)([Nikita Taranov](https://github.com/nickitat))。 -* 客户端自动补全通过使用 `system.completions` 而不是多次查询 system 表,变得更快且更加一致。[#84694](https://github.com/ClickHouse/ClickHouse/pull/84694) ([|2ustam](https://github.com/RuS2m))。 -* 新增 `dictionary_block_frontcoding_compression` 文本索引参数,用于控制字典压缩。默认情况下,该参数为启用状态,并使用 `front-coding` 压缩。[#87175](https://github.com/ClickHouse/ClickHouse/pull/87175) ([Elmi Ahmadov](https://github.com/ahmadov))。 -* 根据 `min_insert_block_size_rows_for_materialized_views` 和 `min_insert_block_size_bytes_for_materialized_views` 设置,在插入到物化视图之前先合并所有线程的数据。此前,如果启用了 `parallel_view_processing`,每个线程在向某个特定物化视图插入数据时都会独立进行合并,这可能会导致生成的数据分片数量增多。 [#87280](https://github.com/ClickHouse/ClickHouse/pull/87280) ([Antonio Andelic](https://github.com/antonio2368))。 -* 添加 `temporary_files_buffer_size` 设置,用于控制临时文件写入器的缓冲区大小。* 优化 `scatter` 操作在处理 `LowCardinality` 列时的内存占用(例如在 Grace Hash Join 中使用时)。 [#88237](https://github.com/ClickHouse/ClickHouse/pull/88237) ([Vladimir Cherkasov](https://github.com/vdimir)). -* 新增对直接从并行副本读取文本索引的支持。提升了从对象存储读取文本索引时的性能。[#88262](https://github.com/ClickHouse/ClickHouse/pull/88262) ([Anton Popov](https://github.com/CurtizJ)). -* 针对数据湖目录中表的查询将使用并行副本进行分布式处理。[#88273](https://github.com/ClickHouse/ClickHouse/pull/88273) ([scanhex12](https://github.com/scanhex12))。 -* 用于调优后台合并算法的内部启发式规则,名为“to_remove_small_parts_at_right”,将在计算合并区间评分之前执行。在此之前,合并选择器会选择一个宽范围合并,而在此之后,它会对该合并的尾部部分进行过滤。修复:[#85374](https://github.com/ClickHouse/ClickHouse/issues/85374)。[#88736](https://github.com/ClickHouse/ClickHouse/pull/88736)([Mikhail Artemenko](https://github.com/Michicosun))。 +* 新增对负值 `LIMIT` 和负值 `OFFSET` 的支持。修复了 [#28913](https://github.com/ClickHouse/ClickHouse/issues/28913)。[#88411](https://github.com/ClickHouse/ClickHouse/pull/88411)([Nihal Z. Miaji](https://github.com/nihalzp))。 +* `Alias` 引擎会创建指向另一张表的代理。所有读写操作都会被转发到目标表,而别名本身不存储任何数据,只维护对目标表的引用。[#87965](https://github.com/ClickHouse/ClickHouse/pull/87965)([Kai Zhu](https://github.com/nauu))。 +* 已全面支持运算符 `IS NOT DISTINCT FROM`(`<=>`)。[#88155](https://github.com/ClickHouse/ClickHouse/pull/88155)([simonmichal](https://github.com/simonmichal))。 +* 增加了在所有适用的 `MergeTree` 表的列上自动创建统计信息的功能。新增了表级设置 `auto_statistics_types`,用于存储要创建的统计信息类型(以逗号分隔,例如 `auto_statistics_types = 'minmax, uniq, countmin'`)。 [#87241](https://github.com/ClickHouse/ClickHouse/pull/87241) ([Anton Popov](https://github.com/CurtizJ))。 +* 新的文本布隆过滤器索引 `sparse_gram`。[#79985](https://github.com/ClickHouse/ClickHouse/pull/79985)([scanhex12](https://github.com/scanhex12))。 +* 新增 `conv` 函数用于在不同进制之间转换数字,目前支持的进制范围为 `2 到 36`。[#83058](https://github.com/ClickHouse/ClickHouse/pull/83058) ([hp](https://github.com/hp77-creator))。 +* 新增对 `LIMIT BY ALL` 语法的支持。类似于 `GROUP BY ALL` 和 `ORDER BY ALL`,`LIMIT BY ALL` 会自动展开为将 SELECT 子句中所有非聚合表达式用作 LIMIT BY 键。例如,`SELECT id, name, count(*) FROM table GROUP BY id LIMIT 1 BY ALL` 等价于 `SELECT id, name, count(*) FROM table GROUP BY id LIMIT 1 BY id, name`。当需要按所有已选择的非聚合列进行限制而又不想显式列出它们时,此特性能简化查询。修复并关闭了 [#59152](https://github.com/ClickHouse/ClickHouse/issues/59152)。[#84079](https://github.com/ClickHouse/ClickHouse/pull/84079)([Surya Kant Ranjan](https://github.com/iit2009046))。 +* 支持在 ClickHouse 中查询 Apache Paimon。此集成将使 ClickHouse 用户能够直接与 Paimon 的数据湖存储交互。[#84423](https://github.com/ClickHouse/ClickHouse/pull/84423) ([JIaQi](https://github.com/JiaQiTang98))。 +* 新增了 `studentTTestOneSample` 聚合函数。[#85436](https://github.com/ClickHouse/ClickHouse/pull/85436) ([Dylan](https://github.com/DylanBlakemore))。 +* 聚合函数 `quantilePrometheusHistogram`,其参数为直方图桶的上界和累积值,并在包含所求分位数位置的桶内,在该桶的上、下界之间执行线性插值。其行为与 PromQL 中针对经典直方图的 `histogram_quantile` 函数类似。[#86294](https://github.com/ClickHouse/ClickHouse/pull/86294)([Stephen Chi](https://github.com/stephchi0))。 +* 新增用于 Delta Lake 元数据文件的系统表。[#87263](https://github.com/ClickHouse/ClickHouse/pull/87263) ([scanhex12](https://github.com/scanhex12)). +* 添加 `ALTER TABLE REWRITE PARTS` 语句——使用所有新的设置从头重写表的各个数据 part(因为有些设置,例如 `use_const_adaptive_granularity`,只会应用于新的 part)。 [#87774](https://github.com/ClickHouse/ClickHouse/pull/87774) ([Azat Khuzhin](https://github.com/azat))。 +* 添加 `SYSTEM RECONNECT ZOOKEEPER` 命令,用于强制 ZooKeeper 断开并重新连接([https://github.com/ClickHouse/ClickHouse/issues/87317](https://github.com/ClickHouse/ClickHouse/issues/87317))。[#87318](https://github.com/ClickHouse/ClickHouse/pull/87318)([Pradeep Chhetri](https://github.com/chhetripradeep))。 +* 通过设置 `max_named_collection_num_to_warn` 和 `max_named_collection_num_to_throw` 来限制命名集合的数量。新增度量指标 `NamedCollection` 和错误 `TOO_MANY_NAMED_COLLECTIONS`。 [#87343](https://github.com/ClickHouse/ClickHouse/pull/87343) ([Pablo Marcos](https://github.com/pamarcos)). +* 添加了经过优化的 `startsWith` 和 `endsWith` 函数的不区分大小写变体:`startsWithCaseInsensitive`、`endsWithCaseInsensitive`、`startsWithCaseInsensitiveUTF8` 和 `endsWithCaseInsensitiveUTF8`。 [#87374](https://github.com/ClickHouse/ClickHouse/pull/87374) ([Guang Zhao](https://github.com/zheguang))。 +* 添加了一种方式,可在 SQL 中通过服务器配置的 "resources_and_workloads" 部分提供 `WORKLOAD` 和 `RESOURCE` 定义。 [#87430](https://github.com/ClickHouse/ClickHouse/pull/87430) ([Sergei Trifonov](https://github.com/serxa))。 +* 新增一个名为 `min_level_for_wide_part` 的表设置,用于指定将某个 part 创建为 wide part 所需的最小 level。 [#88179](https://github.com/ClickHouse/ClickHouse/pull/88179) ([Christoph Wurm](https://github.com/cwurm)). +* 在 Keeper 客户端中新增 `cp`-`cpr` 和 `mv`-`mvr` 命令的递归版本。[#88570](https://github.com/ClickHouse/ClickHouse/pull/88570) ([Mikhail Artemenko](https://github.com/Michicosun))。 +* 添加了会话级设置,用于指定在插入时不进行物化的 skip 索引列表(`exclude_materialize_skip_indexes_on_insert`)。添加了 MergeTree 表级设置,用于指定在合并期间不进行物化的 skip 索引列表(`exclude_materialize_skip_indexes_on_merge`)。[#87252](https://github.com/ClickHouse/ClickHouse/pull/87252)([George Larionov](https://github.com/george-larionov))。 +#### 实验性功能 +* 实现了以比特切片格式存储向量的 `QBit` 数据类型,以及用于近似向量搜索的 `L2DistanceTransposed` 函数,其精度与速度的权衡由一个参数控制。[#87922](https://github.com/ClickHouse/ClickHouse/pull/87922) ([Raufs Dunamalijevs](https://github.com/rienath))。 +* `searchAll` 和 `searchAny` 函数现在可以用于不包含文本列的列。在这些情况下,它们会使用默认分词器。[#87722](https://github.com/ClickHouse/ClickHouse/pull/87722) ([Jimmy Aguilar Mena](https://github.com/Ergus))。 +#### 性能优化 +* 在 JOIN 和 ARRAY JOIN 中实现惰性列复制。在某些输出格式中,避免将 Sparse 和 Replicated 等特殊列表示形式转换为完整列,从而避免在内存中进行不必要的数据拷贝。[#88752](https://github.com/ClickHouse/ClickHouse/pull/88752)([Pavel Kruglov](https://github.com/Avogar))。 +* 为 MergeTree 表中的顶层 String 列添加可选的 `.size` 子列序列化,以提高压缩率并实现对子列的高效访问。引入新的 MergeTree 设置项,用于序列化版本控制以及对空字符串的表达式优化。[#82850](https://github.com/ClickHouse/ClickHouse/pull/82850)([Amos Bird](https://github.com/amosbird))。 +* 支持 Iceberg 的顺序读取。 [#88454](https://github.com/ClickHouse/ClickHouse/pull/88454) ([scanhex12](https://github.com/scanhex12)). +* 通过在运行时从右侧子树构建 Bloom 过滤器,并将该过滤器传递给左侧子树中的扫描操作,可加速部分 JOIN 查询。这对于如下查询可能有益:`SELECT avg(o_totalprice) FROM orders, customer, nation WHERE c_custkey = o_custkey AND c_nationkey=n_nationkey AND n_name = 'FRANCE'`。 [#84772](https://github.com/ClickHouse/ClickHouse/pull/84772) ([Alexander Gololobov](https://github.com/davenger))。 +* 通过重构查询条件缓存(Query Condition Cache,QCC)与索引分析的顺序和集成方式,提升了查询性能。现在会在主键和跳过索引分析之前先应用 QCC 过滤,从而减少不必要的索引计算。索引分析已扩展为支持多个范围过滤,其过滤结果现在也会回写到 QCC 中。这显著加速了在执行时间中索引分析占主导的查询——尤其是那些依赖跳过索引(例如向量索引或倒排索引)的查询。[#82380](https://github.com/ClickHouse/ClickHouse/pull/82380)([Amos Bird](https://github.com/amosbird))。 +* 多项微小优化,用于加速小型查询。[#83096](https://github.com/ClickHouse/ClickHouse/pull/83096)([Raúl Marín](https://github.com/Algunenano))。 +* 在原生协议中压缩日志和 profile 事件。在具有 100+ 副本的集群上,未压缩的 profile 事件会占用 1..10 MB/秒,并且在网络连接较慢时进度条会变得很慢。这解决了 [#82533](https://github.com/ClickHouse/ClickHouse/issues/82533)。[#83586](https://github.com/ClickHouse/ClickHouse/pull/83586)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 通过使用 [StringZilla](https://github.com/ashvardanian/StringZilla) 库,在可用时利用 SIMD CPU 指令,提升区分大小写的字符串搜索(如 `WHERE URL LIKE '%google%'` 之类的过滤操作)的性能。[#84161](https://github.com/ClickHouse/ClickHouse/pull/84161)([Raúl Marín](https://github.com/Algunenano))。 +* 在对包含类型为 `SimpleAggregateFunction(anyLast)` 的列的 AggregatingMergeTree 表使用 FINAL 进行查询时,减少内存分配和内存拷贝。[#84428](https://github.com/ClickHouse/ClickHouse/pull/84428) ([Duc Canh Le](https://github.com/canhld94))。 +* 提供了将 JOIN 谓词中的析取(OR)条件下推的逻辑。例如:在 TPC-H Q7 中,对于两个表 n1 和 n2 上的条件 `(n1.n_name = 'FRANCE' AND n2.n_name = 'GERMANY') OR (n1.n_name = 'GERMANY' AND n2.n_name = 'FRANCE')`,我们为每个表分别提取部分过滤条件:对于 n1 提取 `n1.n_name = 'FRANCE' OR n1.n_name = 'GERMANY'`,对于 n2 提取 `n2.n_name = 'GERMANY' OR n2.n_name = 'FRANCE'`。[#84735](https://github.com/ClickHouse/ClickHouse/pull/84735) ([Yarik Briukhovetskyi](https://github.com/yariks5s))。 +* 通过启用新的默认设置 `optimize_rewrite_like_perfect_affix`,提升带前缀或后缀匹配的 `LIKE` 表达式性能。 [#85920](https://github.com/ClickHouse/ClickHouse/pull/85920) ([Guang Zhao](https://github.com/zheguang)). +* 修复在按多个字符串/数字列进行分组时,由于序列化键过大导致的性能下降问题。这是对 [#83884](https://github.com/ClickHouse/ClickHouse/pull/83884) 的后续改进。[#85924](https://github.com/ClickHouse/ClickHouse/pull/85924)([李扬](https://github.com/taiyang-li))。 +* 新增 `joined_block_split_single_row` 设置,用于在每个键对应大量匹配项的哈希连接中降低内存使用。这样即使是单个左表行的所有匹配结果,也可以被拆分成多个块,这在左表一行匹配右表成千上万甚至数百万行时尤其有用。之前,所有匹配项都必须一次性在内存中物化。该改动可降低峰值内存占用,但可能会增加 CPU 开销。[#87913](https://github.com/ClickHouse/ClickHouse/pull/87913)([Vladimir Cherkasov](https://github.com/vdimir))。 +* 改进 SharedMutex,在大量并发查询场景下提升性能。[#87491](https://github.com/ClickHouse/ClickHouse/pull/87491) ([Raúl Marín](https://github.com/Algunenano))。 +* 针对主要由低频 token 构成的文档,提升了构建文本索引的性能。 [#87546](https://github.com/ClickHouse/ClickHouse/pull/87546) ([Anton Popov](https://github.com/CurtizJ))。 +* 加速 `Field` 析构函数的常见路径(在大量小型查询场景下提升性能)。 [#87631](https://github.com/ClickHouse/ClickHouse/pull/87631) ([Raúl Marín](https://github.com/Algunenano)). +* 在 JOIN 优化过程中跳过对运行时哈希表统计信息的重新计算(提升所有包含 JOIN 的查询的性能)。新增 profile 事件 `JoinOptimizeMicroseconds` 和 `QueryPlanOptimizeMicroseconds`。 [#87683](https://github.com/ClickHouse/ClickHouse/pull/87683) ([Vladimir Cherkasov](https://github.com/vdimir)). +* 在 MergeTreeLazy 读取器中启用将标记保存在缓存中,并避免直接进行 IO 操作。这样可以提升带有 ORDER BY 且 LIMIT 较小的查询性能。[#87989](https://github.com/ClickHouse/ClickHouse/pull/87989) ([Nikita Taranov](https://github.com/nickitat))。 +* 在带有 `is_deleted` 列的 `ReplacingMergeTree` 表上使用 `FINAL` 子句的 SELECT 查询现在执行得更快,这是因为对两项现有优化的并行化进行了改进:1. 对仅包含单个 `part` 的分区应用 `do_not_merge_across_partitions_select_final` 优化;2. 将表中其他选中的范围拆分为 `intersecting / non-intersecting`,且只有相交的范围需要经过 `FINAL` 合并转换。[#88090](https://github.com/ClickHouse/ClickHouse/pull/88090)([Shankar Iyer](https://github.com/shankar-iyer))。 +* 降低未使用 fail point 时(调试未启用时的默认代码路径)的影响。[#88196](https://github.com/ClickHouse/ClickHouse/pull/88196) ([Raúl Marín](https://github.com/Algunenano)). +* 避免在按 `uuid` 过滤时对 `system.tables` 进行全表扫描(当你只从日志或 ZooKeeper 路径中获得 UUID 时,这会很有用)。[#88379](https://github.com/ClickHouse/ClickHouse/pull/88379) ([Azat Khuzhin](https://github.com/azat))。 +* 优化了函数 `tokens`、`hasAllTokens`、`hasAnyTokens` 的性能。 [#88416](https://github.com/ClickHouse/ClickHouse/pull/88416) ([Anton Popov](https://github.com/CurtizJ)). +* 内联 `AddedColumns::appendFromBlock`,以在某些情况下略微提升 JOIN 性能。[#88455](https://github.com/ClickHouse/ClickHouse/pull/88455) ([Nikita Taranov](https://github.com/nickitat))。 +* 通过使用 `system.completions` 而不是执行多个 system 表的查询,可以让客户端自动补全更快且更一致。[#84694](https://github.com/ClickHouse/ClickHouse/pull/84694) ([|2ustam](https://github.com/RuS2m))。 +* 添加新的 `dictionary_block_frontcoding_compression` 文本索引参数,用于控制字典压缩。默认情况下,该参数处于启用状态,并使用 `front-coding` 压缩。[#87175](https://github.com/ClickHouse/ClickHouse/pull/87175) ([Elmi Ahmadov](https://github.com/ahmadov)). +* 在插入到物化视图之前,会根据 `min_insert_block_size_rows_for_materialized_views` 和 `min_insert_block_size_bytes_for_materialized_views` 设置,先将来自所有线程的数据进行合并。此前,如果启用了 `parallel_view_processing`,则每个线程在向某个特定物化视图插入数据时都会独立进行合并,这可能会导致生成的分片数量更多。[#87280](https://github.com/ClickHouse/ClickHouse/pull/87280) ([Antonio Andelic](https://github.com/antonio2368))。 +* 添加 `temporary_files_buffer_size` 设置,以控制临时文件写入器的缓冲区大小。* 优化 `scatter` 操作在 `LowCardinality` 列上的内存消耗(例如在 Grace Hash Join 中使用时)。[#88237](https://github.com/ClickHouse/ClickHouse/pull/88237) ([Vladimir Cherkasov](https://github.com/vdimir))。 +* 增加了通过并行副本直接读取文本索引的支持。提升了从对象存储读取文本索引时的性能。[#88262](https://github.com/ClickHouse/ClickHouse/pull/88262) ([Anton Popov](https://github.com/CurtizJ)). +* 对 Data Lakes 目录中表的查询将使用并行副本进行分布式处理。 [#88273](https://github.com/ClickHouse/ClickHouse/pull/88273) ([scanhex12](https://github.com/scanhex12)). +* 用于调优后台合并算法的内部启发式规则,名为 "to_remove_small_parts_at_right",将在计算合并区间得分之前执行。在此之前,合并选择器会选择一个宽范围的合并,而在此之后,它会过滤其后缀。修复:[#85374](https://github.com/ClickHouse/ClickHouse/issues/85374)。[#88736](https://github.com/ClickHouse/ClickHouse/pull/88736)([Mikhail Artemenko](https://github.com/Michicosun))。 #### 改进 -* 现在,函数 `generateSerialID` 支持将序列名作为非常量参数传入。修复 [#83750](https://github.com/ClickHouse/ClickHouse/issues/83750)。[#88270](https://github.com/ClickHouse/ClickHouse/pull/88270)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 为 `generateSerialID` 函数新增了可选的 `start_value` 参数,用于为新序列指定自定义起始值。[#88085](https://github.com/ClickHouse/ClickHouse/pull/88085)([Manuel](https://github.com/raimannma))。 -* 在 `clickhouse-format` 中添加 `--semicolons_inline` 选项,用于格式化查询,使分号放在最后一行而不是单独成行。[#88018](https://github.com/ClickHouse/ClickHouse/pull/88018) ([Jan Rada](https://github.com/ZelvaMan))。 -* 在 Keeper 中覆盖配置时,允许配置服务器级别限流。关闭 [#73964](https://github.com/ClickHouse/ClickHouse/issues/73964)。[#74066](https://github.com/ClickHouse/ClickHouse/pull/74066)([JIaQi](https://github.com/JiaQiTang98))。 -* 当两个样本都只包含相同的值时,`mannWhitneyUTest` 不再抛出异常。现在会返回一个有效结果,与 SciPy 的行为保持一致。由此关闭问题:[#79814](https://github.com/ClickHouse/ClickHouse/issues/79814)。[#80009](https://github.com/ClickHouse/ClickHouse/pull/80009) ([DeanNeaht](https://github.com/DeanNeaht))。 -* 重写磁盘对象存储的事务在元数据事务提交后会删除之前的远程 blob。[#81787](https://github.com/ClickHouse/ClickHouse/pull/81787) ([Sema Checherinda](https://github.com/CheSema))。 -* 修复了在优化前后结果类型的 `LowCardinality` 不一致时,处理冗余相等表达式的优化步骤。 [#82651](https://github.com/ClickHouse/ClickHouse/pull/82651) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* 当 HTTP 客户端在设置 `Expect: 100-continue` 的同时额外设置请求头 `X-ClickHouse-100-Continue: defer` 时,ClickHouse 不会在配额验证通过之前向客户端发送 `100 Continue` 响应,从而避免为那些最终会被丢弃的请求体无谓浪费网络带宽。这在 INSERT 查询场景中尤为相关,此时查询可以通过 URL 查询字符串发送,而数据则通过请求体发送。在未发送完整请求体的情况下中止请求会在 HTTP/1.1 下阻止连接复用,但与大数据量 INSERT 的总耗时相比,为建立新连接所引入的额外时延通常可以忽略不计。[#84304](https://github.com/ClickHouse/ClickHouse/pull/84304) ([c-end](https://github.com/c-end))。 -* 在使用 DATABASE ENGINE = Backup 且后端为 S3 存储时,在日志中对 S3 凭证进行掩码处理。 [#85336](https://github.com/ClickHouse/ClickHouse/pull/85336) ([Kenny Sun](https://github.com/hwabis))。 -* 通过延后其物化,使查询计划优化对关联子查询的输入子计划可见。属于 [#79890](https://github.com/ClickHouse/ClickHouse/issues/79890) 的一部分。[#85455](https://github.com/ClickHouse/ClickHouse/pull/85455)([Dmitry Novik](https://github.com/novikd))。 -* 对 SYSTEM DROP DATABASE REPLICA 的更改:- 在按 database 级别删除或删除整个 replica 时:同时删除该 database 中每个表的 replica - 如果提供了 'WITH TABLES':为每个 storage 删除 replica - 否则逻辑保持不变,只在 database 上删除 replica - 当使用 Keeper 路径删除 database replica 时:- 如果提供了 'WITH TABLES':- 将该 database 恢复为 Atomic - 根据 Keeper 中保存的语句恢复 RMT 表 - 删除该 database(恢复的表也将一并删除)- 否则,仅在指定的 Keeper 路径上删除 replica。[#85637](https://github.com/ClickHouse/ClickHouse/pull/85637) ([Tuan Pham Anh](https://github.com/tuanpach))。 -* 修复当 TTL 中包含 `materialize` 函数时出现的格式不一致问题。关闭 [#82828](https://github.com/ClickHouse/ClickHouse/issues/82828)。[#85749](https://github.com/ClickHouse/ClickHouse/pull/85749)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* Iceberg 表状态不再存储在存储对象中,从而使得在 ClickHouse 中使用 Iceberg 时可以支持并发查询。[#86062](https://github.com/ClickHouse/ClickHouse/pull/86062) ([Daniil Ivanik](https://github.com/divanik))。 -* 使 S3Queue 的有序模式中的 bucket 锁成为一种持久化模式,类似于在 `use_persistent_processing_nodes = 1` 情况下的处理节点。向测试中添加 Keeper 故障注入。[#86628](https://github.com/ClickHouse/ClickHouse/pull/86628) ([Kseniia Sumarokova](https://github.com/kssenii))。 +* 现在,函数 `generateSerialID` 已支持为序列名称使用非常量参数。关闭了 [#83750](https://github.com/ClickHouse/ClickHouse/issues/83750)。[#88270](https://github.com/ClickHouse/ClickHouse/pull/88270)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 为 `generateSerialID` 函数新增了可选的 `start_value` 参数,用于为新序列指定自定义起始值。 [#88085](https://github.com/ClickHouse/ClickHouse/pull/88085) ([Manuel](https://github.com/raimannma)). +* 在 `clickhouse-format` 中新增 `--semicolons_inline` 选项,用于在格式化查询时将分号放在最后一行末尾,而不是单独换行。[#88018](https://github.com/ClickHouse/ClickHouse/pull/88018) ([Jan Rada](https://github.com/ZelvaMan))。 +* 在 Keeper 中覆盖配置时,支持配置服务器级限流。关闭 [#73964](https://github.com/ClickHouse/ClickHouse/issues/73964)。[#74066](https://github.com/ClickHouse/ClickHouse/pull/74066)([JIaQi](https://github.com/JiaQiTang98))。 +* `mannWhitneyUTest` 在两个样本都只包含相同值时不再抛出异常。现在会返回一个有效结果,与 SciPy 保持一致。这解决了:[#79814](https://github.com/ClickHouse/ClickHouse/issues/79814)。[#80009](https://github.com/ClickHouse/ClickHouse/pull/80009)([DeanNeaht](https://github.com/DeanNeaht))。 +* 在提交元数据事务后,重写磁盘对象存储的事务会删除之前的远程 blob。 [#81787](https://github.com/ClickHouse/ClickHouse/pull/81787) ([Sema Checherinda](https://github.com/CheSema))。 +* 修复了在对冗余相等表达式进行优化时,当优化前后结果类型的 `LowCardinality` 不一致时的优化过程。 [#82651](https://github.com/ClickHouse/ClickHouse/pull/82651) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* 当 HTTP 客户端在设置 `Expect: 100-continue` 的同时额外设置请求头 `X-ClickHouse-100-Continue: defer` 时,ClickHouse 在配额验证通过之前不会向客户端发送 `100 Continue` 响应,从而避免为那些最终会被丢弃的请求体白白浪费网络带宽。这主要适用于 INSERT 查询,此时查询本身可以通过 URL 查询字符串发送,而数据则放在请求体中。如果在未发送完整请求体之前中止请求,将会阻止在 HTTP/1.1 中复用该连接,但为建立新连接所引入的额外延迟,相比在处理大批量数据的 INSERT 时的总耗时而言通常可以忽略不计。 [#84304](https://github.com/ClickHouse/ClickHouse/pull/84304) ([c-end](https://github.com/c-end))。 +* 在使用基于 S3 存储的 `DATABASE ENGINE = Backup` 时,对日志中的 S3 凭证进行掩码处理。 [#85336](https://github.com/ClickHouse/ClickHouse/pull/85336) ([Kenny Sun](https://github.com/hwabis)). +* 通过推迟对其进行物化,使查询计划优化对关联子查询的输入子计划可见。属于 [#79890](https://github.com/ClickHouse/ClickHouse/issues/79890)。[#85455](https://github.com/ClickHouse/ClickHouse/pull/85455)([Dmitry Novik](https://github.com/novikd))。 +* 对 `SYSTEM DROP DATABASE REPLICA` 的变更: - 当连同数据库一起删除或删除整个副本时:现在还会为该数据库中的每个表删除副本 - 如果提供了 `WITH TABLES`:为每个存储删除副本 - 否则逻辑保持不变,仅删除数据库级别的副本 - 当使用 Keeper 路径删除数据库副本时: - 如果提供了 `WITH TABLES`: - 将数据库恢复为 `Atomic` - 根据 Keeper 中的语句恢复 RMT 表 - 删除该数据库(恢复的表也会被删除) - 否则,仅在提供的 Keeper 路径上删除副本。 [#85637](https://github.com/ClickHouse/ClickHouse/pull/85637) ([Tuan Pham Anh](https://github.com/tuanpach)). +* 修复在包含 `materialize` 函数时 TTL 格式不一致的问题。解决了 [#82828](https://github.com/ClickHouse/ClickHouse/issues/82828)。[#85749](https://github.com/ClickHouse/ClickHouse/pull/85749)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* Iceberg 表的状态不再存储在存储对象中。这应当使 ClickHouse 中的 Iceberg 能够安全支持并发查询。[#86062](https://github.com/ClickHouse/ClickHouse/pull/86062) ([Daniil Ivanik](https://github.com/divanik))。 +* 将 S3Queue 有序模式下的 bucket 锁改为持久化模式,类似于在 `use_persistent_processing_nodes = 1` 情况下的 processing nodes。在测试中加入 Keeper 故障注入。 [#86628](https://github.com/ClickHouse/ClickHouse/pull/86628) ([Kseniia Sumarokova](https://github.com/kssenii)). * 当用户在格式名称中出现拼写错误时提供提示。修复 [#86761](https://github.com/ClickHouse/ClickHouse/issues/86761)。[#87092](https://github.com/ClickHouse/ClickHouse/pull/87092)([flynn](https://github.com/ucasfl))。 -* 当不存在 projection 时,远程副本将跳过索引分析。[#87096](https://github.com/ClickHouse/ClickHouse/pull/87096) ([zoomxi](https://github.com/zoomxi))。 -* 允许对 YTsaurus 表禁用 UTF-8 编码。 [#87150](https://github.com/ClickHouse/ClickHouse/pull/87150) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). -* 默认情况下禁用 `s3_slow_all_threads_after_retryable_error`。 [#87198](https://github.com/ClickHouse/ClickHouse/pull/87198) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). -* 将表函数 `arrowflight` 重命名为 `arrowFlight`。 [#87249](https://github.com/ClickHouse/ClickHouse/pull/87249) ([Vitaly Baranov](https://github.com/vitlibar))。 -* 更新了 `clickhouse-benchmark`,使其在 CLI 参数中可以使用 `-` 代替 `_`。[#87251](https://github.com/ClickHouse/ClickHouse/pull/87251) ([Ahmed Gouda](https://github.com/0xgouda)). -* 在信号处理时,将对 `system.crash_log` 的刷新改为同步执行。 [#87253](https://github.com/ClickHouse/ClickHouse/pull/87253) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). -* 新增了设置 `inject_random_order_for_select_without_order_by`,会自动为缺少 `ORDER BY` 子句的顶层 `SELECT` 查询注入 `ORDER BY rand()`。 [#87261](https://github.com/ClickHouse/ClickHouse/pull/87261) ([Rui Zhang](https://github.com/zhangruiddn))。 -* 改进 `joinGet` 错误信息,使其能够正确说明 `join_keys` 的数量与 `right_table_keys` 的数量不一致。 [#87279](https://github.com/ClickHouse/ClickHouse/pull/87279) ([Isak Ellmer](https://github.com/spinojara)). -* 在写入事务期间增加检查任意 Keeper 节点状态的功能。这有助于检测 ABA 问题。[#87282](https://github.com/ClickHouse/ClickHouse/pull/87282) ([Mikhail Artemenko](https://github.com/Michicosun))。 -* 将高负载的 ytsaurus 请求重定向到重型代理节点。 [#87342](https://github.com/ClickHouse/ClickHouse/pull/87342) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). -* 修复在所有可能的工作负载中,基于磁盘事务元数据的 `unlink`/`rename`/`removeRecursive`/`removeDirectory`/等操作的回滚问题以及硬链接计数问题,并简化接口使其更加通用,从而可以在其他元存储中复用。[#87358](https://github.com/ClickHouse/ClickHouse/pull/87358) ([Mikhail Artemenko](https://github.com/Michicosun))。 -* 新增 `keeper_server.tcp_nodelay` 配置参数,用于在 Keeper 中禁用 `TCP_NODELAY`。[#87363](https://github.com/ClickHouse/ClickHouse/pull/87363) (Copilot)。 -* 在 `clickhouse-benchmarks` 中新增对 `--connection` 的支持。它与 `clickhouse-client` 中已支持的参数相同,你可以在客户端 `config.xml`/`config.yaml` 配置文件的 `connections_credentials` 路径下定义预设连接,从而避免在命令行参数中显式指定用户名/密码。为 `clickhouse-benchmark` 新增对 `--accept-invalid-certificate` 的支持。[#87370](https://github.com/ClickHouse/ClickHouse/pull/87370) ([Azat Khuzhin](https://github.com/azat))。 -* 现在,为 Iceberg 表设置的 `max_insert_threads` 将会生效。[#87407](https://github.com/ClickHouse/ClickHouse/pull/87407) ([alesapin](https://github.com/alesapin))。 -* 将直方图和维度指标添加到 `PrometheusMetricsWriter`。这样,`PrometheusRequestHandler` 处理器就会具备所有关键指标,可用于在云端进行可靠且低开销的指标采集。[#87521](https://github.com/ClickHouse/ClickHouse/pull/87521)([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 -* 函数 `hasToken` 现在对于空 token 返回零匹配(之前会抛出异常)。[#87564](https://github.com/ClickHouse/ClickHouse/pull/87564) ([Jimmy Aguilar Mena](https://github.com/Ergus))。 -* 为 `Array` 和 `Map` 类型(`mapKeys` 和 `mapValues`)的值添加文本索引支持。支持的函数为 `mapContainsKey` 和 `has`。[#87602](https://github.com/ClickHouse/ClickHouse/pull/87602)([Elmi Ahmadov](https://github.com/ahmadov))。 -* 新增一个 `ZooKeeperSessionExpired` 指标,用于表示过期的全局 ZooKeeper 会话数量。[#87613](https://github.com/ClickHouse/ClickHouse/pull/87613) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). -* 使用带有备份专用设置的 S3 存储客户端(例如 backup_slow_all_threads_after_retryable_s3_error),执行到备份目标位置的服务器端(原生)复制操作。弃用 s3_slow_all_threads_after_retryable_error。 [#87660](https://github.com/ClickHouse/ClickHouse/pull/87660) ([Julia Kartseva](https://github.com/jkartseva)). -* 修复在使用实验性功能 `make_distributed_plan` 序列化查询计划时,对设置项 `max_joined_block_size_rows` 和 `max_joined_block_size_bytes` 的错误处理。[#87675](https://github.com/ClickHouse/ClickHouse/pull/87675)([Vladimir Cherkasov](https://github.com/vdimir))。 -* `enable_http_compression` 现在默认启用。这意味着如果客户端接受 HTTP 压缩,服务器就会使用它。然而,此更改也有一些缺点。客户端可以请求一种开销较大的压缩方法,例如 `bzip2`,这是不合理的,并且会增加服务器的资源消耗(但只有在传输大量结果时才会明显)。客户端也可以请求 `gzip`,这并不算太糟,但与 `zstd` 相比并不是最优选择。关闭了 [#71591](https://github.com/ClickHouse/ClickHouse/issues/71591)。[#87703](https://github.com/ClickHouse/ClickHouse/pull/87703)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 在 `system.server_settings` 中新增了一个名为 `keeper_hosts` 的配置项,用于提供 ClickHouse 可连接的 [Zoo]Keeper 主机列表。 [#87718](https://github.com/ClickHouse/ClickHouse/pull/87718) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 -* 为系统仪表板添加 `from` 和 `to` 字段,以便于进行历史排查。[#87823](https://github.com/ClickHouse/ClickHouse/pull/87823)([Mikhail f. Shiryaev](https://github.com/Felixoid))。 -* 为 Iceberg SELECT 查询添加更多用于性能跟踪的信息。[#87903](https://github.com/ClickHouse/ClickHouse/pull/87903) ([Daniil Ivanik](https://github.com/divanik))。 -* 文件系统缓存改进:在多个线程并发预留缓存空间时复用缓存优先级迭代器。 [#87914](https://github.com/ClickHouse/ClickHouse/pull/87914) ([Kseniia Sumarokova](https://github.com/kssenii)). -* 为 `Keeper` 增加限制请求大小的功能(`max_request_size` 设置,与 `ZooKeeper` 的 `jute.maxbuffer` 相同,默认关闭以保持向后兼容性,将在后续版本中启用)。[#87952](https://github.com/ClickHouse/ClickHouse/pull/87952) ([Azat Khuzhin](https://github.com/azat)). -* 将 `clickhouse-benchmark` 调整为默认不在错误信息中包含堆栈跟踪。 [#87954](https://github.com/ClickHouse/ClickHouse/pull/87954) ([Ahmed Gouda](https://github.com/0xgouda)). -* 在标记已存在于缓存中的情况下,避免使用线程池异步加载标记(`load_marks_asynchronously=1`)(因为线程池可能处于高负载状态,即使标记已在缓存中,查询仍会因此付出额外代价)。 [#87967](https://github.com/ClickHouse/ClickHouse/pull/87967) ([Azat Khuzhin](https://github.com/azat)). -* Ytsaurus:允许在创建表/表函数/字典时只指定部分列。[#87982](https://github.com/ClickHouse/ClickHouse/pull/87982)([MikhailBurdukov](https://github.com/MikhailBurdukov))。 -* 现在起,`system.zookeeper_connection_log` 默认启用,可用于获取 Keeper 会话信息。[#88011](https://github.com/ClickHouse/ClickHouse/pull/88011)([János Benjamin Antal](https://github.com/antaljanosbenjamin))。 -* 当传入重复的外部表时,使 TCP 和 HTTP 的行为保持一致。HTTP 允许同一个临时表被多次传入。[#88032](https://github.com/ClickHouse/ClickHouse/pull/88032) ([Sema Checherinda](https://github.com/CheSema))。 -* 移除用于读取 Arrow/ORC/Parquet 的自定义 MemoryPool 组件。在 [#84082](https://github.com/ClickHouse/ClickHouse/pull/84082) 之后,该组件似乎已不再需要,因为现在我们会统一跟踪所有内存分配。[#88035](https://github.com/ClickHouse/ClickHouse/pull/88035)([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 -* 无需参数即可创建 `Replicated` 数据库。[#88044](https://github.com/ClickHouse/ClickHouse/pull/88044) ([Pervakov Grigorii](https://github.com/GrigoryPervakov))。 -* `clickhouse-keeper-client`:新增对通过 TLS 端口连接 clickhouse-keeper 的支持,保持标志名称与 `clickhouse-client` 中一致。[#88065](https://github.com/ClickHouse/ClickHouse/pull/88065)([Pradeep Chhetri](https://github.com/chhetripradeep))。 -* 新增一个 profile 事件,用于统计因超出内存限制而被拒绝的后台合并次数。[#88084](https://github.com/ClickHouse/ClickHouse/pull/88084) ([Grant Holly](https://github.com/grantholly-clickhouse))。 -* 启用用于验证 `CREATE/ALTER TABLE` 列默认表达式的 analyzer。 [#88087](https://github.com/ClickHouse/ClickHouse/pull/88087) ([Max Justus Spransy](https://github.com/maxjustus)). -* 内部查询计划优化:对 `CROSS JOIN` 使用 JoinStepLogical。[#88151](https://github.com/ClickHouse/ClickHouse/pull/88151) ([Vladimir Cherkasov](https://github.com/vdimir)). -* 为 `hasAnyTokens`(`hasAnyToken`)和 `hasAllTokens`(`hasAllToken`)函数新增别名。[#88162](https://github.com/ClickHouse/ClickHouse/pull/88162)([George Larionov](https://github.com/george-larionov))。 -* 默认启用全局采样分析器(这意味着即使是与查询无关的服务器线程也会被包含在内):每经过 10 秒的 CPU 时间和实际时间,收集所有线程的堆栈跟踪。 [#88209](https://github.com/ClickHouse/ClickHouse/pull/88209) ([Alexander Tokmakov](https://github.com/tavplubix)). -* 更新 Azure SDK,以包含针对复制和创建容器功能中 `Content-Length` 问题的修复。[#88278](https://github.com/ClickHouse/ClickHouse/pull/88278) ([Smita Kulkarni](https://github.com/SmitaRKulkarni))。 -* 使函数 `lag` 不区分大小写,以兼容 MySQL。 [#88322](https://github.com/ClickHouse/ClickHouse/pull/88322) ([Lonny Kapelushnik](https://github.com/lonnylot))。 -* 允许在 `clickhouse-server` 目录中启动 `clickhouse-local`。在之前的版本中,这会导致错误 `Cannot parse UUID: .`。现在您可以在不启动服务器的情况下启动 clickhouse-local,并操作服务器的数据库。[#88383](https://github.com/ClickHouse/ClickHouse/pull/88383)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 添加配置 `keeper_server.coordination_settings.check_node_acl_on_remove`。启用后,在每次删除节点之前,将同时验证该节点自身及其父节点的 ACL。否则,只会验证父节点的 ACL。[#88513](https://github.com/ClickHouse/ClickHouse/pull/88513) ([Antonio Andelic](https://github.com/antonio2368))。 -* 现在在使用 `Vertical` 格式时,`JSON` 列会以更易读的格式化方式显示。关闭了 [#81794](https://github.com/ClickHouse/ClickHouse/issues/81794)。[#88524](https://github.com/ClickHouse/ClickHouse/pull/88524)([Frank Rosner](https://github.com/FRosner))。 -* 将 `clickhouse-client` 相关文件(例如查询历史)存放到 [XDG Base Directories](https://specifications.freedesktop.org/basedir-spec/latest/index.html) 规范所定义的位置,而不是 home 目录根路径下。若 `~/.clickhouse-client-history` 已经存在,仍将继续使用该文件。[#88538](https://github.com/ClickHouse/ClickHouse/pull/88538) ([Konstantin Bogdanov](https://github.com/thevar1able))。 +* 当不存在任何 projection 时,远程副本将跳过索引分析。 [#87096](https://github.com/ClickHouse/ClickHouse/pull/87096) ([zoomxi](https://github.com/zoomxi))。 +* 允许禁用 ytsaurus 表的 UTF-8 编码。[#87150](https://github.com/ClickHouse/ClickHouse/pull/87150) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). +* 默认禁用 `s3_slow_all_threads_after_retryable_error`。 [#87198](https://github.com/ClickHouse/ClickHouse/pull/87198) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). +* 将表函数 `arrowflight` 重命名为 `arrowFlight`。[#87249](https://github.com/ClickHouse/ClickHouse/pull/87249) ([Vitaly Baranov](https://github.com/vitlibar))。 +* 更新了 `clickhouse-benchmark`,使其在命令行参数中可以使用 `-` 替代 `_`。 [#87251](https://github.com/ClickHouse/ClickHouse/pull/87251) ([Ahmed Gouda](https://github.com/0xgouda)). +* 在信号处理期间,将对 `system.crash_log` 的刷新改为同步执行。 [#87253](https://github.com/ClickHouse/ClickHouse/pull/87253) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). +* 新增了设置 `inject_random_order_for_select_without_order_by`,会在缺少 `ORDER BY` 子句的顶层 `SELECT` 查询中自动注入 `ORDER BY rand()`。 [#87261](https://github.com/ClickHouse/ClickHouse/pull/87261) ([Rui Zhang](https://github.com/zhangruiddn)) +* 改进 `joinGet` 错误信息,使其能够准确说明 `join_keys` 的数量与 `right_table_keys` 的数量不一致。[#87279](https://github.com/ClickHouse/ClickHouse/pull/87279) ([Isak Ellmer](https://github.com/spinojara))。 +* 在写入事务期间新增支持检查任意 Keeper 节点的 stat,有助于检测 ABA 问题。 [#87282](https://github.com/ClickHouse/ClickHouse/pull/87282) ([Mikhail Artemenko](https://github.com/Michicosun)). +* 将高负载的 ytsaurus 请求重定向到高负载代理。 [#87342](https://github.com/ClickHouse/ClickHouse/pull/87342) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). +* 修复了在基于磁盘事务的元数据中,针对 unlink/rename/removeRecursive/removeDirectory 等操作的回滚以及硬链接计数在各种工作负载下可能出现的问题,并简化了相关接口,使其更加通用,以便在其他元数据存储中复用。[#87358](https://github.com/ClickHouse/ClickHouse/pull/87358) ([Mikhail Artemenko](https://github.com/Michicosun)). +* 新增 `keeper_server.tcp_nodelay` 配置参数,以便在 Keeper 中禁用 `TCP_NODELAY`。[#87363](https://github.com/ClickHouse/ClickHouse/pull/87363) (Copilot)。 +* 在 `clickhouse-benchmarks` 中支持 `--connection`。其行为与 `clickhouse-client` 中的相同,你可以在客户端的 `config.xml`/`config.yaml` 的 `connections_credentials` 路径下指定预定义连接,从而避免通过命令行参数显式指定用户/密码。为 `clickhouse-benchmark` 增加对 `--accept-invalid-certificate` 的支持。[#87370](https://github.com/ClickHouse/ClickHouse/pull/87370) ([Azat Khuzhin](https://github.com/azat)). +* 现在,设置 `max_insert_threads` 将会在 Iceberg 表上生效。[#87407](https://github.com/ClickHouse/ClickHouse/pull/87407) ([alesapin](https://github.com/alesapin))。 +* 向 `PrometheusMetricsWriter` 添加直方图和维度型指标。这样,`PrometheusRequestHandler` 处理器将具备所有必要指标,可用于在云环境中进行可靠且低开销的指标采集。[#87521](https://github.com/ClickHouse/ClickHouse/pull/87521) ([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 +* 函数 `hasToken` 现在对空 token 返回 0 个匹配(此前会抛出异常)。[#87564](https://github.com/ClickHouse/ClickHouse/pull/87564) ([Jimmy Aguilar Mena](https://github.com/Ergus))。 +* 为 `Array` 和 `Map`(`mapKeys` 和 `mapValues`)类型的值添加文本索引支持。支持的函数为 `mapContainsKey` 和 `has`。[#87602](https://github.com/ClickHouse/ClickHouse/pull/87602) ([Elmi Ahmadov](https://github.com/ahmadov))。 +* 新增了一个 `ZooKeeperSessionExpired` 指标,用于统计已过期的全局 ZooKeeper 会话数量。[#87613](https://github.com/ClickHouse/ClickHouse/pull/87613) ([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 +* 在进行服务端(原生)复制到备份目标时,使用带有备份专用设置(例如 backup_slow_all_threads_after_retryable_s3_error)的 S3 存储客户端。弃用 s3_slow_all_threads_after_retryable_error。 [#87660](https://github.com/ClickHouse/ClickHouse/pull/87660) ([Julia Kartseva](https://github.com/jkartseva)). +* 修复在使用实验性功能 `make_distributed_plan` 对查询计划进行序列化时,对设置项 `max_joined_block_size_rows` 和 `max_joined_block_size_bytes` 的错误处理。 [#87675](https://github.com/ClickHouse/ClickHouse/pull/87675) ([Vladimir Cherkasov](https://github.com/vdimir)). +* 设置项 `enable_http_compression` 现已默认启用。这意味着如果客户端接受 HTTP 压缩,服务器就会使用它。不过,此更改也有一些缺点。客户端可以请求一种开销很大的压缩方法,比如 `bzip2`,这是不合理的,而且会增加服务器的资源消耗(但只有在传输大型结果时才会明显)。客户端也可以请求 `gzip`,这不算太糟,但相较于 `zstd` 并非最优。修复了 [#71591](https://github.com/ClickHouse/ClickHouse/issues/71591)。[#87703](https://github.com/ClickHouse/ClickHouse/pull/87703)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 在 `system.server_settings` 中新增了一个条目 `keeper_hosts`,用于提供 ClickHouse 可连接的 [Zoo]Keeper 主机列表。[#87718](https://github.com/ClickHouse/ClickHouse/pull/87718)([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 +* 在系统仪表板中添加 `from` 和 `to` 值,以便更方便地进行历史问题排查。[#87823](https://github.com/ClickHouse/ClickHouse/pull/87823)([Mikhail f. Shiryaev](https://github.com/Felixoid))。 +* 在 Iceberg 的 SELECT 查询中添加更多用于性能跟踪的信息。[#87903](https://github.com/ClickHouse/ClickHouse/pull/87903) ([Daniil Ivanik](https://github.com/divanik))。 +* 文件系统缓存优化:在多个线程同时预留缓存空间时重用缓存优先级迭代器。[#87914](https://github.com/ClickHouse/ClickHouse/pull/87914) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 新增对 `Keeper` 请求大小进行限制的功能(`max_request_size` 设置,与 `ZooKeeper` 的 `jute.maxbuffer` 相同,默认关闭以保持向后兼容性,将在后续版本中启用)。 [#87952](https://github.com/ClickHouse/ClickHouse/pull/87952) ([Azat Khuzhin](https://github.com/azat)). +* 使 `clickhouse-benchmark` 默认不在错误信息中包含堆栈跟踪。 [#87954](https://github.com/ClickHouse/ClickHouse/pull/87954) ([Ahmed Gouda](https://github.com/0xgouda)). +* 当标记(marks)已在缓存中时,避免启用基于线程池的异步标记加载(`load_marks_asynchronously=1`)(因为线程池可能处于繁忙状态,即使标记已经在缓存中,查询仍会因此付出额外开销)。 [#87967](https://github.com/ClickHouse/ClickHouse/pull/87967) ([Azat Khuzhin](https://github.com/azat)). +* Ytsaurus:允许使用部分列创建表、表函数和字典。[#87982](https://github.com/ClickHouse/ClickHouse/pull/87982) ([MikhailBurdukov](https://github.com/MikhailBurdukov))。 +* 现在起,`system.zookeeper_connection_log` 已默认启用,可用于获取 Keeper 会话相关信息。 [#88011](https://github.com/ClickHouse/ClickHouse/pull/88011) ([János Benjamin Antal](https://github.com/antaljanosbenjamin))。 +* 在传入重复的外部表时,使 TCP 与 HTTP 的行为保持一致。HTTP 允许多次传递同一个临时表。[#88032](https://github.com/ClickHouse/ClickHouse/pull/88032) ([Sema Checherinda](https://github.com/CheSema))。 +* 移除用于读取 Arrow/ORC/Parquet 的自定义 MemoryPools。该组件在 [#84082](https://github.com/ClickHouse/ClickHouse/pull/84082) 之后似乎已不再需要,因为现在我们无论如何都会跟踪所有内存分配。[#88035](https://github.com/ClickHouse/ClickHouse/pull/88035)([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 +* 允许在不提供参数的情况下创建 `Replicated` 数据库。 [#88044](https://github.com/ClickHouse/ClickHouse/pull/88044) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +* `clickhouse-keeper-client`:新增对连接到 clickhouse-keeper 的 TLS 端口的支持,保持参数标志名称与 clickhouse-client 中一致。[#88065](https://github.com/ClickHouse/ClickHouse/pull/88065) ([Pradeep Chhetri](https://github.com/chhetripradeep))。 +* 新增了一个 profile 事件,用于统计后台合并因超出内存限制而被拒绝的次数。[#88084](https://github.com/ClickHouse/ClickHouse/pull/88084) ([Grant Holly](https://github.com/grantholly-clickhouse))。 +* 启用用于校验 `CREATE/ALTER TABLE` 列默认表达式的 analyzer。 [#88087](https://github.com/ClickHouse/ClickHouse/pull/88087) ([Max Justus Spransy](https://github.com/maxjustus)). +* 内部查询计划优化:对 `CROSS JOIN` 使用 JoinStepLogical。 [#88151](https://github.com/ClickHouse/ClickHouse/pull/88151) ([Vladimir Cherkasov](https://github.com/vdimir)). +* 为 `hasAnyTokens`(`hasAnyToken`)和 `hasAllTokens`(`hasAllToken`)函数添加了别名。[#88162](https://github.com/ClickHouse/ClickHouse/pull/88162) ([George Larionov](https://github.com/george-larionov))。 +* 默认启用全局采样性能分析器(这意味着:即使是与查询无关的服务器线程也会启用):每 10 秒(按 CPU 时间和实际时间)收集一次所有线程的堆栈跟踪(stacktrace)。 [#88209](https://github.com/ClickHouse/ClickHouse/pull/88209) ([Alexander Tokmakov](https://github.com/tavplubix))。 +* 更新 Azure SDK,以包含针对复制和创建容器操作中 `Content-Length` 问题的修复。[#88278](https://github.com/ClickHouse/ClickHouse/pull/88278) ([Smita Kulkarni](https://github.com/SmitaRKulkarni))。 +* 使函数 `lag` 不区分大小写,以与 MySQL 兼容。[#88322](https://github.com/ClickHouse/ClickHouse/pull/88322) ([Lonny Kapelushnik](https://github.com/lonnylot)). +* 允许从 `clickhouse-server` 目录启动 `clickhouse-local`。在之前的版本中,这会产生错误 `Cannot parse UUID: .`。现在,可以在不启动服务器的情况下启动 `clickhouse-local` 并操作服务器上的数据库。[#88383](https://github.com/ClickHouse/ClickHouse/pull/88383)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 添加配置项 `keeper_server.coordination_settings.check_node_acl_on_remove`。启用后,在每次删除节点之前,将同时验证该节点本身及其父节点的 ACL。否则,仅验证父节点的 ACL。[#88513](https://github.com/ClickHouse/ClickHouse/pull/88513) ([Antonio Andelic](https://github.com/antonio2368))。 +* 在使用 `Vertical` 格式时,`JSON` 列现在会以美化格式输出。修复 [#81794](https://github.com/ClickHouse/ClickHouse/issues/81794)。[#88524](https://github.com/ClickHouse/ClickHouse/pull/88524)([Frank Rosner](https://github.com/FRosner))。 +* 将 `clickhouse-client` 文件(例如查询历史)存储在 [XDG Base Directories](https://specifications.freedesktop.org/basedir-spec/latest/index.html) 规范描述的位置,而不是主目录根目录下。如果 `~/.clickhouse-client-history` 已经存在,仍会继续使用该文件。[#88538](https://github.com/ClickHouse/ClickHouse/pull/88538)([Konstantin Bogdanov](https://github.com/thevar1able))。 * 修复 `GLOBAL IN` 导致的内存泄漏问题([https://github.com/ClickHouse/ClickHouse/issues/88615](https://github.com/ClickHouse/ClickHouse/issues/88615))。[#88617](https://github.com/ClickHouse/ClickHouse/pull/88617)([pranavmehta94](https://github.com/pranavmehta94))。 -* 为 hasAny/hasAllTokens 添加了新的重载版本,以支持字符串输入。[#88679](https://github.com/ClickHouse/ClickHouse/pull/88679) ([George Larionov](https://github.com/george-larionov)). -* 在 `clickhouse-keeper` 的 post-install 脚本中添加一个步骤,使其支持开机自启动。[#88746](https://github.com/ClickHouse/ClickHouse/pull/88746)([YenchangChan](https://github.com/YenchangChan))。 -* 仅在 Web UI 中在粘贴凭据后进行检查,而不是在每次按键时检查。这样可以避免由于 LDAP 服务器配置错误引发的问题。关闭了 [#85777](https://github.com/ClickHouse/ClickHouse/issues/85777)。[#88769](https://github.com/ClickHouse/ClickHouse/pull/88769)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 在违反约束时限制异常消息的长度。此前版本中,当插入一个非常长的字符串时,可能会产生一条非常长的异常消息,并最终被写入到 `query_log` 中。修复了 [#87032](https://github.com/ClickHouse/ClickHouse/issues/87032)。[#88801](https://github.com/ClickHouse/ClickHouse/pull/88801)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 修复在创建表时向 ArrowFlight 服务器请求数据集结构时出现的问题。 [#87542](https://github.com/ClickHouse/ClickHouse/pull/87542) ([Vitaly Baranov](https://github.com/vitlibar))。 - - +* 为 hasAny/hasAllTokens 添加了新的重载,使其支持字符串输入。[#88679](https://github.com/ClickHouse/ClickHouse/pull/88679) ([George Larionov](https://github.com/george-larionov)). +* 为 `clickhouse-keeper` 的安装后脚本新增一个步骤,以便在开机时自动启动。 [#88746](https://github.com/ClickHouse/ClickHouse/pull/88746) ([YenchangChan](https://github.com/YenchangChan)). +* 仅在将凭据粘贴到 Web UI 时进行检查,而不是在每次按键时检查。这样可以避免因 LDAP 服务器配置错误而导致的问题。修复了 [#85777](https://github.com/ClickHouse/ClickHouse/issues/85777)。[#88769](https://github.com/ClickHouse/ClickHouse/pull/88769)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 在违反约束时限制异常信息长度。在之前的版本中,插入超长字符串时,可能会生成同样很长的异常信息,并最终被写入 `query_log`。修复 [#87032](https://github.com/ClickHouse/ClickHouse/issues/87032)。[#88801](https://github.com/ClickHouse/ClickHouse/pull/88801)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 修复在创建表时从 ArrowFlight 服务器请求数据集结构时出现的问题。[#87542](https://github.com/ClickHouse/ClickHouse/pull/87542) ([Vitaly Baranov](https://github.com/vitlibar))。 - - -#### 错误修复(官方稳定版本中用户可见的异常行为) +#### Bug 修复(官方稳定版中对用户可见的异常行为) * 修复了 GeoParquet 导致的客户端协议错误。[#84020](https://github.com/ClickHouse/ClickHouse/pull/84020) ([Michael Kolupaev](https://github.com/al13n321)). -* 修复在 initiator 节点上解析子查询中 `shardNum()` 等主机相关函数的问题。[#84409](https://github.com/ClickHouse/ClickHouse/pull/84409)([Eduard Karacharov](https://github.com/korowa))。 -* 修复了多个与日期时间相关的函数(例如 `parseDateTime64BestEffort`、`change{Year,Month,Day}` 和 `makeDateTime64`)在处理 Unix 纪元之前且带有小数秒的日期时的错误。此前会将子秒部分从秒数中减去,而不是将其相加。例如,`parseDateTime64BestEffort('1969-01-01 00:00:00.468')` 会返回 `1968-12-31 23:59:59.532`,而不是 `1969-01-01 00:00:00.468`。[#85396](https://github.com/ClickHouse/ClickHouse/pull/85396)([xiaohuanlin](https://github.com/xiaohuanlin))。 -* 修复在同一个 ALTER 语句中列状态发生变化时,ALTER COLUMN IF EXISTS 命令会失败的问题。现在,像 DROP COLUMN IF EXISTS、MODIFY COLUMN IF EXISTS、COMMENT COLUMN IF EXISTS 和 RENAME COLUMN IF EXISTS 这样的命令,可以正确处理在同一语句中前一个命令已经删除该列的情况。[#86046](https://github.com/ClickHouse/ClickHouse/pull/86046)([xiaohuanlin](https://github.com/xiaohuanlin))。 -* 修复对超出支持范围的日期进行 Date/DateTime/DateTime64 类型推断时的问题。[#86184](https://github.com/ClickHouse/ClickHouse/pull/86184) ([Pavel Kruglov](https://github.com/Avogar)). -* 修复了一个崩溃问题:某些有效的用户提交数据在写入 `AggregateFunction(quantileDD)` 列时,可能会导致合并操作出现无限递归。[#86560](https://github.com/ClickHouse/ClickHouse/pull/86560)([Raphaël Thériault](https://github.com/raphael-theriault-swi))。 -* 在使用 `cluster` 表函数创建的表中支持 JSON/Dynamic 类型。 [#86821](https://github.com/ClickHouse/ClickHouse/pull/86821) ([Pavel Kruglov](https://github.com/Avogar)). -* 修复在查询中通过 CTE 计算的函数结果非确定的问题。[#86967](https://github.com/ClickHouse/ClickHouse/pull/86967) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* 修复在主键列上使用 pointInPolygon 时 EXPLAIN 中出现的 LOGICAL_ERROR。 [#86971](https://github.com/ClickHouse/ClickHouse/pull/86971) ([Michael Kolupaev](https://github.com/al13n321)). -* 修复名称中包含百分号编码序列的数据湖表。关闭了 [#86626](https://github.com/ClickHouse/ClickHouse/issues/86626)。[#87020](https://github.com/ClickHouse/ClickHouse/pull/87020)([Anton Ivashkin](https://github.com/ianton-ru))。 -* 修复在启用 `optimize_functions_to_subcolumns` 时,`OUTER JOIN` 中对可为空列使用 `IS NULL` 时行为不正确的问题,关闭 [#78625](https://github.com/ClickHouse/ClickHouse/issues/78625)。[#87058](https://github.com/ClickHouse/ClickHouse/pull/87058)([Vladimir Cherkasov](https://github.com/vdimir))。 -* 修复了在 `max_temporary_data_on_disk_size` 限制跟踪中对临时数据释放量的错误统计,关闭了 [#87118](https://github.com/ClickHouse/ClickHouse/issues/87118)。[#87140](https://github.com/ClickHouse/ClickHouse/pull/87140)([JIaQi](https://github.com/JiaQiTang98))。 -* 函数 checkHeaders 现在能够正确校验所提供的 headers,并拒绝使用受禁止的 headers。原作者:Michael Anastasakis (@michael-anastasakis)。[#87172](https://github.com/ClickHouse/ClickHouse/pull/87172)([Raúl Marín](https://github.com/Algunenano))。 -* 使所有数值类型的行为与 `toDate` 和 `toDate32` 保持一致。修复了从 int16 进行类型转换时对 Date32 下溢的检查问题。[#87176](https://github.com/ClickHouse/ClickHouse/pull/87176) ([Pervakov Grigorii](https://github.com/GrigoryPervakov))。 -* 修复在使用并行副本执行且包含多个 JOIN 的查询中的逻辑错误,尤其是在 LEFT/INNER JOIN 之后使用 RIGHT JOIN 的场景。[#87178](https://github.com/ClickHouse/ClickHouse/pull/87178) ([Igor Nikonov](https://github.com/devcrafter))。 -* 在 schema 推断缓存中遵循 `input_format_try_infer_variants` 设置。 [#87180](https://github.com/ClickHouse/ClickHouse/pull/87180) ([Pavel Kruglov](https://github.com/Avogar)). -* 使 pathStartsWith 限定只匹配此前缀下的路径。 [#87181](https://github.com/ClickHouse/ClickHouse/pull/87181) ([Raúl Marín](https://github.com/Algunenano)). -* 修复了 `_row_number` 虚拟列和 Iceberg 定位删除中的逻辑错误。[#87220](https://github.com/ClickHouse/ClickHouse/pull/87220) ([Michael Kolupaev](https://github.com/al13n321))。 -* 修复在 `JOIN` 中由于同时存在常量和非常量数据块而导致出现 “Too large size passed to allocator” `LOGICAL_ERROR` 的问题。[#87231](https://github.com/ClickHouse/ClickHouse/pull/87231) ([Azat Khuzhin](https://github.com/azat)). -* 修复了在轻量级更新中使用子查询从其他 `MergeTree` 表读取时的问题。[#87285](https://github.com/ClickHouse/ClickHouse/pull/87285) ([Anton Popov](https://github.com/CurtizJ)). -* 修复了在启用行策略时不起作用的 move-to-prewhere 优化。是对 [#85118](https://github.com/ClickHouse/ClickHouse/issues/85118) 的延续。关闭了 [#69777](https://github.com/ClickHouse/ClickHouse/issues/69777)。关闭了 [#83748](https://github.com/ClickHouse/ClickHouse/issues/83748)。[#87303](https://github.com/ClickHouse/ClickHouse/pull/87303)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 -* 修复了对在数据分片中缺失且带有默认表达式的列应用补丁的问题。 [#87347](https://github.com/ClickHouse/ClickHouse/pull/87347) ([Anton Popov](https://github.com/CurtizJ)). -* 修复了在 MergeTree 表中使用重复分区字段名称时出现的段错误。 [#87365](https://github.com/ClickHouse/ClickHouse/pull/87365) ([xiaohuanlin](https://github.com/xiaohuanlin)). +* 修复在发起节点上执行的子查询中解析 `shardNum()` 等与主机相关函数时的问题。[#84409](https://github.com/ClickHouse/ClickHouse/pull/84409) ([Eduard Karacharov](https://github.com/korowa))。 +* 修复了多个与日期时间相关的函数(例如 `parseDateTime64BestEffort`、`change{Year,Month,Day}` 和 `makeDateTime64`)在处理 Unix 纪元之前且带有小数秒的日期时的错误。此前,小数秒部分会被从秒数中减去,而不是相加。例如,`parseDateTime64BestEffort('1969-01-01 00:00:00.468')` 会返回 `1968-12-31 23:59:59.532`,而不是 `1969-01-01 00:00:00.468`。[#85396](https://github.com/ClickHouse/ClickHouse/pull/85396)([xiaohuanlin](https://github.com/xiaohuanlin))。 +* 修复在同一条 ALTER 语句中列状态发生变化时,`ALTER COLUMN IF EXISTS` 命令执行失败的问题。现在,`DROP COLUMN IF EXISTS`、`MODIFY COLUMN IF EXISTS`、`COMMENT COLUMN IF EXISTS` 和 `RENAME COLUMN IF EXISTS` 等命令可以正确处理在同一语句中前一个命令已删除该列的情况。 [#86046](https://github.com/ClickHouse/ClickHouse/pull/86046) ([xiaohuanlin](https://github.com/xiaohuanlin))。 +* 修复在日期超出支持范围时推断 `Date`/`DateTime`/`DateTime64` 类型的问题。 [#86184](https://github.com/ClickHouse/ClickHouse/pull/86184) ([Pavel Kruglov](https://github.com/Avogar)). +* 修复了一个崩溃问题:某些用户提交到 `AggregateFunction(quantileDD)` 列的有效数据可能会导致合并过程发生无限递归。[#86560](https://github.com/ClickHouse/ClickHouse/pull/86560) ([Raphaël Thériault](https://github.com/raphael-theriault-swi))。 +* 在通过 `cluster` 表函数创建的表中支持 JSON/Dynamic 类型。[#86821](https://github.com/ClickHouse/ClickHouse/pull/86821)([Pavel Kruglov](https://github.com/Avogar))。 +* 修复在查询中通过 CTE 计算的函数结果非确定性的问题。 [#86967](https://github.com/ClickHouse/ClickHouse/pull/86967) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* 修复在主键列上使用 pointInPolygon 时 EXPLAIN 中出现的 LOGICAL_ERROR。[#86971](https://github.com/ClickHouse/ClickHouse/pull/86971) ([Michael Kolupaev](https://github.com/al13n321))。 +* 修复名称中包含百分号编码序列的数据湖表。修复 [#86626](https://github.com/ClickHouse/ClickHouse/issues/86626) 中的问题。[#87020](https://github.com/ClickHouse/ClickHouse/pull/87020)([Anton Ivashkin](https://github.com/ianton-ru))。 +* 修复在包含可空列且启用了 `optimize_functions_to_subcolumns` 的 `OUTER JOIN` 中出现的不正确 `IS NULL` 行为,关闭 [#78625](https://github.com/ClickHouse/ClickHouse/issues/78625)。[#87058](https://github.com/ClickHouse/ClickHouse/pull/87058)([Vladimir Cherkasov](https://github.com/vdimir))。 +* 修复了在 `max_temporary_data_on_disk_size` 上限跟踪中对临时数据释放计数不正确的问题,关闭 [#87118](https://github.com/ClickHouse/ClickHouse/issues/87118)。[#87140](https://github.com/ClickHouse/ClickHouse/pull/87140)([JIaQi](https://github.com/JiaQiTang98))。 +* 函数 `checkHeaders` 现在会正确验证提供的 headers,并拒绝不允许的 headers。原作者:Michael Anastasakis (@michael-anastasakis)。[#87172](https://github.com/ClickHouse/ClickHouse/pull/87172)([Raúl Marín](https://github.com/Algunenano))。 +* 对所有数值类型实现了与 `toDate` 和 `toDate32` 相同的行为。修复了从 int16 类型转换为 Date32 时的下溢检查。[#87176](https://github.com/ClickHouse/ClickHouse/pull/87176) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +* 修复在包含多个 JOIN 的查询中使用并行副本时的逻辑错误,尤其是在 LEFT/INNER JOIN 之后使用 RIGHT JOIN 的情况下。[#87178](https://github.com/ClickHouse/ClickHouse/pull/87178) ([Igor Nikonov](https://github.com/devcrafter))。 +* 使 schema 推断缓存遵循 `input_format_try_infer_variants` 设置。[#87180](https://github.com/ClickHouse/ClickHouse/pull/87180) ([Pavel Kruglov](https://github.com/Avogar)). +* 使 pathStartsWith 仅匹配位于该前缀之下的路径。[#87181](https://github.com/ClickHouse/ClickHouse/pull/87181) ([Raúl Marín](https://github.com/Algunenano))。 +* 修复了 `_row_number` 虚拟列和 Iceberg 基于位置删除中的逻辑错误。[#87220](https://github.com/ClickHouse/ClickHouse/pull/87220) ([Michael Kolupaev](https://github.com/al13n321)). +* 修复在 `JOIN` 中由于混合使用常量和非常量数据块而导致的 `LOGICAL_ERROR` 异常 “Too large size passed to allocator”。[#87231](https://github.com/ClickHouse/ClickHouse/pull/87231)([Azat Khuzhin](https://github.com/azat))。 +* 修复了在轻量级更新中使用从其他 `MergeTree` 表读取数据的子查询时出现的问题。 [#87285](https://github.com/ClickHouse/ClickHouse/pull/87285) ([Anton Popov](https://github.com/CurtizJ)). +* 修复了在存在行策略时不起作用的 move-to-prewhere 优化。延续自 [#85118](https://github.com/ClickHouse/ClickHouse/issues/85118)。修复并关闭了 [#69777](https://github.com/ClickHouse/ClickHouse/issues/69777)。修复并关闭了 [#83748](https://github.com/ClickHouse/ClickHouse/issues/83748)。[#87303](https://github.com/ClickHouse/ClickHouse/pull/87303)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 +* 修复了在对数据分片中缺失但定义了默认表达式的列应用补丁时出现的问题。 [#87347](https://github.com/ClickHouse/ClickHouse/pull/87347) ([Anton Popov](https://github.com/CurtizJ)). +* 修复了在 MergeTree 表中使用重复分区字段名称时导致的段错误。 [#87365](https://github.com/ClickHouse/ClickHouse/pull/87365) ([xiaohuanlin](https://github.com/xiaohuanlin)). * 修复 EmbeddedRocksDB 的升级问题。[#87392](https://github.com/ClickHouse/ClickHouse/pull/87392) ([Raúl Marín](https://github.com/Algunenano)). -* 修复了直接从对象存储中的文本索引读取的问题。[#87399](https://github.com/ClickHouse/ClickHouse/pull/87399) ([Anton Popov](https://github.com/CurtizJ))。 +* 修复了从对象存储上的文本索引直接读取的问题。 [#87399](https://github.com/ClickHouse/ClickHouse/pull/87399) ([Anton Popov](https://github.com/CurtizJ)). * 禁止为不存在的引擎创建权限。[#87419](https://github.com/ClickHouse/ClickHouse/pull/87419) ([Jitendra](https://github.com/jitendra1411)). -* 仅忽略 `s3_plain_rewritable` 的未找到错误(这可能会引发各种问题)。[#87426](https://github.com/ClickHouse/ClickHouse/pull/87426) ([Azat Khuzhin](https://github.com/azat))。 -* 修复使用 YTSaurus 源和 *range_hashed* 布局的字典。[#87490](https://github.com/ClickHouse/ClickHouse/pull/87490) ([MikhailBurdukov](https://github.com/MikhailBurdukov))。 -* 修复创建空元组数组时的问题。 [#87520](https://github.com/ClickHouse/ClickHouse/pull/87520) ([Pavel Kruglov](https://github.com/Avogar)). -* 在创建临时表时检查非法列。[#87524](https://github.com/ClickHouse/ClickHouse/pull/87524) ([Pavel Kruglov](https://github.com/Avogar))。 -* 切勿在格式头中放入 Hive 分区列。修复了 [#87515](https://github.com/ClickHouse/ClickHouse/issues/87515)。[#87528](https://github.com/ClickHouse/ClickHouse/pull/87528)([Arthur Passos](https://github.com/arthurpassos))。 -* 修复在 DeltaLake 中使用文本格式时读取准备阶段的问题。 [#87529](https://github.com/ClickHouse/ClickHouse/pull/87529) ([Pavel Kruglov](https://github.com/Avogar)). -* 修复了 Buffer 表在执行 SELECT 和 INSERT 操作时的访问权限校验问题。[#87545](https://github.com/ClickHouse/ClickHouse/pull/87545)([pufit](https://github.com/pufit))。 -* 禁止为 S3 表创建数据跳过索引。[#87554](https://github.com/ClickHouse/ClickHouse/pull/87554) ([Bharat Nallan](https://github.com/bharatnc)). -* 避免异步日志的已跟踪内存泄漏(在 10 小时内可能产生约 100GiB 的显著偏移),以及 `text_log`(也可能出现几乎相同的偏移)。 [#87584](https://github.com/ClickHouse/ClickHouse/pull/87584) ([Azat Khuzhin](https://github.com/azat)). -* 修复了一个缺陷:如果某个 View 或物化视图以异步方式删除,并且在后台清理完成之前重启了服务器,可能会导致该视图的 SELECT 设置覆盖全局服务器设置。 [#87603](https://github.com/ClickHouse/ClickHouse/pull/87603) ([Alexander Tokmakov](https://github.com/tavplubix)). -* 在计算内存过载警告时,如果可能,将用户空间页缓存占用的字节数排除在外。 [#87610](https://github.com/ClickHouse/ClickHouse/pull/87610) ([Bharat Nallan](https://github.com/bharatnc))。 -* 修复了一个在 CSV 反序列化过程中由于类型顺序不正确而导致 `LOGICAL_ERROR` 的错误。[#87622](https://github.com/ClickHouse/ClickHouse/pull/87622) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* 修复在可执行字典中对 `command_read_timeout` 的不正确处理。[#87627](https://github.com/ClickHouse/ClickHouse/pull/87627)([Azat Khuzhin](https://github.com/azat))。 -* 修复了在使用新的分析器对被替换列进行过滤时,`SELECT * REPLACE` 在 `WHERE` 子句中的错误行为。 [#87630](https://github.com/ClickHouse/ClickHouse/pull/87630) ([xiaohuanlin](https://github.com/xiaohuanlin)). +* 仅对 `s3_plain_rewritable` 的「未找到」错误执行忽略(否则可能会导致各种问题)。[#87426](https://github.com/ClickHouse/ClickHouse/pull/87426) ([Azat Khuzhin](https://github.com/azat)). +* 修复基于 YTSaurus 源和 *range_hashed 布局的字典。[#87490](https://github.com/ClickHouse/ClickHouse/pull/87490) ([MikhailBurdukov](https://github.com/MikhailBurdukov))。 +* 修复创建空元组数组时的行为。 [#87520](https://github.com/ClickHouse/ClickHouse/pull/87520) ([Pavel Kruglov](https://github.com/Avogar)). +* 在创建临时表时检查无效列。[#87524](https://github.com/ClickHouse/ClickHouse/pull/87524)([Pavel Kruglov](https://github.com/Avogar))。 +* 切勿在 format 头部中包含 Hive 分区列。修复了 [#87515](https://github.com/ClickHouse/ClickHouse/issues/87515)。[#87528](https://github.com/ClickHouse/ClickHouse/pull/87528)([Arthur Passos](https://github.com/arthurpassos))。 +* 修复在 DeltaLake 中使用 text 格式时的读取准备过程。[#87529](https://github.com/ClickHouse/ClickHouse/pull/87529) ([Pavel Kruglov](https://github.com/Avogar)). +* 修复了 Buffer 表在执行 SELECT 和 INSERT 时的访问权限校验问题。[#87545](https://github.com/ClickHouse/ClickHouse/pull/87545) ([pufit](https://github.com/pufit))。 +* 不允许为 S3 表创建数据跳过索引。 [#87554](https://github.com/ClickHouse/ClickHouse/pull/87554) ([Bharat Nallan](https://github.com/bharatnc)). +* 避免异步日志和 text_log 的已跟踪内存泄漏(在 10 小时内可能产生约 100GiB 的显著偏差,text_log 中也可能出现几乎相同的偏差)。 [#87584](https://github.com/ClickHouse/ClickHouse/pull/87584) ([Azat Khuzhin](https://github.com/azat))。 +* 修复了一个错误:当某个 View 或物化视图被异步删除,且服务器在完成后台清理之前重启时,可能会导致该视图的 SELECT 设置覆盖全局服务器设置。 [#87603](https://github.com/ClickHouse/ClickHouse/pull/87603) ([Alexander Tokmakov](https://github.com/tavplubix))。 +* 在计算内存过载预警时(如果可能),排除用户空间页缓存所占字节数。 [#87610](https://github.com/ClickHouse/ClickHouse/pull/87610) ([Bharat Nallan](https://github.com/bharatnc)). +* 修复了在 CSV 反序列化过程中,由于类型顺序不正确而导致 `LOGICAL_ERROR` 的问题。 [#87622](https://github.com/ClickHouse/ClickHouse/pull/87622) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* 修复在可执行字典中对 `command_read_timeout` 的错误处理。[#87627](https://github.com/ClickHouse/ClickHouse/pull/87627)([Azat Khuzhin](https://github.com/azat))。 +* 修复了在使用新分析器且对被替换列进行过滤时,`SELECT * REPLACE` 在 `WHERE` 子句中的错误行为。 [#87630](https://github.com/ClickHouse/ClickHouse/pull/87630) ([xiaohuanlin](https://github.com/xiaohuanlin)). * 修复在 `Distributed` 之上使用 `Merge` 时的两层聚合问题。 [#87687](https://github.com/ClickHouse/ClickHouse/pull/87687) ([c-end](https://github.com/c-end)). -* 在未使用右侧行列表时,修复 HashJoin 算法中输出块的生成逻辑。修复了 [#87401](https://github.com/ClickHouse/ClickHouse/issues/87401)。[#87699](https://github.com/ClickHouse/ClickHouse/pull/87699)([Dmitry Novik](https://github.com/novikd))。 -* 在应用索引分析后,如果没有可读数据,可能会错误地选择并行副本读取模式。修复了 [#87653](https://github.com/ClickHouse/ClickHouse/issues/87653)。 [#87700](https://github.com/ClickHouse/ClickHouse/pull/87700) ([zoomxi](https://github.com/zoomxi))。 -* 修复 Glue 中对 `timestamp` / `timestamptz` 列的处理。[#87733](https://github.com/ClickHouse/ClickHouse/pull/87733) ([Andrey Zvonov](https://github.com/zvonand))。 +* 修复在未使用右侧行列表时 HashJoin 算法中输出数据块的生成。修复了 [#87401](https://github.com/ClickHouse/ClickHouse/issues/87401)。[#87699](https://github.com/ClickHouse/ClickHouse/pull/87699)([Dmitry Novik](https://github.com/novikd))。 +* 在应用索引分析后如果没有可读数据,可能会错误地选择并行副本读取模式。修复了 [#87653](https://github.com/ClickHouse/ClickHouse/issues/87653)。[#87700](https://github.com/ClickHouse/ClickHouse/pull/87700) ([zoomxi](https://github.com/zoomxi))。 +* 修复在 Glue 中处理 `timestamp` / `timestamptz` 列的问题。[#87733](https://github.com/ClickHouse/ClickHouse/pull/87733)([Andrey Zvonov](https://github.com/zvonand))。 * 此更改关闭了 [#86587](https://github.com/ClickHouse/ClickHouse/issues/86587)。[#87761](https://github.com/ClickHouse/ClickHouse/pull/87761)([scanhex12](https://github.com/scanhex12))。 -* 修复通过 PostgreSQL 接口写入布尔值的问题。[#87762](https://github.com/ClickHouse/ClickHouse/pull/87762)([Artem Yurov](https://github.com/ArtemYurov))。 -* 修复在带有 CTE 的 INSERT SELECT 查询中出现的 unknown table 错误,[#85368](https://github.com/ClickHouse/ClickHouse/issues/85368)。[#87789](https://github.com/ClickHouse/ClickHouse/pull/87789)([Guang Zhao](https://github.com/zheguang))。 -* 修复从不能嵌套在 Nullable 中的 Variants 类型中读取 null map 子列的问题。 [#87798](https://github.com/ClickHouse/ClickHouse/pull/87798) ([Pavel Kruglov](https://github.com/Avogar)). -* 修复在集群的从节点上执行删除数据库操作未能在整个集群中完全删除时的错误处理问题。 [#87802](https://github.com/ClickHouse/ClickHouse/pull/87802) ([Tuan Pham Anh](https://github.com/tuanpach)). -* 修复若干 skip index 相关缺陷。 [#87817](https://github.com/ClickHouse/ClickHouse/pull/87817) ([Raúl Marín](https://github.com/Algunenano)). -* 在 AzureBlobStorage 中,更新为先尝试原生复制,若出现 “Unauthroized” 错误,则回退为通过读写进行复制(在 AzureBlobStorage 中,如果源和目标使用不同的存储账户,则会出现 “Unauthorized” 错误)。并修复了在配置中定义了 endpoint 时应用 "use_native_copy" 的问题。[#87826](https://github.com/ClickHouse/ClickHouse/pull/87826)([Smita Kulkarni](https://github.com/SmitaRKulkarni))。 -* 如果 ArrowStream 文件包含不唯一的字典,ClickHouse 会崩溃。 [#87863](https://github.com/ClickHouse/ClickHouse/pull/87863) ([Ilya Golshtein](https://github.com/ilejn)). -* 修复在使用 approx_top_k 和 finalizeAggregation 时出现的致命错误。 [#87892](https://github.com/ClickHouse/ClickHouse/pull/87892) ([Jitendra](https://github.com/jitendra1411)). -* 修复在最后一个数据块为空时的投影合并问题。 [#87928](https://github.com/ClickHouse/ClickHouse/pull/87928) ([Raúl Marín](https://github.com/Algunenano)). -* 如果参数类型在 GROUP BY 中不允许使用,则不要从 GROUP BY 中移除单射函数。[#87958](https://github.com/ClickHouse/ClickHouse/pull/87958)([Pavel Kruglov](https://github.com/Avogar))。 -* 修复在查询中使用 `session_timezone` 设置时,基于 datetime 的键在进行 granules/partitions 裁剪时出现错误的问题。[#87987](https://github.com/ClickHouse/ClickHouse/pull/87987) ([Eduard Karacharov](https://github.com/korowa))。 -* 在 PostgreSQL 接口中,查询执行后返回受影响的行数。 [#87990](https://github.com/ClickHouse/ClickHouse/pull/87990) ([Artem Yurov](https://github.com/ArtemYurov)). -* 限制在 PASTE JOIN 中使用过滤下推,因为这可能导致结果不正确。 [#88078](https://github.com/ClickHouse/ClickHouse/pull/88078) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* 在对 [https://github.com/ClickHouse/ClickHouse/pull/84503](https://github.com/ClickHouse/ClickHouse/pull/84503) 引入的授权检查进行评估之前先应用 URI 规范化。[#88089](https://github.com/ClickHouse/ClickHouse/pull/88089)([pufit](https://github.com/pufit))。 -* 修复新分析器中,当 ARRAY JOIN COLUMNS() 未匹配到任何列时的逻辑错误。[#88091](https://github.com/ClickHouse/ClickHouse/pull/88091) ([xiaohuanlin](https://github.com/xiaohuanlin)). -* 修复 "High ClickHouse memory usage" 警告(不包含页缓存)。[#88092](https://github.com/ClickHouse/ClickHouse/pull/88092) ([Azat Khuzhin](https://github.com/azat)). -* 修复了在设置了列级 `TTL` 的 `MergeTree` 表中可能出现的数据损坏问题。 [#88095](https://github.com/ClickHouse/ClickHouse/pull/88095) ([Anton Popov](https://github.com/CurtizJ)). -* 修复在挂载包含无效表的外部数据库(`PostgreSQL`/`SQLite`/...)时读取 `system.tables` 可能出现的未捕获异常。[#88105](https://github.com/ClickHouse/ClickHouse/pull/88105) ([Azat Khuzhin](https://github.com/azat)). -* 修复了在以空元组作为参数调用 `mortonEncode` 和 `hilbertEncode` 函数时发生的崩溃问题。 [#88110](https://github.com/ClickHouse/ClickHouse/pull/88110) ([xiaohuanlin](https://github.com/xiaohuanlin)). -* 现在,当集群中存在不活动副本时,`ON CLUSTER` 查询将耗费更少时间。[#88153](https://github.com/ClickHouse/ClickHouse/pull/88153) ([alesapin](https://github.com/alesapin))。 -* 现在 DDL worker 会从副本集中清理过期的主机,从而减少存储在 ZooKeeper 中的元数据数量。[#88154](https://github.com/ClickHouse/ClickHouse/pull/88154) ([alesapin](https://github.com/alesapin))。 -* 修复在没有 cgroups 的情况下运行 ClickHouse 的问题(此前异步指标无意间将 cgroups 设为必需条件)。 [#88164](https://github.com/ClickHouse/ClickHouse/pull/88164) ([Azat Khuzhin](https://github.com/azat)). -* 在发生错误时,对移动目录操作进行正确回滚。我们需要重写执行期间更改的所有 `prefix.path` 对象,而不仅仅是根对象。[#88198](https://github.com/ClickHouse/ClickHouse/pull/88198) ([Mikhail Artemenko](https://github.com/Michicosun))。 -* 修复了 `ColumnLowCardinality` 中 `is_shared` 标志的传播问题。如果在 `ReverseIndex` 中的哈希值已经预先计算并缓存之后,再向列中插入新值,可能会导致错误的 GROUP BY 结果。[#88213](https://github.com/ClickHouse/ClickHouse/pull/88213)([Nikita Taranov](https://github.com/nickitat))。 -* 修复了工作负载设置 `max_cpu_share` 的问题。现在即使未设置 `max_cpus` 工作负载设置,也可以单独使用它。[#88217](https://github.com/ClickHouse/ClickHouse/pull/88217) ([Neerav](https://github.com/neeravsalaria))。 -* 修复了一个问题:包含子查询且负载很重的 mutation 操作可能会卡在准备阶段。现在可以使用 `SYSTEM STOP MERGES` 来停止这些 mutation 操作。[#88241](https://github.com/ClickHouse/ClickHouse/pull/88241) ([alesapin](https://github.com/alesapin)). -* 现在可以在对象存储上使用关联子查询。[#88290](https://github.com/ClickHouse/ClickHouse/pull/88290) ([alesapin](https://github.com/alesapin))。 -* 避免在访问 `system.projections` 和 `system.data_skipping_indices` 的同时尝试初始化 DataLake 数据库。[#88330](https://github.com/ClickHouse/ClickHouse/pull/88330) ([Azat Khuzhin](https://github.com/azat))。 -* 现在,只有显式启用 `show_data_lake_catalogs_in_system_tables` 时,系统自省表中才会显示数据湖目录。[#88341](https://github.com/ClickHouse/ClickHouse/pull/88341) ([alesapin](https://github.com/alesapin))。 -* 修复了 DatabaseReplicated 以遵循 `interserver_http_host` 配置。[#88378](https://github.com/ClickHouse/ClickHouse/pull/88378) ([xiaohuanlin](https://github.com/xiaohuanlin)). -* 在定义 Projections 时,现在已明确禁用位置参数,因为在该内部查询阶段使用它们并不合理。此更改修复了 [#48604](https://github.com/ClickHouse/ClickHouse/issues/48604)。[#88380](https://github.com/ClickHouse/ClickHouse/pull/88380)([Amos Bird](https://github.com/amosbird))。 -* 修复 `countMatches` 函数中平方级时间复杂度的问题,并关闭 [#88400](https://github.com/ClickHouse/ClickHouse/issues/88400)。[#88401](https://github.com/ClickHouse/ClickHouse/pull/88401)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 使 KeeperMap 表的 `ALTER COLUMN ... COMMENT` 命令具备复制能力,从而将其提交到 Replicated 数据库的元数据,并在所有副本之间传播。修复 [#88077](https://github.com/ClickHouse/ClickHouse/issues/88077)。[#88408](https://github.com/ClickHouse/ClickHouse/pull/88408)([Eduard Karacharov](https://github.com/korowa))。 -* 修复了在 Database Replicated 中使用物化视图时出现的伪循环依赖问题,该问题导致无法向数据库添加新副本。 [#88423](https://github.com/ClickHouse/ClickHouse/pull/88423) ([Nikolay Degterinsky](https://github.com/evillique)). -* 修复在将 `group_by_overflow_mode` 设置为 `any` 时对稀疏列的聚合。[#88440](https://github.com/ClickHouse/ClickHouse/pull/88440)([Eduard Karacharov](https://github.com/korowa))。 -* 修复在将 `query_plan_use_logical_join_step=0` 与多个 FULL JOIN USING 子句组合使用时出现的 “column not found” 错误,解决了 [#88103](https://github.com/ClickHouse/ClickHouse/issues/88103) 中报告的问题。[#88473](https://github.com/ClickHouse/ClickHouse/pull/88473)([Vladimir Cherkasov](https://github.com/vdimir))。 -* 节点数 > 10 的大型集群在执行恢复时很可能会失败,报错 `[941] 67c45db4-4df4-4879-87c5-25b8d1e0d414 <Trace>: RestoreCoordinationOnCluster The version of node /clickhouse/backups/restore-7c551a77-bd76-404c-bad0-3213618ac58e/stage/num_hosts changed (attempt #9), will try again`。`num_hosts` 节点会被许多主机同时覆盖。此修复将用于控制重试次数的设置改为动态。关闭 [#87721](https://github.com/ClickHouse/ClickHouse/issues/87721)。[#88484](https://github.com/ClickHouse/ClickHouse/pull/88484) ([Mikhail f. Shiryaev](https://github.com/Felixoid))。 -* 此 PR 只是为兼容 23.8 及之前的版本。兼容性问题由此 PR 引入:[#54240](https://github.com/ClickHouse/ClickHouse/pull/54240)。在 `enable_analyzer=0` 时(23.8 之前是正常的),该 SQL 将会执行失败。[#88491](https://github.com/ClickHouse/ClickHouse/pull/88491)([JIaQi](https://github.com/JiaQiTang98))。 -* 修复在将大值转换为 DateTime 时,`accurateCast` 错误消息中触发的 UBSAN 整数溢出问题。[#88520](https://github.com/ClickHouse/ClickHouse/pull/88520) ([xiaohuanlin](https://github.com/xiaohuanlin)). -* 修复 CoalescingMergeTree 对 tuple 类型的支持。解决了 [#88469](https://github.com/ClickHouse/ClickHouse/issues/88469)。[#88526](https://github.com/ClickHouse/ClickHouse/pull/88526)([scanhex12](https://github.com/scanhex12))。 -* 禁止对 `iceberg_format_version=1` 执行删除操作。此更改解决了 [#88444](https://github.com/ClickHouse/ClickHouse/issues/88444)。[#88532](https://github.com/ClickHouse/ClickHouse/pull/88532)([scanhex12](https://github.com/scanhex12))。 -* 此补丁修复了 `plain-rewritable` 磁盘对任意深度文件夹的移动操作。[#88586](https://github.com/ClickHouse/ClickHouse/pull/88586)([Mikhail Artemenko](https://github.com/Michicosun))。 -* 修复与 *cluster 函数一起使用时的 SQL SECURITY DEFINER。[#88588](https://github.com/ClickHouse/ClickHouse/pull/88588) ([Julian Maicher](https://github.com/jmaicher))。 -* 修复由于对底层 const PREWHERE 列的并发修改导致的潜在崩溃。[#88605](https://github.com/ClickHouse/ClickHouse/pull/88605) ([Azat Khuzhin](https://github.com/azat))。 -* 修复了从文本索引读取时的问题,并启用了查询条件缓存(通过启用 `use_skip_indexes_on_data_read` 和 `use_query_condition_cache` 设置)。[#88660](https://github.com/ClickHouse/ClickHouse/pull/88660)([Anton Popov](https://github.com/CurtizJ))。 -* 从 `Poco::Net::HTTPChunkedStreamBuf::readFromDevice` 抛出的 `Poco::TimeoutException` 异常会导致进程因 SIGABRT 信号崩溃。[#88668](https://github.com/ClickHouse/ClickHouse/pull/88668)([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 -* 已在 [#88910](https://github.com/ClickHouse/ClickHouse/issues/88910) 中回溯修复:在恢复之后,Replicated 数据库的副本可能会长时间卡住,并持续打印类似 `Failed to marked query-0004647339 as finished (finished=No node, synced=No node)` 的消息,该问题已修复。[#88671](https://github.com/ClickHouse/ClickHouse/pull/88671)([Alexander Tokmakov](https://github.com/tavplubix))。 -* 修复在重新加载配置后,ClickHouse 首次连接时向 `system.zookeeper_connection_log` 追加记录的问题。[#88728](https://github.com/ClickHouse/ClickHouse/pull/88728) ([Antonio Andelic](https://github.com/antonio2368))。 -* 修复了一个问题:在处理时区时,当使用 `date_time_overflow_behavior = 'saturate'` 将 DateTime64 转换为 Date 时,对于超出范围的值可能会产生不正确的结果。[#88737](https://github.com/ClickHouse/ClickHouse/pull/88737) ([Manuel](https://github.com/raimannma))。 -* 第 N 次尝试修复在启用缓存的 S3 表引擎中出现的 “having zero bytes” 错误。 [#88740](https://github.com/ClickHouse/ClickHouse/pull/88740) ([Kseniia Sumarokova](https://github.com/kssenii)). -* 修复了对 `loop` 表函数执行 SELECT 查询时的访问权限校验。[#88802](https://github.com/ClickHouse/ClickHouse/pull/88802) ([pufit](https://github.com/pufit)). -* 在异步日志写入失败时捕获异常,防止程序异常退出。[#88814](https://github.com/ClickHouse/ClickHouse/pull/88814)([Raúl Marín](https://github.com/Algunenano))。 -* 已在 [#89060](https://github.com/ClickHouse/ClickHouse/issues/89060) 中回溯:修复 `top_k` 在仅以单个参数调用时未遵守阈值参数的问题。关闭 [#88757](https://github.com/ClickHouse/ClickHouse/issues/88757)。[#88867](https://github.com/ClickHouse/ClickHouse/pull/88867)([Manuel](https://github.com/raimannma))。 -* 已在 [#88944](https://github.com/ClickHouse/ClickHouse/issues/88944) 中回溯移植:修复函数 `reverseUTF8` 中的错误。在之前的版本中,它错误地反转了长度为 4 字节的 UTF-8 码点。此次修复关闭了 [#88913](https://github.com/ClickHouse/ClickHouse/issues/88913)。[#88914](https://github.com/ClickHouse/ClickHouse/pull/88914)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 已在 [#88980](https://github.com/ClickHouse/ClickHouse/issues/88980) 中回溯修复:在使用 SQL SECURITY DEFINER 创建视图时,不再检查 `SET DEFINER :definer` 的访问权限。[#88968](https://github.com/ClickHouse/ClickHouse/pull/88968)([pufit](https://github.com/pufit))。 -* 已在 [#89058](https://github.com/ClickHouse/ClickHouse/issues/89058) 中回溯移植:修复了在 `L2DistanceTransposed(vec1, vec2, p)` 中出现的 `LOGICAL_ERROR`,该错误是由于针对部分 `QBit` 读取的优化在 `p` 为 `Nullable` 时错误地从返回类型中移除了 `Nullable`。[#88974](https://github.com/ClickHouse/ClickHouse/pull/88974)([Raufs Dunamalijevs](https://github.com/rienath))。 -* 已在 [#89167](https://github.com/ClickHouse/ClickHouse/issues/89167) 中回溯修复:修正未知 catalog 类型导致的崩溃。已解决 [#88819](https://github.com/ClickHouse/ClickHouse/issues/88819)。[#88987](https://github.com/ClickHouse/ClickHouse/pull/88987)([scanhex12](https://github.com/scanhex12))。 -* 已在 [#89028](https://github.com/ClickHouse/ClickHouse/issues/89028) 中回溯修复:修复了跳过索引分析中的性能下降问题。[#89004](https://github.com/ClickHouse/ClickHouse/pull/89004)([Anton Popov](https://github.com/CurtizJ))。 - - - -#### 构建/测试/打包改进 -* 使用 `postgres` 库版本 18.0。 [#87647](https://github.com/ClickHouse/ClickHouse/pull/87647) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* 为 FreeBSD 启用 ICU。 [#87891](https://github.com/ClickHouse/ClickHouse/pull/87891) ([Raúl Marín](https://github.com/Algunenano)). -* 在通过动态分派使用 SSE 4.2 时,真正使用 SSE 4.2 而不是 SSE 4。 [#88029](https://github.com/ClickHouse/ClickHouse/pull/88029) ([Raúl Marín](https://github.com/Algunenano)). -* 如果 `Speculative Store Bypass Safe` 不可用,则不再要求 `NO_ARMV81_OR_HIGHER` 标志。 [#88051](https://github.com/ClickHouse/ClickHouse/pull/88051) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* 当以 `ENABLE_LIBFIU=OFF` 选项构建 ClickHouse 时,与 failpoint 相关的函数将变为空操作(no-op),不再对性能产生影响。在这种情况下,`SYSTEM ENABLE/DISABLE FAILPOINT` 查询会返回 `SUPPORT_IS_DISABLED` 错误。 [#88184](https://github.com/ClickHouse/ClickHouse/pull/88184) ([c-end](https://github.com/c-end)). - - -### ClickHouse 发布 25.9,2025-09-25 {#259} - -#### 向后不兼容的变更 -* 禁用对 IPv4/IPv6 的无意义二元运算:禁用 IPv4/IPv6 与非整数类型的加减运算。此前允许与浮点类型进行运算,并在某些其他类型(例如 DateTime)上抛出逻辑错误。 [#86336](https://github.com/ClickHouse/ClickHouse/pull/86336) ([Raúl Marín](https://github.com/Algunenano)). -* 弃用配置项 `allow_dynamic_metadata_for_data_lakes`。现在所有 Iceberg 表在执行每个查询之前,都会尝试从存储中获取最新的表模式。 [#86366](https://github.com/ClickHouse/ClickHouse/pull/86366) ([Daniil Ivanik](https://github.com/divanik)). -* 更改来自 `OUTER JOIN ... USING` 子句的合并列(coalesced column)的解析方式,使其更加一致:之前,在 OUTER JOIN 中同时选择 USING 列和限定列(`a, t1.a, t2.a`)时,USING 列会被错误地解析为 `t1.a`,从而对右表中没有左表匹配的行显示为 0/NULL。现在,来自 USING 子句的标识符始终解析为合并列,而限定标识符解析为非合并列,与查询中还存在哪些其他标识符无关。例如:```sql SELECT a, t1.a, t2.a FROM (SELECT 1 as a WHERE 0) t1 FULL JOIN (SELECT 2 as a) t2 USING (a) -- 之前:a=0, t1.a=0, t2.a=2(错误——'a' 被解析为 t1.a) -- 之后:a=2, t1.a=0, t2.a=2(正确——'a' 为合并列)。 [#80848](https://github.com/ClickHouse/ClickHouse/pull/80848) ([Vladimir Cherkasov](https://github.com/vdimir)). -* 将复制表的去重窗口增加到 10000。此变更在语义上完全兼容,但可以预见,在存在大量表的情况下,该变更可能导致较高的资源消耗。 [#86820](https://github.com/ClickHouse/ClickHouse/pull/86820) ([Sema Checherinda](https://github.com/CheSema)). - +* 修复 PostgreSQL 接口中的布尔值写入。[#87762](https://github.com/ClickHouse/ClickHouse/pull/87762) ([Artem Yurov](https://github.com/ArtemYurov)). +* 修复在包含 CTE 的 INSERT SELECT 查询中出现的 “unknown table” 错误,[#85368](https://github.com/ClickHouse/ClickHouse/issues/85368)。[#87789](https://github.com/ClickHouse/ClickHouse/pull/87789)([Guang Zhao](https://github.com/zheguang))。 +* 修复从无法位于 Nullable 中的 Variant 读取为 null 的 map 子列时的问题。 [#87798](https://github.com/ClickHouse/ClickHouse/pull/87798) ([Pavel Kruglov](https://github.com/Avogar)). +* 修复在集群的次级节点上未能在整个集群中完全删除数据库时的错误处理。[#87802](https://github.com/ClickHouse/ClickHouse/pull/87802) ([Tuan Pham Anh](https://github.com/tuanpach)). +* 修复了多个与 skip indices 相关的 bug。[#87817](https://github.com/ClickHouse/ClickHouse/pull/87817) ([Raúl Marín](https://github.com/Algunenano))。 +* 在 AzureBlobStorage 中,更新为先尝试原生复制,如遇到“Unauthroized”错误则回退到读写方式(在 AzureBlobStorage 中,如果源和目标使用不同的存储账户,会出现“Unauthorized”错误)。并修复了当在配置中定义了 endpoint 时应用 "use_native_copy" 的问题。 [#87826](https://github.com/ClickHouse/ClickHouse/pull/87826) ([Smita Kulkarni](https://github.com/SmitaRKulkarni)). +* 如果 ArrowStream 文件包含非唯一字典,ClickHouse 会崩溃。[#87863](https://github.com/ClickHouse/ClickHouse/pull/87863) ([Ilya Golshtein](https://github.com/ilejn))。 +* 修复在使用 approx_top_k 和 finalizeAggregation 时的致命错误。[#87892](https://github.com/ClickHouse/ClickHouse/pull/87892) ([Jitendra](https://github.com/jitendra1411)). +* 修复当最后一个数据块为空时的投影合并问题。[#87928](https://github.com/ClickHouse/ClickHouse/pull/87928) ([Raúl Marín](https://github.com/Algunenano))。 +* 如果参数类型不允许用于 GROUP BY,则不要从 GROUP BY 中移除单射函数。[#87958](https://github.com/ClickHouse/ClickHouse/pull/87958) ([Pavel Kruglov](https://github.com/Avogar))。 +* 修复在查询中使用 `session_timezone` 设置时,基于 datetime 的键进行数据块/分区裁剪不正确的问题。[#87987](https://github.com/ClickHouse/ClickHouse/pull/87987) ([Eduard Karacharov](https://github.com/korowa))。 +* 在 PostgreSQL 接口中在查询执行后返回受影响的行数。[#87990](https://github.com/ClickHouse/ClickHouse/pull/87990)([Artem Yurov](https://github.com/ArtemYurov))。 +* 限制在 PASTE JOIN 中使用过滤下推功能,因为这可能导致结果不正确。[#88078](https://github.com/ClickHouse/ClickHouse/pull/88078) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* 在对 [https://github.com/ClickHouse/ClickHouse/pull/84503](https://github.com/ClickHouse/ClickHouse/pull/84503) 中引入的权限检查进行评估之前先应用 URI 规范化。[#88089](https://github.com/ClickHouse/ClickHouse/pull/88089)([pufit](https://github.com/pufit))。 +* 修复了在新的分析器中,当 ARRAY JOIN COLUMNS() 未匹配到任何列时的逻辑错误。 [#88091](https://github.com/ClickHouse/ClickHouse/pull/88091) ([xiaohuanlin](https://github.com/xiaohuanlin)). +* 修复 “ClickHouse 内存使用率过高” 警告(排除页面缓存)。 [#88092](https://github.com/ClickHouse/ClickHouse/pull/88092) ([Azat Khuzhin](https://github.com/azat)). +* 修复了在设置了列级 `TTL` 的 `MergeTree` 表中可能发生的数据损坏问题。 [#88095](https://github.com/ClickHouse/ClickHouse/pull/88095) ([Anton Popov](https://github.com/CurtizJ)). +* 修复在附加了包含无效表的外部数据库(`PostgreSQL`/`SQLite`/...)的情况下读取 `system.tables` 时可能发生的未捕获异常。[#88105](https://github.com/ClickHouse/ClickHouse/pull/88105) ([Azat Khuzhin](https://github.com/azat)). +* 修复在使用空元组参数调用 `mortonEncode` 和 `hilbertEncode` 函数时出现的崩溃问题。[#88110](https://github.com/ClickHouse/ClickHouse/pull/88110) ([xiaohuanlin](https://github.com/xiaohuanlin)). +* 现在在集群中存在不活动副本时,`ON CLUSTER` 查询将花费更少的时间。[#88153](https://github.com/ClickHouse/ClickHouse/pull/88153) ([alesapin](https://github.com/alesapin))。 +* 现在 DDL worker 会从副本集中清理过期的主机。这将减少存储在 ZooKeeper 中的元数据量。[#88154](https://github.com/ClickHouse/ClickHouse/pull/88154) ([alesapin](https://github.com/alesapin))。 +* 修复在未启用 cgroups 的情况下运行 ClickHouse 的问题(此前异步指标误将 cgroups 设为必需条件)。[#88164](https://github.com/ClickHouse/ClickHouse/pull/88164) ([Azat Khuzhin](https://github.com/azat)). +* 在出错时正确回滚移动目录操作。我们需要重写执行过程中更改的所有 `prefix.path` 对象,而不仅仅是根对象。[#88198](https://github.com/ClickHouse/ClickHouse/pull/88198) ([Mikhail Artemenko](https://github.com/Michicosun)). +* 修复了 `ColumnLowCardinality` 中 `is_shared` 标志的传播问题。如果在 `ReverseIndex` 中的哈希值已经预先计算并缓存之后,又在该列中插入了新值,可能会导致错误的 GROUP BY 结果。[#88213](https://github.com/ClickHouse/ClickHouse/pull/88213) ([Nikita Taranov](https://github.com/nickitat))。 +* 修复了工作负载设置项 `max_cpu_share`。现在即使未设置工作负载设置项 `max_cpus`,也可以使用它。[#88217](https://github.com/ClickHouse/ClickHouse/pull/88217) ([Neerav](https://github.com/neeravsalaria)). +* 修复了带有子查询的高负载 mutation 会卡在准备阶段的问题。现在可以使用 `SYSTEM STOP MERGES` 来停止这些 mutation。[#88241](https://github.com/ClickHouse/ClickHouse/pull/88241) ([alesapin](https://github.com/alesapin)). +* 现在,关联子查询也可以与对象存储一起使用。[#88290](https://github.com/ClickHouse/ClickHouse/pull/88290) ([alesapin](https://github.com/alesapin))。 +* 避免在访问 `system.projections` 和 `system.data_skipping_indices` 的同时初始化 DataLake 数据库。 [#88330](https://github.com/ClickHouse/ClickHouse/pull/88330) ([Azat Khuzhin](https://github.com/azat)). +* 现在,只有在显式启用 `show_data_lake_catalogs_in_system_tables` 时,数据湖目录才会显示在系统内省表中。[#88341](https://github.com/ClickHouse/ClickHouse/pull/88341) ([alesapin](https://github.com/alesapin))。 +* 修复了 DatabaseReplicated,使其遵守 `interserver_http_host` 配置。[#88378](https://github.com/ClickHouse/ClickHouse/pull/88378) ([xiaohuanlin](https://github.com/xiaohuanlin)). +* 在定义 Projection 的上下文中,现在已显式禁用位置参数,因为在该内部查询阶段使用它们并不合理。此更改修复了 [#48604](https://github.com/ClickHouse/ClickHouse/issues/48604)。[#88380](https://github.com/ClickHouse/ClickHouse/pull/88380)([Amos Bird](https://github.com/amosbird))。 +* 修复 `countMatches` 函数中的二次时间复杂度问题。关闭 [#88400](https://github.com/ClickHouse/ClickHouse/issues/88400)。[#88401](https://github.com/ClickHouse/ClickHouse/pull/88401)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 使针对 KeeperMap 表的 `ALTER COLUMN ... COMMENT` 命令也会被复制,从而写入到 Replicated 数据库的元数据中,并在所有副本间传播。修复 [#88077](https://github.com/ClickHouse/ClickHouse/issues/88077)。[#88408](https://github.com/ClickHouse/ClickHouse/pull/88408)([Eduard Karacharov](https://github.com/korowa))。 +* 修复在 `Database Replicated` 中与物化视图相关的伪循环依赖问题,该问题会阻止向数据库添加新的副本。[#88423](https://github.com/ClickHouse/ClickHouse/pull/88423)([Nikolay Degterinsky](https://github.com/evillique))。 +* 修复在 `group_by_overflow_mode` 设置为 `any` 时对稀疏列的聚合。[#88440](https://github.com/ClickHouse/ClickHouse/pull/88440) ([Eduard Karacharov](https://github.com/korowa))。 +* 修复在使用 `query_plan_use_logical_join_step=0` 且包含多个 FULL JOIN USING 子句时出现的 "column not found" 错误。解决 [#88103](https://github.com/ClickHouse/ClickHouse/issues/88103)。[#88473](https://github.com/ClickHouse/ClickHouse/pull/88473)([Vladimir Cherkasov](https://github.com/vdimir))。 +* 节点数量 > 10 的大型集群在执行恢复时,很容易因为错误 `[941] 67c45db4-4df4-4879-87c5-25b8d1e0d414 <Trace>: RestoreCoordinationOnCluster The version of node /clickhouse/backups/restore-7c551a77-bd76-404c-bad0-3213618ac58e/stage/num_hosts changed (attempt #9), will try again` 而失败。`num_hosts` 节点会被许多主机同时覆盖。此修复将用于控制重试次数的设置改为动态可调。关闭 [#87721](https://github.com/ClickHouse/ClickHouse/issues/87721)。[#88484](https://github.com/ClickHouse/ClickHouse/pull/88484)([Mikhail f. Shiryaev](https://github.com/Felixoid))。 +* 此 PR 仅用于与 23.8 及之前的版本保持兼容。兼容性问题由此 PR 引入: [https://github.com/ClickHouse/ClickHouse/pull/54240](https://github.com/ClickHouse/ClickHouse/pull/54240) 这条 SQL 在 `enable_analyzer=0` 时会执行失败(在 23.8 之前是正常的)。[#88491](https://github.com/ClickHouse/ClickHouse/pull/88491)([JIaQi](https://github.com/JiaQiTang98))。 +* 修复在将大数值转换为 DateTime 时,`accurateCast` 错误消息中 UBSAN 报告的整数溢出问题。 [#88520](https://github.com/ClickHouse/ClickHouse/pull/88520) ([xiaohuanlin](https://github.com/xiaohuanlin)). +* 修复 `CoalescingMergeTree` 对 tuple 类型的处理。这一变更关闭了 [#88469](https://github.com/ClickHouse/ClickHouse/issues/88469)。[#88526](https://github.com/ClickHouse/ClickHouse/pull/88526)([scanhex12](https://github.com/scanhex12))。 +* 禁止对 `iceberg_format_version=1` 执行删除操作。解决了 [#88444](https://github.com/ClickHouse/ClickHouse/issues/88444)。[#88532](https://github.com/ClickHouse/ClickHouse/pull/88532)([scanhex12](https://github.com/scanhex12))。 +* 此补丁修复了 `plain-rewritable` 磁盘在任意深度文件夹中执行移动操作时的问题。[#88586](https://github.com/ClickHouse/ClickHouse/pull/88586) ([Mikhail Artemenko](https://github.com/Michicosun)). +* 修复与 *cluster 函数一起使用的 SQL SECURITY DEFINER。 [#88588](https://github.com/ClickHouse/ClickHouse/pull/88588) ([Julian Maicher](https://github.com/jmaicher)). +* 修复由于对底层 const PREWHERE 列的并发修改导致的潜在崩溃问题。[#88605](https://github.com/ClickHouse/ClickHouse/pull/88605) ([Azat Khuzhin](https://github.com/azat)). +* 修复了从文本索引读取数据的问题,并启用了查询条件缓存(通过启用设置 `use_skip_indexes_on_data_read` 和 `use_query_condition_cache`)。 [#88660](https://github.com/ClickHouse/ClickHouse/pull/88660) ([Anton Popov](https://github.com/CurtizJ)). +* 从 `Poco::Net::HTTPChunkedStreamBuf::readFromDevice` 抛出的 `Poco::TimeoutException` 异常会导致因 SIGABRT 崩溃。 [#88668](https://github.com/ClickHouse/ClickHouse/pull/88668) ([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 +* 已在 [#88910](https://github.com/ClickHouse/ClickHouse/issues/88910) 中回溯修复:在恢复后,Replicated 数据库的副本可能会长时间卡住,并持续打印类似 `Failed to marked query-0004647339 as finished (finished=No node, synced=No node)` 的日志信息,该问题已修复。[#88671](https://github.com/ClickHouse/ClickHouse/pull/88671)([Alexander Tokmakov](https://github.com/tavplubix))。 +* 修复在配置重新加载后,ClickHouse 首次建立连接时向 `system.zookeeper_connection_log` 追加写入的行为。 [#88728](https://github.com/ClickHouse/ClickHouse/pull/88728) ([Antonio Andelic](https://github.com/antonio2368)). +* 修复了一个缺陷:在处理时区时,将 DateTime64 转换为 Date 且 `date_time_overflow_behavior = 'saturate'` 时,超出取值范围的数值可能会产生错误结果。[#88737](https://github.com/ClickHouse/ClickHouse/pull/88737) ([Manuel](https://github.com/raimannma))。 +* 第 N 次尝试修复在启用缓存的 S3 表引擎中出现的“having zero bytes”错误。 [#88740](https://github.com/ClickHouse/ClickHouse/pull/88740) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 修复了 `loop` 表函数在执行 `SELECT` 时的访问验证问题。[#88802](https://github.com/ClickHouse/ClickHouse/pull/88802) ([pufit](https://github.com/pufit))。 +* 在异步日志记录失败时捕获异常,防止程序异常终止。[#88814](https://github.com/ClickHouse/ClickHouse/pull/88814) ([Raúl Marín](https://github.com/Algunenano))。 +* 已在 [#89060](https://github.com/ClickHouse/ClickHouse/issues/89060) 中回溯该修复:修复 `top_k` 在仅以一个参数调用时未遵守阈值参数的问题。关闭了 [#88757](https://github.com/ClickHouse/ClickHouse/issues/88757)。[#88867](https://github.com/ClickHouse/ClickHouse/pull/88867)([Manuel](https://github.com/raimannma))。 +* 在 [#88944](https://github.com/ClickHouse/ClickHouse/issues/88944) 中回溯:修复函数 `reverseUTF8` 中的一个错误。在先前版本中,它会错误地反转长度为 4 的 UTF-8 码点的字节顺序。此更改关闭了 [#88913](https://github.com/ClickHouse/ClickHouse/issues/88913)。[#88914](https://github.com/ClickHouse/ClickHouse/pull/88914)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 已在 [#88980](https://github.com/ClickHouse/ClickHouse/issues/88980) 回溯移植:在使用 SQL SECURITY DEFINER 创建视图时,不再检查 `SET DEFINER <current_user>:definer` 的访问权限。[#88968](https://github.com/ClickHouse/ClickHouse/pull/88968)([pufit](https://github.com/pufit))。 +* 已在 [#89058](https://github.com/ClickHouse/ClickHouse/issues/89058) 中回溯:修复了 `L2DistanceTransposed(vec1, vec2, p)` 中的 `LOGICAL_ERROR`,该错误源于针对部分 `QBit` 读取的优化在 `p` 为 `Nullable` 类型时错误地从返回类型中移除了 `Nullable`。[#88974](https://github.com/ClickHouse/ClickHouse/pull/88974)([Raufs Dunamalijevs](https://github.com/rienath))。 +* 已在 [#89167](https://github.com/ClickHouse/ClickHouse/issues/89167) 中回溯修复:修复未知 catalog 类型导致的崩溃。解决了 [#88819](https://github.com/ClickHouse/ClickHouse/issues/88819)。[#88987](https://github.com/ClickHouse/ClickHouse/pull/88987)([scanhex12](https://github.com/scanhex12))。 +* 已在 [#89028](https://github.com/ClickHouse/ClickHouse/issues/89028) 中回溯修复:修复了在分析 skipping 索引时的性能下降问题。[#89004](https://github.com/ClickHouse/ClickHouse/pull/89004)([Anton Popov](https://github.com/CurtizJ))。 +#### 构建 / 测试 / 打包改进 -#### 新功能 +* 使用 `postgres` 库 18.0 版本。[#87647](https://github.com/ClickHouse/ClickHouse/pull/87647)([Konstantin Bogdanov](https://github.com/thevar1able))。 +* 为 FreeBSD 启用 ICU。[#87891](https://github.com/ClickHouse/ClickHouse/pull/87891)([Raúl Marín](https://github.com/Algunenano))。 +* 在使用动态调度到 SSE 4.2 时,使用 SSE 4.2 而不是 SSE 4。[#88029](https://github.com/ClickHouse/ClickHouse/pull/88029)([Raúl Marín](https://github.com/Algunenano))。 +* 如果 `Speculative Store Bypass Safe` 不可用,则不再要求 `NO_ARMV81_OR_HIGHER` 标志。[#88051](https://github.com/ClickHouse/ClickHouse/pull/88051)([Konstantin Bogdanov](https://github.com/thevar1able))。 +* 当 ClickHouse 使用 `ENABLE_LIBFIU=OFF` 构建时,与 failpoint 相关的函数会变为空操作(no-op),不再对性能产生影响。在这种情况下,`SYSTEM ENABLE/DISABLE FAILPOINT` 查询会返回 `SUPPORT_IS_DISABLED` 错误。[#88184](https://github.com/ClickHouse/ClickHouse/pull/88184)([c-end](https://github.com/c-end))。 -* 用户现在可以在 NATS 引擎中指定新的 `nats_stream` 和 `nats_consumer` 设置,从而使用 NATS JetStream 来消费消息。[#84799](https://github.com/ClickHouse/ClickHouse/pull/84799)([Dmitry Novikov](https://github.com/dmitry-sles-novikov))。 -* 在 `arrowFlight` 表函数中增加了对认证和 SSL 的支持。[#87120](https://github.com/ClickHouse/ClickHouse/pull/87120) ([Vitaly Baranov](https://github.com/vitlibar))。 -* 为 `S3` 表引擎和 `s3` 表函数新增名为 `storage_class_name` 的参数,用于指定 AWS 支持的智能分层存储。该参数同时支持键值格式和位置参数格式(位置参数格式已弃用)。[#87122](https://github.com/ClickHouse/ClickHouse/pull/87122) ([alesapin](https://github.com/alesapin))。 -* 为 Iceberg 表引擎提供 `ALTER UPDATE`。 [#86059](https://github.com/ClickHouse/ClickHouse/pull/86059) ([scanhex12](https://github.com/scanhex12)). -* 新增系统表 `iceberg_metadata_log`,用于在执行 SELECT 查询时检索 Iceberg 元数据文件。[#86152](https://github.com/ClickHouse/ClickHouse/pull/86152)([scanhex12](https://github.com/scanhex12))。 -* `Iceberg` 和 `DeltaLake` 表支持通过存储层级设置项 `disk` 来自定义磁盘配置。 [#86778](https://github.com/ClickHouse/ClickHouse/pull/86778) ([scanhex12](https://github.com/scanhex12)). -* 支持 Azure 数据湖磁盘。 [#87173](https://github.com/ClickHouse/ClickHouse/pull/87173) ([scanhex12](https://github.com/scanhex12)). -* 在 Azure Blob Storage 之上提供对 `Unity` 目录的支持。[#80013](https://github.com/ClickHouse/ClickHouse/pull/80013)([Smita Kulkarni](https://github.com/SmitaRKulkarni))。 -* 在 `Iceberg` 写入中支持更多格式(`ORC`、`Avro`)。解决了 [#86179](https://github.com/ClickHouse/ClickHouse/issues/86179)。[#87277](https://github.com/ClickHouse/ClickHouse/pull/87277)([scanhex12](https://github.com/scanhex12))。 -* 新增系统表 `database_replicas`,用于提供数据库副本相关信息。 [#83408](https://github.com/ClickHouse/ClickHouse/pull/83408) ([Konstantin Morozov](https://github.com/k-morozov))。 -* 新增函数 `arrayExcept`,用于在集合语义下,从一个数组中减去另一个数组的元素。[#82368](https://github.com/ClickHouse/ClickHouse/pull/82368)([Joanna Hulboj](https://github.com/jh0x))。 -* 新增 `system.aggregated_zookeeper_log` 表。该表包含按会话 ID、父路径和操作类型分组的 ZooKeeper 操作统计信息(例如操作次数、平均延迟、错误数),并会定期写入磁盘。[#85102](https://github.com/ClickHouse/ClickHouse/pull/85102) [#87208](https://github.com/ClickHouse/ClickHouse/pull/87208) ([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 -* 新增了函数 `isValidASCII`。如果输入字符串或 FixedString 仅包含 ASCII 字节(0x00–0x7F),则返回 1,否则返回 0。关闭 [#85377](https://github.com/ClickHouse/ClickHouse/issues/85377)。... [#85786](https://github.com/ClickHouse/ClickHouse/pull/85786)([rajat mohan](https://github.com/rajatmohan22))。 -* 布尔型设置项可以在不带参数的情况下指定,例如 `SET use_query_cache;`,这等价于将其设置为 true。[#85800](https://github.com/ClickHouse/ClickHouse/pull/85800)([thraeka](https://github.com/thraeka))。 -* 新的配置选项:`logger.startupLevel` 和 `logger.shutdownLevel` 用于分别在 ClickHouse 启动和关闭阶段覆写日志级别。[#85967](https://github.com/ClickHouse/ClickHouse/pull/85967)([Lennard Eijsackers](https://github.com/Blokje5))。 -* 聚合函数 `timeSeriesChangesToGrid` 和 `timeSeriesResetsToGrid`。其行为类似于 `timeSeriesRateToGrid`,接受开始时间戳、结束时间戳、步长以及回溯窗口等参数,同时还需要时间戳和值这两个实参,但要求每个窗口至少有 1 个样本而不是 2 个。计算 PromQL 的 `changes`/`resets`,在参数定义的时间网格中,对于每个时间戳统计样本值在指定窗口内发生变化或减小的次数。返回类型为 `Array(Nullable(Float64))`。[#86010](https://github.com/ClickHouse/ClickHouse/pull/86010)([Stephen Chi](https://github.com/stephchi0))。 -* 允许用户使用与创建临时表类似的语法(`CREATE TEMPORARY VIEW`)来创建临时视图。[#86432](https://github.com/ClickHouse/ClickHouse/pull/86432)([Aly Kafoury](https://github.com/AlyHKafoury))。 -* 向 `system.warnings` 表中添加关于 CPU 和内存使用的警告。[#86838](https://github.com/ClickHouse/ClickHouse/pull/86838) ([Bharat Nallan](https://github.com/bharatnc))。 -* 在 `Protobuf` 输入中支持 `oneof` 标记。可以使用一个特殊列来指示某个 oneof 字段是否存在。如果消息包含 [oneof](https://protobuf.dev/programming-guides/proto3/#oneof),并且设置了 `input_format_protobuf_oneof_presence`,ClickHouse 会填充一个列,用于指示实际匹配到 oneof 中的哪个字段。 [#82885](https://github.com/ClickHouse/ClickHouse/pull/82885) ([Ilya Golshtein](https://github.com/ilejn))。 -* 基于 jemalloc 的内部工具改进内存分配分析。现在可以通过配置 `jemalloc_enable_global_profiler` 启用全局 jemalloc 分析器。通过启用配置 `jemalloc_collect_global_profile_samples_in_trace_log`,采样得到的全局内存分配和释放记录可以以 `JemallocSample` 类型存储到 `system.trace_log` 中。现在可以通过设置 `jemalloc_enable_profiler`,为每个查询单独启用 jemalloc 分析。是否将样本存储到 `system.trace_log` 中,可以通过设置 `jemalloc_collect_profile_samples_in_trace_log` 在每个查询级别进行控制。将 jemalloc 更新到更高版本。[#85438](https://github.com/ClickHouse/ClickHouse/pull/85438) ([Antonio Andelic](https://github.com/antonio2368))。 -* 新增设置,用于在删除 Iceberg 表时一并删除文件。此改动解决了 [#86211](https://github.com/ClickHouse/ClickHouse/issues/86211)。[#86501](https://github.com/ClickHouse/ClickHouse/pull/86501)([scanhex12](https://github.com/scanhex12))。 +### ClickHouse 25.9 版本发布,2025-09-25 {#259} +#### 不向后兼容的变更 +* 禁用对 IPv4/IPv6 的无意义二元运算:禁用了 IPv4/IPv6 与非整数类型的加/减运算。此前允许与浮点类型进行此类运算,并且在某些其他类型(例如 DateTime)上会抛出逻辑错误。[#86336](https://github.com/ClickHouse/ClickHouse/pull/86336)([Raúl Marín](https://github.com/Algunenano))。 +* 弃用设置 `allow_dynamic_metadata_for_data_lakes`。现在所有 Iceberg 表在每次执行查询之前,都会尝试从存储中获取最新的表 schema。[#86366](https://github.com/ClickHouse/ClickHouse/pull/86366)([Daniil Ivanik](https://github.com/divanik))。 +* 更改了 `OUTER JOIN ... USING` 子句中合并列(coalesced column)的解析方式,使其更加一致:此前,在 OUTER JOIN 中同时选择 USING 列和带限定名的列(`a, t1.a, t2.a`)时,USING 列会被错误地解析为 `t1.a`,从而在右表中没有左表匹配的行上显示 0/NULL。现在,USING 子句中的标识符始终解析为合并列,而带限定名的标识符解析为非合并列,与查询中还存在哪些其他标识符无关。例如:```sql SELECT a, t1.a, t2.a FROM (SELECT 1 as a WHERE 0) t1 FULL JOIN (SELECT 2 as a) t2 USING (a) -- 之前:a=0, t1.a=0, t2.a=2(错误 —— 'a' 被解析为 t1.a) -- 之后:a=2, t1.a=0, t2.a=2(正确 —— 'a' 为合并列)。```[#80848](https://github.com/ClickHouse/ClickHouse/pull/80848)([Vladimir Cherkasov](https://github.com/vdimir))。 +* 将副本去重窗口上限提高到 10000。此变更在功能上是完全兼容的,但可以想象在存在大量表的情况下,可能会导致较高的资源消耗。[#86820](https://github.com/ClickHouse/ClickHouse/pull/86820)([Sema Checherinda](https://github.com/CheSema))。 + +#### 新增功能 + +* 用户现在可以通过在 NATS 引擎中指定新的 `nats_stream` 和 `nats_consumer` 设置,使用 NATS JetStream 来消费消息。[#84799](https://github.com/ClickHouse/ClickHouse/pull/84799)([Dmitry Novikov](https://github.com/dmitry-sles-novikov))。 +* 在 `arrowFlight` 表函数中新增了对身份验证和 SSL 的支持。[#87120](https://github.com/ClickHouse/ClickHouse/pull/87120) ([Vitaly Baranov](https://github.com/vitlibar))。 +* 在 `S3` 表引擎和 `s3` 表函数中新增名为 `storage_class_name` 的参数,用于指定 AWS 支持的智能分层(Intelligent-Tiering)存储级别。该参数同时支持键值格式和位置参数格式(已弃用)。[#87122](https://github.com/ClickHouse/ClickHouse/pull/87122) ([alesapin](https://github.com/alesapin)). +* Iceberg 表引擎支持 `ALTER UPDATE`。 [#86059](https://github.com/ClickHouse/ClickHouse/pull/86059) ([scanhex12](https://github.com/scanhex12)). +* 添加系统表 `iceberg_metadata_log`,以便在 SELECT 查询时获取 Iceberg 元数据文件。[#86152](https://github.com/ClickHouse/ClickHouse/pull/86152) ([scanhex12](https://github.com/scanhex12)). +* `Iceberg` 和 `DeltaLake` 表通过在存储层级中设置 `disk` 选项来支持自定义磁盘配置。[#86778](https://github.com/ClickHouse/ClickHouse/pull/86778) ([scanhex12](https://github.com/scanhex12)). +* 为数据湖磁盘增加对 Azure 的支持。 [#87173](https://github.com/ClickHouse/ClickHouse/pull/87173) ([scanhex12](https://github.com/scanhex12)). +* 在 Azure Blob Storage 之上支持 `Unity` 目录。 [#80013](https://github.com/ClickHouse/ClickHouse/pull/80013) ([Smita Kulkarni](https://github.com/SmitaRKulkarni)). +* 为 `Iceberg` 写入支持更多格式(`ORC`、`Avro`)。此变更关闭了 [#86179](https://github.com/ClickHouse/ClickHouse/issues/86179)。 [#87277](https://github.com/ClickHouse/ClickHouse/pull/87277)([scanhex12](https://github.com/scanhex12))。 +* 添加一个新的系统表 `database_replicas`,包含数据库副本相关信息。 [#83408](https://github.com/ClickHouse/ClickHouse/pull/83408) ([Konstantin Morozov](https://github.com/k-morozov)). +* 新增函数 `arrayExcept`,用于按集合语义从一个数组中减去另一个数组。 [#82368](https://github.com/ClickHouse/ClickHouse/pull/82368) ([Joanna Hulboj](https://github.com/jh0x)). +* 新增 `system.aggregated_zookeeper_log` 表。该表包含按会话 ID、父路径和操作类型分组的 ZooKeeper 操作统计信息(例如操作数量、平均延迟、错误),并会定期刷新到磁盘。[#85102](https://github.com/ClickHouse/ClickHouse/pull/85102) [#87208](https://github.com/ClickHouse/ClickHouse/pull/87208) ([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 +* 新增函数 `isValidASCII`。如果输入的 `String` 或 `FixedString` 仅包含 ASCII 字节(0x00–0x7F),则返回 1,否则返回 0。关闭 [#85377](https://github.com/ClickHouse/ClickHouse/issues/85377)。... [#85786](https://github.com/ClickHouse/ClickHouse/pull/85786)([rajat mohan](https://github.com/rajatmohan22))。 +* 布尔类型设置项可以在不带参数的情况下指定,例如 `SET use_query_cache;`,这等同于将其设置为 true。[#85800](https://github.com/ClickHouse/ClickHouse/pull/85800)([thraeka](https://github.com/thraeka))。 +* 新的配置选项:`logger.startupLevel` 和 `logger.shutdownLevel` 分别允许在 ClickHouse 启动和关闭阶段重写日志级别。[#85967](https://github.com/ClickHouse/ClickHouse/pull/85967) ([Lennard Eijsackers](https://github.com/Blokje5)). +* 聚合函数 `timeSeriesChangesToGrid` 和 `timeSeriesResetsToGrid`。其行为与 `timeSeriesRateToGrid` 类似,接受起始时间戳、结束时间戳、步长和回溯窗口等参数,以及时间戳和值两个参数,但每个窗口至少需要 1 个样本,而非 2 个。计算 PromQL 的 `changes`/`resets`,在由这些参数定义的时间网格中,对每个时间戳统计指定窗口内样本值发生变化或减少的次数。返回类型为 `Array(Nullable(Float64))`。[#86010](https://github.com/ClickHouse/ClickHouse/pull/86010)([Stephen Chi](https://github.com/stephchi0))。 +* 允许用户使用与创建临时表(`CREATE TEMPORARY TABLE`)类似的语法 `CREATE TEMPORARY VIEW` 来创建临时视图。 [#86432](https://github.com/ClickHouse/ClickHouse/pull/86432) ([Aly Kafoury](https://github.com/AlyHKafoury)). +* 为 `system.warnings` 表新增 CPU 和内存使用情况的警告。[#86838](https://github.com/ClickHouse/ClickHouse/pull/86838) ([Bharat Nallan](https://github.com/bharatnc))。 +* 在 `Protobuf` 输入中支持 `oneof` 指示符。可以使用一列特殊列来指示 oneof 中哪个字段被设置。如果消息包含 [oneof](https://protobuf.dev/programming-guides/proto3/#oneof) 且已设置 `input_format_protobuf_oneof_presence`,ClickHouse 会填充该列,用于指示 oneof 中实际出现的是哪个字段。[#82885](https://github.com/ClickHouse/ClickHouse/pull/82885)([Ilya Golshtein](https://github.com/ilejn))。 +* 基于 jemalloc 的内部工具改进内存分配性能分析。现在可以通过配置 `jemalloc_enable_global_profiler` 启用全局 jemalloc profiler。通过启用配置 `jemalloc_collect_global_profile_samples_in_trace_log`,采样得到的全局内存分配和释放信息可以以 `JemallocSample` 类型存储在 `system.trace_log` 中。现在可以使用设置 `jemalloc_enable_profiler` 为每个查询单独启用 jemalloc profiling。是否将采样数据存储到 `system.trace_log` 中可以通过设置 `jemalloc_collect_profile_samples_in_trace_log` 在查询级别逐个控制。将 jemalloc 更新到更高版本。[#85438](https://github.com/ClickHouse/ClickHouse/pull/85438) ([Antonio Andelic](https://github.com/antonio2368))。 +* 一个用于在删除 Iceberg 表时一并删除其文件的新设置项。此更改解决了 [#86211](https://github.com/ClickHouse/ClickHouse/issues/86211)。[#86501](https://github.com/ClickHouse/ClickHouse/pull/86501)([scanhex12](https://github.com/scanhex12))。 #### 实验性特性 -* 从头重写了倒排文本索引,使其可扩展以支持无法完全放入 RAM 的数据集。[#86485](https://github.com/ClickHouse/ClickHouse/pull/86485) ([Anton Popov](https://github.com/CurtizJ)). -* Join 重排序现在会使用统计信息。可以通过设置 `allow_statistics_optimize = 1` 和 `query_plan_optimize_join_order_limit = 10` 来启用该特性。[#86822](https://github.com/ClickHouse/ClickHouse/pull/86822) ([Han Fei](https://github.com/hanfei1991)). -* 支持 `alter table ... materialize statistics all`,该命令会物化一张表的所有统计信息。[#87197](https://github.com/ClickHouse/ClickHouse/pull/87197) ([Han Fei](https://github.com/hanfei1991)). - +* 从零重构了倒排文本索引,使其能够对无法完全放入内存的数据集进行可扩展处理。 [#86485](https://github.com/ClickHouse/ClickHouse/pull/86485) ([Anton Popov](https://github.com/CurtizJ)). +* Join 重排现在会利用统计信息。可以通过设置 `allow_statistics_optimize = 1` 和 `query_plan_optimize_join_order_limit = 10` 来启用该特性。 [#86822](https://github.com/ClickHouse/ClickHouse/pull/86822) ([Han Fei](https://github.com/hanfei1991)). +* 支持 `alter table ... materialize statistics all`,该命令会物化一个表的所有统计信息。 [#87197](https://github.com/ClickHouse/ClickHouse/pull/87197) ([Han Fei](https://github.com/hanfei1991)). #### 性能优化 -* 在读取数据时支持使用 skip index 过滤数据分片,从而减少不必要的索引读取。可通过新的设置 `use_skip_indexes_on_data_read` 控制(默认禁用)。这解决了 [#75774](https://github.com/ClickHouse/ClickHouse/issues/75774),并包含了一些与 [#81021](https://github.com/ClickHouse/ClickHouse/issues/81021) 共享的通用基础改动。[#81526](https://github.com/ClickHouse/ClickHouse/pull/81526)([Amos Bird](https://github.com/amosbird))。 -* 添加了 JOIN 顺序优化功能,可以自动重新排序 JOIN 以获得更好的性能(由 `query_plan_optimize_join_order_limit` 设置控制)。请注意,当前的 JOIN 顺序优化仅具有有限的统计信息支持,主要依赖于来自存储引擎的行数估计——更复杂的统计信息收集和基数估计将在未来版本中加入。**如果在升级后遇到 JOIN 查询问题**,可以通过设置 `SET query_plan_use_new_logical_join_step = 0` 临时禁用新的实现,并报告问题以便进一步调查。**关于 USING 子句中标识符解析的说明**:对 `OUTER JOIN ... USING` 子句中合并列的解析方式进行了修改,使其更加一致:此前,在 OUTER JOIN 中同时选择 USING 列和带限定符的列(`a, t1.a, t2.a`)时,USING 列会被错误地解析为 `t1.a`,对于右表中没有匹配左表行的数据,会显示 0/NULL。现在,来自 USING 子句的标识符始终解析为合并列,而带限定符的标识符解析为未合并的列,且不受查询中出现的其他标识符影响。例如: ```sql +* 在读取时支持使用 skip 索引过滤数据部分,从而减少不必要的索引读取。由新设置 `use_skip_indexes_on_data_read` 控制(默认禁用)。这解决了 [#75774](https://github.com/ClickHouse/ClickHouse/issues/75774)。其中包含了一些与 [#81021](https://github.com/ClickHouse/ClickHouse/issues/81021) 共享的通用基础改动。[#81526](https://github.com/ClickHouse/ClickHouse/pull/81526)([Amos Bird](https://github.com/amosbird))。 +* 添加了 JOIN 顺序优化功能,可以自动重新排序 JOIN 以获得更好的性能(由 `query_plan_optimize_join_order_limit` 设置控制)。请注意,当前的 JOIN 顺序优化仅有有限的统计信息支持,主要依赖于存储引擎提供的行数估计值——未来版本将增加更完善的统计信息收集和基数估计功能。**如果在升级后遇到 JOIN 查询相关的问题**,可以暂时通过设置 `SET query_plan_use_new_logical_join_step = 0` 来禁用新的实现,并报告该问题以便进一步排查。**关于 USING 子句中标识符解析的说明**:修改了 `OUTER JOIN ... USING` 子句中合并列(coalesced column)的解析方式,使其行为更加一致:之前在 OUTER JOIN 中同时选择 USING 列和限定列(`a, t1.a, t2.a`)时,USING 列会被错误地解析为 `t1.a`,导致右表中没有左侧匹配的行显示为 0/NULL。现在,来自 USING 子句的标识符始终解析为合并列,而限定标识符始终解析为未合并的列,与查询中是否存在其他标识符无关。例如: ```sql SELECT a, t1.a, t2.a FROM (SELECT 1 as a WHERE 0) t1 FULL JOIN (SELECT 2 as a) t2 USING (a) - -- 之前:a=0, t1.a=0, t2.a=2(不正确 - 'a' 被解析为 t1.a) - -- 之后:a=2, t1.a=0, t2.a=2(正确 - 'a' 是合并列)。 + -- Before: a=0, t1.a=0, t2.a=2 (incorrect - 'a' resolved to t1.a) + -- After: a=2, t1.a=0, t2.a=2 (correct - 'a' is coalesced). [#80848](https://github.com/ClickHouse/ClickHouse/pull/80848) ([Vladimir Cherkasov](https://github.com/vdimir)). -* 用于数据湖的分布式 `INSERT SELECT`。 [#86783](https://github.com/ClickHouse/ClickHouse/pull/86783) ([scanhex12](https://github.com/scanhex12)). -* 改进对 `func(primary_column) = 'xx'` 和 `column in (xxx)` 这类条件的 PREWHERE 优化。[#85529](https://github.com/ClickHouse/ClickHouse/pull/85529) ([李扬](https://github.com/taiyang-li))。 -* 实现了 JOIN 重写优化:1. 如果对匹配行或未匹配行的筛选条件始终为 false,则将 `LEFT ANY JOIN` 和 `RIGHT ANY JOIN` 转换为 `SEMI`/`ANTI` JOIN。此优化由新设置 `query_plan_convert_any_join_to_semi_or_anti_join` 控制。2. 如果对于某一侧未匹配行的筛选条件始终为 false,则将 `FULL ALL JOIN` 转换为 `LEFT ALL` 或 `RIGHT ALL` JOIN。 [#86028](https://github.com/ClickHouse/ClickHouse/pull/86028) ([Dmitry Novik](https://github.com/novikd))。 -* 在执行轻量级删除后,垂直合并的性能得到提升。 [#86169](https://github.com/ClickHouse/ClickHouse/pull/86169) ([Anton Popov](https://github.com/CurtizJ)). -* 在 `LEFT/RIGHT` JOIN 存在大量未匹配行的情况下,`HashJoin` 的性能得到了小幅优化。[#86312](https://github.com/ClickHouse/ClickHouse/pull/86312)([Nikita Taranov](https://github.com/nickitat))。 -* 基数排序:帮助编译器利用 SIMD,并实现更好的预取效果。使用动态派发,仅在 Intel CPU 上启用软件预取。在 [https://github.com/ClickHouse/ClickHouse/pull/77029](https://github.com/ClickHouse/ClickHouse/pull/77029) 中 @taiyang-li 的工作基础上继续改进。[#86378](https://github.com/ClickHouse/ClickHouse/pull/86378)([Raúl Marín](https://github.com/Algunenano))。 -* 通过将 `MarkRanges` 从使用 `deque` 优化为使用 `devector`,提高了在包含大量 part 的表上的短查询性能。 [#86933](https://github.com/ClickHouse/ClickHouse/pull/86933) ([Azat Khuzhin](https://github.com/azat)). -* 优化了在 join 模式下应用补丁 part 的性能。[#87094](https://github.com/ClickHouse/ClickHouse/pull/87094) ([Anton Popov](https://github.com/CurtizJ)). -* 新增设置 `query_condition_cache_selectivity_threshold`(默认值:1.0),用于在将谓词扫描结果插入查询条件缓存时,排除选择性较低的结果。这样可以在以缓存命中率下降为代价的情况下,降低查询条件缓存的内存占用。[#86076](https://github.com/ClickHouse/ClickHouse/pull/86076)([zhongyuankai](https://github.com/zhongyuankai))。 -* 减少 Iceberg 写入过程中的内存占用。[#86544](https://github.com/ClickHouse/ClickHouse/pull/86544)([scanhex12](https://github.com/scanhex12))。 - - - - +* 针对数据湖的分布式 `INSERT SELECT`。 [#86783](https://github.com/ClickHouse/ClickHouse/pull/86783) ([scanhex12](https://github.com/scanhex12)). +* 改进针对 `func(primary_column) = 'xx'` 和 `column in (xxx)` 此类条件的 PREWHERE 优化。[#85529](https://github.com/ClickHouse/ClickHouse/pull/85529) ([李扬](https://github.com/taiyang-li))。 +* 实现了 JOIN 重写:1. 如果对匹配行或未匹配行的过滤条件始终为假,则将 `LEFT ANY JOIN` 和 `RIGHT ANY JOIN` 转换为 `SEMI`/`ANTI` JOIN。此优化由新设置 `query_plan_convert_any_join_to_semi_or_anti_join` 控制。2. 如果一侧未匹配行的过滤条件始终为假,则将 `FULL ALL JOIN` 转换为 `LEFT ALL` 或 `RIGHT ALL` JOIN。[#86028](https://github.com/ClickHouse/ClickHouse/pull/86028)([Dmitry Novik](https://github.com/novikd))。 +* 在执行轻量级删除之后,优化了纵向合并的性能。 [#86169](https://github.com/ClickHouse/ClickHouse/pull/86169) ([Anton Popov](https://github.com/CurtizJ)). +* 在 `LEFT/RIGHT` join 存在大量未匹配行的情况下,`HashJoin` 的性能略有优化。[#86312](https://github.com/ClickHouse/ClickHouse/pull/86312) ([Nikita Taranov](https://github.com/nickitat))。 +* 基数排序:帮助编译器利用 SIMD,并改进预取效果。通过动态派发,仅在 Intel CPU 上启用软件预取。延续了 @taiyang-li 在 [https://github.com/ClickHouse/ClickHouse/pull/77029](https://github.com/ClickHouse/ClickHouse/pull/77029) 中的工作。[#86378](https://github.com/ClickHouse/ClickHouse/pull/86378)([Raúl Marín](https://github.com/Algunenano))。 +* 通过在 `MarkRanges` 中将底层容器从 `deque` 优化为 `devector`,提升了在包含大量数据片段的表上执行短查询时的性能。[#86933](https://github.com/ClickHouse/ClickHouse/pull/86933) ([Azat Khuzhin](https://github.com/azat))。 +* 改进了在 join 模式下应用补丁部件的性能。[#87094](https://github.com/ClickHouse/ClickHouse/pull/87094) ([Anton Popov](https://github.com/CurtizJ)). +* 新增了设置 `query_condition_cache_selectivity_threshold`(默认值:1.0),用于将选择性较低的谓词扫描结果排除在写入 query condition cache 之外。这样可以在缓存命中率略有下降的前提下,降低 query condition cache 的内存消耗。[#86076](https://github.com/ClickHouse/ClickHouse/pull/86076)([zhongyuankai](https://github.com/zhongyuankai))。 +* 减少 Iceberg 写入过程中的内存使用。[#86544](https://github.com/ClickHouse/ClickHouse/pull/86544) ([scanhex12](https://github.com/scanhex12)). #### 改进 -* 支持在单次插入中向 Iceberg 写入多个数据文件。新增 `iceberg_insert_max_rows_in_data_file` 和 `iceberg_insert_max_bytes_in_data_file` 设置用于控制相关上限。[#86275](https://github.com/ClickHouse/ClickHouse/pull/86275) ([scanhex12](https://github.com/scanhex12))。 -* 为 Delta Lake 中插入的数据文件增加行数/字节数限制。通过设置 `delta_lake_insert_max_rows_in_data_file` 和 `delta_lake_insert_max_bytes_in_data_file` 进行控制。[#86357](https://github.com/ClickHouse/ClickHouse/pull/86357) ([Kseniia Sumarokova](https://github.com/kssenii)). -* 在 Iceberg 写入时支持更多分区类型。修复了 [#86206](https://github.com/ClickHouse/ClickHouse/issues/86206)。[#86298](https://github.com/ClickHouse/ClickHouse/pull/86298)([scanhex12](https://github.com/scanhex12))。 -* 使 S3 重试策略可配置,并在修改配置 XML 文件时支持热加载 S3 磁盘的设置。[#82642](https://github.com/ClickHouse/ClickHouse/pull/82642) ([RinChanNOW](https://github.com/RinChanNOWWW))。 -* 改进了 S3(Azure)Queue 表引擎,使其在 ZooKeeper 连接丢失时也能继续运行且避免潜在的重复。需要启用 S3Queue 设置 `use_persistent_processing_nodes`(可通过 `ALTER TABLE MODIFY SETTING` 修改)。[#85995](https://github.com/ClickHouse/ClickHouse/pull/85995) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 在单次插入操作中支持向 Iceberg 写入多个数据文件。新增设置项 `iceberg_insert_max_rows_in_data_file` 和 `iceberg_insert_max_bytes_in_data_file` 用于控制相应限制。[#86275](https://github.com/ClickHouse/ClickHouse/pull/86275) ([scanhex12](https://github.com/scanhex12))。 +* 为 Delta Lake 中插入的数据文件新增行数/字节数限制,可通过设置 `delta_lake_insert_max_rows_in_data_file` 和 `delta_lake_insert_max_bytes_in_data_file` 进行控制。[#86357](https://github.com/ClickHouse/ClickHouse/pull/86357) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 在 Iceberg 写入中支持更多类型的分区。修复了 [#86206](https://github.com/ClickHouse/ClickHouse/issues/86206)。[#86298](https://github.com/ClickHouse/ClickHouse/pull/86298)([scanhex12](https://github.com/scanhex12))。 +* 使 S3 重试策略可配置,并在修改配置 XML 文件后可以热加载 S3 磁盘的设置。 [#82642](https://github.com/ClickHouse/ClickHouse/pull/82642) ([RinChanNOW](https://github.com/RinChanNOWWW)). +* 改进了 S3(Azure)Queue 表引擎,使其在 ZooKeeper 连接丢失时也能继续运行且不会产生潜在的重复数据。需要启用 S3Queue 设置 `use_persistent_processing_nodes`(可通过 `ALTER TABLE MODIFY SETTING` 更改)。[#85995](https://github.com/ClickHouse/ClickHouse/pull/85995)([Kseniia Sumarokova](https://github.com/kssenii))。 * 在创建物化视图时,可以在 `TO` 之后使用查询参数,例如:`CREATE MATERIALIZED VIEW mv TO {to_table:Identifier} AS SELECT * FROM src_table`。[#84899](https://github.com/ClickHouse/ClickHouse/pull/84899)([Diskein](https://github.com/Diskein))。 -* 在为 `Kafka2` 表引擎指定错误设置时,为用户提供更清晰的说明。 [#83701](https://github.com/ClickHouse/ClickHouse/pull/83701) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). -* 现在已经不再支持为 `Time` 类型指定时区(因为这没有意义)。[#84689](https://github.com/ClickHouse/ClickHouse/pull/84689) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* 在 `best_effort` 模式下简化了与解析 Time/Time64 相关的逻辑,从而避免了一些潜在的 bug。 [#84730](https://github.com/ClickHouse/ClickHouse/pull/84730) ([Yarik Briukhovetskyi](https://github.com/yariks5s))。 -* 新增 `deltaLakeAzureCluster` 函数(类似于用于集群模式的 `deltaLakeAzure`),以及 `deltaLakeS3Cluster` 函数(是 `deltaLakeCluster` 的别名)。解决了 [#85358](https://github.com/ClickHouse/ClickHouse/issues/85358)。[#85547](https://github.com/ClickHouse/ClickHouse/pull/85547)([Smita Kulkarni](https://github.com/SmitaRKulkarni))。 -* 在常规复制操作中,以与备份相同的方式应用 `azure_max_single_part_copy_size` 设置。[#85767](https://github.com/ClickHouse/ClickHouse/pull/85767)([Ilya Golshtein](https://github.com/ilejn))。 -* 在 S3 对象存储中,当遇到可重试错误时放慢 S3 客户端线程速度。此更新将之前的设置 `backup_slow_all_threads_after_retryable_s3_error` 的适用范围扩展到 S3 磁盘,并将其重命名为更通用的 `s3_slow_all_threads_after_retryable_error`。[#85918](https://github.com/ClickHouse/ClickHouse/pull/85918)([Julia Kartseva](https://github.com/jkartseva))。 -* 将设置 allow_experimental_variant/dynamic/json 和 enable_variant/dynamic/json 标记为已废弃。现在这三种类型都会无条件启用。[#85934](https://github.com/ClickHouse/ClickHouse/pull/85934) ([Pavel Kruglov](https://github.com/Avogar))。 -* 在 `http_handlers` 中支持按完整 URL 字符串(`full_url` 指令,包含 schema 和主机:端口)进行过滤。 [#86155](https://github.com/ClickHouse/ClickHouse/pull/86155) ([Azat Khuzhin](https://github.com/azat)). -* 新增了设置 `allow_experimental_delta_lake_writes`。[#86180](https://github.com/ClickHouse/ClickHouse/pull/86180) ([Kseniia Sumarokova](https://github.com/kssenii))。 -* 修复 init.d 脚本中对 systemd 的检测(修复“安装软件包”(Install packages)检查)。 [#86187](https://github.com/ClickHouse/ClickHouse/pull/86187) ([Azat Khuzhin](https://github.com/azat)). -* 添加一个新的 `startup_scripts_failure_reason` 维度指标。该指标用于区分导致启动脚本失败的不同错误类型。尤其是出于告警目的,我们需要区分瞬态错误(例如 `MEMORY_LIMIT_EXCEEDED` 或 `KEEPER_EXCEPTION`)和非瞬态错误。[#86202](https://github.com/ClickHouse/ClickHouse/pull/86202) ([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 -* 允许对 Iceberg 表的分区省略 `identity` 函数。[#86314](https://github.com/ClickHouse/ClickHouse/pull/86314) ([scanhex12](https://github.com/scanhex12))。 -* 新增仅对特定通道启用 JSON 日志的功能;为此,将 `logger.formatting.channel` 设置为 `syslog`、`console`、`errorlog` 或 `log` 之一。 [#86331](https://github.com/ClickHouse/ClickHouse/pull/86331) ([Azat Khuzhin](https://github.com/azat)). -* 允许在 `WHERE` 中使用原生数值。它们已经可以作为逻辑函数的参数使用。这有助于简化 filter-push-down 和 move-to-prewhere 优化。[#86390](https://github.com/ClickHouse/ClickHouse/pull/86390)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 -* 修复了在对元数据已损坏的 Catalog 执行 `SYSTEM DROP REPLICA` 时会出现的错误。[#86391](https://github.com/ClickHouse/ClickHouse/pull/86391) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 -* 在 Azure 中为磁盘访问检查(`skip_access_check = 0`)增加额外的重试,因为 Azure 可能需要相当长的时间来开通访问权限。[#86419](https://github.com/ClickHouse/ClickHouse/pull/86419) ([Alexander Tokmakov](https://github.com/tavplubix))。 -* 将 `timeSeries*()` 函数中的陈旧度窗口调整为左开右闭区间。 [#86588](https://github.com/ClickHouse/ClickHouse/pull/86588) ([Vitaly Baranov](https://github.com/vitlibar)). -* 添加 `FailedInternal*Query` ProfileEvents 事件。 [#86627](https://github.com/ClickHouse/ClickHouse/pull/86627) ([Shane Andrade](https://github.com/mauidude))。 -* 修复了通过配置文件添加用户名中包含句点(.)的用户时的处理问题。[#86633](https://github.com/ClickHouse/ClickHouse/pull/86633)([Mikhail Koviazin](https://github.com/mkmkme))。 -* 为查询的内存使用添加异步指标(`QueriesMemoryUsage` 和 `QueriesPeakMemoryUsage`)。[#86669](https://github.com/ClickHouse/ClickHouse/pull/86669)([Azat Khuzhin](https://github.com/azat))。 -* 你可以使用 `clickhouse-benchmark --precise` 参数来更精确地统计 QPS 和其他按时间间隔划分的指标。当查询持续时间与报告时间间隔 `--delay D` 相当时,这有助于获得稳定一致的 QPS 值。[#86684](https://github.com/ClickHouse/ClickHouse/pull/86684)([Sergei Trifonov](https://github.com/serxa))。 -* 使 Linux 线程的 nice 值可配置,以便为部分线程(merge/mutate、query、物化视图、ZooKeeper 客户端)分配更高或更低的优先级。[#86703](https://github.com/ClickHouse/ClickHouse/pull/86703) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). -* 修复具有误导性的 “specified upload does not exist” 错误,该错误会在分段(multipart)上传过程中由于竞争条件导致原始异常丢失时出现。 [#86725](https://github.com/ClickHouse/ClickHouse/pull/86725) ([Julia Kartseva](https://github.com/jkartseva))。 -* 限制 `EXPLAIN` 查询中的查询计划描述长度。不再为非 `EXPLAIN` 查询计算描述。新增设置 `query_plan_max_step_description_length`。[#86741](https://github.com/ClickHouse/ClickHouse/pull/86741) ([Nikolai Kochetov](https://github.com/KochetovNicolai))。 -* 新增调节挂起信号的能力,以尝试避免出现 CANNOT_CREATE_TIMER(针对查询分析器中的 `query_profiler_real_time_period_ns` / `query_profiler_cpu_time_period_ns`)。同时,从 `/proc/self/status` 中采集 `SigQ` 以便进行内部自检(如果 `ProcessSignalQueueSize` 接近 `ProcessSignalQueueLimit`,则很可能会遇到 `CANNOT_CREATE_TIMER` 错误)。 [#86760](https://github.com/ClickHouse/ClickHouse/pull/86760) ([Azat Khuzhin](https://github.com/azat)). -* 提升 Keeper 中 `RemoveRecursive` 请求的性能。 [#86789](https://github.com/ClickHouse/ClickHouse/pull/86789) ([Antonio Andelic](https://github.com/antonio2368)). -* 在 JSON 类型输出过程中,删除 `PrettyJSONEachRow` 中多余的空白字符。[#86819](https://github.com/ClickHouse/ClickHouse/pull/86819) ([Pavel Kruglov](https://github.com/Avogar))。 -* 现在,在可重写的普通磁盘上删除目录时,我们会记录 `prefix.path` 的 blob 大小。 [#86908](https://github.com/ClickHouse/ClickHouse/pull/86908) ([alesapin](https://github.com/alesapin)). -* 支持对远程 ClickHouse 实例(包括 ClickHouse Cloud)执行性能测试。示例用法:`tests/performance/scripts/perf.py tests/performance/math.xml --runs 10 --user --password --host --port --secure`。[#86995](https://github.com/ClickHouse/ClickHouse/pull/86995)([Raufs Dunamalijevs](https://github.com/rienath))。 -* 在排序、异步插入和 file log 等已知会分配大量(>16MiB)内存的场景中遵守内存限制。[#87035](https://github.com/ClickHouse/ClickHouse/pull/87035)([Azat Khuzhin](https://github.com/azat))。 -* 如果为 `network_compression_method` 设置了不支持的通用编解码器,则会抛出异常。[#87097](https://github.com/ClickHouse/ClickHouse/pull/87097) ([Robert Schulze](https://github.com/rschu1ze))。 -* 系统表 `system.query_cache` 现在会返回 *所有* 查询结果缓存条目,而之前只返回共享条目,或同一用户和角色的非共享条目。这样是合理的,因为非共享条目本就不应泄露*查询结果*,而 `system.query_cache` 返回的是*查询字符串*。这使得该系统表的行为更接近 `system.query_log`。 [#87104](https://github.com/ClickHouse/ClickHouse/pull/87104) ([Robert Schulze](https://github.com/rschu1ze)). -* 为 `parseDateTime` 函数启用短路求值。[#87184](https://github.com/ClickHouse/ClickHouse/pull/87184) ([Pavel Kruglov](https://github.com/Avogar))。 -* 在 `system.parts_columns` 中新增名为 `statistics` 的列。 [#87259](https://github.com/ClickHouse/ClickHouse/pull/87259) ([Han Fei](https://github.com/hanfei1991))。 - - - - - -#### 错误修复(官方稳定版本中用户可见的异常行为) - -* 对于复制数据库和内部复制表,`ALTER` 查询的结果现在仅在发起节点上进行校验。这样可以修复已提交的 `ALTER` 查询可能在其他节点卡住的情况。[#83849](https://github.com/ClickHouse/ClickHouse/pull/83849)([János Benjamin Antal](https://github.com/antaljanosbenjamin))。 -* 限制 `BackgroundSchedulePool` 中每种类型任务的数量,避免出现所有槽位都被某一类型任务占满、而其他任务长期得不到调度的情况,同时也避免任务互相等待导致死锁。相关行为由服务器设置 `background_schedule_pool_max_parallel_tasks_per_type_ratio` 控制。[#84008](https://github.com/ClickHouse/ClickHouse/pull/84008) ([Alexander Tokmakov](https://github.com/tavplubix))。 -* 在恢复数据库副本时,应正确关闭表。否则,在数据库副本恢复过程中可能会导致某些表引擎出现 `LOGICAL_ERROR` 错误。 [#84744](https://github.com/ClickHouse/ClickHouse/pull/84744) ([Antonio Andelic](https://github.com/antonio2368)). -* 在为数据库名称生成拼写更正建议时检查访问权限。[#85371](https://github.com/ClickHouse/ClickHouse/pull/85371) ([Dmitry Novik](https://github.com/novikd))。 -* 1. 为 hive 列使用 LowCardinality 2. 在虚拟列之前填充 hive 列(用于 [https://github.com/ClickHouse/ClickHouse/pull/81040](https://github.com/ClickHouse/ClickHouse/pull/81040))3. 在 hive 空格式情况下触发 LOGICAL_ERROR [#85528](https://github.com/ClickHouse/ClickHouse/issues/85528) 4. 修复仅有 hive 分区列时的检查 5. 校验 schema 中已指定所有 hive 列 6. 对使用 hive 的 parallel_replicas_cluster 进行部分修复 7. 在 hive 工具的 extractKeyValuePairs 中使用有序容器(用于 [https://github.com/ClickHouse/ClickHouse/pull/81040](https://github.com/ClickHouse/ClickHouse/pull/81040))。[#85538](https://github.com/ClickHouse/ClickHouse/pull/85538)([Arthur Passos](https://github.com/arthurpassos))。 -* 防止对 `IN` 函数的第一个参数进行不必要的优化,避免在使用数组映射时偶发错误。[#85546](https://github.com/ClickHouse/ClickHouse/pull/85546) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* 在写入 Parquet 文件时,Iceberg 源 ID 与 Parquet 名称之间的映射没有根据当时的 schema 进行调整。此 PR 针对每个 Iceberg 数据文件处理与之对应的 schema,而不是使用当前的 schema。[#85829](https://github.com/ClickHouse/ClickHouse/pull/85829) ([Daniil Ivanik](https://github.com/divanik))。 -* 修复将读取文件大小与打开文件这两个操作分离所导致的问题。该问题与 [https://github.com/ClickHouse/ClickHouse/pull/33372](https://github.com/ClickHouse/ClickHouse/pull/33372) 相关,后者是为修复 Linux 内核在 `5.10` 版本发布之前存在的一个 bug 而引入的。[#85837](https://github.com/ClickHouse/ClickHouse/pull/85837)([Konstantin Bogdanov](https://github.com/thevar1able))。 -* 在内核层面禁用了 IPv6 的系统上(例如将 RHEL 配置为 ipv6.disable=1 时),ClickHouse Keeper 不再会启动失败。现在,如果初始 IPv6 监听器创建失败,它会尝试回退到 IPv4 监听器。[#85901](https://github.com/ClickHouse/ClickHouse/pull/85901)([jskong1124](https://github.com/jskong1124))。 -* 此 PR 解决了 [#77990](https://github.com/ClickHouse/ClickHouse/issues/77990)。为 globalJoin 中的并行副本添加对 TableFunctionRemote 的支持。[#85929](https://github.com/ClickHouse/ClickHouse/pull/85929)([zoomxi](https://github.com/zoomxi))。 -* 修复 `OrcSchemaReader::initializeIfNeeded()` 中的空指针问题。本 PR 解决了以下 issue:[#85292](https://github.com/ClickHouse/ClickHouse/issues/85292) ### 用户可见变更的文档条目。[#85951](https://github.com/ClickHouse/ClickHouse/pull/85951) ([yanglongwei](https://github.com/ylw510))。 -* 添加检查,仅当 `FROM` 子句中的相关子查询使用外层查询的列时才允许使用。修复 [#85469](https://github.com/ClickHouse/ClickHouse/issues/85469)。修复 [#85402](https://github.com/ClickHouse/ClickHouse/issues/85402)。[#85966](https://github.com/ClickHouse/ClickHouse/pull/85966)([Dmitry Novik](https://github.com/novikd))。 -* 修复当某列的子列被其他列的物化表达式使用时,对该列执行 `ALTER UPDATE` 的问题。此前,在表达式中引用子列的物化列无法被正确更新。[#85985](https://github.com/ClickHouse/ClickHouse/pull/85985) ([Pavel Kruglov](https://github.com/Avogar)). -* 禁止修改其子列被用于 PK 或分区表达式的列。[#86005](https://github.com/ClickHouse/ClickHouse/pull/86005) ([Pavel Kruglov](https://github.com/Avogar)). -* 修复在 DeltaLake 存储中使用非默认列映射模式读取子列的问题。[#86064](https://github.com/ClickHouse/ClickHouse/pull/86064) ([Kseniia Sumarokova](https://github.com/kssenii)). -* 修复了 JSON 中带有 Enum 提示的路径使用错误默认值的问题。 [#86065](https://github.com/ClickHouse/ClickHouse/pull/86065) ([Pavel Kruglov](https://github.com/Avogar)). -* 对 DataLake Hive catalog URL 的解析增加输入清理。关闭 [#86018](https://github.com/ClickHouse/ClickHouse/issues/86018)。[#86092](https://github.com/ClickHouse/ClickHouse/pull/86092)([rajat mohan](https://github.com/rajatmohan22))。 -* 修复在动态调整文件系统缓存大小时出现的逻辑错误。关闭 [#86122](https://github.com/ClickHouse/ClickHouse/issues/86122)。关闭 [https://github.com/ClickHouse/clickhouse-core-incidents/issues/473](https://github.com/ClickHouse/clickhouse-core-incidents/issues/473)。[#86130](https://github.com/ClickHouse/ClickHouse/pull/86130)([Kseniia Sumarokova](https://github.com/kssenii))。 -* 在 DatabaseReplicatedSettings 中将 `logs_to_keep` 使用 `NonZeroUInt64` 类型。 [#86142](https://github.com/ClickHouse/ClickHouse/pull/86142)([Tuan Pham Anh](https://github.com/tuanpach))。 -* 当在使用 `index_granularity_bytes = 0` 设置创建的表(例如 `ReplacingMergeTree`)上执行带有跳过索引的 `FINAL` 查询时,会抛出异常。该异常现已修复。[#86147](https://github.com/ClickHouse/ClickHouse/pull/86147) ([Shankar Iyer](https://github.com/shankar-iyer)). -* 消除了未定义行为(UB),并修复了 Iceberg 分区表达式解析中的问题。[#86166](https://github.com/ClickHouse/ClickHouse/pull/86166) ([Daniil Ivanik](https://github.com/divanik)). -* 修复在一次 INSERT 中同时包含 const 和非 const 块时的崩溃问题。 [#86230](https://github.com/ClickHouse/ClickHouse/pull/86230) ([Azat Khuzhin](https://github.com/azat)). -* 通过 SQL 创建磁盘时,现在会默认处理 `/etc/metrika.xml` 中的 include。 [#86232](https://github.com/ClickHouse/ClickHouse/pull/86232) ([alekar](https://github.com/alekar))。 -* 修复 accurateCastOrNull/accurateCastOrDefault 在从 String 转换为 JSON 时的问题。 [#86240](https://github.com/ClickHouse/ClickHouse/pull/86240) ([Pavel Kruglov](https://github.com/Avogar)). -* 在 Iceberg 引擎中支持不包含 '/' 的目录。[#86249](https://github.com/ClickHouse/ClickHouse/pull/86249) ([scanhex12](https://github.com/scanhex12)) -* 修复在 replaceRegex 中,当 haystack 为 FixedString 类型且 needle 为空时发生的崩溃。[#86270](https://github.com/ClickHouse/ClickHouse/pull/86270) ([Raúl Marín](https://github.com/Algunenano)). -* 修复在执行 ALTER UPDATE Nullable(JSON) 操作期间出现的崩溃问题。 [#86281](https://github.com/ClickHouse/ClickHouse/pull/86281) ([Pavel Kruglov](https://github.com/Avogar)). -* 修复 `system.tables` 中缺失的 `definer` 列。 [#86295](https://github.com/ClickHouse/ClickHouse/pull/86295) ([Raúl Marín](https://github.com/Algunenano)). -* 修复从 LowCardinality(Nullable(T)) 到 Dynamic 的转换。 [#86365](https://github.com/ClickHouse/ClickHouse/pull/86365) ([Pavel Kruglov](https://github.com/Avogar)). -* 在写入 DeltaLake 时修复逻辑错误。关闭 [#86175](https://github.com/ClickHouse/ClickHouse/issues/86175)。[#86367](https://github.com/ClickHouse/ClickHouse/pull/86367)([Kseniia Sumarokova](https://github.com/kssenii))。 -* 修复在通过 Azure Blob Storage 向 `plain_rewritable` 磁盘读取空 blob 时出现的 `416 The range specified is invalid for the current size of the resource. The range specified is invalid for the current size of the resource` 错误。[#86400](https://github.com/ClickHouse/ClickHouse/pull/86400)([Julia Kartseva](https://github.com/jkartseva))。 -* 修复 GROUP BY 中 Nullable(JSON) 的处理。 [#86410](https://github.com/ClickHouse/ClickHouse/pull/86410) ([Pavel Kruglov](https://github.com/Avogar)). -* 修复了物化视图中的一个问题:如果某个 MV 被创建、删除,然后使用相同名称重新创建,它可能无法正常工作。[#86413](https://github.com/ClickHouse/ClickHouse/pull/86413)([Alexander Tokmakov](https://github.com/tavplubix))。 -* 当从 *cluster 函数读取数据时,如果所有副本均不可用,则失败。[#86414](https://github.com/ClickHouse/ClickHouse/pull/86414) ([Julian Maicher](https://github.com/jmaicher))。 -* 修复由于 `Buffer` 表导致的 `MergesMutationsMemoryTracking` 泄露问题,并修复在从 `Kafka`(及其他来源)进行流式读取时的 `query_views_log`。 [#86422](https://github.com/ClickHouse/ClickHouse/pull/86422) ([Azat Khuzhin](https://github.com/azat)). -* 修复在删除别名存储所引用的表后 `SHOW TABLES` 的显示问题。[#86433](https://github.com/ClickHouse/ClickHouse/pull/86433)([RinChanNOW](https://github.com/RinChanNOWWW))。 -* 修复在启用 send_chunk_header 且通过 HTTP 协议调用 UDF 时缺失的分块头问题。[#86469](https://github.com/ClickHouse/ClickHouse/pull/86469) ([Vladimir Cherkasov](https://github.com/vdimir)). -* 修复在启用 jemalloc profile 刷新功能时可能出现的死锁问题。[#86473](https://github.com/ClickHouse/ClickHouse/pull/86473) ([Azat Khuzhin](https://github.com/azat)). -* 修复 DeltaLake 表引擎中读取子列时的错误。关闭 [#86204](https://github.com/ClickHouse/ClickHouse/issues/86204)。[#86477](https://github.com/ClickHouse/ClickHouse/pull/86477)([Kseniia Sumarokova](https://github.com/kssenii))。 -* 在处理 DDL 任务时正确处理回环主机 ID 以避免冲突:[ #86479](https://github.com/ClickHouse/ClickHouse/pull/86479)([Tuan Pham Anh](https://github.com/tuanpach))。 -* 修复了在具有 numeric/decimal 列的 PostgreSQL 数据库引擎表上执行 detach/attach 时的问题。 [#86480](https://github.com/ClickHouse/ClickHouse/pull/86480) ([Julian Maicher](https://github.com/jmaicher)). -* 修复在 getSubcolumnType 中使用未初始化内存的问题。[#86498](https://github.com/ClickHouse/ClickHouse/pull/86498)([Raúl Marín](https://github.com/Algunenano))。 -* 当使用空 needle 调用函数 `searchAny` 和 `searchAll` 时,现在会返回 `true`(即“匹配所有内容”)。之前,它们会返回 `false`。(issue [#86300](https://github.com/ClickHouse/ClickHouse/issues/86300))。[#86500](https://github.com/ClickHouse/ClickHouse/pull/86500)([Elmi Ahmadov](https://github.com/ahmadov))。 -* 修复函数 `timeSeriesResampleToGridWithStaleness()` 在第一个 bucket 没有值时的问题。[#86507](https://github.com/ClickHouse/ClickHouse/pull/86507) ([Vitaly Baranov](https://github.com/vitlibar))。 -* 修复在将 `merge_tree_min_read_task_size` 设置为 0 时发生的崩溃。[#86527](https://github.com/ClickHouse/ClickHouse/pull/86527)([yanglongwei](https://github.com/ylw510))。 -* 在读取时,现在从 Iceberg 元数据中获取每个数据文件的格式(之前是从表参数中获取)。[#86529](https://github.com/ClickHouse/ClickHouse/pull/86529) ([Daniil Ivanik](https://github.com/divanik))。 -* 在关闭时刷新日志期间忽略异常,使关闭过程更加安全(避免 SIGSEGV)。 [#86546](https://github.com/ClickHouse/ClickHouse/pull/86546) ([Azat Khuzhin](https://github.com/azat)). -* 修复 `Backup` 数据库引擎在查询包含大小为零的 part 文件时抛出异常的问题。[#86563](https://github.com/ClickHouse/ClickHouse/pull/86563) ([Max Justus Spransy](https://github.com/maxjustus))。 -* 修复在启用 send_chunk_header 且通过 HTTP 协议调用 UDF 时缺失分块头的问题。[#86606](https://github.com/ClickHouse/ClickHouse/pull/86606) ([Vladimir Cherkasov](https://github.com/vdimir))。 -* 修复由于 Keeper 会话过期导致的 S3Queue 逻辑错误 "Expected current processor {} to be equal to {}"。[#86615](https://github.com/ClickHouse/ClickHouse/pull/86615) ([Kseniia Sumarokova](https://github.com/kssenii)). -* 修复了插入和剪枝逻辑中的可空性相关 bug。已关闭 [#86407](https://github.com/ClickHouse/ClickHouse/issues/86407)。[#86630](https://github.com/ClickHouse/ClickHouse/pull/86630)([scanhex12](https://github.com/scanhex12))。 -* 当 Iceberg 元数据缓存被禁用时,请不要禁用文件系统缓存。[#86635](https://github.com/ClickHouse/ClickHouse/pull/86635)([Daniil Ivanik](https://github.com/divanik))。 -* 已修复 Parquet 读取器 v3 中出现的 'Deadlock in Parquet::ReadManager (single-threaded)' 错误。[#86644](https://github.com/ClickHouse/ClickHouse/pull/86644) ([Michael Kolupaev](https://github.com/al13n321)). -* 修复 `listen_host` 在 ArrowFlight 中对 IPv6 的支持。[#86664](https://github.com/ClickHouse/ClickHouse/pull/86664)([Vitaly Baranov](https://github.com/vitlibar))。 -* 修复 `ArrowFlight` 处理程序在关闭时的问题。此 PR 修复了 [#86596](https://github.com/ClickHouse/ClickHouse/issues/86596)。[#86665](https://github.com/ClickHouse/ClickHouse/pull/86665)([Vitaly Baranov](https://github.com/vitlibar))。 -* 修复了在设置 `describe_compact_output=1` 时的分布式查询问题。[#86676](https://github.com/ClickHouse/ClickHouse/pull/86676) ([Azat Khuzhin](https://github.com/azat))。 -* 修复窗口定义的解析以及查询参数的应用。[#86720](https://github.com/ClickHouse/ClickHouse/pull/86720) ([Azat Khuzhin](https://github.com/azat)). -* 修复在使用 `PARTITION BY` 创建表但未使用分区通配符时错误抛出异常 `Partition strategy wildcard can not be used without a '_partition_id' wildcard.` 的问题,此用法在 25.8 之前的版本中是可行的。关闭 [https://github.com/ClickHouse/clickhouse-private/issues/37567](https://github.com/ClickHouse/clickhouse-private/issues/37567)。[#86748](https://github.com/ClickHouse/ClickHouse/pull/86748)([Kseniia Sumarokova](https://github.com/kssenii))。 -* 修复当并行查询尝试获取同一把锁时出现的 LogicalError。 [#86751](https://github.com/ClickHouse/ClickHouse/pull/86751) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). -* 修复在 RowBinary 输入格式中向 JSON 共享数据写入 NULL 的问题,并在 ColumnObject 中添加额外的校验。 [#86812](https://github.com/ClickHouse/ClickHouse/pull/86812) ([Pavel Kruglov](https://github.com/Avogar)). -* 修复在使用 `LIMIT` 时对空 `Tuple` 的排列问题。[#86828](https://github.com/ClickHouse/ClickHouse/pull/86828) ([Pavel Kruglov](https://github.com/Avogar))。 -* 不要为持久化处理节点使用单独的 Keeper 节点。针对 [https://github.com/ClickHouse/ClickHouse/pull/85995](https://github.com/ClickHouse/ClickHouse/pull/85995) 的修复。关闭 [#86406](https://github.com/ClickHouse/ClickHouse/issues/86406)。[#86841](https://github.com/ClickHouse/ClickHouse/pull/86841)([Kseniia Sumarokova](https://github.com/kssenii))。 -* 修复由于 TimeSeries 引擎表导致在 Replicated Database 中无法创建新副本的问题。[#86845](https://github.com/ClickHouse/ClickHouse/pull/86845)([Nikolay Degterinsky](https://github.com/evillique))。 -* 修复在任务缺少某些 Keeper 节点时对 `system.distributed_ddl_queue` 的查询问题。[#86848](https://github.com/ClickHouse/ClickHouse/pull/86848)([Antonio Andelic](https://github.com/antonio2368))。 -* 修复在解压缩数据块末尾执行 seek 时的行为。[#86906](https://github.com/ClickHouse/ClickHouse/pull/86906) ([Pavel Kruglov](https://github.com/Avogar)). -* 处理在 Iceberg 迭代器异步执行期间抛出的异常。[#86932](https://github.com/ClickHouse/ClickHouse/pull/86932) ([Daniil Ivanik](https://github.com/divanik)). -* 修复大体积预处理后 XML 配置的保存问题。[#86934](https://github.com/ClickHouse/ClickHouse/pull/86934) ([c-end](https://github.com/c-end)). -* 修复 system.iceberg_metadata_log 表中日期字段的填充问题。 [#86961](https://github.com/ClickHouse/ClickHouse/pull/86961) ([Daniil Ivanik](https://github.com/divanik)). -* 修复了使用 `WHERE` 的 `TTL` 无限重复计算的问题。 [#86965](https://github.com/ClickHouse/ClickHouse/pull/86965) ([Anton Popov](https://github.com/CurtizJ)). -* 修复了在使用 `ROLLUP` 和 `CUBE` 修饰符时,`uniqExact` 函数可能返回不正确结果的问题。[#87014](https://github.com/ClickHouse/ClickHouse/pull/87014) ([Nikita Taranov](https://github.com/nickitat)). +* 当为 `Kafka2` 表引擎指定错误设置时,现在会向用户提供更清晰的说明。[#83701](https://github.com/ClickHouse/ClickHouse/pull/83701)([János Benjamin Antal](https://github.com/antaljanosbenjamin))。 +* 不再支持为 `Time` 类型指定时区(这样做在语义上没有意义)。[#84689](https://github.com/ClickHouse/ClickHouse/pull/84689) ([Yarik Briukhovetskyi](https://github.com/yariks5s))。 +* 在 `best_effort` 模式下,简化了与解析 Time/Time64 相关的逻辑,并修复了一些缺陷。[#84730](https://github.com/ClickHouse/ClickHouse/pull/84730) ([Yarik Briukhovetskyi](https://github.com/yariks5s))。 +* 新增 `deltaLakeAzureCluster` 函数(类似于 `deltaLakeAzure` 的集群模式版本)以及 `deltaLakeS3Cluster` 函数(`deltaLakeCluster` 的别名)。解决了 [#85358](https://github.com/ClickHouse/ClickHouse/issues/85358)。[#85547](https://github.com/ClickHouse/ClickHouse/pull/85547)([Smita Kulkarni](https://github.com/SmitaRKulkarni))。 +* 在常规复制操作中,以与备份相同的方式应用 `azure_max_single_part_copy_size` 设置。[#85767](https://github.com/ClickHouse/ClickHouse/pull/85767) ([Ilya Golshtein](https://github.com/ilejn))。 +* 在 S3 对象存储中,当出现可重试错误时放慢 S3 客户端线程。此更改将之前的设置 `backup_slow_all_threads_after_retryable_s3_error` 扩展到 S3 磁盘,并将其重命名为更通用的 `s3_slow_all_threads_after_retryable_error`。[#85918](https://github.com/ClickHouse/ClickHouse/pull/85918) ([Julia Kartseva](https://github.com/jkartseva))。 +* 将设置 allow_experimental_variant/dynamic/json 和 enable_variant/dynamic/json 标记为已废弃。现在这三种类型都会被无条件启用。[#85934](https://github.com/ClickHouse/ClickHouse/pull/85934) ([Pavel Kruglov](https://github.com/Avogar))。 +* 在 `http_handlers` 中支持按完整 URL 字符串(`full_url` 指令,包括 scheme 和 host:port)进行过滤。[#86155](https://github.com/ClickHouse/ClickHouse/pull/86155)([Azat Khuzhin](https://github.com/azat))。 +* 新增了一个设置 `allow_experimental_delta_lake_writes`。[#86180](https://github.com/ClickHouse/ClickHouse/pull/86180) ([Kseniia Sumarokova](https://github.com/kssenii))。 +* 修复 init.d 脚本中对 systemd 的检测(从而修复“安装软件包”(Install packages)检查)。[#86187](https://github.com/ClickHouse/ClickHouse/pull/86187) ([Azat Khuzhin](https://github.com/azat))。 +* 新增一个名为 `startup_scripts_failure_reason` 的维度指标。该指标用于区分会导致启动脚本失败的不同错误类型。特别是为了告警目的,我们需要区分瞬时错误(例如 `MEMORY_LIMIT_EXCEEDED` 或 `KEEPER_EXCEPTION`)与非瞬时错误。[#86202](https://github.com/ClickHouse/ClickHouse/pull/86202)([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 +* 允许在 Iceberg 表的分区定义中省略 `identity` 函数。 [#86314](https://github.com/ClickHouse/ClickHouse/pull/86314) ([scanhex12](https://github.com/scanhex12)). +* 添加仅针对特定通道启用 JSON 日志的功能。为此,将 `logger.formatting.channel` 设置为 `syslog`/`console`/`errorlog`/`log` 之一。 [#86331](https://github.com/ClickHouse/ClickHouse/pull/86331) ([Azat Khuzhin](https://github.com/azat)). +* 允许在 `WHERE` 中使用原生数值类型。它们已经可以作为逻辑函数的参数使用。这简化了过滤下推(filter-push-down)和移动到 PREWHERE(move-to-prewhere)的优化。[#86390](https://github.com/ClickHouse/ClickHouse/pull/86390) ([Nikolai Kochetov](https://github.com/KochetovNicolai))。 +* 修复了在针对元数据损坏的 Catalog 执行 `SYSTEM DROP REPLICA` 时出现的错误。[#86391](https://github.com/ClickHouse/ClickHouse/pull/86391) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). +* 在 Azure 中为磁盘访问检查(`skip_access_check = 0`)添加额外重试,因为磁盘访问权限的开通可能需要相当长的时间。[#86419](https://github.com/ClickHouse/ClickHouse/pull/86419)([Alexander Tokmakov](https://github.com/tavplubix))。 +* 将 `timeSeries*()` 函数中的陈旧时间窗口设为左开右闭区间。 [#86588](https://github.com/ClickHouse/ClickHouse/pull/86588) ([Vitaly Baranov](https://github.com/vitlibar)). +* 添加 `FailedInternal*Query` 概要事件(profile events)。 [#86627](https://github.com/ClickHouse/ClickHouse/pull/86627) ([Shane Andrade](https://github.com/mauidude))。 +* 修复了通过配置文件添加用户名中包含点的用户时的处理问题。[#86633](https://github.com/ClickHouse/ClickHouse/pull/86633) ([Mikhail Koviazin](https://github.com/mkmkme)). +* 添加用于查询内存使用情况的异步指标(`QueriesMemoryUsage` 和 `QueriesPeakMemoryUsage`)。[#86669](https://github.com/ClickHouse/ClickHouse/pull/86669) ([Azat Khuzhin](https://github.com/azat)). +* 你可以使用 `clickhouse-benchmark --precise` 选项来更精确地报告 QPS 和其他按时间间隔统计的指标。当查询的执行时长与报告间隔 `--delay D` 相当时,这有助于获得稳定的 QPS。 [#86684](https://github.com/ClickHouse/ClickHouse/pull/86684) ([Sergei Trifonov](https://github.com/serxa)). +* 使 Linux 线程的 nice 值可配置,从而可以为某些线程(merge/mutate、query、物化视图、ZooKeeper 客户端)设置更高或更低的优先级。[#86703](https://github.com/ClickHouse/ClickHouse/pull/86703) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). +* 修复具有误导性的 “specified upload does not exist” 错误,该错误会在分片上传过程中因竞争条件导致原始异常丢失时出现。 [#86725](https://github.com/ClickHouse/ClickHouse/pull/86725) ([Julia Kartseva](https://github.com/jkartseva)). +* 限制 `EXPLAIN` 查询中的查询计划描述长度。对非 `EXPLAIN` 查询不再计算描述。新增设置 `query_plan_max_step_description_length`。 [#86741](https://github.com/ClickHouse/ClickHouse/pull/86741) ([Nikolai Kochetov](https://github.com/KochetovNicolai))。 +* 新增对待处理信号进行调优的能力,以尝试解决 CANNOT_CREATE_TIMER 问题(针对查询分析器:`query_profiler_real_time_period_ns`/`query_profiler_cpu_time_period_ns`)。同时从 `/proc/self/status` 中收集 `SigQ` 用于自检(如果 `ProcessSignalQueueSize` 接近 `ProcessSignalQueueLimit`,则很可能会出现 `CANNOT_CREATE_TIMER` 错误)。 [#86760](https://github.com/ClickHouse/ClickHouse/pull/86760) ([Azat Khuzhin](https://github.com/azat))。 +* 提高 Keeper 中 `RemoveRecursive` 请求的性能。[#86789](https://github.com/ClickHouse/ClickHouse/pull/86789) ([Antonio Andelic](https://github.com/antonio2368)). +* 在输出 JSON 类型时,移除 `PrettyJSONEachRow` 中的多余空白字符。[#86819](https://github.com/ClickHouse/ClickHouse/pull/86819)([Pavel Kruglov](https://github.com/Avogar))。 +* 现在在删除普通可重写磁盘上的目录时,会为 `prefix.path` 记录 blob 的大小。[#86908](https://github.com/ClickHouse/ClickHouse/pull/86908) ([alesapin](https://github.com/alesapin))。 +* 支持对远程 ClickHouse 实例(包括 ClickHouse Cloud)进行性能测试。使用示例:`tests/performance/scripts/perf.py tests/performance/math.xml --runs 10 --user --password --host --port --secure`。[#86995](https://github.com/ClickHouse/ClickHouse/pull/86995)([Raufs Dunamalijevs](https://github.com/rienath))。 +* 在已知会分配大量内存(>16MiB)的地方(排序、异步插入、FileLog)中遵守内存限制。[#87035](https://github.com/ClickHouse/ClickHouse/pull/87035)([Azat Khuzhin](https://github.com/azat))。 +* 如果将 `network_compression_method` 设置为不受支持的通用编解码器,则抛出异常。 [#87097](https://github.com/ClickHouse/ClickHouse/pull/87097) ([Robert Schulze](https://github.com/rschu1ze)). +* 系统表 `system.query_cache` 现在会返回*所有*查询结果缓存条目,而之前只返回共享条目,或当前用户和角色的非共享条目。这是合理的,因为非共享条目本身就不应泄露*查询结果*,而 `system.query_cache` 返回的是*查询字符串*。这使得该系统表的行为更接近 `system.query_log`。[#87104](https://github.com/ClickHouse/ClickHouse/pull/87104) ([Robert Schulze](https://github.com/rschu1ze)). +* 启用 `parseDateTime` 函数的短路求值。 [#87184](https://github.com/ClickHouse/ClickHouse/pull/87184) ([Pavel Kruglov](https://github.com/Avogar)). +* 在 `system.parts_columns` 中新增 `statistics` 列。[#87259](https://github.com/ClickHouse/ClickHouse/pull/87259) ([Han Fei](https://github.com/hanfei1991)). + +#### Bug Fix(官方稳定版中对用户可见的异常行为) + +* 对于复制数据库和内部复制表,`ALTER` 查询的结果现在仅在发起节点上进行验证。这将修复这样的问题:某个已提交的 `ALTER` 查询可能会在其他节点上卡住不动。[#83849](https://github.com/ClickHouse/ClickHouse/pull/83849) ([János Benjamin Antal](https://github.com/antaljanosbenjamin))。 +* 限制 `BackgroundSchedulePool` 中每种类型任务的数量。避免出现所有槽位都被同一类型任务占满、导致其他任务饥饿的情况,并避免任务相互等待而产生死锁。该行为由服务器设置项 `background_schedule_pool_max_parallel_tasks_per_type_ratio` 控制。[#84008](https://github.com/ClickHouse/ClickHouse/pull/84008) ([Alexander Tokmakov](https://github.com/tavplubix))。 +* 在恢复数据库副本时应正确关闭表,否则会在恢复过程中导致某些表引擎出现 LOGICAL_ERROR。 [#84744](https://github.com/ClickHouse/ClickHouse/pull/84744) ([Antonio Andelic](https://github.com/antonio2368)). +* 在为数据库名称生成拼写更正建议时检查访问权限。[#85371](https://github.com/ClickHouse/ClickHouse/pull/85371)([Dmitry Novik](https://github.com/novikd))。 +* 1. 对 hive 列使用 LowCardinality 2. 在虚拟列之前填充 hive 列([https://github.com/ClickHouse/ClickHouse/pull/81040](https://github.com/ClickHouse/ClickHouse/pull/81040) 所必需)3. 在 hive 的空格式上触发 LOGICAL_ERROR [#85528](https://github.com/ClickHouse/ClickHouse/issues/85528) 4. 修复对“hive 分区列是否是唯一列”的检查 5. 断言在 schema 中显式指定了所有 hive 列 6. 针对带有 hive 的 parallel_replicas_cluster 的部分修复 7. 在 hive 工具的 extractKeyValuePairs 中使用有序容器([https://github.com/ClickHouse/ClickHouse/pull/81040](https://github.com/ClickHouse/ClickHouse/pull/81040) 所必需)。[#85538](https://github.com/ClickHouse/ClickHouse/pull/85538) ([Arthur Passos](https://github.com/arthurpassos))。 +* 防止对 `IN` 函数的第一个参数进行不必要的优化,以避免在使用数组映射时偶发错误。 [#85546](https://github.com/ClickHouse/ClickHouse/pull/85546) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* 在写入 Parquet 文件时,Iceberg 源 ID 与 Parquet 名称之间的映射没有根据当时的 schema 进行调整。此 PR 会基于每个 Iceberg 数据文件自身的 schema 进行处理,而不是使用当前的 schema。 [#85829](https://github.com/ClickHouse/ClickHouse/pull/85829) ([Daniil Ivanik](https://github.com/divanik)). +* 修复了在打开文件时单独读取其大小的问题。该修复与 [https://github.com/ClickHouse/ClickHouse/pull/33372](https://github.com/ClickHouse/ClickHouse/pull/33372) 相关,该变更是为修复 `5.10` 版本发布之前的 Linux 内核中的一个 bug 而引入的。[#85837](https://github.com/ClickHouse/ClickHouse/pull/85837)([Konstantin Bogdanov](https://github.com/thevar1able))。 +* 在内核级禁用 IPv6 的系统上(例如在 RHEL 上设置 `ipv6.disable=1`),ClickHouse Keeper 不再启动失败。现在,如果初始 IPv6 监听创建失败,它会尝试回退为使用 IPv4 监听。[#85901](https://github.com/ClickHouse/ClickHouse/pull/85901)([jskong1124](https://github.com/jskong1124))。 +* 此 PR 关闭了 [#77990](https://github.com/ClickHouse/ClickHouse/issues/77990),为 globalJoin 中的并行副本添加了对 TableFunctionRemote 的支持。[#85929](https://github.com/ClickHouse/ClickHouse/pull/85929)([zoomxi](https://github.com/zoomxi))。 +* 修复 `orcschemareader::initializeifneeded()` 中的空指针。此 PR 解决以下问题:[#85292](https://github.com/ClickHouse/ClickHouse/issues/85292) ### 用户可见变更的文档条目。[#85951](https://github.com/ClickHouse/ClickHouse/pull/85951) ([yanglongwei](https://github.com/ylw510))。 +* 添加检查,仅当 `FROM` 子句中的关联子查询使用外层查询中的列时才允许。修复 [#85469](https://github.com/ClickHouse/ClickHouse/issues/85469)。修复 [#85402](https://github.com/ClickHouse/ClickHouse/issues/85402)。[#85966](https://github.com/ClickHouse/ClickHouse/pull/85966)([Dmitry Novik](https://github.com/novikd))。 +* 修复在对某个列执行 `ALTER UPDATE` 时,如果该列的某个子列被用于其他列的 `MATERIALIZED` 表达式的情况。此前,在表达式中包含该子列的物化列不会被正确更新。 [#85985](https://github.com/ClickHouse/ClickHouse/pull/85985) ([Pavel Kruglov](https://github.com/Avogar)). +* 禁止修改其子列用作主键或分区表达式的列。[#86005](https://github.com/ClickHouse/ClickHouse/pull/86005) ([Pavel Kruglov](https://github.com/Avogar))。 +* 修复在 DeltaLake 存储引擎中使用非默认列映射模式读取子列的问题。 [#86064](https://github.com/ClickHouse/ClickHouse/pull/86064) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 修复在 JSON 中带有 Enum 提示的路径使用了错误的默认值的问题。[#86065](https://github.com/ClickHouse/ClickHouse/pull/86065) ([Pavel Kruglov](https://github.com/Avogar)). +* 对 DataLake hive catalog URL 的解析增加了输入校验与清理。关闭了 [#86018](https://github.com/ClickHouse/ClickHouse/issues/86018)。[#86092](https://github.com/ClickHouse/ClickHouse/pull/86092)([rajat mohan](https://github.com/rajatmohan22))。 +* 修复文件系统缓存动态调整大小过程中的逻辑错误。关闭 [#86122](https://github.com/ClickHouse/ClickHouse/issues/86122)。关闭 [https://github.com/ClickHouse/clickhouse-core-incidents/issues/473](https://github.com/ClickHouse/clickhouse-core-incidents/issues/473)。[#86130](https://github.com/ClickHouse/ClickHouse/pull/86130)([Kseniia Sumarokova](https://github.com/kssenii))。 +* 在 DatabaseReplicatedSettings 中对 `logs_to_keep` 使用 `NonZeroUInt64` 类型。[#86142](https://github.com/ClickHouse/ClickHouse/pull/86142)([Tuan Pham Anh](https://github.com/tuanpach))。 +* 在对使用 `index_granularity_bytes = 0` 设置创建的表(例如 `ReplacingMergeTree`)执行带有跳过索引的 `FINAL` 查询时,会抛出异常。该异常现已修复。[#86147](https://github.com/ClickHouse/ClickHouse/pull/86147) ([Shankar Iyer](https://github.com/shankar-iyer)). +* 消除了未定义行为(UB),并修复了 Iceberg 分区表达式的解析问题。[#86166](https://github.com/ClickHouse/ClickHouse/pull/86166) ([Daniil Ivanik](https://github.com/divanik)). +* 修复在一次 INSERT 中同时包含 const 和非 const 块时可能发生的崩溃问题。[#86230](https://github.com/ClickHouse/ClickHouse/pull/86230) ([Azat Khuzhin](https://github.com/azat)). +* 通过 SQL 创建磁盘时,现在会默认处理 `/etc/metrika.xml` 中的 include 配置。[#86232](https://github.com/ClickHouse/ClickHouse/pull/86232) ([alekar](https://github.com/alekar))。 +* 修复 accurateCastOrNull/accurateCastOrDefault 从 String 到 JSON 的转换问题。 [#86240](https://github.com/ClickHouse/ClickHouse/pull/86240) ([Pavel Kruglov](https://github.com/Avogar)). +* 在 Iceberg 引擎中支持不含 '/' 的目录。[#86249](https://github.com/ClickHouse/ClickHouse/pull/86249) ([scanhex12](https://github.com/scanhex12)). +* 修复在 `replaceRegex` 中使用 `FixedString` 类型的 haystack 且 needle 为空时的崩溃。[#86270](https://github.com/ClickHouse/ClickHouse/pull/86270) ([Raúl Marín](https://github.com/Algunenano))。 +* 修复在执行 ALTER UPDATE Nullable(JSON) 时发生的崩溃。 [#86281](https://github.com/ClickHouse/ClickHouse/pull/86281) ([Pavel Kruglov](https://github.com/Avogar))。 +* 修复 `system.tables` 中缺失的列定义字段。 [#86295](https://github.com/ClickHouse/ClickHouse/pull/86295) ([Raúl Marín](https://github.com/Algunenano)). +* 修复从 LowCardinality(Nullable(T)) 到 Dynamic 的类型转换问题。 [#86365](https://github.com/ClickHouse/ClickHouse/pull/86365) ([Pavel Kruglov](https://github.com/Avogar)). +* 修复了向 DeltaLake 写入时的逻辑错误。关闭 [#86175](https://github.com/ClickHouse/ClickHouse/issues/86175)。[#86367](https://github.com/ClickHouse/ClickHouse/pull/86367)([Kseniia Sumarokova](https://github.com/kssenii))。 +* 修复在从 Azure Blob 存储读取空 blob 时,plain_rewritable 磁盘出现 `416 The range specified is invalid for the current size of the resource. The range specified is invalid for the current size of the resource` 错误的问题。 [#86400](https://github.com/ClickHouse/ClickHouse/pull/86400) ([Julia Kartseva](https://github.com/jkartseva)). +* 修复在 Nullable(JSON) 上执行 GROUP BY 时的问题。 [#86410](https://github.com/ClickHouse/ClickHouse/pull/86410) ([Pavel Kruglov](https://github.com/Avogar)). +* 修复了物化视图的一个问题:如果一个物化视图被创建、删除后又以相同名称重新创建,则可能无法正常工作。[#86413](https://github.com/ClickHouse/ClickHouse/pull/86413) ([Alexander Tokmakov](https://github.com/tavplubix))。 +* 在从 *cluster 系列函数读取时,如果所有副本都不可用则失败。 [#86414](https://github.com/ClickHouse/ClickHouse/pull/86414) ([Julian Maicher](https://github.com/jmaicher)). +* 修复由于 `Buffer` 表导致的 `MergesMutationsMemoryTracking` 泄漏,并修复用于从 `Kafka`(及其他)进行流式读取的 `query_views_log`。[#86422](https://github.com/ClickHouse/ClickHouse/pull/86422)([Azat Khuzhin](https://github.com/azat))。 +* 修复在删除别名存储的引用表后执行 `SHOW TABLES` 的行为。 [#86433](https://github.com/ClickHouse/ClickHouse/pull/86433) ([RinChanNOW](https://github.com/RinChanNOWWW)). +* 修复在启用 `send_chunk_header` 且通过 HTTP 协议调用 UDF 时分块头缺失的问题。 [#86469](https://github.com/ClickHouse/ClickHouse/pull/86469) ([Vladimir Cherkasov](https://github.com/vdimir)). +* 修复在启用 jemalloc profile 刷新功能时可能发生的死锁。[#86473](https://github.com/ClickHouse/ClickHouse/pull/86473) ([Azat Khuzhin](https://github.com/azat)). +* 修复 DeltaLake 表引擎中子列读取问题。关闭 [#86204](https://github.com/ClickHouse/ClickHouse/issues/86204)。[#86477](https://github.com/ClickHouse/ClickHouse/pull/86477) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 正确处理回环主机 ID,避免在处理 DDL 任务时发生冲突。[#86479](https://github.com/ClickHouse/ClickHouse/pull/86479) ([Tuan Pham Anh](https://github.com/tuanpach)). +* 修复了针对包含 numeric/decimal 列的 Postgres 数据库引擎表的 detach/attach 操作。[#86480](https://github.com/ClickHouse/ClickHouse/pull/86480) ([Julian Maicher](https://github.com/jmaicher))。 +* 修复在 getSubcolumnType 中使用未初始化内存的问题。[#86498](https://github.com/ClickHouse/ClickHouse/pull/86498) ([Raúl Marín](https://github.com/Algunenano)). +* 函数 `searchAny` 和 `searchAll` 在以空 needle 调用时现在会返回 `true`(即“匹配任意内容”)。之前它们会返回 `false`。(issue [#86300](https://github.com/ClickHouse/ClickHouse/issues/86300))。[#86500](https://github.com/ClickHouse/ClickHouse/pull/86500)([Elmi Ahmadov](https://github.com/ahmadov))。 +* 修复函数 `timeSeriesResampleToGridWithStaleness()` 在第一个 bucket 没有值时的行为。[#86507](https://github.com/ClickHouse/ClickHouse/pull/86507)([Vitaly Baranov](https://github.com/vitlibar))。 +* 修复由于将 `merge_tree_min_read_task_size` 设置为 0 引发的崩溃问题。[#86527](https://github.com/ClickHouse/ClickHouse/pull/86527) ([yanglongwei](https://github.com/ylw510)). +* 读取时会从 Iceberg 元数据中获取每个数据文件的格式(此前是从表参数中获取)。 [#86529](https://github.com/ClickHouse/ClickHouse/pull/86529) ([Daniil Ivanik](https://github.com/divanik))。 +* 在关闭时刷新日志的过程中忽略异常,使关闭过程更加安全(避免 SIGSEGV)。[#86546](https://github.com/ClickHouse/ClickHouse/pull/86546)([Azat Khuzhin](https://github.com/azat))。 +* 修复 `Backup` 数据库引擎在查询包含大小为零的分片文件时抛出异常的问题。 [#86563](https://github.com/ClickHouse/ClickHouse/pull/86563) ([Max Justus Spransy](https://github.com/maxjustus)). +* 修复在启用 `send_chunk_header` 并通过 HTTP 协议调用 UDF 时缺失 chunk header 的问题。 [#86606](https://github.com/ClickHouse/ClickHouse/pull/86606) ([Vladimir Cherkasov](https://github.com/vdimir)). +* 修复由于 keeper 会话过期导致的 S3Queue 逻辑错误 "Expected current processor {} to be equal to {}"。[#86615](https://github.com/ClickHouse/ClickHouse/pull/86615)([Kseniia Sumarokova](https://github.com/kssenii))。 +* 修复了插入和分区裁剪中的可空性缺陷。已关闭 [#86407](https://github.com/ClickHouse/ClickHouse/issues/86407)。[#86630](https://github.com/ClickHouse/ClickHouse/pull/86630)([scanhex12](https://github.com/scanhex12))。 +* 如果已禁用 Iceberg 元数据缓存,请不要禁用文件系统缓存。 [#86635](https://github.com/ClickHouse/ClickHouse/pull/86635) ([Daniil Ivanik](https://github.com/divanik)). +* 修复了 parquet reader v3 中出现的 “Deadlock in Parquet::ReadManager (single-threaded)” 错误。 [#86644](https://github.com/ClickHouse/ClickHouse/pull/86644) ([Michael Kolupaev](https://github.com/al13n321)). +* 修复 ArrowFlight 的 `listen_host` 对 IPv6 的支持。[#86664](https://github.com/ClickHouse/ClickHouse/pull/86664)([Vitaly Baranov](https://github.com/vitlibar))。 +* 修复 `ArrowFlight` 处理程序中的关闭逻辑。此 PR 解决了 [#86596](https://github.com/ClickHouse/ClickHouse/issues/86596)。[#86665](https://github.com/ClickHouse/ClickHouse/pull/86665)([Vitaly Baranov](https://github.com/vitlibar))。 +* 通过设置 `describe_compact_output=1` 修复分布式查询问题。[#86676](https://github.com/ClickHouse/ClickHouse/pull/86676) ([Azat Khuzhin](https://github.com/azat)). +* 修复窗口定义的解析和查询参数的应用。 [#86720](https://github.com/ClickHouse/ClickHouse/pull/86720) ([Azat Khuzhin](https://github.com/azat)). +* 修复在使用 `PARTITION BY` 创建表但未使用分区通配符时,错误抛出异常 `Partition strategy wildcard can not be used without a '_partition_id' wildcard.` 的问题;这种用法在 25.8 之前的版本中是可行的。关闭:[https://github.com/ClickHouse/clickhouse-private/issues/37567](https://github.com/ClickHouse/clickhouse-private/issues/37567)。[#86748](https://github.com/ClickHouse/ClickHouse/pull/86748)([Kseniia Sumarokova](https://github.com/kssenii))。 +* 修复并行查询尝试获取同一个锁时出现的 LogicalError。 [#86751](https://github.com/ClickHouse/ClickHouse/pull/86751) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +* 修复在 RowBinary 输入格式中将 NULL 写入 JSON 共享数据的问题,并在 ColumnObject 中增加一些额外的校验。[#86812](https://github.com/ClickHouse/ClickHouse/pull/86812) ([Pavel Kruglov](https://github.com/Avogar))。 +* 修复在使用 `limit` 时空 `Tuple` 的排列问题。 [#86828](https://github.com/ClickHouse/ClickHouse/pull/86828) ([Pavel Kruglov](https://github.com/Avogar)). +* 不要为持久化处理节点使用单独的 keeper 节点。用于修复 [https://github.com/ClickHouse/ClickHouse/pull/85995](https://github.com/ClickHouse/ClickHouse/pull/85995)。关闭了 [#86406](https://github.com/ClickHouse/ClickHouse/issues/86406)。[#86841](https://github.com/ClickHouse/ClickHouse/pull/86841)([Kseniia Sumarokova](https://github.com/kssenii))。 +* 修复 TimeSeries 引擎表导致无法在 Replicated Database 中创建新副本的问题。 [#86845](https://github.com/ClickHouse/ClickHouse/pull/86845) ([Nikolay Degterinsky](https://github.com/evillique)). +* 修复当任务缺少某些 Keeper 节点时对 `system.distributed_ddl_queue` 的查询问题。 [#86848](https://github.com/ClickHouse/ClickHouse/pull/86848) ([Antonio Andelic](https://github.com/antonio2368)). +* 修复在解压后数据块末尾进行定位时的问题。 [#86906](https://github.com/ClickHouse/ClickHouse/pull/86906) ([Pavel Kruglov](https://github.com/Avogar)). +* 在异步执行 Iceberg Iterator 期间抛出的进程异常。[#86932](https://github.com/ClickHouse/ClickHouse/pull/86932) ([Daniil Ivanik](https://github.com/divanik)). +* 修复保存大体积预处理 XML 配置时的问题。[#86934](https://github.com/ClickHouse/ClickHouse/pull/86934) ([c-end](https://github.com/c-end)). +* 修复 `system.iceberg_metadata_log` 表中日期字段填充逻辑的问题。 [#86961](https://github.com/ClickHouse/ClickHouse/pull/86961) ([Daniil Ivanik](https://github.com/divanik)). +* 修复了在使用 `WHERE` 时对 `TTL` 的无限重算问题。 [#86965](https://github.com/ClickHouse/ClickHouse/pull/86965) ([Anton Popov](https://github.com/CurtizJ)). +* 修复了在使用 `ROLLUP` 和 `CUBE` 修饰符时,`uniqExact` 函数可能返回不正确结果的问题。 [#87014](https://github.com/ClickHouse/ClickHouse/pull/87014) ([Nikita Taranov](https://github.com/nickitat)). * 修复在 `parallel_replicas_for_cluster_functions` 设置为 1 时使用 `url()` 表函数解析表结构的问题。[#87029](https://github.com/ClickHouse/ClickHouse/pull/87029) ([Konstantin Bogdanov](https://github.com/thevar1able))。 -* 在将 `PREWHERE` 的处理拆分为多个步骤后,正确转换其输出类型。 [#87040](https://github.com/ClickHouse/ClickHouse/pull/87040) ([Antonio Andelic](https://github.com/antonio2368)). -* 修复了在使用 `ON CLUSTER` 子句时的轻量级更新。[#87043](https://github.com/ClickHouse/ClickHouse/pull/87043) ([Anton Popov](https://github.com/CurtizJ)). -* 修复某些聚合函数状态与 String 类型参数的兼容性。[#87049](https://github.com/ClickHouse/ClickHouse/pull/87049) ([Pavel Kruglov](https://github.com/Avogar))。 -* 修复了一个问题:来自 OpenAI 的模型名称未被传递。[#87100](https://github.com/ClickHouse/ClickHouse/pull/87100)([Kaushik Iska](https://github.com/iskakaushik))。 +* 在将 `PREWHERE` 拆分为多个步骤后,正确对其输出进行类型转换。[#87040](https://github.com/ClickHouse/ClickHouse/pull/87040) ([Antonio Andelic](https://github.com/antonio2368))。 +* 修复了使用 `ON CLUSTER` 子句的轻量级更新问题。[#87043](https://github.com/ClickHouse/ClickHouse/pull/87043) ([Anton Popov](https://github.com/CurtizJ)). +* 修复部分带有 `String` 参数的聚合函数状态的兼容性问题。 [#87049](https://github.com/ClickHouse/ClickHouse/pull/87049) ([Pavel Kruglov](https://github.com/Avogar)). +* 修复了一个来自 OpenAI 的模型名称未被正确传递的问题。 [#87100](https://github.com/ClickHouse/ClickHouse/pull/87100) ([Kaushik Iska](https://github.com/iskakaushik)). * EmbeddedRocksDB:路径必须位于 user_files 目录内。[#87109](https://github.com/ClickHouse/ClickHouse/pull/87109) ([Raúl Marín](https://github.com/Algunenano))。 -* 修复在 25.1 之前创建的 `KeeperMap` 表在执行 `DROP` 语句后仍在 ZooKeeper 中残留数据的问题。 [#87112](https://github.com/ClickHouse/ClickHouse/pull/87112) ([Nikolay Degterinsky](https://github.com/evillique)). +* 修复在 25.1 之前创建的 KeeperMap 表在执行 DROP 查询后仍会在 ZooKeeper 中遗留数据的问题。 [#87112](https://github.com/ClickHouse/ClickHouse/pull/87112) ([Nikolay Degterinsky](https://github.com/evillique)). * 修复在读取 Parquet 时对 map 和 array 字段 ID 的处理问题。 [#87136](https://github.com/ClickHouse/ClickHouse/pull/87136) ([scanhex12](https://github.com/scanhex12)). -* 修复在惰性物化中读取带有数组大小子列的数组的问题。[#87139](https://github.com/ClickHouse/ClickHouse/pull/87139) ([Pavel Kruglov](https://github.com/Avogar)). -* 修复含有 Dynamic 参数的 CASE 函数。[#87177](https://github.com/ClickHouse/ClickHouse/pull/87177) ([Pavel Kruglov](https://github.com/Avogar)). -* 修复在 CSV 中将空字符串读取为空数组的问题。[#87182](https://github.com/ClickHouse/ClickHouse/pull/87182)([Pavel Kruglov](https://github.com/Avogar))。 -* 修复非关联 `EXISTS` 可能产生错误结果的问题。该问题是在引入 `execute_exists_as_scalar_subquery=1` 时被引入的(参见 [https://github.com/ClickHouse/ClickHouse/pull/85481](https://github.com/ClickHouse/ClickHouse/pull/85481)),影响 `25.8` 版本。修复了 [#86415](https://github.com/ClickHouse/ClickHouse/issues/86415)。[#87207](https://github.com/ClickHouse/ClickHouse/pull/87207)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 -* 当未配置 iceberg_metadata_log 时,如果用户尝试获取 Iceberg 元数据的调试信息,则抛出错误。修复了空指针访问问题。[#87250](https://github.com/ClickHouse/ClickHouse/pull/87250) ([Daniil Ivanik](https://github.com/divanik))。 - - +* 修复惰性物化(lazy materialization)中读取带有 array sizes 子列的数组时的问题。 [#87139](https://github.com/ClickHouse/ClickHouse/pull/87139) ([Pavel Kruglov](https://github.com/Avogar))。 +* 修复 CASE 函数在使用 Dynamic 参数时的问题。[#87177](https://github.com/ClickHouse/ClickHouse/pull/87177) ([Pavel Kruglov](https://github.com/Avogar)). +* 修复在 CSV 中将空字符串解析为空数组的问题。[#87182](https://github.com/ClickHouse/ClickHouse/pull/87182) ([Pavel Kruglov](https://github.com/Avogar))。 +* 修复非关联 `EXISTS` 可能产生错误结果的问题。该问题是在引入 `execute_exists_as_scalar_subquery=1` 时出现的,此设置是在 [https://github.com/ClickHouse/ClickHouse/pull/85481](https://github.com/ClickHouse/ClickHouse/pull/85481) 中引入的,并影响 `25.8` 版本。修复 [#86415](https://github.com/ClickHouse/ClickHouse/issues/86415)。[#87207](https://github.com/ClickHouse/ClickHouse/pull/87207)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 +* 如果未配置 iceberg_metadata_log,但用户尝试获取 Iceberg 元数据调试信息,则抛出错误。修复空指针解引用问题。 [#87250](https://github.com/ClickHouse/ClickHouse/pull/87250) ([Daniil Ivanik](https://github.com/divanik)). #### 构建/测试/打包改进 -* 修复与 abseil-cpp 20250814.0 的兼容性问题,https://github.com/abseil/abseil-cpp/issues/1923。 [#85970](https://github.com/ClickHouse/ClickHouse/pull/85970) ([Yuriy Chernyshov](https://github.com/georgthegreat)) -* 通过开关控制独立 WASM 词法分析器的构建。 [#86505](https://github.com/ClickHouse/ClickHouse/pull/86505) ([Konstantin Bogdanov](https://github.com/thevar1able)) -* 修复在不支持 `vmull_p64` 指令的旧款 ARM CPU 上构建 crc32c 的问题。 [#86521](https://github.com/ClickHouse/ClickHouse/pull/86521) ([Pablo Marcos](https://github.com/pamarcos)) -* 使用 `openldap` 2.6.10。 [#86623](https://github.com/ClickHouse/ClickHouse/pull/86623) ([Konstantin Bogdanov](https://github.com/thevar1able)) -* 在 darwin 上不再尝试拦截 `memalign`。 [#86769](https://github.com/ClickHouse/ClickHouse/pull/86769) ([Konstantin Bogdanov](https://github.com/thevar1able)) -* 使用 `krb5` 1.22.1-final。 [#86836](https://github.com/ClickHouse/ClickHouse/pull/86836) ([Konstantin Bogdanov](https://github.com/thevar1able)) -* 修复在 `list-licenses.sh` 中解包 Rust crate 名称的问题。 [#87305](https://github.com/ClickHouse/ClickHouse/pull/87305) ([Konstantin Bogdanov](https://github.com/thevar1able)) - -### ClickHouse 25.8 LTS 发行版,2025-08-28 {#258} +* 修复与 abseil-cpp 20250814.0 的兼容性问题(参见 https://github.com/abseil/abseil-cpp/issues/1923)。 [#85970](https://github.com/ClickHouse/ClickHouse/pull/85970) ([Yuriy Chernyshov](https://github.com/georgthegreat)). +* 将构建独立 WASM 词法分析器置于一个开关控制之下。 [#86505](https://github.com/ClickHouse/ClickHouse/pull/86505) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* 修复在不支持 `vmull_p64` 指令的较旧 ARM CPU 上构建 crc32c 的问题。 [#86521](https://github.com/ClickHouse/ClickHouse/pull/86521) ([Pablo Marcos](https://github.com/pamarcos)). +* 使用 `openldap` 2.6.10。 [#86623](https://github.com/ClickHouse/ClickHouse/pull/86623) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* 不再尝试在 darwin 上拦截 `memalign`。 [#86769](https://github.com/ClickHouse/ClickHouse/pull/86769) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* 使用 `krb5` 1.22.1-final。 [#86836](https://github.com/ClickHouse/ClickHouse/pull/86836) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* 修复在 `list-licenses.sh` 中解析 Rust crate 名称的问题。 [#87305](https://github.com/ClickHouse/ClickHouse/pull/87305) ([Konstantin Bogdanov](https://github.com/thevar1able)). +### ClickHouse 25.8 LTS 发布版本,2025-08-28 {#258} +#### 向后不兼容的变更 -#### 不兼容变更 -* 对于 JSON 中包含不同类型值的数组,现在将推断为 `Array(Dynamic)`,而不是未命名的 `Tuple`。如需使用之前的行为,请禁用设置 `input_format_json_infer_array_of_dynamic_from_array_of_different_types`。[#80859](https://github.com/ClickHouse/ClickHouse/pull/80859) ([Pavel Kruglov](https://github.com/Avogar)). -* 将 S3 延迟指标迁移为直方图,以提升一致性并简化使用。[#82305](https://github.com/ClickHouse/ClickHouse/pull/82305) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). -* 在默认表达式中,要求为包含点的标识符添加反引号,以防止其被解析为复合标识符。[#83162](https://github.com/ClickHouse/ClickHouse/pull/83162) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). -* 惰性物化仅在启用 analyzer(默认启用)时可用,以避免在未启用 analyzer 的情况下进行维护 —— 根据我们的经验,这种情况下会存在一些问题(例如在条件中使用 `indexHint()` 时)。[#83791](https://github.com/ClickHouse/ClickHouse/pull/83791) ([Igor Nikonov](https://github.com/devcrafter)). -* 在 Parquet 输出格式中,默认将 `Enum` 类型的值写为具有 `ENUM` 逻辑类型的 `BYTE_ARRAY`。[#84169](https://github.com/ClickHouse/ClickHouse/pull/84169) ([Pavel Kruglov](https://github.com/Avogar)). -* 默认启用 MergeTree 设置 `write_marks_for_substreams_in_compact_parts`。这显著提升了从新创建的 Compact 部分读取子列的性能。版本低于 25.5 的服务器将无法读取新的 Compact 部分。[#84171](https://github.com/ClickHouse/ClickHouse/pull/84171) ([Pavel Kruglov](https://github.com/Avogar)). -* 之前 `concurrent_threads_scheduler` 的默认值是 `round_robin`,在存在大量单线程查询(例如 INSERT)时被证明并不公平。此更改将更安全的 `fair_round_robin` 调度器设为默认值。[#84747](https://github.com/ClickHouse/ClickHouse/pull/84747) ([Sergei Trifonov](https://github.com/serxa)). -* ClickHouse 支持 PostgreSQL 风格的 heredoc 语法:`$tag$ string contents... $tag$`,也称为 dollar-quoted 字符串字面量。在之前的版本中,对标签的限制较少:它们可以包含任意字符,包括标点和空白符。这会与同样可以以美元符号开头的标识符产生解析歧义。同时,PostgreSQL 只允许在标签中使用单词字符。为解决该问题,我们现在将 heredoc 标签限制为只能包含单词字符。关闭了 [#84731](https://github.com/ClickHouse/ClickHouse/issues/84731)。[#84846](https://github.com/ClickHouse/ClickHouse/pull/84846) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* 函数 `azureBlobStorage`、`deltaLakeAzure` 和 `icebergAzure` 已更新,以正确校验 `AZURE` 权限。所有集群变体函数(`-Cluster` 函数)现在会根据其对应的非集群函数来验证权限。此外,`icebergLocal` 和 `deltaLakeLocal` 函数现在会强制执行 `FILE` 权限检查。[#84938](https://github.com/ClickHouse/ClickHouse/pull/84938) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). -* 默认启用 `allow_dynamic_metadata_for_data_lakes` 设置(表引擎级别设置)。[#85044](https://github.com/ClickHouse/ClickHouse/pull/85044) ([Daniil Ivanik](https://github.com/divanik)). -* 默认在 JSON 格式中禁用对 64 位整数加引号。[#74079](https://github.com/ClickHouse/ClickHouse/pull/74079) ([Pavel Kruglov](https://github.com/Avogar)) - - +* 对于 JSON 中包含不同类型值的数组,推断为 `Array(Dynamic)` 而不是未命名的 `Tuple`。要恢复之前的行为,请禁用设置 `input_format_json_infer_array_of_dynamic_from_array_of_different_types`。[#80859](https://github.com/ClickHouse/ClickHouse/pull/80859) ([Pavel Kruglov](https://github.com/Avogar))。 +* 将 S3 延迟指标迁移为直方图,以提升一致性和简化性。[#82305](https://github.com/ClickHouse/ClickHouse/pull/82305) ([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 +* 在默认表达式中,要求对包含点号的标识符使用反引号包裹,以防止其被解析为复合标识符。[#83162](https://github.com/ClickHouse/ClickHouse/pull/83162) ([Pervakov Grigorii](https://github.com/GrigoryPervakov))。 +* 惰性物化仅在启用了 analyzer(默认启用)时可用,以避免同时维护无 analyzer 的模式——根据我们的经验,无 analyzer 模式在某些情况下(例如在条件中使用 `indexHint()` 时)会存在问题。[#83791](https://github.com/ClickHouse/ClickHouse/pull/83791) ([Igor Nikonov](https://github.com/devcrafter))。 +* 在 Parquet 输出格式中,默认将 `Enum` 类型的值写为逻辑类型为 `ENUM` 的 `BYTE_ARRAY`。[#84169](https://github.com/ClickHouse/ClickHouse/pull/84169) ([Pavel Kruglov](https://github.com/Avogar))。 +* 默认启用 MergeTree 设置 `write_marks_for_substreams_in_compact_parts`。这显著提升从新创建的 Compact part 中读取子列的性能。版本低于 25.5 的服务器将无法读取新的 Compact part。[#84171](https://github.com/ClickHouse/ClickHouse/pull/84171) ([Pavel Kruglov](https://github.com/Avogar))。 +* 之前 `concurrent_threads_scheduler` 的默认值是 `round_robin`,在存在大量单线程查询(例如 INSERT)时被证明是不公平的。此次更改将更安全的 `fair_round_robin` 调度器设为默认值。[#84747](https://github.com/ClickHouse/ClickHouse/pull/84747) ([Sergei Trifonov](https://github.com/serxa))。 +* ClickHouse 支持 PostgreSQL 风格的 heredoc 语法:`$tag$ string contents... $tag$`,也称为 dollar-quoted 字符串字面量。在之前的版本中,对 tag 的限制更少:它们可以包含任意字符,包括标点和空白。这会与同样可以以美元符号开头的标识符产生解析歧义。同时,PostgreSQL 仅允许在 tag 中使用“单词字符”(字母、数字和下划线)。为解决该问题,我们现在将 heredoc 的 tag 限制为只能包含单词字符。据此关闭 [#84731](https://github.com/ClickHouse/ClickHouse/issues/84731)。[#84846](https://github.com/ClickHouse/ClickHouse/pull/84846) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 函数 `azureBlobStorage`、`deltaLakeAzure` 和 `icebergAzure` 已更新,以正确校验 `AZURE` 权限。所有集群变体函数(`-Cluster` 函数)现在会针对其对应的非集群函数验证权限。此外,`icebergLocal` 和 `deltaLakeLocal` 函数现在会强制执行 `FILE` 权限检查。[#84938](https://github.com/ClickHouse/ClickHouse/pull/84938) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 +* 默认启用 `allow_dynamic_metadata_for_data_lakes` 设置(表引擎级别设置)。[#85044](https://github.com/ClickHouse/ClickHouse/pull/85044) ([Daniil Ivanik](https://github.com/divanik))。 +* 默认禁用在 JSON 格式中对 64 位整数加引号。[#74079](https://github.com/ClickHouse/ClickHouse/pull/74079) ([Pavel Kruglov](https://github.com/Avogar)) #### 新功能 -* 已新增对 PromQL 方言的基础支持。要使用它,在 clickhouse-client 中设置 `dialect='promql'`,通过设置 `promql_table_name='X'` 将其指向 TimeSeries 表,然后执行类似 `rate(ClickHouseProfileEvents_ReadCompressedBytes[1m])[5m:1m]` 的查询。此外,也可以在 SQL 中包装 PromQL 查询:`SELECT * FROM prometheusQuery('up', ...);`。目前仅支持 `rate`、`delta` 和 `increase` 这三个函数。不支持一元/二元运算符,也没有 HTTP API。[#75036](https://github.com/ClickHouse/ClickHouse/pull/75036) ([Vitaly Baranov](https://github.com/vitlibar))。 -* AI 驱动的 SQL 生成现在在可用时可以自动从环境变量 ANTHROPIC_API_KEY 和 OPENAI_API_KEY 中推断配置,从而实现零配置使用该功能。 [#83787](https://github.com/ClickHouse/ClickHouse/pull/83787) ([Kaushik Iska](https://github.com/iskakaushik)). -* 通过新增表函数 `arrowflight` 来实现对 [ArrowFlight RPC](https://arrow.apache.org/docs/format/Flight.html) 协议的支持。 [#74184](https://github.com/ClickHouse/ClickHouse/pull/74184) ([zakr600](https://github.com/zakr600))。 -* 现在所有表都支持 `_table` 虚拟列(不再仅限于使用 `Merge` 引擎的表),这对包含 UNION ALL 的查询特别有用。 [#63665](https://github.com/ClickHouse/ClickHouse/pull/63665) ([Xiaozhe Yu](https://github.com/wudidapaopao)). -* 允许在外部聚合/排序时使用任何存储策略(例如 S3 等对象存储)。[#84734](https://github.com/ClickHouse/ClickHouse/pull/84734)([Azat Khuzhin](https://github.com/azat))。 -* 支持通过显式提供的 IAM 角色进行 AWS S3 身份验证。为 GCS 实现 OAuth。此前这些功能仅在 ClickHouse Cloud 中提供,如今已开源。统一部分接口,例如对象存储连接参数的序列化。[#84011](https://github.com/ClickHouse/ClickHouse/pull/84011) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* 新增对 Iceberg TableEngine 的 position delete 功能支持。 [#83094](https://github.com/ClickHouse/ClickHouse/pull/83094) ([Daniil Ivanik](https://github.com/divanik)). -* 新增对 Iceberg Equality Deletes 的支持。 [#85843](https://github.com/ClickHouse/ClickHouse/pull/85843) ([Han Fei](https://github.com/hanfei1991)). -* 为 CREATE 语句实现 Iceberg 写入。关闭 [#83927](https://github.com/ClickHouse/ClickHouse/issues/83927)。[#83983](https://github.com/ClickHouse/ClickHouse/pull/83983) ([Konstantin Vedernikov](https://github.com/scanhex12))。 -* 写入时支持 Glue catalog。[#84136](https://github.com/ClickHouse/ClickHouse/pull/84136) ([Konstantin Vedernikov](https://github.com/scanhex12))。 -* Iceberg REST 目录写入支持。[#84684](https://github.com/ClickHouse/ClickHouse/pull/84684) ([Konstantin Vedernikov](https://github.com/scanhex12)). -* 将所有 Iceberg position delete 文件合并到数据文件中。这将减少 Iceberg 存储中 Parquet 文件的数量和大小。语法:`OPTIMIZE TABLE table_name`。[#85250](https://github.com/ClickHouse/ClickHouse/pull/85250)([Konstantin Vedernikov](https://github.com/scanhex12))。 -* 支持对 Iceberg 表执行 `drop table` 操作(从 REST/Glue 目录中删除,并清除该表的元数据)。 [#85395](https://github.com/ClickHouse/ClickHouse/pull/85395) ([Konstantin Vedernikov](https://github.com/scanhex12)). -* 在 merge-on-read 格式的 Iceberg 中支持 ALTER DELETE 变更操作(mutation)。 [#85549](https://github.com/ClickHouse/ClickHouse/pull/85549) ([Konstantin Vedernikov](https://github.com/scanhex12)). -* 支持写入 DeltaLake。修复 [#79603](https://github.com/ClickHouse/ClickHouse/issues/79603)。[#85564](https://github.com/ClickHouse/ClickHouse/pull/85564)([Kseniia Sumarokova](https://github.com/kssenii))。 -* 新增设置项 `delta_lake_snapshot_version`,用于在表引擎 `DeltaLake` 中读取特定的快照版本。 [#85295](https://github.com/ClickHouse/ClickHouse/pull/85295) ([Kseniia Sumarokova](https://github.com/kssenii)). -* 在元数据(manifest 条目)中写入更多 Iceberg 统计信息(列大小、下界和上界),以便进行 min-max 剪枝。 [#85746](https://github.com/ClickHouse/ClickHouse/pull/85746) ([Konstantin Vedernikov](https://github.com/scanhex12))。 -* 在 Iceberg 中支持对简单类型列执行添加/删除/修改操作。 [#85769](https://github.com/ClickHouse/ClickHouse/pull/85769) ([Konstantin Vedernikov](https://github.com/scanhex12)). -* Iceberg:支持写入 version-hint 文件。这关闭了 [#85097](https://github.com/ClickHouse/ClickHouse/issues/85097)。 [#85130](https://github.com/ClickHouse/ClickHouse/pull/85130) ([Konstantin Vedernikov](https://github.com/scanhex12)). -* 由临时用户创建的视图现在会存储对应真实用户的副本,在临时用户被删除后也不会再失效。 [#84763](https://github.com/ClickHouse/ClickHouse/pull/84763) ([pufit](https://github.com/pufit))。 -* 向量相似度索引现在支持二值量化。二值量化可显著降低内存消耗,并加速向量索引的构建过程(由于距离计算更快)。此外,现有配置项 `vector_search_postfilter_multiplier` 已被弃用,并由更通用的配置项 `vector_search_index_fetch_multiplier` 所取代。[#85024](https://github.com/ClickHouse/ClickHouse/pull/85024) ([Shankar Iyer](https://github.com/shankar-iyer)). -* 在 `s3` 或 `s3Cluster` 表引擎/函数中允许使用键值对参数,例如 `s3('url', CSV, structure = 'a Int32', compression_method = 'gzip')`。 [#85134](https://github.com/ClickHouse/ClickHouse/pull/85134) ([Kseniia Sumarokova](https://github.com/kssenii)). -* 新增一个系统表,用于保存来自 Kafka 等引擎的错误传入消息(“死信队列”)。 [#68873](https://github.com/ClickHouse/ClickHouse/pull/68873) ([Ilya Golshtein](https://github.com/ilejn)). -* 为 Replicated 数据库新增了 `SYSTEM RESTORE DATABASE REPLICA`,其行为类似于现有的 `ReplicatedMergeTree` 恢复功能。[#73100](https://github.com/ClickHouse/ClickHouse/pull/73100)([Konstantin Morozov](https://github.com/k-morozov))。 -* PostgreSQL 协议现已支持 `COPY` 命令。[#74344](https://github.com/ClickHouse/ClickHouse/pull/74344)([Konstantin Vedernikov](https://github.com/scanhex12))。 -* 支持 MySQL 协议的 C# 客户端。这项更改关闭了 [#83992](https://github.com/ClickHouse/ClickHouse/issues/83992)。 [#84397](https://github.com/ClickHouse/ClickHouse/pull/84397) ([Konstantin Vedernikov](https://github.com/scanhex12)). -* 添加对 Hive 分区风格读写的支持。 [#76802](https://github.com/ClickHouse/ClickHouse/pull/76802) ([Arthur Passos](https://github.com/arthurpassos)). +* 已添加对 PromQL 方言的基本支持。要使用它,请在 clickhouse-client 中设置 `dialect='promql'`,并通过设置 `promql_table_name='X'` 将其指向 TimeSeries 表,然后执行类似 `rate(ClickHouseProfileEvents_ReadCompressedBytes[1m])[5m:1m]` 的查询。此外,还可以通过 SQL 包装 PromQL 查询:`SELECT * FROM prometheusQuery('up', ...);`。目前仅支持 `rate`、`delta` 和 `increase` 函数。不支持一元/二元运算符,也不提供 HTTP API。[#75036](https://github.com/ClickHouse/ClickHouse/pull/75036)([Vitaly Baranov](https://github.com/vitlibar))。 +* AI 驱动的 SQL 生成功能现在可以在环境中自动读取 ANTHROPIC_API_KEY 和 OPENAI_API_KEY(如果存在),从而实现零配置即可使用此功能。 [#83787](https://github.com/ClickHouse/ClickHouse/pull/83787) ([Kaushik Iska](https://github.com/iskakaushik)). +* 通过添加以下内容来实现对 [ArrowFlight RPC](https://arrow.apache.org/docs/format/Flight.html) 协议的支持:- 新增表函数 `arrowflight`。[#74184](https://github.com/ClickHouse/ClickHouse/pull/74184)([zakr600](https://github.com/zakr600))。 +* 现在所有表都支持 `_table` 虚拟列(不仅限于使用 `Merge` 引擎的表),这对于包含 UNION ALL 的查询尤其有用。[#63665](https://github.com/ClickHouse/ClickHouse/pull/63665)([Xiaozhe Yu](https://github.com/wudidapaopao))。 +* 允许在外部聚合/排序中使用任意存储策略(例如 S3 等对象存储)。 [#84734](https://github.com/ClickHouse/ClickHouse/pull/84734) ([Azat Khuzhin](https://github.com/azat)). +* 基于显式指定的 IAM 角色实现 AWS S3 身份验证;为 GCS 实现 OAuth 支持。这些特性此前仅在 ClickHouse Cloud 中可用,现在已经开源。统一部分接口,例如对象存储连接参数的序列化方式。[#84011](https://github.com/ClickHouse/ClickHouse/pull/84011) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 支持 Iceberg TableEngine 的 position delete 操作。[#83094](https://github.com/ClickHouse/ClickHouse/pull/83094) ([Daniil Ivanik](https://github.com/divanik))。 +* 支持 Iceberg Equality Deletes。[#85843](https://github.com/ClickHouse/ClickHouse/pull/85843) ([Han Fei](https://github.com/hanfei1991))。 +* 为 `CREATE` 操作提供 Iceberg 写入支持。关闭 [#83927](https://github.com/ClickHouse/ClickHouse/issues/83927)。[#83983](https://github.com/ClickHouse/ClickHouse/pull/83983)([Konstantin Vedernikov](https://github.com/scanhex12))。 +* 用于写操作的 Glue 目录。[#84136](https://github.com/ClickHouse/ClickHouse/pull/84136) ([Konstantin Vedernikov](https://github.com/scanhex12)). +* 支持通过 Iceberg REST 目录进行写入。[#84684](https://github.com/ClickHouse/ClickHouse/pull/84684) ([Konstantin Vedernikov](https://github.com/scanhex12)). +* 将所有 Iceberg 位置删除(position delete)文件合并到数据文件中。这将减少 Iceberg 存储中 Parquet 文件的数量和大小。语法:`OPTIMIZE TABLE table_name`。[#85250](https://github.com/ClickHouse/ClickHouse/pull/85250) ([Konstantin Vedernikov](https://github.com/scanhex12))。 +* 支持对 Iceberg 表执行 `drop table`(从 REST/Glue 目录中移除该表并删除其元数据)。 [#85395](https://github.com/ClickHouse/ClickHouse/pull/85395) ([Konstantin Vedernikov](https://github.com/scanhex12))。 +* 为 merge-on-read 格式的 Iceberg 表增加对 ALTER DELETE 变更操作的支持。 [#85549](https://github.com/ClickHouse/ClickHouse/pull/85549) ([Konstantin Vedernikov](https://github.com/scanhex12)). +* 支持写入 DeltaLake。关闭了 [#79603](https://github.com/ClickHouse/ClickHouse/issues/79603)。[#85564](https://github.com/ClickHouse/ClickHouse/pull/85564)([Kseniia Sumarokova](https://github.com/kssenii))。 +* 新增设置 `delta_lake_snapshot_version`,用于在表引擎 `DeltaLake` 中读取指定的快照版本。[#85295](https://github.com/ClickHouse/ClickHouse/pull/85295)([Kseniia Sumarokova](https://github.com/kssenii))。 +* 在元数据(manifest 条目)中写入更多 Iceberg 统计信息(列大小、下界和上界),以改进 min-max 剪枝。 [#85746](https://github.com/ClickHouse/ClickHouse/pull/85746) ([Konstantin Vedernikov](https://github.com/scanhex12)). +* 支持在 Iceberg 中对简单类型的列执行新增/删除/修改操作。 [#85769](https://github.com/ClickHouse/ClickHouse/pull/85769) ([Konstantin Vedernikov](https://github.com/scanhex12)). +* Iceberg:支持写入 version-hint 文件,关闭了 [#85097](https://github.com/ClickHouse/ClickHouse/issues/85097)。[#85130](https://github.com/ClickHouse/ClickHouse/pull/85130)([Konstantin Vedernikov](https://github.com/scanhex12))。 +* 由临时用户创建的视图现在会存储一份对应真实用户的副本,并且在该临时用户被删除后不再失效。 [#84763](https://github.com/ClickHouse/ClickHouse/pull/84763) ([pufit](https://github.com/pufit)). +* 向量相似索引现在支持二进制量化。二进制量化可显著降低内存消耗,并加快构建向量索引的过程(因为距离计算更快)。此外,现有的参数 `vector_search_postfilter_multiplier` 已被废弃,替换为更通用的参数:`vector_search_index_fetch_multiplier`。 [#85024](https://github.com/ClickHouse/ClickHouse/pull/85024) ([Shankar Iyer](https://github.com/shankar-iyer))。 +* 在 `s3` 或 `s3Cluster` 表引擎/函数中允许使用键值对形式的参数,例如:`s3('url', CSV, structure = 'a Int32', compression_method = 'gzip')`。 [#85134](https://github.com/ClickHouse/ClickHouse/pull/85134) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 新增一个系统表,用于保存来自 Kafka 等引擎的出错传入消息(“死信队列”)。[#68873](https://github.com/ClickHouse/ClickHouse/pull/68873) ([Ilya Golshtein](https://github.com/ilejn)). +* 用于 Replicated 数据库的新命令 SYSTEM RESTORE DATABASE REPLICA,类似于现有的 ReplicatedMergeTree 恢复功能。[#73100](https://github.com/ClickHouse/ClickHouse/pull/73100) ([Konstantin Morozov](https://github.com/k-morozov))。 +* PostgreSQL 协议现已支持 `COPY` 命令。[#74344](https://github.com/ClickHouse/ClickHouse/pull/74344) ([Konstantin Vedernikov](https://github.com/scanhex12))。 +* 新增对 MySQL 协议的 C# 客户端支持。此更改关闭了 [#83992](https://github.com/ClickHouse/ClickHouse/issues/83992)。[#84397](https://github.com/ClickHouse/ClickHouse/pull/84397)([Konstantin Vedernikov](https://github.com/scanhex12))。 +* 新增对 Hive 分区风格的读写支持。 [#76802](https://github.com/ClickHouse/ClickHouse/pull/76802) ([Arthur Passos](https://github.com/arthurpassos)). * 添加 `zookeeper_connection_log` 系统表,用于存储 ZooKeeper 连接的历史信息。[#79494](https://github.com/ClickHouse/ClickHouse/pull/79494) ([János Benjamin Antal](https://github.com/antaljanosbenjamin))。 -* 服务器设置 `cpu_slot_preemption` 为工作负载启用抢占式 CPU 调度,并确保在各个工作负载之间实现最大-最小公平的 CPU 时间分配。新增以下用于 CPU 节流的工作负载设置:`max_cpus`、`max_cpu_share` 和 `max_burst_cpu_seconds`。更多详情:[https://clickhouse.com/docs/operations/workload-scheduling#cpu_scheduling](https://clickhouse.com/docs/operations/workload-scheduling#cpu_scheduling)。[#80879](https://github.com/ClickHouse/ClickHouse/pull/80879)([Sergei Trifonov](https://github.com/serxa))。 -* 在达到配置的查询次数或时间阈值后主动断开 TCP 连接。这有助于在负载均衡器后面的集群节点之间实现更均匀的连接分布。解决了 [#68000](https://github.com/ClickHouse/ClickHouse/issues/68000)。[#81472](https://github.com/ClickHouse/ClickHouse/pull/81472)([Kenny Sun](https://github.com/hwabis))。 -* 并行副本现在支持在查询中使用投影。[#82659](https://github.com/ClickHouse/ClickHouse/issues/82659)。[#82807](https://github.com/ClickHouse/ClickHouse/pull/82807)([zoomxi](https://github.com/zoomxi))。 -* 在已支持 `DESCRIBE (SELECT ...)` 的基础上,新增对 `DESCRIBE SELECT` 的支持。[#82947](https://github.com/ClickHouse/ClickHouse/pull/82947)([Yarik Briukhovetskyi](https://github.com/yariks5s))。 -* 强制为 mysql_port 和 postgresql_port 启用安全连接。 [#82962](https://github.com/ClickHouse/ClickHouse/pull/82962) ([tiandiwonder](https://github.com/tiandiwonder)). -* 用户现在可以使用 `JSONExtractCaseInsensitive`(以及 `JSONExtract` 的其他变体)进行不区分大小写的 JSON 键名查找。[#83770](https://github.com/ClickHouse/ClickHouse/pull/83770)([Alistair Evans](https://github.com/alistairjevans))。 -* 引入 `system.completions` 表,关闭 [#81889](https://github.com/ClickHouse/ClickHouse/issues/81889)。[#83833](https://github.com/ClickHouse/ClickHouse/pull/83833) ([|2ustam](https://github.com/RuS2m))。 -* 新增了函数 `nowInBlock64`。示例用法:`SELECT nowInBlock64(6)` 返回 `2025-07-29 17:09:37.775725`。[#84178](https://github.com/ClickHouse/ClickHouse/pull/84178) ([Halersson Paris](https://github.com/halersson))。 -* 向 AzureBlobStorage 添加 extra_credentials,以便使用 client_id 和 tenant_id 进行身份验证。[#84235](https://github.com/ClickHouse/ClickHouse/pull/84235) ([Pablo Marcos](https://github.com/pamarcos))。 +* 服务器端设置 `cpu_slot_preemption` 启用工作负载的抢占式 CPU 调度,并确保在各个工作负载之间实现 CPU 时间的 max-min 公平分配。新增了用于 CPU 限制的工作负载设置:`max_cpus`、`max_cpu_share` 和 `max_burst_cpu_seconds`。更多详情:[https://clickhouse.com/docs/operations/workload-scheduling#cpu_scheduling](https://clickhouse.com/docs/operations/workload-scheduling#cpu_scheduling)。[#80879](https://github.com/ClickHouse/ClickHouse/pull/80879)([Sergei Trifonov](https://github.com/serxa))。 +* 在达到配置的查询次数或时间阈值后主动关闭 TCP 连接。这有助于在负载均衡器后方的集群节点之间实现更均匀的连接分布。解决 [#68000](https://github.com/ClickHouse/ClickHouse/issues/68000)。[#81472](https://github.com/ClickHouse/ClickHouse/pull/81472)([Kenny Sun](https://github.com/hwabis))。 +* 并行副本现在支持在查询中使用投影功能。[#82659](https://github.com/ClickHouse/ClickHouse/issues/82659)。[#82807](https://github.com/ClickHouse/ClickHouse/pull/82807)([zoomxi](https://github.com/zoomxi))。 +* 在原有对 DESCRIBE (SELECT ...) 的支持基础上,新增对 DESCRIBE SELECT 的支持。 [#82947](https://github.com/ClickHouse/ClickHouse/pull/82947) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* 强制对 mysql_port 和 postgresql_port 使用安全连接。 [#82962](https://github.com/ClickHouse/ClickHouse/pull/82962) ([tiandiwonder](https://github.com/tiandiwonder)). +* 用户现在可以使用 `JSONExtractCaseInsensitive`(以及 `JSONExtract` 的其他变体)进行不区分大小写的 JSON 键查找。[#83770](https://github.com/ClickHouse/ClickHouse/pull/83770)([Alistair Evans](https://github.com/alistairjevans))。 +* 引入 `system.completions` 表,解决 [#81889](https://github.com/ClickHouse/ClickHouse/issues/81889)。[#83833](https://github.com/ClickHouse/ClickHouse/pull/83833) ([|2ustam](https://github.com/RuS2m))。 +* 新增了函数 `nowInBlock64`。示例用法:`SELECT nowInBlock64(6)` 返回 `2025-07-29 17:09:37.775725`。[#84178](https://github.com/ClickHouse/ClickHouse/pull/84178) ([Halersson Paris](https://github.com/halersson)). +* 为 AzureBlobStorage 添加 extra_credentials,用于通过 client_id 和 tenant_id 进行身份验证。 [#84235](https://github.com/ClickHouse/ClickHouse/pull/84235) ([Pablo Marcos](https://github.com/pamarcos)). * 新增函数 `dateTimeToUUIDv7`,用于将 DateTime 值转换为 UUIDv7。示例用法:`SELECT dateTimeToUUIDv7(toDateTime('2025-08-15 18:57:56'))` 返回 `0198af18-8320-7a7d-abd3-358db23b9d5c`。[#84319](https://github.com/ClickHouse/ClickHouse/pull/84319)([samradovich](https://github.com/samradovich))。 -* `timeSeriesDerivToGrid` 和 `timeSeriesPredictLinearToGrid` 聚合函数,用于根据指定的起始时间戳、结束时间戳和步长,将数据重新采样到时间网格上;分别计算类似 PromQL 中 `deriv` 和 `predict_linear` 的结果。[#84328](https://github.com/ClickHouse/ClickHouse/pull/84328) ([Stephen Chi](https://github.com/stephchi0))。 -* 新增两个 TimeSeries 函数:- `timeSeriesRange(start_timestamp, end_timestamp, step)`,- `timeSeriesFromGrid(start_timestamp, end_timestamp, step, values)`。[#85435](https://github.com/ClickHouse/ClickHouse/pull/85435) ([Vitaly Baranov](https://github.com/vitlibar))。 -* 新增了语法:`GRANT READ ON S3('s3://foo/.*') TO user`。[#84503](https://github.com/ClickHouse/ClickHouse/pull/84503) ([pufit](https://github.com/pufit)). -* 新增了 `Hash` 作为一种新的输出格式。它对结果中的所有列和行计算单个哈希值。这对于计算结果的「指纹」很有用,例如在数据传输成为瓶颈的场景中。示例:`SELECT arrayJoin(['abc', 'def']), 42 FORMAT Hash` 返回 `e5f9e676db098fdb9530d2059d8c23ef`。[#84607](https://github.com/ClickHouse/ClickHouse/pull/84607)([Robert Schulze](https://github.com/rschu1ze))。 -* 新增在 Keeper Multi 查询中设置任意 watch 的功能。[#84964](https://github.com/ClickHouse/ClickHouse/pull/84964)([Mikhail Artemenko](https://github.com/Michicosun))。 -* 为 `clickhouse-benchmark` 工具新增了选项 `--max-concurrency`,用于启用一种模式,该模式会逐步增加并行查询的数量。[#85623](https://github.com/ClickHouse/ClickHouse/pull/85623)([Sergei Trifonov](https://github.com/serxa))。 +* `timeSeriesDerivToGrid` 和 `timeSeriesPredictLinearToGrid` 聚合函数,用于将数据重新采样到由指定起始时间戳、结束时间戳和步长定义的时间网格,并分别计算类似 PromQL 中 `deriv` 和 `predict_linear` 的结果。[#84328](https://github.com/ClickHouse/ClickHouse/pull/84328) ([Stephen Chi](https://github.com/stephchi0))。 +* 新增两个 TimeSeries 函数:- `timeSeriesRange(start_timestamp, end_timestamp, step)`,- `timeSeriesFromGrid(start_timestamp, end_timestamp, step, values)`。[#85435](https://github.com/ClickHouse/ClickHouse/pull/85435)([Vitaly Baranov](https://github.com/vitlibar))。 +* 新增语法 `GRANT READ ON S3('s3://foo/.*') TO user`。[#84503](https://github.com/ClickHouse/ClickHouse/pull/84503)([pufit](https://github.com/pufit))。 +* 新增 `Hash` 作为一种新的输出格式。它会为结果的所有列和所有行计算一个单个的哈希值。这对于计算结果的“指纹”非常有用,例如在数据传输成为瓶颈的场景中。示例:`SELECT arrayJoin(['abc', 'def']), 42 FORMAT Hash` 返回 `e5f9e676db098fdb9530d2059d8c23ef`。[#84607](https://github.com/ClickHouse/ClickHouse/pull/84607)([Robert Schulze](https://github.com/rschu1ze))。 +* 在 Keeper Multi 查询中支持设置任意 watch。 [#84964](https://github.com/ClickHouse/ClickHouse/pull/84964) ([Mikhail Artemenko](https://github.com/Michicosun)). +* 为 `clickhouse-benchmark` 工具添加了选项 `--max-concurrency`,用于启用一种模式,以逐步增加并行查询的数量。[#85623](https://github.com/ClickHouse/ClickHouse/pull/85623) ([Sergei Trifonov](https://github.com/serxa))。 * 支持部分聚合指标。 [#85328](https://github.com/ClickHouse/ClickHouse/pull/85328) ([Mikhail Artemenko](https://github.com/Michicosun)). - - #### 实验性特性 -* 默认启用对关联子查询的支持,它们不再是实验性特性。[#85107](https://github.com/ClickHouse/ClickHouse/pull/85107) ([Dmitry Novik](https://github.com/novikd))。 -* Unity、Glue、Rest 和 Hive Metastore 数据湖目录从实验性阶段提升为 beta 阶段。[#85848](https://github.com/ClickHouse/ClickHouse/pull/85848) ([Melvyn Peignon](https://github.com/melvynator))。 -* 轻量级更新和删除从实验性阶段提升为 beta 阶段。 -* 基于向量相似度索引的近似向量搜索现已达到 GA 阶段。[#85888](https://github.com/ClickHouse/ClickHouse/pull/85888) ([Robert Schulze](https://github.com/rschu1ze))。 -* 新增 Ytsaurus 表引擎和表函数。[#77606](https://github.com/ClickHouse/ClickHouse/pull/77606) ([MikhailBurdukov](https://github.com/MikhailBurdukov))。 -* 之前,文本索引数据会被拆分为多个段(每个段的默认大小为 256 MiB)。这可以在构建文本索引时降低内存消耗,但会增加磁盘空间占用并延长查询响应时间。[#84590](https://github.com/ClickHouse/ClickHouse/pull/84590) ([Elmi Ahmadov](https://github.com/ahmadov))。 - +* 默认启用对关联子查询的支持,该功能不再是实验性功能。[#85107](https://github.com/ClickHouse/ClickHouse/pull/85107) ([Dmitry Novik](https://github.com/novikd))。 +* Unity、Glue、REST 和 Hive Metastore 数据湖目录由实验性阶段提升为 beta 阶段。[#85848](https://github.com/ClickHouse/ClickHouse/pull/85848) ([Melvyn Peignon](https://github.com/melvynator))。 +* 轻量级更新和删除功能由实验性阶段提升为 beta 阶段。 +* 基于向量相似度索引的近似向量搜索现已达到 GA 阶段。[#85888](https://github.com/ClickHouse/ClickHouse/pull/85888) ([Robert Schulze](https://github.com/rschu1ze))。 +* 支持 Ytsaurus 表引擎和表函数。[#77606](https://github.com/ClickHouse/ClickHouse/pull/77606) ([MikhailBurdukov](https://github.com/MikhailBurdukov))。 +* 之前,文本索引数据会被划分为多个分段(每个分段的默认大小为 256 MiB)。这可能在构建文本索引时降低内存消耗,但会增加磁盘空间占用并延长查询响应时间。[#84590](https://github.com/ClickHouse/ClickHouse/pull/84590) ([Elmi Ahmadov](https://github.com/ahmadov))。 #### 性能优化 -* 新的 Parquet 读取器实现。整体速度更快,并支持页级过滤下推和 PREWHERE。目前为实验性功能。通过设置 `input_format_parquet_use_native_reader_v3` 来启用。[#82789](https://github.com/ClickHouse/ClickHouse/pull/82789) ([Michael Kolupaev](https://github.com/al13n321))。 -* 将 Azure 库中官方的 HTTP 传输替换为我们自研的 Azure Blob Storage HTTP 客户端实现。为该客户端引入了多项配置,这些配置与 S3 的配置保持一致。为 Azure 和 S3 都引入了更为激进的连接超时设置。改进了对 Azure profile 事件和指标的观测与分析能力。新客户端默认启用,在 Azure Blob Storage 上的冷查询场景下显著降低了延迟。旧的 `Curl` 客户端可以通过设置 `azure_sdk_use_native_client=false` 恢复使用。[#83294](https://github.com/ClickHouse/ClickHouse/pull/83294)([alesapin](https://github.com/alesapin))。此前官方提供的 Azure 客户端实现由于存在从五秒到数分钟不等的严重延迟尖峰,完全不适合生产环境使用。我们已经彻底弃用这一极其糟糕的实现,并对此感到非常自豪。 -* 按文件大小递增顺序处理索引。整体索引排序会优先处理 minmax 和 vector 索引(分别因为其简单性和选择性),然后再处理其他体积较小的索引。在 minmax/vector 索引内部,同样会优先处理更小的索引。[#84094](https://github.com/ClickHouse/ClickHouse/pull/84094)([Maruth Goyal](https://github.com/maruthgoyal))。 -* 默认启用 MergeTree 的 `write_marks_for_substreams_in_compact_parts` 设置。这将显著提升从新创建的 Compact 部分读取子列时的性能。版本低于 25.5 的服务器将无法读取新的 Compact 部分。[#84171](https://github.com/ClickHouse/ClickHouse/pull/84171) ([Pavel Kruglov](https://github.com/Avogar)). -* `azureBlobStorage` 表引擎:在可能的情况下缓存并复用托管身份认证令牌,以避免限流。[#79860](https://github.com/ClickHouse/ClickHouse/pull/79860) ([Nick Blakely](https://github.com/niblak))。 -* 如果右侧由连接键列函数式确定(即所有行的连接键值唯一),则所有 `ALL` 类型的 `LEFT/INNER` JOIN 将会自动转换为 `RightAny`。 [#84010](https://github.com/ClickHouse/ClickHouse/pull/84010) ([Nikita Taranov](https://github.com/nickitat))。 -* 在 `max_joined_block_size_rows` 的基础上新增 `max_joined_block_size_bytes`,用于限制包含大列数据的 JOIN 的内存使用。[#83869](https://github.com/ClickHouse/ClickHouse/pull/83869)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 -* 添加了新的逻辑(由设置 `enable_producing_buckets_out_of_order_in_aggregation` 控制,默认启用),允许在内存高效聚合期间对部分 bucket 进行乱序发送。当某些聚合 bucket 的合并时间明显长于其他 bucket 时,该逻辑通过允许发起方在此期间优先合并具有更高 bucket ID 的 bucket 来提升性能。其缺点是可能会增加内存使用量(预计不会明显增加)。[#80179](https://github.com/ClickHouse/ClickHouse/pull/80179)([Nikita Taranov](https://github.com/nickitat))。 -* 引入了 `optimize_rewrite_regexp_functions` 设置(默认启用),当检测到特定正则表达式模式时,允许优化器将某些 `replaceRegexpAll`、`replaceRegexpOne` 和 `extract` 调用重写为更简单且更高效的形式。(问题 [#81981](https://github.com/ClickHouse/ClickHouse/issues/81981))。[#81992](https://github.com/ClickHouse/ClickHouse/pull/81992)([Amos Bird](https://github.com/amosbird))。 -* 在哈希 JOIN 主循环之外处理 `max_joined_block_rows`。略微提升了 ALL JOIN 的性能。[#83216](https://github.com/ClickHouse/ClickHouse/pull/83216)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 -* 优先处理粒度更高的 min-max 索引。修复 [#75381](https://github.com/ClickHouse/ClickHouse/issues/75381) 问题。[#83798](https://github.com/ClickHouse/ClickHouse/pull/83798)([Maruth Goyal](https://github.com/maruthgoyal))。 -* 将 `DISTINCT` 窗口聚合优化为线性时间复杂度,并修复 `sumDistinct` 中的一个错误。关闭 [#79792](https://github.com/ClickHouse/ClickHouse/issues/79792)。关闭 [#52253](https://github.com/ClickHouse/ClickHouse/issues/52253)。[#79859](https://github.com/ClickHouse/ClickHouse/pull/79859)([Nihal Z. Miaji](https://github.com/nihalzp))。 -* 使用向量相似度索引的向量搜索查询,由于减少了存储读取和 CPU 占用,具备更低的延迟。[#83803](https://github.com/ClickHouse/ClickHouse/pull/83803) ([Shankar Iyer](https://github.com/shankar-iyer)). -* 使用 Rendezvous 哈希以提高并行副本之间工作负载分布的缓存局部性。[#82511](https://github.com/ClickHouse/ClickHouse/pull/82511) ([Anton Ivashkin](https://github.com/ianton-ru)). -* 为 If 组合子实现 `addManyDefaults`,从而加快带有 If 组合子的聚合函数的执行速度。[#83870](https://github.com/ClickHouse/ClickHouse/pull/83870) ([Raúl Marín](https://github.com/Algunenano))。 -* 在对多个字符串或数字列进行 GROUP BY 时,以列式方式计算序列化键。[#83884](https://github.com/ClickHouse/ClickHouse/pull/83884) ([李扬](https://github.com/taiyang-li))。 -* 在索引分析得出并行副本读取为空范围的情况下,避免了全表扫描。 [#84971](https://github.com/ClickHouse/ClickHouse/pull/84971) ([Eduard Karacharov](https://github.com/korowa)). +* 新的 Parquet 读取器实现。通常更快,并支持页面级过滤下推和 PREWHERE。目前为实验性功能。通过设置 `input_format_parquet_use_native_reader_v3` 启用。[#82789](https://github.com/ClickHouse/ClickHouse/pull/82789) ([Michael Kolupaev](https://github.com/al13n321))。 +* 用我们自研的 HTTP 客户端实现替换了 Azure 库中官方的 HTTP 传输层,用于访问 Azure Blob Storage。为该客户端引入了多项配置选项,这些选项与 S3 的配置保持一致。为 Azure 和 S3 都引入了更激进的连接超时机制。改进了对 Azure profile 事件和指标的观测能力。新客户端默认启用,在基于 Azure Blob Storage 的冷查询场景下显著降低了延迟。旧的 `Curl` 客户端可以通过设置 `azure_sdk_use_native_client=false` 恢复使用。[#83294](https://github.com/ClickHouse/ClickHouse/pull/83294)([alesapin](https://github.com/alesapin))。此前官方提供的 Azure 客户端实现由于出现极其严重的延迟尖峰(从 5 秒到数分钟不等),完全不适合在生产环境中使用。我们已经彻底弃用那套糟糕的实现,并对此感到非常自豪。 +* 按文件大小递增的顺序处理索引。综合考虑后的索引排序会优先处理 minmax 索引和向量索引(分别因为其实现简单和高选择性),然后是其他较小的索引。在 minmax/向量索引之间的排序中,也会优先选择更小的索引。[#84094](https://github.com/ClickHouse/ClickHouse/pull/84094)([Maruth Goyal](https://github.com/maruthgoyal))。 +* 默认启用 MergeTree 设置 `write_marks_for_substreams_in_compact_parts`。这将显著提升从新创建的 Compact 部分读取子列的性能。服务器版本低于 25.5 的实例将无法读取新的 Compact 部分。[#84171](https://github.com/ClickHouse/ClickHouse/pull/84171)([Pavel Kruglov](https://github.com/Avogar))。 +* `azureBlobStorage` table engine: 在可能的情况下缓存并复用托管身份验证令牌,以避免触发限流。 [#79860](https://github.com/ClickHouse/ClickHouse/pull/79860) ([Nick Blakely](https://github.com/niblak)). +* 如果右侧在连接键列上由函数依赖唯一确定(即所有行的连接键值唯一),则所有 `ALL` `LEFT/INNER` JOIN 将会自动转换为 `RightAny`。[#84010](https://github.com/ClickHouse/ClickHouse/pull/84010) ([Nikita Taranov](https://github.com/nickitat))。 +* 除 `max_joined_block_size_rows` 外,新增 `max_joined_block_size_bytes`,用于限制包含大列的 JOIN 的内存使用量。 [#83869](https://github.com/ClickHouse/ClickHouse/pull/83869) ([Nikolai Kochetov](https://github.com/KochetovNicolai))。 +* 添加了新的逻辑(由设置 `enable_producing_buckets_out_of_order_in_aggregation` 控制,默认启用),允许在节省内存的聚合过程中无序发送部分 bucket。当某些聚合 bucket 的合并耗时明显长于其他 bucket 时,该逻辑通过允许发起端在此期间先合并具有更高 bucket ID 的 bucket 来提升性能。其缺点是可能会增加内存使用量(预计不会很显著)。[#80179](https://github.com/ClickHouse/ClickHouse/pull/80179)([Nikita Taranov](https://github.com/nickitat))。 +* 引入了 `optimize_rewrite_regexp_functions` 设置(默认启用),在检测到特定正则表达式模式时,允许优化器将某些 `replaceRegexpAll`、`replaceRegexpOne` 和 `extract` 调用重写为更简单且更高效的形式(issue [#81981](https://github.com/ClickHouse/ClickHouse/issues/81981))。[#81992](https://github.com/ClickHouse/ClickHouse/pull/81992)([Amos Bird](https://github.com/amosbird))。 +* 将对 `max_joined_block_rows` 的处理移到哈希 JOIN 主循环之外。对 ALL JOIN 略有性能提升。[#83216](https://github.com/ClickHouse/ClickHouse/pull/83216) ([Nikolai Kochetov](https://github.com/KochetovNicolai))。 +* 优先处理粒度更高的 min-max 索引。关闭 [#75381](https://github.com/ClickHouse/ClickHouse/issues/75381)。[#83798](https://github.com/ClickHouse/ClickHouse/pull/83798)([Maruth Goyal](https://github.com/maruthgoyal))。 +* 使 `DISTINCT` 窗口聚合以线性时间运行,并修复 `sumDistinct` 中的一个错误。Closes [#79792](https://github.com/ClickHouse/ClickHouse/issues/79792). Closes [#52253](https://github.com/ClickHouse/ClickHouse/issues/52253). [#79859](https://github.com/ClickHouse/ClickHouse/pull/79859) ([Nihal Z. Miaji](https://github.com/nihalzp)). +* 使用向量相似度索引的向量搜索查询,由于减少了存储读取和 CPU 使用量,从而以更低的延迟完成。[#83803](https://github.com/ClickHouse/ClickHouse/pull/83803) ([Shankar Iyer](https://github.com/shankar-iyer))。 +* 使用 Rendezvous 哈希改进并行副本之间负载分配的缓存局部性。 [#82511](https://github.com/ClickHouse/ClickHouse/pull/82511) ([Anton Ivashkin](https://github.com/ianton-ru)). +* 为 If 组合器实现了 `addManyDefaults`,从而带有 If 组合器的聚合函数运行得更快。[#83870](https://github.com/ClickHouse/ClickHouse/pull/83870) ([Raúl Marín](https://github.com/Algunenano))。 +* 在对多个字符串或数字列执行 `GROUP BY` 时,以列式方式计算序列化键。[#83884](https://github.com/ClickHouse/ClickHouse/pull/83884) ([李扬](https://github.com/taiyang-li))。 +* 当索引分析对并行副本读取得出空区间结果时,避免了全表扫描。[#84971](https://github.com/ClickHouse/ClickHouse/pull/84971) ([Eduard Karacharov](https://github.com/korowa)). * 尝试使用 `-falign-functions=64`,以获得更稳定的性能测试结果。 [#83920](https://github.com/ClickHouse/ClickHouse/pull/83920) ([Azat Khuzhin](https://github.com/azat)). -* 现在,Bloom Filter 索引也会用于类似 `has([c1, c2, ...], column)` 的条件,其中 `column` 不是 `Array` 类型。这提升了此类查询的性能,使其与使用 `IN` 运算符一样高效。[#83945](https://github.com/ClickHouse/ClickHouse/pull/83945)([Doron David](https://github.com/dorki))。 -* 在 CompressedReadBufferBase::readCompressedData 中减少不必要的 memcpy 调用。[#83986](https://github.com/ClickHouse/ClickHouse/pull/83986) ([Raúl Marín](https://github.com/Algunenano))。 -* 通过删除临时数据,对 `largestTriangleThreeBuckets` 进行了优化。[#84479](https://github.com/ClickHouse/ClickHouse/pull/84479) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 通过简化代码优化字符串反序列化。修复 [#38564](https://github.com/ClickHouse/ClickHouse/issues/38564)。[#84561](https://github.com/ClickHouse/ClickHouse/pull/84561)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 修正了并行副本的最小任务大小计算方式。[#84752](https://github.com/ClickHouse/ClickHouse/pull/84752)([Nikita Taranov](https://github.com/nickitat))。 -* 提升了在 `Join` 模式下应用补丁 part 的性能。[#85040](https://github.com/ClickHouse/ClickHouse/pull/85040) ([Anton Popov](https://github.com/CurtizJ)). -* 修复了零结尾字节问题。关闭了 [#85062](https://github.com/ClickHouse/ClickHouse/issues/85062)。修复了若干小缺陷。函数 `structureToProtobufSchema`、`structureToCapnProtoSchema` 未正确写入以零结尾的字节,而是使用了换行符。这会导致输出中缺失换行符,并且在使用依赖该零字节的其他函数(例如 `logTrace`、`demangle`、`extractURLParameter`、`toStringCutToZero` 以及 `encrypt`/`decrypt`)时,可能引发缓冲区溢出。`regexp_tree` 字典布局不支持处理包含零字节的字符串。`formatRowNoNewline` 函数在使用 `Values` 格式,或使用任意行末不带换行符的其他格式时,会错误地截掉输出的最后一个字符。函数 `stem` 存在异常安全性错误,在极少见的场景下可能导致内存泄漏。`initcap` 函数对于 `FixedString` 参数的行为不正确:如果同一数据块中前一个字符串以单词字符结尾,它不会将字符串开头识别为单词的开始。修复了 Apache `ORC` 格式中的一个安全漏洞,该漏洞可能导致未初始化内存内容被暴露。修改了函数 `replaceRegexpAll` 及其对应别名 `REGEXP_REPLACE` 的行为:现在即使前一次匹配已处理整条字符串(例如正则 `^a*|a*$` 或 `^|.*` 的情况),它仍然可以在字符串末尾执行一次空匹配——这与 JavaScript、Perl、Python、PHP、Ruby 的语义一致,但不同于 PostgreSQL 的语义。简化并优化了许多函数的实现。若干函数的文档此前存在错误,现已修正。请注意,`byteSize` 对于 String 列以及由 String 列组成的复杂类型的输出已发生变化(每个空字符串从 9 字节变为 8 字节),这是预期行为。[#85063](https://github.com/ClickHouse/ClickHouse/pull/85063)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 在仅为了返回单行结果而进行常量实体化的情况下,对常量实体化进行了优化。[#85071](https://github.com/ClickHouse/ClickHouse/pull/85071)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 使用 delta-kernel-rs 后端改进并行文件处理。 [#85642](https://github.com/ClickHouse/ClickHouse/pull/85642) ([Azat Khuzhin](https://github.com/azat)). -* 引入了一个新的设置:enable_add_distinct_to_in_subqueries。启用后,ClickHouse 会在分布式查询的 IN 子句中自动为子查询添加 DISTINCT。这样可以显著减小在分片之间传输的临时表大小,并提升网络效率。注意:这是一个权衡——虽然可以减少网络传输,但在每个节点上需要执行额外的合并(去重)工作。当网络传输成为瓶颈且可以接受额外的合并开销时,建议启用该设置。[#81908](https://github.com/ClickHouse/ClickHouse/pull/81908) ([fhw12345](https://github.com/fhw12345))。 -* 降低可执行用户自定义函数在查询时的内存跟踪开销。 [#83929](https://github.com/ClickHouse/ClickHouse/pull/83929) ([Eduard Karacharov](https://github.com/korowa))。 -* 在 `DeltaLake` 存储中实现内部 `delta-kernel-rs` 过滤(统计信息和分区裁剪)。[#84006](https://github.com/ClickHouse/ClickHouse/pull/84006) ([Kseniia Sumarokova](https://github.com/kssenii))。 -* 更加细粒度地禁用依赖于即时更新列或通过 patch parts 更新列的 skipping index。现在,skipping index 只会在受即时变更(on-the-fly mutations)或 patch parts 影响的 parts 中被禁用;此前,这些索引会在所有 parts 中统一禁用。[#84241](https://github.com/ClickHouse/ClickHouse/pull/84241)([Anton Popov](https://github.com/CurtizJ))。 -* 为加密命名集合的 encrypted_buffer 分配所需的最小内存。 [#84432](https://github.com/ClickHouse/ClickHouse/pull/84432) ([Pablo Marcos](https://github.com/pamarcos)). -* 改进了对 Bloom filter 索引(regular、ngram 和 token)的支持:当第一个参数是常量数组(集合),第二个参数是被索引的列(子集)时,也可以利用这些索引,从而实现更高效的查询执行。[#84700](https://github.com/ClickHouse/ClickHouse/pull/84700) ([Doron David](https://github.com/dorki))。 -* 降低 Keeper 中存储锁的争用。[#84732](https://github.com/ClickHouse/ClickHouse/pull/84732) ([Antonio Andelic](https://github.com/antonio2368)). -* 为 `WHERE` 子句补充此前缺失的 `read_in_order_use_virtual_row` 支持。这样可以在过滤条件未完全下推到 `PREWHERE` 时,使带有过滤条件的查询跳过读取更多数据分片。[#84835](https://github.com/ClickHouse/ClickHouse/pull/84835) ([Nikolai Kochetov](https://github.com/KochetovNicolai))。 -* 实现了从 Iceberg 表中异步遍历对象,而无需为每个数据文件显式存储这些对象。[#85369](https://github.com/ClickHouse/ClickHouse/pull/85369) ([Daniil Ivanik](https://github.com/divanik)). -* 将非关联的 `EXISTS` 作为标量子查询来执行。这样可以使用标量子查询缓存,并对结果进行常量折叠,这对索引很有帮助。为保持兼容性,新增了设置项 `execute_exists_as_scalar_subquery=1`。 [#85481](https://github.com/ClickHouse/ClickHouse/pull/85481) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). - - - - +* 现在,布隆过滤器索引也会用于形如 `has([c1, c2, ...], column)` 的条件,其中 `column` 不是 `Array` 类型。这样提升了此类查询的性能,使其效率与使用 `IN` 运算符相当。[#83945](https://github.com/ClickHouse/ClickHouse/pull/83945)([Doron David](https://github.com/dorki))。 +* 减少在 CompressedReadBufferBase::readCompressedData 中不必要的 memcpy 调用。 [#83986](https://github.com/ClickHouse/ClickHouse/pull/83986) ([Raúl Marín](https://github.com/Algunenano)). +* 通过删除临时数据来优化 `largestTriangleThreeBuckets`。 [#84479](https://github.com/ClickHouse/ClickHouse/pull/84479) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 通过简化代码优化了字符串反序列化。解决了 [#38564](https://github.com/ClickHouse/ClickHouse/issues/38564)。[#84561](https://github.com/ClickHouse/ClickHouse/pull/84561)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 修复了并行副本的最小任务大小计算。 [#84752](https://github.com/ClickHouse/ClickHouse/pull/84752) ([Nikita Taranov](https://github.com/nickitat)). +* 优化了在 `Join` 模式下应用补丁分片时的性能。 [#85040](https://github.com/ClickHouse/ClickHouse/pull/85040) ([Anton Popov](https://github.com/CurtizJ)). +* 移除零字节。关闭了 [#85062](https://github.com/ClickHouse/ClickHouse/issues/85062)。修复了一些次要错误。函数 `structureToProtobufSchema`、`structureToCapnProtoSchema` 未正确写入结尾的零终止字节,而是使用了换行符。这会导致输出中缺少换行符,并且在使用依赖于零字节的其他函数(例如 `logTrace`、`demangle`、`extractURLParameter`、`toStringCutToZero` 和 `encrypt`/`decrypt`)时可能引发缓冲区溢出。`regexp_tree` 字典布局不支持处理包含零字节的字符串。`formatRowNoNewline` 函数在使用 `Values` 格式或任何其他行末不带换行符的格式调用时,会错误地截断输出的最后一个字符。函数 `stem` 存在异常安全问题,在极少数情况下可能导致内存泄漏。`initcap` 函数对 `FixedString` 参数的行为不正确:如果同一数据块中前一个字符串以单词字符结束,它无法在当前字符串开头识别单词的起始位置。修复了 Apache `ORC` 格式的一个安全漏洞,该漏洞可能导致未初始化内存的泄露。修改了函数 `replaceRegexpAll` 及其对应别名 `REGEXP_REPLACE` 的行为:现在即使前一个匹配已经处理了整个字符串(例如在 `^a*|a*$` 或 `^|.*` 的情况下),它在字符串末尾仍然可以进行一次空匹配——这与 JavaScript、Perl、Python、PHP、Ruby 的语义一致,但不同于 PostgreSQL 的语义。简化并优化了许多函数的实现。若干函数的文档此前存在错误,现已修正。请注意,`byteSize` 对 String 列以及由 String 列组成的复杂类型的输出已发生变化(每个空字符串从 9 字节变为 8 字节),这是预期行为。[#85063](https://github.com/ClickHouse/ClickHouse/pull/85063)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 在仅为返回单行结果而进行常量实体化的场景下,对该过程进行了优化。[#85071](https://github.com/ClickHouse/ClickHouse/pull/85071)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 使用 delta-kernel-rs 后端改进并行文件处理。[#85642](https://github.com/ClickHouse/ClickHouse/pull/85642) ([Azat Khuzhin](https://github.com/azat)). +* 新增了一个设置:enable_add_distinct_to_in_subqueries。启用后,ClickHouse 会在分布式查询的 IN 子句中自动为子查询添加 DISTINCT。这样可以显著减少在分片之间传输的临时表大小,从而提高网络传输效率。注意:这是一种权衡——虽然可以减少网络传输,但每个节点上需要执行额外的合并(去重)工作。当网络传输成为瓶颈且可以接受合并开销时,建议启用该设置。[#81908](https://github.com/ClickHouse/ClickHouse/pull/81908)([fhw12345](https://github.com/fhw12345))。 +* 降低执行用户自定义函数时的查询内存跟踪开销。 [#83929](https://github.com/ClickHouse/ClickHouse/pull/83929) ([Eduard Karacharov](https://github.com/korowa)). +* 在 `DeltaLake` 存储引擎中实现基于 `delta-kernel-rs` 的内部过滤(统计信息与分区剪枝)。[#84006](https://github.com/ClickHouse/ClickHouse/pull/84006)([Kseniia Sumarokova](https://github.com/kssenii))。 +* 以更细粒度的方式禁用依赖于在线更新列或由 patch parts 更新列的跳过索引。现在,这些跳过索引只会在受在线变更或 patch parts 影响的 part 中不再使用;之前,这些索引会在所有 part 中被禁用。[#84241](https://github.com/ClickHouse/ClickHouse/pull/84241)([Anton Popov](https://github.com/CurtizJ))。 +* 仅为加密命名集合的 encrypted_buffer 分配所需的最小内存。[#84432](https://github.com/ClickHouse/ClickHouse/pull/84432) ([Pablo Marcos](https://github.com/pamarcos)). +* 改进了对 Bloom filter 索引(regular、ngram 和 token)的支持,以便在第一个参数为常量数组(集合)、第二个参数为建立索引的列(子集)时也能利用这些索引,从而更高效地执行查询。[#84700](https://github.com/ClickHouse/ClickHouse/pull/84700)([Doron David](https://github.com/dorki))。 +* 减少 Keeper 中存储锁的竞争。[#84732](https://github.com/ClickHouse/ClickHouse/pull/84732)([Antonio Andelic](https://github.com/antonio2368))。 +* 为 `WHERE` 子句补充对缺失的 `read_in_order_use_virtual_row` 的支持。这样可以在过滤条件未完全下推到 `PREWHERE` 的查询中,跳过读取更多的数据分片。[#84835](https://github.com/ClickHouse/ClickHouse/pull/84835) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). +* 允许对 Iceberg 表中的对象进行异步迭代,而无需为每个数据文件显式存储对象。 [#85369](https://github.com/ClickHouse/ClickHouse/pull/85369) ([Daniil Ivanik](https://github.com/divanik)). +* 将非关联的 `EXISTS` 作为标量子查询来执行。这样可以使用标量子查询缓存并对结果进行常量折叠,这对索引很有帮助。为兼容性新增了设置 `execute_exists_as_scalar_subquery=1`。[#85481](https://github.com/ClickHouse/ClickHouse/pull/85481)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 #### 改进 -* 添加 `database_replicated` 设置,用于定义 DatabaseReplicatedSettings 的默认值。如果在创建 Replicated 数据库的查询中未指定该设置,则会使用此处的值。 [#85127](https://github.com/ClickHouse/ClickHouse/pull/85127) ([Tuan Pham Anh](https://github.com/tuanpach))。 -* 使 Web UI(play)中的表格列支持调整大小。[#84012](https://github.com/ClickHouse/ClickHouse/pull/84012) ([Doron David](https://github.com/dorki))。 -* 通过 `iceberg_metadata_compression_method` 设置支持对 `.metadata.json` 文件进行压缩。该设置支持所有 ClickHouse 压缩方法。此更改解决了 [#84895](https://github.com/ClickHouse/ClickHouse/issues/84895)。[#85196](https://github.com/ClickHouse/ClickHouse/pull/85196)([Konstantin Vedernikov](https://github.com/scanhex12))。 -* 在 `EXPLAIN indexes = 1` 的输出中显示待读取的范围数量。[#79938](https://github.com/ClickHouse/ClickHouse/pull/79938) ([Christoph Wurm](https://github.com/cwurm)). -* 新增用于设置 ORC 压缩块大小的配置,并将默认值从 64KB 调整为 256KB,以与 Spark 和 Hive 保持一致。 [#80602](https://github.com/ClickHouse/ClickHouse/pull/80602) ([李扬](https://github.com/taiyang-li)). -* 在 Wide part 中添加 `columns_substreams.txt` 文件,用于跟踪该 part 中存储的所有子流(substreams)。这有助于跟踪 JSON 和 Dynamic 类型中的动态流,从而无需为获取动态流列表(例如用于列大小计算)而读取这些列的数据样本。此外,现在所有动态流都会体现在 `system.parts_columns` 中。[#81091](https://github.com/ClickHouse/ClickHouse/pull/81091) ([Pavel Kruglov](https://github.com/Avogar))。 -* 在 clickhouse format 中新增 CLI 选项 --show_secrets,使其默认隐藏敏感数据。[#81524](https://github.com/ClickHouse/ClickHouse/pull/81524) ([Nikolai Ryzhov](https://github.com/Dolaxom))。 -* 在 HTTP 套接字层面对 S3 读写请求进行限速(而不是对整个 S3 请求限速),以避免由 `max_remote_read_network_bandwidth_for_server` 和 `max_remote_write_network_bandwidth_for_server` 限速导致的问题。[#81837](https://github.com/ClickHouse/ClickHouse/pull/81837)([Sergei Trifonov](https://github.com/serxa))。 -* 允许在不同窗口中为同一列混用不同的排序规则(用于窗口函数)。[#82877](https://github.com/ClickHouse/ClickHouse/pull/82877)([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy))。 -* 添加一个用于模拟、可视化和对比合并选择器的工具。[#71496](https://github.com/ClickHouse/ClickHouse/pull/71496) ([Sergei Trifonov](https://github.com/serxa))。 -* 当在 `address_expression` 参数中指定集群时,为 `remote*` 表函数增加对并行副本的支持。同时修复了 [#73295](https://github.com/ClickHouse/ClickHouse/issues/73295)。[#82904](https://github.com/ClickHouse/ClickHouse/pull/82904)([Igor Nikonov](https://github.com/devcrafter))。 -* 将所有与写入备份文件相关的日志消息级别设置为 TRACE。 [#82907](https://github.com/ClickHouse/ClickHouse/pull/82907) ([Hans Krutzer](https://github.com/hkrutzer)). -* 名称或编解码器较为特殊的用户自定义函数,可能会被 SQL 格式化器以不一致的方式进行格式化。本次修改修复了 [#83092](https://github.com/ClickHouse/ClickHouse/issues/83092)。[#83644](https://github.com/ClickHouse/ClickHouse/pull/83644)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 用户现在可以在 JSON 类型中使用 Time 和 Time64 类型。[#83784](https://github.com/ClickHouse/ClickHouse/pull/83784)([Yarik Briukhovetskyi](https://github.com/yariks5s))。 -* 现在,使用并行副本的 JOIN 现已采用 join 逻辑步骤。如果在使用并行副本的 JOIN 查询时遇到任何问题,请尝试执行 `SET query_plan_use_new_logical_join_step=0` 并报告问题。 [#83801](https://github.com/ClickHouse/ClickHouse/pull/83801) ([Vladimir Cherkasov](https://github.com/vdimir)). -* 修复 cluster_function_process_archive_on_multiple_nodes 的兼容性。[#83968](https://github.com/ClickHouse/ClickHouse/pull/83968)([Kseniia Sumarokova](https://github.com/kssenii))。 -* 支持在 `S3Queue` 表级别更改物化视图插入相关设置。新增 `S3Queue` 级别设置:`min_insert_block_size_rows_for_materialized_views` 和 `min_insert_block_size_bytes_for_materialized_views`。默认情况下将使用 profile 级别设置,而 `S3Queue` 级别设置会覆盖它们。[#83971](https://github.com/ClickHouse/ClickHouse/pull/83971) ([Kseniia Sumarokova](https://github.com/kssenii))。 -* 新增了 profile 事件 `MutationAffectedRowsUpperBound`,用于显示一次 mutation 操作中受影响的行数(例如,在 `ALTER UPDATE` 或 `ALTER DELETE` 查询中满足条件的行的总数)。[#83978](https://github.com/ClickHouse/ClickHouse/pull/83978) ([Anton Popov](https://github.com/CurtizJ))。 -* 利用 cgroup 中的信息(在适用的情况下,即 `memory_worker_use_cgroup` 已启用且 cgroup 可用)来调整内存跟踪器(`memory_worker_correct_memory_tracker`)。 [#83981](https://github.com/ClickHouse/ClickHouse/pull/83981) ([Azat Khuzhin](https://github.com/azat)). -* MongoDB:字符串到数值类型的隐式解析。此前,如果从 MongoDB 源为 ClickHouse 表中的数值列接收到字符串值,会引发异常。现在,引擎会尝试自动从字符串中解析数值。修复 [#81167](https://github.com/ClickHouse/ClickHouse/issues/81167)。[#84069](https://github.com/ClickHouse/ClickHouse/pull/84069)([Kirill Nikiforov](https://github.com/allmazz))。 -* 在 `Pretty` 格式中为 `Nullable` 数值的数字分组添加高亮显示。[#84070](https://github.com/ClickHouse/ClickHouse/pull/84070)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* Dashboard:工具提示在顶部不会再从容器中溢出。[#84072](https://github.com/ClickHouse/ClickHouse/pull/84072) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 略微优化了仪表板上的点样式。[#84074](https://github.com/ClickHouse/ClickHouse/pull/84074) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* Dashboard 现在有了略微改进的 favicon。[#84076](https://github.com/ClickHouse/ClickHouse/pull/84076)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* Web UI:允许浏览器保存密码,同时记住 URL 字段的取值。[#84087](https://github.com/ClickHouse/ClickHouse/pull/84087)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 新增支持使用 `apply_to_children` 配置在特定 Keeper 节点上应用额外 ACL。[#84137](https://github.com/ClickHouse/ClickHouse/pull/84137) ([Antonio Andelic](https://github.com/antonio2368))。 -* 修复 MergeTree 中对 "compact" Variant 判别器序列化的使用问题。此前在某些本可以使用的情况下未被使用。[#84141](https://github.com/ClickHouse/ClickHouse/pull/84141) ([Pavel Kruglov](https://github.com/Avogar))。 -* 在数据库复制设置中新增了一个服务器设置 `logs_to_keep`,可用于更改复制数据库的默认 `logs_to_keep` 参数。较小的值会减少 ZNode 的数量(尤其是在存在大量数据库的情况下),而较大的值则允许缺失的副本在更长时间后仍能追上进度。[#84183](https://github.com/ClickHouse/ClickHouse/pull/84183)([Alexey Khatskevich](https://github.com/Khatskevich))。 -* 添加 `json_type_escape_dots_in_keys` 设置,用于在 JSON 类型解析时转义 JSON 键中的点。该设置默认关闭。 [#84207](https://github.com/ClickHouse/ClickHouse/pull/84207) ([Pavel Kruglov](https://github.com/Avogar))。 -* 在检查 EOF 之前先检查连接是否已被取消,以避免从已关闭的连接上读取。修复了 [#83893](https://github.com/ClickHouse/ClickHouse/issues/83893)。[#84227](https://github.com/ClickHouse/ClickHouse/pull/84227)([Raufs Dunamalijevs](https://github.com/rienath))。 -* 在 Web UI 中略微改进了文本选区的颜色。差异主要在暗色模式下选中表格单元格时才会比较明显。在之前的版本中,文本与选区背景之间的对比度不足。[#84258](https://github.com/ClickHouse/ClickHouse/pull/84258)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 通过简化内部检查,改进了服务器关闭期间对客户端连接的处理。[#84312](https://github.com/ClickHouse/ClickHouse/pull/84312) ([Raufs Dunamalijevs](https://github.com/rienath))。 -* 新增配置项 `delta_lake_enable_expression_visitor_logging`,用于关闭表达式访问器日志,因为在调试时,即便使用 test 日志级别,这些日志也可能过于冗长。[#84315](https://github.com/ClickHouse/ClickHouse/pull/84315) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 添加 `database_replicated` 设置,用于定义 `DatabaseReplicatedSettings` 的默认值。如果在创建 Replicated 数据库的查询中未包含该设置,则会使用这里配置的值。 [#85127](https://github.com/ClickHouse/ClickHouse/pull/85127) ([Tuan Pham Anh](https://github.com/tuanpach)). +* 现可在 Web UI(play)中调整表格列宽度。[#84012](https://github.com/ClickHouse/ClickHouse/pull/84012) ([Doron David](https://github.com/dorki))。 +* 通过 `iceberg_metadata_compression_method` 设置支持压缩的 `.metadata.json` 文件。该设置支持 ClickHouse 的所有压缩方法。解决了 [#84895](https://github.com/ClickHouse/ClickHouse/issues/84895)。[#85196](https://github.com/ClickHouse/ClickHouse/pull/85196)([Konstantin Vedernikov](https://github.com/scanhex12))。 +* 在 `EXPLAIN indexes = 1` 的输出中显示要读取的范围数量。 [#79938](https://github.com/ClickHouse/ClickHouse/pull/79938) ([Christoph Wurm](https://github.com/cwurm)). +* 新增用于设置 ORC 压缩块大小的配置项,并将其默认值从 64KB 更新为 256KB,以与 Spark 或 Hive 保持一致。[#80602](https://github.com/ClickHouse/ClickHouse/pull/80602) ([李扬](https://github.com/taiyang-li))。 +* 在 Wide part 中添加 `columns_substreams.txt` 文件,用于跟踪该 part 中存储的所有子流。这样可以跟踪 JSON 和 Dynamic 类型中的动态子流,从而避免为获取动态子流列表(例如用于计算列大小)而去读取这些列的样本。此外,现在所有动态子流也都会体现在 `system.parts_columns` 中。[#81091](https://github.com/ClickHouse/ClickHouse/pull/81091)([Pavel Kruglov](https://github.com/Avogar))。 +* 为 clickhouse format 命令添加 CLI 选项 --show_secrets,使其默认隐藏敏感数据。[#81524](https://github.com/ClickHouse/ClickHouse/pull/81524)([Nikolai Ryzhov](https://github.com/Dolaxom))。 +* 在 HTTP 套接字层面对 S3 读写请求进行限流(而不是对整个 S3 请求限流),以避免与 `max_remote_read_network_bandwidth_for_server` 和 `max_remote_write_network_bandwidth_for_server` 的限流机制产生冲突。[#81837](https://github.com/ClickHouse/ClickHouse/pull/81837)([Sergei Trifonov](https://github.com/serxa))。 +* 允许在窗口函数中,对同一列在不同窗口使用不同的排序规则(collation)。 [#82877](https://github.com/ClickHouse/ClickHouse/pull/82877) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* 新增一个用于模拟、可视化和比较 merge selector 的工具。 [#71496](https://github.com/ClickHouse/ClickHouse/pull/71496) ([Sergei Trifonov](https://github.com/serxa)). +* 当在 `address_expression` 参数中指定集群时,为使用并行副本的 `remote*` 表函数添加支持。同时修复 [#73295](https://github.com/ClickHouse/ClickHouse/issues/73295)。[#82904](https://github.com/ClickHouse/ClickHouse/pull/82904)([Igor Nikonov](https://github.com/devcrafter))。 +* 将所有与写入备份文件相关的日志消息级别设置为 TRACE。[#82907](https://github.com/ClickHouse/ClickHouse/pull/82907) ([Hans Krutzer](https://github.com/hkrutzer)). +* 名称或编解码器比较特殊的用户定义函数,可能会在 SQL 格式化器中出现不一致的格式化结果。此更改修复了 [#83092](https://github.com/ClickHouse/ClickHouse/issues/83092)。[#83644](https://github.com/ClickHouse/ClickHouse/pull/83644)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 用户现在可以在 JSON 类型中使用 Time 和 Time64 类型。[#83784](https://github.com/ClickHouse/ClickHouse/pull/83784) ([Yarik Briukhovetskyi](https://github.com/yariks5s))。 +* 现在,使用并行副本的 JOIN 现已采用新的 JOIN 逻辑步骤。如果在使用并行副本的 JOIN 查询时遇到任何问题,请尝试执行 `SET query_plan_use_new_logical_join_step=0`,并提交 issue。 [#83801](https://github.com/ClickHouse/ClickHouse/pull/83801) ([Vladimir Cherkasov](https://github.com/vdimir))。 +* 修复 `cluster_function_process_archive_on_multiple_nodes` 的兼容性问题。 [#83968](https://github.com/ClickHouse/ClickHouse/pull/83968) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 支持在 `S3Queue` 表级别更改物化视图插入相关设置。新增 `S3Queue` 级别设置:`min_insert_block_size_rows_for_materialized_views` 和 `min_insert_block_size_bytes_for_materialized_views`。默认情况下将使用 profile 级别的设置,`S3Queue` 级别的设置会覆盖这些设置。[#83971](https://github.com/ClickHouse/ClickHouse/pull/83971) ([Kseniia Sumarokova](https://github.com/kssenii))。 +* 新增了 profile 事件 `MutationAffectedRowsUpperBound`,用于显示一次变更操作(mutation)中受影响的行数(例如,在 `ALTER UPDATE` 或 `ALTER DELETE` 查询中满足条件的行总数)。[#83978](https://github.com/ClickHouse/ClickHouse/pull/83978) ([Anton Popov](https://github.com/CurtizJ))。 +* 使用 cgroup 的信息(在适用情况下,即启用了 `memory_worker_use_cgroup` 且 cgroups 可用)来调整内存跟踪器(`memory_worker_correct_memory_tracker`)。 [#83981](https://github.com/ClickHouse/ClickHouse/pull/83981) ([Azat Khuzhin](https://github.com/azat)). +* MongoDB:字符串向数值类型的隐式解析。此前,如果从 MongoDB 源为 ClickHouse 表中的数值列收到字符串值,则会抛出异常。现在,引擎会尝试自动从字符串中解析出数值。修复了 [#81167](https://github.com/ClickHouse/ClickHouse/issues/81167)。[#84069](https://github.com/ClickHouse/ClickHouse/pull/84069)([Kirill Nikiforov](https://github.com/allmazz))。 +* 在 `Pretty` 格式中高亮显示 `Nullable` 数字的数字分组。 [#84070](https://github.com/ClickHouse/ClickHouse/pull/84070) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Dashboard:顶部的工具提示现在不会溢出其容器。[#84072](https://github.com/ClickHouse/ClickHouse/pull/84072) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 仪表板上的点看起来稍微更美观一些。 [#84074](https://github.com/ClickHouse/ClickHouse/pull/84074) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* Dashboard 现在的 favicon 略有改进。 [#84076](https://github.com/ClickHouse/ClickHouse/pull/84076) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* Web UI:允许浏览器保存密码,同时也会记住 URL 的值。[#84087](https://github.com/ClickHouse/ClickHouse/pull/84087) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* 新增支持使用 `apply_to_children` 配置为特定 Keeper 节点应用额外的 ACL。[#84137](https://github.com/ClickHouse/ClickHouse/pull/84137) ([Antonio Andelic](https://github.com/antonio2368))。 +* 修复 MergeTree 中 "compact" Variant 判别器序列化的用法。之前在某些本可以使用的情况下没有被使用。 [#84141](https://github.com/ClickHouse/ClickHouse/pull/84141) ([Pavel Kruglov](https://github.com/Avogar)). +* 在复制数据库设置中新增了一个服务器级设置 `logs_to_keep`,用于修改复制数据库的默认 `logs_to_keep` 参数。较低的取值会减少 ZNode 的数量(尤其是在存在大量数据库时),而较高的取值则允许缺失副本在更长时间后仍能追上进度。[#84183](https://github.com/ClickHouse/ClickHouse/pull/84183)([Alexey Khatskevich](https://github.com/Khatskevich))。 +* 添加设置项 `json_type_escape_dots_in_keys`,用于在 JSON 类型解析过程中对 JSON 键中的点号进行转义。该设置默认关闭。 [#84207](https://github.com/ClickHouse/ClickHouse/pull/84207) ([Pavel Kruglov](https://github.com/Avogar))。 +* 在检查 EOF 之前先检查连接是否已被取消,以防止对已关闭的连接进行读取。修复了 [#83893](https://github.com/ClickHouse/ClickHouse/issues/83893)。[#84227](https://github.com/ClickHouse/ClickHouse/pull/84227)([Raufs Dunamalijevs](https://github.com/rienath))。 +* 略微优化了 Web UI 中文本选中时的颜色。只有在深色模式下选中的表格单元格中差异才较为明显。在之前的版本中,文本与选中背景之间的对比度不足。[#84258](https://github.com/ClickHouse/ClickHouse/pull/84258)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 通过简化内部检查,改进了在服务器关闭时对客户端连接的处理。 [#84312](https://github.com/ClickHouse/ClickHouse/pull/84312) ([Raufs Dunamalijevs](https://github.com/rienath)). +* 新增配置项 `delta_lake_enable_expression_visitor_logging`,用于关闭表达式访问器日志,因为在调试时,即使在测试日志级别下,它们的输出也可能过于冗长。[#84315](https://github.com/ClickHouse/ClickHouse/pull/84315) ([Kseniia Sumarokova](https://github.com/kssenii))。 * 现在会同时上报 cgroup 级和系统级的指标。cgroup 级指标命名为 `CGroup<Metric>`,操作系统级指标(从 procfs 收集)命名为 `OS<Metric>`。[#84317](https://github.com/ClickHouse/ClickHouse/pull/84317)([Nikita Taranov](https://github.com/nickitat))。 -* Web UI 中的图表稍有改进。变化不大,但确实更好了。[#84326](https://github.com/ClickHouse/ClickHouse/pull/84326) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 将 Replicated 数据库设置项 `max_retries_before_automatic_recovery` 的默认值更改为 10,以便在某些情况下能够更快恢复。[#84369](https://github.com/ClickHouse/ClickHouse/pull/84369) ([Alexander Tokmakov](https://github.com/tavplubix))。 -* 修复在使用查询参数时的 CREATE USER 语句格式(即 `CREATE USER {username:Identifier} IDENTIFIED WITH no_password`)。[#84376](https://github.com/ClickHouse/ClickHouse/pull/84376)([Azat Khuzhin](https://github.com/azat))。 -* 引入 `backup_restore_s3_retry_initial_backoff_ms`、`backup_restore_s3_retry_max_backoff_ms`、`backup_restore_s3_retry_jitter_factor`,用于配置备份和恢复操作期间 S3 重试的退避策略。[#84421](https://github.com/ClickHouse/ClickHouse/pull/84421)([Julia Kartseva](https://github.com/jkartseva))。 -* S3Queue 有序模式修复:如果已调用关闭,则提前退出。 [#84463](https://github.com/ClickHouse/ClickHouse/pull/84463) ([Kseniia Sumarokova](https://github.com/kssenii)). -* 支持以 Iceberg 格式写入,使其可被 pyiceberg 读取。 [#84466](https://github.com/ClickHouse/ClickHouse/pull/84466) ([Konstantin Vedernikov](https://github.com/scanhex12)). -* 在将 `IN` / `GLOBAL IN` 过滤条件下推到 KeyValue 存储的主键(例如 EmbeddedRocksDB、KeeperMap)时,允许对集合中的值进行类型转换。 [#84515](https://github.com/ClickHouse/ClickHouse/pull/84515) ([Eduard Karacharov](https://github.com/korowa)). -* 将 chdig 升级到 [25.7.1](https://github.com/azat/chdig/releases/tag/v25.7.1)。[#84521](https://github.com/ClickHouse/ClickHouse/pull/84521)([Azat Khuzhin](https://github.com/azat))。 -* 在执行 UDF 期间发生的底层错误现在统一返回错误码 `UDF_EXECUTION_FAILED`,而之前可能会返回不同的错误码。 [#84547](https://github.com/ClickHouse/ClickHouse/pull/84547) ([Xu Jia](https://github.com/XuJia0210)). -* 在 KeeperClient 中新增 `get_acl` 命令。[#84641](https://github.com/ClickHouse/ClickHouse/pull/84641) ([Antonio Andelic](https://github.com/antonio2368)). -* 为数据湖表引擎新增快照版本支持。 [#84659](https://github.com/ClickHouse/ClickHouse/pull/84659) ([Pete Hampton](https://github.com/pjhampton)). -* 为 `ConcurrentBoundedQueue` 的大小添加一个带维度的指标,并按队列类型(即该队列的用途)和队列 ID(即当前队列实例随机生成的 ID)打上标签。 [#84675](https://github.com/ClickHouse/ClickHouse/pull/84675) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). -* `system.columns` 表现在为现有的 `name` 列新增了别名 `column`。[#84695](https://github.com/ClickHouse/ClickHouse/pull/84695) ([Yunchi Pang](https://github.com/yunchipang))。 -* 新的 MergeTree 设置 `search_orphaned_parts_drives`,用于将查找数据分片的范围限制为仅在具有本地元数据的磁盘上进行。[#84710](https://github.com/ClickHouse/ClickHouse/pull/84710)([Ilya Golshtein](https://github.com/ilejn))。 -* 在 Keeper 中添加 4LW 命令 `lgrq`,用于开启/关闭对已接收请求的日志记录。[#84719](https://github.com/ClickHouse/ClickHouse/pull/84719) ([Antonio Andelic](https://github.com/antonio2368))。 -* 对 external auth 的 forward_headers 进行不区分大小写的匹配。 [#84737](https://github.com/ClickHouse/ClickHouse/pull/84737) ([ingodwerust](https://github.com/ingodwerust)). -* `encrypt_decrypt` 工具现在支持 ZooKeeper 加密连接。[#84764](https://github.com/ClickHouse/ClickHouse/pull/84764)([Roman Vasin](https://github.com/rvasin))。 -* 向 `system.errors` 添加格式字符串列,以便在告警规则中按相同错误类型进行分组。[#84776](https://github.com/ClickHouse/ClickHouse/pull/84776)([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 -* 将 `clickhouse-format` 更新为支持将 `--highlight` 作为 `--hilite` 的别名。- 将 `clickhouse-client` 更新为支持将 `--hilite` 作为 `--highlight` 的别名。- 更新 `clickhouse-format` 文档以反映此更改。[#84806](https://github.com/ClickHouse/ClickHouse/pull/84806) ([Rishabh Bhardwaj](https://github.com/rishabh1815769))。 -* 修复 Iceberg 复杂类型按字段 ID 读取的问题。 [#84821](https://github.com/ClickHouse/ClickHouse/pull/84821) ([Konstantin Vedernikov](https://github.com/scanhex12)). -* 引入一个新的 `backup_slow_all_threads_after_retryable_s3_error` 设置,在检测到单个可重试错误(例如 `SlowDown`)时减慢所有线程的速度,以在由此类错误引发的重试风暴期间降低对 S3 的压力。 [#84854](https://github.com/ClickHouse/ClickHouse/pull/84854) ([Julia Kartseva](https://github.com/jkartseva)). -* 在复制数据库(Replicated DB)中,跳过为非追加 RMV DDL 创建并重命名旧临时表的操作。[#84858](https://github.com/ClickHouse/ClickHouse/pull/84858) ([Tuan Pham Anh](https://github.com/tuanpach)). -* 通过 `keeper_server.coordination_settings.latest_logs_cache_entry_count_threshold` 和 `keeper_server.coordination_settings.commit_logs_cache_entry_count_threshold` 按条目数量限制 Keeper 日志缓存大小。[#84877](https://github.com/ClickHouse/ClickHouse/pull/84877) ([Antonio Andelic](https://github.com/antonio2368))。 +* Web UI 中的图表略有改进。变化不大,但确实更好。 [#84326](https://github.com/ClickHouse/ClickHouse/pull/84326) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* 将 Replicated 数据库设置项 `max_retries_before_automatic_recovery` 的默认值更改为 10,以便在某些情况下可以更快恢复。[#84369](https://github.com/ClickHouse/ClickHouse/pull/84369)([Alexander Tokmakov](https://github.com/tavplubix))。 +* 修复带查询参数占位符的 `CREATE USER` 语句的格式(即 `CREATE USER {username:Identifier} IDENTIFIED WITH no_password`)。[#84376](https://github.com/ClickHouse/ClickHouse/pull/84376) ([Azat Khuzhin](https://github.com/azat))。 +* 引入 `backup_restore_s3_retry_initial_backoff_ms`、`backup_restore_s3_retry_max_backoff_ms`、`backup_restore_s3_retry_jitter_factor`,用于配置在备份和恢复操作期间所使用的 S3 重试退避策略。[#84421](https://github.com/ClickHouse/ClickHouse/pull/84421) ([Julia Kartseva](https://github.com/jkartseva))。 +* 修复 S3Queue 有序模式:如果已调用关闭,则提前退出。 [#84463](https://github.com/ClickHouse/ClickHouse/pull/84463) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 支持向 Iceberg 写入,以便通过 pyiceberg 进行读取。 [#84466](https://github.com/ClickHouse/ClickHouse/pull/84466) ([Konstantin Vedernikov](https://github.com/scanhex12)). +* 在将 `IN` / `GLOBAL IN` 过滤条件下推到键值存储的主键(例如 EmbeddedRocksDB、KeeperMap)时,允许对 IN 集合中的值进行类型转换。[#84515](https://github.com/ClickHouse/ClickHouse/pull/84515) ([Eduard Karacharov](https://github.com/korowa)). +* 将 chdig 升级至 [25.7.1](https://github.com/azat/chdig/releases/tag/v25.7.1)。[#84521](https://github.com/ClickHouse/ClickHouse/pull/84521)([Azat Khuzhin](https://github.com/azat))。 +* 在执行 UDF 期间发生的底层错误现在会统一返回错误码 `UDF_EXECUTION_FAILED`,而此前可能会返回不同的错误码。[#84547](https://github.com/ClickHouse/ClickHouse/pull/84547)([Xu Jia](https://github.com/XuJia0210))。 +* 在 KeeperClient 中添加 `get_acl` 命令。[#84641](https://github.com/ClickHouse/ClickHouse/pull/84641)([Antonio Andelic](https://github.com/antonio2368))。 +* 为数据湖表引擎添加快照版本支持。[#84659](https://github.com/ClickHouse/ClickHouse/pull/84659) ([Pete Hampton](https://github.com/pjhampton))。 +* 为 `ConcurrentBoundedQueue` 的大小添加一个带维度的指标,并按队列类型(即该队列的用途)和队列 ID(即当前队列实例随机生成的 ID)进行标注。[#84675](https://github.com/ClickHouse/ClickHouse/pull/84675) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). +* `system.columns` 表现在为现有的 `name` 列提供名为 `column` 的别名。 [#84695](https://github.com/ClickHouse/ClickHouse/pull/84695) ([Yunchi Pang](https://github.com/yunchipang))。 +* 新增 MergeTree 设置 `search_orphaned_parts_drives`,用于限定查找数据片时的范围,例如仅在具有本地元数据的磁盘上查找。 [#84710](https://github.com/ClickHouse/ClickHouse/pull/84710) ([Ilya Golshtein](https://github.com/ilejn)). +* 在 Keeper 中添加 4LW 命令 `lgrq`,用于切换对已接收请求的日志记录。[#84719](https://github.com/ClickHouse/ClickHouse/pull/84719) ([Antonio Andelic](https://github.com/antonio2368)). +* 以不区分大小写的方式匹配 external auth 的 forward_headers。 [#84737](https://github.com/ClickHouse/ClickHouse/pull/84737) ([ingodwerust](https://github.com/ingodwerust)). +* `encrypt_decrypt` 工具现在支持加密 ZooKeeper 连接。[#84764](https://github.com/ClickHouse/ClickHouse/pull/84764)([Roman Vasin](https://github.com/rvasin))。 +* 为 `system.errors` 添加一个格式字符串列,以便在告警规则中按相同错误类型进行分组。[#84776](https://github.com/ClickHouse/ClickHouse/pull/84776) ([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 +* 已更新 `clickhouse-format`,现在接受 `--highlight` 作为 `--hilite` 的别名。 - 已更新 `clickhouse-client`,现在接受 `--hilite` 作为 `--highlight` 的别名。 - 更新了 `clickhouse-format` 文档以反映此更改。 [#84806](https://github.com/ClickHouse/ClickHouse/pull/84806) ([Rishabh Bhardwaj](https://github.com/rishabh1815769)). +* 修复 Iceberg 复杂类型基于字段 ID 的读取问题。 [#84821](https://github.com/ClickHouse/ClickHouse/pull/84821) ([Konstantin Vedernikov](https://github.com/scanhex12)). +* 新增名为 `backup_slow_all_threads_after_retryable_s3_error` 的设置,在出现可重试错误(例如 `SlowDown`)引发的重试风暴时,通过在首次观察到可重试错误后减慢所有线程的速度,来降低对 S3 的压力。[#84854](https://github.com/ClickHouse/ClickHouse/pull/84854)([Julia Kartseva](https://github.com/jkartseva))。 +* 在 Replicated 数据库中,跳过为非追加型 RMV DDL 创建和重命名旧临时表的步骤。 [#84858](https://github.com/ClickHouse/ClickHouse/pull/84858) ([Tuan Pham Anh](https://github.com/tuanpach)). +* 使用 `keeper_server.coordination_settings.latest_logs_cache_entry_count_threshold` 和 `keeper_server.coordination_settings.commit_logs_cache_entry_count_threshold` 按条目数量限制 Keeper 日志缓存大小。 [#84877](https://github.com/ClickHouse/ClickHouse/pull/84877) ([Antonio Andelic](https://github.com/antonio2368)). * 允许在不受支持的架构上使用 `simdjson`(之前会导致 `CANNOT_ALLOCATE_MEMORY` 错误)。[#84966](https://github.com/ClickHouse/ClickHouse/pull/84966) ([Azat Khuzhin](https://github.com/azat))。 -* Async logging:使限制可调,并添加自检能力。 [#85105](https://github.com/ClickHouse/ClickHouse/pull/85105) ([Raúl Marín](https://github.com/Algunenano)). -* 收集所有待删除的对象,通过一次对象存储删除操作统一删除。[#85316](https://github.com/ClickHouse/ClickHouse/pull/85316)([Mikhail Artemenko](https://github.com/Michicosun))。 -* Iceberg 目前对位置删除文件(positional delete files)的实现会将所有数据保存在内存中。如果位置删除文件很大(这在实际中很常见),开销会相当高。我的实现只在内存中保留 Parquet 删除文件的最后一个行组(row group),从而显著降低了开销。[#85329](https://github.com/ClickHouse/ClickHouse/pull/85329)([Konstantin Vedernikov](https://github.com/scanhex12))。 -* chdig:修复屏幕残留、修复在编辑器中编辑查询后发生的崩溃,在 `path` 中搜索 `editor`,更新到 [25.8.1](https://github.com/azat/chdig/releases/tag/v25.8.1)。[#85341](https://github.com/ClickHouse/ClickHouse/pull/85341)([Azat Khuzhin](https://github.com/azat))。 -* 在 Azure 配置中补充缺失的 `partition_columns_in_data_file`。[#85373](https://github.com/ClickHouse/ClickHouse/pull/85373)([Arthur Passos](https://github.com/arthurpassos))。 -* 允许在函数 `timeSeries*ToGrid` 中使用步长为零。这是 [#75036](https://github.com/ClickHouse/ClickHouse/pull/75036) 的一部分。[#85390](https://github.com/ClickHouse/ClickHouse/pull/85390)([Vitaly Baranov](https://github.com/vitlibar))。 -* 添加了 `show_data_lake_catalogs_in_system_tables` 标志,用于控制在 `system.tables` 中添加数据湖表。解决了 [#85384](https://github.com/ClickHouse/ClickHouse/issues/85384)。[#85411](https://github.com/ClickHouse/ClickHouse/pull/85411)([Smita Kulkarni](https://github.com/SmitaRKulkarni))。 -* 在 `remote_fs_zero_copy_zookeeper_path` 中新增了宏展开支持。[#85437](https://github.com/ClickHouse/ClickHouse/pull/85437) ([Mikhail Koviazin](https://github.com/mkmkme)). -* clickhouse-client 中的 AI 呈现效果会稍微更好一些。[#85447](https://github.com/ClickHouse/ClickHouse/pull/85447) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 异步日志:将各项限制改为可调,并增加自检功能。 [#85105](https://github.com/ClickHouse/ClickHouse/pull/85105) ([Raúl Marín](https://github.com/Algunenano))。 +* 收集所有待删除的对象,以通过一次对象存储删除操作统一删除。[#85316](https://github.com/ClickHouse/ClickHouse/pull/85316) ([Mikhail Artemenko](https://github.com/Michicosun))。 +* Iceberg 当前对 positional delete 文件的实现会将所有数据都保留在内存中。如果 positional delete 文件很大(这种情况很常见),代价就会非常高。我的实现只在内存中保留 Parquet delete 文件的最后一个行组(row-group),大幅降低了内存开销。[#85329](https://github.com/ClickHouse/ClickHouse/pull/85329)([Konstantin Vedernikov](https://github.com/scanhex12))。 +* chdig:修复屏幕残留内容,修复在编辑器中编辑查询后发生的崩溃问题,在 `path` 中搜索 `editor`,更新至 [25.8.1](https://github.com/azat/chdig/releases/tag/v25.8.1)。[#85341](https://github.com/ClickHouse/ClickHouse/pull/85341)([Azat Khuzhin](https://github.com/azat))。 +* 在 Azure 配置中补全缺失的 `partition_columns_in_data_file`。 [#85373](https://github.com/ClickHouse/ClickHouse/pull/85373) ([Arthur Passos](https://github.com/arthurpassos)). +* 在函数 `timeSeries*ToGrid` 中允许步长为 0。这是 [#75036](https://github.com/ClickHouse/ClickHouse/pull/75036) 的一部分。[#85390](https://github.com/ClickHouse/ClickHouse/pull/85390)([Vitaly Baranov](https://github.com/vitlibar))。 +* 添加了 `show_data_lake_catalogs_in_system_tables` 标志,用于控制是否在 `system.tables` 中添加数据湖表。解决了 [#85384](https://github.com/ClickHouse/ClickHouse/issues/85384)。[#85411](https://github.com/ClickHouse/ClickHouse/pull/85411)([Smita Kulkarni](https://github.com/SmitaRKulkarni))。 +* 在 `remote_fs_zero_copy_zookeeper_path` 中新增了对宏展开的支持。[#85437](https://github.com/ClickHouse/ClickHouse/pull/85437) ([Mikhail Koviazin](https://github.com/mkmkme))。 +* clickhouse-client 中的 AI 显示效果将略有改进。[#85447](https://github.com/ClickHouse/ClickHouse/pull/85447) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 * 默认对旧部署启用 trace_log.symbolize。 [#85456](https://github.com/ClickHouse/ClickHouse/pull/85456) ([Azat Khuzhin](https://github.com/azat)). -* 在处理复合标识符时支持解析更多情况。尤其提升了 `ARRAY JOIN` 与旧分析器的兼容性。引入了新的配置项 `analyzer_compatibility_allow_compound_identifiers_in_unflatten_nested` 以保持旧的行为。[#85492](https://github.com/ClickHouse/ClickHouse/pull/85492) ([Nikolai Kochetov](https://github.com/KochetovNicolai))。 -* 在从 system.columns 获取表各列大小时忽略 UNKNOWN_DATABASE。 [#85632](https://github.com/ClickHouse/ClickHouse/pull/85632) ([Azat Khuzhin](https://github.com/azat)). -* 为补丁部分中的未压缩字节总量增加了限制(表设置 `max_uncompressed_bytes_in_patches`)。这可以防止在执行轻量级更新后 `SELECT` 查询出现显著变慢,并防止轻量级更新被滥用的情况。[#85641](https://github.com/ClickHouse/ClickHouse/pull/85641) ([Anton Popov](https://github.com/CurtizJ))。 -* 向 `system.grants` 添加 `parameter` 列,以确定 `GRANT READ/WRITE` 的源类型以及 `GRANT TABLE ENGINE` 的表引擎。[#85643](https://github.com/ClickHouse/ClickHouse/pull/85643)([MikhailBurdukov](https://github.com/MikhailBurdukov))。 -* 修复在 `CREATE DICTIONARY` 查询的列定义中,当带参数的列(例如 `Decimal(8)`) 后面存在尾随逗号时的解析问题。解决 [#85586](https://github.com/ClickHouse/ClickHouse/issues/85586)。[#85653](https://github.com/ClickHouse/ClickHouse/pull/85653)([Nikolay Degterinsky](https://github.com/evillique))。 -* 为 `nested` 函数增加对内部数组的支持。[#85719](https://github.com/ClickHouse/ClickHouse/pull/85719) ([Nikolai Kochetov](https://github.com/KochetovNicolai))。 -* 由外部库进行的所有内存分配现在都可以被 ClickHouse 的内存跟踪器观察到,并被正确计入。这可能会导致某些查询报告的内存使用量“增加”,或者因 `MEMORY_LIMIT_EXCEEDED` 而失败。[#84082](https://github.com/ClickHouse/ClickHouse/pull/84082)([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 - - - -#### Bug 修复(官方稳定版本中用户可见的异常行为) - +* 支持解析更多涉及复合标识符的场景。尤其是提升了 `ARRAY JOIN` 与旧分析器的兼容性。引入新的设置 `analyzer_compatibility_allow_compound_identifiers_in_unflatten_nested` 以保留旧行为。[#85492](https://github.com/ClickHouse/ClickHouse/pull/85492) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). +* 在从 system.columns 获取各列大小时忽略 UNKNOWN_DATABASE。 [#85632](https://github.com/ClickHouse/ClickHouse/pull/85632) ([Azat Khuzhin](https://github.com/azat)). +* 为补丁部分中的未压缩字节总量添加了一个限制(表级设置 `max_uncompressed_bytes_in_patches`)。这可以防止在执行轻量级更新后 `SELECT` 查询出现显著变慢,并防止轻量级更新可能被滥用。[#85641](https://github.com/ClickHouse/ClickHouse/pull/85641)([Anton Popov](https://github.com/CurtizJ))。 +* 向 `system.grants` 添加 `parameter` 列,用于确定 `GRANT READ/WRITE` 的源类型以及 `GRANT TABLE ENGINE` 的表引擎。[#85643](https://github.com/ClickHouse/ClickHouse/pull/85643) ([MikhailBurdukov](https://github.com/MikhailBurdukov))。 +* 解决了在 `CREATE DICTIONARY` 查询中,如果在带参数的列(例如 `Decimal(8)`)之后的列后面存在尾随逗号时的解析问题。关闭 [#85586](https://github.com/ClickHouse/ClickHouse/issues/85586)。[#85653](https://github.com/ClickHouse/ClickHouse/pull/85653)([Nikolay Degterinsky](https://github.com/evillique))。 +* 为 `nested` 函数添加对内部数组的支持。 [#85719](https://github.com/ClickHouse/ClickHouse/pull/85719) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). +* 所有由外部库进行的内存分配现在都可以被 ClickHouse 的内存追踪器感知并正确计入。这可能会导致某些查询报告的内存使用量看起来“增加”,或者因 `MEMORY_LIMIT_EXCEEDED` 而报错。 [#84082](https://github.com/ClickHouse/ClickHouse/pull/84082) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 +#### Bug 修复(官方稳定版中对用户可见的异常行为) * 此 PR 修复了通过 REST catalog 查询 Iceberg 表时的元数据解析逻辑。... [#80562](https://github.com/ClickHouse/ClickHouse/pull/80562) ([Saurabh Kumar Ojha](https://github.com/saurabhojha)). * 修复 DDLWorker 和 DatabaseReplicatedDDLWorker 中的 markReplicasActive。[#81395](https://github.com/ClickHouse/ClickHouse/pull/81395)([Tuan Pham Anh](https://github.com/tuanpach))。 @@ -848,1509 +1054,1413 @@ doc_type: 'changelog' * 避免创建空的 Iceberg 删除文件。[#86061](https://github.com/ClickHouse/ClickHouse/pull/86061) ([Konstantin Vedernikov](https://github.com/scanhex12)). * 修复由于过大的设置值导致 S3Queue 表异常和副本重启的问题。[#86074](https://github.com/ClickHouse/ClickHouse/pull/86074) ([Nikolay Degterinsky](https://github.com/evillique))。 - - #### 构建/测试/打包改进 -* 默认在使用 S3 的测试中使用加密磁盘。 [#59898](https://github.com/ClickHouse/ClickHouse/pull/59898) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). -* 在集成测试中使用 `clickhouse` 二进制文件以获取未剥离的调试符号。 [#83779](https://github.com/ClickHouse/ClickHouse/pull/83779) ([Mikhail f. Shiryaev](https://github.com/Felixoid)). -* 将内部 libxml2 从 2.14.4 升级到 2.14.5。 [#84230](https://github.com/ClickHouse/ClickHouse/pull/84230) ([Robert Schulze](https://github.com/rschu1ze)). -* 将内部 curl 从 8.14.0 升级到 8.15.0。 [#84231](https://github.com/ClickHouse/ClickHouse/pull/84231) ([Robert Schulze](https://github.com/rschu1ze)). -* 现在在 CI 中为缓存使用更少的内存,并且拥有了更完善的淘汰测试。 [#84676](https://github.com/ClickHouse/ClickHouse/pull/84676) ([alesapin](https://github.com/alesapin)). - -### ClickHouse 版本 25.7,2025-07-24 {#257} +* 默认对使用 S3 的测试启用加密磁盘。[#59898](https://github.com/ClickHouse/ClickHouse/pull/59898) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). +* 在集成测试中使用 `clickhouse` 可执行文件,以获取未裁剪的调试符号。[#83779](https://github.com/ClickHouse/ClickHouse/pull/83779) ([Mikhail f. Shiryaev](https://github.com/Felixoid)). +* 将内部使用的 libxml2 版本从 2.14.4 升级到 2.14.5。[#84230](https://github.com/ClickHouse/ClickHouse/pull/84230) ([Robert Schulze](https://github.com/rschu1ze)). +* 将内部使用的 curl 版本从 8.14.0 升级到 8.15.0。[#84231](https://github.com/ClickHouse/ClickHouse/pull/84231) ([Robert Schulze](https://github.com/rschu1ze)). +* 现在在 CI 中为缓存使用更少的内存,并且具备更完善的缓存淘汰测试。[#84676](https://github.com/ClickHouse/ClickHouse/pull/84676) ([alesapin](https://github.com/alesapin)). -#### 向后不兼容变更 -* 对 `extractKeyValuePairs` 函数的更改:引入了一个新参数 `unexpected_quoting_character_strategy`,用于控制在读取未加引号的键或值时,意外遇到 `quoting_character` 时的处理方式。该参数的取值可以是:`invalid`、`accept` 或 `promote`。`invalid` 将丢弃该键并回到等待键状态;`accept` 会将其视为键的一部分;`promote` 会丢弃前一个字符并开始将其作为带引号键进行解析。另外,在解析完带引号的值之后,只有在发现键值对分隔符时才会解析下一个键。 [#80657](https://github.com/ClickHouse/ClickHouse/pull/80657) ([Arthur Passos](https://github.com/arthurpassos)). -* 在 `countMatches` 函数中支持零字节匹配。希望保留旧行为的用户可以启用设置 `count_matches_stop_at_empty_match`。 [#81676](https://github.com/ClickHouse/ClickHouse/pull/81676) ([Elmi Ahmadov](https://github.com/ahmadov)). -* 在生成 BACKUP 时,除了使用其专用的服务器设置(`max_backup_bandwidth_for_server`、`max_mutations_bandwidth_for_server` 和 `max_merges_bandwidth_for_server`),还会为本地(`max_local_read_bandwidth_for_server` 和 `max_local_write_bandwidth_for_server`)和远程(`max_remote_read_network_bandwidth_for_server` 和 `max_remote_write_network_bandwidth_for_server`)使用服务器级限流器。 [#81753](https://github.com/ClickHouse/ClickHouse/pull/81753) ([Sergei Trifonov](https://github.com/serxa)). -* 禁止创建没有可插入列的表。 [#81835](https://github.com/ClickHouse/ClickHouse/pull/81835) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). -* 在归档内部按文件对 cluster 函数进行并行化。在之前的版本中,整个归档文件(如 zip、tar 或 7z)是一个工作单元。新增设置 `cluster_function_process_archive_on_multiple_nodes`,默认值为 `true`。如果设置为 `true`,可以提升在 cluster 函数中处理归档的性能。如需兼容性,或在使用早期版本中带归档的 cluster 函数时避免升级到 25.7+ 期间出现错误,应将其设置为 `false`。 [#82355](https://github.com/ClickHouse/ClickHouse/pull/82355) ([Kseniia Sumarokova](https://github.com/kssenii)). -* `SYSTEM RESTART REPLICAS` 查询此前会唤醒 Lazy 数据库中的表,即使没有对该数据库的访问权限,而且会在这些表被并发删除时发生。注意:现在 `SYSTEM RESTART REPLICAS` 只会重启那些你拥有 `SHOW TABLES` 权限的数据库中的副本,这是一种更自然的行为。 [#83321](https://github.com/ClickHouse/ClickHouse/pull/83321) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +### ClickHouse 发行版 25.7,2025-07-24 {#257} +#### 向后不兼容的变更 +* 对 `extractKeyValuePairs` 函数的更改:引入一个新的参数 `unexpected_quoting_character_strategy`,用于控制在读取未加引号的键或值时意外遇到 `quoting_character` 时的行为。该参数的取值可以是:`invalid`、`accept` 或 `promote`。`invalid` 会丢弃该键并回到等待键的状态;`accept` 会将其视为键的一部分;`promote` 会丢弃前一个字符并开始按带引号的键来解析。此外,在解析完一个带引号的值之后,只有在发现键值对分隔符时才解析下一个键。[#80657](https://github.com/ClickHouse/ClickHouse/pull/80657) ([Arthur Passos](https://github.com/arthurpassos))。 +* 在 `countMatches` 函数中支持零长度匹配。希望保留旧行为的用户可以启用设置 `count_matches_stop_at_empty_match`。[#81676](https://github.com/ClickHouse/ClickHouse/pull/81676) ([Elmi Ahmadov](https://github.com/ahmadov))。 +* 在生成 BACKUP 时,对本地(`max_local_read_bandwidth_for_server` 和 `max_local_write_bandwidth_for_server`)和远程(`max_remote_read_network_bandwidth_for_server` 和 `max_remote_write_network_bandwidth_for_server`)操作使用服务器级限流器,此外仍保留其各自的专用服务器设置(`max_backup_bandwidth_for_server`、`max_mutations_bandwidth_for_server` 和 `max_merges_bandwidth_for_server`)。[#81753](https://github.com/ClickHouse/ClickHouse/pull/81753) ([Sergei Trifonov](https://github.com/serxa))。 +* 禁止创建没有可插入列的表。[#81835](https://github.com/ClickHouse/ClickHouse/pull/81835) ([Pervakov Grigorii](https://github.com/GrigoryPervakov))。 +* 在集群函数中按归档内的文件进行并行处理。在之前的版本中,整个归档文件(例如 zip、tar 或 7z)是一个工作单元。新增了一个设置 `cluster_function_process_archive_on_multiple_nodes`,默认值为 `true`。如果设置为 `true`,将提升集群函数处理中归档文件的性能。如果在更早版本上使用带归档的集群函数,为了兼容性并避免升级到 25.7+ 期间出现错误,应将其设置为 `false`。[#82355](https://github.com/ClickHouse/ClickHouse/pull/82355) ([Kseniia Sumarokova](https://github.com/kssenii))。 +* `SYSTEM RESTART REPLICAS` 查询会导致唤醒 Lazy 数据库中的表,即使没有访问该数据库的权限,而且这一行为会在这些表被并发删除时发生。注意:现在 `SYSTEM RESTART REPLICAS` 只会在你拥有 `SHOW TABLES` 权限的数据库中重启副本,这是更自然的行为。[#83321](https://github.com/ClickHouse/ClickHouse/pull/83321) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 #### 新功能 -* 为 `MergeTree` 系列表新增轻量级更新支持。可以通过新的语法使用轻量级更新:`UPDATE SET col1 = val1, col2 = val2, ... WHERE `。新增了基于轻量级更新实现的轻量级删除功能。可通过设置 `lightweight_delete_mode = 'lightweight_update'` 启用。[#82004](https://github.com/ClickHouse/ClickHouse/pull/82004) ([Anton Popov](https://github.com/CurtizJ))。 -* 在 Iceberg 的模式演进中支持复杂类型。[#73714](https://github.com/ClickHouse/ClickHouse/pull/73714)([Konstantin Vedernikov](https://github.com/scanhex12))。 -* 新增对 Iceberg 表的 INSERT 支持。[#82692](https://github.com/ClickHouse/ClickHouse/pull/82692)([Konstantin Vedernikov](https://github.com/scanhex12))。 -* 通过字段 ID 读取 Iceberg 数据文件。从而提升与 Iceberg 的兼容性:可以在元数据中重命名字段,同时将其映射到底层 Parquet 文件中的不同名称。此更改关闭了 [#83065](https://github.com/ClickHouse/ClickHouse/issues/83065)。[#83653](https://github.com/ClickHouse/ClickHouse/pull/83653)([Konstantin Vedernikov](https://github.com/scanhex12))。 -* 现在 ClickHouse 支持 Iceberg 的压缩 `metadata.json` 文件。修复了 [#70874](https://github.com/ClickHouse/ClickHouse/issues/70874)。[#81451](https://github.com/ClickHouse/ClickHouse/pull/81451)([alesapin](https://github.com/alesapin))。 -* 在 Glue catalog 中增加对 `TimestampTZ` 的支持。修复了 [#81654](https://github.com/ClickHouse/ClickHouse/issues/81654)。[#83132](https://github.com/ClickHouse/ClickHouse/pull/83132)([Konstantin Vedernikov](https://github.com/scanhex12))。 -* 为 ClickHouse 客户端添加 AI 驱动的 SQL 生成能力。用户现在可以通过在查询前加上前缀 `??`,根据自然语言描述自动生成 SQL 查询。支持 OpenAI 和 Anthropic 提供商,并具备自动 schema 发现功能。[#83314](https://github.com/ClickHouse/ClickHouse/pull/83314)([Kaushik Iska](https://github.com/iskakaushik))。 -* 新增函数,用于将 Geo 类型写入 WKB 格式。[#82935](https://github.com/ClickHouse/ClickHouse/pull/82935) ([Konstantin Vedernikov](https://github.com/scanhex12))。 -* 为数据源引入了两种新的访问类型:`READ` 和 `WRITE`,并弃用了之前与数据源相关的所有访问类型。之前为 `GRANT S3 ON *.* TO user`,现在为:`GRANT READ, WRITE ON S3 TO user`。这也允许对数据源分别授予 `READ` 和 `WRITE` 权限,例如:`GRANT READ ON * TO user`、`GRANT WRITE ON S3 TO user`。该特性由设置 `access_control_improvements.enable_read_write_grants` 控制,默认关闭。[#73659](https://github.com/ClickHouse/ClickHouse/pull/73659) ([pufit](https://github.com/pufit))。 -* NumericIndexedVector:一种新的向量数据结构,基于按位切片的 Roaring 位图压缩,并提供了 20 多个用于构建、分析和逐点算术运算的函数。可以减少存储占用,并加速对稀疏数据进行 join、filter 和聚合操作。实现了 [#70582](https://github.com/ClickHouse/ClickHouse/issues/70582) 以及 T. Xiong 和 Y. Wang 在 VLDB 2024 发表的 [“Large-Scale Metric Computation in Online Controlled Experiment Platform” 论文](https://arxiv.org/abs/2405.08411)。[#74193](https://github.com/ClickHouse/ClickHouse/pull/74193)([FriendLey](https://github.com/FriendLey))。 -* 现在支持工作负载设置项 `max_waiting_queries`。它可用于限制查询队列的大小。如果达到该上限,所有后续查询将被终止并返回 `SERVER_OVERLOADED` 错误。[#81250](https://github.com/ClickHouse/ClickHouse/pull/81250) ([Oleg Doronin](https://github.com/dorooleg))。 +* 为 `MergeTree` 系列表增加了对轻量级更新的支持。轻量级更新可以通过以下新语法使用:`UPDATE <table> SET col1 = val1, col2 = val2, ... WHERE <condition>`。通过轻量级更新实现了轻量级删除功能。可以通过设置 `lightweight_delete_mode = 'lightweight_update'` 来启用该功能。[#82004](https://github.com/ClickHouse/ClickHouse/pull/82004) ([Anton Popov](https://github.com/CurtizJ))。 +* 在 Iceberg 架构演进中支持复杂类型。[#73714](https://github.com/ClickHouse/ClickHouse/pull/73714) ([Konstantin Vedernikov](https://github.com/scanhex12)). +* 新增对 Iceberg 表执行 INSERT 的支持。[#82692](https://github.com/ClickHouse/ClickHouse/pull/82692) ([Konstantin Vedernikov](https://github.com/scanhex12))。 +* 按字段 ID 读取 Iceberg 数据文件。这提高了与 Iceberg 的兼容性:可以在元数据中重命名字段名,同时仍然能够映射到底层 Parquet 文件中的不同字段名。修复了 [#83065](https://github.com/ClickHouse/ClickHouse/issues/83065)。[#83653](https://github.com/ClickHouse/ClickHouse/pull/83653)([Konstantin Vedernikov](https://github.com/scanhex12))。 +* 现在 ClickHouse 已支持用于 Iceberg 的压缩 `metadata.json` 文件。修复了问题 [#70874](https://github.com/ClickHouse/ClickHouse/issues/70874)。[#81451](https://github.com/ClickHouse/ClickHouse/pull/81451) ([alesapin](https://github.com/alesapin))。 +* 在 Glue catalog 中支持 `TimestampTZ`,从而关闭了 [#81654](https://github.com/ClickHouse/ClickHouse/issues/81654)。 [#83132](https://github.com/ClickHouse/ClickHouse/pull/83132)([Konstantin Vedernikov](https://github.com/scanhex12))。 +* 为 ClickHouse 客户端添加 AI 驱动的 SQL 生成功能。用户现在可以通过在查询前添加前缀 `??`,根据自然语言描述生成 SQL 查询。支持 OpenAI 和 Anthropic 提供商,并具备自动 schema 发现功能。[#83314](https://github.com/ClickHouse/ClickHouse/pull/83314) ([Kaushik Iska](https://github.com/iskakaushik))。 +* 新增用于将 Geo 类型写入 WKB 格式的函数。[#82935](https://github.com/ClickHouse/ClickHouse/pull/82935) ([Konstantin Vedernikov](https://github.com/scanhex12)). +* 为 sources 引入了两种新的访问类型:`READ` 和 `WRITE`,并弃用此前所有与 sources 相关的访问类型。之前的写法是 `GRANT S3 ON *.* TO user`,现在为:`GRANT READ, WRITE ON S3 TO user`。这也使得可以分别为 sources 授予 `READ` 和 `WRITE` 权限,例如:`GRANT READ ON * TO user`、`GRANT WRITE ON S3 TO user`。该特性由设置 `access_control_improvements.enable_read_write_grants` 控制,默认关闭。 [#73659](https://github.com/ClickHouse/ClickHouse/pull/73659) ([pufit](https://github.com/pufit))。 +* NumericIndexedVector:新的向量数据结构,基于按位切片(bit-sliced)和 Roaring bitmap 压缩,并提供 20 多个用于构建、分析和逐元素算术运算的函数。可减少存储占用,并加速在稀疏数据上的 JOIN、过滤和聚合操作。实现了 [#70582](https://github.com/ClickHouse/ClickHouse/issues/70582) 以及 T. Xiong 和 Y. Wang 在 VLDB 2024 发表的 [论文 “Large-Scale Metric Computation in Online Controlled Experiment Platform”](https://arxiv.org/abs/2405.08411)。[#74193](https://github.com/ClickHouse/ClickHouse/pull/74193)([FriendLey](https://github.com/FriendLey))。 +* 现在支持工作负载配置项 `max_waiting_queries`。它可用于限制查询队列的大小。如果达到该限制,所有后续查询将被终止,并返回 `SERVER_OVERLOADED` 错误。[#81250](https://github.com/ClickHouse/ClickHouse/pull/81250)([Oleg Doronin](https://github.com/dorooleg))。 * 新增财务函数:`financialInternalRateOfReturnExtended`(`XIRR`)、`financialInternalRateOfReturn`(`IRR`)、`financialNetPresentValueExtended`(`XNPV`)、`financialNetPresentValue`(`NPV`)。[#81599](https://github.com/ClickHouse/ClickHouse/pull/81599)([Joanna Hulboj](https://github.com/jh0x))。 -* 添加地理空间函数 `polygonsIntersectCartesian` 和 `polygonsIntersectSpherical` 以检查两个多边形是否相交。 [#81882](https://github.com/ClickHouse/ClickHouse/pull/81882) ([Paul Lamb](https://github.com/plamb))。 -* 在 MergeTree 系列表中新增对 `_part_granule_offset` 虚拟列的支持。该列表示每一行在其所属数据 part 内对应 granule/mark 的从零开始索引。这解决了 [#79572](https://github.com/ClickHouse/ClickHouse/issues/79572)。[#82341](https://github.com/ClickHouse/ClickHouse/pull/82341)([Amos Bird](https://github.com/amosbird))。[#82341](https://github.com/ClickHouse/ClickHouse/pull/82341)([Amos Bird](https://github.com/amosbird)) -* 新增 SQL 函数 `colorSRGBToOkLCH` 和 `colorOkLCHToSRGB`,用于在 sRGB 和 OkLCH 颜色空间之间转换颜色。 [#83679](https://github.com/ClickHouse/ClickHouse/pull/83679) ([Fgrtue](https://github.com/Fgrtue))。 -* 允许在 `CREATE USER` 查询中为用户名使用参数。[#81387](https://github.com/ClickHouse/ClickHouse/pull/81387) ([Diskein](https://github.com/Diskein)). -* `system.formats` 表现在包含有关格式的扩展信息,例如 HTTP 内容类型、模式推断能力等。 [#81505](https://github.com/ClickHouse/ClickHouse/pull/81505) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 - +* 新增地理空间函数 `polygonsIntersectCartesian` 和 `polygonsIntersectSpherical`,用于检查两个多边形是否相交。 [#81882](https://github.com/ClickHouse/ClickHouse/pull/81882) ([Paul Lamb](https://github.com/plamb))。 +* 在 MergeTree 系列表中支持 `_part_granule_offset` 虚拟列。该列表示每一行在其数据分片(data part)内所属粒度/标记的从 0 开始的索引。此改动解决了 [#79572](https://github.com/ClickHouse/ClickHouse/issues/79572)。[#82341](https://github.com/ClickHouse/ClickHouse/pull/82341)([Amos Bird](https://github.com/amosbird))。[#82341](https://github.com/ClickHouse/ClickHouse/pull/82341)([Amos Bird](https://github.com/amosbird)) +* 新增 SQL 函数 `colorSRGBToOkLCH` 和 `colorOkLCHToSRGB`,用于在 sRGB 和 OkLCH 颜色空间之间转换颜色。[#83679](https://github.com/ClickHouse/ClickHouse/pull/83679) ([Fgrtue](https://github.com/Fgrtue))。 +* 在 `CREATE USER` 查询语句中允许将用户名设为参数。[#81387](https://github.com/ClickHouse/ClickHouse/pull/81387) ([Diskein](https://github.com/Diskein)). +* `system.formats` 表现在包含关于各格式的更多信息,例如 HTTP 内容类型、架构推断能力等。[#81505](https://github.com/ClickHouse/ClickHouse/pull/81505)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +#### 实验性特性 -#### 实验特性 -* 新增函数 `searchAny` 和 `searchAll`,它们是用于搜索文本索引的通用工具。 [#80641](https://github.com/ClickHouse/ClickHouse/pull/80641) ([Elmi Ahmadov](https://github.com/ahmadov)). +* 新增函数 `searchAny` 和 `searchAll`,作为通用工具用于搜索文本索引。 [#80641](https://github.com/ClickHouse/ClickHouse/pull/80641) ([Elmi Ahmadov](https://github.com/ahmadov)). * 文本索引现在支持新的 `split` 分词器。 [#81752](https://github.com/ClickHouse/ClickHouse/pull/81752) ([Elmi Ahmadov](https://github.com/ahmadov)). -* 将 `text` 索引的默认索引粒度值修改为 64。在内部基准测试中,这提升了典型测试查询的预期性能。 [#82162](https://github.com/ClickHouse/ClickHouse/pull/82162) ([Jimmy Aguilar Mena](https://github.com/Ergus)). -* 256 位位图按顺序存储状态的出边标签,但出边状态在磁盘上的保存顺序则是它们在哈希表中出现的顺序。因此,从磁盘读取时,某个标签可能会指向错误的下一状态。 [#82783](https://github.com/ClickHouse/ClickHouse/pull/82783) ([Elmi Ahmadov](https://github.com/ahmadov)). -* 为文本索引中的 FST 树 blob 数据启用 Zstd 压缩。 [#83093](https://github.com/ClickHouse/ClickHouse/pull/83093) ([Elmi Ahmadov](https://github.com/ahmadov)). -* 将向量相似度索引提升为 Beta 阶段。引入别名配置项 `enable_vector_similarity_index`,必须启用该配置项才能使用向量相似度索引。 [#83459](https://github.com/ClickHouse/ClickHouse/pull/83459) ([Robert Schulze](https://github.com/rschu1ze)). -* 移除与实验性零拷贝复制相关的实验性 `send_metadata` 逻辑。该逻辑从未被使用,也没有人维护这段代码。由于甚至没有与之相关的测试,它很可能在很久以前就已经失效。 [#82508](https://github.com/ClickHouse/ClickHouse/pull/82508) ([alesapin](https://github.com/alesapin)). -* 将 `StorageKafka2` 集成到 `system.kafka_consumers`。 [#82652](https://github.com/ClickHouse/ClickHouse/pull/82652) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). -* 基于统计信息估算复杂的 CNF/DNF,例如 `(a < 1 and a > 0) or b = 3`。 [#82663](https://github.com/ClickHouse/ClickHouse/pull/82663) ([Han Fei](https://github.com/hanfei1991)). - - +* 将 `text` 索引的默认索引粒度更改为 64。这提升了内部基准测试中典型测试查询的预期性能。 [#82162](https://github.com/ClickHouse/ClickHouse/pull/82162) ([Jimmy Aguilar Mena](https://github.com/Ergus)). +* 256 位位图按顺序存储某个状态的出边标签,但出边状态在磁盘中的保存顺序是它们在哈希表中出现的顺序。因此,从磁盘读取时,一个标签会指向错误的下一状态。 [#82783](https://github.com/ClickHouse/ClickHouse/pull/82783) ([Elmi Ahmadov](https://github.com/ahmadov)). +* 为文本索引中的 FST 树 blob 启用 zstd 压缩。 [#83093](https://github.com/ClickHouse/ClickHouse/pull/83093) ([Elmi Ahmadov](https://github.com/ahmadov)). +* 将向量相似度索引升级为 beta。引入别名设置 `enable_vector_similarity_index`,必须启用该设置才能使用向量相似度索引。 [#83459](https://github.com/ClickHouse/ClickHouse/pull/83459) ([Robert Schulze](https://github.com/rschu1ze)). +* 移除了与实验性零拷贝复制相关的实验性 `send_metadata` 逻辑。该逻辑从未被使用,也没有人维护这段代码。由于甚至没有任何与之相关的测试,它很大概率早就已经失效。 [#82508](https://github.com/ClickHouse/ClickHouse/pull/82508) ([alesapin](https://github.com/alesapin)). +* 将 `StorageKafka2` 集成到 `system.kafka_consumers` 中。 [#82652](https://github.com/ClickHouse/ClickHouse/pull/82652) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). +* 基于统计信息估计复杂的 CNF/DNF 表达式,例如 `(a < 1 and a > 0) or b = 3`。 [#82663](https://github.com/ClickHouse/ClickHouse/pull/82663) ([Han Fei](https://github.com/hanfei1991)). #### 性能优化 -* 引入异步日志。当日志输出到慢速设备时,将不再拖慢查询。[#82516](https://github.com/ClickHouse/ClickHouse/pull/82516) ([Raúl Marín](https://github.com/Algunenano))。限制队列中可保留的最大条目数。[#83214](https://github.com/ClickHouse/ClickHouse/pull/83214) ([Raúl Marín](https://github.com/Algunenano))。 -* 并行分布式 INSERT SELECT 默认启用,其模式是在每个分片上独立执行 INSERT SELECT,参见 `parallel_distributed_insert_select` 设置。 [#83040](https://github.com/ClickHouse/ClickHouse/pull/83040) ([Igor Nikonov](https://github.com/devcrafter))。 -* 当聚合查询仅对某个非 `Nullable` 列使用单个 `count()` 函数时,聚合逻辑会在哈希表探测过程中被完全内联。这样可以避免分配和维护任何聚合状态,从而显著降低内存占用和 CPU 开销。这在一定程度上缓解了 [#81982](https://github.com/ClickHouse/ClickHouse/issues/81982)。[#82104](https://github.com/ClickHouse/ClickHouse/pull/82104)([Amos Bird](https://github.com/amosbird))。 -* 在仅有一个键列这一典型场景下,通过移除对哈希表的额外循环来优化 `HashJoin` 的性能;同时,当 `null_map` 和 `join_mask` 始终为 `true`/`false` 时,去掉对它们的检查。[#82308](https://github.com/ClickHouse/ClickHouse/pull/82308) ([Nikita Taranov](https://github.com/nickitat))。 -* 针对 `-If` 组合子的简单优化。 [#78454](https://github.com/ClickHouse/ClickHouse/pull/78454) ([李扬](https://github.com/taiyang-li)). -* 使用向量相似度索引的向量搜索查询,由于减少了存储读取和 CPU 使用而具有更低的延迟。[#79103](https://github.com/ClickHouse/ClickHouse/pull/79103)([Shankar Iyer](https://github.com/shankar-iyer))。 -* 在 `filterPartsByQueryConditionCache` 中遵循 `merge_tree_min_{rows,bytes}_for_seek`,以与其他按索引进行过滤的方法保持一致。[#80312](https://github.com/ClickHouse/ClickHouse/pull/80312) ([李扬](https://github.com/taiyang-li)). -* 将 `TOTALS` 步骤之后的 pipeline 改为多线程。 [#80331](https://github.com/ClickHouse/ClickHouse/pull/80331) ([UnamedRus](https://github.com/UnamedRus)). -* 修复 `Redis` 和 `KeeperMap` 存储的按 key 过滤功能。[#81833](https://github.com/ClickHouse/ClickHouse/pull/81833) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). -* 新增设置 `min_joined_block_size_rows`(类似于 `min_joined_block_size_bytes`;默认值为 65409),用于控制 JOIN 输入和输出数据块的最小块大小(按行数计,在 JOIN 算法支持的情况下)。较小的数据块将被合并。[#81886](https://github.com/ClickHouse/ClickHouse/pull/81886)([Nikita Taranov](https://github.com/nickitat))。 -* `ATTACH PARTITION` 不再会导致清空所有缓存。 [#82377](https://github.com/ClickHouse/ClickHouse/pull/82377) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 通过使用等价类删除冗余 JOIN 操作,优化为关联子查询生成的查询计划。如果所有关联列都有等价表达式,并且启用了 `query_plan_correlated_subqueries_use_substitution` 设置,则不会生成 `CROSS JOIN`。[#82435](https://github.com/ClickHouse/ClickHouse/pull/82435)([Dmitry Novik](https://github.com/novikd))。 -* 当关联子查询作为函数 `EXISTS` 的参数出现时,仅读取所需的列。[#82443](https://github.com/ClickHouse/ClickHouse/pull/82443) ([Dmitry Novik](https://github.com/novikd))。 -* 在查询分析阶段,略微提升了对查询树比较的性能。[#82617](https://github.com/ClickHouse/ClickHouse/pull/82617) ([Nikolai Kochetov](https://github.com/KochetovNicolai))。 -* 在 ProfileEvents 的 Counter 中添加内存对齐以减少伪共享。 [#82697](https://github.com/ClickHouse/ClickHouse/pull/82697) ([Jiebin Sun](https://github.com/jiebinn))。 -* 来自 [#82308](https://github.com/ClickHouse/ClickHouse/issues/82308) 的 `null_map` 和 `JoinMask` 优化已应用于包含多个析取条件的 JOIN 操作。同时,对 `KnownRowsHolder` 数据结构也进行了优化。[#83041](https://github.com/ClickHouse/ClickHouse/pull/83041)([Nikita Taranov](https://github.com/nickitat))。 -* 为了避免在每次访问标志位时计算哈希,现在采用了普通的 `std::vector` 作为 join 标志。 [#83043](https://github.com/ClickHouse/ClickHouse/pull/83043) ([Nikita Taranov](https://github.com/nickitat))。 -* 当 `HashJoin` 使用 `lazy` 输出模式时,不要为结果列预先分配内存。这种做法并不理想,尤其是在匹配数量较少的情况下。此外,在连接完成后我们可以知道精确的匹配数量,因此可以更精确地预分配内存。 [#83304](https://github.com/ClickHouse/ClickHouse/pull/83304) ([Nikita Taranov](https://github.com/nickitat)). -* 在构建 pipeline 时,最大程度减少端口头中的内存拷贝。最初的 [PR](https://github.com/ClickHouse/ClickHouse/pull/70105) 由 [heymind](https://github.com/heymind) 提交。[#83381](https://github.com/ClickHouse/ClickHouse/pull/83381)([Raúl Marín](https://github.com/Algunenano))。 -* 在使用 RocksDB 存储时改进 clickhouse-keeper 的启动过程。[#83390](https://github.com/ClickHouse/ClickHouse/pull/83390) ([Antonio Andelic](https://github.com/antonio2368)). -* 在高并发负载下为减少锁竞争,创建存储快照数据时避免持有锁。[#83510](https://github.com/ClickHouse/ClickHouse/pull/83510)([Duc Canh Le](https://github.com/canhld94))。 -* 通过在未发生解析错误时重用序列化器,提升了 `ProtobufSingle` 输入格式的性能。[#83613](https://github.com/ClickHouse/ClickHouse/pull/83613)([Eduard Karacharov](https://github.com/korowa))。 -* 改进 pipeline 构建性能,以加速短查询。[#83631](https://github.com/ClickHouse/ClickHouse/pull/83631) ([Raúl Marín](https://github.com/Algunenano)). -* 优化 `MergeTreeReadersChain::getSampleBlock`,以提升短查询的执行速度。 [#83875](https://github.com/ClickHouse/ClickHouse/pull/83875) ([Raúl Marín](https://github.com/Algunenano)). -* 通过异步请求提高数据目录中表列表操作的速度。 [#81084](https://github.com/ClickHouse/ClickHouse/pull/81084) ([alesapin](https://github.com/alesapin)). -* 当启用 `s3_slow_all_threads_after_network_error` 配置时,为 S3 重试机制引入抖动(jitter)。[#81849](https://github.com/ClickHouse/ClickHouse/pull/81849) ([zoomxi](https://github.com/zoomxi))。 - - - - +* 引入异步日志记录。当日志写入到慢速设备时,将不再阻塞查询。[#82516](https://github.com/ClickHouse/ClickHouse/pull/82516)([Raúl Marín](https://github.com/Algunenano))。限制队列中保留的最大日志条目数量。[#83214](https://github.com/ClickHouse/ClickHouse/pull/83214)([Raúl Marín](https://github.com/Algunenano))。 +* 默认启用了并行分布式 INSERT SELECT,在该模式下,INSERT SELECT 会在每个分片上独立执行,参见 `parallel_distributed_insert_select` 设置。[#83040](https://github.com/ClickHouse/ClickHouse/pull/83040) ([Igor Nikonov](https://github.com/devcrafter))。 +* 当聚合查询仅包含一个针对非 `Nullable` 列的 `count()` 函数时,聚合逻辑会被完全内联到哈希表探测过程中。这样可以避免分配和维护任何聚合状态,从而显著降低内存使用和 CPU 开销。此优化在一定程度上解决了 [#81982](https://github.com/ClickHouse/ClickHouse/issues/81982)。[#82104](https://github.com/ClickHouse/ClickHouse/pull/82104)([Amos Bird](https://github.com/amosbird))。 +* 通过在仅有一个键列这一典型场景下移除对哈希映射的额外循环来优化 `HashJoin` 的性能;同时,当 `null_map` 和 `join_mask` 始终为 `true`/`false` 时,相关检查也被消除。 [#82308](https://github.com/ClickHouse/ClickHouse/pull/82308) ([Nikita Taranov](https://github.com/nickitat)). +* 对 `-If` 组合器进行了小优化。[#78454](https://github.com/ClickHouse/ClickHouse/pull/78454) ([李扬](https://github.com/taiyang-li))。 +* 使用向量相似度索引的向量搜索查询,由于减少了存储读取和 CPU 使用而具有更低的延迟。[#79103](https://github.com/ClickHouse/ClickHouse/pull/79103) ([Shankar Iyer](https://github.com/shankar-iyer)). +* 在 `filterPartsByQueryConditionCache` 中考虑 `merge_tree_min_{rows,bytes}_for_seek`,使其与其他按索引进行过滤的方法保持一致。[#80312](https://github.com/ClickHouse/ClickHouse/pull/80312) ([李扬](https://github.com/taiyang-li)). +* 将 `TOTALS` 步骤之后的 pipeline 改为多线程执行。[#80331](https://github.com/ClickHouse/ClickHouse/pull/80331) ([UnamedRus](https://github.com/UnamedRus))。 +* 修复 `Redis` 和 `KeeperMap` 存储的基于 key 的过滤功能。[#81833](https://github.com/ClickHouse/ClickHouse/pull/81833)([Pervakov Grigorii](https://github.com/GrigoryPervakov))。 +* 新增设置项 `min_joined_block_size_rows`(类似于 `min_joined_block_size_bytes`;默认值为 65409),用于控制 JOIN 输入和输出块的最小块大小(以行数计,前提是所用 JOIN 算法支持该设置)。过小的数据块会被合并。 [#81886](https://github.com/ClickHouse/ClickHouse/pull/81886) ([Nikita Taranov](https://github.com/nickitat))。 +* `ATTACH PARTITION` 不再会触发清空所有缓存。 [#82377](https://github.com/ClickHouse/ClickHouse/pull/82377) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* 通过使用等价类删除多余的 JOIN 操作来优化为相关子查询生成的执行计划。如果所有关联列都存在等价表达式,且启用了 `query_plan_correlated_subqueries_use_substitution` 设置,则不会生成 `CROSS JOIN`。[#82435](https://github.com/ClickHouse/ClickHouse/pull/82435) ([Dmitry Novik](https://github.com/novikd))。 +* 当关联子查询被推断为函数 `EXISTS` 的参数时,仅读取其中所需的列。[#82443](https://github.com/ClickHouse/ClickHouse/pull/82443) ([Dmitry Novik](https://github.com/novikd))。 +* 略微提升查询分析阶段查询树比较的速度。[#82617](https://github.com/ClickHouse/ClickHouse/pull/82617) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). +* 为 ProfileEvents 的 Counter 添加内存对齐以减少伪共享。 [#82697](https://github.com/ClickHouse/ClickHouse/pull/82697) ([Jiebin Sun](https://github.com/jiebinn)). +* 来自 [#82308](https://github.com/ClickHouse/ClickHouse/issues/82308) 的针对 `null_map` 和 `JoinMask` 的优化已应用于包含多个析取条件的 JOIN 场景。同时,对 `KnownRowsHolder` 数据结构也进行了优化。[#83041](https://github.com/ClickHouse/ClickHouse/pull/83041)([Nikita Taranov](https://github.com/nickitat))。 +* 直接使用 `std::vector` 作为 join 标志位,以避免在每次访问标志时计算哈希。[#83043](https://github.com/ClickHouse/ClickHouse/pull/83043) ([Nikita Taranov](https://github.com/nickitat))。 +* 当 `HashJoin` 使用 `lazy` 输出模式时,不要提前为结果列分配内存。这样做并不理想,尤其是在匹配数量较少的情况下。此外,在完成 join 之后,我们就知道确切的匹配数量,因此可以更精确地预分配内存。[#83304](https://github.com/ClickHouse/ClickHouse/pull/83304) ([Nikita Taranov](https://github.com/nickitat))。 +* 在构建 pipeline 时,尽量减少端口头部中的内存拷贝。原始 [PR](https://github.com/ClickHouse/ClickHouse/pull/70105) 由 [heymind](https://github.com/heymind) 提交。[#83381](https://github.com/ClickHouse/ClickHouse/pull/83381)([Raúl Marín](https://github.com/Algunenano))。 +* 在 clickhouse-keeper 使用 RocksDB 存储时改进其启动过程。 [#83390](https://github.com/ClickHouse/ClickHouse/pull/83390) ([Antonio Andelic](https://github.com/antonio2368)). +* 在创建存储快照数据时避免持有锁,以减少在高并发负载下的锁竞争。[#83510](https://github.com/ClickHouse/ClickHouse/pull/83510) ([Duc Canh Le](https://github.com/canhld94))。 +* 在未发生解析错误时复用序列化器,从而提升了 `ProtobufSingle` 输入格式的性能。[#83613](https://github.com/ClickHouse/ClickHouse/pull/83613) ([Eduard Karacharov](https://github.com/korowa)). +* 改进 pipeline 构建性能,以加速短查询。 [#83631](https://github.com/ClickHouse/ClickHouse/pull/83631) ([Raúl Marín](https://github.com/Algunenano)). +* 优化 `MergeTreeReadersChain::getSampleBlock`,从而加速短查询。[#83875](https://github.com/ClickHouse/ClickHouse/pull/83875)([Raúl Marín](https://github.com/Algunenano))。 +* 通过异步请求加快数据目录中表的列出速度。 [#81084](https://github.com/ClickHouse/ClickHouse/pull/81084) ([alesapin](https://github.com/alesapin)). +* 在启用 `s3_slow_all_threads_after_network_error` 配置时,为 S3 重试机制加入抖动(jitter)。[#81849](https://github.com/ClickHouse/ClickHouse/pull/81849) ([zoomxi](https://github.com/zoomxi))。 #### 改进 -* 使用多种颜色为括号着色,以提升可读性。 [#82538](https://github.com/ClickHouse/ClickHouse/pull/82538) ([Konstantin Bogdanov](https://github.com/thevar1able))。 -* 在输入 LIKE/REGEXP 模式时高亮显示其中的元字符。我们已经在 `clickhouse-format` 和 `clickhouse-client` 的 echo 输出中支持了这一点,但现在在命令提示符中也同样可用。[#82871](https://github.com/ClickHouse/ClickHouse/pull/82871)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* `clickhouse-format` 和客户端回显中的高亮显示方式将与命令行提示符中的高亮显示方式相同。[#82874](https://github.com/ClickHouse/ClickHouse/pull/82874)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 现在允许将 `plain_rewritable` 磁盘用作数据库元数据磁盘。已在 `plain_rewritable` 中实现 `moveFile` 和 `replaceFile` 方法,从而支持其作为数据库磁盘使用。[#79424](https://github.com/ClickHouse/ClickHouse/pull/79424) ([Tuan Pham Anh](https://github.com/tuanpach))。 -* 允许对 `PostgreSQL`、`MySQL` 和 `DataLake` 数据库进行备份。此类数据库的备份仅会保存数据库定义,而不会保存其中的数据。[#79982](https://github.com/ClickHouse/ClickHouse/pull/79982) ([Nikolay Degterinsky](https://github.com/evillique))。 -* 将配置项 `allow_experimental_join_condition` 标记为已废弃,因为该选项现始终被允许。[#80566](https://github.com/ClickHouse/ClickHouse/pull/80566)([Vladimir Cherkasov](https://github.com/vdimir))。 -* 将压力相关指标添加到 ClickHouse 的异步指标中。[#80779](https://github.com/ClickHouse/ClickHouse/pull/80779) ([Xander Garbett](https://github.com/Garbett1)). -* 新增指标 `MarkCacheEvictedBytes`、`MarkCacheEvictedMarks`、`MarkCacheEvictedFiles`,用于跟踪 mark cache 中的淘汰情况。(issue [#60989](https://github.com/ClickHouse/ClickHouse/issues/60989))[#80799](https://github.com/ClickHouse/ClickHouse/pull/80799)([Shivji Kumar Jha](https://github.com/shiv4289))。 -* 根据 [规范](https://github.com/apache/parquet-format/blob/master/LogicalTypes.md#enum) 的要求,支持将 Parquet 枚举写出为字节数组。 [#81090](https://github.com/ClickHouse/ClickHouse/pull/81090) ([Arthur Passos](https://github.com/arthurpassos))。 -* 对 `DeltaLake` 表引擎的改进:delta-kernel-rs 提供了 `ExpressionVisitor` API,本 PR 中实现了该 API,并将其用于分区列表达式转换(它将取代我们代码中此前使用的、在 delta-kernel-rs 中已废弃的旧方式)。未来,这个 `ExpressionVisitor` 还将支持基于统计信息的剪枝以及部分 Delta Lake 专有特性。此外,此变更的目的之一是为 `DeltaLakeCluster` 表引擎提供分区剪枝支持(解析后的表达式结果 —— ActionsDAG —— 将被序列化,并与数据路径一同由发起端发送,因为执行剪枝所需的这类信息,仅在发起端进行数据文件列表时以元信息形式可用,但必须在每个读数据的服务器上应用)。 [#81136](https://github.com/ClickHouse/ClickHouse/pull/81136) ([Kseniia Sumarokova](https://github.com/kssenii))。 -* 在为命名元组推导超类型时保留元素名。[#81345](https://github.com/ClickHouse/ClickHouse/pull/81345) ([lgbo](https://github.com/lgbo-ustc)). -* 手动统计已消费的消息数量,以避免在 StorageKafka2 中依赖之前提交的偏移量。 [#81662](https://github.com/ClickHouse/ClickHouse/pull/81662) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). -* 新增 `clickhouse-keeper-utils`,一款用于管理和分析 ClickHouse Keeper 数据的新命令行工具。该工具支持从快照和变更日志中导出状态信息、分析变更日志文件,以及提取特定的日志区间。[#81677](https://github.com/ClickHouse/ClickHouse/pull/81677) ([Antonio Andelic](https://github.com/antonio2368))。 -* 总量和每个用户的网络限速器都不会被重置,这保证 `max_network_bandwidth_for_all_users` 和 `max_network_bandwidth_for_all_users` 这两个限制值永远不会被超过。[#81729](https://github.com/ClickHouse/ClickHouse/pull/81729)([Sergei Trifonov](https://github.com/serxa))。 -* 支持将 geoparquet 作为输出格式进行写入。 [#81784](https://github.com/ClickHouse/ClickHouse/pull/81784) ([Konstantin Vedernikov](https://github.com/scanhex12)). -* 如果 `RENAME COLUMN` 变更操作将会重命名当前仍受未完成数据 mutation 影响的某个列,则禁止启动该操作。 [#81823](https://github.com/ClickHouse/ClickHouse/pull/81823) ([Mikhail Artemenko](https://github.com/Michicosun)). -* `Connection` 头会在所有其他头部之后发送,此时我们已经知道是否需要保持连接。[#81951](https://github.com/ClickHouse/ClickHouse/pull/81951) ([Sema Checherinda](https://github.com/CheSema))。 -* 根据 `listen_backlog`(默认 4096)调整 TCP 服务器队列长度(默认 64)。 [#82045](https://github.com/ClickHouse/ClickHouse/pull/82045) ([Azat Khuzhin](https://github.com/azat)). -* 新增支持在无需重启服务器的情况下动态重新加载 `max_local_read_bandwidth_for_server` 和 `max_local_write_bandwidth_for_server`。[#82083](https://github.com/ClickHouse/ClickHouse/pull/82083) ([Kai Zhu](https://github.com/nauu)). -* 新增通过 `TRUNCATE TABLE system.warnings` 清空 `system.warnings` 表中所有警告的支持。 [#82087](https://github.com/ClickHouse/ClickHouse/pull/82087) ([Vladimir Cherkasov](https://github.com/vdimir)). -* 修复数据湖集群函数中的分区剪枝问题。[#82131](https://github.com/ClickHouse/ClickHouse/pull/82131) ([Kseniia Sumarokova](https://github.com/kssenii)). -* 修复了在 `DeltaLakeCluster` 表函数中读取分区数据的问题。在此 PR 中,集群函数的协议版本被提升,以便能够从发起方向副本发送额外信息。这些额外信息包含 `delta-kernel` 的转换表达式,用于解析分区列(以及未来的其他内容,如生成列等)。 [#82132](https://github.com/ClickHouse/ClickHouse/pull/82132) ([Kseniia Sumarokova](https://github.com/kssenii)). -* 函数 `reinterpret` 现在支持转换为 `Array(T)` 类型,其中 `T` 是固定大小的数据类型(issue [#82621](https://github.com/ClickHouse/ClickHouse/issues/82621))。[#83399](https://github.com/ClickHouse/ClickHouse/pull/83399)([Shankar Iyer](https://github.com/shankar-iyer))。 -* 现在数据库 Datalake 抛出的异常更加友好、易于理解。修复了 [#81211](https://github.com/ClickHouse/ClickHouse/issues/81211)。[#82304](https://github.com/ClickHouse/ClickHouse/pull/82304)([alesapin](https://github.com/alesapin))。 -* 通过让 `HashJoin::needUsedFlagsForPerRightTableRow` 返回 false 来改进 CROSS JOIN。 [#82379](https://github.com/ClickHouse/ClickHouse/pull/82379) ([lgbo](https://github.com/lgbo-ustc)). -* 允许以 Array(Tuple) 的形式读写 Map 列。 [#82408](https://github.com/ClickHouse/ClickHouse/pull/82408) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). -* 在 `system.licenses` 中列出 [Rust](https://clickhouse.com/blog/rust) crate 的许可信息。[#82440](https://github.com/ClickHouse/ClickHouse/pull/82440) ([Raúl Marín](https://github.com/Algunenano))。 -* 现在可以在 S3Queue 表引擎的 `keeper_path` 设置中使用像 `{uuid}` 这样的宏。[#82463](https://github.com/ClickHouse/ClickHouse/pull/82463)([Nikolay Degterinsky](https://github.com/evillique))。 -* Keeper 改进:在后台线程中在磁盘之间移动 changelog 文件。此前,将 changelog 移动到不同磁盘会在移动完成前全局阻塞 Keeper。如果移动操作耗时较长(例如移动到 S3 磁盘),这会导致性能下降。[#82485](https://github.com/ClickHouse/ClickHouse/pull/82485)([Antonio Andelic](https://github.com/antonio2368))。 -* Keeper 改进:新增配置 `keeper_server.cleanup_old_and_ignore_new_acl`。如果启用,所有节点的 ACL 都将被清除,新请求的 ACL 将被忽略。如果目标是彻底从节点中移除 ACL,务必在生成新的快照之前一直保持该配置为启用状态。[#82496](https://github.com/ClickHouse/ClickHouse/pull/82496) ([Antonio Andelic](https://github.com/antonio2368))。 -* 新增了一个服务器设置 `s3queue_disable_streaming`,用于在使用 S3Queue 表引擎的表中禁用流式处理。该设置可在无需重启服务器的情况下进行更改。[#82515](https://github.com/ClickHouse/ClickHouse/pull/82515) ([Kseniia Sumarokova](https://github.com/kssenii))。 -* 重构文件系统缓存的动态调整大小功能。添加了更多日志以便进行内部分析。[#82556](https://github.com/ClickHouse/ClickHouse/pull/82556) ([Kseniia Sumarokova](https://github.com/kssenii)). -* 在没有配置文件的情况下,`clickhouse-server` 也会监听 PostgreSQL 端口 9005,与默认配置一样。[#82633](https://github.com/ClickHouse/ClickHouse/pull/82633)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 在 `ReplicatedMergeTree::executeMetadataAlter` 中,我们获取 `StorageID`,并且在不获取 `DDLGuard` 的情况下尝试调用 `IDatabase::alterTable`。在这段时间内,从技术上讲,我们可以将相关表替换为另一张表,因此当我们获取表定义时,可能会拿到错误的那个。为避免这种情况,我们在尝试调用 `IDatabase::alterTable` 时增加了一个单独的检查,以确保 UUID 匹配。[#82666](https://github.com/ClickHouse/ClickHouse/pull/82666)([Nikolay Degterinsky](https://github.com/evillique))。 -* 在挂载使用只读远程磁盘的数据库时,手动将表的 UUID 添加到 DatabaseCatalog 中。[#82670](https://github.com/ClickHouse/ClickHouse/pull/82670)([Tuan Pham Anh](https://github.com/tuanpach))。 -* 阻止用户在 `NumericIndexedVector` 中使用 `nan` 和 `inf`。修复了 [#82239](https://github.com/ClickHouse/ClickHouse/issues/82239) 以及一些其他问题。[#82681](https://github.com/ClickHouse/ClickHouse/pull/82681)([Raufs Dunamalijevs](https://github.com/rienath))。 -* 不要在 `X-ClickHouse-Progress` 和 `X-ClickHouse-Summary` HTTP 头格式中省略零值。[#82727](https://github.com/ClickHouse/ClickHouse/pull/82727) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 -* Keeper 改进:支持针对 world:anyone ACL 的特定权限。[#82755](https://github.com/ClickHouse/ClickHouse/pull/82755) ([Antonio Andelic](https://github.com/antonio2368))。 -* 不允许对 SummingMergeTree 中显式列出的求和列执行 `RENAME COLUMN` 或 `DROP COLUMN` 操作。修复了 [#81836](https://github.com/ClickHouse/ClickHouse/issues/81836)。[#82821](https://github.com/ClickHouse/ClickHouse/pull/82821)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 改进 `Decimal` 到 `Float32` 的转换精度。实现 `Decimal` 到 `BFloat16` 的转换。修复 [#82660](https://github.com/ClickHouse/ClickHouse/issues/82660)。 [#82823](https://github.com/ClickHouse/ClickHouse/pull/82823)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* Web UI 中的滚动条将略有优化。 [#82869](https://github.com/ClickHouse/ClickHouse/pull/82869) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* 带有嵌入式配置的 `clickhouse-server` 将通过提供 HTTP OPTIONS 响应来支持使用 Web UI。[#82870](https://github.com/ClickHouse/ClickHouse/pull/82870)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 在配置中新增支持为路径指定额外的 Keeper ACL。如果你想为某个特定路径添加额外的 ACL,可以在配置中的 `zookeeper.path_acls` 下进行定义。[#82898](https://github.com/ClickHouse/ClickHouse/pull/82898) ([Antonio Andelic](https://github.com/antonio2368))。 -* 现在,mutations 快照将基于可见部分的快照来构建。同时,快照中使用的 mutation 计数器也会根据已包含的 mutations 重新计算。[#82945](https://github.com/ClickHouse/ClickHouse/pull/82945) ([Mikhail Artemenko](https://github.com/Michicosun))。 -* 在 Keeper 因软内存限制拒绝写入时新增 ProfileEvent。 [#82963](https://github.com/ClickHouse/ClickHouse/pull/82963) ([Xander Garbett](https://github.com/Garbett1)). -* 向 `system.s3queue_log` 添加列 `commit_time`、`commit_id`。 [#83016](https://github.com/ClickHouse/ClickHouse/pull/83016) ([Kseniia Sumarokova](https://github.com/kssenii))。 -* 在某些情况下,我们需要为指标添加多个维度。比如,与其使用单一计数器,不如按错误代码维度来统计失败的合并或变更。为此,引入了 `system.dimensional_metrics`,它正是为这一需求而设计,并且添加了第一个名为 `failed_merges` 的维度化指标。[#83030](https://github.com/ClickHouse/ClickHouse/pull/83030) ([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 -* 在 ClickHouse 客户端中汇总未知设置警告,并在日志中以摘要形式记录。[#83042](https://github.com/ClickHouse/ClickHouse/pull/83042)([Bharat Nallan](https://github.com/bharatnc))。 -* ClickHouse 客户端现在会在连接出错时报告本地端口。[#83050](https://github.com/ClickHouse/ClickHouse/pull/83050) ([Jianfei Hu](https://github.com/incfly))。 -* 在 `AsynchronousMetrics` 中略微改进了错误处理。如果 `/sys/block` 目录存在但不可访问,服务器将会在不监控块设备的情况下启动。修复了 [#79229](https://github.com/ClickHouse/ClickHouse/issues/79229)。[#83115](https://github.com/ClickHouse/ClickHouse/pull/83115)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 在关闭普通表之后、系统表之前再关闭 SystemLogs,而不是在普通表之前关闭。[#83134](https://github.com/ClickHouse/ClickHouse/pull/83134) ([Kseniia Sumarokova](https://github.com/kssenii)). -* 为 `S3Queue` 的关闭过程添加日志。[#83163](https://github.com/ClickHouse/ClickHouse/pull/83163) ([Kseniia Sumarokova](https://github.com/kssenii))。 -* 支持将 `Time` 和 `Time64` 解析为 `MM:SS`、`M:SS`、`SS` 或 `S`。 [#83299](https://github.com/ClickHouse/ClickHouse/pull/83299) ([Yarik Briukhovetskyi](https://github.com/yariks5s))。 -* 当 `distributed_ddl_output_mode='*_only_active'` 时,将不再等待复制延迟大于 `max_replication_lag_to_enqueue` 的新副本或已恢复副本。这样可以在新副本在完成初始化或恢复后变为活动状态、但在初始化期间累积了大量复制日志的情况下,避免出现 `DDL task is not finished on some hosts` 错误。同时,实现了 `SYSTEM SYNC DATABASE REPLICA STRICT` 查询,用于等待复制日志减少到低于 `max_replication_lag_to_enqueue`。[#83302](https://github.com/ClickHouse/ClickHouse/pull/83302)([Alexander Tokmakov](https://github.com/tavplubix))。 -* 不要在异常消息中输出过长的表达式执行描述。修复 [#83164](https://github.com/ClickHouse/ClickHouse/issues/83164)。[#83350](https://github.com/ClickHouse/ClickHouse/pull/83350)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 新增解析 part 前缀和后缀的能力,并检查非常量列的覆盖情况。[#83377](https://github.com/ClickHouse/ClickHouse/pull/83377) ([Mikhail Artemenko](https://github.com/Michicosun)). -* 在使用命名集合时统一 ODBC 和 JDBC 的参数名称。[#83410](https://github.com/ClickHouse/ClickHouse/pull/83410) ([Andrey Zvonov](https://github.com/zvonand)). -* 当存储处于关闭过程中时,`getStatus` 会抛出一个 `ErrorCodes::ABORTED` 异常。此前,这会导致 SELECT 查询失败。现在我们会捕获 `ErrorCodes::ABORTED` 异常并有意将其忽略。[#83435](https://github.com/ClickHouse/ClickHouse/pull/83435) ([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 -* 在 `MergeParts` 的 `part_log` profile 事件中添加进程资源指标(例如 `UserTimeMicroseconds`、`SystemTimeMicroseconds`、`RealTimeMicroseconds`)。[#83460](https://github.com/ClickHouse/ClickHouse/pull/83460) ([Vladimir Cherkasov](https://github.com/vdimir))。 -* 在 Keeper 中默认启用 `create_if_not_exists`、`check_not_exists`、`remove_recursive` 特性标志,以支持新的请求类型。[#83488](https://github.com/ClickHouse/ClickHouse/pull/83488)([Antonio Andelic](https://github.com/antonio2368))。 -* 在服务器关闭时,应先停止 S3(Azure 等)Queue 流式传输,再关闭任何表。[#83530](https://github.com/ClickHouse/ClickHouse/pull/83530)([Kseniia Sumarokova](https://github.com/kssenii))。 -* 在 `JSON` 输入格式中支持将 `Date`/`Date32` 作为整数。[#83597](https://github.com/ClickHouse/ClickHouse/pull/83597)([MikhailBurdukov](https://github.com/MikhailBurdukov))。 -* 在某些与加载和添加 projections 相关的场景下,使异常信息更易读。[#83728](https://github.com/ClickHouse/ClickHouse/pull/83728) ([Robert Schulze](https://github.com/rschu1ze)). -* 为 `clickhouse-server` 引入一个配置选项,用于跳过二进制文件校验和完整性检查。解决 [#83637](https://github.com/ClickHouse/ClickHouse/issues/83637)。[#83749](https://github.com/ClickHouse/ClickHouse/pull/83749)([Rafael Roquetto](https://github.com/rafaelroquetto))。 - - - - - -#### 错误修复(官方稳定版本中用户可见的异常行为) - -* 修复 `clickhouse-benchmark` 中 `--reconnect` 选项的错误默认值。该默认值在 [#79465](https://github.com/ClickHouse/ClickHouse/issues/79465) 中被误改。[#82677](https://github.com/ClickHouse/ClickHouse/pull/82677)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 使用多种颜色显示括号,以提高可读性。 [#82538](https://github.com/ClickHouse/ClickHouse/pull/82538) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* 在输入 LIKE/REGEXP 模式时高亮显示其中的元字符。我们已经在 `clickhouse-format` 和 `clickhouse-client` 的 echo 输出中提供了该功能,现在在命令行提示符中也实现了。[#82871](https://github.com/ClickHouse/ClickHouse/pull/82871) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* 在 `clickhouse-format` 和客户端的 echo 输出中的高亮效果,现在将与命令行提示符中的高亮保持一致。[#82874](https://github.com/ClickHouse/ClickHouse/pull/82874)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 现在允许将 `plain_rewritable` 磁盘用于存储数据库元数据。在 `plain_rewritable` 中实现了 `moveFile` 和 `replaceFile` 方法,使其可以作为数据库磁盘使用。 [#79424](https://github.com/ClickHouse/ClickHouse/pull/79424) ([Tuan Pham Anh](https://github.com/tuanpach))。 +* 允许为 `PostgreSQL`、`MySQL` 和 `DataLake` 数据库创建备份。此类数据库的备份仅会保存其定义(元数据),而不会备份其中的数据。[#79982](https://github.com/ClickHouse/ClickHouse/pull/79982) ([Nikolay Degterinsky](https://github.com/evillique))。 +* 将设置 `allow_experimental_join_condition` 标记为已废弃,因为它现在始终被允许。[#80566](https://github.com/ClickHouse/ClickHouse/pull/80566)([Vladimir Cherkasov](https://github.com/vdimir))。 +* 将压力相关指标添加到 ClickHouse 异步指标中。[#80779](https://github.com/ClickHouse/ClickHouse/pull/80779) ([Xander Garbett](https://github.com/Garbett1))。 +* 新增指标 `MarkCacheEvictedBytes`、`MarkCacheEvictedMarks`、`MarkCacheEvictedFiles`,用于跟踪标记缓存(mark cache)中的逐出情况。(issue [#60989](https://github.com/ClickHouse/ClickHouse/issues/60989))。[#80799](https://github.com/ClickHouse/ClickHouse/pull/80799)([Shivji Kumar Jha](https://github.com/shiv4289))。 +* 支持按照[规范](https://github.com/apache/parquet-format/blob/master/LogicalTypes.md#enum)要求,将 Parquet enum 写出为字节数组。 [#81090](https://github.com/ClickHouse/ClickHouse/pull/81090) ([Arthur Passos](https://github.com/arthurpassos))。 +* 对 `DeltaLake` 表引擎的改进:delta-kernel-rs 提供了 `ExpressionVisitor` API,本 PR 对其进行了实现,并将其应用于分区列表达式的转换(它将取代我们代码中之前使用、且在 delta-kernel-rs 中已弃用的旧实现方式)。未来,这个 `ExpressionVisitor` 还将支持基于统计信息的裁剪以及一些 Delta Lake 的专有特性。此外,此更改的另一个目的,是为 `DeltaLakeCluster` 表引擎提供分区裁剪支持(解析后的表达式结果 ActionsDAG 将被序列化,并与数据路径一起从发起端发送,因为这类用于裁剪的信息仅作为数据文件列表的元信息在发起端可用,但必须在每个读取服务器上应用于数据)。[#81136](https://github.com/ClickHouse/ClickHouse/pull/81136)([Kseniia Sumarokova](https://github.com/kssenii))。 +* 在为具名元组推导超类型时保留元素名称。[#81345](https://github.com/ClickHouse/ClickHouse/pull/81345) ([lgbo](https://github.com/lgbo-ustc))。 +* 手动统计已消费的消息数量,以避免在 StorageKafka2 中依赖之前已提交的偏移量。 [#81662](https://github.com/ClickHouse/ClickHouse/pull/81662) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). +* 新增 `clickhouse-keeper-utils`,这是一款用于管理和分析 ClickHouse Keeper 数据的新命令行工具。该工具支持从快照和变更日志中导出状态、分析变更日志文件,以及提取特定的日志范围。[#81677](https://github.com/ClickHouse/ClickHouse/pull/81677) ([Antonio Andelic](https://github.com/antonio2368))。 +* 全局和按用户的网络限速器都不会被重置,从而确保 `max_network_bandwidth_for_all_users` 和 `max_network_bandwidth_for_all_users` 的限制永远不会被超出。[#81729](https://github.com/ClickHouse/ClickHouse/pull/81729)([Sergei Trifonov](https://github.com/serxa))。 +* 支持以 GeoParquet 文件作为输出格式。 [#81784](https://github.com/ClickHouse/ClickHouse/pull/81784) ([Konstantin Vedernikov](https://github.com/scanhex12)). +* 如果某个 `RENAME COLUMN` 修改操作会重命名当前正受未完成数据变更影响的列,则禁止执行该 `RENAME COLUMN` 修改操作。 [#81823](https://github.com/ClickHouse/ClickHouse/pull/81823) ([Mikhail Artemenko](https://github.com/Michicosun)). +* 在确定是否应保留连接后,`Connection` 头会在所有其他头之后发送。[#81951](https://github.com/ClickHouse/ClickHouse/pull/81951) ([Sema Checherinda](https://github.com/CheSema))。 +* 根据 listen_backlog(默认 4096)调整 TCP 服务器队列长度(默认 64)。 [#82045](https://github.com/ClickHouse/ClickHouse/pull/82045) ([Azat Khuzhin](https://github.com/azat)). +* 新增支持在无需重启服务器的情况下动态重新加载 `max_local_read_bandwidth_for_server` 和 `max_local_write_bandwidth_for_server`。[#82083](https://github.com/ClickHouse/ClickHouse/pull/82083) ([Kai Zhu](https://github.com/nauu))。 +* 新增支持使用 `TRUNCATE TABLE system.warnings` 清空 `system.warnings` 表中的所有警告。 [#82087](https://github.com/ClickHouse/ClickHouse/pull/82087) ([Vladimir Cherkasov](https://github.com/vdimir)). +* 修复使用数据湖集群函数时的分区裁剪问题。 [#82131](https://github.com/ClickHouse/ClickHouse/pull/82131) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 修复在 `DeltaLakeCluster` 表函数中读取分区数据的问题。在此 PR 中,提高了集群函数的协议版本,从而允许从发起方向副本发送额外信息。该额外信息包含 delta-kernel 的转换表达式,用于解析分区列(以及将来的一些其他内容,例如生成列等)。[#82132](https://github.com/ClickHouse/ClickHouse/pull/82132) ([Kseniia Sumarokova](https://github.com/kssenii))。 +* `reinterpret` 函数现在支持转换为 `Array(T)` 类型,其中 `T` 是固定大小的数据类型(issue [#82621](https://github.com/ClickHouse/ClickHouse/issues/82621))。[#83399](https://github.com/ClickHouse/ClickHouse/pull/83399)([Shankar Iyer](https://github.com/shankar-iyer))。 +* 现在 Datalake 数据库会抛出更易理解的异常。修复 [#81211](https://github.com/ClickHouse/ClickHouse/issues/81211)。[#82304](https://github.com/ClickHouse/ClickHouse/pull/82304) ([alesapin](https://github.com/alesapin))。 +* 通过让 `HashJoin::needUsedFlagsForPerRightTableRow` 返回 false 来改进 CROSS JOIN。[#82379](https://github.com/ClickHouse/ClickHouse/pull/82379) ([lgbo](https://github.com/lgbo-ustc))。 +* 允许以 Tuple 数组(Array of Tuples)形式读写 Map 列。 [#82408](https://github.com/ClickHouse/ClickHouse/pull/82408) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). +* 在 `system.licenses` 中列出 [Rust](https://clickhouse.com/blog/rust) crate 库的许可证。[#82440](https://github.com/ClickHouse/ClickHouse/pull/82440)([Raúl Marín](https://github.com/Algunenano))。 +* 现在可以在 S3Queue 表引擎的 `keeper_path` 设置中使用类似 `{uuid}` 的宏。[#82463](https://github.com/ClickHouse/ClickHouse/pull/82463) ([Nikolay Degterinsky](https://github.com/evillique))。 +* Keeper 改进:通过后台线程在不同磁盘之间移动 changelog 文件。此前,将 changelog 移动到不同磁盘会在移动完成前全局阻塞 Keeper。如果移动操作耗时较长(例如移动到 S3 磁盘),会导致性能下降。 [#82485](https://github.com/ClickHouse/ClickHouse/pull/82485) ([Antonio Andelic](https://github.com/antonio2368)). +* Keeper 改进:新增配置项 `keeper_server.cleanup_old_and_ignore_new_acl`。如果启用,所有节点的 ACL 都将被清除,而新请求的 ACL 将被忽略。如果目标是从节点上彻底移除 ACL,务必在创建新的快照之前始终保持该配置处于启用状态。[#82496](https://github.com/ClickHouse/ClickHouse/pull/82496) ([Antonio Andelic](https://github.com/antonio2368))。 +* 新增了一个服务器设置项 `s3queue_disable_streaming`,用于在使用 S3Queue 表引擎的表中禁用流式处理。该设置可在无需重启服务器的情况下进行更改。[#82515](https://github.com/ClickHouse/ClickHouse/pull/82515) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 重构文件系统缓存的动态缩放功能。添加了更多日志以便进行内部诊断。 [#82556](https://github.com/ClickHouse/ClickHouse/pull/82556) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 在未提供配置文件时,`clickhouse-server` 也会像默认配置一样监听 PostgreSQL 端口 9005。[#82633](https://github.com/ClickHouse/ClickHouse/pull/82633)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 在 `ReplicatedMergeTree::executeMetadataAlter` 中,我们获取 `StorageID`,并且在不获取 DDLGuard 的情况下尝试调用 `IDatabase::alterTable`。在这段时间内,从技术上讲,我们可能会把相关的那张表与另一张表交换掉,因此当我们获取表定义时,可能会拿到错误的定义。为避免这种情况,我们在调用 `IDatabase::alterTable` 时增加了一个额外的 UUID 匹配检查。[#82666](https://github.com/ClickHouse/ClickHouse/pull/82666)([Nikolay Degterinsky](https://github.com/evillique))。 +* 在附加使用只读远程磁盘的数据库时,需要将表 UUID 手动添加到 DatabaseCatalog 中。[#82670](https://github.com/ClickHouse/ClickHouse/pull/82670)([Tuan Pham Anh](https://github.com/tuanpach))。 +* 防止用户在 `NumericIndexedVector` 中使用 `nan` 和 `inf`。修复了 [#82239](https://github.com/ClickHouse/ClickHouse/issues/82239) 以及一些其他小问题。[#82681](https://github.com/ClickHouse/ClickHouse/pull/82681)([Raufs Dunamalijevs](https://github.com/rienath))。 +* 在 `X-ClickHouse-Progress` 和 `X-ClickHouse-Summary` 头字段格式中不要省略 0 值。 [#82727](https://github.com/ClickHouse/ClickHouse/pull/82727) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). +* Keeper 改进:支持为 world:anyone ACL 配置特定权限。[#82755](https://github.com/ClickHouse/ClickHouse/pull/82755) ([Antonio Andelic](https://github.com/antonio2368)). +* 不允许对在 SummingMergeTree 中显式指定为求和列的列执行 `RENAME COLUMN` 或 `DROP COLUMN` 操作。修复了 [#81836](https://github.com/ClickHouse/ClickHouse/issues/81836)。[#82821](https://github.com/ClickHouse/ClickHouse/pull/82821)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 提高从 `Decimal` 到 `Float32` 的转换精度。实现从 `Decimal` 到 `BFloat16` 的转换。关闭 Issue [#82660](https://github.com/ClickHouse/ClickHouse/issues/82660)。[#82823](https://github.com/ClickHouse/ClickHouse/pull/82823)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* Web UI 中的滚动条外观将略有改善。[#82869](https://github.com/ClickHouse/ClickHouse/pull/82869) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* 带有嵌入式配置的 `clickhouse-server` 现在通过提供 HTTP OPTIONS 响应来允许使用 Web UI。[#82870](https://github.com/ClickHouse/ClickHouse/pull/82870)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 在配置中新增对为路径指定额外 Keeper ACL 的支持。如果想为某个特定路径添加额外的 ACL,可在配置中的 `zookeeper.path_acls` 下进行定义。[#82898](https://github.com/ClickHouse/ClickHouse/pull/82898) ([Antonio Andelic](https://github.com/antonio2368))。 +* 现在,变更快照将从可见部分的快照构建。同时,快照中使用的变更计数器会根据所包含的变更重新计算。[#82945](https://github.com/ClickHouse/ClickHouse/pull/82945) ([Mikhail Artemenko](https://github.com/Michicosun))。 +* 在 Keeper 因软内存限制而拒绝写入时添加 ProfileEvent。 [#82963](https://github.com/ClickHouse/ClickHouse/pull/82963) ([Xander Garbett](https://github.com/Garbett1)). +* 向 `system.s3queue_log` 添加 `commit_time` 和 `commit_id` 列。 [#83016](https://github.com/ClickHouse/ClickHouse/pull/83016) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 在某些情况下,我们需要为指标增加多个维度。例如,与其使用单一计数器,不如按错误码统计失败的 merge 或 mutation 次数。为此引入了 `system.dimensional_metrics`,它正是为此而设计的,并新增了首个名为 `failed_merges` 的维度化指标。[#83030](https://github.com/ClickHouse/ClickHouse/pull/83030)([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 +* 在 ClickHouse client 中汇总未知设置相关的警告,并以摘要形式写入日志。[#83042](https://github.com/ClickHouse/ClickHouse/pull/83042) ([Bharat Nallan](https://github.com/bharatnc))。 +* 在发生连接错误时,ClickHouse 客户端现在会报告本地端口号。[#83050](https://github.com/ClickHouse/ClickHouse/pull/83050) ([Jianfei Hu](https://github.com/incfly))。 +* 对 `AsynchronousMetrics` 的错误处理进行了小幅改进。如果 `/sys/block` 目录存在但不可访问,服务器将在不监控块设备的情况下启动。修复了 [#79229](https://github.com/ClickHouse/ClickHouse/issues/79229)。[#83115](https://github.com/ClickHouse/ClickHouse/pull/83115)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 在关闭普通表之后关闭 SystemLogs(位于系统表之前,而不是普通表之前)。 [#83134](https://github.com/ClickHouse/ClickHouse/pull/83134) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 在 `S3Queue` 关闭过程中添加日志。[#83163](https://github.com/ClickHouse/ClickHouse/pull/83163)([Kseniia Sumarokova](https://github.com/kssenii))。 +* 支持将 `Time` 和 `Time64` 解析为 `MM:SS`、`M:SS`、`SS` 或 `S`。 [#83299](https://github.com/ClickHouse/ClickHouse/pull/83299) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* 当 `distributed_ddl_output_mode='*_only_active'` 时,不再等待复制延迟大于 `max_replication_lag_to_enqueue` 的新副本或恢复中的副本。这样可以避免在新副本完成初始化或恢复后变为活动状态时,由于在初始化期间积累了大量复制日志而导致出现 `DDL task is not finished on some hosts`。同时,实现了 `SYSTEM SYNC DATABASE REPLICA STRICT` 查询,用于等待复制日志降到低于 `max_replication_lag_to_enqueue`。[#83302](https://github.com/ClickHouse/ClickHouse/pull/83302) ([Alexander Tokmakov](https://github.com/tavplubix))。 +* 不要在异常消息中输出过长的表达式操作描述。关闭 [#83164](https://github.com/ClickHouse/ClickHouse/issues/83164)。[#83350](https://github.com/ClickHouse/ClickHouse/pull/83350)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 增加对解析 part 前缀和后缀的支持,并检查非常量列的覆盖情况。[#83377](https://github.com/ClickHouse/ClickHouse/pull/83377) ([Mikhail Artemenko](https://github.com/Michicosun))。 +* 在使用命名集合时统一 ODBC 和 JDBC 中的参数名。[#83410](https://github.com/ClickHouse/ClickHouse/pull/83410) ([Andrey Zvonov](https://github.com/zvonand)). +* 当存储处于关闭过程中时,`getStatus` 会抛出 `ErrorCodes::ABORTED` 异常。之前,这会导致 SELECT 查询失败。现在我们会捕获 `ErrorCodes::ABORTED` 异常并刻意忽略它们。[#83435](https://github.com/ClickHouse/ClickHouse/pull/83435)([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 +* 将进程资源指标(例如 `UserTimeMicroseconds`、`SystemTimeMicroseconds`、`RealTimeMicroseconds`)添加到 `MergeParts` 条目的 part_log profile 事件中。[#83460](https://github.com/ClickHouse/ClickHouse/pull/83460)([Vladimir Cherkasov](https://github.com/vdimir))。 +* 在 Keeper 中默认启用 `create_if_not_exists`、`check_not_exists`、`remove_recursive` 特性标志,以支持新的请求类型。[#83488](https://github.com/ClickHouse/ClickHouse/pull/83488) ([Antonio Andelic](https://github.com/antonio2368))。 +* 在服务器关闭时,应先停止 S3(Azure/etc)Queue 流式处理,然后再关闭任何表。 [#83530](https://github.com/ClickHouse/ClickHouse/pull/83530) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 在 `JSON` 输入格式中支持将 `Date`/`Date32` 作为整数使用。[#83597](https://github.com/ClickHouse/ClickHouse/pull/83597) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). +* 针对在加载和添加 projection 过程中某些特定情况,改进了异常消息的可读性,使其更易于阅读。 [#83728](https://github.com/ClickHouse/ClickHouse/pull/83728) ([Robert Schulze](https://github.com/rschu1ze)). +* 为 `clickhouse-server` 引入一个配置选项,用于跳过二进制文件校验和完整性检查。解决了 [#83637](https://github.com/ClickHouse/ClickHouse/issues/83637)。 [#83749](https://github.com/ClickHouse/ClickHouse/pull/83749) ([Rafael Roquetto](https://github.com/rafaelroquetto))。 + +#### Bug 修复(官方稳定版本中对用户可见的错误行为) + +* 修复 `clickhouse-benchmark` 中 `--reconnect` 选项的错误默认值。该值在 [#79465](https://github.com/ClickHouse/ClickHouse/issues/79465) 中被误改。[#82677](https://github.com/ClickHouse/ClickHouse/pull/82677)([Alexey Milovidov](https://github.com/alexey-milovidov))。 * 修复 `CREATE DICTIONARY` 语句格式不一致的问题。关闭 [#82105](https://github.com/ClickHouse/ClickHouse/issues/82105)。[#82829](https://github.com/ClickHouse/ClickHouse/pull/82829)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 修复当 TTL 中包含 `materialize` 函数时格式不一致的问题。关闭 [#82828](https://github.com/ClickHouse/ClickHouse/issues/82828)。[#82831](https://github.com/ClickHouse/ClickHouse/pull/82831)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 修复在子查询中使用 `EXPLAIN AST` 时,当其包含 `INTO OUTFILE` 等输出选项时格式不一致的问题。(关闭 [#82826](https://github.com/ClickHouse/ClickHouse/issues/82826)。[#82840](https://github.com/ClickHouse/ClickHouse/pull/82840)([Alexey Milovidov](https://github.com/alexey-milovidov))。) -* 修复了在不允许使用别名的上下文中,带别名的括号表达式格式不一致的问题。关闭 [#82836](https://github.com/ClickHouse/ClickHouse/issues/82836)。关闭 [#82837](https://github.com/ClickHouse/ClickHouse/issues/82837)。[#82867](https://github.com/ClickHouse/ClickHouse/pull/82867)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 在将聚合函数状态与 IPv4 相乘时使用正确的错误代码。修复 [#82817](https://github.com/ClickHouse/ClickHouse/issues/82817)。[#82818](https://github.com/ClickHouse/ClickHouse/pull/82818)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 修复文件系统缓存中的逻辑错误:“字节数为零但区间尚未结束”。 [#81868](https://github.com/ClickHouse/ClickHouse/pull/81868) ([Kseniia Sumarokova](https://github.com/kssenii)). -* 当 TTL 使行数减少时,重新计算 min-max 索引,以确保依赖该索引的算法(例如 `minmax_count_projection`)的正确性。解决了 [#77091](https://github.com/ClickHouse/ClickHouse/issues/77091)。[#77166](https://github.com/ClickHouse/ClickHouse/pull/77166)([Amos Bird](https://github.com/amosbird))。 -* 对于包含 `ORDER BY ... LIMIT BY ... LIMIT N` 组合的查询,当 ORDER BY 以 PartialSorting 方式执行时,计数器 `rows_before_limit_at_least` 现在反映的是被 LIMIT 子句消耗的行数,而不是被排序转换消耗的行数。[#78999](https://github.com/ClickHouse/ClickHouse/pull/78999)([Eduard Karacharov](https://github.com/korowa))。 -* 修复在基于 token/ngram 索引并使用包含交替且首个分支为非字面量的 regexp 正则表达式进行过滤时,过度跳过 granule 的问题。 [#79373](https://github.com/ClickHouse/ClickHouse/pull/79373) ([Eduard Karacharov](https://github.com/korowa)). -* 修复了 `<=>` 运算符与 Join 存储引擎配合使用时的逻辑错误,现在查询会返回正确的错误代码。[#80165](https://github.com/ClickHouse/ClickHouse/pull/80165) ([Vladimir Cherkasov](https://github.com/vdimir)). -* 修复在与 `remote` 系列函数一起使用时 `loop` 函数发生的崩溃。确保在 `loop(remote(...))` 中正确遵守 LIMIT 子句。[#80299](https://github.com/ClickHouse/ClickHouse/pull/80299)([Julia Kartseva](https://github.com/jkartseva))。 -* 修复 `to_utc_timestamp` 和 `from_utc_timestamp` 函数在处理 Unix 纪元(1970-01-01)之前以及最大日期(2106-02-07 06:28:15)之后的日期时的错误行为。现在,这些函数会分别将值正确地截断到纪元起始时间和最大日期。[#80498](https://github.com/ClickHouse/ClickHouse/pull/80498)([Surya Kant Ranjan](https://github.com/iit2009046))。 -* 对于某些使用并行副本执行的查询,发起端可以应用有序读取优化,但远程节点无法应用该优化。这样会导致并行副本协调器(在发起端)和远程节点使用不同的读取模式,从而造成逻辑错误。[#80652](https://github.com/ClickHouse/ClickHouse/pull/80652)([Igor Nikonov](https://github.com/devcrafter))。 -* 修复在物化投影时将列类型更改为 Nullable 时出现的逻辑错误。 [#80741](https://github.com/ClickHouse/ClickHouse/pull/80741) ([Pavel Kruglov](https://github.com/Avogar)). -* 修复在更新 TTL 时 `TTL GROUP BY` 中错误的 TTL 重新计算。 [#81222](https://github.com/ClickHouse/ClickHouse/pull/81222) ([Evgeniy Ulasik](https://github.com/H0uston)). -* 修复了 Parquet 布隆过滤器将类似 `WHERE function(key) IN (...)` 的条件错误地当作 `WHERE key IN (...)` 进行应用的问题。 [#81255](https://github.com/ClickHouse/ClickHouse/pull/81255) ([Michael Kolupaev](https://github.com/al13n321)). -* 修复了在合并过程中发生异常时 `Aggregator` 可能崩溃的问题。 [#81450](https://github.com/ClickHouse/ClickHouse/pull/81450) ([Nikita Taranov](https://github.com/nickitat)). -* 修复了 `InterpreterInsertQuery::extendQueryLogElemImpl`,在需要时(例如当名称包含 `-` 等特殊字符时)为数据库名和表名添加反引号。[#81528](https://github.com/ClickHouse/ClickHouse/pull/81528) ([Ilia Shvyrialkin](https://github.com/Harzu)). -* 修复在 `transform_null_in=1` 且左侧参数为 null、子查询结果为非可空时,`IN` 的执行问题。 [#81584](https://github.com/ClickHouse/ClickHouse/pull/81584) ([Pavel Kruglov](https://github.com/Avogar)). -* 在从现有表读取数据时执行 default/materialize 表达式期间,不再验证实验性/可疑类型。[#81618](https://github.com/ClickHouse/ClickHouse/pull/81618)([Pavel Kruglov](https://github.com/Avogar))。 -* 修复在合并期间于 TTL 表达式中使用字典时出现的 "Context has expired" 错误。[#81690](https://github.com/ClickHouse/ClickHouse/pull/81690) ([Azat Khuzhin](https://github.com/azat))。 -* 修正 `cast` 函数的单调性。[#81722](https://github.com/ClickHouse/ClickHouse/pull/81722) ([zoomxi](https://github.com/zoomxi))。 -* 修复在标量关联子查询处理过程中未读取所需列的问题。对应修复 [#81716](https://github.com/ClickHouse/ClickHouse/issues/81716)。[#81805](https://github.com/ClickHouse/ClickHouse/pull/81805)([Dmitry Novik](https://github.com/novikd))。 -* 在之前的版本中,服务器在处理对 `/js` 的请求时返回了过多的内容。此更改关闭了 [#61890](https://github.com/ClickHouse/ClickHouse/issues/61890)。[#81895](https://github.com/ClickHouse/ClickHouse/pull/81895)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 此前,`MongoDB` 表引擎定义可以在 `host:port` 参数中包含路径组件,但该路径组件会被静默忽略。`MongoDB` 集成会拒绝加载此类表。通过此修复,*我们允许加载此类表并忽略路径组件*,前提是 `MongoDB` 引擎具有五个参数,并使用参数中提供的数据库名。*注意:* 此修复不适用于新创建的表、使用 `mongo` 表函数的查询,以及字典数据源和命名集合。 [#81942](https://github.com/ClickHouse/ClickHouse/pull/81942) ([Vladimir Cherkasov](https://github.com/vdimir))。 -* 修复了在合并时发生异常时,`Aggregator` 中可能出现的崩溃问题。[#82022](https://github.com/ClickHouse/ClickHouse/pull/82022)([Nikita Taranov](https://github.com/nickitat))。 -* 修复了在查询中仅使用常量别名列时的过滤分析问题。修复了 [#79448](https://github.com/ClickHouse/ClickHouse/issues/79448)。[#82037](https://github.com/ClickHouse/ClickHouse/pull/82037)([Dmitry Novik](https://github.com/novikd))。 -* 修复在 TTL 中对 GROUP BY 和 SET 使用相同列时出现的 LOGICAL_ERROR 以及由此导致的崩溃。[#82054](https://github.com/ClickHouse/ClickHouse/pull/82054) ([Pablo Marcos](https://github.com/pamarcos))。 -* 修复在 secret 屏蔽过程中对 S3 表函数参数的校验,防止可能出现的 `LOGICAL_ERROR`,关闭 [#80620](https://github.com/ClickHouse/ClickHouse/issues/80620)。 [#82056](https://github.com/ClickHouse/ClickHouse/pull/82056) ([Vladimir Cherkasov](https://github.com/vdimir))。 -* 修复 Iceberg 中的数据竞争。 [#82088](https://github.com/ClickHouse/ClickHouse/pull/82088) ([Azat Khuzhin](https://github.com/azat)). -* 修复 `DatabaseReplicated::getClusterImpl`。如果 `hosts` 的第一个元素(或前几个元素)具有 `id == DROPPED_MARK`,且同一分片没有其他元素,则 `shards` 的第一个元素将是空向量,从而导致抛出 `std::out_of_range` 异常。 [#82093](https://github.com/ClickHouse/ClickHouse/pull/82093) ([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 -* 修复 `arraySimilarity` 中的复制粘贴错误,不再允许使用 `UInt32` 和 `Int32` 作为权重。更新测试和文档。[#82103](https://github.com/ClickHouse/ClickHouse/pull/82103)([Mikhail f. Shiryaev](https://github.com/Felixoid))。 -* 修复在 `WHERE` 条件下并使用 `IndexSet` 时,包含 `arrayJoin` 的查询出现的 `Not found column` 错误。[#82113](https://github.com/ClickHouse/ClickHouse/pull/82113) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). -* 修复 Glue Catalog 集成中的错误。现在 ClickHouse 可以读取包含嵌套数据类型且部分子列为 decimal 的表,例如:`map<string, decimal(9, 2)>`。修复了 [#81301](https://github.com/ClickHouse/ClickHouse/issues/81301)。[#82114](https://github.com/ClickHouse/ClickHouse/pull/82114)([alesapin](https://github.com/alesapin))。 -* 修复在 25.5 版本中于 [https://github.com/ClickHouse/ClickHouse/pull/79051](https://github.com/ClickHouse/ClickHouse/pull/79051) 中引入的 SummingMergeTree 性能退化问题。[#82130](https://github.com/ClickHouse/ClickHouse/pull/82130)([Pavel Kruglov](https://github.com/Avogar))。 -* 通过 URI 传递设置时,以最后一个值为准。[#82137](https://github.com/ClickHouse/ClickHouse/pull/82137) ([Sema Checherinda](https://github.com/CheSema)). -* 修复 Iceberg 中的“Context has expired”问题。[#82146](https://github.com/ClickHouse/ClickHouse/pull/82146) ([Azat Khuzhin](https://github.com/azat))。 -* 在服务器内存紧张时,修复远程查询可能出现的死锁。 [#82160](https://github.com/ClickHouse/ClickHouse/pull/82160) ([Kirill](https://github.com/kirillgarbar)). -* 修复了在将 `numericIndexedVectorPointwiseAdd`、`numericIndexedVectorPointwiseSubtract`、`numericIndexedVectorPointwiseMultiply`、`numericIndexedVectorPointwiseDivide` 函数应用于较大数值时出现的溢出问题。[#82165](https://github.com/ClickHouse/ClickHouse/pull/82165) ([Raufs Dunamalijevs](https://github.com/rienath))。 -* 修复表依赖中的一个 bug,该 bug 会导致物化视图遗漏 INSERT 查询。[#82222](https://github.com/ClickHouse/ClickHouse/pull/82222) ([Nikolay Degterinsky](https://github.com/evillique))。 -* 修复建议线程与主客户端线程之间可能出现的数据竞争。[#82233](https://github.com/ClickHouse/ClickHouse/pull/82233) ([Azat Khuzhin](https://github.com/azat)). -* 现在,ClickHouse 可以在模式演进后,从 Glue 目录读取 Iceberg 表。修复了 [#81272](https://github.com/ClickHouse/ClickHouse/issues/81272)。[#82301](https://github.com/ClickHouse/ClickHouse/pull/82301)([alesapin](https://github.com/alesapin))。 -* 修复对异步指标配置项 `asynchronous_metrics_update_period_s` 和 `asynchronous_heavy_metrics_update_period_s` 的验证。[#82310](https://github.com/ClickHouse/ClickHouse/pull/82310)([Bharat Nallan](https://github.com/bharatnc))。 -* 修复在包含多个 JOIN 的查询中解析匹配器时的逻辑错误,关闭 [#81969](https://github.com/ClickHouse/ClickHouse/issues/81969)。[#82421](https://github.com/ClickHouse/ClickHouse/pull/82421)([Vladimir Cherkasov](https://github.com/vdimir))。 -* 为 AWS ECS 令牌添加过期时间,以便可以重新加载。[#82422](https://github.com/ClickHouse/ClickHouse/pull/82422)([Konstantin Bogdanov](https://github.com/thevar1able))。 -* 修复了 `CASE` 函数在处理 `NULL` 参数时的一个缺陷。[#82436](https://github.com/ClickHouse/ClickHouse/pull/82436) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* 修复客户端中的数据竞争问题(通过不使用全局上下文)以及 `session_timezone` 覆盖问题(此前,如果在 `users.xml`/客户端参数中将 `session_timezone` 设为非空,而在查询上下文中设为空,则会错误地使用 `users.xml` 中的值;现在查询上下文将始终优先于全局上下文)。 [#82444](https://github.com/ClickHouse/ClickHouse/pull/82444) ([Azat Khuzhin](https://github.com/azat))。 -* 修复 external table engines 中禁用缓存缓冲区边界对齐的功能。该功能在 [https://github.com/ClickHouse/ClickHouse/pull/81868](https://github.com/ClickHouse/ClickHouse/pull/81868) 中被破坏。[#82493](https://github.com/ClickHouse/ClickHouse/pull/82493)([Kseniia Sumarokova](https://github.com/kssenii))。 -* 修复当键值存储引擎与经过类型转换的键进行 `JOIN` 时发生的崩溃。[#82497](https://github.com/ClickHouse/ClickHouse/pull/82497) ([Pervakov Grigorii](https://github.com/GrigoryPervakov))。 -* 修复命名集合的值在 logs/query_log 中被隐藏的问题。关闭 [#82405](https://github.com/ClickHouse/ClickHouse/issues/82405)。[#82510](https://github.com/ClickHouse/ClickHouse/pull/82510)([Kseniia Sumarokova](https://github.com/kssenii))。 -* 修复在终止会话时,由于 `user_id` 有时可能为空而导致日志记录崩溃的潜在问题。[#82513](https://github.com/ClickHouse/ClickHouse/pull/82513) ([Bharat Nallan](https://github.com/bharatnc)). -* 修复了在解析 Time 时可能导致 msan 问题的情况。对应修复:[#82477](https://github.com/ClickHouse/ClickHouse/issues/82477)。[#82514](https://github.com/ClickHouse/ClickHouse/pull/82514)([Yarik Briukhovetskyi](https://github.com/yariks5s))。 -* 禁止将 `threadpool_writer_pool_size` 设置为 0,以防止服务器操作发生阻塞。 [#82532](https://github.com/ClickHouse/ClickHouse/pull/82532) ([Bharat Nallan](https://github.com/bharatnc)). -* 修复在分析包含关联列的行策略表达式时出现的 `LOGICAL_ERROR`。[#82618](https://github.com/ClickHouse/ClickHouse/pull/82618) ([Dmitry Novik](https://github.com/novikd))。 -* 修复在 `enable_shared_storage_snapshot_in_query = 1` 时,`mergeTreeProjection` 表函数中对父元数据的不正确使用。这是针对 [#82634](https://github.com/ClickHouse/ClickHouse/issues/82634)。[#82638](https://github.com/ClickHouse/ClickHouse/pull/82638)([Amos Bird](https://github.com/amosbird))。 -* 函数 `trim{Left,Right,Both}` 现在支持 `FixedString(N)` 类型的输入字符串。例如,`SELECT trimBoth(toFixedString('abc', 3), 'ac')` 现在可以正常执行。[#82691](https://github.com/ClickHouse/ClickHouse/pull/82691) ([Robert Schulze](https://github.com/rschu1ze))。 -* 在 AzureBlobStorage 中,对于原生复制,我们会比较身份验证方法;如果在此过程中遇到异常,则更新代码以回退到读取并复制(即非原生复制)。 [#82693](https://github.com/ClickHouse/ClickHouse/pull/82693) ([Smita Kulkarni](https://github.com/SmitaRKulkarni)). -* 修复在元素为空时 `groupArraySample`/`groupArrayLast` 的反序列化行为(如果输入为空,反序列化可能会跳过部分二进制内容,这会在读取数据时导致数据损坏,并在 TCP 协议中出现 UNKNOWN_PACKET_FROM_SERVER)。这不会影响数值和日期时间类型。[#82763](https://github.com/ClickHouse/ClickHouse/pull/82763) ([Pedro Ferreira](https://github.com/PedroTadim)). -* 修复对空 `Memory` 表进行备份时的问题,该问题会在恢复备份时导致 `BACKUP_ENTRY_NOT_FOUND` 错误。 [#82791](https://github.com/ClickHouse/ClickHouse/pull/82791) ([Julia Kartseva](https://github.com/jkartseva)). -* 修复 union/intersect/except_default_mode 重写时的异常安全问题。关闭 [#82664](https://github.com/ClickHouse/ClickHouse/issues/82664)。[#82820](https://github.com/ClickHouse/ClickHouse/pull/82820)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 跟踪异步表加载作业的数量。如果存在正在运行的作业,则不要在 `TransactionLog::removeOldEntries` 中更新 `tail_ptr`。[#82824](https://github.com/ClickHouse/ClickHouse/pull/82824) ([Tuan Pham Anh](https://github.com/tuanpach))。 -* 修复 Iceberg 中的数据竞争。[#82841](https://github.com/ClickHouse/ClickHouse/pull/82841)([Azat Khuzhin](https://github.com/azat))。 -* 启用 `use_skip_indexes_if_final_exact_mode` 优化(在 25.6 中引入)时,可能会因为 `MergeTree` 引擎设置或数据分布而无法选择合适的候选范围。该问题现已修复。[#82879](https://github.com/ClickHouse/ClickHouse/pull/82879) ([Shankar Iyer](https://github.com/shankar-iyer)). -* 在从 AST 中解析类型为 SCRAM_SHA256_PASSWORD 的认证数据时设置盐值。 [#82888](https://github.com/ClickHouse/ClickHouse/pull/82888) ([Tuan Pham Anh](https://github.com/tuanpach))。 -* 在使用非缓存型 Database 实现时,对应表的元数据会在列返回且引用失效后被删除。[#82939](https://github.com/ClickHouse/ClickHouse/pull/82939)([buyval01](https://github.com/buyval01))。 -* 修复了在包含对使用 `Merge` 存储的表进行 JOIN 表达式的查询中修改过滤条件时出现的问题。修复了 [#82092](https://github.com/ClickHouse/ClickHouse/issues/82092)。[#82950](https://github.com/ClickHouse/ClickHouse/pull/82950)([Dmitry Novik](https://github.com/novikd))。 -* 修复 QueryMetricLog 中的 LOGICAL_ERROR:Mutex 不能为 NULL。[#82979](https://github.com/ClickHouse/ClickHouse/pull/82979)([Pablo Marcos](https://github.com/pamarcos))。 -* 修复了在同时使用格式说明符 `%f` 和可变长度格式说明符(例如 `%M`)时,函数 `formatDateTime` 输出结果不正确的问题。 [#83020](https://github.com/ClickHouse/ClickHouse/pull/83020) ([Robert Schulze](https://github.com/rschu1ze))。 -* 修复在启用 analyzer 后,当后续查询总是从视图中读取所有列时导致的性能下降问题。修复了 [#81718](https://github.com/ClickHouse/ClickHouse/issues/81718)。[#83036](https://github.com/ClickHouse/ClickHouse/pull/83036)([Dmitry Novik](https://github.com/novikd))。 -* 修复在只读磁盘上恢复备份时具有误导性的错误信息。[#83051](https://github.com/ClickHouse/ClickHouse/pull/83051)([Julia Kartseva](https://github.com/jkartseva))。 -* 在创建没有依赖关系的表时,不再检查循环依赖。这修复了在创建成千上万张表的场景中出现的性能下降问题,该问题是由 [https://github.com/ClickHouse/ClickHouse/pull/65405](https://github.com/ClickHouse/ClickHouse/pull/65405) 引入的。 [#83077](https://github.com/ClickHouse/ClickHouse/pull/83077)([Pavel Kruglov](https://github.com/Avogar))。 -* 修复了将负的 Time 值隐式读取到表中的问题,并改进了文档表述以避免产生歧义。[#83091](https://github.com/ClickHouse/ClickHouse/pull/83091) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* 不要在 `lowCardinalityKeys` 函数中使用共享字典中不相关的部分。[#83118](https://github.com/ClickHouse/ClickHouse/pull/83118) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* 修复在物化视图中使用子列时的回归。此修复关联:[#82784](https://github.com/ClickHouse/ClickHouse/issues/82784)。[#83221](https://github.com/ClickHouse/ClickHouse/pull/83221)([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 -* 修复在一次失败的 INSERT 之后连接被置于断开状态,从而导致客户端崩溃的问题。[#83253](https://github.com/ClickHouse/ClickHouse/pull/83253)([Azat Khuzhin](https://github.com/azat))。 -* 修复在计算包含空列的块大小时发生的崩溃。[#83271](https://github.com/ClickHouse/ClickHouse/pull/83271) ([Raúl Marín](https://github.com/Algunenano))。 -* 修复在 UNION 中使用 Variant 类型时可能发生的崩溃。 [#83295](https://github.com/ClickHouse/ClickHouse/pull/83295) ([Pavel Kruglov](https://github.com/Avogar)). -* 修复在 clickhouse-local 中执行不受支持的 SYSTEM 查询时出现的 LOGICAL_ERROR。 [#83333](https://github.com/ClickHouse/ClickHouse/pull/83333) ([Surya Kant Ranjan](https://github.com/iit2009046)). -* 修复 S3 客户端对 `no_sign_request` 的处理。它可用于显式地禁用对 S3 请求的签名。也可以通过基于 endpoint 的设置为特定 endpoint 进行配置。[#83379](https://github.com/ClickHouse/ClickHouse/pull/83379)([Antonio Andelic](https://github.com/antonio2368))。 -* 修复了在启用 CPU 调度的情况下,在高负载下执行且设置为 'max_threads=1' 的查询时可能发生的崩溃。[#83387](https://github.com/ClickHouse/ClickHouse/pull/83387) ([Fan Ziqi](https://github.com/f2quantum)). -* 修复在 CTE 定义引用另一个同名表表达式时触发的 `TOO_DEEP_SUBQUERIES` 异常。[#83413](https://github.com/ClickHouse/ClickHouse/pull/83413)([Dmitry Novik](https://github.com/novikd))。 -* 修复在执行 `REVOKE S3 ON system.*` 时的错误行为,该命令会错误地撤销 `*.*` 的 S3 权限。此更改修复了 [#83417](https://github.com/ClickHouse/ClickHouse/issues/83417)。[#83420](https://github.com/ClickHouse/ClickHouse/pull/83420)([pufit](https://github.com/pufit))。 -* 不要在不同查询之间共享 async_read_counters。 [#83423](https://github.com/ClickHouse/ClickHouse/pull/83423) ([Azat Khuzhin](https://github.com/azat)). -* 当子查询中包含 `FINAL` 时,禁用并行副本。[#83455](https://github.com/ClickHouse/ClickHouse/pull/83455) ([zoomxi](https://github.com/zoomxi)). -* 修复 `role_cache_expiration_time_seconds` 设置中的轻微整数溢出问题(问题 [#83374](https://github.com/ClickHouse/ClickHouse/issues/83374))。[#83461](https://github.com/ClickHouse/ClickHouse/pull/83461)([wushap](https://github.com/wushap))。 -* 修复了在 [https://github.com/ClickHouse/ClickHouse/pull/79963](https://github.com/ClickHouse/ClickHouse/pull/79963) 中引入的一个错误。在向带有 definer 的物化视图(MV)插入数据时,权限检查应基于该 definer 的权限授予(grants)。这修复了 [#79951](https://github.com/ClickHouse/ClickHouse/issues/79951)。[#83502](https://github.com/ClickHouse/ClickHouse/pull/83502)([pufit](https://github.com/pufit))。 -* 为 Iceberg 数组元素和 Iceberg map 值(包括其所有嵌套子字段)禁用基于范围的文件裁剪。 [#83520](https://github.com/ClickHouse/ClickHouse/pull/83520) ([Daniil Ivanik](https://github.com/divanik)). -* 修复在将其用作临时数据存储时可能出现的文件缓存未初始化错误。[#83539](https://github.com/ClickHouse/ClickHouse/pull/83539)([Bharat Nallan](https://github.com/bharatnc))。 -* Keeper 修复:在会话关闭时删除临时节点后,正确更新总 watch 数。[#83583](https://github.com/ClickHouse/ClickHouse/pull/83583) ([Antonio Andelic](https://github.com/antonio2368)). -* 修复与 max_untracked_memory 相关的不正确内存统计问题。 [#83607](https://github.com/ClickHouse/ClickHouse/pull/83607) ([Azat Khuzhin](https://github.com/azat)). -* 在某些边界情况下,带有 UNION ALL 的 INSERT SELECT 可能会触发空指针解引用。此更改关闭了 [#83618](https://github.com/ClickHouse/ClickHouse/issues/83618)。[#83643](https://github.com/ClickHouse/ClickHouse/pull/83643)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 不允许将 `max_insert_block_size` 设为 0,因为这可能导致逻辑错误。 [#83688](https://github.com/ClickHouse/ClickHouse/pull/83688) ([Bharat Nallan](https://github.com/bharatnc)). -* 修复当 `block_size_bytes=0` 时,`estimateCompressionRatio()` 中出现的无限循环问题。[#83704](https://github.com/ClickHouse/ClickHouse/pull/83704) ([Azat Khuzhin](https://github.com/azat)). -* 修复 `IndexUncompressedCacheBytes`/`IndexUncompressedCacheCells`/`IndexMarkCacheBytes`/`IndexMarkCacheFiles` 指标(此前它们被计入不带 `Cache` 前缀的指标中)。[#83730](https://github.com/ClickHouse/ClickHouse/pull/83730) ([Azat Khuzhin](https://github.com/azat))。 -* 修复在 `BackgroundSchedulePool` 关闭期间,由于从任务中 join 线程而可能导致的中止,并有望同时修复单元测试中的挂起问题。 [#83769](https://github.com/ClickHouse/ClickHouse/pull/83769) ([Azat Khuzhin](https://github.com/azat)). -* 引入向后兼容性设置,在发生名称冲突时允许新的分析器在 `WITH` 子句中引用外层别名。修复 [#82700](https://github.com/ClickHouse/ClickHouse/issues/82700)。[#83797](https://github.com/ClickHouse/ClickHouse/pull/83797)([Dmitry Novik](https://github.com/novikd))。 -* 修复在关闭过程中,由于在清理 library bridge 时对上下文进行递归加锁而导致的死锁。[#83824](https://github.com/ClickHouse/ClickHouse/pull/83824) ([Azat Khuzhin](https://github.com/azat)). - +* 修复在 TTL 包含 `materialize` 函数时格式不一致的问题。关闭 [#82828](https://github.com/ClickHouse/ClickHouse/issues/82828)。[#82831](https://github.com/ClickHouse/ClickHouse/pull/82831)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 修复在子查询中使用 `EXPLAIN AST` 且包含 `INTO OUTFILE` 等输出选项时的格式不一致问题。关闭 [#82826](https://github.com/ClickHouse/ClickHouse/issues/82826)。[#82840](https://github.com/ClickHouse/ClickHouse/pull/82840)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 修复在不允许使用别名的上下文中,对带别名括号表达式进行格式化时不一致的问题。关闭 [#82836](https://github.com/ClickHouse/ClickHouse/issues/82836)。关闭 [#82837](https://github.com/ClickHouse/ClickHouse/issues/82837)。[#82867](https://github.com/ClickHouse/ClickHouse/pull/82867)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 在将聚合函数状态与 IPv4 相乘时改为使用正确的错误代码。修复 [#82817](https://github.com/ClickHouse/ClickHouse/issues/82817)。[#82818](https://github.com/ClickHouse/ClickHouse/pull/82818)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 修复文件系统缓存中的逻辑错误:“字节数为零但范围尚未结束”。 [#81868](https://github.com/ClickHouse/ClickHouse/pull/81868) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 当 TTL 导致行数减少时,重新计算 min-max 索引,以确保依赖该索引的算法(例如 `minmax_count_projection`)的正确性。修复了 [#77091](https://github.com/ClickHouse/ClickHouse/issues/77091)。[#77166](https://github.com/ClickHouse/ClickHouse/pull/77166)([Amos Bird](https://github.com/amosbird))。 +* 对于包含 `ORDER BY ... LIMIT BY ... LIMIT N` 组合的查询,当 ORDER BY 以 PartialSorting 方式执行时,计数器 `rows_before_limit_at_least` 现在反映的是被 LIMIT 子句处理的行数,而不是被排序变换阶段处理的行数。[#78999](https://github.com/ClickHouse/ClickHouse/pull/78999)([Eduard Karacharov](https://github.com/korowa))。 +* 修复在通过 token/ngram 索引并使用包含交替且首个备选项为非字面量的正则表达式进行过滤时出现的 granule 过度跳过问题。[#79373](https://github.com/ClickHouse/ClickHouse/pull/79373) ([Eduard Karacharov](https://github.com/korowa)). +* 修复了 `<=>` 运算符在 Join 存储引擎中的逻辑错误,使查询现在能返回正确的错误代码。[#80165](https://github.com/ClickHouse/ClickHouse/pull/80165) ([Vladimir Cherkasov](https://github.com/vdimir)). +* 修复在与 `remote` 函数族一起使用时 `loop` 函数发生崩溃的问题。确保在 `loop(remote(...))` 中 LIMIT 子句能够被正确生效。[#80299](https://github.com/ClickHouse/ClickHouse/pull/80299)([Julia Kartseva](https://github.com/jkartseva))。 +* 修复 `to_utc_timestamp` 和 `from_utc_timestamp` 函数在处理 Unix 纪元开始时间(1970-01-01)之前以及超过最大日期(2106-02-07 06:28:15)的日期时的错误行为。现在,这些函数会将值分别正确地限制在纪元起始时间和最大日期。 [#80498](https://github.com/ClickHouse/ClickHouse/pull/80498) ([Surya Kant Ranjan](https://github.com/iit2009046)). +* 对于某些使用并行副本执行的查询,发起端可以应用有序读取优化,而远程节点无法应用该优化。这会导致发起端的并行副本协调器与远程节点使用不同的读取模式,从而产生逻辑错误。[#80652](https://github.com/ClickHouse/ClickHouse/pull/80652)([Igor Nikonov](https://github.com/devcrafter))。 +* 修复在物化投影中,当列类型更改为 Nullable 时出现的逻辑错误。 [#80741](https://github.com/ClickHouse/ClickHouse/pull/80741) ([Pavel Kruglov](https://github.com/Avogar)). +* 修复在更新 TTL 时,`TTL GROUP BY` 中 TTL 重新计算不正确的问题。[#81222](https://github.com/ClickHouse/ClickHouse/pull/81222)([Evgeniy Ulasik](https://github.com/H0uston))。 +* 修复了 Parquet 布隆过滤器错误地将形如 `WHERE function(key) IN (...)` 的条件当作 `WHERE key IN (...)` 来处理的问题。 [#81255](https://github.com/ClickHouse/ClickHouse/pull/81255) ([Michael Kolupaev](https://github.com/al13n321)). +* 修复了在合并过程中出现异常时,`Aggregator` 中可能发生的崩溃问题。[#81450](https://github.com/ClickHouse/ClickHouse/pull/81450) ([Nikita Taranov](https://github.com/nickitat))。 +* 修复了 `InterpreterInsertQuery::extendQueryLogElemImpl`,在需要时为数据库和表名添加反引号(例如,当名称包含诸如 `-` 之类的特殊字符时)。[#81528](https://github.com/ClickHouse/ClickHouse/pull/81528)([Ilia Shvyrialkin](https://github.com/Harzu))。 +* 修复在 `transform_null_in=1` 且左侧参数为 null、子查询结果为非可空时 `IN` 的执行行为。 [#81584](https://github.com/ClickHouse/ClickHouse/pull/81584) ([Pavel Kruglov](https://github.com/Avogar)). +* 在从现有表读取数据时,执行 default/materialize 表达式时不再校验实验性/可疑类型。[#81618](https://github.com/ClickHouse/ClickHouse/pull/81618) ([Pavel Kruglov](https://github.com/Avogar)). +* 修复在合并时,当在 TTL 表达式中使用 dict 时出现的 “Context has expired” 错误。[#81690](https://github.com/ClickHouse/ClickHouse/pull/81690) ([Azat Khuzhin](https://github.com/azat)). +* 修复 `cast` 函数的单调性。[#81722](https://github.com/ClickHouse/ClickHouse/pull/81722) ([zoomxi](https://github.com/zoomxi))。 +* 修复在标量关联子查询处理过程中未读取必需列的问题。修复 [#81716](https://github.com/ClickHouse/ClickHouse/issues/81716)。[#81805](https://github.com/ClickHouse/ClickHouse/pull/81805)([Dmitry Novik](https://github.com/novikd))。 +* 在之前的版本中,服务器对 `/js` 请求返回了过多的内容。已关闭 [#61890](https://github.com/ClickHouse/ClickHouse/issues/61890)。[#81895](https://github.com/ClickHouse/ClickHouse/pull/81895)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 此前,在 `MongoDB` 表引擎定义中,可以在 `host:port` 参数中包含路径部分,但该部分会被静默忽略。`mongodb` 集成会拒绝加载此类表。通过此次修复,*如果 `MongoDB` 引擎有五个参数,则允许加载此类表并忽略路径部分*,并使用参数中提供的数据库名称。*注意:* 此修复不适用于新创建的表、带有 `mongo` 表函数的查询,以及字典源和命名集合。 [#81942](https://github.com/ClickHouse/ClickHouse/pull/81942) ([Vladimir Cherkasov](https://github.com/vdimir))。 +* 修复了在合并过程中发生异常时 `Aggregator` 可能崩溃的问题。 [#82022](https://github.com/ClickHouse/ClickHouse/pull/82022) ([Nikita Taranov](https://github.com/nickitat)). +* 修复了在查询仅使用常量别名列时的过滤条件分析问题。修复了 [#79448](https://github.com/ClickHouse/ClickHouse/issues/79448)。[#82037](https://github.com/ClickHouse/ClickHouse/pull/82037)([Dmitry Novik](https://github.com/novikd))。 +* 修复在 TTL 中对 GROUP BY 和 SET 使用相同列时出现的 `LOGICAL_ERROR` 以及随后发生的崩溃。 [#82054](https://github.com/ClickHouse/ClickHouse/pull/82054) ([Pablo Marcos](https://github.com/pamarcos)). +* 修复在敏感信息掩码处理中对 S3 表函数参数的校验问题,防止可能出现的 `LOGICAL_ERROR`,关闭 [#80620](https://github.com/ClickHouse/ClickHouse/issues/80620)。[#82056](https://github.com/ClickHouse/ClickHouse/pull/82056) ([Vladimir Cherkasov](https://github.com/vdimir))。 +* 修复 Iceberg 中的数据竞争。[#82088](https://github.com/ClickHouse/ClickHouse/pull/82088) ([Azat Khuzhin](https://github.com/azat)). +* 修复 `DatabaseReplicated::getClusterImpl`。如果 `hosts` 中第一个元素(或前几个元素)的 `id == DROPPED_MARK`,且同一分片没有其他元素,那么 `shards` 的第一个元素将是一个空向量,从而导致抛出 `std::out_of_range` 异常。 [#82093](https://github.com/ClickHouse/ClickHouse/pull/82093) ([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 +* 修复 arraySimilarity 中的拷贝粘贴错误,禁用 UInt32 和 Int32 权重。更新测试和文档。 [#82103](https://github.com/ClickHouse/ClickHouse/pull/82103) ([Mikhail f. Shiryaev](https://github.com/Felixoid)). +* 修复在包含 `WHERE` 条件和 `IndexSet` 时使用 `arrayJoin` 的查询中出现的 `Not found column` 错误。[#82113](https://github.com/ClickHouse/ClickHouse/pull/82113)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 +* 修复 Glue Catalog 集成中的缺陷。现在 ClickHouse 可以读取包含嵌套数据类型的表,其中部分子列为 Decimal 类型,例如:`map<string, decimal(9, 2)>`。修复了 [#81301](https://github.com/ClickHouse/ClickHouse/issues/81301)。[#82114](https://github.com/ClickHouse/ClickHouse/pull/82114)([alesapin](https://github.com/alesapin))。 +* 修复 SummingMergeTree 在 25.5 版本中因 [https://github.com/ClickHouse/ClickHouse/pull/79051](https://github.com/ClickHouse/ClickHouse/pull/79051) 引入的性能下降问题。[#82130](https://github.com/ClickHouse/ClickHouse/pull/82130)([Pavel Kruglov](https://github.com/Avogar))。 +* 在通过 URI 传递设置时,将采用最后一个值。 [#82137](https://github.com/ClickHouse/ClickHouse/pull/82137) ([Sema Checherinda](https://github.com/CheSema))。 +* 修复 Iceberg 中 “Context has expired” 错误。[#82146](https://github.com/ClickHouse/ClickHouse/pull/82146)([Azat Khuzhin](https://github.com/azat))。 +* 在服务器内存吃紧时,修复远程查询可能出现的死锁问题。 [#82160](https://github.com/ClickHouse/ClickHouse/pull/82160) ([Kirill](https://github.com/kirillgarbar)). +* 修复了在将 `numericIndexedVectorPointwiseAdd`、`numericIndexedVectorPointwiseSubtract`、`numericIndexedVectorPointwiseMultiply`、`numericIndexedVectorPointwiseDivide` 这些函数应用于大数时出现的溢出问题。[#82165](https://github.com/ClickHouse/ClickHouse/pull/82165)([Raufs Dunamalijevs](https://github.com/rienath))。 +* 修复表依赖中的一个错误,该错误会导致物化视图无法捕获 `INSERT` 查询。 [#82222](https://github.com/ClickHouse/ClickHouse/pull/82222) ([Nikolay Degterinsky](https://github.com/evillique)). +* 修复建议线程与主客户端线程之间可能发生的数据竞争。 [#82233](https://github.com/ClickHouse/ClickHouse/pull/82233) ([Azat Khuzhin](https://github.com/azat)). +* 现在,在进行模式演进后,ClickHouse 可以从 Glue Catalog 中读取 Iceberg 表。修复 [#81272](https://github.com/ClickHouse/ClickHouse/issues/81272)。[#82301](https://github.com/ClickHouse/ClickHouse/pull/82301)([alesapin](https://github.com/alesapin))。 +* 修复异步指标配置项 `asynchronous_metrics_update_period_s` 和 `asynchronous_heavy_metrics_update_period_s` 的验证逻辑。[#82310](https://github.com/ClickHouse/ClickHouse/pull/82310)([Bharat Nallan](https://github.com/bharatnc))。 +* 修复在包含多个 JOIN 的查询中解析匹配器时出现的逻辑错误,关闭 [#81969](https://github.com/ClickHouse/ClickHouse/issues/81969)。[#82421](https://github.com/ClickHouse/ClickHouse/pull/82421)([Vladimir Cherkasov](https://github.com/vdimir))。 +* 为 AWS ECS 令牌添加过期时间,以支持重新加载。 [#82422](https://github.com/ClickHouse/ClickHouse/pull/82422) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* 修复了 `CASE` 函数处理 `NULL` 参数时的一个错误。[#82436](https://github.com/ClickHouse/ClickHouse/pull/82436) ([Yarik Briukhovetskyi](https://github.com/yariks5s))。 +* 修复了客户端中的数据竞争问题(通过不再使用全局 context),以及 `session_timezone` 覆盖逻辑(此前,如果在 `users.xml`/客户端选项中将 `session_timezone` 设置为非空,而在查询 context 中设置为空,则会错误地使用 `users.xml` 中的值;现在,查询 context 将始终优先于全局 context)。 [#82444](https://github.com/ClickHouse/ClickHouse/pull/82444) ([Azat Khuzhin](https://github.com/azat)). +* 修复 external table 引擎中缓存缓冲区禁用边界对齐的功能。在 [https://github.com/ClickHouse/ClickHouse/pull/81868](https://github.com/ClickHouse/ClickHouse/pull/81868) 中该功能被破坏。[#82493](https://github.com/ClickHouse/ClickHouse/pull/82493)([Kseniia Sumarokova](https://github.com/kssenii))。 +* 修复在将 key-value 存储与经类型转换的键进行 JOIN 时发生的崩溃。[#82497](https://github.com/ClickHouse/ClickHouse/pull/82497) ([Pervakov Grigorii](https://github.com/GrigoryPervakov))。 +* 修复在 logs/query_log 中隐藏命名集合值的逻辑。关闭 [#82405](https://github.com/ClickHouse/ClickHouse/issues/82405)。[#82510](https://github.com/ClickHouse/ClickHouse/pull/82510)([Kseniia Sumarokova](https://github.com/kssenii))。 +* 修复了在终止会话时,如果 `user_id` 为空,可能导致日志记录崩溃的问题。[#82513](https://github.com/ClickHouse/ClickHouse/pull/82513) ([Bharat Nallan](https://github.com/bharatnc))。 +* 修复了在解析 Time 时可能导致 msan 问题的情况。相关修复:[#82477](https://github.com/ClickHouse/ClickHouse/issues/82477)。[#82514](https://github.com/ClickHouse/ClickHouse/pull/82514)([Yarik Briukhovetskyi](https://github.com/yariks5s))。 +* 禁止将 `threadpool_writer_pool_size` 设置为 0,以避免服务器操作发生阻塞。[#82532](https://github.com/ClickHouse/ClickHouse/pull/82532)([Bharat Nallan](https://github.com/bharatnc))。 +* 修复在分析包含关联列的行策略表达式时出现的 `LOGICAL_ERROR`。 [#82618](https://github.com/ClickHouse/ClickHouse/pull/82618) ([Dmitry Novik](https://github.com/novikd)). +* 当 `enable_shared_storage_snapshot_in_query = 1` 时,修复 `mergeTreeProjection` 表函数中对父元数据的不正确使用。这对应于 [#82634](https://github.com/ClickHouse/ClickHouse/issues/82634)。[#82638](https://github.com/ClickHouse/ClickHouse/pull/82638)([Amos Bird](https://github.com/amosbird))。 +* 函数 `trim{Left,Right,Both}` 现已支持类型为 "FixedString(N)" 的输入字符串。例如,`SELECT trimBoth(toFixedString('abc', 3), 'ac')` 现在可以正常执行。[#82691](https://github.com/ClickHouse/ClickHouse/pull/82691)([Robert Schulze](https://github.com/rschu1ze))。 +* 在 AzureBlobStorage 中,对于 native copy,我们会比较身份验证方法;如果在此过程中遇到异常,代码已更新为回退到读取并复制(即非 native copy)。 [#82693](https://github.com/ClickHouse/ClickHouse/pull/82693) ([Smita Kulkarni](https://github.com/SmitaRKulkarni))。 +* 修复在元素为空时对 `groupArraySample`/`groupArrayLast` 的反序列化问题(当输入为空时,反序列化可能会跳过部分二进制数据,这会在读取数据期间导致数据损坏,并在 TCP 协议中触发 UNKNOWN_PACKET_FROM_SERVER)。这不会影响数值和日期时间类型。[#82763](https://github.com/ClickHouse/ClickHouse/pull/82763)([Pedro Ferreira](https://github.com/PedroTadim))。 +* 修复空 `Memory` 表备份的问题,该问题会导致在恢复备份时因 `BACKUP_ENTRY_NOT_FOUND` 错误而失败。 [#82791](https://github.com/ClickHouse/ClickHouse/pull/82791) ([Julia Kartseva](https://github.com/jkartseva)). +* 修复 `union/intersect/except_default_mode` 重写过程中的异常安全性。关闭 [#82664](https://github.com/ClickHouse/ClickHouse/issues/82664)。[#82820](https://github.com/ClickHouse/ClickHouse/pull/82820)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 跟踪异步表加载任务的数量。如果仍有任务在运行,则不要在 `TransactionLog::removeOldEntries` 中更新 `tail_ptr`。[#82824](https://github.com/ClickHouse/ClickHouse/pull/82824) ([Tuan Pham Anh](https://github.com/tuanpach))。 +* 修复 Iceberg 中的数据竞态。[#82841](https://github.com/ClickHouse/ClickHouse/pull/82841) ([Azat Khuzhin](https://github.com/azat)). +* 在设置 `use_skip_indexes_if_final_exact_mode` 优化项(在 25.6 中引入)时,可能会根据 `MergeTree` 引擎设置或数据分布而无法选取相关的候选范围。该问题现已修复。[#82879](https://github.com/ClickHouse/ClickHouse/pull/82879)([Shankar Iyer](https://github.com/shankar-iyer))。 +* 在从 AST 解析类型为 SCRAM_SHA256_PASSWORD 的认证数据时设置 salt。 [#82888](https://github.com/ClickHouse/ClickHouse/pull/82888) ([Tuan Pham Anh](https://github.com/tuanpach)). +* 在使用非缓存的 Database 实现时,在返回列并使引用失效后,对应表的元数据会被删除。[#82939](https://github.com/ClickHouse/ClickHouse/pull/82939) ([buyval01](https://github.com/buyval01))。 +* 修复在包含对使用 `Merge` 存储的表执行 JOIN 表达式的查询中,过滤条件被修改的问题。修复了 [#82092](https://github.com/ClickHouse/ClickHouse/issues/82092)。[#82950](https://github.com/ClickHouse/ClickHouse/pull/82950)([Dmitry Novik](https://github.com/novikd))。 +* 修复 QueryMetricLog 中的 LOGICAL_ERROR:Mutex cannot be NULL。 [#82979](https://github.com/ClickHouse/ClickHouse/pull/82979) ([Pablo Marcos](https://github.com/pamarcos))。 +* 修复了在同时使用格式说明符 `%f` 和可变长度格式说明符(例如 `%M`)时,函数 `formatDateTime` 输出不正确的问题。[#83020](https://github.com/ClickHouse/ClickHouse/pull/83020) ([Robert Schulze](https://github.com/rschu1ze))。 +* 修复在启用 analyzer 时,由于二级查询总是从视图读取所有列而导致的性能下降问题。修复了 [#81718](https://github.com/ClickHouse/ClickHouse/issues/81718)。[#83036](https://github.com/ClickHouse/ClickHouse/pull/83036)([Dmitry Novik](https://github.com/novikd))。 +* 修复在只读磁盘上恢复备份时的误导性错误信息。[#83051](https://github.com/ClickHouse/ClickHouse/pull/83051)([Julia Kartseva](https://github.com/jkartseva))。 +* 在创建没有依赖关系的表时不再检查循环依赖。该改动修复了在创建成千上万张表的用例中出现的性能退化问题,此问题是在 [https://github.com/ClickHouse/ClickHouse/pull/65405](https://github.com/ClickHouse/ClickHouse/pull/65405) 中引入的。[#83077](https://github.com/ClickHouse/ClickHouse/pull/83077)([Pavel Kruglov](https://github.com/Avogar))。 +* 修复了将负的 Time 值隐式读取到表中的问题,并澄清了相关文档的表述,避免产生混淆。 [#83091](https://github.com/ClickHouse/ClickHouse/pull/83091) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* 不要在 `lowCardinalityKeys` 函数中使用共享字典中不相关的部分。 [#83118](https://github.com/ClickHouse/ClickHouse/pull/83118) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 修复在物化视图中使用子列时出现的回归问题。此修复对应:[#82784](https://github.com/ClickHouse/ClickHouse/issues/82784)。[#83221](https://github.com/ClickHouse/ClickHouse/pull/83221)([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 +* 修复在错误的 INSERT 操作后连接被遗留在断开状态,从而导致客户端崩溃的问题。 [#83253](https://github.com/ClickHouse/ClickHouse/pull/83253) ([Azat Khuzhin](https://github.com/azat)). +* 修复在计算包含空列的块大小时发生的崩溃。 [#83271](https://github.com/ClickHouse/ClickHouse/pull/83271) ([Raúl Marín](https://github.com/Algunenano)). +* 修复在 UNION 中使用 Variant 类型时可能发生的崩溃。[#83295](https://github.com/ClickHouse/ClickHouse/pull/83295) ([Pavel Kruglov](https://github.com/Avogar))。 +* 修复在 clickhouse-local 中针对不支持的 SYSTEM 查询触发的 LOGICAL_ERROR。 [#83333](https://github.com/ClickHouse/ClickHouse/pull/83333) ([Surya Kant Ranjan](https://github.com/iit2009046)). +* 修复 S3 客户端中的 `no_sign_request`。它可用于显式禁止为 S3 请求签名,也可以通过基于 endpoint 的设置为特定 endpoint 单独配置。 [#83379](https://github.com/ClickHouse/ClickHouse/pull/83379) ([Antonio Andelic](https://github.com/antonio2368))。 +* 修复了在启用 CPU 调度的高负载场景下执行、且设置了 'max_threads=1' 的查询可能出现的崩溃问题。 [#83387](https://github.com/ClickHouse/ClickHouse/pull/83387) ([Fan Ziqi](https://github.com/f2quantum)). +* 修复当 CTE 定义引用另一个具有相同名称的表表达式时会抛出 `TOO_DEEP_SUBQUERIES` 异常的问题。[#83413](https://github.com/ClickHouse/ClickHouse/pull/83413)([Dmitry Novik](https://github.com/novikd))。 +* 修复了在执行 `REVOKE S3 ON system.*` 时的错误行为,该命令错误地撤销了 `*.*` 的 S3 权限。此修复解决了 [#83417](https://github.com/ClickHouse/ClickHouse/issues/83417)。[#83420](https://github.com/ClickHouse/ClickHouse/pull/83420)([pufit](https://github.com/pufit))。 +* 不要在不同查询之间共享 async_read_counters。[#83423](https://github.com/ClickHouse/ClickHouse/pull/83423) ([Azat Khuzhin](https://github.com/azat))。 +* 当子查询包含 FINAL 时,禁用并行副本。 [#83455](https://github.com/ClickHouse/ClickHouse/pull/83455) ([zoomxi](https://github.com/zoomxi))。 +* 修复在配置设置 `role_cache_expiration_time_seconds` 时的轻微整数溢出问题(issue [#83374](https://github.com/ClickHouse/ClickHouse/issues/83374))。[#83461](https://github.com/ClickHouse/ClickHouse/pull/83461)([wushap](https://github.com/wushap))。 +* 修复在 [https://github.com/ClickHouse/ClickHouse/pull/79963](https://github.com/ClickHouse/ClickHouse/pull/79963) 中引入的一个 Bug。当向带有定义者(definer)的物化视图(MV)插入数据时,权限检查应使用该定义者的权限。此更改修复了 [#79951](https://github.com/ClickHouse/ClickHouse/issues/79951)。[#83502](https://github.com/ClickHouse/ClickHouse/pull/83502)([pufit](https://github.com/pufit))。 +* 对 Iceberg 数组元素和 Iceberg map 值禁用基于范围的文件剪枝,包括其所有嵌套子字段。 [#83520](https://github.com/ClickHouse/ClickHouse/pull/83520) ([Daniil Ivanik](https://github.com/divanik)). +* 修复在将文件缓存作为临时数据存储使用时可能出现的 file cache not initialized 错误。[#83539](https://github.com/ClickHouse/ClickHouse/pull/83539) ([Bharat Nallan](https://github.com/bharatnc))。 +* Keeper 修复:在会话关闭时删除临时节点后,正确更新 watch 总数。 [#83583](https://github.com/ClickHouse/ClickHouse/pull/83583) ([Antonio Andelic](https://github.com/antonio2368)). +* 修复与 `max_untracked_memory` 相关的错误内存统计问题。 [#83607](https://github.com/ClickHouse/ClickHouse/pull/83607) ([Azat Khuzhin](https://github.com/azat)). +* 在某些极端情况下,带有 UNION ALL 的 INSERT SELECT 可能导致空指针解引用。此更改修复了 [#83618](https://github.com/ClickHouse/ClickHouse/issues/83618)。[#83643](https://github.com/ClickHouse/ClickHouse/pull/83643)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 禁止将 `max_insert_block_size` 设置为 0,因为这可能导致逻辑错误。 [#83688](https://github.com/ClickHouse/ClickHouse/pull/83688) ([Bharat Nallan](https://github.com/bharatnc)). +* 修复 `block_size_bytes=0` 时 `estimateCompressionRatio()` 中的无限循环问题。[#83704](https://github.com/ClickHouse/ClickHouse/pull/83704) ([Azat Khuzhin](https://github.com/azat))。 +* 修复 `IndexUncompressedCacheBytes`/`IndexUncompressedCacheCells`/`IndexMarkCacheBytes`/`IndexMarkCacheFiles` 指标(此前它们被纳入了不带 `Cache` 前缀的指标中)。[#83730](https://github.com/ClickHouse/ClickHouse/pull/83730) ([Azat Khuzhin](https://github.com/azat)). +* 修复在关闭 `BackgroundSchedulePool` 期间,因从任务中 join 线程而可能触发的 abort,并尽量避免(特别是在单元测试中)发生挂起。 [#83769](https://github.com/ClickHouse/ClickHouse/pull/83769) ([Azat Khuzhin](https://github.com/azat)). +* 引入向后兼容设置,在存在名称冲突的情况下,允许新的分析器在 `WITH` 子句中引用外层别名。修复 [#82700](https://github.com/ClickHouse/ClickHouse/issues/82700)。[#83797](https://github.com/ClickHouse/ClickHouse/pull/83797)([Dmitry Novik](https://github.com/novikd))。 +* 修复在关闭期间,由于在 library bridge 清理过程中对上下文进行递归加锁而导致的死锁问题。[#83824](https://github.com/ClickHouse/ClickHouse/pull/83824) ([Azat Khuzhin](https://github.com/azat))。 +#### 构建/测试/打包改进 -#### 构建 / 测试 / 打包改进 -* 为 ClickHouse 词法分析器构建一个精简的 C 库(10 KB)。这是为了解决 [#80977](https://github.com/ClickHouse/ClickHouse/issues/80977) 所需。[#81347](https://github.com/ClickHouse/ClickHouse/pull/81347)([Alexey Milovidov](https://github.com/alexey-milovidov))。为独立词法分析器添加测试,新增测试标签 `fasttest-only`。[#82472](https://github.com/ClickHouse/ClickHouse/pull/82472)([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy))。 -* 为 Nix 子模块输入添加检查。[#81691](https://github.com/ClickHouse/ClickHouse/pull/81691)([Konstantin Bogdanov](https://github.com/thevar1able))。 +* 为 ClickHouse 词法分析器构建一个最小的 C 库(大小约 10 KB)。这是 [#80977](https://github.com/ClickHouse/ClickHouse/issues/80977) 所需。[#81347](https://github.com/ClickHouse/ClickHouse/pull/81347)([Alexey Milovidov](https://github.com/alexey-milovidov))。为独立词法分析器添加测试,新增测试标签 `fasttest-only`。[#82472](https://github.com/ClickHouse/ClickHouse/pull/82472)([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy))。 +* 为 Nix 子模块的输入添加检查。[#81691](https://github.com/ClickHouse/ClickHouse/pull/81691)([Konstantin Bogdanov](https://github.com/thevar1able))。 * 修复在尝试在 localhost 上运行集成测试时可能出现的一系列问题。[#82135](https://github.com/ClickHouse/ClickHouse/pull/82135)([Oleg Doronin](https://github.com/dorooleg))。 -* 在 Mac 和 FreeBSD 上编译 SymbolIndex。(但它只会在 ELF 系统(Linux 和 FreeBSD)上工作)。[#82347](https://github.com/ClickHouse/ClickHouse/pull/82347)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 在 Mac 和 FreeBSD 上编译 SymbolIndex。(但它仅能在 ELF 系统上运行,即 Linux 和 FreeBSD)。[#82347](https://github.com/ClickHouse/ClickHouse/pull/82347)([Alexey Milovidov](https://github.com/alexey-milovidov))。 * 将 Azure SDK 升级到 v1.15.0。[#82747](https://github.com/ClickHouse/ClickHouse/pull/82747)([Smita Kulkarni](https://github.com/SmitaRKulkarni))。 -* 将 google-cloud-cpp 的 storage 模块添加到构建系统中。[#82881](https://github.com/ClickHouse/ClickHouse/pull/82881)([Pablo Marcos](https://github.com/pamarcos))。 -* 修改 clickhouse-server 的 `Dockerfile.ubuntu`,以满足 Docker Official Library 的要求。[#83039](https://github.com/ClickHouse/ClickHouse/pull/83039)([Mikhail f. Shiryaev](https://github.com/Felixoid))。 -* 作为对 [#83158](https://github.com/ClickHouse/ClickHouse/issues/83158) 的跟进,修复向 `curl clickhouse.com` 上传构建产物的问题。[#83463](https://github.com/ClickHouse/ClickHouse/pull/83463)([Mikhail f. Shiryaev](https://github.com/Felixoid))。 -* 在 `clickhouse/clickhouse-server` 以及官方 `clickhouse` 镜像中添加 `busybox` 可执行文件和安装工具。[#83735](https://github.com/ClickHouse/ClickHouse/pull/83735)([Mikhail f. Shiryaev](https://github.com/Felixoid))。 -* 新增对 `CLICKHOUSE_HOST` 环境变量的支持,用于指定 ClickHouse 服务器主机,与现有的 `CLICKHOUSE_USER` 和 `CLICKHOUSE_PASSWORD` 环境变量保持一致。这样可以在无需直接修改客户端或配置文件的情况下,更方便地完成配置。[#83659](https://github.com/ClickHouse/ClickHouse/pull/83659)([Doron David](https://github.com/dorki))。 +* 将 google-cloud-cpp 的存储模块添加到构建系统中。[#82881](https://github.com/ClickHouse/ClickHouse/pull/82881)([Pablo Marcos](https://github.com/pamarcos))。 +* 修改 clickhouse-server 的 `Dockerfile.ubuntu` 以满足 Docker 官方镜像库的要求。[#83039](https://github.com/ClickHouse/ClickHouse/pull/83039)([Mikhail f. Shiryaev](https://github.com/Felixoid))。 +* 作为 [#83158](https://github.com/ClickHouse/ClickHouse/issues/83158) 的后续修改,修复通过 `curl clickhouse.com` 上传构建产物的问题。[#83463](https://github.com/ClickHouse/ClickHouse/pull/83463)([Mikhail f. Shiryaev](https://github.com/Felixoid))。 +* 在 `clickhouse/clickhouse-server` 以及官方 `clickhouse` 镜像中添加 `busybox` 可执行文件并安装相关工具。[#83735](https://github.com/ClickHouse/ClickHouse/pull/83735)([Mikhail f. Shiryaev](https://github.com/Felixoid))。 +* 添加对 `CLICKHOUSE_HOST` 环境变量的支持,用于指定 ClickHouse 服务器主机地址,与现有的 `CLICKHOUSE_USER` 和 `CLICKHOUSE_PASSWORD` 环境变量保持一致。这样可以在不直接修改客户端或配置文件的情况下,更方便地进行配置。[#83659](https://github.com/ClickHouse/ClickHouse/pull/83659)([Doron David](https://github.com/dorki))。 +### ClickHouse 25.6 版本发布,2025-06-26 {#256} -### ClickHouse 发布版本 25.6,2025-06-26 {#256} - -#### 向后不兼容的变更 -* 之前,即使模式允许空匹配,函数 `countMatches` 在遇到第一个空匹配时也会停止计数。为解决这一问题,当出现空匹配时,`countMatches` 现在会向前推进一个字符并继续执行。希望保留旧行为的用户可以启用设置 `count_matches_stop_at_empty_match`。[#81676](https://github.com/ClickHouse/ClickHouse/pull/81676)([Elmi Ahmadov](https://github.com/ahmadov))。 -* 次要变更:强制 `backup_threads` 和 `restore_threads` 服务器设置为非零值。[#80224](https://github.com/ClickHouse/ClickHouse/pull/80224)([Raúl Marín](https://github.com/Algunenano))。 -* 次要变更:修复 `bitNot` 对 `String` 的处理,使其在内部内存表示中返回以零结尾的字符串。这不应影响任何对用户可见的行为,但作者希望强调这一更改。[#80791](https://github.com/ClickHouse/ClickHouse/pull/80791)([Azat Khuzhin](https://github.com/azat))。 - +#### 向后不兼容的更改 +* 之前,函数 `countMatches` 在遇到第一个空匹配时就会停止计数,即使模式允许空匹配。为解决这一问题,现在在出现空匹配时,`countMatches` 会先前进一个字符后再继续执行。希望保留旧行为的用户可以启用设置 `count_matches_stop_at_empty_match`。[#81676](https://github.com/ClickHouse/ClickHouse/pull/81676) ([Elmi Ahmadov](https://github.com/ahmadov)). +* 次要:强制将服务器设置项 `backup_threads` 和 `restore_threads` 设为非零值。[#80224](https://github.com/ClickHouse/ClickHouse/pull/80224) ([Raúl Marín](https://github.com/Algunenano)). +* 次要:修复 `String` 类型的 `bitNot` 在内部内存表示中会返回以零结尾字符串的问题。这不应影响任何用户可见的行为,不过作者希望强调这一变更。[#80791](https://github.com/ClickHouse/ClickHouse/pull/80791) ([Azat Khuzhin](https://github.com/azat)). #### 新功能 -* 新增数据类型:`Time` ([H]HH:MM:SS) 和 `Time64` ([H]HH:MM:SS[.fractional]),以及一些基本的类型转换函数和与其他数据类型交互的函数。为兼容现有函数 `toTime` 新增了相关设置。通过设置 `use_legacy_to_time`,目前仍保留旧的行为。[#81217](https://github.com/ClickHouse/ClickHouse/pull/81217) ([Yarik Briukhovetskyi](https://github.com/yariks5s))。支持 Time/Time64 之间的比较。[#80327](https://github.com/ClickHouse/ClickHouse/pull/80327) ([Yarik Briukhovetskyi](https://github.com/yariks5s))。 -* 一个新的 CLI 工具 [`chdig`](https://github.com/azat/chdig/) —— ClickHouse 的 TUI 界面(`top` 风格),已作为 ClickHouse 的一部分提供。[#79666](https://github.com/ClickHouse/ClickHouse/pull/79666)([Azat Khuzhin](https://github.com/azat))。 -* 在 `Atomic` 和 `Ordinary` 数据库引擎中支持 `disk` 设置,用于指定存储表元数据文件的磁盘。[#80546](https://github.com/ClickHouse/ClickHouse/pull/80546)([Tuan Pham Anh](https://github.com/tuanpach))。这使得可以从外部源附加数据库。 -* 一种新的 MergeTree 引擎类型,`CoalescingMergeTree` —— 该引擎在后台合并时取第一个非Null值。此更改解决了 [#78869](https://github.com/ClickHouse/ClickHouse/issues/78869)。[#79344](https://github.com/ClickHouse/ClickHouse/pull/79344)([scanhex12](https://github.com/scanhex12))。 -* 支持用于读取 WKB 的函数(WKB,全称 “Well-Known Binary”,是一种对各种几何类型进行二进制编码的格式,广泛用于 GIS 应用)。参见 [#43941](https://github.com/ClickHouse/ClickHouse/issues/43941)。[#80139](https://github.com/ClickHouse/ClickHouse/pull/80139)([scanhex12](https://github.com/scanhex12))。 -* 为工作负载添加了查询槽位调度功能,详情参见[工作负载调度](https://clickhouse.com/docs/operations/workload-scheduling#query_scheduling)。[#78415](https://github.com/ClickHouse/ClickHouse/pull/78415)([Sergei Trifonov](https://github.com/serxa))。 -* `timeSeries*` 辅助函数,用于在处理时序数据时加速某些场景:- 将数据重新采样到具有指定起始时间戳、结束时间戳和步长的时间网格上 - 计算 PromQL 风格的 `delta`、`rate`、`idelta` 和 `irate`。[#80590](https://github.com/ClickHouse/ClickHouse/pull/80590) ([Alexander Gololobov](https://github.com/davenger))。 -* 添加 `mapContainsValuesLike` / `mapContainsValues` / `mapExtractValuesLike` 函数以对 map 的值进行过滤,并在基于布隆过滤器的索引中支持这些函数。[#78171](https://github.com/ClickHouse/ClickHouse/pull/78171) ([UnamedRus](https://github.com/UnamedRus))。 -* 现在,设置约束可以指定一组禁止的值。[#78499](https://github.com/ClickHouse/ClickHouse/pull/78499) ([Bharat Nallan](https://github.com/bharatnc)). -* 新增了一个设置项 `enable_shared_storage_snapshot_in_query`,用于在单个查询中使所有子查询共享同一个存储快照。这样可以确保即使在查询中多次引用同一张表,也始终能从该表获得一致的读取结果。[#79471](https://github.com/ClickHouse/ClickHouse/pull/79471) ([Amos Bird](https://github.com/amosbird))。 +* 新增数据类型:`Time`([H]HH:MM:SS)和 `Time64`([H]HH:MM:SS[.fractional]),以及一些基本的类型转换函数和用于与其他数据类型交互的函数。添加了与现有函数 `toTime` 兼容的设置。当前将 `use_legacy_to_time` 设置为保留旧行为。[#81217](https://github.com/ClickHouse/ClickHouse/pull/81217)([Yarik Briukhovetskyi](https://github.com/yariks5s))。支持 Time/Time64 之间的比较。[#80327](https://github.com/ClickHouse/ClickHouse/pull/80327)([Yarik Briukhovetskyi](https://github.com/yariks5s))。 +* 一个新的 CLI 工具 [`chdig`](https://github.com/azat/chdig/) —— 面向 ClickHouse 的 TUI 界面(类似 `top`),现已作为 ClickHouse 的一部分提供。[#79666](https://github.com/ClickHouse/ClickHouse/pull/79666)([Azat Khuzhin](https://github.com/azat))。 +* 为 `Atomic` 和 `Ordinary` 数据库引擎增加对 `disk` 设置的支持,用于指定存储表元数据文件的磁盘。[#80546](https://github.com/ClickHouse/ClickHouse/pull/80546)([Tuan Pham Anh](https://github.com/tuanpach))。这使得可以从外部来源附加数据库。 +* 一种新的 MergeTree 类型,`CoalescingMergeTree` —— 该引擎在后台合并时取第一个非 Null 值。该更改关闭了 [#78869](https://github.com/ClickHouse/ClickHouse/issues/78869)。[#79344](https://github.com/ClickHouse/ClickHouse/pull/79344)([scanhex12](https://github.com/scanhex12))。 +* 支持读取 WKB(“Well-Known Binary”,一种在地理信息系统(GIS)应用中用于对各种几何类型进行二进制编码的格式)的函数。参见 [#43941](https://github.com/ClickHouse/ClickHouse/issues/43941)。[#80139](https://github.com/ClickHouse/ClickHouse/pull/80139)([scanhex12](https://github.com/scanhex12))。 +* 为工作负载新增了查询槽位调度功能,详情参见 [工作负载调度](https://clickhouse.com/docs/operations/workload-scheduling#query_scheduling)。[#78415](https://github.com/ClickHouse/ClickHouse/pull/78415)([Sergei Trifonov](https://github.com/serxa))。 +* 用于处理时序数据并在某些场景下加速操作的 `timeSeries*` 辅助函数:- 将数据按指定的起始时间戳、结束时间戳和步长重新采样到时间网格上 - 计算类 PromQL 的 `delta`、`rate`、`idelta` 和 `irate`。[#80590](https://github.com/ClickHouse/ClickHouse/pull/80590) ([Alexander Gololobov](https://github.com/davenger)). +* 添加 `mapContainsValuesLike`/`mapContainsValues`/`mapExtractValuesLike` 函数,以便根据 map 值进行过滤,并支持基于布隆过滤器的索引。[#78171](https://github.com/ClickHouse/ClickHouse/pull/78171) ([UnamedRus](https://github.com/UnamedRus))。 +* 现在,设置约束可以指定一组不允许的值。[#78499](https://github.com/ClickHouse/ClickHouse/pull/78499) ([Bharat Nallan](https://github.com/bharatnc))。 +* 添加了设置 `enable_shared_storage_snapshot_in_query`,用于在单个查询内让所有子查询共享同一个存储快照。这样即使在一个查询中多次引用同一张表,也能确保对该表的读取保持一致性。[#79471](https://github.com/ClickHouse/ClickHouse/pull/79471) ([Amos Bird](https://github.com/amosbird))。 * 支持将 `JSON` 列写入 `Parquet`,并直接从 `Parquet` 读取 `JSON` 列。[#79649](https://github.com/ClickHouse/ClickHouse/pull/79649) ([Nihal Z. Miaji](https://github.com/nihalzp))。 -* 为 `pointInPolygon` 添加对 `MultiPolygon` 的支持。[#79773](https://github.com/ClickHouse/ClickHouse/pull/79773) ([Nihal Z. Miaji](https://github.com/nihalzp))。 -* 通过 `deltaLakeLocal` 表函数,增加对查询挂载在本地文件系统上的 Delta 表的支持。[#79781](https://github.com/ClickHouse/ClickHouse/pull/79781) ([roykim98](https://github.com/roykim98))。 -* 新增设置项 `cast_string_to_date_time_mode`,用于在从 String 转换为 DateTime 时选择解析模式。[#80210](https://github.com/ClickHouse/ClickHouse/pull/80210)([Pavel Kruglov](https://github.com/Avogar))。例如,你可以将其设置为宽松解析模式(best effort)。 -* 新增 `bech32Encode` 和 `bech32Decode` 函数,用于处理 Bitcoin 的 Bech 算法(issue [#40381](https://github.com/ClickHouse/ClickHouse/issues/40381))。[#80239](https://github.com/ClickHouse/ClickHouse/pull/80239)([George Larionov](https://github.com/glarik))。 -* 添加用于分析 MergeTree 数据片段名称的 SQL 函数。[#80573](https://github.com/ClickHouse/ClickHouse/pull/80573) ([Mikhail Artemenko](https://github.com/Michicosun))。 -* 通过引入新的虚拟列 `_disk_name`,允许根据其所在磁盘对查询选中的数据部分进行过滤。 [#80650](https://github.com/ClickHouse/ClickHouse/pull/80650) ([tanner-bruce](https://github.com/tanner-bruce)). -* 添加一个包含嵌入式 Web 工具列表的入口页面。当由类似浏览器的用户代理发起请求时,将会打开该页面。[#81129](https://github.com/ClickHouse/ClickHouse/pull/81129) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 函数 `arrayFirst`、`arrayFirstIndex`、`arrayLast` 和 `arrayLastIndex` 会过滤掉过滤表达式返回的 NULL 值。在先前的版本中,不支持 Nullable 类型的过滤结果。修复了 [#81113](https://github.com/ClickHouse/ClickHouse/issues/81113)。[#81197](https://github.com/ClickHouse/ClickHouse/pull/81197)([Lennard Eijsackers](https://github.com/Blokje5))。 -* 现在可以使用 `USE DATABASE name` 来替代 `USE name`。 [#81307](https://github.com/ClickHouse/ClickHouse/pull/81307) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* 新增了系统表 `system.codecs`,用于查看可用的编解码器。(issue [#81525](https://github.com/ClickHouse/ClickHouse/issues/81525))。[#81600](https://github.com/ClickHouse/ClickHouse/pull/81600)([Jimmy Aguilar Mena](https://github.com/Ergus))。 -* 支持 `lag` 和 `lead` 窗口函数。解决 [#9887](https://github.com/ClickHouse/ClickHouse/issues/9887)。[#82108](https://github.com/ClickHouse/ClickHouse/pull/82108)([Dmitry Novik](https://github.com/novikd))。 -* 函数 `tokens` 现在支持一个名为 `split` 的新分词器,非常适合处理日志。[#80195](https://github.com/ClickHouse/ClickHouse/pull/80195) ([Robert Schulze](https://github.com/rschu1ze)). -* 在 `clickhouse-local` 中添加对 `--database` 参数的支持。你可以切换到之前创建的数据库。由此关闭了 [#44115](https://github.com/ClickHouse/ClickHouse/issues/44115)。[#81465](https://github.com/ClickHouse/ClickHouse/pull/81465)([Alexey Milovidov](https://github.com/alexey-milovidov))。 - - +* 为 `pointInPolygon` 添加 `MultiPolygon` 支持。 [#79773](https://github.com/ClickHouse/ClickHouse/pull/79773) ([Nihal Z. Miaji](https://github.com/nihalzp)). +* 添加对通过 `deltaLakeLocal` 表函数查询本地文件系统中挂载的 Delta 表的支持。[#79781](https://github.com/ClickHouse/ClickHouse/pull/79781) ([roykim98](https://github.com/roykim98))。 +* 新增设置 `cast_string_to_date_time_mode`,用于在从 String 转换为 DateTime 时选择解析模式。[#80210](https://github.com/ClickHouse/ClickHouse/pull/80210) ([Pavel Kruglov](https://github.com/Avogar))。例如,你可以将其设置为尽力而为模式。 +* 新增 `bech32Encode` 和 `bech32Decode` 函数,用于处理 Bitcoin 的 Bech 编码算法(问题 [#40381](https://github.com/ClickHouse/ClickHouse/issues/40381))。[#80239](https://github.com/ClickHouse/ClickHouse/pull/80239)([George Larionov](https://github.com/glarik))。 +* 添加用于分析 MergeTree 数据分片名称的 SQL 函数。[#80573](https://github.com/ClickHouse/ClickHouse/pull/80573) ([Mikhail Artemenko](https://github.com/Michicosun))。 +* 通过引入新的虚拟列 `_disk_name`,允许在查询时根据数据所在的磁盘对选中的数据部分进行过滤。[#80650](https://github.com/ClickHouse/ClickHouse/pull/80650) ([tanner-bruce](https://github.com/tanner-bruce)). +* 添加一个包含嵌入式 Web 工具列表的着陆页。当由类似浏览器的用户代理访问时,将会打开该页面。[#81129](https://github.com/ClickHouse/ClickHouse/pull/81129) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 函数 `arrayFirst`、`arrayFirstIndex`、`arrayLast` 和 `arrayLastIndex` 会过滤掉由过滤表达式返回的 NULL 值。在之前的版本中,不支持 Nullable 类型的过滤结果。修复了 [#81113](https://github.com/ClickHouse/ClickHouse/issues/81113)。[#81197](https://github.com/ClickHouse/ClickHouse/pull/81197)([Lennard Eijsackers](https://github.com/Blokje5))。 +* 现在可以使用 `USE DATABASE name` 来代替 `USE name`。[#81307](https://github.com/ClickHouse/ClickHouse/pull/81307)([Yarik Briukhovetskyi](https://github.com/yariks5s))。 +* 新增系统表 `system.codecs`,用于查看可用的编解码器。(问题 [#81525](https://github.com/ClickHouse/ClickHouse/issues/81525))。[#81600](https://github.com/ClickHouse/ClickHouse/pull/81600)([Jimmy Aguilar Mena](https://github.com/Ergus))。 +* 已支持 `lag` 和 `lead` 窗口函数。修复 [#9887](https://github.com/ClickHouse/ClickHouse/issues/9887)。[#82108](https://github.com/ClickHouse/ClickHouse/pull/82108)([Dmitry Novik](https://github.com/novikd))。 +* 函数 `tokens` 现在支持一种名为 `split` 的新分词器,非常适合日志处理。[#80195](https://github.com/ClickHouse/ClickHouse/pull/80195) ([Robert Schulze](https://github.com/rschu1ze))。 +* 在 `clickhouse-local` 中添加对 `--database` 参数的支持。你可以切换到此前创建的数据库。由此关闭了 [#44115](https://github.com/ClickHouse/ClickHouse/issues/44115)。[#81465](https://github.com/ClickHouse/ClickHouse/pull/81465)([Alexey Milovidov](https://github.com/alexey-milovidov))。 #### 实验性功能 -* 使用 ClickHouse Keeper 为 `Kafka2` 实现类似 Kafka 再均衡(rebalance)的逻辑。对于每个副本,我们支持两种类型的分区锁:永久锁和临时锁。副本会尽可能长时间地持有永久锁,在任意时刻,副本上的永久锁数量不超过 `all_topic_partitions / active_replicas_count`(其中 `all_topic_partitions` 是所有分区的数量,`active_replicas_count` 是活动副本的数量),如果超过,则该副本会释放一些分区。部分分区会被副本以临时锁的形式持有。副本上临时锁的最大数量会动态调整,以便给其他副本机会将一些分区获取为永久锁。在更新临时锁时,副本会释放所有临时锁并尝试重新获取其他一些分区。[#78726](https://github.com/ClickHouse/ClickHouse/pull/78726)([Daria Fomina](https://github.com/sinfillo))。 -* 对实验性文本索引的改进:通过键值对支持显式参数。目前支持的参数包括一个必需的 `tokenizer`,以及两个可选参数 `max_rows_per_postings_list` 和 `ngram_size`。[#80262](https://github.com/ClickHouse/ClickHouse/pull/80262)([Elmi Ahmadov](https://github.com/ahmadov))。 -* 之前,由于段 ID 是通过在磁盘上读写(`.gin_sid`)文件实时更新的,因此 `packed` 存储不支持全文索引。对于 `packed` 存储,不支持从未提交文件中读取值,这会导致问题。现在这一点已经不再是问题。[#80852](https://github.com/ClickHouse/ClickHouse/pull/80852)([Elmi Ahmadov](https://github.com/ahmadov))。 -* 实验性索引类型 `gin`(我并不喜欢这个名字,因为它是 PostgreSQL 开发者的一个内部笑话)已重命名为 `text`。现有的 `gin` 类型索引仍然可以加载,但在尝试将它们用于搜索时会抛出异常(并建议改用 `text` 索引)。[#80855](https://github.com/ClickHouse/ClickHouse/pull/80855)([Robert Schulze](https://github.com/rschu1ze))。 - +* 使用 ClickHouse Keeper 为 `Kafka2` 实现类似 Kafka rebalance 的逻辑。对于每个副本,我们支持两种类型的分区锁:永久锁和临时锁。副本会尽可能长时间持有永久锁,在任意时刻,副本上的永久锁数量不超过 `all_topic_partitions / active_replicas_count`(其中 `all_topic_partitions` 是所有分区的数量,`active_replicas_count` 是活动副本的数量),如果超过,则副本会释放部分分区。一些分区会被副本临时持有。副本上的临时锁最大数量会动态变化,以便给其他副本机会将部分分区获取为永久锁。在更新临时锁时,副本会释放其所有临时锁,并尝试重新获取其他分区。[#78726](https://github.com/ClickHouse/ClickHouse/pull/78726)([Daria Fomina](https://github.com/sinfillo))。 +* 对实验性的文本索引进行了改进:现在通过键值对形式支持显式参数。目前支持的参数包括一个必需的 `tokenizer`,以及两个可选参数 `max_rows_per_postings_list` 和 `ngram_size`。[#80262](https://github.com/ClickHouse/ClickHouse/pull/80262)([Elmi Ahmadov](https://github.com/ahmadov))。 +* 之前,`packed` 存储不支持全文索引,因为 segment ID 会通过在磁盘上读写(`.gin_sid`)文件进行实时更新。在使用 `packed` 存储的情况下,不支持从未提交的文件中读取值,这会导致问题。现在这一问题已经解决。[#80852](https://github.com/ClickHouse/ClickHouse/pull/80852)([Elmi Ahmadov](https://github.com/ahmadov))。 +* 类型为 `gin` 的实验性索引(我不喜欢这个名字,因为它是 PostgreSQL 黑客的一个内部玩笑)已被重命名为 `text`。现有的 `gin` 类型索引仍然可以加载,但在尝试在搜索中使用它们时会抛出异常(并建议改用 `text` 索引)。[#80855](https://github.com/ClickHouse/ClickHouse/pull/80855)([Robert Schulze](https://github.com/rschu1ze))。 #### 性能优化 -* 启用多投影过滤支持,允许在分片级过滤时使用多个投影。该改动解决了 [#55525](https://github.com/ClickHouse/ClickHouse/issues/55525)。这是继 [#78429](https://github.com/ClickHouse/ClickHouse/issues/78429) 之后,实现投影索引的第二步。[#80343](https://github.com/ClickHouse/ClickHouse/pull/80343)([Amos Bird](https://github.com/amosbird))。 -* 文件系统缓存默认使用 `SLRU` 缓存策略。[#75072](https://github.com/ClickHouse/ClickHouse/pull/75072) ([Kseniia Sumarokova](https://github.com/kssenii))。 -* 消除查询管线中 Resize 步骤的争用。[#77562](https://github.com/ClickHouse/ClickHouse/pull/77562) ([Zhiguo Zhou](https://github.com/ZhiguoZh)). -* 引入了一个选项,可将数据块的压缩/解压和序列化/反序列化从与网络连接关联的单个线程卸载到 pipeline 中的多个线程。由设置 `enable_parallel_blocks_marshalling` 控制。此功能应能加速在发起端与远程节点之间传输大量数据的分布式查询。[#78694](https://github.com/ClickHouse/ClickHouse/pull/78694)([Nikita Taranov](https://github.com/nickitat))。 -* 对各类布隆过滤器进行了性能优化。[来自 OpenHouse 大会的视频](https://www.youtube.com/watch?v=yIVz0NKwQvA\&pp=ygUQb3BlbmhvdXNlIG9wZW5haQ%3D%3D) [#79800](https://github.com/ClickHouse/ClickHouse/pull/79800)([Delyan Kratunov](https://github.com/dkratunov))。 -* 在 `UniqExactSet::merge` 中引入了当其中一个集合为空时的快速路径。另外,现在如果左侧集合是两级而右侧集合是单级,我们将不再对右侧集合执行转换为两级的操作。 [#79971](https://github.com/ClickHouse/ClickHouse/pull/79971) ([Nikita Taranov](https://github.com/nickitat))。 -* 在使用两级哈希表时,提高内存复用效率并减少缺页中断,从而加速 GROUP BY 的执行。[#80245](https://github.com/ClickHouse/ClickHouse/pull/80245) ([Jiebin Sun](https://github.com/jiebinn))。 -* 避免不必要的更新,减少查询条件缓存中的锁竞争。[#80247](https://github.com/ClickHouse/ClickHouse/pull/80247) ([Jiebin Sun](https://github.com/jiebinn))。 -* 对 `concatenateBlocks` 进行了简单的优化,应该也有助于提升并行哈希连接的性能。 [#80328](https://github.com/ClickHouse/ClickHouse/pull/80328) ([李扬](https://github.com/taiyang-li))。 -* 在从主键范围中选择标记范围时,如果主键被函数包裹,则无法使用二分查找。此 PR 改进了这一限制:当主键被始终单调的函数链包裹,或者当 RPN 中包含一个始终为真的元素时,仍然可以使用二分查找。修复 [#45536](https://github.com/ClickHouse/ClickHouse/issues/45536)。[#80597](https://github.com/ClickHouse/ClickHouse/pull/80597)([zoomxi](https://github.com/zoomxi))。 -* 提升 `Kafka` 引擎的关闭速度(在有多个 `Kafka` 表时移除额外的 3 秒延迟)。[#80796](https://github.com/ClickHouse/ClickHouse/pull/80796) ([Azat Khuzhin](https://github.com/azat))。 -* 异步插入:降低内存使用并提升插入查询性能。[#80972](https://github.com/ClickHouse/ClickHouse/pull/80972) ([Raúl Marín](https://github.com/Algunenano))。 -* 在日志表被禁用时不要对处理器进行性能分析。 [#81256](https://github.com/ClickHouse/ClickHouse/pull/81256) ([Raúl Marín](https://github.com/Algunenano))。这可以加速执行时间非常短的查询。 -* 当源数据与请求完全匹配时,加速 `toFixedString`。 [#81257](https://github.com/ClickHouse/ClickHouse/pull/81257) ([Raúl Marín](https://github.com/Algunenano)). -* 当用户不受配额限制时,不处理配额值。[#81549](https://github.com/ClickHouse/ClickHouse/pull/81549) ([Raúl Marín](https://github.com/Algunenano))。这可以加速对非常短查询的执行。 -* 修复了内存跟踪中的性能回归。[#81694](https://github.com/ClickHouse/ClickHouse/pull/81694) ([Michael Kolupaev](https://github.com/al13n321)). -* 改进分布式查询的分片键优化。[#78452](https://github.com/ClickHouse/ClickHouse/pull/78452) ([fhw12345](https://github.com/fhw12345)). -* 并行副本:如果所有读取任务都已分配给其他副本,则避免因未使用的慢副本而等待。[#80199](https://github.com/ClickHouse/ClickHouse/pull/80199) ([Igor Nikonov](https://github.com/devcrafter))。 -* 并行副本现在使用单独的连接超时时间,请参阅 `parallel_replicas_connect_timeout_ms` 设置。在此之前,`connect_timeout_with_failover_ms` / `connect_timeout_with_failover_secure_ms` 设置被用作并行副本查询的连接超时值(默认 1 秒)。[#80421](https://github.com/ClickHouse/ClickHouse/pull/80421)([Igor Nikonov](https://github.com/devcrafter))。 -* 在带日志功能的文件系统中,`mkdir` 会被写入到文件系统的日志中,并持久化到磁盘。在磁盘较慢的情况下,这可能会耗费较长时间。因此将其移出保留锁的作用域。[#81371](https://github.com/ClickHouse/ClickHouse/pull/81371) ([Kseniia Sumarokova](https://github.com/kssenii))。 -* 将 Iceberg manifest 文件的读取延后至首次读取查询时再进行。 [#81619](https://github.com/ClickHouse/ClickHouse/pull/81619) ([Daniil Ivanik](https://github.com/divanik)). -* 在适用时,允许将 `GLOBAL [NOT] IN` 谓词移动到 `PREWHERE` 子句中。 [#79996](https://github.com/ClickHouse/ClickHouse/pull/79996) ([Eduard Karacharov](https://github.com/korowa)). - - - - +* 启用多投影过滤功能,允许在分片级过滤时使用多个 projection。此更改解决了 [#55525](https://github.com/ClickHouse/ClickHouse/issues/55525)。这是实现 projection 索引的第二步,继 [#78429](https://github.com/ClickHouse/ClickHouse/issues/78429) 之后。[#80343](https://github.com/ClickHouse/ClickHouse/pull/80343)([Amos Bird](https://github.com/amosbird))。 +* 默认在文件系统缓存中使用 `SLRU` 缓存策略。[#75072](https://github.com/ClickHouse/ClickHouse/pull/75072)([Kseniia Sumarokova](https://github.com/kssenii))。 +* 移除查询管线中 Resize 步骤的争用。[#77562](https://github.com/ClickHouse/ClickHouse/pull/77562) ([Zhiguo Zhou](https://github.com/ZhiguoZh)). +* 引入了一个选项,可以将数据块的(解)压缩和(反)序列化从与网络连接绑定的单线程卸载到多个流水线线程中。通过设置 `enable_parallel_blocks_marshalling` 控制。此功能有望加速在发起端与远端节点之间传输大量数据的分布式查询。[#78694](https://github.com/ClickHouse/ClickHouse/pull/78694)([Nikita Taranov](https://github.com/nickitat))。 +* 对所有类型的布隆过滤器进行了性能优化。[来自 OpenHouse 大会的演讲视频](https://www.youtube.com/watch?v=yIVz0NKwQvA\&pp=ygUQb3BlbmhvdXNlIG9wZW5haQ%3D%3D) [#79800](https://github.com/ClickHouse/ClickHouse/pull/79800) ([Delyan Kratunov](https://github.com/dkratunov)). +* 在 `UniqExactSet::merge` 中新增了当其中一个集合为空时的优化路径。此外,现在如果左侧集合是两级结构而右侧是单级结构,将不再把右侧转换为两级结构。[#79971](https://github.com/ClickHouse/ClickHouse/pull/79971)([Nikita Taranov](https://github.com/nickitat))。 +* 在使用两级哈希表时提升内存复用效率并减少缺页错误,旨在加速 `GROUP BY`。 [#80245](https://github.com/ClickHouse/ClickHouse/pull/80245) ([Jiebin Sun](https://github.com/jiebinn)). +* 避免不必要的更新操作,减少查询条件缓存中的锁竞争。[#80247](https://github.com/ClickHouse/ClickHouse/pull/80247) ([Jiebin Sun](https://github.com/jiebinn))。 +* 对 `concatenateBlocks` 进行了一个简单优化,这可能也有助于并行哈希连接。[#80328](https://github.com/ClickHouse/ClickHouse/pull/80328) ([李扬](https://github.com/taiyang-li))。 +* 在从主键范围中选择 mark 范围时,如果主键被函数包裹,则无法使用二分查找。本 PR 放宽了这一限制:当主键被始终单调的函数链包裹时,或者当逆波兰表达式(RPN)中包含恒为真的元素时,仍然可以使用二分查找。关闭 [#45536](https://github.com/ClickHouse/ClickHouse/issues/45536)。[#80597](https://github.com/ClickHouse/ClickHouse/pull/80597)([zoomxi](https://github.com/zoomxi))。 +* 提高 `Kafka` 引擎的关闭速度(在存在多个 `Kafka` 表时取消额外的 3 秒延迟)。 [#80796](https://github.com/ClickHouse/ClickHouse/pull/80796) ([Azat Khuzhin](https://github.com/azat)). +* 异步插入:降低内存占用并提升插入查询性能。[#80972](https://github.com/ClickHouse/ClickHouse/pull/80972)([Raúl Marín](https://github.com/Algunenano))。 +* 当日志表被禁用时,不要对处理器进行性能分析。[#81256](https://github.com/ClickHouse/ClickHouse/pull/81256)([Raúl Marín](https://github.com/Algunenano))。这样可以加快非常短查询的执行速度。 +* 当源数据恰好满足请求要求时,加速 `toFixedString`。[#81257](https://github.com/ClickHouse/ClickHouse/pull/81257)([Raúl Marín](https://github.com/Algunenano))。 +* 如果用户不受限,则不处理配额值。[#81549](https://github.com/ClickHouse/ClickHouse/pull/81549)([Raúl Marín](https://github.com/Algunenano))。这能加速非常短的查询。 +* 修复了内存跟踪中的性能回归。 [#81694](https://github.com/ClickHouse/ClickHouse/pull/81694) ([Michael Kolupaev](https://github.com/al13n321)). +* 改进分布式查询中的分片键优化。 [#78452](https://github.com/ClickHouse/ClickHouse/pull/78452) ([fhw12345](https://github.com/fhw12345)). +* 并行副本:如果所有读取任务都已分配给其他副本,则避免因未使用的慢副本而阻塞等待。 [#80199](https://github.com/ClickHouse/ClickHouse/pull/80199) ([Igor Nikonov](https://github.com/devcrafter)). +* 并行副本现在使用单独的连接超时时间,请参阅 `parallel_replicas_connect_timeout_ms` 设置。在此之前,并行副本查询的连接超时时间使用的是 `connect_timeout_with_failover_ms`/`connect_timeout_with_failover_secure_ms` 设置(默认 1 秒)。[#80421](https://github.com/ClickHouse/ClickHouse/pull/80421)([Igor Nikonov](https://github.com/devcrafter))。 +* 在带有日志的文件系统中,`mkdir` 会被写入文件系统的日志,该日志会持久化到磁盘上。在磁盘较慢的情况下,这可能会花费较长时间。已将其移出保留锁的作用域。 [#81371](https://github.com/ClickHouse/ClickHouse/pull/81371) ([Kseniia Sumarokova](https://github.com/kssenii))。 +* 将 Iceberg manifest 文件的读取推迟到首次执行读取查询时再进行。 [#81619](https://github.com/ClickHouse/ClickHouse/pull/81619) ([Daniil Ivanik](https://github.com/divanik)). +* 允许在适用的情况下将 `GLOBAL [NOT] IN` 谓词移动到 `PREWHERE` 子句中。 [#79996](https://github.com/ClickHouse/ClickHouse/pull/79996) ([Eduard Karacharov](https://github.com/korowa)). #### 改进 -* `EXPLAIN SYNTAX` 现在使用新的分析器。它返回从 query tree 构建的 AST。新增选项 `query_tree_passes`,用于控制在将 query tree 转换为 AST 之前要执行的遍数。[#74536](https://github.com/ClickHouse/ClickHouse/pull/74536) ([Vladimir Cherkasov](https://github.com/vdimir))。 -* 在 Native 格式中为 Dynamic 和 JSON 实现扁平序列化,从而在序列化/反序列化 Dynamic 和 JSON 数据时无需使用诸如 Dynamic 的 shared variant、JSON 的 shared data 等特殊结构。可以通过设置 `output_format_native_use_flattened_dynamic_and_json_serialization` 来启用此序列化方式。该序列化方式可用于通过 TCP 协议在不同语言的客户端中更方便地支持 Dynamic 和 JSON。 [#80499](https://github.com/ClickHouse/ClickHouse/pull/80499) ([Pavel Kruglov](https://github.com/Avogar)). -* 在出现 `AuthenticationRequired` 错误后刷新 `S3` 凭证。[#77353](https://github.com/ClickHouse/ClickHouse/pull/77353)([Vitaly Baranov](https://github.com/vitlibar))。 -* 在 `system.asynchronous_metrics` 中新增了字典相关的指标:`DictionaryMaxUpdateDelay` —— 字典更新的最大延迟(秒);`DictionaryTotalFailedUpdates` —— 自上次所有字典成功加载以来在所有字典中的错误总数。 [#78175](https://github.com/ClickHouse/ClickHouse/pull/78175) ([Vlad](https://github.com/codeworse))。 -* 添加一条警告,提示那些可能是为保存损坏表而创建的数据库。 [#78841](https://github.com/ClickHouse/ClickHouse/pull/78841) ([János Benjamin Antal](https://github.com/antaljanosbenjamin))。 -* 在 `S3Queue` 和 `AzureQueue` 引擎中添加 `_time` 虚拟列。[#78926](https://github.com/ClickHouse/ClickHouse/pull/78926) ([Anton Ivashkin](https://github.com/ianton-ru)). -* 使控制在 CPU 过载时断开连接的设置支持热重载。 [#79052](https://github.com/ClickHouse/ClickHouse/pull/79052) ([Alexey Katsman](https://github.com/alexkats)). -* 为 Azure Blob 存储中的 plain 磁盘在 system.tables 中上报的数据路径添加容器前缀,使上报方式与 S3 和 GCP 保持一致。 [#79241](https://github.com/ClickHouse/ClickHouse/pull/79241) ([Julia Kartseva](https://github.com/jkartseva)). -* 现在,clickhouse-client 和 local 也支持使用 `param-`(连字符)以及 `param_`(下划线)形式的查询参数。此更改关闭了 [#63093](https://github.com/ClickHouse/ClickHouse/issues/63093)。[#79429](https://github.com/ClickHouse/ClickHouse/pull/79429)([Engel Danila](https://github.com/aaaengel))。 -* 在启用校验和的情况下,从本地复制数据到远程 S3 时,添加了关于带宽折扣的详细警告消息。[#79464](https://github.com/ClickHouse/ClickHouse/pull/79464) ([VicoWu](https://github.com/VicoWu)). -* 之前,当 `input_format_parquet_max_block_size = 0`(一个无效值)时,ClickHouse 会卡住。现在这一问题已修复。修复了问题 [#79394](https://github.com/ClickHouse/ClickHouse/issues/79394)。[#79601](https://github.com/ClickHouse/ClickHouse/pull/79601)([abashkeev](https://github.com/abashkeev))。 -* 为 `startup_scripts` 添加 `throw_on_error` 设置:当 `throw_on_error` 为 true 时,除非所有查询都成功完成,否则服务器不会启动。默认情况下,`throw_on_error` 为 false,以保留之前的行为。[#79732](https://github.com/ClickHouse/ClickHouse/pull/79732)([Aleksandr Musorin](https://github.com/AVMusorin))。 -* 支持在任意类型的 `http_handlers` 中添加 `http_response_headers`。[#79975](https://github.com/ClickHouse/ClickHouse/pull/79975) ([Andrey Zvonov](https://github.com/zvonand))。 -* 函数 `reverse` 现在支持 `Tuple` 数据类型。解决了 [#80053](https://github.com/ClickHouse/ClickHouse/issues/80053)。[#80083](https://github.com/ClickHouse/ClickHouse/pull/80083)([flynn](https://github.com/ucasfl))。 -* 解决 [#75817](https://github.com/ClickHouse/ClickHouse/issues/75817):支持从 `system.zookeeper` 表获取 `auxiliary_zookeepers` 数据。[#80146](https://github.com/ClickHouse/ClickHouse/pull/80146)([Nikolay Govorov](https://github.com/mrdimidium))。 -* 添加服务器 TCP 套接字相关的异步指标,以提升可观测性。关闭 issue [#80187](https://github.com/ClickHouse/ClickHouse/issues/80187)。[#80188](https://github.com/ClickHouse/ClickHouse/pull/80188)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 支持将 `anyLast_respect_nulls` 和 `any_respect_nulls` 用作 `SimpleAggregateFunction`。 [#80219](https://github.com/ClickHouse/ClickHouse/pull/80219) ([Diskein](https://github.com/Diskein)). -* 移除在复制型数据库中对 `adjustCreateQueryForBackup` 的不必要调用。[#80282](https://github.com/ClickHouse/ClickHouse/pull/80282)([Vitaly Baranov](https://github.com/vitlibar))。 -* 允许在 `clickhouse-local` 中使用位于 `--` 之后且不带等号的额外选项(例如 `-- --config.value='abc'`)。关闭 [#80292](https://github.com/ClickHouse/ClickHouse/issues/80292)。[#80293](https://github.com/ClickHouse/ClickHouse/pull/80293)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 在 `SHOW ... LIKE` 查询中高亮元字符。此更改修复了 [#80275](https://github.com/ClickHouse/ClickHouse/issues/80275)。[#80297](https://github.com/ClickHouse/ClickHouse/pull/80297)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 在 `clickhouse-local` 中使 SQL UDF 持久化。先前创建的函数将在启动时自动加载。此更改解决了 [#80085](https://github.com/ClickHouse/ClickHouse/issues/80085)。[#80300](https://github.com/ClickHouse/ClickHouse/pull/80300)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 修复 EXPLAIN 计划中关于预处理 DISTINCT 步骤的描述。[#80330](https://github.com/ClickHouse/ClickHouse/pull/80330) ([UnamedRus](https://github.com/UnamedRus))。 +* `EXPLAIN SYNTAX` 现在使用了新的分析器。它返回由查询树构建的 AST。新增选项 `query_tree_passes`,用于在将查询树转换为 AST 之前控制要执行的遍数。[#74536](https://github.com/ClickHouse/ClickHouse/pull/74536) ([Vladimir Cherkasov](https://github.com/vdimir))。 +* 在 Native 格式中为 Dynamic 和 JSON 实现了扁平化序列化,使在序列化/反序列化 Dynamic 和 JSON 数据时无需使用诸如 Dynamic 的 shared variant 和 JSON 的 shared data 等特殊结构。可以通过设置 `output_format_native_use_flattened_dynamic_and_json_serialization` 来启用此序列化方式。该序列化方式可用于便于不同语言的客户端通过 TCP 协议支持 Dynamic 和 JSON。 [#80499](https://github.com/ClickHouse/ClickHouse/pull/80499) ([Pavel Kruglov](https://github.com/Avogar)). +* 在出现 `AuthenticationRequired` 错误后刷新 `S3` 凭证。 [#77353](https://github.com/ClickHouse/ClickHouse/pull/77353) ([Vitaly Baranov](https://github.com/vitlibar)). +* 在 `system.asynchronous_metrics` 中添加了字典相关指标 — `DictionaryMaxUpdateDelay` — 字典更新的最大延迟时间(秒)。 — `DictionaryTotalFailedUpdates` — 自上次成功加载以来所有字典中的错误总次数。 [#78175](https://github.com/ClickHouse/ClickHouse/pull/78175) ([Vlad](https://github.com/codeworse)). +* 已添加关于可能为保存损坏的表而创建的数据库的警告。[#78841](https://github.com/ClickHouse/ClickHouse/pull/78841) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). +* 在 `S3Queue`、`AzureQueue` 引擎中添加 `_time` 虚拟列。[#78926](https://github.com/ClickHouse/ClickHouse/pull/78926) ([Anton Ivashkin](https://github.com/ianton-ru))。 +* 使用于控制 CPU 过载时连接中断的设置支持热重载。 [#79052](https://github.com/ClickHouse/ClickHouse/pull/79052) ([Alexey Katsman](https://github.com/alexkats)). +* 为 Azure Blob Storage 中的普通磁盘在 `system.tables` 中报告的数据路径添加容器前缀,使其与 S3 和 GCP 的报告保持一致。 [#79241](https://github.com/ClickHouse/ClickHouse/pull/79241) ([Julia Kartseva](https://github.com/jkartseva)). +* 现在,clickhouse-client 和 local 也支持将查询参数命名为 `param-`(短横线)以及 `param_`(下划线)。此更改解决了 [#63093](https://github.com/ClickHouse/ClickHouse/issues/63093)。[#79429](https://github.com/ClickHouse/ClickHouse/pull/79429)([Engel Danila](https://github.com/aaaengel))。 +* 在启用 checksum 时,从本地复制数据到远程 S3 会给出关于带宽折扣的更详细警告信息。[#79464](https://github.com/ClickHouse/ClickHouse/pull/79464) ([VicoWu](https://github.com/VicoWu))。 +* 之前,当 `input_format_parquet_max_block_size = 0`(无效值)时,ClickHouse 会卡住。现在这一问题已修复。关联 issue:[#79394](https://github.com/ClickHouse/ClickHouse/issues/79394)。关联 PR:[#79601](https://github.com/ClickHouse/ClickHouse/pull/79601)([abashkeev](https://github.com/abashkeev))。 +* 为 `startup_scripts` 添加 `throw_on_error` 设置:当 `throw_on_error` 为 true 时,除非所有查询都成功完成,否则服务器不会启动。默认情况下,`throw_on_error` 为 false,从而保持原有行为。[#79732](https://github.com/ClickHouse/ClickHouse/pull/79732) ([Aleksandr Musorin](https://github.com/AVMusorin))。 +* 支持在任何类型的 `http_handlers` 中添加 `http_response_headers`。[#79975](https://github.com/ClickHouse/ClickHouse/pull/79975) ([Andrey Zvonov](https://github.com/zvonand)). +* 函数 `reverse` 现已支持 `Tuple` 数据类型。解决了 [#80053](https://github.com/ClickHouse/ClickHouse/issues/80053)。[#80083](https://github.com/ClickHouse/ClickHouse/pull/80083)([flynn](https://github.com/ucasfl))。 +* 解决 [#75817](https://github.com/ClickHouse/ClickHouse/issues/75817):支持从 `system.zookeeper` 表中获取 `auxiliary_zookeepers` 数据。[#80146](https://github.com/ClickHouse/ClickHouse/pull/80146)([Nikolay Govorov](https://github.com/mrdimidium))。 +* 为服务器的 TCP 套接字添加异步指标,以提升可观测性。关闭了 [#80187](https://github.com/ClickHouse/ClickHouse/issues/80187)。[#80188](https://github.com/ClickHouse/ClickHouse/pull/80188)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 支持将 `anyLast_respect_nulls` 和 `any_respect_nulls` 作为 `SimpleAggregateFunction`。[#80219](https://github.com/ClickHouse/ClickHouse/pull/80219) ([Diskein](https://github.com/Diskein))。 +* 移除在复制数据库中不必要的 `adjustCreateQueryForBackup` 调用。 [#80282](https://github.com/ClickHouse/ClickHouse/pull/80282) ([Vitaly Baranov](https://github.com/vitlibar)). +* 允许在 `clickhouse-local` 中使用在 `--` 之后出现且不带等号的额外参数(例如 `-- --config.value='abc'`)。修复了 [#80292](https://github.com/ClickHouse/ClickHouse/issues/80292)。[#80293](https://github.com/ClickHouse/ClickHouse/pull/80293)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 在 `SHOW ... LIKE` 查询中突出显示元字符。修复了 [#80275](https://github.com/ClickHouse/ClickHouse/issues/80275)。[#80297](https://github.com/ClickHouse/ClickHouse/pull/80297)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 在 `clickhouse-local` 中让 SQL UDF 持久化。之前创建的函数将在启动时加载。解决了 [#80085](https://github.com/ClickHouse/ClickHouse/issues/80085)。[#80300](https://github.com/ClickHouse/ClickHouse/pull/80300)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 修复 EXPLAIN 计划中 preliminary DISTINCT 步骤的描述。[#80330](https://github.com/ClickHouse/ClickHouse/pull/80330) ([UnamedRus](https://github.com/UnamedRus))。 * 允许在 ODBC/JDBC 中使用命名集合。 [#80334](https://github.com/ClickHouse/ClickHouse/pull/80334) ([Andrey Zvonov](https://github.com/zvonand)). -* 用于统计只读和损坏磁盘数量的指标。在启动 DiskLocalCheckThread 时记录日志以指示其已启动。[#80391](https://github.com/ClickHouse/ClickHouse/pull/80391) ([VicoWu](https://github.com/VicoWu))。 -* 实现对带有投影的 `s3_plain_rewritable` 存储的支持。在之前的版本中,当对象被移动时,S3 中引用这些投影的元数据对象不会被更新。修复了 [#70258](https://github.com/ClickHouse/ClickHouse/issues/70258)。[#80393](https://github.com/ClickHouse/ClickHouse/pull/80393) ([Sav](https://github.com/sberss))。 -* `SYSTEM UNFREEZE` 命令将不再尝试在只读磁盘和一次性写入磁盘中查找数据部分。这解决了 [#80430](https://github.com/ClickHouse/ClickHouse/issues/80430)。[#80432](https://github.com/ClickHouse/ClickHouse/pull/80432)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 降低了与合并分片相关消息的日志级别。[#80476](https://github.com/ClickHouse/ClickHouse/pull/80476) ([Hans Krutzer](https://github.com/hkrutzer)). -* 更改 Iceberg 表分区剪枝的默认行为。[#80583](https://github.com/ClickHouse/ClickHouse/pull/80583)([Melvyn Peignon](https://github.com/melvynator))。 -* 为索引搜索算法的可观测性新增两个 ProfileEvents 事件:`IndexBinarySearchAlgorithm` 和 `IndexGenericExclusionSearchAlgorithm`。 [#80679](https://github.com/ClickHouse/ClickHouse/pull/80679) ([Pablo Marcos](https://github.com/pamarcos)). -* 在日志中不再针对旧内核记录关于不支持 `MADV_POPULATE_WRITE` 的警告(以避免日志污染)。 [#80704](https://github.com/ClickHouse/ClickHouse/pull/80704) ([Robert Schulze](https://github.com/rschu1ze)). -* 在 `TTL` 表达式中新增了对 `Date32` 和 `DateTime64` 的支持。[#80710](https://github.com/ClickHouse/ClickHouse/pull/80710) ([Andrey Zvonov](https://github.com/zvonand))。 -* 调整 `max_merge_delayed_streams_for_parallel_write` 的兼容性设置。[#80760](https://github.com/ClickHouse/ClickHouse/pull/80760) ([Azat Khuzhin](https://github.com/azat)). -* 修复一个导致崩溃的问题:如果在析构函数中尝试删除用于将临时数据溢写到磁盘的临时文件时抛出异常,程序可能会终止。 [#80776](https://github.com/ClickHouse/ClickHouse/pull/80776) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* 为 `SYSTEM SYNC REPLICA` 语句添加 `IF EXISTS` 修饰符。 [#80810](https://github.com/ClickHouse/ClickHouse/pull/80810) ([Raúl Marín](https://github.com/Algunenano)). -* 扩展关于 "Having zero bytes, but read range is not finished..." 的异常消息,在 `system.filesystem_cache` 中新增 `finished_download_time` 列。[#80849](https://github.com/ClickHouse/ClickHouse/pull/80849) ([Kseniia Sumarokova](https://github.com/kssenii))。 -* 在将 `indexes` 设置为 1 并配合 `EXPLAIN` 使用时,在输出中添加搜索算法部分。该部分会显示 "binary search" 或 "generic exclusion search"。 [#80881](https://github.com/ClickHouse/ClickHouse/pull/80881) ([Pablo Marcos](https://github.com/pamarcos)). -* 在 2024 年初,由于新的 analyzer 默认未启用,`prefer_column_name_to_alias` 在 MySQL handler 中被硬编码为 true。现在可以去掉这个硬编码。[#80916](https://github.com/ClickHouse/ClickHouse/pull/80916)([Yarik Briukhovetskyi](https://github.com/yariks5s))。 -* 现在,`system.iceberg_history` 会显示如 glue 或 iceberg rest 等 catalog 数据库的历史记录。同时,为了一致性,将 `system.iceberg_history` 中的 `table_name` 和 `database_name` 列分别重命名为 `table` 和 `database`。[#80975](https://github.com/ClickHouse/ClickHouse/pull/80975) ([alesapin](https://github.com/alesapin)). -* 为 `merge` 表函数启用只读模式,从而在使用它时不再需要 `CREATE TEMPORARY TABLE` 权限。[#80981](https://github.com/ClickHouse/ClickHouse/pull/80981) ([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 -* 改进对内存缓存的自检与观测(在 `system.metrics` 中公开缓存信息,以弥补 `system.asynchronouse_metrics` 的不完整)。在 `dashboard.html` 中添加内存缓存大小(字节数)。`VectorSimilarityIndexCacheSize`/`IcebergMetadataFilesCacheSize` 已重命名为 `VectorSimilarityIndexCacheBytes`/`IcebergMetadataFilesCacheBytes`。[#81023](https://github.com/ClickHouse/ClickHouse/pull/81023)([Azat Khuzhin](https://github.com/azat))。 -* 在从 `system.rocksdb` 读取时,忽略那些其引擎无法包含 `RocksDB` 表的数据库。[#81083](https://github.com/ClickHouse/ClickHouse/pull/81083) ([Pervakov Grigorii](https://github.com/GrigoryPervakov))。 -* 在 `clickhouse-local` 的配置文件中允许 `filesystem_caches` 和 `named_collections`。[#81105](https://github.com/ClickHouse/ClickHouse/pull/81105)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 修复 `INSERT` 查询中 `PARTITION BY` 的高亮显示。在此前的版本中,`PARTITION BY` 未被高亮为关键字。[#81106](https://github.com/ClickHouse/ClickHouse/pull/81106)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* Web UI 中的两个小改进:- 正确处理没有输出的查询,例如 `CREATE`、`INSERT`(之前这类查询会导致加载指示器一直旋转);- 双击表时,自动滚动到顶部。[#81131](https://github.com/ClickHouse/ClickHouse/pull/81131) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* `MemoryResidentWithoutPageCache` 指标以字节为单位,表示服务器进程使用的物理内存量(不包括用户空间页缓存)。当使用用户空间页缓存时,该指标能更准确地反映实际内存使用情况;当禁用用户空间页缓存时,该值等于 `MemoryResident`。[#81233](https://github.com/ClickHouse/ClickHouse/pull/81233) ([Jayme Bird](https://github.com/jaymebrd))。 -* 将客户端、本地服务器、keeper 客户端以及磁盘应用中手动记录的异常标记为已记录,避免被重复记录。[#81271](https://github.com/ClickHouse/ClickHouse/pull/81271) ([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 -* 现在,`use_skip_indexes_if_final` 和 `use_skip_indexes_if_final_exact_mode` 的默认值为 `True`。带有 `FINAL` 子句的查询现在在适用时会使用跳过索引来预筛选 granule,并且还会读取与匹配主键范围对应的任何额外 granule。需要此前那种近似/不精确结果行为的用户,可以在经过谨慎评估后将 `use_skip_indexes_if_final_exact_mode` 设置为 `FALSE`。[#81331](https://github.com/ClickHouse/ClickHouse/pull/81331) ([Shankar Iyer](https://github.com/shankar-iyer))。 -* 当 Web UI 中存在多个查询时,将运行光标所在的那个查询。作为 [#80977](https://github.com/ClickHouse/ClickHouse/issues/80977) 的延续。[#81354](https://github.com/ClickHouse/ClickHouse/pull/81354)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 此 PR 解决了在转换函数单调性检查中 `is_strict` 实现存在的问题。目前,一些转换函数(例如 `toFloat64(UInt32)` 和 `toDate(UInt8)`)在本应返回 true 时却错误地将 `is_strict` 标记为 false。[#81359](https://github.com/ClickHouse/ClickHouse/pull/81359)([zoomxi](https://github.com/zoomxi))。 -* 在检查 `KeyCondition` 是否匹配一个连续范围时,如果键被一串非严格函数包裹,则可能需要将 `Constraint::POINT` 转换为 `Constraint::RANGE`。例如:`toDate(event_time) = '2025-06-03'` 意味着 `event_time` 的取值范围为:['2025-06-03 00:00:00', '2025-06-04 00:00:00')。此 PR 修复了该行为。[#81400](https://github.com/ClickHouse/ClickHouse/pull/81400) ([zoomxi](https://github.com/zoomxi))。 -* 当指定 `--host` 或 `--port` 时,`clickhouse`/`ch` 别名将调用 `clickhouse-client` 而不是 `clickhouse-local`。这是对 [#79422](https://github.com/ClickHouse/ClickHouse/issues/79422) 的延续。关闭了 [#65252](https://github.com/ClickHouse/ClickHouse/issues/65252)。[#81509](https://github.com/ClickHouse/ClickHouse/pull/81509)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 现在我们已经有了 Keeper 响应时间分布数据,就可以针对指标优化直方图的桶划分了。 [#81516](https://github.com/ClickHouse/ClickHouse/pull/81516) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). -* 添加 profile 事件 `PageCacheReadBytes`。[#81742](https://github.com/ClickHouse/ClickHouse/pull/81742) ([Kseniia Sumarokova](https://github.com/kssenii))。 -* 修复文件系统缓存中的一个逻辑错误:"Having zero bytes but range is not finished"。[#81868](https://github.com/ClickHouse/ClickHouse/pull/81868) ([Kseniia Sumarokova](https://github.com/kssenii))。 - - - - - -#### 错误修复(官方稳定版本中用户可见的异常行为) - -* 修复在使用 SELECT EXCEPT 查询时的参数化视图。关闭 [#49447](https://github.com/ClickHouse/ClickHouse/issues/49447)。[#57380](https://github.com/ClickHouse/ClickHouse/pull/57380)([Nikolay Degterinsky](https://github.com/evillique))。 -* Analyzer:在 join 中对列类型进行提升后,修复列投影名称。关闭 [#63345](https://github.com/ClickHouse/ClickHouse/issues/63345)。[#63519](https://github.com/ClickHouse/ClickHouse/pull/63519)([Dmitry Novik](https://github.com/novikd))。 -* 修复了在启用 analyzer_compatibility_join_using_top_level_identifier 时,列名发生冲突情况下的逻辑错误。[#75676](https://github.com/ClickHouse/ClickHouse/pull/75676) ([Vladimir Cherkasov](https://github.com/vdimir)). -* 在启用 `allow_push_predicate_ast_for_distributed_subqueries` 时,修复谓词下推中对 CTE 的使用问题。修复了 [#75647](https://github.com/ClickHouse/ClickHouse/issues/75647)。修复了 [#79672](https://github.com/ClickHouse/ClickHouse/issues/79672)。[#77316](https://github.com/ClickHouse/ClickHouse/pull/77316)([Dmitry Novik](https://github.com/novikd))。 -* 修复了一个问题:当指定的副本不存在时,`SYSTEM SYNC REPLICA LIGHTWEIGHT 'foo'` 仍然会报告成功。现在,该命令会在尝试同步之前,正确验证指定副本是否在 Keeper 中存在。 [#78405](https://github.com/ClickHouse/ClickHouse/pull/78405) ([Jayme Bird](https://github.com/jaymebrd))。 -* 修复了一种非常特定情况下发生的崩溃:当在 `ON CLUSTER` 查询的 `CONSTRAINT` 部分中使用 `currentDatabase` 函数时会触发该问题。已关闭 [#78100](https://github.com/ClickHouse/ClickHouse/issues/78100)。[#79070](https://github.com/ClickHouse/ClickHouse/pull/79070)([pufit](https://github.com/pufit))。 -* 修复跨服务器查询中外部角色传递的问题。 [#79099](https://github.com/ClickHouse/ClickHouse/pull/79099) ([Andrey Zvonov](https://github.com/zvonand)). -* 建议在 `SingleValueDataGeneric` 中使用 `IColumn` 以替代 `Field`。这可以修复某些聚合函数(例如针对 `Dynamic/Variant/JSON` 类型的 `argMax`)返回值不正确的问题。[#79166](https://github.com/ClickHouse/ClickHouse/pull/79166) ([Pavel Kruglov](https://github.com/Avogar))。 -* 修复了在 Azure Blob Storage 上应用 `use_native_copy` 和 `allow_azure_native_copy` 设置的问题,并更新为仅在凭据匹配时才使用原生复制,解决了 [#78964](https://github.com/ClickHouse/ClickHouse/issues/78964)。[#79561](https://github.com/ClickHouse/ClickHouse/pull/79561)([Smita Kulkarni](https://github.com/SmitaRKulkarni))。 -* 修复在检查某列是否参与关联时,由该列来源作用域未知而产生的逻辑错误。修复 [#78183](https://github.com/ClickHouse/ClickHouse/issues/78183)。修复 [#79451](https://github.com/ClickHouse/ClickHouse/issues/79451)。[#79727](https://github.com/ClickHouse/ClickHouse/pull/79727)([Dmitry Novik](https://github.com/novikd))。 -* 修复在包含 ColumnConst 和 Analyzer 的 grouping sets 中出现错误结果的问题。[#79743](https://github.com/ClickHouse/ClickHouse/pull/79743)([Andrey Zvonov](https://github.com/zvonand))。 -* 修复在从分布式表读取数据时,由于本地副本滞后而导致本地分片结果重复的问题。 [#79761](https://github.com/ClickHouse/ClickHouse/pull/79761) ([Eduard Karacharov](https://github.com/korowa)). -* 修复符号位为负的 NaN 值的排序顺序。[#79847](https://github.com/ClickHouse/ClickHouse/pull/79847)([Pervakov Grigorii](https://github.com/GrigoryPervakov))。 -* 现在,GROUP BY ALL 不再将 GROUPING 部分纳入考虑。[#79915](https://github.com/ClickHouse/ClickHouse/pull/79915) ([Yarik Briukhovetskyi](https://github.com/yariks5s))。 -* 修复了 `TopK` / `TopKWeighted` 函数在状态合并时的错误,该错误会在容量尚未耗尽时仍然导致过大的误差值。[#79939](https://github.com/ClickHouse/ClickHouse/pull/79939) ([Joel Höner](https://github.com/athre0z)). -* 在 `azure_blob_storage` 对象存储中遵循 `readonly` 设置。 [#79954](https://github.com/ClickHouse/ClickHouse/pull/79954) ([Julia Kartseva](https://github.com/jkartseva)). -* 修复了在使用包含反斜杠转义字符的 `match(column, '^…')` 时出现的查询结果错误以及因内存耗尽导致的崩溃问题。[#79969](https://github.com/ClickHouse/ClickHouse/pull/79969)([filimonov](https://github.com/filimonov))。 -* 为数据湖禁用 Hive 分区,部分解决了 [https://github.com/issues/assigned?issue=ClickHouse%7CClickHouse%7CClickHouse%7C79937](https://github.com/issues/assigned?issue=ClickHouse%7CClickHouse%7C79937)。[#80005](https://github.com/ClickHouse/ClickHouse/pull/80005)([Daniil Ivanik](https://github.com/divanik))。 -* 带有 lambda 表达式的 skip 索引无法应用的问题已修复。修正了当索引定义中的高级函数与查询中使用的函数完全相同时的处理逻辑。 [#80025](https://github.com/ClickHouse/ClickHouse/pull/80025) ([Nikolai Kochetov](https://github.com/KochetovNicolai))。 -* 在副本上根据复制日志执行 ATTACH_PART 命令时,修正附加 part 过程中的元数据版本。 [#80038](https://github.com/ClickHouse/ClickHouse/pull/80038) ([Aleksei Filatov](https://github.com/aalexfvk)). -* 与其他函数不同,可执行用户定义函数(eUDF)的名称不会被添加到 `system.query_log` 表的 `used_functions` 列中。此 PR 使得在请求中使用 eUDF 时,会将该 eUDF 的名称添加到该列中。[#80073](https://github.com/ClickHouse/ClickHouse/pull/80073) ([Kyamran](https://github.com/nibblerenush))。 -* 修复 Arrow 格式在处理 LowCardinality(FixedString) 时的逻辑错误。 [#80156](https://github.com/ClickHouse/ClickHouse/pull/80156) ([Pavel Kruglov](https://github.com/Avogar)). +* 用于统计只读磁盘和损坏磁盘数量的指标。在 `DiskLocalCheckThread` 启动时记录标识性日志。 [#80391](https://github.com/ClickHouse/ClickHouse/pull/80391) ([VicoWu](https://github.com/VicoWu))。 +* 实现对带投影的 `s3_plain_rewritable` 存储的支持。在早期版本中,S3 中引用投影的元数据对象在被移动时不会更新。关闭 [#70258](https://github.com/ClickHouse/ClickHouse/issues/70258)。[#80393](https://github.com/ClickHouse/ClickHouse/pull/80393)([Sav](https://github.com/sberss))。 +* `SYSTEM UNFREEZE` 命令将不再尝试在只读和一次写入磁盘上查找数据分片。这解决了 [#80430](https://github.com/ClickHouse/ClickHouse/issues/80430)。[#80432](https://github.com/ClickHouse/ClickHouse/pull/80432)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 降低了关于合并 part 的日志消息级别。 [#80476](https://github.com/ClickHouse/ClickHouse/pull/80476) ([Hans Krutzer](https://github.com/hkrutzer)). +* 修改 Iceberg 表的分区裁剪默认行为。 [#80583](https://github.com/ClickHouse/ClickHouse/pull/80583) ([Melvyn Peignon](https://github.com/melvynator)). +* 为索引搜索算法的可观测性新增两个 ProfileEvents:`IndexBinarySearchAlgorithm` 和 `IndexGenericExclusionSearchAlgorithm`。[#80679](https://github.com/ClickHouse/ClickHouse/pull/80679)([Pablo Marcos](https://github.com/pamarcos))。 +* 不再在日志中针对旧内核不支持 `MADV_POPULATE_WRITE` 进行抱怨(以避免日志污染)。[#80704](https://github.com/ClickHouse/ClickHouse/pull/80704) ([Robert Schulze](https://github.com/rschu1ze))。 +* 在 `TTL` 表达式中新增了对 `Date32` 和 `DateTime64` 的支持。[#80710](https://github.com/ClickHouse/ClickHouse/pull/80710) ([Andrey Zvonov](https://github.com/zvonand)). +* 调整 `max_merge_delayed_streams_for_parallel_write` 的兼容性设置。 [#80760](https://github.com/ClickHouse/ClickHouse/pull/80760) ([Azat Khuzhin](https://github.com/azat)). +* 修复崩溃问题:如果在析构函数中尝试删除临时文件(用于将临时数据溢写到磁盘)时抛出异常,程序可能会终止。 [#80776](https://github.com/ClickHouse/ClickHouse/pull/80776) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 为 `SYSTEM SYNC REPLICA` 添加 `IF EXISTS` 修饰符。 [#80810](https://github.com/ClickHouse/ClickHouse/pull/80810) ([Raúl Marín](https://github.com/Algunenano))。 +* 完善关于“Having zero bytes, but read range is not finished...”的异常消息,在 `system.filesystem_cache` 中新增 `finished_download_time` 列。 [#80849](https://github.com/ClickHouse/ClickHouse/pull/80849) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 在与索引一起使用且 indexes = 1 时,为 `EXPLAIN` 输出新增搜索算法部分。该部分会显示 “binary search” 或 “generic exclusion search” 之一。[#80881](https://github.com/ClickHouse/ClickHouse/pull/80881) ([Pablo Marcos](https://github.com/pamarcos))。 +* 在 2024 年初,由于新分析器默认未启用,`prefer_column_name_to_alias` 在 MySQL 处理器中被硬编码为 true。现在,可以去除该硬编码。[#80916](https://github.com/ClickHouse/ClickHouse/pull/80916)([Yarik Briukhovetskyi](https://github.com/yariks5s))。 +* 现在,`system.iceberg_history` 会显示 glue 或 iceberg rest 等 catalog 数据库的历史记录。同时,为保持一致性,将 `system.iceberg_history` 中的 `table_name` 和 `database_name` 列重命名为 `table` 和 `database`。[#80975](https://github.com/ClickHouse/ClickHouse/pull/80975) ([alesapin](https://github.com/alesapin)). +* 为 `merge` 表函数启用只读模式,从而在使用该函数时无需授予 `CREATE TEMPORARY TABLE` 权限。 [#80981](https://github.com/ClickHouse/ClickHouse/pull/80981) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). +* 更好地观测内存缓存(在 `system.metrics` 中暴露缓存信息,以替代不完整的 `system.asynchronouse_metrics`)。在 `dashboard.html` 中新增内存缓存大小显示(以字节为单位)。`VectorSimilarityIndexCacheSize`/`IcebergMetadataFilesCacheSize` 已重命名为 `VectorSimilarityIndexCacheBytes`/`IcebergMetadataFilesCacheBytes`。[#81023](https://github.com/ClickHouse/ClickHouse/pull/81023)([Azat Khuzhin](https://github.com/azat))。 +* 在从 `system.rocksdb` 读取时,忽略引擎不支持 `RocksDB` 表的数据库。[#81083](https://github.com/ClickHouse/ClickHouse/pull/81083) ([Pervakov Grigorii](https://github.com/GrigoryPervakov))。 +* 允许在 `clickhouse-local` 的配置文件中配置 `filesystem_caches` 和 `named_collections`。 [#81105](https://github.com/ClickHouse/ClickHouse/pull/81105) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* 修复 `INSERT` 查询中 `PARTITION BY` 的高亮显示。在早期版本中,`PARTITION BY` 不会作为关键字高亮显示。[#81106](https://github.com/ClickHouse/ClickHouse/pull/81106)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* Web UI 中的两个小改进:- 正确处理没有输出的查询,例如 `CREATE`、`INSERT`(此前,这类查询会导致加载图标一直无限旋转);- 双击某个表时,自动滚动到顶部。[#81131](https://github.com/ClickHouse/ClickHouse/pull/81131)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* `MemoryResidentWithoutPageCache` 指标表示服务器进程使用的物理内存用量(不包括用户空间页缓存),单位为字节。在使用用户空间页缓存时,该指标可以更准确地反映实际内存使用情况。当用户空间页缓存被禁用时,该值等于 `MemoryResident`。[#81233](https://github.com/ClickHouse/ClickHouse/pull/81233)([Jayme Bird](https://github.com/jaymebrd))。 +* 将客户端、本地服务器、Keeper 客户端和 disks 应用中手动记录的异常标记为“已记录”,以避免在日志中重复记录。 [#81271](https://github.com/ClickHouse/ClickHouse/pull/81271) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). +* `use_skip_indexes_if_final` 和 `use_skip_indexes_if_final_exact_mode` 的默认值现在为 `True`。带有 `FINAL` 子句的查询现在会使用跳过索引(如适用)来初步筛选数据块(granule),并读取匹配主键范围所对应的所有额外数据块(granule)。如果用户需要沿用之前近似/不精确结果的行为,在经过仔细评估后可以将 `use_skip_indexes_if_final_exact_mode` 设置为 `FALSE`。[#81331](https://github.com/ClickHouse/ClickHouse/pull/81331)([Shankar Iyer](https://github.com/shankar-iyer))。 +* 当在 Web UI 中有多个查询时,将会运行光标所在的那个查询。作为对 [#80977](https://github.com/ClickHouse/ClickHouse/issues/80977) 的延续。[#81354](https://github.com/ClickHouse/ClickHouse/pull/81354)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 此 PR 解决了在转换函数单调性检查中 `is_strict` 实现相关的问题。目前,一些转换函数(例如 `toFloat64(UInt32)` 和 `toDate(UInt8)`)在本应返回 `is_strict` 为 true 时,却错误地返回为 false。 [#81359](https://github.com/ClickHouse/ClickHouse/pull/81359) ([zoomxi](https://github.com/zoomxi))。 +* 在检查 `KeyCondition` 是否匹配一个连续范围时,如果键被非严格函数链包裹,则可能需要将 `Constraint::POINT` 转换为 `Constraint::RANGE`。例如:`toDate(event_time) = '2025-06-03'` 意味着 `event_time` 的取值范围为:['2025-06-03 00:00:00', '2025-06-04 00:00:00')。此 PR 修复了这一行为。[#81400](https://github.com/ClickHouse/ClickHouse/pull/81400) ([zoomxi](https://github.com/zoomxi))。 +* 如果指定了 `--host` 或 `--port`,`clickhouse`/`ch` 别名将调用 `clickhouse-client`,而不是 `clickhouse-local`。[#79422](https://github.com/ClickHouse/ClickHouse/issues/79422) 的后续。关闭问题 [#65252](https://github.com/ClickHouse/ClickHouse/issues/65252)。[#81509](https://github.com/ClickHouse/ClickHouse/pull/81509)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 现在我们已经获取了 keeper 响应时间分布数据,就可以对指标用的直方图桶进行调优。[#81516](https://github.com/ClickHouse/ClickHouse/pull/81516) ([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 +* 添加 profile 事件 `PageCacheReadBytes`。 [#81742](https://github.com/ClickHouse/ClickHouse/pull/81742) ([Kseniia Sumarokova](https://github.com/kssenii))。 +* 修复文件系统缓存中的逻辑错误:“Having zero bytes but range is not finished”。[#81868](https://github.com/ClickHouse/ClickHouse/pull/81868)([Kseniia Sumarokova](https://github.com/kssenii))。 + +#### Bug 修复(在官方稳定版中对用户可见的错误行为) + +* 修复参数化视图在使用 SELECT EXCEPT 查询时的问题。关闭 [#49447](https://github.com/ClickHouse/ClickHouse/issues/49447)。[#57380](https://github.com/ClickHouse/ClickHouse/pull/57380)([Nikolay Degterinsky](https://github.com/evillique))。 +* Analyzer:修复在 join 中列类型提升后列投影名称不正确的问题。关闭 [#63345](https://github.com/ClickHouse/ClickHouse/issues/63345)。[#63519](https://github.com/ClickHouse/ClickHouse/pull/63519) ([Dmitry Novik](https://github.com/novikd))。 +* 修复了在启用 analyzer_compatibility_join_using_top_level_identifier 且发生列名冲突时的逻辑错误。[#75676](https://github.com/ClickHouse/ClickHouse/pull/75676) ([Vladimir Cherkasov](https://github.com/vdimir))。 +* 在启用 `allow_push_predicate_ast_for_distributed_subqueries` 时,修复下推谓词中对 CTE 的使用方式。修复 [#75647](https://github.com/ClickHouse/ClickHouse/issues/75647)。修复 [#79672](https://github.com/ClickHouse/ClickHouse/issues/79672)。[#77316](https://github.com/ClickHouse/ClickHouse/pull/77316)([Dmitry Novik](https://github.com/novikd))。 +* 修复了一个问题:即使指定的副本不存在,`SYSTEM SYNC REPLICA LIGHTWEIGHT 'foo'` 也会报告成功。现在该命令会在尝试同步之前,先在 Keeper 中正确检查该副本是否存在。[#78405](https://github.com/ClickHouse/ClickHouse/pull/78405)([Jayme Bird](https://github.com/jaymebrd))。 +* 修复了一个极其特定情况下的崩溃问题:当在 `ON CLUSTER` 查询的 `CONSTRAINT` 部分中使用 `currentDatabase` 函数时会导致崩溃。此修复关闭了 [#78100](https://github.com/ClickHouse/ClickHouse/issues/78100)。[#79070](https://github.com/ClickHouse/ClickHouse/pull/79070)([pufit](https://github.com/pufit))。 +* 修复在服务器间查询中外部角色传递的问题。 [#79099](https://github.com/ClickHouse/ClickHouse/pull/79099) ([Andrey Zvonov](https://github.com/zvonand)). +* 请在 `SingleValueDataGeneric` 中改用 `IColumn` 而不是 `Field`。这修复了某些聚合函数(例如在 `Dynamic/Variant/JSON` 类型上的 `argMax`)返回值不正确的问题。[#79166](https://github.com/ClickHouse/ClickHouse/pull/79166)([Pavel Kruglov](https://github.com/Avogar))。 +* 修复了在 Azure Blob Storage 中应用 `use_native_copy` 和 `allow_azure_native_copy` 设置的问题,并改为仅在凭据匹配时才使用原生拷贝功能,解决了 [#78964](https://github.com/ClickHouse/ClickHouse/issues/78964)。[#79561](https://github.com/ClickHouse/ClickHouse/pull/79561)([Smita Kulkarni](https://github.com/SmitaRKulkarni))。 +* 修复在检查某列是否有关联时,由其来源作用域未知而导致的逻辑错误。修复 [#78183](https://github.com/ClickHouse/ClickHouse/issues/78183)。修复 [#79451](https://github.com/ClickHouse/ClickHouse/issues/79451)。[#79727](https://github.com/ClickHouse/ClickHouse/pull/79727)([Dmitry Novik](https://github.com/novikd))。 +* 修复在包含 ColumnConst 和 Analyzer 的 grouping sets 中导致结果错误的问题。 [#79743](https://github.com/ClickHouse/ClickHouse/pull/79743) ([Andrey Zvonov](https://github.com/zvonand)). +* 修复在从分布式表读取且本地副本滞后时,本地分片结果被重复返回的问题。 [#79761](https://github.com/ClickHouse/ClickHouse/pull/79761) ([Eduard Karacharov](https://github.com/korowa)). +* 修复符号位为负的 NaN 的排序顺序。 [#79847](https://github.com/ClickHouse/ClickHouse/pull/79847) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +* 现在 GROUP BY ALL 不再将 GROUPING 部分考虑在内。[#79915](https://github.com/ClickHouse/ClickHouse/pull/79915) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* 修复了 `TopK` / `TopKWeighted` 函数中不正确的状态合并问题,该问题会在容量尚未耗尽时导致误差显著增大。 [#79939](https://github.com/ClickHouse/ClickHouse/pull/79939) ([Joel Höner](https://github.com/athre0z)). +* 支持在 `azure_blob_storage` 对象存储中使用 `readonly` 设置。[#79954](https://github.com/ClickHouse/ClickHouse/pull/79954)([Julia Kartseva](https://github.com/jkartseva))。 +* 修复了在使用包含反斜杠转义字符的 `match(column, '^…')` 时导致的查询结果错误和内存不足崩溃问题。[#79969](https://github.com/ClickHouse/ClickHouse/pull/79969) ([filimonov](https://github.com/filimonov))。 +* 在数据湖中禁用 Hive 分区。部分解决 [https://github.com/issues/assigned?issue=ClickHouse%7CClickHouse%7CClickHouse%7C79937](https://github.com/issues/assigned?issue=ClickHouse%7CClickHouse%7C79937)。[#80005](https://github.com/ClickHouse/ClickHouse/pull/80005)([Daniil Ivanik](https://github.com/divanik))。 +* 修复了包含 lambda 表达式的 skip 索引无法生效的问题。当索引定义中的高阶函数与查询中的完全一致时,现在能够正确应用。 [#80025](https://github.com/ClickHouse/ClickHouse/pull/80025) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). +* 修正副本在根据复制日志执行 `ATTACH_PART` 命令附加分片时的元数据版本。 [#80038](https://github.com/ClickHouse/ClickHouse/pull/80038) ([Aleksei Filatov](https://github.com/aalexfvk)). +* 与其他函数不同,可执行用户自定义函数(eUDF)的名称不会被添加到 `system.query_log` 表的 `used_functions` 列中。此 PR 实现在请求中使用 eUDF 时将其名称添加到该列中。[#80073](https://github.com/ClickHouse/ClickHouse/pull/80073)([Kyamran](https://github.com/nibblerenush))。 +* 修复在 Arrow 格式中使用 LowCardinality(FixedString) 时的逻辑错误。 [#80156](https://github.com/ClickHouse/ClickHouse/pull/80156) ([Pavel Kruglov](https://github.com/Avogar))。 * 修复从 Merge 引擎读取子列的问题。 [#80158](https://github.com/ClickHouse/ClickHouse/pull/80158) ([Pavel Kruglov](https://github.com/Avogar)). -* 修复 `KeyCondition` 中数值类型比较相关的一个错误。[#80207](https://github.com/ClickHouse/ClickHouse/pull/80207)([Yarik Briukhovetskyi](https://github.com/yariks5s))。 -* 在对带有投影(projections)的表应用延迟物化(lazy materialization)时,修复 AMBIGUOUS_COLUMN_NAME 错误。[#80251](https://github.com/ClickHouse/ClickHouse/pull/80251) ([Igor Nikonov](https://github.com/devcrafter)). -* 修复在使用隐式投影时,对 LIKE 'ab_c%' 这类字符串前缀过滤条件的 count 优化错误。此更改修复了 [#80250](https://github.com/ClickHouse/ClickHouse/issues/80250)。[#80261](https://github.com/ClickHouse/ClickHouse/pull/80261)([Amos Bird](https://github.com/amosbird))。 -* 修复 MongoDB 文档中嵌套数值字段被错误序列化为字符串的问题。移除对 MongoDB 文档的最大深度限制。[#80289](https://github.com/ClickHouse/ClickHouse/pull/80289) ([Kirill Nikiforov](https://github.com/allmazz)). -* 在 Replicated 数据库中对 RMT 执行不那么严格的元数据检查。修复了 [#80296](https://github.com/ClickHouse/ClickHouse/issues/80296)。[#80298](https://github.com/ClickHouse/ClickHouse/pull/80298)([Nikolay Degterinsky](https://github.com/evillique))。 -* 修复用于 PostgreSQL 存储的 DateTime 和 DateTime64 的文本表示。[#80301](https://github.com/ClickHouse/ClickHouse/pull/80301)([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy))。 -* 在 `StripeLog` 表中允许使用带时区的 `DateTime`。修复了 [#44120](https://github.com/ClickHouse/ClickHouse/issues/44120)。[#80304](https://github.com/ClickHouse/ClickHouse/pull/80304)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 在查询计划步骤会改变行数的情况下,如果谓词中包含非确定性函数,则对该谓词禁用过滤下推(filter push-down)。修复了 [#40273](https://github.com/ClickHouse/ClickHouse/issues/40273)。[#80329](https://github.com/ClickHouse/ClickHouse/pull/80329)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 -* 修复在包含子列的投影中可能出现的逻辑错误和崩溃。[#80333](https://github.com/ClickHouse/ClickHouse/pull/80333) ([Pavel Kruglov](https://github.com/Avogar))。 -* 修复在 `ON` 表达式不是简单等值条件时,由逻辑 JOIN 步骤的过滤下推(filter-push-down)优化导致的 `NOT_FOUND_COLUMN_IN_BLOCK` 错误。修复了 [#79647](https://github.com/ClickHouse/ClickHouse/issues/79647) 和 [#77848](https://github.com/ClickHouse/ClickHouse/issues/77848)。[#80360](https://github.com/ClickHouse/ClickHouse/pull/80360)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 -* 修复在分区表中读取按反向顺序排列的键时产生的错误结果。此更改修复了 [#79987](https://github.com/ClickHouse/ClickHouse/issues/79987)。[#80448](https://github.com/ClickHouse/ClickHouse/pull/80448)([Amos Bird](https://github.com/amosbird))。 -* 修复了在包含可为 NULL 键且启用了 optimize_read_in_order 的表中出现的错误排序问题。[#80515](https://github.com/ClickHouse/ClickHouse/pull/80515) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). -* 修复了在使用 SYSTEM STOP REPLICATED VIEW 暂停视图后,删除可刷新物化视图(DROP)会卡住的问题。[#80543](https://github.com/ClickHouse/ClickHouse/pull/80543) ([Michael Kolupaev](https://github.com/al13n321))。 -* 修复在分布式查询中使用常量 `tuple` 时出现的 'Cannot find column' 错误。[#80596](https://github.com/ClickHouse/ClickHouse/pull/80596)([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy))。 +* 修复了 `KeyCondition` 中数值类型比较的一个错误。[#80207](https://github.com/ClickHouse/ClickHouse/pull/80207)([Yarik Briukhovetskyi](https://github.com/yariks5s))。 +* 修复在对带有投影的表使用惰性物化时出现的 AMBIGUOUS_COLUMN_NAME 错误。 [#80251](https://github.com/ClickHouse/ClickHouse/pull/80251) ([Igor Nikonov](https://github.com/devcrafter)). +* 修复在使用隐式投影时,对 `LIKE 'ab_c%'` 这类字符串前缀过滤条件的计数优化不正确的问题。此修复解决了 [#80250](https://github.com/ClickHouse/ClickHouse/issues/80250)。[#80261](https://github.com/ClickHouse/ClickHouse/pull/80261)([Amos Bird](https://github.com/amosbird))。 +* 修复 MongoDB 文档中嵌套的数值字段被错误地序列化为字符串的问题。移除对来自 MongoDB 的文档的最大深度限制。[#80289](https://github.com/ClickHouse/ClickHouse/pull/80289) ([Kirill Nikiforov](https://github.com/allmazz)). +* 在 Replicated 数据库中对 RMT 的元数据检查放宽限制。关闭 [#80296](https://github.com/ClickHouse/ClickHouse/issues/80296)。[#80298](https://github.com/ClickHouse/ClickHouse/pull/80298)([Nikolay Degterinsky](https://github.com/evillique))。 +* 修复用于 PostgreSQL 存储的 DateTime 和 DateTime64 的文本表示形式。 [#80301](https://github.com/ClickHouse/ClickHouse/pull/80301) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* 允许在 `StripeLog` 表中使用带时区的 `DateTime`。从而关闭了 [#44120](https://github.com/ClickHouse/ClickHouse/issues/44120)。[#80304](https://github.com/ClickHouse/ClickHouse/pull/80304)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 当查询计划中的某个步骤会改变行数时,如果谓词中包含非确定性函数,则对该谓词禁用过滤下推(filter push-down)。修复了 [#40273](https://github.com/ClickHouse/ClickHouse/issues/40273)。[#80329](https://github.com/ClickHouse/ClickHouse/pull/80329)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 +* 修复在包含子列的投影(projection)中可能出现的逻辑错误和崩溃。 [#80333](https://github.com/ClickHouse/ClickHouse/pull/80333) ([Pavel Kruglov](https://github.com/Avogar)). +* 修复在 `ON` 表达式不是简单等值条件时,由逻辑 JOIN sep 的 filter-push-down 优化导致的 `NOT_FOUND_COLUMN_IN_BLOCK` 错误。同时修复 [#79647](https://github.com/ClickHouse/ClickHouse/issues/79647) 和 [#77848](https://github.com/ClickHouse/ClickHouse/issues/77848)。[#80360](https://github.com/ClickHouse/ClickHouse/pull/80360)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 +* 修复在分区表中读取逆序键时返回错误结果的问题。该修复解决了 [#79987](https://github.com/ClickHouse/ClickHouse/issues/79987)。[#80448](https://github.com/ClickHouse/ClickHouse/pull/80448)([Amos Bird](https://github.com/amosbird))。 +* 修复了在具有可为空键且启用 optimize_read_in_order 的表中出现的排序错误问题。[#80515](https://github.com/ClickHouse/ClickHouse/pull/80515) ([Pervakov Grigorii](https://github.com/GrigoryPervakov))。 +* 修复了在使用 SYSTEM STOP REPLICATED VIEW 暂停视图后,删除可刷新物化视图(DROP)操作会卡住的问题。[#80543](https://github.com/ClickHouse/ClickHouse/pull/80543)([Michael Kolupaev](https://github.com/al13n321))。 +* 修复在分布式查询中使用常量元组时出现的 'Cannot find column' 错误。 [#80596](https://github.com/ClickHouse/ClickHouse/pull/80596) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). * 修复在启用 `join_use_nulls` 时 Distributed 表中的 `shardNum` 函数。[#80612](https://github.com/ClickHouse/ClickHouse/pull/80612) ([János Benjamin Antal](https://github.com/antaljanosbenjamin))。 -* 修复在 Merge 引擎中读取仅在部分表中存在的列时产生的错误结果。 [#80643](https://github.com/ClickHouse/ClickHouse/pull/80643) ([Pavel Kruglov](https://github.com/Avogar))。 -* 修复由于 replxx 卡死导致的 SSH 协议潜在问题。[#80688](https://github.com/ClickHouse/ClickHouse/pull/80688) ([Azat Khuzhin](https://github.com/azat)). -* `iceberg_history` 表中的时间戳现在应该已经正确无误。[#80711](https://github.com/ClickHouse/ClickHouse/pull/80711)([Melvyn Peignon](https://github.com/melvynator))。 -* 修复在字典注册失败时可能导致的崩溃问题(当 `CREATE DICTIONARY` 由于 `CANNOT_SCHEDULE_TASK` 失败时,可能会在字典注册表中留下悬空指针,随后可能导致崩溃)。 [#80714](https://github.com/ClickHouse/ClickHouse/pull/80714) ([Azat Khuzhin](https://github.com/azat)). -* 修复对象存储表函数中仅包含单个元素的 enum 通配模式的处理。[#80716](https://github.com/ClickHouse/ClickHouse/pull/80716)([Konstantin Bogdanov](https://github.com/thevar1able))。 -* 修复了 `Tuple(Dynamic)` 与 `String` 比较函数的错误结果类型,该问题会导致逻辑错误。[#80728](https://github.com/ClickHouse/ClickHouse/pull/80728)([Pavel Kruglov](https://github.com/Avogar))。 -* 为 Unity Catalog 补充对 `timestamp_ntz` 数据类型的支持。修复 [#79535](https://github.com/ClickHouse/ClickHouse/issues/79535),修复 [#79875](https://github.com/ClickHouse/ClickHouse/issues/79875)。[#80740](https://github.com/ClickHouse/ClickHouse/pull/80740)([alesapin](https://github.com/alesapin))。 -* 修复包含 `IN cte` 的分布式查询中出现的 `THERE_IS_NO_COLUMN` 错误。修复了 [#75032](https://github.com/ClickHouse/ClickHouse/issues/75032)。[#80757](https://github.com/ClickHouse/ClickHouse/pull/80757)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 -* 修复 external ORDER BY 导致的文件数量过多的问题(从而导致内存占用过高)。 [#80777](https://github.com/ClickHouse/ClickHouse/pull/80777) ([Azat Khuzhin](https://github.com/azat)). -* 此 PR 可能会关闭 [#80742](https://github.com/ClickHouse/ClickHouse/issues/80742)。[#80783](https://github.com/ClickHouse/ClickHouse/pull/80783)([zoomxi](https://github.com/zoomxi))。 -* 修复 Kafka 中由于 `get_member_id()` 从 `NULL` 创建 `std::string` 而导致的崩溃问题(这很可能只会在连接 broker 失败时出现)。 [#80793](https://github.com/ClickHouse/ClickHouse/pull/80793) ([Azat Khuzhin](https://github.com/azat)). -* 在关闭 Kafka 引擎之前正确地等待所有消费者退出(关闭后仍然处于活动状态的消费者可能会触发各种调试断言,并且在表已被删除/分离后,仍可能在后台从 broker 读取数据)。 [#80795](https://github.com/ClickHouse/ClickHouse/pull/80795) ([Azat Khuzhin](https://github.com/azat)). -* 修复由 `predicate-push-down` 优化导致的 `NOT_FOUND_COLUMN_IN_BLOCK` 错误,修复了 [#80443](https://github.com/ClickHouse/ClickHouse/issues/80443)。[#80834](https://github.com/ClickHouse/ClickHouse/pull/80834)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 -* 修复在带有 USING 的 JOIN 中解析表函数内星号(*)通配符时的逻辑错误。 [#80894](https://github.com/ClickHouse/ClickHouse/pull/80894) ([Vladimir Cherkasov](https://github.com/vdimir)). +* 修复在 Merge 引擎中读取仅存在于部分表中的列时返回结果不正确的问题。[#80643](https://github.com/ClickHouse/ClickHouse/pull/80643) ([Pavel Kruglov](https://github.com/Avogar))。 +* 修复 SSH 协议可能因 replxx 卡死而出现的问题。 [#80688](https://github.com/ClickHouse/ClickHouse/pull/80688) ([Azat Khuzhin](https://github.com/azat)). +* iceberg_history 表中的时间戳现在应该已经是正确的。[#80711](https://github.com/ClickHouse/ClickHouse/pull/80711)([Melvyn Peignon](https://github.com/melvynator))。 +* 修复在字典注册失败时可能发生的崩溃(当 `CREATE DICTIONARY` 因 `CANNOT_SCHEDULE_TASK` 失败时,有可能在字典注册表中留下悬空指针,后续可能导致崩溃)。 [#80714](https://github.com/ClickHouse/ClickHouse/pull/80714) ([Azat Khuzhin](https://github.com/azat)). +* 修复对象存储表函数中对仅包含单个元素的 enum 通配模式的处理。[#80716](https://github.com/ClickHouse/ClickHouse/pull/80716)([Konstantin Bogdanov](https://github.com/thevar1able))。 +* 修复了 `Tuple(Dynamic)` 与 `String` 之间比较函数的错误结果类型问题,该问题会导致逻辑错误。[#80728](https://github.com/ClickHouse/ClickHouse/pull/80728) ([Pavel Kruglov](https://github.com/Avogar)). +* 为 Unity Catalog 补充对数据类型 `timestamp_ntz` 的支持。修复 [#79535](https://github.com/ClickHouse/ClickHouse/issues/79535) 和 [#79875](https://github.com/ClickHouse/ClickHouse/issues/79875)。[#80740](https://github.com/ClickHouse/ClickHouse/pull/80740)([alesapin](https://github.com/alesapin))。 +* 修复在包含 `IN CTE` 的分布式查询中出现的 `THERE_IS_NO_COLUMN` 错误。修复了 [#75032](https://github.com/ClickHouse/ClickHouse/issues/75032)。[#80757](https://github.com/ClickHouse/ClickHouse/pull/80757)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 +* 修复外部 ORDER BY 产生过多文件(导致内存占用过高)的问题。 [#80777](https://github.com/ClickHouse/ClickHouse/pull/80777) ([Azat Khuzhin](https://github.com/azat)). +* 此 PR 可能会关闭 [#80742](https://github.com/ClickHouse/ClickHouse/issues/80742)。 [#80783](https://github.com/ClickHouse/ClickHouse/pull/80783) ([zoomxi](https://github.com/zoomxi))。 +* 修复 Kafka 中因 get_member_id() 从 NULL 创建 std::string 导致的崩溃问题(很可能只会在连接 broker 失败时出现)。 [#80793](https://github.com/ClickHouse/ClickHouse/pull/80793) ([Azat Khuzhin](https://github.com/azat)). +* 在关闭 Kafka 引擎之前,正确地等待所有消费者退出(关闭后仍然存在的活动消费者可能会触发各种调试断言失败,并且在表被删除/分离后仍可能在后台继续从 broker 读取数据)。 [#80795](https://github.com/ClickHouse/ClickHouse/pull/80795) ([Azat Khuzhin](https://github.com/azat)). +* 修复由 `predicate-push-down` 优化导致的 `NOT_FOUND_COLUMN_IN_BLOCK` 错误,解决了 [#80443](https://github.com/ClickHouse/ClickHouse/issues/80443)。[#80834](https://github.com/ClickHouse/ClickHouse/pull/80834)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 +* 修复在带 USING 的 JOIN 中解析表函数中的星号 (*) 通配符时的逻辑错误。 [#80894](https://github.com/ClickHouse/ClickHouse/pull/80894) ([Vladimir Cherkasov](https://github.com/vdimir)). * 修复 Iceberg 元数据文件缓存的内存计量问题。 [#80904](https://github.com/ClickHouse/ClickHouse/pull/80904) ([Azat Khuzhin](https://github.com/azat)). -* 修复使用可为空分区键时的分区错误。 [#80913](https://github.com/ClickHouse/ClickHouse/pull/80913) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). -* 修复在启用下推谓词的分布式查询(`allow_push_predicate_ast_for_distributed_subqueries=1`)时,当源表在发起查询的节点上不存在而导致的 `Table does not exist` 错误。修复了 [#77281](https://github.com/ClickHouse/ClickHouse/issues/77281)。[#80915](https://github.com/ClickHouse/ClickHouse/pull/80915)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 -* 修复带命名窗口的嵌套函数中的逻辑错误。[#80926](https://github.com/ClickHouse/ClickHouse/pull/80926)([Pervakov Grigorii](https://github.com/GrigoryPervakov))。 -* 修复 Nullable 列和浮点型列的 extremes 处理。[#80970](https://github.com/ClickHouse/ClickHouse/pull/80970) ([Pervakov Grigorii](https://github.com/GrigoryPervakov))。 -* 修复在查询 `system.tables` 时可能发生的崩溃问题(在内存压力较大时尤为常见)。 [#80976](https://github.com/ClickHouse/ClickHouse/pull/80976) ([Azat Khuzhin](https://github.com/azat)). -* 修复在对压缩方式由文件扩展名推断的文件执行带截断的原子重命名时的问题。[#80979](https://github.com/ClickHouse/ClickHouse/pull/80979) ([Pablo Marcos](https://github.com/pamarcos)). +* 修复使用可为空分区键时的错误分区问题。 [#80913](https://github.com/ClickHouse/ClickHouse/pull/80913) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +* 修复在启用谓词下推(`allow_push_predicate_ast_for_distributed_subqueries=1`)的分布式查询中,当源表在发起查询的节点上不存在时出现的 `Table does not exist` 错误。修复了 [#77281](https://github.com/ClickHouse/ClickHouse/issues/77281)。[#80915](https://github.com/ClickHouse/ClickHouse/pull/80915)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 +* 修复具名窗口中嵌套函数的逻辑错误。[#80926](https://github.com/ClickHouse/ClickHouse/pull/80926)([Pervakov Grigorii](https://github.com/GrigoryPervakov))。 +* 修复 nullable 列和浮点列的 extremes 统计。[#80970](https://github.com/ClickHouse/ClickHouse/pull/80970) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +* 修复在查询 `system.tables` 时可能发生的崩溃问题(在内存压力较大时很可能出现)。 [#80976](https://github.com/ClickHouse/ClickHouse/pull/80976) ([Azat Khuzhin](https://github.com/azat))。 +* 修复了对压缩格式由文件扩展名推断的文件执行带截断的原子重命名时的问题。 [#80979](https://github.com/ClickHouse/ClickHouse/pull/80979) ([Pablo Marcos](https://github.com/pamarcos)). * 修复 ErrorCodes::getName。 [#81032](https://github.com/ClickHouse/ClickHouse/pull/81032) ([RinChanNOW](https://github.com/RinChanNOWWW)). -* 修复了这样一个问题:当用户没有所有表的权限时,无法在 Unity Catalog 中列出表。现在所有表都能正确列出,尝试从受限的表中读取时将抛出异常。[#81044](https://github.com/ClickHouse/ClickHouse/pull/81044) ([alesapin](https://github.com/alesapin))。 -* 现在,ClickHouse 在执行 `SHOW TABLES` 查询时会忽略来自数据湖目录的错误和意外响应。修复了 [#79725](https://github.com/ClickHouse/ClickHouse/issues/79725)。[#81046](https://github.com/ClickHouse/ClickHouse/pull/81046)([alesapin](https://github.com/alesapin))。 -* 修复在 `JSONExtract` 和 `JSON` 类型解析中,从整数解析为 `DateTime64` 时的问题。[#81050](https://github.com/ClickHouse/ClickHouse/pull/81050)([Pavel Kruglov](https://github.com/Avogar))。 -* 将 date_time_input_format 设置体现在 schema 推断缓存中。 [#81052](https://github.com/ClickHouse/ClickHouse/pull/81052) ([Pavel Kruglov](https://github.com/Avogar)). -* 修复在执行 INSERT 时,如果在查询开始之后但在发送列数据之前该表被 DROP 时产生的崩溃。[#81053](https://github.com/ClickHouse/ClickHouse/pull/81053) ([Azat Khuzhin](https://github.com/azat)). -* 修复 quantileDeterministic 中未初始化值的使用问题。[#81062](https://github.com/ClickHouse/ClickHouse/pull/81062) ([Azat Khuzhin](https://github.com/azat)). -* 修复 `metadatastoragefromdisk` 磁盘事务中的硬链接计数管理,并添加测试。 [#81066](https://github.com/ClickHouse/ClickHouse/pull/81066) ([Sema Checherinda](https://github.com/CheSema)). -* 与其他函数不同,用户定义函数(UDF)的名称不会被添加到 `system.query_log` 表中。此 PR 实现了在请求中使用 UDF 时,将该 UDF 的名称添加到 `used_executable_user_defined_functions` 或 `used_sql_user_defined_functions` 这两列之一。[#81101](https://github.com/ClickHouse/ClickHouse/pull/81101)([Kyamran](https://github.com/nibblerenush))。 -* 修复了在通过 HTTP 协议使用文本格式(`JSON`、`Values` 等)进行插入操作且省略 `Enum` 字段时,出现的 `Too large size ... passed to allocator` 错误或可能导致崩溃的问题。[#81145](https://github.com/ClickHouse/ClickHouse/pull/81145)([Anton Popov](https://github.com/CurtizJ))。 -* 修复在将包含 Sparse 列的 INSERT 块推送到非 MT 物化视图 (MV) 时出现的 LOGICAL_ERROR。 [#81161](https://github.com/ClickHouse/ClickHouse/pull/81161) ([Azat Khuzhin](https://github.com/azat)). -* 修复在使用 `distributed_product_mode_local=local` 并启用跨副本复制时出现的 `Unknown table expression identifier` 问题。[#81162](https://github.com/ClickHouse/ClickHouse/pull/81162) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). -* 修复了在过滤后对 Parquet 文件行数的错误缓存问题。 [#81184](https://github.com/ClickHouse/ClickHouse/pull/81184) ([Michael Kolupaev](https://github.com/al13n321)). -* 修复在使用相对缓存路径时对 `fs cache max_size_to_total_space` 设置的处理方式。 [#81237](https://github.com/ClickHouse/ClickHouse/pull/81237) ([Kseniia Sumarokova](https://github.com/kssenii)). -* 修复了在以 Parquet 格式输出常量元组或映射时导致 clickhouse-local 崩溃的问题。[#81249](https://github.com/ClickHouse/ClickHouse/pull/81249)([Michael Kolupaev](https://github.com/al13n321))。 -* 校验通过网络接收到的数组偏移量。[#81269](https://github.com/ClickHouse/ClickHouse/pull/81269) ([Azat Khuzhin](https://github.com/azat))。 -* 修复在连接空表并使用窗口函数的查询中的一些极端情况。该错误会导致并行流数量急剧膨胀,从而引发 OOM。[#81299](https://github.com/ClickHouse/ClickHouse/pull/81299) ([Alexander Gololobov](https://github.com/davenger))。 -* 针对 DataLake 集群函数(`deltaLakeCluster`、`icebergCluster` 等)的修复:(1)修复在旧版 analyzer 下使用 `Cluster` 函数时,`DataLakeConfiguration` 中可能出现的段错误(segfault);(2)移除重复的数据湖元数据更新(多余的对象存储请求);(3)修复在未显式指定格式时,对对象存储进行的冗余列举操作(这一问题在非集群数据湖引擎中已修复)。[#81300](https://github.com/ClickHouse/ClickHouse/pull/81300)([Kseniia Sumarokova](https://github.com/kssenii))。 -* 让 force_restore_data 标志能够恢复丢失的 Keeper 元数据。[#81324](https://github.com/ClickHouse/ClickHouse/pull/81324) ([Raúl Marín](https://github.com/Algunenano)). +* 修复了当用户没有对所有表的访问权限时,无法在 Unity Catalog 中列出表的问题。现在所有表都会被正确列出,尝试读取受限表时将抛出异常。 [#81044](https://github.com/ClickHouse/ClickHouse/pull/81044) ([alesapin](https://github.com/alesapin)). +* 现在,ClickHouse 在执行 `SHOW TABLES` 查询时将忽略来自数据湖目录的错误和意外响应。修复 [#79725](https://github.com/ClickHouse/ClickHouse/issues/79725)。[#81046](https://github.com/ClickHouse/ClickHouse/pull/81046)([alesapin](https://github.com/alesapin))。 +* 修复在 `JSONExtract` 和 JSON 类型解析中,将整数解析为 `DateTime64` 时出现的问题。 [#81050](https://github.com/ClickHouse/ClickHouse/pull/81050) ([Pavel Kruglov](https://github.com/Avogar)). +* 将 `date_time_input_format` 设置反映到 schema 推断缓存中。[#81052](https://github.com/ClickHouse/ClickHouse/pull/81052) ([Pavel Kruglov](https://github.com/Avogar)). +* 修复在执行 INSERT 时,如果表在查询开始之后但在发送列数据之前被 DROP 而导致的崩溃。 [#81053](https://github.com/ClickHouse/ClickHouse/pull/81053) ([Azat Khuzhin](https://github.com/azat)). +* 修复 `quantileDeterministic` 中未初始化值的使用问题。 [#81062](https://github.com/ClickHouse/ClickHouse/pull/81062) ([Azat Khuzhin](https://github.com/azat)). +* 修复 metadatastoragefromdisk 磁盘事务中的硬链接计数管理问题,并添加测试。[#81066](https://github.com/ClickHouse/ClickHouse/pull/81066) ([Sema Checherinda](https://github.com/CheSema)). +* 与其他函数不同,用户自定义函数 (UDF) 的名称不会被写入 `system.query_log` 表中。该 PR 实现了在查询中使用 UDF 时,将该 UDF 的名称添加到 `used_executable_user_defined_functions` 或 `used_sql_user_defined_functions` 这两列之一中。[#81101](https://github.com/ClickHouse/ClickHouse/pull/81101) ([Kyamran](https://github.com/nibblerenush))。 +* 修复了通过 HTTP 协议以文本格式(`JSON`、`Values` 等)插入数据且省略 `Enum` 字段时,出现 `Too large size ... passed to allocator` 错误或可能崩溃的问题。[#81145](https://github.com/ClickHouse/ClickHouse/pull/81145)([Anton Popov](https://github.com/CurtizJ))。 +* 修复在将包含稀疏列的 INSERT 数据块写入非 MT 物化视图时触发的 LOGICAL_ERROR。 [#81161](https://github.com/ClickHouse/ClickHouse/pull/81161) ([Azat Khuzhin](https://github.com/azat)). +* 修复在跨副本复制场景下使用 `distributed_product_mode_local=local` 时出现的 `Unknown table expression identifier` 错误。[#81162](https://github.com/ClickHouse/ClickHouse/pull/81162) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). +* 修复了在过滤后错误缓存 Parquet 文件行数的问题。 [#81184](https://github.com/ClickHouse/ClickHouse/pull/81184) ([Michael Kolupaev](https://github.com/al13n321)). +* 修复在使用相对缓存路径时 fs cache 的 max_size_to_total_space 设置问题。[#81237](https://github.com/ClickHouse/ClickHouse/pull/81237) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 修复了 clickhouse-local 在以 Parquet 格式输出常量元组或 Map 时崩溃的问题。[#81249](https://github.com/ClickHouse/ClickHouse/pull/81249) ([Michael Kolupaev](https://github.com/al13n321))。 +* 校验通过网络接收的数组偏移量。 [#81269](https://github.com/ClickHouse/ClickHouse/pull/81269) ([Azat Khuzhin](https://github.com/azat)). +* 修复在查询连接空表且使用窗口函数时的一些边界情况。该 bug 会导致并行流数量爆炸式增长,进而引发 OOM。 [#81299](https://github.com/ClickHouse/ClickHouse/pull/81299) ([Alexander Gololobov](https://github.com/davenger)). +* 针对数据湖集群函数(`deltaLakeCluster`、`icebergCluster` 等)的修复:(1)在使用旧版 analyzer 搭配 `Cluster` 函数时,修复 `DataLakeConfiguration` 中潜在的段错误(segfault);(2)移除重复的数据湖元数据更新(多余的对象存储请求);(3)修复在未显式指定格式时对对象存储进行的冗余列出操作(此前已对非 Cluster 数据湖引擎完成了该修复)。[#81300](https://github.com/ClickHouse/ClickHouse/pull/81300) ([Kseniia Sumarokova](https://github.com/kssenii))。 +* 使 `force_restore_data` 标志可用于恢复丢失的 Keeper 元数据。[#81324](https://github.com/ClickHouse/ClickHouse/pull/81324) ([Raúl Marín](https://github.com/Algunenano)). * 修复 delta-kernel 中的 region 错误,解决了 [#79914](https://github.com/ClickHouse/ClickHouse/issues/79914)。[#81353](https://github.com/ClickHouse/ClickHouse/pull/81353)([Kseniia Sumarokova](https://github.com/kssenii))。 -* 禁用 divideOrNull 的错误 JIT。[#81370](https://github.com/ClickHouse/ClickHouse/pull/81370) ([Raúl Marín](https://github.com/Algunenano)). +* 禁用了针对 divideOrNull 的不正确 JIT。[#81370](https://github.com/ClickHouse/ClickHouse/pull/81370) ([Raúl Marín](https://github.com/Algunenano)). * 修复当 MergeTree 表的分区列名过长时出现的插入错误。[#81390](https://github.com/ClickHouse/ClickHouse/pull/81390)([hy123q](https://github.com/haoyangqian))。 -* 已在 [#81957](https://github.com/ClickHouse/ClickHouse/issues/81957) 中回溯:修复了在合并过程中抛出异常时 `Aggregator` 可能崩溃的问题。[#81450](https://github.com/ClickHouse/ClickHouse/pull/81450)([Nikita Taranov](https://github.com/nickitat))。 -* 不要将多个 manifest 文件的内容全部加载到内存中。 [#81470](https://github.com/ClickHouse/ClickHouse/pull/81470) ([Daniil Ivanik](https://github.com/divanik)). -* 修复在关闭后台线程池(`background_.*pool_size`)时可能发生的崩溃。[#81473](https://github.com/ClickHouse/ClickHouse/pull/81473)([Azat Khuzhin](https://github.com/azat))。 -* 修复在向使用 `URL` 引擎的表写入数据时发生的 `Npy` 格式越界读取问题。此更改关闭了 [#81356](https://github.com/ClickHouse/ClickHouse/issues/81356)。[#81502](https://github.com/ClickHouse/ClickHouse/pull/81502)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* Web UI 可能会显示 `NaN%`(典型的 JavaScript 问题)。[#81507](https://github.com/ClickHouse/ClickHouse/pull/81507) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 修复在 `database_replicated_enforce_synchronous_settings=1` 情况下的 `DatabaseReplicated` 问题。 [#81564](https://github.com/ClickHouse/ClickHouse/pull/81564) ([Azat Khuzhin](https://github.com/azat)). -* 修复 LowCardinality(Nullable(...)) 类型的排序顺序。[#81583](https://github.com/ClickHouse/ClickHouse/pull/81583)([Pervakov Grigorii](https://github.com/GrigoryPervakov))。 -* 在尚未从套接字完全读取请求时,服务器不应保持该 HTTP 连接。 [#81595](https://github.com/ClickHouse/ClickHouse/pull/81595) ([Sema Checherinda](https://github.com/CheSema)). -* 使标量关联子查询返回其投影表达式的可空结果。修复在关联子查询产生空结果集时的处理。 [#81632](https://github.com/ClickHouse/ClickHouse/pull/81632) ([Dmitry Novik](https://github.com/novikd)). -* 修复在对 `ReplicatedMergeTree` 执行 `ATTACH` 操作时出现的 `Unexpected relative path for a deduplicated part` 问题。[#81647](https://github.com/ClickHouse/ClickHouse/pull/81647)([Azat Khuzhin](https://github.com/azat))。 -* 查询设置 `use_iceberg_partition_pruning` 对 iceberg 存储不会生效,因为当前实现使用的是全局上下文而不是查询上下文。由于其默认值为 true,因此问题不严重。该 PR 对此进行了修复。[#81673](https://github.com/ClickHouse/ClickHouse/pull/81673)([Han Fei](https://github.com/hanfei1991))。 -* 已在 [#82128](https://github.com/ClickHouse/ClickHouse/issues/82128) 中回溯:修复在 TTL 表达式中使用字典时合并期间出现的“Context has expired”错误。[#81690](https://github.com/ClickHouse/ClickHouse/pull/81690)([Azat Khuzhin](https://github.com/azat))。 -* 为 MergeTree 设置 `merge_max_block_size` 添加校验,以确保其不为零。[#81693](https://github.com/ClickHouse/ClickHouse/pull/81693) ([Bharat Nallan](https://github.com/bharatnc)). -* 修复 `clickhouse-local` 中卡住的 `DROP VIEW ` 查询问题。[#81705](https://github.com/ClickHouse/ClickHouse/pull/81705) ([Bharat Nallan](https://github.com/bharatnc))。 -* 在某些情况下修复 StorageRedis 的 join。 [#81736](https://github.com/ClickHouse/ClickHouse/pull/81736) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). -* 修复在启用旧版分析器且使用空的 `USING ()` 时导致 `ConcurrentHashJoin` 崩溃的问题。[#81754](https://github.com/ClickHouse/ClickHouse/pull/81754) ([Nikita Taranov](https://github.com/nickitat))。 -* Keeper 修复:当日志中存在无效条目时,阻止提交新日志。此前,如果 leader 错误地应用了某些日志,即使 follower 会检测到摘要不匹配并中止,leader 仍会继续提交新日志。[#81780](https://github.com/ClickHouse/ClickHouse/pull/81780) ([Antonio Andelic](https://github.com/antonio2368))。 -* 修复在标量关联子查询处理过程中未能读取所需列的问题。修复 [#81716](https://github.com/ClickHouse/ClickHouse/issues/81716)。[#81805](https://github.com/ClickHouse/ClickHouse/pull/81805)([Dmitry Novik](https://github.com/novikd))。 -* 有人在我们的代码里到处塞进了 Kusto 相关内容,现已清理干净。这就关闭了 [#81643](https://github.com/ClickHouse/ClickHouse/issues/81643)。[#81885](https://github.com/ClickHouse/ClickHouse/pull/81885)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 在之前的版本中,服务器在处理对 `/js` 的请求时返回了过多的内容。这一更改关闭了 [#61890](https://github.com/ClickHouse/ClickHouse/issues/61890)。[#81895](https://github.com/ClickHouse/ClickHouse/pull/81895)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 之前,`MongoDB` 表引擎定义中可以在 `host:port` 参数中包含路径部分,但该部分会被静默忽略。MongoDB 集成会拒绝加载此类表。通过此修复,*我们允许加载这类表并忽略路径部分*,前提是 `MongoDB` 引擎有五个参数,并使用参数中指定的数据库名。*注意:* 此修复不适用于新创建的表、使用 `mongo` 表函数的查询,以及字典源和命名集合。[#81942](https://github.com/ClickHouse/ClickHouse/pull/81942)([Vladimir Cherkasov](https://github.com/vdimir))。 -* 修复了在合并过程中发生异常时 `Aggregator` 可能发生的崩溃问题。 [#82022](https://github.com/ClickHouse/ClickHouse/pull/82022) ([Nikita Taranov](https://github.com/nickitat)). -* 修复 `arraySimilarity` 中的复制粘贴错误,禁止使用 `UInt32` 和 `Int32` 权重。更新测试和文档。[#82103](https://github.com/ClickHouse/ClickHouse/pull/82103)([Mikhail f. Shiryaev](https://github.com/Felixoid))。 -* 修复 suggestion 线程与主客户端线程之间可能发生的数据竞争。[#82233](https://github.com/ClickHouse/ClickHouse/pull/82233) ([Azat Khuzhin](https://github.com/azat))。 - - - - - -#### 构建/测试/打包改进 - -* 使用 `postgres` 16.9。 [#81437](https://github.com/ClickHouse/ClickHouse/pull/81437) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* 已在 [#81957](https://github.com/ClickHouse/ClickHouse/issues/81957) 中回溯修复:修复了在合并期间发生异常时 `Aggregator` 可能出现的崩溃问题。[#81450](https://github.com/ClickHouse/ClickHouse/pull/81450)([Nikita Taranov](https://github.com/nickitat))。 +* 不要在内存中存储多份 manifest 文件的内容。 [#81470](https://github.com/ClickHouse/ClickHouse/pull/81470)([Daniil Ivanik](https://github.com/divanik))。 +* 修复在关闭后台线程池(`background_.*pool_size`)时可能发生的崩溃。[#81473](https://github.com/ClickHouse/ClickHouse/pull/81473) ([Azat Khuzhin](https://github.com/azat))。 +* 修复在向使用 `URL` 引擎的表写入时,`Npy` 格式导致的越界读取问题。关闭了 [#81356](https://github.com/ClickHouse/ClickHouse/issues/81356)。[#81502](https://github.com/ClickHouse/ClickHouse/pull/81502)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 在某些情况下,Web UI 可能会显示为 `NaN%`(典型的 JavaScript 问题)。 [#81507](https://github.com/ClickHouse/ClickHouse/pull/81507) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* 修复在 `database_replicated_enforce_synchronous_settings=1` 配置下的 `DatabaseReplicated` 问题。[#81564](https://github.com/ClickHouse/ClickHouse/pull/81564) ([Azat Khuzhin](https://github.com/azat))。 +* 修复 LowCardinality(Nullable(...)) 类型的排序顺序。 [#81583](https://github.com/ClickHouse/ClickHouse/pull/81583) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +* 如果尚未从套接字中完全读取请求,服务器不应保留该 HTTP 连接。 [#81595](https://github.com/ClickHouse/ClickHouse/pull/81595) ([Sema Checherinda](https://github.com/CheSema)). +* 使标量关联子查询返回可空的投影表达式结果。修复关联子查询产生空结果集时的行为。[#81632](https://github.com/ClickHouse/ClickHouse/pull/81632) ([Dmitry Novik](https://github.com/novikd))。 +* 修复在对 `ReplicatedMergeTree` 执行 `ATTACH` 时出现的 `Unexpected relative path for a deduplicated part` 错误。[#81647](https://github.com/ClickHouse/ClickHouse/pull/81647) ([Azat Khuzhin](https://github.com/azat))。 +* 查询设置 `use_iceberg_partition_pruning` 对 iceberg 存储不会生效,因为它使用的是全局上下文而不是查询上下文。由于其默认值为 true,因此影响不大。此 PR 对其进行了修复。 [#81673](https://github.com/ClickHouse/ClickHouse/pull/81673) ([Han Fei](https://github.com/hanfei1991)). +* 已在 [#82128](https://github.com/ClickHouse/ClickHouse/issues/82128) 中回溯修复:修复在 TTL 表达式中使用字典进行合并时出现的 “Context has expired” 错误。[#81690](https://github.com/ClickHouse/ClickHouse/pull/81690) ([Azat Khuzhin](https://github.com/azat)). +* 为 MergeTree 设置 `merge_max_block_size` 添加校验,以确保其不为 0。 [#81693](https://github.com/ClickHouse/ClickHouse/pull/81693) ([Bharat Nallan](https://github.com/bharatnc))。 +* 修复 `clickhouse-local` 中导致 `DROP VIEW ` 查询阻塞的问题。[#81705](https://github.com/ClickHouse/ClickHouse/pull/81705) ([Bharat Nallan](https://github.com/bharatnc)). +* 在某些情况下修复 StorageRedis 的 JOIN。 [#81736](https://github.com/ClickHouse/ClickHouse/pull/81736) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +* 修复在启用旧版分析器且使用空的 `USING ()` 时导致 `ConcurrentHashJoin` 崩溃的问题。 [#81754](https://github.com/ClickHouse/ClickHouse/pull/81754) ([Nikita Taranov](https://github.com/nickitat)). +* Keeper 修复:当日志中存在无效条目时,阻止提交新的日志条目。之前,如果 leader 错误地应用了一些日志,即使 follower 会检测到摘要不匹配并中止,leader 仍会继续提交新的日志条目。 [#81780](https://github.com/ClickHouse/ClickHouse/pull/81780) ([Antonio Andelic](https://github.com/antonio2368)). +* 修复在处理标量关联子查询时未读取所需列的问题。修复了 [#81716](https://github.com/ClickHouse/ClickHouse/issues/81716)。[#81805](https://github.com/ClickHouse/ClickHouse/pull/81805)([Dmitry Novik](https://github.com/novikd))。 +* 有人在我们的代码里到处乱用 Kusto。我已经清理干净了。关闭了 [#81643](https://github.com/ClickHouse/ClickHouse/issues/81643)。[#81885](https://github.com/ClickHouse/ClickHouse/pull/81885)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 在此前的版本中,服务器在处理对 `/js` 的请求时会返回过多的内容。该更改修复了 [#61890](https://github.com/ClickHouse/ClickHouse/issues/61890)。[#81895](https://github.com/ClickHouse/ClickHouse/pull/81895)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 之前,在 `MongoDB` 表引擎定义中可以在 `host:port` 参数里包含路径组件,但会被悄然忽略。MongoDB 集成现在会拒绝加载此类表。通过此修复,*如果 `MongoDB` 引擎有五个参数,我们允许加载此类表,并忽略路径组件*,而是使用参数中的数据库名称。*注意:* 此修复不适用于新创建的表、使用 `mongo` 表函数的查询,以及字典源和命名集合。[#81942](https://github.com/ClickHouse/ClickHouse/pull/81942) ([Vladimir Cherkasov](https://github.com/vdimir)). +* 修复在合并过程中抛出异常时 `Aggregator` 可能发生崩溃的问题。 [#82022](https://github.com/ClickHouse/ClickHouse/pull/82022) ([Nikita Taranov](https://github.com/nickitat)). +* 修复 `arraySimilarity` 中的复制粘贴错误,禁止将 `UInt32` 和 `Int32` 用作权重。更新测试和文档。[#82103](https://github.com/ClickHouse/ClickHouse/pull/82103) ([Mikhail f. Shiryaev](https://github.com/Felixoid))。 +* 修复建议线程与主客户端线程之间潜在的数据竞争问题。[#82233](https://github.com/ClickHouse/ClickHouse/pull/82233) ([Azat Khuzhin](https://github.com/azat))。 + +#### 构建/测试/打包优化 + +* 使用 `postgres` 16.9。[#81437](https://github.com/ClickHouse/ClickHouse/pull/81437) ([Konstantin Bogdanov](https://github.com/thevar1able))。 * 使用 `openssl` 3.2.4。 [#81438](https://github.com/ClickHouse/ClickHouse/pull/81438) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* 使用 2025-01-27 版本的 `abseil-cpp`。[#81440](https://github.com/ClickHouse/ClickHouse/pull/81440) ([Konstantin Bogdanov](https://github.com/thevar1able))。 -* 使用 `mongo-c-driver` 1.30.4。[#81449](https://github.com/ClickHouse/ClickHouse/pull/81449) ([Konstantin Bogdanov](https://github.com/thevar1able)) -* 使用 `krb5` 1.21.3-final。[#81453](https://github.com/ClickHouse/ClickHouse/pull/81453) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* 使用 `orc` 2.1.2。[#81455](https://github.com/ClickHouse/ClickHouse/pull/81455)([Konstantin Bogdanov](https://github.com/thevar1able))。 -* 使用 `grpc` 1.73.0。[#81629](https://github.com/ClickHouse/ClickHouse/pull/81629)([Konstantin Bogdanov](https://github.com/thevar1able))。 +* 使用 2025-01-27 版 `abseil-cpp`。[#81440](https://github.com/ClickHouse/ClickHouse/pull/81440) ([Konstantin Bogdanov](https://github.com/thevar1able))。 +* 使用 `mongo-c-driver` 1.30.4 版本。[#81449](https://github.com/ClickHouse/ClickHouse/pull/81449) ([Konstantin Bogdanov](https://github.com/thevar1able))。 +* 使用 `krb5` 1.21.3-final 版本。[#81453](https://github.com/ClickHouse/ClickHouse/pull/81453) ([Konstantin Bogdanov](https://github.com/thevar1able))。 +* 使用 `orc` 2.1.2。[#81455](https://github.com/ClickHouse/ClickHouse/pull/81455) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* 使用 `grpc` 1.73.0 版本。 [#81629](https://github.com/ClickHouse/ClickHouse/pull/81629) ([Konstantin Bogdanov](https://github.com/thevar1able))。 * 使用 `delta-kernel-rs` v0.12.1。[#81707](https://github.com/ClickHouse/ClickHouse/pull/81707) ([Konstantin Bogdanov](https://github.com/thevar1able))。 -* 将 `c-ares` 更新到 `v1.34.5`。[#81159](https://github.com/ClickHouse/ClickHouse/pull/81159)([Konstantin Bogdanov](https://github.com/thevar1able))。 -* 将 `curl` 升级到 8.14 版本,以修复 CVE-2025-5025 和 CVE-2025-4947。[#81171](https://github.com/ClickHouse/ClickHouse/pull/81171)([larryluogit](https://github.com/larryluogit))。 -* 将 `libarchive` 升级到 3.7.9 以修复:CVE-2024-20696 CVE-2025-25724 CVE-2024-48958 CVE-2024-57970 CVE-2025-1632 CVE-2024-48957 CVE-2024-48615。[#81174](https://github.com/ClickHouse/ClickHouse/pull/81174)([larryluogit](https://github.com/larryluogit))。 -* 将 `libxml2` 升级到 2.14.3。[#81187](https://github.com/ClickHouse/ClickHouse/pull/81187) ([larryluogit](https://github.com/larryluogit))。 -* 避免将随项目提供的 Rust 依赖源码复制到 `CARGO_HOME` 中。[#79560](https://github.com/ClickHouse/ClickHouse/pull/79560) ([Konstantin Bogdanov](https://github.com/thevar1able))。 -* 将 Sentry 库替换为我们自己的端点,从而移除对其的依赖。[#80236](https://github.com/ClickHouse/ClickHouse/pull/80236)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 在 CI 镜像中更新 Python 依赖,以解决 Dependabot 告警。[#80658](https://github.com/ClickHouse/ClickHouse/pull/80658)([Raúl Marín](https://github.com/Algunenano))。 -* 在为 Keeper 启用故障注入时,为提高测试的健壮性,在启动时重试从 Keeper 读取复制 DDL 停止标志。 [#80964](https://github.com/ClickHouse/ClickHouse/pull/80964) ([Alexander Gololobov](https://github.com/davenger))。 -* 将 Ubuntu 软件仓库的 URL 改为使用 HTTPS。[#81016](https://github.com/ClickHouse/ClickHouse/pull/81016) ([Raúl Marín](https://github.com/Algunenano))。 -* 更新测试镜像中的 Python 依赖项。[#81042](https://github.com/ClickHouse/ClickHouse/pull/81042) ([dependabot[bot]](https://github.com/apps/dependabot))。 -* 在 Nix 构建中引入 `flake.nix`。[#81463](https://github.com/ClickHouse/ClickHouse/pull/81463) ([Konstantin Bogdanov](https://github.com/thevar1able))。 -* 修复 `delta-kernel-rs` 在构建期间需要网络访问的问题。修复 [#80609](https://github.com/ClickHouse/ClickHouse/issues/80609)。[#81602](https://github.com/ClickHouse/ClickHouse/pull/81602)([Konstantin Bogdanov](https://github.com/thevar1able))。请阅读文章 [A Year of Rust in ClickHouse](https://clickhouse.com/blog/rust)。 - - - - -### ClickHouse release 25.5, 2025-05-22 {#255} +* 将 `c-ares` 更新到 `v1.34.5`。[#81159](https://github.com/ClickHouse/ClickHouse/pull/81159) ([Konstantin Bogdanov](https://github.com/thevar1able))。 +* 将 `curl` 升级到 8.14,以修复 CVE-2025-5025 和 CVE-2025-4947。[#81171](https://github.com/ClickHouse/ClickHouse/pull/81171) ([larryluogit](https://github.com/larryluogit))。 +* 将 `libarchive` 升级到 3.7.9,以修复以下漏洞:CVE-2024-20696 CVE-2025-25724 CVE-2024-48958 CVE-2024-57970 CVE-2025-1632 CVE-2024-48957 CVE-2024-48615。[#81174](https://github.com/ClickHouse/ClickHouse/pull/81174)([larryluogit](https://github.com/larryluogit))。 +* 将 `libxml2` 升级至 2.14.3。[#81187](https://github.com/ClickHouse/ClickHouse/pull/81187)([larryluogit](https://github.com/larryluogit))。 +* 避免将 vendor 目录中的 Rust 源码复制到 `CARGO_HOME` 中。[#79560](https://github.com/ClickHouse/ClickHouse/pull/79560) ([Konstantin Bogdanov](https://github.com/thevar1able))。 +* 通过用我们自己的端点替换 Sentry 库,移除了对该库的依赖。[#80236](https://github.com/ClickHouse/ClickHouse/pull/80236) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 在 CI 镜像中更新 Python 依赖,以处理 Dependabot 告警。[#80658](https://github.com/ClickHouse/ClickHouse/pull/80658)([Raúl Marín](https://github.com/Algunenano))。 +* 在启用 Keeper 故障注入时,为提高测试的鲁棒性,在启动阶段重试从 Keeper 读取复制 DDL 停止标记。 [#80964](https://github.com/ClickHouse/ClickHouse/pull/80964) ([Alexander Gololobov](https://github.com/davenger)). +* 将 Ubuntu 存档 URL 改为使用 https。 [#81016](https://github.com/ClickHouse/ClickHouse/pull/81016) ([Raúl Marín](https://github.com/Algunenano)). +* 在测试镜像中更新 Python 依赖。[#81042](https://github.com/ClickHouse/ClickHouse/pull/81042) ([dependabot[bot]](https://github.com/apps/dependabot)). +* 为 Nix 构建引入 `flake.nix`。[#81463](https://github.com/ClickHouse/ClickHouse/pull/81463) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* 修复 `delta-kernel-rs` 在构建期间需要访问网络的问题。已关闭 [#80609](https://github.com/ClickHouse/ClickHouse/issues/80609)。[#81602](https://github.com/ClickHouse/ClickHouse/pull/81602)([Konstantin Bogdanov](https://github.com/thevar1able))。请阅读文章 [A Year of Rust in ClickHouse](https://clickhouse.com/blog/rust)。 + +### ClickHouse 25.5 版本发布于 2025-05-22 {#255} #### 向后不兼容的变更 -* 函数 `geoToH3` 现在按照 (lat, lon, res) 的顺序接受输入(这与其他几何函数的常见约定一致)。希望保留之前结果顺序 (lon, lat, res) 的用户,可以将设置项 `geotoh3_argument_order` 设为 `'lon_lat'`。 [#78852](https://github.com/ClickHouse/ClickHouse/pull/78852) ([Pratima Patel](https://github.com/pratimapatel2008)). -* 新增文件系统缓存设置 `allow_dynamic_cache_resize`,默认值为 `false`,用于允许动态调整文件系统缓存大小。原因:在某些环境(如 ClickHouse Cloud)中,所有扩缩容事件都是通过重启进程完成的,我们希望显式禁用此特性,以便更好地控制行为,同时也作为一项安全措施。此 PR 被标记为向后不兼容,因为在旧版本中,动态缓存调整在没有特殊设置的情况下默认启用。 [#79148](https://github.com/ClickHouse/ClickHouse/pull/79148) ([Kseniia Sumarokova](https://github.com/kssenii)). -* 移除对旧版索引类型 `annoy` 和 `usearch` 的支持。它们长期以来都只是桩实现,即任何尝试使用这些旧索引都会返回错误。如果你仍然有 `annoy` 和 `usearch` 索引,请将其删除。 [#79802](https://github.com/ClickHouse/ClickHouse/pull/79802) ([Robert Schulze](https://github.com/rschu1ze)). -* 移除 `format_alter_commands_with_parentheses` 服务器设置。该设置在 24.2 中被引入且默认禁用,在 25.2 中默认启用。由于不存在不支持新格式的 LTS 版本,因此我们可以移除此设置。 [#79970](https://github.com/ClickHouse/ClickHouse/pull/79970) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). -* 默认启用 `DeltaLake` 存储的 `delta-kernel-rs` 实现。 [#79541](https://github.com/ClickHouse/ClickHouse/pull/79541) ([Kseniia Sumarokova](https://github.com/kssenii)). -* 如果从 `URL` 读取数据涉及多次重定向,设置 `enable_url_encoding` 会在该重定向链中的所有重定向上被正确应用。 [#79563](https://github.com/ClickHouse/ClickHouse/pull/79563) ([Shankar Iyer](https://github.com/shankar-iyer)). 设置 `enble_url_encoding` 的默认值现在被设为 `false`。 [#80088](https://github.com/ClickHouse/ClickHouse/pull/80088) ([Shankar Iyer](https://github.com/shankar-iyer)). - +* 函数 `geoToH3` 现在按 (lat, lon, res) 的顺序接收输入(这与其他几何函数的通用约定一致)。如果用户希望保留之前的参数顺序 (lon, lat, res),可以将设置 `geotoh3_argument_order = 'lon_lat'`。[#78852](https://github.com/ClickHouse/ClickHouse/pull/78852)([Pratima Patel](https://github.com/pratimapatel2008))。 +* 新增文件系统缓存设置 `allow_dynamic_cache_resize`,默认值为 `false`,用于控制是否允许动态调整文件系统缓存大小。原因:在某些环境(如 ClickHouse Cloud)中,所有扩缩容事件都通过重启进程来完成,我们希望显式禁用该特性,以便对行为有更多控制,同时作为一项安全防护措施。此 PR 被标记为向后不兼容,因为在旧版本中,动态缓存调整在默认情况下无需特殊设置即可启用。[#79148](https://github.com/ClickHouse/ClickHouse/pull/79148)([Kseniia Sumarokova](https://github.com/kssenii))。 +* 移除了对旧版索引类型 `annoy` 和 `usearch` 的支持。这两者已经长期只是占位实现,即任何尝试使用这些旧索引的操作都会返回错误。如果你仍然有 `annoy` 和 `usearch` 索引,请将它们删除。[#79802](https://github.com/ClickHouse/ClickHouse/pull/79802)([Robert Schulze](https://github.com/rschu1ze))。 +* 移除服务器设置 `format_alter_commands_with_parentheses`。该设置在 24.2 版本中引入且默认禁用,并在 25.2 中改为默认启用。由于不存在不支持新格式的 LTS 版本,因此我们可以移除此设置。[#79970](https://github.com/ClickHouse/ClickHouse/pull/79970)([János Benjamin Antal](https://github.com/antaljanosbenjamin))。 +* 默认启用 `DeltaLake` 存储的 `delta-kernel-rs` 实现。[#79541](https://github.com/ClickHouse/ClickHouse/pull/79541)([Kseniia Sumarokova](https://github.com/kssenii))。 +* 如果从 `URL` 读取时涉及多次重定向,设置 `enable_url_encoding` 会在整个重定向链中被正确应用。[#79563](https://github.com/ClickHouse/ClickHouse/pull/79563)([Shankar Iyer](https://github.com/shankar-iyer))。设置 `enble_url_encoding` 的默认值现在为 `false`。[#80088](https://github.com/ClickHouse/ClickHouse/pull/80088)([Shankar Iyer](https://github.com/shankar-iyer))。 #### 新功能 -* 在 `WHERE` 子句中支持标量关联子查询。修复 [#6697](https://github.com/ClickHouse/ClickHouse/issues/6697)。[#79600](https://github.com/ClickHouse/ClickHouse/pull/79600)([Dmitry Novik](https://github.com/novikd))。在简单场景下支持在投影列表中使用关联子查询。[#79925](https://github.com/ClickHouse/ClickHouse/pull/79925)([Dmitry Novik](https://github.com/novikd))。[#76078](https://github.com/ClickHouse/ClickHouse/pull/76078)([Dmitry Novik](https://github.com/novikd))。现在已覆盖 100% 的 TPC-H 测试套件。 -* 使用向量相似度索引的向量搜索现已进入 beta 阶段(此前为实验特性)。[#80164](https://github.com/ClickHouse/ClickHouse/pull/80164) ([Robert Schulze](https://github.com/rschu1ze)). -* 在 `Parquet` 格式中支持 geo 类型。关闭了 [#75317](https://github.com/ClickHouse/ClickHouse/issues/75317)。[#79777](https://github.com/ClickHouse/ClickHouse/pull/79777)([scanhex12](https://github.com/scanhex12))。 -* 新增函数 `sparseGrams`、`sparseGramsHashes`、`sparseGramsHashesUTF8`、`sparseGramsUTF8`,用于计算“sparse-ngrams”——一种用于提取子串以便进行索引和搜索的鲁棒算法。 [#79517](https://github.com/ClickHouse/ClickHouse/pull/79517) ([scanhex12](https://github.com/scanhex12))。 -* `clickhouse-local`(及其简写别名 `ch`)现在在有待处理的输入数据时,会隐式使用 `FROM table`。这修复了 [#65023](https://github.com/ClickHouse/ClickHouse/issues/65023)。同时,在 `clickhouse-local` 中启用了格式推断功能:当未指定 `--input-format` 且处理的是普通文件时,会自动推断格式。[#79085](https://github.com/ClickHouse/ClickHouse/pull/79085)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 添加 `stringBytesUniq` 和 `stringBytesEntropy` 函数,用于搜索可能为随机或加密的数据。[#79350](https://github.com/ClickHouse/ClickHouse/pull/79350) ([Sachin Kumar Singh](https://github.com/sachinkumarsingh092)). -* 新增用于编码和解码 Base32 的函数。[#79809](https://github.com/ClickHouse/ClickHouse/pull/79809) ([Joanna Hulboj](https://github.com/jh0x))。 -* 添加 `getServerSetting` 和 `getMergeTreeSetting` 函数。解决 #78318。 [#78439](https://github.com/ClickHouse/ClickHouse/pull/78439) ([NamNguyenHoai](https://github.com/NamHoaiNguyen))。 -* 新增 `iceberg_enable_version_hint` 设置项,以利用 `version-hint.text` 文件。[#78594](https://github.com/ClickHouse/ClickHouse/pull/78594) ([Arnaud Briche](https://github.com/arnaudbriche))。 -* 支持对数据库中的特定表执行截断操作,并可使用 `LIKE` 关键字进行筛选。[#78597](https://github.com/ClickHouse/ClickHouse/pull/78597) ([Yarik Briukhovetskyi](https://github.com/yariks5s))。 -* 在 `MergeTree` 系列表中支持 `_part_starting_offset` 虚拟列。该列表示所有之前 part 的累积行数,并在查询时基于当前的 part 列表进行计算。累积值在整个查询执行过程中都会保留,即使在 part 剪枝之后仍然有效。为支持此行为,已重构相关内部逻辑。[#79417](https://github.com/ClickHouse/ClickHouse/pull/79417) ([Amos Bird](https://github.com/amosbird))。 -* 添加函数 `divideOrNull`、`moduloOrNull`、`intDivOrNull`、`positiveModuloOrNull`,在右侧参数为零时返回 NULL。[#78276](https://github.com/ClickHouse/ClickHouse/pull/78276)([kevinyhzou](https://github.com/KevinyhZou))。 -* ClickHouse 向量搜索现在同时支持预过滤和后过滤,并提供相关设置以实现更细粒度的控制(问题 [#78161](https://github.com/ClickHouse/ClickHouse/issues/78161))。[#79854](https://github.com/ClickHouse/ClickHouse/pull/79854)([Shankar Iyer](https://github.com/shankar-iyer))。 -* 添加 [`icebergHash`](https://iceberg.apache.org/spec/#appendix-b-32-bit-hash-requirements) 和 [`icebergBucket`](https://iceberg.apache.org/spec/#bucket-transform-details) 函数。支持在使用 [`bucket transfom`](https://iceberg.apache.org/spec/#partitioning) 分区的 `Iceberg` 表上进行数据文件裁剪。[#79262](https://github.com/ClickHouse/ClickHouse/pull/79262)([Daniil Ivanik](https://github.com/divanik))。 - - - -#### 实验性功能 -* 新增 `Time`/`Time64` 数据类型:`Time` (HHH:MM:SS) 和 `Time64` (HHH:MM:SS.`<fractional>`),并提供一些基础的类型转换函数以及与其他数据类型交互的函数。同时,将现有函数名 `toTime` 更名为 `toTimeWithFixedDate`,因为类型转换函数需要使用 `toTime` 这个函数名。 [#75735](https://github.com/ClickHouse/ClickHouse/pull/75735) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* 用于 Iceberg 数据湖的 Hive metastore catalog。 [#77677](https://github.com/ClickHouse/ClickHouse/pull/77677) ([scanhex12](https://github.com/scanhex12)). -* 将 `full_text` 类型索引重命名为 `gin`。这与 PostgreSQL 及其他数据库中更常见的术语保持一致。现有 `full_text` 类型的索引仍然可以加载,但在尝试在查询中使用它们时会抛出异常(并建议改用 `gin` 索引)。 [#79024](https://github.com/ClickHouse/ClickHouse/pull/79024) ([Robert Schulze](https://github.com/rschu1ze)). +* 在 WHERE 子句中支持标量关联子查询,解决了 [#6697](https://github.com/ClickHouse/ClickHouse/issues/6697)。[#79600](https://github.com/ClickHouse/ClickHouse/pull/79600)([Dmitry Novik](https://github.com/novikd))。在简单场景下,在 SELECT 列表中支持关联子查询。[#79925](https://github.com/ClickHouse/ClickHouse/pull/79925)([Dmitry Novik](https://github.com/novikd))。[#76078](https://github.com/ClickHouse/ClickHouse/pull/76078)([Dmitry Novik](https://github.com/novikd))。现在已经覆盖了 100% 的 TPC-H 测试套件。 +* 使用向量相似度索引的向量搜索现已进入 beta 阶段(此前为实验特性)。 [#80164](https://github.com/ClickHouse/ClickHouse/pull/80164) ([Robert Schulze](https://github.com/rschu1ze)). +* 在 `Parquet` 格式中支持地理类型(geo types)。修复了 [#75317](https://github.com/ClickHouse/ClickHouse/issues/75317) 问题。[#79777](https://github.com/ClickHouse/ClickHouse/pull/79777)([scanhex12](https://github.com/scanhex12))。 +* 新增函数 `sparseGrams`、`sparseGramsHashes`、`sparseGramsHashesUTF8`、`sparseGramsUTF8`,用于计算“稀疏 n-gram(sparse-ngrams)”——一种用于索引和搜索的鲁棒子串提取算法。[#79517](https://github.com/ClickHouse/ClickHouse/pull/79517)([scanhex12](https://github.com/scanhex12))。 +* `clickhouse-local`(及其简写别名 `ch`)现在在存在需要处理的输入数据时,会隐式使用 `FROM table`。这解决了 [#65023](https://github.com/ClickHouse/ClickHouse/issues/65023)。同时,在处理常规文件且未指定 `--input-format` 时,已在 `clickhouse-local` 中启用格式推断。[#79085](https://github.com/ClickHouse/ClickHouse/pull/79085)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 添加 `stringBytesUniq` 和 `stringBytesEntropy` 函数,用于搜索可能是随机或加密的数据。[#79350](https://github.com/ClickHouse/ClickHouse/pull/79350) ([Sachin Kumar Singh](https://github.com/sachinkumarsingh092))。 +* 新增了用于 Base32 编码和解码的函数。[#79809](https://github.com/ClickHouse/ClickHouse/pull/79809) ([Joanna Hulboj](https://github.com/jh0x))。 +* 添加 `getServerSetting` 和 `getMergeTreeSetting` 函数,关闭 #78318。[#78439](https://github.com/ClickHouse/ClickHouse/pull/78439) ([NamNguyenHoai](https://github.com/NamHoaiNguyen))。 +* 新增 `iceberg_enable_version_hint` 设置项,用于利用 `version-hint.text` 文件。[#78594](https://github.com/ClickHouse/ClickHouse/pull/78594)([Arnaud Briche](https://github.com/arnaudbriche))。 +* 支持按 `LIKE` 关键字进行过滤,截断数据库中的特定表。 [#78597](https://github.com/ClickHouse/ClickHouse/pull/78597) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* 在 `MergeTree` 系列表中支持 `_part_starting_offset` 虚拟列。该列表示所有之前 part 的行数累积值,并在查询时基于当前 part 列表进行计算。该累积值在整个查询执行过程中都会被保留,即使在 part 剪枝之后仍然有效。相关内部逻辑已重构以支持此行为。 [#79417](https://github.com/ClickHouse/ClickHouse/pull/79417) ([Amos Bird](https://github.com/amosbird))。 +* 添加函数 `divideOrNull`、`moduloOrNull`、`intDivOrNull`、`positiveModuloOrNull`,当右侧参数为零时返回 NULL。[#78276](https://github.com/ClickHouse/ClickHouse/pull/78276)([kevinyhzou](https://github.com/KevinyhZou))。 +* ClickHouse 向量搜索现在同时支持预过滤和后过滤,并提供相关设置以实现更细粒度的控制。(issue [#78161](https://github.com/ClickHouse/ClickHouse/issues/78161))。[#79854](https://github.com/ClickHouse/ClickHouse/pull/79854)([Shankar Iyer](https://github.com/shankar-iyer))。 +* 添加 [`icebergHash`](https://iceberg.apache.org/spec/#appendix-b-32-bit-hash-requirements) 和 [`icebergBucket`](https://iceberg.apache.org/spec/#bucket-transform-details) 函数。支持对使用 [`bucket transfom`](https://iceberg.apache.org/spec/#partitioning) 分区的 `Iceberg` 表进行数据文件裁剪。[#79262](https://github.com/ClickHouse/ClickHouse/pull/79262) ([Daniil Ivanik](https://github.com/divanik))。 +#### 实验特性 +* 新增 `Time`/`Time64` 数据类型:`Time`(HHH:MM:SS)和 `Time64`(HHH:MM:SS.`<fractional>`),以及一些基础的类型转换函数和用于与其他数据类型交互的函数。同时,将现有函数 `toTime` 的名称更改为 `toTimeWithFixedDate`,因为类型转换函数需要保留 `toTime` 这个函数名。[#75735](https://github.com/ClickHouse/ClickHouse/pull/75735)([Yarik Briukhovetskyi](https://github.com/yariks5s))。 +* 面向 Iceberg 数据湖的 Hive metastore 目录。[#77677](https://github.com/ClickHouse/ClickHouse/pull/77677)([scanhex12](https://github.com/scanhex12))。 +* 类型为 `full_text` 的索引重命名为 `gin`。这与 PostgreSQL 和其他数据库中更常见的术语保持一致。现有的 `full_text` 类型索引仍然可以加载,但在尝试在搜索中使用它们时会抛出异常(并建议改用 `gin` 索引)。[#79024](https://github.com/ClickHouse/ClickHouse/pull/79024)([Robert Schulze](https://github.com/rschu1ze))。 #### 性能优化 -* 将 Compact 部分格式修改为为每个子流保存标记,从而能够读取单独的子列。旧的 Compact 格式在读取时仍然受支持,并且可以通过 MergeTree 设置 `write_marks_for_substreams_in_compact_parts` 在写入时启用。由于这会更改 Compact 部分的存储方式,为了更安全地升级,该设置默认禁用。它将在接下来的某个版本中默认启用。 [#77940](https://github.com/ClickHouse/ClickHouse/pull/77940) ([Pavel Kruglov](https://github.com/Avogar)). -* 允许将包含子列的条件下推到 PREWHERE。 [#79489](https://github.com/ClickHouse/ClickHouse/pull/79489) ([Pavel Kruglov](https://github.com/Avogar)). -* 通过在多个 granule 上同时计算表达式,加速辅助索引。 [#64109](https://github.com/ClickHouse/ClickHouse/pull/64109) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 默认启用 `compile_expressions`(用于普通表达式片段的 JIT 编译器)。由此解决了 [#51264](https://github.com/ClickHouse/ClickHouse/issues/51264)、[#56386](https://github.com/ClickHouse/ClickHouse/issues/56386) 和 [#66486](https://github.com/ClickHouse/ClickHouse/issues/66486)。[#79907](https://github.com/ClickHouse/ClickHouse/pull/79907)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 新增设置:`use_skip_indexes_in_final_exact_mode`。如果对 `ReplacingMergeTree` 表的查询包含 FINAL 子句,仅根据 skip indexes 读取表中数据范围可能会产生不正确的结果。启用该设置后,会扫描与 skip indexes 返回的主键范围有重叠的较新数据分片,以确保返回正确结果。设置为 0 表示禁用,1 表示启用。[#78350](https://github.com/ClickHouse/ClickHouse/pull/78350)([Shankar Iyer](https://github.com/shankar-iyer))。 -* 对象存储集群表函数(例如 `s3Cluster`)现在将基于一致性哈希为各副本分配要读取的文件,从而提高缓存局部性。[#77326](https://github.com/ClickHouse/ClickHouse/pull/77326)([Andrej Hoos](https://github.com/adikus))。 -* 通过允许并行执行 `INSERT`(可通过队列设置 `parallel_inserts=true` 启用),提升 `S3Queue`/`AzureQueue` 的性能。此前 S3Queue/AzureQueue 只能在流水线的第一部分(下载、解析)并行执行,`INSERT` 是单线程的,而 `INSERT` 几乎总是瓶颈。现在性能将几乎可以随 `processing_threads_num` 线性扩展。[#77671](https://github.com/ClickHouse/ClickHouse/pull/77671)([Azat Khuzhin](https://github.com/azat))。在 S3Queue/AzureQueue 中对 max_processed_files_before_commit 的上限控制进行了更公平的处理。[#79363](https://github.com/ClickHouse/ClickHouse/pull/79363)([Azat Khuzhin](https://github.com/azat))。 -* 引入了一个阈值(通过设置 `parallel_hash_join_threshold` 来控制),当右表大小低于该阈值时,会回退到 `hash` 算法。[#76185](https://github.com/ClickHouse/ClickHouse/pull/76185) ([Nikita Taranov](https://github.com/nickitat))。 -* 现在,我们使用副本数量来确定在启用并行副本读取时的任务规模。这样在读取数据量不大时,可以在副本之间实现更合理的工作分配。[#78695](https://github.com/ClickHouse/ClickHouse/pull/78695) ([Nikita Taranov](https://github.com/nickitat))。 -* 支持在分布式聚合的最终阶段并行合并 `uniqExact` 状态。[#78703](https://github.com/ClickHouse/ClickHouse/pull/78703) ([Nikita Taranov](https://github.com/nickitat))。 -* 修复在带键的聚合中并行合并 `uniqExact` 状态可能导致的性能下降问题。[#78724](https://github.com/ClickHouse/ClickHouse/pull/78724) ([Nikita Taranov](https://github.com/nickitat))。 -* 减少对 Azure 存储的 List Blobs API 调用次数。[#78860](https://github.com/ClickHouse/ClickHouse/pull/78860) ([Julia Kartseva](https://github.com/jkartseva))。 -* 优化使用并行副本的分布式 INSERT SELECT 的性能。[#79441](https://github.com/ClickHouse/ClickHouse/pull/79441) ([Azat Khuzhin](https://github.com/azat))。 -* 防止 `LogSeriesLimiter` 在每次构造时都执行清理操作,从而避免在高并发场景下出现锁争用和性能退化。 [#79864](https://github.com/ClickHouse/ClickHouse/pull/79864) ([filimonov](https://github.com/filimonov)). -* 使用 trivial count 优化以加速查询。 [#79945](https://github.com/ClickHouse/ClickHouse/pull/79945) ([Raúl Marín](https://github.com/Algunenano))。 -* 改进了对 `Decimal` 某些操作的内联处理。[#79999](https://github.com/ClickHouse/ClickHouse/pull/79999) ([Konstantin Bogdanov](https://github.com/thevar1able))。 -* 将 `input_format_parquet_bloom_filter_push_down` 的默认值设为 true。同时修正设置变更记录中的一个错误。[#80058](https://github.com/ClickHouse/ClickHouse/pull/80058) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 针对所有行都应被删除的数据部分优化了 `ALTER ... DELETE` mutation。现在,在此类情况下,会直接创建一个空数据部分来替代原始数据部分,而无需执行 mutation。[#79307](https://github.com/ClickHouse/ClickHouse/pull/79307) ([Anton Popov](https://github.com/CurtizJ))。 -* 在将数据块插入 Compact part 时,尽可能避免不必要的拷贝。[#79536](https://github.com/ClickHouse/ClickHouse/pull/79536) ([Pavel Kruglov](https://github.com/Avogar))。 -* 新增设置项 `input_format_max_block_size_bytes`,用于限制输入格式中创建的数据块大小(以字节为单位)。这有助于在数据导入时,当行中包含较大值时避免出现高内存占用。[#79495](https://github.com/ClickHouse/ClickHouse/pull/79495)([Pavel Kruglov](https://github.com/Avogar))。 -* 移除线程和 async_socket_for_remote/use_hedge_requests 的保护页。将 `FiberStack` 中的分配方式从 `mmap` 更改为 `aligned_alloc`。由于这会导致 VMA 被拆分,在高负载下可能会触及 vm.max_map_count 的限制。[#79147](https://github.com/ClickHouse/ClickHouse/pull/79147)([Sema Checherinda](https://github.com/CheSema))。 -* 使用并行副本的延迟物化。 [#79401](https://github.com/ClickHouse/ClickHouse/pull/79401) ([Igor Nikonov](https://github.com/devcrafter)). - - - - +* 将 Compact 部分格式更改为为每个子流保存标记,从而可以单独读取子列。旧的 Compact 格式在读取时仍然受支持,并且可以通过 MergeTree 设置 `write_marks_for_substreams_in_compact_parts` 在写入时启用。由于它更改了 Compact 部分的存储方式,为了更安全地进行升级,默认情况下是禁用的。在接下来的某个版本中,它将默认启用。[#77940](https://github.com/ClickHouse/ClickHouse/pull/77940)([Pavel Kruglov](https://github.com/Avogar))。 +* 允许将包含子列的条件下推到 PREWHERE [#79489](https://github.com/ClickHouse/ClickHouse/pull/79489) ([Pavel Kruglov](https://github.com/Avogar))。 +* 通过在多个 granule 上并行计算其表达式,加速二级索引。 [#64109](https://github.com/ClickHouse/ClickHouse/pull/64109) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* 默认启用 `compile_expressions`(用于普通表达式片段的 JIT 编译器)。由此关闭了 [#51264](https://github.com/ClickHouse/ClickHouse/issues/51264)、[#56386](https://github.com/ClickHouse/ClickHouse/issues/56386) 和 [#66486](https://github.com/ClickHouse/ClickHouse/issues/66486)。[#79907](https://github.com/ClickHouse/ClickHouse/pull/79907)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 新增设置:`use_skip_indexes_in_final_exact_mode`。如果对 `ReplacingMergeTree` 表的查询使用 FINAL 子句,只根据 skip index 选择要读取的表范围,可能会产生不正确的结果。该设置可以通过扫描与 skip index 返回的主键范围有重叠的较新数据部分,来确保返回正确结果。设置为 0 表示禁用,1 表示启用。[#78350](https://github.com/ClickHouse/ClickHouse/pull/78350)([Shankar Iyer](https://github.com/shankar-iyer))。 +* 对象存储集群表函数(例如 `s3Cluster`)现在会基于一致哈希将待读取的文件分配给各副本,从而提升缓存局部性。[#77326](https://github.com/ClickHouse/ClickHouse/pull/77326)([Andrej Hoos](https://github.com/adikus))。 +* 通过允许并行执行 `INSERT` 来提升 `S3Queue`/`AzureQueue` 的性能(可通过队列设置 `parallel_inserts=true` 启用)。此前 S3Queue/AzureQueue 只能对处理流水线的第一部分(下载、解析)并行化,而 `INSERT` 是单线程的,并且 `INSERT` 几乎总是性能瓶颈。现在性能几乎可以随 `processing_threads_num` 线性扩展。[#77671](https://github.com/ClickHouse/ClickHouse/pull/77671)([Azat Khuzhin](https://github.com/azat))。在 S3Queue/AzureQueue 中对 `max_processed_files_before_commit` 的处理更加公平。[#79363](https://github.com/ClickHouse/ClickHouse/pull/79363)([Azat Khuzhin](https://github.com/azat))。 +* 引入了一个阈值(通过设置 `parallel_hash_join_threshold` 进行控制),当右表大小低于该阈值时会回退为使用 `hash` 算法。[#76185](https://github.com/ClickHouse/ClickHouse/pull/76185) ([Nikita Taranov](https://github.com/nickitat))。 +* 现在我们在启用并行副本读取时,通过副本数量来确定读取任务的规模。当待读取的数据量不大时,这可以在副本之间实现更合理的工作负载分配。[#78695](https://github.com/ClickHouse/ClickHouse/pull/78695) ([Nikita Taranov](https://github.com/nickitat))。 +* 在分布式聚合的最终阶段,允许对 `uniqExact` 状态进行并行合并。[#78703](https://github.com/ClickHouse/ClickHouse/pull/78703)([Nikita Taranov](https://github.com/nickitat))。 +* 修复在按键聚合中并行合并 `uniqExact` 状态时可能出现的性能下降问题。[#78724](https://github.com/ClickHouse/ClickHouse/pull/78724) ([Nikita Taranov](https://github.com/nickitat)). +* 减少对 Azure Storage 的 List Blobs API 调用次数。 [#78860](https://github.com/ClickHouse/ClickHouse/pull/78860) ([Julia Kartseva](https://github.com/jkartseva)). +* 修复使用并行副本的分布式 INSERT SELECT 的性能问题。[#79441](https://github.com/ClickHouse/ClickHouse/pull/79441) ([Azat Khuzhin](https://github.com/azat)). +* 避免 `LogSeriesLimiter` 在每次构造时都执行清理操作,从而防止在高并发场景下出现锁竞争和性能退化。 [#79864](https://github.com/ClickHouse/ClickHouse/pull/79864) ([filimonov](https://github.com/filimonov)). +* 通过启用 trivial count 优化加速查询。 [#79945](https://github.com/ClickHouse/ClickHouse/pull/79945) ([Raúl Marín](https://github.com/Algunenano)). +* 改进了部分 `Decimal` 运算的内联处理。 [#79999](https://github.com/ClickHouse/ClickHouse/pull/79999) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* 将 `input_format_parquet_bloom_filter_push_down` 的默认值设置为 true。同时,修正设置变更历史中的一处错误。[#80058](https://github.com/ClickHouse/ClickHouse/pull/80058) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 针对需要删除所有行的分片,优化了 `ALTER ... DELETE` 变更操作。现在,在这类情况下会直接创建一个空分片来替代原始分片,而无需执行变更操作本身。[#79307](https://github.com/ClickHouse/ClickHouse/pull/79307) ([Anton Popov](https://github.com/CurtizJ)). +* 在可能的情况下,避免在插入 Compact part 时对数据块进行额外拷贝。[#79536](https://github.com/ClickHouse/ClickHouse/pull/79536) ([Pavel Kruglov](https://github.com/Avogar))。 +* 添加了设置 `input_format_max_block_size_bytes`,用于按字节限制在输入格式中创建的块大小。这有助于在行包含大值时,避免数据导入期间出现高内存占用。[#79495](https://github.com/ClickHouse/ClickHouse/pull/79495) ([Pavel Kruglov](https://github.com/Avogar))。 +* 移除线程和 async_socket_for_remote/use_hedge_requests 的保护页。将 `FiberStack` 中的分配方法从 `mmap` 更改为 `aligned_alloc`。由于这会导致 VMA 被拆分,在高负载下可能会触及 vm.max_map_count 的上限。[#79147](https://github.com/ClickHouse/ClickHouse/pull/79147)([Sema Checherinda](https://github.com/CheSema))。 +* 使用并行副本的惰性物化。[#79401](https://github.com/ClickHouse/ClickHouse/pull/79401) ([Igor Nikonov](https://github.com/devcrafter)). #### 改进 -* 新增支持即时应用轻量级删除的功能(通过设置 `lightweight_deletes_sync = 0`、`apply_mutations_on_fly = 1`)。[#79281](https://github.com/ClickHouse/ClickHouse/pull/79281) ([Anton Popov](https://github.com/CurtizJ))。 -* 如果在终端中以 pretty 格式显示数据,并且后续块具有相同的列宽,则可以从上一个块接着显示,通过向上移动光标将其与前一个块拼接。这解决了 [#79333](https://github.com/ClickHouse/ClickHouse/issues/79333)。该功能由新的设置 `output_format_pretty_glue_chunks` 控制。[#79339](https://github.com/ClickHouse/ClickHouse/pull/79339)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 将 `isIPAddressInRange` 函数的适用数据类型扩展为包含 `String`、`IPv4`、`IPv6`、`Nullable(String)`、`Nullable(IPv4)` 和 `Nullable(IPv6)`。[#78364](https://github.com/ClickHouse/ClickHouse/pull/78364)([YjyJeff](https://github.com/YjyJeff))。 -* 允许动态更改 `PostgreSQL` 引擎的连接池管理器设置。[#78414](https://github.com/ClickHouse/ClickHouse/pull/78414)([Samay Sharma](https://github.com/samay-sharma))。 -* 允许在常规投影中指定 `_part_offset`。这是构建投影索引的第一步。它可以与 [#58224](https://github.com/ClickHouse/ClickHouse/issues/58224) 配合使用,并有助于改进 #63207。[#78429](https://github.com/ClickHouse/ClickHouse/pull/78429)([Amos Bird](https://github.com/amosbird))。 -* 为 `system.named_collections` 新增列(`create_query` 和 `source`)。解决 [#78179](https://github.com/ClickHouse/ClickHouse/issues/78179)。 [#78582](https://github.com/ClickHouse/ClickHouse/pull/78582)([MikhailBurdukov](https://github.com/MikhailBurdukov))。 -* 在系统表 `system.query_condition_cache` 中新增了字段 `condition`。它存储其哈希值被用作查询条件缓存键的明文条件。 [#78671](https://github.com/ClickHouse/ClickHouse/pull/78671) ([Robert Schulze](https://github.com/rschu1ze))。 -* 现在可以在 `BFloat16` 列上创建向量相似性索引。[#78850](https://github.com/ClickHouse/ClickHouse/pull/78850)([Robert Schulze](https://github.com/rschu1ze))。 -* 在 `DateTime64` 的尽力而为解析模式下支持带小数部分的 Unix 时间戳。[#78908](https://github.com/ClickHouse/ClickHouse/pull/78908) ([Pavel Kruglov](https://github.com/Avogar))。 -* 在 `DeltaLake` 存储的 delta-kernel 实现中,修复了列映射模式的问题,并为 schema 演进添加了测试。[#78921](https://github.com/ClickHouse/ClickHouse/pull/78921) ([Kseniia Sumarokova](https://github.com/kssenii)). -* 通过改进值的转换,优化以 `Values` 格式向 `Variant` 列插入数据的处理。[#78923](https://github.com/ClickHouse/ClickHouse/pull/78923) ([Pavel Kruglov](https://github.com/Avogar))。 -* `tokens` 函数已扩展为支持接收一个额外的 "tokenizer" 参数,以及更多特定于 tokenizer 的参数。[#79001](https://github.com/ClickHouse/ClickHouse/pull/79001)([Elmi Ahmadov](https://github.com/ahmadov))。 -* `SHOW CLUSTER` 语句现在会展开其参数中的宏(如果有的话)。 [#79006](https://github.com/ClickHouse/ClickHouse/pull/79006) ([arf42](https://github.com/arf42))。 -* 哈希函数现在支持处理数组、元组和映射中的 `NULL` 值。(issues [#48365](https://github.com/ClickHouse/ClickHouse/issues/48365) 和 [#48623](https://github.com/ClickHouse/ClickHouse/issues/48623))。[#79008](https://github.com/ClickHouse/ClickHouse/pull/79008)([Michael Kolupaev](https://github.com/al13n321))。 -* 将 cctz 更新到 2025a。[#79043](https://github.com/ClickHouse/ClickHouse/pull/79043) ([Raúl Marín](https://github.com/Algunenano)). +* 新增了实时应用轻量级删除的功能(通过设置 `lightweight_deletes_sync = 0`、`apply_mutations_on_fly = 1` 实现)。[#79281](https://github.com/ClickHouse/ClickHouse/pull/79281) ([Anton Popov](https://github.com/CurtizJ))。 +* 如果在终端中以 pretty 格式显示数据,并且后续数据块具有相同的列宽,则可以从前一个数据块继续显示,通过上移光标将其与前一个数据块拼接起来。这解决了 [#79333](https://github.com/ClickHouse/ClickHouse/issues/79333)。该特性由新的设置项 `output_format_pretty_glue_chunks` 控制。[#79339](https://github.com/ClickHouse/ClickHouse/pull/79339)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 将 `isIPAddressInRange` 函数扩展以支持 `String`、`IPv4`、`IPv6`、`Nullable(String)`、`Nullable(IPv4)` 和 `Nullable(IPv6)` 数据类型。[#78364](https://github.com/ClickHouse/ClickHouse/pull/78364) ([YjyJeff](https://github.com/YjyJeff))。 +* 允许动态更改 `PostgreSQL` 引擎的连接池参数。[#78414](https://github.com/ClickHouse/ClickHouse/pull/78414)([Samay Sharma](https://github.com/samay-sharma))。 +* 允许在普通 Projection 中指定 `_part_offset`。这是构建 Projection 索引的第一步。它可以与 [#58224](https://github.com/ClickHouse/ClickHouse/issues/58224) 配合使用,并有助于改进 #63207。[#78429](https://github.com/ClickHouse/ClickHouse/pull/78429)([Amos Bird](https://github.com/amosbird))。 +* 为 `system.named_collections` 添加新列(`create_query` 和 `source`)。修复 [#78179](https://github.com/ClickHouse/ClickHouse/issues/78179)。[#78582](https://github.com/ClickHouse/ClickHouse/pull/78582)([MikhailBurdukov](https://github.com/MikhailBurdukov))。 +* 在系统表 `system.query_condition_cache` 中新增了字段 `condition`。该字段存储明文条件,其对应的哈希值被用作查询条件缓存中的键。[#78671](https://github.com/ClickHouse/ClickHouse/pull/78671) ([Robert Schulze](https://github.com/rschu1ze))。 +* 现在可以基于 `BFloat16` 列创建向量相似性索引。[#78850](https://github.com/ClickHouse/ClickHouse/pull/78850) ([Robert Schulze](https://github.com/rschu1ze))。 +* 在 `DateTime64` 的尽力解析模式中支持带小数部分的 Unix 时间戳。[#78908](https://github.com/ClickHouse/ClickHouse/pull/78908) ([Pavel Kruglov](https://github.com/Avogar))。 +* 在存储 `DeltaLake` 的 delta-kernel 实现中,修复列映射模式相关问题,并为 schema 演进添加测试。[#78921](https://github.com/ClickHouse/ClickHouse/pull/78921) ([Kseniia Sumarokova](https://github.com/kssenii))。 +* 通过改进数值转换,优化以 Values 格式向 `Variant` 列插入数据的操作。[#78923](https://github.com/ClickHouse/ClickHouse/pull/78923) ([Pavel Kruglov](https://github.com/Avogar))。 +* `tokens` 函数已扩展为可接受一个额外的 tokenizer 参数,以及更多 tokenizer 特定的参数。[#79001](https://github.com/ClickHouse/ClickHouse/pull/79001) ([Elmi Ahmadov](https://github.com/ahmadov))。 +* `SHOW CLUSTER` 语句现在会展开其参数中的宏(如果有)。 [#79006](https://github.com/ClickHouse/ClickHouse/pull/79006) ([arf42](https://github.com/arf42)). +* 哈希函数现在支持数组、元组和映射中的 `NULL` 值(issues [#48365](https://github.com/ClickHouse/ClickHouse/issues/48365) 和 [#48623](https://github.com/ClickHouse/ClickHouse/issues/48623))。[#79008](https://github.com/ClickHouse/ClickHouse/pull/79008) ([Michael Kolupaev](https://github.com/al13n321))。 +* 将 cctz 更新到 2025a。[#79043](https://github.com/ClickHouse/ClickHouse/pull/79043) ([Raúl Marín](https://github.com/Algunenano)) * 将 UDF 的默认 stderr 处理方式改为 "log_last",以提升易用性。[#79066](https://github.com/ClickHouse/ClickHouse/pull/79066) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 在 Web UI 中让标签页支持撤销操作。此变更关闭了 [#71284](https://github.com/ClickHouse/ClickHouse/issues/71284)。[#79084](https://github.com/ClickHouse/ClickHouse/pull/79084)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 在 `recoverLostReplica` 期间移除相关设置,方式与此 PR 中的改动相同: [https://github.com/ClickHouse/ClickHouse/pull/78637](https://github.com/ClickHouse/ClickHouse/pull/78637)。 [#79113](https://github.com/ClickHouse/ClickHouse/pull/79113)([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 -* 添加 profile 事件:`ParquetReadRowGroups` 和 `ParquetPrunedRowGroups`,用于分析 Parquet 索引裁剪。 [#79180](https://github.com/ClickHouse/ClickHouse/pull/79180) ([flynn](https://github.com/ucasfl)). -* 支持在集群中对数据库执行 `ALTER` 操作。 [#79242](https://github.com/ClickHouse/ClickHouse/pull/79242) ([Tuan Pham Anh](https://github.com/tuanpach)). -* 显式跳过 QueryMetricLog 统计收集过程中错过的周期,否则日志需要很长时间才能追上当前时间。[#79257](https://github.com/ClickHouse/ClickHouse/pull/79257)([Mikhail Artemenko](https://github.com/Michicosun))。 -* 针对基于 `Arrow` 的格式读取进行了若干小优化。[#79308](https://github.com/ClickHouse/ClickHouse/pull/79308)([Bharat Nallan](https://github.com/bharatnc))。 -* 设置 `allow_archive_path_syntax` 被错误地标记为实验性设置。已添加一个测试,用于防止实验性设置被默认启用。[#79320](https://github.com/ClickHouse/ClickHouse/pull/79320) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* 使页面缓存设置可以按查询进行调整。这对于更快速地进行试验,以及对高吞吐量和低延迟查询进行精细调优是必要的。[#79337](https://github.com/ClickHouse/ClickHouse/pull/79337) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 不要对看起来像大多数 64 位哈希值的数字使用美化格式打印数字提示。这修复了 [#79334](https://github.com/ClickHouse/ClickHouse/issues/79334)。[#79338](https://github.com/ClickHouse/ClickHouse/pull/79338)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 高级仪表板上图表的颜色将根据对应查询的哈希值计算得出。这样在滚动浏览仪表板时,更容易记住并定位某个图表。[#79341](https://github.com/ClickHouse/ClickHouse/pull/79341)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 新增异步指标 `FilesystemCacheCapacity` —— `cache` 虚拟文件系统的总容量。此指标对全局基础设施监控非常有用。[#79348](https://github.com/ClickHouse/ClickHouse/pull/79348) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 优化对 system.parts 的访问(仅在需要时读取列/索引的大小)。 [#79352](https://github.com/ClickHouse/ClickHouse/pull/79352) ([Azat Khuzhin](https://github.com/azat)). -* 对于查询 `'SHOW CLUSTER '`,仅计算相关字段,而不是所有字段。[#79368](https://github.com/ClickHouse/ClickHouse/pull/79368) ([Tuan Pham Anh](https://github.com/tuanpach))。 -* 支持为 `DatabaseCatalog` 配置存储设置。[#79407](https://github.com/ClickHouse/ClickHouse/pull/79407) ([Kseniia Sumarokova](https://github.com/kssenii)). -* 为 `DeltaLake` 添加对本地存储的支持。[#79416](https://github.com/ClickHouse/ClickHouse/pull/79416) ([Kseniia Sumarokova](https://github.com/kssenii))。 -* 添加一个查询级别的设置以启用 delta-kernel-rs:`allow_experimental_delta_kernel_rs`。 [#79418](https://github.com/ClickHouse/ClickHouse/pull/79418) ([Kseniia Sumarokova](https://github.com/kssenii))。 -* 修复在从 Azure/S3 blob 存储列出 blob 时可能出现的无限循环问题。[#79425](https://github.com/ClickHouse/ClickHouse/pull/79425) ([Alexander Gololobov](https://github.com/davenger)). -* 新增文件系统缓存配置项 `max_size_ratio_to_total_space`。[#79460](https://github.com/ClickHouse/ClickHouse/pull/79460)([Kseniia Sumarokova](https://github.com/kssenii))。 -* 对于 `clickhouse-benchmark`,将 `reconnect` 选项重新配置为可取值 0、1 或 N,以控制相应的重连行为。[#79465](https://github.com/ClickHouse/ClickHouse/pull/79465)([Sachin Kumar Singh](https://github.com/sachinkumarsingh092))。 -* 允许对位于不同 `plain_rewritable` 磁盘上的表执行 `ALTER TABLE ... MOVE|REPLACE PARTITION`。[#79566](https://github.com/ClickHouse/ClickHouse/pull/79566) ([Julia Kartseva](https://github.com/jkartseva)). -* 如果参考向量的类型为 `Array(BFloat16)`,现在也会使用向量相似度索引。[#79745](https://github.com/ClickHouse/ClickHouse/pull/79745)([Shankar Iyer](https://github.com/shankar-iyer))。 -* 将 last_error_message、last_error_trace 和 query_id 添加到 system.error_log 表中。相关 issue [#75816](https://github.com/ClickHouse/ClickHouse/issues/75816)。[#79836](https://github.com/ClickHouse/ClickHouse/pull/79836)([Andrei Tinikov](https://github.com/Dolso))。 -* 默认启用崩溃报告发送功能。可以在服务器的配置文件中将其关闭。[#79838](https://github.com/ClickHouse/ClickHouse/pull/79838) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* 系统表 `system.functions` 现在会显示各个函数首次在 ClickHouse 的哪个版本中被引入。[#79839](https://github.com/ClickHouse/ClickHouse/pull/79839)([Robert Schulze](https://github.com/rschu1ze))。 -* 新增了 `access_control_improvements.enable_user_name_access_type` 设置。此设置允许启用/禁用为用户/角色提供的精确授权功能,该功能最初在 [https://github.com/ClickHouse/ClickHouse/pull/72246](https://github.com/ClickHouse/ClickHouse/pull/72246) 中引入。如果你的集群中存在版本早于 25.1 的副本,你可能需要关闭此设置。[#79842](https://github.com/ClickHouse/ClickHouse/pull/79842) ([pufit](https://github.com/pufit))。 -* 现在对 `ASTSelectWithUnionQuery::clone()` 方法的正确实现也会同时考虑 `is_normalized` 字段。这可能有助于解决 [#77569](https://github.com/ClickHouse/ClickHouse/issues/77569)。[#79909](https://github.com/ClickHouse/ClickHouse/pull/79909)([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 -* 修复了使用 EXCEPT 运算符的某些查询中格式不一致的问题。如果 EXCEPT 运算符左侧以 `*` 结尾,格式化后的查询会丢失括号,随后会被解析为带有 `EXCEPT` 修饰符的 `*`。这些查询是由模糊测试器(fuzzer)发现的,在实际场景中不太可能遇到。本更改关闭了 [#79950](https://github.com/ClickHouse/ClickHouse/issues/79950)。[#79952](https://github.com/ClickHouse/ClickHouse/pull/79952)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 通过对变体反序列化顺序进行缓存,小幅改进了 `JSON` 类型的解析。[#79984](https://github.com/ClickHouse/ClickHouse/pull/79984) ([Pavel Kruglov](https://github.com/Avogar))。 -* 新增配置项 `s3_slow_all_threads_after_network_error`。 [#80035](https://github.com/ClickHouse/ClickHouse/pull/80035) ([Vitaly Baranov](https://github.com/vitlibar))。 -* 关于所选待合并部分的日志级别设置错误(为 Information)。关闭了 [#80061](https://github.com/ClickHouse/ClickHouse/issues/80061)。[#80062](https://github.com/ClickHouse/ClickHouse/pull/80062)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* trace-visualizer:在工具提示和状态信息中添加 runtime/share。[#79040](https://github.com/ClickHouse/ClickHouse/pull/79040)([Sergei Trifonov](https://github.com/serxa))。 +* 在 Web UI 中为选项卡支持撤销操作。修复了 [#71284](https://github.com/ClickHouse/ClickHouse/issues/71284)。[#79084](https://github.com/ClickHouse/ClickHouse/pull/79084)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 在 `recoverLostReplica` 过程中移除相关设置,其方式与此前在以下变更中所做的处理相同: [https://github.com/ClickHouse/ClickHouse/pull/78637](https://github.com/ClickHouse/ClickHouse/pull/78637)。 [#79113](https://github.com/ClickHouse/ClickHouse/pull/79113)([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 +* 添加 profile 事件:`ParquetReadRowGroups` 和 `ParquetPrunedRowGroups`,用于分析 Parquet 索引裁剪情况。 [#79180](https://github.com/ClickHouse/ClickHouse/pull/79180) ([flynn](https://github.com/ucasfl)). +* 支持在集群上对数据库执行 `ALTER` 操作。[#79242](https://github.com/ClickHouse/ClickHouse/pull/79242) ([Tuan Pham Anh](https://github.com/tuanpach)). +* 显式跳过 QueryMetricLog 统计收集过程中错过的运行,否则日志需要很长时间才能追上当前时间。[#79257](https://github.com/ClickHouse/ClickHouse/pull/79257) ([Mikhail Artemenko](https://github.com/Michicosun)). +* 对基于 `Arrow` 的格式的读取进行了一些小优化。[#79308](https://github.com/ClickHouse/ClickHouse/pull/79308) ([Bharat Nallan](https://github.com/bharatnc)). +* 设置 `allow_archive_path_syntax` 被误标记为实验性。添加了一个测试,以防止实验性设置在默认情况下被启用。[#79320](https://github.com/ClickHouse/ClickHouse/pull/79320)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 使页面缓存设置可针对每个查询进行调整。这对于更快地进行试验,以及对高吞吐量和低延迟查询进行精细调优是必要的。 [#79337](https://github.com/ClickHouse/ClickHouse/pull/79337) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 对于看起来像典型 64 位哈希值的数字,不再以美化格式输出其数值提示信息。已关闭 [#79334](https://github.com/ClickHouse/ClickHouse/issues/79334)。 [#79338](https://github.com/ClickHouse/ClickHouse/pull/79338)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 高级仪表板中图表的颜色会根据对应查询的哈希值计算得出。这样在滚动浏览仪表板时,更容易记住并找到某个图表。[#79341](https://github.com/ClickHouse/ClickHouse/pull/79341) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 新增异步指标 `FilesystemCacheCapacity` —— `cache` 虚拟文件系统中的总容量。该指标对于整体基础设施监控非常有用。[#79348](https://github.com/ClickHouse/ClickHouse/pull/79348) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 优化对 system.parts 的访问(仅在需要时读取列/索引大小)。 [#79352](https://github.com/ClickHouse/ClickHouse/pull/79352) ([Azat Khuzhin](https://github.com/azat)). +* 改为仅为查询 `'SHOW CLUSTER '` 计算相关字段,而非所有字段。[#79368](https://github.com/ClickHouse/ClickHouse/pull/79368)([Tuan Pham Anh](https://github.com/tuanpach))。 +* 允许指定 `DatabaseCatalog` 的存储设置。 [#79407](https://github.com/ClickHouse/ClickHouse/pull/79407) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 在 `DeltaLake` 中支持本地存储。 [#79416](https://github.com/ClickHouse/ClickHouse/pull/79416) ([Kseniia Sumarokova](https://github.com/kssenii))。 +* 添加一个查询级设置以启用 delta-kernel-rs:`allow_experimental_delta_kernel_rs`。[#79418](https://github.com/ClickHouse/ClickHouse/pull/79418)([Kseniia Sumarokova](https://github.com/kssenii))。 +* 修复从 Azure Blob Storage/S3 对象存储列出 blob 时可能出现的死循环问题。 [#79425](https://github.com/ClickHouse/ClickHouse/pull/79425) ([Alexander Gololobov](https://github.com/davenger))。 +* 新增文件系统缓存设置 `max_size_ratio_to_total_space`。 [#79460](https://github.com/ClickHouse/ClickHouse/pull/79460) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 对于 `clickhouse-benchmark`,将 `reconnect` 选项重新配置为接受 0、1 或 N 作为取值,以按相应方式执行重连。[#79465](https://github.com/ClickHouse/ClickHouse/pull/79465) ([Sachin Kumar Singh](https://github.com/sachinkumarsingh092))。 +* 允许对位于不同 `plain_rewritable` 磁盘上的表使用 `ALTER TABLE ... MOVE|REPLACE PARTITION`。[#79566](https://github.com/ClickHouse/ClickHouse/pull/79566) ([Julia Kartseva](https://github.com/jkartseva)). +* 现在,如果参考向量的类型为 `Array(BFloat16)`,也会使用向量相似度索引。[#79745](https://github.com/ClickHouse/ClickHouse/pull/79745) ([Shankar Iyer](https://github.com/shankar-iyer)) +* 将 last_error_message、last_error_trace 和 query_id 添加到 system.error_log 表。相关 issue [#75816](https://github.com/ClickHouse/ClickHouse/issues/75816)。[#79836](https://github.com/ClickHouse/ClickHouse/pull/79836)([Andrei Tinikov](https://github.com/Dolso))。 +* 默认启用崩溃报告发送功能。可以在服务器的配置文件中将其关闭。[#79838](https://github.com/ClickHouse/ClickHouse/pull/79838) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 系统表 `system.functions` 现在会显示各个函数首次引入时所使用的 ClickHouse 版本。[#79839](https://github.com/ClickHouse/ClickHouse/pull/79839) ([Robert Schulze](https://github.com/rschu1ze))。 +* 添加了 `access_control_improvements.enable_user_name_access_type` 设置。此设置用于启用或禁用针对用户/角色的精细化授权功能,该功能最初在 [https://github.com/ClickHouse/ClickHouse/pull/72246](https://github.com/ClickHouse/ClickHouse/pull/72246) 中引入。如果你的集群中存在版本低于 25.1 的副本,建议关闭此设置。[#79842](https://github.com/ClickHouse/ClickHouse/pull/79842)([pufit](https://github.com/pufit))。 +* 现在 `ASTSelectWithUnionQuery::clone()` 方法的正确实现也会考虑 `is_normalized` 字段。这可能有助于解决问题 [#77569](https://github.com/ClickHouse/ClickHouse/issues/77569)。[#79909](https://github.com/ClickHouse/ClickHouse/pull/79909)([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 +* 修复使用 EXCEPT 运算符的某些查询在格式化时不一致的问题。如果 EXCEPT 运算符左侧以 `*` 结尾,格式化后的查询会丢失括号,进而被解析为带有 `EXCEPT` 修饰符的 `*`。这些查询是通过模糊测试工具(fuzzer)发现的,在实际使用中不太可能遇到。此更改关闭 [#79950](https://github.com/ClickHouse/ClickHouse/issues/79950)。[#79952](https://github.com/ClickHouse/ClickHouse/pull/79952)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 通过使用变体反序列化顺序缓存,对 `JSON` 类型的解析进行了小幅优化。 [#79984](https://github.com/ClickHouse/ClickHouse/pull/79984) ([Pavel Kruglov](https://github.com/Avogar)). +* 添加设置 `s3_slow_all_threads_after_network_error`。[#80035](https://github.com/ClickHouse/ClickHouse/pull/80035) ([Vitaly Baranov](https://github.com/vitlibar))。 +* 用于记录所选待合并数据部分的日志级别不正确(Information)。关闭了 [#80061](https://github.com/ClickHouse/ClickHouse/issues/80061)。[#80062](https://github.com/ClickHouse/ClickHouse/pull/80062)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* trace-visualizer:在工具提示和状态信息中添加 runtime/share 信息。[#79040](https://github.com/ClickHouse/ClickHouse/pull/79040) ([Sergei Trifonov](https://github.com/serxa))。 * trace-visualizer:从 ClickHouse 服务器加载数据。[#79042](https://github.com/ClickHouse/ClickHouse/pull/79042) ([Sergei Trifonov](https://github.com/serxa))。 -* 为失败的合并操作添加指标。 [#79228](https://github.com/ClickHouse/ClickHouse/pull/79228) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). -* `clickhouse-benchmark` 在指定最大迭代次数时,将基于该最大值显示百分比。[#79346](https://github.com/ClickHouse/ClickHouse/pull/79346)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 添加 system.parts 表可视化工具。 [#79437](https://github.com/ClickHouse/ClickHouse/pull/79437) ([Sergei Trifonov](https://github.com/serxa)). -* 新增用于分析查询延迟的工具。 [#79978](https://github.com/ClickHouse/ClickHouse/pull/79978) ([Sergei Trifonov](https://github.com/serxa)). - - - - - -#### 错误修复(官方稳定版本中用户可见的异常行为) - -* 修复当某个数据片段中缺失列被重命名时的问题。 [#76346](https://github.com/ClickHouse/ClickHouse/pull/76346) ([Anton Popov](https://github.com/CurtizJ)). -* 物化视图可能会启动得太晚,例如在为其提供数据流的 Kafka 表之后才启动。[#72123](https://github.com/ClickHouse/ClickHouse/pull/72123)([Ilya Golshtein](https://github.com/ilejn))。 -* 在启用 analyzer 时,修复在创建 `VIEW` 过程中对 `SELECT` 查询的重写,解决了 [#75956](https://github.com/ClickHouse/ClickHouse/issues/75956)。[#76356](https://github.com/ClickHouse/ClickHouse/pull/76356)([Dmitry Novik](https://github.com/novikd))。 -* 修复了通过 `apply_settings_from_server` 从服务器应用 `async_insert` 时的问题(此前会在客户端导致 `Unknown packet 11 from server` 错误)。[#77578](https://github.com/ClickHouse/ClickHouse/pull/77578) ([Azat Khuzhin](https://github.com/azat))。 -* 修复了在 Replicated 数据库中新添加副本上不可刷新的物化视图不起作用的问题。[#77774](https://github.com/ClickHouse/ClickHouse/pull/77774) ([Michael Kolupaev](https://github.com/al13n321))。 -* 修复了可刷新物化视图导致备份失败的问题。[#77893](https://github.com/ClickHouse/ClickHouse/pull/77893) ([Michael Kolupaev](https://github.com/al13n321)). -* 修复 `transform` 旧版触发逻辑中的错误。[#78247](https://github.com/ClickHouse/ClickHouse/pull/78247) ([Yarik Briukhovetskyi](https://github.com/yariks5s))。 -* 修复了在使用 analyzer 时未能应用二级索引的若干情况。修复 [#65607](https://github.com/ClickHouse/ClickHouse/issues/65607)、[#69373](https://github.com/ClickHouse/ClickHouse/issues/69373)。[#78485](https://github.com/ClickHouse/ClickHouse/pull/78485)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 -* 修复在启用压缩的 HTTP 协议下转储 ProfileEvents(`NetworkSendElapsedMicroseconds`/`NetworkSendBytes`)时的问题(误差不应大于缓冲区大小,通常约为 1MiB)。[#78516](https://github.com/ClickHouse/ClickHouse/pull/78516) ([Azat Khuzhin](https://github.com/azat)). -* 修复在 JOIN ... USING 涉及 ALIAS 列时 analyzer 抛出 LOGICAL_ERROR 的问题——现在会抛出更合适的错误。[#78618](https://github.com/ClickHouse/ClickHouse/pull/78618) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* 修复分析器问题:当 SELECT 包含位置参数时,CREATE VIEW ... ON CLUSTER 会失败。[#78663](https://github.com/ClickHouse/ClickHouse/pull/78663) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy))。 -* 修复在对具有模式自动推断的表函数执行 `INSERT SELECT` 时,如果 `SELECT` 中包含标量子查询会出现的 `Block structure mismatch` 错误。[#78677](https://github.com/ClickHouse/ClickHouse/pull/78677)([Pervakov Grigorii](https://github.com/GrigoryPervakov))。 -* 修复 analyzer:在 Distributed 表的 SELECT 查询中,当 `prefer_global_in_and_join=1` 时,应将 `in` 函数替换为 `globalIn`。 [#78749](https://github.com/ClickHouse/ClickHouse/pull/78749) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* 修复了若干种从 `MongoDB` 引擎表或 `mongodb` 表函数读取数据的 `SELECT` 查询类型:在 `WHERE` 子句中对常量值进行隐式转换的查询(例如 `WHERE datetime = '2025-03-10 00:00:00'`),以及带有 `LIMIT` 和 `GROUP BY` 的查询。此前,这些查询可能会返回错误结果。[#78777](https://github.com/ClickHouse/ClickHouse/pull/78777)([Anton Popov](https://github.com/CurtizJ))。 -* 修复不同 JSON 类型之间的转换。现在通过先转换为 String 再从 String 转回目标类型的简单类型转换来完成。尽管效率稍低,但可确保 100% 的准确性。[#78807](https://github.com/ClickHouse/ClickHouse/pull/78807) ([Pavel Kruglov](https://github.com/Avogar)). -* 修复将 Dynamic 类型转换为 Interval 时的逻辑错误。 [#78813](https://github.com/ClickHouse/ClickHouse/pull/78813) ([Pavel Kruglov](https://github.com/Avogar)). -* 修复 JSON 解析出错时的列回滚问题。 [#78836](https://github.com/ClickHouse/ClickHouse/pull/78836) ([Pavel Kruglov](https://github.com/Avogar)). -* 修复在使用常量别名列进行 `JOIN` 时出现的 `bad cast` 错误。[#78848](https://github.com/ClickHouse/ClickHouse/pull/78848)([Vladimir Cherkasov](https://github.com/vdimir))。 -* 当视图与目标表中对应列的类型不一致时,不允许在物化视图中使用 PREWHERE。[#78889](https://github.com/ClickHouse/ClickHouse/pull/78889) ([Pavel Kruglov](https://github.com/Avogar)). -* 修复在解析 Variant 列的损坏二进制数据时出现的逻辑错误。 [#78982](https://github.com/ClickHouse/ClickHouse/pull/78982) ([Pavel Kruglov](https://github.com/Avogar))。 -* 当将 parquet 批处理大小设置为 0 时会抛出异常。此前当 output_format_parquet_batch_size = 0 时,ClickHouse 会挂起。现在该问题已修复。[#78991](https://github.com/ClickHouse/ClickHouse/pull/78991) ([daryawessely](https://github.com/daryawessely)). -* 修复在紧凑分片中使用 basic 格式时对 Variant 判别符的反序列化问题。该问题是在 [https://github.com/ClickHouse/ClickHouse/pull/55518](https://github.com/ClickHouse/ClickHouse/pull/55518) 中引入的。[#79000](https://github.com/ClickHouse/ClickHouse/pull/79000)([Pavel Kruglov](https://github.com/Avogar))。 -* 类型为 `complex_key_ssd_cache` 的字典现在会拒绝 `block_size` 和 `write_buffer_size` 参数值为 0 或负数的配置(issue [#78314](https://github.com/ClickHouse/ClickHouse/issues/78314))。[#79028](https://github.com/ClickHouse/ClickHouse/pull/79028)([Elmi Ahmadov](https://github.com/ahmadov))。 -* 避免在 SummingMergeTree 中将 Field 用于非聚合列。否则,在 SummingMergeTree 中使用 Dynamic/Variant 类型时可能会引发意外错误。 [#79051](https://github.com/ClickHouse/ClickHouse/pull/79051) ([Pavel Kruglov](https://github.com/Avogar)). -* 修复在 analyzer 中 header 不同时,从具有 Distributed 目标表的物化视图读取数据的问题。[#79059](https://github.com/ClickHouse/ClickHouse/pull/79059) ([Pavel Kruglov](https://github.com/Avogar)). -* 修复了一个 bug:在进行了批量插入的表上,`arrayUnion()` 会返回多余(错误)的值。修复 [#75057](https://github.com/ClickHouse/ClickHouse/issues/75057)。[#79079](https://github.com/ClickHouse/ClickHouse/pull/79079)([Peter Nguyen](https://github.com/petern48))。 -* 修复 `OpenSSLInitializer` 中的段错误,并关闭 [#79092](https://github.com/ClickHouse/ClickHouse/issues/79092)。[#79097](https://github.com/ClickHouse/ClickHouse/pull/79097)([Konstantin Bogdanov](https://github.com/thevar1able))。 -* 始终为 S3 ListObject 请求设置前缀。 [#79114](https://github.com/ClickHouse/ClickHouse/pull/79114) ([Azat Khuzhin](https://github.com/azat)). -* 修复了一个问题:在对进行批量插入的表上执行 arrayUnion() 时会返回多余(错误)的值。修复了 [#79157](https://github.com/ClickHouse/ClickHouse/issues/79157)。[#79158](https://github.com/ClickHouse/ClickHouse/pull/79158)([Peter Nguyen](https://github.com/petern48))。 -* 在下推过滤条件后修复逻辑错误。[#79164](https://github.com/ClickHouse/ClickHouse/pull/79164)([Pervakov Grigorii](https://github.com/GrigoryPervakov))。 -* 修复在使用 delta-kernel 实现并通过基于 HTTP 的端点访问时的 Delta Lake 表引擎问题,并修复 NOSIGN。关闭 [#78124](https://github.com/ClickHouse/ClickHouse/issues/78124)。[#79203](https://github.com/ClickHouse/ClickHouse/pull/79203)([Kseniia Sumarokova](https://github.com/kssenii))。 -* Keeper 修复:避免对失败的 multi 请求触发 watch。[#79247](https://github.com/ClickHouse/ClickHouse/pull/79247) ([Antonio Andelic](https://github.com/antonio2368)). -* 在 `IN` 中禁止使用 Dynamic 和 JSON 类型。由于当前 `IN` 的实现方式,这可能会导致结果不正确。要在 `IN` 中正确支持这类类型比较复杂,可能会在未来实现。[#79282](https://github.com/ClickHouse/ClickHouse/pull/79282) ([Pavel Kruglov](https://github.com/Avogar))。 -* 修复在 JSON 类型解析中对重复路径的检查。 [#79317](https://github.com/ClickHouse/ClickHouse/pull/79317) ([Pavel Kruglov](https://github.com/Avogar)). -* 修复 SecureStreamSocket 的连接问题。 [#79383](https://github.com/ClickHouse/ClickHouse/pull/79383) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* 修复包含数据的 plain_rewritable 磁盘的加载问题。[#79439](https://github.com/ClickHouse/ClickHouse/pull/79439) ([Julia Kartseva](https://github.com/jkartseva))。 -* 修复在 MergeTree 的 Wide part 中进行动态子列检测时发生的崩溃。[#79466](https://github.com/ClickHouse/ClickHouse/pull/79466) ([Pavel Kruglov](https://github.com/Avogar)). -* 仅对初始 CREATE 查询验证表名长度。不要对后续创建执行此验证,以避免向后兼容性问题。[#79488](https://github.com/ClickHouse/ClickHouse/pull/79488)([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 -* 在多种使用带稀疏列的表的场景下,修复了出现 `Block structure mismatch` 错误的问题。[#79491](https://github.com/ClickHouse/ClickHouse/pull/79491) ([Anton Popov](https://github.com/CurtizJ))。 -* 修复两种会出现 "Logical Error: Can't set alias of * of Asterisk on alias" 的情况。[#79505](https://github.com/ClickHouse/ClickHouse/pull/79505) ([Raúl Marín](https://github.com/Algunenano)). -* 修复在重命名 Atomic 数据库时使用错误路径的问题。[#79569](https://github.com/ClickHouse/ClickHouse/pull/79569)([Tuan Pham Anh](https://github.com/tuanpach))。 -* 修复在 ORDER BY 子句中同时使用 JSON 列和其他列时的问题。 [#79591](https://github.com/ClickHouse/ClickHouse/pull/79591) ([Pavel Kruglov](https://github.com/Avogar)). -* 修复在同时禁用 `use_hedged_requests` 和 `allow_experimental_parallel_reading_from_replicas` 时,从远程读取出现的结果重复问题。[#79599](https://github.com/ClickHouse/ClickHouse/pull/79599) ([Eduard Karacharov](https://github.com/korowa))。 -* 修复在使用 Unity Catalog 时 delta-kernel 实现中的崩溃问题。[#79677](https://github.com/ClickHouse/ClickHouse/pull/79677) ([Kseniia Sumarokova](https://github.com/kssenii)). -* 解析自动发现集群的宏。[#79696](https://github.com/ClickHouse/ClickHouse/pull/79696) ([Anton Ivashkin](https://github.com/ianton-ru)). -* 正确处理配置错误的 `page_cache_limits` 设置。 [#79805](https://github.com/ClickHouse/ClickHouse/pull/79805) ([Bharat Nallan](https://github.com/bharatnc)). -* 修复了 SQL 函数 `formatDateTime` 在以下情况下的结果:当一个可变长度的格式符(例如 `%W`,即星期几,如 `Monday`、`Tuesday` 等)后面紧跟一个复合格式符(一次输出多个组件的格式符,例如 `%D`,即美国日期格式 `05/04/25`)时。 [#79835](https://github.com/ClickHouse/ClickHouse/pull/79835) ([Robert Schulze](https://github.com/rschu1ze)). -* IcebergS3 支持 count() 优化,但 IcebergS3Cluster 不支持。因此,在集群模式下返回的 count() 结果可能是副本数量的倍数。[#79844](https://github.com/ClickHouse/ClickHouse/pull/79844)([wxybear](https://github.com/wxybear))。 -* 修复在使用延迟物化(lazy materialization)时,如果在应用投影之前查询执行未使用任何列会出现的 AMBIGUOUS_COLUMN_NAME 错误。例如:SELECT * FROM t ORDER BY rand() LIMIT 5。[#79926](https://github.com/ClickHouse/ClickHouse/pull/79926)([Igor Nikonov](https://github.com/devcrafter))。 -* 在查询 `CREATE DATABASE datalake ENGINE = DataLakeCatalog(\'http://catalog:8181\', \'admin\', \'password\')` 中隐藏密码。[#79941](https://github.com/ClickHouse/ClickHouse/pull/79941) ([Han Fei](https://github.com/hanfei1991)). -* 允许在 JOIN USING 中指定别名。当列被重命名时(例如由于 ARRAY JOIN),请使用该别名。修复了 [#73707](https://github.com/ClickHouse/ClickHouse/issues/73707)。[#79942](https://github.com/ClickHouse/ClickHouse/pull/79942)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 -* 使带有 UNION 的物化视图在新副本上能够正确工作。[#80037](https://github.com/ClickHouse/ClickHouse/pull/80037) ([Samay Sharma](https://github.com/samay-sharma))。 -* SQL 函数 `parseDateTime` 中的格式说明符 `%e` 现在可以识别一位数的日期(例如 `3`),而之前则需要前导空格填充(例如 ` 3`)。这使其行为与 MySQL 保持兼容。若要保留之前的行为,请将设置调整为 `parsedatetime_e_requires_space_padding = 1`。(issue [#78243](https://github.com/ClickHouse/ClickHouse/issues/78243)). [#80057](https://github.com/ClickHouse/ClickHouse/pull/80057) ([Robert Schulze](https://github.com/rschu1ze)). +* 为失败的合并操作添加指标。[#79228](https://github.com/ClickHouse/ClickHouse/pull/79228) ([Miсhael Stetsyuk](https://github.com/mstetsyuk)). +* `clickhouse-benchmark` 在指定最大迭代次数时,将基于该最大值显示百分比。 [#79346](https://github.com/ClickHouse/ClickHouse/pull/79346) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* 新增 `system.parts` 表可视化器。[#79437](https://github.com/ClickHouse/ClickHouse/pull/79437) ([Sergei Trifonov](https://github.com/serxa))。 +* 新增查询延迟分析工具。 [#79978](https://github.com/ClickHouse/ClickHouse/pull/79978) ([Sergei Trifonov](https://github.com/serxa)). + +#### Bug 修复(官方稳定版中出现的用户可见错误行为) + +* 修复对数据 part 中缺失列的重命名处理。 [#76346](https://github.com/ClickHouse/ClickHouse/pull/76346) ([Anton Popov](https://github.com/CurtizJ)). +* 物化视图可能启动得太晚,例如在向其传输数据的 Kafka 表之后才启动。[#72123](https://github.com/ClickHouse/ClickHouse/pull/72123)([Ilya Golshtein](https://github.com/ilejn))。 +* 修复了在启用 analyzer 时创建 `VIEW` 时对 `SELECT` 查询重写的问题,关闭 [#75956](https://github.com/ClickHouse/ClickHouse/issues/75956)。[#76356](https://github.com/ClickHouse/ClickHouse/pull/76356) ([Dmitry Novik](https://github.com/novikd))。 +* 修复了从服务器(通过 `apply_settings_from_server`)应用 `async_insert` 的问题(之前会在客户端触发 `Unknown packet 11 from server` 错误)。 [#77578](https://github.com/ClickHouse/ClickHouse/pull/77578) ([Azat Khuzhin](https://github.com/azat)). +* 修复了在 Replicated 数据库中新添加副本上无法正常使用可刷新物化视图的问题。[#77774](https://github.com/ClickHouse/ClickHouse/pull/77774)([Michael Kolupaev](https://github.com/al13n321))。 +* 修复了可刷新的物化视图会破坏备份的问题。 [#77893](https://github.com/ClickHouse/ClickHouse/pull/77893) ([Michael Kolupaev](https://github.com/al13n321)). +* 修复 `transform` 中旧版触发逻辑的错误。 [#78247](https://github.com/ClickHouse/ClickHouse/pull/78247) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* 修复了在某些情况下与 analyzer 配合使用时未能应用二级索引的问题。修复了 [#65607](https://github.com/ClickHouse/ClickHouse/issues/65607),[#69373](https://github.com/ClickHouse/ClickHouse/issues/69373)。[#78485](https://github.com/ClickHouse/ClickHouse/pull/78485)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 +* 修复在启用压缩的 HTTP 协议下导出 profile 事件(`NetworkSendElapsedMicroseconds`/`NetworkSendBytes`)时的问题(误差不应超过缓冲区大小,通常约为 1MiB)。 [#78516](https://github.com/ClickHouse/ClickHouse/pull/78516) ([Azat Khuzhin](https://github.com/azat)). +* 修复在 `JOIN ... USING` 涉及 `ALIAS` 列时分析器产生 `LOGICAL_ERROR` 的问题——现在应抛出更合适的错误。[#78618](https://github.com/ClickHouse/ClickHouse/pull/78618) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* 修复分析器:当 `SELECT` 包含位置参数时,`CREATE VIEW ... ON CLUSTER` 会失败的问题。 [#78663](https://github.com/ClickHouse/ClickHouse/pull/78663) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* 修复在对支持模式推断的表函数执行 `INSERT SELECT` 且 `SELECT` 中包含标量子查询时出现的 `Block structure mismatch` 错误。[#78677](https://github.com/ClickHouse/ClickHouse/pull/78677) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +* 修复分析器:当在针对 Distributed 表的 SELECT 查询中使用 `in` 函数且 `prefer_global_in_and_join=1` 时,应将其替换为 `globalIn`。[#78749](https://github.com/ClickHouse/ClickHouse/pull/78749) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy))。 +* 修复了多种类型的 `SELECT` 查询,这些查询会从使用 `MongoDB` 引擎的表或 `mongodb` 表函数中读取数据:在 `WHERE` 子句中对常量值进行隐式类型转换的查询(例如 `WHERE datetime = '2025-03-10 00:00:00'`);以及带有 `LIMIT` 和 `GROUP BY` 的查询。先前,这些查询可能会返回错误的结果。[#78777](https://github.com/ClickHouse/ClickHouse/pull/78777)([Anton Popov](https://github.com/CurtizJ))。 +* 修复不同 JSON 类型之间的转换。现在通过先转换为/从 `String` 的简单类型转换来完成。这种方式效率较低,但可以确保 100% 的准确性。 [#78807](https://github.com/ClickHouse/ClickHouse/pull/78807) ([Pavel Kruglov](https://github.com/Avogar)). +* 修复在将 Dynamic 类型转换为 Interval 类型时发生的逻辑错误。 [#78813](https://github.com/ClickHouse/ClickHouse/pull/78813) ([Pavel Kruglov](https://github.com/Avogar)). +* 修复因 JSON 解析错误导致的列回滚问题。 [#78836](https://github.com/ClickHouse/ClickHouse/pull/78836) ([Pavel Kruglov](https://github.com/Avogar)). +* 修复在使用常量别名列进行 JOIN 时出现的“bad cast”错误。[#78848](https://github.com/ClickHouse/ClickHouse/pull/78848) ([Vladimir Cherkasov](https://github.com/vdimir)). +* 不允许在物化视图中对视图与目标表数据类型不一致的列使用 prewhere。 [#78889](https://github.com/ClickHouse/ClickHouse/pull/78889) ([Pavel Kruglov](https://github.com/Avogar)). +* 修复在解析 Variant 列损坏二进制数据时的逻辑错误。[#78982](https://github.com/ClickHouse/ClickHouse/pull/78982)([Pavel Kruglov](https://github.com/Avogar))。 +* 当将 Parquet 批处理大小设置为 0 时抛出异常。之前当 `output_format_parquet_batch_size = 0` 时,ClickHouse 会出现挂起问题。现在这一行为已被修复。[#78991](https://github.com/ClickHouse/ClickHouse/pull/78991) ([daryawessely](https://github.com/daryawessely))。 +* 修复 compact 部分中使用 basic 格式的 variant 判别符的反序列化。该问题是在 [https://github.com/ClickHouse/ClickHouse/pull/55518](https://github.com/ClickHouse/ClickHouse/pull/55518) 中引入的。[#79000](https://github.com/ClickHouse/ClickHouse/pull/79000)([Pavel Kruglov](https://github.com/Avogar))。 +* 类型为 `complex_key_ssd_cache` 的字典现在会拒绝 `block_size` 和 `write_buffer_size` 为 0 或负数的参数(问题 [#78314](https://github.com/ClickHouse/ClickHouse/issues/78314))。[#79028](https://github.com/ClickHouse/ClickHouse/pull/79028)([Elmi Ahmadov](https://github.com/ahmadov))。 +* 避免在 SummingMergeTree 中对未聚合列使用 Field,否则可能会导致 SummingMergeTree 中使用的 Dynamic/Variant 类型出现意外错误。[#79051](https://github.com/ClickHouse/ClickHouse/pull/79051) ([Pavel Kruglov](https://github.com/Avogar))。 +* 修复分析器中,从目标表为 Distributed 且表结构不同的物化视图读取数据时的问题。 [#79059](https://github.com/ClickHouse/ClickHouse/pull/79059) ([Pavel Kruglov](https://github.com/Avogar))。 +* 修复了一个问题:在执行批量插入操作的表上,`arrayUnion()` 会返回多余(错误)的值。修复了 [#75057](https://github.com/ClickHouse/ClickHouse/issues/75057)。[#79079](https://github.com/ClickHouse/ClickHouse/pull/79079)([Peter Nguyen](https://github.com/petern48))。 +* 修复 `OpenSSLInitializer` 中导致段错误的问题。关闭 [#79092](https://github.com/ClickHouse/ClickHouse/issues/79092)。[#79097](https://github.com/ClickHouse/ClickHouse/pull/79097)([Konstantin Bogdanov](https://github.com/thevar1able))。 +* 始终为 S3 ListObject 设置前缀。 [#79114](https://github.com/ClickHouse/ClickHouse/pull/79114) ([Azat Khuzhin](https://github.com/azat)). +* 修复了一个错误:在对表执行批量插入时,`arrayUnion()` 会返回多余(不正确)的值。修复了 [#79157](https://github.com/ClickHouse/ClickHouse/issues/79157)。[#79158](https://github.com/ClickHouse/ClickHouse/pull/79158)([Peter Nguyen](https://github.com/petern48))。 +* 修复过滤下推后的逻辑错误。 [#79164](https://github.com/ClickHouse/ClickHouse/pull/79164) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +* 修复在使用基于 HTTP 的端点时采用 delta-kernel 实现的 DeltaLake 表引擎的问题,并修复 NOSIGN。关闭 [#78124](https://github.com/ClickHouse/ClickHouse/issues/78124)。[#79203](https://github.com/ClickHouse/ClickHouse/pull/79203)([Kseniia Sumarokova](https://github.com/kssenii))。 +* Keeper 修复:避免在失败的 multi 请求上触发 watch。 [#79247](https://github.com/ClickHouse/ClickHouse/pull/79247) ([Antonio Andelic](https://github.com/antonio2368)). +* 在 `IN` 中禁止使用 Dynamic 和 JSON 类型。由于当前 `IN` 的实现方式,这可能会导致结果不正确。对这些类型在 `IN` 中提供完善支持较为复杂,可能会在未来实现。[#79282](https://github.com/ClickHouse/ClickHouse/pull/79282) ([Pavel Kruglov](https://github.com/Avogar)). +* 修复 JSON 类型解析时对重复路径的检查。[#79317](https://github.com/ClickHouse/ClickHouse/pull/79317)([Pavel Kruglov](https://github.com/Avogar))。 +* 修复 SecureStreamSocket 连接问题。 [#79383](https://github.com/ClickHouse/ClickHouse/pull/79383) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* 修复对包含数据的 plain_rewritable 磁盘的加载问题。[#79439](https://github.com/ClickHouse/ClickHouse/pull/79439) ([Julia Kartseva](https://github.com/jkartseva))。 +* 修复在 MergeTree 的 Wide 部分进行动态子列发现时发生的崩溃。[#79466](https://github.com/ClickHouse/ClickHouse/pull/79466) ([Pavel Kruglov](https://github.com/Avogar))。 +* 仅在初始 CREATE 查询时校验表名长度。对于后续创建不要执行该校验,以避免破坏向后兼容性。[#79488](https://github.com/ClickHouse/ClickHouse/pull/79488)([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 +* 在多种情况下,修复了在包含稀疏列的表上出现的 `Block structure mismatch` 错误。[#79491](https://github.com/ClickHouse/ClickHouse/pull/79491)([Anton Popov](https://github.com/CurtizJ))。 +* 修复两种会触发 `Logical Error: Can't set alias of * of Asterisk on alias` 的情况。[#79505](https://github.com/ClickHouse/ClickHouse/pull/79505) ([Raúl Marín](https://github.com/Algunenano))。 +* 修复在重命名 Atomic 数据库时使用错误的路径的问题。[#79569](https://github.com/ClickHouse/ClickHouse/pull/79569)([Tuan Pham Anh](https://github.com/tuanpach))。 +* 修复在 JSON 列与其他列组合使用 ORDER BY 时的问题。 [#79591](https://github.com/ClickHouse/ClickHouse/pull/79591) ([Pavel Kruglov](https://github.com/Avogar)). +* 修复了在同时禁用 `use_hedged_requests` 和 `allow_experimental_parallel_reading_from_replicas` 时,从远程读取数据会出现结果重复的问题。[#79599](https://github.com/ClickHouse/ClickHouse/pull/79599) ([Eduard Karacharov](https://github.com/korowa)). +* 修复在使用 Unity Catalog 时导致 delta-kernel 实现发生崩溃的问题。 [#79677](https://github.com/ClickHouse/ClickHouse/pull/79677) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 解析自动发现集群的宏。 [#79696](https://github.com/ClickHouse/ClickHouse/pull/79696) ([Anton Ivashkin](https://github.com/ianton-ru)). +* 对错误配置的 `page_cache_limits` 进行适当处理。 [#79805](https://github.com/ClickHouse/ClickHouse/pull/79805) ([Bharat Nallan](https://github.com/bharatnc)). +* 修复了在可变长度格式化符(例如 `%W`,即工作日 `Monday`、`Tuesday` 等)后跟复合格式化符(一次输出多个日期时间组件的格式化符,例如 `%D`,即美国日期格式 `05/04/25`)时,SQL 函数 `formatDateTime` 的结果不正确的问题。 [#79835](https://github.com/ClickHouse/ClickHouse/pull/79835) ([Robert Schulze](https://github.com/rschu1ze)). +* IcebergS3 支持 count() 优化,但 IcebergS3Cluster 不支持。因此,在集群模式下返回的 count() 结果可能是副本数量的倍数。[#79844](https://github.com/ClickHouse/ClickHouse/pull/79844) ([wxybear](https://github.com/wxybear))。 +* 修复在使用惰性物化且在应用投影之前查询执行阶段未使用任何列时出现的 `AMBIGUOUS_COLUMN_NAME` 错误。例如:`SELECT * FROM t ORDER BY rand() LIMIT 5`。 [#79926](https://github.com/ClickHouse/ClickHouse/pull/79926) ([Igor Nikonov](https://github.com/devcrafter))。 +* 在查询 `CREATE DATABASE datalake ENGINE = DataLakeCatalog(\'http://catalog:8181\', \'admin\', \'password\')` 中隐藏密码。[#79941](https://github.com/ClickHouse/ClickHouse/pull/79941) ([Han Fei](https://github.com/hanfei1991))。 +* 允许在 JOIN USING 中为列指定别名。在列被重命名时(例如由于 ARRAY JOIN),请使用该别名。修复 [#73707](https://github.com/ClickHouse/ClickHouse/issues/73707)。[#79942](https://github.com/ClickHouse/ClickHouse/pull/79942)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 +* 修复包含 UNION 的物化视图在新副本上无法正常工作的问题。 [#80037](https://github.com/ClickHouse/ClickHouse/pull/80037) ([Samay Sharma](https://github.com/samay-sharma)). +* SQL 函数 `parseDateTime` 中的格式说明符 `%e` 现在可以识别一位数的日期(例如 `3`),而之前需要在前面填充空格(例如 ` 3`)。这使其行为与 MySQL 兼容。若要保留之前的行为,请将设置 `parsedatetime_e_requires_space_padding` 设为 `1`。(问题 [#78243](https://github.com/ClickHouse/ClickHouse/issues/78243))。[#80057](https://github.com/ClickHouse/ClickHouse/pull/80057)([Robert Schulze](https://github.com/rschu1ze))。 * 修复 ClickHouse 日志中出现的警告 `Cannot find 'kernel' in '[...]/memory.stat'`(问题 [#77410](https://github.com/ClickHouse/ClickHouse/issues/77410))。[#80129](https://github.com/ClickHouse/ClickHouse/pull/80129)([Robert Schulze](https://github.com/rschu1ze))。 -* 在 FunctionComparison 中检查栈大小,以避免因栈溢出导致的崩溃。[#78208](https://github.com/ClickHouse/ClickHouse/pull/78208)([Julia Kartseva](https://github.com/jkartseva))。 -* 修复从 `system.workloads` 表执行 `SELECT` 时的竞态条件问题。 [#78743](https://github.com/ClickHouse/ClickHouse/pull/78743) ([Sergei Trifonov](https://github.com/serxa)). -* 修复分布式查询中的惰性物化问题。[#78815](https://github.com/ClickHouse/ClickHouse/pull/78815) ([Igor Nikonov](https://github.com/devcrafter))。 -* 修复从 `Array(Bool)` 到 `Array(FixedString)` 的转换。[#78863](https://github.com/ClickHouse/ClickHouse/pull/78863)([Nikita Taranov](https://github.com/nickitat))。 -* 简化 Parquet 版本选择,减少困惑。[#78818](https://github.com/ClickHouse/ClickHouse/pull/78818) ([Michael Kolupaev](https://github.com/al13n321)). -* 修复 `ReservoirSampler` 自身合并问题。 [#79031](https://github.com/ClickHouse/ClickHouse/pull/79031) ([Nikita Taranov](https://github.com/nickitat))。 -* 修复客户端上下文中插入表的存储问题。[#79046](https://github.com/ClickHouse/ClickHouse/pull/79046) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +* 在 FunctionComparison 中检查栈大小,以避免栈溢出导致崩溃。 [#78208](https://github.com/ClickHouse/ClickHouse/pull/78208) ([Julia Kartseva](https://github.com/jkartseva)). +* 修复从 `system.workloads` 执行 SELECT 时的竞态条件。[#78743](https://github.com/ClickHouse/ClickHouse/pull/78743) ([Sergei Trifonov](https://github.com/serxa)). +* 修复:分布式查询中的惰性物化。 [#78815](https://github.com/ClickHouse/ClickHouse/pull/78815) ([Igor Nikonov](https://github.com/devcrafter)). +* 修复 `Array(Bool)` 到 `Array(FixedString)` 的转换。 [#78863](https://github.com/ClickHouse/ClickHouse/pull/78863) ([Nikita Taranov](https://github.com/nickitat)). +* 让 Parquet 版本选择更清晰。 [#78818](https://github.com/ClickHouse/ClickHouse/pull/78818) ([Michael Kolupaev](https://github.com/al13n321)). +* 修复 `ReservoirSampler` 的自合并问题。[#79031](https://github.com/ClickHouse/ClickHouse/pull/79031) ([Nikita Taranov](https://github.com/nickitat))。 +* 修复客户端上下文中插入表的存储逻辑。 [#79046](https://github.com/ClickHouse/ClickHouse/pull/79046) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). * 修复 `AggregatingSortedAlgorithm` 和 `SummingSortedAlgorithm` 的数据成员析构顺序。[#79056](https://github.com/ClickHouse/ClickHouse/pull/79056)([Nikita Taranov](https://github.com/nickitat))。 -* `enable_user_name_access_type` 不得影响 `DEFINER` 访问类型。[#80026](https://github.com/ClickHouse/ClickHouse/pull/80026)([pufit](https://github.com/pufit))。 -* 如果 system 数据库的元数据位于 keeper 中,对 system 数据库的查询可能会挂起。 [#79304](https://github.com/ClickHouse/ClickHouse/pull/79304) ([Mikhail Artemenko](https://github.com/Michicosun)). - - +* `enable_user_name_access_type` 不应影响 `DEFINER` 访问类型。[#80026](https://github.com/ClickHouse/ClickHouse/pull/80026) ([pufit](https://github.com/pufit)). +* 如果 `system` 数据库的元数据位于 Keeper 中,对 `system` 数据库的查询可能会挂起。[#79304](https://github.com/ClickHouse/ClickHouse/pull/79304) ([Mikhail Artemenko](https://github.com/Michicosun))。 #### 构建/测试/打包改进 -* 支持复用已构建的 `chcache` 二进制文件,而不是每次都重新构建它。[#78851](https://github.com/ClickHouse/ClickHouse/pull/78851) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). -* 添加 NATS 暂停等待逻辑。[#78987](https://github.com/ClickHouse/ClickHouse/pull/78987) ([Dmitry Novikov](https://github.com/dmitry-sles-novikov)). -* 修复将 ARM 构建错误地发布为 amd64compat 的问题。[#79122](https://github.com/ClickHouse/ClickHouse/pull/79122) ([Alexander Gololobov](https://github.com/davenger)). -* 为 OpenSSL 使用预先生成的汇编代码。[#79386](https://github.com/ClickHouse/ClickHouse/pull/79386) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* 修复问题,以便可以使用 `clang20` 进行构建。[#79588](https://github.com/ClickHouse/ClickHouse/pull/79588) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* `chcache`:增加 Rust 缓存支持。[#78691](https://github.com/ClickHouse/ClickHouse/pull/78691) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* 为 `zstd` 汇编文件添加展开(unwind)信息。[#79288](https://github.com/ClickHouse/ClickHouse/pull/79288) ([Michael Kolupaev](https://github.com/al13n321)). +* 支持复用已构建的 `chcache` 二进制文件,而不是每次都重新构建。 [#78851](https://github.com/ClickHouse/ClickHouse/pull/78851) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). +* 添加 NATS 暂停等待逻辑。 [#78987](https://github.com/ClickHouse/ClickHouse/pull/78987) ([Dmitry Novikov](https://github.com/dmitry-sles-novikov)). +* 修复错误地将 ARM 构建发布为 `amd64compat` 的问题。 [#79122](https://github.com/ClickHouse/ClickHouse/pull/79122) ([Alexander Gololobov](https://github.com/davenger)). +* 为 OpenSSL 使用预生成的汇编代码。 [#79386](https://github.com/ClickHouse/ClickHouse/pull/79386) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* 修复以支持使用 `clang20` 进行构建。 [#79588](https://github.com/ClickHouse/ClickHouse/pull/79588) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* `chcache`:支持 Rust 缓存。 [#78691](https://github.com/ClickHouse/ClickHouse/pull/78691) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* 为 `zstd` 汇编文件添加栈展开(unwind)信息。 [#79288](https://github.com/ClickHouse/ClickHouse/pull/79288) ([Michael Kolupaev](https://github.com/al13n321)). -### ClickHouse 版本 25.4,2025-04-22 {#254} - -#### 向后不兼容变更 -* 当 `allow_materialized_view_with_bad_select` 为 `false` 时,检查物化视图中的所有列是否与目标表匹配。[#74481](https://github.com/ClickHouse/ClickHouse/pull/74481) ([Christoph Wurm](https://github.com/cwurm)). -* 修复在使用带负数 Date/DateTime 参数的 `dateTrunc` 时的若干情况。[#77622](https://github.com/ClickHouse/ClickHouse/pull/77622) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* 已移除旧版 `MongoDB` 集成。服务端设置 `use_legacy_mongodb_integration` 已过时,现在不再起任何作用。[#77895](https://github.com/ClickHouse/ClickHouse/pull/77895) ([Robert Schulze](https://github.com/rschu1ze)). -* 增强 `SummingMergeTree` 校验,以跳过对分区键或排序键中使用的列进行聚合。[#78022](https://github.com/ClickHouse/ClickHouse/pull/78022) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +### ClickHouse 25.4 版本,2025-04-22 {#254} +#### 向后不兼容的变更 +* 当 `allow_materialized_view_with_bad_select` 为 `false` 时,检查物化视图中的所有列是否与目标表完全匹配。 [#74481](https://github.com/ClickHouse/ClickHouse/pull/74481) ([Christoph Wurm](https://github.com/cwurm)). +* 修复 `dateTrunc` 与负值 Date/DateTime 参数一起使用时的行为。 [#77622](https://github.com/ClickHouse/ClickHouse/pull/77622) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* 已移除旧版 `MongoDB` 集成。服务器设置项 `use_legacy_mongodb_integration` 已废弃,现已无效,不再产生任何效果。 [#77895](https://github.com/ClickHouse/ClickHouse/pull/77895) ([Robert Schulze](https://github.com/rschu1ze)). +* 增强 `SummingMergeTree` 验证逻辑,以跳过对用于分区键或排序键的列进行聚合。 [#78022](https://github.com/ClickHouse/ClickHouse/pull/78022) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). #### 新功能 -* 添加了基于 CPU 插槽的工作负载调度功能,详情参见[文档](https://clickhouse.com/docs/operations/workload-scheduling#cpu_scheduling)。[#77595](https://github.com/ClickHouse/ClickHouse/pull/77595)([Sergei Trifonov](https://github.com/serxa))。 -* 如果指定 `--path` 命令行参数,`clickhouse-local` 在重启后将保留其数据库。这样就关闭了 [#50647](https://github.com/ClickHouse/ClickHouse/issues/50647) 问题。这样也就关闭了 [#49947](https://github.com/ClickHouse/ClickHouse/issues/49947) 问题。[#71722](https://github.com/ClickHouse/ClickHouse/pull/71722)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 当服务器过载时拒绝查询。该决策根据等待时间(`OSCPUWaitMicroseconds`)与繁忙时间(`OSCPUVirtualTimeMicroseconds`)的比值来确定。当该比值位于 `min_os_cpu_wait_time_ratio_to_throw` 和 `max_os_cpu_wait_time_ratio_to_throw`(这些是查询级别的设置)之间时,将以一定概率丢弃查询。[#63206](https://github.com/ClickHouse/ClickHouse/pull/63206)([Alexey Katsman](https://github.com/alexkats))。 -* 在 `Iceberg` 中进行时光回溯:新增设置,可按指定时间戳查询 `Iceberg` 表。[#71072](https://github.com/ClickHouse/ClickHouse/pull/71072)([Brett Hoerner](https://github.com/bretthoerner))。[#77439](https://github.com/ClickHouse/ClickHouse/pull/77439)([Daniil Ivanik](https://github.com/divanik))。 -* 用于 `Iceberg` 元数据的内存缓存,它会缓存 manifest 文件/列表和 `metadata.json`,以加速查询。[#77156](https://github.com/ClickHouse/ClickHouse/pull/77156)([Han Fei](https://github.com/hanfei1991))。 +* 为工作负载新增了 CPU 槽位调度功能,详情请参见[文档](https://clickhouse.com/docs/operations/workload-scheduling#cpu_scheduling)。[#77595](https://github.com/ClickHouse/ClickHouse/pull/77595)([Sergei Trifonov](https://github.com/serxa))。 +* 如果指定了 `--path` 命令行参数,`clickhouse-local` 在重启后会保留其数据库。此更改修复了 [#50647](https://github.com/ClickHouse/ClickHouse/issues/50647)。此更改修复了 [#49947](https://github.com/ClickHouse/ClickHouse/issues/49947)。[#71722](https://github.com/ClickHouse/ClickHouse/pull/71722)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 当服务器过载时拒绝处理查询。是否拒绝的决策基于等待时间(`OSCPUWaitMicroseconds`)与繁忙时间(`OSCPUVirtualTimeMicroseconds`)的比值作出。当该比值介于 `min_os_cpu_wait_time_ratio_to_throw` 和 `max_os_cpu_wait_time_ratio_to_throw` 之间时(这些是查询级别设置),将以一定概率丢弃查询。 [#63206](https://github.com/ClickHouse/ClickHouse/pull/63206)([Alexey Katsman](https://github.com/alexkats))。 +* 在 `Iceberg` 中进行时间回溯:新增设置,可按指定时间戳查询 `Iceberg` 表。[#71072](https://github.com/ClickHouse/ClickHouse/pull/71072) ([Brett Hoerner](https://github.com/bretthoerner))。[#77439](https://github.com/ClickHouse/ClickHouse/pull/77439) ([Daniil Ivanik](https://github.com/divanik))。 +* 用于 `Iceberg` 元数据的内存缓存,存储 manifest 文件/列表和 `metadata.json`,以加速查询。[#77156](https://github.com/ClickHouse/ClickHouse/pull/77156)([Han Fei](https://github.com/hanfei1991))。 * 为 Azure Blob Storage 提供对 `DeltaLake` 表引擎的支持。修复 [#68043](https://github.com/ClickHouse/ClickHouse/issues/68043)。[#74541](https://github.com/ClickHouse/ClickHouse/pull/74541)([Smita Kulkarni](https://github.com/SmitaRKulkarni))。 -* 为反序列化后的向量相似度索引新增了一个内存缓存,从而加速重复执行的近似最近邻(ANN)搜索查询。新缓存的大小由服务器设置项 `vector_similarity_index_cache_size` 和 `vector_similarity_index_cache_max_entries` 控制。此功能取代了早期版本中的跳过索引缓存功能。[#77905](https://github.com/ClickHouse/ClickHouse/pull/77905)([Shankar Iyer](https://github.com/shankar-iyer))。 -* 在 Delta Lake 中支持分区裁剪。[#78486](https://github.com/ClickHouse/ClickHouse/pull/78486) ([Kseniia Sumarokova](https://github.com/kssenii)). -* 在只读 `MergeTree` 表中支持后台刷新,从而可以使用任意数量的分布式读取器查询可更新表(ClickHouse 原生数据湖)。[#76467](https://github.com/ClickHouse/ClickHouse/pull/76467)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 支持使用自定义磁盘存储数据库元数据文件。目前仅能在服务器全局级别进行配置。[#77365](https://github.com/ClickHouse/ClickHouse/pull/77365)([Tuan Pham Anh](https://github.com/tuanpach))。 +* 为反序列化后的向量相似度索引添加了内存缓存,这应当能加快重复的近似最近邻(ANN)搜索查询。新缓存的大小由服务器设置项 `vector_similarity_index_cache_size` 和 `vector_similarity_index_cache_max_entries` 控制。此功能取代了早期版本中的 skipping index 缓存功能。[#77905](https://github.com/ClickHouse/ClickHouse/pull/77905)([Shankar Iyer](https://github.com/shankar-iyer))。 +* 支持 Delta Lake 的分区剪枝。 [#78486](https://github.com/ClickHouse/ClickHouse/pull/78486) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 为只读 `MergeTree` 表增加对后台刷新的支持,从而可以在拥有无限数量的分布式读取节点的情况下查询可更新表(ClickHouse 原生数据湖)。[#76467](https://github.com/ClickHouse/ClickHouse/pull/76467)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 支持使用自定义磁盘来存储数据库元数据文件。目前只能在服务器全局级别进行配置。[#77365](https://github.com/ClickHouse/ClickHouse/pull/77365) ([Tuan Pham Anh](https://github.com/tuanpach))。 * 在 plain_rewritable 磁盘上支持 `ALTER TABLE ... ATTACH|DETACH|MOVE|REPLACE PARTITION`。 [#77406](https://github.com/ClickHouse/ClickHouse/pull/77406) ([Julia Kartseva](https://github.com/jkartseva))。 -* 为 `Kafka` 表引擎添加用于 `SASL` 配置和凭证的表设置。这样可以在 `CREATE TABLE` 语句中直接配置 Kafka 及 Kafka 兼容系统的基于 SASL 的认证,而无需使用配置文件或命名集合。[#78810](https://github.com/ClickHouse/ClickHouse/pull/78810)([Christoph Wurm](https://github.com/cwurm))。 -* 允许为 MergeTree 表设置 `default_compression_codec`:当 CREATE 查询中未为给定列显式定义压缩编解码器时,将使用该设置。由此关闭了 [#42005](https://github.com/ClickHouse/ClickHouse/issues/42005)。[#66394](https://github.com/ClickHouse/ClickHouse/pull/66394)([gvoelfin](https://github.com/gvoelfin))。 -* 在集群配置中添加 `bind_host` 设置,使 ClickHouse 能在分布式连接中使用特定的网络。[#74741](https://github.com/ClickHouse/ClickHouse/pull/74741) ([Todd Yocum](https://github.com/toddyocum))。 -* 在 `system.tables` 中新增一列 `parametrized_view_parameters`。解决了 [https://github.com/clickhouse/clickhouse/issues/66756](https://github.com/clickhouse/clickhouse/issues/66756)。[#75112](https://github.com/ClickHouse/ClickHouse/pull/75112)([NamNguyenHoai](https://github.com/NamHoaiNguyen))。 -* 允许修改数据库注释。关闭 [#73351](https://github.com/ClickHouse/ClickHouse/issues/73351) ### 用户可见变更的文档条目。[#75622](https://github.com/ClickHouse/ClickHouse/pull/75622) ([NamNguyenHoai](https://github.com/NamHoaiNguyen)). +* 为 `Kafka` 表引擎添加用于 `SASL` 配置和凭据的表设置。这样可以在 `CREATE TABLE` 语句中直接配置到 Kafka 和兼容 Kafka 系统的基于 SASL 的身份验证,而无需使用配置文件或命名集合。[#78810](https://github.com/ClickHouse/ClickHouse/pull/78810)([Christoph Wurm](https://github.com/cwurm))。 +* 允许为 MergeTree 表设置 `default_compression_codec`:当 CREATE 查询未为相应列显式指定压缩编解码器时,将使用该设置。这解决了 [#42005](https://github.com/ClickHouse/ClickHouse/issues/42005)。[#66394](https://github.com/ClickHouse/ClickHouse/pull/66394)([gvoelfin](https://github.com/gvoelfin))。 +* 在 clusters 配置中添加 `bind_host` 设置,使 ClickHouse 能在分布式连接中使用特定网络。[#74741](https://github.com/ClickHouse/ClickHouse/pull/74741) ([Todd Yocum](https://github.com/toddyocum))。 +* 在 `system.tables` 中新增一列 `parametrized_view_parameters`。修复 [https://github.com/clickhouse/clickhouse/issues/66756](https://github.com/clickhouse/clickhouse/issues/66756)。[#75112](https://github.com/ClickHouse/ClickHouse/pull/75112)([NamNguyenHoai](https://github.com/NamHoaiNguyen))。 +* 允许修改数据库注释。Closes [#73351](https://github.com/ClickHouse/ClickHouse/issues/73351) ### 面向用户的变更文档条目。[#75622](https://github.com/ClickHouse/ClickHouse/pull/75622) ([NamNguyenHoai](https://github.com/NamHoaiNguyen))。 * 在 PostgreSQL 兼容协议中支持 `SCRAM-SHA-256` 身份验证。[#76839](https://github.com/ClickHouse/ClickHouse/pull/76839) ([scanhex12](https://github.com/scanhex12))。 -* 添加函数 `arrayLevenshteinDistance`、`arrayLevenshteinDistanceWeighted` 和 `arraySimilarity`。[#77187](https://github.com/ClickHouse/ClickHouse/pull/77187)([Mikhail f. Shiryaev](https://github.com/Felixoid))。 -* 设置 `parallel_distributed_insert_select` 现在在对 `ReplicatedMergeTree` 执行 `INSERT SELECT` 时也会生效(此前只能用于 Distributed 表)。[#78041](https://github.com/ClickHouse/ClickHouse/pull/78041) ([Igor Nikonov](https://github.com/devcrafter))。 -* 引入 `toInterval` 函数。该函数接受两个参数(value 和 unit),并将数值转换为指定的 `Interval` 类型。[#78723](https://github.com/ClickHouse/ClickHouse/pull/78723)([Andrew Davis](https://github.com/pulpdrew))。 -* 在 iceberg 表函数和引擎中新增了多种便捷方式,用于解析根级 `metadata.json` 文件。修复了 [#78455](https://github.com/ClickHouse/ClickHouse/issues/78455)。[#78475](https://github.com/ClickHouse/ClickHouse/pull/78475)([Daniil Ivanik](https://github.com/divanik))。 -* 为 ClickHouse 的 SSH 协议添加对基于密码认证的支持。 [#78586](https://github.com/ClickHouse/ClickHouse/pull/78586) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 - - - -#### 实验性功能 -* 在 `WHERE` 子句中 `EXISTS` 表达式的参数里支持相关子查询。修复 [#72459](https://github.com/ClickHouse/ClickHouse/issues/72459)。[#76078](https://github.com/ClickHouse/ClickHouse/pull/76078)([Dmitry Novik](https://github.com/novikd))。 -* 新增 `sparseGrams` 和 `sparseGramsHashes` 函数的 ASCII 和 UTF-8 版本。作者:[scanhex12](https://github.com/scanhex12)。[#78176](https://github.com/ClickHouse/ClickHouse/pull/78176)([Pervakov Grigorii](https://github.com/GrigoryPervakov))。请勿使用:该实现将在后续版本中更改。 +* 新增函数 `arrayLevenshteinDistance`、`arrayLevenshteinDistanceWeighted` 和 `arraySimilarity`。 [#77187](https://github.com/ClickHouse/ClickHouse/pull/77187) ([Mikhail f. Shiryaev](https://github.com/Felixoid)). +* 设置 `parallel_distributed_insert_select` 现在也会对向 `ReplicatedMergeTree` 执行的 `INSERT SELECT` 生效(之前则需要通过 Distributed 表实现)。[#78041](https://github.com/ClickHouse/ClickHouse/pull/78041)([Igor Nikonov](https://github.com/devcrafter))。 +* 引入 `toInterval` 函数。该函数接受 2 个参数(值和单位),并将该值转换为指定的 `Interval` 类型。[#78723](https://github.com/ClickHouse/ClickHouse/pull/78723)([Andrew Davis](https://github.com/pulpdrew))。 +* 在 iceberg 表函数和引擎中新增多种便捷方式,用于定位根 `metadata.json` 文件。修复 [#78455](https://github.com/ClickHouse/ClickHouse/issues/78455)。[#78475](https://github.com/ClickHouse/ClickHouse/pull/78475)([Daniil Ivanik](https://github.com/divanik))。 +* 在 ClickHouse 的 SSH 协议中支持基于密码的身份验证。[#78586](https://github.com/ClickHouse/ClickHouse/pull/78586) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 +#### 实验性特性 +* 支持在 `WHERE` 子句中将关联子查询用作 `EXISTS` 表达式的参数。关闭 [#72459](https://github.com/ClickHouse/ClickHouse/issues/72459)。[#76078](https://github.com/ClickHouse/ClickHouse/pull/76078)([Dmitry Novik](https://github.com/novikd))。 +* 新增 `sparseGrams` 和 `sparseGramsHashes` 函数的 ASCII 和 UTF-8 版本。作者:[scanhex12](https://github.com/scanhex12)。[#78176](https://github.com/ClickHouse/ClickHouse/pull/78176)([Pervakov Grigorii](https://github.com/GrigoryPervakov))。请不要使用:其实现将在后续版本中发生变化。 #### 性能优化 -* 使用惰性列(lazy columns)来优化性能,这些列会在执行 ORDER BY 和 LIMIT 之后再读取数据。[#55518](https://github.com/ClickHouse/ClickHouse/pull/55518) ([Xiaozhe Yu](https://github.com/wudidapaopao))。 -* 现在默认启用查询条件缓存。 [#79080](https://github.com/ClickHouse/ClickHouse/pull/79080) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* 通过对 `col->insertFrom()` 调用进行去虚拟化,加速 JOIN 结果的构建。[#77350](https://github.com/ClickHouse/ClickHouse/pull/77350) ([Alexander Gololobov](https://github.com/davenger)). -* 如果可能,将过滤查询计划步骤中的等值条件合并到 JOIN 条件中,以便将它们用作哈希表的键。 [#78877](https://github.com/ClickHouse/ClickHouse/pull/78877) ([Dmitry Novik](https://github.com/novikd))。 -* 当 JOIN 键同时是两侧主键(PK)的前缀时,对 JOIN 使用动态分片。该优化可通过 `query_plan_join_shard_by_pk_ranges` 设置启用(默认禁用)。[#74733](https://github.com/ClickHouse/ClickHouse/pull/74733) ([Nikolai Kochetov](https://github.com/KochetovNicolai))。 +* 通过使用惰性列来优化性能,使数据在执行 ORDER BY 和 LIMIT 之后才被读取。 [#55518](https://github.com/ClickHouse/ClickHouse/pull/55518) ([Xiaozhe Yu](https://github.com/wudidapaopao)). +* 默认启用查询条件缓存。 [#79080](https://github.com/ClickHouse/ClickHouse/pull/79080) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* 通过对 `col->insertFrom()` 调用进行去虚拟化,加速构建 JOIN 结果集。[#77350](https://github.com/ClickHouse/ClickHouse/pull/77350)([Alexander Gololobov](https://github.com/davenger))。 +* 在可能的情况下,将查询计划中过滤步骤中的等值条件合并到 JOIN 条件中,从而可以将其用作哈希表键。[#78877](https://github.com/ClickHouse/ClickHouse/pull/78877) ([Dmitry Novik](https://github.com/novikd))。 +* 当 JOIN 键在两侧都为主键(PK)的前缀时,对 JOIN 使用动态分片。该优化可通过 `query_plan_join_shard_by_pk_ranges` 设置启用(默认禁用)。[#74733](https://github.com/ClickHouse/ClickHouse/pull/74733)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 * 支持基于列的上下边界值进行 `Iceberg` 数据剪枝。修复 [#77638](https://github.com/ClickHouse/ClickHouse/issues/77638)。[#78242](https://github.com/ClickHouse/ClickHouse/pull/78242)([alesapin](https://github.com/alesapin))。 -* 为 `Iceberg` 实现了简单的 count 优化。现在使用 `count()` 且不带任何过滤条件的查询应该会更快。修复了 [#77639](https://github.com/ClickHouse/ClickHouse/issues/77639)。[#78090](https://github.com/ClickHouse/ClickHouse/pull/78090)([alesapin](https://github.com/alesapin))。 -* 新增功能,可通过 `max_merge_delayed_streams_for_parallel_write` 配置合并操作中可并行刷新的列数(这应当能将垂直合并到 S3 的内存占用降低约 25 倍)。[#77922](https://github.com/ClickHouse/ClickHouse/pull/77922) ([Azat Khuzhin](https://github.com/azat))。 -* 在缓存被被动使用时(例如用于合并操作),禁用 `filesystem_cache_prefer_bigger_buffer_size`。这会降低合并时的内存消耗。[#77898](https://github.com/ClickHouse/ClickHouse/pull/77898) ([Kseniia Sumarokova](https://github.com/kssenii))。 -* 现在,我们根据副本数量来确定在启用并行副本读取时的任务规模。当需要读取的数据量不是特别大时,这可以在副本之间实现更合理的工作分配。[#78695](https://github.com/ClickHouse/ClickHouse/pull/78695) ([Nikita Taranov](https://github.com/nickitat)). -* 为 `ORC` 格式引入异步 I/O 预取,通过隐藏远程 I/O 延迟来提升整体性能。[#70534](https://github.com/ClickHouse/ClickHouse/pull/70534) ([李扬](https://github.com/taiyang-li))。 -* 预分配用于异步插入的内存以提升性能。 [#74945](https://github.com/ClickHouse/ClickHouse/pull/74945) ([Ilya Golshtein](https://github.com/ilejn)). -* 在可使用 `multiRead` 的地方,通过避免使用单个 `get` 请求来减少 Keeper 请求数量,因为在副本数量增加的情况下,单个 `get` 请求可能会给 Keeper 带来显著负载。[#56862](https://github.com/ClickHouse/ClickHouse/pull/56862)([Nikolay Degterinsky](https://github.com/evillique))。 -* 对在 Nullable 参数上执行函数进行了小幅优化。 [#76489](https://github.com/ClickHouse/ClickHouse/pull/76489) ([李扬](https://github.com/taiyang-li))。 -* 优化 `arraySort`。[#76850](https://github.com/ClickHouse/ClickHouse/pull/76850) ([李扬](https://github.com/taiyang-li)). -* 将同一部分的标记合并后统一写入查询条件缓存,以减少锁开销。 [#77377](https://github.com/ClickHouse/ClickHouse/pull/77377) ([zhongyuankai](https://github.com/zhongyuankai)). -* 为仅包含单个括号展开的查询优化 `s3Cluster` 的性能。 [#77686](https://github.com/ClickHouse/ClickHouse/pull/77686) ([Tomáš Hromada](https://github.com/gyfis)). -* 优化按单个 Nullable 或 LowCardinality 列进行 ORDER BY 的性能。 [#77789](https://github.com/ClickHouse/ClickHouse/pull/77789) ([李扬](https://github.com/taiyang-li)). -* 优化 `Native` 格式的内存使用。 [#78442](https://github.com/ClickHouse/ClickHouse/pull/78442) ([Azat Khuzhin](https://github.com/azat)). -* 小优化:如果需要进行类型转换,则不要将 `count(if(...))` 重写为 `countIf`。关闭 [#78564](https://github.com/ClickHouse/ClickHouse/issues/78564)。[#78565](https://github.com/ClickHouse/ClickHouse/pull/78565) ([李扬](https://github.com/taiyang-li))。 -* `hasAll` 函数现在可以利用 `tokenbf_v1` 和 `ngrambf_v1` 两种全文跳过索引。 [#77662](https://github.com/ClickHouse/ClickHouse/pull/77662) ([UnamedRus](https://github.com/UnamedRus))。 -* 向量相似度索引可能会导致内存过度分配,最高可达实际需求的 2 倍。本修复重新设计了内存分配策略,从而降低内存消耗并提升向量相似度索引缓存的效率。(问题 [#78056](https://github.com/ClickHouse/ClickHouse/issues/78056))。[#78394](https://github.com/ClickHouse/ClickHouse/pull/78394)([Shankar Iyer](https://github.com/shankar-iyer))。 -* 为 `system.metric_log` 表引入 `schema_type` 设置,用于指定 schema 类型。允许的 schema 有三种:`wide` —— 当前的 schema,每个指标/事件在单独的列中(对读取单独列最有效);`transposed` —— 类似于 `system.asynchronous_metric_log`,指标/事件按行存储;以及最有趣的 `transposed_with_wide_view` —— 使用 `transposed` schema 创建底层表,同时引入一个具有 `wide` schema 的视图,将查询转换为在底层表上执行。在 `transposed_with_wide_view` 中,视图不支持子秒级时间精度,`event_time_microseconds` 只是为了向后兼容而保留的别名。 [#78412](https://github.com/ClickHouse/ClickHouse/pull/78412) ([alesapin](https://github.com/alesapin)). - - - - +* 为 `Iceberg` 实现了基础的 `count()` 优化。现在带有 `count()` 且没有任何过滤条件的查询应该会更快。关闭了 [#77639](https://github.com/ClickHouse/ClickHouse/issues/77639)。[#78090](https://github.com/ClickHouse/ClickHouse/pull/78090)([alesapin](https://github.com/alesapin))。 +* 添加了通过 `max_merge_delayed_streams_for_parallel_write` 配置合并操作中可并行刷写列数的能力(这应当可以将写入 S3 的纵向合并的内存使用量降低约 25 倍)。 [#77922](https://github.com/ClickHouse/ClickHouse/pull/77922) ([Azat Khuzhin](https://github.com/azat)). +* 在缓存以被动方式使用时(例如用于合并操作),禁用 `filesystem_cache_prefer_bigger_buffer_size`。这可以降低合并时的内存消耗。[#77898](https://github.com/ClickHouse/ClickHouse/pull/77898) ([Kseniia Sumarokova](https://github.com/kssenii))。 +* 现在我们使用副本数量来确定在启用并行副本读取时的读取任务大小。这样在待读取数据量不太大的情况下,可以在副本之间实现更好的工作分配。 [#78695](https://github.com/ClickHouse/ClickHouse/pull/78695) ([Nikita Taranov](https://github.com/nickitat)). +* 为 `ORC` 格式增加异步 IO 预取支持,通过隐藏远程 IO 延迟来提升整体性能。 [#70534](https://github.com/ClickHouse/ClickHouse/pull/70534) ([李扬](https://github.com/taiyang-li)). +* 预先为异步插入分配内存以提升性能。[#74945](https://github.com/ClickHouse/ClickHouse/pull/74945) ([Ilya Golshtein](https://github.com/ilejn))。 +* 通过在可以使用 `multiRead` 的地方避免使用单个 `get` 请求,来减少对 Keeper 的请求数量;在副本数量增加的情况下,这些单个 `get` 请求可能会给 Keeper 带来显著负载。[#56862](https://github.com/ClickHouse/ClickHouse/pull/56862) ([Nikolay Degterinsky](https://github.com/evillique))。 +* 对在 Nullable 参数上运行的函数进行了小幅优化。 [#76489](https://github.com/ClickHouse/ClickHouse/pull/76489) ([李扬](https://github.com/taiyang-li)). +* 优化 `arraySort`。 [#76850](https://github.com/ClickHouse/ClickHouse/pull/76850) ([李扬](https://github.com/taiyang-li)). +* 将同一部分的标记合并,一次性写入查询条件缓存,以减少锁开销。[#77377](https://github.com/ClickHouse/ClickHouse/pull/77377) ([zhongyuankai](https://github.com/zhongyuankai))。 +* 为仅包含一次括号展开的查询优化 `s3Cluster` 的性能。[#77686](https://github.com/ClickHouse/ClickHouse/pull/77686) ([Tomáš Hromada](https://github.com/gyfis))。 +* 优化对单个 Nullable 或 LowCardinality 列的 ORDER BY。[#77789](https://github.com/ClickHouse/ClickHouse/pull/77789) ([李扬](https://github.com/taiyang-li))。 +* 优化 `Native` 格式的内存使用。[#78442](https://github.com/ClickHouse/ClickHouse/pull/78442) ([Azat Khuzhin](https://github.com/azat))。 +* 小幅优化:如果需要进行类型转换,则不要将 `count(if(...))` 重写为 `countIf`。关闭 [#78564](https://github.com/ClickHouse/ClickHouse/issues/78564)。[#78565](https://github.com/ClickHouse/ClickHouse/pull/78565)([李扬](https://github.com/taiyang-li))。 +* `hasAll` 函数现在可以利用 `tokenbf_v1`、`ngrambf_v1` 这类全文跳过索引。[#77662](https://github.com/ClickHouse/ClickHouse/pull/77662)([UnamedRus](https://github.com/UnamedRus))。 +* 向量相似度索引可能会导致主内存分配过多,最多达到实际需求的 2 倍。本次修复重新设计了内存分配策略,降低了内存消耗,并提升了向量相似度索引缓存的有效性。(issue [#78056](https://github.com/ClickHouse/ClickHouse/issues/78056))。[#78394](https://github.com/ClickHouse/ClickHouse/pull/78394)([Shankar Iyer](https://github.com/shankar-iyer))。 +* 为 `system.metric_log` 表引入一个用于指定表结构类型的设置 `schema_type`。允许的表结构有三种:`wide` —— 当前使用的结构,每个指标/事件(metric/event)位于单独的列中(对读取单列最为高效);`transposed` —— 类似于 `system.asynchronous_metric_log`,指标/事件按行存储;以及最有意思的 `transposed_with_wide_view` —— 底层表使用 `transposed` 结构创建,同时再引入一个 `wide` 结构的视图,用于将针对视图的查询转换到底层表。在 `transposed_with_wide_view` 中,不支持视图的子秒级时间精度,`event_time_microseconds` 只是为了向后兼容而保留的别名。[#78412](https://github.com/ClickHouse/ClickHouse/pull/78412) ([alesapin](https://github.com/alesapin))。 #### 改进 -* 对 `Distributed` 查询的查询计划进行序列化。新增了一个设置项 `serialize_query_plan`。启用后,来自 `Distributed` 表的查询在远程执行时将使用序列化的查询计划。这为 TCP 协议引入了一种新的数据包类型,需要在服务器配置中添加 `true` 以允许处理该数据包。[#69652](https://github.com/ClickHouse/ClickHouse/pull/69652)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 -* 支持从视图中读取 `JSON` 类型和子列。[#76903](https://github.com/ClickHouse/ClickHouse/pull/76903) ([Pavel Kruglov](https://github.com/Avogar)). -* 已支持 ALTER DATABASE ... ON CLUSTER。 [#79242](https://github.com/ClickHouse/ClickHouse/pull/79242) ([Tuan Pham Anh](https://github.com/tuanpach)). -* 可刷新物化视图的刷新操作现在会记录在 `system.query_log` 中。[#71333](https://github.com/ClickHouse/ClickHouse/pull/71333) ([Michael Kolupaev](https://github.com/al13n321))。 -* 现在可以通过配置中的一项新设置将用户自定义函数(UDF)标记为确定性(deterministic)。此外,查询缓存现在会检查在查询中被调用的 UDF 是否为确定性函数。如果是,则会缓存该查询的结果。(Issue [#59988](https://github.com/ClickHouse/ClickHouse/issues/59988))。[#77769](https://github.com/ClickHouse/ClickHouse/pull/77769)([Jimmy Aguilar Mena](https://github.com/Ergus))。 -* 为所有类型的副本任务启用了退避机制,从而降低 CPU 使用率、内存使用率以及日志文件大小。新增了 `max_postpone_time_for_failed_replicated_fetches_ms`、`max_postpone_time_for_failed_replicated_merges_ms` 和 `max_postpone_time_for_failed_replicated_tasks_ms` 这几个设置项,其行为类似于 `max_postpone_time_for_failed_mutations_ms`。[#74576](https://github.com/ClickHouse/ClickHouse/pull/74576) ([MikhailBurdukov](https://github.com/MikhailBurdukov))。 -* 将 `query_id` 添加到 `system.errors`。修复 [#75815](https://github.com/ClickHouse/ClickHouse/issues/75815)。[#76581](https://github.com/ClickHouse/ClickHouse/pull/76581)([Vladimir Baikov](https://github.com/bkvvldmr))。 -* 添加了将 `UInt128` 转换为 `IPv6` 的支持。这样就可以对 `IPv6` 执行 `bitAnd` 运算和算术运算,并将结果再转换回 `IPv6`。关闭了 [#76752](https://github.com/ClickHouse/ClickHouse/issues/76752)。同时也允许将对 `IPv6` 进行 `bitAnd` 运算的结果转换回 `IPv6`。另见 [#57707](https://github.com/ClickHouse/ClickHouse/pull/57707)。[#76928](https://github.com/ClickHouse/ClickHouse/pull/76928)([Muzammil Abdul Rehman](https://github.com/muzammilar))。 -* 默认情况下,不在 `Variant` 类型的文本格式中解析特殊的 `Bool` 值。可以通过设置 `allow_special_bool_values_inside_variant` 来启用此行为。[#76974](https://github.com/ClickHouse/ClickHouse/pull/76974) ([Pavel Kruglov](https://github.com/Avogar))。 -* 支持在会话级别和服务器级别配置低 `priority` 查询的每个任务等待时间。[#77013](https://github.com/ClickHouse/ClickHouse/pull/77013) ([VicoWu](https://github.com/VicoWu))。 -* 为 JSON 数据类型的值实现了比较功能。现在可以以类似于 Map 的方式比较 JSON 对象。[#77397](https://github.com/ClickHouse/ClickHouse/pull/77397)([Pavel Kruglov](https://github.com/Avogar))。 -* 改进 `system.kafka_consumers` 的权限支持。转发 `librdkafka` 的内部错误(顺便一提,这个库很糟糕)。[#77700](https://github.com/ClickHouse/ClickHouse/pull/77700) ([Ilya Golshtein](https://github.com/ilejn))。 -* 添加了对 Buffer 表引擎设置的校验。 [#77840](https://github.com/ClickHouse/ClickHouse/pull/77840) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). -* 新增配置项 `enable_hdfs_pread`,用于在 `HDFS` 中启用或禁用 pread。[#77885](https://github.com/ClickHouse/ClickHouse/pull/77885) ([kevinyhzou](https://github.com/KevinyhZou))。 -* 添加 profile events,用于统计 ZooKeeper 中 `multi` 读写请求的数量。[#77888](https://github.com/ClickHouse/ClickHouse/pull/77888) ([JackyWoo](https://github.com/JackyWoo))。 -* 允许在开启 `disable_insertion_and_mutation` 时创建临时表并向其插入数据。 [#77901](https://github.com/ClickHouse/ClickHouse/pull/77901) ([Xu Jia](https://github.com/XuJia0210)). +* 对 `Distributed` 查询的查询计划进行序列化。新增设置项 `serialize_query_plan`。启用后,来自 `Distributed` 表的查询在远程执行时将使用序列化的查询计划。这会在 TCP 协议中引入一个新的数据包类型,需要在服务器配置中添加 `true`,以允许处理该数据包。[#69652](https://github.com/ClickHouse/ClickHouse/pull/69652)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 +* 支持从视图中读取 `JSON` 类型及其子列。[#76903](https://github.com/ClickHouse/ClickHouse/pull/76903) ([Pavel Kruglov](https://github.com/Avogar)). +* 支持在集群上使用 `ALTER DATABASE ... ON CLUSTER`。 [#79242](https://github.com/ClickHouse/ClickHouse/pull/79242) ([Tuan Pham Anh](https://github.com/tuanpach)). +* 可刷新的物化视图的刷新操作现在会记录在 `system.query_log` 中。[#71333](https://github.com/ClickHouse/ClickHouse/pull/71333) ([Michael Kolupaev](https://github.com/al13n321)). +* 现在可以通过在其配置中使用一个新的设置,将用户自定义函数(UDF)标记为确定性的。此外,查询缓存现在会检查查询中调用的 UDF 是否为确定性的;如果是,则会缓存该查询的结果。(Issue [#59988](https://github.com/ClickHouse/ClickHouse/issues/59988))。[#77769](https://github.com/ClickHouse/ClickHouse/pull/77769)([Jimmy Aguilar Mena](https://github.com/Ergus))。 +* 为所有类型的复制任务启用了退避逻辑,这样可以降低 CPU 使用率、内存使用率以及日志文件大小。新增了与 `max_postpone_time_for_failed_mutations_ms` 类似的设置:`max_postpone_time_for_failed_replicated_fetches_ms`、`max_postpone_time_for_failed_replicated_merges_ms` 和 `max_postpone_time_for_failed_replicated_tasks_ms`。[#74576](https://github.com/ClickHouse/ClickHouse/pull/74576) ([MikhailBurdukov](https://github.com/MikhailBurdukov))。 +* 将 `query_id` 添加到 `system.errors`。解决 [#75815](https://github.com/ClickHouse/ClickHouse/issues/75815)。[#76581](https://github.com/ClickHouse/ClickHouse/pull/76581)([Vladimir Baikov](https://github.com/bkvvldmr))。 +* 新增支持将 `UInt128` 转换为 `IPv6`。这使得可以对 `IPv6` 执行 `bitAnd` 运算和算术操作,并将结果转换回 `IPv6`。解决了 [#76752](https://github.com/ClickHouse/ClickHouse/issues/76752)。同样也可以将对 `IPv6` 执行 `bitAnd` 运算得到的结果再转换回 `IPv6`。另见 [#57707](https://github.com/ClickHouse/ClickHouse/pull/57707)。[#76928](https://github.com/ClickHouse/ClickHouse/pull/76928)([Muzammil Abdul Rehman](https://github.com/muzammilar))。 +* 默认情况下,不在 `Variant` 类型的文本格式中解析特殊的 `Bool` 值。可以通过设置 `allow_special_bool_values_inside_variant` 来启用此行为。 [#76974](https://github.com/ClickHouse/ClickHouse/pull/76974) ([Pavel Kruglov](https://github.com/Avogar)). +* 在会话级和服务器级支持为低 `priority` 查询按任务配置等待时间。[#77013](https://github.com/ClickHouse/ClickHouse/pull/77013) ([VicoWu](https://github.com/VicoWu)). +* 为 JSON 数据类型的值实现了比较功能。现在可以像比较 Map 一样比较 JSON 对象。[#77397](https://github.com/ClickHouse/ClickHouse/pull/77397) ([Pavel Kruglov](https://github.com/Avogar))。 +* 通过 `system.kafka_consumers` 改进了权限支持。转发内部的 `librdkafka` 错误(顺带一提,这个库本身相当糟糕)。[#77700](https://github.com/ClickHouse/ClickHouse/pull/77700) ([Ilya Golshtein](https://github.com/ilejn)). +* 为 Buffer 表引擎的设置增加了验证。 [#77840](https://github.com/ClickHouse/ClickHouse/pull/77840) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). +* 添加配置项 `enable_hdfs_pread`,用于在 `HDFS` 中启用或禁用 `pread`。[#77885](https://github.com/ClickHouse/ClickHouse/pull/77885) ([kevinyhzou](https://github.com/KevinyhZou))。 +* 增加用于统计 ZooKeeper `multi` 读写请求数量的 profile events。[#77888](https://github.com/ClickHouse/ClickHouse/pull/77888) ([JackyWoo](https://github.com/JackyWoo)). +* 在开启 `disable_insertion_and_mutation` 时,仍允许创建临时表并向其中插入数据。[#77901](https://github.com/ClickHouse/ClickHouse/pull/77901) ([Xu Jia](https://github.com/XuJia0210)). * 将 `max_insert_delayed_streams_for_parallel_write` 降为 100。[#77919](https://github.com/ClickHouse/ClickHouse/pull/77919)([Azat Khuzhin](https://github.com/azat))。 -* 修复 Joda 语法中的年份解析问题(如果你好奇的话,这是来自 Java 世界的东西),例如 `yyy`。 [#77973](https://github.com/ClickHouse/ClickHouse/pull/77973) ([李扬](https://github.com/taiyang-li))。 -* 在附加 `MergeTree` 表的各个 part 时,将会按照其数据块顺序进行,这对于诸如 `ReplacingMergeTree` 等特殊合并算法非常重要。此更改解决了 [#71009](https://github.com/ClickHouse/ClickHouse/issues/71009)。[#77976](https://github.com/ClickHouse/ClickHouse/pull/77976)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 查询掩码规则现在可以在发生匹配时抛出 `LOGICAL_ERROR`。这有助于检查预定义的密码是否在日志中的任何地方泄露。[#78094](https://github.com/ClickHouse/ClickHouse/pull/78094) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 -* 向 `information_schema.tables` 添加了 `index_length_column` 列,以提高与 MySQL 的兼容性。[#78119](https://github.com/ClickHouse/ClickHouse/pull/78119)([Paweł Zakrzewski](https://github.com/KrzaQ))。 -* 引入两个新指标:`TotalMergeFailures` 和 `NonAbortedMergeFailures`。这些指标用于检测在短时间内出现过多合并失败的情况。[#78150](https://github.com/ClickHouse/ClickHouse/pull/78150) ([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 -* 修复在使用路径样式且未指定 key 时对 S3 URL 的错误解析。[#78185](https://github.com/ClickHouse/ClickHouse/pull/78185)([Arthur Passos](https://github.com/arthurpassos))。 -* 修复异步度量指标 `BlockActiveTime`、`BlockDiscardTime`、`BlockWriteTime`、`BlockQueueTime` 和 `BlockReadTime` 的错误数值(在修改之前会将 1 秒错误地报告为 0.001)。 [#78211](https://github.com/ClickHouse/ClickHouse/pull/78211) ([filimonov](https://github.com/filimonov)). -* 在向 StorageS3(Azure)Queue 的物化视图推送数据时,对错误的重试现在会遵循 `loading_retries` 限制。在此之前,此类错误会被无限次重试。[#78313](https://github.com/ClickHouse/ClickHouse/pull/78313)([Kseniia Sumarokova](https://github.com/kssenii))。 -* 在使用 `delta-kernel-rs` 实现的 DeltaLake 中,优化性能并修复进度条。[#78368](https://github.com/ClickHouse/ClickHouse/pull/78368) ([Kseniia Sumarokova](https://github.com/kssenii))。 -* 为运行时磁盘添加对 `include`、`from_env`、`from_zk` 的支持。关闭 [#78177](https://github.com/ClickHouse/ClickHouse/issues/78177)。[#78470](https://github.com/ClickHouse/ClickHouse/pull/78470)([Kseniia Sumarokova](https://github.com/kssenii))。 -* 在 `system.warnings` 表中为长时间运行的 mutation 添加动态警告。[#78658](https://github.com/ClickHouse/ClickHouse/pull/78658) ([Bharat Nallan](https://github.com/bharatnc))。 -* 在系统表 `system.query_condition_cache` 中新增字段 `condition`。该字段存储明文条件,其哈希值被用作查询条件缓存中的键。 [#78671](https://github.com/ClickHouse/ClickHouse/pull/78671) ([Robert Schulze](https://github.com/rschu1ze)). -* 允许 Hive 分区键为空值。 [#78816](https://github.com/ClickHouse/ClickHouse/pull/78816) ([Arthur Passos](https://github.com/arthurpassos)). -* 修复 `IN` 子句中对 `BFloat16` 的类型转换(例如,`SELECT toBFloat16(1) IN [1, 2, 3];` 现在返回 `1`)。解决 [#78754](https://github.com/ClickHouse/ClickHouse/issues/78754)。[#78839](https://github.com/ClickHouse/ClickHouse/pull/78839)([Raufs Dunamalijevs](https://github.com/rienath))。 -* 如果设置了 `disk = ...`,则不要检查位于其他磁盘上的 `MergeTree` 数据部分。 [#78855](https://github.com/ClickHouse/ClickHouse/pull/78855) ([Azat Khuzhin](https://github.com/azat)). -* 使 `system.query_log` 中 `used_data_type_families` 的数据类型以规范名称形式记录。[#78972](https://github.com/ClickHouse/ClickHouse/pull/78972)([Kseniia Sumarokova](https://github.com/kssenii))。 -* 在 `recoverLostReplica` 过程中对设置进行清理的方式,与 [#78637](https://github.com/ClickHouse/ClickHouse/pull/78637) 中的做法相同。[#79113](https://github.com/ClickHouse/ClickHouse/pull/79113)([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 +* 修复 Joda 语法中的年份解析(如果你在好奇,这是来自 Java 生态),例如 `yyy`。[#77973](https://github.com/ClickHouse/ClickHouse/pull/77973)([李扬](https://github.com/taiyang-li))。 +* 对 `MergeTree` 表的数据片段进行附加时,将按照其块顺序执行,这对 `ReplacingMergeTree` 等特殊合并算法非常重要。此更改从而关闭了 [#71009](https://github.com/ClickHouse/ClickHouse/issues/71009)。[#77976](https://github.com/ClickHouse/ClickHouse/pull/77976)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 查询脱敏规则现在可以在发生匹配时抛出 `LOGICAL_ERROR`。这有助于检查预定义密码是否在日志中的任意位置泄露。[#78094](https://github.com/ClickHouse/ClickHouse/pull/78094) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 +* 在 `information_schema.tables` 中添加了列 `index_length_column`,以提高与 MySQL 的兼容性。 [#78119](https://github.com/ClickHouse/ClickHouse/pull/78119) ([Paweł Zakrzewski](https://github.com/KrzaQ)). +* 引入两个新指标:`TotalMergeFailures` 和 `NonAbortedMergeFailures`。这些指标用于检测在短时间内发生过多合并失败的情况。[#78150](https://github.com/ClickHouse/ClickHouse/pull/78150) ([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 +* 修复在 path-style 模式下未指定 key 时对 S3 URL 的错误解析。 [#78185](https://github.com/ClickHouse/ClickHouse/pull/78185) ([Arthur Passos](https://github.com/arthurpassos)). +* 修正异步指标 `BlockActiveTime`、`BlockDiscardTime`、`BlockWriteTime`、`BlockQueueTime` 和 `BlockReadTime` 的数值错误(在此更改之前,1 秒被错误地上报为 0.001)。 [#78211](https://github.com/ClickHouse/ClickHouse/pull/78211) ([filimonov](https://github.com/filimonov)). +* 在向 StorageS3(Azure)Queue 的物化视图推送数据时,对发生的错误现在会遵循 `loading_retries` 限制。此前,这类错误会被无限次重试。[#78313](https://github.com/ClickHouse/ClickHouse/pull/78313) ([Kseniia Sumarokova](https://github.com/kssenii))。 +* 在 DeltaLake 的 `delta-kernel-rs` 实现中,修复了性能和进度条。 [#78368](https://github.com/ClickHouse/ClickHouse/pull/78368) ([Kseniia Sumarokova](https://github.com/kssenii))。 +* 为运行时磁盘新增对 `include`、`from_env`、`from_zk` 的支持。关闭 [#78177](https://github.com/ClickHouse/ClickHouse/issues/78177)。[#78470](https://github.com/ClickHouse/ClickHouse/pull/78470)([Kseniia Sumarokova](https://github.com/kssenii))。 +* 在 `system.warnings` 表中为长时间运行的 mutation 添加动态警告。 [#78658](https://github.com/ClickHouse/ClickHouse/pull/78658) ([Bharat Nallan](https://github.com/bharatnc)). +* 向系统表 `system.query_condition_cache` 新增字段 `condition`。该字段存储条件的明文形式,其哈希值用作查询条件缓存中的键。[#78671](https://github.com/ClickHouse/ClickHouse/pull/78671) ([Robert Schulze](https://github.com/rschu1ze))。 +* 允许 Hive 分区键为空值。[#78816](https://github.com/ClickHouse/ClickHouse/pull/78816)([Arthur Passos](https://github.com/arthurpassos))。 +* 修复 `BFloat16` 在 `IN` 子句中的类型转换问题(例如,`SELECT toBFloat16(1) IN [1, 2, 3];` 现在返回 `1`)。修复了 [#78754](https://github.com/ClickHouse/ClickHouse/issues/78754)。[#78839](https://github.com/ClickHouse/ClickHouse/pull/78839)([Raufs Dunamalijevs](https://github.com/rienath))。 +* 如果设置了 `disk = ...`,则不要检查位于其他磁盘上的 `MergeTree` 数据片段。[#78855](https://github.com/ClickHouse/ClickHouse/pull/78855) ([Azat Khuzhin](https://github.com/azat)). +* 使 `system.query_log` 中 `used_data_type_families` 的数据类型以规范名称形式记录。[#78972](https://github.com/ClickHouse/ClickHouse/pull/78972) ([Kseniia Sumarokova](https://github.com/kssenii)). +* `recoverLostReplica` 期间的清理设置与此前在 [#78637](https://github.com/ClickHouse/ClickHouse/pull/78637) 中的处理方式相同。[#79113](https://github.com/ClickHouse/ClickHouse/pull/79113)([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 * 在 INFILE 的 schema 推断中使用插入列。 [#78490](https://github.com/ClickHouse/ClickHouse/pull/78490) ([Pervakov Grigorii](https://github.com/GrigoryPervakov)). - - - - -#### 错误修复(官方稳定版本中用户可见的异常行为) - -* 修复在聚合投影中使用 `count(Nullable)` 时不正确的投影分析问题。此更改修复了 [#74495](https://github.com/ClickHouse/ClickHouse/issues/74495)。此 PR 还添加了一些与投影分析相关的日志,以便更清楚地说明为何会使用某个投影或为何不会使用。[#74498](https://github.com/ClickHouse/ClickHouse/pull/74498)([Amos Bird](https://github.com/amosbird))。 -* 修复在执行 `DETACH PART` 时出现的 `Part <...> does not contain in snapshot of previous virtual parts. (PART_IS_TEMPORARILY_LOCKED)` 错误。[#76039](https://github.com/ClickHouse/ClickHouse/pull/76039) ([Aleksei Filatov](https://github.com/aalexfvk)). -* 修复在 analyzer 中包含字面量表达式的 skip 索引无法生效的问题,并在索引分析期间移除多余的类型转换。 [#77229](https://github.com/ClickHouse/ClickHouse/pull/77229) ([Pavel Kruglov](https://github.com/Avogar)). -* 修复了一个错误:当使用 `close_session` 查询参数时不会起任何作用,导致命名会话只有在达到 `session_timeout` 后才会被关闭。[#77336](https://github.com/ClickHouse/ClickHouse/pull/77336)([Alexey Katsman](https://github.com/alexkats))。 -* 修复了在没有关联物化视图的情况下从 NATS 服务器接收消息的问题。[#77392](https://github.com/ClickHouse/ClickHouse/pull/77392) ([Dmitry Novikov](https://github.com/dmitry-sles-novikov))。 -* 修复通过 `merge` 表函数从空的 `FileLog` 读取时的逻辑错误,解决 [#75575](https://github.com/ClickHouse/ClickHouse/issues/75575)。[#77441](https://github.com/ClickHouse/ClickHouse/pull/77441)([Vladimir Cherkasov](https://github.com/vdimir))。 -* 在共享 variant 的 `Dynamic` 序列化中使用默认格式设置。 [#77572](https://github.com/ClickHouse/ClickHouse/pull/77572) ([Pavel Kruglov](https://github.com/Avogar)). -* 修复在本地磁盘上检查表数据路径是否存在的逻辑。[#77608](https://github.com/ClickHouse/ClickHouse/pull/77608)([Tuan Pham Anh](https://github.com/tuanpach))。 -* 修复了在某些类型上向远端发送常量值的问题。 [#77634](https://github.com/ClickHouse/ClickHouse/pull/77634) ([Pavel Kruglov](https://github.com/Avogar)). -* 修复由于 S3/AzureQueue 中上下文过期导致的崩溃。[#77720](https://github.com/ClickHouse/ClickHouse/pull/77720) ([Kseniia Sumarokova](https://github.com/kssenii)). -* 在 RabbitMQ、Nats、Redis、AzureQueue 表引擎中隐藏凭据。[#77755](https://github.com/ClickHouse/ClickHouse/pull/77755) ([Kseniia Sumarokova](https://github.com/kssenii))。 +#### Bug 修复(在官方稳定版本中对用户可见的问题) + +* 修复在聚合投影中使用 `count(Nullable)` 时的错误投影分析,修复了 [#74495](https://github.com/ClickHouse/ClickHouse/issues/74495)。此 PR 还在投影分析相关位置增加了一些日志,用于澄清为什么会使用某个投影或不使用某个投影。[#74498](https://github.com/ClickHouse/ClickHouse/pull/74498) ([Amos Bird](https://github.com/amosbird))。 +* 修复在执行 `DETACH PART` 操作时可能出现的 `Part <...> does not contain in snapshot of previous virtual parts. (PART_IS_TEMPORARILY_LOCKED)` 错误。[#76039](https://github.com/ClickHouse/ClickHouse/pull/76039) ([Aleksei Filatov](https://github.com/aalexfvk))。 +* 修复在 analyzer 中使用包含字面量表达式时无法正常工作的 skip index,并在索引分析过程中移除多余的类型转换。 [#77229](https://github.com/ClickHouse/ClickHouse/pull/77229) ([Pavel Kruglov](https://github.com/Avogar))。 +* 修复了一个问题:`close_session` 查询参数不起作用,导致命名会话只有在 `session_timeout` 之后才会被关闭。[#77336](https://github.com/ClickHouse/ClickHouse/pull/77336) ([Alexey Katsman](https://github.com/alexkats))。 +* 修复了在未附加物化视图的情况下从 NATS 服务器接收消息的问题。[#77392](https://github.com/ClickHouse/ClickHouse/pull/77392) ([Dmitry Novikov](https://github.com/dmitry-sles-novikov)). +* 修复通过 `merge` 表函数从空 `FileLog` 读取时的逻辑错误,关闭 [#75575](https://github.com/ClickHouse/ClickHouse/issues/75575)。[#77441](https://github.com/ClickHouse/ClickHouse/pull/77441)([Vladimir Cherkasov](https://github.com/vdimir))。 +* 在共享 variant 的 `Dynamic` 序列化中使用默认格式设置。[#77572](https://github.com/ClickHouse/ClickHouse/pull/77572)([Pavel Kruglov](https://github.com/Avogar))。 +* 修复在本地磁盘上检查表数据路径是否存在的逻辑。 [#77608](https://github.com/ClickHouse/ClickHouse/pull/77608) ([Tuan Pham Anh](https://github.com/tuanpach)). +* 修复某些类型在向远程端发送常量值时的问题。 [#77634](https://github.com/ClickHouse/ClickHouse/pull/77634) ([Pavel Kruglov](https://github.com/Avogar)). +* 修复由于 S3/AzureQueue 中上下文过期而导致的崩溃。[#77720](https://github.com/ClickHouse/ClickHouse/pull/77720) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 在 RabbitMQ、NATS、Redis、AzureQueue 表引擎中隐藏凭据。[#77755](https://github.com/ClickHouse/ClickHouse/pull/77755) ([Kseniia Sumarokova](https://github.com/kssenii)). * 修复在 `argMin`/`argMax` 中比较 `NaN` 时的未定义行为。 [#77756](https://github.com/ClickHouse/ClickHouse/pull/77756) ([Raúl Marín](https://github.com/Algunenano)). -* 即使在操作不会产生任何待写入数据块的情况下,也要定期检查合并和变更操作是否已被取消。[#77766](https://github.com/ClickHouse/ClickHouse/pull/77766) ([János Benjamin Antal](https://github.com/antaljanosbenjamin))。 -* 修复了在 Replicated 数据库中新添加副本上无法正常工作的可刷新物化视图问题。[#77774](https://github.com/ClickHouse/ClickHouse/pull/77774) ([Michael Kolupaev](https://github.com/al13n321))。 -* 修复在出现 `NOT_FOUND_COLUMN_IN_BLOCK` 错误时可能发生的崩溃。[#77854](https://github.com/ClickHouse/ClickHouse/pull/77854) ([Vladimir Cherkasov](https://github.com/vdimir))。 -* 修复在 S3/AzureQueue 中填充数据时发生的崩溃。[#77878](https://github.com/ClickHouse/ClickHouse/pull/77878) ([Bharat Nallan](https://github.com/bharatnc)). -* 在 SSH 服务器中禁用历史记录的模糊搜索功能(因为它需要 skim 库)。 [#78002](https://github.com/ClickHouse/ClickHouse/pull/78002) ([Azat Khuzhin](https://github.com/azat))。 -* 修复了一个缺陷:当在未建立索引的列上执行向量搜索查询时,如果表中还有另一列向量列且该列定义了向量相似度索引,则会返回不正确的结果。(Issue [#77978](https://github.com/ClickHouse/ClickHouse/issues/77978))。[#78069](https://github.com/ClickHouse/ClickHouse/pull/78069)([Shankar Iyer](https://github.com/shankar-iyer))。 -* 修复一个细微错误:"The requested output format {} is binary... Do you want to output it anyway? [y/N]" 提示。[#78095](https://github.com/ClickHouse/ClickHouse/pull/78095) ([Azat Khuzhin](https://github.com/azat)). -* 修复了在 `toStartOfInterval` 中使用零起点参数时的一个错误。[#78096](https://github.com/ClickHouse/ClickHouse/pull/78096) ([Yarik Briukhovetskyi](https://github.com/yariks5s))。 -* 禁止通过 HTTP 接口指定空的 `session_id` 查询参数。[#78098](https://github.com/ClickHouse/ClickHouse/pull/78098) ([Alexey Katsman](https://github.com/alexkats)). -* 修复 `Replicated` 数据库中的元数据被覆盖问题,该问题可能是在 `ALTER` 查询之后立即执行 `RENAME` 查询时发生的。 [#78107](https://github.com/ClickHouse/ClickHouse/pull/78107) ([Nikolay Degterinsky](https://github.com/evillique)). -* 修复 `NATS` 引擎中的崩溃问题。[#78108](https://github.com/ClickHouse/ClickHouse/pull/78108)([Dmitry Novikov](https://github.com/dmitry-sles-novikov))。 -* 不要在用于 SSH 的嵌入式客户端中尝试创建 history_file(在先前版本中虽然创建始终失败,但仍会尝试)。 [#78112](https://github.com/ClickHouse/ClickHouse/pull/78112) ([Azat Khuzhin](https://github.com/azat))。 -* 修复在执行 `RENAME DATABASE` 或 `DROP TABLE` 查询后,`system.detached_tables` 显示不正确信息的问题。[#78126](https://github.com/ClickHouse/ClickHouse/pull/78126) ([Nikolay Degterinsky](https://github.com/evillique)). -* 修正 [#77274](https://github.com/ClickHouse/ClickHouse/pull/77274) 之后对 `Replicated` 数据库中过多表数量的检查。同时,将该检查前移到创建存储之前执行,以避免在 `ReplicatedMergeTree` 或 `KeeperMap` 的情况下在 Keeper 中创建未被记录的节点。[#78127](https://github.com/ClickHouse/ClickHouse/pull/78127)([Nikolay Degterinsky](https://github.com/evillique))。 -* 修复由于并发初始化 `S3Queue` 元数据而可能导致的崩溃。[#78131](https://github.com/ClickHouse/ClickHouse/pull/78131) ([Azat Khuzhin](https://github.com/azat))。 -* `groupArray*` 函数现在对于 `max_size` 参数为 Int 类型且值为 0 的情况会抛出 `BAD_ARGUMENTS` 错误,与此前对 UInt 类型值为 0 时的行为一致,而不是在该值下尝试继续执行。[#78140](https://github.com/ClickHouse/ClickHouse/pull/78140) ([Eduard Karacharov](https://github.com/korowa))。 -* 修复在恢复丢失副本时,如果本地表在分离之前已被删除会导致崩溃的问题。[#78173](https://github.com/ClickHouse/ClickHouse/pull/78173) ([Raúl Marín](https://github.com/Algunenano)). -* 修复了 `system.s3_queue_settings` 中 “alterable” 列始终返回 `false` 的问题。[#78187](https://github.com/ClickHouse/ClickHouse/pull/78187) ([Kseniia Sumarokova](https://github.com/kssenii)). -* 对 Azure 访问签名进行脱敏处理,使其不会展示给用户或出现在日志中。[#78189](https://github.com/ClickHouse/ClickHouse/pull/78189) ([Kseniia Sumarokova](https://github.com/kssenii)). -* 修复在 Wide 部分中预取带前缀子流的逻辑。[#78205](https://github.com/ClickHouse/ClickHouse/pull/78205) ([Pavel Kruglov](https://github.com/Avogar)). -* 修复了在键数组类型为 `LowCardinality(Nullable)` 时,`mapFromArrays` 导致崩溃或错误结果的问题。[#78240](https://github.com/ClickHouse/ClickHouse/pull/78240) ([Eduard Karacharov](https://github.com/korowa)). -* 修复 delta-kernel-rs 身份验证选项。 [#78255](https://github.com/ClickHouse/ClickHouse/pull/78255) ([Kseniia Sumarokova](https://github.com/kssenii)). -* 当副本的 `disable_insertion_and_mutation` 为 true 时,不再调度可刷新物化视图的任务。该任务包含插入操作,如果 `disable_insertion_and_mutation` 为 true,则会失败。[#78277](https://github.com/ClickHouse/ClickHouse/pull/78277) ([Xu Jia](https://github.com/XuJia0210))。 -* 验证 `Merge` 引擎底层表的访问权限。[#78339](https://github.com/ClickHouse/ClickHouse/pull/78339) ([Pervakov Grigorii](https://github.com/GrigoryPervakov))。 -* 在查询 `Distributed` 表时,可忽略 `FINAL` 修饰符。[#78428](https://github.com/ClickHouse/ClickHouse/pull/78428) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* `bitmapMin` 在位图为空时返回 uint32_max(当输入类型更大时返回 uint64_max),这与空 roaring_bitmap 的最小值行为一致。 [#78444](https://github.com/ClickHouse/ClickHouse/pull/78444) ([wxybear](https://github.com/wxybear))。 -* 在启用 `distributed_aggregation_memory_efficient` 时,禁止在读取 FROM 后立即对查询进行并行处理,否则可能导致逻辑错误。修复 [#76934](https://github.com/ClickHouse/ClickHouse/issues/76934)。[#78500](https://github.com/ClickHouse/ClickHouse/pull/78500)([flynn](https://github.com/ucasfl))。 -* 在应用 `max_streams_to_max_threads_ratio` 设置后,如果计划的流数量为零,则至少保留一个用于读取的流。[#78505](https://github.com/ClickHouse/ClickHouse/pull/78505) ([Eduard Karacharov](https://github.com/korowa))。 -* 在 `S3Queue` 存储中修复逻辑错误“Cannot unregister: table uuid is not registered”。关闭 [#78285](https://github.com/ClickHouse/ClickHouse/issues/78285)。[#78541](https://github.com/ClickHouse/ClickHouse/pull/78541)([Kseniia Sumarokova](https://github.com/kssenii))。 -* 现在,在同时启用 cgroups v1 和 v2 的系统上,ClickHouse 现在能够识别自身的 cgroup v2。[#78566](https://github.com/ClickHouse/ClickHouse/pull/78566) ([Grigory Korolev](https://github.com/gkorolev))。 -* 修复了在使用表级设置时 `-Cluster` 表函数执行失败的问题。[#78587](https://github.com/ClickHouse/ClickHouse/pull/78587) ([Daniil Ivanik](https://github.com/divanik))。 -* 当在不支持事务的 `ReplicatedMergeTree` 上执行 `INSERT` 时,进行了更严格的检查。[#78633](https://github.com/ClickHouse/ClickHouse/pull/78633) ([Azat Khuzhin](https://github.com/azat))。 -* 在执行 ATTACH 时清理查询设置。 [#78637](https://github.com/ClickHouse/ClickHouse/pull/78637) ([Raúl Marín](https://github.com/Algunenano)). -* 修复在 `iceberg_metadata_file_path` 中指定无效路径时发生的崩溃。 [#78688](https://github.com/ClickHouse/ClickHouse/pull/78688) ([alesapin](https://github.com/alesapin))。 -* 在使用基于 delta-kernel-s 实现的 `DeltaLake` 表引擎时,修复了这样一种情况:当读取的 schema 与表的 schema 不同时且同时存在分区列,会导致出现 “not found column” 错误。 [#78690](https://github.com/ClickHouse/ClickHouse/pull/78690) ([Kseniia Sumarokova](https://github.com/kssenii)). -* 修复了这样一个问题:在计划关闭一个命名会话之后(但在超时生效之前),如果创建了一个同名的新命名会话,新会话会在第一个会话原本计划关闭的时间点被关闭。 [#78698](https://github.com/ClickHouse/ClickHouse/pull/78698) ([Alexey Katsman](https://github.com/alexkats)). -* 修复了若干类从使用 `MongoDB` 引擎或 `mongodb` 表函数的表中读取的 `SELECT` 查询:在 `WHERE` 子句中对常量值进行隐式转换的查询(例如 `WHERE datetime = '2025-03-10 00:00:00'`);带有 `LIMIT` 和 `GROUP BY` 的查询。此前,它们可能会返回不正确的结果。[#78777](https://github.com/ClickHouse/ClickHouse/pull/78777)([Anton Popov](https://github.com/CurtizJ))。 -* 在运行 `CHECK TABLE` 时不再阻塞表关闭。[#78782](https://github.com/ClickHouse/ClickHouse/pull/78782) ([Raúl Marín](https://github.com/Algunenano)). -* Keeper 修复:在所有场景下修正 ephemeral 计数。 [#78799](https://github.com/ClickHouse/ClickHouse/pull/78799) ([Antonio Andelic](https://github.com/antonio2368)). -* 修复了在使用除 `view` 之外的表函数时,`StorageDistributed` 中的不正确类型转换问题,解决了 [#78464](https://github.com/ClickHouse/ClickHouse/issues/78464)。[#78828](https://github.com/ClickHouse/ClickHouse/pull/78828)([Konstantin Bogdanov](https://github.com/thevar1able))。 -* 修复 `tupleElement(*, 1)` 的格式不一致问题。关闭 [#78639](https://github.com/ClickHouse/ClickHouse/issues/78639)。[#78832](https://github.com/ClickHouse/ClickHouse/pull/78832)([Konstantin Bogdanov](https://github.com/thevar1able))。 -* 类型为 `ssd_cache` 的字典现在会拒绝 `block_size` 和 `write_buffer_size` 为零或负数的参数(问题 [#78314](https://github.com/ClickHouse/ClickHouse/issues/78314))。[#78854](https://github.com/ClickHouse/ClickHouse/pull/78854)([Elmi Ahmadov](https://github.com/ahmadov))。 -* 修复在异常关闭后执行 ALTER 时 Refreshable 物化视图发生的崩溃问题。 [#78858](https://github.com/ClickHouse/ClickHouse/pull/78858) ([Azat Khuzhin](https://github.com/azat)). -* 修复在 `CSV` 格式中对无效 `DateTime` 值的解析。[#78919](https://github.com/ClickHouse/ClickHouse/pull/78919) ([Pavel Kruglov](https://github.com/Avogar)). -* Keeper 修复:在 multi 请求失败时避免触发 watch。 [#79247](https://github.com/ClickHouse/ClickHouse/pull/79247) ([Antonio Andelic](https://github.com/antonio2368)). -* 修复了在显式指定最小-最大值但该值为 `NULL` 时读取 Iceberg 表失败的问题。已经发现 Go Iceberg 库会生成这种极其糟糕的文件。本次修复关闭了 [#78740](https://github.com/ClickHouse/ClickHouse/issues/78740)。[#78764](https://github.com/ClickHouse/ClickHouse/pull/78764) ([flynn](https://github.com/ucasfl))。 - - +* 即使在操作不会产生任何需要写入的数据块时,也要定期检查合并和变更(merges 和 mutations)是否被取消。 [#77766](https://github.com/ClickHouse/ClickHouse/pull/77766) ([János Benjamin Antal](https://github.com/antaljanosbenjamin))。 +* 修复:在 Replicated 数据库中,可刷新物化视图在新添加的副本上不起作用的问题。 [#77774](https://github.com/ClickHouse/ClickHouse/pull/77774) ([Michael Kolupaev](https://github.com/al13n321)). +* 修复在出现 `NOT_FOUND_COLUMN_IN_BLOCK` 错误时可能导致的崩溃。[#77854](https://github.com/ClickHouse/ClickHouse/pull/77854) ([Vladimir Cherkasov](https://github.com/vdimir)). +* 修复在 S3/AzureQueue 中填充数据时发生的崩溃问题。[#77878](https://github.com/ClickHouse/ClickHouse/pull/77878) ([Bharat Nallan](https://github.com/bharatnc)). +* 在 SSH 服务器中禁用历史记录的模糊搜索(因为它需要 skim 库)。 [#78002](https://github.com/ClickHouse/ClickHouse/pull/78002) ([Azat Khuzhin](https://github.com/azat)). +* 修复了一个 bug:当对未建立索引的向量列执行向量搜索查询时,如果表中存在另一列已定义向量相似度索引的向量列,则会返回不正确的结果。(Issue [#77978](https://github.com/ClickHouse/ClickHouse/issues/77978))。[#78069](https://github.com/ClickHouse/ClickHouse/pull/78069)([Shankar Iyer](https://github.com/shankar-iyer))。 +* 修复提示 "The requested output format {} is binary... Do you want to output it anyway? [y/N]" 中的一个细微错误。 [#78095](https://github.com/ClickHouse/ClickHouse/pull/78095) ([Azat Khuzhin](https://github.com/azat)). +* 修复在 `toStartOfInterval` 中使用零起点参数时的错误。[#78096](https://github.com/ClickHouse/ClickHouse/pull/78096)([Yarik Briukhovetskyi](https://github.com/yariks5s))。 +* 禁止通过 HTTP 接口传递空的 `session_id` 查询参数。 [#78098](https://github.com/ClickHouse/ClickHouse/pull/78098) ([Alexey Katsman](https://github.com/alexkats))。 +* 修复在 `Replicated` 数据库中可能发生的元数据被覆盖问题,该问题出现在在执行 `ALTER` 查询后紧接着执行 `RENAME` 查询的情况下。[#78107](https://github.com/ClickHouse/ClickHouse/pull/78107) ([Nikolay Degterinsky](https://github.com/evillique))。 +* 修复 `NATS` 引擎中的崩溃问题。[#78108](https://github.com/ClickHouse/ClickHouse/pull/78108) ([Dmitry Novikov](https://github.com/dmitry-sles-novikov)). +* 不要在用于 SSH 的嵌入式客户端中尝试创建 history_file 文件(在之前的版本中虽然会尝试创建,但始终失败)。 [#78112](https://github.com/ClickHouse/ClickHouse/pull/78112) ([Azat Khuzhin](https://github.com/azat)). +* 修复在执行 `RENAME DATABASE` 或 `DROP TABLE` 查询后,`system.detached_tables` 显示不正确信息的问题。[#78126](https://github.com/ClickHouse/ClickHouse/pull/78126) ([Nikolay Degterinsky](https://github.com/evillique))。 +* 修复了在使用 `Replicated` 数据库时对过多表进行检查的问题,该问题出现在 [#77274](https://github.com/ClickHouse/ClickHouse/pull/77274) 之后。同时,将检查提前到创建存储之前执行,以避免在 `ReplicatedMergeTree` 或 `KeeperMap` 的情况下在 Keeper 中创建未被记录的节点。[#78127](https://github.com/ClickHouse/ClickHouse/pull/78127)([Nikolay Degterinsky](https://github.com/evillique))。 +* 修复并发初始化 `S3Queue` 元数据时可能发生的崩溃。[#78131](https://github.com/ClickHouse/ClickHouse/pull/78131) ([Azat Khuzhin](https://github.com/azat))。 +* `groupArray*` 函数现在在 `max_size` 参数为 Int 类型且值为 0 时会产生 `BAD_ARGUMENTS` 错误,与之前对 UInt 类型的处理保持一致,而不是在该值下继续尝试执行。 [#78140](https://github.com/ClickHouse/ClickHouse/pull/78140) ([Eduard Karacharov](https://github.com/korowa)). +* 防止在恢复丢失副本时,如果本地表在分离之前已被移除而导致崩溃。[#78173](https://github.com/ClickHouse/ClickHouse/pull/78173) ([Raúl Marín](https://github.com/Algunenano))。 +* 修复了 `system.s3_queue_settings` 中 `alterable` 列始终返回 `false` 的问题。 [#78187](https://github.com/ClickHouse/ClickHouse/pull/78187) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 隐藏 Azure 访问签名,使其对用户不可见且不会在日志中显示。[#78189](https://github.com/ClickHouse/ClickHouse/pull/78189) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 修复 Wide 部分中带前缀子流的预取。 [#78205](https://github.com/ClickHouse/ClickHouse/pull/78205) ([Pavel Kruglov](https://github.com/Avogar)). +* 修复了在键数组类型为 `LowCardinality(Nullable)` 时,`mapFromArrays` 崩溃或返回错误结果的问题。[#78240](https://github.com/ClickHouse/ClickHouse/pull/78240) ([Eduard Karacharov](https://github.com/korowa))。 +* 修复 delta-kernel-rs 认证选项。 [#78255](https://github.com/ClickHouse/ClickHouse/pull/78255) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 如果副本的 `disable_insertion_and_mutation` 为 true,则不再调度可刷新物化视图的任务。该任务本质上是一次插入操作,如果 `disable_insertion_and_mutation` 为 true,则会失败。[#78277](https://github.com/ClickHouse/ClickHouse/pull/78277) ([Xu Jia](https://github.com/XuJia0210)). +* 验证对 `Merge` 引擎底层表的访问权限。[#78339](https://github.com/ClickHouse/ClickHouse/pull/78339)([Pervakov Grigorii](https://github.com/GrigoryPervakov))。 +* 在查询 `Distributed` 表时可以忽略 `FINAL` 修饰符。[#78428](https://github.com/ClickHouse/ClickHouse/pull/78428)([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy))。 +* 当 bitmap 为空时,`bitmapMin` 返回 uint32_max(当输入类型更大时返回 uint64_max),这与空 roaring_bitmap 的最小值行为一致。[#78444](https://github.com/ClickHouse/ClickHouse/pull/78444) ([wxybear](https://github.com/wxybear))。 +* 在启用 `distributed_aggregation_memory_efficient` 时,禁用在读取 FROM 之后立即对查询进行并行处理,以避免可能出现的逻辑错误。修复了 [#76934](https://github.com/ClickHouse/ClickHouse/issues/76934)。[#78500](https://github.com/ClickHouse/ClickHouse/pull/78500) ([flynn](https://github.com/ucasfl))。 +* 在应用 `max_streams_to_max_threads_ratio` 设置后,如果计划的流数为零,则至少保留一个用于读取的流。 [#78505](https://github.com/ClickHouse/ClickHouse/pull/78505) ([Eduard Karacharov](https://github.com/korowa)). +* 在存储 `S3Queue` 中修复逻辑错误 “Cannot unregister: table uuid is not registered”。关闭 [#78285](https://github.com/ClickHouse/ClickHouse/issues/78285)。[#78541](https://github.com/ClickHouse/ClickHouse/pull/78541)([Kseniia Sumarokova](https://github.com/kssenii))。 +* ClickHouse 现在可以在同时启用了 cgroups v1 和 v2 的系统上正确识别自身的 cgroup v2。 [#78566](https://github.com/ClickHouse/ClickHouse/pull/78566) ([Grigory Korolev](https://github.com/gkorolev))。 +* 在使用表级设置时,`-Cluster` 表函数执行失败。 [#78587](https://github.com/ClickHouse/ClickHouse/pull/78587) ([Daniil Ivanik](https://github.com/divanik)). +* 在不支持事务的 `ReplicatedMergeTree` 上执行 `INSERT` 时,增加了更完善的检查。[#78633](https://github.com/ClickHouse/ClickHouse/pull/78633) ([Azat Khuzhin](https://github.com/azat)). +* 在执行 ATTACH 操作时清理查询相关设置。 [#78637](https://github.com/ClickHouse/ClickHouse/pull/78637) ([Raúl Marín](https://github.com/Algunenano)). +* 修复在 `iceberg_metadata_file_path` 中指定无效路径时引发的崩溃。[#78688](https://github.com/ClickHouse/ClickHouse/pull/78688) ([alesapin](https://github.com/alesapin)). +* 在使用基于 delta-kernel-s 实现的 `DeltaLake` 表引擎时,修复了当读取 schema 与表的 schema 不一致且同时存在分区列时,会导致的“未找到列”错误。 [#78690](https://github.com/ClickHouse/ClickHouse/pull/78690) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 修复了一个问题:在计划关闭一个具名会话之后(但尚未达到超时时间之前),如果创建了一个同名的新具名会话,该新会话会在原先第一个会话计划关闭的时间点被错误关闭。 [#78698](https://github.com/ClickHouse/ClickHouse/pull/78698) ([Alexey Katsman](https://github.com/alexkats)). +* 修复了多种 `SELECT` 查询类型,这些查询会从使用 `MongoDB` 引擎或 `mongodb` 表函数的表中读取数据:在 `WHERE` 子句中隐式转换常量值的查询(例如 `WHERE datetime = '2025-03-10 00:00:00'`);带有 `LIMIT` 和 `GROUP BY` 的查询。此前,这些查询可能会返回错误的结果。 [#78777](https://github.com/ClickHouse/ClickHouse/pull/78777) ([Anton Popov](https://github.com/CurtizJ)). +* 运行 `CHECK TABLE` 时不再阻塞表的关闭。 [#78782](https://github.com/ClickHouse/ClickHouse/pull/78782) ([Raúl Marín](https://github.com/Algunenano)). +* Keeper 修复:在所有情况下修正 ephemeral 计数。 [#78799](https://github.com/ClickHouse/ClickHouse/pull/78799) ([Antonio Andelic](https://github.com/antonio2368)). +* 修复在使用除 `view` 之外的表函数时,`StorageDistributed` 中的错误类型转换。修复 [#78464](https://github.com/ClickHouse/ClickHouse/issues/78464)。[#78828](https://github.com/ClickHouse/ClickHouse/pull/78828)([Konstantin Bogdanov](https://github.com/thevar1able))。 +* 统一 `tupleElement(*, 1)` 的格式。修复 [#78639](https://github.com/ClickHouse/ClickHouse/issues/78639)。[#78832](https://github.com/ClickHouse/ClickHouse/pull/78832)([Konstantin Bogdanov](https://github.com/thevar1able))。 +* 类型为 `ssd_cache` 的字典现在会拒绝 `block_size` 和 `write_buffer_size` 为零或负数的参数值(问题 [#78314](https://github.com/ClickHouse/ClickHouse/issues/78314))。[#78854](https://github.com/ClickHouse/ClickHouse/pull/78854)([Elmi Ahmadov](https://github.com/ahmadov))。 +* 修复在异常关闭后对 Refreshable 物化视图执行 ALTER 时发生的崩溃问题。 [#78858](https://github.com/ClickHouse/ClickHouse/pull/78858) ([Azat Khuzhin](https://github.com/azat)). +* 修复 `CSV` 格式中对无效 `DateTime` 值的解析问题。 [#78919](https://github.com/ClickHouse/ClickHouse/pull/78919) ([Pavel Kruglov](https://github.com/Avogar)). +* Keeper 修复:避免在 multi 请求失败时触发 watch。[#79247](https://github.com/ClickHouse/ClickHouse/pull/79247) ([Antonio Andelic](https://github.com/antonio2368)). +* 修复在显式指定的 min-max 值为 `NULL` 时读取 Iceberg 表失败的问题。已发现 Go Iceberg 库会生成这种有问题的文件。关闭 [#78740](https://github.com/ClickHouse/ClickHouse/issues/78740)。[#78764](https://github.com/ClickHouse/ClickHouse/pull/78764)([flynn](https://github.com/ucasfl))。 #### 构建/测试/打包改进 -* 在 Rust 中考虑 CPU 目标特性,并在所有 crate 中启用 LTO。[#78590](https://github.com/ClickHouse/ClickHouse/pull/78590) ([Raúl Marín](https://github.com/Algunenano)). - -### ClickHouse 25.3 LTS 版本,2025-03-20 {#253} +* 在 Rust 中遵循 CPU 目标特性,并在所有 crate 中启用 LTO。[#78590](https://github.com/ClickHouse/ClickHouse/pull/78590) ([Raúl Marín](https://github.com/Algunenano))。 -#### 向后不兼容变更 -* 禁止截断复制的数据库。[#76651](https://github.com/ClickHouse/ClickHouse/pull/76651) ([Bharat Nallan](https://github.com/bharatnc)). -* 回滚跳过索引缓存的改动。[#77447](https://github.com/ClickHouse/ClickHouse/pull/77447) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). +### ClickHouse 25.3 LTS 发行版,2025-03-20 {#253} +#### 向后不兼容的变更 +* 禁止对复制数据库执行 TRUNCATE 操作。[#76651](https://github.com/ClickHouse/ClickHouse/pull/76651) ([Bharat Nallan](https://github.com/bharatnc))。 +* 回滚此前跳过索引缓存的更改。[#77447](https://github.com/ClickHouse/ClickHouse/pull/77447) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 #### 新功能 -* `JSON` 数据类型已可用于生产环境。请参阅 [https://jsonbench.com/](https://jsonbench.com/)。`Dynamic` 和 `Variant` 数据类型已可用于生产环境。[#77785](https://github.com/ClickHouse/ClickHouse/pull/77785) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 为 clickhouse-server 引入了 SSH 协议支持。现在,可以使用任意 SSH 客户端连接到 ClickHouse。关闭:[#74340](https://github.com/ClickHouse/ClickHouse/issues/74340)。[#74989](https://github.com/ClickHouse/ClickHouse/pull/74989)([George Gamezardashvili](https://github.com/Infjoker))。 -* 如果启用了并行副本,请将表函数替换为对应的 -Cluster 版本。修复了 [#65024](https://github.com/ClickHouse/ClickHouse/issues/65024)。[#70659](https://github.com/ClickHouse/ClickHouse/pull/70659)([Konstantin Bogdanov](https://github.com/thevar1able))。 -* 全新的 Userspace Page Cache 实现,允许在进程内存中缓存数据,而不再依赖操作系统页面缓存;当数据存储在没有本地文件系统缓存支持的远程虚拟文件系统上时,这一点尤其有用。 [#70509](https://github.com/ClickHouse/ClickHouse/pull/70509) ([Michael Kolupaev](https://github.com/al13n321)). -* 新增了 `concurrent_threads_scheduler` 服务器设置项,用于控制并发查询之间的 CPU 槽位分配方式。可以将其设置为 `round_robin`(原有行为)或 `fair_round_robin`,以解决 INSERT 与 SELECT 之间 CPU 分配不公平的问题。[#75949](https://github.com/ClickHouse/ClickHouse/pull/75949)([Sergei Trifonov](https://github.com/serxa))。 -* 新增 `estimateCompressionRatio` 聚合函数 [#70801](https://github.com/ClickHouse/ClickHouse/issues/70801)。[#76661](https://github.com/ClickHouse/ClickHouse/pull/76661)([Tariq Almawash](https://github.com/talmawash))。 -* 新增函数 `arraySymmetricDifference`。它返回多个数组参数中那些未在所有参数中都出现的元素。示例:`SELECT arraySymmetricDifference([1, 2], [2, 3])` 返回 `[1, 3]`。(问题 [#61673](https://github.com/ClickHouse/ClickHouse/issues/61673))。[#76231](https://github.com/ClickHouse/ClickHouse/pull/76231)([Filipp Abapolov](https://github.com/pheepa))。 -* 允许通过存储/表函数设置 `iceberg_metadata_file_path`,显式指定要读取的 Iceberg 元数据文件。修复 [#47412](https://github.com/ClickHouse/ClickHouse/issues/47412)。[#77318](https://github.com/ClickHouse/ClickHouse/pull/77318)([alesapin](https://github.com/alesapin))。 -* 新增了 `keccak256` 哈希函数,该函数常用于区块链实现,尤其是在基于 EVM 的系统中。[#76669](https://github.com/ClickHouse/ClickHouse/pull/76669) ([Arnaud Briche](https://github.com/arnaudbriche))。 -* 新增三个函数:`icebergTruncate`(符合规范 [https://iceberg.apache.org/spec/#truncate-transform-details](https://iceberg.apache.org/spec/#truncate-transform-details))、`toYearNumSinceEpoch` 和 `toMonthNumSinceEpoch`。在 `Iceberg` 引擎的分区剪枝中支持 `truncate` 转换。 [#77403](https://github.com/ClickHouse/ClickHouse/pull/77403) ([alesapin](https://github.com/alesapin)). +* `JSON` 数据类型已可用于生产环境,详见 [https://jsonbench.com/](https://jsonbench.com/)。`Dynamic` 和 `Variant` 数据类型也已可用于生产环境。[#77785](https://github.com/ClickHouse/ClickHouse/pull/77785)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 为 clickhouse-server 引入 SSH 协议支持。现在可以使用任意 SSH 客户端连接到 ClickHouse。已关闭以下问题:[#74340](https://github.com/ClickHouse/ClickHouse/issues/74340)。[#74989](https://github.com/ClickHouse/ClickHouse/pull/74989)([George Gamezardashvili](https://github.com/Infjoker))。 +* 当启用并行副本时,将表函数替换为其对应的 -Cluster 版本。修复了 [#65024](https://github.com/ClickHouse/ClickHouse/issues/65024)。[#70659](https://github.com/ClickHouse/ClickHouse/pull/70659)([Konstantin Bogdanov](https://github.com/thevar1able))。 +* Userspace Page Cache 的新实现,它允许在进程内存中缓存数据,而无需依赖操作系统的页面缓存;当数据存储在没有本地文件系统缓存支持的远程虚拟文件系统上时,这非常有用。 [#70509](https://github.com/ClickHouse/ClickHouse/pull/70509) ([Michael Kolupaev](https://github.com/al13n321)). +* 新增了 `concurrent_threads_scheduler` 服务器设置,用于控制并发查询之间 CPU 时隙的分配方式。可以设置为 `round_robin`(之前的行为)或 `fair_round_robin`,以解决 INSERT 和 SELECT 之间 CPU 分配不公平的问题。[#75949](https://github.com/ClickHouse/ClickHouse/pull/75949) ([Sergei Trifonov](https://github.com/serxa))。 +* 新增 `estimateCompressionRatio` 聚合函数 [#70801](https://github.com/ClickHouse/ClickHouse/issues/70801)。 [#76661](https://github.com/ClickHouse/ClickHouse/pull/76661)([Tariq Almawash](https://github.com/talmawash))。 +* 新增函数 `arraySymmetricDifference`。该函数返回多个数组参数中未在所有参数中同时出现的所有元素。示例:`SELECT arraySymmetricDifference([1, 2], [2, 3])` 返回 `[1, 3]`。(issue [#61673](https://github.com/ClickHouse/ClickHouse/issues/61673))。[#76231](https://github.com/ClickHouse/ClickHouse/pull/76231)([Filipp Abapolov](https://github.com/pheepa))。 +* 通过在存储/表函数中设置 `iceberg_metadata_file_path`,可以显式指定要读取的 Iceberg 元数据文件。修复 [#47412](https://github.com/ClickHouse/ClickHouse/issues/47412)。[#77318](https://github.com/ClickHouse/ClickHouse/pull/77318)([alesapin](https://github.com/alesapin))。 +* 新增了 `keccak256` 哈希函数,在区块链实现中被广泛使用,尤其是在基于 EVM 的系统中。[#76669](https://github.com/ClickHouse/ClickHouse/pull/76669) ([Arnaud Briche](https://github.com/arnaudbriche))。 +* 新增三个函数:`icebergTruncate`(按照规范实现,[https://iceberg.apache.org/spec/#truncate-transform-details](https://iceberg.apache.org/spec/#truncate-transform-details))、`toYearNumSinceEpoch` 和 `toMonthNumSinceEpoch`。在 `Iceberg` 引擎的分区裁剪中支持 `truncate` 转换。[#77403](https://github.com/ClickHouse/ClickHouse/pull/77403) ([alesapin](https://github.com/alesapin))。 * 支持 `LowCardinality(Decimal)` 数据类型 [#72256](https://github.com/ClickHouse/ClickHouse/issues/72256)。[#72833](https://github.com/ClickHouse/ClickHouse/pull/72833) ([zhanglistar](https://github.com/zhanglistar))。 -* `FilterTransformPassedRows` 和 `FilterTransformPassedBytes` Profile 事件将显示在查询执行期间被过滤的行数和字节数。[#76662](https://github.com/ClickHouse/ClickHouse/pull/76662) ([Onkar Deshpande](https://github.com/onkar))。 -* 对直方图指标类型的支持。该接口与 Prometheus 客户端十分相似,你只需调用 `observe(value)` 即可增加该值所属桶中的计数器。直方图指标通过 `system.histogram_metrics` 对外暴露。[#75736](https://github.com/ClickHouse/ClickHouse/pull/75736) ([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 -* 为基于显式值切换的非常量 CASE 提供支持。 [#77399](https://github.com/ClickHouse/ClickHouse/pull/77399) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). - - - -#### 实验性功能 -* 为存储在 AWS S3 和本地文件系统上的 DeltaLake 表添加 [Unity Catalog 支持](https://www.databricks.com/product/unity-catalog)。[#76988](https://github.com/ClickHouse/ClickHouse/pull/76988)([alesapin](https://github.com/alesapin))。 -* 引入与 AWS Glue 服务目录的实验性集成,用于 Iceberg 表。[#77257](https://github.com/ClickHouse/ClickHouse/pull/77257)([alesapin](https://github.com/alesapin))。 -* 增加对动态集群自动发现的支持。这扩展了现有的 _node_ 自动发现功能。ClickHouse 现在可以使用 ``,在公共 ZooKeeper 路径下自动检测并注册新的 _clusters_。[#76001](https://github.com/ClickHouse/ClickHouse/pull/76001)([Anton Ivashkin](https://github.com/ianton-ru))。 -* 允许在可配置的超时时间之后,自动对整个分区执行清理合并,对应的新设置为 `enable_replacing_merge_with_cleanup_for_min_age_to_force_merge`。[#76440](https://github.com/ClickHouse/ClickHouse/pull/76440)([Christoph Wurm](https://github.com/cwurm))。 +* `FilterTransformPassedRows` 和 `FilterTransformPassedBytes` 性能分析事件将显示在查询执行过程中被过滤的行数和字节数。 [#76662](https://github.com/ClickHouse/ClickHouse/pull/76662) ([Onkar Deshpande](https://github.com/onkar))。 +* 支持直方图指标类型。该接口与 Prometheus 客户端的接口设计非常相似,你只需调用 `observe(value)`,即可将与该值对应的桶中的计数器加一。直方图指标通过 `system.histogram_metrics` 对外暴露。[#75736](https://github.com/ClickHouse/ClickHouse/pull/75736) ([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 +* 支持在 CASE 表达式中使用非常量显式值进行分支选择。 [#77399](https://github.com/ClickHouse/ClickHouse/pull/77399) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +#### 实验特性 +* 为基于 AWS S3 和本地文件系统的 Delta Lake 表添加对 [Unity Catalog](https://www.databricks.com/product/unity-catalog) 的支持。[#76988](https://github.com/ClickHouse/ClickHouse/pull/76988) ([alesapin](https://github.com/alesapin))。 +* 引入与 AWS Glue 服务目录的实验性集成,用于 Iceberg 表。[#77257](https://github.com/ClickHouse/ClickHouse/pull/77257) ([alesapin](https://github.com/alesapin))。 +* 增加对动态集群自动发现的支持,扩展现有的 _node_ 自动发现功能。ClickHouse 现在可以使用 `` 在统一的 ZooKeeper 路径下自动检测并注册新的 _clusters_。[#76001](https://github.com/ClickHouse/ClickHouse/pull/76001) ([Anton Ivashkin](https://github.com/ianton-ru))。 +* 通过新的设置 `enable_replacing_merge_with_cleanup_for_min_age_to_force_merge`,允许在可配置的超时时间后自动对整个分区执行清理合并操作。[#76440](https://github.com/ClickHouse/ClickHouse/pull/76440) ([Christoph Wurm](https://github.com/cwurm))。 #### 性能改进 -* 实现查询条件缓存,以提升包含重复条件的查询性能。会在内存中将不满足条件的数据范围记录为临时索引,后续查询将使用该索引。关闭 [#67768](https://github.com/ClickHouse/ClickHouse/issues/67768) [#69236](https://github.com/ClickHouse/ClickHouse/pull/69236)([zhongyuankai](https://github.com/zhongyuankai))。 -* 在数据分片移除时主动从缓存中逐出数据。如果数据量较少,不要让缓存增长到最大容量。[#76641](https://github.com/ClickHouse/ClickHouse/pull/76641)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 在算术计算中用 clang 内置的 i256 替换 Int256 和 UInt256,从而带来性能提升 [#70502](https://github.com/ClickHouse/ClickHouse/issues/70502)。[#73658](https://github.com/ClickHouse/ClickHouse/pull/73658)([李扬](https://github.com/taiyang-li))。 -* 在某些情况下(例如空数组列),数据分片中可能包含空文件。当表位于元数据与对象存储分离的磁盘上时,可以跳过向 ObjectStorage 写入空 blob,而只为此类文件存储元数据。[#75860](https://github.com/ClickHouse/ClickHouse/pull/75860)([Alexander Gololobov](https://github.com/davenger))。 -* 提升 Decimal32/Decimal64/DateTime64 的 min/max 性能。[#76570](https://github.com/ClickHouse/ClickHouse/pull/76570)([李扬](https://github.com/taiyang-li))。 -* 查询编译(`compile_expressions` 设置)现在会考虑机器类型。这显著加速了此类查询。[#76753](https://github.com/ClickHouse/ClickHouse/pull/76753)([ZhangLiStar](https://github.com/zhanglistar))。 -* 优化 `arraySort`。[#76850](https://github.com/ClickHouse/ClickHouse/pull/76850)([李扬](https://github.com/taiyang-li))。 -* 当缓存被被动使用时(例如用于合并),禁用 `filesystem_cache_prefer_bigger_buffer_size`。[#77898](https://github.com/ClickHouse/ClickHouse/pull/77898)([Kseniia Sumarokova](https://github.com/kssenii))。 -* 在部分代码中应用 `preserve_most` 属性,从而实现略微更优的代码生成。[#67778](https://github.com/ClickHouse/ClickHouse/pull/67778)([Nikita Taranov](https://github.com/nickitat))。 -* 更快的 ClickHouse 服务器关闭(去除 2.5 秒延迟)。[#76550](https://github.com/ClickHouse/ClickHouse/pull/76550)([Azat Khuzhin](https://github.com/azat))。 -* 避免在 ReadBufferFromS3 和其他远程读取缓冲区中进行不必要的分配,将其内存消耗减少一半。[#76692](https://github.com/ClickHouse/ClickHouse/pull/76692)([Sema Checherinda](https://github.com/CheSema))。 -* 将 zstd 从 1.5.5 升级到 1.5.7,这可能带来一些[性能改进](https://github.com/facebook/zstd/releases/tag/v1.5.7)。[#77137](https://github.com/ClickHouse/ClickHouse/pull/77137)([Pradeep Chhetri](https://github.com/chhetripradeep))。 -* 降低在 Wide 分片中对 JSON 列进行预取时的内存使用量。这在 ClickHouse 运行在共享存储之上时尤其重要,例如在 ClickHouse Cloud 中。[#77640](https://github.com/ClickHouse/ClickHouse/pull/77640)([Pavel Kruglov](https://github.com/Avogar))。 - +* 实现查询条件缓存,以提升重复条件场景下的查询性能。不满足条件的数据区间会被记录为内存中的临时索引,后续查询将复用该索引。关闭 [#67768](https://github.com/ClickHouse/ClickHouse/issues/67768) [#69236](https://github.com/ClickHouse/ClickHouse/pull/69236)([zhongyuankai](https://github.com/zhongyuankai))。 +* 在数据分片被移除时主动从缓存中驱逐对应数据。如果数据量较少,不要让缓存膨胀到最大容量。[#76641](https://github.com/ClickHouse/ClickHouse/pull/76641)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 在算术计算中使用 clang 内建的 i256 替代 Int256 和 UInt256,从而带来性能提升 [#70502](https://github.com/ClickHouse/ClickHouse/issues/70502)。[#73658](https://github.com/ClickHouse/ClickHouse/pull/73658)([李扬](https://github.com/taiyang-li))。 +* 在某些情况下(例如空数组列),数据分片中可能包含空文件。当表位于元数据与对象存储分离的磁盘上时,可以跳过向 ObjectStorage 写入空的 blob,只为此类文件保存元数据。[#75860](https://github.com/ClickHouse/ClickHouse/pull/75860)([Alexander Gololobov](https://github.com/davenger))。 +* 提升 Decimal32/Decimal64/DateTime64 的 min/max 运算性能。[#76570](https://github.com/ClickHouse/ClickHouse/pull/76570)([李扬](https://github.com/taiyang-li))。 +* 查询编译(设置 `compile_expressions`)现在会考虑机器类型。这显著加快了此类查询。[#76753](https://github.com/ClickHouse/ClickHouse/pull/76753)([ZhangLiStar](https://github.com/zhanglistar))。 +* 优化 `arraySort`。[#76850](https://github.com/ClickHouse/ClickHouse/pull/76850)([李扬](https://github.com/taiyang-li))。 +* 当缓存以被动方式使用时(例如用于合并),禁用 `filesystem_cache_prefer_bigger_buffer_size`。[#77898](https://github.com/ClickHouse/ClickHouse/pull/77898)([Kseniia Sumarokova](https://github.com/kssenii))。 +* 在代码的部分位置应用 `preserve_most` 属性,从而获得略优的代码生成效果。[#67778](https://github.com/ClickHouse/ClickHouse/pull/67778)([Nikita Taranov](https://github.com/nickitat))。 +* 加快 ClickHouse 服务器关闭速度(去除 2.5 秒延迟)。[#76550](https://github.com/ClickHouse/ClickHouse/pull/76550)([Azat Khuzhin](https://github.com/azat))。 +* 避免在 ReadBufferFromS3 和其他远程读取缓冲区中进行多余的内存分配,将其内存占用减少一半。[#76692](https://github.com/ClickHouse/ClickHouse/pull/76692)([Sema Checherinda](https://github.com/CheSema))。 +* 将 zstd 从 1.5.5 升级到 1.5.7,这可能会带来一些[性能改进](https://github.com/facebook/zstd/releases/tag/v1.5.7)。[#77137](https://github.com/ClickHouse/ClickHouse/pull/77137)([Pradeep Chhetri](https://github.com/chhetripradeep))。 +* 降低在 Wide 数据部分中预取 JSON 列时的内存使用。当 ClickHouse 部署在共享存储之上(例如在 ClickHouse Cloud 中)时,这一点尤为重要。[#77640](https://github.com/ClickHouse/ClickHouse/pull/77640)([Pavel Kruglov](https://github.com/Avogar))。 #### 改进 -* 在 `TRUNCATE` 与 `INTO OUTFILE` 一起使用时支持进行原子重命名。解决 [#70323](https://github.com/ClickHouse/ClickHouse/issues/70323)。[#77181](https://github.com/ClickHouse/ClickHouse/pull/77181)([Onkar Deshpande](https://github.com/onkar))。 -* 现在不再允许在设置中将 `NaN` 或 `inf` 作为浮点型配置值使用。其实之前这么用也毫无意义。[#77546](https://github.com/ClickHouse/ClickHouse/pull/77546) ([Yarik Briukhovetskyi](https://github.com/yariks5s))。 -* 当 analyzer 被禁用时,默认禁用并行副本,而不受 `compatibility` 设置影响。仍然可以通过将 `parallel_replicas_only_with_analyzer` 显式设置为 `false` 来更改此行为。[#77115](https://github.com/ClickHouse/ClickHouse/pull/77115)([Igor Nikonov](https://github.com/devcrafter))。 -* 新增支持定义一组请求头,用于从客户端请求的请求头中转发到外部 HTTP 身份验证器。[#77054](https://github.com/ClickHouse/ClickHouse/pull/77054)([inv2004](https://github.com/inv2004))。 -* 在 tuple 列的字段上支持大小写不敏感的列匹配。关闭 [https://github.com/apache/incubator-gluten/issues/8324](https://github.com/apache/incubator-gluten/issues/8324)。[#73780](https://github.com/ClickHouse/ClickHouse/pull/73780)([李扬](https://github.com/taiyang-li))。 -* 现在,Gorilla 编解码器的参数将始终保存在 `.sql` 文件的表元数据中。已关闭问题:[#70072](https://github.com/ClickHouse/ClickHouse/issues/70072)。[#74814](https://github.com/ClickHouse/ClickHouse/pull/74814)([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 -* 为某些数据湖实现了解析功能增强(Sequence ID 解析:新增了对清单文件中序列标识符的解析能力;Avro 元数据解析:重新设计了 Avro 元数据解析器,使其易于扩展以支持未来的增强)。[#75010](https://github.com/ClickHouse/ClickHouse/pull/75010) ([Daniil Ivanik](https://github.com/divanik)). -* 已从 `system.opentelemetry_span_log` 的默认 ORDER BY 中移除 trace_id。 [#75907](https://github.com/ClickHouse/ClickHouse/pull/75907) ([Azat Khuzhin](https://github.com/azat)). -* 现在可以对任意配置文件(config.xml、users.xml、嵌套配置文件)应用加密(属性 `encrypted_by`)。此前,它仅适用于顶级 config.xml 文件。[#75911](https://github.com/ClickHouse/ClickHouse/pull/75911) ([Mikhail Gorshkov](https://github.com/mgorshkov))。 -* 改进 `system.warnings` 表,并新增对可动态添加、更新或删除的警告信息的支持。 [#76029](https://github.com/ClickHouse/ClickHouse/pull/76029) ([Bharat Nallan](https://github.com/bharatnc)). -* 该 PR 使得无法再运行查询 `ALTER USER user1 ADD PROFILES a, DROP ALL PROFILES`,因为所有 `DROP` 操作必须排在语句顺序的最前面。[#76242](https://github.com/ClickHouse/ClickHouse/pull/76242)([pufit](https://github.com/pufit))。 -* 针对 SYNC REPLICA 的多项改进(更清晰的错误信息、更完善的测试以及合理性检查)。 [#76307](https://github.com/ClickHouse/ClickHouse/pull/76307) ([Azat Khuzhin](https://github.com/azat)). -* 在备份到 S3 时,如果分段复制因 Access Denied 失败,则使用正确的回退策略。当在具有不同凭证的存储桶之间进行备份时,分段复制可能会产生 Access Denied 错误。[#76515](https://github.com/ClickHouse/ClickHouse/pull/76515) ([Antonio Andelic](https://github.com/antonio2368)). -* 将 librdkafka(这玩意儿是一堆破烂)升级到了 2.8.0 版本(这堆破烂也没好到哪儿去),并改进了 Kafka 表的关闭流程,从而减少在删除表和重启服务器时的延迟。`engine=Kafka` 在表被删除时不再显式地退出消费者组。取而代之的是,消费者会继续留在组中,直到在 `session_timeout_ms`(默认:45 秒)内无活动而被自动移除。[#76621](https://github.com/ClickHouse/ClickHouse/pull/76621)([filimonov](https://github.com/filimonov))。 -* 修复对 S3 请求设置的验证。[#76658](https://github.com/ClickHouse/ClickHouse/pull/76658) ([Vitaly Baranov](https://github.com/vitlibar)). -* 像 `server_settings` 或 `settings` 这样的系统表都有一个 `default` 值列,这很方便。现已在 `merge_tree_settings` 和 `replicated_merge_tree_settings` 中也添加了该列。[#76942](https://github.com/ClickHouse/ClickHouse/pull/76942)([Diego Nieto](https://github.com/lesandie))。 -* 添加了 `ProfileEvents::QueryPreempted`,其逻辑与 `CurrentMetrics::QueryPreempted` 类似。[#77015](https://github.com/ClickHouse/ClickHouse/pull/77015)([VicoWu](https://github.com/VicoWu))。 -* 此前,`Replicated` 数据库可能会在日志中打印出查询中指定的凭证。该行为已被修复。相关 Issue 已关闭:[#77123](https://github.com/ClickHouse/ClickHouse/issues/77123)。[#77133](https://github.com/ClickHouse/ClickHouse/pull/77133)([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 -* 允许在 `plain_rewritable disk` 上执行 ALTER TABLE DROP PARTITION。[#77138](https://github.com/ClickHouse/ClickHouse/pull/77138) ([Julia Kartseva](https://github.com/jkartseva)). -* 备份/恢复设置 `allow_s3_native_copy` 现在支持三个可能的取值: - `False` - 不使用 S3 原生复制; - `True`(旧默认值)- ClickHouse 将首先尝试使用 S3 原生复制,如果失败则回退到读写方式; - `'auto'`(新默认值)- ClickHouse 会先比较源和目标的凭据。如果它们相同,ClickHouse 将尝试使用 S3 原生复制,必要时再回退到读写方式。如果它们不同,ClickHouse 将直接使用读写方式。 [#77401](https://github.com/ClickHouse/ClickHouse/pull/77401)([Vitaly Baranov](https://github.com/vitlibar))。 -* 在 DeltaLake 表引擎的 Delta 内核中新增对使用 AWS 会话令牌和环境凭证的支持。 [#77661](https://github.com/ClickHouse/ClickHouse/pull/77661) ([Kseniia Sumarokova](https://github.com/kssenii)). - - - - - -#### 错误修复(官方稳定版本中用户可见的异常行为) - -* 修复在处理异步分布式 INSERT 的待处理批次时可能卡死的问题(例如因 `No such file or directory` 错误)。[#72939](https://github.com/ClickHouse/ClickHouse/pull/72939)([Azat Khuzhin](https://github.com/azat))。 -* 通过在索引分析时对隐式的 Date 到 DateTime 转换强制采用饱和行为,优化了日期时间转换。这解决了由于日期时间范围限制而可能导致的索引分析结果不准确的问题。修复了 [#73307](https://github.com/ClickHouse/ClickHouse/issues/73307)。同时也修复了在 `date_time_overflow_behavior = 'ignore'`(默认值)时显式调用 `toDateTime` 转换的问题。[#73326](https://github.com/ClickHouse/ClickHouse/pull/73326)([Amos Bird](https://github.com/amosbird))。 -* 修复由于 UUID 和表名之间竞争条件引起的各种 bug(例如,它将修复 `RENAME` 和 `RESTART REPLICA` 之间的竞争;在并发执行 `RENAME` 与 `SYSTEM RESTART REPLICA` 时,可能会导致错误地重启副本,和/或使其中一张表一直处于 `Table X is being restarted` 状态)。 [#76308](https://github.com/ClickHouse/ClickHouse/pull/76308) ([Azat Khuzhin](https://github.com/azat)). -* 修复在启用 async insert 并使用 insert into ... from file ... 且块大小不一致时导致的数据丢失问题:如果第一个块大小 < async_max_size 而第二个块大小 > async_max_size,则第二个块不会被插入,这部分数据会遗留在 `squashing` 中。[#76343](https://github.com/ClickHouse/ClickHouse/pull/76343) ([Han Fei](https://github.com/hanfei1991)). +* 在将 `TRUNCATE` 与 `INTO OUTFILE` 一起使用时支持原子重命名。修复 [#70323](https://github.com/ClickHouse/ClickHouse/issues/70323)。 [#77181](https://github.com/ClickHouse/ClickHouse/pull/77181)([Onkar Deshpande](https://github.com/onkar))。 +* 现在已经无法在设置中将 `NaN` 或 `inf` 用作浮点数值。之前允许这么做其实也没有什么意义。 [#77546](https://github.com/ClickHouse/ClickHouse/pull/77546) ([Yarik Briukhovetskyi](https://github.com/yariks5s))。 +* 当 analyzer 被禁用时,将默认禁用并行副本,而不考虑 `compatibility` 设置。仍然可以通过显式将 `parallel_replicas_only_with_analyzer` 设为 `false` 来更改此行为。[#77115](https://github.com/ClickHouse/ClickHouse/pull/77115)([Igor Nikonov](https://github.com/devcrafter))。 +* 新增支持定义一个要转发的 header 列表,用于将客户端请求中的这些 header 转发给外部 HTTP 认证器。[#77054](https://github.com/ClickHouse/ClickHouse/pull/77054) ([inv2004](https://github.com/inv2004))。 +* 在 tuple 列中对字段匹配时,遵循列名大小写不敏感的匹配规则。修复 [https://github.com/apache/incubator-gluten/issues/8324](https://github.com/apache/incubator-gluten/issues/8324)。[#73780](https://github.com/ClickHouse/ClickHouse/pull/73780)([李扬](https://github.com/taiyang-li))。 +* Gorilla 编解码器的参数现在将始终保存在 .sql 文件中的表元数据中。已修复:[#70072](https://github.com/ClickHouse/ClickHouse/issues/70072)。[#74814](https://github.com/ClickHouse/ClickHouse/pull/74814)([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 +* 为特定数据湖实现了解析能力增强(Sequence ID 解析:新增了对 manifest 文件中序列标识符的解析功能;Avro 元数据解析:重新设计了 Avro 元数据解析器,使其便于未来扩展和增强)。[#75010](https://github.com/ClickHouse/ClickHouse/pull/75010) ([Daniil Ivanik](https://github.com/divanik)). +* 从 `system.opentelemetry_span_log` 的默认 ORDER BY 中删除 trace_id。 [#75907](https://github.com/ClickHouse/ClickHouse/pull/75907) ([Azat Khuzhin](https://github.com/azat)). +* 现在可以将加密(属性 `encrypted_by`)应用于任何配置文件(config.xml、users.xml、嵌套配置文件)。此前,它仅适用于顶级 config.xml 配置文件。[#75911](https://github.com/ClickHouse/ClickHouse/pull/75911)([Mikhail Gorshkov](https://github.com/mgorshkov))。 +* 改进 `system.warnings` 表,并添加一些可添加、更新或删除的动态告警消息。[#76029](https://github.com/ClickHouse/ClickHouse/pull/76029) ([Bharat Nallan](https://github.com/bharatnc))。 +* 此 PR 不再允许运行查询 `ALTER USER user1 ADD PROFILES a, DROP ALL PROFILES`,因为所有 `DROP` 操作都必须在语句中排在最前面。[#76242](https://github.com/ClickHouse/ClickHouse/pull/76242) ([pufit](https://github.com/pufit)). +* 针对 SYNC REPLICA 进行多项增强(更清晰的错误信息、更完善的测试、合理性检查)。 [#76307](https://github.com/ClickHouse/ClickHouse/pull/76307) ([Azat Khuzhin](https://github.com/azat)). +* 在备份到 S3 时,如果分段复制因 Access Denied 而失败,使用正确的回退策略。当在具有不同凭证的 bucket 之间执行备份时,多部分复制可能会产生 Access Denied 错误。[#76515](https://github.com/ClickHouse/ClickHouse/pull/76515) ([Antonio Andelic](https://github.com/antonio2368))。 +* 将 librdkafka(这堆不太好用的东西)升级到 2.8.0 版本(升级后也并没有好到哪去),并改进了 Kafka 表的关闭流程,从而减少在删除表和重启服务器时的延迟。`engine=Kafka` 在表被删除时不再显式地退出 consumer group。相反,consumer 会继续留在 group 中,直到在空闲超过 `session_timeout_ms`(默认:45 秒)后被自动移除。[#76621](https://github.com/ClickHouse/ClickHouse/pull/76621)([filimonov](https://github.com/filimonov))。 +* 修复 S3 请求设置的验证。[#76658](https://github.com/ClickHouse/ClickHouse/pull/76658) ([Vitaly Baranov](https://github.com/vitlibar))。 +* 像 `server_settings` 或 `settings` 这样的系统表包含一个 `default` 值列,这非常方便。现在也在 `merge_tree_settings` 和 `replicated_merge_tree_settings` 中添加了该列。[#76942](https://github.com/ClickHouse/ClickHouse/pull/76942)([Diego Nieto](https://github.com/lesandie))。 +* 新增了 `ProfileEvents::QueryPreempted`,其逻辑与 `CurrentMetrics::QueryPreempted` 类似。[#77015](https://github.com/ClickHouse/ClickHouse/pull/77015) ([VicoWu](https://github.com/VicoWu))。 +* 之前,Replicated 数据库可能会将查询中指定的凭证打印到日志中。该问题已修复,相关 issue 已关闭:[#77123](https://github.com/ClickHouse/ClickHouse/issues/77123)。[#77133](https://github.com/ClickHouse/ClickHouse/pull/77133)([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 +* 允许对 `plain_rewritable` 磁盘执行 ALTER TABLE DROP PARTITION。 [#77138](https://github.com/ClickHouse/ClickHouse/pull/77138) ([Julia Kartseva](https://github.com/jkartseva)). +* 备份/恢复设置 `allow_s3_native_copy` 现在支持三个取值:- `False` - 不使用 S3 原生拷贝;- `True`(旧默认值)- ClickHouse 将首先尝试使用 S3 原生拷贝,如果失败则回退到读写方式;- `'auto'`(新默认值)- ClickHouse 将首先比较源端和目标端的凭证。如果相同,ClickHouse 将尝试使用 S3 原生拷贝,然后可能回退到读写方式。如果不同,ClickHouse 将直接使用读写方式。[#77401](https://github.com/ClickHouse/ClickHouse/pull/77401) ([Vitaly Baranov](https://github.com/vitlibar))。 +* 在 DeltaLake 表引擎的 delta kernel 中增加对 AWS 会话令牌和环境变量凭证的支持。 [#77661](https://github.com/ClickHouse/ClickHouse/pull/77661) ([Kseniia Sumarokova](https://github.com/kssenii)). + +#### 缺陷修复(在官方稳定版中对用户可见的异常行为) + +* 修复在处理异步分布式 INSERT 的待处理批次时会卡住的问题(例如由于 `No such file or directory`)。 [#72939](https://github.com/ClickHouse/ClickHouse/pull/72939) ([Azat Khuzhin](https://github.com/azat)). +* 通过在索引分析期间对隐式的 Date 到 DateTime 转换强制采用饱和策略,改进了日期时间转换。这解决了由于日期时间范围限制而可能导致的索引分析不准确问题。修复了 [#73307](https://github.com/ClickHouse/ClickHouse/issues/73307)。同时还修复了在 `date_time_overflow_behavior = 'ignore'`(默认值)时显式调用 `toDateTime` 的转换行为。[#73326](https://github.com/ClickHouse/ClickHouse/pull/73326)([Amos Bird](https://github.com/amosbird))。 +* 修复各种由于 UUID 与表名之间竞态条件导致的错误(例如,它将修复 `RENAME` 与 `RESTART REPLICA` 之间的竞态问题;在并发执行 `RENAME` 与 `SYSTEM RESTART REPLICA` 的情况下,可能最终会重启错误的副本,和/或使其中一个表停留在 `Table X is being restarted` 状态)。 [#76308](https://github.com/ClickHouse/ClickHouse/pull/76308) ([Azat Khuzhin](https://github.com/azat)). +* 修复在启用 async insert 并执行 insert into ... from file ... 且块大小不一致时的数据丢失问题:当第一个块大小 < async_max_size 而第二个块 > async_max_size 时,第二个块不会被插入,其数据会滞留在 `squashing` 中。 [#76343](https://github.com/ClickHouse/ClickHouse/pull/76343) ([Han Fei](https://github.com/hanfei1991)). * 将 `system.data_skipping_indices` 中的字段 'marks' 重命名为 'marks_bytes'。 [#76374](https://github.com/ClickHouse/ClickHouse/pull/76374) ([Robert Schulze](https://github.com/rschu1ze))。 -* 修复动态文件系统缓存大小调整在逐出过程中处理意外错误的问题。[#76466](https://github.com/ClickHouse/ClickHouse/pull/76466) ([Kseniia Sumarokova](https://github.com/kssenii)). -* 修复了并行哈希中 `used_flag` 的初始化问题。该问题可能会导致服务器崩溃。[#76580](https://github.com/ClickHouse/ClickHouse/pull/76580)([Nikita Taranov](https://github.com/nickitat))。 -* 修复在投影中调用 `defaultProfiles` 函数时的逻辑错误。[#76627](https://github.com/ClickHouse/ClickHouse/pull/76627)([pufit](https://github.com/pufit))。 -* 在 Web UI 中不再通过浏览器请求交互式 Basic 身份验证。解决 [#76319](https://github.com/ClickHouse/ClickHouse/issues/76319)。[#76637](https://github.com/ClickHouse/ClickHouse/pull/76637)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 修复在从 Distributed 表中查询布尔字面量时出现的 THERE_IS_NO_COLUMN 异常。[#76656](https://github.com/ClickHouse/ClickHouse/pull/76656) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* 表目录中的子路径现在以更合理的方式进行选择。[#76681](https://github.com/ClickHouse/ClickHouse/pull/76681)([Daniil Ivanik](https://github.com/divanik))。 -* 修复在主键中包含子列的表执行 `ALTER` 后出现的错误 `Not found column in block`。在 [https://github.com/ClickHouse/ClickHouse/pull/72644](https://github.com/ClickHouse/ClickHouse/pull/72644) 之后,需要 [https://github.com/ClickHouse/ClickHouse/pull/74403](https://github.com/ClickHouse/ClickHouse/pull/74403)。[#76686](https://github.com/ClickHouse/ClickHouse/pull/76686)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 -* 为 null 短路添加性能测试并修复相关错误。[#76708](https://github.com/ClickHouse/ClickHouse/pull/76708) ([李扬](https://github.com/taiyang-li))。 -* 在最终化输出写缓冲区之前先刷新其内容。修复在某些输出格式(例如 `JSONEachRowWithProgressRowOutputFormat`)的最终化过程中产生的 `LOGICAL_ERROR`。 [#76726](https://github.com/ClickHouse/ClickHouse/pull/76726) ([Antonio Andelic](https://github.com/antonio2368)). -* 新增对 MongoDB 的二进制 UUID 的支持 ([#74452](https://github.com/ClickHouse/ClickHouse/issues/74452)) - 修复在使用表函数时对 MongoDB 的 WHERE 子句下推 ([#72210](https://github.com/ClickHouse/ClickHouse/issues/72210)) - 更改 MongoDB - ClickHouse 类型映射,使得 MongoDB 的二进制 UUID 仅能被解析为 ClickHouse 的 UUID。这应当可以避免将来的歧义和意外情况。- 修复 OID 映射,同时保留向后兼容性。[#76762](https://github.com/ClickHouse/ClickHouse/pull/76762) ([Kirill Nikiforov](https://github.com/allmazz))。 -* 修复 JSON 子列并行前缀反序列化过程中的异常处理。 [#76809](https://github.com/ClickHouse/ClickHouse/pull/76809) ([Pavel Kruglov](https://github.com/Avogar))。 -* 修复 lgamma 函数对负整数参数的行为。[#76840](https://github.com/ClickHouse/ClickHouse/pull/76840) ([Ilya Kataev](https://github.com/IlyaKataev)). -* 修复显式定义主键时的反向键分析问题。类似于 [#76654](https://github.com/ClickHouse/ClickHouse/issues/76654)。[#76846](https://github.com/ClickHouse/ClickHouse/pull/76846)([Amos Bird](https://github.com/amosbird))。 -* 修复 Bool 值在 JSON 格式中的美化输出。[#76905](https://github.com/ClickHouse/ClickHouse/pull/76905)([Pavel Kruglov](https://github.com/Avogar))。 -* 修复由于在异步插入期间出错时对 JSON 列回滚不正确而可能导致的崩溃。[#76908](https://github.com/ClickHouse/ClickHouse/pull/76908) ([Pavel Kruglov](https://github.com/Avogar)). -* 此前,`multiIf` 在计划阶段和主执行阶段可能返回不同类型的列。这会导致从 C++ 视角来看会生成具有未定义行为的代码。[#76914](https://github.com/ClickHouse/ClickHouse/pull/76914)([Nikita Taranov](https://github.com/nickitat))。 -* 修复了在 MergeTree 中对常量可空键的错误序列化。这修复了 [#76939](https://github.com/ClickHouse/ClickHouse/issues/76939)。[#76985](https://github.com/ClickHouse/ClickHouse/pull/76985)([Amos Bird](https://github.com/amosbird))。 -* 修复 `BFloat16` 值的排序,从而关闭了 [#75487](https://github.com/ClickHouse/ClickHouse/issues/75487)。同时关闭了 [#75669](https://github.com/ClickHouse/ClickHouse/issues/75669)。[#77000](https://github.com/ClickHouse/ClickHouse/pull/77000)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 通过在 part 一致性检查中添加跳过临时子列的检查逻辑,修复了 JSON 中包含 Variant 子列时的 bug。 [#72187](https://github.com/ClickHouse/ClickHouse/issues/72187)。 [#77034](https://github.com/ClickHouse/ClickHouse/pull/77034) ([Smita Kulkarni](https://github.com/SmitaRKulkarni))。 -* 修复在 Values 格式中解析模板时因类型不匹配而导致的崩溃。[#77071](https://github.com/ClickHouse/ClickHouse/pull/77071)([Pavel Kruglov](https://github.com/Avogar))。 -* 不允许创建在主键中包含子列的 EmbeddedRocksDB 表。之前虽然可以创建这样的表,但执行 SELECT 查询时会失败。[#77074](https://github.com/ClickHouse/ClickHouse/pull/77074)([Pavel Kruglov](https://github.com/Avogar))。 -* 修复分布式查询中的非法比较问题,因为向远端下推谓词时没有正确遵循字面量类型。[#77093](https://github.com/ClickHouse/ClickHouse/pull/77093) ([Duc Canh Le](https://github.com/canhld94)). -* 修复在创建 Kafka 表时因异常导致的崩溃。[#77121](https://github.com/ClickHouse/ClickHouse/pull/77121) ([Pavel Kruglov](https://github.com/Avogar))。 -* 为 Kafka 和 RabbitMQ 引擎添加对 JSON 和子列的支持。[#77122](https://github.com/ClickHouse/ClickHouse/pull/77122) ([Pavel Kruglov](https://github.com/Avogar))。 -* 修复在 macOS 上异常堆栈展开的问题。[#77126](https://github.com/ClickHouse/ClickHouse/pull/77126)([Eduard Karacharov](https://github.com/korowa))。 -* 修复 `getSubcolumn` 函数中读取名为 'null' 的子列时的问题。 [#77163](https://github.com/ClickHouse/ClickHouse/pull/77163) ([Pavel Kruglov](https://github.com/Avogar)). -* 修复在 Array 类型及不受支持的函数上使用时的布隆过滤器索引问题。 [#77271](https://github.com/ClickHouse/ClickHouse/pull/77271) ([Pavel Kruglov](https://github.com/Avogar)). +* 修复动态文件系统缓存调整大小时在淘汰过程中处理意外错误的问题。 [#76466](https://github.com/ClickHouse/ClickHouse/pull/76466) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 修复了并行哈希中 `used_flag` 的初始化问题,这可能会导致服务器崩溃。[#76580](https://github.com/ClickHouse/ClickHouse/pull/76580) ([Nikita Taranov](https://github.com/nickitat)). +* 修复在投影中调用 `defaultProfiles` 函数时的逻辑错误。[#76627](https://github.com/ClickHouse/ClickHouse/pull/76627) ([pufit](https://github.com/pufit))。 +* 在 Web UI 中不再在浏览器中请求交互式基本身份验证。修复了 [#76319](https://github.com/ClickHouse/ClickHouse/issues/76319)。[#76637](https://github.com/ClickHouse/ClickHouse/pull/76637)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 修复从分布式表中查询布尔字面量时抛出的 THERE_IS_NO_COLUMN 异常。[#76656](https://github.com/ClickHouse/ClickHouse/pull/76656) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* 现在以更合理的方式确定表目录中的子路径。[#76681](https://github.com/ClickHouse/ClickHouse/pull/76681) ([Daniil Ivanik](https://github.com/divanik))。 +* 修复在对主键中包含子列的表执行 `ALTER` 后出现的错误 `Not found column in block`。在 [https://github.com/ClickHouse/ClickHouse/pull/72644](https://github.com/ClickHouse/ClickHouse/pull/72644) 之后,还需要 [https://github.com/ClickHouse/ClickHouse/pull/74403](https://github.com/ClickHouse/ClickHouse/pull/74403)。[#76686](https://github.com/ClickHouse/ClickHouse/pull/76686)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 +* 为 null 短路添加性能测试并修复相关错误。 [#76708](https://github.com/ClickHouse/ClickHouse/pull/76708) ([李扬](https://github.com/taiyang-li)). +* 在对输出写缓冲区进行最终处理之前先刷新它们。修复在某些输出格式最终处理阶段生成的 `LOGICAL_ERROR`,例如 `JSONEachRowWithProgressRowOutputFormat`。 [#76726](https://github.com/ClickHouse/ClickHouse/pull/76726) ([Antonio Andelic](https://github.com/antonio2368)). +* 增加了对 MongoDB 二进制 UUID 的支持([#74452](https://github.com/ClickHouse/ClickHouse/issues/74452))——修复了在使用表函数时对 MongoDB 的 WHERE 条件下推([#72210](https://github.com/ClickHouse/ClickHouse/issues/72210))——修改了 MongoDB - ClickHouse 类型映射,使 MongoDB 的二进制 UUID 只能被解析为 ClickHouse 的 UUID,从而避免今后的歧义和意外情况。——修复了 OID 映射,同时保留向后兼容性。[#76762](https://github.com/ClickHouse/ClickHouse/pull/76762)([Kirill Nikiforov](https://github.com/allmazz))。 +* 修复 JSON 子列并行前缀反序列化过程中的异常处理。[#76809](https://github.com/ClickHouse/ClickHouse/pull/76809) ([Pavel Kruglov](https://github.com/Avogar))。 +* 修复 `lgamma` 函数针对负整数的行为。[#76840](https://github.com/ClickHouse/ClickHouse/pull/76840) ([Ilya Kataev](https://github.com/IlyaKataev)). +* 修复对显式定义主键的反向键分析。类似于 [#76654](https://github.com/ClickHouse/ClickHouse/issues/76654)。[#76846](https://github.com/ClickHouse/ClickHouse/pull/76846)([Amos Bird](https://github.com/amosbird))。 +* 修复 JSON 格式中 Bool 布尔值的格式化输出。[#76905](https://github.com/ClickHouse/ClickHouse/pull/76905) ([Pavel Kruglov](https://github.com/Avogar)). +* 修复在异步插入出错时,由于对 JSON 列回滚处理不当而可能导致的崩溃。[#76908](https://github.com/ClickHouse/ClickHouse/pull/76908) ([Pavel Kruglov](https://github.com/Avogar)). +* 之前,`multiIf` 在计划阶段和主执行阶段可能返回不同类型的列。这会导致代码在 C++ 层面上产生未定义行为。[#76914](https://github.com/ClickHouse/ClickHouse/pull/76914)([Nikita Taranov](https://github.com/nickitat))。 +* 修复了 MergeTree 中常量 Nullable 键的错误序列化。这修复了 [#76939](https://github.com/ClickHouse/ClickHouse/issues/76939)。[#76985](https://github.com/ClickHouse/ClickHouse/pull/76985)([Amos Bird](https://github.com/amosbird))。 +* 修复 `BFloat16` 值的排序问题。已关闭 [#75487](https://github.com/ClickHouse/ClickHouse/issues/75487)。已关闭 [#75669](https://github.com/ClickHouse/ClickHouse/issues/75669)。[#77000](https://github.com/ClickHouse/ClickHouse/pull/77000)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 通过在 part 一致性检查中添加跳过临时子列的检查,修复了 JSON 中包含 Variant 子列时的错误。[#72187](https://github.com/ClickHouse/ClickHouse/issues/72187)。[#77034](https://github.com/ClickHouse/ClickHouse/pull/77034)([Smita Kulkarni](https://github.com/SmitaRKulkarni))。 +* 修复在 `Values` 格式中解析模板时,由类型不匹配导致的崩溃。 [#77071](https://github.com/ClickHouse/ClickHouse/pull/77071) ([Pavel Kruglov](https://github.com/Avogar)). +* 不再允许创建主键中包含子列的 EmbeddedRocksDB 表。此前可以创建这样的表,但 `SELECT` 查询会失败。[#77074](https://github.com/ClickHouse/ClickHouse/pull/77074)([Pavel Kruglov](https://github.com/Avogar))。 +* 修复分布式查询中的非法比较问题,因为在将谓词下推到远程端时未正确考虑字面量类型。[#77093](https://github.com/ClickHouse/ClickHouse/pull/77093)([Duc Canh Le](https://github.com/canhld94))。 +* 修复在创建 Kafka 表时由于异常导致的崩溃问题。 [#77121](https://github.com/ClickHouse/ClickHouse/pull/77121) ([Pavel Kruglov](https://github.com/Avogar)). +* 为 Kafka 和 RabbitMQ 引擎增加对 JSON 和子列的支持。 [#77122](https://github.com/ClickHouse/ClickHouse/pull/77122) ([Pavel Kruglov](https://github.com/Avogar)). +* 修复在 macOS 上的异常栈展开逻辑。 [#77126](https://github.com/ClickHouse/ClickHouse/pull/77126) ([Eduard Karacharov](https://github.com/korowa)). +* 修复 getSubcolumn 函数中读取 `null` 子列时的问题。[#77163](https://github.com/ClickHouse/ClickHouse/pull/77163) ([Pavel Kruglov](https://github.com/Avogar)). +* 修复在与 `Array` 类型和不受支持函数一起使用时的 Bloom 过滤器索引问题。 [#77271](https://github.com/ClickHouse/ClickHouse/pull/77271) ([Pavel Kruglov](https://github.com/Avogar))。 * 我们应当仅在初始 CREATE 查询时检查表数量限制。[#77274](https://github.com/ClickHouse/ClickHouse/pull/77274) ([Nikolay Degterinsky](https://github.com/evillique))。 -* 并非缺陷:`SELECT toBFloat16(-0.0) == toBFloat16(0.0)` 现在会正确返回 `true`(此前为 `false`)。这使其行为与 `Float32` 和 `Float64` 保持一致。[#77290](https://github.com/ClickHouse/ClickHouse/pull/77290) ([Shankar Iyer](https://github.com/shankar-iyer))。 -* 修复对未初始化的 key_index 变量可能存在的不正确引用,该问题可能会导致在调试版本中发生崩溃(在发布版本中,这个未初始化引用通常不会导致问题,因为后续代码很可能会抛出错误)。### 面向用户变更的文档条目。[#77305](https://github.com/ClickHouse/ClickHouse/pull/77305) ([wxybear](https://github.com/wxybear))。 -* 修复包含 Bool 值的分区名称。该名称在 [https://github.com/ClickHouse/ClickHouse/pull/74533](https://github.com/ClickHouse/ClickHouse/pull/74533) 中被破坏。 [#77319](https://github.com/ClickHouse/ClickHouse/pull/77319)([Pavel Kruglov](https://github.com/Avogar))。 -* 修复包含 Nullable 元素的 Tuple 与字符串之间的比较问题。比如,在此更改之前,比较 Tuple `(1, null)` 与 String `'(1,null)'` 会导致错误。另一个例子是比较 Tuple `(1, a)`(其中 `a` 是 Nullable 列)与 String `'(1, 2)'`。此次更改解决了这些问题。[#77323](https://github.com/ClickHouse/ClickHouse/pull/77323)([Alexey Katsman](https://github.com/alexkats))。 -* 修复 `ObjectStorageQueueSource` 中的崩溃。该问题是在 [https://github.com/ClickHouse/ClickHouse/pull/76358](https://github.com/ClickHouse/ClickHouse/pull/76358) 中引入的。[#77325](https://github.com/ClickHouse/ClickHouse/pull/77325)([Pavel Kruglov](https://github.com/Avogar))。 -* 修复 `async_insert` 与 `input` 的配合使用。[#77340](https://github.com/ClickHouse/ClickHouse/pull/77340)([Azat Khuzhin](https://github.com/azat))。 -* 修复:当排序列被查询规划器移除时,`WITH FILL` 可能会因 NOT_FOUND_COLUMN_IN_BLOCK 错误而失败。类似问题与为 INTERPOLATE 表达式计算出的不一致 DAG 相关。[#77343](https://github.com/ClickHouse/ClickHouse/pull/77343)([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy))。 -* 修复了在为无效 AST 节点设置别名时触发的多个 LOGICAL_ERROR。 [#77445](https://github.com/ClickHouse/ClickHouse/pull/77445) ([Raúl Marín](https://github.com/Algunenano)). -* 在 filesystem cache 的实现中修复了文件段写入过程中的错误处理问题。[#77471](https://github.com/ClickHouse/ClickHouse/pull/77471)([Kseniia Sumarokova](https://github.com/kssenii))。 -* 使 DatabaseIceberg 使用 catalog 提供的正确元数据文件。修复 [#75187](https://github.com/ClickHouse/ClickHouse/issues/75187)。[#77486](https://github.com/ClickHouse/ClickHouse/pull/77486)([Kseniia Sumarokova](https://github.com/kssenii))。 -* 查询缓存现在假定 UDF 是非确定性的。因此,带有 UDF 的查询结果将不再被缓存。此前,用户可以定义非确定性的 UDF,而其结果会被错误地缓存(问题 [#77553](https://github.com/ClickHouse/ClickHouse/issues/77553))。[#77633](https://github.com/ClickHouse/ClickHouse/pull/77633)([Jimmy Aguilar Mena](https://github.com/Ergus))。 -* 修复 `system.filesystem_cache_log` 只有在启用设置 `enable_filesystem_cache_log` 时才会工作的情况。 [#77650](https://github.com/ClickHouse/ClickHouse/pull/77650) ([Kseniia Sumarokova](https://github.com/kssenii)). -* 修复在投影中调用 `defaultRoles` 函数时的逻辑错误,作为对 [#76627](https://github.com/ClickHouse/ClickHouse/issues/76627) 的后续跟进。[#77667](https://github.com/ClickHouse/ClickHouse/pull/77667)([pufit](https://github.com/pufit))。 -* 现在不再允许将 `Nullable` 类型作为函数 `arrayResize` 的第二个参数。此前,当第二个参数为 `Nullable` 类型时,可能会出现从报错到结果错误等各种问题(问题 [#48398](https://github.com/ClickHouse/ClickHouse/issues/48398))。[#77724](https://github.com/ClickHouse/ClickHouse/pull/77724)([Manish Gill](https://github.com/mgill25))。 -* 即使在操作不会产生任何需要写入的数据块时,也要定期检查合并和变更(merges 和 mutations)是否被取消。[#77766](https://github.com/ClickHouse/ClickHouse/pull/77766)([János Benjamin Antal](https://github.com/antaljanosbenjamin))。 - - +* 并非 Bug:`SELECT toBFloat16(-0.0) == toBFloat16(0.0)` 现在会正确返回 `true`(此前为 `false`)。这使其行为与 `Float32` 和 `Float64` 保持一致。[#77290](https://github.com/ClickHouse/ClickHouse/pull/77290)([Shankar Iyer](https://github.com/shankar-iyer))。 +* 修复对未初始化的 `key_index` 变量可能出现的不正确引用,该问题可能会在调试构建中导致崩溃(在发布构建中,这个未初始化引用不会造成问题,因为后续代码很可能会抛出错误)。### 面向用户可见变更的文档条目。[#77305](https://github.com/ClickHouse/ClickHouse/pull/77305) ([wxybear](https://github.com/wxybear))。 +* 修复 Bool 类型分区名称的问题。该问题是在 [https://github.com/ClickHouse/ClickHouse/pull/74533](https://github.com/ClickHouse/ClickHouse/pull/74533) 中引入的。 [#77319](https://github.com/ClickHouse/ClickHouse/pull/77319) ([Pavel Kruglov](https://github.com/Avogar)). +* 修复包含可为空元素的 Tuple 与字符串之间的比较问题。举例来说,在此变更之前,Tuple `(1, null)` 与 String `'(1,null)'` 之间的比较会导致错误。另一个示例是比较 Tuple `(1, a)`(其中 `a` 是 Nullable 列)和 String `'(1, 2)'`。此变更解决了这些问题。[#77323](https://github.com/ClickHouse/ClickHouse/pull/77323)([Alexey Katsman](https://github.com/alexkats))。 +* 修复 `ObjectStorageQueueSource` 中的崩溃问题。该问题是由 [https://github.com/ClickHouse/ClickHouse/pull/76358](https://github.com/ClickHouse/ClickHouse/pull/76358) 引入的。[#77325](https://github.com/ClickHouse/ClickHouse/pull/77325)([Pavel Kruglov](https://github.com/Avogar))。 +* 修复与 `input` 一起使用时的 `async_insert`。 [#77340](https://github.com/ClickHouse/ClickHouse/pull/77340) ([Azat Khuzhin](https://github.com/azat)). +* 修复:当排序列被规划器移除时,`WITH FILL` 可能会因 NOT_FOUND_COLUMN_IN_BLOCK 而失败。修复了一个类似的问题,该问题与对 INTERPOLATE 表达式计算出的 DAG 不一致有关。 [#77343](https://github.com/ClickHouse/ClickHouse/pull/77343) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* 修复了在为无效 AST 节点设置别名时出现的多个 LOGICAL_ERROR。[#77445](https://github.com/ClickHouse/ClickHouse/pull/77445) ([Raúl Marín](https://github.com/Algunenano))。 +* 在 filesystem cache 的实现中修复了文件段写入过程中的错误处理。 [#77471](https://github.com/ClickHouse/ClickHouse/pull/77471) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 使 DatabaseIceberg 使用目录提供的正确元数据文件。修复 [#75187](https://github.com/ClickHouse/ClickHouse/issues/75187)。[#77486](https://github.com/ClickHouse/ClickHouse/pull/77486)([Kseniia Sumarokova](https://github.com/kssenii))。 +* 查询缓存现在假定 UDF 为非确定性函数。因此,包含 UDF 的查询结果将不再被缓存。此前,用户可以定义非确定性的 UDF,其结果会被错误地缓存(问题 [#77553](https://github.com/ClickHouse/ClickHouse/issues/77553))。[#77633](https://github.com/ClickHouse/ClickHouse/pull/77633)([Jimmy Aguilar Mena](https://github.com/Ergus))。 +* 修复 `system.filesystem_cache_log` 仅在设置 `enable_filesystem_cache_log` 时才生效的问题。[#77650](https://github.com/ClickHouse/ClickHouse/pull/77650) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 修复在投影中调用 `defaultRoles` 函数时的逻辑错误。作为对 [#76627](https://github.com/ClickHouse/ClickHouse/issues/76627) 的后续修复。[#77667](https://github.com/ClickHouse/ClickHouse/pull/77667)([pufit](https://github.com/pufit))。 +* 现在不再允许将类型为 `Nullable` 的值作为函数 `arrayResize` 的第二个参数。此前,当第二个参数为 `Nullable` 时,可能会出现从报错到结果错误在内的各种问题。(issue [#48398](https://github.com/ClickHouse/ClickHouse/issues/48398))。[#77724](https://github.com/ClickHouse/ClickHouse/pull/77724)([Manish Gill](https://github.com/mgill25))。 +* 即使在操作不会产生任何要写入的数据块时,也要定期检查合并和变更是否被取消。[#77766](https://github.com/ClickHouse/ClickHouse/pull/77766) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). #### 构建/测试/打包改进 -* 将 `clickhouse-odbc-bridge` 和 `clickhouse-library-bridge` 迁移到独立仓库:https://github.com/ClickHouse/odbc-bridge/。 [#76225](https://github.com/ClickHouse/ClickHouse/pull/76225)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 修复 Rust 交叉编译问题,并允许完全禁用 Rust。 [#76921](https://github.com/ClickHouse/ClickHouse/pull/76921)([Raúl Marín](https://github.com/Algunenano))。 +* 将 `clickhouse-odbc-bridge` 和 `clickhouse-library-bridge` 移动到独立的代码仓库:https://github.com/ClickHouse/odbc-bridge/。[#76225](https://github.com/ClickHouse/ClickHouse/pull/76225) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 修复 Rust 交叉编译问题,并允许完全禁用 Rust。[#76921](https://github.com/ClickHouse/ClickHouse/pull/76921) ([Raúl Marín](https://github.com/Algunenano))。 -### ClickHouse 25.2 版本,2025-02-27 {#252} - -#### 不向后兼容的变更 -* 默认完全启用 `async_load_databases`(即使对于未升级 `config.xml` 的安装)。 [#74772](https://github.com/ClickHouse/ClickHouse/pull/74772)([Azat Khuzhin](https://github.com/azat))。 -* 添加 `JSONCompactEachRowWithProgress` 和 `JSONCompactStringsEachRowWithProgress` 格式,是对 [#69989](https://github.com/ClickHouse/ClickHouse/issues/69989) 的延续。`JSONCompactWithNames` 和 `JSONCompactWithNamesAndTypes` 将不再输出 "totals"——显然这是实现中的一个错误。 [#75037](https://github.com/ClickHouse/ClickHouse/pull/75037)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 将 `format_alter_operations_with_parentheses` 的默认值更改为 true,以消除 ALTER 命令列表的歧义(参见 https://github.com/ClickHouse/ClickHouse/pull/59532)。这会导致与 24.3 之前版本的集群之间的复制失败。如果你正在升级使用旧版本的集群,请在服务器配置中关闭该设置,或先升级到 24.3。 [#75302](https://github.com/ClickHouse/ClickHouse/pull/75302)([Raúl Marín](https://github.com/Algunenano))。 -* 移除使用正则表达式过滤日志消息的功能。该实现引入了数据竞争,因此必须移除。 [#75577](https://github.com/ClickHouse/ClickHouse/pull/75577)([János Benjamin Antal](https://github.com/antaljanosbenjamin))。 -* 设置 `min_chunk_bytes_for_parallel_parsing` 不再允许为零。这修复了问题:[#71110](https://github.com/ClickHouse/ClickHouse/issues/71110)。 [#75239](https://github.com/ClickHouse/ClickHouse/pull/75239)([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 -* 在缓存配置中校验设置。此前不存在的设置会被忽略,现在会抛出错误,需要将其移除。 [#75452](https://github.com/ClickHouse/ClickHouse/pull/75452)([Kseniia Sumarokova](https://github.com/kssenii))。 +### ClickHouse 25.2 版本发布,2025-02-27 {#252} +#### 向后不兼容的变更 +* 默认完全启用 `async_load_databases`(即使对于那些没有升级 `config.xml` 的安装)。[#74772](https://github.com/ClickHouse/ClickHouse/pull/74772)([Azat Khuzhin](https://github.com/azat))。 +* 新增 `JSONCompactEachRowWithProgress` 和 `JSONCompactStringsEachRowWithProgress` 格式,为 [#69989](https://github.com/ClickHouse/ClickHouse/issues/69989) 的延续。`JSONCompactWithNames` 和 `JSONCompactWithNamesAndTypes` 不再输出 "totals" —— 显然这是实现中的一个错误。[#75037](https://github.com/ClickHouse/ClickHouse/pull/75037)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 将 `format_alter_operations_with_parentheses` 的默认值改为 true,以消除 ALTER 命令列表的歧义(见 https://github.com/ClickHouse/ClickHouse/pull/59532)。这会导致与 24.3 之前版本集群的复制失败。如果你正在升级使用旧版本的集群,请在服务器配置中关闭该设置,或者先升级到 24.3。[#75302](https://github.com/ClickHouse/ClickHouse/pull/75302)([Raúl Marín](https://github.com/Algunenano))。 +* 移除使用正则表达式过滤日志消息的功能。该实现引入了数据竞争,因此必须移除。[#75577](https://github.com/ClickHouse/ClickHouse/pull/75577)([János Benjamin Antal](https://github.com/antaljanosbenjamin))。 +* 设置 `min_chunk_bytes_for_parallel_parsing` 不再允许为零。修复了:[#71110](https://github.com/ClickHouse/ClickHouse/issues/71110)。[#75239](https://github.com/ClickHouse/ClickHouse/pull/75239)([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 +* 校验缓存配置中的设置。此前,配置中不存在的设置项会被忽略;现在会抛出错误,需要将其移除。[#75452](https://github.com/ClickHouse/ClickHouse/pull/75452)([Kseniia Sumarokova](https://github.com/kssenii))。 #### 新功能 -* 支持类型 `Nullable(JSON)`。[#73556](https://github.com/ClickHouse/ClickHouse/pull/73556) ([Pavel Kruglov](https://github.com/Avogar)). -* 在 DEFAULT 和 MATERIALIZED 表达式中支持子列(subcolumns)。[#74403](https://github.com/ClickHouse/ClickHouse/pull/74403) ([Pavel Kruglov](https://github.com/Avogar)). -* 通过设置 `output_format_parquet_write_bloom_filter`(默认启用)支持写入 Parquet Bloom 过滤器。[#71681](https://github.com/ClickHouse/ClickHouse/pull/71681) ([Michael Kolupaev](https://github.com/al13n321)). -* Web UI 现在具有交互式数据库导航功能。[#75777](https://github.com/ClickHouse/ClickHouse/pull/75777) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* 允许在存储策略中组合只读磁盘和读写磁盘(作为多个卷或多块磁盘)。这样可以从整个卷读取数据,而插入操作会优先选择可写磁盘(即 Copy-on-Write 存储策略)。[#75862](https://github.com/ClickHouse/ClickHouse/pull/75862) ([Azat Khuzhin](https://github.com/azat)). -* 新增一个 Database 引擎 `DatabaseBackup`,允许从备份中即时附加表/数据库。[#75725](https://github.com/ClickHouse/ClickHouse/pull/75725) ([Maksim Kita](https://github.com/kitaisreal)). -* 在 Postgres wire 协议中支持 prepared statements。[#75035](https://github.com/ClickHouse/ClickHouse/pull/75035) ([scanhex12](https://github.com/scanhex12)). -* 新增在没有数据库层的情况下执行 ATTACH 表的能力,这对于位于 Web、S3 等外部虚拟文件系统上的 MergeTree 表非常有用。[#75788](https://github.com/ClickHouse/ClickHouse/pull/75788) ([Azat Khuzhin](https://github.com/azat)). -* 新增字符串比较函数 `compareSubstrings`,用于比较两个字符串的部分内容。示例:`SELECT compareSubstrings('Saxony', 'Anglo-Saxon', 0, 6, 5) AS result` 的含义是“按字典序比较字符串 'Saxon' 和 'Anglo-Saxon' 的 6 个字节,从第一个字符串的偏移量 0 和第二个字符串的偏移量 5 开始”。[#74070](https://github.com/ClickHouse/ClickHouse/pull/74070) ([lgbo](https://github.com/lgbo-ustc)). -* 新增函数 `initialQueryStartTime`。它返回当前查询的开始时间。在分布式查询过程中,该值在所有分片上都是相同的。[#75087](https://github.com/ClickHouse/ClickHouse/pull/75087) ([Roman Lomonosov](https://github.com/lomik)). -* 为 MySQL 的命名集合(named collections)增加对 SSL 认证的支持。修复 [#59111](https://github.com/ClickHouse/ClickHouse/issues/59111)。[#59452](https://github.com/ClickHouse/ClickHouse/pull/59452) ([Nikolay Degterinsky](https://github.com/evillique)). - -#### 实验性功能 -* 新增设置 `enable_adaptive_memory_spill_scheduler`,允许同一查询中的多个 Grace JOIN 监控它们合计的内存占用,并自适应地触发将数据溢写到外部存储,以防止 MEMORY_LIMIT_EXCEEDED。[#72728](https://github.com/ClickHouse/ClickHouse/pull/72728) ([lgbo](https://github.com/lgbo-ustc)). -* 使新的实验性 `Kafka` 表引擎完全遵循 Keeper 功能开关(feature flags)。[#76004](https://github.com/ClickHouse/ClickHouse/pull/76004) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). -* 恢复在 v24.10 中因许可证问题被移除的(Intel)QPL 编解码器。[#76021](https://github.com/ClickHouse/ClickHouse/pull/76021) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* 在与 HDFS 的集成中,新增对配置项 `dfs.client.use.datanode.hostname` 的支持。[#74635](https://github.com/ClickHouse/ClickHouse/pull/74635) ([Mikhail Tiukavkin](https://github.com/freshertm)). +* 支持 `Nullable(JSON)` 类型。 [#73556](https://github.com/ClickHouse/ClickHouse/pull/73556) ([Pavel Kruglov](https://github.com/Avogar))。 +* 在 DEFAULT 和 MATERIALIZED 表达式中支持子列。 [#74403](https://github.com/ClickHouse/ClickHouse/pull/74403) ([Pavel Kruglov](https://github.com/Avogar))。 +* 支持通过设置 `output_format_parquet_write_bloom_filter`(默认启用)写入 Parquet 布隆过滤器。 [#71681](https://github.com/ClickHouse/ClickHouse/pull/71681) ([Michael Kolupaev](https://github.com/al13n321))。 +* Web UI 现在具有交互式数据库导航功能。 [#75777](https://github.com/ClickHouse/ClickHouse/pull/75777) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 允许在存储策略中组合只读和读写磁盘(作为多个卷或多个磁盘)。这允许从整个卷读取数据,而插入操作将优先选择可写磁盘(即 Copy-on-Write 存储策略)。 [#75862](https://github.com/ClickHouse/ClickHouse/pull/75862) ([Azat Khuzhin](https://github.com/azat))。 +* 新增 `DatabaseBackup` 数据库引擎,可从备份中即时挂载表或数据库。 [#75725](https://github.com/ClickHouse/ClickHouse/pull/75725) ([Maksim Kita](https://github.com/kitaisreal))。 +* 在 Postgres 线协议中支持 prepared statements。 [#75035](https://github.com/ClickHouse/ClickHouse/pull/75035) ([scanhex12](https://github.com/scanhex12))。 +* 新增在没有数据库层的情况下 ATTACH 表的功能,这对于位于 Web、S3 等外部虚拟文件系统上的 MergeTree 表非常有用。 [#75788](https://github.com/ClickHouse/ClickHouse/pull/75788) ([Azat Khuzhin](https://github.com/azat))。 +* 新增字符串比较函数 `compareSubstrings`,用于比较两个字符串的部分内容。示例:`SELECT compareSubstrings('Saxony', 'Anglo-Saxon', 0, 6, 5) AS result` 的含义是“从第一个字符串的偏移量 0 和第二个字符串的偏移量 5 开始,按字典序比较字符串 `Saxon` 和 `Anglo-Saxon` 的 6 个字节”。 [#74070](https://github.com/ClickHouse/ClickHouse/pull/74070) ([lgbo](https://github.com/lgbo-ustc))。 +* 新增函数 `initialQueryStartTime`。它返回当前查询的开始时间。在分布式查询中,该值在所有分片上都是相同的。 [#75087](https://github.com/ClickHouse/ClickHouse/pull/75087) ([Roman Lomonosov](https://github.com/lomik))。 +* 为 MySQL 增加通过 named collections 进行 SSL 认证的支持。关闭 [#59111](https://github.com/ClickHouse/ClickHouse/issues/59111)。 [#59452](https://github.com/ClickHouse/ClickHouse/pull/59452) ([Nikolay Degterinsky](https://github.com/evillique))。 +#### 实验性功能 -#### 性能改进 -* 提升从 S3 读取 Wide 部分中整个 JSON 列的性能。通过为子列前缀反序列化添加预取、对子列前缀反序列化结果进行缓存,以及对子列前缀进行并行反序列化来实现。在类似 `SELECT data FROM table` 的查询中,从 S3 读取该 JSON 列的性能提升约 4 倍,在类似 `SELECT data FROM table LIMIT 10` 的查询中提升约 10 倍。[#74827](https://github.com/ClickHouse/ClickHouse/pull/74827)([Pavel Kruglov](https://github.com/Avogar))。 -* 修复了在 `max_rows_in_join = max_bytes_in_join = 0` 时 `parallel_hash` 中不必要的竞争。[#75155](https://github.com/ClickHouse/ClickHouse/pull/75155)([Nikita Taranov](https://github.com/nickitat))。 -* 修复了在优化器交换 JOIN 两侧时 `ConcurrentHashJoin` 中的双重预分配问题。[#75149](https://github.com/ClickHouse/ClickHouse/pull/75149)([Nikita Taranov](https://github.com/nickitat))。 -* 在某些 JOIN 场景中略微提升性能:预先计算输出行数并为其预留内存。[#75376](https://github.com/ClickHouse/ClickHouse/pull/75376)([Alexander Gololobov](https://github.com/davenger))。 -* 对于类似 `WHERE a < b AND b < c AND c < 5` 的查询,我们可以推导出新的比较条件(`a < 5 AND b < 5`),以获得更好的过滤效果。[#73164](https://github.com/ClickHouse/ClickHouse/pull/73164)([Shichao Jin](https://github.com/jsc0218))。 -* Keeper 改进:在提交到内存存储时禁用摘要计算以获得更好的性能。可以通过 `keeper_server.digest_enabled_on_commit` 配置开启。摘要在预处理请求时仍然会被计算。[#75490](https://github.com/ClickHouse/ClickHouse/pull/75490)([Antonio Andelic](https://github.com/antonio2368))。 -* 在可能的情况下,从 JOIN ON 子句下推过滤表达式。[#75536](https://github.com/ClickHouse/ClickHouse/pull/75536)([Vladimir Cherkasov](https://github.com/vdimir))。 -* 在 MergeTree 中延迟计算列和索引大小。[#75938](https://github.com/ClickHouse/ClickHouse/pull/75938)([Pavel Kruglov](https://github.com/Avogar))。 -* 重新在 `MATERIALIZE TTL` 中生效 `ttl_only_drop_parts`;仅读取重新计算 TTL 所需的列,并通过将数据部分替换为空部分来删除这些部分。[#72751](https://github.com/ClickHouse/ClickHouse/pull/72751)([Andrey Zvonov](https://github.com/zvonand))。 -* 减小 plain_rewritable 元数据文件的写缓冲区大小。[#75758](https://github.com/ClickHouse/ClickHouse/pull/75758)([Julia Kartseva](https://github.com/jkartseva))。 -* 降低某些窗口函数的内存使用。[#65647](https://github.com/ClickHouse/ClickHouse/pull/65647)([lgbo](https://github.com/lgbo-ustc))。 -* 同时评估 parquet 布隆过滤器和最小/最大索引。这样才能正确支持:`x = 3 or x > 5`,其中 data = [1, 2, 4, 5]。[#71383](https://github.com/ClickHouse/ClickHouse/pull/71383)([Arthur Passos](https://github.com/arthurpassos))。 -* 传递到 `Executable` 存储的查询不再仅限于单线程执行。[#70084](https://github.com/ClickHouse/ClickHouse/pull/70084)([yawnt](https://github.com/yawnt))。 -* 在 ALTER TABLE FETCH PARTITION 中并行获取分区(线程池大小由 `max_fetch_partition_thread_pool_size` 控制)。[#74978](https://github.com/ClickHouse/ClickHouse/pull/74978)([Azat Khuzhin](https://github.com/azat))。 -* 允许将使用 `indexHint` 函数的谓词移动到 `PREWHERE`。[#74987](https://github.com/ClickHouse/ClickHouse/pull/74987)([Anton Popov](https://github.com/CurtizJ))。 - - +* 新增了设置项 `enable_adaptive_memory_spill_scheduler`,允许同一查询中的多个 Grace JOIN 监控其合计内存占用,并自适应地触发将数据溢写到外部存储,以防止出现 MEMORY_LIMIT_EXCEEDED。 [#72728](https://github.com/ClickHouse/ClickHouse/pull/72728) ([lgbo](https://github.com/lgbo-ustc)). +* 使新的实验性 `Kafka` 表引擎完全遵循 Keeper 特性标志。 [#76004](https://github.com/ClickHouse/ClickHouse/pull/76004) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). +* 恢复 (Intel) QPL 编解码器,该编解码器曾因授权问题在 v24.10 中被移除。 [#76021](https://github.com/ClickHouse/ClickHouse/pull/76021) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* 在与 HDFS 的集成中,为配置项 `dfs.client.use.datanode.hostname` 新增了支持。 [#74635](https://github.com/ClickHouse/ClickHouse/pull/74635) ([Mikhail Tiukavkin](https://github.com/freshertm)). + +#### 性能提升 + +* 改进了从 S3 读取 Wide 部分中整个 JSON 列的性能。这是通过为子列前缀反序列化添加预取、缓存已反序列化的前缀,以及对子列前缀进行并行反序列化来实现的。对于类似 `SELECT data FROM table` 的查询,从 S3 读取 JSON 列的速度提升约 4 倍,对于类似 `SELECT data FROM table LIMIT 10` 的查询提升约 10 倍。[#74827](https://github.com/ClickHouse/ClickHouse/pull/74827) ([Pavel Kruglov](https://github.com/Avogar)). +* 修复了在 `max_rows_in_join = max_bytes_in_join = 0` 时 `parallel_hash` 中不必要的竞争。[#75155](https://github.com/ClickHouse/ClickHouse/pull/75155) ([Nikita Taranov](https://github.com/nickitat)). +* 修复了在优化器交换 JOIN 两侧时 `ConcurrentHashJoin` 中的重复预分配问题。[#75149](https://github.com/ClickHouse/ClickHouse/pull/75149) ([Nikita Taranov](https://github.com/nickitat)). +* 在某些 JOIN 场景下进行了轻微优化:预先计算输出行数并为其预留内存。[#75376](https://github.com/ClickHouse/ClickHouse/pull/75376) ([Alexander Gololobov](https://github.com/davenger)). +* 对于类似 `WHERE a < b AND b < c AND c < 5` 的查询,可以推导出新的比较条件(`a < 5 AND b < 5`),以获得更好的过滤效果。[#73164](https://github.com/ClickHouse/ClickHouse/pull/73164) ([Shichao Jin](https://github.com/jsc0218)). +* Keeper 改进:在提交到内存存储时禁用摘要计算以提升性能。可以通过配置 `keeper_server.digest_enabled_on_commit` 启用。预处理请求时仍会计算摘要。[#75490](https://github.com/ClickHouse/ClickHouse/pull/75490) ([Antonio Andelic](https://github.com/antonio2368)). +* 在可能的情况下,将过滤表达式从 JOIN 的 ON 子句下推。[#75536](https://github.com/ClickHouse/ClickHouse/pull/75536) ([Vladimir Cherkasov](https://github.com/vdimir)). +* 在 MergeTree 中延迟计算列和索引大小。[#75938](https://github.com/ClickHouse/ClickHouse/pull/75938) ([Pavel Kruglov](https://github.com/Avogar)). +* 在 `MATERIALIZE TTL` 中重新使 `ttl_only_drop_parts` 生效;仅读取重新计算 TTL 所需的列,并通过将数据部分替换为空部分来删除它们。[#72751](https://github.com/ClickHouse/ClickHouse/pull/72751) ([Andrey Zvonov](https://github.com/zvonand)). +* 减小 plain_rewritable 元数据文件的写缓冲区大小。[#75758](https://github.com/ClickHouse/ClickHouse/pull/75758) ([Julia Kartseva](https://github.com/jkartseva)). +* 降低某些窗口函数的内存使用。[#65647](https://github.com/ClickHouse/ClickHouse/pull/65647) ([lgbo](https://github.com/lgbo-ustc)). +* 同时评估 Parquet Bloom 过滤器和 min/max 索引。这对于正确支持 `x = 3 or x > 5`(其中 data = [1, 2, 4, 5])是必要的。[#71383](https://github.com/ClickHouse/ClickHouse/pull/71383) ([Arthur Passos](https://github.com/arthurpassos)). +* 传递给 `Executable` 存储的查询不再局限于单线程执行。[#70084](https://github.com/ClickHouse/ClickHouse/pull/70084) ([yawnt](https://github.com/yawnt)). +* 在 ALTER TABLE FETCH PARTITION 中并行获取数据部分(线程池大小由 `max_fetch_partition_thread_pool_size` 控制)。[#74978](https://github.com/ClickHouse/ClickHouse/pull/74978) ([Azat Khuzhin](https://github.com/azat)). +* 允许将使用 `indexHint` 函数的谓词下推到 `PREWHERE`。[#74987](https://github.com/ClickHouse/ClickHouse/pull/74987) ([Anton Popov](https://github.com/CurtizJ)). #### 改进 -* 修正了 `LowCardinality` 列的内存大小计算。[#74688](https://github.com/ClickHouse/ClickHouse/pull/74688) ([Nikita Taranov](https://github.com/nickitat))。 -* `processors_profile_log` 表现在已具有默认配置,TTL 为 30 天。[#66139](https://github.com/ClickHouse/ClickHouse/pull/66139)([Ilya Yatsishin](https://github.com/qoega))。 -* 允许在集群配置中为分片指定名称。 [#72276](https://github.com/ClickHouse/ClickHouse/pull/72276) ([MikhailBurdukov](https://github.com/MikhailBurdukov))。 -* 将 Prometheus remote write 响应的成功状态码从 200/OK 改为 204/NoContent。 [#74170](https://github.com/ClickHouse/ClickHouse/pull/74170) ([Michael Dempsey](https://github.com/bluestealth)). -* 新增支持在无需重启服务器的情况下,动态重新加载 `max_remote_read_network_bandwidth_for_serve` 和 `max_remote_write_network_bandwidth_for_server`。 [#74206](https://github.com/ClickHouse/ClickHouse/pull/74206) ([Kai Zhu](https://github.com/nauu)). -* 允许在备份时使用 blob 路径计算校验和。[#74729](https://github.com/ClickHouse/ClickHouse/pull/74729) ([Vitaly Baranov](https://github.com/vitlibar)). -* 在 `system.query_cache` 中新增了查询 ID 列(修复 [#68205](https://github.com/ClickHouse/ClickHouse/issues/68205))。[#74982](https://github.com/ClickHouse/ClickHouse/pull/74982)([NamHoaiNguyen](https://github.com/NamHoaiNguyen))。 -* 现在允许使用 `KILL QUERY` 或在达到超时(`max_execution_time`)后自动取消 `ALTER TABLE ... FREEZE ...` 查询。[#75016](https://github.com/ClickHouse/ClickHouse/pull/75016) ([Kirill](https://github.com/kirillgarbar))。 -* 新增对将 `groupUniqArrayArrayMap` 用作 `SimpleAggregateFunction` 的支持。 [#75034](https://github.com/ClickHouse/ClickHouse/pull/75034) ([Miel Donkers](https://github.com/mdonkers))。 -* 在数据库引擎 `Iceberg` 中隐藏 catalog 凭证设置。修复 [#74559](https://github.com/ClickHouse/ClickHouse/issues/74559)。[#75080](https://github.com/ClickHouse/ClickHouse/pull/75080)([Kseniia Sumarokova](https://github.com/kssenii))。 -* `intExp2` / `intExp10`:为原本未定义的行为做出规定:对于过小的参数返回 0,对于过大的参数返回 `18446744073709551615`,如果为 `NaN` 则抛出异常。[#75312](https://github.com/ClickHouse/ClickHouse/pull/75312)([Vitaly Baranov](https://github.com/vitlibar))。 -* 在 `DatabaseIceberg` 的 catalog 配置中原生支持 `s3.endpoint`。修复 [#74558](https://github.com/ClickHouse/ClickHouse/issues/74558)。[#75375](https://github.com/ClickHouse/ClickHouse/pull/75375)([Kseniia Sumarokova](https://github.com/kssenii))。 -* 当执行 `SYSTEM DROP REPLICA` 的用户权限不足时,不要静默失败。[#75377](https://github.com/ClickHouse/ClickHouse/pull/75377) ([Bharat Nallan](https://github.com/bharatnc))。 -* 添加一个 ProfileEvent,用于统计任何系统日志刷写失败的次数。[#75466](https://github.com/ClickHouse/ClickHouse/pull/75466)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 为解密和解压添加校验和额外日志。[#75471](https://github.com/ClickHouse/ClickHouse/pull/75471) ([Vitaly Baranov](https://github.com/vitlibar)). -* 在 `parseTimeDelta` 函数中新增了对 micro 符号 (U+00B5) 的支持。现在 micro 符号 (U+00B5) 和希腊字母 mu (U+03BC) 都会被识别为表示微秒的有效形式,使 ClickHouse 的行为与 Go 的实现保持一致([参见 time.go](https://github.com/golang/go/blob/ad7b46ee4ac1cee5095d64b01e8cf7fcda8bee5e/src/time/time.go#L983C19-L983C20) 和 [time/format.go](https://github.com/golang/go/blob/ad7b46ee4ac1cee5095d64b01e8cf7fcda8bee5e/src/time/format.go#L1608-L1609))。[#75472](https://github.com/ClickHouse/ClickHouse/pull/75472)([Vitaly Orlov](https://github.com/orloffv))。 -* 将服务端设置(`send_settings_to_client`)替换为客户端设置(`apply_settings_from_server`),用于控制客户端侧代码(例如解析 INSERT 数据和格式化查询输出结果)是否应使用来自服务端 `users.xml` 和用户配置的设置。否则,只会使用来自客户端命令行、会话和查询本身的设置。请注意,这仅适用于原生客户端(不适用于例如 HTTP),并且不适用于大部分查询处理(查询处理发生在服务端)。 [#75478](https://github.com/ClickHouse/ClickHouse/pull/75478)([Michael Kolupaev](https://github.com/al13n321))。 -* 改进了语法错误的错误消息。此前,如果查询过大且其中特定标记的长度超出限制,而该标记又是一个非常大的字符串字面量,那么关于出错原因的说明会被夹在两个该超长标记示例之间而丢失。修复了在错误消息中包含 UTF-8 的查询被错误截断的问题。修复了查询片段被过度加引号的问题。修复了 [#75473](https://github.com/ClickHouse/ClickHouse/issues/75473)。[#75561](https://github.com/ClickHouse/ClickHouse/pull/75561)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 在存储 `S3(Azure)Queue` 中添加 ProfileEvents 事件。[#75618](https://github.com/ClickHouse/ClickHouse/pull/75618)([Kseniia Sumarokova](https://github.com/kssenii))。 -* 出于兼容性考虑,禁用从服务器向客户端发送设置(`send_settings_to_client=false`)(该功能稍后将以客户端设置的形式重新实现,以提升可用性)。[#75648](https://github.com/ClickHouse/ClickHouse/pull/75648)([Michael Kolupaev](https://github.com/al13n321))。 -* 添加配置项 `memory_worker_correct_memory_tracker`,用于在后台线程中定期从不同来源读取信息,以修正内部内存跟踪器。 [#75714](https://github.com/ClickHouse/ClickHouse/pull/75714) ([Antonio Andelic](https://github.com/antonio2368))。 -* 在 `system.processes` 中添加列 `normalized_query_hash`。注意:虽然可以使用 `normalizedQueryHash` 函数在查询时轻松动态计算该值,但这是为后续更改做准备所必需的。[#75756](https://github.com/ClickHouse/ClickHouse/pull/75756) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 即使存在基于已不存在的数据库创建的 `Merge` 表,查询 `system.tables` 也不会抛出异常。从 `Hive` 表中删除 `getTotalRows` 方法,因为我们不允许它执行复杂操作。[#75772](https://github.com/ClickHouse/ClickHouse/pull/75772) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 将备份的 start_time/end_time 以微秒精度存储。 [#75929](https://github.com/ClickHouse/ClickHouse/pull/75929) ([Aleksandr Musorin](https://github.com/AVMusorin)). -* 新增 `MemoryTrackingUncorrected` 指标,用于显示未经过 RSS 校正的内部全局内存跟踪器的值。[#75935](https://github.com/ClickHouse/ClickHouse/pull/75935) ([Antonio Andelic](https://github.com/antonio2368))。 -* 允许在 `PostgreSQL` 或 `MySQL` 表函数中解析形如 `localhost:1234/handle` 的端点。此更改修复了在 [https://github.com/ClickHouse/ClickHouse/pull/52503](https://github.com/ClickHouse/ClickHouse/pull/52503) 中引入的回归缺陷。[#75944](https://github.com/ClickHouse/ClickHouse/pull/75944)([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 -* 添加了服务器设置 `throw_on_unknown_workload`,用于选择当查询的 `workload` 设置为未知值时的行为:要么允许无限制访问(默认),要么抛出 `RESOURCE_ACCESS_DENIED` 错误。它对于强制所有查询都使用 workload 调度非常有用。[#75999](https://github.com/ClickHouse/ClickHouse/pull/75999) ([Sergei Trifonov](https://github.com/serxa)). -* 如非必要,请不要在 `ARRAY JOIN` 中将子列改写为 `getSubcolumn`。 [#76018](https://github.com/ClickHouse/ClickHouse/pull/76018) ([Pavel Kruglov](https://github.com/Avogar))。 -* 在加载表时对协调错误进行重试。[#76020](https://github.com/ClickHouse/ClickHouse/pull/76020) ([Alexander Tokmakov](https://github.com/tavplubix)). -* 支持在 `SYSTEM FLUSH LOGS` 中刷新单条日志。 [#76132](https://github.com/ClickHouse/ClickHouse/pull/76132) ([Raúl Marín](https://github.com/Algunenano)). -* 改进了 `/binary` 服务器页面。使用 Hilbert 曲线替代 Morton 曲线。在正方形中显示 512 MB 的地址空间,使其能够更充分地填充正方形(之前的版本中,地址只填充了正方形的一半)。按更接近的库名而非函数名对地址进行着色。允许在区域外额外多滚动一些。[#76192](https://github.com/ClickHouse/ClickHouse/pull/76192) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* 当出现 TOO_MANY_SIMULTANEOUS_QUERIES 错误时重试 ON CLUSTER 查询。[#76352](https://github.com/ClickHouse/ClickHouse/pull/76352) ([Patrick Galbraith](https://github.com/CaptTofu))。 -* 添加异步指标 `CPUOverload`,用于计算服务器的相对 CPU 资源缺口。[#76404](https://github.com/ClickHouse/ClickHouse/pull/76404)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 将 `output_format_pretty_max_rows` 的默认值从 10000 修改为 1000。我认为这有助于提升可用性。[#76407](https://github.com/ClickHouse/ClickHouse/pull/76407)([Alexey Milovidov](https://github.com/alexey-milovidov))。 - - - - - -#### 错误修复(官方稳定版本中用户可见的异常行为) - -* 修复在查询解释过程中出现的异常在使用自定义格式时的格式化问题。在之前的版本中,异常是使用默认格式进行输出,而不是使用查询中指定的格式。此更改关闭了 [#55422](https://github.com/ClickHouse/ClickHouse/issues/55422)。[#74994](https://github.com/ClickHouse/ClickHouse/pull/74994)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 修复 SQLite 的类型映射(将整数类型映射为 `int64`,将浮点类型映射为 `float64`)。[#73853](https://github.com/ClickHouse/ClickHouse/pull/73853) ([Joanna Hulboj](https://github.com/jh0x))。 -* 修复父作用域中的标识符解析问题。允许在 `WITH` 子句中为表达式使用别名。修复 [#58994](https://github.com/ClickHouse/ClickHouse/issues/58994)。修复 [#62946](https://github.com/ClickHouse/ClickHouse/issues/62946)。修复 [#63239](https://github.com/ClickHouse/ClickHouse/issues/63239)。修复 [#65233](https://github.com/ClickHouse/ClickHouse/issues/65233)。修复 [#71659](https://github.com/ClickHouse/ClickHouse/issues/71659)。修复 [#71828](https://github.com/ClickHouse/ClickHouse/issues/71828)。修复 [#68749](https://github.com/ClickHouse/ClickHouse/issues/68749)。[#66143](https://github.com/ClickHouse/ClickHouse/pull/66143)([Dmitry Novik](https://github.com/novikd))。 -* 修复取负函数的单调性。在之前的版本中,当 `x` 为主键时,查询 `select * from a where -x = -42;` 可能会返回错误结果。 [#71440](https://github.com/ClickHouse/ClickHouse/pull/71440) ([Michael Kolupaev](https://github.com/al13n321)). -* 修复 `arrayIntersect` 中空元组的处理逻辑,解决了 [#72578](https://github.com/ClickHouse/ClickHouse/issues/72578) 中的问题。[#72581](https://github.com/ClickHouse/ClickHouse/pull/72581)([Amos Bird](https://github.com/amosbird))。 -* 修复读取 JSON 子对象的子列时使用错误前缀的问题。[#73182](https://github.com/ClickHouse/ClickHouse/pull/73182)([Pavel Kruglov](https://github.com/Avogar))。 +* 修复了 `LowCardinality` 列内存占用大小的计算。[#74688](https://github.com/ClickHouse/ClickHouse/pull/74688) ([Nikita Taranov](https://github.com/nickitat)). +* `processors_profile_log` 表现在有默认配置,TTL 为 30 天。[#66139](https://github.com/ClickHouse/ClickHouse/pull/66139)([Ilya Yatsishin](https://github.com/qoega))。 +* 允许在集群配置中为分片指定名称。 [#72276](https://github.com/ClickHouse/ClickHouse/pull/72276) ([MikhailBurdukov](https://github.com/MikhailBurdukov)). +* 将 Prometheus 远程写入响应的成功状态码从 200/OK 更改为 204/No Content。[#74170](https://github.com/ClickHouse/ClickHouse/pull/74170)([Michael Dempsey](https://github.com/bluestealth))。 +* 新增在无需重启服务器的情况下,动态重新加载 `max_remote_read_network_bandwidth_for_serve` 和 `max_remote_write_network_bandwidth_for_server` 的能力。 [#74206](https://github.com/ClickHouse/ClickHouse/pull/74206) ([Kai Zhu](https://github.com/nauu)). +* 允许在执行备份时使用 blob 路径计算校验和。 [#74729](https://github.com/ClickHouse/ClickHouse/pull/74729) ([Vitaly Baranov](https://github.com/vitlibar)). +* 在 `system.query_cache` 中新增了查询 ID 列(关闭 [#68205](https://github.com/ClickHouse/ClickHouse/issues/68205))。[#74982](https://github.com/ClickHouse/ClickHouse/pull/74982)([NamHoaiNguyen](https://github.com/NamHoaiNguyen))。 +* 现在支持使用 `KILL QUERY` 或因超时(`max_execution_time`)自动取消 `ALTER TABLE ... FREEZE ...` 查询。[#75016](https://github.com/ClickHouse/ClickHouse/pull/75016) ([Kirill](https://github.com/kirillgarbar))。 +* 添加对 `groupUniqArrayArrayMap` 作为 `SimpleAggregateFunction` 的支持。 [#75034](https://github.com/ClickHouse/ClickHouse/pull/75034) ([Miel Donkers](https://github.com/mdonkers)). +* 在 `Iceberg` 数据库引擎中隐藏 catalog 凭据配置。修复 [#74559](https://github.com/ClickHouse/ClickHouse/issues/74559)。[#75080](https://github.com/ClickHouse/ClickHouse/pull/75080)([Kseniia Sumarokova](https://github.com/kssenii))。 +* `intExp2` / `intExp10`:对原本未定义的行为作出规定:对于过小的参数返回 0,对于过大的参数返回 `18446744073709551615`,如果为 `nan` 则抛出异常。[#75312](https://github.com/ClickHouse/ClickHouse/pull/75312)([Vitaly Baranov](https://github.com/vitlibar))。 +* 在 `DatabaseIceberg` 中通过 catalog 配置原生支持 `s3.endpoint`。关闭了 [#74558](https://github.com/ClickHouse/ClickHouse/issues/74558)。[#75375](https://github.com/ClickHouse/ClickHouse/pull/75375)([Kseniia Sumarokova](https://github.com/kssenii))。 +* 在执行 `SYSTEM DROP REPLICA` 时,如果用户权限不足,则不再静默失败。[#75377](https://github.com/ClickHouse/ClickHouse/pull/75377) ([Bharat Nallan](https://github.com/bharatnc))。 +* 添加一个 ProfileEvent,用于统计各系统日志刷写失败的次数。 [#75466](https://github.com/ClickHouse/ClickHouse/pull/75466) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 添加用于解密和解压的检查和额外日志记录。[#75471](https://github.com/ClickHouse/ClickHouse/pull/75471) ([Vitaly Baranov](https://github.com/vitlibar))。 +* 在 `parseTimeDelta` 函数中新增了对微符号(U+00B5)的支持。现在微符号(U+00B5)和希腊字母 μ(U+03BC)都会被识别为微秒的有效表示形式,从而使 ClickHouse 的行为与 Go 的实现保持一致([参见 time.go](https://github.com/golang/go/blob/ad7b46ee4ac1cee5095d64b01e8cf7fcda8bee5e/src/time/time.go#L983C19-L983C20) 和 [time/format.go](https://github.com/golang/go/blob/ad7b46ee4ac1cee5095d64b01e8cf7fcda8bee5e/src/time/format.go#L1608-L1609))。[#75472](https://github.com/ClickHouse/ClickHouse/pull/75472)([Vitaly Orlov](https://github.com/orloffv))。 +* 将服务器设置(`send_settings_to_client`)替换为客户端设置(`apply_settings_from_server`),用于控制客户端代码(例如解析 INSERT 数据和格式化查询输出)是否应使用来自服务器 `users.xml` 和用户配置中的设置。否则,将只使用来自客户端命令行、会话和查询本身的设置。注意,这仅适用于原生客户端(不适用于例如 HTTP),并且不适用于大部分查询处理(这些处理发生在服务器端)。[#75478](https://github.com/ClickHouse/ClickHouse/pull/75478)([Michael Kolupaev](https://github.com/al13n321))。 +* 改进语法错误的错误消息。此前,如果查询过大,并且超出长度限制的标记是一个非常大的字符串字面量,那么描述错误原因的消息会被夹在该超长标记的两个示例之间而丢失。修复在错误消息中包含带有 UTF-8 字符的查询时被错误截断的问题。修复查询片段被过度加引号的问题。修复了 [#75473](https://github.com/ClickHouse/ClickHouse/issues/75473)。[#75561](https://github.com/ClickHouse/ClickHouse/pull/75561)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 在 `S3(Azure)Queue` 存储中添加 ProfileEvents。 [#75618](https://github.com/ClickHouse/ClickHouse/pull/75618) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 出于兼容性考虑,禁用从服务器向客户端发送设置(`send_settings_to_client=false`)(该功能稍后将作为客户端设置重新实现,以提升易用性)。 [#75648](https://github.com/ClickHouse/ClickHouse/pull/75648) ([Michael Kolupaev](https://github.com/al13n321)). +* 新增配置项 `memory_worker_correct_memory_tracker`,用于启用利用后台线程定期读取的不同来源信息来校正内部内存跟踪器的功能。 [#75714](https://github.com/ClickHouse/ClickHouse/pull/75714) ([Antonio Andelic](https://github.com/antonio2368))。 +* 将列 `normalized_query_hash` 添加到 `system.processes` 中。注意:虽然可以使用 `normalizedQueryHash` 函数在执行时轻松计算该值,但仍需要该列以便为后续更改做准备。[#75756](https://github.com/ClickHouse/ClickHouse/pull/75756) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 查询 `system.tables` 时,即使存在一个建立在已被删除的数据库上的 `Merge` 表,也不会抛出异常。移除 `Hive` 表中的 `getTotalRows` 方法,因为我们不允许它执行复杂操作。[#75772](https://github.com/ClickHouse/ClickHouse/pull/75772) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 以微秒精度存储备份的 start_time/end_time。 [#75929](https://github.com/ClickHouse/ClickHouse/pull/75929) ([Aleksandr Musorin](https://github.com/AVMusorin))。 +* 添加 `MemoryTrackingUncorrected` 指标,用于显示内部全局内存跟踪器的取值(其值未经过 RSS 校正)。 [#75935](https://github.com/ClickHouse/ClickHouse/pull/75935) ([Antonio Andelic](https://github.com/antonio2368))。 +* 允许在 `PostgreSQL` 或 `MySQL` 表函数中解析 `localhost:1234/handle` 之类的端点。此更改修复了在 [https://github.com/ClickHouse/ClickHouse/pull/52503](https://github.com/ClickHouse/ClickHouse/pull/52503) 中引入的回归问题。[#75944](https://github.com/ClickHouse/ClickHouse/pull/75944)([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 +* 新增了一个服务器设置 `throw_on_unknown_workload`,用于选择当查询中设置了 `workload` 但其值未知时的处理行为:要么允许无限制访问(默认),要么抛出 `RESOURCE_ACCESS_DENIED` 错误。此设置可用于强制所有查询都必须使用 workload 调度。[#75999](https://github.com/ClickHouse/ClickHouse/pull/75999) ([Sergei Trifonov](https://github.com/serxa))。 +* 如果没有必要,不要在 `ARRAY JOIN` 中将子列重写为 `getSubcolumn`。 [#76018](https://github.com/ClickHouse/ClickHouse/pull/76018) ([Pavel Kruglov](https://github.com/Avogar))。 +* 在加载表时遇到协调错误会进行重试。[#76020](https://github.com/ClickHouse/ClickHouse/pull/76020) ([Alexander Tokmakov](https://github.com/tavplubix)). +* `SYSTEM FLUSH LOGS` 现在支持刷新单条日志。[#76132](https://github.com/ClickHouse/ClickHouse/pull/76132) ([Raúl Marín](https://github.com/Algunenano)). +* 改进了 `/binary` 服务器页面。使用 Hilbert 曲线替代 Morton 曲线。在方形区域中显示 512 MB 的地址空间,使方形被填充得更充分(在之前的版本中,地址只填充了方形的一半)。根据更接近的库名而非函数名为地址着色。允许在区域外稍微多滚动一些。[#76192](https://github.com/ClickHouse/ClickHouse/pull/76192) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* 在出现 TOO_MANY_SIMULTANEOUS_QUERIES 错误时重试 ON CLUSTER 查询。 [#76352](https://github.com/ClickHouse/ClickHouse/pull/76352) ([Patrick Galbraith](https://github.com/CaptTofu)). +* 添加异步指标 `CPUOverload`,用于计算服务器的相对 CPU 资源不足。[#76404](https://github.com/ClickHouse/ClickHouse/pull/76404)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 将 `output_format_pretty_max_rows` 的默认值从 10000 修改为 1000。我认为这样在使用上更方便。[#76407](https://github.com/ClickHouse/ClickHouse/pull/76407) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 + +#### Bug 修复(在官方稳定版中出现的、用户可感知的异常行为) + +* 在查询解析阶段,如果出现异常,则使用自定义格式对其进行格式化。此前版本中,异常是采用默认格式进行格式化,而不是使用查询中指定的格式。修复了 [#55422](https://github.com/ClickHouse/ClickHouse/issues/55422)。[#74994](https://github.com/ClickHouse/ClickHouse/pull/74994)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 修复 SQLite 的类型映射(整数类型映射为 `int64`,浮点类型映射为 `float64`)。 [#73853](https://github.com/ClickHouse/ClickHouse/pull/73853) ([Joanna Hulboj](https://github.com/jh0x)). +* 修复来自父作用域的标识符解析。允许在 `WITH` 子句中为表达式使用别名。修复 [#58994](https://github.com/ClickHouse/ClickHouse/issues/58994)。修复 [#62946](https://github.com/ClickHouse/ClickHouse/issues/62946)。修复 [#63239](https://github.com/ClickHouse/ClickHouse/issues/63239)。修复 [#65233](https://github.com/ClickHouse/ClickHouse/issues/65233)。修复 [#71659](https://github.com/ClickHouse/ClickHouse/issues/71659)。修复 [#71828](https://github.com/ClickHouse/ClickHouse/issues/71828)。修复 [#68749](https://github.com/ClickHouse/ClickHouse/issues/68749)。[#66143](https://github.com/ClickHouse/ClickHouse/pull/66143)([Dmitry Novik](https://github.com/novikd))。 +* 修复 `negate` 函数的单调性问题。在早期版本中,当 `x` 为主键时,查询 `select * from a where -x = -42;` 可能会返回错误结果。 [#71440](https://github.com/ClickHouse/ClickHouse/pull/71440) ([Michael Kolupaev](https://github.com/al13n321)). +* 修正 `arrayIntersect` 对空元组的处理。此更改修复了 [#72578](https://github.com/ClickHouse/ClickHouse/issues/72578)。[#72581](https://github.com/ClickHouse/ClickHouse/pull/72581)([Amos Bird](https://github.com/amosbird))。 +* 修复读取 JSON 子对象子列时使用错误前缀的问题。[#73182](https://github.com/ClickHouse/ClickHouse/pull/73182)([Pavel Kruglov](https://github.com/Avogar))。 * 在客户端-服务器通信中正确传递 Native 格式设置。[#73924](https://github.com/ClickHouse/ClickHouse/pull/73924) ([Pavel Kruglov](https://github.com/Avogar))。 -* 检查某些存储引擎不支持的类型。[#74218](https://github.com/ClickHouse/ClickHouse/pull/74218) ([Pavel Kruglov](https://github.com/Avogar)). -* 修复了在 macOS 上通过 PostgreSQL 接口执行 `INSERT INTO SELECT` 查询时出现的崩溃问题(问题 [#72938](https://github.com/ClickHouse/ClickHouse/issues/72938))。[#74231](https://github.com/ClickHouse/ClickHouse/pull/74231)([Artem Yurov](https://github.com/ArtemYurov))。 -* 修复了复制数据库中未初始化的 `max_log_ptr`。 [#74336](https://github.com/ClickHouse/ClickHouse/pull/74336) ([Konstantin Morozov](https://github.com/k-morozov))。 -* 修复在插入 Interval 时发生的崩溃(问题 [#74299](https://github.com/ClickHouse/ClickHouse/issues/74299))。[#74478](https://github.com/ClickHouse/ClickHouse/pull/74478)([NamHoaiNguyen](https://github.com/NamHoaiNguyen))。 -* 修复格式化常量 JSON 字面量的问题。此前在将查询发送到其他服务器时,可能会导致语法错误。[#74533](https://github.com/ClickHouse/ClickHouse/pull/74533)([Pavel Kruglov](https://github.com/Avogar))。 -* 在启用隐式投影的情况下,修复了在使用常量分区表达式时会出错的 `CREATE` 查询。此更改修复了 [#74596](https://github.com/ClickHouse/ClickHouse/issues/74596)。[#74634](https://github.com/ClickHouse/ClickHouse/pull/74634)([Amos Bird](https://github.com/amosbird))。 -* 避免在 `INSERT` 以异常结束后将连接置于异常状态。[#74740](https://github.com/ClickHouse/ClickHouse/pull/74740)([Azat Khuzhin](https://github.com/azat))。 -* 避免复用处于中间状态的连接。[#74749](https://github.com/ClickHouse/ClickHouse/pull/74749) ([Azat Khuzhin](https://github.com/azat)). -* 修复在解析 JSON 类型声明时,当类型名不是大写形式会导致的崩溃问题。[#74784](https://github.com/ClickHouse/ClickHouse/pull/74784) ([Pavel Kruglov](https://github.com/Avogar))。 -* Keeper:修复在连接尚未建立前就已被终止时出现的 `logical_error`。[#74844](https://github.com/ClickHouse/ClickHouse/pull/74844) ([Michael Kolupaev](https://github.com/al13n321)). -* 修复了一个问题:当存在使用 `AzureBlobStorage` 的表时,服务器无法启动。现在会在不向 Azure 发送任何请求的情况下加载这些表。[#74880](https://github.com/ClickHouse/ClickHouse/pull/74880) ([Alexey Katsman](https://github.com/alexkats))。 -* 修复在执行 BACKUP 和 RESTORE 操作时,`query_log` 中缺失的 `used_privileges` 和 `missing_privileges` 字段问题。[#74887](https://github.com/ClickHouse/ClickHouse/pull/74887) ([Alexey Katsman](https://github.com/alexkats))。 -* 如果在 HDFS SELECT 请求期间出现 SASL 错误,则刷新 HDFS 的 Kerberos ticket。 [#74930](https://github.com/ClickHouse/ClickHouse/pull/74930) ([inv2004](https://github.com/inv2004)). -* 修复 startup_scripts 中针对 Replicated 数据库的查询。 [#74942](https://github.com/ClickHouse/ClickHouse/pull/74942) ([Azat Khuzhin](https://github.com/azat)). -* 修复在 `JOIN ON` 子句中使用空安全(null-safe)比较时,对类型别名化表达式的处理问题。[#74970](https://github.com/ClickHouse/ClickHouse/pull/74970)([Vladimir Cherkasov](https://github.com/vdimir))。 -* 在 remove 操作失败时,将 part 的状态从 `deleting` 回退为 `outdated`。[#74985](https://github.com/ClickHouse/ClickHouse/pull/74985) ([Sema Checherinda](https://github.com/CheSema)). -* 在之前的版本中,当存在标量子查询时,我们会在数据格式初始化期间开始写入进度信息(从处理该子查询累积而来),而这一步发生在写入 HTTP 头部之前。这会导致 HTTP 头部丢失,例如 X-ClickHouse-QueryId、X-ClickHouse-Format 以及 Content-Type。[#74991](https://github.com/ClickHouse/ClickHouse/pull/74991)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 修复在 `database_replicated_allow_replicated_engine_arguments=0` 时的 `CREATE TABLE AS...` 查询语句。[#75000](https://github.com/ClickHouse/ClickHouse/pull/75000) ([Bharat Nallan](https://github.com/bharatnc))。 -* 修复在发生 INSERT 异常后客户端中的连接被置于错误状态的问题。[#75030](https://github.com/ClickHouse/ClickHouse/pull/75030) ([Azat Khuzhin](https://github.com/azat)). -* 修复 PSQL 复制中未捕获异常导致的崩溃问题。[#75062](https://github.com/ClickHouse/ClickHouse/pull/75062) ([Azat Khuzhin](https://github.com/azat)). -* SASL 可能导致任何 RPC 调用失败,此修复使得在 krb5 票据过期时能够重试该调用。 [#75063](https://github.com/ClickHouse/ClickHouse/pull/75063) ([inv2004](https://github.com/inv2004)). -* 修复了在启用 `optimize_function_to_subcolumns` 设置时,对 `Array`、`Map` 和 `Nullable(..)` 列使用主索引和二级索引的方式。此前,这些列的索引可能会被忽略。[#75081](https://github.com/ClickHouse/ClickHouse/pull/75081) ([Anton Popov](https://github.com/CurtizJ))。 -* 在使用内部表创建物化视图时,请禁用 `flatten_nested`,因为之后将无法使用这些扁平化后的列。[#75085](https://github.com/ClickHouse/ClickHouse/pull/75085) ([Christoph Wurm](https://github.com/cwurm))。 -* 修复了在 `forwarded_for` 字段中对某些 IPv6 地址(例如 ::ffff:1.1.1.1)的错误解析,该问题会导致客户端因抛出异常而断开连接。[#75133](https://github.com/ClickHouse/ClickHouse/pull/75133) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* 修复了针对可为 NULL 的 LowCardinality 数据类型的空值安全(nullsafe) JOIN 处理。此前在 JOIN ON 子句中使用 `IS NOT DISTINCT FROM`、`<=>`、`a IS NULL AND b IS NULL OR a == b` 等空值安全比较时,对 LowCardinality 列的处理不正确。[#75143](https://github.com/ClickHouse/ClickHouse/pull/75143)([Vladimir Cherkasov](https://github.com/vdimir))。 -* 检查在为 NumRowsCache 统计 total_number_of_rows 时未指定 key_condition。 [#75164](https://github.com/ClickHouse/ClickHouse/pull/75164) ([Daniil Ivanik](https://github.com/divanik))。 -* 使用新的分析器修复包含未使用插值的查询。[#75173](https://github.com/ClickHouse/ClickHouse/pull/75173)([János Benjamin Antal](https://github.com/antaljanosbenjamin))。 -* 修复在与 Insert 一起使用 CTE 时出现的崩溃问题。 [#75188](https://github.com/ClickHouse/ClickHouse/pull/75188) ([Shichao Jin](https://github.com/jsc0218)). -* Keeper 修复:回滚日志时避免向已损坏的变更日志写入数据。 [#75197](https://github.com/ClickHouse/ClickHouse/pull/75197) ([Antonio Andelic](https://github.com/antonio2368)). -* 在合适的情况下将 `BFloat16` 用作超类型。从而关闭了:[#74404](https://github.com/ClickHouse/ClickHouse/issues/74404)。[#75236](https://github.com/ClickHouse/ClickHouse/pull/75236)([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 -* 修复在使用 any_join_distinct_right_table_keys 以及在 JOIN ON 中使用 OR 时,连接结果中出现意外的默认值的问题。[#75262](https://github.com/ClickHouse/ClickHouse/pull/75262) ([Vladimir Cherkasov](https://github.com/vdimir))。 -* 对 azureblobstorage 表引擎凭据进行脱敏处理。 [#75319](https://github.com/ClickHouse/ClickHouse/pull/75319) ([Garrett Thomas](https://github.com/garrettthomaskth)). -* 修复了 ClickHouse 可能错误地将过滤下推到 PostgreSQL、MySQL 或 SQLite 等外部数据库时的行为。已关闭问题:[#71423](https://github.com/ClickHouse/ClickHouse/issues/71423)。[#75320](https://github.com/ClickHouse/ClickHouse/pull/75320)([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 -* 修复了在以 Protobuf 格式输出的同时并行执行查询 `SYSTEM DROP FORMAT SCHEMA CACHE` 时,可能发生在 Protobuf schema 缓存中的崩溃问题。 [#75357](https://github.com/ClickHouse/ClickHouse/pull/75357) ([Pavel Kruglov](https://github.com/Avogar)). -* 修复在并行副本场景下,将 `HAVING` 子句中的过滤条件下推时可能出现的逻辑错误或未初始化内存问题。[#75363](https://github.com/ClickHouse/ClickHouse/pull/75363) ([Vladimir Cherkasov](https://github.com/vdimir))。 +* 为某些存储引擎添加对不支持类型的检查。[#74218](https://github.com/ClickHouse/ClickHouse/pull/74218)([Pavel Kruglov](https://github.com/Avogar))。 +* 修复在 macOS 上通过 PostgreSQL 接口执行 `INSERT INTO SELECT` 查询时出现的崩溃问题(问题 [#72938](https://github.com/ClickHouse/ClickHouse/issues/72938))。[#74231](https://github.com/ClickHouse/ClickHouse/pull/74231)([Artem Yurov](https://github.com/ArtemYurov))。 +* 修复了副本数据库中未初始化的 max_log_ptr。 [#74336](https://github.com/ClickHouse/ClickHouse/pull/74336) ([Konstantin Morozov](https://github.com/k-morozov))。 +* 修复在插入 interval 时发生的崩溃(问题 [#74299](https://github.com/ClickHouse/ClickHouse/issues/74299))。[#74478](https://github.com/ClickHouse/ClickHouse/pull/74478)([NamHoaiNguyen](https://github.com/NamHoaiNguyen))。 +* 修复常量 JSON 字面量的格式化问题。此前在将查询发送到另一台服务器时,可能会导致语法错误。[#74533](https://github.com/ClickHouse/ClickHouse/pull/74533) ([Pavel Kruglov](https://github.com/Avogar))。 +* 在启用隐式投影并使用常量分区表达式时,修复了 `CREATE` 查询会失败的问题。修复了 [#74596](https://github.com/ClickHouse/ClickHouse/issues/74596)。[#74634](https://github.com/ClickHouse/ClickHouse/pull/74634)([Amos Bird](https://github.com/amosbird))。 +* 避免在 `INSERT` 因异常结束后将连接置于异常状态。[#74740](https://github.com/ClickHouse/ClickHouse/pull/74740) ([Azat Khuzhin](https://github.com/azat))。 +* 避免复用已被遗留在中间状态的连接。 [#74749](https://github.com/ClickHouse/ClickHouse/pull/74749) ([Azat Khuzhin](https://github.com/azat))。 +* 修复在解析 JSON 类型声明且类型名称不是大写时出现的崩溃问题。[#74784](https://github.com/ClickHouse/ClickHouse/pull/74784) ([Pavel Kruglov](https://github.com/Avogar)). +* Keeper:修复在连接在建立之前就被终止时出现的 `logical_error`。 [#74844](https://github.com/ClickHouse/ClickHouse/pull/74844) ([Michael Kolupaev](https://github.com/al13n321)). +* 修复了一个问题:当存在使用 `AzureBlobStorage` 的表时,服务器无法启动。现在可以在无需向 Azure 发送任何请求的情况下加载这些表。[#74880](https://github.com/ClickHouse/ClickHouse/pull/74880)([Alexey Katsman](https://github.com/alexkats))。 +* 修复 `query_log` 中在 BACKUP 和 RESTORE 操作时缺失的 `used_privileges` 和 `missing_privileges` 字段。[#74887](https://github.com/ClickHouse/ClickHouse/pull/74887)([Alexey Katsman](https://github.com/alexkats))。 +* 在 HDFS select 请求期间如果出现 SASL 错误,则刷新 HDFS 的 Kerberos 票据。 [#74930](https://github.com/ClickHouse/ClickHouse/pull/74930) ([inv2004](https://github.com/inv2004)). +* 修复 startup_scripts 中针对 Replicated 数据库的查询。[#74942](https://github.com/ClickHouse/ClickHouse/pull/74942) ([Azat Khuzhin](https://github.com/azat))。 +* 修复在 `JOIN ON` 子句中对通过类型别名定义的表达式使用空安全(null-safe)比较时出现的问题。 [#74970](https://github.com/ClickHouse/ClickHouse/pull/74970) ([Vladimir Cherkasov](https://github.com/vdimir))。 +* 在 remove 操作失败时,将 part 的状态从 deleting 恢复为 outdated。 [#74985](https://github.com/ClickHouse/ClickHouse/pull/74985) ([Sema Checherinda](https://github.com/CheSema)). +* 在之前的版本中,当存在标量子查询时,我们会在数据格式初始化期间开始写入进度信息(从处理该子查询累积而来),而这发生在写入 HTTP 头部之前。这样会导致 HTTP 头部丢失,比如 X-ClickHouse-QueryId 和 X-ClickHouse-Format,以及 Content-Type。 [#74991](https://github.com/ClickHouse/ClickHouse/pull/74991) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* 修复当 `database_replicated_allow_replicated_engine_arguments=0` 时 `CREATE TABLE AS...` 查询的问题。[#75000](https://github.com/ClickHouse/ClickHouse/pull/75000) ([Bharat Nallan](https://github.com/bharatnc)). +* 修复在发生 INSERT 异常后客户端连接处于错误状态的问题。 [#75030](https://github.com/ClickHouse/ClickHouse/pull/75030) ([Azat Khuzhin](https://github.com/azat)). +* 修复 PSQL 复制中未捕获异常导致的崩溃。[#75062](https://github.com/ClickHouse/ClickHouse/pull/75062) ([Azat Khuzhin](https://github.com/azat)). +* SASL 可能会导致任何 RPC 调用失败,此修复使得在 krb5 ticket 过期时可以重试该调用。 [#75063](https://github.com/ClickHouse/ClickHouse/pull/75063) ([inv2004](https://github.com/inv2004)). +* 修复了在启用设置 `optimize_function_to_subcolumns` 时,`Array`、`Map` 和 `Nullable(..)` 列上的主键和二级索引未正确生效的问题。此前,这些列上的索引可能会被忽略。 [#75081](https://github.com/ClickHouse/ClickHouse/pull/75081) ([Anton Popov](https://github.com/CurtizJ)). +* 在创建带有内部表的物化视图时禁用 `flatten_nested`,因为无法使用这些扁平化后的列。[#75085](https://github.com/ClickHouse/ClickHouse/pull/75085)([Christoph Wurm](https://github.com/cwurm))。 +* 修复了在 `forwarded_for` 字段中对某些 IPv6 地址(例如 ::ffff:1.1.1.1)的错误解析问题,该问题会导致客户端断开连接并抛出异常。[#75133](https://github.com/ClickHouse/ClickHouse/pull/75133)([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy))。 +* 修复针对 LowCardinality 可为空数据类型的 NULL 安全 JOIN 处理。此前,在 JOIN ON 中使用 NULL 安全比较(例如 `IS NOT DISTINCT FROM`、`<=>`、`a IS NULL AND b IS NULL OR a == b`)时,与 LowCardinality 列配合时无法正确工作。[#75143](https://github.com/ClickHouse/ClickHouse/pull/75143) ([Vladimir Cherkasov](https://github.com/vdimir))。 +* 验证在为 NumRowsCache 统计 total_number_of_rows 时未指定 key_condition。 [#75164](https://github.com/ClickHouse/ClickHouse/pull/75164) ([Daniil Ivanik](https://github.com/divanik)). +* 通过新的分析器修复含有未使用插值的查询。[#75173](https://github.com/ClickHouse/ClickHouse/pull/75173) ([János Benjamin Antal](https://github.com/antaljanosbenjamin))。 +* 修复在 Insert 中使用 CTE 时出现的崩溃问题。 [#75188](https://github.com/ClickHouse/ClickHouse/pull/75188) ([Shichao Jin](https://github.com/jsc0218)). +* Keeper 修复:在回滚日志时避免向已损坏的变更日志写入数据。 [#75197](https://github.com/ClickHouse/ClickHouse/pull/75197) ([Antonio Andelic](https://github.com/antonio2368)). +* 在合适的情况下将 `BFloat16` 用作超类型。修复/关闭了以下问题:[#74404](https://github.com/ClickHouse/ClickHouse/issues/74404)。[#75236](https://github.com/ClickHouse/ClickHouse/pull/75236)([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 +* 修复在启用 any_join_distinct_right_table_keys 且 JOIN 的 ON 条件中包含 OR 时,连接结果中出现的意外的默认值。[#75262](https://github.com/ClickHouse/ClickHouse/pull/75262) ([Vladimir Cherkasov](https://github.com/vdimir)). +* 对 azureblobstorage 表引擎的凭据进行脱敏处理。 [#75319](https://github.com/ClickHouse/ClickHouse/pull/75319) ([Garrett Thomas](https://github.com/garrettthomaskth)). +* 修复了 ClickHouse 可能会错误地将过滤条件下推到 PostgreSQL、MySQL 或 SQLite 等外部数据库的行为。已关闭:[#71423](https://github.com/ClickHouse/ClickHouse/issues/71423)。[#75320](https://github.com/ClickHouse/ClickHouse/pull/75320)([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 +* 修复了在以 Protobuf 格式输出的同时并行执行查询 `SYSTEM DROP FORMAT SCHEMA CACHE` 时,Protobuf schema 缓存中可能发生的崩溃。 [#75357](https://github.com/ClickHouse/ClickHouse/pull/75357) ([Pavel Kruglov](https://github.com/Avogar)). +* 修复在并行副本场景下,下推 `HAVING` 过滤条件时可能出现的逻辑错误或未初始化内存问题。 [#75363](https://github.com/ClickHouse/ClickHouse/pull/75363) ([Vladimir Cherkasov](https://github.com/vdimir)). * 隐藏 `icebergS3`、`icebergAzure` 表函数和表引擎中的敏感信息。[#75378](https://github.com/ClickHouse/ClickHouse/pull/75378)([Kseniia Sumarokova](https://github.com/kssenii))。 -* 现在已能正确处理在函数 `TRIM` 中使用计算结果为空的修剪字符集的情况。示例:`SELECT TRIM(LEADING concat('') FROM 'foo')`(Issue [#69922](https://github.com/ClickHouse/ClickHouse/issues/69922))。[#75399](https://github.com/ClickHouse/ClickHouse/pull/75399)([Manish Gill](https://github.com/mgill25))。 -* 修复 IOutputFormat 中的数据竞争。 [#75448](https://github.com/ClickHouse/ClickHouse/pull/75448) ([Pavel Kruglov](https://github.com/Avogar)). -* 修复在包含 Array 类型 JSON 子列的分布式表上执行 JOIN 时可能出现的错误 `Elements ... and ... of Nested data structure ... (Array columns) have different array sizes`。 [#75512](https://github.com/ClickHouse/ClickHouse/pull/75512) ([Pavel Kruglov](https://github.com/Avogar)). -* 使用 `CODEC(ZSTD, DoubleDelta)` 修复数据损坏问题,关闭 [#70031](https://github.com/ClickHouse/ClickHouse/issues/70031)。[#75548](https://github.com/ClickHouse/ClickHouse/pull/75548)([Konstantin Bogdanov](https://github.com/thevar1able))。 -* 修复 `allow_feature_tier` 与 MergeTree 兼容性设置之间的交互行为。[#75635](https://github.com/ClickHouse/ClickHouse/pull/75635) ([Raúl Marín](https://github.com/Algunenano))。 -* 修复在文件被重试处理的情况下,`system.s3queue_log` 中 `processed_rows` 值不正确的问题。 [#75666](https://github.com/ClickHouse/ClickHouse/pull/75666) ([Kseniia Sumarokova](https://github.com/kssenii)). -* 当物化视图向 URL 引擎写入数据时,如遇连接问题,将遵循 `materialized_views_ignore_errors` 设置。[#75679](https://github.com/ClickHouse/ClickHouse/pull/75679) ([Christoph Wurm](https://github.com/cwurm))。 -* 修复了在不同类型的列之间多次执行异步 `RENAME` 查询(`alter_sync = 0`)后,从 `MergeTree` 表读取数据时罕见发生的崩溃问题。[#75693](https://github.com/ClickHouse/ClickHouse/pull/75693)([Anton Popov](https://github.com/CurtizJ))。 -* 修复某些包含 `UNION ALL` 的查询中出现的 `Block structure mismatch in QueryPipeline stream` 错误。[#75715](https://github.com/ClickHouse/ClickHouse/pull/75715)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 -* 在通过 `ALTER MODIFY` 修改其主键列时重建投影。此前,在修改用于投影主键的列后执行 SELECT 查询,可能会导致 `CANNOT_READ_ALL_DATA` 错误。[#75720](https://github.com/ClickHouse/ClickHouse/pull/75720) ([Pavel Kruglov](https://github.com/Avogar))。 -* 修复在标量子查询中使用 analyzer 时 `ARRAY JOIN` 的错误结果。[#75732](https://github.com/ClickHouse/ClickHouse/pull/75732)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 -* 修复 `DistinctSortedStreamTransform` 中的空指针解引用问题。[#75734](https://github.com/ClickHouse/ClickHouse/pull/75734)([Nikita Taranov](https://github.com/nickitat))。 -* 修复 `allow_suspicious_ttl_expressions` 相关行为。[#75771](https://github.com/ClickHouse/ClickHouse/pull/75771) ([Aleksei Filatov](https://github.com/aalexfvk))。 -* 修复函数 `translate` 中未初始化内存读取的问题,从而关闭 [#75592](https://github.com/ClickHouse/ClickHouse/issues/75592)。[#75794](https://github.com/ClickHouse/ClickHouse/pull/75794)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 在 Native 格式中,将格式设置传递给 JSON 的字符串格式化。[#75832](https://github.com/ClickHouse/ClickHouse/pull/75832) ([Pavel Kruglov](https://github.com/Avogar)). -* 在设置变更历史中记录了在 v24.12 中默认启用并行哈希作为 JOIN 算法的变更。这意味着,如果配置了早于 v24.12 的兼容性级别,ClickHouse 将继续使用非并行哈希 JOIN 算法。[#75870](https://github.com/ClickHouse/ClickHouse/pull/75870) ([Robert Schulze](https://github.com/rschu1ze)). -* 修复了一个 bug:含有隐式添加的 min-max 索引的表无法复制到新表中(问题 [#75677](https://github.com/ClickHouse/ClickHouse/issues/75677))。[#75877](https://github.com/ClickHouse/ClickHouse/pull/75877)([Smita Kulkarni](https://github.com/SmitaRKulkarni))。 -* `clickhouse-library-bridge` 允许从文件系统中打开任意库,因此只应在隔离环境中运行才是安全的。为防止其与 clickhouse-server 一同运行时产生漏洞,我们会将库路径限制为配置中指定的位置。此漏洞由 **Arseniy Dugin** 通过 [ClickHouse Bug Bounty Program](https://github.com/ClickHouse/ClickHouse/issues/38986) 发现。[#75954](https://github.com/ClickHouse/ClickHouse/pull/75954)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 我们当时对部分元数据使用了 JSON 序列化,这是一个错误,因为 JSON 不支持在字符串字面量中包含二进制数据(包括空字节)。SQL 查询可以包含二进制数据以及无效的 UTF-8,因此我们在元数据文件中也必须支持这一点。与此同时,ClickHouse 的 `JSONEachRow` 和类似格式通过偏离 JSON 标准来规避这个问题,以实现对二进制数据的无损往返。相关动机说明见此:[https://github.com/ClickHouse/ClickHouse/pull/73668#issuecomment-2560501790](https://github.com/ClickHouse/ClickHouse/pull/73668#issuecomment-2560501790)。解决方案是让 `Poco::JSON` 库与 ClickHouse 中的 JSON 格式序列化方式保持一致。此更改关闭了 [#73668](https://github.com/ClickHouse/ClickHouse/issues/73668)。[#75963](https://github.com/ClickHouse/ClickHouse/pull/75963)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 修复存储 `S3Queue` 中提交限制检查的逻辑。 [#76104](https://github.com/ClickHouse/ClickHouse/pull/76104) ([Kseniia Sumarokova](https://github.com/kssenii)). -* 修复在附加启用自动索引(`add_minmax_index_for_numeric_columns` / `add_minmax_index_for_string_columns`)的 MergeTree 表时出现的问题。 [#76139](https://github.com/ClickHouse/ClickHouse/pull/76139) ([Azat Khuzhin](https://github.com/azat)). -* 修复了作业的父线程堆栈跟踪(由 `enable_job_stack_trace` 设置控制)未被打印的问题。修复了 `enable_job_stack_trace` 设置未正确传播到各线程,导致生成的堆栈跟踪内容并不总是符合该设置的问题。[#76191](https://github.com/ClickHouse/ClickHouse/pull/76191)([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy))。 -* 修复了权限检查错误,其中 `ALTER RENAME` 错误地需要 `CREATE USER` 权限。修复 [#74372](https://github.com/ClickHouse/ClickHouse/issues/74372)。[#76241](https://github.com/ClickHouse/ClickHouse/pull/76241)([pufit](https://github.com/pufit))。 -* 修复在大端架构上使用 reinterpretAs 处理 FixedString 时的问题。 [#76253](https://github.com/ClickHouse/ClickHouse/pull/76253) ([Azat Khuzhin](https://github.com/azat)). -* 修复 S3Queue 中的逻辑错误 "Expected current processor {} to be equal to {} for bucket {}"。 [#76358](https://github.com/ClickHouse/ClickHouse/pull/76358) ([Kseniia Sumarokova](https://github.com/kssenii)). -* 修复在 Memory 数据库上执行 ALTER 时出现的死锁问题。 [#76359](https://github.com/ClickHouse/ClickHouse/pull/76359) ([Azat Khuzhin](https://github.com/azat)). -* 修复当 `WHERE` 条件中包含 `pointInPolygon` 函数时索引分析中的逻辑错误。[#76360](https://github.com/ClickHouse/ClickHouse/pull/76360) ([Anton Popov](https://github.com/CurtizJ))。 -* 修复信号处理程序中可能存在的不安全调用。[#76549](https://github.com/ClickHouse/ClickHouse/pull/76549)([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy))。 -* 修复 PartsSplitter 中的反向键支持。修复了 [#73400](https://github.com/ClickHouse/ClickHouse/issues/73400)。[#73418](https://github.com/ClickHouse/ClickHouse/pull/73418)([Amos Bird](https://github.com/amosbird))。 - - +* 当用于修剪的字符通过计算得到且为空字符串时,函数 `TRIM` 现在已能被正确处理。示例:`SELECT TRIM(LEADING concat('') FROM 'foo')`(Issue [#69922](https://github.com/ClickHouse/ClickHouse/issues/69922))。[#75399](https://github.com/ClickHouse/ClickHouse/pull/75399)([Manish Gill](https://github.com/mgill25))。 +* 修复 IOutputFormat 中的数据竞争。[#75448](https://github.com/ClickHouse/ClickHouse/pull/75448)([Pavel Kruglov](https://github.com/Avogar))。 +* 修复在对分布式表执行 JOIN 时使用 Array 类型 JSON 子列时可能出现的错误 `Elements ... and ... of Nested data structure ... (Array columns) have different array sizes`。[#75512](https://github.com/ClickHouse/ClickHouse/pull/75512) ([Pavel Kruglov](https://github.com/Avogar)). +* 通过 `CODEC(ZSTD, DoubleDelta)` 修复数据损坏问题。关闭了 [#70031](https://github.com/ClickHouse/ClickHouse/issues/70031)。[#75548](https://github.com/ClickHouse/ClickHouse/pull/75548)([Konstantin Bogdanov](https://github.com/thevar1able))。 +* 修复 `allow_feature_tier` 与 MergeTree 兼容性设置之间的交互。[#75635](https://github.com/ClickHouse/ClickHouse/pull/75635) ([Raúl Marín](https://github.com/Algunenano))。 +* 修复在重试处理文件时,system.s3queue_log 中 processed_rows 值不正确的问题。 [#75666](https://github.com/ClickHouse/ClickHouse/pull/75666) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 当物化视图向 URL 引擎写入数据且存在连接问题时,遵守 `materialized_views_ignore_errors` 设置。[#75679](https://github.com/ClickHouse/ClickHouse/pull/75679)([Christoph Wurm](https://github.com/cwurm))。 +* 修复了在对不同类型的列多次执行异步 `RENAME` 查询(`alter_sync = 0`)后,从 `MergeTree` 表读取数据时偶发崩溃的问题。 [#75693](https://github.com/ClickHouse/ClickHouse/pull/75693) ([Anton Popov](https://github.com/CurtizJ)). +* 修复某些包含 `UNION ALL` 的查询会报 `Block structure mismatch in QueryPipeline stream` 错误的问题。[#75715](https://github.com/ClickHouse/ClickHouse/pull/75715) ([Nikolai Kochetov](https://github.com/KochetovNicolai))。 +* 在对其主键列执行 ALTER MODIFY 时重建 projection。此前,在对用于 projection 主键的列执行 ALTER MODIFY 后进行查询,可能会导致 `CANNOT_READ_ALL_DATA` 错误。 [#75720](https://github.com/ClickHouse/ClickHouse/pull/75720) ([Pavel Kruglov](https://github.com/Avogar)). +* 修复在 analyzer 中对标量子查询执行 `ARRAY JOIN` 时结果不正确的问题。[#75732](https://github.com/ClickHouse/ClickHouse/pull/75732) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). +* 修复 `DistinctSortedStreamTransform` 中的空指针解引用问题。[#75734](https://github.com/ClickHouse/ClickHouse/pull/75734) ([Nikita Taranov](https://github.com/nickitat)). +* 修正 `allow_suspicious_ttl_expressions` 的行为。[#75771](https://github.com/ClickHouse/ClickHouse/pull/75771)([Aleksei Filatov](https://github.com/aalexfvk))。 +* 修复函数 `translate` 中未初始化内存读取的问题。此更改关闭了 [#75592](https://github.com/ClickHouse/ClickHouse/issues/75592)。[#75794](https://github.com/ClickHouse/ClickHouse/pull/75794)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 在 Native 格式下,将格式设置传递到 JSON 的字符串格式化中。 [#75832](https://github.com/ClickHouse/ClickHouse/pull/75832) ([Pavel Kruglov](https://github.com/Avogar)). +* 在设置变更历史中记录了在 v24.12 中默认启用并行哈希 JOIN 算法的变更。这意味着,如果配置了早于 v24.12 的兼容性级别,ClickHouse 将继续使用非并行哈希进行 JOIN。[#75870](https://github.com/ClickHouse/ClickHouse/pull/75870)([Robert Schulze](https://github.com/rschu1ze))。 +* 修复了一个错误:具有隐式添加的 min-max 索引的表无法被复制到新表中(问题 [#75677](https://github.com/ClickHouse/ClickHouse/issues/75677))。[#75877](https://github.com/ClickHouse/ClickHouse/pull/75877)([Smita Kulkarni](https://github.com/SmitaRKulkarni))。 +* `clickhouse-library-bridge` 允许从文件系统中打开任意库,因此只适合在隔离环境中运行。为防止在其与 clickhouse-server 紧邻部署时产生漏洞,我们将把可访问库的路径限制在配置中指定的位置。此漏洞由 **Arseniy Dugin** 通过 [ClickHouse Bug Bounty Program](https://github.com/ClickHouse/ClickHouse/issues/38986) 发现。[#75954](https://github.com/ClickHouse/ClickHouse/pull/75954)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 我们当时恰好对某些元数据使用了 JSON 序列化,这是一个错误,因为 JSON 不支持在字符串字面量中包含二进制数据(包括空字节)。SQL 查询可以包含二进制数据和无效的 UTF-8,因此我们也必须在元数据文件中支持这一点。与此同时,ClickHouse 的 `JSONEachRow` 和类似格式则通过偏离 JSON 标准来确保二进制数据可以完美往返。动机说明见此处:[https://github.com/ClickHouse/ClickHouse/pull/73668#issuecomment-2560501790](https://github.com/ClickHouse/ClickHouse/pull/73668#issuecomment-2560501790)。解决方案是让 `Poco::JSON` 库与 ClickHouse 中的 JSON 格式序列化行为保持一致。此变更关闭了 [#73668](https://github.com/ClickHouse/ClickHouse/issues/73668)。[#75963](https://github.com/ClickHouse/ClickHouse/pull/75963)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 修复存储 `S3Queue` 中关于提交限制的检查。[#76104](https://github.com/ClickHouse/ClickHouse/pull/76104) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 修复在附加带有自动索引(`add_minmax_index_for_numeric_columns`/`add_minmax_index_for_string_columns`)的 MergeTree 表时的错误。[#76139](https://github.com/ClickHouse/ClickHouse/pull/76139)([Azat Khuzhin](https://github.com/azat))。 +* 修复了作业父线程的堆栈跟踪(受 `enable_job_stack_trace` 设置控制)未打印的问题。修复了 `enable_job_stack_trace` 设置未正确传播到线程,导致生成的堆栈跟踪内容有时不遵循该设置的问题。[#76191](https://github.com/ClickHouse/ClickHouse/pull/76191) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* 修复权限检查错误,此前 `ALTER RENAME` 被错误地要求具备 `CREATE USER` 授权。关闭 [#74372](https://github.com/ClickHouse/ClickHouse/issues/74372)。[#76241](https://github.com/ClickHouse/ClickHouse/pull/76241)([pufit](https://github.com/pufit))。 +* 修复在大端架构上对 FixedString 使用 reinterpretAs 的问题。[#76253](https://github.com/ClickHouse/ClickHouse/pull/76253) ([Azat Khuzhin](https://github.com/azat)). +* 修复 S3Queue 中的逻辑错误:“Expected current processor {} to be equal to {} for bucket {}”。[#76358](https://github.com/ClickHouse/ClickHouse/pull/76358)([Kseniia Sumarokova](https://github.com/kssenii))。 +* 针对 Memory 数据库的 ALTER 操作修复死锁问题。[#76359](https://github.com/ClickHouse/ClickHouse/pull/76359) ([Azat Khuzhin](https://github.com/azat))。 +* 修复在 `WHERE` 条件中使用 `pointInPolygon` 函数时索引分析中的逻辑错误。 [#76360](https://github.com/ClickHouse/ClickHouse/pull/76360) ([Anton Popov](https://github.com/CurtizJ)). +* 修复信号处理程序中的潜在不安全调用。[#76549](https://github.com/ClickHouse/ClickHouse/pull/76549)([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy))。 +* 修复 PartsSplitter 中对反向键的支持问题。这解决了 [#73400](https://github.com/ClickHouse/ClickHouse/issues/73400)。[#73418](https://github.com/ClickHouse/ClickHouse/pull/73418)([Amos Bird](https://github.com/amosbird))。 #### 构建/测试/打包改进 -* 支持在 ARM 和 Intel Mac 上构建 HDFS。 [#74244](https://github.com/ClickHouse/ClickHouse/pull/74244) ([Yan Xin](https://github.com/yxheartipp)). -* 在为 Darwin 进行交叉编译时启用 ICU 和 GRPC。 [#75922](https://github.com/ClickHouse/ClickHouse/pull/75922) ([Raúl Marín](https://github.com/Algunenano)). -* 更新到内置 LLVM 19。 [#75148](https://github.com/ClickHouse/ClickHouse/pull/75148) ([Konstantin Bogdanov](https://github.com/thevar1able)). -* 在 docker 镜像中为默认用户禁用网络访问。 [#75259](https://github.com/ClickHouse/ClickHouse/pull/75259) ([Mikhail f. Shiryaev](https://github.com/Felixoid)). 将所有与 clickhouse-server 相关的操作封装为函数,并仅在 `entrypoint.sh` 中启动默认可执行文件时执行它们。这是一个在 [#50724](https://github.com/ClickHouse/ClickHouse/issues/50724) 中提出但长期被推迟的改进。为 `clickhouse-extract-from-config` 新增开关 `--users`,用于从 `users.xml` 中获取值。 [#75643](https://github.com/ClickHouse/ClickHouse/pull/75643) ([Mikhail f. Shiryaev](https://github.com/Felixoid)). -* 从二进制文件中删除约 20MB 的死代码。 [#76226](https://github.com/ClickHouse/ClickHouse/pull/76226) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -### ClickHouse 版本 25.1,2025-01-28 {#251} +* 支持在 ARM 和 Intel 架构的 Mac 上构建 HDFS。[#74244](https://github.com/ClickHouse/ClickHouse/pull/74244) ([Yan Xin](https://github.com/yxheartipp)). +* 在为 Darwin 进行交叉编译时启用 ICU 和 gRPC。[#75922](https://github.com/ClickHouse/ClickHouse/pull/75922) ([Raúl Marín](https://github.com/Algunenano)). +* 将内置 LLVM 更新至 19 版本。[#75148](https://github.com/ClickHouse/ClickHouse/pull/75148) ([Konstantin Bogdanov](https://github.com/thevar1able)). +* 在 docker 镜像中为默认用户禁用网络访问。[#75259](https://github.com/ClickHouse/ClickHouse/pull/75259) ([Mikhail f. Shiryaev](https://github.com/Felixoid)). 将所有与 clickhouse-server 相关的操作封装为函数,并仅在 `entrypoint.sh` 中启动默认二进制文件时执行这些操作。此前长期被推迟的一项改进在 [#50724](https://github.com/ClickHouse/ClickHouse/issues/50724) 中被提出。为 `clickhouse-extract-from-config` 新增开关 `--users`,用于从 `users.xml` 中获取值。[#75643](https://github.com/ClickHouse/ClickHouse/pull/75643) ([Mikhail f. Shiryaev](https://github.com/Felixoid)). +* 从二进制文件中移除约 20MB 的死代码。[#76226](https://github.com/ClickHouse/ClickHouse/pull/76226) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +### ClickHouse 25.1 版本,2025-01-28 {#251} +#### 向后不兼容的变更 -#### 不向后兼容的变更 -* `JSONEachRowWithProgress` 现在会在进度发生时立即输出进度信息。在之前的版本中,进度只会在每个结果块之后显示,这使得它几乎没什么用。修改进度的显示方式:将不再显示零值。此变更关闭了 [#70800](https://github.com/ClickHouse/ClickHouse/issues/70800)。[#73834](https://github.com/ClickHouse/ClickHouse/pull/73834)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* `Merge` 表现在会通过对其底层表的列做并集并推导出公共类型,来统一底层表的结构。此变更关闭了 [#64864](https://github.com/ClickHouse/ClickHouse/issues/64864)。在某些情况下,此变更可能是不向后兼容的。一个例子是,当各个表之间没有公共类型,但仍然可以转换为第一个表的类型,比如 UInt64 和 Int64,或任意数值类型与 String 的情况。如果你希望恢复旧行为,请将 `merge_table_max_tables_to_look_for_schema_inference` 设置为 `1`,或者将 `compatibility` 设置为 `24.12` 或更早版本。[#73956](https://github.com/ClickHouse/ClickHouse/pull/73956)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* Parquet 输出格式会将 Date 和 DateTime 列转换为 Parquet 支持的日期/时间类型,而不是将它们写为原始数字。`DateTime` 现在变为 `DateTime64(3)`(之前为:`UInt32`);将 `output_format_parquet_datetime_as_uint32` 设置为 true 可恢复旧行为。`Date` 现在变为 `Date32`(之前为:`UInt16`)。[#70950](https://github.com/ClickHouse/ClickHouse/pull/70950)([Michael Kolupaev](https://github.com/al13n321))。 +* `JSONEachRowWithProgress` 现在会在实际产生进度时写出进度信息。在之前的版本中,进度只会在每个结果块之后显示,这使得它几乎没有用。修改进度显示方式:不再显示零值。这解决了 [#70800](https://github.com/ClickHouse/ClickHouse/issues/70800)。[#73834](https://github.com/ClickHouse/ClickHouse/pull/73834)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* `Merge` 表现在会通过取各个底层表列的并集并推导公共类型来统一它们的结构。这解决了 [#64864](https://github.com/ClickHouse/ClickHouse/issues/64864)。在某些情况下,此变更可能是向后不兼容的。一个例子是各个表之间不存在公共类型,但仍然可以转换为第一个表的类型,比如 UInt64 和 Int64,或任意数值类型与 String。如果你希望恢复旧行为,将 `merge_table_max_tables_to_look_for_schema_inference` 设置为 `1`,或将 `compatibility` 设置为 `24.12` 或更早版本。[#73956](https://github.com/ClickHouse/ClickHouse/pull/73956)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* Parquet 输出格式会将 Date 和 DateTime 列转换为 Parquet 所支持的日期/时间类型,而不是按原始数字写入。`DateTime` 将变为 `DateTime64(3)`(之前为:`UInt32`);通过设置 `output_format_parquet_datetime_as_uint32` 可以恢复旧行为。`Date` 将变为 `Date32`(之前为:`UInt16`)。[#70950](https://github.com/ClickHouse/ClickHouse/pull/70950)([Michael Kolupaev](https://github.com/al13n321))。 * 默认情况下,不再允许在 `ORDER BY` 和比较函数 `less/greater/equal/etc` 中使用不可比较类型(例如 `JSON`/`Object`/`AggregateFunction`)。[#73276](https://github.com/ClickHouse/ClickHouse/pull/73276)([Pavel Kruglov](https://github.com/Avogar))。 -* 过时的 `MaterializedMySQL` 数据库引擎已被移除且不再可用。[#73879](https://github.com/ClickHouse/ClickHouse/pull/73879)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* `mysql` 字典源不再执行 `SHOW TABLE STATUS` 查询,因为对于 InnoDB 表以及任意较新的 MySQL 版本,该查询不再提供任何有用信息。此变更关闭了 [#72636](https://github.com/ClickHouse/ClickHouse/issues/72636)。该变更是向后兼容的,但被放在本小节中,以便你有机会注意到它。[#73914](https://github.com/ClickHouse/ClickHouse/pull/73914)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* `CHECK TABLE` 查询现在需要单独的 `CHECK` 权限。在之前的版本中,仅有 `SHOW TABLES` 权限就足以运行这些查询。但 `CHECK TABLE` 查询可能非常重,而且通常用于 `SELECT` 查询的复杂度限制并不适用于它,这带来了潜在的 DoS 风险。[#74471](https://github.com/ClickHouse/ClickHouse/pull/74471)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 函数 `h3ToGeo()` 现在按 `(lat, lon)` 顺序返回结果(这是几何函数的标准顺序)。希望保留旧结果顺序 `(lon, lat)` 的用户可以将设置 `h3togeo_lon_lat_result_order` 置为 true。[#74719](https://github.com/ClickHouse/ClickHouse/pull/74719)([Manish Gill](https://github.com/mgill25))。 -* 新的 MongoDB 驱动现在为默认驱动。希望继续使用旧驱动的用户可以将服务端设置 `use_legacy_mongodb_integration` 置为 true。[#73359](https://github.com/ClickHouse/ClickHouse/pull/73359)([Robert Schulze](https://github.com/rschu1ze))。 - - +* 过时的 `MaterializedMySQL` 数据库引擎已被移除,不再可用。[#73879](https://github.com/ClickHouse/ClickHouse/pull/73879)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* `mysql` 字典源不再执行 `SHOW TABLE STATUS` 查询,因为对于 InnoDB 表以及任何较新的 MySQL 版本来说,它并不提供任何有价值的信息。这解决了 [#72636](https://github.com/ClickHouse/ClickHouse/issues/72636)。此变更是向后兼容的,但被放到本小节中,以便你有机会注意到它。[#73914](https://github.com/ClickHouse/ClickHouse/pull/73914)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* `CHECK TABLE` 查询现在需要单独的 `CHECK` 权限。在之前的版本中,仅有 `SHOW TABLES` 权限就足以执行这些查询。但 `CHECK TABLE` 查询可能非常重,而且常规的 `SELECT` 查询复杂度限制并不适用于它,这带来了潜在的拒绝服务(DoS)风险。[#74471](https://github.com/ClickHouse/ClickHouse/pull/74471)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 函数 `h3ToGeo()` 现在按 `(lat, lon)` 的顺序返回结果(这是几何函数的标准顺序)。希望保留旧结果顺序 `(lon, lat)` 的用户可以将设置 `h3togeo_lon_lat_result_order` 设为 `true`。[#74719](https://github.com/ClickHouse/ClickHouse/pull/74719)([Manish Gill](https://github.com/mgill25))。 +* 新的 MongoDB 驱动现在为默认驱动。希望继续使用旧版驱动的用户可以将服务端设置 `use_legacy_mongodb_integration` 设为 `true`。[#73359](https://github.com/ClickHouse/ClickHouse/pull/73359)([Robert Schulze](https://github.com/rschu1ze))。 #### 新功能 -* 新增支持在提交后执行 `SELECT` 查询时,立即应用未完成(尚未由后台进程物化)的 mutations。可以通过设置 `apply_mutations_on_fly` 来启用此功能。 [#74877](https://github.com/ClickHouse/ClickHouse/pull/74877) ([Anton Popov](https://github.com/CurtizJ)). -* 为 Iceberg 表实现针对时间相关变换分区操作的分区裁剪。 [#72044](https://github.com/ClickHouse/ClickHouse/pull/72044) ([Daniil Ivanik](https://github.com/divanik)). -* 在 MergeTree 的排序键和跳过索引中支持子列。 [#72644](https://github.com/ClickHouse/ClickHouse/pull/72644) ([Pavel Kruglov](https://github.com/Avogar)). -* 支持从 `Apache Arrow`/`Parquet`/`ORC` 中读取 `HALF_FLOAT` 值(会被读取为 `Float32`)。修复了 [#72960](https://github.com/ClickHouse/ClickHouse/issues/72960)。请注意,IEEE-754 half float 与 `BFloat16` 并不相同。修复了 [#73835](https://github.com/ClickHouse/ClickHouse/issues/73835)。[#73836](https://github.com/ClickHouse/ClickHouse/pull/73836)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* `system.trace_log` 表将包含两个新列:`symbols` 和 `lines`,用于存放符号化的堆栈跟踪信息。这使得收集和导出性能剖析信息更加方便。该行为由 `trace_log` 中的服务器配置值 `symbolize` 控制,且默认启用。[#73896](https://github.com/ClickHouse/ClickHouse/pull/73896)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 添加了一个新函数 `generateSerialID`,可用于在表中生成自增编号。作为由 [kazalika](https://github.com/kazalika) 发起的 [#64310](https://github.com/ClickHouse/ClickHouse/issues/64310) 的后续工作。这将关闭 [#62485](https://github.com/ClickHouse/ClickHouse/issues/62485)。[#73950](https://github.com/ClickHouse/ClickHouse/pull/73950)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 为 DDL 查询新增语法 `query1 PARALLEL WITH query2 PARALLEL WITH query3 ... PARALLEL WITH queryN`。这意味着子查询 `{query1, query2, ... queryN}` 允许且优先以并行方式相互执行。[#73983](https://github.com/ClickHouse/ClickHouse/pull/73983) ([Vitaly Baranov](https://github.com/vitlibar))。 -* 为反序列化后的 skipping 索引 granule 添加了一个内存缓存。这应该能加速重复使用 skipping 索引的查询。新缓存的大小由服务器设置 `skipping_index_cache_size` 和 `skipping_index_cache_max_entries` 控制。引入该缓存的初衷是为向量相似度索引提速,这类索引现在已经快了很多。[#70102](https://github.com/ClickHouse/ClickHouse/pull/70102) ([Robert Schulze](https://github.com/rschu1ze))。 -* 现在,嵌入式 Web UI 在查询运行期间提供了进度条,并且支持取消查询。它会显示记录总数以及更详细的速度信息。数据一到达,表格就可以增量渲染。启用 HTTP 压缩。表格渲染速度变得更快。表头变为置顶悬浮(sticky)状态。它支持选择单元格并通过方向键在单元格间导航。修复了选中单元格的描边导致单元格变小的问题。单元格不再在鼠标悬停时展开,而只会在选中时展开。停止渲染传入数据的时机由客户端而不是服务器端决定。对数字的分组位进行高亮显示。整体设计得到了焕新,变得更加醒目大胆。它会检查服务器是否可达以及凭证是否正确,并显示服务器版本和运行时长。云图标在所有字体中都以描边样式显示,即使是在 Safari 中也是如此。嵌套数据类型中的大整数将被更好地渲染。它将正确显示 inf/nan。鼠标悬停在列头上时,将显示数据类型。[#74204](https://github.com/ClickHouse/ClickHouse/pull/74204)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 通过设置 `add_minmax_index_for_numeric_columns`(用于数值列)和 `add_minmax_index_for_string_columns`(用于字符串列),新增对由 MergeTree 管理的列默认创建最小-最大(skipping)索引的能力。目前这两个设置都处于禁用状态,因此尚未有任何行为变化。[#74266](https://github.com/ClickHouse/ClickHouse/pull/74266)([Smita Kulkarni](https://github.com/SmitaRKulkarni))。 -* 将 `script_query_number` 和 `script_line_number` 字段添加到 `system.query_log`、原生协议中的 ClientInfo,以及服务器日志中。此更改解决了 [#67542](https://github.com/ClickHouse/ClickHouse/issues/67542)。感谢 [pinsvin00](https://github.com/pinsvin00) 早前在 [#68133](https://github.com/ClickHouse/ClickHouse/issues/68133) 中发起该功能。[#74477](https://github.com/ClickHouse/ClickHouse/pull/74477)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 新增聚合函数 `sequenceMatchEvents`,用于在给定模式中返回最长匹配事件链中各匹配事件的时间戳。[#72349](https://github.com/ClickHouse/ClickHouse/pull/72349) ([UnamedRus](https://github.com/UnamedRus))。 -* 新增函数 `arrayNormalizedGini`。 [#72823](https://github.com/ClickHouse/ClickHouse/pull/72823) ([flynn](https://github.com/ucasfl)). -* 为 `DateTime64` 添加减号运算符支持,允许在 `DateTime64` 值之间进行减法运算,以及与 `DateTime` 进行减法运算。[#74482](https://github.com/ClickHouse/ClickHouse/pull/74482) ([Li Yin](https://github.com/liyinsg))。 - - - -#### 实验性特性 -* `BFloat16` 数据类型已可用于生产环境。 [#73840](https://github.com/ClickHouse/ClickHouse/pull/73840) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* 在提交 `SELECT` 查询后,其执行期间可以立即应用尚未完成(尚未由后台进程物化)的 mutation。可以通过设置 `apply_mutations_on_fly` 来启用该功能。 [#74877](https://github.com/ClickHouse/ClickHouse/pull/74877) ([Anton Popov](https://github.com/CurtizJ)). +* 在 Iceberg 中为时间相关的 transform 分区操作实现 `Iceberg` 表的分区剪枝。[#72044](https://github.com/ClickHouse/ClickHouse/pull/72044) ([Daniil Ivanik](https://github.com/divanik))。 +* 在 MergeTree 的排序键和跳过索引中支持子列。[#72644](https://github.com/ClickHouse/ClickHouse/pull/72644)([Pavel Kruglov](https://github.com/Avogar))。 +* 已支持从 `Apache Arrow`/`Parquet`/`ORC` 读取 `HALF_FLOAT` 值(会被读取为 `Float32`)。修复了 [#72960](https://github.com/ClickHouse/ClickHouse/issues/72960)。请注意,IEEE-754 半精度浮点数与 `BFloat16` 并不相同。修复了 [#73835](https://github.com/ClickHouse/ClickHouse/issues/73835)。[#73836](https://github.com/ClickHouse/ClickHouse/pull/73836)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* `system.trace_log` 表将包含两个新列 `symbols` 和 `lines`,用于存储符号化后的堆栈跟踪。这样便于收集和导出性能分析信息。该行为由 `trace_log` 中的服务器配置项 `symbolize` 控制,且默认启用。[#73896](https://github.com/ClickHouse/ClickHouse/pull/73896)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 新增函数 `generateSerialID`,用于在表中生成自增序号。是 [kazalika](https://github.com/kazalika) 提交的 [#64310](https://github.com/ClickHouse/ClickHouse/issues/64310) 的后续工作。本项变更关闭了 [#62485](https://github.com/ClickHouse/ClickHouse/issues/62485)。[#73950](https://github.com/ClickHouse/ClickHouse/pull/73950)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 为 DDL 查询添加语法 `query1 PARALLEL WITH query2 PARALLEL WITH query3 ... PARALLEL WITH queryN`。这意味着子查询 `{query1, query2, ... queryN}` 可以彼此并行执行(并且推荐这样使用)。[#73983](https://github.com/ClickHouse/ClickHouse/pull/73983)([Vitaly Baranov](https://github.com/vitlibar))。 +* 为反序列化后的 skipping 索引 granule 新增了一个内存缓存。这将加速重复执行、且使用 skipping 索引的查询。新缓存的大小由服务器设置 `skipping_index_cache_size` 和 `skipping_index_cache_max_entries` 控制。引入该缓存的最初动机是向量相似度索引,而这些索引现在已经快了很多。[#70102](https://github.com/ClickHouse/ClickHouse/pull/70102)([Robert Schulze](https://github.com/rschu1ze))。 +* 现在,内嵌的 Web UI 在查询运行期间提供进度条,并允许取消查询。它会显示记录总数以及关于查询速度的详细信息。数据一到达,数据表就可以增量渲染。启用 HTTP 压缩后,表格渲染速度变得更快。表头现在是固定的。它支持选中单元格,并可以通过方向键在单元格之间导航。修复了选中单元格轮廓导致其变小的问题。单元格不再在鼠标悬停时展开,而只会在选中时展开。停止渲染传入数据的时机现在由客户端而不是服务器端决定。对数字的分组进行高亮显示。整体设计进行了焕新并变得更鲜明。它会检查服务器是否可达以及凭证是否正确,并显示服务器版本和运行时长。在所有字体中(即使在 Safari 中),云图标都是轮廓样式。嵌套数据类型中的大整数将得到更好的渲染。它将正确显示 inf/nan。将在鼠标悬停在列头时显示数据类型。[#74204](https://github.com/ClickHouse/ClickHouse/pull/74204)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 添加了对通过设置 `add_minmax_index_for_numeric_columns`(用于数值列)和 `add_minmax_index_for_string_columns`(用于字符串列),为由 MergeTree 管理的列默认创建最小-最大(跳过)索引的支持。目前这两个设置均为禁用状态,因此尚未引入行为变更。[#74266](https://github.com/ClickHouse/ClickHouse/pull/74266)([Smita Kulkarni](https://github.com/SmitaRKulkarni))。 +* 将 `script_query_number` 和 `script_line_number` 字段添加到 `system.query_log`、原生协议中的 ClientInfo,以及服务器日志中。此更改解决了 [#67542](https://github.com/ClickHouse/ClickHouse/issues/67542)。感谢 [pinsvin00](https://github.com/pinsvin00) 先前在 [#68133](https://github.com/ClickHouse/ClickHouse/issues/68133) 中发起该功能。[#74477](https://github.com/ClickHouse/ClickHouse/pull/74477)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 新增聚合函数 `sequenceMatchEvents`,用于为模式中最长的事件链返回匹配事件的时间戳。[#72349](https://github.com/ClickHouse/ClickHouse/pull/72349) ([UnamedRus](https://github.com/UnamedRus))。 +* 新增函数 `arrayNormalizedGini`。[#72823](https://github.com/ClickHouse/ClickHouse/pull/72823) ([flynn](https://github.com/ucasfl))。 +* 为 `DateTime64` 增加减号运算符支持,从而允许在 `DateTime64` 值之间以及与 `DateTime` 之间进行减法运算。[#74482](https://github.com/ClickHouse/ClickHouse/pull/74482) ([Li Yin](https://github.com/liyinsg))。 +#### 实验性功能 +* `BFloat16` 数据类型已可用于生产环境。[#73840](https://github.com/ClickHouse/ClickHouse/pull/73840) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 #### 性能优化 -* 对函数 `indexHint` 进行了优化。现在,仅作为函数 `indexHint` 参数使用的列将不会从表中读取。[#74314](https://github.com/ClickHouse/ClickHouse/pull/74314)([Anton Popov](https://github.com/CurtizJ))。如果 `indexHint` 函数是你企业数据架构中的核心组件,这项优化将会帮你大忙。 -* 针对 `parallel_hash` JOIN 算法,对 `max_joined_block_size_rows` 设置进行了更精确的统计处理,有助于避免相较于 `hash` 算法的更高内存占用。 [#74630](https://github.com/ClickHouse/ClickHouse/pull/74630) ([Nikita Taranov](https://github.com/nickitat)). -* 在查询计划层面支持对 `MergingAggregated` 步骤进行谓词下推优化。在使用 analyzer 时,可提升某些查询的性能。[#74073](https://github.com/ClickHouse/ClickHouse/pull/74073) ([Nikolai Kochetov](https://github.com/KochetovNicolai))。 -* 在 `parallel_hash` JOIN 算法的探测阶段中,已移除了对左表数据块进行哈希拆分的操作。[#73089](https://github.com/ClickHouse/ClickHouse/pull/73089)([Nikita Taranov](https://github.com/nickitat))。 +* 对函数 `indexHint` 进行了优化。现在,仅作为函数 `indexHint` 参数使用的列不会从表中读取。[#74314](https://github.com/ClickHouse/ClickHouse/pull/74314)([Anton Popov](https://github.com/CurtizJ))。如果 `indexHint` 函数是你企业数据架构的核心组件,那么这一优化简直可以说能“救你一命”。 +* 对 `parallel_hash` JOIN 算法中的 `max_joined_block_size_rows` 设置进行更精确的处理,有助于避免相比 `hash` 算法出现更高的内存消耗。[#74630](https://github.com/ClickHouse/ClickHouse/pull/74630) ([Nikita Taranov](https://github.com/nickitat))。 +* 在查询计划层面对 `MergingAggregated` 步骤支持谓词下推优化,从而提升了一些使用 analyzer 的查询的性能。[#74073](https://github.com/ClickHouse/ClickHouse/pull/74073) ([Nikolai Kochetov](https://github.com/KochetovNicolai))。 +* 在 `parallel_hash` JOIN 算法的探测阶段,已移除按哈希拆分左表数据块的操作。[#73089](https://github.com/ClickHouse/ClickHouse/pull/73089)([Nikita Taranov](https://github.com/nickitat))。 * 优化 RowBinary 输入格式。修复 [#63805](https://github.com/ClickHouse/ClickHouse/issues/63805)。[#65059](https://github.com/ClickHouse/ClickHouse/pull/65059)([Pavel Kruglov](https://github.com/Avogar))。 -* 如果启用了 `optimize_on_insert`,则将数据部分写为 level 1。这样可以在针对新写入数据部分、带有 `FINAL` 的查询中使用多种优化。[#73132](https://github.com/ClickHouse/ClickHouse/pull/73132) ([Anton Popov](https://github.com/CurtizJ))。 -* 通过底层优化提升字符串反序列化性能。 [#65948](https://github.com/ClickHouse/ClickHouse/pull/65948) ([Nikita Taranov](https://github.com/nickitat)). -* 在对记录进行相等性比较(例如在执行合并操作时)时,应优先从最有可能不相等的列开始比较各行。[#63780](https://github.com/ClickHouse/ClickHouse/pull/63780) ([UnamedRus](https://github.com/UnamedRus))。 -* 通过按键对右表重新排序,提升 grace hash join 的性能。[#72237](https://github.com/ClickHouse/ClickHouse/pull/72237) ([kevinyhzou](https://github.com/KevinyhZou)). -* 允许 `arrayROCAUC` 和 `arrayAUCPR` 计算整条曲线的局部面积,从而可以在超大数据集上并行计算。[#72904](https://github.com/ClickHouse/ClickHouse/pull/72904) ([Emmanuel](https://github.com/emmanuelsdias)). -* 避免创建过多空闲线程。 [#72920](https://github.com/ClickHouse/ClickHouse/pull/72920) ([Guo Wangyang](https://github.com/guowangy)). -* 如果在表函数中仅使用花括号展开,则不要列出 blob 存储键。关闭 [#73333](https://github.com/ClickHouse/ClickHouse/issues/73333)。[#73518](https://github.com/ClickHouse/ClickHouse/pull/73518)([Konstantin Bogdanov](https://github.com/thevar1able))。 -* 为在 Nullable 参数上执行的函数添加短路优化。[#73820](https://github.com/ClickHouse/ClickHouse/pull/73820) ([李扬](https://github.com/taiyang-li))。 -* 避免将 `maskedExecute` 应用于非函数列,以提升短路执行的性能。 [#73965](https://github.com/ClickHouse/ClickHouse/pull/73965) ([lgbo](https://github.com/lgbo-ustc)). -* 禁用 `Kafka`/`NATS`/`RabbitMQ`/`FileLog` 输入格式中的头信息自动检测,以提升性能。 [#74006](https://github.com/ClickHouse/ClickHouse/pull/74006) ([Azat Khuzhin](https://github.com/azat)). -* 在使用 grouping sets 聚合之后,以更高的并行度执行 pipeline。 [#74082](https://github.com/ClickHouse/ClickHouse/pull/74082) ([Nikita Taranov](https://github.com/nickitat))。 +* 当启用 `optimize_on_insert` 时,将数据部分写入为 1 级。这样可以对新写入的数据部分在带有 `FINAL` 的查询中使用多种优化。[#73132](https://github.com/ClickHouse/ClickHouse/pull/73132) ([Anton Popov](https://github.com/CurtizJ))。 +* 通过底层优化提升字符串反序列化速度。[#65948](https://github.com/ClickHouse/ClickHouse/pull/65948) ([Nikita Taranov](https://github.com/nickitat)). +* 在对记录进行相等性比较(例如在执行合并时)时,应优先从最有可能不相等的列开始比较行。[#63780](https://github.com/ClickHouse/ClickHouse/pull/63780) ([UnamedRus](https://github.com/UnamedRus))。 +* 通过按照键对右表重新排序,以提升 Grace 哈希连接性能。 [#72237](https://github.com/ClickHouse/ClickHouse/pull/72237) ([kevinyhzou](https://github.com/KevinyhZou)). +* 允许 `arrayROCAUC` 和 `arrayAUCPR` 计算整个曲线的部分面积,从而可以在海量数据集上并行计算。[#72904](https://github.com/ClickHouse/ClickHouse/pull/72904) ([Emmanuel](https://github.com/emmanuelsdias))。 +* 避免生成过多的空闲线程。 [#72920](https://github.com/ClickHouse/ClickHouse/pull/72920) ([Guo Wangyang](https://github.com/guowangy)). +* 当在表函数中只使用花括号展开时,不要列出对象存储键。解决了 [#73333](https://github.com/ClickHouse/ClickHouse/issues/73333)。[#73518](https://github.com/ClickHouse/ClickHouse/pull/73518)([Konstantin Bogdanov](https://github.com/thevar1able))。 +* 对在 Nullable 参数上的函数执行进行短路优化。 [#73820](https://github.com/ClickHouse/ClickHouse/pull/73820) ([李扬](https://github.com/taiyang-li))。 +* 不要在非函数类型的列上应用 `maskedExecute`,以提升短路执行的性能。[#73965](https://github.com/ClickHouse/ClickHouse/pull/73965) ([lgbo](https://github.com/lgbo-ustc)). +* 禁用 `Kafka`/`NATS`/`RabbitMQ`/`FileLog` 输入格式中的消息头自动检测以提升性能。 [#74006](https://github.com/ClickHouse/ClickHouse/pull/74006) ([Azat Khuzhin](https://github.com/azat)). +* 在使用 grouping sets 进行聚合后,以更高的并行度执行 pipeline。 [#74082](https://github.com/ClickHouse/ClickHouse/pull/74082) ([Nikita Taranov](https://github.com/nickitat)). * 缩小 `MergeTreeReadPool` 中的临界区范围。 [#74202](https://github.com/ClickHouse/ClickHouse/pull/74202) ([Guo Wangyang](https://github.com/guowangy)). -* 并行副本性能改进。对于与并行副本协议无关的数据包,其在查询发起方的反序列化现在始终在 pipeline 线程中执行。此前,这可能在负责 pipeline 调度的线程中执行,从而降低发起方的响应性并延迟 pipeline 的执行。 [#74398](https://github.com/ClickHouse/ClickHouse/pull/74398) ([Igor Nikonov](https://github.com/devcrafter)). +* 并行副本性能改进。对于与并行副本协议无关的数据包,其在查询发起端的反序列化现在始终在 pipeline 线程中进行。此前,这一步可能在负责 pipeline 调度的线程中执行,从而降低发起端的响应能力并延迟 pipeline 的执行。 [#74398](https://github.com/ClickHouse/ClickHouse/pull/74398) ([Igor Nikonov](https://github.com/devcrafter)). * 提升 Keeper 中大规模批量请求的性能。[#74849](https://github.com/ClickHouse/ClickHouse/pull/74849) ([Antonio Andelic](https://github.com/antonio2368)). -* 按值使用日志包装器,并且不要在堆上分配它们。 [#74034](https://github.com/ClickHouse/ClickHouse/pull/74034) ([Mikhail Artemenko](https://github.com/Michicosun)). -* 在后台重新建立与 MySQL 和 Postgres 字典副本的连接,从而不会延迟对相应字典的请求。[#71101](https://github.com/ClickHouse/ClickHouse/pull/71101) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy))。 -* 并行副本利用有关副本可用性的历史信息来改进副本选择,但在连接不可用时不会更新副本的错误计数。此 PR 使在副本不可用时会更新其错误计数。[#72666](https://github.com/ClickHouse/ClickHouse/pull/72666) ([zoomxi](https://github.com/zoomxi))。 -* 新增了一个 MergeTree 设置项 `materialize_skip_indexes_on_merge`,用于在合并过程中禁止创建跳过索引(skip indexes)。这样用户可以通过 `ALTER TABLE [..] MATERIALIZE INDEX [...]` 显式控制何时创建跳过索引。如果跳过索引的构建成本较高(例如向量相似度索引),这一点会非常有用。[#74401](https://github.com/ClickHouse/ClickHouse/pull/74401) ([Robert Schulze](https://github.com/rschu1ze))。 +* 按值使用日志包装器,不要在堆上分配它们。 [#74034](https://github.com/ClickHouse/ClickHouse/pull/74034) ([Mikhail Artemenko](https://github.com/Michicosun)). +* 在后台重新建立到 MySQL 和 Postgres 字典副本的连接,以避免延迟对相应字典的请求。[#71101](https://github.com/ClickHouse/ClickHouse/pull/71101) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* 并行副本利用关于副本可用性的历史信息来改进副本选择,但在连接不可用时不会更新该副本的错误计数。此 PR 现在会在副本不可用时更新其错误计数。[#72666](https://github.com/ClickHouse/ClickHouse/pull/72666) ([zoomxi](https://github.com/zoomxi))。 +* 新增了一个 MergeTree 设置 `materialize_skip_indexes_on_merge`,用于在合并过程中禁止自动创建 skip 索引。这样允许用户通过显式命令(`ALTER TABLE [..] MATERIALIZE INDEX [...]`)来控制何时创建 skip 索引。如果构建 skip 索引的开销较大(例如向量相似度索引),这会非常有用。[#74401](https://github.com/ClickHouse/ClickHouse/pull/74401) ([Robert Schulze](https://github.com/rschu1ze))。 * 优化 Storage(S3/Azure)Queue 中的 Keeper 请求。 [#74410](https://github.com/ClickHouse/ClickHouse/pull/74410) ([Kseniia Sumarokova](https://github.com/kssenii)). [#74538](https://github.com/ClickHouse/ClickHouse/pull/74538) ([Kseniia Sumarokova](https://github.com/kssenii)). -* 默认最多可使用 `1000` 个并行副本。[#74504](https://github.com/ClickHouse/ClickHouse/pull/74504) ([Konstantin Bogdanov](https://github.com/thevar1able))。 +* 默认最多可使用 `1000` 个并行副本。 [#74504](https://github.com/ClickHouse/ClickHouse/pull/74504) ([Konstantin Bogdanov](https://github.com/thevar1able)). * 在从 S3 磁盘读取数据时改进 HTTP 会话复用([#72401](https://github.com/ClickHouse/ClickHouse/issues/72401))。[#74548](https://github.com/ClickHouse/ClickHouse/pull/74548)([Julian Maicher](https://github.com/jmaicher))。 - - - - #### 改进 -* 在使用隐式 ENGINE 的 CREATE TABLE 查询中支持 SETTINGS,并支持同时使用引擎设置和查询设置。 [#73120](https://github.com/ClickHouse/ClickHouse/pull/73120) ([Raúl Marín](https://github.com/Algunenano)). -* 默认启用 `use_hive_partitioning`。[#71636](https://github.com/ClickHouse/ClickHouse/pull/71636) ([Yarik Briukhovetskyi](https://github.com/yariks5s))。 -* 支持在参数不同的 JSON 类型之间进行 CAST 和 ALTER 操作。[#72303](https://github.com/ClickHouse/ClickHouse/pull/72303) ([Pavel Kruglov](https://github.com/Avogar))。 -* 支持 JSON 列的值进行等值比较。 [#72991](https://github.com/ClickHouse/ClickHouse/pull/72991) ([Pavel Kruglov](https://github.com/Avogar)). -* 改进包含 JSON 子列的标识符的格式,避免不必要的反引号。 [#73085](https://github.com/ClickHouse/ClickHouse/pull/73085) ([Pavel Kruglov](https://github.com/Avogar))。 -* 交互式指标改进。修复来自并行副本的指标未完全显示的问题。按最近更新的时间排序显示指标,其次按名称的字典序排序。不显示过期的指标。[#71631](https://github.com/ClickHouse/ClickHouse/pull/71631) ([Julia Kartseva](https://github.com/jkartseva)). -* 默认对 JSON 输出格式进行美化。新增设置 `output_format_json_pretty_print` 用于控制该行为,并默认启用该设置。 [#72148](https://github.com/ClickHouse/ClickHouse/pull/72148) ([Pavel Kruglov](https://github.com/Avogar)). -* 默认允许 `LowCardinality(UUID)`。这在 ClickHouse Cloud 客户中已被证明行之有效。[#73826](https://github.com/ClickHouse/ClickHouse/pull/73826) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 改进安装过程中的提示信息。[#73827](https://github.com/ClickHouse/ClickHouse/pull/73827) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* 改进了 ClickHouse Cloud 密码重置相关的提示信息。[#73831](https://github.com/ClickHouse/ClickHouse/pull/73831)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 针对无法向文件追加数据的 File 表,改进错误消息。[#73832](https://github.com/ClickHouse/ClickHouse/pull/73832)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 当用户在终端中误将输出格式设为二进制格式(例如 Native、Parquet、Avro)时进行确认提示。此更改关闭了 [#59524](https://github.com/ClickHouse/ClickHouse/issues/59524)。 [#73833](https://github.com/ClickHouse/ClickHouse/pull/73833)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 在终端的 Pretty 和 Vertical 格式中高亮显示行尾空格,以提升可读性。此行为由设置 `output_format_pretty_highlight_trailing_spaces` 控制。初始实现由 [Braden Burns](https://github.com/bradenburns) 在 [#72996](https://github.com/ClickHouse/ClickHouse/issues/72996) 中完成。修复并关闭了问题 [#71590](https://github.com/ClickHouse/ClickHouse/issues/71590)。[#73847](https://github.com/ClickHouse/ClickHouse/pull/73847)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* `clickhouse-client` 和 `clickhouse-local` 在从文件重定向标准输入时会自动检测其压缩格式。此更改关闭了 issue [#70865](https://github.com/ClickHouse/ClickHouse/issues/70865)。[#73848](https://github.com/ClickHouse/ClickHouse/pull/73848)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 在 pretty 格式中默认截断过长的列名。该行为由 `output_format_pretty_max_column_name_width_cut_to` 和 `output_format_pretty_max_column_name_width_min_chars_to_cut` 设置控制。这是对 [tanmaydatta](https://github.com/tanmaydatta) 在 [#66502](https://github.com/ClickHouse/ClickHouse/issues/66502) 中工作的延续。此更改解决了 [#65968](https://github.com/ClickHouse/ClickHouse/issues/65968)。[#73851](https://github.com/ClickHouse/ClickHouse/pull/73851)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 让 `Pretty` 格式更美观:如果距离上一个块输出的时间很短,则合并这些块。该行为由新的设置 `output_format_pretty_squash_consecutive_ms`(默认 50 ms)和 `output_format_pretty_squash_max_wait_ms`(默认 1000 ms)控制。是对 [#49537](https://github.com/ClickHouse/ClickHouse/issues/49537) 的延续。本次改动关闭了 [#49153](https://github.com/ClickHouse/ClickHouse/issues/49153)。[#73852](https://github.com/ClickHouse/ClickHouse/pull/73852)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 新增一个用于统计当前正在合并的源 part 数量的指标。此更改关闭了 [#70809](https://github.com/ClickHouse/ClickHouse/issues/70809)。[#73868](https://github.com/ClickHouse/ClickHouse/pull/73868)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 如果输出到终端且使用 `Vertical` 格式时,会对列进行高亮显示。可以通过 `output_format_pretty_color` 设置禁用此行为。 [#73898](https://github.com/ClickHouse/ClickHouse/pull/73898) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 已增强 MySQL 兼容性,使得现在 `mysqlsh`(Oracle 提供的功能丰富的 MySQL 命令行工具)可以连接到 ClickHouse,从而便于测试。[#73912](https://github.com/ClickHouse/ClickHouse/pull/73912) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 美化输出格式可以在表格单元格内渲染多行字段,从而提高可读性。该功能默认启用,可通过设置 `output_format_pretty_multiline_fields` 进行控制。这是对 [Volodyachan](https://github.com/Volodyachan) 在 [#64094](https://github.com/ClickHouse/ClickHouse/issues/64094) 中工作的延续。本变更关闭了 [#56912](https://github.com/ClickHouse/ClickHouse/issues/56912)。[#74032](https://github.com/ClickHouse/ClickHouse/pull/74032)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 在浏览器中向 JavaScript 暴露 X-ClickHouse HTTP 头。这使编写应用程序更加方便。[#74180](https://github.com/ClickHouse/ClickHouse/pull/74180) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* `JSONEachRowWithProgress` 格式将包含带有元数据的事件,以及 totals 和 extremes。它还包括 `rows_before_limit_at_least` 和 `rows_before_aggregation`。即使在已输出部分结果之后发生异常,该格式也会正确打印异常信息。现在进度信息中包含已耗费的纳秒数。结束时会发出一个最终的进度事件。查询运行期间的进度输出频率不会高于 `interactive_delay` 设置的值。[#74181](https://github.com/ClickHouse/ClickHouse/pull/74181)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 沙漏会在 Play UI 中平滑旋转。[#74182](https://github.com/ClickHouse/ClickHouse/pull/74182) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 即使 HTTP 响应已被压缩,也应在数据包一到达时立即发送。这样可以让浏览器接收进度数据包和压缩数据。 [#74201](https://github.com/ClickHouse/ClickHouse/pull/74201) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* 如果输出记录数量超过 N = `output_format_pretty_max_rows`,我们将不再只显示前 N 行,而是从中间截断输出表,显示前 N/2 行和后 N/2 行。作为对 [#64200](https://github.com/ClickHouse/ClickHouse/issues/64200) 的延续。此更改解决了 [#59502](https://github.com/ClickHouse/ClickHouse/issues/59502)。[#73929](https://github.com/ClickHouse/ClickHouse/pull/73929)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 在启用哈希 Join 算法时,允许使用更通用的 Join 规划算法。[#71926](https://github.com/ClickHouse/ClickHouse/pull/71926) ([János Benjamin Antal](https://github.com/antaljanosbenjamin))。 -* 允许在数据类型为 `DateTime64` 的列上创建 bloom_filter 索引。[#66416](https://github.com/ClickHouse/ClickHouse/pull/66416) ([Yutong Xiao](https://github.com/YutSean))。 -* 当同时启用 `min_age_to_force_merge_seconds` 和 `min_age_to_force_merge_on_partition_only` 时,数据部分合并操作将忽略最大字节数限制。 [#73656](https://github.com/ClickHouse/ClickHouse/pull/73656) ([Kai Zhu](https://github.com/nauu)). -* 为 OpenTelemetry span 日志表添加了 HTTP 头部,以提高可追踪性。 [#70516](https://github.com/ClickHouse/ClickHouse/pull/70516) ([jonymohajanGmail](https://github.com/jonymohajanGmail)). -* 支持按自定义时区写入 `orc` 文件,而不再固定使用 `GMT` 时区。[#70615](https://github.com/ClickHouse/ClickHouse/pull/70615) ([kevinyhzou](https://github.com/KevinyhZou)). -* 在跨云环境中写入备份时遵从 I/O 调度设置。[#71093](https://github.com/ClickHouse/ClickHouse/pull/71093) ([János Benjamin Antal](https://github.com/antaljanosbenjamin))。 -* 在 `system.asynchronous_metrics` 中为 `metric` 列添加别名 `name`。 [#71164](https://github.com/ClickHouse/ClickHouse/pull/71164) ([megao](https://github.com/jetgm))。 -* 过去由于某些历史原因,`ALTER TABLE MOVE PARTITION TO TABLE` 查询检查的是 `SELECT` 和 `ALTER DELETE` 权限,而不是专门的 `ALTER_MOVE_PARTITION`。此 PR 开始使用该访问类型。为保持兼容性,如果已授予 `SELECT` 和 `ALTER DELETE`,也会隐式授予此权限,但这种行为将在未来版本中移除。关闭了 [#16403](https://github.com/ClickHouse/ClickHouse/issues/16403)。[#71632](https://github.com/ClickHouse/ClickHouse/pull/71632)([pufit](https://github.com/pufit))。 -* 在尝试对排序键中的列进行物化时抛出异常,而不是允许其破坏排序顺序。 [#71891](https://github.com/ClickHouse/ClickHouse/pull/71891) ([Peter Nguyen](https://github.com/petern48)). -* 在 `EXPLAIN QUERY TREE` 中隐藏敏感信息。[#72025](https://github.com/ClickHouse/ClickHouse/pull/72025) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). -* 在“native”读取器中支持 Parquet 的整数逻辑类型。[#72105](https://github.com/ClickHouse/ClickHouse/pull/72105) ([Arthur Passos](https://github.com/arthurpassos))。 -* 如果默认用户需要密码,则在浏览器中以交互方式请求凭证。先前版本中,服务器返回 HTTP 403;现在返回 HTTP 401。 [#72198](https://github.com/ClickHouse/ClickHouse/pull/72198) ([Alexey Milovidov](https://github.com/alexey-milovidov)). -* 将访问类型 `CREATE_USER`、`ALTER_USER`、`DROP_USER`、`CREATE_ROLE`、`ALTER_ROLE`、`DROP_ROLE` 从全局改为参数化。也就是说,现在用户可以更精细地授予访问管理权限:[#72246](https://github.com/ClickHouse/ClickHouse/pull/72246)([pufit](https://github.com/pufit))。 -* 将 `latest_fail_error_code_name` 列添加到 `system.mutations` 中。我们需要这个列来引入一个用于检测卡住 mutation 的新指标,并用它来构建在云中遇到的错误图表,并且(可选地)添加一个噪声更少的新告警。[#72398](https://github.com/ClickHouse/ClickHouse/pull/72398)([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 -* 减少 `ATTACH PARTITION` 查询中的内存分配开销。[#72583](https://github.com/ClickHouse/ClickHouse/pull/72583) ([Konstantin Morozov](https://github.com/k-morozov)). -* 使 `max_bytes_before_external_sort` 的限制取决于查询整体的内存消耗(之前它表示的是单个排序线程中排序块的字节数,现在它与 `max_bytes_before_external_group_by` 具有相同含义——即所有线程在整个查询中可使用的内存总上限)。另外新增了一个用于控制写入磁盘块大小的设置——`min_external_sort_block_bytes`。[#72598](https://github.com/ClickHouse/ClickHouse/pull/72598) ([Azat Khuzhin](https://github.com/azat))。 -* 忽略 trace 采集器的内存限制。[#72606](https://github.com/ClickHouse/ClickHouse/pull/72606) ([Azat Khuzhin](https://github.com/azat))。 -* 将服务器设置 `dictionaries_lazy_load` 和 `wait_dictionaries_load_at_startup` 添加到 `system.server_settings`。[#72664](https://github.com/ClickHouse/ClickHouse/pull/72664) ([Christoph Wurm](https://github.com/cwurm))。 -* 将设置项 `max_backup_bandwidth` 添加到可在 `BACKUP`/`RESTORE` 查询中指定的设置项列表中。[#72665](https://github.com/ClickHouse/ClickHouse/pull/72665)([Christoph Wurm](https://github.com/cwurm))。 -* 降低 ReplicatedMergeTree 引擎中新出现复制数据部分的日志级别,以帮助减少在复制集群中生成的日志量。[#72876](https://github.com/ClickHouse/ClickHouse/pull/72876)([mor-akamai](https://github.com/morkalfon))。 -* 改进对析取(disjunction)中公共表达式的提取。即使所有析取项之间不存在共同子表达式,也允许对最终得到的过滤表达式进行简化。延续 [#71537](https://github.com/ClickHouse/ClickHouse/issues/71537)。[#73271](https://github.com/ClickHouse/ClickHouse/pull/73271)([Dmitry Novik](https://github.com/novikd))。 -* 在存储引擎 `S3Queue`/`AzureQueue` 中,现在允许为在创建时未设置 settings 的表补充添加 settings。[#73283](https://github.com/ClickHouse/ClickHouse/pull/73283)([Kseniia Sumarokova](https://github.com/kssenii))。 -* 引入一个名为 `least_greatest_legacy_null_behavior` 的设置(默认值:`false`),用于控制函数 `least` 和 `greatest` 在处理 `NULL` 参数时,是无条件返回 `NULL`(当为 `true` 时)还是忽略该参数(当为 `false` 时)。[#73344](https://github.com/ClickHouse/ClickHouse/pull/73344)([Robert Schulze](https://github.com/rschu1ze))。 -* 在 ObjectStorageQueueMetadata 的清理线程中使用 Keeper 的 multi 请求。 [#73357](https://github.com/ClickHouse/ClickHouse/pull/73357) ([Antonio Andelic](https://github.com/antonio2368)). -* 当 ClickHouse 在 cgroup 环境下运行时,我们仍然会收集与系统负载、进程调度、内存等相关的系统级异步指标。当 ClickHouse 是主机上唯一资源消耗较高的进程时,这些指标可能会提供有用的信号。[#73369](https://github.com/ClickHouse/ClickHouse/pull/73369) ([Nikita Taranov](https://github.com/nickitat))。 -* 在 `S3Queue` 存储中,现在允许将 24.6 之前创建的旧有有序表迁移到基于 bucket 的新结构中。[#73467](https://github.com/ClickHouse/ClickHouse/pull/73467) ([Kseniia Sumarokova](https://github.com/kssenii))。 -* 添加 `system.azure_queue`,类似于现有的 `system.s3queue`。 [#73477](https://github.com/ClickHouse/ClickHouse/pull/73477) ([Kseniia Sumarokova](https://github.com/kssenii)). -* 函数 `parseDateTime64`(及其变体)现在可以对早于 1970 年或晚于 2106 年的输入日期返回正确结果。例如:`SELECT parseDateTime64InJodaSyntax('2200-01-01 00:00:00.000', 'yyyy-MM-dd HH:mm:ss.SSS')`。[#73594](https://github.com/ClickHouse/ClickHouse/pull/73594)([zhanglistar](https://github.com/zhanglistar))。 -* 解决了一些用户提出的 `clickhouse-disks` 可用性问题,关闭了 [#67136](https://github.com/ClickHouse/ClickHouse/issues/67136)。[#73616](https://github.com/ClickHouse/ClickHouse/pull/73616)([Daniil Ivanik](https://github.com/divanik))。 -* 允许在 S3(Azure)Queue 存储中修改提交设置(提交设置为:`max_processed_files_before_commit`、`max_processed_rows_before_commit`、`max_processed_bytes_before_commit`、`max_processing_time_sec_before_commit`)。[#73635](https://github.com/ClickHouse/ClickHouse/pull/73635) ([Kseniia Sumarokova](https://github.com/kssenii)). -* 在 S3(Azure)Queue 存储中聚合各个来源的进度,以便与提交上限设置进行比较。[#73641](https://github.com/ClickHouse/ClickHouse/pull/73641) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 在具有隐式 ENGINE 的 `CREATE TABLE` 查询中支持 `SETTINGS`,并支持混合使用引擎设置和查询设置。 [#73120](https://github.com/ClickHouse/ClickHouse/pull/73120) ([Raúl Marín](https://github.com/Algunenano))。 +* 将默认启用 `use_hive_partitioning`。[#71636](https://github.com/ClickHouse/ClickHouse/pull/71636) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* 支持在参数不同的 JSON 类型之间进行 CAST 和 ALTER 操作。 [#72303](https://github.com/ClickHouse/ClickHouse/pull/72303) ([Pavel Kruglov](https://github.com/Avogar)). +* 支持对 JSON 列的值进行相等比较。 [#72991](https://github.com/ClickHouse/ClickHouse/pull/72991) ([Pavel Kruglov](https://github.com/Avogar))。 +* 改进含 JSON 子列的标识符的格式,避免不必要的反引号。 [#73085](https://github.com/ClickHouse/ClickHouse/pull/73085) ([Pavel Kruglov](https://github.com/Avogar)). +* 交互式指标功能改进。修复来自并行副本的指标未被完整展示的问题。按照最近一次更新时间排序展示指标,其次按名称的字典序排序。不展示陈旧的指标。[#71631](https://github.com/ClickHouse/ClickHouse/pull/71631) ([Julia Kartseva](https://github.com/jkartseva))。 +* 将 JSON 输出格式默认设为美化格式。新增设置 `output_format_json_pretty_print` 用于控制该行为,并默认启用该设置。[#72148](https://github.com/ClickHouse/ClickHouse/pull/72148) ([Pavel Kruglov](https://github.com/Avogar))。 +* 默认允许使用 `LowCardinality(UUID)`。实践证明,这一设置在 ClickHouse Cloud 客户中十分实用。[#73826](https://github.com/ClickHouse/ClickHouse/pull/73826) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 改进安装过程中的消息提示。[#73827](https://github.com/ClickHouse/ClickHouse/pull/73827) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* 改进了关于 ClickHouse Cloud 密码重置的提示信息。 [#73831](https://github.com/ClickHouse/ClickHouse/pull/73831) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* 改进在 File 表无法向文件追加时的错误消息。[#73832](https://github.com/ClickHouse/ClickHouse/pull/73832) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* 当用户在终端中意外选择将结果输出为二进制格式(例如 Native、Parquet、Avro)时,弹出确认提示。此更改解决了 [#59524](https://github.com/ClickHouse/ClickHouse/issues/59524)。[#73833](https://github.com/ClickHouse/ClickHouse/pull/73833)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 在终端中的 Pretty 和 Vertical 格式下高亮显示行尾空格,以提高可读性。该行为由设置 `output_format_pretty_highlight_trailing_spaces` 控制。最初由 [Braden Burns](https://github.com/bradenburns) 在 [#72996](https://github.com/ClickHouse/ClickHouse/issues/72996) 中实现,并关闭了 [#71590](https://github.com/ClickHouse/ClickHouse/issues/71590)。[#73847](https://github.com/ClickHouse/ClickHouse/pull/73847)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 当 stdin 从文件重定向输入时,`clickhouse-client` 和 `clickhouse-local` 将自动检测其压缩格式。此更改修复了 [#70865](https://github.com/ClickHouse/ClickHouse/issues/70865)。[#73848](https://github.com/ClickHouse/ClickHouse/pull/73848)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 默认在 pretty 输出格式中截断过长的列名。该行为由 `output_format_pretty_max_column_name_width_cut_to` 和 `output_format_pretty_max_column_name_width_min_chars_to_cut` 设置控制。这是对 [tanmaydatta](https://github.com/tanmaydatta) 在 [#66502](https://github.com/ClickHouse/ClickHouse/issues/66502) 中工作成果的延续。此更改解决了 [#65968](https://github.com/ClickHouse/ClickHouse/issues/65968)。[#73851](https://github.com/ClickHouse/ClickHouse/pull/73851)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 让 `Pretty` 格式更美观:如果距离上一个块输出的时间不长,则将多个块合并为一个块。通过新的设置 `output_format_pretty_squash_consecutive_ms`(默认 50 ms)和 `output_format_pretty_squash_max_wait_ms`(默认 1000 ms)进行控制。是对 [#49537](https://github.com/ClickHouse/ClickHouse/issues/49537) 的延续。本次改动关闭了 [#49153](https://github.com/ClickHouse/ClickHouse/issues/49153)。[#73852](https://github.com/ClickHouse/ClickHouse/pull/73852)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 新增一个指标,用于统计当前正在合并的源数据片数量。以解决 [#70809](https://github.com/ClickHouse/ClickHouse/issues/70809)。[#73868](https://github.com/ClickHouse/ClickHouse/pull/73868)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 当输出到终端时,在 `Vertical` 格式下高亮显示列。此行为可通过 `output_format_pretty_color` 设置禁用。[#73898](https://github.com/ClickHouse/ClickHouse/pull/73898) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 已将 MySQL 兼容性提升到现在 `mysqlsh`(Oracle 提供的功能丰富的 MySQL CLI)也可以连接到 ClickHouse 的水平。这有助于测试。[#73912](https://github.com/ClickHouse/ClickHouse/pull/73912) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* Pretty 输出格式现在可以在表格单元格内渲染多行字段,从而提高可读性。该功能默认启用,并可以通过设置 `output_format_pretty_multiline_fields` 进行控制。这是对 [Volodyachan](https://github.com/Volodyachan) 在 [#64094](https://github.com/ClickHouse/ClickHouse/issues/64094) 中工作的延续。此更改关闭了 [#56912](https://github.com/ClickHouse/ClickHouse/issues/56912)。[#74032](https://github.com/ClickHouse/ClickHouse/pull/74032)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 在浏览器中将 X-ClickHouse HTTP 头部暴露给 JavaScript,从而使编写应用程序更加方便。[#74180](https://github.com/ClickHouse/ClickHouse/pull/74180) ([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* `JSONEachRowWithProgress` 格式将包含带有元数据的事件,以及 totals 和 extremes。它还包含 `rows_before_limit_at_least` 和 `rows_before_aggregation`。如果在输出部分结果后收到异常,该格式会正确输出异常信息。现在进度信息中包含已消耗的纳秒数。结束时会发出最后一个进度事件。查询运行期间的进度输出频率不会高于 `interactive_delay` 设置指定的时间间隔。[#74181](https://github.com/ClickHouse/ClickHouse/pull/74181)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 沙漏将在 Play UI 中顺畅旋转。 [#74182](https://github.com/ClickHouse/ClickHouse/pull/74182) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* 即使 HTTP 响应经过压缩,也要在数据包一到达时立即发送。这样可以让浏览器及时接收进度数据包和压缩数据。[#74201](https://github.com/ClickHouse/ClickHouse/pull/74201)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 如果输出记录数大于 N = `output_format_pretty_max_rows`,则不再只显示前 N 行,而是从中间截断输出表,显示前 N/2 行和后 N/2 行。[#64200](https://github.com/ClickHouse/ClickHouse/issues/64200) 的延续。此更改关闭了 [#59502](https://github.com/ClickHouse/ClickHouse/issues/59502)。[#73929](https://github.com/ClickHouse/ClickHouse/pull/73929)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 在启用哈希 JOIN 算法时,允许使用更通用的 JOIN 规划算法。[#71926](https://github.com/ClickHouse/ClickHouse/pull/71926) ([János Benjamin Antal](https://github.com/antaljanosbenjamin))。 +* 支持在数据类型为 `DateTime64` 的列上创建 bloom_filter 索引。[#66416](https://github.com/ClickHouse/ClickHouse/pull/66416) ([Yutong Xiao](https://github.com/YutSean)). +* 当同时启用 `min_age_to_force_merge_seconds` 和 `min_age_to_force_merge_on_partition_only` 时,数据片段合并将忽略最大字节数限制。[#73656](https://github.com/ClickHouse/ClickHouse/pull/73656) ([Kai Zhu](https://github.com/nauu))。 +* 为 OpenTelemetry span 日志表添加了 HTTP 头部,以提高可追踪性。[#70516](https://github.com/ClickHouse/ClickHouse/pull/70516) ([jonymohajanGmail](https://github.com/jonymohajanGmail)). +* 支持按自定义时区写入 `orc` 文件,而不是始终使用 `GMT` 时区。[#70615](https://github.com/ClickHouse/ClickHouse/pull/70615) ([kevinyhzou](https://github.com/KevinyhZou))。 +* 在跨云写入备份时遵循 I/O 调度设置。[#71093](https://github.com/ClickHouse/ClickHouse/pull/71093) ([János Benjamin Antal](https://github.com/antaljanosbenjamin)). +* 在 `system.asynchronous_metrics` 中为 `metric` 列添加列别名 `name`。 [#71164](https://github.com/ClickHouse/ClickHouse/pull/71164) ([megao](https://github.com/jetgm)). +* 由于一些历史原因,查询 `ALTER TABLE MOVE PARTITION TO TABLE` 之前检查的是 `SELECT` 和 `ALTER DELETE` 权限,而不是专门的 `ALTER_MOVE_PARTITION`。本 PR 改为使用这一访问类型。出于兼容性考虑,如果已授予 `SELECT` 和 `ALTER DELETE`,则仍会隐式授予此权限,但这种行为将在未来版本中被移除。修复了 [#16403](https://github.com/ClickHouse/ClickHouse/issues/16403)。[#71632](https://github.com/ClickHouse/ClickHouse/pull/71632)([pufit](https://github.com/pufit))。 +* 在尝试物化排序键中的列时抛出异常,而不是让其导致排序顺序被打乱。[#71891](https://github.com/ClickHouse/ClickHouse/pull/71891) ([Peter Nguyen](https://github.com/petern48)). +* 在 `EXPLAIN QUERY TREE` 中隐藏敏感信息。 [#72025](https://github.com/ClickHouse/ClickHouse/pull/72025) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* 在 "native" 读取器中新增对 Parquet 整数逻辑类型的支持。 [#72105](https://github.com/ClickHouse/ClickHouse/pull/72105) ([Arthur Passos](https://github.com/arthurpassos)). +* 如果默认用户配置了密码,则在浏览器中以交互方式请求凭证。在早期版本中,服务器返回 HTTP 403;现在返回 HTTP 401。[#72198](https://github.com/ClickHouse/ClickHouse/pull/72198)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 将访问类型 `CREATE_USER`、`ALTER_USER`、`DROP_USER`、`CREATE_ROLE`、`ALTER_ROLE`、`DROP_ROLE` 从全局形式转换为参数化形式。也就是说,用户现在可以更精细地授予访问管理权限:[ #72246](https://github.com/ClickHouse/ClickHouse/pull/72246) ([pufit](https://github.com/pufit))。 +* 将 `latest_fail_error_code_name` 列添加到 `system.mutations` 中。我们需要该列来引入一个用于卡住(stuck)mutations 的新指标,并利用它在云端中构建错误图表,并且(可选)添加一个更少噪声的新告警。[#72398](https://github.com/ClickHouse/ClickHouse/pull/72398) ([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 +* 减少 `ATTACH PARTITION` 查询中的内存分配量。[#72583](https://github.com/ClickHouse/ClickHouse/pull/72583) ([Konstantin Morozov](https://github.com/k-morozov)). +* 使 `max_bytes_before_external_sort` 限制取决于整个查询的内存消耗(此前它表示单个排序线程中排序块的字节数,现在它与 `max_bytes_before_external_group_by` 含义相同——即所有线程在整个查询中可用内存的总量上限)。另外新增一个用于控制落盘块大小的设置——`min_external_sort_block_bytes`。[#72598](https://github.com/ClickHouse/ClickHouse/pull/72598) ([Azat Khuzhin](https://github.com/azat))。 +* 忽略 trace collector 施加的内存限制。[#72606](https://github.com/ClickHouse/ClickHouse/pull/72606) ([Azat Khuzhin](https://github.com/azat)). +* 在 `system.server_settings` 中添加服务器设置 `dictionaries_lazy_load` 和 `wait_dictionaries_load_at_startup`。 [#72664](https://github.com/ClickHouse/ClickHouse/pull/72664) ([Christoph Wurm](https://github.com/cwurm))。 +* 将 `max_backup_bandwidth` 设置添加到可在 `BACKUP`/`RESTORE` 查询中指定的设置列表中。 [#72665](https://github.com/ClickHouse/ClickHouse/pull/72665) ([Christoph Wurm](https://github.com/cwurm)). +* 降低 ReplicatedMergeTree 引擎中新出现的副本分片的日志级别,以帮助尽量减少在副本集群中生成的日志量。 [#72876](https://github.com/ClickHouse/ClickHouse/pull/72876) ([mor-akamai](https://github.com/morkalfon)). +* 改进对析取表达式中公共子表达式的抽取。即使各个析取分支之间不存在公共子表达式,也允许简化生成的过滤表达式。本项是对 [#71537](https://github.com/ClickHouse/ClickHouse/issues/71537) 的延续。[#73271](https://github.com/ClickHouse/ClickHouse/pull/73271)([Dmitry Novik](https://github.com/novikd))。 +* 在 Storage 中,`S3Queue`/`AzureQueue` 现在允许为创建时未指定设置的表补充设置。 [#73283](https://github.com/ClickHouse/ClickHouse/pull/73283) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 引入设置 `least_greatest_legacy_null_behavior`(默认值:`false`),用于控制函数 `least` 和 `greatest` 在处理 `NULL` 参数时,是无条件返回 `NULL`(当为 `true` 时),还是忽略该参数(当为 `false` 时)。 [#73344](https://github.com/ClickHouse/ClickHouse/pull/73344) ([Robert Schulze](https://github.com/rschu1ze)). +* 在 ObjectStorageQueueMetadata 的清理线程中使用 Keeper multi 请求。 [#73357](https://github.com/ClickHouse/ClickHouse/pull/73357) ([Antonio Andelic](https://github.com/antonio2368)). +* 当 ClickHouse 在 cgroup 环境中运行时,我们仍然会收集与系统负载、进程调度、内存等相关的系统范围异步指标。当 ClickHouse 是主机上唯一一个资源消耗较高的进程时,这些指标可能提供有用的信号。[#73369](https://github.com/ClickHouse/ClickHouse/pull/73369)([Nikita Taranov](https://github.com/nickitat))。 +* 在 `S3Queue` 存储中,现在支持将 24.6 之前创建的旧有序表迁移到基于 bucket 的新结构中。 [#73467](https://github.com/ClickHouse/ClickHouse/pull/73467) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 添加 `system.azure_queue`,其功能类似于现有的 `system.s3queue`。 [#73477](https://github.com/ClickHouse/ClickHouse/pull/73477) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 函数 `parseDateTime64`(及其变体)现在对于 1970 年之前和 2106 年之后的输入日期也能返回正确结果。示例:`SELECT parseDateTime64InJodaSyntax('2200-01-01 00:00:00.000', 'yyyy-MM-dd HH:mm:ss.SSS')`。[#73594](https://github.com/ClickHouse/ClickHouse/pull/73594) ([zhanglistar](https://github.com/zhanglistar))。 +* 修复了一些用户反馈的 `clickhouse-disks` 易用性问题。关闭了 [#67136](https://github.com/ClickHouse/ClickHouse/issues/67136)。[#73616](https://github.com/ClickHouse/ClickHouse/pull/73616)([Daniil Ivanik](https://github.com/divanik))。 +* 允许在 S3(Azure)Queue 存储中修改提交设置。(提交设置包括:`max_processed_files_before_commit`、`max_processed_rows_before_commit`、`max_processed_bytes_before_commit`、`max_processing_time_sec_before_commit`)。[#73635](https://github.com/ClickHouse/ClickHouse/pull/73635)([Kseniia Sumarokova](https://github.com/kssenii))。 +* 在 S3(Azure)Queue 存储中汇总各个源的进度,以便与提交上限设置进行比较。 [#73641](https://github.com/ClickHouse/ClickHouse/pull/73641) ([Kseniia Sumarokova](https://github.com/kssenii)). * 支持在 `BACKUP`/`RESTORE` 查询中使用核心设置。[#73650](https://github.com/ClickHouse/ClickHouse/pull/73650) ([Vitaly Baranov](https://github.com/vitlibar)). -* 在 Parquet 输出中考虑 `output_format_compression_level` 设置。[#73651](https://github.com/ClickHouse/ClickHouse/pull/73651) ([Arthur Passos](https://github.com/arthurpassos)). -* 在读取 Apache Arrow 的 `fixed_size_list` 时,将其作为 `Array` 处理,而不是视为不受支持的类型。[#73654](https://github.com/ClickHouse/ClickHouse/pull/73654)([Julian Meyers](https://github.com/J-Meyers))。 -* 添加了两个备份引擎:`Memory`(在当前用户会话内保留备份)和 `Null`(不会在任何地方保留备份),用于测试。[#73690](https://github.com/ClickHouse/ClickHouse/pull/73690)([Vitaly Baranov](https://github.com/vitlibar))。 -* `concurrent_threads_soft_limit_num` 和 `concurrent_threads_soft_limit_num_ratio_to_cores` 可以在无需重启服务器的情况下修改。[#73713](https://github.com/ClickHouse/ClickHouse/pull/73713)([Sergei Trifonov](https://github.com/serxa))。 -* 在 `formatReadable` 函数中添加对扩展数值类型(`Decimal`、大整数)的支持。[#73765](https://github.com/ClickHouse/ClickHouse/pull/73765)([Raúl Marín](https://github.com/Algunenano))。 -* 添加对 Postgres wire 协议兼容性的 TLS 支持。[#73812](https://github.com/ClickHouse/ClickHouse/pull/73812) ([scanhex12](https://github.com/scanhex12)). -* 函数 `isIPv4String` 在正确的 IPv4 地址后面跟着一个零字节时会返回 true,而在这种情况下本应返回 false。[#65387](https://github.com/ClickHouse/ClickHouse/issues/65387) 的后续修复。[#73946](https://github.com/ClickHouse/ClickHouse/pull/73946)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 使 MySQL 线协议中的错误码与 MySQL 保持兼容。是对 [#56831](https://github.com/ClickHouse/ClickHouse/issues/56831) 的延续,关闭了 [#50957](https://github.com/ClickHouse/ClickHouse/issues/50957)。[#73948](https://github.com/ClickHouse/ClickHouse/pull/73948)([Alexey Milovidov](https://github.com/alexey-milovidov))。 -* 添加设置 `validate_enum_literals_in_opearators`,用于在 `IN`、`NOT IN` 等运算符中验证枚举字面量是否与枚举类型匹配,如果字面量不是有效的枚举值则抛出异常。[#73985](https://github.com/ClickHouse/ClickHouse/pull/73985)([Vladimir Cherkasov](https://github.com/vdimir))。 -* 在 `S3(Azure)Queue` 存储中,将由提交设置定义的整个批次中的所有文件在单个 keeper 事务中一次性提交。[#73991](https://github.com/ClickHouse/ClickHouse/pull/73991)([Kseniia Sumarokova](https://github.com/kssenii))。 -* 为可执行 UDF 和字典禁用 header 检测(可能导致 Function 'X':结果错误,期望 Y 行,实际为 Y-1 行)。 [#73992](https://github.com/ClickHouse/ClickHouse/pull/73992) ([Azat Khuzhin](https://github.com/azat)). -* 为 `EXPLAIN PLAN` 添加 `distributed` 选项。现在,`EXPLAIN distributed=1 ...` 会将远程执行计划附加到 `ReadFromParallelRemote*` 步骤之后。[#73994](https://github.com/ClickHouse/ClickHouse/pull/73994)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 +* 在生成 Parquet 输出时考虑 `output_format_compression_level`。[#73651](https://github.com/ClickHouse/ClickHouse/pull/73651)([Arthur Passos](https://github.com/arthurpassos))。 +* 将对 Apache Arrow 的 `fixed_size_list` 的读取改为按 `Array` 处理,而不是将其视为不受支持的类型。[#73654](https://github.com/ClickHouse/ClickHouse/pull/73654) ([Julian Meyers](https://github.com/J-Meyers)). +* 添加了两个备份引擎:`Memory`(在当前用户会话内保存备份)和 `Null`(不会在任何地方保存备份),用于测试。[#73690](https://github.com/ClickHouse/ClickHouse/pull/73690)([Vitaly Baranov](https://github.com/vitlibar))。 +* `concurrent_threads_soft_limit_num` 和 `concurrent_threads_soft_limit_num_ratio_to_cores` 可以在无需重启服务器的情况下修改。 [#73713](https://github.com/ClickHouse/ClickHouse/pull/73713) ([Sergei Trifonov](https://github.com/serxa)). +* 为 `formatReadable` 函数新增对扩展数值类型(`Decimal`、大整数)的支持。[#73765](https://github.com/ClickHouse/ClickHouse/pull/73765)([Raúl Marín](https://github.com/Algunenano))。 +* 为 Postgres wire protocol 兼容性提供 TLS 支持。[#73812](https://github.com/ClickHouse/ClickHouse/pull/73812) ([scanhex12](https://github.com/scanhex12)). +* 函数 `isIPv4String` 在正确的 IPv4 地址后面跟随一个 0 字节时会返回 true,而在这种情况下它本应返回 false。是对 [#65387](https://github.com/ClickHouse/ClickHouse/issues/65387) 的后续修复。[#73946](https://github.com/ClickHouse/ClickHouse/pull/73946)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 使 MySQL 线协议中的错误码与 MySQL 保持一致。是 [#56831](https://github.com/ClickHouse/ClickHouse/issues/56831) 的后续工作。关闭 [#50957](https://github.com/ClickHouse/ClickHouse/issues/50957)。[#73948](https://github.com/ClickHouse/ClickHouse/pull/73948)([Alexey Milovidov](https://github.com/alexey-milovidov))。 +* 添加设置 `validate_enum_literals_in_opearators`,用于在 `IN`、`NOT IN` 等运算符中对枚举字面量进行校验,检查其是否属于对应的枚举类型;当字面量不是有效的枚举值时抛出异常。 [#73985](https://github.com/ClickHouse/ClickHouse/pull/73985) ([Vladimir Cherkasov](https://github.com/vdimir)). +* 在 `S3(Azure)Queue` 存储中,将由提交设置定义的单个批次中的所有文件在一次 Keeper 事务中统一提交。 [#73991](https://github.com/ClickHouse/ClickHouse/pull/73991) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 为可执行 UDF 和字典禁用头部检测(可能导致错误:Function 'X': wrong result, expected Y row(s), actual Y-1)。 [#73992](https://github.com/ClickHouse/ClickHouse/pull/73992) ([Azat Khuzhin](https://github.com/azat)). +* 为 `EXPLAIN PLAN` 添加 `distributed` 选项。现在,`EXPLAIN distributed=1 ...` 会将远程计划追加到 `ReadFromParallelRemote*` 步骤中。[#73994](https://github.com/ClickHouse/ClickHouse/pull/73994)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 * 对带有 Dynamic 参数的 not/xor 使用正确的返回类型。[#74013](https://github.com/ClickHouse/ClickHouse/pull/74013) ([Pavel Kruglov](https://github.com/Avogar))。 -* 允许在创建表之后更改 `add_implicit_sign_column_constraint_for_collapsing_engine`。[#74014](https://github.com/ClickHouse/ClickHouse/pull/74014) ([Christoph Wurm](https://github.com/cwurm)). +* 允许在表创建后修改 `add_implicit_sign_column_constraint_for_collapsing_engine`。[#74014](https://github.com/ClickHouse/ClickHouse/pull/74014) ([Christoph Wurm](https://github.com/cwurm)). * 在物化视图的 SELECT 查询中增加对子列的支持。 [#74030](https://github.com/ClickHouse/ClickHouse/pull/74030) ([Pavel Kruglov](https://github.com/Avogar)). -* 现在可以通过三种简单方式在 `clickhouse-client` 中设置自定义提示符:1. 通过命令行参数 `--prompt`;2. 在配置文件中,通过设置 `[...]`;3. 同样在配置文件中,通过连接级别的设置 `[...]`。 [#74168](https://github.com/ClickHouse/ClickHouse/pull/74168)([Christoph Wurm](https://github.com/cwurm))。 -* 在 ClickHouse Client 中通过连接到 9440 端口自动检测是否为安全连接。[#74212](https://github.com/ClickHouse/ClickHouse/pull/74212) ([Christoph Wurm](https://github.com/cwurm)). -* 允许在 `http_handlers` 中仅通过用户名对用户进行认证(此前还要求用户同时提供密码)。 [#74221](https://github.com/ClickHouse/ClickHouse/pull/74221) ([Azat Khuzhin](https://github.com/azat)). -* 对替代查询语言 PRQL 和 KQL 的支持已被标记为实验性功能。要使用它们,请将设置 `allow_experimental_prql_dialect = 1` 和 `allow_experimental_kusto_dialect = 1`。[#74224](https://github.com/ClickHouse/ClickHouse/pull/74224) ([Robert Schulze](https://github.com/rschu1ze))。 -* 在更多聚合函数中支持返回默认的 Enum 类型。[#74272](https://github.com/ClickHouse/ClickHouse/pull/74272) ([Raúl Marín](https://github.com/Algunenano))。 +* 现在可以通过三种简单方法在 `clickhouse-client` 中设置自定义提示符:1. 通过命令行参数 `--prompt`,2. 在配置文件中通过设置 `[...]`,3. 同样在配置文件中,通过按连接的设置 `[...]`。 [#74168](https://github.com/ClickHouse/ClickHouse/pull/74168) ([Christoph Wurm](https://github.com/cwurm))。 +* 在 ClickHouse Client 中通过连接到端口 9440 自动检测是否使用安全连接。[#74212](https://github.com/ClickHouse/ClickHouse/pull/74212)([Christoph Wurm](https://github.com/cwurm))。 +* 支持在 `http_handlers` 中仅通过用户名对用户进行认证(此前还要求用户提供密码)。[#74221](https://github.com/ClickHouse/ClickHouse/pull/74221) ([Azat Khuzhin](https://github.com/azat))。 +* 对替代查询语言 PRQL 和 KQL 的支持目前为实验性功能。要使用它们,请设置 `allow_experimental_prql_dialect = 1` 和 `allow_experimental_kusto_dialect = 1`。[#74224](https://github.com/ClickHouse/ClickHouse/pull/74224)([Robert Schulze](https://github.com/rschu1ze))。 +* 支持在更多聚合函数中返回默认的 Enum 类型。[#74272](https://github.com/ClickHouse/ClickHouse/pull/74272) ([Raúl Marín](https://github.com/Algunenano)). * 在 `OPTIMIZE TABLE` 中,现在可以使用关键字 `FORCE` 作为现有关键字 `FINAL` 的替代。[#74342](https://github.com/ClickHouse/ClickHouse/pull/74342)([Robert Schulze](https://github.com/rschu1ze))。 -* 添加 `IsServerShuttingDown` 指标,用于在服务器关闭过程耗时过长时触发告警。[#74429](https://github.com/ClickHouse/ClickHouse/pull/74429)([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 -* 在 EXPLAIN 中添加了 Iceberg 表名称。[#74485](https://github.com/ClickHouse/ClickHouse/pull/74485) ([alekseev-maksim](https://github.com/alekseev-maksim)). -* 在使用旧版分析器执行 RECURSIVE CTE 时提供更友好的错误信息。[#74523](https://github.com/ClickHouse/ClickHouse/pull/74523)([Raúl Marín](https://github.com/Algunenano))。 -* 在 `system.errors` 中显示更详细的错误信息。[#74574](https://github.com/ClickHouse/ClickHouse/pull/74574) ([Vitaly Baranov](https://github.com/vitlibar))。 -* 允许客户端在与 clickhouse-keeper 通信时使用密码。如果你为服务端和客户端配置了正确的 SSL,这个功能并不是特别有用,但在某些场景下仍然有用。密码长度不能超过 16 个字符。它与 Keeper 身份验证模型无关。[#74673](https://github.com/ClickHouse/ClickHouse/pull/74673) ([alesapin](https://github.com/alesapin))。 +* 添加 `IsServerShuttingDown` 指标,用于在服务器关闭耗时过长时触发告警。[#74429](https://github.com/ClickHouse/ClickHouse/pull/74429) ([Miсhael Stetsyuk](https://github.com/mstetsyuk))。 +* 在 `EXPLAIN` 输出中新增了 Iceberg 表名。 [#74485](https://github.com/ClickHouse/ClickHouse/pull/74485) ([alekseev-maksim](https://github.com/alekseev-maksim)). +* 在使用旧分析器配合 RECURSIVE CTE 时提供更好的错误信息。[#74523](https://github.com/ClickHouse/ClickHouse/pull/74523)([Raúl Marín](https://github.com/Algunenano))。 +* 在 `system.errors` 中显示详细错误信息。[#74574](https://github.com/ClickHouse/ClickHouse/pull/74574) ([Vitaly Baranov](https://github.com/vitlibar))。 +* 允许客户端在与 clickhouse-keeper 通信时使用密码。如果你已经为服务器和客户端正确配置了 SSL,这个功能的作用不大,但在某些场景下仍然可能有用。密码长度不能超过 16 个字符。它与 Keeper 认证模型无关。[#74673](https://github.com/ClickHouse/ClickHouse/pull/74673) ([alesapin](https://github.com/alesapin))。 * 为配置重载器添加错误码。[#74746](https://github.com/ClickHouse/ClickHouse/pull/74746) ([Garrett Thomas](https://github.com/garrettthomaskth))。 -* 在 MySQL 和 PostgreSQL 表函数和表引擎中新增了对 IPv6 地址的支持。[#74796](https://github.com/ClickHouse/ClickHouse/pull/74796) ([Mikhail Koviazin](https://github.com/mkmkme))。 +* 为 MySQL 和 PostgreSQL 表函数和表引擎添加了对 IPv6 地址的支持。 [#74796](https://github.com/ClickHouse/ClickHouse/pull/74796) ([Mikhail Koviazin](https://github.com/mkmkme)). * 为 `divideDecimal` 实现短路优化。修复 [#74280](https://github.com/ClickHouse/ClickHouse/issues/74280)。[#74843](https://github.com/ClickHouse/ClickHouse/pull/74843)([Kevin Mingtarja](https://github.com/kevinmingtarja))。 -* 现在支持在启动脚本中指定用户。[#74894](https://github.com/ClickHouse/ClickHouse/pull/74894)([pufit](https://github.com/pufit))。 -* 增加对 Azure SAS 令牌的支持。 [#72959](https://github.com/ClickHouse/ClickHouse/pull/72959) ([Azat Khuzhin](https://github.com/azat)). - - - - - -#### 错误修复(官方稳定版本中用户可见的异常行为) - -* 仅当压缩编解码器支持时才设置 Parquet 压缩级别。 [#74659](https://github.com/ClickHouse/ClickHouse/pull/74659) ([Arthur Passos](https://github.com/arthurpassos)). -* 修复了一个导致在使用带修饰符的排序规则区域设置时抛出错误的回归缺陷。例如,`SELECT arrayJoin(['kk 50', 'KK 01', ' KK 2', ' KK 3', 'kk 1', 'x9y99', 'x9y100']) item ORDER BY item ASC COLLATE 'tr-u-kn-true-ka-shifted` 现在可以正常工作。[#73544](https://github.com/ClickHouse/ClickHouse/pull/73544)([Robert Schulze](https://github.com/rschu1ze))。 -* 修复无法使用 keeper-client 创建 SEQUENTIAL 节点的问题。[#64177](https://github.com/ClickHouse/ClickHouse/pull/64177)([Duc Canh Le](https://github.com/canhld94))。 -* 修复 position 系列函数中字符计数错误的问题。[#71003](https://github.com/ClickHouse/ClickHouse/pull/71003) ([思维](https://github.com/heymind))。 -* 由于对部分撤销情况未作处理,访问实体的 `RESTORE` 操作所需的权限超出了实际必要的范围。此 PR 修复了该问题,并关闭 [#71853](https://github.com/ClickHouse/ClickHouse/issues/71853)。[#71958](https://github.com/ClickHouse/ClickHouse/pull/71958)([pufit](https://github.com/pufit))。 -* 避免在执行 `ALTER TABLE REPLACE/MOVE PARTITION FROM/TO TABLE` 后出现暂停。获取正确的后台任务调度设置。[#72024](https://github.com/ClickHouse/ClickHouse/pull/72024) ([Aleksei Filatov](https://github.com/aalexfvk))。 -* 修复在某些输入和输出格式(例如 Parquet、Arrow)中对空元组的处理。[#72616](https://github.com/ClickHouse/ClickHouse/pull/72616)([Michael Kolupaev](https://github.com/al13n321))。 -* 现在,在通配符匹配的数据库/表上执行列级 `GRANT SELECT/INSERT` 语句会抛出错误。[#72646](https://github.com/ClickHouse/ClickHouse/pull/72646) ([Johann Gan](https://github.com/johanngan))。 -* 修复由于目标访问实体上存在隐式授权而导致用户无法执行 `REVOKE ALL ON *.*` 的情况。[#72872](https://github.com/ClickHouse/ClickHouse/pull/72872) ([pufit](https://github.com/pufit))。 -* 修复 formatDateTime 标量函数处理正时区时的格式化问题。 [#73091](https://github.com/ClickHouse/ClickHouse/pull/73091) ([ollidraese](https://github.com/ollidraese)). -* 修复在通过 PROXYv1 建立连接且设置了 `auth_use_forwarded_address` 时未能正确反映源端口的问题——此前会错误地使用代理端口。新增 `currentQueryID()` 函数。[#73095](https://github.com/ClickHouse/ClickHouse/pull/73095) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy))。 -* 将格式设置传递到 TCPHandler 中的 NativeWriter,使诸如 `output_format_native_write_json_as_string` 之类的设置能够被正确应用。[#73179](https://github.com/ClickHouse/ClickHouse/pull/73179) ([Pavel Kruglov](https://github.com/Avogar))。 +* 现在可以在启动脚本中配置用户。[#74894](https://github.com/ClickHouse/ClickHouse/pull/74894)([pufit](https://github.com/pufit))。 +* 新增对 Azure SAS 令牌的支持。[#72959](https://github.com/ClickHouse/ClickHouse/pull/72959)([Azat Khuzhin](https://github.com/azat))。 + +#### 缺陷修复(官方稳定版中用户可见的异常行为) + +* 仅在压缩编解码器支持时才设置 Parquet 压缩级别。 [#74659](https://github.com/ClickHouse/ClickHouse/pull/74659) ([Arthur Passos](https://github.com/arthurpassos)). +* 修复了一个回归缺陷:在使用带修饰符的排序规则语言环境时会抛出错误。现在,例如 `SELECT arrayJoin(['kk 50', 'KK 01', ' KK 2', ' KK 3', 'kk 1', 'x9y99', 'x9y100']) item ORDER BY item ASC COLLATE 'tr-u-kn-true-ka-shifted` 可以正常工作。[#73544](https://github.com/ClickHouse/ClickHouse/pull/73544)([Robert Schulze](https://github.com/rschu1ze))。 +* 修复无法使用 keeper-client 创建 SEQUENTIAL 节点的问题。[#64177](https://github.com/ClickHouse/ClickHouse/pull/64177) ([Duc Canh Le](https://github.com/canhld94)). +* 修复 position 系列函数中字符计数不正确的问题。[#71003](https://github.com/ClickHouse/ClickHouse/pull/71003)([思维](https://github.com/heymind))。 +* 由于未处理的部分权限撤销,`RESTORE` 针对访问实体的操作所需权限超出了必要范围。此 PR 修复了该问题。关闭 [#71853](https://github.com/ClickHouse/ClickHouse/issues/71853)。[#71958](https://github.com/ClickHouse/ClickHouse/pull/71958)([pufit](https://github.com/pufit))。 +* 避免在执行 `ALTER TABLE REPLACE/MOVE PARTITION FROM/TO TABLE` 后出现停顿。正确获取后台任务调度的相关设置。[#72024](https://github.com/ClickHouse/ClickHouse/pull/72024) ([Aleksei Filatov](https://github.com/aalexfvk)). +* 修复在某些输入和输出格式(如 Parquet、Arrow)中对空元组的处理。[#72616](https://github.com/ClickHouse/ClickHouse/pull/72616)([Michael Kolupaev](https://github.com/al13n321))。 +* 现在,在通配符数据库/表上执行列级 GRANT SELECT/INSERT 语句会抛出错误。[#72646](https://github.com/ClickHouse/ClickHouse/pull/72646) ([Johann Gan](https://github.com/johanngan))。 +* 修复用户由于目标访问实体中的隐式授权而无法执行 `REVOKE ALL ON *.*` 的问题。[#72872](https://github.com/ClickHouse/ClickHouse/pull/72872)([pufit](https://github.com/pufit))。 +* 修复 `formatDateTime` 标量函数对正时区偏移量的格式化。 [#73091](https://github.com/ClickHouse/ClickHouse/pull/73091) ([ollidraese](https://github.com/ollidraese)). +* 修复在通过 PROXYv1 建立连接且设置了 `auth_use_forwarded_address` 时,源端口反映不正确的问题——此前错误地使用了代理端口。新增 `currentQueryID()` 函数。[#73095](https://github.com/ClickHouse/ClickHouse/pull/73095) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* 在 TCPHandler 中将格式设置传递给 NativeWriter,从而确保诸如 `output_format_native_write_json_as_string` 之类的设置能够被正确应用。[#73179](https://github.com/ClickHouse/ClickHouse/pull/73179) ([Pavel Kruglov](https://github.com/Avogar)). * 修复 StorageObjectStorageQueue 中的崩溃问题。 [#73274](https://github.com/ClickHouse/ClickHouse/pull/73274) ([Kseniia Sumarokova](https://github.com/kssenii)). -* 修复在服务器关闭期间刷新型物化视图可能发生的罕见崩溃问题。[#73323](https://github.com/ClickHouse/ClickHouse/pull/73323) ([Michael Kolupaev](https://github.com/al13n321)). -* 函数 `formatDateTime` 的 `%f` 占位符现在始终生成六位(亚秒级)数字。这使其行为与 MySQL 的 `DATE_FORMAT` 函数兼容。可以通过设置 `formatdatetime_f_prints_scale_number_of_digits = 1` 来恢复之前的行为。[#73324](https://github.com/ClickHouse/ClickHouse/pull/73324) ([ollidraese](https://github.com/ollidraese)). -* 修复了从 `s3` 存储和表函数读取时基于 `_etag` 列进行过滤的问题。[#73353](https://github.com/ClickHouse/ClickHouse/pull/73353) ([Anton Popov](https://github.com/CurtizJ)). -* 修复在使用旧分析器且在 `JOIN ON` 表达式中使用 `IN (subquery)` 时出现的 `Not-ready Set is passed as the second argument for function 'in'` 错误。[#73382](https://github.com/ClickHouse/ClickHouse/pull/73382) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). -* 修复了为 Dynamic 和 JSON 列进行 squash 前的准备逻辑。此前在某些情况下,即使尚未达到类型/路径数量的限制,也可能会将新类型插入到 shared variant/shared data 中。[#73388](https://github.com/ClickHouse/ClickHouse/pull/73388)([Pavel Kruglov](https://github.com/Avogar))。 -* 在对类型进行二进制解码时检查损坏的 size,以避免过大的内存分配。[#73390](https://github.com/ClickHouse/ClickHouse/pull/73390) ([Pavel Kruglov](https://github.com/Avogar))。 -* 修复了在启用并行副本的情况下,从单副本集群读取数据时的逻辑错误。[#73403](https://github.com/ClickHouse/ClickHouse/pull/73403) ([Michael Kolupaev](https://github.com/al13n321)). -* 修复 ObjectStorageQueue 在与 ZooKeeper 和旧版 Keeper 一起使用时的问题。[#73420](https://github.com/ClickHouse/ClickHouse/pull/73420) ([Antonio Andelic](https://github.com/antonio2368))。 -* 实现了启用 hive 分区为默认设置所需的修复。[#73479](https://github.com/ClickHouse/ClickHouse/pull/73479) ([Yarik Briukhovetskyi](https://github.com/yariks5s))。 -* 修复在创建向量相似度索引时出现的数据竞争问题。 [#73517](https://github.com/ClickHouse/ClickHouse/pull/73517) ([Antonio Andelic](https://github.com/antonio2368)). -* 修复了当字典源包含携带错误数据的函数时会导致的段错误。 [#73535](https://github.com/ClickHouse/ClickHouse/pull/73535) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* 修复了 storage S3(Azure)Queue 中插入失败时的重试逻辑。关闭 [#70951](https://github.com/ClickHouse/ClickHouse/issues/70951)。[#73546](https://github.com/ClickHouse/ClickHouse/pull/73546)([Kseniia Sumarokova](https://github.com/kssenii))。 -* 修复了函数 `tupleElement` 中的错误,该错误在元组包含 `LowCardinality` 元素且启用了 `optimize_functions_to_subcolumns` 设置的某些情况下可能会出现。 [#73548](https://github.com/ClickHouse/ClickHouse/pull/73548) ([Anton Popov](https://github.com/CurtizJ)). -* 修复解析枚举通配符后接区间的情况。修复 [#73473](https://github.com/ClickHouse/ClickHouse/issues/73473)。[#73569](https://github.com/ClickHouse/ClickHouse/pull/73569)([Konstantin Bogdanov](https://github.com/thevar1able))。 -* 修复了在针对非复制表的子查询中被忽略的 parallel_replicas_for_non_replicated_merge_tree 设置问题。[#73584](https://github.com/ClickHouse/ClickHouse/pull/73584) ([Igor Nikonov](https://github.com/devcrafter)). -* 修复在任务无法调度时抛出的 `std::logical_error` 问题。在压力测试中发现。[#73629](https://github.com/ClickHouse/ClickHouse/pull/73629) ([Alexander Gololobov](https://github.com/davenger))。 -* 在 `EXPLAIN SYNTAX` 中不要解析查询,以避免在分布式查询选择错误处理阶段时出现逻辑错误。修复了 [#65205](https://github.com/ClickHouse/ClickHouse/issues/65205)。[#73634](https://github.com/ClickHouse/ClickHouse/pull/73634)([Dmitry Novik](https://github.com/novikd))。 -* 修复 Dynamic 列中可能存在的数据不一致问题。修复了可能出现的逻辑错误:`Nested columns sizes are inconsistent with local_discriminators column size`。 [#73644](https://github.com/ClickHouse/ClickHouse/pull/73644) ([Pavel Kruglov](https://github.com/Avogar))。 -* 修复了在包含 `FINAL` 和 `SAMPLE` 的查询中出现的 `NOT_FOUND_COLUMN_IN_BLOCK` 错误。修复了对 `CollapsingMergeTree` 使用 `FINAL` 的查询结果不正确的问题,并启用了 `FINAL` 的优化。[#73682](https://github.com/ClickHouse/ClickHouse/pull/73682) ([Anton Popov](https://github.com/CurtizJ)). +* 修复在服务器关闭期间可刷新物化视图中发生的罕见崩溃。[#73323](https://github.com/ClickHouse/ClickHouse/pull/73323) ([Michael Kolupaev](https://github.com/al13n321))。 +* 函数 `formatDateTime` 的 `%f` 占位符现在无条件生成 6 位小数(秒的小数部分)。这使其行为与 MySQL 的 `DATE_FORMAT` 函数兼容。可以通过将设置 `formatdatetime_f_prints_scale_number_of_digits` 设为 `1` 来恢复此前的行为。[#73324](https://github.com/ClickHouse/ClickHouse/pull/73324) ([ollidraese](https://github.com/ollidraese))。 +* 修复了从 `s3` 存储和表函数读取时按 `_etag` 列进行过滤的问题。[#73353](https://github.com/ClickHouse/ClickHouse/pull/73353) ([Anton Popov](https://github.com/CurtizJ)). +* 修复在旧分析器中,当在 `JOIN ON` 表达式中使用 `IN (subquery)` 时出现的 `Not-ready Set is passed as the second argument for function 'in'` 错误。[#73382](https://github.com/ClickHouse/ClickHouse/pull/73382)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 +* 修复为 Dynamic 和 JSON 列准备压缩合并(squash)时的处理逻辑。此前在某些情况下,即使尚未达到类型 / 路径数量限制,新的类型仍可能被插入到 shared variant/shared data 中。[#73388](https://github.com/ClickHouse/ClickHouse/pull/73388)([Pavel Kruglov](https://github.com/Avogar))。 +* 在对类型进行二进制解码时检查损坏的大小信息,以避免过大的内存分配。[#73390](https://github.com/ClickHouse/ClickHouse/pull/73390) ([Pavel Kruglov](https://github.com/Avogar)). +* 修复了在启用并行副本时,从单副本集群读取数据时的逻辑错误。 [#73403](https://github.com/ClickHouse/ClickHouse/pull/73403) ([Michael Kolupaev](https://github.com/al13n321)). +* 修复在搭配 ZooKeeper 和旧版 Keeper 使用时的 ObjectStorageQueue。 [#73420](https://github.com/ClickHouse/ClickHouse/pull/73420) ([Antonio Andelic](https://github.com/antonio2368)). +* 实现了修复,使得可以默认启用 hive 分区。[#73479](https://github.com/ClickHouse/ClickHouse/pull/73479) ([Yarik Briukhovetskyi](https://github.com/yariks5s))。 +* 修复创建向量相似度索引时的数据竞争。 [#73517](https://github.com/ClickHouse/ClickHouse/pull/73517) ([Antonio Andelic](https://github.com/antonio2368)). +* 修复了当字典的源包含数据错误的函数时导致的段错误(segfault)。 [#73535](https://github.com/ClickHouse/ClickHouse/pull/73535) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* 修复 storage S3(Azure)Queue 中插入失败后的重试机制。关闭关联问题 [#70951](https://github.com/ClickHouse/ClickHouse/issues/70951)。[#73546](https://github.com/ClickHouse/ClickHouse/pull/73546)([Kseniia Sumarokova](https://github.com/kssenii))。 +* 修复了在启用 `optimize_functions_to_subcolumns` 设置时,对于包含 `LowCardinality` 元素的元组,函数 `tupleElement` 在某些情况下可能出现的错误。[#73548](https://github.com/ClickHouse/ClickHouse/pull/73548) ([Anton Popov](https://github.com/CurtizJ))。 +* 修复在枚举 `glob` 之后紧跟 `range one` 时的解析问题。修复 [#73473](https://github.com/ClickHouse/ClickHouse/issues/73473)。[#73569](https://github.com/ClickHouse/ClickHouse/pull/73569)([Konstantin Bogdanov](https://github.com/thevar1able))。 +* 修复在非复制表的子查询中忽略 parallel_replicas_for_non_replicated_merge_tree 设置的问题。 [#73584](https://github.com/ClickHouse/ClickHouse/pull/73584) ([Igor Nikonov](https://github.com/devcrafter)). +* 修复在任务无法调度时抛出的 `std::logical_error`。该问题在压力测试中被发现。[#73629](https://github.com/ClickHouse/ClickHouse/pull/73629) ([Alexander Gololobov](https://github.com/davenger))。 +* 在 `EXPLAIN SYNTAX` 中不要对查询进行语义解释,以避免因对分布式查询选择了错误的处理阶段而导致逻辑错误。修复了 [#65205](https://github.com/ClickHouse/ClickHouse/issues/65205)。[#73634](https://github.com/ClickHouse/ClickHouse/pull/73634)([Dmitry Novik](https://github.com/novikd))。 +* 修复 Dynamic 列中可能的数据不一致问题。修复可能出现的逻辑错误 `Nested columns sizes are inconsistent with local_discriminators column size`。 [#73644](https://github.com/ClickHouse/ClickHouse/pull/73644) ([Pavel Kruglov](https://github.com/Avogar))。 +* 修复了在带有 `FINAL` 和 `SAMPLE` 的查询中出现的 `NOT_FOUND_COLUMN_IN_BLOCK` 错误。修复了在从 `CollapsingMergeTree` 读取数据时使用 `FINAL` 的查询结果不正确的问题,并启用了针对 `FINAL` 的优化。[#73682](https://github.com/ClickHouse/ClickHouse/pull/73682) ([Anton Popov](https://github.com/CurtizJ))。 * 修复在 LIMIT BY COLUMNS 子句中的崩溃问题。[#73686](https://github.com/ClickHouse/ClickHouse/pull/73686) ([Raúl Marín](https://github.com/Algunenano)). -* 修复了一个错误:在被强制使用普通投影且查询与该投影的定义完全相同时,却没有选中该投影,从而导致报错。 [#73700](https://github.com/ClickHouse/ClickHouse/pull/73700) ([Shichao Jin](https://github.com/jsc0218)). -* 修复 Dynamic/Object 结构的反序列化问题。这可能会导致 CANNOT_READ_ALL_DATA 异常。 [#73767](https://github.com/ClickHouse/ClickHouse/pull/73767) ([Pavel Kruglov](https://github.com/Avogar)). -* 在从备份恢复数据分片时跳过 `metadata_version.txt`。 [#73768](https://github.com/ClickHouse/ClickHouse/pull/73768) ([Vitaly Baranov](https://github.com/vitlibar)). -* 修复在使用 LIKE 进行 Enum 类型转换时出现的段错误。 [#73775](https://github.com/ClickHouse/ClickHouse/pull/73775) ([zhanglistar](https://github.com/zhanglistar)). -* 修复 S3 Express 存储桶无法作为磁盘使用的问题。 [#73777](https://github.com/ClickHouse/ClickHouse/pull/73777) ([Sameer Tamsekar](https://github.com/stamsekar))。 -* 允许在 CollapsingMergeTree 表中合并具有无效的 sign 列值的行。[#73864](https://github.com/ClickHouse/ClickHouse/pull/73864) ([Christoph Wurm](https://github.com/cwurm))。 -* 修复在存在离线副本时执行 DDL 查询出错的问题。 [#73876](https://github.com/ClickHouse/ClickHouse/pull/73876) ([Tuan Pham Anh](https://github.com/tuanpach)). -* 修复了在比较 `map()` 类型时偶发失败的问题,该问题是由于可以创建其嵌套 tuple 中缺少显式字段命名('keys'、'values')的 `Map` 类型所致。 [#73878](https://github.com/ClickHouse/ClickHouse/pull/73878) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy))。 -* 在解析 `GROUP BY ALL` 子句时忽略窗口函数。修复 [#73501](https://github.com/ClickHouse/ClickHouse/issues/73501)。 [#73916](https://github.com/ClickHouse/ClickHouse/pull/73916)([Dmitry Novik](https://github.com/novikd))。 -* 修复隐式权限(之前的行为等同于通配符)。 [#73932](https://github.com/ClickHouse/ClickHouse/pull/73932) ([Azat Khuzhin](https://github.com/azat)). -* 修复创建嵌套 Map 时的高内存使用问题。[#73982](https://github.com/ClickHouse/ClickHouse/pull/73982) ([Pavel Kruglov](https://github.com/Avogar))。 -* 修复解析包含空键名的嵌套 JSON。 [#73993](https://github.com/ClickHouse/ClickHouse/pull/73993) ([Pavel Kruglov](https://github.com/Avogar))。 -* 修复:当某个别名被另一个别名引用且在选择时顺序相反时,该别名可能不会被添加到投影中。[#74033](https://github.com/ClickHouse/ClickHouse/pull/74033) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy))。 -* 在初始化 plain_rewritable 磁盘期间,忽略 Azure 的 “object not found”(对象未找到)错误。[#74059](https://github.com/ClickHouse/ClickHouse/pull/74059) ([Julia Kartseva](https://github.com/jkartseva))。 -* 修复在处理枚举类型和空表时 `any` 与 `anyLast` 的行为。 [#74061](https://github.com/ClickHouse/ClickHouse/pull/74061) ([Joanna Hulboj](https://github.com/jh0x)). -* 修复了用户在 Kafka 表引擎中指定关键字参数时出现的问题。 [#74064](https://github.com/ClickHouse/ClickHouse/pull/74064) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). -* 修复在修改存储 `S3Queue` 设置时,在带有 "s3queue_" 前缀和不带此前缀之间切换时的问题。[#74075](https://github.com/ClickHouse/ClickHouse/pull/74075) ([Kseniia Sumarokova](https://github.com/kssenii)). -* 添加名为 `allow_push_predicate_ast_for_distributed_subqueries` 的设置。为使用 analyzer 的分布式查询增加了基于 AST 的谓词下推支持。这是一个临时方案,将在支持带有查询计划序列化的分布式查询之前使用。修复 [#66878](https://github.com/ClickHouse/ClickHouse/issues/66878) [#69472](https://github.com/ClickHouse/ClickHouse/issues/69472) [#65638](https://github.com/ClickHouse/ClickHouse/issues/65638) [#68030](https://github.com/ClickHouse/ClickHouse/issues/68030) [#73718](https://github.com/ClickHouse/ClickHouse/issues/73718)。[#74085](https://github.com/ClickHouse/ClickHouse/pull/74085)([Nikolai Kochetov](https://github.com/KochetovNicolai))。 -* 修复了在 [#73095](https://github.com/ClickHouse/ClickHouse/issues/73095) 之后,`forwarded_for` 字段中可能包含端口号,从而导致无法解析包含端口号的主机名的问题。[#74116](https://github.com/ClickHouse/ClickHouse/pull/74116)([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy))。 -* 修复了 `ALTER TABLE (DROP STATISTICS ...) (DROP STATISTICS ...)` 的格式错误。 [#74126](https://github.com/ClickHouse/ClickHouse/pull/74126) ([Han Fei](https://github.com/hanfei1991)). -* 修复了问题 [#66112](https://github.com/ClickHouse/ClickHouse/issues/66112)。[#74128](https://github.com/ClickHouse/ClickHouse/pull/74128)([Anton Ivashkin](https://github.com/ianton-ru))。 -* 在 `CREATE TABLE` 中不再允许将 `Loop` 用作表引擎。此前这种组合曾导致段错误。[#74137](https://github.com/ClickHouse/ClickHouse/pull/74137)([Yarik Briukhovetskyi](https://github.com/yariks5s))。 -* 修复安全问题,防止在 PostgreSQL 和 SQLite 表函数中发生 SQL 注入。 [#74144](https://github.com/ClickHouse/ClickHouse/pull/74144) ([Pablo Marcos](https://github.com/pamarcos)). -* 修复了从压缩的 Memory 引擎表中读取子列时发生的崩溃。修复了问题 [#74009](https://github.com/ClickHouse/ClickHouse/issues/74009)。[#74161](https://github.com/ClickHouse/ClickHouse/pull/74161)([Nikita Taranov](https://github.com/nickitat))。 -* 修复了在查询 system.detached_tables 时出现的无限循环问题。[#74190](https://github.com/ClickHouse/ClickHouse/pull/74190) ([Konstantin Morozov](https://github.com/k-morozov)). -* 修复在将文件标记为失败时 s3queue 中的逻辑错误。 [#74216](https://github.com/ClickHouse/ClickHouse/pull/74216) ([Kseniia Sumarokova](https://github.com/kssenii))。 +* 修复了这样一个 Bug:在强制使用普通 projection 时,即使查询与定义的 projection 完全相同,却没有选中该 projection,导致报错的问题。 [#73700](https://github.com/ClickHouse/ClickHouse/pull/73700) ([Shichao Jin](https://github.com/jsc0218)). +* 修复 Dynamic/Object 结构的反序列化问题。该问题可能会导致出现 CANNOT_READ_ALL_DATA 异常。[#73767](https://github.com/ClickHouse/ClickHouse/pull/73767) ([Pavel Kruglov](https://github.com/Avogar)). +* 在从备份恢复分片时跳过 `metadata_version.txt` 文件。[#73768](https://github.com/ClickHouse/ClickHouse/pull/73768)([Vitaly Baranov](https://github.com/vitlibar))。 +* 修复在使用 LIKE 将值 Cast 为 Enum 时出现的段错误。[#73775](https://github.com/ClickHouse/ClickHouse/pull/73775) ([zhanglistar](https://github.com/zhanglistar))。 +* 修复 S3 Express 存储桶无法作为磁盘使用的问题。[#73777](https://github.com/ClickHouse/ClickHouse/pull/73777)([Sameer Tamsekar](https://github.com/stamsekar))。 +* 允许在 CollapsingMergeTree 表中合并具有无效的 sign 列值的行。[#73864](https://github.com/ClickHouse/ClickHouse/pull/73864)([Christoph Wurm](https://github.com/cwurm))。 +* 修复在存在离线副本时查询 DDL 出错的问题。[#73876](https://github.com/ClickHouse/ClickHouse/pull/73876)([Tuan Pham Anh](https://github.com/tuanpach))。 +* 修复了在比较 `map()` 类型时偶发失败的问题,该问题是由于可以创建其嵌套 tuple 中未对字段('keys'、'values')进行显式命名的 `Map` 所导致。 [#73878](https://github.com/ClickHouse/ClickHouse/pull/73878) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* 在解析 `GROUP BY ALL` 子句时忽略窗口函数。修复 [#73501](https://github.com/ClickHouse/ClickHouse/issues/73501)。[#73916](https://github.com/ClickHouse/ClickHouse/pull/73916)([Dmitry Novik](https://github.com/novikd))。 +* 修复隐式权限(之前起到通配符的作用)。 [#73932](https://github.com/ClickHouse/ClickHouse/pull/73932) ([Azat Khuzhin](https://github.com/azat)). +* 修复在创建嵌套 `Map` 时的高内存占用问题。[#73982](https://github.com/ClickHouse/ClickHouse/pull/73982)([Pavel Kruglov](https://github.com/Avogar))。 +* 修复解析包含空键名的嵌套 JSON 时的问题。[#73993](https://github.com/ClickHouse/ClickHouse/pull/73993) ([Pavel Kruglov](https://github.com/Avogar)). +* 修复:当某个别名被另一个别名引用并在 SELECT 中按相反顺序被选择时,可能不会被添加到 projection 中。[#74033](https://github.com/ClickHouse/ClickHouse/pull/74033) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)). +* 在 Azure 上初始化 plain_rewritable 磁盘时忽略对象未找到错误。[#74059](https://github.com/ClickHouse/ClickHouse/pull/74059) ([Julia Kartseva](https://github.com/jkartseva))。 +* 修复 `any` 和 `anyLast` 在处理枚举类型和空表时的行为。[#74061](https://github.com/ClickHouse/ClickHouse/pull/74061) ([Joanna Hulboj](https://github.com/jh0x))。 +* 修复了当用户在 Kafka 表引擎中指定关键字参数时出现的异常情况。 [#74064](https://github.com/ClickHouse/ClickHouse/pull/74064) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* 修复在将存储引擎 `S3Queue` 的设置在带有 "s3queue_" 前缀和不带此前缀之间相互转换时的问题。 [#74075](https://github.com/ClickHouse/ClickHouse/pull/74075) ([Kseniia Sumarokova](https://github.com/kssenii)). +* 添加设置 `allow_push_predicate_ast_for_distributed_subqueries`。这为使用 analyzer 的分布式查询提供了基于 AST 的谓词下推能力。这是一个临时解决方案,在支持带查询计划序列化的分布式查询之前将采用该方案。修复 [#66878](https://github.com/ClickHouse/ClickHouse/issues/66878) [#69472](https://github.com/ClickHouse/ClickHouse/issues/69472) [#65638](https://github.com/ClickHouse/ClickHouse/issues/65638) [#68030](https://github.com/ClickHouse/ClickHouse/issues/68030) [#73718](https://github.com/ClickHouse/ClickHouse/issues/73718)。 [#74085](https://github.com/ClickHouse/ClickHouse/pull/74085) ([Nikolai Kochetov](https://github.com/KochetovNicolai))。 +* 修复了在 [#73095](https://github.com/ClickHouse/ClickHouse/issues/73095) 之后,`forwarded_for` 字段中可能包含端口,从而导致无法解析带端口的主机名的问题。[#74116](https://github.com/ClickHouse/ClickHouse/pull/74116)([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy))。 +* 修复了 `ALTER TABLE (DROP STATISTICS ...) (DROP STATISTICS ...)` 的错误格式。[#74126](https://github.com/ClickHouse/ClickHouse/pull/74126)([Han Fei](https://github.com/hanfei1991))。 +* 修复问题 [#66112](https://github.com/ClickHouse/ClickHouse/issues/66112)。[#74128](https://github.com/ClickHouse/ClickHouse/pull/74128)([Anton Ivashkin](https://github.com/ianton-ru))。 +* 在 `CREATE TABLE` 中已无法再将 `Loop` 用作表引擎。此前这种组合会导致段错误。 [#74137](https://github.com/ClickHouse/ClickHouse/pull/74137) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). +* 修复 `postgresql` 和 `sqlite` 表函数中的安全问题,防止 SQL 注入攻击。[#74144](https://github.com/ClickHouse/ClickHouse/pull/74144)([Pablo Marcos](https://github.com/pamarcos))。 +* 修复从压缩的 Memory 引擎表读取子列时发生的崩溃。修复了 [#74009](https://github.com/ClickHouse/ClickHouse/issues/74009)。[#74161](https://github.com/ClickHouse/ClickHouse/pull/74161)([Nikita Taranov](https://github.com/nickitat))。 +* 修复在查询 system.detached_tables 时出现的无限循环问题。 [#74190](https://github.com/ClickHouse/ClickHouse/pull/74190) ([Konstantin Morozov](https://github.com/k-morozov))。 +* 在将文件设置为失败状态时,修复 `s3queue` 中的逻辑错误。 [#74216](https://github.com/ClickHouse/ClickHouse/pull/74216) ([Kseniia Sumarokova](https://github.com/kssenii)). * 修复从基础备份执行 `RESTORE` 时的原生复制设置(`allow_s3_native_copy`/`allow_azure_native_copy`)。[#74286](https://github.com/ClickHouse/ClickHouse/pull/74286) ([Azat Khuzhin](https://github.com/azat)). -* 修复了当数据库中已分离表数量是 `max_block_size` 的倍数时出现的问题。 [#74289](https://github.com/ClickHouse/ClickHouse/pull/74289) ([Konstantin Morozov](https://github.com/k-morozov)). -* 修复当源端和目标端凭证不同时,通过 ObjectStorage(即 S3)进行复制操作的问题。[#74331](https://github.com/ClickHouse/ClickHouse/pull/74331) ([Azat Khuzhin](https://github.com/azat)). -* 修复在 GCS 上执行原生复制时对“在 JSON API 中使用 Rewrite 方法”的检测逻辑。[#74338](https://github.com/ClickHouse/ClickHouse/pull/74338)([Azat Khuzhin](https://github.com/azat))。 -* 修正 `BackgroundMergesAndMutationsPoolSize` 的计算错误(之前为实际值的 2 倍)。[#74509](https://github.com/ClickHouse/ClickHouse/pull/74509)([alesapin](https://github.com/alesapin))。 -* 修复在启用 Cluster Discovery 时导致 keeper watch 泄漏的问题。[#74521](https://github.com/ClickHouse/ClickHouse/pull/74521) ([RinChanNOW](https://github.com/RinChanNOWWW))。 -* 修复由 UBSan 报告的内存对齐问题 [#74512](https://github.com/ClickHouse/ClickHouse/issues/74512)。[#74534](https://github.com/ClickHouse/ClickHouse/pull/74534)([Arthur Passos](https://github.com/arthurpassos))。 -* 修复在建表过程中 KeeperMap 并发清理的逻辑。[#74568](https://github.com/ClickHouse/ClickHouse/pull/74568) ([Antonio Andelic](https://github.com/antonio2368))。 -* 在存在 `EXCEPT` 或 `INTERSECT` 时,不要在子查询中删除未使用的投影列,以保证查询结果的正确性。修复 [#73930](https://github.com/ClickHouse/ClickHouse/issues/73930)。修复 [#66465](https://github.com/ClickHouse/ClickHouse/issues/66465)。[#74577](https://github.com/ClickHouse/ClickHouse/pull/74577)([Dmitry Novik](https://github.com/novikd))。 -* 修复了在启用稀疏序列化时,跨表执行涉及 `Tuple` 列的 `INSERT SELECT` 查询的问题。[#74698](https://github.com/ClickHouse/ClickHouse/pull/74698)([Anton Popov](https://github.com/CurtizJ))。 -* Function `right` 在使用 const 负偏移量时行为不正确。 [#74701](https://github.com/ClickHouse/ClickHouse/pull/74701) ([Daniil Ivanik](https://github.com/divanik)). -* 修复由于客户端解压缩缺陷导致有时插入 gzip 压缩的数据会失败的问题。[#74707](https://github.com/ClickHouse/ClickHouse/pull/74707) ([siyuan](https://github.com/linkwk7)). -* 在使用通配符授权时执行部分撤销操作,可能会移除超出预期的权限。关闭 [#74263](https://github.com/ClickHouse/ClickHouse/issues/74263)。[#74751](https://github.com/ClickHouse/ClickHouse/pull/74751)([pufit](https://github.com/pufit))。 -* Keeper 修复:修正了从磁盘读取日志条目的问题。 [#74785](https://github.com/ClickHouse/ClickHouse/pull/74785) ([Antonio Andelic](https://github.com/antonio2368)). -* 修复了对 SYSTEM REFRESH/START/STOP VIEW 的权限检查逻辑,现在在对特定 VIEW 执行查询时,不再需要在 `*.*` 上拥有相应权限,只需对该 VIEW 拥有对应权限即可。[#74789](https://github.com/ClickHouse/ClickHouse/pull/74789) ([Alexander Tokmakov](https://github.com/tavplubix))。 -* `hasColumnInTable` 函数当前不会处理别名列。修复它,使其也能适用于别名列。[#74841](https://github.com/ClickHouse/ClickHouse/pull/74841)([Bharat Nallan](https://github.com/bharatnc))。 -* 修复在 Azure Blob Storage 中,对包含空列的表在合并数据分片期间出现的 FILE_DOESNT_EXIST 错误。[#74892](https://github.com/ClickHouse/ClickHouse/pull/74892) ([Julia Kartseva](https://github.com/jkartseva))。 -* 在连接临时表时修复投影列名问题,关闭 [#68872](https://github.com/ClickHouse/ClickHouse/issues/68872)。[#74897](https://github.com/ClickHouse/ClickHouse/pull/74897)([Vladimir Cherkasov](https://github.com/vdimir))。 - - - -#### 构建/测试/打包改进 -* 通用安装脚本现在也会在 macOS 上提示进行安装。[#74339](https://github.com/ClickHouse/ClickHouse/pull/74339) ([Alexey Milovidov](https://github.com/alexey-milovidov)). +* 修复了当数据库中分离表的数量为 max_block_size 的整数倍时出现的问题。 [#74289](https://github.com/ClickHouse/ClickHouse/pull/74289) ([Konstantin Morozov](https://github.com/k-morozov)). +* 修复通过对象存储(如 S3)进行复制时,当源端和目标端凭证不同时出现的问题。 [#74331](https://github.com/ClickHouse/ClickHouse/pull/74331) ([Azat Khuzhin](https://github.com/azat)). +* 修复在 GCS 上进行原生复制时对“在 JSON API 中使用 Rewrite 方法”的检测。[#74338](https://github.com/ClickHouse/ClickHouse/pull/74338) ([Azat Khuzhin](https://github.com/azat)). +* 修复 `BackgroundMergesAndMutationsPoolSize` 计算不正确的问题(之前计算结果为实际值的 2 倍)。[#74509](https://github.com/ClickHouse/ClickHouse/pull/74509) ([alesapin](https://github.com/alesapin))。 +* 修复在启用 Cluster Discovery 时导致 keeper watches 泄漏的问题。 [#74521](https://github.com/ClickHouse/ClickHouse/pull/74521) ([RinChanNOW](https://github.com/RinChanNOWWW)). +* 修复 UBSan 报告的内存对齐问题 [#74512](https://github.com/ClickHouse/ClickHouse/issues/74512)。[#74534](https://github.com/ClickHouse/ClickHouse/pull/74534)([Arthur Passos](https://github.com/arthurpassos))。 +* 修复在创建表时 KeeperMap 并发清理的问题。 [#74568](https://github.com/ClickHouse/ClickHouse/pull/74568) ([Antonio Andelic](https://github.com/antonio2368)). +* 当查询中包含 `EXCEPT` 或 `INTERSECT` 时,不要在子查询中删除未使用的投影列,以确保查询结果正确。修复 [#73930](https://github.com/ClickHouse/ClickHouse/issues/73930)。修复 [#66465](https://github.com/ClickHouse/ClickHouse/issues/66465)。[#74577](https://github.com/ClickHouse/ClickHouse/pull/74577)([Dmitry Novik](https://github.com/novikd))。 +* 修复了在启用稀疏序列化时,包含 `Tuple` 列的表之间执行 `INSERT SELECT` 查询时出现的问题。 [#74698](https://github.com/ClickHouse/ClickHouse/pull/74698) ([Anton Popov](https://github.com/CurtizJ)). +* 函数 `right` 在负的常量偏移量情况下行为不正确。 [#74701](https://github.com/ClickHouse/ClickHouse/pull/74701) ([Daniil Ivanik](https://github.com/divanik)). +* 修复由于客户端解压缩缺陷导致 gzip 压缩后的数据插入有时失败的问题。 [#74707](https://github.com/ClickHouse/ClickHouse/pull/74707) ([siyuan](https://github.com/linkwk7)). +* 带有通配符授权的部分撤销可能会撤销超出预期范围的权限。修复 [#74263](https://github.com/ClickHouse/ClickHouse/issues/74263)。[#74751](https://github.com/ClickHouse/ClickHouse/pull/74751)([pufit](https://github.com/pufit))。 +* Keeper 修复:修正从磁盘读取日志记录的问题。 [#74785](https://github.com/ClickHouse/ClickHouse/pull/74785) ([Antonio Andelic](https://github.com/antonio2368)). +* 修复了对 SYSTEM REFRESH/START/STOP VIEW 权限检查的逻辑,现在在对某个特定 VIEW 执行查询时,不再需要在 `*.*` 上拥有该权限,只需对该 VIEW 本身授予权限即可。 [#74789](https://github.com/ClickHouse/ClickHouse/pull/74789) ([Alexander Tokmakov](https://github.com/tavplubix)). +* `hasColumnInTable` 函数目前不会考虑别名列。对其进行修复,使其也支持别名列。 [#74841](https://github.com/ClickHouse/ClickHouse/pull/74841) ([Bharat Nallan](https://github.com/bharatnc))。 +* 修复在 Azure Blob Storage 中,对包含空列的表执行数据部分合并时出现的 FILE_DOESNT_EXIST 错误。[#74892](https://github.com/ClickHouse/ClickHouse/pull/74892)([Julia Kartseva](https://github.com/jkartseva))。 +* 在连接临时表时修正投影列名,关闭 [#68872](https://github.com/ClickHouse/ClickHouse/issues/68872)。[#74897](https://github.com/ClickHouse/ClickHouse/pull/74897)([Vladimir Cherkasov](https://github.com/vdimir))。 + +#### 构建/测试/打包优化 + +* 通用安装脚本现在即使在 macOS 上也会提示安装。[#74339](https://github.com/ClickHouse/ClickHouse/pull/74339) ([Alexey Milovidov](https://github.com/alexey-milovidov)). \ No newline at end of file